ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZmM5YjNjMS4uMTkwZDE0ZSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiBWRVJTSU9OID0gMQogUEFUQ0hMRVZFTCA9IDExCi1TVUJMRVZFTCA9IDIKK1NVQkxFVkVMID0gMwogRVhUUkFWRVJTSU9OID0KIE5BTUUgPSBVbm5hbWVkCiAKZGlmZiAtLWdpdCBhL2NvbnNvbGUtdG9vbHMva2JkX21vZGUuYyBiL2NvbnNvbGUtdG9vbHMva2JkX21vZGUuYwppbmRleCBmNDBlZTY0Li4yMTM3ZDlmIDEwMDY0NAotLS0gYS9jb25zb2xlLXRvb2xzL2tiZF9tb2RlLmMKKysrIGIvY29uc29sZS10b29scy9rYmRfbW9kZS5jCkBAIC0yLDcgKzIsNyBAQAogLyoKICAqIE1pbmkga2JkX21vZGUgaW1wbGVtZW50YXRpb24gZm9yIGJ1c3lib3gKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTG/vYyBHcmVuaekgPGxvaWMuZ3JlbmllQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBMb2ljIEdyZW5pZSA8bG9pYy5ncmVuaWVAZ21haWwuY29tPgogICogICB3cml0dGVuIHVzaW5nIEFuZHJpZXMgQnJvdXdlciA8YWViQGN3aS5ubD4ncyBrYmRfbW9kZSBmcm9tCiAgKiAgIGNvbnNvbGUtdXRpbHMgdjAuMi4zLCBsaWNlbnNlZCB1bmRlciBHTlUgR1BMdjIKICAqCkBAIC00Niw2ICs0Niw3IEBACiAJCXByaW50ZigiVGhlIGtleWJvYXJkIGlzIGluICVzIG1vZGVcbiIsIG1vZGUpOwogCX0gZWxzZSB7CiAJCW9wdCA9IG9wdCAmIFVOSUNPREUgPyAzIDogb3B0ID4+IDE7CisJCS8qIGRvdWJsZSBjYXN0IHByZXZlbnRzIHdhcm5pbmdzIGFib3V0IHdpZGVuaW5nIGNvbnZlcnNpb24gKi8KIAkJeGlvY3RsKGZkLCBLRFNLQk1PREUsICh2b2lkKikocHRyZGlmZl90KW9wdCk7CiAJfQogCmRpZmYgLS1naXQgYS9lZGl0b3JzL3ZpLmMgYi9lZGl0b3JzL3ZpLmMKaW5kZXggODFiYWE4OS4uMTk4NWJlNyAxMDA2NDQKLS0tIGEvZWRpdG9ycy92aS5jCisrKyBiL2VkaXRvcnMvdmkuYwpAQCAtMTQ3LDEwICsxNDcsMTAgQEAKICNlbmRpZgogCiAJc21hbGxpbnQgZWRpdGluZzsgICAgICAgIC8vID4wIHdoaWxlIHdlIGFyZSBlZGl0aW5nIGEgZmlsZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbY29kZSBhdWRpdCBzYXlzICJjYW4gYmUgMCBvciAxIG9ubHkiXQorCSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbY29kZSBhdWRpdCBzYXlzICJjYW4gYmUgMCwgMSBvciAyIG9ubHkiXQogCXNtYWxsaW50IGNtZF9tb2RlOyAgICAgICAvLyAwPWNvbW1hbmQgIDE9aW5zZXJ0IDI9cmVwbGFjZQogCWludCBmaWxlX21vZGlmaWVkOyAgICAgICAvLyBidWZmZXIgY29udGVudHMgY2hhbmdlZCAoY291bnRlciwgbm90IGZsYWchKQotCWludCBsYXN0X2ZpbGVfbW9kaWZpZWQ7IC8vID0gLTE7CisJaW50IGxhc3RfZmlsZV9tb2RpZmllZDsgIC8vID0gLTE7CiAJaW50IGZuX3N0YXJ0OyAgICAgICAgICAgIC8vIGluZGV4IG9mIGZpcnN0IGNtZCBsaW5lIGZpbGUgbmFtZQogCWludCBzYXZlX2FyZ2M7ICAgICAgICAgICAvLyBob3cgbWFueSBmaWxlIG5hbWVzIG9uIGNtZCBsaW5lCiAJaW50IGNtZGNudDsgICAgICAgICAgICAgIC8vIHJlcGV0aXRpb24gY291bnQKQEAgLTYyMyw3ICs2MjMsNyBAQAogCQkvLyBUaGVzZSBhcmUgY29tbWFuZHMgdGhhdCBjaGFuZ2UgdGV4dFtdLgogCQkvLyBSZW1lbWJlciB0aGUgaW5wdXQgZm9yIHRoZSAiLiIgY29tbWFuZAogCQlpZiAoIWFkZGluZzJxICYmIGlvcV9zdGFydCA9PSBOVUxMCi0JCSAmJiBzdHJjaHIobW9kaWZ5aW5nX2NtZHMsIGMpCisJCSAmJiBjICE9ICdcMCcgJiYgc3RyY2hyKG1vZGlmeWluZ19jbWRzLCBjKQogCQkpIHsKIAkJCXN0YXJ0X25ld19jbWRfcShjKTsKIAkJfQpAQCAtNjQ1LDggKzY0NSw4IEBACiAJfQogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0JcGxhY2VfY3Vyc29yKHJvd3MsIDAsIEZBTFNFKTsJLy8gZ28gdG8gYm90dG9tIG9mIHNjcmVlbgotCWNsZWFyX3RvX2VvbCgpOwkJLy8gRXJhc2UgdG8gZW5kIG9mIGxpbmUKKwlwbGFjZV9jdXJzb3Iocm93cyAtIDEsIDAsIEZBTFNFKTsgLy8gZ28gdG8gYm90dG9tIG9mIHNjcmVlbgorCWNsZWFyX3RvX2VvbCgpOyAvLyBlcmFzZSB0byBlbmQgb2YgbGluZQogCWNvb2ttb2RlKCk7CiAjdW5kZWYgY3VyX2xpbmUKIH0KQEAgLTIwMDksOSArMjAwOSw5IEBACiB7CiAJLy8gZ2V0IGJ1ZmZlciBmb3IgbmV3IGNtZAogCS8vIGlmIHRoZXJlIGlzIGEgY3VycmVudCBjbWQgY291bnQgcHV0IGl0IGluIHRoZSBidWZmZXIgZmlyc3QKLQlpZiAoY21kY250ID4gMCkKKwlpZiAoY21kY250ID4gMCkgewogCQlsbWNfbGVuID0gc3ByaW50ZihsYXN0X21vZGlmeWluZ19jbWQsICIlZCVjIiwgY21kY250LCBjKTsKLQllbHNlIHsgLy8ganVzdCBzYXZlIGNoYXIgYyBvbnRvIHF1ZXVlCisJfSBlbHNlIHsgLy8ganVzdCBzYXZlIGNoYXIgYyBvbnRvIHF1ZXVlCiAJCWxhc3RfbW9kaWZ5aW5nX2NtZFswXSA9IGM7CiAJCWxtY19sZW4gPSAxOwogCX0KQEAgLTIyNDcsMTggKzIyNDcsMjAgQEAKIAogCWZmbHVzaChzdGRvdXQpOwogCW4gPSBjaGFyc190b19wYXJzZTsKLQkvLyBnZXQgaW5wdXQgZnJvbSBVc2VyLSBhcmUgdGhlcmUgYWxyZWFkeSBpbnB1dCBjaGFycyBpbiBRPworCS8vIGdldCBpbnB1dCBmcm9tIFVzZXIgLSBhcmUgdGhlcmUgYWxyZWFkeSBpbnB1dCBjaGFycyBpbiBRPwogCWlmIChuIDw9IDApIHsKIAkJLy8gdGhlIFEgaXMgZW1wdHksIHdhaXQgZm9yIGEgdHlwZWQgY2hhcgorIGFnYWluOgogCQluID0gc2FmZV9yZWFkKFNURElOX0ZJTEVOTywgcmVhZGJ1ZmZlciwgc2l6ZW9mKHJlYWRidWZmZXIpKTsKLQkJaWYgKG4gPCAwKSB7Ci0JCQlpZiAoZXJybm8gPT0gRUJBREYgfHwgZXJybm8gPT0gRUZBVUxUIHx8IGVycm5vID09IEVJTlZBTAotCQkJIHx8IGVycm5vID09IEVJTykKLQkJCQllZGl0aW5nID0gMDsgLy8gd2FudCB0byBleGl0Ci0JCQllcnJubyA9IDA7CisJCWlmIChuIDw9IDApIHsKKwkJCXBsYWNlX2N1cnNvcihyb3dzIC0gMSwgMCwgRkFMU0UpOyAvLyBnbyB0byBib3R0b20gb2Ygc2NyZWVuCisJCQljbGVhcl90b19lb2woKTsgLy8gZXJhc2UgdG8gZW5kIG9mIGxpbmUKKwkJCWNvb2ttb2RlKCk7IC8vIHRlcm1pbmFsIHRvICJjb29rZWQiCisJCQliYl9lcnJvcl9tc2dfYW5kX2RpZSgiY2FuJ3QgcmVhZCB1c2VyIGlucHV0Iik7CiAJCX0KLQkJaWYgKG4gPD0gMCkKLQkJCXJldHVybiAwOyAgICAgICAvLyBlcnJvcgorCQkvKiBlbHNld2hlcmUgd2UgY2FuIGdldCB2ZXJ5IGNvbmZ1c2VkIGJ5IE5VTHMgKi8KKwkJaWYgKHJlYWRidWZmZXJbMF0gPT0gJ1wwJykKKwkJCWdvdG8gYWdhaW47CiAJCWlmIChyZWFkYnVmZmVyWzBdID09IDI3KSB7CiAJCQkvLyBUaGlzIGlzIGFuIEVTQyBjaGFyLiBJcyB0aGlzIEVzYyBzZXF1ZW5jZT8KIAkJCS8vIENvdWxkIGJlIGJhcmUgRXNjIGtleS4gU2VlIGlmIHRoZXJlIGFyZSBhbnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNhZ2UuaCBiL2luY2x1ZGUvdXNhZ2UuaAppbmRleCBkY2I2ZTM0Li4xMTY1YWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VzYWdlLmgKKysrIGIvaW5jbHVkZS91c2FnZS5oCkBAIC0zNjQwLDggKzM2NDAsOCBAQAogICAgICAgICJbT1BUSU9OU10gWy1TfC1LXSAuLi4gWy0tIGFyZ3VtZW50cy4uLl0iCiAjZGVmaW5lIHN0YXJ0X3N0b3BfZGFlbW9uX2Z1bGxfdXNhZ2UgIlxuXG4iIFwKICAgICAgICAiU2VhcmNoIGZvciBtYXRjaGluZyBwcm9jZXNzZXMsIGFuZCB0aGVuXG4iIFwKLSAgICAgICAiLVM6IHN0b3AgYWxsIG1hdGNoaW5nIHByb2Nlc3Nlcy5cbiIgXAotICAgICAgICItSzogc3RhcnQgYSBwcm9jZXNzIHVubGVzcyBhIG1hdGNoaW5nIHByb2Nlc3MgaXMgZm91bmQuXG4iIFwKKyAgICAgICAiLVM6IHN0YXJ0IGEgcHJvY2VzcyB1bmxlc3MgYSBtYXRjaGluZyBwcm9jZXNzIGlzIGZvdW5kLlxuIiBcCisgICAgICAgIi1LOiBzdG9wIGFsbCBtYXRjaGluZyBwcm9jZXNzZXMuXG4iIFwKIAlVU0VfR0VUT1BUX0xPTkcoIFwKICAgICAgIlxuUHJvY2VzcyBtYXRjaGluZzoiIFwKICAgICAgIlxuCS11LC0tdXNlciBVU0VSTkFNRXxVSUQJTWF0Y2ggb25seSB0aGlzIHVzZXIncyBwcm9jZXNzZXMiIFwKQEAgLTM2NTEsNyArMzY1MSw3IEBACiAgICAgICJcbgkJCQlpbiAvcHJvYy9QSUQvY21kbGluZSIgXAogICAgICAiXG4JLXAsLS1waWRmaWxlIEZJTEUJTWF0Y2ggYSBwcm9jZXNzIHdpdGggUElEIGZyb20gdGhlIGZpbGUiIFwKICAgICAgIlxuCUFsbCBzcGVjaWZpZWQgY29uZGl0aW9ucyBtdXN0IG1hdGNoIiBcCi0gICAgICJcbi1LIG9ubHk6IiBcCisgICAgICJcbi1TIG9ubHk6IiBcCiAgICAgICJcbgkteCwtLWV4ZWMgRVhFQ1VUQUJMRQlQcm9ncmFtIHRvIHJ1biIgXAogICAgICAiXG4JLWEsLS1zdGFydGFzIE5BTUUJWmVyb3RoIGFyZ3VtZW50IiBcCiAgICAgICJcbgktYiwtLWJhY2tncm91bmQJCUJhY2tncm91bmQiIFwKQEAgLTM2NjAsNyArMzY2MCw3IEBACiAJKSBcCiAgICAgICJcbgktYywtLWNodWlkIFVTRVJbOltHUlBdXQlDaGFuZ2UgdG8gdXNlci9ncm91cCIgXAogICAgICAiXG4JLW0sLS1tYWtlLXBpZGZpbGUJV3JpdGUgUElEIHRvIHRoZSBwaWRmaWxlIHNwZWNpZmllZCBieSAtcCIgXAotICAgICAiXG4tUyBvbmx5OiIgXAorICAgICAiXG4tSyBvbmx5OiIgXAogICAgICAiXG4JLXMsLS1zaWduYWwgU0lHCQlTaWduYWwgdG8gc2VuZCIgXAogICAgICAiXG4JLXQsLS10ZXN0CQlNYXRjaCBvbmx5LCBleGl0IHdpdGggMCBpZiBhIHByb2Nlc3MgaXMgZm91bmQiIFwKICAgICAgIlxuT3RoZXI6IiBcCkBAIC0zNjc5LDcgKzM2NzksNyBAQAogICAgICAiXG4JCQljb21tYW5kIGluIC9wcm9jL1BJRC9jbWRsaW5lIiBcCiAgICAgICJcbgktcCBGSUxFCQlNYXRjaCBhIHByb2Nlc3Mgd2l0aCBQSUQgZnJvbSB0aGUgZmlsZSIgXAogICAgICAiXG4JQWxsIHNwZWNpZmllZCBjb25kaXRpb25zIG11c3QgbWF0Y2giIFwKLSAgICAgIlxuLUsgb25seToiIFwKKyAgICAgIlxuLVMgb25seToiIFwKICAgICAgIlxuCS14IEVYRUNVVEFCTEUJUHJvZ3JhbSB0byBydW4iIFwKICAgICAgIlxuCS1hIE5BTUUJCVplcm90aCBhcmd1bWVudCIgXAogICAgICAiXG4JLWIJCUJhY2tncm91bmQiIFwKQEAgLTM2ODgsNyArMzY4OCw3IEBACiAJKSBcCiAgICAgICJcbgktYyBVU0VSWzpbR1JQXV0JQ2hhbmdlIHRvIHVzZXIvZ3JvdXAiIFwKICAgICAgIlxuCS1tCQlXcml0ZSBQSUQgdG8gdGhlIHBpZGZpbGUgc3BlY2lmaWVkIGJ5IC1wIiBcCi0gICAgICJcbi1TIG9ubHk6IiBcCisgICAgICJcbi1LIG9ubHk6IiBcCiAgICAgICJcbgktcyBTSUcJCVNpZ25hbCB0byBzZW5kIiBcCiAgICAgICJcbgktdAkJTWF0Y2ggb25seSwgZXhpdCB3aXRoIDAgaWYgYSBwcm9jZXNzIGlzIGZvdW5kIiBcCiAgICAgICJcbk90aGVyOiIgXApkaWZmIC0tZ2l0IGEvbGliYmIvbGluZWVkaXQuYyBiL2xpYmJiL2xpbmVlZGl0LmMKaW5kZXggZmI1OTVjMC4uYjNmNGY1MyAxMDA2NDQKLS0tIGEvbGliYmIvbGluZWVkaXQuYworKysgYi9saWJiYi9saW5lZWRpdC5jCkBAIC05NTMsMjQgKzk1MywzMyBAQAogCiAjaWYgTUFYX0hJU1RPUlkgPiAwCiAKLS8qIHN0YXRlLT5mbGFncyBpcyBhbHJlYWR5IGNoZWNrZWQgdG8gYmUgbm9uemVybyAqLwotc3RhdGljIHZvaWQgZ2V0X3ByZXZpb3VzX2hpc3Rvcnkodm9pZCkKK3N0YXRpYyB2b2lkIHNhdmVfY29tbWFuZF9wc19hdF9jdXJfaGlzdG9yeSh2b2lkKQogewotCWlmIChjb21tYW5kX3BzWzBdICE9ICdcMCcgfHwgc3RhdGUtPmhpc3Rvcnlbc3RhdGUtPmN1cl9oaXN0b3J5XSA9PSBOVUxMKSB7Ci0JCWZyZWUoc3RhdGUtPmhpc3Rvcnlbc3RhdGUtPmN1cl9oaXN0b3J5XSk7Ci0JCXN0YXRlLT5oaXN0b3J5W3N0YXRlLT5jdXJfaGlzdG9yeV0gPSB4c3RyZHVwKGNvbW1hbmRfcHMpOworCWlmIChjb21tYW5kX3BzWzBdICE9ICdcMCcpIHsKKwkJaW50IGN1ciA9IHN0YXRlLT5jdXJfaGlzdG9yeTsKKwkJZnJlZShzdGF0ZS0+aGlzdG9yeVtjdXJdKTsKKwkJc3RhdGUtPmhpc3RvcnlbY3VyXSA9IHhzdHJkdXAoY29tbWFuZF9wcyk7CiAJfQotCXN0YXRlLT5jdXJfaGlzdG9yeS0tOworfQorCisvKiBzdGF0ZS0+ZmxhZ3MgaXMgYWxyZWFkeSBjaGVja2VkIHRvIGJlIG5vbnplcm8gKi8KK3N0YXRpYyBpbnQgZ2V0X3ByZXZpb3VzX2hpc3Rvcnkodm9pZCkKK3sKKwlpZiAoKHN0YXRlLT5mbGFncyAmIERPX0hJU1RPUlkpICYmIHN0YXRlLT5jdXJfaGlzdG9yeSkgeworCQlzYXZlX2NvbW1hbmRfcHNfYXRfY3VyX2hpc3RvcnkoKTsKKwkJc3RhdGUtPmN1cl9oaXN0b3J5LS07CisJCXJldHVybiAxOworCX0KKwliZWVwKCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X25leHRfaGlzdG9yeSh2b2lkKQogewogCWlmIChzdGF0ZS0+ZmxhZ3MgJiBET19ISVNUT1JZKSB7Ci0JCWludCBjaCA9IHN0YXRlLT5jdXJfaGlzdG9yeTsKLQkJaWYgKGNoIDwgc3RhdGUtPmNudF9oaXN0b3J5KSB7Ci0JCQlnZXRfcHJldmlvdXNfaGlzdG9yeSgpOyAvKiBzYXZlIHRoZSBjdXJyZW50IGhpc3RvcnkgbGluZSAqLwotCQkJc3RhdGUtPmN1cl9oaXN0b3J5ID0gY2ggKyAxOwotCQkJcmV0dXJuIHN0YXRlLT5jdXJfaGlzdG9yeTsKKwkJaWYgKHN0YXRlLT5jdXJfaGlzdG9yeSA8IHN0YXRlLT5jbnRfaGlzdG9yeSkgeworCQkJc2F2ZV9jb21tYW5kX3BzX2F0X2N1cl9oaXN0b3J5KCk7IC8qIHNhdmUgdGhlIGN1cnJlbnQgaGlzdG9yeSBsaW5lICovCisJCQlyZXR1cm4gKytzdGF0ZS0+Y3VyX2hpc3Rvcnk7CiAJCX0KIAl9CiAJYmVlcCgpOwpAQCAtOTkyLDYgKzEwMDEsNyBAQAogCQlmb3IgKGhpID0gc3RhdGUtPmNudF9oaXN0b3J5OyBoaSA+IDA7KSB7CiAJCQloaS0tOwogCQkJZnJlZShzdGF0ZS0+aGlzdG9yeVtoaV0pOworCQkJc3RhdGUtPmhpc3RvcnlbaGldID0gTlVMTDsKIAkJfQogCiAJCWZvciAoaGkgPSAwOyBoaSA8IE1BWF9ISVNUT1JZOykgewpAQCAtMTAwMywxNCArMTAxMywxNCBAQAogCQkJbCA9IHN0cmxlbihobCk7CiAJCQlpZiAobCA+PSBNQVhfTElORUxFTikKIAkJCQlobFtNQVhfTElORUxFTi0xXSA9ICdcMCc7Ci0JCQlpZiAobCA9PSAwIHx8IGhsWzBdID09ICcgJykgeworCQkJaWYgKGwgPT0gMCkgewogCQkJCWZyZWUoaGwpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJc3RhdGUtPmhpc3RvcnlbaGkrK10gPSBobDsKIAkJfQogCQlmY2xvc2UoZnApOwotCQlzdGF0ZS0+Y3VyX2hpc3RvcnkgPSBzdGF0ZS0+Y250X2hpc3RvcnkgPSBoaTsKKwkJc3RhdGUtPmNudF9oaXN0b3J5ID0gaGk7CiAJfQogfQogCkBAIC0xMDQwLDE5ICsxMDUwLDI3IEBACiAKIAlpZiAoIShzdGF0ZS0+ZmxhZ3MgJiBET19ISVNUT1JZKSkKIAkJcmV0dXJuOwotCisJaWYgKHN0clswXSA9PSAnXDAnKQorCQlyZXR1cm47CiAJaSA9IHN0YXRlLT5jbnRfaGlzdG9yeTsKLQlmcmVlKHN0YXRlLT5oaXN0b3J5W01BWF9ISVNUT1JZXSk7Ci0Jc3RhdGUtPmhpc3RvcnlbTUFYX0hJU1RPUlldID0gTlVMTDsKLQkvKiBBZnRlciBtYXggaGlzdG9yeSwgcmVtb3ZlIHRoZSBvbGRlc3QgY29tbWFuZCAqLworCS8qIERvbid0IHNhdmUgZHVwZXMgKi8KKwlpZiAoaSAmJiBzdHJjbXAoc3RhdGUtPmhpc3RvcnlbaS0xXSwgc3RyKSA9PSAwKQorCQlyZXR1cm47CisKKwlmcmVlKHN0YXRlLT5oaXN0b3J5W01BWF9ISVNUT1JZXSk7IC8qIHJlZHVuZGFudCwgcGFyYW5vaWEgKi8KKwlzdGF0ZS0+aGlzdG9yeVtNQVhfSElTVE9SWV0gPSBOVUxMOyAvKiByZWR1bmRhbnQsIHBhcmFub2lhICovCisKKwkvKiBJZiBoaXN0b3J5W10gaXMgZnVsbCwgcmVtb3ZlIHRoZSBvbGRlc3QgY29tbWFuZCAqLworCS8qIHdlIG5lZWQgdG8ga2VlcCBoaXN0b3J5W01BWF9ISVNUT1JZXSBlbXB0eSwgaGVuY2UgPj0sIG5vdCA+ICovCiAJaWYgKGkgPj0gTUFYX0hJU1RPUlkpIHsKIAkJZnJlZShzdGF0ZS0+aGlzdG9yeVswXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfSElTVE9SWS0xOyBpKyspCiAJCQlzdGF0ZS0+aGlzdG9yeVtpXSA9IHN0YXRlLT5oaXN0b3J5W2krMV07CisJCS8qIGkgPT0gTUFYX0hJU1RPUlktMSAqLwogCX0KLS8vIE1heWJlICJpZiAoIWkgfHwgc3RyY21wKGhpc3RvcnlbaS0xXSwgY29tbWFuZCkgIT0gMCkgLi4uIgotLy8gKGkuZS4gZG8gbm90IHNhdmUgZHVwcz8pCisJLyogaSA8PSBNQVhfSElTVE9SWS0xICovCiAJc3RhdGUtPmhpc3RvcnlbaSsrXSA9IHhzdHJkdXAoc3RyKTsKKwkvKiBpIDw9IE1BWF9ISVNUT1JZICovCiAJc3RhdGUtPmN1cl9oaXN0b3J5ID0gaTsKIAlzdGF0ZS0+Y250X2hpc3RvcnkgPSBpOwogI2lmIEVOQUJMRV9GRUFUVVJFX0VESVRJTkdfU0FWRUhJU1RPUlkKQEAgLTEzOTQsNiArMTQxMiw3IEBACiAJaWYgKChzdGF0ZS0+ZmxhZ3MgJiBTQVZFX0hJU1RPUlkpICYmIHN0YXRlLT5oaXN0X2ZpbGUpCiAJCWxvYWRfaGlzdG9yeShzdGF0ZS0+aGlzdF9maWxlKTsKICNlbmRpZgorCXN0YXRlLT5jdXJfaGlzdG9yeSA9IHN0YXRlLT5jbnRfaGlzdG9yeTsKIAogCS8qIHByZXBhcmUgYmVmb3JlIGluaXQgaGFuZGxlcnMgKi8KIAljbWRlZGl0X3kgPSAwOyAgLyogcXVhc2lyZWFsIHksIG5vdCB0cnVlIGlmIGxpbmUgPiB4dCp5dCAqLwpAQCAtMTQyOSw2ICsxNDQ4LDEzIEBACiAJCX0KIAl9CiAjZW5kaWYKKworI2lmIDAKKwlmb3IgKGljID0gMDsgaWMgPD0gTUFYX0hJU1RPUlk7IGljKyspCisJCWJiX2Vycm9yX21zZygiaGlzdG9yeVslZF06JyVzJyIsIGljLCBzdGF0ZS0+aGlzdG9yeVtpY10pOworCWJiX2Vycm9yX21zZygiY3VyX2hpc3Rvcnk6JWQgY250X2hpc3Rvcnk6JWQiLCBzdGF0ZS0+Y3VyX2hpc3RvcnksIHN0YXRlLT5jbnRfaGlzdG9yeSk7CisjZW5kaWYKKwogCS8qIFByaW50IG91dCB0aGUgY29tbWFuZCBwcm9tcHQgKi8KIAlwYXJzZV9hbmRfcHV0X3Byb21wdChwcm9tcHQpOwogCkBAIC0xNTM3LDExICsxNTYzLDggQEAKIAkJdmlfY2FzZShDVFJMKCdQJyl8dmJpdDopCiAJCXZpX2Nhc2UoJ2snfHZiaXQ6KQogCQkJLyogQ29udHJvbC1wIC0tIEdldCBwcmV2aW91cyBjb21tYW5kIGZyb20gaGlzdG9yeSAqLwotCQkJaWYgKChzdGF0ZS0+ZmxhZ3MgJiBET19ISVNUT1JZKSAmJiBzdGF0ZS0+Y3VyX2hpc3RvcnkgPiAwKSB7Ci0JCQkJZ2V0X3ByZXZpb3VzX2hpc3RvcnkoKTsKKwkJCWlmIChnZXRfcHJldmlvdXNfaGlzdG9yeSgpKQogCQkJCWdvdG8gcmV3cml0ZV9saW5lOwotCQkJfQotCQkJYmVlcCgpOwogCQkJYnJlYWs7CiAjZW5kaWYKIApAQCAtMTczMCwxMCArMTc1Myw4IEBACiAjaWYgTUFYX0hJU1RPUlkgPiAwCiAJCQljYXNlICdBJzoKIAkJCQkvKiBVcCBBcnJvdyAtLSBHZXQgcHJldmlvdXMgY29tbWFuZCBmcm9tIGhpc3RvcnkgKi8KLQkJCQlpZiAoKHN0YXRlLT5mbGFncyAmIERPX0hJU1RPUlkpICYmIHN0YXRlLT5jdXJfaGlzdG9yeSA+IDApIHsKLQkJCQkJZ2V0X3ByZXZpb3VzX2hpc3RvcnkoKTsKKwkJCQlpZiAoZ2V0X3ByZXZpb3VzX2hpc3RvcnkoKSkKIAkJCQkJZ290byByZXdyaXRlX2xpbmU7Ci0JCQkJfQogCQkJCWJlZXAoKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ0InOgpAQCAtMTc0Myw3ICsxNzY0LDcgQEAKICByZXdyaXRlX2xpbmU6CiAJCQkJLyogUmV3cml0ZSB0aGUgbGluZSB3aXRoIHRoZSBzZWxlY3RlZCBoaXN0b3J5IGl0ZW0gKi8KIAkJCQkvKiBjaGFuZ2UgY29tbWFuZCAqLwotCQkJCWNvbW1hbmRfbGVuID0gc3RybGVuKHN0cmNweShjb21tYW5kLCBzdGF0ZS0+aGlzdG9yeVtzdGF0ZS0+Y3VyX2hpc3RvcnldKSk7CisJCQkJY29tbWFuZF9sZW4gPSBzdHJsZW4oc3RyY3B5KGNvbW1hbmQsIHN0YXRlLT5oaXN0b3J5W3N0YXRlLT5jdXJfaGlzdG9yeV0gPyA6ICIiKSk7CiAJCQkJLyogcmVkcmF3IGFuZCBnbyB0byBlb2wgKGJvbCwgaW4gdmkgKi8KIAkJCQlyZWRyYXcoY21kZWRpdF95LCAoc3RhdGUtPmZsYWdzICYgVklfTU9ERSkgPyA5OTk5IDogMCk7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9taXNjdXRpbHMvY3JvbnRhYi5jIGIvbWlzY3V0aWxzL2Nyb250YWIuYwppbmRleCBkYzMxNzlkLi4zODkzM2NmIDEwMDY0NAotLS0gYS9taXNjdXRpbHMvY3JvbnRhYi5jCisrKyBiL21pc2N1dGlscy9jcm9udGFiLmMKQEAgLTkzLDYgKzkzLDcgQEAKIAljaGFyICpuZXdfZm5hbWU7CiAJY2hhciAqdXNlcl9uYW1lOyAgLyogLXUgVVNFUiAqLwogCWludCBmZDsKKwlpbnQgc3JjX2ZkOwogCWludCBvcHRfbGVyOwogCiAJLyogZmlsZSBbb3B0c10gICAgIFJlcGxhY2UgY3JvbnRhYiBmcm9tIGZpbGUKQEAgLTE0NCwxNSArMTQ1LDE1IEBACiAJCWJiX3Nob3dfdXNhZ2UoKTsKIAogCS8qIFJlYWQgcmVwbGFjZW1lbnQgZmlsZSB1bmRlciB1c2VyJ3MgVUlEL0dJRC9ncm91cCB2ZWN0b3IgKi8KKwlzcmNfZmQgPSBTVERJTl9GSUxFTk87CiAJaWYgKCFvcHRfbGVyKSB7IC8qIFJlcGxhY2U/ICovCiAJCWlmICghYXJndlswXSkKIAkJCWJiX3Nob3dfdXNhZ2UoKTsKIAkJaWYgKE5PVF9MT05FX0RBU0goYXJndlswXSkpIHsKLQkJCWZkID0gb3Blbl9hc191c2VyKHBhcywgYXJndlswXSk7Ci0JCQlpZiAoZmQgPCAwKQorCQkJc3JjX2ZkID0gb3Blbl9hc191c2VyKHBhcywgYXJndlswXSk7CisJCQlpZiAoc3JjX2ZkIDwgMCkKIAkJCQliYl9lcnJvcl9tc2dfYW5kX2RpZSgidXNlciAlcyBjYW5ub3QgcmVhZCAlcyIsCiAJCQkJCQlwYXMtPnB3X25hbWUsIGFyZ3ZbMF0pOwotCQkJeG1vdmVfZmQoZmQsIFNURElOX0ZJTEVOTyk7CiAJCX0KIAl9CiAKQEAgLTE4MCwyMyArMTgxLDIzIEBACiAJCXRtcF9mbmFtZSA9IHhhc3ByaW50ZigiJXMuJXUiLCBjcm9udGFiX2RpciwgKHVuc2lnbmVkKWdldHBpZCgpKTsKIAkJLyogTm8gT19FWENMOiB3ZSBkb24ndCB3YW50IHRvIGJlIHN0dWNrIGlmIGVhcmxpZXIgY3JvbnRhYnMKIAkJICogd2VyZSBraWxsZWQsIGxlYXZpbmcgc3RhbGUgdGVtcCBmaWxlIGJlaGluZCAqLwotCQlmZCA9IHhvcGVuMyh0bXBfZm5hbWUsIE9fUkRXUnxPX0NSRUFUfE9fVFJVTkMsIDA2MDApOwotCQl4bW92ZV9mZChmZCwgU1RESU5fRklMRU5PKTsKLQkJZmNob3duKFNURElOX0ZJTEVOTywgcGFzLT5wd191aWQsIHBhcy0+cHdfZ2lkKTsKKwkJc3JjX2ZkID0geG9wZW4zKHRtcF9mbmFtZSwgT19SRFdSfE9fQ1JFQVR8T19UUlVOQywgMDYwMCk7CisJCWZjaG93bihzcmNfZmQsIHBhcy0+cHdfdWlkLCBwYXMtPnB3X2dpZCk7CiAJCWZkID0gb3BlbihwYXMtPnB3X25hbWUsIE9fUkRPTkxZKTsKIAkJaWYgKGZkID49IDApIHsKLQkJCWJiX2NvcHlmZF9lb2YoZmQsIFNURElOX0ZJTEVOTyk7CisJCQliYl9jb3B5ZmRfZW9mKGZkLCBzcmNfZmQpOwogCQkJY2xvc2UoZmQpOworCQkJeGxzZWVrKHNyY19mZCwgMCwgU0VFS19TRVQpOwogCQl9CisJCWNsb3NlX29uX2V4ZWNfb24oc3JjX2ZkKTsgLyogZG9uJ3Qgd2FudCBlZGl0b3IgdG8gc2VlIHRoaXMgZmQgKi8KIAkJZWRpdF9maWxlKHBhcywgdG1wX2ZuYW1lKTsKLQkJeGxzZWVrKFNURElOX0ZJTEVOTywgMCwgU0VFS19TRVQpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAogCWNhc2UgMDogLyogUmVwbGFjZSAobm8gLWwsIC1lLCBvciAtciB3ZXJlIGdpdmVuKSAqLwogCQluZXdfZm5hbWUgPSB4YXNwcmludGYoIiVzLm5ldyIsIHBhcy0+cHdfbmFtZSk7CiAJCWZkID0gb3BlbihuZXdfZm5hbWUsIE9fV1JPTkxZfE9fQ1JFQVR8T19UUlVOQ3xPX0FQUEVORCwgMDYwMCk7CiAJCWlmIChmZCA+PSAwKSB7Ci0JCQliYl9jb3B5ZmRfZW9mKFNURElOX0ZJTEVOTywgZmQpOworCQkJYmJfY29weWZkX2VvZihzcmNfZmQsIGZkKTsKIAkJCWNsb3NlKGZkKTsKIAkJCXhyZW5hbWUobmV3X2ZuYW1lLCBwYXMtPnB3X25hbWUpOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbWlzY3V0aWxzL3Rhc2tzZXQuYyBiL21pc2N1dGlscy90YXNrc2V0LmMKaW5kZXggNzA4YWJkOS4uOTczZjk0YSAxMDA2NDQKLS0tIGEvbWlzY3V0aWxzL3Rhc2tzZXQuYworKysgYi9taXNjdXRpbHMvdGFza3NldC5jCkBAIC0zNSw3ICszNSw4IEBACiAjZGVmaW5lIFRBU0tTRVRfUFJJTlRGX01BU0sgIiV4IgogLyogKHZvaWQqKSBjYXN0IGlzIGZvciBiYXR0bGluZyBnY2M6ICovCiAvKiAiZGVyZWZlcmVuY2luZyB0eXBlLXB1bm5lZCBwb2ludGVyIHdpbGwgYnJlYWsgc3RyaWN0LWFsaWFzaW5nIHJ1bGVzIiAqLwotI2RlZmluZSBmcm9tX2NwdXNldChtYXNrKSAoKih1bnNpZ25lZCopKHZvaWQqKSYobWFzaykpCisjZGVmaW5lIGZyb21fY3B1c2V0KG1hc2spICh7IHZvaWQgKl9fdnAgPSAmKG1hc2spOyAqKHVuc2lnbmVkKilfX3ZwOyB9KQorLyogZ2NjIDQuMy4wIHN0aWxsIGNvbXBsYWluczogI2RlZmluZSBmcm9tX2NwdXNldChtYXNrKSAoKih1bnNpZ25lZCopKHZvaWQqKSYobWFzaykpICovCiAjZW5kaWYKIAogCg==