ZGlmZiAtLWdpdCBhL2F1dG8vY2MvZ2NjIGIvYXV0by9jYy9nY2MKaW5kZXggMDU5NzA3Mi4uOWUwZTUyZCAxMDA2NDQKLS0tIGEvYXV0by9jYy9nY2MKKysrIGIvYXV0by9jYy9nY2MKQEAgLTM2LDcgKzM2LDcgQEAKIAogY2FzZSAiJE5HWF9NQUNISU5FIiBpbgogCi0gICAgc3VuNHUgfCBzcGFyYyApCisgICAgc3VuNHUgfCBzcGFyYyB8IHNwYXJjNjQgKQogICAgICAgICAjICItbWNwdT12OSIgZW5hYmxlcyB0aGUgImNhc2EiIGFzc2VtYmxlciBpbnN0cnVjdGlvbgogICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLW1jcHU9djkiCiAgICAgOzsKZGlmZiAtLWdpdCBhL2F1dG8vY2MvbXN2YyBiL2F1dG8vY2MvbXN2YwppbmRleCAyOWM0MGM3Li5hODkwMjM0IDEwMDY0NAotLS0gYS9hdXRvL2NjL21zdmMKKysrIGIvYXV0by9jYy9tc3ZjCkBAIC00OSw2ICs0OSw4IEBACiAgICAgOzsKIGVzYWMKIAorIyBfX2NkZWNsLCB1c2Ugd2l0aCBPcGVuU1NMCisjQ1BVX09QVD0iJENQVV9PUFQgLUdkIgogIyBfX3N0ZGNhbGwKICNDUFVfT1BUPSIkQ1BVX09QVCAtR3oiCiAjIF9fZmFzdGNhbGwKZGlmZiAtLWdpdCBhL2F1dG8vY2Mvb3djIGIvYXV0by9jYy9vd2MKaW5kZXggYzgwODhkMi4uODY4ODYwMCAxMDA2NDQKLS0tIGEvYXV0by9jYy9vd2MKKysrIGIvYXV0by9jYy9vd2MKQEAgLTIsNyArMiw3IEBACiAjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKIAogCi0jIE9wZW4gV2F0Y29tIEMgMS4wLCAxLjIKKyMgT3BlbiBXYXRjb20gQyAxLjAsIDEuMiwgMS4zCiAKICMgb3B0aW1pemF0aW9ucwogCkBAIC02MCw3ICs2MCw3IEBACiBDRkxBR1M9IiRDRkxBR1MgLXpxIgogCiAjIE9wZW4gV2F0Y29tIEMgMS4yCi0jaGF2ZT1OR1hfSEFWRV9DOTlfVkFSSUFESUNfTUFDUk9TIC4gYXV0by9oYXZlCitoYXZlPU5HWF9IQVZFX0M5OV9WQVJJQURJQ19NQUNST1MgLiBhdXRvL2hhdmUKIAogCiAjIHRoZSBwcmVjb21waWxlZCBoZWFkZXJzCmRpZmYgLS1naXQgYS9hdXRvL2VuZGlhbmVzcyBiL2F1dG8vZW5kaWFuZXNzCmluZGV4IGRiNjQyMGQuLjBmMTZiYzUgMTAwNjQ0Ci0tLSBhL2F1dG8vZW5kaWFuZXNzCisrKyBiL2F1dG8vZW5kaWFuZXNzCkBAIC0yMCw3ICsyMCw3IEBACiAKIEVORAogCi1uZ3hfdGVzdD0iJENDICRDQ19URVNUX0ZMQUdTICRDQ19XQVJOICRDQ19BVVhfRkxBR1MgXAorbmd4X3Rlc3Q9IiRDQyAkQ0NfVEVTVF9GTEFHUyAkQ0NfQVVYX0ZMQUdTIFwKICAgICAgICAgICAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyAkTkdYX0xEX09QVCAkbmd4X2ZlYXR1cmVfbGlicyIKIAogZXZhbCAiJG5neF90ZXN0ID4+ICROR1hfQVVUT0NPTkZfRVJSIDI+JjEiCmRpZmYgLS1naXQgYS9hdXRvL2ZlYXR1cmUgYi9hdXRvL2ZlYXR1cmUKaW5kZXggMGZiYmU4NC4uNWE0MGM2OSAxMDA2NDQKLS0tIGEvYXV0by9mZWF0dXJlCisrKyBiL2F1dG8vZmVhdHVyZQpAQCAtMzEsNyArMzEsNyBAQAogRU5ECiAKIAotbmd4X3Rlc3Q9IiRDQyAkQ0NfVEVTVF9GTEFHUyAkQ0NfV0FSTiAkQ0NfQVVYX0ZMQUdTIFwKK25neF90ZXN0PSIkQ0MgJENDX1RFU1RfRkxBR1MgJENDX0FVWF9GTEFHUyBcCiAgICAgICAgICAgLW8gJE5HWF9BVVRPVEVTVCAkTkdYX0FVVE9URVNULmMgJE5HWF9MRF9PUFQgJG5neF9mZWF0dXJlX2xpYnMiCiAKIGV2YWwgIiRuZ3hfdGVzdCA+PiAkTkdYX0FVVE9DT05GX0VSUiAyPiYxIgpkaWZmIC0tZ2l0IGEvYXV0by9mbXQvZm10IGIvYXV0by9mbXQvZm10CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzE2ZDliLi4wMDAwMDAwCi0tLSBhL2F1dG8vZm10L2ZtdAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLQotIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2Ci0KLQotZWNobyAkbmd4X24gImNoZWNraW5nIGZvciAkbmd4X3R5cGUgcHJpbnRmKCkgZm9ybWF0IC4uLiRuZ3hfYyIKLQotY2F0IDw8IEVORCA+PiAkTkdYX0FVVE9DT05GX0VSUgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jaGVja2luZyBmb3IgJG5neF90eXBlIHByaW50ZigpIGZvcm1hdAotCi1FTkQKLQotCi1uZ3hfZm9ybWF0PW5vCi1uZ3hfY29tbWE9Ci0KLQotZm9yIG5neF9mbXQgaW4gJG5neF9mb3JtYXRzCi1kbwotCi0gICAgY2F0IDw8IEVORCA+ICROR1hfQVVUT1RFU1QuYwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgotJE5HWF9JTkNMVURFX0lOVFRZUEVTX0gKLSROR1hfSU5DTFVERV9BVVRPX0NPTkZJR19ICi0KLWludCBtYWluKCkgewotICAgIHByaW50ZigiJG5neF9mbXQiLCAoJG5neF90eXBlKSAkbmd4X21heF92YWx1ZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUVORAotCi0gICAgbmd4X3Rlc3Q9IiRDQyAkQ0NfVEVTVF9GTEFHUyAkQ0NfV0FSTiAkQ0NfQVVYX0ZMQUdTIFwKLSAgICAgICAgICAgICAgLW8gJE5HWF9BVVRPVEVTVCAkTkdYX0FVVE9URVNULmMiCi0gICAgZXZhbCAiJG5neF90ZXN0ID4+ICROR1hfQVVUT0NPTkZfRVJSIDI+JjEiCi0KLSAgICBuZ3hfbWF4X3ZhbD1gZWNobyAkbmd4X21heF92YWx1ZSB8IHNlZCAtZSAicy9MKlwkLy8iYAotCi0gICAgaWYgWyAteCAkTkdYX0FVVE9URVNUIF07IHRoZW4KLQotICAgICAgICBpZiBbICJgJE5HWF9BVVRPVEVTVGAiID0gJG5neF9tYXhfdmFsIF07IHRoZW4KLQotICAgICAgICAgICAgaWYgWyAkbmd4X2ZtdF9jb2xsZWN0ID0geWVzIF07IHRoZW4KLSAgICAgICAgICAgICAgICBlY2hvICRuZ3hfbiAiJG5neF9jb21tYSBcIiR7bmd4X2ZtdH1cIiBpcyBhcHByb3ByaWF0ZSRuZ3hfYyIKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlY2hvICRuZ3hfbiAiJG5neF9jb21tYSBcIiR7bmd4X2ZtdH1cIiB1c2VkJG5neF9jIgotICAgICAgICAgICAgZmkKLQotICAgICAgICAgICAgbmd4X2Zvcm1hdD0kbmd4X2ZtdAotICAgICAgICBmaQotICAgIGZpCi0KLSAgICBybSAtZiAkTkdYX0FVVE9URVNUCi0KLSAgICBpZiBbICRuZ3hfZm9ybWF0ICE9IG5vIF07IHRoZW4KLSAgICAgICAgaWYgWyAkbmd4X2ZtdF9jb2xsZWN0ID0geWVzIF07IHRoZW4KLSAgICAgICAgICAgIGV2YWwgIm5neF8ke25neF9zaXplfV9mbXQ9XCJcJHtuZ3hfJHtuZ3hfc2l6ZX1fZm10fSBcJG5neF9mb3JtYXRcIiIKLSAgICAgICAgICAgIG5neF9jb21tYT0iLCIKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgZmkKLQotICAgIGVjaG8gJG5neF9uICIkbmd4X2NvbW1hIFwiJHtuZ3hfZm10fVwiIGlzIG5vdCBhcHByb3ByaWF0ZSRuZ3hfYyIKLSAgICBuZ3hfY29tbWE9IiwiCi0KLSAgICBlY2hvICItLS0tLS0tLS0tIiAgICA+PiAkTkdYX0FVVE9DT05GX0VSUgotICAgIGNhdCAkTkdYX0FVVE9URVNULmMgID4+ICROR1hfQVVUT0NPTkZfRVJSCi0gICAgZWNobyAiLS0tLS0tLS0tLSIgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKLSAgICBlY2hvICRuZ3hfdGVzdCAgICAgICA+PiAkTkdYX0FVVE9DT05GX0VSUgotICAgIGVjaG8gIi0tLS0tLS0tLS0iICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCi1kb25lCi0KLWVjaG8KLQotaWYgWyAkbmd4X2Zvcm1hdCA9IG5vIF07IHRoZW4KLSAgICBlY2hvICIkMDogZXJyb3I6IHByaW50ZigpICRuZ3hfdHlwZSBmb3JtYXQgbm90IGZvdW5kIgotCi0gICAgZXhpdCAxCi1maQotCi0KLWlmIFsgJG5neF9mbXRfY29sbGVjdCA9IG5vIF07IHRoZW4KLSAgICBjYXQgPDwgRU5EID4+ICROR1hfQVVUT19DT05GSUdfSAotCi0jaWZuZGVmICRuZ3hfZm10X25hbWUKLSNkZWZpbmUgJG5neF9mbXRfbmFtZSAgIiRuZ3hfZm9ybWF0IgotI2VuZGlmCi0KLUVORAotCi1maQpkaWZmIC0tZ2l0IGEvYXV0by9mbXQvcHRyZm10IGIvYXV0by9mbXQvcHRyZm10CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmJhOGE0Li4wMDAwMDAwCi0tLSBhL2F1dG8vZm10L3B0cmZtdAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLQotIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2Ci0KLQotZWNobyAkbmd4X24gImNoZWNraW5nIGZvciAkbmd4X3R5cGUgcHJpbnRmKCkgZm9ybWF0IC4uLiRuZ3hfYyIKLQotY2F0IDw8IEVORCA+PiAkTkdYX0FVVE9DT05GX0VSUgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1jaGVja2luZyBmb3IgJG5neF90eXBlIHByaW50ZigpIGZvcm1hdAotCi1FTkQKLQotCi1uZ3hfZm9ybWF0PW5vCi1uZ3hfY29tbWE9Ci1uZ3hfZm10X3g9Ci0KLWZvciBuZ3hfZm10IGluICRuZ3hfZm9ybWF0cwotZG8KLQotICAgIGNhdCA8PCBFTkQgPiAkTkdYX0FVVE9URVNULmMKLQotaW50IG1haW4oKSB7Ci0gICAgcHJpbnRmKCIkbmd4X2ZtdCIsICgkbmd4X3R5cGUpICRuZ3hfbWF4X3ZhbHVlKTsKLSAgICByZXR1cm4gMDsKLX0KLQotRU5ECi0KLSAgICBuZ3hfdGVzdD0iJENDICRDQ19URVNUX0ZMQUdTICRDQ19XQVJOICRDQ19BVVhfRkxBR1MgXAotICAgICAgICAgICAgICAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyIKLSAgICBldmFsICIkbmd4X3Rlc3QgPj4gJE5HWF9BVVRPQ09ORl9FUlIgMj4mMSIKLQotICAgIG5neF9tYXhfdmFsPWBlY2hvICRuZ3hfbWF4X3ZhbHVlIHwgc2VkIC1lICJzL0wqXCQvLyJgCi0KLSAgICBpZiBbIC14ICROR1hfQVVUT1RFU1QgXTsgdGhlbgotICAgICAgICBpZiBbICJgJE5HWF9BVVRPVEVTVGAiID0gJG5neF9tYXhfdmFsIF07IHRoZW4KLSAgICAgICAgICAgIG5neF9mb3JtYXQ9JG5neF9mbXQKLSAgICAgICAgZmkKLSAgICBmaQotCi0gICAgcm0gJE5HWF9BVVRPVEVTVAotCi0gICAgaWYgWyAkbmd4X2Zvcm1hdCAhPSBubyBdOyB0aGVuCi0gICAgICAgIGJyZWFrCi0gICAgZmkKLQotICAgIG5neF9mbXRfeD1gZWNobyAkbmd4X2ZtdCB8IHNlZCAtZSAicy9kL1gvImAKLQotICAgIGVjaG8gJG5neF9uICIkbmd4X2NvbW1hIFwiJHtuZ3hfZm10X3h9XCIgaXMgbm90IGFwcHJvcHJpYXRlJG5neF9jIgotICAgIG5neF9jb21tYT0iLCIKLQotICAgIGVjaG8gIi0tLS0tLS0tLS0iICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCi0gICAgY2F0ICROR1hfQVVUT1RFU1QuYyAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKLSAgICBlY2hvICItLS0tLS0tLS0tIiAgICA+PiAkTkdYX0FVVE9DT05GX0VSUgotICAgIGVjaG8gJG5neF90ZXN0ICAgICAgID4+ICROR1hfQVVUT0NPTkZfRVJSCi0gICAgZWNobyAiLS0tLS0tLS0tLSIgICAgPj4gJE5HWF9BVVRPQ09ORl9FUlIKLWRvbmUKLQotCi1pZiBbICRuZ3hfZm9ybWF0ID0gbm8gXTsgdGhlbgotICAgIGVjaG8gIiQwOiBlcnJvcjogcHJpbnRmKCkgJG5neF90eXBlIGZvcm1hdCBub3QgZm91bmQiCi0KLSAgICBleGl0IDEKLWZpCi0KLQotaWYgWyAkbmd4X3B0cl9zaXplID0gNCBdOyB0aGVuCi0gICAgbmd4X2ZtdF94PSIlMGBleHByIDIgXCogJG5neF9wdHJfc2l6ZWAiCi1lbHNlCi0gICAgbmd4X2ZtdF94PSIlIgotZmkKLQotbmd4X2Zvcm1hdD1gZWNobyAkbmd4X2Zvcm1hdCB8IHNlZCAtZSAicy9kL1gvIiAtZSAicy9eJS8kbmd4X2ZtdF94LyJgCi0KLWVjaG8gIiRuZ3hfY29tbWEgXCIke25neF9mb3JtYXR9XCIgdXNlZCIKLQotCi1jYXQgPDwgRU5EID4+ICROR1hfQVVUT19DT05GSUdfSAotCi0jaWZuZGVmICRuZ3hfZm10X25hbWUKLSNkZWZpbmUgJG5neF9mbXRfbmFtZSAgIiRuZ3hfZm9ybWF0IgotI2VuZGlmCi0KLUVORApkaWZmIC0tZ2l0IGEvYXV0by9mbXQveGZtdCBiL2F1dG8vZm10L3hmbXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1N2U1OTAuLjAwMDAwMDAKLS0tIGEvYXV0by9mbXQveGZtdAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLQotIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2Ci0KLQotY2F0IDw8IEVORCB8IHNlZCAtZSAncy9kIiQveCIvJyA+PiAkTkdYX0FVVE9fQ09ORklHX0gKLQotI2lmbmRlZiAkbmd4X2ZtdF9uYW1lCi0jZGVmaW5lICRuZ3hfZm10X25hbWUgICIkbmd4X2ZtdCIKLSNlbmRpZgotCi1FTkQKZGlmZiAtLWdpdCBhL2F1dG8vbGliL29wZW5zc2wvY29uZiBiL2F1dG8vbGliL29wZW5zc2wvY29uZgppbmRleCAzMzU2Njg5Li4zMmY4MmNhIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9vcGVuc3NsL2NvbmYKKysrIGIvYXV0by9saWIvb3BlbnNzbC9jb25mCkBAIC0yMywyOSArMjMsNDcgQEAKIAogZWxzZQogCi0gICAgaWYgWyAiJE5HWF9QTEFURk9STSIgIT0gd2luMzIgXTsgdGhlbgotICAgICAgICBPUEVOU1NMPU5PCisgICAgY2FzZSAiJE5HWF9QTEFURk9STSIgaW4KIAotICAgICAgICBuZ3hfZmVhdHVyZT0iT3BlblNTTCBsaWJyYXJ5IgotICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJOR1hfT1BFTlNTTCIKLSAgICAgICAgbmd4X2ZlYXR1cmVfcnVuPW5vCi0gICAgICAgIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPiIKLSAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0iLWxzc2wgLWxjcnlwdG8iCi0gICAgICAgIG5neF9mZWF0dXJlX3Rlc3Q9IlNTTF9saWJyYXJ5X2luaXQoKSIKLSAgICAgICAgLiBhdXRvL2ZlYXR1cmUKLQotICAgICAgICBpZiBbICRuZ3hfZm91bmQgPSB5ZXMgXTsgdGhlbgorICAgICAgICB3aW4zMikKKyAgICAgICAgICAgIGhhdmU9TkdYX09QRU5TU0wgLiBhdXRvL2hhdmUKICAgICAgICAgICAgIGhhdmU9TkdYX1NTTCAuIGF1dG8vaGF2ZQotICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRuZ3hfZmVhdHVyZV9saWJzIgogICAgICAgICAgICAgT1BFTlNTTD1ZRVMKIAotICAgICAgICAgICAgY2FzZSAiJE5HWF9TWVNURU0iIGluCi0gICAgICAgICAgICAgICAgU3VuT1MpCi0gICAgICAgICAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAtbGRsIgotICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICBlc2FjCi0gICAgICAgIGZpCisgICAgICAgICAgICBDT1JFX0lOQ1M9IiRDT1JFX0lOQ1MgYzovb3BlbnNzbC9pbmNsdWRlIgorICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIGM6L29wZW5zc2wvc3NsZWF5MzIubGliIgorICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIGM6L29wZW5zc2wvbGliZWF5MzIubGliIgogCi0gICAgZmkKKyAgICAgICAgICAgICMgbGliZWF5MzIubGliIHJlcXVpcmVzIGdkaTMyLmxpYgorICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIGdkaTMyLmxpYiIKKyAgICAgICAgICAgICMgT3BlblNTTCAwLjgncyBsaWJlYXkzMi5saWIgcmVxdWlyZXMgYWR2YXBpMzIubGliCisgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgYWR2YXBpMzIubGliIgorICAgICAgICA7OworCisgICAgICAgICopCisgICAgICAgICAgICBPUEVOU1NMPU5PCisKKyAgICAgICAgICAgIG5neF9mZWF0dXJlPSJPcGVuU1NMIGxpYnJhcnkiCisgICAgICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJOR1hfT1BFTlNTTCIKKyAgICAgICAgICAgIG5neF9mZWF0dXJlX3J1bj1ubworICAgICAgICAgICAgbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+IgorICAgICAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0iLWxzc2wgLWxjcnlwdG8iCisgICAgICAgICAgICBuZ3hfZmVhdHVyZV90ZXN0PSJTU0xfbGlicmFyeV9pbml0KCkiCisgICAgICAgICAgICAuIGF1dG8vZmVhdHVyZQorCisgICAgICAgICAgICBpZiBbICRuZ3hfZm91bmQgPSB5ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgIGhhdmU9TkdYX1NTTCAuIGF1dG8vaGF2ZQorICAgICAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkbmd4X2ZlYXR1cmVfbGlicyIKKyAgICAgICAgICAgICAgICBPUEVOU1NMPVlFUworCisgICAgICAgICAgICAgICAgY2FzZSAiJE5HWF9TWVNURU0iIGluCisgICAgICAgICAgICAgICAgICAgIFN1bk9TKQorICAgICAgICAgICAgICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIC1sZGwiCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgIGVzYWMKIAogZmkKZGlmZiAtLWdpdCBhL2F1dG8vbGliL29wZW5zc2wvbWFrZSBiL2F1dG8vbGliL29wZW5zc2wvbWFrZQppbmRleCBmZjA1YTM4Li4zMWUxNWRjIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9vcGVuc3NsL21ha2UKKysrIGIvYXV0by9saWIvb3BlbnNzbC9tYWtlCkBAIC0xLDYgKzEsNyBAQAogCiAjIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKIAorCiBpZiB0ZXN0IC1uICIkT1BFTlNTTF9PUFQiOyB0aGVuCiAgICAgTkdYX09QRU5TU0xfQ09ORklHPSIuL0NvbmZpZ3VyZSBcIiRPUEVOU1NMX09QVFwiIgogZWxzZQpkaWZmIC0tZ2l0IGEvYXV0by9vcy9jb25mIGIvYXV0by9vcy9jb25mCmluZGV4IDRhZDcyZDguLmY0YmEzODggMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvY29uZgorKysgYi9hdXRvL29zL2NvbmYKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgaGF2ZT1OR1hfSEFWRV9OT05BTElHTkVEIC4gYXV0by9oYXZlCiAgICAgOzsKIAotICAgIHN1bjR1IHwgaWE2NCApCisgICAgc3VuNHUgfCBzcGFyYyB8IHNwYXJjNjQgfCBpYTY0ICkKICAgICAgICAgaGF2ZT1OR1hfQUxJR05NRU5UIHZhbHVlPTE2IC4gYXV0by9kZWZpbmUKICAgICA7OwogCmRpZmYgLS1naXQgYS9hdXRvL29zL2xpbnV4IGIvYXV0by9vcy9saW51eAppbmRleCA2MzU0YmVkLi4zOTAyN2IzIDEwMDY0NAotLS0gYS9hdXRvL29zL2xpbnV4CisrKyBiL2F1dG8vb3MvbGludXgKQEAgLTExMCw1ICsxMTAsNSBAQAogbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHNjaGVkLmg+Igogbmd4X2ZlYXR1cmVfbGlicz0KIG5neF9mZWF0dXJlX3Rlc3Q9ImxvbmcgbWFzayA9IDA7Ci0gICAgICAgICAgICAgICAgICBzY2hlZF9zZXRhZmZpbml0eSgwLCAzMiwgJm1hc2spIgorICAgICAgICAgICAgICAgICAgc2NoZWRfc2V0YWZmaW5pdHkoMCwgMzIsIChjcHVfc2V0X3QgKikgJm1hc2spIgogLiBhdXRvL2ZlYXR1cmUKZGlmZiAtLWdpdCBhL2F1dG8vdHlwZXMvc2l6ZW9mIGIvYXV0by90eXBlcy9zaXplb2YKaW5kZXggNzk2YWVkMS4uMmNkMWZiOCAxMDA2NDQKLS0tIGEvYXV0by90eXBlcy9zaXplb2YKKysrIGIvYXV0by90eXBlcy9zaXplb2YKQEAgLTMxLDcgKzMxLDcgQEAKIEVORAogCiAKLW5neF90ZXN0PSIkQ0MgJENDX1RFU1RfRkxBR1MgJENDX1dBUk4gJENDX0FVWF9GTEFHUyBcCituZ3hfdGVzdD0iJENDICRDQ19URVNUX0ZMQUdTICRDQ19BVVhfRkxBR1MgXAogICAgICAgICAgIC1vICROR1hfQVVUT1RFU1QgJE5HWF9BVVRPVEVTVC5jICROR1hfTERfT1BUICRuZ3hfZmVhdHVyZV9saWJzIgogCiBldmFsICIkbmd4X3Rlc3QgPj4gJE5HWF9BVVRPQ09ORl9FUlIgMj4mMSIKZGlmZiAtLWdpdCBhL2F1dG8vdHlwZXMvdHlwZWRlZiBiL2F1dG8vdHlwZXMvdHlwZWRlZgppbmRleCA0Yjg5NjQzLi44ODRlZjI1IDEwMDY0NAotLS0gYS9hdXRvL3R5cGVzL3R5cGVkZWYKKysrIGIvYXV0by90eXBlcy90eXBlZGVmCkBAIC0zMyw3ICszMyw5IEBACiAKIEVORAogCi0gICAgbmd4X3Rlc3Q9IiRDQyAkQ0NfVEVTVF9GTEFHUyAkQ0NfQVVYX0ZMQUdTIC1vICROR1hfQVVUT1RFU1QgJE5HWF9BVVRPVEVTVC5jIgorICAgIG5neF90ZXN0PSIkQ0MgJENDX1RFU1RfRkxBR1MgJENDX0FVWF9GTEFHUyBcCisgICAgICAgICAgICAgIC1vICROR1hfQVVUT1RFU1QgJE5HWF9BVVRPVEVTVC5jICROR1hfTERfT1BUICRuZ3hfZmVhdHVyZV9saWJzIgorCiAgICAgZXZhbCAiJG5neF90ZXN0ID4+ICROR1hfQVVUT0NPTkZfRVJSIDI+JjEiCiAKICAgICBpZiBbIC14ICROR1hfQVVUT1RFU1QgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvYXV0by91bml4IGIvYXV0by91bml4CmluZGV4IDYyOTVlYzIuLjBmZTI5NzQgMTAwNzU1Ci0tLSBhL2F1dG8vdW5peAorKysgYi9hdXRvL3VuaXgKQEAgLTQsMTAgKzQsNyBAQAogCiBoYXZlPU5HWF9IQVZFX1VOSVhfRE9NQUlOIC4gYXV0by9oYXZlCiAKLQotIyBTVFVCCi1DQ19XQVJOPQotbmd4X2ZtdF9jb2xsZWN0PXllcworbmd4X2ZlYXR1cmVfbGlicz0KIAogCiAjIEMgdHlwZXMKZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggN2Y2ODZlZi4uOTk5ZjExZiAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw2MCBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjEzIiBkYXRlPSIwNS4xMi4yMDA1Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK0lNQVAvUE9QMyDQ0s/L08kg0M/ExMXS1snXwcXUIFNUQVJUVExTIMkgU1RMUy4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBJTUFQL1BPUDMgcHJveHkgc3VwcG9ydHMgU1RBUlRUTFMgYW5kIFNUTFMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorSU1BUC9QT1AzINDSz8vTySDOxSDSwcLP1MHMwSDTIM3F1M/Ewc3JIHNlbGVjdCwgcG9sbCDJIC9kZXYvcG9sbC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBJTUFQL1BPUDMgcHJveHkgZGlkIG5vdCB3b3JrIHdpdGggdGhlIHNlbGVjdCwgcG9sbCwgYW5kIC9kZXYvcG9sbCBtZXRob2RzLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8/bycLLySDXIM/C0sHCz9TLxSBTU0kuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpbiBTU0kgaGFuZGxpbmcuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorc2VuZGZpbGV2KCkg1yBTb2xhcmlzINTF0MXS2CDOxSDJ09DPzNja1cXU09Eg0NLJINDF0sXEwd7FINTFzMEg2sHQ0s/TwQorRmFzdENHSS3TxdLXxdLVIN7F0sXaIHVuaXggZG9tYWluINPPy8XULgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbm93IFNvbGFyaXMgc2VuZGZpbGV2KCkgaXMgbm90IHVzZWQgdG8gdHJhbnNmZXIgdGhlIGNsaWVudCByZXF1ZXN0IGJvZHkKK3RvIEZhc3RDR0ktc2VydmVyIHZpYSB0aGUgdW5peCBkb21haW4gc29ja2V0LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBhdXRoX2Jhc2ljIM7FINrB0NLF3cHMwSDB1dTFztTJxsnLwcPJwDsKK8/bycLLwSDQz9HXyczB09gg1yAwLjMuMTEuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgImF1dGhfYmFzaWMiIGRpcmVjdGl2ZSBkaWQgbm90IGRpc2FibGUgdGhlIGF1dGhvcml6YXRpb247CitidWcgYXBwZWFyZWQgaW4gMC4zLjExLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy4xMiIgZGF0ZT0iMjYuMTEuMjAwNSI+CiAKIDxjaGFuZ2UgdHlwZT0ic2VjdXJpdHkiPgpAQCAtNzUsNyArMTI5LDcgQEAKIAogPGNoYW5nZSB0eXBlPSJidWdmaXgiPgogPHBhcmEgbGFuZz0icnUiPgotxdPMySDLzMnFztQg0MXSxcTBzCDT1NLPy9UgIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIiDXINrBx8/Mz8/Xy8UKK8XTzMkgy8zJxc7UINDF0sXEwcwg09TSz8vVICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIg1yDawcfPzM/Xy8UKINrB0NLP08EsINTPIG5naW54INTF0MXS2CDX2cTBo9Qgz9vJwsvVIDQxMS4KIDwvcGFyYT4KIDxwYXJhIGxhbmc9ImVuIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDQ0YjE1ZjkuLjk1MDVhZWUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4xMiIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuMTMiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX09MRFBJRF9FWFQgICAgICIub2xkYmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCmluZGV4IGQ4OWZhN2YuLjM3N2NhZDUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYworKysgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKQEAgLTE4Miw2ICsxODIsOCBAQAogCiAKICAgICBpZiAoZmlsZW5hbWUpIHsKKyAgICAgICAgbmd4X3BmcmVlKGNmLT5wb29sLCBjZi0+Y29uZl9maWxlLT5idWZmZXItPnN0YXJ0KTsKKwogICAgICAgICBjZi0+Y29uZl9maWxlID0gcHJldjsKIAogICAgICAgICBpZiAobmd4X2Nsb3NlX2ZpbGUoZmQpID09IE5HWF9GSUxFX0VSUk9SKSB7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAppbmRleCAyNzllZmI2Li4zOGE1OWJjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCisrKyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKQEAgLTE0MCw3ICsxNDAsOCBAQAogICAgIHVuc2lnbmVkICAgICAgICAgICAgc2luZ2xlX2Nvbm5lY3Rpb246MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgIHVuZXhwZWN0ZWRfZW9mOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICB0aW1lZG91dDoxOwotICAgIHVuc2lnbmVkICAgICAgICAgICAgY2xvc2VkOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICBlcnJvcjoxOworICAgIHVuc2lnbmVkICAgICAgICAgICAgZGVzdHJveWVkOjE7CiAKICAgICB1bnNpZ25lZCAgICAgICAgICAgIHNlbmRmaWxlOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICBzbmRsb3dhdDoxOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2hhc2guYyBiL3NyYy9jb3JlL25neF9oYXNoLmMKaW5kZXggNmI3NWZhNS4uOWQ0MWRmNiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2hhc2guYworKysgYi9zcmMvY29yZS9uZ3hfaGFzaC5jCkBAIC00Nyw2ICs0NywxMCBAQAogICAgICAgICAgICAgIG4gPCBuZWx0czsKICAgICAgICAgICAgICBuKyssIG5hbWUgPSAobmd4X3N0cl90ICopICgoY2hhciAqKSBuYW1lICsgaGFzaC0+YnVja2V0X3NpemUpKQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobmFtZS0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGtleSA9IDA7CiAKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYW1lLT5sZW47IGkrKykgewpAQCAtMTA0LDYgKzEwOCwxMCBAQAogICAgICAgICAgICAgIG4gPCBuZWx0czsKICAgICAgICAgICAgICBuKyssIG5hbWUgPSAobmd4X3N0cl90ICopICgoY2hhciAqKSBuYW1lICsgaGFzaC0+YnVja2V0X3NpemUpKQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobmFtZS0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGtleSA9IDA7CiAKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYW1lLT5sZW47IGkrKykgewpAQCAtMTM1LDYgKzE0MywxMCBAQAogICAgICAgICAgbiA8IG5lbHRzOwogICAgICAgICAgbisrLCBuYW1lID0gKG5neF9zdHJfdCAqKSAoKGNoYXIgKikgbmFtZSArIGhhc2gtPmJ1Y2tldF9zaXplKSkKICAgICB7CisgICAgICAgIGlmIChuYW1lLT5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAga2V5ID0gMDsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmFtZS0+bGVuOyBpKyspIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9wYWxsb2MuYyBiL3NyYy9jb3JlL25neF9wYWxsb2MuYwppbmRleCBhMWY5ZDU5Li4zYmIwYjM1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcGFsbG9jLmMKKysrIGIvc3JjL2NvcmUvbmd4X3BhbGxvYy5jCkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKChzaXplX3QpIChwLT5lbmQgLSBtKSA8IE5HWF9BTElHTk1FTlQpIHsKLSAgICAgICAgICAgICAgICBwLT5jdXJyZW50ID0gcC0+bmV4dDsKKyAgICAgICAgICAgICAgICBwb29sLT5jdXJyZW50ID0gcC0+bmV4dDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHAtPm5leHQgPT0gTlVMTCkgewpAQCAtMTE3LDggKzExNyw4IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwLT5jdXJyZW50ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHAtPmN1cnJlbnQgPSBuOworICAgICAgICBpZiAocG9vbC0+Y3VycmVudCA9PSBOVUxMKSB7CisgICAgICAgICAgICBwb29sLT5jdXJyZW50ID0gbjsKICAgICAgICAgfQogCiAgICAgICAgIHAtPm5leHQgPSBuOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3JidHJlZS5oIGIvc3JjL2NvcmUvbmd4X3JidHJlZS5oCmluZGV4IDFiMTMyMmQuLmE1N2VjNzcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9yYnRyZWUuaAorKysgYi9zcmMvY29yZS9uZ3hfcmJ0cmVlLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3Qgbmd4X3JidHJlZV9zICBuZ3hfcmJ0cmVlX3Q7CiAKLXR5cGVkZWYgbmd4X3JidHJlZV90ICooKm5neF9yYnRyZWVfaW5zZXJ0X3B0KSAobmd4X3JidHJlZV9ub2RlX3QgKnJvb3QsCit0eXBlZGVmIG5neF9yYnRyZWVfbm9kZV90ICooKm5neF9yYnRyZWVfaW5zZXJ0X3B0KSAobmd4X3JidHJlZV9ub2RlX3QgKnJvb3QsCiAgICAgbmd4X3JidHJlZV9ub2RlX3QgKm5vZGUsIG5neF9yYnRyZWVfbm9kZV90ICpzZW50aW5lbCk7CiAKIHN0cnVjdCBuZ3hfcmJ0cmVlX3MgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3Jlc29sdmVyLmMgYi9zcmMvY29yZS9uZ3hfcmVzb2x2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ3Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2NvcmUvbmd4X3Jlc29sdmVyLmMKQEAgLTAsMCArMSwxODMgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKyAqLworCisKKyNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CisjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKyNpbmNsdWRlIDxuZ3hfZXZlbnQuaD4KKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICpjb25uZWN0aW9uOworCisgICAgc3RydWN0IHNvY2thZGRyICAgICAgICpzb2NrYWRkcjsKKyAgICBzb2NrbGVuX3QgICAgICAgICAgICAgIHNvY2tsZW47CisKKyAgICBuZ3hfc3RyX3IgICAgICAgICAgICAgIHNlcnZlcjsKKyAgICBuZ3hfc3RyX3IgICAgICAgICAgICAgIG5hbWU7CisKKyAgICBuZ3hfZXZlbnRfaGFuZGxlcl9wdCAgIGhhbmRsZXI7CisKKyAgICBuZ3hfbG9nX3QgICAgICAgICAgICAgKnBvb2w7CisgICAgbmd4X2xvZ190ICAgICAgICAgICAgICpsb2c7Cit9IG5neF9yZXNvbHZlcl90OworCisKK25neF9pbnRfdAorbmd4X2dldGhvc3RieW5hbWUobmd4X3Jlc29sdmVyX3QgKnIpCit7CisgICAgbmd4X3NvY2tldF90ICBzOworCisgICAgaWYgKHItPmNvbm5lY3Rpb24pIHsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICBzID0gbmd4X3NvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIHItPmxvZywgMCwgInNvY2tldCAlZCIsIHMpOworCisgICAgaWYgKHMgPT0gLTEpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgbmd4X3NvY2tldF9uICIgZmFpbGVkIik7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgYyA9IG5neF9nZXRfY29ubmVjdGlvbihzLCByLT5sb2cpOworCisgICAgaWYgKGMgPT0gTlVMTCkgeworICAgICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChzKSA9PSAtMSkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9zb2NrZXRfbiAiZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIHJldiA9IGMtPnJlYWQ7CisgICAgd2V2ID0gYy0+d3JpdGU7CisKKyAgICByZXYtPmxvZyA9IHBjLT5sb2c7CisgICAgd2V2LT5sb2cgPSBwYy0+bG9nOworCisgICAgci0+Y29ubmVjdGlvbiA9IGM7CisKKyAgICAvKgorICAgICAqIFRPRE86IE1UOiAtIG5neF9hdG9taWNfZmV0Y2hfYWRkKCkKKyAgICAgKiAgICAgICAgICAgICBvciBwcm90ZWN0aW9uIGJ5IGNyaXRpY2FsIHNlY3Rpb24gb3IgbXV0ZXgKKyAgICAgKgorICAgICAqIFRPRE86IE1QOiAtIGFsbG9jYXRlZCBpbiBhIHNoYXJlZCBtZW1vcnkKKyAgICAgKiAgICAgICAgICAgLSBuZ3hfYXRvbWljX2ZldGNoX2FkZCgpCisgICAgICogICAgICAgICAgICAgb3IgcHJvdGVjdGlvbiBieSBjcml0aWNhbCBzZWN0aW9uIG9yIG11dGV4CisgICAgICovCisKKyAgICBjLT5udW1iZXIgPSBuZ3hfYXRvbWljX2ZldGNoX2FkZChuZ3hfY29ubmVjdGlvbl9jb3VudGVyLCAxKTsKKworI2lmIChOR1hfVEhSRUFEUykKKyAgICByZXYtPmxvY2sgPSBwYy0+bG9jazsKKyAgICB3ZXYtPmxvY2sgPSBwYy0+bG9jazsKKyAgICByZXYtPm93bl9sb2NrID0gJmMtPmxvY2s7CisgICAgd2V2LT5vd25fbG9jayA9ICZjLT5sb2NrOworI2VuZGlmCisKKyAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBwYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJjb25uZWN0IHRvICVWLCBmZDolZCAjJWQiLCAmci0+c2VydmVyLCBzLCBjLT5udW1iZXIpOworCisgICAgcmMgPSBjb25uZWN0KHMsIHItPnNvY2thZGRyLCByLT5zb2NrbGVuKTsKKworICAgIGlmIChyYyA9PSAtMSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKGxldmVsLCByLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QoKSB0byAlViBmYWlsZWQiLCAmci0+c2VydmVyKTsKKworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworCisKKworCisKKworICAgIGlmIChuZ3hfYWRkX2Nvbm4pIHsKKyAgICAgICAgaWYgKG5neF9hZGRfY29ubihjKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIGlmIChuZ3hfYWRkX2Nvbm4pIHsKKyAgICAgICAgaWYgKHJjID09IC0xKSB7CisKKyAgICAgICAgICAgIC8qIE5HWF9FSU5QUk9HUkVTUyAqLworCisgICAgICAgICAgICByZXR1cm4gTkdYX0FHQUlOOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgcGMtPmxvZywgMCwgImNvbm5lY3RlZCIpOworCisgICAgICAgIHdldi0+cmVhZHkgPSAxOworCisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfQUlPX0VWRU5UKSB7CisKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgcGMtPmxvZywgbmd4X3NvY2tldF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgImNvbm5lY3QoKTogJWQiLCByYyk7CisKKyAgICAgICAgLyogYWlvLCBpb2NwICovCisKKyAgICAgICAgaWYgKG5neF9ibG9ja2luZyhzKSA9PSAtMSkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBwYy0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYmxvY2tpbmdfbiAiIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEZyZWVCU0QncyBhaW8gYWxsb3dzIHRvIHBvc3QgYW4gb3BlcmF0aW9uIG9uIG5vbi1jb25uZWN0ZWQgc29ja2V0LgorICAgICAgICAgKiBOVCBkb2VzIG5vdCBzdXBwb3J0IGl0LgorICAgICAgICAgKgorICAgICAgICAgKiBUT0RPOiBjaGVjayBpbiBXaW4zMiwgZXRjLiBBcyB3b3JrYXJvdW5kIHdlIGNhbiB1c2UgTkdYX09ORVNIT1RfRVZFTlQKKyAgICAgICAgICovCisKKyAgICAgICAgcmV2LT5yZWFkeSA9IDE7CisgICAgICAgIHdldi0+cmVhZHkgPSAxOworCisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfQ0xFQVJfRVZFTlQpIHsKKworICAgICAgICAvKiBrcXVldWUgKi8KKworICAgICAgICBldmVudCA9IE5HWF9DTEVBUl9FVkVOVDsKKworICAgIH0gZWxzZSB7CisKKyAgICAgICAgLyogc2VsZWN0LCBwb2xsLCAvZGV2L3BvbGwgKi8KKworICAgICAgICBldmVudCA9IE5HWF9MRVZFTF9FVkVOVDsKKyAgICB9CisKKyAgICBpZiAobmd4X2FkZF9ldmVudChyZXYsIE5HWF9SRUFEX0VWRU5ULCBldmVudCkgIT0gTkdYX09LKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgaWYgKHJjID09IC0xKSB7CisKKyAgICAgICAgLyogTkdYX0VJTlBST0dSRVNTICovCisKKyAgICAgICAgaWYgKG5neF9hZGRfZXZlbnQod2V2LCBOR1hfV1JJVEVfRVZFTlQsIGV2ZW50KSAhPSBOR1hfT0spIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTkdYX0FHQUlOOworICAgIH0KKworICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfRVZFTlQsIHBjLT5sb2csIDAsICJjb25uZWN0ZWQiKTsKKworICAgIHdldi0+cmVhZHkgPSAxOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuYyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwppbmRleCBmYzM3MzgyLi5mMDQyZDdjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCkBAIC0xMDM2LDMgKzEwMzYsMTkgQEAKICAgICAqZHN0ID0gZDsKICAgICAqc3JjID0gczsKIH0KKworCisjaWYgKE5HWF9NRU1DUFlfTElNSVQpCisKK3ZvaWQgKgorbmd4X21lbWNweSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisgICAgaWYgKG4gPiBOR1hfTUVNQ1BZX0xJTUlUKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbmd4X2N5Y2xlLT5sb2csIDAsICJtZW1jcHkgJXV6IGJ5dGVzIiwgbik7CisgICAgICAgIG5neF9kZWJ1Z19wb2ludCgpOworICAgIH0KKworICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMsIG4pOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuaCBiL3NyYy9jb3JlL25neF9zdHJpbmcuaAppbmRleCAwYmVlOThiLi4wMTkyYTMwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5oCkBAIC02Myw2ICs2MywxMyBAQAogI2RlZmluZSBuZ3hfbWVtc2V0KGJ1ZiwgYywgbikgICAgICh2b2lkKSBtZW1zZXQoYnVmLCBjLCBuKQogCiAKKyNpZiAoTkdYX01FTUNQWV9MSU1JVCkKKwordm9pZCAqbmd4X21lbWNweSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IG4pOworI2RlZmluZSBuZ3hfY3B5bWVtKGRzdCwgc3JjLCBuKSAgICgodV9jaGFyICopIG5neF9tZW1jcHkoZHN0LCBzcmMsIG4pKSArIChuKQorCisjZWxzZQorCiAvKgogICogZ2NjMywgbXN2YywgYW5kIGljYzcgY29tcGlsZSBtZW1jcHkoKSB0byB0aGUgaW5saW5lICJyZXAgbW92cyIuCiAgKiBnY2MzIGNvbXBpbGVzIG1lbWNweShkLCBzLCA0KSB0byB0aGUgaW5saW5lICJtb3YiZXMuCkBAIC03MSw2ICs3OCw4IEBACiAjZGVmaW5lIG5neF9tZW1jcHkoZHN0LCBzcmMsIG4pICAgKHZvaWQpIG1lbWNweShkc3QsIHNyYywgbikKICNkZWZpbmUgbmd4X2NweW1lbShkc3QsIHNyYywgbikgICAoKHVfY2hhciAqKSBtZW1jcHkoZHN0LCBzcmMsIG4pKSArIChuKQogCisjZW5kaWYKKwogCiAjaWYgKCBfX0lOVEVMX0NPTVBJTEVSID49IDgwMCApCiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jCmluZGV4IDgzOWFmYjUuLjg4YjViM2YgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYwpAQCAtMjc2LDggKzI3NiwxMCBAQAogbmd4X2txdWV1ZV9hZGRfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZXZlbnQsIHVfaW50IGZsYWdzKQogewogICAgIG5neF9pbnRfdCAgICAgICAgICByYzsKKyNpZiAwCiAgICAgbmd4X2V2ZW50X3QgICAgICAgKmU7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7CisjZW5kaWYKIAogICAgIGV2LT5hY3RpdmUgPSAxOwogICAgIGV2LT5kaXNhYmxlZCA9IDA7CkBAIC0yODUsMTIgKzI4NywxMSBAQAogCiAgICAgbmd4X211dGV4X2xvY2sobGlzdF9tdXRleCk7CiAKLSNpZiAxCisjaWYgMAogCi0gICAgaWYgKG5jaGFuZ2VzID4gMAotICAgICAgICAmJiBldi0+aW5kZXggPCAodV9pbnQpIG5jaGFuZ2VzCisgICAgaWYgKGV2LT5pbmRleCA8ICh1X2ludCkgbmNoYW5nZXMKICAgICAgICAgJiYgKCh1aW50cHRyX3QpIGNoYW5nZV9saXN0W2V2LT5pbmRleF0udWRhdGEgJiAodWludHB0cl90KSB+MSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSAodWludHB0cl90KSBldikKKyAgICAgICAgICAgID09ICh1aW50cHRyX3QpIGV2KQogICAgIHsKICAgICAgICAgaWYgKGNoYW5nZV9saXN0W2V2LT5pbmRleF0uZmxhZ3MgPT0gRVZfRElTQUJMRSkgewogCkBAIC0zNDYsMTIgKzM0Nyw5IEBACiAKICAgICBuZ3hfbXV0ZXhfbG9jayhsaXN0X211dGV4KTsKIAotI2lmIDEKLQotICAgIGlmIChuY2hhbmdlcyA+IDAKLSAgICAgICAgJiYgZXYtPmluZGV4IDwgKHVfaW50KSBuY2hhbmdlcworICAgIGlmIChldi0+aW5kZXggPCAodV9pbnQpIG5jaGFuZ2VzCiAgICAgICAgICYmICgodWludHB0cl90KSBjaGFuZ2VfbGlzdFtldi0+aW5kZXhdLnVkYXRhICYgKHVpbnRwdHJfdCkgfjEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gKHVpbnRwdHJfdCkgZXYpCisgICAgICAgICAgICA9PSAodWludHB0cl90KSBldikKICAgICB7CiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQgZGVsZXRlZDogJWQ6IGZ0OiVkIiwKQEAgLTM1OSw3ICszNTcsOSBAQAogCiAgICAgICAgIC8qIGlmIHRoZSBldmVudCBpcyBzdGlsbCBub3QgcGFzc2VkIHRvIGEga2VybmVsIHdlIHdpbGwgbm90IHBhc3MgaXQgKi8KIAotICAgICAgICBpZiAoZXYtPmluZGV4IDwgKHVfaW50KSAtLW5jaGFuZ2VzKSB7CisgICAgICAgIG5jaGFuZ2VzLS07CisKKyAgICAgICAgaWYgKGV2LT5pbmRleCA8ICh1X2ludCkgbmNoYW5nZXMpIHsKICAgICAgICAgICAgIGUgPSAobmd4X2V2ZW50X3QgKikKICAgICAgICAgICAgICAgICAgICAgKCh1aW50cHRyX3QpIGNoYW5nZV9saXN0W25jaGFuZ2VzXS51ZGF0YSAmICh1aW50cHRyX3QpIH4xKTsKICAgICAgICAgICAgIGNoYW5nZV9saXN0W2V2LT5pbmRleF0gPSBjaGFuZ2VfbGlzdFtuY2hhbmdlc107CkBAIC0zNzEsOCArMzcxLDYgQEAKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKLSNlbmRpZgotCiAgICAgLyoKICAgICAgKiB3aGVuIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY2xvc2VkIHRoZSBrcXVldWUgYXV0b21hdGljYWxseSBkZWxldGVzCiAgICAgICogaXRzIGZpbHRlcnMgc28gd2UgZG8gbm90IG5lZWQgdG8gZGVsZXRlIGV4cGxpY2l0eSB0aGUgZXZlbnQKQEAgLTU1MSw3ICs1NDksOSBAQAogCiAgICAgICAgIGlmIChldmVudF9saXN0W2ldLmZsYWdzICYgRVZfRVJST1IpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgZXZlbnRfbGlzdFtpXS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgZXJyb3Igb24gJWQiLCBldmVudF9saXN0W2ldLmlkZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIGVycm9yIG9uICVkIGZpbHRlcjolZCBmbGFnczolMDRYZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2xpc3RbaV0uaWRlbnQsIGV2ZW50X2xpc3RbaV0uZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmZsYWdzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMKaW5kZXggMzRlZTI1Mi4uZTRjYTIzOCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMKQEAgLTE4MSw2ICsxODEsMTEgQEAKICAgICBpZiAocGVlci0+c29ja2FkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB7CiAgICAgICAgIGMtPnRjcF9ub3B1c2ggPSBOR1hfVENQX05PUFVTSF9ESVNBQkxFRDsKICAgICAgICAgYy0+dGNwX25vZGVsYXkgPSBOR1hfVENQX05PREVMQVlfRElTQUJMRUQ7CisKKyNpZiAoTkdYX1NPTEFSSVMpCisgICAgICAgIC8qIFNvbGFyaXMncyBzZW5kZmlsZXYoKSBzdXBwb3J0cyBBRl9OQ0EsIEFGX0lORVQsIGFuZCBBRl9JTkVUNiAqLworICAgICAgICBjLT5zZW5kZmlsZSA9IDA7CisjZW5kaWYKICAgICB9CiAKICAgICByZXYgPSBjLT5yZWFkOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwppbmRleCA3ZWZiNzEzLi40NDE0NzJlIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwpAQCAtMzAxLDEyICszMDEsMTIgQEAKIAogICAgICAgICAgICAgKmQgPSAnXDAnOwogCi0gICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMOiAlcywgY2lwaGVyOiBcIiVzXCIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX2dldF92ZXJzaW9uKGMtPnNzbC0+Y29ubmVjdGlvbiksICZidWZbMV0pOwogCiAgICAgICAgICAgICBpZiAoU1NMX3Nlc3Npb25fcmV1c2VkKGMtPnNzbC0+Y29ubmVjdGlvbikpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTU0wgcmV1c2VkIHNlc3Npb24iKTsKICAgICAgICAgICAgIH0KIApAQCAtNjMwLDcgKzYzMCw3IEBACiAgICAgZm9yICggOzsgKSB7CiAKICAgICAgICAgd2hpbGUgKGluICYmIGJ1Zi0+bGFzdCA8IGJ1Zi0+ZW5kKSB7Ci0gICAgICAgICAgICBpZiAoaW4tPmJ1Zi0+bGFzdF9idWYpIHsKKyAgICAgICAgICAgIGlmIChpbi0+YnVmLT5sYXN0X2J1ZiB8fCBpbi0+YnVmLT5mbHVzaCkgewogICAgICAgICAgICAgICAgIGZsdXNoID0gMTsKICAgICAgICAgICAgIH0KIApAQCAtNjQ1LDExICs2NDUsNiBAQAogICAgICAgICAgICAgICAgIHNpemUgPSBidWYtPmVuZCAtIGJ1Zi0+bGFzdDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRPRE86IHRoZSB0YWtpbmcgaW4tPmJ1Zi0+Zmx1c2ggaW50byBhY2NvdW50IGNhbiBiZQotICAgICAgICAgICAgICogICAgICAgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIGxpbWl0IG9uIHRoZSBoaWdoZXIgbGV2ZWwKLSAgICAgICAgICAgICAqLwotCiAgICAgICAgICAgICBpZiAoc2VuZCArIHNpemUgPiBsaW1pdCkgewogICAgICAgICAgICAgICAgIHNpemUgPSAoc3NpemVfdCkgKGxpbWl0IC0gc2VuZCk7CiAgICAgICAgICAgICAgICAgZmx1c2ggPSAxOwpAQCAtOTQzLDcgKzkzOCw3IEBACiB9CiAKIAotdm9pZAordm9pZCBuZ3hfY2RlY2wKIG5neF9zc2xfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsIGNoYXIgKmZtdCwgLi4uKQogewogICAgIHVfbG9uZyAgIG47CkBAIC05NTgsNyArOTUzLDEzIEBACiAKICAgICBwID0gbmd4X2NweXN0cm4ocCwgKHVfY2hhciAqKSAiIChTU0w6IiwgbGFzdCAtIHApOwogCi0gICAgd2hpbGUgKHAgPCBsYXN0ICYmIChuID0gRVJSX2dldF9lcnJvcigpKSkgeworICAgIHdoaWxlIChwIDwgbGFzdCkgeworCisgICAgICAgIG4gPSBFUlJfZ2V0X2Vycm9yKCk7CisKKyAgICAgICAgaWYgKG4gPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICAqcCsrID0gJyAnOwogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCmluZGV4IDYzY2IzMzMuLjY2ZWRjNTIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oCkBAIC03OSw3ICs3OSw3IEBACiBuZ3hfY2hhaW5fdCAqbmd4X3NzbF9zZW5kX2NoYWluKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9jaGFpbl90ICppbiwKICAgICBvZmZfdCBsaW1pdCk7CiBuZ3hfaW50X3Qgbmd4X3NzbF9zaHV0ZG93bihuZ3hfY29ubmVjdGlvbl90ICpjKTsKLXZvaWQgbmd4X3NzbF9lcnJvcihuZ3hfdWludF90IGxldmVsLCBuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwKK3ZvaWQgbmd4X2NkZWNsIG5neF9zc2xfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCiAgICAgY2hhciAqZm10LCAuLi4pOwogdm9pZCBuZ3hfc3NsX2NsZWFudXBfY3R4KHZvaWQgKmRhdGEpOwogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCmluZGV4IDc3OWVjMTguLjBjNDk5YTggMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCkBAIC00MDcsMTIgKzQwNywxNSBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2V2ZW50X3BpcGVfd3JpdGVfdG9fZG93bnN0cmVhbShuZ3hfZXZlbnRfcGlwZV90ICpwKQogewotICAgIHNpemVfdCAgICAgICAgYnNpemU7Ci0gICAgbmd4X3VpbnRfdCAgICBmbHVzaDsKLSAgICBuZ3hfY2hhaW5fdCAgKm91dCwgKipsbCwgKmNsOworICAgIHNpemVfdCAgICAgICAgICAgICBic2l6ZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgZmx1c2g7CisgICAgbmd4X2NoYWluX3QgICAgICAgKm91dCwgKipsbCwgKmNsOworICAgIG5neF9jb25uZWN0aW9uX3QgICpkb3duc3RyZWFtOworCisgICAgZG93bnN0cmVhbSA9IHAtPmRvd25zdHJlYW07CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgInBpcGUgd3JpdGUgZG93bnN0cmVhbTogJWQiLCBwLT5kb3duc3RyZWFtLT53cml0ZS0+cmVhZHkpOworICAgICAgICAgICAgICAgICAgICJwaXBlIHdyaXRlIGRvd25zdHJlYW06ICVkIiwgZG93bnN0cmVhbS0+d3JpdGUtPnJlYWR5KTsKIAogICAgIGZvciAoIDs7ICkgewogICAgICAgICBpZiAocC0+ZG93bnN0cmVhbV9lcnJvcikgewpAQCAtNDUyLDYgKzQ1NSwxMSBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChwLT5vdXRwdXRfZmlsdGVyKHAtPm91dHB1dF9jdHgsIHAtPmluKSA9PSBOR1hfRVJST1IpIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZG93bnN0cmVhbS0+ZGVzdHJveWVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0FCT1JUOworICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgcC0+ZG93bnN0cmVhbV9lcnJvciA9IDE7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfZXZlbnRfcGlwZV9kcmFpbl9jaGFpbnMocCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDY4LDkgKzQ3Niw5IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwLT5kb3duc3RyZWFtLT5kYXRhICE9IHAtPm91dHB1dF9jdHgKLSAgICAgICAgICAgIHx8ICFwLT5kb3duc3RyZWFtLT53cml0ZS0+cmVhZHkKLSAgICAgICAgICAgIHx8IHAtPmRvd25zdHJlYW0tPndyaXRlLT5kZWxheWVkKQorICAgICAgICBpZiAoZG93bnN0cmVhbS0+ZGF0YSAhPSBwLT5vdXRwdXRfY3R4CisgICAgICAgICAgICB8fCAhZG93bnN0cmVhbS0+d3JpdGUtPnJlYWR5CisgICAgICAgICAgICB8fCBkb3duc3RyZWFtLT53cml0ZS0+ZGVsYXllZCkKICAgICAgICAgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYwppbmRleCBjZjg1NTU3Li40ODE5MmNhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZS5jCkBAIC0zNzksNiArMzc5LDggQEAKICAgICBpZiAobmd4X3N0cmNtcChyZWFsbS0+ZGF0YSwgIm9mZiIpID09IDApIHsKICAgICAgICAgcmVhbG0tPmxlbiA9IDA7CiAgICAgICAgIHJlYWxtLT5kYXRhID0gKHVfY2hhciAqKSAiIjsKKworICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiAgICAgfQogCiAgICAgbGVuID0gc2l6ZW9mKCJCYXNpYyByZWFsbT1cIiIpIC0gMSArIHJlYWxtLT5sZW4gKyAxOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IDEyNWI4ZTAuLjQ1YjZlNzMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTE0MTksNyArMTQxOSw4IEBACiB7CiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdCAgKnZhcjsKIAotICAgIHZhciA9IG5neF9odHRwX2FkZF92YXJpYWJsZShjZiwgJm5neF9odHRwX2Zhc3RjZ2lfc2NyaXB0X25hbWUsIDApOworICAgIHZhciA9IG5neF9odHRwX2FkZF92YXJpYWJsZShjZiwgJm5neF9odHRwX2Zhc3RjZ2lfc2NyaXB0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX1ZBUl9OT0hBU0gpOwogICAgIGlmICh2YXIgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ2VvX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nZW9fbW9kdWxlLmMKaW5kZXggODIzMWRlMS4uYmY3YjkyNSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nZW9fbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nZW9fbW9kdWxlLmMKQEAgLTEzMCwxOCArMTMwLDE0IEBACiAgICAgdmFyLT5oYW5kbGVyID0gbmd4X2h0dHBfZ2VvX3ZhcmlhYmxlOwogICAgIHZhci0+ZGF0YSA9ICh1aW50cHRyX3QpIHRyZWU7CiAKLSAgICAvKgotICAgICAqIGNyZWF0ZSB0aGUgdGVtcG9yYXJ5IHBvb2wgb2YgYSBodWdlIGluaXRpYWwgc2l6ZQotICAgICAqIHRvIHByb2Nlc3MgcXVpY2tseSBhIGxhcmdlIG51bWJlciBvZiBnZW8gbGluZXMKLSAgICAgKi8KLQotICAgIHBvb2wgPSBuZ3hfY3JlYXRlX3Bvb2woNTEyICogMTAyNCwgY2YtPmxvZyk7CisgICAgcG9vbCA9IG5neF9jcmVhdGVfcG9vbCgxNjM4NCwgY2YtPmxvZyk7CiAgICAgaWYgKHBvb2wgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCiAgICAgaWYgKG5neF9hcnJheV9pbml0KCZnZW8udmFsdWVzLCBwb29sLCA1MTIsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICopKSA9PSBOR1hfRVJST1IpCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICopKQorICAgICAgICA9PSBOR1hfRVJST1IpCiAgICAgewogICAgICAgICBuZ3hfZGVzdHJveV9wb29sKHBvb2wpOwogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA2NmQ1OTM1Li5lODE5NzU5IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlLmMKQEAgLTk2MSw3ICs5NjEsNyBAQAogICAgIG5neF9odHRwX3ZhcmlhYmxlX3QgICAgICp2YXI7CiAgICAgbmd4X2h0dHBfbG9nX29wX25hbWVfdCAgKm9wOwogCi0gICAgdmFyID0gbmd4X2h0dHBfYWRkX3ZhcmlhYmxlKGNmLCAmbmd4X2h0dHBfZ3ppcF9yYXRpbywgMCk7CisgICAgdmFyID0gbmd4X2h0dHBfYWRkX3ZhcmlhYmxlKGNmLCAmbmd4X2h0dHBfZ3ppcF9yYXRpbywgTkdYX0hUVFBfVkFSX05PSEFTSCk7CiAgICAgaWYgKHZhciA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKaW5kZXggODI3OGQzNC4uYWZhZGMxOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCkBAIC0zNTksMjAgKzM1OSwyMCBAQAogc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3QgIG5neF9odHRwX3Byb3h5X3ZhcnNbXSA9IHsKIAogICAgIHsgbmd4X3N0cmluZygicHJveHlfaG9zdCIpLCBuZ3hfaHR0cF9wcm94eV9ob3N0X3ZhcmlhYmxlLCAwLAotICAgICAgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSwgMCB9LAorICAgICAgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRXxOR1hfSFRUUF9WQVJfTk9IQVNILCAwIH0sCiAKICAgICB7IG5neF9zdHJpbmcoInByb3h5X3BvcnQiKSwgbmd4X2h0dHBfcHJveHlfcG9ydF92YXJpYWJsZSwgMCwKLSAgICAgIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEUsIDAgfSwKKyAgICAgIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEV8TkdYX0hUVFBfVkFSX05PSEFTSCwgMCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9hZGRfeF9mb3J3YXJkZWRfZm9yIiksCi0gICAgICBuZ3hfaHR0cF9wcm94eV9hZGRfeF9mb3J3YXJkZWRfZm9yX3ZhcmlhYmxlLCAwLCAwLCAwIH0sCisgICAgICBuZ3hfaHR0cF9wcm94eV9hZGRfeF9mb3J3YXJkZWRfZm9yX3ZhcmlhYmxlLCAwLCBOR1hfSFRUUF9WQVJfTk9IQVNILCAwIH0sCiAKICNpZiAwCi0gICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9hZGRfdmlhIiksIE5VTEwsIDAsIDAsIDAgfSwKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X2FkZF92aWEiKSwgTlVMTCwgMCwgTkdYX0hUVFBfVkFSX05PSEFTSCwgMCB9LAogI2VuZGlmCiAKICAgICB7IG5neF9zdHJpbmcoInByb3h5X2ludGVybmFsX2JvZHlfbGVuZ3RoIiksCi0gICAgICBuZ3hfaHR0cF9wcm94eV9pbnRlcm5hbF9ib2R5X2xlbmd0aF92YXJpYWJsZSwgMCwgMCwgMCB9LAorICAgICAgbmd4X2h0dHBfcHJveHlfaW50ZXJuYWxfYm9keV9sZW5ndGhfdmFyaWFibGUsIDAsIE5HWF9IVFRQX1ZBUl9OT0hBU0gsIDAgfSwKIAogICAgIHsgbmd4X251bGxfc3RyaW5nLCBOVUxMLCAwLCAwLCAwIH0KIH07CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlZmVyZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlZmVyZXJfbW9kdWxlLmMKaW5kZXggYTNkM2Q0Ni4uY2Q4YmU3OCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWZlcmVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmVmZXJlcl9tb2R1bGUuYwpAQCAtMjE3LDcgKzIxNyw4IEBACiAgICAgbmFtZS5sZW4gPSBzaXplb2YoImludmFsaWRfcmVmZXJlciIpIC0gMTsKICAgICBuYW1lLmRhdGEgPSAodV9jaGFyICopICJpbnZhbGlkX3JlZmVyZXIiOwogCi0gICAgdmFyID0gbmd4X2h0dHBfYWRkX3ZhcmlhYmxlKGNmLCAmbmFtZSwgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRSk7CisgICAgdmFyID0gbmd4X2h0dHBfYWRkX3ZhcmlhYmxlKGNmLCAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hUVFBfVkFSX0NIQU5HQUJMRXxOR1hfSFRUUF9WQVJfTk9IQVNIKTsKICAgICBpZiAodmFyID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA2ZjRhYzQ1Li5kZDBlOTJmIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCkBAIC02NDgsMTMgKzY0OCwxNyBAQAogCiAgICAgICAgICAgICAgICAgcmMgPSBjbWQtPmhhbmRsZXIociwgY3R4LCBwYXJhbXMpOwogCi0gICAgICAgICAgICAgICAgaWYgKGMtPmNsb3NlZCkgeworICAgICAgICAgICAgICAgIGlmIChjLT5kZXN0cm95ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9ET05FOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfT0spIHsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHJjID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCmluZGV4IDgwOGQ5NDUuLjE1MDRmMjQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCkBAIC0yNDQsNiArMjQ0LDEyIEBACiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgfQogCisgICAgci0+YWxsb3dfcmFuZ2VzID0gMTsKKworICAgIGlmIChyLT5oZWFkZXJfb25seSB8fCAoci0+bWFpbiAhPSByICYmIG5neF9maWxlX3NpemUoJmZpKSA9PSAwKSkgeworICAgICAgICByZXR1cm4gbmd4X2h0dHBfc2VuZF9oZWFkZXIocik7CisgICAgfQorCiAgICAgLyogd2UgbmVlZCB0byBhbGxvY2F0ZSBhbGwgYmVmb3JlIHRoZSBoZWFkZXIgd291bGQgYmUgc2VudCAqLwogCiAgICAgYiA9IG5neF9wY2FsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfYnVmX3QpKTsKQEAgLTI1NiwxMSArMjYyLDkgQEAKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICB9CiAKLSAgICByLT5hbGxvd19yYW5nZXMgPSAxOwotCiAgICAgcmMgPSBuZ3hfaHR0cF9zZW5kX2hlYWRlcihyKTsKIAotICAgIGlmIChyYyA9PSBOR1hfRVJST1IgfHwgcmMgPiBOR1hfT0sgfHwgci0+aGVhZGVyX29ubHkpIHsKKyAgICBpZiAocmMgPT0gTkdYX0VSUk9SIHx8IHJjID4gTkdYX09LKSB7CiAgICAgICAgIHJldHVybiByYzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYwppbmRleCBjNzdkY2EyLi4xNTliZDM0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCkBAIC01NTQsNyArNTU0LDcgQEAKICAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAqdmFyOwogICAgIG5neF9odHRwX2xvZ19vcF9uYW1lX3QgICpvcDsKIAotICAgIHZhciA9IG5neF9odHRwX2FkZF92YXJpYWJsZShjZiwgJm5neF9odHRwX3VzZXJpZF9nb3QsIDApOworICAgIHZhciA9IG5neF9odHRwX2FkZF92YXJpYWJsZShjZiwgJm5neF9odHRwX3VzZXJpZF9nb3QsIE5HWF9IVFRQX1ZBUl9OT0hBU0gpOwogICAgIGlmICh2YXIgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KQEAgLTU2Miw3ICs1NjIsNyBAQAogICAgIHZhci0+aGFuZGxlciA9IG5neF9odHRwX3VzZXJpZF92YXJpYWJsZTsKICAgICB2YXItPmRhdGEgPSBvZmZzZXRvZihuZ3hfaHR0cF91c2VyaWRfY3R4X3QsIHVpZF9nb3QpOwogCi0gICAgdmFyID0gbmd4X2h0dHBfYWRkX3ZhcmlhYmxlKGNmLCAmbmd4X2h0dHBfdXNlcmlkX3NldCwgMCk7CisgICAgdmFyID0gbmd4X2h0dHBfYWRkX3ZhcmlhYmxlKGNmLCAmbmd4X2h0dHBfdXNlcmlkX3NldCwgTkdYX0hUVFBfVkFSX05PSEFTSCk7CiAgICAgaWYgKHZhciA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29weV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3B5X2ZpbHRlcl9tb2R1bGUuYwppbmRleCBjMjUxMjczLi5iYmEzZjVkIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3B5X2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3B5X2ZpbHRlcl9tb2R1bGUuYwpAQCAtNzAsMTEgKzcwLDE1IEBACiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9jb3B5X2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9jaGFpbl90ICppbikKIHsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICAgICpjOwogICAgIG5neF9vdXRwdXRfY2hhaW5fY3R4X3QgICAgICAgKmN0eDsKICAgICBuZ3hfaHR0cF9jb3B5X2ZpbHRlcl9jb25mX3QgICpjb25mOwogCi0gICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImNvcHkgZmlsdGVyOiBcIiVWXCIiLCAmci0+dXJpKTsKKyAgICBjID0gci0+Y29ubmVjdGlvbjsKKworICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJjb3B5IGZpbHRlcjogXCIlVj8lVlwiIiwgJnItPnVyaSwgJnItPmFyZ3MpOwogCiAgICAgY3R4ID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9jdHgociwgbmd4X2h0dHBfY29weV9maWx0ZXJfbW9kdWxlKTsKIApAQCAtODgsNyArOTIsNyBAQAogCiAgICAgICAgIG5neF9odHRwX3NldF9jdHgociwgY3R4LCBuZ3hfaHR0cF9jb3B5X2ZpbHRlcl9tb2R1bGUpOwogCi0gICAgICAgIGN0eC0+c2VuZGZpbGUgPSByLT5jb25uZWN0aW9uLT5zZW5kZmlsZTsKKyAgICAgICAgY3R4LT5zZW5kZmlsZSA9IGMtPnNlbmRmaWxlOwogICAgICAgICBjdHgtPm5lZWRfaW5fbWVtb3J5ID0gci0+bWFpbl9maWx0ZXJfbmVlZF9pbl9tZW1vcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHItPmZpbHRlcl9uZWVkX2luX21lbW9yeTsKICAgICAgICAgY3R4LT5uZWVkX2luX3RlbXAgPSByLT5maWx0ZXJfbmVlZF90ZW1wb3Jhcnk7CkBAIC0xMDIsOSArMTA2LDE2IEBACiAKICAgICB9CiAKLSAgICAvKiB0aGUgcmVxdWVzdCBwb29sIG1heSBiZSBhbHJlYWR5IGRlc3Ryb3llZCBhZnRlciBuZ3hfb3V0cHV0X2NoYWluKCkqLworICAgIHJjID0gbmd4X291dHB1dF9jaGFpbihjdHgsIGluKTsKIAotICAgIHJldHVybiBuZ3hfb3V0cHV0X2NoYWluKGN0eCwgaW4pOworI2lmIChOR1hfREVCVUcpCisgICAgaWYgKCFjLT5kZXN0cm95ZWQpIHsKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJjb3B5IGZpbHRlcjogJWkgXCIlVj8lVlwiIiwgcmMsICZyLT51cmksICZyLT5hcmdzKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByYzsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCA0NzQzMzg5Li5jMTAwYmVlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTk2NiwxNCArOTY2LDE0IEBACiB7CiAgICAgbmd4X2ludF90ICByYzsKIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIG91dHB1dCBmaWx0ZXIgXCIlVlwiIiwgJnItPnVyaSk7CisgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImh0dHAgb3V0cHV0IGZpbHRlciBcIiVWPyVWXCIiLCAmci0+dXJpLCAmci0+YXJncyk7CiAKICAgICByYyA9IG5neF9odHRwX3RvcF9ib2R5X2ZpbHRlcihyLCBpbik7CiAKICAgICBpZiAocmMgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgIC8qIE5HWF9FUlJPUiBtYXkgYmUgcmV0dXJuZWQgYnkgYW55IGZpbHRlciAqLwotICAgICAgICByLT5jb25uZWN0aW9uLT5jbG9zZWQgPSAxOworICAgICAgICByLT5jb25uZWN0aW9uLT5lcnJvciA9IDE7CiAgICAgfQogCiAgICAgcmV0dXJuIHJjOwpAQCAtMTA4MCw2ICsxMDgwLDcgQEAKIG5neF9odHRwX3N1YnJlcXVlc3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9zdHJfdCAqdXJpLCBuZ3hfc3RyX3QgKmFyZ3MsIG5neF91aW50X3QgZmxhZ3MpCiB7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAgICAgKmM7CiAgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAgICAgICAgICAgKnNyOwogICAgIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAgICAgICpjc2NmOwogICAgIG5neF9odHRwX3Bvc3Rwb25lZF9yZXF1ZXN0X3QgICpwciwgKnA7CkBAIC0xMDkwLDcgKzEwOTEsOSBAQAogICAgIH0KIAogICAgIHNyLT5zaWduYXR1cmUgPSBOR1hfSFRUUF9NT0RVTEU7Ci0gICAgc3ItPmNvbm5lY3Rpb24gPSByLT5jb25uZWN0aW9uOworCisgICAgYyA9IHItPmNvbm5lY3Rpb247CisgICAgc3ItPmNvbm5lY3Rpb24gPSBjOwogCiAgICAgc3ItPmN0eCA9IG5neF9wY2FsbG9jKHItPnBvb2wsIHNpemVvZih2b2lkICopICogbmd4X2h0dHBfbWF4X21vZHVsZSk7CiAgICAgaWYgKHNyLT5jdHggPT0gTlVMTCkgewpAQCAtMTEyOCwxNiArMTEzMSwxMyBAQAogICAgIHNyLT5yZXF1ZXN0X2xpbmUgPSByLT5yZXF1ZXN0X2xpbmU7CiAgICAgc3ItPnVyaSA9ICp1cmk7CiAKLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiaHR0cCBzdWJyZXF1ZXN0IFwiJVZcIiIsIHVyaSk7Ci0KICAgICBpZiAoYXJncykgewogICAgICAgICBzci0+YXJncyA9ICphcmdzOwotCi0gICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBzdWJyZXF1ZXN0IGFyZ3MgXCIlVlwiIiwgYXJncyk7CiAgICAgfQogCisgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImh0dHAgc3VicmVxdWVzdCBcIiVWPyVWXCIiLCB1cmksICZzci0+YXJncyk7CisKICAgICBpZiAoZmxhZ3MgJiBOR1hfSFRUUF9aRVJPX0lOX1VSSSkgewogICAgICAgICBzci0+emVyb19pbl91cmkgPSAxOwogICAgIH0KQEAgLTExNTUsOCArMTE1NSw4IEBACiAgICAgc3ItPnJlYWRfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX3JlcXVlc3RfZW1wdHlfaGFuZGxlcjsKICAgICBzci0+d3JpdGVfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX3JlcXVlc3RfZW1wdHlfaGFuZGxlcjsKIAotICAgIGlmIChyLT5jb25uZWN0aW9uLT5kYXRhID09IHIpIHsKLSAgICAgICAgc3ItPmNvbm5lY3Rpb24tPmRhdGEgPSBzcjsKKyAgICBpZiAoYy0+ZGF0YSA9PSByKSB7CisgICAgICAgIGMtPmRhdGEgPSBzcjsKICAgICB9CiAKICAgICBzci0+aW5fYWRkciA9IHItPmluX2FkZHI7CkBAIC0xMTkyLDcgKzExOTIsMTIgQEAKIAogICAgIG5neF9odHRwX2hhbmRsZXIoc3IpOwogCi0gICAgLyogdGhlIHJlcXVlc3QgcG9vbCBtYXkgYmUgYWxyZWFkeSBkZXN0cm95ZWQgKi8KKyNpZiAoTkdYX0xPR19ERUJVRykKKyAgICBpZiAoIWMtPmRlc3Ryb3llZCkgeworICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgc3VicmVxdWVzdCBkb25lIFwiJVY/JVZcIiIsIHVyaSwgJnNyLT5hcmdzKTsKKyAgICB9CisjZW5kaWYKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC0xMjA0LDIyICsxMjA5LDE5IEBACiB7CiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCByZWRpcmVjdDogXCIlVlwiIiwgdXJpKTsKLQogICAgIHItPnVyaSA9ICp1cmk7CiAKICAgICBpZiAoYXJncykgewogICAgICAgICByLT5hcmdzID0gKmFyZ3M7CiAKLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCByZWRpcmVjdCBhcmdzOiBcIiVWXCIiLCBhcmdzKTsKLQogICAgIH0gZWxzZSB7CiAgICAgICAgIHItPmFyZ3MubGVuID0gMDsKICAgICAgICAgci0+YXJncy5kYXRhID0gTlVMTDsKICAgICB9CiAKKyAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgcmVkaXJlY3Q6IFwiJVY/JVZcIiIsIHVyaSwgJnItPmFyZ3MpOworCiAgICAgaWYgKG5neF9odHRwX3NldF9leHRlbihyKSAhPSBOR1hfT0spIHsKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggOWM1NmY0Ni4uNDc4MzkzYyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9tb2R1bGUuYwpAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxuZ3hfaHR0cC5oPgogCiAKK3N0YXRpYyBuZ3hfaW50X3QKKyAgICBuZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfb3V0cHV0X3Bvc3Rwb25lZF9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqcik7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CiAKIApAQCAtNTMsOCArNTUsOCBAQAogICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICAgICpvdXQ7CiAgICAgbmd4X2h0dHBfcG9zdHBvbmVkX3JlcXVlc3RfdCAgKnByLCAqKnBwcjsKIAotICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHBvc3Rwb25lIGZpbHRlciBcIiVWXCIgJXAiLCAmci0+dXJpLCBpbik7CisgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImh0dHAgcG9zdHBvbmUgZmlsdGVyIFwiJVY/JVZcIiAlcCIsICZyLT51cmksICZyLT5hcmdzLCBpbik7CiAKICAgICBpZiAociAhPSByLT5jb25uZWN0aW9uLT5kYXRhIHx8IChyLT5wb3N0cG9uZWQgJiYgaW4pKSB7CiAKQEAgLTEwNCwxNCArMTA2LDI1IEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgcG9zdHBvbmUgZmlsdGVyIG91dCBcIiVWXCIiLCAmci0+dXJpKTsKKyAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAiaHR0cCBwb3N0cG9uZSBmaWx0ZXIgb3V0IFwiJVY/JVZcIiIsICZyLT51cmksICZyLT5hcmdzKTsKIAogICAgIHJjID0gbmd4X2h0dHBfbmV4dF9maWx0ZXIoci0+bWFpbiwgb3V0KTsKIAogICAgIGlmIChyYyA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgLyogTkdYX0VSUk9SIG1heSBiZSByZXR1cm5lZCBieSBhbnkgZmlsdGVyICovCi0gICAgICAgIHItPmNvbm5lY3Rpb24tPmNsb3NlZCA9IDE7CisgICAgICAgIHItPmNvbm5lY3Rpb24tPmVycm9yID0gMTsKKyAgICB9CisKKyAgICBpZiAoci0+cG9zdHBvbmVkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIHJjID0gbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX291dHB1dF9wb3N0cG9uZWRfcmVxdWVzdChyKTsKKworICAgIGlmIChyYyA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgLyogTkdYX0VSUk9SIG1heSBiZSByZXR1cm5lZCBieSBhbnkgZmlsdGVyICovCisgICAgICAgIHItPmNvbm5lY3Rpb24tPmVycm9yID0gMTsKICAgICB9CiAKICAgICByZXR1cm4gcmM7CkBAIC0xMTksNiArMTMyLDU1IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX291dHB1dF9wb3N0cG9uZWRfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCit7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgIHJjOworICAgIG5neF9odHRwX3Bvc3Rwb25lZF9yZXF1ZXN0X3QgICpwcjsKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICBwciA9IHItPnBvc3Rwb25lZDsKKworICAgICAgICBpZiAocHIgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwci0+cmVxdWVzdCkgeworCisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHBvc3Rwb25lIGZpbHRlciBoYW5kbGUgXCIlVj8lVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZwci0+cmVxdWVzdC0+dXJpLCAmcHItPnJlcXVlc3QtPmFyZ3MpOworCisgICAgICAgICAgICBpZiAoIXByLT5yZXF1ZXN0LT5kb25lKSB7CisgICAgICAgICAgICAgICAgci0+Y29ubmVjdGlvbi0+ZGF0YSA9IHByLT5yZXF1ZXN0OworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJjID0gbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX291dHB1dF9wb3N0cG9uZWRfcmVxdWVzdChwci0+cmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfQUdBSU4gfHwgcmMgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByLT5wb3N0cG9uZWQgPSByLT5wb3N0cG9uZWQtPm5leHQ7CisgICAgICAgICAgICBwciA9IHItPnBvc3Rwb25lZDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwci0+b3V0KSB7CisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHBvc3Rwb25lIGZpbHRlciBvdXQgcG9zdHBvbmVkIFwiJVY/JVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmci0+dXJpLCAmci0+YXJncyk7CisKKyAgICAgICAgICAgIGlmIChuZ3hfaHR0cF9uZXh0X2ZpbHRlcihyLT5tYWluLCBwci0+b3V0KSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgci0+cG9zdHBvbmVkID0gci0+cG9zdHBvbmVkLT5uZXh0OworICAgIH0KK30KKworCitzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgbmd4X2h0dHBfbmV4dF9maWx0ZXIgPSBuZ3hfaHR0cF90b3BfYm9keV9maWx0ZXI7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggZjY5NTA1Ni4uNTY5ZjYyZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMzAsNyArMzAsNiBAQAogc3RhdGljIHZvaWQgbmd4X2h0dHBfcmVxdWVzdF9oYW5kbGVyKG5neF9ldmVudF90ICpldik7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3NldF93cml0ZV9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcik7CiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF93cml0ZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfcG9zdHBvbmVkX2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKIAogc3RhdGljIHZvaWQgbmd4X2h0dHBfYmxvY2tfcmVhZChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogc3RhdGljIHZvaWQgbmd4X2h0dHBfcmVhZF9kaXNjYXJkZWRfYm9keV9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcik7CkBAIC00MDQsNiArNDAzLDggQEAKICAgICB9CiAKICAgICBjLT5zaW5nbGVfY29ubmVjdGlvbiA9IDE7CisgICAgYy0+ZGVzdHJveWVkID0gMDsKKwogICAgIHItPmNvbm5lY3Rpb24gPSBjOwogCiAgICAgci0+bWFpbiA9IHI7CkBAIC00NTUsNyArNDU2LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG4gPSByZWN2KGMtPmZkLCBidWYsIDEsIE1TR19QRUVLKTsKKyAgICBuID0gcmVjdihjLT5mZCwgKGNoYXIgKikgYnVmLCAxLCBNU0dfUEVFSyk7CiAKICAgICBpZiAobiA9PSAtMSAmJiBuZ3hfc29ja2V0X2Vycm5vID09IE5HWF9FQUdBSU4pIHsKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ0OCwxMCArMTQ0OSwxMSBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgZmluYWxpemUgcmVxdWVzdDogJWQsIFwiJVZcIiIsIHJjLCAmci0+dXJpKTsKKyAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAiaHR0cCBmaW5hbGl6ZSByZXF1ZXN0OiAlZCwgXCIlVj8lVlwiIiwKKyAgICAgICAgICAgICAgICAgICByYywgJnItPnVyaSwgJnItPmFyZ3MpOwogCi0gICAgaWYgKHJjID09IE5HWF9FUlJPUiB8fCByLT5jb25uZWN0aW9uLT5jbG9zZWQpIHsKKyAgICBpZiAocmMgPT0gTkdYX0VSUk9SIHx8IHItPmNvbm5lY3Rpb24tPmVycm9yKSB7CiAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDgyLDggKzE0ODQsOSBAQAogICAgIHItPmRvbmUgPSAxOwogCiAgICAgaWYgKHIgIT0gci0+Y29ubmVjdGlvbi0+ZGF0YSkgewotICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgZmluYWxpemUgbm9uLWFjdGl2ZSByZXF1ZXN0OiBcIiVWXCIiLCAmci0+dXJpKTsKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJodHRwIGZpbmFsaXplIG5vbi1hY3RpdmUgcmVxdWVzdDogXCIlVj8lVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgJnItPnVyaSwgJnItPmFyZ3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNDkxLDggKzE0OTQsOCBAQAogCiAgICAgICAgIHByID0gci0+cGFyZW50OwogCi0gICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBwYXJlbnQgcmVxdWVzdDogXCIlVlwiIiwgJnByLT51cmkpOworICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcGFyZW50IHJlcXVlc3Q6IFwiJVY/JVZcIiIsICZwci0+dXJpLCAmcHItPmFyZ3MpOwogCiAgICAgICAgIGlmIChyYyAhPSBOR1hfQUdBSU4pIHsKICAgICAgICAgICAgIHByLT5jb25uZWN0aW9uLT5kYXRhID0gcHI7CkBAIC0xNTAwLDggKzE1MDMsOSBAQAogCiAgICAgICAgIGlmIChwci0+cG9zdHBvbmVkKSB7CiAKLSAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcmVxdWVzdDogXCIlVlwiIGhhcyBwb3N0cG9uZWQiLCAmcHItPnVyaSk7CisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHJlcXVlc3Q6IFwiJVY/JVZcIiBoYXMgcG9zdHBvbmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZwci0+dXJpLCAmcHItPmFyZ3MpOwogCiAgICAgICAgICAgICBpZiAocmMgIT0gTkdYX0FHQUlOICYmIHByLT5wb3N0cG9uZWQtPnJlcXVlc3QgPT0gcikgewogICAgICAgICAgICAgICAgIHByLT5wb3N0cG9uZWQgPSBwci0+cG9zdHBvbmVkLT5uZXh0OwpAQCAtMTUxMSwxMyArMTUxNSwxNCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCByZXF1ZXN0OiBcIiVWXCIgc3RpbGwgaGFzIHBvc3Rwb25lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmcHItPnVyaSk7CisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHJlcXVlc3Q6IFwiJVY/JVZcIiBzdGlsbCBoYXMgcG9zdHBvbmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZwci0+dXJpLCAmcHItPmFyZ3MpOwogCi0gICAgICAgICAgICBpZiAocHItPmRvbmUpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCB3YWtlIHBhcmVudCByZXF1ZXN0OiBcIiVWXCIiLCAmcHItPnVyaSk7CisgICAgICAgICAgICBpZiAocHItPmRvbmUgfHwgcHItPnBvc3Rwb25lZC0+b3V0KSB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgd2FrZSBwYXJlbnQgcmVxdWVzdDogXCIlVj8lVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHItPnVyaSwgJnByLT5hcmdzKTsKIAogICAgICAgICAgICAgICAgIHByLT53cml0ZV9ldmVudF9oYW5kbGVyKHByKTsKICAgICAgICAgICAgIH0KQEAgLTE2MTksOCArMTYyNCw4IEBACiAgICAgYyA9IHItPmNvbm5lY3Rpb247CiAgICAgd2V2ID0gYy0+d3JpdGU7CiAKLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHdldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHdyaXRlciBoYW5kbGVyOiBcIiVWXCIiLCAmci0+dXJpKTsKKyAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHdldi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIHdyaXRlciBoYW5kbGVyOiBcIiVWPyVWXCIiLCAmci0+dXJpLCAmci0+YXJncyk7CiAKICAgICBpZiAod2V2LT50aW1lZG91dCkgewogICAgICAgICBpZiAoIXdldi0+ZGVsYXllZCkgewpAQCAtMTY2MSwyMSArMTY2NiwxNSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHItPnBvc3Rwb25lZCkgewotICAgICAgICByYyA9IG5neF9odHRwX3Bvc3Rwb25lZF9oYW5kbGVyKHIpOworICAgIHJjID0gbmd4X2h0dHBfb3V0cHV0X2ZpbHRlcihyLCBOVUxMKTsKIAotICAgICAgICBpZiAocmMgPT0gTkdYX0RPTkUpIHsKLSAgICAgICAgICAgIC8qIHRoZSByZXF1ZXN0IHBvb2wgbWF5IGJlIGFscmVhZHkgZGVzdHJveWVkICovCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJjID0gbmd4X2h0dHBfb3V0cHV0X2ZpbHRlcihyLCBOVUxMKTsKLQorICAgIGlmIChjLT5kZXN0cm95ZWQpIHsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHdyaXRlciBvdXRwdXQgZmlsdGVyOiAlZCwgXCIlVlwiIiwgcmMsICZyLT51cmkpOworICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIHdyaXRlciBvdXRwdXQgZmlsdGVyOiAlZCwgXCIlVj8lVlwiIiwKKyAgICAgICAgICAgICAgICAgICByYywgJnItPnVyaSwgJnItPmFyZ3MpOwogCiAgICAgaWYgKHJjID09IE5HWF9BR0FJTikgewogICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLT5tYWluLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CkBAIC0xNjkwLDY3ICsxNjg5LDEzIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHdldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHdyaXRlciBkb25lOiBcIiVWXCIiLCAmci0+dXJpKTsKKyAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHdldi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIHdyaXRlciBkb25lOiBcIiVWPyVWXCIiLCAmci0+dXJpLCAmci0+YXJncyk7CiAKICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIHJjKTsKIH0KIAogCi1zdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9wb3N0cG9uZWRfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCi17Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgIHJjOwotICAgIG5neF9odHRwX3Bvc3Rwb25lZF9yZXF1ZXN0X3QgICpwcjsKLQotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHBvc3Rwb25lIGhhbmRsZXIgXCIlVlwiIiwgJnItPnVyaSk7Ci0KLSAgICBwciA9IHItPnBvc3Rwb25lZDsKLQotICAgIGlmIChwci0+cmVxdWVzdCA9PSBOVUxMKSB7Ci0gICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBwb3N0cG9uZWQgZGF0YSBcIiVWXCIgJXAiLCAmci0+dXJpLCBwci0+b3V0KTsKLQotICAgICAgICByYyA9IG5neF9odHRwX291dHB1dF9maWx0ZXIociwgTlVMTCk7Ci0KLSAgICAgICAgaWYgKHJjID09IE5HWF9ET05FKSB7Ci0gICAgICAgICAgICAvKiB0aGUgcmVxdWVzdCBwb29sIGlzIGFscmVhZHkgZGVzdHJveWVkICovCi0gICAgICAgICAgICByZXR1cm4gTkdYX0RPTkU7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcG9zdHBvbmVkIG91dHB1dCBmaWx0ZXI6ICVkIiwgcmMpOwotCi0gICAgICAgIGlmIChyYyA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0RPTkU7Ci0gICAgICAgIH0KLQotICAgICAgICBwciA9IHItPnBvc3Rwb25lZDsKLQotICAgICAgICBpZiAocHIgPT0gTlVMTCkgewotCi0gICAgICAgICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHIgPSBwci0+cmVxdWVzdDsKLSAgICByLT5jb25uZWN0aW9uLT5kYXRhID0gcjsKLQotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHdha2UgY2hpbGQgcmVxdWVzdCBcIiVWXCIiLCAmci0+dXJpKTsKLQotICAgIHItPndyaXRlX2V2ZW50X2hhbmRsZXIocik7Ci0KLSAgICByZXR1cm4gTkdYX0RPTkU7Ci19Ci0KLQogc3RhdGljIHZvaWQKIG5neF9odHRwX2Jsb2NrX3JlYWQobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewpAQCAtMTg2Miw3ICsxODA3LDcgQEAKIAogICAgIGlmIChuID09IE5HWF9FUlJPUikgewogCi0gICAgICAgIHItPmNvbm5lY3Rpb24tPmNsb3NlZCA9IDE7CisgICAgICAgIHItPmNvbm5lY3Rpb24tPmVycm9yID0gMTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBpZiBhIGNsaWVudCByZXF1ZXN0IGJvZHkgaXMgZGlzY2FyZGVkIHRoZW4gd2UgYWxyZWFkeSBzZXQKQEAgLTIwMjksMjAgKzE5NzQsMTAgQEAKIAogICAgIHJldi0+aGFuZGxlciA9IG5neF9odHRwX2tlZXBhbGl2ZV9oYW5kbGVyOwogCi0gICAgaWYgKHdldi0+YWN0aXZlKSB7Ci0gICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgewotICAgICAgICAgICAgaWYgKG5neF9kZWxfZXZlbnQod2V2LCBOR1hfV1JJVEVfRVZFTlQsIE5HWF9ESVNBQkxFX0VWRU5UKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9MRVZFTF9FVkVOVCkgewotICAgICAgICAgICAgaWYgKG5neF9kZWxfZXZlbnQod2V2LCBOR1hfV1JJVEVfRVZFTlQsIDApID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgIGlmICh3ZXYtPmFjdGl2ZSAmJiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9MRVZFTF9FVkVOVCkpIHsKKyAgICAgICAgaWYgKG5neF9kZWxfZXZlbnQod2V2LCBOR1hfV1JJVEVfRVZFTlQsIDApID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjIyNCwyMCArMjE1OSwxMCBAQAogICAgIHdldiA9IGMtPndyaXRlOwogICAgIHdldi0+aGFuZGxlciA9IG5neF9odHRwX2VtcHR5X2hhbmRsZXI7CiAKLSAgICBpZiAod2V2LT5hY3RpdmUpIHsKLSAgICAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7Ci0gICAgICAgICAgICBpZiAobmd4X2RlbF9ldmVudCh3ZXYsIE5HWF9XUklURV9FVkVOVCwgTkdYX0RJU0FCTEVfRVZFTlQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0xFVkVMX0VWRU5UKSB7Ci0gICAgICAgICAgICBpZiAobmd4X2RlbF9ldmVudCh3ZXYsIE5HWF9XUklURV9FVkVOVCwgMCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCAwKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgaWYgKHdldi0+YWN0aXZlICYmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0xFVkVMX0VWRU5UKSkgeworICAgICAgICBpZiAobmd4X2RlbF9ldmVudCh3ZXYsIE5HWF9XUklURV9FVkVOVCwgMCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIDApOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMzI0LDcgKzIyNDksNyBAQAogbmd4X2h0dHBfcmVxdWVzdF9lbXB0eV9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiaHR0cCByZXF1ZXRzIGVtcHR5IGhhbmRsZXIiKTsKKyAgICAgICAgICAgICAgICAgICAiaHR0cCByZXF1ZXN0IGVtcHR5IGhhbmRsZXIiKTsKIAogICAgIHJldHVybjsKIH0KQEAgLTI0NDIsNiArMjM2Nyw4IEBACiAKICAgICByLT5yZXF1ZXN0X2xpbmUubGVuID0gMDsKIAorICAgIHItPmNvbm5lY3Rpb24tPmRlc3Ryb3llZCA9IDE7CisKICAgICBuZ3hfZGVzdHJveV9wb29sKHItPnBvb2wpOwogfQogCkBAIC0yNDY5LDYgKzIzOTYsOCBAQAogICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X2FjdGl2ZSwgLTEpOwogI2VuZGlmCiAKKyAgICBjLT5kZXN0cm95ZWQgPSAxOworCiAgICAgcG9vbCA9IGMtPnBvb2w7CiAKICAgICBuZ3hfY2xvc2VfY29ubmVjdGlvbihjKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3RfYm9keS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKaW5kZXggNzc5ZWRmOS4uNDhhZmY3NCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKG4gPT0gMCB8fCBuID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgYy0+Y2xvc2VkID0gMTsKKyAgICAgICAgICAgIGMtPmVycm9yID0gMTsKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9CQURfUkVRVUVTVDsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwppbmRleCAzN2U5NzlhLi5jZmFjYTZlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKQEAgLTIzNCw3ICsyMzQsNyBAQAogfTsKIAogCi1zdGF0aWMgbmd4X2h0dHBfbG9nX29wX25hbWVfdCBuZ3hfaHR0cF91cHN0cmVhbV9sb2dfZm10X29wc1tdID0geworc3RhdGljIG5neF9odHRwX2xvZ19vcF9uYW1lX3QgIG5neF9odHRwX3Vwc3RyZWFtX2xvZ19mbXRfb3BzW10gPSB7CiAgICAgeyBuZ3hfc3RyaW5nKCJ1cHN0cmVhbV9zdGF0dXMiKSwgMCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2xvZ19zdGF0dXNfZ2V0bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fbG9nX3N0YXR1cyB9LApAQCAtMjQ4LDEwICsyNDgsMTAgQEAKIHN0YXRpYyBuZ3hfaHR0cF92YXJpYWJsZV90ICBuZ3hfaHR0cF91cHN0cmVhbV92YXJzW10gPSB7CiAKICAgICB7IG5neF9zdHJpbmcoInVwc3RyZWFtX3N0YXR1cyIpLAotICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fc3RhdHVzX3ZhcmlhYmxlLCAwLCAwLCAwIH0sCisgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9zdGF0dXNfdmFyaWFibGUsIDAsIE5HWF9IVFRQX1ZBUl9OT0hBU0gsIDAgfSwKIAogICAgIHsgbmd4X3N0cmluZygidXBzdHJlYW1fcmVzcG9uc2VfdGltZSIpLAotICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fcmVzcG9uc2VfdGltZV92YXJpYWJsZSwgMCwgMCwgMCB9LAorICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fcmVzcG9uc2VfdGltZV92YXJpYWJsZSwgMCwgTkdYX0hUVFBfVkFSX05PSEFTSCwgMCB9LAogCiAgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIE5VTEwsIDAsIDAsIDAgfQogfTsKQEAgLTM4Nyw3ICszODcsNyBAQAogICAgIGMgPSByLT5jb25uZWN0aW9uOwogICAgIHUgPSByLT51cHN0cmVhbTsKIAotICAgIGlmIChjLT5jbG9zZWQpIHsKKyAgICBpZiAoYy0+ZXJyb3IpIHsKICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX0NMSUVOVF9DTE9TRURfUkVRVUVTVCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQwNiw3ICs0MDYsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZXYtPmVvZiA9IDE7Ci0gICAgICAgIGMtPmNsb3NlZCA9IDE7CisgICAgICAgIGMtPmVycm9yID0gMTsKIAogICAgICAgICBpZiAoZXYtPmtxX2Vycm5vKSB7CiAgICAgICAgICAgICBldi0+ZXJyb3IgPSAxOwpAQCAtNDczLDcgKzQ3Myw3IEBACiAgICAgfQogCiAgICAgZXYtPmVvZiA9IDE7Ci0gICAgYy0+Y2xvc2VkID0gMTsKKyAgICBjLT5lcnJvciA9IDE7CiAKICAgICBpZiAoIXUtPmNhY2hhYmxlICYmIHUtPnBlZXIuY29ubmVjdGlvbikgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgZXYtPmxvZywgZXJyLApAQCAtMTEyNSwxMiArMTEyNSwxNCBAQAogc3RhdGljIHZvaWQKIG5neF9odHRwX3Vwc3RyZWFtX3NlbmRfcmVzcG9uc2Uobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF91cHN0cmVhbV90ICp1KQogeworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX25vZGVsYXk7CiAgICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgcmM7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICBpLCBrZXk7CiAgICAgbmd4X2xpc3RfcGFydF90ICAgICAgICAgICAgICAgICpwYXJ0OwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAqaDsKICAgICBuZ3hfZXZlbnRfcGlwZV90ICAgICAgICAgICAgICAgKnA7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAgICAgICpjOwogICAgIG5neF9wb29sX2NsZWFudXBfdCAgICAgICAgICAgICAqY2w7CiAgICAgbmd4X3Bvb2xfY2xlYW51cF9maWxlX3QgICAgICAgICpjbGY7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAgICAgICpjbGNmOwpAQCAtMTIwOSw2ICsxMjExLDggQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGMgPSByLT5jb25uZWN0aW9uOworCiAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogCiAgICAgaWYgKHUtPnBpcGUgPT0gTlVMTCkgewpAQCAtMTIzMSw2ICsxMjM1LDIzIEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoY2xjZi0+dGNwX25vZGVsYXkgJiYgYy0+dGNwX25vZGVsYXkgPT0gTkdYX1RDUF9OT0RFTEFZX1VOU0VUKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwgInRjcF9ub2RlbGF5Iik7CisKKyAgICAgICAgICAgIHRjcF9ub2RlbGF5ID0gMTsKKworICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQoYy0+ZmQsIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmdGNwX25vZGVsYXksIHNpemVvZihpbnQpKSA9PSAtMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFRDUF9OT0RFTEFZKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsIDApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYy0+dGNwX25vZGVsYXkgPSBOR1hfVENQX05PREVMQVlfU0VUOworICAgICAgICB9CisKICAgICAgICAgc2l6ZSA9IHUtPmJ1ZmZlci5sYXN0IC0gdS0+YnVmZmVyLnBvczsKIAogICAgICAgICBpZiAoc2l6ZSkgewpAQCAtMTI0MSw3ICsxMjYyLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3Nfbm9uX2J1ZmZlcmVkX2JvZHkoci0+Y29ubmVjdGlvbi0+d3JpdGUpOworICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19ub25fYnVmZmVyZWRfYm9keShjLT53cml0ZSk7CiAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHUtPmJ1ZmZlci5wb3MgPSB1LT5idWZmZXIuc3RhcnQ7CkBAIC0xMjYyLDcgKzEyODMsNyBAQAogCiAgICAgaWYgKHUtPmNhY2hlICYmIHUtPmNhY2hlLT5jdHguZmlsZS5mZCAhPSBOR1hfSU5WQUxJRF9GSUxFKSB7CiAgICAgICAgIGlmIChuZ3hfY2xvc2VfZmlsZSh1LT5jYWNoZS0+Y3R4LmZpbGUuZmQpID09IE5HWF9GSUxFX0VSUk9SKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjLT5sb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1LT5jYWNoZS0+Y3R4LmZpbGUubmFtZS5kYXRhKTsKICAgICAgICAgfQpAQCAtMTI5Miw5ICsxMzEzLDkgQEAKICAgICBwLT5idWZzID0gdS0+Y29uZi0+YnVmczsKICAgICBwLT5idXN5X3NpemUgPSB1LT5jb25mLT5idXN5X2J1ZmZlcnNfc2l6ZTsKICAgICBwLT51cHN0cmVhbSA9IHUtPnBlZXIuY29ubmVjdGlvbjsKLSAgICBwLT5kb3duc3RyZWFtID0gci0+Y29ubmVjdGlvbjsKKyAgICBwLT5kb3duc3RyZWFtID0gYzsKICAgICBwLT5wb29sID0gci0+cG9vbDsKLSAgICBwLT5sb2cgPSByLT5jb25uZWN0aW9uLT5sb2c7CisgICAgcC0+bG9nID0gYy0+bG9nOwogCiAgICAgcC0+Y2FjaGFibGUgPSB1LT5jYWNoYWJsZTsKIApAQCAtMTMwNSw3ICsxMzI2LDcgQEAKICAgICB9CiAKICAgICBwLT50ZW1wX2ZpbGUtPmZpbGUuZmQgPSBOR1hfSU5WQUxJRF9GSUxFOwotICAgIHAtPnRlbXBfZmlsZS0+ZmlsZS5sb2cgPSByLT5jb25uZWN0aW9uLT5sb2c7CisgICAgcC0+dGVtcF9maWxlLT5maWxlLmxvZyA9IGMtPmxvZzsKICAgICBwLT50ZW1wX2ZpbGUtPnBhdGggPSB1LT5jb25mLT50ZW1wX3BhdGg7CiAgICAgcC0+dGVtcF9maWxlLT5wb29sID0gci0+cG9vbDsKIApAQCAtMTM2NCw3ICsxMzg1LDcgQEAKICAgICAgICAgICovCiAKICAgICAgICAgcC0+Y3ljbGljX3RlbXBfZmlsZSA9IDE7Ci0gICAgICAgIHItPmNvbm5lY3Rpb24tPnNlbmRmaWxlID0gMDsKKyAgICAgICAgYy0+c2VuZGZpbGUgPSAwOwogCiAgICAgfSBlbHNlIHsKICAgICAgICAgcC0+Y3ljbGljX3RlbXBfZmlsZSA9IDA7CkBAIC0xMzk0LDggKzE0MTUsOSBAQAogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgIHNpemU7CiAgICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICAgbjsKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICpiOworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgIHJjOwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGRvX3dyaXRlOwotICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAgKmM7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAqYywgKmNsaWVudDsKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICpyOwogICAgIG5neF9odHRwX3Vwc3RyZWFtX3QgICAgICAgKnU7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKQEAgLTE0MjYsNiArMTQ0OCw3IEBACiAKICAgICByID0gYy0+ZGF0YTsKICAgICB1ID0gci0+dXBzdHJlYW07CisgICAgY2xpZW50ID0gci0+Y29ubmVjdGlvbjsKIAogICAgIGIgPSAmdS0+YnVmZmVyOwogCkBAIC0xNDM4LDcgKzE0NjEsMTMgQEAKICAgICAgICAgaWYgKGRvX3dyaXRlKSB7CiAKICAgICAgICAgICAgIGlmICh1LT5vdXRfYnVmcyB8fCB1LT5idXN5X2J1ZnMpIHsKLSAgICAgICAgICAgICAgICBpZiAobmd4X2h0dHBfb3V0cHV0X2ZpbHRlcihyLCB1LT5vdXRfYnVmcykgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgcmMgPSBuZ3hfaHR0cF9vdXRwdXRfZmlsdGVyKHIsIHUtPm91dF9idWZzKTsKKworICAgICAgICAgICAgICAgIGlmIChjbGllbnQtPmRlc3Ryb3llZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHJjID09IE5HWF9FUlJPUikgewogICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsIDApOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMTQ5MCwxOCArMTUxOSwyMCBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudChyLT5jb25uZWN0aW9uLT53cml0ZSwgY2xjZi0+c2VuZF9sb3dhdCkKLSAgICAgICAgPT0gTkdYX0VSUk9SKQotICAgIHsKLSAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LCAwKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChjbGllbnQtPmRhdGEgPT0gcikgeworICAgICAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudChjbGllbnQtPndyaXRlLCBjbGNmLT5zZW5kX2xvd2F0KQorICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsIDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHItPmNvbm5lY3Rpb24tPndyaXRlLT5hY3RpdmUpIHsKLSAgICAgICAgbmd4X2FkZF90aW1lcihyLT5jb25uZWN0aW9uLT53cml0ZSwgY2xjZi0+c2VuZF90aW1lb3V0KTsKKyAgICBpZiAoY2xpZW50LT53cml0ZS0+YWN0aXZlKSB7CisgICAgICAgIG5neF9hZGRfdGltZXIoY2xpZW50LT53cml0ZSwgY2xjZi0+c2VuZF90aW1lb3V0KTsKIAotICAgIH0gZWxzZSBpZiAoci0+Y29ubmVjdGlvbi0+d3JpdGUtPnRpbWVyX3NldCkgewotICAgICAgICBuZ3hfZGVsX3RpbWVyKHItPmNvbm5lY3Rpb24tPndyaXRlKTsKKyAgICB9IGVsc2UgaWYgKGNsaWVudC0+d3JpdGUtPnRpbWVyX3NldCkgeworICAgICAgICBuZ3hfZGVsX3RpbWVyKGNsaWVudC0+d3JpdGUpOwogICAgIH0KIAogICAgIGlmIChuZ3hfaGFuZGxlX3JlYWRfZXZlbnQodS0+cGVlci5jb25uZWN0aW9uLT5yZWFkLCAwKSA9PSBOR1hfRVJST1IpIHsKQEAgLTE1MTIsOCArMTU0Myw4IEBACiAgICAgaWYgKHUtPnBlZXIuY29ubmVjdGlvbi0+cmVhZC0+YWN0aXZlKSB7CiAgICAgICAgIG5neF9hZGRfdGltZXIodS0+cGVlci5jb25uZWN0aW9uLT5yZWFkLCB1LT5jb25mLT5yZWFkX3RpbWVvdXQpOwogCi0gICAgfSBlbHNlIGlmIChyLT5jb25uZWN0aW9uLT5yZWFkLT50aW1lcl9zZXQpIHsKLSAgICAgICAgbmd4X2RlbF90aW1lcihyLT5jb25uZWN0aW9uLT5yZWFkKTsKKyAgICB9IGVsc2UgaWYgKHUtPnBlZXIuY29ubmVjdGlvbi0+cmVhZC0+dGltZXJfc2V0KSB7CisgICAgICAgIG5neF9kZWxfdGltZXIodS0+cGVlci5jb25uZWN0aW9uLT5yZWFkKTsKICAgICB9CiB9CiAKQEAgLTE1NzcsMTMgKzE2MDgsMTQgQEAKIG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3NfYm9keShuZ3hfZXZlbnRfdCAqZXYpCiB7CiAgICAgbmd4X2V2ZW50X3BpcGVfdCAgICAgKnA7Ci0gICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgKmM7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgKmMsICpkb3duc3RyZWFtOwogICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICpyOwogICAgIG5neF9odHRwX3Vwc3RyZWFtX3QgICp1OwogCiAgICAgYyA9IGV2LT5kYXRhOwogICAgIHIgPSBjLT5kYXRhOwogICAgIHUgPSByLT51cHN0cmVhbTsKKyAgICBkb3duc3RyZWFtID0gci0+Y29ubmVjdGlvbjsKIAogICAgIGlmIChldi0+d3JpdGUpIHsKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCkBAIC0xNjE4LDYgKzE2NTAsMTEgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAobmd4X2V2ZW50X3BpcGUocCwgZXYtPndyaXRlKSA9PSBOR1hfQUJPUlQpIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZG93bnN0cmVhbS0+ZGVzdHJveWVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsIDApOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY0OCw2ICsxNjg1LDExIEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAobmd4X2V2ZW50X3BpcGUocCwgZXYtPndyaXRlKSA9PSBOR1hfQUJPUlQpIHsKKworICAgICAgICAgICAgaWYgKGRvd25zdHJlYW0tPmRlc3Ryb3llZCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LCAwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTc2MSw3ICsxODAzLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChyLT5jb25uZWN0aW9uLT5jbG9zZWQpIHsKKyAgICBpZiAoci0+Y29ubmVjdGlvbi0+ZXJyb3IpIHsKICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX0NMSUVOVF9DTE9TRURfUkVRVUVTVCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKaW5kZXggMzk2OWQ3ZS4uNmU4MzFiNSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKQEAgLTg0Myw2ICs4NDMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAiaHR0cCB2YXJpYWJsZXM6ICV1aSIsIGNtY2YtPnZhcmlhYmxlcy5uZWx0cyk7CiAKIAorICAgIGZvciAobiA9IDA7IG4gPCBjbWNmLT5hbGxfdmFyaWFibGVzLm5lbHRzOyBuKyspIHsKKyAgICAgICAgaWYgKGF2W25dLmZsYWdzICYgTkdYX0hUVFBfVkFSX05PSEFTSCkgeworICAgICAgICAgICAgYXZbbl0ubmFtZS5kYXRhID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworCiAgICAgLyogaW5pdCB0aGUgYWxsIGh0dHAgdmFyaWFibGVzIGhhc2ggKi8KIAogICAgIGNtY2YtPnZhcmlhYmxlc19oYXNoLm1heF9zaXplID0gNTAwOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaAppbmRleCBkMWIyM2U4Li40ODBiNGE1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaApAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBOR1hfSFRUUF9WQVJfQ0hBTkdBQkxFICAgMQogI2RlZmluZSBOR1hfSFRUUF9WQVJfTk9DQUNIQUJMRSAgMgogI2RlZmluZSBOR1hfSFRUUF9WQVJfSU5ERVhFRCAgICAgNAorI2RlZmluZSBOR1hfSFRUUF9WQVJfTk9IQVNIICAgICAgOAogCiAKIHN0cnVjdCBuZ3hfaHR0cF92YXJpYWJsZV9zIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlcl9tb2R1bGUuYwppbmRleCBmM2IzNjIyLi5jNGQwYTBlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyX21vZHVsZS5jCkBAIC01NSw3ICs1NSw3IEBACiAKICAgICBjID0gci0+Y29ubmVjdGlvbjsKIAotICAgIGlmIChjLT5jbG9zZWQpIHsKKyAgICBpZiAoYy0+ZXJyb3IpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgIH0KIAogICAgIGlmIChjaGFpbiA9PSBOR1hfQ0hBSU5fRVJST1IpIHsKLSAgICAgICAgYy0+Y2xvc2VkID0gMTsKKyAgICAgICAgYy0+ZXJyb3IgPSAxOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXAuaCBiL3NyYy9pbWFwL25neF9pbWFwLmgKaW5kZXggZmVkNjg1Mi4uMWYzYzEyZSAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXAuaAorKysgYi9zcmMvaW1hcC9uZ3hfaW1hcC5oCkBAIC0yMCwxMyArMjAsMTMgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdm9pZCAgICoqbWFpbl9jb25mOwotICAgIHZvaWQgICAqKnNydl9jb25mOworICAgIHZvaWQgICAgICAgICAgICAgICAgICAqKm1haW5fY29uZjsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgKipzcnZfY29uZjsKIH0gbmd4X2ltYXBfY29uZl9jdHhfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2FycmF5X3QgICAgICAgICAgIHNlcnZlcnM7ICAgICAgICAgLyogbmd4X2ltYXBfY29yZV9zcnZfY29uZl90ICovCisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgc2VydmVyczsgICAgICAgICAvKiBuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QgKi8KIH0gbmd4X2ltYXBfY29yZV9tYWluX2NvbmZfdDsKIAogCkBAIC0zNCwxNyArMzQsMjAgQEAKICNkZWZpbmUgTkdYX0lNQVBfSU1BUF9QUk9UT0NPTCAgMQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X21zZWNfdCAgICAgICAgICAgIHRpbWVvdXQ7CisgICAgbmd4X21zZWNfdCAgICAgICAgICAgICAgdGltZW91dDsKIAotICAgIHNpemVfdCAgICAgICAgICAgICAgICBpbWFwX2NsaWVudF9idWZmZXJfc2l6ZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBpbWFwX2NsaWVudF9idWZmZXJfc2l6ZTsKIAotICAgIG5neF91aW50X3QgICAgICAgICAgICBwcm90b2NvbDsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICBwcm90b2NvbDsKIAotICAgIG5neF9idWZfdCAgICAgICAgICAgICpwb3AzX2NhcGFiaWxpdHk7Ci0gICAgbmd4X2J1Zl90ICAgICAgICAgICAgKmltYXBfY2FwYWJpbGl0eTsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICBwb3AzX2NhcGFiaWxpdHk7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgcG9wM19zdGFydHRsc19jYXBhYmlsaXR5OworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIGltYXBfY2FwYWJpbGl0eTsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICBpbWFwX3N0YXJ0dGxzX2NhcGFiaWxpdHk7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgaW1hcF9zdGFydHRsc19vbmx5X2NhcGFiaWxpdHk7CiAKLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgcG9wM19jYXBhYmlsaXRpZXM7Ci0gICAgbmd4X2FycmF5X3QgICAgICAgICAgIGltYXBfY2FwYWJpbGl0aWVzOworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgIHBvcDNfY2FwYWJpbGl0aWVzOworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgIGltYXBfY2FwYWJpbGl0aWVzOwogCiAgICAgLyogc2VydmVyIGN0eCAqLwogICAgIG5neF9pbWFwX2NvbmZfY3R4X3QgICpjdHg7CkBAIC01MiwxMSArNTUsMTIgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdm9pZCAgICAgICAqKCpjcmVhdGVfbWFpbl9jb25mKShuZ3hfY29uZl90ICpjZik7Ci0gICAgY2hhciAgICAgICAqKCppbml0X21haW5fY29uZikobmd4X2NvbmZfdCAqY2YsIHZvaWQgKmNvbmYpOworICAgIHZvaWQgICAgICAgICAgICAgICAgICooKmNyZWF0ZV9tYWluX2NvbmYpKG5neF9jb25mX3QgKmNmKTsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAqKCppbml0X21haW5fY29uZikobmd4X2NvbmZfdCAqY2YsIHZvaWQgKmNvbmYpOwogCi0gICAgdm9pZCAgICAgICAqKCpjcmVhdGVfc3J2X2NvbmYpKG5neF9jb25mX3QgKmNmKTsKLSAgICBjaGFyICAgICAgICooKm1lcmdlX3Nydl9jb25mKShuZ3hfY29uZl90ICpjZiwgdm9pZCAqcHJldiwgdm9pZCAqY29uZik7CisgICAgdm9pZCAgICAgICAgICAgICAgICAgKigqY3JlYXRlX3Nydl9jb25mKShuZ3hfY29uZl90ICpjZik7CisgICAgY2hhciAgICAgICAgICAgICAgICAgKigqbWVyZ2Vfc3J2X2NvbmYpKG5neF9jb25mX3QgKmNmLCB2b2lkICpwcmV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb25mKTsKIH0gbmd4X2ltYXBfbW9kdWxlX3Q7CiAKIApAQCAtMTI2LDggKzEzMCw4IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIG5neF9zdHJfdCAgICAgICAgICAgKmNsaWVudDsKLSAgICBuZ3hfaW1hcF9zZXNzaW9uX3QgICpzZXNzaW9uOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgKmNsaWVudDsKKyAgICBuZ3hfaW1hcF9zZXNzaW9uX3QgICAgICpzZXNzaW9uOwogfSBuZ3hfaW1hcF9sb2dfY3R4X3Q7CiAKIApAQCAtMTM2LDIyICsxNDAsMjQgQEAKICNkZWZpbmUgTkdYX1BPUDNfQ0FQQSAgICAgICAzCiAjZGVmaW5lIE5HWF9QT1AzX1FVSVQgICAgICAgNAogI2RlZmluZSBOR1hfUE9QM19OT09QICAgICAgIDUKLSNkZWZpbmUgTkdYX1BPUDNfQVBPUCAgICAgICA2Ci0jZGVmaW5lIE5HWF9QT1AzX1NUQVQgICAgICAgNwotI2RlZmluZSBOR1hfUE9QM19MSVNUICAgICAgIDgKLSNkZWZpbmUgTkdYX1BPUDNfUkVUUiAgICAgICA5Ci0jZGVmaW5lIE5HWF9QT1AzX0RFTEUgICAgICAgMTAKLSNkZWZpbmUgTkdYX1BPUDNfUlNFVCAgICAgICAxMQotI2RlZmluZSBOR1hfUE9QM19UT1AgICAgICAgIDEyCi0jZGVmaW5lIE5HWF9QT1AzX1VJREwgICAgICAgMTMKKyNkZWZpbmUgTkdYX1BPUDNfU1RMUyAgICAgICA2CisjZGVmaW5lIE5HWF9QT1AzX0FQT1AgICAgICAgNworI2RlZmluZSBOR1hfUE9QM19TVEFUICAgICAgIDgKKyNkZWZpbmUgTkdYX1BPUDNfTElTVCAgICAgICA5CisjZGVmaW5lIE5HWF9QT1AzX1JFVFIgICAgICAgMTAKKyNkZWZpbmUgTkdYX1BPUDNfREVMRSAgICAgICAxMQorI2RlZmluZSBOR1hfUE9QM19SU0VUICAgICAgIDEyCisjZGVmaW5lIE5HWF9QT1AzX1RPUCAgICAgICAgMTMKKyNkZWZpbmUgTkdYX1BPUDNfVUlETCAgICAgICAxNAogCiAKICNkZWZpbmUgTkdYX0lNQVBfTE9HSU4gICAgICAxCiAjZGVmaW5lIE5HWF9JTUFQX0xPR09VVCAgICAgMgogI2RlZmluZSBOR1hfSU1BUF9DQVBBQklMSVRZIDMKICNkZWZpbmUgTkdYX0lNQVBfTk9PUCAgICAgICA0CisjZGVmaW5lIE5HWF9JTUFQX1NUQVJUVExTICAgNQogCi0jZGVmaW5lIE5HWF9JTUFQX05FWFQgICAgICAgNQorI2RlZmluZSBOR1hfSU1BUF9ORVhUICAgICAgIDYKIAogCiAjZGVmaW5lIE5HWF9JTUFQX1BBUlNFX0lOVkFMSURfQ09NTUFORCAgMjAKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX2F1dGhfaHR0cF9tb2R1bGUuYyBiL3NyYy9pbWFwL25neF9pbWFwX2F1dGhfaHR0cF9tb2R1bGUuYwppbmRleCA3NTM1MGQ1Li5jZWRiMGQ4IDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9hdXRoX2h0dHBfbW9kdWxlLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZS5jCkBAIC03MjcsNyArNzI3LDcgQEAKIAogICAgICAgICBuZ3hfaW1hcF9zZW5kKHMtPmNvbm5lY3Rpb24tPndyaXRlKTsKIAotICAgICAgICBpZiAoYy0+Y2xvc2VkKSB7CisgICAgICAgIGlmIChjLT5kZXN0cm95ZWQpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMTgxLDYgKzExODEsOCBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKKyAgICAgICAgYWhjZi0+cGVlcnMtPm51bWJlciA9IDE7CisKICAgICAgICAgYWhjZi0+aG9zdF9oZWFkZXIgPSBpbmV0X3Vwc3RyZWFtLmhvc3RfaGVhZGVyOwogICAgICAgICBhaGNmLT51cmkgPSBpbmV0X3Vwc3RyZWFtLnVyaTsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYwppbmRleCA2NDA4ZTU0Li5lODA1YTgxIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMKQEAgLTE4MSw4ICsxODEsOCBAQAogICAgIG5neF9pbWFwX2NvcmVfc3J2X2NvbmZfdCAqcHJldiA9IHBhcmVudDsKICAgICBuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QgKmNvbmYgPSBjaGlsZDsKIAorICAgIHVfY2hhciAgICAgICpwOwogICAgIHNpemVfdCAgICAgICBzaXplOwotICAgIG5neF9idWZfdCAgICpiOwogICAgIG5neF9zdHJfdCAgICpjLCAqZDsKICAgICBuZ3hfdWludF90ICAgaTsKIApAQCAtMjE4LDIyICsyMTgsNDAgQEAKICAgICAgICAgc2l6ZSArPSBjW2ldLmxlbiArIHNpemVvZihDUkxGKSAtIDE7CiAgICAgfQogCi0gICAgYiA9IG5neF9jcmVhdGVfdGVtcF9idWYoY2YtPnBvb2wsIHNpemUpOwotICAgIGlmIChiID09IE5VTEwpIHsKKyAgICBwID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgc2l6ZSk7CisgICAgaWYgKHAgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIitPSyBDYXBhYmlsaXR5IGxpc3QgZm9sbG93cyIgQ1JMRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIitPSyBDYXBhYmlsaXR5IGxpc3QgZm9sbG93cyIgQ1JMRikgLSAxKTsKKyAgICBjb25mLT5wb3AzX2NhcGFiaWxpdHkubGVuID0gc2l6ZTsKKyAgICBjb25mLT5wb3AzX2NhcGFiaWxpdHkuZGF0YSA9IHA7CisKKyAgICBwID0gbmd4X2NweW1lbShwLCAiK09LIENhcGFiaWxpdHkgbGlzdCBmb2xsb3dzIiBDUkxGLAorICAgICAgICAgICAgICAgICAgIHNpemVvZigiK09LIENhcGFiaWxpdHkgbGlzdCBmb2xsb3dzIiBDUkxGKSAtIDEpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGNvbmYtPnBvcDNfY2FwYWJpbGl0aWVzLm5lbHRzOyBpKyspIHsKLSAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgY1tpXS5kYXRhLCBjW2ldLmxlbik7Ci0gICAgICAgICpiLT5sYXN0KysgPSBDUjsgKmItPmxhc3QrKyA9IExGOworICAgICAgICBwID0gbmd4X2NweW1lbShwLCBjW2ldLmRhdGEsIGNbaV0ubGVuKTsKKyAgICAgICAgKnArKyA9IENSOyAqcCsrID0gTEY7CiAgICAgfQogCi0gICAgKmItPmxhc3QrKyA9ICcuJzsgKmItPmxhc3QrKyA9IENSOyAqYi0+bGFzdCsrID0gTEY7CisgICAgKnArKyA9ICcuJzsgKnArKyA9IENSOyAqcCA9IExGOwogCi0gICAgY29uZi0+cG9wM19jYXBhYmlsaXR5ID0gYjsKKworICAgIHNpemUgKz0gc2l6ZW9mKCJTVExTIiBDUkxGKSAtIDE7CisKKyAgICBwID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgc2l6ZSk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgY29uZi0+cG9wM19zdGFydHRsc19jYXBhYmlsaXR5LmxlbiA9IHNpemU7CisgICAgY29uZi0+cG9wM19zdGFydHRsc19jYXBhYmlsaXR5LmRhdGEgPSBwOworCisgICAgcCA9IG5neF9jcHltZW0ocCwgY29uZi0+cG9wM19jYXBhYmlsaXR5LmRhdGEsCisgICAgICAgICAgICAgICAgICAgY29uZi0+cG9wM19jYXBhYmlsaXR5LmxlbiAtIChzaXplb2YoIi4iIENSTEYpIC0gMSkpOworCisgICAgcCA9IG5neF9jcHltZW0ocCwgIlNUTFMiIENSTEYsIHNpemVvZigiU1RMUyIgQ1JMRikgLSAxKTsKKyAgICAqcCsrID0gJy4nOyAqcCsrID0gQ1I7ICpwID0gTEY7CiAKIAogICAgIGlmIChjb25mLT5pbWFwX2NhcGFiaWxpdGllcy5uZWx0cyA9PSAwKSB7CkBAIC0yNTksMjEgKzI3Nyw1NSBAQAogICAgICAgICBzaXplICs9IDEgKyBjW2ldLmxlbjsKICAgICB9CiAKLSAgICBiID0gbmd4X2NyZWF0ZV90ZW1wX2J1ZihjZi0+cG9vbCwgc2l6ZSk7Ci0gICAgaWYgKGIgPT0gTlVMTCkgeworICAgIHAgPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCBzaXplKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCAiKiBDQVBBQklMSVRZIiwgc2l6ZW9mKCIqIENBUEFCSUxJVFkiKSAtIDEpOworICAgIGNvbmYtPmltYXBfY2FwYWJpbGl0eS5sZW4gPSBzaXplOworICAgIGNvbmYtPmltYXBfY2FwYWJpbGl0eS5kYXRhID0gcDsKKworICAgIHAgPSBuZ3hfY3B5bWVtKHAsICIqIENBUEFCSUxJVFkiLCBzaXplb2YoIiogQ0FQQUJJTElUWSIpIC0gMSk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZi0+aW1hcF9jYXBhYmlsaXRpZXMubmVsdHM7IGkrKykgewotICAgICAgICAqYi0+bGFzdCsrID0gJyAnOwotICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCBjW2ldLmRhdGEsIGNbaV0ubGVuKTsKKyAgICAgICAgKnArKyA9ICcgJzsKKyAgICAgICAgcCA9IG5neF9jcHltZW0ocCwgY1tpXS5kYXRhLCBjW2ldLmxlbik7CiAgICAgfQogCi0gICAgKmItPmxhc3QrKyA9IENSOyAqYi0+bGFzdCsrID0gTEY7CisgICAgKnArKyA9IENSOyAqcCA9IExGOwogCi0gICAgY29uZi0+aW1hcF9jYXBhYmlsaXR5ID0gYjsKKworICAgIHNpemUgKz0gc2l6ZW9mKCIgU1RBUlRUTFMiKSAtIDE7CisKKyAgICBwID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgc2l6ZSk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgY29uZi0+aW1hcF9zdGFydHRsc19jYXBhYmlsaXR5LmxlbiA9IHNpemU7CisgICAgY29uZi0+aW1hcF9zdGFydHRsc19jYXBhYmlsaXR5LmRhdGEgPSBwOworCisgICAgcCA9IG5neF9jcHltZW0ocCwgY29uZi0+aW1hcF9jYXBhYmlsaXR5LmRhdGEsCisgICAgICAgICAgICAgICAgICAgY29uZi0+aW1hcF9jYXBhYmlsaXR5LmxlbiAtIChzaXplb2YoQ1JMRikgLSAxKSk7CisgICAgcCA9IG5neF9jcHltZW0ocCwgIiBTVEFSVFRMUyIsIHNpemVvZigiIFNUQVJUVExTIikgLSAxKTsKKyAgICAqcCsrID0gQ1I7ICpwID0gTEY7CisKKworICAgIHNpemUgKz0gc2l6ZW9mKCIgTE9HSU5ESVNBQkxFRCIpIC0gMTsKKworICAgIHAgPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCBzaXplKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKyAgICBjb25mLT5pbWFwX3N0YXJ0dGxzX29ubHlfY2FwYWJpbGl0eS5sZW4gPSBzaXplOworICAgIGNvbmYtPmltYXBfc3RhcnR0bHNfb25seV9jYXBhYmlsaXR5LmRhdGEgPSBwOworCisgICAgcCA9IG5neF9jcHltZW0ocCwgY29uZi0+aW1hcF9zdGFydHRsc19jYXBhYmlsaXR5LmRhdGEsCisgICAgICAgICAgICAgICAgICAgY29uZi0+aW1hcF9zdGFydHRsc19jYXBhYmlsaXR5LmxlbiAtIChzaXplb2YoQ1JMRikgLSAxKSk7CisgICAgcCA9IG5neF9jcHltZW0ocCwgIiBMT0dJTkRJU0FCTEVEIiwgc2l6ZW9mKCIgTE9HSU5ESVNBQkxFRCIpIC0gMSk7CisgICAgKnArKyA9IENSOyAqcCA9IExGOworCiAKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9oYW5kbGVyLmMgYi9zcmMvaW1hcC9uZ3hfaW1hcF9oYW5kbGVyLmMKaW5kZXggZGRmZjk2YS4uZjkwYjk2OCAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYwpAQCAtMTYsNiArMTYsNyBAQAogc3RhdGljIHVfY2hhciAqbmd4X2ltYXBfbG9nX2Vycm9yKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiAKICNpZiAoTkdYX0lNQVBfU1NMKQorc3RhdGljIHZvaWQgbmd4X2ltYXBfc3NsX2luaXRfY29ubmVjdGlvbihuZ3hfc3NsX3QgKnNzbCwgbmd4X2Nvbm5lY3Rpb25fdCAqYyk7CiBzdGF0aWMgdm9pZCBuZ3hfaW1hcF9zc2xfaGFuZHNoYWtlX2hhbmRsZXIobmd4X2Nvbm5lY3Rpb25fdCAqYyk7CiAjZW5kaWYKIApAQCAtNDMsMTEgKzQ0LDEwIEBACiB2b2lkCiBuZ3hfaW1hcF9pbml0X2Nvbm5lY3Rpb24obmd4X2Nvbm5lY3Rpb25fdCAqYykKIHsKLSAgICBuZ3hfaW1hcF9sb2dfY3R4X3QgICAgICAgICpsY3R4OworICAgIG5neF9pbWFwX2xvZ19jdHhfdCAgICpsY3R4OwogI2lmIChOR1hfSU1BUF9TU0wpCi0gICAgbmd4X2ltYXBfY29uZl9jdHhfdCAgICAgICAqY3R4OwotICAgIG5neF9pbWFwX3NzbF9jb25mX3QgICAgICAgKnNzbGNmOwotICAgIG5neF9pbWFwX2NvcmVfc3J2X2NvbmZfdCAgKmNzY2Y7CisgICAgbmd4X2ltYXBfY29uZl9jdHhfdCAgKmN0eDsKKyAgICBuZ3hfaW1hcF9zc2xfY29uZl90ICAqc3NsY2Y7CiAjZW5kaWYKIAogICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsICIqJXVpIGNsaWVudCAlViBjb25uZWN0ZWQgdG8gJVYiLApAQCAtNzUsMjMgKzc1LDcgQEAKICAgICBzc2xjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYoY3R4LCBuZ3hfaW1hcF9zc2xfbW9kdWxlKTsKIAogICAgIGlmIChzc2xjZi0+ZW5hYmxlKSB7Ci0gICAgICAgIGlmIChuZ3hfc3NsX2NyZWF0ZV9jb25uZWN0aW9uKCZzc2xjZi0+c3NsLCBjLCAwKSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmd4X3NzbF9oYW5kc2hha2UoYykgPT0gTkdYX0FHQUlOKSB7Ci0KLSAgICAgICAgICAgIGNzY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKGN0eCwgbmd4X2ltYXBfY29yZV9tb2R1bGUpOwotCi0gICAgICAgICAgICBuZ3hfYWRkX3RpbWVyKGMtPnJlYWQsIGNzY2YtPnRpbWVvdXQpOwotCi0gICAgICAgICAgICBjLT5zc2wtPmhhbmRsZXIgPSBuZ3hfaW1hcF9zc2xfaGFuZHNoYWtlX2hhbmRsZXI7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG5neF9pbWFwX3NzbF9oYW5kc2hha2VfaGFuZGxlcihjKTsKKyAgICAgICAgbmd4X2ltYXBfc3NsX2luaXRfY29ubmVjdGlvbigmc3NsY2YtPnNzbCwgYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNCwxNSArODgsNjkgQEAKICNpZiAoTkdYX0lNQVBfU1NMKQogCiBzdGF0aWMgdm9pZAorbmd4X2ltYXBfc3RhcnR0bHNfaGFuZGxlcihuZ3hfZXZlbnRfdCAqcmV2KQoreworICAgIG5neF9jb25uZWN0aW9uX3QgICAgICpjOworICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgICpzOworICAgIG5neF9pbWFwX3NzbF9jb25mX3QgICpzc2xjZjsKKworICAgIGMgPSByZXYtPmRhdGE7CisgICAgcyA9IGMtPmRhdGE7CisKKyAgICBjLT5sb2ctPmFjdGlvbiA9ICJpbiBzdGFydHRscyBzdGF0ZSI7CisKKyAgICBzc2xjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYocywgbmd4X2ltYXBfc3NsX21vZHVsZSk7CisKKyAgICBuZ3hfaW1hcF9zc2xfaW5pdF9jb25uZWN0aW9uKCZzc2xjZi0+c3NsLCBjKTsKK30KKworCitzdGF0aWMgdm9pZAorbmd4X2ltYXBfc3NsX2luaXRfY29ubmVjdGlvbihuZ3hfc3NsX3QgKnNzbCwgbmd4X2Nvbm5lY3Rpb25fdCAqYykKK3sKKyAgICBuZ3hfaW1hcF9jb25mX2N0eF90ICAgICAgICpjdHg7CisgICAgbmd4X2ltYXBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKKworICAgIGlmIChuZ3hfc3NsX2NyZWF0ZV9jb25uZWN0aW9uKHNzbCwgYywgMCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobmd4X3NzbF9oYW5kc2hha2UoYykgPT0gTkdYX0FHQUlOKSB7CisKKyAgICAgICAgY3R4ID0gYy0+Y3R4OworICAgICAgICBjc2NmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihjdHgsIG5neF9pbWFwX2NvcmVfbW9kdWxlKTsKKworICAgICAgICBuZ3hfYWRkX3RpbWVyKGMtPnJlYWQsIGNzY2YtPnRpbWVvdXQpOworCisgICAgICAgIGMtPnNzbC0+aGFuZGxlciA9IG5neF9pbWFwX3NzbF9oYW5kc2hha2VfaGFuZGxlcjsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbmd4X2ltYXBfc3NsX2hhbmRzaGFrZV9oYW5kbGVyKGMpOworfQorCisKK3N0YXRpYyB2b2lkCiBuZ3hfaW1hcF9zc2xfaGFuZHNoYWtlX2hhbmRsZXIobmd4X2Nvbm5lY3Rpb25fdCAqYykKIHsKICAgICBpZiAoYy0+c3NsLT5oYW5kc2hha2VkKSB7CisKKyAgICAgICAgaWYgKGMtPmRhdGEpIHsKKyAgICAgICAgICAgIGMtPnJlYWQtPmhhbmRsZXIgPSBuZ3hfaW1hcF9pbml0X3Byb3RvY29sOworICAgICAgICAgICAgYy0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaW1hcF9zZW5kOworCisgICAgICAgICAgICBuZ3hfaW1hcF9pbml0X3Byb3RvY29sKGMtPnJlYWQpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBuZ3hfaW1hcF9pbml0X3Nlc3Npb24oYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKGMpOwotICAgIHJldHVybjsKIH0KIAogI2VuZGlmCkBAIC0yNTMsMTEgKzI5MSw2IEBACiAKICAgICBzID0gYy0+ZGF0YTsKIAotICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmcy0+YXJncywgYy0+cG9vbCwgMiwgc2l6ZW9mKG5neF9zdHJfdCkpID09IE5HWF9FUlJPUikgewotICAgICAgICBuZ3hfaW1hcF9zZXNzaW9uX2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGlmIChzLT5wcm90b2NvbCA9PSBOR1hfSU1BUF9QT1AzX1BST1RPQ09MKSB7CiAgICAgICAgIHNpemUgPSAxMjg7CiAgICAgICAgIHMtPmltYXBfc3RhdGUgPSBuZ3hfcG9wM19zdGFydDsKQEAgLTI3MCwxMCArMzAzLDE5IEBACiAgICAgICAgIGMtPnJlYWQtPmhhbmRsZXIgPSBuZ3hfaW1hcF9hdXRoX3N0YXRlOwogICAgIH0KIAotICAgIHMtPmJ1ZmZlciA9IG5neF9jcmVhdGVfdGVtcF9idWYoYy0+cG9vbCwgc2l6ZSk7CiAgICAgaWYgKHMtPmJ1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgIG5neF9pbWFwX3Nlc3Npb25faW50ZXJuYWxfc2VydmVyX2Vycm9yKHMpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmcy0+YXJncywgYy0+cG9vbCwgMiwgc2l6ZW9mKG5neF9zdHJfdCkpCisgICAgICAgICAgICA9PSBOR1hfRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5neF9pbWFwX3Nlc3Npb25faW50ZXJuYWxfc2VydmVyX2Vycm9yKHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcy0+YnVmZmVyID0gbmd4X2NyZWF0ZV90ZW1wX2J1ZihjLT5wb29sLCBzaXplKTsKKyAgICAgICAgaWYgKHMtPmJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZ3hfaW1hcF9zZXNzaW9uX2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGMtPnJlYWQtPmhhbmRsZXIocmV2KTsKQEAgLTI5MSw2ICszMzMsOSBAQAogICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAgKmM7CiAgICAgbmd4X2ltYXBfc2Vzc2lvbl90ICAgICAgICAqczsKICAgICBuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QgICpjc2NmOworI2lmIChOR1hfSU1BUF9TU0wpCisgICAgbmd4X2ltYXBfc3NsX2NvbmZfdCAgICAgICAqc3NsY2Y7CisjZW5kaWYKIAogICAgIGMgPSByZXYtPmRhdGE7CiAgICAgcyA9IGMtPmRhdGE7CkBAIC0zNTcsNiArNDAyLDE5IEBACiAgICAgICAgIHN3aXRjaCAocy0+Y29tbWFuZCkgewogCiAgICAgICAgIGNhc2UgTkdYX0lNQVBfTE9HSU46CisKKyNpZiAoTkdYX0lNQVBfU1NMKQorCisgICAgICAgICAgICBpZiAoYy0+c3NsID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzc2xjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYocywgbmd4X2ltYXBfc3NsX21vZHVsZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3NsY2YtPnN0YXJ0dGxzID09IE5HWF9JTUFQX1NUQVJUVExTX09OTFkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBOR1hfSU1BUF9QQVJTRV9JTlZBTElEX0NPTU1BTkQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgICAgICBhcmcgPSBzLT5hcmdzLmVsdHM7CiAKICAgICAgICAgICAgIGlmIChzLT5hcmdzLm5lbHRzID09IDIgJiYgYXJnWzBdLmxlbikgewpAQCAtNDEwLDggKzQ2OCwyOCBAQAogCiAgICAgICAgIGNhc2UgTkdYX0lNQVBfQ0FQQUJJTElUWToKICAgICAgICAgICAgIGNzY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX2NvcmVfbW9kdWxlKTsKLSAgICAgICAgICAgIHRleHQgPSBjc2NmLT5pbWFwX2NhcGFiaWxpdHktPnBvczsKLSAgICAgICAgICAgIHRleHRfbGVuID0gY3NjZi0+aW1hcF9jYXBhYmlsaXR5LT5sYXN0IC0gY3NjZi0+aW1hcF9jYXBhYmlsaXR5LT5wb3M7CisKKyNpZiAoTkdYX0lNQVBfU1NMKQorCisgICAgICAgICAgICBpZiAoYy0+c3NsID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzc2xjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYocywgbmd4X2ltYXBfc3NsX21vZHVsZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoc3NsY2YtPnN0YXJ0dGxzID09IE5HWF9JTUFQX1NUQVJUVExTX09OKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHRfbGVuID0gY3NjZi0+aW1hcF9zdGFydHRsc19jYXBhYmlsaXR5LmxlbjsKKyAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGNzY2YtPmltYXBfc3RhcnR0bHNfY2FwYWJpbGl0eS5kYXRhOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc3NsY2YtPnN0YXJ0dGxzID09IE5HWF9JTUFQX1NUQVJUVExTX09OTFkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dF9sZW4gPSBjc2NmLT5pbWFwX3N0YXJ0dGxzX29ubHlfY2FwYWJpbGl0eS5sZW47CisgICAgICAgICAgICAgICAgICAgIHRleHQgPSBjc2NmLT5pbWFwX3N0YXJ0dGxzX29ubHlfY2FwYWJpbGl0eS5kYXRhOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgICAgdGV4dF9sZW4gPSBjc2NmLT5pbWFwX2NhcGFiaWxpdHkubGVuOworICAgICAgICAgICAgdGV4dCA9IGNzY2YtPmltYXBfY2FwYWJpbGl0eS5kYXRhOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBOR1hfSU1BUF9MT0dPVVQ6CkBAIC00MjMsNiArNTAxLDIxIEBACiAgICAgICAgIGNhc2UgTkdYX0lNQVBfTk9PUDoKICAgICAgICAgICAgIGJyZWFrOwogCisjaWYgKE5HWF9JTUFQX1NTTCkKKworICAgICAgICBjYXNlIE5HWF9JTUFQX1NUQVJUVExTOgorICAgICAgICAgICAgaWYgKGMtPnNzbCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgc3NsY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX3NzbF9tb2R1bGUpOworICAgICAgICAgICAgICAgIGlmIChzc2xjZi0+c3RhcnR0bHMpIHsKKyAgICAgICAgICAgICAgICAgICAgYy0+cmVhZC0+aGFuZGxlciA9IG5neF9pbWFwX3N0YXJ0dGxzX2hhbmRsZXI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmMgPSBOR1hfSU1BUF9QQVJTRV9JTlZBTElEX0NPTU1BTkQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByYyA9IE5HWF9JTUFQX1BBUlNFX0lOVkFMSURfQ09NTUFORDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDkyLDYgKzU4NSw5IEBACiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAqYzsKICAgICBuZ3hfaW1hcF9zZXNzaW9uX3QgICAgICAgICpzOwogICAgIG5neF9pbWFwX2NvcmVfc3J2X2NvbmZfdCAgKmNzY2Y7CisjaWYgKE5HWF9JTUFQX1NTTCkKKyAgICBuZ3hfaW1hcF9zc2xfY29uZl90ICAgICAgICpzc2xjZjsKKyNlbmRpZgogCiAgICAgYyA9IHJldi0+ZGF0YTsKICAgICBzID0gYy0+ZGF0YTsKQEAgLTU1NCw4ICs2NTAsMjIgQEAKIAogICAgICAgICAgICAgY2FzZSBOR1hfUE9QM19DQVBBOgogICAgICAgICAgICAgICAgIGNzY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX2NvcmVfbW9kdWxlKTsKLSAgICAgICAgICAgICAgICB0ZXh0ID0gY3NjZi0+cG9wM19jYXBhYmlsaXR5LT5wb3M7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGNzY2YtPnBvcDNfY2FwYWJpbGl0eS0+bGFzdCAtIGNzY2YtPnBvcDNfY2FwYWJpbGl0eS0+cG9zOworCisjaWYgKE5HWF9JTUFQX1NTTCkKKworICAgICAgICAgICAgICAgIGlmIChjLT5zc2wgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBzc2xjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9pbWFwX3NzbF9tb2R1bGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3NsY2YtPnN0YXJ0dGxzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gY3NjZi0+cG9wM19zdGFydHRsc19jYXBhYmlsaXR5LmxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBjc2NmLT5wb3AzX3N0YXJ0dGxzX2NhcGFiaWxpdHkuZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgICBzaXplID0gY3NjZi0+cG9wM19jYXBhYmlsaXR5LmxlbjsKKyAgICAgICAgICAgICAgICB0ZXh0ID0gY3NjZi0+cG9wM19jYXBhYmlsaXR5LmRhdGE7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgTkdYX1BPUDNfUVVJVDoKQEAgLTU2NSw2ICs2NzUsMjIgQEAKICAgICAgICAgICAgIGNhc2UgTkdYX1BPUDNfTk9PUDoKICAgICAgICAgICAgICAgICBicmVhazsKIAorI2lmIChOR1hfSU1BUF9TU0wpCisKKyAgICAgICAgICAgIGNhc2UgTkdYX1BPUDNfU1RMUzoKKyAgICAgICAgICAgICAgICBpZiAoYy0+c3NsID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgc3NsY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaW1hcF9zc2xfbW9kdWxlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNzbGNmLT5zdGFydHRscykgeworICAgICAgICAgICAgICAgICAgICAgICAgYy0+cmVhZC0+aGFuZGxlciA9IG5neF9pbWFwX3N0YXJ0dGxzX2hhbmRsZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJjID0gTkdYX0lNQVBfUEFSU0VfSU5WQUxJRF9DT01NQU5EOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcy0+aW1hcF9zdGF0ZSA9IG5neF9wb3AzX3N0YXJ0OwogICAgICAgICAgICAgICAgIHJjID0gTkdYX0lNQVBfUEFSU0VfSU5WQUxJRF9DT01NQU5EOwpAQCAtNjE2LDggKzc0Miw4IEBACiAKICAgICAgICAgICAgIGNhc2UgTkdYX1BPUDNfQ0FQQToKICAgICAgICAgICAgICAgICBjc2NmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihzLCBuZ3hfaW1hcF9jb3JlX21vZHVsZSk7Ci0gICAgICAgICAgICAgICAgdGV4dCA9IGNzY2YtPnBvcDNfY2FwYWJpbGl0eS0+cG9zOwotICAgICAgICAgICAgICAgIHNpemUgPSBjc2NmLT5wb3AzX2NhcGFiaWxpdHktPmxhc3QgLSBjc2NmLT5wb3AzX2NhcGFiaWxpdHktPnBvczsKKyAgICAgICAgICAgICAgICBzaXplID0gY3NjZi0+cG9wM19jYXBhYmlsaXR5LmxlbjsKKyAgICAgICAgICAgICAgICB0ZXh0ID0gY3NjZi0+cG9wM19jYXBhYmlsaXR5LmRhdGE7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgTkdYX1BPUDNfUVVJVDoKQEAgLTczNSw3ICs4NjEsNyBAQAogCiAjZW5kaWYKIAotICAgIGMtPmNsb3NlZCA9IDE7CisgICAgYy0+ZGVzdHJveWVkID0gMTsKIAogICAgIHBvb2wgPSBjLT5wb29sOwogCmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9wYXJzZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfcGFyc2UuYwppbmRleCBkOGM0MzZiLi5lZWE0NTUwIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9wYXJzZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX3BhcnNlLmMKQEAgLTExOSw2ICsxMTksMjUgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAorI2lmIChOR1hfSU1BUF9TU0wpCisgICAgICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgICAgICAgICBpZiAoKGNbMF0gPT0gJ1MnfHwgY1swXSA9PSAncycpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY1sxXSA9PSAnVCd8fCBjWzFdID09ICd0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChjWzJdID09ICdBJ3x8IGNbMl0gPT0gJ2EnKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNbM10gPT0gJ1InfHwgY1szXSA9PSAncicpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY1s0XSA9PSAnVCd8fCBjWzRdID09ICd0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChjWzVdID09ICdUJ3x8IGNbNV0gPT0gJ3QnKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNbNl0gPT0gJ0wnfHwgY1s2XSA9PSAnbCcpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY1s3XSA9PSAnUyd8fCBjWzddID09ICdzJykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmNvbW1hbmQgPSBOR1hfSU1BUF9TVEFSVFRMUzsKKworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKICAgICAgICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgICAgICAgICBpZiAoKGNbMF0gPT0gJ0MnfHwgY1swXSA9PSAnYycpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY1sxXSA9PSAnQSd8fCBjWzFdID09ICdhJykKQEAgLTQyMSw3ICs0NDAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjMCA9PSAnTicgJiYgYzEgPT0gJ08nICYmIGMyID09ICdPJyAmJiBjMyA9PSAnUCcpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmNvbW1hbmQgPSBOR1hfUE9QM19OT09QOwotCisjaWYgKE5HWF9JTUFQX1NTTCkKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjMCA9PSAnUycgJiYgYzEgPT0gJ1QnICYmIGMyID09ICdMJyAmJiBjMyA9PSAnUycpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmNvbW1hbmQgPSBOR1hfUE9QM19TVExTOworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGludmFsaWQ7CiAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMKaW5kZXggNjIzMjk2MC4uYmRjZTM2NCAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMKQEAgLTI4Niw4ICsyODYsNiBAQAogCiAgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gTlVMTDsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgMCwgImNsaWVudCBsb2dnZWQgaW4iKTsKLQotICAgICAgICBjLT5sb2ctPmFjdGlvbiA9ICJwcm94eWluZyI7CiAgICAgfQogfQogCkBAIC00MDUsMTYgKzQwMywyNCBAQAogCiAgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gTlVMTDsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgMCwgImNsaWVudCBsb2dnZWQgaW4iKTsKLQotICAgICAgICBjLT5sb2ctPmFjdGlvbiA9ICJwcm94eWluZyI7CiAgICAgfQogfQogCiAKIHN0YXRpYyB2b2lkCi1uZ3hfaW1hcF9wcm94eV9kdW1teV9oYW5kbGVyKG5neF9ldmVudF90ICpldikKK25neF9pbWFwX3Byb3h5X2R1bW15X2hhbmRsZXIobmd4X2V2ZW50X3QgKndldikKIHsKLSAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0lNQVAsIGV2LT5sb2csIDAsICJpbWFwIHByb3h5IGR1bW15IGhhbmRsZXIiKTsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgICpjOworICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgKnM7CisKKyAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0lNQVAsIHdldi0+bG9nLCAwLCAiaW1hcCBwcm94eSBkdW1teSBoYW5kbGVyIik7CisKKyAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudCh3ZXYsIDApID09IE5HWF9FUlJPUikgeworICAgICAgICBjID0gd2V2LT5kYXRhOworICAgICAgICBzID0gYy0+ZGF0YTsKKworICAgICAgICBuZ3hfaW1hcF9wcm94eV9jbG9zZV9zZXNzaW9uKHMpOworICAgIH0KIH0KIAogCkBAIC00ODcsMTEgKzQ5MywxMSBAQAogc3RhdGljIHZvaWQKIG5neF9pbWFwX3Byb3h5X2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KQogewotICAgIGNoYXIgICAgICAgICAgICAgICAgICAgKmFjdGlvbjsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICphY3Rpb24sICpyZWN2X2FjdGlvbiwgKnNlbmRfYWN0aW9uOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIHNpemU7CiAgICAgc3NpemVfdCAgICAgICAgICAgICAgICAgbjsKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICpiOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgIGFnYWluLCBkb193cml0ZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICBkb193cml0ZTsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICpjLCAqc3JjLCAqZHN0OwogICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgICAgKnM7CiAgICAgbmd4X2ltYXBfcHJveHlfY29uZl90ICAqcGNmOwpAQCAtNTAwLDYgKzUwNiw4IEBACiAgICAgcyA9IGMtPmRhdGE7CiAKICAgICBpZiAoZXYtPnRpbWVkb3V0KSB7CisgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gInByb3h5aW5nIjsKKwogICAgICAgICBpZiAoYyA9PSBzLT5jb25uZWN0aW9uKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBOR1hfRVRJTUVET1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHRpbWVkIG91dCIpOwpAQCAtNTE2LDExICs1MjQsMTUgQEAKIAogICAgIGlmIChjID09IHMtPmNvbm5lY3Rpb24pIHsKICAgICAgICAgaWYgKGV2LT53cml0ZSkgeworICAgICAgICAgICAgcmVjdl9hY3Rpb24gPSAicHJveHlpbmcgYW5kIHJlYWRpbmcgZnJvbSB1cHN0cmVhbSI7CisgICAgICAgICAgICBzZW5kX2FjdGlvbiA9ICJwcm94eWluZyBhbmQgc2VuZGluZyB0byBjbGllbnQiOwogICAgICAgICAgICAgc3JjID0gcy0+cHJveHktPnVwc3RyZWFtLmNvbm5lY3Rpb247CiAgICAgICAgICAgICBkc3QgPSBjOwogICAgICAgICAgICAgYiA9IHMtPnByb3h5LT5idWZmZXI7CiAKICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlY3ZfYWN0aW9uID0gInByb3h5aW5nIGFuZCByZWFkaW5nIGZyb20gY2xpZW50IjsKKyAgICAgICAgICAgIHNlbmRfYWN0aW9uID0gInByb3h5aW5nIGFuZCBzZW5kaW5nIHRvIHVwc3RyZWFtIjsKICAgICAgICAgICAgIHNyYyA9IGM7CiAgICAgICAgICAgICBkc3QgPSBzLT5wcm94eS0+dXBzdHJlYW0uY29ubmVjdGlvbjsKICAgICAgICAgICAgIGIgPSBzLT5idWZmZXI7CkBAIC01MjgsMTEgKzU0MCwxNSBAQAogCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGV2LT53cml0ZSkgeworICAgICAgICAgICAgcmVjdl9hY3Rpb24gPSAicHJveHlpbmcgYW5kIHJlYWRpbmcgZnJvbSB1cHN0cmVhbSI7CisgICAgICAgICAgICBzZW5kX2FjdGlvbiA9ICJwcm94eWluZyBhbmQgc2VuZGluZyB0byBjbGllbnQiOwogICAgICAgICAgICAgc3JjID0gcy0+Y29ubmVjdGlvbjsKICAgICAgICAgICAgIGRzdCA9IGM7CiAgICAgICAgICAgICBiID0gcy0+YnVmZmVyOwogCiAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZWN2X2FjdGlvbiA9ICJwcm94eWluZyBhbmQgcmVhZGluZyBmcm9tIGNsaWVudCI7CisgICAgICAgICAgICBzZW5kX2FjdGlvbiA9ICJwcm94eWluZyBhbmQgc2VuZGluZyB0byB1cHN0cmVhbSI7CiAgICAgICAgICAgICBzcmMgPSBjOwogICAgICAgICAgICAgZHN0ID0gcy0+Y29ubmVjdGlvbjsKICAgICAgICAgICAgIGIgPSBzLT5wcm94eS0+YnVmZmVyOwpAQCAtNTQ1LDE0ICs1NjEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAiaW1hcCBwcm94eSBoYW5kbGVyOiAlZCwgIyVkID4gIyVkIiwKICAgICAgICAgICAgICAgICAgICBkb193cml0ZSwgc3JjLT5mZCwgZHN0LT5mZCk7CiAKLSAgICBkbyB7Ci0gICAgICAgIGFnYWluID0gMDsKKyAgICBmb3IgKCA7OyApIHsKIAotICAgICAgICBpZiAoZG9fd3JpdGUgPT0gMSkgeworICAgICAgICBpZiAoZG9fd3JpdGUpIHsKIAogICAgICAgICAgICAgc2l6ZSA9IGItPmxhc3QgLSBiLT5wb3M7CiAKICAgICAgICAgICAgIGlmIChzaXplICYmIGRzdC0+d3JpdGUtPnJlYWR5KSB7CisgICAgICAgICAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSBzZW5kX2FjdGlvbjsKKwogICAgICAgICAgICAgICAgIG4gPSBkc3QtPnNlbmQoZHN0LCBiLT5wb3MsIHNpemUpOwogCiAgICAgICAgICAgICAgICAgaWYgKG4gPT0gTkdYX0VSUk9SKSB7CkBAIC01NjEsNyArNTc4LDYgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAobiA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYWdhaW4gPSAxOwogICAgICAgICAgICAgICAgICAgICBiLT5wb3MgKz0gbjsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoYi0+cG9zID09IGItPmxhc3QpIHsKQEAgLTU2OSw1OCArNTg1LDc0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBiLT5sYXN0ID0gYi0+c3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobiA9PSBOR1hfQUdBSU4gfHwgbiA8IChzc2l6ZV90KSBzaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KGRzdC0+d3JpdGUsIC8qIFRPRE86IExPV0FUICovIDApCi0gICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5neF9pbWFwX3Byb3h5X2Nsb3NlX3Nlc3Npb24ocyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBzaXplID0gYi0+ZW5kIC0gYi0+bGFzdDsKIAogICAgICAgICBpZiAoc2l6ZSAmJiBzcmMtPnJlYWQtPnJlYWR5KSB7CisgICAgICAgICAgICBjLT5sb2ctPmFjdGlvbiA9IHJlY3ZfYWN0aW9uOworCiAgICAgICAgICAgICBuID0gc3JjLT5yZWN2KHNyYywgYi0+bGFzdCwgc2l6ZSk7CiAKLSAgICAgICAgICAgIGlmIChuID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgICAgIG5neF9pbWFwX3Byb3h5X2Nsb3NlX3Nlc3Npb24ocyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgYWN0aW9uID0gYy0+bG9nLT5hY3Rpb247Ci0gICAgICAgICAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSBOVUxMOwotICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsICJwcm94aWVkIHNlc3Npb24gZG9uZSIpOwotICAgICAgICAgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gYWN0aW9uOwotCi0gICAgICAgICAgICAgICAgbmd4X2ltYXBfcHJveHlfY2xvc2Vfc2Vzc2lvbihzKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAobiA9PSBOR1hfQUdBSU4gfHwgbiA9PSAwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgICAgIGFnYWluID0gMTsKICAgICAgICAgICAgICAgICBkb193cml0ZSA9IDE7CiAgICAgICAgICAgICAgICAgYi0+bGFzdCArPSBuOworCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChuID09IE5HWF9BR0FJTiB8fCBuIDwgKHNzaXplX3QpIHNpemUpIHsKLSAgICAgICAgICAgICAgICBpZiAobmd4X2hhbmRsZV9yZWFkX2V2ZW50KHNyYy0+cmVhZCwgMCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9pbWFwX3Byb3h5X2Nsb3NlX3Nlc3Npb24ocyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjID09IHMtPmNvbm5lY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBwY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX3Byb3h5X21vZHVsZSk7Ci0gICAgICAgICAgICAgICAgbmd4X2FkZF90aW1lcihjLT5yZWFkLCBwY2YtPnRpbWVvdXQpOworICAgICAgICAgICAgaWYgKG4gPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgc3JjLT5yZWFkLT5lb2YgPSAxOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICB9IHdoaWxlIChhZ2Fpbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGMtPmxvZy0+YWN0aW9uID0gInByb3h5aW5nIjsKKworICAgIGlmICgocy0+Y29ubmVjdGlvbi0+cmVhZC0+ZW9mIHx8IHMtPnByb3h5LT51cHN0cmVhbS5jb25uZWN0aW9uLT5yZWFkLT5lb2YpCisgICAgICAgICYmIHMtPmJ1ZmZlci0+cG9zID09IHMtPmJ1ZmZlci0+bGFzdAorICAgICAgICAmJiBzLT5wcm94eS0+YnVmZmVyLT5wb3MgPT0gcy0+cHJveHktPmJ1ZmZlci0+bGFzdCkKKyAgICB7CisgICAgICAgIGFjdGlvbiA9IGMtPmxvZy0+YWN0aW9uOworICAgICAgICBjLT5sb2ctPmFjdGlvbiA9IE5VTEw7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsICJwcm94aWVkIHNlc3Npb24gZG9uZSIpOworICAgICAgICBjLT5sb2ctPmFjdGlvbiA9IGFjdGlvbjsKKworICAgICAgICBuZ3hfaW1hcF9wcm94eV9jbG9zZV9zZXNzaW9uKHMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5neF9oYW5kbGVfd3JpdGVfZXZlbnQoZHN0LT53cml0ZSwgMCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIG5neF9pbWFwX3Byb3h5X2Nsb3NlX3Nlc3Npb24ocyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobmd4X2hhbmRsZV9yZWFkX2V2ZW50KGRzdC0+cmVhZCwgMCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIG5neF9pbWFwX3Byb3h5X2Nsb3NlX3Nlc3Npb24ocyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudChzcmMtPndyaXRlLCAwKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgbmd4X2ltYXBfcHJveHlfY2xvc2Vfc2Vzc2lvbihzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChuZ3hfaGFuZGxlX3JlYWRfZXZlbnQoc3JjLT5yZWFkLCAwKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgbmd4X2ltYXBfcHJveHlfY2xvc2Vfc2Vzc2lvbihzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjID09IHMtPmNvbm5lY3Rpb24pIHsKKyAgICAgICAgcGNmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihzLCBuZ3hfaW1hcF9wcm94eV9tb2R1bGUpOworICAgICAgICBuZ3hfYWRkX3RpbWVyKGMtPnJlYWQsIHBjZi0+dGltZW91dCk7CisgICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX3NzbF9tb2R1bGUuYyBiL3NyYy9pbWFwL25neF9pbWFwX3NzbF9tb2R1bGUuYwppbmRleCBjYmJiYjY4Li5jYjJiOGNhIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9zc2xfbW9kdWxlLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5jCkBAIC0yNyw2ICsyNywxNSBAQAogI2VuZGlmCiAKIAorc3RhdGljIG5neF9jb25mX2VudW1fdCAgbmd4X2h0dHBfc3RhcnR0bHNfc3RhdGVbXSA9IHsKKyAgICB7IG5neF9zdHJpbmcoIm9mZiIpLCBOR1hfSU1BUF9TVEFSVFRMU19PRkYgfSwKKyAgICB7IG5neF9zdHJpbmcoIm9uIiksIE5HWF9JTUFQX1NUQVJUVExTX09OIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJvbmx5IiksIE5HWF9JTUFQX1NUQVJUVExTX09OTFkgfSwKKyAgICB7IG5neF9udWxsX3N0cmluZywgMCB9Cit9OworCisKKwogc3RhdGljIG5neF9jb25mX2JpdG1hc2tfdCAgbmd4X2ltYXBfc3NsX3Byb3RvY29sc1tdID0gewogICAgIHsgbmd4X3N0cmluZygiU1NMdjIiKSwgTkdYX1NTTF9TU0x2MiB9LAogICAgIHsgbmd4X3N0cmluZygiU1NMdjMiKSwgTkdYX1NTTF9TU0x2MyB9LApAQCAtNDQsNiArNTMsMTMgQEAKICAgICAgIG9mZnNldG9mKG5neF9pbWFwX3NzbF9jb25mX3QsIGVuYWJsZSksCiAgICAgICBOVUxMIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInN0YXJ0dGxzIiksCisgICAgICBOR1hfSU1BUF9NQUlOX0NPTkZ8TkdYX0lNQVBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfZW51bV9zbG90LAorICAgICAgTkdYX0lNQVBfU1JWX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2ltYXBfc3NsX2NvbmZfdCwgc3RhcnR0bHMpLAorICAgICAgbmd4X2h0dHBfc3RhcnR0bHNfc3RhdGUgfSwKKwogICAgIHsgbmd4X3N0cmluZygic3NsX2NlcnRpZmljYXRlIiksCiAgICAgICBOR1hfSU1BUF9NQUlOX0NPTkZ8TkdYX0lNQVBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCiAgICAgICBuZ3hfY29uZl9zZXRfc3RyX3Nsb3QsCkBAIC0xNDYsNiArMTYyLDcgQEAKICAgICAgKi8KIAogICAgIHNjZi0+ZW5hYmxlID0gTkdYX0NPTkZfVU5TRVQ7CisgICAgc2NmLT5zdGFydHRscyA9IE5HWF9DT05GX1VOU0VUOwogICAgIHNjZi0+c2Vzc2lvbl90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgc2NmLT5wcmVmZXJfc2VydmVyX2NpcGhlcnMgPSBOR1hfQ09ORl9VTlNFVDsKIApAQCAtMTYyLDggKzE3OSw5IEBACiAgICAgbmd4X3Bvb2xfY2xlYW51cF90ICAqY2xuOwogCiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+ZW5hYmxlLCBwcmV2LT5lbmFibGUsIDApOworICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnN0YXJ0dGxzLCBwcmV2LT5zdGFydHRscywgTkdYX0lNQVBfU1RBUlRUTFNfT0ZGKTsKIAotICAgIGlmIChjb25mLT5lbmFibGUgPT0gMCkgeworICAgIGlmIChjb25mLT5lbmFibGUgPT0gMCAmJiBjb25mLT5zdGFydHRscyA9PSBOR1hfSU1BUF9TVEFSVFRMU19PRkYpIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5oIGIvc3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5oCmluZGV4IDJhYzlmMTEuLjdiMDViY2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX3NzbF9tb2R1bGUuaAorKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9zc2xfbW9kdWxlLmgKQEAgLTEzLDEyICsxMywxOCBAQAogI2luY2x1ZGUgPG5neF9pbWFwLmg+CiAKIAorI2RlZmluZSBOR1hfSU1BUF9TVEFSVFRMU19PRkYgICAwCisjZGVmaW5lIE5HWF9JTUFQX1NUQVJUVExTX09OICAgIDEKKyNkZWZpbmUgTkdYX0lNQVBfU1RBUlRUTFNfT05MWSAgMgorCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBuZ3hfZmxhZ190ICAgICAgZW5hYmxlOwogCiAgICAgbmd4X3NzbF90ICAgICAgIHNzbDsKIAogICAgIG5neF9mbGFnX3QgICAgICBwcmVmZXJfc2VydmVyX2NpcGhlcnM7CisgICAgbmd4X2ZsYWdfdCAgICAgIHN0YXJ0dGxzOwogCiAgICAgbmd4X3VpbnRfdCAgICAgIHByb3RvY29sczsKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3JlY3YuYyBiL3NyYy9vcy91bml4L25neF9yZWN2LmMKaW5kZXggNmYwMWFiMy4uYTkwNjQzMCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3JlY3YuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcmVjdi5jCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICAgICAgICAgcmV2LT5hdmFpbGFibGUgLT0gbjsKIAogICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogcmV2LT5hdmFpbGFibGUgY2FuIGJlIG5lZ2F0aXZlIGhlcmUgYmVjYXVzZSBzb21lIGFkZGl0aW9uYWwKKyAgICAgICAgICAgICAgICAgKiByZXYtPmF2YWlsYWJsZSBtYXkgYmUgbmVnYXRpdmUgaGVyZSBiZWNhdXNlIHNvbWUgYWRkaXRpb25hbAogICAgICAgICAgICAgICAgICAqIGJ5dGVzIGNhbiBiZSByZWNlaXZlZCBiZXR3ZWVuIGtldmVudCgpIGFuZCByZWN2KCkKICAgICAgICAgICAgICAgICAgKi8KIAo=