ZGlmZiAtLWdpdCBhL2F1dG8vY2MvbXN2YyBiL2F1dG8vY2MvbXN2YwppbmRleCA1YzhhY2MxLi44Y2Y4N2ZhIDEwMDY0NAotLS0gYS9hdXRvL2NjL21zdmMKKysrIGIvYXV0by9jYy9tc3ZjCkBAIC00OSw3ICs0OSw3IEBACiAgICAgOzsKIGVzYWMKIAotIyBfX2NkZWNsLCB1c2Ugd2l0aCBPcGVuU1NMCisjIF9fY2RlY2wsIHVzZSB3aXRoIE9wZW5TU0wsIG1kNSBhc20sIGFuZCBzaGExIGFzbQogI0NQVV9PUFQ9IiRDUFVfT1BUIC1HZCIKICMgX19zdGRjYWxsCiAjQ1BVX09QVD0iJENQVV9PUFQgLUd6IgpAQCAtNjIsNyArNjIsNiBAQAogCiAjIHdhcm5pbmdzCiAKLSNDRkxBR1M9IiRDRkxBR1MgLVczIgogQ0ZMQUdTPSIkQ0ZMQUdTIC1XNCIKIAogIyBzdG9wIG9uIHdhcm5pbmcKZGlmZiAtLWdpdCBhL2F1dG8vbGliL2NvbmYgYi9hdXRvL2xpYi9jb25mCmluZGV4IDYyZDYwMjkuLmU5NjEwMzQgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL2NvbmYKKysrIGIvYXV0by9saWIvY29uZgpAQCAtMjMsNiArMjMsMTggQEAKIAogZmkKIAoraWYgWyAkVVNFX1NIQTEgPSBZRVMgXTsgdGhlbgorCisgICAgaWYgWyAkT1BFTlNTTCAhPSBOT05FIC1hICRPUEVOU1NMICE9IE5PIF07IHRoZW4KKyAgICAgICAgaGF2ZT1OR1hfSEFWRV9PUEVOU1NMX1NIQTFfSCAuIGF1dG8vaGF2ZQorICAgICAgICBTSEExPVlFUworCisgICAgZWxzZQorICAgICAgICAuIGF1dG8vbGliL3NoYTEvY29uZgorICAgIGZpCisKK2ZpCisKIGlmIFsgJFVTRV9aTElCID0gWUVTIF07IHRoZW4KICAgICAuIGF1dG8vbGliL3psaWIvY29uZgogZmkKZGlmZiAtLWdpdCBhL2F1dG8vbGliL21ha2UgYi9hdXRvL2xpYi9tYWtlCmluZGV4IDYwY2Q3YmMuLjE3MDMxMWMgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL21ha2UKKysrIGIvYXV0by9saWIvbWFrZQpAQCAtMTAsNiArMTAsMTAgQEAKICAgICAuIGF1dG8vbGliL21kNS9tYWtlCiBmaQogCitpZiBbICRTSEExICE9IE5PTkUgLWEgJFNIQTEgIT0gTk8gLWEgJFNIQTEgIT0gWUVTIF07IHRoZW4KKyAgICAuIGF1dG8vbGliL3NoYTEvbWFrZQorZmkKKwogaWYgWyAkT1BFTlNTTCAhPSBOT05FIC1hICRPUEVOU1NMICE9IE5PIC1hICRPUEVOU1NMICE9IFlFUyBdOyB0aGVuCiAgICAgLiBhdXRvL2xpYi9vcGVuc3NsL21ha2UKIGZpCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9tZDUvbWFrZWZpbGUuYmNjIGIvYXV0by9saWIvbWQ1L21ha2VmaWxlLmJjYwppbmRleCA4MzdmMmRmLi42ZDIxNTFiIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9tZDUvbWFrZWZpbGUuYmNjCisrKyBiL2F1dG8vbGliL21kNS9tYWtlZmlsZS5iY2MKQEAgLTgsNyArOCw3IEBACiAKIG1kNS5saWI6CiAJYmNjMzIgLWMgJChDRkxBR1MpIC1ETUQ1X0FTTSBtZDVfZGdzdC5jCi0JdGxpYiBtZDUubGliICttZDVfZGdzdC5vYmogK2FzbS9tLXdpbjMyLm9iagorCXRsaWIgbWQ1LmxpYiArbWQ1X2Rnc3Qub2JqICsiYXNtXG0td2luMzIub2JqIgogCiAhZWxzZQogCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9tZDUvbWFrZWZpbGUubXN2YyBiL2F1dG8vbGliL21kNS9tYWtlZmlsZS5tc3ZjCmluZGV4IDY4ZjVjYzQuLmFhZmZlMTggMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL21kNS9tYWtlZmlsZS5tc3ZjCisrKyBiL2F1dG8vbGliL21kNS9tYWtlZmlsZS5tc3ZjCkBAIC0yLDcgKzIsNyBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotQ0ZMQUdTID0gLW5vbG9nbyAtTVQgLU8yIC1PYjEgLU9pIC1HcyAkKExJQkMpICQoQ1BVX09QVCkgLUQgTF9FTkRJQU4KK0NGTEFHUyA9IC1ub2xvZ28gLU8yIC1PYjEgLU9pIC1HcyAkKExJQkMpICQoQ1BVX09QVCkgLUQgTF9FTkRJQU4KIAogIWlmICIkKE1ENV9BU00pIiA9PSAiWUVTIgogCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9zaGExL2NvbmYgYi9hdXRvL2xpYi9zaGExL2NvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFlMjBjOQotLS0gL2Rldi9udWxsCisrKyBiL2F1dG8vbGliL3NoYTEvY29uZgpAQCAtMCwwICsxLDgxIEBACisKKyMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorCisKK2lmIFsgJFNIQTEgIT0gTk9ORSBdOyB0aGVuCisKKyAgICBDT1JFX0lOQ1M9IiRDT1JFX0lOQ1MgJFNIQTEiCisKKyAgICBjYXNlICIkTkdYX0NDX05BTUUiIGluCisKKyAgICAgICAgbXN2YyogfCBvd2MqIHwgYmNjKQorICAgICAgICAgICAgTElOS19ERVBTPSIkTElOS19ERVBTICRTSEExL3NoYTEubGliIgorICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRTSEExL3NoYTEubGliIgorICAgICAgICA7OworCisgICAgICAgIGljYyopCisgICAgICAgICAgICBMSU5LX0RFUFM9IiRMSU5LX0RFUFMgJFNIQTEvbGlic2hhLmEiCisKKyAgICAgICAgICAgICMgdG8gYWxsb3cgLWlwbyBvcHRpbWl6YXRpb24gd2UgbGluayB3aXRoIHRoZSAqLm8gYnV0IG5vdCBsaWJyYXJ5CisgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFNIQTEvc2hhMV9kZ3N0Lm8iCisKKyAgICAgICAgICAgIGlmIFsgJFNIQTFfQVNNID0gWUVTIF07IHRoZW4KKyAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFNIQTEvYXNtL3N4ODYtZWxmLm8iCisgICAgICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBMSU5LX0RFUFM9IiRMSU5LX0RFUFMgJFNIQTEvbGlic2hhLmEiCisgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFNIQTEvbGlic2hhLmEiCisgICAgICAgICAgICAjQ09SRV9MSUJTPSIkQ09SRV9MSUJTIC1MICRTSEExIC1sc2hhIgorICAgICAgICA7OworCisgICAgZXNhYworCitlbHNlCisKKyAgICBpZiBbICIkTkdYX1BMQVRGT1JNIiAhPSB3aW4zMiBdOyB0aGVuCisgICAgICAgIFNIQTE9Tk8KKworICAgICAgICAjIEZyZWVCU0QKKworICAgICAgICBuZ3hfZmVhdHVyZT0ic2hhMSBpbiBzeXN0ZW0gbWQgbGlicmFyeSIKKyAgICAgICAgbmd4X2ZlYXR1cmVfbmFtZT0KKyAgICAgICAgbmd4X2ZlYXR1cmVfcnVuPW5vCisgICAgICAgIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxzaGEuaD4iCisgICAgICAgIG5neF9mZWF0dXJlX2xpYnM9Ii1sbWQiCisgICAgICAgIG5neF9mZWF0dXJlX3Rlc3Q9IlNIQV9DVFggc2hhMTsgU0hBMV9Jbml0KCZzaGExKSIKKyAgICAgICAgLiBhdXRvL2ZlYXR1cmUKKworCisgICAgICAgIGlmIFsgJG5neF9mb3VuZCA9IHllcyBdOyB0aGVuCisgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJG5neF9mZWF0dXJlX2xpYnMiCisgICAgICAgICAgICBTSEExPVlFUworICAgICAgICAgICAgU0hBMV9MSUI9bWQKKyAgICAgICAgICAgIG5neF9mb3VuZD1ubworCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIFsgJFNIQTEgPSBOTyBdOyB0aGVuCisKKyAgICAgICAgICAgICAgICMgT3BlblNTTCBjcnlwdG8gbGlicmFyeQorCisgICAgICAgICAgICAgICBuZ3hfZmVhdHVyZT0iT3BlblNTTCBzaGExIGNyeXB0byBsaWJyYXJ5IgorICAgICAgICAgICAgICAgbmd4X2ZlYXR1cmVfbmFtZT0KKyAgICAgICAgICAgICAgIG5neF9mZWF0dXJlX3J1bj1ubworICAgICAgICAgICAgICAgbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+IgorICAgICAgICAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0iLWxjcnlwdG8iCisgICAgICAgICAgICAgICBuZ3hfZmVhdHVyZV90ZXN0PSJTSEFfQ1RYIHNoYTE7IFNIQTFfSW5pdCgmc2hhMSkiCisgICAgICAgICAgICAgICAuIGF1dG8vZmVhdHVyZQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworCisgICAgICAgIGlmIFsgJG5neF9mb3VuZCA9IHllcyBdOyB0aGVuCisgICAgICAgICAgICBoYXZlPU5HWF9IQVZFX09QRU5TU0xfU0hBMV9IIC4gYXV0by9oYXZlCisgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJG5neF9mZWF0dXJlX2xpYnMiCisgICAgICAgICAgICBTSEExPVlFUworICAgICAgICAgICAgU0hBMV9MSUI9Y3J5cHRvCisgICAgICAgIGZpCisgICAgZmkKKworZmkKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3NoYTEvbWFrZSBiL2F1dG8vbGliL3NoYTEvbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEwMzZlCi0tLSAvZGV2L251bGwKKysrIGIvYXV0by9saWIvc2hhMS9tYWtlCkBAIC0wLDAgKzEsOTYgQEAKKworIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisKKworY2FzZSAiJE5HWF9DQ19OQU1FIiBpbgorCisgICAgbXN2YyopCisgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5tc3ZjCisgICAgICAgIG5neF9vcHQ9IkNQVV9PUFQ9XCIkQ1BVX09QVFwiIExJQkM9JExJQkMgU0hBMV9BU009JFNIQTFfQVNNIgorICAgIDs7CisKKyAgICBvd2MqKQorICAgICAgICBuZ3hfbWFrZWZpbGU9bWFrZWZpbGUub3djCisgICAgICAgIG5neF9vcHQ9IkNQVV9PUFQ9XCIkQ1BVX09QVFwiIgorICAgIDs7CisKKyAgICBiY2MpCisgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5iY2MKKyAgICAgICAgbmd4X29wdD0iLURDUFVfT1BUPVwiJENQVV9PUFRcIiAtRFNIQTFfQVNNPSRTSEExX0FTTSIKKyAgICA7OworCitlc2FjCisKKworZG9uZT1OTworCisKK2Nhc2UgIiROR1hfUExBVEZPUk0iIGluCisKKyAgICB3aW4zMikKKyAgICAgICAgY3AgYXV0by9saWIvc2hhMS8kbmd4X21ha2VmaWxlICRTSEExCisKKyAgICAgICAgY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCisKK2BlY2hvICIkU0hBMS9zaGExLmxpYjoJJE5HWF9NQUtFRklMRSIgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCisJY2QgYGVjaG8gJFNIQTEgfCBzZWQgLWUgInMvXC8vJG5neF9yZWdleF9kaXJzZXAvZyJgCisJXCQoTUFLRSkgLWYgJG5neF9tYWtlZmlsZSAkbmd4X29wdAorCWNkIC4uXFwuLlxcLi4KKworRU5ECisKKyAgICAgICAgZG9uZT1ZRVMKKyAgICA7OworCisgICAgU3VuT1M6KjppODZwYykKKyAgICAgICAgaWYgWyAkU0hBMV9BU00gPSBZRVMgXTsgdGhlbgorCisgICAgICAgICAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKKworJFNIQTEvbGlic2hhLmE6CSROR1hfTUFLRUZJTEUKKwljZCAkU0hBMSBcXAorCSYmIFwkKE1BS0UpIENGTEFHUz0iJFNIQTFfT1BUIC1EU09MIC1EU0hBMV9BU00gLURMX0VORElBTiIgXFwKKwkJQ0M9IlwkKENDKSIgQ1BQPSJcJChDUFApIiBcXAorCQlTSEFfQVNNX09CSj1hc20vc3g4Ni1zb2wubyBjbGVhbiBsaWJzaGEuYQorCitFTkQKKworICAgICAgICAgICAgZG9uZT1ZRVMKKyAgICAgICAgZmkKKyAgICA7OworCisgICAgIyBGcmVlQlNEOiBpMzg2CisgICAgIyBMaW51eDogaTY4NgorCisgICAgKjppMzg2IHwgKjppNjg2KQorICAgICAgICBpZiBbICRTSEExX0FTTSA9IFlFUyBdOyB0aGVuCisKKyAgICAgICAgICAgIGNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQorCiskU0hBMS9saWJzaGEuYToJJE5HWF9NQUtFRklMRQorCWNkICRTSEExIFxcCisJJiYgXCQoTUFLRSkgQ0ZMQUdTPSIkU0hBMV9PUFQgLURFTEYgLURTSEExX0FTTSAtRExfRU5ESUFOIiBcXAorCQlDQz0iXCQoQ0MpIiBDUFA9IlwkKENQUCkiIFxcCisJCVNIQV9BU01fT0JKPWFzbS9zeDg2LWVsZi5vIGNsZWFuIGxpYnNoYS5hCisKK0VORAorCisgICAgICAgICAgICBkb25lPVlFUworICAgICAgICBmaQorICAgIDs7CisKK2VzYWMKKworCitpZiBbICRkb25lID0gTk8gXTsgdGhlbgorCisgICAgY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKKworJFNIQTEvbGlic2hhLmE6CSROR1hfTUFLRUZJTEUKKwljZCAkU0hBMSBcXAorCSYmIFwkKE1BS0UpIENGTEFHUz0iJFNIQTFfT1BUIiBcXAorCQlDQz0iXCQoQ0MpIiBTSEFfQVNNX09CSj0gY2xlYW4gbGlic2hhLmEKKworRU5ECisKK2ZpCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9zaGExL21ha2VmaWxlLmJjYyBiL2F1dG8vbGliL3NoYTEvbWFrZWZpbGUuYmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NWU1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvL2xpYi9zaGExL21ha2VmaWxlLmJjYwpAQCAtMCwwICsxLDE5IEBACisKKyMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorCisKK0NGTEFHUyA9IC1xIC1PMiAtdFdNICQoQ1BVX09QVCkgLURMX0VORElBTgorCishaWYgIiQoU0hBMV9BU00pIiA9PSAiWUVTIgorCitzaGExLmxpYjoKKwliY2MzMiAtYyAkKENGTEFHUykgLURTSEExX0FTTSBzaGExZGdzdC5jCisJdGxpYiBzaGExLmxpYiArc2hhMWRnc3Qub2JqICsiYXNtXHMtd2luMzIub2JqIgorCishZWxzZQorCitzaGExLmxpYjoKKwliY2MzMiAtYyAkKENGTEFHUykgc2hhMWRnc3QuYworCXRsaWIgc2hhMS5saWIgK3NoYTFkZ3N0Lm9iagorCishZW5kaWYKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3NoYTEvbWFrZWZpbGUubXN2YyBiL2F1dG8vbGliL3NoYTEvbWFrZWZpbGUubXN2YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWM1NWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXV0by9saWIvc2hhMS9tYWtlZmlsZS5tc3ZjCkBAIC0wLDAgKzEsMTkgQEAKKworIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisKKworQ0ZMQUdTID0gLW5vbG9nbyAtTzIgLU9iMSAtT2kgLUdzICQoTElCQykgJChDUFVfT1BUKSAtRCBMX0VORElBTgorCishaWYgIiQoU0hBMV9BU00pIiA9PSAiWUVTIgorCitzaGExLmxpYjoKKwljbCAtYyAkKENGTEFHUykgLUQgU0hBMV9BU00gc2hhMWRnc3QuYworCWxpbmsgLWxpYiAtb3V0OnNoYTEubGliIHNoYTFkZ3N0Lm9iaiBhc20vcy13aW4zMi5vYmoKKworIWVsc2UKKworc2hhMS5saWI6CisJY2wgLWMgJChDRkxBR1MpIHNoYTFkZ3N0LmMKKwlsaW5rIC1saWIgLW91dDpzaGExLmxpYiBzaGExZGdzdC5vYmoKKworIWVuZGlmCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9zaGExL21ha2VmaWxlLm93YyBiL2F1dG8vbGliL3NoYTEvbWFrZWZpbGUub3djCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2Nzg3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvL2xpYi9zaGExL21ha2VmaWxlLm93YwpAQCAtMCwwICsxLDkgQEAKKworIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisKKworQ0ZMQUdTID0gLXpxIC1idD1udCAtYm0gLW90IC1vcCAtb2kgLW9lIC1zICQoQ1BVX09QVCkKKworc2hhMS5saWI6CisJd2NsMzg2IC1jICQoQ0ZMQUdTKSAtZExfRU5ESUFOIHNoYTFkZ3N0LmMKKwl3bGliIC1uIHNoYTEubGliIHNoYTFkZ3N0Lm9iagpkaWZmIC0tZ2l0IGEvYXV0by9vcHRpb25zIGIvYXV0by9vcHRpb25zCmluZGV4IDNmY2MwNzEuLjY2MTRjODggMTAwNjQ0Ci0tLSBhL2F1dG8vb3B0aW9ucworKysgYi9hdXRvL29wdGlvbnMKQEAgLTg5LDYgKzg5LDExIEBACiBNRDVfT1BUPQogTUQ1X0FTTT1OTwogCitVU0VfU0hBMT1OTworU0hBMT1OT05FCitTSEExX09QVD0KK1NIQTFfQVNNPU5PCisKIFVTRV9aTElCPU5PCiBaTElCPU5PTkUKIFpMSUJfT1BUPQpAQCAtMTkxLDYgKzE5NiwxMCBAQAogICAgICAgICAtLXdpdGgtbWQ1LW9wdD0qKSAgICAgICAgICAgICAgICBNRDVfT1BUPSIkdmFsdWUiICAgICAgICAgICA7OwogICAgICAgICAtLXdpdGgtbWQ1LWFzbSkgICAgICAgICAgICAgICAgICBNRDVfQVNNPVlFUyAgICAgICAgICAgICAgICA7OwogCisgICAgICAgIC0td2l0aC1zaGExPSopICAgICAgICAgICAgICAgICAgIFNIQTE9IiR2YWx1ZSIgICAgICAgICAgICAgIDs7CisgICAgICAgIC0td2l0aC1zaGExLW9wdD0qKSAgICAgICAgICAgICAgIFNIQTFfT1BUPSIkdmFsdWUiICAgICAgICAgIDs7CisgICAgICAgIC0td2l0aC1zaGExLWFzbSkgICAgICAgICAgICAgICAgIFNIQTFfQVNNPVlFUyAgICAgICAgICAgICAgIDs7CisKICAgICAgICAgLS13aXRoLXpsaWI9KikgICAgICAgICAgICAgICAgICAgWkxJQj0iJHZhbHVlIiAgICAgICAgICAgICAgOzsKICAgICAgICAgLS13aXRoLXpsaWItb3B0PSopICAgICAgICAgICAgICAgWkxJQl9PUFQ9IiR2YWx1ZSIgICAgICAgICAgOzsKICAgICAgICAgLS13aXRoLXpsaWItYXNtPSopICAgICAgICAgICAgICAgWkxJQl9BU009IiR2YWx1ZSIgICAgICAgICAgOzsKQEAgLTI4NSw2ICsyOTQsMTAgQEAKICAgLS13aXRoLW1kNS1vcHQ9T1BUSU9OUyAgICAgICAgICAgICBzZXQgYWRkaXRpb25hbCBvcHRpb25zIGZvciBtZDUgYnVpbGRpbmcKICAgLS13aXRoLW1kNS1hc20gICAgICAgICAgICAgICAgICAgICB1c2UgbWQ1IGFzc2VtYmxlciBzb3VyY2VzCiAKKyAgLS13aXRoLXNoYTE9RElSICAgICAgICAgICAgICAgICAgICBzZXQgcGF0aCB0byBzaGExIGxpYnJhcnkgc291cmNlcworICAtLXdpdGgtc2hhMS1vcHQ9T1BUSU9OUyAgICAgICAgICAgIHNldCBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHNoYTEgYnVpbGRpbmcKKyAgLS13aXRoLXNoYTEtYXNtICAgICAgICAgICAgICAgICAgICB1c2Ugc2hhMSBhc3NlbWJsZXIgc291cmNlcworCiAgIC0td2l0aC16bGliPURJUiAgICAgICAgICAgICAgICAgICAgc2V0IHBhdGggdG8gemxpYiBsaWJyYXJ5IHNvdXJjZXMKICAgLS13aXRoLXpsaWItb3B0PU9QVElPTlMgICAgICAgICAgICBzZXQgYWRkaXRpb25hbCBvcHRpb25zIGZvciB6bGliIGJ1aWxkaW5nCiAgIC0td2l0aC16bGliLWFzbT1DUFUgICAgICAgICAgICAgICAgdXNlIHpsaWIgYXNzZW1ibGVyIHNvdXJjZXMgb3B0aW1pemVkCmRpZmYgLS1naXQgYS9hdXRvL3N1bW1hcnkgYi9hdXRvL3N1bW1hcnkKaW5kZXggNjkwYTY1ZS4uYWNjYjdiOSAxMDA2NDQKLS0tIGEvYXV0by9zdW1tYXJ5CisrKyBiL2F1dG8vc3VtbWFyeQpAQCAtNjMsNiArNjMsMTkgQEAKICAgICAqKSAgICAgZWNobyAiICArIHVzaW5nIG1kNSBsaWJyYXJ5OiAkTUQ1IiA7OwogZXNhYwogCitjYXNlICRTSEExIGluCisgICAgWUVTKQorICAgICAgICBjYXNlICRPUEVOU1NMIGluCisgICAgICAgICAgICBOT05FfE5PKSAgZWNobyAiICArIHNoYTE6IHVzaW5nIHN5c3RlbSAkU0hBMV9MSUIgbGlicmFyeSIgOzsKKyAgICAgICAgICAgICopICAgICAgICBlY2hvICIgICsgc2hhMTogdXNpbmcgT3BlblNTTCBsaWJyYXJ5IiA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBOT05FKSAgZWNobyAiICArIHNoYTEgbGlicmFyeSBpcyBub3QgdXNlZCIgOzsKKyAgICBOTykgICAgZWNobyAiICArIHNoYTEgbGlicmFyeSBpcyBub3QgZm91bmQiIDs7CisgICAgKikgICAgIGVjaG8gIiAgKyB1c2luZyBzaGExIGxpYnJhcnk6ICRTSEExIiA7OworZXNhYworCiBjYXNlICRaTElCIGluCiAgICAgWUVTKSAgIGVjaG8gIiAgKyB1c2luZyBzeXN0ZW0gemxpYiBsaWJyYXJ5IiA7OwogICAgIE5PTkUpICBlY2hvICIgICsgemxpYiBsaWJyYXJ5IGlzIG5vdCB1c2VkIiA7OwpkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCBhYTRmMTRmLi4yMjViMGIwIDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDYyIEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjMuNDgiIGRhdGU9IjI5LjA1LjIwMDYiPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivUxdDF0tggzc/E1czYIG5neF9odHRwX2NoYXJzZXRfbW9kdWxlINLBws/UwcXUIMTM0SDQz8TawdDSz9PP1ywKK9cgz9TXxdTByCDLz9TP0tnIIM7F1CDT1NLPy8kg2sHHz8zP18vBICJDb250ZW50LVR5cGUiLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbm93IHRoZSBuZ3hfaHR0cF9jaGFyc2V0X21vZHVsZSB3b3JrcyBmb3Igc3VicmVxdWVzdHMsCitpZiB0aGUgcmVzcG9uc2UgaGFzIG5vICJDb250ZW50LVR5cGUiIGhlYWRlciBsaW5lLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8XTzMkg1yDEydLFy9TJ18UgcHJveHlfcGFzcyDOxSDC2czPIFVSSSwKK9TPIMTJ0sXL1MnXwSAicHJveHlfcmVkaXJlY3QgIGRlZmF1bHQiIMTPwsHXzNHMwSDXINDF0sXQydPBzs7Zygor0sXEydLFy9Qg1yDOwd7BzM8gzMnbzsnKINPM3NsuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgInByb3h5X3Bhc3MiIGRpcmVjdGl2ZSBoYXMgbm8gVVJJIHBhcnQsCit0aGVuIHRoZSAicHJveHlfcmVkaXJlY3QgIGRlZmF1bHQiIGRpcmVjdGl2ZSBhZGQgdGhlIHVubmVjZXNzYXJ5IHNsYXNoCitpbiBzdGFydCBvZiB0aGUgcmV3cml0dGVuIHJlZGlyZWN0LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9fO1dTSxc7Oycog0sXEydLFy9Qg19PFx8TBINDSxdfSwd3BzCDMwMLPyiBIVFRQLc3F1M/EINcgR0VULAor1MXQxdLYINzUzyDExczBxdTT0SDUz8zYy88gxMzRINLFxMnSxcvUz9csINfZ0M/MztHFzdnIINMg0M/Nz93YwAorWC1BY2NlbC1SZWRpcmVjdCwgySDVIMvP1M/S2cggzcXUz8QgzsUg0sHXxc4gSEVBRDsKK8/bycLLwSDQz9HXyczB09gg1yAwLjMuNDIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgaW50ZXJuYWwgcmVkaXJlY3QgYWx3YXlzIHRyYW5zZm9ybSBjbGllbnQncyBIVFRQIG1ldGhvZCB0byBHRVQsCitub3cgdGhlIHRyYW5zZm9ybWF0aW9uIGlzIG1hZGUgZm9yIHRoZSAiWC1BY2NlbC1SZWRpcmVjdCIgcmVkaXJlY3RzIG9ubHkKK2FuZCBpZiB0aGUgbWV0aG9kIGlzIG5vdCBIRUFEOworYnVnIGFwcGVhcmVkIGluIDAuMy40Mi4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TVzNggbmd4X2h0dHBfcGVybF9tb2R1bGUgzsUg08/CydLBzNPRLCDF08zJINDF0swgwtnMINMg0M/ExMXS1svPyiDQz9TPy8/XOworz9vJwsvBINDP0dfJzMHT2CDXIDAuMy40Ni4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBuZ3hfaHR0cF9wZXJsX21vZHVsZSBjb3VsZCBub3QgYmUgYnVpbHQsIGlmIHRoZSBwZXJsIHdhcyBidWlsdAord2l0aCB0aGUgdGhyZWFkcyBzdXBwb3J0OworYnVnIGFwcGVhcmVkIGluIDAuMy40Ni4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKKwogPGNoYW5nZXMgdmVyPSIwLjMuNDciIGRhdGU9IjIzLjA1LjIwMDYiPgogCiA8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggNzJhYWEzNC4uYzM3NmI5MiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjQ3IgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy40OCIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYwppbmRleCAzYzllMDFiLi5jN2FhMTRjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgICBpOwogICAgIG5neF9odHRwX2NoYXJzZXRfdCAgICAgICAgICAgICpjaGFyc2V0czsKICAgICBuZ3hfaHR0cF9jaGFyc2V0X2N0eF90ICAgICAgICAqY3R4OwotICAgIG5neF9odHRwX2NoYXJzZXRfbG9jX2NvbmZfdCAgICpsY2Y7CisgICAgbmd4X2h0dHBfY2hhcnNldF9sb2NfY29uZl90ICAgKmxjZiwgKm1sY2Y7CiAgICAgbmd4X2h0dHBfY2hhcnNldF9tYWluX2NvbmZfdCAgKm1jZjsKIAogICAgIG1jZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbWFpbl9jb25mKHIsIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7CkBAIC0xNjIsOSArMTYyLDkgQEAKICAgICBjdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLT5tYWluLCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOwogCiAgICAgaWYgKGN0eCA9PSBOVUxMKSB7Ci0gICAgICAgIGxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYoci0+bWFpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOwotICAgICAgICBjaGFyc2V0ID0gbGNmLT5jaGFyc2V0OworICAgICAgICBtbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLT5tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOworICAgICAgICBjaGFyc2V0ID0gbWxjZi0+Y2hhcnNldDsKIAogICAgICAgICBpZiAoY2hhcnNldCA9PSBOR1hfSFRUUF9OT19DSEFSU0VUKSB7CiAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwpAQCAtMTc0LDE5ICsxNzQsMzAgQEAKICAgICAgICAgY2hhcnNldCA9IGN0eC0+Y2hhcnNldDsKICAgICB9CiAKLSAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmxlbiA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7Ci0gICAgfQotCi0gICAgaWYgKG5neF9zdHJuY2FzZWNtcChyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUuZGF0YSwgInRleHQvIiwgNSkgIT0gMAotICAgICAgICAmJiBuZ3hfc3RybmNhc2VjbXAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiwgMjQpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwotICAgIH0KLQogICAgIGNoYXJzZXRzID0gbWNmLT5jaGFyc2V0cy5lbHRzOwogCisgICAgaWYgKHIgPT0gci0+bWFpbikgeworICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmxlbiA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5neF9zdHJuY2FzZWNtcChyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUuZGF0YSwgInRleHQvIiwgNSkgIT0gMAorICAgICAgICAgICAgJiYgbmd4X3N0cm5jYXNlY21wKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiLCAyNCkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gPT0gMCkgeworICAgICAgICAgICAgbWxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYoci0+bWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7CisgICAgICAgICAgICBzb3VyY2VfY2hhcnNldCA9IG1sY2YtPnNvdXJjZV9jaGFyc2V0OworCisgICAgICAgICAgICBnb3RvIGZvdW5kOworICAgICAgICB9CisgICAgfQorCiAgICAgbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOwogCiAgICAgbGVuID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCmluZGV4IGY1ZmI5MTguLjMxYTQzNTUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwpAQCAtMTM0OSw3ICsxMzQ5LDkgQEAKIAogICAgIHAgPSBuZ3hfY29weShwLCBoLT52YWx1ZS5kYXRhLCBwcmVmaXgpOwogCi0gICAgcCA9IG5neF9jb3B5KHAsIHByLT5yZXBsYWNlbWVudC50ZXh0LmRhdGEsIHByLT5yZXBsYWNlbWVudC50ZXh0Lmxlbik7CisgICAgaWYgKHByLT5yZXBsYWNlbWVudC50ZXh0LmxlbikgeworICAgICAgICBwID0gbmd4X2NvcHkocCwgcHItPnJlcGxhY2VtZW50LnRleHQuZGF0YSwgcHItPnJlcGxhY2VtZW50LnRleHQubGVuKTsKKyAgICB9CiAKICAgICBuZ3hfbWVtY3B5KHAsIGgtPnZhbHVlLmRhdGEgKyBwcmVmaXggKyBwci0+cmVkaXJlY3QubGVuLAogICAgICAgICAgICAgICAgaC0+dmFsdWUubGVuIC0gcHItPnJlZGlyZWN0LmxlbiAtIHByZWZpeCk7CkBAIC0xNjk0LDcgKzE2OTYsMTQgQEAKIAogICAgICAgICAgICAgcHItPmhhbmRsZXIgPSBuZ3hfaHR0cF9wcm94eV9yZXdyaXRlX3JlZGlyZWN0X3RleHQ7CiAgICAgICAgICAgICBwci0+cmVkaXJlY3QgPSBjb25mLT51cHN0cmVhbS51cmw7Ci0gICAgICAgICAgICBwci0+cmVwbGFjZW1lbnQudGV4dCA9IGNvbmYtPnVwc3RyZWFtLmxvY2F0aW9uOworCisgICAgICAgICAgICBpZiAoY29uZi0+dXBzdHJlYW0udXJpLmxlbikgeworICAgICAgICAgICAgICAgIHByLT5yZXBsYWNlbWVudC50ZXh0ID0gY29uZi0+dXBzdHJlYW0ubG9jYXRpb247CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHItPnJlcGxhY2VtZW50LnRleHQubGVuID0gMDsKKyAgICAgICAgICAgICAgICBwci0+cmVwbGFjZW1lbnQudGV4dC5kYXRhID0gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjI2Myw3ICsyMjcyLDE0IEBACiAKICAgICAgICAgcHItPmhhbmRsZXIgPSBuZ3hfaHR0cF9wcm94eV9yZXdyaXRlX3JlZGlyZWN0X3RleHQ7CiAgICAgICAgIHByLT5yZWRpcmVjdCA9IHBsY2YtPnVwc3RyZWFtLnVybDsKLSAgICAgICAgcHItPnJlcGxhY2VtZW50LnRleHQgPSBwbGNmLT51cHN0cmVhbS5sb2NhdGlvbjsKKworICAgICAgICBpZiAocGxjZi0+dXBzdHJlYW0udXJpLmxlbikgeworICAgICAgICAgICAgcHItPnJlcGxhY2VtZW50LnRleHQgPSBwbGNmLT51cHN0cmVhbS5sb2NhdGlvbjsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHItPnJlcGxhY2VtZW50LnRleHQubGVuID0gMDsKKyAgICAgICAgICAgIHByLT5yZXBsYWNlbWVudC50ZXh0LmRhdGEgPSBOVUxMOworICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKaW5kZXggOTc1YzcyNy4uOTFhOWM4NSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKQEAgLTM0LDYgKzM0LDEyIEBACiB9IG5neF9odHRwX3BlcmxfdmFyaWFibGVfdDsKIAogCit0eXBlZGVmIHN0cnVjdCB7CisgICAgU1YgICAgICAgICAgICAgICAgKnN2OworICAgIFBlcmxJbnRlcnByZXRlciAgICpwZXJsOworfSBuZ3hfaHR0cF9wZXJsX2NsZWFudXBfdDsKKworCiAjaWYgKE5HWF9IVFRQX1NTSSkKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfcGVybF9zc2kobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9odHRwX3NzaV9jdHhfdCAqc3NpX2N0eCwgbmd4X3N0cl90ICoqcGFyYW1zKTsKQEAgLTUxLDcgKzU3LDcgQEAKIHN0YXRpYyBQZXJsSW50ZXJwcmV0ZXIgKgogICAgIG5neF9odHRwX3BlcmxfY3JlYXRlX2ludGVycHJldGVyKG5neF9odHRwX3BlcmxfbWFpbl9jb25mX3QgKnBtY2YsCiAgICAgbmd4X2xvZ190ICpsb2cpOwotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9wZXJsX3J1bl9yZXF1aXJlcyhuZ3hfYXJyYXlfdCAqcmVxdWlyZXMsCitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3BlcmxfcnVuX3JlcXVpcmVzKHBUSFhfIG5neF9hcnJheV90ICpyZXF1aXJlcywKICAgICBuZ3hfbG9nX3QgKmxvZyk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3BlcmxfY2FsbF9oYW5kbGVyKHBUSFhfIG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBTViAqc3ViLCBuZ3hfc3RyX3QgKiphcmdzLCBuZ3hfc3RyX3QgKmhhbmRsZXIsIG5neF9zdHJfdCAqcnYpOwpAQCAtNDc4LDcgKzQ4NCw3IEBACiBuZ3hfaHR0cF9wZXJsX2luaXRfaW50ZXJwcmV0ZXIobmd4X2NvbmZfdCAqY2YsIG5neF9odHRwX3BlcmxfbWFpbl9jb25mX3QgKnBtY2YpCiB7CiAjaWYgKE5HWF9IQVZFX1BFUkxfQ0xPTkUgfHwgTkdYX0hBVkVfUEVSTF9NVUxUSVBMSUNJVFkpCi0gICAgbmd4X3Bvb2xfY2xlYW51cF90ICAqY2xuOworICAgIG5neF9wb29sX2NsZWFudXBfdCAgICAgICAqY2xuOwogCiAgICAgY2xuID0gbmd4X3Bvb2xfY2xlYW51cF9hZGQoY2YtPnBvb2wsIDApOwogICAgIGlmIChjbG4gPT0gTlVMTCkgewpAQCAtNTA0LDcgKzUxMCw5IEBACiAjaWYgIShOR1hfSEFWRV9QRVJMX0NMT05FIHx8IE5HWF9IQVZFX1BFUkxfTVVMVElQTElDSVRZKQogCiAgICAgaWYgKHBlcmwpIHsKLSAgICAgICAgaWYgKG5neF9odHRwX3BlcmxfcnVuX3JlcXVpcmVzKCZwbWNmLT5yZXF1aXJlcywgY2YtPmxvZykgIT0gTkdYX09LKSB7CisgICAgICAgIGlmIChuZ3hfaHR0cF9wZXJsX3J1bl9yZXF1aXJlcyhhVEhYXyAmcG1jZi0+cmVxdWlyZXMsIGNmLT5sb2cpCisgICAgICAgICAgICAhPSBOR1hfT0spCisgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCkBAIC02MTMsNyArNjIxLDcgQEAKICAgICAgICAgZ290byBmYWlsOwogICAgIH0KIAotICAgIGlmIChuZ3hfaHR0cF9wZXJsX3J1bl9yZXF1aXJlcygmcG1jZi0+cmVxdWlyZXMsIGxvZykgIT0gTkdYX09LKSB7CisgICAgaWYgKG5neF9odHRwX3BlcmxfcnVuX3JlcXVpcmVzKGFUSFhfICZwbWNmLT5yZXF1aXJlcywgbG9nKSAhPSBOR1hfT0spIHsKICAgICAgICAgZ290byBmYWlsOwogICAgIH0KIApAQCAtNjM0LDcgKzY0Miw3IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfcGVybF9ydW5fcmVxdWlyZXMobmd4X2FycmF5X3QgKnJlcXVpcmVzLCBuZ3hfbG9nX3QgKmxvZykKK25neF9odHRwX3BlcmxfcnVuX3JlcXVpcmVzKHBUSFhfIG5neF9hcnJheV90ICpyZXF1aXJlcywgbmd4X2xvZ190ICpsb2cpCiB7CiAgICAgY2hhciAgICAgICAqKnNjcmlwdDsKICAgICBTVFJMRU4gICAgICAgbGVuOwpAQCAtODcwLDkgKzg3OCwxMSBAQAogc3RhdGljIHZvaWQKIG5neF9odHRwX3BlcmxfY2xlYW51cF9zdih2b2lkICpkYXRhKQogewotICAgIFNWICAqc3YgPSBkYXRhOworICAgIG5neF9odHRwX3BlcmxfY2xlYW51cF90ICAqY2xuID0gZGF0YTsKIAotICAgIFN2UkVGQ05UX2RlYyhzdik7CisgICAgZFRIWGEoY2xuLT5wZXJsKTsKKworICAgIFN2UkVGQ05UX2RlYyhjbG4tPnN2KTsKIH0KIAogCkBAIC05NjcsNiArOTc3LDcgQEAKIAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICp2YWx1ZTsKICAgICBuZ3hfcG9vbF9jbGVhbnVwX3QgICAgICAgICAqY2xuOworICAgIG5neF9odHRwX3BlcmxfY2xlYW51cF90ICAgICpwY2xuOwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICpjbGNmOwogICAgIG5neF9odHRwX3BlcmxfbWFpbl9jb25mX3QgICpwbWNmOwogCkBAIC05ODYsNyArOTk3LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGNsbiA9IG5neF9wb29sX2NsZWFudXBfYWRkKGNmLT5wb29sLCAwKTsKKyAgICBjbG4gPSBuZ3hfcG9vbF9jbGVhbnVwX2FkZChjZi0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3BlcmxfY2xlYW51cF90KSk7CiAgICAgaWYgKGNsbiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CkBAIC0xMDEyLDcgKzEwMjMsOSBAQAogICAgIH0KIAogICAgIGNsbi0+aGFuZGxlciA9IG5neF9odHRwX3BlcmxfY2xlYW51cF9zdjsKLSAgICBjbG4tPmRhdGEgPSBwbGNmLT5zdWI7CisgICAgcGNsbiA9IGNsbi0+ZGF0YTsKKyAgICBwY2xuLT5zdiA9IHBsY2YtPnN1YjsKKyAgICBwY2xuLT5wZXJsID0gcG1jZi0+cGVybDsKIAogICAgIGNsY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbG9jX2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKICAgICBjbGNmLT5oYW5kbGVyID0gbmd4X2h0dHBfcGVybF9oYW5kbGVyOwpAQCAtMTAyOCw2ICsxMDQxLDcgQEAKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAqdmFsdWU7CiAgICAgbmd4X3Bvb2xfY2xlYW51cF90ICAgICAgICAgKmNsbjsKICAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAgICAqdjsKKyAgICBuZ3hfaHR0cF9wZXJsX2NsZWFudXBfdCAgICAqcGNsbjsKICAgICBuZ3hfaHR0cF9wZXJsX3ZhcmlhYmxlX3QgICAqcHY7CiAgICAgbmd4X2h0dHBfcGVybF9tYWluX2NvbmZfdCAgKnBtY2Y7CiAKQEAgLTEwNjUsNyArMTA3OSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjbG4gPSBuZ3hfcG9vbF9jbGVhbnVwX2FkZChjZi0+cG9vbCwgMCk7CisgICAgY2xuID0gbmd4X3Bvb2xfY2xlYW51cF9hZGQoY2YtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9wZXJsX2NsZWFudXBfdCkpOwogICAgIGlmIChjbG4gPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQpAQCAtMTA5MSw3ICsxMTA1LDkgQEAKICAgICB9CiAKICAgICBjbG4tPmhhbmRsZXIgPSBuZ3hfaHR0cF9wZXJsX2NsZWFudXBfc3Y7Ci0gICAgY2xuLT5kYXRhID0gcHYtPnN1YjsKKyAgICBwY2xuID0gY2xuLT5kYXRhOworICAgIHBjbG4tPnN2ID0gcHYtPnN1YjsKKyAgICBwY2xuLT5wZXJsID0gcG1jZi0+cGVybDsKIAogICAgIHYtPmdldF9oYW5kbGVyID0gbmd4X2h0dHBfcGVybF92YXJpYWJsZTsKICAgICB2LT5kYXRhID0gKHVpbnRwdHJfdCkgcHY7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCA2Y2JiZjA5Li5mMDhlYzQ1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTEzMzAsNyArMTMzMCw2IEBACiAgICAgbmd4X2h0dHBfdXBkYXRlX2xvY2F0aW9uX2NvbmZpZyhyKTsKIAogICAgIHItPmludGVybmFsID0gMTsKLSAgICByLT5tZXRob2QgPSBOR1hfSFRUUF9HRVQ7CiAKICAgICByLT51cmlfY2hhbmdlcy0tOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggNGY3ZDI0Zi4uYzYwNmVjOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMTQ3MCw3ICsxNDcwLDYgQEAKICAgICAgICAgfHwgcmMgPT0gTkdYX0hUVFBfQ1JFQVRFRAogICAgICAgICB8fCByYyA9PSBOR1hfSFRUUF9OT19DT05URU5UKQogICAgIHsKLQogICAgICAgICBpZiAocmMgPT0gTkdYX0hUVFBfQ0xPU0UpIHsKICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgcmMpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwppbmRleCA5ODI2ZWNlLi45NDc5M2Q3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwpAQCAtODMzLDYgKzgzMywxMCBAQAogCiAgICAgZS0+c3RhdHVzID0gY29kZS0+c3RhdHVzOwogCisgICAgaWYgKGNvZGUtPnN0YXR1cyA9PSBOR1hfSFRUUF9OT19DT05URU5UKSB7CisgICAgICAgIGUtPnJlcXVlc3QtPmhlYWRlcl9vbmx5ID0gMTsKKyAgICB9CisKICAgICBlLT5pcCArPSBzaXplb2Yobmd4X2h0dHBfc2NyaXB0X3JldHVybl9jb2RlX3QpIC0gc2l6ZW9mKHVpbnRwdHJfdCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDRiOTE0YWIuLmU1M2QzMmMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtMTE2MCw2ICsxMTYwLDEwIEBACiAgICAgICAgICAgICByLT56ZXJvX2luX3VyaSA9IDE7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoci0+bWV0aG9kICE9IE5HWF9IVFRQX0hFQUQpIHsKKyAgICAgICAgICAgIHItPm1ldGhvZCA9IE5HWF9IVFRQX0dFVDsKKyAgICAgICAgfQorCiAgICAgICAgIG5neF9odHRwX2ludGVybmFsX3JlZGlyZWN0KHIsIHVyaSwgJmFyZ3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL215c3FsL2NvbmZpZyBiL3NyYy9teXNxbC9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlYzYzOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9teXNxbC9jb25maWcKQEAgLTAsMCArMSwxMyBAQAorCituZ3hfYWRkb25fbmFtZT1uZ3hfbXlzcWwKKworSFRUUF9NT0RVTEVTPSIkSFRUUF9NT0RVTEVTIG5neF9odHRwX215c3FsX3Rlc3RfbW9kdWxlIgorCitIVFRQX0lOQ1M9IiRIVFRQX0lOQ1MgJG5neF9hZGRvbl9kaXIiCitIVFRQX0RFUFM9IiRIVFRQX0RFUFMgJG5neF9hZGRvbl9kaXIvbmd4X215c3FsLmgiCisjQ09SRV9MSUJTPSIkQ09SRV9MSUJTIC1sbWQiCisKK1VTRV9TSEExPVlFUworCitOR1hfQURET05fU1JDUz0iJE5HWF9BRERPTl9TUkNTICRuZ3hfYWRkb25fZGlyL25neF9teXNxbC5jIgorTkdYX0FERE9OX1NSQ1M9IiROR1hfQURET05fU1JDUyAkbmd4X2FkZG9uX2Rpci9uZ3hfaHR0cF9teXNxbF90ZXN0LmMiCmRpZmYgLS1naXQgYS9zcmMvbXlzcWwvbmd4X2h0dHBfbXlzcWxfdGVzdC5jIGIvc3JjL215c3FsL25neF9odHRwX215c3FsX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjgzZjdkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL215c3FsL25neF9odHRwX215c3FsX3Rlc3QuYwpAQCAtMCwwICsxLDE5NiBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKyNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CisjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKyNpbmNsdWRlIDxuZ3hfbXlzcWwuaD4KKyNpbmNsdWRlIDxuZ3hfaHR0cC5oPgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfcGVlcnNfdCAgKnBlZXJzOworfSBuZ3hfaHR0cF9teXNxbF90ZXN0X2NvbmZfdDsKKworCitzdGF0aWMgdm9pZCBuZ3hfaHR0cF9teXNxbF9hdXRoKG5neF9teXNxbF90ICptKTsKK3N0YXRpYyB2b2lkIG5neF9odHRwX215c3FsX2RvbmUobmd4X215c3FsX3QgKm0pOworc3RhdGljIHZvaWQgKm5neF9odHRwX215c3FsX3Rlc3RfY3JlYXRlX2xvY19jb25mKG5neF9jb25mX3QgKmNmKTsKK3N0YXRpYyBjaGFyICpuZ3hfaHR0cF9teXNxbF90ZXN0KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCisgICAgdm9pZCAqY29uZik7CisKK3N0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfaHR0cF9teXNxbF90ZXN0X2NvbW1hbmRzW10gPSB7CisKKyAgICB7IG5neF9zdHJpbmcoIm15c3FsX3Rlc3QiKSwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2h0dHBfbXlzcWxfdGVzdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIDAsCisgICAgICBOVUxMIH0sCisKKyAgICAgIG5neF9udWxsX2NvbW1hbmQKK307CisKKworbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX215c3FsX3Rlc3RfbW9kdWxlX2N0eCA9IHsKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLworCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYWluIGNvbmZpZ3VyYXRpb24gKi8KKworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugc2VydmVyIGNvbmZpZ3VyYXRpb24gKi8KKworICAgIG5neF9odHRwX215c3FsX3Rlc3RfY3JlYXRlX2xvY19jb25mLCAgLyogY3JlYXRlIGxvY2F0aW9uIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2UgbG9jYXRpb24gY29uZmlndXJhdGlvbiAqLworfTsKKworCituZ3hfbW9kdWxlX3QgIG5neF9odHRwX215c3FsX3Rlc3RfbW9kdWxlID0geworICAgIE5HWF9NT0RVTEVfVjEsCisgICAgJm5neF9odHRwX215c3FsX3Rlc3RfbW9kdWxlX2N0eCwgLyogbW9kdWxlIGNvbnRleHQgKi8KKyAgICBuZ3hfaHR0cF9teXNxbF90ZXN0X2NvbW1hbmRzLCAgIC8qIG1vZHVsZSBkaXJlY3RpdmVzICovCisgICAgTkdYX0hUVFBfTU9EVUxFLCAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHRocmVhZCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHRocmVhZCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHByb2Nlc3MgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCBtYXN0ZXIgKi8KKyAgICBOR1hfTU9EVUxFX1YxX1BBRERJTkcKK307CisKKworc3RhdGljIG5neF9zdHJfdCAgbmd4X215c3FsX2xvZ2luID0gbmd4X3N0cmluZygicm9vdCIpOworc3RhdGljIG5neF9zdHJfdCAgbmd4X215c3FsX3Bhc3N3ZCA9IG5neF9zdHJpbmcoInRwIik7CitzdGF0aWMgbmd4X3N0cl90ICBuZ3hfbXlzcWxfZGF0YWJhc2UgPSBuZ3hfc3RyaW5nKCJteXNxbCIpOworc3RhdGljIG5neF9zdHJfdCAgbmd4X215c3FsX2NvbW1hbmRfcXVlcnkgPQorICAgIG5neF9zdHJpbmcoInNlbGVjdCAqIGZyb20gdXNlciIpOworCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX215c3FsX3Rlc3RfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCit7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfbXlzcWxfdCAgICAgICAgICAgICAgICAgKm07CisgICAgbmd4X2h0dHBfbXlzcWxfdGVzdF9jb25mX3QgICptdGNmOworCisgICAgbXRjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfbXlzcWxfdGVzdF9tb2R1bGUpOworCisgICAgbSA9IG5neF9wY2FsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfbXlzcWxfdCkpOworCisgICAgaWYgKG0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgIH0KKworICAgIG0tPnBvb2wgPSByLT5wb29sOworICAgIG0tPmhhbmRsZXIgPSBuZ3hfaHR0cF9teXNxbF9hdXRoOworICAgIG0tPmRhdGEgPSByOworCisgICAgbS0+bG9naW4gPSAmbmd4X215c3FsX2xvZ2luOworICAgIG0tPnBhc3N3ZCA9ICZuZ3hfbXlzcWxfcGFzc3dkOworICAgIG0tPmRhdGFiYXNlID0gJm5neF9teXNxbF9kYXRhYmFzZTsKKworICAgIG0tPnBlZXIubG9nID0gci0+Y29ubmVjdGlvbi0+bG9nOworICAgIG0tPnBlZXIubG9nX2Vycm9yID0gTkdYX0VSUk9SX0VSUjsKKyAgICBtLT5wZWVyLnBlZXJzID0gbXRjZi0+cGVlcnM7CisgICAgbS0+cGVlci50cmllcyA9IG10Y2YtPnBlZXJzLT5udW1iZXI7CisKKyAgICByYyA9IG5neF9teXNxbF9jb25uZWN0KG0pOworCisgICAgaWYgKHJjID09IE5HWF9PSyB8fCByYyA9PSBOR1hfQUdBSU4pIHsKKyAgICAgICAgcmV0dXJuIE5HWF9ET05FOworICAgIH0KKworICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7Cit9CisKKworc3RhdGljIHZvaWQKK25neF9odHRwX215c3FsX2F1dGgobmd4X215c3FsX3QgKm0pCit7CisgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAqcjsKKworICAgIHIgPSBtLT5kYXRhOworCisgICAgaWYgKG0tPnN0YXRlICE9IE5HWF9PSykgeworICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX05PX0NPTlRFTlQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbS0+cXVlcnkubGVuID0gTkdYX01ZU1FMX0NNRFBLVF9MRU4gKyBuZ3hfbXlzcWxfY29tbWFuZF9xdWVyeS5sZW47CisKKyAgICBtLT5xdWVyeS5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCBtLT5xdWVyeS5sZW4pOworICAgIGlmIChtLT5xdWVyeS5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbmd4X21lbWNweShtLT5xdWVyeS5kYXRhICsgTkdYX01ZU1FMX0NNRFBLVF9MRU4sCisgICAgICAgICAgICAgICBuZ3hfbXlzcWxfY29tbWFuZF9xdWVyeS5kYXRhLCBuZ3hfbXlzcWxfY29tbWFuZF9xdWVyeS5sZW4pOworCisgICAgbS0+aGFuZGxlciA9IG5neF9odHRwX215c3FsX2RvbmU7CisKKyAgICBuZ3hfbXlzcWxfcXVlcnkobSk7Cit9CisKKworc3RhdGljIHZvaWQKK25neF9odHRwX215c3FsX2RvbmUobmd4X215c3FsX3QgKm0pCit7CisgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAqcjsKKworICAgIHIgPSBtLT5kYXRhOworCisgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9OT19DT05URU5UKTsKK30KKworCitzdGF0aWMgdm9pZCAqCituZ3hfaHR0cF9teXNxbF90ZXN0X2NyZWF0ZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZikKK3sKKyAgICBuZ3hfaHR0cF9teXNxbF90ZXN0X2NvbmZfdCAgKmNvbmY7CisKKyAgICBjb25mID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9teXNxbF90ZXN0X2NvbmZfdCkpOworICAgIGlmIChjb25mID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBjb25mOworfQorCitzdGF0aWMgY2hhciAqCituZ3hfaHR0cF9teXNxbF90ZXN0KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCit7CisgICAgbmd4X2h0dHBfbXlzcWxfdGVzdF9jb25mX3QgICptdGNmID0gY29uZjsKKworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgKnZhbHVlOworICAgIG5neF91cmxfdCAgICAgICAgICAgICAgICAgIHU7CisgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKKworICAgIGNsY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbG9jX2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKyAgICBjbGNmLT5oYW5kbGVyID0gbmd4X2h0dHBfbXlzcWxfdGVzdF9oYW5kbGVyOworCisgICAgdmFsdWUgPSBjZi0+YXJncy0+ZWx0czsKKworICAgIG5neF9tZW16ZXJvKCZ1LCBzaXplb2Yobmd4X3VybF90KSk7CisKKyAgICB1LnVybCA9IHZhbHVlWzFdOworICAgIHUuZGVmYXVsdF9wb3J0biA9IDMzMDY7CisKKyAgICBpZiAobmd4X3BhcnNlX3VybChjZiwgJnUpICE9IE5HWF9PSykgeworICAgICAgICBpZiAodS5lcnIpIHsKKyAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaW4gdXBzdHJlYW0gXCIlVlwiIiwgdS5lcnIsICZ1LnVybCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgbXRjZi0+cGVlcnMgPSB1LnBlZXJzOworCisgICAgcmV0dXJuIE5HWF9DT05GX09LOworfQpkaWZmIC0tZ2l0IGEvc3JjL215c3FsL25neF9teXNxbC5jIGIvc3JjL215c3FsL25neF9teXNxbC5jCmluZGV4IDFlMDA4YjUuLmRhYWJjZDggMTAwNjQ0Ci0tLSBhL3NyYy9teXNxbC9uZ3hfbXlzcWwuYworKysgYi9zcmMvbXlzcWwvbmd4X215c3FsLmMKQEAgLTQsMTMgKzQsMTAwIEBACiAgKi8KIAogCisvKiB0aGUgbGlicmFyeSBzdXBwb3J0cyB0aGUgc3Vic2V0IG9mIHRoZSBNeVNRTCA0LjErIHByb3RvY29sICh2ZXJzaW9uIDEwKSAqLworCisKICNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KICNpbmNsdWRlIDxuZ3hfZXZlbnQuaD4KKyNpbmNsdWRlIDxuZ3hfZXZlbnRfY29ubmVjdC5oPgogI2luY2x1ZGUgPG5neF9teXNxbC5oPgogCisjaWYgKE5HWF9IQVZFX09QRU5TU0xfU0hBMV9IKQorI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisjZWxzZQorI2luY2x1ZGUgPHNoYS5oPgorI2VuZGlmCiAKLS8qIHRoZSBsaWJyYXJ5IHN1cHBvcnRzIHRoZSBzdWJzZXQgb2YgdGhlIE15U1FMIDQuMSsgcHJvdG9jb2wgKHZlcnNpb24gMTApICovCisKKyNkZWZpbmUgTkdYX01ZU1FMX0xPTkdfUEFTU1dPUkQgICAgICAgMHgwMDAxCisjZGVmaW5lIE5HWF9NWVNRTF9DT05ORUNUX1dJVEhfREIgICAgIDB4MDAwOAorI2RlZmluZSBOR1hfTVlTUUxfUFJPVE9DT0xfNDEgICAgICAgICAweDAyMDAKKyNkZWZpbmUgTkdYX01ZU1FMX1NFQ1VSRV9DT05ORUNUSU9OICAgMHg4MDAwCisKKworI2RlZmluZSBOR1hfTVlTUUxfQ01EX1FVRVJZICAgICAgICAgICAzCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVfY2hhciAgICAgIHBrdGxlblszXTsKKyAgICB1X2NoYXIgICAgICBwa3RuOworCisgICAgdV9jaGFyICAgICAgcHJvdG9jb2w7CisgICAgdV9jaGFyICAgICAgdmVyc2lvblsxXTsgICAgICAgLyogTlVMTC10ZXJtaW5hdGVkIHN0cmluZyAqLworfSBuZ3hfbXlzcWxfZ3JlZXRpbmcxX3BrdF90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1X2NoYXIgICAgICB0aHJlYWRbNF07CisgICAgdV9jaGFyICAgICAgc2FsdDFbOV07CisgICAgdV9jaGFyICAgICAgY2FwYWNpdHlbMl07CisgICAgdV9jaGFyICAgICAgY2hhcnNldDsKKyAgICB1X2NoYXIgICAgICBzdGF0dXNbMl07CisgICAgdV9jaGFyICAgICAgemVyb1sxM107CisgICAgdV9jaGFyICAgICAgc2FsdDJbMTNdOworfSBuZ3hfbXlzcWxfZ3JlZXRpbmcyX3BrdF90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1X2NoYXIgICAgICBwa3RsZW5bM107CisgICAgdV9jaGFyICAgICAgcGt0bjsKKworICAgIHVfY2hhciAgICAgIGNhcGFjaXR5WzRdOworICAgIHVfY2hhciAgICAgIG1heF9wYWNrZXRbNF07CisgICAgdV9jaGFyICAgICAgY2hhcnNldDsKKyAgICB1X2NoYXIgICAgICB6ZXJvWzIzXTsKKyAgICB1X2NoYXIgICAgICBsb2dpblsxXTsgICAgICAgIC8qIE5VTEwtdGVybWluYXRlZCBzdHJpbmcgKi8KKworIC8qCisgICogdV9jaGFyICAgICAgcGFzc3dkX2xlbjsgICAgICAgICAwIGlmIG5vIHBhc3N3b3JkCisgICogdV9jaGFyICAgICAgcGFzc3dkWzIwXTsKKyAgKgorICAqIHVfY2hhciAgICAgIGRhdGFiYXNlWzFdOyAgICAgICAgTlVMTC10ZXJtaW5hdGVkIHN0cmluZworICAqLworCit9IG5neF9teXNxbF9hdXRoX3BrdF90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1X2NoYXIgICAgICBwa3RsZW5bM107CisgICAgdV9jaGFyICAgICAgcGt0bjsKKyAgICB1X2NoYXIgICAgICBmaWVsZHM7Cit9IG5neF9teXNxbF9yZXNwb25zZV9wa3RfdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdV9jaGFyICAgICAgcGt0bGVuWzNdOworICAgIHVfY2hhciAgICAgIHBrdG47CisgICAgdV9jaGFyICAgICAgZXJyOworICAgIHVfY2hhciAgICAgIGNvZGVbMl07CisgICAgdV9jaGFyICAgICAgbWVzc2FnZVsxXTsgICAgICAgIC8qIHN0cmluZyAqLworfSBuZ3hfbXlzcWxfZXJyb3JfcGt0X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVfY2hhciAgICAgIHBrdGxlblszXTsKKyAgICB1X2NoYXIgICAgICBwa3RuOworICAgIHVfY2hhciAgICAgIGNvbW1hbmQ7CisgICAgdV9jaGFyICAgICAgYXJnWzFdOyAgICAgICAgICAgIC8qIHN0cmluZyAqLworfSBuZ3hfbXlzcWxfY29tbWFuZF9wa3RfdDsKKworCitzdGF0aWMgdm9pZCBuZ3hfbXlzcWxfcmVhZF9zZXJ2ZXJfZ3JlZXRpbmcobmd4X2V2ZW50X3QgKnJldik7CitzdGF0aWMgdm9pZCBuZ3hfbXlzcWxfZW1wdHlfaGFuZGxlcihuZ3hfZXZlbnRfdCAqd2V2KTsKK3N0YXRpYyB2b2lkIG5neF9teXNxbF9yZWFkX2F1dGhfcmVzdWx0KG5neF9ldmVudF90ICpyZXYpOworc3RhdGljIHZvaWQgbmd4X215c3FsX3JlYWRfcXVlcnlfcmVzdWx0KG5neF9ldmVudF90ICpyZXYpOworc3RhdGljIHZvaWQgbmd4X215c3FsX2Nsb3NlKG5neF9teXNxbF90ICptLCBuZ3hfaW50X3QgcmMpOwogCiAKIG5neF9pbnRfdApAQCAtMzIsMTEgKzExOSwxMiBAQAogICAgICAgICByZXR1cm4gcmM7CiAgICAgfQogCisgICAgbS0+cGVlci5jb25uZWN0aW9uLT5kYXRhID0gbTsKKwogICAgIG0tPnBlZXIuY29ubmVjdGlvbi0+cmVhZC0+aGFuZGxlciA9IG5neF9teXNxbF9yZWFkX3NlcnZlcl9ncmVldGluZzsKLSAgICBtLT5wZWVyLmNvbm5lY3Rpb24tPndyaXRlLT5oYW5kbGVyID0gbmd4X215c3FsX2VtdHB5X2hhbmRsZXI7CisgICAgbS0+cGVlci5jb25uZWN0aW9uLT53cml0ZS0+aGFuZGxlciA9IG5neF9teXNxbF9lbXB0eV9oYW5kbGVyOwogCiAgICAgbmd4X2FkZF90aW1lcihtLT5wZWVyLmNvbm5lY3Rpb24tPnJlYWQsIC8qIFNUVUIgKi8gNTAwMCk7Ci0gICAgbmd4X2FkZF90aW1lcihtLT5wZWVyLmNvbm5lY3Rpb24tPndyaXRlLCAvKiBTVFVCICovIDUwMDApOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KQEAgLTQ1LDEwICsxMzMsMTcgQEAKIHN0YXRpYyB2b2lkCiBuZ3hfbXlzcWxfcmVhZF9zZXJ2ZXJfZ3JlZXRpbmcobmd4X2V2ZW50X3QgKnJldikKIHsKLSAgICBzaXplX3QgICAgICAgICAgICAgbGVuOwotICAgIHVfY2hhciAgICAgICAgICAgICpwLCAqdDsKLSAgICBuZ3hfbXlzcWxfdCAgICAgICAqbTsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgbGVuOworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICpwOworICAgIHNzaXplX3QgICAgICAgICAgICAgICAgICAgICBuOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBpLCBjYXBhY2l0eTsKKyAgICBuZ3hfbXlzcWxfdCAgICAgICAgICAgICAgICAqbTsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICAqYzsKKyAgICBuZ3hfbXlzcWxfZ3JlZXRpbmcxX3BrdF90ICAqZ3IxOworICAgIG5neF9teXNxbF9ncmVldGluZzJfcGt0X3QgICpncjI7CisgICAgbmd4X215c3FsX2F1dGhfcGt0X3QgICAgICAgKmF1dGg7CisgICAgU0hBX0NUWCAgICAgICAgICAgICAgICAgICAgIHNoYTsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgaGFzaDFbMjBdLCBoYXNoMlsyMF07CiAKICAgICBjID0gcmV2LT5kYXRhOwogICAgIG0gPSBjLT5kYXRhOwpAQCAtNTYsMTYgKzE1MSwxNiBAQAogICAgIGlmIChyZXYtPnRpbWVkb3V0KSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHJldi0+bG9nLCBOR1hfRVRJTUVET1VULAogICAgICAgICAgICAgICAgICAgICAgICJteXNxbCBzZXJ2ZXIgJVYgdGltZWQgb3V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5wZWVyLnBlZXJzLT5wZWVyWzBdLm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICZtLT5wZWVyLnBlZXJzLT5wZWVyWzBdLm5hbWUpOwogCiAgICAgICAgIG5neF9teXNxbF9jbG9zZShtLCBOR1hfRVJST1IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG0tPmJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIG0tPnBlZXIubG9nLT5hY3Rpb24gPSAicmVhZGluZyB0byBteXNxbCBzZXJ2ZXIgZ3JlZXRpbmciOworICAgICAgICBtLT5wZWVyLmxvZy0+YWN0aW9uID0gInJlYWRpbmcgbXlzcWwgc2VydmVyIGdyZWV0aW5nIjsKIAotICAgICAgICBtLT5idWYgPSBuZ3hfY3JlYXRlX3RlbXAobS0+cG9vbCwgLyogU1RVQiAqLyAxMDI0KTsKKyAgICAgICAgbS0+YnVmID0gbmd4X2NyZWF0ZV90ZW1wX2J1ZihtLT5wb29sLCAvKiBTVFVCICovIDEwMjQpOwogICAgICAgICBpZiAobS0+YnVmID09IE5VTEwpIHsKICAgICAgICAgICAgIG5neF9teXNxbF9jbG9zZShtLCBOR1hfRVJST1IpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtODMsNDMgKzE3OCwyODIgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHAgPSBtLT5idWYtPnBvczsKKyAgICBncjEgPSAobmd4X215c3FsX2dyZWV0aW5nMV9wa3RfdCAqKSBtLT5idWYtPnBvczsKIAotICAgIGlmIChuZ3hfbTI0dG9oKHApID4gbiAtIDQpIHsKKyAgICBpZiAobmd4X20yNHRvaChncjEtPnBrdGxlbikgPiBuIC0gNCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByZXYtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAibXlzcWwgc2VydmVyICVWIHNlbnQgaW5jb21wbGV0ZSBncmVldGluZyBwYWNrZXQiLAotICAgICAgICAgICAgICAgICAgICAgICZjdHgtPnBlZXIucGVlcnMtPnBlZXJbMF0ubmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgJm0tPnBlZXIucGVlcnMtPnBlZXJbMF0ubmFtZSk7CiAKICAgICAgICAgbmd4X215c3FsX2Nsb3NlKG0sIE5HWF9FUlJPUik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocFs0XSkgPCAxMCkgeworICAgIGlmIChncjEtPnByb3RvY29sIDwgMTApIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgcmV2LT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIm15c3FsIHNlcnZlciAlViBzZW50IHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb24gJXVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5wZWVyLnBlZXJzLT5wZWVyWzBdLm5hbWUsIHBbNF0pOworICAgICAgICAgICAgICAgICAgICAgICZtLT5wZWVyLnBlZXJzLT5wZWVyWzBdLm5hbWUsIGdyMS0+cHJvdG9jb2wpOwogCiAgICAgICAgIG5neF9teXNxbF9jbG9zZShtLCBOR1hfRVJST1IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGVuID0gbmd4X3N0cmxlbigmcFs1XSk7Ci0gICAgdCA9IHAgKyA1ICsgbGVuICsgMTsKKyAgICBncjIgPSAobmd4X215c3FsX2dyZWV0aW5nMl9wa3RfdCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyMS0+dmVyc2lvbiArIG5neF9zdHJsZW4oZ3IxLT52ZXJzaW9uKSArIDEpOwogCi0gICAgY2FwYWNpdHkgPSBuZ3hfbTE2dG9oKCgmdFs0ICsgOV0pKTsKKyAgICBjYXBhY2l0eSA9IG5neF9tMTZ0b2goZ3IyLT5jYXBhY2l0eSk7CiAKICAgICBuZ3hfbG9nX2RlYnVnOChOR1hfTE9HX0RFQlVHX01ZU1FMLCByZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAibXlzcWwgdmVyc2lvbjogJXVkLCBcIiVzXCIsIHRocmVhZDogJXVkLCBzYWx0OiBcIiVzXCIsICIsCisgICAgICAgICAgICAgICAgICAgIm15c3FsIHZlcnNpb246ICV1ZCwgXCIlc1wiLCB0aHJlYWQ6ICV1ZCwgc2FsdDogXCIlc1wiLCAiCiAgICAgICAgICAgICAgICAgICAgImNhcGFjaXR5OiAlWGQsIGNoYXJzZXQ6ICV1ZCwgc3RhdHVzOiAldWQsIHNhbHQgcmVzdCBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgIHBbNF0sICZwWzVdLCBuZ3hfbTMydG9oKHQpLCAmdFs0XSwKLSAgICAgICAgICAgICAgICAgICBjYXBhY2l0eSwgdFs0ICsgOSArIDJdLAotICAgICAgICAgICAgICAgICAgIG5neF9tMTZ0b2goKCZ0WzQgKyA5ICsgMiArIDFdKSksCi0gICAgICAgICAgICAgICAgICAgdFs0ICsgOSArIDIgKyAxICsgMiArIDEzXSk7CisgICAgICAgICAgICAgICAgICAgZ3IxLT5wcm90b2NvbCwgZ3IxLT52ZXJzaW9uLCBuZ3hfbTMydG9oKGdyMi0+dGhyZWFkKSwKKyAgICAgICAgICAgICAgICAgICBncjItPnNhbHQxLCBjYXBhY2l0eSwgZ3IyLT5jaGFyc2V0LAorICAgICAgICAgICAgICAgICAgIG5neF9tMTZ0b2goZ3IyLT5zdGF0dXMpLCAmZ3IyLT5zYWx0Mik7CiAKLSAgICBjYXBhY2l0eSAmPSBOR1hfTVlTUUxfTE9OR19QQVNTV09SRAotICAgICAgICAgICAgICAgIHwgTkdYX01ZU1FMX0NPTk5FQ1RfV0lUSF9EQgotICAgICAgICAgICAgICAgIHwgTkdYX01ZU1FMX1BST1RPQ09MXzQxOworICAgIGNhcGFjaXR5ID0gTkdYX01ZU1FMX0xPTkdfUEFTU1dPUkQKKyAgICAgICAgICAgICAgIHwgTkdYX01ZU1FMX0NPTk5FQ1RfV0lUSF9EQgorICAgICAgICAgICAgICAgfCBOR1hfTVlTUUxfUFJPVE9DT0xfNDEKKyAgICAgICAgICAgICAgIHwgTkdYX01ZU1FMX1NFQ1VSRV9DT05ORUNUSU9OOwogCisgICAgbGVuID0gNCArIDQgKyA0ICsgMSArIDIzICsgbS0+bG9naW4tPmxlbiArIDEgKyAxICsgbS0+ZGF0YWJhc2UtPmxlbiArIDE7CisKKyAgICBpZiAobS0+cGFzc3dkLT5sZW4pIHsKKyAgICAgICAgbGVuICs9IDIwOworICAgIH0KKworICAgIGF1dGggPSBuZ3hfcGFsbG9jKG0tPnBvb2wsIGxlbik7CisgICAgaWYgKGF1dGggPT0gTlVMTCkgeworICAgICAgICBuZ3hfbXlzcWxfY2xvc2UobSwgTkdYX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5neF9odG9tMjQoYXV0aC0+cGt0bGVuLCBsZW4gLSA0KTsKKyAgICBhdXRoLT5wa3RuID0gKHVfY2hhcikgKGdyMS0+cGt0biArIDEpOworCisgICAgbmd4X2h0b20zMihhdXRoLT5jYXBhY2l0eSwgY2FwYWNpdHkpOworICAgIG5neF9odG9tMzIoYXV0aC0+bWF4X3BhY2tldCwgMHgwMTAwMDAwMCk7ICAvKiBtYXggcGFja2V0IHNpemUgMl4yNCAqLworICAgIG5neF9tZW16ZXJvKGF1dGgtPnplcm8sIDI0KTsKKyAgICBhdXRoLT5jaGFyc2V0ID0gZ3IyLT5jaGFyc2V0OworCisgICAgcCA9IG5neF9jb3B5KGF1dGgtPmxvZ2luLCBtLT5sb2dpbi0+ZGF0YSwgbS0+bG9naW4tPmxlbik7CisgICAgKnArKyA9ICdcMCc7CisKKyAgICBpZiAobS0+cGFzc3dkLT5sZW4pIHsKKworICAgICAgICAqcCsrID0gKHVfY2hhcikgMjA7CisKKyAgICAgICAgU0hBMV9Jbml0KCZzaGEpOworICAgICAgICBTSEExX1VwZGF0ZSgmc2hhLCBtLT5wYXNzd2QtPmRhdGEsIG0tPnBhc3N3ZC0+bGVuKTsKKyAgICAgICAgU0hBMV9GaW5hbChoYXNoMSwgJnNoYSk7CisKKyAgICAgICAgU0hBMV9Jbml0KCZzaGEpOworICAgICAgICBTSEExX1VwZGF0ZSgmc2hhLCBoYXNoMSwgMjApOworICAgICAgICBTSEExX0ZpbmFsKGhhc2gyLCAmc2hhKTsKKworICAgICAgICBTSEExX0luaXQoJnNoYSk7CisgICAgICAgIFNIQTFfVXBkYXRlKCZzaGEsIGdyMi0+c2FsdDEsIDgpOworICAgICAgICBTSEExX1VwZGF0ZSgmc2hhLCBncjItPnNhbHQyLCAxMik7CisgICAgICAgIFNIQTFfVXBkYXRlKCZzaGEsIGhhc2gyLCAyMCk7CisgICAgICAgIFNIQTFfRmluYWwoaGFzaDIsICZzaGEpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisgICAgICAgICAgICAqcCsrID0gKHVfY2hhcikgKGhhc2gxW2ldIF4gaGFzaDJbaV0pOworICAgICAgICB9CisKKyAgICB9IGVsc2UgeworICAgICAgICAqcCsrID0gJ1wwJzsKKyAgICB9CisKKyAgICBwID0gbmd4X2NvcHkocCwgbS0+ZGF0YWJhc2UtPmRhdGEsIG0tPmRhdGFiYXNlLT5sZW4pOworICAgICpwID0gJ1wwJzsKKworCisgICAgbiA9IG5neF9zZW5kKG0tPnBlZXIuY29ubmVjdGlvbiwgKHZvaWQgKikgYXV0aCwgbGVuKTsKKworICAgIGlmIChuIDwgKHNzaXplX3QpIGxlbikgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByZXYtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAidGhlIGluY29tcGxldGUgcGFja2V0IHdhcyBzZW50IHRvIG15c3FsIHNlcnZlciAlViIsCisgICAgICAgICAgICAgICAgICAgICAgJm0tPnBlZXIucGVlcnMtPnBlZXJbMF0ubmFtZSk7CisKKyAgICAgICAgbmd4X215c3FsX2Nsb3NlKG0sIE5HWF9FUlJPUik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtLT5wZWVyLmNvbm5lY3Rpb24tPnJlYWQtPmhhbmRsZXIgPSBuZ3hfbXlzcWxfcmVhZF9hdXRoX3Jlc3VsdDsKKworICAgIG5neF9hZGRfdGltZXIobS0+cGVlci5jb25uZWN0aW9uLT5yZWFkLCAvKiBTVFVCICovIDUwMDApOworfQorCisKK3N0YXRpYyB2b2lkCituZ3hfbXlzcWxfZW1wdHlfaGFuZGxlcihuZ3hfZXZlbnRfdCAqd2V2KQoreworICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgd2V2LT5sb2csIDAsICJteXNxbCBlbXB0eSBoYW5kbGVyIik7CisKKyAgICByZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQKK25neF9teXNxbF9yZWFkX2F1dGhfcmVzdWx0KG5neF9ldmVudF90ICpyZXYpCit7CisgICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICAgbiwgbGVuOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgIG1zZzsKKyAgICBuZ3hfbXlzcWxfdCAgICAgICAgICAgICAgICptOworICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAgKmM7CisgICAgbmd4X215c3FsX2Vycm9yX3BrdF90ICAgICAqZXBrdDsKKyAgICBuZ3hfbXlzcWxfcmVzcG9uc2VfcGt0X3QgICpwa3Q7CisKKyAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIHJldi0+bG9nLCAwLCAibXlzcWwgcmVhZCBhdXRoIik7CisKKyAgICBjID0gcmV2LT5kYXRhOworICAgIG0gPSBjLT5kYXRhOworCisgICAgbS0+cGVlci5sb2ctPmFjdGlvbiA9ICJyZWFkaW5nIG15c3FsIGF1dGggcmVzdWx0IjsKKworICAgIG4gPSBuZ3hfcmVjdihtLT5wZWVyLmNvbm5lY3Rpb24sIG0tPmJ1Zi0+cG9zLCAvKiBTVFVCICovIDEwMjQpOworCisgICAgaWYgKG4gPT0gTkdYX0FHQUlOKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobiA8IDUpIHsKKyAgICAgICAgbmd4X215c3FsX2Nsb3NlKG0sIE5HWF9FUlJPUik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwa3QgPSAobmd4X215c3FsX3Jlc3BvbnNlX3BrdF90ICopIG0tPmJ1Zi0+cG9zOworCisgICAgbGVuID0gbmd4X20yNHRvaChwa3QtPnBrdGxlbik7CisKKyAgICBpZiAobGVuID4gbiAtIDQpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgcmV2LT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgIm15c3FsIHNlcnZlciAlViBzZW50IGluY29tcGxldGUgcmVzcG9uc2UgcGFja2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAmbS0+cGVlci5wZWVycy0+cGVlclswXS5uYW1lKTsKKworICAgICAgICBuZ3hfbXlzcWxfY2xvc2UobSwgTkdYX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwa3QtPmZpZWxkcyA9PSAwKSB7CisgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgcmV2LT5sb2csIDAsICJteXNxbCBhdXRoIE9LIik7CisKKyAgICAgICAgbS0+c3RhdGUgPSBOR1hfT0s7CisgICAgICAgIG0tPnBrdG4gPSAwOworCisgICAgICAgIG0tPmhhbmRsZXIobSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVwa3QgPSAobmd4X215c3FsX2Vycm9yX3BrdF90ICopIHBrdDsKKworICAgIG1zZy5sZW4gPSAodV9jaGFyICopIGVwa3QgKyA0ICsgbGVuIC0gZXBrdC0+bWVzc2FnZTsKKyAgICBtc2cuZGF0YSA9IGVwa3QtPm1lc3NhZ2U7CisKKyAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByZXYtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICJteXNxbCBzZXJ2ZXIgJVYgc2VudCBlcnJvciAoJXVkKTogXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICZtLT5wZWVyLnBlZXJzLT5wZWVyWzBdLm5hbWUsIG5neF9tMTZ0b2goZXBrdC0+Y29kZSksICZtc2cpOworCisgICAgbmd4X215c3FsX2Nsb3NlKG0sIE5HWF9FUlJPUik7Cit9CisKKworbmd4X2ludF90CituZ3hfbXlzcWxfcXVlcnkobmd4X215c3FsX3QgKm0pCit7CisgICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICBuOworICAgIG5neF9teXNxbF9jb21tYW5kX3BrdF90ICAqcGt0OworCisgICAgcGt0ID0gKG5neF9teXNxbF9jb21tYW5kX3BrdF90ICopIG0tPnF1ZXJ5LmRhdGE7CisKKyAgICBuZ3hfaHRvbTI0KHBrdC0+cGt0bGVuLCBtLT5xdWVyeS5sZW4gLSA0KTsKKyAgICBwa3QtPnBrdG4gPSAodV9jaGFyKSBtLT5wa3RuKys7CisgICAgcGt0LT5jb21tYW5kID0gTkdYX01ZU1FMX0NNRF9RVUVSWTsKKworICAgIG4gPSBuZ3hfc2VuZChtLT5wZWVyLmNvbm5lY3Rpb24sIG0tPnF1ZXJ5LmRhdGEsIG0tPnF1ZXJ5Lmxlbik7CisKKyAgICBpZiAobiA8IChzc2l6ZV90KSBtLT5xdWVyeS5sZW4pIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgbS0+cGVlci5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgInRoZSBpbmNvbXBsZXRlIHBhY2tldCB3YXMgc2VudCB0byBteXNxbCBzZXJ2ZXIgJVYiLAorICAgICAgICAgICAgICAgICAgICAgICZtLT5wZWVyLnBlZXJzLT5wZWVyWzBdLm5hbWUpOworCisgICAgICAgIG5neF9teXNxbF9jbG9zZShtLCBOR1hfRVJST1IpOworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIG0tPnBlZXIuY29ubmVjdGlvbi0+cmVhZC0+aGFuZGxlciA9IG5neF9teXNxbF9yZWFkX3F1ZXJ5X3Jlc3VsdDsKKworICAgIG5neF9hZGRfdGltZXIobS0+cGVlci5jb25uZWN0aW9uLT5yZWFkLCAvKiBTVFVCICovIDUwMDApOworCisgICAgLyogU1RVQiBoYW5kbGUgZXZlbnQgKi8KKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKworc3RhdGljIHZvaWQKK25neF9teXNxbF9yZWFkX3F1ZXJ5X3Jlc3VsdChuZ3hfZXZlbnRfdCAqcmV2KQoreworICAgIHNzaXplX3QgICAgICAgICAgICAgICAgICAgIG4sIGxlbjsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICBtc2c7CisgICAgbmd4X215c3FsX3QgICAgICAgICAgICAgICAqbTsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICpjOworICAgIG5neF9teXNxbF9lcnJvcl9wa3RfdCAgICAgKmVwa3Q7CisgICAgbmd4X215c3FsX3Jlc3BvbnNlX3BrdF90ICAqcGt0OworCisgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCByZXYtPmxvZywgMCwgIm15c3FsIHJlYWQgcXVlcnkgcmVzdWx0Iik7CisKKyAgICBjID0gcmV2LT5kYXRhOworICAgIG0gPSBjLT5kYXRhOworCisgICAgbS0+cGVlci5sb2ctPmFjdGlvbiA9ICJyZWFkaW5nIG15c3FsIHJlYWQgcXVlcnkgcmVzdWx0IjsKKworICAgIG4gPSBuZ3hfcmVjdihtLT5wZWVyLmNvbm5lY3Rpb24sIG0tPmJ1Zi0+cG9zLCAvKiBTVFVCICovIDEwMjQpOworCisgICAgaWYgKG4gPT0gTkdYX0FHQUlOKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobiA8IDUpIHsKKyAgICAgICAgbmd4X215c3FsX2Nsb3NlKG0sIE5HWF9FUlJPUik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwa3QgPSAobmd4X215c3FsX3Jlc3BvbnNlX3BrdF90ICopIG0tPmJ1Zi0+cG9zOworCisgICAgbGVuID0gbmd4X20yNHRvaChwa3QtPnBrdGxlbik7CisKKyAgICBpZiAobGVuID4gbiAtIDQpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgcmV2LT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgIm15c3FsIHNlcnZlciAlViBzZW50IGluY29tcGxldGUgcmVzcG9uc2UgcGFja2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAmbS0+cGVlci5wZWVycy0+cGVlclswXS5uYW1lKTsKKworICAgICAgICBuZ3hfbXlzcWxfY2xvc2UobSwgTkdYX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwa3QtPmZpZWxkcyAhPSAweGZmKSB7CisgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgcmV2LT5sb2csIDAsICJteXNxbCBxdWVyeSBPSyIpOworCisgICAgICAgIG0tPnN0YXRlID0gTkdYX09LOworICAgICAgICBtLT5wa3RuID0gcGt0LT5wa3RuOworCisgICAgICAgIG0tPmhhbmRsZXIobSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVwa3QgPSAobmd4X215c3FsX2Vycm9yX3BrdF90ICopIHBrdDsKKworICAgIG1zZy5sZW4gPSAodV9jaGFyICopIGVwa3QgKyA0ICsgbGVuIC0gZXBrdC0+bWVzc2FnZTsKKyAgICBtc2cuZGF0YSA9IGVwa3QtPm1lc3NhZ2U7CisKKyAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByZXYtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICJteXNxbCBzZXJ2ZXIgJVYgc2VudCBlcnJvciAoJXVkKTogXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICZtLT5wZWVyLnBlZXJzLT5wZWVyWzBdLm5hbWUsIG5neF9tMTZ0b2goZXBrdC0+Y29kZSksICZtc2cpOworCisgICAgbmd4X215c3FsX2Nsb3NlKG0sIE5HWF9FUlJPUik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL215c3FsL25neF9teXNxbC5oIGIvc3JjL215c3FsL25neF9teXNxbC5oCmluZGV4IDk5ZjEwMzkuLjE3Y2IxYWYgMTAwNjQ0Ci0tLSBhL3NyYy9teXNxbC9uZ3hfbXlzcWwuaAorKysgYi9zcmMvbXlzcWwvbmd4X215c3FsLmgKQEAgLTExLDI2ICsxMSw3NCBAQAogI2luY2x1ZGUgPG5neF9jb25maWcuaD4KICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogI2luY2x1ZGUgPG5neF9ldmVudC5oPgorI2luY2x1ZGUgPG5neF9ldmVudF9jb25uZWN0Lmg+CiAKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3Qgbmd4X215c3FsX3MgIG5neF9teXNxbF90OworCit0eXBlZGVmIHZvaWQgKCpuZ3hfbXlzcWxfaGFuZGxlcl9wdCkobmd4X215c3FsX3QgKm0pOworCisKK3N0cnVjdCBuZ3hfbXlzcWxfcyB7CiAgICAgbmd4X3BlZXJfY29ubmVjdGlvbl90ICAgcGVlcjsKLX0gbmd4X215c3FsX3Q7CisKKyAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICpidWY7CisgICAgbmd4X3Bvb2xfdCAgICAgICAgICAgICAqcG9vbDsKKworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgKmxvZ2luOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgKnBhc3N3ZDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICpkYXRhYmFzZTsKKworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIHF1ZXJ5OworCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgcGt0bjsKKworICAgIG5neF9teXNxbF9oYW5kbGVyX3B0ICAgIGhhbmRsZXI7CisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAqZGF0YTsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICBzdGF0ZTsKKworfTsKKworCisjZGVmaW5lIE5HWF9NWVNRTF9DTURQS1RfTEVOICA1CiAKIAogI2lmIChOR1hfSEFWRV9MSVRUTEVfRU5ESUFOICYmIE5HWF9IQVZFX05PTkFMSUdORUQgJiYgMCkKIAotI2RlZmluZSBuZ3hfbTE2dG9oKG4pICAgKCoodWludDMyX3QgKikgbiAmIDB4MDAwMGZmZmYpCi0jZGVmaW5lIG5neF9tMjR0b2gobikgICAoKih1aW50MzJfdCAqKSBuICYgMHgwMGZmZmZmZikKLSNkZWZpbmUgbmd4X20zMnRvaChuKSAgICoodWludDMyX3QgKikgbgorI2RlZmluZSBuZ3hfbTE2dG9oKG4pICAgICAgKCoodWludDMyX3QgKikgbiAmIDB4MDAwMGZmZmYpCisjZGVmaW5lIG5neF9tMjR0b2gobikgICAgICAoKih1aW50MzJfdCAqKSBuICYgMHgwMGZmZmZmZikKKyNkZWZpbmUgbmd4X20zMnRvaChuKSAgICAgICoodWludDMyX3QgKikgbgorCisjZGVmaW5lIG5neF9odG9tMTYobiwgbSkgICAqKHVpbnQxNl90ICopIG4gPSAodWludDE2X3QpICgobSkgJiAweGZmZmYpCisKKyNkZWZpbmUgbmd4X2h0b20yNChuLCBtKSAgIChuKVswXSA9ICh1X2NoYXIpICgobSkgJiAweGZmKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG4pWzFdID0gKHVfY2hhcikgKCgobSkgPj4gOCkgJiAweGZmKTsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobilbMl0gPSAodV9jaGFyKSAoKChtKSA+PiAxNikgJiAweGZmKQorCisjZGVmaW5lIG5neF9odG9tMzIobiwgbSkgICAqKHVpbnQzMl90ICopIChuKSA9IChtKQogCiAjZWxzZQogCi0jZGVmaW5lIG5neF9tMTZ0b2gobikgICAoblswXSB8IG5bMV0gPDwgOCkKLSNkZWZpbmUgbmd4X20yNHRvaChuKSAgIChuWzBdIHwgblsxXSA8PCA4IHwgblsyXSA8PCAxNikKLSNkZWZpbmUgbmd4X20zMnRvaChuKSAgIChuWzBdIHwgblsxXSA8PCA4IHwgblsyXSA8PCAxNiB8IG5bM10gPDwgMjQpCisjZGVmaW5lIG5neF9tMTZ0b2gobikgICAgICAoblswXSB8IG5bMV0gPDwgOCkKKyNkZWZpbmUgbmd4X20yNHRvaChuKSAgICAgIChuWzBdIHwgblsxXSA8PCA4IHwgblsyXSA8PCAxNikKKyNkZWZpbmUgbmd4X20zMnRvaChuKSAgICAgIChuWzBdIHwgblsxXSA8PCA4IHwgblsyXSA8PCAxNiB8IG5bM10gPDwgMjQpCisKKyNkZWZpbmUgbmd4X2h0b20xNihuLCBtKSAgIChuKVswXSA9ICh1X2NoYXIpIChtKTsgKG4pWzFdID0gKHVfY2hhcikgKChtKSA+PiA4KQorCisjZGVmaW5lIG5neF9odG9tMjQobiwgbSkgICAobilbMF0gPSAodV9jaGFyKSAoKG0pICYgMHhmZik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChuKVsxXSA9ICh1X2NoYXIpICgoKG0pID4+IDgpICYgMHhmZik7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG4pWzJdID0gKHVfY2hhcikgKCgobSkgPj4gMTYpICYgMHhmZikKKworI2RlZmluZSBuZ3hfaHRvbTMyKG4sIG0pICAgKG4pWzBdID0gKHVfY2hhcikgKChtKSAmIDB4ZmYpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAobilbMV0gPSAodV9jaGFyKSAoKChtKSA+PiA4KSAmIDB4ZmYpOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChuKVsyXSA9ICh1X2NoYXIpICgoKG0pID4+IDE2KSAmIDB4ZmYpOyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG4pWzNdID0gKHVfY2hhcikgKCgobSkgPj4gMjQpICYgMHhmZikKIAogI2VuZGlmCiAKIAorbmd4X2ludF90IG5neF9teXNxbF9jb25uZWN0KG5neF9teXNxbF90ICptKTsKK25neF9pbnRfdCBuZ3hfbXlzcWxfcXVlcnkobmd4X215c3FsX3QgKm0pOworCisKICNlbmRpZiAvKiBfTkdYX01ZU1FMX0hfSU5DTFVERURfICovCg==