From: marko.makela Date: May 29 2012 1:35pm Subject: bzr push into mysql-trunk-wl6255 branch (marko.makela:3890 to 3892) WL#6255 List-Archive: http://lists.mysql.com/commits/144002 Message-Id: <201205291335.q4TDZU0s016058@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 IDM4OTIgTWFya28gTcOka2Vsw6QJMjAxMi0wNS0yOQogICAgICBXTCM2MjU1IERNTCBsb2dnaW5n LiBUaGlzIGRvZXMgbm90IHlldCBlbmFibGUgb25saW5lIHRhYmxlIHJlYnVpbGQuCiAgICAgIFRo ZSBmdW5jdGlvbnMgZm9yIGFwcGx5aW5nIHRoZSBsb2cgYXJlIHBhcnQgb2YgYSBzZXBhcmF0ZSBj aGFuZ2UuCiAgICAgIAogICAgICBJbiBvbmxpbmUgdGFibGUgcmVidWlsZCwgd2Ugd2lsbCBub3Qg Y29weSBhbnkgZGVsZXRlLW1hcmtlZCByb3dzIG9yCiAgICAgIGFueSBoaXN0b3J5IHRvIHRoZSBu ZXcgdGFibGUuIEFueXRoaW5nIHRoYXQgaXMgZGVsZXRlLW1hcmtlZCB3aWxsIGJlCiAgICAgIHB1 cmdlZCBpbW1lZGlhdGVseSBmcm9tIHRoZSBuZXcgdGFibGUuCiAgICAgIAogICAgICBCZWNhdXNl IHRoZSBETUwgbG9nIHdpbGwgY29udGFpbiBCTE9CIHBvaW50ZXJzIG9mIHRoZSBvcmlnaW5hbCB0 YWJsZSwKICAgICAgdGhlIHB1cmdlIHRocmVhZCBtdXN0IG5vdCBmcmVlIGFueSBCTE9CcyBvZiBh IHRhYmxlIHRoYXQgaXMgYmVpbmcKICAgICAgcmVidWlsdC4KICAgICAgCiAgICAgIEJlY2F1c2Ug d2UgY2Fubm90IGVhc2lseSBibG9jayB0aGUgUk9MTEJBQ0sgb2YgYW4gSU5TRVJULCB3ZSB3aWxs IGtlZXAKICAgICAgdHJhY2sgb2YgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIHJvbGxlZCBi YWNrLCBhbmQgc2tpcCBhbnkgcm93cwogICAgICB3cml0dGVuIGJ5IHRyYW5zYWN0aW9ucyB0aGF0 IGhhdmUgYmVlbiByb2xsZWQgYmFjay4gSW4gdGhpcyB3YXksIHdlCiAgICAgIHdpbGwgbm90IGRl cmVmZXJlbmNlIGFueSBCTE9CcyB0aGF0IHdvdWxkIGJlIGZyZWVkIGFzIHBhcnQgb2YgYQogICAg ICByb2xsYmFjay4KICAgICAgCiAgICAgIHJvd19sb2dfdGFibGVfaW5zZXJ0KCk6IExvZ2dpbmcg ZnVuY3Rpb24gZm9yIGluc2VydGluZyBhIG5ldyByb3csCiAgICAgIHdoZXRoZXIgb3Igbm90IGEg ZnJlc2ggaW5zZXJ0IG9yIGFuIHVwZGF0ZSBvZiBhIGRlbGV0ZS1tYXJrZWQgcm93LgogICAgICAK ICAgICAgcm93X2xvZ190YWJsZV9kZWxldGUoKTogTG9nZ2luZyBmdW5jdGlvbiBmb3IgZGVsZXRl LW1hcmtpbmcgYSByb3cuCiAgICAgIFRoZSByb3cgd2lsbCBiZSBpZGVudGlmaWVkIGJ5IFBSSU1B UlkgS0VZIChpbiB0aGUgbmV3IHRhYmxlCiAgICAgIGRlZmluaXRpb24pIGFuZCB0aGUgREJfVFJY X0lEIGJlZm9yZSB0aGUgZGVsZXRlLW1hcmtpbmcgKHB1cmdpbmcpLgogICAgICAKICAgICAgcm93 X2xvZ190YWJsZV91cGRhdGUoKTogTG9nZ2luZyBmdW5jdGlvbiBmb3IgYW4gdXBkYXRlIG9mIGEg cm93IHRoYXQKICAgICAgd2FzIG5vdCBkZWxldGUtbWFya2VkLiBUaGUgbmV3IHZhbHVlIG9mIHRo ZSByb3cgd2lsbCBiZSBsb2dnZWQsIG5vdAogICAgICBkZXJlZmVyZW5jaW5nIGFueSBCTE9CIHBv aW50ZXJzLiBJZiB0aGUgUFJJTUFSWSBLRVkgaXMgcmVkZWZpbmVkLCB0aGUKICAgICAgdXBkYXRl IHJlY29yZCB3aWxsIGFsc28gY29udGFpbiB0aGUgbmV3IFBSSU1BUlkgS0VZIGFuZCB0aGUgREJf VFJYX0lELAogICAgICBEQl9ST0xMX1BUUiB2YWx1ZSBvZiB0aGUgb2xkIHJvdy4KICAgICAgCiAg ICAgIHJvd19sb2dfdGFibGVfZ2V0X3BrKCk6IENvbnN0cnVjdHMgdGhlIG9sZCBQUklNQVJZIEtF WSBhbmQKICAgICAgREJfVFJYX0lELERCX1JPTExfUFRSIGZvciByb3dfbG9nX3RhYmxlX3VwZGF0 ZSgpLiBJZiB0aGUgUFJJTUFSWSBLRVkKICAgICAgaXMgbm90IGJlaW5nIHJlZGVmaW5lZCwgcmV0 dXJucyBOVUxMLiBUaGlzIGNvbnZlcnNpb24gaGFzIHRvIGJlIGRvbmUKICAgICAgYXQgbG9nZ2lu ZyB0aW1lIHdoaWxlIGhvbGRpbmcgdGhlIGNsdXN0ZXJlZCBpbmRleCBsZWFmIHBhZ2UgbGF0Y2gs IGluCiAgICAgIGNhc2UgdGhlIG5ldyBQUklNQVJZIEtFWSBpbmNsdWRlcyBjb2x1bW4gcHJlZml4 ZXMgb2YgZXh0ZXJuYWxseSBzdG9yZWQKICAgICAgY29sdW1ucy4KICAgICAgCiAgICAgIHJvd19s b2dfdGFibGVfb3BlbigpLCByb3dfbG9nX3RhYmxlX2Nsb3NlX2Z1bmMoKTogQ29tbW9uIGNvZGUg Zm9yCiAgICAgIHRhYmxlIERNTCBsb2dnaW5nLgogICAgICAKICAgICAgcm93X2luc19jbHVzdF9p bmRleF9lbnRyeV9ieV9tb2RpZnkoKSwgcm93X2luc19jbHVzdF9pbmRleF9lbnRyeV9sb3coKSwK ICAgICAgcm93X2luc19pbmRleF9lbnRyeV9iaWdfcmVjX2Z1bmMoKTogQWRkIHJvd19sb2dfdGFi bGVfaW5zZXJ0KCkgbG9nZ2luZy4KICAgICAgCiAgICAgIHJvd191bmRvX2luc19yZW1vdmVfY2x1 c3RfcmVjKCk6IEFkZCByb3dfbG9nX3RhYmxlX2RlbGV0ZSgpIGxvZ2dpbmcuCiAgICAgIAogICAg ICByb3dfdW5kb19tb2RfY2x1c3RfbG93KCk6IEFkZCBhbiBvdXRwdXQgcGFyYW1ldGVyIHJlYnVp bHRfb2xkX3BrIGZvcgogICAgICByb3dfbG9nX3RhYmxlX3VwZGF0ZSgpIGxvZ2dpbmcuCiAgICAg IAogICAgICByb3dfdW5kb19tb2RfY2x1c3QoKTogQWRkIGluc2VydCwgdXBkYXRlLCBkZWxldGUg bG9nZ2luZy4KICAgICAgCiAgICAgIHJvd191cGRfY2x1c3RfcmVjX2J5X2luc2VydCgpOiBOb3Rl IHRoYXQgbm8gbG9nZ2luZyBpcyBuZWNlc3NhcnkgZm9yCiAgICAgIEJMT0Igb3duZXJzaGlwIGNo YW5nZXMuCiAgICAgIAogICAgICByb3dfdXBkX2NsdXN0X3JlYygpOiBBZGQgdGhlIHBhcmFtZXRl cnMgb2Zmc2V0cywgb2Zmc2V0c19oZWFwLiAgQWRkCiAgICAgIHJvd19sb2dfdGFibGVfdXBkYXRl KCkgbG9nZ2luZy4KCiAgICBtb2RpZmllZDoKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9idHIvYnRy MGN1ci5jYwogICAgICBzdG9yYWdlL2lubm9iYXNlL2luY2x1ZGUvcm93MGxvZy5oCiAgICAgIHN0 b3JhZ2UvaW5ub2Jhc2Uvcm93L3JvdzBpbnMuY2MKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9yb3cv cm93MGxvZy5jYwogICAgICBzdG9yYWdlL2lubm9iYXNlL3Jvdy9yb3cwdWlucy5jYwogICAgICBz dG9yYWdlL2lubm9iYXNlL3Jvdy9yb3cwdW1vZC5jYwogICAgICBzdG9yYWdlL2lubm9iYXNlL3Jv dy9yb3cwdXBkLmNjCiAzODkxIE1hcmtvIE3DpGtlbMOkCTIwMTItMDUtMjkKICAgICAgV0wjNjI1 NSBhbmQgV0wjNTUyNiBwZXJmb3JtYW5jZSB0d2VhazoKICAgICAgCiAgICAgIGJ0cl9jdXJfcGVz c2ltaXN0aWNfZGVsZXRlKCk6IFNraXAgbG9ja2luZyB3aGVuIGZsYWdzIGFyZSBzZXQuCgogICAg bW9kaWZpZWQ6CiAgICAgIHN0b3JhZ2UvaW5ub2Jhc2UvYnRyL2J0cjBjdXIuY2MKIDM4OTAgTWFy a28gTcOka2Vsw6QJMjAxMi0wNS0yOQogICAgICBXTCM2MjU1IHJlZmFjdG9yaW5nOgogICAgICAK ICAgICAgcm93X2luc19jbHVzdF9pbmRleF9lbnRyeV9sb3coKTogTW92ZSB0aGUgbG9nX2ZyZWVf Y2hlY2soKSBjYWxsCiAgICAgIHRvIHRoZSBjYWxsZXJzLCBiZWNhdXNlIGR1cmluZyBvbmxpbmUg dGFibGUgcmVidWlsZCwgdGhlIGNsdXN0ZXJlZCBpbmRleAogICAgICB0cmVlIG9mIHRoZSBuZXcg Y29weSBvZiB0aGUgdGFibGUgY291bGQgYmUgWC1sYXRjaGVkIHdoaWxlIGNhbGxpbmcKICAgICAg dGhpcyBmdW5jdGlvbi4KCiAgICBtb2RpZmllZDoKICAgICAgc3RvcmFnZS9pbm5vYmFzZS9yb3cv cm93MGlucy5jYwo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS9idHIvYnRyMGN1 ci5jYycKLS0tIGEvc3RvcmFnZS9pbm5vYmFzZS9idHIvYnRyMGN1ci5jYwlyZXZpZDptYXJrby5t YWtlbGFAb3JhY2xlLmNvbS0yMDEyMDUyOTEyMzk1My1wd2xsajFvcnlubTdhNnE5CisrKyBiL3N0 b3JhZ2UvaW5ub2Jhc2UvYnRyL2J0cjBjdXIuY2MJcmV2aWQ6bWFya28ubWFrZWxhQG9yYWNsZS5j b20tMjAxMjA1MjkxMzMzMzAtaHZzNHJ6YnpsNjhzeW1ubApAQCAtNTcsNiArNTcsNyBAQCBDcmVh dGVkIDEwLzE2LzE5OTQgSGVpa2tpIFR1dXJpCiAjaW5jbHVkZSAiYnVmMGxydS5oIgogI2luY2x1 ZGUgImJ0cjBidHIuaCIKICNpbmNsdWRlICJidHIwc2VhLmgiCisjaW5jbHVkZSAicm93MGxvZy5o IgogI2luY2x1ZGUgInJvdzBwdXJnZS5oIgogI2luY2x1ZGUgInJvdzB1cGQuaCIKICNpbmNsdWRl ICJ0cngwcmVjLmgiCkBAIC0yNzYxLDYgKzI3NjIsMTMgQEAgYnRyX2N1cl9kZWxfbWFya19zZXRf Y2x1c3RfcmVjKAogCiAJdHJ4ID0gdGhyX2dldF90cngodGhyKTsKIAorCWlmIChkaWN0X2luZGV4 X2lzX29ubGluZV9kZGwoaW5kZXgpKSB7CisJCXJvd19sb2dfdGFibGVfZGVsZXRlKAorCQkJcmVj LCBpbmRleCwgb2Zmc2V0cywKKwkJCXRyeF9yZWFkX3RyeF9pZChyb3dfZ2V0X3RyeF9pZF9vZmZz ZXQoaW5kZXgsIG9mZnNldHMpCisJCQkJCSsgcmVjKSk7CisJfQorCiAJcm93X3VwZF9yZWNfc3lz X2ZpZWxkcyhyZWMsIHBhZ2VfemlwLCBpbmRleCwgb2Zmc2V0cywgdHJ4LCByb2xsX3B0cik7CiAK IAlidHJfY3VyX2RlbF9tYXJrX3NldF9jbHVzdF9yZWNfbG9nKHJlYywgaW5kZXgsIHRyeC0+aWQs CkBAIC0zMTQ0LDEzICszMTUyLDE1IEBAIGJ0cl9jdXJfcGVzc2ltaXN0aWNfZGVsZXRlKAogCiAJ CWJ0cl9kaXNjYXJkX3BhZ2UoY3Vyc29yLCBtdHIpOwogCi0JCSplcnIgPSBEQl9TVUNDRVNTOwog CQlyZXQgPSBUUlVFOwogCiAJCWdvdG8gcmV0dXJuX2FmdGVyX3Jlc2VydmF0aW9uczsKIAl9CiAK LQlsb2NrX3VwZGF0ZV9kZWxldGUoYmxvY2ssIHJlYyk7CisJaWYgKFVOSVZfTElLRUxZKGZsYWdz ID09IDApKSB7CisJCWxvY2tfdXBkYXRlX2RlbGV0ZShibG9jaywgcmVjKTsKKwl9CisKIAlsZXZl bCA9IGJ0cl9wYWdlX2dldF9sZXZlbChwYWdlLCBtdHIpOwogCiAJaWYgKGxldmVsID4gMApAQCAt MzE5Nyw5ICszMjA3LDkgQEAgYnRyX2N1cl9wZXNzaW1pc3RpY19kZWxldGUoCiAKIAl1dF9hZChi dHJfY2hlY2tfbm9kZV9wdHIoaW5kZXgsIGJsb2NrLCBtdHIpKTsKIAorcmV0dXJuX2FmdGVyX3Jl c2VydmF0aW9uczoKIAkqZXJyID0gREJfU1VDQ0VTUzsKIAotcmV0dXJuX2FmdGVyX3Jlc2VydmF0 aW9uczoKIAltZW1faGVhcF9mcmVlKGhlYXApOwogCiAJaWYgKHJldCA9PSBGQUxTRSkgewoKPT09 IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS9yb3cwbG9nLmgnCi0tLSBh L3N0b3JhZ2UvaW5ub2Jhc2UvaW5jbHVkZS9yb3cwbG9nLmgJcmV2aWQ6bWFya28ubWFrZWxhQG9y YWNsZS5jb20tMjAxMjA1MjkxMjM5NTMtcHdsbGoxb3J5bm03YTZxOQorKysgYi9zdG9yYWdlL2lu bm9iYXNlL2luY2x1ZGUvcm93MGxvZy5oCXJldmlkOm1hcmtvLm1ha2VsYUBvcmFjbGUuY29tLTIw MTIwNTI5MTMzMzMwLWh2czRyemJ6bDY4c3ltbmwKQEAgLTgxLDYgKzgxLDcxIEBAIHJvd19sb2df dGFibGVfZ2V0X2Vycm9yKAogCV9fYXR0cmlidXRlX18oKG5vbm51bGwsIHdhcm5fdW51c2VkX3Jl c3VsdCkpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLy8qKgorTG9ncyBhIGRlbGV0ZSBvcGVyYXRpb24gdG8gYSB0YWJsZSB0aGF0IGlz IGJlaW5nIHJlYnVpbHQuCitUaGlzIHdpbGwgYmUgbWVyZ2VkIGluIHJvd19sb2dfdGFibGVfYXBw bHlfZGVsZXRlKCkuICovCitVTklWX0lOVEVSTgordm9pZAorcm93X2xvZ190YWJsZV9kZWxldGUo CisvKj09PT09PT09PT09PT09PT09Ki8KKwljb25zdCByZWNfdCoJcmVjLAkvKiE8IGluOiBjbHVz dGVyZWQgaW5kZXggbGVhZiBwYWdlIHJlY29yZCwKKwkJCQlwYWdlIFgtbGF0Y2hlZCAqLworCWRp Y3RfaW5kZXhfdCoJaW5kZXgsCS8qITwgaW4vb3V0OiBjbHVzdGVyZWQgaW5kZXgsIFMtbGF0Y2hl ZAorCQkJCW9yIFgtbGF0Y2hlZCAqLworCWNvbnN0IHVsaW50KglvZmZzZXRzLC8qITwgaW46IHJl Y19nZXRfb2Zmc2V0cyhyZWMsaW5kZXgpICovCisJdHJ4X2lkX3QJdHJ4X2lkKQkvKiE8IGluOiBE Ql9UUlhfSUQgb2YgdGhlIHJlY29yZCBiZWZvcmUKKwkJCQlpdCB3YXMgZGVsZXRlZCAqLworCVVO SVZfQ09MRCBfX2F0dHJpYnV0ZV9fKChub25udWxsKSk7CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCitMb2dzIGFuIHVwZGF0ZSBv cGVyYXRpb24gdG8gYSB0YWJsZSB0aGF0IGlzIGJlaW5nIHJlYnVpbHQuCitUaGlzIHdpbGwgYmUg bWVyZ2VkIGluIHJvd19sb2dfdGFibGVfYXBwbHlfdXBkYXRlKCkuICovCitVTklWX0lOVEVSTgor dm9pZAorcm93X2xvZ190YWJsZV91cGRhdGUoCisvKj09PT09PT09PT09PT09PT09Ki8KKwljb25z dCByZWNfdCoJcmVjLAkvKiE8IGluOiBjbHVzdGVyZWQgaW5kZXggbGVhZiBwYWdlIHJlY29yZCwK KwkJCQlwYWdlIFgtbGF0Y2hlZCAqLworCWRpY3RfaW5kZXhfdCoJaW5kZXgsCS8qITwgaW4vb3V0 OiBjbHVzdGVyZWQgaW5kZXgsIFMtbGF0Y2hlZAorCQkJCW9yIFgtbGF0Y2hlZCAqLworCWNvbnN0 IHVsaW50KglvZmZzZXRzLC8qITwgaW46IHJlY19nZXRfb2Zmc2V0cyhyZWMsaW5kZXgpICovCisJ Y29uc3QgZHR1cGxlX3QqCW9sZF9waykJLyohPCBpbjogcm93X2xvZ190YWJsZV9nZXRfcGsoKQor CQkJCWJlZm9yZSB0aGUgdXBkYXRlICovCisJVU5JVl9DT0xEIF9fYXR0cmlidXRlX18oKG5vbm51 bGwoMSwyLDMpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovLyoqCitDb25zdHJ1Y3RzIHRoZSBvbGQgUFJJTUFSWSBLRVkgYW5kIERC X1RSWF9JRCxEQl9ST0xMX1BUUgorb2YgYSB0YWJsZSB0aGF0IGlzIGJlaW5nIHJlYnVpbHQuCitA cmV0dXJuIHR1cGxlIG9mIFBSSU1BUlkgS0VZLERCX1RSWF9JRCxEQl9ST0xMX1BUUiBpbiB0aGUg cmVidWlsdCB0YWJsZSwKK29yIE5VTEwgaWYgbm90IGJlaW5nIHJlYnVpbHQgb25saW5lIG9yIHRo ZSBQUklNQVJZIEtFWSBkZWZpbml0aW9uCitkb2VzIG5vdCBjaGFuZ2UgKi8KK1VOSVZfSU5URVJO Citjb25zdCBkdHVwbGVfdCoKK3Jvd19sb2dfdGFibGVfZ2V0X3BrKAorLyo9PT09PT09PT09PT09 PT09PSovCisJY29uc3QgcmVjX3QqCXJlYywJLyohPCBpbjogY2x1c3RlcmVkIGluZGV4IGxlYWYg cGFnZSByZWNvcmQsCisJCQkJcGFnZSBYLWxhdGNoZWQgKi8KKwlkaWN0X2luZGV4X3QqCWluZGV4 LAkvKiE8IGluL291dDogY2x1c3RlcmVkIGluZGV4LCBTLWxhdGNoZWQKKwkJCQlvciBYLWxhdGNo ZWQgKi8KKwljb25zdCB1bGludCoJb2Zmc2V0cywvKiE8IGluOiByZWNfZ2V0X29mZnNldHMocmVj LGluZGV4KSwKKwkJCQlvciBOVUxMICovCisJbWVtX2hlYXBfdCoqCWhlYXApCS8qITwgaW4vb3V0 OiBtZW1vcnkgaGVhcCB3aGVyZSBhbGxvY2F0ZWQgKi8KKwlVTklWX0NPTEQgX19hdHRyaWJ1dGVf Xygobm9ubnVsbCgxLDIsNCksIHdhcm5fdW51c2VkX3Jlc3VsdCkpOworCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKgorTG9ncyBhbiBp bnNlcnQgdG8gYSB0YWJsZSB0aGF0IGlzIGJlaW5nIHJlYnVpbHQuCitUaGlzIHdpbGwgYmUgbWVy Z2VkIGluIHJvd19sb2dfdGFibGVfYXBwbHlfaW5zZXJ0KCkuICovCitVTklWX0lOVEVSTgordm9p ZAorcm93X2xvZ190YWJsZV9pbnNlcnQoCisvKj09PT09PT09PT09PT09PT09Ki8KKwljb25zdCBy ZWNfdCoJcmVjLAkvKiE8IGluOiBjbHVzdGVyZWQgaW5kZXggbGVhZiBwYWdlIHJlY29yZCwKKwkJ CQlwYWdlIFgtbGF0Y2hlZCAqLworCWRpY3RfaW5kZXhfdCoJaW5kZXgsCS8qITwgaW4vb3V0OiBj bHVzdGVyZWQgaW5kZXgsIFMtbGF0Y2hlZAorCQkJCW9yIFgtbGF0Y2hlZCAqLworCWNvbnN0IHVs aW50KglvZmZzZXRzKS8qITwgaW46IHJlY19nZXRfb2Zmc2V0cyhyZWMsaW5kZXgpICovCisJVU5J Vl9DT0xEIF9fYXR0cmlidXRlX18oKG5vbm51bGwpKTsKKworLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKIE5vdGVzIHRoYXQgYSB0cmFu c2FjdGlvbiBpcyBiZWluZyByb2xsZWQgYmFjay4gKi8KIFVOSVZfSU5URVJOCiB2b2lkCgo9PT0g bW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9pbm5vYmFzZS9yb3cvcm93MGlucy5jYycKLS0tIGEvc3Rv cmFnZS9pbm5vYmFzZS9yb3cvcm93MGlucy5jYwlyZXZpZDptYXJrby5tYWtlbGFAb3JhY2xlLmNv bS0yMDEyMDUyOTEyMzk1My1wd2xsajFvcnlubTdhNnE5CisrKyBiL3N0b3JhZ2UvaW5ub2Jhc2Uv cm93L3JvdzBpbnMuY2MJcmV2aWQ6bWFya28ubWFrZWxhQG9yYWNsZS5jb20tMjAxMjA1MjkxMzMz MzAtaHZzNHJ6YnpsNjhzeW1ubApAQCAtNDIsNiArNDIsNyBAQCBDcmVhdGVkIDQvMjAvMTk5NiBI ZWlra2kgVHV1cmkKICNpbmNsdWRlICJyb3cwdXBkLmgiCiAjaW5jbHVkZSAicm93MHNlbC5oIgog I2luY2x1ZGUgInJvdzByb3cuaCIKKyNpbmNsdWRlICJyb3cwbG9nLmgiCiAjaW5jbHVkZSAicmVt MGNtcC5oIgogI2luY2x1ZGUgImxvY2swbG9jay5oIgogI2luY2x1ZGUgImxvZzBsb2cuaCIKQEAg LTM0NSw3ICszNDYsOSBAQCByb3dfaW5zX2NsdXN0X2luZGV4X2VudHJ5X2J5X21vZGlmeSgKIAl1 cGRhdGUgPSByb3dfdXBkX2J1aWxkX2RpZmZlcmVuY2VfYmluYXJ5KAogCQljdXJzb3ItPmluZGV4 LCBlbnRyeSwgcmVjLCBOVUxMLCB0cnVlLAogCQl0aHJfZ2V0X3RyeCh0aHIpLCBoZWFwKTsKLQlp ZiAobW9kZSA9PSBCVFJfTU9ESUZZX0xFQUYpIHsKKwlpZiAobW9kZSAhPSBCVFJfTU9ESUZZX1RS RUUpIHsKKwkJdXRfYWQoKG1vZGUgJiB+QlRSX0FMUkVBRFlfU19MQVRDSEVEKSA9PSBCVFJfTU9E SUZZX0xFQUYpOworCiAJCS8qIFRyeSBvcHRpbWlzdGljIHVwZGF0aW5nIG9mIHRoZSByZWNvcmQs IGtlZXBpbmcgY2hhbmdlcwogCQl3aXRoaW4gdGhlIHBhZ2UgKi8KIApAQCAtMzYxLDcgKzM2NCw2 IEBAIHJvd19pbnNfY2x1c3RfaW5kZXhfZW50cnlfYnlfbW9kaWZ5KAogCQkJYnJlYWs7CiAJCX0K IAl9IGVsc2UgewotCQl1dF9hKG1vZGUgPT0gQlRSX01PRElGWV9UUkVFKTsKIAkJaWYgKGJ1Zl9M UlVfYnVmX3Bvb2xfcnVubmluZ19vdXQoKSkgewogCiAJCQlyZXR1cm4oREJfTE9DS19UQUJMRV9G VUxMKTsKQEAgLTIxNjksNiArMjE3MSwxMSBAQCByb3dfaW5zX2NsdXN0X2luZGV4X2VudHJ5X2xv dygKIAogCW10cl9zdGFydCgmbXRyKTsKIAorCWlmIChtb2RlID09IEJUUl9NT0RJRllfTEVBRiAm JiBkaWN0X2luZGV4X2lzX29ubGluZV9kZGwoaW5kZXgpKSB7CisJCW1vZGUgPSBCVFJfTU9ESUZZ X0xFQUYgfCBCVFJfQUxSRUFEWV9TX0xBVENIRUQ7CisJCW10cl9zX2xvY2soZGljdF9pbmRleF9n ZXRfbG9jayhpbmRleCksICZtdHIpOworCX0KKwogCWN1cnNvci50aHIgPSB0aHI7CiAKIAkvKiBO b3RlIHRoYXQgd2UgdXNlIFBBR0VfQ1VSX0xFIGFzIHRoZSBzZWFyY2ggbW9kZSwgYmVjYXVzZSB0 aGVuCkBAIC0yMjc2LDEzICsyMjgzLDE4IEBAIGVycl9leGl0OgogCQkJZHR1cGxlX2JpZ19yZWNf ZnJlZShiaWdfcmVjKTsKIAkJfQogCisJCWlmIChkaWN0X2luZGV4X2lzX29ubGluZV9kZGwoaW5k ZXgpKSB7CisJCQlyb3dfbG9nX3RhYmxlX2luc2VydChyZWMsIGluZGV4LCBvZmZzZXRzKTsKKwkJ fQorCiAJCW10cl9jb21taXQoJm10cik7CiAJCW1lbV9oZWFwX2ZyZWUoZW50cnlfaGVhcCk7CiAJ fSBlbHNlIHsKIAkJcmVjX3QqCWluc2VydF9yZWM7CiAKIAkJaWYgKG1vZGUgIT0gQlRSX01PRElG WV9UUkVFKSB7Ci0JCQl1dF9hZChtb2RlID09IEJUUl9NT0RJRllfTEVBRik7CisJCQl1dF9hZCgo bW9kZSAmIH5CVFJfQUxSRUFEWV9TX0xBVENIRUQpCisJCQkgICAgICA9PSBCVFJfTU9ESUZZX0xF QUYpOwogCQkJZXJyID0gYnRyX2N1cl9vcHRpbWlzdGljX2luc2VydCgKIAkJCQlmbGFncywgJmN1 cnNvciwgJm9mZnNldHMsICZvZmZzZXRzX2hlYXAsCiAJCQkJZW50cnksICZpbnNlcnRfcmVjLCAm YmlnX3JlYywKQEAgLTIyOTksOSArMjMxMSwxNCBAQCBlcnJfZXhpdDoKIAkJCQluX2V4dCwgdGhy LCAmbXRyKTsKIAkJfQogCi0JCW10cl9jb21taXQoJm10cik7Ci0KIAkJaWYgKFVOSVZfTElLRUxZ X05VTEwoYmlnX3JlYykpIHsKKwkJCW10cl9jb21taXQoJm10cik7CisKKwkJCS8qIE9ubGluZSB0 YWJsZSByZWJ1aWxkIGNvdWxkIHJlYWQgKGFuZAorCQkJaWdub3JlKSB0aGUgaW5jb21wbGV0ZSBy ZWNvcmQgYXQgdGhpcyBwb2ludC4KKwkJCUlmIG9ubGluZSByZWJ1aWxkIGlzIGluIHByb2dyZXNz LCB0aGUKKwkJCXJvd19pbnNfaW5kZXhfZW50cnlfYmlnX3JlYygpIHdpbGwgd3JpdGUgbG9nLiAq LworCiAJCQlEQlVHX0VYRUNVVEVfSUYoCiAJCQkJInJvd19pbnNfZXh0ZXJuX2NoZWNrcG9pbnQi LAogCQkJCWxvZ19tYWtlX2NoZWNrcG9pbnRfYXQoCkBAIC0yMzExLDYgKzIzMjgsMTQgQEAgZXJy X2V4aXQ6CiAJCQkJdGhyX2dldF90cngodGhyKS0+bXlzcWxfdGhkLAogCQkJCV9fRklMRV9fLCBf X0xJTkVfXyk7CiAJCQlkdHVwbGVfY29udmVydF9iYWNrX2JpZ19yZWMoaW5kZXgsIGVudHJ5LCBi aWdfcmVjKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChlcnIgPT0gREJfU1VDQ0VTUworCQkJICAgICYm IGRpY3RfaW5kZXhfaXNfb25saW5lX2RkbChpbmRleCkpIHsKKwkJCQlyb3dfbG9nX3RhYmxlX2lu c2VydCgKKwkJCQkJaW5zZXJ0X3JlYywgaW5kZXgsIG9mZnNldHMpOworCQkJfQorCisJCQltdHJf Y29tbWl0KCZtdHIpOwogCQl9CiAJfQogCkBAIC0yNTA0LDYgKzI1MjksMTEgQEAgcm93X2luc19p bmRleF9lbnRyeV9iaWdfcmVjX2Z1bmMoCiAJCXJlYywgb2Zmc2V0cywgYmlnX3JlYywgJm10ciwg QlRSX1NUT1JFX0lOU0VSVCk7CiAJREVCVUdfU1lOQ19DX0lGX1RIRCh0aGQsICJhZnRlcl9yb3df aW5zX2V4dGVybiIpOwogCisJaWYgKGVycm9yID09IERCX1NVQ0NFU1MKKwkgICAgJiYgZGljdF9p bmRleF9pc19vbmxpbmVfZGRsKGluZGV4KSkgeworCQlyb3dfbG9nX3RhYmxlX2luc2VydChyZWMs IGluZGV4LCBvZmZzZXRzKTsKKwl9CisKIAltdHJfY29tbWl0KCZtdHIpOwogCiAJcmV0dXJuKGVy cm9yKTsKCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL2lubm9iYXNlL3Jvdy9yb3cwbG9nLmNj JwotLS0gYS9zdG9yYWdlL2lubm9iYXNlL3Jvdy9yb3cwbG9nLmNjCXJldmlkOm1hcmtvLm1ha2Vs YUBvcmFjbGUuY29tLTIwMTIwNTI5MTIzOTUzLXB3bGxqMW9yeW5tN2E2cTkKKysrIGIvc3RvcmFn ZS9pbm5vYmFzZS9yb3cvcm93MGxvZy5jYwlyZXZpZDptYXJrby5tYWtlbGFAb3JhY2xlLmNvbS0y MDEyMDUyOTEzMzMzMC1odnM0cnpiemw2OHN5bW5sCkBAIC0yODEsNiArMjgxLDU1MiBAQCByb3df bG9nX3RhYmxlX2dldF9lcnJvcigKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKK1N0YXJ0cyBsb2dnaW5nIGFuIG9wZXJhdGlv biB0byBhIHRhYmxlIHRoYXQgaXMgYmVpbmcgcmVidWlsdC4KK0ByZXR1cm4gcG9pbnRlciB0byBs b2csIG9yIE5VTEwgaWYgbm8gbG9nZ2luZyBpcyBuZWNlc3NhcnkgKi8KK3N0YXRpYyBfX2F0dHJp YnV0ZV9fKChub25udWxsLCB3YXJuX3VudXNlZF9yZXN1bHQpKQorYnl0ZSoKK3Jvd19sb2dfdGFi bGVfb3BlbigKKy8qPT09PT09PT09PT09PT09Ki8KKwlyb3dfbG9nX3QqCWxvZywJLyohPCBpbi9v dXQ6IG9ubGluZSByZWJ1aWxkIGxvZyAqLworCXVsaW50CQlzaXplLAkvKiE8IGluOiBzaXplIG9m IGxvZyByZWNvcmQgKi8KKwl1bGludCoJCWF2YWlsKQkvKiE8IG91dDogYXZhaWxhYmxlIHNpemUg Zm9yIGxvZyByZWNvcmQgKi8KK3sKKwltdXRleF9lbnRlcigmbG9nLT5tdXRleCk7CisKKwlVTklW X01FTV9JTlZBTElEKGxvZy0+dGFpbC5idWYsIHNpemVvZiBsb2ctPnRhaWwuYnVmKTsKKworCWlm IChsb2ctPmVycm9yICE9IERCX1NVQ0NFU1MpIHsKKwkJbXV0ZXhfZXhpdCgmbG9nLT5tdXRleCk7 CisJCXJldHVybihOVUxMKTsKKwl9CisKKwl1dF9hZChsb2ctPnRhaWwuYnl0ZXMgPCBzcnZfc29y dF9idWZfc2l6ZSk7CisJKmF2YWlsID0gc3J2X3NvcnRfYnVmX3NpemUgLSBsb2ctPnRhaWwuYnl0 ZXM7CisKKwlpZiAoc2l6ZSA+ICphdmFpbCkgeworCQlyZXR1cm4obG9nLT50YWlsLmJ1Zik7CisJ fSBlbHNlIHsKKwkJcmV0dXJuKGxvZy0+dGFpbC5ibG9jayArIGxvZy0+dGFpbC5ieXRlcyk7CisJ fQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLy8qKgorU3RvcHMgbG9nZ2luZyBhbiBvcGVyYXRpb24gdG8gYSB0YWJsZSB0aGF0IGlz IGJlaW5nIHJlYnVpbHQuICovCitzdGF0aWMgX19hdHRyaWJ1dGVfXygobm9ubnVsbCkpCit2b2lk Cityb3dfbG9nX3RhYmxlX2Nsb3NlX2Z1bmMoCisvKj09PT09PT09PT09PT09PT09PT09PSovCisJ cm93X2xvZ190Kglsb2csCS8qITwgaW4vb3V0OiBvbmxpbmUgcmVidWlsZCBsb2cgKi8KKyNpZmRl ZiBVTklWX0RFQlVHCisJY29uc3QgYnl0ZSoJYiwJLyohPCBpbjogZW5kIG9mIGxvZyByZWNvcmQg Ki8KKyNlbmRpZiAvKiBVTklWX0RFQlVHICovCisJdWxpbnQJCXNpemUsCS8qITwgaW46IHNpemUg b2YgbG9nIHJlY29yZCAqLworCXVsaW50CQlhdmFpbCkJLyohPCBpbjogYXZhaWxhYmxlIHNpemUg Zm9yIGxvZyByZWNvcmQgKi8KK3sKKwl1dF9hZChtdXRleF9vd24oJmxvZy0+bXV0ZXgpKTsKKwor CWlmIChzaXplID49IGF2YWlsKSB7CisJCWNvbnN0IG9zX29mZnNldF90CWJ5dGVfb2Zmc2V0CisJ CQk9IChvc19vZmZzZXRfdCkgbG9nLT50YWlsLmJsb2NrcworCQkJKiBzcnZfc29ydF9idWZfc2l6 ZTsKKwkJaWJvb2wJCQlyZXQ7CisKKwkJaWYgKGJ5dGVfb2Zmc2V0ICsgc3J2X3NvcnRfYnVmX3Np emUgPj0gc3J2X29ubGluZV9tYXhfc2l6ZSkgeworCQkJZ290byB3cml0ZV9mYWlsZWQ7CisJCX0K KworCQlpZiAoc2l6ZSA9PSBhdmFpbCkgeworCQkJdXRfYWQoYiA9PSAmbG9nLT50YWlsLmJsb2Nr W3Nydl9zb3J0X2J1Zl9zaXplXSk7CisJCX0gZWxzZSB7CisJCQl1dF9hZChiID09IGxvZy0+dGFp bC5idWYgKyBzaXplKTsKKwkJCW1lbWNweShsb2ctPnRhaWwuYmxvY2sgKyBsb2ctPnRhaWwuYnl0 ZXMsCisJCQkgICAgICAgbG9nLT50YWlsLmJ1ZiwgYXZhaWwpOworCQl9CisJCVVOSVZfTUVNX0FT U0VSVF9SVyhsb2ctPnRhaWwuYmxvY2ssIHNydl9zb3J0X2J1Zl9zaXplKTsKKwkJcmV0ID0gb3Nf ZmlsZV93cml0ZSgKKwkJCSIobW9kaWZpY2F0aW9uIGxvZykiLAorCQkJT1NfRklMRV9GUk9NX0ZE KGxvZy0+ZmQpLAorCQkJbG9nLT50YWlsLmJsb2NrLCBieXRlX29mZnNldCwgc3J2X3NvcnRfYnVm X3NpemUpOworCQlsb2ctPnRhaWwuYmxvY2tzKys7CisJCWlmICghcmV0KSB7Cit3cml0ZV9mYWls ZWQ6CisJCQlsb2ctPmVycm9yID0gREJfT05MSU5FX0xPR19UT09fQklHOworCQl9CisJCVVOSVZf TUVNX0lOVkFMSUQobG9nLT50YWlsLmJsb2NrLCBzcnZfc29ydF9idWZfc2l6ZSk7CisJCW1lbWNw eShsb2ctPnRhaWwuYmxvY2ssIGxvZy0+dGFpbC5idWYgKyBhdmFpbCwgc2l6ZSAtIGF2YWlsKTsK KwkJbG9nLT50YWlsLmJ5dGVzID0gc2l6ZSAtIGF2YWlsOworCX0gZWxzZSB7CisJCWxvZy0+dGFp bC5ieXRlcyArPSBzaXplOworCQl1dF9hZChiID09IGxvZy0+dGFpbC5ibG9jayArIGxvZy0+dGFp bC5ieXRlcyk7CisJfQorCisJVU5JVl9NRU1fSU5WQUxJRChsb2ctPnRhaWwuYnVmLCBzaXplb2Yg bG9nLT50YWlsLmJ1Zik7CisJbXV0ZXhfZXhpdCgmbG9nLT5tdXRleCk7Cit9CisKKyNpZmRlZiBV TklWX0RFQlVHCisjIGRlZmluZSByb3dfbG9nX3RhYmxlX2Nsb3NlKGxvZywgYiwgc2l6ZSwgYXZh aWwpCVwKKwlyb3dfbG9nX3RhYmxlX2Nsb3NlX2Z1bmMobG9nLCBiLCBzaXplLCBhdmFpbCkKKyNl bHNlIC8qIFVOSVZfREVCVUcgKi8KKyMgZGVmaW5lIHJvd19sb2dfdGFibGVfY2xvc2UobG9nLCBi LCBzaXplLCBhdmFpbCkJXAorCXJvd19sb2dfdGFibGVfY2xvc2VfZnVuYyhsb2csIHNpemUsIGF2 YWlsKQorI2VuZGlmIC8qIFVOSVZfREVCVUcgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKK0xvZ3MgYSBkZWxldGUgb3BlcmF0 aW9uIHRvIGEgdGFibGUgdGhhdCBpcyBiZWluZyByZWJ1aWx0LgorVGhpcyB3aWxsIGJlIG1lcmdl ZCBpbiByb3dfbG9nX3RhYmxlX2FwcGx5X2RlbGV0ZSgpLiAqLworVU5JVl9JTlRFUk4KK3ZvaWQK K3Jvd19sb2dfdGFibGVfZGVsZXRlKAorLyo9PT09PT09PT09PT09PT09PSovCisJY29uc3QgcmVj X3QqCXJlYywJLyohPCBpbjogY2x1c3RlcmVkIGluZGV4IGxlYWYgcGFnZSByZWNvcmQsCisJCQkJ cGFnZSBYLWxhdGNoZWQgKi8KKwlkaWN0X2luZGV4X3QqCWluZGV4LAkvKiE8IGluL291dDogY2x1 c3RlcmVkIGluZGV4LCBTLWxhdGNoZWQKKwkJCQlvciBYLWxhdGNoZWQgKi8KKwljb25zdCB1bGlu dCoJb2Zmc2V0cywvKiE8IGluOiByZWNfZ2V0X29mZnNldHMocmVjLGluZGV4KSAqLworCXRyeF9p ZF90CXRyeF9pZCkJLyohPCBpbjogREJfVFJYX0lEIG9mIHRoZSByZWNvcmQgYmVmb3JlCisJCQkJ aXQgd2FzIGRlbGV0ZWQgKi8KK3sKKwl1bGludAkJb2xkX3BrX2V4dHJhX3NpemU7CisJdWxpbnQJ CW9sZF9wa19zaXplOworCXVsaW50CQltcmVjX3NpemU7CisJdWxpbnQJCWF2YWlsX3NpemU7CisJ bWVtX2hlYXBfdCoJaGVhcAkJPSBOVUxMOworCWNvbnN0IGR0dXBsZV90KglvbGRfcGs7CisKKwl1 dF9hZChkaWN0X2luZGV4X2lzX2NsdXN0KGluZGV4KSk7CisJdXRfYWQocmVjX29mZnNfdmFsaWRh dGUocmVjLCBpbmRleCwgb2Zmc2V0cykpOworCXV0X2FkKHJlY19vZmZzX25fZmllbGRzKG9mZnNl dHMpID09IGRpY3RfaW5kZXhfZ2V0X25fZmllbGRzKGluZGV4KSk7CisJdXRfYWQocmVjX29mZnNf c2l6ZShvZmZzZXRzKSA8PSBzaXplb2YgaW5kZXgtPm9ubGluZV9sb2ctPnRhaWwuYnVmKTsKKyNp ZmRlZiBVTklWX1NZTkNfREVCVUcKKwl1dF9hZChyd19sb2NrX293bigmaW5kZXgtPmxvY2ssIFJX X0xPQ0tfU0hBUkVEKQorCSAgICAgIHx8IHJ3X2xvY2tfb3duKCZpbmRleC0+bG9jaywgUldfTE9D S19FWCkpOworI2VuZGlmIC8qIFVOSVZfU1lOQ19ERUJVRyAqLworCisJaWYgKGRpY3RfaW5kZXhf aXNfY29ycnVwdGVkKGluZGV4KQorCSAgICB8fCAhZGljdF9pbmRleF9pc19vbmxpbmVfZGRsKGlu ZGV4KQorCSAgICB8fCBpbmRleC0+b25saW5lX2xvZy0+ZXJyb3IgIT0gREJfU1VDQ0VTUykgewor CQlyZXR1cm47CisJfQorCisJLyogQ3JlYXRlIHRoZSB0dXBsZSBQUklNQVJZIEtFWSwgREJfVFJY X0lEIGluIHRoZSBuZXdfdGFibGUuICovCisJaWYgKGluZGV4LT5vbmxpbmVfbG9nLT5zYW1lX3Br KSB7CisJCWJ5dGUqCQlkYl90cnhfaWQ7CisJCWR0dXBsZV90Kgl0dXBsZTsKKworCQkvKiBUaGUg UFJJTUFSWSBLRVkgYW5kIERCX1RSWF9JRCBhcmUgaW4gdGhlIGZpcnN0CisJCWZpZWxkcyBvZiB0 aGUgcmVjb3JkLiAqLworCQloZWFwID0gbWVtX2hlYXBfY3JlYXRlKERBVEFfVFJYX0lEX0xFTgor CQkJCSAgICAgICArIERUVVBMRV9FU1RfQUxMT0MoaW5kZXgtPm5fdW5pcSArIDEpKTsKKwkJb2xk X3BrID0gdHVwbGUgPSBkdHVwbGVfY3JlYXRlKGhlYXAsIGluZGV4LT5uX3VuaXEgKyAxKTsKKwkJ ZHR1cGxlX3NldF9uX2ZpZWxkc19jbXAodHVwbGUsIGluZGV4LT5uX3VuaXEpOworCQlkaWN0X2lu ZGV4X2NvcHlfdHlwZXModHVwbGUsIGluZGV4LCBpbmRleC0+bl91bmlxICsgMSk7CisKKwkJZm9y ICh1bGludCBpID0gMDsgaSA8IGluZGV4LT5uX3VuaXE7IGkrKykgeworCQkJdWxpbnQJCWxlbjsK KwkJCWNvbnN0IHZvaWQqCWZpZWxkCT0gcmVjX2dldF9udGhfZmllbGQoCisJCQkJcmVjLCBvZmZz ZXRzLCBpLCAmbGVuKTsKKwkJCWRmaWVsZF90KglkZmllbGQJPSBkdHVwbGVfZ2V0X250aF9maWVs ZCgKKwkJCQl0dXBsZSwgaSk7CisJCQl1dF9hZChsZW4gIT0gVU5JVl9TUUxfTlVMTCk7CisJCQl1 dF9hZCghcmVjX29mZnNfbnRoX2V4dGVybihvZmZzZXRzLCBpKSk7CisJCQlkZmllbGRfc2V0X2Rh dGEoZGZpZWxkLCBmaWVsZCwgbGVuKTsKKwkJfQorCisJCWRiX3RyeF9pZCA9IHN0YXRpY19jYXN0 PGJ5dGUqPigKKwkJCW1lbV9oZWFwX2FsbG9jKGhlYXAsIERBVEFfVFJYX0lEX0xFTikpOworCQl0 cnhfd3JpdGVfdHJ4X2lkKGRiX3RyeF9pZCwgdHJ4X2lkKTsKKworCQlkZmllbGRfc2V0X2RhdGEo ZHR1cGxlX2dldF9udGhfZmllbGQodHVwbGUsIGluZGV4LT5uX3VuaXEpLAorCQkJCWRiX3RyeF9p ZCwgREFUQV9UUlhfSURfTEVOKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgUFJJTUFSWSBLRVkgaGFz IGNoYW5nZWQuIFRyYW5zbGF0ZSB0aGUgdHVwbGUuICovCisJCWRpY3RfdGFibGVfdCoJbmV3X3Rh YmxlCisJCQk9IGluZGV4LT5vbmxpbmVfbG9nLT50YWJsZTsKKwkJZGljdF9pbmRleF90KgluZXdf aW5kZXgKKwkJCT0gZGljdF90YWJsZV9nZXRfZmlyc3RfaW5kZXgobmV3X3RhYmxlKTsKKwkJZGZp ZWxkX3QqCWRmaWVsZDsKKworCQlvbGRfcGsgPSByb3dfbG9nX3RhYmxlX2dldF9wayhyZWMsIGlu ZGV4LCBvZmZzZXRzLCAmaGVhcCk7CisJCS8qIFJlbW92ZSBEQl9ST0xMX1BUUi4gKi8KKwkJdXRf YWQoZHR1cGxlX2dldF9uX2ZpZWxkc19jbXAob2xkX3BrKQorCQkgICAgICA9PSBkaWN0X2luZGV4 X2dldF9uX3VuaXF1ZShuZXdfaW5kZXgpKTsKKwkJdXRfYWQoZHR1cGxlX2dldF9uX2ZpZWxkcyhv bGRfcGspCisJCSAgICAgID09IGRpY3RfaW5kZXhfZ2V0X25fdW5pcXVlKG5ld19pbmRleCkgKyAy KTsKKwkJY29uc3RfY2FzdDx1bGludCY+KG9sZF9way0+bl9maWVsZHMpLS07CisKKwkJLyogT3Zl cndyaXRlIERCX1RSWF9JRCB3aXRoIHRoZSBvbGQgdHJ4X2lkLiAqLworCQlkZmllbGQgPSBkdHVw bGVfZ2V0X250aF9maWVsZChvbGRfcGssIG5ld19pbmRleC0+bl91bmlxKTsKKwkJdXRfYWQoZGZp ZWxkX2dldF90eXBlKGRmaWVsZCktPm10eXBlID09IERBVEFfU1lTKTsKKwkJdXRfYWQoZGZpZWxk X2dldF90eXBlKGRmaWVsZCktPnBydHlwZQorCQkgICAgICA9PSAoREFUQV9OT1RfTlVMTCB8IERB VEFfVFJYX0lEKSk7CisJCXV0X2FkKGRmaWVsZF9nZXRfbGVuKGRmaWVsZCkgPT0gREFUQV9UUlhf SURfTEVOKTsKKwkJdHJ4X3dyaXRlX3RyeF9pZChzdGF0aWNfY2FzdDxieXRlKj4oZGZpZWxkLT5k YXRhKSwgdHJ4X2lkKTsKKwl9CisKKwl1dF9hZChkdHVwbGVfZ2V0X25fZmllbGRzKG9sZF9waykg PiAxKTsKKwl1dF9hZChEQVRBX1RSWF9JRF9MRU4gPT0gZHR1cGxlX2dldF9udGhfZmllbGQoCisJ CSAgICAgIG9sZF9waywgb2xkX3BrLT5uX2ZpZWxkcyAtIDEpLT5sZW4pOworCW9sZF9wa19zaXpl ID0gcmVjX2dldF9jb252ZXJ0ZWRfc2l6ZV9jb21wX3ByZWZpeCgKKwkJaW5kZXgsIG9sZF9way0+ ZmllbGRzLCBvbGRfcGstPm5fZmllbGRzLAorCQkwLCAmb2xkX3BrX2V4dHJhX3NpemUpIC0gUkVD X05fTkVXX0VYVFJBX0JZVEVTOworCXV0X2FkKG9sZF9wa19leHRyYV9zaXplID49IFJFQ19OX05F V19FWFRSQV9CWVRFUyk7CisJb2xkX3BrX2V4dHJhX3NpemUgLT0gUkVDX05fTkVXX0VYVFJBX0JZ VEVTOworCXV0X2FkKG9sZF9wa19leHRyYV9zaXplIDwgMHgxMDApOworCisJbXJlY19zaXplID0g MiArIG9sZF9wa19zaXplOworCisJaWYgKGJ5dGUqIGIgPSByb3dfbG9nX3RhYmxlX29wZW4oaW5k ZXgtPm9ubGluZV9sb2csCisJCQkJCSBtcmVjX3NpemUsICZhdmFpbF9zaXplKSkgeworCQkqYisr ID0gUk9XX1RfREVMRVRFOworCQkqYisrID0gb2xkX3BrX2V4dHJhX3NpemU7CisKKwkJcmVjX2Nv bnZlcnRfZHR1cGxlX3RvX3JlY19jb21wKAorCQkJYiArIG9sZF9wa19leHRyYV9zaXplLCAwLCBp bmRleCwKKwkJCVJFQ19TVEFUVVNfT1JESU5BUlksCisJCQlvbGRfcGstPmZpZWxkcywgb2xkX3Br LT5uX2ZpZWxkcywgMCk7CisKKwkJYiArPSBvbGRfcGtfc2l6ZTsKKworCQlyb3dfbG9nX3RhYmxl X2Nsb3NlKAorCQkJaW5kZXgtPm9ubGluZV9sb2csIGIsIG1yZWNfc2l6ZSwgYXZhaWxfc2l6ZSk7 CisJfQorCisJbWVtX2hlYXBfZnJlZShoZWFwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKK0xvZ3MgYW4gdXBkYXRlIHRv IGEgdGFibGUgdGhhdCBpcyBiZWluZyByZWJ1aWx0LgorVGhpcyB3aWxsIGJlIG1lcmdlZCBpbiBy b3dfbG9nX3RhYmxlX2FwcGx5X3VwZGF0ZSgpLiAqLworVU5JVl9JTlRFUk4KK3ZvaWQKK3Jvd19s b2dfdGFibGVfdXBkYXRlKAorLyo9PT09PT09PT09PT09PT09PSovCisJY29uc3QgcmVjX3QqCXJl YywJLyohPCBpbjogY2x1c3RlcmVkIGluZGV4IGxlYWYgcGFnZSByZWNvcmQsCisJCQkJcGFnZSBY LWxhdGNoZWQgKi8KKwlkaWN0X2luZGV4X3QqCWluZGV4LAkvKiE8IGluL291dDogY2x1c3RlcmVk IGluZGV4LCBTLWxhdGNoZWQKKwkJCQlvciBYLWxhdGNoZWQgKi8KKwljb25zdCB1bGludCoJb2Zm c2V0cywvKiE8IGluOiByZWNfZ2V0X29mZnNldHMocmVjLGluZGV4KSAqLworCWNvbnN0IGR0dXBs ZV90KglvbGRfcGspCS8qITwgaW46IHJvd19sb2dfdGFibGVfZ2V0X3BrKCkKKwkJCQliZWZvcmUg dGhlIHVwZGF0ZSAqLworeworCXVsaW50CW9taXRfc2l6ZTsKKwl1bGludAlvbGRfcGtfc2l6ZTsK Kwl1bGludAlvbGRfcGtfZXh0cmFfc2l6ZTsKKwl1bGludAlleHRyYV9zaXplOworCXVsaW50CW1y ZWNfc2l6ZTsKKwl1bGludAlhdmFpbF9zaXplOworCisJdXRfYWQoZGljdF9pbmRleF9pc19jbHVz dChpbmRleCkpOworCXV0X2FkKHJlY19vZmZzX3ZhbGlkYXRlKHJlYywgaW5kZXgsIG9mZnNldHMp KTsKKwl1dF9hZChyZWNfb2Zmc19uX2ZpZWxkcyhvZmZzZXRzKSA9PSBkaWN0X2luZGV4X2dldF9u X2ZpZWxkcyhpbmRleCkpOworCXV0X2FkKHJlY19vZmZzX3NpemUob2Zmc2V0cykgPD0gc2l6ZW9m IGluZGV4LT5vbmxpbmVfbG9nLT50YWlsLmJ1Zik7CisjaWZkZWYgVU5JVl9TWU5DX0RFQlVHCisJ dXRfYWQocndfbG9ja19vd24oJmluZGV4LT5sb2NrLCBSV19MT0NLX1NIQVJFRCkKKwkgICAgICB8 fCByd19sb2NrX293bigmaW5kZXgtPmxvY2ssIFJXX0xPQ0tfRVgpKTsKKyNlbmRpZiAvKiBVTklW X1NZTkNfREVCVUcgKi8KKwl1dF9hZCghb2xkX3BrIHx8IERBVEFfVFJYX0lEX0xFTiA9PSBkdHVw bGVfZ2V0X250aF9maWVsZCgKKwkJICAgICAgb2xkX3BrLCBvbGRfcGstPm5fZmllbGRzIC0gMSkt Pmxlbik7CisKKwlpZiAoZGljdF9pbmRleF9pc19jb3JydXB0ZWQoaW5kZXgpCisJICAgIHx8ICFk aWN0X2luZGV4X2lzX29ubGluZV9kZGwoaW5kZXgpCisJICAgIHx8IGluZGV4LT5vbmxpbmVfbG9n LT5lcnJvciAhPSBEQl9TVUNDRVNTKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAocmVjX29mZnNf Y29tcChvZmZzZXRzKSkgeworCQl1dF9hZChyZWNfZ2V0X3N0YXR1cyhyZWMpID09IFJFQ19TVEFU VVNfT1JESU5BUlkpOworCisJCW9taXRfc2l6ZSA9IFJFQ19OX05FV19FWFRSQV9CWVRFUzsKKwl9 IGVsc2UgeworCQlvbWl0X3NpemUgPSBSRUNfTl9PTERfRVhUUkFfQllURVM7CisJfQorCisJZXh0 cmFfc2l6ZSA9IHJlY19vZmZzX2V4dHJhX3NpemUob2Zmc2V0cykgLSBvbWl0X3NpemU7CisKKwlt cmVjX3NpemUgPSByZWNfb2Zmc19zaXplKG9mZnNldHMpIC0gb21pdF9zaXplCisJCSsgKFJPV19M T0dfSEVBREVSX1NJWkUgKyAxKSArIChleHRyYV9zaXplID49IDB4ODApOworCisJaWYgKGluZGV4 LT5vbmxpbmVfbG9nLT5zYW1lX3BrKSB7CisJCXV0X2FkKCFvbGRfcGspOworCQlvbGRfcGtfZXh0 cmFfc2l6ZSA9IG9sZF9wa19zaXplID0gMDsKKwl9IGVsc2UgeworCQl1dF9hZChvbGRfcGspOwor CQl1dF9hZChkdHVwbGVfZ2V0X25fZmllbGRzKG9sZF9waykgPiAxKTsKKwkJb2xkX3BrX3NpemUg PSByZWNfZ2V0X2NvbnZlcnRlZF9zaXplX2NvbXBfcHJlZml4KAorCQkJaW5kZXgsIG9sZF9way0+ ZmllbGRzLCBvbGRfcGstPm5fZmllbGRzLAorCQkJMCwgJm9sZF9wa19leHRyYV9zaXplKSAtIFJF Q19OX05FV19FWFRSQV9CWVRFUzsKKwkJdXRfYWQob2xkX3BrX2V4dHJhX3NpemUgPj0gUkVDX05f TkVXX0VYVFJBX0JZVEVTKTsKKwkJb2xkX3BrX2V4dHJhX3NpemUgLT0gUkVDX05fTkVXX0VYVFJB X0JZVEVTOworCQl1dF9hZChvbGRfcGtfZXh0cmFfc2l6ZSA8IDB4MTAwKTsKKwkJbXJlY19zaXpl ICs9IDEvKm9sZF9wa19leHRyYV9zaXplKi8gKyBvbGRfcGtfc2l6ZTsKKwl9CisKKwlpZiAoYnl0 ZSogYiA9IHJvd19sb2dfdGFibGVfb3BlbihpbmRleC0+b25saW5lX2xvZywKKwkJCQkJIG1yZWNf c2l6ZSwgJmF2YWlsX3NpemUpKSB7CisJCSpiKysgPSBST1dfVF9VUERBVEU7CisKKwkJaWYgKG9s ZF9wa19leHRyYV9zaXplKSB7CisJCQkqYisrID0gb2xkX3BrX2V4dHJhX3NpemU7CisKKwkJCXJl Y19jb252ZXJ0X2R0dXBsZV90b19yZWNfY29tcCgKKwkJCQliICsgb2xkX3BrX2V4dHJhX3NpemUs IDAsIGluZGV4LAorCQkJCVJFQ19TVEFUVVNfT1JESU5BUlksCisJCQkJb2xkX3BrLT5maWVsZHMs IG9sZF9way0+bl9maWVsZHMsIDApOworCQkJYiArPSBvbGRfcGtfc2l6ZTsKKwkJfQorCisJCWlm IChleHRyYV9zaXplIDwgMHg4MCkgeworCQkJKmIrKyA9IChieXRlKSBleHRyYV9zaXplOworCQl9 IGVsc2UgeworCQkJdXRfYWQoZXh0cmFfc2l6ZSA8IDB4ODAwMCk7CisJCQkqYisrID0gKGJ5dGUp ICgweDgwIHwgKGV4dHJhX3NpemUgPj4gOCkpOworCQkJKmIrKyA9IChieXRlKSBleHRyYV9zaXpl OworCQl9CisKKwkJbWVtY3B5KGIsIHJlYyAtIHJlY19vZmZzX2V4dHJhX3NpemUob2Zmc2V0cyks IGV4dHJhX3NpemUpOworCQliICs9IGV4dHJhX3NpemU7CisJCW1lbWNweShiLCByZWMsIHJlY19v ZmZzX2RhdGFfc2l6ZShvZmZzZXRzKSk7CisJCWIgKz0gcmVjX29mZnNfZGF0YV9zaXplKG9mZnNl dHMpOworCisJCXJvd19sb2dfdGFibGVfY2xvc2UoCisJCQlpbmRleC0+b25saW5lX2xvZywgYiwg bXJlY19zaXplLCBhdmFpbF9zaXplKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCitDb25zdHJ1Y3RzIHRoZSBvbGQg UFJJTUFSWSBLRVkgYW5kIERCX1RSWF9JRCxEQl9ST0xMX1BUUgorb2YgYSB0YWJsZSB0aGF0IGlz IGJlaW5nIHJlYnVpbHQuCitAcmV0dXJuIHR1cGxlIG9mIFBSSU1BUlkgS0VZLERCX1RSWF9JRCxE Ql9ST0xMX1BUUiBpbiB0aGUgcmVidWlsdCB0YWJsZSwKK29yIE5VTEwgaWYgbm90IGJlaW5nIHJl YnVpbHQgb25saW5lIG9yIHRoZSBQUklNQVJZIEtFWSBkZWZpbml0aW9uCitkb2VzIG5vdCBjaGFu Z2UgKi8KK1VOSVZfSU5URVJOCitjb25zdCBkdHVwbGVfdCoKK3Jvd19sb2dfdGFibGVfZ2V0X3Br KAorLyo9PT09PT09PT09PT09PT09PSovCisJY29uc3QgcmVjX3QqCXJlYywJLyohPCBpbjogY2x1 c3RlcmVkIGluZGV4IGxlYWYgcGFnZSByZWNvcmQsCisJCQkJcGFnZSBYLWxhdGNoZWQgKi8KKwlk aWN0X2luZGV4X3QqCWluZGV4LAkvKiE8IGluL291dDogY2x1c3RlcmVkIGluZGV4LCBTLWxhdGNo ZWQKKwkJCQlvciBYLWxhdGNoZWQgKi8KKwljb25zdCB1bGludCoJb2Zmc2V0cywvKiE8IGluOiBy ZWNfZ2V0X29mZnNldHMocmVjLGluZGV4KSAqLworCW1lbV9oZWFwX3QqKgloZWFwKQkvKiE8IGlu L291dDogbWVtb3J5IGhlYXAgd2hlcmUgYWxsb2NhdGVkICovCit7CisJdXRfYWQoZGljdF9pbmRl eF9pc19jbHVzdChpbmRleCkpOworCXV0X2FkKGRpY3RfaW5kZXhfaXNfb25saW5lX2RkbChpbmRl eCkpOworCXV0X2FkKCFvZmZzZXRzIHx8IHJlY19vZmZzX3ZhbGlkYXRlKHJlYywgaW5kZXgsIG9m ZnNldHMpKTsKKyNpZmRlZiBVTklWX1NZTkNfREVCVUcKKwl1dF9hZChyd19sb2NrX293bigmaW5k ZXgtPmxvY2ssIFJXX0xPQ0tfU0hBUkVEKQorCSAgICAgIHx8IHJ3X2xvY2tfb3duKCZpbmRleC0+ bG9jaywgUldfTE9DS19FWCkpOworI2VuZGlmIC8qIFVOSVZfU1lOQ19ERUJVRyAqLworCisJdXRf YWQoaW5kZXgtPm9ubGluZV9sb2cpOworCXV0X2FkKGluZGV4LT5vbmxpbmVfbG9nLT50YWJsZSk7 CisKKwlpZiAoaW5kZXgtPm9ubGluZV9sb2ctPnNhbWVfcGspIHsKKwkJLyogVGhlIFBSSU1BUlkg S0VZIGNvbHVtbnMgYXJlIHVuY2hhbmdlZC4gKi8KKwkJcmV0dXJuKE5VTEwpOworCX0KKworCWR0 dXBsZV90Kgl0dXBsZTsKKworCW11dGV4X2VudGVyKCZpbmRleC0+b25saW5lX2xvZy0+bXV0ZXgp OworCisJLyogaW5kZXgtPm9ubGluZV9sb2ctPmVycm9yIGlzIHByb3RlY3RlZCBieSB0aGUgYWJv dmUgbXV0ZXguICovCisJaWYgKGluZGV4LT5vbmxpbmVfbG9nLT5lcnJvciA9PSBEQl9TVUNDRVNT KSB7CisJCWRpY3RfdGFibGVfdCoJbmV3X3RhYmxlCisJCQk9IGluZGV4LT5vbmxpbmVfbG9nLT50 YWJsZTsKKwkJZGljdF9pbmRleF90KgluZXdfaW5kZXgKKwkJCT0gZGljdF90YWJsZV9nZXRfZmly c3RfaW5kZXgobmV3X3RhYmxlKTsKKwkJY29uc3QgdWxpbnQJbmV3X25fdW5pcQorCQkJPSBkaWN0 X2luZGV4X2dldF9uX3VuaXF1ZShuZXdfaW5kZXgpOworCisJCWlmICghKmhlYXApIHsKKwkJCXVs aW50CXNpemUgPSAwOworCisJCQlpZiAoIW9mZnNldHMpIHsKKwkJCQlzaXplICs9ICgxICsgUkVD X09GRlNfSEVBREVSX1NJWkUKKwkJCQkJICsgaW5kZXgtPm5fZmllbGRzKQorCQkJCQkqIHNpemVv ZiAqb2Zmc2V0czsKKwkJCX0KKworCQkJZm9yICh1bGludCBpID0gMDsgaSA8IG5ld19uX3VuaXE7 IGkrKykgeworCQkJCXNpemUgKz0gZGljdF9jb2xfZ2V0X21pbl9zaXplKAorCQkJCQlkaWN0X2lu ZGV4X2dldF9udGhfY29sKG5ld19pbmRleCwgaSkpOworCQkJfQorCisJCQkqaGVhcCA9IG1lbV9o ZWFwX2NyZWF0ZSgKKwkJCQlEVFVQTEVfRVNUX0FMTE9DKG5ld19uX3VuaXEgKyAyKSArIHNpemUp OworCQl9CisKKwkJaWYgKCFvZmZzZXRzKSB7CisJCQlvZmZzZXRzID0gcmVjX2dldF9vZmZzZXRz KHJlYywgaW5kZXgsIE5VTEwsCisJCQkJCQkgIFVMSU5UX1VOREVGSU5FRCwgaGVhcCk7CisJCX0K KworCQl0dXBsZSA9IGR0dXBsZV9jcmVhdGUoKmhlYXAsIG5ld19uX3VuaXEgKyAyKTsKKwkJZHR1 cGxlX3NldF9uX2ZpZWxkc19jbXAodHVwbGUsIG5ld19uX3VuaXEpOworCQlkaWN0X2luZGV4X2Nv cHlfdHlwZXModHVwbGUsIG5ld19pbmRleCwgbmV3X25fdW5pcSArIDIpOworCisJCWZvciAodWxp bnQgbmV3X2kgPSAwOyBuZXdfaSA8IG5ld19uX3VuaXE7IG5ld19pKyspIHsKKwkJCWRpY3RfZmll bGRfdCoJCWlmaWVsZDsKKwkJCWRmaWVsZF90KgkJZGZpZWxkOworCQkJY29uc3QgZGljdF9jb2xf dCoJbmV3X2NvbDsKKwkJCWNvbnN0IGRpY3RfY29sX3QqCWNvbDsKKwkJCXVsaW50CQkJaTsKKwkJ CXVsaW50CQkJbGVuOworCQkJY29uc3QgYnl0ZSoJCWZpZWxkOworCisJCQlkZmllbGQgPSBkdHVw bGVfZ2V0X250aF9maWVsZCh0dXBsZSwgbmV3X2kpOworCQkJaWZpZWxkID0gZGljdF9pbmRleF9n ZXRfbnRoX2ZpZWxkKG5ld19pbmRleCwgbmV3X2kpOworCQkJbmV3X2NvbCA9IGRpY3RfZmllbGRf Z2V0X2NvbChpZmllbGQpOworCisJCQkvKiBUT0RPOiBzdXBwb3J0IEFERCBDT0xVTU4sIERST1Ag Q09MVU1OLAorCQkJcmVvcmRlcmluZyBjb2x1bW5zICovCisJCQljb2wgPSBkaWN0X3RhYmxlX2dl dF9udGhfY29sKAorCQkJCWluZGV4LT50YWJsZSwgbmV3X2NvbC0+aW5kKTsKKworCQkJaSA9IGRp Y3RfY29sX2dldF9jbHVzdF9wb3MoY29sLCBpbmRleCk7CisKKwkJCWlmIChpID09IFVMSU5UX1VO REVGSU5FRCkgeworCQkJCXV0X2FkKDApOworCQkJCW5ld19pbmRleC0+b25saW5lX2xvZy0+ZXJy b3IgPSBEQl9DT1JSVVBUSU9OOworCQkJCXR1cGxlID0gTlVMTDsKKwkJCQlnb3RvIGZ1bmNfZXhp dDsKKwkJCX0KKworCQkJZmllbGQgPSByZWNfZ2V0X250aF9maWVsZChyZWMsIG9mZnNldHMsIGks ICZsZW4pOworCisJCQlpZiAobGVuID09IFVOSVZfU1FMX05VTEwpIHsKKwkJCQluZXdfaW5kZXgt Pm9ubGluZV9sb2ctPmVycm9yCisJCQkJCT0gREJfUFJJTUFSWV9LRVlfSVNfTlVMTDsKKwkJCQl0 dXBsZSA9IE5VTEw7CisJCQkJZ290byBmdW5jX2V4aXQ7CisJCQl9CisKKwkJCWlmIChyZWNfb2Zm c19udGhfZXh0ZXJuKG9mZnNldHMsIGkpKSB7CisJCQkJdWxpbnQJCWZpZWxkX2xlbiA9IGlmaWVs ZC0+cHJlZml4X2xlbjsKKwkJCQlieXRlKgkJYmxvYl9maWVsZDsKKwkJCQljb25zdCB1bGludAlt YXhfbGVuID0KKwkJCQkJRElDVF9NQVhfRklFTERfTEVOX0JZX0ZPUk1BVCgKKwkJCQkJCW5ld190 YWJsZSk7CisKKwkJCQlpZiAoIWZpZWxkX2xlbikgeworCQkJCQlmaWVsZF9sZW4gPSBpZmllbGQt PmZpeGVkX2xlbjsKKwkJCQkJaWYgKCFmaWVsZF9sZW4pIHsKKwkJCQkJCWZpZWxkX2xlbiA9IG1h eF9sZW4gKyAxOworCQkJCQl9CisJCQkJfQorCisJCQkJYmxvYl9maWVsZCA9IHN0YXRpY19jYXN0 PGJ5dGUqPigKKwkJCQkJbWVtX2hlYXBfYWxsb2MoKmhlYXAsIGZpZWxkX2xlbikpOworCisJCQkJ bGVuID0gYnRyX2NvcHlfZXh0ZXJuYWxseV9zdG9yZWRfZmllbGRfcHJlZml4KAorCQkJCQlibG9i X2ZpZWxkLCBmaWVsZF9sZW4sCisJCQkJCWRpY3RfdGFibGVfemlwX3NpemUoaW5kZXgtPnRhYmxl KSwKKwkJCQkJZmllbGQsIGxlbik7CisJCQkJaWYgKGxlbiA9PSBtYXhfbGVuICsgMSkgeworCQkJ CQluZXdfaW5kZXgtPm9ubGluZV9sb2ctPmVycm9yCisJCQkJCQk9IERCX1RPT19CSUdfSU5ERVhf Q09MOworCQkJCQl0dXBsZSA9IE5VTEw7CisJCQkJCWdvdG8gZnVuY19leGl0OworCQkJCX0KKwor CQkJCWRmaWVsZF9zZXRfZGF0YShkZmllbGQsIGJsb2JfZmllbGQsIGxlbik7CisJCQl9IGVsc2Ug eworCQkJCWlmIChpZmllbGQtPnByZWZpeF9sZW4KKwkJCQkgICAgJiYgaWZpZWxkLT5wcmVmaXhf bGVuIDwgbGVuKSB7CisJCQkJCWxlbiA9IGlmaWVsZC0+cHJlZml4X2xlbjsKKwkJCQl9CisKKwkJ CQlkZmllbGRfc2V0X2RhdGEoCisJCQkJCWRmaWVsZCwKKwkJCQkJbWVtX2hlYXBfZHVwKCpoZWFw LCBmaWVsZCwgbGVuKSwgbGVuKTsKKwkJCX0KKwkJfQorCisJCWNvbnN0IGJ5dGUqIHRyeF9yb2xs ID0gcmVjCisJCQkrIHJvd19nZXRfdHJ4X2lkX29mZnNldChpbmRleCwgb2Zmc2V0cyk7CisKKwkJ ZGZpZWxkX3NldF9kYXRhKGR0dXBsZV9nZXRfbnRoX2ZpZWxkKHR1cGxlLCBuZXdfbl91bmlxKSwK KwkJCQl0cnhfcm9sbCwgREFUQV9UUlhfSURfTEVOKTsKKwkJZGZpZWxkX3NldF9kYXRhKGR0dXBs ZV9nZXRfbnRoX2ZpZWxkKHR1cGxlLCBuZXdfbl91bmlxICsgMSksCisJCQkJdHJ4X3JvbGwgKyBE QVRBX1RSWF9JRF9MRU4sIERBVEFfUk9MTF9QVFJfTEVOKTsKKwl9CisKK2Z1bmNfZXhpdDoKKwlt dXRleF9leGl0KCZpbmRleC0+b25saW5lX2xvZy0+bXV0ZXgpOworCXJldHVybih0dXBsZSk7Cit9 CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovLyoqCitMb2dzIGFuIGluc2VydCB0byBhIHRhYmxlIHRoYXQgaXMgYmVpbmcgcmVidWlsdC4K K1RoaXMgd2lsbCBiZSBtZXJnZWQgaW4gcm93X2xvZ190YWJsZV9hcHBseV9pbnNlcnQoKS4gKi8K K1VOSVZfSU5URVJOCit2b2lkCityb3dfbG9nX3RhYmxlX2luc2VydCgKKy8qPT09PT09PT09PT09 PT09PT0qLworCWNvbnN0IHJlY190KglyZWMsCS8qITwgaW46IGNsdXN0ZXJlZCBpbmRleCBsZWFm IHBhZ2UgcmVjb3JkLAorCQkJCXBhZ2UgWC1sYXRjaGVkICovCisJZGljdF9pbmRleF90KglpbmRl eCwJLyohPCBpbi9vdXQ6IGNsdXN0ZXJlZCBpbmRleCwgUy1sYXRjaGVkCisJCQkJb3IgWC1sYXRj aGVkICovCisJY29uc3QgdWxpbnQqCW9mZnNldHMpLyohPCBpbjogcmVjX2dldF9vZmZzZXRzKHJl YyxpbmRleCkgKi8KK3sKKwl1bGludAlvbWl0X3NpemU7CisJdWxpbnQJZXh0cmFfc2l6ZTsKKwl1 bGludAltcmVjX3NpemU7CisJdWxpbnQJYXZhaWxfc2l6ZTsKKworCXV0X2FkKGRpY3RfaW5kZXhf aXNfY2x1c3QoaW5kZXgpKTsKKwl1dF9hZChyZWNfb2Zmc192YWxpZGF0ZShyZWMsIGluZGV4LCBv ZmZzZXRzKSk7CisJdXRfYWQocmVjX29mZnNfbl9maWVsZHMob2Zmc2V0cykgPT0gZGljdF9pbmRl eF9nZXRfbl9maWVsZHMoaW5kZXgpKTsKKwl1dF9hZChyZWNfb2Zmc19zaXplKG9mZnNldHMpIDw9 IHNpemVvZiBpbmRleC0+b25saW5lX2xvZy0+dGFpbC5idWYpOworI2lmZGVmIFVOSVZfU1lOQ19E RUJVRworCXV0X2FkKHJ3X2xvY2tfb3duKCZpbmRleC0+bG9jaywgUldfTE9DS19TSEFSRUQpCisJ ICAgICAgfHwgcndfbG9ja19vd24oJmluZGV4LT5sb2NrLCBSV19MT0NLX0VYKSk7CisjZW5kaWYg LyogVU5JVl9TWU5DX0RFQlVHICovCisKKwlpZiAoZGljdF9pbmRleF9pc19jb3JydXB0ZWQoaW5k ZXgpCisJICAgIHx8ICFkaWN0X2luZGV4X2lzX29ubGluZV9kZGwoaW5kZXgpCisJICAgIHx8IGlu ZGV4LT5vbmxpbmVfbG9nLT5lcnJvciAhPSBEQl9TVUNDRVNTKSB7CisJCXJldHVybjsKKwl9CisK KwlpZiAocmVjX29mZnNfY29tcChvZmZzZXRzKSkgeworCQl1dF9hZChyZWNfZ2V0X3N0YXR1cyhy ZWMpID09IFJFQ19TVEFUVVNfT1JESU5BUlkpOworCisJCW9taXRfc2l6ZSA9IFJFQ19OX05FV19F WFRSQV9CWVRFUzsKKwl9IGVsc2UgeworCQlvbWl0X3NpemUgPSBSRUNfTl9PTERfRVhUUkFfQllU RVM7CisJfQorCisJZXh0cmFfc2l6ZSA9IHJlY19vZmZzX2V4dHJhX3NpemUob2Zmc2V0cykgLSBv bWl0X3NpemU7CisKKwltcmVjX3NpemUgPSByZWNfb2Zmc19zaXplKG9mZnNldHMpIC0gb21pdF9z aXplCisJCSsgUk9XX0xPR19IRUFERVJfU0laRSArIChleHRyYV9zaXplID49IDB4ODApOworCisJ aWYgKGJ5dGUqIGIgPSByb3dfbG9nX3RhYmxlX29wZW4oaW5kZXgtPm9ubGluZV9sb2csCisJCQkJ CSBtcmVjX3NpemUsICZhdmFpbF9zaXplKSkgeworCQkqYisrID0gUk9XX1RfSU5TRVJUOworCisJ CWlmIChleHRyYV9zaXplIDwgMHg4MCkgeworCQkJKmIrKyA9IChieXRlKSBleHRyYV9zaXplOwor CQl9IGVsc2UgeworCQkJdXRfYWQoZXh0cmFfc2l6ZSA8IDB4ODAwMCk7CisJCQkqYisrID0gKGJ5 dGUpICgweDgwIHwgKGV4dHJhX3NpemUgPj4gOCkpOworCQkJKmIrKyA9IChieXRlKSBleHRyYV9z aXplOworCQl9CisKKwkJbWVtY3B5KGIsIHJlYyAtIHJlY19vZmZzX2V4dHJhX3NpemUob2Zmc2V0 cyksIGV4dHJhX3NpemUpOworCQliICs9IGV4dHJhX3NpemU7CisJCW1lbWNweShiLCByZWMsIHJl Y19vZmZzX2RhdGFfc2l6ZShvZmZzZXRzKSk7CisJCWIgKz0gcmVjX29mZnNfZGF0YV9zaXplKG9m ZnNldHMpOworCisJCXJvd19sb2dfdGFibGVfY2xvc2UoCisJCQlpbmRleC0+b25saW5lX2xvZywg YiwgbXJlY19zaXplLCBhdmFpbF9zaXplKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCiBOb3RlcyB0aGF0IGEgdHJh bnNhY3Rpb24gaXMgYmVpbmcgcm9sbGVkIGJhY2suICovCiBVTklWX0lOVEVSTgogdm9pZApAQCAt OTY5LDEwICsxNTE1LDkgQEAgYWxsX2RvbmU6CiAJCW9mcyA9IChvc19vZmZzZXRfdCkgaW5kZXgt Pm9ubGluZV9sb2ctPmhlYWQuYmxvY2tzCiAJCQkqIHNydl9zb3J0X2J1Zl9zaXplOwogCi0JCWlm IChoYXNfaW5kZXhfbG9jaykgewotCQkJaGFzX2luZGV4X2xvY2sgPSBmYWxzZTsKLQkJCXJ3X2xv Y2tfeF91bmxvY2soZGljdF9pbmRleF9nZXRfbG9jayhpbmRleCkpOwotCQl9CisJCXV0X2FkKGhh c19pbmRleF9sb2NrKTsKKwkJaGFzX2luZGV4X2xvY2sgPSBmYWxzZTsKKwkJcndfbG9ja194X3Vu bG9jayhkaWN0X2luZGV4X2dldF9sb2NrKGluZGV4KSk7CiAKIAkJbG9nX2ZyZWVfY2hlY2soKTsK IApAQCAtMTA4Myw3ICsxNjI4LDcgQEAgYWxsX2RvbmU6CiAJCWlmICghaGFzX2luZGV4X2xvY2sp IHsKIAkJCS8qIFdlIGFyZSBhcHBseWluZyBvcGVyYXRpb25zIGZyb20gYSBkaWZmZXJlbnQKIAkJ CWJsb2NrIHRoYW4gdGhlIG9uZSB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gdG8uCi0JCQlSZWxlYXNl IGFuZCByZWFjcXVpcmUgaW5kZXgtPmxvY2sgaW4gb3JkZXIgdG8KKwkJCVdlIGRvIG5vdCBob2xk IGluZGV4LT5sb2NrIGluIG9yZGVyIHRvCiAJCQlhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGNvbmN1 cnJlbnRseSBidWZmZXIKIAkJCW1vZGlmaWNhdGlvbnMuICovCiAJCQl1dF9hZChtcmVjID49IGlu ZGV4LT5vbmxpbmVfbG9nLT5oZWFkLmJsb2NrKTsKCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdl L2lubm9iYXNlL3Jvdy9yb3cwdWlucy5jYycKLS0tIGEvc3RvcmFnZS9pbm5vYmFzZS9yb3cvcm93 MHVpbnMuY2MJcmV2aWQ6bWFya28ubWFrZWxhQG9yYWNsZS5jb20tMjAxMjA1MjkxMjM5NTMtcHds bGoxb3J5bm03YTZxOQorKysgYi9zdG9yYWdlL2lubm9iYXNlL3Jvdy9yb3cwdWlucy5jYwlyZXZp ZDptYXJrby5tYWtlbGFAb3JhY2xlLmNvbS0yMDEyMDUyOTEzMzMzMC1odnM0cnpiemw2OHN5bW5s CkBAIC03MCwyMCArNzAsNTUgQEAgcm93X3VuZG9faW5zX3JlbW92ZV9jbHVzdF9yZWMoCiAJYnRy X2N1cl90KglidHJfY3VyOwogCWlib29sCQlzdWNjZXNzOwogCWRiZXJyX3QJCWVycjsKLQl1bGlu dAkJbl90cmllcwkJPSAwOworCXVsaW50CQluX3RyaWVzCT0gMDsKIAltdHJfdAkJbXRyOworCWRp Y3RfaW5kZXhfdCoJaW5kZXgJPSBub2RlLT5wY3VyLmJ0cl9jdXIuaW5kZXg7CisJYm9vbAkJb25s aW5lOworCisJdXRfYWQoZGljdF9pbmRleF9pc19jbHVzdChpbmRleCkpOwogCiAJbXRyX3N0YXJ0 KCZtdHIpOwogCi0Jc3VjY2VzcyA9IGJ0cl9wY3VyX3Jlc3RvcmVfcG9zaXRpb24oQlRSX01PRElG WV9MRUFGLCAmKG5vZGUtPnBjdXIpLAotCQkJCQkgICAgJm10cik7CisJLyogVGhpcyBpcyBzaW1p bGFyIHRvIHJvd191bmRvX21vZF9jbHVzdCgpLiBFdmVuIHRob3VnaCB3ZQorCWNhbGwgcm93X2xv Z190YWJsZV9yb2xsYmFjaygpIGVsc2V3aGVyZSwgdGhlIERETCB0aHJlYWQgbWF5CisJYWxyZWFk eSBoYXZlIGNvcGllZCB0aGlzIHJvdyB0byB0aGUgc29ydCBidWZmZXJzIG9yIHRvIHRoZSBuZXcK Kwl0YWJsZS4gV2UgbXVzdCBsb2cgdGhlIHJlbW92YWwsIHNvIHRoYXQgdGhlIHJvdyB3aWxsIGJl CisJY29ycmVjdGx5IHB1cmdlZC4gSG93ZXZlciwgd2UgY2FuIGxvZyB0aGUgcmVtb3ZhbCBvdXQg b2Ygc3luYworCXdpdGggdGhlIEItdHJlZSBtb2RpZmljYXRpb24uICovCisKKwlvbmxpbmUgPSBk aWN0X2luZGV4X2lzX29ubGluZV9kZGwoaW5kZXgpOworCWlmIChvbmxpbmUpIHsKKwkJdXRfYWQo bm9kZS0+dHJ4LT5kaWN0X29wZXJhdGlvbl9sb2NrX21vZGUKKwkJICAgICAgIT0gUldfWF9MQVRD SCk7CisJCXV0X2FkKG5vZGUtPnRhYmxlLT5pZCAhPSBESUNUX0lOREVYRVNfSUQpOworCQltdHJf c19sb2NrKGRpY3RfaW5kZXhfZ2V0X2xvY2soaW5kZXgpLCAmbXRyKTsKKwl9CisKKwlzdWNjZXNz ID0gYnRyX3BjdXJfcmVzdG9yZV9wb3NpdGlvbigKKwkJb25saW5lCisJCT8gQlRSX01PRElGWV9M RUFGIHwgQlRSX0FMUkVBRFlfU19MQVRDSEVECisJCTogQlRSX01PRElGWV9MRUFGLCAmbm9kZS0+ cGN1ciwgJm10cik7CiAJdXRfYShzdWNjZXNzKTsKIAotCXV0X2FkKHJlY19nZXRfdHJ4X2lkKGJ0 cl9wY3VyX2dldF9yZWMoJm5vZGUtPnBjdXIpLAotCQkJICAgICBub2RlLT5wY3VyLmJ0cl9jdXIu aW5kZXgpCisJYnRyX2N1ciA9IGJ0cl9wY3VyX2dldF9idHJfY3VyKCZub2RlLT5wY3VyKTsKKwor CXV0X2FkKHJlY19nZXRfdHJ4X2lkKGJ0cl9jdXJfZ2V0X3JlYyhidHJfY3VyKSwgYnRyX2N1ci0+ aW5kZXgpCiAJICAgICAgPT0gbm9kZS0+dHJ4LT5pZCk7CiAKKwlpZiAob25saW5lICYmIGRpY3Rf aW5kZXhfaXNfb25saW5lX2RkbChpbmRleCkpIHsKKwkJY29uc3QgcmVjX3QqCXJlYwk9IGJ0cl9j dXJfZ2V0X3JlYyhidHJfY3VyKTsKKwkJbWVtX2hlYXBfdCoJaGVhcAk9IE5VTEw7CisJCWNvbnN0 IHVsaW50KglvZmZzZXRzCT0gcmVjX2dldF9vZmZzZXRzKAorCQkJcmVjLCBpbmRleCwgTlVMTCwg VUxJTlRfVU5ERUZJTkVELCAmaGVhcCk7CisJCXJvd19sb2dfdGFibGVfZGVsZXRlKAorCQkJcmVj LCBpbmRleCwgb2Zmc2V0cywKKwkJCXRyeF9yZWFkX3RyeF9pZChyb3dfZ2V0X3RyeF9pZF9vZmZz ZXQoaW5kZXgsIG9mZnNldHMpCisJCQkJCSsgcmVjKSk7CisJCW1lbV9oZWFwX2ZyZWUoaGVhcCk7 CisJfQorCiAJaWYgKG5vZGUtPnRhYmxlLT5pZCA9PSBESUNUX0lOREVYRVNfSUQpIHsKKwkJdXRf YWQoIW9ubGluZSk7CiAJCXV0X2FkKG5vZGUtPnRyeC0+ZGljdF9vcGVyYXRpb25fbG9ja19tb2Rl ID09IFJXX1hfTEFUQ0gpOwogCiAJCS8qIERyb3AgdGhlIGluZGV4IHRyZWUgYXNzb2NpYXRlZCB3 aXRoIHRoZSByb3cgaW4KQEAgLTk1LDEzICsxMzAsMTEgQEAgcm93X3VuZG9faW5zX3JlbW92ZV9j bHVzdF9yZWMoCiAKIAkJbXRyX3N0YXJ0KCZtdHIpOwogCi0JCXN1Y2Nlc3MgPSBidHJfcGN1cl9y ZXN0b3JlX3Bvc2l0aW9uKEJUUl9NT0RJRllfTEVBRiwKLQkJCQkJCSAgICAmKG5vZGUtPnBjdXIp LCAmbXRyKTsKKwkJc3VjY2VzcyA9IGJ0cl9wY3VyX3Jlc3RvcmVfcG9zaXRpb24oCisJCQlCVFJf TU9ESUZZX0xFQUYsICZub2RlLT5wY3VyLCAmbXRyKTsKIAkJdXRfYShzdWNjZXNzKTsKIAl9CiAK LQlidHJfY3VyID0gYnRyX3BjdXJfZ2V0X2J0cl9jdXIoJihub2RlLT5wY3VyKSk7Ci0KIAlpZiAo YnRyX2N1cl9vcHRpbWlzdGljX2RlbGV0ZShidHJfY3VyLCAwLCAmbXRyKSkgewogCQllcnIgPSBE Ql9TVUNDRVNTOwogCQlnb3RvIGZ1bmNfZXhpdDsKCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdl L2lubm9iYXNlL3Jvdy9yb3cwdW1vZC5jYycKLS0tIGEvc3RvcmFnZS9pbm5vYmFzZS9yb3cvcm93 MHVtb2QuY2MJcmV2aWQ6bWFya28ubWFrZWxhQG9yYWNsZS5jb20tMjAxMjA1MjkxMjM5NTMtcHds bGoxb3J5bm03YTZxOQorKysgYi9zdG9yYWdlL2lubm9iYXNlL3Jvdy9yb3cwdW1vZC5jYwlyZXZp ZDptYXJrby5tYWtlbGFAb3JhY2xlLmNvbS0yMDEyMDUyOTEzMzMzMC1odnM0cnpiemw2OHN5bW5s CkBAIC0xMTEsNiArMTExLDEwIEBAIHJvd191bmRvX21vZF9jbHVzdF9sb3coCiAJbWVtX2hlYXBf dCoqCW9mZnNldHNfaGVhcCwKIAkJCQkvKiE8IGluL291dDogbWVtb3J5IGhlYXAgdGhhdCBjYW4g YmUgZW1wdGllZCAqLwogCW1lbV9oZWFwX3QqCWhlYXAsCS8qITwgaW4vb3V0OiBtZW1vcnkgaGVh cCAqLworCWNvbnN0IGR0dXBsZV90KipyZWJ1aWx0X29sZF9waywKKwkJCQkvKiE8IG91dDogcm93 X2xvZ190YWJsZV9nZXRfcGsoKQorCQkJCWJlZm9yZSB0aGUgdXBkYXRlLCBvciBOVUxMIGlmCisJ CQkJdGhlIHRhYmxlIGlzIG5vdCBiZWluZyByZWJ1aWx0IG9ubGluZSAqLwogCXF1ZV90aHJfdCoJ dGhyLAkvKiE8IGluOiBxdWVyeSB0aHJlYWQgKi8KIAltdHJfdCoJCW10ciwJLyohPCBpbjogbXRy OyBtdXN0IGJlIGNvbW1pdHRlZCBiZWZvcmUKIAkJCQlsYXRjaGluZyBhbnkgZnVydGhlciBwYWdl cyAqLwpAQCAtMTMyLDEyICsxMzYsMjIgQEAgcm93X3VuZG9fbW9kX2NsdXN0X2xvdygKIAlidHJf cGN1cl9yZXN0b3JlX3Bvc2l0aW9uKG1vZGUsIHBjdXIsIG10cik7CiAKIAl1dF9hZChzdWNjZXNz KTsKLQogCXV0X2FkKHJlY19nZXRfdHJ4X2lkKGJ0cl9jdXJfZ2V0X3JlYyhidHJfY3VyKSwKIAkJ CSAgICAgYnRyX2N1cl9nZXRfaW5kZXgoYnRyX2N1cikpCiAJICAgICAgPT0gdGhyX2dldF90cngo dGhyKS0+aWQpOwogCi0JaWYgKG1vZGUgPT0gQlRSX01PRElGWV9MRUFGKSB7CisJaWYgKG1vZGUg IT0gQlRSX01PRElGWV9MRUFGCisJICAgICYmIGRpY3RfaW5kZXhfaXNfb25saW5lX2RkbChidHJf Y3VyX2dldF9pbmRleChidHJfY3VyKSkpIHsKKwkJKnJlYnVpbHRfb2xkX3BrID0gcm93X2xvZ190 YWJsZV9nZXRfcGsoCisJCQlidHJfY3VyX2dldF9yZWMoYnRyX2N1ciksCisJCQlidHJfY3VyX2dl dF9pbmRleChidHJfY3VyKSwgTlVMTCwgJmhlYXApOworCX0gZWxzZSB7CisJCSpyZWJ1aWx0X29s ZF9wayA9IE5VTEw7CisJfQorCisJaWYgKG1vZGUgIT0gQlRSX01PRElGWV9UUkVFKSB7CisJCXV0 X2FkKChtb2RlICYgfkJUUl9BTFJFQURZX1NfTEFUQ0hFRCkgPT0gQlRSX01PRElGWV9MRUFGKTsK KwogCQllcnIgPSBidHJfY3VyX29wdGltaXN0aWNfdXBkYXRlKAogCQkJQlRSX05PX0xPQ0tJTkdf RkxBRyB8IEJUUl9OT19VTkRPX0xPR19GTEFHCiAJCQl8IEJUUl9LRUVQX1NZU19GTEFHLApAQCAt MTQ3LDggKzE2MSw2IEBAIHJvd191bmRvX21vZF9jbHVzdF9sb3coCiAJfSBlbHNlIHsKIAkJYmln X3JlY190KglkdW1teV9iaWdfcmVjOwogCi0JCXV0X2FkKG1vZGUgPT0gQlRSX01PRElGWV9UUkVF KTsKLQogCQllcnIgPSBidHJfY3VyX3Blc3NpbWlzdGljX3VwZGF0ZSgKIAkJCUJUUl9OT19MT0NL SU5HX0ZMQUcKIAkJCXwgQlRSX05PX1VORE9fTE9HX0ZMQUcKQEAgLTIzOCwxMSArMjUwLDE4IEBA IHJvd191bmRvX21vZF9jbHVzdCgKIAlidHJfcGN1cl90KglwY3VyOwogCW10cl90CQltdHI7CiAJ ZGJlcnJfdAkJZXJyOworCWRpY3RfaW5kZXhfdCoJaW5kZXg7CisJYm9vbAkJb25saW5lOwogCWli b29sCQlzdWNjZXNzOwogCWlib29sCQltb3JlX3ZlcnM7CiAJdW5kb19ub190CW5ld191bmRvX25v OwogCi0JdXRfYWQobm9kZSAmJiB0aHIpOworCXV0X2FkKHRocl9nZXRfdHJ4KHRocikgPT0gbm9k ZS0+dHJ4KTsKKwl1dF9hZChub2RlLT50cngtPmRpY3Rfb3BlcmF0aW9uX2xvY2tfbW9kZSk7Cisj aWZkZWYgVU5JVl9TWU5DX0RFQlVHCisJdXRfYWQocndfbG9ja19vd24oJmRpY3Rfb3BlcmF0aW9u X2xvY2ssIFJXX0xPQ0tfU0hBUkVEKQorCSAgICAgIHx8IHJ3X2xvY2tfb3duKCZkaWN0X29wZXJh dGlvbl9sb2NrLCBSV19MT0NLX0VYKSk7CisjZW5kaWYgLyogVU5JVl9TWU5DX0RFQlVHICovCiAK IAlsb2dfZnJlZV9jaGVjaygpOwogCkBAIC0yNTEsMTkgKzI3MCwzMSBAQCByb3dfdW5kb19tb2Rf Y2x1c3QoCiAKIAltb3JlX3ZlcnMgPSByb3dfdW5kb19tb2RfdW5kb19hbHNvX3ByZXZfdmVycyhu b2RlLCAmbmV3X3VuZG9fbm8pOwogCi0JcGN1ciA9ICYobm9kZS0+cGN1cik7CisJcGN1ciA9ICZu b2RlLT5wY3VyOworCisJaW5kZXggPSBidHJfY3VyX2dldF9pbmRleChidHJfcGN1cl9nZXRfYnRy X2N1cihwY3VyKSk7CiAKIAltdHJfc3RhcnQoJm10cik7CiAKKwlvbmxpbmUgPSBkaWN0X2luZGV4 X2lzX29ubGluZV9kZGwoaW5kZXgpOworCWlmIChvbmxpbmUpIHsKKwkJdXRfYWQobm9kZS0+dHJ4 LT5kaWN0X29wZXJhdGlvbl9sb2NrX21vZGUgIT0gUldfWF9MQVRDSCk7CisJCW10cl9zX2xvY2so ZGljdF9pbmRleF9nZXRfbG9jayhpbmRleCksICZtdHIpOworCX0KKwogCW1lbV9oZWFwX3QqCWhl YXAJCT0gbWVtX2hlYXBfY3JlYXRlKDEwMjQpOwogCW1lbV9oZWFwX3QqCW9mZnNldHNfaGVhcAk9 IE5VTEw7CiAJdWxpbnQqCQlvZmZzZXRzCQk9IE5VTEw7CisJY29uc3QgZHR1cGxlX3QqCXJlYnVp bHRfb2xkX3BrOwogCiAJLyogVHJ5IG9wdGltaXN0aWMgcHJvY2Vzc2luZyBvZiB0aGUgcmVjb3Jk LCBrZWVwaW5nIGNoYW5nZXMgd2l0aGluCiAJdGhlIGluZGV4IHBhZ2UgKi8KIAogCWVyciA9IHJv d191bmRvX21vZF9jbHVzdF9sb3cobm9kZSwgJm9mZnNldHMsICZvZmZzZXRzX2hlYXAsCi0JCQkJ ICAgICBoZWFwLCB0aHIsICZtdHIsIEJUUl9NT0RJRllfTEVBRik7CisJCQkJICAgICBoZWFwLCAm cmVidWlsdF9vbGRfcGssCisJCQkJICAgICB0aHIsICZtdHIsIG9ubGluZQorCQkJCSAgICAgPyBC VFJfTU9ESUZZX0xFQUYgfCBCVFJfQUxSRUFEWV9TX0xBVENIRUQKKwkJCQkgICAgIDogQlRSX01P RElGWV9MRUFGKTsKIAogCWlmIChlcnIgIT0gREJfU1VDQ0VTUykgewogCQlidHJfcGN1cl9jb21t aXRfc3BlY2lmeV9tdHIocGN1ciwgJm10cik7CkBAIC0yNzQsMTcgKzMwNSw1MCBAQCByb3dfdW5k b19tb2RfY2x1c3QoCiAJCW10cl9zdGFydCgmbXRyKTsKIAogCQllcnIgPSByb3dfdW5kb19tb2Rf Y2x1c3RfbG93KAotCQkJbm9kZSwgJm9mZnNldHMsICZvZmZzZXRzX2hlYXAsIGhlYXAsIHRociwg Jm10ciwKLQkJCUJUUl9NT0RJRllfVFJFRSk7CisJCQlub2RlLCAmb2Zmc2V0cywgJm9mZnNldHNf aGVhcCwgaGVhcCwgJnJlYnVpbHRfb2xkX3BrLAorCQkJdGhyLCAmbXRyLCBCVFJfTU9ESUZZX1RS RUUpOwogCQl1dF9hZChlcnIgPT0gREJfU1VDQ0VTUyB8fCBlcnIgPT0gREJfT1VUX09GX0ZJTEVf U1BBQ0UpOwogCX0KIAorCS8qIE9ubGluZSByZWJ1aWxkIGNhbm5vdCBiZSBpbml0aWF0ZWQgd2hp bGUgd2UgYXJlIGhvbGRpbmcKKwlkaWN0X29wZXJhdGlvbl9sb2NrIGFuZCBpbmRleC0+bG9jay4g KEl0IGNhbiBiZSBhYm9ydGVkLikgKi8KKwl1dF9hZChvbmxpbmUgfHwgIWRpY3RfaW5kZXhfaXNf b25saW5lX2RkbChpbmRleCkpOworCisJaWYgKGVyciA9PSBEQl9TVUNDRVNTICYmIG9ubGluZSkg eworI2lmZGVmIFVOSVZfU1lOQ19ERUJVRworCQl1dF9hZChyd19sb2NrX293bigmaW5kZXgtPmxv Y2ssIFJXX0xPQ0tfU0hBUkVEKQorCQkgICAgICB8fCByd19sb2NrX293bigmaW5kZXgtPmxvY2ss IFJXX0xPQ0tfRVgpKTsKKyNlbmRpZiAvKiBVTklWX1NZTkNfREVCVUcgKi8KKwkJc3dpdGNoIChu b2RlLT5yZWNfdHlwZSkgeworCQljYXNlIFRSWF9VTkRPX1VQRF9ERUxfUkVDOgorCQkJcm93X2xv Z190YWJsZV9pbnNlcnQoCisJCQkJYnRyX3BjdXJfZ2V0X3JlYyhwY3VyKSwgaW5kZXgsIG9mZnNl dHMpOworCQkJYnJlYWs7CisJCWNhc2UgVFJYX1VORE9fVVBEX0VYSVNUX1JFQzoKKwkJCXJvd19s b2dfdGFibGVfdXBkYXRlKAorCQkJCWJ0cl9wY3VyX2dldF9yZWMocGN1ciksIGluZGV4LCBvZmZz ZXRzLAorCQkJCXJlYnVpbHRfb2xkX3BrKTsKKwkJCWJyZWFrOworCQljYXNlIFRSWF9VTkRPX0RF TF9NQVJLX1JFQzoKKwkJCXJvd19sb2dfdGFibGVfZGVsZXRlKAorCQkJCWJ0cl9wY3VyX2dldF9y ZWMocGN1ciksIGluZGV4LCBvZmZzZXRzLAorCQkJCW5vZGUtPnRyeC0+aWQpOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQl1dF9hZCgwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJYnRyX3Bj dXJfY29tbWl0X3NwZWNpZnlfbXRyKHBjdXIsICZtdHIpOwogCiAJaWYgKGVyciA9PSBEQl9TVUND RVNTICYmIG5vZGUtPnJlY190eXBlID09IFRSWF9VTkRPX1VQRF9ERUxfUkVDKSB7CiAKIAkJbXRy X3N0YXJ0KCZtdHIpOwogCisJCS8qIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2FsbCByb3dfbG9n X3RhYmxlLAorCQliZWNhdXNlIHRoZSByZWNvcmQgaXMgZGVsZXRlLW1hcmtlZCBhbmQgd291bGQg dGh1cworCQliZSBvbWl0dGVkIGZyb20gdGhlIHJlYnVpbHQgY29weSBvZiB0aGUgdGFibGUuICov CiAJCWVyciA9IHJvd191bmRvX21vZF9yZW1vdmVfY2x1c3RfbG93KAogCQkJbm9kZSwgdGhyLCAm bXRyLCBCVFJfTU9ESUZZX0xFQUYpOwogCQlpZiAoZXJyICE9IERCX1NVQ0NFU1MpIHsKCj09PSBt b2RpZmllZCBmaWxlICdzdG9yYWdlL2lubm9iYXNlL3Jvdy9yb3cwdXBkLmNjJwotLS0gYS9zdG9y YWdlL2lubm9iYXNlL3Jvdy9yb3cwdXBkLmNjCXJldmlkOm1hcmtvLm1ha2VsYUBvcmFjbGUuY29t LTIwMTIwNTI5MTIzOTUzLXB3bGxqMW9yeW5tN2E2cTkKKysrIGIvc3RvcmFnZS9pbm5vYmFzZS9y b3cvcm93MHVwZC5jYwlyZXZpZDptYXJrby5tYWtlbGFAb3JhY2xlLmNvbS0yMDEyMDUyOTEzMzMz MC1odnM0cnpiemw2OHN5bW5sCkBAIC0yMDQ4LDYgKzIwNDgsMTEgQEAgZXJyX2V4aXQ6CiAJCQli dHJfY3VyX2dldF9wYWdlX3ppcChidHJfY3VyKSwKIAkJCXJlYywgaW5kZXgsIG9mZnNldHMsIG5v ZGUtPnVwZGF0ZSwgbXRyKTsKIAorCQkvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNhbGwgcm93 X2xvZ190YWJsZSBmb3IKKwkJdGhpcywgYmVjYXVzZSBkdXJpbmcgb25saW5lIHRhYmxlIHJlYnVp bGQsIHB1cmdlIHdpbGwKKwkJbm90IGZyZWUgYW55IEJMT0JzIGluIHRoZSB0YWJsZSwgd2hldGhl ciBvciBub3QgdGhleQorCQlhcmUgb3duZWQgYnkgdGhlIGNsdXN0ZXJlZCBpbmRleCByZWNvcmQu ICovCisKIAkJbXRyX2NvbW1pdChtdHIpOwogCX0KIApAQCAtMjA2NywxNiArMjA3MiwxOCBAQCBy b3dfdXBkX2NsdXN0X3JlYygKIC8qPT09PT09PT09PT09PT0qLwogCXVwZF9ub2RlX3QqCW5vZGUs CS8qITwgaW46IHJvdyB1cGRhdGUgbm9kZSAqLwogCWRpY3RfaW5kZXhfdCoJaW5kZXgsCS8qITwg aW46IGNsdXN0ZXJlZCBpbmRleCAqLworCXVsaW50KgkJb2Zmc2V0cywvKiE8IGluOiByZWNfZ2V0 X29mZnNldHMoKSBvbiBub2RlLT5wY3VyICovCisJbWVtX2hlYXBfdCoqCW9mZnNldHNfaGVhcCwK KwkJCQkvKiE8IGluL291dDogbWVtb3J5IGhlYXAsIGNhbiBiZSBlbXB0aWVkICovCiAJcXVlX3Ro cl90Kgl0aHIsCS8qITwgaW46IHF1ZXJ5IHRocmVhZCAqLwogCW10cl90KgkJbXRyKQkvKiE8IGlu OiBtdHI7IGdldHMgY29tbWl0dGVkIGhlcmUgKi8KIHsKLQltZW1faGVhcF90KglvZmZzZXRzX2hl YXA7Ci0JbWVtX2hlYXBfdCoJaGVhcDsKLQliaWdfcmVjX3QqCWJpZ19yZWMJPSBOVUxMOworCW1l bV9oZWFwX3QqCWhlYXAJCT0gTlVMTDsKKwliaWdfcmVjX3QqCWJpZ19yZWMJCT0gTlVMTDsKIAli dHJfcGN1cl90KglwY3VyOwogCWJ0cl9jdXJfdCoJYnRyX2N1cjsKIAlkYmVycl90CQllcnI7Ci0J dWxpbnQqCQlvZmZzZXRzCT0gTlVMTDsKKwljb25zdCBkdHVwbGVfdCoJcmVidWlsdF9vbGRfcGsJ PSBOVUxMOwogCiAJdXRfYWQobm9kZSk7CiAJdXRfYWQoZGljdF9pbmRleF9pc19jbHVzdChpbmRl eCkpOwpAQCAtMjA4NSwyMSArMjA5MiwyMCBAQCByb3dfdXBkX2NsdXN0X3JlYygKIAlidHJfY3Vy ID0gYnRyX3BjdXJfZ2V0X2J0cl9jdXIocGN1cik7CiAKIAl1dF9hZChidHJfY3VyX2dldF9pbmRl eChidHJfY3VyKSA9PSBpbmRleCk7Ci0JdXRfYWQoIXJlY19nZXRfZGVsZXRlZF9mbGFnKGJ0cl9w Y3VyX2dldF9yZWMocGN1ciksCisJdXRfYWQoIXJlY19nZXRfZGVsZXRlZF9mbGFnKGJ0cl9jdXJf Z2V0X3JlYyhidHJfY3VyKSwKIAkJCQkgICAgZGljdF90YWJsZV9pc19jb21wKGluZGV4LT50YWJs ZSkpKTsKKwl1dF9hZChyZWNfb2Zmc192YWxpZGF0ZShidHJfY3VyX2dldF9yZWMoYnRyX2N1ciks IGluZGV4LCBvZmZzZXRzKSk7CiAKLQlvZmZzZXRzX2hlYXAgPSBOVUxMOworCWlmIChkaWN0X2lu ZGV4X2lzX29ubGluZV9kZGwoaW5kZXgpKSB7CisJCXJlYnVpbHRfb2xkX3BrID0gcm93X2xvZ190 YWJsZV9nZXRfcGsoCisJCQlidHJfY3VyX2dldF9yZWMoYnRyX2N1ciksIGluZGV4LCBvZmZzZXRz LCAmaGVhcCk7CisJfQogCiAJLyogVHJ5IG9wdGltaXN0aWMgdXBkYXRpbmcgb2YgdGhlIHJlY29y ZCwga2VlcGluZyBjaGFuZ2VzIHdpdGhpbgogCXRoZSBwYWdlOyB3ZSBkbyBub3QgY2hlY2sgbG9j a3MgYmVjYXVzZSB3ZSBhc3N1bWUgdGhlIHgtbG9jayBvbiB0aGUKIAlyZWNvcmQgdG8gdXBkYXRl ICovCiAKIAlpZiAobm9kZS0+Y21wbF9pbmZvICYgVVBEX05PREVfTk9fU0laRV9DSEFOR0UpIHsK LQkJLyogVE9ETzogcmV1c2Ugb2Zmc2V0cyBmcm9tIGNhbGxlciAqLwotCQlvZmZzZXRzID0gcmVj X2dldF9vZmZzZXRzKAotCQkJYnRyX2N1cl9nZXRfcmVjKGJ0cl9jdXIpLAotCQkJaW5kZXgsIG9m ZnNldHMsIFVMSU5UX1VOREVGSU5FRCwgJm9mZnNldHNfaGVhcCk7Ci0KIAkJZXJyID0gYnRyX2N1 cl91cGRhdGVfaW5fcGxhY2UoCiAJCQlCVFJfTk9fTE9DS0lOR19GTEFHLCBidHJfY3VyLAogCQkJ b2Zmc2V0cywgbm9kZS0+dXBkYXRlLApAQCAtMjEwNywxMCArMjExMywxNiBAQCByb3dfdXBkX2Ns dXN0X3JlYygKIAl9IGVsc2UgewogCQllcnIgPSBidHJfY3VyX29wdGltaXN0aWNfdXBkYXRlKAog CQkJQlRSX05PX0xPQ0tJTkdfRkxBRywgYnRyX2N1ciwKLQkJCSZvZmZzZXRzLCAmb2Zmc2V0c19o ZWFwLCBub2RlLT51cGRhdGUsCisJCQkmb2Zmc2V0cywgb2Zmc2V0c19oZWFwLCBub2RlLT51cGRh dGUsCiAJCQlub2RlLT5jbXBsX2luZm8sIHRociwgdGhyX2dldF90cngodGhyKS0+aWQsIG10cik7 CiAJfQogCisJaWYgKGVyciA9PSBEQl9TVUNDRVNTICYmIHJlYnVpbHRfb2xkX3BrCisJICAgICYm IGRpY3RfaW5kZXhfaXNfb25saW5lX2RkbChpbmRleCkpIHsKKwkJcm93X2xvZ190YWJsZV91cGRh dGUoYnRyX2N1cl9nZXRfcmVjKGJ0cl9jdXIpLAorCQkJCSAgICAgaW5kZXgsIG9mZnNldHMsIHJl YnVpbHRfb2xkX3BrKTsKKwl9CisKIAltdHJfY29tbWl0KG10cik7CiAKIAlpZiAoVU5JVl9MSUtF TFkoZXJyID09IERCX1NVQ0NFU1MpKSB7CkBAIC0yMTM5LDExICsyMTUxLDEzIEBAIHJvd191cGRf Y2x1c3RfcmVjKAogCXV0X2FkKCFyZWNfZ2V0X2RlbGV0ZWRfZmxhZyhidHJfcGN1cl9nZXRfcmVj KHBjdXIpLAogCQkJCSAgICBkaWN0X3RhYmxlX2lzX2NvbXAoaW5kZXgtPnRhYmxlKSkpOwogCi0J aGVhcCA9IG1lbV9oZWFwX2NyZWF0ZSgxMDI0KTsKKwlpZiAoIWhlYXApIHsKKwkJaGVhcCA9IG1l bV9oZWFwX2NyZWF0ZSgxMDI0KTsKKwl9CiAKIAllcnIgPSBidHJfY3VyX3Blc3NpbWlzdGljX3Vw ZGF0ZSgKIAkJQlRSX05PX0xPQ0tJTkdfRkxBRyB8IEJUUl9LRUVQX1BPU19GTEFHLCBidHJfY3Vy LAotCQkmb2Zmc2V0cywgJm9mZnNldHNfaGVhcCwgaGVhcCwgJmJpZ19yZWMsCisJCSZvZmZzZXRz LCBvZmZzZXRzX2hlYXAsIGhlYXAsICZiaWdfcmVjLAogCQlub2RlLT51cGRhdGUsIG5vZGUtPmNt cGxfaW5mbywKIAkJdGhyLCB0aHJfZ2V0X3RyeCh0aHIpLT5pZCwgbXRyKTsKIAlpZiAoYmlnX3Jl YykgewpAQCAtMjE5MSwxMSArMjIwNSwxNiBAQCByb3dfdXBkX2NsdXN0X3JlYygKIAkJdXRfYShl cnIgPT0gREJfU1VDQ0VTUyk7CiAJfQogCisJaWYgKGVyciA9PSBEQl9TVUNDRVNTICYmIHJlYnVp bHRfb2xkX3BrCisJICAgICYmIGRpY3RfaW5kZXhfaXNfb25saW5lX2RkbChpbmRleCkpIHsKKwkJ cm93X2xvZ190YWJsZV91cGRhdGUoYnRyX2N1cl9nZXRfcmVjKGJ0cl9jdXIpLAorCQkJCSAgICAg aW5kZXgsIG9mZnNldHMsIHJlYnVpbHRfb2xkX3BrKTsKKwl9CisKIAltdHJfY29tbWl0KG10cik7 Ci0JbWVtX2hlYXBfZnJlZShoZWFwKTsKIGZ1bmNfZXhpdDoKLQlpZiAob2Zmc2V0c19oZWFwKSB7 Ci0JCW1lbV9oZWFwX2ZyZWUob2Zmc2V0c19oZWFwKTsKKwlpZiAoaGVhcCkgeworCQltZW1faGVh cF9mcmVlKGhlYXApOwogCX0KIAogCWlmIChiaWdfcmVjKSB7CkBAIC0yMjczLDcgKzIyOTIsNyBA QCByb3dfdXBkX2NsdXN0X3N0ZXAoCiAJZGJlcnJfdAkJZXJyOwogCW10cl90CQltdHI7CiAJcmVj X3QqCQlyZWM7Ci0JbWVtX2hlYXBfdCoJaGVhcAkJPSBOVUxMOworCW1lbV9oZWFwX3QqCWhlYXAJ PSBOVUxMOwogCXVsaW50CQlvZmZzZXRzX1tSRUNfT0ZGU19OT1JNQUxfU0laRV07CiAJdWxpbnQq CQlvZmZzZXRzOwogCWlib29sCQlyZWZlcmVuY2VkOwpAQCAtMjI5OSw3ICsyMzE4LDE3IEBAIHJv d191cGRfY2x1c3Rfc3RlcCgKIAogCXV0X2EocGN1ci0+cmVsX3BvcyA9PSBCVFJfUENVUl9PTik7 CiAKLQlzdWNjZXNzID0gYnRyX3BjdXJfcmVzdG9yZV9wb3NpdGlvbihCVFJfTU9ESUZZX0xFQUYs IHBjdXIsICZtdHIpOworCXVsaW50CW1vZGU7CisKKwlpZiAoZGljdF9pbmRleF9pc19vbmxpbmVf ZGRsKGluZGV4KSkgeworCQl1dF9hZChub2RlLT50YWJsZS0+aWQgIT0gRElDVF9JTkRFWEVTX0lE KTsKKwkJbW9kZSA9IEJUUl9NT0RJRllfTEVBRiB8IEJUUl9BTFJFQURZX1NfTEFUQ0hFRDsKKwkJ bXRyX3NfbG9jayhkaWN0X2luZGV4X2dldF9sb2NrKGluZGV4KSwgJm10cik7CisJfSBlbHNlIHsK KwkJbW9kZSA9IEJUUl9NT0RJRllfTEVBRjsKKwl9CisKKwlzdWNjZXNzID0gYnRyX3BjdXJfcmVz dG9yZV9wb3NpdGlvbihtb2RlLCBwY3VyLCAmbXRyKTsKIAogCWlmICghc3VjY2VzcykgewogCQll cnIgPSBEQl9SRUNPUkRfTk9UX0ZPVU5EOwpAQCAtMjMxNSw2ICsyMzQ0LDggQEAgcm93X3VwZF9j bHVzdF9zdGVwKAogCiAJaWYgKG5vZGUtPmlzX2RlbGV0ZSAmJiBub2RlLT50YWJsZS0+aWQgPT0g RElDVF9JTkRFWEVTX0lEKSB7CiAKKwkJdXRfYWQoIWRpY3RfaW5kZXhfaXNfb25saW5lX2RkbChp bmRleCkpOworCiAJCWRpY3RfZHJvcF9pbmRleF90cmVlKGJ0cl9wY3VyX2dldF9yZWMocGN1ciks ICZtdHIpOwogCiAJCW10cl9jb21taXQoJm10cik7CkBAIC0yMzU2LDExICsyMzg3LDggQEAgcm93 X3VwZF9jbHVzdF9zdGVwKAogCQkJbm9kZS0+c3RhdGUgPSBVUERfTk9ERV9VUERBVEVfQUxMX1NF QzsKIAkJCW5vZGUtPmluZGV4ID0gZGljdF90YWJsZV9nZXRfbmV4dF9pbmRleChpbmRleCk7CiAJ CX0KLWV4aXRfZnVuYzoKLQkJaWYgKFVOSVZfTElLRUxZX05VTEwoaGVhcCkpIHsKLQkJCW1lbV9o ZWFwX2ZyZWUoaGVhcCk7Ci0JCX0KLQkJcmV0dXJuKGVycik7CisKKwkJZ290byBleGl0X2Z1bmM7 CiAJfQogCiAJLyogSWYgdGhlIHVwZGF0ZSBpcyBtYWRlIGZvciBNeVNRTCwgd2UgYWxyZWFkeSBo YXZlIHRoZSB1cGRhdGUgdmVjdG9yCkBAIC0yMzc0LDEzICsyNDAyLDExIEBAIGV4aXRfZnVuYzoK IAkJcm93X3VwZF9ldmFsX25ld192YWxzKG5vZGUtPnVwZGF0ZSk7CiAJfQogCi0JaWYgKFVOSVZf TElLRUxZX05VTEwoaGVhcCkpIHsKLQkJbWVtX2hlYXBfZnJlZShoZWFwKTsKLQl9Ci0KIAlpZiAo bm9kZS0+Y21wbF9pbmZvICYgVVBEX05PREVfTk9fT1JEX0NIQU5HRSkgewogCi0JCXJldHVybihy b3dfdXBkX2NsdXN0X3JlYyhub2RlLCBpbmRleCwgdGhyLCAmbXRyKSk7CisJCWVyciA9IHJvd191 cGRfY2x1c3RfcmVjKAorCQkJbm9kZSwgaW5kZXgsIG9mZnNldHMsICZoZWFwLCB0aHIsICZtdHIp OworCQlnb3RvIGV4aXRfZnVuYzsKIAl9CiAKIAlyb3dfdXBkX3N0b3JlX3Jvdyhub2RlKTsKQEAg LTI0MDQsMTYgKzI0MzAsMTcgQEAgZXhpdF9mdW5jOgogCiAJCWlmIChlcnIgIT0gREJfU1VDQ0VT UykgewogCi0JCQlyZXR1cm4oZXJyKTsKKwkJCWdvdG8gZXhpdF9mdW5jOwogCQl9CiAKIAkJbm9k ZS0+c3RhdGUgPSBVUERfTk9ERV9VUERBVEVfQUxMX1NFQzsKIAl9IGVsc2UgewotCQllcnIgPSBy b3dfdXBkX2NsdXN0X3JlYyhub2RlLCBpbmRleCwgdGhyLCAmbXRyKTsKKwkJZXJyID0gcm93X3Vw ZF9jbHVzdF9yZWMoCisJCQlub2RlLCBpbmRleCwgb2Zmc2V0cywgJmhlYXAsIHRociwgJm10cik7 CiAKIAkJaWYgKGVyciAhPSBEQl9TVUNDRVNTKSB7CiAKLQkJCXJldHVybihlcnIpOworCQkJZ290 byBleGl0X2Z1bmM7CiAJCX0KIAogCQlub2RlLT5zdGF0ZSA9IFVQRF9OT0RFX1VQREFURV9TT01F X1NFQzsKQEAgLTI0MjEsNiArMjQ0OCwxMCBAQCBleGl0X2Z1bmM6CiAKIAlub2RlLT5pbmRleCA9 IGRpY3RfdGFibGVfZ2V0X25leHRfaW5kZXgoaW5kZXgpOwogCitleGl0X2Z1bmM6CisJaWYgKGhl YXApIHsKKwkJbWVtX2hlYXBfZnJlZShoZWFwKTsKKwl9CiAJcmV0dXJuKGVycik7CiB9CiAKCk5v IGJ1bmRsZSAocmVhc29uOiB1c2VsZXNzIGZvciBwdXNoIGVtYWlscyku