ZGlmZiAtLWdpdCBhL3NyYy9kaWdyYXBoLmMgYi9zcmMvZGlncmFwaC5jCmluZGV4IDMxZDdmMzcuLjA2YjIyN2EgMTAwNjQ0Ci0tLSBhL3NyYy9kaWdyYXBoLmMKKysrIGIvc3JjL2RpZ3JhcGguYwpAQCAtMjQ1OSw3ICsyNDU5LDcgQEAKICAgICAgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgY3VyYnVmLT5iX2ttYXBfZ2EuZ2FfbGVuOyArK2kpCiAgICAgewotCXNwcmludGYoKGNoYXIgKilidWYsICI8YnVmZmVyPiAlcyAlcyIsCisJdmltX3NucHJpbnRmKChjaGFyICopYnVmLCBzaXplb2YoYnVmKSwgIjxidWZmZXI+ICVzICVzIiwKIAkJCQkoKGttYXBfVCAqKWN1cmJ1Zi0+Yl9rbWFwX2dhLmdhX2RhdGEpW2ldLmZyb20sCiAJCQkJICgoa21hcF9UICopY3VyYnVmLT5iX2ttYXBfZ2EuZ2FfZGF0YSlbaV0udG8pOwogCSh2b2lkKWRvX21hcCgyLCBidWYsIExBTkdNQVAsIEZBTFNFKTsKQEAgLTI0OTIsOCArMjQ5Miw4IEBACiAgICAgLyogY2xlYXIgdGhlICI6bG1hcCJzICovCiAgICAgZm9yIChpID0gMDsgaSA8IGN1cmJ1Zi0+Yl9rbWFwX2dhLmdhX2xlbjsgKytpKQogICAgIHsKLQlzcHJpbnRmKChjaGFyICopYnVmLCAiPGJ1ZmZlcj4gJXMiLAotCQkoKGttYXBfVCAqKWN1cmJ1Zi0+Yl9rbWFwX2dhLmdhX2RhdGEpW2ldLmZyb20pOworCXZpbV9zbnByaW50ZigoY2hhciAqKWJ1Ziwgc2l6ZW9mKGJ1ZiksICI8YnVmZmVyPiAlcyIsCisJCQkgICAgICAgKChrbWFwX1QgKiljdXJidWYtPmJfa21hcF9nYS5nYV9kYXRhKVtpXS5mcm9tKTsKIAkodm9pZClkb19tYXAoMSwgYnVmLCBMQU5HTUFQLCBGQUxTRSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvZWRpdC5jIGIvc3JjL2VkaXQuYwppbmRleCAzM2E2ZjYyLi40MmI0NTlkIDEwMDY0NAotLS0gYS9zcmMvZWRpdC5jCisrKyBiL3NyYy9lZGl0LmMKQEAgLTIyMTgsOCArMjIxOCw4IEBACiAJICAgIGZwID0gbWNoX2ZvcGVuKChjaGFyICopZmlsZXNbaV0sICJyIik7ICAvKiBvcGVuIGRpY3Rpb25hcnkgZmlsZSAqLwogCSAgICBpZiAoZmxhZ3MgIT0gRElDVF9FWEFDVCkKIAkgICAgewotCQlzcHJpbnRmKChjaGFyKilJT2J1ZmYsIF8oIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIiksCi0JCQkJCQkJICAgIChjaGFyICopZmlsZXNbaV0pOworCQl2aW1fc25wcmludGYoKGNoYXIgKilJT2J1ZmYsIElPU0laRSwKKwkJCSAgICAgIF8oIlNjYW5uaW5nIGRpY3Rpb25hcnk6ICVzIiksIChjaGFyICopZmlsZXNbaV0pOwogCQltc2dfdHJ1bmNfYXR0cihJT2J1ZmYsIFRSVUUsIGhsX2F0dHIoSExGX1IpKTsKIAkgICAgfQogCkBAIC0yODI3LDcgKzI4MjcsNyBAQAogCQkgICAgZGljdCA9IGluc19idWYtPmJfZm5hbWU7CiAJCSAgICBkaWN0X2YgPSBESUNUX0VYQUNUOwogCQl9Ci0JCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIlNjYW5uaW5nOiAlcyIpLAorCQl2aW1fc25wcmludGYoKGNoYXIgKilJT2J1ZmYsIElPU0laRSwgXygiU2Nhbm5pbmc6ICVzIiksCiAJCQlpbnNfYnVmLT5iX2ZuYW1lID09IE5VTEwKIAkJCSAgICA/IGJ1Zl9zcG5hbWUoaW5zX2J1ZikKIAkJCSAgICA6IGluc19idWYtPmJfc2ZuYW1lID09IE5VTEwKZGlmZiAtLWdpdCBhL3NyYy9ldmFsLmMgYi9zcmMvZXZhbC5jCmluZGV4IGUyZDNkOTMuLmM3M2Q3NzQgMTAwNjQ0Ci0tLSBhL3NyYy9ldmFsLmMKKysrIGIvc3JjL2V2YWwuYwpAQCAtMTE0MTQsNyArMTE0MTQsNyBAQAogICAgIGlmIChhcmd2YXJzWzJdLnZfdHlwZSAhPSBWQVJfVU5LTk9XTikKICAgICB7CiAJZGljdGl0ZW1fVAl2OwotCWNoYXJfdQlzdHJbMzBdOworCWNoYXJfdQkJc3RyWzMwXTsKIAogCXNwcmludGYoKGNoYXIgKilzdHIsICIweCV4IiwgKHVuc2lnbmVkIGludCl3KTsKIAl2LmRpX3R2LnZfdHlwZSA9IFZBUl9TVFJJTkc7CkBAIC0xNjg2Nyw3ICsxNjg2Nyw3IEBACiAJewogCSAgICArK25vX3dhaXRfcmV0dXJuOwogCSAgICBtc2dfc2Nyb2xsID0gVFJVRTsJICAgIC8qIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZSAqLwotCSAgICBtc2dfc3RyKChjaGFyX3UgKilfKCJjYWxsaW5nICVzIiksIHNvdXJjaW5nX25hbWUpOworCSAgICBzbXNnKChjaGFyX3UgKilfKCJjYWxsaW5nICVzIiksIHNvdXJjaW5nX25hbWUpOwogCSAgICBpZiAocF92ZXJib3NlID49IDE0KQogCSAgICB7CiAJCWNoYXJfdQlidWZbTVNHX0JVRl9MRU5dOwpAQCAtMTY5NTAsMzAgKzE2OTUwLDI2IEBACiAgICAgLyogd2hlbiBiZWluZyB2ZXJib3NlLCBtZW50aW9uIHRoZSByZXR1cm4gdmFsdWUgKi8KICAgICBpZiAocF92ZXJib3NlID49IDEyKQogICAgIHsKLQljaGFyX3UJKnNuOwotCiAJKytub193YWl0X3JldHVybjsKIAltc2dfc2Nyb2xsID0gVFJVRTsJICAgIC8qIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZSAqLwogCi0JLyogTWFrZSBzdXJlIHRoZSBvdXRwdXQgZml0cyBpbiBJT2J1ZmYuICovCi0Jc24gPSBzb3VyY2luZ19uYW1lOwotCWlmIChTVFJMRU4oc291cmNpbmdfbmFtZSkgPiBJT1NJWkUgLyAyIC0gNTApCi0JICAgIHNuID0gc291cmNpbmdfbmFtZSArIFNUUkxFTihzb3VyY2luZ19uYW1lKSAtIChJT1NJWkUgLyAyIC0gNTApOwotCiAJaWYgKGFib3J0aW5nKCkpCi0JICAgIHNtc2coKGNoYXJfdSAqKV8oIiVzIGFib3J0ZWQiKSwgc24pOworCSAgICBzbXNnKChjaGFyX3UgKilfKCIlcyBhYm9ydGVkIiksIHNvdXJjaW5nX25hbWUpOwogCWVsc2UgaWYgKGZjLnJldHR2LT52X3R5cGUgPT0gVkFSX05VTUJFUikKLQkgICAgc21zZygoY2hhcl91ICopXygiJXMgcmV0dXJuaW5nICMlbGQiKSwgc24sCi0JCQkJCSAgICAgIChsb25nKWZjLnJldHR2LT52dmFsLnZfbnVtYmVyKTsKKwkgICAgc21zZygoY2hhcl91ICopXygiJXMgcmV0dXJuaW5nICMlbGQiKSwgc291cmNpbmdfbmFtZSwKKwkJCQkJICAgICAgIChsb25nKWZjLnJldHR2LT52dmFsLnZfbnVtYmVyKTsKIAllbHNlCiAJewogCSAgICBjaGFyX3UJYnVmW01TR19CVUZfTEVOXTsKIAkgICAgY2hhcl91CW51bWJ1ZltOVU1CVUZMRU5dOwogCSAgICBjaGFyX3UJKnRvZnJlZTsKIAorCSAgICAvKiBUaGUgdmFsdWUgbWF5IGJlIHZlcnkgbG9uZy4gIFNraXAgdGhlIG1pZGRsZSBwYXJ0LCBzbyB0aGF0IHdlCisJICAgICAqIGhhdmUgc29tZSBpZGVhIGhvdyBpdCBzdGFydHMgYW5kIGVuZHMuIHNtc2coKSB3b3VsZCBhbHdheXMKKwkgICAgICogdHJ1bmNhdGUgaXQgYXQgdGhlIGVuZC4gKi8KIAkgICAgdHJ1bmNfc3RyaW5nKHR2MnN0cmluZyhmYy5yZXR0diwgJnRvZnJlZSwgbnVtYnVmKSwKIAkJCQkJCQkgICBidWYsIE1TR19CVUZfQ0xFTik7Ci0JICAgIHNtc2coKGNoYXJfdSAqKV8oIiVzIHJldHVybmluZyAlcyIpLCBzbiwgYnVmKTsKKwkgICAgc21zZygoY2hhcl91ICopXygiJXMgcmV0dXJuaW5nICVzIiksIHNvdXJjaW5nX25hbWUsIGJ1Zik7CiAJICAgIHZpbV9mcmVlKHRvZnJlZSk7CiAJfQogCW1zZ19wdXRzKChjaGFyX3UgKikiXG4iKTsgICAvKiBkb24ndCBvdmVyd3JpdGUgdGhpcyBlaXRoZXIgKi8KQEAgLTE2OTk0LDcgKzE2OTkwLDcgQEAKICAgICB7CiAJKytub193YWl0X3JldHVybjsKIAltc2dfc2Nyb2xsID0gVFJVRTsJICAgIC8qIGFsd2F5cyBzY3JvbGwgdXAsIGRvbid0IG92ZXJ3cml0ZSAqLwotCW1zZ19zdHIoKGNoYXJfdSAqKV8oImNvbnRpbnVpbmcgaW4gJXMiKSwgc291cmNpbmdfbmFtZSk7CisJc21zZygoY2hhcl91ICopXygiY29udGludWluZyBpbiAlcyIpLCBzb3VyY2luZ19uYW1lKTsKIAltc2dfcHV0cygoY2hhcl91ICopIlxuIik7ICAgLyogZG9uJ3Qgb3ZlcndyaXRlIHRoaXMgZWl0aGVyICovCiAJY21kbGluZV9yb3cgPSBtc2dfcm93OwogCS0tbm9fd2FpdF9yZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvZXhfY21kcy5jIGIvc3JjL2V4X2NtZHMuYwppbmRleCA2ODAxODhkLi5mZDU1NjA1IDEwMDY0NAotLS0gYS9zcmMvZXhfY21kcy5jCisrKyBiL3NyYy9leF9jbWRzLmMKQEAgLTg5LDggKzg5LDkgQEAKIAllbHNlCiAjZW5kaWYKIAkgICAgYnVmMlswXSA9IE5VTDsKLQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCI8JXM+JXMlcyAgJWQsICBIZXggJTAyeCwgIE9jdGFsICUwM28iKSwKLQkJdHJhbnNjaGFyKGMpLCBidWYxLCBidWYyLCBjLCBjLCBjKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilJT2J1ZmYsIElPU0laRSwKKwkJXygiPCVzPiVzJXMgICVkLCAgSGV4ICUwMngsICBPY3RhbCAlMDNvIiksCisJCQkJCSAgIHRyYW5zY2hhcihjKSwgYnVmMSwgYnVmMiwgYywgYywgYyk7CiAjaWZkZWYgRkVBVF9NQllURQogCWMgPSBjMTsKIAljMSA9IGMyOwpAQCAtMTEzLDggKzExNCw4IEBACiAjZW5kaWYKIAkJKQogCSAgICBJT2J1ZmZbbGVuKytdID0gJyAnOyAvKiBkcmF3IGNvbXBvc2luZyBjaGFyIG9uIHRvcCBvZiBhIHNwYWNlICovCi0JSU9idWZmW2xlbiArICgqbWJfY2hhcjJieXRlcykoYywgSU9idWZmICsgbGVuKV0gPSBOVUw7Ci0Jc3ByaW50ZigoY2hhciAqKUlPYnVmZiArIFNUUkxFTihJT2J1ZmYpLAorCWxlbiArPSAoKm1iX2NoYXIyYnl0ZXMpKGMsIElPYnVmZiArIGxlbik7CisJdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmICsgbGVuLCBJT1NJWkUgLSBsZW4sCiAJCQljIDwgMHgxMDAwMCA/IF8oIj4gJWQsIEhleCAlMDR4LCBPY3RhbCAlbyIpCiAJCQkJICAgIDogXygiPiAlZCwgSGV4ICUwOHgsIE9jdGFsICVvIiksIGMsIGMsIGMpOwogCWMgPSBjMTsKQEAgLTk3NCw4ICs5NzUsOCBAQAogCXsKIAkgICAgaWYgKGRvX2luKQogCSAgICB7Ci0JCXNwcmludGYoKGNoYXIgKiltc2dfYnVmLCBfKCIlbGQgbGluZXMgZmlsdGVyZWQiKSwKLQkJCQkJCQkgICAgIChsb25nKWxpbmVjb3VudCk7CisJCXZpbV9zbnByaW50ZigoY2hhciAqKW1zZ19idWYsIHNpemVvZihtc2dfYnVmKSwKKwkJCQkgICAgXygiJWxkIGxpbmVzIGZpbHRlcmVkIiksIChsb25nKWxpbmVjb3VudCk7CiAJCWlmIChtc2cobXNnX2J1ZikgJiYgIW1zZ19zY3JvbGwpCiAJCXsKIAkJICAgIC8qIHNhdmUgbWVzc2FnZSB0byBkaXNwbGF5IGl0IGFmdGVyIHJlZHJhdyAqLwpAQCAtMTMzNyw3ICsxMzM4LDggQEAKICAgICBjaGFyICAgICptZXNzYWdlOwogICAgIGNoYXJfdSAgKmxpbmU7CiB7Ci0gICAgc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiJXN2aW1pbmZvOiAlcyBpbiBsaW5lOiAiKSwgZXJybnVtLCBtZXNzYWdlKTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilJT2J1ZmYsIElPU0laRSwgXygiJXN2aW1pbmZvOiAlcyBpbiBsaW5lOiAiKSwKKwkJCQkJCQkgICAgIGVycm51bSwgbWVzc2FnZSk7CiAgICAgU1RSTkNBVChJT2J1ZmYsIGxpbmUsIElPU0laRSAtIFNUUkxFTihJT2J1ZmYpKTsKICAgICBpZiAoSU9idWZmW1NUUkxFTihJT2J1ZmYpIC0gMV0gPT0gJ1xuJykKIAlJT2J1ZmZbU1RSTEVOKElPYnVmZikgLSAxXSA9IE5VTDsKQEAgLTEzNzMsMTcgKzEzNzUsMTEgQEAKICAgICBmcCA9IG1jaF9mb3BlbigoY2hhciAqKWZuYW1lLCBSRUFEQklOKTsKIAogICAgIGlmIChwX3ZlcmJvc2UgPiAwKQotICAgIHsKLQljaGFyX3UJKnM7Ci0KLQlzID0gZm5hbWU7Ci0JaWYgKFNUUkxFTihmbmFtZSkgPiBJT1NJWkUgLSAxMDApCi0JICAgIHMgPSBmbmFtZSArIFNUUkxFTihmbmFtZSkgLSAoSU9TSVpFIC0gMTAwKTsKLQlzbXNnKChjaGFyX3UgKilfKCJSZWFkaW5nIHZpbWluZm8gZmlsZSBcIiVzXCIlcyVzJXMiKSwgcywKLQkJICAgIHdhbnRfaW5mbyA/IF8oIiBpbmZvIikgOiAiIiwKLQkJICAgIHdhbnRfbWFya3MgPyBfKCIgbWFya3MiKSA6ICIiLAotCQkgICAgZnAgPT0gTlVMTCA/IF8oIiBGQUlMRUQiKSA6ICIiKTsKLSAgICB9CisJc21zZygoY2hhcl91ICopXygiUmVhZGluZyB2aW1pbmZvIGZpbGUgXCIlc1wiJXMlcyVzIiksCisJCWZuYW1lLAorCQl3YW50X2luZm8gPyBfKCIgaW5mbyIpIDogIiIsCisJCXdhbnRfbWFya3MgPyBfKCIgbWFya3MiKSA6ICIiLAorCQlmcCA9PSBOVUxMID8gXygiIEZBSUxFRCIpIDogIiIpOwogCiAgICAgdmltX2ZyZWUoZm5hbWUpOwogICAgIGlmIChmcCA9PSBOVUxMKQpAQCAtMTYwNyw3ICsxNjAzLDcgQEAKICAgICB9CiAKICAgICBpZiAocF92ZXJib3NlID4gMCkKLQltc2dfc3RyKChjaGFyX3UgKilfKCJXcml0aW5nIHZpbWluZm8gZmlsZSBcIiVzXCIiKSwgZm5hbWUpOworCXNtc2coKGNoYXJfdSAqKV8oIldyaXRpbmcgdmltaW5mbyBmaWxlIFwiJXNcIiIpLCBmbmFtZSk7CiAKICAgICB2aW1pbmZvX2VycmNudCA9IDA7CiAgICAgZG9fdmltaW5mbyhmcF9pbiwgZnBfb3V0LCAhZm9yY2VpdCwgIWZvcmNlaXQsIEZBTFNFKTsKQEAgLTQ1MjksNiArNDUyNSw4IEBACiBkb19zdWJfbXNnKGNvdW50X29ubHkpCiAgICAgaW50CSAgICBjb3VudF9vbmx5OwkJLyogdXNlZCAnbicgZmxhZyBmb3IgIjpzIiAqLwogeworICAgIGludAkgICAgbGVuID0gMDsKKwogICAgIC8qCiAgICAgICogT25seSByZXBvcnQgc3Vic3RpdHV0aW9ucyB3aGVuOgogICAgICAqIC0gbW9yZSB0aGFuICdyZXBvcnQnIHN1YnN0aXR1dGlvbnMKQEAgLTQ1NDAsMjAgKzQ1MzgsMjQgQEAKIAkgICAgJiYgbWVzc2FnaW5nKCkpCiAgICAgewogCWlmIChnb3RfaW50KQorCXsKIAkgICAgU1RSQ1BZKG1zZ19idWYsIF8oIihJbnRlcnJ1cHRlZCkgIikpOwotCWVsc2UKLQkgICAgbXNnX2J1ZlswXSA9IE5VTDsKKwkgICAgbGVuID0gU1RSTEVOKG1zZ19idWYpOworCX0KIAlpZiAoc3ViX25zdWJzID09IDEpCi0JICAgIFNUUkNBVChtc2dfYnVmLCBjb3VudF9vbmx5ID8gXygiMSBtYXRjaCIpIDogXygiMSBzdWJzdGl0dXRpb24iKSk7CisJICAgIHZpbV9zbnByaW50ZigoY2hhciAqKW1zZ19idWYgKyBsZW4sIHNpemVvZihtc2dfYnVmKSAtIGxlbiwKKwkJICAgICIlcyIsIGNvdW50X29ubHkgPyBfKCIxIG1hdGNoIikgOiBfKCIxIHN1YnN0aXR1dGlvbiIpKTsKIAllbHNlCi0JICAgIHNwcmludGYoKGNoYXIgKiltc2dfYnVmICsgU1RSTEVOKG1zZ19idWYpLAorCSAgICB2aW1fc25wcmludGYoKGNoYXIgKiltc2dfYnVmICsgbGVuLCBzaXplb2YobXNnX2J1ZikgLSBsZW4sCiAJCSAgICBjb3VudF9vbmx5ID8gXygiJWxkIG1hdGNoZXMiKSA6IF8oIiVsZCBzdWJzdGl0dXRpb25zIiksCiAJCQkJCQkJCSAgIHN1Yl9uc3Vicyk7CisJbGVuID0gU1RSTEVOKG1zZ19idWYpOwogCWlmIChzdWJfbmxpbmVzID09IDEpCi0JICAgIFNUUkNBVChtc2dfYnVmLCBfKCIgb24gMSBsaW5lIikpOworCSAgICB2aW1fc25wcmludGYoKGNoYXIgKiltc2dfYnVmICsgbGVuLCBzaXplb2YobXNnX2J1ZikgLSBsZW4sCisJCSAgICAiJXMiLCBfKCIgb24gMSBsaW5lIikpOwogCWVsc2UKLQkgICAgc3ByaW50ZigoY2hhciAqKW1zZ19idWYgKyBTVFJMRU4obXNnX2J1ZiksIF8oIiBvbiAlbGQgbGluZXMiKSwKLQkJCQkJCQkgICAgKGxvbmcpc3ViX25saW5lcyk7CisJICAgIHZpbV9zbnByaW50ZigoY2hhciAqKW1zZ19idWYgKyBsZW4sIHNpemVvZihtc2dfYnVmKSAtIGxlbiwKKwkJICAgIF8oIiBvbiAlbGQgbGluZXMiKSwgKGxvbmcpc3ViX25saW5lcyk7CiAJaWYgKG1zZyhtc2dfYnVmKSkKIAl7CiAJICAgIC8qIHNhdmUgbWVzc2FnZSB0byBkaXNwbGF5IGl0IGFmdGVyIHJlZHJhdyAqLwpAQCAtNDY4Niw5ICs0Njg4LDkgQEAKICAgICBlbHNlIGlmIChuZG9uZSA9PSAwKQogICAgIHsKIAlpZiAodHlwZSA9PSAndicpCi0JICAgIG1zZ19zdHIoKGNoYXJfdSAqKV8oIlBhdHRlcm4gZm91bmQgaW4gZXZlcnkgbGluZTogJXMiKSwgcGF0KTsKKwkgICAgc21zZygoY2hhcl91ICopXygiUGF0dGVybiBmb3VuZCBpbiBldmVyeSBsaW5lOiAlcyIpLCBwYXQpOwogCWVsc2UKLQkgICAgbXNnX3N0cigoY2hhcl91ICopXyhlX3BhdG5vdGYyKSwgcGF0KTsKKwkgICAgc21zZygoY2hhcl91ICopXyhlX3BhdG5vdGYyKSwgcGF0KTsKICAgICB9CiAgICAgZWxzZQogCWdsb2JhbF9leGUoY21kKTsKQEAgLTQ5NTUsOCArNDk1Nyw3IEBACiAJICAgICAqLwogCSAgICBpZiAoKGhlbHBmZCA9IG1jaF9mb3BlbigoY2hhciAqKXBfaGYsIFJFQURCSU4pKSA9PSBOVUxMKQogCSAgICB7Ci0JCW1zZ19zdHIoKGNoYXJfdSAqKV8oIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIpLAotCQkJCQkJCQkJcF9oZik7CisJCXNtc2coKGNoYXJfdSAqKV8oIlNvcnJ5LCBoZWxwIGZpbGUgXCIlc1wiIG5vdCBmb3VuZCIpLCBwX2hmKTsKIAkJZ290byBlcnJldDsKIAkgICAgfQogCSAgICBmY2xvc2UoaGVscGZkKTsKQEAgLTU2NjAsNyArNTY2MSw3IEBACiAJICAgIGdvdF9pbnQgPSBUUlVFOwogCWVsc2UKIAl7Ci0JICAgIHMgPSBhbGxvYygzMCk7CisJICAgIHMgPSBhbGxvYygxOCArIFNUUkxFTih0YWdmbmFtZSkpOwogCSAgICBpZiAocyA9PSBOVUxMKQogCQlnb3RfaW50ID0gVFJVRTsKIAkgICAgZWxzZQpAQCAtNTc5Myw3ICs1Nzk0LDcgQEAKIAkJaWYgKCpwMiA9PSAnXHQnKQogCQl7CiAJCSAgICAqcDIgPSBOVUw7Ci0JCSAgICBzcHJpbnRmKChjaGFyICopTmFtZUJ1ZmYsCisJCSAgICB2aW1fc25wcmludGYoKGNoYXIgKilOYW1lQnVmZiwgTUFYUEFUSEwsCiAJCQkgICAgXygiRTE1NDogRHVwbGljYXRlIHRhZyBcIiVzXCIgaW4gZmlsZSAlcy8lcyIpLAogCQkJCSAgICAgKChjaGFyX3UgKiopZ2EuZ2FfZGF0YSlbaV0sIGRpciwgcDIgKyAxKTsKIAkJICAgIEVNU0coTmFtZUJ1ZmYpOwpAQCAtNjMwNyw3ICs2MzA4LDcgQEAKIHsKICAgICBjaGFyX3UJKnA7CiAKLSAgICBtc2dfc3RyKChjaGFyX3UgKikic2lnbiAlcyIsIHNwLT5zbl9uYW1lKTsKKyAgICBzbXNnKChjaGFyX3UgKikic2lnbiAlcyIsIHNwLT5zbl9uYW1lKTsKICAgICBpZiAoc3AtPnNuX2ljb24gIT0gTlVMTCkKICAgICB7CiAJTVNHX1BVVFMoIiBpY29uPSIpOwpkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMuaCBiL3NyYy9leF9jbWRzLmgKaW5kZXggNDE3OTQ1ZC4uOGVhZGE5NiAxMDA2NDQKLS0tIGEvc3JjL2V4X2NtZHMuaAorKysgYi9zcmMvZXhfY21kcy5oCkBAIC01MzIsNyArNTMyLDcgQEAKIEVYKENNRF9tb2RlLAkJIm1vZGUiLAkJZXhfbW9kZSwKIAkJCVdPUkQxfFRSTEJBUnxDTURXSU4pLAogRVgoQ01EX216c2NoZW1lLAkibXpzY2hlbWUiLAlleF9tenNjaGVtZSwKLQkJCVJBTkdFfEVYVFJBfERGTEFMTHxORUVEQVJHfENNRFdJTiksCisJCQlSQU5HRXxFWFRSQXxERkxBTEx8TkVFREFSR3xDTURXSU58U0JPWE9LKSwKIEVYKENNRF9temZpbGUsCQkibXpmaWxlIiwJZXhfbXpmaWxlLAogCQkJUkFOR0V8RklMRTF8TkVFREFSR3xDTURXSU4pLAogRVgoQ01EX25leHQsCQkibmV4dCIsCQlleF9uZXh0LApkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMyLmMgYi9zcmMvZXhfY21kczIuYwppbmRleCBmOWUxZTVhLi5jMjI0MTRlIDEwMDY0NAotLS0gYS9zcmMvZXhfY21kczIuYworKysgYi9zcmMvZXhfY21kczIuYwpAQCAtMTQxLDE2ICsxNDEsOSBAQAogICAgIGlmIChzb3VyY2luZ19uYW1lICE9IE5VTEwpCiAJbXNnKHNvdXJjaW5nX25hbWUpOwogICAgIGlmIChzb3VyY2luZ19sbnVtICE9IDApCi0gICAgewotCWNoYXJfdQkgICAgYnVmW0lPU0laRV07Ci0KLQkvKiBUcnVuY2F0ZSB0aGUgY29tbWFuZCwgdGhlIHdob2xlIG11c3QgZml0IGluIElPYnVmZi4gKi8KLQlTVFJOQ1BZKGJ1ZiwgY21kLCBJT1NJWkUgLSA1MCk7Ci0JYnVmW0lPU0laRSAtIDUwXSA9IE5VTDsKLQlzbXNnKChjaGFyX3UgKilfKCJsaW5lICVsZDogJXMiKSwgKGxvbmcpc291cmNpbmdfbG51bSwgYnVmKTsKLSAgICB9CisJc21zZygoY2hhcl91ICopXygibGluZSAlbGQ6ICVzIiksIChsb25nKXNvdXJjaW5nX2xudW0sIGNtZCk7CiAgICAgZWxzZQotCW1zZ19zdHIoKGNoYXJfdSAqKV8oImNtZDogJXMiKSwgY21kKTsKKwlzbXNnKChjaGFyX3UgKilfKCJjbWQ6ICVzIiksIGNtZCk7CiAKICAgICAvKgogICAgICAqIFJlcGVhdCBnZXR0aW5nIGEgY29tbWFuZCBhbmQgZXhlY3V0aW5nIGl0LgpAQCAtMzQyLDcgKzMzNSw4IEBACiAJCXAgPSAoY2hhcl91ICopIjxTTlI+IjsKIAkgICAgZWxzZQogCQlwID0gKGNoYXJfdSAqKSIiOwotCSAgICBzbXNnKChjaGFyX3UgKilfKCJCcmVha3BvaW50IGluIFwiJXMlc1wiIGxpbmUgJWxkIiksIHAsCisJICAgIHNtc2coKGNoYXJfdSAqKV8oIkJyZWFrcG9pbnQgaW4gXCIlcyVzXCIgbGluZSAlbGQiKSwKKwkJICAgIHAsCiAJCSAgICBkZWJ1Z19icmVha3BvaW50X25hbWUgKyAoKnAgPT0gTlVMID8gMCA6IDMpLAogCQkgICAgKGxvbmcpZGVidWdfYnJlYWtwb2ludF9sbnVtKTsKIAkgICAgZGVidWdfYnJlYWtwb2ludF9uYW1lID0gTlVMTDsKQEAgLTI0NzMsMTMgKzI0NjcsOCBAQAogICAgIGlmIChidWYgIT0gTlVMTCAmJiBydHBfY29weSAhPSBOVUxMKQogICAgIHsKIAlpZiAocF92ZXJib3NlID4gMSkKLQl7Ci0JICAgIGlmIChTVFJMRU4obmFtZSkgKyBTVFJMRU4ocF9ydHApID4gSU9TSVpFIC0gMTAwKQotCQlNU0coXygiU2VhcmNoaW5nIGZvciBhIGxvbmcgbmFtZSBpbiAncnVudGltZXBhdGgnIikpOwotCSAgICBlbHNlCi0JCXNtc2coKGNoYXJfdSAqKV8oIlNlYXJjaGluZyBmb3IgXCIlc1wiIGluIFwiJXNcIiIpLAorCSAgICBzbXNnKChjaGFyX3UgKilfKCJTZWFyY2hpbmcgZm9yIFwiJXNcIiBpbiBcIiVzXCIiKSwKIAkJCQkJCSAoY2hhciAqKW5hbWUsIChjaGFyICopcF9ydHApOwotCX0KIAogCS8qIExvb3Agb3ZlciBhbGwgZW50cmllcyBpbiAncnVudGltZXBhdGgnLiAqLwogCXJ0cCA9IHJ0cF9jb3B5OwpAQCAtMjUwMSw3ICsyNDkwLDcgQEAKIAkJCQkJCQkJICAgICAgICJcdCAiKTsKIAogCQkgICAgaWYgKHBfdmVyYm9zZSA+IDIpCi0JCQltc2dfc3RyKChjaGFyX3UgKilfKCJTZWFyY2hpbmcgZm9yIFwiJXNcIiIpLCBidWYpOworCQkJc21zZygoY2hhcl91ICopXygiU2VhcmNoaW5nIGZvciBcIiVzXCIiKSwgYnVmKTsKIAogCQkgICAgLyogRXhwYW5kIHdpbGRjYXJkcywgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgZWFjaCBtYXRjaC4gKi8KIAkJICAgIGlmIChnZW5fZXhwYW5kX3dpbGRjYXJkcygxLCAmYnVmLCAmbnVtX2ZpbGVzLCAmZmlsZXMsCkBAIC0yNTIzLDcgKzI1MTIsNyBAQAogICAgIHZpbV9mcmVlKGJ1Zik7CiAgICAgdmltX2ZyZWUocnRwX2NvcHkpOwogICAgIGlmIChwX3ZlcmJvc2UgPiAwICYmICFkaWRfb25lKQotCW1zZ19zdHIoKGNoYXJfdSAqKV8oIm5vdCBmb3VuZCBpbiAncnVudGltZXBhdGgnOiBcIiVzXCIiKSwgbmFtZSk7CisJc21zZygoY2hhcl91ICopXygibm90IGZvdW5kIGluICdydW50aW1lcGF0aCc6IFwiJXNcIiIpLCBuYW1lKTsKIAogI2lmZGVmIEFNSUdBCiAgICAgcHJvYy0+cHJfV2luZG93UHRyID0gc2F2ZV93aW5wdHI7CkBAIC0yNzMzLDcgKzI3MjIsNyBAQAogI2VuZGlmCiAgICAgaWYgKG1jaF9pc2RpcihmbmFtZV9leHApKQogICAgIHsKLQltc2dfc3RyKChjaGFyX3UgKilfKCJDYW5ub3Qgc291cmNlIGEgZGlyZWN0b3J5OiBcIiVzXCIiKSwgZm5hbWUpOworCXNtc2coKGNoYXJfdSAqKV8oIkNhbm5vdCBzb3VyY2UgYSBkaXJlY3Rvcnk6IFwiJXNcIiIpLCBmbmFtZSk7CiAJZ290byB0aGVlbmQ7CiAgICAgfQogCkBAIC0yNzcxLDEwICsyNzYwLDEwIEBACiAJaWYgKHBfdmVyYm9zZSA+IDApCiAJewogCSAgICBpZiAoc291cmNpbmdfbmFtZSA9PSBOVUxMKQotCQltc2dfc3RyKChjaGFyX3UgKilfKCJjb3VsZCBub3Qgc291cmNlIFwiJXNcIiIpLCBmbmFtZSk7CisJCXNtc2coKGNoYXJfdSAqKV8oImNvdWxkIG5vdCBzb3VyY2UgXCIlc1wiIiksIGZuYW1lKTsKIAkgICAgZWxzZQogCQlzbXNnKChjaGFyX3UgKilfKCJsaW5lICVsZDogY291bGQgbm90IHNvdXJjZSBcIiVzXCIiKSwKLQkJCXNvdXJjaW5nX2xudW0sIGZuYW1lKTsKKwkJCQkJCQlzb3VyY2luZ19sbnVtLCBmbmFtZSk7CiAJfQogCWdvdG8gdGhlZW5kOwogICAgIH0KQEAgLTI3ODcsMTAgKzI3NzYsMTAgQEAKICAgICBpZiAocF92ZXJib3NlID4gMSkKICAgICB7CiAJaWYgKHNvdXJjaW5nX25hbWUgPT0gTlVMTCkKLQkgICAgbXNnX3N0cigoY2hhcl91ICopXygic291cmNpbmcgXCIlc1wiIiksIGZuYW1lKTsKKwkgICAgc21zZygoY2hhcl91ICopXygic291cmNpbmcgXCIlc1wiIiksIGZuYW1lKTsKIAllbHNlCiAJICAgIHNtc2coKGNoYXJfdSAqKV8oImxpbmUgJWxkOiBzb3VyY2luZyBcIiVzXCIiKSwKLQkJICAgIHNvdXJjaW5nX2xudW0sIGZuYW1lKTsKKwkJCQkJCQlzb3VyY2luZ19sbnVtLCBmbmFtZSk7CiAgICAgfQogICAgIGlmIChpc192aW1yYykKIAl2aW1yY19mb3VuZCgpOwpAQCAtMjk3MiwxNiArMjk2MSwxMiBAQAogICAgIHNvdXJjaW5nX2xudW0gPSBzYXZlX3NvdXJjaW5nX2xudW07CiAgICAgaWYgKHBfdmVyYm9zZSA+IDEpCiAgICAgewotCW1zZ19zdHIoKGNoYXJfdSAqKV8oImZpbmlzaGVkIHNvdXJjaW5nICVzIiksIGZuYW1lKTsKKwlzbXNnKChjaGFyX3UgKilfKCJmaW5pc2hlZCBzb3VyY2luZyAlcyIpLCBmbmFtZSk7CiAJaWYgKHNvdXJjaW5nX25hbWUgIT0gTlVMTCkKLQkgICAgbXNnX3N0cigoY2hhcl91ICopXygiY29udGludWluZyBpbiAlcyIpLCBzb3VyY2luZ19uYW1lKTsKKwkgICAgc21zZygoY2hhcl91ICopXygiY29udGludWluZyBpbiAlcyIpLCBzb3VyY2luZ19uYW1lKTsKICAgICB9CiAjaWZkZWYgU1RBUlRVUFRJTUUKLSMgaWZkZWYgSEFWRV9TTlBSSU5URgotICAgIHNucHJpbnRmKElPYnVmZiwgSU9TSVpFLCAic291cmNpbmcgJXMiLCBmbmFtZSk7Ci0jIGVsc2UKLSAgICBzcHJpbnRmKElPYnVmZiwgInNvdXJjaW5nICVzIiwgZm5hbWUpOwotIyBlbmRpZgorICAgIHZpbV9zbnByaW50ZihJT2J1ZmYsIElPU0laRSwgInNvdXJjaW5nICVzIiwgZm5hbWUpOwogICAgIHRpbWVfbXNnKElPYnVmZiwgJnR2X3N0YXJ0KTsKICAgICB0aW1lX3BvcCgmdHZfcmVsKTsKICNlbmRpZgpAQCAtNDI2MywxNCArNDI0OCwxNSBAQAogCSAgICBwYWdlX3BydHBvcyA9IHBydHBvczsKIAl9CiAKLQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCJQcmludGVkOiAlcyIpLCBzZXR0aW5ncy5qb2JuYW1lKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilJT2J1ZmYsIElPU0laRSwgXygiUHJpbnRlZDogJXMiKSwKKwkJCQkJCQkgICAgc2V0dGluZ3Muam9ibmFtZSk7CiAJcHJ0X21lc3NhZ2UoSU9idWZmKTsKICAgICB9CiAKIHByaW50X2ZhaWw6CiAgICAgaWYgKGdvdF9pbnQgfHwgc2V0dGluZ3MudXNlcl9hYm9ydCkKICAgICB7Ci0Jc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiUHJpbnRpbmcgYWJvcnRlZCIpKTsKKwlzcHJpbnRmKChjaGFyICopSU9idWZmLCAiJXMiLCBfKCJQcmludGluZyBhYm9ydGVkIikpOwogCXBydF9tZXNzYWdlKElPYnVmZik7CiAgICAgfQogICAgIG1jaF9wcmludF9lbmQoJnNldHRpbmdzKTsKQEAgLTQ5NTQsNyArNDk0MCw3IEBACiBwcnRfd3JpdGVfc3RyaW5nKHMpCiAgICAgY2hhcgkqczsKIHsKLSAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJXMiLCBzKTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLCAiJXMiLCBzKTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogfQogCkBAIC00OTkwLDggKzQ5NzYsOCBAQAogICAgIGludAkJaGVpZ2h0OwogICAgIGNoYXIJKmZvbnQ7CiB7Ci0gICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIi9fJXMgL1ZJTS0lcyAvJXMgcmVmXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfbmFtZSwgZW5jb2RpbmcsIGZvbnQpOworICAgIHZpbV9zbnByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgc2l6ZW9mKHBydF9saW5lX2J1ZmZlciksCisJCQkgICIvXyVzIC9WSU0tJXMgLyVzIHJlZlxuIiwgbmV3X25hbWUsIGVuY29kaW5nLCBmb250KTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogI2lmZGVmIEZFQVRfTUJZVEUKICAgICBpZiAocHJ0X291dF9tYnl0ZSkKQEAgLTQ5OTksOCArNDk4NSw4IEBACiAJCSAgICAgICBuZXdfbmFtZSwgaGVpZ2h0LCA1MDAuL3BydF9wc19jb3VyaWVyX2ZvbnQud3gsIG5ld19uYW1lKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiLyVzICVkIC9fJXMgZmZzXG4iLAotCQkJCQkJICAgIG5ld19uYW1lLCBoZWlnaHQsIG5ld19uYW1lKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJICAgICAiLyVzICVkIC9fJXMgZmZzXG4iLCBuZXdfbmFtZSwgaGVpZ2h0LCBuZXdfbmFtZSk7CiAgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKIH0KIApAQCAtNTAxNCwxMSArNTAwMCwxMSBAQAogICAgIGludAkJaGVpZ2h0OwogICAgIGNoYXIJKmNpZGZvbnQ7CiB7Ci0gICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIi9fJXMgLyVzWy8lc10gdmltX2NvbXBvc2Vmb250XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X25hbWUsIHBydF9jbWFwLCBjaWRmb250KTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCSAgICAgICIvXyVzIC8lc1svJXNdIHZpbV9jb21wb3NlZm9udFxuIiwgbmV3X25hbWUsIHBydF9jbWFwLCBjaWRmb250KTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwotICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIvJXMgJWQgL18lcyBmZnNcbiIsIG5ld19uYW1lLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19uYW1lKTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJICAgICAiLyVzICVkIC9fJXMgZmZzXG4iLCBuZXdfbmFtZSwgaGVpZ2h0LCBuZXdfbmFtZSk7CiAgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKIH0KIApAQCAtNTAzMCw3ICs1MDE2LDggQEAKICAgICBjaGFyCSpvcmlnaW5hbF9uYW1lOwogICAgIGNoYXIJKm5ld19uYW1lOwogewotICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIvJXMgJXMgZFxuIiwgbmV3X25hbWUsIG9yaWdpbmFsX25hbWUpOworICAgIHZpbV9zbnByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgc2l6ZW9mKHBydF9saW5lX2J1ZmZlciksCisJCQkJICAgICAgICIvJXMgJXMgZFxuIiwgbmV3X25hbWUsIG9yaWdpbmFsX25hbWUpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiB9CiAjZW5kaWYKQEAgLTUxMDUsNyArNTA5Miw4IEBACiAgICAgZG91YmxlCXZhbHVlOwogICAgIGludAkJcHJlYzsKIHsKLSAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiLyVzICIsIG5hbWUpOworICAgIHZpbV9zbnByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgc2l6ZW9mKHBydF9saW5lX2J1ZmZlciksCisJCQkJCQkJCSIvJXMgIiwgbmFtZSk7CiAgICAgcHJ0X3dyaXRlX2ZpbGUocHJ0X2xpbmVfYnVmZmVyKTsKICAgICBwcnRfd3JpdGVfcmVhbCh2YWx1ZSwgcHJlYyk7CiAgICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgImRcbiIpOwpAQCAtNTUzMiw3ICs1NTIwLDggQEAKIHBydF9kc2Nfbm9hcmcoY29tbWVudCkKICAgICBjaGFyCSpjb21tZW50OwogewotICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlJSUlJXNcbiIsIGNvbW1lbnQpOworICAgIHZpbV9zbnByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgc2l6ZW9mKHBydF9saW5lX2J1ZmZlciksCisJCQkJCQkJICIlJSUlJXNcbiIsIGNvbW1lbnQpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiB9CiAKQEAgLTU1NDEsNyArNTUzMCw4IEBACiAgICAgY2hhcgkqY29tbWVudDsKICAgICBjaGFyCSp0ZXh0OwogewotICAgIHNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlJSUlJXM6ICVzXG4iLCBjb21tZW50LCB0ZXh0KTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCQkgICAgICAgIiUlJSUlczogJXNcbiIsIGNvbW1lbnQsIHRleHQpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiB9CiAKQEAgLTU1NTEsNyArNTU0MSw4IEBACiAgICAgY2hhcgkqdGV4dDsKIHsKICAgICAvKiBUT0RPIC0gc2hvdWxkIHNjYW4gJ3RleHQnIGZvciBhbnkgY2hhcnMgbmVlZGluZyBlc2NhcGluZyEgKi8KLSAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiJSUlJSVzOiAoJXMpXG4iLCBjb21tZW50LCB0ZXh0KTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCQkgICAgICIlJSUlJXM6ICglcylcbiIsIGNvbW1lbnQsIHRleHQpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiB9CiAKQEAgLTU1NjUsNyArNTU1Niw4IEBACiB7CiAgICAgaW50CQlpOwogCi0gICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIiUlJSUlczoiLCBjb21tZW50KTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCQkJCSAgIiUlJSUlczoiLCBjb21tZW50KTsKICAgICBwcnRfd3JpdGVfZmlsZShwcnRfbGluZV9idWZmZXIpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkBAIC01NTg0LDEyICs1NTc2LDE1IEBACiAgICAgY2hhcgkqc3RyaW5nOwogewogICAgIGlmIChjb21tZW50ICE9IE5VTEwpCi0Jc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIiUlJSUlczogJXMiLCBjb21tZW50LCB0eXBlKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCQkJICIlJSUlJXM6ICVzIiwgY29tbWVudCwgdHlwZSk7CiAgICAgZWxzZQotCXNwcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsICIlJSUlKyAlcyIsIHR5cGUpOworCXZpbV9zbnByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgc2l6ZW9mKHBydF9saW5lX2J1ZmZlciksCisJCQkJCQkJICAgICIlJSUlKyAlcyIsIHR5cGUpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiAKLSAgICBzcHJpbnRmKChjaGFyICopcHJ0X2xpbmVfYnVmZmVyLCAiICVzXG4iLCBzdHJpbmcpOworICAgIHZpbV9zbnByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgc2l6ZW9mKHBydF9saW5lX2J1ZmZlciksCisJCQkJCQkJICAgICAiICVzXG4iLCBzdHJpbmcpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiB9CiAKQEAgLTU2NTQsNyArNTY0OSw4IEBACiAgICAgY2hhcgkqY29sb3VyOwogICAgIGNoYXIJKnR5cGU7CiB7Ci0gICAgc3ByaW50ZigoY2hhciAqKXBydF9saW5lX2J1ZmZlciwgIiUlJSVEb2N1bWVudE1lZGlhOiAlcyAiLCBwYXBlcl9uYW1lKTsKKyAgICB2aW1fc25wcmludGYoKGNoYXIgKilwcnRfbGluZV9idWZmZXIsIHNpemVvZihwcnRfbGluZV9idWZmZXIpLAorCQkJCQkiJSUlJURvY3VtZW50TWVkaWE6ICVzICIsIHBhcGVyX25hbWUpOwogICAgIHBydF93cml0ZV9maWxlKHBydF9saW5lX2J1ZmZlcik7CiAgICAgcHJ0X3dyaXRlX3JlYWwod2lkdGgsIDIpOwogICAgIHBydF93cml0ZV9yZWFsKGhlaWdodCwgMik7CmRpZmYgLS1naXQgYS9zcmMvaWZfbXpzY2guYyBiL3NyYy9pZl9tenNjaC5jCmluZGV4IDFlMjQwNWUuLmM2N2M0NmQgMTAwNjQ0Ci0tLSBhL3NyYy9pZl9tenNjaC5jCisrKyBiL3NyYy9pZl9tenNjaC5jCkBAIC05Myw2ICs5MywxMSBAQAogICogIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgdmltL216c2NoZW1lIGludGVyZmFjZQogICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLworI2lmZGVmIEhBVkVfU0FOREJPWAorc3RhdGljIFNjaGVtZV9PYmplY3QgKnNhbmRib3hfZmlsZV9ndWFyZChpbnQsIFNjaGVtZV9PYmplY3QgKiopOworc3RhdGljIFNjaGVtZV9PYmplY3QgKnNhbmRib3hfbmV0d29ya19ndWFyZChpbnQsIFNjaGVtZV9PYmplY3QgKiopOworc3RhdGljIHZvaWQgc2FuZGJveF9jaGVjaygpOworI2VuZGlmCiAvKiAgQnVmZmVyLXJlbGF0ZWQgY29tbWFuZHMgKi8KIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICpidWZmZXJfbmV3KGJ1Zl9UICpidWYpOwogc3RhdGljIFNjaGVtZV9PYmplY3QgKmdldF9idWZmZXJfYnlfbmFtZSh2b2lkICosIGludCwgU2NoZW1lX09iamVjdCAqKik7CkBAIC0yMDUsMTEgKzIxMCwxNSBAQAogc3RhdGljIFNjaGVtZV9PYmplY3QgKigqZGxsX3NjaGVtZV9hcHBseSkoU2NoZW1lX09iamVjdCAqcmF0b3IsIGludCBudW1fcmFuZHMsCiAJU2NoZW1lX09iamVjdCAqKnJhbmRzKTsKIHN0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfYnVpbHRpbl92YWx1ZSkoY29uc3QgY2hhciAqbmFtZSk7CisjIGlmIE1aU0NIRU1FX1ZFUlNJT05fTUFKT1IgPj0gMjk5CitzdGF0aWMgU2NoZW1lX09iamVjdCAqKCpkbGxfc2NoZW1lX2J5dGVfc3RyaW5nX3RvX2NoYXJfc3RyaW5nKShTY2hlbWVfT2JqZWN0ICpzKTsKKyMgZW5kaWYKIHN0YXRpYyB2b2lkICgqZGxsX3NjaGVtZV9jbG9zZV9pbnB1dF9wb3J0KShTY2hlbWVfT2JqZWN0ICpwb3J0KTsKIHN0YXRpYyB2b2lkICgqZGxsX3NjaGVtZV9jb3VudF9saW5lcykoU2NoZW1lX09iamVjdCAqcG9ydCk7CiBzdGF0aWMgU2NoZW1lX09iamVjdCAqKCpkbGxfc2NoZW1lX2N1cnJlbnRfY29udGludWF0aW9uX21hcmtzKSh2b2lkKTsKIHN0YXRpYyB2b2lkICgqZGxsX3NjaGVtZV9kaXNwbGF5KShTY2hlbWVfT2JqZWN0ICpvYmosIFNjaGVtZV9PYmplY3QgKnBvcnQpOwogc3RhdGljIGNoYXIgKigqZGxsX3NjaGVtZV9kaXNwbGF5X3RvX3N0cmluZykoU2NoZW1lX09iamVjdCAqb2JqLCBsb25nICpsZW4pOworc3RhdGljIGludCAoKmRsbF9zY2hlbWVfZXEpKFNjaGVtZV9PYmplY3QgKm9iajEsIFNjaGVtZV9PYmplY3QgKm9iajIpOwogc3RhdGljIFNjaGVtZV9PYmplY3QgKigqZGxsX3NjaGVtZV9kb19ldmFsKShTY2hlbWVfT2JqZWN0ICpvYmosCiAJaW50IF9udW1fcmFuZHMsIFNjaGVtZV9PYmplY3QgKipyYW5kcywgaW50IHZhbCk7CiBzdGF0aWMgdm9pZCAoKmRsbF9zY2hlbWVfZG9udF9nY19wdHIpKHZvaWQgKnApOwpAQCAtMjI1LDYgKzIzNCw3IEBACiAjIGVsc2UKIHN0YXRpYyBjaGFyICooKmRsbF9zY2hlbWVfZm9ybWF0X3V0ZjgpKGNoYXIgKmZvcm1hdCwgaW50IGZsZW4sIGludCBhcmdjLAogCVNjaGVtZV9PYmplY3QgKiphcmd2LCBsb25nICpybGVuKTsKK3N0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfZ2V0X3BhcmFtKShTY2hlbWVfQ29uZmlnICpjLCBpbnQgcG9zKTsKICMgZW5kaWYKIHN0YXRpYyB2b2lkICgqZGxsX3NjaGVtZV9nY19wdHJfb2spKHZvaWQgKnApOwogIyBpZiBNWlNDSEVNRV9WRVJTSU9OX01BSk9SIDwgMjk5CkBAIC0yNDUsNiArMjU1LDggQEAKIAlTY2hlbWVfT2JqZWN0ICphcmd2W10pOwogc3RhdGljIFNjaGVtZV9PYmplY3QgKigqZGxsX3NjaGVtZV9tYWtlX3BhaXIpKFNjaGVtZV9PYmplY3QgKmNhciwgCiAJU2NoZW1lX09iamVjdCAqY2RyKTsKK3N0YXRpYyBTY2hlbWVfT2JqZWN0ICooKmRsbF9zY2hlbWVfbWFrZV9wcmltX3dfYXJpdHkpKFNjaGVtZV9QcmltICpwcmltLAorCWNvbnN0IGNoYXIgKm5hbWUsIG16c2hvcnQgbWluYSwgbXpzaG9ydCBtYXhhKTsKICMgaWYgTVpTQ0hFTUVfVkVSU0lPTl9NQUpPUiA8IDI5OQogc3RhdGljIFNjaGVtZV9PYmplY3QgKigqZGxsX3NjaGVtZV9tYWtlX3N0cmluZykoY29uc3QgY2hhciAqY2hhcnMpOwogc3RhdGljIFNjaGVtZV9PYmplY3QgKigqZGxsX3NjaGVtZV9tYWtlX3N0cmluZ19vdXRwdXRfcG9ydCkoKTsKQEAgLTMxMSw2ICszMjMsOSBAQAogIyBkZWZpbmUgc2NoZW1lX2FwcGx5IGRsbF9zY2hlbWVfYXBwbHkKICMgZGVmaW5lIHNjaGVtZV9iYXNpY19lbnYgZGxsX3NjaGVtZV9iYXNpY19lbnYKICMgZGVmaW5lIHNjaGVtZV9idWlsdGluX3ZhbHVlIGRsbF9zY2hlbWVfYnVpbHRpbl92YWx1ZQorIyBpZiBNWlNDSEVNRV9WRVJTSU9OX01BSk9SID49IDI5OQorIyAgZGVmaW5lIHNjaGVtZV9ieXRlX3N0cmluZ190b19jaGFyX3N0cmluZyBkbGxfc2NoZW1lX2J5dGVfc3RyaW5nX3RvX2NoYXJfc3RyaW5nCisjIGVuZGlmCiAjIGRlZmluZSBzY2hlbWVfY2hlY2tfdGhyZWFkcyBkbGxfc2NoZW1lX2NoZWNrX3RocmVhZHMKICMgZGVmaW5lIHNjaGVtZV9jbG9zZV9pbnB1dF9wb3J0IGRsbF9zY2hlbWVfY2xvc2VfaW5wdXRfcG9ydAogIyBkZWZpbmUgc2NoZW1lX2NvdW50X2xpbmVzIGRsbF9zY2hlbWVfY291bnRfbGluZXMKQEAgLTMyMCw2ICszMzUsNyBAQAogIyBkZWZpbmUgc2NoZW1lX2Rpc3BsYXlfdG9fc3RyaW5nIGRsbF9zY2hlbWVfZGlzcGxheV90b19zdHJpbmcKICMgZGVmaW5lIHNjaGVtZV9kb19ldmFsIGRsbF9zY2hlbWVfZG9fZXZhbAogIyBkZWZpbmUgc2NoZW1lX2RvbnRfZ2NfcHRyIGRsbF9zY2hlbWVfZG9udF9nY19wdHIKKyMgZGVmaW5lIHNjaGVtZV9lcSBkbGxfc2NoZW1lX2VxCiAjIGRlZmluZSBzY2hlbWVfZXZhbCBkbGxfc2NoZW1lX2V2YWwKICMgZGVmaW5lIHNjaGVtZV9ldmFsX3N0cmluZyBkbGxfc2NoZW1lX2V2YWxfc3RyaW5nCiAjIGRlZmluZSBzY2hlbWVfZXZhbF9zdHJpbmdfYWxsIGRsbF9zY2hlbWVfZXZhbF9zdHJpbmdfYWxsCkBAIC0zMzUsNiArMzUxLDcgQEAKICMgZWxzZQogIyAgZGVmaW5lIHNjaGVtZV9nZXRfc2l6ZWRfYnl0ZV9zdHJpbmdfb3V0cHV0IFwKICAgICBkbGxfc2NoZW1lX2dldF9zaXplZF9ieXRlX3N0cmluZ19vdXRwdXQKKyMgZGVmaW5lIHNjaGVtZV9nZXRfcGFyYW0gZGxsX3NjaGVtZV9nZXRfcGFyYW0KICMgZW5kaWYKICMgZGVmaW5lIHNjaGVtZV9pbnRlcm5fc3ltYm9sIGRsbF9zY2hlbWVfaW50ZXJuX3N5bWJvbAogIyBkZWZpbmUgc2NoZW1lX2xvb2t1cF9nbG9iYWwgZGxsX3NjaGVtZV9sb29rdXBfZ2xvYmFsCkBAIC0zNDIsNiArMzU5LDcgQEAKICMgZGVmaW5lIHNjaGVtZV9tYWtlX2ludGVnZXJfdmFsdWUgZGxsX3NjaGVtZV9tYWtlX2ludGVnZXJfdmFsdWUKICMgZGVmaW5lIHNjaGVtZV9tYWtlX25hbWVzcGFjZSBkbGxfc2NoZW1lX21ha2VfbmFtZXNwYWNlCiAjIGRlZmluZSBzY2hlbWVfbWFrZV9wYWlyIGRsbF9zY2hlbWVfbWFrZV9wYWlyCisjIGRlZmluZSBzY2hlbWVfbWFrZV9wcmltX3dfYXJpdHkgZGxsX3NjaGVtZV9tYWtlX3ByaW1fd19hcml0eQogIyBpZiBNWlNDSEVNRV9WRVJTSU9OX01BSk9SIDwgMjk5CiAjICBkZWZpbmUgc2NoZW1lX21ha2Vfc3RyaW5nIGRsbF9zY2hlbWVfbWFrZV9zdHJpbmcKICMgIGRlZmluZSBzY2hlbWVfbWFrZV9zdHJpbmdfb3V0cHV0X3BvcnQgZGxsX3NjaGVtZV9tYWtlX3N0cmluZ19vdXRwdXRfcG9ydApAQCAtMzk5LDYgKzQxNyw5IEBACiAgICAgeyJzY2hlbWVfYWRkX2dsb2JhbF9zeW1ib2wiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9hZGRfZ2xvYmFsX3N5bWJvbH0sCiAgICAgeyJzY2hlbWVfYXBwbHkiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9hcHBseX0sCiAgICAgeyJzY2hlbWVfYmFzaWNfZW52IiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfYmFzaWNfZW52fSwKKyMgaWYgTVpTQ0hFTUVfVkVSU0lPTl9NQUpPUiA+PSAyOTkKKyAgICB7InNjaGVtZV9ieXRlX3N0cmluZ190b19jaGFyX3N0cmluZyIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2J5dGVfc3RyaW5nX3RvX2NoYXJfc3RyaW5nfSwKKyMgZW5kaWYKICAgICB7InNjaGVtZV9idWlsdGluX3ZhbHVlIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfYnVpbHRpbl92YWx1ZX0sCiAgICAgeyJzY2hlbWVfY2hlY2tfdGhyZWFkcyIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2NoZWNrX3RocmVhZHN9LAogICAgIHsic2NoZW1lX2Nsb3NlX2lucHV0X3BvcnQiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9jbG9zZV9pbnB1dF9wb3J0fSwKQEAgLTQwOSw2ICs0MzAsNyBAQAogICAgIHsic2NoZW1lX2Rpc3BsYXlfdG9fc3RyaW5nIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZGlzcGxheV90b19zdHJpbmd9LAogICAgIHsic2NoZW1lX2RvX2V2YWwiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9kb19ldmFsfSwKICAgICB7InNjaGVtZV9kb250X2djX3B0ciIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2RvbnRfZ2NfcHRyfSwKKyAgICB7InNjaGVtZV9lcSIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2VxfSwKICAgICB7InNjaGVtZV9ldmFsIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZXZhbH0sCiAgICAgeyJzY2hlbWVfZXZhbF9zdHJpbmciLCAodm9pZCAqKikmZGxsX3NjaGVtZV9ldmFsX3N0cmluZ30sCiAgICAgeyJzY2hlbWVfZXZhbF9zdHJpbmdfYWxsIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZXZhbF9zdHJpbmdfYWxsfSwKQEAgLTQxOCw2ICs0NDAsNyBAQAogICAgIHsic2NoZW1lX2Zvcm1hdCIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2Zvcm1hdH0sCiAjIGVsc2UKICAgICB7InNjaGVtZV9mb3JtYXRfdXRmOCIsICh2b2lkICoqKSZkbGxfc2NoZW1lX2Zvcm1hdF91dGY4fSwKKyAgICB7InNjaGVtZV9nZXRfcGFyYW0iLCAodm9pZCAqKikmZGxsX3NjaGVtZV9nZXRfcGFyYW19LAogI2VuZGlmCiAgICAgeyJzY2hlbWVfZ2NfcHRyX29rIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfZ2NfcHRyX29rfSwKICMgaWYgTVpTQ0hFTUVfVkVSU0lPTl9NQUpPUiA8IDI5OQpAQCAtNDM0LDYgKzQ1Nyw3IEBACiAgICAgeyJzY2hlbWVfbWFrZV9pbnRlZ2VyX3ZhbHVlIiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfbWFrZV9pbnRlZ2VyX3ZhbHVlfSwKICAgICB7InNjaGVtZV9tYWtlX25hbWVzcGFjZSIsICh2b2lkICoqKSZkbGxfc2NoZW1lX21ha2VfbmFtZXNwYWNlfSwKICAgICB7InNjaGVtZV9tYWtlX3BhaXIiLCAodm9pZCAqKikmZGxsX3NjaGVtZV9tYWtlX3BhaXJ9LAorICAgIHsic2NoZW1lX21ha2VfcHJpbV93X2FyaXR5IiwgKHZvaWQgKiopJmRsbF9zY2hlbWVfbWFrZV9wcmltX3dfYXJpdHl9LAogIyBpZiBNWlNDSEVNRV9WRVJTSU9OX01BSk9SIDwgMjk5CiAgICAgeyJzY2hlbWVfbWFrZV9zdHJpbmciLCAodm9pZCAqKikmZGxsX3NjaGVtZV9tYWtlX3N0cmluZ30sCiAgICAgeyJzY2hlbWVfbWFrZV9zdHJpbmdfb3V0cHV0X3BvcnQiLCAKQEAgLTcyNyw2ICs3NTEsOCBAQAogICAgIHN0YXRpYyB2b2lkCiBzdGFydHVwX216c2NoZW1lKHZvaWQpCiB7CisgICAgU2NoZW1lX09iamVjdCAqcHJvY19tYWtlX3NlY3VyaXR5X2d1YXJkOworCiAgICAgc2NoZW1lX3NldF9zdGFja19iYXNlKE5VTEwsIDEpOwogCiAgICAgTVpfUkVHSVNURVJfU1RBVElDKGVudmlyb25tZW50KTsKQEAgLTc1MSw3ICs3NzcsMjQgQEAKIAkgICAgc2NoZW1lX21ha2VfcGFpcihzY2hlbWVfbWFrZV9zdHJpbmcoTVpTQ0hFTUVfQ09MTEVDVFMpLAogCQlzY2hlbWVfbnVsbCkpOwogI2VuZGlmCi0KKyNpZmRlZiBIQVZFX1NBTkRCT1gKKyAgICAvKiBzZXR1cCBzYW5kYm94IGd1YXJkcyAqLworICAgIHByb2NfbWFrZV9zZWN1cml0eV9ndWFyZCA9IHNjaGVtZV9sb29rdXBfZ2xvYmFsKAorCSAgICBzY2hlbWVfaW50ZXJuX3N5bWJvbCgibWFrZS1zZWN1cml0eS1ndWFyZCIpLAorCSAgICBlbnZpcm9ubWVudCk7CisgICAgaWYgKHByb2NfbWFrZV9zZWN1cml0eV9ndWFyZCAhPSBOVUxMKQorICAgIHsKKwlTY2hlbWVfT2JqZWN0ICphcmdzWzNdOworCVNjaGVtZV9PYmplY3QgKmd1YXJkOworCWFyZ3NbMF0gPSBzY2hlbWVfZ2V0X3BhcmFtKHNjaGVtZV9jb25maWcsIE1aQ09ORklHX1NFQ1VSSVRZX0dVQVJEKTsKKwlhcmdzWzFdID0gc2NoZW1lX21ha2VfcHJpbV93X2FyaXR5KHNhbmRib3hfZmlsZV9ndWFyZCwKKwkJInNhbmRib3gtZmlsZS1ndWFyZCIsIDMsIDMpOworCWFyZ3NbMl0gPSBzY2hlbWVfbWFrZV9wcmltX3dfYXJpdHkoc2FuZGJveF9uZXR3b3JrX2d1YXJkLAorCQkic2FuZGJveC1uZXR3b3JrLWd1YXJkIiwgNCwgNCk7CisJZ3VhcmQgPSBzY2hlbWVfYXBwbHkocHJvY19tYWtlX3NlY3VyaXR5X2d1YXJkLCAzLCBhcmdzKTsKKwlzY2hlbWVfc2V0X3BhcmFtKHNjaGVtZV9jb25maWcsIE1aQ09ORklHX1NFQ1VSSVRZX0dVQVJELCBndWFyZCk7CisgICAgfQorI2VuZGlmCiAgICAgLyogQ3JlYXRlIGJ1ZmZlciBhbmQgd2luZG93IHR5cGVzIGZvciB1c2UgaW4gU2NoZW1lIGNvZGUgKi8KICAgICBtel9idWZmZXJfdHlwZSA9IHNjaGVtZV9tYWtlX3R5cGUoIjx2aW0tYnVmZmVyPiIpOwogICAgIG16X3dpbmRvd190eXBlID0gc2NoZW1lX21ha2VfdHlwZSgiPHZpbS13aW5kb3c+Iik7CkBAIC0xNTc5LDYgKzE2MjIsOSBAQAogICAgIGxvbmcJICAgIGxudW0gPSAwOwogICAgIGxvbmcJICAgIGNvbCA9IDA7CiAKKyNpZmRlZiBIQVZFX1NBTkRCT1gKKyAgICBzYW5kYm94X2NoZWNrKCk7CisjZW5kaWYKICAgICB3aW4gPSBnZXRfd2luZG93X2FyZyhwcmltLT5uYW1lLCAxLCBhcmdjLCBhcmd2KTsKICAgICBHVUFSQU5URUVfUEFJUihwcmltLT5uYW1lLCAwKTsKIApAQCAtMTYxNSw2ICsxNjYxLDkgQEAKICAgICBpbnQJCSAgICBudW0gPSAwOwogICAgIFNjaGVtZV9PYmplY3QgICAqb251bTsKIAorI2lmZGVmIEhBVkVfU0FOREJPWAorICAgIHNhbmRib3hfY2hlY2soKTsKKyNlbmRpZgogICAgIGZuYW1lID0gU0NIRU1FX1NUUl9WQUwoR1VBUkFOVEVFX1NUUklORyhwcmltLT5uYW1lLCAwKSk7CiAgICAgLyogVE9ETyBtYWtlIG9wZW4gZXhpc3RpbmcgZmlsZSAqLwogICAgIG51bSA9IGJ1Zmxpc3RfYWRkKGZuYW1lLCBCTE5fTElTVEVEIHwgQkxOX0NVUkJVRik7CkBAIC0xODY5LDYgKzE5MTgsOSBAQAogICAgIGJ1Zl9UCSAgICAqc2F2ZWJ1ZjsKICAgICBpbnQJCSAgICBuOwogCisjaWZkZWYgSEFWRV9TQU5EQk9YCisgICAgc2FuZGJveF9jaGVjaygpOworI2VuZGlmCiAgICAgbiA9IFNDSEVNRV9JTlRfVkFMKEdVQVJBTlRFRV9JTlRFR0VSKHByaW0tPm5hbWUsIDApKTsKICAgICBpZiAoIVNDSEVNRV9TVFJJTkdQKGFyZ3ZbMV0pICYmICFTQ0hFTUVfRkFMU0VQKGFyZ3ZbMV0pKQogICAgICAgICBzY2hlbWVfd3JvbmdfdHlwZShwcmltLT5uYW1lLCAic3RyaW5nIG9yICNmIiwgMSwgYXJnYywgYXJndik7CkBAIC0xOTU4LDYgKzIwMTAsOSBAQAogICAgIGludAkJICAgIGksIG9sZF9sZW4sIG5ld19sZW4sIGhpLCBsbzsKICAgICBsb25nCSAgICBleHRyYTsKIAorI2lmZGVmIEhBVkVfU0FOREJPWAorICAgIHNhbmRib3hfY2hlY2soKTsKKyNlbmRpZgogICAgIGxvID0gU0NIRU1FX0lOVF9WQUwoR1VBUkFOVEVFX0lOVEVHRVIocHJpbS0+bmFtZSwgMCkpOwogICAgIGhpID0gU0NIRU1FX0lOVF9WQUwoR1VBUkFOVEVFX0lOVEVHRVIocHJpbS0+bmFtZSwgMSkpOwogICAgIGlmICghU0NIRU1FX1BBSVJQKGFyZ3ZbMl0pCkBAIC0yMTIxLDYgKzIxNzYsOSBAQAogICAgIGJ1Zl9UCSAgICAqc2F2ZWJ1ZjsKICAgICBpbnQJCSAgICBpLCBuLCBzaXplOwogCisjaWZkZWYgSEFWRV9TQU5EQk9YCisgICAgc2FuZGJveF9jaGVjaygpOworI2VuZGlmCiAgICAgLyoKICAgICAgKiBGaXJzdCBvZiBhbGwsIHdlIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBzdXBwbGllZCBNelNjaGVtZSBvYmplY3QuCiAgICAgICogSXQgbXVzdCBiZSBhIHN0cmluZyBvciBhIGxpc3QsIG9yIHRoZSBjYWxsIGlzIGluIGVycm9yLgpAQCAtMjM4MCw4ICsyNDM4LDkgQEAKICAgICBpZiAoYWRkX2luZm8gIT0gTlVMTCkKICAgICB7CiAJU2NoZW1lX09iamVjdCAgICppbmZvID0gc2NoZW1lX21ha2Vfc3RyaW5nKGFkZF9pbmZvKTsKLQlhcmd2WzBdID0gc2NoZW1lX21ha2Vfc3RyaW5nKAotCQlzY2hlbWVfZm9ybWF0KGZtdCwgc3RybGVuKGZtdCksIDEsICZpbmZvLCBOVUxMKSk7CisJYXJndlswXSA9IHNjaGVtZV9ieXRlX3N0cmluZ190b19jaGFyX3N0cmluZyhzY2hlbWVfbWFrZV9zdHJpbmcoCisJCXNjaGVtZV9mb3JtYXQoZm10LCBzdHJsZW4oZm10KSwgMSwgJmluZm8sIE5VTEwpKSk7CisJU0NIRU1FX1NFVF9JTU1VVEFCTEUoYXJndlswXSk7CiAgICAgfQogICAgIGVsc2UKIAlhcmd2WzBdID0gc2NoZW1lX21ha2Vfc3RyaW5nKF8oIlZpbSBlcnJvciIpKTsKQEAgLTI1OTYsMyArMjY1NSw2NiBAQAogICAgIHNjaGVtZV9hZGRfZ2xvYmFsKCJnbG9iYWwtbmFtZXNwYWNlIiwgKFNjaGVtZV9PYmplY3QgKillbnZpcm9ubWVudCwgbW9kKTsKICAgICBzY2hlbWVfZmluaXNoX3ByaW1pdGl2ZV9tb2R1bGUobW9kKTsKIH0KKyAgICAKKyNpZmRlZiBIQVZFX1NBTkRCT1gKK3N0YXRpYyBTY2hlbWVfT2JqZWN0ICpNX3dyaXRlID0gTlVMTDsKK3N0YXRpYyBTY2hlbWVfT2JqZWN0ICpNX3JlYWQgPSBOVUxMOworc3RhdGljIFNjaGVtZV9PYmplY3QgKk1fZXhlY3V0ZSA9IE5VTEw7CitzdGF0aWMgU2NoZW1lX09iamVjdCAqTV9kZWxldGUgPSBOVUxMOworCisgICAgc3RhdGljIHZvaWQKK3NhbmRib3hfY2hlY2soKQoreworICAgIGlmIChzYW5kYm94KQorCXJhaXNlX3ZpbV9leG4oXygibm90IGFsbG93ZWQgaW4gdGhlIFZpbSBzYW5kYm94IikpOworfQorCisvKiBzZWN1cml0eSBndWFyZHMgdG8gZm9yY2UgVmltJ3Mgc2FuZGJveCByZXN0cmljdGlvbnMgb24gTXpTY2hlbWUgbGV2ZWwgKi8gCisgICAgc3RhdGljIFNjaGVtZV9PYmplY3QgKgorc2FuZGJveF9maWxlX2d1YXJkKGludCBhcmdjLCBTY2hlbWVfT2JqZWN0ICoqYXJndikKK3sKKyAgICBpZiAoc2FuZGJveCkKKyAgICB7CisJU2NoZW1lX09iamVjdCAqcmVxdWVzdGVkX2FjY2VzcyA9IGFyZ3ZbMl07CisKKwlpZiAoTV93cml0ZSA9PSBOVUxMKQorCXsKKwkgICAgTVpfUkVHSVNURVJfU1RBVElDKE1fd3JpdGUpOworCSAgICBNX3dyaXRlID0gc2NoZW1lX2ludGVybl9zeW1ib2woIndyaXRlIik7CisJfQorCWlmIChNX3JlYWQgPT0gTlVMTCkKKwl7CisJICAgIE1aX1JFR0lTVEVSX1NUQVRJQyhNX3JlYWQpOworCSAgICBNX3JlYWQgPSBzY2hlbWVfaW50ZXJuX3N5bWJvbCgicmVhZCIpOworCX0KKwlpZiAoTV9leGVjdXRlID09IE5VTEwpCisJeworCSAgICBNWl9SRUdJU1RFUl9TVEFUSUMoTV9leGVjdXRlKTsKKwkgICAgTV9leGVjdXRlID0gc2NoZW1lX2ludGVybl9zeW1ib2woImV4ZWN1dGUiKTsKKwl9CisJaWYgKE1fZGVsZXRlID09IE5VTEwpCisJeworCSAgICBNWl9SRUdJU1RFUl9TVEFUSUMoTV9kZWxldGUpOworCSAgICBNX2RlbGV0ZSA9IHNjaGVtZV9pbnRlcm5fc3ltYm9sKCJkZWxldGUiKTsKKwl9CisKKwl3aGlsZSAoIVNDSEVNRV9OVUxMUChyZXF1ZXN0ZWRfYWNjZXNzKSkKKwl7CisJICAgIFNjaGVtZV9PYmplY3QgKml0ZW0gPSBTQ0hFTUVfQ0FSKHJlcXVlc3RlZF9hY2Nlc3MpOworCSAgICBpZiAoc2NoZW1lX2VxKGl0ZW0sIE1fd3JpdGUpIHx8IHNjaGVtZV9lcShpdGVtLCBNX3JlYWQpCisJCSAgICB8fCBzY2hlbWVfZXEoaXRlbSwgTV9leGVjdXRlKSB8fCBzY2hlbWVfZXEoaXRlbSwgTV9kZWxldGUpKQorCSAgICB7CisJCXJhaXNlX3ZpbV9leG4oXygibm90IGFsbG93ZWQgaW4gdGhlIFZpbSBzYW5kYm94IikpOworCSAgICB9CisJICAgIHJlcXVlc3RlZF9hY2Nlc3MgPSBTQ0hFTUVfQ0RSKHJlcXVlc3RlZF9hY2Nlc3MpOworCX0KKyAgICB9CisgICAgcmV0dXJuIHNjaGVtZV92b2lkOworfQorCisgICAgc3RhdGljIFNjaGVtZV9PYmplY3QgKgorc2FuZGJveF9uZXR3b3JrX2d1YXJkKGludCBhcmdjLCBTY2hlbWVfT2JqZWN0ICoqYXJndikKK3sKKyAgICByZXR1cm4gc2NoZW1lX3ZvaWQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pZl9tenNjaC5oIGIvc3JjL2lmX216c2NoLmgKaW5kZXggODhmNmE1NC4uOThiY2Y3NCAxMDA2NDQKLS0tIGEvc3JjL2lmX216c2NoLmgKKysrIGIvc3JjL2lmX216c2NoLmgKQEAgLTM0LDEyICszNCwxMyBAQAogIyBlbmRpZgogIyBkZWZpbmUgc2NoZW1lX2Zvcm1hdCBzY2hlbWVfZm9ybWF0X3V0ZjgKIAotIyBkZWZpbmUgR0VUX0JZVEVfU1RSSU5HKG9iaikgKFNDSEVNRV9CWVRFX1NUUklOR1Aob2JqKSA/IG9iaiA6ICAgXAorIyBkZWZpbmUgU0NIRU1FX0dFVF9CWVRFX1NUUklORyhvYmopIChTQ0hFTUVfQllURV9TVFJJTkdQKG9iaikgPyBvYmogOiAgIFwKIAlzY2hlbWVfY2hhcl9zdHJpbmdfdG9fYnl0ZV9zdHJpbmcob2JqKSkKICNlbHNlCi0jIGRlZmluZSBHRVRfQllURV9TVFJJTkcob2JqKSAob2JqKQorIyBkZWZpbmUgU0NIRU1FX0dFVF9CWVRFX1NUUklORyhvYmopIChvYmopCiAjIGRlZmluZSBTQ0hFTUVfQllURV9TVFJMRU5fVkFMIFNDSEVNRV9TVFJMRU5fVkFMCiAjIGRlZmluZSBTQ0hFTUVfQllURV9TVFJfVkFMIFNDSEVNRV9TVFJfVkFMCisjIGRlZmluZSBzY2hlbWVfYnl0ZV9zdHJpbmdfdG9fY2hhcl9zdHJpbmcob2JqKSAob2JqKQogI2VuZGlmCiAKICNlbmRpZiAvKiBfSUZfTVpTQ0hfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9pZl9weXRob24uYyBiL3NyYy9pZl9weXRob24uYwppbmRleCAwMmQ2YWMxLi5iNzk5MDQ3IDEwMDY0NAotLS0gYS9zcmMvaWZfcHl0aG9uLmMKKysrIGIvc3JjL2lmX3B5dGhvbi5jCkBAIC0xMzY5LDEyICsxMzY5LDEzIEBACiAgICAgc3RhdGljIFB5T2JqZWN0ICoKIEJ1ZmZlclJlcHIoUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgc3RhdGljIGNoYXIgcmVwcls1MF07CisgICAgc3RhdGljIGNoYXIgcmVwclsxMDBdOwogICAgIEJ1ZmZlck9iamVjdCAqdGhpcyA9IChCdWZmZXJPYmplY3QgKikoc2VsZik7CiAKICAgICBpZiAodGhpcy0+YnVmID09IElOVkFMSURfQlVGRkVSX1ZBTFVFKQogICAgIHsKLQlzcHJpbnRmKHJlcHIsIF8oIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIpLCAobG9uZykoc2VsZikpOworCXZpbV9zbnByaW50ZihyZXByLCAxMDAsIF8oIjxidWZmZXIgb2JqZWN0IChkZWxldGVkKSBhdCAlOGxYPiIpLAorCQkJCQkJCQkobG9uZykoc2VsZikpOwogCXJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKHJlcHIpOwogICAgIH0KICAgICBlbHNlCkBAIC0xMzg5LDcgKzEzOTAsNyBAQAogCWlmIChsZW4gPiAzNSkKIAkgICAgbmFtZSA9IG5hbWUgKyAoMzUgLSBsZW4pOwogCi0Jc3ByaW50ZihyZXByLCAiPGJ1ZmZlciAlcyVzPiIsIGxlbiA+IDM1ID8gIi4uLiIgOiAiIiwgbmFtZSk7CisJdmltX3NucHJpbnRmKHJlcHIsIDEwMCwgIjxidWZmZXIgJXMlcz4iLCBsZW4gPiAzNSA/ICIuLi4iIDogIiIsIG5hbWUpOwogCiAJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVwcik7CiAgICAgfQpAQCAtMTU4OCwxMiArMTU4OSwxMiBAQAogICAgIHN0YXRpYyBQeU9iamVjdCAqCiBSYW5nZVJlcHIoUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgc3RhdGljIGNoYXIgcmVwcls3NV07CisgICAgc3RhdGljIGNoYXIgcmVwclsxMDBdOwogICAgIFJhbmdlT2JqZWN0ICp0aGlzID0gKFJhbmdlT2JqZWN0ICopKHNlbGYpOwogCiAgICAgaWYgKHRoaXMtPmJ1Zi0+YnVmID09IElOVkFMSURfQlVGRkVSX1ZBTFVFKQogICAgIHsKLQlzcHJpbnRmKHJlcHIsICI8cmFuZ2Ugb2JqZWN0IChmb3IgZGVsZXRlZCBidWZmZXIpIGF0ICU4bFg+IiwKKwl2aW1fc25wcmludGYocmVwciwgMTAwLCAiPHJhbmdlIG9iamVjdCAoZm9yIGRlbGV0ZWQgYnVmZmVyKSBhdCAlOGxYPiIsCiAJCQkJCQkJCShsb25nKShzZWxmKSk7CiAJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVwcik7CiAgICAgfQpAQCAtMTYwOSw3ICsxNjEwLDcgQEAKIAlpZiAobGVuID4gNDUpCiAJICAgIG5hbWUgPSBuYW1lICsgKDQ1IC0gbGVuKTsKIAotCXNwcmludGYocmVwciwgIjxyYW5nZSAlcyVzICglZDolZCk+IiwKKwl2aW1fc25wcmludGYocmVwciwgMTAwLCAiPHJhbmdlICVzJXMgKCVkOiVkKT4iLAogCQlsZW4gPiA0NSA/ICIuLi4iIDogIiIsIG5hbWUsCiAJCXRoaXMtPnN0YXJ0LCB0aGlzLT5lbmQpOwogCkBAIC0xOTYzLDEyICsxOTY0LDEzIEBACiAgICAgc3RhdGljIFB5T2JqZWN0ICoKIFdpbmRvd1JlcHIoUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgc3RhdGljIGNoYXIgcmVwcls1MF07CisgICAgc3RhdGljIGNoYXIgcmVwclsxMDBdOwogICAgIFdpbmRvd09iamVjdCAqdGhpcyA9IChXaW5kb3dPYmplY3QgKikoc2VsZik7CiAKICAgICBpZiAodGhpcy0+d2luID09IElOVkFMSURfV0lORE9XX1ZBTFVFKQogICAgIHsKLQlzcHJpbnRmKHJlcHIsIF8oIjx3aW5kb3cgb2JqZWN0IChkZWxldGVkKSBhdCAlLjhsWD4iKSwgKGxvbmcpKHNlbGYpKTsKKwl2aW1fc25wcmludGYocmVwciwgMTAwLCBfKCI8d2luZG93IG9iamVjdCAoZGVsZXRlZCkgYXQgJS44bFg+IiksCisJCQkJCQkJCShsb25nKShzZWxmKSk7CiAJcmV0dXJuIFB5U3RyaW5nX0Zyb21TdHJpbmcocmVwcik7CiAgICAgfQogICAgIGVsc2UKQEAgLTE5ODAsOSArMTk4MiwxMCBAQAogCSAgICArK2k7CiAKIAlpZiAodyA9PSBOVUxMKQotCSAgICBzcHJpbnRmKHJlcHIsIF8oIjx3aW5kb3cgb2JqZWN0ICh1bmtub3duKSBhdCAlLjhsWD4iKSwgKGxvbmcpKHNlbGYpKTsKKwkgICAgdmltX3NucHJpbnRmKHJlcHIsIDEwMCwgXygiPHdpbmRvdyBvYmplY3QgKHVua25vd24pIGF0ICUuOGxYPiIpLAorCQkJCQkJCQkobG9uZykoc2VsZikpOwogCWVsc2UKLQkgICAgc3ByaW50ZihyZXByLCBfKCI8d2luZG93ICVkPiIpLCBpKTsKKwkgICAgdmltX3NucHJpbnRmKHJlcHIsIDEwMCwgXygiPHdpbmRvdyAlZD4iKSwgaSk7CiAKIAlyZXR1cm4gUHlTdHJpbmdfRnJvbVN0cmluZyhyZXByKTsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaWZfdGNsLmMgYi9zcmMvaWZfdGNsLmMKaW5kZXggM2MwODMyNS4uOGY3NWUwZCAxMDA2NDQKLS0tIGEvc3JjL2lmX3RjbC5jCisrKyBiL3NyYy9pZl90Y2wuYwpAQCAtODUyLDcgKzg1Miw5IEBACiAJICAgIGVsc2UKIAkgICAgewogCQljaGFyIHJidWZbNjRdOwotCQlzcHJpbnRmKHJidWYsIF8oInJvdyAlZCBjb2x1bW4gJWQiKSwgKGludClyb3cydGNsKHBvcy0+bG51bSksIChpbnQpY29sMnRjbChwb3MtPmNvbCkpOworCisJCXNwcmludGYocmJ1ZiwgXygicm93ICVkIGNvbHVtbiAlZCIpLAorCQkJICAgICAoaW50KXJvdzJ0Y2wocG9zLT5sbnVtKSwgKGludCljb2wydGNsKHBvcy0+Y29sKSk7CiAJCVRjbF9TZXRSZXN1bHQoaW50ZXJwLCByYnVmLCBUQ0xfVk9MQVRJTEUpOwogCSAgICB9CiAJICAgIGJyZWFrOwpAQCAtODc0LDcgKzg3Niw4IEBACiAJCS0tdmFsMTsKIAkgICAgaWYgKHVfc2F2ZSgobGluZW5yX1QpdmFsMSwgKGxpbmVucl9UKSh2YWwxKzEpKSAhPSBPSykKIAkgICAgewotCQlUY2xfU2V0UmVzdWx0KGludGVycCwgXygiY2Fubm90IHNhdmUgdW5kbyBpbmZvcm1hdGlvbiIpLCBUQ0xfU1RBVElDKTsKKwkJVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oImNhbm5vdCBzYXZlIHVuZG8gaW5mb3JtYXRpb24iKSwKKwkJCQkJCQkJICBUQ0xfU1RBVElDKTsKIAkJZXJyID0gVENMX0VSUk9SOwogCQlicmVhazsKIAkgICAgfQpAQCAtODgyLDcgKzg4NSw4IEBACiAJICAgIGxpbmUgPSBUY2xfR2V0U3RyaW5nRnJvbU9iaihvYmp2WzNdLCBOVUxMKTsKIAkgICAgaWYgKG1sX2FwcGVuZCgobGluZW5yX1QpdmFsMSwgKGNoYXJfdSAqKWxpbmUsIDAsIEZBTFNFKSAhPSBPSykKIAkgICAgewotCQlUY2xfU2V0UmVzdWx0KGludGVycCwgXygiY2Fubm90IGluc2VydC9hcHBlbmQgbGluZSIpLCBUQ0xfU1RBVElDKTsKKwkJVGNsX1NldFJlc3VsdChpbnRlcnAsIF8oImNhbm5vdCBpbnNlcnQvYXBwZW5kIGxpbmUiKSwKKwkJCQkJCQkJICBUQ0xfU1RBVElDKTsKIAkJZXJyID0gVENMX0VSUk9SOwogCQlicmVhazsKIAkgICAgfQpAQCAtMTA2Nyw2ICsxMDcxLDcgQEAKIAkgICAgaWYgKG9iamMgPT0gMikKIAkgICAgewogCQljaGFyIGJ1Zls2NF07CisKIAkJc3ByaW50ZihidWYsIF8oInJvdyAlZCBjb2x1bW4gJWQiKSwgKGludClyb3cydGNsKHdpbi0+d19jdXJzb3IubG51bSksIChpbnQpY29sMnRjbCh3aW4tPndfY3Vyc29yLmNvbCkpOwogCQlUY2xfU2V0UmVzdWx0KGludGVycCwgYnVmLCBUQ0xfVk9MQVRJTEUpOwogCQlicmVhazsKQEAgLTE0ODYsNyArMTQ5MSw4IEBACiAgICAgfQogCiAgICAgaWYgKHJlZikKLQlzcHJpbnRmKG5hbWUsICI6OnZpbTo6JXMiLCBUY2xfR2V0Q29tbWFuZE5hbWUoaW50ZXJwLCByZWYtPmNtZCkpOworCXZpbV9zbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICI6OnZpbTo6JXMiLAorCQkJCQlUY2xfR2V0Q29tbWFuZE5hbWUoaW50ZXJwLCByZWYtPmNtZCkpOwogICAgIGVsc2UKICAgICB7CiAJaWYgKHVudXNlZCkKQEAgLTE1MDcsNyArMTUxMyw4IEBACiAJfQogCiAJLyogVGhpcyBtaWdodCBicmVhayBvbiBzb21lIGV4b3RpYyBzeXN0ZW1zLi4uICovCi0Jc3ByaW50ZihuYW1lLCAiOjp2aW06OiVzXyVseCIsIHByZWZpeCwgKHVuc2lnbmVkIGxvbmcpdmltb2JqKTsKKwl2aW1fc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiOjp2aW06OiVzXyVseCIsCisJCQkJCSAgICAgICBwcmVmaXgsICh1bnNpZ25lZCBsb25nKXZpbW9iaik7CiAJY21kID0gVGNsX0NyZWF0ZU9iakNvbW1hbmQoaW50ZXJwLCBuYW1lLCBwcm9jLAogCSAgICAoQ2xpZW50RGF0YSlyZWYsIChUY2xfQ21kRGVsZXRlUHJvYyAqKWRlbHJlZik7CiAJaWYgKCFjbWQpCkBAIC0xODgxLDcgKzE4ODgsNyBAQAogICAgIGlmIChlcnJvciA9PSBUQ0xfRVhJVCApCiAgICAgewogCWludCByZXR2YWw7Ci0JY2hhciBidWZbMzJdOworCWNoYXIgYnVmWzUwXTsKIAlUY2xfT2JqICpyb2JqOwogCiAJcm9iaiA9IFRjbF9HZXRPYmpSZXN1bHQodGNsaW5mby5pbnRlcnApOwpAQCAtMTg5Miw3ICsxODk5LDcgQEAKIAl9CiAJZWxzZQogCXsKLQkgICAgc3ByaW50ZihidWYsICJFNTcyOiBleGl0IGNvZGUgJWQiLCByZXR2YWwpOworCSAgICBzcHJpbnRmKGJ1ZiwgXygiRTU3MjogZXhpdCBjb2RlICVkIiksIHJldHZhbCk7CiAJICAgIHRjbGVycm1zZyhidWYpOwogCSAgICBpZiAocmV0dmFsID09IDAgKQogCSAgICB7CmRpZmYgLS1naXQgYS9zcmMvbWVtbGluZS5jIGIvc3JjL21lbWxpbmUuYwppbmRleCBkNTE3NWU0Li45ZjllMzA3IDEwMDY0NAotLS0gYS9zcmMvbWVtbGluZS5jCisrKyBiL3NyYy9tZW1saW5lLmMKQEAgLTEwMTUsMTMgKzEwMTUsMTMgQEAKICAgICB9CiAKICAgICBob21lX3JlcGxhY2UoTlVMTCwgbWZwLT5tZl9mbmFtZSwgTmFtZUJ1ZmYsIE1BWFBBVEhMLCBUUlVFKTsKLSAgICBtc2dfc3RyKChjaGFyX3UgKilfKCJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIiksIE5hbWVCdWZmKTsKKyAgICBzbXNnKChjaGFyX3UgKilfKCJVc2luZyBzd2FwIGZpbGUgXCIlc1wiIiksIE5hbWVCdWZmKTsKIAogICAgIGlmIChidWZfc3BuYW1lKGN1cmJ1ZikgIT0gTlVMTCkKIAlTVFJDUFkoTmFtZUJ1ZmYsIGJ1Zl9zcG5hbWUoY3VyYnVmKSk7CiAgICAgZWxzZQogCWhvbWVfcmVwbGFjZShOVUxMLCBjdXJidWYtPmJfZmZuYW1lLCBOYW1lQnVmZiwgTUFYUEFUSEwsIFRSVUUpOwotICAgIG1zZ19zdHIoKGNoYXJfdSAqKV8oIk9yaWdpbmFsIGZpbGUgXCIlc1wiIiksIE5hbWVCdWZmKTsKKyAgICBzbXNnKChjaGFyX3UgKilfKCJPcmlnaW5hbCBmaWxlIFwiJXNcIiIpLCBOYW1lQnVmZik7CiAgICAgbXNnX3B1dGNoYXIoJ1xuJyk7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvbWlzYzEuYyBiL3NyYy9taXNjMS5jCmluZGV4IDY2MDNjMjYuLmQ0ZGFiZTYgMTAwNjQ0Ci0tLSBhL3NyYy9taXNjMS5jCisrKyBiL3NyYy9taXNjMS5jCkBAIC0zMjk1LDcgKzMyOTUsNyBAQAogCSAgICBpZiAoZXhwICE9IE5VTEwgJiYgKmV4cCAhPSBOVUwKIAkJCQkJJiYgU1RSTEVOKGV4cCkgKyBTVFJMRU4ocCkgPCBNQVhQQVRITCkKIAkgICAgewotCQlzcHJpbnRmKChjaGFyICopTmFtZUJ1ZmYsICIlcyVzIiwgZXhwLCBwICsgMSk7CisJCXZpbV9zbnByaW50ZigoY2hhciAqKU5hbWVCdWZmLCBNQVhQQVRITCwgIiVzJXMiLCBleHAsIHAgKyAxKTsKIAkJdmFyID0gTmFtZUJ1ZmY7CiAJCS8qIEFsc28gc2V0ICRIT01FLCBpdCdzIG5lZWRlZCBmb3IgX3ZpbWluZm8uICovCiAJCXZpbV9zZXRlbnYoKGNoYXJfdSAqKSJIT01FIiwgTmFtZUJ1ZmYpOwpkaWZmIC0tZ2l0IGEvc3JjL29wcy5jIGIvc3JjL29wcy5jCmluZGV4IGVjYzlhZDkuLjk0ZGMzOWMgMTAwNjQ0Ci0tLSBhL3NyYy9vcHMuYworKysgYi9zcmMvb3BzLmMKQEAgLTUyMjYsNyArNTIyNiw3IEBACiAjZW5kaWYKIAkgICAgZGVmYXVsdDoKIAkJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiRTU3NDogVW5rbm93biByZWdpc3RlciB0eXBlICVkIiksCi0JCSAgICB5X3JlZ3NbaV0ueV90eXBlKTsKKwkJCQkJCQkgICAgeV9yZWdzW2ldLnlfdHlwZSk7CiAJCWVtc2coSU9idWZmKTsKIAkJdHlwZSA9IChjaGFyX3UgKikiTElORSI7CiAJCWJyZWFrOwpAQCAtNTk0Myw4ICs1OTQzLDggQEAKIGN1cnNvcl9wb3NfaW5mbygpCiB7CiAgICAgY2hhcl91CSpwOwotICAgIGNoYXJfdQlidWYxWzIwXTsKLSAgICBjaGFyX3UJYnVmMlsyMF07CisgICAgY2hhcl91CWJ1ZjFbNTBdOworICAgIGNoYXJfdQlidWYyWzQwXTsKICAgICBsaW5lbnJfVAlsbnVtOwogICAgIGxvbmcJYnl0ZV9jb3VudCA9IDA7CiAgICAgbG9uZwlieXRlX2NvdW50X2N1cnNvciA9IDA7CkBAIC02MTA2LDcgKzYxMDYsNyBAQAogCQlidWYxWzBdID0gTlVMOwogCiAJICAgIGlmIChjaGFyX2NvdW50X2N1cnNvciA9PSBieXRlX2NvdW50X2N1cnNvcgotCQkgICAgJiYgY2hhcl9jb3VudCA9PSBieXRlX2NvdW50KQorCQkJCQkJICAmJiBjaGFyX2NvdW50ID09IGJ5dGVfY291bnQpCiAJCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIlNlbGVjdGVkICVzJWxkIG9mICVsZCBMaW5lczsgJWxkIG9mICVsZCBXb3JkczsgJWxkIG9mICVsZCBCeXRlcyIpLAogCQkJYnVmMSwgbGluZV9jb3VudF9zZWxlY3RlZCwKIAkJCShsb25nKWN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LApkaWZmIC0tZ2l0IGEvc3JjL29wdGlvbi5jIGIvc3JjL29wdGlvbi5jCmluZGV4IGVlMzNkZjkuLjFmNGNlNzQgMTAwNjQ0Ci0tLSBhL3NyYy9vcHRpb24uYworKysgYi9zcmMvb3B0aW9uLmMKQEAgLTI1NzEsNyArMjU3MSw3IEBACiBzdGF0aWMgY2hhcl91ICpjaGVja19jbGlwYm9hcmRfb3B0aW9uIF9fQVJHUygodm9pZCkpOwogI2VuZGlmCiBzdGF0aWMgY2hhcl91ICpzZXRfYm9vbF9vcHRpb24gX19BUkdTKChpbnQgb3B0X2lkeCwgY2hhcl91ICp2YXJwLCBpbnQgdmFsdWUsIGludCBvcHRfZmxhZ3MpKTsKLXN0YXRpYyBjaGFyX3UgKnNldF9udW1fb3B0aW9uIF9fQVJHUygoaW50IG9wdF9pZHgsIGNoYXJfdSAqdmFycCwgbG9uZyB2YWx1ZSwgY2hhcl91ICplcnJidWYsIGludCBvcHRfZmxhZ3MpKTsKK3N0YXRpYyBjaGFyX3UgKnNldF9udW1fb3B0aW9uIF9fQVJHUygoaW50IG9wdF9pZHgsIGNoYXJfdSAqdmFycCwgbG9uZyB2YWx1ZSwgY2hhcl91ICplcnJidWYsIHNpemVfdCBlcnJidWZsZW4sIGludCBvcHRfZmxhZ3MpKTsKIHN0YXRpYyB2b2lkIGNoZWNrX3JlZHJhdyBfX0FSR1MoKGxvbmdfdSBmbGFncykpOwogc3RhdGljIGludCBmaW5kb3B0aW9uIF9fQVJHUygoY2hhcl91ICopKTsKIHN0YXRpYyBpbnQgZmluZF9rZXlfb3B0aW9uIF9fQVJHUygoY2hhcl91ICopKTsKQEAgLTM4ODEsNyArMzg4MSw3IEBACiAJCQlpZiAocmVtb3ZpbmcpCiAJCQkgICAgdmFsdWUgPSAqKGxvbmcgKil2YXJwIC0gdmFsdWU7CiAJCQllcnJtc2cgPSBzZXRfbnVtX29wdGlvbihvcHRfaWR4LCB2YXJwLCB2YWx1ZSwKLQkJCQkJCQkgICBlcnJidWYsIG9wdF9mbGFncyk7CisJCQkJCSAgIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZiksIG9wdF9mbGFncyk7CiAJCSAgICB9CiAJCSAgICBlbHNlIGlmIChvcHRfaWR4ID49IDApCQkgICAgLyogc3RyaW5nICovCiAJCSAgICB7CkBAIC00Mjg3LDcgKzQyODcsNyBAQAogICAgIGlmIChlcnJidWYgPT0gTlVMTCkKIAlyZXR1cm4gKGNoYXJfdSAqKSIiOwogICAgIHNwcmludGYoKGNoYXIgKillcnJidWYsIF8oIkU1Mzk6IElsbGVnYWwgY2hhcmFjdGVyIDwlcz4iKSwKLQkgICAgKGNoYXIgKil0cmFuc2NoYXIoYykpOworCQkJCQkJCShjaGFyICopdHJhbnNjaGFyKGMpKTsKICAgICByZXR1cm4gZXJyYnVmOwogfQogCkBAIC02ODIyLDExICs2ODIyLDEyIEBACiAgKiBSZXR1cm5zIE5VTEwgZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIG1lc3NhZ2UgZm9yIGFuIGVycm9yLgogICovCiAgICAgc3RhdGljIGNoYXJfdSAqCi1zZXRfbnVtX29wdGlvbihvcHRfaWR4LCB2YXJwLCB2YWx1ZSwgZXJyYnVmLCBvcHRfZmxhZ3MpCitzZXRfbnVtX29wdGlvbihvcHRfaWR4LCB2YXJwLCB2YWx1ZSwgZXJyYnVmLCBlcnJidWZsZW4sIG9wdF9mbGFncykKICAgICBpbnQJCW9wdF9pZHg7CQkvKiBpbmRleCBpbiBvcHRpb25zW10gdGFibGUgKi8KICAgICBjaGFyX3UJKnZhcnA7CQkJLyogcG9pbnRlciB0byB0aGUgb3B0aW9uIHZhcmlhYmxlICovCiAgICAgbG9uZwl2YWx1ZTsJCQkvKiBuZXcgdmFsdWUgKi8KICAgICBjaGFyX3UJKmVycmJ1ZjsJCS8qIGJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyAgICBzaXplX3QJZXJyYnVmbGVuOwkJLyogbGVuZ3RoIG9mICJlcnJidWYiICovCiAgICAgaW50CQlvcHRfZmxhZ3M7CQkvKiBPUFRfTE9DQUwsIE9QVF9HTE9CQUwgYW5kCiAJCQkJCSAgIE9QVF9NT0RFTElORSAqLwogewpAQCAtNzExNiw4ICs3MTE3LDggQEAKICAgICB7CiAJaWYgKGVycmJ1ZiAhPSBOVUxMKQogCXsKLQkgICAgc3ByaW50ZigoY2hhciAqKWVycmJ1ZiwgXygiRTU5MzogTmVlZCBhdCBsZWFzdCAlZCBsaW5lcyIpLAotCQkJCQkJCQkgIG1pbl9yb3dzKCkpOworCSAgICB2aW1fc25wcmludGYoKGNoYXIgKillcnJidWYsIGVycmJ1ZmxlbiwKKwkJCSAgICAgICBfKCJFNTkzOiBOZWVkIGF0IGxlYXN0ICVkIGxpbmVzIiksIG1pbl9yb3dzKCkpOwogCSAgICBlcnJtc2cgPSBlcnJidWY7CiAJfQogCVJvd3MgPSBtaW5fcm93cygpOwpAQCAtNzEyNiw4ICs3MTI3LDggQEAKICAgICB7CiAJaWYgKGVycmJ1ZiAhPSBOVUxMKQogCXsKLQkgICAgc3ByaW50ZigoY2hhciAqKWVycmJ1ZiwgXygiRTU5NDogTmVlZCBhdCBsZWFzdCAlZCBjb2x1bW5zIiksCi0JCQkJCQkJCSBNSU5fQ09MVU1OUyk7CisJICAgIHZpbV9zbnByaW50ZigoY2hhciAqKWVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJICAgIF8oIkU1OTQ6IE5lZWQgYXQgbGVhc3QgJWQgY29sdW1ucyIpLCBNSU5fQ09MVU1OUyk7CiAJICAgIGVycm1zZyA9IGVycmJ1ZjsKIAl9CiAJQ29sdW1ucyA9IE1JTl9DT0xVTU5TOwpAQCAtNzQ1Myw3ICs3NDU0LDggQEAKIAkgICAgaWYgKHZhcnAgIT0gTlVMTCkJLyogaGlkZGVuIG9wdGlvbiBpcyBub3QgY2hhbmdlZCAqLwogCSAgICB7CiAJCWlmIChmbGFncyAmIFBfTlVNKQotCQkgICAgKHZvaWQpc2V0X251bV9vcHRpb24ob3B0X2lkeCwgdmFycCwgbnVtYmVyLCBOVUxMLCBvcHRfZmxhZ3MpOworCQkgICAgKHZvaWQpc2V0X251bV9vcHRpb24ob3B0X2lkeCwgdmFycCwgbnVtYmVyLAorCQkJCQkJCSAgTlVMTCwgMCwgb3B0X2ZsYWdzKTsKIAkJZWxzZQogCQkgICAgKHZvaWQpc2V0X2Jvb2xfb3B0aW9uKG9wdF9pZHgsIHZhcnAsIChpbnQpbnVtYmVyLCBvcHRfZmxhZ3MpOwogCSAgICB9CmRpZmYgLS1naXQgYS9zcmMvcG8vaXQucG8gYi9zcmMvcG8vaXQucG8KaW5kZXggNGEyNGE2Yy4uZmUxZDY0ZCAxMDA2NDQKLS0tIGEvc3JjL3BvL2l0LnBvCisrKyBiL3NyYy9wby9pdC5wbwpAQCAtMTMwOSw3ICsxMzA5LDcgQEAKIG1zZ3N0ciAiMSBzb3N0aXR1emlvbmUiCiAKICM6IGV4X2NtZHMuYzo0NTUwCi0jLCBmdXp6eSwgYy1mb3JtYXQKKyMsIGMtZm9ybWF0CiBtc2dpZCAiJWxkIG1hdGNoZXMiCiBtc2dzdHIgIiVsZCBjb3JyaXNwLiIKIApAQCAtMTYwOCw3ICsxNjA4LDYgQEAKIG1zZ3N0ciAiSW4gYWdnaXVudGEgYWwgRmlsZSIKIAogIzogZXhfZG9jbWQuYzo3MjI1Ci0jLCBmdXp6eQogbXNnaWQgIkU3NDc6IENhbm5vdCBjaGFuZ2UgZGlyZWN0b3J5LCBidWZmZXIgaXMgbW9kaWZlZCAoYWRkICEgdG8gb3ZlcnJpZGUpIgogbXNnc3RyICIiCiAiRTc0NzogTm9uIHBvc3NvIGNhbWJpYXJlIGRpcmVjdG9yeSwgYnVmZmVyIG1vZGlmaWNhdG8gKGFnZ2l1bmdpICEgcGVyICIKQEAgLTIyNzEsNyArMjI3MCw2IEBACiBtc2dzdHIgIlcxNjogQXR0ZW56aW9uZTogTW9kbyBGaWxlIFwiJXNcIiBtb2RpZmljYXRvIGRvcG8gbCdhcGVydHVyYSIKIAogIzogZmlsZWlvLmM6NjA2NgotIywgZnV6enkKIG1zZ2lkICJTZWUgXCI6aGVscCBXMTZcIiBmb3IgbW9yZSBpbmZvLiIKIG1zZ3N0ciAiVmVkZXJlIFwiOmhlbHAgVzE2XCIgcGVyIHVsdGVyaW9yaSBpbmZvcm1hemlvbmkuIgogCkBAIC01NjAwLDcgKzU1OTgsNiBAQAogbXNnc3RyICJFMzgyOiBOb24gcG9zc28gc2NyaXZlcmUsIGwnb3B6aW9uZSAnYnVmdHlwZScg6CBpbXBvc3RhdGEiCiAKICM6IHF1aWNrZml4LmM6MjM3OQotIywgZnV6enkKIG1zZ2lkICJFNjgyOiBJbnZhbGlkIHNlYXJjaCBwYXR0ZXJuIG9yIGRlbGltaXRlciIKIG1zZ3N0ciAiRTY4MjogRXNwcmVzc2lvbmUgbyBkZWxpbWl0YXRvcmUgZGkgcmljZXJjYSBub24gdmFsaWRpIgogCkBAIC02Njg4LDcgKzY2ODUsNiBAQAogbXNnc3RyICJjb24gR1VJIChjbGFzc2ljYSkuIgogCiAjOiB2ZXJzaW9uLmM6ODc2Ci0jLCBmdXp6eQogbXNnaWQgIndpdGggS0RFIEdVSS4iCiBtc2dzdHIgImNvbiBHVUkgS0RFLiIKIApAQCAtNzAwMiw3ICs2OTk4LDYgQEAKIG1zZ3N0ciAiRTU4ODogOmVuZHdoaWxlIHNlbnphIDp3aGlsZSIKIAogIzogZ2xvYmFscy5oOjEyNzYKLSMsIGZ1enp5CiBtc2dpZCAiRTU4ODogOmVuZGZvciB3aXRob3V0IDpmb3IiCiBtc2dzdHIgIkU1ODg6IDplbmRmb3Igc2VuemEgOmZvciIKIApkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL21pc2MyLnBybyBiL3NyYy9wcm90by9taXNjMi5wcm8KaW5kZXggNDE0NzlkMC4uZjlhYWI4ZCAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL21pc2MyLnBybworKysgYi9zcmMvcHJvdG8vbWlzYzIucHJvCkBAIC05Miw1ICs5Miw0IEBACiB2b2lkIHNvcnRfc3RyaW5ncyBfX0FSR1MoKGNoYXJfdSAqKmZpbGVzLCBpbnQgY291bnQpKTsKIGludCBwYXRoY21wIF9fQVJHUygoY29uc3QgY2hhciAqcCwgY29uc3QgY2hhciAqcSwgaW50IG1heGxlbikpOwogY2hhcl91ICpwYXJzZV9saXN0X29wdGlvbnMgX19BUkdTKChjaGFyX3UgKm9wdGlvbl9zdHIsIG9wdGlvbl90YWJsZV9UICp0YWJsZSwgaW50IHRhYmxlX3NpemUpKTsKLXZvaWQgbXNnX3N0ciBfX0FSR1MoKGNoYXJfdSAqcywgY2hhcl91ICphcmcpKTsKIC8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NlYXJjaC5jIGIvc3JjL3NlYXJjaC5jCmluZGV4IGM5NzczYjUuLjVmZmNiMzYgMTAwNjQ0Ci0tLSBhL3NyYy9zZWFyY2guYworKysgYi9zcmMvc2VhcmNoLmMKQEAgLTQyNzgsOCArNDI3OCw5IEBACiAjaWZkZWYgRkVBVF9JTlNfRVhQQU5ECiAJCSAgICBpZiAoYWN0aW9uID09IEFDVElPTl9FWFBBTkQpCiAJCSAgICB7Ci0JCQlzcHJpbnRmKChjaGFyKilJT2J1ZmYsIF8oIlNjYW5uaW5nIGluY2x1ZGVkIGZpbGU6ICVzIiksCi0JCQkgICAgKGNoYXIgKiluZXdfZm5hbWUpOworCQkJdmltX3NucHJpbnRmKChjaGFyKilJT2J1ZmYsIElPU0laRSwKKwkJCQlfKCJTY2FubmluZyBpbmNsdWRlZCBmaWxlOiAlcyIpLAorCQkJCShjaGFyICopbmV3X2ZuYW1lKTsKIAkJCW1zZ190cnVuY19hdHRyKElPYnVmZiwgVFJVRSwgaGxfYXR0cihITEZfUikpOwogCQkgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvc3ludGF4LmMgYi9zcmMvc3ludGF4LmMKaW5kZXggYmU3OWMyYy4uM2FjNDNkNyAxMDA2NDQKLS0tIGEvc3JjL3N5bnRheC5jCisrKyBiL3NyYy9zeW50YXguYwpAQCAtMzQzMyw3ICszNDMzLDcgQEAKICAgICBpZiAoIWVhcC0+c2tpcCkKICAgICB7CiAJU1RSQ1BZKGJ1ZiwgInNvICIpOwotCXNwcmludGYoKGNoYXIgKilidWYgKyAzLCBTWU5UQVhfRk5BTUUsIG5hbWUpOworCXZpbV9zbnByaW50ZigoY2hhciAqKWJ1ZiArIDMsIHNpemVvZihidWYpIC0gMywgU1lOVEFYX0ZOQU1FLCBuYW1lKTsKIAlkb19jbWRsaW5lX2NtZChidWYpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NyYy91aS5jIGIvc3JjL3VpLmMKaW5kZXggMTVhYjdjZi4uMzUwNmM0OCAxMDA2NDQKLS0tIGEvc3JjL3VpLmMKKysrIGIvc3JjL3VpLmMKQEAgLTIxNDAsNyArMjE0MCw3IEBACiAJY2xpcF95YW5rX3NlbGVjdGlvbihNQ0hBUiwgYnVmZmVyLCAobG9uZyluYnl0ZXMsIGNiZCk7CiAJWEZyZWUoKHZvaWQgKilidWZmZXIpOwogCWlmIChwX3ZlcmJvc2UgPiAwKQotCSAgICBzbXNnKChjaGFyX3UgKilfKCJVc2VkIENVVF9CVUZGRVIwIGluc3RlYWQgb2YgZW1wdHkgc2VsZWN0aW9uIikgKTsKKwkgICAgTVNHKF8oIlVzZWQgQ1VUX0JVRkZFUjAgaW5zdGVhZCBvZiBlbXB0eSBzZWxlY3Rpb24iKSk7CiAgICAgfQogfQogCg==