From mboxrd@z Thu Jan 1 00:00:00 1970 From: James Chapman Subject: PPP-over-L2TP kernel support, new patch for review Date: Mon, 20 Sep 2004 22:11:44 +0100 Sender: netdev-bounce@oss.sgi.com Message-ID: <1095714704.414f4790cd168@www.katalix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="-MOQ1095714704f29a8d8a0a03d7f3fed328bf7615d061" Cc: Martijn van Oosterhout , mostrows@styx.uwaterloo.ca Return-path: To: netdev@oss.sgi.com Errors-to: netdev-bounce@oss.sgi.com List-Id: netdev.vger.kernel.org This message is in MIME format. ---MOQ1095714704f29a8d8a0a03d7f3fed328bf7615d061 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Attached is a revised version of the new PPP over L2TP support for review. Thanks DaveM and Herbert for comments so far. The following comments have been addressed in this new version: - use Linux list macros for all lists - split sockaddr_pppox into separate sockaddr_pppoe and sockaddr_pppol2tp structs I've split the patch into 3 diffs: 1. sockaddr_pppoe.diff - fix sockaddr_pppox issue 2. if_pppox.h_ws.diff - fixup whitespace formatting 3. pppol2tp-2.diff - add PPPoL2TP Please also check the following FIXMEs in pppol2tp.c. If these aren't issues, I'll remove the FIXMEs and submit a new patch. - pppol2tp_data_ready() lock the socket when walking sk->sk_receive_queue? - pppol2tp_build_l2tp_header() unaligned accesses? - pppol2tp_xmit() handle skb fragments? - pppol2tp_create() sk_set_owner() - what is the real problem here? - pppol2tp_session_setsockopt() change ppp channel's hdrlen on the fly? Also, since submitting the previous version, I've made a few internal L2TP changes which are included in the pppol2tp patch. Most relevant is the addition of a using_ipsec flag - I'm trying to return a read-only indicator to userspace whether the L2TP tunnel is protected by IPSEC. Is this the right way to do it? /james ---MOQ1095714704f29a8d8a0a03d7f3fed328bf7615d061 Content-Type: application/octet-stream; name="sockaddr_pppoe.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sockaddr_pppoe.diff" ZGlmZiAtTmF1ciBsaW51eC0yLjYuOC4xLm9yaWcvZHJpdmVycy9uZXQvcHBwb2UuYyBsaW51eC0y LjYuOC4xL2RyaXZlcnMvbmV0L3BwcG9lLmMKLS0tIGxpbnV4LTIuNi44LjEub3JpZy9kcml2ZXJz L25ldC9wcHBvZS5jCTIwMDQtMDgtMTQgMTE6NTU6MzUuMDAwMDAwMDAwICswMTAwCisrKyBsaW51 eC0yLjYuOC4xL2RyaXZlcnMvbmV0L3BwcG9lLmMJMjAwNC0wOS0yMCAxMDo1MjoxNC4wMDAwMDAw MDAgKzAxMDAKQEAgLTIwMSw5ICsyMDEsOSBAQAogCXJldHVybiBwbzsKIH0KIAotc3RhdGljIGlu bGluZSBzdHJ1Y3QgcHBwb3hfb3B0ICpnZXRfaXRlbV9ieV9hZGRyKHN0cnVjdCBzb2NrYWRkcl9w cHBveCAqc3ApCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9vcHQgKmdldF9pdGVtX2J5X2Fk ZHIoc3RydWN0IHNvY2thZGRyX3BwcG9lICpzcCkKIHsKLQlyZXR1cm4gZ2V0X2l0ZW0oc3AtPnNh X2FkZHIucHBwb2Uuc2lkLCBzcC0+c2FfYWRkci5wcHBvZS5yZW1vdGUpOworCXJldHVybiBnZXRf aXRlbShzcC0+cHBwb2Uuc2lkLCBzcC0+cHBwb2UucmVtb3RlKTsKIH0KIAogc3RhdGljIGlubGlu ZSBpbnQgc2V0X2l0ZW0oc3RydWN0IHBwcG94X29wdCAqcG8pCkBAIC01NzIsNyArNTcyLDcgQEAK IHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 ID0gTlVMTDsKLQlzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKnNwID0gKHN0cnVjdCBzb2NrYWRkcl9w cHBveCAqKSB1c2VydmFkZHI7CisJc3RydWN0IHNvY2thZGRyX3BwcG9lICpzcCA9IChzdHJ1Y3Qg c29ja2FkZHJfcHBwb2UgKikgdXNlcnZhZGRyOwogCXN0cnVjdCBwcHBveF9vcHQgKnBvID0gcHBw b3hfc2soc2spOwogCWludCBlcnJvcjsKIApAQCAtNTg0LDEyICs1ODQsMTIgQEAKIAogCS8qIENo ZWNrIGZvciBhbHJlYWR5IGJvdW5kIHNvY2tldHMgKi8KIAllcnJvciA9IC1FQlVTWTsKLQlpZiAo KHNrLT5za19zdGF0ZSAmIFBQUE9YX0NPTk5FQ1RFRCkgJiYgc3AtPnNhX2FkZHIucHBwb2Uuc2lk KQorCWlmICgoc2stPnNrX3N0YXRlICYgUFBQT1hfQ09OTkVDVEVEKSAmJiBzcC0+cHBwb2Uuc2lk KQogCQlnb3RvIGVuZDsKIAogCS8qIENoZWNrIGZvciBhbHJlYWR5IGRpc2Nvbm5lY3RlZCBzb2Nr ZXRzLCBvbiBhdHRlbXB0cyB0byBkaXNjb25uZWN0ICovCiAJZXJyb3IgPSAtRUFMUkVBRFk7Ci0J aWYgKChzay0+c2tfc3RhdGUgJiBQUFBPWF9ERUFEKSAmJiAhc3AtPnNhX2FkZHIucHBwb2Uuc2lk ICkKKwlpZiAoKHNrLT5za19zdGF0ZSAmIFBQUE9YX0RFQUQpICYmICFzcC0+cHBwb2Uuc2lkICkK IAkJZ290byBlbmQ7CiAKIAllcnJvciA9IDA7CkBAIC02MDksOCArNjA5LDggQEAKIAl9CiAKIAkv KiBEb24ndCByZS1iaW5kIGlmIHNpZD09MCAqLwotCWlmIChzcC0+c2FfYWRkci5wcHBvZS5zaWQg IT0gMCkgewotCQlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoc3AtPnNhX2FkZHIucHBwb2UuZGV2KTsK KwlpZiAoc3AtPnBwcG9lLnNpZCAhPSAwKSB7CisJCWRldiA9IGRldl9nZXRfYnlfbmFtZShzcC0+ cHBwb2UuZGV2KTsKIAogCQllcnJvciA9IC1FTk9ERVY7CiAJCWlmICghZGV2KQpAQCAtNjIyLDcg KzYyMiw3IEBACiAJCQlnb3RvIGVycl9wdXQ7CiAKIAkJbWVtY3B5KCZwby0+cHBwb2VfcGEsCi0J CSAgICAgICAmc3AtPnNhX2FkZHIucHBwb2UsCisJCSAgICAgICAmc3AtPnBwcG9lLAogCQkgICAg ICAgc2l6ZW9mKHN0cnVjdCBwcHBvZV9hZGRyKSk7CiAKIAkJZXJyb3IgPSBzZXRfaXRlbShwbyk7 CkBAIC02NDIsNyArNjQyLDcgQEAKIAkJc2stPnNrX3N0YXRlID0gUFBQT1hfQ09OTkVDVEVEOwog CX0KIAotCXBvLT5udW0gPSBzcC0+c2FfYWRkci5wcHBvZS5zaWQ7CisJcG8tPm51bSA9IHNwLT5w cHBvZS5zaWQ7CiAKICBlbmQ6CiAJcmVsZWFzZV9zb2NrKHNrKTsKQEAgLTY1OSwxMiArNjU5LDEy IEBACiBzdGF0aWMgaW50IHBwcG9lX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0 IHNvY2thZGRyICp1YWRkciwKIAkJICBpbnQgKnVzb2NrYWRkcl9sZW4sIGludCBwZWVyKQogewot CWludCBsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3BwcG94KTsKLQlzdHJ1Y3Qgc29ja2Fk ZHJfcHBwb3ggc3A7CisJaW50IGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfcHBwb2UpOwor CXN0cnVjdCBzb2NrYWRkcl9wcHBvZSBzcDsKIAogCXNwLnNhX2ZhbWlseQk9IEFGX1BQUE9YOwog CXNwLnNhX3Byb3RvY29sCT0gUFhfUFJPVE9fT0U7Ci0JbWVtY3B5KCZzcC5zYV9hZGRyLnBwcG9l LCAmcHBwb3hfc2soc29jay0+c2spLT5wcHBvZV9wYSwKKwltZW1jcHkoJnNwLnBwcG9lLCAmcHBw b3hfc2soc29jay0+c2spLT5wcHBvZV9wYSwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcHBvZV9h ZGRyKSk7CiAKIAltZW1jcHkodWFkZHIsICZzcCwgbGVuKTsKQEAgLTc0MCw3ICs3NDAsNyBAQAog CQllcnIgPSAtRUZBVUxUOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJnBvLT5wcHBvZV9yZWxheSwK IAkJCQkgICAodm9pZCBfX3VzZXIgKilhcmcsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk cl9wcHBveCkpKQorCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfcHBwb2UpKSkKIAkJCWJy ZWFrOwogCiAJCWVyciA9IC1FSU5WQUw7CmRpZmYgLU5hdXIgbGludXgtMi42LjguMS5vcmlnL2lu Y2x1ZGUvbGludXgvaWZfcHBwb3guaCBsaW51eC0yLjYuOC4xL2luY2x1ZGUvbGludXgvaWZfcHBw b3guaAotLS0gbGludXgtMi42LjguMS5vcmlnL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAkyMDA0 LTA4LTE0IDExOjU0OjUwLjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi42LjguMS9pbmNsdWRl L2xpbnV4L2lmX3BwcG94LmgJMjAwNC0wOS0yMCAxMjoxOToyNC4wMDAwMDAwMDAgKzAxMDAKQEAg LTUxLDE1ICs1MSwyNiBAQAogICovIAogI2RlZmluZSBQWF9QUk9UT19PRSAgICAwIC8qIEN1cnJl bnRseSBqdXN0IFBQUG9FICovCiAjZGVmaW5lIFBYX01BWF9QUk9UTyAgIDEJCi0gCisKKy8qIFRo ZSB1c2Ugb2YgYSB1bmlvbiBpc24ndCB2aWFibGUgYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGlzIHN0 cnVjdAorICogbXVzdCBzdGF5IGZpeGVkIG92ZXIgdGltZSAtLSBhcHBsaWNhdGlvbnMgdXNlIHNp emVvZihzdHJ1Y3QKKyAqIHNvY2thZGRyX3BwcG94KSB0byBmaWxsIGl0LiBVc2UgcHJvdG9jb2wg c3BlY2lmaWMgc29ja2FkZHIgdHlwZXMKKyAqIGluc3RlYWQuCisgKi8gCiBzdHJ1Y3Qgc29ja2Fk ZHJfcHBwb3ggeyAKICAgICAgICBzYV9mYW1pbHlfdCAgICAgc2FfZmFtaWx5OyAgICAgICAgICAg IC8qIGFkZHJlc3MgZmFtaWx5LCBBRl9QUFBPWCAqLyAKICAgICAgICB1bnNpZ25lZCBpbnQgICAg c2FfcHJvdG9jb2w7ICAgICAgICAgIC8qIHByb3RvY29sIGlkZW50aWZpZXIgKi8gCiAgICAgICAg dW5pb257IAogICAgICAgICAgICAgICAgc3RydWN0IHBwcG9lX2FkZHIgICAgICAgcHBwb2U7IAog ICAgICAgIH1zYV9hZGRyOyAKLX1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7IAorfV9fYXR0cmli dXRlX18gKChwYWNrZWQpKSBfX2RlcHJlY2F0ZWQ7IAogCisvKiBNdXN0IGJlIGJpbmFyeS1jb21w YXRpYmxlIHdpdGggc29ja2FkZHJfcHBwb3ggZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsdHkgKi8K K3N0cnVjdCBzb2NrYWRkcl9wcHBvZSB7IAorCXNhX2ZhbWlseV90ICAgICBzYV9mYW1pbHk7CS8q IGFkZHJlc3MgZmFtaWx5LCBBRl9QUFBPWCAqLyAKKwl1bnNpZ25lZCBpbnQgICAgc2FfcHJvdG9j b2w7ICAgIC8qIHByb3RvY29sIGlkZW50aWZpZXIgKi8gCisJc3RydWN0IHBwcG9lX2FkZHIgcHBw b2U7IAorfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsgCiAKIC8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBA IC0xMTUsNyArMTI2LDcgQEAKIHN0cnVjdCBwcHBvZV9vcHQgewogCXN0cnVjdCBuZXRfZGV2aWNl ICAgICAgKmRldjsJICAvKiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHNvY2tldCovCiAJc3RydWN0 IHBwcG9lX2FkZHIJcGE7CSAgLyogd2hhdCB0aGlzIHNvY2tldCBpcyBib3VuZCB0byovCi0Jc3Ry dWN0IHNvY2thZGRyX3BwcG94CXJlbGF5OwkgIC8qIHdoYXQgc29ja2V0IGRhdGEgd2lsbCBiZQor CXN0cnVjdCBzb2NrYWRkcl9wcHBvZQlyZWxheTsJICAvKiB3aGF0IHNvY2tldCBkYXRhIHdpbGwg YmUKIAkJCQkJICAgICByZWxheWVkIHRvIChQUFBvRSByZWxheWluZykgKi8KIH07CiAK ---MOQ1095714704f29a8d8a0a03d7f3fed328bf7615d061 Content-Type: application/octet-stream; name="if_pppox.h_ws.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="if_pppox.h_ws.diff" ZGlmZiAtTmF1ciBsaW51eC0yLjYuOC4xLm9yaWcvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oIGxp bnV4LTIuNi44LjEud3MvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCi0tLSBsaW51eC0yLjYuOC4x Lm9yaWcvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCTIwMDQtMDktMjAgMTM6MTk6NTAuMDAwMDAw MDAwICswMTAwCisrKyBsaW51eC0yLjYuOC4xLndzL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAky MDA0LTA5LTIwIDEzOjE4OjIwLjAwMDAwMDAwMCArMDEwMApAQCAtMSw2ICsxLDYgQEAKIC8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKICAqIExpbnV4IFBQUCBvdmVyIFggLSBHZW5lcmljIFBQUCB0cmFuc3Bv cnQgbGF5ZXIgc29ja2V0cwotICogTGludXggUFBQIG92ZXIgRXRoZXJuZXQgKFBQUG9FKSBTb2Nr ZXQgSW1wbGVtZW50YXRpb24gKFJGQyAyNTE2KSAKKyAqIExpbnV4IFBQUCBvdmVyIEV0aGVybmV0 IChQUFBvRSkgU29ja2V0IEltcGxlbWVudGF0aW9uIChSRkMgMjUxNikKICAqCiAgKiBUaGlzIGZp bGUgc3VwcGxpZXMgZGVmaW5pdGlvbnMgcmVxdWlyZWQgYnkgdGhlIFBQUCBvdmVyIEV0aGVybmV0 IGRyaXZlcgogICogKHBwcG94LmMpLiAgQWxsIHZlcnNpb24gaW5mb3JtYXRpb24gd3J0IHRoaXMg ZmlsZSBpcyBsb2NhdGVkIGluIHBwcG94LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlIDxh c20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNpZmRlZiAgX19LRVJO RUxfXworI2lmZGVmCV9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2lu Y2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0zNiw0 MSArMzYsNDEgQEAKICNkZWZpbmUgUEZfUFBQT1gJQUZfUFBQT1gKICNlbmRpZiAvKiAhKEFGX1BQ UE9YKSAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqIAotICogUFBQb0UgYWRkcmVzc2luZyBkZWZpbml0 aW9uIAotICovIAotdHlwZWRlZiBfX3UxNiBzaWRfdDsgCi1zdHJ1Y3QgcHBwb2VfYWRkcnsgCi0g ICAgICAgc2lkX3QgICAgICAgICAgIHNpZDsgICAgICAgICAgICAgICAgICAgIC8qIFNlc3Npb24g aWRlbnRpZmllciAqLyAKLSAgICAgICB1bnNpZ25lZCBjaGFyICAgcmVtb3RlW0VUSF9BTEVOXTsg ICAgICAgLyogUmVtb3RlIGFkZHJlc3MgKi8gCi0gICAgICAgY2hhciAgICAgICAgICAgIGRldltJ Rk5BTVNJWl07ICAgICAgICAgIC8qIExvY2FsIGRldmljZSB0byB1c2UgKi8gCi19OyAKLSAKLS8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogCi0gKiBQcm90b2NvbHMgc3VwcG9ydGVkIGJ5IEFGX1BQUE9YIAotICov IAotI2RlZmluZSBQWF9QUk9UT19PRSAgICAwIC8qIEN1cnJlbnRseSBqdXN0IFBQUG9FICovCi0j ZGVmaW5lIFBYX01BWF9QUk9UTyAgIDEJCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQUFBvRSBhZGRy ZXNzaW5nIGRlZmluaXRpb24KKyAqLwordHlwZWRlZiBfX3UxNiBzaWRfdDsKK3N0cnVjdCBwcHBv ZV9hZGRyIHsKKwlzaWRfdAkJc2lkOwkJCS8qIFNlc3Npb24gaWRlbnRpZmllciAqLworCXVuc2ln bmVkIGNoYXIJcmVtb3RlW0VUSF9BTEVOXTsJLyogUmVtb3RlIGFkZHJlc3MgKi8KKwljaGFyCQlk ZXZbSUZOQU1TSVpdOwkJLyogTG9jYWwgZGV2aWNlIHRvIHVzZSAqLworfTsKKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKgorICogUHJvdG9jb2xzIHN1cHBvcnRlZCBieSBBRl9QUFBPWAorICovCisjZGVmaW5l IFBYX1BST1RPX09FCTAgLyogQ3VycmVudGx5IGp1c3QgUFBQb0UgKi8KKyNkZWZpbmUgUFhfTUFY X1BST1RPCTEKIAogLyogVGhlIHVzZSBvZiBhIHVuaW9uIGlzbid0IHZpYWJsZSBiZWNhdXNlIHRo ZSBzaXplIG9mIHRoaXMgc3RydWN0CiAgKiBtdXN0IHN0YXkgZml4ZWQgb3ZlciB0aW1lIC0tIGFw cGxpY2F0aW9ucyB1c2Ugc2l6ZW9mKHN0cnVjdAogICogc29ja2FkZHJfcHBwb3gpIHRvIGZpbGwg aXQuIFVzZSBwcm90b2NvbCBzcGVjaWZpYyBzb2NrYWRkciB0eXBlcwogICogaW5zdGVhZC4KLSAq LyAKLXN0cnVjdCBzb2NrYWRkcl9wcHBveCB7IAotICAgICAgIHNhX2ZhbWlseV90ICAgICBzYV9m YW1pbHk7ICAgICAgICAgICAgLyogYWRkcmVzcyBmYW1pbHksIEFGX1BQUE9YICovIAotICAgICAg IHVuc2lnbmVkIGludCAgICBzYV9wcm90b2NvbDsgICAgICAgICAgLyogcHJvdG9jb2wgaWRlbnRp ZmllciAqLyAKLSAgICAgICB1bmlvbnsgCi0gICAgICAgICAgICAgICBzdHJ1Y3QgcHBwb2VfYWRk ciAgICAgICBwcHBvZTsgCi0gICAgICAgfXNhX2FkZHI7IAotfV9fYXR0cmlidXRlX18gKChwYWNr ZWQpKSBfX2RlcHJlY2F0ZWQ7IAorICovCitzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggeworCXNhX2Zh bWlseV90CXNhX2ZhbWlseTsJCS8qIGFkZHJlc3MgZmFtaWx5LCBBRl9QUFBPWCAqLworCXVuc2ln bmVkIGludAlzYV9wcm90b2NvbDsJCS8qIHByb3RvY29sIGlkZW50aWZpZXIgKi8KKwl1bmlvbiB7 CisJCXN0cnVjdCBwcHBvZV9hZGRyCXBwcG9lOworCX0gc2FfYWRkcjsKK31fX2F0dHJpYnV0ZV9f ICgocGFja2VkKSkgX19kZXByZWNhdGVkOwogCiAvKiBNdXN0IGJlIGJpbmFyeS1jb21wYXRpYmxl IHdpdGggc29ja2FkZHJfcHBwb3ggZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsdHkgKi8KLXN0cnVj dCBzb2NrYWRkcl9wcHBvZSB7IAotCXNhX2ZhbWlseV90ICAgICBzYV9mYW1pbHk7CS8qIGFkZHJl c3MgZmFtaWx5LCBBRl9QUFBPWCAqLyAKLQl1bnNpZ25lZCBpbnQgICAgc2FfcHJvdG9jb2w7ICAg IC8qIHByb3RvY29sIGlkZW50aWZpZXIgKi8gCi0Jc3RydWN0IHBwcG9lX2FkZHIgcHBwb2U7IAot fV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsgCitzdHJ1Y3Qgc29ja2FkZHJfcHBwb2UgeworCXNh X2ZhbWlseV90CXNhX2ZhbWlseTsJLyogYWRkcmVzcyBmYW1pbHksIEFGX1BQUE9YICovCisJdW5z aWduZWQgaW50CXNhX3Byb3RvY29sOwkvKiBwcm90b2NvbCBpZGVudGlmaWVyICovCisJc3RydWN0 IHBwcG9lX2FkZHIgcHBwb2U7Cit9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCiAgKgpAQCAtMTAwLDExICsxMDAsMTEgQEAKICNkZWZpbmUgUFRUX0FDX05BTUUJX19j b25zdGFudF9odG9ucygweDAxMDIpCiAjZGVmaW5lIFBUVF9IT1NUX1VOSVEJX19jb25zdGFudF9o dG9ucygweDAxMDMpCiAjZGVmaW5lIFBUVF9BQ19DT09LSUUJX19jb25zdGFudF9odG9ucygweDAx MDQpCi0jZGVmaW5lIFBUVF9WRU5ET1IgCV9fY29uc3RhbnRfaHRvbnMoMHgwMTA1KQorI2RlZmlu ZSBQVFRfVkVORE9SCV9fY29uc3RhbnRfaHRvbnMoMHgwMTA1KQogI2RlZmluZSBQVFRfUkVMQVlf U0lECV9fY29uc3RhbnRfaHRvbnMoMHgwMTEwKQotI2RlZmluZSBQVFRfU1JWX0VSUiAgICAgX19j b25zdGFudF9odG9ucygweDAyMDEpCi0jZGVmaW5lIFBUVF9TWVNfRVJSICAJX19jb25zdGFudF9o dG9ucygweDAyMDIpCi0jZGVmaW5lIFBUVF9HRU5fRVJSICAJX19jb25zdGFudF9odG9ucygweDAy MDMpCisjZGVmaW5lIFBUVF9TUlZfRVJSCV9fY29uc3RhbnRfaHRvbnMoMHgwMjAxKQorI2RlZmlu ZSBQVFRfU1lTX0VSUglfX2NvbnN0YW50X2h0b25zKDB4MDIwMikKKyNkZWZpbmUgUFRUX0dFTl9F UlIJX19jb25zdGFudF9odG9ucygweDAyMDMpCiAKIHN0cnVjdCBwcHBvZV9oZHIgewogI2lmIGRl ZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQpAQCAtMTI0LDcgKzEyNCw3IEBACiAKICNp ZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgcHBwb2Vfb3B0IHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAg ICAgICpkZXY7CSAgLyogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXQqLworCXN0cnVjdCBu ZXRfZGV2aWNlCSpkZXY7CSAgLyogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBzb2NrZXQqLwogCXN0 cnVjdCBwcHBvZV9hZGRyCXBhOwkgIC8qIHdoYXQgdGhpcyBzb2NrZXQgaXMgYm91bmQgdG8qLwog CXN0cnVjdCBzb2NrYWRkcl9wcHBvZQlyZWxheTsJICAvKiB3aGF0IHNvY2tldCBkYXRhIHdpbGwg YmUKIAkJCQkJICAgICByZWxheWVkIHRvIChQUFBvRSByZWxheWluZykgKi8KQEAgLTE2MiwxMiAr MTYyLDEyIEBACiAKIC8qIFBQUG9YIHNvY2tldCBzdGF0ZXMgKi8KIGVudW0gewotICAgIFBQUE9Y X05PTkUJCT0gMCwgIC8qIGluaXRpYWwgc3RhdGUgKi8KLSAgICBQUFBPWF9DT05ORUNURUQJPSAx LCAgLyogY29ubmVjdGlvbiBlc3RhYmxpc2hlZCA9PVRDUF9FU1RBQkxJU0hFRCAqLwotICAgIFBQ UE9YX0JPVU5ECQk9IDIsICAvKiBib3VuZCB0byBwcHAgZGV2aWNlICovCi0gICAgUFBQT1hfUkVM QVkJCT0gNCwgIC8qIGZvcndhcmRpbmcgaXMgZW5hYmxlZCAqLwotICAgIFBQUE9YX1pPTUJJRQk9 IDgsICAvKiBkZWFkLCBidXQgc3RpbGwgYm91bmQgdG8gcHBwIGRldmljZSAqLwotICAgIFBQUE9Y X0RFQUQJCT0gMTYgIC8qIGRlYWQsIHVzZWxlc3MsIHBsZWFzZSBjbGVhbiBtZSB1cCEqLworCVBQ UE9YX05PTkUJPSAwLCAgLyogaW5pdGlhbCBzdGF0ZSAqLworCVBQUE9YX0NPTk5FQ1RFRAk9IDEs ICAvKiBjb25uZWN0aW9uIGVzdGFibGlzaGVkID09VENQX0VTVEFCTElTSEVEICovCisJUFBQT1hf Qk9VTkQJPSAyLCAgLyogYm91bmQgdG8gcHBwIGRldmljZSAqLworCVBQUE9YX1JFTEFZCT0gNCwg IC8qIGZvcndhcmRpbmcgaXMgZW5hYmxlZCAqLworCVBQUE9YX1pPTUJJRQk9IDgsICAvKiBkZWFk LCBidXQgc3RpbGwgYm91bmQgdG8gcHBwIGRldmljZSAqLworCVBQUE9YX0RFQUQJPSAxNiAgLyog ZGVhZCwgdXNlbGVzcywgcGxlYXNlIGNsZWFuIG1lIHVwISovCiB9OwogCiAjZW5kaWYgLyogX19L RVJORUxfXyAqLwo= ---MOQ1095714704f29a8d8a0a03d7f3fed328bf7615d061 Content-Type: application/octet-stream; name="pppol2tp-2.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pppol2tp-2.diff" ZGlmZiAtTmF1ciBsaW51eC0yLjYuOC4xLm9yaWcvZHJpdmVycy9uZXQvS2NvbmZpZyBsaW51eC0y LjYuOC4xL2RyaXZlcnMvbmV0L0tjb25maWcKLS0tIGxpbnV4LTIuNi44LjEub3JpZy9kcml2ZXJz L25ldC9LY29uZmlnCTIwMDQtMDgtMTQgMTE6NTY6MDAuMDAwMDAwMDAwICswMTAwCisrKyBsaW51 eC0yLjYuOC4xL2RyaXZlcnMvbmV0L0tjb25maWcJMjAwNC0wOS0yMCAxMToxODoxMy4wMDAwMDAw MDAgKzAxMDAKQEAgLTI0ODEsNiArMjQ4MSwxOSBAQAogCSAgd2hpY2ggY2FuIGxlYWQgdG8gYmFk IHJlc3VsdHMgaWYgdGhlIEFUTSBwZWVyIGxvc2VzIHN0YXRlIGFuZAogCSAgY2hhbmdlcyBpdHMg ZW5jYXBzdWxhdGlvbiB1bmlsYXRlcmFsbHkuCiAKK2NvbmZpZyBQUFBPTDJUUAorCXRyaXN0YXRl ICJQUFAgb3ZlciBMMlRQIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFM ICYmIFBQUAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFBQUC1vdmVyLUwyVFAgc29ja2V0IGZhbWls eS4gTDJUUCBpcyBhIHByb3RvY29sCisJICB1c2VkIGJ5IElTUHMgYW5kIGVudGVycHJpc2VzIHRv IHR1bm5lbCBQUFAgdHJhZmZpYyBvdmVyIFVEUAorCSAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNp bmcgUFBUUCBmb3IgVlBOIHVzZXMuCisKKwkgIFRoaXMga2VybmVsIGNvbXBvbmVudCBoYW5kbGVz IG9ubHkgTDJUUCBkYXRhIHBhY2tldHM6IGEKKwkgIHVzZXJsYW5kIGRhZW1vbiBoYW5kbGVzIEwy VFAgdGhlIGNvbnRyb2wgcHJvdG9jb2wgKHR1bm5lbAorCSAgYW5kIHNlc3Npb24gc2V0dXApLiBP bmUgc3VjaCBkYWVtb24gaXMgT3BlbkwyVFAKKwkgIChodHRwOi8vb3BlbmwydHAuc291cmNlZm9y Z2UubmV0LykuCisKIGNvbmZpZyBTTElQCiAJdHJpc3RhdGUgIlNMSVAgKHNlcmlhbCBsaW5lKSBz dXBwb3J0IgogCWRlcGVuZHMgb24gTkVUREVWSUNFUwpkaWZmIC1OYXVyIGxpbnV4LTIuNi44LjEu b3JpZy9kcml2ZXJzL25ldC9NYWtlZmlsZSBsaW51eC0yLjYuOC4xL2RyaXZlcnMvbmV0L01ha2Vm aWxlCi0tLSBsaW51eC0yLjYuOC4xLm9yaWcvZHJpdmVycy9uZXQvTWFrZWZpbGUJMjAwNC0wOC0x NCAxMTo1NTowOS4wMDAwMDAwMDAgKzAxMDAKKysrIGxpbnV4LTIuNi44LjEvZHJpdmVycy9uZXQv TWFrZWZpbGUJMjAwNC0wOS0yMCAxMToxNzo0Ny4wMDAwMDAwMDAgKzAxMDAKQEAgLTEwMSw2ICsx MDEsNyBAQAogb2JqLSQoQ09ORklHX1BQUF9ERUZMQVRFKSArPSBwcHBfZGVmbGF0ZS5vCiBvYmot JChDT05GSUdfUFBQX0JTRENPTVApICs9IGJzZF9jb21wLm8KIG9iai0kKENPTkZJR19QUFBPRSkg Kz0gcHBwb3gubyBwcHBvZS5vCitvYmotJChDT05GSUdfUFBQT0wyVFApICs9IHBwcG94Lm8gcHBw b2wydHAubwogCiBvYmotJChDT05GSUdfU0xJUCkgKz0gc2xpcC5vCiBpZmVxICgkKENPTkZJR19T TElQX0NPTVBSRVNTRUQpLHkpCmRpZmYgLU5hdXIgbGludXgtMi42LjguMS5vcmlnL2RyaXZlcnMv bmV0L3BwcG9sMnRwLmMgbGludXgtMi42LjguMS9kcml2ZXJzL25ldC9wcHBvbDJ0cC5jCi0tLSBs aW51eC0yLjYuOC4xLm9yaWcvZHJpdmVycy9uZXQvcHBwb2wydHAuYwkxOTcwLTAxLTAxIDAxOjAw OjAwLjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi42LjguMS9kcml2ZXJzL25ldC9wcHBvbDJ0 cC5jCTIwMDQtMDktMjAgMTE6Mzc6NTguMDAwMDAwMDAwICswMTAwCkBAIC0wLDAgKzEsMjI3NSBA QAorLyoqIC0qLSBsaW51eC1jIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICogTGludXggUFBQIG92ZXIgTDJUUCAoUFBQb1gv UFBQb0wyVFApIFNvY2tldHMKKyAqCisgKiBQUFBvWCAgICAtLS0gR2VuZXJpYyBQUFAgZW5jYXBz dWxhdGlvbiBzb2NrZXQgZmFtaWx5CisgKiBQUFBvTDJUUCAtLS0gUFBQIG92ZXIgTDJUUCAoUkZD IDI2NjEpCisgKgorICoKKyAqIFZlcnNpb246ICAgIDAuMy4wCisgKgorICogMjUxMDAzIDoJQ29w aWVkIGZyb20gcHBwb2UuYyB2ZXJzaW9uIDAuNi45LgorICoKKyAqIEF1dGhvcjoJTWFydGlqbiB2 YW4gT29zdGVyaG91dCA8a2xlcHRvZ0BzdmFuYS5vcmc+CisgKiBDb250cmlidXRvcnM6CisgKgkJ TWljaGFsIE9zdHJvd3NraSA8bW9zdHJvd3NAc3BlYWtlYXN5Lm5ldD4KKyAqCQlBcm5hbGRvIENh cnZhbGhvIGRlIE1lbG8gPGFjbWVAeGNvbmVjdGl2YS5jb20uYnI+CisgKgkJRGF2aWQgUy4gTWls bGVyIChkYXZlbUByZWRoYXQuY29tKQorICoJCUphbWVzIENoYXBtYW4gKGpjaGFwbWFuQGthdGFs aXguY29tKQorICoKKyAqIExpY2Vuc2U6CisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJCW1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKgkJYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkJ MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqCisgKi8KKworLyogVGhpcyBkcml2ZXIgaGFuZGxlcyBvbmx5IEwyVFAgZGF0YSBmcmFtZXM7 IGNvbnRyb2wgZnJhbWVzIGFyZSBoYW5kbGVkIGJ5IGEKKyAqIHVzZXJzcGFjZSBhcHBsaWNhdGlv bi4KKyAqCisgKiBUbyBzZW5kIGRhdGEgaW4gYW4gTDJUUCBzZXNzaW9uLCB1c2Vyc3BhY2Ugb3Bl bnMgYSBQUFBvTDJUUCBzb2NrZXQgYW5kCisgKiBhdHRhY2hlcyBpdCB0byBhIGJvdW5kIFVEUCBz b2NrZXQgd2l0aCBsb2NhbCB0dW5uZWxfaWQgLyBzZXNzaW9uX2lkIGFuZAorICogcGVlciB0dW5u ZWxfaWQgLyBzZXNzaW9uX2lkIHNldC4gRGF0YSBjYW4gdGhlbiBiZSBzZW50IG9yIHJlY2VpdmVk IHVzaW5nCisgKiByZWd1bGFyIHNvY2tldCBzZW5kbXNnKCkgLyByZWN2bXNnKCkgY2FsbHMuIEtl cm5lbCBwYXJhbWV0ZXJzIG9mIHRoZSBzb2NrZXQKKyAqIGNhbiBiZSByZWFkIG9yIG1vZGlmaWVk IHVzaW5nIGlvY3RsKCkgb3IgW2dzXWV0c29ja29wdCgpIGNhbGxzLgorICoKKyAqIFdoZW4gYSBQ UFBvTDJUUCBzb2NrZXQgaXMgY29ubmVjdGVkIHdpdGggbG9jYWwgYW5kIHBlZXIgc2Vzc2lvbl9p ZCB2YWx1ZXMKKyAqIHplcm8sIHRoZSBzb2NrZXQgaXMgdHJlYXRlZCBhcyBhIHNwZWNpYWwgdHVu bmVsIG1hbmFnZW1lbnQgc29ja2V0LgorICoKKyAqIEhlcmUncyBleGFtcGxlIHVzZXJzcGFjZSBj b2RlIHRvIGNyZWF0ZSBhIHNvY2tldCBmb3Igc2VuZGluZy9yZWNlaXZpbmcgZGF0YQorICogb3Zl ciBhbiBMMlRQIHNlc3Npb246LQorICoKKyAqCXN0cnVjdCBzb2NrYWRkcl9wcHBvbDJ0cCBzYXg7 CisgKglpbnQgZmQ7CisgKglpbnQgc2Vzc2lvbl9mZDsKKyAqCQorICoJZmQgPSBzb2NrZXQoQUZf UFBQT1gsIFNPQ0tfREdSQU0sIFBYX1BST1RPX09MMlRQKTsKKyAqCisgKglzYXguc2FfZmFtaWx5 ID0gQUZfUFBQT1g7CisgKglzYXguc2FfcHJvdG9jb2wgPSBQWF9QUk9UT19PTDJUUDsKKyAqCXNh eC5wcHBvbDJ0cC5mZCA9IHR1bm5lbF9mZDsgLy8gYm91bmQgVURQIHNvY2tldAorICoJc2F4LnBw cG9sMnRwLmFkZHIuc2luX2FkZHIuc19hZGRyID0gYWRkci0+c2luX2FkZHIuc19hZGRyOworICoJ c2F4LnBwcG9sMnRwLmFkZHIuc2luX3BvcnQgPSBhZGRyLT5zaW5fcG9ydDsKKyAqCXNheC5wcHBv bDJ0cC5hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICoJc2F4LnBwcG9sMnRwLnNfdHVubmVs ICA9IHR1bm5lbF9pZDsKKyAqCXNheC5wcHBvbDJ0cC5zX3Nlc3Npb24gPSBzZXNzaW9uX2lkOwor ICoJc2F4LnBwcG9sMnRwLmRfdHVubmVsICA9IHBlZXJfdHVubmVsX2lkOworICoJc2F4LnBwcG9s MnRwLmRfc2Vzc2lvbiA9IHBlZXJfc2Vzc2lvbl9pZDsKKyAqICAKKyAqCXNlc3Npb25fZmQgPSBj b25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNheCwgc2l6ZW9mKHNheCkpOworICoKKyAq LworCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4K KworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Cisj aW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNs dWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRl IDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVk ZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorI2luY2x1ZGUgPGxpbnV4 L2lmX3BwcG94Lmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wcHBf Y2hhbm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BwcF9kZWZzLmg+CisjaW5jbHVkZSA8bGludXgv aWZfcHBwLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2gu aD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bmV0L2RzdC5oPgorCisj aW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2Rl ZmluZSBQUFBPTDJUUF9EUlZfVkVSU0lPTgkiVjAuNSIKKworLyogRGV2ZWxvcGVyIGRlYnVnIGNv ZGUuICovCisjaWYgMAorI2RlZmluZSBERUJVRwkvKiBEZWZpbmUgdG8gY29tcGlsZSBpbiB2ZXJ5 IHZlcmJvc2UgZGV2ZWxvcGVyIGRlYnVnICovCisjZW5kaWYKKworLyogVGltZW91dHMgYXJlIHNw ZWNpZmllZCBpbiBtaWxsaXNlY29uZHMgdG8vZnJvbSB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgSklG RklFU19UT19NUyh0KSAoKHQpICogMTAwMCAvIEhaKQorI2RlZmluZSBNU19UT19KSUZGSUVTKGop ICgoaiAqIEhaKSAvIDEwMDApCisKKy8qIEwyVFAgaGVhZGVyIGNvbnN0YW50cyAqLworI2RlZmlu ZSBMMlRQX0hEUkZMQUdfVAkgICAweDgwMDAKKyNkZWZpbmUgTDJUUF9IRFJGTEFHX0wJICAgMHg0 MDAwCisjZGVmaW5lIEwyVFBfSERSRkxBR19TCSAgIDB4MDgwMAorI2RlZmluZSBMMlRQX0hEUkZM QUdfTwkgICAweDAyMDAKKyNkZWZpbmUgTDJUUF9IRFJGTEFHX1AJICAgMHgwMTAwCisKKyNkZWZp bmUgTDJUUF9IRFJfVkVSX01BU0sgIDB4MDAwRgorI2RlZmluZSBMMlRQX0hEUl9WRVIJICAgMHgw MDAyCisKKy8qIFNwYWNlIGZvciBVRFAsIEwyVFAgYW5kIFBQUCBoZWFkZXJzLCBwbHVzIHNvbWUg c2xhY2sgKi8KKyNkZWZpbmUgUFBQT0wyVFBfSEVBREVSX09WRVJIRUFECTQwCisKKy8qIEp1c3Qg c29tZSByYW5kb20gbnVtYmVycyAqLworI2RlZmluZSBMMlRQX1RVTk5FTF9NQUdJQyAgIDB4NDIx MTREREEKKyNkZWZpbmUgTDJUUF9TRVNTSU9OX01BR0lDICAweDBDMDRFQjdECisKKyNkZWZpbmUg UFBQT0wyVFBfSEFTSF9CSVRTIDQKKyNkZWZpbmUgUFBQT0wyVFBfSEFTSF9TSVpFICgxIDw8IFBQ UE9MMlRQX0hBU0hfQklUUykKKworLyogRGVmYXVsdCB0cmFjZSBmbGFncyAqLworI2lmZGVmIERF QlVHCisjZGVmaW5lIFBQUE9MMlRQX0RFRkFVTFRfREVCVUdfRkxBR1MJLTEKKyNlbHNlCisjZGVm aW5lIFBQUE9MMlRQX0RFRkFVTFRfREVCVUdfRkxBR1MJMAorI2VuZGlmCisKKworLyogRGVidWcg a2VybmVsIG1lc3NhZ2UgY29udHJvbC4KKyAqIFZlcmJvc2UgZGVidWcgbWVzc2FnZXMgKEwyVFBf TVNHX0RFQlVHIGZsYWcpIGFyZSBvcHRpb25hbGx5IGNvbXBpbGVkIGluLgorICovCisjaWZkZWYg REVCVUcKKyNkZWZpbmUgRFBSSU5USyhfbWFzaywgX2ZtdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7 CQkJCQkJCQlcCisJCWlmICgoX21hc2spICYgUFBQT0wyVFBfTVNHX0RFQlVHKQkJCVwKKwkJCXBy aW50ayhLRVJOX0RFQlVHICJQUFBPTDJUUCAlczogIiBfZm10LAkJXAorCQkJICAgICAgIF9fRlVO Q1RJT05fXywgIyNhcmdzKTsJCQlcCisJfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgRFBSSU5U SyhfbWFzaywgc3Jncy4uLikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYgLyogREVCVUcgKi8KKwor I2RlZmluZSBQUklOVEsoX21hc2ssIF90eXBlLCBfbHZsLCBfZm10LCBhcmdzLi4uKQkJCVwKKwlk byB7CQkJCQkJCQlcCisJCWlmICgoX21hc2spICYgKF90eXBlKSkJCQkJCVwKKwkJCXByaW50ayhf bHZsICJQUFBPTDJUUDogIiBfZm10LCAjI2FyZ3MpOwkJXAorCX0gd2hpbGUoMCkKKworLyogRXh0 cmEgZHJpdmVyIGRlYnVnLiBTaG91bGQgb25seSBiZSBlbmFibGVkIGJ5IGRldmVsb3BlcnMgd29y a2luZyBvbgorICogdGhpcyBkcml2ZXIuIAorICovCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgRU5U RVJfRlVOQ1RJT04JIHByaW50ayhLRVJOX0RFQlVHICJQUFBPTDJUUDogLS0+ICVzXG4iLCBfX0ZV TkNUSU9OX18pCisjZGVmaW5lIEVYSVRfRlVOQ1RJT04JIHByaW50ayhLRVJOX0RFQlVHICJQUFBP TDJUUDogPC0tICVzXG4iLCBfX0ZVTkNUSU9OX18pCisjZWxzZQorI2RlZmluZSBFTlRFUl9GVU5D VElPTgkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIEVYSVRfRlVOQ1RJT04JIGRvIHsgfSB3aGls ZSgwKQorI2VuZGlmCisKK3N0cnVjdCBwcHBvbDJ0cF90dW5uZWw7CisKKy8qIERlc2NyaWJlcyBh IHNlc3Npb24uIEl0IGlzIHRoZSBza191c2VyX2RhdGEgZmllbGQgaW4gdGhlIFBQUG9MMlRQCisg KiBzb2NrZXQuIENvbnRhaW5zIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBpbmNvbWluZyBwYWNr ZXRzIGFuZCB0cmFuc21pdAorICogb3V0Z29pbmcgb25lcy4KKyAqLworc3RydWN0IHBwcG9sMnRw X3Nlc3Npb24KK3sKKwlpbnQJCQltYWdpYzsJCS8qIHNob3VsZCBiZSAKKwkJCQkJCSAqIEwyVFBf U0VTU0lPTl9NQUdJQyAqLworCWludAkJCW93bmVyOwkJLyogcGlkIHRoYXQgb3BlbmVkIHRoZSBz b2NrZXQgKi8KKwkKKwlzdHJ1Y3Qgc29jawkJKnNvY2s7CQkvKiBQb2ludGVyIHRvIHRoZSBzZXNz aW9uCisJCQkJCQkgKiBQUFBvWCBzb2NrZXQgKi8KKwlzdHJ1Y3Qgc29jawkJKnR1bm5lbF9zb2Nr OwkvKiBQb2ludGVyIHRvIHRoZSB0dW5uZWwgVURQIAorCQkJCQkJICogc29ja2V0ICovCisJCisJ c3RydWN0IHBwcG9sMnRwX2FkZHIJdHVubmVsX2FkZHI7CS8qIERlc2NyaXB0aW9uIG9mIHR1bm5l bCAqLworCisJc3RydWN0IHBwcG9sMnRwX3R1bm5lbAkqdHVubmVsOwkvKiBiYWNrIHBvaW50ZXIg dG8gdHVubmVsIAorCQkJCQkJICogY29udGV4dCAqLworCQorCWNoYXIJCQluYW1lWzIwXTsJLyog InNlc3MgeHh4eHgveXl5eXkiLCB3aGVyZSAKKwkJCQkJCSAqIHg9dHVubmVsX2lkLCB5PXNlc3Np b25faWQgKi8KKwlpbnQJCQltdHU7CisJaW50CQkJbXJ1OworCWludAkJCWZsYWdzOwkJLyogYWNj ZXNzZWQgYnkgUFBQSU9DR0ZMQUdTLiAKKwkJCQkJCSAqIFVudXNlZC4gKi8KKwlpbnQJCQlyZWN2 X3NlcToxOwkvKiBleHBlY3QgcmVjZWl2ZSBwYWNrZXRzIHdpdGggCisJCQkJCQkgKiBzZXF1ZW5j ZSBudW1iZXJzPyAqLworCWludAkJCXNlbmRfc2VxOjE7CS8qIHNlbmQgcGFja2V0cyB3aXRoIHNl cXVlbmNlIAorCQkJCQkJICogbnVtYmVycz8gKi8KKwlpbnQJCQlsbnNfbW9kZToxOwkvKiBiZWhh dmUgYXMgTE5TPyBMQUMgZW5hYmxlcyAKKwkJCQkJCSAqIHNlcXVlbmNlIG51bWJlcnMgdW5kZXIg CisJCQkJCQkgKiBjb250cm9sIG9mIExOUy4gKi8KKwlpbnQJCQlkZWJ1ZzsJCS8qIGJpdG1hc2sg b2YgZGVidWcgbWVzc2FnZSAKKwkJCQkJCSAqIGNhdGVnb3JpZXMgKi8KKwlpbnQJCQlyZW9yZGVy X3RpbWVvdXQ7IC8qIGNvbmZpZ3VyZWQgcmVvcmRlciB0aW1lb3V0IAorCQkJCQkJICAqIChpbiBq aWZmaWVzKSAqLworCXUxNgkJCW5yOwkJLyogc2Vzc2lvbiBOUiBzdGF0ZSAocmVjZWl2ZSkgKi8K Kwl1MTYJCQluczsJCS8qIHNlc3Npb24gTlIgc3RhdGUgKHNlbmQpICovCisJc3RydWN0IHBwcG9s MnRwX2lvY19zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZQlobGlzdDsJCS8qIEhhc2gg bGlzdCBub2RlICovCit9OworCisvKiBUaGUgc2tfdXNlcl9kYXRhIGZpZWxkIG9mIHRoZSB0dW5u ZWwncyBVRFAgc29ja2V0LiBJdCBjb250YWlucyBpbmZvIHRvIHRyYWNrCisgKiBhbGwgdGhlIGFz c29jaWF0ZWQgc2Vzc2lvbnMgc28gaW5jb21pbmcgcGFja2V0cyBjYW4gYmUgc29ydGVkIG91dAor ICovCitzdHJ1Y3QgcHBwb2wydHBfdHVubmVsCit7CisJaW50CQkJbWFnaWM7CQkvKiBTaG91bGQg YmUgTDJUUF9UVU5ORUxfTUFHSUMgKi8KKwkKKwlzdHJ1Y3QgcHJvdG8JCW9sZF9wcm90bzsJLyog b3JpZ2luYWwgcHJvdG8gKi8KKwlzdHJ1Y3QgcHJvdG8JCWwydHBfcHJvdG87CS8qIEwyVFAgcHJv dG8gKi8KKwlyd2xvY2tfdAkJaGxpc3RfbG9jazsJLyogcHJvdGVjdCBzZXNzaW9uX2hsaXN0ICov CisJc3RydWN0IGhsaXN0X2hlYWQJc2Vzc2lvbl9obGlzdFtQUFBPTDJUUF9IQVNIX1NJWkVdOyAK KwkJCQkJCS8qIGhhc2hlZCBsaXN0IG9mIHNlc3Npb25zLCAKKwkJCQkJCSAqIGhhc2hlZCBieSBp ZCAqLworCWludAkJCWRlYnVnOwkJLyogYml0bWFzayBvZiBkZWJ1ZyBtZXNzYWdlIAorCQkJCQkJ ICogY2F0ZWdvcmllcyAqLworCWNoYXIJCQluYW1lWzEyXTsJLyogInR1bmwgeHh4eHgiICovCisJ c3RydWN0IHBwcG9sMnRwX2lvY19zdGF0cyBzdGF0czsKKwkKKwl2b2lkICgqb2xkX2RhdGFfcmVh ZHkpKHN0cnVjdCBzb2NrICosIGludCk7CisJdm9pZCAoKm9sZF9za19kZXN0cnVjdCkoc3RydWN0 IHNvY2sgKik7CisKKwlzdHJ1Y3Qgc29jawkJKnNvY2s7CQkvKiBQYXJlbnQgc29ja2V0ICovCQor CXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsJCS8qIEtlZXAgYSBsaXN0IG9mIGFsbCBvcGVuIAorCQkJ CQkJICogcHJlcGFyZWQgc29ja2V0cyAqLworCisJYXRvbWljX3QJCXNlc3Npb25fY291bnQ7Cit9 OworCisvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYnVpbGQgdHJhbnNtaXQgTDJUUCBoZWFkZXJzLgor ICogVW5mb3J0dW5hdGVseSB0aGUgc2l6ZSBpcyBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uIHdoZXRo ZXIgc2VxdWVuY2UgbnVtYmVycworICogYXJlIGVuYWJsZWQuCisgKi8KKyNkZWZpbmUgUFBQT0wy VFBfTDJUUF9IRFJfU0laRV9TRVEJCTEwCisjZGVmaW5lIFBQUE9MMlRQX0wyVFBfSERSX1NJWkVf Tk9TRVEJCTYKKworCitzdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVs ICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworc3RhdGljIHN0cnVjdCBwcHBfY2hhbm5l bF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7IHBwcG9sMnRwX3htaXQgLCBOVUxMIH07CitzdGF0 aWMgc3RydWN0IHByb3RvX29wcyBwcHBvbDJ0cF9vcHM7CitzdGF0aWMgTElTVF9IRUFEKHBwcG9s MnRwX3R1bm5lbF9saXN0KTsKKworLyogTWFjcm9zIHRvIGRlcml2ZSBzZXNzaW9uL3R1bm5lbCBj b250ZXh0IHBvaW50ZXJzIGZyb20gYSBzb2NrZXQuICovCisjZGVmaW5lIFNPQ0tfMl9TRVNTSU9O KHNvY2ssIHNlc3Npb24sIGVyciwgZXJydmFsLCBsYWJlbCwgcXVpZXQpIFwKKwlzZXNzaW9uID0g KHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICopKChzb2NrKS0+c2tfdXNlcl9kYXRhKTsgIFwKKwlp ZiAoIXNlc3Npb24gfHwgc2Vzc2lvbi0+bWFnaWMgIT0gTDJUUF9TRVNTSU9OX01BR0lDKSB7CSAg ICAgICBcCisJCWlmICghcXVpZXQpIFwKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiVkOiBC QUQgU0VTU0lPTiBNQUdJQyAiIFwKKwkJCSAgICAgICAiKCIgI3NvY2sgIj0lcCkgc2Vzc2lvbj0l cCBtYWdpYz0leFxuIiwgXAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElO RV9fLCBzb2NrLCBcCisJCQkgICAgICAgc2Vzc2lvbiwgc2Vzc2lvbiA/IHNlc3Npb24tPm1hZ2lj IDogMCk7IFwKKwkJZXJyID0gZXJydmFsOyBcCisJCWdvdG8gbGFiZWw7IFwKKwl9CisJCisjZGVm aW5lIFNPQ0tfMl9UVU5ORUwoc29jaywgdHVubmVsLCBlcnIsIGVycnZhbCwgbGFiZWwsIHF1aWV0 KSBcCisJdHVubmVsID0gKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKikoKHNvY2spLT5za191c2Vy X2RhdGEpOwkgXAorCWlmICghdHVubmVsIHx8IHR1bm5lbC0+bWFnaWMgIT0gTDJUUF9UVU5ORUxf TUFHSUMpIHsJICAgICBcCisJCWlmICghcXVpZXQpIFwKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6 ICVzOiVkOiBCQUQgVFVOTkVMIE1BR0lDICIgXAorCQkJICAgICAgICIoIiAjc29jayAiPSVwKSB0 dW5uZWw9JXAgbWFnaWM9JXhcbiIsIFwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sIF9fRklMRV9f LCBfX0xJTkVfXywgc29jaywgXAorCQkJICAgICAgIHR1bm5lbCwgdHVubmVsID8gdHVubmVsLT5t YWdpYyA6IDApOyBcCisJCWVyciA9IGVycnZhbDsgXAorCQlnb3RvIGxhYmVsOyBcCisJfQorCisv KiBTZXNzaW9uIGhhc2ggbGlzdC4KKyAqIFRoZSBzZXNzaW9uX2lkIFNIT1VMRCBiZSByYW5kb20g YWNjb3JkaW5nIHRvIFJGQzI2NjEsIGJ1dCBzZXZlcmFsCisgKiBMMlRQIGltcGxlbWVudGF0aW9u cyAoQ2lzY28gYW5kIE1pY3Jvc29mdCkgdXNlIGluY3JlbWVudGluZworICogc2Vzc2lvbl9pZHMu ICBTbyB3ZSBkbyBhIHJlYWwgaGFzaCBvbiB0aGUgc2Vzc2lvbl9pZCwgcmF0aGVyIHRoYW4gYQor ICogc2ltcGxlIGJpdG1hc2suCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X2hlYWQg KgorcHBwb2wydHBfc2Vzc2lvbl9pZF9oYXNoKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5l bCwgdTE2IHNlc3Npb25faWQpCit7CisJdW5zaWduZWQgbG9uZyBoYXNoX3ZhbCA9ICh1bnNpZ25l ZCBsb25nKSBzZXNzaW9uX2lkOworCXJldHVybiAmdHVubmVsLT5zZXNzaW9uX2hsaXN0W2hhc2hf bG9uZyhoYXNoX3ZhbCwgUFBQT0wyVFBfSEFTSF9CSVRTKV07Cit9CisKKy8qIExvb2t1cCBhIHNl c3Npb24gYnkgaWQKKyAqLworc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICoKK3BwcG9s MnRwX3Nlc3Npb25fZmluZChzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWwsIHUxNiBzZXNz aW9uX2lkKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpzZXNzaW9uX2xpc3QgPSAKKwkJcHBwb2wy dHBfc2Vzc2lvbl9pZF9oYXNoKHR1bm5lbCwgc2Vzc2lvbl9pZCk7CisJc3RydWN0IGhsaXN0X25v ZGUgKnRtcDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqd2FsazsKKwlzdHJ1Y3QgcHBwb2wydHBfc2Vz c2lvbiAqc2Vzc2lvbjsKKworCWhsaXN0X2Zvcl9lYWNoX3NhZmUod2FsaywgdG1wLCBzZXNzaW9u X2xpc3QpIHsKKwkJc2Vzc2lvbiA9IGhsaXN0X2VudHJ5KHdhbGssIHN0cnVjdCBwcHBvbDJ0cF9z ZXNzaW9uLCBobGlzdCk7CisJCWlmIChzZXNzaW9uLT50dW5uZWxfYWRkci5zX3Nlc3Npb24gPT0g c2Vzc2lvbl9pZCkgeworCQkJcmV0dXJuIHNlc3Npb247CisJCX0KKwl9CisKKwlyZXR1cm4gTlVM TDsKK30KKworLyogRWFzeSB3YXkgdG8gbG9jYXRlIGZlYXR1cmVzIG5vdCB5ZXQgaW1wbGVtZW50 ZWQgCisgKi8KK3N0YXRpYyB2b2lkIHBwcG9sMnRwX3dhcm5fbm90X3lldF9pbXBsZW1lbnRlZChp bnQgZGVidWdfbWFzaywgY29uc3QgY2hhciAqd2hhdCkKK3sKKwlQUklOVEsoZGVidWdfbWFzaywg UFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fV0FSTklORywgCisJICAgICAgICJmZWF0dXJlICVz IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIHdoYXQpOworfQorCisvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKyAqIFJlY2VpdmUgZGF0YSBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisv KiBJbnRlcm5hbCByZWNlaXZlIGZyYW1lLiBEbyB0aGUgcmVhbCB3b3JrIG9mIHJlY2VpdmluZyBh biBMMlRQIGRhdGEgZnJhbWUKKyAqIGhlcmUuCisgKiBSZXR1cm5zIDAgaWYgdGhlIHBhY2tldCB3 YXMgYSBkYXRhIHBhY2tldCBhbmQgd2FzIHN1Y2Nlc3NmdWxseSBwYXNzZWQgb24uCisgKiBSZXR1 cm5zIDEgaWYgdGhlIHBhY2tldCB3YXMgbm90IGEgZ29vZCBkYXRhIHBhY2tldCBhbmQgY291bGQg bm90IGJlCisgKiBmb3J3YXJkZWQuICBBbGwgc3VjaCBwYWNrZXRzIGFyZSBwYXNzZWQgdXAgdG8g dXNlcnNwYWNlIHRvIGRlYWwgd2l0aC4KKyAqLworc3RhdGljIGludCBwcHBvbDJ0cF9yZWN2X2Nv cmUoc3RydWN0IHNvY2sgKnNvY2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHBw cG94X29wdCAqcG87CisJc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gKnNlc3Npb24gPSBOVUxMOwor CWludCBlcnJvciA9IDA7CisJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsOworCXN0cnVj dCBzb2NrICpzZXNzaW9uX3NvY2sgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKnB0cjsKKwl1MTYg aGRyZmxhZ3M7CisJdTE2IHR1bm5lbF9pZCwgc2Vzc2lvbl9pZDsKKwlpbnQgbGVuZ3RoOworCWlu dCByZXN1bHQ7CisKKwlFTlRFUl9GVU5DVElPTjsKKworCVNPQ0tfMl9UVU5ORUwoc29jaywgdHVu bmVsLCBlcnJvciwgMSwgZW5kLCAwKTsKKworCS8qIFNob3J0IHBhY2tldD8gKi8KKwlpZiAoc2ti LT5sZW4gPCBzaXplb2Yoc3RydWN0IHVkcGhkcikpIHsKKwkJUFJJTlRLKHR1bm5lbC0+ZGVidWcs IFBQUE9MMlRQX01TR19EQVRBLCBLRVJOX0lORk8sIAorCQkgICAgICAgIiVzOiByZWN2IHNob3J0 IHBhY2tldCAobGVuPSVkKVxuIiwgdHVubmVsLT5uYW1lLCBza2ItPmxlbik7CisJCWdvdG8gZW5k OworCX0KKworCS8qIFBvaW50IHRvIEwyVFAgaGVhZGVyICovCisJcHRyID0gc2tiLT5kYXRhICsg c2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCisJLyogR2V0IEwyVFAgaGVhZGVyIGZsYWdzICovCisJ aGRyZmxhZ3MgPSBudG9ocygqKHUxNiopcHRyKTsKKworCS8qIFRyYWNlIHBhY2tldCBjb250ZW50 cywgaWYgZW5hYmxlZCAqLworCWlmICh0dW5uZWwtPmRlYnVnICYgUFBQT0wyVFBfTVNHX0RBVEEp IHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWN2OiAiIEtFUk5fREVCVUcsIHR1bm5lbC0+ bmFtZSk7CisKKwkJZm9yIChsZW5ndGggPSAwOyBsZW5ndGggPCAxNjsgbGVuZ3RoKyspCisJCQlw cmludGsoIiAlMDJYIiwgcHRyW2xlbmd0aF0pOworCQlwcmludGsoIlxuIik7CisJfQorCisJLyog R2V0IGxlbmd0aCBvZiBMMlRQIHBhY2tldCAqLworCWxlbmd0aCA9IG50b2hzKHNrYi0+aC51aC0+ bGVuKSAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkKKwkvKiBUb28gc2hvcnQ/ICovCisJaWYg KGxlbmd0aCA8IDEyKSB7CisJCVBSSU5USyh0dW5uZWwtPmRlYnVnLCBQUFBPTDJUUF9NU0dfREFU QSwgS0VSTl9JTkZPLCAKKwkJICAgICAgICIlczogcmVjdiBzaG9ydCBMMlRQIHBhY2tldCAobGVu PSVkKVxuIiwgdHVubmVsLT5uYW1lLCBsZW5ndGgpOworCQlnb3RvIGVuZDsKKwl9CisJCisJLyog SWYgdHlwZSBpcyBjb250cm9sIHBhY2tldCwgaXQgaXMgaGFuZGxlZCBieSB1c2Vyc3BhY2UuICov CisJaWYgKGhkcmZsYWdzICYgTDJUUF9IRFJGTEFHX1QpIHsgCisJCVBSSU5USyh0dW5uZWwtPmRl YnVnLCBQUFBPTDJUUF9NU0dfREFUQSwgS0VSTl9ERUJVRywgCisJCSAgICAgICAiJXM6IHJlY3Yg Y29udHJvbCBwYWNrZXQsIGxlbj0lZFxuIiwgdHVubmVsLT5uYW1lLCBsZW5ndGgpOworCQlnb3Rv IGVuZDsKKwl9CisKKwkvKiBTa2lwIGZsYWdzICovCisJcHRyICs9IDI7CisJCisJLyogSWYgbGVu Z3RoIGlzIHByZXNlbnQsIHNraXAgaXQgKi8KKwlpZiAoaGRyZmxhZ3MgJiBMMlRQX0hEUkZMQUdf TCkKKwkJcHRyICs9IDI7CisKKwkvKiBFeHRyYWN0IHR1bm5lbCBhbmQgc2Vzc2lvbiBJRCAqLwor CXR1bm5lbF9pZCA9IG50b2hzKCoodTE2ICopIHB0cik7CisJcHRyICs9IDI7CisJc2Vzc2lvbl9p ZCA9IG50b2hzKCoodTE2ICopIHB0cik7CisJcHRyICs9IDI7CisKKwkvKiBGaW5kIHRoZSBzZXNz aW9uIGNvbnRleHQgKi8KKwlzZXNzaW9uID0gcHBwb2wydHBfc2Vzc2lvbl9maW5kKHR1bm5lbCwg c2Vzc2lvbl9pZCk7CisJaWYgKCFzZXNzaW9uKSB7CisJCS8qIE5vdCBmb3VuZD8gUGFzcyB0byB1 c2Vyc3BhY2UgdG8gZGVhbCB3aXRoICovCisJCVBSSU5USyh0dW5uZWwtPmRlYnVnLCBQUFBPTDJU UF9NU0dfREFUQSwgS0VSTl9JTkZPLCAKKwkJICAgICAgICIlczogbm8gc29ja2V0IGZvdW5kICgl aHUvJWh1KS4gUGFzc2luZyB1cC5cbiIsIAorCQkgICAgICAgdHVubmVsLT5uYW1lLCB0dW5uZWxf aWQsIHNlc3Npb25faWQpOworCQlnb3RvIGVuZDsKKwl9CisJc29ja19ob2xkKHNlc3Npb24tPnNv Y2spOworCisJRFBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgIiVzOiBzb2NrZXQgcmN2YnVmIGFsbG9j PSVkXG4iLCAKKwkJc2Vzc2lvbi0+bmFtZSwgYXRvbWljX3JlYWQoJnNvY2stPnNrX3JtZW1fYWxs b2MpKTsKKworCS8qIFRoZSByZWYgY291bnQgb24gdGhlIHNvY2tldCB3YXMgaW5jcmVhc2VkIGJ5 IHRoZSBhYm92ZSBjYWxsIHNpbmNlCisJICogd2Ugbm93IGhvbGQgYSBwb2ludGVyIHRvIHRoZSBz ZXNzaW9uLiBUYWtlIGNhcmUgdG8gZG8gc29ja19wdXQoKQorCSAqIHdoZW4gZXhpdGluZyB0aGlz IGZ1bmN0aW9uIGZyb20gbm93IG9uLi4uCisJICovCisKKwkvKiBIYW5kbGUgdGhlIG9wdGlvbmFs IHNlcXVlbmNlIG51bWJlcnMuICBJZiB3ZSBhcmUgdGhlIExBQywKKwkgKiBlbmFibGUvZGlzYWJs ZSBzZXF1ZW5jZSBudW1iZXJzIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBMTlMuICBJZgorCSAq IG5vIHNlcXVlbmNlIG51bWJlcnMgcHJlc2VudCBidXQgd2Ugd2VyZSBleHBlY3RpbmcgdGhlbSwg ZGlzY2FyZAorCSAqIGZyYW1lLgorCSAqLworCWlmIChoZHJmbGFncyAmIEwyVFBfSERSRkxBR19T KSB7CisJCXUxNiBucywgbnI7CisJCW5zID0gbnRvaHMoKih1MTYgKikgcHRyKTsKKwkJcHRyICs9 IDI7CisJCW5yID0gbnRvaHMoKih1MTYgKikgcHRyKTsKKwkJcHRyICs9IDI7CisKKwkJLyogUmVj ZWl2ZWQgYSBwYWNrZXQgd2l0aCBzZXF1ZW5jZSBudW1iZXJzLiBJZiB3ZSdyZSB0aGUgTE5TLAor CQkgKiBjaGVjayBpZiB3ZSBzcmUgc2VuZGluZyBzZXF1ZW5jZSBudW1iZXJzIGFuZCBpZiBub3Qs CisJCSAqIGNvbmZpZ3VyZSBpdCBzby4KKwkJICovCisJCWlmICgoIXNlc3Npb24tPmxuc19tb2Rl KSAmJiAoIXNlc3Npb24tPnNlbmRfc2VxKSkgeworCQkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQ UFBPTDJUUF9NU0dfU0VRLCBLRVJOX0lORk8sIAorCQkJICAgICAgICIlczogcmVxdWVzdGVkIHRv IGVuYWJsZSBzZXEgbnVtYmVycyBieSBMTlNcbiIsIAorCQkJICAgICAgIHNlc3Npb24tPm5hbWUp OworCQkJc2Vzc2lvbi0+c2VuZF9zZXEgPSAtMTsKKwkJfQorCisJCVBSSU5USyhzZXNzaW9uLT5k ZWJ1ZywgUFBQT0wyVFBfTVNHX1NFUSwgS0VSTl9ERUJVRywgCisJCSAgICAgICAiJXM6IHJlY3Yg ZGF0YSBucz0laHUsIG5yPSVodSwgc2Vzc2lvbiBucj0laHVcbiIsIAorCQkgICAgICAgc2Vzc2lv bi0+bmFtZSwgbnMsIG5yLCBzZXNzaW9uLT5ucik7CisKKwkJLyogRGlzY2FyZCBvdXQtb2Ytc2Vx dWVuY2UgcGFja2V0cyAqLworCQlpZiAobnMgIT0gc2Vzc2lvbi0+bnIpIHsKKwkJCXNlc3Npb24t PnN0YXRzLnJ4X29vc19wYWNrZXRzKys7CisJCQlzZXNzaW9uLT5zdGF0cy5yeF9lcnJvcnMrKzsK KwkJCWdvdG8gZGlzY2FyZDsKKwkJfQorCisJCS8qIEJ1bXAgb3VyIE5yICovCisJCXNlc3Npb24t Pm5yKys7CisJCVBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX1NFUSwgS0VSTl9E RUJVRywgCisJCSAgICAgICAiJXM6IHVwZGF0ZWQgbnIgdG8gJWh1XG4iLCBzZXNzaW9uLT5uYW1l LCBzZXNzaW9uLT5ucik7CisJfSBlbHNlIHsKKwkJLyogTm8gc2VxdWVuY2UgbnVtYmVycy4KKwkJ ICogSWYgdXNlciBoYXMgY29uZmlndXJlZCBtYW5kYXRvcnkgc2VxdWVuY2UgbnVtYmVycywgZGlz Y2FyZC4KKwkJICovCisJCWlmIChzZXNzaW9uLT5yZWN2X3NlcSkgeworCQkJUFJJTlRLKHNlc3Np b24tPmRlYnVnLCBQUFBPTDJUUF9NU0dfU0VRLCBLRVJOX1dBUk5JTkcsIAorCQkJICAgICAgICIl czogcmVjdiBkYXRhIGhhcyBubyBzZXEgbnVtYmVycyB3aGVuIHJlcXVpcmVkLiAiCisJCQkgICAg ICAgIkRpc2NhcmRpbmdcbiIsIHNlc3Npb24tPm5hbWUpOworCQkJc2Vzc2lvbi0+c3RhdHMucnhf c2VxX2Rpc2NhcmRzKys7CisJCQlzZXNzaW9uLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWdvdG8g ZGlzY2FyZDsKKwkJfQorCisJCS8qIElmIHdlJ3JlIHRoZSBMQUMgYW5kIHdlJ3JlIHNlbmRpbmcg c2VxdWVuY2UgbnVtYmVycywgdGhlCisJCSAqIExOUyBoYXMgcmVxdWVzdGVkIHRoYXQgd2Ugbm8g bG9uZ2VyIHNlbmQgc2VxdWVuY2UgbnVtYmVycy4KKwkJICogSWYgd2UncmUgdGhlIExOUyBhbmQg d2UncmUgc2VuZGluZyBzZXF1ZW5jZSBudW1iZXJzLCB0aGUKKwkJICogTEFDIGlzIGJyb2tlbi4g RGlzY2FyZCB0aGUgZnJhbWUuCisJCSAqLworCQlpZiAoKCFzZXNzaW9uLT5sbnNfbW9kZSkgJiYg KHNlc3Npb24tPnNlbmRfc2VxKSkgeworCQkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBPTDJU UF9NU0dfU0VRLCBLRVJOX0lORk8sIAorCQkJICAgICAgICIlczogcmVxdWVzdGVkIHRvIGRpc2Fi bGUgc2VxIG51bWJlcnMgYnkgTE5TXG4iLCAKKwkJCSAgICAgICBzZXNzaW9uLT5uYW1lKTsKKwkJ CXNlc3Npb24tPnNlbmRfc2VxID0gMDsKKwkJfSBlbHNlIGlmIChzZXNzaW9uLT5zZW5kX3NlcSkg eworCQkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBPTDJUUF9NU0dfU0VRLCBLRVJOX1dBUk5J TkcsIAorCQkJICAgICAgICIlczogcmVjdiBkYXRhIGhhcyBubyBzZXEgbnVtYmVycyB3aGVuIHJl cXVpcmVkLiAiCisJCQkgICAgICAgIkRpc2NhcmRpbmdcbiIsIHNlc3Npb24tPm5hbWUpOworCQkJ c2Vzc2lvbi0+c3RhdHMucnhfc2VxX2Rpc2NhcmRzKys7CisJCQlzZXNzaW9uLT5zdGF0cy5yeF9l cnJvcnMrKzsKKwkJCWdvdG8gZGlzY2FyZDsKKwkJfQorCX0KKwkJCisJLyogSWYgb2Zmc2V0IGJp dCBzZXQsIHNraXAgaXQuICovCisJaWYgKGhkcmZsYWdzICYgTDJUUF9IRFJGTEFHX08pCisJCXB0 ciArPSAyICsgbnRvaHMoKih1MTYgKikgcHRyKTsKKworCXNrYl9wdWxsKHNrYiwgcHRyIC0gc2ti LT5kYXRhKTsKKworCS8qIFNraXAgUFBQIGhlYWRlciwgaWYgcHJlc2VudC4JIEluIHRlc3Rpbmcs IE1pY3Jvc29mdCBMMlRQIGNsaWVudHMKKwkgKiBkb24ndCBzZW5kIHRoZSBQUFAgaGVhZGVyIChQ UFAgaGVhZGVyIGNvbXByZXNzaW9uIGVuYWJsZWQpLCBidXQKKwkgKiBvdGhlciBjbGllbnRzIGNh biBpbmNsdWRlIHRoZSBoZWFkZXIuIFNvIHdlIGNvcGUgd2l0aCBib3RoIGNhc2VzCisJICogaGVy ZS4gVGhlIFBQUCBoZWFkZXIgaXMgYWx3YXlzIEZGMDMgd2hlbiB1c2luZyBMMlRQLgorCSAqCisJ ICogTm90ZSB0aGF0IHNrYi0+ZGF0YVtdIGlzbid0IGRlcmVmZXJlbmNlZCBmcm9tIGEgdTE2IHB0 ciBoZXJlIHNpbmNlCisJICogdGhlIGZpZWxkIG1heSBiZSB1bmFsaWduZWQuCisJICovCisJaWYg KChza2ItPmRhdGFbMF0gPT0gMHhmZikgJiYgKHNrYi0+ZGF0YVsxXSA9PSAweDAzKSkKKwkJc2ti X3B1bGwoc2tiLCAyKTsKKworCS8qIFdlJ3JlIGFib3V0IHRvIHJlcXVldWUgdGhlIHNrYiwgc28g dW5saW5rIGl0IGFuZCByZXR1cm4gcmVzb3VyY2VzCisJICogdG8gaXRzIGN1cnJlbnQgb3duZXIg KGEgc29ja2V0IHJlY2VpdmUgYnVmZmVyKS4gQWxzbyByZWxlYXNlIHRoZQorCSAqIGRzdCB0byBm b3JjZSBhIHJvdXRlIGxvb2t1cCBvbiB0aGUgaW5uZXIgSVAgcGFja2V0IHNpbmNlIHNrYi0+ZHN0 CisJICogY3VycmVudGx5IHBvaW50cyB0byB0aGUgZHN0IG9mIHRoZSBVRFAgdHVubmVsLgorCSAq LworCXNrYl91bmxpbmsoc2tiKTsKKwlza2Jfb3JwaGFuKHNrYik7CisJZHN0X3JlbGVhc2Uoc2ti LT5kc3QpOworCXNrYi0+ZHN0ID0gTlVMTDsKKworCXR1bm5lbC0+c3RhdHMucnhfcGFja2V0cysr OworCXR1bm5lbC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOworCXNlc3Npb24tPnN0YXRzLnJ4 X3BhY2tldHMrKzsKKwlzZXNzaW9uLT5zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGg7CisKKwkvKiBJ ZiB0aGUgc29ja2V0IGlzIGJvdW5kLCBzZW5kIGl0IGluIHRvIFBQUCdzIGlucHV0IHF1ZXVlLiAg T3RoZXJ3aXNlCisJICogcXVldWUgaXQgb24gdGhlIHNvY2tldC4KKwkgKi8KKwlzZXNzaW9uX3Nv Y2sgPSBzZXNzaW9uLT5zb2NrOworCWlmIChzZXNzaW9uX3NvY2stPnNrX3N0YXRlICYgUFBQT1hf Qk9VTkQpIHsKKwkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBPTDJUUF9NU0dfREFUQSwgS0VS Tl9ERUJVRywgCisJCSAgICAgICAiJXM6IHJlY3YgJWQgYnl0ZSBkYXRhIGZyYW1lLCBwYXNzaW5n IHRvIHBwcFxuIiwgCisJCSAgICAgICBzZXNzaW9uLT5uYW1lLCBsZW5ndGgpOworCQlwbyA9IHBw cG94X3NrKHNlc3Npb25fc29jayk7CisJCXBwcF9pbnB1dCgmcG8tPmNoYW4sIHNrYik7CisJfSBl bHNlIHsKKwkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBPTDJUUF9NU0dfREFUQSwgS0VSTl9J TkZPLCAKKwkJICAgICAgICIlczogc29ja2V0IG5vdCBib3VuZFxuIiwgc2Vzc2lvbi0+bmFtZSk7 CisJCS8qIE5vdCBib3VuZC4gUXVldWUgaXQgbm93ICovCisJCXNvY2tfcXVldWVfcmN2X3NrYihz ZXNzaW9uX3NvY2ssIHNrYik7CisJfQorCisJcmVzdWx0ID0gMDsKKworb3V0OgorCURQUklOVEso c2Vzc2lvbi0+ZGVidWcsICJjYWxsaW5nIHNvY2tfcHV0OyByZWZjbnQ9JWRcbiIsIAorCQlzZXNz aW9uLT5zb2NrLT5za19yZWZjbnQuY291bnRlcik7CisJc29ja19wdXQoc2Vzc2lvbi0+c29jayk7 CisJRVhJVF9GVU5DVElPTjsKKwlyZXR1cm4gcmVzdWx0OworCitkaXNjYXJkOgorCURQUklOVEso c2Vzc2lvbi0+ZGVidWcsICJkaXNjYXJkaW5nIHNrYiwgbGVuPSVkXG4iLCBza2ItPmxlbik7CisJ c2tiX3VubGluayhza2IpOworCWtmcmVlX3NrYihza2IpOworCXJlc3VsdCA9IDA7CisJZ290byBv dXQ7CisKK2VuZDoKKwlFWElUX0ZVTkNUSU9OOworCXJldHVybiAxOworfQorCisvKiBUaGUgZGF0 YV9yZWFkeSBob29rIG9uIHRoZSBVRFAgc29ja2V0LiBTY2FuIHRoZSBpbmNvbWluZyBwYWNrZXQg bGlzdCBmb3IKKyAqIHBhY2tldHMgdG8gcHJvY2VzcworICovCitzdGF0aWMgdm9pZCBwcHBvbDJ0 cF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgaW50IGxlbikKK3sKKwlpbnQgZXJyOworCXN0 cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWlu dCBwcm9jZXNzZWQgPSAwOworCQorCUVOVEVSX0ZVTkNUSU9OOworCVNPQ0tfMl9UVU5ORUwoc2ss IHR1bm5lbCwgZXJyLCAtRUJBREYsIGVuZCwgMCk7CisJCisJUFJJTlRLKHR1bm5lbC0+ZGVidWcs IFBQUE9MMlRQX01TR19EQVRBLCBLRVJOX0RFQlVHLCAKKwkgICAgICAgIiVzOiByZWNlaXZlZCAl ZCBieXRlc1xuIiwgdHVubmVsLT5uYW1lLCBsZW4pOworCQorCS8qIEZJWE1FOiBEbyB3ZSBuZWVk IHRvIGxvY2sgdGhlIHNvY2tldCBoZXJlPyAqLworCXNrYl9xdWV1ZV93YWxrKCZzay0+c2tfcmVj ZWl2ZV9xdWV1ZSwgc2tiKSB7CisJCWlmIChwcHBvbDJ0cF9yZWN2X2NvcmUoc2ssIHNrYikpIHsK KwkJCS8qIHNrYiB3YXMgcGFzc2VkIHRvIHVzZXJzcGFjZSAqLworCQkJcHJvY2Vzc2VkID0gMTsK KwkJCVBSSU5USyh0dW5uZWwtPmRlYnVnLCBQUFBPTDJUUF9NU0dfREFUQSwgS0VSTl9ERUJVRywg CisJCQkgICAgICAgIiVzOiBwYWNrZXQgcGFzc2VkIHRvIHVzZXJzcGFjZVxuIiwgCisJCQkgICAg ICAgdHVubmVsLT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCVBSSU5USyh0dW5uZWwtPmRlYnVnLCBQ UFBPTDJUUF9NU0dfREFUQSwgS0VSTl9ERUJVRywgCisJCQkgICAgICAgIiVzOiBkYXRhIHBhY2tl dCBhY2NlcHRlZFxuIiwgdHVubmVsLT5uYW1lKTsKKwkJCS8qIElmIHRoZSBwYWNrZXQgaGFzIGJl ZW4gYWNjZXB0ZWQgaXQgaXMgdGhlCisJCQkgKiByZXNwb25zaWJpbGl0eSBvZiB0aGUgcmVjZWl2 ZXIgKGVpdGhlciBzb2NrZXQgb3IKKwkJCSAqIHBwcCBkZXZpY2UpIHRvIGRpc3Bvc2Ugb2YgaXQu CisJCQkgKgorCQkJICogQWxzbywgc2luY2UgcmVjdl9jb3JlIGhhcyByZXF1ZXVlZCB0aGUgcGFj a2V0CisJCQkgKiBlbHNld2hlcmUsIGl0J3Mgbm90IHNhZmUgdG8gY29udGludWUgdGhpcyBsb29w LCBzbworCQkJICogd2UgYnJlYWsKKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHBy b2Nlc3NlZCkgeworCQlEUFJJTlRLKHR1bm5lbC0+ZGVidWcsICIlczogY2FsbGluZyBvbGQgb2xk X2RhdGFfcmVhZHlcbiIsIAorCQkJdHVubmVsLT5uYW1lKTsKKwkJdHVubmVsLT5vbGRfZGF0YV9y ZWFkeShzaywgbGVuKTsKKwl9CitlbmQ6CisJRVhJVF9GVU5DVElPTjsKKwlyZXR1cm47Cit9CisK Ky8qIFJlY2VpdmUgbWVzc2FnZS4gVGhpcyBpcyB0aGUgcmVjdm1zZyBmb3IgdGhlIFBQUG9MMlRQ IHNvY2tldC4KKyAqLworc3RhdGljIGludCBwcHBvbDJ0cF9yZWN2bXNnKHN0cnVjdCBraW9jYiAq aW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgCisJCQkgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBz aXplX3QgbGVuLAorCQkJICAgIGludCBmbGFncykKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qg c2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKworCUVO VEVSX0ZVTkNUSU9OOworCisJZXJyID0gLUVJTzsKKwlpZiAoc29jay0+c3RhdGUgJiBQUFBPWF9C T1VORCkKKwkJZ290byBlcnJvcjsKKwkJCQorCW1zZy0+bXNnX25hbWVsZW4gPSAwOworCQorCXNr Yj1za2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MgJiB+TVNHX0RPTlRXQUlULAorCQkJICAgICAg ZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOworCWlmIChza2IpIHsKKwkJZXJyID0gbWVtY3B5 X3RvaW92ZWMobXNnLT5tc2dfaW92LCAodW5zaWduZWQgY2hhciAqKSBza2ItPmRhdGEsCisJCQkJ ICAgICBza2ItPmxlbik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBkb19za2JfZnJlZTsKKwkJ ZXJyID0gc2tiLT5sZW47CisJfQorZG9fc2tiX2ZyZWU6CisJaWYgKHNrYikKKwkJa2ZyZWVfc2ti KHNrYik7CitlcnJvcjoKKwlFWElUX0ZVTkNUSU9OOworCXJldHVybiBlcnI7Cit9CisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqIFRyYW5zbWl0IGhhbmRsaW5nCisgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8q IEludGVybmFsIFVEUCBzb2NrZXQgdHJhbnNtaXNzaW9uCisgKi8KK3N0YXRpYyBpbnQgcHBwb2wy dHBfdWRwX3NvY2tfc2VuZChzdHJ1Y3Qga2lvY2IgKmlvY2IsCisJCQkJICBzdHJ1Y3QgcHBwb2wy dHBfc2Vzc2lvbiAqc2Vzc2lvbiwgCisJCQkJICBzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5u ZWwsCisJCQkJICBzdHJ1Y3QgbXNnaGRyICptc2csIGludCB0b3RhbF9sZW4pCit7CisJbW1fc2Vn bWVudF90IGZzOworCWludCBlcnJvcjsKKworCUVOVEVSX0ZVTkNUSU9OOworCisJRFBSSU5USyhz ZXNzaW9uLT5kZWJ1ZywgIiVzOiB1ZHBfc2VuZG1zZyBjYWxsLi4uXG4iLCBzZXNzaW9uLT5uYW1l KTsKKworCS8qIFNldCB0byB1c2Vyc3BhY2UgZGF0YSBzZWdtZW50IHdoaWxlIHdlIGRvIGEgc2Vu ZG1zZygpIGNhbGwuCVdlJ3JlCisJICogYWN0dWFsbHkgY2FsbGluZyBhIHVzZXJzcGFjZSBBUEkg ZnJvbSB0aGUga2VybmVsIGhlcmUuLi4KKwkgKi8KKwlmcyA9IGdldF9mcygpOworCXNldF9mcyhn ZXRfZHMoKSk7CisKKwkvKiBUaGUgYWN0dWFsIHNlbmRtc2coKSBjYWxsLi4uICovCisJZXJyb3Ig PSB0dW5uZWwtPm9sZF9wcm90by5zZW5kbXNnKGlvY2IsIHNlc3Npb24tPnR1bm5lbF9zb2NrLCBt c2csIHRvdGFsX2xlbik7CisJaWYgKGVycm9yID09IC1FSU9DQlFVRVVFRCkKKwkJZXJyb3IgPSB3 YWl0X29uX3N5bmNfa2lvY2IoaW9jYik7CisKKwkvKiBCYWNrIHRvIGtlcm5lbCBzcGFjZSAqLwor CXNldF9mcyhmcyk7CisKKwlpZiAoZXJyb3IgPj0gMCkgeworCQl0dW5uZWwtPnN0YXRzLnR4X3Bh Y2tldHMrKzsKKwkJdHVubmVsLT5zdGF0cy50eF9ieXRlcyArPSBlcnJvcjsKKwkJc2Vzc2lvbi0+ c3RhdHMudHhfcGFja2V0cysrOworCQlzZXNzaW9uLT5zdGF0cy50eF9ieXRlcyArPSBlcnJvcjsK Kwl9IGVsc2UgeworCQl0dW5uZWwtPnN0YXRzLnR4X2Vycm9ycysrOworCQlzZXNzaW9uLT5zdGF0 cy50eF9lcnJvcnMrKzsKKwl9CisKKwlEUFJJTlRLKHNlc3Npb24tPmRlYnVnLCAiJXM6ICVzOiBy ZXR1cm5pbmcgcmVzdWx0ICVkXG4iLCBfX0ZVTkNUSU9OX18sIAorCQlzZXNzaW9uLT5uYW1lLCBl cnJvcik7CisJa2ZyZWUobXNnLT5tc2dfaW92KTsKKwlrZnJlZShtc2cpOworCQorCUVYSVRfRlVO Q1RJT047CisJcmV0dXJuIGVycm9yOworfQorCisvKiBCdWlsZCBhbiBMMlRQIGhlYWRlciBmb3Ig dGhlIHNlc3Npb24gaW50byB0aGUgYnVmZmVyIHByb3ZpZGVkLgorICovCitzdGF0aWMgaW50IHBw cG9sMnRwX2J1aWxkX2wydHBfaGVhZGVyKHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9u LCAKKwkJCQkgICAgICB2b2lkICpidWYpCit7CisJdTE2ICpidWZwID0gYnVmOworCXUxNiBmbGFn cyA9IEwyVFBfSERSX1ZFUjsKKworCWlmIChzZXNzaW9uLT5zZW5kX3NlcSkgeworCQlmbGFncyB8 PSBMMlRQX0hEUkZMQUdfUzsKKwl9CisKKwkvKiBTZXR1cCBMMlRQIGhlYWRlci4KKwkgKiBGSVhN RTogQ2FuIHRoaXMgZXZlciBiZSB1bmFsaWduZWQ/IElzIGRpcmVjdCBkZXJlZmVyZW5jaW5nIG9m CisJICogMTYtYml0IGhlYWRlciBmaWVsZHMgc2FmZSBoZXJlIGZvciBhbGwgYXJjaGl0ZWN0dXJl cz8KKwkgKi8JCisJKmJ1ZnArKyA9IGh0b25zKGZsYWdzKTsKKwkqYnVmcCsrID0gaHRvbnMoc2Vz c2lvbi0+dHVubmVsX2FkZHIuZF90dW5uZWwpOworCSpidWZwKysgPSBodG9ucyhzZXNzaW9uLT50 dW5uZWxfYWRkci5kX3Nlc3Npb24pOworCWlmIChzZXNzaW9uLT5zZW5kX3NlcSkgeworCQkqYnVm cCsrID0gaHRvbnMoc2Vzc2lvbi0+bnMpOworCQkqYnVmcCsrID0gMDsKKwkJc2Vzc2lvbi0+bnMr KzsKKwkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBPTDJUUF9NU0dfU0VRLCBLRVJOX0RFQlVH LCAKKwkJICAgICAgICIlczogdXBkYXRlZCBucyB0byAlaHVcbiIsIHNlc3Npb24tPm5hbWUsIHNl c3Npb24tPm5zKTsKKwl9CisKKwlyZXR1cm4gKCh2b2lkICopIGJ1ZnApIC0gYnVmOworfQorCisv KiBUaGlzIGlzIHRoZSBzZW5kbXNnIGZvciB0aGUgUFBQb0wyVFAgcHBwb2wydHBfc2Vzc2lvbiBz b2NrZXQuICBXZSBjb21lIGhlcmUKKyAqIHdoZW4gYSB1c2VyIGFwcGxpY2F0aW9uIGRvZXMgYSBz ZW5kbXNnKCkgb24gdGhlIHNlc3Npb24gc29ja2V0LiBMMlRQIGFuZAorICogUFBQIGhlYWRlcnMg bXVzdCBiZSBpbnNlcnRlZCBpbnRvIHRoZSB1c2VyJ3MgZGF0YS4KKyAqLworc3RhdGljIGludCBw cHBvbDJ0cF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywg c3RydWN0IG1zZ2hkciAqbSwKKwkJCSAgICBzaXplX3QgdG90YWxfbGVuKQoreworCXN0YXRpYyB1 bnNpZ25lZCBjaGFyIHBwcGhbMl0gPSB7IDB4ZmYsIDB4MDMgfTsKKwlzdHJ1Y3Qgc29jayAqc2sg PSBzb2NrLT5zazsKKwlpbnQgZXJyb3IgPSAwOworCXU4IGhkcltQUFBPTDJUUF9MMlRQX0hEUl9T SVpFX1NFUV07CisJaW50IGhkcl9sZW47CisJc3RydWN0IG1zZ2hkciAqbXNnOworCXN0cnVjdCBw cHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOworCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5l bDsKKworCUVOVEVSX0ZVTkNUSU9OOworCisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8 fCAhKHNrLT5za19zdGF0ZSAmIFBQUE9YX0NPTk5FQ1RFRCkpIHsKKwkJZXJyb3IgPSAtRU5PVENP Tk47CisJCWdvdG8gZW5kOworCX0KKworCS8qIEdldCBzZXNzaW9uIGFuZCB0dW5uZWwgY29udGV4 dHMgKi8KKwlTT0NLXzJfU0VTU0lPTihzaywgc2Vzc2lvbiwgZXJyb3IsIC1FQkFERiwgZW5kLCAw KTsKKwlTT0NLXzJfVFVOTkVMKHNlc3Npb24tPnR1bm5lbF9zb2NrLCB0dW5uZWwsIGVycm9yLCAt RUJBREYsIGVuZCwgMCk7CisKKwkvKiBTZXR1cCBMMlRQIGhlYWRlciAqLwkKKwloZHJfbGVuID0g cHBwb2wydHBfYnVpbGRfbDJ0cF9oZWFkZXIoc2Vzc2lvbiwgJmhkcik7CisKKwlpZiAoc2Vzc2lv bi0+c2VuZF9zZXEpCisJCVBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0RBVEEs IEtFUk5fREVCVUcsIAorCQkgICAgICAgIiVzOiBzZW5kICVkIGJ5dGVzLCBucz0laHVcbiIsIHNl c3Npb24tPm5hbWUsIAorCQkgICAgICAgdG90YWxfbGVuLCBzZXNzaW9uLT5ucyAtIDEpOworCWVs c2UKKwkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBPTDJUUF9NU0dfREFUQSwgS0VSTl9ERUJV RywgCisJCSAgICAgICAiJXM6IHNlbmQgJWQgYnl0ZXNcbiIsIHNlc3Npb24tPm5hbWUsIHRvdGFs X2xlbik7CisKKwkvKiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBubyBkaXJlY3Qgd2F5IGZvciB1 cyB0byBwYXNzIGFuIHNrYiB0byB0aGUKKwkgKiBVRFAgbGF5ZXIsIHdlIGhhdmUgdG8gcHJldGVu ZCB0byBiZSBzZW5kaW5nIG9yZGluYXJ5IGRhdGEgYW5kIHVzZQorCSAqIHNlbmRtc2cuCisJICoK KwkgKiBXZSBhZGQgdGhlIEwyVFAgYW5kIFBQUCBoZWFkZXJzIGhlcmUuIFRvIGRvIHNvLCB3ZSBj cmVhdGUgYSBuZXcKKwkgKiBzdHJ1Y3QgbXNnaGRyIGFuZCBpbnNlcnQgdGhlIGhlYWRlcnMgYXMg dGhlIGZpcnN0IGlvdmVjcy4KKwkgKi8KKwltc2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNn aGRyKSwgR0ZQX0FUT01JQyk7CisJaWYgKG1zZyA9PSBOVUxMKSB7CisJCWVycm9yID0gLUVOT0JV RlM7CisJCXR1bm5lbC0+c3RhdHMudHhfZXJyb3JzKys7CisJCXNlc3Npb24tPnN0YXRzLnR4X2Vy cm9ycysrOworCQlnb3RvIGVuZDsKKwl9CisKKwltc2ctPm1zZ19pb3YgPSBrbWFsbG9jKChtLT5t c2dfaW92bGVuICsgMikgKiBzaXplb2Yoc3RydWN0IGlvdmVjKSwgCisJCQkgICAgICAgR0ZQX0FU T01JQyk7CisJaWYgKG1zZy0+bXNnX2lvdiA9PSBOVUxMKSB7CisJCWVycm9yID0gLUVOT0JVRlM7 CisJCXR1bm5lbC0+c3RhdHMudHhfZXJyb3JzKys7CisJCXNlc3Npb24tPnN0YXRzLnR4X2Vycm9y cysrOworCQlrZnJlZShtc2cpOworCQlnb3RvIGVuZDsKKwl9CisKKwltc2ctPm1zZ19pb3ZbMF0u aW92X2Jhc2UgPSAmaGRyOworCW1zZy0+bXNnX2lvdlswXS5pb3ZfbGVuCSA9IGhkcl9sZW47CisJ bXNnLT5tc2dfaW92WzFdLmlvdl9iYXNlID0gJnBwcGg7CisJbXNnLT5tc2dfaW92WzFdLmlvdl9s ZW4JID0gc2l6ZW9mKHBwcGgpOworCW1lbWNweSgmbXNnLT5tc2dfaW92WzJdLCAmbS0+bXNnX2lv dlswXSwgCisJICAgICAgIG0tPm1zZ19pb3ZsZW4gKiBzaXplb2Yoc3RydWN0IGlvdmVjKSk7CisJ bXNnLT5tc2dfaW92bGVuID0gbS0+bXNnX2lvdmxlbiArIDI7CisJCisJLyogSWYgdGhlIHVzZXIg Y2FsbHMgc2VuZHRvKCkgdGhhdCdzIGp1c3QgdG9vIGJhZCAqLworCW1zZy0+bXNnX25hbWUJID0g JnNlc3Npb24tPnR1bm5lbF9hZGRyLmFkZHI7CisJbXNnLT5tc2dfbmFtZWxlbiA9IHNpemVvZihz ZXNzaW9uLT50dW5uZWxfYWRkci5hZGRyKTsKKwkKKwltc2ctPm1zZ19jb250cm9sICAgID0gbS0+ bXNnX2NvbnRyb2w7CisJbXNnLT5tc2dfY29udHJvbGxlbiA9IG0tPm1zZ19jb250cm9sbGVuOwor CW1zZy0+bXNnX2ZsYWdzCSAgICA9IG0tPm1zZ19mbGFnczsKKworCS8qIERvIHRoZSByZWFsIHdv cmsuIFRoaXMgYWx3YXlzIGZyZWVzIG1zZywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisJICogdGhl cmUgd2FzIGFuIGVycm9yCisJICovCisJZXJyb3IgPSBwcHBvbDJ0cF91ZHBfc29ja19zZW5kKGlv Y2IsIHNlc3Npb24sIHR1bm5lbCwgbXNnLCAKKwkJCQkgICAgICAgdG90YWxfbGVuICsgaGRyX2xl biArIHNpemVvZihwcHBoKSk7CisKK2VuZDoKKwlFWElUX0ZVTkNUSU9OOworCXJldHVybiBlcnJv cjsKK30KKworCisvKiBUcmFuc21pdCBmdW5jdGlvbiBjYWxsZWQgYnkgZ2VuZXJpYyBQUFAgZHJp dmVyLiAgU2VuZHMgUFBQIGZyYW1lIG92ZXIKKyAqIFBQUG9MMlRQIHNvY2tldC4KKyAqCisgKiBU aGlzIGlzIGFsbW9zdCB0aGUgc2FtZSBhcyBwcHBvbDJ0cF9zZW5kbXNnKCksIGJ1dCByYXRoZXIg dGhhbiBiZWluZyBjYWxsZWQKKyAqIHdpdGggYSBtc2doZHIgZnJvbSB1c2Vyc3BhY2UsIGl0IGlz IGNhbGxlZCB3aXRoIGEgc2tiIGZyb20gdGhlIGtlcm5lbC4KKyAqLworc3RhdGljIGludCBwcHBv bDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikK K3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKikgY2hhbi0+cHJpdmF0ZTsKKwlp bnQgZXJyb3IgPSAwOworCXU4IGhkcltQUFBPTDJUUF9MMlRQX0hEUl9TSVpFX1NFUV07CisJaW50 IGhkcl9sZW47CisJc3RydWN0IG1zZ2hkciAqbXNnOworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9u ICpzZXNzaW9uOworCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbDsKKwlzdHJ1Y3Qga2lv Y2IgaW9jYjsKKwlzdHJ1Y3Qgc29ja19pb2NiIHNpb2NiOworCQorCUVOVEVSX0ZVTkNUSU9OOwor CQorCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgfHwgIShzay0+c2tfc3RhdGUgJiBQUFBP WF9DT05ORUNURUQpKSB7CisJCURQUklOVEsoLTEsICJkZWFkPSVkIHN0YXRlPSV4XG4iLCBzb2Nr X2ZsYWcoc2ssIFNPQ0tfREVBRCksIHNrLT5za19zdGF0ZSk7CisJCWVycm9yID0gLUVOT1RDT05O OworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBHZXQgc2Vzc2lvbiBhbmQgdHVubmVsIGNvbnRleHRz IGZyb20gdGhlIHNvY2tldCAqLworCVNPQ0tfMl9TRVNTSU9OKHNrLCBzZXNzaW9uLCBlcnJvciwg LUVCQURGLCBlbmQsIDApOworCVNPQ0tfMl9UVU5ORUwoc2Vzc2lvbi0+dHVubmVsX3NvY2ssIHR1 bm5lbCwgZXJyb3IsIC1FQkFERiwgZW5kLCAwKTsKKworCS8qIFNldHVwIEwyVFAgaGVhZGVyICov CQorCWhkcl9sZW4gPSBwcHBvbDJ0cF9idWlsZF9sMnRwX2hlYWRlcihzZXNzaW9uLCAmaGRyKTsK KworCWlmIChzZXNzaW9uLT5zZW5kX3NlcSkKKwkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBP TDJUUF9NU0dfREFUQSwgS0VSTl9ERUJVRywgCisJCSAgICAgICAiJXM6IHNlbmQgJWQgYnl0ZXMs IG5zPSVodVxuIiwgCisJCSAgICAgICBzZXNzaW9uLT5uYW1lLCBza2ItPmxlbiwgc2Vzc2lvbi0+ bnMgLSAxKTsKKwllbHNlCisJCVBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0RB VEEsIEtFUk5fREVCVUcsIAorCQkgICAgICAgIiVzOiBzZW5kICVkIGJ5dGVzXG4iLCBzZXNzaW9u LT5uYW1lLCBza2ItPmxlbik7CisKKwkvKiBVbmZvcnR1bmF0bHkgdGhlcmUgZG9lc24ndCBhcHBl YXIgdG8gYmUgYSB3YXkgZm9yIHVzIHRvIHBhc3MgYW4gc2tiCisJICogdG8gdGhlIFVEUCBsYXll ciwgd2UgaGF2ZSB0byBwcmV0ZW5kIHRvIGJlIHNlbmRpbmcgb3JkaW5hcnkgZGF0YQorCSAqIGFu ZCB1c2Ugc2VuZG1zZworCSAqLworCW1zZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2doZHIp LCBHRlBfQVRPTUlDKTsKKwlpZiAobXNnID09IE5VTEwpIHsKKwkJZXJyb3IgPSAtRU5PQlVGUzsK KwkJdHVubmVsLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJc2Vzc2lvbi0+c3RhdHMudHhfZXJyb3Jz Kys7CisJCWdvdG8gZW5kOworCX0KKwkKKwltc2ctPm1zZ19pb3YgPSBrbWFsbG9jKDIgKiBzaXpl b2Yoc3RydWN0IGlvdmVjKSwgR0ZQX0FUT01JQyk7CisJaWYgKG1zZy0+bXNnX2lvdiA9PSBOVUxM KSB7CisJCWVycm9yID0gLUVOT0JVRlM7CisJCXR1bm5lbC0+c3RhdHMudHhfZXJyb3JzKys7CisJ CXNlc3Npb24tPnN0YXRzLnR4X2Vycm9ycysrOworCQlrZnJlZShtc2cpOworCQlnb3RvIGVuZDsK Kwl9CisJbXNnLT5tc2dfaW92WzBdLmlvdl9iYXNlID0gJmhkcjsKKwltc2ctPm1zZ19pb3ZbMF0u aW92X2xlbgkgPSBoZHJfbGVuOworCS8qIEZJWE1FOiBkbyB3ZSBuZWVkIHRvIGhhbmRsZSBza2Ig ZnJhZ21lbnRzIGhlcmU/ICovCisJbXNnLT5tc2dfaW92WzFdLmlvdl9iYXNlID0gc2tiLT5kYXRh OworCW1zZy0+bXNnX2lvdlsxXS5pb3ZfbGVuCSA9IHNrYi0+bGVuOworCW1zZy0+bXNnX2lvdmxl biA9IDI7CisJCisJLyogSWYgdGhlIHVzZXIgY2FsbHMgc2VuZHRvKCkgdGhhdCdzIGp1c3QgdG9v IGJhZCAqLworCW1zZy0+bXNnX25hbWUJID0gJnNlc3Npb24tPnR1bm5lbF9hZGRyLmFkZHI7CisJ bXNnLT5tc2dfbmFtZWxlbiA9IHNpemVvZihzZXNzaW9uLT50dW5uZWxfYWRkci5hZGRyKTsKKwkK Kwltc2ctPm1zZ19jb250cm9sICAgID0gTlVMTDsKKwltc2ctPm1zZ19jb250cm9sbGVuID0gMDsK Kwltc2ctPm1zZ19mbGFncwkgICAgPSBNU0dfRE9OVFdBSVQ7CS8qIE5lZWQgdGhpcyB0byBwcmV2 ZW50IGJsb2NraW5nICovCisKKwkvKiBEbyB0aGUgcmVhbCB3b3JrLiBUaGlzIGFsd2F5cyBmcmVl cyBtc2csIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorCSAqIHRoZXJlIHdhcyBhbiBlcnJvcgorCSAq LworCWluaXRfc3luY19raW9jYigmaW9jYiwgTlVMTCk7CisJaW9jYi5wcml2YXRlID0gJnNpb2Ni OworCWVycm9yID0gcHBwb2wydHBfdWRwX3NvY2tfc2VuZCgmaW9jYiwgc2Vzc2lvbiwgdHVubmVs LCBtc2csIAorCQkJCSAgICAgICBza2ItPmxlbiArIGhkcl9sZW4pOworCisJa2ZyZWVfc2tiKHNr Yik7CisKK2VuZDoKKwlFWElUX0ZVTkNUSU9OOworCXJldHVybiBlcnJvcjsKK30KKworLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCisgKiBTZXNzaW9uIChhbmQgdHVubmVsIGNvbnRyb2wpIHNvY2tldCBj cmVhdGUvZGVzdHJveS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogV2hlbiB0aGUgdHVu bmVsIFVEUCBzb2NrZXQgaXMgY2xvc2VkLCBhbGwgdGhlIGF0dGFjaGVkIHNvY2tldHMgbmVlZCB0 byBnbworICogdG9vLiBUaGlzIGhhbmRsZXMgdGhhdC4KKyAqLworc3RhdGljIHZvaWQgcHBwb2wy dHBfdHVubmVsX2Nsb3NlYWxsKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbCkKK3sKKwlp bnQgaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqd2FsazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAq dG1wOworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOworCXN0cnVjdCBzb2NrICpz azsKKworCUVOVEVSX0ZVTkNUSU9OOworCQorCWlmICh0dW5uZWwgPT0gTlVMTCkKKwkJQlVHKCk7 CisKKwlQUklOVEsodHVubmVsLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5G TywgCisJICAgICAgICIlczogY2xvc2luZyBhbGwgc2Vzc2lvbnMuLi5cbiIsIHR1bm5lbC0+bmFt ZSk7CisKKwlmb3IgKGhhc2ggPSAwOyBoYXNoIDwgUFBQT0wyVFBfSEFTSF9TSVpFOyBoYXNoKysp IHsKKwkJaGxpc3RfZm9yX2VhY2hfc2FmZSh3YWxrLCB0bXAsICZ0dW5uZWwtPnNlc3Npb25faGxp c3RbaGFzaF0pIHsKKwkJCXNlc3Npb24gPSBobGlzdF9lbnRyeSh3YWxrLCBzdHJ1Y3QgcHBwb2wy dHBfc2Vzc2lvbiwgaGxpc3QpOworCisJCQlzayA9IHNlc3Npb24tPnNvY2s7CisKKwkJCVBSSU5U SyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5GTywKKwkJCSAg ICAgICAiJXM6IGNsb3Npbmcgc2Vzc2lvblxuIiwgc2Vzc2lvbi0+bmFtZSk7CisKKwkJCXdyaXRl X2xvY2tfYmgoJnR1bm5lbC0+aGxpc3RfbG9jayk7CisJCQlobGlzdF9kZWxfaW5pdCgmc2Vzc2lv bi0+aGxpc3QpOworCQkJd3JpdGVfdW5sb2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xvY2spOworCisJ CQlzb2NrX2hvbGQoc2spOworCisJCQlsb2NrX3NvY2soc2spOworCisJCQlpZiAoc2stPnNrX3N0 YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgeworCQkJCXBwcG94X3VuYmlu ZF9zb2NrKHNrKTsKKwkJCQlzay0+c2tfc3RhdGUgPSBQUFBPWF9ERUFEOworCQkJCXNrLT5za19z dGF0ZV9jaGFuZ2Uoc2spOworCQkJfQorCisJCQkvKiBQdXJnZSBhbnkgcXVldWVkIGRhdGEgKi8K KwkJCXNrYl9xdWV1ZV9wdXJnZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpOworCQkJc2tiX3F1ZXVl X3B1cmdlKCZzay0+c2tfd3JpdGVfcXVldWUpOworCisJCQlyZWxlYXNlX3NvY2soc2spOworCisJ CQlEUFJJTlRLKHNlc3Npb24tPmRlYnVnLCAiY2FsbGluZyBzb2NrX3B1dDsgcmVmY250PSVkXG4i LAorCQkJCXNrLT5za19yZWZjbnQuY291bnRlcik7CisJCQlzb2NrX3B1dChzayk7CisJCX0KKwl9 CisKKwlFWElUX0ZVTkNUSU9OOworfQorCisvKiBSZWFsbHkga2lsbCB0aGUgdHVubmVsLgorICog Q29tZSBoZXJlIG9ubHkgd2hlbiBhbGwgc2Vzc2lvbnMgaGF2ZSBiZWVuIGNsZWFyZWQgZnJvbSB0 aGUgdHVubmVsLgorICovCitzdGF0aWMgdm9pZCBwcHBvbDJ0cF90dW5uZWxfZnJlZShzdHJ1Y3Qg cHBwb2wydHBfdHVubmVsICp0dW5uZWwpCit7CisJRU5URVJfRlVOQ1RJT047CisKKwkvKiBSZW1v dmUgZnJvbSBzb2NrZXQgbGlzdCAqLworCWxpc3RfZGVsKCZ0dW5uZWwtPmxpc3QpOworCisJRFBS SU5USyh0dW5uZWwtPmRlYnVnLCAiJXM6IE1PRF9ERUNfVVNFX0NPVU5UXG4iLCB0dW5uZWwtPm5h bWUpOworCWtmcmVlKHR1bm5lbCk7CisKKwlFWElUX0ZVTkNUSU9OOworfQorCisvKiBUdW5uZWwg VURQIHNvY2tldCBkZXN0cnVjdCBob29rLgorICogVGhlIHR1bm5lbCBjb250ZXh0IGlzIGRlbGV0 ZWQgb25seSB3aGVuIGFsbCBzZXNzaW9uIHNvY2tldHMgaGF2ZSBiZWVuCisgKiBjbG9zZWQuCisg Ki8KK3N0YXRpYyB2b2lkIHBwcG9sMnRwX3R1bm5lbF9kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2sp Cit7CisJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsOworCWludCBlcnJvciA9IDA7CisJ RU5URVJfRlVOQ1RJT047CisJCisJU09DS18yX1RVTk5FTChzaywgdHVubmVsLCBlcnJvciwgLUVC QURGLCBlbmQsIDApOworCisJUFJJTlRLKHR1bm5lbC0+ZGVidWcsIFBQUE9MMlRQX01TR19DT05U Uk9MLCBLRVJOX0lORk8sIAorCSAgICAgICAiJXM6IGNsb3NpbmcuLi5cbiIsIHR1bm5lbC0+bmFt ZSk7IAorCQorCXBwcG9sMnRwX3R1bm5lbF9jbG9zZWFsbCh0dW5uZWwpOworCitlbmQ6CisJRVhJ VF9GVU5DVElPTjsKKwlyZXR1cm47Cit9CisKKy8qIFJlYWxseSBraWxsIHRoZSBzb2NrZXQuIChD YWxsZWQgZnJvbSBzb2NrX3B1dCBpZiByZWZjbnQgPT0gMC4pCisgKi8KK3N0YXRpYyB2b2lkIHBw cG9sMnRwX3Nlc3Npb25fZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBwcHBv eF9vcHQgKnBvID0gcHBwb3hfc2soc2spOworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNz aW9uID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOworCisJRU5URVJfRlVOQ1RJT047CisJCisJaWYg KHNrLT5za191c2VyX2RhdGEgIT0gTlVMTCkgeworCQlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0 dW5uZWw7CisKKwkJU09DS18yX1NFU1NJT04oc2ssIHNlc3Npb24sIGVycm9yLCAtRUJBREYsIG91 dCwgMCk7CisKKwkJLyogRG9uJ3QgdXNlIFNPQ0tfMl9UVU5ORUwoKSBoZXJlIHRvIGdldCB0aGUg dHVubmVsIGNvbnRleHQKKwkJICogYmVjYXVzZSB0aGUgdHVubmVsIHNvY2tldCBtaWdodCBoYXZl IGFscmVhZHkgYmVlbiBjbG9zZWQKKwkJICogKGl0cyBzay0+c2tfdXNlcl9kYXRhIHdpbGwgYmUg TlVMTCkgc28gdXNlIHRoZSBzZXNzaW9uJ3MKKwkJICogcHJpdmF0ZSB0dW5uZWwgcHRyIGluc3Rl YWQuCisJCSAqLworCQl0dW5uZWwgPSBzZXNzaW9uLT50dW5uZWw7CisJCWlmICh0dW5uZWwgIT0g TlVMTCkgeworCQkJaWYgKHR1bm5lbC0+bWFnaWMgIT0gTDJUUF9UVU5ORUxfTUFHSUMpIHsKKwkJ CQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczolZDogQkFEIFRVTk5FTCBNQUdJQyAiCisJCQkJICAg ICAgICIoIHR1bm5lbD0lcCBtYWdpYz0leCApXG4iLAorCQkJCSAgICAgICBfX0ZVTkNUSU9OX18s IF9fRklMRV9fLCBfX0xJTkVfXywgCisJCQkJICAgICAgIHR1bm5lbCwgdHVubmVsLT5tYWdpYyk7 CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQkvKiBEZWxldGUgdHVubmVsIGNvbnRleHQg aWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2Vzc2lvbiBvbiB0aGUKKwkJICogdHVubmVsLiAgVGhpcyB3 YXMgYWxsb2NhdGVkIHdoZW4gdGhlIGZpcnN0IHNlc3Npb24gd2FzCisJCSAqIGNyZWF0ZWQgb24g dGhlIHR1bm5lbC4gU2VlCisJCSAqIHBwcG9sMnRwX3ByZXBhcmVfdHVubmVsX3NvY2tldCgpLgor CQkgKi8KKwkJRFBSSU5USyh0dW5uZWwtPmRlYnVnLCAiJXM6IHNlc3Npb25fY291bnQ9JWRcbiIs IAorCQkJdHVubmVsLT5uYW1lLCBhdG9taWNfcmVhZCgmdHVubmVsLT5zZXNzaW9uX2NvdW50KSk7 CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0dW5uZWwtPnNlc3Npb25fY291bnQpKSB7CisJ CQlwcHBvbDJ0cF90dW5uZWxfZnJlZSh0dW5uZWwpOworCQl9CisJfQorCisJaWYgKHBvKQorCQlr ZnJlZShwbyk7CisKKwlpZiAoc2Vzc2lvbiAhPSBOVUxMKQorCQlrZnJlZShzZXNzaW9uKTsKKwor b3V0OgorCUVYSVRfRlVOQ1RJT047Cit9CisKKy8qIENhbGxlZCB3aGVuIHRoZSBQUFBvWCBzb2Nr ZXQgKHNlc3Npb24pIGlzIGNsb3NlZC4KKyAqLworc3RhdGljIGludCBwcHBvbDJ0cF9yZWxlYXNl KHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJ c3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gKnNlc3Npb24gPSBOVUxMOworCXN0cnVjdCBwcHBvbDJ0 cF90dW5uZWwgKnR1bm5lbDsKKwlpbnQgZXJyb3IgPSAwOworCUVOVEVSX0ZVTkNUSU9OOworCisJ aWYgKCFzaykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpICE9 IDApCisJCXJldHVybiAtRUJBREY7CisKKwlpZiAoc2stPnNrX3VzZXJfZGF0YSkgewkgICAgLyog V2FzIHRoaXMgc29ja2V0IGFjdHVhbGx5IGNvbm5lY3RlZD8gKi8KKwkJU09DS18yX1NFU1NJT04o c2ssIHNlc3Npb24sIGVycm9yLCAtRUJBREYsIGVuZCwgMCk7CisKKwkJLyogRG9uJ3QgdXNlIFNP Q0tfMl9UVU5ORUwoKSBoZXJlIHRvIGdldCB0aGUgdHVubmVsIGNvbnRleHQKKwkJICogYmVjYXVz ZSB0aGUgdHVubmVsIHNvY2tldCBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBjbG9zZWQKKwkJICog KGl0cyBzay0+c2tfdXNlcl9kYXRhIHdpbGwgYmUgTlVMTCkgc28gdXNlIHRoZSBzZXNzaW9uJ3MK KwkJICogcHJpdmF0ZSB0dW5uZWwgcHRyIGluc3RlYWQuCisJCSAqLworCQl0dW5uZWwgPSBzZXNz aW9uLT50dW5uZWw7CisJCWlmICh0dW5uZWwgIT0gTlVMTCkgeworCQkJaWYgKHR1bm5lbC0+bWFn aWMgPT0gTDJUUF9UVU5ORUxfTUFHSUMpIHsKKwkJCQkvKiBEZWxldGUgdGhlIHNlc3Npb24gc29j a2V0IGZyb20gdGhlIGhhc2ggKi8KKwkJCQl3cml0ZV9sb2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xv Y2spOworCQkJCWhsaXN0X2RlbF9pbml0KCZzZXNzaW9uLT5obGlzdCk7CisJCQkJd3JpdGVfdW5s b2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xvY2spOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VS Tl9FUlIgIiVzOiAlczolZDogQkFEIFRVTk5FTCBNQUdJQyAiCisJCQkJICAgICAgICIoIHR1bm5l bD0lcCBtYWdpYz0leCApXG4iLAorCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBf X0xJTkVfXywgCisJCQkJICAgICAgIHR1bm5lbCwgdHVubmVsLT5tYWdpYyk7CisJCQkJZ290byBl bmQ7CisJCQl9CisJCX0KKwl9CisKKwlsb2NrX3NvY2soc2spOworCisJaWYgKHNrLT5za19zdGF0 ZSAmIChQUFBPWF9DT05ORUNURUQgfCBQUFBPWF9CT1VORCkpCisJCXBwcG94X3VuYmluZF9zb2Nr KHNrKTsKKworCS8qIFNpZ25hbCB0aGUgZGVhdGggb2YgdGhlIHNvY2tldC4gKi8KKwlzay0+c2tf c3RhdGUgPSBQUFBPWF9ERUFEOworCXNvY2tfb3JwaGFuKHNrKTsKKwlzb2NrLT5zayA9IE5VTEw7 CisKKwkvKiBQdXJnZSBhbnkgcXVldWVkIGRhdGEgKi8KKwlza2JfcXVldWVfcHVyZ2UoJnNrLT5z a19yZWNlaXZlX3F1ZXVlKTsKKwlza2JfcXVldWVfcHVyZ2UoJnNrLT5za193cml0ZV9xdWV1ZSk7 CisKKwlyZWxlYXNlX3NvY2soc2spOworCisJaWYgKHNlc3Npb24gIT0gTlVMTCkKKwkJRFBSSU5U SyhzZXNzaW9uLT5kZWJ1ZywgImNhbGxpbmcgc29ja19wdXQ7IHJlZmNudD0lZFxuIiwgCisJCQlz ZXNzaW9uLT5zb2NrLT5za19yZWZjbnQuY291bnRlcik7CisJc29ja19wdXQoc2spOworCitlbmQ6 CisJRVhJVF9GVU5DVElPTjsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIEludGVybmFsIGZ1bmN0 aW9uIHRvIHByZXBhcmUgYSB0dW5uZWwgKFVEUCkgc29ja2V0IHRvIGhhdmUgUFBQb1ggc29ja2V0 cworICogYXR0YWNoZWQgdG8gaXQKKyAqLworc3RhdGljIHN0cnVjdCBzb2NrICpwcHBvbDJ0cF9w cmVwYXJlX3R1bm5lbF9zb2NrZXQoaW50IGZkLCB1MTYgdHVubmVsX2lkLCAKKwkJCQkJCSAgIGlu dCAqZXJyb3IpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gTlVMTDsKKwlz dHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsOworCXN0cnVj dCBzb2NrICpyZXQgPSBOVUxMOworCisJRU5URVJfRlVOQ1RJT047CisJCisJLyogR2V0IHRoZSBz b2NrZXQgZnJvbSB0aGUgZmQgKi8KKwllcnIgPSAtRUJBREY7CisJc29jayA9IHNvY2tmZF9sb29r dXAoZmQsICZlcnIpOworCWlmICghc29jaykgeworCQlQUklOVEsoLTEsIFBQUE9MMlRQX01TR19D T05UUk9MLCBLRVJOX0VSUiwgCisJCSAgICAgICAidHVubCAlaHU6IHNvY2tmZF9sb29rdXAoZmQ9 JWQpIHJldHVybmVkICVkXG4iLCAKKwkJICAgICAgIHR1bm5lbF9pZCwgZmQsIGVycik7CisJCWdv dG8gZXJyOworCX0KKworCS8qIFF1aWNrIHNhbml0eSBjaGVja3MgKi8KKwllcnIgPSAtRVNPQ0tU Tk9TVVBQT1JUOworCWlmIChzb2NrLT50eXBlICE9IFNPQ0tfREdSQU0pIHsKKwkJUFJJTlRLKC0x LCBQUFBPTDJUUF9NU0dfQ09OVFJPTCwgS0VSTl9FUlIsIAorCQkgICAgICAgInR1bmwgJWh1OiBm ZCAlZCB3cm9uZyB0eXBlLCBnb3QgJWQsIGV4cGVjdGVkICVkXG4iLCAKKwkJICAgICAgIHR1bm5l bF9pZCwgZmQsIHNvY2stPnR5cGUsIFNPQ0tfREdSQU0pOworCQlnb3RvIGVycjsKKwl9CisJZXJy ID0gLUVBRk5PU1VQUE9SVDsKKwlpZiAoc29jay0+b3BzLT5mYW1pbHkhPUFGX0lORVQpIHsKKwkJ UFJJTlRLKC0xLCBQUFBPTDJUUF9NU0dfQ09OVFJPTCwgS0VSTl9FUlIsIAorCQkgICAgICAgInR1 bmwgJWh1OiBmZCAlZCB3cm9uZyBmYW1pbHksIGdvdCAlZCwgZXhwZWN0ZWQgJWRcbiIsIAorCQkg ICAgICAgdHVubmVsX2lkLCBmZCwgc29jay0+b3BzLT5mYW1pbHksIEFGX0lORVQpOworCQlnb3Rv IGVycjsKKwl9CisKKwllcnIgPSAtRU5PVENPTk47CisJc2sgPSBzb2NrLT5zazsKKwkKKwkvKiBD aGVjayBpZiB0aGlzIHNvY2tldCBoYXMgYWxyZWFkeSBiZWVuIHByZXBwZWQgKi8KKwl0dW5uZWwg PSAoc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqKXNrLT5za191c2VyX2RhdGE7CisJaWYgKHR1bm5l bCAhPSBOVUxMKSB7CisJCS8qIFVzZXItZGF0YSBmaWVsZCBhbHJlYWR5IHNldCAqLworCQllcnIg PSAtRUJVU1k7CisJCWlmICh0dW5uZWwtPm1hZ2ljICE9IEwyVFBfVFVOTkVMX01BR0lDKSB7CisJ CQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczolZDogQkFEIFRVTk5FTCBNQUdJQyAiCisJCQkgICAg ICAgIiggdHVubmVsPSVwIG1hZ2ljPSV4IClcbiIsCisJCQkgICAgICAgX19GVU5DVElPTl9fLCBf X0ZJTEVfXywgX19MSU5FX18sIAorCQkJICAgICAgIHR1bm5lbCwgdHVubmVsLT5tYWdpYyk7CisJ CQlnb3RvIGVycjsKKwkJfQorCisJCS8qIFRoaXMgc29ja2V0IGhhcyBhbHJlYWR5IGJlZW4gcHJl cHBlZCAqLworCQlyZXQgPSB0dW5uZWwtPnNvY2s7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFRo aXMgc29ja2V0IGlzIGF2YWlsYWJsZSBhbmQgbmVlZHMgcHJlcHBpbmcuIENyZWF0ZSBhbmV3IHR1 bm5lbAorCSAqIGNvbnRleHQgYW5kIGluaXQgaXQuCisJICovCisJc2stPnNrX3VzZXJfZGF0YSA9 IHR1bm5lbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwpLCBHRlBfS0VS TkVMKTsKKwlpZiAoc2stPnNrX3VzZXJfZGF0YSA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07 CisJCWdvdG8gZXJyOworCX0KKworCW1lbXNldCh0dW5uZWwsIDAsIHNpemVvZihzdHJ1Y3QgcHBw b2wydHBfdHVubmVsKSk7CisJCisJdHVubmVsLT5tYWdpYyA9IEwyVFBfVFVOTkVMX01BR0lDOwor CXNwcmludGYoJnR1bm5lbC0+bmFtZVswXSwgInR1bmwgJWh1IiwgdHVubmVsX2lkKTsKKworCXR1 bm5lbC0+c3RhdHMudHVubmVsX2lkID0gdHVubmVsX2lkOworCisJdHVubmVsLT5kZWJ1ZyA9IFBQ UE9MMlRQX0RFRkFVTFRfREVCVUdfRkxBR1M7CisKKwlEUFJJTlRLKHR1bm5lbC0+ZGVidWcsICJ0 dW5sICVodTogYWxsb2NhdGVkIHR1bm5lbD0lcCwgc2s9JXAsIHNvY2s9JXBcbiIsIAorCQl0dW5u ZWxfaWQsIHR1bm5lbCwgc2ssIHNvY2spOworCisJLyogU2V0dXAgdGhlIG5ldyBwcm90b2NvbCBz dHVmZiAqLworCXR1bm5lbC0+b2xkX3Byb3RvICA9ICpzay0+c2tfcHJvdDsKKwl0dW5uZWwtPmwy dHBfcHJvdG8gPSAqc2stPnNrX3Byb3Q7CisJCisJc2stPnNrX3Byb3QgPSAmdHVubmVsLT5sMnRw X3Byb3RvOworCQorCXR1bm5lbC0+b2xkX2RhdGFfcmVhZHkgPSBzay0+c2tfZGF0YV9yZWFkeTsK Kwlzay0+c2tfZGF0YV9yZWFkeQkgICAgICAgPSAmcHBwb2wydHBfZGF0YV9yZWFkeTsKKworCXR1 bm5lbC0+b2xkX3NrX2Rlc3RydWN0ID0gc2stPnNrX2Rlc3RydWN0OworCXNrLT5za19kZXN0cnVj dAkJPSAmcHBwb2wydHBfdHVubmVsX2Rlc3RydWN0OworCisJdHVubmVsLT5zb2NrICAgPSBzazsK Kwlzay0+c2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7CisKKwlyd2xvY2tfaW5pdCgmdHVubmVs LT5obGlzdF9sb2NrKTsKKworCS8qIEFkZCB0dW5uZWwgdG8gb3VyIGxpc3QgKi8KKwlJTklUX0xJ U1RfSEVBRCgmdHVubmVsLT5saXN0KTsKKwlsaXN0X2FkZCgmdHVubmVsLT5saXN0LCAmcHBwb2wy dHBfdHVubmVsX2xpc3QpOworCQorCXJldCA9IHR1bm5lbC0+c29jazsKKwkKKwkqZXJyb3IgPSAw Oworb3V0OgorCWlmIChzb2NrKQorCQlzb2NrZmRfcHV0KHNvY2spOworCUVYSVRfRlVOQ1RJT047 CisKKwlyZXR1cm4gcmV0OworCitlcnI6CisJKmVycm9yID0gZXJyOworCWdvdG8gb3V0OworfQor CisvKiBzb2NrZXQoKSBoYW5kbGVyLiBJbml0aWFsaXplIGEgbmV3IHN0cnVjdCBzb2NrLgorICov CitzdGF0aWMgaW50IHBwcG9sMnRwX2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQoreworCWlu dCBlcnJvciA9IDA7CisJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBwcHBveF9vcHQgKnBvOwor CisJRU5URVJfRlVOQ1RJT047CisJRFBSSU5USygtMSwgInNvY2s9JXBcbiIsIHNvY2spOworCisJ c2sgPSBza19hbGxvYyhQRl9QUFBPWCwgR0ZQX0tFUk5FTCwgMSwgTlVMTCk7CisJaWYgKCFzaykK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CisKKwkvKiBG SVhNRTogTm90IHN1cmUgd2h5IHRoZSBtb2R1bGUgdXNlIGNvdW50ZXIgaXMgemVybyB3aGVuIHdl CisJICogZ2V0IGhlcmUuICBTaW1pbGFyIHNvY2tldCBjb2RlIGRvZXNuJ3Qgc2VlbSB0byBidW1w IGl0cworCSAqIG1vZHVsZSB1c2UgY291bnQgYmVmb3JlIGNhbGxpbmcgc2tfc2V0X293bmVyKCks IHNvIHdoeQorCSAqIHBwcG9sMnRwPworCSAqLworCWlmICh0cnlfbW9kdWxlX2dldChUSElTX01P RFVMRSkpIHsKKwkJc2tfc2V0X293bmVyKHNrLCBUSElTX01PRFVMRSk7CisJCW1vZHVsZV9wdXQo VEhJU19NT0RVTEUpOworCX0KKworCXNvY2stPnN0YXRlICA9IFNTX1VOQ09OTkVDVEVEOworCXNv Y2stPm9wcyAgICA9ICZwcHBvbDJ0cF9vcHM7CisKKwlzay0+c2tfYmFja2xvZ19yY3YgPSBwcHBv bDJ0cF9yZWN2X2NvcmU7CisJc2stPnNrX3Byb3RvY29sICAgID0gUFhfUFJPVE9fT0wyVFA7CisJ c2stPnNrX2ZhbWlseSAgICAgID0gUEZfUFBQT1g7CisJc2stPnNrX3N0YXRlICAgICAgID0gUFBQ T1hfTk9ORTsKKwlzay0+c2tfdHlwZSAgICAgICAgPSBTT0NLX1NUUkVBTTsKKwlzay0+c2tfZGVz dHJ1Y3QgICAgPSBwcHBvbDJ0cF9zZXNzaW9uX2Rlc3RydWN0OworCisJcG8gPSBzay0+c2tfcHJv dGluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcHBwb3hfb3B0KSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFwbykgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9zazsKKwl9CisKKwlt ZW1zZXQoKHZvaWQgKikgcG8sIDAsIHNpemVvZigqcG8pKTsKKwlwby0+c2sgPSBzazsKKworCXNv Y2stPnNrID0gc2s7CisKKwlFWElUX0ZVTkNUSU9OOworCXJldHVybiAwOworCitmcmVlX3NrOgor CXNrX2ZyZWUoc2spOworCUVYSVRfRlVOQ1RJT047CisJcmV0dXJuIGVycm9yOworfQorCisvKiBj b25uZWN0KCkgaGFuZGxlci4uCUF0dGFjaCBhIFBQUG9YIHNvY2tldCB0byBhIHR1bm5lbCBVRFAg c29ja2V0CisgKi8KK2ludCBwcHBvbDJ0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0 cnVjdCBzb2NrYWRkciAqdXNlcnZhZGRyLAorCQkgICAgIGludCBzb2NrYWRkcl9sZW4sIGludCBm bGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc29ja2FkZHJf cHBwb2wydHAgKnNwID0gKHN0cnVjdCBzb2NrYWRkcl9wcHBvbDJ0cCAqKSB1c2VydmFkZHI7CisJ c3RydWN0IHBwcG94X29wdCAqcG8gPSBwcHBveF9zayhzayk7CisJc3RydWN0IHNvY2sgKnR1bm5l bF9zb2NrID0gTlVMTDsKKwlzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiAqc2Vzc2lvbiA9IE5VTEw7 CisJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsOworCXN0cnVjdCBkc3RfZW50cnkgKmRz dDsKKwlpbnQgZXJyb3IgPSAwOworCisJRU5URVJfRlVOQ1RJT047CisJCisJRFBSSU5USygtMSwg InNvY2s9JXAsIHVzZXJ2YWRkcj0lcCwgc29ja2FkZHJfbGVuPSVkLCBmbGFncz0lZFxuIiwgCisJ CXNvY2ssIHVzZXJ2YWRkciwgc29ja2FkZHJfbGVuLCBmbGFncyk7CisJbG9ja19zb2NrKHNrKTsK KworCWVycm9yID0gLUVJTlZBTDsKKwlpZiAoc3AtPnNhX3Byb3RvY29sICE9IFBYX1BST1RPX09M MlRQKQorCQlnb3RvIGVuZDsKKworCS8qIENoZWNrIGZvciBhbHJlYWR5IGJvdW5kIHNvY2tldHMg Ki8KKwllcnJvciA9IC1FQlVTWTsKKwlpZiAoc2stPnNrX3N0YXRlICYgUFBQT1hfQ09OTkVDVEVE KQorCQlnb3RvIGVuZDsKKworCS8qIFdlIGRvbid0IHN1cHBvcnRpbmcgcmViaW5kaW5nIGFueXdh eSAqLwkJCisJaWYgKHNrLT5za191c2VyX2RhdGEpCisJCWdvdG8gZW5kOyAvKiBzb2NrZXQgaXMg YWxyZWFkeSBhdHRhY2hlZCAqLworCisJLyogRG9uJ3QgYmluZCBpZiBzX3R1bm5lbCBpcyAwICov CisJZXJyb3IgPSAtRUlOVkFMOworCWlmIChzcC0+cHBwb2wydHAuc190dW5uZWwgPT0gMCkKKwkJ Z290byBlbmQ7CisKKwkvKiBUaGlzIGxvb2tzIHVwIHRoZSB0dW5uZWwgc29ja2V0IGFuZCBjb25m aWd1cmVzIGl0IGlmIG5lY2Vzc2FyeSAqLworCXR1bm5lbF9zb2NrID0gCisJCXBwcG9sMnRwX3By ZXBhcmVfdHVubmVsX3NvY2tldChzcC0+cHBwb2wydHAuZmQsIAorCQkJCQkgICAgICAgc3AtPnBw cG9sMnRwLnNfdHVubmVsLCAKKwkJCQkJICAgICAgICZlcnJvcik7CisJaWYgKHR1bm5lbF9zb2Nr ID09IE5VTEwpCisJCWdvdG8gZW5kOworCXR1bm5lbCA9IHR1bm5lbF9zb2NrLT5za191c2VyX2Rh dGE7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBzZXNzaW9uIGNvbnRleHQu CisJICovCisJc2Vzc2lvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9u KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNlc3Npb24gPT0gTlVMTCkgeworCQllcnJvciA9IC1FTk9N RU07CisJCWdvdG8gZW5kOworCX0KKworCW1lbXNldChzZXNzaW9uLCAwLCBzaXplb2Yoc3RydWN0 IHBwcG9sMnRwX3Nlc3Npb24pKTsKKworCXNlc3Npb24tPm1hZ2ljCSAgICAgPSBMMlRQX1NFU1NJ T05fTUFHSUM7CisJc2Vzc2lvbi0+b3duZXIJICAgICA9IGN1cnJlbnQtPnBpZDsKKwlzZXNzaW9u LT5zb2NrCSAgICAgPSBzazsKKwlzZXNzaW9uLT50dW5uZWwJICAgICA9IHR1bm5lbDsKKwlzZXNz aW9uLT50dW5uZWxfc29jayA9IHR1bm5lbF9zb2NrOworCXNlc3Npb24tPnR1bm5lbF9hZGRyID0g c3AtPnBwcG9sMnRwOworCXNwcmludGYoJnNlc3Npb24tPm5hbWVbMF0sICJzZXNzICVodS8laHUi LCAKKwkJc2Vzc2lvbi0+dHVubmVsX2FkZHIuc190dW5uZWwsIAorCQlzZXNzaW9uLT50dW5uZWxf YWRkci5zX3Nlc3Npb24pOworCisJc2Vzc2lvbi0+c3RhdHMudHVubmVsX2lkICA9IHNlc3Npb24t PnR1bm5lbF9hZGRyLnNfdHVubmVsOworCXNlc3Npb24tPnN0YXRzLnNlc3Npb25faWQgPSBzZXNz aW9uLT50dW5uZWxfYWRkci5zX3Nlc3Npb247CisKKwlJTklUX0hMSVNUX05PREUoJnNlc3Npb24t PmhsaXN0KTsKKworCXNlc3Npb24tPmRlYnVnID0gUFBQT0wyVFBfREVGQVVMVF9ERUJVR19GTEFH UzsKKworCS8qIERlZmF1bHQgTVRVIG11c3QgYWxsb3cgc3BhY2UgZm9yIFVEUC9MMlRQL1BQUAor CSAqIGhlYWRlcnMuIExlYXZlIHNvbWUgc2xhY2suIAorCSAqLworCXNlc3Npb24tPm10dSA9IHNl c3Npb24tPm1ydSA9IDE1MDAgLSBQUFBPTDJUUF9IRUFERVJfT1ZFUkhFQUQ7CisKKwkvKiBJZiBQ TVRVIGRpc2NvdmVyeSB3YXMgZW5hYmxlZCwgdXNlIHRoZSBNVFUgdGhhdCB3YXMgZGlzY292ZXJl ZCAqLworCWRzdCA9IHNrX2RzdF9nZXQoc2spOworCWlmIChkc3QgIT0gTlVMTCkgeworCQl1MzIg cG10dSA9IGRzdF9wbXR1KF9fc2tfZHN0X2dldChzaykpOworCQlpZiAocG10dSAhPSAwKSB7CisJ CQlzZXNzaW9uLT5tdHUgPSBzZXNzaW9uLT5tcnUgPSBwbXR1IC0gCisJCQkJUFBQT0wyVFBfSEVB REVSX09WRVJIRUFEOworCQkJRFBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgCisJCQkJIiVzOiBNVFUg c2V0IGJ5IFBhdGggTVRVIGRpc2NvdmVyeTogbXR1PSVkXG4iLAorCQkJCXNlc3Npb24tPm5hbWUs IHNlc3Npb24tPm10dSk7CisJCX0KKwkJZHN0X3JlbGVhc2UoZHN0KTsKKwl9CisKKwkvKiBTcGVj aWFsIGNhc2U6IGlmIHNvdXJjZSAmIGRlc3Qgc2Vzc2lvbl9pZCA9PSAweDAwMDAsIHRoaXMgc29j a2V0IGlzCisJICogYmVpbmcgY3JlYXRlZCB0byBtYW5hZ2UgdGhlIHR1bm5lbC4gRG9uJ3QgYWRk IHRoZSBzZXNzaW9uIHRvIHRoZQorCSAqIHNlc3Npb24gaGFzaCBsaXN0LCBqdXN0IHNldCB1cCB0 aGUgaW50ZXJuYWwgY29udGV4dCBmb3IgdXNlIGJ5CisJICogaW9jdGwoKSBhbmQgc29ja29wdCgp IGhhbmRsZXJzLgorCSAqLworCWlmICgoc2Vzc2lvbi0+dHVubmVsX2FkZHIuc19zZXNzaW9uID09 IDApICYmCisJICAgIChzZXNzaW9uLT50dW5uZWxfYWRkci5kX3Nlc3Npb24gPT0gMCkpIHsKKwkJ ZXJyb3IgPSAwOworCQlEUFJJTlRLKHNlc3Npb24tPmRlYnVnLCAKKwkJCSJ0dW5sICVodTogc29j a2V0IGNyZWF0ZWQgZm9yIHR1bm5lbCBtZ210IG9wc1xuIiwgCisJCQlzZXNzaW9uLT50dW5uZWxf YWRkci5zX3R1bm5lbCk7CisJCXNrLT5za191c2VyX2RhdGEgPSBzZXNzaW9uOworCQlnb3RvIG91 dF9ub19wcHA7CisJfQorCisJRFBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgIiVzOiBhbGxvY2F0ZWQg c2Vzc2lvbj0lcCwgc29jaz0lcCwgb3duZXI9JWRcbiIsIAorCQlzZXNzaW9uLT5uYW1lLCBzZXNz aW9uLCBzaywgc2Vzc2lvbi0+b3duZXIpOworCisJLyogQWRkIHNlc3Npb24gdG8gdGhlIHR1bm5l bCdzIGhhc2ggbGlzdCAqLworCVNPQ0tfMl9UVU5ORUwodHVubmVsX3NvY2ssIHR1bm5lbCwgZXJy b3IsIC1FQkFERiwgZW5kLCAwKTsKKwl3cml0ZV9sb2NrX2JoKCZ0dW5uZWwtPmhsaXN0X2xvY2sp OworCWhsaXN0X2FkZF9oZWFkKCZzZXNzaW9uLT5obGlzdCwgCisJCSAgICAgICBwcHBvbDJ0cF9z ZXNzaW9uX2lkX2hhc2godHVubmVsLCAKKwkJCQkJCXNlc3Npb24tPnR1bm5lbF9hZGRyLnNfc2Vz c2lvbikpOworCXdyaXRlX3VubG9ja19iaCgmdHVubmVsLT5obGlzdF9sb2NrKTsKKwkKKwkvKiBU aGlzIGlzIGhvdyB3ZSBnZXQgdGhlIHNlc3Npb24gY29udGV4dCBmcm9tIHRoZSBzb2NrZXQuICov CisJc2stPnNrX3VzZXJfZGF0YSA9IHNlc3Npb247CisJCQorCS8qIFdlIGRvbid0IHN0b3JlIGFu eSBtb3JlIG9wdGlvbnMgaW4gdGhlIHBwcG94X29wdCwgZXZlcnl0aGluZyBpcyBpbgorCSAqIHVz ZXJfZGF0YSAoc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24pCisJICovCisJcG8tPnNrID0gc2s7CisK KwkvKiBSaWdodCBub3csIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBwdXNoIHRoZSBp bmNvbWluZyBza2IncworCSAqIHN0cmFpZ2h0IHRocm91Z2ggdGhlIFVEUCBsYXllciwgdGhlIG9u bHkgaGVhZGVyIHdlIG5lZWQgdG8gd29ycnkKKwkgKiBhYm91dCBpcyB0aGUgTDJUUCBoZWFkZXIu IFRoaXMgc2l6ZSBpcyBkaWZmZXJlbnQgZGVwZW5kaW5nIG9uCisJICogd2hldGhlciBzZXF1ZW5j ZSBudW1iZXJzIGFyZSBlbmFibGVkIGZvciB0aGUgZGF0YSBjaGFubmVsLgorCSAqLworCXBvLT5j aGFuLmhkcmxlbiA9IFBQUE9MMlRQX0wyVFBfSERSX1NJWkVfTk9TRVE7CisKKwlwby0+Y2hhbi5w cml2YXRlID0gc2s7CisJcG8tPmNoYW4ub3BzCSA9ICZwcHBvbDJ0cF9jaGFuX29wczsKKworCWVy cm9yID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnBvLT5jaGFuKTsKKwlpZiAoZXJyb3IpCisJCWdv dG8gZW5kOworCitvdXRfbm9fcHBwOgorCWF0b21pY19pbmMoJnR1bm5lbC0+c2Vzc2lvbl9jb3Vu dCk7CisJc2stPnNrX3N0YXRlID0gUFBQT1hfQ09OTkVDVEVEOworCVBSSU5USyhzZXNzaW9uLT5k ZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5GTywgCisJICAgICAgICIlczogY3Jl YXRlZFxuIiwgc2Vzc2lvbi0+bmFtZSk7CisKK2VuZDoKKwlyZWxlYXNlX3NvY2soc2spOworCisJ aWYgKGVycm9yICE9IDApCisJCVBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NP TlRST0wsIEtFUk5fV0FSTklORywgCisJCSAgICAgICAiJXM6IGNvbm5lY3QgZmFpbGVkOiAlZFxu Iiwgc2Vzc2lvbi0+bmFtZSwgZXJyb3IpOworCisJRVhJVF9GVU5DVElPTjsKKworCXJldHVybiBl cnJvcjsKK30KKworLyogZ2V0bmFtZSgpIHN1cHBvcnQuCisgKi8KK3N0YXRpYyBpbnQgcHBwb2wy dHBfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAor CQkJICAgIGludCAqdXNvY2thZGRyX2xlbiwgaW50IHBlZXIpCit7CisJaW50IGxlbiA9IHNpemVv ZihzdHJ1Y3Qgc29ja2FkZHJfcHBwb2wydHApOworCXN0cnVjdCBzb2NrYWRkcl9wcHBvbDJ0cCBz cDsKKwlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOwor CisJRU5URVJfRlVOQ1RJT047CisJCisJZXJyb3IgPSAtRU5PVENPTk47CisJaWYgKHNvY2stPnNr LT5za19zdGF0ZSAhPSBQUFBPWF9DT05ORUNURUQpCisJCWdvdG8gZW5kOworCQorCVNPQ0tfMl9T RVNTSU9OKHNvY2stPnNrLCBzZXNzaW9uLCBlcnJvciwgLUVCQURGLCBlbmQsIDApOworCQorCXNw LnNhX2ZhbWlseQk9IEFGX1BQUE9YOworCXNwLnNhX3Byb3RvY29sCT0gUFhfUFJPVE9fT0wyVFA7 CisJbWVtY3B5KCZzcC5wcHBvbDJ0cCwgJnNlc3Npb24tPnR1bm5lbF9hZGRyLAorCSAgICAgICBz aXplb2Yoc3RydWN0IHBwcG9sMnRwX2FkZHIpKTsKKworCW1lbWNweSh1YWRkciwgJnNwLCBsZW4p OworCisJKnVzb2NrYWRkcl9sZW4gPSBsZW47CisKKwllcnJvciA9IDA7CitlbmQ6CisJRVhJVF9G VU5DVElPTjsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBp b2N0bCgpIGhhbmRsZXJzLgorICoKKyAqIFRoZSBQUFBvWCBzb2NrZXQgaXMgY3JlYXRlZCBmb3Ig TDJUUCBzZXNzaW9uczogdHVubmVscyBoYXZlIHRoZWlyIG93biBVRFAKKyAqIHNvY2tldHMuIEhv d2V2ZXIsIGluIG9yZGVyIHRvIGNvbnRyb2wga2VybmVsIHR1bm5lbCBmZWF0dXJlcywgd2UgYWxs b3cKKyAqIHVzZXJzcGFjZSB0byBjcmVhdGUgYSBzcGVjaWFsICJ0dW5uZWwiIFBQUG9YIHNvY2tl dCB3aGljaCBpcyB1c2VkIGZvcgorICogY29udHJvbCBvbmx5LiAgVHVubmVsIFBQUG9YIHNvY2tl dHMgaGF2ZSBzZXNzaW9uX2lkID09IDAgYW5kIHNpbXBseSBhbGxvdworICogdGhlIHVzZXIgYXBw bGljYXRpb24gdG8gaXNzdWUgTDJUUCBzZXRzb2Nrb3B0KCksIGdldHNvY2tvcHQoKSBhbmQgaW9j dGwoKQorICogY2FsbHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU2Vzc2lvbiBpb2N0 bCBoZWxwZXIuCisgKi8KK3N0YXRpYyBpbnQgcHBwb2wydHBfc2Vzc2lvbl9pb2N0bChzdHJ1Y3Qg cHBwb2wydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgCisJCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNp Z25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCBlcnIgPSAwOworCXN0 cnVjdCBzb2NrICpzayA9IHNlc3Npb24tPnNvY2s7CisJaW50IHZhbCA9IChpbnQpIGFyZzsKKwor CXNvY2tfaG9sZChzayk7CisKKwlQUklOVEsoc2Vzc2lvbi0+ZGVidWcsIFBQUE9MMlRQX01TR19D T05UUk9MLCBLRVJOX0RFQlVHLCAKKwkgICAgICAgIiVzOiBwcHBvbDJ0cF9zZXNzaW9uX2lvY3Rs KGNtZD0lI3gsIGFyZz0lI2x4KVxuIiwgCisJICAgICAgIHNlc3Npb24tPm5hbWUsIGNtZCwgYXJn KTsKKwkKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dJRk1UVToKKwkJZXJyID0gLUVOWElP OworCQlpZiAoIShzay0+c2tfc3RhdGUgJiBQUFBPWF9DT05ORUNURUQpKQorCQkJYnJlYWs7CisK KwkJZXJyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZnIsICh2b2lkIF9fdXNl ciAqKSBhcmcsIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKKwkJCWJyZWFrOworCQlpZnIuaWZyX210 dSA9IHNlc3Npb24tPm10dTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJn LCAmaWZyLCBzaXplb2Yoc3RydWN0IGlmcmVxKSkpCisJCQlicmVhazsKKworCQlQUklOVEsoc2Vz c2lvbi0+ZGVidWcsIFBQUE9MMlRQX01TR19DT05UUk9MLCBLRVJOX0lORk8sIAorCQkgICAgICAg IiVzOiBnZXQgbXR1PSVkXG4iLCBzZXNzaW9uLT5uYW1lLCBzZXNzaW9uLT5tdHUpOworCQllcnIg PSAwOworCQlicmVhazsKKworCWNhc2UgU0lPQ1NJRk1UVToKKwkJZXJyID0gLUVOWElPOworCQlp ZiAoIShzay0+c2tfc3RhdGUgJiBQUFBPWF9DT05ORUNURUQpKQorCQkJYnJlYWs7CisKKwkJZXJy ID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZnIsICh2b2lkIF9fdXNlciAqKSBh cmcsIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKKwkJCWJyZWFrOworCisJCXNlc3Npb24tPm10dSA9 IGlmci5pZnJfbXR1OworOworCQlQUklOVEsoc2Vzc2lvbi0+ZGVidWcsIFBQUE9MMlRQX01TR19D T05UUk9MLCBLRVJOX0lORk8sIAorCQkgICAgICAgIiVzOiBzZXQgbXR1PSVkXG4iLCBzZXNzaW9u LT5uYW1lLCBzZXNzaW9uLT5tdHUpOworCQllcnIgPSAwOworCQlicmVhazsKKworCWNhc2UgUFBQ SU9DR01SVToKKwkJZXJyID0gLUVOWElPOworCQlpZiAoIShzay0+c2tfc3RhdGUgJiBQUFBPWF9D T05ORUNURUQpKQorCQkJYnJlYWs7CisKKwkJZXJyID0gLUVGQVVMVDsKKwkJaWYgKHB1dF91c2Vy KHNlc3Npb24tPm1ydSwgKGludCBfX3VzZXIgKikgYXJnKSkKKwkJCWJyZWFrOworCisJCVBSSU5U SyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5GTywgCisJCSAg ICAgICAiJXM6IGdldCBtcnU9JWRcbiIsIHNlc3Npb24tPm5hbWUsIHNlc3Npb24tPm1ydSk7CisJ CWVyciA9IDA7CisJCWJyZWFrOworCisJY2FzZSBQUFBJT0NTTVJVOgorCQllcnIgPSAtRU5YSU87 CisJCWlmICghKHNrLT5za19zdGF0ZSAmIFBQUE9YX0NPTk5FQ1RFRCkpCisJCQlicmVhazsKKwor CQllcnIgPSAtRUZBVUxUOworCQlpZiAoZ2V0X3VzZXIodmFsLChpbnQgX191c2VyICopIGFyZykp CisJCQlicmVhazsKKworCQlzZXNzaW9uLT5tcnUgPSB2YWw7CisJCVBSSU5USyhzZXNzaW9uLT5k ZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5GTywgCisJCSAgICAgICAiJXM6IHNl dCBtcnU9JWRcbiIsIHNlc3Npb24tPm5hbWUsIHNlc3Npb24tPm1ydSk7CisJCWVyciA9IDA7CisJ CWJyZWFrOworCisJY2FzZSBQUFBJT0NHRkxBR1M6CisJCWVyciA9IC1FRkFVTFQ7CisJCWlmIChw dXRfdXNlcihzZXNzaW9uLT5mbGFncywgKGludCBfX3VzZXIgKikgYXJnKSkKKwkJCWJyZWFrOwor CisJCVBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5G TywgCisJCSAgICAgICAiJXM6IGdldCBmbGFncz0lZFxuIiwgc2Vzc2lvbi0+bmFtZSwgc2Vzc2lv bi0+ZmxhZ3MpOworCQllcnIgPSAwOworCQlicmVhazsKKworCWNhc2UgUFBQSU9DU0ZMQUdTOgor CQllcnIgPSAtRUZBVUxUOworCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBhcmcp KQorCQkJYnJlYWs7CisJCXNlc3Npb24tPmZsYWdzID0gdmFsOworCQlQUklOVEsoc2Vzc2lvbi0+ ZGVidWcsIFBQUE9MMlRQX01TR19DT05UUk9MLCBLRVJOX0lORk8sIAorCQkgICAgICAgIiVzOiBz ZXQgZmxhZ3M9JWRcbiIsIHNlc3Npb24tPm5hbWUsIHNlc3Npb24tPmZsYWdzKTsKKwkJZXJyID0g MDsKKwkJYnJlYWs7CisKKwljYXNlIFBQUElPQ0dMMlRQU1RBVFM6CisJCWVyciA9IC1FTlhJTzsK KworCQlpZiAoIShzay0+c2tfc3RhdGUgJiBQUFBPWF9DT05ORUNURUQpKQorCQkJYnJlYWs7CisK KwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLCAmc2Vzc2lvbi0+c3RhdHMs IAorCQkJCSBzaXplb2Yoc2Vzc2lvbi0+c3RhdHMpKSkKKwkJCWJyZWFrOworCQlQUklOVEsoc2Vz c2lvbi0+ZGVidWcsIFBQUE9MMlRQX01TR19DT05UUk9MLCBLRVJOX0lORk8sIAorCQkgICAgICAg IiVzOiBnZXQgTDJUUCBzdGF0c1xuIiwgc2Vzc2lvbi0+bmFtZSk7CisJCWVyciA9IDA7CisJCWJy ZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1NZUzsKKwkJYnJlYWs7CisJfQorCisJc29j a19wdXQoc2spOworCisJcmV0dXJuIGVycjsKK30KKworLyogVHVubmVsIGlvY3RsIGhlbHBlci4K KyAqCisgKiBOb3RlIHRoZSBzcGVjaWFsIGhhbmRsaW5nIGZvciBQUFBJT0NHTDJUUFNUQVRTIGJl bG93LiBJZiB0aGUgaW9jdGwgZGF0YQorICogc3BlY2lmaWVzIGEgc2Vzc2lvbl9pZCwgdGhlIHNl c3Npb24gaW9jdGwgaGFuZGxlciBpcyBjYWxsZWQuIFRoaXMgYWxsb3dzIGFuCisgKiBhcHBsaWNh dGlvbiB0byByZXRyaWV2ZSBzZXNzaW9uIHN0YXRzIHZpYSBhIHR1bm5lbCBzb2NrZXQuCisgKi8K K3N0YXRpYyBpbnQgcHBwb2wydHBfdHVubmVsX2lvY3RsKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwg KnR1bm5lbCwgCisJCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorewor CWludCBlcnIgPSAwOworCXN0cnVjdCBzb2NrICpzayA9IHR1bm5lbC0+c29jazsKKwlzdHJ1Y3Qg cHBwb2wydHBfaW9jX3N0YXRzIHN0YXRzX3JlcTsKKworCXNvY2tfaG9sZChzayk7CisKKwlQUklO VEsodHVubmVsLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fREVCVUcsIAorCSAg ICAgICAiJXM6IHBwcG9sMnRwX3R1bm5lbF9pb2N0bChjbWQ9JSN4LCBhcmc9JSNseClcbiIsIHR1 bm5lbC0+bmFtZSwgCisJICAgICAgIGNtZCwgYXJnKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2Fz ZSBQUFBJT0NHTDJUUFNUQVRTOgorCQllcnIgPSAtRU5YSU87CisKKwkJaWYgKCEoc2stPnNrX3N0 YXRlICYgUFBQT1hfQ09OTkVDVEVEKSkKKwkJCWJyZWFrOworCisJCWlmIChjb3B5X2Zyb21fdXNl cigmc3RhdHNfcmVxLCAodm9pZCBfX3VzZXIgKikgYXJnLCAKKwkJCQkgICBzaXplb2Yoc3RhdHNf cmVxKSkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc3RhdHNf cmVxLnNlc3Npb25faWQgIT0gMCkgeworCQkJLyogcmVzZW5kIHRvIHNlc3Npb24gaW9jdGwgaGFu ZGxlciAqLworCQkJc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gKnNlc3Npb24gPSAKKwkJCQlwcHBv bDJ0cF9zZXNzaW9uX2ZpbmQodHVubmVsLCBzdGF0c19yZXEuc2Vzc2lvbl9pZCk7CisJCQlpZiAo c2Vzc2lvbiAhPSBOVUxMKQorCQkJCWVyciA9IHBwcG9sMnRwX3Nlc3Npb25faW9jdGwoc2Vzc2lv biwgY21kLCBhcmcpOworCQkJZWxzZQorCQkJCWVyciA9IC1FQkFEUjsKKwkJCWJyZWFrOworCQl9 CisjaWZkZWYgQ09ORklHX1hGUk0KKwkJdHVubmVsLT5zdGF0cy51c2luZ19pcHNlYyA9IChzay0+ c2tfcG9saWN5WzBdIHx8IHNrLT5za19wb2xpY3lbMV0pID8gMSA6IDA7CisjZW5kaWYKKwkJaWYg KGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLCAmdHVubmVsLT5zdGF0cywgCisJCQkJ IHNpemVvZih0dW5uZWwtPnN0YXRzKSkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlicmVhazsK KwkJfQorCQlQUklOVEsodHVubmVsLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5f SU5GTywgCisJCSAgICAgICAiJXM6IGdldCBMMlRQIHN0YXRzXG4iLCB0dW5uZWwtPm5hbWUpOwor CQllcnIgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9TWVM7CisJCWJy ZWFrOworCX0KKworCXNvY2tfcHV0KHNrKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qIE1haW4g aW9jdGwoKSBoYW5kbGVyLgorICogRGlzcGF0Y2ggdG8gdHVubmVsIG9yIHNlc3Npb24gaGVscGVy cyBkZXBlbmRpbmcgb24gdGhlIHNvY2tldC4KKyAqLworc3RhdGljIGludCBwcHBvbDJ0cF9pb2N0 bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgIHVuc2lnbmVk IGxvbmcgYXJnKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBwcHBv bDJ0cF9zZXNzaW9uICpzZXNzaW9uOworCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbDsK KwlpbnQgZXJyID0gMDsKKworCUVOVEVSX0ZVTkNUSU9OOworCQorCWlmICghc2spCisJCXJldHVy biAwOworCisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSAhPSAwKQorCQlyZXR1cm4gLUVC QURGOworCisJaWYgKChzay0+c2tfdXNlcl9kYXRhID09IE5VTEwpIHx8IAorCSAgICAoIShzay0+ c2tfc3RhdGUgJiAoUFBQT1hfQ09OTkVDVEVEIHwgUFBQT1hfQk9VTkQpKSkpIHsKKwkJZXJyID0g LUVOT1RDT05OOworCQlEUFJJTlRLKC0xLCAiaW9jdGw6IHNvY2tldCAlcCBub3QgY29ubmVjdGVk LlxuIiwgc2spOworCQlnb3RvIGVuZDsKKwl9CisKKwlTT0NLXzJfU0VTU0lPTihzaywgc2Vzc2lv biwgZXJyLCAtRUJBREYsIGVuZCwgMCk7CisJU09DS18yX1RVTk5FTChzZXNzaW9uLT50dW5uZWxf c29jaywgdHVubmVsLCBlcnIsIC1FQkFERiwgZW5kLCAxKTsKKworCS8qIFNwZWNpYWwgY2FzZTog aWYgc2Vzc2lvbidzIHNlc3Npb25faWQgaXMgemVybywgdHJlYXQgaW9jdGwgYXMgYQorCSAqIHR1 bm5lbCBpb2N0bAorCSAqLworCWlmICgoc2Vzc2lvbi0+dHVubmVsX2FkZHIuc19zZXNzaW9uID09 IDApICYmCisJICAgIChzZXNzaW9uLT50dW5uZWxfYWRkci5kX3Nlc3Npb24gPT0gMCkpIHsKKwkJ ZXJyID0gcHBwb2wydHBfdHVubmVsX2lvY3RsKHR1bm5lbCwgY21kLCBhcmcpOworCQlnb3RvIGVu ZDsKKwl9CisKKwllcnIgPSBwcHBvbDJ0cF9zZXNzaW9uX2lvY3RsKHNlc3Npb24sIGNtZCwgYXJn KTsKKworZW5kOgorCUVYSVRfRlVOQ1RJT047CisJcmV0dXJuIGVycjsKK30KKworLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiBzZXRzb2Nrb3B0KCkgLyBnZXRzb2Nrb3B0KCkgc3VwcG9ydC4KKyAq CisgKiBUaGUgUFBQb1ggc29ja2V0IGlzIGNyZWF0ZWQgZm9yIEwyVFAgc2Vzc2lvbnM6IHR1bm5l bHMgaGF2ZSB0aGVpciBvd24gVURQCisgKiBzb2NrZXRzLiBJbiBvcmRlciB0byBjb250cm9sIGtl cm5lbCB0dW5uZWwgZmVhdHVyZXMsIHdlIGFsbG93IHVzZXJzcGFjZSB0bworICogY3JlYXRlIGEg c3BlY2lhbCAidHVubmVsIiBQUFBvWCBzb2NrZXQgd2hpY2ggaXMgdXNlZCBmb3IgY29udHJvbCBv bmx5LgorICogVHVubmVsIFBQUG9YIHNvY2tldHMgaGF2ZSBzZXNzaW9uX2lkID09IDAgYW5kIHNp bXBseSBhbGxvdyB0aGUgdXNlcgorICogYXBwbGljYXRpb24gdG8gaXNzdWUgTDJUUCBzZXRzb2Nr b3B0KCksIGdldHNvY2tvcHQoKSBhbmQgaW9jdGwoKSBjYWxscy4KKyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKi8KKworLyogVHVubmVsIHNldHNvY2tvcHQoKSBoZWxwZXIuCisgKi8KK3N0YXRpYyBpbnQg cHBwb2wydHBfdHVubmVsX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgICAgIHN0 cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbCwgCisJCQkJICAgICAgaW50IG9wdG5hbWUsIGlu dCB2YWwpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKG9wdG5hbWUpIHsKKwljYXNlIFBQ UE9MMlRQX1NPX0RFQlVHOgorCQl0dW5uZWwtPmRlYnVnID0gdmFsOworCQlQUklOVEsodHVubmVs LT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5GTywgCisJCSAgICAgICAiJXM6 IHNldCBkZWJ1Zz0leFxuIiwgdHVubmVsLT5uYW1lLCB0dW5uZWwtPmRlYnVnKTsKKwkJYnJlYWs7 CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKwkKKwly ZXR1cm4gZXJyOworfQorCisvKiBTZXNzaW9uIHNldHNvY2tvcHQgaGVscGVyLgorICovCitzdGF0 aWMgaW50IHBwcG9sMnRwX3Nlc3Npb25fc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJ ICAgICAgIHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCAKKwkJCQkgICAgICAgaW50 IG9wdG5hbWUsIGludCB2YWwpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKG9wdG5hbWUp IHsKKwljYXNlIFBQUE9MMlRQX1NPX1JFQ1ZTRVE6CisJCWlmICgodmFsICE9IDApICYmICh2YWwg IT0gMSkpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzZXNzaW9uLT5y ZWN2X3NlcSA9IHZhbCA/IC0xIDogMDsKKwkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBPTDJU UF9NU0dfQ09OVFJPTCwgS0VSTl9JTkZPLCAKKwkJICAgICAgICIlczogc2V0IHJlY3Zfc2VxPSVk XG4iLCBzZXNzaW9uLT5uYW1lLCAKKwkJICAgICAgIHNlc3Npb24tPnJlY3Zfc2VxKTsKKwkJYnJl YWs7CisKKwljYXNlIFBQUE9MMlRQX1NPX1NFTkRTRVE6CisJCWlmICgodmFsICE9IDApICYmICh2 YWwgIT0gMSkpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzZXNzaW9u LT5zZW5kX3NlcSA9IHZhbCA/IC0xIDogMDsKKwkJeworCQkJLyogRklYTUU6IGlzIGl0IHNhZmUg dG8gY2hhbmdlIHRoZSBwcHAgY2hhbm5lbCdzCisJCQkgKiBoZHJsZW4gb24gdGhlIGZseT8KKwkJ CSAqLworCQkJc3RydWN0IHNvY2sgKnNrCSAgICAgPSBzZXNzaW9uLT5zb2NrOworCQkJc3RydWN0 IHBwcG94X29wdCAqcG8gPSBwcHBveF9zayhzayk7CisJCQlwby0+Y2hhbi5oZHJsZW4gPSB2YWwg PyBQUFBPTDJUUF9MMlRQX0hEUl9TSVpFX1NFUSA6IAorCQkJCVBQUE9MMlRQX0wyVFBfSERSX1NJ WkVfTk9TRVE7CisJCX0KKwkJUFJJTlRLKHNlc3Npb24tPmRlYnVnLCBQUFBPTDJUUF9NU0dfQ09O VFJPTCwgS0VSTl9JTkZPLCAKKwkJICAgICAgICIlczogc2V0IHNlbmRfc2VxPSVkXG4iLCBzZXNz aW9uLT5uYW1lLCBzZXNzaW9uLT5zZW5kX3NlcSk7CisJCWJyZWFrOworCisJY2FzZSBQUFBPTDJU UF9TT19MTlNNT0RFOgorCQlpZiAoKHZhbCAhPSAwKSAmJiAodmFsICE9IDEpKSB7CisJCQllcnIg PSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJc2Vzc2lvbi0+bG5zX21vZGUgPSB2YWwgPyAt MSA6IDA7CisJCVBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtF Uk5fSU5GTywgCisJCSAgICAgICAiJXM6IHNldCBsbnNfbW9kZT0lZFxuIiwgc2Vzc2lvbi0+bmFt ZSwgCisJCSAgICAgICBzZXNzaW9uLT5sbnNfbW9kZSk7CisJCWJyZWFrOworCisJY2FzZSBQUFBP TDJUUF9TT19ERUJVRzoKKwkJc2Vzc2lvbi0+ZGVidWcgPSB2YWw7CisJCVBSSU5USyhzZXNzaW9u LT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5GTywgCisJCSAgICAgICAiJXM6 IHNldCBkZWJ1Zz0leFxuIiwgc2Vzc2lvbi0+bmFtZSwgc2Vzc2lvbi0+ZGVidWcpOworCQlicmVh azsKKworCWNhc2UgUFBQT0wyVFBfU09fUkVPUkRFUlRPOgorCQlzZXNzaW9uLT5yZW9yZGVyX3Rp bWVvdXQgPSBNU19UT19KSUZGSUVTKHZhbCk7CisJCVBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgUFBQ T0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5GTywgCisJCSAgICAgICAiJXM6IHNldCByZW9yZGVy X3RpbWVvdXQ9JWRcbiIsIHNlc3Npb24tPm5hbWUsIAorCQkgICAgICAgc2Vzc2lvbi0+cmVvcmRl cl90aW1lb3V0KTsKKwkJaWYgKHNlc3Npb24tPnJlb3JkZXJfdGltZW91dCAhPSAwKQorCQkJcHBw b2wydHBfd2Fybl9ub3RfeWV0X2ltcGxlbWVudGVkKHNlc3Npb24tPmRlYnVnLCAiU09fUkVPUkRF UlRPIik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1BST1RPT1BUOworCQli cmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBNYWluIHNldHNvY2tvcHQoKSBlbnRy eSBwb2ludC4KKyAqIERvZXMgQVBJIGNoZWNrcywgdGhlbiBjYWxscyBlaXRoZXIgdGhlIHR1bm5l bCBvciBzZXNzaW9uIHNldHNvY2tvcHQKKyAqIGhhbmRsZXIsIGFjY29yZGluZyB0byB3aGV0aGVy IHRoZSBQUFBvTDJUUCBzb2NrZXQgaXMgYSBmb3IgYSByZWd1bGFyCisgKiBzZXNzaW9uIG9yIHRo ZSBzcGVjaWFsIHR1bm5lbCB0eXBlLgorICovCitzdGF0aWMgaW50IHBwcG9sMnRwX3NldHNvY2tv cHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgCisJCQkgICAg ICAgY2hhciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2st PnNrOworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uID0gc2stPnNrX3VzZXJfZGF0 YTsKKwlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWw7CisJaW50IHZhbDsKKwlpbnQgZXJy ID0gMDsKKworCWlmIChsZXZlbCAhPSBTT0xfUFBQT0wyVFApCisJCXJldHVybiAtRVNPQ0tUTk9T VVBQT1JUOworCisJaWYgKG9wdGxlbjxzaXplb2YoaW50KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKW9wdHZhbCkpCisJCXJldHVybiAtRUZB VUxUOworCisJaWYgKHNrLT5za191c2VyX2RhdGEgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PVENP Tk47CisJCURQUklOVEsoLTEsICJzZXRzb2Nrb3B0OiBzb2NrZXQgJXAgbm90IGNvbm5lY3RlZC5c biIsIHNrKTsKKwkJZ290byBlbmQ7CisJfQorCisJU09DS18yX1NFU1NJT04oc2ssIHNlc3Npb24s IGVyciwgLUVCQURGLCBlbmQsIDApOworCVNPQ0tfMl9UVU5ORUwoc2Vzc2lvbi0+dHVubmVsX3Nv Y2ssIHR1bm5lbCwgZXJyLCAtRUJBREYsIGVuZCwgMSk7CisKKwlsb2NrX3NvY2soc2spOworCisJ LyogU3BlY2lhbCBjYXNlOiBpZiBzZXNzaW9uX2lkID09IDB4MDAwMCwgdHJlYXQgYXMgb3BlcmF0 aW9uIG9uIHR1bm5lbAorCSAqLworCWlmICgoc2Vzc2lvbi0+dHVubmVsX2FkZHIuc19zZXNzaW9u ID09IDApICYmCisJICAgIChzZXNzaW9uLT50dW5uZWxfYWRkci5kX3Nlc3Npb24gPT0gMCkpCisJ CWVyciA9IHBwcG9sMnRwX3R1bm5lbF9zZXRzb2Nrb3B0KHNrLCB0dW5uZWwsIG9wdG5hbWUsIHZh bCk7CisJZWxzZQorCQllcnIgPSBwcHBvbDJ0cF9zZXNzaW9uX3NldHNvY2tvcHQoc2ssIHNlc3Np b24sIG9wdG5hbWUsIHZhbCk7CisJCisJcmVsZWFzZV9zb2NrKHNrKTsKK2VuZDoKKwlyZXR1cm4g ZXJyOworfQorCisvKiBUdW5uZWwgZ2V0c29ja29wdCBoZWxwZXIuCisgKi8KK3N0YXRpYyBpbnQg cHBwb2wydHBfdHVubmVsX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgICAgIHN0 cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbCwgCisJCQkJICAgICAgaW50IG9wdG5hbWUsIGlu dCAqdmFsKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBQ UFBPTDJUUF9TT19ERUJVRzoKKwkJKnZhbCA9IHR1bm5lbC0+ZGVidWc7CisJCVBSSU5USyh0dW5u ZWwtPmRlYnVnLCBQUFBPTDJUUF9NU0dfQ09OVFJPTCwgS0VSTl9JTkZPLCAKKwkJICAgICAgICIl czogZ2V0IGRlYnVnPSV4XG4iLCB0dW5uZWwtPm5hbWUsIHR1bm5lbC0+ZGVidWcpOworCQlicmVh azsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJYnJlYWs7CisJfQorCQor CXJldHVybiBlcnI7Cit9CisKKy8qIFNlc3Npb24gZ2V0c29ja29wdCBoZWxwZXIuCisgKi8KK3N0 YXRpYyBpbnQgcHBwb2wydHBfc2Vzc2lvbl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgCisJ CQkJICAgICAgIHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCAKKwkJCQkgICAgICAg aW50IG9wdG5hbWUsIGludCAqdmFsKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChvcHRu YW1lKSB7CisJY2FzZSBQUFBPTDJUUF9TT19SRUNWU0VROgorCQkqdmFsID0gc2Vzc2lvbi0+cmVj dl9zZXE7CisJCVBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtF Uk5fSU5GTywgCisJCSAgICAgICAiJXM6IGdldCByZWN2X3NlcT0lZFxuIiwgc2Vzc2lvbi0+bmFt ZSwgKnZhbCk7CisJCWJyZWFrOworCisJY2FzZSBQUFBPTDJUUF9TT19TRU5EU0VROgorCQkqdmFs ID0gc2Vzc2lvbi0+c2VuZF9zZXE7CisJCVBSSU5USyhzZXNzaW9uLT5kZWJ1ZywgUFBQT0wyVFBf TVNHX0NPTlRST0wsIEtFUk5fSU5GTywgCisJCSAgICAgICAiJXM6IGdldCBzZW5kX3NlcT0lZFxu Iiwgc2Vzc2lvbi0+bmFtZSwgKnZhbCk7CisJCWJyZWFrOworCisJY2FzZSBQUFBPTDJUUF9TT19M TlNNT0RFOgorCQkqdmFsID0gc2Vzc2lvbi0+bG5zX21vZGU7CisJCVBSSU5USyhzZXNzaW9uLT5k ZWJ1ZywgUFBQT0wyVFBfTVNHX0NPTlRST0wsIEtFUk5fSU5GTywgCisJCSAgICAgICAiJXM6IGdl dCBsbnNfbW9kZT0lZFxuIiwgc2Vzc2lvbi0+bmFtZSwgKnZhbCk7CisJCWJyZWFrOworCisJY2Fz ZSBQUFBPTDJUUF9TT19ERUJVRzoKKwkJKnZhbCA9IHNlc3Npb24tPmRlYnVnOworCQlQUklOVEso c2Vzc2lvbi0+ZGVidWcsIFBQUE9MMlRQX01TR19DT05UUk9MLCBLRVJOX0lORk8sIAorCQkgICAg ICAgIiVzOiBnZXQgZGVidWc9JWRcbiIsIHNlc3Npb24tPm5hbWUsICp2YWwpOworCQlicmVhazsK KworCWNhc2UgUFBQT0wyVFBfU09fUkVPUkRFUlRPOgorCQkqdmFsID0gSklGRklFU19UT19NUyhz ZXNzaW9uLT5yZW9yZGVyX3RpbWVvdXQpOworCQlQUklOVEsoc2Vzc2lvbi0+ZGVidWcsIFBQUE9M MlRQX01TR19DT05UUk9MLCBLRVJOX0lORk8sIAorCQkgICAgICAgIiVzOiBnZXQgcmVvcmRlcl90 aW1lb3V0PSVkXG4iLCBzZXNzaW9uLT5uYW1lLCAqdmFsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0 OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyogTWFp biBnZXRzb2Nrb3B0KCkgZW50cnkgcG9pbnQuCisgKiBEb2VzIEFQSSBjaGVja3MsIHRoZW4gY2Fs bHMgZWl0aGVyIHRoZSB0dW5uZWwgb3Igc2Vzc2lvbiBnZXRzb2Nrb3B0CisgKiBoYW5kbGVyLCBh Y2NvcmRpbmcgdG8gd2hldGhlciB0aGUgUFBQb1ggc29ja2V0IGlzIGEgZm9yIGEgcmVndWxhciBz ZXNzaW9uCisgKiBvciB0aGUgc3BlY2lhbCB0dW5uZWwgdHlwZS4KKyAqLworc3RhdGljIGludCBw cHBvbDJ0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgCisJCQkg ICAgICAgaW50IG9wdG5hbWUsIGNoYXIgKm9wdHZhbCwgaW50ICpvcHRsZW4pCit7CisJc3RydWN0 IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24gKnNlc3Npb24g PSBzay0+c2tfdXNlcl9kYXRhOworCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbDsKKwlp bnQgdmFsLCBsZW47CisJaW50IGVyciA9IDA7CisKKwlpZiAobGV2ZWwgIT0gU09MX1BQUE9MMlRQ KQorCQlyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDsKKworCWlmIChnZXRfdXNlcihsZW4sIChpbnQg X191c2VyICopIG9wdGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJbGVuID0gbWluX3QodW5z aWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTsKKwkKKwlpZiAobGVuIDwgMCkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlpZiAoc2stPnNrX3VzZXJfZGF0YSA9PSBOVUxMKSB7CisJCWVyciA9IC1F Tk9UQ09OTjsKKwkJRFBSSU5USygtMSwgImdldHNvY2tvcHQ6IHNvY2tldCAlcCBub3QgY29ubmVj dGVkLlxuIiwgc2spOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBHZXQgdGhlIHNlc3Npb24gYW5k IHR1bm5lbCBjb250ZXh0cyAqLworCVNPQ0tfMl9TRVNTSU9OKHNrLCBzZXNzaW9uLCBlcnIsIC1F QkFERiwgZW5kLCAwKTsKKwlTT0NLXzJfVFVOTkVMKHNlc3Npb24tPnR1bm5lbF9zb2NrLCB0dW5u ZWwsIGVyciwgLUVCQURGLCBlbmQsIDEpOworCisJLyogU3BlY2lhbCBjYXNlOiBpZiBzZXNzaW9u X2lkID09IDB4MDAwMCwgdHJlYXQgYXMgb3BlcmF0aW9uIG9uIHR1bm5lbCAqLworCWlmICgoc2Vz c2lvbi0+dHVubmVsX2FkZHIuc19zZXNzaW9uID09IDApICYmCisJICAgIChzZXNzaW9uLT50dW5u ZWxfYWRkci5kX3Nlc3Npb24gPT0gMCkpCisJCWVyciA9IHBwcG9sMnRwX3R1bm5lbF9nZXRzb2Nr b3B0KHNrLCB0dW5uZWwsIG9wdG5hbWUsICZ2YWwpOworCWVsc2UKKwkJZXJyID0gcHBwb2wydHBf c2Vzc2lvbl9nZXRzb2Nrb3B0KHNrLCBzZXNzaW9uLCBvcHRuYW1lLCAmdmFsKTsKKwkKKworCWlm IChwdXRfdXNlcihsZW4sIChpbnQgX191c2VyICopIG9wdGxlbikpCisJCXJldHVybiAtRUZBVUxU OworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgb3B0dmFsLCAmdmFsLCBsZW4p KQorCQlyZXR1cm4gLUVGQVVMVDsKKworZW5kOgorCXJldHVybiBlcnI7Cit9CisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogL3Byb2MgZmlsZXN5c3RlbSBmb3IgZGVidWcKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisKKyNpbmNsdWRlIDxsaW51eC9z ZXFfZmlsZS5oPgorCitzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdm9pZCAqcHBwb2wydHBfcHJvY19z dGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqX3Bvcyk7CitzdGF0aWMgdm9pZCAqcHBw b2wydHBfcHJvY19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdiwgbG9mZl90ICpwb3Mp Oworc3RhdGljIHZvaWQgcHBwb2wydHBfcHJvY19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9p ZCAqdik7CitzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0s IHZvaWQgKnYpOworCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcHBvbDJ0cF9wcm9j OworCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9sMnRwX3Byb2Nfb3BzID0gewor CS5zdGFydAkJPSBwcHBvbDJ0cF9wcm9jX3N0YXJ0LAorCS5uZXh0CQk9IHBwcG9sMnRwX3Byb2Nf bmV4dCwKKwkuc3RvcAkJPSBwcHBvbDJ0cF9wcm9jX3N0b3AsCisJLnNob3cJCT0gcHBwb2wydHBf cHJvY19zaG93LAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2wydHBf cHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBwcHBvbDJ0 cF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWss CisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcHBwb2wydHBfcHJv Y19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVj dCBzZXFfZmlsZSAqbTsKKwlpbnQgcmV0ID0gMDsKKworCUVOVEVSX0ZVTkNUSU9OOworCXJldCA9 IHNlcV9vcGVuKGZpbGUsICZwcHBvbDJ0cF9wcm9jX29wcyk7CisJaWYgKHJldCA8IDApCisJCWdv dG8gb3V0OworCisJbQkgICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwltLT5wcml2YXRlID0gUERF KGlub2RlKS0+ZGF0YTsKKworb3V0OgorCUVYSVRfRlVOQ1RJT047CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgKnBwcG9sMnRwX3Byb2Nfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBs b2ZmX3QgKl9wb3MpCit7CisJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDsK Kwlsb2ZmX3QgcG9zID0gKl9wb3M7CisJc3RydWN0IGxpc3RfaGVhZCAqd2FsazsKKwlzdHJ1Y3Qg bGlzdF9oZWFkICp0bXA7CisKKwlFTlRFUl9GVU5DVElPTjsKKworCS8qIGFsbG93IGZvciB0aGUg aGVhZGVyIGxpbmUgKi8KKwlpZiAoIXBvcykgeworCQl0dW5uZWwgPSAodm9pZCAqKTE7CisJCWdv dG8gb3V0OworCX0KKwlwb3MtLTsKKworCS8qIGZpbmQgdGhlIG4ndGggZWxlbWVudCBpbiB0aGUg bGlzdCAqLworCWxpc3RfZm9yX2VhY2hfc2FmZSh3YWxrLCB0bXAsICZwcHBvbDJ0cF90dW5uZWxf bGlzdCkgewkKKwkJdHVubmVsID0gbGlzdF9lbnRyeSh3YWxrLCBzdHJ1Y3QgcHBwb2wydHBfdHVu bmVsLCBsaXN0KTsKKwkJaWYgKCFwb3MtLSkgeworCQkJc29ja19ob2xkKHR1bm5lbC0+c29jayk7 CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwl0dW5uZWwgPSBOVUxMOworCitvdXQ6CisJRVhJVF9G VU5DVElPTjsKKworCXJldHVybiB0dW5uZWw7Cit9CisKK3N0YXRpYyB2b2lkICpwcHBvbDJ0cF9w cm9jX25leHQoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlz dHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWwgPSB2OworCXN0cnVjdCBsaXN0X2hlYWQgKnRt cDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJRU5URVJfRlVOQ1RJT047CisKKwkoKnBv cykrKzsKKworCWlmICh2ID09ICh2b2lkICopMSkKKwkJbGlzdCA9ICZwcHBvbDJ0cF90dW5uZWxf bGlzdDsKKwllbHNlCisJCWxpc3QgPSAmdHVubmVsLT5saXN0OworCisJdG1wID0gbGlzdC0+bmV4 dDsKKwlpZiAodG1wID09ICZwcHBvbDJ0cF90dW5uZWxfbGlzdCkKKwkJdHVubmVsID0gTlVMTDsK KwllbHNlCisJCXR1bm5lbCA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgcHBwb2wydHBfdHVubmVs LCBsaXN0KTsKKworCUVYSVRfRlVOQ1RJT047CisKKwlyZXR1cm4gdHVubmVsOworfQorCitzdGF0 aWMgdm9pZCBwcHBvbDJ0cF9wcm9jX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQor eworCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbCA9IHY7CisKKwlFTlRFUl9GVU5DVElP TjsKKworCWlmICh0dW5uZWwgIT0gTlVMTCkKKwkJc29ja19wdXQodHVubmVsLT5zb2NrKTsKKwor CUVYSVRfRlVOQ1RJT047Cit9CisKK3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19zaG93KHN0cnVj dCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5u ZWwgPSB2OworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOworCXN0cnVjdCBobGlz dF9ub2RlICp3YWxrOworCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CisJaW50IGk7CisKKwlFTlRF Ul9GVU5DVElPTjsKKworCS8qIGRpc3BsYXkgaGVhZGVyIG9uIGxpbmUgMSAqLworCWlmICh2ID09 ICh2b2lkICopMSkgeworCQlzZXFfcHV0cyhtLCAiUFBQb0wyVFAgZHJpdmVyIGluZm8sICIgUFBQ T0wyVFBfRFJWX1ZFUlNJT04gIlxuIik7CisJCXNlcV9wdXRzKG0sICJUVU5ORUwgbmFtZSwgdXNl ci1kYXRhLW9rICIKKwkJCSAic2Vzc2lvbi1jb3VudCBtYWdpYy1va1xuIik7CisJCXNlcV9wdXRz KG0sICIgZGVidWcgdHgtcGt0cy9ieXRlcy9lcnJzIHJ4LXBrdHMvYnl0ZXMvZXJyc1xuIik7CisJ CXNlcV9wdXRzKG0sICIgIFNFU1NJT04gbmFtZSwgYWRkci9wb3J0IHNyYy10aWQvc2lkICIKKwkJ CSAiZGVzdC10aWQvc2lkIHN0YXRlIHVzZXItZGF0YS1vayBtYWdpYy1va1xuIik7CisJCXNlcV9w dXRzKG0sICIgICBtdHUvbXJ1L3JjdnNlcS9zZW5kc2VxL2xucyBkZWJ1ZyByZW9yZGVydG9cbiIp OworCQlzZXFfcHV0cyhtLCAiICAgbnIvbnMgdHgtcGt0cy9ieXRlcy9lcnJzIHJ4LXBrdHMvYnl0 ZXMvZXJyc1xuIik7CisJCWdvdG8gb3V0OworCX0KKworCXNlcV9wcmludGYobSwgIlRVTk5FTCAn JXMnLCAlYyAlZCBNQUdJQyAlc1xuIiwgCisJCSAgIHR1bm5lbC0+bmFtZSwKKwkJICAgKHR1bm5l bCA9PSB0dW5uZWwtPnNvY2stPnNrX3VzZXJfZGF0YSkgPyAnWSc6J04nLAorCQkgICBhdG9taWNf cmVhZCgmdHVubmVsLT5zZXNzaW9uX2NvdW50KSwKKwkJICAgKHR1bm5lbC0+bWFnaWMgPT0gTDJU UF9UVU5ORUxfTUFHSUMpID8gIk9LIiA6ICJCQUQiKTsKKwlzZXFfcHJpbnRmKG0sICIgJTA4eCAl dS8ldS8ldSAldS8ldS8ldVxuIiwKKwkJICAgdHVubmVsLT5kZWJ1ZywKKwkJICAgdHVubmVsLT5z dGF0cy50eF9wYWNrZXRzLCB0dW5uZWwtPnN0YXRzLnR4X2J5dGVzLCAKKwkJICAgdHVubmVsLT5z dGF0cy50eF9lcnJvcnMsCisJCSAgIHR1bm5lbC0+c3RhdHMucnhfcGFja2V0cywgdHVubmVsLT5z dGF0cy5yeF9ieXRlcywgCisJCSAgIHR1bm5lbC0+c3RhdHMucnhfZXJyb3JzKTsKKworCWlmICh0 dW5uZWwtPm1hZ2ljICE9IEwyVFBfVFVOTkVMX01BR0lDKSB7CisJCXNlcV9wdXRzKG0sICIqKiog QWJvcnRpbmcgKioqXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFBQ UE9MMlRQX0hBU0hfU0laRTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX3NhZmUod2FsaywgdG1w LCAmdHVubmVsLT5zZXNzaW9uX2hsaXN0W2ldKSB7CisJCQlzZXNzaW9uID0gaGxpc3RfZW50cnko d2Fsaywgc3RydWN0IHBwcG9sMnRwX3Nlc3Npb24sIGhsaXN0KTsKKwkJCXNlcV9wcmludGYobSwg IiAgU0VTU0lPTiAnJXMnICUwOFgvJWQgJTA0WC8lMDRYIC0+ICIKKwkJCQkgICAiJTA0WC8lMDRY ICVkICVjIE1BR0lDICVzXG4iLAorCQkJCSAgIHNlc3Npb24tPm5hbWUsCisJCQkJICAgaHRvbmwo c2Vzc2lvbi0+dHVubmVsX2FkZHIuYWRkci5zaW5fYWRkci5zX2FkZHIpLAorCQkJCSAgIGh0b25z KHNlc3Npb24tPnR1bm5lbF9hZGRyLmFkZHIuc2luX3BvcnQpLAorCQkJCSAgIHNlc3Npb24tPnR1 bm5lbF9hZGRyLnNfdHVubmVsLCAKKwkJCQkgICBzZXNzaW9uLT50dW5uZWxfYWRkci5zX3Nlc3Np b24sCisJCQkJICAgc2Vzc2lvbi0+dHVubmVsX2FkZHIuZF90dW5uZWwsIAorCQkJCSAgIHNlc3Np b24tPnR1bm5lbF9hZGRyLmRfc2Vzc2lvbiwKKwkJCQkgICBzZXNzaW9uLT5zb2NrLT5za19zdGF0 ZSwKKwkJCQkgICAoc2Vzc2lvbiA9PSBzZXNzaW9uLT5zb2NrLT5za191c2VyX2RhdGEpID8gCisJ CQkJICAgJ1knIDogJ04nLAorCQkJCSAgIChzZXNzaW9uLT5tYWdpYyA9PSBMMlRQX1NFU1NJT05f TUFHSUMpID8gCisJCQkJICAgIk9LIiA6ICJCQUQiKTsKKworCQkJc2VxX3ByaW50ZihtLCAiICAg JWQvJWQvJWMvJWMvJXMgJTA4eCAlZFxuIiwKKwkJCQkgICBzZXNzaW9uLT5tdHUsIHNlc3Npb24t Pm1ydSwgCisJCQkJICAgc2Vzc2lvbi0+cmVjdl9zZXEgPyAnUicgOiAnLScsCisJCQkJICAgc2Vz c2lvbi0+c2VuZF9zZXEgPyAnUycgOiAnLScsCisJCQkJICAgc2Vzc2lvbi0+bG5zX21vZGUgPyAi TE5TIiA6ICJMQUMiLAorCQkJCSAgIHNlc3Npb24tPmRlYnVnLAorCQkJCSAgIEpJRkZJRVNfVE9f TVMoc2Vzc2lvbi0+cmVvcmRlcl90aW1lb3V0KSk7CisJCQlzZXFfcHJpbnRmKG0sICIgICAlaHUv JWh1ICV1LyV1LyV1ICV1LyV1LyV1XG4iLAorCQkJCSAgIHNlc3Npb24tPm5yLCBzZXNzaW9uLT5u cywKKwkJCQkgICBzZXNzaW9uLT5zdGF0cy50eF9wYWNrZXRzLCAKKwkJCQkgICBzZXNzaW9uLT5z dGF0cy50eF9ieXRlcywgCisJCQkJICAgc2Vzc2lvbi0+c3RhdHMudHhfZXJyb3JzLAorCQkJCSAg IHNlc3Npb24tPnN0YXRzLnJ4X3BhY2tldHMsIAorCQkJCSAgIHNlc3Npb24tPnN0YXRzLnJ4X2J5 dGVzLCAKKwkJCQkgICBzZXNzaW9uLT5zdGF0cy5yeF9lcnJvcnMpOworCisJCQlpZiAoc2Vzc2lv bi0+bWFnaWMgIT0gTDJUUF9TRVNTSU9OX01BR0lDKSB7CisJCQkJc2VxX3B1dHMobSwgIioqKiBB Ym9ydGluZyAqKipcbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQkKKwkJfQorCX0KK291dDoKKwlz ZXFfcHV0cyhtLCAiXG4iKTsKKworCUVYSVRfRlVOQ1RJT047CisKKwlyZXR1cm4gMDsKK30KKwor I2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICog SW5pdCBhbmQgY2xlYW51cAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0 IHByb3RvX29wcyBwcHBvbDJ0cF9vcHMgPSB7CisJLmZhbWlseQkJPSBBRl9QUFBPWCwKKwkub3du ZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlbGVhc2UJPSBwcHBvbDJ0cF9yZWxlYXNlLAorCS5iaW5k CQk9IHNvY2tfbm9fYmluZCwKKwkuY29ubmVjdAk9IHBwcG9sMnRwX2Nvbm5lY3QsCisJLnNvY2tl dHBhaXIJPSBzb2NrX25vX3NvY2tldHBhaXIsCisJLmFjY2VwdAkJPSBzb2NrX25vX2FjY2VwdCwK KwkuZ2V0bmFtZQk9IHBwcG9sMnRwX2dldG5hbWUsCisJLnBvbGwJCT0gZGF0YWdyYW1fcG9sbCwK KwkubGlzdGVuCQk9IHNvY2tfbm9fbGlzdGVuLAorCS5zaHV0ZG93bgk9IHNvY2tfbm9fc2h1dGRv d24sCisJLnNldHNvY2tvcHQJPSBwcHBvbDJ0cF9zZXRzb2Nrb3B0LAorCS5nZXRzb2Nrb3B0CT0g cHBwb2wydHBfZ2V0c29ja29wdCwKKwkuc2VuZG1zZwk9IHBwcG9sMnRwX3NlbmRtc2csCisJLnJl Y3Ztc2cJPSBwcHBvbDJ0cF9yZWN2bXNnLAorCS5tbWFwCQk9IHNvY2tfbm9fbW1hcAorfTsKKwor c3RydWN0IHBwcG94X3Byb3RvIHBwcG9sMnRwX3Byb3RvID0geworCS5jcmVhdGUJCT0gcHBwb2wy dHBfY3JlYXRlLAorCS5pb2N0bAkJPSBwcHBvbDJ0cF9pb2N0bAorfTsKKworaW50IF9faW5pdCBw cHBvbDJ0cF9pbml0KHZvaWQpCit7CisJaW50IGVyciA9IHJlZ2lzdGVyX3BwcG94X3Byb3RvKFBY X1BST1RPX09MMlRQLCAmcHBwb2wydHBfcHJvdG8pOworCisJaWYgKGVyciA9PSAwKSB7CisjaWZk ZWYgQ09ORklHX1BST0NfRlMKKwkJcHBwb2wydHBfcHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJw cHBvbDJ0cCIsIDAsIHByb2NfbmV0KTsKKwkJaWYgKCFwcHBvbDJ0cF9wcm9jKSB7CisJCQlyZXR1 cm4gLUVOT01FTTsKKwkJfQorCQlwcHBvbDJ0cF9wcm9jLT5wcm9jX2ZvcHMgPSAmcHBwb2wydHBf cHJvY19mb3BzOworI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCisJCXByaW50ayhLRVJOX0lO Rk8gIlBQUG9MMlRQIGtlcm5lbCBkcml2ZXIsICVzXG4iLAorCQkgICAgICAgUFBQT0wyVFBfRFJW X1ZFUlNJT04pOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgX19leGl0IHBwcG9sMnRw X2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX3BwcG94X3Byb3RvKFBYX1BST1RPX09MMlRQKTsK KyNpZmRlZiBDT05GSUdfUFJPQ19GUworCXJlbW92ZV9wcm9jX2VudHJ5KCJwcHBvbDJ0cCIsIHBy b2NfbmV0KTsKKyNlbmRpZgorfQorCittb2R1bGVfaW5pdChwcHBvbDJ0cF9pbml0KTsKK21vZHVs ZV9leGl0KHBwcG9sMnRwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJ0aWpuIHZhbiBPb3N0 ZXJob3V0IDxrbGVwdG9nQHN2YW5hLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUFBQIG92 ZXIgTDJUUCBvdmVyIFVEUCwgIiBQUFBPTDJUUF9EUlZfVkVSU0lPTik7CitNT0RVTEVfTElDRU5T RSgiR1BMIik7CmRpZmYgLU5hdXIgbGludXgtMi42LjguMS5vcmlnL2luY2x1ZGUvbGludXgvaWZf cHBwLmggbGludXgtMi42LjguMS9pbmNsdWRlL2xpbnV4L2lmX3BwcC5oCi0tLSBsaW51eC0yLjYu OC4xLm9yaWcvaW5jbHVkZS9saW51eC9pZl9wcHAuaAkyMDA0LTA4LTE0IDExOjU2OjIyLjAwMDAw MDAwMCArMDEwMAorKysgbGludXgtMi42LjguMS9pbmNsdWRlL2xpbnV4L2lmX3BwcC5oCTIwMDQt MDktMjAgMTI6MTI6MjguMDAwMDAwMDAwICswMTAwCkBAIC0xMDcsNiArMTA3LDIxIEBACiAJc3Ry dWN0IHBwcF9jb21wX3N0YXRzIHN0YXRzOwogfTsKIAorLyogRm9yIFBQUElPQ0dMMlRQU1RBVFMg Ki8KK3N0cnVjdCBwcHBvbDJ0cF9pb2Nfc3RhdHMgeworCV9fdTE2CXR1bm5lbF9pZDsJLyogcmVk dW5kYW50ICovCisJX191MTYJc2Vzc2lvbl9pZDsJLyogaWYgemVybywgZ2V0IHR1bm5lbCBzdGF0 cyAqLworCV9fdTMyCXR4X3BhY2tldHM7CisJX191MzIJdHhfYnl0ZXM7CisJX191MzIJdHhfZXJy b3JzOworCV9fdTMyCXJ4X3BhY2tldHM7CisJX191MzIJcnhfYnl0ZXM7CisJX191MzIJcnhfc2Vx X2Rpc2NhcmRzOworCV9fdTMyCXJ4X29vc19wYWNrZXRzOworCV9fdTMyCXJ4X2Vycm9yczsKKwlp bnQJdXNpbmdfaXBzZWM7CS8qIHZhbGlkIG9ubHkgZm9yIHNlc3Npb25faWQgPT0gMCAqLworfTsK KwogI2RlZmluZSBpZnJfX25hbWUgICAgICAgYi5pZnJfaWZybi5pZnJuX25hbWUKICNkZWZpbmUg c3RhdHNfcHRyICAgICAgIGIuaWZyX2lmcnUuaWZydV9kYXRhCiAKQEAgLTE0Myw2ICsxNTgsNyBA QAogI2RlZmluZSBQUFBJT0NESVNDT05OCV9JTygndCcsIDU3KQkJLyogZGlzY29ubmVjdCBjaGFu bmVsICovCiAjZGVmaW5lIFBQUElPQ0FUVENIQU4JX0lPVygndCcsIDU2LCBpbnQpCS8qIGF0dGFj aCB0byBwcHAgY2hhbm5lbCAqLwogI2RlZmluZSBQUFBJT0NHQ0hBTglfSU9SKCd0JywgNTUsIGlu dCkJLyogZ2V0IHBwcCBjaGFubmVsIG51bWJlciAqLworI2RlZmluZQlQUFBJT0NHTDJUUFNUQVRT IF9JT1IoJ3QnLCA1NCwgc3RydWN0IHBwcG9sMnRwX2lvY19zdGF0cykKIAogI2RlZmluZSBTSU9D R1BQUFNUQVRTICAgKFNJT0NERVZQUklWQVRFICsgMCkKICNkZWZpbmUgU0lPQ0dQUFBWRVIgICAg IChTSU9DREVWUFJJVkFURSArIDEpCS8qIE5FVkVSIGNoYW5nZSB0aGlzISEgKi8KZGlmZiAtTmF1 ciBsaW51eC0yLjYuOC4xLm9yaWcvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oIGxpbnV4LTIu Ni44LjEvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oCi0tLSBsaW51eC0yLjYuOC4xLm9yaWcv aW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyBsaW51eC0yLjYuOC4xL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaAkyMDA0 LTA5LTIwIDEyOjA3OjU5LjAwMDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDY1IEBACisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiBMaW51eCBQUFAgb3ZlciBMMlRQIChQUFBvTDJUUCkgU29ja2V0IElt cGxlbWVudGF0aW9uIChSRkMgMjY2MSkgCisgKgorICogVGhpcyBmaWxlIHN1cHBsaWVzIGRlZmlu aXRpb25zIHJlcXVpcmVkIGJ5IHRoZSBQUFAgb3ZlciBMMlRQIGRyaXZlcgorICogKHBwcG9sMnRw LmMpLiAgQWxsIHZlcnNpb24gaW5mb3JtYXRpb24gd3J0IHRoaXMgZmlsZSBpcyBsb2NhdGVkIGlu IHBwcG9sMnRwLmMKKyAqCisgKiBMaWNlbnNlOgorICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCQltb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJCWFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgor ICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICovCisKKyNpZm5kZWYgX19MSU5VWF9JRl9QUFBPTDJUUF9ICisjZGVmaW5lIF9f TElOVVhfSUZfUFBQT0wyVFBfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZmRlZiBf X0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNlbmRpZgorCisvKiBTdHJ1Y3R1cmUg dXNlZCB0byBiaW5kKCkgdGhlIHNvY2tldCB0byBhIHBhcnRpY3VsYXIgc29ja2V0ICYgdHVubmVs ICovCitzdHJ1Y3QgcHBwb2wydHBfYWRkcgoreworCWludAlmZDsJCSAvKiBGRCBvZiBVRFAgc29j a2V0IHRvIHVzZSAqLworCQorCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOyAvKiBJUCBhZGRyZXNz IGFuZCBwb3J0IHRvIHNlbmQgdG8gKi8KKwkKKwlfX3UxNiBzX3R1bm5lbCwgc19zZXNzaW9uOyAg ICAvKiBGb3IgbWF0Y2hpbmcgaW5jb21pbmcgcGFja2V0cyAqLworCV9fdTE2IGRfdHVubmVsLCBk X3Nlc3Npb247ICAgIC8qIEZvciBzZW5kaW5nIG91dGdvaW5nIHBhY2tldHMgKi8KK307CisKKy8q IFNvY2tldCBvcHRpb25zOgorICogREVCVUcJLSBiaXRtYXNrIG9mIGRlYnVnIG1lc3NhZ2UgY2F0 ZWdvcmllcworICogU0VORFNFUQktIDAgPT4gZG9uJ3Qgc2VuZCBwYWNrZXRzIHdpdGggc2VxdWVu Y2UgbnVtYmVycworICoJCSAgMSA9PiBzZW5kIHBhY2tldHMgd2l0aCBzZXF1ZW5jZSBudW1iZXJz CisgKiBSRUNWU0VRCS0gMCA9PiByZWNlaXZlIHBhY2tldCBzZXF1ZW5jZSBudW1iZXJzIGFyZSBv cHRpb25hbAorICoJCSAgMSA9PiBkcm9wIHJlY2VpdmUgcGFja2V0cyB3aXRob3V0IHNlcXVlbmNl IG51bWJlcnMKKyAqIExOU01PREUJLSAwID0+IGFjdCBhcyBMQUMuCisgKgkJICAxID0+IGFjdCBh cyBMTlMuCisgKiBSRU9SREVSVE8JLSByZW9yZGVyIHRpbWVvdXQgKGluIG1pbGxpc2VjcykuIElm IDAsIGRvbid0IHRyeSB0byByZW9yZGVyLgorICovCitlbnVtIHsKKwlQUFBPTDJUUF9TT19ERUJV Rwk9IDEsCisJUFBQT0wyVFBfU09fUkVDVlNFUQk9IDIsCisJUFBQT0wyVFBfU09fU0VORFNFUQk9 IDMsCisJUFBQT0wyVFBfU09fTE5TTU9ERQk9IDQsCisJUFBQT0wyVFBfU09fUkVPUkRFUlRPCT0g NSwKK307CisKKy8qIERlYnVnIG1lc3NhZ2UgY2F0ZWdvcmllcyBmb3IgdGhlIERFQlVHIHNvY2tl dCBvcHRpb24gKi8KK2VudW0geworCVBQUE9MMlRQX01TR19ERUJVRwk9ICgxIDw8IDApLAkvKiB2 ZXJib3NlIGRlYnVnIChpZgorCQkJCQkJICogY29tcGlsZWQgaW4pICovIAorCVBQUE9MMlRQX01T R19DT05UUk9MCT0gKDEgPDwgMSksCS8qIHVzZXJzcGFjZSAtIGtlcm5lbAorCQkJCQkJICogaW50 ZXJmYWNlICovCisJUFBQT0wyVFBfTVNHX1NFUQk9ICgxIDw8IDIpLAkvKiBzZXF1ZW5jZSBudW1i ZXJzICovCisJUFBQT0wyVFBfTVNHX0RBVEEJPSAoMSA8PCAzKSwJLyogZGF0YSBwYWNrZXRzICov Cit9OworCisKKworI2VuZGlmCmRpZmYgLU5hdXIgbGludXgtMi42LjguMS5vcmlnL2luY2x1ZGUv bGludXgvaWZfcHBwb3guaCBsaW51eC0yLjYuOC4xL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAot LS0gbGludXgtMi42LjguMS5vcmlnL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaAkyMDA0LTA5LTIw IDEyOjQ1OjIwLjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi42LjguMS9pbmNsdWRlL2xpbnV4 L2lmX3BwcG94LmgJMjAwNC0wOS0yMCAxMjo0Njo0Ni4wMDAwMDAwMDAgKzAxMDAKQEAgLTI3LDYg KzI3LDcgQEAKICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcHBw X2NoYW5uZWwuaD4KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjaW5jbHVkZSA8bGludXgvaWZf cHBwb2wydHAuaD4KIAogLyogRm9yIHVzZXItc3BhY2UgcHJvZ3JhbXMgdG8gcGljayB1cCB0aGVz ZSBkZWZpbml0aW9ucwogICogd2hpY2ggdGhleSB3b3VsZG4ndCBnZXQgb3RoZXJ3aXNlIHdpdGhv dXQgZGVmaW5pbmcgX19LRVJORUxfXwpAQCAtNTAsNyArNTEsOCBAQAogICogUHJvdG9jb2xzIHN1 cHBvcnRlZCBieSBBRl9QUFBPWAogICovCiAjZGVmaW5lIFBYX1BST1RPX09FCTAgLyogQ3VycmVu dGx5IGp1c3QgUFBQb0UgKi8KLSNkZWZpbmUgUFhfTUFYX1BST1RPCTEKKyNkZWZpbmUgUFhfUFJP VE9fT0wyVFAJMSAvKiBOb3cgTDJUUCBhbHNvICovCisjZGVmaW5lIFBYX01BWF9QUk9UTwkyCiAK IC8qIFRoZSB1c2Ugb2YgYSB1bmlvbiBpc24ndCB2aWFibGUgYmVjYXVzZSB0aGUgc2l6ZSBvZiB0 aGlzIHN0cnVjdAogICogbXVzdCBzdGF5IGZpeGVkIG92ZXIgdGltZSAtLSBhcHBsaWNhdGlvbnMg dXNlIHNpemVvZihzdHJ1Y3QKQEAgLTcyLDYgKzc0LDEyIEBACiAJc3RydWN0IHBwcG9lX2FkZHIg cHBwb2U7CiB9X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3Qgc29ja2FkZHJfcHBw b2wydHAgeworCXNhX2ZhbWlseV90CXNhX2ZhbWlseTsJLyogYWRkcmVzcyBmYW1pbHksIEFGX1BQ UE9YICovCisJdW5zaWduZWQgaW50CXNhX3Byb3RvY29sOwkvKiBwcm90b2NvbCBpZGVudGlmaWVy ICovCisJc3RydWN0IHBwcG9sMnRwX2FkZHIgcHBwb2wydHA7Cit9X19hdHRyaWJ1dGVfXyAoKHBh Y2tlZCkpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogaW9jdGwgaW50ZXJmYWNlIGZvciBkZWZp bmluZyBmb3J3YXJkaW5nIG9mIGNvbm5lY3Rpb25zCmRpZmYgLU5hdXIgbGludXgtMi42LjguMS5v cmlnL2luY2x1ZGUvbGludXgvc29ja2V0LmggbGludXgtMi42LjguMS9pbmNsdWRlL2xpbnV4L3Nv Y2tldC5oCi0tLSBsaW51eC0yLjYuOC4xLm9yaWcvaW5jbHVkZS9saW51eC9zb2NrZXQuaAkyMDA0 LTA4LTE0IDExOjU1OjU5LjAwMDAwMDAwMCArMDEwMAorKysgbGludXgtMi42LjguMS9pbmNsdWRl L2xpbnV4L3NvY2tldC5oCTIwMDQtMDktMDEgMTc6Mzc6NTUuMDAwMDAwMDAwICswMTAwCkBAIC0y NjgsNiArMjY4LDcgQEAKICNkZWZpbmUgU09MX0lSREEgICAgICAgIDI2NgogI2RlZmluZSBTT0xf TkVUQkVVSQkyNjcKICNkZWZpbmUgU09MX0xMQwkJMjY4CisjZGVmaW5lIFNPTF9QUFBPTDJUUAky NjkKIAogLyogSVBYIG9wdGlvbnMgKi8KICNkZWZpbmUgSVBYX1RZUEUJMQpkaWZmIC1OYXVyIGxp bnV4LTIuNi44LjEub3JpZy9NQUlOVEFJTkVSUyBsaW51eC0yLjYuOC4xL01BSU5UQUlORVJTCi0t LSBsaW51eC0yLjYuOC4xLm9yaWcvTUFJTlRBSU5FUlMJMjAwNC0wOC0xNCAxMTo1NTozNC4wMDAw MDAwMDAgKzAxMDAKKysrIGxpbnV4LTIuNi44LjEvTUFJTlRBSU5FUlMJMjAwNC0wOS0yMCAxMToy Mzo0Mi4wMDAwMDAwMDAgKzAxMDAKQEAgLTE2OTQsNiArMTY5NCwxMSBAQAogTToJbW9zdHJvd3NA c3R5eC51d2F0ZXJsb28uY2EKIFM6CU1haW50YWluZWQKIAorUFBQIE9WRVIgTDJUUAorUDoJTWFy dGlqbiB2YW4gT29zdGVyaG91dAorTToJa2xlcHRvZ0BzdmFuYS5vcmcKK1M6CU1haW50YWluZWQK KwogUFJFRU1QVElCTEUgS0VSTkVMCiBQOglSb2JlcnQgTG92ZQogTToJcm1sQHRlY2g5Lm5ldAo= ---MOQ1095714704f29a8d8a0a03d7f3fed328bf7615d061--