ZGlmZiAtLWdpdCBhL2F1dG8vY2MvaWNjIGIvYXV0by9jYy9pY2MKaW5kZXggMjE5NWMxMC4uNDdiOTFkNyAxMDA2NDQKLS0tIGEvYXV0by9jYy9pY2MKKysrIGIvYXV0by9jYy9pY2MKQEAgLTIsNyArMiw3IEBACiAjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKIAogCi0jIEludGVsIEMrKyBjb21waWxlciA3LjEsIDguMAorIyBJbnRlbCBDKysgY29tcGlsZXIgNy4xLCA4LjAsIDguMQogCiAjIG9wdGltaXphdGlvbnMKIApAQCAtNTcsNyArNTcsNyBAQAogQ0ZMQUdTPSIkQ0ZMQUdTIC13MSIKICNDRkxBR1M9IiRDRkxBR1MgLXcyIgogCi0jIGRpc2FibGUgdGhlIElDQyA4LjAgZXJyb3JzOgorIyBkaXNhYmxlIHRoZSBJQ0MgOC4xIGVycm9yczoKICMgICAgZXJyb3IgIzE4MTogYXJndW1lbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggY29ycmVzcG9uZGluZyBmb3JtYXQKICMgICAgICAgICAgICAgICAgc3RyaW5nIGNvbnZlcnNpb24KICMgICAgZXJyb3IgIzI2OTogaW52YWxpZCBmb3JtYXQgc3RyaW5nIGNvbnZlcnNpb24KZGlmZiAtLWdpdCBhL2F1dG8vY2MvbmFtZSBiL2F1dG8vY2MvbmFtZQppbmRleCBjYmVkNmE3Li5mYjRmNDlhIDEwMDY0NAotLS0gYS9hdXRvL2NjL25hbWUKKysrIGIvYXV0by9jYy9uYW1lCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgZWNobyAiIHVzaW5nIEJvcmxhbmQgQysrIGNvbXBpbGVyIgogCiBlbHNlCi1pZiBgJENDIC12IDI+JjEgfCBncmVwICdeZ2NjIHZlcnNpb24nIDI+JjEgPi9kZXYvbnVsbGA7IHRoZW4KK2lmIGAkQ0MgLXYgMj4mMSB8IGdyZXAgJ2djYyB2ZXJzaW9uJyAyPiYxID4vZGV2L251bGxgOyB0aGVuCiAgICAgTkdYX0NDX05BTUU9Z2NjCiAgICAgZWNobyAiIHVzaW5nIEdOVSBDIGNvbXBpbGVyIgogCmRpZmYgLS1naXQgYS9hdXRvL2luc3RhbGwgYi9hdXRvL2luc3RhbGwKaW5kZXggN2EyNmQwNC4uNTU4ZjY0NiAxMDA2NDQKLS0tIGEvYXV0by9pbnN0YWxsCisrKyBiL2F1dG8vaW5zdGFsbApAQCAtNCwzOCArNCw0MSBAQAogCiBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKIAotaW5zdGFsbDoKLQl0ZXN0IC1kICROR1hfUFJFRklYIHx8IG1rZGlyIC1wICROR1hfUFJFRklYCitpbnN0YWxsOgkkTkdYX09CSlMke25neF9kaXJzZXB9bmdpbngke25neF9iaW5leHR9CisJdGVzdCAtZCAiJE5HWF9QUkVGSVgiIHx8IG1rZGlyIC1wICIkTkdYX1BSRUZJWCIKIAotCXRlc3QgLWQgYGRpcm5hbWUgJE5HWF9TQklOX1BBVEhgIHx8IG1rZGlyIC1wIGBkaXJuYW1lICROR1hfU0JJTl9QQVRIYAotCXRlc3QgISAtZiAkTkdYX1NCSU5fUEFUSCB8fCBtdiAkTkdYX1NCSU5fUEFUSCAkTkdYX1NCSU5fUEFUSC5vbGQKLQljcCAkTkdYX09CSlMvbmdpbnggJE5HWF9TQklOX1BBVEgKKwl0ZXN0IC1kICJgZGlybmFtZSBcIiROR1hfU0JJTl9QQVRIXCJgIiBcCisJCXx8IG1rZGlyIC1wICJgZGlybmFtZSBcIiROR1hfU0JJTl9QQVRIXCJgIgorCXRlc3QgISAtZiAiJE5HWF9TQklOX1BBVEgiIHx8IG12ICIkTkdYX1NCSU5fUEFUSCIgIiROR1hfU0JJTl9QQVRILm9sZCIKKwljcCAkTkdYX09CSlMvbmdpbnggIiROR1hfU0JJTl9QQVRIIgogCi0JdGVzdCAtZCBgZGlybmFtZSAkTkdYX0NPTkZfUEFUSGAgfHwgbWtkaXIgLXAgYGRpcm5hbWUgJE5HWF9DT05GX1BBVEhgCisJdGVzdCAtZCAiYGRpcm5hbWUgXCIkTkdYX0NPTkZfUEFUSFwiYCIgXAorCQl8fCBta2RpciAtcCAiYGRpcm5hbWUgXCIkTkdYX0NPTkZfUEFUSFwiYCIKIAotCWNwIGNvbmYva29pLXdpbiBgZGlybmFtZSAkTkdYX0NPTkZfUEFUSGAKKwljcCBjb25mL2tvaS13aW4gImBkaXJuYW1lIFwiJE5HWF9DT05GX1BBVEhcImAiCiAKLQl0ZXN0IC1mIGBkaXJuYW1lICROR1hfQ09ORl9QQVRIYC9taW1lLnR5cGVzIHx8IFwKLQkJY3AgY29uZi9taW1lLnR5cGVzIGBkaXJuYW1lICROR1hfQ09ORl9QQVRIYC9taW1lLnR5cGVzCi0JY3AgY29uZi9taW1lLnR5cGVzIGBkaXJuYW1lICROR1hfQ09ORl9QQVRIYC9taW1lLnR5cGVzLmRlZmF1bHQKKwl0ZXN0IC1mICJgZGlybmFtZSBcIiROR1hfQ09ORl9QQVRIXCJgL21pbWUudHlwZXMiIHx8IFwKKwkJY3AgY29uZi9taW1lLnR5cGVzICJgZGlybmFtZSBcIiROR1hfQ09ORl9QQVRIXCJgL21pbWUudHlwZXMiCisJY3AgY29uZi9taW1lLnR5cGVzICJgZGlybmFtZSBcIiROR1hfQ09ORl9QQVRIXCJgL21pbWUudHlwZXMuZGVmYXVsdCIKIAotCXRlc3QgLWYgJE5HWF9DT05GX1BBVEggfHwgY3AgY29uZi9uZ2lueC5jb25mICROR1hfQ09ORl9QQVRICi0JY3AgY29uZi9uZ2lueC5jb25mIGBkaXJuYW1lICROR1hfQ09ORl9QQVRIYC9uZ2lueC5jb25mLmRlZmF1bHQKKwl0ZXN0IC1mICIkTkdYX0NPTkZfUEFUSCIgfHwgY3AgY29uZi9uZ2lueC5jb25mICIkTkdYX0NPTkZfUEFUSCIKKwljcCBjb25mL25naW54LmNvbmYgImBkaXJuYW1lIFwiJE5HWF9DT05GX1BBVEhcImAvbmdpbnguY29uZi5kZWZhdWx0IgogCi0JdGVzdCAtZCBgZGlybmFtZSAkTkdYX1BJRF9QQVRIYCB8fCBta2RpciAtcCBgZGlybmFtZSAkTkdYX1BJRF9QQVRIYAorCXRlc3QgLWQgImBkaXJuYW1lIFwiJE5HWF9QSURfUEFUSFwiYCIgXAorCQl8fCBta2RpciAtcCAiYGRpcm5hbWUgXCIkTkdYX1BJRF9QQVRIXCJgIgogCi0JdGVzdCAtZCBgZGlybmFtZSAkTkdYX0hUVFBfTE9HX1BBVEhgIHx8IFwKLQkJbWtkaXIgLXAgYGRpcm5hbWUgJE5HWF9IVFRQX0xPR19QQVRIYAorCXRlc3QgLWQgImBkaXJuYW1lIFwiJE5HWF9IVFRQX0xPR19QQVRIXCJgIiB8fCBcCisJCW1rZGlyIC1wICJgZGlybmFtZSBcIiROR1hfSFRUUF9MT0dfUEFUSFwiYCIKIAotCXRlc3QgLWQgJE5HWF9QUkVGSVgvaHRtbCB8fCBjcCAtciBodG1sICROR1hfUFJFRklYCisJdGVzdCAtZCAiJE5HWF9QUkVGSVgvaHRtbCIgfHwgY3AgLXIgaHRtbCAiJE5HWF9QUkVGSVgiCiBFTkQKIAogCiBpZiB0ZXN0IC1uICIkTkdYX0VSUk9SX0xPR19QQVRIIjsgdGhlbgogICAgIGNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCiAKLQl0ZXN0IC1kIGBkaXJuYW1lICROR1hfRVJST1JfTE9HX1BBVEhgIHx8IFwKLQkJbWtkaXIgLXAgYGRpcm5hbWUgJE5HWF9FUlJPUl9MT0dfUEFUSGAKKwl0ZXN0IC1kICJgZGlybmFtZSBcIiROR1hfRVJST1JfTE9HX1BBVEhcImAiIHx8IFwKKwkJbWtkaXIgLXAgImBkaXJuYW1lIFwiJE5HWF9FUlJPUl9MT0dfUEFUSFwiYCIKIEVORAogCiBmaQpkaWZmIC0tZ2l0IGEvYXV0by9saWIvbWQ1L2NvbmYgYi9hdXRvL2xpYi9tZDUvY29uZgppbmRleCAxY2E2YjQzLi43OTlkMDc1IDEwMDY0NAotLS0gYS9hdXRvL2xpYi9tZDUvY29uZgorKysgYi9hdXRvL2xpYi9tZDUvY29uZgpAQCAtNDQsNyArNDQsNyBAQAogCiBlbHNlCiAKLSAgICBpZiBbICROR1hfUExBVEZPUk0gIT0gd2luMzIgXTsgdGhlbgorICAgIGlmIFsgIiROR1hfUExBVEZPUk0iICE9IHdpbjMyIF07IHRoZW4KICAgICAgICAgTUQ1PU5PCiAKICAgICAgICAgIyBTb2xhcmlzIDgvOQpkaWZmIC0tZ2l0IGEvYXV0by9saWIvbWQ1L21ha2UgYi9hdXRvL2xpYi9tZDUvbWFrZQppbmRleCBiMzMzZDRkLi44YmRjYTBiIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9tZDUvbWFrZQorKysgYi9hdXRvL2xpYi9tZDUvbWFrZQpAQCAtMjUsNyArMjUsNyBAQAogZG9uZT1OTwogCiAKLWNhc2UgJE5HWF9QTEFURk9STSBpbgorY2FzZSAiJE5HWF9QTEFURk9STSIgaW4KIAogICAgIHdpbjMyKQogICAgICAgICBjcCBhdXRvL2xpYi9tZDUvJG5neF9tYWtlZmlsZSAkTUQ1CmRpZmYgLS1naXQgYS9hdXRvL2xpYi9vcGVuc3NsL2NvbmYgYi9hdXRvL2xpYi9vcGVuc3NsL2NvbmYKaW5kZXggNjc5MmU3Zi4uZTBkYTkyYSAxMDA2NDQKLS0tIGEvYXV0by9saWIvb3BlbnNzbC9jb25mCisrKyBiL2F1dG8vbGliL29wZW5zc2wvY29uZgpAQCAtMjQsNyArMjQsNyBAQAogCiBlbHNlCiAKLSAgICBpZiBbICROR1hfUExBVEZPUk0gIT0gd2luMzIgXTsgdGhlbgorICAgIGlmIFsgIiROR1hfUExBVEZPUk0iICE9IHdpbjMyIF07IHRoZW4KICAgICAgICAgT1BFTlNTTD1OTwogCiAgICAgICAgIG5neF9mZWF0dXJlPSJPcGVuU1NMIGxpYnJhcnkiCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9vcGVuc3NsL21ha2UgYi9hdXRvL2xpYi9vcGVuc3NsL21ha2UKaW5kZXggNDAwNzYxNC4uYzFhZWM4OCAxMDA2NDQKLS0tIGEvYXV0by9saWIvb3BlbnNzbC9tYWtlCisrKyBiL2F1dG8vbGliL29wZW5zc2wvbWFrZQpAQCAtMiw3ICsyLDcgQEAKICMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgogCiAKLWNhc2UgJE5HWF9QTEFURk9STSBpbgorY2FzZSAiJE5HWF9QTEFURk9STSIgaW4KICAgICAqKQogICAgICAgICBlY2hvICIkT1BFTlNTTC9saWJzc2wuYToiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE1BS0VGSUxFCiAgICAgICAgIGVjaG8gIgljZCAkT1BFTlNTTCBcXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICRNQUtFRklMRQpkaWZmIC0tZ2l0IGEvYXV0by9saWIvcGNyZS9jb25mIGIvYXV0by9saWIvcGNyZS9jb25mCmluZGV4IDE2OGFjYmEuLjY1MTYzMjcgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3BjcmUvY29uZgorKysgYi9hdXRvL2xpYi9wY3JlL2NvbmYKQEAgLTQyLDcgKzQyLDcgQEAKIAogZWxzZQogCi0gICAgaWYgWyAkTkdYX1BMQVRGT1JNICE9IHdpbjMyIF07IHRoZW4KKyAgICBpZiBbICIkTkdYX1BMQVRGT1JNIiAhPSB3aW4zMiBdOyB0aGVuCiAgICAgICAgIFBDUkU9Tk8KIAogICAgICAgICAjIEZyZWVCU0QgUENSRSBwb3J0IHJlcXVpcmVzIC0td2l0aC1jYy1vcHQ9Ii1JIC91c3IvbG9jYWwvaW5jbHVkZSIKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3BjcmUvbWFrZSBiL2F1dG8vbGliL3BjcmUvbWFrZQppbmRleCAyN2Q3NzRiLi42YjUyMzU3IDEwMDY0NAotLS0gYS9hdXRvL2xpYi9wY3JlL21ha2UKKysrIGIvYXV0by9saWIvcGNyZS9tYWtlCkBAIC0yMiw3ICsyMiw3IEBACiBlc2FjCiAKIAotY2FzZSAkTkdYX1BMQVRGT1JNIGluCitjYXNlICIkTkdYX1BMQVRGT1JNIiBpbgogCiAgICAgd2luMzIpCiAgICAgICAgIGNwIGF1dG8vbGliL3BjcmUvcGF0Y2gucGNyZS5pbiAkUENSRQpkaWZmIC0tZ2l0IGEvYXV0by9saWIvemxpYi9jb25mIGIvYXV0by9saWIvemxpYi9jb25mCmluZGV4IDhlZGQzZjMuLjMxMjNjNjYgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3psaWIvY29uZgorKysgYi9hdXRvL2xpYi96bGliL2NvbmYKQEAgLTIxLDYgKzIxLDcgQEAKICAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkWkxJQi9kZWZsYXRlLm8iCiAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFpMSUIvdHJlZXMubyIKICAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkWkxJQi96dXRpbC5vIgorICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRaTElCL2NvbXByZXNzLm8iCiAKICAgICAgICAgICAgIGlmIFsgJFpMSUJfQVNNICE9IE5PIF07IHRoZW4KICAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFpMSUIvbWF0Y2gubyIKQEAgLTM3LDcgKzM4LDcgQEAKIAogZWxzZQogCi0gICAgaWYgWyAkTkdYX1BMQVRGT1JNICE9IHdpbjMyIF07IHRoZW4KKyAgICBpZiBbICIkTkdYX1BMQVRGT1JNIiAhPSB3aW4zMiBdOyB0aGVuCiAgICAgICAgIFpMSUI9Tk8KIAogICAgICAgICAjIEZyZWVCU0QsIFNvbGFyaXMsIExpbnV4CmRpZmYgLS1naXQgYS9hdXRvL2xpYi96bGliL21ha2UgYi9hdXRvL2xpYi96bGliL21ha2UKaW5kZXggOGMxYWJkYy4uMTg1OWEzNCAxMDA2NDQKLS0tIGEvYXV0by9saWIvemxpYi9tYWtlCisrKyBiL2F1dG8vbGliL3psaWIvbWFrZQpAQCAtMjYsNyArMjYsNyBAQAogZG9uZT1OTwogCiAKLWNhc2UgJE5HWF9QTEFURk9STSBpbgorY2FzZSAiJE5HWF9QTEFURk9STSIgaW4KIAogICAgIHdpbjMyKQogICAgICAgICBjcCBhdXRvL2xpYi96bGliLyRuZ3hfbWFrZWZpbGUgJFpMSUIKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3psaWIvbWFrZWZpbGUuYmNjIGIvYXV0by9saWIvemxpYi9tYWtlZmlsZS5iY2MKaW5kZXggOTVlODgwMC4uMmM3NjQyNCAxMDA2NDQKLS0tIGEvYXV0by9saWIvemxpYi9tYWtlZmlsZS5iY2MKKysrIGIvYXV0by9saWIvemxpYi9tYWtlZmlsZS5iY2MKQEAgLTUsNyArNSw4IEBACiBDRkxBR1MgPSAtcSAtTzIgLXRXTSAkKENQVV9PUFQpCiAKIHpsaWIubGliOgotCWJjYzMyIC1jICQoQ0ZMQUdTKSBhZGxlcjMyLmMgY3JjMzIuYyBkZWZsYXRlLmMgdHJlZXMuYyB6dXRpbC5jCisJYmNjMzIgLWMgJChDRkxBR1MpIGFkbGVyMzIuYyBjcmMzMi5jIGRlZmxhdGUuYyB0cmVlcy5jIHp1dGlsLmMgXAorCQljb21wcmVzcy5jCiAKIAl0bGliIHpsaWIubGliICthZGxlcjMyLm9iaiArY3JjMzIub2JqICtkZWZsYXRlLm9iaiBcCi0JCSt0cmVlcy5vYmogK3p1dGlsLm9iagorCQkrdHJlZXMub2JqICt6dXRpbC5vYmogK2NvbXByZXNzLm9iagpkaWZmIC0tZ2l0IGEvYXV0by9saWIvemxpYi9tYWtlZmlsZS5tc3ZjIGIvYXV0by9saWIvemxpYi9tYWtlZmlsZS5tc3ZjCmluZGV4IDMwNGI5ODYuLmE0ZWU4OWEgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3psaWIvbWFrZWZpbGUubXN2YworKysgYi9hdXRvL2xpYi96bGliL21ha2VmaWxlLm1zdmMKQEAgLTUsNyArNSw3IEBACiBDRkxBR1MgPSAtbm9sb2dvIC1PMiAtT2IxIC1PaSAtR3MgJChMSUJDKSAkKENQVV9PUFQpCiAKIHpsaWIubGliOgotCWNsIC1jICQoQ0ZMQUdTKSBhZGxlcjMyLmMgY3JjMzIuYyBkZWZsYXRlLmMgdHJlZXMuYyB6dXRpbC5jCisJY2wgLWMgJChDRkxBR1MpIGFkbGVyMzIuYyBjcmMzMi5jIGRlZmxhdGUuYyB0cmVlcy5jIHp1dGlsLmMgY29tcHJlc3MuYwogCiAJbGluayAtbGliIC1vdXQ6emxpYi5saWIgYWRsZXIzMi5vYmogY3JjMzIub2JqIGRlZmxhdGUub2JqIFwKLQkJdHJlZXMub2JqIHp1dGlsLm9iagorCQl0cmVlcy5vYmogenV0aWwub2JqIGNvbXByZXNzLm9iagpkaWZmIC0tZ2l0IGEvYXV0by9saWIvemxpYi9tYWtlZmlsZS5vd2MgYi9hdXRvL2xpYi96bGliL21ha2VmaWxlLm93YwppbmRleCA3MWJhNTEyLi5kYWM0MzY1IDEwMDY0NAotLS0gYS9hdXRvL2xpYi96bGliL21ha2VmaWxlLm93YworKysgYi9hdXRvL2xpYi96bGliL21ha2VmaWxlLm93YwpAQCAtNSw1ICs1LDUgQEAKIENGTEFHUyA9IC16cSAtYnQ9bnQgLW90IC1vcCAtb2kgLW9lIC1zIC1ibSAkKENQVV9PUFQpCiAKIHpsaWIubGliOgotCXdjbDM4NiAtYyAkKENGTEFHUykgYWRsZXIzMi5jIGNyYzMyLmMgZGVmbGF0ZS5jIHRyZWVzLmMgenV0aWwuYwotCXdsaWIgLW4gemxpYi5saWIgYWRsZXIzMi5vYmogY3JjMzIub2JqIGRlZmxhdGUub2JqIHRyZWVzLm9iaiB6dXRpbC5vYmoKKwl3Y2wzODYgLWMgJChDRkxBR1MpIGFkbGVyMzIuYyBjcmMzMi5jIGRlZmxhdGUuYyB0cmVlcy5jIHp1dGlsLmMgY29tcHJlc3MuYworCXdsaWIgLW4gemxpYi5saWIgYWRsZXIzMi5vYmogY3JjMzIub2JqIGRlZmxhdGUub2JqIHRyZWVzLm9iaiB6dXRpbC5vYmogY29tcHJlc3Mub2JqCmRpZmYgLS1naXQgYS9hdXRvL29zL2NvbmYgYi9hdXRvL29zL2NvbmYKaW5kZXggNzM3NTE5OS4uOGM0NzM5ZiAxMDA2NDQKLS0tIGEvYXV0by9vcy9jb25mCisrKyBiL2F1dG8vb3MvY29uZgpAQCAtMTIsMTEgKzEyLDEyIEBACiAgICAgZWNobyAiICsgJE5HWF9TWVNURU0gJE5HWF9SRUxFQVNFICROR1hfTUFDSElORSIKIAogICAgIE5HWF9QTEFURk9STT0iJE5HWF9TWVNURU06JE5HWF9SRUxFQVNFOiROR1hfTUFDSElORSI7CisKIGVsc2UKICAgICBlY2hvICJidWlsZGluZyBmb3IgJE5HWF9QTEFURk9STSIKIGZpCiAKLWNhc2UgJE5HWF9QTEFURk9STSBpbgorY2FzZSAiJE5HWF9QTEFURk9STSIgaW4KIAogICAgIEZyZWVCU0Q6KiB8IERyYWdvbkZseToqKQogICAgICAgICAuIGF1dG8vb3MvZnJlZWJzZApAQCAtNDMsNyArNDQsNyBAQAogZXNhYwogCiAKLWNhc2UgJE5HWF9NQUNISU5FIGluCitjYXNlICIkTkdYX01BQ0hJTkUiIGluCiAKICAgICAgaTM4NnxpNjg2fGk4NnBjfGFtZDY0KQogICAgICAgICAgaGF2ZT1OR1hfSEFWRV9OT05BTElHTkVEIC4gYXV0by9oYXZlCkBAIC01Miw3ICs1Myw3IEBACiBlc2FjCiAKIAotaWYgWyAkTkdYX1BMQVRGT1JNICE9IHdpbjMyIF07IHRoZW4KK2lmIFsgIiROR1hfUExBVEZPUk0iICE9IHdpbjMyIF07IHRoZW4KIAogICAgICBOR1hfVVNFUj0ke05HWF9VU0VSOi1ub2JvZHl9CiAKQEAgLTc3LDYgKzc4LDI0IEBACiAgICAgZmkKIAogCisgICAgbmd4X2ZlYXR1cmU9InBvbGwoKSIKKyAgICBuZ3hfZmVhdHVyZV9uYW1lPQorICAgIG5neF9mZWF0dXJlX3J1bj1ubworICAgIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxwb2xsLmg+IgorICAgIG5neF9mZWF0dXJlX2xpYnM9CisgICAgbmd4X2ZlYXR1cmVfdGVzdD0iaW50ICBuLCBkcDsgc3RydWN0IHBvbGxmZCAgcGw7CisgICAgICAgICAgICAgICAgICAgICAgZHAgPSAwOworICAgICAgICAgICAgICAgICAgICAgIHBsLmZkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBwbC5ldmVudHMgPSAwOworICAgICAgICAgICAgICAgICAgICAgIHBsLnJldmVudHMgPSAwOworICAgICAgICAgICAgICAgICAgICAgIG4gPSBwb2xsKCZwbCwgMSwgMCkiCisgICAgLiBhdXRvL2ZlYXR1cmUKKworICAgIGlmIFsgJG5neF9mb3VuZCA9IG5vIF07IHRoZW4KKyAgICAgICAgRVZFTlRfUE9MTD1OT05FCisgICAgZmkKKworCiAgICAgbmd4X2ZlYXR1cmU9Ii9kZXYvcG9sbCIKICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJOR1hfSEFWRV9ERVZQT0xMIgogICAgIG5neF9mZWF0dXJlX3J1bj1ubwpAQCAtMTI0LDE0ICsxNDMsMjIgQEAKICAgICAgICAgZmkKICAgICBmaQogCi0gICAgaWYgWyBOR1hfU1lTVEVNICE9ICJOZXRCU0QiIF07IHRoZW4KKyAgICBpZiBbICIkTkdYX1NZU1RFTSIgPSAiTmV0QlNEIiBdOyB0aGVuCiAKICAgICAgICAgIyBOZXRCU0QgMi4wIGluY29tcGF0aWJseSBkZWZpbmVzIGtldmVudC51ZGF0YSBhcyAiaW50cHRyX3QiCisKKyAgICAgICAgY2F0IDw8IEVORCA+PiAkTkdYX0FVVE9fQ09ORklHX0gKKworI2RlZmluZSBOR1hfS1FVRVVFX1VEQVRBX1QKKworRU5ECisKKyAgICBlbHNlCiAgICAgICAgIGNhdCA8PCBFTkQgPj4gJE5HWF9BVVRPX0NPTkZJR19ICiAKICNkZWZpbmUgTkdYX0tRVUVVRV9VREFUQV9UICAodm9pZCAqKQogCiBFTkQKIAotICAgICBmaQorICAgIGZpCiBmaQpkaWZmIC0tZ2l0IGEvYXV0by9vcy9saW51eCBiL2F1dG8vb3MvbGludXgKaW5kZXggOGMxNDBiMy4uYTgzYzE4MCAxMDA2NDQKLS0tIGEvYXV0by9vcy9saW51eAorKysgYi9hdXRvL29zL2xpbnV4CkBAIC0xOCw3ICsxOCw3IEBACiBuZ3hfc3BhY2VyPScKICcKIAotQ0NfQVVYX0ZMQUdTPSItRF9HTlVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCitDQ19BVVhfRkxBR1M9IiRDQ19BVVhfRkxBR1MgLURfR05VX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgogCiAKICMgTGludXgga2VybmVsIHZlcnNpb24KZGlmZiAtLWdpdCBhL2F1dG8vb3Mvc29sYXJpcyBiL2F1dG8vb3Mvc29sYXJpcwppbmRleCA3MjNhZDg0Li4yMzQ4Yzg5IDEwMDY0NAotLS0gYS9hdXRvL29zL3NvbGFyaXMKKysrIGIvYXV0by9vcy9zb2xhcmlzCkBAIC0yMCwxMCArMjAsMTAgQEAKICMgU29sYXJpcydzIG1ha2UgZG9lcyBub3Qgc3VwcG9ydCBhIGJsYW5rIGxpbmUgYmV0d2VlbiB0YXJnZXQgYW5kIHJ1bGVzCiBuZ3hfc3BhY2VyPQogCi1DQ19BVVhfRkxBR1M9Ii1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWxydCIKK0NDX0FVWF9GTEFHUz0iJENDX0FVWF9GTEFHUyAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1scnQiCiAKIAotY2FzZSAkTkdYX1BMQVRGT1JNIGluCitjYXNlICIkTkdYX1BMQVRGT1JNIiBpbgogCiAgICAgKjpzdW40dSkKICAgICAgICAgIyAiLW1jcHU9djkiIGVuYWJsZXMgdGhlICJjYXNhIiBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb24KZGlmZiAtLWdpdCBhL2F1dG8vc3VtbWFyeSBiL2F1dG8vc3VtbWFyeQppbmRleCAyNDNkNmEzLi40ODQ4YzIyIDEwMDY0NAotLS0gYS9hdXRvL3N1bW1hcnkKKysrIGIvYXV0by9zdW1tYXJ5CkBAIC0xMTgsMjIgKzExOCwyMiBAQAogCiAKIGNhdCA8PCBFTkQKLSAgbmdpbnggcGF0aCBwcmVmaXg6ICROR1hfUFJFRklYCi0gIG5naW54IGJpbmFyeSBmaWxlOiAkTkdYX1NCSU5fUEFUSAotICBuZ2lueCBjb25maWd1cmF0aW9uIGZpbGU6ICROR1hfQ09ORl9QQVRICi0gIG5naW54IHBpZCBmaWxlOiAkTkdYX1BJRF9QQVRICisgIG5naW54IHBhdGggcHJlZml4OiAiJE5HWF9QUkVGSVgiCisgIG5naW54IGJpbmFyeSBmaWxlOiAiJE5HWF9TQklOX1BBVEgiCisgIG5naW54IGNvbmZpZ3VyYXRpb24gZmlsZTogIiROR1hfQ09ORl9QQVRIIgorICBuZ2lueCBwaWQgZmlsZTogIiROR1hfUElEX1BBVEgiCiBFTkQKIAogaWYgdGVzdCAtbiAiJE5HWF9FUlJPUl9MT0dfUEFUSCI7IHRoZW4KLSAgICBlY2hvICIgIG5naW54IGVycm9yIGxvZyBmaWxlOiAkTkdYX0VSUk9SX0xPR19QQVRIIgorICAgIGVjaG8gIiAgbmdpbnggZXJyb3IgbG9nIGZpbGU6IFwiJE5HWF9FUlJPUl9MT0dfUEFUSFwiIgogZWxzZQogICAgIGVjaG8gIiAgbmdpbnggbG9ncyBlcnJvcnMgdG8gc3RkZXJyIgogZmkKIAogY2F0IDw8IEVORAotICBuZ2lueCBodHRwIGFjY2VzcyBsb2cgZmlsZTogJE5HWF9IVFRQX0xPR19QQVRICi0gIG5naW54IGh0dHAgY2xpZW50IHJlcXVlc3QgYm9keSB0ZW1wb3JhcnkgZmlsZXM6ICROR1hfSFRUUF9DTElFTlRfVEVNUF9QQVRICi0gIG5naW54IGh0dHAgcHJveHkgdGVtcG9yYXJ5IGZpbGVzOiAkTkdYX0hUVFBfUFJPWFlfVEVNUF9QQVRICi0gIG5naW54IGh0dHAgZmFzdGNnaSB0ZW1wb3JhcnkgZmlsZXM6ICROR1hfSFRUUF9GQVNUQ0dJX1RFTVBfUEFUSAorICBuZ2lueCBodHRwIGFjY2VzcyBsb2cgZmlsZTogIiROR1hfSFRUUF9MT0dfUEFUSCIKKyAgbmdpbnggaHR0cCBjbGllbnQgcmVxdWVzdCBib2R5IHRlbXBvcmFyeSBmaWxlczogIiROR1hfSFRUUF9DTElFTlRfVEVNUF9QQVRIIgorICBuZ2lueCBodHRwIHByb3h5IHRlbXBvcmFyeSBmaWxlczogIiROR1hfSFRUUF9QUk9YWV9URU1QX1BBVEgiCisgIG5naW54IGh0dHAgZmFzdGNnaSB0ZW1wb3JhcnkgZmlsZXM6ICIkTkdYX0hUVFBfRkFTVENHSV9URU1QX1BBVEgiCiAKIEVORApkaWZmIC0tZ2l0IGEvYXV0by90aHJlYWRzIGIvYXV0by90aHJlYWRzCmluZGV4IGRhMDMwMzYuLmQ3MjYxNGIgMTAwNjQ0Ci0tLSBhL2F1dG8vdGhyZWFkcworKysgYi9hdXRvL3RocmVhZHMKQEAgLTksNyArOSw3IEBACiAgICAgICAgIENPUkVfREVQUz0iJENPUkVfREVQUyAkRlJFRUJTRF9SRk9SS19ERVBTIgogICAgICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJEZSRUVCU0RfUkZPUktfU1JDUyIKIAotICAgICAgICBjYXNlICROR1hfUExBVEZPUk0gaW4KKyAgICAgICAgY2FzZSAiJE5HWF9QTEFURk9STSIgaW4KICAgICAgICAgICAgICo6aTM4NikKICAgICAgICAgICAgICAgICBpZiBbIFwoICR2ZXJzaW9uIC1ndCA1MDAwMDAgLWEgJHZlcnNpb24gLWx0IDUwMTAwMCBcKSBcCiAgICAgICAgICAgICAgICAgICAgICAtbyAkdmVyc2lvbiAtbHQgNDkxMDAwIF0KQEAgLTQyLDcgKzQyLDcgQEAKICAgICA7OwogCiAgICAgbGliY19yKQotICAgICAgICBjYXNlICROR1hfUExBVEZPUk0gaW4KKyAgICAgICAgY2FzZSAiJE5HWF9QTEFURk9STSIgaW4KICAgICAgICAgICAgIEZyZWVCU0Q6WzM0XSopCiAgICAgICAgICAgICAgICAgaGF2ZT1OR1hfVEhSRUFEUyAuIGF1dG8vaGF2ZQogICAgICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtcHRocmVhZCIKZGlmZiAtLWdpdCBhL2F1dG8vdW5peCBiL2F1dG8vdW5peAppbmRleCA0MDZmMmEyLi4xMTI2MjZkIDEwMDc1NQotLS0gYS9hdXRvL3VuaXgKKysrIGIvYXV0by91bml4CkBAIC01LDIzICs1LDIxIEBACiBoYXZlPU5HWF9IQVZFX1VOSVhfRE9NQUlOIC4gYXV0by9oYXZlCiAKIAorIyBTVFVCCiBDQ19XQVJOPQogbmd4X2ZtdF9jb2xsZWN0PXllcwogCisKICMgQyB0eXBlcwogCiBuZ3hfdHlwZT0iaW50IjsgLiBhdXRvL3R5cGVzL3NpemVvZgotI25neF9mb3JtYXRzPSIlZCI7IC4gYXV0by9mbXQvZm10CiAKIG5neF90eXBlPSJsb25nIjsgLiBhdXRvL3R5cGVzL3NpemVvZgotI25neF9mb3JtYXRzPSIlbGQiOyAuIGF1dG8vZm10L2ZtdAogCiBuZ3hfdHlwZT0ibG9uZyBsb25nIjsgLiBhdXRvL3R5cGVzL3NpemVvZgotI25neF9mb3JtYXRzPSIlbGxkICVxZCI7IC4gYXV0by9mbXQvZm10CiAKIG5neF90eXBlPSJ2b2lkICoiOyAuIGF1dG8vdHlwZXMvc2l6ZW9mOyBuZ3hfcHRyX3NpemU9JG5neF9zaXplCi0jbmd4X2ZtdF9uYW1lPVBUUl9GTVQ7Ci0jZXZhbCBuZ3hfZm9ybWF0cz1cJHtuZ3hfJHtuZ3hfcHRyX3NpemV9X2ZtdH07IC4gYXV0by9mbXQvcHRyZm10CituZ3hfcGFyYW09TkdYX1BUUl9TSVpFOyBuZ3hfdmFsdWU9JG5neF9zaXplOyAuIGF1dG8vdHlwZXMvdmFsdWUKIAogCiAjIFBPU0lYIHR5cGVzCmRpZmYgLS1naXQgYS9jb25mL25naW54LmNvbmYgYi9jb25mL25naW54LmNvbmYKaW5kZXggZDQ4MjU1MC4uNDQxZmQwYyAxMDA2NDQKLS0tIGEvY29uZi9uZ2lueC5jb25mCisrKyBiL2NvbmYvbmdpbnguY29uZgpAQCAtMTUsNyArMTUsMTAgQEAKICAgICBpbmNsdWRlICAgICAgIGNvbmYvbWltZS50eXBlczsKICAgICBkZWZhdWx0X3R5cGUgIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTsKIAotICAgIHNlbmRmaWxlICBvbjsKKyAgICBzZW5kZmlsZSAgICAgICAgb247CisgICAgIyB0Y3Bfbm9kZWxheSAgIG9uOworCisgICAgIyBrZWVwYWxpdmVfdGltZW91dCAgMDsKIAogICAgICNnemlwICBvbjsKIApkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCA5ZGZhNjcyLi5mNjcxNmMxIDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDQzIEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjEuMjEiIGRhdGU9IjIyLjAyLjIwMDUiPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TVzNggbmd4X2h0dHBfc3R1Yl9zdGF0dXNfbW9kdWxlINDPy8Ha2dfBzCDOxdfF0s7VwCDT1MHUydPUycvVCivQ0skgydPQz8zY2s/Xwc7JySDNxdTPxMEgcnRzaWcgyczJINDSySDJ09DPzNjaz9fBzsnJIM7F08vPzNjLycgKK9LBws/eycgg0NLPw8XT08/XIM7BIFNNUCDNwdvJzsUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgbmd4X2h0dHBfc3R1Yl9zdGF0dXNfbW9kdWxlIHNob3dlZCBpbmNvcnJlY3Qgc3RhdGljdGljcworaWYgInJ0c2lnIiBtZXRob2Qgd2FzIHVzZWQgb3IgaWYgc2V2ZXJhbCB3b3JrZXIgcHJvY2VzcyByYW4gb24gU01QLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK25naW54IM7FINPPwsnSwczT0SDLz83QyczR1M/Sz80gaWNjINDPxCDsyc7Vy9PPzSDJzMkKK8XTzMkgwsnCzMnP1MXLwSB6bGliLTEuMi54INPPwsnSwczB09ggydogydPIz8TO2cgg1MXL09TP1y4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK25naW54IGNvdWxkIG5vdCBiZSBidWlsdCBieSB0aGUgaWNjIGNvbXBpbGVyIG9uIExpbnV4IG9yCitpZiB0aGUgemxpYi0xLjIueCBsaWJyYXJ5IHdhcyBidWlsZGluZyBmcm9tIHNvdXJjZXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorbmdpbnggzsUg08/CydLBzNPRINDPxCBOZXRCU0QgMi4wLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbmdpbnggY291bGQgbm90IGJlIGJ1aWx0IG9uIE5ldEJTRCAyLjAuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4xLjIwIiBkYXRlPSIxNy4wMi4yMDA1Ij4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDBlNzUwODMuLjVjNDEyMDcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS4yMCIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuMjEiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX05FV1BJRF9FWFQgICAgICIubmV3YmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaCBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKaW5kZXggNTQ3OWZhYS4uNGQ1ZDBjOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAorKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCkBAIC0xMTQsNyArMTE0LDcgQEAKIAogICAgIG5neF9idWZfdCAgICAgICAgICAqYnVmZmVyOwogCi0gICAgbmd4X3VpbnRfdCAgICAgICAgICBudW1iZXI7CisgICAgbmd4X2F0b21pY19pbnRfdCAgICBudW1iZXI7CiAKICAgICB1bnNpZ25lZCAgICAgICAgICAgIGxvZ19lcnJvcjoyOyAgICAgLyogbmd4X2Nvbm5lY3Rpb25fbG9nX2Vycm9yX2UgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2ZpbGUuYyBiL3NyYy9jb3JlL25neF9maWxlLmMKaW5kZXggY2MwM2Q3OS4uZTA2YjhjYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2ZpbGUuYworKysgYi9zcmMvY29yZS9uZ3hfZmlsZS5jCkBAIC04LDExICs4LDEyIEBACiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KIAogCi1zdGF0aWMgbmd4X3VpbnRfdCBuZ3hfdGVtcF9udW1iZXI7Ci1zdGF0aWMgbmd4X3VpbnRfdCBuZ3hfcmFuZG9tOworc3RhdGljIG5neF9hdG9taWNfaW50X3QgIG5neF90ZW1wX251bWJlcjsKK3N0YXRpYyBuZ3hfYXRvbWljX2ludF90ICBuZ3hfcmFuZG9tOwogCiAKLXNzaXplX3Qgbmd4X3dyaXRlX2NoYWluX3RvX3RlbXBfZmlsZShuZ3hfdGVtcF9maWxlX3QgKnRmLCBuZ3hfY2hhaW5fdCAqY2hhaW4pCitzc2l6ZV90CituZ3hfd3JpdGVfY2hhaW5fdG9fdGVtcF9maWxlKG5neF90ZW1wX2ZpbGVfdCAqdGYsIG5neF9jaGFpbl90ICpjaGFpbikKIHsKICAgICBuZ3hfaW50X3QgIHJjOwogCkBAIC0zMywxMyArMzQsMTQgQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2NyZWF0ZV90ZW1wX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcG9vbF90ICpwb29sLCBpbnQgcGVyc2lzdGVudCkKK25neF9pbnRfdAorbmd4X2NyZWF0ZV90ZW1wX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCwgbmd4X3Bvb2xfdCAqcG9vbCwKKyAgICBpbnQgcGVyc2lzdGVudCkKIHsKLSAgICBuZ3hfZXJyX3QgICBlcnI7Ci0gICAgdWludDMyX3QgICAgbnVtOworICAgIG5neF9lcnJfdCAgICAgICAgICBlcnI7CisgICAgbmd4X2F0b21pY19pbnRfdCAgIG47CiAKLSAgICBmaWxlLT5uYW1lLmxlbiA9IHBhdGgtPm5hbWUubGVuICsgMSArIHBhdGgtPmxlbiArIDEwOworICAgIGZpbGUtPm5hbWUubGVuID0gcGF0aC0+bmFtZS5sZW4gKyAxICsgcGF0aC0+bGVuICsgTkdYX0FUT01JQ19UX0xFTjsKIAogICAgIGlmICghKGZpbGUtPm5hbWUuZGF0YSA9IG5neF9wYWxsb2MocG9vbCwgZmlsZS0+bmFtZS5sZW4gKyAxKSkpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKQEAgLTUzLDExICs1NSwxMSBAQAogCiAgICAgbmd4X21lbWNweShmaWxlLT5uYW1lLmRhdGEsIHBhdGgtPm5hbWUuZGF0YSwgcGF0aC0+bmFtZS5sZW4pOwogCi0gICAgbnVtID0gKHVpbnQzMl90KSBuZ3hfbmV4dF90ZW1wX251bWJlcigwKTsKKyAgICBuID0gbmd4X25leHRfdGVtcF9udW1iZXIoMCk7CiAKICAgICBmb3IgKCA7OyApIHsKICAgICAgICAgbmd4X3NwcmludGYoZmlsZS0+bmFtZS5kYXRhICsgcGF0aC0+bmFtZS5sZW4gKyAxICsgcGF0aC0+bGVuLAotICAgICAgICAgICAgICAgICAgICAiJTAxMHVpJVoiLCBudW0pOworICAgICAgICAgICAgICAgICAgICAiJTBtdUElWiIsIG4pOwogCiAgICAgICAgIG5neF9jcmVhdGVfaGFzaGVkX2ZpbGVuYW1lKGZpbGUsIHBhdGgpOwogCkBAIC03Nyw3ICs3OSw3IEBACiAgICAgICAgIGVyciA9IG5neF9lcnJubzsKIAogICAgICAgICBpZiAoZXJyID09IE5HWF9FRVhJU1QpIHsKLSAgICAgICAgICAgIG51bSA9IG5neF9uZXh0X3RlbXBfbnVtYmVyKDEpOworICAgICAgICAgICAgbiA9IG5neF9uZXh0X3RlbXBfbnVtYmVyKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMTAxLDcgKzEwMyw4IEBACiB9CiAKIAotdm9pZCBuZ3hfY3JlYXRlX2hhc2hlZF9maWxlbmFtZShuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfcGF0aF90ICpwYXRoKQordm9pZAorbmd4X2NyZWF0ZV9oYXNoZWRfZmlsZW5hbWUobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCkKIHsKICAgICBuZ3hfdWludF90ICBpLCBuYW1lLCBwb3MsIGxldmVsOwogCkBAIC0xMjgsNyArMTMxLDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2NyZWF0ZV9wYXRoKG5neF9maWxlX3QgKmZpbGUsIG5neF9wYXRoX3QgKnBhdGgpCituZ3hfaW50X3QKK25neF9jcmVhdGVfcGF0aChuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfcGF0aF90ICpwYXRoKQogewogICAgIGludCAgICAgICAgaSwgcG9zOwogICAgIG5neF9lcnJfdCAgZXJyOwpAQCAtMTY0LDE5ICsxNjgsMTYgQEAKIH0KIAogCi12b2lkIG5neF9pbml0X3RlbXBfbnVtYmVyKCkKK3ZvaWQKK25neF9pbml0X3RlbXBfbnVtYmVyKCkKIHsKLSAgICBuZ3hfcmFuZG9tID0gMDsKLQotICAgIG5neF90ZW1wX251bWJlciA9IG5neF9yYW5kb207Ci0KLSAgICB3aGlsZSAobmd4X3JhbmRvbSA8IDEwMDAwKSB7Ci0gICAgICAgIG5neF9yYW5kb20gPSAxMjM0NTY7Ci0gICAgfQorICAgIG5neF90ZW1wX251bWJlciA9IDA7CisgICAgbmd4X3JhbmRvbSA9IDEyMzQ1NjsKIH0KIAogCi1uZ3hfdWludF90IG5neF9uZXh0X3RlbXBfbnVtYmVyKG5neF91aW50X3QgY29sbGlzaW9uKQorbmd4X2F0b21pY19pbnRfdAorbmd4X25leHRfdGVtcF9udW1iZXIobmd4X3VpbnRfdCBjb2xsaXNpb24pCiB7CiAgICAgaWYgKGNvbGxpc2lvbikgewogICAgICAgICBuZ3hfdGVtcF9udW1iZXIgKz0gbmd4X3JhbmRvbTsKQEAgLTE4Niw3ICsxODcsOCBAQAogfQogCiAKLWNoYXIgKm5neF9jb25mX3NldF9wYXRoX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKK2NoYXIgKgorbmd4X2NvbmZfc2V0X3BhdGhfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIGNoYXIgICpwID0gY29uZjsKIApAQCAtMjM3LDcgKzIzOSw4IEBACiB9CiAKIAotbmd4X2ludF90IG5neF9hZGRfcGF0aChuZ3hfY29uZl90ICpjZiwgbmd4X3BhdGhfdCAqKnNsb3QpCituZ3hfaW50X3QKK25neF9hZGRfcGF0aChuZ3hfY29uZl90ICpjZiwgbmd4X3BhdGhfdCAqKnNsb3QpCiB7CiAgICAgbmd4X3VpbnRfdCAgIGksIG47CiAgICAgbmd4X3BhdGhfdCAgKnBhdGgsICoqcDsKQEAgLTI5OSw3ICszMDIsOCBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfY3JlYXRlX3BhdGhlcyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF91aWRfdCB1c2VyKQorbmd4X2ludF90CituZ3hfY3JlYXRlX3BhdGhlcyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF91aWRfdCB1c2VyKQogewogICAgIG5neF9lcnJfdCAgICAgICAgIGVycjsKICAgICBuZ3hfdWludF90ICAgICAgICBpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2ZpbGUuaCBiL3NyYy9jb3JlL25neF9maWxlLmgKaW5kZXggYmM2NGVkOC4uYTc2YTY0OCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2ZpbGUuaAorKysgYi9zcmMvY29yZS9uZ3hfZmlsZS5oCkBAIC01NSwxNCArNTUsMTQgQEAKIAogc3NpemVfdCBuZ3hfd3JpdGVfY2hhaW5fdG9fdGVtcF9maWxlKG5neF90ZW1wX2ZpbGVfdCAqdGYsIG5neF9jaGFpbl90ICpjaGFpbik7CiBuZ3hfaW50X3Qgbmd4X2NyZWF0ZV90ZW1wX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcG9vbF90ICpwb29sLCBpbnQgcGVyc2lzdGVudCk7CisgICAgbmd4X3Bvb2xfdCAqcG9vbCwgaW50IHBlcnNpc3RlbnQpOwogdm9pZCBuZ3hfY3JlYXRlX2hhc2hlZF9maWxlbmFtZShuZ3hfZmlsZV90ICpmaWxlLCBuZ3hfcGF0aF90ICpwYXRoKTsKIG5neF9pbnRfdCBuZ3hfY3JlYXRlX3BhdGgobmd4X2ZpbGVfdCAqZmlsZSwgbmd4X3BhdGhfdCAqcGF0aCk7CiBuZ3hfaW50X3Qgbmd4X2FkZF9wYXRoKG5neF9jb25mX3QgKmNmLCBuZ3hfcGF0aF90ICoqc2xvdCk7CiBuZ3hfaW50X3Qgbmd4X2NyZWF0ZV9wYXRoZXMobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfdWlkX3QgdXNlcik7CiAKIHZvaWQgbmd4X2luaXRfdGVtcF9udW1iZXIoKTsKLW5neF91aW50X3Qgbmd4X25leHRfdGVtcF9udW1iZXIobmd4X3VpbnRfdCBjb2xsaXNpb24pOworbmd4X2F0b21pY19pbnRfdCBuZ3hfbmV4dF90ZW1wX251bWJlcihuZ3hfdWludF90IGNvbGxpc2lvbik7CiAKIGNoYXIgKm5neF9jb25mX3NldF9wYXRoX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9sb2cuYyBiL3NyYy9jb3JlL25neF9sb2cuYwppbmRleCBkOWM1YzU5Li41ODg5NGU5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfbG9nLmMKKysrIGIvc3JjL2NvcmUvbmd4X2xvZy5jCkBAIC04NywxNSArODcsOSBAQAogICAgIHAgPSBuZ3hfc3ByaW50ZihwLCAiJVAjIiBOR1hfVElEX1RfRk1UICI6ICIsIG5neF9sb2dfcGlkLCBuZ3hfbG9nX3RpZCk7CiAKICAgICBpZiAobG9nLT5jb25uZWN0aW9uKSB7Ci0gICAgICAgIHAgPSBuZ3hfc3ByaW50ZihwLCAiKiV1aSAiLCBsb2ctPmNvbm5lY3Rpb24pOworICAgICAgICBwID0gbmd4X3NwcmludGYocCwgIioldUEgIiwgbG9nLT5jb25uZWN0aW9uKTsKICAgICB9CiAKLSNpZiAwCi0gICAgaWYgKGxvZy0+ZGF0YSAmJiAqKGludCAqKSBsb2ctPmRhdGEgIT0gLTEpIHsKLSAgICAgICAgcCA9IG5neF9zcHJpbnRmKHAsICIqJXVkICIsICoodV9pbnQgKikgbG9nLT5kYXRhKTsKLSAgICB9Ci0jZW5kaWYKLQogI2lmIChOR1hfSEFWRV9WQVJJQURJQ19NQUNST1MpCiAKICAgICB2YV9zdGFydChhcmdzLCBmbXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2xvZy5oIGIvc3JjL2NvcmUvbmd4X2xvZy5oCmluZGV4IDU4ODgzN2YuLjk1ZGZlNDEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9sb2cuaAorKysgYi9zcmMvY29yZS9uZ3hfbG9nLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICBuZ3hfdWludF90ICAgICAgICAgICBsb2dfbGV2ZWw7CiAgICAgbmd4X29wZW5fZmlsZV90ICAgICAqZmlsZTsKIAotICAgIG5neF91aW50X3QgICAgICAgICAgIGNvbm5lY3Rpb247CisgICAgbmd4X2F0b21pY19pbnRfdCAgICAgY29ubmVjdGlvbjsKIAogICAgIG5neF9sb2dfaGFuZGxlcl9wdCAgIGhhbmRsZXI7CiAgICAgdm9pZCAgICAgICAgICAgICAgICAqZGF0YTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9yYWRpeF90cmVlLmMgYi9zcmMvY29yZS9uZ3hfcmFkaXhfdHJlZS5jCmluZGV4IGZhMDU2YWYuLjIwMjQyMTkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9yYWRpeF90cmVlLmMKKysrIGIvc3JjL2NvcmUvbmd4X3JhZGl4X3RyZWUuYwpAQCAtNDAsOCArNDAsOCBAQAogICAgIH0KIAogICAgIC8qCi0gICAgICogV2UgcHJlYWxsb2NhdGUgdGhlIGZpcnN0IG5vZGVzOiAwLCAxLCAwMCwgMDEsIDEwLCAxMSwgMDAwLCAwMDEsIGV0Yy4sCi0gICAgICogdG8gaW5jcmVhc2UgdGhlIFRMQiBoaXRzIGV2ZW4gaWYgZm9yIHRoZSBmaXJzdCBsb29rdXAgaXRlcmF0aW9ucy4KKyAgICAgKiBUaGUgcHJlYWxsb2NhdGlvbiB0aGUgZmlyc3Qgbm9kZXM6IDAsIDEsIDAwLCAwMSwgMTAsIDExLCAwMDAsIDAwMSwgZXRjLgorICAgICAqIGluY3JlYXNlcyB0aGUgVExCIGhpdHMgZXZlbiBpZiBmb3IgdGhlIGZpcnN0IGxvb2t1cCBpdGVyYXRpb25zLgogICAgICAqIE9uIHRoZSAzMi1iaXQgcGxhdGZvcm1zIHRoZSA3IHByZWFsbG9jYXRlZCBiaXRzIHRha2VzIGNvbnRpbnVvdXMgNEssCiAgICAgICogOCAtIDhLLCA5IC0gMTZLLCBldGMuICBPbiB0aGUgNjQtYml0IHBsYXRmb3JtcyB0aGUgNiBwcmVhbGxvY2F0ZWQgYml0cwogICAgICAqIHRha2VzIGNvbnRpbnVvdXMgNEssIDcgLSA4SywgOCAtIDE2SywgZXRjLiAgVGhlcmUgaXMgbm8gc2Vuc2UgdG8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9yYnRyZWUuYyBiL3NyYy9jb3JlL25neF9yYnRyZWUuYwppbmRleCBlZjU3Mjg5Li5kM2JiM2E1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcmJ0cmVlLmMKKysrIGIvc3JjL2NvcmUvbmd4X3JidHJlZS5jCkBAIC0yMSwxNSArMjEsMTQgQEAKIAogCiBzdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9yYnRyZWVfbGVmdF9yb3RhdGUobmd4X3JidHJlZV90ICoqcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSk7CisgICAgbmd4X3JidHJlZV90ICpzZW50aW5lbCwgbmd4X3JidHJlZV90ICpub2RlKTsKIHN0YXRpYyBuZ3hfaW5saW5lIHZvaWQgbmd4X3JidHJlZV9yaWdodF9yb3RhdGUobmd4X3JidHJlZV90ICoqcm9vdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JidHJlZV90ICpzZW50aW5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JidHJlZV90ICpub2RlKTsKKyAgICBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLCBuZ3hfcmJ0cmVlX3QgKm5vZGUpOwogCiAKLXZvaWQgbmd4X3JidHJlZV9pbnNlcnQobmd4X3JidHJlZV90ICoqcm9vdCwgbmd4X3JidHJlZV90ICpzZW50aW5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JidHJlZV90ICpub2RlKQordm9pZAorbmd4X3JidHJlZV9pbnNlcnQobmd4X3JidHJlZV90ICoqcm9vdCwgbmd4X3JidHJlZV90ICpzZW50aW5lbCwKKyAgICBuZ3hfcmJ0cmVlX3QgKm5vZGUpCiB7CiAgICAgbmd4X3JidHJlZV90ICAqdGVtcDsKIApAQCAtMTI1LDggKzEyNCw5IEBACiB9CiAKIAotdm9pZCBuZ3hfcmJ0cmVlX2RlbGV0ZShuZ3hfcmJ0cmVlX3QgKipyb290LCBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLAotICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcmJ0cmVlX3QgKm5vZGUpCit2b2lkCituZ3hfcmJ0cmVlX2RlbGV0ZShuZ3hfcmJ0cmVlX3QgKipyb290LCBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLAorICAgIG5neF9yYnRyZWVfdCAqbm9kZSkKIHsKICAgICBuZ3hfaW50X3QgICAgICBpc19yZWQ7CiAgICAgbmd4X3JidHJlZV90ICAqc3Vic3QsICp0ZW1wLCAqdzsKQEAgLTI4OSw5ICsyODksOSBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW5saW5lIHZvaWQgbmd4X3JidHJlZV9sZWZ0X3JvdGF0ZShuZ3hfcmJ0cmVlX3QgKipyb290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqc2VudGluZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JidHJlZV90ICpub2RlKQorc3RhdGljIG5neF9pbmxpbmUgdm9pZAorbmd4X3JidHJlZV9sZWZ0X3JvdGF0ZShuZ3hfcmJ0cmVlX3QgKipyb290LCBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsLAorICAgIG5neF9yYnRyZWVfdCAqbm9kZSkKIHsKICAgICBuZ3hfcmJ0cmVlX3QgICp0ZW1wOwogCkBAIC0zMTksOSArMzE5LDkgQEAKIH0KIAogCi1zdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9yYnRyZWVfcmlnaHRfcm90YXRlKG5neF9yYnRyZWVfdCAqKnJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqc2VudGluZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSkKK3N0YXRpYyBuZ3hfaW5saW5lIHZvaWQKK25neF9yYnRyZWVfcmlnaHRfcm90YXRlKG5neF9yYnRyZWVfdCAqKnJvb3QsIG5neF9yYnRyZWVfdCAqc2VudGluZWwsCisgICAgbmd4X3JidHJlZV90ICpub2RlKQogewogICAgIG5neF9yYnRyZWVfdCAgKnRlbXA7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9yYnRyZWUuaCBiL3NyYy9jb3JlL25neF9yYnRyZWUuaAppbmRleCBkODc2ZWMwLi5jOGI3MDkyIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcmJ0cmVlLmgKKysrIGIvc3JjL2NvcmUvbmd4X3JidHJlZS5oCkBAIC0yNCwxMyArMjQsMTMgQEAKIAogCiB2b2lkIG5neF9yYnRyZWVfaW5zZXJ0KG5neF9yYnRyZWVfdCAqKnJvb3QsIG5neF9yYnRyZWVfdCAqc2VudGluZWwsCi0gICAgICAgICAgICAgICAgICAgICAgIG5neF9yYnRyZWVfdCAqbm9kZSk7CisgICAgbmd4X3JidHJlZV90ICpub2RlKTsKIHZvaWQgbmd4X3JidHJlZV9kZWxldGUobmd4X3JidHJlZV90ICoqcm9vdCwgbmd4X3JidHJlZV90ICpzZW50aW5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JidHJlZV90ICpub2RlKTsKKyAgICBuZ3hfcmJ0cmVlX3QgKm5vZGUpOwogCiAKLXN0YXRpYyBuZ3hfaW5saW5lIG5neF9yYnRyZWVfdCAqbmd4X3JidHJlZV9taW4obmd4X3JidHJlZV90ICpub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcmJ0cmVlX3QgKnNlbnRpbmVsKQorc3RhdGljIG5neF9pbmxpbmUgbmd4X3JidHJlZV90ICoKK25neF9yYnRyZWVfbWluKG5neF9yYnRyZWVfdCAqbm9kZSwgbmd4X3JidHJlZV90ICpzZW50aW5lbCkKIHsKICAgIHdoaWxlIChub2RlLT5sZWZ0ICE9IHNlbnRpbmVsKSB7CiAgICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc3BpbmxvY2suYyBiL3NyYy9jb3JlL25neF9zcGlubG9jay5jCmluZGV4IGRmYTdkYTQuLjAwZTdmY2EgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9zcGlubG9jay5jCisrKyBiL3NyYy9jb3JlL25neF9zcGlubG9jay5jCkBAIC04LDYgKzgsMTAgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKKy8qCisgKiBUT0RPOiB0aGUgUDQgb3B0aW1pemVkIGFzc2VtYmxlciB2ZXJzaW9uIHdpdGggdGhlICJwYXVzZSIgb3BlcmF0aW9uCisgKi8KKwogdm9pZCBuZ3hfc3BpbmxvY2sobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfdWludF90IHNwaW4pCiB7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuYyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwppbmRleCBkNjNhMjM4Li5jYTlkNjY5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCkBAIC04LDcgKzgsOCBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotdV9jaGFyICpuZ3hfY3B5c3Rybih1X2NoYXIgKmRzdCwgdV9jaGFyICpzcmMsIHNpemVfdCBuKQordV9jaGFyICoKK25neF9jcHlzdHJuKHVfY2hhciAqZHN0LCB1X2NoYXIgKnNyYywgc2l6ZV90IG4pCiB7CiAgICAgaWYgKG4gPT0gMCkgewogICAgICAgICByZXR1cm4gZHN0OwpAQCAtMjgsNyArMjksOCBAQAogfQogCiAKLXVfY2hhciAqbmd4X3BzdHJkdXAobmd4X3Bvb2xfdCAqcG9vbCwgbmd4X3N0cl90ICpzcmMpCit1X2NoYXIgKgorbmd4X3BzdHJkdXAobmd4X3Bvb2xfdCAqcG9vbCwgbmd4X3N0cl90ICpzcmMpCiB7CiAgICAgdV9jaGFyICAqZHN0OwogCkBAIC01Miw2ICs1NCw3IEBACiAgKiAgICAlWzBdW3dpZHRofG1dW3VdW3h8WF1pICAgIG5neF9pbnRfdC9uZ3hfdWludF90CiAgKiAgICAlWzBdW3dpZHRoXVt1XVt4fFhdRCAgICAgIGludDMyX3QvdWludDMyX3QKICAqICAgICVbMF1bd2lkdGhdW3VdW3h8WF1MICAgICAgaW50NjRfdC91aW50NjRfdAorICogICAgJVswXVt3aWR0aHxtXVt1XVt4fFhdQSAgICBuZ3hfYXRvbWljX2ludF90CiAgKiAgICAlUCAgICAgICAgICAgICAgICAgICAgICAgIG5neF9waWRfdAogICogICAgJXIgICAgICAgICAgICAgICAgICAgICAgICBybGltX3QKICAqICAgICVwICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcgpAQCAtNjMsNyArNjYsNiBAQAogICoKICAqICBUT0RPOgogICogICAgJU0gICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbXNlY190Ci0gKiAgICAlQSAgICAgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfdAogICoKICAqICByZXNlcnZlZDoKICAqICAgICV0ICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90CkBAIC03Miw3ICs3NCw4IEBACiAgKi8KIAogCi11X2NoYXIgKm5neF9zcHJpbnRmKHVfY2hhciAqYnVmLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3VfY2hhciAqCituZ3hfc3ByaW50Zih1X2NoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgICAgdV9jaGFyICAgKnA7CiAgICAgdmFfbGlzdCAgIGFyZ3M7CkBAIC04NSw3ICs4OCw4IEBACiB9CiAKIAotdV9jaGFyICpuZ3hfc25wcmludGYodV9jaGFyICpidWYsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQordV9jaGFyICoKK25neF9zbnByaW50Zih1X2NoYXIgKmJ1Ziwgc2l6ZV90IG1heCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgICAgdV9jaGFyICAgKnA7CiAgICAgdmFfbGlzdCAgIGFyZ3M7CkBAIC05OCwxMiArMTAyLDEzIEBACiB9CiAKIAotdV9jaGFyICpuZ3hfdnNucHJpbnRmKHVfY2hhciAqYnVmLCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3VfY2hhciAqCituZ3hfdnNucHJpbnRmKHVfY2hhciAqYnVmLCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKICAgICB1X2NoYXIgICAgICAgICAqcCwgemVybywgKmxhc3QsIHRlbXBbTkdYX0lOVDY0X0xFTiArIDFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlYWxseSB3ZSBuZWVkIHRlbXBbTkdYX0lOVDY0X0xFTl0gb25seSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJ1dCBpY2Mgc2hvd3MgdGhlIHdhcm5pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJ1dCBpY2MgaXNzdWVzIHRoZSB3YXJuaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpbnQgICAgICAgICAgICAgZDsKICAgICBzaXplX3QgICAgICAgICAgbGVuOwpAQCAtMTExLDcgKzExNiw3IEBACiAgICAgaW50NjRfdCAgICAgICAgIGk2NDsKICAgICB1aW50NjRfdCAgICAgICAgdWk2NDsKICAgICBuZ3hfc3RyX3QgICAgICAqczsKLSAgICBuZ3hfdWludF90ICAgICAgd2lkdGgsIHNpZ24sIGhleGFkZWNpbWFsOworICAgIG5neF91aW50X3QgICAgICB3aWR0aCwgc2lnbiwgaGV4YWRlY2ltYWwsIG1heF93aWR0aDsKICAgICBzdGF0aWMgdV9jaGFyICAgaGV4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAgICAgc3RhdGljIHVfY2hhciAgIEhFWFtdID0gIjAxMjM0NTY3ODlBQkNERUYiOwogCkBAIC0xMzcsNiArMTQyLDcgQEAKICAgICAgICAgICAgIHdpZHRoID0gMDsKICAgICAgICAgICAgIHNpZ24gPSAxOwogICAgICAgICAgICAgaGV4YWRlY2ltYWwgPSAwOworICAgICAgICAgICAgbWF4X3dpZHRoID0gMDsKIAogICAgICAgICAgICAgcCA9IHRlbXAgKyBOR1hfSU5UNjRfTEVOOwogCkBAIC0xNTQsNyArMTYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBjYXNlICdtJzoKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBOR1hfSU5UX1RfTEVOOworICAgICAgICAgICAgICAgICAgICBtYXhfd2lkdGggPSAxOwogICAgICAgICAgICAgICAgICAgICBmbXQrKzsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTIyOCw2ICsyMzQsMTEgQEAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICB1aTY0ID0gKHVpbnQ2NF90KSB2YV9hcmcoYXJncywgbmd4X3VpbnRfdCk7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1heF93aWR0aCkgeworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE5HWF9JTlRfVF9MRU47CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgJ2QnOgpAQCAtMjYyLDYgKzI3MywxOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgY2FzZSAnQSc6CisgICAgICAgICAgICAgICAgaWYgKHNpZ24pIHsKKyAgICAgICAgICAgICAgICAgICAgaTY0ID0gKGludDY0X3QpIHZhX2FyZyhhcmdzLCBuZ3hfYXRvbWljX2ludF90KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1aTY0ID0gKHVpbnQ2NF90KSB2YV9hcmcoYXJncywgbmd4X2F0b21pY19pbnRfdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1heF93aWR0aCkgeworICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE5HWF9BVE9NSUNfVF9MRU47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKICNpZiAhKE5HWF9XSU4zMikKICAgICAgICAgICAgIGNhc2UgJ3InOgogICAgICAgICAgICAgICAgIGk2NCA9IChpbnQ2NF90KSB2YV9hcmcoYXJncywgcmxpbV90KTsKQEAgLTMzNCwxMyArMzU4LDE1IEBACiAgICAgICAgICAgICAgICAgICogVG8gZGl2aWRlIDY0LWJpdCBudW1iZXIgYW5kIHRvIGZpbmQgdGhlIHJlbWFpbmRlcgogICAgICAgICAgICAgICAgICAqIG9uIHRoZSB4ODYgcGxhdGZvcm0gZ2NjIGFuZCBpY2MgY2FsbCB0aGUgbGliYyBmdW5jdGlvbnMKICAgICAgICAgICAgICAgICAgKiBbdV1kaXZkaTMoKSBhbmQgW3VdbW9kZGkzKCksIHRoZXkgY2FsbCBhbm90aGVyIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICogaW4gcmV0dXJuLiAgT24gRnJlZUJTRCBpdCBpcyB0aGUgcWRpdnJlbSgpIGZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAqIGluIGl0cyB0dXJuLiAgT24gRnJlZUJTRCBpdCBpcyB0aGUgcWRpdnJlbSgpIGZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAqIGl0cyBzb3VyY2UgY29kZSBpcyBhYm91dCAxNzAgbGluZXMgb2YgdGhlIGNvZGUuCiAgICAgICAgICAgICAgICAgICogVGhlIGdsaWJjIGNvdW50ZXJwYXJ0IGlzIGFib3V0IDE1MCBsaW5lcyBvZiB0aGUgY29kZS4KICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAqIEZvciAzMi1iaXQgbnVtYmVycyBnY2MgYW5kIGljYyB1c2UgdGhlIGlubGluZWQKLSAgICAgICAgICAgICAgICAgKiBtdWx0aXBsaWNhdGlvbiBhbmQgc2hpZnRzLiAgRm9yIGV4YW1wbGUsIHVuc2lnbmVkCi0gICAgICAgICAgICAgICAgICogImkzMiAvIDEwIiBpcyBjb21waWxlZCB0byAiKGkzMiAqIDB4Q0NDQ0NDQ0QpID4+IDM1Ii4KKyAgICAgICAgICAgICAgICAgKiBGb3IgMzItYml0IG51bWJlcnMgYW5kIHNvbWUgZGl2aXNvcnMgZ2NjIGFuZCBpY2MgdXNlCisgICAgICAgICAgICAgICAgICogdGhlIGlubGluZWQgbXVsdGlwbGljYXRpb24gYW5kIHNoaWZ0cy4gIEZvciBleGFtcGxlLAorICAgICAgICAgICAgICAgICAqIHVuc2lnbmVkICJpMzIgLyAxMCIgaXMgY29tcGlsZWQgdG8KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqICAgICAoaTMyICogMHhDQ0NDQ0NDRCkgPj4gMzUKICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgIHVpMzIgPSAodWludDMyX3QpIHVpNjQ7CkBAIC0zNzksNyArNDA1LDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X3JzdHJuY21wKHVfY2hhciAqczEsIHVfY2hhciAqczIsIHNpemVfdCBuKQorbmd4X2ludF90CituZ3hfcnN0cm5jbXAodV9jaGFyICpzMSwgdV9jaGFyICpzMiwgc2l6ZV90IG4pCiB7CiAgICAgaWYgKG4gPT0gMCkgewogICAgICAgICByZXR1cm4gMDsKQEAgLTQwMSw3ICs0MjgsOCBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfcnN0cm5jYXNlY21wKHVfY2hhciAqczEsIHVfY2hhciAqczIsIHNpemVfdCBuKQorbmd4X2ludF90CituZ3hfcnN0cm5jYXNlY21wKHVfY2hhciAqczEsIHVfY2hhciAqczIsIHNpemVfdCBuKQogewogICAgIHVfY2hhciAgYzEsIGMyOwogCkBAIC00MzUsNyArNDYzLDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2F0b2kodV9jaGFyICpsaW5lLCBzaXplX3QgbikKK25neF9pbnRfdAorbmd4X2F0b2kodV9jaGFyICpsaW5lLCBzaXplX3QgbikKIHsKICAgICBuZ3hfaW50X3QgIHZhbHVlOwogCkBAIC00NjAsNyArNDg5LDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2hleHRvaSh1X2NoYXIgKmxpbmUsIHNpemVfdCBuKQorbmd4X2ludF90CituZ3hfaGV4dG9pKHVfY2hhciAqbGluZSwgc2l6ZV90IG4pCiB7CiAgICAgdV9jaGFyICAgICBjaDsKICAgICBuZ3hfaW50X3QgIHZhbHVlOwpAQCAtNDk5LDcgKzUyOSw4IEBACiB9CiAKIAotdm9pZCBuZ3hfbWQ1X3RleHQodV9jaGFyICp0ZXh0LCB1X2NoYXIgKm1kNSkKK3ZvaWQKK25neF9tZDVfdGV4dCh1X2NoYXIgKnRleHQsIHVfY2hhciAqbWQ1KQogewogICAgIGludCAgICAgICAgICAgIGk7CiAgICAgc3RhdGljIHVfY2hhciAgaGV4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CkBAIC01MTMsNyArNTQ0LDggQEAKIH0KIAogCi12b2lkIG5neF9lbmNvZGVfYmFzZTY0KG5neF9zdHJfdCAqZHN0LCBuZ3hfc3RyX3QgKnNyYykKK3ZvaWQKK25neF9lbmNvZGVfYmFzZTY0KG5neF9zdHJfdCAqZHN0LCBuZ3hfc3RyX3QgKnNyYykKIHsKICAgICB1X2NoYXIgICAgICAgICAqZCwgKnM7CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKQEAgLTU1Myw3ICs1ODUsOCBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfZGVjb2RlX2Jhc2U2NChuZ3hfc3RyX3QgKmRzdCwgbmd4X3N0cl90ICpzcmMpCituZ3hfaW50X3QKK25neF9kZWNvZGVfYmFzZTY0KG5neF9zdHJfdCAqZHN0LCBuZ3hfc3RyX3QgKnNyYykKIHsKICAgICBzaXplX3QgICAgICAgICAgbGVuOwogICAgIHVfY2hhciAgICAgICAgICpkLCAqczsKQEAgLTYxNiwxOSArNjQ5LDIwIEBACiB9CiAKIAotdWludHB0cl90IG5neF9lc2NhcGVfdXJpKHVfY2hhciAqZHN0LCB1X2NoYXIgKnNyYywgc2l6ZV90IHNpemUsIG5neF91aW50X3QgdHlwZSkKK3VpbnRwdHJfdAorbmd4X2VzY2FwZV91cmkodV9jaGFyICpkc3QsIHVfY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSwgbmd4X3VpbnRfdCB0eXBlKQogewogICAgIG5neF91aW50X3QgICAgICAgIGksIG47CiAgICAgdWludDMyX3QgICAgICAgICAqZXNjYXBlOwogICAgIHN0YXRpYyB1X2NoYXIgICAgIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwogCi0gICAgICAgICAgICAgICAgICAgICAgLyogIiAiLCAiJSIsICI/IiwgJTAwLSUxRiwgJTdGLSVGRiAqLworICAgICAgICAgICAgICAgICAgICAgIC8qICIgIiwgIiMiLCAiJSIsICI/IiwgJTAwLSUxRiwgJTdGLSVGRiAqLwogCiAgICAgc3RhdGljIHVpbnQzMl90ICAgdXJpW10gPQogICAgICAgICB7IDB4ZmZmZmZmZmYsIC8qIDExMTEgMTExMSAxMTExIDExMTEgIDExMTEgMTExMSAxMTExIDExMTEgKi8KIAogICAgICAgICAgICAgICAgICAgICAgIC8qID8+PTwgOzo5OCA3NjU0IDMyMTAgIC8uLSwgKyopKCAnJiUkICMiISAgKi8KLSAgICAgICAgICAweDgwMDAwMDIxLCAvKiAxMDAwIDAwMDAgMDAwMCAwMDAwICAwMDAwIDAwMDAgMDAxMCAwMDAxICovCisgICAgICAgICAgMHg4MDAwMDAyOSwgLyogMTAwMCAwMDAwIDAwMDAgMDAwMCAgMDAwMCAwMDAwIDAwMTAgMTAwMSAqLwogCiAgICAgICAgICAgICAgICAgICAgICAgLyogX15dXCBbWllYIFdWVVQgU1JRUCAgT05NTCBLSklIIEdGRUQgQ0JBQCAqLwogICAgICAgICAgIDB4MDAwMDAwMDAsIC8qIDAwMDAgMDAwMCAwMDAwIDAwMDAgIDAwMDAgMDAwMCAwMDAwIDAwMDAgKi8KQEAgLTY0MSwxMyArNjc1LDEzIEBACiAgICAgICAgICAgMHhmZmZmZmZmZiwgLyogMTExMSAxMTExIDExMTEgMTExMSAgMTExMSAxMTExIDExMTEgMTExMSAqLwogICAgICAgICAgIDB4ZmZmZmZmZmYgIC8qIDExMTEgMTExMSAxMTExIDExMTEgIDExMTEgMTExMSAxMTExIDExMTEgKi8gfTsKIAotICAgICAgICAgICAgICAgICAgICAgIC8qICIgIiwgIiUiLCAiKyIsICI/IiwgJTAwLSUxRiwgJTdGLSVGRiAqLworICAgICAgICAgICAgICAgICAgICAgIC8qICIgIiwgIiMiLCAiJSIsICIrIiwgIj8iLCAlMDAtJTFGLCAlN0YtJUZGICovCiAKICAgICBzdGF0aWMgdWludDMyX3QgICBhcmdzW10gPQogICAgICAgICB7IDB4ZmZmZmZmZmYsIC8qIDExMTEgMTExMSAxMTExIDExMTEgIDExMTEgMTExMSAxMTExIDExMTEgKi8KIAogICAgICAgICAgICAgICAgICAgICAgIC8qID8+PTwgOzo5OCA3NjU0IDMyMTAgIC8uLSwgKyopKCAnJiUkICMiISAgKi8KLSAgICAgICAgICAweDgwMDAwODIxLCAvKiAxMDAwIDAwMDAgMDAwMCAwMDAwICAwMDAwIDEwMDAgMDAxMCAwMDAxICovCisgICAgICAgICAgMHg4MDAwMDgyOSwgLyogMTAwMCAwMDAwIDAwMDAgMDAwMCAgMDAwMCAxMDAwIDAwMTAgMTAwMSAqLwogCiAgICAgICAgICAgICAgICAgICAgICAgLyogX15dXCBbWllYIFdWVVQgU1JRUCAgT05NTCBLSklIIEdGRUQgQ0JBQCAqLwogICAgICAgICAgIDB4MDAwMDAwMDAsIC8qIDAwMDAgMDAwMCAwMDAwIDAwMDAgIDAwMDAgMDAwMCAwMDAwIDAwMDAgKi8KQEAgLTY2Niw3ICs3MDAsNyBAQAogICAgICAgICB7IDB4ZmZmZmZmZmYsIC8qIDExMTEgMTExMSAxMTExIDExMTEgIDExMTEgMTExMSAxMTExIDExMTEgKi8KIAogICAgICAgICAgICAgICAgICAgICAgIC8qID8+PTwgOzo5OCA3NjU0IDMyMTAgIC8uLSwgKyopKCAnJiUkICMiISAgKi8KLSAgICAgICAgICAweDgwMDAwMDIxLCAvKiAwMDAwIDAwMDAgMDAwMCAwMDAwICAwMDAwIDAwMDAgMTAxMCAwMTAxICovCisgICAgICAgICAgMHg4MDAwMDBhZCwgLyogMDAwMCAwMDAwIDAwMDAgMDAwMCAgMDAwMCAwMDAwIDEwMTAgMTEwMSAqLwogCiAgICAgICAgICAgICAgICAgICAgICAgLyogX15dXCBbWllYIFdWVVQgU1JRUCAgT05NTCBLSklIIEdGRUQgQ0JBQCAqLwogICAgICAgICAgIDB4MDAwMDAwMDAsIC8qIDAwMDAgMDAwMCAwMDAwIDAwMDAgIDAwMDAgMDAwMCAwMDAwIDAwMDAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuaCBiL3NyYy9jb3JlL25neF9zdHJpbmcuaAppbmRleCA3NjY4ODA3Li41MmJhYzZhIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5oCkBAIC05OCw3ICs5OCw3IEBACiAjZGVmaW5lIE5HWF9FU0NBUEVfSFRNTCAgMgogCiB1aW50cHRyX3Qgbmd4X2VzY2FwZV91cmkodV9jaGFyICpkc3QsIHVfY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfdWludF90IHR5cGUpOworICAgIG5neF91aW50X3QgdHlwZSk7CiAKIAogI2RlZmluZSAgbmd4X3Fzb3J0ICAgICAgICAgICAgICAgIHFzb3J0CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMKaW5kZXggZDAxN2YwNS4uZjFkZjU0OSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYwpAQCAtNzAxLDE4ICs3MDEsMTggQEAKICAgICAgICAgICAgICAgICBuYW1lWzBdID0gQ1RMX0tFUk47CiAgICAgICAgICAgICAgICAgbmFtZVsxXSA9IEtFUk5fUlRTSUdNQVg7CiAgICAgICAgICAgICAgICAgbGVuID0gc2l6ZW9mKHJ0c2lnX21heCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN5c2N0bChuYW1lLCBzaXplb2YobmFtZSksICZydHNpZ19tYXgsICZsZW4sIE5VTEwsIDApID09IC0xKQotICAgICAgICAgICAgICAgIHsKKworICAgICAgICAgICAgICAgIGlmIChzeXNjdGwobmFtZSwgMiwgJnJ0c2lnX21heCwgJmxlbiwgTlVMTCwgMCkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBlcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzY3RsKEtFUk5fUlRTSUdNQVgpIGZhaWxlZCIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG5hbWVbMF0gPSBDVExfS0VSTjsKKyAgICAgICAgICAgICAgICAvKiBuYW1lWzBdID0gQ1RMX0tFUk47ICovCiAgICAgICAgICAgICAgICAgbmFtZVsxXSA9IEtFUk5fUlRTSUdOUjsKICAgICAgICAgICAgICAgICBsZW4gPSBzaXplb2YocnRzaWdfbnIpOwotICAgICAgICAgICAgICAgIGlmIChzeXNjdGwobmFtZSwgc2l6ZW9mKG5hbWUpLCAmcnRzaWdfbnIsICZsZW4sIE5VTEwsIDApID09IC0xKQotICAgICAgICAgICAgICAgIHsKKworICAgICAgICAgICAgICAgIGlmIChzeXNjdGwobmFtZSwgMiwgJnJ0c2lnX25yLCAmbGVuLCBOVUxMLCAwKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIGVycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXNjdGwoS0VSTl9SVFNJR05SKSBmYWlsZWQiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwppbmRleCBkNzllNWZmLi43ODBkYmViIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCkBAIC0zNCwyMSArMzQsMjEgQEAKIHN0YXRpYyBjaGFyICpuZ3hfYWNjZXB0X211dGV4X2NoZWNrKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKTsKIAogCi1zdGF0aWMgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X21heF9tb2R1bGU7CitzdGF0aWMgbmd4X3VpbnRfdCAgICBuZ3hfZXZlbnRfbWF4X21vZHVsZTsKIAotbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9mbGFnczsKLW5neF9ldmVudF9hY3Rpb25zX3QgICAgICAgICAgICAgICBuZ3hfZXZlbnRfYWN0aW9uczsKK25neF91aW50X3QgICAgICAgICAgIG5neF9ldmVudF9mbGFnczsKK25neF9ldmVudF9hY3Rpb25zX3QgIG5neF9ldmVudF9hY3Rpb25zOwogCiAKLW5neF9hdG9taWNfdCAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uX2NvdW50ZXI7Ci1uZ3hfYXRvbWljX3QgICAgICAgICAgICAgICAgICAgICAqbmd4X2Nvbm5lY3Rpb25fY291bnRlciA9ICZjb25uZWN0aW9uX2NvdW50ZXI7CituZ3hfYXRvbWljX3QgICAgICAgICBjb25uZWN0aW9uX2NvdW50ZXI7CituZ3hfYXRvbWljX3QgICAgICAgICAqbmd4X2Nvbm5lY3Rpb25fY291bnRlciA9ICZjb25uZWN0aW9uX2NvdW50ZXI7CiAKIAotbmd4X2F0b21pY190ICAgICAgICAgICAgICAgICAgICAgKm5neF9hY2NlcHRfbXV0ZXhfcHRyOwotbmd4X2F0b21pY190ICAgICAgICAgICAgICAgICAgICAgKm5neF9hY2NlcHRfbXV0ZXg7Ci1uZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF9oZWxkOwotbmd4X21zZWNfdCAgICAgICAgICAgICAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfZGVsYXk7Ci1uZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2FjY2VwdF9kaXNhYmxlZDsKK25neF9hdG9taWNfdCAgICAgICAgICpuZ3hfYWNjZXB0X211dGV4X3B0cjsKK25neF9hdG9taWNfdCAgICAgICAgICpuZ3hfYWNjZXB0X211dGV4Oworbmd4X3VpbnRfdCAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF9oZWxkOworbmd4X21zZWNfdCAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF9kZWxheTsKK25neF9pbnRfdCAgICAgICAgICAgIG5neF9hY2NlcHRfZGlzYWJsZWQ7CiAKIAogI2lmIChOR1hfU1RBVF9TVFVCKQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKaW5kZXggYzdmNzU5NS4uZmIyZDk4NCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCkBAIC03LDE0ICs3LDE0IEBACiAjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+Ci0jaW5jbHVkZSA8bmdpbnguaD4KIAogCiBzdGF0aWMgdm9pZCBuZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KG5neF9zb2NrZXRfdCBzLCBuZ3hfbG9nX3QgKmxvZyk7CiBzdGF0aWMgdV9jaGFyICpuZ3hfYWNjZXB0X2xvZ19lcnJvcihuZ3hfbG9nX3QgKmxvZywgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pOwogCiAKLXZvaWQgbmd4X2V2ZW50X2FjY2VwdChuZ3hfZXZlbnRfdCAqZXYpCit2b2lkCituZ3hfZXZlbnRfYWNjZXB0KG5neF9ldmVudF90ICpldikKIHsKICAgICBuZ3hfdWludF90ICAgICAgICAgaW5zdGFuY2UsIGFjY2VwdGVkOwogICAgIHNvY2tsZW5fdCAgICAgICAgICBsZW47CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogQ3JlYXRlIHRoZSBwb29sIGJlZm9yZSBhY2NlcHQoKSB0byBhdm9pZCB0aGUgY29weWluZyBvZgogICAgICAgICAgICAgICogdGhlIHNvY2thZGRyLiAgQWx0aG91Z2ggYWNjZXB0KCkgY2FuIGZhaWwgaXQgaXMgdW5jb21tb24KLSAgICAgICAgICAgICAqIGNhc2UgYW5kIGJlc2lkZXMgdGhlIHBvb2wgY2FuIGJlIGdvdCBmcm9tIHRoZSBmcmVlIHBvb2wgbGlzdAorICAgICAgICAgICAgICogY2FzZSBhbmQgYmVzaWRlcyB0aGUgcG9vbCBjYW4gYmUgZ290IGZyb20gdGhlIGZyZWUgcG9vbCBsaXN0LgogICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIGlmICghKHBvb2wgPSBuZ3hfY3JlYXRlX3Bvb2wobHMtPmxpc3RlbmluZy0+cG9vbF9zaXplLCBldi0+bG9nKSkpIHsKQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgICB9CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICAgICAgKCpuZ3hfc3RhdF9hY2NlcHRlZCkrKzsKKyAgICAgICAgbmd4X2F0b21pY19pbmMobmd4X3N0YXRfYWNjZXB0ZWQpOwogI2VuZGlmCiAKICAgICAgICAgbmd4X2FjY2VwdF9kaXNhYmxlZCA9IChuZ3hfdWludF90KSBzICsgTkdYX0FDQ0VQVF9USFJFU0hPTEQKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICB9CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICAgICAgKCpuZ3hfc3RhdF9hY3RpdmUpKys7CisgICAgICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X2FjdGl2ZSk7CiAjZW5kaWYKIAogICAgICAgICAvKiBzZXQgYSBibG9ja2luZyBtb2RlIGZvciBhaW8gYW5kIG5vbi1ibG9ja2luZyBtb2RlIGZvciBvdGhlcnMgKi8KQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgICB3ZXYtPnJlYWR5ID0gMTsKIAogICAgICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgKE5HWF9VU0VfQUlPX0VWRU5UfE5HWF9VU0VfUlRTSUdfRVZFTlQpKSB7Ci0gICAgICAgICAgICAvKiBlcG9sbCwgcnRzaWcsIGFpbywgaW9jcCAqLworICAgICAgICAgICAgLyogcnRzaWcsIGFpbywgaW9jcCAqLwogICAgICAgICAgICAgcmV2LT5yZWFkeSA9IDE7CiAgICAgICAgIH0KIApAQCAtMzM2LDcgKzMzNiw4IEBACiB9CiAKIAotbmd4X2ludF90IG5neF90cnlsb2NrX2FjY2VwdF9tdXRleChuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfaW50X3QKK25neF90cnlsb2NrX2FjY2VwdF9tdXRleChuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgaWYgKCpuZ3hfYWNjZXB0X211dGV4ID09IDAKICAgICAgICAgJiYgbmd4X2F0b21pY19jbXBfc2V0KG5neF9hY2NlcHRfbXV0ZXgsIDAsIG5neF9waWQpKQpAQCAtMzY4LDcgKzM2OSw4IEBACiB9CiAKIAotbmd4X2ludF90IG5neF9lbmFibGVfYWNjZXB0X2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfaW50X3QKK25neF9lbmFibGVfYWNjZXB0X2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgaTsKICAgICBuZ3hfbGlzdGVuaW5nX3QgICpzOwpAQCAtNDAwLDcgKzQwMiw4IEBACiB9CiAKIAotbmd4X2ludF90IG5neF9kaXNhYmxlX2FjY2VwdF9ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2ludF90CituZ3hfZGlzYWJsZV9hY2NlcHRfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBuZ3hfdWludF90ICAgICAgICBpOwogICAgIG5neF9saXN0ZW5pbmdfdCAgKnM7CkBAIC00NDIsNyArNDQ1LDggQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBuZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KG5neF9zb2NrZXRfdCBzLCBuZ3hfbG9nX3QgKmxvZykKK3N0YXRpYyB2b2lkCituZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KG5neF9zb2NrZXRfdCBzLCBuZ3hfbG9nX3QgKmxvZykKIHsKICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChzKSA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X3NvY2tldF9lcnJubywKQEAgLTQ1MSw3ICs0NTUsOCBAQAogfQogCiAKLXN0YXRpYyB1X2NoYXIgKm5neF9hY2NlcHRfbG9nX2Vycm9yKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3N0YXRpYyB1X2NoYXIgKgorbmd4X2FjY2VwdF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIgd2hpbGUgYWNjZXB0KCkgb24gJVYiLCBsb2ctPmRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5jIGIvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5jCmluZGV4IGMxY2ExMjQuLjRiOTg2NTYgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMKQEAgLTE4LDcgKzE4LDggQEAKIG5neF9yYnRyZWVfdCAgICAgICAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X3RpbWVyX3NlbnRpbmVsOwogCiAKLW5neF9pbnRfdCBuZ3hfZXZlbnRfdGltZXJfaW5pdChuZ3hfbG9nX3QgKmxvZykKK25neF9pbnRfdAorbmd4X2V2ZW50X3RpbWVyX2luaXQobmd4X2xvZ190ICpsb2cpCiB7CiAgICAgaWYgKG5neF9ldmVudF90aW1lcl9yYnRyZWUpIHsKICNpZiAoTkdYX1RIUkVBRFMpCkBAIC0zOSw3ICs0MCw4IEBACiB9CiAKIAotbmd4X21zZWNfdCBuZ3hfZXZlbnRfZmluZF90aW1lcih2b2lkKQorbmd4X21zZWNfdAorbmd4X2V2ZW50X2ZpbmRfdGltZXIodm9pZCkKIHsKICAgICBuZ3hfbXNlY190ICAgICB0aW1lcjsKICAgICBuZ3hfcmJ0cmVlX3QgICpub2RlOwpAQCAtNjgsNyArNzAsOCBAQAogfQogCiAKLXZvaWQgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMobmd4X21zZWNfdCB0aW1lcikKK3ZvaWQKK25neF9ldmVudF9leHBpcmVfdGltZXJzKG5neF9tc2VjX3QgdGltZXIpCiB7CiAgICAgbmd4X2V2ZW50X3QgICAqZXY7CiAgICAgbmd4X3JidHJlZV90ICAqbm9kZTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuaAppbmRleCAwOTBkNDA0Li5lZGJmY2Y2IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmgKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5oCkBAIC0xNiw4ICsxNiw5IEBACiAjZGVmaW5lIE5HWF9USU1FUl9JTkZJTklURSAgLTEKICNkZWZpbmUgTkdYX1RJTUVSX0VSUk9SICAgICAtMgogCisKIC8qCi0gKiAzMiBiaXQgdGltZXIga2V5IHZhbHVlIHJlc29sdXRpb24KKyAqIHRoZSAzMi1iaXQgdGltZXIga2V5IHZhbHVlIHJlc29sdXRpb24KICAqCiAgKiAxIG1zZWMgLSAyNCBkYXlzCiAgKiAxMCBtc2VjIC0gOCBtb250aHMKQEAgLTI3LDYgKzI4LDggQEAKIAogI2RlZmluZSBOR1hfVElNRVJfUkVTT0xVVElPTiAgMQogCisjZGVmaW5lIE5HWF9USU1FUl9MQVpZX0RFTEFZICAzMDAKKwogCiBuZ3hfaW50X3Qgbmd4X2V2ZW50X3RpbWVyX2luaXQobmd4X2xvZ190ICpsb2cpOwogbmd4X21zZWNfdCBuZ3hfZXZlbnRfZmluZF90aW1lcih2b2lkKTsKQEAgLTQyLDcgKzQ1LDggQEAKIGV4dGVybiBuZ3hfcmJ0cmVlX3QgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF90aW1lcl9zZW50aW5lbDsKIAogCi1zdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9ldmVudF9kZWxfdGltZXIobmd4X2V2ZW50X3QgKmV2KQorc3RhdGljIG5neF9pbmxpbmUgdm9pZAorbmd4X2V2ZW50X2RlbF90aW1lcihuZ3hfZXZlbnRfdCAqZXYpCiB7CiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiZXZlbnQgdGltZXIgZGVsOiAlZDogJWQiLApAQCAtNjgsNyArNzIsOCBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW5saW5lIHZvaWQgbmd4X2V2ZW50X2FkZF90aW1lcihuZ3hfZXZlbnRfdCAqZXYsIG5neF9tc2VjX3QgdGltZXIpCitzdGF0aWMgbmd4X2lubGluZSB2b2lkCituZ3hfZXZlbnRfYWRkX3RpbWVyKG5neF9ldmVudF90ICpldiwgbmd4X21zZWNfdCB0aW1lcikKIHsKICAgICBuZ3hfaW50X3QgIGtleTsKIApAQCAtODMsMTEgKzg4LDEzIEBACiAKICAgICAgICAgLyoKICAgICAgICAgICogVXNlIHRoZSBwcmV2aW91cyB0aW1lciB2YWx1ZSBpZiBhIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGlzIGxlc3MKLSAgICAgICAgICogdGhlbiAxMDAgbWlsbGlzZWNvbmRzLiAgSXQgYWxsb3dzIHRvIG1pbmltaXplIHRoZSByYnRyZWUgb3BlcmF0aW9ucwotICAgICAgICAgKiBmb3IgdGhlIGZhc3QgY29ubmVjdGlvbnMuCisgICAgICAgICAqIHRoZW4gTkdYX1RJTUVSX0xBWllfREVMQVkgbWlsbGlzZWNvbmRzLiAgSXQgYWxsb3dzIHRvIG1pbmltaXplCisgICAgICAgICAqIHRoZSByYnRyZWUgb3BlcmF0aW9ucyBmb3IgdGhlIGZhc3QgY29ubmVjdGlvbnMuCiAgICAgICAgICAqLwogCi0gICAgICAgIGlmIChhYnMoa2V5IC0gZXYtPnJidHJlZV9rZXkpIDwgMTAwIC8gTkdYX1RJTUVSX1JFU09MVVRJT04pIHsKKyAgICAgICAgaWYgKGFicyhrZXkgLSBldi0+cmJ0cmVlX2tleSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgTkdYX1RJTUVSX0xBWllfREVMQVkgLyBOR1hfVElNRVJfUkVTT0xVVElPTikKKyAgICAgICAgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudCB0aW1lcjogJWQsIG9sZDogJWksIG5ldzogJWkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9pZGVudChldi0+ZGF0YSksIGV2LT5yYnRyZWVfa2V5LCBrZXkpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyLmMKaW5kZXggOGY5ODcxOS4uMWViNGNjNiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlci5jCkBAIC0xMDUsMTQgKzEwNSwxNSBAQAogc3RhdGljIG5neF9odHRwX291dHB1dF9ib2R5X2ZpbHRlcl9wdCAgICBuZ3hfaHR0cF9uZXh0X2JvZHlfZmlsdGVyOwogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfcmFuZ2VfaGVhZGVyX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9yYW5nZV9oZWFkZXJfZmlsdGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKICAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICpwOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKICAgICBvZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgIHJjOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCwgaTsKKyAgICBuZ3hfYXRvbWljX2ludF90ICAgICAgICAgICAgICBib3VuZGFyeTsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICpjb250ZW50X3JhbmdlOwogICAgIG5neF9odHRwX3JhbmdlX3QgICAgICAgICAgICAgKnJhbmdlOwogICAgIG5neF9odHRwX3JhbmdlX2ZpbHRlcl9jdHhfdCAgKmN0eDsKQEAgLTMyOCw3ICszMjksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3JhbmdlX2ZpbHRlcl9jdHhfdCksIE5HWF9FUlJPUik7CiAKIAotICAgIGxlbiA9IHNpemVvZihDUkxGICItLTAxMjM0NTY3ODkiIENSTEYgIkNvbnRlbnQtVHlwZTogIikgLSAxCisgICAgbGVuID0gc2l6ZW9mKENSTEYgIi0tIikgLSAxICsgTkdYX0FUT01JQ19UX0xFTgorICAgICAgICAgICsgc2l6ZW9mKENSTEYgIkNvbnRlbnQtVHlwZTogIikgLSAxCiAgICAgICAgICAgKyByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmxlbgogICAgICAgICAgICsgc2l6ZW9mKENSTEYgIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzICIpIC0gMTsKIApAQCAtMzQwLDcgKzM0Miw3IEBACiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgYm91bmRhcnkgPSAodWludDMyX3QpIG5neF9uZXh0X3RlbXBfbnVtYmVyKDApOworICAgIGJvdW5kYXJ5ID0gbmd4X25leHRfdGVtcF9udW1iZXIoMCk7CiAKICAgICAvKgogICAgICAqIFRoZSBib3VuZGFyeSBoZWFkZXIgb2YgdGhlIHJhbmdlOgpAQCAtMzUyLDcgKzM1NCw3IEBACiAKICAgICBpZiAoci0+aGVhZGVyc19vdXQuY2hhcnNldC5sZW4pIHsKICAgICAgICAgY3R4LT5ib3VuZGFyeV9oZWFkZXIubGVuID0gbmd4X3NwcmludGYoY3R4LT5ib3VuZGFyeV9oZWFkZXIuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkxGICItLSUwMTB1ZCIgQ1JMRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSTEYgIi0tJTBtdUEiIENSTEYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiAlVjsgY2hhcnNldD0lViIgQ1JMRgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVJhbmdlOiBieXRlcyAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LApAQCAtMzY0LDcgKzM2Niw3IEBACiAKICAgICB9IGVsc2UgewogICAgICAgICBjdHgtPmJvdW5kYXJ5X2hlYWRlci5sZW4gPSBuZ3hfc3ByaW50ZihjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSTEYgIi0tJTAxMHVkIiBDUkxGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JMRiAiLS0lMG11QSIgQ1JMRgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6ICVWIiBDUkxGCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksCkBAIC0zNzMsOCArMzc1LDkgQEAKICAgICB9CiAKICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGEgPQotICAgICAgICAgICBuZ3hfcGFsbG9jKHItPnBvb2wsIHNpemVvZigiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYnl0ZXJhbmdlczsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYm91bmRhcnk9MDEyMzQ1Njc4OSIpIC0gMSk7CisgICAgICAgICBuZ3hfcGFsbG9jKHItPnBvb2wsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZigiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYnl0ZXJhbmdlczsgYm91bmRhcnk9IikgLSAxCisgICAgICAgICAgICAgICAgICAgICsgTkdYX0FUT01JQ19UX0xFTik7CiAKICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5kYXRhID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKQEAgLTM4NCwxMiArMzg3LDE0IEBACiAKICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmxlbiA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc3ByaW50ZihyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwYXJ0L2J5dGVyYW5nZXM7IGJvdW5kYXJ5PSUwMTB1ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwYXJ0L2J5dGVyYW5nZXM7IGJvdW5kYXJ5PSUwbXVBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLSByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGE7CiAKKwogICAgIC8qIHRoZSBzaXplIG9mIHRoZSBsYXN0IGJvdW5kYXJ5IENSTEYgIi0tMDEyMzQ1Njc4OS0tIiBDUkxGICovCi0gICAgbGVuID0gc2l6ZW9mKENSTEYgIi0tMDEyMzQ1Njc4OS0tIiBDUkxGKSAtIDE7CisKKyAgICBsZW4gPSBzaXplb2YoQ1JMRiAiLS0iKSAtIDEgKyBOR1hfQVRPTUlDX1RfTEVOICsgc2l6ZW9mKCItLSIgQ1JMRikgLSAxOwogCiAgICAgcmFuZ2UgPSByLT5oZWFkZXJzX291dC5yYW5nZXMuZWx0czsKICAgICBmb3IgKGkgPSAwOyBpIDwgci0+aGVhZGVyc19vdXQucmFuZ2VzLm5lbHRzOyBpKyspIHsKQEAgLTQyMCw4ICs0MjUsOCBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfcmFuZ2VfYm9keV9maWx0ZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2hhaW5fdCAqaW4pCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9yYW5nZV9ib2R5X2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9jaGFpbl90ICppbikKIHsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBpOwogICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgICAgKmI7CkBAIC01MjUsNyArNTMwLDggQEAKICAgICAgICAgYi0+dGVtcG9yYXJ5ID0gMTsKICAgICAgICAgYi0+bGFzdF9idWYgPSAxOwogCi0gICAgICAgIGItPnBvcyA9IG5neF9wYWxsb2Moci0+cG9vbCwgc2l6ZW9mKENSTEYgIi0tMDEyMzQ1Njc4OS0tIiBDUkxGKSAtIDEpOworICAgICAgICBiLT5wb3MgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHNpemVvZihDUkxGICItLSIpIC0gMSArIE5HWF9BVE9NSUNfVF9MRU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNpemVvZigiLS0iIENSTEYpIC0gMSk7CiAgICAgICAgIGlmIChiLT5wb3MgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQpAQCAtNTUyLDcgKzU1OCw4IEBACiB9CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9yYW5nZV9oZWFkZXJfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfcmFuZ2VfaGVhZGVyX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlcjsKICAgICBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlciA9IG5neF9odHRwX3JhbmdlX2hlYWRlcl9maWx0ZXI7CkBAIC01NjEsNyArNTY4LDggQEAKIH0KIAogCi1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3JhbmdlX2JvZHlfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfcmFuZ2VfYm9keV9maWx0ZXJfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgbmd4X2h0dHBfbmV4dF9ib2R5X2ZpbHRlciA9IG5neF9odHRwX3RvcF9ib2R5X2ZpbHRlcjsKICAgICBuZ3hfaHR0cF90b3BfYm9keV9maWx0ZXIgPSBuZ3hfaHR0cF9yYW5nZV9ib2R5X2ZpbHRlcjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3R1Yl9zdGF0dXNfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0dWJfc3RhdHVzX21vZHVsZS5jCmluZGV4IDNhMzVmZTkuLjgzNGJlYWEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3R1Yl9zdGF0dXNfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdHViX3N0YXR1c19tb2R1bGUuYwpAQCAtMTAyLDE1ICsxMDIsMTUgQEAKICAgICByZCA9ICpuZ3hfc3RhdF9yZWFkaW5nOwogICAgIHdyID0gKm5neF9zdGF0X3dyaXRpbmc7CiAKLSAgICBiLT5sYXN0ID0gbmd4X3NwcmludGYoYi0+bGFzdCwgIkFjdGl2ZSBjb25uZWN0aW9uczogJWQgXG4iLCBhYyk7CisgICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGItPmxhc3QsICJBY3RpdmUgY29ubmVjdGlvbnM6ICVEIFxuIiwgYWMpOwogCiAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgInNlcnZlciBhY2NlcHRzIGhhbmRsZWQgcmVxdWVzdHNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJzZXJ2ZXIgYWNjZXB0cyBoYW5kbGVkIHJlcXVlc3RzXG4iKSAtIDEpOwogCi0gICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGItPmxhc3QsICIgJWQgJWQgJWQgXG4iLCBhcCwgaG4sIHJxKTsKKyAgICBiLT5sYXN0ID0gbmd4X3NwcmludGYoYi0+bGFzdCwgIiAlRCAlRCAlRCBcbiIsIGFwLCBobiwgcnEpOwogCi0gICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGItPmxhc3QsICJSZWFkaW5nOiAlZCBXcml0aW5nOiAlZCBXYWl0aW5nOiAlZCBcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZCwgd3IsIGFjIC0gKHJkICsgd3IpKTsKKyAgICBiLT5sYXN0ID0gbmd4X3NwcmludGYoYi0+bGFzdCwgIlJlYWRpbmc6ICVEIFdyaXRpbmc6ICVEIFdhaXRpbmc6ICVkIFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmQsIHdyLCBhYyAtIChyZCArIHdyKSk7CiAKICAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBOR1hfSFRUUF9PSzsKICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID0gYi0+bGFzdCAtIGItPnBvczsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYwppbmRleCAzNjEwYjFlLi5lYTA5MDdmIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlci5jCkBAIC0xMTcsNyArMTE3LDggQEAKIH07CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9oZWFkZXJfZmlsdGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX2hlYWRlcl9maWx0ZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgKnA7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgbGVuOwpAQCAtMTQ2LDggKzE0Nyw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiAyIGlzIGZvciB0cmFpbGluZyAiXHJcbiIgYW5kIDIgaXMgZm9yICJcclxuIiBpbiB0aGUgZW5kIG9mIGhlYWRlciAqLwotICAgIGxlbiA9IHNpemVvZigiSFRUUC8xLnggIikgLSAxICsgMiArIDI7CisgICAgbGVuID0gc2l6ZW9mKCJIVFRQLzEueCAiKSAtIDEgKyBzaXplb2YoQ1JMRikgLSAxCisgICAgICAgICAgLyogdGhlIGVuZCBvZiB0aGUgaGVhZGVyICovCisgICAgICAgICAgKyBzaXplb2YoQ1JMRikgLSAxOwogCiAgICAgLyogc3RhdHVzIGxpbmUgKi8KIApAQCAtMjc5LDggKzI4MSw4IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8qIDIgaXMgZm9yICI6ICIgYW5kIDIgaXMgZm9yICJcclxuIiAqLwotICAgICAgICBsZW4gKz0gaGVhZGVyW2ldLmtleS5sZW4gKyAyICsgaGVhZGVyW2ldLnZhbHVlLmxlbiArIDI7CisgICAgICAgIGxlbiArPSBoZWFkZXJbaV0ua2V5LmxlbiArIHNpemVvZigiOiAiKSAtIDEgKyBoZWFkZXJbaV0udmFsdWUubGVuCisgICAgICAgICAgICAgICArIHNpemVvZihDUkxGKSAtIDE7CiAgICAgfQogCiAgICAgaWYgKCEoYiA9IG5neF9jcmVhdGVfdGVtcF9idWYoci0+cG9vbCwgbGVuKSkpIHsKQEAgLTI5OSw3ICszMDEsNyBAQAogICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCBodHRwX2NvZGVzW3N0YXR1c10uZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9jb2Rlc1tzdGF0dXNdLmxlbik7CiAgICAgfQotICAgICooYi0+bGFzdCsrKSA9IENSOyAqKGItPmxhc3QrKykgPSBMRjsKKyAgICAqYi0+bGFzdCsrID0gQ1I7ICpiLT5sYXN0KysgPSBMRjsKIAogICAgIGlmICghKHItPmhlYWRlcnNfb3V0LnNlcnZlciAmJiByLT5oZWFkZXJzX291dC5zZXJ2ZXItPmtleS5sZW4pKSB7CiAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHNlcnZlcl9zdHJpbmcsIHNpemVvZihzZXJ2ZXJfc3RyaW5nKSAtIDEpOwpAQCAtMzEwLDcgKzMxMiw3IEBACiAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIG5neF9jYWNoZWRfaHR0cF90aW1lLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfaHR0cF90aW1lLmxlbik7CiAKLSAgICAgICAgKihiLT5sYXN0KyspID0gQ1I7ICooYi0+bGFzdCsrKSA9IExGOworICAgICAgICAqYi0+bGFzdCsrID0gQ1I7ICpiLT5sYXN0KysgPSBMRjsKICAgICB9CiAKICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGggPT0gTlVMTCkgewpAQCAtMzM3LDcgKzMzOSw3IEBACiAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGEgPSBwOwogICAgICAgICB9CiAKLSAgICAgICAgKihiLT5sYXN0KyspID0gQ1I7ICooYi0+bGFzdCsrKSA9IExGOworICAgICAgICAqYi0+bGFzdCsrID0gQ1I7ICpiLT5sYXN0KysgPSBMRjsKICAgICB9CiAKICAgICBpZiAoci0+aGVhZGVyc19vdXQubG9jYXRpb24KQEAgLTM2MCw3ICszNjIsNyBAQAogICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+dmFsdWUubGVuID0gYi0+bGFzdCAtIHA7CiAgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT52YWx1ZS5kYXRhID0gcDsKIAotICAgICAgICAqKGItPmxhc3QrKykgPSBDUjsgKihiLT5sYXN0KyspID0gTEY7CisgICAgICAgICpiLT5sYXN0KysgPSBDUjsgKmItPmxhc3QrKyA9IExGOwogICAgIH0KIAogICAgIGlmICghKHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWQgJiYgci0+aGVhZGVyc19vdXQubGFzdF9tb2RpZmllZC0+a2V5LmxlbikKQEAgLTM3MCw3ICszNzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIkxhc3QtTW9kaWZpZWQ6ICIpIC0gMSk7CiAgICAgICAgIGItPmxhc3QgPSBuZ3hfaHR0cF90aW1lKGItPmxhc3QsIHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWRfdGltZSk7CiAKLSAgICAgICAgKihiLT5sYXN0KyspID0gQ1I7ICooYi0+bGFzdCsrKSA9IExGOworICAgICAgICAqYi0+bGFzdCsrID0gQ1I7ICpiLT5sYXN0KysgPSBMRjsKICAgICB9CiAKICAgICBpZiAoci0+Y2h1bmtlZCkgewpAQCAtNDEyLDIwICs0MTQsMjAgQEAKICAgICAgICAgfQogCiAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIGhlYWRlcltpXS5rZXkuZGF0YSwgaGVhZGVyW2ldLmtleS5sZW4pOwotICAgICAgICAqKGItPmxhc3QrKykgPSAnOicgOyAqKGItPmxhc3QrKykgPSAnICcgOworICAgICAgICAqYi0+bGFzdCsrID0gJzonIDsgKmItPmxhc3QrKyA9ICcgJyA7CiAKICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgaGVhZGVyW2ldLnZhbHVlLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltpXS52YWx1ZS5sZW4pOwotICAgICAgICAqKGItPmxhc3QrKykgPSBDUjsgKihiLT5sYXN0KyspID0gTEY7CisgICAgICAgICpiLT5sYXN0KysgPSBDUjsgKmItPmxhc3QrKyA9IExGOwogICAgIH0KIAogI2lmIChOR1hfREVCVUcpCi0gICAgKihiLT5sYXN0KSA9ICdcMCc7CisgICAgKmItPmxhc3QgPSAnXDAnOwogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLCAiJXNcbiIsIGItPnBvcyk7CiAjZW5kaWYKIAogICAgIC8qIHRoZSBlbmQgb2YgSFRUUCBoZWFkZXIgKi8KLSAgICAqKGItPmxhc3QrKykgPSBDUjsgKihiLT5sYXN0KyspID0gTEY7CisgICAgKmItPmxhc3QrKyA9IENSOyAqYi0+bGFzdCsrID0gTEY7CiAKICAgICByLT5oZWFkZXJfc2l6ZSA9IGItPmxhc3QgLSBiLT5wb3M7CiAKQEAgLTQ0NCw3ICs0NDYsOCBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX2hlYWRlcl9maWx0ZXJfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF9oZWFkZXJfZmlsdGVyOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfaGFuZGxlci5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfbG9nX2hhbmRsZXIuYwppbmRleCAwZDAzMWZlLi4xNDgyNDZmIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfaGFuZGxlci5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2xvZ19oYW5kbGVyLmMKQEAgLTEzNSw3ICsxMzUsOCBAQAogCiBuZ3hfaHR0cF9sb2dfb3BfbmFtZV90IG5neF9odHRwX2xvZ19mbXRfb3BzW10gPSB7CiAgICAgeyBuZ3hfc3RyaW5nKCJhZGRyIiksIElORVRfQUREUlNUUkxFTiAtIDEsIE5VTEwsIE5VTEwsIG5neF9odHRwX2xvZ19hZGRyIH0sCi0gICAgeyBuZ3hfc3RyaW5nKCJjb25uIiksIE5HWF9JTlQzMl9MRU4sIE5VTEwsIE5VTEwsIG5neF9odHRwX2xvZ19jb25uZWN0aW9uIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJjb25uIiksIE5HWF9BVE9NSUNfVF9MRU4sIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2xvZ19jb25uZWN0aW9uIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJwaXBlIiksIDEsIE5VTEwsIE5VTEwsIG5neF9odHRwX2xvZ19waXBlIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJ0aW1lIiksIHNpemVvZigiMjgvU2VwLzE5NzA6MTI6MDA6MDAgKzA2MDAiKSAtIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIG5neF9odHRwX2xvZ190aW1lIH0sCkBAIC0xNDMsMTMgKzE0NCwxMyBAQAogICAgIHsgbmd4X3N0cmluZygic3RhdHVzIiksIDMsIE5VTEwsIE5VTEwsIG5neF9odHRwX2xvZ19zdGF0dXMgfSwKICAgICB7IG5neF9zdHJpbmcoImxlbmd0aCIpLCBOR1hfT0ZGX1RfTEVOLCBOVUxMLCBOVUxMLCBuZ3hfaHR0cF9sb2dfbGVuZ3RoIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJhcGFjaGVfbGVuZ3RoIiksIE5HWF9PRkZfVF9MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIG5neF9odHRwX2xvZ19hcGFjaGVfbGVuZ3RoIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIG5neF9odHRwX2xvZ19hcGFjaGVfbGVuZ3RoIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJyZXF1ZXN0X2xlbmd0aCIpLCBOR1hfU0laRV9UX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIG5neF9odHRwX2xvZ19yZXF1ZXN0X2xlbmd0aCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBuZ3hfaHR0cF9sb2dfcmVxdWVzdF9sZW5ndGggfSwKIAogICAgIHsgbmd4X3N0cmluZygicmVxdWVzdCIpLCAwLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9sb2dfcmVxdWVzdF9nZXRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2xvZ19yZXF1ZXN0IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2xvZ19yZXF1ZXN0X2dldGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfbG9nX3JlcXVlc3QgfSwKIAogICAgIHsgbmd4X3N0cmluZygiaSIpLCAwLCBuZ3hfaHR0cF9sb2dfaGVhZGVyX2luX2NvbXBpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2xvZ19oZWFkZXJfaW5fZ2V0bGVuLApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IGE2MDQ2ZjEuLmY0OTA4NDcgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTEzOCw2ICsxMzgsNyBAQAogCiAgICAgICAgIGlmIChuZ3hfYWNjZXB0X211dGV4KSB7CiAgICAgICAgICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgeworCiAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xNDUsMTEgKzE0NiwxNSBAQAogICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQocmV2KTsgCiAKICAgICAgICAgICAgIG5neF9tdXRleF91bmxvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOworCisjaWYgKE5HWF9TVEFUX1NUVUIpCisgICAgICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X3JlYWRpbmcpOworI2VuZGlmCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICAoKm5neF9zdGF0X3JlYWRpbmcpKys7CisgICAgICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X3JlYWRpbmcpOwogI2VuZGlmCiAKICAgICAgICAgbmd4X2h0dHBfaW5pdF9yZXF1ZXN0KHJldik7CkBAIC0xNzYsNyArMTgxLDcgQEAKICNlbmRpZgogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCi0gICAgKCpuZ3hfc3RhdF9yZWFkaW5nKSsrOworICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X3JlYWRpbmcpOwogI2VuZGlmCiAKIH0KQEAgLTIwNSw3ICsyMTAsNyBAQAogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBOR1hfRVRJTUVET1VULCAiY2xpZW50IHRpbWVkIG91dCIpOwogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCi0gICAgICAgICgqbmd4X3N0YXRfcmVhZGluZyktLTsKKyAgICAgICAgbmd4X2F0b21pY19kZWMobmd4X3N0YXRfcmVhZGluZyk7CiAjZW5kaWYKIAogICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwpAQCAtMjE3LDE0ICsyMjIsMTQgQEAKICAgICBpZiAoaGMpIHsKIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICAoKm5neF9zdGF0X3JlYWRpbmcpKys7CisgICAgICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X3JlYWRpbmcpOwogI2VuZGlmCiAKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIShoYyA9IG5neF9wY2FsbG9jKGMtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9jb25uZWN0aW9uX3QpKSkpIHsKIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICAgICAgKCpuZ3hfc3RhdF9yZWFkaW5nKS0tOworICAgICAgICAgICAgbmd4X2F0b21pY19kZWMobmd4X3N0YXRfcmVhZGluZyk7CiAjZW5kaWYKIAogICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKQEAgLTI0Nyw3ICsyNTIsNyBAQAogICAgICAgICBpZiAoIShyID0gbmd4X3BjYWxsb2MoYy0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3JlcXVlc3RfdCkpKSkgewogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCi0gICAgICAgICAgICAoKm5neF9zdGF0X3JlYWRpbmcpLS07CisgICAgICAgICAgICBuZ3hfYXRvbWljX2RlYyhuZ3hfc3RhdF9yZWFkaW5nKTsKICNlbmRpZgogCiAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwpAQCAtMjU4LDcgKzI2Myw3IEBACiAgICAgfQogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCi0gICAgKCpuZ3hfc3RhdF9yZWFkaW5nKS0tOworICAgIG5neF9hdG9taWNfZGVjKG5neF9zdGF0X3JlYWRpbmcpOwogI2VuZGlmCiAKICAgICBjLT5kYXRhID0gcjsKQEAgLTQyNyw5ICs0MzIsOSBAQAogICAgIHItPmh0dHBfc3RhdGUgPSBOR1hfSFRUUF9SRUFESU5HX1JFUVVFU1RfU1RBVEU7CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICAoKm5neF9zdGF0X3JlYWRpbmcpKys7CisgICAgbmd4X2F0b21pY19pbmMobmd4X3N0YXRfcmVhZGluZyk7CiAgICAgci0+c3RhdF9yZWFkaW5nID0gMTsKLSAgICAoKm5neF9zdGF0X3JlcXVlc3RzKSsrOworICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X3JlcXVlc3RzKTsKICNlbmRpZgogCiAgICAgcmV2LT5ldmVudF9oYW5kbGVyKHJldik7CkBAIC04MjksOSArODM0LDkgQEAKICAgICAgICAgICAgIH0KIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICAgICAgICAgKCpuZ3hfc3RhdF9yZWFkaW5nKS0tOworICAgICAgICAgICAgbmd4X2F0b21pY19kZWMobmd4X3N0YXRfcmVhZGluZyk7CiAgICAgICAgICAgICByLT5zdGF0X3JlYWRpbmcgPSAwOwotICAgICAgICAgICAgKCpuZ3hfc3RhdF93cml0aW5nKSsrOworICAgICAgICAgICAgbmd4X2F0b21pY19pbmMobmd4X3N0YXRfd3JpdGluZyk7CiAgICAgICAgICAgICByLT5zdGF0X3dyaXRpbmcgPSAxOwogI2VuZGlmCiAKQEAgLTIwNzYsMTEgKzIwODEsMTEgQEAKIAogI2lmIChOR1hfU1RBVF9TVFVCKQogICAgIGlmIChyLT5zdGF0X3JlYWRpbmcpIHsKLSAgICAgICAgKCpuZ3hfc3RhdF9yZWFkaW5nKS0tOworICAgICAgICBuZ3hfYXRvbWljX2RlYyhuZ3hfc3RhdF9yZWFkaW5nKTsKICAgICB9CiAKICAgICBpZiAoci0+c3RhdF93cml0aW5nKSB7Ci0gICAgICAgICgqbmd4X3N0YXRfd3JpdGluZyktLTsKKyAgICAgICAgbmd4X2F0b21pY19kZWMobmd4X3N0YXRfd3JpdGluZyk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTIyMDMsNyArMjIwOCw3IEBACiAjZW5kaWYKIAogI2lmIChOR1hfU1RBVF9TVFVCKQotICAgICgqbmd4X3N0YXRfYWN0aXZlKS0tOworICAgIG5neF9hdG9taWNfZGVjKG5neF9zdGF0X2FjdGl2ZSk7CiAjZW5kaWYKIAogICAgIHBvb2wgPSBjLT5wb29sOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2F0b21pYy5oIGIvc3JjL29zL3VuaXgvbmd4X2F0b21pYy5oCmluZGV4IDJkZTYxY2YuLmMzMTM5NjQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9hdG9taWMuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfYXRvbWljLmgKQEAgLTEyLDExICsxMiwxMDQgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKLSNpZiAoIF9faTM4Nl9fIHx8IF9fYW1kNjRfXyApCisjaWYgKCBfX2kzODZfXyApCiAKICNkZWZpbmUgTkdYX0hBVkVfQVRPTUlDX09QUyAgMQogCi10eXBlZGVmIHZvbGF0aWxlIHVpbnQzMl90ICBuZ3hfYXRvbWljX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICBuZ3hfYXRvbWljX2ludF90OwordHlwZWRlZiB2b2xhdGlsZSBuZ3hfYXRvbWljX2ludF90ICBuZ3hfYXRvbWljX3Q7CisjZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKKworCisjaWYgKE5HWF9TTVApCisjZGVmaW5lIE5HWF9TTVBfTE9DSyAgImxvY2s7IgorI2Vsc2UKKyNkZWZpbmUgTkdYX1NNUF9MT0NLCisjZW5kaWYKKworLyoKKyAqIHRoZSAiPXEiIGlzIGFueSBvZiB0aGUgJWVheCwgJWVieCwgJWVjeCwgb3IgJWVkeCByZWdpc3RlcnMuCisgKiB0aGUgJyIwIiAoMSknIHBhcmFtZXRlciBwcmVsb2FkcyAxIGludG8gJTAuCisgKiB0aGUgImNjIiBtZWFucyB0aGF0IGZsYWdzIHdlcmUgY2hhbmdlZC4KKyAqLworCitzdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX2ludF90CituZ3hfYXRvbWljX2luYyhuZ3hfYXRvbWljX3QgKnZhbHVlKQoreworICAgIG5neF9hdG9taWNfaW50X3QgIG9sZDsKKworICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgICAgICBOR1hfU01QX0xPQ0sKKyAgICAiICAgIHhhZGRsICAlMCwgJTI7ICAgIgorICAgICIgICAgaW5jbCAgICUwOyAgICAgICAiCisKKyAgICA6ICI9cSIgKG9sZCkgOiAiMCIgKDEpLCAibSIgKCp2YWx1ZSkgOiAiY2MiLCAibWVtb3J5Iik7CisKKyAgICByZXR1cm4gb2xkOworfQorCisKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfaW50X3QKK25neF9hdG9taWNfZGVjKG5neF9hdG9taWNfdCAqdmFsdWUpCit7CisgICAgbmd4X2F0b21pY19pbnRfdCAgb2xkOworCisgICAgX19hc21fXyB2b2xhdGlsZSAoCisKKyAgICAgICAgIE5HWF9TTVBfTE9DSworICAgICIgICAgeGFkZGwgICUwLCAlMjsgICAiCisgICAgIiAgICBkZWNsICAgJTA7ICAgICAgICIKKworICAgIDogIj1xIiAob2xkKSA6ICIwIiAoLTEpLCAibSIgKCp2YWx1ZSkgOiAiY2MiLCAibWVtb3J5Iik7CisKKyAgICByZXR1cm4gb2xkOworfQorCisKKy8qCisgKiB0aGUgInEiIGlzIGFueSBvZiB0aGUgJWVheCwgJWVieCwgJWVjeCwgb3IgJWVkeCByZWdpc3RlcnMuCisgKiB0aGUgIj1hIiBhbmQgImEiIGFyZSB0aGUgJWVheCByZWdpc3Rlci4gIEFsdGhvdWdoIHdlIGNhbiByZXR1cm4gcmVzdWx0CisgKiBpbiBhbnkgcmVnaXN0ZXIsIHdlIHVzZSAlZWF4IGJlY2F1c2UgaXQgaXMgdXNlZCBpbiBjbXB4Y2hnIGFueXdheS4KKyAqCisgKiAiY21weGNoZyAgciwgW21dIjoKKyAqCisgKiAgIGlmIChlYXggPT0gW21dKSB7CisgKiAgICAgICB6ZiA9IDE7CisgKiAgICAgICBbbV0gPSByOworICogICB9IGVsc2UgeworICogICAgICAgemYgPSAwOworICogICAgICAgZWF4ID0gW21dOworICogICB9CisgKi8KKworc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19jbXBfc2V0KG5neF9hdG9taWNfdCAqbG9jaywgbmd4X2F0b21pY19pbnRfdCBvbGQsCisgICAgbmd4X2F0b21pY19pbnRfdCBzZXQpCit7CisgICAgbmd4X2F0b21pY19pbnRfdCAgcmVzOworCisgICAgX19hc21fXyB2b2xhdGlsZSAoCisKKyAgICAgICAgIE5HWF9TTVBfTE9DSworICAgICIgICAgY21weGNoZ2wgICUzLCAlMTsgICAiCisgICAgIiAgICBzZXR6ICAgICAgJWIwOyAgICAgICIKKyAgICAiICAgIG1vdnpibCAgICAlYjAsICUwOyAgIgorCisgICAgOiAiPWEiIChyZXMpIDogIm0iICgqbG9jayksICJhIiAob2xkKSwgInEiIChzZXQpIDogImNjIiwgIm1lbW9yeSIpOworCisgICAgcmV0dXJuIHJlczsKK30KKworCisjZWxpZiAoIF9fYW1kNjRfXyApCisKKyNkZWZpbmUgTkdYX0hBVkVfQVRPTUlDX09QUyAgMQorCit0eXBlZGVmIGludDY0X3QgIG5neF9hdG9taWNfaW50X3Q7Cit0eXBlZGVmIHZvbGF0aWxlIG5neF9hdG9taWNfaW50X3QgIG5neF9hdG9taWNfdDsKKyNkZWZpbmUgTkdYX0FUT01JQ19UX0xFTiAgc2l6ZW9mKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIpIC0gMQorCiAKICNpZiAoTkdYX1NNUCkKICNkZWZpbmUgTkdYX1NNUF9MT0NLICAibG9jazsiCkBAIC0yNSw1NiArMTE4LDU4IEBACiAjZW5kaWYKIAogCi1zdGF0aWMgbmd4X2lubGluZSB1aW50MzJfdCBuZ3hfYXRvbWljX2luYyhuZ3hfYXRvbWljX3QgKnZhbHVlKQorc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19pbmMobmd4X2F0b21pY190ICp2YWx1ZSkKIHsKLSAgICB1aW50MzJfdCAgb2xkOworICAgIG5neF9hdG9taWNfaW50X3QgIG9sZDsKIAogICAgIF9fYXNtX18gdm9sYXRpbGUgKAogCi0gICAgICAgIE5HWF9TTVBfTE9DSwotICAgICIgICB4YWRkbCAgJTAsICUyOyAgICIKLSAgICAiICAgaW5jbCAgICUwOyAgICAgICAiCisgICAgICAgICBOR1hfU01QX0xPQ0sKKyAgICAiICAgIHhhZGRxICAlMCwgJTI7ICAgIgorICAgICIgICAgaW5jcSAgICUwOyAgICAgICAiCiAKLSAgICA6ICI9cSIgKG9sZCkgOiAiMCIgKDEpLCAibSIgKCp2YWx1ZSkpOworICAgIDogIj1yIiAob2xkKSA6ICIwIiAoMSksICJtIiAoKnZhbHVlKSA6ICJjYyIsICJtZW1vcnkiKTsKIAogICAgIHJldHVybiBvbGQ7CiB9CiAKIAotI2lmIDAKKy8qIHRoZSAnIjAiICgtMUxMKScgcGFyYW1ldGVyIHByZWxvYWRzIC0xIGludG8gdGhlIDY0LWJpdCAlMCByZWdpc3RlciAqLwogCi1zdGF0aWMgbmd4X2lubGluZSB1aW50MzJfdCBuZ3hfYXRvbWljX2RlYyhuZ3hfYXRvbWljX3QgKnZhbHVlKQorc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19kZWMobmd4X2F0b21pY190ICp2YWx1ZSkKIHsKLSAgICB1aW50MzJfdCAgb2xkOworICAgIG5neF9hdG9taWNfaW50X3QgIG9sZDsKIAogICAgIF9fYXNtX18gdm9sYXRpbGUgKAogCi0gICAgICAgIE5HWF9TTVBfTE9DSwotICAgICIgICB4YWRkbCAgJTAsICUxOyAgICIKLSAgICAiICAgZGVjbCAgICUwOyAgICAgICAiCisgICAgICAgICBOR1hfU01QX0xPQ0sKKyAgICAiICAgIHhhZGRxICAlMCwgJTI7ICAgIgorICAgICIgICAgZGVjcSAgICUwOyAgICAgICAiCiAKLSAgICA6ICI9cSIgKG9sZCkgOiAiMCIgKC0xKSwgIm0iICgqdmFsdWUpKTsKKyAgICA6ICI9ciIgKG9sZCkgOiAiMCIgKC0xTEwpLCAibSIgKCp2YWx1ZSkgOiAiY2MiLCAibWVtb3J5Iik7CiAKICAgICByZXR1cm4gb2xkOwogfQogCi0jZW5kaWYKIAorLyogdGhlICI9YSIgYW5kICJhIiBhcmUgdGhlICVyYXggcmVnaXN0ZXIuICovCiAKLXN0YXRpYyBuZ3hfaW5saW5lIHVpbnQzMl90IG5neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2F0b21pY190IG9sZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYXRvbWljX3Qgc2V0KQorc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19jbXBfc2V0KG5neF9hdG9taWNfdCAqbG9jaywgbmd4X2F0b21pY19pbnRfdCBvbGQsCisgICAgbmd4X2F0b21pY19pbnRfdCBzZXQpCiB7Ci0gICAgdWludDMyX3QgIHJlczsKKyAgICBuZ3hfYXRvbWljX2ludF90ICByZXM7CiAKICAgICBfX2FzbV9fIHZvbGF0aWxlICgKIAotICAgICAgICBOR1hfU01QX0xPQ0sKLSAgICAiICAgY21weGNoZ2wgICUzLCAlMTsgICAiCi0gICAgIiAgIHNldHogICAgICAlJWFsOyAgICAgIgotICAgICIgICBtb3Z6YmwgICAgJSVhbCwgJTA7ICIKKyAgICAgICAgIE5HWF9TTVBfTE9DSworICAgICIgICAgY21weGNoZ3EgICUzLCAlMTsgICAiCisgICAgIiAgICBzZXR6ICAgICAgJWIwOyAgICAgICIKKyAgICAiICAgIG1vdnpicSAgICAlYjAsICUwOyAgIgogCi0gICAgOiAiPWEiIChyZXMpIDogIm0iICgqbG9jayksICJhIiAob2xkKSwgInEiIChzZXQpKTsKKyAgICA6ICI9YSIgKHJlcykgOiAibSIgKCpsb2NrKSwgImEiIChvbGQpLCAiciIgKHNldCkgOiAiY2MiLCAibWVtb3J5Iik7CiAKICAgICByZXR1cm4gcmVzOwogfQpAQCAtODQsMTIgKzE3OSwzOCBAQAogCiAjZGVmaW5lIE5HWF9IQVZFX0FUT01JQ19PUFMgIDEKIAotdHlwZWRlZiB2b2xhdGlsZSB1aW50MzJfdCAgbmd4X2F0b21pY190OworI2lmIChOR1hfUFRSX1NJWkUgPT0gOCkKK3R5cGVkZWYgdWludDY0X3QgIG5neF9hdG9taWNfaW50X3Q7CisjZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSAtIDEKKyNkZWZpbmUgTkdYX0NBU1hBICAgICAgICAgImNhc3hhIgorI2Vsc2UKK3R5cGVkZWYgdWludDMyX3QgIG5neF9hdG9taWNfaW50X3Q7CisjZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKKyNkZWZpbmUgTkdYX0NBU1hBICAgICAgICAgImNhc2EiCisjZW5kaWYKKwordHlwZWRlZiB2b2xhdGlsZSBuZ3hfYXRvbWljX2ludF90ICBuZ3hfYXRvbWljX3Q7CiAKIAotc3RhdGljIG5neF9pbmxpbmUgdWludDMyX3Qgbmd4X2F0b21pY19pbmMobmd4X2F0b21pY190ICp2YWx1ZSkKKy8qCisgKiB0aGUgIityIiBtZWFucyB0aGUgZ2VuZXJhbCByZWdpc3RlciB1c2VkIGZvciBib3RoIGlucHV0IGFuZCBvdXRwdXQuCisgKgorICogImNhc2EgICBbcjFdIDB4ODAsIHIyLCByMCIgIGFuZAorICogImNhc3hhICBbcjFdIDB4ODAsIHIyLCByMCIgIGRvIHRoZSBmb2xsb3dpbmc6CisgKgorICogICAgIGlmIChbcjFdID09IHIyKSB7CisgKiAgICAgICAgIHN3YXAocjAsIFtyMV0pOworICogICAgIH0gZWxzZSB7CisgKiAgICAgICAgIHIwID0gW3IxXTsKKyAqICAgICB9CisgKgorICogc28gInIwID09IHIyIiBtZWFucyB0aGF0IHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWxsLgorICovCisKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfaW50X3QKK25neF9hdG9taWNfaW5jKG5neF9hdG9taWNfdCAqdmFsdWUpCiB7Ci0gICAgdWludDMyX3QgIG9sZCwgbmV3LCByZXM7CisgICAgbmd4X2F0b21pY19pbnRfdCAgb2xkLCBuZXcsIHJlczsKIAogICAgIG9sZCA9ICp2YWx1ZTsKIApAQCAtMTAwLDkgKzIyMSw5IEBACiAKICAgICAgICAgX19hc21fXyB2b2xhdGlsZSAoCiAKLSAgICAgICAgImNhc2EgWyUxXSAweDgwLCAlMiwgJTAiCisgICAgICAgIE5HWF9DQVNYQSAiIFslMV0gMHg4MCwgJTIsICUwIgogCi0gICAgICAgIDogIityIiAocmVzKSA6ICJyIiAodmFsdWUpLCAiciIgKG9sZCkpOworICAgICAgICA6ICIrciIgKHJlcykgOiAiciIgKHZhbHVlKSwgInIiIChvbGQpIDogIm1lbW9yeSIpOwogCiAgICAgICAgIGlmIChyZXMgPT0gb2xkKSB7CiAgICAgICAgICAgICByZXR1cm4gbmV3OwpAQCAtMTEzLDMzICsyMzQsMTU1IEBACiB9CiAKIAotc3RhdGljIG5neF9pbmxpbmUgdWludDMyX3Qgbmd4X2F0b21pY19jbXBfc2V0KG5neF9hdG9taWNfdCAqbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYXRvbWljX3Qgb2xkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9hdG9taWNfdCBzZXQpCitzdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX2ludF90CituZ3hfYXRvbWljX2RlYyhuZ3hfYXRvbWljX3QgKnZhbHVlKQogewotICAgIHVpbnQzMl90ICByZXMgPSAodWludDMyX3QpIHNldDsKKyAgICBuZ3hfYXRvbWljX2ludF90ICBvbGQsIG5ldywgcmVzOworCisgICAgb2xkID0gKnZhbHVlOworCisgICAgZm9yICggOzsgKSB7CisKKyAgICAgICAgbmV3ID0gb2xkIC0gMTsKKyAgICAgICAgcmVzID0gbmV3OworCisgICAgICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgICAgIE5HWF9DQVNYQSAiIFslMV0gMHg4MCwgJTIsICUwIgorCisgICAgICAgIDogIityIiAocmVzKSA6ICJyIiAodmFsdWUpLCAiciIgKG9sZCkgOiAibWVtb3J5Iik7CisKKyAgICAgICAgaWYgKHJlcyA9PSBvbGQpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXc7CisgICAgICAgIH0KKworICAgICAgICBvbGQgPSByZXM7CisgICAgfQorfQorCisKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfaW50X3QKK25neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssIG5neF9hdG9taWNfaW50X3Qgb2xkLCBuZ3hfYXRvbWljX2ludF90IHNldCkKK3sKKyAgICBfX2FzbV9fIHZvbGF0aWxlICgKKworICAgIE5HWF9DQVNYQSAiIFslMV0gMHg4MCwgJTIsICUwIgorCisgICAgOiAiK3IiIChzZXQpIDogInIiIChsb2NrKSwgInIiIChvbGQpIDogIm1lbW9yeSIpOworCisgICAgcmV0dXJuIChzZXQgPT0gb2xkKTsKK30KKworCisjZWxpZiAoIF9fcHBjX18gKQorCisjZGVmaW5lIE5HWF9IQVZFX0FUT01JQ19PUFMgIDEKKworI2lmIChOR1hfUFRSX1NJWkUgPT0gOCkKK3R5cGVkZWYgdWludDY0X3QgIG5neF9hdG9taWNfaW50X3Q7CisjZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSAtIDEKKyNlbHNlCisjZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKK3R5cGVkZWYgdWludDMyX3QgIG5neF9hdG9taWNfaW50X3Q7CisjZW5kaWYKKwordHlwZWRlZiB2b2xhdGlsZSBuZ3hfYXRvbWljX2ludF90ICBuZ3hfYXRvbWljX3Q7CisKKworLyoKKyAqIHRoZSBwcGMgYXNzZW1ibGVyIHRyZWF0cyAiOyIgYXMgY29tbWVudCwgc28gd2UgaGF2ZSB0byB1c2UgIlxuIi4KKyAqIHRoZSBtaW51cyBpbiAiYm5lLSIgaXMgYSBoaW50IGZvciB0aGUgYnJhbmNoIHByZWRpY3Rpb24gdW5pdCB0aGF0CisgKiB0aGlzIGJyYW5jaCBpcyB1bmxpa2VseSB0byBiZSB0YWtlbi4KKyAqCisgKiB0aGUgIj0mciIgbWVhbnMgdGhhdCBubyBpbnB1dCByZWdpc3RlcnMgY2FuIGJlIHVzZWQuCisgKiB0aGUgIj0mYiIgbWVhbnMgdGhhdCB0aGUgYmFzZSByZWdpc3RlcnMgY2FuIGJlIHVzZWQgb25seSwgaS5lLiBhbnkgcmVnaXN0ZXIKKyAqIGV4Y2VwdCByMC4gIHRoZSByMCByZWdpc3RlciBjYW4gbm90IGJlIHVzZWQgaW4gImFkZGkgIHIwLCByMCwgMSIuCisgKiB0aGUgIjFiIiBtZWFucyB0aGUgbmVhcmVzdCBiYWNrd2FyZCBsYWJlbCAiMSIgYW5kIHRoZSAiMWYiIG1lYW5zCisgKiB0aGUgbmVhcmVzdCBmb3J3YXJkIGxhYmVsICIxIi4KKyAqLworCitzdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX2ludF90CituZ3hfYXRvbWljX2luYyhuZ3hfYXRvbWljX3QgKnZhbHVlKQoreworICAgIG5neF9hdG9taWNfaW50X3QgIHJlczsKIAogICAgIF9fYXNtX18gdm9sYXRpbGUgKAogCi0gICAgImNhc2EgWyUxXSAweDgwLCAlMiwgJTAiCisgICAgIjE6ICBsd2FyeCAgICUwLCAwLCAlMSAgXG4iIC8qIGxvYWQgZnJvbSBbdmFsdWVdIGludG8gInJlcyIgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBhbmQgc3RvcmUgcmVzZXJ2YXRpb24gICAgICAgICAgICAgICAgICAqLworICAgICIgICAgYWRkaSAgICAlMCwgJTAsIDEgIFxuIiAvKiBhZGQgIjEiIHRvICJyZXMiICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgIiAgICBzdHdjeC4gICUwLCAwLCAlMSAgXG4iIC8qIHN0b3JlICJyZXMiIGludG8gW3ZhbHVlXSBpZiByZXNlcnZhdGlvbiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgaXMgbm90IGNsZWFyZWQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICIgICAgYm5lLSAgICAxYiAgICAgICAgIFxuIiAvKiB0cnkgYWdhaW4gaWYgcmVzZXJ2YXRpb24gd2FzIGNsZWFyZWQgICAgICovCiAKLSAgICA6ICIrciIgKHJlcykgOiAiciIgKGxvY2spLCAiciIgKG9sZCkpOworICAgIDogIj0mYiIgKHJlcykgOiAiciIgKHZhbHVlKSA6ICJjYyIsICJtZW1vcnkiKTsKIAotICAgIHJldHVybiAocmVzID09IG9sZCk7CisgICAgcmV0dXJuIHJlczsKIH0KIAorCitzdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX2ludF90CituZ3hfYXRvbWljX2RlYyhuZ3hfYXRvbWljX3QgKnZhbHVlKQoreworICAgIG5neF9hdG9taWNfaW50X3QgIHJlczsKKworICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgIjE6ICBsd2FyeCAgICUwLCAwLCAlMSAgXG4iIC8qIGxvYWQgZnJvbSBbdmFsdWVdIGludG8gInJlcyIgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBhbmQgc3RvcmUgcmVzZXJ2YXRpb24gICAgICAgICAgICAgICAgICAqLworICAgICIgICAgYWRkaSAgICAlMCwgJTAsIC0xIFxuIiAvKiBzdWIgIjEiIGZyb20gInJlcyIgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgIiAgICBzdHdjeC4gICUwLCAwLCAlMSAgXG4iIC8qIHN0b3JlICJyZXMiIGludG8gW3ZhbHVlXSBpZiByZXNlcnZhdGlvbiAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgaXMgbm90IGNsZWFyZWQgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICIgICAgYm5lLSAgICAxYiAgICAgICAgIFxuIiAvKiB0cnkgYWdhaW4gaWYgcmVzZXJ2YXRpb24gd2FzIGNsZWFyZWQgICAgICovCisKKyAgICA6ICI9JmIiIChyZXMpIDogInIiICh2YWx1ZSkgOiAiY2MiLCAibWVtb3J5Iik7CisKKyAgICByZXR1cm4gcmVzOworfQorCisKK3N0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfaW50X3QKK25neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssIG5neF9hdG9taWNfaW50X3Qgb2xkLAorICAgIG5neF9hdG9taWNfaW50X3Qgc2V0KQoreworICAgIG5neF9hdG9taWNfaW50X3QgIHJlcywgdGVtcDsKKworICAgIF9fYXNtX18gdm9sYXRpbGUgKAorCisgICAgIiAgICBsaSAgICAgICUwLCAwICAgICAgXG4iIC8qIHByZXNldCAiMCIgdG8gInJlcyIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAiICAgIGx3YXJ4ICAgJTEsIDAsICUyICBcbiIgLyogbG9hZCBmcm9tIFtsb2NrXSBpbnRvICJ0ZW1wIiAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIGFuZCBzdG9yZSByZXNlcnZhdGlvbiAgICAgICAgICAgICAgICAgICovCisgICAgIiAgICBjbXB3ICAgICUxLCAlMyAgICAgXG4iIC8qIGNvbXBhcmUgInRlbXAiIGFuZCAib2xkIiAgICAgICAgICAgICAgICAgKi8KKyAgICAiICAgIGJuZS0gICAgMWYgICAgICAgICBcbiIgLyogbm90IGVxdWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICIgICAgc3R3Y3guICAlNCwgMCwgJTIgIFxuIiAvKiBzdG9yZSAic2V0IiBpbnRvIFtsb2NrXSBpZiByZXNlcnZhdGlvbiAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIGlzIG5vdCBjbGVhcmVkICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAiICAgIGJuZS0gICAgMWYgICAgICAgICBcbiIgLyogdGhlIHJlc2VydmF0aW9uIHdhcyBjbGVhcmVkICAgICAgICAgICAgICAqLworICAgICIgICAgbGkgICAgICAlMCwgMSAgICAgIFxuIiAvKiBzZXQgIjEiIHRvICJyZXMiICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgIjE6ICAgICAgICAgICAgICAgICAgICAgXG4iCisKKyAgICA6ICI9JnIiIChyZXMpLCAiPSZyIiAodGVtcCkKKyAgICA6ICJyIiAobG9jayksICJyIiAob2xkKSwgInIiIChzZXQpCisgICAgOiAiY2MiLCAibWVtb3J5Iik7CisKKyAgICByZXR1cm4gcmVzOworfQorCisKICNlbHNlCiAKICNkZWZpbmUgTkdYX0hBVkVfQVRPTUlDX09QUyAgMAogCi10eXBlZGVmIHZvbGF0aWxlIHVpbnQzMl90ICBuZ3hfYXRvbWljX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICBuZ3hfYXRvbWljX2ludF90OwordHlwZWRlZiB2b2xhdGlsZSBuZ3hfYXRvbWljX2ludF90ICBuZ3hfYXRvbWljX3Q7CiAKLSNkZWZpbmUgbmd4X2F0b21pY19pbmMoeCkgICsrKCooeCkpOworI2RlZmluZSBuZ3hfYXRvbWljX2luYyh4KSAgKysoKih4KSkKKyNkZWZpbmUgbmd4X2F0b21pY19kZWMoeCkgIC0tKCooeCkpCiAKLXN0YXRpYyBuZ3hfaW5saW5lIHVpbnQzMl90IG5neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2F0b21pY190IG9sZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYXRvbWljX3Qgc2V0KQorc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdAorbmd4X2F0b21pY19jbXBfc2V0KG5neF9hdG9taWNfdCAqbG9jaywgbmd4X2F0b21pY19pbnRfdCBvbGQsCisgICAgIG5neF9hdG9taWNfaW50X3Qgc2V0KQogeworICAgICAqbG9jayA9IHNldDsKICAgICAgcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkLmggYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZC5oCmluZGV4IDdhMWUyMDMuLjRlODY1YTMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2QuaApAQCAtOSw3ICs5LDcgQEAKIAogCiBuZ3hfY2hhaW5fdCAqbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2NoYWluX3QgKmluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxpbWl0KTsKKyAgICBvZmZfdCBsaW1pdCk7CiAKIGV4dGVybiBpbnQgbmd4X2ZyZWVic2Rfa2Vybl9vc3JlbGRhdGU7CiBleHRlcm4gaW50IG5neF9mcmVlYnNkX2h3X25jcHU7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfbGludXguaCBiL3NyYy9vcy91bml4L25neF9saW51eC5oCmluZGV4IDRhOGY4ZjMuLmU4NzFiYTkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9saW51eC5oCisrKyBiL3NyYy9vcy91bml4L25neF9saW51eC5oCkBAIC04LDExICs4LDggQEAKICNkZWZpbmUgX05HWF9MSU5VWF9IX0lOQ0xVREVEXwogCiAKLW5neF9pbnRfdCAgbmd4X2luaXRfc2V0cHJvY3RpdGxlKG5neF9sb2dfdCAqbG9nKTsKLXZvaWQgbmd4X3NldHByb2N0aXRsZShjaGFyICp0aXRsZSk7Ci0KIG5neF9jaGFpbl90ICpuZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2NoYWluX3QgKmluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBsaW1pdCk7CisgICAgb2ZmX3QgbGltaXQpOwogCiBleHRlcm4gaW50IG5neF9saW51eF9ydHNpZ19tYXg7CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9saW51eF9pbml0LmMgYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfaW5pdC5jCmluZGV4IDljMWM4NDcuLjdmN2JlODkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9saW51eF9pbml0LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2luaXQuYwpAQCAtMjgsNyArMjgsOCBAQAogfTsKIAogCi1uZ3hfaW50X3Qgbmd4X29zX2luaXQobmd4X2xvZ190ICpsb2cpCituZ3hfaW50X3QKK25neF9vc19pbml0KG5neF9sb2dfdCAqbG9nKQogewogICAgIGludCAgICAgICAgbmFtZVsyXTsKICAgICBzaXplX3QgICAgIGxlbjsKQEAgLTM3LDI4ICszOCwyOSBAQAogICAgIG5hbWVbMF0gPSBDVExfS0VSTjsKICAgICBuYW1lWzFdID0gS0VSTl9PU1RZUEU7CiAgICAgbGVuID0gc2l6ZW9mKG5neF9saW51eF9rZXJuX29zdHlwZSk7Ci0gICAgaWYgKHN5c2N0bChuYW1lLCBzaXplb2YobmFtZSksIG5neF9saW51eF9rZXJuX29zdHlwZSwgJmxlbiwgTlVMTCwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gLTEpIHsKKworICAgIGlmIChzeXNjdGwobmFtZSwgMiwgbmd4X2xpbnV4X2tlcm5fb3N0eXBlLCAmbGVuLCBOVUxMLCAwKSA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICJzeXNjdGwoS0VSTl9PU1RZUEUpIGZhaWxlZCIpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIG5hbWVbMF0gPSBDVExfS0VSTjsKKyAgICAvKiBuYW1lWzBdID0gQ1RMX0tFUk47ICovCiAgICAgbmFtZVsxXSA9IEtFUk5fT1NSRUxFQVNFOwogICAgIGxlbiA9IHNpemVvZihuZ3hfbGludXhfa2Vybl9vc3JlbGVhc2UpOwotICAgIGlmIChzeXNjdGwobmFtZSwgc2l6ZW9mKG5hbWUpLCBuZ3hfbGludXhfa2Vybl9vc3JlbGVhc2UsICZsZW4sIE5VTEwsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IC0xKSB7CisKKyAgICBpZiAoc3lzY3RsKG5hbWUsIDIsIG5neF9saW51eF9rZXJuX29zcmVsZWFzZSwgJmxlbiwgTlVMTCwgMCkgPT0gLTEpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAic3lzY3RsKEtFUk5fT1NSRUxFQVNFKSBmYWlsZWQiKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKIAotICAgIG5hbWVbMF0gPSBDVExfS0VSTjsKKyAgICAvKiBuYW1lWzBdID0gQ1RMX0tFUk47ICovCiAgICAgbmFtZVsxXSA9IEtFUk5fUlRTSUdNQVg7CiAgICAgbGVuID0gc2l6ZW9mKG5neF9saW51eF9ydHNpZ19tYXgpOwotICAgIGlmIChzeXNjdGwobmFtZSwgc2l6ZW9mKG5hbWUpLCAmbmd4X2xpbnV4X3J0c2lnX21heCwgJmxlbiwgTlVMTCwgMCkgPT0gLTEpIHsKKworICAgIGlmIChzeXNjdGwobmFtZSwgMiwgJm5neF9saW51eF9ydHNpZ19tYXgsICZsZW4sIE5VTEwsIDApID09IC0xKSB7CiAgICAgICAgIGVyciA9IG5neF9lcnJubzsKIAogICAgICAgICBpZiAoZXJyICE9IE5HWF9FTk9URElSKSB7CkBAIC03OCw3ICs4MCw4IEBACiB9CiAKIAotdm9pZCBuZ3hfb3Nfc3RhdHVzKG5neF9sb2dfdCAqbG9nKQordm9pZAorbmd4X29zX3N0YXR1cyhuZ3hfbG9nX3QgKmxvZykKIHsKICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgbG9nLCAwLCAiT1M6ICVzICVzIiwKICAgICAgICAgICAgICAgICAgIG5neF9saW51eF9rZXJuX29zdHlwZSwgbmd4X2xpbnV4X2tlcm5fb3NyZWxlYXNlKTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9vcy5oIGIvc3JjL29zL3VuaXgvbmd4X29zLmgKaW5kZXggNDJmYzg4Ni4uZTM5YWFiMCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X29zLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X29zLmgKQEAgLTIwLDcgKzIwLDcgQEAKIHR5cGVkZWYgc3NpemVfdCAoKm5neF9yZWN2X2NoYWluX3B0KShuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfY2hhaW5fdCAqaW4pOwogdHlwZWRlZiBzc2l6ZV90ICgqbmd4X3NlbmRfcHQpKG5neF9jb25uZWN0aW9uX3QgKmMsIHVfY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CiB0eXBlZGVmIG5neF9jaGFpbl90ICooKm5neF9zZW5kX2NoYWluX3B0KShuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfY2hhaW5fdCAqaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBsaW1pdCk7CisgICAgb2ZmX3QgbGltaXQpOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgbmd4X3JlY3ZfcHQgICAgICAgIHJlY3Y7CkBAIC00NCw3ICs0NCw3IEBACiBzc2l6ZV90IG5neF9yZWFkdl9jaGFpbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfY2hhaW5fdCAqZW50cnkpOwogc3NpemVfdCBuZ3hfdW5peF9zZW5kKG5neF9jb25uZWN0aW9uX3QgKmMsIHVfY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CiBuZ3hfY2hhaW5fdCAqbmd4X3dyaXRldl9jaGFpbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfY2hhaW5fdCAqaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBsaW1pdCk7CisgICAgb2ZmX3QgbGltaXQpOwogCiAKIGV4dGVybiBuZ3hfb3NfaW9fdCAgbmd4X29zX2lvOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuaCBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmgKaW5kZXggMTI3MDNiMy4uOTk1ZTkzYyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5oCkBAIC00OSw4ICs0OSw3IEBACiAjZGVmaW5lIG5neF9sb2dfcGlkICBuZ3hfcGlkCiAKIG5neF9waWRfdCBuZ3hfc3Bhd25fcHJvY2VzcyhuZ3hfY3ljbGVfdCAqY3ljbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3NwYXduX3Byb2NfcHQgcHJvYywgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLCBuZ3hfaW50X3QgcmVzcGF3bik7CisgICAgbmd4X3NwYXduX3Byb2NfcHQgcHJvYywgdm9pZCAqZGF0YSwgY2hhciAqbmFtZSwgbmd4X2ludF90IHJlc3Bhd24pOwogbmd4X3BpZF90IG5neF9leGVjdXRlKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X2V4ZWNfY3R4X3QgKmN0eCk7CiB2b2lkIG5neF9wcm9jZXNzX2dldF9zdGF0dXModm9pZCk7CiB2b2lkIG5neF9kZWJ1Z19wb2ludCh2b2lkKTsKQEAgLTYzLDYgKzYyLDEyIEBACiAjZW5kaWYKIAogCisjaWYgIWRlZmluZWQobmd4X3NldHByb2N0aXRsZSkKK25neF9pbnRfdCBuZ3hfaW5pdF9zZXRwcm9jdGl0bGUobmd4X2xvZ190ICpsb2cpOwordm9pZCBuZ3hfc2V0cHJvY3RpdGxlKGNoYXIgKnRpdGxlKTsKKyNlbmRpZgorCisKIGV4dGVybiBpbnQgICAgICAgICAgICBuZ3hfYXJnYzsKIGV4dGVybiBjaGFyICAgICAgICAgKipuZ3hfYXJndjsKIGV4dGVybiBjaGFyICAgICAgICAgKipuZ3hfb3NfYXJndjsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zZXRwcm9jdGl0bGUuYyBiL3NyYy9vcy91bml4L25neF9zZXRwcm9jdGl0bGUuYwppbmRleCAyZTQxMTA4Li42Yzk1Y2RmIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc2V0cHJvY3RpdGxlLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3NldHByb2N0aXRsZS5jCkBAIC0zMCw5ICszMCwxMCBAQAogCiBzdGF0aWMgY2hhciAqbmd4X29zX2FyZ3ZfbGFzdDsKIAotbmd4X2ludF90ICBuZ3hfaW5pdF9zZXRwcm9jdGl0bGUobmd4X2xvZ190ICpsb2cpCituZ3hfaW50X3QKK25neF9pbml0X3NldHByb2N0aXRsZShuZ3hfbG9nX3QgKmxvZykKIHsKLSAgICBjaGFyICAgICAgICAqcDsKKyAgICB1X2NoYXIgICAgICAqcDsKICAgICBzaXplX3QgICAgICAgc2l6ZTsKICAgICBuZ3hfdWludF90ICAgaTsKIApAQCAtNjAsOCArNjEsOCBAQAogICAgICAgICAgICAgc2l6ZSA9IG5neF9zdHJsZW4oZW52aXJvbltpXSkgKyAxOwogICAgICAgICAgICAgbmd4X29zX2FyZ3ZfbGFzdCA9IGVudmlyb25baV0gKyBzaXplOwogCi0gICAgICAgICAgICBuZ3hfY3B5c3RybihwLCBlbnZpcm9uW2ldLCBzaXplKTsKLSAgICAgICAgICAgIGVudmlyb25baV0gPSBwOworICAgICAgICAgICAgbmd4X2NweXN0cm4ocCwgKHVfY2hhciAqKSBlbnZpcm9uW2ldLCBzaXplKTsKKyAgICAgICAgICAgIGVudmlyb25baV0gPSAoY2hhciAqKSBwOwogICAgICAgICAgICAgcCArPSBzaXplOwogICAgICAgICB9CiAgICAgfQpAQCAtNzIsNyArNzMsOCBAQAogfQogCiAKLXZvaWQgbmd4X3NldHByb2N0aXRsZShjaGFyICp0aXRsZSkKK3ZvaWQKK25neF9zZXRwcm9jdGl0bGUoY2hhciAqdGl0bGUpCiB7CiAgICAgdV9jaGFyICAgICAqcDsKIApAQCAtMTMxLDEzICsxMzMsMTYgQEAKIAogI2VsaWYgIWRlZmluZWQobmd4X3NldHByb2N0aXRsZSkKIAotbmd4X2ludF90ICBuZ3hfaW5pdF9zZXRwcm9jdGl0bGUobmd4X2xvZ190ICpsb2cpCituZ3hfaW50X3QKK25neF9pbml0X3NldHByb2N0aXRsZShuZ3hfbG9nX3QgKmxvZykKIHsKICAgICByZXR1cm4gTkdYX09LOwogfQogCi12b2lkIG5neF9zZXRwcm9jdGl0bGUoY2hhciAqdGl0bGUpCit2b2lkCituZ3hfc2V0cHJvY3RpdGxlKGNoYXIgKnRpdGxlKQogeworICAgIHJldHVybjsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpcy5oIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXMuaAppbmRleCA3MDVjZDU3Li40NGNlNzk2IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpcy5oCisrKyBiL3NyYy9vcy91bml4L25neF9zb2xhcmlzLmgKQEAgLTgsMTIgKzgsOCBAQAogI2RlZmluZSBfTkdYX1NPTEFSSVNfSF9JTkNMVURFRF8KIAogCi1uZ3hfaW50X3QgIG5neF9pbml0X3NldHByb2N0aXRsZShuZ3hfbG9nX3QgKmxvZyk7Ci12b2lkIG5neF9zZXRwcm9jdGl0bGUoY2hhciAqdGl0bGUpOwotCi0KIG5neF9jaGFpbl90ICpuZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2NoYWluX3QgKmluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBsaW1pdCk7CisgICAgb2ZmX3QgbGltaXQpOwogCiAKICNlbmRpZiAvKiBfTkdYX1NPTEFSSVNfSF9JTkNMVURFRF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfYXRvbWljLmggYi9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oCmluZGV4IGI0OTE1ZDAuLjcwMjJiZmEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfYXRvbWljLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF9hdG9taWMuaApAQCAtMTQsOCArMTQsMTMgQEAKIAogI2RlZmluZSBOR1hfSEFWRV9BVE9NSUNfT1BTICAgMQogCit0eXBlZGVmIHVpbnQzMl90ICBuZ3hfYXRvbWljX2ludF90OwordHlwZWRlZiB2b2xhdGlsZSBuZ3hfYXRvbWljX2ludF90ICBuZ3hfYXRvbWljX3Q7CisjZGVmaW5lIE5HWF9BVE9NSUNfVF9MRU4gIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKKwogCiAjZGVmaW5lIG5neF9hdG9taWNfaW5jKHApICAgICAgIEludGVybG9ja2VkSW5jcmVtZW50KChsb25nICopIHApCisjZGVmaW5lIG5neF9hdG9taWNfZGVjKHApICAgICAgIEludGVybG9ja2VkRGVjcmVtZW50KChsb25nICopIHApCiAKIAogI2lmIGRlZmluZWQoIF9fV0FUQ09NQ19fICkgfHwgZGVmaW5lZCggX19CT1JMQU5EQ19fICkgfHwgKCBfTVNDX1ZFUiA+PSAxMzAwICkKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmggYi9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCmluZGV4IDdjM2JjZDUuLjViZGY5MWYgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaApAQCAtMTExLDcgKzExMSw2IEBACiB0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgIGluX2FkZHJfdDsKIHR5cGVkZWYgdV9zaG9ydCAgICAgICAgICAgaW5fcG9ydF90OwogdHlwZWRlZiBpbnQgICAgICAgICAgICAgICBzaWdfYXRvbWljX3Q7Ci10eXBlZGVmIHVpbnQzMl90ICAgICAgICAgIG5neF9hdG9taWNfdDsKIAogCiAjZGVmaW5lIE5HWF9TSVpFX1RfTEVOICAgICAgICAgIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEK