From mboxrd@z Thu Jan 1 00:00:00 1970 From: Linus Torvalds Subject: Re: [RFC PATCH 0/3] kbuild: generate intermediate C files instead of copying _shipped files Date: Sat, 19 Aug 2017 11:12:30 -0700 Message-ID: References: <1503132577-24423-1-git-send-email-yamada.masahiro@socionext.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="001a113e51265eeb7105571f30bb" Return-path: In-Reply-To: Sender: linux-kbuild-owner@vger.kernel.org To: Masahiro Yamada Cc: Sam Ravnborg , Michal Marek , Linux Kbuild mailing list , "devicetree@vger.kernel.org" , Rob Herring , Jonathan Corbet , Richard Purdie , Greg Kroah-Hartman , Andrew Morton , Mauro Carvalho Chehab , Nicholas Piggin , "open list:DOCUMENTATION" , Markus Heiser , Linux Kernel Mailing List , Frank Rowand , Rob Herring , SeongJae Park , "Yann E. MORIN" List-Id: devicetree@vger.kernel.org --001a113e51265eeb7105571f30bb Content-Type: text/plain; charset="UTF-8" On Sat, Aug 19, 2017 at 10:14 AM, Linus Torvalds wrote: > > Anybody want to look at just getting rid of the gperf use? I took a stab at it. It wasn't too bad, although I think this needs a *lot* of testing, and I think it needs checking of Makefile dependencies etc. NOTE NOTE NOTE! This may be *COMPLETELY* broken. It just happens to build for me. So when I say "it wasn't too bad", I really mean "it wasn't too bad, but I didn't spend a lot of effort on it either". Honestly, the code is better and more legible without gperf, imho. And it removes more lines than it adds - and even if you ignore changes to the shipped lines, it's only an additional 15 lines of code, It's likely not even any slower, but who the hell knows.. Do we even care? It's almost certainly faster if you compare to generating that gperf code. Linus --001a113e51265eeb7105571f30bb Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Remove-gperf-usage-from-toolchain.patch" Content-Disposition: attachment; filename="0001-Remove-gperf-usage-from-toolchain.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j6jmcwb00 RnJvbSBiYjMyOTBkOTE2OTViYjFhZTc4YWI4NmYxOGZiNGQ3YWQ4ZTVlYmNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRh dGlvbi5vcmc+CkRhdGU6IFNhdCwgMTkgQXVnIDIwMTcgMTA6MTc6MDIgLTA3MDAKU3ViamVjdDog W1BBVENIXSBSZW1vdmUgZ3BlcmYgdXNhZ2UgZnJvbSB0b29sY2hhaW4KCkl0IHR1cm5zIG91dCB0 aGF0IGdwZXJmLTMuMSBjaGFuZ2VkIHR5cGVzIGluIHRoZSBnZW5lcmF0ZWQgY29kZSBpbiB3YXlz CnRoYXQgYXJlbid0IGV2ZW4gdHJpdmlhbGx5IGRldGVjdGFibGUgd2l0aG91dCBoYXZpbmcgdG8g Z2VuZXJhdGUgYSB0ZXN0LWZpbGUuCgpJdCdzIGp1c3Qgbm90IHdvcnRoIHVzaW5nIHRvb2xzIGFu ZCBsaWJyYXJpZXMgZnJvbSBjbG93bnMgdGhhdCBkb24ndAp1bmRlcnN0YW5kIG9yIGNhcmUgYWJv dXQgY29tcGF0aWJpbGl0eS4gIFNvIGdldCByaWQgb2YgZ3BlcmYuCgpTaWduZWQtb2ZmLWJ5OiBM aW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+Ci0tLQogRG9jdW1l bnRhdGlvbi9kb250ZGlmZiAgICAgICAgICAgICAgICAgICB8ICAgMSAtCiBzY3JpcHRzL2dlbmtz eW1zL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICA0ICstCiBzY3JpcHRzL2dlbmtzeW1zL2tl eXdvcmRzLmMgICAgICAgICAgICAgIHwgIDc0ICsrKysrKysrCiBzY3JpcHRzL2dlbmtzeW1zL2tl eXdvcmRzLmdwZXJmICAgICAgICAgIHwgIDYxIC0tLS0tLS0KIHNjcmlwdHMvZ2Vua3N5bXMva2V5 d29yZHMuaGFzaC5jX3NoaXBwZWQgfCAyMzAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzY3Jp cHRzL2dlbmtzeW1zL2xleC5sICAgICAgICAgICAgICAgICAgIHwgICA4ICstCiBzY3JpcHRzL2dl bmtzeW1zL2xleC5sZXguY19zaGlwcGVkICAgICAgIHwgICA4ICstCiBzY3JpcHRzL2tjb25maWcv LmdpdGlnbm9yZSAgICAgICAgICAgICAgIHwgICAxIC0KIHNjcmlwdHMva2NvbmZpZy9NYWtlZmls ZSAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNjcmlwdHMva2NvbmZpZy9rY29uZl9pZC5jICAg ICAgICAgICAgICAgfCAgNTQgKysrKysrCiBzY3JpcHRzL2tjb25maWcvbGtjLmggICAgICAgICAg ICAgICAgICAgIHwgICAyICstCiBzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYgICAgICAgICAg ICAgIHwgIDUwIC0tLS0tLQogc2NyaXB0cy9rY29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVkICAg ICB8IDI5NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzY3JpcHRzL2tjb25maWcv emNvbmYudGFiLmNfc2hpcHBlZCAgICAgIHwgIDEwICstCiBzY3JpcHRzL2tjb25maWcvemNvbmYu eSAgICAgICAgICAgICAgICAgIHwgIDEwICstCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNTEgaW5zZXJ0 aW9ucygrKSwgNjYzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNjcmlwdHMvZ2Vu a3N5bXMva2V5d29yZHMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHNjcmlwdHMvZ2Vua3N5bXMva2V5 d29yZHMuZ3BlcmYKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRz Lmhhc2guY19zaGlwcGVkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2NyaXB0cy9rY29uZmlnL2tjb25m X2lkLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYKIGRl bGV0ZSBtb2RlIDEwMDY0NCBzY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKCmRp ZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlm ZgppbmRleCAzNThiNDdjMDZhZDQuLjIyMjhmY2M4ZTI5ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRh dGlvbi9kb250ZGlmZgorKysgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCkBAIC0yNTksNSArMjU5 LDQgQEAgd2FrZXVwLmJpbgogd2FrZXVwLmVsZgogd2FrZXVwLmxkcwogekltYWdlKgotemNvbmYu aGFzaC5jCiB6b2Zmc2V0LmgKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMvTWFrZWZpbGUg Yi9zY3JpcHRzL2dlbmtzeW1zL01ha2VmaWxlCmluZGV4IGFjYTMzYjk4YmY2My4uM2MyM2JhYjMz NjdiIDEwMDY0NAotLS0gYS9zY3JpcHRzL2dlbmtzeW1zL01ha2VmaWxlCisrKyBiL3NjcmlwdHMv Z2Vua3N5bXMvTWFrZWZpbGUKQEAgLTksNiArOSw2IEBAIEhPU1RDRkxBR1NfcGFyc2UudGFiLm8g Oj0gLUkkKHNyYykKIEhPU1RDRkxBR1NfbGV4LmxleC5vIDo9IC1JJChzcmMpCiAKICMgZGVwZW5k ZW5jaWVzIG9uIGdlbmVyYXRlZCBmaWxlcyBuZWVkIHRvIGJlIGxpc3RlZCBleHBsaWNpdGx5Ci0k KG9iaikvbGV4LmxleC5vOiAkKG9iaikva2V5d29yZHMuaGFzaC5jICQob2JqKS9wYXJzZS50YWIu aAorJChvYmopL2xleC5sZXgubzogJChvYmopL3BhcnNlLnRhYi5oCiAKLWNsZWFuLWZpbGVzCTo9 IGtleXdvcmRzLmhhc2guYyBsZXgubGV4LmMgcGFyc2UudGFiLmMgcGFyc2UudGFiLmgKK2NsZWFu LWZpbGVzCTo9IGxleC5sZXguYyBwYXJzZS50YWIuYyBwYXJzZS50YWIuaApkaWZmIC0tZ2l0IGEv c2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWY0MGJjZDE3ZDA3Ci0t LSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jCkBAIC0wLDAgKzEs NzQgQEAKK3N0YXRpYyBzdHJ1Y3QgcmVzd29yZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQg dG9rZW47Cit9IGtleXdvcmRzW10gPSB7CisJeyAiRVhQT1JUX1NZTUJPTCIsIEVYUE9SVF9TWU1C T0xfS0VZVyB9LAorCXsgIkVYUE9SVF9TWU1CT0xfR1BMIiwgRVhQT1JUX1NZTUJPTF9LRVlXIH0s CisJeyAiRVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFIiwgRVhQT1JUX1NZTUJPTF9LRVlXIH0sCisJ eyAiRVhQT1JUX1VOVVNFRF9TWU1CT0wiLCBFWFBPUlRfU1lNQk9MX0tFWVcgfSwKKwl7ICJFWFBP UlRfVU5VU0VEX1NZTUJPTF9HUEwiLCBFWFBPUlRfU1lNQk9MX0tFWVcgfSwKKwl7ICJfX2FzbSIs IEFTTV9LRVlXIH0sCisJeyAiX19hc21fXyIsIEFTTV9LRVlXIH0sCisJeyAiX19hdHRyaWJ1dGUi LCBBVFRSSUJVVEVfS0VZVyB9LAorCXsgIl9fYXR0cmlidXRlX18iLCBBVFRSSUJVVEVfS0VZVyB9 LAorCXsgIl9fY29uc3QiLCBDT05TVF9LRVlXIH0sCisJeyAiX19jb25zdF9fIiwgQ09OU1RfS0VZ VyB9LAorCXsgIl9fZXh0ZW5zaW9uX18iLCBFWFRFTlNJT05fS0VZVyB9LAorCXsgIl9faW5saW5l IiwgSU5MSU5FX0tFWVcgfSwKKwl7ICJfX2lubGluZV9fIiwgSU5MSU5FX0tFWVcgfSwKKwl7ICJf X3NpZ25lZCIsIFNJR05FRF9LRVlXIH0sCisJeyAiX19zaWduZWRfXyIsIFNJR05FRF9LRVlXIH0s CisJeyAiX190eXBlb2YiLCBUWVBFT0ZfS0VZVyB9LAorCXsgIl9fdHlwZW9mX18iLCBUWVBFT0Zf S0VZVyB9LAorCXsgIl9fdm9sYXRpbGUiLCBWT0xBVElMRV9LRVlXIH0sCisJeyAiX192b2xhdGls ZV9fIiwgVk9MQVRJTEVfS0VZVyB9LAorCXsgIl9fYnVpbHRpbl92YV9saXN0IiwgVkFfTElTVF9L RVlXIH0sCisKKwkvLyBBY2NvcmRpbmcgdG8gcnRoLCBjOTkgZGVmaW5lcyAiX0Jvb2wiLCBfX3Jl c3RyaWN0IiwgX19yZXN0cmljdF9fIiwgInJlc3RyaWN0Ii4gIEtBTworCXsgIl9Cb29sIiwgQk9P TF9LRVlXIH0sCisJeyAiX3Jlc3RyaWN0IiwgUkVTVFJJQ1RfS0VZVyB9LAorCXsgIl9fcmVzdHJp Y3RfXyIsIFJFU1RSSUNUX0tFWVcgfSwKKwl7ICJyZXN0cmljdCIsIFJFU1RSSUNUX0tFWVcgfSwK Kwl7ICJhc20iLCBBU01fS0VZVyB9LAorCisJLy8gYXR0cmlidXRlIGNvbW1lbnRlZCBvdXQgaW4g bW9kdXRpbHMgMi40LjIuICBQZW9wbGUgYXJlIHVzaW5nICdhdHRyaWJ1dGUnIGFzIGEKKwkvLyBm aWVsZCBuYW1lIHdoaWNoIGJyZWFrcyB0aGUgZ2Vua3N5bXMgcGFyc2VyLiAgSXQgaXMgbm90IGEg Z2NjIGtleXdvcmQgYW55d2F5LgorCS8vIEtBTy4gfSwKKwkvLyB7ICJhdHRyaWJ1dGUiLCBBVFRS SUJVVEVfS0VZVyB9LAorCisJeyAiYXV0byIsIEFVVE9fS0VZVyB9LAorCXsgImNoYXIiLCBDSEFS X0tFWVcgfSwKKwl7ICJjb25zdCIsIENPTlNUX0tFWVcgfSwKKwl7ICJkb3VibGUiLCBET1VCTEVf S0VZVyB9LAorCXsgImVudW0iLCBFTlVNX0tFWVcgfSwKKwl7ICJleHRlcm4iLCBFWFRFUk5fS0VZ VyB9LAorCXsgImZsb2F0IiwgRkxPQVRfS0VZVyB9LAorCXsgImlubGluZSIsIElOTElORV9LRVlX IH0sCisJeyAiaW50IiwgSU5UX0tFWVcgfSwKKwl7ICJsb25nIiwgTE9OR19LRVlXIH0sCisJeyAi cmVnaXN0ZXIiLCBSRUdJU1RFUl9LRVlXIH0sCisJeyAic2hvcnQiLCBTSE9SVF9LRVlXIH0sCisJ eyAic2lnbmVkIiwgU0lHTkVEX0tFWVcgfSwKKwl7ICJzdGF0aWMiLCBTVEFUSUNfS0VZVyB9LAor CXsgInN0cnVjdCIsIFNUUlVDVF9LRVlXIH0sCisJeyAidHlwZWRlZiIsIFRZUEVERUZfS0VZVyB9 LAorCXsgInR5cGVvZiIsIFRZUEVPRl9LRVlXIH0sCisJeyAidW5pb24iLCBVTklPTl9LRVlXIH0s CisJeyAidW5zaWduZWQiLCBVTlNJR05FRF9LRVlXIH0sCisJeyAidm9pZCIsIFZPSURfS0VZVyB9 LAorCXsgInZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZVyB9LAorfTsKKworI2RlZmluZSBOUl9LRVlX T1JEUyAoc2l6ZW9mKGtleXdvcmRzKS9zaXplb2Yoc3RydWN0IHJlc3dvcmQpKQorCitzdGF0aWMg aW50IGlzX3Jlc2VydmVkX3dvcmQocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1 bnNpZ25lZCBpbnQgbGVuKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBOUl9LRVlXT1JE UzsgaSsrKSB7CisJCXN0cnVjdCByZXN3b3JkICpyID0ga2V5d29yZHMgKyBpOworCQlpbnQgbCA9 IHN0cmxlbihyLT5uYW1lKTsKKwkJaWYgKGxlbiA9PSBsICYmICFtZW1jbXAoc3RyLCByLT5uYW1l LCBsZW4pKQorCQkJcmV0dXJuIHItPnRva2VuOworCX0KKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1n aXQgYS9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIGIvc2NyaXB0cy9nZW5rc3ltcy9r ZXl3b3Jkcy5ncGVyZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0YzRiMjM1NTg4 Li4wMDAwMDAwMDAwMDAKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZgorKysg L2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLSVsYW5ndWFnZT1BTlNJLUMKLSVkZWZpbmUgaGFz aC1mdW5jdGlvbi1uYW1lIGlzX3Jlc2VydmVkX2hhc2gKLSVkZWZpbmUgbG9va3VwLWZ1bmN0aW9u LW5hbWUgaXNfcmVzZXJ2ZWRfd29yZAotJXsKLXN0cnVjdCByZXN3b3JkOwotc3RhdGljIGNvbnN0 IHN0cnVjdCByZXN3b3JkICppc19yZXNlcnZlZF93b3JkKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0 ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7Ci0lfQotc3RydWN0IHJlc3dvcmQgeyBjb25z dCBjaGFyICpuYW1lOyBpbnQgdG9rZW47IH0KLSUlCi1FWFBPUlRfU1lNQk9MLCBFWFBPUlRfU1lN Qk9MX0tFWVcKLUVYUE9SVF9TWU1CT0xfR1BMLCBFWFBPUlRfU1lNQk9MX0tFWVcKLUVYUE9SVF9T WU1CT0xfR1BMX0ZVVFVSRSwgRVhQT1JUX1NZTUJPTF9LRVlXCi1FWFBPUlRfVU5VU0VEX1NZTUJP TCwgRVhQT1JUX1NZTUJPTF9LRVlXCi1FWFBPUlRfVU5VU0VEX1NZTUJPTF9HUEwsIEVYUE9SVF9T WU1CT0xfS0VZVwotX19hc20sIEFTTV9LRVlXCi1fX2FzbV9fLCBBU01fS0VZVwotX19hdHRyaWJ1 dGUsIEFUVFJJQlVURV9LRVlXCi1fX2F0dHJpYnV0ZV9fLCBBVFRSSUJVVEVfS0VZVwotX19jb25z dCwgQ09OU1RfS0VZVwotX19jb25zdF9fLCBDT05TVF9LRVlXCi1fX2V4dGVuc2lvbl9fLCBFWFRF TlNJT05fS0VZVwotX19pbmxpbmUsIElOTElORV9LRVlXCi1fX2lubGluZV9fLCBJTkxJTkVfS0VZ VwotX19zaWduZWQsIFNJR05FRF9LRVlXCi1fX3NpZ25lZF9fLCBTSUdORURfS0VZVwotX190eXBl b2YsIFRZUEVPRl9LRVlXCi1fX3R5cGVvZl9fLCBUWVBFT0ZfS0VZVwotX192b2xhdGlsZSwgVk9M QVRJTEVfS0VZVwotX192b2xhdGlsZV9fLCBWT0xBVElMRV9LRVlXCi1fX2J1aWx0aW5fdmFfbGlz dCwgVkFfTElTVF9LRVlXCi0jIEFjY29yZGluZyB0byBydGgsIGM5OSBkZWZpbmVzIF9Cb29sLCBf X3Jlc3RyaWN0LCBfX3Jlc3RyaWN0X18sIHJlc3RyaWN0LiAgS0FPCi1fQm9vbCwgQk9PTF9LRVlX Ci1fcmVzdHJpY3QsIFJFU1RSSUNUX0tFWVcKLV9fcmVzdHJpY3RfXywgUkVTVFJJQ1RfS0VZVwot cmVzdHJpY3QsIFJFU1RSSUNUX0tFWVcKLWFzbSwgQVNNX0tFWVcKLSMgYXR0cmlidXRlIGNvbW1l bnRlZCBvdXQgaW4gbW9kdXRpbHMgMi40LjIuICBQZW9wbGUgYXJlIHVzaW5nICdhdHRyaWJ1dGUn IGFzIGEKLSMgZmllbGQgbmFtZSB3aGljaCBicmVha3MgdGhlIGdlbmtzeW1zIHBhcnNlci4gIEl0 IGlzIG5vdCBhIGdjYyBrZXl3b3JkIGFueXdheS4KLSMgS0FPLgotIyAgIGF0dHJpYnV0ZSwgQVRU UklCVVRFX0tFWVcKLWF1dG8sIEFVVE9fS0VZVwotY2hhciwgQ0hBUl9LRVlXCi1jb25zdCwgQ09O U1RfS0VZVwotZG91YmxlLCBET1VCTEVfS0VZVwotZW51bSwgRU5VTV9LRVlXCi1leHRlcm4sIEVY VEVSTl9LRVlXCi1mbG9hdCwgRkxPQVRfS0VZVwotaW5saW5lLCBJTkxJTkVfS0VZVwotaW50LCBJ TlRfS0VZVwotbG9uZywgTE9OR19LRVlXCi1yZWdpc3RlciwgUkVHSVNURVJfS0VZVwotc2hvcnQs IFNIT1JUX0tFWVcKLXNpZ25lZCwgU0lHTkVEX0tFWVcKLXN0YXRpYywgU1RBVElDX0tFWVcKLXN0 cnVjdCwgU1RSVUNUX0tFWVcKLXR5cGVkZWYsIFRZUEVERUZfS0VZVwotdHlwZW9mLCBUWVBFT0Zf S0VZVwotdW5pb24sIFVOSU9OX0tFWVcKLXVuc2lnbmVkLCBVTlNJR05FRF9LRVlXCi12b2lkLCBW T0lEX0tFWVcKLXZvbGF0aWxlLCBWT0xBVElMRV9LRVlXCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dl bmtzeW1zL2tleXdvcmRzLmhhc2guY19zaGlwcGVkIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jk cy5oYXNoLmNfc2hpcHBlZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM4MDE4YmE3 Mzc1Li4wMDAwMDAwMDAwMDAKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5oYXNoLmNf c2hpcHBlZAorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKiBBTlNJLUMgY29kZSBw cm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC40ICovCi0vKiBDb21tYW5kLWxpbmU6IGdwZXJm IC10IC0tb3V0cHV0LWZpbGUgc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5oYXNoLmNfc2hpcHBl ZCAtYSAtQyAtRSAtZyAtayAnMSwzLCQnIC1wIC10IHNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMu Z3BlcmYgICovCi0KLSNpZiAhKCgnICcgPT0gMzIpICYmICgnIScgPT0gMzMpICYmICgnIicgPT0g MzQpICYmICgnIycgPT0gMzUpIFwKLSAgICAgICYmICgnJScgPT0gMzcpICYmICgnJicgPT0gMzgp ICYmICgnXCcnID09IDM5KSAmJiAoJygnID09IDQwKSBcCi0gICAgICAmJiAoJyknID09IDQxKSAm JiAoJyonID09IDQyKSAmJiAoJysnID09IDQzKSAmJiAoJywnID09IDQ0KSBcCi0gICAgICAmJiAo Jy0nID09IDQ1KSAmJiAoJy4nID09IDQ2KSAmJiAoJy8nID09IDQ3KSAmJiAoJzAnID09IDQ4KSBc Ci0gICAgICAmJiAoJzEnID09IDQ5KSAmJiAoJzInID09IDUwKSAmJiAoJzMnID09IDUxKSAmJiAo JzQnID09IDUyKSBcCi0gICAgICAmJiAoJzUnID09IDUzKSAmJiAoJzYnID09IDU0KSAmJiAoJzcn ID09IDU1KSAmJiAoJzgnID09IDU2KSBcCi0gICAgICAmJiAoJzknID09IDU3KSAmJiAoJzonID09 IDU4KSAmJiAoJzsnID09IDU5KSAmJiAoJzwnID09IDYwKSBcCi0gICAgICAmJiAoJz0nID09IDYx KSAmJiAoJz4nID09IDYyKSAmJiAoJz8nID09IDYzKSAmJiAoJ0EnID09IDY1KSBcCi0gICAgICAm JiAoJ0InID09IDY2KSAmJiAoJ0MnID09IDY3KSAmJiAoJ0QnID09IDY4KSAmJiAoJ0UnID09IDY5 KSBcCi0gICAgICAmJiAoJ0YnID09IDcwKSAmJiAoJ0cnID09IDcxKSAmJiAoJ0gnID09IDcyKSAm JiAoJ0knID09IDczKSBcCi0gICAgICAmJiAoJ0onID09IDc0KSAmJiAoJ0snID09IDc1KSAmJiAo J0wnID09IDc2KSAmJiAoJ00nID09IDc3KSBcCi0gICAgICAmJiAoJ04nID09IDc4KSAmJiAoJ08n ID09IDc5KSAmJiAoJ1AnID09IDgwKSAmJiAoJ1EnID09IDgxKSBcCi0gICAgICAmJiAoJ1InID09 IDgyKSAmJiAoJ1MnID09IDgzKSAmJiAoJ1QnID09IDg0KSAmJiAoJ1UnID09IDg1KSBcCi0gICAg ICAmJiAoJ1YnID09IDg2KSAmJiAoJ1cnID09IDg3KSAmJiAoJ1gnID09IDg4KSAmJiAoJ1knID09 IDg5KSBcCi0gICAgICAmJiAoJ1onID09IDkwKSAmJiAoJ1snID09IDkxKSAmJiAoJ1xcJyA9PSA5 MikgJiYgKCddJyA9PSA5MykgXAotICAgICAgJiYgKCdeJyA9PSA5NCkgJiYgKCdfJyA9PSA5NSkg JiYgKCdhJyA9PSA5NykgJiYgKCdiJyA9PSA5OCkgXAotICAgICAgJiYgKCdjJyA9PSA5OSkgJiYg KCdkJyA9PSAxMDApICYmICgnZScgPT0gMTAxKSAmJiAoJ2YnID09IDEwMikgXAotICAgICAgJiYg KCdnJyA9PSAxMDMpICYmICgnaCcgPT0gMTA0KSAmJiAoJ2knID09IDEwNSkgJiYgKCdqJyA9PSAx MDYpIFwKLSAgICAgICYmICgnaycgPT0gMTA3KSAmJiAoJ2wnID09IDEwOCkgJiYgKCdtJyA9PSAx MDkpICYmICgnbicgPT0gMTEwKSBcCi0gICAgICAmJiAoJ28nID09IDExMSkgJiYgKCdwJyA9PSAx MTIpICYmICgncScgPT0gMTEzKSAmJiAoJ3InID09IDExNCkgXAotICAgICAgJiYgKCdzJyA9PSAx MTUpICYmICgndCcgPT0gMTE2KSAmJiAoJ3UnID09IDExNykgJiYgKCd2JyA9PSAxMTgpIFwKLSAg ICAgICYmICgndycgPT0gMTE5KSAmJiAoJ3gnID09IDEyMCkgJiYgKCd5JyA9PSAxMjEpICYmICgn eicgPT0gMTIyKSBcCi0gICAgICAmJiAoJ3snID09IDEyMykgJiYgKCd8JyA9PSAxMjQpICYmICgn fScgPT0gMTI1KSAmJiAoJ34nID09IDEyNikpCi0vKiBUaGUgY2hhcmFjdGVyIHNldCBpcyBub3Qg YmFzZWQgb24gSVNPLTY0Ni4gICovCi0jZXJyb3IgImdwZXJmIGdlbmVyYXRlZCB0YWJsZXMgZG9u J3Qgd29yayB3aXRoIHRoaXMgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQuIFBsZWFzZSByZXBvcnQg YSBidWcgdG8gPGJ1Zy1nbnUtZ3BlcmZAZ251Lm9yZz4uIgotI2VuZGlmCi0KLSNsaW5lIDQgInNj cmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0KLXN0cnVjdCByZXN3b3JkOwotc3RhdGlj IGNvbnN0IHN0cnVjdCByZXN3b3JkICppc19yZXNlcnZlZF93b3JkKHJlZ2lzdGVyIGNvbnN0IGNo YXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7Ci0jbGluZSA4ICJzY3JpcHRzL2dl bmtzeW1zL2tleXdvcmRzLmdwZXJmIgotc3RydWN0IHJlc3dvcmQgeyBjb25zdCBjaGFyICpuYW1l OyBpbnQgdG9rZW47IH07Ci0vKiBtYXhpbXVtIGtleSByYW5nZSA9IDk4LCBkdXBsaWNhdGVzID0g MCAqLwotCi0jaWZkZWYgX19HTlVDX18KLV9faW5saW5lCi0jZWxzZQotI2lmZGVmIF9fY3BsdXNw bHVzCi1pbmxpbmUKLSNlbmRpZgotI2VuZGlmCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pc19yZXNl cnZlZF9oYXNoIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGlu dCBsZW4pCi17Ci0gIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFzc29fdmFsdWVzW10gPQot ICAgIHsKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs ICAgMCwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsICAxNSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgICAgMCwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAgIDAsIDEwMSwgICAwLCAgIDAs ICAgNSwKLSAgICAgICAyNSwgIDIwLCAgNTUsICAzMCwgMTAxLCAgMTUsIDEwMSwgMTAxLCAgMTAs ICAgMCwKLSAgICAgICAxMCwgIDQwLCAgMTAsIDEwMSwgIDEwLCAgIDUsICAgMCwgIDEwLCAgMTUs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEs IDEwMSwKLSAgICAgIDEwMSwgMTAxLCAxMDEsIDEwMSwgMTAxLCAxMDEKLSAgICB9OwotICByZXR1 cm4gbGVuICsgYXNzb192YWx1ZXNbKHVuc2lnbmVkIGNoYXIpc3RyWzJdXSArIGFzc29fdmFsdWVz Wyh1bnNpZ25lZCBjaGFyKXN0clswXV0gKyBhc3NvX3ZhbHVlc1sodW5zaWduZWQgY2hhcilzdHJb bGVuIC0gMV1dOwotfQotCi0jaWZkZWYgX19HTlVDX18KLV9faW5saW5lCi0jaWYgZGVmaW5lZCBf X0dOVUNfU1REQ19JTkxJTkVfXyB8fCBkZWZpbmVkIF9fR05VQ19HTlVfSU5MSU5FX18KLV9fYXR0 cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCi0jZW5kaWYKLSNlbmRpZgotY29uc3Qgc3RydWN0 IHJlc3dvcmQgKgotaXNfcmVzZXJ2ZWRfd29yZCAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCBy ZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKQotewotICBlbnVtCi0gICAgewotICAgICAgVE9UQUxf S0VZV09SRFMgPSA0NywKLSAgICAgIE1JTl9XT1JEX0xFTkdUSCA9IDMsCi0gICAgICBNQVhfV09S RF9MRU5HVEggPSAyNCwKLSAgICAgIE1JTl9IQVNIX1ZBTFVFID0gMywKLSAgICAgIE1BWF9IQVNI X1ZBTFVFID0gMTAwCi0gICAgfTsKLQotICBzdGF0aWMgY29uc3Qgc3RydWN0IHJlc3dvcmQgd29y ZGxpc3RbXSA9Ci0gICAgewotICAgICAgeyIifSwgeyIifSwgeyIifSwKLSNsaW5lIDM2ICJzY3Jp cHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJhc20iLCBBU01fS0VZV30sCi0g ICAgICB7IiJ9LAotI2xpbmUgMTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0g ICAgICB7Il9fYXNtIiwgQVNNX0tFWVd9LAotICAgICAgeyIifSwKLSNsaW5lIDE2ICJzY3JpcHRz L2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX2FzbV9fIiwgQVNNX0tFWVd9LAot ICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDI3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdw ZXJmIgotICAgICAgeyJfX3R5cGVvZl9fIiwgVFlQRU9GX0tFWVd9LAotICAgICAgeyIifSwKLSNs aW5lIDE5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX2NvbnN0 IiwgQ09OU1RfS0VZV30sCi0jbGluZSAxOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVy ZiIKLSAgICAgIHsiX19hdHRyaWJ1dGVfXyIsIEFUVFJJQlVURV9LRVlXfSwKLSNsaW5lIDIwICJz Y3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX2NvbnN0X18iLCBDT05T VF9LRVlXfSwKLSNsaW5lIDI1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAg ICAgeyJfX3NpZ25lZF9fIiwgU0lHTkVEX0tFWVd9LAotI2xpbmUgNTQgInNjcmlwdHMvZ2Vua3N5 bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InN0YXRpYyIsIFNUQVRJQ19LRVlXfSwKLSNsaW5l IDMwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX2J1aWx0aW5f dmFfbGlzdCIsIFZBX0xJU1RfS0VZV30sCi0jbGluZSA0OSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3 b3Jkcy5ncGVyZiIKLSAgICAgIHsiaW50IiwgSU5UX0tFWVd9LAotI2xpbmUgNDIgInNjcmlwdHMv Z2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7ImNoYXIiLCBDSEFSX0tFWVd9LAotI2xp bmUgNDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7ImNvbnN0Iiwg Q09OU1RfS0VZV30sCi0jbGluZSA1NSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIK LSAgICAgIHsic3RydWN0IiwgU1RSVUNUX0tFWVd9LAotI2xpbmUgMzQgInNjcmlwdHMvZ2Vua3N5 bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fcmVzdHJpY3RfXyIsIFJFU1RSSUNUX0tFWVd9 LAotI2xpbmUgMzUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InJl c3RyaWN0IiwgUkVTVFJJQ1RfS0VZV30sCi0jbGluZSAxMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3 b3Jkcy5ncGVyZiIKLSAgICAgIHsiRVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFIiwgRVhQT1JUX1NZ TUJPTF9LRVlXfSwKLSNsaW5lIDIzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgot ICAgICAgeyJfX2lubGluZV9fIiwgSU5MSU5FX0tFWVd9LAotICAgICAgeyIifSwKLSNsaW5lIDI5 ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfX3ZvbGF0aWxlX18i LCBWT0xBVElMRV9LRVlXfSwKLSNsaW5lIDEwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdw ZXJmIgotICAgICAgeyJFWFBPUlRfU1lNQk9MIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKLSNsaW5l IDMzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJfcmVzdHJpY3Qi LCBSRVNUUklDVF9LRVlXfSwKLSAgICAgIHsiIn0sCi0jbGluZSAxNyAic2NyaXB0cy9nZW5rc3lt cy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiX19hdHRyaWJ1dGUiLCBBVFRSSUJVVEVfS0VZV30s Ci0jbGluZSAxMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiRVhQ T1JUX1NZTUJPTF9HUEwiLCBFWFBPUlRfU1lNQk9MX0tFWVd9LAotI2xpbmUgMjEgInNjcmlwdHMv Z2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fZXh0ZW5zaW9uX18iLCBFWFRFTlNJ T05fS0VZV30sCi0jbGluZSA0NSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAg ICAgIHsiZW51bSIsIEVOVU1fS0VZV30sCi0jbGluZSAxMyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3 b3Jkcy5ncGVyZiIKLSAgICAgIHsiRVhQT1JUX1VOVVNFRF9TWU1CT0wiLCBFWFBPUlRfU1lNQk9M X0tFWVd9LAotI2xpbmUgNDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAg ICB7ImV4dGVybiIsIEVYVEVSTl9LRVlXfSwKLSAgICAgIHsiIn0sCi0jbGluZSAyNCAic2NyaXB0 cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiX19zaWduZWQiLCBTSUdORURfS0VZ V30sCi0jbGluZSAxNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsi RVhQT1JUX1VOVVNFRF9TWU1CT0xfR1BMIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKLSNsaW5lIDU4 ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJ1bmlvbiIsIFVOSU9O X0tFWVd9LAotICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDIyICJzY3JpcHRzL2dlbmtzeW1zL2tl eXdvcmRzLmdwZXJmIgotICAgICAgeyJfX2lubGluZSIsIElOTElORV9LRVlXfSwKLSNsaW5lIDQx ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJhdXRvIiwgQVVUT19L RVlXfSwKLSNsaW5lIDI4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAg eyJfX3ZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCi0gICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUg NTkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InVuc2lnbmVkIiwg VU5TSUdORURfS0VZV30sCi0gICAgICB7IiJ9LAotI2xpbmUgNTIgInNjcmlwdHMvZ2Vua3N5bXMv a2V5d29yZHMuZ3BlcmYiCi0gICAgICB7InNob3J0IiwgU0hPUlRfS0VZV30sCi0jbGluZSA0OCAi c2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiaW5saW5lIiwgSU5MSU5F X0tFWVd9LAotICAgICAgeyIifSwKLSNsaW5lIDYxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRz LmdwZXJmIgotICAgICAgeyJ2b2xhdGlsZSIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgNTAgInNj cmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7ImxvbmciLCBMT05HX0tFWVd9 LAotI2xpbmUgMzIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9C b29sIiwgQk9PTF9LRVlXfSwKLSAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA1MSAic2NyaXB0cy9n ZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsicmVnaXN0ZXIiLCBSRUdJU1RFUl9LRVlX fSwKLSNsaW5lIDYwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJ2 b2lkIiwgVk9JRF9LRVlXfSwKLSAgICAgIHsiIn0sCi0jbGluZSA0NCAic2NyaXB0cy9nZW5rc3lt cy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiZG91YmxlIiwgRE9VQkxFX0tFWVd9LAotICAgICAg eyIifSwKLSNsaW5lIDI2ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAg eyJfX3R5cGVvZiIsIFRZUEVPRl9LRVlXfSwKLSAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA1MyAi c2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsic2lnbmVkIiwgU0lHTkVE X0tFWVd9LAotICAgICAgeyIifSwgeyIifSwgeyIifSwgeyIifSwKLSNsaW5lIDU3ICJzY3JpcHRz L2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgotICAgICAgeyJ0eXBlb2YiLCBUWVBFT0ZfS0VZV30s Ci0jbGluZSA1NiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsidHlw ZWRlZiIsIFRZUEVERUZfS0VZV30sCi0gICAgICB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9 LCB7IiJ9LCB7IiJ9LCB7IiJ9LCB7IiJ9LAotICAgICAgeyIifSwgeyIifSwgeyIifSwgeyIifSwg eyIifSwgeyIifSwgeyIifSwgeyIifSwgeyIifSwKLSAgICAgIHsiIn0sIHsiIn0sIHsiIn0sIHsi In0sIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sIHsiIn0sCi0jbGluZSA0NyAic2NyaXB0cy9nZW5r c3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiZmxvYXQiLCBGTE9BVF9LRVlXfQotICAgIH07 Ci0KLSAgaWYgKGxlbiA8PSBNQVhfV09SRF9MRU5HVEggJiYgbGVuID49IE1JTl9XT1JEX0xFTkdU SCkKLSAgICB7Ci0gICAgICByZWdpc3RlciBpbnQga2V5ID0gaXNfcmVzZXJ2ZWRfaGFzaCAoc3Ry LCBsZW4pOwotCi0gICAgICBpZiAoa2V5IDw9IE1BWF9IQVNIX1ZBTFVFICYmIGtleSA+PSAwKQot ICAgICAgICB7Ci0gICAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqcyA9IHdvcmRsaXN0W2tl eV0ubmFtZTsKLQotICAgICAgICAgIGlmICgqc3RyID09ICpzICYmICFzdHJjbXAgKHN0ciArIDEs IHMgKyAxKSkKLSAgICAgICAgICAgIHJldHVybiAmd29yZGxpc3Rba2V5XTsKLSAgICAgICAgfQot ICAgIH0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9zY3JpcHRzL2dlbmtzeW1zL2xleC5s IGIvc2NyaXB0cy9nZW5rc3ltcy9sZXgubAppbmRleCA1MjM1YWE1MDdiYTUuLjVkYzI1ZWUwMWM3 NyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9sZXgubAorKysgYi9zY3JpcHRzL2dlbmtz eW1zL2xleC5sCkBAIC05NCw3ICs5NCw3IEBAIE1DX1RPS0VOCQkoW34lXiYqKz18PD4vLV09KXwo JiYpfCgifHwiKXwoLT4pfCg8PCl8KD4+KQogCiAvKiBCcmluZyBpbiB0aGUga2V5d29yZCByZWNv Z25pemVyLiAgKi8KIAotI2luY2x1ZGUgImtleXdvcmRzLmhhc2guYyIKKyNpbmNsdWRlICJrZXl3 b3Jkcy5jIgogCiAKIC8qIE1hY3JvcyB0byBhcHBlbmQgdG8gb3VyIHBocmFzZSBjb2xsZWN0aW9u IGxpc3QuICAqLwpAQCAtMTg2LDEwICsxODYsMTAgQEAgcmVwZWF0OgogCWNhc2UgSURFTlQ6CiAJ ICBBUFA7CiAJICB7Ci0JICAgIGNvbnN0IHN0cnVjdCByZXN3b3JkICpyID0gaXNfcmVzZXJ2ZWRf d29yZCh5eXRleHQsIHl5bGVuZyk7Ci0JICAgIGlmIChyKQorCSAgICBpbnQgciA9IGlzX3Jlc2Vy dmVkX3dvcmQoeXl0ZXh0LCB5eWxlbmcpOworCSAgICBpZiAociA+PSAwKQogCSAgICAgIHsKLQkJ c3dpdGNoICh0b2tlbiA9IHItPnRva2VuKQorCQlzd2l0Y2ggKHRva2VuID0gcikKIAkJICB7CiAJ CSAgY2FzZSBBVFRSSUJVVEVfS0VZVzoKIAkJICAgIGxleHN0YXRlID0gU1RfQVRUUklCVVRFOwpk aWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9sZXgubGV4LmNfc2hpcHBlZCBiL3NjcmlwdHMv Z2Vua3N5bXMvbGV4LmxleC5jX3NoaXBwZWQKaW5kZXggOTg1YzU1NDFhYWU0Li5kNWE3NDc0YjNl NTcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2Vua3N5bXMvbGV4LmxleC5jX3NoaXBwZWQKKysrIGIv c2NyaXB0cy9nZW5rc3ltcy9sZXgubGV4LmNfc2hpcHBlZApAQCAtMTkwNSw3ICsxOTA1LDcgQEAg dm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgKQogCiAvKiBCcmluZyBpbiB0aGUga2V5d29yZCByZWNv Z25pemVyLiAgKi8KIAotI2luY2x1ZGUgImtleXdvcmRzLmhhc2guYyIKKyNpbmNsdWRlICJrZXl3 b3Jkcy5jIgogCiAvKiBNYWNyb3MgdG8gYXBwZW5kIHRvIG91ciBwaHJhc2UgY29sbGVjdGlvbiBs aXN0LiAgKi8KIApAQCAtMTk5NSwxMCArMTk5NSwxMCBAQCByZXBlYXQ6CiAJY2FzZSBJREVOVDoK IAkgIEFQUDsKIAkgIHsKLQkgICAgY29uc3Qgc3RydWN0IHJlc3dvcmQgKnIgPSBpc19yZXNlcnZl ZF93b3JkKHl5dGV4dCwgeXlsZW5nKTsKLQkgICAgaWYgKHIpCisJICAgIGludCByID0gaXNfcmVz ZXJ2ZWRfd29yZCh5eXRleHQsIHl5bGVuZyk7CisJICAgIGlmIChyID49IDApCiAJICAgICAgewot CQlzd2l0Y2ggKHRva2VuID0gci0+dG9rZW4pCisJCXN3aXRjaCAodG9rZW4gPSByKQogCQkgIHsK IAkJICBjYXNlIEFUVFJJQlVURV9LRVlXOgogCQkgICAgbGV4c3RhdGUgPSBTVF9BVFRSSUJVVEU7 CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZSBiL3NjcmlwdHMva2NvbmZp Zy8uZ2l0aWdub3JlCmluZGV4IGJlNjAzYzRmZWY2Mi4uNTFmMWM4NzdiNTQzIDEwMDY0NAotLS0g YS9zY3JpcHRzL2tjb25maWcvLmdpdGlnbm9yZQorKysgYi9zY3JpcHRzL2tjb25maWcvLmdpdGln bm9yZQpAQCAtNSw3ICs1LDYgQEAgY29uZmlnKgogKi5sZXguYwogKi50YWIuYwogKi50YWIuaAot emNvbmYuaGFzaC5jCiAqLm1vYwogZ2NvbmYuZ2xhZGUuaAogKi5wb3QKZGlmZiAtLWdpdCBhL3Nj cmlwdHMva2NvbmZpZy9NYWtlZmlsZSBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQppbmRleCBl YjgxNDQ2NDNiNzguLjhjMTJjMjBjNTVhNiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL01h a2VmaWxlCisrKyBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQpAQCAtMTkxLDcgKzE5MSw3IEBA IGdjb25mLW9ianMJOj0gZ2NvbmYubyB6Y29uZi50YWIubwogaG9zdHByb2dzLXkgOj0gY29uZiBu Y29uZiBtY29uZiBreGdldHRleHQgcWNvbmYgZ2NvbmYKIAogY2xlYW4tZmlsZXMJOj0gcWNvbmYu bW9jIC50bXBfcXRjaGVjayAudG1wX2d0a2NoZWNrCi1jbGVhbi1maWxlcwkrPSB6Y29uZi50YWIu YyB6Y29uZi5sZXguYyB6Y29uZi5oYXNoLmMgZ2NvbmYuZ2xhZGUuaAorY2xlYW4tZmlsZXMJKz0g emNvbmYudGFiLmMgemNvbmYubGV4LmMgZ2NvbmYuZ2xhZGUuaAogY2xlYW4tZmlsZXMgICAgICs9 IGNvbmZpZy5wb3QgbGludXgucG90CiAKICMgQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSByZXF1aXJl ZCBuY3Vyc2VzIHN0dWZmIGluc3RhbGxlZCBmb3IgbHhkaWFsb2cgKG1lbnVjb25maWcpCkBAIC0y ODAsNyArMjgwLDcgQEAgJChvYmopLy50bXBfZ3RrY2hlY2s6CiAJZmkKIGVuZGlmCiAKLSQob2Jq KS96Y29uZi50YWIubzogJChvYmopL3pjb25mLmxleC5jICQob2JqKS96Y29uZi5oYXNoLmMKKyQo b2JqKS96Y29uZi50YWIubzogJChvYmopL3pjb25mLmxleC5jCiAKICQob2JqKS9xY29uZi5vOiAk KG9iaikvcWNvbmYubW9jCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9rY29uZl9pZC5j IGIvc2NyaXB0cy9rY29uZmlnL2tjb25mX2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi41YWJiYzcyOGZiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2tj b25maWcva2NvbmZfaWQuYwpAQCAtMCwwICsxLDU0IEBACisKK3N0YXRpYyBzdHJ1Y3Qga2NvbmZf aWQga2NvbmZfaWRfYXJyYXlbXSA9IHsKKwl7ICJtYWlubWVudSIsCQlUX01BSU5NRU5VLAkJVEZf Q09NTUFORCB9LAorCXsgIm1lbnUiLAkJVF9NRU5VLAkJCVRGX0NPTU1BTkQgfSwKKwl7ICJlbmRt ZW51IiwJCVRfRU5ETUVOVSwJCVRGX0NPTU1BTkQgfSwKKwl7ICJzb3VyY2UiLAkJVF9TT1VSQ0Us CQlURl9DT01NQU5EIH0sCisJeyAiY2hvaWNlIiwJCVRfQ0hPSUNFLAkJVEZfQ09NTUFORCB9LAor CXsgImVuZGNob2ljZSIsCQlUX0VORENIT0lDRSwJCVRGX0NPTU1BTkQgfSwKKwl7ICJjb21tZW50 IiwJCVRfQ09NTUVOVCwJCVRGX0NPTU1BTkQgfSwKKwl7ICJjb25maWciLAkJVF9DT05GSUcsCQlU Rl9DT01NQU5EIH0sCisJeyAibWVudWNvbmZpZyIsCQlUX01FTlVDT05GSUcsCQlURl9DT01NQU5E IH0sCisJeyAiaGVscCIsCQlUX0hFTFAsCQkJVEZfQ09NTUFORCB9LAorCXsgIi0tLWhlbHAtLS0i LAkJVF9IRUxQLAkJCVRGX0NPTU1BTkQgfSwKKwl7ICJpZiIsCQkJVF9JRiwJCQlURl9DT01NQU5E fFRGX1BBUkFNIH0sCisJeyAiZW5kaWYiLAkJVF9FTkRJRiwJCVRGX0NPTU1BTkQgfSwKKwl7ICJk ZXBlbmRzIiwJCVRfREVQRU5EUywJCVRGX0NPTU1BTkQgfSwKKwl7ICJvcHRpb25hbCIsCQlUX09Q VElPTkFMLAkJVEZfQ09NTUFORCB9LAorCXsgImRlZmF1bHQiLAkJVF9ERUZBVUxULAkJVEZfQ09N TUFORCwgU19VTktOT1dOIH0sCisJeyAicHJvbXB0IiwJCVRfUFJPTVBULAkJVEZfQ09NTUFORCB9 LAorCXsgInRyaXN0YXRlIiwJCVRfVFlQRSwJCQlURl9DT01NQU5ELCBTX1RSSVNUQVRFIH0sCisJ eyAiZGVmX3RyaXN0YXRlIiwJVF9ERUZBVUxULAkJVEZfQ09NTUFORCwgU19UUklTVEFURSB9LAor CXsgImJvb2wiLAkJVF9UWVBFLAkJCVRGX0NPTU1BTkQsIFNfQk9PTEVBTiB9LAorCXsgImJvb2xl YW4iLAkJVF9UWVBFLAkJCVRGX0NPTU1BTkQsIFNfQk9PTEVBTiB9LAorCXsgImRlZl9ib29sIiwJ CVRfREVGQVVMVCwJCVRGX0NPTU1BTkQsIFNfQk9PTEVBTiB9LAorCXsgImludCIsCQlUX1RZUEUs CQkJVEZfQ09NTUFORCwgU19JTlQgfSwKKwl7ICJoZXgiLAkJVF9UWVBFLAkJCVRGX0NPTU1BTkQs IFNfSEVYIH0sCisJeyAic3RyaW5nIiwJCVRfVFlQRSwJCQlURl9DT01NQU5ELCBTX1NUUklORyB9 LAorCXsgInNlbGVjdCIsCQlUX1NFTEVDVCwJCVRGX0NPTU1BTkQgfSwKKwl7ICJpbXBseSIsCQlU X0lNUExZLAkJVEZfQ09NTUFORCB9LAorCXsgInJhbmdlIiwJCVRfUkFOR0UsCQlURl9DT01NQU5E IH0sCisJeyAidmlzaWJsZSIsCQlUX1ZJU0lCTEUsCQlURl9DT01NQU5EIH0sCisJeyAib3B0aW9u IiwJCVRfT1BUSU9OLAkJVEZfQ09NTUFORCB9LAorCXsgIm9uIiwJCQlUX09OLAkJCVRGX1BBUkFN IH0sCisJeyAibW9kdWxlcyIsCQlUX09QVF9NT0RVTEVTLAkJVEZfT1BUSU9OIH0sCisJeyAiZGVm Y29uZmlnX2xpc3QiLAlUX09QVF9ERUZDT05GSUdfTElTVCwJVEZfT1BUSU9OIH0sCisJeyAiZW52 IiwJCVRfT1BUX0VOViwJCVRGX09QVElPTiB9LAorCXsgImFsbG5vY29uZmlnX3kiLAlUX09QVF9B TExOT0NPTkZJR19ZLAlURl9PUFRJT04gfSwKK307CisKKyNkZWZpbmUgS0NPTkZfSURfQVJSQVlf U0laRSAoc2l6ZW9mKGtjb25mX2lkX2FycmF5KS9zaXplb2Yoc3RydWN0IGtjb25mX2lkKSkKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBrY29uZl9pZCAqa2NvbmZfaWRfbG9va3VwKHJlZ2lzdGVyIGNv bnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaTsKKwor CWZvciAoaSA9IDA7IGkgPCBLQ09ORl9JRF9BUlJBWV9TSVpFOyBpKyspIHsKKwkJc3RydWN0IGtj b25mX2lkICppZCA9IGtjb25mX2lkX2FycmF5K2k7CisJCWludCBsID0gc3RybGVuKGlkLT5uYW1l KTsKKworCQlpZiAobGVuID09IGwgJiYgIW1lbWNtcChzdHIsIGlkLT5uYW1lLCBsZW4pKQorCQkJ cmV0dXJuIGlkOworCX0KKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2Nv bmZpZy9sa2MuaCBiL3NjcmlwdHMva2NvbmZpZy9sa2MuaAppbmRleCA5MWNhMTI2ZWEwODAuLmNk Y2JlNDNlODdiMyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2xrYy5oCisrKyBiL3Njcmlw dHMva2NvbmZpZy9sa2MuaApAQCAtNjIsNyArNjIsNyBAQCBlbnVtIGNvbmZfZGVmX21vZGUgewog I2RlZmluZSBUX09QVF9BTExOT0NPTkZJR19ZCTQKIAogc3RydWN0IGtjb25mX2lkIHsKLQlpbnQg bmFtZTsKKwljb25zdCBjaGFyICpuYW1lOwogCWludCB0b2tlbjsKIAl1bnNpZ25lZCBpbnQgZmxh Z3M7CiAJZW51bSBzeW1ib2xfdHlwZSBzdHlwZTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZp Zy96Y29uZi5ncGVyZiBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZgpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggZWFkMDJlZGVjOTM2Li4wMDAwMDAwMDAwMDAKLS0tIGEvc2NyaXB0 cy9rY29uZmlnL3pjb25mLmdwZXJmCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotJWxh bmd1YWdlPUFOU0ktQwotJWRlZmluZSBoYXNoLWZ1bmN0aW9uLW5hbWUga2NvbmZfaWRfaGFzaAot JWRlZmluZSBsb29rdXAtZnVuY3Rpb24tbmFtZSBrY29uZl9pZF9sb29rdXAKLSVkZWZpbmUgc3Ry aW5nLXBvb2wtbmFtZSBrY29uZl9pZF9zdHJpbmdzCi0lY29tcGFyZS1zdHJuY21wCi0lZW51bQot JXBpYwotJXN0cnVjdC10eXBlCi0KLXN0cnVjdCBrY29uZl9pZDsKLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBrY29uZl9pZCAqa2NvbmZfaWRfbG9va3VwKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwg cmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7Ci0KLSUlCi1tYWlubWVudSwJVF9NQUlOTUVOVSwJ VEZfQ09NTUFORAotbWVudSwJCVRfTUVOVSwJCVRGX0NPTU1BTkQKLWVuZG1lbnUsCVRfRU5ETUVO VSwJVEZfQ09NTUFORAotc291cmNlLAkJVF9TT1VSQ0UsCVRGX0NPTU1BTkQKLWNob2ljZSwJCVRf Q0hPSUNFLAlURl9DT01NQU5ECi1lbmRjaG9pY2UsCVRfRU5EQ0hPSUNFLAlURl9DT01NQU5ECi1j b21tZW50LAlUX0NPTU1FTlQsCVRGX0NPTU1BTkQKLWNvbmZpZywJCVRfQ09ORklHLAlURl9DT01N QU5ECi1tZW51Y29uZmlnLAlUX01FTlVDT05GSUcsCVRGX0NPTU1BTkQKLWhlbHAsCQlUX0hFTFAs CQlURl9DT01NQU5ECi0tLS1oZWxwLS0tLAlUX0hFTFAsCQlURl9DT01NQU5ECi1pZiwJCVRfSUYs CQlURl9DT01NQU5EfFRGX1BBUkFNCi1lbmRpZiwJCVRfRU5ESUYsCVRGX0NPTU1BTkQKLWRlcGVu ZHMsCVRfREVQRU5EUywJVEZfQ09NTUFORAotb3B0aW9uYWwsCVRfT1BUSU9OQUwsCVRGX0NPTU1B TkQKLWRlZmF1bHQsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwgU19VTktOT1dOCi1wcm9tcHQsCQlU X1BST01QVCwJVEZfQ09NTUFORAotdHJpc3RhdGUsCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfVFJJ U1RBVEUKLWRlZl90cmlzdGF0ZSwJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX1RSSVNUQVRFCi1i b29sLAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19CT09MRUFOCi1ib29sZWFuLAlUX1RZUEUsCQlU Rl9DT01NQU5ELCBTX0JPT0xFQU4KLWRlZl9ib29sLAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNf Qk9PTEVBTgotaW50LAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19JTlQKLWhleCwJCVRfVFlQRSwJ CVRGX0NPTU1BTkQsIFNfSEVYCi1zdHJpbmcsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX1NUUklO Rwotc2VsZWN0LAkJVF9TRUxFQ1QsCVRGX0NPTU1BTkQKLWltcGx5LAkJVF9JTVBMWSwJVEZfQ09N TUFORAotcmFuZ2UsCQlUX1JBTkdFLAlURl9DT01NQU5ECi12aXNpYmxlLAlUX1ZJU0lCTEUsCVRG X0NPTU1BTkQKLW9wdGlvbiwJCVRfT1BUSU9OLAlURl9DT01NQU5ECi1vbiwJCVRfT04sCQlURl9Q QVJBTQotbW9kdWxlcywJVF9PUFRfTU9EVUxFUywJVEZfT1BUSU9OCi1kZWZjb25maWdfbGlzdCwJ VF9PUFRfREVGQ09ORklHX0xJU1QsVEZfT1BUSU9OCi1lbnYsCQlUX09QVF9FTlYsCVRGX09QVElP TgotYWxsbm9jb25maWdfeSwJVF9PUFRfQUxMTk9DT05GSUdfWSxURl9PUFRJT04KLSUlCmRpZmYg LS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQgYi9zY3JpcHRzL2tj b25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IGQ1MWIxNWRlMDc0YS4uMDAwMDAwMDAwMDAwCi0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5o YXNoLmNfc2hpcHBlZAorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKiBBTlNJLUMg Y29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC40ICovCi0vKiBDb21tYW5kLWxpbmU6 IGdwZXJmIC10IC0tb3V0cHV0LWZpbGUgc2NyaXB0cy9rY29uZmlnL3pjb25mLmhhc2guY19zaGlw cGVkIC1hIC1DIC1FIC1nIC1rICcxLDMsJCcgLXAgLXQgc2NyaXB0cy9rY29uZmlnL3pjb25mLmdw ZXJmICAqLwotCi0jaWYgISgoJyAnID09IDMyKSAmJiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0 KSAmJiAoJyMnID09IDM1KSBcCi0gICAgICAmJiAoJyUnID09IDM3KSAmJiAoJyYnID09IDM4KSAm JiAoJ1wnJyA9PSAzOSkgJiYgKCcoJyA9PSA0MCkgXAotICAgICAgJiYgKCcpJyA9PSA0MSkgJiYg KCcqJyA9PSA0MikgJiYgKCcrJyA9PSA0MykgJiYgKCcsJyA9PSA0NCkgXAotICAgICAgJiYgKCct JyA9PSA0NSkgJiYgKCcuJyA9PSA0NikgJiYgKCcvJyA9PSA0NykgJiYgKCcwJyA9PSA0OCkgXAot ICAgICAgJiYgKCcxJyA9PSA0OSkgJiYgKCcyJyA9PSA1MCkgJiYgKCczJyA9PSA1MSkgJiYgKCc0 JyA9PSA1MikgXAotICAgICAgJiYgKCc1JyA9PSA1MykgJiYgKCc2JyA9PSA1NCkgJiYgKCc3JyA9 PSA1NSkgJiYgKCc4JyA9PSA1NikgXAotICAgICAgJiYgKCc5JyA9PSA1NykgJiYgKCc6JyA9PSA1 OCkgJiYgKCc7JyA9PSA1OSkgJiYgKCc8JyA9PSA2MCkgXAotICAgICAgJiYgKCc9JyA9PSA2MSkg JiYgKCc+JyA9PSA2MikgJiYgKCc/JyA9PSA2MykgJiYgKCdBJyA9PSA2NSkgXAotICAgICAgJiYg KCdCJyA9PSA2NikgJiYgKCdDJyA9PSA2NykgJiYgKCdEJyA9PSA2OCkgJiYgKCdFJyA9PSA2OSkg XAotICAgICAgJiYgKCdGJyA9PSA3MCkgJiYgKCdHJyA9PSA3MSkgJiYgKCdIJyA9PSA3MikgJiYg KCdJJyA9PSA3MykgXAotICAgICAgJiYgKCdKJyA9PSA3NCkgJiYgKCdLJyA9PSA3NSkgJiYgKCdM JyA9PSA3NikgJiYgKCdNJyA9PSA3NykgXAotICAgICAgJiYgKCdOJyA9PSA3OCkgJiYgKCdPJyA9 PSA3OSkgJiYgKCdQJyA9PSA4MCkgJiYgKCdRJyA9PSA4MSkgXAotICAgICAgJiYgKCdSJyA9PSA4 MikgJiYgKCdTJyA9PSA4MykgJiYgKCdUJyA9PSA4NCkgJiYgKCdVJyA9PSA4NSkgXAotICAgICAg JiYgKCdWJyA9PSA4NikgJiYgKCdXJyA9PSA4NykgJiYgKCdYJyA9PSA4OCkgJiYgKCdZJyA9PSA4 OSkgXAotICAgICAgJiYgKCdaJyA9PSA5MCkgJiYgKCdbJyA9PSA5MSkgJiYgKCdcXCcgPT0gOTIp ICYmICgnXScgPT0gOTMpIFwKLSAgICAgICYmICgnXicgPT0gOTQpICYmICgnXycgPT0gOTUpICYm ICgnYScgPT0gOTcpICYmICgnYicgPT0gOTgpIFwKLSAgICAgICYmICgnYycgPT0gOTkpICYmICgn ZCcgPT0gMTAwKSAmJiAoJ2UnID09IDEwMSkgJiYgKCdmJyA9PSAxMDIpIFwKLSAgICAgICYmICgn ZycgPT0gMTAzKSAmJiAoJ2gnID09IDEwNCkgJiYgKCdpJyA9PSAxMDUpICYmICgnaicgPT0gMTA2 KSBcCi0gICAgICAmJiAoJ2snID09IDEwNykgJiYgKCdsJyA9PSAxMDgpICYmICgnbScgPT0gMTA5 KSAmJiAoJ24nID09IDExMCkgXAotICAgICAgJiYgKCdvJyA9PSAxMTEpICYmICgncCcgPT0gMTEy KSAmJiAoJ3EnID09IDExMykgJiYgKCdyJyA9PSAxMTQpIFwKLSAgICAgICYmICgncycgPT0gMTE1 KSAmJiAoJ3QnID09IDExNikgJiYgKCd1JyA9PSAxMTcpICYmICgndicgPT0gMTE4KSBcCi0gICAg ICAmJiAoJ3cnID09IDExOSkgJiYgKCd4JyA9PSAxMjApICYmICgneScgPT0gMTIxKSAmJiAoJ3on ID09IDEyMikgXAotICAgICAgJiYgKCd7JyA9PSAxMjMpICYmICgnfCcgPT0gMTI0KSAmJiAoJ30n ID09IDEyNSkgJiYgKCd+JyA9PSAxMjYpKQotLyogVGhlIGNoYXJhY3RlciBzZXQgaXMgbm90IGJh c2VkIG9uIElTTy02NDYuICAqLwotI2Vycm9yICJncGVyZiBnZW5lcmF0ZWQgdGFibGVzIGRvbid0 IHdvcmsgd2l0aCB0aGlzIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0LiBQbGVhc2UgcmVwb3J0IGEg YnVnIHRvIDxidWctZ251LWdwZXJmQGdudS5vcmc+LiIKLSNlbmRpZgotCi0jbGluZSAxMCAic2Ny aXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotc3RydWN0IGtjb25mX2lkOwotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGtjb25mX2lkICprY29uZl9pZF9sb29rdXAocmVnaXN0ZXIgY29uc3QgY2hhciAq c3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKTsKLS8qIG1heGltdW0ga2V5IHJhbmdlID0g NzEsIGR1cGxpY2F0ZXMgPSAwICovCi0KLSNpZmRlZiBfX0dOVUNfXwotX19pbmxpbmUKLSNlbHNl Ci0jaWZkZWYgX19jcGx1c3BsdXMKLWlubGluZQotI2VuZGlmCi0jZW5kaWYKLXN0YXRpYyB1bnNp Z25lZCBpbnQKLWtjb25mX2lkX2hhc2ggKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0 ZXIgdW5zaWduZWQgaW50IGxlbikKLXsKLSAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYXNz b192YWx1ZXNbXSA9Ci0gICAgewotICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDcz LCA3MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywK LSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLAotICAgICAgNzMs IDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3 MywgNzMsICAwLCA3MywgNzMsIDczLCA3MywKLSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMs IDczLCA3MywgNzMsIDczLAotICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3 MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywKLSAg ICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLAotICAgICAgNzMsIDcz LCA3MywgNzMsIDczLCA3MywgNzMsIDEwLCAyNSwgMjUsCi0gICAgICAgMCwgIDAsICAwLCAgNSwg IDAsICAwLCA3MywgNzMsICA1LCAgMCwKLSAgICAgIDEwLCAgNSwgNDUsIDczLCAyMCwgMjAsICAw LCAxNSwgMTUsIDczLAotICAgICAgMjAsICAwLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3Mywg NzMsCi0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywKLSAgICAg IDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLAotICAgICAgNzMsIDczLCA3 MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3MywgNzMs IDczLCA3MywgNzMsIDczLCA3MywKLSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3 MywgNzMsIDczLAotICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMs Ci0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywKLSAgICAgIDcz LCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLAotICAgICAgNzMsIDczLCA3Mywg NzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDcz LCA3MywgNzMsIDczLCA3MywKLSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3Mywg NzMsIDczLAotICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsCi0g ICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczCi0gICAgfTsKLSAgcmVnaXN0ZXIgaW50IGh2YWwg PSBsZW47Ci0KLSAgc3dpdGNoIChodmFsKQotICAgIHsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg IGh2YWwgKz0gYXNzb192YWx1ZXNbKHVuc2lnbmVkIGNoYXIpc3RyWzJdXTsKLSAgICAgIC8qRkFM TFRIUk9VR0gqLwotICAgICAgY2FzZSAyOgotICAgICAgY2FzZSAxOgotICAgICAgICBodmFsICs9 IGFzc29fdmFsdWVzWyh1bnNpZ25lZCBjaGFyKXN0clswXV07Ci0gICAgICAgIGJyZWFrOwotICAg IH0KLSAgcmV0dXJuIGh2YWwgKyBhc3NvX3ZhbHVlc1sodW5zaWduZWQgY2hhcilzdHJbbGVuIC0g MV1dOwotfQotCi1zdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190Ci0gIHsKLSAgICBjaGFyIGtjb25m X2lkX3N0cmluZ3Nfc3RyMltzaXplb2YoImlmIildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5n c19zdHIzW3NpemVvZigiaW50IildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI1W3Np emVvZigiZW5kaWYiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjdbc2l6ZW9mKCJk ZWZhdWx0IildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI4W3NpemVvZigidHJpc3Rh dGUiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjlbc2l6ZW9mKCJlbmRjaG9pY2Ui KV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjEwW3NpemVvZigiLS0taGVscC0tLSIp XTsKLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMTJbc2l6ZW9mKCJkZWZfdHJpc3RhdGUi KV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjEzW3NpemVvZigiZGVmX2Jvb2wiKV07 Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE0W3NpemVvZigiZGVmY29uZmlnX2xpc3Qi KV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE3W3NpemVvZigib24iKV07Ci0gICAg Y2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE4W3NpemVvZigib3B0aW9uYWwiKV07Ci0gICAgY2hh ciBrY29uZl9pZF9zdHJpbmdzX3N0cjIxW3NpemVvZigib3B0aW9uIildOwotICAgIGNoYXIga2Nv bmZfaWRfc3RyaW5nc19zdHIyMltzaXplb2YoImVuZG1lbnUiKV07Ci0gICAgY2hhciBrY29uZl9p ZF9zdHJpbmdzX3N0cjIzW3NpemVvZigibWFpbm1lbnUiKV07Ci0gICAgY2hhciBrY29uZl9pZF9z dHJpbmdzX3N0cjI1W3NpemVvZigibWVudWNvbmZpZyIpXTsKLSAgICBjaGFyIGtjb25mX2lkX3N0 cmluZ3Nfc3RyMjdbc2l6ZW9mKCJtb2R1bGVzIildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5n c19zdHIyOFtzaXplb2YoImFsbG5vY29uZmlnX3kiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJp bmdzX3N0cjI5W3NpemVvZigibWVudSIpXTsKLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3Ry MzFbc2l6ZW9mKCJzZWxlY3QiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjMyW3Np emVvZigiY29tbWVudCIpXTsKLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMzNbc2l6ZW9m KCJlbnYiKV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjM1W3NpemVvZigicmFuZ2Ui KV07Ci0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjM2W3NpemVvZigiY2hvaWNlIildOwot ICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzOVtzaXplb2YoImJvb2wiKV07Ci0gICAgY2hh ciBrY29uZl9pZF9zdHJpbmdzX3N0cjQxW3NpemVvZigic291cmNlIildOwotICAgIGNoYXIga2Nv bmZfaWRfc3RyaW5nc19zdHI0MltzaXplb2YoInZpc2libGUiKV07Ci0gICAgY2hhciBrY29uZl9p ZF9zdHJpbmdzX3N0cjQzW3NpemVvZigiaGV4IildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5n c19zdHI0NltzaXplb2YoImNvbmZpZyIpXTsKLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3Ry NDdbc2l6ZW9mKCJib29sZWFuIildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI1MFtz aXplb2YoImltcGx5IildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI1MVtzaXplb2Yo InN0cmluZyIpXTsKLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNTRbc2l6ZW9mKCJoZWxw IildOwotICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI1NltzaXplb2YoInByb21wdCIpXTsK LSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNzJbc2l6ZW9mKCJkZXBlbmRzIildOwotICB9 Owotc3RhdGljIGNvbnN0IHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3Qga2NvbmZfaWRfc3RyaW5n c19jb250ZW50cyA9Ci0gIHsKLSAgICAiaWYiLAotICAgICJpbnQiLAotICAgICJlbmRpZiIsCi0g ICAgImRlZmF1bHQiLAotICAgICJ0cmlzdGF0ZSIsCi0gICAgImVuZGNob2ljZSIsCi0gICAgIi0t LWhlbHAtLS0iLAotICAgICJkZWZfdHJpc3RhdGUiLAotICAgICJkZWZfYm9vbCIsCi0gICAgImRl ZmNvbmZpZ19saXN0IiwKLSAgICAib24iLAotICAgICJvcHRpb25hbCIsCi0gICAgIm9wdGlvbiIs Ci0gICAgImVuZG1lbnUiLAotICAgICJtYWlubWVudSIsCi0gICAgIm1lbnVjb25maWciLAotICAg ICJtb2R1bGVzIiwKLSAgICAiYWxsbm9jb25maWdfeSIsCi0gICAgIm1lbnUiLAotICAgICJzZWxl Y3QiLAotICAgICJjb21tZW50IiwKLSAgICAiZW52IiwKLSAgICAicmFuZ2UiLAotICAgICJjaG9p Y2UiLAotICAgICJib29sIiwKLSAgICAic291cmNlIiwKLSAgICAidmlzaWJsZSIsCi0gICAgImhl eCIsCi0gICAgImNvbmZpZyIsCi0gICAgImJvb2xlYW4iLAotICAgICJpbXBseSIsCi0gICAgInN0 cmluZyIsCi0gICAgImhlbHAiLAotICAgICJwcm9tcHQiLAotICAgICJkZXBlbmRzIgotICB9Owot I2RlZmluZSBrY29uZl9pZF9zdHJpbmdzICgoY29uc3QgY2hhciAqKSAma2NvbmZfaWRfc3RyaW5n c19jb250ZW50cykKLSNpZmRlZiBfX0dOVUNfXwotX19pbmxpbmUKLSNpZiBkZWZpbmVkIF9fR05V Q19TVERDX0lOTElORV9fIHx8IGRlZmluZWQgX19HTlVDX0dOVV9JTkxJTkVfXwotX19hdHRyaWJ1 dGVfXyAoKF9fZ251X2lubGluZV9fKSkKLSNlbmRpZgotI2VuZGlmCi1jb25zdCBzdHJ1Y3Qga2Nv bmZfaWQgKgota2NvbmZfaWRfbG9va3VwIChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lz dGVyIHVuc2lnbmVkIGludCBsZW4pCi17Ci0gIGVudW0KLSAgICB7Ci0gICAgICBUT1RBTF9LRVlX T1JEUyA9IDM1LAotICAgICAgTUlOX1dPUkRfTEVOR1RIID0gMiwKLSAgICAgIE1BWF9XT1JEX0xF TkdUSCA9IDE0LAotICAgICAgTUlOX0hBU0hfVkFMVUUgPSAyLAotICAgICAgTUFYX0hBU0hfVkFM VUUgPSA3MgotICAgIH07Ci0KLSAgc3RhdGljIGNvbnN0IHN0cnVjdCBrY29uZl9pZCB3b3JkbGlz dFtdID0KLSAgICB7Ci0gICAgICB7LTF9LCB7LTF9LAotI2xpbmUgMjYgInNjcmlwdHMva2NvbmZp Zy96Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJp bmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIyLAkJVF9JRiwJCVRGX0NPTU1BTkR8VEZf UEFSQU19LAotI2xpbmUgMzcgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAgICAgIHso aW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3Ry aW5nc19zdHIzLAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19JTlR9LAotICAgICAgey0xfSwKLSNs aW5lIDI3ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykm KChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNSwJ CVRfRU5ESUYsCVRGX0NPTU1BTkR9LAotICAgICAgey0xfSwKLSNsaW5lIDMwICJzY3JpcHRzL2tj b25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRf c3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNywJVF9ERUZBVUxULAlURl9DT01N QU5ELCBTX1VOS05PV059LAotI2xpbmUgMzIgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIK LSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2Nv bmZfaWRfc3RyaW5nc19zdHI4LAlUX1RZUEUsCQlURl9DT01NQU5ELCBTX1RSSVNUQVRFfSwKLSNs aW5lIDIwICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykm KChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyOSwJ VF9FTkRDSE9JQ0UsCVRGX0NPTU1BTkR9LAotI2xpbmUgMjUgInNjcmlwdHMva2NvbmZpZy96Y29u Zi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3Qg KikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIxMCwJVF9IRUxQLAkJVEZfQ09NTUFORH0sCi0gICAg ICB7LTF9LAotI2xpbmUgMzMgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAgICAgIHso aW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3Ry aW5nc19zdHIxMiwJVF9ERUZBVUxULAlURl9DT01NQU5ELCBTX1RSSVNUQVRFfSwKLSNsaW5lIDM2 ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1 Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTMsCVRfREVG QVVMVCwJVEZfQ09NTUFORCwgU19CT09MRUFOfSwKLSNsaW5lIDQ3ICJzY3JpcHRzL2tjb25maWcv emNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5n c190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTQsCVRfT1BUX0RFRkNPTkZJR19MSVNULFRG X09QVElPTn0sCi0gICAgICB7LTF9LCB7LTF9LAotI2xpbmUgNDUgInNjcmlwdHMva2NvbmZpZy96 Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdz X3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIxNywJCVRfT04sCQlURl9QQVJBTX0sCi0jbGlu ZSAyOSAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQpKGxvbmcpJigo c3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjE4LAlU X09QVElPTkFMLAlURl9DT01NQU5EfSwKLSAgICAgIHstMX0sIHstMX0sCi0jbGluZSA0NCAic2Ny aXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtj b25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjIxLAkJVF9PUFRJT04s CVRGX0NPTU1BTkR9LAotI2xpbmUgMTcgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAg ICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZf aWRfc3RyaW5nc19zdHIyMiwJVF9FTkRNRU5VLAlURl9DT01NQU5EfSwKLSNsaW5lIDE1ICJzY3Jp cHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2Nv bmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjMsCVRfTUFJTk1FTlUs CVRGX0NPTU1BTkR9LAotICAgICAgey0xfSwKLSNsaW5lIDIzICJzY3JpcHRzL2tjb25maWcvemNv bmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190 ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjUsCVRfTUVOVUNPTkZJRywJVEZfQ09NTUFORH0s Ci0gICAgICB7LTF9LAotI2xpbmUgNDYgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAg ICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZf aWRfc3RyaW5nc19zdHIyNywJVF9PUFRfTU9EVUxFUywJVEZfT1BUSU9OfSwKLSNsaW5lIDQ5ICJz Y3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qg a2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjgsCVRfT1BUX0FM TE5PQ09ORklHX1ksVEZfT1BUSU9OfSwKLSNsaW5lIDE2ICJzY3JpcHRzL2tjb25maWcvemNvbmYu Z3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICop MCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjksCQlUX01FTlUsCQlURl9DT01NQU5EfSwKLSAgICAg IHstMX0sCi0jbGluZSA0MCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhp bnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJp bmdzX3N0cjMxLAkJVF9TRUxFQ1QsCVRGX0NPTU1BTkR9LAotI2xpbmUgMjEgInNjcmlwdHMva2Nv bmZpZy96Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9z dHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzMiwJVF9DT01NRU5ULAlURl9DT01N QU5EfSwKLSNsaW5lIDQ4ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGlu dCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmlu Z3Nfc3RyMzMsCQlUX09QVF9FTlYsCVRGX09QVElPTn0sCi0gICAgICB7LTF9LAotI2xpbmUgNDIg InNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVj dCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIzNSwJCVRfUkFO R0UsCVRGX0NPTU1BTkR9LAotI2xpbmUgMTkgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIK LSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2Nv bmZfaWRfc3RyaW5nc19zdHIzNiwJCVRfQ0hPSUNFLAlURl9DT01NQU5EfSwKLSAgICAgIHstMX0s IHstMX0sCi0jbGluZSAzNCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhp bnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJp bmdzX3N0cjM5LAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19CT09MRUFOfSwKLSAgICAgIHstMX0s Ci0jbGluZSAxOCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQpKGxv bmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0 cjQxLAkJVF9TT1VSQ0UsCVRGX0NPTU1BTkR9LAotI2xpbmUgNDMgInNjcmlwdHMva2NvbmZpZy96 Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdz X3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI0MiwJVF9WSVNJQkxFLAlURl9DT01NQU5EfSwK LSNsaW5lIDM4ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiCi0gICAgICB7KGludCkobG9u ZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3Ry NDMsCQlUX1RZUEUsCQlURl9DT01NQU5ELCBTX0hFWH0sCi0gICAgICB7LTF9LCB7LTF9LAotI2xp bmUgMjIgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYo KHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI0NiwJ CVRfQ09ORklHLAlURl9DT01NQU5EfSwKLSNsaW5lIDM1ICJzY3JpcHRzL2tjb25maWcvemNvbmYu Z3BlcmYiCi0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICop MCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDcsCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfQk9PTEVB Tn0sCi0gICAgICB7LTF9LCB7LTF9LAotI2xpbmUgNDEgInNjcmlwdHMva2NvbmZpZy96Y29uZi5n cGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikw KS0+a2NvbmZfaWRfc3RyaW5nc19zdHI1MCwJCVRfSU1QTFksCVRGX0NPTU1BTkR9LAotI2xpbmUg MzkgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0 cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI1MSwJCVRf VFlQRSwJCVRGX0NPTU1BTkQsIFNfU1RSSU5HfSwKLSAgICAgIHstMX0sIHstMX0sCi0jbGluZSAy NCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIgotICAgICAgeyhpbnQpKGxvbmcpJigoc3Ry dWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjU0LAkJVF9I RUxQLAkJVEZfQ09NTUFORH0sCi0gICAgICB7LTF9LAotI2xpbmUgMzEgInNjcmlwdHMva2NvbmZp Zy96Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJp bmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI1NiwJCVRfUFJPTVBULAlURl9DT01NQU5E fSwKLSAgICAgIHstMX0sIHstMX0sIHstMX0sIHstMX0sIHstMX0sIHstMX0sIHstMX0sIHstMX0s IHstMX0sCi0gICAgICB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LAotI2xpbmUg MjggInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIKLSAgICAgIHsoaW50KShsb25nKSYoKHN0 cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI3MiwJVF9E RVBFTkRTLAlURl9DT01NQU5EfQotICAgIH07Ci0KLSAgaWYgKGxlbiA8PSBNQVhfV09SRF9MRU5H VEggJiYgbGVuID49IE1JTl9XT1JEX0xFTkdUSCkKLSAgICB7Ci0gICAgICByZWdpc3RlciBpbnQg a2V5ID0ga2NvbmZfaWRfaGFzaCAoc3RyLCBsZW4pOwotCi0gICAgICBpZiAoa2V5IDw9IE1BWF9I QVNIX1ZBTFVFICYmIGtleSA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgcmVnaXN0ZXIgaW50 IG8gPSB3b3JkbGlzdFtrZXldLm5hbWU7Ci0gICAgICAgICAgaWYgKG8gPj0gMCkKLSAgICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqcyA9IG8gKyBrY29uZl9p ZF9zdHJpbmdzOwotCi0gICAgICAgICAgICAgIGlmICgqc3RyID09ICpzICYmICFzdHJuY21wIChz dHIgKyAxLCBzICsgMSwgbGVuIC0gMSkgJiYgc1tsZW5dID09ICdcMCcpCi0gICAgICAgICAgICAg ICAgcmV0dXJuICZ3b3JkbGlzdFtrZXldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg fQotICByZXR1cm4gMDsKLX0KLSNsaW5lIDUwICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYi Ci0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkIGIvc2Ny aXB0cy9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQKaW5kZXggNjViNzUxNWE1NzdjLi5hMjJi Mjg1ZDc1OWYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVk CisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCkBAIC0yMDksOCArMjA5 LDggQEAgaW50IHpjb25mcGFyc2UgKHZvaWQpOwogLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2Yg dXNlciBkZWNsYXJhdGlvbnMuICAqLwogCiAKLS8qIEluY2x1ZGUgemNvbmYuaGFzaC5jIGhlcmUg c28gaXQgY2FuIHNlZSB0aGUgdG9rZW4gY29uc3RhbnRzLiAqLwotI2luY2x1ZGUgInpjb25mLmhh c2guYyIKKy8qIEluY2x1ZGUga2NvbmZfaWQuYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRva2Vu IGNvbnN0YW50cy4gKi8KKyNpbmNsdWRlICJrY29uZl9pZC5jIgogCiAKIApAQCAtMTUxNSw3ICsx NTE1LDcgQEAgeXlyZWR1Y2U6CiAgIGNhc2UgMTI6CiAKICAgICB7Ci0JemNvbmZfZXJyb3IoInVu ZXhwZWN0ZWQgb3B0aW9uIFwiJXNcIiIsIGtjb25mX2lkX3N0cmluZ3MgKyAoeXl2c3BbLTJdLmlk KS0+bmFtZSk7CisJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgb3B0aW9uIFwiJXNcIiIsICh5eXZz cFstMl0uaWQpLT5uYW1lKTsKIH0KIAogICAgIGJyZWFrOwpAQCAtMjI2OCwxMyArMjI2OCwxMyBA QCBzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBp bnQgc3RhcnR0b2tlbiwgaW50IGVuZHRvawogewogCWlmIChpZC0+dG9rZW4gIT0gZW5kdG9rZW4p IHsKIAkJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgJyVzJyB3aXRoaW4gJXMgYmxvY2siLAotCQkJ a2NvbmZfaWRfc3RyaW5ncyArIGlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikp OworCQkJaWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CiAJCXpjb25mbmVy cnMrKzsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAlpZiAoY3VycmVudF9tZW51LT5maWxlICE9IGN1 cnJlbnRfZmlsZSkgewogCQl6Y29uZl9lcnJvcigiJyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFu ICclcyciLAotCQkJa2NvbmZfaWRfc3RyaW5ncyArIGlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUo c3RhcnR0b2tlbikpOworCQkJaWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7 CiAJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGxvY2F0aW9uIG9mIHRoZSAnJXMnXG4iLAogCQkJ Y3VycmVudF9tZW51LT5maWxlLT5uYW1lLCBjdXJyZW50X21lbnUtPmxpbmVubywKIAkJCXpjb25m X3Rva2VubmFtZShzdGFydHRva2VuKSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNv bmYueSBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CmluZGV4IDAwMTMwNWZhMDgwYi4uYzhmMzk2 YzNiMTkwIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvemNvbmYueQorKysgYi9zY3JpcHRz L2tjb25maWcvemNvbmYueQpAQCAtMTAxLDggKzEwMSw4IEBAIHN0YXRpYyBzdHJ1Y3QgbWVudSAq Y3VycmVudF9tZW51LCAqY3VycmVudF9lbnRyeTsKIH0gaWZfZW50cnkgbWVudV9lbnRyeSBjaG9p Y2VfZW50cnkKIAogJXsKLS8qIEluY2x1ZGUgemNvbmYuaGFzaC5jIGhlcmUgc28gaXQgY2FuIHNl ZSB0aGUgdG9rZW4gY29uc3RhbnRzLiAqLwotI2luY2x1ZGUgInpjb25mLmhhc2guYyIKKy8qIElu Y2x1ZGUgemNvbmZfaWQuYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRva2VuIGNvbnN0YW50cy4g Ki8KKyNpbmNsdWRlICJrY29uZl9pZC5jIgogJX0KIAogJSUKQEAgLTExOSw3ICsxMTksNyBAQCBz dG10X2xpc3Q6CiAJfCBzdG10X2xpc3QgVF9XT1JEIGVycm9yIFRfRU9MCXsgemNvbmZfZXJyb3Io InVua25vd24gc3RhdGVtZW50IFwiJXNcIiIsICQyKTsgfQogCXwgc3RtdF9saXN0IG9wdGlvbl9u YW1lIGVycm9yIFRfRU9MCiB7Ci0JemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgb3B0aW9uIFwiJXNc IiIsIGtjb25mX2lkX3N0cmluZ3MgKyAkMi0+bmFtZSk7CisJemNvbmZfZXJyb3IoInVuZXhwZWN0 ZWQgb3B0aW9uIFwiJXNcIiIsICQyLT5uYW1lKTsKIH0KIAl8IHN0bXRfbGlzdCBlcnJvciBUX0VP TAkJeyB6Y29uZl9lcnJvcigiaW52YWxpZCBzdGF0ZW1lbnQiKTsgfQogOwpAQCAtNTUxLDEzICs1 NTEsMTMgQEAgc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oY29uc3Qgc3RydWN0IGtjb25mX2lk ICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2sKIHsKIAlpZiAoaWQtPnRva2VuICE9IGVu ZHRva2VuKSB7CiAJCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkICclcycgd2l0aGluICVzIGJsb2Nr IiwKLQkJCWtjb25mX2lkX3N0cmluZ3MgKyBpZC0+bmFtZSwgemNvbmZfdG9rZW5uYW1lKHN0YXJ0 dG9rZW4pKTsKKwkJCWlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOwogCQl6 Y29uZm5lcnJzKys7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGN1cnJlbnRfbWVudS0+Zmls ZSAhPSBjdXJyZW50X2ZpbGUpIHsKIAkJemNvbmZfZXJyb3IoIiclcycgaW4gZGlmZmVyZW50IGZp bGUgdGhhbiAnJXMnIiwKLQkJCWtjb25mX2lkX3N0cmluZ3MgKyBpZC0+bmFtZSwgemNvbmZfdG9r ZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJCWlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0 b2tlbikpOwogCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBsb2NhdGlvbiBvZiB0aGUgJyVzJ1xu IiwKIAkJCWN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8sCiAJ CQl6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOwotLSAKMi4xNC4wLnJjMS4yLmc0YzgyNDdl YzMKCg== --001a113e51265eeb7105571f30bb--