From owner-freebsd-xen@FreeBSD.ORG Wed Dec 21 20:47:19 2011 Return-Path: Delivered-To: xen@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DB82C106566B; Wed, 21 Dec 2011 20:47:19 +0000 (UTC) (envelope-from alc@rice.edu) Received: from mh8.mail.rice.edu (mh8.mail.rice.edu [128.42.201.24]) by mx1.freebsd.org (Postfix) with ESMTP id 180308FC08; Wed, 21 Dec 2011 20:47:19 +0000 (UTC) Received: from mh8.mail.rice.edu (localhost.localdomain [127.0.0.1]) by mh8.mail.rice.edu (Postfix) with ESMTP id 94696291CD3; Wed, 21 Dec 2011 14:47:18 -0600 (CST) Received: from mh8.mail.rice.edu (localhost.localdomain [127.0.0.1]) by mh8.mail.rice.edu (Postfix) with ESMTP id 82FD729761F; Wed, 21 Dec 2011 14:47:18 -0600 (CST) X-Virus-Scanned: by amavis-2.6.4 at mh8.mail.rice.edu, auth channel Received: from mh8.mail.rice.edu ([127.0.0.1]) by mh8.mail.rice.edu (mh8.mail.rice.edu [127.0.0.1]) (amavis, port 10026) with ESMTP id hQzlSnOjMHtH; Wed, 21 Dec 2011 14:47:18 -0600 (CST) Received: from adsl-216-63-78-18.dsl.hstntx.swbell.net (adsl-216-63-78-18.dsl.hstntx.swbell.net [216.63.78.18]) (using TLSv1 with cipher RC4-MD5 (128/128 bits)) (No client certificate requested) (Authenticated sender: alc) by mh8.mail.rice.edu (Postfix) with ESMTPSA id BE3E9291CD1; Wed, 21 Dec 2011 14:47:14 -0600 (CST) Message-ID: <4EF245D1.2050503@rice.edu> Date: Wed, 21 Dec 2011 14:47:13 -0600 From: Alan Cox User-Agent: Mozilla/5.0 (X11; FreeBSD i386; rv:8.0) Gecko/20111113 Thunderbird/8.0 MIME-Version: 1.0 To: Sean Bruno References: <4EEB9CCE.6090701@rice.edu> <1324169806.3093.3.camel@hitfishpass-lx.corp.yahoo.com> <4EED4982.3080208@freebsd.org> <1324339762.3093.14.camel@hitfishpass-lx.corp.yahoo.com> <4EF04F3C.9010309@rice.edu> <1324387685.3093.28.camel@hitfishpass-lx.corp.yahoo.com> <4EF0D8D7.2060503@rice.edu> <4EF0EC1A.4010604@freebsd.org> <1324412718.12783.10.camel@hitfishpass-lx.corp.yahoo.com> In-Reply-To: <1324412718.12783.10.camel@hitfishpass-lx.corp.yahoo.com> Content-Type: multipart/mixed; boundary="------------010503070403030001090606" Cc: "xen@freebsd.org" Subject: Re: PV i386 patch X-BeenThere: freebsd-xen@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion of the freebsd port to xen - implementation and usage List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Dec 2011 20:47:19 -0000 This is a multi-part message in MIME format. --------------010503070403030001090606 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Can you please try the attached patch? I'm trying to reduce the number of differences between the native and Xen pmap implementations. Alan --------------010503070403030001090606 Content-Type: text/plain; name="native_vs_xen.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="native_vs_xen.diff" LS0tIGkzODYvaTM4Ni9wbWFwLmMJMjAxMS0xMi0yMSAxMzowNDoxNy4wMDAwMDAwMDAgLTA2 MDAKKysrIGkzODYveGVuL3BtYXAuYwkyMDExLTEyLTIxIDEzOjA0OjQ4LjAwMDAwMDAwMCAt MDYwMApAQCAtNSw3ICs1LDcgQEAKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5 cmlnaHQgKGMpIDE5OTQgRGF2aWQgR3JlZW5tYW4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCBBbGFuIEwuIENveCA8YWxjQGNzLnJpY2Uu ZWR1PgorICogQ29weXJpZ2h0IChjKSAyMDA1IEFsYW4gTC4gQ294IDxhbGNAY3MucmljZS5l ZHU+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29kZSBpcyBkZXJp dmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKQEAgLTc1LDcg Kzc1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZy ZWVCU0Q6IGhlYWQvc3lzL2kzODYvaTM4Ni9wbWFwLmMgMjI4NTEzIDIwMTEtMTItMTQgMjM6 NTc6NDdaIGFsYyAkIik7CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL2kzODYveGVu L3BtYXAuYyAyMjg3NDYgMjAxMS0xMi0yMCAyMDoxNjoxMlogYWxjICQiKTsKIAogLyoKICAq CU1hbmFnZXMgcGh5c2ljYWwgYWRkcmVzcyBtYXBzLgpAQCAtMTM4LDcgKzEzOCw2IEBACiAj aW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+CiAjaW5jbHVkZSA8dm0vdm1fcGFnZW91dC5oPgog I2luY2x1ZGUgPHZtL3ZtX3BhZ2VyLmg+Ci0jaW5jbHVkZSA8dm0vdm1fcmVzZXJ2Lmg+CiAj aW5jbHVkZSA8dm0vdW1hLmg+CiAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPgpAQCAtMTU0 LDYgKzE1MywxMiBAQAogI2luY2x1ZGUgPG1hY2hpbmUveGJveC5oPgogI2VuZGlmCiAKKyNp bmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgorI2luY2x1ZGUgPHhlbi9oeXBlcnZpc29y Lmg+CisjaW5jbHVkZSA8bWFjaGluZS94ZW4vaHlwZXJjYWxsLmg+CisjaW5jbHVkZSA8bWFj aGluZS94ZW4veGVudmFyLmg+CisjaW5jbHVkZSA8bWFjaGluZS94ZW4veGVuZnVuYy5oPgor CiAjaWYgIWRlZmluZWQoQ1BVX0RJU0FCTEVfU1NFKSAmJiBkZWZpbmVkKEk2ODZfQ1BVKQog I2RlZmluZSBDUFVfRU5BQkxFX1NTRQogI2VuZGlmCkBAIC0xNjIsNiArMTY3LDggQEAKICNk ZWZpbmUgUE1BUF9TSFBHUEVSUFJPQyAyMDAKICNlbmRpZgogCisjZGVmaW5lIERJQUdOT1NU SUMKKwogI2lmICFkZWZpbmVkKERJQUdOT1NUSUMpCiAjaWZkZWYgX19HTlVDX0dOVV9JTkxJ TkVfXwogI2RlZmluZSBQTUFQX0lOTElORQlfX2F0dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVf XykpIGlubGluZQpAQCAtMTc5LDkgKzE4Niw2IEBACiAjZGVmaW5lIFBWX1NUQVQoeCkJZG8g eyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUJcGFfaW5kZXgocGEpCSgocGEpID4+ IFBEUlNISUZUKQotI2RlZmluZQlwYV90b19wdmgocGEpCSgmcHZfdGFibGVbcGFfaW5kZXgo cGEpXSkKLQogLyoKICAqIEdldCBQREVzIGFuZCBQVEVzIGZvciB1c2VyL2tlcm5lbCBhZGRy ZXNzIHNwYWNlCiAgKi8KQEAgLTE5NCwxMCArMTk4LDEzIEBACiAjZGVmaW5lIHBtYXBfcHRl X3UocHRlKQkJKCgqKGludCAqKXB0ZSAmIFBHX0EpICE9IDApCiAjZGVmaW5lIHBtYXBfcHRl X3YocHRlKQkJKCgqKGludCAqKXB0ZSAmIFBHX1YpICE9IDApCiAKLSNkZWZpbmUgcG1hcF9w dGVfc2V0X3cocHRlLCB2KQkoKHYpID8gYXRvbWljX3NldF9pbnQoKHVfaW50ICopKHB0ZSks IFBHX1cpIDogXAotICAgIGF0b21pY19jbGVhcl9pbnQoKHVfaW50ICopKHB0ZSksIFBHX1cp KQogI2RlZmluZSBwbWFwX3B0ZV9zZXRfcHJvdChwdGUsIHYpICgoKihpbnQgKilwdGUgJj0g flBHX1BST1QpLCAoKihpbnQgKilwdGUgfD0gKHYpKSkKIAorI2RlZmluZSBIQU1GSVNURURf TE9DS0lORworI2lmZGVmIEhBTUZJU1RFRF9MT0NLSU5HCitzdGF0aWMgc3RydWN0IG10eCBj cmVhdGVkZWxldGVfbG9jazsKKyNlbmRpZgorCiBzdHJ1Y3QgcG1hcCBrZXJuZWxfcG1hcF9z dG9yZTsKIExJU1RfSEVBRChwbWFwbGlzdCwgcG1hcCk7CiBzdGF0aWMgc3RydWN0IHBtYXBs aXN0IGFsbHBtYXBzOwpAQCAtMjA4LDM0ICsyMTUsMjIgQEAKIGludCBwZ2VmbGFnID0gMDsJ CS8qIFBHX0cgb3ItaW4gKi8KIGludCBwc2VmbGFnID0gMDsJCS8qIFBHX1BTIG9yLWluICov CiAKLXN0YXRpYyBpbnQgbmtwdCA9IE5LUFQ7Ci12bV9vZmZzZXRfdCBrZXJuZWxfdm1fZW5k ID0gS0VSTkJBU0UgKyBOS1BUICogTkJQRFI7CitpbnQgbmtwdDsKK3ZtX29mZnNldF90IGtl cm5lbF92bV9lbmQ7CiBleHRlcm4gdV9pbnQzMl90IEtFUk5lbmQ7Ci1leHRlcm4gdV9pbnQz Ml90IEtQVHBoeXM7CiAKICNpZmRlZiBQQUUKIHB0X2VudHJ5X3QgcGdfbng7Ci1zdGF0aWMg dW1hX3pvbmVfdCBwZHB0em9uZTsKICNlbmRpZgogCiBzdGF0aWMgU1lTQ1RMX05PREUoX3Zt LCBPSURfQVVUTywgcG1hcCwgQ1RMRkxBR19SRCwgMCwgIlZNL3BtYXAgcGFyYW1ldGVycyIp OwogCi1zdGF0aWMgaW50IHBhdF93b3JrcyA9IDE7Ci1TWVNDVExfSU5UKF92bV9wbWFwLCBP SURfQVVUTywgcGF0X3dvcmtzLCBDVExGTEFHX1JELCAmcGF0X3dvcmtzLCAxLAotICAgICJJ cyBwYWdlIGF0dHJpYnV0ZSB0YWJsZSBmdWxseSBmdW5jdGlvbmFsPyIpOwotCi1zdGF0aWMg aW50IHBnX3BzX2VuYWJsZWQgPSAxOwotU1lTQ1RMX0lOVChfdm1fcG1hcCwgT0lEX0FVVE8s IHBnX3BzX2VuYWJsZWQsIENUTEZMQUdfUkRUVU4sICZwZ19wc19lbmFibGVkLCAwLAotICAg ICJBcmUgbGFyZ2UgcGFnZSBtYXBwaW5ncyBlbmFibGVkPyIpOwotCi0jZGVmaW5lCVBBVF9J TkRFWF9TSVpFCTgKLXN0YXRpYyBpbnQgcGF0X2luZGV4W1BBVF9JTkRFWF9TSVpFXTsJLyog Y2FjaGUgbW9kZSB0byBQQVQgaW5kZXggY29udmVyc2lvbiAqLworc3RhdGljIGludCBwYXRf d29ya3M7CQkJLyogSXMgcGFnZSBhdHRyaWJ1dGUgdGFibGUgc2FuZT8gKi8KIAogLyoKICAq IERhdGEgZm9yIHRoZSBwdiBlbnRyeSBhbGxvY2F0aW9uIG1lY2hhbmlzbQogICovCiBzdGF0 aWMgaW50IHB2X2VudHJ5X2NvdW50ID0gMCwgcHZfZW50cnlfbWF4ID0gMCwgcHZfZW50cnlf aGlnaF93YXRlciA9IDA7Ci1zdGF0aWMgc3RydWN0IG1kX3BhZ2UgKnB2X3RhYmxlOwogc3Rh dGljIGludCBzaHBncGVycHJvYyA9IFBNQVBfU0hQR1BFUlBST0M7CiAKIHN0cnVjdCBwdl9j aHVuayAqcHZfY2h1bmtiYXNlOwkJLyogS1ZBIGJsb2NrIGZvciBwdl9jaHVua3MgKi8KQEAg LTI1MywxMCArMjQ4LDggQEAKIAljYWRkcl90CUNBRERSMjsKIH07CiBzdGF0aWMgc3RydWN0 IHN5c21hcHMgc3lzbWFwc19wY3B1W01BWENQVV07Ci1wdF9lbnRyeV90ICpDTUFQMSA9IDA7 CiBzdGF0aWMgcHRfZW50cnlfdCAqQ01BUDM7Ci1zdGF0aWMgcGRfZW50cnlfdCAqS1BURDsK LWNhZGRyX3QgQ0FERFIxID0gMCwgcHR2bW1hcCA9IDA7CitjYWRkcl90IHB0dm1tYXAgPSAw Owogc3RhdGljIGNhZGRyX3QgQ0FERFIzOwogc3RydWN0IG1zZ2J1ZiAqbXNnYnVmcCA9IDA7 CiAKQEAgLTI4Niw0NyArMjc5LDIyIEBACiAKIHN0YXRpYyB2b2lkCWZyZWVfcHZfZW50cnko cG1hcF90IHBtYXAsIHB2X2VudHJ5X3QgcHYpOwogc3RhdGljIHB2X2VudHJ5X3QgZ2V0X3B2 X2VudHJ5KHBtYXBfdCBsb2NrZWRfcG1hcCwgaW50IHRyeSk7Ci1zdGF0aWMgdm9pZAlwbWFw X3B2X2RlbW90ZV9wZGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2bV9wYWRkcl90 IHBhKTsKLXN0YXRpYyBib29sZWFuX3QgcG1hcF9wdl9pbnNlcnRfcGRlKHBtYXBfdCBwbWFw LCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFkZHJfdCBwYSk7Ci1zdGF0aWMgdm9pZAlwbWFwX3B2 X3Byb21vdGVfcGRlKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFkZHJfdCBw YSk7CiBzdGF0aWMgdm9pZAlwbWFwX3B2aF9mcmVlKHN0cnVjdCBtZF9wYWdlICpwdmgsIHBt YXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSk7CiBzdGF0aWMgcHZfZW50cnlfdCBwbWFwX3B2 aF9yZW1vdmUoc3RydWN0IG1kX3BhZ2UgKnB2aCwgcG1hcF90IHBtYXAsCiAJCSAgICB2bV9v ZmZzZXRfdCB2YSk7Ci1zdGF0aWMgaW50CXBtYXBfcHZoX3dpcmVkX21hcHBpbmdzKHN0cnVj dCBtZF9wYWdlICpwdmgsIGludCBjb3VudCk7CiAKLXN0YXRpYyBib29sZWFuX3QgcG1hcF9k ZW1vdGVfcGRlKHBtYXBfdCBwbWFwLCBwZF9lbnRyeV90ICpwZGUsIHZtX29mZnNldF90IHZh KTsKLXN0YXRpYyBib29sZWFuX3QgcG1hcF9lbnRlcl9wZGUocG1hcF90IHBtYXAsIHZtX29m ZnNldF90IHZhLCB2bV9wYWdlX3QgbSwKLSAgICB2bV9wcm90X3QgcHJvdCk7Ci1zdGF0aWMg dm1fcGFnZV90IHBtYXBfZW50ZXJfcXVpY2tfbG9ja2VkKHBtYXBfdCBwbWFwLCB2bV9vZmZz ZXRfdCB2YSwKK3N0YXRpYyB2bV9wYWdlX3QgcG1hcF9lbnRlcl9xdWlja19sb2NrZWQobXVs dGljYWxsX2VudHJ5X3QgKiptY2wsIGludCAqY291bnQsIHBtYXBfdCBwbWFwLCB2bV9vZmZz ZXRfdCB2YSwKICAgICB2bV9wYWdlX3QgbSwgdm1fcHJvdF90IHByb3QsIHZtX3BhZ2VfdCBt cHRlKTsKIHN0YXRpYyB2b2lkIHBtYXBfZmx1c2hfcGFnZSh2bV9wYWdlX3QgbSk7Ci1zdGF0 aWMgdm9pZCBwbWFwX2luc2VydF9wdF9wYWdlKHBtYXBfdCBwbWFwLCB2bV9wYWdlX3QgbXB0 ZSk7Ci1zdGF0aWMgdm9pZCBwbWFwX2ZpbGxfcHRwKHB0X2VudHJ5X3QgKmZpcnN0cHRlLCBw dF9lbnRyeV90IG5ld3B0ZSk7Ci1zdGF0aWMgYm9vbGVhbl90IHBtYXBfaXNfbW9kaWZpZWRf cHZoKHN0cnVjdCBtZF9wYWdlICpwdmgpOwotc3RhdGljIGJvb2xlYW5fdCBwbWFwX2lzX3Jl ZmVyZW5jZWRfcHZoKHN0cnVjdCBtZF9wYWdlICpwdmgpOwogc3RhdGljIHZvaWQgcG1hcF9r ZW50ZXJfYXR0cih2bV9vZmZzZXRfdCB2YSwgdm1fcGFkZHJfdCBwYSwgaW50IG1vZGUpOwot c3RhdGljIHZvaWQgcG1hcF9rZW50ZXJfcGRlKHZtX29mZnNldF90IHZhLCBwZF9lbnRyeV90 IG5ld3BkZSk7Ci1zdGF0aWMgdm1fcGFnZV90IHBtYXBfbG9va3VwX3B0X3BhZ2UocG1hcF90 IHBtYXAsIHZtX29mZnNldF90IHZhKTsKLXN0YXRpYyB2b2lkIHBtYXBfcGRlX2F0dHIocGRf ZW50cnlfdCAqcGRlLCBpbnQgY2FjaGVfYml0cyk7Ci1zdGF0aWMgdm9pZCBwbWFwX3Byb21v dGVfcGRlKHBtYXBfdCBwbWFwLCBwZF9lbnRyeV90ICpwZGUsIHZtX29mZnNldF90IHZhKTsK LXN0YXRpYyBib29sZWFuX3QgcG1hcF9wcm90ZWN0X3BkZShwbWFwX3QgcG1hcCwgcGRfZW50 cnlfdCAqcGRlLCB2bV9vZmZzZXRfdCBzdmEsCi0gICAgdm1fcHJvdF90IHByb3QpOwotc3Rh dGljIHZvaWQgcG1hcF9wdGVfYXR0cihwdF9lbnRyeV90ICpwdGUsIGludCBjYWNoZV9iaXRz KTsKLXN0YXRpYyB2b2lkIHBtYXBfcmVtb3ZlX3BkZShwbWFwX3QgcG1hcCwgcGRfZW50cnlf dCAqcGRxLCB2bV9vZmZzZXRfdCBzdmEsCi0gICAgdm1fcGFnZV90ICpmcmVlKTsKIHN0YXRp YyBpbnQgcG1hcF9yZW1vdmVfcHRlKHBtYXBfdCBwbWFwLCBwdF9lbnRyeV90ICpwdHEsIHZt X29mZnNldF90IHN2YSwKICAgICB2bV9wYWdlX3QgKmZyZWUpOwotc3RhdGljIHZvaWQgcG1h cF9yZW1vdmVfcHRfcGFnZShwbWFwX3QgcG1hcCwgdm1fcGFnZV90IG1wdGUpOwogc3RhdGlj IHZvaWQgcG1hcF9yZW1vdmVfcGFnZShzdHJ1Y3QgcG1hcCAqcG1hcCwgdm1fb2Zmc2V0X3Qg dmEsCiAgICAgdm1fcGFnZV90ICpmcmVlKTsKIHN0YXRpYyB2b2lkIHBtYXBfcmVtb3ZlX2Vu dHJ5KHN0cnVjdCBwbWFwICpwbWFwLCB2bV9wYWdlX3QgbSwKIAkJCQkJdm1fb2Zmc2V0X3Qg dmEpOwotc3RhdGljIHZvaWQgcG1hcF9pbnNlcnRfZW50cnkocG1hcF90IHBtYXAsIHZtX29m ZnNldF90IHZhLCB2bV9wYWdlX3QgbSk7CiBzdGF0aWMgYm9vbGVhbl90IHBtYXBfdHJ5X2lu c2VydF9wdl9lbnRyeShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsCiAgICAgdm1fcGFn ZV90IG0pOwotc3RhdGljIHZvaWQgcG1hcF91cGRhdGVfcGRlKHBtYXBfdCBwbWFwLCB2bV9v ZmZzZXRfdCB2YSwgcGRfZW50cnlfdCAqcGRlLAotICAgIHBkX2VudHJ5X3QgbmV3cGRlKTsK LXN0YXRpYyB2b2lkIHBtYXBfdXBkYXRlX3BkZV9pbnZhbGlkYXRlKHZtX29mZnNldF90IHZh LCBwZF9lbnRyeV90IG5ld3BkZSk7CiAKIHN0YXRpYyB2bV9wYWdlX3QgcG1hcF9hbGxvY3B0 ZShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIGludCBmbGFncyk7CiAKQEAgLTMzNSwx MCArMzAzLDcgQEAKIHN0YXRpYyBwdF9lbnRyeV90ICpwbWFwX3B0ZV9xdWljayhwbWFwX3Qg cG1hcCwgdm1fb2Zmc2V0X3QgdmEpOwogc3RhdGljIHZvaWQgcG1hcF9wdGVfcmVsZWFzZShw dF9lbnRyeV90ICpwdGUpOwogc3RhdGljIGludCBwbWFwX3VudXNlX3B0KHBtYXBfdCwgdm1f b2Zmc2V0X3QsIHZtX3BhZ2VfdCAqKTsKLSNpZmRlZiBQQUUKLXN0YXRpYyB2b2lkICpwbWFw X3BkcHRfYWxsb2NmKHVtYV96b25lX3Qgem9uZSwgaW50IGJ5dGVzLCB1X2ludDhfdCAqZmxh Z3MsIGludCB3YWl0KTsKLSNlbmRpZgotc3RhdGljIHZvaWQgcG1hcF9zZXRfcGcodm9pZCk7 CitzdGF0aWMgYm9vbGVhbl90IHBtYXBfaXNfcHJlZmF1bHRhYmxlX2xvY2tlZChwbWFwX3Qg cG1hcCwgdm1fb2Zmc2V0X3QgYWRkcik7CiAKIHN0YXRpYyBfX2lubGluZSB2b2lkIHBhZ2V6 ZXJvKHZvaWQgKnBhZ2UpOwogCkBAIC0zNTIsNiArMzE3LDM2IEBACiAgKi8KIENUQVNTRVJU KEtFUk5CQVNFICUgKDEgPDwgMjQpID09IDApOwogCit2b2lkIAorcGRfc2V0KHN0cnVjdCBw bWFwICpwbWFwLCBpbnQgcHRlcGluZGV4LCB2bV9wYWRkcl90IHZhbCwgaW50IHR5cGUpCit7 CisJdm1fcGFkZHJfdCBwZGlyX21hID0gdnRvbWFjaCgmcG1hcC0+cG1fcGRpcltwdGVwaW5k ZXhdKTsKKwkKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNIX1BEX1NFVF9WQToKKyNpZiAw CQkKKwkJeGVuX3F1ZXVlX3B0X3VwZGF0ZShzaGFkb3dfcGRpcl9tYSwKKwkJCQkgICAgeHBt YXBfcHRvbSh2YWwgJiB+KFBHX1JXKSkpOworI2VuZGlmCQkKKwkJeGVuX3F1ZXVlX3B0X3Vw ZGF0ZShwZGlyX21hLAorCQkJCSAgICB4cG1hcF9wdG9tKHZhbCkpOyAJCisJCWJyZWFrOwor CWNhc2UgU0hfUERfU0VUX1ZBX01BOgorI2lmIDAJCQorCQl4ZW5fcXVldWVfcHRfdXBkYXRl KHNoYWRvd19wZGlyX21hLAorCQkJCSAgICB2YWwgJiB+KFBHX1JXKSk7CisjZW5kaWYJCQor CQl4ZW5fcXVldWVfcHRfdXBkYXRlKHBkaXJfbWEsIHZhbCk7IAkKKwkJYnJlYWs7CisJY2Fz ZSBTSF9QRF9TRVRfVkFfQ0xFQVI6CisjaWYgMAorCQl4ZW5fcXVldWVfcHRfdXBkYXRlKHNo YWRvd19wZGlyX21hLCAwKTsKKyNlbmRpZgkJCisJCXhlbl9xdWV1ZV9wdF91cGRhdGUocGRp cl9tYSwgMCk7IAkKKwkJYnJlYWs7CisJfQorfQorCiAvKgogICoJQm9vdHN0cmFwIHRoZSBz eXN0ZW0gZW5vdWdoIHRvIHJ1biB3aXRoIHZpcnR1YWwgbWVtb3J5LgogICoKQEAgLTM4OSwy MSArMzg0LDE1IEBACiAjaWZkZWYgUEFFCiAJa2VybmVsX3BtYXAtPnBtX3BkcHQgPSAocGRw dF9lbnRyeV90ICopIChLRVJOQkFTRSArICh1X2ludClJZGxlUERQVCk7CiAjZW5kaWYKLQlr ZXJuZWxfcG1hcC0+cG1fcm9vdCA9IE5VTEw7CiAJQ1BVX0ZJTEwoJmtlcm5lbF9wbWFwLT5w bV9hY3RpdmUpOwkvKiBkb24ndCBhbGxvdyBkZWFjdGl2YXRpb24gKi8KIAlUQUlMUV9JTklU KCZrZXJuZWxfcG1hcC0+cG1fcHZjaHVuayk7CiAJTElTVF9JTklUKCZhbGxwbWFwcyk7Ci0K LQkvKgotCSAqIFJlcXVlc3QgYSBzcGluIG11dGV4IHNvIHRoYXQgY2hhbmdlcyB0byBhbGxw bWFwcyBjYW5ub3QgYmUKLQkgKiBwcmVlbXB0ZWQgYnkgc21wX3JlbmRlenZvdXNfY3B1cygp LiAgT3RoZXJ3aXNlLAotCSAqIHBtYXBfdXBkYXRlX3BkZV9rZXJuZWwoKSBjb3VsZCBhY2Nl c3MgYWxscG1hcHMgd2hpbGUgaXQgaXMKLQkgKiBiZWluZyBjaGFuZ2VkLgotCSAqLwogCW10 eF9pbml0KCZhbGxwbWFwc19sb2NrLCAiYWxscG1hcHMiLCBOVUxMLCBNVFhfU1BJTik7CiAJ bXR4X2xvY2tfc3BpbigmYWxscG1hcHNfbG9jayk7CiAJTElTVF9JTlNFUlRfSEVBRCgmYWxs cG1hcHMsIGtlcm5lbF9wbWFwLCBwbV9saXN0KTsKIAltdHhfdW5sb2NrX3NwaW4oJmFsbHBt YXBzX2xvY2spOworCWlmIChua3B0ID09IDApCisJCW5rcHQgPSBOS1BUOwogCiAJLyoKIAkg KiBSZXNlcnZlIHNvbWUgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMvVkEgc3BhY2UgZm9y IHRlbXBvcmFyeQpAQCAtNDI0LDkgKzQxMywxMSBAQAogCQltdHhfaW5pdCgmc3lzbWFwcy0+ bG9jaywgIlNZU01BUFMiLCBOVUxMLCBNVFhfREVGKTsKIAkJU1lTTUFQKGNhZGRyX3QsIHN5 c21hcHMtPkNNQVAxLCBzeXNtYXBzLT5DQUREUjEsIDEpCiAJCVNZU01BUChjYWRkcl90LCBz eXNtYXBzLT5DTUFQMiwgc3lzbWFwcy0+Q0FERFIyLCAxKQorCQlQVF9TRVRfTUEoc3lzbWFw cy0+Q0FERFIxLCAwKTsKKwkJUFRfU0VUX01BKHN5c21hcHMtPkNBRERSMiwgMCk7CiAJfQot CVNZU01BUChjYWRkcl90LCBDTUFQMSwgQ0FERFIxLCAxKQogCVNZU01BUChjYWRkcl90LCBD TUFQMywgQ0FERFIzLCAxKQorCVBUX1NFVF9NQShDQUREUjMsIDApOwogCiAJLyoKIAkgKiBD cmFzaGR1bXAgbWFwcy4KQEAgLTQ0NCwyNSArNDM1LDYgQEAKIAlTWVNNQVAoc3RydWN0IG1z Z2J1ZiAqLCB1bnVzZWQsIG1zZ2J1ZnAsIGF0b3Aocm91bmRfcGFnZShtc2didWZzaXplKSkp CiAKIAkvKgotCSAqIEtQVG1hcCBpcyB1c2VkIGJ5IHBtYXBfa2V4dHJhY3QoKS4KLQkgKgot CSAqIEtQVG1hcCBpcyBmaXJzdCBpbml0aWFsaXplZCBieSBsb2NvcmUuICBIb3dldmVyLCB0 aGF0IGluaXRpYWwKLQkgKiBLUFRtYXAgY2FuIG9ubHkgc3VwcG9ydCBOS1BUIHBhZ2UgdGFi bGUgcGFnZXMuICBIZXJlLCBhIGxhcmdlcgotCSAqIEtQVG1hcCBpcyBjcmVhdGVkIHRoYXQg Y2FuIHN1cHBvcnQgS1ZBX1BBR0VTIHBhZ2UgdGFibGUgcGFnZXMuCi0JICovCi0JU1lTTUFQ KHB0X2VudHJ5X3QgKiwgS1BURCwgS1BUbWFwLCBLVkFfUEFHRVMpCi0KLQlmb3IgKGkgPSAw OyBpIDwgTktQVDsgaSsrKQotCQlLUFREW2ldID0gKEtQVHBoeXMgKyAoaSA8PCBQQUdFX1NI SUZUKSkgfCBwZ2VmbGFnIHwgUEdfUlcgfCBQR19WOwotCi0JLyoKLQkgKiBBZGp1c3QgdGhl IHN0YXJ0IG9mIHRoZSBLUFREIGFuZCBLUFRtYXAgc28gdGhhdCB0aGUgaW1wbGVtZW50YXRp b24KLQkgKiBvZiBwbWFwX2tleHRyYWN0KCkgYW5kIHBtYXBfZ3Jvd2tlcm5lbCgpIGNhbiBi ZSBtYWRlIHNpbXBsZXIuCi0JICovCi0JS1BURCAtPSBLUFRESTsKLQlLUFRtYXAgLT0gaTM4 Nl9idG9wKEtQVERJIDw8IFBEUlNISUZUKTsKLQotCS8qCiAJICogcHRlbWFwIGlzIHVzZWQg Zm9yIHBtYXBfcHRlX3F1aWNrCiAJICovCiAJU1lTTUFQKHB0X2VudHJ5X3QgKiwgUE1BUDEs IFBBRERSMSwgMSkKQEAgLTQ3Nyw2ICs0NDksMTAgQEAKIAkgKiBwaHlzaWNhbCBtZW1vcnkg cmVnaW9uIHRoYXQgaXMgdXNlZCBieSB0aGUgQUNQSSB3YWtldXAgY29kZS4gIFRoaXMKIAkg KiBtYXBwaW5nIG11c3Qgbm90IGhhdmUgUEdfRyBzZXQuIAogCSAqLworI2lmbmRlZiBYRU4K KwkvKgorCSAqIGxlYXZlIGhlcmUgZGVsaWJlcmF0ZWx5IHRvIHNob3cgdGhhdCB0aGlzIGlz IG5vdCBzdXBwb3J0ZWQKKwkgKi8KICNpZmRlZiBYQk9YCiAJLyogRklYTUU6IFRoaXMgaXMg Z3Jvc3MsIGJ1dCBuZWVkZWQgZm9yIHRoZSBYQk9YLiBTaW5jZSB3ZSBhcmUgaW4gc3VjaAog CSAqIGFuIGVhcmx5IHN0YWRpdW0sIHdlIGNhbm5vdCB5ZXQgbmVhdGx5IG1hcCB2aWRlbyBt ZW1vcnkgLi4uIDotKApAQCAtNDkxLDYgKzQ2NywxMSBAQAogCiAJLyogVHVybiBvbiBQR19H IG9uIGtlcm5lbCBwYWdlKHMpICovCiAJcG1hcF9zZXRfcGcoKTsKKyNlbmRpZgorCisjaWZk ZWYgSEFNRklTVEVEX0xPQ0tJTkcKKwltdHhfaW5pdCgmY3JlYXRlZGVsZXRlX2xvY2ssICJw bWFwIGNyZWF0ZS9kZWxldGUiLCBOVUxMLCBNVFhfREVGKTsKKyNlbmRpZgogfQogCiAvKgpA QCAtNDk5LDEzMiArNDgwLDQzIEBACiB2b2lkCiBwbWFwX2luaXRfcGF0KHZvaWQpCiB7Ci0J aW50IHBhdF90YWJsZVtQQVRfSU5ERVhfU0laRV07CiAJdWludDY0X3QgcGF0X21zcjsKLQl1 X2xvbmcgY3IwLCBjcjQ7Ci0JaW50IGk7Ci0KLQkvKiBTZXQgZGVmYXVsdCBQQVQgaW5kZXgg dGFibGUuICovCi0JZm9yIChpID0gMDsgaSA8IFBBVF9JTkRFWF9TSVpFOyBpKyspCi0JCXBh dF90YWJsZVtpXSA9IC0xOwotCXBhdF90YWJsZVtQQVRfV1JJVEVfQkFDS10gPSAwOwotCXBh dF90YWJsZVtQQVRfV1JJVEVfVEhST1VHSF0gPSAxOwotCXBhdF90YWJsZVtQQVRfVU5DQUNI RUFCTEVdID0gMzsKLQlwYXRfdGFibGVbUEFUX1dSSVRFX0NPTUJJTklOR10gPSAzOwotCXBh dF90YWJsZVtQQVRfV1JJVEVfUFJPVEVDVEVEXSA9IDM7Ci0JcGF0X3RhYmxlW1BBVF9VTkNB Q0hFRF0gPSAzOwogCiAJLyogQmFpbCBpZiB0aGlzIENQVSBkb2Vzbid0IGltcGxlbWVudCBQ QVQuICovCi0JaWYgKChjcHVfZmVhdHVyZSAmIENQVUlEX1BBVCkgPT0gMCkgewotCQlmb3Ig KGkgPSAwOyBpIDwgUEFUX0lOREVYX1NJWkU7IGkrKykKLQkJCXBhdF9pbmRleFtpXSA9IHBh dF90YWJsZVtpXTsKLQkJcGF0X3dvcmtzID0gMDsKKwlpZiAoIShjcHVfZmVhdHVyZSAmIENQ VUlEX1BBVCkpCiAJCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIER1ZSB0byBzb21lIEludGVs IGVycmF0YSwgd2UgY2FuIG9ubHkgc2FmZWx5IHVzZSB0aGUgbG93ZXIgNAotCSAqIFBBVCBl bnRyaWVzLgotCSAqCi0JICogICBJbnRlbCBQZW50aXVtIElJSSBQcm9jZXNzb3IgU3BlY2lm aWNhdGlvbiBVcGRhdGUKLQkgKiBFcnJhdGEgRS4yNyAoVXBwZXIgRm91ciBQQVQgRW50cmll cyBOb3QgVXNhYmxlIFdpdGggTW9kZSBCCi0JICogb3IgTW9kZSBDIFBhZ2luZykKLQkgKgot CSAqICAgSW50ZWwgUGVudGl1bSBJViAgUHJvY2Vzc29yIFNwZWNpZmljYXRpb24gVXBkYXRl Ci0JICogRXJyYXRhIE40NiAoUEFUIEluZGV4IE1TQiBNYXkgQmUgQ2FsY3VsYXRlZCBJbmNv cnJlY3RseSkKLQkgKi8KLQlpZiAoY3B1X3ZlbmRvcl9pZCA9PSBDUFVfVkVORE9SX0lOVEVM ICYmCi0JICAgICEoQ1BVSURfVE9fRkFNSUxZKGNwdV9pZCkgPT0gNiAmJiBDUFVJRF9UT19N T0RFTChjcHVfaWQpID49IDB4ZSkpCi0JCXBhdF93b3JrcyA9IDA7CiAKLQkvKiBJbml0aWFs aXplIGRlZmF1bHQgUEFUIGVudHJpZXMuICovCi0JcGF0X21zciA9IFBBVF9WQUxVRSgwLCBQ QVRfV1JJVEVfQkFDSykgfAotCSAgICBQQVRfVkFMVUUoMSwgUEFUX1dSSVRFX1RIUk9VR0gp IHwKLQkgICAgUEFUX1ZBTFVFKDIsIFBBVF9VTkNBQ0hFRCkgfAotCSAgICBQQVRfVkFMVUUo MywgUEFUX1VOQ0FDSEVBQkxFKSB8Ci0JICAgIFBBVF9WQUxVRSg0LCBQQVRfV1JJVEVfQkFD SykgfAotCSAgICBQQVRfVkFMVUUoNSwgUEFUX1dSSVRFX1RIUk9VR0gpIHwKLQkgICAgUEFU X1ZBTFVFKDYsIFBBVF9VTkNBQ0hFRCkgfAotCSAgICBQQVRfVkFMVUUoNywgUEFUX1VOQ0FD SEVBQkxFKTsKLQotCWlmIChwYXRfd29ya3MpIHsKKwlpZiAoY3B1X3ZlbmRvcl9pZCAhPSBD UFVfVkVORE9SX0lOVEVMIHx8CisJICAgIChDUFVJRF9UT19GQU1JTFkoY3B1X2lkKSA9PSA2 ICYmIENQVUlEX1RPX01PREVMKGNwdV9pZCkgPj0gMHhlKSkgewogCQkvKgotCQkgKiBMZWF2 ZSB0aGUgaW5kaWNlcyAwLTMgYXQgdGhlIGRlZmF1bHQgb2YgV0IsIFdULCBVQy0sIGFuZCBV Qy4KLQkJICogUHJvZ3JhbSA1IGFuZCA2IGFzIFdQIGFuZCBXQy4KLQkJICogTGVhdmUgNCBh bmQgNyBhcyBXQiBhbmQgVUMuCisJCSAqIExlYXZlIHRoZSBpbmRpY2VzIDAtMyBhdCB0aGUg ZGVmYXVsdCBvZiBXQiwgV1QsIFVDLCBhbmQgVUMtLgorCQkgKiBQcm9ncmFtIDQgYW5kIDUg YXMgV1AgYW5kIFdDLgorCQkgKiBMZWF2ZSA2IGFuZCA3IGFzIFVDIGFuZCBVQy0uCiAJCSAq LwotCQlwYXRfbXNyICY9IH4oUEFUX01BU0soNSkgfCBQQVRfTUFTSyg2KSk7Ci0JCXBhdF9t c3IgfD0gUEFUX1ZBTFVFKDUsIFBBVF9XUklURV9QUk9URUNURUQpIHwKLQkJICAgIFBBVF9W QUxVRSg2LCBQQVRfV1JJVEVfQ09NQklOSU5HKTsKLQkJcGF0X3RhYmxlW1BBVF9VTkNBQ0hF RF0gPSAyOwotCQlwYXRfdGFibGVbUEFUX1dSSVRFX1BST1RFQ1RFRF0gPSA1OwotCQlwYXRf dGFibGVbUEFUX1dSSVRFX0NPTUJJTklOR10gPSA2OworCQlwYXRfbXNyID0gcmRtc3IoTVNS X1BBVCk7CisJCXBhdF9tc3IgJj0gfihQQVRfTUFTSyg0KSB8IFBBVF9NQVNLKDUpKTsKKwkJ cGF0X21zciB8PSBQQVRfVkFMVUUoNCwgUEFUX1dSSVRFX1BST1RFQ1RFRCkgfAorCQkgICAg UEFUX1ZBTFVFKDUsIFBBVF9XUklURV9DT01CSU5JTkcpOworCQlwYXRfd29ya3MgPSAxOwog CX0gZWxzZSB7CiAJCS8qCi0JCSAqIEp1c3QgcmVwbGFjZSBQQVQgSW5kZXggMiB3aXRoIFdD IGluc3RlYWQgb2YgVUMtLgorCQkgKiBEdWUgdG8gc29tZSBJbnRlbCBlcnJhdGEsIHdlIGNh biBvbmx5IHNhZmVseSB1c2UgdGhlIGxvd2VyIDQKKwkJICogUEFUIGVudHJpZXMuICBUaHVz LCBqdXN0IHJlcGxhY2UgUEFUIEluZGV4IDIgd2l0aCBXQyBpbnN0ZWFkCisJCSAqIG9mIFVD LS4KKwkJICoKKwkJICogICBJbnRlbCBQZW50aXVtIElJSSBQcm9jZXNzb3IgU3BlY2lmaWNh dGlvbiBVcGRhdGUKKwkJICogRXJyYXRhIEUuMjcgKFVwcGVyIEZvdXIgUEFUIEVudHJpZXMg Tm90IFVzYWJsZSBXaXRoIE1vZGUgQgorCQkgKiBvciBNb2RlIEMgUGFnaW5nKQorCQkgKgor CQkgKiAgIEludGVsIFBlbnRpdW0gSVYgIFByb2Nlc3NvciBTcGVjaWZpY2F0aW9uIFVwZGF0 ZQorCQkgKiBFcnJhdGEgTjQ2IChQQVQgSW5kZXggTVNCIE1heSBCZSBDYWxjdWxhdGVkIElu Y29ycmVjdGx5KQogCQkgKi8KKwkJcGF0X21zciA9IHJkbXNyKE1TUl9QQVQpOwogCQlwYXRf bXNyICY9IH5QQVRfTUFTSygyKTsKIAkJcGF0X21zciB8PSBQQVRfVkFMVUUoMiwgUEFUX1dS SVRFX0NPTUJJTklORyk7Ci0JCXBhdF90YWJsZVtQQVRfV1JJVEVfQ09NQklOSU5HXSA9IDI7 CisJCXBhdF93b3JrcyA9IDA7CiAJfQotCi0JLyogRGlzYWJsZSBQR0UuICovCi0JY3I0ID0g cmNyNCgpOwotCWxvYWRfY3I0KGNyNCAmIH5DUjRfUEdFKTsKLQotCS8qIERpc2FibGUgY2Fj aGVzIChDRCA9IDEsIE5XID0gMCkuICovCi0JY3IwID0gcmNyMCgpOwotCWxvYWRfY3IwKChj cjAgJiB+Q1IwX05XKSB8IENSMF9DRCk7Ci0KLQkvKiBGbHVzaGVzIGNhY2hlcyBhbmQgVExC cy4gKi8KLQl3YmludmQoKTsKLQlpbnZsdGxiKCk7Ci0KLQkvKiBVcGRhdGUgUEFUIGFuZCBp bmRleCB0YWJsZS4gKi8KIAl3cm1zcihNU1JfUEFULCBwYXRfbXNyKTsKLQlmb3IgKGkgPSAw OyBpIDwgUEFUX0lOREVYX1NJWkU7IGkrKykKLQkJcGF0X2luZGV4W2ldID0gcGF0X3RhYmxl W2ldOwotCi0JLyogRmx1c2ggY2FjaGVzIGFuZCBUTEJzIGFnYWluLiAqLwotCXdiaW52ZCgp OwotCWludmx0bGIoKTsKLQotCS8qIFJlc3RvcmUgY2FjaGVzIGFuZCBQR0UuICovCi0JbG9h ZF9jcjAoY3IwKTsKLQlsb2FkX2NyNChjcjQpOwotfQotCi0vKgotICogU2V0IFBHX0cgb24g a2VybmVsIHBhZ2VzLiAgT25seSB0aGUgQlNQIGNhbGxzIHRoaXMgd2hlbiBTTVAgaXMgdHVy bmVkIG9uLgotICovCi1zdGF0aWMgdm9pZAotcG1hcF9zZXRfcGcodm9pZCkKLXsKLQlwdF9l bnRyeV90ICpwdGU7Ci0Jdm1fb2Zmc2V0X3QgdmEsIGVuZHZhOwotCi0JaWYgKHBnZWZsYWcg PT0gMCkKLQkJcmV0dXJuOwotCi0JZW5kdmEgPSBLRVJOQkFTRSArIEtFUk5lbmQ7Ci0KLQlp ZiAocHNlZmxhZykgewotCQl2YSA9IEtFUk5CQVNFICsgS0VSTkxPQUQ7Ci0JCXdoaWxlICh2 YSAgPCBlbmR2YSkgewotCQkJcGRpcl9wZGUoUFRELCB2YSkgfD0gcGdlZmxhZzsKLQkJCWlu dmx0bGIoKTsJLyogUGxheSBpdCBzYWZlLCBpbnZsdGxiKCkgZXZlcnkgdGltZSAqLwotCQkJ dmEgKz0gTkJQRFI7Ci0JCX0KLQl9IGVsc2UgewotCQl2YSA9ICh2bV9vZmZzZXRfdClidGV4 dDsKLQkJd2hpbGUgKHZhIDwgZW5kdmEpIHsKLQkJCXB0ZSA9IHZ0b3B0ZSh2YSk7Ci0JCQlp ZiAoKnB0ZSkKLQkJCQkqcHRlIHw9IHBnZWZsYWc7Ci0JCQlpbnZsdGxiKCk7CS8qIFBsYXkg aXQgc2FmZSwgaW52bHRsYigpIGV2ZXJ5IHRpbWUgKi8KLQkJCXZhICs9IFBBR0VfU0laRTsK LQkJfQotCX0KIH0KIAogLyoKQEAgLTYzOCwxOCArNTMwLDYgQEAKIAltLT5tZC5wYXRfbW9k ZSA9IFBBVF9XUklURV9CQUNLOwogfQogCi0jaWZkZWYgUEFFCi1zdGF0aWMgdm9pZCAqCi1w bWFwX3BkcHRfYWxsb2NmKHVtYV96b25lX3Qgem9uZSwgaW50IGJ5dGVzLCB1X2ludDhfdCAq ZmxhZ3MsIGludCB3YWl0KQotewotCi0JLyogSW5mb3JtIFVNQSB0aGF0IHRoaXMgYWxsb2Nh dG9yIHVzZXMga2VybmVsX21hcC9vYmplY3QuICovCi0JKmZsYWdzID0gVU1BX1NMQUJfS0VS TkVMOwotCXJldHVybiAoKHZvaWQgKilrbWVtX2FsbG9jX2NvbnRpZyhrZXJuZWxfbWFwLCBi eXRlcywgd2FpdCwgMHgwVUxMLAotCSAgICAweGZmZmZmZmZmVUxMLCAxLCAwLCBWTV9NRU1B VFRSX0RFRkFVTFQpKTsKLX0KLSNlbmRpZgotCiAvKgogICogQUJ1c2UgdGhlIHB0ZSBub2Rl cyBmb3IgdW5tYXBwZWQga3ZhIHRvIHRocmVhZCBhIGt2YSBmcmVlbGlzdCB0aHJvdWdoLgog ICogUmVxdWlyZW1lbnRzOgpAQCAtNjYyLDQzICs1NDIsNDggQEAKICAqICAtIEFzc3VtZXMg YSB2bV9vZmZzZXRfdCB3aWxsIGZpdCBpbiBhIHB0ZSAodHJ1ZSBmb3IgaTM4NikuCiAgKiBC ZWNhdXNlIFBHX1YgaXMgbmV2ZXIgc2V0LCB0aGVyZSBjYW4gYmUgbm8gbWFwcGluZ3MgdG8g aW52YWxpZGF0ZS4KICAqLworc3RhdGljIGludCBwdGVsaXN0X2NvdW50ID0gMDsKIHN0YXRp YyB2bV9vZmZzZXRfdAogcG1hcF9wdGVsaXN0X2FsbG9jKHZtX29mZnNldF90ICpoZWFkKQog ewotCXB0X2VudHJ5X3QgKnB0ZTsKIAl2bV9vZmZzZXRfdCB2YTsKLQotCXZhID0gKmhlYWQ7 Ci0JaWYgKHZhID09IDApCi0JCXJldHVybiAodmEpOwkvKiBPdXQgb2YgbWVtb3J5ICovCi0J cHRlID0gdnRvcHRlKHZhKTsKLQkqaGVhZCA9ICpwdGU7Ci0JaWYgKCpoZWFkICYgUEdfVikK LQkJcGFuaWMoInBtYXBfcHRlbGlzdF9hbGxvYzogdmEgd2l0aCBQR19WIHNldCEiKTsKLQkq cHRlID0gMDsKKwl2bV9vZmZzZXRfdCAqcGhlYWQgPSAodm1fb2Zmc2V0X3QgKikqaGVhZDsK KwkKKwlpZiAocHRlbGlzdF9jb3VudCA9PSAwKSB7CisJCXByaW50Zigib3V0IG9mIG1lbW9y eSEhISEhIVxuIik7CisJCXJldHVybiAoMCk7CS8qIE91dCBvZiBtZW1vcnkgKi8KKwl9CisJ cHRlbGlzdF9jb3VudC0tOworCXZhID0gcGhlYWRbcHRlbGlzdF9jb3VudF07CiAJcmV0dXJu ICh2YSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBwbWFwX3B0ZWxpc3RfZnJlZSh2bV9vZmZzZXRf dCAqaGVhZCwgdm1fb2Zmc2V0X3QgdmEpCiB7Ci0JcHRfZW50cnlfdCAqcHRlOworCXZtX29m ZnNldF90ICpwaGVhZCA9ICh2bV9vZmZzZXRfdCAqKSpoZWFkOwogCi0JaWYgKHZhICYgUEdf VikKLQkJcGFuaWMoInBtYXBfcHRlbGlzdF9mcmVlOiBmcmVlaW5nIHZhIHdpdGggUEdfViBz ZXQhIik7Ci0JcHRlID0gdnRvcHRlKHZhKTsKLQkqcHRlID0gKmhlYWQ7CQkvKiB2aXJ0dWFs ISBQR19WIGlzIDAgdGhvdWdoICovCi0JKmhlYWQgPSB2YTsKKwlwaGVhZFtwdGVsaXN0X2Nv dW50KytdID0gdmE7CiB9CiAKIHN0YXRpYyB2b2lkCiBwbWFwX3B0ZWxpc3RfaW5pdCh2bV9v ZmZzZXRfdCAqaGVhZCwgdm9pZCAqYmFzZSwgaW50IG5wYWdlcykKIHsKLQlpbnQgaTsKKwlp bnQgaSwgbnN0YWNrcGFnZXM7CiAJdm1fb2Zmc2V0X3QgdmE7CisJdm1fcGFnZV90IG07CisJ CisJbnN0YWNrcGFnZXMgPSAobnBhZ2VzICsgUEFHRV9TSVpFL3NpemVvZih2bV9vZmZzZXRf dCkgLSAxKS8gKFBBR0VfU0laRS9zaXplb2Yodm1fb2Zmc2V0X3QpKTsKKwlmb3IgKGkgPSAw OyBpIDwgbnN0YWNrcGFnZXM7IGkrKykgeworCQl2YSA9ICh2bV9vZmZzZXRfdCliYXNlICsg aSAqIFBBR0VfU0laRTsKKwkJbSA9IHZtX3BhZ2VfYWxsb2MoTlVMTCwgaSwKKwkJICAgIFZN X0FMTE9DX05PUk1BTCB8IFZNX0FMTE9DX05PT0JKIHwgVk1fQUxMT0NfV0lSRUQgfAorCQkg ICAgVk1fQUxMT0NfWkVSTyk7CisJCXBtYXBfcWVudGVyKHZhLCAmbSwgMSk7CisJfQogCi0J KmhlYWQgPSAwOwotCWZvciAoaSA9IG5wYWdlcyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJKmhl YWQgPSAodm1fb2Zmc2V0X3QpYmFzZTsKKwlmb3IgKGkgPSBucGFnZXMgLSAxOyBpID49IG5z dGFja3BhZ2VzOyBpLS0pIHsKIAkJdmEgPSAodm1fb2Zmc2V0X3QpYmFzZSArIGkgKiBQQUdF X1NJWkU7CiAJCXBtYXBfcHRlbGlzdF9mcmVlKGhlYWQsIHZhKTsKIAl9CkBAIC03MTMsMjIg KzU5OCw2IEBACiB2b2lkCiBwbWFwX2luaXQodm9pZCkKIHsKLQl2bV9wYWdlX3QgbXB0ZTsK LQl2bV9zaXplX3QgczsKLQlpbnQgaSwgcHZfbnBnOwotCi0JLyoKLQkgKiBJbml0aWFsaXpl IHRoZSB2bSBwYWdlIGFycmF5IGVudHJpZXMgZm9yIHRoZSBrZXJuZWwgcG1hcCdzCi0JICog cGFnZSB0YWJsZSBwYWdlcy4KLQkgKi8gCi0JZm9yIChpID0gMDsgaSA8IE5LUFQ7IGkrKykg ewotCQltcHRlID0gUEhZU19UT19WTV9QQUdFKEtQVHBoeXMgKyAoaSA8PCBQQUdFX1NISUZU KSk7Ci0JCUtBU1NFUlQobXB0ZSA+PSB2bV9wYWdlX2FycmF5ICYmCi0JCSAgICBtcHRlIDwg JnZtX3BhZ2VfYXJyYXlbdm1fcGFnZV9hcnJheV9zaXplXSwKLQkJICAgICgicG1hcF9pbml0 OiBwYWdlIHRhYmxlIHBhZ2UgaXMgb3V0IG9mIHJhbmdlIikpOwotCQltcHRlLT5waW5kZXgg PSBpICsgS1BUREk7Ci0JCW1wdGUtPnBoeXNfYWRkciA9IEtQVHBoeXMgKyAoaSA8PCBQQUdF X1NISUZUKTsKLQl9CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGFkZHJlc3Mgc3BhY2Ug KHpvbmUpIGZvciB0aGUgcHYgZW50cmllcy4gIFNldCBhCkBAIC03NDEsNTQgKzYxMCwxMiBA QAogCXB2X2VudHJ5X21heCA9IHJvdW5kdXAocHZfZW50cnlfbWF4LCBfTlBDUFYpOwogCXB2 X2VudHJ5X2hpZ2hfd2F0ZXIgPSA5ICogKHB2X2VudHJ5X21heCAvIDEwKTsKIAotCS8qCi0J ICogSWYgdGhlIGtlcm5lbCBpcyBydW5uaW5nIGluIGEgdmlydHVhbCBtYWNoaW5lIG9uIGFu IEFNRCBGYW1pbHkgMTBoCi0JICogcHJvY2Vzc29yLCB0aGVuIGl0IG11c3QgYXNzdW1lIHRo YXQgTUNBIGlzIGVuYWJsZWQgYnkgdGhlIHZpcnR1YWwKLQkgKiBtYWNoaW5lIG1vbml0b3Iu Ci0JICovCi0JaWYgKHZtX2d1ZXN0ID09IFZNX0dVRVNUX1ZNICYmIGNwdV92ZW5kb3JfaWQg PT0gQ1BVX1ZFTkRPUl9BTUQgJiYKLQkgICAgQ1BVSURfVE9fRkFNSUxZKGNwdV9pZCkgPT0g MHgxMCkKLQkJd29ya2Fyb3VuZF9lcnJhdHVtMzgzID0gMTsKLQotCS8qCi0JICogQXJlIGxh cmdlIHBhZ2UgbWFwcGluZ3Mgc3VwcG9ydGVkIGFuZCBlbmFibGVkPwotCSAqLwotCVRVTkFC TEVfSU5UX0ZFVENIKCJ2bS5wbWFwLnBnX3BzX2VuYWJsZWQiLCAmcGdfcHNfZW5hYmxlZCk7 Ci0JaWYgKHBzZWZsYWcgPT0gMCkKLQkJcGdfcHNfZW5hYmxlZCA9IDA7Ci0JZWxzZSBpZiAo cGdfcHNfZW5hYmxlZCkgewotCQlLQVNTRVJUKE1BWFBBR0VTSVpFUyA+IDEgJiYgcGFnZXNp emVzWzFdID09IDAsCi0JCSAgICAoInBtYXBfaW5pdDogY2FuJ3QgYXNzaWduIHRvIHBhZ2Vz aXplc1sxXSIpKTsKLQkJcGFnZXNpemVzWzFdID0gTkJQRFI7Ci0JfQotCi0JLyoKLQkgKiBD YWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHB2IGhlYWQgdGFibGUgZm9yIHN1cGVycGFnZXMu Ci0JICovCi0JZm9yIChpID0gMDsgcGh5c19hdmFpbFtpICsgMV07IGkgKz0gMik7Ci0JcHZf bnBnID0gcm91bmRfNG1wYWdlKHBoeXNfYXZhaWxbKGkgLSAyKSArIDFdKSAvIE5CUERSOwot Ci0JLyoKLQkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBwdiBoZWFkIHRhYmxlIGZvciBz dXBlcnBhZ2VzLgotCSAqLwotCXMgPSAodm1fc2l6ZV90KShwdl9ucGcgKiBzaXplb2Yoc3Ry dWN0IG1kX3BhZ2UpKTsKLQlzID0gcm91bmRfcGFnZShzKTsKLQlwdl90YWJsZSA9IChzdHJ1 Y3QgbWRfcGFnZSAqKWttZW1fYWxsb2Moa2VybmVsX21hcCwgcyk7Ci0JZm9yIChpID0gMDsg aSA8IHB2X25wZzsgaSsrKQotCQlUQUlMUV9JTklUKCZwdl90YWJsZVtpXS5wdl9saXN0KTsK LQogCXB2X21heGNodW5rcyA9IE1BWChwdl9lbnRyeV9tYXggLyBfTlBDUFYsIG1heHByb2Mp OwogCXB2X2NodW5rYmFzZSA9IChzdHJ1Y3QgcHZfY2h1bmsgKilrbWVtX2FsbG9jX25vZmF1 bHQoa2VybmVsX21hcCwKIAkgICAgUEFHRV9TSVpFICogcHZfbWF4Y2h1bmtzKTsKIAlpZiAo cHZfY2h1bmtiYXNlID09IE5VTEwpCiAJCXBhbmljKCJwbWFwX2luaXQ6IG5vdCBlbm91Z2gg a3ZtIGZvciBwdiBjaHVua3MiKTsKIAlwbWFwX3B0ZWxpc3RfaW5pdCgmcHZfdmFmcmVlLCBw dl9jaHVua2Jhc2UsIHB2X21heGNodW5rcyk7Ci0jaWZkZWYgUEFFCi0JcGRwdHpvbmUgPSB1 bWFfemNyZWF0ZSgiUERQVCIsIE5QR1BURCAqIHNpemVvZihwZHB0X2VudHJ5X3QpLCBOVUxM LAotCSAgICBOVUxMLCBOVUxMLCBOVUxMLCAoTlBHUFREICogc2l6ZW9mKHBkcHRfZW50cnlf dCkpIC0gMSwKLQkgICAgVU1BX1pPTkVfVk0gfCBVTUFfWk9ORV9OT0ZSRUUpOwotCXVtYV96 b25lX3NldF9hbGxvY2YocGRwdHpvbmUsIHBtYXBfcGRwdF9hbGxvY2YpOwotI2VuZGlmCiB9 CiAKIApAQCAtODAwLDIyICs2MjcsMTAgQEAKIHN0YXRpYyBTWVNDVExfTk9ERShfdm1fcG1h cCwgT0lEX0FVVE8sIHBkZSwgQ1RMRkxBR19SRCwgMCwKICAgICAiMi80TUIgcGFnZSBtYXBw aW5nIGNvdW50ZXJzIik7CiAKLXN0YXRpYyB1X2xvbmcgcG1hcF9wZGVfZGVtb3Rpb25zOwot U1lTQ1RMX1VMT05HKF92bV9wbWFwX3BkZSwgT0lEX0FVVE8sIGRlbW90aW9ucywgQ1RMRkxB R19SRCwKLSAgICAmcG1hcF9wZGVfZGVtb3Rpb25zLCAwLCAiMi80TUIgcGFnZSBkZW1vdGlv bnMiKTsKLQogc3RhdGljIHVfbG9uZyBwbWFwX3BkZV9tYXBwaW5nczsKIFNZU0NUTF9VTE9O Ryhfdm1fcG1hcF9wZGUsIE9JRF9BVVRPLCBtYXBwaW5ncywgQ1RMRkxBR19SRCwKICAgICAm cG1hcF9wZGVfbWFwcGluZ3MsIDAsICIyLzRNQiBwYWdlIG1hcHBpbmdzIik7CiAKLXN0YXRp YyB1X2xvbmcgcG1hcF9wZGVfcF9mYWlsdXJlczsKLVNZU0NUTF9VTE9ORyhfdm1fcG1hcF9w ZGUsIE9JRF9BVVRPLCBwX2ZhaWx1cmVzLCBDVExGTEFHX1JELAotICAgICZwbWFwX3BkZV9w X2ZhaWx1cmVzLCAwLCAiMi80TUIgcGFnZSBwcm9tb3Rpb24gZmFpbHVyZXMiKTsKLQotc3Rh dGljIHVfbG9uZyBwbWFwX3BkZV9wcm9tb3Rpb25zOwotU1lTQ1RMX1VMT05HKF92bV9wbWFw X3BkZSwgT0lEX0FVVE8sIHByb21vdGlvbnMsIENUTEZMQUdfUkQsCi0gICAgJnBtYXBfcGRl X3Byb21vdGlvbnMsIDAsICIyLzRNQiBwYWdlIHByb21vdGlvbnMiKTsKLQogLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTG93IGxl dmVsIGhlbHBlciByb3V0aW5lcy4uLi4uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODI3LDkwICs2NDIsODEgQEAKIGludAog cG1hcF9jYWNoZV9iaXRzKGludCBtb2RlLCBib29sZWFuX3QgaXNfcGRlKQogewotCWludCBj YWNoZV9iaXRzLCBwYXRfZmxhZywgcGF0X2lkeDsKLQotCWlmIChtb2RlIDwgMCB8fCBtb2Rl ID49IFBBVF9JTkRFWF9TSVpFIHx8IHBhdF9pbmRleFttb2RlXSA8IDApCi0JCXBhbmljKCJV bmtub3duIGNhY2hpbmcgbW9kZSAlZFxuIiwgbW9kZSk7CisJaW50IHBhdF9mbGFnLCBwYXRf aW5kZXgsIGNhY2hlX2JpdHM7CiAKIAkvKiBUaGUgUEFUIGJpdCBpcyBkaWZmZXJlbnQgZm9y IFBURSdzIGFuZCBQREUncy4gKi8KIAlwYXRfZmxhZyA9IGlzX3BkZSA/IFBHX1BERV9QQVQg OiBQR19QVEVfUEFUOwogCisJLyogSWYgd2UgZG9uJ3Qgc3VwcG9ydCBQQVQsIG1hcCBleHRl bmRlZCBtb2RlcyB0byBvbGRlciBvbmVzLiAqLworCWlmICghKGNwdV9mZWF0dXJlICYgQ1BV SURfUEFUKSkgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBQQVRfVU5DQUNIRUFCTEU6 CisJCWNhc2UgUEFUX1dSSVRFX1RIUk9VR0g6CisJCWNhc2UgUEFUX1dSSVRFX0JBQ0s6CisJ CQlicmVhazsKKwkJY2FzZSBQQVRfVU5DQUNIRUQ6CisJCWNhc2UgUEFUX1dSSVRFX0NPTUJJ TklORzoKKwkJY2FzZSBQQVRfV1JJVEVfUFJPVEVDVEVEOgorCQkJbW9kZSA9IFBBVF9VTkNB Q0hFQUJMRTsKKwkJCWJyZWFrOworCQl9CisJfQorCQogCS8qIE1hcCB0aGUgY2FjaGluZyBt b2RlIHRvIGEgUEFUIGluZGV4LiAqLwotCXBhdF9pZHggPSBwYXRfaW5kZXhbbW9kZV07CisJ aWYgKHBhdF93b3JrcykgeworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJCWNhc2UgUEFUX1VOQ0FD SEVBQkxFOgorCQkJCXBhdF9pbmRleCA9IDM7CisJCQkJYnJlYWs7CisJCQljYXNlIFBBVF9X UklURV9USFJPVUdIOgorCQkJCXBhdF9pbmRleCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNl IFBBVF9XUklURV9CQUNLOgorCQkJCXBhdF9pbmRleCA9IDA7CisJCQkJYnJlYWs7CisJCQlj YXNlIFBBVF9VTkNBQ0hFRDoKKwkJCQlwYXRfaW5kZXggPSAyOworCQkJCWJyZWFrOworCQkJ Y2FzZSBQQVRfV1JJVEVfQ09NQklOSU5HOgorCQkJCXBhdF9pbmRleCA9IDU7CisJCQkJYnJl YWs7CisJCQljYXNlIFBBVF9XUklURV9QUk9URUNURUQ6CisJCQkJcGF0X2luZGV4ID0gNDsK KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcGFuaWMoIlVua25vd24gY2FjaGluZyBt b2RlICVkXG4iLCBtb2RlKTsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAobW9kZSkgewor CQkJY2FzZSBQQVRfVU5DQUNIRUQ6CisJCQljYXNlIFBBVF9VTkNBQ0hFQUJMRToKKwkJCWNh c2UgUEFUX1dSSVRFX1BST1RFQ1RFRDoKKwkJCQlwYXRfaW5kZXggPSAzOworCQkJCWJyZWFr OworCQkJY2FzZSBQQVRfV1JJVEVfVEhST1VHSDoKKwkJCQlwYXRfaW5kZXggPSAxOworCQkJ CWJyZWFrOworCQkJY2FzZSBQQVRfV1JJVEVfQkFDSzoKKwkJCQlwYXRfaW5kZXggPSAwOwor CQkJCWJyZWFrOworCQkJY2FzZSBQQVRfV1JJVEVfQ09NQklOSU5HOgorCQkJCXBhdF9pbmRl eCA9IDI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXBhbmljKCJVbmtub3duIGNh Y2hpbmcgbW9kZSAlZFxuIiwgbW9kZSk7CisJCX0KKwl9CQogCiAJLyogTWFwIHRoZSAzLWJp dCBpbmRleCB2YWx1ZSBpbnRvIHRoZSBQQVQsIFBDRCwgYW5kIFBXVCBiaXRzLiAqLwogCWNh Y2hlX2JpdHMgPSAwOwotCWlmIChwYXRfaWR4ICYgMHg0KQorCWlmIChwYXRfaW5kZXggJiAw eDQpCiAJCWNhY2hlX2JpdHMgfD0gcGF0X2ZsYWc7Ci0JaWYgKHBhdF9pZHggJiAweDIpCisJ aWYgKHBhdF9pbmRleCAmIDB4MikKIAkJY2FjaGVfYml0cyB8PSBQR19OQ19QQ0Q7Ci0JaWYg KHBhdF9pZHggJiAweDEpCisJaWYgKHBhdF9pbmRleCAmIDB4MSkKIAkJY2FjaGVfYml0cyB8 PSBQR19OQ19QV1Q7CiAJcmV0dXJuIChjYWNoZV9iaXRzKTsKIH0KLQotLyoKLSAqIFRoZSBj YWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIFRMQiBjb25zaXN0ZW5jeS4K LSAqLwotc3RhdGljIHZvaWQKLXBtYXBfa2VudGVyX3BkZSh2bV9vZmZzZXRfdCB2YSwgcGRf ZW50cnlfdCBuZXdwZGUpCi17Ci0JcGRfZW50cnlfdCAqcGRlOwotCXBtYXBfdCBwbWFwOwot CWJvb2xlYW5fdCBQVERfdXBkYXRlZDsKLQotCVBURF91cGRhdGVkID0gRkFMU0U7Ci0JbXR4 X2xvY2tfc3BpbigmYWxscG1hcHNfbG9jayk7Ci0JTElTVF9GT1JFQUNIKHBtYXAsICZhbGxw bWFwcywgcG1fbGlzdCkgewotCQlpZiAoKHBtYXAtPnBtX3BkaXJbUFREUFRESV0gJiBQR19G UkFNRSkgPT0gKFBURHBkZVswXSAmCi0JCSAgICBQR19GUkFNRSkpCi0JCQlQVERfdXBkYXRl ZCA9IFRSVUU7Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAsIHZhKTsKLQkJcGRlX3N0b3JlKHBk ZSwgbmV3cGRlKTsKLQl9Ci0JbXR4X3VubG9ja19zcGluKCZhbGxwbWFwc19sb2NrKTsKLQlL QVNTRVJUKFBURF91cGRhdGVkLAotCSAgICAoInBtYXBfa2VudGVyX3BkZTogY3VycmVudCBw YWdlIHRhYmxlIGlzIG5vdCBpbiBhbGxwbWFwcyIpKTsKLX0KLQotLyoKLSAqIEFmdGVyIGNo YW5naW5nIHRoZSBwYWdlIHNpemUgZm9yIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNz IGluIHRoZSBwYWdlCi0gKiB0YWJsZSwgZmx1c2ggdGhlIGNvcnJlc3BvbmRpbmcgZW50cmll cyBmcm9tIHRoZSBwcm9jZXNzb3IncyBUTEIuICBPbmx5IHRoZQotICogY2FsbGluZyBwcm9j ZXNzb3IncyBUTEIgaXMgYWZmZWN0ZWQuCi0gKgotICogVGhlIGNhbGxpbmcgdGhyZWFkIG11 c3QgYmUgcGlubmVkIHRvIGEgcHJvY2Vzc29yLgotICovCi1zdGF0aWMgdm9pZAotcG1hcF91 cGRhdGVfcGRlX2ludmFsaWRhdGUodm1fb2Zmc2V0X3QgdmEsIHBkX2VudHJ5X3QgbmV3cGRl KQotewotCXVfbG9uZyBjcjQ7Ci0KLQlpZiAoKG5ld3BkZSAmIFBHX1BTKSA9PSAwKQotCQkv KiBEZW1vdGlvbjogZmx1c2ggYSBzcGVjaWZpYyAyTUIgcGFnZSBtYXBwaW5nLiAqLwotCQlp bnZscGcodmEpOwotCWVsc2UgaWYgKChuZXdwZGUgJiBQR19HKSA9PSAwKQotCQkvKgotCQkg KiBQcm9tb3Rpb246IGZsdXNoIGV2ZXJ5IDRLQiBwYWdlIG1hcHBpbmcgZnJvbSB0aGUgVExC Ci0JCSAqIGJlY2F1c2UgdGhlcmUgYXJlIHRvbyBtYW55IHRvIGZsdXNoIGluZGl2aWR1YWxs eS4KLQkJICovCi0JCWludmx0bGIoKTsKLQllbHNlIHsKLQkJLyoKLQkJICogUHJvbW90aW9u OiBmbHVzaCBldmVyeSA0S0IgcGFnZSBtYXBwaW5nIGZyb20gdGhlIFRMQiwKLQkJICogaW5j bHVkaW5nIGFueSBnbG9iYWwgKFBHX0cpIG1hcHBpbmdzLgotCQkgKi8KLQkJY3I0ID0gcmNy NCgpOwotCQlsb2FkX2NyNChjcjQgJiB+Q1I0X1BHRSk7Ci0JCS8qCi0JCSAqIEFsdGhvdWdo IHByZWVtcHRpb24gYXQgdGhpcyBwb2ludCBjb3VsZCBiZSBkZXRyaW1lbnRhbCB0bwotCQkg KiBwZXJmb3JtYW5jZSwgaXQgd291bGQgbm90IGxlYWQgdG8gYW4gZXJyb3IuICBQR19HIGlz IHNpbXBseQotCQkgKiBpZ25vcmVkIGlmIENSNC5QR0UgaXMgY2xlYXIuICBNb3Jlb3Zlciwg aW4gY2FzZSB0aGlzIGJsb2NrCi0JCSAqIGlzIHJlLWVudGVyZWQsIHRoZSBsb2FkX2NyNCgp IGVpdGhlciBhYm92ZSBvciBiZWxvdyB3aWxsCi0JCSAqIG1vZGlmeSBDUjQuUEdFIGZsdXNo aW5nIHRoZSBUTEIuCi0JCSAqLwotCQlsb2FkX2NyNChjcjQgfCBDUjRfUEdFKTsKLQl9Ci19 CiAjaWZkZWYgU01QCiAvKgogICogRm9yIFNNUCwgdGhlc2UgZnVuY3Rpb25zIGhhdmUgdG8g dXNlIHRoZSBJUEkgbWVjaGFuaXNtIGZvciBjb2hlcmVuY2UuCkBAIC05MzcsNiArNzQzLDkg QEAKIAljcHVzZXRfdCBvdGhlcl9jcHVzOwogCXVfaW50IGNwdWlkOwogCisJQ1RSMihLVFJf UE1BUCwgInBtYXBfaW52YWxpZGF0ZV9wYWdlOiBwbWFwPSVwIHZhPTB4JXgiLAorCSAgICBw bWFwLCB2YSk7CisJCiAJc2NoZWRfcGluKCk7CiAJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXAg fHwgIUNQVV9DTVAoJnBtYXAtPnBtX2FjdGl2ZSwgJmFsbF9jcHVzKSkgewogCQlpbnZscGco dmEpOwpAQCAtOTUyLDYgKzc2MSw3IEBACiAJCQlzbXBfbWFza2VkX2ludmxwZyhvdGhlcl9j cHVzLCB2YSk7CiAJfQogCXNjaGVkX3VucGluKCk7CisJUFRfVVBEQVRFU19GTFVTSCgpOwog fQogCiB2b2lkCkBAIC05NjEsNiArNzcxLDkgQEAKIAl2bV9vZmZzZXRfdCBhZGRyOwogCXVf aW50IGNwdWlkOwogCisJQ1RSMyhLVFJfUE1BUCwgInBtYXBfaW52YWxpZGF0ZV9wYWdlOiBw bWFwPSVwIGV2YT0weCV4IHN2YT0weCV4IiwKKwkgICAgcG1hcCwgc3ZhLCBldmEpOworCiAJ c2NoZWRfcGluKCk7CiAJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXAgfHwgIUNQVV9DTVAoJnBt YXAtPnBtX2FjdGl2ZSwgJmFsbF9jcHVzKSkgewogCQlmb3IgKGFkZHIgPSBzdmE7IGFkZHIg PCBldmE7IGFkZHIgKz0gUEFHRV9TSVpFKQpAQCAtOTc4LDYgKzc5MSw3IEBACiAJCQlzbXBf bWFza2VkX2ludmxwZ19yYW5nZShvdGhlcl9jcHVzLCBzdmEsIGV2YSk7CiAJfQogCXNjaGVk X3VucGluKCk7CisJUFRfVVBEQVRFU19GTFVTSCgpOwogfQogCiB2b2lkCkBAIC05ODYsNiAr ODAwLDggQEAKIAljcHVzZXRfdCBvdGhlcl9jcHVzOwogCXVfaW50IGNwdWlkOwogCisJQ1RS MShLVFJfUE1BUCwgInBtYXBfaW52YWxpZGF0ZV9wYWdlOiBwbWFwPSVwIiwgcG1hcCk7CisK IAlzY2hlZF9waW4oKTsKIAlpZiAocG1hcCA9PSBrZXJuZWxfcG1hcCB8fCAhQ1BVX0NNUCgm cG1hcC0+cG1fYWN0aXZlLCAmYWxsX2NwdXMpKSB7CiAJCWludmx0bGIoKTsKQEAgLTEwMTIs OTggKzgyOCw2IEBACiAJc21wX2NhY2hlX2ZsdXNoKCk7CiAJc2NoZWRfdW5waW4oKTsKIH0K LQotc3RydWN0IHBkZV9hY3Rpb24gewotCWNwdXNldF90IGludmFsaWRhdGU7CS8qIHByb2Nl c3NvcnMgdGhhdCBpbnZhbGlkYXRlIHRoZWlyIFRMQiAqLwotCXZtX29mZnNldF90IHZhOwot CXBkX2VudHJ5X3QgKnBkZTsKLQlwZF9lbnRyeV90IG5ld3BkZTsKLQl1X2ludCBzdG9yZTsJ CS8qIHByb2Nlc3NvciB0aGF0IHVwZGF0ZXMgdGhlIFBERSAqLwotfTsKLQotc3RhdGljIHZv aWQKLXBtYXBfdXBkYXRlX3BkZV9rZXJuZWwodm9pZCAqYXJnKQotewotCXN0cnVjdCBwZGVf YWN0aW9uICphY3QgPSBhcmc7Ci0JcGRfZW50cnlfdCAqcGRlOwotCXBtYXBfdCBwbWFwOwot Ci0JaWYgKGFjdC0+c3RvcmUgPT0gUENQVV9HRVQoY3B1aWQpKSB7Ci0KLQkJLyoKLQkJICog RWxzZXdoZXJlLCB0aGlzIG9wZXJhdGlvbiByZXF1aXJlcyBhbGxwbWFwc19sb2NrIGZvcgot CQkgKiBzeW5jaHJvbml6YXRpb24uICBIZXJlLCBpdCBkb2VzIG5vdCBiZWNhdXNlIGl0IGlz IGJlaW5nCi0JCSAqIHBlcmZvcm1lZCBpbiB0aGUgY29udGV4dCBvZiBhbiBhbGxfY3B1cyBy ZW5kZXp2b3VzLgotCQkgKi8KLQkJTElTVF9GT1JFQUNIKHBtYXAsICZhbGxwbWFwcywgcG1f bGlzdCkgewotCQkJcGRlID0gcG1hcF9wZGUocG1hcCwgYWN0LT52YSk7Ci0JCQlwZGVfc3Rv cmUocGRlLCBhY3QtPm5ld3BkZSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1wbWFw X3VwZGF0ZV9wZGVfdXNlcih2b2lkICphcmcpCi17Ci0Jc3RydWN0IHBkZV9hY3Rpb24gKmFj dCA9IGFyZzsKLQotCWlmIChhY3QtPnN0b3JlID09IFBDUFVfR0VUKGNwdWlkKSkKLQkJcGRl X3N0b3JlKGFjdC0+cGRlLCBhY3QtPm5ld3BkZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1wbWFw X3VwZGF0ZV9wZGVfdGVhcmRvd24odm9pZCAqYXJnKQotewotCXN0cnVjdCBwZGVfYWN0aW9u ICphY3QgPSBhcmc7Ci0KLQlpZiAoQ1BVX0lTU0VUKFBDUFVfR0VUKGNwdWlkKSwgJmFjdC0+ aW52YWxpZGF0ZSkpCi0JCXBtYXBfdXBkYXRlX3BkZV9pbnZhbGlkYXRlKGFjdC0+dmEsIGFj dC0+bmV3cGRlKTsKLX0KLQotLyoKLSAqIENoYW5nZSB0aGUgcGFnZSBzaXplIGZvciB0aGUg c3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyBpbiBhIHdheSB0aGF0Ci0gKiBwcmV2ZW50cyBh bnkgcG9zc2liaWxpdHkgb2YgdGhlIFRMQiBldmVyIGhhdmluZyB0d28gZW50cmllcyB0aGF0 IG1hcCB0aGUKLSAqIHNhbWUgdmlydHVhbCBhZGRyZXNzIHVzaW5nIGRpZmZlcmVudCBwYWdl IHNpemVzLiAgVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQKLSAqIHdvcmthcm91bmQgZm9yIEVy cmF0dW0gMzgzIG9uIEFNRCBGYW1pbHkgMTBoIHByb2Nlc3NvcnMuICBJdCBwcmV2ZW50cyBh Ci0gKiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBmb3IgYSBUTEIgc3RhdGUgdGhhdCBpcyBp bXByb3Blcmx5IGRpYWdub3NlZCBhcyBhCi0gKiBoYXJkd2FyZSBlcnJvci4KLSAqLwotc3Rh dGljIHZvaWQKLXBtYXBfdXBkYXRlX3BkZShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEs IHBkX2VudHJ5X3QgKnBkZSwgcGRfZW50cnlfdCBuZXdwZGUpCi17Ci0Jc3RydWN0IHBkZV9h Y3Rpb24gYWN0OwotCWNwdXNldF90IGFjdGl2ZSwgb3RoZXJfY3B1czsKLQl1X2ludCBjcHVp ZDsKLQotCXNjaGVkX3BpbigpOwotCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOwotCW90aGVy X2NwdXMgPSBhbGxfY3B1czsKLQlDUFVfQ0xSKGNwdWlkLCAmb3RoZXJfY3B1cyk7Ci0JaWYg KHBtYXAgPT0ga2VybmVsX3BtYXApCi0JCWFjdGl2ZSA9IGFsbF9jcHVzOwotCWVsc2UKLQkJ YWN0aXZlID0gcG1hcC0+cG1fYWN0aXZlOwotCWlmIChDUFVfT1ZFUkxBUCgmYWN0aXZlLCAm b3RoZXJfY3B1cykpIHsKLQkJYWN0LnN0b3JlID0gY3B1aWQ7Ci0JCWFjdC5pbnZhbGlkYXRl ID0gYWN0aXZlOwotCQlhY3QudmEgPSB2YTsKLQkJYWN0LnBkZSA9IHBkZTsKLQkJYWN0Lm5l d3BkZSA9IG5ld3BkZTsKLQkJQ1BVX1NFVChjcHVpZCwgJmFjdGl2ZSk7Ci0JCXNtcF9yZW5k ZXp2b3VzX2NwdXMoYWN0aXZlLAotCQkgICAgc21wX25vX3JlbmRldm91c19iYXJyaWVyLCBw bWFwID09IGtlcm5lbF9wbWFwID8KLQkJICAgIHBtYXBfdXBkYXRlX3BkZV9rZXJuZWwgOiBw bWFwX3VwZGF0ZV9wZGVfdXNlciwKLQkJICAgIHBtYXBfdXBkYXRlX3BkZV90ZWFyZG93biwg JmFjdCk7Ci0JfSBlbHNlIHsKLQkJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXApCi0JCQlwbWFw X2tlbnRlcl9wZGUodmEsIG5ld3BkZSk7Ci0JCWVsc2UKLQkJCXBkZV9zdG9yZShwZGUsIG5l d3BkZSk7Ci0JCWlmIChDUFVfSVNTRVQoY3B1aWQsICZhY3RpdmUpKQotCQkJcG1hcF91cGRh dGVfcGRlX2ludmFsaWRhdGUodmEsIG5ld3BkZSk7Ci0JfQotCXNjaGVkX3VucGluKCk7Ci19 CiAjZWxzZSAvKiAhU01QICovCiAvKgogICogTm9ybWFsLCBub24tU01QLCA0ODYrIGludmFs aWRhdGlvbiBmdW5jdGlvbnMuCkBAIC0xMTEyLDkgKzgzNiwxMiBAQAogUE1BUF9JTkxJTkUg dm9pZAogcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZh KQogeworCUNUUjIoS1RSX1BNQVAsICJwbWFwX2ludmFsaWRhdGVfcGFnZTogcG1hcD0lcCB2 YT0weCV4IiwKKwkgICAgcG1hcCwgdmEpOwogCiAJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXAg fHwgIUNQVV9FTVBUWSgmcG1hcC0+cG1fYWN0aXZlKSkKIAkJaW52bHBnKHZhKTsKKwlQVF9V UERBVEVTX0ZMVVNIKCk7CiB9CiAKIFBNQVBfSU5MSU5FIHZvaWQKQEAgLTExMjIsMTUgKzg0 OSwyMiBAQAogewogCXZtX29mZnNldF90IGFkZHI7CiAKKwlpZiAoZXZhIC0gc3ZhID4gUEFH RV9TSVpFKQorCQlDVFIzKEtUUl9QTUFQLCAicG1hcF9pbnZhbGlkYXRlX3JhbmdlOiBwbWFw PSVwIHN2YT0weCV4IGV2YT0weCV4IiwKKwkJICAgIHBtYXAsIHN2YSwgZXZhKTsKKwogCWlm IChwbWFwID09IGtlcm5lbF9wbWFwIHx8ICFDUFVfRU1QVFkoJnBtYXAtPnBtX2FjdGl2ZSkp CiAJCWZvciAoYWRkciA9IHN2YTsgYWRkciA8IGV2YTsgYWRkciArPSBQQUdFX1NJWkUpCiAJ CQlpbnZscGcoYWRkcik7CisJUFRfVVBEQVRFU19GTFVTSCgpOwogfQogCiBQTUFQX0lOTElO RSB2b2lkCiBwbWFwX2ludmFsaWRhdGVfYWxsKHBtYXBfdCBwbWFwKQogewogCisJQ1RSMShL VFJfUE1BUCwgInBtYXBfaW52YWxpZGF0ZV9hbGw6IHBtYXA9JXAiLCBwbWFwKTsKKwkKIAlp ZiAocG1hcCA9PSBrZXJuZWxfcG1hcCB8fCAhQ1BVX0VNUFRZKCZwbWFwLT5wbV9hY3RpdmUp KQogCQlpbnZsdGxiKCk7CiB9CkBAIC0xMTQxLDE4ICs4NzUsNiBAQAogCiAJd2JpbnZkKCk7 CiB9Ci0KLXN0YXRpYyB2b2lkCi1wbWFwX3VwZGF0ZV9wZGUocG1hcF90IHBtYXAsIHZtX29m ZnNldF90IHZhLCBwZF9lbnRyeV90ICpwZGUsIHBkX2VudHJ5X3QgbmV3cGRlKQotewotCi0J aWYgKHBtYXAgPT0ga2VybmVsX3BtYXApCi0JCXBtYXBfa2VudGVyX3BkZSh2YSwgbmV3cGRl KTsKLQllbHNlCi0JCXBkZV9zdG9yZShwZGUsIG5ld3BkZSk7Ci0JaWYgKHBtYXAgPT0ga2Vy bmVsX3BtYXAgfHwgIUNQVV9FTVBUWSgmcG1hcC0+cG1fYWN0aXZlKSkKLQkJcG1hcF91cGRh dGVfcGRlX2ludmFsaWRhdGUodmEsIG5ld3BkZSk7Ci19CiAjZW5kaWYgLyogIVNNUCAqLwog CiAjZGVmaW5lCVBNQVBfQ0xGTFVTSF9USFJFU0hPTEQJKDIgKiAxMDI0ICogMTAyNCkKQEAg LTEyNDIsOCArOTY0LDExIEBACiAJCW10eF9sb2NrKCZQTUFQMm11dGV4KTsKIAkJbmV3cGYg PSAqcGRlICYgUEdfRlJBTUU7CiAJCWlmICgoKlBNQVAyICYgUEdfRlJBTUUpICE9IG5ld3Bm KSB7Ci0JCQkqUE1BUDIgPSBuZXdwZiB8IFBHX1JXIHwgUEdfViB8IFBHX0EgfCBQR19NOwot CQkJcG1hcF9pbnZhbGlkYXRlX3BhZ2Uoa2VybmVsX3BtYXAsICh2bV9vZmZzZXRfdClQQURE UjIpOworCQkJdm1fcGFnZV9sb2NrX3F1ZXVlcygpOworCQkJUFRfU0VUX01BKFBBRERSMiwg bmV3cGYgfCBQR19WIHwgUEdfQSB8IFBHX00pOworCQkJdm1fcGFnZV91bmxvY2tfcXVldWVz KCk7CisJCQlDVFIzKEtUUl9QTUFQLCAicG1hcF9wdGU6IHBtYXA9JXAgdmE9MHgleCBuZXdw dGU9MHglMDh4IiwKKwkJCSAgICBwbWFwLCB2YSwgKCpQTUFQMiAmIDB4ZmZmZmZmZmYpKTsK IAkJfQogCQlyZXR1cm4gKFBBRERSMiArIChpMzg2X2J0b3AodmEpICYgKE5QVEVQRyAtIDEp KSk7CiAJfQpAQCAtMTI1OCw4ICs5ODMsMTQgQEAKIHBtYXBfcHRlX3JlbGVhc2UocHRfZW50 cnlfdCAqcHRlKQogewogCi0JaWYgKChwdF9lbnRyeV90ICopKCh2bV9vZmZzZXRfdClwdGUg JiB+UEFHRV9NQVNLKSA9PSBQQUREUjIpCisJaWYgKChwdF9lbnRyeV90ICopKCh2bV9vZmZz ZXRfdClwdGUgJiB+UEFHRV9NQVNLKSA9PSBQQUREUjIpIHsKKwkJQ1RSMShLVFJfUE1BUCwg InBtYXBfcHRlX3JlbGVhc2U6IHB0ZT0weCVqeCIsCisJCSAgICAqUE1BUDIpOworCQl2bV9w YWdlX2xvY2tfcXVldWVzKCk7CisJCVBUX1NFVF9WQShQTUFQMiwgMCwgVFJVRSk7CisJCXZt X3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwogCQltdHhfdW5sb2NrKCZQTUFQMm11dGV4KTsKKwl9 CiB9CiAKIHN0YXRpYyBfX2lubGluZSB2b2lkCkBAIC0xMjY3LDYgKzk5OCw3IEBACiB7CiAK IAlpbnZscGcoKHVfaW50KWNhZGRyKTsKKwlQVF9VUERBVEVTX0ZMVVNIKCk7CiB9CiAKIC8q CkBAIC0xMjk2LDExICsxMDI4LDEzIEBACiAJCUtBU1NFUlQoY3VydGhyZWFkLT50ZF9waW5u ZWQgPiAwLCAoImN1cnRocmVhZCBub3QgcGlubmVkIikpOwogCQluZXdwZiA9ICpwZGUgJiBQ R19GUkFNRTsKIAkJaWYgKCgqUE1BUDEgJiBQR19GUkFNRSkgIT0gbmV3cGYpIHsKLQkJCSpQ TUFQMSA9IG5ld3BmIHwgUEdfUlcgfCBQR19WIHwgUEdfQSB8IFBHX007CisJCQlQVF9TRVRf TUEoUEFERFIxLCBuZXdwZiB8IFBHX1YgfCBQR19BIHwgUEdfTSk7CisJCQlDVFIzKEtUUl9Q TUFQLCAicG1hcF9wdGVfcXVpY2s6IHBtYXA9JXAgdmE9MHgleCBuZXdwdGU9MHglMDh4IiwK KwkJCSAgICBwbWFwLCB2YSwgKHVfbG9uZykqUE1BUDEpOworCQkJCiAjaWZkZWYgU01QCiAJ CQlQTUFQMWNwdSA9IFBDUFVfR0VUKGNwdWlkKTsKICNlbmRpZgotCQkJaW52bGNhZGRyKFBB RERSMSk7CiAJCQlQTUFQMWNoYW5nZWQrKzsKIAkJfSBlbHNlCiAjaWZkZWYgU01QCkBAIC0x MzI4LDE4ICsxMDYyLDUwIEBACiAJdm1fcGFkZHJfdCBydHZhbDsKIAlwdF9lbnRyeV90ICpw dGU7CiAJcGRfZW50cnlfdCBwZGU7CisJcHRfZW50cnlfdCBwdGV2YWw7CiAKIAlydHZhbCA9 IDA7CiAJUE1BUF9MT0NLKHBtYXApOwogCXBkZSA9IHBtYXAtPnBtX3BkaXJbdmEgPj4gUERS U0hJRlRdOwogCWlmIChwZGUgIT0gMCkgewotCQlpZiAoKHBkZSAmIFBHX1BTKSAhPSAwKQot CQkJcnR2YWwgPSAocGRlICYgUEdfUFNfRlJBTUUpIHwgKHZhICYgUERSTUFTSyk7Ci0JCWVs c2UgewotCQkJcHRlID0gcG1hcF9wdGUocG1hcCwgdmEpOwotCQkJcnR2YWwgPSAoKnB0ZSAm IFBHX0ZSQU1FKSB8ICh2YSAmIFBBR0VfTUFTSyk7Ci0JCQlwbWFwX3B0ZV9yZWxlYXNlKHB0 ZSk7CisJCWlmICgocGRlICYgUEdfUFMpICE9IDApIHsKKwkJCXJ0dmFsID0geHBtYXBfbXRv cChwZGUgJiBQR19QU19GUkFNRSkgfCAodmEgJiBQRFJNQVNLKTsKKwkJCVBNQVBfVU5MT0NL KHBtYXApOworCQkJcmV0dXJuIHJ0dmFsOworCQl9CisJCXB0ZSA9IHBtYXBfcHRlKHBtYXAs IHZhKTsKKwkJcHRldmFsID0gKnB0ZSA/IHhwbWFwX210b3AoKnB0ZSkgOiAwOworCQlydHZh bCA9IChwdGV2YWwgJiBQR19GUkFNRSkgfCAodmEgJiBQQUdFX01BU0spOworCQlwbWFwX3B0 ZV9yZWxlYXNlKHB0ZSk7CisJfQorCVBNQVBfVU5MT0NLKHBtYXApOworCXJldHVybiAocnR2 YWwpOworfQorCisvKgorICoJUm91dGluZToJcG1hcF9leHRyYWN0X21hCisgKglGdW5jdGlv bjoKKyAqCQlMaWtlIHBtYXBfZXh0cmFjdCwgYnV0IHJldHVybnMgbWFjaGluZSBhZGRyZXNz CisgKi8KK3ZtX3BhZGRyX3QgCitwbWFwX2V4dHJhY3RfbWEocG1hcF90IHBtYXAsIHZtX29m ZnNldF90IHZhKQoreworCXZtX3BhZGRyX3QgcnR2YWw7CisJcHRfZW50cnlfdCAqcHRlOwor CXBkX2VudHJ5X3QgcGRlOworCisJcnR2YWwgPSAwOworCVBNQVBfTE9DSyhwbWFwKTsKKwlw ZGUgPSBwbWFwLT5wbV9wZGlyW3ZhID4+IFBEUlNISUZUXTsKKwlpZiAocGRlICE9IDApIHsK KwkJaWYgKChwZGUgJiBQR19QUykgIT0gMCkgeworCQkJcnR2YWwgPSAocGRlICYgflBEUk1B U0spIHwgKHZhICYgUERSTUFTSyk7CisJCQlQTUFQX1VOTE9DSyhwbWFwKTsKKwkJCXJldHVy biBydHZhbDsKIAkJfQorCQlwdGUgPSBwbWFwX3B0ZShwbWFwLCB2YSk7CisJCXJ0dmFsID0g KCpwdGUgJiBQR19GUkFNRSkgfCAodmEgJiBQQUdFX01BU0spOworCQlwbWFwX3B0ZV9yZWxl YXNlKHB0ZSk7CiAJfQogCVBNQVBfVU5MT0NLKHBtYXApOwogCXJldHVybiAocnR2YWwpOwpA QCAtMTM1Niw3ICsxMTIyLDcgQEAKIHBtYXBfZXh0cmFjdF9hbmRfaG9sZChwbWFwX3QgcG1h cCwgdm1fb2Zmc2V0X3QgdmEsIHZtX3Byb3RfdCBwcm90KQogewogCXBkX2VudHJ5X3QgcGRl OwotCXB0X2VudHJ5X3QgcHRlLCAqcHRlcDsKKwlwdF9lbnRyeV90IHB0ZTsKIAl2bV9wYWdl X3QgbTsKIAl2bV9wYWRkcl90IHBhOwogCkBAIC0xMzY0LDcgKzExMzAsNyBAQAogCW0gPSBO VUxMOwogCVBNQVBfTE9DSyhwbWFwKTsKIHJldHJ5OgotCXBkZSA9ICpwbWFwX3BkZShwbWFw LCB2YSk7CisJcGRlID0gUFRfR0VUKHBtYXBfcGRlKHBtYXAsIHZhKSk7CiAJaWYgKHBkZSAh PSAwKSB7CiAJCWlmIChwZGUgJiBQR19QUykgewogCQkJaWYgKChwZGUgJiBQR19SVykgfHwg KHByb3QgJiBWTV9QUk9UX1dSSVRFKSA9PSAwKSB7CkBAIC0xMzc2LDE2ICsxMTQyLDE4IEBA CiAJCQkJdm1fcGFnZV9ob2xkKG0pOwogCQkJfQogCQl9IGVsc2UgewotCQkJcHRlcCA9IHBt YXBfcHRlKHBtYXAsIHZhKTsKLQkJCXB0ZSA9ICpwdGVwOwotCQkJcG1hcF9wdGVfcmVsZWFz ZShwdGVwKTsKLQkJCWlmIChwdGUgIT0gMCAmJgorCQkJc2NoZWRfcGluKCk7CisJCQlwdGUg PSBQVF9HRVQocG1hcF9wdGVfcXVpY2socG1hcCwgdmEpKTsKKwkJCWlmICgqUE1BUDEpCisJ CQkJUFRfU0VUX01BKFBBRERSMSwgMCk7CisJCQlpZiAoKHB0ZSAmIFBHX1YpICYmCiAJCQkg ICAgKChwdGUgJiBQR19SVykgfHwgKHByb3QgJiBWTV9QUk9UX1dSSVRFKSA9PSAwKSkgewog CQkJCWlmICh2bV9wYWdlX3BhX3RyeXJlbG9jayhwbWFwLCBwdGUgJiBQR19GUkFNRSwgJnBh KSkKIAkJCQkJZ290byByZXRyeTsKIAkJCQltID0gUEhZU19UT19WTV9QQUdFKHB0ZSAmIFBH X0ZSQU1FKTsKIAkJCQl2bV9wYWdlX2hvbGQobSk7CiAJCQl9CisJCQlzY2hlZF91bnBpbigp OwogCQl9CiAJfQogCVBBX1VOTE9DS19DT05EKHBhKTsKQEAgLTE0MDMsMjIgKzExNzEsMjcg QEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIGJlZm9yZSBwbWFwX2Jvb3Rz dHJhcCgpIGlzIGNhbGxlZC4KICAqLwotUE1BUF9JTkxJTkUgdm9pZCAKK3ZvaWQgCiBwbWFw X2tlbnRlcih2bV9vZmZzZXRfdCB2YSwgdm1fcGFkZHJfdCBwYSkKIHsKKworCVBUX1NFVF9N QSh2YSwgeHBtYXBfcHRvbShwYSl8IFBHX1JXIHwgUEdfViB8IHBnZWZsYWcpOworfQorCit2 b2lkIAorcG1hcF9rZW50ZXJfbWEodm1fb2Zmc2V0X3QgdmEsIHZtX3BhZGRyX3QgbWEpCit7 CiAJcHRfZW50cnlfdCAqcHRlOwogCiAJcHRlID0gdnRvcHRlKHZhKTsKLQlwdGVfc3RvcmUo cHRlLCBwYSB8IFBHX1JXIHwgUEdfViB8IHBnZWZsYWcpOworCXB0ZV9zdG9yZV9tYShwdGUs IG1hIHwgUEdfUlcgfCBQR19WIHwgcGdlZmxhZyk7CiB9CiAKIHN0YXRpYyBfX2lubGluZSB2 b2lkCiBwbWFwX2tlbnRlcl9hdHRyKHZtX29mZnNldF90IHZhLCB2bV9wYWRkcl90IHBhLCBp bnQgbW9kZSkKIHsKLQlwdF9lbnRyeV90ICpwdGU7CiAKLQlwdGUgPSB2dG9wdGUodmEpOwot CXB0ZV9zdG9yZShwdGUsIHBhIHwgUEdfUlcgfCBQR19WIHwgcGdlZmxhZyB8IHBtYXBfY2Fj aGVfYml0cyhtb2RlLCAwKSk7CisJUFRfU0VUX01BKHZhLCBwYSB8IFBHX1JXIHwgUEdfViB8 IHBnZWZsYWcgfCBwbWFwX2NhY2hlX2JpdHMobW9kZSwgMCkpOwogfQogCiAvKgpAQCAtMTQz Myw3ICsxMjA2LDcgQEAKIAlwdF9lbnRyeV90ICpwdGU7CiAKIAlwdGUgPSB2dG9wdGUodmEp OwotCXB0ZV9jbGVhcihwdGUpOworCVBUX0NMRUFSX1ZBKHB0ZSwgRkFMU0UpOwogfQogCiAv KgpAQCAtMTQ1Miw0MCArMTIyNSwxNCBAQAogcG1hcF9tYXAodm1fb2Zmc2V0X3QgKnZpcnQs IHZtX3BhZGRyX3Qgc3RhcnQsIHZtX3BhZGRyX3QgZW5kLCBpbnQgcHJvdCkKIHsKIAl2bV9v ZmZzZXRfdCB2YSwgc3ZhOwotCXZtX3BhZGRyX3Qgc3VwZXJwYWdlX29mZnNldDsKLQlwZF9l bnRyeV90IG5ld3BkZTsKIAotCXZhID0gKnZpcnQ7Ci0JLyoKLQkgKiBEb2VzIHRoZSBwaHlz aWNhbCBhZGRyZXNzIHJhbmdlJ3Mgc2l6ZSBhbmQgYWxpZ25tZW50IHBlcm1pdCBhdAotCSAq IGxlYXN0IG9uZSBzdXBlcnBhZ2UgbWFwcGluZyB0byBiZSBjcmVhdGVkPwotCSAqLyAKLQlz dXBlcnBhZ2Vfb2Zmc2V0ID0gc3RhcnQgJiBQRFJNQVNLOwotCWlmICgoZW5kIC0gc3RhcnQp IC0gKChOQlBEUiAtIHN1cGVycGFnZV9vZmZzZXQpICYgUERSTUFTSykgPj0gTkJQRFIpIHsK LQkJLyoKLQkJICogSW5jcmVhc2UgdGhlIHN0YXJ0aW5nIHZpcnR1YWwgYWRkcmVzcyBzbyB0 aGF0IGl0cyBhbGlnbm1lbnQKLQkJICogZG9lcyBub3QgcHJlY2x1ZGUgdGhlIHVzZSBvZiBz dXBlcnBhZ2UgbWFwcGluZ3MuCi0JCSAqLwotCQlpZiAoKHZhICYgUERSTUFTSykgPCBzdXBl cnBhZ2Vfb2Zmc2V0KQotCQkJdmEgPSAodmEgJiB+UERSTUFTSykgKyBzdXBlcnBhZ2Vfb2Zm c2V0OwotCQllbHNlIGlmICgodmEgJiBQRFJNQVNLKSA+IHN1cGVycGFnZV9vZmZzZXQpCi0J CQl2YSA9ICgodmEgKyBQRFJNQVNLKSAmIH5QRFJNQVNLKSArIHN1cGVycGFnZV9vZmZzZXQ7 Ci0JfQotCXN2YSA9IHZhOworCXZhID0gc3ZhID0gKnZpcnQ7CisJQ1RSNChLVFJfUE1BUCwg InBtYXBfbWFwOiB2YT0weCV4IHN0YXJ0PTB4JWp4IGVuZD0weCVqeCBwcm90PTB4JXgiLAor CSAgICB2YSwgc3RhcnQsIGVuZCwgcHJvdCk7CiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0J CWlmICgoc3RhcnQgJiBQRFJNQVNLKSA9PSAwICYmIGVuZCAtIHN0YXJ0ID49IE5CUERSICYm Ci0JCSAgICBwc2VmbGFnKSB7Ci0JCQlLQVNTRVJUKCh2YSAmIFBEUk1BU0spID09IDAsCi0J CQkgICAgKCJwbWFwX21hcDogbWlzYWxpZ25lZCB2YSAlI3giLCB2YSkpOwotCQkJbmV3cGRl ID0gc3RhcnQgfCBQR19QUyB8IHBnZWZsYWcgfCBQR19SVyB8IFBHX1Y7Ci0JCQlwbWFwX2tl bnRlcl9wZGUodmEsIG5ld3BkZSk7Ci0JCQl2YSArPSBOQlBEUjsKLQkJCXN0YXJ0ICs9IE5C UERSOwotCQl9IGVsc2UgewotCQkJcG1hcF9rZW50ZXIodmEsIHN0YXJ0KTsKLQkJCXZhICs9 IFBBR0VfU0laRTsKLQkJCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQkJfQorCQlwbWFwX2tlbnRl cih2YSwgc3RhcnQpOworCQl2YSArPSBQQUdFX1NJWkU7CisJCXN0YXJ0ICs9IFBBR0VfU0la RTsKIAl9CiAJcG1hcF9pbnZhbGlkYXRlX3JhbmdlKGtlcm5lbF9wbWFwLCBzdmEsIHZhKTsK IAkqdmlydCA9IHZhOwpAQCAtMTUwNSwyNCArMTI1Miw0NyBAQAogdm9pZAogcG1hcF9xZW50 ZXIodm1fb2Zmc2V0X3Qgc3ZhLCB2bV9wYWdlX3QgKm1hLCBpbnQgY291bnQpCiB7Ci0JcHRf ZW50cnlfdCAqZW5kcHRlLCBvbGRwdGUsIHBhLCAqcHRlOwotCXZtX3BhZ2VfdCBtOworCXB0 X2VudHJ5X3QgKmVuZHB0ZSwgKnB0ZTsKKwl2bV9wYWRkcl90IHBhOworCXZtX29mZnNldF90 IHZhID0gc3ZhOworCWludCBtY2xjb3VudCA9IDA7CisJbXVsdGljYWxsX2VudHJ5X3QgbWNs WzE2XTsKKwltdWx0aWNhbGxfZW50cnlfdCAqbWNscCA9IG1jbDsKKwlpbnQgZXJyb3I7CiAK LQlvbGRwdGUgPSAwOworCUNUUjIoS1RSX1BNQVAsICJwbWFwX3FlbnRlcjpzdmE9MHgleCBj b3VudD0lZCIsIHZhLCBjb3VudCk7CiAJcHRlID0gdnRvcHRlKHN2YSk7CiAJZW5kcHRlID0g cHRlICsgY291bnQ7CiAJd2hpbGUgKHB0ZSA8IGVuZHB0ZSkgewotCQltID0gKm1hKys7Ci0J CXBhID0gVk1fUEFHRV9UT19QSFlTKG0pIHwgcG1hcF9jYWNoZV9iaXRzKG0tPm1kLnBhdF9t b2RlLCAwKTsKLQkJaWYgKCgqcHRlICYgKFBHX0ZSQU1FIHwgUEdfUFRFX0NBQ0hFKSkgIT0g cGEpIHsKLQkJCW9sZHB0ZSB8PSAqcHRlOwotCQkJcHRlX3N0b3JlKHB0ZSwgcGEgfCBwZ2Vm bGFnIHwgUEdfUlcgfCBQR19WKTsKLQkJfQotCQlwdGUrKzsKKwkJcGEgPSBWTV9QQUdFX1RP X01BQ0goKm1hKSB8IHBnZWZsYWcgfCBQR19SVyB8IFBHX1YgfCBQR19NIHwgUEdfQTsKKwor CQltY2xwLT5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZzsKKwkJbWNscC0+ YXJnc1swXSA9IHZhOworCQltY2xwLT5hcmdzWzFdID0gKHVpbnQzMl90KShwYSAmIDB4ZmZm ZmZmZmYpOworCQltY2xwLT5hcmdzWzJdID0gKHVpbnQzMl90KShwYSA+PiAzMik7CisJCW1j bHAtPmFyZ3NbM10gPSAoKnB0ZSAmIFBHX1YpID8gVVZNRl9JTlZMUEd8VVZNRl9BTEwgOiAw OworCQorCQl2YSArPSBQQUdFX1NJWkU7CisJCXB0ZSsrOworCQltYSsrOworCQltY2xwKys7 CisJCW1jbGNvdW50Kys7CisJCWlmIChtY2xjb3VudCA9PSAxNikgeworCQkJZXJyb3IgPSBI WVBFUlZJU09SX211bHRpY2FsbChtY2wsIG1jbGNvdW50KTsKKwkJCW1jbHAgPSBtY2w7CisJ CQltY2xjb3VudCA9IDA7CisJCQlLQVNTRVJUKGVycm9yID09IDAsICgiYmFkIG11bHRpY2Fs bCAlZCIsIGVycm9yKSk7CisJCX0JCQorCX0KKwlpZiAobWNsY291bnQpIHsKKwkJZXJyb3Ig PSBIWVBFUlZJU09SX211bHRpY2FsbChtY2wsIG1jbGNvdW50KTsKKwkJS0FTU0VSVChlcnJv ciA9PSAwLCAoImJhZCBtdWx0aWNhbGwgJWQiLCBlcnJvcikpOwogCX0KLQlpZiAoX19wcmVk aWN0X2ZhbHNlKChvbGRwdGUgJiBQR19WKSAhPSAwKSkKLQkJcG1hcF9pbnZhbGlkYXRlX3Jh bmdlKGtlcm5lbF9wbWFwLCBzdmEsIHN2YSArIGNvdW50ICoKLQkJICAgIFBBR0VfU0laRSk7 CisJCisjaWZkZWYgSU5WQVJJQU5UUworCWZvciAocHRlID0gdnRvcHRlKHN2YSksIG1jbGNv dW50ID0gMDsgbWNsY291bnQgPCBjb3VudDsgbWNsY291bnQrKywgcHRlKyspCisJCUtBU1NF UlQoKnB0ZSwgKCJwdGUgbm90IHNldCBmb3IgdmE9MHgleCIsIHN2YSArIG1jbGNvdW50KlBB R0VfU0laRSkpOworI2VuZGlmCQogfQogCiAvKgpAQCAtMTUzNSwxMiArMTMwNSwxOCBAQAog ewogCXZtX29mZnNldF90IHZhOwogCisJQ1RSMihLVFJfUE1BUCwgInBtYXBfcXJlbW92ZTog c3ZhPTB4JXggY291bnQ9JWQiLCBzdmEsIGNvdW50KTsKIAl2YSA9IHN2YTsKKwl2bV9wYWdl X2xvY2tfcXVldWVzKCk7CisJY3JpdGljYWxfZW50ZXIoKTsKIAl3aGlsZSAoY291bnQtLSA+ IDApIHsKIAkJcG1hcF9rcmVtb3ZlKHZhKTsKIAkJdmEgKz0gUEFHRV9TSVpFOwogCX0KKwlQ VF9VUERBVEVTX0ZMVVNIKCk7CiAJcG1hcF9pbnZhbGlkYXRlX3JhbmdlKGtlcm5lbF9wbWFw LCBzdmEsIHZhKTsKKwljcml0aWNhbF9leGl0KCk7CisJdm1fcGFnZV91bmxvY2tfcXVldWVz KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKQEAgLTE1NTQsMTAxICsxMzMwLDggQEAKIAl3aGlsZSAoZnJlZSAhPSBOVUxM KSB7CiAJCW0gPSBmcmVlOwogCQlmcmVlID0gbS0+cmlnaHQ7Ci0JCS8qIFByZXNlcnZlIHRo ZSBwYWdlJ3MgUEdfWkVSTyBzZXR0aW5nLiAqLwotCQl2bV9wYWdlX2ZyZWVfdG9xKG0pOwot CX0KLX0KLQotLyoKLSAqIFNjaGVkdWxlIHRoZSBzcGVjaWZpZWQgdW51c2VkIHBhZ2UgdGFi bGUgcGFnZSB0byBiZSBmcmVlZC4gIFNwZWNpZmljYWxseSwKLSAqIGFkZCB0aGUgcGFnZSB0 byB0aGUgc3BlY2lmaWVkIGxpc3Qgb2YgcGFnZXMgdGhhdCB3aWxsIGJlIHJlbGVhc2VkIHRv IHRoZQotICogcGh5c2ljYWwgbWVtb3J5IG1hbmFnZXIgYWZ0ZXIgdGhlIFRMQiBoYXMgYmVl biB1cGRhdGVkLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotcG1hcF9hZGRfZGVsYXll ZF9mcmVlX2xpc3Qodm1fcGFnZV90IG0sIHZtX3BhZ2VfdCAqZnJlZSwgYm9vbGVhbl90IHNl dF9QR19aRVJPKQotewotCi0JaWYgKHNldF9QR19aRVJPKQotCQltLT5mbGFncyB8PSBQR19a RVJPOwotCWVsc2UKLQkJbS0+ZmxhZ3MgJj0gflBHX1pFUk87Ci0JbS0+cmlnaHQgPSAqZnJl ZTsKLQkqZnJlZSA9IG07Ci19Ci0KLS8qCi0gKiBJbnNlcnRzIHRoZSBzcGVjaWZpZWQgcGFn ZSB0YWJsZSBwYWdlIGludG8gdGhlIHNwZWNpZmllZCBwbWFwJ3MgY29sbGVjdGlvbgotICog b2YgaWRsZSBwYWdlIHRhYmxlIHBhZ2VzLiAgRWFjaCBvZiBhIHBtYXAncyBwYWdlIHRhYmxl IHBhZ2VzIGlzIHJlc3BvbnNpYmxlCi0gKiBmb3IgbWFwcGluZyBhIGRpc3RpbmN0IHJhbmdl IG9mIHZpcnR1YWwgYWRkcmVzc2VzLiAgVGhlIHBtYXAncyBjb2xsZWN0aW9uIGlzCi0gKiBv cmRlcmVkIGJ5IHRoaXMgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgotICovCi1zdGF0aWMgdm9p ZAotcG1hcF9pbnNlcnRfcHRfcGFnZShwbWFwX3QgcG1hcCwgdm1fcGFnZV90IG1wdGUpCi17 Ci0Jdm1fcGFnZV90IHJvb3Q7Ci0KLQlQTUFQX0xPQ0tfQVNTRVJUKHBtYXAsIE1BX09XTkVE KTsKLQlyb290ID0gcG1hcC0+cG1fcm9vdDsKLQlpZiAocm9vdCA9PSBOVUxMKSB7Ci0JCW1w dGUtPmxlZnQgPSBOVUxMOwotCQltcHRlLT5yaWdodCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJ cm9vdCA9IHZtX3BhZ2Vfc3BsYXkobXB0ZS0+cGluZGV4LCByb290KTsKLQkJaWYgKG1wdGUt PnBpbmRleCA8IHJvb3QtPnBpbmRleCkgewotCQkJbXB0ZS0+bGVmdCA9IHJvb3QtPmxlZnQ7 Ci0JCQltcHRlLT5yaWdodCA9IHJvb3Q7Ci0JCQlyb290LT5sZWZ0ID0gTlVMTDsKLQkJfSBl bHNlIGlmIChtcHRlLT5waW5kZXggPT0gcm9vdC0+cGluZGV4KQotCQkJcGFuaWMoInBtYXBf aW5zZXJ0X3B0X3BhZ2U6IHBpbmRleCBhbHJlYWR5IGluc2VydGVkIik7Ci0JCWVsc2Ugewot CQkJbXB0ZS0+cmlnaHQgPSByb290LT5yaWdodDsKLQkJCW1wdGUtPmxlZnQgPSByb290Owot CQkJcm9vdC0+cmlnaHQgPSBOVUxMOwotCQl9Ci0JfQotCXBtYXAtPnBtX3Jvb3QgPSBtcHRl OwotfQotCi0vKgotICogTG9va3MgZm9yIGEgcGFnZSB0YWJsZSBwYWdlIG1hcHBpbmcgdGhl IHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgaW4gdGhlCi0gKiBzcGVjaWZpZWQgcG1hcCdz IGNvbGxlY3Rpb24gb2YgaWRsZSBwYWdlIHRhYmxlIHBhZ2VzLiAgUmV0dXJucyBOVUxMIGlm IHRoZXJlCi0gKiBpcyBubyBwYWdlIHRhYmxlIHBhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUg c3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcy4KLSAqLwotc3RhdGljIHZtX3BhZ2VfdAotcG1h cF9sb29rdXBfcHRfcGFnZShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEpCi17Ci0Jdm1f cGFnZV90IG1wdGU7Ci0Jdm1fcGluZGV4X3QgcGluZGV4ID0gdmEgPj4gUERSU0hJRlQ7Ci0K LQlQTUFQX0xPQ0tfQVNTRVJUKHBtYXAsIE1BX09XTkVEKTsKLQlpZiAoKG1wdGUgPSBwbWFw LT5wbV9yb290KSAhPSBOVUxMICYmIG1wdGUtPnBpbmRleCAhPSBwaW5kZXgpIHsKLQkJbXB0 ZSA9IHZtX3BhZ2Vfc3BsYXkocGluZGV4LCBtcHRlKTsKLQkJaWYgKChwbWFwLT5wbV9yb290 ID0gbXB0ZSktPnBpbmRleCAhPSBwaW5kZXgpCi0JCQltcHRlID0gTlVMTDsKLQl9Ci0JcmV0 dXJuIChtcHRlKTsKLX0KLQotLyoKLSAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBwYWdlIHRh YmxlIHBhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIHBtYXAncyBjb2xsZWN0aW9uCi0gKiBvZiBp ZGxlIHBhZ2UgdGFibGUgcGFnZXMuICBUaGUgc3BlY2lmaWVkIHBhZ2UgdGFibGUgcGFnZSBt dXN0IGJlIGEgbWVtYmVyIG9mCi0gKiB0aGUgcG1hcCdzIGNvbGxlY3Rpb24uCi0gKi8KLXN0 YXRpYyB2b2lkCi1wbWFwX3JlbW92ZV9wdF9wYWdlKHBtYXBfdCBwbWFwLCB2bV9wYWdlX3Qg bXB0ZSkKLXsKLQl2bV9wYWdlX3Qgcm9vdDsKLQotCVBNQVBfTE9DS19BU1NFUlQocG1hcCwg TUFfT1dORUQpOwotCWlmIChtcHRlICE9IHBtYXAtPnBtX3Jvb3QpCi0JCXZtX3BhZ2Vfc3Bs YXkobXB0ZS0+cGluZGV4LCBwbWFwLT5wbV9yb290KTsKLQlpZiAobXB0ZS0+bGVmdCA9PSBO VUxMKQotCQlyb290ID0gbXB0ZS0+cmlnaHQ7Ci0JZWxzZSB7Ci0JCXJvb3QgPSB2bV9wYWdl X3NwbGF5KG1wdGUtPnBpbmRleCwgbXB0ZS0+bGVmdCk7Ci0JCXJvb3QtPnJpZ2h0ID0gbXB0 ZS0+cmlnaHQ7CisJCXZtX3BhZ2VfZnJlZV96ZXJvKG0pOwogCX0KLQlwbWFwLT5wbV9yb290 ID0gcm9vdDsKIH0KIAogLyoKQEAgLTE2NzEsMTAgKzEzNTQsMTYgQEAKIHsKIAl2bV9vZmZz ZXRfdCBwdGV2YTsKIAorCVBUX1VQREFURVNfRkxVU0goKTsKIAkvKgogCSAqIHVubWFwIHRo ZSBwYWdlIHRhYmxlIHBhZ2UKIAkgKi8KLQlwbWFwLT5wbV9wZGlyW20tPnBpbmRleF0gPSAw OworCXhlbl9wdF91bnBpbihwbWFwLT5wbV9wZGlyW20tPnBpbmRleF0pOworCS8qCisJICog cGFnZSAqbWlnaHQqIGNvbnRhaW4gcmVzaWR1YWwgbWFwcGluZyA6LS8gIAorCSAqLworCVBE X0NMRUFSX1ZBKHBtYXAsIG0tPnBpbmRleCwgVFJVRSk7CisJcG1hcF96ZXJvX3BhZ2UobSk7 CiAJLS1wbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudDsKIAogCS8qCkBAIC0xNjk1LDcg KzEzODQsOCBAQAogCSAqIFB1dCBwYWdlIG9uIGEgbGlzdCBzbyB0aGF0IGl0IGlzIHJlbGVh c2VkIGFmdGVyCiAJICogKkFMTCogVExCIHNob290ZG93biBpcyBkb25lCiAJICovCi0JcG1h cF9hZGRfZGVsYXllZF9mcmVlX2xpc3QobSwgZnJlZSwgVFJVRSk7CisJbS0+cmlnaHQgPSAq ZnJlZTsKKwkqZnJlZSA9IG07CiAKIAlyZXR1cm4gKDEpOwogfQpAQCAtMTcxMiw3ICsxNDAy LDcgQEAKIAogCWlmICh2YSA+PSBWTV9NQVhVU0VSX0FERFJFU1MpCiAJCXJldHVybiAoMCk7 Ci0JcHRlcGRlID0gKnBtYXBfcGRlKHBtYXAsIHZhKTsKKwlwdGVwZGUgPSBQVF9HRVQocG1h cF9wZGUocG1hcCwgdmEpKTsKIAltcHRlID0gUEhZU19UT19WTV9QQUdFKHB0ZXBkZSAmIFBH X0ZSQU1FKTsKIAlyZXR1cm4gKHBtYXBfdW53aXJlX3B0ZV9ob2xkKHBtYXAsIG1wdGUsIGZy ZWUpKTsKIH0KQEAgLTE3MzQsNyArMTQyNCw2IEBACiAjaWZkZWYgUEFFCiAJcG1hcC0+cG1f cGRwdCA9IChwZHB0X2VudHJ5X3QgKikoS0VSTkJBU0UgKyAodm1fb2Zmc2V0X3QpSWRsZVBE UFQpOwogI2VuZGlmCi0JcG1hcC0+cG1fcm9vdCA9IE5VTEw7CiAJQ1BVX1pFUk8oJnBtYXAt PnBtX2FjdGl2ZSk7CiAJUENQVV9TRVQoY3VycG1hcCwgcG1hcCk7CiAJVEFJTFFfSU5JVCgm cG1hcC0+cG1fcHZjaHVuayk7CkBAIC0xNzQ4LDEwICsxNDM3LDE0IEBACiBpbnQKIHBtYXBf cGluaXQocG1hcF90IHBtYXApCiB7Ci0Jdm1fcGFnZV90IG0sIHB0ZHBnW05QR1BURF07Ci0J dm1fcGFkZHJfdCBwYTsKKwl2bV9wYWdlX3QgbSwgcHRkcGdbTlBHUFREICsgMV07CisJaW50 IG5wZ3B0ZCA9IE5QR1BURCArIDE7CiAJaW50IGk7CiAKKyNpZmRlZiBIQU1GSVNURURfTE9D S0lORworCW10eF9sb2NrKCZjcmVhdGVkZWxldGVfbG9jayk7CisjZW5kaWYKKwogCVBNQVBf TE9DS19JTklUKHBtYXApOwogCiAJLyoKQEAgLTE3NjMsMjUgKzE0NTYsMjAgQEAKIAkJICAg IE5CUFREKTsKIAkJaWYgKHBtYXAtPnBtX3BkaXIgPT0gTlVMTCkgewogCQkJUE1BUF9MT0NL X0RFU1RST1kocG1hcCk7CisjaWZkZWYgSEFNRklTVEVEX0xPQ0tJTkcKKwkJCW10eF91bmxv Y2soJmNyZWF0ZWRlbGV0ZV9sb2NrKTsKKyNlbmRpZgogCQkJcmV0dXJuICgwKTsKIAkJfQog I2lmZGVmIFBBRQotCQlwbWFwLT5wbV9wZHB0ID0gdW1hX3phbGxvYyhwZHB0em9uZSwgTV9X QUlUT0sgfCBNX1pFUk8pOwotCQlLQVNTRVJUKCgodm1fb2Zmc2V0X3QpcG1hcC0+cG1fcGRw dCAmCi0JCSAgICAoKE5QR1BURCAqIHNpemVvZihwZHB0X2VudHJ5X3QpKSAtIDEpKSA9PSAw LAotCQkgICAgKCJwbWFwX3Bpbml0OiBwZHB0IG1pc2FsaWduZWQiKSk7Ci0JCUtBU1NFUlQo cG1hcF9rZXh0cmFjdCgodm1fb2Zmc2V0X3QpcG1hcC0+cG1fcGRwdCkgPCAoNFVMTDw8MzAp LAotCQkgICAgKCJwbWFwX3Bpbml0OiBwZHB0IGFib3ZlIDRnIikpOworCQlwbWFwLT5wbV9w ZHB0ID0gKHBkX2VudHJ5X3QgKilrbWVtX2FsbG9jX25vZmF1bHQoa2VybmVsX21hcCwgMSk7 CiAjZW5kaWYKLQkJcG1hcC0+cG1fcm9vdCA9IE5VTEw7CiAJfQotCUtBU1NFUlQocG1hcC0+ cG1fcm9vdCA9PSBOVUxMLAotCSAgICAoInBtYXBfcGluaXQ6IHBtYXAgaGFzIHJlc2VydmVk IHBhZ2UgdGFibGUgcGFnZShzKSIpKTsKIAogCS8qCiAJICogYWxsb2NhdGUgdGhlIHBhZ2Ug ZGlyZWN0b3J5IHBhZ2UocykKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlBHUFREOykgewor CWZvciAoaSA9IDA7IGkgPCBucGdwdGQ7KSB7CiAJCW0gPSB2bV9wYWdlX2FsbG9jKE5VTEws IDAsIFZNX0FMTE9DX05PUk1BTCB8IFZNX0FMTE9DX05PT0JKIHwKIAkJICAgIFZNX0FMTE9D X1dJUkVEIHwgVk1fQUxMT0NfWkVSTyk7CiAJCWlmIChtID09IE5VTEwpCkBAIC0xODAzLDE5 ICsxNDkxLDQ5IEBACiAJYmNvcHkoUFREICsgS1BUREksIHBtYXAtPnBtX3BkaXIgKyBLUFRE SSwgbmtwdCAqIHNpemVvZihwZF9lbnRyeV90KSk7CiAJbXR4X3VubG9ja19zcGluKCZhbGxw bWFwc19sb2NrKTsKIAotCS8qIGluc3RhbGwgc2VsZi1yZWZlcmVudGlhbCBhZGRyZXNzIG1h cHBpbmcgZW50cnkocykgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlBHUFREOyBpKyspIHsKLQkJ cGEgPSBWTV9QQUdFX1RPX1BIWVMocHRkcGdbaV0pOwotCQlwbWFwLT5wbV9wZGlyW1BURFBU REkgKyBpXSA9IHBhIHwgUEdfViB8IFBHX1JXIHwgUEdfQSB8IFBHX007CiAjaWZkZWYgUEFF Ci0JCXBtYXAtPnBtX3BkcHRbaV0gPSBwYSB8IFBHX1Y7CisJcG1hcF9xZW50ZXIoKHZtX29m ZnNldF90KXBtYXAtPnBtX3BkcHQsICZwdGRwZ1tOUEdQVERdLCAxKTsKKwlpZiAoKHB0ZHBn W05QR1BURF0tPmZsYWdzICYgUEdfWkVSTykgPT0gMCkKKwkJYnplcm8ocG1hcC0+cG1fcGRw dCwgUEFHRV9TSVpFKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlBHUFREOyBpKyspIHsKKwkJdm1f cGFkZHJfdCBtYTsKKwkJCisJCW1hID0gVk1fUEFHRV9UT19NQUNIKHB0ZHBnW2ldKTsKKwkJ cG1hcC0+cG1fcGRwdFtpXSA9IG1hIHwgUEdfVjsKKworCX0KKyNlbmRpZgkKKwlmb3IgKGkg PSAwOyBpIDwgTlBHUFREOyBpKyspIHsKKwkJcHRfZW50cnlfdCAqcGQ7CisJCXZtX3BhZGRy X3QgbWE7CisJCQorCQltYSA9IFZNX1BBR0VfVE9fTUFDSChwdGRwZ1tpXSk7CisJCXBkID0g cG1hcC0+cG1fcGRpciArIChpICogTlBERVBHKTsKKwkJUFRfU0VUX01BKHBkLCAqdnRvcHRl KCh2bV9vZmZzZXRfdClwZCkgJiB+KFBHX018UEdfQXxQR19VfFBHX1JXKSk7CisjaWYgMAkJ CisJCXhlbl9wZ2RfcGluKG1hKTsKKyNlbmRpZgkJCisJfQorCQorI2lmZGVmIFBBRQkKKwlQ VF9TRVRfTUEocG1hcC0+cG1fcGRwdCwgKnZ0b3B0ZSgodm1fb2Zmc2V0X3QpcG1hcC0+cG1f cGRwdCkgJiB+UEdfUlcpOwogI2VuZGlmCisJdm1fcGFnZV9sb2NrX3F1ZXVlcygpOworCXhl bl9mbHVzaF9xdWV1ZSgpOworCXhlbl9wZ2RwdF9waW4oVk1fUEFHRV9UT19NQUNIKHB0ZHBn W05QR1BURF0pKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlBHUFREOyBpKyspIHsKKwkJdm1fcGFk ZHJfdCBtYSA9IFZNX1BBR0VfVE9fTUFDSChwdGRwZ1tpXSk7CisJCVBUX1NFVF9WQV9NQSgm cG1hcC0+cG1fcGRpcltQVERQVERJICsgaV0sIG1hIHwgUEdfViB8IFBHX0EsIEZBTFNFKTsK IAl9Ci0KKwl4ZW5fZmx1c2hfcXVldWUoKTsKKwl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsK IAlDUFVfWkVSTygmcG1hcC0+cG1fYWN0aXZlKTsKIAlUQUlMUV9JTklUKCZwbWFwLT5wbV9w dmNodW5rKTsKIAliemVybygmcG1hcC0+cG1fc3RhdHMsIHNpemVvZiBwbWFwLT5wbV9zdGF0 cyk7CiAKKyNpZmRlZiBIQU1GSVNURURfTE9DS0lORworCW10eF91bmxvY2soJmNyZWF0ZWRl bGV0ZV9sb2NrKTsKKyNlbmRpZgogCXJldHVybiAoMSk7CiB9CiAKQEAgLTE4MjYsNyArMTU0 NCw3IEBACiBzdGF0aWMgdm1fcGFnZV90CiBfcG1hcF9hbGxvY3B0ZShwbWFwX3QgcG1hcCwg dV9pbnQgcHRlcGluZGV4LCBpbnQgZmxhZ3MpCiB7Ci0Jdm1fcGFkZHJfdCBwdGVwYTsKKwl2 bV9wYWRkcl90IHB0ZW1hOwogCXZtX3BhZ2VfdCBtOwogCiAJS0FTU0VSVCgoZmxhZ3MgJiAo TV9OT1dBSVQgfCBNX1dBSVRPSykpID09IE1fTk9XQUlUIHx8CkBAIC0xODYyLDEwICsxNTgw LDEzIEBACiAKIAlwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCsrOwogCi0JcHRlcGEg PSBWTV9QQUdFX1RPX1BIWVMobSk7Ci0JcG1hcC0+cG1fcGRpcltwdGVwaW5kZXhdID0KLQkJ KHBkX2VudHJ5X3QpIChwdGVwYSB8IFBHX1UgfCBQR19SVyB8IFBHX1YgfCBQR19BIHwgUEdf TSk7Ci0KKwlwdGVtYSA9IFZNX1BBR0VfVE9fTUFDSChtKTsKKwl4ZW5fcHRfcGluKHB0ZW1h KTsKKwlQVF9TRVRfVkFfTUEoJnBtYXAtPnBtX3BkaXJbcHRlcGluZGV4XSwKKwkJKHB0ZW1h IHwgUEdfVSB8IFBHX1JXIHwgUEdfViB8IFBHX0EgfCBQR19NKSwgVFJVRSk7CisJCisJS0FT U0VSVChwbWFwLT5wbV9wZGlyW3B0ZXBpbmRleF0sCisJICAgICgiX3BtYXBfYWxsb2NwdGU6 IHB0ZXBpbmRleD0lZCBkaWQgbm90IGdldCBtYXBwZWQiLCBwdGVwaW5kZXgpKTsKIAlyZXR1 cm4gKG0pOwogfQogCkBAIC0xODczLDcgKzE1OTQsNyBAQAogcG1hcF9hbGxvY3B0ZShwbWFw X3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIGludCBmbGFncykKIHsKIAl1X2ludCBwdGVwaW5k ZXg7Ci0JcGRfZW50cnlfdCBwdGVwYTsKKwlwZF9lbnRyeV90IHB0ZW1hOwogCXZtX3BhZ2Vf dCBtOwogCiAJS0FTU0VSVCgoZmxhZ3MgJiAoTV9OT1dBSVQgfCBNX1dBSVRPSykpID09IE1f Tk9XQUlUIHx8CkBAIC0xODg4LDMyICsxNjA5LDQxIEBACiAJLyoKIAkgKiBHZXQgdGhlIHBh Z2UgZGlyZWN0b3J5IGVudHJ5CiAJICovCi0JcHRlcGEgPSBwbWFwLT5wbV9wZGlyW3B0ZXBp bmRleF07CisJcHRlbWEgPSBwbWFwLT5wbV9wZGlyW3B0ZXBpbmRleF07CiAKIAkvKgogCSAq IFRoaXMgc3VwcG9ydHMgc3dpdGNoaW5nIGZyb20gYSA0TUIgcGFnZSB0byBhCiAJICogbm9y bWFsIDRLIHBhZ2UuCiAJICovCi0JaWYgKHB0ZXBhICYgUEdfUFMpIHsKLQkJKHZvaWQpcG1h cF9kZW1vdGVfcGRlKHBtYXAsICZwbWFwLT5wbV9wZGlyW3B0ZXBpbmRleF0sIHZhKTsKLQkJ cHRlcGEgPSBwbWFwLT5wbV9wZGlyW3B0ZXBpbmRleF07CisJaWYgKHB0ZW1hICYgUEdfUFMp IHsKKwkJLyoKKwkJICogWFhYIAorCQkgKi8KKwkJcG1hcC0+cG1fcGRpcltwdGVwaW5kZXhd ID0gMDsKKwkJcHRlbWEgPSAwOworCQlwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCAt PSBOQlBEUiAvIFBBR0VfU0laRTsKKwkJcG1hcF9pbnZhbGlkYXRlX2FsbChrZXJuZWxfcG1h cCk7CiAJfQogCiAJLyoKIAkgKiBJZiB0aGUgcGFnZSB0YWJsZSBwYWdlIGlzIG1hcHBlZCwg d2UganVzdCBpbmNyZW1lbnQgdGhlCiAJICogaG9sZCBjb3VudCwgYW5kIGFjdGl2YXRlIGl0 LgogCSAqLwotCWlmIChwdGVwYSkgewotCQltID0gUEhZU19UT19WTV9QQUdFKHB0ZXBhICYg UEdfRlJBTUUpOworCWlmIChwdGVtYSAmIFBHX1YpIHsKKwkJbSA9IFBIWVNfVE9fVk1fUEFH RSh4cG1hcF9tdG9wKHB0ZW1hKSAmIFBHX0ZSQU1FKTsKIAkJbS0+d2lyZV9jb3VudCsrOwog CX0gZWxzZSB7CiAJCS8qCiAJCSAqIEhlcmUgaWYgdGhlIHB0ZSBwYWdlIGlzbid0IG1hcHBl ZCwgb3IgaWYgaXQgaGFzCiAJCSAqIGJlZW4gZGVhbGxvY2F0ZWQuIAogCQkgKi8KKwkJQ1RS MyhLVFJfUE1BUCwgInBtYXBfYWxsb2NwdGU6IHBtYXA9JXAgdmE9MHglMDh4IGZsYWdzPTB4 JXgiLAorCQkgICAgcG1hcCwgdmEsIGZsYWdzKTsKIAkJbSA9IF9wbWFwX2FsbG9jcHRlKHBt YXAsIHB0ZXBpbmRleCwgZmxhZ3MpOwogCQlpZiAobSA9PSBOVUxMICYmIChmbGFncyAmIE1f V0FJVE9LKSkKIAkJCWdvdG8gcmV0cnk7CisKKwkJS0FTU0VSVChwbWFwLT5wbV9wZGlyW3B0 ZXBpbmRleF0sICgicHRlcGluZGV4PSVkIGRpZCBub3QgZ2V0IG1hcHBlZCIsIHB0ZXBpbmRl eCkpOwogCX0KIAlyZXR1cm4gKG0pOwogfQpAQCAtMjAzMywxNCArMTc2MywyMyBAQAogdm9p ZAogcG1hcF9yZWxlYXNlKHBtYXBfdCBwbWFwKQogewotCXZtX3BhZ2VfdCBtLCBwdGRwZ1tO UEdQVERdOworCXZtX3BhZ2VfdCBtLCBwdGRwZ1syKk5QR1BURCsxXTsKKwl2bV9wYWRkcl90 IG1hOwogCWludCBpOworI2lmZGVmIFBBRQkKKwlpbnQgbnBncHRkID0gTlBHUFREICsgMTsK KyNlbHNlCisJaW50IG5wZ3B0ZCA9IE5QR1BURDsKKyNlbmRpZgogCiAJS0FTU0VSVChwbWFw LT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCA9PSAwLAogCSAgICAoInBtYXBfcmVsZWFzZTog cG1hcCByZXNpZGVudCBjb3VudCAlbGQgIT0gMCIsCiAJICAgIHBtYXAtPnBtX3N0YXRzLnJl c2lkZW50X2NvdW50KSk7Ci0JS0FTU0VSVChwbWFwLT5wbV9yb290ID09IE5VTEwsCi0JICAg ICgicG1hcF9yZWxlYXNlOiBwbWFwIGhhcyByZXNlcnZlZCBwYWdlIHRhYmxlIHBhZ2Uocyki KSk7CisJUFRfVVBEQVRFU19GTFVTSCgpOworCisjaWZkZWYgSEFNRklTVEVEX0xPQ0tJTkcK KwltdHhfbG9jaygmY3JlYXRlZGVsZXRlX2xvY2spOworI2VuZGlmCiAKIAlwbWFwX2xhenlm aXgocG1hcCk7CiAJbXR4X2xvY2tfc3BpbigmYWxscG1hcHNfbG9jayk7CkBAIC0yMDQ4LDI1 ICsxNzg3LDM5IEBACiAJbXR4X3VubG9ja19zcGluKCZhbGxwbWFwc19sb2NrKTsKIAogCWZv ciAoaSA9IDA7IGkgPCBOUEdQVEQ7IGkrKykKLQkJcHRkcGdbaV0gPSBQSFlTX1RPX1ZNX1BB R0UocG1hcC0+cG1fcGRpcltQVERQVERJICsgaV0gJgotCQkgICAgUEdfRlJBTUUpOwotCi0J Ynplcm8ocG1hcC0+cG1fcGRpciArIFBURFBUREksIChua3B0ICsgTlBHUFREKSAqCi0JICAg IHNpemVvZigqcG1hcC0+cG1fcGRpcikpOwotCisJCXB0ZHBnW2ldID0gUEhZU19UT19WTV9Q QUdFKHZ0b3BoeXMocG1hcC0+cG1fcGRpciArIChpKk5QREVQRykpICYgUEdfRlJBTUUpOwog CXBtYXBfcXJlbW92ZSgodm1fb2Zmc2V0X3QpcG1hcC0+cG1fcGRpciwgTlBHUFREKTsKKyNp ZmRlZiBQQUUKKwlwdGRwZ1tOUEdQVERdID0gUEhZU19UT19WTV9QQUdFKHZ0b3BoeXMocG1h cC0+cG1fcGRwdCkpOworI2VuZGlmCQogCi0JZm9yIChpID0gMDsgaSA8IE5QR1BURDsgaSsr KSB7CisJZm9yIChpID0gMDsgaSA8IG5wZ3B0ZDsgaSsrKSB7CiAJCW0gPSBwdGRwZ1tpXTsK KwkJbWEgPSBWTV9QQUdFX1RPX01BQ0gobSk7CisJCS8qIHVucGlubmluZyBMMSBhbmQgTDIg dHJlYXRlZCB0aGUgc2FtZSAqLworI2lmIDAKKyAgICAgICAgICAgICAgICB4ZW5fcGdkX3Vu cGluKG1hKTsKKyNlbHNlCisJCWlmIChpID09IE5QR1BURCkKKwkgICAgICAgICAgICAgICAg eGVuX3BnZF91bnBpbihtYSk7CisjZW5kaWYKICNpZmRlZiBQQUUKLQkJS0FTU0VSVChWTV9Q QUdFX1RPX1BIWVMobSkgPT0gKHBtYXAtPnBtX3BkcHRbaV0gJiBQR19GUkFNRSksCi0JCSAg ICAoInBtYXBfcmVsZWFzZTogZ290IHdyb25nIHB0ZCBwYWdlIikpOworCQlpZiAoaSA8IE5Q R1BURCkKKwkJCUtBU1NFUlQoVk1fUEFHRV9UT19NQUNIKG0pID09IChwbWFwLT5wbV9wZHB0 W2ldICYgUEdfRlJBTUUpLAorCQkJICAgICgicG1hcF9yZWxlYXNlOiBnb3Qgd3JvbmcgcHRk IHBhZ2UiKSk7CiAjZW5kaWYKIAkJbS0+d2lyZV9jb3VudC0tOwogCQlhdG9taWNfc3VidHJh Y3RfaW50KCZjbnQudl93aXJlX2NvdW50LCAxKTsKLQkJdm1fcGFnZV9mcmVlX3plcm8obSk7 CisJCXZtX3BhZ2VfZnJlZShtKTsKIAl9CisjaWZkZWYgUEFFCisJcG1hcF9xcmVtb3ZlKCh2 bV9vZmZzZXRfdClwbWFwLT5wbV9wZHB0LCAxKTsKKyNlbmRpZgogCVBNQVBfTE9DS19ERVNU Uk9ZKHBtYXApOworCisjaWZkZWYgSEFNRklTVEVEX0xPQ0tJTkcKKwltdHhfdW5sb2NrKCZj cmVhdGVkZWxldGVfbG9jayk7CisjZW5kaWYKIH0KIAwKIHN0YXRpYyBpbnQKQEAgLTIwOTUs MTEgKzE4NDgsMjQgQEAKIHZvaWQKIHBtYXBfZ3Jvd2tlcm5lbCh2bV9vZmZzZXRfdCBhZGRy KQogeworCXN0cnVjdCBwbWFwICpwbWFwOwogCXZtX3BhZGRyX3QgcHRwcGFkZHI7CiAJdm1f cGFnZV90IG5rcGc7CiAJcGRfZW50cnlfdCBuZXdwZGlyOwogCiAJbXR4X2Fzc2VydCgma2Vy bmVsX21hcC0+c3lzdGVtX210eCwgTUFfT1dORUQpOworCWlmIChrZXJuZWxfdm1fZW5kID09 IDApIHsKKwkJa2VybmVsX3ZtX2VuZCA9IEtFUk5CQVNFOworCQlua3B0ID0gMDsKKwkJd2hp bGUgKHBkaXJfcGRlKFBURCwga2VybmVsX3ZtX2VuZCkpIHsKKwkJCWtlcm5lbF92bV9lbmQg PSAoa2VybmVsX3ZtX2VuZCArIFBBR0VfU0laRSAqIE5QVEVQRykgJiB+KFBBR0VfU0laRSAq IE5QVEVQRyAtIDEpOworCQkJbmtwdCsrOworCQkJaWYgKGtlcm5lbF92bV9lbmQgLSAxID49 IGtlcm5lbF9tYXAtPm1heF9vZmZzZXQpIHsKKwkJCQlrZXJuZWxfdm1fZW5kID0ga2VybmVs X21hcC0+bWF4X29mZnNldDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIAlhZGRyID0g cm91bmR1cDIoYWRkciwgTkJQRFIpOwogCWlmIChhZGRyIC0gMSA+PSBrZXJuZWxfbWFwLT5t YXhfb2Zmc2V0KQogCQlhZGRyID0ga2VybmVsX21hcC0+bWF4X29mZnNldDsKQEAgLTIxMjUs OSArMTg5MSwxNSBAQAogCQkJcG1hcF96ZXJvX3BhZ2UobmtwZyk7CiAJCXB0cHBhZGRyID0g Vk1fUEFHRV9UT19QSFlTKG5rcGcpOwogCQluZXdwZGlyID0gKHBkX2VudHJ5X3QpIChwdHBw YWRkciB8IFBHX1YgfCBQR19SVyB8IFBHX0EgfCBQR19NKTsKLQkJcGRpcl9wZGUoS1BURCwg a2VybmVsX3ZtX2VuZCkgPSBwZ2VmbGFnIHwgbmV3cGRpcjsKKwkJdm1fcGFnZV9sb2NrX3F1 ZXVlcygpOworCQlQRF9TRVRfVkEoa2VybmVsX3BtYXAsIChrZXJuZWxfdm1fZW5kID4+IFBE UlNISUZUKSwgbmV3cGRpciwgVFJVRSk7CisJCW10eF9sb2NrX3NwaW4oJmFsbHBtYXBzX2xv Y2spOworCQlMSVNUX0ZPUkVBQ0gocG1hcCwgJmFsbHBtYXBzLCBwbV9saXN0KQorCQkJUERf U0VUX1ZBKHBtYXAsIChrZXJuZWxfdm1fZW5kID4+IFBEUlNISUZUKSwgbmV3cGRpciwgVFJV RSk7CisKKwkJbXR4X3VubG9ja19zcGluKCZhbGxwbWFwc19sb2NrKTsKKwkJdm1fcGFnZV91 bmxvY2tfcXVldWVzKCk7CiAKLQkJcG1hcF9rZW50ZXJfcGRlKGtlcm5lbF92bV9lbmQsIG5l d3BkaXIpOwogCQlrZXJuZWxfdm1fZW5kID0gKGtlcm5lbF92bV9lbmQgKyBOQlBEUikgJiB+ UERSTUFTSzsKIAkJaWYgKGtlcm5lbF92bV9lbmQgLSAxID49IGtlcm5lbF9tYXAtPm1heF9v ZmZzZXQpIHsKIAkJCWtlcm5lbF92bV9lbmQgPSBrZXJuZWxfbWFwLT5tYXhfb2Zmc2V0OwpA QCAtMjIwNSw3ICsxOTc3LDYgQEAKIHN0YXRpYyB2b2lkCiBwbWFwX2NvbGxlY3QocG1hcF90 IGxvY2tlZF9wbWFwLCBzdHJ1Y3QgdnBncXVldWVzICp2cHEpCiB7Ci0JcGRfZW50cnlfdCAq cGRlOwogCXBtYXBfdCBwbWFwOwogCXB0X2VudHJ5X3QgKnB0ZSwgdHB0ZTsKIAlwdl9lbnRy eV90IG5leHRfcHYsIHB2OwpAQCAtMjIyNSw5ICsxOTk2LDYgQEAKIAkJCWVsc2UgaWYgKHBt YXAgIT0gbG9ja2VkX3BtYXAgJiYgIVBNQVBfVFJZTE9DSyhwbWFwKSkKIAkJCQljb250aW51 ZTsKIAkJCXBtYXAtPnBtX3N0YXRzLnJlc2lkZW50X2NvdW50LS07Ci0JCQlwZGUgPSBwbWFw X3BkZShwbWFwLCB2YSk7Ci0JCQlLQVNTRVJUKCgqcGRlICYgUEdfUFMpID09IDAsICgicG1h cF9jb2xsZWN0OiBmb3VuZCIKLQkJCSAgICAiIGEgNG1wYWdlIGluIHBhZ2UgJXAncyBwdiBs aXN0IiwgbSkpOwogCQkJcHRlID0gcG1hcF9wdGVfcXVpY2socG1hcCwgdmEpOwogCQkJdHB0 ZSA9IHB0ZV9sb2FkX2NsZWFyKHB0ZSk7CiAJCQlLQVNTRVJUKCh0cHRlICYgUEdfVykgPT0g MCwKQEAgLTIyNDUsOCArMjAxMyw3IEBACiAJCQlpZiAocG1hcCAhPSBsb2NrZWRfcG1hcCkK IAkJCQlQTUFQX1VOTE9DSyhwbWFwKTsKIAkJfQotCQlpZiAoVEFJTFFfRU1QVFkoJm0tPm1k LnB2X2xpc3QpICYmCi0JCSAgICBUQUlMUV9FTVBUWSgmcGFfdG9fcHZoKFZNX1BBR0VfVE9f UEhZUyhtKSktPnB2X2xpc3QpKQorCQlpZiAoVEFJTFFfRU1QVFkoJm0tPm1kLnB2X2xpc3Qp KQogCQkJdm1fcGFnZV9hZmxhZ19jbGVhcihtLCBQR0FfV1JJVEVBQkxFKTsKIAl9CiAJc2No ZWRfdW5waW4oKTsKQEAgLTIzNzMsNiArMjE0MCw4IEBACiAJUFZfU1RBVChwY19jaHVua19h bGxvY3MrKyk7CiAJcGMgPSAoc3RydWN0IHB2X2NodW5rICopcG1hcF9wdGVsaXN0X2FsbG9j KCZwdl92YWZyZWUpOwogCXBtYXBfcWVudGVyKCh2bV9vZmZzZXRfdClwYywgJm0sIDEpOwor CWlmICgobS0+ZmxhZ3MgJiBQR19aRVJPKSA9PSAwKQorCQlwYWdlemVybyhwYyk7CiAJcGMt PnBjX3BtYXAgPSBwbWFwOwogCXBjLT5wY19tYXBbMF0gPSBwY19mcmVlbWFza1swXSAmIH4x dWw7CS8qIHByZWFsbG9jYXRlZCBiaXQgMCAqLwogCWZvciAoZmllbGQgPSAxOyBmaWVsZCA8 IF9OUENNOyBmaWVsZCsrKQpAQCAtMjM5OSw3MyArMjE2OCw2IEBACiB9CiAKIHN0YXRpYyB2 b2lkCi1wbWFwX3B2X2RlbW90ZV9wZGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2 bV9wYWRkcl90IHBhKQotewotCXN0cnVjdCBtZF9wYWdlICpwdmg7Ci0JcHZfZW50cnlfdCBw djsKLQl2bV9vZmZzZXRfdCB2YV9sYXN0OwotCXZtX3BhZ2VfdCBtOwotCi0JbXR4X2Fzc2Vy dCgmdm1fcGFnZV9xdWV1ZV9tdHgsIE1BX09XTkVEKTsKLQlLQVNTRVJUKChwYSAmIFBEUk1B U0spID09IDAsCi0JICAgICgicG1hcF9wdl9kZW1vdGVfcGRlOiBwYSBpcyBub3QgNG1wYWdl IGFsaWduZWQiKSk7Ci0KLQkvKgotCSAqIFRyYW5zZmVyIHRoZSA0bXBhZ2UncyBwdiBlbnRy eSBmb3IgdGhpcyBtYXBwaW5nIHRvIHRoZSBmaXJzdAotCSAqIHBhZ2UncyBwdiBsaXN0Lgot CSAqLwotCXB2aCA9IHBhX3RvX3B2aChwYSk7Ci0JdmEgPSB0cnVuY180bXBhZ2UodmEpOwot CXB2ID0gcG1hcF9wdmhfcmVtb3ZlKHB2aCwgcG1hcCwgdmEpOwotCUtBU1NFUlQocHYgIT0g TlVMTCwgKCJwbWFwX3B2X2RlbW90ZV9wZGU6IHB2IG5vdCBmb3VuZCIpKTsKLQltID0gUEhZ U19UT19WTV9QQUdFKHBhKTsKLQlUQUlMUV9JTlNFUlRfVEFJTCgmbS0+bWQucHZfbGlzdCwg cHYsIHB2X2xpc3QpOwotCS8qIEluc3RhbnRpYXRlIHRoZSByZW1haW5pbmcgTlBURVBHIC0g MSBwdiBlbnRyaWVzLiAqLwotCXZhX2xhc3QgPSB2YSArIE5CUERSIC0gUEFHRV9TSVpFOwot CWRvIHsKLQkJbSsrOwotCQlLQVNTRVJUKChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VEKSA9 PSAwLAotCQkgICAgKCJwbWFwX3B2X2RlbW90ZV9wZGU6IHBhZ2UgJXAgaXMgbm90IG1hbmFn ZWQiLCBtKSk7Ci0JCXZhICs9IFBBR0VfU0laRTsKLQkJcG1hcF9pbnNlcnRfZW50cnkocG1h cCwgdmEsIG0pOwotCX0gd2hpbGUgKHZhIDwgdmFfbGFzdCk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1wbWFwX3B2X3Byb21vdGVfcGRlKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1f cGFkZHJfdCBwYSkKLXsKLQlzdHJ1Y3QgbWRfcGFnZSAqcHZoOwotCXB2X2VudHJ5X3QgcHY7 Ci0Jdm1fb2Zmc2V0X3QgdmFfbGFzdDsKLQl2bV9wYWdlX3QgbTsKLQotCW10eF9hc3NlcnQo JnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05FRCk7Ci0JS0FTU0VSVCgocGEgJiBQRFJNQVNL KSA9PSAwLAotCSAgICAoInBtYXBfcHZfcHJvbW90ZV9wZGU6IHBhIGlzIG5vdCA0bXBhZ2Ug YWxpZ25lZCIpKTsKLQotCS8qCi0JICogVHJhbnNmZXIgdGhlIGZpcnN0IHBhZ2UncyBwdiBl bnRyeSBmb3IgdGhpcyBtYXBwaW5nIHRvIHRoZQotCSAqIDRtcGFnZSdzIHB2IGxpc3QuICBB c2lkZSBmcm9tIGF2b2lkaW5nIHRoZSBjb3N0IG9mIGEgY2FsbAotCSAqIHRvIGdldF9wdl9l bnRyeSgpLCBhIHRyYW5zZmVyIGF2b2lkcyB0aGUgcG9zc2liaWxpdHkgdGhhdAotCSAqIGdl dF9wdl9lbnRyeSgpIGNhbGxzIHBtYXBfY29sbGVjdCgpIGFuZCB0aGF0IHBtYXBfY29sbGVj dCgpCi0JICogcmVtb3ZlcyBvbmUgb2YgdGhlIG1hcHBpbmdzIHRoYXQgaXMgYmVpbmcgcHJv bW90ZWQuCi0JICovCi0JbSA9IFBIWVNfVE9fVk1fUEFHRShwYSk7Ci0JdmEgPSB0cnVuY180 bXBhZ2UodmEpOwotCXB2ID0gcG1hcF9wdmhfcmVtb3ZlKCZtLT5tZCwgcG1hcCwgdmEpOwot CUtBU1NFUlQocHYgIT0gTlVMTCwgKCJwbWFwX3B2X3Byb21vdGVfcGRlOiBwdiBub3QgZm91 bmQiKSk7Ci0JcHZoID0gcGFfdG9fcHZoKHBhKTsKLQlUQUlMUV9JTlNFUlRfVEFJTCgmcHZo LT5wdl9saXN0LCBwdiwgcHZfbGlzdCk7Ci0JLyogRnJlZSB0aGUgcmVtYWluaW5nIE5QVEVQ RyAtIDEgcHYgZW50cmllcy4gKi8KLQl2YV9sYXN0ID0gdmEgKyBOQlBEUiAtIFBBR0VfU0la RTsKLQlkbyB7Ci0JCW0rKzsKLQkJdmEgKz0gUEFHRV9TSVpFOwotCQlwbWFwX3B2aF9mcmVl KCZtLT5tZCwgcG1hcCwgdmEpOwotCX0gd2hpbGUgKHZhIDwgdmFfbGFzdCk7Ci19Ci0KLXN0 YXRpYyB2b2lkCiBwbWFwX3B2aF9mcmVlKHN0cnVjdCBtZF9wYWdlICpwdmgsIHBtYXBfdCBw bWFwLCB2bV9vZmZzZXRfdCB2YSkKIHsKIAlwdl9lbnRyeV90IHB2OwpAQCAtMjQ3OCwzMSAr MjE4MCwxMSBAQAogc3RhdGljIHZvaWQKIHBtYXBfcmVtb3ZlX2VudHJ5KHBtYXBfdCBwbWFw LCB2bV9wYWdlX3QgbSwgdm1fb2Zmc2V0X3QgdmEpCiB7Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2 aDsKIAogCW10eF9hc3NlcnQoJnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05FRCk7CiAJcG1h cF9wdmhfZnJlZSgmbS0+bWQsIHBtYXAsIHZhKTsKLQlpZiAoVEFJTFFfRU1QVFkoJm0tPm1k LnB2X2xpc3QpKSB7Ci0JCXB2aCA9IHBhX3RvX3B2aChWTV9QQUdFX1RPX1BIWVMobSkpOwot CQlpZiAoVEFJTFFfRU1QVFkoJnB2aC0+cHZfbGlzdCkpCi0JCQl2bV9wYWdlX2FmbGFnX2Ns ZWFyKG0sIFBHQV9XUklURUFCTEUpOwotCX0KLX0KLQotLyoKLSAqIENyZWF0ZSBhIHB2IGVu dHJ5IGZvciBwYWdlIGF0IHBhIGZvcgotICogKHBtYXAsIHZhKS4KLSAqLwotc3RhdGljIHZv aWQKLXBtYXBfaW5zZXJ0X2VudHJ5KHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1f cGFnZV90IG0pCi17Ci0JcHZfZW50cnlfdCBwdjsKLQotCVBNQVBfTE9DS19BU1NFUlQocG1h cCwgTUFfT1dORUQpOwotCW10eF9hc3NlcnQoJnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05F RCk7Ci0JcHYgPSBnZXRfcHZfZW50cnkocG1hcCwgRkFMU0UpOwotCXB2LT5wdl92YSA9IHZh OwotCVRBSUxRX0lOU0VSVF9UQUlMKCZtLT5tZC5wdl9saXN0LCBwdiwgcHZfbGlzdCk7CisJ aWYgKFRBSUxRX0VNUFRZKCZtLT5tZC5wdl9saXN0KSkKKwkJdm1fcGFnZV9hZmxhZ19jbGVh cihtLCBQR0FfV1JJVEVBQkxFKTsKIH0KIAogLyoKQEAgLTI1MjUsMjQzICsyMjA3LDYgQEAK IH0KIAogLyoKLSAqIENyZWF0ZSB0aGUgcHYgZW50cmllcyBmb3IgZWFjaCBvZiB0aGUgcGFn ZXMgd2l0aGluIGEgc3VwZXJwYWdlLgotICovCi1zdGF0aWMgYm9vbGVhbl90Ci1wbWFwX3B2 X2luc2VydF9wZGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2bV9wYWRkcl90IHBh KQotewotCXN0cnVjdCBtZF9wYWdlICpwdmg7Ci0JcHZfZW50cnlfdCBwdjsKLQotCW10eF9h c3NlcnQoJnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05FRCk7Ci0JaWYgKHB2X2VudHJ5X2Nv dW50IDwgcHZfZW50cnlfaGlnaF93YXRlciAmJiAKLQkgICAgKHB2ID0gZ2V0X3B2X2VudHJ5 KHBtYXAsIFRSVUUpKSAhPSBOVUxMKSB7Ci0JCXB2LT5wdl92YSA9IHZhOwotCQlwdmggPSBw YV90b19wdmgocGEpOwotCQlUQUlMUV9JTlNFUlRfVEFJTCgmcHZoLT5wdl9saXN0LCBwdiwg cHZfbGlzdCk7Ci0JCXJldHVybiAoVFJVRSk7Ci0JfSBlbHNlCi0JCXJldHVybiAoRkFMU0Up OwotfQotCi0vKgotICogRmlsbHMgYSBwYWdlIHRhYmxlIHBhZ2Ugd2l0aCBtYXBwaW5ncyB0 byBjb25zZWN1dGl2ZSBwaHlzaWNhbCBwYWdlcy4KLSAqLwotc3RhdGljIHZvaWQKLXBtYXBf ZmlsbF9wdHAocHRfZW50cnlfdCAqZmlyc3RwdGUsIHB0X2VudHJ5X3QgbmV3cHRlKQotewot CXB0X2VudHJ5X3QgKnB0ZTsKLQotCWZvciAocHRlID0gZmlyc3RwdGU7IHB0ZSA8IGZpcnN0 cHRlICsgTlBURVBHOyBwdGUrKykgewotCQkqcHRlID0gbmV3cHRlOwkKLQkJbmV3cHRlICs9 IFBBR0VfU0laRTsKLQl9Ci19Ci0KLS8qCi0gKiBUcmllcyB0byBkZW1vdGUgYSAyLSBvciA0 TUIgcGFnZSBtYXBwaW5nLiAgSWYgZGVtb3Rpb24gZmFpbHMsIHRoZQotICogMi0gb3IgNE1C IHBhZ2UgbWFwcGluZyBpcyBpbnZhbGlkYXRlZC4KLSAqLwotc3RhdGljIGJvb2xlYW5fdAot cG1hcF9kZW1vdGVfcGRlKHBtYXBfdCBwbWFwLCBwZF9lbnRyeV90ICpwZGUsIHZtX29mZnNl dF90IHZhKQotewotCXBkX2VudHJ5X3QgbmV3cGRlLCBvbGRwZGU7Ci0JcHRfZW50cnlfdCAq Zmlyc3RwdGUsIG5ld3B0ZTsKLQl2bV9wYWRkcl90IG1wdGVwYTsKLQl2bV9wYWdlX3QgZnJl ZSwgbXB0ZTsKLQotCVBNQVBfTE9DS19BU1NFUlQocG1hcCwgTUFfT1dORUQpOwotCW9sZHBk ZSA9ICpwZGU7Ci0JS0FTU0VSVCgob2xkcGRlICYgKFBHX1BTIHwgUEdfVikpID09IChQR19Q UyB8IFBHX1YpLAotCSAgICAoInBtYXBfZGVtb3RlX3BkZTogb2xkcGRlIGlzIG1pc3Npbmcg UEdfUFMgYW5kL29yIFBHX1YiKSk7Ci0JbXB0ZSA9IHBtYXBfbG9va3VwX3B0X3BhZ2UocG1h cCwgdmEpOwotCWlmIChtcHRlICE9IE5VTEwpCi0JCXBtYXBfcmVtb3ZlX3B0X3BhZ2UocG1h cCwgbXB0ZSk7Ci0JZWxzZSB7Ci0JCUtBU1NFUlQoKG9sZHBkZSAmIFBHX1cpID09IDAsCi0J CSAgICAoInBtYXBfZGVtb3RlX3BkZTogcGFnZSB0YWJsZSBwYWdlIGZvciBhIHdpcmVkIG1h cHBpbmciCi0JCSAgICAiIGlzIG1pc3NpbmciKSk7Ci0KLQkJLyoKLQkJICogSW52YWxpZGF0 ZSB0aGUgMi0gb3IgNE1CIHBhZ2UgbWFwcGluZyBhbmQgcmV0dXJuCi0JCSAqICJmYWlsdXJl IiBpZiB0aGUgbWFwcGluZyB3YXMgbmV2ZXIgYWNjZXNzZWQgb3IgdGhlCi0JCSAqIGFsbG9j YXRpb24gb2YgdGhlIG5ldyBwYWdlIHRhYmxlIHBhZ2UgZmFpbHMuCi0JCSAqLwotCQlpZiAo KG9sZHBkZSAmIFBHX0EpID09IDAgfHwgKG1wdGUgPSB2bV9wYWdlX2FsbG9jKE5VTEwsCi0J CSAgICB2YSA+PiBQRFJTSElGVCwgVk1fQUxMT0NfTk9PQkogfCBWTV9BTExPQ19OT1JNQUwg fAotCQkgICAgVk1fQUxMT0NfV0lSRUQpKSA9PSBOVUxMKSB7Ci0JCQlmcmVlID0gTlVMTDsK LQkJCXBtYXBfcmVtb3ZlX3BkZShwbWFwLCBwZGUsIHRydW5jXzRtcGFnZSh2YSksICZmcmVl KTsKLQkJCXBtYXBfaW52YWxpZGF0ZV9wYWdlKHBtYXAsIHRydW5jXzRtcGFnZSh2YSkpOwot CQkJcG1hcF9mcmVlX3plcm9fcGFnZXMoZnJlZSk7Ci0JCQlDVFIyKEtUUl9QTUFQLCAicG1h cF9kZW1vdGVfcGRlOiBmYWlsdXJlIGZvciB2YSAlI3giCi0JCQkgICAgIiBpbiBwbWFwICVw IiwgdmEsIHBtYXApOwotCQkJcmV0dXJuIChGQUxTRSk7Ci0JCX0KLQkJaWYgKHZhIDwgVk1f TUFYVVNFUl9BRERSRVNTKQotCQkJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQrKzsK LQl9Ci0JbXB0ZXBhID0gVk1fUEFHRV9UT19QSFlTKG1wdGUpOwotCi0JLyoKLQkgKiBJZiB0 aGUgcGFnZSBtYXBwaW5nIGlzIGluIHRoZSBrZXJuZWwncyBhZGRyZXNzIHNwYWNlLCB0aGVu IHRoZQotCSAqIEtQVG1hcCBjYW4gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIHBhZ2UgdGFibGUg cGFnZS4gIE90aGVyd2lzZSwKLQkgKiB0ZW1wb3JhcmlseSBtYXAgdGhlIHBhZ2UgdGFibGUg cGFnZSAobXB0ZSkgaW50byB0aGUga2VybmVsJ3MKLQkgKiBhZGRyZXNzIHNwYWNlIGF0IGVp dGhlciBQQUREUjEgb3IgUEFERFIyLiAKLQkgKi8KLQlpZiAodmEgPj0gS0VSTkJBU0UpCi0J CWZpcnN0cHRlID0gJktQVG1hcFtpMzg2X2J0b3AodHJ1bmNfNG1wYWdlKHZhKSldOwotCWVs c2UgaWYgKGN1cnRocmVhZC0+dGRfcGlubmVkID4gMCAmJiBtdHhfb3duZWQoJnZtX3BhZ2Vf cXVldWVfbXR4KSkgewotCQlpZiAoKCpQTUFQMSAmIFBHX0ZSQU1FKSAhPSBtcHRlcGEpIHsK LQkJCSpQTUFQMSA9IG1wdGVwYSB8IFBHX1JXIHwgUEdfViB8IFBHX0EgfCBQR19NOwotI2lm ZGVmIFNNUAotCQkJUE1BUDFjcHUgPSBQQ1BVX0dFVChjcHVpZCk7Ci0jZW5kaWYKLQkJCWlu dmxjYWRkcihQQUREUjEpOwotCQkJUE1BUDFjaGFuZ2VkKys7Ci0JCX0gZWxzZQotI2lmZGVm IFNNUAotCQlpZiAoUE1BUDFjcHUgIT0gUENQVV9HRVQoY3B1aWQpKSB7Ci0JCQlQTUFQMWNw dSA9IFBDUFVfR0VUKGNwdWlkKTsKLQkJCWludmxjYWRkcihQQUREUjEpOwotCQkJUE1BUDFj aGFuZ2VkY3B1Kys7Ci0JCX0gZWxzZQotI2VuZGlmCi0JCQlQTUFQMXVuY2hhbmdlZCsrOwot CQlmaXJzdHB0ZSA9IFBBRERSMTsKLQl9IGVsc2UgewotCQltdHhfbG9jaygmUE1BUDJtdXRl eCk7Ci0JCWlmICgoKlBNQVAyICYgUEdfRlJBTUUpICE9IG1wdGVwYSkgewotCQkJKlBNQVAy ID0gbXB0ZXBhIHwgUEdfUlcgfCBQR19WIHwgUEdfQSB8IFBHX007Ci0JCQlwbWFwX2ludmFs aWRhdGVfcGFnZShrZXJuZWxfcG1hcCwgKHZtX29mZnNldF90KVBBRERSMik7Ci0JCX0KLQkJ Zmlyc3RwdGUgPSBQQUREUjI7Ci0JfQotCW5ld3BkZSA9IG1wdGVwYSB8IFBHX00gfCBQR19B IHwgKG9sZHBkZSAmIFBHX1UpIHwgUEdfUlcgfCBQR19WOwotCUtBU1NFUlQoKG9sZHBkZSAm IFBHX0EpICE9IDAsCi0JICAgICgicG1hcF9kZW1vdGVfcGRlOiBvbGRwZGUgaXMgbWlzc2lu ZyBQR19BIikpOwotCUtBU1NFUlQoKG9sZHBkZSAmIChQR19NIHwgUEdfUlcpKSAhPSBQR19S VywKLQkgICAgKCJwbWFwX2RlbW90ZV9wZGU6IG9sZHBkZSBpcyBtaXNzaW5nIFBHX00iKSk7 Ci0JbmV3cHRlID0gb2xkcGRlICYgflBHX1BTOwotCWlmICgobmV3cHRlICYgUEdfUERFX1BB VCkgIT0gMCkKLQkJbmV3cHRlIF49IFBHX1BERV9QQVQgfCBQR19QVEVfUEFUOwotCi0JLyoK LQkgKiBJZiB0aGUgcGFnZSB0YWJsZSBwYWdlIGlzIG5ldywgaW5pdGlhbGl6ZSBpdC4KLQkg Ki8KLQlpZiAobXB0ZS0+d2lyZV9jb3VudCA9PSAxKSB7Ci0JCW1wdGUtPndpcmVfY291bnQg PSBOUFRFUEc7Ci0JCXBtYXBfZmlsbF9wdHAoZmlyc3RwdGUsIG5ld3B0ZSk7Ci0JfQotCUtB U1NFUlQoKCpmaXJzdHB0ZSAmIFBHX0ZSQU1FKSA9PSAobmV3cHRlICYgUEdfRlJBTUUpLAot CSAgICAoInBtYXBfZGVtb3RlX3BkZTogZmlyc3RwdGUgYW5kIG5ld3B0ZSBtYXAgZGlmZmVy ZW50IHBoeXNpY2FsIgotCSAgICAiIGFkZHJlc3NlcyIpKTsKLQotCS8qCi0JICogSWYgdGhl IG1hcHBpbmcgaGFzIGNoYW5nZWQgYXR0cmlidXRlcywgdXBkYXRlIHRoZSBwYWdlIHRhYmxl Ci0JICogZW50cmllcy4KLQkgKi8gCi0JaWYgKCgqZmlyc3RwdGUgJiBQR19QVEVfUFJPTU9U RSkgIT0gKG5ld3B0ZSAmIFBHX1BURV9QUk9NT1RFKSkKLQkJcG1hcF9maWxsX3B0cChmaXJz dHB0ZSwgbmV3cHRlKTsKLQkKLQkvKgotCSAqIERlbW90ZSB0aGUgbWFwcGluZy4gIFRoaXMg cG1hcCBpcyBsb2NrZWQuICBUaGUgb2xkIFBERSBoYXMKLQkgKiBQR19BIHNldC4gIElmIHRo ZSBvbGQgUERFIGhhcyBQR19SVyBzZXQsIGl0IGFsc28gaGFzIFBHX00KLQkgKiBzZXQuICBU aHVzLCB0aGVyZSBpcyBubyBkYW5nZXIgb2YgYSByYWNlIHdpdGggYW5vdGhlcgotCSAqIHBy b2Nlc3NvciBjaGFuZ2luZyB0aGUgc2V0dGluZyBvZiBQR19BIGFuZC9vciBQR19NIGJldHdl ZW4KLQkgKiB0aGUgcmVhZCBhYm92ZSBhbmQgdGhlIHN0b3JlIGJlbG93LiAKLQkgKi8KLQlp ZiAod29ya2Fyb3VuZF9lcnJhdHVtMzgzKQotCQlwbWFwX3VwZGF0ZV9wZGUocG1hcCwgdmEs IHBkZSwgbmV3cGRlKTsKLQllbHNlIGlmIChwbWFwID09IGtlcm5lbF9wbWFwKQotCQlwbWFw X2tlbnRlcl9wZGUodmEsIG5ld3BkZSk7Ci0JZWxzZQotCQlwZGVfc3RvcmUocGRlLCBuZXdw ZGUpOwkKLQlpZiAoZmlyc3RwdGUgPT0gUEFERFIyKQotCQltdHhfdW5sb2NrKCZQTUFQMm11 dGV4KTsKLQotCS8qCi0JICogSW52YWxpZGF0ZSB0aGUgcmVjdXJzaXZlIG1hcHBpbmcgb2Yg dGhlIHBhZ2UgdGFibGUgcGFnZS4KLQkgKi8KLQlwbWFwX2ludmFsaWRhdGVfcGFnZShwbWFw LCAodm1fb2Zmc2V0X3QpdnRvcHRlKHZhKSk7Ci0KLQkvKgotCSAqIERlbW90ZSB0aGUgcHYg ZW50cnkuICBUaGlzIGRlcGVuZHMgb24gdGhlIGVhcmxpZXIgZGVtb3Rpb24KLQkgKiBvZiB0 aGUgbWFwcGluZy4gIFNwZWNpZmljYWxseSwgdGhlIChyZSljcmVhdGlvbiBvZiBhIHBlci0K LQkgKiBwYWdlIHB2IGVudHJ5IG1pZ2h0IHRyaWdnZXIgdGhlIGV4ZWN1dGlvbiBvZiBwbWFw X2NvbGxlY3QoKSwKLQkgKiB3aGljaCBtaWdodCByZWNsYWltIGEgbmV3bHkgKHJlKWNyZWF0 ZWQgcGVyLXBhZ2UgcHYgZW50cnkKLQkgKiBhbmQgZGVzdHJveSB0aGUgYXNzb2NpYXRlZCBt YXBwaW5nLiAgSW4gb3JkZXIgdG8gZGVzdHJveQotCSAqIHRoZSBtYXBwaW5nLCB0aGUgUERF IG11c3QgaGF2ZSBhbHJlYWR5IGNoYW5nZWQgZnJvbSBtYXBwaW5nCi0JICogdGhlIDJtcGFn ZSB0byByZWZlcmVuY2luZyB0aGUgcGFnZSB0YWJsZSBwYWdlLgotCSAqLwotCWlmICgob2xk cGRlICYgUEdfTUFOQUdFRCkgIT0gMCkKLQkJcG1hcF9wdl9kZW1vdGVfcGRlKHBtYXAsIHZh LCBvbGRwZGUgJiBQR19QU19GUkFNRSk7Ci0KLQlwbWFwX3BkZV9kZW1vdGlvbnMrKzsKLQlD VFIyKEtUUl9QTUFQLCAicG1hcF9kZW1vdGVfcGRlOiBzdWNjZXNzIGZvciB2YSAlI3giCi0J ICAgICIgaW4gcG1hcCAlcCIsIHZhLCBwbWFwKTsKLQlyZXR1cm4gKFRSVUUpOwotfQotCi0v KgotICogcG1hcF9yZW1vdmVfcGRlOiBkbyB0aGUgdGhpbmdzIHRvIHVubWFwIGEgc3VwZXJw YWdlIGluIGEgcHJvY2VzcwotICovCi1zdGF0aWMgdm9pZAotcG1hcF9yZW1vdmVfcGRlKHBt YXBfdCBwbWFwLCBwZF9lbnRyeV90ICpwZHEsIHZtX29mZnNldF90IHN2YSwKLSAgICB2bV9w YWdlX3QgKmZyZWUpCi17Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2aDsKLQlwZF9lbnRyeV90IG9s ZHBkZTsKLQl2bV9vZmZzZXRfdCBldmEsIHZhOwotCXZtX3BhZ2VfdCBtLCBtcHRlOwotCi0J UE1BUF9MT0NLX0FTU0VSVChwbWFwLCBNQV9PV05FRCk7Ci0JS0FTU0VSVCgoc3ZhICYgUERS TUFTSykgPT0gMCwKLQkgICAgKCJwbWFwX3JlbW92ZV9wZGU6IHN2YSBpcyBub3QgNG1wYWdl IGFsaWduZWQiKSk7Ci0Jb2xkcGRlID0gcHRlX2xvYWRfY2xlYXIocGRxKTsKLQlpZiAob2xk cGRlICYgUEdfVykKLQkJcG1hcC0+cG1fc3RhdHMud2lyZWRfY291bnQgLT0gTkJQRFIgLyBQ QUdFX1NJWkU7Ci0KLQkvKgotCSAqIE1hY2hpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbnZs cGcsIGFsc28gZG9uJ3Qgc3VwcG9ydAotCSAqIFBHX0cuCi0JICovCi0JaWYgKG9sZHBkZSAm IFBHX0cpCi0JCXBtYXBfaW52YWxpZGF0ZV9wYWdlKGtlcm5lbF9wbWFwLCBzdmEpOwotCXBt YXAtPnBtX3N0YXRzLnJlc2lkZW50X2NvdW50IC09IE5CUERSIC8gUEFHRV9TSVpFOwotCWlm IChvbGRwZGUgJiBQR19NQU5BR0VEKSB7Ci0JCXB2aCA9IHBhX3RvX3B2aChvbGRwZGUgJiBQ R19QU19GUkFNRSk7Ci0JCXBtYXBfcHZoX2ZyZWUocHZoLCBwbWFwLCBzdmEpOwotCQlldmEg PSBzdmEgKyBOQlBEUjsKLQkJZm9yICh2YSA9IHN2YSwgbSA9IFBIWVNfVE9fVk1fUEFHRShv bGRwZGUgJiBQR19QU19GUkFNRSk7Ci0JCSAgICB2YSA8IGV2YTsgdmEgKz0gUEFHRV9TSVpF LCBtKyspIHsKLQkJCWlmICgob2xkcGRlICYgKFBHX00gfCBQR19SVykpID09IChQR19NIHwg UEdfUlcpKQotCQkJCXZtX3BhZ2VfZGlydHkobSk7Ci0JCQlpZiAob2xkcGRlICYgUEdfQSkK LQkJCQl2bV9wYWdlX2FmbGFnX3NldChtLCBQR0FfUkVGRVJFTkNFRCk7Ci0JCQlpZiAoVEFJ TFFfRU1QVFkoJm0tPm1kLnB2X2xpc3QpICYmCi0JCQkgICAgVEFJTFFfRU1QVFkoJnB2aC0+ cHZfbGlzdCkpCi0JCQkJdm1fcGFnZV9hZmxhZ19jbGVhcihtLCBQR0FfV1JJVEVBQkxFKTsK LQkJfQotCX0KLQlpZiAocG1hcCA9PSBrZXJuZWxfcG1hcCkgewotCQlpZiAoIXBtYXBfZGVt b3RlX3BkZShwbWFwLCBwZHEsIHN2YSkpCi0JCQlwYW5pYygicG1hcF9yZW1vdmVfcGRlOiBm YWlsZWQgZGVtb3Rpb24iKTsKLQl9IGVsc2UgewotCQltcHRlID0gcG1hcF9sb29rdXBfcHRf cGFnZShwbWFwLCBzdmEpOwotCQlpZiAobXB0ZSAhPSBOVUxMKSB7Ci0JCQlwbWFwX3JlbW92 ZV9wdF9wYWdlKHBtYXAsIG1wdGUpOwotCQkJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291 bnQtLTsKLQkJCUtBU1NFUlQobXB0ZS0+d2lyZV9jb3VudCA9PSBOUFRFUEcsCi0JCQkgICAg KCJwbWFwX3JlbW92ZV9wZGU6IHB0ZSBwYWdlIHdpcmUgY291bnQgZXJyb3IiKSk7Ci0JCQlt cHRlLT53aXJlX2NvdW50ID0gMDsKLQkJCXBtYXBfYWRkX2RlbGF5ZWRfZnJlZV9saXN0KG1w dGUsIGZyZWUsIEZBTFNFKTsKLQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmNudC52X3dpcmVf Y291bnQsIDEpOwotCQl9Ci0JfQotfQotCi0vKgogICogcG1hcF9yZW1vdmVfcHRlOiBkbyB0 aGUgdGhpbmdzIHRvIHVubWFwIGEgcGFnZSBpbiBhIHByb2Nlc3MKICAqLwogc3RhdGljIGlu dApAQCAtMjc3MCw5ICsyMjE1LDEzIEBACiAJcHRfZW50cnlfdCBvbGRwdGU7CiAJdm1fcGFn ZV90IG07CiAKKwlDVFIzKEtUUl9QTUFQLCAicG1hcF9yZW1vdmVfcHRlOiBwbWFwPSVwICpw dHE9MHgleCB2YT0weCV4IiwKKwkgICAgcG1hcCwgKHVfbG9uZykqcHRxLCB2YSk7CisJCiAJ bXR4X2Fzc2VydCgmdm1fcGFnZV9xdWV1ZV9tdHgsIE1BX09XTkVEKTsKIAlQTUFQX0xPQ0tf QVNTRVJUKHBtYXAsIE1BX09XTkVEKTsKLQlvbGRwdGUgPSBwdGVfbG9hZF9jbGVhcihwdHEp OworCW9sZHB0ZSA9ICpwdHE7CisJUFRfU0VUX1ZBX01BKHB0cSwgMCwgVFJVRSk7CiAJaWYg KG9sZHB0ZSAmIFBHX1cpCiAJCXBtYXAtPnBtX3N0YXRzLndpcmVkX2NvdW50IC09IDE7CiAJ LyoKQEAgLTI3ODMsNyArMjIzMiw3IEBACiAJCXBtYXBfaW52YWxpZGF0ZV9wYWdlKGtlcm5l bF9wbWFwLCB2YSk7CiAJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQgLT0gMTsKIAlp ZiAob2xkcHRlICYgUEdfTUFOQUdFRCkgewotCQltID0gUEhZU19UT19WTV9QQUdFKG9sZHB0 ZSAmIFBHX0ZSQU1FKTsKKwkJbSA9IFBIWVNfVE9fVk1fUEFHRSh4cG1hcF9tdG9wKG9sZHB0 ZSkgJiBQR19GUkFNRSk7CiAJCWlmICgob2xkcHRlICYgKFBHX00gfCBQR19SVykpID09IChQ R19NIHwgUEdfUlcpKQogCQkJdm1fcGFnZV9kaXJ0eShtKTsKIAkJaWYgKG9sZHB0ZSAmIFBH X0EpCkBAIC0yODAxLDEzICsyMjUwLDE5IEBACiB7CiAJcHRfZW50cnlfdCAqcHRlOwogCisJ Q1RSMihLVFJfUE1BUCwgInBtYXBfcmVtb3ZlX3BhZ2U6IHBtYXA9JXAgdmE9MHgleCIsCisJ ICAgIHBtYXAsIHZhKTsKKwkKIAltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX210eCwgTUFf T1dORUQpOwogCUtBU1NFUlQoY3VydGhyZWFkLT50ZF9waW5uZWQgPiAwLCAoImN1cnRocmVh ZCBub3QgcGlubmVkIikpOwogCVBNQVBfTE9DS19BU1NFUlQocG1hcCwgTUFfT1dORUQpOwot CWlmICgocHRlID0gcG1hcF9wdGVfcXVpY2socG1hcCwgdmEpKSA9PSBOVUxMIHx8ICpwdGUg PT0gMCkKKwlpZiAoKHB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHZhKSkgPT0gTlVMTCB8 fCAoKnB0ZSAmIFBHX1YpID09IDApCiAJCXJldHVybjsKIAlwbWFwX3JlbW92ZV9wdGUocG1h cCwgcHRlLCB2YSwgZnJlZSk7CiAJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcCwgdmEpOwor CWlmICgqUE1BUDEpCisJCVBUX1NFVF9NQShQQUREUjEsIDApOworCiB9CiAKIC8qCkBAIC0y ODI1LDYgKzIyODAsOSBAQAogCXZtX3BhZ2VfdCBmcmVlID0gTlVMTDsKIAlpbnQgYW55dmFs aWQ7CiAKKwlDVFIzKEtUUl9QTUFQLCAicG1hcF9yZW1vdmU6IHBtYXA9JXAgc3ZhPTB4JXgg ZXZhPTB4JXgiLAorCSAgICBwbWFwLCBzdmEsIGV2YSk7CisKIAkvKgogCSAqIFBlcmZvcm0g YW4gdW5zeW5jaHJvbml6ZWQgcmVhZC4gIFRoaXMgaXMsIGhvd2V2ZXIsIHNhZmUuCiAJICov CkBAIC0yODU1LDggKzIzMTMsNiBAQAogCQkgKiBDYWxjdWxhdGUgaW5kZXggZm9yIG5leHQg cGFnZSB0YWJsZS4KIAkJICovCiAJCXBkbnh0ID0gKHN2YSArIE5CUERSKSAmIH5QRFJNQVNL OwotCQlpZiAocGRueHQgPCBzdmEpCi0JCQlwZG54dCA9IGV2YTsKIAkJaWYgKHBtYXAtPnBt X3N0YXRzLnJlc2lkZW50X2NvdW50ID09IDApCiAJCQlicmVhazsKIApAQCAtMjg3NCwyNSAr MjMzMCwxMCBAQAogCQkgKiBDaGVjayBmb3IgbGFyZ2UgcGFnZS4KIAkJICovCiAJCWlmICgo cHRwYWRkciAmIFBHX1BTKSAhPSAwKSB7Ci0JCQkvKgotCQkJICogQXJlIHdlIHJlbW92aW5n IHRoZSBlbnRpcmUgbGFyZ2UgcGFnZT8gIElmIG5vdCwKLQkJCSAqIGRlbW90ZSB0aGUgbWFw cGluZyBhbmQgZmFsbCB0aHJvdWdoLgotCQkJICovCi0JCQlpZiAoc3ZhICsgTkJQRFIgPT0g cGRueHQgJiYgZXZhID49IHBkbnh0KSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGUgVExCIGVudHJ5 IGZvciBhIFBHX0cgbWFwcGluZyBpcwotCQkJCSAqIGludmFsaWRhdGVkIGJ5IHBtYXBfcmVt b3ZlX3BkZSgpLgotCQkJCSAqLwotCQkJCWlmICgocHRwYWRkciAmIFBHX0cpID09IDApCi0J CQkJCWFueXZhbGlkID0gMTsKLQkJCQlwbWFwX3JlbW92ZV9wZGUocG1hcCwKLQkJCQkgICAg JnBtYXAtPnBtX3BkaXJbcGRpcmluZGV4XSwgc3ZhLCAmZnJlZSk7Ci0JCQkJY29udGludWU7 Ci0JCQl9IGVsc2UgaWYgKCFwbWFwX2RlbW90ZV9wZGUocG1hcCwKLQkJCSAgICAmcG1hcC0+ cG1fcGRpcltwZGlyaW5kZXhdLCBzdmEpKSB7Ci0JCQkJLyogVGhlIGxhcmdlIHBhZ2UgbWFw cGluZyB3YXMgZGVzdHJveWVkLiAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQorCQkJUERfQ0xF QVJfVkEocG1hcCwgcGRpcmluZGV4LCBUUlVFKTsKKwkJCXBtYXAtPnBtX3N0YXRzLnJlc2lk ZW50X2NvdW50IC09IE5CUERSIC8gUEFHRV9TSVpFOworCQkJYW55dmFsaWQgPSAxOworCQkJ Y29udGludWU7CiAJCX0KIAogCQkvKgpAQCAtMjkwNSw3ICsyMzQ2LDcgQEAKIAogCQlmb3Ig KHB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHN2YSk7IHN2YSAhPSBwZG54dDsgcHRlKyss CiAJCSAgICBzdmEgKz0gUEFHRV9TSVpFKSB7Ci0JCQlpZiAoKnB0ZSA9PSAwKQorCQkJaWYg KCgqcHRlICYgUEdfVikgPT0gMCkKIAkJCQljb250aW51ZTsKIAogCQkJLyoKQEAgLTI5MTgs MTAgKzIzNTksMTMgQEAKIAkJCQlicmVhazsKIAkJfQogCX0KKwlQVF9VUERBVEVTX0ZMVVNI KCk7CisJaWYgKCpQTUFQMSkKKwkJUFRfU0VUX1ZBX01BKFBNQVAxLCAwLCBUUlVFKTsKIG91 dDoKLQlzY2hlZF91bnBpbigpOwogCWlmIChhbnl2YWxpZCkKIAkJcG1hcF9pbnZhbGlkYXRl X2FsbChwbWFwKTsKKwlzY2hlZF91bnBpbigpOwogCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygp OwogCVBNQVBfVU5MT0NLKHBtYXApOwogCXBtYXBfZnJlZV96ZXJvX3BhZ2VzKGZyZWUpOwpA QCAtMjk0MywxMiArMjM4Nyw5IEBACiB2b2lkCiBwbWFwX3JlbW92ZV9hbGwodm1fcGFnZV90 IG0pCiB7Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2aDsKIAlwdl9lbnRyeV90IHB2OwogCXBtYXBf dCBwbWFwOwogCXB0X2VudHJ5X3QgKnB0ZSwgdHB0ZTsKLQlwZF9lbnRyeV90ICpwZGU7Ci0J dm1fb2Zmc2V0X3QgdmE7CiAJdm1fcGFnZV90IGZyZWU7CiAKIAlLQVNTRVJUKChtLT5vZmxh Z3MgJiBWUE9fVU5NQU5BR0VEKSA9PSAwLApAQCAtMjk1NiwyNCArMjM5NywxMyBAQAogCWZy ZWUgPSBOVUxMOwogCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlzY2hlZF9waW4oKTsKLQlw dmggPSBwYV90b19wdmgoVk1fUEFHRV9UT19QSFlTKG0pKTsKLQl3aGlsZSAoKHB2ID0gVEFJ TFFfRklSU1QoJnB2aC0+cHZfbGlzdCkpICE9IE5VTEwpIHsKLQkJdmEgPSBwdi0+cHZfdmE7 Ci0JCXBtYXAgPSBQVl9QTUFQKHB2KTsKLQkJUE1BUF9MT0NLKHBtYXApOwotCQlwZGUgPSBw bWFwX3BkZShwbWFwLCB2YSk7Ci0JCSh2b2lkKXBtYXBfZGVtb3RlX3BkZShwbWFwLCBwZGUs IHZhKTsKLQkJUE1BUF9VTkxPQ0socG1hcCk7Ci0JfQogCXdoaWxlICgocHYgPSBUQUlMUV9G SVJTVCgmbS0+bWQucHZfbGlzdCkpICE9IE5VTEwpIHsKIAkJcG1hcCA9IFBWX1BNQVAocHYp OwogCQlQTUFQX0xPQ0socG1hcCk7CiAJCXBtYXAtPnBtX3N0YXRzLnJlc2lkZW50X2NvdW50 LS07Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAsIHB2LT5wdl92YSk7Ci0JCUtBU1NFUlQoKCpw ZGUgJiBQR19QUykgPT0gMCwgKCJwbWFwX3JlbW92ZV9hbGw6IGZvdW5kIgotCQkgICAgIiBh IDRtcGFnZSBpbiBwYWdlICVwJ3MgcHYgbGlzdCIsIG0pKTsKIAkJcHRlID0gcG1hcF9wdGVf cXVpY2socG1hcCwgcHYtPnB2X3ZhKTsKLQkJdHB0ZSA9IHB0ZV9sb2FkX2NsZWFyKHB0ZSk7 CisJCXRwdGUgPSAqcHRlOworCQlQVF9TRVRfVkFfTUEocHRlLCAwLCBUUlVFKTsKIAkJaWYg KHRwdGUgJiBQR19XKQogCQkJcG1hcC0+cG1fc3RhdHMud2lyZWRfY291bnQtLTsKIAkJaWYg KHRwdGUgJiBQR19BKQpAQCAtMjk5MSw1MyArMjQyMSwxNSBAQAogCQlQTUFQX1VOTE9DSyhw bWFwKTsKIAl9CiAJdm1fcGFnZV9hZmxhZ19jbGVhcihtLCBQR0FfV1JJVEVBQkxFKTsKKwlQ VF9VUERBVEVTX0ZMVVNIKCk7CisJaWYgKCpQTUFQMSkKKwkJUFRfU0VUX01BKFBBRERSMSwg MCk7CiAJc2NoZWRfdW5waW4oKTsKIAl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKIAlwbWFw X2ZyZWVfemVyb19wYWdlcyhmcmVlKTsKIH0KIAogLyoKLSAqIHBtYXBfcHJvdGVjdF9wZGU6 IGRvIHRoZSB0aGluZ3MgdG8gcHJvdGVjdCBhIDRtcGFnZSBpbiBhIHByb2Nlc3MKLSAqLwot c3RhdGljIGJvb2xlYW5fdAotcG1hcF9wcm90ZWN0X3BkZShwbWFwX3QgcG1hcCwgcGRfZW50 cnlfdCAqcGRlLCB2bV9vZmZzZXRfdCBzdmEsIHZtX3Byb3RfdCBwcm90KQotewotCXBkX2Vu dHJ5X3QgbmV3cGRlLCBvbGRwZGU7Ci0Jdm1fb2Zmc2V0X3QgZXZhLCB2YTsKLQl2bV9wYWdl X3QgbTsKLQlib29sZWFuX3QgYW55Y2hhbmdlZDsKLQotCVBNQVBfTE9DS19BU1NFUlQocG1h cCwgTUFfT1dORUQpOwotCUtBU1NFUlQoKHN2YSAmIFBEUk1BU0spID09IDAsCi0JICAgICgi cG1hcF9wcm90ZWN0X3BkZTogc3ZhIGlzIG5vdCA0bXBhZ2UgYWxpZ25lZCIpKTsKLQlhbnlj aGFuZ2VkID0gRkFMU0U7Ci1yZXRyeToKLQlvbGRwZGUgPSBuZXdwZGUgPSAqcGRlOwotCWlm IChvbGRwZGUgJiBQR19NQU5BR0VEKSB7Ci0JCWV2YSA9IHN2YSArIE5CUERSOwotCQlmb3Ig KHZhID0gc3ZhLCBtID0gUEhZU19UT19WTV9QQUdFKG9sZHBkZSAmIFBHX1BTX0ZSQU1FKTsK LQkJICAgIHZhIDwgZXZhOyB2YSArPSBQQUdFX1NJWkUsIG0rKykKLQkJCWlmICgob2xkcGRl ICYgKFBHX00gfCBQR19SVykpID09IChQR19NIHwgUEdfUlcpKQotCQkJCXZtX3BhZ2VfZGly dHkobSk7Ci0JfQotCWlmICgocHJvdCAmIFZNX1BST1RfV1JJVEUpID09IDApCi0JCW5ld3Bk ZSAmPSB+KFBHX1JXIHwgUEdfTSk7Ci0jaWZkZWYgUEFFCi0JaWYgKChwcm90ICYgVk1fUFJP VF9FWEVDVVRFKSA9PSAwKQotCQluZXdwZGUgfD0gcGdfbng7Ci0jZW5kaWYKLQlpZiAobmV3 cGRlICE9IG9sZHBkZSkgewotCQlpZiAoIXBkZV9jbXBzZXQocGRlLCBvbGRwZGUsIG5ld3Bk ZSkpCi0JCQlnb3RvIHJldHJ5OwotCQlpZiAob2xkcGRlICYgUEdfRykKLQkJCXBtYXBfaW52 YWxpZGF0ZV9wYWdlKHBtYXAsIHN2YSk7Ci0JCWVsc2UKLQkJCWFueWNoYW5nZWQgPSBUUlVF OwotCX0KLQlyZXR1cm4gKGFueWNoYW5nZWQpOwotfQotCi0vKgogICoJU2V0IHRoZSBwaHlz aWNhbCBwcm90ZWN0aW9uIG9uIHRoZQogICoJc3BlY2lmaWVkIHJhbmdlIG9mIHRoaXMgbWFw IGFzIHJlcXVlc3RlZC4KICAqLwpAQCAtMzA0OSw2ICsyNDQxLDkgQEAKIAlwdF9lbnRyeV90 ICpwdGU7CiAJaW50IGFueWNoYW5nZWQ7CiAKKwlDVFI0KEtUUl9QTUFQLCAicG1hcF9wcm90 ZWN0OiBwbWFwPSVwIHN2YT0weCV4IGV2YT0weCV4IHByb3Q9MHgleCIsCisJICAgIHBtYXAs IHN2YSwgZXZhLCBwcm90KTsKKwkKIAlpZiAoKHByb3QgJiBWTV9QUk9UX1JFQUQpID09IFZN X1BST1RfTk9ORSkgewogCQlwbWFwX3JlbW92ZShwbWFwLCBzdmEsIGV2YSk7CiAJCXJldHVy bjsKQEAgLTMwNzMsOCArMjQ2OCw2IEBACiAJCXVfaW50IHBkaXJpbmRleDsKIAogCQlwZG54 dCA9IChzdmEgKyBOQlBEUikgJiB+UERSTUFTSzsKLQkJaWYgKHBkbnh0IDwgc3ZhKQotCQkJ cGRueHQgPSBldmE7CiAKIAkJcGRpcmluZGV4ID0gc3ZhID4+IFBEUlNISUZUOwogCQlwdHBh ZGRyID0gcG1hcC0+cG1fcGRpcltwZGlyaW5kZXhdOwpAQCAtMzA5MCwyNCArMjQ4MywxNCBA QAogCQkgKiBDaGVjayBmb3IgbGFyZ2UgcGFnZS4KIAkJICovCiAJCWlmICgocHRwYWRkciAm IFBHX1BTKSAhPSAwKSB7Ci0JCQkvKgotCQkJICogQXJlIHdlIHByb3RlY3RpbmcgdGhlIGVu dGlyZSBsYXJnZSBwYWdlPyAgSWYgbm90LAotCQkJICogZGVtb3RlIHRoZSBtYXBwaW5nIGFu ZCBmYWxsIHRocm91Z2guCi0JCQkgKi8KLQkJCWlmIChzdmEgKyBOQlBEUiA9PSBwZG54dCAm JiBldmEgPj0gcGRueHQpIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBUTEIgZW50cnkgZm9yIGEg UEdfRyBtYXBwaW5nIGlzCi0JCQkJICogaW52YWxpZGF0ZWQgYnkgcG1hcF9wcm90ZWN0X3Bk ZSgpLgotCQkJCSAqLwotCQkJCWlmIChwbWFwX3Byb3RlY3RfcGRlKHBtYXAsCi0JCQkJICAg ICZwbWFwLT5wbV9wZGlyW3BkaXJpbmRleF0sIHN2YSwgcHJvdCkpCi0JCQkJCWFueWNoYW5n ZWQgPSAxOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmICghcG1hcF9kZW1vdGVfcGRl KHBtYXAsCi0JCQkgICAgJnBtYXAtPnBtX3BkaXJbcGRpcmluZGV4XSwgc3ZhKSkgewotCQkJ CS8qIFRoZSBsYXJnZSBwYWdlIG1hcHBpbmcgd2FzIGRlc3Ryb3llZC4gKi8KLQkJCQljb250 aW51ZTsKLQkJCX0KKwkJCWlmICgocHJvdCAmIFZNX1BST1RfV1JJVEUpID09IDApCisJCQkJ cG1hcC0+cG1fcGRpcltwZGlyaW5kZXhdICY9IH4oUEdfTXxQR19SVyk7CisjaWZkZWYgUEFF CisJCQlpZiAoKHByb3QgJiBWTV9QUk9UX0VYRUNVVEUpID09IDApCisJCQkJcG1hcC0+cG1f cGRpcltwZGlyaW5kZXhdIHw9IHBnX254OworI2VuZGlmCisJCQlhbnljaGFuZ2VkID0gMTsK KwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKHBkbnh0ID4gZXZhKQpAQCAtMzEzMCw3ICsy NTEzLDggQEAKIAkJCWlmICgocHJvdCAmIFZNX1BST1RfV1JJVEUpID09IDApIHsKIAkJCQlp ZiAoKHBiaXRzICYgKFBHX01BTkFHRUQgfCBQR19NIHwgUEdfUlcpKSA9PQogCQkJCSAgICAo UEdfTUFOQUdFRCB8IFBHX00gfCBQR19SVykpIHsKLQkJCQkJbSA9IFBIWVNfVE9fVk1fUEFH RShwYml0cyAmIFBHX0ZSQU1FKTsKKwkJCQkJbSA9IFBIWVNfVE9fVk1fUEFHRSh4cG1hcF9t dG9wKHBiaXRzKSAmCisJCQkJCSAgICBQR19GUkFNRSk7CiAJCQkJCXZtX3BhZ2VfZGlydHko bSk7CiAJCQkJfQogCQkJCXBiaXRzICY9IH4oUEdfUlcgfCBQR19NKTsKQEAgLTMxNDEsMTQg KzI1MjUsMTAgQEAKICNlbmRpZgogCiAJCQlpZiAocGJpdHMgIT0gb2JpdHMpIHsKLSNpZmRl ZiBQQUUKLQkJCQlpZiAoIWF0b21pY19jbXBzZXRfNjQocHRlLCBvYml0cywgcGJpdHMpKQor CQkJCW9iaXRzID0gKnB0ZTsKKwkJCQlQVF9TRVRfVkFfTUEocHRlLCBwYml0cywgVFJVRSk7 CisJCQkJaWYgKCpwdGUgIT0gcGJpdHMpCiAJCQkJCWdvdG8gcmV0cnk7Ci0jZWxzZQotCQkJ CWlmICghYXRvbWljX2NtcHNldF9pbnQoKHVfaW50ICopcHRlLCBvYml0cywKLQkJCQkgICAg cGJpdHMpKQotCQkJCQlnb3RvIHJldHJ5OwotI2VuZGlmCiAJCQkJaWYgKG9iaXRzICYgUEdf RykKIAkJCQkJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcCwgc3ZhKTsKIAkJCQllbHNlCkBA IC0zMTU2LDE0NSArMjUzNiwxNyBAQAogCQkJfQogCQl9CiAJfQotCXNjaGVkX3VucGluKCk7 CisJUFRfVVBEQVRFU19GTFVTSCgpOworCWlmICgqUE1BUDEpCisJCVBUX1NFVF9WQV9NQShQ TUFQMSwgMCwgVFJVRSk7CiAJaWYgKGFueWNoYW5nZWQpCiAJCXBtYXBfaW52YWxpZGF0ZV9h bGwocG1hcCk7CisJc2NoZWRfdW5waW4oKTsKIAl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsK IAlQTUFQX1VOTE9DSyhwbWFwKTsKIH0KIAogLyoKLSAqIFRyaWVzIHRvIHByb21vdGUgdGhl IDUxMiBvciAxMDI0LCBjb250aWd1b3VzIDRLQiBwYWdlIG1hcHBpbmdzIHRoYXQgYXJlCi0g KiB3aXRoaW4gYSBzaW5nbGUgcGFnZSB0YWJsZSBwYWdlIChQVFApIHRvIGEgc2luZ2xlIDIt IG9yIDRNQiBwYWdlIG1hcHBpbmcuCi0gKiBGb3IgcHJvbW90aW9uIHRvIG9jY3VyLCB0d28g Y29uZGl0aW9ucyBtdXN0IGJlIG1ldDogKDEpIHRoZSA0S0IgcGFnZQotICogbWFwcGluZ3Mg bXVzdCBtYXAgYWxpZ25lZCwgY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkgYW5kICgyKSB0 aGUgNEtCIHBhZ2UKLSAqIG1hcHBpbmdzIG11c3QgaGF2ZSBpZGVudGljYWwgY2hhcmFjdGVy aXN0aWNzLgotICoKLSAqIE1hbmFnZWQgKFBHX01BTkFHRUQpIG1hcHBpbmdzIHdpdGhpbiB0 aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UgYXJlIG5vdAotICogcHJvbW90ZWQuICBUaGUgcmVh c29uIGlzIHRoYXQga2VybmVsIFBERXMgYXJlIHJlcGxpY2F0ZWQgaW4gZWFjaCBwbWFwIGJ1 dAotICogcG1hcF9jbGVhcl9wdGVzKCkgYW5kIHBtYXBfdHNfcmVmZXJlbmNlZCgpIG9ubHkg cmVhZCB0aGUgUERFIGZyb20gdGhlIGtlcm5lbAotICogcG1hcC4KLSAqLwotc3RhdGljIHZv aWQKLXBtYXBfcHJvbW90ZV9wZGUocG1hcF90IHBtYXAsIHBkX2VudHJ5X3QgKnBkZSwgdm1f b2Zmc2V0X3QgdmEpCi17Ci0JcGRfZW50cnlfdCBuZXdwZGU7Ci0JcHRfZW50cnlfdCAqZmly c3RwdGUsIG9sZHB0ZSwgcGEsICpwdGU7Ci0Jdm1fb2Zmc2V0X3Qgb2xkcHRldmE7Ci0Jdm1f cGFnZV90IG1wdGU7Ci0KLQlQTUFQX0xPQ0tfQVNTRVJUKHBtYXAsIE1BX09XTkVEKTsKLQot CS8qCi0JICogRXhhbWluZSB0aGUgZmlyc3QgUFRFIGluIHRoZSBzcGVjaWZpZWQgUFRQLiAg QWJvcnQgaWYgdGhpcyBQVEUgaXMKLQkgKiBlaXRoZXIgaW52YWxpZCwgdW51c2VkLCBvciBk b2VzIG5vdCBtYXAgdGhlIGZpcnN0IDRLQiBwaHlzaWNhbCBwYWdlCi0JICogd2l0aGluIGEg Mi0gb3IgNE1CIHBhZ2UuCi0JICovCi0JZmlyc3RwdGUgPSBwbWFwX3B0ZV9xdWljayhwbWFw LCB0cnVuY180bXBhZ2UodmEpKTsKLXNldHBkZToKLQluZXdwZGUgPSAqZmlyc3RwdGU7Ci0J aWYgKChuZXdwZGUgJiAoKFBHX0ZSQU1FICYgUERSTUFTSykgfCBQR19BIHwgUEdfVikpICE9 IChQR19BIHwgUEdfVikpIHsKLQkJcG1hcF9wZGVfcF9mYWlsdXJlcysrOwotCQlDVFIyKEtU Ul9QTUFQLCAicG1hcF9wcm9tb3RlX3BkZTogZmFpbHVyZSBmb3IgdmEgJSN4IgotCQkgICAg IiBpbiBwbWFwICVwIiwgdmEsIHBtYXApOwotCQlyZXR1cm47Ci0JfQotCWlmICgoKmZpcnN0 cHRlICYgUEdfTUFOQUdFRCkgIT0gMCAmJiBwbWFwID09IGtlcm5lbF9wbWFwKSB7Ci0JCXBt YXBfcGRlX3BfZmFpbHVyZXMrKzsKLQkJQ1RSMihLVFJfUE1BUCwgInBtYXBfcHJvbW90ZV9w ZGU6IGZhaWx1cmUgZm9yIHZhICUjeCIKLQkJICAgICIgaW4gcG1hcCAlcCIsIHZhLCBwbWFw KTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoKG5ld3BkZSAmIChQR19NIHwgUEdfUlcpKSA9PSBQ R19SVykgewotCQkvKgotCQkgKiBXaGVuIFBHX00gaXMgYWxyZWFkeSBjbGVhciwgUEdfUlcg Y2FuIGJlIGNsZWFyZWQgd2l0aG91dAotCQkgKiBhIFRMQiBpbnZhbGlkYXRpb24uCi0JCSAq LwotCQlpZiAoIWF0b21pY19jbXBzZXRfaW50KCh1X2ludCAqKWZpcnN0cHRlLCBuZXdwZGUs IG5ld3BkZSAmCi0JCSAgICB+UEdfUlcpKSAgCi0JCQlnb3RvIHNldHBkZTsKLQkJbmV3cGRl ICY9IH5QR19SVzsKLQl9Ci0KLQkvKiAKLQkgKiBFeGFtaW5lIGVhY2ggb2YgdGhlIG90aGVy IFBURXMgaW4gdGhlIHNwZWNpZmllZCBQVFAuICBBYm9ydCBpZiB0aGlzCi0JICogUFRFIG1h cHMgYW4gdW5leHBlY3RlZCA0S0IgcGh5c2ljYWwgcGFnZSBvciBkb2VzIG5vdCBoYXZlIGlk ZW50aWNhbAotCSAqIGNoYXJhY3RlcmlzdGljcyB0byB0aGUgZmlyc3QgUFRFLgotCSAqLwot CXBhID0gKG5ld3BkZSAmIChQR19QU19GUkFNRSB8IFBHX0EgfCBQR19WKSkgKyBOQlBEUiAt IFBBR0VfU0laRTsKLQlmb3IgKHB0ZSA9IGZpcnN0cHRlICsgTlBURVBHIC0gMTsgcHRlID4g Zmlyc3RwdGU7IHB0ZS0tKSB7Ci1zZXRwdGU6Ci0JCW9sZHB0ZSA9ICpwdGU7Ci0JCWlmICgo b2xkcHRlICYgKFBHX0ZSQU1FIHwgUEdfQSB8IFBHX1YpKSAhPSBwYSkgewotCQkJcG1hcF9w ZGVfcF9mYWlsdXJlcysrOwotCQkJQ1RSMihLVFJfUE1BUCwgInBtYXBfcHJvbW90ZV9wZGU6 IGZhaWx1cmUgZm9yIHZhICUjeCIKLQkJCSAgICAiIGluIHBtYXAgJXAiLCB2YSwgcG1hcCk7 Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKChvbGRwdGUgJiAoUEdfTSB8IFBHX1JXKSkgPT0g UEdfUlcpIHsKLQkJCS8qCi0JCQkgKiBXaGVuIFBHX00gaXMgYWxyZWFkeSBjbGVhciwgUEdf UlcgY2FuIGJlIGNsZWFyZWQKLQkJCSAqIHdpdGhvdXQgYSBUTEIgaW52YWxpZGF0aW9uLgot CQkJICovCi0JCQlpZiAoIWF0b21pY19jbXBzZXRfaW50KCh1X2ludCAqKXB0ZSwgb2xkcHRl LAotCQkJICAgIG9sZHB0ZSAmIH5QR19SVykpCi0JCQkJZ290byBzZXRwdGU7Ci0JCQlvbGRw dGUgJj0gflBHX1JXOwotCQkJb2xkcHRldmEgPSAob2xkcHRlICYgUEdfRlJBTUUgJiBQRFJN QVNLKSB8Ci0JCQkgICAgKHZhICYgflBEUk1BU0spOwotCQkJQ1RSMihLVFJfUE1BUCwgInBt YXBfcHJvbW90ZV9wZGU6IHByb3RlY3QgZm9yIHZhICUjeCIKLQkJCSAgICAiIGluIHBtYXAg JXAiLCBvbGRwdGV2YSwgcG1hcCk7Ci0JCX0KLQkJaWYgKChvbGRwdGUgJiBQR19QVEVfUFJP TU9URSkgIT0gKG5ld3BkZSAmIFBHX1BURV9QUk9NT1RFKSkgewotCQkJcG1hcF9wZGVfcF9m YWlsdXJlcysrOwotCQkJQ1RSMihLVFJfUE1BUCwgInBtYXBfcHJvbW90ZV9wZGU6IGZhaWx1 cmUgZm9yIHZhICUjeCIKLQkJCSAgICAiIGluIHBtYXAgJXAiLCB2YSwgcG1hcCk7Ci0JCQly ZXR1cm47Ci0JCX0KLQkJcGEgLT0gUEFHRV9TSVpFOwotCX0KLQotCS8qCi0JICogU2F2ZSB0 aGUgcGFnZSB0YWJsZSBwYWdlIGluIGl0cyBjdXJyZW50IHN0YXRlIHVudGlsIHRoZSBQREUK LQkgKiBtYXBwaW5nIHRoZSBzdXBlcnBhZ2UgaXMgZGVtb3RlZCBieSBwbWFwX2RlbW90ZV9w ZGUoKSBvcgotCSAqIGRlc3Ryb3llZCBieSBwbWFwX3JlbW92ZV9wZGUoKS4gCi0JICovCi0J bXB0ZSA9IFBIWVNfVE9fVk1fUEFHRSgqcGRlICYgUEdfRlJBTUUpOwotCUtBU1NFUlQobXB0 ZSA+PSB2bV9wYWdlX2FycmF5ICYmCi0JICAgIG1wdGUgPCAmdm1fcGFnZV9hcnJheVt2bV9w YWdlX2FycmF5X3NpemVdLAotCSAgICAoInBtYXBfcHJvbW90ZV9wZGU6IHBhZ2UgdGFibGUg cGFnZSBpcyBvdXQgb2YgcmFuZ2UiKSk7Ci0JS0FTU0VSVChtcHRlLT5waW5kZXggPT0gdmEg Pj4gUERSU0hJRlQsCi0JICAgICgicG1hcF9wcm9tb3RlX3BkZTogcGFnZSB0YWJsZSBwYWdl J3MgcGluZGV4IGlzIHdyb25nIikpOwotCXBtYXBfaW5zZXJ0X3B0X3BhZ2UocG1hcCwgbXB0 ZSk7Ci0KLQkvKgotCSAqIFByb21vdGUgdGhlIHB2IGVudHJpZXMuCi0JICovCi0JaWYgKChu ZXdwZGUgJiBQR19NQU5BR0VEKSAhPSAwKQotCQlwbWFwX3B2X3Byb21vdGVfcGRlKHBtYXAs IHZhLCBuZXdwZGUgJiBQR19QU19GUkFNRSk7Ci0KLQkvKgotCSAqIFByb3BhZ2F0ZSB0aGUg UEFUIGluZGV4IHRvIGl0cyBwcm9wZXIgcG9zaXRpb24uCi0JICovCi0JaWYgKChuZXdwZGUg JiBQR19QVEVfUEFUKSAhPSAwKQotCQluZXdwZGUgXj0gUEdfUERFX1BBVCB8IFBHX1BURV9Q QVQ7Ci0KLQkvKgotCSAqIE1hcCB0aGUgc3VwZXJwYWdlLgotCSAqLwotCWlmICh3b3JrYXJv dW5kX2VycmF0dW0zODMpCi0JCXBtYXBfdXBkYXRlX3BkZShwbWFwLCB2YSwgcGRlLCBQR19Q UyB8IG5ld3BkZSk7Ci0JZWxzZSBpZiAocG1hcCA9PSBrZXJuZWxfcG1hcCkKLQkJcG1hcF9r ZW50ZXJfcGRlKHZhLCBQR19QUyB8IG5ld3BkZSk7Ci0JZWxzZQotCQlwZGVfc3RvcmUocGRl LCBQR19QUyB8IG5ld3BkZSk7Ci0KLQlwbWFwX3BkZV9wcm9tb3Rpb25zKys7Ci0JQ1RSMihL VFJfUE1BUCwgInBtYXBfcHJvbW90ZV9wZGU6IHN1Y2Nlc3MgZm9yIHZhICUjeCIKLQkgICAg IiBpbiBwbWFwICVwIiwgdmEsIHBtYXApOwotfQotCi0vKgogICoJSW5zZXJ0IHRoZSBnaXZl biBwaHlzaWNhbCBwYWdlIChwKSBhdAogICoJdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJl c3MgKHYpIGluIHRoZQogICoJdGFyZ2V0IHBoeXNpY2FsIG1hcCB3aXRoIHRoZSBwcm90ZWN0 aW9uIHJlcXVlc3RlZC4KQEAgLTMzMTgsNiArMjU3MCw4IEBACiAJdm1fcGFnZV90IG1wdGUs IG9tOwogCWJvb2xlYW5fdCBpbnZsdmE7CiAKKwlDVFI2KEtUUl9QTUFQLCAicG1hcF9lbnRl cjogcG1hcD0lMDhwIHZhPTB4JTA4eCBhY2Nlc3M9MHgleCBtYT0weCUwOHggcHJvdD0weCV4 IHdpcmVkPSVkIiwKKwkgICAgcG1hcCwgdmEsIGFjY2VzcywgVk1fUEFHRV9UT19NQUNIKG0p LCBwcm90LCB3aXJlZCk7CiAJdmEgPSB0cnVuY19wYWdlKHZhKTsKIAlLQVNTRVJUKHZhIDw9 IFZNX01BWF9LRVJORUxfQUREUkVTUywgKCJwbWFwX2VudGVyOiB0b29iaWciKSk7CiAJS0FT U0VSVCh2YSA8IFVQVF9NSU5fQUREUkVTUyB8fCB2YSA+PSBVUFRfTUFYX0FERFJFU1MsCkBA IC0zMzUxLDEyICsyNjA1LDIwIEBACiAJICovCiAJaWYgKHB0ZSA9PSBOVUxMKSB7CiAJCXBh bmljKCJwbWFwX2VudGVyOiBpbnZhbGlkIHBhZ2UgZGlyZWN0b3J5IHBkaXI9JSNqeCwgdmE9 JSN4IiwKLQkJCSh1aW50bWF4X3QpcG1hcC0+cG1fcGRpcltQVERQVERJXSwgdmEpOworCQkJ KHVpbnRtYXhfdClwbWFwLT5wbV9wZGlyW3ZhID4+IFBEUlNISUZUXSwgdmEpOwogCX0KIAog CXBhID0gVk1fUEFHRV9UT19QSFlTKG0pOwogCW9tID0gTlVMTDsKKwlvcGEgPSBvcmlncHRl ID0gMDsKKworI2lmIDAKKwlLQVNTRVJUKCgqcHRlICYgUEdfVikgfHwgKCpwdGUgPT0gMCks ICgiYWRkcmVzcyBzZXQgYnV0IG5vdCB2YWxpZCBwdGU9JXAgKnB0ZT0weCUwMTZqeCIsCisJ CXB0ZSwgKnB0ZSkpOworI2VuZGlmCiAJb3JpZ3B0ZSA9ICpwdGU7CisJaWYgKG9yaWdwdGUp CisJCW9yaWdwdGUgPSB4cG1hcF9tdG9wKG9yaWdwdGUpOwogCW9wYSA9IG9yaWdwdGUgJiBQ R19GUkFNRTsKIAogCS8qCkBAIC0zMzk5LDcgKzI2NjEsOSBAQAogCQlpZiAob3JpZ3B0ZSAm IFBHX01BTkFHRUQpIHsKIAkJCW9tID0gUEhZU19UT19WTV9QQUdFKG9wYSk7CiAJCQlwdiA9 IHBtYXBfcHZoX3JlbW92ZSgmb20tPm1kLCBwbWFwLCB2YSk7Ci0JCX0KKwkJfSBlbHNlIGlm ICh2YSA8IFZNX01BWFVTRVJfQUREUkVTUykgCisJCQlwcmludGYoInZhPTB4JXggaXMgdW5t YW5hZ2VkIDotKCBcbiIsIHZhKTsKKwkJCQogCQlpZiAobXB0ZSAhPSBOVUxMKSB7CiAJCQlt cHRlLT53aXJlX2NvdW50LS07CiAJCQlLQVNTRVJUKG1wdGUtPndpcmVfY291bnQgPiAwLApA QCAtMzQzMyw3ICsyNjk3LDcgQEAKIAkvKgogCSAqIE5vdyB2YWxpZGF0ZSBtYXBwaW5nIHdp dGggZGVzaXJlZCBwcm90ZWN0aW9uL3dpcmluZy4KIAkgKi8KLQluZXdwdGUgPSAocHRfZW50 cnlfdCkocGEgfCBwbWFwX2NhY2hlX2JpdHMobS0+bWQucGF0X21vZGUsIDApIHwgUEdfVik7 CisJbmV3cHRlID0gKHB0X2VudHJ5X3QpKHBhIHwgUEdfVik7CiAJaWYgKChwcm90ICYgVk1f UFJPVF9XUklURSkgIT0gMCkgewogCQluZXdwdGUgfD0gUEdfUlc7CiAJCWlmICgobmV3cHRl ICYgUEdfTUFOQUdFRCkgIT0gMCkKQEAgLTM0NTAsMTcgKzI3MTQsMTYgQEAKIAlpZiAocG1h cCA9PSBrZXJuZWxfcG1hcCkKIAkJbmV3cHRlIHw9IHBnZWZsYWc7CiAKKwljcml0aWNhbF9l bnRlcigpOwogCS8qCiAJICogaWYgdGhlIG1hcHBpbmcgb3IgcGVybWlzc2lvbiBiaXRzIGFy ZSBkaWZmZXJlbnQsIHdlIG5lZWQKIAkgKiB0byB1cGRhdGUgdGhlIHB0ZS4KIAkgKi8KIAlp ZiAoKG9yaWdwdGUgJiB+KFBHX018UEdfQSkpICE9IG5ld3B0ZSkgewotCQluZXdwdGUgfD0g UEdfQTsKLQkJaWYgKChhY2Nlc3MgJiBWTV9QUk9UX1dSSVRFKSAhPSAwKQotCQkJbmV3cHRl IHw9IFBHX007Ci0JCWlmIChvcmlncHRlICYgUEdfVikgeworCQlpZiAob3JpZ3B0ZSkgewog CQkJaW52bHZhID0gRkFMU0U7Ci0JCQlvcmlncHRlID0gcHRlX2xvYWRfc3RvcmUocHRlLCBu ZXdwdGUpOworCQkJb3JpZ3B0ZSA9ICpwdGU7CisJCQlQVF9TRVRfVkEocHRlLCBuZXdwdGUg fCBQR19BLCBGQUxTRSk7CiAJCQlpZiAob3JpZ3B0ZSAmIFBHX0EpIHsKIAkJCQlpZiAob3Jp Z3B0ZSAmIFBHX01BTkFHRUQpCiAJCQkJCXZtX3BhZ2VfYWZsYWdfc2V0KG9tLCBQR0FfUkVG RVJFTkNFRCk7CkBAIC0zNDc5LDg1ICsyNzQyLDI1IEBACiAJCQkJCWludmx2YSA9IFRSVUU7 CiAJCQl9CiAJCQlpZiAoKG9yaWdwdGUgJiBQR19NQU5BR0VEKSAhPSAwICYmCi0JCQkgICAg VEFJTFFfRU1QVFkoJm9tLT5tZC5wdl9saXN0KSAmJgotCQkJICAgIFRBSUxRX0VNUFRZKCZw YV90b19wdmgob3BhKS0+cHZfbGlzdCkpCisJCQkgICAgVEFJTFFfRU1QVFkoJm9tLT5tZC5w dl9saXN0KSkKIAkJCQl2bV9wYWdlX2FmbGFnX2NsZWFyKG9tLCBQR0FfV1JJVEVBQkxFKTsK IAkJCWlmIChpbnZsdmEpCiAJCQkJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcCwgdmEpOwot CQl9IGVsc2UKLQkJCXB0ZV9zdG9yZShwdGUsIG5ld3B0ZSk7CisJCX0gZWxzZXsKKwkJCVBU X1NFVF9WQShwdGUsIG5ld3B0ZSB8IFBHX0EsIEZBTFNFKTsKKwkJfQorCQkKIAl9Ci0KLQkv KgotCSAqIElmIGJvdGggdGhlIHBhZ2UgdGFibGUgcGFnZSBhbmQgdGhlIHJlc2VydmF0aW9u IGFyZSBmdWxseQotCSAqIHBvcHVsYXRlZCwgdGhlbiBhdHRlbXB0IHByb21vdGlvbi4KLQkg Ki8KLQlpZiAoKG1wdGUgPT0gTlVMTCB8fCBtcHRlLT53aXJlX2NvdW50ID09IE5QVEVQRykg JiYKLQkgICAgcGdfcHNfZW5hYmxlZCAmJiB2bV9yZXNlcnZfbGV2ZWxfaWZmdWxscG9wKG0p ID09IDApCi0JCXBtYXBfcHJvbW90ZV9wZGUocG1hcCwgcGRlLCB2YSk7Ci0KKwlQVF9VUERB VEVTX0ZMVVNIKCk7CisJY3JpdGljYWxfZXhpdCgpOworCWlmICgqUE1BUDEpCisJCVBUX1NF VF9WQV9NQShQTUFQMSwgMCwgVFJVRSk7CiAJc2NoZWRfdW5waW4oKTsKIAl2bV9wYWdlX3Vu bG9ja19xdWV1ZXMoKTsKIAlQTUFQX1VOTE9DSyhwbWFwKTsKIH0KIAogLyoKLSAqIFRyaWVz IHRvIGNyZWF0ZSBhIDItIG9yIDRNQiBwYWdlIG1hcHBpbmcuICBSZXR1cm5zIFRSVUUgaWYg c3VjY2Vzc2Z1bCBhbmQKLSAqIEZBTFNFIG90aGVyd2lzZS4gIEZhaWxzIGlmICgxKSBhIHBh Z2UgdGFibGUgcGFnZSBjYW5ub3QgYmUgYWxsb2NhdGVkIHdpdGhvdXQKLSAqIGJsb2NraW5n LCAoMikgYSBtYXBwaW5nIGFscmVhZHkgZXhpc3RzIGF0IHRoZSBzcGVjaWZpZWQgdmlydHVh bCBhZGRyZXNzLCBvcgotICogKDMpIGEgcHYgZW50cnkgY2Fubm90IGJlIGFsbG9jYXRlZCB3 aXRob3V0IHJlY2xhaW1pbmcgYW5vdGhlciBwdiBlbnRyeS4gCi0gKi8KLXN0YXRpYyBib29s ZWFuX3QKLXBtYXBfZW50ZXJfcGRlKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1f cGFnZV90IG0sIHZtX3Byb3RfdCBwcm90KQotewotCXBkX2VudHJ5X3QgKnBkZSwgbmV3cGRl OwotCi0JbXR4X2Fzc2VydCgmdm1fcGFnZV9xdWV1ZV9tdHgsIE1BX09XTkVEKTsKLQlQTUFQ X0xPQ0tfQVNTRVJUKHBtYXAsIE1BX09XTkVEKTsKLQlwZGUgPSBwbWFwX3BkZShwbWFwLCB2 YSk7Ci0JaWYgKCpwZGUgIT0gMCkgewotCQlDVFIyKEtUUl9QTUFQLCAicG1hcF9lbnRlcl9w ZGU6IGZhaWx1cmUgZm9yIHZhICUjbHgiCi0JCSAgICAiIGluIHBtYXAgJXAiLCB2YSwgcG1h cCk7Ci0JCXJldHVybiAoRkFMU0UpOwotCX0KLQluZXdwZGUgPSBWTV9QQUdFX1RPX1BIWVMo bSkgfCBwbWFwX2NhY2hlX2JpdHMobS0+bWQucGF0X21vZGUsIDEpIHwKLQkgICAgUEdfUFMg fCBQR19WOwotCWlmICgobS0+b2ZsYWdzICYgVlBPX1VOTUFOQUdFRCkgPT0gMCkgewotCQlu ZXdwZGUgfD0gUEdfTUFOQUdFRDsKLQotCQkvKgotCQkgKiBBYm9ydCB0aGlzIG1hcHBpbmcg aWYgaXRzIFBWIGVudHJ5IGNvdWxkIG5vdCBiZSBjcmVhdGVkLgotCQkgKi8KLQkJaWYgKCFw bWFwX3B2X2luc2VydF9wZGUocG1hcCwgdmEsIFZNX1BBR0VfVE9fUEhZUyhtKSkpIHsKLQkJ CUNUUjIoS1RSX1BNQVAsICJwbWFwX2VudGVyX3BkZTogZmFpbHVyZSBmb3IgdmEgJSNseCIK LQkJCSAgICAiIGluIHBtYXAgJXAiLCB2YSwgcG1hcCk7Ci0JCQlyZXR1cm4gKEZBTFNFKTsK LQkJfQotCX0KLSNpZmRlZiBQQUUKLQlpZiAoKHByb3QgJiBWTV9QUk9UX0VYRUNVVEUpID09 IDApCi0JCW5ld3BkZSB8PSBwZ19ueDsKLSNlbmRpZgotCWlmICh2YSA8IFZNX01BWFVTRVJf QUREUkVTUykKLQkJbmV3cGRlIHw9IFBHX1U7Ci0KLQkvKgotCSAqIEluY3JlbWVudCBjb3Vu dGVycy4KLQkgKi8KLQlwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCArPSBOQlBEUiAv IFBBR0VfU0laRTsKLQotCS8qCi0JICogTWFwIHRoZSBzdXBlcnBhZ2UuCi0JICovCi0JcGRl X3N0b3JlKHBkZSwgbmV3cGRlKTsKLQotCXBtYXBfcGRlX21hcHBpbmdzKys7Ci0JQ1RSMihL VFJfUE1BUCwgInBtYXBfZW50ZXJfcGRlOiBzdWNjZXNzIGZvciB2YSAlI2x4IgotCSAgICAi IGluIHBtYXAgJXAiLCB2YSwgcG1hcCk7Ci0JcmV0dXJuIChUUlVFKTsKLX0KLQotLyoKICAq IE1hcHMgYSBzZXF1ZW5jZSBvZiByZXNpZGVudCBwYWdlcyBiZWxvbmdpbmcgdG8gdGhlIHNh bWUgb2JqZWN0LgogICogVGhlIHNlcXVlbmNlIGJlZ2lucyB3aXRoIHRoZSBnaXZlbiBwYWdl IG1fc3RhcnQuICBUaGlzIHBhZ2UgaXMKICAqIG1hcHBlZCBhdCB0aGUgZ2l2ZW4gdmlydHVh bCBhZGRyZXNzIHN0YXJ0LiAgRWFjaCBzdWJzZXF1ZW50IHBhZ2UgaXMKQEAgLTM1NzMsOSAr Mjc3NiwxMSBAQAogcG1hcF9lbnRlcl9vYmplY3QocG1hcF90IHBtYXAsIHZtX29mZnNldF90 IHN0YXJ0LCB2bV9vZmZzZXRfdCBlbmQsCiAgICAgdm1fcGFnZV90IG1fc3RhcnQsIHZtX3By b3RfdCBwcm90KQogewotCXZtX29mZnNldF90IHZhOwogCXZtX3BhZ2VfdCBtLCBtcHRlOwog CXZtX3BpbmRleF90IGRpZmYsIHBzaXplOworCW11bHRpY2FsbF9lbnRyeV90IG1jbFsxNl07 CisJbXVsdGljYWxsX2VudHJ5X3QgKm1jbHAgPSBtY2w7CisJaW50IGVycm9yLCBjb3VudCA9 IDA7CiAKIAlWTV9PQkpFQ1RfTE9DS19BU1NFUlQobV9zdGFydC0+b2JqZWN0LCBNQV9PV05F RCk7CiAJcHNpemUgPSBhdG9wKGVuZCAtIHN0YXJ0KTsKQEAgLTM1ODQsMTYgKzI3ODksMTkg QEAKIAl2bV9wYWdlX2xvY2tfcXVldWVzKCk7CiAJUE1BUF9MT0NLKHBtYXApOwogCXdoaWxl IChtICE9IE5VTEwgJiYgKGRpZmYgPSBtLT5waW5kZXggLSBtX3N0YXJ0LT5waW5kZXgpIDwg cHNpemUpIHsKLQkJdmEgPSBzdGFydCArIHB0b2EoZGlmZik7Ci0JCWlmICgodmEgJiBQRFJN QVNLKSA9PSAwICYmIHZhICsgTkJQRFIgPD0gZW5kICYmCi0JCSAgICAoVk1fUEFHRV9UT19Q SFlTKG0pICYgUERSTUFTSykgPT0gMCAmJgotCQkgICAgcGdfcHNfZW5hYmxlZCAmJiB2bV9y ZXNlcnZfbGV2ZWxfaWZmdWxscG9wKG0pID09IDAgJiYKLQkJICAgIHBtYXBfZW50ZXJfcGRl KHBtYXAsIHZhLCBtLCBwcm90KSkKLQkJCW0gPSAmbVtOQlBEUiAvIFBBR0VfU0laRSAtIDFd OwotCQllbHNlCi0JCQltcHRlID0gcG1hcF9lbnRlcl9xdWlja19sb2NrZWQocG1hcCwgdmEs IG0sIHByb3QsCi0JCQkgICAgbXB0ZSk7CisJCW1wdGUgPSBwbWFwX2VudGVyX3F1aWNrX2xv Y2tlZCgmbWNscCwgJmNvdW50LCBwbWFwLCBzdGFydCArIHB0b2EoZGlmZiksIG0sCisJCSAg ICBwcm90LCBtcHRlKTsKIAkJbSA9IFRBSUxRX05FWFQobSwgbGlzdHEpOworCQlpZiAoY291 bnQgPT0gMTYpIHsKKwkJCWVycm9yID0gSFlQRVJWSVNPUl9tdWx0aWNhbGwobWNsLCBjb3Vu dCk7CisJCQlLQVNTRVJUKGVycm9yID09IDAsICgiYmFkIG11bHRpY2FsbCAlZCIsIGVycm9y KSk7CisJCQltY2xwID0gbWNsOworCQkJY291bnQgPSAwOworCQl9CisJfQorCWlmIChjb3Vu dCkgeworCQllcnJvciA9IEhZUEVSVklTT1JfbXVsdGljYWxsKG1jbCwgY291bnQpOworCQlL QVNTRVJUKGVycm9yID09IDAsICgiYmFkIG11bHRpY2FsbCAlZCIsIGVycm9yKSk7CiAJfQog CXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwogCVBNQVBfVU5MT0NLKHBtYXApOwpAQCAtMzYx MSwyMSArMjgxOSw2MCBAQAogdm9pZAogcG1hcF9lbnRlcl9xdWljayhwbWFwX3QgcG1hcCwg dm1fb2Zmc2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCkKIHsKKwltdWx0 aWNhbGxfZW50cnlfdCBtY2wsICptY2xwOworCWludCBjb3VudCA9IDA7CisJbWNscCA9ICZt Y2w7CiAKKwlDVFI0KEtUUl9QTUFQLCAicG1hcF9lbnRlcl9xdWljazogcG1hcD0lcCB2YT0w eCV4IG09JXAgcHJvdD0weCV4IiwKKwkgICAgcG1hcCwgdmEsIG0sIHByb3QpOworCQogCXZt X3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlQTUFQX0xPQ0socG1hcCk7Ci0JKHZvaWQpcG1hcF9l bnRlcl9xdWlja19sb2NrZWQocG1hcCwgdmEsIG0sIHByb3QsIE5VTEwpOworCSh2b2lkKXBt YXBfZW50ZXJfcXVpY2tfbG9ja2VkKCZtY2xwLCAmY291bnQsIHBtYXAsIHZhLCBtLCBwcm90 LCBOVUxMKTsKKwlpZiAoY291bnQpCisJCUhZUEVSVklTT1JfbXVsdGljYWxsKCZtY2wsIGNv dW50KTsKIAl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKIAlQTUFQX1VOTE9DSyhwbWFwKTsK IH0KIAorI2lmZGVmIG5vdHlldAordm9pZAorcG1hcF9lbnRlcl9xdWlja19yYW5nZShwbWFw X3QgcG1hcCwgdm1fb2Zmc2V0X3QgKmFkZHJzLCB2bV9wYWdlX3QgKnBhZ2VzLCB2bV9wcm90 X3QgKnByb3RzLCBpbnQgY291bnQpCit7CisJaW50IGksIGVycm9yLCBpbmRleCA9IDA7CisJ bXVsdGljYWxsX2VudHJ5X3QgbWNsWzE2XTsKKwltdWx0aWNhbGxfZW50cnlfdCAqbWNscCA9 IG1jbDsKKwkJCisJUE1BUF9MT0NLKHBtYXApOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsg aSsrLCBhZGRycysrLCBwYWdlcysrLCBwcm90cysrKSB7CisJCWlmICghcG1hcF9pc19wcmVm YXVsdGFibGVfbG9ja2VkKHBtYXAsICphZGRycykpCisJCQljb250aW51ZTsKKworCQkodm9p ZCkgcG1hcF9lbnRlcl9xdWlja19sb2NrZWQoJm1jbHAsICZpbmRleCwgcG1hcCwgKmFkZHJz LCAqcGFnZXMsICpwcm90cywgTlVMTCk7CisJCWlmIChpbmRleCA9PSAxNikgeworCQkJZXJy b3IgPSBIWVBFUlZJU09SX211bHRpY2FsbChtY2wsIGluZGV4KTsKKwkJCW1jbHAgPSBtY2w7 CisJCQlpbmRleCA9IDA7CisJCQlLQVNTRVJUKGVycm9yID09IDAsICgiYmFkIG11bHRpY2Fs bCAlZCIsIGVycm9yKSk7CisJCX0KKwl9CisJaWYgKGluZGV4KSB7CisJCWVycm9yID0gSFlQ RVJWSVNPUl9tdWx0aWNhbGwobWNsLCBpbmRleCk7CisJCUtBU1NFUlQoZXJyb3IgPT0gMCwg KCJiYWQgbXVsdGljYWxsICVkIiwgZXJyb3IpKTsKKwl9CisJCisJUE1BUF9VTkxPQ0socG1h cCk7Cit9CisjZW5kaWYKKwogc3RhdGljIHZtX3BhZ2VfdAotcG1hcF9lbnRlcl9xdWlja19s b2NrZWQocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCB2bV9wYWdlX3QgbSwKK3BtYXBf ZW50ZXJfcXVpY2tfbG9ja2VkKG11bHRpY2FsbF9lbnRyeV90ICoqbWNscHAsIGludCAqY291 bnQsIHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFnZV90IG0sCiAgICAgdm1f cHJvdF90IHByb3QsIHZtX3BhZ2VfdCBtcHRlKQogewogCXB0X2VudHJ5X3QgKnB0ZTsKIAl2 bV9wYWRkcl90IHBhOwogCXZtX3BhZ2VfdCBmcmVlOworCW11bHRpY2FsbF9lbnRyeV90ICpt Y2wgPSAqbWNscHA7CiAKIAlLQVNTRVJUKHZhIDwga21pLmNsZWFuX3N2YSB8fCB2YSA+PSBr bWkuY2xlYW5fZXZhIHx8CiAJICAgIChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VEKSAhPSAw LApAQCAtMzYzOSw3ICsyODg2LDcgQEAKIAkgKi8KIAlpZiAodmEgPCBWTV9NQVhVU0VSX0FE RFJFU1MpIHsKIAkJdV9pbnQgcHRlcGluZGV4OwotCQlwZF9lbnRyeV90IHB0ZXBhOworCQlw ZF9lbnRyeV90IHB0ZW1hOwogCiAJCS8qCiAJCSAqIENhbGN1bGF0ZSBwYWdldGFibGUgcGFn ZSBpbmRleApAQCAtMzY1MSwxNiArMjg5OCwxNiBAQAogCQkJLyoKIAkJCSAqIEdldCB0aGUg cGFnZSBkaXJlY3RvcnkgZW50cnkKIAkJCSAqLwotCQkJcHRlcGEgPSBwbWFwLT5wbV9wZGly W3B0ZXBpbmRleF07CisJCQlwdGVtYSA9IHBtYXAtPnBtX3BkaXJbcHRlcGluZGV4XTsKIAog CQkJLyoKIAkJCSAqIElmIHRoZSBwYWdlIHRhYmxlIHBhZ2UgaXMgbWFwcGVkLCB3ZSBqdXN0 IGluY3JlbWVudAogCQkJICogdGhlIGhvbGQgY291bnQsIGFuZCBhY3RpdmF0ZSBpdC4KIAkJ CSAqLwotCQkJaWYgKHB0ZXBhKSB7Ci0JCQkJaWYgKHB0ZXBhICYgUEdfUFMpCi0JCQkJCXJl dHVybiAoTlVMTCk7Ci0JCQkJbXB0ZSA9IFBIWVNfVE9fVk1fUEFHRShwdGVwYSAmIFBHX0ZS QU1FKTsKKwkJCWlmIChwdGVtYSAmIFBHX1YpIHsKKwkJCQlpZiAocHRlbWEgJiBQR19QUykK KwkJCQkJcGFuaWMoInBtYXBfZW50ZXJfcXVpY2s6IHVuZXhwZWN0ZWQgbWFwcGluZyBpbnRv IDRNQiBwYWdlIik7CisJCQkJbXB0ZSA9IFBIWVNfVE9fVk1fUEFHRSh4cG1hcF9tdG9wKHB0 ZW1hKSAmIFBHX0ZSQU1FKTsKIAkJCQltcHRlLT53aXJlX2NvdW50Kys7CiAJCQl9IGVsc2Ug ewogCQkJCW1wdGUgPSBfcG1hcF9hbGxvY3B0ZShwbWFwLCBwdGVwaW5kZXgsCkBAIC0zNjc5 LDggKzI5MjYsOSBAQAogCSAqIHF1aWNrIGVudHJ5IGludG8gYW55IHBtYXAsIG9uZSB3b3Vs ZCBsaWtlbHkgdXNlIHBtYXBfcHRlX3F1aWNrLgogCSAqIEJ1dCB0aGF0IGlzbid0IGFzIHF1 aWNrIGFzIHZ0b3B0ZS4KIAkgKi8KKwlLQVNTRVJUKHBtYXBfaXNfY3VycmVudChwbWFwKSwg KCJlbnRlcmluZyBwYWdlcyBpbiBub24tY3VycmVudCBwbWFwIikpOwogCXB0ZSA9IHZ0b3B0 ZSh2YSk7Ci0JaWYgKCpwdGUpIHsKKwlpZiAoKnB0ZSAmIFBHX1YpIHsKIAkJaWYgKG1wdGUg IT0gTlVMTCkgewogCQkJbXB0ZS0+d2lyZV9jb3VudC0tOwogCQkJbXB0ZSA9IE5VTEw7CkBA IC0zNzEwLDEyICsyOTU4LDEzIEBACiAJICovCiAJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRf Y291bnQrKzsKIAotCXBhID0gVk1fUEFHRV9UT19QSFlTKG0pIHwgcG1hcF9jYWNoZV9iaXRz KG0tPm1kLnBhdF9tb2RlLCAwKTsKKwlwYSA9IFZNX1BBR0VfVE9fUEhZUyhtKTsKICNpZmRl ZiBQQUUKIAlpZiAoKHByb3QgJiBWTV9QUk9UX0VYRUNVVEUpID09IDApCiAJCXBhIHw9IHBn X254OwogI2VuZGlmCiAKKyNpZiAwCiAJLyoKIAkgKiBOb3cgdmFsaWRhdGUgbWFwcGluZyB3 aXRoIFJPIHByb3RlY3Rpb24KIAkgKi8KQEAgLTM3MjMsNiArMjk3MiwyMyBAQAogCQlwdGVf c3RvcmUocHRlLCBwYSB8IFBHX1YgfCBQR19VKTsKIAllbHNlCiAJCXB0ZV9zdG9yZShwdGUs IHBhIHwgUEdfViB8IFBHX1UgfCBQR19NQU5BR0VEKTsKKyNlbHNlCisJLyoKKwkgKiBOb3cg dmFsaWRhdGUgbWFwcGluZyB3aXRoIFJPIHByb3RlY3Rpb24KKwkgKi8KKwlpZiAoKG0tPm9m bGFncyAmIFZQT19VTk1BTkFHRUQpICE9IDApCisJCXBhID0gCXhwbWFwX3B0b20ocGEgfCBQ R19WIHwgUEdfVSk7CisJZWxzZQorCQlwYSA9IHhwbWFwX3B0b20ocGEgfCBQR19WIHwgUEdf VSB8IFBHX01BTkFHRUQpOworCisJbWNsLT5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFf bWFwcGluZzsKKwltY2wtPmFyZ3NbMF0gPSB2YTsKKwltY2wtPmFyZ3NbMV0gPSAodWludDMy X3QpKHBhICYgMHhmZmZmZmZmZik7CisJbWNsLT5hcmdzWzJdID0gKHVpbnQzMl90KShwYSA+ PiAzMik7CisJbWNsLT5hcmdzWzNdID0gMDsKKwkqbWNscHAgPSBtY2wgKyAxOworCSpjb3Vu dCA9ICpjb3VudCArIDE7CisjZW5kaWYJCiAJcmV0dXJuIChtcHRlKTsKIH0KIApAQCAtMzcz NCw5ICszMDAwLDEwIEBACiBwbWFwX2tlbnRlcl90ZW1wb3Jhcnkodm1fcGFkZHJfdCBwYSwg aW50IGkpCiB7CiAJdm1fb2Zmc2V0X3QgdmE7CisJdm1fcGFkZHJfdCBtYSA9IHhwbWFwX3B0 b20ocGEpOwogCiAJdmEgPSAodm1fb2Zmc2V0X3QpY3Jhc2hkdW1wbWFwICsgKGkgKiBQQUdF X1NJWkUpOwotCXBtYXBfa2VudGVyKHZhLCBwYSk7CisJUFRfU0VUX01BKHZhLCAobWEgJiB+ UEFHRV9NQVNLKSB8IFBHX1YgfCBwZ2VmbGFnKTsKIAlpbnZscGcodmEpOwogCXJldHVybiAo KHZvaWQgKiljcmFzaGR1bXBtYXApOwogfQpAQCAtMzgyNCw0NiArMzA5MSwyNyBAQAogdm9p ZAogcG1hcF9jaGFuZ2Vfd2lyaW5nKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgYm9v bGVhbl90IHdpcmVkKQogewotCXBkX2VudHJ5X3QgKnBkZTsKIAlwdF9lbnRyeV90ICpwdGU7 Ci0JYm9vbGVhbl90IGFyZV9xdWV1ZXNfbG9ja2VkOwogCi0JYXJlX3F1ZXVlc19sb2NrZWQg PSBGQUxTRTsKLXJldHJ5OgorCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlQTUFQX0xPQ0so cG1hcCk7Ci0JcGRlID0gcG1hcF9wZGUocG1hcCwgdmEpOwotCWlmICgoKnBkZSAmIFBHX1BT KSAhPSAwKSB7Ci0JCWlmICghd2lyZWQgIT0gKCgqcGRlICYgUEdfVykgPT0gMCkpIHsKLQkJ CWlmICghYXJlX3F1ZXVlc19sb2NrZWQpIHsKLQkJCQlhcmVfcXVldWVzX2xvY2tlZCA9IFRS VUU7Ci0JCQkJaWYgKCFtdHhfdHJ5bG9jaygmdm1fcGFnZV9xdWV1ZV9tdHgpKSB7Ci0JCQkJ CVBNQVBfVU5MT0NLKHBtYXApOwotCQkJCQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7Ci0JCQkJ CWdvdG8gcmV0cnk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKCFwbWFwX2RlbW90ZV9wZGUocG1h cCwgcGRlLCB2YSkpCi0JCQkJcGFuaWMoInBtYXBfY2hhbmdlX3dpcmluZzogZGVtb3Rpb24g ZmFpbGVkIik7Ci0JCX0gZWxzZQotCQkJZ290byBvdXQ7Ci0JfQogCXB0ZSA9IHBtYXBfcHRl KHBtYXAsIHZhKTsKIAotCWlmICh3aXJlZCAmJiAhcG1hcF9wdGVfdyhwdGUpKQorCWlmICh3 aXJlZCAmJiAhcG1hcF9wdGVfdyhwdGUpKSB7CisJCVBUX1NFVF9WQV9NQSgocHRlKSwgKihw dGUpIHwgUEdfVywgVFJVRSk7CiAJCXBtYXAtPnBtX3N0YXRzLndpcmVkX2NvdW50Kys7Ci0J ZWxzZSBpZiAoIXdpcmVkICYmIHBtYXBfcHRlX3cocHRlKSkKKwl9IGVsc2UgaWYgKCF3aXJl ZCAmJiBwbWFwX3B0ZV93KHB0ZSkpIHsKKwkJUFRfU0VUX1ZBX01BKChwdGUpLCAqKHB0ZSkg JiB+UEdfVywgVFJVRSk7CiAJCXBtYXAtPnBtX3N0YXRzLndpcmVkX2NvdW50LS07Ci0KKwl9 CisJCiAJLyoKIAkgKiBXaXJpbmcgaXMgbm90IGEgaGFyZHdhcmUgY2hhcmFjdGVyaXN0aWMg c28gdGhlcmUgaXMgbm8gbmVlZCB0bwogCSAqIGludmFsaWRhdGUgVExCLgogCSAqLwotCXBt YXBfcHRlX3NldF93KHB0ZSwgd2lyZWQpOwogCXBtYXBfcHRlX3JlbGVhc2UocHRlKTsKLW91 dDoKLQlpZiAoYXJlX3F1ZXVlc19sb2NrZWQpCi0JCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygp OwogCVBNQVBfVU5MT0NLKHBtYXApOworCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwogfQog CiAKQEAgLTM4ODgsOCArMzEzNiwxOSBAQAogCWlmIChkc3RfYWRkciAhPSBzcmNfYWRkcikK IAkJcmV0dXJuOwogCi0JaWYgKCFwbWFwX2lzX2N1cnJlbnQoc3JjX3BtYXApKQorCWlmICgh cG1hcF9pc19jdXJyZW50KHNyY19wbWFwKSkgeworCQlDVFIyKEtUUl9QTUFQLAorCQkgICAg InBtYXBfY29weSwgc2tpcHBpbmc6IHBkaXJbUFREUFRESV09MHglanggUFREcGRlWzBdPTB4 JWp4IiwKKwkJICAgIChzcmNfcG1hcC0+cG1fcGRpcltQVERQVERJXSAmIFBHX0ZSQU1FKSwg KFBURHBkZVswXSAmIFBHX0ZSQU1FKSk7CisJCQogCQlyZXR1cm47CisJfQorCUNUUjUoS1RS X1BNQVAsICJwbWFwX2NvcHk6ICBkc3RfcG1hcD0lcCBzcmNfcG1hcD0lcCBkc3RfYWRkcj0w eCV4IGxlbj0lZCBzcmNfYWRkcj0weCV4IiwKKwkgICAgZHN0X3BtYXAsIHNyY19wbWFwLCBk c3RfYWRkciwgbGVuLCBzcmNfYWRkcik7CisJCisjaWZkZWYgSEFNRklTVEVEX0xPQ0tJTkcK KwltdHhfbG9jaygmY3JlYXRlZGVsZXRlX2xvY2spOworI2VuZGlmCiAKIAl2bV9wYWdlX2xv Y2tfcXVldWVzKCk7CiAJaWYgKGRzdF9wbWFwIDwgc3JjX3BtYXApIHsKQEAgLTM5MTAsMjEg KzMxNjksMTUgQEAKIAkJICAgICgicG1hcF9jb3B5OiBpbnZhbGlkIHRvIHBtYXBfY29weSBw YWdlIHRhYmxlcyIpKTsKIAogCQlwZG54dCA9IChhZGRyICsgTkJQRFIpICYgflBEUk1BU0s7 Ci0JCWlmIChwZG54dCA8IGFkZHIpCi0JCQlwZG54dCA9IGVuZF9hZGRyOwogCQlwdGVwaW5k ZXggPSBhZGRyID4+IFBEUlNISUZUOwogCi0JCXNyY3B0ZXBhZGRyID0gc3JjX3BtYXAtPnBt X3BkaXJbcHRlcGluZGV4XTsKKwkJc3JjcHRlcGFkZHIgPSBQVF9HRVQoJnNyY19wbWFwLT5w bV9wZGlyW3B0ZXBpbmRleF0pOwogCQlpZiAoc3JjcHRlcGFkZHIgPT0gMCkKIAkJCWNvbnRp bnVlOwogCQkJCiAJCWlmIChzcmNwdGVwYWRkciAmIFBHX1BTKSB7Ci0JCQlpZiAoZHN0X3Bt YXAtPnBtX3BkaXJbcHRlcGluZGV4XSA9PSAwICYmCi0JCQkgICAgKChzcmNwdGVwYWRkciAm IFBHX01BTkFHRUQpID09IDAgfHwKLQkJCSAgICBwbWFwX3B2X2luc2VydF9wZGUoZHN0X3Bt YXAsIGFkZHIsIHNyY3B0ZXBhZGRyICYKLQkJCSAgICBQR19QU19GUkFNRSkpKSB7Ci0JCQkJ ZHN0X3BtYXAtPnBtX3BkaXJbcHRlcGluZGV4XSA9IHNyY3B0ZXBhZGRyICYKLQkJCQkgICAg flBHX1c7CisJCQlpZiAoZHN0X3BtYXAtPnBtX3BkaXJbcHRlcGluZGV4XSA9PSAwKSB7CisJ CQkJUERfU0VUX1ZBKGRzdF9wbWFwLCBwdGVwaW5kZXgsIHNyY3B0ZXBhZGRyICYgflBHX1cs IFRSVUUpOwogCQkJCWRzdF9wbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCArPQogCQkJ CSAgICBOQlBEUiAvIFBBR0VfU0laRTsKIAkJCX0KQEAgLTM5NTMsMTQgKzMyMDYsMTcgQEAK IAkJCQlkc3RfcHRlID0gcG1hcF9wdGVfcXVpY2soZHN0X3BtYXAsIGFkZHIpOwogCQkJCWlm ICgqZHN0X3B0ZSA9PSAwICYmCiAJCQkJICAgIHBtYXBfdHJ5X2luc2VydF9wdl9lbnRyeShk c3RfcG1hcCwgYWRkciwKLQkJCQkgICAgUEhZU19UT19WTV9QQUdFKHB0ZXRlbXAgJiBQR19G UkFNRSkpKSB7CisJCQkJICAgIFBIWVNfVE9fVk1fUEFHRSh4cG1hcF9tdG9wKHB0ZXRlbXAp ICYgUEdfRlJBTUUpKSkgewogCQkJCQkvKgogCQkJCQkgKiBDbGVhciB0aGUgd2lyZWQsIG1v ZGlmaWVkLCBhbmQKIAkJCQkJICogYWNjZXNzZWQgKHJlZmVyZW5jZWQpIGJpdHMKIAkJCQkJ ICogZHVyaW5nIHRoZSBjb3B5LgogCQkJCQkgKi8KLQkJCQkJKmRzdF9wdGUgPSBwdGV0ZW1w ICYgfihQR19XIHwgUEdfTSB8Ci0JCQkJCSAgICBQR19BKTsKKwkJCQkJS0FTU0VSVChwdGV0 ZW1wICE9IDAsICgic3JjX3B0ZSBub3Qgc2V0IikpOworCQkJCQlQVF9TRVRfVkFfTUEoZHN0 X3B0ZSwgcHRldGVtcCAmIH4oUEdfVyB8IFBHX00gfCBQR19BKSwgVFJVRSAvKiBYWFggZGVi dWcgKi8pOworCQkJCQlLQVNTRVJUKCpkc3RfcHRlID09IChwdGV0ZW1wICYgfihQR19XIHwg UEdfTSB8IFBHX0EpKSwKKwkJCQkJICAgICgibm8gcG1hcCBjb3B5IGV4cGVjdGVkOiAweCVq eCBzYXc6IDB4JWp4IiwKKwkJCQkJCXB0ZXRlbXAgJiAgfihQR19XIHwgUEdfTSB8IFBHX0Ep LCAqZHN0X3B0ZSkpOwogCQkJCQlkc3RfcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQr KzsKIAkgCQkJfSBlbHNlIHsKIAkJCQkJZnJlZSA9IE5VTEw7CkBAIC0zOTgwLDEwICszMjM2 LDE1IEBACiAJCX0KIAl9CiBvdXQ6CisJUFRfVVBEQVRFU19GTFVTSCgpOwogCXNjaGVkX3Vu cGluKCk7CiAJdm1fcGFnZV91bmxvY2tfcXVldWVzKCk7CiAJUE1BUF9VTkxPQ0soc3JjX3Bt YXApOwogCVBNQVBfVU5MT0NLKGRzdF9wbWFwKTsKKworI2lmZGVmIEhBTUZJU1RFRF9MT0NL SU5HCisJbXR4X3VubG9jaygmY3JlYXRlZGVsZXRlX2xvY2spOworI2VuZGlmCiB9CQogCiBz dGF0aWMgX19pbmxpbmUgdm9pZApAQCAtNDAxNiwxMSArMzI3Nyw5IEBACiAJaWYgKCpzeXNt YXBzLT5DTUFQMikKIAkJcGFuaWMoInBtYXBfemVyb19wYWdlOiBDTUFQMiBidXN5Iik7CiAJ c2NoZWRfcGluKCk7Ci0JKnN5c21hcHMtPkNNQVAyID0gUEdfViB8IFBHX1JXIHwgVk1fUEFH RV9UT19QSFlTKG0pIHwgUEdfQSB8IFBHX00gfAotCSAgICBwbWFwX2NhY2hlX2JpdHMobS0+ bWQucGF0X21vZGUsIDApOwotCWludmxjYWRkcihzeXNtYXBzLT5DQUREUjIpOworCVBUX1NF VF9NQShzeXNtYXBzLT5DQUREUjIsIFBHX1YgfCBQR19SVyB8IFZNX1BBR0VfVE9fTUFDSCht KSB8IFBHX0EgfCBQR19NKTsKIAlwYWdlemVybyhzeXNtYXBzLT5DQUREUjIpOwotCSpzeXNt YXBzLT5DTUFQMiA9IDA7CisJUFRfU0VUX01BKHN5c21hcHMtPkNBRERSMiwgMCk7CiAJc2No ZWRfdW5waW4oKTsKIAltdHhfdW5sb2NrKCZzeXNtYXBzLT5sb2NrKTsKIH0KQEAgLTQwNDEs MTQgKzMzMDAsMTMgQEAKIAlpZiAoKnN5c21hcHMtPkNNQVAyKQogCQlwYW5pYygicG1hcF96 ZXJvX3BhZ2VfYXJlYTogQ01BUDIgYnVzeSIpOwogCXNjaGVkX3BpbigpOwotCSpzeXNtYXBz LT5DTUFQMiA9IFBHX1YgfCBQR19SVyB8IFZNX1BBR0VfVE9fUEhZUyhtKSB8IFBHX0EgfCBQ R19NIHwKLQkgICAgcG1hcF9jYWNoZV9iaXRzKG0tPm1kLnBhdF9tb2RlLCAwKTsKLQlpbnZs Y2FkZHIoc3lzbWFwcy0+Q0FERFIyKTsKKwlQVF9TRVRfTUEoc3lzbWFwcy0+Q0FERFIyLCBQ R19WIHwgUEdfUlcgfCBWTV9QQUdFX1RPX01BQ0gobSkgfCBQR19BIHwgUEdfTSk7CisKIAlp ZiAob2ZmID09IDAgJiYgc2l6ZSA9PSBQQUdFX1NJWkUpIAogCQlwYWdlemVybyhzeXNtYXBz LT5DQUREUjIpOwogCWVsc2UKIAkJYnplcm8oKGNoYXIgKilzeXNtYXBzLT5DQUREUjIgKyBv ZmYsIHNpemUpOwotCSpzeXNtYXBzLT5DTUFQMiA9IDA7CisJUFRfU0VUX01BKHN5c21hcHMt PkNBRERSMiwgMCk7CiAJc2NoZWRfdW5waW4oKTsKIAltdHhfdW5sb2NrKCZzeXNtYXBzLT5s b2NrKTsKIH0KQEAgLTQwNjYsMTEgKzMzMjQsOSBAQAogCWlmICgqQ01BUDMpCiAJCXBhbmlj KCJwbWFwX3plcm9fcGFnZV9pZGxlOiBDTUFQMyBidXN5Iik7CiAJc2NoZWRfcGluKCk7Ci0J KkNNQVAzID0gUEdfViB8IFBHX1JXIHwgVk1fUEFHRV9UT19QSFlTKG0pIHwgUEdfQSB8IFBH X00gfAotCSAgICBwbWFwX2NhY2hlX2JpdHMobS0+bWQucGF0X21vZGUsIDApOwotCWludmxj YWRkcihDQUREUjMpOworCVBUX1NFVF9NQShDQUREUjMsIFBHX1YgfCBQR19SVyB8IFZNX1BB R0VfVE9fTUFDSChtKSB8IFBHX0EgfCBQR19NKTsKIAlwYWdlemVybyhDQUREUjMpOwotCSpD TUFQMyA9IDA7CisJUFRfU0VUX01BKENBRERSMywgMCk7CiAJc2NoZWRfdW5waW4oKTsKIH0K IApAQCAtNDA5MiwxNSArMzM0OCwxMSBAQAogCWlmICgqc3lzbWFwcy0+Q01BUDIpCiAJCXBh bmljKCJwbWFwX2NvcHlfcGFnZTogQ01BUDIgYnVzeSIpOwogCXNjaGVkX3BpbigpOwotCWlu dmxwZygodV9pbnQpc3lzbWFwcy0+Q0FERFIxKTsKLQlpbnZscGcoKHVfaW50KXN5c21hcHMt PkNBRERSMik7Ci0JKnN5c21hcHMtPkNNQVAxID0gUEdfViB8IFZNX1BBR0VfVE9fUEhZUyhz cmMpIHwgUEdfQSB8Ci0JICAgIHBtYXBfY2FjaGVfYml0cyhzcmMtPm1kLnBhdF9tb2RlLCAw KTsKLQkqc3lzbWFwcy0+Q01BUDIgPSBQR19WIHwgUEdfUlcgfCBWTV9QQUdFX1RPX1BIWVMo ZHN0KSB8IFBHX0EgfCBQR19NIHwKLQkgICAgcG1hcF9jYWNoZV9iaXRzKGRzdC0+bWQucGF0 X21vZGUsIDApOworCVBUX1NFVF9NQShzeXNtYXBzLT5DQUREUjEsIFBHX1YgfCBWTV9QQUdF X1RPX01BQ0goc3JjKSB8IFBHX0EpOworCVBUX1NFVF9NQShzeXNtYXBzLT5DQUREUjIsIFBH X1YgfCBQR19SVyB8IFZNX1BBR0VfVE9fTUFDSChkc3QpIHwgUEdfQSB8IFBHX00pOwogCWJj b3B5KHN5c21hcHMtPkNBRERSMSwgc3lzbWFwcy0+Q0FERFIyLCBQQUdFX1NJWkUpOwotCSpz eXNtYXBzLT5DTUFQMSA9IDA7Ci0JKnN5c21hcHMtPkNNQVAyID0gMDsKKwlQVF9TRVRfTUEo c3lzbWFwcy0+Q0FERFIxLCAwKTsKKwlQVF9TRVRfTUEoc3lzbWFwcy0+Q0FERFIyLCAwKTsK IAlzY2hlZF91bnBpbigpOwogCW10eF91bmxvY2soJnN5c21hcHMtPmxvY2spOwogfQpAQCAt NDExNSw3ICszMzY3LDYgQEAKIGJvb2xlYW5fdAogcG1hcF9wYWdlX2V4aXN0c19xdWljayhw bWFwX3QgcG1hcCwgdm1fcGFnZV90IG0pCiB7Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2aDsKIAlw dl9lbnRyeV90IHB2OwogCWludCBsb29wcyA9IDA7CiAJYm9vbGVhbl90IHJ2OwpAQCAtNDEz MywxOCArMzM4NCw2IEBACiAJCWlmIChsb29wcyA+PSAxNikKIAkJCWJyZWFrOwogCX0KLQlp ZiAoIXJ2ICYmIGxvb3BzIDwgMTYpIHsKLQkJcHZoID0gcGFfdG9fcHZoKFZNX1BBR0VfVE9f UEhZUyhtKSk7Ci0JCVRBSUxRX0ZPUkVBQ0gocHYsICZwdmgtPnB2X2xpc3QsIHB2X2xpc3Qp IHsKLQkJCWlmIChQVl9QTUFQKHB2KSA9PSBwbWFwKSB7Ci0JCQkJcnYgPSBUUlVFOwotCQkJ CWJyZWFrOwotCQkJfQotCQkJbG9vcHMrKzsKLQkJCWlmIChsb29wcyA+PSAxNikKLQkJCQli cmVhazsKLQkJfQotCX0KIAl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKIAlyZXR1cm4gKHJ2 KTsKIH0KQEAgLTQxNTgsMzMgKzMzOTcsMTcgQEAKIGludAogcG1hcF9wYWdlX3dpcmVkX21h cHBpbmdzKHZtX3BhZ2VfdCBtKQogeworCXB2X2VudHJ5X3QgcHY7CisJcHRfZW50cnlfdCAq cHRlOworCXBtYXBfdCBwbWFwOwogCWludCBjb3VudDsKIAogCWNvdW50ID0gMDsKIAlpZiAo KG0tPm9mbGFncyAmIFZQT19VTk1BTkFHRUQpICE9IDApCiAJCXJldHVybiAoY291bnQpOwog CXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKLQljb3VudCA9IHBtYXBfcHZoX3dpcmVkX21hcHBp bmdzKCZtLT5tZCwgY291bnQpOwotCWNvdW50ID0gcG1hcF9wdmhfd2lyZWRfbWFwcGluZ3Mo cGFfdG9fcHZoKFZNX1BBR0VfVE9fUEhZUyhtKSksIGNvdW50KTsKLQl2bV9wYWdlX3VubG9j a19xdWV1ZXMoKTsKLQlyZXR1cm4gKGNvdW50KTsKLX0KLQotLyoKLSAqCXBtYXBfcHZoX3dp cmVkX21hcHBpbmdzOgotICoKLSAqCVJldHVybiB0aGUgdXBkYXRlZCBudW1iZXIgImNvdW50 IiBvZiBtYW5hZ2VkIG1hcHBpbmdzIHRoYXQgYXJlIHdpcmVkLgotICovCi1zdGF0aWMgaW50 Ci1wbWFwX3B2aF93aXJlZF9tYXBwaW5ncyhzdHJ1Y3QgbWRfcGFnZSAqcHZoLCBpbnQgY291 bnQpCi17Ci0JcG1hcF90IHBtYXA7Ci0JcHRfZW50cnlfdCAqcHRlOwotCXB2X2VudHJ5X3Qg cHY7Ci0KLQltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX210eCwgTUFfT1dORUQpOwogCXNj aGVkX3BpbigpOwotCVRBSUxRX0ZPUkVBQ0gocHYsICZwdmgtPnB2X2xpc3QsIHB2X2xpc3Qp IHsKKwlUQUlMUV9GT1JFQUNIKHB2LCAmbS0+bWQucHZfbGlzdCwgcHZfbGlzdCkgewogCQlw bWFwID0gUFZfUE1BUChwdik7CiAJCVBNQVBfTE9DSyhwbWFwKTsKIAkJcHRlID0gcG1hcF9w dGVfcXVpY2socG1hcCwgcHYtPnB2X3ZhKTsKQEAgLTQxOTMsMjUgKzM0MTYsMjAgQEAKIAkJ UE1BUF9VTkxPQ0socG1hcCk7CiAJfQogCXNjaGVkX3VucGluKCk7CisJdm1fcGFnZV91bmxv Y2tfcXVldWVzKCk7CiAJcmV0dXJuIChjb3VudCk7CiB9CiAKIC8qCi0gKiBSZXR1cm5zIFRS VUUgaWYgdGhlIGdpdmVuIHBhZ2UgaXMgbWFwcGVkIGluZGl2aWR1YWxseSBvciBhcyBwYXJ0 IG9mCi0gKiBhIDRtcGFnZS4gIE90aGVyd2lzZSwgcmV0dXJucyBGQUxTRS4KKyAqIFJldHVy bnMgVFJVRSBpZiB0aGUgZ2l2ZW4gcGFnZSBpcyBtYXBwZWQuICBPdGhlcndpc2UsIHJldHVy bnMgRkFMU0UuCiAgKi8KIGJvb2xlYW5fdAogcG1hcF9wYWdlX2lzX21hcHBlZCh2bV9wYWdl X3QgbSkKIHsKLQlib29sZWFuX3QgcnY7CiAKIAlpZiAoKG0tPm9mbGFncyAmIFZQT19VTk1B TkFHRUQpICE9IDApCiAJCXJldHVybiAoRkFMU0UpOwotCXZtX3BhZ2VfbG9ja19xdWV1ZXMo KTsKLQlydiA9ICFUQUlMUV9FTVBUWSgmbS0+bWQucHZfbGlzdCkgfHwKLQkgICAgIVRBSUxR X0VNUFRZKCZwYV90b19wdmgoVk1fUEFHRV9UT19QSFlTKG0pKS0+cHZfbGlzdCk7Ci0Jdm1f cGFnZV91bmxvY2tfcXVldWVzKCk7Ci0JcmV0dXJuIChydik7CisJcmV0dXJuICghVEFJTFFf RU1QVFkoJm0tPm1kLnB2X2xpc3QpKTsKIH0KIAogLyoKQEAgLTQyMjYsMjEgKzM0NDQsMjIg QEAKIHBtYXBfcmVtb3ZlX3BhZ2VzKHBtYXBfdCBwbWFwKQogewogCXB0X2VudHJ5X3QgKnB0 ZSwgdHB0ZTsKLQl2bV9wYWdlX3QgZnJlZSA9IE5VTEw7Ci0Jdm1fcGFnZV90IG0sIG1wdGUs IG10OworCXZtX3BhZ2VfdCBtLCBmcmVlID0gTlVMTDsKIAlwdl9lbnRyeV90IHB2OwotCXN0 cnVjdCBtZF9wYWdlICpwdmg7CiAJc3RydWN0IHB2X2NodW5rICpwYywgKm5wYzsKIAlpbnQg ZmllbGQsIGlkeDsKIAlpbnQzMl90IGJpdDsKIAl1aW50MzJfdCBpbnVzZSwgYml0bWFzazsK IAlpbnQgYWxsZnJlZTsKIAotCWlmIChwbWFwICE9IFBDUFVfR0VUKGN1cnBtYXApKSB7CisJ Q1RSMShLVFJfUE1BUCwgInBtYXBfcmVtb3ZlX3BhZ2VzOiBwbWFwPSVwIiwgcG1hcCk7CisJ CisJaWYgKHBtYXAgIT0gdm1zcGFjZV9wbWFwKGN1cnRocmVhZC0+dGRfcHJvYy0+cF92bXNw YWNlKSkgewogCQlwcmludGYoIndhcm5pbmc6IHBtYXBfcmVtb3ZlX3BhZ2VzIGNhbGxlZCB3 aXRoIG5vbi1jdXJyZW50IHBtYXBcbiIpOwogCQlyZXR1cm47CiAJfQogCXZtX3BhZ2VfbG9j a19xdWV1ZXMoKTsKKwlLQVNTRVJUKHBtYXBfaXNfY3VycmVudChwbWFwKSwgKCJyZW1vdmlu ZyBwYWdlcyBmcm9tIG5vbi1jdXJyZW50IHBtYXAiKSk7CiAJUE1BUF9MT0NLKHBtYXApOwog CXNjaGVkX3BpbigpOwogCVRBSUxRX0ZPUkVBQ0hfU0FGRShwYywgJnBtYXAtPnBtX3B2Y2h1 bmssIHBjX2xpc3QsIG5wYykgewpAQCAtNDI1NCwxMiArMzQ3Myw4IEBACiAJCQkJcHYgPSAm cGMtPnBjX3B2ZW50cnlbaWR4XTsKIAkJCQlpbnVzZSAmPSB+Yml0bWFzazsKIAotCQkJCXB0 ZSA9IHBtYXBfcGRlKHBtYXAsIHB2LT5wdl92YSk7Ci0JCQkJdHB0ZSA9ICpwdGU7Ci0JCQkJ aWYgKCh0cHRlICYgUEdfUFMpID09IDApIHsKLQkJCQkJcHRlID0gdnRvcHRlKHB2LT5wdl92 YSk7Ci0JCQkJCXRwdGUgPSAqcHRlICYgflBHX1BURV9QQVQ7Ci0JCQkJfQorCQkJCXB0ZSA9 IHZ0b3B0ZShwdi0+cHZfdmEpOworCQkJCXRwdGUgPSAqcHRlID8geHBtYXBfbXRvcCgqcHRl KSA6IDA7CiAKIAkJCQlpZiAodHB0ZSA9PSAwKSB7CiAJCQkJCXByaW50ZigKQEAgLTQyODYs NTUgKzM1MDEsMzAgQEAKIAkJCQkJKCJwbWFwX3JlbW92ZV9wYWdlczogYmFkIHRwdGUgJSNq eCIsCiAJCQkJCSh1aW50bWF4X3QpdHB0ZSkpOwogCi0JCQkJcHRlX2NsZWFyKHB0ZSk7CiAK KwkJCQlQVF9DTEVBUl9WQShwdGUsIEZBTFNFKTsKKwkJCQkKIAkJCQkvKgogCQkJCSAqIFVw ZGF0ZSB0aGUgdm1fcGFnZV90IGNsZWFuL3JlZmVyZW5jZSBiaXRzLgogCQkJCSAqLwotCQkJ CWlmICgodHB0ZSAmIChQR19NIHwgUEdfUlcpKSA9PSAoUEdfTSB8IFBHX1JXKSkgewotCQkJ CQlpZiAoKHRwdGUgJiBQR19QUykgIT0gMCkgewotCQkJCQkJZm9yIChtdCA9IG07IG10IDwg Jm1bTkJQRFIgLyBQQUdFX1NJWkVdOyBtdCsrKQotCQkJCQkJCXZtX3BhZ2VfZGlydHkobXQp OwotCQkJCQl9IGVsc2UKLQkJCQkJCXZtX3BhZ2VfZGlydHkobSk7Ci0JCQkJfQorCQkJCWlm ICh0cHRlICYgUEdfTSkKKwkJCQkJdm1fcGFnZV9kaXJ0eShtKTsKKworCQkJCVRBSUxRX1JF TU9WRSgmbS0+bWQucHZfbGlzdCwgcHYsIHB2X2xpc3QpOworCQkJCWlmIChUQUlMUV9FTVBU WSgmbS0+bWQucHZfbGlzdCkpCisJCQkJCXZtX3BhZ2VfYWZsYWdfY2xlYXIobSwgUEdBX1dS SVRFQUJMRSk7CisKKwkJCQlwbWFwX3VudXNlX3B0KHBtYXAsIHB2LT5wdl92YSwgJmZyZWUp OwogCiAJCQkJLyogTWFyayBmcmVlICovCiAJCQkJUFZfU1RBVChwdl9lbnRyeV9mcmVlcysr KTsKIAkJCQlQVl9TVEFUKHB2X2VudHJ5X3NwYXJlKyspOwogCQkJCXB2X2VudHJ5X2NvdW50 LS07CiAJCQkJcGMtPnBjX21hcFtmaWVsZF0gfD0gYml0bWFzazsKLQkJCQlpZiAoKHRwdGUg JiBQR19QUykgIT0gMCkgewotCQkJCQlwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCAt PSBOQlBEUiAvIFBBR0VfU0laRTsKLQkJCQkJcHZoID0gcGFfdG9fcHZoKHRwdGUgJiBQR19Q U19GUkFNRSk7Ci0JCQkJCVRBSUxRX1JFTU9WRSgmcHZoLT5wdl9saXN0LCBwdiwgcHZfbGlz dCk7Ci0JCQkJCWlmIChUQUlMUV9FTVBUWSgmcHZoLT5wdl9saXN0KSkgewotCQkJCQkJZm9y IChtdCA9IG07IG10IDwgJm1bTkJQRFIgLyBQQUdFX1NJWkVdOyBtdCsrKQotCQkJCQkJCWlm IChUQUlMUV9FTVBUWSgmbXQtPm1kLnB2X2xpc3QpKQotCQkJCQkJCQl2bV9wYWdlX2FmbGFn X2NsZWFyKG10LCBQR0FfV1JJVEVBQkxFKTsKLQkJCQkJfQotCQkJCQltcHRlID0gcG1hcF9s b29rdXBfcHRfcGFnZShwbWFwLCBwdi0+cHZfdmEpOwotCQkJCQlpZiAobXB0ZSAhPSBOVUxM KSB7Ci0JCQkJCQlwbWFwX3JlbW92ZV9wdF9wYWdlKHBtYXAsIG1wdGUpOwotCQkJCQkJcG1h cC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQtLTsKLQkJCQkJCUtBU1NFUlQobXB0ZS0+d2ly ZV9jb3VudCA9PSBOUFRFUEcsCi0JCQkJCQkgICAgKCJwbWFwX3JlbW92ZV9wYWdlczogcHRl IHBhZ2Ugd2lyZSBjb3VudCBlcnJvciIpKTsKLQkJCQkJCW1wdGUtPndpcmVfY291bnQgPSAw OwotCQkJCQkJcG1hcF9hZGRfZGVsYXllZF9mcmVlX2xpc3QobXB0ZSwgJmZyZWUsIEZBTFNF KTsKLQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmNudC52X3dpcmVfY291bnQsIDEpOwot CQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291 bnQtLTsKLQkJCQkJVEFJTFFfUkVNT1ZFKCZtLT5tZC5wdl9saXN0LCBwdiwgcHZfbGlzdCk7 Ci0JCQkJCWlmIChUQUlMUV9FTVBUWSgmbS0+bWQucHZfbGlzdCkpIHsKLQkJCQkJCXB2aCA9 IHBhX3RvX3B2aChWTV9QQUdFX1RPX1BIWVMobSkpOwotCQkJCQkJaWYgKFRBSUxRX0VNUFRZ KCZwdmgtPnB2X2xpc3QpKQotCQkJCQkJCXZtX3BhZ2VfYWZsYWdfY2xlYXIobSwgUEdBX1dS SVRFQUJMRSk7Ci0JCQkJCX0KLQkJCQkJcG1hcF91bnVzZV9wdChwbWFwLCBwdi0+cHZfdmEs ICZmcmVlKTsKLQkJCQl9CisJCQkJcG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQtLTsJ CQkKIAkJCX0KIAkJfQorCQlQVF9VUERBVEVTX0ZMVVNIKCk7CiAJCWlmIChhbGxmcmVlKSB7 CiAJCQlQVl9TVEFUKHB2X2VudHJ5X3NwYXJlIC09IF9OUENQVik7CiAJCQlQVl9TVEFUKHBj X2NodW5rX2NvdW50LS0pOwpAQCAtNDM0Nyw2ICszNTM3LDEwIEBACiAJCQlwbWFwX3B0ZWxp c3RfZnJlZSgmcHZfdmFmcmVlLCAodm1fb2Zmc2V0X3QpcGMpOwogCQl9CiAJfQorCVBUX1VQ REFURVNfRkxVU0goKTsKKwlpZiAoKlBNQVAxKQorCQlQVF9TRVRfTUEoUEFERFIxLCAwKTsK KwogCXNjaGVkX3VucGluKCk7CiAJcG1hcF9pbnZhbGlkYXRlX2FsbChwbWFwKTsKIAl2bV9w YWdlX3VubG9ja19xdWV1ZXMoKTsKQEAgLTQzNjMsMTAgKzM1NTcsMTQgQEAKIGJvb2xlYW5f dAogcG1hcF9pc19tb2RpZmllZCh2bV9wYWdlX3QgbSkKIHsKKwlwdl9lbnRyeV90IHB2Owor CXB0X2VudHJ5X3QgKnB0ZTsKKwlwbWFwX3QgcG1hcDsKIAlib29sZWFuX3QgcnY7CiAKIAlL QVNTRVJUKChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VEKSA9PSAwLAogCSAgICAoInBtYXBf aXNfbW9kaWZpZWQ6IHBhZ2UgJXAgaXMgbm90IG1hbmFnZWQiLCBtKSk7CisJcnYgPSBGQUxT RTsKIAogCS8qCiAJICogSWYgdGhlIHBhZ2UgaXMgbm90IFZQT19CVVNZLCB0aGVuIFBHQV9X UklURUFCTEUgY2Fubm90IGJlCkBAIC00Mzc2LDQwICszNTc0LDIyIEBACiAJVk1fT0JKRUNU X0xPQ0tfQVNTRVJUKG0tPm9iamVjdCwgTUFfT1dORUQpOwogCWlmICgobS0+b2ZsYWdzICYg VlBPX0JVU1kpID09IDAgJiYKIAkgICAgKG0tPmFmbGFncyAmIFBHQV9XUklURUFCTEUpID09 IDApCi0JCXJldHVybiAoRkFMU0UpOworCQlyZXR1cm4gKHJ2KTsKIAl2bV9wYWdlX2xvY2tf cXVldWVzKCk7Ci0JcnYgPSBwbWFwX2lzX21vZGlmaWVkX3B2aCgmbS0+bWQpIHx8Ci0JICAg IHBtYXBfaXNfbW9kaWZpZWRfcHZoKHBhX3RvX3B2aChWTV9QQUdFX1RPX1BIWVMobSkpKTsK LQl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKLQlyZXR1cm4gKHJ2KTsKLX0KLQotLyoKLSAq IFJldHVybnMgVFJVRSBpZiBhbnkgb2YgdGhlIGdpdmVuIG1hcHBpbmdzIHdlcmUgdXNlZCB0 byBtb2RpZnkKLSAqIHBoeXNpY2FsIG1lbW9yeS4gIE90aGVyd2lzZSwgcmV0dXJucyBGQUxT RS4gIEJvdGggcGFnZSBhbmQgMm1wYWdlCi0gKiBtYXBwaW5ncyBhcmUgc3VwcG9ydGVkLgot ICovCi1zdGF0aWMgYm9vbGVhbl90Ci1wbWFwX2lzX21vZGlmaWVkX3B2aChzdHJ1Y3QgbWRf cGFnZSAqcHZoKQotewotCXB2X2VudHJ5X3QgcHY7Ci0JcHRfZW50cnlfdCAqcHRlOwotCXBt YXBfdCBwbWFwOwotCWJvb2xlYW5fdCBydjsKLQotCW10eF9hc3NlcnQoJnZtX3BhZ2VfcXVl dWVfbXR4LCBNQV9PV05FRCk7Ci0JcnYgPSBGQUxTRTsKIAlzY2hlZF9waW4oKTsKLQlUQUlM UV9GT1JFQUNIKHB2LCAmcHZoLT5wdl9saXN0LCBwdl9saXN0KSB7CisJVEFJTFFfRk9SRUFD SChwdiwgJm0tPm1kLnB2X2xpc3QsIHB2X2xpc3QpIHsKIAkJcG1hcCA9IFBWX1BNQVAocHYp OwogCQlQTUFQX0xPQ0socG1hcCk7CiAJCXB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHB2 LT5wdl92YSk7Ci0JCXJ2ID0gKCpwdGUgJiAoUEdfTSB8IFBHX1JXKSkgPT0gKFBHX00gfCBQ R19SVyk7CisJCXJ2ID0gKCpwdGUgJiBQR19NKSAhPSAwOwogCQlQTUFQX1VOTE9DSyhwbWFw KTsKIAkJaWYgKHJ2KQogCQkJYnJlYWs7CiAJfQorCWlmICgqUE1BUDEpCisJCVBUX1NFVF9N QShQQUREUjEsIDApOwogCXNjaGVkX3VucGluKCk7CisJdm1fcGFnZV91bmxvY2tfcXVldWVz KCk7CiAJcmV0dXJuIChydik7CiB9CiAKQEAgLTQ0MTksNjAgKzM1OTksNDYgQEAKICAqCVJl dHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgYWRkcmVzcyBpcyBl bGdpYmxlCiAgKglmb3IgcHJlZmF1bHQuCiAgKi8KLWJvb2xlYW5fdAotcG1hcF9pc19wcmVm YXVsdGFibGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IGFkZHIpCitzdGF0aWMgYm9vbGVh bl90CitwbWFwX2lzX3ByZWZhdWx0YWJsZV9sb2NrZWQocG1hcF90IHBtYXAsIHZtX29mZnNl dF90IGFkZHIpCiB7Ci0JcGRfZW50cnlfdCAqcGRlOwogCXB0X2VudHJ5X3QgKnB0ZTsKLQli b29sZWFuX3QgcnY7CisJYm9vbGVhbl90IHJ2ID0gRkFMU0U7CiAKLQlydiA9IEZBTFNFOwot CVBNQVBfTE9DSyhwbWFwKTsKLQlwZGUgPSBwbWFwX3BkZShwbWFwLCBhZGRyKTsKLQlpZiAo KnBkZSAhPSAwICYmICgqcGRlICYgUEdfUFMpID09IDApIHsKKwlyZXR1cm4gKHJ2KTsKKwkK KwlpZiAocG1hcF9pc19jdXJyZW50KHBtYXApICYmICpwbWFwX3BkZShwbWFwLCBhZGRyKSkg ewogCQlwdGUgPSB2dG9wdGUoYWRkcik7Ci0JCXJ2ID0gKnB0ZSA9PSAwOworCQlydiA9ICgq cHRlID09IDApOwogCX0KLQlQTUFQX1VOTE9DSyhwbWFwKTsKIAlyZXR1cm4gKHJ2KTsKIH0K IAotLyoKLSAqCXBtYXBfaXNfcmVmZXJlbmNlZDoKLSAqCi0gKglSZXR1cm4gd2hldGhlciBv ciBub3QgdGhlIHNwZWNpZmllZCBwaHlzaWNhbCBwYWdlIHdhcyByZWZlcmVuY2VkCi0gKglp biBhbnkgcGh5c2ljYWwgbWFwcy4KLSAqLwogYm9vbGVhbl90Ci1wbWFwX2lzX3JlZmVyZW5j ZWQodm1fcGFnZV90IG0pCitwbWFwX2lzX3ByZWZhdWx0YWJsZShwbWFwX3QgcG1hcCwgdm1f b2Zmc2V0X3QgYWRkcikKIHsKIAlib29sZWFuX3QgcnY7Ci0KLQlLQVNTRVJUKChtLT5vZmxh Z3MgJiBWUE9fVU5NQU5BR0VEKSA9PSAwLAotCSAgICAoInBtYXBfaXNfcmVmZXJlbmNlZDog cGFnZSAlcCBpcyBub3QgbWFuYWdlZCIsIG0pKTsKLQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7 Ci0JcnYgPSBwbWFwX2lzX3JlZmVyZW5jZWRfcHZoKCZtLT5tZCkgfHwKLQkgICAgcG1hcF9p c19yZWZlcmVuY2VkX3B2aChwYV90b19wdmgoVk1fUEFHRV9UT19QSFlTKG0pKSk7Ci0Jdm1f cGFnZV91bmxvY2tfcXVldWVzKCk7CisJCisJUE1BUF9MT0NLKHBtYXApOworCXJ2ID0gcG1h cF9pc19wcmVmYXVsdGFibGVfbG9ja2VkKHBtYXAsIGFkZHIpOworCVBNQVBfVU5MT0NLKHBt YXApOwogCXJldHVybiAocnYpOwogfQogCi0vKgotICogUmV0dXJucyBUUlVFIGlmIGFueSBv ZiB0aGUgZ2l2ZW4gbWFwcGluZ3Mgd2VyZSByZWZlcmVuY2VkIGFuZCBGQUxTRQotICogb3Ro ZXJ3aXNlLiAgQm90aCBwYWdlIGFuZCA0bXBhZ2UgbWFwcGluZ3MgYXJlIHN1cHBvcnRlZC4K LSAqLwotc3RhdGljIGJvb2xlYW5fdAotcG1hcF9pc19yZWZlcmVuY2VkX3B2aChzdHJ1Y3Qg bWRfcGFnZSAqcHZoKQorYm9vbGVhbl90CitwbWFwX2lzX3JlZmVyZW5jZWQodm1fcGFnZV90 IG0pCiB7CiAJcHZfZW50cnlfdCBwdjsKIAlwdF9lbnRyeV90ICpwdGU7CiAJcG1hcF90IHBt YXA7CiAJYm9vbGVhbl90IHJ2OwogCi0JbXR4X2Fzc2VydCgmdm1fcGFnZV9xdWV1ZV9tdHgs IE1BX09XTkVEKTsKKwlLQVNTRVJUKChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VEKSA9PSAw LAorCSAgICAoInBtYXBfaXNfcmVmZXJlbmNlZDogcGFnZSAlcCBpcyBub3QgbWFuYWdlZCIs IG0pKTsKIAlydiA9IEZBTFNFOworCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlzY2hlZF9w aW4oKTsKLQlUQUlMUV9GT1JFQUNIKHB2LCAmcHZoLT5wdl9saXN0LCBwdl9saXN0KSB7CisJ VEFJTFFfRk9SRUFDSChwdiwgJm0tPm1kLnB2X2xpc3QsIHB2X2xpc3QpIHsKIAkJcG1hcCA9 IFBWX1BNQVAocHYpOwogCQlQTUFQX0xPQ0socG1hcCk7CiAJCXB0ZSA9IHBtYXBfcHRlX3F1 aWNrKHBtYXAsIHB2LT5wdl92YSk7CkBAIC00NDgxLDIyICszNjQ3LDUyIEBACiAJCWlmIChy dikKIAkJCWJyZWFrOwogCX0KKwlpZiAoKlBNQVAxKQorCQlQVF9TRVRfTUEoUEFERFIxLCAw KTsKIAlzY2hlZF91bnBpbigpOworCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwogCXJldHVy biAocnYpOwogfQogCit2b2lkCitwbWFwX21hcF9yZWFkb25seShwbWFwX3QgcG1hcCwgdm1f b2Zmc2V0X3QgdmEsIGludCBsZW4pCit7CisJaW50IGksIG5wYWdlcyA9IHJvdW5kX3BhZ2Uo bGVuKSA+PiBQQUdFX1NISUZUOworCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgewor CQlwdF9lbnRyeV90ICpwdGU7CisJCXB0ZSA9IHBtYXBfcHRlKHBtYXAsICh2bV9vZmZzZXRf dCkodmEgKyBpKlBBR0VfU0laRSkpOworCQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7CisJCXB0 ZV9zdG9yZShwdGUsIHhwbWFwX210b3AoKnB0ZSAmIH4oUEdfUld8UEdfTSkpKTsKKwkJdm1f cGFnZV91bmxvY2tfcXVldWVzKCk7CisJCVBNQVBfTUFSS19QUklWKHhwbWFwX210b3AoKnB0 ZSkpOworCQlwbWFwX3B0ZV9yZWxlYXNlKHB0ZSk7CisJfQorfQorCit2b2lkCitwbWFwX21h cF9yZWFkd3JpdGUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhLCBpbnQgbGVuKQorewor CWludCBpLCBucGFnZXMgPSByb3VuZF9wYWdlKGxlbikgPj4gUEFHRV9TSElGVDsKKwlmb3Ig KGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJcHRfZW50cnlfdCAqcHRlOworCQlwdGUg PSBwbWFwX3B0ZShwbWFwLCAodm1fb2Zmc2V0X3QpKHZhICsgaSpQQUdFX1NJWkUpKTsKKwkJ UE1BUF9NQVJLX1VOUFJJVih4cG1hcF9tdG9wKCpwdGUpKTsKKwkJdm1fcGFnZV9sb2NrX3F1 ZXVlcygpOworCQlwdGVfc3RvcmUocHRlLCB4cG1hcF9tdG9wKCpwdGUpIHwgKFBHX1JXfFBH X00pKTsKKwkJdm1fcGFnZV91bmxvY2tfcXVldWVzKCk7CisJCXBtYXBfcHRlX3JlbGVhc2Uo cHRlKTsKKwl9Cit9CisKIC8qCiAgKiBDbGVhciB0aGUgd3JpdGUgYW5kIG1vZGlmaWVkIGJp dHMgaW4gZWFjaCBvZiB0aGUgZ2l2ZW4gcGFnZSdzIG1hcHBpbmdzLgogICovCiB2b2lkCiBw bWFwX3JlbW92ZV93cml0ZSh2bV9wYWdlX3QgbSkKIHsKLQlzdHJ1Y3QgbWRfcGFnZSAqcHZo OwotCXB2X2VudHJ5X3QgbmV4dF9wdiwgcHY7CisJcHZfZW50cnlfdCBwdjsKIAlwbWFwX3Qg cG1hcDsKLQlwZF9lbnRyeV90ICpwZGU7CiAJcHRfZW50cnlfdCBvbGRwdGUsICpwdGU7Ci0J dm1fb2Zmc2V0X3QgdmE7CiAKIAlLQVNTRVJUKChtLT5vZmxhZ3MgJiBWUE9fVU5NQU5BR0VE KSA9PSAwLAogCSAgICAoInBtYXBfcmVtb3ZlX3dyaXRlOiBwYWdlICVwIGlzIG5vdCBtYW5h Z2VkIiwgbSkpOwpAQCAtNDUxMiwzNCArMzcwOCwyNCBAQAogCQlyZXR1cm47CiAJdm1fcGFn ZV9sb2NrX3F1ZXVlcygpOwogCXNjaGVkX3BpbigpOwotCXB2aCA9IHBhX3RvX3B2aChWTV9Q QUdFX1RPX1BIWVMobSkpOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShwdiwgJnB2aC0+cHZfbGlz dCwgcHZfbGlzdCwgbmV4dF9wdikgewotCQl2YSA9IHB2LT5wdl92YTsKLQkJcG1hcCA9IFBW X1BNQVAocHYpOwotCQlQTUFQX0xPQ0socG1hcCk7Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAs IHZhKTsKLQkJaWYgKCgqcGRlICYgUEdfUlcpICE9IDApCi0JCQkodm9pZClwbWFwX2RlbW90 ZV9wZGUocG1hcCwgcGRlLCB2YSk7Ci0JCVBNQVBfVU5MT0NLKHBtYXApOwotCX0KIAlUQUlM UV9GT1JFQUNIKHB2LCAmbS0+bWQucHZfbGlzdCwgcHZfbGlzdCkgewogCQlwbWFwID0gUFZf UE1BUChwdik7CiAJCVBNQVBfTE9DSyhwbWFwKTsKLQkJcGRlID0gcG1hcF9wZGUocG1hcCwg cHYtPnB2X3ZhKTsKLQkJS0FTU0VSVCgoKnBkZSAmIFBHX1BTKSA9PSAwLCAoInBtYXBfY2xl YXJfd3JpdGU6IGZvdW5kIgotCQkgICAgIiBhIDRtcGFnZSBpbiBwYWdlICVwJ3MgcHYgbGlz dCIsIG0pKTsKIAkJcHRlID0gcG1hcF9wdGVfcXVpY2socG1hcCwgcHYtPnB2X3ZhKTsKIHJl dHJ5OgogCQlvbGRwdGUgPSAqcHRlOwogCQlpZiAoKG9sZHB0ZSAmIFBHX1JXKSAhPSAwKSB7 CisJCQl2bV9wYWRkcl90IG5ld3B0ZSA9IG9sZHB0ZSAmIH4oUEdfUlcgfCBQR19NKTsKKwkJ CQogCQkJLyoKIAkJCSAqIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIHB0ZSBpcyAzMiBvciA2 NCBiaXRzCiAJCQkgKiBpbiBzaXplLCBQR19SVyBhbmQgUEdfTSBhcmUgYW1vbmcgdGhlIGxl YXN0CiAJCQkgKiBzaWduaWZpY2FudCAzMiBiaXRzLgogCQkJICovCi0JCQlpZiAoIWF0b21p Y19jbXBzZXRfaW50KCh1X2ludCAqKXB0ZSwgb2xkcHRlLAotCQkJICAgIG9sZHB0ZSAmIH4o UEdfUlcgfCBQR19NKSkpCisJCQlQVF9TRVRfVkFfTUEocHRlLCBuZXdwdGUsIFRSVUUpOwor CQkJaWYgKCpwdGUgIT0gbmV3cHRlKQogCQkJCWdvdG8gcmV0cnk7CisJCQkKIAkJCWlmICgo b2xkcHRlICYgUEdfTSkgIT0gMCkKIAkJCQl2bV9wYWdlX2RpcnR5KG0pOwogCQkJcG1hcF9p bnZhbGlkYXRlX3BhZ2UocG1hcCwgcHYtPnB2X3ZhKTsKQEAgLTQ1NDcsNiArMzczMyw5IEBA CiAJCVBNQVBfVU5MT0NLKHBtYXApOwogCX0KIAl2bV9wYWdlX2FmbGFnX2NsZWFyKG0sIFBH QV9XUklURUFCTEUpOworCVBUX1VQREFURVNfRkxVU0goKTsKKwlpZiAoKlBNQVAxKQorCQlQ VF9TRVRfTUEoUEFERFIxLCAwKTsKIAlzY2hlZF91bnBpbigpOwogCXZtX3BhZ2VfdW5sb2Nr X3F1ZXVlcygpOwogfQpAQCAtNDU2Niw0OSArMzc1NSwxNSBAQAogaW50CiBwbWFwX3RzX3Jl ZmVyZW5jZWQodm1fcGFnZV90IG0pCiB7Ci0Jc3RydWN0IG1kX3BhZ2UgKnB2aDsKIAlwdl9l bnRyeV90IHB2LCBwdmYsIHB2bjsKIAlwbWFwX3QgcG1hcDsKLQlwZF9lbnRyeV90IG9sZHBk ZSwgKnBkZTsKIAlwdF9lbnRyeV90ICpwdGU7Ci0Jdm1fb2Zmc2V0X3QgdmE7CiAJaW50IHJ0 dmFsID0gMDsKIAogCUtBU1NFUlQoKG0tPm9mbGFncyAmIFZQT19VTk1BTkFHRUQpID09IDAs CiAJICAgICgicG1hcF90c19yZWZlcmVuY2VkOiBwYWdlICVwIGlzIG5vdCBtYW5hZ2VkIiwg bSkpOwotCXB2aCA9IHBhX3RvX3B2aChWTV9QQUdFX1RPX1BIWVMobSkpOwogCXZtX3BhZ2Vf bG9ja19xdWV1ZXMoKTsKIAlzY2hlZF9waW4oKTsKLQlUQUlMUV9GT1JFQUNIX1NBRkUocHYs ICZwdmgtPnB2X2xpc3QsIHB2X2xpc3QsIHB2bikgewotCQl2YSA9IHB2LT5wdl92YTsKLQkJ cG1hcCA9IFBWX1BNQVAocHYpOwotCQlQTUFQX0xPQ0socG1hcCk7Ci0JCXBkZSA9IHBtYXBf cGRlKHBtYXAsIHZhKTsKLQkJb2xkcGRlID0gKnBkZTsKLQkJaWYgKChvbGRwZGUgJiBQR19B KSAhPSAwKSB7Ci0JCQlpZiAocG1hcF9kZW1vdGVfcGRlKHBtYXAsIHBkZSwgdmEpKSB7Ci0J CQkJaWYgKChvbGRwZGUgJiBQR19XKSA9PSAwKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIFJlbW92 ZSB0aGUgbWFwcGluZyB0byBhIHNpbmdsZSBwYWdlCi0JCQkJCSAqIHNvIHRoYXQgYSBzdWJz ZXF1ZW50IGFjY2VzcyBtYXkKLQkJCQkJICogcmVwcm9tb3RlLiAgU2luY2UgdGhlIHVuZGVy bHlpbmcKLQkJCQkJICogcGFnZSB0YWJsZSBwYWdlIGlzIGZ1bGx5IHBvcHVsYXRlZCwKLQkJ CQkJICogdGhpcyByZW1vdmFsIG5ldmVyIGZyZWVzIGEgcGFnZQotCQkJCQkgKiB0YWJsZSBw YWdlLgotCQkJCQkgKi8KLQkJCQkJdmEgKz0gVk1fUEFHRV9UT19QSFlTKG0pIC0gKG9sZHBk ZSAmCi0JCQkJCSAgICBQR19QU19GUkFNRSk7Ci0JCQkJCXBtYXBfcmVtb3ZlX3BhZ2UocG1h cCwgdmEsIE5VTEwpOwotCQkJCQlydHZhbCsrOwotCQkJCQlpZiAocnR2YWwgPiA0KSB7Ci0J CQkJCQlQTUFQX1VOTE9DSyhwbWFwKTsKLQkJCQkJCWdvdG8gb3V0OwotCQkJCQl9Ci0JCQkJ fQotCQkJfQotCQl9Ci0JCVBNQVBfVU5MT0NLKHBtYXApOwotCX0KIAlpZiAoKHB2ID0gVEFJ TFFfRklSU1QoJm0tPm1kLnB2X2xpc3QpKSAhPSBOVUxMKSB7CiAJCXB2ZiA9IHB2OwogCQlk byB7CkBAIC00NjE3LDEyICszNzcyLDkgQEAKIAkJCVRBSUxRX0lOU0VSVF9UQUlMKCZtLT5t ZC5wdl9saXN0LCBwdiwgcHZfbGlzdCk7CiAJCQlwbWFwID0gUFZfUE1BUChwdik7CiAJCQlQ TUFQX0xPQ0socG1hcCk7Ci0JCQlwZGUgPSBwbWFwX3BkZShwbWFwLCBwdi0+cHZfdmEpOwot CQkJS0FTU0VSVCgoKnBkZSAmIFBHX1BTKSA9PSAwLCAoInBtYXBfdHNfcmVmZXJlbmNlZDoi Ci0JCQkgICAgIiBmb3VuZCBhIDRtcGFnZSBpbiBwYWdlICVwJ3MgcHYgbGlzdCIsIG0pKTsK IAkJCXB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHB2LT5wdl92YSk7CiAJCQlpZiAoKCpw dGUgJiBQR19BKSAhPSAwKSB7Ci0JCQkJYXRvbWljX2NsZWFyX2ludCgodV9pbnQgKilwdGUs IFBHX0EpOworCQkJCVBUX1NFVF9WQV9NQShwdGUsICpwdGUgJiB+UEdfQSwgRkFMU0UpOwog CQkJCXBtYXBfaW52YWxpZGF0ZV9wYWdlKHBtYXAsIHB2LT5wdl92YSk7CiAJCQkJcnR2YWwr KzsKIAkJCQlpZiAocnR2YWwgPiA0KQpAQCAtNDYzMSw3ICszNzgzLDkgQEAKIAkJCVBNQVBf VU5MT0NLKHBtYXApOwogCQl9IHdoaWxlICgocHYgPSBwdm4pICE9IE5VTEwgJiYgcHYgIT0g cHZmKTsKIAl9Ci1vdXQ6CisJUFRfVVBEQVRFU19GTFVTSCgpOworCWlmICgqUE1BUDEpCisJ CVBUX1NFVF9NQShQQUREUjEsIDApOwogCXNjaGVkX3VucGluKCk7CiAJdm1fcGFnZV91bmxv Y2tfcXVldWVzKCk7CiAJcmV0dXJuIChydHZhbCk7CkBAIC00NjQzLDEyICszNzk3LDkgQEAK IHZvaWQKIHBtYXBfY2xlYXJfbW9kaWZ5KHZtX3BhZ2VfdCBtKQogewotCXN0cnVjdCBtZF9w YWdlICpwdmg7Ci0JcHZfZW50cnlfdCBuZXh0X3B2LCBwdjsKKwlwdl9lbnRyeV90IHB2Owog CXBtYXBfdCBwbWFwOwotCXBkX2VudHJ5X3Qgb2xkcGRlLCAqcGRlOwotCXB0X2VudHJ5X3Qg b2xkcHRlLCAqcHRlOwotCXZtX29mZnNldF90IHZhOworCXB0X2VudHJ5X3QgKnB0ZTsKIAog CUtBU1NFUlQoKG0tPm9mbGFncyAmIFZQT19VTk1BTkFHRUQpID09IDAsCiAJICAgICgicG1h cF9jbGVhcl9tb2RpZnk6IHBhZ2UgJXAgaXMgbm90IG1hbmFnZWQiLCBtKSk7CkBAIC00NjY1 LDQ5ICszODE2LDkgQEAKIAkJcmV0dXJuOwogCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKIAlz Y2hlZF9waW4oKTsKLQlwdmggPSBwYV90b19wdmgoVk1fUEFHRV9UT19QSFlTKG0pKTsKLQlU QUlMUV9GT1JFQUNIX1NBRkUocHYsICZwdmgtPnB2X2xpc3QsIHB2X2xpc3QsIG5leHRfcHYp IHsKLQkJdmEgPSBwdi0+cHZfdmE7Ci0JCXBtYXAgPSBQVl9QTUFQKHB2KTsKLQkJUE1BUF9M T0NLKHBtYXApOwotCQlwZGUgPSBwbWFwX3BkZShwbWFwLCB2YSk7Ci0JCW9sZHBkZSA9ICpw ZGU7Ci0JCWlmICgob2xkcGRlICYgUEdfUlcpICE9IDApIHsKLQkJCWlmIChwbWFwX2RlbW90 ZV9wZGUocG1hcCwgcGRlLCB2YSkpIHsKLQkJCQlpZiAoKG9sZHBkZSAmIFBHX1cpID09IDAp IHsKLQkJCQkJLyoKLQkJCQkJICogV3JpdGUgcHJvdGVjdCB0aGUgbWFwcGluZyB0byBhCi0J CQkJCSAqIHNpbmdsZSBwYWdlIHNvIHRoYXQgYSBzdWJzZXF1ZW50Ci0JCQkJCSAqIHdyaXRl IGFjY2VzcyBtYXkgcmVwcm9tb3RlLgotCQkJCQkgKi8KLQkJCQkJdmEgKz0gVk1fUEFHRV9U T19QSFlTKG0pIC0gKG9sZHBkZSAmCi0JCQkJCSAgICBQR19QU19GUkFNRSk7Ci0JCQkJCXB0 ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHZhKTsKLQkJCQkJb2xkcHRlID0gKnB0ZTsKLQkJ CQkJaWYgKChvbGRwdGUgJiBQR19WKSAhPSAwKSB7Ci0JCQkJCQkvKgotCQkJCQkJICogUmVn YXJkbGVzcyBvZiB3aGV0aGVyIGEgcHRlIGlzIDMyIG9yIDY0IGJpdHMKLQkJCQkJCSAqIGlu IHNpemUsIFBHX1JXIGFuZCBQR19NIGFyZSBhbW9uZyB0aGUgbGVhc3QKLQkJCQkJCSAqIHNp Z25pZmljYW50IDMyIGJpdHMuCi0JCQkJCQkgKi8KLQkJCQkJCXdoaWxlICghYXRvbWljX2Nt cHNldF9pbnQoKHVfaW50ICopcHRlLAotCQkJCQkJICAgIG9sZHB0ZSwKLQkJCQkJCSAgICBv bGRwdGUgJiB+KFBHX00gfCBQR19SVykpKQotCQkJCQkJCW9sZHB0ZSA9ICpwdGU7Ci0JCQkJ CQl2bV9wYWdlX2RpcnR5KG0pOwotCQkJCQkJcG1hcF9pbnZhbGlkYXRlX3BhZ2UocG1hcCwg dmEpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCVBNQVBfVU5MT0NLKHBtYXApOwot CX0KIAlUQUlMUV9GT1JFQUNIKHB2LCAmbS0+bWQucHZfbGlzdCwgcHZfbGlzdCkgewogCQlw bWFwID0gUFZfUE1BUChwdik7CiAJCVBNQVBfTE9DSyhwbWFwKTsKLQkJcGRlID0gcG1hcF9w ZGUocG1hcCwgcHYtPnB2X3ZhKTsKLQkJS0FTU0VSVCgoKnBkZSAmIFBHX1BTKSA9PSAwLCAo InBtYXBfY2xlYXJfbW9kaWZ5OiBmb3VuZCIKLQkJICAgICIgYSA0bXBhZ2UgaW4gcGFnZSAl cCdzIHB2IGxpc3QiLCBtKSk7CiAJCXB0ZSA9IHBtYXBfcHRlX3F1aWNrKHBtYXAsIHB2LT5w dl92YSk7CiAJCWlmICgoKnB0ZSAmIChQR19NIHwgUEdfUlcpKSA9PSAoUEdfTSB8IFBHX1JX KSkgewogCQkJLyoKQEAgLTQ3MTUsNyArMzgyNiw3IEBACiAJCQkgKiBpbiBzaXplLCBQR19N IGlzIGFtb25nIHRoZSBsZWFzdCBzaWduaWZpY2FudAogCQkJICogMzIgYml0cy4gCiAJCQkg Ki8KLQkJCWF0b21pY19jbGVhcl9pbnQoKHVfaW50ICopcHRlLCBQR19NKTsKKwkJCVBUX1NF VF9WQV9NQShwdGUsICpwdGUgJiB+UEdfTSwgRkFMU0UpOwogCQkJcG1hcF9pbnZhbGlkYXRl X3BhZ2UocG1hcCwgcHYtPnB2X3ZhKTsKIAkJfQogCQlQTUFQX1VOTE9DSyhwbWFwKTsKQEAg LTQ3MzIsNDYgKzM4NDMsMTcgQEAKIHZvaWQKIHBtYXBfY2xlYXJfcmVmZXJlbmNlKHZtX3Bh Z2VfdCBtKQogewotCXN0cnVjdCBtZF9wYWdlICpwdmg7Ci0JcHZfZW50cnlfdCBuZXh0X3B2 LCBwdjsKKwlwdl9lbnRyeV90IHB2OwogCXBtYXBfdCBwbWFwOwotCXBkX2VudHJ5X3Qgb2xk cGRlLCAqcGRlOwogCXB0X2VudHJ5X3QgKnB0ZTsKLQl2bV9vZmZzZXRfdCB2YTsKIAogCUtB U1NFUlQoKG0tPm9mbGFncyAmIFZQT19VTk1BTkFHRUQpID09IDAsCiAJICAgICgicG1hcF9j bGVhcl9yZWZlcmVuY2U6IHBhZ2UgJXAgaXMgbm90IG1hbmFnZWQiLCBtKSk7CiAJdm1fcGFn ZV9sb2NrX3F1ZXVlcygpOwogCXNjaGVkX3BpbigpOwotCXB2aCA9IHBhX3RvX3B2aChWTV9Q QUdFX1RPX1BIWVMobSkpOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShwdiwgJnB2aC0+cHZfbGlz dCwgcHZfbGlzdCwgbmV4dF9wdikgewotCQl2YSA9IHB2LT5wdl92YTsKLQkJcG1hcCA9IFBW X1BNQVAocHYpOwotCQlQTUFQX0xPQ0socG1hcCk7Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAs IHZhKTsKLQkJb2xkcGRlID0gKnBkZTsKLQkJaWYgKChvbGRwZGUgJiBQR19BKSAhPSAwKSB7 Ci0JCQlpZiAocG1hcF9kZW1vdGVfcGRlKHBtYXAsIHBkZSwgdmEpKSB7Ci0JCQkJLyoKLQkJ CQkgKiBSZW1vdmUgdGhlIG1hcHBpbmcgdG8gYSBzaW5nbGUgcGFnZSBzbwotCQkJCSAqIHRo YXQgYSBzdWJzZXF1ZW50IGFjY2VzcyBtYXkgcmVwcm9tb3RlLgotCQkJCSAqIFNpbmNlIHRo ZSB1bmRlcmx5aW5nIHBhZ2UgdGFibGUgcGFnZSBpcwotCQkJCSAqIGZ1bGx5IHBvcHVsYXRl ZCwgdGhpcyByZW1vdmFsIG5ldmVyIGZyZWVzCi0JCQkJICogYSBwYWdlIHRhYmxlIHBhZ2Uu Ci0JCQkJICovCi0JCQkJdmEgKz0gVk1fUEFHRV9UT19QSFlTKG0pIC0gKG9sZHBkZSAmCi0J CQkJICAgIFBHX1BTX0ZSQU1FKTsKLQkJCQlwbWFwX3JlbW92ZV9wYWdlKHBtYXAsIHZhLCBO VUxMKTsKLQkJCX0KLQkJfQotCQlQTUFQX1VOTE9DSyhwbWFwKTsKLQl9CiAJVEFJTFFfRk9S RUFDSChwdiwgJm0tPm1kLnB2X2xpc3QsIHB2X2xpc3QpIHsKIAkJcG1hcCA9IFBWX1BNQVAo cHYpOwogCQlQTUFQX0xPQ0socG1hcCk7Ci0JCXBkZSA9IHBtYXBfcGRlKHBtYXAsIHB2LT5w dl92YSk7Ci0JCUtBU1NFUlQoKCpwZGUgJiBQR19QUykgPT0gMCwgKCJwbWFwX2NsZWFyX3Jl ZmVyZW5jZTogZm91bmQiCi0JCSAgICAiIGEgNG1wYWdlIGluIHBhZ2UgJXAncyBwdiBsaXN0 IiwgbSkpOwogCQlwdGUgPSBwbWFwX3B0ZV9xdWljayhwbWFwLCBwdi0+cHZfdmEpOwogCQlp ZiAoKCpwdGUgJiBQR19BKSAhPSAwKSB7CiAJCQkvKgpAQCAtNDc3OSw3ICszODYxLDcgQEAK IAkJCSAqIGluIHNpemUsIFBHX0EgaXMgYW1vbmcgdGhlIGxlYXN0IHNpZ25pZmljYW50CiAJ CQkgKiAzMiBiaXRzLiAKIAkJCSAqLwotCQkJYXRvbWljX2NsZWFyX2ludCgodV9pbnQgKilw dGUsIFBHX0EpOworCQkJUFRfU0VUX1ZBX01BKHB0ZSwgKnB0ZSAmIH5QR19BLCBGQUxTRSk7 CiAJCQlwbWFwX2ludmFsaWRhdGVfcGFnZShwbWFwLCBwdi0+cHZfdmEpOwogCQl9CiAJCVBN QVBfVU5MT0NLKHBtYXApOwpAQCAtNDc5Miw0MCArMzg3NCw2IEBACiAgKiBNaXNjZWxsYW5l b3VzIHN1cHBvcnQgcm91dGluZXMgZm9sbG93CiAgKi8KIAotLyogQWRqdXN0IHRoZSBjYWNo ZSBtb2RlIGZvciBhIDRLQiBwYWdlIG1hcHBlZCB2aWEgYSBQVEUuICovCi1zdGF0aWMgX19p bmxpbmUgdm9pZAotcG1hcF9wdGVfYXR0cihwdF9lbnRyeV90ICpwdGUsIGludCBjYWNoZV9i aXRzKQotewotCXVfaW50IG9wdGUsIG5wdGU7Ci0KLQkvKgotCSAqIFRoZSBjYWNoZSBtb2Rl IGJpdHMgYXJlIGFsbCBpbiB0aGUgbG93IDMyLWJpdHMgb2YgdGhlCi0JICogUFRFLCBzbyB3 ZSBjYW4ganVzdCBzcGluIG9uIHVwZGF0aW5nIHRoZSBsb3cgMzItYml0cy4KLQkgKi8KLQlk byB7Ci0JCW9wdGUgPSAqKHVfaW50ICopcHRlOwotCQlucHRlID0gb3B0ZSAmIH5QR19QVEVf Q0FDSEU7Ci0JCW5wdGUgfD0gY2FjaGVfYml0czsKLQl9IHdoaWxlIChucHRlICE9IG9wdGUg JiYgIWF0b21pY19jbXBzZXRfaW50KCh1X2ludCAqKXB0ZSwgb3B0ZSwgbnB0ZSkpOwotfQot Ci0vKiBBZGp1c3QgdGhlIGNhY2hlIG1vZGUgZm9yIGEgMi80TUIgcGFnZSBtYXBwZWQgdmlh IGEgUERFLiAqLwotc3RhdGljIF9faW5saW5lIHZvaWQKLXBtYXBfcGRlX2F0dHIocGRfZW50 cnlfdCAqcGRlLCBpbnQgY2FjaGVfYml0cykKLXsKLQl1X2ludCBvcGRlLCBucGRlOwotCi0J LyoKLQkgKiBUaGUgY2FjaGUgbW9kZSBiaXRzIGFyZSBhbGwgaW4gdGhlIGxvdyAzMi1iaXRz IG9mIHRoZQotCSAqIFBERSwgc28gd2UgY2FuIGp1c3Qgc3BpbiBvbiB1cGRhdGluZyB0aGUg bG93IDMyLWJpdHMuCi0JICovCi0JZG8gewotCQlvcGRlID0gKih1X2ludCAqKXBkZTsKLQkJ bnBkZSA9IG9wZGUgJiB+UEdfUERFX0NBQ0hFOwotCQlucGRlIHw9IGNhY2hlX2JpdHM7Ci0J fSB3aGlsZSAobnBkZSAhPSBvcGRlICYmICFhdG9taWNfY21wc2V0X2ludCgodV9pbnQgKilw ZGUsIG9wZGUsIG5wZGUpKTsKLX0KLQogLyoKICAqIE1hcCBhIHNldCBvZiBwaHlzaWNhbCBt ZW1vcnkgcGFnZXMgaW50byB0aGUga2VybmVsIHZpcnR1YWwKICAqIGFkZHJlc3Mgc3BhY2Uu IFJldHVybiBhIHBvaW50ZXIgdG8gd2hlcmUgaXQgaXMgbWFwcGVkLiBUaGlzCkBAIC00ODgw LDkgKzM5MjgsMTEgQEAKIAliYXNlID0gdHJ1bmNfcGFnZSh2YSk7CiAJb2Zmc2V0ID0gdmEg JiBQQUdFX01BU0s7CiAJc2l6ZSA9IHJvdW5kdXAob2Zmc2V0ICsgc2l6ZSwgUEFHRV9TSVpF KTsKKwljcml0aWNhbF9lbnRlcigpOwogCWZvciAodG1wdmEgPSBiYXNlOyB0bXB2YSA8IChi YXNlICsgc2l6ZSk7IHRtcHZhICs9IFBBR0VfU0laRSkKIAkJcG1hcF9rcmVtb3ZlKHRtcHZh KTsKIAlwbWFwX2ludmFsaWRhdGVfcmFuZ2Uoa2VybmVsX3BtYXAsIHZhLCB0bXB2YSk7CisJ Y3JpdGljYWxfZXhpdCgpOwogCWttZW1fZnJlZShrZXJuZWxfbWFwLCBiYXNlLCBzaXplKTsK IH0KIApAQCAtNDkzMCw4ICszOTgwLDkgQEAKIAkJaWYgKCpzeXNtYXBzLT5DTUFQMikKIAkJ CXBhbmljKCJwbWFwX2ZsdXNoX3BhZ2U6IENNQVAyIGJ1c3kiKTsKIAkJc2NoZWRfcGluKCk7 Ci0JCSpzeXNtYXBzLT5DTUFQMiA9IFBHX1YgfCBQR19SVyB8IFZNX1BBR0VfVE9fUEhZUyht KSB8Ci0JCSAgICBQR19BIHwgUEdfTSB8IHBtYXBfY2FjaGVfYml0cyhtLT5tZC5wYXRfbW9k ZSwgMCk7CisJCVBUX1NFVF9NQShzeXNtYXBzLT5DQUREUjIsIFBHX1YgfCBQR19SVyB8CisJ CSAgICBWTV9QQUdFX1RPX01BQ0gobSkgfCBQR19BIHwgUEdfTSB8CisJCSAgICBwbWFwX2Nh Y2hlX2JpdHMobS0+bWQucGF0X21vZGUsIDApKTsKIAkJaW52bGNhZGRyKHN5c21hcHMtPkNB RERSMik7CiAJCXN2YSA9ICh2bV9vZmZzZXRfdClzeXNtYXBzLT5DQUREUjI7CiAJCWV2YSA9 IHN2YSArIFBBR0VfU0laRTsKQEAgLTQ5NDUsNyArMzk5Niw3IEBACiAJCWZvciAoOyBzdmEg PCBldmE7IHN2YSArPSBjcHVfY2xmbHVzaF9saW5lX3NpemUpCiAJCQljbGZsdXNoKHN2YSk7 CiAJCW1mZW5jZSgpOwotCQkqc3lzbWFwcy0+Q01BUDIgPSAwOworCQlQVF9TRVRfTUEoc3lz bWFwcy0+Q0FERFIyLCAwKTsKIAkJc2NoZWRfdW5waW4oKTsKIAkJbXR4X3VubG9jaygmc3lz bWFwcy0+bG9jayk7CiAJfSBlbHNlCkBAIC00OTY2LDkzICs0MDE3LDU0IEBACiBwbWFwX2No YW5nZV9hdHRyKHZtX29mZnNldF90IHZhLCB2bV9zaXplX3Qgc2l6ZSwgaW50IG1vZGUpCiB7 CiAJdm1fb2Zmc2V0X3QgYmFzZSwgb2Zmc2V0LCB0bXB2YTsKLQlwZF9lbnRyeV90ICpwZGU7 CiAJcHRfZW50cnlfdCAqcHRlOwotCWludCBjYWNoZV9iaXRzX3B0ZSwgY2FjaGVfYml0c19w ZGU7CisJdV9pbnQgb3B0ZSwgbnB0ZTsKKwlwZF9lbnRyeV90ICpwZGU7CiAJYm9vbGVhbl90 IGNoYW5nZWQ7CiAKIAliYXNlID0gdHJ1bmNfcGFnZSh2YSk7CiAJb2Zmc2V0ID0gdmEgJiBQ QUdFX01BU0s7CiAJc2l6ZSA9IHJvdW5kdXAob2Zmc2V0ICsgc2l6ZSwgUEFHRV9TSVpFKTsK IAotCS8qCi0JICogT25seSBzdXBwb3J0ZWQgb24ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2Vz IGFib3ZlIHRoZSByZWN1cnNpdmUgbWFwLgotCSAqLwotCWlmIChiYXNlIDwgVk1fTUlOX0tF Uk5FTF9BRERSRVNTKQorCS8qIE9ubHkgc3VwcG9ydGVkIG9uIGtlcm5lbCB2aXJ0dWFsIGFk ZHJlc3Nlcy4gKi8KKwlpZiAoYmFzZSA8PSBWTV9NQVhVU0VSX0FERFJFU1MpCiAJCXJldHVy biAoRUlOVkFMKTsKIAotCWNhY2hlX2JpdHNfcGRlID0gcG1hcF9jYWNoZV9iaXRzKG1vZGUs IDEpOwotCWNhY2hlX2JpdHNfcHRlID0gcG1hcF9jYWNoZV9iaXRzKG1vZGUsIDApOwotCWNo YW5nZWQgPSBGQUxTRTsKLQotCS8qCi0JICogUGFnZXMgdGhhdCBhcmVuJ3QgbWFwcGVkIGFy ZW4ndCBzdXBwb3J0ZWQuICBBbHNvIGJyZWFrIGRvd24KLQkgKiAyLzRNQiBwYWdlcyBpbnRv IDRLQiBwYWdlcyBpZiByZXF1aXJlZC4KLQkgKi8KLQlQTUFQX0xPQ0soa2VybmVsX3BtYXAp OwotCWZvciAodG1wdmEgPSBiYXNlOyB0bXB2YSA8IGJhc2UgKyBzaXplOyApIHsKKwkvKiA0 TUIgcGFnZXMgYW5kIHBhZ2VzIHRoYXQgYXJlbid0IG1hcHBlZCBhcmVuJ3Qgc3VwcG9ydGVk LiAqLworCWZvciAodG1wdmEgPSBiYXNlOyB0bXB2YSA8IChiYXNlICsgc2l6ZSk7IHRtcHZh ICs9IFBBR0VfU0laRSkgewogCQlwZGUgPSBwbWFwX3BkZShrZXJuZWxfcG1hcCwgdG1wdmEp OwotCQlpZiAoKnBkZSA9PSAwKSB7Ci0JCQlQTUFQX1VOTE9DSyhrZXJuZWxfcG1hcCk7CisJ CWlmICgqcGRlICYgUEdfUFMpCiAJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLQkJaWYgKCpw ZGUgJiBQR19QUykgewotCQkJLyoKLQkJCSAqIElmIHRoZSBjdXJyZW50IDIvNE1CIHBhZ2Ug YWxyZWFkeSBoYXMKLQkJCSAqIHRoZSByZXF1aXJlZCBtZW1vcnkgdHlwZSwgdGhlbiB3ZSBu ZWVkIG5vdAotCQkJICogZGVtb3RlIHRoaXMgcGFnZS4gIEp1c3QgaW5jcmVtZW50IHRtcHZh IHRvCi0JCQkgKiB0aGUgbmV4dCAyLzRNQiBwYWdlIGZyYW1lLgotCQkJICovCi0JCQlpZiAo KCpwZGUgJiBQR19QREVfQ0FDSEUpID09IGNhY2hlX2JpdHNfcGRlKSB7Ci0JCQkJdG1wdmEg PSB0cnVuY180bXBhZ2UodG1wdmEpICsgTkJQRFI7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0K LQkJCS8qCi0JCQkgKiBJZiB0aGUgY3VycmVudCBvZmZzZXQgYWxpZ25zIHdpdGggYSAyLzRN QgotCQkJICogcGFnZSBmcmFtZSBhbmQgdGhlcmUgaXMgYXQgbGVhc3QgMi80TUIgbGVmdAot CQkJICogd2l0aGluIHRoZSByYW5nZSwgdGhlbiB3ZSBuZWVkIG5vdCBicmVhawotCQkJICog ZG93biB0aGlzIHBhZ2UgaW50byA0S0IgcGFnZXMuCi0JCQkgKi8KLQkJCWlmICgodG1wdmEg JiBQRFJNQVNLKSA9PSAwICYmCi0JCQkgICAgdG1wdmEgKyBQRFJNQVNLIDwgYmFzZSArIHNp emUpIHsKLQkJCQl0bXB2YSArPSBOQlBEUjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlm ICghcG1hcF9kZW1vdGVfcGRlKGtlcm5lbF9wbWFwLCBwZGUsIHRtcHZhKSkgewotCQkJCVBN QVBfVU5MT0NLKGtlcm5lbF9wbWFwKTsKLQkJCQlyZXR1cm4gKEVOT01FTSk7Ci0JCQl9Ci0J CX0KLQkJcHRlID0gdnRvcHRlKHRtcHZhKTsKLQkJaWYgKCpwdGUgPT0gMCkgewotCQkJUE1B UF9VTkxPQ0soa2VybmVsX3BtYXApOworCQlpZiAoKCpwZGUgJiBQR19WKSA9PSAwKQorCQkJ cmV0dXJuIChFSU5WQUwpOworCQlwdGUgPSB2dG9wdGUodmEpOworCQlpZiAoKCpwdGUgJiBQ R19WKSA9PSAwKQogCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCXRtcHZhICs9IFBBR0Vf U0laRTsKIAl9Ci0JUE1BUF9VTkxPQ0soa2VybmVsX3BtYXApOworCisJY2hhbmdlZCA9IEZB TFNFOwogCiAJLyoKLQkgKiBPaywgYWxsIHRoZSBwYWdlcyBleGlzdCwgc28gcnVuIHRocm91 Z2ggdGhlbSB1cGRhdGluZyB0aGVpcgotCSAqIGNhY2hlIG1vZGUgaWYgcmVxdWlyZWQuCisJ ICogT2ssIGFsbCB0aGUgcGFnZXMgZXhpc3QgYW5kIGFyZSA0aywgc28gcnVuIHRocm91Z2gg dGhlbSB1cGRhdGluZworCSAqIHRoZWlyIGNhY2hlIG1vZGUuCiAJICovCi0JZm9yICh0bXB2 YSA9IGJhc2U7IHRtcHZhIDwgYmFzZSArIHNpemU7ICkgewotCQlwZGUgPSBwbWFwX3BkZShr ZXJuZWxfcG1hcCwgdG1wdmEpOwotCQlpZiAoKnBkZSAmIFBHX1BTKSB7Ci0JCQlpZiAoKCpw ZGUgJiBQR19QREVfQ0FDSEUpICE9IGNhY2hlX2JpdHNfcGRlKSB7Ci0JCQkJcG1hcF9wZGVf YXR0cihwZGUsIGNhY2hlX2JpdHNfcGRlKTsKLQkJCQljaGFuZ2VkID0gVFJVRTsKLQkJCX0K LQkJCXRtcHZhID0gdHJ1bmNfNG1wYWdlKHRtcHZhKSArIE5CUERSOwotCQl9IGVsc2Ugewot CQkJcHRlID0gdnRvcHRlKHRtcHZhKTsKLQkJCWlmICgoKnB0ZSAmIFBHX1BURV9DQUNIRSkg IT0gY2FjaGVfYml0c19wdGUpIHsKLQkJCQlwbWFwX3B0ZV9hdHRyKHB0ZSwgY2FjaGVfYml0 c19wdGUpOwotCQkJCWNoYW5nZWQgPSBUUlVFOwotCQkJfQotCQkJdG1wdmEgKz0gUEFHRV9T SVpFOwotCQl9CisJZm9yICh0bXB2YSA9IGJhc2U7IHNpemUgPiAwOyApIHsKKwkJcHRlID0g dnRvcHRlKHRtcHZhKTsKKworCQkvKgorCQkgKiBUaGUgY2FjaGUgbW9kZSBiaXRzIGFyZSBh bGwgaW4gdGhlIGxvdyAzMi1iaXRzIG9mIHRoZQorCQkgKiBQVEUsIHNvIHdlIGNhbiBqdXN0 IHNwaW4gb24gdXBkYXRpbmcgdGhlIGxvdyAzMi1iaXRzLgorCQkgKi8KKwkJZG8geworCQkJ b3B0ZSA9ICoodV9pbnQgKilwdGU7CisJCQlucHRlID0gb3B0ZSAmIH4oUEdfUFRFX1BBVCB8 IFBHX05DX1BDRCB8IFBHX05DX1BXVCk7CisJCQlucHRlIHw9IHBtYXBfY2FjaGVfYml0cyht b2RlLCAwKTsKKwkJCVBUX1NFVF9WQV9NQShwdGUsIG5wdGUsIFRSVUUpOworCQl9IHdoaWxl IChucHRlICE9IG9wdGUgJiYgKCpwdGUgIT0gbnB0ZSkpOworCQlpZiAobnB0ZSAhPSBvcHRl KQorCQkJY2hhbmdlZCA9IFRSVUU7CisJCXRtcHZhICs9IFBBR0VfU0laRTsKKwkJc2l6ZSAt PSBQQUdFX1NJWkU7CiAJfQogCiAJLyoKQEAgLTUwNzIsMzMgKzQwODQsMTYgQEAKIGludAog cG1hcF9taW5jb3JlKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCBhZGRyLCB2bV9wYWRkcl90 ICpsb2NrZWRfcGEpCiB7Ci0JcGRfZW50cnlfdCAqcGRlcDsKIAlwdF9lbnRyeV90ICpwdGVw LCBwdGU7CiAJdm1fcGFkZHJfdCBwYTsKIAlpbnQgdmFsOwogCiAJUE1BUF9MT0NLKHBtYXAp OwogcmV0cnk6Ci0JcGRlcCA9IHBtYXBfcGRlKHBtYXAsIGFkZHIpOwotCWlmICgqcGRlcCAh PSAwKSB7Ci0JCWlmICgqcGRlcCAmIFBHX1BTKSB7Ci0JCQlwdGUgPSAqcGRlcDsKLQkJCS8q IENvbXB1dGUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIDRLQiBwYWdlLiAqLwotCQkJ cGEgPSAoKCpwZGVwICYgUEdfUFNfRlJBTUUpIHwgKGFkZHIgJiBQRFJNQVNLKSkgJgotCQkJ ICAgIFBHX0ZSQU1FOwotCQkJdmFsID0gTUlOQ09SRV9TVVBFUjsKLQkJfSBlbHNlIHsKLQkJ CXB0ZXAgPSBwbWFwX3B0ZShwbWFwLCBhZGRyKTsKLQkJCXB0ZSA9ICpwdGVwOwotCQkJcG1h cF9wdGVfcmVsZWFzZShwdGVwKTsKLQkJCXBhID0gcHRlICYgUEdfRlJBTUU7Ci0JCQl2YWwg PSAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJcHRlID0gMDsKLQkJcGEgPSAwOwotCQl2YWwgPSAw OwotCX0KKwlwdGVwID0gcG1hcF9wdGUocG1hcCwgYWRkcik7CisJcHRlID0gKHB0ZXAgIT0g TlVMTCkgPyBQVF9HRVQocHRlcCkgOiAwOworCXBtYXBfcHRlX3JlbGVhc2UocHRlcCk7CisJ dmFsID0gMDsKIAlpZiAoKHB0ZSAmIFBHX1YpICE9IDApIHsKIAkJdmFsIHw9IE1JTkNPUkVf SU5DT1JFOwogCQlpZiAoKHB0ZSAmIChQR19NIHwgUEdfUlcpKSA9PSAoUEdfTSB8IFBHX1JX KSkKQEAgLTUxMDksNiArNDEwNCw3IEBACiAJaWYgKCh2YWwgJiAoTUlOQ09SRV9NT0RJRklF RF9PVEhFUiB8IE1JTkNPUkVfUkVGRVJFTkNFRF9PVEhFUikpICE9CiAJICAgIChNSU5DT1JF X01PRElGSUVEX09USEVSIHwgTUlOQ09SRV9SRUZFUkVOQ0VEX09USEVSKSAmJgogCSAgICAo cHRlICYgKFBHX01BTkFHRUQgfCBQR19WKSkgPT0gKFBHX01BTkFHRUQgfCBQR19WKSkgewor CQlwYSA9IHB0ZSAmIFBHX0ZSQU1FOwogCQkvKiBFbnN1cmUgdGhhdCAiUEhZU19UT19WTV9Q QUdFKHBhKS0+b2JqZWN0IiBkb2Vzbid0IGNoYW5nZS4gKi8KIAkJaWYgKHZtX3BhZ2VfcGFf dHJ5cmVsb2NrKHBtYXAsIHBhLCBsb2NrZWRfcGEpKQogCQkJZ290byByZXRyeTsKQEAgLTUx NDUsNiArNDE0MSw3IEBACiAJICogcG1hcF9hY3RpdmF0ZSBpcyBmb3IgdGhlIGN1cnJlbnQg dGhyZWFkIG9uIHRoZSBjdXJyZW50IGNwdQogCSAqLwogCXRkLT50ZF9wY2ItPnBjYl9jcjMg PSBjcjM7CisJUFRfVVBEQVRFU19GTFVTSCgpOwogCWxvYWRfY3IzKGNyMyk7CiAJUENQVV9T RVQoY3VycG1hcCwgcG1hcCk7CiAJY3JpdGljYWxfZXhpdCgpOwpAQCAtNTE3OSw2ICs0MTc2 LDY3IEBACiAJCSphZGRyID0gKCgqYWRkciArIFBEUk1BU0spICYgflBEUk1BU0spICsgc3Vw ZXJwYWdlX29mZnNldDsKIH0KIAordm9pZAorcG1hcF9zdXNwZW5kKCkKK3sKKwlwbWFwX3Qg cG1hcDsKKwlpbnQgaSwgcGRpciwgb2Zmc2V0OworCXZtX3BhZGRyX3QgcGRpcm1hOworCW1t dV91cGRhdGVfdCBtdVs0XTsKKworCS8qCisJICogV2UgbmVlZCB0byByZW1vdmUgdGhlIHJl Y3Vyc2l2ZSBtYXBwaW5nIHN0cnVjdHVyZSBmcm9tIGFsbAorCSAqIG91ciBwbWFwcyBzbyB0 aGF0IFhlbiBkb2Vzbid0IGdldCBjb25mdXNlZCB3aGVuIGl0IHJlc3RvcmVzCisJICogdGhl IHBhZ2UgdGFibGVzLiBUaGUgcmVjdXJzaXZlIG1hcCBsaXZlcyBhdCBwYWdlIGRpcmVjdG9y eQorCSAqIGluZGV4IFBURFBUREkuIFdlIGFzc3VtZSB0aGF0IHRoZSBzdXNwZW5kIGNvZGUg aGFzIHN0b3BwZWQKKwkgKiB0aGUgb3RoZXIgdmNwdXMgKGlmIGFueSkuCisJICovCisJTElT VF9GT1JFQUNIKHBtYXAsICZhbGxwbWFwcywgcG1fbGlzdCkgeworCQlmb3IgKGkgPSAwOyBp IDwgNDsgaSsrKSB7CisJCQkvKgorCQkJICogRmlndXJlIG91dCB3aGljaCBwYWdlIGRpcmVj dG9yeSAoTDIpIHBhZ2UKKwkJCSAqIGNvbnRhaW5zIHRoaXMgYml0IG9mIHRoZSByZWN1cnNp dmUgbWFwIGFuZAorCQkJICogdGhlIG9mZnNldCB3aXRoaW4gdGhhdCBwYWdlIG9mIHRoZSBt YXAKKwkJCSAqIGVudHJ5CisJCQkgKi8KKwkJCXBkaXIgPSAoUFREUFRESSArIGkpIC8gTlBE RVBHOworCQkJb2Zmc2V0ID0gKFBURFBUREkgKyBpKSAlIE5QREVQRzsKKwkJCXBkaXJtYSA9 IHBtYXAtPnBtX3BkcHRbcGRpcl0gJiBQR19GUkFNRTsKKwkJCW11W2ldLnB0ciA9IHBkaXJt YSArIG9mZnNldCAqIHNpemVvZihwZF9lbnRyeV90KTsKKwkJCW11W2ldLnZhbCA9IDA7CisJ CX0KKwkJSFlQRVJWSVNPUl9tbXVfdXBkYXRlKG11LCA0LCBOVUxMLCBET01JRF9TRUxGKTsK Kwl9Cit9CisKK3ZvaWQKK3BtYXBfcmVzdW1lKCkKK3sKKwlwbWFwX3QgcG1hcDsKKwlpbnQg aSwgcGRpciwgb2Zmc2V0OworCXZtX3BhZGRyX3QgcGRpcm1hOworCW1tdV91cGRhdGVfdCBt dVs0XTsKKworCS8qCisJICogUmVzdG9yZSB0aGUgcmVjdXJzaXZlIG1hcCB0aGF0IHdlIHJl bW92ZWQgb24gc3VzcGVuZC4KKwkgKi8KKwlMSVNUX0ZPUkVBQ0gocG1hcCwgJmFsbHBtYXBz LCBwbV9saXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCS8qCisJCQkg KiBGaWd1cmUgb3V0IHdoaWNoIHBhZ2UgZGlyZWN0b3J5IChMMikgcGFnZQorCQkJICogY29u dGFpbnMgdGhpcyBiaXQgb2YgdGhlIHJlY3Vyc2l2ZSBtYXAgYW5kCisJCQkgKiB0aGUgb2Zm c2V0IHdpdGhpbiB0aGF0IHBhZ2Ugb2YgdGhlIG1hcAorCQkJICogZW50cnkKKwkJCSAqLwor CQkJcGRpciA9IChQVERQVERJICsgaSkgLyBOUERFUEc7CisJCQlvZmZzZXQgPSAoUFREUFRE SSArIGkpICUgTlBERVBHOworCQkJcGRpcm1hID0gcG1hcC0+cG1fcGRwdFtwZGlyXSAmIFBH X0ZSQU1FOworCQkJbXVbaV0ucHRyID0gcGRpcm1hICsgb2Zmc2V0ICogc2l6ZW9mKHBkX2Vu dHJ5X3QpOworCQkJbXVbaV0udmFsID0gKHBtYXAtPnBtX3BkcHRbaV0gJiBQR19GUkFNRSkg fCBQR19WOworCQl9CisJCUhZUEVSVklTT1JfbW11X3VwZGF0ZShtdSwgNCwgTlVMTCwgRE9N SURfU0VMRik7CisJfQorfQogCiAjaWYgZGVmaW5lZChQTUFQX0RFQlVHKQogcG1hcF9waWRf ZHVtcChpbnQgcGlkKQpAQCAtNTIxOCw3ICs0Mjc2LDcgQEAKIAkJCQkJCWlmIChwdGUgJiYg cG1hcF9wdGVfdihwdGUpKSB7CiAJCQkJCQkJcHRfZW50cnlfdCBwYTsKIAkJCQkJCQl2bV9w YWdlX3QgbTsKLQkJCQkJCQlwYSA9ICpwdGU7CisJCQkJCQkJcGEgPSBQVF9HRVQocHRlKTsK IAkJCQkJCQltID0gUEhZU19UT19WTV9QQUdFKHBhICYgUEdfRlJBTUUpOwogCQkJCQkJCXBy aW50ZigidmE6IDB4JXgsIHB0OiAweCV4LCBoOiAlZCwgdzogJWQsIGY6IDB4JXgiLAogCQkJ CQkJCQl2YSwgcGEsIG0tPmhvbGRfY291bnQsIG0tPndpcmVfY291bnQsIG0tPmZsYWdzKTsK --------------010503070403030001090606--