From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IkNmJ-00033f-31 for qemu-devel@nongnu.org; Tue, 23 Oct 2007 13:42:55 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IkNmI-00033H-Do for qemu-devel@nongnu.org; Tue, 23 Oct 2007 13:42:54 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IkNmI-000334-2f for qemu-devel@nongnu.org; Tue, 23 Oct 2007 13:42:54 -0400 Received: from nf-out-0910.google.com ([64.233.182.188]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IkNmD-0008Ug-AS for qemu-devel@nongnu.org; Tue, 23 Oct 2007 13:42:53 -0400 Received: by nf-out-0910.google.com with SMTP id 30so1347795nfu for ; Tue, 23 Oct 2007 10:42:47 -0700 (PDT) Message-ID: Date: Tue, 23 Oct 2007 20:42:46 +0300 From: "Blue Swirl" In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_2249_5472696.1193161366501" References: Subject: [Qemu-devel] Re: PATCH, RFC: Slirp improvements Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel ------=_Part_2249_5472696.1193161366501 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline I tried harder to change the SLIRP queue stuff to something saner by hiding the pointer access inside inlined functions. Still when I changed the 32 bit pointers to native 64 bit (or moved the pointers outside the packet), qemu crashes. Must be some devilishly hidden access somewhere. I already fixed one, which involved recycling port number fields for buffer pointers. IMHO there should be some kind of corporeal punishments mandated by law for writing this kind of mess. Maybe it would even be easier to create a new userland IP stack based on Linux from scratch instead of fixing this. I think I'll just commit in the log part, unless there are objections. ------=_Part_2249_5472696.1193161366501 Content-Type: text/x-diff; name=slirp_all.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_f84pbw08 Content-Disposition: attachment; filename=slirp_all.diff SW5kZXg6IHFlbXUvbW9uaXRvci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9tb25pdG9yLmMJ MjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvbW9uaXRvci5jCTIw MDctMTAtMjEgMTg6NDc6MTEuMDAwMDAwMDAwICswMDAwCkBAIC0xMzY1LDYgKzEzNjUsMTAgQEAK ICAgICB7ICJjcHVzdGF0cyIsICIiLCBkb19pbmZvX2NwdV9zdGF0cywKICAgICAgICIiLCAic2hv dyBDUFUgc3RhdGlzdGljcyIsIH0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TTElSUCkK KyAgICB7ICJzbGlycCIsICIiLCBkb19pbmZvX3NsaXJwLAorICAgICAgIiIsICJzaG93IFNMSVJQ IHN0YXRpc3RpY3MiLCB9LAorI2VuZGlmCiAgICAgeyBOVUxMLCBOVUxMLCB9LAogfTsKIApJbmRl eDogcWVtdS9zbGlycC9ib290cC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGlycC9ib290 cC5jCTIwMDctMTAtMjEgMTg6NDc6MDguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL2Jv b3RwLmMJMjAwNy0xMC0yMiAxOTozNToyOS4wMDAwMDAwMDAgKzAwMDAKQEAgLTI1LDIwICsyNSw2 IEBACiAKIC8qIFhYWDogb25seSBESENQIGlzIHN1cHBvcnRlZCAqLwogCi0jZGVmaW5lIE5CX0FE RFIgMTYKLQotI2RlZmluZSBTVEFSVF9BRERSIDE1Ci0KLSNkZWZpbmUgTEVBU0VfVElNRSAoMjQg KiAzNjAwKQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWludDhfdCBhbGxvY2F0ZWQ7Ci0gICAg dWludDhfdCBtYWNhZGRyWzZdOwotfSBCT09UUENsaWVudDsKLQotQk9PVFBDbGllbnQgYm9vdHBf Y2xpZW50c1tOQl9BRERSXTsKLQotY29uc3QgY2hhciAqYm9vdHBfZmlsZW5hbWU7CiAKIHN0YXRp YyBjb25zdCB1aW50OF90IHJmYzE1MzNfY29va2llW10gPSB7IFJGQzE1MzNfQ09PS0lFIH07CiAK QEAgLTQ5LDM3ICszNSw0OSBAQAogI2RlZmluZSBkcHJpbnRmKGZtdCwgYXJncy4uLikKICNlbmRp ZgogCi1zdGF0aWMgQk9PVFBDbGllbnQgKmdldF9uZXdfYWRkcihzdHJ1Y3QgaW5fYWRkciAqcGFk ZHIpCitzdGF0aWMgQk9PVFBDbGllbnQgKmdldF9uZXdfYWRkcihzbGlycF9zdGF0ZV90ICpzLCBz dHJ1Y3QgaW5fYWRkciAqcGFkZHIpCiB7CiAgICAgQk9PVFBDbGllbnQgKmJjOwogICAgIGludCBp OwogCiAgICAgZm9yKGkgPSAwOyBpIDwgTkJfQUREUjsgaSsrKSB7Ci0gICAgICAgIGlmICghYm9v dHBfY2xpZW50c1tpXS5hbGxvY2F0ZWQpCisgICAgICAgIGlmICghcy0+Ym9vdHBfY2xpZW50c1tp XS5hbGxvY2F0ZWQpCiAgICAgICAgICAgICBnb3RvIGZvdW5kOwogICAgIH0KICAgICByZXR1cm4g TlVMTDsKICBmb3VuZDoKLSAgICBiYyA9ICZib290cF9jbGllbnRzW2ldOworICAgIGJjID0gJnMt PmJvb3RwX2NsaWVudHNbaV07CiAgICAgYmMtPmFsbG9jYXRlZCA9IDE7Ci0gICAgcGFkZHItPnNf YWRkciA9IGh0b25sKG50b2hsKHNwZWNpYWxfYWRkci5zX2FkZHIpIHwgKGkgKyBTVEFSVF9BRERS KSk7CisgICAgcGFkZHItPnNfYWRkciA9IGh0b25sKG50b2hsKHMtPnNwZWNpYWxfYWRkci5zX2Fk ZHIpIHwgKGkgKyBTVEFSVF9BRERSKSk7CiAgICAgcmV0dXJuIGJjOwogfQogCi1zdGF0aWMgQk9P VFBDbGllbnQgKmZpbmRfYWRkcihzdHJ1Y3QgaW5fYWRkciAqcGFkZHIsIGNvbnN0IHVpbnQ4X3Qg Km1hY2FkZHIpCitzdGF0aWMgdm9pZCByZWxlYXNlX2FkZHIoc2xpcnBfc3RhdGVfdCAqcywgc3Ry dWN0IGluX2FkZHIgKnBhZGRyKQoreworICAgIGludCBpOworCisgICAgaSA9IG50b2hsKHBhZGRy LT5zX2FkZHIpIC0gU1RBUlRfQUREUiAtIG50b2hsKHMtPnNwZWNpYWxfYWRkci5zX2FkZHIpOwor ICAgIGlmIChpID49IE5CX0FERFIpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1zZXQocy0+Ym9v dHBfY2xpZW50c1tpXS5tYWNhZGRyLCAnXDAnLCA2KTsKKyAgICBzLT5ib290cF9jbGllbnRzW2ld LmFsbG9jYXRlZCA9IDA7Cit9CisKK3N0YXRpYyBCT09UUENsaWVudCAqZmluZF9hZGRyKHNsaXJw X3N0YXRlX3QgKnMsIHN0cnVjdCBpbl9hZGRyICpwYWRkciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKm1hY2FkZHIpCiB7CiAgICAgQk9PVFBDbGllbnQgKmJj OwogICAgIGludCBpOwogCiAgICAgZm9yKGkgPSAwOyBpIDwgTkJfQUREUjsgaSsrKSB7Ci0gICAg ICAgIGlmICghbWVtY21wKG1hY2FkZHIsIGJvb3RwX2NsaWVudHNbaV0ubWFjYWRkciwgNikpCisg ICAgICAgIGlmICghbWVtY21wKG1hY2FkZHIsIHMtPmJvb3RwX2NsaWVudHNbaV0ubWFjYWRkciwg NikpCiAgICAgICAgICAgICBnb3RvIGZvdW5kOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKICBm b3VuZDoKLSAgICBiYyA9ICZib290cF9jbGllbnRzW2ldOworICAgIGJjID0gJnMtPmJvb3RwX2Ns aWVudHNbaV07CiAgICAgYmMtPmFsbG9jYXRlZCA9IDE7Ci0gICAgcGFkZHItPnNfYWRkciA9IGh0 b25sKG50b2hsKHNwZWNpYWxfYWRkci5zX2FkZHIpIHwgKGkgKyBTVEFSVF9BRERSKSk7CisgICAg cGFkZHItPnNfYWRkciA9IGh0b25sKG50b2hsKHMtPnNwZWNpYWxfYWRkci5zX2FkZHIpIHwgKGkg KyBTVEFSVF9BRERSKSk7CiAgICAgcmV0dXJuIGJjOwogfQogCkBAIC0xMjQsNyArMTIyLDcgQEAK ICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGJvb3RwX3JlcGx5KHN0cnVjdCBib290cF90ICpicCkK K3N0YXRpYyB2b2lkIGJvb3RwX3JlcGx5KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBib290cF90 ICpicCkKIHsKICAgICBCT09UUENsaWVudCAqYmM7CiAgICAgc3RydWN0IG1idWYgKm07CkBAIC0x NDEsMjkgKzEzOSwzOSBAQAogICAgIGlmIChkaGNwX21zZ190eXBlID09IDApCiAgICAgICAgIGRo Y3BfbXNnX3R5cGUgPSBESENQUkVRVUVTVDsgLyogRm9yY2UgcmVwbHkgZm9yIG9sZCBCT09UUCBj bGllbnRzICovCiAKKyAgICBpZiAoZGhjcF9tc2dfdHlwZSA9PSBESENQUkVMRUFTRSkgeworICAg ICAgICByZWxlYXNlX2FkZHIocywgJmJwLT5icF9jaWFkZHIpOworICAgICAgICBkcHJpbnRmKCJy ZWxlYXNlZCBhZGRyPSUwOHhcbiIsIG50b2hsKGJwLT5icF9jaWFkZHIuc19hZGRyKSk7CisgICAg ICAgIC8qIFRoaXMgbWVzc2FnZSBpcyBub3QgdG8gYmUgYW5zd2VyZWQgaW4gYW55IHdheS4gKi8K KyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZiAoZGhjcF9tc2dfdHlwZSAhPSBESENQRElT Q09WRVIgJiYKICAgICAgICAgZGhjcF9tc2dfdHlwZSAhPSBESENQUkVRVUVTVCkKICAgICAgICAg cmV0dXJuOwogICAgIC8qIFhYWDogdGhpcyBpcyBhIGhhY2sgdG8gZ2V0IHRoZSBjbGllbnQgbWFj IGFkZHJlc3MgKi8KLSAgICBtZW1jcHkoY2xpZW50X2V0aGFkZHIsIGJwLT5icF9od2FkZHIsIDYp OworICAgIG1lbWNweShzLT5jbGllbnRfZXRoYWRkciwgYnAtPmJwX2h3YWRkciwgNik7CiAKLSAg ICBpZiAoKG0gPSBtX2dldCgpKSA9PSBOVUxMKQorICAgIGlmICgobSA9IG1fZ2V0KHMpKSA9PSBO VUxMKQogICAgICAgICByZXR1cm47Ci0gICAgbS0+bV9kYXRhICs9IGlmX21heGxpbmtoZHI7Cisg ICAgbS0+bV9kYXRhICs9IElGX01BWExJTktIRFI7CiAgICAgcmJwID0gKHN0cnVjdCBib290cF90 ICopbS0+bV9kYXRhOwogICAgIG0tPm1fZGF0YSArPSBzaXplb2Yoc3RydWN0IHVkcGlwaGRyKTsK ICAgICBtZW1zZXQocmJwLCAwLCBzaXplb2Yoc3RydWN0IGJvb3RwX3QpKTsKIAogICAgIGlmIChk aGNwX21zZ190eXBlID09IERIQ1BESVNDT1ZFUikgewotICAgIG5ld19hZGRyOgotICAgICAgICBi YyA9IGdldF9uZXdfYWRkcigmZGFkZHIuc2luX2FkZHIpOworICAgICAgICAvKiBEbyBub3QgYWxs b2NhdGUgYSBuZXcgbGVhc2UgZm9yIGNsaWVudHMgdGhhdCBmb3Jnb3QgdGhhdCB0aGV5IGhhZCBh IGxlYXNlLiAqLworICAgICAgICBiYyA9IGZpbmRfYWRkcihzLCAmZGFkZHIuc2luX2FkZHIsIGJw LT5icF9od2FkZHIpOwogICAgICAgICBpZiAoIWJjKSB7Ci0gICAgICAgICAgICBkcHJpbnRmKCJu byBhZGRyZXNzIGxlZnRcbiIpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIG5ld19hZGRyOgor ICAgICAgICAgICAgYmMgPSBnZXRfbmV3X2FkZHIocywgJmRhZGRyLnNpbl9hZGRyKTsKKyAgICAg ICAgICAgIGlmICghYmMpIHsKKyAgICAgICAgICAgICAgICBkcHJpbnRmKCJubyBhZGRyZXNzIGxl ZnRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIG1lbWNweShiYy0+bWFjYWRkciwgcy0+Y2xpZW50X2V0aGFkZHIsIDYpOwogICAgICAgICB9 Ci0gICAgICAgIG1lbWNweShiYy0+bWFjYWRkciwgY2xpZW50X2V0aGFkZHIsIDYpOwogICAgIH0g ZWxzZSB7Ci0gICAgICAgIGJjID0gZmluZF9hZGRyKCZkYWRkci5zaW5fYWRkciwgYnAtPmJwX2h3 YWRkcik7CisgICAgICAgIGJjID0gZmluZF9hZGRyKHMsICZkYWRkci5zaW5fYWRkciwgYnAtPmJw X2h3YWRkcik7CiAgICAgICAgIGlmICghYmMpIHsKICAgICAgICAgICAgIC8qIGlmIG5ldmVyIGFz c2lnbmVkLCBiZWhhdmVzIGFzIGlmIGl0IHdhcyBhbHJlYWR5CiAgICAgICAgICAgICAgICBhc3Np Z25lZCAod2luZG93cyBmaXggYmVjYXVzZSBpdCByZW1lbWJlcnMgaXRzIGFkZHJlc3MpICovCkBA IC0xNzEsMTIgKzE3OSwxMiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJvb3RwX2Zp bGVuYW1lKQotICAgICAgICBzbnByaW50ZihyYnAtPmJwX2ZpbGUsIHNpemVvZihyYnAtPmJwX2Zp bGUpLCAiJXMiLCBib290cF9maWxlbmFtZSk7CisgICAgaWYgKHMtPmJvb3RwX2ZpbGVuYW1lKQor ICAgICAgICBzbnByaW50ZihyYnAtPmJwX2ZpbGUsIHNpemVvZihyYnAtPmJwX2ZpbGUpLCAiJXMi LCBzLT5ib290cF9maWxlbmFtZSk7CiAKICAgICBkcHJpbnRmKCJvZmZlcmVkIGFkZHI9JTA4eFxu IiwgbnRvaGwoZGFkZHIuc2luX2FkZHIuc19hZGRyKSk7CiAKLSAgICBzYWRkci5zaW5fYWRkci5z X2FkZHIgPSBodG9ubChudG9obChzcGVjaWFsX2FkZHIuc19hZGRyKSB8IENUTF9BTElBUyk7Cisg ICAgc2FkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwobnRvaGwocy0+c3BlY2lhbF9hZGRyLnNf YWRkcikgfCBDVExfQUxJQVMpOwogICAgIHNhZGRyLnNpbl9wb3J0ID0gaHRvbnMoQk9PVFBfU0VS VkVSKTsKIAogICAgIGRhZGRyLnNpbl9wb3J0ID0gaHRvbnMoQk9PVFBfQ0xJRU5UKTsKQEAgLTIy NSw3ICsyMzMsNyBAQAogCiAgICAgICAgICpxKysgPSBSRkMxNTMzX0ROUzsKICAgICAgICAgKnEr KyA9IDQ7Ci0gICAgICAgIGRuc19hZGRyLnNfYWRkciA9IGh0b25sKG50b2hsKHNwZWNpYWxfYWRk ci5zX2FkZHIpIHwgQ1RMX0ROUyk7CisgICAgICAgIGRuc19hZGRyLnNfYWRkciA9IGh0b25sKG50 b2hsKHMtPnNwZWNpYWxfYWRkci5zX2FkZHIpIHwgQ1RMX0ROUyk7CiAgICAgICAgIG1lbWNweShx LCAmZG5zX2FkZHIsIDQpOwogICAgICAgICBxICs9IDQ7CiAKQEAgLTIzNSwxMSArMjQzLDExIEBA CiAgICAgICAgIG1lbWNweShxLCAmdmFsLCA0KTsKICAgICAgICAgcSArPSA0OwogCi0gICAgICAg IGlmICgqc2xpcnBfaG9zdG5hbWUpIHsKLSAgICAgICAgICAgIHZhbCA9IHN0cmxlbihzbGlycF9o b3N0bmFtZSk7CisgICAgICAgIGlmICgqcy0+c2xpcnBfaG9zdG5hbWUpIHsKKyAgICAgICAgICAg IHZhbCA9IHN0cmxlbihzLT5zbGlycF9ob3N0bmFtZSk7CiAgICAgICAgICAgICAqcSsrID0gUkZD MTUzM19IT1NUTkFNRTsKICAgICAgICAgICAgICpxKysgPSB2YWw7Ci0gICAgICAgICAgICBtZW1j cHkocSwgc2xpcnBfaG9zdG5hbWUsIHZhbCk7CisgICAgICAgICAgICBtZW1jcHkocSwgcy0+c2xp cnBfaG9zdG5hbWUsIHZhbCk7CiAgICAgICAgICAgICBxICs9IHZhbDsKICAgICAgICAgfQogICAg IH0KQEAgLTI0NywxNCArMjU1LDE2IEBACiAKICAgICBtLT5tX2xlbiA9IHNpemVvZihzdHJ1Y3Qg Ym9vdHBfdCkgLQogICAgICAgICBzaXplb2Yoc3RydWN0IGlwKSAtIHNpemVvZihzdHJ1Y3QgdWRw aGRyKTsKLSAgICB1ZHBfb3V0cHV0MihOVUxMLCBtLCAmc2FkZHIsICZkYWRkciwgSVBUT1NfTE9X REVMQVkpOworICAgIC8qIFJlcGx5IHRvIHRoZSBicm9hZGNhc3QgYWRkcmVzcywgYXMgc29tZSBj bGllbnRzIHBlcmZvcm0gcGFyYW5vaWQgY2hlY2tzLiAqLworICAgIGRhZGRyLnNpbl9hZGRyLnNf YWRkciA9IElOQUREUl9CUk9BRENBU1Q7CisgICAgdWRwX291dHB1dDIocywgTlVMTCwgbSwgJnNh ZGRyLCAmZGFkZHIsIElQVE9TX0xPV0RFTEFZKTsKIH0KIAotdm9pZCBib290cF9pbnB1dChzdHJ1 Y3QgbWJ1ZiAqbSkKK3ZvaWQgYm9vdHBfaW5wdXQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IG1i dWYgKm0pCiB7CiAgICAgc3RydWN0IGJvb3RwX3QgKmJwID0gbXRvZChtLCBzdHJ1Y3QgYm9vdHBf dCAqKTsKIAogICAgIGlmIChicC0+YnBfb3AgPT0gQk9PVFBfUkVRVUVTVCkgewotICAgICAgICBi b290cF9yZXBseShicCk7CisgICAgICAgIGJvb3RwX3JlcGx5KHMsIGJwKTsKICAgICB9CiB9Cklu ZGV4OiBxZW11L3NsaXJwL2Jvb3RwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL2Jv b3RwLmgJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAv Ym9vdHAuaAkyMDA3LTEwLTIxIDE4OjQ3OjExLjAwMDAwMDAwMCArMDAwMApAQCAtNzEsNiArNzEs NyBAQAogI2RlZmluZSBESENQT0ZGRVIJCTIKICNkZWZpbmUgREhDUFJFUVVFU1QJCTMKICNkZWZp bmUgREhDUEFDSwkJCTUKKyNkZWZpbmUgREhDUFJFTEVBU0UJCTcKIAogI2RlZmluZSBSRkMxNTMz X1ZFTkRPUl9NQUpPUgkwCiAjZGVmaW5lIFJGQzE1MzNfVkVORE9SX01JTk9SCTAKQEAgLTExMCw0 ICsxMTEsNCBAQAogICAgIHVpbnQ4X3QgYnBfdmVuZFtESENQX09QVF9MRU5dOwogfTsKIAotdm9p ZCBib290cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqbSk7Cit2b2lkIGJvb3RwX2lucHV0KHNsaXJwX3N0 YXRlX3QgKnMsIHN0cnVjdCBtYnVmICptKTsKSW5kZXg6IHFlbXUvc2xpcnAvY3RsLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL2N0bC5oCTIwMDctMTAtMjEgMTg6NDc6MDguMDAwMDAw MDAwICswMDAwCisrKyBxZW11L3NsaXJwL2N0bC5oCTIwMDctMTAtMjEgMTg6NDc6MTEuMDAwMDAw MDAwICswMDAwCkBAIC0yLDYgKzIsNCBAQAogI2RlZmluZSBDVExfRVhFQwkxCiAjZGVmaW5lIENU TF9BTElBUwkyCiAjZGVmaW5lIENUTF9ETlMJCTMKLQotI2RlZmluZSBDVExfU1BFQ0lBTAkiMTAu MC4yLjAiCi0jZGVmaW5lIENUTF9MT0NBTAkiMTAuMC4yLjE1IgorI2RlZmluZSBDVExfQlJPQURD QVNUICAgMjU1CkluZGV4OiBxZW11L3NsaXJwL2RlYnVnLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5v cmlnL3NsaXJwL2RlYnVnLmMJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysr IHFlbXUvc2xpcnAvZGVidWcuYwkyMDA3LTEwLTIyIDIwOjAwOjAxLjAwMDAwMDAwMCArMDAwMApA QCAtOSwxMCArOSwxMiBAQAogI2luY2x1ZGUgPHNsaXJwLmg+CiAKIEZJTEUgKmRmZCA9IE5VTEw7 CisjaWYgMAogI2lmZGVmIERFQlVHCi1pbnQgZG9zdGF0cyA9IDE7CitzdGF0aWMgaW50IGRvc3Rh dHMgPSAxOwogI2Vsc2UKLWludCBkb3N0YXRzID0gMDsKK3N0YXRpYyBpbnQgZG9zdGF0cyA9IDA7 CisjZW5kaWYKICNlbmRpZgogaW50IHNsaXJwX2RlYnVnID0gMDsKIApAQCAtMjAsMTAgKzIyLDEw IEBACiAKIC8qIENhcnJ5IG92ZXIgb25lIGl0ZW0gZnJvbSBtYWluLmMgc28gdGhhdCB0aGUgdHR5 J3MgcmVzdG9yZWQuCiAgKiBPbmx5IGRvbmUgd2hlbiB0aGUgdHR5IGJlaW5nIHVzZWQgaXMgL2Rl di90dHkgLS1SZWRXb2xmICovCisjaWYgMAogZXh0ZXJuIHN0cnVjdCB0ZXJtaW9zIHNsaXJwX3R0 eV9zZXR0aW5nczsKIGV4dGVybiBpbnQgc2xpcnBfdHR5X3Jlc3RvcmU7CiAKLQogdm9pZAogZGVi dWdfaW5pdChmaWxlLCBkYmcpCiAJY2hhciAqZmlsZTsKQEAgLTcwLDcgKzcyLDE2IEBACiAJfQog fQogI2VuZGlmCisjZW5kaWYKIAorI2lmZGVmIExPR19FTkFCTEVECisvL3N0YXRpYyB2b2lkIHR0 eXN0YXRzKHN0cnVjdCB0dHlzICopOworc3RhdGljIHZvaWQgaXBzdGF0cyhzbGlycF9zdGF0ZV90 ICpzKTsKK3N0YXRpYyB2b2lkIHRjcHN0YXRzKHNsaXJwX3N0YXRlX3QgKnMpOworc3RhdGljIHZv aWQgdWRwc3RhdHMoc2xpcnBfc3RhdGVfdCAqcyk7CitzdGF0aWMgdm9pZCBpY21wc3RhdHMoc2xp cnBfc3RhdGVfdCAqcyk7CitzdGF0aWMgdm9pZCBtYnVmc3RhdHMoc2xpcnBfc3RhdGVfdCAqcyk7 CitzdGF0aWMgdm9pZCBzb2Nrc3RhdHMoc2xpcnBfc3RhdGVfdCAqcyk7CiAjaWYgMAogLyoKICAq IFN0YXRpc3RpYyByb3V0aW5lcwpAQCAtODAsNyArOTEsNyBAQAogICogdGhlIGxpbmsgYXMgd2Vs bC4KICAqLwogCi12b2lkCitzdGF0aWMgdm9pZAogdHR5c3RhdHModHR5cCkKIAlzdHJ1Y3QgdHR5 cyAqdHR5cDsKIHsKQEAgLTg5LDkgKzEwMCw5IEBACiAKIAlscHJpbnQoIiBcclxuIik7CiAKLQlp ZiAoaWZfY29tcCAmIElGX0NPTVBSRVNTKQorCWlmIChzLT5pZl9jb21wICYgSUZfQ09NUFJFU1Mp CiAJICAgc3RyY3B5KGJ1ZmYsICJvbiIpOwotCWVsc2UgaWYgKGlmX2NvbXAgJiBJRl9OT0NPTVBS RVNTKQorCWVsc2UgaWYgKHMtPmlmX2NvbXAgJiBJRl9OT0NPTVBSRVNTKQogCSAgIHN0cmNweShi dWZmLCAib2ZmIik7CiAJZWxzZQogCSAgIHN0cmNweShidWZmLCAib2ZmIChmb3Igbm93KSIpOwpA QCAtMTI5LDI4ICsxNDAsMjggQEAKIH0KICNlbmRpZgogCi12b2lkCi1pcHN0YXRzKCkKK3N0YXRp YyB2b2lkCitpcHN0YXRzKHNsaXJwX3N0YXRlX3QgKnMpCiB7CiAJbHByaW50KCIgXHJcbiIpOwog CiAJbHByaW50KCJJUCBzdGF0czpcclxuIik7CiAJbHByaW50KCIgICU2ZCB0b3RhbCBwYWNrZXRz IHJlY2VpdmVkICglZCB3ZXJlIHVuYWxpZ25lZClcclxuIiwKLQkJCWlwc3RhdC5pcHNfdG90YWws IGlwc3RhdC5pcHNfdW5hbGlnbmVkKTsKLQlscHJpbnQoIiAgJTZkIHdpdGggaW5jb3JyZWN0IHZl cnNpb25cclxuIiwgaXBzdGF0Lmlwc19iYWR2ZXJzKTsKLQlscHJpbnQoIiAgJTZkIHdpdGggYmFk IGhlYWRlciBjaGVja3N1bVxyXG4iLCBpcHN0YXQuaXBzX2JhZHN1bSk7Ci0JbHByaW50KCIgICU2 ZCB3aXRoIGxlbmd0aCB0b28gc2hvcnQgKGxlbiA8IHNpemVvZihpcGhkcikpXHJcbiIsIGlwc3Rh dC5pcHNfdG9vc2hvcnQpOwotCWxwcmludCgiICAlNmQgd2l0aCBsZW5ndGggdG9vIHNtYWxsIChs ZW4gPCBpcC0+bGVuKVxyXG4iLCBpcHN0YXQuaXBzX3Rvb3NtYWxsKTsKLQlscHJpbnQoIiAgJTZk IHdpdGggYmFkIGhlYWRlciBsZW5ndGhcclxuIiwgaXBzdGF0Lmlwc19iYWRobGVuKTsKLQlscHJp bnQoIiAgJTZkIHdpdGggYmFkIHBhY2tldCBsZW5ndGhcclxuIiwgaXBzdGF0Lmlwc19iYWRsZW4p OwotCWxwcmludCgiICAlNmQgZnJhZ21lbnRzIHJlY2VpdmVkXHJcbiIsIGlwc3RhdC5pcHNfZnJh Z21lbnRzKTsKLQlscHJpbnQoIiAgJTZkIGZyYWdtZW50cyBkcm9wcGVkXHJcbiIsIGlwc3RhdC5p cHNfZnJhZ2Ryb3BwZWQpOwotCWxwcmludCgiICAlNmQgZnJhZ21lbnRzIHRpbWVkIG91dFxyXG4i LCBpcHN0YXQuaXBzX2ZyYWd0aW1lb3V0KTsKLQlscHJpbnQoIiAgJTZkIHBhY2tldHMgcmVhc3Nl bWJsZWQgb2tcclxuIiwgaXBzdGF0Lmlwc19yZWFzc2VtYmxlZCk7Ci0JbHByaW50KCIgICU2ZCBv dXRnb2luZyBwYWNrZXRzIGZyYWdtZW50ZWRcclxuIiwgaXBzdGF0Lmlwc19mcmFnbWVudGVkKTsK LQlscHJpbnQoIiAgJTZkIHRvdGFsIG91dGdvaW5nIGZyYWdtZW50c1xyXG4iLCBpcHN0YXQuaXBz X29mcmFnbWVudHMpOwotCWxwcmludCgiICAlNmQgd2l0aCBiYWQgcHJvdG9jb2wgZmllbGRcclxu IiwgaXBzdGF0Lmlwc19ub3Byb3RvKTsKLQlscHJpbnQoIiAgJTZkIHRvdGFsIHBhY2tldHMgZGVs aXZlcmVkXHJcbiIsIGlwc3RhdC5pcHNfZGVsaXZlcmVkKTsKKwkJCXMtPmlwc3RhdC5pcHNfdG90 YWwsIHMtPmlwc3RhdC5pcHNfdW5hbGlnbmVkKTsKKwlscHJpbnQoIiAgJTZkIHdpdGggaW5jb3Jy ZWN0IHZlcnNpb25cclxuIiwgcy0+aXBzdGF0Lmlwc19iYWR2ZXJzKTsKKwlscHJpbnQoIiAgJTZk IHdpdGggYmFkIGhlYWRlciBjaGVja3N1bVxyXG4iLCBzLT5pcHN0YXQuaXBzX2JhZHN1bSk7CisJ bHByaW50KCIgICU2ZCB3aXRoIGxlbmd0aCB0b28gc2hvcnQgKGxlbiA8IHNpemVvZihpcGhkcikp XHJcbiIsIHMtPmlwc3RhdC5pcHNfdG9vc2hvcnQpOworCWxwcmludCgiICAlNmQgd2l0aCBsZW5n dGggdG9vIHNtYWxsIChsZW4gPCBpcC0+bGVuKVxyXG4iLCBzLT5pcHN0YXQuaXBzX3Rvb3NtYWxs KTsKKwlscHJpbnQoIiAgJTZkIHdpdGggYmFkIGhlYWRlciBsZW5ndGhcclxuIiwgcy0+aXBzdGF0 Lmlwc19iYWRobGVuKTsKKwlscHJpbnQoIiAgJTZkIHdpdGggYmFkIHBhY2tldCBsZW5ndGhcclxu Iiwgcy0+aXBzdGF0Lmlwc19iYWRsZW4pOworCWxwcmludCgiICAlNmQgZnJhZ21lbnRzIHJlY2Vp dmVkXHJcbiIsIHMtPmlwc3RhdC5pcHNfZnJhZ21lbnRzKTsKKwlscHJpbnQoIiAgJTZkIGZyYWdt ZW50cyBkcm9wcGVkXHJcbiIsIHMtPmlwc3RhdC5pcHNfZnJhZ2Ryb3BwZWQpOworCWxwcmludCgi ICAlNmQgZnJhZ21lbnRzIHRpbWVkIG91dFxyXG4iLCBzLT5pcHN0YXQuaXBzX2ZyYWd0aW1lb3V0 KTsKKwlscHJpbnQoIiAgJTZkIHBhY2tldHMgcmVhc3NlbWJsZWQgb2tcclxuIiwgcy0+aXBzdGF0 Lmlwc19yZWFzc2VtYmxlZCk7CisJbHByaW50KCIgICU2ZCBvdXRnb2luZyBwYWNrZXRzIGZyYWdt ZW50ZWRcclxuIiwgcy0+aXBzdGF0Lmlwc19mcmFnbWVudGVkKTsKKwlscHJpbnQoIiAgJTZkIHRv dGFsIG91dGdvaW5nIGZyYWdtZW50c1xyXG4iLCBzLT5pcHN0YXQuaXBzX29mcmFnbWVudHMpOwor CWxwcmludCgiICAlNmQgd2l0aCBiYWQgcHJvdG9jb2wgZmllbGRcclxuIiwgcy0+aXBzdGF0Lmlw c19ub3Byb3RvKTsKKwlscHJpbnQoIiAgJTZkIHRvdGFsIHBhY2tldHMgZGVsaXZlcmVkXHJcbiIs IHMtPmlwc3RhdC5pcHNfZGVsaXZlcmVkKTsKIH0KIAogI2lmIDAKQEAgLTE3Miw2NyArMTgzLDY3 IEBACiB9CiAjZW5kaWYKIAotdm9pZAotdGNwc3RhdHMoKQorc3RhdGljIHZvaWQKK3RjcHN0YXRz KHNsaXJwX3N0YXRlX3QgKnMpCiB7CiAJbHByaW50KCIgXHJcbiIpOwogCiAJbHByaW50KCJUQ1Ag c3RhdHM6XHJcbiIpOwogCi0JbHByaW50KCIgICU2ZCBwYWNrZXRzIHNlbnRcclxuIiwgdGNwc3Rh dC50Y3BzX3NuZHRvdGFsKTsKKwlscHJpbnQoIiAgJTZkIHBhY2tldHMgc2VudFxyXG4iLCBzLT50 Y3BzdGF0LnRjcHNfc25kdG90YWwpOwogCWxwcmludCgiICAgICAgICAgICU2ZCBkYXRhIHBhY2tl dHMgKCVkIGJ5dGVzKVxyXG4iLAotCQkJdGNwc3RhdC50Y3BzX3NuZHBhY2ssIHRjcHN0YXQudGNw c19zbmRieXRlKTsKKwkJCXMtPnRjcHN0YXQudGNwc19zbmRwYWNrLCBzLT50Y3BzdGF0LnRjcHNf c25kYnl0ZSk7CiAJbHByaW50KCIgICAgICAgICAgJTZkIGRhdGEgcGFja2V0cyByZXRyYW5zbWl0 dGVkICglZCBieXRlcylcclxuIiwKLQkJCXRjcHN0YXQudGNwc19zbmRyZXhtaXRwYWNrLCB0Y3Bz dGF0LnRjcHNfc25kcmV4bWl0Ynl0ZSk7CisJCQlzLT50Y3BzdGF0LnRjcHNfc25kcmV4bWl0cGFj aywgcy0+dGNwc3RhdC50Y3BzX3NuZHJleG1pdGJ5dGUpOwogCWxwcmludCgiICAgICAgICAgICU2 ZCBhY2stb25seSBwYWNrZXRzICglZCBkZWxheWVkKVxyXG4iLAotCQkJdGNwc3RhdC50Y3BzX3Nu ZGFja3MsIHRjcHN0YXQudGNwc19kZWxhY2spOwotCWxwcmludCgiICAgICAgICAgICU2ZCBVUkcg b25seSBwYWNrZXRzXHJcbiIsIHRjcHN0YXQudGNwc19zbmR1cmcpOwotCWxwcmludCgiICAgICAg ICAgICU2ZCB3aW5kb3cgcHJvYmUgcGFja2V0c1xyXG4iLCB0Y3BzdGF0LnRjcHNfc25kcHJvYmUp OwotCWxwcmludCgiICAgICAgICAgICU2ZCB3aW5kb3cgdXBkYXRlIHBhY2tldHNcclxuIiwgdGNw c3RhdC50Y3BzX3NuZHdpbnVwKTsKLQlscHJpbnQoIiAgICAgICAgICAlNmQgY29udHJvbCAoU1lO L0ZJTi9SU1QpIHBhY2tldHNcclxuIiwgdGNwc3RhdC50Y3BzX3NuZGN0cmwpOwotCWxwcmludCgi ICAgICAgICAgICU2ZCB0aW1lcyB0Y3Bfb3V0cHV0IGRpZCBub3RoaW5nXHJcbiIsIHRjcHN0YXQu dGNwc19kaWRudXR0aW4pOworCQkJcy0+dGNwc3RhdC50Y3BzX3NuZGFja3MsIHMtPnRjcHN0YXQu dGNwc19kZWxhY2spOworCWxwcmludCgiICAgICAgICAgICU2ZCBVUkcgb25seSBwYWNrZXRzXHJc biIsIHMtPnRjcHN0YXQudGNwc19zbmR1cmcpOworCWxwcmludCgiICAgICAgICAgICU2ZCB3aW5k b3cgcHJvYmUgcGFja2V0c1xyXG4iLCBzLT50Y3BzdGF0LnRjcHNfc25kcHJvYmUpOworCWxwcmlu dCgiICAgICAgICAgICU2ZCB3aW5kb3cgdXBkYXRlIHBhY2tldHNcclxuIiwgcy0+dGNwc3RhdC50 Y3BzX3NuZHdpbnVwKTsKKwlscHJpbnQoIiAgICAgICAgICAlNmQgY29udHJvbCAoU1lOL0ZJTi9S U1QpIHBhY2tldHNcclxuIiwgcy0+dGNwc3RhdC50Y3BzX3NuZGN0cmwpOworCWxwcmludCgiICAg ICAgICAgICU2ZCB0aW1lcyB0Y3Bfb3V0cHV0IGRpZCBub3RoaW5nXHJcbiIsIHMtPnRjcHN0YXQu dGNwc19kaWRudXR0aW4pOwogCi0JbHByaW50KCIgICU2ZCBwYWNrZXRzIHJlY2VpdmVkXHJcbiIs IHRjcHN0YXQudGNwc19yY3Z0b3RhbCk7CisJbHByaW50KCIgICU2ZCBwYWNrZXRzIHJlY2VpdmVk XHJcbiIsIHMtPnRjcHN0YXQudGNwc19yY3Z0b3RhbCk7CiAJbHByaW50KCIgICAgICAgICAgJTZk IGFja3MgKGZvciAlZCBieXRlcylcclxuIiwKLQkJCXRjcHN0YXQudGNwc19yY3ZhY2twYWNrLCB0 Y3BzdGF0LnRjcHNfcmN2YWNrYnl0ZSk7Ci0JbHByaW50KCIgICAgICAgICAgJTZkIGR1cGxpY2F0 ZSBhY2tzXHJcbiIsIHRjcHN0YXQudGNwc19yY3ZkdXBhY2spOwotCWxwcmludCgiICAgICAgICAg ICU2ZCBhY2tzIGZvciB1bnNlbnQgZGF0YVxyXG4iLCB0Y3BzdGF0LnRjcHNfcmN2YWNrdG9vbXVj aCk7CisJCQlzLT50Y3BzdGF0LnRjcHNfcmN2YWNrcGFjaywgcy0+dGNwc3RhdC50Y3BzX3JjdmFj a2J5dGUpOworCWxwcmludCgiICAgICAgICAgICU2ZCBkdXBsaWNhdGUgYWNrc1xyXG4iLCBzLT50 Y3BzdGF0LnRjcHNfcmN2ZHVwYWNrKTsKKwlscHJpbnQoIiAgICAgICAgICAlNmQgYWNrcyBmb3Ig dW5zZW50IGRhdGFcclxuIiwgcy0+dGNwc3RhdC50Y3BzX3JjdmFja3Rvb211Y2gpOwogCWxwcmlu dCgiICAgICAgICAgICU2ZCBwYWNrZXRzIHJlY2VpdmVkIGluIHNlcXVlbmNlICglZCBieXRlcylc clxuIiwKLQkJCXRjcHN0YXQudGNwc19yY3ZwYWNrLCB0Y3BzdGF0LnRjcHNfcmN2Ynl0ZSk7CisJ CQlzLT50Y3BzdGF0LnRjcHNfcmN2cGFjaywgcy0+dGNwc3RhdC50Y3BzX3JjdmJ5dGUpOwogICAg ICAgICBscHJpbnQoIiAgICAgICAgICAlNmQgY29tcGxldGVseSBkdXBsaWNhdGUgcGFja2V0cyAo JWQgYnl0ZXMpXHJcbiIsCi0JCQl0Y3BzdGF0LnRjcHNfcmN2ZHVwcGFjaywgdGNwc3RhdC50Y3Bz X3JjdmR1cGJ5dGUpOworCQkJcy0+dGNwc3RhdC50Y3BzX3JjdmR1cHBhY2ssIHMtPnRjcHN0YXQu dGNwc19yY3ZkdXBieXRlKTsKIAogCWxwcmludCgiICAgICAgICAgICU2ZCBwYWNrZXRzIHdpdGgg c29tZSBkdXBsaWNhdGUgZGF0YSAoJWQgYnl0ZXMgZHVwZWQpXHJcbiIsCi0JCQl0Y3BzdGF0LnRj cHNfcmN2cGFydGR1cHBhY2ssIHRjcHN0YXQudGNwc19yY3ZwYXJ0ZHVwYnl0ZSk7CisJCQlzLT50 Y3BzdGF0LnRjcHNfcmN2cGFydGR1cHBhY2ssIHMtPnRjcHN0YXQudGNwc19yY3ZwYXJ0ZHVwYnl0 ZSk7CiAJbHByaW50KCIgICAgICAgICAgJTZkIG91dC1vZi1vcmRlciBwYWNrZXRzICglZCBieXRl cylcclxuIiwKLQkJCXRjcHN0YXQudGNwc19yY3Zvb3BhY2ssIHRjcHN0YXQudGNwc19yY3Zvb2J5 dGUpOworCQkJcy0+dGNwc3RhdC50Y3BzX3Jjdm9vcGFjaywgcy0+dGNwc3RhdC50Y3BzX3Jjdm9v Ynl0ZSk7CiAJbHByaW50KCIgICAgICAgICAgJTZkIHBhY2tldHMgb2YgZGF0YSBhZnRlciB3aW5k b3cgKCVkIGJ5dGVzKVxyXG4iLAotCQkJdGNwc3RhdC50Y3BzX3JjdnBhY2thZnRlcndpbiwgdGNw c3RhdC50Y3BzX3JjdmJ5dGVhZnRlcndpbik7Ci0JbHByaW50KCIgICAgICAgICAgJTZkIHdpbmRv dyBwcm9iZXNcclxuIiwgdGNwc3RhdC50Y3BzX3JjdndpbnByb2JlKTsKLQlscHJpbnQoIiAgICAg ICAgICAlNmQgd2luZG93IHVwZGF0ZSBwYWNrZXRzXHJcbiIsIHRjcHN0YXQudGNwc19yY3Z3aW51 cGQpOwotCWxwcmludCgiICAgICAgICAgICU2ZCBwYWNrZXRzIHJlY2VpdmVkIGFmdGVyIGNsb3Nl XHJcbiIsIHRjcHN0YXQudGNwc19yY3ZhZnRlcmNsb3NlKTsKLQlscHJpbnQoIiAgICAgICAgICAl NmQgZGlzY2FyZGVkIGZvciBiYWQgY2hlY2tzdW1zXHJcbiIsIHRjcHN0YXQudGNwc19yY3ZiYWRz dW0pOworCQkJcy0+dGNwc3RhdC50Y3BzX3JjdnBhY2thZnRlcndpbiwgcy0+dGNwc3RhdC50Y3Bz X3JjdmJ5dGVhZnRlcndpbik7CisJbHByaW50KCIgICAgICAgICAgJTZkIHdpbmRvdyBwcm9iZXNc clxuIiwgcy0+dGNwc3RhdC50Y3BzX3JjdndpbnByb2JlKTsKKwlscHJpbnQoIiAgICAgICAgICAl NmQgd2luZG93IHVwZGF0ZSBwYWNrZXRzXHJcbiIsIHMtPnRjcHN0YXQudGNwc19yY3Z3aW51cGQp OworCWxwcmludCgiICAgICAgICAgICU2ZCBwYWNrZXRzIHJlY2VpdmVkIGFmdGVyIGNsb3NlXHJc biIsIHMtPnRjcHN0YXQudGNwc19yY3ZhZnRlcmNsb3NlKTsKKwlscHJpbnQoIiAgICAgICAgICAl NmQgZGlzY2FyZGVkIGZvciBiYWQgY2hlY2tzdW1zXHJcbiIsIHMtPnRjcHN0YXQudGNwc19yY3Zi YWRzdW0pOwogCWxwcmludCgiICAgICAgICAgICU2ZCBkaXNjYXJkZWQgZm9yIGJhZCBoZWFkZXIg b2Zmc2V0IGZpZWxkc1xyXG4iLAotCQkJdGNwc3RhdC50Y3BzX3JjdmJhZG9mZik7CisJCQlzLT50 Y3BzdGF0LnRjcHNfcmN2YmFkb2ZmKTsKIAotCWxwcmludCgiICAlNmQgY29ubmVjdGlvbiByZXF1 ZXN0c1xyXG4iLCB0Y3BzdGF0LnRjcHNfY29ubmF0dGVtcHQpOwotCWxwcmludCgiICAlNmQgY29u bmVjdGlvbiBhY2NlcHRzXHJcbiIsIHRjcHN0YXQudGNwc19hY2NlcHRzKTsKLQlscHJpbnQoIiAg JTZkIGNvbm5lY3Rpb25zIGVzdGFibGlzaGVkIChpbmNsdWRpbmcgYWNjZXB0cylcclxuIiwgdGNw c3RhdC50Y3BzX2Nvbm5lY3RzKTsKKwlscHJpbnQoIiAgJTZkIGNvbm5lY3Rpb24gcmVxdWVzdHNc clxuIiwgcy0+dGNwc3RhdC50Y3BzX2Nvbm5hdHRlbXB0KTsKKwlscHJpbnQoIiAgJTZkIGNvbm5l Y3Rpb24gYWNjZXB0c1xyXG4iLCBzLT50Y3BzdGF0LnRjcHNfYWNjZXB0cyk7CisJbHByaW50KCIg ICU2ZCBjb25uZWN0aW9ucyBlc3RhYmxpc2hlZCAoaW5jbHVkaW5nIGFjY2VwdHMpXHJcbiIsIHMt PnRjcHN0YXQudGNwc19jb25uZWN0cyk7CiAJbHByaW50KCIgICU2ZCBjb25uZWN0aW9ucyBjbG9z ZWQgKGluY2x1ZGluZyAlZCBkcm9wKVxyXG4iLAotCQkJdGNwc3RhdC50Y3BzX2Nsb3NlZCwgdGNw c3RhdC50Y3BzX2Ryb3BzKTsKLQlscHJpbnQoIiAgJTZkIGVtYnJ5b25pYyBjb25uZWN0aW9ucyBk cm9wcGVkXHJcbiIsIHRjcHN0YXQudGNwc19jb25uZHJvcHMpOworCQkJcy0+dGNwc3RhdC50Y3Bz X2Nsb3NlZCwgcy0+dGNwc3RhdC50Y3BzX2Ryb3BzKTsKKwlscHJpbnQoIiAgJTZkIGVtYnJ5b25p YyBjb25uZWN0aW9ucyBkcm9wcGVkXHJcbiIsIHMtPnRjcHN0YXQudGNwc19jb25uZHJvcHMpOwog CWxwcmludCgiICAlNmQgc2VnbWVudHMgd2UgdHJpZWQgdG8gZ2V0IHJ0dCAoJWQgc3VjY2VlZGVk KVxyXG4iLAotCQkJdGNwc3RhdC50Y3BzX3NlZ3N0aW1lZCwgdGNwc3RhdC50Y3BzX3J0dHVwZGF0 ZWQpOwotCWxwcmludCgiICAlNmQgcmV0cmFuc21pdCB0aW1lb3V0c1xyXG4iLCB0Y3BzdGF0LnRj cHNfcmV4bXR0aW1lbyk7CisJCQlzLT50Y3BzdGF0LnRjcHNfc2Vnc3RpbWVkLCBzLT50Y3BzdGF0 LnRjcHNfcnR0dXBkYXRlZCk7CisJbHByaW50KCIgICU2ZCByZXRyYW5zbWl0IHRpbWVvdXRzXHJc biIsIHMtPnRjcHN0YXQudGNwc19yZXhtdHRpbWVvKTsKIAlscHJpbnQoIiAgICAgICAgICAlNmQg Y29ubmVjdGlvbnMgZHJvcHBlZCBieSByeG10IHRpbWVvdXRcclxuIiwKLQkJCXRjcHN0YXQudGNw c190aW1lb3V0ZHJvcCk7Ci0JbHByaW50KCIgICU2ZCBwZXJzaXN0IHRpbWVvdXRzXHJcbiIsIHRj cHN0YXQudGNwc19wZXJzaXN0dGltZW8pOwotCWxwcmludCgiICAlNmQga2VlcGFsaXZlIHRpbWVv dXRzXHJcbiIsIHRjcHN0YXQudGNwc19rZWVwdGltZW8pOwotCWxwcmludCgiICAgICAgICAgICU2 ZCBrZWVwYWxpdmUgcHJvYmVzIHNlbnRcclxuIiwgdGNwc3RhdC50Y3BzX2tlZXBwcm9iZSk7Ci0J bHByaW50KCIgICAgICAgICAgJTZkIGNvbm5lY3Rpb25zIGRyb3BwZWQgYnkga2VlcGFsaXZlXHJc biIsIHRjcHN0YXQudGNwc19rZWVwZHJvcHMpOwotCWxwcmludCgiICAlNmQgY29ycmVjdCBBQ0sg aGVhZGVyIHByZWRpY3Rpb25zXHJcbiIsIHRjcHN0YXQudGNwc19wcmVkYWNrKTsKLQlscHJpbnQo IiAgJTZkIGNvcnJlY3QgZGF0YSBwYWNrZXQgaGVhZGVyIHByZWRpY3Rpb25zXG4iLCB0Y3BzdGF0 LnRjcHNfcHJlZGRhdCk7Ci0JbHByaW50KCIgICU2ZCBUQ1AgY2FjaGUgbWlzc2VzXHJcbiIsIHRj cHN0YXQudGNwc19zb2NhY2hlbWlzcyk7CisJCQlzLT50Y3BzdGF0LnRjcHNfdGltZW91dGRyb3Ap OworCWxwcmludCgiICAlNmQgcGVyc2lzdCB0aW1lb3V0c1xyXG4iLCBzLT50Y3BzdGF0LnRjcHNf cGVyc2lzdHRpbWVvKTsKKwlscHJpbnQoIiAgJTZkIGtlZXBhbGl2ZSB0aW1lb3V0c1xyXG4iLCBz LT50Y3BzdGF0LnRjcHNfa2VlcHRpbWVvKTsKKwlscHJpbnQoIiAgICAgICAgICAlNmQga2VlcGFs aXZlIHByb2JlcyBzZW50XHJcbiIsIHMtPnRjcHN0YXQudGNwc19rZWVwcHJvYmUpOworCWxwcmlu dCgiICAgICAgICAgICU2ZCBjb25uZWN0aW9ucyBkcm9wcGVkIGJ5IGtlZXBhbGl2ZVxyXG4iLCBz LT50Y3BzdGF0LnRjcHNfa2VlcGRyb3BzKTsKKwlscHJpbnQoIiAgJTZkIGNvcnJlY3QgQUNLIGhl YWRlciBwcmVkaWN0aW9uc1xyXG4iLCBzLT50Y3BzdGF0LnRjcHNfcHJlZGFjayk7CisJbHByaW50 KCIgICU2ZCBjb3JyZWN0IGRhdGEgcGFja2V0IGhlYWRlciBwcmVkaWN0aW9uc1xuIiwgcy0+dGNw c3RhdC50Y3BzX3ByZWRkYXQpOworCWxwcmludCgiICAlNmQgVENQIGNhY2hlIG1pc3Nlc1xyXG4i LCBzLT50Y3BzdGF0LnRjcHNfc29jYWNoZW1pc3MpOwogCiAKIC8qCWxwcmludCgiICAgIFBhY2tl dHMgcmVjZWl2ZWQgdG9vIHNob3J0OgkJJWRcclxuIiwgdGNwc3RhdC50Y3BzX3JjdnNob3J0KTsg Ki8KQEAgLTI0MCwzNSArMjUxLDM1IEBACiAKIH0KIAotdm9pZAotdWRwc3RhdHMoKQorc3RhdGlj IHZvaWQKK3VkcHN0YXRzKHNsaXJwX3N0YXRlX3QgKnMpCiB7CiAgICAgICAgIGxwcmludCgiIFxy XG4iKTsKIAogCWxwcmludCgiVURQIHN0YXRzOlxyXG4iKTsKLQlscHJpbnQoIiAgJTZkIGRhdGFn cmFtcyByZWNlaXZlZFxyXG4iLCB1ZHBzdGF0LnVkcHNfaXBhY2tldHMpOwotCWxwcmludCgiICAl NmQgd2l0aCBwYWNrZXRzIHNob3J0ZXIgdGhhbiBoZWFkZXJcclxuIiwgdWRwc3RhdC51ZHBzX2hk cm9wcyk7Ci0JbHByaW50KCIgICU2ZCB3aXRoIGJhZCBjaGVja3N1bXNcclxuIiwgdWRwc3RhdC51 ZHBzX2JhZHN1bSk7Ci0JbHByaW50KCIgICU2ZCB3aXRoIGRhdGEgbGVuZ3RoIGxhcmdlciB0aGFu IHBhY2tldFxyXG4iLCB1ZHBzdGF0LnVkcHNfYmFkbGVuKTsKLQlscHJpbnQoIiAgJTZkIFVEUCBz b2NrZXQgY2FjaGUgbWlzc2VzXHJcbiIsIHVkcHN0YXQudWRwcHNfcGNiY2FjaGVtaXNzKTsKLQls cHJpbnQoIiAgJTZkIGRhdGFncmFtcyBzZW50XHJcbiIsIHVkcHN0YXQudWRwc19vcGFja2V0cyk7 CisJbHByaW50KCIgICU2ZCBkYXRhZ3JhbXMgcmVjZWl2ZWRcclxuIiwgcy0+dWRwc3RhdC51ZHBz X2lwYWNrZXRzKTsKKwlscHJpbnQoIiAgJTZkIHdpdGggcGFja2V0cyBzaG9ydGVyIHRoYW4gaGVh ZGVyXHJcbiIsIHMtPnVkcHN0YXQudWRwc19oZHJvcHMpOworCWxwcmludCgiICAlNmQgd2l0aCBi YWQgY2hlY2tzdW1zXHJcbiIsIHMtPnVkcHN0YXQudWRwc19iYWRzdW0pOworCWxwcmludCgiICAl NmQgd2l0aCBkYXRhIGxlbmd0aCBsYXJnZXIgdGhhbiBwYWNrZXRcclxuIiwgcy0+dWRwc3RhdC51 ZHBzX2JhZGxlbik7CisJbHByaW50KCIgICU2ZCBVRFAgc29ja2V0IGNhY2hlIG1pc3Nlc1xyXG4i LCBzLT51ZHBzdGF0LnVkcHBzX3BjYmNhY2hlbWlzcyk7CisJbHByaW50KCIgICU2ZCBkYXRhZ3Jh bXMgc2VudFxyXG4iLCBzLT51ZHBzdGF0LnVkcHNfb3BhY2tldHMpOwogfQogCi12b2lkCi1pY21w c3RhdHMoKQorc3RhdGljIHZvaWQKK2ljbXBzdGF0cyhzbGlycF9zdGF0ZV90ICpzKQogewogCWxw cmludCgiIFxyXG4iKTsKIAlscHJpbnQoIklDTVAgc3RhdHM6XHJcbiIpOwotCWxwcmludCgiICAl NmQgSUNNUCBwYWNrZXRzIHJlY2VpdmVkXHJcbiIsIGljbXBzdGF0LmljcHNfcmVjZWl2ZWQpOwot CWxwcmludCgiICAlNmQgd2VyZSB0b28gc2hvcnRcclxuIiwgaWNtcHN0YXQuaWNwc190b29zaG9y dCk7Ci0JbHByaW50KCIgICU2ZCB3aXRoIGJhZCBjaGVja3N1bXNcclxuIiwgaWNtcHN0YXQuaWNw c19jaGVja3N1bSk7Ci0JbHByaW50KCIgICU2ZCB3aXRoIHR5cGUgbm90IHN1cHBvcnRlZFxyXG4i LCBpY21wc3RhdC5pY3BzX25vdHN1cHApOwotCWxwcmludCgiICAlNmQgd2l0aCBiYWQgdHlwZSBm ZWlsZHNcclxuIiwgaWNtcHN0YXQuaWNwc19iYWR0eXBlKTsKLQlscHJpbnQoIiAgJTZkIElDTVAg cGFja2V0cyBzZW50IGluIHJlcGx5XHJcbiIsIGljbXBzdGF0LmljcHNfcmVmbGVjdCk7CisJbHBy aW50KCIgICU2ZCBJQ01QIHBhY2tldHMgcmVjZWl2ZWRcclxuIiwgcy0+aWNtcHN0YXQuaWNwc19y ZWNlaXZlZCk7CisJbHByaW50KCIgICU2ZCB3ZXJlIHRvbyBzaG9ydFxyXG4iLCBzLT5pY21wc3Rh dC5pY3BzX3Rvb3Nob3J0KTsKKwlscHJpbnQoIiAgJTZkIHdpdGggYmFkIGNoZWNrc3Vtc1xyXG4i LCBzLT5pY21wc3RhdC5pY3BzX2NoZWNrc3VtKTsKKwlscHJpbnQoIiAgJTZkIHdpdGggdHlwZSBu b3Qgc3VwcG9ydGVkXHJcbiIsIHMtPmljbXBzdGF0LmljcHNfbm90c3VwcCk7CisJbHByaW50KCIg ICU2ZCB3aXRoIGJhZCB0eXBlIGZlaWxkc1xyXG4iLCBzLT5pY21wc3RhdC5pY3BzX2JhZHR5cGUp OworCWxwcmludCgiICAlNmQgSUNNUCBwYWNrZXRzIHNlbnQgaW4gcmVwbHlcclxuIiwgcy0+aWNt cHN0YXQuaWNwc19yZWZsZWN0KTsKIH0KIAotdm9pZAotbWJ1ZnN0YXRzKCkKK3N0YXRpYyB2b2lk CittYnVmc3RhdHMoc2xpcnBfc3RhdGVfdCAqcykKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKIAlpbnQg aTsKQEAgLTI3NywyMiArMjg4LDIyIEBACiAKIAlscHJpbnQoIk1idWYgc3RhdHM6XHJcbiIpOwog Ci0JbHByaW50KCIgICU2ZCBtYnVmcyBhbGxvY2F0ZWQgKCVkIG1heClcclxuIiwgbWJ1Zl9hbGxv Y2VkLCBtYnVmX21heCk7CisJbHByaW50KCIgICU2ZCBtYnVmcyBhbGxvY2F0ZWQgKCVkIG1heClc clxuIiwgcy0+bWJ1Zl9hbGxvY2VkLCBzLT5tYnVmX21heCk7CiAKIAlpID0gMDsKLQlmb3IgKG0g PSBtX2ZyZWVsaXN0Lm1fbmV4dDsgbSAhPSAmbV9mcmVlbGlzdDsgbSA9IG0tPm1fbmV4dCkKKwlm b3IgKG0gPSBtX2dldF9uZXh0KCZzLT5tX2ZyZWVsaXN0KTsgbSAhPSAmcy0+bV9mcmVlbGlzdDsg bSA9IG1fZ2V0X25leHQobSkpCiAJCWkrKzsKIAlscHJpbnQoIiAgJTZkIG1idWZzIG9uIGZyZWUg bGlzdFxyXG4iLCAgaSk7CiAKIAlpID0gMDsKLQlmb3IgKG0gPSBtX3VzZWRsaXN0Lm1fbmV4dDsg bSAhPSAmbV91c2VkbGlzdDsgbSA9IG0tPm1fbmV4dCkKKwlmb3IgKG0gPSBtX2dldF9uZXh0KCZz LT5tX3VzZWRsaXN0KTsgbSAhPSAmcy0+bV91c2VkbGlzdDsgbSA9IG1fZ2V0X25leHQobSkpCiAJ CWkrKzsKIAlscHJpbnQoIiAgJTZkIG1idWZzIG9uIHVzZWQgbGlzdFxyXG4iLCAgaSk7Ci0gICAg ICAgIGxwcmludCgiICAlNmQgbWJ1ZnMgcXVldWVkIGFzIHBhY2tldHNcclxuXHJcbiIsIGlmX3F1 ZXVlZCk7CisgICAgICAgIGxwcmludCgiICAlNmQgbWJ1ZnMgcXVldWVkIGFzIHBhY2tldHNcclxu XHJcbiIsIHMtPmlmX3F1ZXVlZCk7CiB9CiAKLXZvaWQKLXNvY2tzdGF0cygpCitzdGF0aWMgdm9p ZAorc29ja3N0YXRzKHNsaXJwX3N0YXRlX3QgKnMpCiB7CiAJY2hhciBidWZmWzI1Nl07CiAJaW50 IG47CkBAIC0zMDMsNyArMzE0LDcgQEAKIAlscHJpbnQoCiAJICAgIlByb3RvW3N0YXRlXSAgICAg U29jayAgICAgTG9jYWwgQWRkcmVzcywgUG9ydCAgUmVtb3RlIEFkZHJlc3MsIFBvcnQgUmVjdlEg U2VuZFFcclxuIik7CiAKLQlmb3IgKHNvID0gdGNiLnNvX25leHQ7IHNvICE9ICZ0Y2I7IHNvID0g c28tPnNvX25leHQpIHsKKwlmb3IgKHNvID0gcy0+dGNiLnNvX25leHQ7IHNvICE9ICZzLT50Y2I7 IHNvID0gc28tPnNvX25leHQpIHsKIAogCQluID0gc3ByaW50ZihidWZmLCAidGNwWyVzXSIsIHNv LT5zb190Y3BjYj90Y3BzdGF0ZXNbc28tPnNvX3RjcGNiLT50X3N0YXRlXToiTk9ORSIpOwogCQl3 aGlsZSAobiA8IDE3KQpAQCAtMzE3LDkgKzMyOCw5IEBACiAJCQkJc28tPnNvX3Jjdi5zYl9jYywg c28tPnNvX3NuZC5zYl9jYyk7CiAJfQogCi0JZm9yIChzbyA9IHVkYi5zb19uZXh0OyBzbyAhPSAm dWRiOyBzbyA9IHNvLT5zb19uZXh0KSB7CisJZm9yIChzbyA9IHMtPnVkYi5zb19uZXh0OyBzbyAh PSAmcy0+dWRiOyBzbyA9IHNvLT5zb19uZXh0KSB7CiAKLQkJbiA9IHNwcmludGYoYnVmZiwgInVk cFslZCBzZWNdIiwgKHNvLT5zb19leHBpcmUgLSBjdXJ0aW1lKSAvIDEwMDApOworCQluID0gc3By aW50ZihidWZmLCAidWRwWyVkIHNlY10iLCAoc28tPnNvX2V4cGlyZSAtIHMtPmN1cnRpbWUpIC8g MTAwMCk7CiAJCXdoaWxlIChuIDwgMTcpCiAJCSAgIGJ1ZmZbbisrXSA9ICcgJzsKIAkJYnVmZlsx N10gPSAwOwpAQCAtMzMxLDYgKzM0Miw3IEBACiAJCQkJc28tPnNvX3Jjdi5zYl9jYywgc28tPnNv X3NuZC5zYl9jYyk7CiAJfQogfQorI2VuZGlmCiAKICNpZiAwCiB2b2lkCkBAIC0zNzQsMyArMzg2 LDE4IEBACiAJZXhpdChleGl0X3N0YXR1cyk7CiB9CiAjZW5kaWYKKwordm9pZAorc2xpcnBfc3Rh dHMoc2xpcnBfc3RhdGVfdCAqcykKK3sKKyNpZmRlZiBMT0dfRU5BQkxFRAorICAgIGlwc3RhdHMo cyk7CisgICAgdGNwc3RhdHMocyk7CisgICAgdWRwc3RhdHMocyk7CisgICAgaWNtcHN0YXRzKHMp OworICAgIG1idWZzdGF0cyhzKTsKKyAgICBzb2Nrc3RhdHMocyk7CisjZWxzZQorICAgIGxwcmlu dCgiU0xJUlAgc3RhdGlzdGljcyBub3QgY29tcGlsZWRcbiIpOworI2VuZGlmCit9CkluZGV4OiBx ZW11L3NsaXJwL2RlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL2RlYnVnLmgJ MjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvZGVidWcu aAkyMDA3LTEwLTIyIDE2OjE3OjQ4LjAwMDAwMDAwMCArMDAwMApAQCAtMzcsMTQgKzM3LDQgQEAK ICNlbmRpZgogCiB2b2lkIGRlYnVnX2luaXQgX1AoKGNoYXIgKiwgaW50KSk7Ci0vL3ZvaWQgdHR5 c3RhdHMgX1AoKHN0cnVjdCB0dHlzICopKTsKLXZvaWQgYWxsdHR5c3RhdHMgX1AoKHZvaWQpKTsK LXZvaWQgaXBzdGF0cyBfUCgodm9pZCkpOwotdm9pZCB2anN0YXRzIF9QKCh2b2lkKSk7Ci12b2lk IHRjcHN0YXRzIF9QKCh2b2lkKSk7Ci12b2lkIHVkcHN0YXRzIF9QKCh2b2lkKSk7Ci12b2lkIGlj bXBzdGF0cyBfUCgodm9pZCkpOwotdm9pZCBtYnVmc3RhdHMgX1AoKHZvaWQpKTsKLXZvaWQgc29j a3N0YXRzIF9QKCh2b2lkKSk7Ci12b2lkIHNsaXJwX2V4aXQgX1AoKGludCkpOwogCkluZGV4OiBx ZW11L3NsaXJwL2ljbXBfdmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL2ljbXBf dmFyLmgJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAv aWNtcF92YXIuaAkyMDA3LTEwLTIxIDE4OjQ3OjExLjAwMDAwMDAwMCArMDAwMApAQCAtNjQsNiAr NjQsNCBAQAogCXsgInN0YXRzIiwgQ1RMVFlQRV9TVFJVQ1QgfSwgXAogfQogCi1leHRlcm4gc3Ry dWN0IGljbXBzdGF0IGljbXBzdGF0OwotCiAjZW5kaWYKSW5kZXg6IHFlbXUvc2xpcnAvaWYuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvaWYuYwkyMDA3LTEwLTIxIDE4OjQ3OjA4LjAw MDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC9pZi5jCTIwMDctMTAtMjIgMjA6MTM6MTcuMDAw MDAwMDAwICswMDAwCkBAIC03LDYxICs3LDM5IEBACiAKICNpbmNsdWRlIDxzbGlycC5oPgogCi1p bnQgaWZfbXR1LCBpZl9tcnU7Ci1pbnQgaWZfY29tcDsKLWludCBpZl9tYXhsaW5raGRyOwotaW50 ICAgICBpZl9xdWV1ZWQgPSAwOyAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiBwYWNrZXRz IHF1ZXVlZCBzbyBmYXIgKi8KLWludCAgICAgaWZfdGhyZXNoID0gMTA7ICAgICAgICAgICAgICAg ICAvKiBOdW1iZXIgb2YgcGFja2V0cyBxdWV1ZWQgYmVmb3JlIHdlIHN0YXJ0IHNlbmRpbmcKLQkJ CQkJICogKHRvIHByZXZlbnQgYWxsb2NpbmcgdG9vIG1hbnkgbWJ1ZnMpICovCi0KLXN0cnVjdCAg bWJ1ZiBpZl9mYXN0cTsgICAgICAgICAgICAgICAgICAvKiBmYXN0IHF1ZXVlIChmb3IgaW50ZXJh Y3RpdmUgZGF0YSkgKi8KLXN0cnVjdCAgbWJ1ZiBpZl9iYXRjaHE7ICAgICAgICAgICAgICAgICAv KiBxdWV1ZSBmb3Igbm9uLWludGVyYWN0aXZlIGRhdGEgKi8KLXN0cnVjdAltYnVmICpuZXh0X207 CQkJLyogUG9pbnRlciB0byBuZXh0IG1idWYgdG8gb3V0cHV0ICovCiAKLSNkZWZpbmUgaWZzX2lu aXQoaWZtKSAoKGlmbSktPmlmc19uZXh0ID0gKGlmbSktPmlmc19wcmV2ID0gKGlmbSkpCitzdGF0 aWMgdm9pZCBpZnNfaW5pdChzdHJ1Y3QgbWJ1ZiAqaWZtKQoreworICAgIGlmc19zZXRfbmV4dChp Zm0sIGlmbSk7CisgICAgaWZzX3NldF9wcmV2KGlmbSwgaWZtKTsKK30KIAotdm9pZAotaWZzX2lu c3F1ZShpZm0sIGlmbWhlYWQpCi0Jc3RydWN0IG1idWYgKmlmbSwgKmlmbWhlYWQ7CitzdGF0aWMg dm9pZCBpZnNfaW5zcXVlKHN0cnVjdCBtYnVmICppZm0sIHN0cnVjdCBtYnVmICppZm1oZWFkKQog ewotCWlmbS0+aWZzX25leHQgPSBpZm1oZWFkLT5pZnNfbmV4dDsKLQlpZm1oZWFkLT5pZnNfbmV4 dCA9IGlmbTsKLQlpZm0tPmlmc19wcmV2ID0gaWZtaGVhZDsKLQlpZm0tPmlmc19uZXh0LT5pZnNf cHJldiA9IGlmbTsKKwlpZnNfc2V0X25leHQoaWZtLCBpZnNfZ2V0X25leHQoaWZtaGVhZCkpOwor CWlmc19zZXRfbmV4dChpZm1oZWFkLCBpZm0pOworCWlmc19zZXRfcHJldihpZm0sIGlmbWhlYWQp OworCWlmc19zZXRfcHJldihpZnNfZ2V0X25leHQoaWZtKSwgaWZtKTsKIH0KIAotdm9pZAotaWZz X3JlbXF1ZShpZm0pCi0Jc3RydWN0IG1idWYgKmlmbTsKK3N0YXRpYyB2b2lkIGlmc19yZW1xdWUo c3RydWN0IG1idWYgKmlmbSkKIHsKLQlpZm0tPmlmc19wcmV2LT5pZnNfbmV4dCA9IGlmbS0+aWZz X25leHQ7Ci0JaWZtLT5pZnNfbmV4dC0+aWZzX3ByZXYgPSBpZm0tPmlmc19wcmV2OworCWlmc19z ZXRfbmV4dChpZnNfZ2V0X3ByZXYoaWZtKSwgaWZzX2dldF9uZXh0KGlmbSkpOworCWlmc19zZXRf cHJldihpZnNfZ2V0X25leHQoaWZtKSwgaWZzX2dldF9wcmV2KGlmbSkpOwogfQogCiB2b2lkCi1p Zl9pbml0KCkKK2lmX2luaXQoc2xpcnBfc3RhdGVfdCAqcykKIHsKLSNpZiAwCi0JLyoKLQkgKiBT ZXQgaWZfbWF4bGlua2hkciB0byA0OCBiZWNhdXNlIGl0J3MgNDAgYnl0ZXMgZm9yIFRDUC9JUCwK LQkgKiBhbmQgOCBieXRlcyBmb3IgUFBQLCBidXQgbmVlZCB0byBoYXZlIGl0IG9uIGFuIDhieXRl IGJvdW5kYXJ5Ci0JICovCi0jaWZkZWYgVVNFX1BQUAotCWlmX21heGxpbmtoZHIgPSA0ODsKLSNl bHNlCi0JaWZfbWF4bGlua2hkciA9IDQwOwotI2VuZGlmCi0jZWxzZQotICAgICAgICAvKiAyIGZv ciBhbGlnbm1lbnQsIDE0IGZvciBldGhlcm5ldCwgNDAgZm9yIFRDUC9JUCAqLwotICAgICAgICBp Zl9tYXhsaW5raGRyID0gMiArIDE0ICsgNDA7Ci0jZW5kaWYKLQlpZl9tdHUgPSAxNTAwOwotCWlm X21ydSA9IDE1MDA7Ci0JaWZfY29tcCA9IElGX0FVVE9DT01QOwotCWlmX2Zhc3RxLmlmcV9uZXh0 ID0gaWZfZmFzdHEuaWZxX3ByZXYgPSAmaWZfZmFzdHE7Ci0JaWZfYmF0Y2hxLmlmcV9uZXh0ID0g aWZfYmF0Y2hxLmlmcV9wcmV2ID0gJmlmX2JhdGNocTsKKyAgICAgICAgcy0+aWZfcXVldWVkID0g MDsKKyAgICAgICAgcy0+aWZfdGhyZXNoID0gMTA7CisJcy0+aWZfY29tcCA9IElGX0FVVE9DT01Q OworCWlmcV9zZXRfbmV4dCgmcy0+aWZfZmFzdHEsICZzLT5pZl9mYXN0cSk7CisJaWZxX3NldF9w cmV2KCZzLT5pZl9mYXN0cSwgJnMtPmlmX2Zhc3RxKTsKKwlpZnFfc2V0X25leHQoJnMtPmlmX2Jh dGNocSwgJnMtPmlmX2JhdGNocSk7CisJaWZxX3NldF9wcmV2KCZzLT5pZl9iYXRjaHEsICZzLT5p Zl9iYXRjaHEpOwogICAgICAgICAvLwlzbF9jb21wcmVzc19pbml0KCZjb21wX3MpOwotCW5leHRf bSA9ICZpZl9iYXRjaHE7CisJcy0+bmV4dF9tID0gJnMtPmlmX2JhdGNocTsKIH0KIAogI2lmIDAK QEAgLTExOCw3ICs5Niw3IEBACiAJaWYgKGlmX24gPD0gMCkgewogCQlpZiAoaWZfbiA9PSAwIHx8 IChlcnJubyAhPSBFSU5UUiAmJiBlcnJubyAhPSBFQUdBSU4pKSB7CiAJCQlpZiAodHR5cC0+dXAp Ci0JCQkgICBsaW5rX3VwLS07CisJCQkgICBzLT5saW5rX3VwLS07CiAJCQl0dHlfZGV0YWNoZWQo dHR5cCwgMCk7CiAJCX0KIAkJcmV0dXJuOwpAQCAtMTU3LDkgKzEzNSw3IEBACiAgKiBpdCdsbCB0 ZW1wb3JhcmlseSBnZXQgZG93bmdyYWRlZCB0byB0aGUgYmF0Y2hxKQogICovCiB2b2lkCi1pZl9v dXRwdXQoc28sIGlmbSkKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQlzdHJ1Y3QgbWJ1ZiAqaWZtOwor aWZfb3V0cHV0KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1 ZiAqaWZtKQogewogCXN0cnVjdCBtYnVmICppZnE7CiAJaW50IG9uX2Zhc3RxID0gMTsKQEAgLTE3 NCw3ICsxNTAsNyBAQAogCSAqIFhYWCBTaG91bGRuJ3QgbmVlZCB0aGlzLCBnb3R0YSBjaGFuZ2Ug ZHRvbSgpIGV0Yy4KIAkgKi8KIAlpZiAoaWZtLT5tX2ZsYWdzICYgTV9VU0VETElTVCkgewotCQly ZW1xdWUoaWZtKTsKKwkJcmVtcXVlKHMsIGlmbSk7CiAJCWlmbS0+bV9mbGFncyAmPSB+TV9VU0VE TElTVDsKIAl9CiAKQEAgLTE4NSwxOCArMTYxLDE4IEBACiAJICogV2UgbXVzdG4ndCBwdXQgdGhp cyBwYWNrZXQgYmFjayBvbiB0aGUgZmFzdHEgKG9yIHdlJ2xsIHNlbmQgaXQgb3V0IG9mIG9yZGVy KQogCSAqIFhYWCBhZGQgY2FjaGUgaGVyZT8KIAkgKi8KLQlmb3IgKGlmcSA9IGlmX2JhdGNocS5p ZnFfcHJldjsgaWZxICE9ICZpZl9iYXRjaHE7IGlmcSA9IGlmcS0+aWZxX3ByZXYpIHsKKwlmb3Ig KGlmcSA9IGlmcV9nZXRfcHJldigmcy0+aWZfYmF0Y2hxKTsgaWZxICE9ICZzLT5pZl9iYXRjaHE7 IGlmcSA9IGlmcV9nZXRfcHJldihpZnEpKSB7CiAJCWlmIChzbyA9PSBpZnEtPmlmcV9zbykgewog CQkJLyogQSBtYXRjaCEgKi8KIAkJCWlmbS0+aWZxX3NvID0gc287Ci0JCQlpZnNfaW5zcXVlKGlm bSwgaWZxLT5pZnNfcHJldik7CisJCQlpZnNfaW5zcXVlKGlmbSwgaWZzX2dldF9wcmV2KGlmcSkp OwogCQkJZ290byBkaWRkaXQ7CiAJCX0KIAl9CiAKIAkvKiBObyBtYXRjaCwgY2hlY2sgd2hpY2gg cXVldWUgdG8gcHV0IGl0IG9uICovCiAJaWYgKHNvICYmIChzby0+c29faXB0b3MgJiBJUFRPU19M T1dERUxBWSkpIHsKLQkJaWZxID0gaWZfZmFzdHEuaWZxX3ByZXY7CisJCWlmcSA9IGlmcV9nZXRf cHJldigmcy0+aWZfZmFzdHEpOwogCQlvbl9mYXN0cSA9IDE7CiAJCS8qCiAJCSAqIENoZWNrIGlm IHRoaXMgcGFja2V0IGlzIGEgcGFydCBvZiB0aGUgbGFzdApAQCAtMjA0LDE5ICsxODAsMTkgQEAK IAkJICovCiAJCWlmIChpZnEtPmlmcV9zbyA9PSBzbykgewogCQkJaWZtLT5pZnFfc28gPSBzbzsK LQkJCWlmc19pbnNxdWUoaWZtLCBpZnEtPmlmc19wcmV2KTsKKwkJCWlmc19pbnNxdWUoaWZtLCBp ZnNfZ2V0X3ByZXYoaWZxKSk7CiAJCQlnb3RvIGRpZGRpdDsKIAkJfQogCX0gZWxzZQotCQlpZnEg PSBpZl9iYXRjaHEuaWZxX3ByZXY7CisJCWlmcSA9IGlmcV9nZXRfcHJldigmcy0+aWZfYmF0Y2hx KTsKIAogCS8qIENyZWF0ZSBhIG5ldyBkb3VibHkgbGlua2VkIGxpc3QgZm9yIHRoaXMgc2Vzc2lv biAqLwogCWlmbS0+aWZxX3NvID0gc287CiAJaWZzX2luaXQoaWZtKTsKLQlpbnNxdWUoaWZtLCBp ZnEpOworCWluc3F1ZShzLCBpZm0sIGlmcSk7CiAKIGRpZGRpdDoKLQkrK2lmX3F1ZXVlZDsKKwkr K3MtPmlmX3F1ZXVlZDsKIAogCWlmIChzbykgewogCQkvKiBVcGRhdGUgKl9xdWV1ZWQgKi8KQEAg LTIzMywxMCArMjA5LDEwIEBACiAJCQkJIChzby0+c29fbnF1ZXVlZCAtIHNvLT5zb19xdWV1ZWQp ID49IDMpKSB7CiAKIAkJCS8qIFJlbW92ZSBmcm9tIGN1cnJlbnQgcXVldWUuLi4gKi8KLQkJCXJl bXF1ZShpZm0tPmlmc19uZXh0KTsKKwkJCXJlbXF1ZShzLCBpZnNfZ2V0X25leHQoaWZtKSk7CiAK IAkJCS8qIC4uLkFuZCBpbnNlcnQgaW4gdGhlIG5ldy4gIFRoYXQnbGwgdGVhY2ggeWEhICovCi0J CQlpbnNxdWUoaWZtLT5pZnNfbmV4dCwgJmlmX2JhdGNocSk7CisJCQlpbnNxdWUocywgaWZzX2dl dF9uZXh0KGlmbSksICZzLT5pZl9iYXRjaHEpOwogCQl9CiAJfQogCkBAIC0yNDQsOSArMjIwLDkg QEAKIAkvKgogCSAqIFRoaXMgcHJldmVudHMgdXMgZnJvbSBtYWxsb2MoKWluZyB0b28gbWFueSBt YnVmcwogCSAqLwotCWlmIChsaW5rX3VwKSB7CisJaWYgKHMtPmxpbmtfdXApIHsKIAkJLyogaWZf c3RhcnQgd2lsbCBjaGVjayB0b3dyaXRlICovCi0JCWlmX3N0YXJ0KCk7CisJCWlmX3N0YXJ0KHMp OwogCX0KICNlbmRpZgogfQpAQCAtMjY0LDQ0ICsyNDAsNDQgQEAKICAqIHRvIHRoZSBmaXJzdCwg ZXRjLiBldGMuCiAgKi8KIHZvaWQKLWlmX3N0YXJ0KHZvaWQpCitpZl9zdGFydChzbGlycF9zdGF0 ZV90ICpzKQogewogCXN0cnVjdCBtYnVmICppZm0sICppZnF0OwogCiAJREVCVUdfQ0FMTCgiaWZf c3RhcnQiKTsKIAotCWlmIChpZl9xdWV1ZWQgPT0gMCkKKwlpZiAocy0+aWZfcXVldWVkID09IDAp CiAJICAgcmV0dXJuOyAvKiBOb3RoaW5nIHRvIGRvICovCiAKICBhZ2FpbjoKICAgICAgICAgLyog Y2hlY2sgaWYgd2UgY2FuIHJlYWxseSBvdXRwdXQgKi8KLSAgICAgICAgaWYgKCFzbGlycF9jYW5f b3V0cHV0KCkpCisgICAgICAgIGlmICghc2xpcnBfY2FuX291dHB1dChzLT51c2VyKSkKICAgICAg ICAgICAgIHJldHVybjsKIAogCS8qCiAJICogU2VlIHdoaWNoIHF1ZXVlIHRvIGdldCBuZXh0IHBh Y2tldCBmcm9tCiAJICogSWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGZhc3RxLCBzZWxlY3Qg aXQgaW1tZWRpYXRlbHkKIAkgKi8KLQlpZiAoaWZfZmFzdHEuaWZxX25leHQgIT0gJmlmX2Zhc3Rx KSB7Ci0JCWlmbSA9IGlmX2Zhc3RxLmlmcV9uZXh0OworCWlmIChpZnFfZ2V0X25leHQoJnMtPmlm X2Zhc3RxKSAhPSAmcy0+aWZfZmFzdHEpIHsKKwkJaWZtID0gaWZxX2dldF9uZXh0KCZzLT5pZl9m YXN0cSk7CiAJfSBlbHNlIHsKIAkJLyogTm90aGluZyBvbiBmYXN0cSwgc2VlIGlmIG5leHRfbSBp cyB2YWxpZCAqLwotCQlpZiAobmV4dF9tICE9ICZpZl9iYXRjaHEpCi0JCSAgIGlmbSA9IG5leHRf bTsKKwkJaWYgKHMtPm5leHRfbSAhPSAmcy0+aWZfYmF0Y2hxKQorCQkgICBpZm0gPSBzLT5uZXh0 X207CiAJCWVsc2UKLQkJICAgaWZtID0gaWZfYmF0Y2hxLmlmcV9uZXh0OworCQkgICBpZm0gPSBp ZnFfZ2V0X25leHQoJnMtPmlmX2JhdGNocSk7CiAKIAkJLyogU2V0IHdoaWNoIHBhY2tldCB0byBz ZW5kIG9uIG5leHQgaXRlcmF0aW9uICovCi0JCW5leHRfbSA9IGlmbS0+aWZxX25leHQ7CisJCXMt Pm5leHRfbSA9IGlmcV9nZXRfbmV4dChpZm0pOwogCX0KIAkvKiBSZW1vdmUgaXQgZnJvbSB0aGUg cXVldWUgKi8KLQlpZnF0ID0gaWZtLT5pZnFfcHJldjsKLQlyZW1xdWUoaWZtKTsKLQktLWlmX3F1 ZXVlZDsKKwlpZnF0ID0gaWZxX2dldF9wcmV2KGlmbSk7CisJcmVtcXVlKHMsIGlmbSk7CisJLS1z LT5pZl9xdWV1ZWQ7CiAKIAkvKiBJZiB0aGVyZSBhcmUgbW9yZSBwYWNrZXRzIGZvciB0aGlzIHNl c3Npb24sIHJlLXF1ZXVlIHRoZW0gKi8KLQlpZiAoaWZtLT5pZnNfbmV4dCAhPSAvKiBpZm0tPmlm c19wcmV2ICE9ICovIGlmbSkgewotCQlpbnNxdWUoaWZtLT5pZnNfbmV4dCwgaWZxdCk7CisJaWYg KGlmc19nZXRfbmV4dChpZm0pICE9IC8qIGlmbS0+aWZzX3ByZXYgIT0gKi8gaWZtKSB7CisJCWlu c3F1ZShzLCBpZnNfZ2V0X25leHQoaWZtKSwgaWZxdCk7CiAJCWlmc19yZW1xdWUoaWZtKTsKIAl9 CiAKQEAgLTMxMywxMCArMjg5LDEwIEBACiAJfQogCiAJLyogRW5jYXBzdWxhdGUgdGhlIHBhY2tl dCBmb3Igc2VuZGluZyAqLwotICAgICAgICBpZl9lbmNhcChpZm0tPm1fZGF0YSwgaWZtLT5tX2xl bik7CisgICAgICAgIGlmX2VuY2FwKHMsIChjb25zdCB1aW50OF90ICopaWZtLT5tX2RhdGEsIGlm bS0+bV9sZW4pOwogCi0gICAgICAgIG1fZnJlZShpZm0pOworICAgICAgICBtX2ZyZWUocywgaWZt KTsKIAotCWlmIChpZl9xdWV1ZWQpCisJaWYgKHMtPmlmX3F1ZXVlZCkKIAkgICBnb3RvIGFnYWlu OwogfQpJbmRleDogcWVtdS9zbGlycC9pZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGly cC9pZi5oCTIwMDctMTAtMjEgMTg6NDc6MDguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJw L2lmLmgJMjAwNy0xMC0yMSAxODo0NzoxMS4wMDAwMDAwMDAgKzAwMDAKQEAgLTEzLDIyICsxMyw2 IEBACiAjZGVmaW5lIElGX0FVVE9DT01QCTB4MDQJLyogQXV0b2RldGVjdCAoZGVmYXVsdCkgKi8K ICNkZWZpbmUgSUZfTk9DSURDT01QCTB4MDgJLyogQ0lEIGNvbXByZXNzaW9uICovCiAKLS8qIE5l ZWRlZCBmb3IgRnJlZUJTRCAqLwotI3VuZGVmIGlmX210dQotZXh0ZXJuIGludAlpZl9tdHU7Ci1l eHRlcm4gaW50CWlmX21ydTsJLyogTVRVIGFuZCBNUlUgKi8KLWV4dGVybiBpbnQJaWZfY29tcDsJ LyogRmxhZ3MgZm9yIGNvbXByZXNzaW9uICovCi1leHRlcm4gaW50CWlmX21heGxpbmtoZHI7Ci1l eHRlcm4gaW50CWlmX3F1ZXVlZDsJLyogTnVtYmVyIG9mIHBhY2tldHMgcXVldWVkIHNvIGZhciAq LwotZXh0ZXJuIGludAlpZl90aHJlc2g7CS8qIE51bWJlciBvZiBwYWNrZXRzIHF1ZXVlZCBiZWZv cmUgd2Ugc3RhcnQgc2VuZGluZwotCQkJCSAqICh0byBwcmV2ZW50IGFsbG9jaW5nIHRvbyBtYW55 IG1idWZzKSAqLwotCi1leHRlcm4Jc3RydWN0IG1idWYgaWZfZmFzdHE7ICAgICAgICAgICAgICAg ICAgLyogZmFzdCBxdWV1ZSAoZm9yIGludGVyYWN0aXZlIGRhdGEpICovCi1leHRlcm4Jc3RydWN0 IG1idWYgaWZfYmF0Y2hxOyAgICAgICAgICAgICAgICAgLyogcXVldWUgZm9yIG5vbi1pbnRlcmFj dGl2ZSBkYXRhICovCi1leHRlcm4Jc3RydWN0IG1idWYgKm5leHRfbTsKLQotI2RlZmluZSBpZnNf aW5pdChpZm0pICgoaWZtKS0+aWZzX25leHQgPSAoaWZtKS0+aWZzX3ByZXYgPSAoaWZtKSkKLQog LyogSW50ZXJmYWNlIHN0YXRpc3RpY3MgKi8KIHN0cnVjdCBzbGlycF9pZnN0YXRzIHsKIAl1X2lu dCBvdXRfcGt0czsJCS8qIE91dHB1dCBwYWNrZXRzICovCkluZGV4OiBxZW11L3NsaXJwL2lwLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL2lwLmgJMjAwNy0xMC0yMSAxODo0NzowOC4w MDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvaXAuaAkyMDA3LTEwLTIyIDE3OjQ5OjIxLjAw MDAwMDAwMCArMDAwMApAQCAtMzcsNiArMzcsOCBAQAogI2lmbmRlZiBfSVBfSF8KICNkZWZpbmUg X0lQX0hfCiAKKyNpbmNsdWRlICJtYnVmLmgiCisKICNpZmRlZiBXT1JEU19CSUdFTkRJQU4KICMg aWZuZGVmIE5UT0hMCiAjICBkZWZpbmUgTlRPSEwoZCkKQEAgLTIxMyw2ICsyMTUsNTAgQEAKIAlz dHJ1Y3QJaW5fYWRkciBpaF9kc3Q7CQkvKiBkZXN0aW5hdGlvbiBpbnRlcm5ldCBhZGRyZXNzICov CiB9OwogCisjaWYgMAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBvdmx5ICppaF9nZXRfbmV4dChz bGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaXBvdmx5ICppaCkKK3sKKyAgICByZXR1cm4gKHN0cnVj dCBpcG92bHkgKikodW5zaWduZWQgbG9uZylpaC0+aWhfbmV4dDsKK30KKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgaXBvdmx5ICppaF9nZXRfcHJldihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaXBv dmx5ICppaCkKK3sKKyAgICByZXR1cm4gKHN0cnVjdCBpcG92bHkgKikodW5zaWduZWQgbG9uZylp aC0+aWhfcHJldjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGloX3NldF9uZXh0KHNsaXJwX3N0 YXRlX3QgKnMsIHN0cnVjdCBpcG92bHkgKmloLCBzdHJ1Y3QgaXBvdmx5ICpuZXh0KQoreworICAg IGloLT5paF9uZXh0ID0gKGNhZGRyMzJfdCkodW5zaWduZWQgbG9uZyluZXh0OworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgaWhfc2V0X3ByZXYoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IGlwb3Zs eSAqaWgsIHN0cnVjdCBpcG92bHkgKnByZXYpCit7CisgICAgaWgtPmloX3ByZXYgPSAoY2FkZHIz Ml90KSh1bnNpZ25lZCBsb25nKXByZXY7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3Qg aXBvdmx5ICppaF9nZXRfbmV4dChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaXBvdmx5ICppaCkK K3sKKyAgICByZXR1cm4gbXRvZChkdG9tKHMsIGloKS0+bV9oZHIubmV4dF9pcCwgc3RydWN0IGlw b3ZseSAqKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBvdmx5ICppaF9nZXRfcHJldihz bGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaXBvdmx5ICppaCkKK3sKKyAgICByZXR1cm4gbXRvZChk dG9tKHMsIGloKS0+bV9oZHIucHJldl9pcCwgc3RydWN0IGlwb3ZseSAqKTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIGloX3NldF9uZXh0KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBpcG92bHkg KmloLCBzdHJ1Y3QgaXBvdmx5ICpuZXh0KQoreworICAgIGloLT5paF9uZXh0ID0gKGNhZGRyMzJf dCkodW5zaWduZWQgbG9uZyluZXh0OworICAgIGR0b20ocywgaWgpLT5tX2hkci5uZXh0X2lwID0g ZHRvbShzLCBuZXh0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGloX3NldF9wcmV2KHNsaXJw X3N0YXRlX3QgKnMsIHN0cnVjdCBpcG92bHkgKmloLCBzdHJ1Y3QgaXBvdmx5ICpwcmV2KQorewor ICAgIGloLT5paF9wcmV2ID0gKGNhZGRyMzJfdCkodW5zaWduZWQgbG9uZylwcmV2OworICAgIGR0 b20ocywgaWgpLT5tX2hkci5wcmV2X2lwID0gZHRvbShzLCBwcmV2KTsKK30KKyNlbmRpZgorCiAv KgogICogSXAgcmVhc3NlbWJseSBxdWV1ZSBzdHJ1Y3R1cmUuICBFYWNoIGZyYWdtZW50CiAgKiBi ZWluZyByZWFzc2VtYmxlZCBpcyBhdHRhY2hlZCB0byBvbmUgb2YgdGhlc2Ugc3RydWN0dXJlcy4K QEAgLTIyMSwxNSArMjY3LDEwOSBAQAogICogc2l6ZSAyOCBieXRlcwogICovCiBzdHJ1Y3QgaXBx IHsKLQlpcHFwXzMyIG5leHQscHJldjsJLyogdG8gb3RoZXIgcmVhc3MgaGVhZGVycyAqLworCWlw cXBfMzIgCWlwcV9yX25leHQsIGlwcV9yX3ByZXY7CS8qIHRvIG90aGVyIHJlYXNzIGhlYWRlcnMg Ki8KIAl1X2ludDhfdAlpcHFfdHRsOwkJLyogdGltZSBmb3IgcmVhc3MgcSB0byBsaXZlICovCiAJ dV9pbnQ4X3QJaXBxX3A7CQkJLyogcHJvdG9jb2wgb2YgdGhpcyBmcmFnbWVudCAqLwogCXVfaW50 MTZfdAlpcHFfaWQ7CQkJLyogc2VxdWVuY2UgaWQgZm9yIHJlYXNzZW1ibHkgKi8KLQlpcGFzZnJh Z3BfMzIgaXBxX25leHQsaXBxX3ByZXY7CisJaXBhc2ZyYWdwXzMyCWlwcV9uZXh0X2ZyYWcsIGlw cV9wcmV2X2ZyYWc7CiAJCQkJCS8qIHRvIGlwIGhlYWRlcnMgb2YgZnJhZ21lbnRzICovCi0Jc3Ry dWN0CWluX2FkZHIgaXBxX3NyYyxpcHFfZHN0OworCXN0cnVjdAlpbl9hZGRyIGlwcV9zcmMsIGlw cV9kc3Q7CiB9OwogCisjaWYgMQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBxICppcHFfZ2V0X25l eHQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IGlwcSAqaXBxKQoreworICAgIHJldHVybiAoc3Ry dWN0IGlwcSAqKSh1bnNpZ25lZCBsb25nKWlwcS0+aXBxX3JfbmV4dDsKK30KKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgaXBxICppcHFfZ2V0X3ByZXYoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IGlw cSAqaXBxKQoreworICAgIHJldHVybiAoc3RydWN0IGlwcSAqKSh1bnNpZ25lZCBsb25nKWlwcS0+ aXBxX3JfcHJldjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwcV9zZXRfbmV4dChzbGlycF9z dGF0ZV90ICpzLCBzdHJ1Y3QgaXBxICppcHEsIHN0cnVjdCBpcHEgKm5leHQpCit7CisgICAgaXBx LT5pcHFfcl9uZXh0ID0gKGlwcXBfMzIpKHVuc2lnbmVkIGxvbmcpbmV4dDsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIGlwcV9zZXRfcHJldihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaXBxICpp cHEsIHN0cnVjdCBpcHEgKnByZXYpCit7CisgICAgaXBxLT5pcHFfcl9wcmV2ID0gKGlwcXBfMzIp KHVuc2lnbmVkIGxvbmcpcHJldjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhc2ZyYWcg KmlwcV9nZXRfbmV4dF9mcmFnKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBpcHEgKmlwcSkKK3sK KyAgICByZXR1cm4gKHN0cnVjdCBpcGFzZnJhZyAqKSh1bnNpZ25lZCBsb25nKWlwcS0+aXBxX25l eHRfZnJhZzsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhc2ZyYWcgKmlwcV9nZXRfcHJl dl9mcmFnKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBpcHEgKmlwcSkKK3sKKyAgICByZXR1cm4g KHN0cnVjdCBpcGFzZnJhZyAqKSh1bnNpZ25lZCBsb25nKWlwcS0+aXBxX3ByZXZfZnJhZzsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIGlwcV9zZXRfbmV4dF9mcmFnKHNsaXJwX3N0YXRlX3QgKnMs IHN0cnVjdCBpcHEgKmlwcSwgc3RydWN0IGlwYXNmcmFnICpuZXh0KQoreworICAgIGlwcS0+aXBx X25leHRfZnJhZyA9IChpcGFzZnJhZ3BfMzIpKHVuc2lnbmVkIGxvbmcpbmV4dDsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIGlwcV9zZXRfcHJldl9mcmFnKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVj dCBpcHEgKmlwcSwgc3RydWN0IGlwYXNmcmFnICpwcmV2KQoreworICAgIGlwcS0+aXBxX3ByZXZf ZnJhZyA9IChpcGFzZnJhZ3BfMzIpKHVuc2lnbmVkIGxvbmcpcHJldjsKK30KKyNlbHNlCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBpcHEgKmlwcV9nZXRfbmV4dChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1 Y3QgaXBxICppcHEpCit7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogaXBxICVwIG0gJXBcbiIs IF9fZnVuY19fLCBpcHEsIGR0b20ocywgaXBxKSk7CisgICAgcmV0dXJuIG10b2QoZHRvbShzLCBp cHEpLT5tX2hkci5uZXh0X2lwLCBzdHJ1Y3QgaXBxICopOworfQorCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBpcHEgKmlwcV9nZXRfcHJldihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaXBxICppcHEp Cit7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogaXBxICVwIG0gJXBcbiIsIF9fZnVuY19fLCBp cHEsIGR0b20ocywgaXBxKSk7CisgICAgcmV0dXJuIG10b2QoZHRvbShzLCBpcHEpLT5tX2hkci5w cmV2X2lwLCBzdHJ1Y3QgaXBxICopOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXBxX3NldF9u ZXh0KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBpcHEgKmlwcSwgc3RydWN0IGlwcSAqbmV4dCkK K3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpcHEgJXAgbSAlcCBuZXh0ICVwXG4iLCBfX2Z1 bmNfXywgaXBxLCBkdG9tKHMsIGlwcSksIG5leHQpOworICAgIGlwcS0+aXBxX3JfbmV4dCA9IChp cHFwXzMyKSh1bnNpZ25lZCBsb25nKW5leHQ7CisgICAgZHRvbShzLCBpcHEpLT5tX2hkci5uZXh0 X2lwID0gZHRvbShzLCBuZXh0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwcV9zZXRfcHJl dihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaXBxICppcHEsIHN0cnVjdCBpcHEgKnByZXYpCit7 CisgICAgZnByaW50ZihzdGRlcnIsICIlczogaXBxICVwIG0gJXAgbmV4dCAlcFxuIiwgX19mdW5j X18sIGlwcSwgZHRvbShzLCBpcHEpLCBwcmV2KTsKKyAgICBpcHEtPmlwcV9yX3ByZXYgPSAoaXBx cF8zMikodW5zaWduZWQgbG9uZylwcmV2OworICAgIGR0b20ocywgaXBxKS0+bV9oZHIucHJldl9p cCA9IGR0b20ocywgcHJldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXNmcmFnICpp cHFfZ2V0X25leHRfZnJhZyhzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgaXBxICppcHEpCit7Cisg ICAgZnByaW50ZihzdGRlcnIsICIlczogaXBxICVwIG0gJXBcbiIsIF9fZnVuY19fLCBpcHEsIGR0 b20ocywgaXBxKSk7CisgICAgcmV0dXJuIG10b2QoZHRvbShzLCBpcHEpLT5tX2hkci5uZXh0X2Zy YWcsIHN0cnVjdCBpcGFzZnJhZyAqKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhc2Zy YWcgKmlwcV9nZXRfcHJldl9mcmFnKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBpcHEgKmlwcSkK K3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpcHEgJXAgbSAlcFxuIiwgX19mdW5jX18sIGlw cSwgZHRvbShzLCBpcHEpKTsKKyAgICByZXR1cm4gbXRvZChkdG9tKHMsIGlwcSktPm1faGRyLnBy ZXZfZnJhZywgc3RydWN0IGlwYXNmcmFnICopOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXBx X3NldF9uZXh0X2ZyYWcoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IGlwcSAqaXBxLCBzdHJ1Y3Qg aXBhc2ZyYWcgKm5leHQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogaXBxICVwIG0gJXAg bmV4dCAlcFxuIiwgX19mdW5jX18sIGlwcSwgZHRvbShzLCBpcHEpLCBuZXh0KTsKKyAgICBpcHEt PmlwcV9uZXh0X2ZyYWcgPSAoaXBhc2ZyYWdwXzMyKSh1bnNpZ25lZCBsb25nKW5leHQ7CisgICAg ZHRvbShzLCBpcHEpLT5tX2hkci5uZXh0X2ZyYWcgPSBkdG9tKHMsIG5leHQpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQgaXBxX3NldF9wcmV2X2ZyYWcoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0 IGlwcSAqaXBxLCBzdHJ1Y3QgaXBhc2ZyYWcgKnByZXYpCit7CisgICAgZnByaW50ZihzdGRlcnIs ICIlczogaXBxICVwIG0gJXAgbmV4dCAlcFxuIiwgX19mdW5jX18sIGlwcSwgZHRvbShzLCBpcHEp LCBwcmV2KTsKKyAgICBpcHEtPmlwcV9wcmV2X2ZyYWcgPSAoaXBhc2ZyYWdwXzMyKSh1bnNpZ25l ZCBsb25nKXByZXY7CisgICAgZHRvbShzLCBpcHEpLT5tX2hkci5wcmV2X2ZyYWcgPSBkdG9tKHMs IHByZXYpOworfQorI2VuZGlmCisKIC8qCiAgKiBJcCBoZWFkZXIsIHdoZW4gaG9sZGluZyBhIGZy YWdtZW50LgogICoKQEAgLTI1NSwxMCArMzk1LDU2IEBACiAJdV9pbnQ4X3QJaXBfdHRsOwogCXVf aW50OF90CWlwX3A7CiAJdV9pbnQxNl90CWlwX3N1bTsKLQlpcGFzZnJhZ3BfMzIgaXBmX25leHQ7 CQkvKiBuZXh0IGZyYWdtZW50ICovCi0JaXBhc2ZyYWdwXzMyIGlwZl9wcmV2OwkJLyogcHJldmlv dXMgZnJhZ21lbnQgKi8KKwlpcGFzZnJhZ3BfMzIgaXBmX25leHRfZnJhZzsJCS8qIG5leHQgZnJh Z21lbnQgKi8KKwlpcGFzZnJhZ3BfMzIgaXBmX3ByZXZfZnJhZzsJCS8qIHByZXZpb3VzIGZyYWdt ZW50ICovCiB9OwotCisjaWYgMQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhc2ZyYWcgKmlwYXNm cmFnX2dldF9uZXh0X2ZyYWcoc3RydWN0IGlwYXNmcmFnICppcGFzZnJhZykKK3sKKyAgICByZXR1 cm4gKHN0cnVjdCBpcGFzZnJhZyAqKSh1bnNpZ25lZCBsb25nKWlwYXNmcmFnLT5pcGZfbmV4dF9m cmFnOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGFzZnJhZyAqaXBhc2ZyYWdfZ2V0X3By ZXZfZnJhZyhzdHJ1Y3QgaXBhc2ZyYWcgKmlwYXNmcmFnKQoreworICAgIHJldHVybiAoc3RydWN0 IGlwYXNmcmFnICopKHVuc2lnbmVkIGxvbmcpaXBhc2ZyYWctPmlwZl9wcmV2X2ZyYWc7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCBpcGFzZnJhZ19zZXRfbmV4dF9mcmFnKHN0cnVjdCBpcGFzZnJh ZyAqaXBhc2ZyYWcsIHN0cnVjdCBpcGFzZnJhZyAqbmV4dCkKK3sKKyAgICBpcGFzZnJhZy0+aXBm X25leHRfZnJhZyA9IChpcGFzZnJhZ3BfMzIpKHVuc2lnbmVkIGxvbmcpbmV4dDsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIGlwYXNmcmFnX3NldF9wcmV2X2ZyYWcoc3RydWN0IGlwYXNmcmFnICpp cGFzZnJhZywgc3RydWN0IGlwYXNmcmFnICpwcmV2KQoreworICAgIGlwYXNmcmFnLT5pcGZfcHJl dl9mcmFnID0gKGlwYXNmcmFncF8zMikodW5zaWduZWQgbG9uZylwcmV2OworfQorI2Vsc2UKK3N0 YXRpYyBpbmxpbmUgc3RydWN0IGlwYXNmcmFnICppcGFzZnJhZ19nZXRfbmV4dF9mcmFnKHNsaXJw X3N0YXRlX3QgKnMsIHN0cnVjdCBpcGFzZnJhZyAqaXBhc2ZyYWcpCit7CisgICAgZnByaW50Zihz dGRlcnIsICIlczogaXBhc2ZyYWcgJXAgbSAlcFxuIiwgX19mdW5jX18sIGlwYXNmcmFnLCBkdG9t KHMsIGlwYXNmcmFnKSk7CisgICAgcmV0dXJuIG10b2QoZHRvbShzLCBpcGFzZnJhZyktPm1faGRy Lm5leHRfZnJhZywgc3RydWN0IGlwYXNmcmFnICopOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVj dCBpcGFzZnJhZyAqaXBhc2ZyYWdfZ2V0X3ByZXZfZnJhZyhzbGlycF9zdGF0ZV90ICpzLCBzdHJ1 Y3QgaXBhc2ZyYWcgKmlwYXNmcmFnKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGlwYXNm cmFnICVwIG0gJXBcbiIsIF9fZnVuY19fLCBpcGFzZnJhZywgZHRvbShzLCBpcGFzZnJhZykpOwor ICAgIHJldHVybiBtdG9kKGR0b20ocywgaXBhc2ZyYWcpLT5tX2hkci5wcmV2X2ZyYWcsIHN0cnVj dCBpcGFzZnJhZyAqKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwYXNmcmFnX3NldF9uZXh0 X2ZyYWcoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IGlwYXNmcmFnICppcGFzZnJhZywgc3RydWN0 IGlwYXNmcmFnICpuZXh0KQoreworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGlwYXNmcmFnICVw IG0gJXAgbmV4dCAlcFxuIiwgX19mdW5jX18sIGlwYXNmcmFnLCBkdG9tKHMsIGlwYXNmcmFnKSwg bmV4dCk7CisgICAgaXBhc2ZyYWctPmlwZl9uZXh0X2ZyYWcgPSAoaXBhc2ZyYWdwXzMyKSh1bnNp Z25lZCBsb25nKW5leHQ7CisgICAgZHRvbShzLCBpcGFzZnJhZyktPm1faGRyLm5leHRfZnJhZyA9 IGR0b20ocywgbmV4dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcGFzZnJhZ19zZXRfcHJl dl9mcmFnKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBpcGFzZnJhZyAqaXBhc2ZyYWcsIHN0cnVj dCBpcGFzZnJhZyAqcHJldikKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpcGFzZnJhZyAl cCBtICVwIG5leHQgJXBcbiIsIF9fZnVuY19fLCBpcGFzZnJhZywgZHRvbShzLCBpcGFzZnJhZyks IHByZXYpOworICAgIGlwYXNmcmFnLT5pcGZfcHJldl9mcmFnID0gKGlwYXNmcmFncF8zMikodW5z aWduZWQgbG9uZylwcmV2OworICAgIGR0b20ocywgaXBhc2ZyYWcpLT5tX2hkci5wcmV2X2ZyYWcg PSBkdG9tKHMsIHByZXYpOworfQorI2VuZGlmCiAvKgogICogU3RydWN0dXJlIHN0b3JlZCBpbiBt YnVmIGluIGlucGNiLmlwX29wdGlvbnMKICAqIGFuZCBwYXNzZWQgdG8gaXBfb3V0cHV0IHdoZW4g aXAgb3B0aW9ucyBhcmUgaW4gdXNlLgpAQCAtMzA1LDkgKzQ5MSw1IEBACiAJdV9sb25nCWlwc191 bmFsaWduZWQ7CQkvKiB0aW1lcyB0aGUgaXAgcGFja2V0IHdhcyBub3QgYWxpZ25lZCAqLwogfTsK IAotZXh0ZXJuIHN0cnVjdAlpcHN0YXQJaXBzdGF0OwotZXh0ZXJuIHN0cnVjdAlpcHEJaXBxOwkJ CS8qIGlwIHJlYXNzLiBxdWV1ZSAqLwotZXh0ZXJuIHVfaW50MTZfdAlpcF9pZDsJCQkJLyogaXAg cGFja2V0IGN0ciwgZm9yIGlkcyAqLwotZXh0ZXJuIGludAlpcF9kZWZ0dGw7CQkJLyogZGVmYXVs dCBJUCB0dGwgKi8KIAogI2VuZGlmCkluZGV4OiBxZW11L3NsaXJwL2lwX2ljbXAuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvaXBfaWNtcC5jCTIwMDctMTAtMjEgMTg6NDc6MDguMDAw MDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL2lwX2ljbXAuYwkyMDA3LTEwLTIxIDE4OjQ3OjE2 LjAwMDAwMDAwMCArMDAwMApAQCAtMzcsMTQgKzM3LDEzIEBACiAjaW5jbHVkZSAic2xpcnAuaCIK ICNpbmNsdWRlICJpcF9pY21wLmgiCiAKLXN0cnVjdCBpY21wc3RhdCBpY21wc3RhdDsKIAogLyog VGhlIG1lc3NhZ2Ugc2VudCB3aGVuIGVtdWxhdGluZyBQSU5HICovCi0vKiBCZSBuaWNlIGFuZCB0 ZWxsIHRoZW0gaXQncyBqdXN0IGEgcHN1ZWRvLXBpbmcgcGFja2V0ICovCi1jaGFyIGljbXBfcGlu Z19tc2dbXSA9ICJUaGlzIGlzIGEgcHN1ZWRvLVBJTkcgcGFja2V0IHVzZWQgYnkgU2xpcnAgdG8g ZW11bGF0ZSBJQ01QIEVDSE8tUkVRVUVTVCBwYWNrZXRzLlxuIjsKKy8qIEJlIG5pY2UgYW5kIHRl bGwgdGhlbSBpdCdzIGp1c3QgYSBwc2V1ZG8tcGluZyBwYWNrZXQgKi8KK3N0YXRpYyBjb25zdCBj aGFyIGljbXBfcGluZ19tc2dbXSA9ICJUaGlzIGlzIGEgcHNldWRvLVBJTkcgcGFja2V0IHVzZWQg YnkgU2xpcnAgdG8gZW11bGF0ZSBJQ01QIEVDSE8tUkVRVUVTVCBwYWNrZXRzLlxuIjsKIAogLyog bGlzdCBvZiBhY3Rpb25zIGZvciBpY21wX2Vycm9yKCkgb24gUlggb2YgYW4gaWNtcCBtZXNzYWdl ICovCi1zdGF0aWMgaW50IGljbXBfZmx1c2hbMTldID0geworc3RhdGljIGNvbnN0IGludCBpY21w X2ZsdXNoWzE5XSA9IHsKIC8qICBFQ0hPIFJFUExZICgwKSAgKi8gICAwLAogCQkgICAgICAgICAx LAogCQkgICAgICAgICAxLApAQCAtNzAsOSArNjksNyBAQAogICogUHJvY2VzcyBhIHJlY2VpdmVk IElDTVAgbWVzc2FnZS4KICAqLwogdm9pZAotaWNtcF9pbnB1dChtLCBobGVuKQotICAgICBzdHJ1 Y3QgbWJ1ZiAqbTsKLSAgICAgaW50IGhsZW47CitpY21wX2lucHV0KHNsaXJwX3N0YXRlX3QgKnMs IHN0cnVjdCBtYnVmICptLCBpbnQgaGxlbikKIHsKICAgcmVnaXN0ZXIgc3RydWN0IGljbXAgKmlj cDsKICAgcmVnaXN0ZXIgc3RydWN0IGlwICppcD1tdG9kKG0sIHN0cnVjdCBpcCAqKTsKQEAgLTgz LDE2ICs4MCwxNiBAQAogICBERUJVR19BUkcoIm0gPSAlbHgiLCAobG9uZyApbSk7CiAgIERFQlVH X0FSRygibV9sZW4gPSAlZCIsIG0tPm1fbGVuKTsKIAotICBpY21wc3RhdC5pY3BzX3JlY2VpdmVk Kys7CisgIFNUQVQocy0+aWNtcHN0YXQuaWNwc19yZWNlaXZlZCsrKTsKIAogICAvKgogICAgKiBM b2NhdGUgaWNtcCBzdHJ1Y3R1cmUgaW4gbWJ1ZiwgYW5kIGNoZWNrCiAgICAqIHRoYXQgaXRzIG5v dCBjb3JydXB0ZWQgYW5kIG9mIGF0IGxlYXN0IG1pbmltdW0gbGVuZ3RoLgogICAgKi8KICAgaWYg KGljbXBsZW4gPCBJQ01QX01JTkxFTikgeyAgICAgICAgICAvKiBtaW4gOCBieXRlcyBwYXlsb2Fk ICovCi0gICAgaWNtcHN0YXQuaWNwc190b29zaG9ydCsrOworICAgIFNUQVQocy0+aWNtcHN0YXQu aWNwc190b29zaG9ydCsrKTsKICAgZnJlZWl0OgotICAgIG1fZnJlZW0obSk7CisgICAgbV9mcmVl bShzLCBtKTsKICAgICBnb3RvIGVuZF9lcnJvcjsKICAgfQogCkBAIC0xMDAsNyArOTcsNyBAQAog ICBtLT5tX2RhdGEgKz0gaGxlbjsKICAgaWNwID0gbXRvZChtLCBzdHJ1Y3QgaWNtcCAqKTsKICAg aWYgKGNrc3VtKG0sIGljbXBsZW4pKSB7Ci0gICAgaWNtcHN0YXQuaWNwc19jaGVja3N1bSsrOwor ICAgIFNUQVQocy0+aWNtcHN0YXQuaWNwc19jaGVja3N1bSsrKTsKICAgICBnb3RvIGZyZWVpdDsK ICAgfQogICBtLT5tX2xlbiArPSBobGVuOwpAQCAtMTE0LDE3ICsxMTEsMTcgQEAKICAgY2FzZSBJ Q01QX0VDSE86CiAgICAgaWNwLT5pY21wX3R5cGUgPSBJQ01QX0VDSE9SRVBMWTsKICAgICBpcC0+ aXBfbGVuICs9IGhsZW47CSAgICAgICAgICAgICAvKiBzaW5jZSBpcF9pbnB1dCBzdWJ0cmFjdHMg dGhpcyAqLwotICAgIGlmIChpcC0+aXBfZHN0LnNfYWRkciA9PSBhbGlhc19hZGRyLnNfYWRkcikg ewotICAgICAgaWNtcF9yZWZsZWN0KG0pOworICAgIGlmIChpcC0+aXBfZHN0LnNfYWRkciA9PSBz LT5hbGlhc19hZGRyLnNfYWRkcikgeworICAgICAgaWNtcF9yZWZsZWN0KHMsIG0pOwogICAgIH0g ZWxzZSB7CiAgICAgICBzdHJ1Y3Qgc29ja2V0ICpzbzsKICAgICAgIHN0cnVjdCBzb2NrYWRkcl9p biBhZGRyOwogICAgICAgaWYgKChzbyA9IHNvY3JlYXRlKCkpID09IE5VTEwpIGdvdG8gZnJlZWl0 OwotICAgICAgaWYodWRwX2F0dGFjaChzbykgPT0gLTEpIHsKKyAgICAgIGlmKHVkcF9hdHRhY2go cywgc28pID09IC0xKSB7CiAJREVCVUdfTUlTQygoZGZkLCJpY21wX2lucHV0IHVkcF9hdHRhY2gg ZXJybm8gPSAlZC0lc1xuIiwKIAkJICAgIGVycm5vLHN0cmVycm9yKGVycm5vKSkpOwotCXNvZnJl ZShzbyk7Ci0JbV9mcmVlKG0pOworCXNvZnJlZShzLCBzbyk7CisJbV9mcmVlKHMsIG0pOwogCWdv dG8gZW5kX2Vycm9yOwogICAgICAgfQogICAgICAgc28tPnNvX20gPSBtOwpAQCAtMTM4LDE1ICsx MzUsMTUgQEAKIAogICAgICAgLyogU2VuZCB0aGUgcGFja2V0ICovCiAgICAgICBhZGRyLnNpbl9m YW1pbHkgPSBBRl9JTkVUOwotICAgICAgaWYgKChzby0+c29fZmFkZHIuc19hZGRyICYgaHRvbmwo MHhmZmZmZmYwMCkpID09IHNwZWNpYWxfYWRkci5zX2FkZHIpIHsKKyAgICAgIGlmICgoc28tPnNv X2ZhZGRyLnNfYWRkciAmIGh0b25sKDB4ZmZmZmZmMDApKSA9PSBzLT5zcGVjaWFsX2FkZHIuc19h ZGRyKSB7CiAJLyogSXQncyBhbiBhbGlhcyAqLwogCXN3aXRjaChudG9obChzby0+c29fZmFkZHIu c19hZGRyKSAmIDB4ZmYpIHsKIAljYXNlIENUTF9ETlM6Ci0JICBhZGRyLnNpbl9hZGRyID0gZG5z X2FkZHI7CisJICBhZGRyLnNpbl9hZGRyID0gcy0+ZG5zX2FkZHI7CiAJICBicmVhazsKIAljYXNl IENUTF9BTElBUzoKIAlkZWZhdWx0OgotCSAgYWRkci5zaW5fYWRkciA9IGxvb3BiYWNrX2FkZHI7 CisJICBhZGRyLnNpbl9hZGRyID0gcy0+bG9vcGJhY2tfYWRkcjsKIAkgIGJyZWFrOwogCX0KICAg ICAgIH0gZWxzZSB7CkBAIC0xNTcsOCArMTU0LDggQEAKIAkJKHN0cnVjdCBzb2NrYWRkciAqKSZh ZGRyLCBzaXplb2YoYWRkcikpID09IC0xKSB7CiAJREVCVUdfTUlTQygoZGZkLCJpY21wX2lucHV0 IHVkcCBzZW5kdG8gdHggZXJybm8gPSAlZC0lc1xuIiwKIAkJICAgIGVycm5vLHN0cmVycm9yKGVy cm5vKSkpOwotCWljbXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILElDTVBfVU5SRUFDSF9ORVQsIDAs c3RyZXJyb3IoZXJybm8pKTsKLQl1ZHBfZGV0YWNoKHNvKTsKKwlpY21wX2Vycm9yKHMsIG0sIElD TVBfVU5SRUFDSCxJQ01QX1VOUkVBQ0hfTkVULCAwLHN0cmVycm9yKGVycm5vKSk7CisJdWRwX2Rl dGFjaChzLCBzbyk7CiAgICAgICB9CiAgICAgfSAvKiBpZiBpcC0+aXBfZHN0LnNfYWRkciA9PSBh bGlhc19hZGRyLnNfYWRkciAqLwogICAgIGJyZWFrOwpAQCAtMTcwLDEzICsxNjcsMTMgQEAKICAg Y2FzZSBJQ01QX1RTVEFNUDoKICAgY2FzZSBJQ01QX01BU0tSRVE6CiAgIGNhc2UgSUNNUF9SRURJ UkVDVDoKLSAgICBpY21wc3RhdC5pY3BzX25vdHN1cHArKzsKLSAgICBtX2ZyZWVtKG0pOworICAg IFNUQVQocy0+aWNtcHN0YXQuaWNwc19ub3RzdXBwKyspOworICAgIG1fZnJlZW0ocywgbSk7CiAg ICAgYnJlYWs7CiAKICAgZGVmYXVsdDoKLSAgICBpY21wc3RhdC5pY3BzX2JhZHR5cGUrKzsKLSAg ICBtX2ZyZWVtKG0pOworICAgIFNUQVQocy0+aWNtcHN0YXQuaWNwc19iYWR0eXBlKyspOworICAg IG1fZnJlZW0ocywgbSk7CiAgIH0gLyogc3dpdGggKi8KIAogZW5kX2Vycm9yOgpAQCAtMjA0LDEz ICsyMDEsOCBAQAogICovCiAKICNkZWZpbmUgSUNNUF9NQVhEQVRBTEVOIChJUF9NU1MtMjgpCi12 b2lkCi1pY21wX2Vycm9yKG1zcmMsIHR5cGUsIGNvZGUsIG1pbnNpemUsIG1lc3NhZ2UpCi0gICAg IHN0cnVjdCBtYnVmICptc3JjOwotICAgICB1X2NoYXIgdHlwZTsKLSAgICAgdV9jaGFyIGNvZGU7 Ci0gICAgIGludCBtaW5zaXplOwotICAgICBjaGFyICptZXNzYWdlOwordm9pZCBpY21wX2Vycm9y KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBtYnVmICptc3JjLCB1X2NoYXIgdHlwZSwgdV9jaGFy IGNvZGUsCisgICAgICAgICAgICAgICAgaW50IG1pbnNpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2Up CiB7CiAgIHVuc2lnbmVkIGhsZW4sIHNobGVuLCBzX2lwX2xlbjsKICAgcmVnaXN0ZXIgc3RydWN0 IGlwICppcDsKQEAgLTI0NywxMCArMjM5LDEzIEBACiAgIH0KIAogICAvKiBtYWtlIGEgY29weSAq LwotICBpZighKG09bV9nZXQoKSkpIGdvdG8gZW5kX2Vycm9yOyAgICAgICAgICAgICAgIC8qIGdl dCBtYnVmICovCisgIGlmICghKG0gPSBtX2dldChzKSkpCisgICAgICBnb3RvIGVuZF9lcnJvcjsg ICAgICAgICAgICAgICAvKiBnZXQgbWJ1ZiAqLworCiAgIHsgaW50IG5ld19tX3NpemU7CiAgICAg bmV3X21fc2l6ZT1zaXplb2Yoc3RydWN0IGlwICkrSUNNUF9NSU5MRU4rbXNyYy0+bV9sZW4rSUNN UF9NQVhEQVRBTEVOOwotICAgIGlmKG5ld19tX3NpemU+bS0+bV9zaXplKSBtX2luYyhtLCBuZXdf bV9zaXplKTsKKyAgICBpZiAobmV3X21fc2l6ZSA+IG0tPm1fc2l6ZSkKKyAgICAgICAgbV9pbmMo bSwgbmV3X21fc2l6ZSk7CiAgIH0KICAgbWVtY3B5KG0tPm1fZGF0YSwgbXNyYy0+bV9kYXRhLCBt c3JjLT5tX2xlbik7CiAgIG0tPm1fbGVuID0gbXNyYy0+bV9sZW47ICAgICAgICAgICAgICAgICAg ICAgICAgLyogY29weSBtc3JjIHRvIG0gKi8KQEAgLTMxMCwxMSArMzA1LDExIEBACiAgIGlwLT5p cF90dGwgPSBNQVhUVEw7CiAgIGlwLT5pcF9wID0gSVBQUk9UT19JQ01QOwogICBpcC0+aXBfZHN0 ID0gaXAtPmlwX3NyYzsgICAgLyogaXAgYWRyZXNzZXMgKi8KLSAgaXAtPmlwX3NyYyA9IGFsaWFz X2FkZHI7CisgIGlwLT5pcF9zcmMgPSBzLT5hbGlhc19hZGRyOwogCi0gICh2b2lkICkgaXBfb3V0 cHV0KChzdHJ1Y3Qgc29ja2V0ICopTlVMTCwgbSk7CisgICh2b2lkICkgaXBfb3V0cHV0KHMsIChz dHJ1Y3Qgc29ja2V0ICopTlVMTCwgbSk7CiAKLSAgaWNtcHN0YXQuaWNwc19yZWZsZWN0Kys7Cisg IFNUQVQocy0+aWNtcHN0YXQuaWNwc19yZWZsZWN0KyspOwogCiBlbmRfZXJyb3I6CiAgIHJldHVy bjsKQEAgLTMyNSw4ICszMjAsNyBAQAogICogUmVmbGVjdCB0aGUgaXAgcGFja2V0IGJhY2sgdG8g dGhlIHNvdXJjZQogICovCiB2b2lkCi1pY21wX3JlZmxlY3QobSkKLSAgICAgc3RydWN0IG1idWYg Km07CitpY21wX3JlZmxlY3Qoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IG1idWYgKm0pCiB7CiAg IHJlZ2lzdGVyIHN0cnVjdCBpcCAqaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKICAgaW50IGhs ZW4gPSBpcC0+aXBfaGwgPDwgMjsKQEAgLTM2OSw3ICszNjMsNyBAQAogICAgIGlwLT5pcF9zcmMg PSBpY21wX2RzdDsKICAgfQogCi0gICh2b2lkICkgaXBfb3V0cHV0KChzdHJ1Y3Qgc29ja2V0ICop TlVMTCwgbSk7CisgICh2b2lkICkgaXBfb3V0cHV0KHMsIChzdHJ1Y3Qgc29ja2V0ICopTlVMTCwg bSk7CiAKLSAgaWNtcHN0YXQuaWNwc19yZWZsZWN0Kys7CisgIFNUQVQocy0+aWNtcHN0YXQuaWNw c19yZWZsZWN0KyspOwogfQpJbmRleDogcWVtdS9zbGlycC9pcF9pY21wLmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gcWVtdS5vcmlnL3NsaXJwL2lwX2ljbXAuaAkyMDA3LTEwLTIxIDE4OjQ3OjA4LjAwMDAwMDAw MCArMDAwMAorKysgcWVtdS9zbGlycC9pcF9pY21wLmgJMjAwNy0xMC0yMSAxODo0NzoxMS4wMDAw MDAwMDAgKzAwMDAKQEAgLTE1Nyw4ICsxNTcsOSBAQAogCSh0eXBlKSA9PSBJQ01QX0lSRVEgfHwg KHR5cGUpID09IElDTVBfSVJFUVJFUExZIHx8IFwKIAkodHlwZSkgPT0gSUNNUF9NQVNLUkVRIHx8 ICh0eXBlKSA9PSBJQ01QX01BU0tSRVBMWSkKIAotdm9pZCBpY21wX2lucHV0IF9QKChzdHJ1Y3Qg bWJ1ZiAqLCBpbnQpKTsKLXZvaWQgaWNtcF9lcnJvciBfUCgoc3RydWN0IG1idWYgKiwgdV9jaGFy LCB1X2NoYXIsIGludCwgY2hhciAqKSk7Ci12b2lkIGljbXBfcmVmbGVjdCBfUCgoc3RydWN0IG1i dWYgKikpOwordm9pZCBpY21wX2lucHV0KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBtYnVmICpt LCBpbnQgaGxlbik7Cit2b2lkIGljbXBfZXJyb3Ioc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IG1i dWYgKm1zcmMsIHVfY2hhciB0eXBlLCB1X2NoYXIgY29kZSwKKyAgICAgICAgICAgICAgICBpbnQg bWluc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7Cit2b2lkIGljbXBfcmVmbGVjdChzbGlycF9z dGF0ZV90ICpzLCBzdHJ1Y3QgbWJ1ZiAqbSk7CiAKICNlbmRpZgpJbmRleDogcWVtdS9zbGlycC9p cF9pbnB1dC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGlycC9pcF9pbnB1dC5jCTIwMDct MTAtMjEgMTg6NDc6MDguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL2lwX2lucHV0LmMJ MjAwNy0xMC0yMiAxNzozMjozNS4wMDAwMDAwMDAgKzAwMDAKQEAgLTQ1LDIyICs0NSwzMSBAQAog I2luY2x1ZGUgPHNsaXJwLmg+CiAjaW5jbHVkZSAiaXBfaWNtcC5oIgogCi1pbnQgaXBfZGVmdHRs Owotc3RydWN0IGlwc3RhdCBpcHN0YXQ7Ci1zdHJ1Y3QgaXBxIGlwcTsKKworc3RhdGljIHN0cnVj dCBpcCAqaXBfcmVhc3Moc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0IGlwYXNmcmFn ICppcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCBpcHEgKmZw KTsKK3N0YXRpYyB2b2lkIGlwX2ZyZWVmKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBpcHEgKmZw KTsKK3N0YXRpYyB2b2lkIGlwX2VucShzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBzdHJ1Y3Qg aXBhc2ZyYWcgKnAsCisgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgc3RydWN0IGlwYXNmcmFn ICpwcmV2KTsKK3N0YXRpYyB2b2lkIGlwX2RlcShzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBz dHJ1Y3QgaXBhc2ZyYWcgKnApOwogCiAvKgogICogSVAgaW5pdGlhbGl6YXRpb246IGZpbGwgaW4g SVAgcHJvdG9jb2wgc3dpdGNoIHRhYmxlLgogICogQWxsIHByb3RvY29scyBub3QgaW1wbGVtZW50 ZWQgaW4ga2VybmVsIGdvIHRvIHJhdyBJUCBwcm90b2NvbCBoYW5kbGVyLgogICovCiB2b2lkCi1p cF9pbml0KCkKK2lwX2luaXQoc2xpcnBfc3RhdGVfdCAqcykKIHsKLQlpcHEubmV4dCA9IGlwcS5w cmV2ID0gKGlwcXBfMzIpJmlwcTsKLQlpcF9pZCA9IHR0LnR2X3NlYyAmIDB4ZmZmZjsKLQl1ZHBf aW5pdCgpOwotCXRjcF9pbml0KCk7Ci0JaXBfZGVmdHRsID0gSVBERUZUVEw7CisjaWYgMAorCWlw cV9zZXRfbmV4dChzLCAmcy0+aXBxLCAmcy0+aXBxKTsKKwlpcHFfc2V0X3ByZXYocywgJnMtPmlw cSwgJnMtPmlwcSk7CisjZWxzZQorCXMtPmlwcS5pcHFfcl9uZXh0ID0gJnMtPmlwcTsKKwlzLT5p cHEuaXBxX3JfcHJldiA9ICZzLT5pcHE7CisjZW5kaWYKKwlzLT5pcF9pZCA9IHMtPnR0LnR2X3Nl YyAmIDB4ZmZmZjsKKwl1ZHBfaW5pdChzKTsKKwl0Y3BfaW5pdChzKTsKIH0KIAogLyoKQEAgLTY4 LDggKzc3LDcgQEAKICAqIHRyeSB0byByZWFzc2VtYmxlLiAgUHJvY2VzcyBvcHRpb25zLiAgUGFz cyB0byBuZXh0IGxldmVsLgogICovCiB2b2lkCi1pcF9pbnB1dChtKQotCXN0cnVjdCBtYnVmICpt OworaXBfaW5wdXQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IG1idWYgKm0pCiB7CiAJcmVnaXN0 ZXIgc3RydWN0IGlwICppcDsKIAlpbnQgaGxlbjsKQEAgLTc4LDIzICs4NiwyMyBAQAogCURFQlVH X0FSRygibSA9ICVseCIsIChsb25nKW0pOwogCURFQlVHX0FSRygibV9sZW4gPSAlZCIsIG0tPm1f bGVuKTsKIAotCWlwc3RhdC5pcHNfdG90YWwrKzsKKwlTVEFUKHMtPmlwc3RhdC5pcHNfdG90YWwr Kyk7CiAKIAlpZiAobS0+bV9sZW4gPCBzaXplb2YgKHN0cnVjdCBpcCkpIHsKLQkJaXBzdGF0Lmlw c190b29zbWFsbCsrOworCQlTVEFUKHMtPmlwc3RhdC5pcHNfdG9vc21hbGwrKyk7CiAJCXJldHVy bjsKIAl9CiAKIAlpcCA9IG10b2QobSwgc3RydWN0IGlwICopOwogCiAJaWYgKGlwLT5pcF92ICE9 IElQVkVSU0lPTikgewotCQlpcHN0YXQuaXBzX2JhZHZlcnMrKzsKKwkJU1RBVChzLT5pcHN0YXQu aXBzX2JhZHZlcnMrKyk7CiAJCWdvdG8gYmFkOwogCX0KIAogCWhsZW4gPSBpcC0+aXBfaGwgPDwg MjsKIAlpZiAoaGxlbjxzaXplb2Yoc3RydWN0IGlwICkgfHwgaGxlbj5tLT5tX2xlbikgey8qIG1p biBoZWFkZXIgbGVuZ3RoICovCi0JICBpcHN0YXQuaXBzX2JhZGhsZW4rKzsgICAgICAgICAgICAg ICAgICAgICAvKiBvciBwYWNrZXQgdG9vIHNob3J0ICovCisJICBTVEFUKHMtPmlwc3RhdC5pcHNf YmFkaGxlbisrKTsgICAgICAgICAgICAgICAgICAgICAvKiBvciBwYWNrZXQgdG9vIHNob3J0ICov CiAJICBnb3RvIGJhZDsKIAl9CiAKQEAgLTEwMyw3ICsxMTEsNyBAQAogCSAqIGlmIChpcC0+aXBf c3VtKSB7CiAJICovCiAJaWYoY2tzdW0obSxobGVuKSkgewotCSAgaXBzdGF0Lmlwc19iYWRzdW0r KzsKKwkgIFNUQVQocy0+aXBzdGF0Lmlwc19iYWRzdW0rKyk7CiAJICBnb3RvIGJhZDsKIAl9CiAK QEAgLTExMiw3ICsxMjAsNyBAQAogCSAqLwogCU5UT0hTKGlwLT5pcF9sZW4pOwogCWlmIChpcC0+ aXBfbGVuIDwgaGxlbikgewotCQlpcHN0YXQuaXBzX2JhZGxlbisrOworCQlTVEFUKHMtPmlwc3Rh dC5pcHNfYmFkbGVuKyspOwogCQlnb3RvIGJhZDsKIAl9CiAJTlRPSFMoaXAtPmlwX2lkKTsKQEAg LTEyNSw3ICsxMzMsNyBAQAogCSAqIERyb3AgcGFja2V0IGlmIHNob3J0ZXIgdGhhbiB3ZSBleHBl Y3QuCiAJICovCiAJaWYgKG0tPm1fbGVuIDwgaXAtPmlwX2xlbikgewotCQlpcHN0YXQuaXBzX3Rv b3Nob3J0Kys7CisJCVNUQVQocy0+aXBzdGF0Lmlwc190b29zaG9ydCsrKTsKIAkJZ290byBiYWQ7 CiAJfQogCS8qIFNob3VsZCBkcm9wIHBhY2tldCBpZiBtYnVmIHRvbyBsb25nPyBobW1tLi4uICov CkBAIC0xMzQsNyArMTQyLDcgQEAKIAogCS8qIGNoZWNrIGlwX3R0bCBmb3IgYSBjb3JyZWN0IElD TVAgcmVwbHkgKi8KIAlpZihpcC0+aXBfdHRsPT0wIHx8IGlwLT5pcF90dGw9PTEpIHsKLQkgIGlj bXBfZXJyb3IobSwgSUNNUF9USU1YQ0VFRCxJQ01QX1RJTVhDRUVEX0lOVFJBTlMsIDAsInR0bCIp OworCSAgaWNtcF9lcnJvcihzLCBtLCBJQ01QX1RJTVhDRUVELElDTVBfVElNWENFRURfSU5UUkFO UywgMCwidHRsIik7CiAJICBnb3RvIGJhZDsKIAl9CiAKQEAgLTE2Myw4ICsxNzEsOCBAQAogCQkg KiBMb29rIGZvciBxdWV1ZSBvZiBmcmFnbWVudHMKIAkJICogb2YgdGhpcyBkYXRhZ3JhbS4KIAkJ ICovCi0JCWZvciAoZnAgPSAoc3RydWN0IGlwcSAqKSBpcHEubmV4dDsgZnAgIT0gJmlwcTsKLQkJ ICAgICBmcCA9IChzdHJ1Y3QgaXBxICopIGZwLT5uZXh0KQorCQlmb3IgKGZwID0gaXBxX2dldF9u ZXh0KHMsICZzLT5pcHEpOyBmcCAhPSAmcy0+aXBxOworCQkgICAgIGZwID0gaXBxX2dldF9uZXh0 KHMsIGZwKSkKIAkJICBpZiAoaXAtPmlwX2lkID09IGZwLT5pcHFfaWQgJiYKIAkJICAgICAgaXAt PmlwX3NyYy5zX2FkZHIgPT0gZnAtPmlwcV9zcmMuc19hZGRyICYmCiAJCSAgICAgIGlwLT5pcF9k c3Quc19hZGRyID09IGZwLT5pcHFfZHN0LnNfYWRkciAmJgpAQCAtMTkyLDE1ICsyMDAsMTUgQEAK IAkJICogYXR0ZW1wdCByZWFzc2VtYmx5OyBpZiBpdCBzdWNjZWVkcywgcHJvY2VlZC4KIAkJICov CiAJCWlmICgoKHN0cnVjdCBpcGFzZnJhZyAqKWlwKS0+aXBmX21mZiAmIDEgfHwgaXAtPmlwX29m ZikgewotCQkJaXBzdGF0Lmlwc19mcmFnbWVudHMrKzsKLQkJCWlwID0gaXBfcmVhc3MoKHN0cnVj dCBpcGFzZnJhZyAqKWlwLCBmcCk7CisJCQlTVEFUKHMtPmlwc3RhdC5pcHNfZnJhZ21lbnRzKysp OworCQkJaXAgPSBpcF9yZWFzcyhzLCAoc3RydWN0IGlwYXNmcmFnICopaXAsIGZwKTsKIAkJCWlm IChpcCA9PSAwKQogCQkJCXJldHVybjsKLQkJCWlwc3RhdC5pcHNfcmVhc3NlbWJsZWQrKzsKLQkJ CW0gPSBkdG9tKGlwKTsKKwkJCVNUQVQocy0+aXBzdGF0Lmlwc19yZWFzc2VtYmxlZCsrKTsKKwkJ CW0gPSBkdG9tKHMsIGlwKTsKIAkJfSBlbHNlCiAJCQlpZiAoZnApCi0JCSAgIAkgICBpcF9mcmVl ZihmcCk7CisJCSAgIAkgICBpcF9mcmVlZihzLCBmcCk7CiAKIAl9IGVsc2UKIAkJaXAtPmlwX2xl biAtPSBobGVuOwpAQCAtMjA4LDI0ICsyMTYsMjQgQEAKIAkvKgogCSAqIFN3aXRjaCBvdXQgdG8g cHJvdG9jb2wncyBpbnB1dCByb3V0aW5lLgogCSAqLwotCWlwc3RhdC5pcHNfZGVsaXZlcmVkKys7 CisJU1RBVChzLT5pcHN0YXQuaXBzX2RlbGl2ZXJlZCsrKTsKIAlzd2l0Y2ggKGlwLT5pcF9wKSB7 CiAJIGNhc2UgSVBQUk9UT19UQ1A6Ci0JCXRjcF9pbnB1dChtLCBobGVuLCAoc3RydWN0IHNvY2tl dCAqKU5VTEwpOworCQl0Y3BfaW5wdXQocywgbSwgaGxlbiwgKHN0cnVjdCBzb2NrZXQgKilOVUxM KTsKIAkJYnJlYWs7CiAJIGNhc2UgSVBQUk9UT19VRFA6Ci0JCXVkcF9pbnB1dChtLCBobGVuKTsK KwkJdWRwX2lucHV0KHMsIG0sIGhsZW4pOwogCQlicmVhazsKIAkgY2FzZSBJUFBST1RPX0lDTVA6 Ci0JCWljbXBfaW5wdXQobSwgaGxlbik7CisJCWljbXBfaW5wdXQocywgbSwgaGxlbik7CiAJCWJy ZWFrOwogCSBkZWZhdWx0OgotCQlpcHN0YXQuaXBzX25vcHJvdG8rKzsKLQkJbV9mcmVlKG0pOwor CQlTVEFUKHMtPmlwc3RhdC5pcHNfbm9wcm90bysrKTsKKwkJbV9mcmVlKHMsIG0pOwogCX0KIAly ZXR1cm47CiBiYWQ6Ci0JbV9mcmVlbShtKTsKKwltX2ZyZWVtKHMsIG0pOwogCXJldHVybjsKIH0K IApAQCAtMjM1LDEyICsyNDMsMTEgQEAKICAqIHJlYXNzZW1ibHkgb2YgdGhpcyBkYXRhZ3JhbSBh bHJlYWR5IGV4aXN0cywgdGhlbiBpdAogICogaXMgZ2l2ZW4gYXMgZnA7IG90aGVyd2lzZSBoYXZl IHRvIG1ha2UgYSBjaGFpbi4KICAqLwotc3RydWN0IGlwICoKLWlwX3JlYXNzKGlwLCBmcCkKLQly ZWdpc3RlciBzdHJ1Y3QgaXBhc2ZyYWcgKmlwOwotCXJlZ2lzdGVyIHN0cnVjdCBpcHEgKmZwOwor c3RhdGljIHN0cnVjdCBpcCAqCitpcF9yZWFzcyhzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBz dHJ1Y3QgaXBhc2ZyYWcgKmlwLAorICAgICAgICAgcmVnaXN0ZXIgc3RydWN0IGlwcSAqZnApCiB7 Ci0JcmVnaXN0ZXIgc3RydWN0IG1idWYgKm0gPSBkdG9tKGlwKTsKKwlyZWdpc3RlciBzdHJ1Y3Qg bWJ1ZiAqbSA9IGR0b20ocywgaXApOwogCXJlZ2lzdGVyIHN0cnVjdCBpcGFzZnJhZyAqcTsKIAlp bnQgaGxlbiA9IGlwLT5pcF9obCA8PCAyOwogCWludCBpLCBuZXh0OwpAQCAtMjYzLDEzICsyNzAs MTUgQEAKIAkgKi8KIAlpZiAoZnAgPT0gMCkgewogCSAgc3RydWN0IG1idWYgKnQ7Ci0JICBpZiAo KHQgPSBtX2dldCgpKSA9PSBOVUxMKSBnb3RvIGRyb3BmcmFnOworCSAgaWYgKCh0ID0gbV9nZXQo cykpID09IE5VTEwpCisgICAgICAgICAgICAgIGdvdG8gZHJvcGZyYWc7CiAJICBmcCA9IG10b2Qo dCwgc3RydWN0IGlwcSAqKTsKLQkgIGluc3F1ZV8zMihmcCwgJmlwcSk7CisJICBpbnNxdWVfMzIo cywgZnAsICZzLT5pcHEpOwogCSAgZnAtPmlwcV90dGwgPSBJUEZSQUdUVEw7CiAJICBmcC0+aXBx X3AgPSBpcC0+aXBfcDsKIAkgIGZwLT5pcHFfaWQgPSBpcC0+aXBfaWQ7Ci0JICBmcC0+aXBxX25l eHQgPSBmcC0+aXBxX3ByZXYgPSAoaXBhc2ZyYWdwXzMyKWZwOworCSAgaXBxX3NldF9uZXh0X2Zy YWcocywgZnAsIChzdHJ1Y3QgaXBhc2ZyYWcgKilmcCk7CisJICBpcHFfc2V0X3ByZXZfZnJhZyhz LCBmcCwgKHN0cnVjdCBpcGFzZnJhZyAqKWZwKTsKIAkgIGZwLT5pcHFfc3JjID0gKChzdHJ1Y3Qg aXAgKilpcCktPmlwX3NyYzsKIAkgIGZwLT5pcHFfZHN0ID0gKChzdHJ1Y3QgaXAgKilpcCktPmlw X2RzdDsKIAkgIHEgPSAoc3RydWN0IGlwYXNmcmFnICopZnA7CkBAIC0yNzksOCArMjg4LDggQEAK IAkvKgogCSAqIEZpbmQgYSBzZWdtZW50IHdoaWNoIGJlZ2lucyBhZnRlciB0aGlzIG9uZSBkb2Vz LgogCSAqLwotCWZvciAocSA9IChzdHJ1Y3QgaXBhc2ZyYWcgKilmcC0+aXBxX25leHQ7IHEgIT0g KHN0cnVjdCBpcGFzZnJhZyAqKWZwOwotCSAgICBxID0gKHN0cnVjdCBpcGFzZnJhZyAqKXEtPmlw Zl9uZXh0KQorCWZvciAocSA9IGlwcV9nZXRfbmV4dF9mcmFnKHMsIGZwKTsgcSAhPSAoc3RydWN0 IGlwYXNmcmFnICopZnA7CisgICAgICAgICAgICAgcSA9IGlwcV9nZXRfbmV4dF9mcmFnKHMsIChz dHJ1Y3QgaXBxICopcSkpCiAJCWlmIChxLT5pcF9vZmYgPiBpcC0+aXBfb2ZmKQogCQkJYnJlYWs7 CiAKQEAgLTI4OSwxMyArMjk4LDEzIEBACiAJICogb3VyIGRhdGEgYWxyZWFkeS4gIElmIHNvLCBk cm9wIHRoZSBkYXRhIGZyb20gdGhlIGluY29taW5nCiAJICogc2VnbWVudC4gIElmIGl0IHByb3Zp ZGVzIGFsbCBvZiBvdXIgZGF0YSwgZHJvcCB1cy4KIAkgKi8KLQlpZiAocS0+aXBmX3ByZXYgIT0g KGlwYXNmcmFncF8zMilmcCkgewotCQlpID0gKChzdHJ1Y3QgaXBhc2ZyYWcgKikocS0+aXBmX3By ZXYpKS0+aXBfb2ZmICsKLQkJICAoKHN0cnVjdCBpcGFzZnJhZyAqKShxLT5pcGZfcHJldikpLT5p cF9sZW4gLSBpcC0+aXBfb2ZmOworCWlmIChpcGFzZnJhZ19nZXRfcHJldl9mcmFnKHEpICE9IChz dHJ1Y3QgaXBhc2ZyYWcgKilmcCkgeworCQlpID0gaXBhc2ZyYWdfZ2V0X3ByZXZfZnJhZyhxKS0+ aXBfb2ZmICsKKyAgICAgICAgICAgICAgICAgICAgaXBhc2ZyYWdfZ2V0X3ByZXZfZnJhZyhxKS0+ aXBfbGVuIC0gaXAtPmlwX29mZjsKIAkJaWYgKGkgPiAwKSB7CiAJCQlpZiAoaSA+PSBpcC0+aXBf bGVuKQogCQkJCWdvdG8gZHJvcGZyYWc7Ci0JCQltX2FkaihkdG9tKGlwKSwgaSk7CisJCQltX2Fk aihkdG9tKHMsIGlwKSwgaSk7CiAJCQlpcC0+aXBfb2ZmICs9IGk7CiAJCQlpcC0+aXBfbGVuIC09 IGk7CiAJCX0KQEAgLTMxMCwxMiArMzE5LDEyIEBACiAJCWlmIChpIDwgcS0+aXBfbGVuKSB7CiAJ CQlxLT5pcF9sZW4gLT0gaTsKIAkJCXEtPmlwX29mZiArPSBpOwotCQkJbV9hZGooZHRvbShxKSwg aSk7CisJCQltX2FkaihkdG9tKHMsIHEpLCBpKTsKIAkJCWJyZWFrOwogCQl9Ci0JCXEgPSAoc3Ry dWN0IGlwYXNmcmFnICopIHEtPmlwZl9uZXh0OwotCQltX2ZyZWVtKGR0b20oKHN0cnVjdCBpcGFz ZnJhZyAqKSBxLT5pcGZfcHJldikpOwotCQlpcF9kZXEoKHN0cnVjdCBpcGFzZnJhZyAqKSBxLT5p cGZfcHJldik7CisJCXEgPSBpcGFzZnJhZ19nZXRfbmV4dF9mcmFnKHEpOworCQltX2ZyZWVtKHMs IGR0b20ocywgaXBhc2ZyYWdfZ2V0X3ByZXZfZnJhZyhxKSkpOworCQlpcF9kZXEocywgaXBhc2Zy YWdfZ2V0X3ByZXZfZnJhZyhxKSk7CiAJfQogCiBpbnNlcnQ6CkBAIC0zMjMsMjkgKzMzMiwyOSBA QAogCSAqIFN0aWNrIG5ldyBzZWdtZW50IGluIGl0cyBwbGFjZTsKIAkgKiBjaGVjayBmb3IgY29t cGxldGUgcmVhc3NlbWJseS4KIAkgKi8KLQlpcF9lbnEoaXAsIChzdHJ1Y3QgaXBhc2ZyYWcgKikg cS0+aXBmX3ByZXYpOworCWlwX2VucShzLCBpcCwgaXBhc2ZyYWdfZ2V0X3ByZXZfZnJhZyhxKSk7 CiAJbmV4dCA9IDA7Ci0JZm9yIChxID0gKHN0cnVjdCBpcGFzZnJhZyAqKSBmcC0+aXBxX25leHQ7 IHEgIT0gKHN0cnVjdCBpcGFzZnJhZyAqKWZwOwotCSAgICAgcSA9IChzdHJ1Y3QgaXBhc2ZyYWcg KikgcS0+aXBmX25leHQpIHsKKwlmb3IgKHEgPSBpcHFfZ2V0X25leHRfZnJhZyhzLCBmcCk7IHEg IT0gKHN0cnVjdCBpcGFzZnJhZyAqKWZwOworCSAgICAgcSA9IGlwcV9nZXRfbmV4dF9mcmFnKHMs IChzdHJ1Y3QgaXBxICopcSkpIHsKIAkJaWYgKHEtPmlwX29mZiAhPSBuZXh0KQogCQkJcmV0dXJu ICgwKTsKIAkJbmV4dCArPSBxLT5pcF9sZW47CiAJfQotCWlmICgoKHN0cnVjdCBpcGFzZnJhZyAq KShxLT5pcGZfcHJldikpLT5pcGZfbWZmICYgMSkKKwlpZiAoaXBhc2ZyYWdfZ2V0X3ByZXZfZnJh ZyhxKS0+aXBmX21mZiAmIDEpCiAJCXJldHVybiAoMCk7CiAKIAkvKgogCSAqIFJlYXNzZW1ibHkg aXMgY29tcGxldGU7IGNvbmNhdGVuYXRlIGZyYWdtZW50cy4KIAkgKi8KLQlxID0gKHN0cnVjdCBp cGFzZnJhZyAqKSBmcC0+aXBxX25leHQ7Ci0JbSA9IGR0b20ocSk7CisJcSA9IGlwcV9nZXRfbmV4 dF9mcmFnKHMsIGZwKTsKKwltID0gZHRvbShzLCBxKTsKIAotCXEgPSAoc3RydWN0IGlwYXNmcmFn ICopIHEtPmlwZl9uZXh0OworCXEgPSBpcHFfZ2V0X25leHRfZnJhZyhzLCAoc3RydWN0IGlwcSAq KXEpOwogCXdoaWxlIChxICE9IChzdHJ1Y3QgaXBhc2ZyYWcgKilmcCkgewogCSAgc3RydWN0IG1i dWYgKnQ7Ci0JICB0ID0gZHRvbShxKTsKLQkgIHEgPSAoc3RydWN0IGlwYXNmcmFnICopIHEtPmlw Zl9uZXh0OwotCSAgbV9jYXQobSwgdCk7CisJICB0ID0gZHRvbShzLCBxKTsKKyAgICAgICAgICBx ID0gaXBxX2dldF9uZXh0X2ZyYWcocywgKHN0cnVjdCBpcHEgKilxKTsKKwkgIG1fY2F0KHMsIG0s IHQpOwogCX0KIAogCS8qCkBAIC0zNTQsNyArMzYzLDcgQEAKIAkgKiBkZXF1ZXVlIGFuZCBkaXNj YXJkIGZyYWdtZW50IHJlYXNzZW1ibHkgaGVhZGVyLgogCSAqIE1ha2UgaGVhZGVyIHZpc2libGUu CiAJICovCi0JaXAgPSAoc3RydWN0IGlwYXNmcmFnICopIGZwLT5pcHFfbmV4dDsKKwlpcCA9IGlw cV9nZXRfbmV4dF9mcmFnKHMsIGZwKTsKIAogCS8qCiAJICogSWYgdGhlIGZyYWdtZW50cyBjb25j YXRlbmF0ZWQgdG8gYW4gbWJ1ZiB0aGF0J3MKQEAgLTM3NiwxNyArMzg1LDE3IEBACiAJaXAtPmlw Zl9tZmYgJj0gfjE7CiAJKChzdHJ1Y3QgaXAgKilpcCktPmlwX3NyYyA9IGZwLT5pcHFfc3JjOwog CSgoc3RydWN0IGlwICopaXApLT5pcF9kc3QgPSBmcC0+aXBxX2RzdDsKLQlyZW1xdWVfMzIoZnAp OwotCSh2b2lkKSBtX2ZyZWUoZHRvbShmcCkpOwotCW0gPSBkdG9tKGlwKTsKKwlyZW1xdWVfMzIo cywgZnApOworCSh2b2lkKSBtX2ZyZWUocywgZHRvbShzLCBmcCkpOworCW0gPSBkdG9tKHMsIGlw KTsKIAltLT5tX2xlbiArPSAoaXAtPmlwX2hsIDw8IDIpOwogCW0tPm1fZGF0YSAtPSAoaXAtPmlw X2hsIDw8IDIpOwogCiAJcmV0dXJuICgoc3RydWN0IGlwICopaXApOwogCiBkcm9wZnJhZzoKLQlp cHN0YXQuaXBzX2ZyYWdkcm9wcGVkKys7Ci0JbV9mcmVlbShtKTsKKwlTVEFUKHMtPmlwc3RhdC5p cHNfZnJhZ2Ryb3BwZWQrKyk7CisJbV9mcmVlbShzLCBtKTsKIAlyZXR1cm4gKDApOwogfQogCkBA IC0zOTQsNDcgKzQwMyw0NSBAQAogICogRnJlZSBhIGZyYWdtZW50IHJlYXNzZW1ibHkgaGVhZGVy IGFuZCBhbGwKICAqIGFzc29jaWF0ZWQgZGF0YWdyYW1zLgogICovCi12b2lkCi1pcF9mcmVlZihm cCkKLQlzdHJ1Y3QgaXBxICpmcDsKK3N0YXRpYyB2b2lkCitpcF9mcmVlZihzbGlycF9zdGF0ZV90 ICpzLCBzdHJ1Y3QgaXBxICpmcCkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaXBhc2ZyYWcgKnEsICpw OwogCi0JZm9yIChxID0gKHN0cnVjdCBpcGFzZnJhZyAqKSBmcC0+aXBxX25leHQ7IHEgIT0gKHN0 cnVjdCBpcGFzZnJhZyAqKWZwOworCWZvciAocSA9IGlwcV9nZXRfbmV4dF9mcmFnKHMsIGZwKTsg cSAhPSAoc3RydWN0IGlwYXNmcmFnICopZnA7CiAJICAgIHEgPSBwKSB7Ci0JCXAgPSAoc3RydWN0 IGlwYXNmcmFnICopIHEtPmlwZl9uZXh0OwotCQlpcF9kZXEocSk7Ci0JCW1fZnJlZW0oZHRvbShx KSk7CisJCXAgPSBpcGFzZnJhZ19nZXRfbmV4dF9mcmFnKHEpOworCQlpcF9kZXEocywgcSk7CisJ CW1fZnJlZW0ocywgZHRvbShzLCBxKSk7CiAJfQotCXJlbXF1ZV8zMihmcCk7Ci0JKHZvaWQpIG1f ZnJlZShkdG9tKGZwKSk7CisJcmVtcXVlXzMyKHMsIGZwKTsKKwkodm9pZCkgbV9mcmVlKHMsIGR0 b20ocywgZnApKTsKIH0KIAogLyoKICAqIFB1dCBhbiBpcCBmcmFnbWVudCBvbiBhIHJlYXNzZW1i bHkgY2hhaW4uCiAgKiBMaWtlIGluc3F1ZSwgYnV0IHBvaW50ZXJzIGluIG1pZGRsZSBvZiBzdHJ1 Y3R1cmUuCiAgKi8KLXZvaWQKLWlwX2VucShwLCBwcmV2KQotCXJlZ2lzdGVyIHN0cnVjdCBpcGFz ZnJhZyAqcCwgKnByZXY7CitzdGF0aWMgdm9pZAoraXBfZW5xKHNsaXJwX3N0YXRlX3QgKnMsIHJl Z2lzdGVyIHN0cnVjdCBpcGFzZnJhZyAqcCwKKyAgICAgICByZWdpc3RlciBzdHJ1Y3QgaXBhc2Zy YWcgKnByZXYpCiB7CiAJREVCVUdfQ0FMTCgiaXBfZW5xIik7CiAJREVCVUdfQVJHKCJwcmV2ID0g JWx4IiwgKGxvbmcpcHJldik7Ci0JcC0+aXBmX3ByZXYgPSAoaXBhc2ZyYWdwXzMyKSBwcmV2Owot CXAtPmlwZl9uZXh0ID0gcHJldi0+aXBmX25leHQ7Ci0JKChzdHJ1Y3QgaXBhc2ZyYWcgKikocHJl di0+aXBmX25leHQpKS0+aXBmX3ByZXYgPSAoaXBhc2ZyYWdwXzMyKSBwOwotCXByZXYtPmlwZl9u ZXh0ID0gKGlwYXNmcmFncF8zMikgcDsKKwlpcGFzZnJhZ19zZXRfcHJldl9mcmFnKHAsIHByZXYp OworCWlwYXNmcmFnX3NldF9uZXh0X2ZyYWcocCwgaXBhc2ZyYWdfZ2V0X25leHRfZnJhZyhwcmV2 KSk7CisJaXBhc2ZyYWdfc2V0X3ByZXZfZnJhZyhpcGFzZnJhZ19nZXRfbmV4dF9mcmFnKHByZXYp LCBwKTsKKwlpcGFzZnJhZ19zZXRfbmV4dF9mcmFnKHByZXYsIHApOwogfQogCiAvKgogICogVG8g aXBfZW5xIGFzIHJlbXF1ZSBpcyB0byBpbnNxdWUuCiAgKi8KLXZvaWQKLWlwX2RlcShwKQotCXJl Z2lzdGVyIHN0cnVjdCBpcGFzZnJhZyAqcDsKK3N0YXRpYyB2b2lkCitpcF9kZXEoc2xpcnBfc3Rh dGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0IGlwYXNmcmFnICpwKQogewotCSgoc3RydWN0IGlwYXNm cmFnICopKHAtPmlwZl9wcmV2KSktPmlwZl9uZXh0ID0gcC0+aXBmX25leHQ7Ci0JKChzdHJ1Y3Qg aXBhc2ZyYWcgKikocC0+aXBmX25leHQpKS0+aXBmX3ByZXYgPSBwLT5pcGZfcHJldjsKKwlpcGFz ZnJhZ19zZXRfbmV4dF9mcmFnKGlwYXNmcmFnX2dldF9wcmV2X2ZyYWcocCksIGlwYXNmcmFnX2dl dF9uZXh0X2ZyYWcocCkpOworCWlwYXNmcmFnX3NldF9wcmV2X2ZyYWcoaXBhc2ZyYWdfZ2V0X25l eHRfZnJhZyhwKSwgaXBhc2ZyYWdfZ2V0X3ByZXZfZnJhZyhwKSk7CiB9CiAKIC8qCkBAIC00NDMs MjIgKzQ1MCwyMiBAQAogICogcXVldWUsIGRpc2NhcmQgaXQuCiAgKi8KIHZvaWQKLWlwX3Nsb3d0 aW1vKCkKK2lwX3Nsb3d0aW1vKHNsaXJwX3N0YXRlX3QgKnMpCiB7CiAJcmVnaXN0ZXIgc3RydWN0 IGlwcSAqZnA7CiAKIAlERUJVR19DQUxMKCJpcF9zbG93dGltbyIpOwogCi0JZnAgPSAoc3RydWN0 IGlwcSAqKSBpcHEubmV4dDsKKwlmcCA9IGlwcV9nZXRfbmV4dChzLCAmcy0+aXBxKTsKIAlpZiAo ZnAgPT0gMCkKIAkgICByZXR1cm47CiAKLQl3aGlsZSAoZnAgIT0gJmlwcSkgeworCXdoaWxlIChm cCAhPSAmcy0+aXBxKSB7CiAJCS0tZnAtPmlwcV90dGw7Ci0JCWZwID0gKHN0cnVjdCBpcHEgKikg ZnAtPm5leHQ7Ci0JCWlmICgoKHN0cnVjdCBpcHEgKikoZnAtPnByZXYpKS0+aXBxX3R0bCA9PSAw KSB7Ci0JCQlpcHN0YXQuaXBzX2ZyYWd0aW1lb3V0Kys7Ci0JCQlpcF9mcmVlZigoc3RydWN0IGlw cSAqKSBmcC0+cHJldik7CisJCWZwID0gaXBxX2dldF9uZXh0KHMsIGZwKTsKKwkJaWYgKGlwcV9n ZXRfcHJldihzLCBmcCktPmlwcV90dGwgPT0gMCkgeworCQkJU1RBVChzLT5pcHN0YXQuaXBzX2Zy YWd0aW1lb3V0KyspOworCQkJaXBfZnJlZWYocywgaXBxX2dldF9wcmV2KHMsIGZwKSk7CiAJCX0K IAl9CiB9CkBAIC02NjQsNyArNjcxLDcgQEAKIC8qIE5vdCB5ZXQgKi8KICAJaWNtcF9lcnJvciht LCB0eXBlLCBjb2RlLCAwLCAwKTsKIAotCWlwc3RhdC5pcHNfYmFkb3B0aW9ucysrOworCVNUQVQo cy0+aXBzdGF0Lmlwc19iYWRvcHRpb25zKyspOwogCXJldHVybiAoMSk7CiB9CiAKSW5kZXg6IHFl bXUvc2xpcnAvaXBfb3V0cHV0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL2lwX291 dHB1dC5jCTIwMDctMTAtMjEgMTg6NDc6MDguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJw L2lwX291dHB1dC5jCTIwMDctMTAtMjIgMTk6MzU6MTIuMDAwMDAwMDAwICswMDAwCkBAIC00NCw3 ICs0NCw2IEBACiAKICNpbmNsdWRlIDxzbGlycC5oPgogCi11X2ludDE2X3QgaXBfaWQ7CiAKIC8q CiAgKiBJUCBvdXRwdXQuICBUaGUgcGFja2V0IGluIG1idWYgY2hhaW4gbSBjb250YWlucyBhIHNr ZWxldGFsIElQCkBAIC01Myw5ICs1Miw3IEBACiAgKiBUaGUgbWJ1ZiBvcHQsIGlmIHByZXNlbnQs IHdpbGwgbm90IGJlIGZyZWVkLgogICovCiBpbnQKLWlwX291dHB1dChzbywgbTApCi0Jc3RydWN0 IHNvY2tldCAqc287Ci0Jc3RydWN0IG1idWYgKm0wOworaXBfb3V0cHV0KHNsaXJwX3N0YXRlX3Qg KnMsIHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbTApCiB7CiAJcmVnaXN0ZXIgc3Ry dWN0IGlwICppcDsKIAlyZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqbSA9IG0wOwpAQCAtNzgsMTYgKzc1 LDE2IEBACiAJICovCiAJaXAtPmlwX3YgPSBJUFZFUlNJT047CiAJaXAtPmlwX29mZiAmPSBJUF9E RjsKLQlpcC0+aXBfaWQgPSBodG9ucyhpcF9pZCsrKTsKKwlpcC0+aXBfaWQgPSBodG9ucyhzLT5p cF9pZCsrKTsKIAlpcC0+aXBfaGwgPSBobGVuID4+IDI7Ci0JaXBzdGF0Lmlwc19sb2NhbG91dCsr OworCVNUQVQocy0+aXBzdGF0Lmlwc19sb2NhbG91dCsrKTsKIAogCS8qCiAJICogVmVyaWZ5IHRo YXQgd2UgaGF2ZSBhbnkgY2hhbmNlIGF0IGFsbCBvZiBiZWluZyBhYmxlIHRvIHF1ZXVlCiAJICog ICAgICB0aGUgcGFja2V0IG9yIHBhY2tldCBmcmFnbWVudHMKIAkgKi8KIAkvKiBYWFggSG1tbS4u LiAqLwotLyoJaWYgKGlmX3F1ZXVlZCA+IGlmX3RocmVzaCAmJiB0b3dyaXRlIDw9IDApIHsKKy8q CWlmIChzLT5pZl9xdWV1ZWQgPiBzLT5pZl90aHJlc2ggJiYgdG93cml0ZSA8PSAwKSB7CiAgKgkJ ZXJyb3IgPSBFTk9CVUZTOwogICoJCWdvdG8gYmFkOwogICoJfQpAQCAtOTYsMTMgKzkzLDEzIEBA CiAJLyoKIAkgKiBJZiBzbWFsbCBlbm91Z2ggZm9yIGludGVyZmFjZSwgY2FuIGp1c3Qgc2VuZCBk aXJlY3RseS4KIAkgKi8KLQlpZiAoKHVfaW50MTZfdClpcC0+aXBfbGVuIDw9IGlmX210dSkgewor CWlmICgodV9pbnQxNl90KWlwLT5pcF9sZW4gPD0gSUZfTVRVKSB7CiAJCWlwLT5pcF9sZW4gPSBo dG9ucygodV9pbnQxNl90KWlwLT5pcF9sZW4pOwogCQlpcC0+aXBfb2ZmID0gaHRvbnMoKHVfaW50 MTZfdClpcC0+aXBfb2ZmKTsKIAkJaXAtPmlwX3N1bSA9IDA7CiAJCWlwLT5pcF9zdW0gPSBja3N1 bShtLCBobGVuKTsKIAotCQlpZl9vdXRwdXQoc28sIG0pOworCQlpZl9vdXRwdXQocywgc28sIG0p OwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0xMTIsMTEgKzEwOSwxMSBAQAogCSAqLwogCWlmIChp cC0+aXBfb2ZmICYgSVBfREYpIHsKIAkJZXJyb3IgPSAtMTsKLQkJaXBzdGF0Lmlwc19jYW50ZnJh ZysrOworCQlTVEFUKHMtPmlwc3RhdC5pcHNfY2FudGZyYWcrKyk7CiAJCWdvdG8gYmFkOwogCX0K IAotCWxlbiA9IChpZl9tdHUgLSBobGVuKSAmfiA3OyAgICAgICAvKiBpcCBkYXRhYnl0ZXMgcGVy IHBhY2tldCAqLworCWxlbiA9IChJRl9NVFUgLSBobGVuKSAmfiA3OyAgICAgICAvKiBpcCBkYXRh Ynl0ZXMgcGVyIHBhY2tldCAqLwogCWlmIChsZW4gPCA4KSB7CiAJCWVycm9yID0gLTE7CiAJCWdv dG8gYmFkOwpAQCAtMTI0LDcgKzEyMSw3IEBACiAKICAgICB7CiAJaW50IG1obGVuLCBmaXJzdGxl biA9IGxlbjsKLQlzdHJ1Y3QgbWJ1ZiAqKm1uZXh0ID0gJm0tPm1fbmV4dHBrdDsKKwlzdHJ1Y3Qg bWJ1ZiAqKm1uZXh0ID0gbV9nZXRfbmV4dHBrdGFkZHIobSk7CiAKIAkvKgogCSAqIExvb3AgdGhy b3VnaCBsZW5ndGggb2Ygc2VnbWVudCBhZnRlciBmaXJzdCBmcmFnbWVudCwKQEAgLTEzNCwxMyAr MTMxLDEzIEBACiAJbWhsZW4gPSBzaXplb2YgKHN0cnVjdCBpcCk7CiAJZm9yIChvZmYgPSBobGVu ICsgbGVuOyBvZmYgPCAodV9pbnQxNl90KWlwLT5pcF9sZW47IG9mZiArPSBsZW4pIHsKIAkgIHJl Z2lzdGVyIHN0cnVjdCBpcCAqbWhpcDsKLQkgIG0gPSBtX2dldCgpOworCSAgbSA9IG1fZ2V0KHMp OwogCSAgaWYgKG0gPT0gMCkgewogCSAgICBlcnJvciA9IC0xOwotCSAgICBpcHN0YXQuaXBzX29k cm9wcGVkKys7CisJICAgIFNUQVQocy0+aXBzdGF0Lmlwc19vZHJvcHBlZCsrKTsKIAkgICAgZ290 byBzZW5kb3JmcmVlOwogCSAgfQotCSAgbS0+bV9kYXRhICs9IGlmX21heGxpbmtoZHI7CisJICBt LT5tX2RhdGEgKz0gSUZfTUFYTElOS0hEUjsKIAkgIG1oaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAq KTsKIAkgICptaGlwID0gKmlwOwogCkBAIC0xNjksOCArMTY2LDggQEAKIAkgIG1oaXAtPmlwX3N1 bSA9IDA7CiAJICBtaGlwLT5pcF9zdW0gPSBja3N1bShtLCBtaGxlbik7CiAJICAqbW5leHQgPSBt OwotCSAgbW5leHQgPSAmbS0+bV9uZXh0cGt0OwotCSAgaXBzdGF0Lmlwc19vZnJhZ21lbnRzKys7 CisJICBtbmV4dCA9IG1fZ2V0X25leHRwa3RhZGRyKG0pOworCSAgU1RBVChzLT5pcHN0YXQuaXBz X29mcmFnbWVudHMrKyk7CiAJfQogCS8qCiAJICogVXBkYXRlIGZpcnN0IGZyYWdtZW50IGJ5IHRy aW1taW5nIHdoYXQncyBiZWVuIGNvcGllZCBvdXQKQEAgLTE4NCwyMiArMTgxLDIyIEBACiAJaXAt PmlwX3N1bSA9IGNrc3VtKG0sIGhsZW4pOwogc2VuZG9yZnJlZToKIAlmb3IgKG0gPSBtMDsgbTsg bSA9IG0wKSB7Ci0JCW0wID0gbS0+bV9uZXh0cGt0OwotCQltLT5tX25leHRwa3QgPSAwOworCQlt MCA9IG1fZ2V0X25leHRwa3QobSk7CisJCW1fc2V0X25leHRwa3QobSwgMCk7CiAJCWlmIChlcnJv ciA9PSAwKQotCQkJaWZfb3V0cHV0KHNvLCBtKTsKKwkJCWlmX291dHB1dChzLCBzbywgbSk7CiAJ CWVsc2UKLQkJCW1fZnJlZW0obSk7CisJCQltX2ZyZWVtKHMsIG0pOwogCX0KIAogCWlmIChlcnJv ciA9PSAwKQotCQlpcHN0YXQuaXBzX2ZyYWdtZW50ZWQrKzsKKwkJU1RBVChzLT5pcHN0YXQuaXBz X2ZyYWdtZW50ZWQrKyk7CiAgICAgfQogCiBkb25lOgogCXJldHVybiAoZXJyb3IpOwogCiBiYWQ6 Ci0JbV9mcmVlbShtMCk7CisJbV9mcmVlbShzLCBtMCk7CiAJZ290byBkb25lOwogfQpJbmRleDog cWVtdS9zbGlycC9saWJzbGlycC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGlycC9saWJz bGlycC5oCTIwMDctMTAtMjEgMTg6NDc6MDguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJw L2xpYnNsaXJwLmgJMjAwNy0xMC0yMSAxODo0NzoxMS4wMDAwMDAwMDAgKzAwMDAKQEAgLTUsMjYg KzUsMzIgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLXZvaWQgc2xpcnBfaW5pdCh2b2lkKTsK K3R5cGVkZWYgc3RydWN0IHNsaXJwX3N0YXRlX3Qgc2xpcnBfc3RhdGVfdDsKIAotdm9pZCBzbGly cF9zZWxlY3RfZmlsbChpbnQgKnBuZmRzLAorc2xpcnBfc3RhdGVfdCAqc2xpcnBfaW5pdCh2b2lk ICp1c2VyLCBjb25zdCBjaGFyICpzbGlycF9ob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqdGZ0cF9wcmVmaXgsIGNvbnN0IGNoYXIgKm5ldHdvcmspOwordm9p ZCBzbGlycF90ZXJtKHNsaXJwX3N0YXRlX3QgKnMpOwordm9pZCBzbGlycF9saW5rX3VwKHNsaXJw X3N0YXRlX3QgKnMpOwordm9pZCBzbGlycF9saW5rX2Rvd24oc2xpcnBfc3RhdGVfdCAqcyk7CisK K3ZvaWQgc2xpcnBfc2VsZWN0X2ZpbGwoc2xpcnBfc3RhdGVfdCAqcywgaW50ICpwbmZkcywKICAg ICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLCBm ZF9zZXQgKnhmZHMpOwogCi12b2lkIHNsaXJwX3NlbGVjdF9wb2xsKGZkX3NldCAqcmVhZGZkcywg ZmRfc2V0ICp3cml0ZWZkcywgZmRfc2V0ICp4ZmRzKTsKK3ZvaWQgc2xpcnBfc2VsZWN0X3BvbGwo c2xpcnBfc3RhdGVfdCAqcywgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLAorICAg ICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKnhmZHMpOwogCi12b2lkIHNsaXJwX2lucHV0KGNv bnN0IHVpbnQ4X3QgKnBrdCwgaW50IHBrdF9sZW4pOwordm9pZCBzbGlycF9pbnB1dChzbGlycF9z dGF0ZV90ICpzLCBjb25zdCB1aW50OF90ICpwa3QsIGludCBwa3RfbGVuKTsKIAogLyogeW91IG11 c3QgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogKi8KLWludCBzbGlycF9jYW5fb3V0 cHV0KHZvaWQpOwotdm9pZCBzbGlycF9vdXRwdXQoY29uc3QgdWludDhfdCAqcGt0LCBpbnQgcGt0 X2xlbik7CitpbnQgc2xpcnBfY2FuX291dHB1dCh2b2lkICp1c2VyKTsKK3ZvaWQgc2xpcnBfb3V0 cHV0KHZvaWQgKnVzZXIsIGNvbnN0IHVpbnQ4X3QgKnBrdCwgaW50IHBrdF9sZW4pOwogCi1pbnQg c2xpcnBfcmVkaXIoaW50IGlzX3VkcCwgaW50IGhvc3RfcG9ydCwKK2ludCBzbGlycF9yZWRpcihz bGlycF9zdGF0ZV90ICpzLCBpbnQgaXNfdWRwLCBpbnQgaG9zdF9wb3J0LAogICAgICAgICAgICAg ICAgIHN0cnVjdCBpbl9hZGRyIGd1ZXN0X2FkZHIsIGludCBndWVzdF9wb3J0KTsKLWludCBzbGly cF9hZGRfZXhlYyhpbnQgZG9fcHR5LCBjb25zdCBjaGFyICphcmdzLCBpbnQgYWRkcl9sb3dfYnl0 ZSwKLSAgICAgICAgICAgICAgICAgICBpbnQgZ3Vlc3RfcG9ydCk7CitpbnQgc2xpcnBfYWRkX2V4 ZWMoc2xpcnBfc3RhdGVfdCAqcywgaW50IGRvX3B0eSwgY29uc3QgY2hhciAqYXJncywKKyAgICAg ICAgICAgICAgICAgICBpbnQgYWRkcl9sb3dfYnl0ZSwgaW50IGd1ZXN0X3BvcnQpOwogCi1leHRl cm4gY29uc3QgY2hhciAqdGZ0cF9wcmVmaXg7Ci1leHRlcm4gY2hhciBzbGlycF9ob3N0bmFtZVsz M107Cit2b2lkIHNsaXJwX3N0YXRzKHNsaXJwX3N0YXRlX3QgKnMpOwogCiAjaWZkZWYgX19jcGx1 c3BsdXMKIH0KSW5kZXg6IHFlbXUvc2xpcnAvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3Jp Zy9zbGlycC9tYWluLmgJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFl bXUvc2xpcnAvbWFpbi5oCTIwMDctMTAtMjEgMTg6NDc6MTEuMDAwMDAwMDAwICswMDAwCkBAIC0x MSwxNCArMTEsNiBAQAogCiAjZGVmaW5lIFRPV1JJVEVNQVggNTEyCiAKLWV4dGVybiBzdHJ1Y3Qg dGltZXZhbCB0dDsKLWV4dGVybiBpbnQgbGlua191cDsKLWV4dGVybiBpbnQgc2xpcnBfc29ja2V0 OwotZXh0ZXJuIGludCBzbGlycF9zb2NrZXRfdW5pdDsKLWV4dGVybiBpbnQgc2xpcnBfc29ja2V0 X3BvcnQ7Ci1leHRlcm4gdV9pbnQzMl90IHNsaXJwX3NvY2tldF9hZGRyOwotZXh0ZXJuIGNoYXIg KnNsaXJwX3NvY2tldF9wYXNzd2Q7Ci1leHRlcm4gaW50IGN0dHlfY2xvc2VkOwogCiAvKgogICog R2V0IHRoZSBkaWZmZXJlbmNlIGluIDIgdGltZXMgZnJvbSB1cGR0aW0oKQpAQCAtMjgsMjcgKzIw LDEwIEBACiAgKi8KICNkZWZpbmUgVElNRV9ESUZGKHgseSkgKHgpLSh5KSA8IDAgPyB+MC0oeSkr KHgpIDogKHgpLSh5KQogCi1leHRlcm4gY2hhciAqc2xpcnBfdHR5OwotZXh0ZXJuIGNoYXIgKmV4 ZWNfc2hlbGw7Ci1leHRlcm4gdV9pbnQgY3VydGltZTsKLWV4dGVybiBmZF9zZXQgKmdsb2JhbF9y ZWFkZmRzLCAqZ2xvYmFsX3dyaXRlZmRzLCAqZ2xvYmFsX3hmZHM7Ci1leHRlcm4gc3RydWN0IGlu X2FkZHIgY3RsX2FkZHI7Ci1leHRlcm4gc3RydWN0IGluX2FkZHIgc3BlY2lhbF9hZGRyOwotZXh0 ZXJuIHN0cnVjdCBpbl9hZGRyIGFsaWFzX2FkZHI7Ci1leHRlcm4gc3RydWN0IGluX2FkZHIgb3Vy X2FkZHI7Ci1leHRlcm4gc3RydWN0IGluX2FkZHIgbG9vcGJhY2tfYWRkcjsKLWV4dGVybiBzdHJ1 Y3QgaW5fYWRkciBkbnNfYWRkcjsKLWV4dGVybiBjaGFyICp1c2VybmFtZTsKLWV4dGVybiBjaGFy ICpzb2NrZXRfcGF0aDsKLWV4dGVybiBpbnQgdG93cml0ZV9tYXg7Ci1leHRlcm4gaW50IHBwcF9l eGl0OwotZXh0ZXJuIGludCBzb19vcHRpb25zOwotZXh0ZXJuIGludCB0Y3Bfa2VlcGludHZsOwot ZXh0ZXJuIHVpbnQ4X3QgY2xpZW50X2V0aGFkZHJbNl07CiAKICNkZWZpbmUgUFJPVE9fU0xJUCAw eDEKICNpZmRlZiBVU0VfUFBQCiAjZGVmaW5lIFBST1RPX1BQUCAweDIKICNlbmRpZgogCi12b2lk IGlmX2VuY2FwKGNvbnN0IHVpbnQ4X3QgKmlwX2RhdGEsIGludCBpcF9kYXRhX2xlbik7Cit2b2lk IGlmX2VuY2FwKHNsaXJwX3N0YXRlX3QgKnMsIGNvbnN0IHVpbnQ4X3QgKmlwX2RhdGEsIGludCBp cF9kYXRhX2xlbik7CkluZGV4OiBxZW11L3NsaXJwL21idWYuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11 Lm9yaWcvc2xpcnAvbWJ1Zi5jCTIwMDctMTAtMjEgMTg6NDc6MDguMDAwMDAwMDAwICswMDAwCisr KyBxZW11L3NsaXJwL21idWYuYwkyMDA3LTEwLTIyIDIwOjI1OjMyLjAwMDAwMDAwMCArMDAwMApA QCAtMTcsMzEgKzE3LDIxIEBACiAKICNpbmNsdWRlIDxzbGlycC5oPgogCi1zdHJ1Y3QJbWJ1ZiAq bWJ1dGw7Ci1jaGFyCSptY2xyZWZjbnQ7Ci1pbnQgbWJ1Zl9hbGxvY2VkID0gMDsKLXN0cnVjdCBt YnVmIG1fZnJlZWxpc3QsIG1fdXNlZGxpc3Q7Ci1pbnQgbWJ1Zl90aHJlc2ggPSAzMDsKLWludCBt YnVmX21heCA9IDA7Ci1pbnQgbXNpemU7CiAKLXZvaWQKLW1faW5pdCgpCi17Ci0JbV9mcmVlbGlz dC5tX25leHQgPSBtX2ZyZWVsaXN0Lm1fcHJldiA9ICZtX2ZyZWVsaXN0OwotCW1fdXNlZGxpc3Qu bV9uZXh0ID0gbV91c2VkbGlzdC5tX3ByZXYgPSAmbV91c2VkbGlzdDsKLQltc2l6ZV9pbml0KCk7 Ci19CisvKgorICogRmluZCBhIG5pY2UgdmFsdWUgZm9yIG1zaXplCisgKiBYWFggaWZfbWF4bGlu a2hkciBhbHJlYWR5IGluIG10dQorICovCisjZGVmaW5lIE1TSVpFIChJRl9NVFUgKyBJRl9NQVhM SU5LSERSICsgc2l6ZW9mKHN0cnVjdCBtX2hkciApICsgNikKIAogdm9pZAotbXNpemVfaW5pdCgp CittX2luaXQoc2xpcnBfc3RhdGVfdCAqcykKIHsKLQkvKgotCSAqIEZpbmQgYSBuaWNlIHZhbHVl IGZvciBtc2l6ZQotCSAqIFhYWCBpZl9tYXhsaW5raGRyIGFscmVhZHkgaW4gbXR1Ci0JICovCi0J bXNpemUgPSAoaWZfbXR1PmlmX21ydT9pZl9tdHU6aWZfbXJ1KSArCi0JCQlpZl9tYXhsaW5raGRy ICsgc2l6ZW9mKHN0cnVjdCBtX2hkciApICsgNjsKKwltX3NldF9uZXh0KCZzLT5tX2ZyZWVsaXN0 LCAmcy0+bV9mcmVlbGlzdCk7CisJbV9zZXRfcHJldigmcy0+bV9mcmVlbGlzdCwgJnMtPm1fZnJl ZWxpc3QpOworCW1fc2V0X25leHQoJnMtPm1fdXNlZGxpc3QsICZzLT5tX3VzZWRsaXN0KTsKKwlt X3NldF9wcmV2KCZzLT5tX3VzZWRsaXN0LCAmcy0+bV91c2VkbGlzdCk7CisJcy0+bWJ1Zl9hbGxv Y2VkID0gMDsKIH0KIAogLyoKQEAgLTUzLDQ0ICs0Myw0NiBAQAogICogd2hpY2ggdGVsbHMgbV9m cmVlIHRvIGFjdHVhbGx5IGZyZWUoKSBpdAogICovCiBzdHJ1Y3QgbWJ1ZiAqCi1tX2dldCgpCitt X2dldChzbGlycF9zdGF0ZV90ICpzKQogewogCXJlZ2lzdGVyIHN0cnVjdCBtYnVmICptOwogCWlu dCBmbGFncyA9IDA7CiAKIAlERUJVR19DQUxMKCJtX2dldCIpOwogCi0JaWYgKG1fZnJlZWxpc3Qu bV9uZXh0ID09ICZtX2ZyZWVsaXN0KSB7Ci0JCW0gPSAoc3RydWN0IG1idWYgKiltYWxsb2MobXNp emUpOwotCQlpZiAobSA9PSBOVUxMKSBnb3RvIGVuZF9lcnJvcjsKLQkJbWJ1Zl9hbGxvY2VkKys7 Ci0JCWlmIChtYnVmX2FsbG9jZWQgPiBtYnVmX3RocmVzaCkKKwlpZiAobV9nZXRfbmV4dCgmcy0+ bV9mcmVlbGlzdCkgPT0gJnMtPm1fZnJlZWxpc3QpIHsKKwkJbSA9IChzdHJ1Y3QgbWJ1ZiAqKW1h bGxvYyhNU0laRSk7CisJCWlmIChtID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8g ZW5kX2Vycm9yOworCQlzLT5tYnVmX2FsbG9jZWQrKzsKKwkJaWYgKHMtPm1idWZfYWxsb2NlZCA+ IE1CVUZfVEhSRVNIKQogCQkJZmxhZ3MgPSBNX0RPRlJFRTsKLQkJaWYgKG1idWZfYWxsb2NlZCA+ IG1idWZfbWF4KQotCQkJbWJ1Zl9tYXggPSBtYnVmX2FsbG9jZWQ7CisJCWlmIChzLT5tYnVmX2Fs bG9jZWQgPiBzLT5tYnVmX21heCkKKwkJCXMtPm1idWZfbWF4ID0gcy0+bWJ1Zl9hbGxvY2VkOwog CX0gZWxzZSB7Ci0JCW0gPSBtX2ZyZWVsaXN0Lm1fbmV4dDsKLQkJcmVtcXVlKG0pOworCQltID0g bV9nZXRfbmV4dCgmcy0+bV9mcmVlbGlzdCk7CisJCXJlbXF1ZShzLCBtKTsKIAl9CiAKIAkvKiBJ bnNlcnQgaXQgaW4gdGhlIHVzZWQgbGlzdCAqLwotCWluc3F1ZShtLCZtX3VzZWRsaXN0KTsKKwlp bnNxdWUocywgbSwgJnMtPm1fdXNlZGxpc3QpOwogCW0tPm1fZmxhZ3MgPSAoZmxhZ3MgfCBNX1VT RURMSVNUKTsKIAogCS8qIEluaXRpYWxpc2UgaXQgKi8KLQltLT5tX3NpemUgPSBtc2l6ZSAtIHNp emVvZihzdHJ1Y3QgbV9oZHIpOworCW0tPm1fc2l6ZSA9IE1TSVpFIC0gc2l6ZW9mKHN0cnVjdCBt X2hkcik7CiAJbS0+bV9kYXRhID0gbS0+bV9kYXQ7CiAJbS0+bV9sZW4gPSAwOwotCW0tPm1fbmV4 dHBrdCA9IDA7Ci0JbS0+bV9wcmV2cGt0ID0gMDsKKwltX3NldF9uZXh0cGt0KG0sIDApOworCW1f c2V0X3ByZXZwa3QobSwgMCk7CisgICAgICAgIG0tPm1faGRyLm5leHRfaXAgPSBtLT5tX2hkci5w cmV2X2lwID0gTlVMTDsKKyAgICAgICAgbS0+bV9oZHIubmV4dF9mcmFnID0gbS0+bV9oZHIucHJl dl9mcmFnID0gTlVMTDsKIGVuZF9lcnJvcjoKIAlERUJVR19BUkcoIm0gPSAlbHgiLCAobG9uZyAp bSk7CiAJcmV0dXJuIG07CiB9CiAKIHZvaWQKLW1fZnJlZShtKQotCXN0cnVjdCBtYnVmICptOwor bV9mcmVlKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBtYnVmICptKQogewogCiAgIERFQlVHX0NB TEwoIm1fZnJlZSIpOwpAQCAtOTksNyArOTEsNyBAQAogICBpZihtKSB7CiAJLyogUmVtb3ZlIGZy b20gbV91c2VkbGlzdCAqLwogCWlmIChtLT5tX2ZsYWdzICYgTV9VU0VETElTVCkKLQkgICByZW1x dWUobSk7CisJICAgcmVtcXVlKHMsIG0pOwogCiAJLyogSWYgaXQncyBNX0VYVCwgZnJlZSgpIGl0 ICovCiAJaWYgKG0tPm1fZmxhZ3MgJiBNX0VYVCkKQEAgLTExMCw5ICsxMDIsOSBAQAogCSAqLwog CWlmIChtLT5tX2ZsYWdzICYgTV9ET0ZSRUUpIHsKIAkJZnJlZShtKTsKLQkJbWJ1Zl9hbGxvY2Vk LS07CisJCXMtPm1idWZfYWxsb2NlZC0tOwogCX0gZWxzZSBpZiAoKG0tPm1fZmxhZ3MgJiBNX0ZS RUVMSVNUKSA9PSAwKSB7Ci0JCWluc3F1ZShtLCZtX2ZyZWVsaXN0KTsKKwkJaW5zcXVlKHMsIG0s ICZzLT5tX2ZyZWVsaXN0KTsKIAkJbS0+bV9mbGFncyA9IE1fRlJFRUxJU1Q7IC8qIENsb2JiZXIg b3RoZXIgZmxhZ3MgKi8KIAl9CiAgIH0gLyogaWYobSkgKi8KQEAgLTEyNCw4ICsxMTYsNyBAQAog ICogYW4gTV9FWFQgZGF0YSBzZWdtZW50CiAgKi8KIHZvaWQKLW1fY2F0KG0sIG4pCi0JcmVnaXN0 ZXIgc3RydWN0IG1idWYgKm0sICpuOworbV9jYXQoc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIg c3RydWN0IG1idWYgKm0sIHJlZ2lzdGVyIHN0cnVjdCBtYnVmICpuKQogewogCS8qCiAJICogSWYg dGhlcmUncyBubyByb29tLCByZWFsbG9jCkBAIC0xMzYsNyArMTI3LDcgQEAKIAltZW1jcHkobS0+ bV9kYXRhK20tPm1fbGVuLCBuLT5tX2RhdGEsIG4tPm1fbGVuKTsKIAltLT5tX2xlbiArPSBuLT5t X2xlbjsKIAotCW1fZnJlZShuKTsKKwltX2ZyZWUocywgbik7CiB9CiAKIApAQCAtMjIwLDggKzIx MSw3IEBACiAgKiBGb3J0dW5hdGVseSwgaXQncyBub3QgdXNlZCBvZnRlbgogICovCiBzdHJ1Y3Qg bWJ1ZiAqCi1kdG9tKGRhdCkKLQl2b2lkICpkYXQ7CitkdG9tKHNsaXJwX3N0YXRlX3QgKnMsIHZv aWQgKmRhdCkKIHsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKIApAQCAtMjI5LDcgKzIxOSw3IEBACiAJREVC VUdfQVJHKCJkYXQgPSAlbHgiLCAobG9uZyApZGF0KTsKIAogCS8qIGJ1ZyBjb3JyZWN0ZWQgZm9y IE1fRVhUIGJ1ZmZlcnMgKi8KLQlmb3IgKG0gPSBtX3VzZWRsaXN0Lm1fbmV4dDsgbSAhPSAmbV91 c2VkbGlzdDsgbSA9IG0tPm1fbmV4dCkgeworCWZvciAobSA9IG1fZ2V0X25leHQoJnMtPm1fdXNl ZGxpc3QpOyBtICE9ICZzLT5tX3VzZWRsaXN0OyBtID0gbV9nZXRfbmV4dChtKSkgewogCSAgaWYg KG0tPm1fZmxhZ3MgJiBNX0VYVCkgewogCSAgICBpZiggKGNoYXIgKilkYXQ+PW0tPm1fZXh0ICYm IChjaGFyICopZGF0PChtLT5tX2V4dCArIG0tPm1fc2l6ZSkgKQogCSAgICAgIHJldHVybiBtOwpJ bmRleDogcWVtdS9zbGlycC9tYnVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL21i dWYuaAkyMDA3LTEwLTIxIDE4OjQ3OjA4LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC9t YnVmLmgJMjAwNy0xMC0yMiAxNTowNjoxNy4wMDAwMDAwMDAgKzAwMDAKQEAgLTYxLDE1ICs2MSwx OCBAQAogLyogWFhYIHNob3VsZCB1bmlvbiBzb21lIG9mIHRoZXNlISAqLwogLyogaGVhZGVyIGF0 IGJlZ2lubmluZyBvZiBlYWNoIG1idWY6ICovCiBzdHJ1Y3QgbV9oZHIgewotCXN0cnVjdAltYnVm ICptaF9uZXh0OwkJLyogTGlua2VkIGxpc3Qgb2YgbWJ1ZnMgKi8KLQlzdHJ1Y3QJbWJ1ZiAqbWhf cHJldjsKLQlzdHJ1Y3QJbWJ1ZiAqbWhfbmV4dHBrdDsJLyogTmV4dCBwYWNrZXQgaW4gcXVldWUv cmVjb3JkICovCi0Jc3RydWN0CW1idWYgKm1oX3ByZXZwa3Q7IC8qIEZsYWdzIGFyZW4ndCB1c2Vk IGluIHRoZSBvdXRwdXQgcXVldWUgKi8KKwlzdHJ1Y3QJbWJ1ZiAqX21oX25leHQ7CQkvKiBMaW5r ZWQgbGlzdCBvZiBtYnVmcyAqLworCXN0cnVjdAltYnVmICpfbWhfcHJldjsKKwlzdHJ1Y3QJbWJ1 ZiAqX21oX25leHRwa3Q7CS8qIE5leHQgcGFja2V0IGluIHF1ZXVlL3JlY29yZCAqLworCXN0cnVj dAltYnVmICpfbWhfcHJldnBrdDsgLyogRmxhZ3MgYXJlbid0IHVzZWQgaW4gdGhlIG91dHB1dCBx dWV1ZSAqLwogCWludAltaF9mbGFnczsJICAvKiBNaXNjIGZsYWdzICovCiAKIAlpbnQJbWhfc2l6 ZTsJCS8qIFNpemUgb2YgZGF0YSAqLwogCXN0cnVjdAlzb2NrZXQgKm1oX3NvOwogCisJc3RydWN0 ICBtYnVmICpuZXh0X2lwLCAqcHJldl9pcDsKKwlzdHJ1Y3QgIG1idWYgKm5leHRfZnJhZywgKnBy ZXZfZnJhZzsKKwogCWNhZGRyX3QJbWhfZGF0YTsJCS8qIExvY2F0aW9uIG9mIGRhdGEgKi8KIAlp bnQJbWhfbGVuOwkJCS8qIEFtb3VudCBvZiBkYXRhIGluIHRoaXMgbWJ1ZiAqLwogfTsKQEAgLTk2 LDEwICs5OSw1MSBAQAogCX0gTV9kYXQ7CiB9OwogCi0jZGVmaW5lIG1fbmV4dAkJbV9oZHIubWhf bmV4dAotI2RlZmluZSBtX3ByZXYJCW1faGRyLm1oX3ByZXYKLSNkZWZpbmUgbV9uZXh0cGt0CW1f aGRyLm1oX25leHRwa3QKLSNkZWZpbmUgbV9wcmV2cGt0CW1faGRyLm1oX3ByZXZwa3QKK3N0YXRp YyBpbmxpbmUgc3RydWN0IG1idWYgKm1fZ2V0X25leHQoc3RydWN0IG1idWYgKm0pCit7CisgICAg cmV0dXJuIG0tPm1faGRyLl9taF9uZXh0OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYnVm ICptX2dldF9wcmV2KHN0cnVjdCBtYnVmICptKQoreworICAgIHJldHVybiBtLT5tX2hkci5fbWhf cHJldjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1fc2V0X25leHQoc3RydWN0IG1idWYgKm0s IHN0cnVjdCBtYnVmICpuZXh0KQoreworICAgIG0tPm1faGRyLl9taF9uZXh0ID0gbmV4dDsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIG1fc2V0X3ByZXYoc3RydWN0IG1idWYgKm0sIHN0cnVjdCBt YnVmICpwcmV2KQoreworICAgIG0tPm1faGRyLl9taF9wcmV2ID0gcHJldjsKK30KKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgbWJ1ZiAqbV9nZXRfbmV4dHBrdChzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKyAg ICByZXR1cm4gbS0+bV9oZHIuX21oX25leHRwa3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0 IG1idWYgKiptX2dldF9uZXh0cGt0YWRkcihzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKyAgICByZXR1cm4g Jm0tPm1faGRyLl9taF9uZXh0cGt0OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYnVmICpt X2dldF9wcmV2cGt0KHN0cnVjdCBtYnVmICptKQoreworICAgIHJldHVybiBtLT5tX2hkci5fbWhf cHJldnBrdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1fc2V0X25leHRwa3Qoc3RydWN0IG1i dWYgKm0sIHN0cnVjdCBtYnVmICpuZXh0KQoreworICAgIG0tPm1faGRyLl9taF9uZXh0cGt0ID0g bmV4dDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1fc2V0X3ByZXZwa3Qoc3RydWN0IG1idWYg Km0sIHN0cnVjdCBtYnVmICpwcmV2KQoreworICAgIG0tPm1faGRyLl9taF9wcmV2cGt0ID0gcHJl djsKK30KKwogI2RlZmluZSBtX2ZsYWdzCQltX2hkci5taF9mbGFncwogI2RlZmluZQltX2xlbgkJ bV9oZHIubWhfbGVuCiAjZGVmaW5lCW1fZGF0YQkJbV9oZHIubWhfZGF0YQpAQCAtMTA4LDEwICsx NTIsMTYgQEAKICNkZWZpbmUgbV9leHQJCU1fZGF0Lm1fZXh0XwogI2RlZmluZSBtX3NvCQltX2hk ci5taF9zbwogCi0jZGVmaW5lIGlmcV9wcmV2IG1fcHJldgotI2RlZmluZSBpZnFfbmV4dCBtX25l eHQKLSNkZWZpbmUgaWZzX3ByZXYgbV9wcmV2cGt0Ci0jZGVmaW5lIGlmc19uZXh0IG1fbmV4dHBr dAorI2RlZmluZSBpZnFfZ2V0X3ByZXYobSkgbV9nZXRfcHJldihtKQorI2RlZmluZSBpZnFfc2V0 X3ByZXYobSwgcHJldikgbV9zZXRfcHJldihtLCBwcmV2KQorI2RlZmluZSBpZnFfZ2V0X25leHQo bSkgbV9nZXRfbmV4dChtKQorI2RlZmluZSBpZnFfc2V0X25leHQobSwgbmV4dCkgbV9zZXRfbmV4 dChtLCBuZXh0KQorCisjZGVmaW5lIGlmc19nZXRfcHJldihtKSBtX2dldF9wcmV2cGt0KG0pCisj ZGVmaW5lIGlmc19zZXRfcHJldihtLCBwcmV2KSBtX3NldF9wcmV2cGt0KG0sIHByZXYpCisjZGVm aW5lIGlmc19nZXRfbmV4dChtKSBtX2dldF9uZXh0cGt0KG0pCisjZGVmaW5lIGlmc19zZXRfbmV4 dChtLCBuZXh0KSBtX3NldF9uZXh0cGt0KG0sIG5leHQpCisKICNkZWZpbmUgaWZxX3NvIG1fc28K IAogI2RlZmluZSBNX0VYVAkJCTB4MDEJLyogbV9leHQgcG9pbnRzIHRvIG1vcmUgKG1hbGxvY2Vk KSBkYXRhICovCkBAIC0xMjAsMjggKzE3MCwxMyBAQAogI2RlZmluZSBNX0RPRlJFRQkJMHgwOAkv KiB3aGVuIG1fZnJlZSBpcyBjYWxsZWQgb24gdGhlIG1idWYsIGZyZWUoKQogCQkJCQkgKiBpdCBy YXRoZXIgdGhhbiBwdXR0aW5nIGl0IG9uIHRoZSBmcmVlIGxpc3QgKi8KIAotLyoKLSAqIE1idWYg c3RhdGlzdGljcy4gWFhYCi0gKi8KLQotc3RydWN0IG1ic3RhdCB7Ci0JaW50IG1ic19hbGxvY2Vk OwkJLyogTnVtYmVyIG9mIG1idWZzIGFsbG9jYXRlZCAqLwotCi19OwotCi1leHRlcm4gc3RydWN0 CW1ic3RhdCBtYnN0YXQ7Ci1leHRlcm4gaW50IG1idWZfYWxsb2NlZDsKLWV4dGVybiBzdHJ1Y3Qg bWJ1ZiBtX2ZyZWVsaXN0LCBtX3VzZWRsaXN0OwotZXh0ZXJuIGludCBtYnVmX21heDsKLQotdm9p ZCBtX2luaXQgX1AoKHZvaWQpKTsKLXZvaWQgbXNpemVfaW5pdCBfUCgodm9pZCkpOwotc3RydWN0 IG1idWYgKiBtX2dldCBfUCgodm9pZCkpOwotdm9pZCBtX2ZyZWUgX1AoKHN0cnVjdCBtYnVmICop KTsKLXZvaWQgbV9jYXQgX1AoKHJlZ2lzdGVyIHN0cnVjdCBtYnVmICosIHJlZ2lzdGVyIHN0cnVj dCBtYnVmICopKTsKK3ZvaWQgbV9pbml0KHNsaXJwX3N0YXRlX3QgKnMpOworc3RydWN0IG1idWYg Km1fZ2V0KHNsaXJwX3N0YXRlX3QgKnMpOwordm9pZCBtX2ZyZWUoc2xpcnBfc3RhdGVfdCAqcywg c3RydWN0IG1idWYgKm0pOwordm9pZCBtX2NhdChzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBz dHJ1Y3QgbWJ1ZiAqbSwgcmVnaXN0ZXIgc3RydWN0IG1idWYgKm4pOwogdm9pZCBtX2luYyBfUCgo c3RydWN0IG1idWYgKiwgaW50KSk7CiB2b2lkIG1fYWRqIF9QKChzdHJ1Y3QgbWJ1ZiAqLCBpbnQp KTsKIGludCBtX2NvcHkgX1AoKHN0cnVjdCBtYnVmICosIHN0cnVjdCBtYnVmICosIGludCwgaW50 KSk7Ci1zdHJ1Y3QgbWJ1ZiAqIGR0b20gX1AoKHZvaWQgKikpOworc3RydWN0IG1idWYgKmR0b20o c2xpcnBfc3RhdGVfdCAqcywgdm9pZCAqZGF0KTsKIAogI2VuZGlmCkluZGV4OiBxZW11L3NsaXJw L21pc2MuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvbWlzYy5jCTIwMDctMTAtMjEg MTg6NDc6MDguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL21pc2MuYwkyMDA3LTEwLTIx IDE4OjQ3OjExLjAwMDAwMDAwMCArMDAwMApAQCAtOCw4ICs4LDYgQEAKICNkZWZpbmUgV0FOVF9T WVNfSU9DVExfSAogI2luY2x1ZGUgPHNsaXJwLmg+CiAKLXVfaW50IGN1cnRpbWUsIHRpbWVfZmFz dHRpbW8sIGxhc3Rfc2xvd3RpbW8sIGRldGFjaF90aW1lOwotdV9pbnQgZGV0YWNoX3dhaXQgPSA2 MDAwMDA7CS8qIDEwIG1pbnV0ZXMgKi8KIAogI2lmIDAKIGludCB4X3BvcnQgPSAtMTsKQEAgLTI1 LDkgKzIzLDkgQEAKIAkJbHByaW50KCJYIFJlZGlyOiBYIG5vdCBiZWluZyByZWRpcmVjdGVkLlxy XG4iKTsKIAl9IGVsc2UgewogCQlscHJpbnQoIlggUmVkaXI6IEluIHNoL2Jhc2gvenNoL2V0Yy4g dHlwZTogRElTUExBWT0lczolZC4lZDsgZXhwb3J0IERJU1BMQVlcclxuIiwKLQkJICAgICAgaW5l dF9udG9hKG91cl9hZGRyKSwgeF9wb3J0LCB4X3NjcmVlbik7CisJCSAgICAgIGluZXRfbnRvYShz LT5vdXJfYWRkciksIHhfcG9ydCwgeF9zY3JlZW4pOwogCQlscHJpbnQoIlggUmVkaXI6IEluIGNz aC90Y3NoL2V0Yy4gdHlwZTogICAgc2V0ZW52IERJU1BMQVkgJXM6JWQuJWRcclxuIiwKLQkJICAg ICAgaW5ldF9udG9hKG91cl9hZGRyKSwgeF9wb3J0LCB4X3NjcmVlbik7CisJCSAgICAgIGluZXRf bnRvYShzLT5vdXJfYWRkciksIHhfcG9ydCwgeF9zY3JlZW4pOwogCQlpZiAoeF9kaXNwbGF5KQog CQkgICBscHJpbnQoIlggUmVkaXI6IFJlZGlyZWN0aW5nIHRvIGRpc3BsYXkgJWRcclxuIiwgeF9k aXNwbGF5KTsKIAl9CkBAIC04NSw3ICs4Myw3IEBACiAgKiBHZXQgb3VyIElQIGFkZHJlc3MgYW5k IHB1dCBpdCBpbiBvdXJfYWRkcgogICovCiB2b2lkCi1nZXRvdXJhZGRyKCkKK2dldG91cmFkZHIo c2xpcnBfc3RhdGVfdCAqcykKIHsKIAljaGFyIGJ1ZmZbMjU2XTsKIAlzdHJ1Y3QgaG9zdGVudCAq aGUgPSBOVUxMOwpAQCAtOTMsOSArOTEsOSBAQAogCWlmIChnZXRob3N0bmFtZShidWZmLDI1Nikg PT0gMCkKICAgICAgICAgICAgIGhlID0gZ2V0aG9zdGJ5bmFtZShidWZmKTsKICAgICAgICAgaWYg KGhlKQotICAgICAgICAgICAgb3VyX2FkZHIgPSAqKHN0cnVjdCBpbl9hZGRyICopaGUtPmhfYWRk cjsKLSAgICAgICAgaWYgKG91cl9hZGRyLnNfYWRkciA9PSAwKQotICAgICAgICAgICAgb3VyX2Fk ZHIuc19hZGRyID0gbG9vcGJhY2tfYWRkci5zX2FkZHI7CisgICAgICAgICAgICBzLT5vdXJfYWRk ciA9ICooc3RydWN0IGluX2FkZHIgKiloZS0+aF9hZGRyOworICAgICAgICBpZiAocy0+b3VyX2Fk ZHIuc19hZGRyID09IDApCisgICAgICAgICAgICBzLT5vdXJfYWRkci5zX2FkZHIgPSBzLT5sb29w YmFja19hZGRyLnNfYWRkcjsKIH0KIAogI2lmIFNJWkVPRl9DSEFSX1AgPT0gOApAQCAtMTA1LDI3 ICsxMDMsMjMgQEAKIAl1X2ludDMyX3QgcWhfcmxpbms7CiB9OwogCi1pbmxpbmUgdm9pZAotaW5z cXVlXzMyKGEsIGIpCi0Jdm9pZCAqYTsKLQl2b2lkICpiOwordm9pZAoraW5zcXVlXzMyKHNsaXJw X3N0YXRlX3QgKnMsIHZvaWQgKmEsIHZvaWQgKmIpCiB7CiAJcmVnaXN0ZXIgc3RydWN0IHF1ZWhl YWRfMzIgKmVsZW1lbnQgPSAoc3RydWN0IHF1ZWhlYWRfMzIgKikgYTsKIAlyZWdpc3RlciBzdHJ1 Y3QgcXVlaGVhZF8zMiAqaGVhZCA9IChzdHJ1Y3QgcXVlaGVhZF8zMiAqKSBiOwogCWVsZW1lbnQt PnFoX2xpbmsgPSBoZWFkLT5xaF9saW5rOwotCWhlYWQtPnFoX2xpbmsgPSAodV9pbnQzMl90KWVs ZW1lbnQ7Ci0JZWxlbWVudC0+cWhfcmxpbmsgPSAodV9pbnQzMl90KWhlYWQ7Ci0JKChzdHJ1Y3Qg cXVlaGVhZF8zMiAqKShlbGVtZW50LT5xaF9saW5rKSktPnFoX3JsaW5rCi0JPSAodV9pbnQzMl90 KWVsZW1lbnQ7CisJaGVhZC0+cWhfbGluayA9ICh1X2ludDMyX3QpKHVuc2lnbmVkIGxvbmcpZWxl bWVudDsKKwllbGVtZW50LT5xaF9ybGluayA9ICh1X2ludDMyX3QpKHVuc2lnbmVkIGxvbmcpaGVh ZDsKKwkoKHN0cnVjdCBxdWVoZWFkXzMyICopKHVuc2lnbmVkIGxvbmcpKGVsZW1lbnQtPnFoX2xp bmspKS0+cWhfcmxpbmsgPSAodV9pbnQzMl90KSh1bnNpZ25lZCBsb25nKWVsZW1lbnQ7CiB9CiAK LWlubGluZSB2b2lkCi1yZW1xdWVfMzIoYSkKLQl2b2lkICphOwordm9pZAorcmVtcXVlXzMyKHNs aXJwX3N0YXRlX3QgKnMsIHZvaWQgKmEpCiB7CiAJcmVnaXN0ZXIgc3RydWN0IHF1ZWhlYWRfMzIg KmVsZW1lbnQgPSAoc3RydWN0IHF1ZWhlYWRfMzIgKikgYTsKLQkoKHN0cnVjdCBxdWVoZWFkXzMy ICopKGVsZW1lbnQtPnFoX2xpbmspKS0+cWhfcmxpbmsgPSBlbGVtZW50LT5xaF9ybGluazsKLQko KHN0cnVjdCBxdWVoZWFkXzMyICopKGVsZW1lbnQtPnFoX3JsaW5rKSktPnFoX2xpbmsgPSBlbGVt ZW50LT5xaF9saW5rOworCSgoc3RydWN0IHF1ZWhlYWRfMzIgKikodW5zaWduZWQgbG9uZykoZWxl bWVudC0+cWhfbGluaykpLT5xaF9ybGluayA9IGVsZW1lbnQtPnFoX3JsaW5rOworCSgoc3RydWN0 IHF1ZWhlYWRfMzIgKikodW5zaWduZWQgbG9uZykoZWxlbWVudC0+cWhfcmxpbmspKS0+cWhfbGlu ayA9IGVsZW1lbnQtPnFoX2xpbms7CiAJZWxlbWVudC0+cWhfcmxpbmsgPSAwOwogfQogCkBAIC0x MzYsOSArMTMwLDggQEAKIAlzdHJ1Y3QgcXVlaGVhZCAqcWhfcmxpbms7CiB9OwogCi1pbmxpbmUg dm9pZAotaW5zcXVlKGEsIGIpCi0Jdm9pZCAqYSwgKmI7Cit2b2lkCitpbnNxdWUoc2xpcnBfc3Rh dGVfdCAqcywgdm9pZCAqYSwgdm9pZCAqYikKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgcXVlaGVhZCAq ZWxlbWVudCA9IChzdHJ1Y3QgcXVlaGVhZCAqKSBhOwogCXJlZ2lzdGVyIHN0cnVjdCBxdWVoZWFk ICpoZWFkID0gKHN0cnVjdCBxdWVoZWFkICopIGI7CkBAIC0xNDksOSArMTQyLDggQEAKIAk9IChz dHJ1Y3QgcXVlaGVhZCAqKWVsZW1lbnQ7CiB9CiAKLWlubGluZSB2b2lkCi1yZW1xdWUoYSkKLSAg ICAgdm9pZCAqYTsKK3ZvaWQKK3JlbXF1ZShzbGlycF9zdGF0ZV90ICpzLCB2b2lkICphKQogewog ICByZWdpc3RlciBzdHJ1Y3QgcXVlaGVhZCAqZWxlbWVudCA9IChzdHJ1Y3QgcXVlaGVhZCAqKSBh OwogICAoKHN0cnVjdCBxdWVoZWFkICopKGVsZW1lbnQtPnFoX2xpbmspKS0+cWhfcmxpbmsgPSBl bGVtZW50LT5xaF9ybGluazsKQEAgLTIxNCwxMCArMjA2LDcgQEAKICNpZmRlZiBfV0lOMzIKIAog aW50Ci1mb3JrX2V4ZWMoc28sIGV4LCBkb19wdHkpCi0Jc3RydWN0IHNvY2tldCAqc287Ci0JY2hh ciAqZXg7Ci0JaW50IGRvX3B0eTsKK2ZvcmtfZXhlYyhzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qg c29ja2V0ICpzbywgY29uc3QgY2hhciAqZXgsIGludCBkb19wdHkpCiB7CiAgICAgLyogbm90IGlt cGxlbWVudGVkICovCiAgICAgcmV0dXJuIDA7CkBAIC0yMjUsNiArMjE0LDcgQEAKIAogI2Vsc2UK IAorI2lmIDAKIGludAogc2xpcnBfb3BlbnB0eShhbWFzdGVyLCBhc2xhdmUpCiAgICAgIGludCAq YW1hc3RlciwgKmFzbGF2ZTsKQEAgLTI4OSw2ICsyNzksNyBAQAogCXJldHVybiAoLTEpOwogI2Vu ZGlmCiB9CisjZW5kaWYKIAogLyoKICAqIFhYWCBUaGlzIGlzIHVnbHkKQEAgLTMwMiwyMyArMjkz LDIwIEBACiAgKiBkb19wdHIgPSAyICAgRm9yay9leGVjIHVzaW5nIHB0eQogICovCiBpbnQKLWZv cmtfZXhlYyhzbywgZXgsIGRvX3B0eSkKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQljaGFyICpleDsK LQlpbnQgZG9fcHR5OworZm9ya19leGVjKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQg KnNvLCBjb25zdCBjaGFyICpleCwgaW50IGRvX3B0eSkKIHsKLQlpbnQgczsKKwlpbnQgZmQgPSAt MTsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKIAlpbnQgYWRkcmxlbiA9IHNpemVvZihhZGRy KTsKIAlpbnQgb3B0OwotICAgICAgICBpbnQgbWFzdGVyOworICAgICAgICBpbnQgbWFzdGVyID0g LTE7CiAJY2hhciAqYXJndlsyNTZdOwogI2lmIDAKIAljaGFyIGJ1ZmZbMjU2XTsKICNlbmRpZgog CS8qIGRvbid0IHdhbnQgdG8gY2xvYmJlciB0aGUgb3JpZ2luYWwgKi8KIAljaGFyICpicHRyOwot CWNoYXIgKmN1cmFyZzsKKwljb25zdCBjaGFyICpjdXJhcmc7CiAJaW50IGMsIGksIHJldDsKIAog CURFQlVHX0NBTEwoImZvcmtfZXhlYyIpOwpAQCAtMzI3LDIwICszMTUsMjIgQEAKIAlERUJVR19B UkcoImRvX3B0eSA9ICVseCIsIChsb25nKWRvX3B0eSk7CiAKIAlpZiAoZG9fcHR5ID09IDIpIHsK LQkJaWYgKHNsaXJwX29wZW5wdHkoJm1hc3RlciwgJnMpID09IC0xKSB7CisjaWYgMAorCQlpZiAo c2xpcnBfb3BlbnB0eSgmbWFzdGVyLCAmZmQpID09IC0xKSB7CiAJCQlscHJpbnQoIkVycm9yOiBv cGVucHR5IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CiAJCQlyZXR1cm4gMDsKIAkJ fQorI2VuZGlmCiAJfSBlbHNlIHsKIAkJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAkJYWRk ci5zaW5fcG9ydCA9IDA7CiAJCWFkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKIAot CQlpZiAoKHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA8IDAgfHwKLQkJICAg IGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBhZGRybGVuKSA8IDAgfHwKLQkJICAg IGxpc3RlbihzLCAxKSA8IDApIHsKKwkJaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NU UkVBTSwgMCkpIDwgMCB8fAorCQkgICAgYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRy LCBhZGRybGVuKSA8IDAgfHwKKwkJICAgIGxpc3RlbihmZCwgMSkgPCAwKSB7CiAJCQlscHJpbnQo IkVycm9yOiBpbmV0IHNvY2tldDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQljbG9zZXNv Y2tldChzKTsKKwkJCWNsb3Nlc29ja2V0KGZkKTsKIAogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTM0 OSw3ICszMzksNyBAQAogCXN3aXRjaChmb3JrKCkpIHsKIAkgY2FzZSAtMToKIAkJbHByaW50KCJF cnJvcjogZm9yayBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotCQljbG9zZShzKTsK KwkJY2xvc2UoZmQpOwogCQlpZiAoZG9fcHR5ID09IDIpCiAJCSAgIGNsb3NlKG1hc3Rlcik7CiAJ CXJldHVybiAwOwpAQCAtMzYwLDM4ICszNTAsMzggQEAKIAkJCSh2b2lkKSBjbG9zZShtYXN0ZXIp OwogI2lmZGVmIFRJT0NTQ1RUWSAvKiBYWFhYWCAqLwogCQkJKHZvaWQpIHNldHNpZCgpOwotCQkJ aW9jdGwocywgVElPQ1NDVFRZLCAoY2hhciAqKU5VTEwpOworCQkJaW9jdGwoZmQsIFRJT0NTQ1RU WSwgKGNoYXIgKilOVUxMKTsKICNlbmRpZgogCQl9IGVsc2UgewotCQkJZ2V0c29ja25hbWUocywg KHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAmYWRkcmxlbik7Ci0JCQljbG9zZShzKTsKKwkJCWdl dHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZhZGRybGVuKTsKKwkJCWNs b3NlKGZkKTsKIAkJCS8qCiAJCQkgKiBDb25uZWN0IHRvIHRoZSBzb2NrZXQKIAkJCSAqIFhYWCBJ ZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UncmUgaW4gdHJvdWJsZSEKIAkgCQkgKi8KLQkJCXMgPSBz b2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOwotCQkJYWRkci5zaW5fYWRkciA9IGxvb3Bi YWNrX2FkZHI7CisJCQlmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisJCQlh ZGRyLnNpbl9hZGRyID0gcy0+bG9vcGJhY2tfYWRkcjsKICAgICAgICAgICAgICAgICAgICAgICAg IGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBjb25uZWN0KHMsIChzdHJ1 Y3Qgc29ja2FkZHIgKikmYWRkciwgYWRkcmxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0ID0gY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBhZGRybGVuKTsK ICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlO VFIpOwogCQl9CiAKICNpZiAwCiAJCWlmICh4X3BvcnQgPj0gMCkgewogI2lmZGVmIEhBVkVfU0VU RU5WCi0JCQlzcHJpbnRmKGJ1ZmYsICIlczolZC4lZCIsIGluZXRfbnRvYShvdXJfYWRkciksIHhf cG9ydCwgeF9zY3JlZW4pOworCQkJc3ByaW50ZihidWZmLCAiJXM6JWQuJWQiLCBpbmV0X250b2Eo cy0+b3VyX2FkZHIpLCB4X3BvcnQsIHhfc2NyZWVuKTsKIAkJCXNldGVudigiRElTUExBWSIsIGJ1 ZmYsIDEpOwogI2Vsc2UKLQkJCXNwcmludGYoYnVmZiwgIkRJU1BMQVk9JXM6JWQuJWQiLCBpbmV0 X250b2Eob3VyX2FkZHIpLCB4X3BvcnQsIHhfc2NyZWVuKTsKKwkJCXNwcmludGYoYnVmZiwgIkRJ U1BMQVk9JXM6JWQuJWQiLCBpbmV0X250b2Eocy0+b3VyX2FkZHIpLCB4X3BvcnQsIHhfc2NyZWVu KTsKIAkJCXB1dGVudihidWZmKTsKICNlbmRpZgogCQl9CiAjZW5kaWYKLQkJZHVwMihzLCAwKTsK LQkJZHVwMihzLCAxKTsKLQkJZHVwMihzLCAyKTsKLQkJZm9yIChzID0gMzsgcyA8PSAyNTU7IHMr KykKLQkJICAgY2xvc2Uocyk7CisJCWR1cDIoZmQsIDApOworCQlkdXAyKGZkLCAxKTsKKwkJZHVw MihmZCwgMik7CisJCWZvciAoZmQgPSBnZXRkdGFibGVzaXplKCkgLSAxOyBmZCA+PSAzOyBmZC0t KQorCQkgICBjbG9zZShmZCk7CiAKIAkJaSA9IDA7CiAJCWJwdHIgPSBzdHJkdXAoZXgpOyAvKiBO byBuZWVkIHRvIGZyZWUoKSB0aGlzICovCkBAIC00MjcsNyArNDE3LDcgQEAKIAogCSBkZWZhdWx0 OgogCQlpZiAoZG9fcHR5ID09IDIpIHsKLQkJCWNsb3NlKHMpOworCQkJY2xvc2UoZmQpOwogCQkJ c28tPnMgPSBtYXN0ZXI7CiAJCX0gZWxzZSB7CiAJCQkvKgpAQCAtNDM4LDkgKzQyOCw5IEBACiAJ CSAJICogb2YgY29ubmVjdCgpIGZhaWwgaW4gdGhlIGNoaWxkIHByb2Nlc3MKIAkJIAkgKi8KICAg ICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz by0+cyA9IGFjY2VwdChzLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZhZGRybGVuKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzby0+cyA9IGFjY2VwdChmZCwgKHN0cnVjdCBzb2Nr YWRkciAqKSZhZGRyLCAmYWRkcmxlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxl IChzby0+cyA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotICAgICAgICAgICAgICAgICAgICAgICAg Y2xvc2Vzb2NrZXQocyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZXNvY2tldChmZCk7 CiAJCQlvcHQgPSAxOwogCQkJc2V0c29ja29wdChzby0+cyxTT0xfU09DS0VULFNPX1JFVVNFQURE UiwoY2hhciAqKSZvcHQsc2l6ZW9mKGludCkpOwogCQkJb3B0ID0gMTsKQEAgLTQ1MCw3ICs0NDAs NyBAQAogCiAJCS8qIEFwcGVuZCB0aGUgdGVsbmV0IG9wdGlvbnMgbm93ICovCiAJCWlmIChzby0+ c29fbSAhPSAwICYmIGRvX3B0eSA9PSAxKSAgewotCQkJc2JhcHBlbmQoc28sIHNvLT5zb19tKTsK KwkJCXNiYXBwZW5kKHMsIHNvLCBzby0+c29fbSk7CiAJCQlzby0+c29fbSA9IDA7CiAJCX0KIApA QCAtNjAzLDYgKzU5Myw3IEBACiB9CiAjZW5kaWYKIAorI2lmIDAKIGludCAoKmxwcmludF9wcmlu dCkgX1AoKHZvaWQgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KSk7CiBjaGFyICpscHJpbnRfcHRy LCAqbHByaW50X3B0cjIsICoqbHByaW50X2FyZzsKIApAQCAtNzU0LDYgKzc0NSw3IEBACiAKIAls cHJpbnQoIkFkZGluZyBlbXVsYXRpb24gZm9yICVzIHRvIHBvcnQgJWQvJWRcclxuIiwgYnVmZjEs IGVtdXAtPmxwb3J0LCBlbXVwLT5mcG9ydCk7CiB9CisjZW5kaWYKIAogI2lmZGVmIEJBRF9TUFJJ TlRGCiAKQEAgLTkwOCwxMCArOTAwLDEwIEBACiAJCS8qIFNldCB0aGUgRElTUExBWSAqLwogICAg ICAgICAgICBpZiAoeF9wb3J0ID49IDApIHsKICNpZmRlZiBIQVZFX1NFVEVOVgotICAgICAgICAg ICAgIHNwcmludGYoYnVmZiwgIiVzOiVkLiVkIiwgaW5ldF9udG9hKG91cl9hZGRyKSwgeF9wb3J0 LCB4X3NjcmVlbik7CisgICAgICAgICAgICAgc3ByaW50ZihidWZmLCAiJXM6JWQuJWQiLCBpbmV0 X250b2Eocy0+b3VyX2FkZHIpLCB4X3BvcnQsIHhfc2NyZWVuKTsKICAgICAgICAgICAgICBzZXRl bnYoIkRJU1BMQVkiLCBidWZmLCAxKTsKICNlbHNlCi0gICAgICAgICAgICAgc3ByaW50ZihidWZm LCAiRElTUExBWT0lczolZC4lZCIsIGluZXRfbnRvYShvdXJfYWRkciksIHhfcG9ydCwgeF9zY3Jl ZW4pOworICAgICAgICAgICAgIHNwcmludGYoYnVmZiwgIkRJU1BMQVk9JXM6JWQuJWQiLCBpbmV0 X250b2Eocy0+b3VyX2FkZHIpLCB4X3BvcnQsIHhfc2NyZWVuKTsKICAgICAgICAgICAgICBwdXRl bnYoYnVmZik7CiAjZW5kaWYKICAgICAgICAgICAgfQpJbmRleDogcWVtdS9zbGlycC9taXNjLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL21pc2MuaAkyMDA3LTEwLTIxIDE4OjQ3OjA4 LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC9taXNjLmgJMjAwNy0xMC0yMSAxODo1Njoy My4wMDAwMDAwMDAgKzAwMDAKQEAgLTEyLDE3ICsxMiwxMCBAQAogCWludCBleF9wdHk7CQkJLyog RG8gd2Ugd2FudCBhIHB0eT8gKi8KIAlpbnQgZXhfYWRkcjsJCQkvKiBUaGUgbGFzdCBieXRlIG9m IHRoZSBhZGRyZXNzICovCiAJaW50IGV4X2Zwb3J0OyAgICAgICAgICAgICAgICAgICAvKiBQb3J0 IHRvIHRlbG5ldCB0byAqLwotCWNoYXIgKmV4X2V4ZWM7ICAgICAgICAgICAgICAgICAgLyogQ29t bWFuZCBsaW5lIG9mIHdoYXQgdG8gZXhlYyAqLworCWNvbnN0IGNoYXIgKmV4X2V4ZWM7ICAgICAg ICAgICAgLyogQ29tbWFuZCBsaW5lIG9mIHdoYXQgdG8gZXhlYyAqLwogCXN0cnVjdCBleF9saXN0 ICpleF9uZXh0OwogfTsKIAotZXh0ZXJuIHN0cnVjdCBleF9saXN0ICpleGVjX2xpc3Q7Ci1leHRl cm4gdV9pbnQgY3VydGltZSwgdGltZV9mYXN0dGltbywgbGFzdF9zbG93dGltbywgZGV0YWNoX3Rp bWUsIGRldGFjaF93YWl0OwotCi1leHRlcm4gaW50ICgqbHByaW50X3ByaW50KSBfUCgodm9pZCAq LCBjb25zdCBjaGFyICosIHZhX2xpc3QpKTsKLWV4dGVybiBjaGFyICpscHJpbnRfcHRyLCAqbHBy aW50X3B0cjIsICoqbHByaW50X2FyZzsKLWV4dGVybiBzdHJ1Y3Qgc2J1ZiAqbHByaW50X3NiOwot CiAjaWZuZGVmIEhBVkVfU1RSRFVQCiBjaGFyICpzdHJkdXAgX1AoKGNvbnN0IGNoYXIgKikpOwog I2VuZGlmCkBAIC02OSwxMiArNjIsMTIgQEAKIAogaW50IHNob3dfeCBfUCgoY2hhciAqLCBzdHJ1 Y3Qgc29ja2V0ICopKTsKIHZvaWQgcmVkaXJfeCBfUCgodV9pbnQzMl90LCBpbnQsIGludCwgaW50 KSk7Ci12b2lkIGdldG91cmFkZHIgX1AoKHZvaWQpKTsKLWlubGluZSAgdm9pZCBzbGlycF9pbnNx dWUgIF9QKCh2b2lkICosIHZvaWQgKikpOwotaW5saW5lICB2b2lkIHNsaXJwX3JlbXF1ZSAgX1Ao KHZvaWQgKikpOwordm9pZCBnZXRvdXJhZGRyKHNsaXJwX3N0YXRlX3QgKnMpOwordm9pZCBzbGly cF9pbnNxdWUoc2xpcnBfc3RhdGVfdCAqcywgdm9pZCAqYSwgdm9pZCAqYik7Cit2b2lkIHNsaXJw X3JlbXF1ZShzbGlycF9zdGF0ZV90ICpzLCB2b2lkICphKTsKIGludCBhZGRfZXhlYyBfUCgoc3Ry dWN0IGV4X2xpc3QgKiosIGludCwgY2hhciAqLCBpbnQsIGludCkpOwogaW50IHNsaXJwX29wZW5w dHkgX1AoKGludCAqLCBpbnQgKikpOwotaW50IGZvcmtfZXhlYyBfUCgoc3RydWN0IHNvY2tldCAq LCBjaGFyICosIGludCkpOworaW50IGZvcmtfZXhlYyhzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qg c29ja2V0ICpzbywgY29uc3QgY2hhciAqZXgsIGludCBkb19wdHkpOwogdm9pZCBzbm9vemVfaHVw IF9QKChpbnQpKTsKIHZvaWQgc25vb3plIF9QKCh2b2lkKSk7CiB2b2lkIHJlbGF5IF9QKChpbnQp KTsKSW5kZXg6IHFlbXUvc2xpcnAvc2J1Zi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGly cC9zYnVmLmMJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xp cnAvc2J1Zi5jCTIwMDctMTAtMjEgMTg6NDc6MTEuMDAwMDAwMDAwICswMDAwCkBAIC03LDYgKzcs OCBAQAogCiAjaW5jbHVkZSA8c2xpcnAuaD4KIAorc3RhdGljIHZvaWQgc2JhcHBlbmRzYihzdHJ1 Y3Qgc2J1ZiAqc2IsIHN0cnVjdCBtYnVmICptKTsKKwogLyogRG9uZSBhcyBhIG1hY3JvIGluIHNv Y2tldC5oICovCiAvKiBpbnQKICAqIHNic3BhY2Uoc3RydWN0IHNvY2tidWZmICpzYikKQEAgLTcy LDkgKzc0LDcgQEAKICAqICh0aGUgc29ja2V0IGlzIG5vbi1ibG9ja2luZywgc28gd2Ugd29uJ3Qg aGFuZykKICAqLwogdm9pZAotc2JhcHBlbmQoc28sIG0pCi0Jc3RydWN0IHNvY2tldCAqc287Ci0J c3RydWN0IG1idWYgKm07CitzYmFwcGVuZChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0 ICpzbywgc3RydWN0IG1idWYgKm0pCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTg1LDcgKzg1LDcg QEAKIAogCS8qIFNob3VsZG4ndCBoYXBwZW4sIGJ1dC4uLiAgZS5nLiBmb3JlaWduIGhvc3QgY2xv c2VzIGNvbm5lY3Rpb24gKi8KIAlpZiAobS0+bV9sZW4gPD0gMCkgewotCQltX2ZyZWUobSk7CisJ CW1fZnJlZShzLCBtKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTYsNyArOTYsNyBAQAogCSAqLwog CWlmIChzby0+c29fdXJnYykgewogCQlzYmFwcGVuZHNiKCZzby0+c29fcmN2LCBtKTsKLQkJbV9m cmVlKG0pOworCQltX2ZyZWUocywgbSk7CiAJCXNvc2VuZG9vYihzbyk7CiAJCXJldHVybjsKIAl9 CkBAIC0xMjYsMTcgKzEyNiwxNSBAQAogCQlzYmFwcGVuZHNiKCZzby0+c29fcmN2LCBtKTsKIAl9 IC8qIGVsc2UgKi8KIAkvKiBXaGF0ZXZlciBoYXBwZW5lZCwgd2UgZnJlZSB0aGUgbWJ1ZiAqLwot CW1fZnJlZShtKTsKKwltX2ZyZWUocywgbSk7CiB9CiAKIC8qCiAgKiBDb3B5IHRoZSBkYXRhIGZy b20gbSBpbnRvIHNiCiAgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIG1ha2Ugc3VyZSB0 aGVyZSdzIGVub3VnaCByb29tCiAgKi8KLXZvaWQKLXNiYXBwZW5kc2Ioc2IsIG0pCi0JIHN0cnVj dCBzYnVmICpzYjsKLQkgc3RydWN0IG1idWYgKm07CitzdGF0aWMgdm9pZAorc2JhcHBlbmRzYihz dHJ1Y3Qgc2J1ZiAqc2IsIHN0cnVjdCBtYnVmICptKQogewogCWludCBsZW4sIG4sICBubjsKIApJ bmRleDogcWVtdS9zbGlycC9zYnVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL3Ni dWYuaAkyMDA3LTEwLTIxIDE4OjQ3OjA4LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC9z YnVmLmgJMjAwNy0xMC0yMSAxODo0NzoxMS4wMDAwMDAwMDAgKzAwMDAKQEAgLTI0LDggKzI0LDcg QEAKIHZvaWQgc2JmcmVlIF9QKChzdHJ1Y3Qgc2J1ZiAqKSk7CiB2b2lkIHNiZHJvcCBfUCgoc3Ry dWN0IHNidWYgKiwgaW50KSk7CiB2b2lkIHNicmVzZXJ2ZSBfUCgoc3RydWN0IHNidWYgKiwgaW50 KSk7Ci12b2lkIHNiYXBwZW5kIF9QKChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtYnVmICopKTsK LXZvaWQgc2JhcHBlbmRzYiBfUCgoc3RydWN0IHNidWYgKiwgc3RydWN0IG1idWYgKikpOwordm9p ZCBzYmFwcGVuZChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1i dWYgKm0pOwogdm9pZCBzYmNvcHkgX1AoKHN0cnVjdCBzYnVmICosIGludCwgaW50LCBjaGFyICop KTsKIAogI2VuZGlmCkluZGV4OiBxZW11L3NsaXJwL3NsaXJwLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVt dS5vcmlnL3NsaXJwL3NsaXJwLmMJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAK KysrIHFlbXUvc2xpcnAvc2xpcnAuYwkyMDA3LTEwLTIyIDE5OjMxOjMyLjAwMDAwMDAwMCArMDAw MApAQCAtMSwzOCArMSwxNCBAQAogI2luY2x1ZGUgInNsaXJwLmgiCiAKLS8qIGhvc3QgYWRkcmVz cyAqLwotc3RydWN0IGluX2FkZHIgb3VyX2FkZHI7Ci0vKiBob3N0IGRucyBhZGRyZXNzICovCi1z dHJ1Y3QgaW5fYWRkciBkbnNfYWRkcjsKLS8qIGhvc3QgbG9vcGJhY2sgYWRkcmVzcyAqLwotc3Ry dWN0IGluX2FkZHIgbG9vcGJhY2tfYWRkcjsKLQotLyogYWRkcmVzcyBmb3Igc2xpcnAgdmlydHVh bCBhZGRyZXNzZXMgKi8KLXN0cnVjdCBpbl9hZGRyIHNwZWNpYWxfYWRkcjsKLS8qIHZpcnR1YWwg YWRkcmVzcyBhbGlhcyBmb3IgaG9zdCAqLwotc3RydWN0IGluX2FkZHIgYWxpYXNfYWRkcjsKLQot Y29uc3QgdWludDhfdCBzcGVjaWFsX2V0aGFkZHJbNl0gPSB7CitzdGF0aWMgY29uc3QgdWludDhf dCBzcGVjaWFsX2V0aGFkZHJbNl0gPSB7CiAgICAgMHg1MiwgMHg1NCwgMHgwMCwgMHgxMiwgMHgz NSwgMHgwMAogfTsKIAotdWludDhfdCBjbGllbnRfZXRoYWRkcls2XTsKLQotaW50IGRvX3Nsb3d0 aW1vOwotaW50IGxpbmtfdXA7Ci1zdHJ1Y3QgdGltZXZhbCB0dDsKLUZJTEUgKmxmZDsKLXN0cnVj dCBleF9saXN0ICpleGVjX2xpc3Q7Ci0KLS8qIFhYWDogc3VwcHJlc3MgdGhvc2Ugc2VsZWN0IGds b2JhbHMgKi8KLWZkX3NldCAqZ2xvYmFsX3JlYWRmZHMsICpnbG9iYWxfd3JpdGVmZHMsICpnbG9i YWxfeGZkczsKLQotY2hhciBzbGlycF9ob3N0bmFtZVszM107Ci0KICNpZmRlZiBfV0lOMzIKIAot c3RhdGljIGludCBnZXRfZG5zX2FkZHIoc3RydWN0IGluX2FkZHIgKnBkbnNfYWRkcikKK3N0YXRp YyBpbnQgZ2V0X2Ruc19hZGRyKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBpbl9hZGRyICpwZG5z X2FkZHIpCiB7CisgICAgaW50IHJjID0gMDsKICAgICBGSVhFRF9JTkZPICpGaXhlZEluZm89TlVM TDsKICAgICBVTE9ORyAgICBCdWZMZW47CiAgICAgRFdPUkQgICAgcmV0OwpAQCAtODEsNyArNTcs NyBAQAogCiAjZWxzZQogCi1zdGF0aWMgaW50IGdldF9kbnNfYWRkcihzdHJ1Y3QgaW5fYWRkciAq cGRuc19hZGRyKQorc3RhdGljIGludCBnZXRfZG5zX2FkZHIoc2xpcnBfc3RhdGVfdCAqcywgc3Ry dWN0IGluX2FkZHIgKnBkbnNfYWRkcikKIHsKICAgICBjaGFyIGJ1ZmZbNTEyXTsKICAgICBjaGFy IGJ1ZmYyWzI1Nl07CkBAIC05MywyMyArNjksMjUgQEAKICAgICBpZiAoIWYpCiAgICAgICAgIHJl dHVybiAtMTsKIAotICAgIGxwcmludCgiSVAgYWRkcmVzcyBvZiB5b3VyIEROUyhzKTogIik7Cisg ICAgLy9scHJpbnQoIklQIGFkZHJlc3Mgb2YgeW91ciBETlMocyk6ICIpOwogICAgIHdoaWxlIChm Z2V0cyhidWZmLCA1MTIsIGYpICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHNzY2FuZihidWZmLCAi bmFtZXNlcnZlciUqWyBcdF0lMjU2cyIsIGJ1ZmYyKSA9PSAxKSB7CiAgICAgICAgICAgICBpZiAo IWluZXRfYXRvbihidWZmMiwgJnRtcF9hZGRyKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgICAgIGlmICh0bXBfYWRkci5zX2FkZHIgPT0gbG9vcGJhY2tfYWRkci5zX2FkZHIp Ci0gICAgICAgICAgICAgICAgdG1wX2FkZHIgPSBvdXJfYWRkcjsKKyAgICAgICAgICAgIGlmICh0 bXBfYWRkci5zX2FkZHIgPT0gcy0+bG9vcGJhY2tfYWRkci5zX2FkZHIpCisgICAgICAgICAgICAg ICAgdG1wX2FkZHIgPSBzLT5vdXJfYWRkcjsKICAgICAgICAgICAgIC8qIElmIGl0J3MgdGhlIGZp cnN0IG9uZSwgc2V0IGl0IHRvIGRuc19hZGRyICovCiAgICAgICAgICAgICBpZiAoIWZvdW5kKQog ICAgICAgICAgICAgICAgICpwZG5zX2FkZHIgPSB0bXBfYWRkcjsKKyNpZiAwCiAgICAgICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICAgbHByaW50KCIsICIpOworI2VuZGlmCiAgICAgICAgICAg ICBpZiAoKytmb3VuZCA+IDMpIHsKLSAgICAgICAgICAgICAgICBscHJpbnQoIihtb3JlKSIpOwor ICAgICAgICAgICAgICAgIC8vbHByaW50KCIobW9yZSkiKTsKICAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGxwcmludCgiJXMiLCBpbmV0 X250b2EodG1wX2FkZHIpKTsKKyAgICAgICAgICAgIH0gLy8gZWxzZQorICAgICAgICAgICAgICAg IC8vbHByaW50KCIlcyIsIGluZXRfbnRvYSh0bXBfYWRkcikpOwogICAgICAgICB9CiAgICAgfQog ICAgIGZjbG9zZShmKTsKQEAgLTEyMSwxNSArOTksMjQgQEAKICNlbmRpZgogCiAjaWZkZWYgX1dJ TjMyCi12b2lkIHNsaXJwX2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIHNsaXJwX2NsZWFudXAo dm9pZCkKIHsKICAgICBXU0FDbGVhbnVwKCk7CiB9CiAjZW5kaWYKIAotdm9pZCBzbGlycF9pbml0 KHZvaWQpCitzbGlycF9zdGF0ZV90ICpzbGlycF9pbml0KHZvaWQgKnVzZXIsIGNvbnN0IGNoYXIg KnNsaXJwX2hvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0 ZnRwX3ByZWZpeCwgY29uc3QgY2hhciAqbmV0d29yaykKIHsKLSAgICAvLyAgICBkZWJ1Z19pbml0 KCIvdG1wL3NsaXJwLmxvZyIsIERFQlVHX0RFRkFVTFQpOworICAgIHNsaXJwX3N0YXRlX3QgKnM7 CisKKyAgICBzID0gbWFsbG9jKHNpemVvZihzbGlycF9zdGF0ZV90KSk7CisgICAgaWYgKCFzKQor ICAgICAgICByZXR1cm4gczsKKyAgICBtZW1zZXQocywgMCwgc2l6ZW9mKHNsaXJwX3N0YXRlX3Qp KTsKKyAgICBzLT51c2VyID0gdXNlcjsKKyAgICBzLT5zbGlycF9ob3N0bmFtZSA9IHNsaXJwX2hv c3RuYW1lOworICAgIHMtPnRmdHBfcHJlZml4ID0gdGZ0cF9wcmVmaXg7CiAKICNpZmRlZiBfV0lO MzIKICAgICB7CkBAIC0xMzksMjcgKzEyNiw3MyBAQAogICAgIH0KICNlbmRpZgogCi0gICAgbGlu a191cCA9IDE7CisgICAgcy0+bGlua191cCA9IDE7CiAKLSAgICBpZl9pbml0KCk7Ci0gICAgaXBf aW5pdCgpOworICAgIG1faW5pdChzKTsKIAotICAgIC8qIEluaXRpYWxpc2UgbWJ1ZnMgKmFmdGVy KiBzZXR0aW5nIHRoZSBNVFUgKi8KLSAgICBtX2luaXQoKTsKKyAgICBpZl9pbml0KHMpOworICAg IGlwX2luaXQocyk7CiAKICAgICAvKiBzZXQgZGVmYXVsdCBhZGRyZXNzZXMgKi8KLSAgICBpbmV0 X2F0b24oIjEyNy4wLjAuMSIsICZsb29wYmFja19hZGRyKTsKKyAgICBpbmV0X2F0b24oIjEyNy4w LjAuMSIsICZzLT5sb29wYmFja19hZGRyKTsKKyAgICBpbmV0X2F0b24oIjEyNy4wLjAuMSIsICZz LT5kbnNfYWRkcik7CiAKLSAgICBpZiAoZ2V0X2Ruc19hZGRyKCZkbnNfYWRkcikgPCAwKSB7Ci0g ICAgICAgIGRuc19hZGRyID0gbG9vcGJhY2tfYWRkcjsKKyAgICBpZiAoZ2V0X2Ruc19hZGRyKHMs ICZzLT5kbnNfYWRkcikgPCAwKSB7CiAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIldhcm5pbmc6 IE5vIEROUyBzZXJ2ZXJzIGZvdW5kXG4iKTsKICAgICB9CiAKLSAgICBpbmV0X2F0b24oQ1RMX1NQ RUNJQUwsICZzcGVjaWFsX2FkZHIpOwotICAgIGFsaWFzX2FkZHIuc19hZGRyID0gc3BlY2lhbF9h ZGRyLnNfYWRkciB8IGh0b25sKENUTF9BTElBUyk7Ci0gICAgZ2V0b3VyYWRkcigpOworICAgIGlu ZXRfYXRvbihuZXR3b3JrLCAmcy0+c3BlY2lhbF9hZGRyKTsKKyAgICBzLT5hbGlhc19hZGRyLnNf YWRkciA9IHMtPnNwZWNpYWxfYWRkci5zX2FkZHIgfCBodG9ubChDVExfQUxJQVMpOworICAgIGdl dG91cmFkZHIocyk7CisKKyAgICByZXR1cm4gczsKK30KKworLyoqCisgKiBNYXJrcyB0aGUgbGlu ayBhcyB1cCwgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGVzdGFibGlzaCBuZXcgY29ubmVjdGlvbnMu CisgKi8KK3ZvaWQgc2xpcnBfbGlua191cChzbGlycF9zdGF0ZV90ICpzKQoreworICAgIHMtPmxp bmtfdXAgPSAxOwogfQogCisvKioKKyAqIE1hcmtzIHRoZSBsaW5rIGFzIGRvd24gYW5kIGNsZWFu cyB1cCB0aGUgY3VycmVudCBjb25uZWN0aW9ucy4KKyAqLwordm9pZCBzbGlycF9saW5rX2Rvd24o c2xpcnBfc3RhdGVfdCAqcykKK3sKKyAgICBzdHJ1Y3Qgc29ja2V0ICpzbzsKKworICAgIHdoaWxl ICgoc28gPSBzLT50Y2Iuc29fbmV4dCkgIT0gJnMtPnRjYikKKyAgICB7CisgICAgICAgIGlmIChz by0+c29fc3RhdGUgJiBTU19OT0ZEUkVGIHx8IHNvLT5zID09IC0xKQorICAgICAgICAgICAgc29m cmVlKHMsIHNvKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGNwX2Ryb3Aocywgc290b3Rj cGNiKHNvKSwgMCk7CisgICAgfQorCisgICAgd2hpbGUgKChzbyA9IHMtPnVkYi5zb19uZXh0KSAh PSAmcy0+dWRiKQorICAgICAgICB1ZHBfZGV0YWNoKHMsIHNvKTsKKworICAgIHMtPmxpbmtfdXAg PSAwOworfQorCisvKioKKyAqIFRlcm1pbmF0ZXMgdGhlIHNsaXJwIGNvbXBvbmVudC4KKyAqLwor dm9pZCBzbGlycF90ZXJtKHNsaXJwX3N0YXRlX3QgKnMpCit7CisgICAgc2xpcnBfbGlua19kb3du KHMpOworI2lmZGVmIFdJTjMyCisgICAgV1NBQ2xlYW51cCgpOworI2VuZGlmCisjaWZkZWYgTE9H X0VOQUJMRUQKKyAgICBzbGlycF9zdGF0cyhzKTsKKyNlbmRpZgorICAgIGZyZWUocyk7Cit9CisK KwogI2RlZmluZSBDT05OX0NBTkZTRU5EKHNvKSAoKChzbyktPnNvX3N0YXRlICYgKFNTX0ZDQU5U U0VORE1PUkV8U1NfSVNGQ09OTkVDVEVEKSkgPT0gU1NfSVNGQ09OTkVDVEVEKQogI2RlZmluZSBD T05OX0NBTkZSQ1Yoc28pICgoKHNvKS0+c29fc3RhdGUgJiAoU1NfRkNBTlRSQ1ZNT1JFfFNTX0lT RkNPTk5FQ1RFRCkpID09IFNTX0lTRkNPTk5FQ1RFRCkKICNkZWZpbmUgVVBEX05GRFMoeCkgaWYg KG5mZHMgPCAoeCkpIG5mZHMgPSAoeCkKQEAgLTE2OCwyOCArMjAxLDI4IEBACiAgKiBjdXJ0aW1l IGtlcHQgdG8gYW4gYWNjdXJhY3kgb2YgMW1zCiAgKi8KICNpZmRlZiBfV0lOMzIKLXN0YXRpYyB2 b2lkIHVwZHRpbWUodm9pZCkKK3N0YXRpYyB2b2lkIHVwZHRpbWUoc2xpcnBfc3RhdGVfdCAqcykK IHsKICAgICBzdHJ1Y3QgX3RpbWViIHRiOwogCiAgICAgX2Z0aW1lKCZ0Yik7Ci0gICAgY3VydGlt ZSA9ICh1X2ludCl0Yi50aW1lICogKHVfaW50KTEwMDA7Ci0gICAgY3VydGltZSArPSAodV9pbnQp dGIubWlsbGl0bTsKKyAgICBzLT5jdXJ0aW1lID0gKHVfaW50KXRiLnRpbWUgKiAodV9pbnQpMTAw MDsKKyAgICBzLT5jdXJ0aW1lICs9ICh1X2ludCl0Yi5taWxsaXRtOwogfQogI2Vsc2UKLXN0YXRp YyB2b2lkIHVwZHRpbWUodm9pZCkKK3N0YXRpYyB2b2lkIHVwZHRpbWUoc2xpcnBfc3RhdGVfdCAq cykKIHsKLQlnZXR0aW1lb2ZkYXkoJnR0LCAwKTsKKwlnZXR0aW1lb2ZkYXkoJnMtPnR0LCAwKTsK IAotCWN1cnRpbWUgPSAodV9pbnQpdHQudHZfc2VjICogKHVfaW50KTEwMDA7Ci0JY3VydGltZSAr PSAodV9pbnQpdHQudHZfdXNlYyAvICh1X2ludCkxMDAwOworCXMtPmN1cnRpbWUgPSAodV9pbnQp cy0+dHQudHZfc2VjICogKHVfaW50KTEwMDA7CisJcy0+Y3VydGltZSArPSAodV9pbnQpcy0+dHQu dHZfdXNlYyAvICh1X2ludCkxMDAwOwogCi0JaWYgKCh0dC50dl91c2VjICUgMTAwMCkgPj0gNTAw KQotCSAgIGN1cnRpbWUrKzsKKwlpZiAoKHMtPnR0LnR2X3VzZWMgJSAxMDAwKSA+PSA1MDApCisJ ICAgcy0+Y3VydGltZSsrOwogfQogI2VuZGlmCiAKLXZvaWQgc2xpcnBfc2VsZWN0X2ZpbGwoaW50 ICpwbmZkcywKK3ZvaWQgc2xpcnBfc2VsZWN0X2ZpbGwoc2xpcnBfc3RhdGVfdCAqcywgaW50ICpw bmZkcywKICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndy aXRlZmRzLCBmZF9zZXQgKnhmZHMpCiB7CiAgICAgc3RydWN0IHNvY2tldCAqc28sICpzb19uZXh0 OwpAQCAtMTk4LDMxICsyMzEsMzEgQEAKICAgICBpbnQgdG1wX3RpbWU7CiAKICAgICAvKiBmYWls IHNhZmUgKi8KLSAgICBnbG9iYWxfcmVhZGZkcyA9IE5VTEw7Ci0gICAgZ2xvYmFsX3dyaXRlZmRz ID0gTlVMTDsKLSAgICBnbG9iYWxfeGZkcyA9IE5VTEw7CisgICAgcy0+cmVhZGZkcyA9IE5VTEw7 CisgICAgcy0+d3JpdGVmZHMgPSBOVUxMOworICAgIHMtPnhmZHMgPSBOVUxMOwogCiAgICAgbmZk cyA9ICpwbmZkczsKIAkvKgogCSAqIEZpcnN0LCBUQ1Agc29ja2V0cwogCSAqLwotCWRvX3Nsb3d0 aW1vID0gMDsKLQlpZiAobGlua191cCkgeworCXMtPmRvX3Nsb3d0aW1vID0gMDsKKwlpZiAocy0+ bGlua191cCkgewogCQkvKgogCQkgKiAqX3Nsb3d0aW1vIG5lZWRzIGNhbGxpbmcgaWYgdGhlcmUg YXJlIElQIGZyYWdtZW50cwogCQkgKiBpbiB0aGUgZnJhZ21lbnQgcXVldWUsIG9yIHRoZXJlIGFy ZSBUQ1AgY29ubmVjdGlvbnMgYWN0aXZlCiAJCSAqLwotCQlkb19zbG93dGltbyA9ICgodGNiLnNv X25leHQgIT0gJnRjYikgfHwKLQkJCSAgICAgICAoKHN0cnVjdCBpcGFzZnJhZyAqKSZpcHEgIT0g KHN0cnVjdCBpcGFzZnJhZyAqKWlwcS5uZXh0KSk7CisJCXMtPmRvX3Nsb3d0aW1vID0gKChzLT50 Y2Iuc29fbmV4dCAhPSAmcy0+dGNiKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgoc3RydWN0IGlwYXNmcmFnICopJnMtPmlwcSAhPSAoc3RydWN0IGlwYXNmcmFnICopaXBx X2dldF9uZXh0KHMsICZzLT5pcHEpKSk7CiAKLQkJZm9yIChzbyA9IHRjYi5zb19uZXh0OyBzbyAh PSAmdGNiOyBzbyA9IHNvX25leHQpIHsKKwkJZm9yIChzbyA9IHMtPnRjYi5zb19uZXh0OyBzbyAh PSAmcy0+dGNiOyBzbyA9IHNvX25leHQpIHsKIAkJCXNvX25leHQgPSBzby0+c29fbmV4dDsKIAog CQkJLyoKIAkJCSAqIFNlZSBpZiB3ZSBuZWVkIGEgdGNwX2Zhc3R0aW1vCiAJCQkgKi8KLQkJCWlm ICh0aW1lX2Zhc3R0aW1vID09IDAgJiYgc28tPnNvX3RjcGNiLT50X2ZsYWdzICYgVEZfREVMQUNL KQotCQkJICAgdGltZV9mYXN0dGltbyA9IGN1cnRpbWU7IC8qIEZsYWcgd2hlbiB3ZSB3YW50IGEg ZmFzdHRpbW8gKi8KKwkJCWlmIChzLT50aW1lX2Zhc3R0aW1vID09IDAgJiYgc28tPnNvX3RjcGNi LT50X2ZsYWdzICYgVEZfREVMQUNLKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnRp bWVfZmFzdHRpbW8gPSBzLT5jdXJ0aW1lOyAvKiBGbGFnIHdoZW4gd2Ugd2FudCBhIGZhc3R0aW1v ICovCiAKIAkJCS8qCiAJCQkgKiBOT0ZEUkVGIGNhbiBpbmNsdWRlIHN0aWxsIGNvbm5lY3Rpbmcg dG8gbG9jYWwtaG9zdCwKQEAgLTI3MiwxOCArMzA1LDE4IEBACiAJCS8qCiAJCSAqIFVEUCBzb2Nr ZXRzCiAJCSAqLwotCQlmb3IgKHNvID0gdWRiLnNvX25leHQ7IHNvICE9ICZ1ZGI7IHNvID0gc29f bmV4dCkgeworCQlmb3IgKHNvID0gcy0+dWRiLnNvX25leHQ7IHNvICE9ICZzLT51ZGI7IHNvID0g c29fbmV4dCkgewogCQkJc29fbmV4dCA9IHNvLT5zb19uZXh0OwogCiAJCQkvKgogCQkJICogU2Vl IGlmIGl0J3MgdGltZWQgb3V0CiAJCQkgKi8KIAkJCWlmIChzby0+c29fZXhwaXJlKSB7Ci0JCQkJ aWYgKHNvLT5zb19leHBpcmUgPD0gY3VydGltZSkgewotCQkJCQl1ZHBfZGV0YWNoKHNvKTsKKwkJ CQlpZiAoc28tPnNvX2V4cGlyZSA8PSBzLT5jdXJ0aW1lKSB7CisJCQkJCXVkcF9kZXRhY2gocywg c28pOwogCQkJCQljb250aW51ZTsKIAkJCQl9IGVsc2UKLQkJCQkJZG9fc2xvd3RpbW8gPSAxOyAv KiBMZXQgc29ja2V0IGV4cGlyZSAqLworCQkJCQlzLT5kb19zbG93dGltbyA9IDE7IC8qIExldCBz b2NrZXQgZXhwaXJlICovCiAJCQl9CiAKIAkJCS8qCkBAIC0zMTcsMTcgKzM1MCwxNyBAQAogCSAq IHNsb3cgdGltZW91dC4gSWYgYSBmYXN0IHRpbWVvdXQgaXMgbmVlZGVkLCBzZXQgdGltZW91dCB3 aXRoaW4KIAkgKiAyMDBtcyBvZiB3aGVuIGl0IHdhcyByZXF1ZXN0ZWQuCiAJICovCi0JaWYgKGRv X3Nsb3d0aW1vKSB7CisJaWYgKHMtPmRvX3Nsb3d0aW1vKSB7CiAJCS8qIFhYWCArIDEwMDAwIGJl Y2F1c2Ugc29tZSBzZWxlY3QoKSdzIGFyZW4ndCB0aGF0IGFjY3VyYXRlICovCi0JCXRpbWVvdXQu dHZfdXNlYyA9ICgoNTAwIC0gKGN1cnRpbWUgLSBsYXN0X3Nsb3d0aW1vKSkgKiAxMDAwKSArIDEw MDAwOworCQl0aW1lb3V0LnR2X3VzZWMgPSAoKDUwMCAtIChzLT5jdXJ0aW1lIC0gcy0+bGFzdF9z bG93dGltbykpICogMTAwMCkgKyAxMDAwMDsKIAkJaWYgKHRpbWVvdXQudHZfdXNlYyA8IDApCiAJ CSAgIHRpbWVvdXQudHZfdXNlYyA9IDA7CiAJCWVsc2UgaWYgKHRpbWVvdXQudHZfdXNlYyA+IDUx MDAwMCkKIAkJICAgdGltZW91dC50dl91c2VjID0gNTEwMDAwOwogCiAJCS8qIENhbiBvbmx5IGZh c3R0aW1vIGlmIHdlIGFsc28gc2xvd3RpbW8gKi8KLQkJaWYgKHRpbWVfZmFzdHRpbW8pIHsKLQkJ CXRtcF90aW1lID0gKDIwMCAtIChjdXJ0aW1lIC0gdGltZV9mYXN0dGltbykpICogMTAwMDsKKwkJ aWYgKHMtPnRpbWVfZmFzdHRpbW8pIHsKKwkJCXRtcF90aW1lID0gKDIwMCAtIChzLT5jdXJ0aW1l IC0gcy0+dGltZV9mYXN0dGltbykpICogMTAwMDsKIAkJCWlmICh0bXBfdGltZSA8IDApCiAJCQkg ICB0bXBfdGltZSA9IDA7CiAKQEAgLTMzOSw0MSArMzcyLDQxIEBACiAgICAgICAgICpwbmZkcyA9 IG5mZHM7CiB9CiAKLXZvaWQgc2xpcnBfc2VsZWN0X3BvbGwoZmRfc2V0ICpyZWFkZmRzLCBmZF9z ZXQgKndyaXRlZmRzLCBmZF9zZXQgKnhmZHMpCit2b2lkIHNsaXJwX3NlbGVjdF9wb2xsKHNsaXJw X3N0YXRlX3QgKnMsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywgZmRfc2V0ICp4 ZmRzKQogewogICAgIHN0cnVjdCBzb2NrZXQgKnNvLCAqc29fbmV4dDsKICAgICBpbnQgcmV0Owog Ci0gICAgZ2xvYmFsX3JlYWRmZHMgPSByZWFkZmRzOwotICAgIGdsb2JhbF93cml0ZWZkcyA9IHdy aXRlZmRzOwotICAgIGdsb2JhbF94ZmRzID0geGZkczsKKyAgICBzLT5yZWFkZmRzID0gcmVhZGZk czsKKyAgICBzLT53cml0ZWZkcyA9IHdyaXRlZmRzOworICAgIHMtPnhmZHMgPSB4ZmRzOwogCiAJ LyogVXBkYXRlIHRpbWUgKi8KLQl1cGR0aW1lKCk7CisJdXBkdGltZShzKTsKIAogCS8qCiAJICog U2VlIGlmIGFueXRoaW5nIGhhcyB0aW1lZCBvdXQKIAkgKi8KLQlpZiAobGlua191cCkgewotCQlp ZiAodGltZV9mYXN0dGltbyAmJiAoKGN1cnRpbWUgLSB0aW1lX2Zhc3R0aW1vKSA+PSAyKSkgewot CQkJdGNwX2Zhc3R0aW1vKCk7Ci0JCQl0aW1lX2Zhc3R0aW1vID0gMDsKKwlpZiAocy0+bGlua191 cCkgeworCQlpZiAocy0+dGltZV9mYXN0dGltbyAmJiAoKHMtPmN1cnRpbWUgLSBzLT50aW1lX2Zh c3R0aW1vKSA+PSAyKSkgeworCQkJdGNwX2Zhc3R0aW1vKHMpOworCQkJcy0+dGltZV9mYXN0dGlt byA9IDA7CiAJCX0KLQkJaWYgKGRvX3Nsb3d0aW1vICYmICgoY3VydGltZSAtIGxhc3Rfc2xvd3Rp bW8pID49IDQ5OSkpIHsKLQkJCWlwX3Nsb3d0aW1vKCk7Ci0JCQl0Y3Bfc2xvd3RpbW8oKTsKLQkJ CWxhc3Rfc2xvd3RpbW8gPSBjdXJ0aW1lOworCQlpZiAocy0+ZG9fc2xvd3RpbW8gJiYgKChzLT5j dXJ0aW1lIC0gcy0+bGFzdF9zbG93dGltbykgPj0gNDk5KSkgeworCQkJaXBfc2xvd3RpbW8ocyk7 CisJCQl0Y3Bfc2xvd3RpbW8ocyk7CisJCQlzLT5sYXN0X3Nsb3d0aW1vID0gcy0+Y3VydGltZTsK IAkJfQogCX0KIAogCS8qCiAJICogQ2hlY2sgc29ja2V0cwogCSAqLwotCWlmIChsaW5rX3VwKSB7 CisJaWYgKHMtPmxpbmtfdXApIHsKIAkJLyoKIAkJICogQ2hlY2sgVENQIHNvY2tldHMKIAkJICov Ci0JCWZvciAoc28gPSB0Y2Iuc29fbmV4dDsgc28gIT0gJnRjYjsgc28gPSBzb19uZXh0KSB7CisJ CWZvciAoc28gPSBzLT50Y2Iuc29fbmV4dDsgc28gIT0gJnMtPnRjYjsgc28gPSBzb19uZXh0KSB7 CiAJCQlzb19uZXh0ID0gc28tPnNvX25leHQ7CiAKIAkJCS8qCkBAIC0zODksNyArNDIyLDcgQEAK IAkJCSAqIHRlc3QgZm9yIHJlYWRmZHMgYmVsb3cgaWYgdGhpcyBzdWNjZWVkcwogCQkJICovCiAJ CQlpZiAoRkRfSVNTRVQoc28tPnMsIHhmZHMpKQotCQkJICAgc29yZWN2b29iKHNvKTsKKwkJCSAg IHNvcmVjdm9vYihzLCBzbyk7CiAJCQkvKgogCQkJICogQ2hlY2sgc29ja2V0cyBmb3IgcmVhZGlu ZwogCQkJICovCkBAIC0zOTgsMTQgKzQzMSwxNCBAQAogCQkJCSAqIENoZWNrIGZvciBpbmNvbWlu ZyBjb25uZWN0aW9ucwogCQkJCSAqLwogCQkJCWlmIChzby0+c29fc3RhdGUgJiBTU19GQUNDRVBU Q09OTikgewotCQkJCQl0Y3BfY29ubmVjdChzbyk7CisJCQkJCXRjcF9jb25uZWN0KHMsIHNvKTsK IAkJCQkJY29udGludWU7CiAJCQkJfSAvKiBlbHNlICovCi0JCQkJcmV0ID0gc29yZWFkKHNvKTsK KwkJCQlyZXQgPSBzb3JlYWQocywgc28pOwogCiAJCQkJLyogT3V0cHV0IGl0IGlmIHdlIHJlYWQg c29tZXRoaW5nICovCiAJCQkJaWYgKHJldCA+IDApCi0JCQkJICAgdGNwX291dHB1dChzb3RvdGNw Y2Ioc28pKTsKKwkJCQkgICB0Y3Bfb3V0cHV0KHMsIHNvdG90Y3BjYihzbykpOwogCQkJfQogCiAJ CQkvKgpAQCAtNDM0LDEwICs0NjcsMTAgQEAKIAkJCSAgICAvKgogCQkJICAgICAqIENvbnRpbnVl IHRjcF9pbnB1dAogCQkJICAgICAqLwotCQkJICAgIHRjcF9pbnB1dCgoc3RydWN0IG1idWYgKilO VUxMLCBzaXplb2Yoc3RydWN0IGlwKSwgc28pOworCQkJICAgIHRjcF9pbnB1dChzLCAoc3RydWN0 IG1idWYgKilOVUxMLCBzaXplb2Yoc3RydWN0IGlwKSwgc28pOwogCQkJICAgIC8qIGNvbnRpbnVl OyAqLwogCQkJICB9IGVsc2UKLQkJCSAgICByZXQgPSBzb3dyaXRlKHNvKTsKKwkJCSAgICByZXQg PSBzb3dyaXRlKHMsIHNvKTsKIAkJCSAgLyoKIAkJCSAgICogWFhYWFggSWYgd2Ugd3JvdGUgc29t ZXRoaW5nIChhIGxvdCksIHRoZXJlCiAJCQkgICAqIGNvdWxkIGJlIGEgbmVlZCBmb3IgYSB3aW5k b3cgdXBkYXRlLgpAQCAtNDg3LDExICs1MjAsMTEgQEAKIAkJICogSW5jb21pbmcgcGFja2V0cyBh cmUgc2VudCBzdHJhaWdodCBhd2F5LCB0aGV5J3JlIG5vdCBidWZmZXJlZC4KIAkJICogSW5jb21p bmcgVURQIGRhdGEgaXNuJ3QgYnVmZmVyZWQgZWl0aGVyLgogCQkgKi8KLQkJZm9yIChzbyA9IHVk Yi5zb19uZXh0OyBzbyAhPSAmdWRiOyBzbyA9IHNvX25leHQpIHsKKwkJZm9yIChzbyA9IHMtPnVk Yi5zb19uZXh0OyBzbyAhPSAmcy0+dWRiOyBzbyA9IHNvX25leHQpIHsKIAkJCXNvX25leHQgPSBz by0+c29fbmV4dDsKIAogCQkJaWYgKHNvLT5zICE9IC0xICYmIEZEX0lTU0VUKHNvLT5zLCByZWFk ZmRzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcmVjdmZyb20oc28pOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNvcmVjdmZyb20ocywgc28pOwogICAgICAgICAgICAg ICAgICAgICAgICAgfQogCQl9CiAJfQpAQCAtNDk5LDE3ICs1MzIsMTcgQEAKIAkvKgogCSAqIFNl ZSBpZiB3ZSBjYW4gc3RhcnQgb3V0cHV0dGluZwogCSAqLwotCWlmIChpZl9xdWV1ZWQgJiYgbGlu a191cCkKLQkgICBpZl9zdGFydCgpOworCWlmIChzLT5pZl9xdWV1ZWQgJiYgcy0+bGlua191cCkK KwkgICBpZl9zdGFydChzKTsKIAogCS8qIGNsZWFyIGdsb2JhbCBmaWxlIGRlc2NyaXB0b3Igc2V0 cy4KIAkgKiB0aGVzZSByZXNpZGUgb24gdGhlIHN0YWNrIGluIHZsLmMKIAkgKiBzbyB0aGV5J3Jl IHVudXNhYmxlIGlmIHdlJ3JlIG5vdCBpbgogCSAqIHNsaXJwX3NlbGVjdF9maWxsIG9yIHNsaXJw X3NlbGVjdF9wb2xsLgogCSAqLwotCSBnbG9iYWxfcmVhZGZkcyA9IE5VTEw7Ci0JIGdsb2JhbF93 cml0ZWZkcyA9IE5VTEw7Ci0JIGdsb2JhbF94ZmRzID0gTlVMTDsKKwkgcy0+cmVhZGZkcyA9IE5V TEw7CisJIHMtPndyaXRlZmRzID0gTlVMTDsKKwkgcy0+eGZkcyA9IE5VTEw7CiB9CiAKICNkZWZp bmUgRVRIX0FMRU4gNgpAQCAtNTQ1LDcgKzU3OCw4IEBACiAJdW5zaWduZWQgY2hhcgkJYXJfdGlw WzRdOwkJLyogdGFyZ2V0IElQIGFkZHJlc3MJCSovCiB9OwogCi12b2lkIGFycF9pbnB1dChjb25z dCB1aW50OF90ICpwa3QsIGludCBwa3RfbGVuKQorc3RhdGljCit2b2lkIGFycF9pbnB1dChzbGly cF9zdGF0ZV90ICpzLCBjb25zdCB1aW50OF90ICpwa3QsIGludCBwa3RfbGVuKQogewogICAgIHN0 cnVjdCBldGhoZHIgKmVoID0gKHN0cnVjdCBldGhoZHIgKilwa3Q7CiAgICAgc3RydWN0IGFycGhk ciAqYWggPSAoc3RydWN0IGFycGhkciAqKShwa3QgKyBFVEhfSExFTik7CkBAIC01NTgsMTcgKzU5 MiwxNyBAQAogICAgIGFyX29wID0gbnRvaHMoYWgtPmFyX29wKTsKICAgICBzd2l0Y2goYXJfb3Ap IHsKICAgICBjYXNlIEFSUE9QX1JFUVVFU1Q6Ci0gICAgICAgIGlmICghbWVtY21wKGFoLT5hcl90 aXAsICZzcGVjaWFsX2FkZHIsIDMpKSB7CisgICAgICAgIGlmICghbWVtY21wKGFoLT5hcl90aXAs ICZzLT5zcGVjaWFsX2FkZHIsIDMpKSB7CiAgICAgICAgICAgICBpZiAoYWgtPmFyX3RpcFszXSA9 PSBDVExfRE5TIHx8IGFoLT5hcl90aXBbM10gPT0gQ1RMX0FMSUFTKQogICAgICAgICAgICAgICAg IGdvdG8gYXJwX29rOwotICAgICAgICAgICAgZm9yIChleF9wdHIgPSBleGVjX2xpc3Q7IGV4X3B0 cjsgZXhfcHRyID0gZXhfcHRyLT5leF9uZXh0KSB7CisgICAgICAgICAgICBmb3IgKGV4X3B0ciA9 IHMtPmV4ZWNfbGlzdDsgZXhfcHRyOyBleF9wdHIgPSBleF9wdHItPmV4X25leHQpIHsKICAgICAg ICAgICAgICAgICBpZiAoZXhfcHRyLT5leF9hZGRyID09IGFoLT5hcl90aXBbM10pCiAgICAgICAg ICAgICAgICAgICAgIGdvdG8gYXJwX29rOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0 dXJuOwogICAgICAgICBhcnBfb2s6CiAgICAgICAgICAgICAvKiBYWFg6IG1ha2UgYW4gQVJQIHJl cXVlc3QgdG8gaGF2ZSB0aGUgY2xpZW50IGFkZHJlc3MgKi8KLSAgICAgICAgICAgIG1lbWNweShj bGllbnRfZXRoYWRkciwgZWgtPmhfc291cmNlLCBFVEhfQUxFTik7CisgICAgICAgICAgICBtZW1j cHkocy0+Y2xpZW50X2V0aGFkZHIsIGVoLT5oX3NvdXJjZSwgRVRIX0FMRU4pOwogCiAgICAgICAg ICAgICAvKiBBUlAgcmVxdWVzdCBmb3IgYWxpYXMvZG5zIG1hYyBhZGRyZXNzICovCiAgICAgICAg ICAgICBtZW1jcHkocmVoLT5oX2Rlc3QsIHBrdCArIEVUSF9BTEVOLCBFVEhfQUxFTik7CkBAIC01 ODUsNyArNjE5LDcgQEAKICAgICAgICAgICAgIG1lbWNweShyYWgtPmFyX3NpcCwgYWgtPmFyX3Rp cCwgNCk7CiAgICAgICAgICAgICBtZW1jcHkocmFoLT5hcl90aGEsIGFoLT5hcl9zaGEsIEVUSF9B TEVOKTsKICAgICAgICAgICAgIG1lbWNweShyYWgtPmFyX3RpcCwgYWgtPmFyX3NpcCwgNCk7Ci0g ICAgICAgICAgICBzbGlycF9vdXRwdXQoYXJwX3JlcGx5LCBzaXplb2YoYXJwX3JlcGx5KSk7Cisg ICAgICAgICAgICBzbGlycF9vdXRwdXQocy0+dXNlciwgYXJwX3JlcGx5LCBzaXplb2YoYXJwX3Jl cGx5KSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTU5Myw3 ICs2MjcsNyBAQAogICAgIH0KIH0KIAotdm9pZCBzbGlycF9pbnB1dChjb25zdCB1aW50OF90ICpw a3QsIGludCBwa3RfbGVuKQordm9pZCBzbGlycF9pbnB1dChzbGlycF9zdGF0ZV90ICpzLCBjb25z dCB1aW50OF90ICpwa3QsIGludCBwa3RfbGVuKQogewogICAgIHN0cnVjdCBtYnVmICptOwogICAg IGludCBwcm90bzsKQEAgLTYwNCwxMCArNjM4LDE0IEBACiAgICAgcHJvdG8gPSBudG9ocygqKHVp bnQxNl90ICopKHBrdCArIDEyKSk7CiAgICAgc3dpdGNoKHByb3RvKSB7CiAgICAgY2FzZSBFVEhf UF9BUlA6Ci0gICAgICAgIGFycF9pbnB1dChwa3QsIHBrdF9sZW4pOworICAgICAgICBhcnBfaW5w dXQocywgcGt0LCBwa3RfbGVuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFVEhfUF9JUDoK LSAgICAgICAgbSA9IG1fZ2V0KCk7CisJLyogVXBkYXRlIHRpbWUuIEltcG9ydGFudCBpZiB0aGUg bmV0d29yayBpcyB2ZXJ5IHF1aWV0LCBhcyBvdGhlcndpc2UKKyAgICAgICAgICogdGhlIGZpcnN0 IG91dGdvaW5nIGNvbm5lY3Rpb24gZ2V0cyBhbiBpbmNvcnJlY3QgdGltZXN0YW1wLiAqLworCXVw ZHRpbWUocyk7CisKKyAgICAgICAgbSA9IG1fZ2V0KHMpOwogICAgICAgICBpZiAoIW0pCiAgICAg ICAgICAgICByZXR1cm47CiAgICAgICAgIC8qIE5vdGU6IHdlIGFkZCB0byBhbGlnbiB0aGUgSVAg aGVhZGVyICovCkBAIC02MTcsNyArNjU1LDcgQEAKICAgICAgICAgbS0+bV9kYXRhICs9IDIgKyBF VEhfSExFTjsKICAgICAgICAgbS0+bV9sZW4gLT0gMiArIEVUSF9ITEVOOwogCi0gICAgICAgIGlw X2lucHV0KG0pOworICAgICAgICBpcF9pbnB1dChzLCBtKTsKICAgICAgICAgYnJlYWs7CiAgICAg ZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC02MjUsNyArNjYzLDcgQEAKIH0KIAogLyogb3V0 cHV0IHRoZSBJUCBwYWNrZXQgdG8gdGhlIGV0aGVybmV0IGRldmljZSAqLwotdm9pZCBpZl9lbmNh cChjb25zdCB1aW50OF90ICppcF9kYXRhLCBpbnQgaXBfZGF0YV9sZW4pCit2b2lkIGlmX2VuY2Fw KHNsaXJwX3N0YXRlX3QgKnMsIGNvbnN0IHVpbnQ4X3QgKmlwX2RhdGEsIGludCBpcF9kYXRhX2xl bikKIHsKICAgICB1aW50OF90IGJ1ZlsxNjAwXTsKICAgICBzdHJ1Y3QgZXRoaGRyICplaCA9IChz dHJ1Y3QgZXRoaGRyICopYnVmOwpAQCAtNjMzLDMzICs2NzEsMzMgQEAKICAgICBpZiAoaXBfZGF0 YV9sZW4gKyBFVEhfSExFTiA+IHNpemVvZihidWYpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt ZW1jcHkoZWgtPmhfZGVzdCwgY2xpZW50X2V0aGFkZHIsIEVUSF9BTEVOKTsKKyAgICBtZW1jcHko ZWgtPmhfZGVzdCwgcy0+Y2xpZW50X2V0aGFkZHIsIEVUSF9BTEVOKTsKICAgICBtZW1jcHkoZWgt Pmhfc291cmNlLCBzcGVjaWFsX2V0aGFkZHIsIEVUSF9BTEVOIC0gMSk7CiAgICAgLyogWFhYOiBu b3QgY29ycmVjdCAqLwogICAgIGVoLT5oX3NvdXJjZVs1XSA9IENUTF9BTElBUzsKICAgICBlaC0+ aF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTsKICAgICBtZW1jcHkoYnVmICsgc2l6ZW9mKHN0cnVj dCBldGhoZHIpLCBpcF9kYXRhLCBpcF9kYXRhX2xlbik7Ci0gICAgc2xpcnBfb3V0cHV0KGJ1Ziwg aXBfZGF0YV9sZW4gKyBFVEhfSExFTik7CisgICAgc2xpcnBfb3V0cHV0KHMtPnVzZXIsIGJ1Ziwg aXBfZGF0YV9sZW4gKyBFVEhfSExFTik7CiB9CiAKLWludCBzbGlycF9yZWRpcihpbnQgaXNfdWRw LCBpbnQgaG9zdF9wb3J0LAoraW50IHNsaXJwX3JlZGlyKHNsaXJwX3N0YXRlX3QgKnMsIGludCBp c191ZHAsIGludCBob3N0X3BvcnQsCiAgICAgICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgZ3Vl c3RfYWRkciwgaW50IGd1ZXN0X3BvcnQpCiB7CiAgICAgaWYgKGlzX3VkcCkgewotICAgICAgICBp ZiAoIXVkcF9saXN0ZW4oaHRvbnMoaG9zdF9wb3J0KSwgZ3Vlc3RfYWRkci5zX2FkZHIsCisgICAg ICAgIGlmICghdWRwX2xpc3RlbihzLCBodG9ucyhob3N0X3BvcnQpLCBndWVzdF9hZGRyLnNfYWRk ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGh0b25zKGd1ZXN0X3BvcnQpLCAwKSkKICAgICAg ICAgICAgIHJldHVybiAtMTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXNvbGlzdGVuKGh0 b25zKGhvc3RfcG9ydCksIGd1ZXN0X2FkZHIuc19hZGRyLAorICAgICAgICBpZiAoIXNvbGlzdGVu KHMsIGh0b25zKGhvc3RfcG9ydCksIGd1ZXN0X2FkZHIuc19hZGRyLAogICAgICAgICAgICAgICAg ICAgICAgIGh0b25zKGd1ZXN0X3BvcnQpLCAwKSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAg ICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBzbGlycF9hZGRfZXhlYyhpbnQgZG9fcHR5LCBj b25zdCBjaGFyICphcmdzLCBpbnQgYWRkcl9sb3dfYnl0ZSwKK2ludCBzbGlycF9hZGRfZXhlYyhz bGlycF9zdGF0ZV90ICpzLCBpbnQgZG9fcHR5LCBjb25zdCBjaGFyICphcmdzLCBpbnQgYWRkcl9s b3dfYnl0ZSwKICAgICAgICAgICAgICAgICAgIGludCBndWVzdF9wb3J0KQogewotICAgIHJldHVy biBhZGRfZXhlYygmZXhlY19saXN0LCBkb19wdHksIChjaGFyICopYXJncywKKyAgICByZXR1cm4g YWRkX2V4ZWMoJnMtPmV4ZWNfbGlzdCwgZG9fcHR5LCAoY2hhciAqKWFyZ3MsCiAgICAgICAgICAg ICAgICAgICAgIGFkZHJfbG93X2J5dGUsIGh0b25zKGd1ZXN0X3BvcnQpKTsKIH0KSW5kZXg6IHFl bXUvc2xpcnAvc2xpcnAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvc2xpcnAuaAky MDA3LTEwLTIxIDE4OjQ3OjA4LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC9zbGlycC5o CTIwMDctMTAtMjIgMjA6MzE6NTQuMDAwMDAwMDAwICswMDAwCkBAIC0zLDcgKzMsMTYgQEAKIAog I2RlZmluZSBDT05GSUdfUUVNVQogCi0jZGVmaW5lIERFQlVHIDEKKy8vI2RlZmluZSBERUJVRyAx CisKKy8vIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZW5hYmxlIFNMSVJQIHN0YXRp c3RpY3MgcHJpbnRpbmcgaW4gUWVtdQorLy8jZGVmaW5lIExPR19FTkFCTEVECisKKyNpZmRlZiBM T0dfRU5BQkxFRAorI2RlZmluZSBTVEFUKGV4cHIpIGV4cHIKKyNlbHNlCisjZGVmaW5lIFNUQVQo ZXhwcikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKIAogI2lmbmRlZiBDT05GSUdfUUVNVQogI2lu Y2x1ZGUgInZlcnNpb24uaCIKQEAgLTE5MCw2ICsxOTksOCBAQAogI2luY2x1ZGUgPHN5cy9zdHJv cHRzLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgImxpYnNsaXJwLmgiCisKICNpbmNsdWRlICJkZWJ1 Zy5oIgogCiAjaW5jbHVkZSAiaXAuaCIKQEAgLTIxMywxOSArMjI0LDEzNCBAQAogCiAjaW5jbHVk ZSAiYm9vdHAuaCIKICNpbmNsdWRlICJ0ZnRwLmgiCi0jaW5jbHVkZSAibGlic2xpcnAuaCIKIAot ZXh0ZXJuIHN0cnVjdCB0dHlzICp0dHlzX3VuaXRbTUFYX0lOVEVSRkFDRVNdOworLyoqIE51bWJl ciBvZiBESENQIGNsaWVudHMgc3VwcG9ydGVkIGJ5IE5BVC4gKi8KKyNkZWZpbmUgTkJfQUREUiAg ICAgMTYKKworLyoqIFdoZXJlIHRvIHN0YXJ0IERIQ1AgSVAgbnVtYmVyIGFsbG9jYXRpb24uICov CisjZGVmaW5lIFNUQVJUX0FERFIgIDE1CisKKy8qKiBESENQIExlYXNlIHRpbWUuICovCisjZGVm aW5lIExFQVNFX1RJTUUgKDI0ICogMzYwMCkKKworLyoqIEVudHJ5IGluIHRoZSB0YWJsZSBvZiBr bm93biBESENQIGNsaWVudHMuICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IGFsbG9jYXRl ZDsKKyAgICB1aW50OF90IG1hY2FkZHJbNl07Cit9IEJPT1RQQ2xpZW50OworCisKKy8qKiBURlRQ IHNlc3Npb24gZW50cnkuICovCitzdHJ1Y3QgdGZ0cF9zZXNzaW9uIHsKKyAgICBpbnQgaW5fdXNl OworICAgIHVuc2lnbmVkIGNoYXIgZmlsZW5hbWVbVEZUUF9GSUxFTkFNRV9NQVhdOworCisgICAg c3RydWN0IGluX2FkZHIgY2xpZW50X2lwOworICAgIHVfaW50MTZfdCBjbGllbnRfcG9ydDsKKwor ICAgIGludCB0aW1lc3RhbXA7Cit9OworCisKKy8qKiBNYWluIHN0YXRlL2NvbmZpZ3VyYXRpb24g c3RydWN0dXJlIGZvciBzbGlycC4gKi8KK3N0cnVjdCBzbGlycF9zdGF0ZV90Cit7CisgICAgLyog U3R1ZmYgZnJvbSBib290LmMgKi8KKyAgICBCT09UUENsaWVudCBib290cF9jbGllbnRzW05CX0FE RFJdOworICAgIGNvbnN0IGNoYXIgKmJvb3RwX2ZpbGVuYW1lOworICAgIC8qIFN0dWZmIGZyb20g aWYuYyAqLworICAgIGludCBpZl9jb21wOworICAgIGludCBpZl9xdWV1ZWQ7CisgICAgaW50IGlm X3RocmVzaDsKKyAgICBzdHJ1Y3QgbWJ1ZiBpZl9mYXN0cTsKKyAgICBzdHJ1Y3QgbWJ1ZiBpZl9i YXRjaHE7CisgICAgc3RydWN0IG1idWYgKm5leHRfbTsKKyNpZmRlZiBMT0dfRU5BQkxFRAorICAg IC8qIFN0dWZmIGZyb20gaWNtcC5jICovCisgICAgc3RydWN0IGljbXBzdGF0IGljbXBzdGF0Owor ICAgIC8qIFN0dWZmIGZyb20gaXBfaW5wdXQuYyAqLworICAgIHN0cnVjdCBpcHN0YXQgaXBzdGF0 OworI2VuZGlmCisgICAgc3RydWN0IGlwcSBpcHE7CisgICAgdWludDE2X3QgaXBfaWQ7CisgICAg LyogU3R1ZmYgZnJvbSBtYnVmLmMgKi8KKyAgICBpbnQgbWJ1Zl9hbGxvY2VkLCBtYnVmX21heDsK KyAgICBzdHJ1Y3QgbWJ1ZiBtX2ZyZWVsaXN0LCBtX3VzZWRsaXN0OworICAgIC8qIFN0dWZmIGZy b20gc2xpcnAuYyAqLworICAgIGZkX3NldCAqcmVhZGZkcywgKndyaXRlZmRzLCAqeGZkczsKKyAg ICBjb25zdCBjaGFyICpzbGlycF9ob3N0bmFtZTsKKyAgICB2b2lkICp1c2VyOworICAgIHVpbnQz Ml90IGN1cnRpbWU7CisgICAgdWludDMyX3QgdGltZV9mYXN0dGltbzsKKyAgICB1aW50MzJfdCBs YXN0X3Nsb3d0aW1vOworICAgIGludCBkb19zbG93dGltbzsKKyAgICBpbnQgbGlua191cDsKKyAg ICBzdHJ1Y3QgdGltZXZhbCB0dDsKKyAgICBzdHJ1Y3QgaW5fYWRkciBvdXJfYWRkcjsKKyAgICBz dHJ1Y3QgaW5fYWRkciBhbGlhc19hZGRyOworICAgIHN0cnVjdCBpbl9hZGRyIHNwZWNpYWxfYWRk cjsKKyAgICBzdHJ1Y3QgaW5fYWRkciBkbnNfYWRkcjsKKyAgICBzdHJ1Y3QgaW5fYWRkciBsb29w YmFja19hZGRyOworICAgIHVpbnQ4X3QgY2xpZW50X2V0aGFkZHJbNl07CisgICAgc3RydWN0IGV4 X2xpc3QgKmV4ZWNfbGlzdDsKKyAgICAvKiBTdHVmZiBmcm9tIHRjcF9pbnB1dC5jICovCisgICAg c3RydWN0IHNvY2tldCB0Y2I7CisgICAgc3RydWN0IHNvY2tldCAqdGNwX2xhc3Rfc287CisgICAg dGNwX3NlcSB0Y3BfaXNzOworI2lmZGVmIExPR19FTkFCTEVECisgICAgLyogU3R1ZmYgZnJvbSB0 Y3BfdGltZXIuYyAqLworICAgIHN0cnVjdCB0Y3BzdGF0IHRjcHN0YXQ7CisjZW5kaWYKKyAgICB1 aW50MzJfdCB0Y3Bfbm93OworICAgIC8qIFN0dWZmIGZyb20gdGZ0cC5jICovCisgICAgc3RydWN0 IHRmdHBfc2Vzc2lvbiB0ZnRwX3Nlc3Npb25zW1RGVFBfU0VTU0lPTlNfTUFYXTsKKyAgICBjb25z dCBjaGFyICp0ZnRwX3ByZWZpeDsKKyNpZmRlZiBMT0dfRU5BQkxFRAorICAgIC8qIFN0dWZmIGZy b20gdWRwLmMgKi8KKyAgICBzdHJ1Y3QgdWRwc3RhdCB1ZHBzdGF0OworI2VuZGlmCisgICAgc3Ry dWN0IHNvY2tldCB1ZGI7CisgICAgc3RydWN0IHNvY2tldCAqdWRwX2xhc3Rfc287CisgICAgLy8g dGNwX3N1YnIuYworICAgIGludCBkb19lY2hvOworfTsKKworLyoqIE51bWJlciBvZiBwZXJtYW5l bnQgYnVmZmVycyBpbiBtYnVmLiAqLworI2RlZmluZSBNQlVGX1RIUkVTSCAzMAorCisvKiogRGVm YXVsdCBUQ1Agc29ja2V0IG9wdGlvbnMuICovCisjZGVmaW5lIFNPX09QVElPTlMgRE9fS0VFUEFM SVZFCisKKy8qKiBFbmFibGUgUkZDMTMyMyBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMuCisgKiBA dG9kbyBjaGVjayBpZiBpdCByZWFsbHkgd29ya3MsIGl0IHdhcyB0dXJuZWQgb2ZmIGJlZm9yZS4g Ki8KKyNkZWZpbmUgVENQX0RPX1JGQzEzMjMgMQorCisvKiBUQ1AgZHVwbGljYXRlIEFDSyByZXRy YW5zbWl0IHRocmVzaG9sZC4gKi8KKyNkZWZpbmUgVENQUkVYTVRUSFJFU0ggMworCisjZGVmaW5l IElGX01UVSAxNTAwCisjZGVmaW5lIElGX01SVSAxNTAwCisKKyNpZiAwCisvKgorICogU2V0IGlm X21heGxpbmtoZHIgdG8gNDggYmVjYXVzZSBpdCdzIDQwIGJ5dGVzIGZvciBUQ1AvSVAsCisgKiBh bmQgOCBieXRlcyBmb3IgUFBQLCBidXQgbmVlZCB0byBoYXZlIGl0IG9uIGFuIDhieXRlIGJvdW5k YXJ5CisgKi8KKyNpZmRlZiBVU0VfUFBQCisjZGVmaW5lIElGX01BWExJTktIRFIgNDgKKyNlbHNl CisjZGVmaW5lIElGX01BWExJTktIRFIgNDAKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgLyogMiBm b3IgYWxpZ25tZW50LCAxNCBmb3IgZXRoZXJuZXQsIDQwIGZvciBUQ1AvSVAgKi8KKyNkZWZpbmUg SUZfTUFYTElOS0hEUiAoMiArIDE0ICsgNDApCisjZW5kaWYKIAogI2lmbmRlZiBOVUxMCiAjZGVm aW5lIE5VTEwgKHZvaWQgKikwCiAjZW5kaWYKIAotI2lmbmRlZiBGVUxMX0JPTFQKLXZvaWQgaWZf c3RhcnQgX1AoKHZvaWQpKTsKLSNlbHNlCi12b2lkIGlmX3N0YXJ0IF9QKChzdHJ1Y3QgdHR5cyAq KSk7Ci0jZW5kaWYKK3ZvaWQgaWZfc3RhcnQoc2xpcnBfc3RhdGVfdCAqcyk7CiAKICNpZmRlZiBC QURfU1BSSU5URgogIyBkZWZpbmUgdnNwcmludGYgdnNwcmludGZfbGVuCkBAIC0yNTMsMTYgKzM3 OSwyMiBAQAogIGxvbmcgZ2V0aG9zdGlkIF9QKCh2b2lkKSk7CiAjZW5kaWYKIAotdm9pZCBscHJp bnQgX1AoKGNvbnN0IGNoYXIgKiwgLi4uKSk7Ci0KLWV4dGVybiBpbnQgZG9fZWNobzsKK3N0YXRp YyBpbmxpbmUgdm9pZCBscHJpbnQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisjaWZkZWYg TE9HX0VOQUJMRUQKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0 KTsKKyAgICB0ZXJtX3ZwcmludGYoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7Cisj ZW5kaWYKK30KIAogI2lmIFNJWkVPRl9DSEFSX1AgPT0gNAogIyBkZWZpbmUgaW5zcXVlXzMyIGlu c3F1ZQogIyBkZWZpbmUgcmVtcXVlXzMyIHJlbXF1ZQogI2Vsc2UKLSBpbmxpbmUgdm9pZCBpbnNx dWVfMzIgX1AoKHZvaWQgKiwgdm9pZCAqKSk7Ci0gaW5saW5lIHZvaWQgcmVtcXVlXzMyIF9QKCh2 b2lkICopKTsKK3ZvaWQgaW5zcXVlXzMyKHNsaXJwX3N0YXRlX3QgKnMsIHZvaWQgKmEsIHZvaWQg KmIpOwordm9pZCByZW1xdWVfMzIoc2xpcnBfc3RhdGVfdCAqcywgdm9pZCAqYSk7CiAjZW5kaWYK IAogI2lmbmRlZiBfV0lOMzIKQEAgLTI3NSw0OCArNDA3LDQxIEBACiBpbnQgY2tzdW0oc3RydWN0 IG1idWYgKm0sIGludCBsZW4pOwogCiAvKiBpZi5jICovCi12b2lkIGlmX2luaXQgX1AoKHZvaWQp KTsKLXZvaWQgaWZfb3V0cHV0IF9QKChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtYnVmICopKTsK K3ZvaWQgaWZfaW5pdChzbGlycF9zdGF0ZV90ICpzKTsKK3ZvaWQgaWZfb3V0cHV0KHNsaXJwX3N0 YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqaWZtKTsKIAogLyogaXBf aW5wdXQuYyAqLwotdm9pZCBpcF9pbml0IF9QKCh2b2lkKSk7Ci12b2lkIGlwX2lucHV0IF9QKChz dHJ1Y3QgbWJ1ZiAqKSk7Ci1zdHJ1Y3QgaXAgKiBpcF9yZWFzcyBfUCgocmVnaXN0ZXIgc3RydWN0 IGlwYXNmcmFnICosIHJlZ2lzdGVyIHN0cnVjdCBpcHEgKikpOwotdm9pZCBpcF9mcmVlZiBfUCgo c3RydWN0IGlwcSAqKSk7Ci12b2lkIGlwX2VucSBfUCgocmVnaXN0ZXIgc3RydWN0IGlwYXNmcmFn ICosIHJlZ2lzdGVyIHN0cnVjdCBpcGFzZnJhZyAqKSk7Ci12b2lkIGlwX2RlcSBfUCgocmVnaXN0 ZXIgc3RydWN0IGlwYXNmcmFnICopKTsKLXZvaWQgaXBfc2xvd3RpbW8gX1AoKHZvaWQpKTsKK3Zv aWQgaXBfaW5pdChzbGlycF9zdGF0ZV90ICpzKTsKK3ZvaWQgaXBfaW5wdXQoc2xpcnBfc3RhdGVf dCAqcywgc3RydWN0IG1idWYgKm0pOwordm9pZCBpcF9zbG93dGltbyhzbGlycF9zdGF0ZV90ICpz KTsKIHZvaWQgaXBfc3RyaXBvcHRpb25zIF9QKChyZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1 Y3QgbWJ1ZiAqKSk7CiAKIC8qIGlwX291dHB1dC5jICovCi1pbnQgaXBfb3V0cHV0IF9QKChzdHJ1 Y3Qgc29ja2V0ICosIHN0cnVjdCBtYnVmICopKTsKK2ludCBpcF9vdXRwdXQoc2xpcnBfc3RhdGVf dCAqcywgc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICptMCk7CiAKIC8qIHRjcF9pbnB1 dC5jICovCi1pbnQgdGNwX3JlYXNzIF9QKChyZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKiwgcmVnaXN0 ZXIgc3RydWN0IHRjcGlwaGRyICosIHN0cnVjdCBtYnVmICopKTsKLXZvaWQgdGNwX2lucHV0IF9Q KChyZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHN0cnVjdCBzb2NrZXQgKikpOwotdm9pZCB0 Y3BfZG9vcHRpb25zIF9QKChzdHJ1Y3QgdGNwY2IgKiwgdV9jaGFyICosIGludCwgc3RydWN0IHRj cGlwaGRyICopKTsKLXZvaWQgdGNwX3htaXRfdGltZXIgX1AoKHJlZ2lzdGVyIHN0cnVjdCB0Y3Bj YiAqLCBpbnQpKTsKLWludCB0Y3BfbXNzIF9QKChyZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKiwgdV9p bnQpKTsKK3ZvaWQgdGNwX2lucHV0KHNsaXJwX3N0YXRlX3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCBt YnVmICptLCBpbnQgaXBobGVuLCBzdHJ1Y3Qgc29ja2V0ICppbnNvKTsKK2ludCB0Y3BfbXNzKHNs aXJwX3N0YXRlX3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHAsIHVfaW50IG9mZmVyKTsK IAogLyogdGNwX291dHB1dC5jICovCi1pbnQgdGNwX291dHB1dCBfUCgocmVnaXN0ZXIgc3RydWN0 IHRjcGNiICopKTsKK2ludCB0Y3Bfb3V0cHV0KHNsaXJwX3N0YXRlX3QgKnMsIHJlZ2lzdGVyIHN0 cnVjdCB0Y3BjYiAqdHApOwogdm9pZCB0Y3Bfc2V0cGVyc2lzdCBfUCgocmVnaXN0ZXIgc3RydWN0 IHRjcGNiICopKTsKIAogLyogdGNwX3N1YnIuYyAqLwotdm9pZCB0Y3BfaW5pdCBfUCgodm9pZCkp Owotdm9pZCB0Y3BfdGVtcGxhdGUgX1AoKHN0cnVjdCB0Y3BjYiAqKSk7Ci12b2lkIHRjcF9yZXNw b25kIF9QKChzdHJ1Y3QgdGNwY2IgKiwgcmVnaXN0ZXIgc3RydWN0IHRjcGlwaGRyICosIHJlZ2lz dGVyIHN0cnVjdCBtYnVmICosIHRjcF9zZXEsIHRjcF9zZXEsIGludCkpOwotc3RydWN0IHRjcGNi ICogdGNwX25ld3RjcGNiIF9QKChzdHJ1Y3Qgc29ja2V0ICopKTsKLXN0cnVjdCB0Y3BjYiAqIHRj cF9jbG9zZSBfUCgocmVnaXN0ZXIgc3RydWN0IHRjcGNiICopKTsKLXZvaWQgdGNwX2RyYWluIF9Q KCh2b2lkKSk7Ci12b2lkIHRjcF9zb2NrY2xvc2VkIF9QKChzdHJ1Y3QgdGNwY2IgKikpOwotaW50 IHRjcF9mY29ubmVjdCBfUCgoc3RydWN0IHNvY2tldCAqKSk7Ci12b2lkIHRjcF9jb25uZWN0IF9Q KChzdHJ1Y3Qgc29ja2V0ICopKTsKLWludCB0Y3BfYXR0YWNoIF9QKChzdHJ1Y3Qgc29ja2V0ICop KTsKK3ZvaWQgdGNwX2luaXQoc2xpcnBfc3RhdGVfdCAqcyk7Cit2b2lkIHRjcF90ZW1wbGF0ZShz bGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgdGNwY2IgKnRwKTsKK3ZvaWQgdGNwX3Jlc3BvbmQoc2xp cnBfc3RhdGVfdCAqcywgc3RydWN0IHRjcGNiICp0cCwgc3RydWN0IHRjcGlwaGRyICp0aSwKKyAg ICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKm0sIHRjcF9zZXEgYWNrLCB0Y3Bfc2VxIHNlcSwg aW50IGZsYWdzKTsKK3N0cnVjdCB0Y3BjYiAqdGNwX25ld3RjcGNiKHNsaXJwX3N0YXRlX3QgKnMs IHN0cnVjdCBzb2NrZXQgKnNvKTsKK3N0cnVjdCB0Y3BjYiAqdGNwX2Nsb3NlKHNsaXJwX3N0YXRl X3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHApOwordm9pZCB0Y3Bfc29ja2Nsb3NlZChz bGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgdGNwY2IgKnRwKTsKK2ludCB0Y3BfZmNvbm5lY3Qoc2xp cnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pOwordm9pZCB0Y3BfY29ubmVjdChzbGly cF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICppbnNvKTsKK2ludCB0Y3BfYXR0YWNoKHNsaXJw X3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKTsKIHVfaW50OF90IHRjcF90b3MgX1AoKHN0 cnVjdCBzb2NrZXQgKikpOwotaW50IHRjcF9lbXUgX1AoKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0 IG1idWYgKikpOwotaW50IHRjcF9jdGwgX1AoKHN0cnVjdCBzb2NrZXQgKikpOwotc3RydWN0IHRj cGNiICp0Y3BfZHJvcChzdHJ1Y3QgdGNwY2IgKnRwLCBpbnQgZXJyKTsKK2ludCB0Y3BfZW11KHNs aXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbSk7CitpbnQg dGNwX2N0bChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbyk7CitzdHJ1Y3QgdGNw Y2IgKnRjcF9kcm9wKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCB0Y3BjYiAqdHAsIGludCBlcnIp OwogCiAjaWZkZWYgVVNFX1BQUAogI2RlZmluZSBNSU5fTVJVIE1JTk1SVQpJbmRleDogcWVtdS9z bGlycC9zb2NrZXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvc29ja2V0LmMJMjAw Ny0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvc29ja2V0LmMJ MjAwNy0xMC0yMiAxOTozNDoyMS4wMDAwMDAwMDAgKzAwMDAKQEAgLTEzLDEyICsxMywxNiBAQAog I2luY2x1ZGUgPHN5cy9maWxpby5oPgogI2VuZGlmCiAKLXZvaWQKK3N0YXRpYyB2b2lkIHNvZmNh bnRyY3Ztb3JlKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCAgc29ja2V0ICpzbyk7CitzdGF0aWMg dm9pZCBzb2ZjYW50c2VuZG1vcmUoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28p OworCisjaWYgMAorc3RhdGljIHZvaWQKIHNvX2luaXQoKQogewogCS8qIE5vdGhpbmcgeWV0ICov CiB9Ci0KKyNlbmRpZgogCiBzdHJ1Y3Qgc29ja2V0ICoKIHNvbG9va3VwKGhlYWQsIGxhZGRyLCBs cG9ydCwgZmFkZHIsIGZwb3J0KQpAQCAtNjcsMjIgKzcxLDIxIEBACiAgKiByZW1xdWUgYW5kIGZy ZWUgYSBzb2NrZXQsIGNsb2JiZXIgY2FjaGUKICAqLwogdm9pZAotc29mcmVlKHNvKQotCXN0cnVj dCBzb2NrZXQgKnNvOworc29mcmVlKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNv KQogewogICBpZiAoc28tPnNvX2VtdT09RU1VX1JTSCAmJiBzby0+ZXh0cmEpIHsKLQlzb2ZyZWUo c28tPmV4dHJhKTsKKwlzb2ZyZWUocywgc28tPmV4dHJhKTsKIAlzby0+ZXh0cmE9TlVMTDsKICAg fQotICBpZiAoc28gPT0gdGNwX2xhc3Rfc28pCi0gICAgdGNwX2xhc3Rfc28gPSAmdGNiOwotICBl bHNlIGlmIChzbyA9PSB1ZHBfbGFzdF9zbykKLSAgICB1ZHBfbGFzdF9zbyA9ICZ1ZGI7CisgIGlm IChzbyA9PSBzLT50Y3BfbGFzdF9zbykKKyAgICBzLT50Y3BfbGFzdF9zbyA9ICZzLT50Y2I7Cisg IGVsc2UgaWYgKHNvID09IHMtPnVkcF9sYXN0X3NvKQorICAgIHMtPnVkcF9sYXN0X3NvID0gJnMt PnVkYjsKIAotICBtX2ZyZWUoc28tPnNvX20pOworICBtX2ZyZWUocywgc28tPnNvX20pOwogCiAg IGlmKHNvLT5zb19uZXh0ICYmIHNvLT5zb19wcmV2KQotICAgIHJlbXF1ZShzbyk7ICAvKiBjcmFz aGVzIGlmIHNvIGlzIG5vdCBpbiBhIHF1ZXVlICovCisgICAgcmVtcXVlKHMsIHNvKTsgIC8qIGNy YXNoZXMgaWYgc28gaXMgbm90IGluIGEgcXVldWUgKi8KIAogICBmcmVlKHNvKTsKIH0KQEAgLTkz LDggKzk2LDcgQEAKICAqIGEgcmVhZCgpIG9mIDAgKG9yIGxlc3MpIG1lYW5zIGl0J3MgZGlzY29u bmVjdGVkCiAgKi8KIGludAotc29yZWFkKHNvKQotCXN0cnVjdCBzb2NrZXQgKnNvOworc29yZWFk KHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKQogewogCWludCBuLCBubiwgbHNz LCB0b3RhbDsKIAlzdHJ1Y3Qgc2J1ZiAqc2IgPSAmc28tPnNvX3NuZDsKQEAgLTExMyw2ICsxMTUs OCBAQAogCWxlbiA9IHNiLT5zYl9kYXRhbGVuIC0gc2ItPnNiX2NjOwogCiAJaW92WzBdLmlvdl9i YXNlID0gc2ItPnNiX3dwdHI7CisgICAgICAgIGlvdlsxXS5pb3ZfYmFzZSA9IDA7CisgICAgICAg IGlvdlsxXS5pb3ZfbGVuICA9IDA7CiAJaWYgKHNiLT5zYl93cHRyIDwgc2ItPnNiX3JwdHIpIHsK IAkJaW92WzBdLmlvdl9sZW4gPSBzYi0+c2JfcnB0ciAtIHNiLT5zYl93cHRyOwogCQkvKiBTaG91 bGQgbmV2ZXIgc3VjY2VlZCwgYnV0Li4uICovCkBAIC0xNjIsOCArMTY2LDggQEAKIAkJCXJldHVy biAwOwogCQllbHNlIHsKIAkJCURFQlVHX01JU0MoKGRmZCwgIiAtLS0gc29yZWFkKCkgZGlzY29u bmVjdGVkLCBubiA9ICVkLCBlcnJubyA9ICVkLSVzXG4iLCBubiwgZXJybm8sc3RyZXJyb3IoZXJy bm8pKSk7Ci0JCQlzb2ZjYW50cmN2bW9yZShzbyk7Ci0JCQl0Y3Bfc29ja2Nsb3NlZChzb3RvdGNw Y2Ioc28pKTsKKwkJCXNvZmNhbnRyY3Ztb3JlKHMsIHNvKTsKKwkJCXRjcF9zb2NrY2xvc2VkKHMs IHNvdG90Y3BjYihzbykpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtMjA0LDggKzIwOCw3 IEBACiAgKiBpbiB0aGUgc2VuZCBidWZmZXIgaXMgc2VudCBhcyB1cmdlbnQgZGF0YQogICovCiB2 b2lkCi1zb3JlY3Zvb2Ioc28pCi0Jc3RydWN0IHNvY2tldCAqc287Citzb3JlY3Zvb2Ioc2xpcnBf c3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pCiB7CiAJc3RydWN0IHRjcGNiICp0cCA9IHNv dG90Y3BjYihzbyk7CiAKQEAgLTIyMCwxMCArMjIzLDEwIEBACiAJICogdXJnZW50IGRhdGEsIG9y IHRoZSByZWFkKCkgZG9lc24ndCByZXR1cm4gYWxsIHRoZQogCSAqIHVyZ2VudCBkYXRhLgogCSAq LwotCXNvcmVhZChzbyk7CisJc29yZWFkKHMsIHNvKTsKIAl0cC0+c25kX3VwID0gdHAtPnNuZF91 bmEgKyBzby0+c29fc25kLnNiX2NjOwogCXRwLT50X2ZvcmNlID0gMTsKLQl0Y3Bfb3V0cHV0KHRw KTsKKwl0Y3Bfb3V0cHV0KHMsIHRwKTsKIAl0cC0+dF9mb3JjZSA9IDA7CiB9CiAKQEAgLTI5MSw4 ICsyOTQsNyBAQAogICogdXBkYXRpbmcgYWxsIHNidWYgZmllbGQgYXMgbmVjZXNzYXJ5CiAgKi8K IGludAotc293cml0ZShzbykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKK3Nvd3JpdGUoc2xpcnBfc3Rh dGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pCiB7CiAJaW50ICBuLG5uOwogCXN0cnVjdCBzYnVm ICpzYiA9ICZzby0+c29fcmN2OwpAQCAtMzE2LDYgKzMxOCw4IEBACiAgICAgICAgIGxlbiA9IHNi LT5zYl9jYzsKIAogCWlvdlswXS5pb3ZfYmFzZSA9IHNiLT5zYl9ycHRyOworICAgICAgICBpb3Zb MV0uaW92X2Jhc2UgPSAwOworICAgICAgICBpb3ZbMV0uaW92X2xlbiAgPSAwOwogCWlmIChzYi0+ c2JfcnB0ciA8IHNiLT5zYl93cHRyKSB7CiAJCWlvdlswXS5pb3ZfbGVuID0gc2ItPnNiX3dwdHIg LSBzYi0+c2JfcnB0cjsKIAkJLyogU2hvdWxkIG5ldmVyIHN1Y2NlZWQsIGJ1dC4uLiAqLwpAQCAt MzQ5LDggKzM1Myw4IEBACiAJaWYgKG5uIDw9IDApIHsKIAkJREVCVUdfTUlTQygoZGZkLCAiIC0t LSBzb3dyaXRlIGRpc2Nvbm5lY3RlZCwgc28tPnNvX3N0YXRlID0gJXgsIGVycm5vID0gJWRcbiIs CiAJCQlzby0+c29fc3RhdGUsIGVycm5vKSk7Ci0JCXNvZmNhbnRzZW5kbW9yZShzbyk7Ci0JCXRj cF9zb2NrY2xvc2VkKHNvdG90Y3BjYihzbykpOworCQlzb2ZjYW50c2VuZG1vcmUocywgc28pOwor CQl0Y3Bfc29ja2Nsb3NlZChzLCBzb3RvdGNwY2Ioc28pKTsKIAkJcmV0dXJuIC0xOwogCX0KIApA QCAtMzc1LDcgKzM3OSw3IEBACiAJICogaXQgQ0FOVFNFTkRNT1JFCiAJICovCiAJaWYgKChzby0+ c29fc3RhdGUgJiBTU19GV0RSQUlOKSAmJiBzYi0+c2JfY2MgPT0gMCkKLQkJc29mY2FudHNlbmRt b3JlKHNvKTsKKwkJc29mY2FudHNlbmRtb3JlKHMsc28pOwogCiAJcmV0dXJuIG5uOwogfQpAQCAt Mzg0LDggKzM4OCw3IEBACiAgKiByZWN2ZnJvbSgpIGEgVURQIHNvY2tldAogICovCiB2b2lkCi1z b3JlY3Zmcm9tKHNvKQotCXN0cnVjdCBzb2NrZXQgKnNvOworc29yZWN2ZnJvbShzbGlycF9zdGF0 ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbykKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsK IAlpbnQgYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwpAQCAtNDA5LDE5ICs0 MTIsMTkgQEAKIAogCSAgICBERUJVR19NSVNDKChkZmQsIiB1ZHAgaWNtcCByeCBlcnJubyA9ICVk LSVzXG4iLAogCQkJZXJybm8sc3RyZXJyb3IoZXJybm8pKSk7Ci0JICAgIGljbXBfZXJyb3Ioc28t PnNvX20sIElDTVBfVU5SRUFDSCxjb2RlLCAwLHN0cmVycm9yKGVycm5vKSk7CisJICAgIGljbXBf ZXJyb3Iocywgc28tPnNvX20sIElDTVBfVU5SRUFDSCxjb2RlLCAwLHN0cmVycm9yKGVycm5vKSk7 CiAJICB9IGVsc2UgewotCSAgICBpY21wX3JlZmxlY3Qoc28tPnNvX20pOworCSAgICBpY21wX3Jl ZmxlY3Qocywgc28tPnNvX20pOwogCSAgICBzby0+c29fbSA9IDA7IC8qIERvbid0IG1fZnJlZSgp IGl0IGFnYWluISAqLwogCSAgfQogCSAgLyogTm8gbmVlZCBmb3IgdGhpcyBzb2NrZXQgYW55bW9y ZSwgdWRwX2RldGFjaCBpdCAqLwotCSAgdWRwX2RldGFjaChzbyk7CisJICB1ZHBfZGV0YWNoKHMs IHNvKTsKIAl9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJLyogQSAibm9ybWFs IiBVRFAgcGFja2V0ICovCiAJICBzdHJ1Y3QgbWJ1ZiAqbTsKIAkgIGludCBsZW4sIG47CiAKLQkg IGlmICghKG0gPSBtX2dldCgpKSkgcmV0dXJuOwotCSAgbS0+bV9kYXRhICs9IGlmX21heGxpbmto ZHI7CisJICBpZiAoIShtID0gbV9nZXQocykpKSByZXR1cm47CisJICBtLT5tX2RhdGEgKz0gSUZf TUFYTElOS0hEUjsKIAogCSAgLyoKIAkgICAqIFhYWCBTaG91bGRuJ3QgRklPTlJFQUQgcGFja2V0 cyBkZXN0aW5lZCBmb3IgcG9ydCA1MywKQEAgLTQ0OSw4ICs0NTIsOCBAQAogCSAgICBlbHNlIGlm KGVycm5vID09IEVORVRVTlJFQUNIKSBjb2RlPUlDTVBfVU5SRUFDSF9ORVQ7CiAKIAkgICAgREVC VUdfTUlTQygoZGZkLCIgcnggZXJyb3IsIHR4IGljbXAgSUNNUF9VTlJFQUNIOiVpXG4iLCBjb2Rl KSk7Ci0JICAgIGljbXBfZXJyb3Ioc28tPnNvX20sIElDTVBfVU5SRUFDSCxjb2RlLCAwLHN0cmVy cm9yKGVycm5vKSk7Ci0JICAgIG1fZnJlZShtKTsKKwkgICAgaWNtcF9lcnJvcihzLCBzby0+c29f bSwgSUNNUF9VTlJFQUNILGNvZGUsIDAsc3RyZXJyb3IoZXJybm8pKTsKKwkgICAgbV9mcmVlKHMs IG0pOwogCSAgfSBlbHNlIHsKIAkgIC8qCiAJICAgKiBIYWNrOiBkb21haW4gbmFtZSBsb29rdXAg d2lsbCBiZSB1c2VkIHRoZSBtb3N0IGZvciBVRFAsCkBAIC00NjAsOSArNDYzLDkgQEAKIAkgICAq LwogCSAgICBpZiAoc28tPnNvX2V4cGlyZSkgewogCSAgICAgIGlmIChzby0+c29fZnBvcnQgPT0g aHRvbnMoNTMpKQotCQlzby0+c29fZXhwaXJlID0gY3VydGltZSArIFNPX0VYUElSRUZBU1Q7CisJ CXNvLT5zb19leHBpcmUgPSBzLT5jdXJ0aW1lICsgU09fRVhQSVJFRkFTVDsKIAkgICAgICBlbHNl Ci0JCXNvLT5zb19leHBpcmUgPSBjdXJ0aW1lICsgU09fRVhQSVJFOworCQlzby0+c29fZXhwaXJl ID0gcy0+Y3VydGltZSArIFNPX0VYUElSRTsKIAkgICAgfQogCiAJICAgIC8qCQlpZiAobS0+bV9s ZW4gPT0gbGVuKSB7CkBAIC00NzUsNyArNDc4LDcgQEAKIAkgICAgICogSWYgdGhpcyBwYWNrZXQg d2FzIGRlc3RpbmVkIGZvciBDVExfQUREUiwKIAkgICAgICogbWFrZSBpdCBsb29rIGxpa2UgdGhh dCdzIHdoZXJlIGl0IGNhbWUgZnJvbSwgZG9uZSBieSB1ZHBfb3V0cHV0CiAJICAgICAqLwotCSAg ICB1ZHBfb3V0cHV0KHNvLCBtLCAmYWRkcik7CisJICAgIHVkcF9vdXRwdXQocywgc28sIG0sICZh ZGRyKTsKIAkgIH0gLyogcnggZXJyb3IgKi8KIAl9IC8qIGlmIHBpbmcgcGFja2V0ICovCiB9CkBA IC00ODQsOSArNDg3LDcgQEAKICAqIHNlbmR0bygpIGEgc29ja2V0CiAgKi8KIGludAotc29zZW5k dG8oc28sIG0pCi0Jc3RydWN0IHNvY2tldCAqc287Ci0Jc3RydWN0IG1idWYgKm07Citzb3NlbmR0 byhzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm0pCiB7 CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKQEAgLTQ5NiwxNSArNDk3LDMw IEBACiAJREVCVUdfQVJHKCJtID0gJWx4IiwgKGxvbmcpbSk7CiAKICAgICAgICAgYWRkci5zaW5f ZmFtaWx5ID0gQUZfSU5FVDsKLQlpZiAoKHNvLT5zb19mYWRkci5zX2FkZHIgJiBodG9ubCgweGZm ZmZmZjAwKSkgPT0gc3BlY2lhbF9hZGRyLnNfYWRkcikgeworCWlmICgoc28tPnNvX2ZhZGRyLnNf YWRkciAmIGh0b25sKDB4ZmZmZmZmMDApKSA9PSBzLT5zcGVjaWFsX2FkZHIuc19hZGRyKSB7CiAJ ICAvKiBJdCdzIGFuIGFsaWFzICovCiAJICBzd2l0Y2gobnRvaGwoc28tPnNvX2ZhZGRyLnNfYWRk cikgJiAweGZmKSB7CisgICAgICAgICAgY2FzZSBDVExfQlJPQURDQVNUOgorICAgICAgICAgICAg YWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOworI2lmIDAKKyAgICAgICAg ICAgIC8qIFNlbmQgdGhlIHBhY2tldCB0byBob3N0IHRvIGZ1bGx5IGVtdWxhdGUgYnJvYWRjYXN0 ICovCisgICAgICAgICAgICAvKiogQHRvZG8gcj1rbGF1czogb24gTGludXggaG9zdCB0aGlzIGNh dXNlcyB0aGUgaG9zdCB0byByZWNlaXZlCisgICAgICAgICAgICAgKiB0aGUgcGFja2V0IHR3aWNl IGZvciBzb21lIHJlYXNvbi4gQW5kIEkgY2Fubm90IGZpbmQgYW55IHBsYWNlCisgICAgICAgICAg ICAgKiBpbiB0aGUgbWFuIHBhZ2VzIHdoaWNoIHN0YXRlcyB0aGF0IHNlbmRpbmcgYSBicm9hZGNh c3QgZG9lcyBub3QKKyAgICAgICAgICAgICAqIHJlYWNoIHRoZSBob3N0IGl0c2VsZi4gKi8KKyAg ICAgICAgICAgIGhvc3RfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgICAgIGhv c3RfYWRkci5zaW5fcG9ydCA9IHNvLT5zb19mcG9ydDsKKyAgICAgICAgICAgIGhvc3RfYWRkci5z aW5fYWRkciA9IHMtPm91cl9hZGRyOworICAgICAgICAgICAgc2VuZHRvKHNvLT5zLCBtLT5tX2Rh dGEsIG0tPm1fbGVuLCAwLAorICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZo b3N0X2FkZHIsIHNpemVvZiAoc3RydWN0IHNvY2thZGRyKSk7CisjZW5kaWYKKyAgICAgICAgICAg IGJyZWFrOwogCSAgY2FzZSBDVExfRE5TOgotCSAgICBhZGRyLnNpbl9hZGRyID0gZG5zX2FkZHI7 CisJICAgIGFkZHIuc2luX2FkZHIgPSBzLT5kbnNfYWRkcjsKIAkgICAgYnJlYWs7CiAJICBjYXNl IENUTF9BTElBUzoKIAkgIGRlZmF1bHQ6Ci0JICAgIGFkZHIuc2luX2FkZHIgPSBsb29wYmFja19h ZGRyOworCSAgICBhZGRyLnNpbl9hZGRyID0gcy0+bG9vcGJhY2tfYWRkcjsKIAkgICAgYnJlYWs7 CiAJICB9CiAJfSBlbHNlCkBAIC01MjQsNyArNTQwLDcgQEAKIAkgKiBidXQgb25seSBpZiBpdCdz IGFuIGV4cGlyYWJsZSBzb2NrZXQKIAkgKi8KIAlpZiAoc28tPnNvX2V4cGlyZSkKLQkJc28tPnNv X2V4cGlyZSA9IGN1cnRpbWUgKyBTT19FWFBJUkU7CisJCXNvLT5zb19leHBpcmUgPSBzLT5jdXJ0 aW1lICsgU09fRVhQSVJFOwogCXNvLT5zb19zdGF0ZSA9IFNTX0lTRkNPTk5FQ1RFRDsgLyogU28g dGhhdCBpdCBnZXRzIHNlbGVjdCgpZWQgKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTUzMywxNSArNTQ5 LDExIEBACiAgKiBYWFggVGhpcyBzaG91bGQgcmVhbGx5IGJlIHRjcF9saXN0ZW4KICAqLwogc3Ry dWN0IHNvY2tldCAqCi1zb2xpc3Rlbihwb3J0LCBsYWRkciwgbHBvcnQsIGZsYWdzKQotCXVfaW50 IHBvcnQ7Ci0JdV9pbnQzMl90IGxhZGRyOwotCXVfaW50IGxwb3J0OwotCWludCBmbGFnczsKK3Nv bGlzdGVuKHNsaXJwX3N0YXRlX3QgKnMsIHVfaW50IHBvcnQsIHVfaW50MzJfdCBsYWRkciwgdV9p bnQgbHBvcnQsIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKIAlzdHJ1 Y3Qgc29ja2V0ICpzbzsKLQlpbnQgcywgYWRkcmxlbiA9IHNpemVvZihhZGRyKSwgb3B0ID0gMTsK KwlpbnQgZmQsIGFkZHJsZW4gPSBzaXplb2YoYWRkciksIG9wdCA9IDE7CiAKIAlERUJVR19DQUxM KCJzb2xpc3RlbiIpOwogCURFQlVHX0FSRygicG9ydCA9ICVkIiwgcG9ydCk7CkBAIC01NTUsMTEg KzU2NywxMSBAQAogCX0KIAogCS8qIERvbid0IHRjcF9hdHRhY2guLi4gd2UgZG9uJ3QgbmVlZCBz b19zbmQgbm9yIHNvX3JjdiAqLwotCWlmICgoc28tPnNvX3RjcGNiID0gdGNwX25ld3RjcGNiKHNv KSkgPT0gTlVMTCkgeworCWlmICgoc28tPnNvX3RjcGNiID0gdGNwX25ld3RjcGNiKHMsIHNvKSkg PT0gTlVMTCkgewogCQlmcmVlKHNvKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWluc3F1ZShzbywm dGNiKTsKKwlpbnNxdWUocywgc28sICZzLT50Y2IpOwogCiAJLyoKIAkgKiBTU19GQUNDRVBUT05D RSBzb2NrZXRzIG11c3QgdGltZSBvdXQuCkBAIC01NzUsMTQgKzU4NywxNCBAQAogCWFkZHIuc2lu X2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKIAlhZGRyLnNpbl9wb3J0ID0gcG9ydDsKIAotCWlm ICgoKHMgPSBzb2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSwwKSkgPCAwKSB8fAotCSAgICAoc2V0 c29ja29wdChzLFNPTF9TT0NLRVQsU09fUkVVU0VBRERSLChjaGFyICopJm9wdCxzaXplb2YoaW50 KSkgPCAwKSB8fAotCSAgICAoYmluZChzLChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9m KGFkZHIpKSA8IDApIHx8Ci0JICAgIChsaXN0ZW4ocywxKSA8IDApKSB7CisJaWYgKCgoZmQgPSBz b2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSwgMCkpIDwgMCkgfHwKKwkgICAgKHNldHNvY2tvcHQo ZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNoYXIgKikmb3B0LCBzaXplb2YoaW50KSkg PCAwKSB8fAorCSAgICAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2Yo YWRkcikpIDwgMCkgfHwKKwkgICAgKGxpc3RlbihmZCAsMSkgPCAwKSkgewogCQlpbnQgdG1wZXJy bm8gPSBlcnJubzsgLyogRG9uJ3QgY2xvYmJlciB0aGUgcmVhbCByZWFzb24gd2UgZmFpbGVkICov CiAKLQkJY2xvc2Uocyk7Ci0JCXNvZnJlZShzbyk7CisJCWNsb3NlKGZkKTsKKwkJc29mcmVlKHMs IHNvKTsKIAkJLyogUmVzdG9yZSB0aGUgcmVhbCBlcnJubyAqLwogI2lmZGVmIF9XSU4zMgogCQlX U0FTZXRMYXN0RXJyb3IodG1wZXJybm8pOwpAQCAtNTkxLDI1ICs2MDMsMjYgQEAKICNlbmRpZgog CQlyZXR1cm4gTlVMTDsKIAl9Ci0Jc2V0c29ja29wdChzLFNPTF9TT0NLRVQsU09fT09CSU5MSU5F LChjaGFyICopJm9wdCxzaXplb2YoaW50KSk7CisJc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCxT T19PT0JJTkxJTkUsIChjaGFyICopJm9wdCwgc2l6ZW9mKGludCkpOwogCi0JZ2V0c29ja25hbWUo cywoc3RydWN0IHNvY2thZGRyICopJmFkZHIsJmFkZHJsZW4pOworCWdldHNvY2tuYW1lKGZkLCAo c3RydWN0IHNvY2thZGRyICopJmFkZHIsICZhZGRybGVuKTsKIAlzby0+c29fZnBvcnQgPSBhZGRy LnNpbl9wb3J0OwotCWlmIChhZGRyLnNpbl9hZGRyLnNfYWRkciA9PSAwIHx8IGFkZHIuc2luX2Fk ZHIuc19hZGRyID09IGxvb3BiYWNrX2FkZHIuc19hZGRyKQotCSAgIHNvLT5zb19mYWRkciA9IGFs aWFzX2FkZHI7CisJaWYgKGFkZHIuc2luX2FkZHIuc19hZGRyID09IDAgfHwgYWRkci5zaW5fYWRk ci5zX2FkZHIgPT0gcy0+bG9vcGJhY2tfYWRkci5zX2FkZHIpCisJICAgc28tPnNvX2ZhZGRyID0g cy0+YWxpYXNfYWRkcjsKIAllbHNlCiAJICAgc28tPnNvX2ZhZGRyID0gYWRkci5zaW5fYWRkcjsK IAotCXNvLT5zID0gczsKKwlzby0+cyA9IGZkOwogCXJldHVybiBzbzsKIH0KIAorI2lmIDAKIC8q CiAgKiBEYXRhIGlzIGF2YWlsYWJsZSBpbiBzb19yY3YKICAqIEp1c3Qgd3JpdGUoKSB0aGUgZGF0 YSB0byB0aGUgc29ja2V0CiAgKiBYWFggbm90IHlldC4uLgogICovCi12b2lkCitzdGF0aWMgdm9p ZAogc29yd2FrZXVwKHNvKQogCXN0cnVjdCBzb2NrZXQgKnNvOwogewpAQCAtNjIyLDEyICs2MzUs MTMgQEAKICAqIFdlIGhhdmUgcm9vbSBmb3IgYSByZWFkKCkgaWYgd2Ugd2FudCB0bwogICogRm9y IG5vdywgZG9uJ3QgcmVhZCwgaXQnbGwgYmUgZG9uZSBpbiB0aGUgbWFpbiBsb29wCiAgKi8KLXZv aWQKK3N0YXRpYyB2b2lkCiBzb3d3YWtldXAoc28pCiAJc3RydWN0IHNvY2tldCAqc287CiB7CiAJ LyogTm90aGluZywgeWV0ICovCiB9CisjZW5kaWYKIAogLyoKICAqIFZhcmlvdXMgc2Vzc2lvbiBz dGF0ZSBjYWxscwpAQCAtNjUyLDE0ICs2NjYsMTMgQEAKIAlzby0+c29fc3RhdGUgfD0gU1NfSVNG Q09OTkVDVEVEOyAvKiBDbG9iYmVyIG90aGVyIHN0YXRlcyAqLwogfQogCi12b2lkCi1zb2ZjYW50 cmN2bW9yZShzbykKLQlzdHJ1Y3QgIHNvY2tldCAqc287CitzdGF0aWMgdm9pZAorc29mY2FudHJj dm1vcmUoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0ICBzb2NrZXQgKnNvKQogewogCWlmICgoc28t PnNvX3N0YXRlICYgU1NfTk9GRFJFRikgPT0gMCkgewogCQlzaHV0ZG93bihzby0+cywwKTsKLQkJ aWYoZ2xvYmFsX3dyaXRlZmRzKSB7Ci0JCSAgRkRfQ0xSKHNvLT5zLGdsb2JhbF93cml0ZWZkcyk7 CisJCWlmIChzLT53cml0ZWZkcykgeworICAgICAgICAgICAgICAgICAgICBGRF9DTFIoc28tPnMs IHMtPndyaXRlZmRzKTsKIAkJfQogCX0KIAlzby0+c29fc3RhdGUgJj0gfihTU19JU0ZDT05ORUNU SU5HKTsKQEAgLTY2OSwxNyArNjgyLDE2IEBACiAJICAgc28tPnNvX3N0YXRlIHw9IFNTX0ZDQU5U UkNWTU9SRTsKIH0KIAotdm9pZAotc29mY2FudHNlbmRtb3JlKHNvKQotCXN0cnVjdCBzb2NrZXQg KnNvOworc3RhdGljIHZvaWQKK3NvZmNhbnRzZW5kbW9yZShzbGlycF9zdGF0ZV90ICpzLCBzdHJ1 Y3Qgc29ja2V0ICpzbykKIHsKIAlpZiAoKHNvLT5zb19zdGF0ZSAmIFNTX05PRkRSRUYpID09IDAp IHsKICAgICAgICAgICAgIHNodXRkb3duKHNvLT5zLDEpOyAgICAgICAgICAgLyogc2VuZCBGSU4g dG8gZmhvc3QgKi8KLSAgICAgICAgICAgIGlmIChnbG9iYWxfcmVhZGZkcykgewotICAgICAgICAg ICAgICAgIEZEX0NMUihzby0+cyxnbG9iYWxfcmVhZGZkcyk7CisgICAgICAgICAgICBpZiAocy0+ cmVhZGZkcykgeworICAgICAgICAgICAgICAgIEZEX0NMUihzby0+cywgcy0+cmVhZGZkcyk7CiAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZ2xvYmFsX3hmZHMpIHsKLSAgICAgICAgICAg ICAgICBGRF9DTFIoc28tPnMsZ2xvYmFsX3hmZHMpOworICAgICAgICAgICAgaWYgKHMtPnhmZHMp IHsKKyAgICAgICAgICAgICAgICBGRF9DTFIoc28tPnMsIHMtPnhmZHMpOwogICAgICAgICAgICAg fQogCX0KIAlzby0+c29fc3RhdGUgJj0gfihTU19JU0ZDT05ORUNUSU5HKTsKQEAgLTcwNiwxMiAr NzE4LDExIEBACiAgKiBTZXQgQ0FOVFNFTkRNT1JFIG9uY2UgYWxsIGRhdGEgaGFzIGJlZW4gd3Jp dGUoKW4KICAqLwogdm9pZAotc29md2RyYWluKHNvKQotCXN0cnVjdCBzb2NrZXQgKnNvOworc29m d2RyYWluKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKQogewogCWlmIChzby0+ c29fcmN2LnNiX2NjKQogCQlzby0+c29fc3RhdGUgfD0gU1NfRldEUkFJTjsKIAllbHNlCi0JCXNv ZmNhbnRzZW5kbW9yZShzbyk7CisJCXNvZmNhbnRzZW5kbW9yZShzLCBzbyk7CiB9CiAKSW5kZXg6 IHFlbXUvc2xpcnAvc29ja2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL3NvY2tl dC5oCTIwMDctMTAtMjEgMTg6NDc6MDguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL3Nv Y2tldC5oCTIwMDctMTAtMjEgMTg6NDc6MTEuMDAwMDAwMDAwICswMDAwCkBAIC03MSw5ICs3MSw2 IEBACiAjZGVmaW5lIFNTX0ZBQ0NFUFRDT05OCQkweDEwMAkvKiBTb2NrZXQgaXMgYWNjZXB0aW5n IGNvbm5lY3Rpb25zIGZyb20gYSBob3N0IG9uIHRoZSBpbnRlcm5ldCAqLwogI2RlZmluZSBTU19G QUNDRVBUT05DRQkJMHgyMDAJLyogSWYgc2V0LCB0aGUgU1NfRkFDQ0VQVENPTk4gc29ja2V0IHdp bGwgZGllIGFmdGVyIG9uZSBhY2NlcHQgKi8KIAotZXh0ZXJuIHN0cnVjdCBzb2NrZXQgdGNiOwot Ci0KICNpZiBkZWZpbmVkKERFQ0xBUkVfSU9WRUMpICYmICFkZWZpbmVkKEhBVkVfUkVBRFYpCiBz dHJ1Y3QgaW92ZWMgewogCWNoYXIgKmlvdl9iYXNlOwpAQCAtODEsMjQgKzc4LDIwIEBACiB9Owog I2VuZGlmCiAKLXZvaWQgc29faW5pdCBfUCgodm9pZCkpOwogc3RydWN0IHNvY2tldCAqIHNvbG9v a3VwIF9QKChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgc3RydWN0IGlu X2FkZHIsIHVfaW50KSk7CiBzdHJ1Y3Qgc29ja2V0ICogc29jcmVhdGUgX1AoKHZvaWQpKTsKLXZv aWQgc29mcmVlIF9QKChzdHJ1Y3Qgc29ja2V0ICopKTsKLWludCBzb3JlYWQgX1AoKHN0cnVjdCBz b2NrZXQgKikpOwotdm9pZCBzb3JlY3Zvb2IgX1AoKHN0cnVjdCBzb2NrZXQgKikpOwordm9pZCBz b2ZyZWUoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pOworaW50IHNvcmVhZChz bGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbyk7Cit2b2lkIHNvcmVjdm9vYihzbGly cF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbyk7CiBpbnQgc29zZW5kb29iIF9QKChzdHJ1 Y3Qgc29ja2V0ICopKTsKLWludCBzb3dyaXRlIF9QKChzdHJ1Y3Qgc29ja2V0ICopKTsKLXZvaWQg c29yZWN2ZnJvbSBfUCgoc3RydWN0IHNvY2tldCAqKSk7Ci1pbnQgc29zZW5kdG8gX1AoKHN0cnVj dCBzb2NrZXQgKiwgc3RydWN0IG1idWYgKikpOwotc3RydWN0IHNvY2tldCAqIHNvbGlzdGVuIF9Q KCh1X2ludCwgdV9pbnQzMl90LCB1X2ludCwgaW50KSk7Ci12b2lkIHNvcndha2V1cCBfUCgoc3Ry dWN0IHNvY2tldCAqKSk7Ci12b2lkIHNvd3dha2V1cCBfUCgoc3RydWN0IHNvY2tldCAqKSk7Citp bnQgc293cml0ZShzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbyk7Cit2b2lkIHNv cmVjdmZyb20oc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pOworaW50IHNvc2Vu ZHRvKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbSk7 CitzdHJ1Y3Qgc29ja2V0ICpzb2xpc3RlbihzbGlycF9zdGF0ZV90ICpzLCB1X2ludCBwb3J0LCB1 X2ludDMyX3QgbGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBscG9ydCwgaW50 IGZsYWdzKTsKIHZvaWQgc29pc2Zjb25uZWN0aW5nIF9QKChyZWdpc3RlciBzdHJ1Y3Qgc29ja2V0 ICopKTsKIHZvaWQgc29pc2Zjb25uZWN0ZWQgX1AoKHJlZ2lzdGVyIHN0cnVjdCBzb2NrZXQgKikp Owotdm9pZCBzb2ZjYW50cmN2bW9yZSBfUCgoc3RydWN0ICBzb2NrZXQgKikpOwotdm9pZCBzb2Zj YW50c2VuZG1vcmUgX1AoKHN0cnVjdCBzb2NrZXQgKikpOwogdm9pZCBzb2lzZmRpc2Nvbm5lY3Rl ZCBfUCgoc3RydWN0IHNvY2tldCAqKSk7Ci12b2lkIHNvZndkcmFpbiBfUCgoc3RydWN0IHNvY2tl dCAqKSk7Cit2b2lkIHNvZndkcmFpbihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpz byk7CiAKICNlbmRpZiAvKiBfU09DS0VUX0hfICovCkluZGV4OiBxZW11L3NsaXJwL3RjcC5oCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGlycC90Y3AuaAkyMDA3LTEwLTIxIDE4OjQ3OjA4LjAw MDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC90Y3AuaAkyMDA3LTEwLTIxIDE4OjQ3OjExLjAw MDAwMDAwMCArMDAwMApAQCAtNDIsMTAgKzQyLDYgQEAKICNkZWZpbmUgICAgICBQUl9TTE9XSFog ICAgICAgMiAgICAgICAgICAgICAgIC8qIDIgc2xvdyB0aW1lb3V0cyBwZXIgc2Vjb25kIChhcHBy b3gpICovCiAjZGVmaW5lICAgICAgUFJfRkFTVEhaICAgICAgIDUgICAgICAgICAgICAgICAvKiA1 IGZhc3QgdGltZW91dHMgcGVyIHNlY29uZCAobm90IGltcG9ydGFudCkgKi8KIAotZXh0ZXJuIGlu dCB0Y3BfcmN2c3BhY2U7Ci1leHRlcm4gaW50IHRjcF9zbmRzcGFjZTsKLWV4dGVybiBzdHJ1Y3Qg c29ja2V0ICp0Y3BfbGFzdF9zbzsKLQogI2RlZmluZSBUQ1BfU05EU1BBQ0UgODE5MgogI2RlZmlu ZSBUQ1BfUkNWU1BBQ0UgODE5MgogCkBAIC0xNzAsOCArMTY2LDYgQEAKIAogI2RlZmluZSBUQ1Bf SVNTSU5DUiAgICAgKDEyNSoxMDI0KSAgICAgIC8qIGluY3JlbWVudCBmb3IgdGNwX2lzcyBlYWNo IHNlY29uZCAqLwogCi1leHRlcm4gdGNwX3NlcSB0Y3BfaXNzOyAgICAgICAgICAgICAgICAvKiB0 Y3AgaW5pdGlhbCBzZW5kIHNlcSAjICovCi0KLWV4dGVybiBjaGFyICp0Y3BzdGF0ZXNbXTsKK2V4 dGVybiBjb25zdCBjaGFyICogY29uc3QgdGNwc3RhdGVzW107CiAKICNlbmRpZgpJbmRleDogcWVt dS9zbGlycC90Y3BfaW5wdXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvdGNwX2lu cHV0LmMJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAv dGNwX2lucHV0LmMJMjAwNy0xMC0yMiAxOToyOTo1OC4wMDAwMDAwMDAgKzAwMDAKQEAgLTQ1LDEy ICs0NSw2IEBACiAjaW5jbHVkZSA8c2xpcnAuaD4KICNpbmNsdWRlICJpcF9pY21wLmgiCiAKLXN0 cnVjdCBzb2NrZXQgdGNiOwotCi1pbnQJdGNwcmV4bXR0aHJlc2ggPSAzOwotc3RydWN0CXNvY2tl dCAqdGNwX2xhc3Rfc28gPSAmdGNiOwotCi10Y3Bfc2VxIHRjcF9pc3M7ICAgICAgICAgICAgICAg IC8qIHRjcCBpbml0aWFsIHNlbmQgc2VxICMgKi8KIAogI2RlZmluZSBUQ1BfUEFXU19JRExFCSgy NCAqIDI0ICogNjAgKiA2MCAqIFBSX1NMT1dIWikKIApAQCAtNjksOSArNjMsOSBAQAogICogd2hl biBzZWdtZW50cyBhcmUgb3V0IG9mIG9yZGVyIChzbyBmYXN0IHJldHJhbnNtaXQgY2FuIHdvcmsp LgogICovCiAjaWZkZWYgVENQX0FDS19IQUNLCi0jZGVmaW5lIFRDUF9SRUFTUyh0cCwgdGksIG0s IHNvLCBmbGFncykge1wKKyNkZWZpbmUgVENQX1JFQVNTKHMsIHRwLCB0aSwgbSwgc28sIGZsYWdz KSB7XAogICAgICAgIGlmICgodGkpLT50aV9zZXEgPT0gKHRwKS0+cmN2X254dCAmJiBcCi0gICAg ICAgICAgICh0cCktPnNlZ19uZXh0ID09ICh0Y3BpcGhkcnBfMzIpKHRwKSAmJiBcCisgICAgICAg ICAgIHRjcGNiX2dldF9uZXh0KHRwKSA9PSAodHApICYmICAgICAgICBcCiAgICAgICAgICAgICh0 cCktPnRfc3RhdGUgPT0gVENQU19FU1RBQkxJU0hFRCkge1wKICAgICAgICAgICAgICAgIGlmICh0 aS0+dGlfZmxhZ3MgJiBUSF9QVVNIKSBcCiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT50X2Zs YWdzIHw9IFRGX0FDS05PVzsgXApAQCAtNzksNDUgKzczLDQ5IEBACiAgICAgICAgICAgICAgICAg ICAgICAgIHRwLT50X2ZsYWdzIHw9IFRGX0RFTEFDSzsgXAogICAgICAgICAgICAgICAgKHRwKS0+ cmN2X254dCArPSAodGkpLT50aV9sZW47IFwKICAgICAgICAgICAgICAgIGZsYWdzID0gKHRpKS0+ dGlfZmxhZ3MgJiBUSF9GSU47IFwKLSAgICAgICAgICAgICAgIHRjcHN0YXQudGNwc19yY3ZwYWNr Kys7XAotICAgICAgICAgICAgICAgdGNwc3RhdC50Y3BzX3JjdmJ5dGUgKz0gKHRpKS0+dGlfbGVu O1wKKyAgICAgICAgICAgICAgIFNUQVQocy0+dGNwc3RhdC50Y3BzX3JjdnBhY2srKyk7ICAgICAg ICAgXAorICAgICAgICAgICAgICAgU1RBVChzLT50Y3BzdGF0LnRjcHNfcmN2Ynl0ZSArPSAodGkp LT50aV9sZW4pOyAgIFwKICAgICAgICAgICAgICAgIGlmIChzby0+c29fZW11KSB7IFwKLQkJICAg ICAgIGlmICh0Y3BfZW11KChzbyksKG0pKSkgc2JhcHBlbmQoKHNvKSwgKG0pKTsgXAorCQkgICAg ICAgaWYgKHRjcF9lbXUoKHMpLCAoc28pLCAobSkpKSAgICAgXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2JhcHBlbmQoKHMpLCAoc28pLCAobSkpOyAgICBcCiAJICAgICAgIH0gZWxzZSBc Ci0JICAgICAgIAkgICAgICAgc2JhcHBlbmQoKHNvKSwgKG0pKTsgXAorCSAgICAgICAJICAgICAg IHNiYXBwZW5kKChzKSwgKHNvKSwgKG0pKTsgXAogLyogICAgICAgICAgICAgICBzb3J3YWtldXAo c28pOyAqLyBcCiAJfSBlbHNlIHtcCi0gICAgICAgICAgICAgICAoZmxhZ3MpID0gdGNwX3JlYXNz KCh0cCksICh0aSksIChtKSk7IFwKKyAgICAgICAgICAgICAgIChmbGFncykgPSB0Y3BfcmVhc3Mo KHMpLCAodHApLCAodGkpLCAobSkpOyBcCiAgICAgICAgICAgICAgICB0cC0+dF9mbGFncyB8PSBU Rl9BQ0tOT1c7IFwKICAgICAgICB9IFwKIH0KICNlbHNlCi0jZGVmaW5lCVRDUF9SRUFTUyh0cCwg dGksIG0sIHNvLCBmbGFncykgeyBcCisjZGVmaW5lCVRDUF9SRUFTUyhzLCB0cCwgdGksIG0sIHNv LCBmbGFncykgeyBcCiAJaWYgKCh0aSktPnRpX3NlcSA9PSAodHApLT5yY3Zfbnh0ICYmIFwKLQkg ICAgKHRwKS0+c2VnX25leHQgPT0gKHRjcGlwaGRycF8zMikodHApICYmIFwKKyAgICAgICAgICAg IHRjcGNiX2dldF9uZXh0KHRwKSA9PSAodHApICYmICAgICAgICBcCiAJICAgICh0cCktPnRfc3Rh dGUgPT0gVENQU19FU1RBQkxJU0hFRCkgeyBcCiAJCXRwLT50X2ZsYWdzIHw9IFRGX0RFTEFDSzsg XAogCQkodHApLT5yY3Zfbnh0ICs9ICh0aSktPnRpX2xlbjsgXAogCQlmbGFncyA9ICh0aSktPnRp X2ZsYWdzICYgVEhfRklOOyBcCi0JCXRjcHN0YXQudGNwc19yY3ZwYWNrKys7XAotCQl0Y3BzdGF0 LnRjcHNfcmN2Ynl0ZSArPSAodGkpLT50aV9sZW47XAorCQlTVEFUKHMtPnRjcHN0YXQudGNwc19y Y3ZwYWNrKyspOyAgICAgICAgXAorCQlTVEFUKHMtPnRjcHN0YXQudGNwc19yY3ZieXRlICs9ICh0 aSktPnRpX2xlbik7ICBcCiAJCWlmIChzby0+c29fZW11KSB7IFwKLQkJCWlmICh0Y3BfZW11KChz byksKG0pKSkgc2JhcHBlbmQoc28sIChtKSk7IFwKKwkJICAgICAgIGlmICh0Y3BfZW11KChzKSwg KHNvKSwgKG0pKSkgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYmFwcGVuZCgo cyksIChzbyksIChtKSk7ICAgXAogCQl9IGVsc2UgXAotCQkJc2JhcHBlbmQoKHNvKSwgKG0pKTsg XAorCQkJc2JhcHBlbmQoKHMpLCAoc28pLCAobSkpOyBcCiAvKgkJc29yd2FrZXVwKHNvKTsgKi8g XAogCX0gZWxzZSB7IFwKLQkJKGZsYWdzKSA9IHRjcF9yZWFzcygodHApLCAodGkpLCAobSkpOyBc CisJCShmbGFncykgPSB0Y3BfcmVhc3MoKHMpLCAodHApLCAodGkpLCAobSkpOyBcCiAJCXRwLT50 X2ZsYWdzIHw9IFRGX0FDS05PVzsgXAogCX0gXAogfQogI2VuZGlmCi0KLWludAotdGNwX3JlYXNz KHRwLCB0aSwgbSkKLQlyZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwOwotCXJlZ2lzdGVyIHN0cnVj dCB0Y3BpcGhkciAqdGk7Ci0Jc3RydWN0IG1idWYgKm07CitzdGF0aWMgdm9pZCB0Y3BfZG9vcHRp b25zKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCB0Y3BjYiAqdHAsIHVfY2hhciAqY3AsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBjbnQsIHN0cnVjdCB0Y3BpcGhkciAqdGkpOworc3Rh dGljIHZvaWQgdGNwX3htaXRfdGltZXIoc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0 IHRjcGNiICp0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBydHQpOworCitzdGF0 aWMgaW50Cit0Y3BfcmVhc3Moc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0IHRjcGNi ICp0cCwKKyAgICAgICAgICByZWdpc3RlciBzdHJ1Y3QgdGNwaXBoZHIgKnRpLCBzdHJ1Y3QgbWJ1 ZiAqbSkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgdGNwaXBoZHIgKnE7CiAJc3RydWN0IHNvY2tldCAq c28gPSB0cC0+dF9zb2NrZXQ7CkBAIC0xMzMsOCArMTMxLDcgQEAKIAkvKgogCSAqIEZpbmQgYSBz ZWdtZW50IHdoaWNoIGJlZ2lucyBhZnRlciB0aGlzIG9uZSBkb2VzLgogCSAqLwotCWZvciAocSA9 IChzdHJ1Y3QgdGNwaXBoZHIgKil0cC0+c2VnX25leHQ7IHEgIT0gKHN0cnVjdCB0Y3BpcGhkciAq KXRwOwotCSAgICBxID0gKHN0cnVjdCB0Y3BpcGhkciAqKXEtPnRpX25leHQpCisJZm9yIChxID0g KHN0cnVjdCB0Y3BpcGhkciAqKXRjcGNiX2dldF9uZXh0KHRwKTsgcSAhPSAoc3RydWN0IHRjcGlw aGRyICopdHA7IHEgPSB0aV9nZXRfbmV4dChzLCBxKSkKIAkJaWYgKFNFUV9HVChxLT50aV9zZXEs IHRpLT50aV9zZXEpKQogCQkJYnJlYWs7CiAKQEAgLTE0MywxNiArMTQwLDE2IEBACiAJICogb3Vy IGRhdGEgYWxyZWFkeS4gIElmIHNvLCBkcm9wIHRoZSBkYXRhIGZyb20gdGhlIGluY29taW5nCiAJ ICogc2VnbWVudC4gIElmIGl0IHByb3ZpZGVzIGFsbCBvZiBvdXIgZGF0YSwgZHJvcCB1cy4KIAkg Ki8KLQlpZiAoKHN0cnVjdCB0Y3BpcGhkciAqKXEtPnRpX3ByZXYgIT0gKHN0cnVjdCB0Y3BpcGhk ciAqKXRwKSB7CisJaWYgKHRpX2dldF9wcmV2KHMsIHEpICE9IChzdHJ1Y3QgdGNwaXBoZHIgKil0 cCkgewogCQlyZWdpc3RlciBpbnQgaTsKLQkJcSA9IChzdHJ1Y3QgdGNwaXBoZHIgKilxLT50aV9w cmV2OworCQlxID0gdGlfZ2V0X3ByZXYocywgcSk7CiAJCS8qIGNvbnZlcnNpb24gdG8gaW50IChp biBpKSBoYW5kbGVzIHNlcSB3cmFwYXJvdW5kICovCiAJCWkgPSBxLT50aV9zZXEgKyBxLT50aV9s ZW4gLSB0aS0+dGlfc2VxOwogCQlpZiAoaSA+IDApIHsKIAkJCWlmIChpID49IHRpLT50aV9sZW4p IHsKLQkJCQl0Y3BzdGF0LnRjcHNfcmN2ZHVwcGFjaysrOwotCQkJCXRjcHN0YXQudGNwc19yY3Zk dXBieXRlICs9IHRpLT50aV9sZW47Ci0JCQkJbV9mcmVlbShtKTsKKwkJCQlTVEFUKHMtPnRjcHN0 YXQudGNwc19yY3ZkdXBwYWNrKyspOworCQkJCVNUQVQocy0+dGNwc3RhdC50Y3BzX3JjdmR1cGJ5 dGUgKz0gdGktPnRpX2xlbik7CisJCQkJbV9mcmVlbShzLCBtKTsKIAkJCQkvKgogCQkJCSAqIFRy eSB0byBwcmVzZW50IGFueSBxdWV1ZWQgZGF0YQogCQkJCSAqIGF0IHRoZSBsZWZ0IHdpbmRvdyBl ZGdlIHRvIHRoZSB1c2VyLgpAQCAtMTY1LDExICsxNjIsMTEgQEAKIAkJCXRpLT50aV9sZW4gLT0g aTsKIAkJCXRpLT50aV9zZXEgKz0gaTsKIAkJfQotCQlxID0gKHN0cnVjdCB0Y3BpcGhkciAqKShx LT50aV9uZXh0KTsKKwkJcSA9IHRpX2dldF9uZXh0KHMsIHEpOwogCX0KLQl0Y3BzdGF0LnRjcHNf cmN2b29wYWNrKys7Ci0JdGNwc3RhdC50Y3BzX3Jjdm9vYnl0ZSArPSB0aS0+dGlfbGVuOwotCVJF QVNTX01CVUYodGkpID0gKG1idWZwXzMyKSBtOwkJLyogWFhYICovCisJU1RBVChzLT50Y3BzdGF0 LnRjcHNfcmN2b29wYWNrKyspOworCVNUQVQocy0+dGNwc3RhdC50Y3BzX3Jjdm9vYnl0ZSArPSB0 aS0+dGlfbGVuKTsKKwl0aV9zZXRfbWJ1Zih0aSwgbSk7IC8qIFhYWCAqLwogCiAJLyoKIAkgKiBX aGlsZSB3ZSBvdmVybGFwIHN1Y2NlZWRpbmcgc2VnbWVudHMgdHJpbSB0aGVtIG9yLApAQCAtMTgy LDE5ICsxNzksMTkgQEAKIAkJaWYgKGkgPCBxLT50aV9sZW4pIHsKIAkJCXEtPnRpX3NlcSArPSBp OwogCQkJcS0+dGlfbGVuIC09IGk7Ci0JCQltX2Fkaigoc3RydWN0IG1idWYgKikgUkVBU1NfTUJV RihxKSwgaSk7CisJCQltX2Fkaih0aV9nZXRfbWJ1ZihzLCBxKSwgaSk7CiAJCQlicmVhazsKIAkJ fQotCQlxID0gKHN0cnVjdCB0Y3BpcGhkciAqKXEtPnRpX25leHQ7Ci0JCW0gPSAoc3RydWN0IG1i dWYgKikgUkVBU1NfTUJVRigoc3RydWN0IHRjcGlwaGRyICopcS0+dGlfcHJldik7Ci0JCXJlbXF1 ZV8zMigodm9pZCAqKShxLT50aV9wcmV2KSk7Ci0JCW1fZnJlZW0obSk7CisJCXEgPSB0aV9nZXRf bmV4dChzLCBxKTsKKwkJbSA9IHRpX2dldF9tYnVmKHMsIHRpX2dldF9wcmV2KHMsIHEpKTsKKwkJ cmVtcXVlXzMyKHMsIHRpX2dldF9wcmV2KHMsIHEpKTsKKwkJbV9mcmVlbShzLCBtKTsKIAl9CiAK IAkvKgogCSAqIFN0aWNrIG5ldyBzZWdtZW50IGluIGl0cyBwbGFjZS4KIAkgKi8KLQlpbnNxdWVf MzIodGksICh2b2lkICopKHEtPnRpX3ByZXYpKTsKKwlpbnNxdWVfMzIocywgdGksIHRpX2dldF9w cmV2KHMsIHEpKTsKIAogcHJlc2VudDoKIAkvKgpAQCAtMjAzLDcgKzIwMCw3IEBACiAJICovCiAJ aWYgKCFUQ1BTX0hBVkVFU1RBQkxJU0hFRCh0cC0+dF9zdGF0ZSkpCiAJCXJldHVybiAoMCk7Ci0J dGkgPSAoc3RydWN0IHRjcGlwaGRyICopIHRwLT5zZWdfbmV4dDsKKwl0aSA9IChzdHJ1Y3QgdGNw aXBoZHIgKil0Y3BjYl9nZXRfbmV4dCh0cCk7CiAJaWYgKHRpID09IChzdHJ1Y3QgdGNwaXBoZHIg Kil0cCB8fCB0aS0+dGlfc2VxICE9IHRwLT5yY3Zfbnh0KQogCQlyZXR1cm4gKDApOwogCWlmICh0 cC0+dF9zdGF0ZSA9PSBUQ1BTX1NZTl9SRUNFSVZFRCAmJiB0aS0+dGlfbGVuKQpAQCAtMjExLDE3 ICsyMDgsMTggQEAKIAlkbyB7CiAJCXRwLT5yY3Zfbnh0ICs9IHRpLT50aV9sZW47CiAJCWZsYWdz ID0gdGktPnRpX2ZsYWdzICYgVEhfRklOOwotCQlyZW1xdWVfMzIodGkpOwotCQltID0gKHN0cnVj dCBtYnVmICopIFJFQVNTX01CVUYodGkpOyAvKiBYWFggKi8KLQkJdGkgPSAoc3RydWN0IHRjcGlw aGRyICopdGktPnRpX25leHQ7CisJCXJlbXF1ZV8zMihzLCB0aSk7CisJCW0gPSB0aV9nZXRfbWJ1 ZihzLCB0aSk7IC8qIFhYWCAqLworCQl0aSA9IHRpX2dldF9uZXh0KHMsIHRpKTsKIC8qCQlpZiAo c28tPnNvX3N0YXRlICYgU1NfRkNBTlRSQ1ZNT1JFKSAqLwogCQlpZiAoc28tPnNvX3N0YXRlICYg U1NfRkNBTlRTRU5ETU9SRSkKLQkJCW1fZnJlZW0obSk7CisgICAgICAgICAgICAgICAgICAgICAg ICBtX2ZyZWVtKHMsIG0pOwogCQllbHNlIHsKIAkJCWlmIChzby0+c29fZW11KSB7Ci0JCQkJaWYg KHRjcF9lbXUoc28sbSkpIHNiYXBwZW5kKHNvLCBtKTsKKwkJCQlpZiAodGNwX2VtdShzLCBzbyxt KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiYXBwZW5kKHMsIHNvLCBt KTsKIAkJCX0gZWxzZQotCQkJCXNiYXBwZW5kKHNvLCBtKTsKKwkJCQlzYmFwcGVuZChzLCBzbywg bSk7CiAJCX0KIAl9IHdoaWxlICh0aSAhPSAoc3RydWN0IHRjcGlwaGRyICopdHAgJiYgdGktPnRp X3NlcSA9PSB0cC0+cmN2X254dCk7CiAvKglzb3J3YWtldXAoc28pOyAqLwpAQCAtMjMzLDEwICsy MzEsNyBAQAogICogcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiBkYXRlZCBTZXB0ZW1iZXIsIDE5ODEg dmVyeSBjbG9zZWx5LgogICovCiB2b2lkCi10Y3BfaW5wdXQobSwgaXBobGVuLCBpbnNvKQotCXJl Z2lzdGVyIHN0cnVjdCBtYnVmICptOwotCWludCBpcGhsZW47Ci0Jc3RydWN0IHNvY2tldCAqaW5z bzsKK3RjcF9pbnB1dChzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqbSwg aW50IGlwaGxlbiwgc3RydWN0IHNvY2tldCAqaW5zbykKIHsKICAgCXN0cnVjdCBpcCBzYXZlX2lw LCAqaXA7CiAJcmVnaXN0ZXIgc3RydWN0IHRjcGlwaGRyICp0aTsKQEAgLTI1Miw2ICsyNDcsNyBA QAogCXVfbG9uZyB0aXdpbjsKIAlpbnQgcmV0OwogLyoJaW50IHRzX3ByZXNlbnQgPSAwOyAqLwor CWludCBtYnVmX2ZyZWVkID0gMDsKIAogCURFQlVHX0NBTEwoInRjcF9pbnB1dCIpOwogCURFQlVH X0FSR1MoKGRmZCwiIG0gPSAlOGx4ICBpcGhsZW4gPSAlMmQgIGluc28gPSAlbHhcbiIsCkBAIC0y NzUsNyArMjcxLDcgQEAKIAl9CiAKIAotCXRjcHN0YXQudGNwc19yY3Z0b3RhbCsrOworCVNUQVQo cy0+dGNwc3RhdC50Y3BzX3JjdnRvdGFsKyspOwogCS8qCiAJICogR2V0IElQIGFuZCBUQ1AgaGVh ZGVyIHRvZ2V0aGVyIGluIGZpcnN0IG1idWYuCiAJICogTm90ZTogSVAgbGVhdmVzIElQIGhlYWRl ciBpbiBmaXJzdCBtYnVmLgpAQCAtMzAwLDcgKzI5Niw4IEBACiAJICogQ2hlY2tzdW0gZXh0ZW5k ZWQgVENQIGhlYWRlciBhbmQgZGF0YS4KIAkgKi8KIAl0bGVuID0gKChzdHJ1Y3QgaXAgKil0aSkt PmlwX2xlbjsKLQl0aS0+dGlfbmV4dCA9IHRpLT50aV9wcmV2ID0gMDsKKwl0aV9zZXRfbmV4dChz LCB0aSwgTlVMTCk7CisgICAgICAgIHRpX3NldF9wcmV2KHMsIHRpLCBOVUxMKTsKIAl0aS0+dGlf eDEgPSAwOwogCXRpLT50aV9sZW4gPSBodG9ucygodV9pbnQxNl90KXRsZW4pOwogCWxlbiA9IHNp emVvZihzdHJ1Y3QgaXAgKSArIHRsZW47CkBAIC0zMDgsNyArMzA1LDcgQEAKIAkgKiB0aS0+dGlf c3VtID0gY2tzdW0obSwgbGVuKTsKIAkgKiBpZiAodGktPnRpX3N1bSkgeyAqLwogCWlmKGNrc3Vt KG0sIGxlbikpIHsKLQkgIHRjcHN0YXQudGNwc19yY3ZiYWRzdW0rKzsKKwkgIFNUQVQocy0+dGNw c3RhdC50Y3BzX3JjdmJhZHN1bSsrKTsKIAkgIGdvdG8gZHJvcDsKIAl9CiAKQEAgLTMxOCw3ICsz MTUsNyBAQAogCSAqLwogCW9mZiA9IHRpLT50aV9vZmYgPDwgMjsKIAlpZiAob2ZmIDwgc2l6ZW9m IChzdHJ1Y3QgdGNwaGRyKSB8fCBvZmYgPiB0bGVuKSB7Ci0JICB0Y3BzdGF0LnRjcHNfcmN2YmFk b2ZmKys7CisJICBTVEFUKHMtPnRjcHN0YXQudGNwc19yY3ZiYWRvZmYrKyk7CiAJICBnb3RvIGRy b3A7CiAJfQogCXRsZW4gLT0gb2ZmOwpAQCAtMzY2LDE2ICszNjMsMTYgQEAKIAkgKiBMb2NhdGUg cGNiIGZvciBzZWdtZW50LgogCSAqLwogZmluZHNvOgotCXNvID0gdGNwX2xhc3Rfc287CisJc28g PSBzLT50Y3BfbGFzdF9zbzsKIAlpZiAoc28tPnNvX2Zwb3J0ICE9IHRpLT50aV9kcG9ydCB8fAog CSAgICBzby0+c29fbHBvcnQgIT0gdGktPnRpX3Nwb3J0IHx8CiAJICAgIHNvLT5zb19sYWRkci5z X2FkZHIgIT0gdGktPnRpX3NyYy5zX2FkZHIgfHwKIAkgICAgc28tPnNvX2ZhZGRyLnNfYWRkciAh PSB0aS0+dGlfZHN0LnNfYWRkcikgewotCQlzbyA9IHNvbG9va3VwKCZ0Y2IsIHRpLT50aV9zcmMs IHRpLT50aV9zcG9ydCwKKwkJc28gPSBzb2xvb2t1cCgmcy0+dGNiLCB0aS0+dGlfc3JjLCB0aS0+ dGlfc3BvcnQsCiAJCQkgICAgICAgdGktPnRpX2RzdCwgdGktPnRpX2Rwb3J0KTsKIAkJaWYgKHNv KQotCQkJdGNwX2xhc3Rfc28gPSBzbzsKLQkJKyt0Y3BzdGF0LnRjcHNfc29jYWNoZW1pc3M7CisJ CQlzLT50Y3BfbGFzdF9zbyA9IHNvOworCQlTVEFUKHMtPnRjcHN0YXQudGNwc19zb2NhY2hlbWlz cysrKTsKIAl9CiAKIAkvKgpAQCAtMzk3LDEzICszOTQsMTMgQEAKIAogCSAgaWYgKChzbyA9IHNv Y3JlYXRlKCkpID09IE5VTEwpCiAJICAgIGdvdG8gZHJvcHdpdGhyZXNldDsKLQkgIGlmICh0Y3Bf YXR0YWNoKHNvKSA8IDApIHsKKwkgIGlmICh0Y3BfYXR0YWNoKHMsIHNvKSA8IDApIHsKIAkgICAg ZnJlZShzbyk7IC8qIE5vdCBzb2ZyZWUgKGlmIGl0IGZhaWxlZCwgaXQncyBub3QgaW5zcXVlZCkg Ki8KIAkgICAgZ290byBkcm9wd2l0aHJlc2V0OwogCSAgfQogCi0JICBzYnJlc2VydmUoJnNvLT5z b19zbmQsIHRjcF9zbmRzcGFjZSk7Ci0JICBzYnJlc2VydmUoJnNvLT5zb19yY3YsIHRjcF9yY3Zz cGFjZSk7CisJICBzYnJlc2VydmUoJnNvLT5zb19zbmQsIFRDUF9TTkRTUEFDRSk7CisJICBzYnJl c2VydmUoJnNvLT5zb19yY3YsIFRDUF9SQ1ZTUEFDRSk7CiAKIAkgIC8qCQl0Y3BfbGFzdF9zbyA9 IHNvOyAqLyAgLyogWFhYID8gKi8KIAkgIC8qCQl0cCA9IHNvdG90Y3BjYihzbyk7ICAgICovCkBA IC00NDgsMTcgKzQ0NSwxNyBAQAogCSAqIFJlc2V0IGlkbGUgdGltZSBhbmQga2VlcC1hbGl2ZSB0 aW1lci4KIAkgKi8KIAl0cC0+dF9pZGxlID0gMDsKLQlpZiAoc29fb3B0aW9ucykKLQkgICB0cC0+ dF90aW1lcltUQ1BUX0tFRVBdID0gdGNwX2tlZXBpbnR2bDsKKwlpZiAoU09fT1BUSU9OUykKKwkg ICB0cC0+dF90aW1lcltUQ1BUX0tFRVBdID0gVENQVFZfS0VFUElOVFZMOwogCWVsc2UKLQkgICB0 cC0+dF90aW1lcltUQ1BUX0tFRVBdID0gdGNwX2tlZXBpZGxlOworCSAgIHRwLT50X3RpbWVyW1RD UFRfS0VFUF0gPSBUQ1BUVl9LRUVQX0lETEU7CiAKIAkvKgogCSAqIFByb2Nlc3Mgb3B0aW9ucyBp ZiBub3QgaW4gTElTVEVOIHN0YXRlLAogCSAqIGVsc2UgZG8gaXQgYmVsb3cgKGFmdGVyIGdldHRp bmcgcmVtb3RlIGFkZHJlc3MpLgogCSAqLwogCWlmIChvcHRwICYmIHRwLT50X3N0YXRlICE9IFRD UFNfTElTVEVOKQotCQl0Y3BfZG9vcHRpb25zKHRwLCAodV9jaGFyICopb3B0cCwgb3B0bGVuLCB0 aSk7CisJCXRjcF9kb29wdGlvbnMocywgdHAsICh1X2NoYXIgKilvcHRwLCBvcHRsZW4sIHRpKTsK IC8qICwgKi8KIC8qCQkJJnRzX3ByZXNlbnQsICZ0c192YWwsICZ0c19lY3IpOyAqLwogCkBAIC01 MDMsMTkgKzUwMCwyMCBAQAogCQkJCS8qCiAJCQkJICogdGhpcyBpcyBhIHB1cmUgYWNrIGZvciBv dXRzdGFuZGluZyBkYXRhLgogCQkJCSAqLwotCQkJCSsrdGNwc3RhdC50Y3BzX3ByZWRhY2s7CisJ CQkJU1RBVChzLT50Y3BzdGF0LnRjcHNfcHJlZGFjaysrKTsKKzsKIC8qCQkJCWlmICh0c19wcmVz ZW50KQogICoJCQkJCXRjcF94bWl0X3RpbWVyKHRwLCB0Y3Bfbm93LXRzX2VjcisxKTsKICAqCQkJ CWVsc2UKICAqLwkJCQkgICAgIGlmICh0cC0+dF9ydHQgJiYKIAkJCQkJICAgIFNFUV9HVCh0aS0+ dGlfYWNrLCB0cC0+dF9ydHNlcSkpCi0JCQkJCXRjcF94bWl0X3RpbWVyKHRwLCB0cC0+dF9ydHQp OworCQkJCQl0Y3BfeG1pdF90aW1lcihzLCB0cCwgdHAtPnRfcnR0KTsKIAkJCQlhY2tlZCA9IHRp LT50aV9hY2sgLSB0cC0+c25kX3VuYTsKLQkJCQl0Y3BzdGF0LnRjcHNfcmN2YWNrcGFjaysrOwot CQkJCXRjcHN0YXQudGNwc19yY3ZhY2tieXRlICs9IGFja2VkOworCQkJCVNUQVQocy0+dGNwc3Rh dC50Y3BzX3JjdmFja3BhY2srKyk7CisJCQkJU1RBVChzLT50Y3BzdGF0LnRjcHNfcmN2YWNrYnl0 ZSArPSBhY2tlZCk7CiAJCQkJc2Jkcm9wKCZzby0+c29fc25kLCBhY2tlZCk7CiAJCQkJdHAtPnNu ZF91bmEgPSB0aS0+dGlfYWNrOwotCQkJCW1fZnJlZW0obSk7CisJCQkJbV9mcmVlbShzLCBtKTsK IAogCQkJCS8qCiAJCQkJICogSWYgYWxsIG91dHN0YW5kaW5nIGRhdGEgYXJlIGFja2VkLCBzdG9w CkBAIC01NDQsMjkgKzU0MiwzMCBAQAogCQkJCSAqIHdlIGRvbid0IG5lZWQgdGhpcy4uIFhYWD8/ PwogCQkJCSAqLwogCQkJCWlmIChzby0+c29fc25kLnNiX2NjKQotCQkJCQkodm9pZCkgdGNwX291 dHB1dCh0cCk7CisJCQkJCSh2b2lkKSB0Y3Bfb3V0cHV0KHMsIHRwKTsKIAogCQkJCXJldHVybjsK IAkJCX0KIAkJfSBlbHNlIGlmICh0aS0+dGlfYWNrID09IHRwLT5zbmRfdW5hICYmCi0JCSAgICB0 cC0+c2VnX25leHQgPT0gKHRjcGlwaGRycF8zMil0cCAmJgorCQkgICAgdGNwY2JfZ2V0X25leHQo dHApID09IHRwICYmCiAJCSAgICB0aS0+dGlfbGVuIDw9IHNic3BhY2UoJnNvLT5zb19yY3YpKSB7 CiAJCQkvKgogCQkJICogdGhpcyBpcyBhIHB1cmUsIGluLXNlcXVlbmNlIGRhdGEgcGFja2V0CiAJ CQkgKiB3aXRoIG5vdGhpbmcgb24gdGhlIHJlYXNzZW1ibHkgcXVldWUgYW5kCiAJCQkgKiB3ZSBo YXZlIGVub3VnaCBidWZmZXIgc3BhY2UgdG8gdGFrZSBpdC4KIAkJCSAqLwotCQkJKyt0Y3BzdGF0 LnRjcHNfcHJlZGRhdDsKKwkJCVNUQVQocy0+dGNwc3RhdC50Y3BzX3ByZWRkYXQrKyk7CiAJCQl0 cC0+cmN2X254dCArPSB0aS0+dGlfbGVuOwotCQkJdGNwc3RhdC50Y3BzX3JjdnBhY2srKzsKLQkJ CXRjcHN0YXQudGNwc19yY3ZieXRlICs9IHRpLT50aV9sZW47CisJCQlTVEFUKHMtPnRjcHN0YXQu dGNwc19yY3ZwYWNrKyspOworCQkJU1RBVChzLT50Y3BzdGF0LnRjcHNfcmN2Ynl0ZSArPSB0aS0+ dGlfbGVuKTsKIAkJCS8qCiAJCQkgKiBBZGQgZGF0YSB0byBzb2NrZXQgYnVmZmVyLgogCQkJICov CiAJCQlpZiAoc28tPnNvX2VtdSkgewotCQkJCWlmICh0Y3BfZW11KHNvLG0pKSBzYmFwcGVuZChz bywgbSk7CisJCQkJaWYgKHRjcF9lbXUocywgc28sbSkpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzYmFwcGVuZChzLCBzbywgbSk7CiAJCQl9IGVsc2UKLQkJCQlzYmFwcGVu ZChzbywgbSk7CisJCQkJc2JhcHBlbmQocywgc28sIG0pOwogCiAJCQkvKgogCQkJICogWFhYIFRo aXMgaXMgY2FsbGVkIHdoZW4gZGF0YSBhcnJpdmVzLiAgTGF0ZXIsIGNoZWNrCkBAIC01ODQsNyAr NTgzLDcgQEAKIAkJCSAqIFRDUCB0aHJvdWdocHV0LiAgU2VlIFJGQyAyNTgxLgogCQkJICovCiAJ CQl0cC0+dF9mbGFncyB8PSBURl9BQ0tOT1c7Ci0JCQl0Y3Bfb3V0cHV0KHRwKTsKKwkJCXRjcF9v dXRwdXQocywgdHApOwogCQkJcmV0dXJuOwogCQl9CiAJfSAvKiBoZWFkZXIgcHJlZGljdGlvbiAq LwpAQCAtNjM0LDcgKzYzMyw4IEBACiAJICAgKiBJZiB0aGlzIGlzIGRlc3RpbmVkIGZvciB0aGUg Y29udHJvbCBhZGRyZXNzLCB0aGVuIGZsYWcgdG8KIAkgICAqIHRjcF9jdGwgb25jZSBjb25uZWN0 ZWQsIG90aGVyd2lzZSBjb25uZWN0CiAJICAgKi8KLQkgIGlmICgoc28tPnNvX2ZhZGRyLnNfYWRk ciZodG9ubCgweGZmZmZmZjAwKSkgPT0gc3BlY2lhbF9hZGRyLnNfYWRkcikgeworCSAgaWYgKChz by0+c29fZmFkZHIuc19hZGRyICYgaHRvbmwoMHhmZmZmZmYwMCkpID09CisgICAgICAgICAgICAg IHMtPnNwZWNpYWxfYWRkci5zX2FkZHIpIHsKIAkgICAgaW50IGxhc3RieXRlPW50b2hsKHNvLT5z b19mYWRkci5zX2FkZHIpICYgMHhmZjsKIAkgICAgaWYgKGxhc3RieXRlIT1DVExfQUxJQVMgJiYg bGFzdGJ5dGUhPUNUTF9ETlMpIHsKICNpZiAwCkBAIC02NDYsNyArNjQ2LDcgQEAKICAgICAgICAg ICAgICAgewogCQkvKiBNYXkgYmUgYW4gYWRkIGV4ZWMgKi8KIAkJc3RydWN0IGV4X2xpc3QgKmV4 X3B0cjsKLQkJZm9yKGV4X3B0ciA9IGV4ZWNfbGlzdDsgZXhfcHRyOyBleF9wdHIgPSBleF9wdHIt PmV4X25leHQpIHsKKwkJZm9yKGV4X3B0ciA9IHMtPmV4ZWNfbGlzdDsgZXhfcHRyOyBleF9wdHIg PSBleF9wdHItPmV4X25leHQpIHsKIAkJICBpZihleF9wdHItPmV4X2Zwb3J0ID09IHNvLT5zb19m cG9ydCAmJgogCQkgICAgIGxhc3RieXRlID09IGV4X3B0ci0+ZXhfYWRkcikgewogCQkgICAgc28t PnNvX3N0YXRlIHw9IFNTX0NUTDsKQEAgLTY2NCwxMyArNjY0LDE0IEBACiAJICAgIGdvdG8gY29u dF9pbnB1dDsKIAkgIH0KIAotCSAgaWYoKHRjcF9mY29ubmVjdChzbykgPT0gLTEpICYmIChlcnJu byAhPSBFSU5QUk9HUkVTUykgJiYgKGVycm5vICE9IEVXT1VMREJMT0NLKSkgeworCSAgaWYgKCh0 Y3BfZmNvbm5lY3Qocywgc28pID09IC0xKSAmJiAoZXJybm8gIT0gRUlOUFJPR1JFU1MpCisgICAg ICAgICAgICAgICYmIChlcnJubyAhPSBFV09VTERCTE9DSykpIHsKIAkgICAgdV9jaGFyIGNvZGU9 SUNNUF9VTlJFQUNIX05FVDsKIAkgICAgREVCVUdfTUlTQygoZGZkLCIgdGNwIGZjb25uZWN0IGVy cm5vID0gJWQtJXNcbiIsCiAJCQllcnJubyxzdHJlcnJvcihlcnJubykpKTsKIAkgICAgaWYoZXJy bm8gPT0gRUNPTk5SRUZVU0VEKSB7CiAJICAgICAgLyogQUNLIHRoZSBTWU4sIHNlbmQgUlNUIHRv IHJlZnVzZSB0aGUgY29ubmVjdGlvbiAqLwotCSAgICAgIHRjcF9yZXNwb25kKHRwLCB0aSwgbSwg dGktPnRpX3NlcSsxLCAodGNwX3NlcSkwLAorCSAgICAgIHRjcF9yZXNwb25kKHMsIHRwLCB0aSwg bSwgdGktPnRpX3NlcSsxLCAodGNwX3NlcSkwLAogCQkJICBUSF9SU1R8VEhfQUNLKTsKIAkgICAg fSBlbHNlIHsKIAkgICAgICBpZihlcnJubyA9PSBFSE9TVFVOUkVBQ0gpIGNvZGU9SUNNUF9VTlJF QUNIX0hPU1Q7CkBAIC02ODEsMTAgKzY4MiwxMCBAQAogCSAgICAgIG0tPm1fZGF0YSAtPSBzaXpl b2Yoc3RydWN0IHRjcGlwaGRyKStvZmYtc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCSAgICAgIG0t Pm1fbGVuICArPSBzaXplb2Yoc3RydWN0IHRjcGlwaGRyKStvZmYtc2l6ZW9mKHN0cnVjdCB0Y3Bo ZHIpOwogCSAgICAgICppcD1zYXZlX2lwOwotCSAgICAgIGljbXBfZXJyb3IobSwgSUNNUF9VTlJF QUNILGNvZGUsIDAsc3RyZXJyb3IoZXJybm8pKTsKKwkgICAgICBpY21wX2Vycm9yKHMsIG0sIElD TVBfVU5SRUFDSCwgY29kZSwgMCwgc3RyZXJyb3IoZXJybm8pKTsKIAkgICAgfQotCSAgICB0cCA9 IHRjcF9jbG9zZSh0cCk7Ci0JICAgIG1fZnJlZShtKTsKKwkgICAgdHAgPSB0Y3BfY2xvc2Uocywg dHApOworCSAgICBtX2ZyZWUocywgbSk7CiAJICB9IGVsc2UgewogCSAgICAvKgogCSAgICAgKiBI YXZlbid0IGNvbm5lY3RlZCB5ZXQsIHNhdmUgdGhlIGN1cnJlbnQgbWJ1ZgpAQCAtNzA0LDI5ICs3 MDUsMjkgQEAKIAkgICAqIENoZWNrIGlmIHRoZSBjb25uZWN0IHN1Y2NlZWRlZAogCSAgICovCiAJ ICBpZiAoc28tPnNvX3N0YXRlICYgU1NfTk9GRFJFRikgewotCSAgICB0cCA9IHRjcF9jbG9zZSh0 cCk7CisJICAgIHRwID0gdGNwX2Nsb3NlKHMsIHRwKTsKIAkgICAgZ290byBkcm9wd2l0aHJlc2V0 OwogCSAgfQogCWNvbnRfaW5wdXQ6Ci0JICB0Y3BfdGVtcGxhdGUodHApOworCSAgdGNwX3RlbXBs YXRlKHMsIHRwKTsKIAogCSAgaWYgKG9wdHApCi0JICAgIHRjcF9kb29wdGlvbnModHAsICh1X2No YXIgKilvcHRwLCBvcHRsZW4sIHRpKTsKKwkgICAgdGNwX2Rvb3B0aW9ucyhzLCB0cCwgKHVfY2hh ciAqKW9wdHAsIG9wdGxlbiwgdGkpOwogCSAgLyogLCAqLwogCSAgLyoJCQkJJnRzX3ByZXNlbnQs ICZ0c192YWwsICZ0c19lY3IpOyAqLwogCiAJICBpZiAoaXNzKQogCSAgICB0cC0+aXNzID0gaXNz OwogCSAgZWxzZQotCSAgICB0cC0+aXNzID0gdGNwX2lzczsKLQkgIHRjcF9pc3MgKz0gVENQX0lT U0lOQ1IvMjsKKwkgICAgdHAtPmlzcyA9IHMtPnRjcF9pc3M7CisJICBzLT50Y3BfaXNzICs9IFRD UF9JU1NJTkNSIC8gMjsKIAkgIHRwLT5pcnMgPSB0aS0+dGlfc2VxOwogCSAgdGNwX3NlbmRzZXFp bml0KHRwKTsKIAkgIHRjcF9yY3ZzZXFpbml0KHRwKTsKIAkgIHRwLT50X2ZsYWdzIHw9IFRGX0FD S05PVzsKIAkgIHRwLT50X3N0YXRlID0gVENQU19TWU5fUkVDRUlWRUQ7CiAJICB0cC0+dF90aW1l cltUQ1BUX0tFRVBdID0gVENQVFZfS0VFUF9JTklUOwotCSAgdGNwc3RhdC50Y3BzX2FjY2VwdHMr KzsKKwkgIFNUQVQocy0+dGNwc3RhdC50Y3BzX2FjY2VwdHMrKyk7CiAJICBnb3RvIHRyaW10aGVu c3RlcDY7CiAJfSAvKiBjYXNlIFRDUFNfTElTVEVOICovCiAKQEAgLTc1MCw3ICs3NTEsNyBAQAog CiAJCWlmICh0aWZsYWdzICYgVEhfUlNUKSB7CiAJCQlpZiAodGlmbGFncyAmIFRIX0FDSykKLQkJ CQl0cCA9IHRjcF9kcm9wKHRwLDApOyAvKiBYWFggQ2hlY2sgdF9zb2Z0ZXJyb3IhICovCisJCQkJ dHAgPSB0Y3BfZHJvcChzLCB0cCwgMCk7IC8qIFhYWCBDaGVjayB0X3NvZnRlcnJvciEgKi8KIAkJ CWdvdG8gZHJvcDsKIAkJfQogCkBAIC03NjcsNyArNzY4LDcgQEAKIAkJdGNwX3JjdnNlcWluaXQo dHApOwogCQl0cC0+dF9mbGFncyB8PSBURl9BQ0tOT1c7CiAJCWlmICh0aWZsYWdzICYgVEhfQUNL ICYmIFNFUV9HVCh0cC0+c25kX3VuYSwgdHAtPmlzcykpIHsKLQkJCXRjcHN0YXQudGNwc19jb25u ZWN0cysrOworCQkJU1RBVChzLT50Y3BzdGF0LnRjcHNfY29ubmVjdHMrKyk7CiAJCQlzb2lzZmNv bm5lY3RlZChzbyk7CiAJCQl0cC0+dF9zdGF0ZSA9IFRDUFNfRVNUQUJMSVNIRUQ7CiAKQEAgLTc3 OCwxNCArNzc5LDE0IEBACiAgKgkJCQl0cC0+cmN2X3NjYWxlID0gdHAtPnJlcXVlc3Rfcl9zY2Fs ZTsKICAqCQkJfQogICovCi0JCQkodm9pZCkgdGNwX3JlYXNzKHRwLCAoc3RydWN0IHRjcGlwaGRy ICopMCwKKwkJCSh2b2lkKSB0Y3BfcmVhc3MocywgdHAsIChzdHJ1Y3QgdGNwaXBoZHIgKikwLAog CQkJCShzdHJ1Y3QgbWJ1ZiAqKTApOwogCQkJLyoKIAkJCSAqIGlmIHdlIGRpZG4ndCBoYXZlIHRv IHJldHJhbnNtaXQgdGhlIFNZTiwKIAkJCSAqIHVzZSBpdHMgcnR0IGFzIG91ciBpbml0aWFsIHNy dHQgJiBydHQgdmFyLgogCQkJICovCiAJCQlpZiAodHAtPnRfcnR0KQotCQkJCXRjcF94bWl0X3Rp bWVyKHRwLCB0cC0+dF9ydHQpOworCQkJCXRjcF94bWl0X3RpbWVyKHMsIHRwLCB0cC0+dF9ydHQp OwogCQl9IGVsc2UKIAkJCXRwLT50X3N0YXRlID0gVENQU19TWU5fUkVDRUlWRUQ7CiAKQEAgLTgw MSw4ICs4MDIsOCBAQAogCQkJbV9hZGoobSwgLXRvZHJvcCk7CiAJCQl0aS0+dGlfbGVuID0gdHAt PnJjdl93bmQ7CiAJCQl0aWZsYWdzICY9IH5USF9GSU47Ci0JCQl0Y3BzdGF0LnRjcHNfcmN2cGFj a2FmdGVyd2luKys7Ci0JCQl0Y3BzdGF0LnRjcHNfcmN2Ynl0ZWFmdGVyd2luICs9IHRvZHJvcDsK KwkJCVNUQVQocy0+dGNwc3RhdC50Y3BzX3JjdnBhY2thZnRlcndpbisrKTsKKwkJCVNUQVQocy0+ dGNwc3RhdC50Y3BzX3JjdmJ5dGVhZnRlcndpbiArPSB0b2Ryb3ApOwogCQl9CiAJCXRwLT5zbmRf d2wxID0gdGktPnRpX3NlcSAtIDE7CiAJCXRwLT5yY3ZfdXAgPSB0aS0+dGlfc2VxOwpAQCAtODcz LDExICs4NzQsMTEgQEAKIAkJCSAqLwogCQkJdHAtPnRfZmxhZ3MgfD0gVEZfQUNLTk9XOwogCQkJ dG9kcm9wID0gdGktPnRpX2xlbjsKLQkJCXRjcHN0YXQudGNwc19yY3ZkdXBwYWNrKys7Ci0JCQl0 Y3BzdGF0LnRjcHNfcmN2ZHVwYnl0ZSArPSB0b2Ryb3A7CisJCQlTVEFUKHMtPnRjcHN0YXQudGNw c19yY3ZkdXBwYWNrKyspOworCQkJU1RBVChzLT50Y3BzdGF0LnRjcHNfcmN2ZHVwYnl0ZSArPSB0 b2Ryb3ApOwogCQl9IGVsc2UgewotCQkJdGNwc3RhdC50Y3BzX3JjdnBhcnRkdXBwYWNrKys7Ci0J CQl0Y3BzdGF0LnRjcHNfcmN2cGFydGR1cGJ5dGUgKz0gdG9kcm9wOworCQkJU1RBVChzLT50Y3Bz dGF0LnRjcHNfcmN2cGFydGR1cHBhY2srKyk7CisJCQlTVEFUKHMtPnRjcHN0YXQudGNwc19yY3Zw YXJ0ZHVwYnl0ZSArPSB0b2Ryb3ApOwogCQl9CiAJCW1fYWRqKG0sIHRvZHJvcCk7CiAJCXRpLT50 aV9zZXEgKz0gdG9kcm9wOwpAQCAtODk1LDggKzg5Niw4IEBACiAJICovCiAJaWYgKChzby0+c29f c3RhdGUgJiBTU19OT0ZEUkVGKSAmJgogCSAgICB0cC0+dF9zdGF0ZSA+IFRDUFNfQ0xPU0VfV0FJ VCAmJiB0aS0+dGlfbGVuKSB7Ci0JCXRwID0gdGNwX2Nsb3NlKHRwKTsKLQkJdGNwc3RhdC50Y3Bz X3JjdmFmdGVyY2xvc2UrKzsKKwkJdHAgPSB0Y3BfY2xvc2UocywgdHApOworCQlTVEFUKHMtPnRj cHN0YXQudGNwc19yY3ZhZnRlcmNsb3NlKyspOwogCQlnb3RvIGRyb3B3aXRocmVzZXQ7CiAJfQog CkBAIC05MDYsOSArOTA3LDkgQEAKIAkgKi8KIAl0b2Ryb3AgPSAodGktPnRpX3NlcSt0aS0+dGlf bGVuKSAtICh0cC0+cmN2X254dCt0cC0+cmN2X3duZCk7CiAJaWYgKHRvZHJvcCA+IDApIHsKLQkJ dGNwc3RhdC50Y3BzX3JjdnBhY2thZnRlcndpbisrOworCQlTVEFUKHMtPnRjcHN0YXQudGNwc19y Y3ZwYWNrYWZ0ZXJ3aW4rKyk7CiAJCWlmICh0b2Ryb3AgPj0gdGktPnRpX2xlbikgewotCQkJdGNw c3RhdC50Y3BzX3JjdmJ5dGVhZnRlcndpbiArPSB0aS0+dGlfbGVuOworCQkJU1RBVChzLT50Y3Bz dGF0LnRjcHNfcmN2Ynl0ZWFmdGVyd2luICs9IHRpLT50aV9sZW4pOwogCQkJLyoKIAkJCSAqIElm IGEgbmV3IGNvbm5lY3Rpb24gcmVxdWVzdCBpcyByZWNlaXZlZAogCQkJICogd2hpbGUgaW4gVElN RV9XQUlULCBkcm9wIHRoZSBvbGQgY29ubmVjdGlvbgpAQCAtOTE5LDcgKzkyMCw3IEBACiAJCQkg ICAgdHAtPnRfc3RhdGUgPT0gVENQU19USU1FX1dBSVQgJiYKIAkJCSAgICBTRVFfR1QodGktPnRp X3NlcSwgdHAtPnJjdl9ueHQpKSB7CiAJCQkJaXNzID0gdHAtPnJjdl9ueHQgKyBUQ1BfSVNTSU5D UjsKLQkJCQl0cCA9IHRjcF9jbG9zZSh0cCk7CisJCQkJdHAgPSB0Y3BfY2xvc2UocywgdHApOwog CQkJCWdvdG8gZmluZHNvOwogCQkJfQogCQkJLyoKQEAgLTkzMSwxMSArOTMyLDExIEBACiAJCQkg Ki8KIAkJCWlmICh0cC0+cmN2X3duZCA9PSAwICYmIHRpLT50aV9zZXEgPT0gdHAtPnJjdl9ueHQp IHsKIAkJCQl0cC0+dF9mbGFncyB8PSBURl9BQ0tOT1c7Ci0JCQkJdGNwc3RhdC50Y3BzX3Jjdndp bnByb2JlKys7CisJCQkJU1RBVChzLT50Y3BzdGF0LnRjcHNfcmN2d2lucHJvYmUrKyk7CiAJCQl9 IGVsc2UKIAkJCQlnb3RvIGRyb3BhZnRlcmFjazsKIAkJfSBlbHNlCi0JCQl0Y3BzdGF0LnRjcHNf cmN2Ynl0ZWFmdGVyd2luICs9IHRvZHJvcDsKKwkJCVNUQVQocy0+dGNwc3RhdC50Y3BzX3JjdmJ5 dGVhZnRlcndpbiArPSB0b2Ryb3ApOwogCQltX2FkaihtLCAtdG9kcm9wKTsKIAkJdGktPnRpX2xl biAtPSB0b2Ryb3A7CiAJCXRpZmxhZ3MgJj0gfihUSF9QVVNIfFRIX0ZJTik7CkBAIC05NzYsMTQg Kzk3NywxNCBAQAogLyoJCXNvLT5zb19lcnJvciA9IEVDT05OUkVTRVQ7ICovCiAJY2xvc2U6CiAJ CXRwLT50X3N0YXRlID0gVENQU19DTE9TRUQ7Ci0JCXRjcHN0YXQudGNwc19kcm9wcysrOwotCQl0 cCA9IHRjcF9jbG9zZSh0cCk7CisJCVNUQVQocy0+dGNwc3RhdC50Y3BzX2Ryb3BzKyspOworCQl0 cCA9IHRjcF9jbG9zZShzLCB0cCk7CiAJCWdvdG8gZHJvcDsKIAogCWNhc2UgVENQU19DTE9TSU5H OgogCWNhc2UgVENQU19MQVNUX0FDSzoKIAljYXNlIFRDUFNfVElNRV9XQUlUOgotCQl0cCA9IHRj cF9jbG9zZSh0cCk7CisJCXRwID0gdGNwX2Nsb3NlKHMsIHRwKTsKIAkJZ290byBkcm9wOwogCX0K IApAQCAtOTkyLDcgKzk5Myw3IEBACiAJICogZXJyb3IgYW5kIHdlIHNlbmQgYW4gUlNUIGFuZCBk cm9wIHRoZSBjb25uZWN0aW9uLgogCSAqLwogCWlmICh0aWZsYWdzICYgVEhfU1lOKSB7Ci0JCXRw ID0gdGNwX2Ryb3AodHAsMCk7CisJCXRwID0gdGNwX2Ryb3AocywgdHAsIDApOwogCQlnb3RvIGRy b3B3aXRocmVzZXQ7CiAJfQogCkBAIC0xMDE1LDcgKzEwMTYsNyBAQAogCQlpZiAoU0VRX0dUKHRw LT5zbmRfdW5hLCB0aS0+dGlfYWNrKSB8fAogCQkgICAgU0VRX0dUKHRpLT50aV9hY2ssIHRwLT5z bmRfbWF4KSkKIAkJCWdvdG8gZHJvcHdpdGhyZXNldDsKLQkJdGNwc3RhdC50Y3BzX2Nvbm5lY3Rz Kys7CisJCVNUQVQocy0+dGNwc3RhdC50Y3BzX2Nvbm5lY3RzKyspOwogCQl0cC0+dF9zdGF0ZSA9 IFRDUFNfRVNUQUJMSVNIRUQ7CiAJCS8qCiAJCSAqIFRoZSBzZW50IFNZTiBpcyBhY2snZWQgd2l0 aCBvdXIgc2VxdWVuY2UgbnVtYmVyICsxCkBAIC0xMDI3LDcgKzEwMjgsNyBAQAogCQl0cC0+c25k X3VuYT10aS0+dGlfYWNrOwogCQlpZiAoc28tPnNvX3N0YXRlICYgU1NfQ1RMKSB7CiAJCSAgLyog U28gdGNwX2N0bCByZXBvcnRzIHRoZSByaWdodCBzdGF0ZSAqLwotCQkgIHJldCA9IHRjcF9jdGwo c28pOworCQkgIHJldCA9IHRjcF9jdGwocywgc28pOwogCQkgIGlmIChyZXQgPT0gMSkgewogCQkg ICAgc29pc2Zjb25uZWN0ZWQoc28pOwogCQkgICAgc28tPnNvX3N0YXRlICY9IH5TU19DVEw7ICAg Lyogc3VjY2VzcyBYWFggKi8KQEAgLTEwNDgsNyArMTA0OSw3IEBACiAgKgkJCXRwLT5yY3Zfc2Nh bGUgPSB0cC0+cmVxdWVzdF9yX3NjYWxlOwogICoJCX0KICAqLwotCQkodm9pZCkgdGNwX3JlYXNz KHRwLCAoc3RydWN0IHRjcGlwaGRyICopMCwgKHN0cnVjdCBtYnVmICopMCk7CisJCSh2b2lkKSB0 Y3BfcmVhc3MocywgdHAsIChzdHJ1Y3QgdGNwaXBoZHIgKikwLCAoc3RydWN0IG1idWYgKikwKTsK IAkJdHAtPnNuZF93bDEgPSB0aS0+dGlfc2VxIC0gMTsKIAkJLyogQXZvaWQgYWNrIHByb2Nlc3Np bmc7IHNuZF91bmE9PXRpX2FjayAgPT4gIGR1cCBhY2sgKi8KIAkJZ290byBzeW5yeF90b19lc3Q7 CkBAIC0xMDcyLDcgKzEwNzMsNyBAQAogCiAJCWlmIChTRVFfTEVRKHRpLT50aV9hY2ssIHRwLT5z bmRfdW5hKSkgewogCQkJaWYgKHRpLT50aV9sZW4gPT0gMCAmJiB0aXdpbiA9PSB0cC0+c25kX3du ZCkgewotCQkJICB0Y3BzdGF0LnRjcHNfcmN2ZHVwYWNrKys7CisJCQkgIFNUQVQocy0+dGNwc3Rh dC50Y3BzX3JjdmR1cGFjaysrKTsKIAkJCSAgREVCVUdfTUlTQygoZGZkLCIgZHVwIGFjayAgbSA9 ICVseCAgc28gPSAlbHggXG4iLAogCQkJCSAgICAgIChsb25nICltLCAobG9uZyApc28pKTsKIAkJ CQkvKgpAQCAtMTEwMiw3ICsxMTAzLDcgQEAKIAkJCQlpZiAodHAtPnRfdGltZXJbVENQVF9SRVhN VF0gPT0gMCB8fAogCQkJCSAgICB0aS0+dGlfYWNrICE9IHRwLT5zbmRfdW5hKQogCQkJCQl0cC0+ dF9kdXBhY2tzID0gMDsKLQkJCQllbHNlIGlmICgrK3RwLT50X2R1cGFja3MgPT0gdGNwcmV4bXR0 aHJlc2gpIHsKKwkJCQllbHNlIGlmICgrK3RwLT50X2R1cGFja3MgPT0gVENQUkVYTVRUSFJFU0gp IHsKIAkJCQkJdGNwX3NlcSBvbnh0ID0gdHAtPnNuZF9ueHQ7CiAJCQkJCXVfaW50IHdpbiA9CiAJ CQkJCSAgICBtaW4odHAtPnNuZF93bmQsIHRwLT5zbmRfY3duZCkgLyAyIC8KQEAgLTExMTUsMTUg KzExMTYsMTUgQEAKIAkJCQkJdHAtPnRfcnR0ID0gMDsKIAkJCQkJdHAtPnNuZF9ueHQgPSB0aS0+ dGlfYWNrOwogCQkJCQl0cC0+c25kX2N3bmQgPSB0cC0+dF9tYXhzZWc7Ci0JCQkJCSh2b2lkKSB0 Y3Bfb3V0cHV0KHRwKTsKKwkJCQkJKHZvaWQpIHRjcF9vdXRwdXQocywgdHApOwogCQkJCQl0cC0+ c25kX2N3bmQgPSB0cC0+c25kX3NzdGhyZXNoICsKIAkJCQkJICAgICAgIHRwLT50X21heHNlZyAq IHRwLT50X2R1cGFja3M7CiAJCQkJCWlmIChTRVFfR1Qob254dCwgdHAtPnNuZF9ueHQpKQogCQkJ CQkJdHAtPnNuZF9ueHQgPSBvbnh0OwogCQkJCQlnb3RvIGRyb3A7Ci0JCQkJfSBlbHNlIGlmICh0 cC0+dF9kdXBhY2tzID4gdGNwcmV4bXR0aHJlc2gpIHsKKwkJCQl9IGVsc2UgaWYgKHRwLT50X2R1 cGFja3MgPiBUQ1BSRVhNVFRIUkVTSCkgewogCQkJCQl0cC0+c25kX2N3bmQgKz0gdHAtPnRfbWF4 c2VnOwotCQkJCQkodm9pZCkgdGNwX291dHB1dCh0cCk7CisJCQkJCSh2b2lkKSB0Y3Bfb3V0cHV0 KHMsIHRwKTsKIAkJCQkJZ290byBkcm9wOwogCQkJCX0KIAkJCX0gZWxzZQpAQCAtMTEzNSwxNyAr MTEzNiwxNyBAQAogCQkgKiBJZiB0aGUgY29uZ2VzdGlvbiB3aW5kb3cgd2FzIGluZmxhdGVkIHRv IGFjY291bnQKIAkJICogZm9yIHRoZSBvdGhlciBzaWRlJ3MgY2FjaGVkIHBhY2tldHMsIHJldHJh Y3QgaXQuCiAJCSAqLwotCQlpZiAodHAtPnRfZHVwYWNrcyA+IHRjcHJleG10dGhyZXNoICYmCisJ CWlmICh0cC0+dF9kdXBhY2tzID4gVENQUkVYTVRUSFJFU0ggJiYKIAkJICAgIHRwLT5zbmRfY3du ZCA+IHRwLT5zbmRfc3N0aHJlc2gpCiAJCQl0cC0+c25kX2N3bmQgPSB0cC0+c25kX3NzdGhyZXNo OwogCQl0cC0+dF9kdXBhY2tzID0gMDsKIAkJaWYgKFNFUV9HVCh0aS0+dGlfYWNrLCB0cC0+c25k X21heCkpIHsKLQkJCXRjcHN0YXQudGNwc19yY3ZhY2t0b29tdWNoKys7CisJCQlTVEFUKHMtPnRj cHN0YXQudGNwc19yY3ZhY2t0b29tdWNoKyspOwogCQkJZ290byBkcm9wYWZ0ZXJhY2s7CiAJCX0K IAkJYWNrZWQgPSB0aS0+dGlfYWNrIC0gdHAtPnNuZF91bmE7Ci0JCXRjcHN0YXQudGNwc19yY3Zh Y2twYWNrKys7Ci0JCXRjcHN0YXQudGNwc19yY3ZhY2tieXRlICs9IGFja2VkOworCQlTVEFUKHMt PnRjcHN0YXQudGNwc19yY3ZhY2twYWNrKyspOworCQlTVEFUKHMtPnRjcHN0YXQudGNwc19yY3Zh Y2tieXRlICs9IGFja2VkKTsKIAogCQkvKgogCQkgKiBJZiB3ZSBoYXZlIGEgdGltZXN0YW1wIHJl cGx5LCB1cGRhdGUgc21vb3RoZWQKQEAgLTExNjEsNyArMTE2Miw3IEBACiAgKgkJZWxzZQogICov CiAJCSAgICAgaWYgKHRwLT50X3J0dCAmJiBTRVFfR1QodGktPnRpX2FjaywgdHAtPnRfcnRzZXEp KQotCQkJdGNwX3htaXRfdGltZXIodHAsdHAtPnRfcnR0KTsKKwkJCXRjcF94bWl0X3RpbWVyKHMs IHRwLCB0cC0+dF9ydHQpOwogCiAJCS8qCiAJCSAqIElmIGFsbCBvdXRzdGFuZGluZyBkYXRhIGlz IGFja2VkLCBzdG9wIHJldHJhbnNtaXQKQEAgLTEyMjcsNyArMTIyOCw3IEBACiAJCQkJICovCiAJ CQkJaWYgKHNvLT5zb19zdGF0ZSAmIFNTX0ZDQU5UUkNWTU9SRSkgewogCQkJCQlzb2lzZmRpc2Nv bm5lY3RlZChzbyk7Ci0JCQkJCXRwLT50X3RpbWVyW1RDUFRfMk1TTF0gPSB0Y3BfbWF4aWRsZTsK KwkJCQkJdHAtPnRfdGltZXJbVENQVF8yTVNMXSA9IFRDUF9NQVhJRExFOwogCQkJCX0KIAkJCQl0 cC0+dF9zdGF0ZSA9IFRDUFNfRklOX1dBSVRfMjsKIAkJCX0KQEAgLTEyNTYsNyArMTI1Nyw3IEBA CiAJCSAqLwogCQljYXNlIFRDUFNfTEFTVF9BQ0s6CiAJCQlpZiAob3VyZmluaXNhY2tlZCkgewot CQkJCXRwID0gdGNwX2Nsb3NlKHRwKTsKKwkJCQl0cCA9IHRjcF9jbG9zZShzLCB0cCk7CiAJCQkJ Z290byBkcm9wOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xMjg0LDcgKzEyODUsNyBAQAogCQkvKiBr ZWVwIHRyYWNrIG9mIHB1cmUgd2luZG93IHVwZGF0ZXMgKi8KIAkJaWYgKHRpLT50aV9sZW4gPT0g MCAmJgogCQkgICAgdHAtPnNuZF93bDIgPT0gdGktPnRpX2FjayAmJiB0aXdpbiA+IHRwLT5zbmRf d25kKQotCQkJdGNwc3RhdC50Y3BzX3JjdndpbnVwZCsrOworCQkJU1RBVChzLT50Y3BzdGF0LnRj cHNfcmN2d2ludXBkKyspOwogCQl0cC0+c25kX3duZCA9IHRpd2luOwogCQl0cC0+c25kX3dsMSA9 IHRpLT50aV9zZXE7CiAJCXRwLT5zbmRfd2wyID0gdGktPnRpX2FjazsKQEAgLTEzNTAsNyArMTM1 MSw3IEBACiAJICovCiAJaWYgKCh0aS0+dGlfbGVuIHx8ICh0aWZsYWdzJlRIX0ZJTikpICYmCiAJ ICAgIFRDUFNfSEFWRVJDVkRGSU4odHAtPnRfc3RhdGUpID09IDApIHsKLQkJVENQX1JFQVNTKHRw LCB0aSwgbSwgc28sIHRpZmxhZ3MpOworCQlUQ1BfUkVBU1MocywgdHAsIHRpLCBtLCBzbywgdGlm bGFncyk7CiAJCS8qCiAJCSAqIE5vdGUgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgcGVlciBoYXMg c2VudCBpbnRvCiAJCSAqIG91ciB3aW5kb3csIGluIG9yZGVyIHRvIGVzdGltYXRlIHRoZSBzZW5k ZXIncwpAQCAtMTM1OCw3ICsxMzU5LDcgQEAKIAkJICovCiAJCWxlbiA9IHNvLT5zb19yY3Yuc2Jf ZGF0YWxlbiAtICh0cC0+cmN2X2FkdiAtIHRwLT5yY3Zfbnh0KTsKIAl9IGVsc2UgewotCQltX2Zy ZWUobSk7CisJICAgICAgICBtYnVmX2ZyZWVkID0gMTsgLyogVGhlIG1idWYgbXVzdCBiZSBmcmVl ZCwgYnV0IG9ubHkgd2hlbiBpdHMgY29udGVudCBpcyBub3QgbmVlZGVkIGFueW1vcmUuICovCiAJ CXRpZmxhZ3MgJj0gflRIX0ZJTjsKIAl9CiAKQEAgLTEzNzgsNyArMTM3OSw3IEBACiAJCQkgKiB0 byBzZW5kIHRoZSBGSU4uCiAJCQkgKi8KIC8qCQkJc29mY2FudHJjdm1vcmUoc28pOyAqLwotCQkJ c29md2RyYWluKHNvKTsKKwkJCXNvZndkcmFpbihzLCBzbyk7CiAKIAkJCXRwLT50X2ZsYWdzIHw9 IFRGX0FDS05PVzsKIAkJCXRwLT5yY3Zfbnh0Kys7CkBAIC0xNDQ1LDExICsxNDQ2LDE0IEBACiAJ CXRwLT50X2ZsYWdzIHw9IFRGX0FDS05PVzsKIAl9CiAKKwlpZiAobWJ1Zl9mcmVlZCkgeworCQlt X2ZyZWUocywgbSk7CisJfQogCS8qCiAJICogUmV0dXJuIGFueSBkZXNpcmVkIG91dHB1dC4KIAkg Ki8KIAlpZiAobmVlZG91dHB1dCB8fCAodHAtPnRfZmxhZ3MgJiBURl9BQ0tOT1cpKSB7Ci0JCSh2 b2lkKSB0Y3Bfb3V0cHV0KHRwKTsKKwkJKHZvaWQpIHRjcF9vdXRwdXQocywgdHApOwogCX0KIAly ZXR1cm47CiAKQEAgLTE0NjAsMTkgKzE0NjQsMTkgQEAKIAkgKi8KIAlpZiAodGlmbGFncyAmIFRI X1JTVCkKIAkJZ290byBkcm9wOwotCW1fZnJlZW0obSk7CisJbV9mcmVlbShzLCBtKTsKIAl0cC0+ dF9mbGFncyB8PSBURl9BQ0tOT1c7Ci0JKHZvaWQpIHRjcF9vdXRwdXQodHApOworCSh2b2lkKSB0 Y3Bfb3V0cHV0KHMsIHRwKTsKIAlyZXR1cm47CiAKIGRyb3B3aXRocmVzZXQ6CiAJLyogcmV1c2Vz IG0gaWYgbSE9TlVMTCwgbV9mcmVlKCkgdW5uZWNlc3NhcnkgKi8KIAlpZiAodGlmbGFncyAmIFRI X0FDSykKLQkJdGNwX3Jlc3BvbmQodHAsIHRpLCBtLCAodGNwX3NlcSkwLCB0aS0+dGlfYWNrLCBU SF9SU1QpOworCQl0Y3BfcmVzcG9uZChzLCB0cCwgdGksIG0sICh0Y3Bfc2VxKTAsIHRpLT50aV9h Y2ssIFRIX1JTVCk7CiAJZWxzZSB7CiAJCWlmICh0aWZsYWdzICYgVEhfU1lOKSB0aS0+dGlfbGVu Kys7Ci0JCXRjcF9yZXNwb25kKHRwLCB0aSwgbSwgdGktPnRpX3NlcSt0aS0+dGlfbGVuLCAodGNw X3NlcSkwLAotCQkgICAgVEhfUlNUfFRIX0FDSyk7CisJCXRjcF9yZXNwb25kKHMsIHRwLCB0aSwg bSwgdGktPnRpX3NlcSArIHRpLT50aV9sZW4sICh0Y3Bfc2VxKTAsCisJCSAgICBUSF9SU1QgfCBU SF9BQ0spOwogCX0KIAogCXJldHVybjsKQEAgLTE0ODEsNyArMTQ4NSw3IEBACiAJLyoKIAkgKiBE cm9wIHNwYWNlIGhlbGQgYnkgaW5jb21pbmcgc2VnbWVudCBhbmQgcmV0dXJuLgogCSAqLwotCW1f ZnJlZShtKTsKKwltX2ZyZWUocywgbSk7CiAKIAlyZXR1cm47CiB9CkBAIC0xNDkwLDEyICsxNDk0 LDkgQEAKIC8qCWludCAqdHNfcHJlc2VudDsKICAqCXVfaW50MzJfdCAqdHNfdmFsLCAqdHNfZWNy OwogICovCi12b2lkCi10Y3BfZG9vcHRpb25zKHRwLCBjcCwgY250LCB0aSkKLQlzdHJ1Y3QgdGNw Y2IgKnRwOwotCXVfY2hhciAqY3A7Ci0JaW50IGNudDsKLQlzdHJ1Y3QgdGNwaXBoZHIgKnRpOwor c3RhdGljIHZvaWQKK3RjcF9kb29wdGlvbnMoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHRjcGNi ICp0cCwgdV9jaGFyICpjcCwgaW50IGNudCwKKyAgICAgICAgICAgICAgc3RydWN0IHRjcGlwaGRy ICp0aSkKIHsKIAl1X2ludDE2X3QgbXNzOwogCWludCBvcHQsIG9wdGxlbjsKQEAgLTE1MjYsNyAr MTUyNyw3IEBACiAJCQkJY29udGludWU7CiAJCQltZW1jcHkoKGNoYXIgKikgJm1zcywgKGNoYXIg KikgY3AgKyAyLCBzaXplb2YobXNzKSk7CiAJCQlOVE9IUyhtc3MpOwotCQkJKHZvaWQpIHRjcF9t c3ModHAsIG1zcyk7CS8qIHNldHMgdF9tYXhzZWcgKi8KKwkJCSh2b2lkKSB0Y3BfbXNzKHMsIHRw LCBtc3MpOwkvKiBzZXRzIHRfbWF4c2VnICovCiAJCQlicmVhazsKIAogLyoJCWNhc2UgVENQT1BU X1dJTkRPVzoKQEAgLTE2MDUsMTAgKzE2MDYsOCBAQAogICogYW5kIHVwZGF0ZSBhdmVyYWdlcyBh bmQgY3VycmVudCB0aW1lb3V0LgogICovCiAKLXZvaWQKLXRjcF94bWl0X3RpbWVyKHRwLCBydHQp Ci0JcmVnaXN0ZXIgc3RydWN0IHRjcGNiICp0cDsKLQlpbnQgcnR0Oworc3RhdGljIHZvaWQKK3Rj cF94bWl0X3RpbWVyKHNsaXJwX3N0YXRlX3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHAs IGludCBydHQpCiB7CiAJcmVnaXN0ZXIgc2hvcnQgZGVsdGE7CiAKQEAgLTE2MTYsNyArMTYxNSw3 IEBACiAJREVCVUdfQVJHKCJ0cCA9ICVseCIsIChsb25nKXRwKTsKIAlERUJVR19BUkcoInJ0dCA9 ICVkIiwgcnR0KTsKIAotCXRjcHN0YXQudGNwc19ydHR1cGRhdGVkKys7CisJU1RBVChzLT50Y3Bz dGF0LnRjcHNfcnR0dXBkYXRlZCsrKTsKIAlpZiAodHAtPnRfc3J0dCAhPSAwKSB7CiAJCS8qCiAJ CSAqIHNydHQgaXMgc3RvcmVkIGFzIGZpeGVkIHBvaW50IHdpdGggMyBiaXRzIGFmdGVyIHRoZQpA QCAtMTY5Niw5ICsxNjk1LDcgQEAKICAqLwogCiBpbnQKLXRjcF9tc3ModHAsIG9mZmVyKQotICAg ICAgICByZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwOwotICAgICAgICB1X2ludCBvZmZlcjsKK3Rj cF9tc3Moc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0ZXIgc3RydWN0IHRjcGNiICp0cCwgdV9pbnQg b2ZmZXIpCiB7CiAJc3RydWN0IHNvY2tldCAqc28gPSB0cC0+dF9zb2NrZXQ7CiAJaW50IG1zczsK QEAgLTE3MDcsNyArMTcwNCw3IEBACiAJREVCVUdfQVJHKCJ0cCA9ICVseCIsIChsb25nKXRwKTsK IAlERUJVR19BUkcoIm9mZmVyID0gJWQiLCBvZmZlcik7CiAKLQltc3MgPSBtaW4oaWZfbXR1LCBp Zl9tcnUpIC0gc2l6ZW9mKHN0cnVjdCB0Y3BpcGhkcik7CisJbXNzID0gSUZfTVRVIC0gc2l6ZW9m KHN0cnVjdCB0Y3BpcGhkcik7CiAJaWYgKG9mZmVyKQogCQltc3MgPSBtaW4obXNzLCBvZmZlcik7 CiAJbXNzID0gbWF4KG1zcywgMzIpOwpAQCAtMTcxNiw4ICsxNzEzLDEyIEBACiAKIAl0cC0+c25k X2N3bmQgPSBtc3M7CiAKLQlzYnJlc2VydmUoJnNvLT5zb19zbmQsIHRjcF9zbmRzcGFjZSsoKHRj cF9zbmRzcGFjZSVtc3MpPyhtc3MtKHRjcF9zbmRzcGFjZSVtc3MpKTowKSk7Ci0Jc2JyZXNlcnZl KCZzby0+c29fcmN2LCB0Y3BfcmN2c3BhY2UrKCh0Y3BfcmN2c3BhY2UlbXNzKT8obXNzLSh0Y3Bf cmN2c3BhY2UlbXNzKSk6MCkpOworCXNicmVzZXJ2ZSgmc28tPnNvX3NuZCwgVENQX1NORFNQQUNF ICsgKChUQ1BfU05EU1BBQ0UgJSBtc3MpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1zcyAtIChUQ1BfU05EU1BBQ0UgJSBtc3MpKSA6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKKwlzYnJlc2VydmUo JnNvLT5zb19yY3YsIFRDUF9SQ1ZTUEFDRSArICgoVENQX1JDVlNQQUNFICUgbXNzKSA/CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtc3MgLSAoVENQX1JD VlNQQUNFICUgbXNzKSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwKSk7CiAKIAlERUJVR19NSVNDKChkZmQsICIgcmV0dXJuaW5nIG1zcyA9ICVkXG4i LCBtc3MpKTsKIApJbmRleDogcWVtdS9zbGlycC90Y3Bfb3V0cHV0LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g cWVtdS5vcmlnL3NsaXJwL3RjcF9vdXRwdXQuYwkyMDA3LTEwLTIxIDE4OjQ3OjA4LjAwMDAwMDAw MCArMDAwMAorKysgcWVtdS9zbGlycC90Y3Bfb3V0cHV0LmMJMjAwNy0xMC0yMiAxOTozNDo0MC4w MDAwMDAwMDAgKzAwMDAKQEAgLTQ4LDE0ICs0OCwxNCBAQAogICogU2luY2UgdGhpcyBpcyBvbmx5 IHVzZWQgaW4gInN0YXRzIHNvY2tldCIsIHdlIGdpdmUgbWVhbmluZwogICogbmFtZXMgaW5zdGVh ZCBvZiB0aGUgUkVBTCBuYW1lcwogICovCi1jaGFyICp0Y3BzdGF0ZXNbXSA9IHsKK2NvbnN0IGNo YXIgKiBjb25zdCB0Y3BzdGF0ZXNbXSA9IHsKIC8qCSJDTE9TRUQiLCAgICAgICAiTElTVEVOIiwg ICAgICAgIlNZTl9TRU5UIiwgICAgICJTWU5fUkNWRCIsICovCiAJIlJFRElSRUNUIiwJIkxJU1RF TiIsCSJTWU5fU0VOVCIsICAgICAiU1lOX1JDVkQiLAogCSJFU1RBQkxJU0hFRCIsICAiQ0xPU0Vf V0FJVCIsICAgIkZJTl9XQUlUXzEiLCAgICJDTE9TSU5HIiwKIAkiTEFTVF9BQ0siLCAgICAgIkZJ Tl9XQUlUXzIiLCAgICJUSU1FX1dBSVQiLAogfTsKIAotdV9jaGFyICB0Y3Bfb3V0ZmxhZ3NbVENQ X05TVEFURVNdID0geworc3RhdGljIGNvbnN0IHVfY2hhciAgdGNwX291dGZsYWdzW1RDUF9OU1RB VEVTXSA9IHsKIAlUSF9SU1R8VEhfQUNLLCAwLCAgICAgIFRIX1NZTiwgICAgICAgIFRIX1NZTnxU SF9BQ0ssCiAJVEhfQUNLLCAgICAgICAgVEhfQUNLLCBUSF9GSU58VEhfQUNLLCBUSF9GSU58VEhf QUNLLAogCVRIX0ZJTnxUSF9BQ0ssIFRIX0FDSywgVEhfQUNLLApAQCAtNjgsOCArNjgsNyBAQAog ICogVGNwIG91dHB1dCByb3V0aW5lOiBmaWd1cmUgb3V0IHdoYXQgc2hvdWxkIGJlIHNlbnQgYW5k IHNlbmQgaXQuCiAgKi8KIGludAotdGNwX291dHB1dCh0cCkKLQlyZWdpc3RlciBzdHJ1Y3QgdGNw Y2IgKnRwOwordGNwX291dHB1dChzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBzdHJ1Y3QgdGNw Y2IgKnRwKQogewogCXJlZ2lzdGVyIHN0cnVjdCBzb2NrZXQgKnNvID0gdHAtPnRfc29ja2V0Owog CXJlZ2lzdGVyIGxvbmcgbGVuLCB3aW47CkBAIC0yNjMsNyArMjYyLDcgQEAKIAkvKgogCSAqIE5v IHJlYXNvbiB0byBzZW5kIGEgc2VnbWVudCwganVzdCByZXR1cm4uCiAJICovCi0JdGNwc3RhdC50 Y3BzX2RpZG51dHRpbisrOworCVNUQVQocy0+dGNwc3RhdC50Y3BzX2RpZG51dHRpbisrKTsKIAog CXJldHVybiAoMCk7CiAKQEAgLTI4NSw3ICsyODQsNyBAQAogCiAJCQlvcHRbMF0gPSBUQ1BPUFRf TUFYU0VHOwogCQkJb3B0WzFdID0gNDsKLQkJCW1zcyA9IGh0b25zKCh1X2ludDE2X3QpIHRjcF9t c3ModHAsIDApKTsKKwkJCW1zcyA9IGh0b25zKCh1X2ludDE2X3QpIHRjcF9tc3MocywgdHAsIDAp KTsKIAkJCW1lbWNweSgoY2FkZHJfdCkob3B0ICsgMiksIChjYWRkcl90KSZtc3MsIHNpemVvZiht c3MpKTsKIAkJCW9wdGxlbiA9IDQ7CiAKQEAgLTMzOSwyMiArMzM4LDIyIEBACiAJICovCiAJaWYg KGxlbikgewogCQlpZiAodHAtPnRfZm9yY2UgJiYgbGVuID09IDEpCi0JCQl0Y3BzdGF0LnRjcHNf c25kcHJvYmUrKzsKKwkJCVNUQVQocy0+dGNwc3RhdC50Y3BzX3NuZHByb2JlKyspOwogCQllbHNl IGlmIChTRVFfTFQodHAtPnNuZF9ueHQsIHRwLT5zbmRfbWF4KSkgewotCQkJdGNwc3RhdC50Y3Bz X3NuZHJleG1pdHBhY2srKzsKLQkJCXRjcHN0YXQudGNwc19zbmRyZXhtaXRieXRlICs9IGxlbjsK KwkJCVNUQVQocy0+dGNwc3RhdC50Y3BzX3NuZHJleG1pdHBhY2srKyk7CisJCQlTVEFUKHMtPnRj cHN0YXQudGNwc19zbmRyZXhtaXRieXRlICs9IGxlbik7CiAJCX0gZWxzZSB7Ci0JCQl0Y3BzdGF0 LnRjcHNfc25kcGFjaysrOwotCQkJdGNwc3RhdC50Y3BzX3NuZGJ5dGUgKz0gbGVuOworCQkJU1RB VChzLT50Y3BzdGF0LnRjcHNfc25kcGFjaysrKTsKKwkJCVNUQVQocy0+dGNwc3RhdC50Y3BzX3Nu ZGJ5dGUgKz0gbGVuKTsKIAkJfQogCi0JCW0gPSBtX2dldCgpOworCQltID0gbV9nZXQocyk7CiAJ CWlmIChtID09IE5VTEwpIHsKIC8qCQkJZXJyb3IgPSBFTk9CVUZTOyAqLwogCQkJZXJyb3IgPSAx OwogCQkJZ290byBvdXQ7CiAJCX0KLQkJbS0+bV9kYXRhICs9IGlmX21heGxpbmtoZHI7CisJCW0t Pm1fZGF0YSArPSBJRl9NQVhMSU5LSERSOwogCQltLT5tX2xlbiA9IGhkcmxlbjsKIAogCQkvKgpA QCAtMzgyLDIxICszODEsMjEgQEAKIAkJCWZsYWdzIHw9IFRIX1BVU0g7CiAJfSBlbHNlIHsKIAkJ aWYgKHRwLT50X2ZsYWdzICYgVEZfQUNLTk9XKQotCQkJdGNwc3RhdC50Y3BzX3NuZGFja3MrKzsK KwkJCVNUQVQocy0+dGNwc3RhdC50Y3BzX3NuZGFja3MrKyk7CiAJCWVsc2UgaWYgKGZsYWdzICYg KFRIX1NZTnxUSF9GSU58VEhfUlNUKSkKLQkJCXRjcHN0YXQudGNwc19zbmRjdHJsKys7CisJCQlT VEFUKHMtPnRjcHN0YXQudGNwc19zbmRjdHJsKyspOwogCQllbHNlIGlmIChTRVFfR1QodHAtPnNu ZF91cCwgdHAtPnNuZF91bmEpKQotCQkJdGNwc3RhdC50Y3BzX3NuZHVyZysrOworCQkJU1RBVChz LT50Y3BzdGF0LnRjcHNfc25kdXJnKyspOwogCQllbHNlCi0JCQl0Y3BzdGF0LnRjcHNfc25kd2lu dXArKzsKKwkJCVNUQVQocy0+dGNwc3RhdC50Y3BzX3NuZHdpbnVwKyspOwogCi0JCW0gPSBtX2dl dCgpOworCQltID0gbV9nZXQocyk7CiAJCWlmIChtID09IE5VTEwpIHsKIC8qCQkJZXJyb3IgPSBF Tk9CVUZTOyAqLwogCQkJZXJyb3IgPSAxOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJbS0+bV9kYXRh ICs9IGlmX21heGxpbmtoZHI7CisJCW0tPm1fZGF0YSArPSBJRl9NQVhMSU5LSERSOwogCQltLT5t X2xlbiA9IGhkcmxlbjsKIAl9CiAKQEAgLTUwMCw3ICs0OTksNyBAQAogCQkJaWYgKHRwLT50X3J0 dCA9PSAwKSB7CiAJCQkJdHAtPnRfcnR0ID0gMTsKIAkJCQl0cC0+dF9ydHNlcSA9IHN0YXJ0c2Vx OwotCQkJCXRjcHN0YXQudGNwc19zZWdzdGltZWQrKzsKKwkJCQlTVEFUKHMtPnRjcHN0YXQudGNw c19zZWdzdGltZWQrKyk7CiAJCQl9CiAJCX0KIApAQCAtNTM2LDcgKzUzNSw3IEBACiAKIAkoKHN0 cnVjdCBpcCAqKXRpKS0+aXBfbGVuID0gbS0+bV9sZW47CiAKLQkoKHN0cnVjdCBpcCAqKXRpKS0+ aXBfdHRsID0gaXBfZGVmdHRsOworCSgoc3RydWN0IGlwICopdGkpLT5pcF90dGwgPSBJUERFRlRU TDsKIAkoKHN0cnVjdCBpcCAqKXRpKS0+aXBfdG9zID0gc28tPnNvX2lwdG9zOwogCiAvKiAjaWYg QlNEID49IDQzICovCkBAIC01NDQsNyArNTQzLDcgQEAKIC8qCWVycm9yID0gaXBfb3V0cHV0KG0s IHRwLT50X2lucGNiLT5pbnBfb3B0aW9ucywgJnRwLT50X2lucGNiLT5pbnBfcm91dGUsCiAgKgkg ICAgc28tPnNvX29wdGlvbnMgJiBTT19ET05UUk9VVEUsIDApOwogICovCi0JZXJyb3IgPSBpcF9v dXRwdXQoc28sIG0pOworCWVycm9yID0gaXBfb3V0cHV0KHMsIHNvLCBtKTsKIAogLyogI2Vsc2UK ICAqCWVycm9yID0gaXBfb3V0cHV0KG0sIChzdHJ1Y3QgbWJ1ZiAqKTAsICZ0cC0+dF9pbnBjYi0+ aW5wX3JvdXRlLApAQCAtNTY3LDcgKzU2Niw3IEBACiAgKi8KIAkJcmV0dXJuIChlcnJvcik7CiAJ fQotCXRjcHN0YXQudGNwc19zbmR0b3RhbCsrOworCVNUQVQocy0+dGNwc3RhdC50Y3BzX3NuZHRv dGFsKyspOwogCiAJLyoKIAkgKiBEYXRhIHNlbnQgKGFzIGZhciBhcyB3ZSBjYW4gdGVsbCkuCklu ZGV4OiBxZW11L3NsaXJwL3RjcF9zdWJyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJw L3RjcF9zdWJyLmMJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUv c2xpcnAvdGNwX3N1YnIuYwkyMDA3LTEwLTIyIDE5OjM0OjQ5LjAwMDAwMDAwMCArMDAwMApAQCAt NDUsMjkgKzQ1LDE2IEBACiAjZGVmaW5lIFdBTlRfU1lTX0lPQ1RMX0gKICNpbmNsdWRlIDxzbGly cC5oPgogCi0vKiBwYXRjaGFibGUvc2V0dGFibGUgcGFyYW1ldGVycyBmb3IgdGNwICovCi1pbnQg CXRjcF9tc3NkZmx0ID0gVENQX01TUzsKLWludCAJdGNwX3J0dGRmbHQgPSBUQ1BUVl9TUlRUREZM VCAvIFBSX1NMT1dIWjsKLWludAl0Y3BfZG9fcmZjMTMyMyA9IDA7CS8qIERvbid0IGRvIHJmYzEz MjMgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzICovCi1pbnQJdGNwX3JjdnNwYWNlOwkvKiBZb3Ug bWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMgKi8KLWludAl0Y3Bfc25kc3BhY2U7CS8qIEtlZXAgc21h bGwgaWYgeW91IGhhdmUgYW4gZXJyb3IgcHJvbmUgbGluayAqLwogCiAvKgogICogVGNwIGluaXRp YWxpemF0aW9uCiAgKi8KIHZvaWQKLXRjcF9pbml0KCkKK3RjcF9pbml0KHNsaXJwX3N0YXRlX3Qg KnMpCiB7Ci0JdGNwX2lzcyA9IDE7CQkvKiB3cm9uZyAqLwotCXRjYi5zb19uZXh0ID0gdGNiLnNv X3ByZXYgPSAmdGNiOwotCi0JLyogdGNwX3JjdnNwYWNlID0gb3VyIFdpbmRvdyB3ZSBhZHZlcnRp c2UgdG8gdGhlIHJlbW90ZSAqLwotCXRjcF9yY3ZzcGFjZSA9IFRDUF9SQ1ZTUEFDRTsKLQl0Y3Bf c25kc3BhY2UgPSBUQ1BfU05EU1BBQ0U7Ci0KLQkvKiBNYWtlIHN1cmUgdGNwX3NuZHNwYWNlIGlz IGF0IGxlYXN0IDIqTVNTICovCi0JaWYgKHRjcF9zbmRzcGFjZSA8IDIqKG1pbihpZl9tdHUsIGlm X21ydSkgLSBzaXplb2Yoc3RydWN0IHRjcGlwaGRyKSkpCi0JCXRjcF9zbmRzcGFjZSA9IDIqKG1p bihpZl9tdHUsIGlmX21ydSkgLSBzaXplb2Yoc3RydWN0IHRjcGlwaGRyKSk7CisJcy0+dGNwX2lz cyA9IDE7CQkvKiB3cm9uZyAqLworCXMtPnRjYi5zb19uZXh0ID0gcy0+dGNiLnNvX3ByZXYgPSAm cy0+dGNiOworICAgICAgICBzLT50Y3BfbGFzdF9zbyA9ICZzLT50Y2I7CiB9CiAKIC8qCkBAIC03 OCwxMyArNjUsMTggQEAKICAqLwogLyogc3RydWN0IHRjcGlwaGRyICogKi8KIHZvaWQKLXRjcF90 ZW1wbGF0ZSh0cCkKLQlzdHJ1Y3QgdGNwY2IgKnRwOwordGNwX3RlbXBsYXRlKHNsaXJwX3N0YXRl X3QgKnMsIHN0cnVjdCB0Y3BjYiAqdHApCiB7CiAJc3RydWN0IHNvY2tldCAqc28gPSB0cC0+dF9z b2NrZXQ7CiAJcmVnaXN0ZXIgc3RydWN0IHRjcGlwaGRyICpuID0gJnRwLT50X3RlbXBsYXRlOwog Ci0Jbi0+dGlfbmV4dCA9IG4tPnRpX3ByZXYgPSAwOworI2lmIDAKKwl0aV9zZXRfbmV4dChzLCBu LCBOVUxMKTsKKwl0aV9zZXRfcHJldihzLCBuLCBOVUxMKTsKKyNlbHNlCisgICAgICAgIG4tPnRp X2kuaWhfbmV4dCA9IDA7CisgICAgICAgIG4tPnRpX2kuaWhfcHJldiA9IDA7CisjZW5kaWYKIAlu LT50aV94MSA9IDA7CiAJbi0+dGlfcHIgPSBJUFBST1RPX1RDUDsKIAluLT50aV9sZW4gPSBodG9u cyhzaXplb2YgKHN0cnVjdCB0Y3BpcGhkcikgLSBzaXplb2YgKHN0cnVjdCBpcCkpOwpAQCAtMTE3 LDEyICsxMDksOCBAQAogICogc2VnbWVudCBhcmUgYXMgc3BlY2lmaWVkIGJ5IHRoZSBwYXJhbWV0 ZXJzLgogICovCiB2b2lkCi10Y3BfcmVzcG9uZCh0cCwgdGksIG0sIGFjaywgc2VxLCBmbGFncykK LQlzdHJ1Y3QgdGNwY2IgKnRwOwotCXJlZ2lzdGVyIHN0cnVjdCB0Y3BpcGhkciAqdGk7Ci0JcmVn aXN0ZXIgc3RydWN0IG1idWYgKm07Ci0JdGNwX3NlcSBhY2ssIHNlcTsKLQlpbnQgZmxhZ3M7Cit0 Y3BfcmVzcG9uZChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgdGNwY2IgKnRwLCBzdHJ1Y3QgdGNw aXBoZHIgKnRpLAorICAgICAgICAgICAgc3RydWN0IG1idWYgKm0sIHRjcF9zZXEgYWNrLCB0Y3Bf c2VxIHNlcSwgaW50IGZsYWdzKQogewogCXJlZ2lzdGVyIGludCB0bGVuOwogCWludCB3aW4gPSAw OwpAQCAtMTM4LDE0ICsxMjYsMTQgQEAKIAlpZiAodHApCiAJCXdpbiA9IHNic3BhY2UoJnRwLT50 X3NvY2tldC0+c29fcmN2KTsKIAlpZiAobSA9PSAwKSB7Ci0JCWlmICgobSA9IG1fZ2V0KCkpID09 IE5VTEwpCisJCWlmICgobSA9IG1fZ2V0KHMpKSA9PSBOVUxMKQogCQkJcmV0dXJuOwogI2lmZGVm IFRDUF9DT01QQVRfNDIKIAkJdGxlbiA9IDE7CiAjZWxzZQogCQl0bGVuID0gMDsKICNlbmRpZgot CQltLT5tX2RhdGEgKz0gaWZfbWF4bGlua2hkcjsKKwkJbS0+bV9kYXRhICs9IElGX01BWExJTktI RFI7CiAJCSptdG9kKG0sIHN0cnVjdCB0Y3BpcGhkciAqKSA9ICp0aTsKIAkJdGkgPSBtdG9kKG0s IHN0cnVjdCB0Y3BpcGhkciAqKTsKIAkJZmxhZ3MgPSBUSF9BQ0s7CkBAIC0xNjcsNyArMTU1LDgg QEAKIAl0bGVuICs9IHNpemVvZiAoc3RydWN0IHRjcGlwaGRyKTsKIAltLT5tX2xlbiA9IHRsZW47 CiAKLQl0aS0+dGlfbmV4dCA9IHRpLT50aV9wcmV2ID0gMDsKKwl0aV9zZXRfbmV4dChzLCB0aSwg TlVMTCk7CisJdGlfc2V0X3ByZXYocywgdGksIE5VTEwpOwogCXRpLT50aV94MSA9IDA7CiAJdGkt PnRpX3NlcSA9IGh0b25sKHNlcSk7CiAJdGktPnRpX2FjayA9IGh0b25sKGFjayk7CkBAIC0xODYs OSArMTc1LDkgQEAKIAlpZihmbGFncyAmIFRIX1JTVCkKIAkgICgoc3RydWN0IGlwICopdGkpLT5p cF90dGwgPSBNQVhUVEw7CiAJZWxzZQotCSAgKChzdHJ1Y3QgaXAgKil0aSktPmlwX3R0bCA9IGlw X2RlZnR0bDsKKwkgICgoc3RydWN0IGlwICopdGkpLT5pcF90dGwgPSBJUERFRlRUTDsKIAotCSh2 b2lkKSBpcF9vdXRwdXQoKHN0cnVjdCBzb2NrZXQgKikwLCBtKTsKKwkodm9pZCkgaXBfb3V0cHV0 KHMsIChzdHJ1Y3Qgc29ja2V0ICopMCwgbSk7CiB9CiAKIC8qCkBAIC0xOTcsOCArMTg2LDcgQEAK ICAqIHByb3RvY29sIGNvbnRyb2wgYmxvY2suCiAgKi8KIHN0cnVjdCB0Y3BjYiAqCi10Y3BfbmV3 dGNwY2Ioc28pCi0Jc3RydWN0IHNvY2tldCAqc287Cit0Y3BfbmV3dGNwY2Ioc2xpcnBfc3RhdGVf dCAqcywgc3RydWN0IHNvY2tldCAqc28pCiB7CiAJcmVnaXN0ZXIgc3RydWN0IHRjcGNiICp0cDsK IApAQCAtMjA3LDEwICsxOTUsMTEgQEAKIAkJcmV0dXJuICgoc3RydWN0IHRjcGNiICopMCk7CiAK IAltZW1zZXQoKGNoYXIgKikgdHAsIDAsIHNpemVvZihzdHJ1Y3QgdGNwY2IpKTsKLQl0cC0+c2Vn X25leHQgPSB0cC0+c2VnX3ByZXYgPSAodGNwaXBoZHJwXzMyKXRwOwotCXRwLT50X21heHNlZyA9 IHRjcF9tc3NkZmx0OworCXRjcGNiX3NldF9uZXh0KHRwLCB0cCk7CisJdGNwY2Jfc2V0X3ByZXYo dHAsIHRwKTsKKwl0cC0+dF9tYXhzZWcgPSBUQ1BfTVNTOwogCi0JdHAtPnRfZmxhZ3MgPSB0Y3Bf ZG9fcmZjMTMyMyA/IChURl9SRVFfU0NBTEV8VEZfUkVRX1RTVE1QKSA6IDA7CisJdHAtPnRfZmxh Z3MgPSBUQ1BfRE9fUkZDMTMyMyA/IChURl9SRVFfU0NBTEV8VEZfUkVRX1RTVE1QKSA6IDA7CiAJ dHAtPnRfc29ja2V0ID0gc287CiAKIAkvKgpAQCAtMjE5LDcgKzIwOCw3IEBACiAJICogcmVhc29u YWJsZSBpbml0aWFsIHJldHJhbnNtaXQgdGltZS4KIAkgKi8KIAl0cC0+dF9zcnR0ID0gVENQVFZf U1JUVEJBU0U7Ci0JdHAtPnRfcnR0dmFyID0gdGNwX3J0dGRmbHQgKiBQUl9TTE9XSFogPDwgMjsK Kwl0cC0+dF9ydHR2YXIgPSBUQ1BUVl9TUlRUREZMVCA8PCAyOwogCXRwLT50X3J0dG1pbiA9IFRD UFRWX01JTjsKIAogCVRDUFRfUkFOR0VTRVQodHAtPnRfcnh0Y3VyLApAQCAtMjQwLDcgKzIyOSw3 IEBACiAgKiB0aGUgc3BlY2lmaWVkIGVycm9yLiAgSWYgY29ubmVjdGlvbiBpcyBzeW5jaHJvbml6 ZWQsCiAgKiB0aGVuIHNlbmQgYSBSU1QgdG8gcGVlci4KICAqLwotc3RydWN0IHRjcGNiICp0Y3Bf ZHJvcChzdHJ1Y3QgdGNwY2IgKnRwLCBpbnQgZXJyKQorc3RydWN0IHRjcGNiICp0Y3BfZHJvcChz bGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgdGNwY2IgKnRwLCBpbnQgZXJyKQogewogLyogdGNwX2Ry b3AodHAsIGVycm5vKQogCXJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHA7CkBAIC0yNTQsMTUgKzI0 MywxNSBAQAogCiAJaWYgKFRDUFNfSEFWRVJDVkRTWU4odHAtPnRfc3RhdGUpKSB7CiAJCXRwLT50 X3N0YXRlID0gVENQU19DTE9TRUQ7Ci0JCSh2b2lkKSB0Y3Bfb3V0cHV0KHRwKTsKLQkJdGNwc3Rh dC50Y3BzX2Ryb3BzKys7CisJCSh2b2lkKSB0Y3Bfb3V0cHV0KHMsIHRwKTsKKwkJU1RBVChzLT50 Y3BzdGF0LnRjcHNfZHJvcHMrKyk7CiAJfSBlbHNlCi0JCXRjcHN0YXQudGNwc19jb25uZHJvcHMr KzsKKwkJU1RBVChzLT50Y3BzdGF0LnRjcHNfY29ubmRyb3BzKyspOwogLyoJaWYgKGVycm5vID09 IEVUSU1FRE9VVCAmJiB0cC0+dF9zb2Z0ZXJyb3IpCiAgKgkJZXJybm8gPSB0cC0+dF9zb2Z0ZXJy b3I7CiAgKi8KIC8qCXNvLT5zb19lcnJvciA9IGVycm5vOyAqLwotCXJldHVybiAodGNwX2Nsb3Nl KHRwKSk7CisJcmV0dXJuICh0Y3BfY2xvc2UocywgdHApKTsKIH0KIAogLyoKQEAgLTI3Miw4ICsy NjEsNyBAQAogICoJd2FrZSB1cCBhbnkgc2xlZXBlcnMKICAqLwogc3RydWN0IHRjcGNiICoKLXRj cF9jbG9zZSh0cCkKLQlyZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwOwordGNwX2Nsb3NlKHNsaXJw X3N0YXRlX3QgKnMsIHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHApCiB7CiAJcmVnaXN0ZXIgc3Ry dWN0IHRjcGlwaGRyICp0OwogCXN0cnVjdCBzb2NrZXQgKnNvID0gdHAtPnRfc29ja2V0OwpAQCAt MjgzLDEyICsyNzEsMTIgQEAKIAlERUJVR19BUkcoInRwID0gJWx4IiwgKGxvbmcgKXRwKTsKIAog CS8qIGZyZWUgdGhlIHJlYXNzZW1ibHkgcXVldWUsIGlmIGFueSAqLwotCXQgPSAoc3RydWN0IHRj cGlwaGRyICopIHRwLT5zZWdfbmV4dDsKKwl0ID0gKHN0cnVjdCB0Y3BpcGhkciAqKXRjcGNiX2dl dF9uZXh0KHRwKTsKIAl3aGlsZSAodCAhPSAoc3RydWN0IHRjcGlwaGRyICopdHApIHsKLQkJdCA9 IChzdHJ1Y3QgdGNwaXBoZHIgKil0LT50aV9uZXh0OwotCQltID0gKHN0cnVjdCBtYnVmICopIFJF QVNTX01CVUYoKHN0cnVjdCB0Y3BpcGhkciAqKXQtPnRpX3ByZXYpOwotCQlyZW1xdWVfMzIoKHN0 cnVjdCB0Y3BpcGhkciAqKSB0LT50aV9wcmV2KTsKLQkJbV9mcmVlbShtKTsKKwkJdCA9IHRpX2dl dF9uZXh0KHMsIHQpOworCQltID0gdGlfZ2V0X21idWYocywgdGlfZ2V0X3ByZXYocywgdCkpOwor CQlyZW1xdWVfMzIocywgdGlfZ2V0X3ByZXYocywgdCkpOworCQltX2ZyZWVtKHMsIG0pOwogCX0K IAkvKiBJdCdzIHN0YXRpYyAqLwogLyoJaWYgKHRwLT50X3RlbXBsYXRlKQpAQCAtMjk5LDE2ICsy ODcsMTcgQEAKIAlzby0+c29fdGNwY2IgPSAwOwogCXNvaXNmZGlzY29ubmVjdGVkKHNvKTsKIAkv KiBjbG9iYmVyIGlucHV0IHNvY2tldCBjYWNoZSBpZiB3ZSdyZSBjbG9zaW5nIHRoZSBjYWNoZWQg Y29ubmVjdGlvbiAqLwotCWlmIChzbyA9PSB0Y3BfbGFzdF9zbykKLQkJdGNwX2xhc3Rfc28gPSAm dGNiOworCWlmIChzbyA9PSBzLT50Y3BfbGFzdF9zbykKKwkJcy0+dGNwX2xhc3Rfc28gPSAmcy0+ dGNiOwogCWNsb3Nlc29ja2V0KHNvLT5zKTsKIAlzYmZyZWUoJnNvLT5zb19yY3YpOwogCXNiZnJl ZSgmc28tPnNvX3NuZCk7Ci0Jc29mcmVlKHNvKTsKLQl0Y3BzdGF0LnRjcHNfY2xvc2VkKys7CisJ c29mcmVlKHMsIHNvKTsKKwlTVEFUKHMtPnRjcHN0YXQudGNwc19jbG9zZWQrKyk7CiAJcmV0dXJu ICgoc3RydWN0IHRjcGNiICopMCk7CiB9CiAKKyNpZmRlZiBub3RkZWYKIHZvaWQKIHRjcF9kcmFp bigpCiB7CkBAIC0zMTksOSArMzA4LDYgQEAKICAqIFdoZW4gYSBzb3VyY2UgcXVlbmNoIGlzIHJl Y2VpdmVkLCBjbG9zZSBjb25nZXN0aW9uIHdpbmRvdwogICogdG8gb25lIHNlZ21lbnQuICBXZSB3 aWxsIGdyYWR1YWxseSBvcGVuIGl0IGFnYWluIGFzIHdlIHByb2NlZWQuCiAgKi8KLQotI2lmZGVm IG5vdGRlZgotCiB2b2lkCiB0Y3BfcXVlbmNoKGksIGVycm5vKQogCkBAIC0zNTAsOCArMzM2LDcg QEAKICAqIFdlIGNhbiBsZXQgdGhlIHVzZXIgZXhpdCBmcm9tIHRoZSBjbG9zZSBhcyBzb29uIGFz IHRoZSBGSU4gaXMgYWNrZWQuCiAgKi8KIHZvaWQKLXRjcF9zb2NrY2xvc2VkKHRwKQotCXN0cnVj dCB0Y3BjYiAqdHA7Cit0Y3Bfc29ja2Nsb3NlZChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgdGNw Y2IgKnRwKQogewogCiAJREVCVUdfQ0FMTCgidGNwX3NvY2tjbG9zZWQiKTsKQEAgLTM2Myw3ICsz NDgsNyBAQAogCWNhc2UgVENQU19MSVNURU46CiAJY2FzZSBUQ1BTX1NZTl9TRU5UOgogCQl0cC0+ dF9zdGF0ZSA9IFRDUFNfQ0xPU0VEOwotCQl0cCA9IHRjcF9jbG9zZSh0cCk7CisJCXRwID0gdGNw X2Nsb3NlKHMsIHRwKTsKIAkJYnJlYWs7CiAKIAljYXNlIFRDUFNfU1lOX1JFQ0VJVkVEOgpAQCAt Mzc5LDcgKzM2NCw3IEBACiAJaWYgKHRwICYmIHRwLT50X3N0YXRlID49IFRDUFNfRklOX1dBSVRf MikKIAkJc29pc2ZkaXNjb25uZWN0ZWQodHAtPnRfc29ja2V0KTsKIAlpZiAodHApCi0JCXRjcF9v dXRwdXQodHApOworCQl0Y3Bfb3V0cHV0KHMsIHRwKTsKIH0KIAogLyoKQEAgLTM5Miw4ICszNzcs NyBAQAogICogbm9uYmxvY2tpbmcuICBDb25uZWN0IHJldHVybnMgYWZ0ZXIgdGhlIFNZTiBpcyBz ZW50LCBhbmQgZG9lcwogICogbm90IHdhaXQgZm9yIEFDSytTWU4uCiAgKi8KLWludCB0Y3BfZmNv bm5lY3Qoc28pCi0gICAgIHN0cnVjdCBzb2NrZXQgKnNvOworaW50IHRjcF9mY29ubmVjdChzbGly cF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbykKIHsKICAgaW50IHJldD0wOwogCkBAIC00 MDEsMjUgKzM4NSwyNSBAQAogICBERUJVR19BUkcoInNvID0gJWx4IiwgKGxvbmcgKXNvKTsKIAog ICBpZiggKHJldD1zby0+cz1zb2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSwwKSkgPj0gMCkgewot ICAgIGludCBvcHQsIHM9c28tPnM7CisgICAgaW50IG9wdCwgZmQgPSBzby0+czsKICAgICBzdHJ1 Y3Qgc29ja2FkZHJfaW4gYWRkcjsKIAotICAgIGZkX25vbmJsb2NrKHMpOworICAgIGZkX25vbmJs b2NrKGZkKTsKICAgICBvcHQgPSAxOwotICAgIHNldHNvY2tvcHQocyxTT0xfU09DS0VULFNPX1JF VVNFQUREUiwoY2hhciAqKSZvcHQsc2l6ZW9mKG9wdCApKTsKKyAgICBzZXRzb2Nrb3B0KGZkLCBT T0xfU09DS0VULCBTT19SRVVTRUFERFIsIChjaGFyICopJm9wdCwgc2l6ZW9mKG9wdCkpOwogICAg IG9wdCA9IDE7Ci0gICAgc2V0c29ja29wdChzLFNPTF9TT0NLRVQsU09fT09CSU5MSU5FLChjaGFy ICopJm9wdCxzaXplb2Yob3B0ICkpOworICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNP X09PQklOTElORSwgKGNoYXIgKikmb3B0LCBzaXplb2Yob3B0KSk7CiAKICAgICBhZGRyLnNpbl9m YW1pbHkgPSBBRl9JTkVUOwotICAgIGlmICgoc28tPnNvX2ZhZGRyLnNfYWRkciAmIGh0b25sKDB4 ZmZmZmZmMDApKSA9PSBzcGVjaWFsX2FkZHIuc19hZGRyKSB7CisgICAgaWYgKChzby0+c29fZmFk ZHIuc19hZGRyICYgaHRvbmwoMHhmZmZmZmYwMCkpID09IHMtPnNwZWNpYWxfYWRkci5zX2FkZHIp IHsKICAgICAgIC8qIEl0J3MgYW4gYWxpYXMgKi8KICAgICAgIHN3aXRjaChudG9obChzby0+c29f ZmFkZHIuc19hZGRyKSAmIDB4ZmYpIHsKICAgICAgIGNhc2UgQ1RMX0ROUzoKLQlhZGRyLnNpbl9h ZGRyID0gZG5zX2FkZHI7CisJYWRkci5zaW5fYWRkciA9IHMtPmRuc19hZGRyOwogCWJyZWFrOwog ICAgICAgY2FzZSBDVExfQUxJQVM6CiAgICAgICBkZWZhdWx0OgotCWFkZHIuc2luX2FkZHIgPSBs b29wYmFja19hZGRyOworCWFkZHIuc2luX2FkZHIgPSBzLT5sb29wYmFja19hZGRyOwogCWJyZWFr OwogICAgICAgfQogICAgIH0gZWxzZQpAQCAtNDMwLDcgKzQxNCw3IEBACiAJCSJhZGRyLnNpbl9h ZGRyLnNfYWRkcj0lLjE2c1xuIiwKIAkJbnRvaHMoYWRkci5zaW5fcG9ydCksIGluZXRfbnRvYShh ZGRyLnNpbl9hZGRyKSkpOwogICAgIC8qIFdlIGRvbid0IGNhcmUgd2hhdCBwb3J0IHdlIGdldCAq LwotICAgIHJldCA9IGNvbm5lY3Qocywoc3RydWN0IHNvY2thZGRyICopJmFkZHIsc2l6ZW9mIChh ZGRyKSk7CisgICAgcmV0ID0gY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBz aXplb2YoYWRkcikpOwogCiAgICAgLyoKICAgICAgKiBJZiBpdCdzIG5vdCBpbiBwcm9ncmVzcywg aXQgZmFpbGVkLCBzbyB3ZSBqdXN0IHJldHVybiAwLApAQCAtNDU1LDE0ICs0MzksMTMgQEAKICAq IGhlcmUgYW5kIFNZTiB0aGUgbG9jYWwtaG9zdC4KICAqLwogdm9pZAotdGNwX2Nvbm5lY3QoaW5z bykKLQlzdHJ1Y3Qgc29ja2V0ICppbnNvOwordGNwX2Nvbm5lY3Qoc2xpcnBfc3RhdGVfdCAqcywg c3RydWN0IHNvY2tldCAqaW5zbykKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzbzsKIAlzdHJ1Y3Qgc29j a2FkZHJfaW4gYWRkcjsKIAlpbnQgYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p OwogCXN0cnVjdCB0Y3BjYiAqdHA7Ci0JaW50IHMsIG9wdDsKKwlpbnQgZmQsIG9wdDsKIAogCURF QlVHX0NBTEwoInRjcF9jb25uZWN0Iik7CiAJREVCVUdfQVJHKCJpbnNvID0gJWx4IiwgKGxvbmcp aW5zbyk7CkBAIC00ODAsNyArNDYzLDcgQEAKIAkJCWNsb3Nlc29ja2V0KGFjY2VwdChpbnNvLT5z LChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwmYWRkcmxlbikpOwogCQkJcmV0dXJuOwogCQl9Ci0J CWlmICh0Y3BfYXR0YWNoKHNvKSA8IDApIHsKKwkJaWYgKHRjcF9hdHRhY2gocywgc28pIDwgMCkg ewogCQkJZnJlZShzbyk7IC8qIE5PVCBzb2ZyZWUgKi8KIAkJCXJldHVybjsKIAkJfQpAQCAtNDg4 LDI1ICs0NzEsMjUgQEAKIAkJc28tPnNvX2xwb3J0ID0gaW5zby0+c29fbHBvcnQ7CiAJfQogCi0J KHZvaWQpIHRjcF9tc3Moc290b3RjcGNiKHNvKSwgMCk7CisJKHZvaWQpIHRjcF9tc3Mocywgc290 b3RjcGNiKHNvKSwgMCk7CiAKLQlpZiAoKHMgPSBhY2NlcHQoaW5zby0+cywoc3RydWN0IHNvY2th ZGRyICopJmFkZHIsJmFkZHJsZW4pKSA8IDApIHsKLQkJdGNwX2Nsb3NlKHNvdG90Y3BjYihzbykp OyAvKiBUaGlzIHdpbGwgc29mcmVlKCkgYXMgd2VsbCAqLworCWlmICgoZmQgPSBhY2NlcHQoaW5z by0+cywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAmYWRkcmxlbikpIDwgMCkgeworCQl0Y3Bf Y2xvc2Uocywgc290b3RjcGNiKHNvKSk7IC8qIFRoaXMgd2lsbCBzb2ZyZWUoKSBhcyB3ZWxsICov CiAJCXJldHVybjsKIAl9Ci0JZmRfbm9uYmxvY2socyk7CisJZmRfbm9uYmxvY2soZmQpOwogCW9w dCA9IDE7Ci0Jc2V0c29ja29wdChzLFNPTF9TT0NLRVQsU09fUkVVU0VBRERSLChjaGFyICopJm9w dCxzaXplb2YoaW50KSk7CisJc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERS LCAoY2hhciAqKSZvcHQsIHNpemVvZihpbnQpKTsKIAlvcHQgPSAxOwotCXNldHNvY2tvcHQocyxT T0xfU09DS0VULFNPX09PQklOTElORSwoY2hhciAqKSZvcHQsc2l6ZW9mKGludCkpOworCXNldHNv Y2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX09PQklOTElORSwgKGNoYXIgKikmb3B0LCBzaXplb2Yo aW50KSk7CiAJb3B0ID0gMTsKLQlzZXRzb2Nrb3B0KHMsSVBQUk9UT19UQ1AsVENQX05PREVMQVks KGNoYXIgKikmb3B0LHNpemVvZihpbnQpKTsKKwlzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwg VENQX05PREVMQVksIChjaGFyICopJm9wdCwgc2l6ZW9mKGludCkpOwogCiAJc28tPnNvX2Zwb3J0 ID0gYWRkci5zaW5fcG9ydDsKIAlzby0+c29fZmFkZHIgPSBhZGRyLnNpbl9hZGRyOwogCS8qIFRy YW5zbGF0ZSBjb25uZWN0aW9ucyBmcm9tIGxvY2FsaG9zdCB0byB0aGUgcmVhbCBob3N0bmFtZSAq LwotCWlmIChzby0+c29fZmFkZHIuc19hZGRyID09IDAgfHwgc28tPnNvX2ZhZGRyLnNfYWRkciA9 PSBsb29wYmFja19hZGRyLnNfYWRkcikKLQkgICBzby0+c29fZmFkZHIgPSBhbGlhc19hZGRyOwor CWlmIChzby0+c29fZmFkZHIuc19hZGRyID09IDAgfHwgc28tPnNvX2ZhZGRyLnNfYWRkciA9PSBz LT5sb29wYmFja19hZGRyLnNfYWRkcikKKwkgICBzby0+c29fZmFkZHIgPSBzLT5hbGlhc19hZGRy OwogCiAJLyogQ2xvc2UgdGhlIGFjY2VwdCgpIHNvY2tldCwgc2V0IHJpZ2h0IHN0YXRlICovCiAJ aWYgKGluc28tPnNvX3N0YXRlICYgU1NfRkFDQ0VQVE9OQ0UpIHsKQEAgLTUxNCwxMiArNDk3LDEy IEBACiAJCXNvLT5zb19zdGF0ZSA9IFNTX05PRkRSRUY7IC8qIERvbid0IHNlbGVjdCBpdCB5ZXQs IGV2ZW4gdGhvdWdoIHdlIGhhdmUgYW4gRkQgKi8KIAkJCQkJICAgLyogaWYgaXQncyBub3QgRkFD Q0VQVE9OQ0UsIGl0J3MgYWxyZWFkeSBOT0ZEUkVGICovCiAJfQotCXNvLT5zID0gczsKKwlzby0+ cyA9IGZkOwogCiAJc28tPnNvX2lwdG9zID0gdGNwX3Rvcyhzbyk7CiAJdHAgPSBzb3RvdGNwY2Io c28pOwogCi0JdGNwX3RlbXBsYXRlKHRwKTsKKwl0Y3BfdGVtcGxhdGUocywgdHApOwogCiAJLyog Q29tcHV0ZSB3aW5kb3cgc2NhbGluZyB0byByZXF1ZXN0LiAgKi8KIC8qCXdoaWxlICh0cC0+cmVx dWVzdF9yX3NjYWxlIDwgVENQX01BWF9XSU5TSElGVCAmJgpAQCAtNTI4LDI3ICs1MTEsMjYgQEAK ICAqLwogCiAvKglzb2lzY29ubmVjdGluZyhzbyk7ICovIC8qIE5PRkRSRUYgdXNlZCBpbnN0ZWFk ICovCi0JdGNwc3RhdC50Y3BzX2Nvbm5hdHRlbXB0Kys7CisJU1RBVChzLT50Y3BzdGF0LnRjcHNf Y29ubmF0dGVtcHQrKyk7CiAKIAl0cC0+dF9zdGF0ZSA9IFRDUFNfU1lOX1NFTlQ7CiAJdHAtPnRf dGltZXJbVENQVF9LRUVQXSA9IFRDUFRWX0tFRVBfSU5JVDsKLQl0cC0+aXNzID0gdGNwX2lzczsK LQl0Y3BfaXNzICs9IFRDUF9JU1NJTkNSLzI7CisJdHAtPmlzcyA9IHMtPnRjcF9pc3M7CisJcy0+ dGNwX2lzcyArPSBUQ1BfSVNTSU5DUiAvIDI7CiAJdGNwX3NlbmRzZXFpbml0KHRwKTsKLQl0Y3Bf b3V0cHV0KHRwKTsKKwl0Y3Bfb3V0cHV0KHMsIHRwKTsKIH0KIAogLyoKICAqIEF0dGFjaCBhIFRD UENCIHRvIGEgc29ja2V0LgogICovCiBpbnQKLXRjcF9hdHRhY2goc28pCi0Jc3RydWN0IHNvY2tl dCAqc287Cit0Y3BfYXR0YWNoKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKQog ewotCWlmICgoc28tPnNvX3RjcGNiID0gdGNwX25ld3RjcGNiKHNvKSkgPT0gTlVMTCkKKwlpZiAo KHNvLT5zb190Y3BjYiA9IHRjcF9uZXd0Y3BjYihzLCBzbykpID09IE5VTEwpCiAJICAgcmV0dXJu IC0xOwogCi0JaW5zcXVlKHNvLCAmdGNiKTsKKwlpbnNxdWUocywgc28sICZzLT50Y2IpOwogCiAJ cmV0dXJuIDA7CiB9CkBAIC01NTYsNyArNTM4LDcgQEAKIC8qCiAgKiBTZXQgdGhlIHNvY2tldCdz IHR5cGUgb2Ygc2VydmljZSBmaWVsZAogICovCi1zdHJ1Y3QgdG9zX3QgdGNwdG9zW10gPSB7Citz dGF0aWMgY29uc3Qgc3RydWN0IHRvc190IHRjcHRvc1tdID0gewogCSAgezAsIDIwLCBJUFRPU19U SFJPVUdIUFVULCAwfSwJLyogZnRwIGRhdGEgKi8KIAkgIHsyMSwgMjEsIElQVE9TX0xPV0RFTEFZ LCAgRU1VX0ZUUH0sCS8qIGZ0cCBjb250cm9sICovCiAJICB7MCwgMjMsIElQVE9TX0xPV0RFTEFZ LCAwfSwJLyogdGVsbmV0ICovCkBAIC01NzIsOCArNTU0LDYgQEAKIAkgIHswLCAwLCAwLCAwfQog fTsKIAotc3RydWN0IGVtdV90ICp0Y3BlbXUgPSAwOwotCiAvKgogICogUmV0dXJuIFRPUyBhY2Nv cmRpbmcgdG8gdGhlIGFib3ZlIHRhYmxlCiAgKi8KQEAgLTU4Miw3ICs1NjIsNiBAQAogCXN0cnVj dCBzb2NrZXQgKnNvOwogewogCWludCBpID0gMDsKLQlzdHJ1Y3QgZW11X3QgKmVtdXA7CiAKIAl3 aGlsZSh0Y3B0b3NbaV0udG9zKSB7CiAJCWlmICgodGNwdG9zW2ldLmZwb3J0ICYmIChudG9ocyhz by0+c29fZnBvcnQpID09IHRjcHRvc1tpXS5mcG9ydCkpIHx8CkBAIC01OTMsMjAgKzU3Miw5IEBA CiAJCWkrKzsKIAl9CiAKLQkvKiBOb3BlLCBsZXRzIHNlZSBpZiB0aGVyZSdzIGEgdXNlci1hZGRl ZCBvbmUgKi8KLQlmb3IgKGVtdXAgPSB0Y3BlbXU7IGVtdXA7IGVtdXAgPSBlbXVwLT5uZXh0KSB7 Ci0JCWlmICgoZW11cC0+ZnBvcnQgJiYgKG50b2hzKHNvLT5zb19mcG9ydCkgPT0gZW11cC0+ZnBv cnQpKSB8fAotCQkgICAgKGVtdXAtPmxwb3J0ICYmIChudG9ocyhzby0+c29fbHBvcnQpID09IGVt dXAtPmxwb3J0KSkpIHsKLQkJCXNvLT5zb19lbXUgPSBlbXVwLT5lbXU7Ci0JCQlyZXR1cm4gZW11 cC0+dG9zOwotCQl9Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKLWludCBkb19lY2hvID0gLTE7Ci0K IC8qCiAgKiBFbXVsYXRlIHByb2dyYW1zIHRoYXQgdHJ5IGFuZCBjb25uZWN0IHRvIHVzCiAgKiBU aGlzIGluY2x1ZGVzIGZ0cCAodGhlIGRhdGEgY29ubmVjdGlvbiBpcwpAQCAtNjMyLDkgKzYwMCw3 IEBACiAgKiBOT1RFOiBpZiB5b3UgcmV0dXJuIDAgeW91IE1VU1QgbV9mcmVlKCkgdGhlIG1idWYh CiAgKi8KIGludAotdGNwX2VtdShzbywgbSkKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQlzdHJ1Y3Qg bWJ1ZiAqbTsKK3RjcF9lbXUoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28sIHN0 cnVjdCBtYnVmICptKQogewogCXVfaW50IG4xLCBuMiwgbjMsIG40LCBuNSwgbjY7CiAJY2hhciBi dWZmWzI1Nl07CkBAIC02NjUsMTEgKzYzMSwxMSBAQAogCQkJc29fcmN2LT5zYl9ycHRyICs9IG0t Pm1fbGVuOwogCQkJbS0+bV9kYXRhW20tPm1fbGVuXSA9IDA7IC8qIE5VTEwgdGVybWluYXRlICov CiAJCQlpZiAoc3RyY2hyKG0tPm1fZGF0YSwgJ1xyJykgfHwgc3RyY2hyKG0tPm1fZGF0YSwgJ1xu JykpIHsKLQkJCQlpZiAoc3NjYW5mKHNvX3Jjdi0+c2JfZGF0YSwgIiVkJSpbICxdJWQiLCAmbjEs ICZuMikgPT0gMikgeworCQkJCWlmIChzc2NhbmYoc29fcmN2LT5zYl9kYXRhLCAiJXUlKlsgLF0l dSIsICZuMSwgJm4yKSA9PSAyKSB7CiAJCQkJCUhUT05TKG4xKTsKIAkJCQkJSFRPTlMobjIpOwog CQkJCQkvKiBuMiBpcyB0aGUgb25lIG9uIG91ciBob3N0ICovCi0JCQkJCWZvciAodG1wc28gPSB0 Y2Iuc29fbmV4dDsgdG1wc28gIT0gJnRjYjsgdG1wc28gPSB0bXBzby0+c29fbmV4dCkgeworCQkJ CQlmb3IgKHRtcHNvID0gcy0+dGNiLnNvX25leHQ7IHRtcHNvICE9ICZzLT50Y2I7IHRtcHNvID0g dG1wc28tPnNvX25leHQpIHsKIAkJCQkJCWlmICh0bXBzby0+c29fbGFkZHIuc19hZGRyID09IHNv LT5zb19sYWRkci5zX2FkZHIgJiYKIAkJCQkJCSAgICB0bXBzby0+c29fbHBvcnQgPT0gbjIgJiYK IAkJCQkJCSAgICB0bXBzby0+c29fZmFkZHIuc19hZGRyID09IHNvLT5zb19mYWRkci5zX2FkZHIg JiYKQEAgLTY4NSw3ICs2NTEsNyBAQAogCQkJCXNvX3Jjdi0+c2JfcnB0ciA9IHNvX3Jjdi0+c2Jf ZGF0YTsKIAkJCQlzb19yY3YtPnNiX3dwdHIgPSBzb19yY3YtPnNiX2RhdGEgKyBzb19yY3YtPnNi X2NjOwogCQkJfQotCQkJbV9mcmVlKG0pOworCQkJbV9mcmVlKHMsIG0pOwogCQkJcmV0dXJuIDA7 CiAJCX0KIApAQCAtODQxLDggKzgwNyw4IEBACiAJCQkJbnMtPnNvX2Zwb3J0PWh0b25zKElQUE9S VF9SRVNFUlZFRC0xKTsgLyogVXNlIGEgZmFrZSBwb3J0LiAqLwogCiAJCQkJaWYgKG5zLT5zb19m YWRkci5zX2FkZHIgPT0gMCB8fAotCQkJCQlucy0+c29fZmFkZHIuc19hZGRyID09IGxvb3BiYWNr X2FkZHIuc19hZGRyKQotICAgICAgICAgICAgICAgICAgbnMtPnNvX2ZhZGRyID0gYWxpYXNfYWRk cjsKKwkJCQkJbnMtPnNvX2ZhZGRyLnNfYWRkciA9PSBzLT5sb29wYmFja19hZGRyLnNfYWRkcikK KyAgICAgICAgICAgICAgICAgIG5zLT5zb19mYWRkciA9IHMtPmFsaWFzX2FkZHI7CiAKIAkJCQlu cy0+c29faXB0b3MgPSB0Y3BfdG9zKG5zKTsKIAkJCQl0cCA9IHNvdG90Y3BjYihucyk7CkBAIC04 NTcsMTIgKzgyMywxMiBAQAogCiAgICAgICAgICAgICAgICAgLypzb2lzZmNvbm5lY3RpbmcobnMp OyovCiAKLQkJCQl0Y3BzdGF0LnRjcHNfY29ubmF0dGVtcHQrKzsKKwkJCQlTVEFUKHMtPnRjcHN0 YXQudGNwc19jb25uYXR0ZW1wdCsrKTsKIAogCQkJCXRwLT50X3N0YXRlID0gVENQU19TWU5fU0VO VDsKIAkJCQl0cC0+dF90aW1lcltUQ1BUX0tFRVBdID0gVENQVFZfS0VFUF9JTklUOwotCQkJCXRw LT5pc3MgPSB0Y3BfaXNzOwotCQkJCXRjcF9pc3MgKz0gVENQX0lTU0lOQ1IvMjsKKwkJCQl0cC0+ aXNzID0gcy0+dGNwX2lzczsKKwkJCQlzLT50Y3BfaXNzICs9IFRDUF9JU1NJTkNSIC8gMjsKIAkJ CQl0Y3Bfc2VuZHNlcWluaXQodHApOwogCQkJCXRjcF9vdXRwdXQodHApOwogCQkJCXNvLT5leHRy YT1uczsKQEAgLTkzMSwxMSArODk3LDEzIEBACiAJCQkgKiBiZWNhdXNlIGluIGxpbmVtb2RlLCB0 aGUgbGluZSBpcyBhbHJlYWR5IGVjaG9lZAogCQkJICogWFhYIHR3byBvciBtb3JlIGNvbnRyb2wg Y29ubmVjdGlvbnMgd29uJ3Qgd29yawogCQkJICovCi0JCQlpZiAoZG9fZWNobyA9PSAtMSkgewot CQkJCWlmIChtLT5tX2xlbiA9PSAxKSBkb19lY2hvID0gMTsKLQkJCQllbHNlIGRvX2VjaG8gPSAw OworCQkJaWYgKHMtPmRvX2VjaG8gPT0gLTEpIHsKKwkJCQlpZiAobS0+bV9sZW4gPT0gMSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmRvX2VjaG8gPSAxOworCQkJCWVs c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmRvX2VjaG8gPSAwOwog CQkJfQotCQkJaWYgKGRvX2VjaG8pIHsKKwkJCWlmIChzLT5kb19lY2hvKSB7CiAJCQkgIHNiYXBw ZW5kc2Ioc29fc25kLCBtKTsKIAkJCSAgbV9mcmVlKG0pOwogCQkJICB0Y3Bfb3V0cHV0KHNvdG90 Y3BjYihzbykpOyAvKiBYWFggKi8KQEAgLTk5MSw3ICs5NTksNyBAQAogCQkJLyoKIAkJCSAqIE5l ZWQgdG8gZW11bGF0ZSB0aGUgUE9SVCBjb21tYW5kCiAJCQkgKi8KLQkJCXggPSBzc2NhbmYoYnB0 ciwgIk9SVCAlZCwlZCwlZCwlZCwlZCwlZFxyXG4lMjU2W15cMTc3XSIsCisJCQl4ID0gc3NjYW5m KGJwdHIsICJPUlQgJXUsJXUsJXUsJXUsJXUsJXVcclxuJTI1NlteXDE3N10iLAogCQkJCSAgICZu MSwgJm4yLCAmbjMsICZuNCwgJm41LCAmbjYsIGJ1ZmYpOwogCQkJaWYgKHggPCA2KQogCQkJICAg cmV0dXJuIDE7CkBAIC05OTksNyArOTY3LDcgQEAKIAkJCWxhZGRyID0gaHRvbmwoKG4xIDw8IDI0 KSB8IChuMiA8PCAxNikgfCAobjMgPDwgOCkgfCAobjQpKTsKIAkJCWxwb3J0ID0gaHRvbnMoKG41 IDw8IDgpIHwgKG42KSk7CiAKLQkJCWlmICgoc28gPSBzb2xpc3RlbigwLCBsYWRkciwgbHBvcnQs IFNTX0ZBQ0NFUFRPTkNFKSkgPT0gTlVMTCkKKwkJCWlmICgoc28gPSBzb2xpc3RlbihzLCAwLCBs YWRkciwgbHBvcnQsIFNTX0ZBQ0NFUFRPTkNFKSkgPT0gTlVMTCkKIAkJCSAgIHJldHVybiAxOwog CiAJCQluNiA9IG50b2hzKHNvLT5zb19mcG9ydCk7CkBAIC0xMDIyLDcgKzk5MCw3IEBACiAJCQkv KgogCQkJICogTmVlZCB0byBlbXVsYXRlIHRoZSBQQVNWIHJlc3BvbnNlCiAJCQkgKi8KLQkJCXgg PSBzc2NhbmYoYnB0ciwgIjI3IEVudGVyaW5nIFBhc3NpdmUgTW9kZSAoJWQsJWQsJWQsJWQsJWQs JWQpXHJcbiUyNTZbXlwxNzddIiwKKwkJCXggPSBzc2NhbmYoYnB0ciwgIjI3IEVudGVyaW5nIFBh c3NpdmUgTW9kZSAoJXUsJXUsJXUsJXUsJXUsJXUpXHJcbiUyNTZbXlwxNzddIiwKIAkJCQkgICAm bjEsICZuMiwgJm4zLCAmbjQsICZuNSwgJm42LCBidWZmKTsKIAkJCWlmICh4IDwgNikKIAkJCSAg IHJldHVybiAxOwpAQCAtMTAzMCw3ICs5OTgsNyBAQAogCQkJbGFkZHIgPSBodG9ubCgobjEgPDwg MjQpIHwgKG4yIDw8IDE2KSB8IChuMyA8PCA4KSB8IChuNCkpOwogCQkJbHBvcnQgPSBodG9ucygo bjUgPDwgOCkgfCAobjYpKTsKIAotCQkJaWYgKChzbyA9IHNvbGlzdGVuKDAsIGxhZGRyLCBscG9y dCwgU1NfRkFDQ0VQVE9OQ0UpKSA9PSBOVUxMKQorCQkJaWYgKChzbyA9IHNvbGlzdGVuKHMsIDAs IGxhZGRyLCBscG9ydCwgU1NfRkFDQ0VQVE9OQ0UpKSA9PSBOVUxMKQogCQkJICAgcmV0dXJuIDE7 CiAKIAkJCW42ID0gbnRvaHMoc28tPnNvX2Zwb3J0KTsKQEAgLTEwNjksNyArMTAzNyw3IEBACiAJ CQlscG9ydCArPSBtLT5tX2RhdGFbaV0gLSAnMCc7CiAJCX0KIAkJaWYgKG0tPm1fZGF0YVttLT5t X2xlbi0xXSA9PSAnXDAnICYmIGxwb3J0ICE9IDAgJiYKLQkJICAgIChzbyA9IHNvbGlzdGVuKDAs IHNvLT5zb19sYWRkci5zX2FkZHIsIGh0b25zKGxwb3J0KSwgU1NfRkFDQ0VQVE9OQ0UpKSAhPSBO VUxMKQorCQkgICAgKHNvID0gc29saXN0ZW4ocywgMCwgc28tPnNvX2xhZGRyLnNfYWRkciwgaHRv bnMobHBvcnQpLCBTU19GQUNDRVBUT05DRSkpICE9IE5VTEwpCiAJCQltLT5tX2xlbiA9IHNwcmlu dGYobS0+bV9kYXRhLCAiJWQiLCBudG9ocyhzby0+c29fZnBvcnQpKSsxOwogCQlyZXR1cm4gMTsK IApAQCAtMTA4Myw3ICsxMDUxLDcgQEAKIAogCQkvKiBUaGUgJTI1NnMgaXMgZm9yIHRoZSBicm9r ZW4gbUlSQyAqLwogCQlpZiAoc3NjYW5mKGJwdHIsICJEQ0MgQ0hBVCAlMjU2cyAldSAldSIsIGJ1 ZmYsICZsYWRkciwgJmxwb3J0KSA9PSAzKSB7Ci0JCQlpZiAoKHNvID0gc29saXN0ZW4oMCwgaHRv bmwobGFkZHIpLCBodG9ucyhscG9ydCksIFNTX0ZBQ0NFUFRPTkNFKSkgPT0gTlVMTCkKKwkJCWlm ICgoc28gPSBzb2xpc3RlbihzLCAwLCBodG9ubChsYWRkciksIGh0b25zKGxwb3J0KSwgU1NfRkFD Q0VQVE9OQ0UpKSA9PSBOVUxMKQogCQkJCXJldHVybiAxOwogCiAJCQltLT5tX2xlbiA9IGJwdHIg LSBtLT5tX2RhdGE7IC8qIEFkanVzdCBsZW5ndGggKi8KQEAgLTEwOTEsNyArMTA1OSw3IEBACiAJ CQkgICAgICh1bnNpZ25lZCBsb25nKW50b2hsKHNvLT5zb19mYWRkci5zX2FkZHIpLAogCQkJICAg ICBudG9ocyhzby0+c29fZnBvcnQpLCAxKTsKIAkJfSBlbHNlIGlmIChzc2NhbmYoYnB0ciwgIkRD QyBTRU5EICUyNTZzICV1ICV1ICV1IiwgYnVmZiwgJmxhZGRyLCAmbHBvcnQsICZuMSkgPT0gNCkg ewotCQkJaWYgKChzbyA9IHNvbGlzdGVuKDAsIGh0b25sKGxhZGRyKSwgaHRvbnMobHBvcnQpLCBT U19GQUNDRVBUT05DRSkpID09IE5VTEwpCisJCQlpZiAoKHNvID0gc29saXN0ZW4ocywgMCwgaHRv bmwobGFkZHIpLCBodG9ucyhscG9ydCksIFNTX0ZBQ0NFUFRPTkNFKSkgPT0gTlVMTCkKIAkJCQly ZXR1cm4gMTsKIAogCQkJbS0+bV9sZW4gPSBicHRyIC0gbS0+bV9kYXRhOyAvKiBBZGp1c3QgbGVu Z3RoICovCkBAIC0xMDk5LDcgKzEwNjcsNyBAQAogCQkJICAgICAgYnVmZiwgKHVuc2lnbmVkIGxv bmcpbnRvaGwoc28tPnNvX2ZhZGRyLnNfYWRkciksCiAJCQkgICAgICBudG9ocyhzby0+c29fZnBv cnQpLCBuMSwgMSk7CiAJCX0gZWxzZSBpZiAoc3NjYW5mKGJwdHIsICJEQ0MgTU9WRSAlMjU2cyAl dSAldSAldSIsIGJ1ZmYsICZsYWRkciwgJmxwb3J0LCAmbjEpID09IDQpIHsKLQkJCWlmICgoc28g PSBzb2xpc3RlbigwLCBodG9ubChsYWRkciksIGh0b25zKGxwb3J0KSwgU1NfRkFDQ0VQVE9OQ0Up KSA9PSBOVUxMKQorCQkJaWYgKChzbyA9IHNvbGlzdGVuKHMsIDAsIGh0b25sKGxhZGRyKSwgaHRv bnMobHBvcnQpLCBTU19GQUNDRVBUT05DRSkpID09IE5VTEwpCiAJCQkJcmV0dXJuIDE7CiAKIAkJ CW0tPm1fbGVuID0gYnB0ciAtIG0tPm1fZGF0YTsgLyogQWRqdXN0IGxlbmd0aCAqLwpAQCAtMTEw OSw2ICsxMDc3LDExIEBACiAJCX0KIAkJcmV0dXJuIDE7CiAKKyNpZiAxCisvL2RlZiBWQk9YCisg ICAgICAgICAvKiogQHRvZG8gRGlzYWJsZWQgRU1VX1JFQUxBVURJTywgYmVjYXVzZSBpdCB1c2Vz IGEgc3RhdGljIHZhcmlhYmxlLgorICAgICAgICAgICogVGhpcyBpcyBub3QgbGVnYWwgd2hlbiBt b3JlIHRoYW4gb25lIHNsaXJwIGluc3RhbmNlIGlzIGFjdGl2ZS4gKi8KKyNlbHNlIC8qICFWQk9Y ICovCiAJIGNhc2UgRU1VX1JFQUxBVURJTzoKICAgICAgICAgICAgICAgICAvKgogCQkgKiBSZWFs QXVkaW8gZW11bGF0aW9uIC0gSlAuIFdlIG11c3QgdHJ5IHRvIHBhcnNlIHRoZSBpbmNvbWluZwpA QCAtMTIzNCw2ICsxMjA3LDcgQEAKIAkJCXJhKys7CiAJCX0KIAkJcmV0dXJuIDE7CisjZW5kaWYg LyogIVZCT1ggKi8KIAogCSBkZWZhdWx0OgogCQkvKiBPb29wcywgbm90IGVtdWxhdGVkLCB3b24n dCBjYWxsIHRjcF9lbXUgYWdhaW4gKi8KQEAgLTEyNDgsOCArMTIyMiw3IEBACiAgKiByZXR1cm4g MiBpZiB0aGlzIGlzIGEgY29tbWFuZC1saW5lIGNvbm5lY3Rpb24KICAqLwogaW50Ci10Y3BfY3Rs KHNvKQotCXN0cnVjdCBzb2NrZXQgKnNvOwordGNwX2N0bChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1 Y3Qgc29ja2V0ICpzbykKIHsKIAlzdHJ1Y3Qgc2J1ZiAqc2IgPSAmc28tPnNvX3NuZDsKIAlpbnQg Y29tbWFuZDsKQEAgLTEyNzgsNyArMTI1MSw3IEBACiAJCS8qCiAJCSAqIENoZWNrIGlmIGl0J3Mg cHR5X2V4ZWMKIAkJICovCi0JCWZvciAoZXhfcHRyID0gZXhlY19saXN0OyBleF9wdHI7IGV4X3B0 ciA9IGV4X3B0ci0+ZXhfbmV4dCkgeworCQlmb3IgKGV4X3B0ciA9IHMtPmV4ZWNfbGlzdDsgZXhf cHRyOyBleF9wdHIgPSBleF9wdHItPmV4X25leHQpIHsKIAkJCWlmIChleF9wdHItPmV4X2Zwb3J0 ID09IHNvLT5zb19mcG9ydCAmJgogCQkJICAgIGNvbW1hbmQgPT0gZXhfcHRyLT5leF9hZGRyKSB7 CiAJCQkJZG9fcHR5ID0gZXhfcHRyLT5leF9wdHk7CkBAIC0xMzAwLDExICsxMjczLDExIEBACiAK IAlkb19leGVjOgogCQlERUJVR19NSVNDKChkZmQsICIgZXhlY3V0aW5nICVzIFxuIixleF9wdHIt PmV4X2V4ZWMpKTsKLQkJcmV0dXJuKGZvcmtfZXhlYyhzbywgZXhfcHRyLT5leF9leGVjLCBkb19w dHkpKTsKKwkJcmV0dXJuKGZvcmtfZXhlYyhzLCBzbywgZXhfcHRyLT5leF9leGVjLCBkb19wdHkp KTsKIAogI2lmIDAKIAljYXNlIENUTF9DTUQ6Ci0JICAgZm9yICh0bXBzbyA9IHRjYi5zb19uZXh0 OyB0bXBzbyAhPSAmdGNiOyB0bXBzbyA9IHRtcHNvLT5zb19uZXh0KSB7CisJICAgZm9yICh0bXBz byA9IHMtPnRjYi5zb19uZXh0OyB0bXBzbyAhPSAmcy0+dGNiOyB0bXBzbyA9IHRtcHNvLT5zb19u ZXh0KSB7CiAJICAgICBpZiAodG1wc28tPnNvX2VtdSA9PSBFTVVfQ1RMICYmCiAJCSAhKHRtcHNv LT5zb190Y3BjYj8KIAkJICAgKHRtcHNvLT5zb190Y3BjYi0+dF9zdGF0ZSAmIChUQ1BTX1RJTUVf V0FJVHxUQ1BTX0xBU1RfQUNLKSkKQEAgLTEzMTksNyArMTI5Miw3IEBACiAJICAgY3RsX3Bhc3N3 b3JkX29rID0gMDsKIAkgICBzYi0+c2JfY2MgPSBzcHJpbnRmKHNiLT5zYl93cHRyLCAiU2xpcnAg Y29tbWFuZC1saW5lIHJlYWR5ICh0eXBlIFwiaGVscFwiIGZvciBoZWxwKS5cclxuU2xpcnA+ICIp OwogCSAgIHNiLT5zYl93cHRyICs9IHNiLT5zYl9jYzsKLQkgICBkb19lY2hvPS0xOworCSAgIHMt PmRvX2VjaG8gPSAtMTsKIAkgICByZXR1cm4oMik7CiAjZW5kaWYKIAl9CkluZGV4OiBxZW11L3Ns aXJwL3RjcF90aW1lci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGlycC90Y3BfdGltZXIu YwkyMDA3LTEwLTIxIDE4OjQ3OjA4LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9zbGlycC90Y3Bf dGltZXIuYwkyMDA3LTEwLTIyIDE4OjQ5OjAxLjAwMDAwMDAwMCArMDAwMApAQCAtMzYsMzQgKzM2 LDI5IEBACiAKICNpbmNsdWRlIDxzbGlycC5oPgogCi1pbnQJdGNwX2tlZXBpZGxlID0gVENQVFZf S0VFUF9JRExFOwotaW50CXRjcF9rZWVwaW50dmwgPSBUQ1BUVl9LRUVQSU5UVkw7Ci1pbnQJdGNw X21heGlkbGU7Ci1pbnQJc29fb3B0aW9ucyA9IERPX0tFRVBBTElWRTsKLQotc3RydWN0ICAgdGNw c3RhdCB0Y3BzdGF0OyAgICAgICAgLyogdGNwIHN0YXRpc3RpY3MgKi8KLXVfaW50MzJfdCAgICAg ICAgdGNwX25vdzsgICAgICAgICAgICAgICAgLyogZm9yIFJGQyAxMzIzIHRpbWVzdGFtcHMgKi8K K3N0YXRpYyBzdHJ1Y3QgdGNwY2IgKnRjcF90aW1lcnMoc2xpcnBfc3RhdGVfdCAqcywgcmVnaXN0 ZXIgc3RydWN0IHRjcGNiICp0cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHRpbWVyKTsKIAogLyoKICAqIEZhc3QgdGltZW91dCByb3V0aW5lIGZvciBwcm9jZXNzaW5nIGRl bGF5ZWQgYWNrcwogICovCiB2b2lkCi10Y3BfZmFzdHRpbW8oKQordGNwX2Zhc3R0aW1vKHNsaXJw X3N0YXRlX3QgKnMpCiB7CiAJcmVnaXN0ZXIgc3RydWN0IHNvY2tldCAqc287CiAJcmVnaXN0ZXIg c3RydWN0IHRjcGNiICp0cDsKIAogCURFQlVHX0NBTEwoInRjcF9mYXN0dGltbyIpOwogCi0Jc28g PSB0Y2Iuc29fbmV4dDsKKwlzbyA9IHMtPnRjYi5zb19uZXh0OwogCWlmIChzbykKLQlmb3IgKDsg c28gIT0gJnRjYjsgc28gPSBzby0+c29fbmV4dCkKKwlmb3IgKDsgc28gIT0gJnMtPnRjYjsgc28g PSBzby0+c29fbmV4dCkKIAkJaWYgKCh0cCA9IChzdHJ1Y3QgdGNwY2IgKilzby0+c29fdGNwY2Ip ICYmCiAJCSAgICAodHAtPnRfZmxhZ3MgJiBURl9ERUxBQ0spKSB7CiAJCQl0cC0+dF9mbGFncyAm PSB+VEZfREVMQUNLOwogCQkJdHAtPnRfZmxhZ3MgfD0gVEZfQUNLTk9XOwotCQkJdGNwc3RhdC50 Y3BzX2RlbGFjaysrOwotCQkJKHZvaWQpIHRjcF9vdXRwdXQodHApOworCQkJU1RBVChzLT50Y3Bz dGF0LnRjcHNfZGVsYWNrKyspOworCQkJKHZvaWQpIHRjcF9vdXRwdXQocywgdHApOwogCQl9CiB9 CiAKQEAgLTczLDcgKzY4LDcgQEAKICAqIGNhdXNlcyBmaW5pdGUgc3RhdGUgbWFjaGluZSBhY3Rp b25zIGlmIHRpbWVycyBleHBpcmUuCiAgKi8KIHZvaWQKLXRjcF9zbG93dGltbygpCit0Y3Bfc2xv d3RpbW8oc2xpcnBfc3RhdGVfdCAqcykKIHsKIAlyZWdpc3RlciBzdHJ1Y3Qgc29ja2V0ICppcCwg Kmlwbnh0OwogCXJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqdHA7CkBAIC04MSwyMSArNzYsMjAgQEAK IAogCURFQlVHX0NBTEwoInRjcF9zbG93dGltbyIpOwogCi0JdGNwX21heGlkbGUgPSBUQ1BUVl9L RUVQQ05UICogdGNwX2tlZXBpbnR2bDsKIAkvKgogCSAqIFNlYXJjaCB0aHJvdWdoIHRjYidzIGFu ZCB1cGRhdGUgYWN0aXZlIHRpbWVycy4KIAkgKi8KLQlpcCA9IHRjYi5zb19uZXh0OworCWlwID0g cy0+dGNiLnNvX25leHQ7CiAJaWYgKGlwID09IDApCiAJICAgcmV0dXJuOwotCWZvciAoOyBpcCAh PSAmdGNiOyBpcCA9IGlwbnh0KSB7CisJZm9yICg7IGlwICE9ICZzLT50Y2I7IGlwID0gaXBueHQp IHsKIAkJaXBueHQgPSBpcC0+c29fbmV4dDsKIAkJdHAgPSBzb3RvdGNwY2IoaXApOwogCQlpZiAo dHAgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGkgPSAwOyBpIDwgVENQVF9OVElNRVJTOyBp KyspIHsKIAkJCWlmICh0cC0+dF90aW1lcltpXSAmJiAtLXRwLT50X3RpbWVyW2ldID09IDApIHsK LQkJCQl0Y3BfdGltZXJzKHRwLGkpOworCQkJCXRjcF90aW1lcnMocywgdHAsIGkpOwogCQkJCWlm IChpcG54dC0+c29fcHJldiAhPSBpcCkKIAkJCQkJZ290byB0cGdvbmU7CiAJCQl9CkBAIC0xMDYs MjAgKzEwMCwxOSBAQAogdHBnb25lOgogCQk7CiAJfQotCXRjcF9pc3MgKz0gVENQX0lTU0lOQ1Iv UFJfU0xPV0haOwkJLyogaW5jcmVtZW50IGlzcyAqLworCXMtPnRjcF9pc3MgKz0gVENQX0lTU0lO Q1IgLyBQUl9TTE9XSFo7CQkvKiBpbmNyZW1lbnQgaXNzICovCiAjaWZkZWYgVENQX0NPTVBBVF80 MgotCWlmICgoaW50KXRjcF9pc3MgPCAwKQotCQl0Y3BfaXNzID0gMDsJCQkJLyogWFhYICovCisJ aWYgKChpbnQpcy0+dGNwX2lzcyA8IDApCisJCXMtPnRjcF9pc3MgPSAwOwkJCQkvKiBYWFggKi8K ICNlbmRpZgotCXRjcF9ub3crKzsJCQkJCS8qIGZvciB0aW1lc3RhbXBzICovCisJcy0+dGNwX25v dysrOwkJCQkJLyogZm9yIHRpbWVzdGFtcHMgKi8KIH0KIAogLyoKICAqIENhbmNlbCBhbGwgdGlt ZXJzIGZvciBUQ1AgdHAuCiAgKi8KIHZvaWQKLXRjcF9jYW5jZWx0aW1lcnModHApCi0Jc3RydWN0 IHRjcGNiICp0cDsKK3RjcF9jYW5jZWx0aW1lcnMoc3RydWN0IHRjcGNiICp0cCkKIHsKIAlyZWdp c3RlciBpbnQgaTsKIApAQCAtMTI3LDE2ICsxMjAsMTQgQEAKIAkJdHAtPnRfdGltZXJbaV0gPSAw OwogfQogCi1pbnQJdGNwX2JhY2tvZmZbVENQX01BWFJYVFNISUZUICsgMV0gPQorY29uc3QgaW50 IHRjcF9iYWNrb2ZmW1RDUF9NQVhSWFRTSElGVCArIDFdID0KICAgIHsgMSwgMiwgNCwgOCwgMTYs IDMyLCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCB9OwogCiAvKgogICogVENQIHRpbWVyIHBy b2Nlc3NpbmcuCiAgKi8KLXN0cnVjdCB0Y3BjYiAqCi10Y3BfdGltZXJzKHRwLCB0aW1lcikKLQly ZWdpc3RlciBzdHJ1Y3QgdGNwY2IgKnRwOwotCWludCB0aW1lcjsKK3N0YXRpYyBzdHJ1Y3QgdGNw Y2IgKgordGNwX3RpbWVycyhzbGlycF9zdGF0ZV90ICpzLCByZWdpc3RlciBzdHJ1Y3QgdGNwY2Ig KnRwLCBpbnQgdGltZXIpCiB7CiAJcmVnaXN0ZXIgaW50IHJleG10OwogCkBAIC0xNTIsMTAgKzE0 MywxMCBAQAogCSAqLwogCWNhc2UgVENQVF8yTVNMOgogCQlpZiAodHAtPnRfc3RhdGUgIT0gVENQ U19USU1FX1dBSVQgJiYKLQkJICAgIHRwLT50X2lkbGUgPD0gdGNwX21heGlkbGUpCi0JCQl0cC0+ dF90aW1lcltUQ1BUXzJNU0xdID0gdGNwX2tlZXBpbnR2bDsKKwkJICAgIHRwLT50X2lkbGUgPD0g VENQX01BWElETEUpCisJCQl0cC0+dF90aW1lcltUQ1BUXzJNU0xdID0gVENQVFZfS0VFUElOVFZM OwogCQllbHNlCi0JCQl0cCA9IHRjcF9jbG9zZSh0cCk7CisJCQl0cCA9IHRjcF9jbG9zZShzLCB0 cCk7CiAJCWJyZWFrOwogCiAJLyoKQEAgLTE5Miw4ICsxODMsOCBAQAogCQkJCSAqIFdlIHRyaWVk IG91ciBiZXN0LCBub3cgdGhlIGNvbm5lY3Rpb24gbXVzdCBkaWUhCiAJCQkJICovCiAJCQkJdHAt PnRfcnh0c2hpZnQgPSBUQ1BfTUFYUlhUU0hJRlQ7Ci0JCQkJdGNwc3RhdC50Y3BzX3RpbWVvdXRk cm9wKys7Ci0JCQkJdHAgPSB0Y3BfZHJvcCh0cCwgdHAtPnRfc29mdGVycm9yKTsKKwkJCQlTVEFU KHMtPnRjcHN0YXQudGNwc190aW1lb3V0ZHJvcCsrKTsKKwkJCQl0cCA9IHRjcF9kcm9wKHMsIHRw LCB0cC0+dF9zb2Z0ZXJyb3IpOwogCQkJCS8qIHRwLT50X3NvZnRlcnJvciA6IEVUSU1FRE9VVCk7 ICovIC8qIFhYWCAqLwogCQkJCXJldHVybiAodHApOyAvKiBYWFggKi8KIAkJCX0KQEAgLTIwNCw3 ICsxOTUsNyBAQAogCQkJICovCiAJCQl0cC0+dF9yeHRzaGlmdCA9IDY7CiAJCX0KLQkJdGNwc3Rh dC50Y3BzX3JleG10dGltZW8rKzsKKwkJU1RBVChzLT50Y3BzdGF0LnRjcHNfcmV4bXR0aW1lbysr KTsKIAkJcmV4bXQgPSBUQ1BfUkVYTVRWQUwodHApICogdGNwX2JhY2tvZmZbdHAtPnRfcnh0c2hp ZnRdOwogCQlUQ1BUX1JBTkdFU0VUKHRwLT50X3J4dGN1ciwgcmV4bXQsCiAJCSAgICAoc2hvcnQp dHAtPnRfcnR0bWluLCBUQ1BUVl9SRVhNVE1BWCk7IC8qIFhYWCAqLwpAQCAtMjU5LDcgKzI1MCw3 IEBACiAJCXRwLT5zbmRfc3N0aHJlc2ggPSB3aW4gKiB0cC0+dF9tYXhzZWc7CiAJCXRwLT50X2R1 cGFja3MgPSAwOwogCQl9Ci0JCSh2b2lkKSB0Y3Bfb3V0cHV0KHRwKTsKKwkJKHZvaWQpIHRjcF9v dXRwdXQocywgdHApOwogCQlicmVhazsKIAogCS8qCkBAIC0yNjcsMTAgKzI1OCwxMCBAQAogCSAq IEZvcmNlIGEgYnl0ZSB0byBiZSBvdXRwdXQsIGlmIHBvc3NpYmxlLgogCSAqLwogCWNhc2UgVENQ VF9QRVJTSVNUOgotCQl0Y3BzdGF0LnRjcHNfcGVyc2lzdHRpbWVvKys7CisJCVNUQVQocy0+dGNw c3RhdC50Y3BzX3BlcnNpc3R0aW1lbysrKTsKIAkJdGNwX3NldHBlcnNpc3QodHApOwogCQl0cC0+ dF9mb3JjZSA9IDE7Ci0JCSh2b2lkKSB0Y3Bfb3V0cHV0KHRwKTsKKwkJKHZvaWQpIHRjcF9vdXRw dXQocywgdHApOwogCQl0cC0+dF9mb3JjZSA9IDA7CiAJCWJyZWFrOwogCkBAIC0yNzksMTMgKzI3 MCwxMyBAQAogCSAqIG9yIGRyb3AgY29ubmVjdGlvbiBpZiBpZGxlIGZvciB0b28gbG9uZy4KIAkg Ki8KIAljYXNlIFRDUFRfS0VFUDoKLQkJdGNwc3RhdC50Y3BzX2tlZXB0aW1lbysrOworCQlTVEFU KHMtPnRjcHN0YXQudGNwc19rZWVwdGltZW8rKyk7CiAJCWlmICh0cC0+dF9zdGF0ZSA8IFRDUFNf RVNUQUJMSVNIRUQpCiAJCQlnb3RvIGRyb3BpdDsKIAogLyoJCWlmICh0cC0+dF9zb2NrZXQtPnNv X29wdGlvbnMgJiBTT19LRUVQQUxJVkUgJiYgKi8KLQkJaWYgKChzb19vcHRpb25zKSAmJiB0cC0+ dF9zdGF0ZSA8PSBUQ1BTX0NMT1NFX1dBSVQpIHsKLQkJICAgIAlpZiAodHAtPnRfaWRsZSA+PSB0 Y3Bfa2VlcGlkbGUgKyB0Y3BfbWF4aWRsZSkKKwkJaWYgKChTT19PUFRJT05TKSAmJiB0cC0+dF9z dGF0ZSA8PSBUQ1BTX0NMT1NFX1dBSVQpIHsKKwkJICAgIAlpZiAodHAtPnRfaWRsZSA+PSBUQ1BU Vl9LRUVQX0lETEUgKyBUQ1BfTUFYSURMRSkKIAkJCQlnb3RvIGRyb3BpdDsKIAkJCS8qCiAJCQkg KiBTZW5kIGEgcGFja2V0IGRlc2lnbmVkIHRvIGZvcmNlIGEgcmVzcG9uc2UKQEAgLTI5OSw3ICsy OTAsNyBAQAogCQkJICogYnkgdGhlIHByb3RvY29sIHNwZWMsIHRoaXMgcmVxdWlyZXMgdGhlCiAJ CQkgKiBjb3JyZXNwb25kZW50IFRDUCB0byByZXNwb25kLgogCQkJICovCi0JCQl0Y3BzdGF0LnRj cHNfa2VlcHByb2JlKys7CisJCQlTVEFUKHMtPnRjcHN0YXQudGNwc19rZWVwcHJvYmUrKyk7CiAj aWZkZWYgVENQX0NPTVBBVF80MgogCQkJLyoKIAkJCSAqIFRoZSBrZWVwYWxpdmUgcGFja2V0IG11 c3QgaGF2ZSBub256ZXJvIGxlbmd0aApAQCAtMzA4LDE3ICsyOTksMTcgQEAKIAkJCXRjcF9yZXNw b25kKHRwLCAmdHAtPnRfdGVtcGxhdGUsIChzdHJ1Y3QgbWJ1ZiAqKU5VTEwsCiAJCQkgICAgdHAt PnJjdl9ueHQgLSAxLCB0cC0+c25kX3VuYSAtIDEsIDApOwogI2Vsc2UKLQkJCXRjcF9yZXNwb25k KHRwLCAmdHAtPnRfdGVtcGxhdGUsIChzdHJ1Y3QgbWJ1ZiAqKU5VTEwsCisJCQl0Y3BfcmVzcG9u ZChzLCB0cCwgJnRwLT50X3RlbXBsYXRlLCAoc3RydWN0IG1idWYgKilOVUxMLAogCQkJICAgIHRw LT5yY3Zfbnh0LCB0cC0+c25kX3VuYSAtIDEsIDApOwogI2VuZGlmCi0JCQl0cC0+dF90aW1lcltU Q1BUX0tFRVBdID0gdGNwX2tlZXBpbnR2bDsKKwkJCXRwLT50X3RpbWVyW1RDUFRfS0VFUF0gPSBU Q1BUVl9LRUVQSU5UVkw7CiAJCX0gZWxzZQotCQkJdHAtPnRfdGltZXJbVENQVF9LRUVQXSA9IHRj cF9rZWVwaWRsZTsKKwkJCXRwLT50X3RpbWVyW1RDUFRfS0VFUF0gPSBUQ1BUVl9LRUVQX0lETEU7 CiAJCWJyZWFrOwogCiAJZHJvcGl0OgotCQl0Y3BzdGF0LnRjcHNfa2VlcGRyb3BzKys7Ci0JCXRw ID0gdGNwX2Ryb3AodHAsIDApOyAvKiBFVElNRURPVVQpOyAqLworCQlTVEFUKHMtPnRjcHN0YXQu dGNwc19rZWVwZHJvcHMrKyk7CisJCXRwID0gdGNwX2Ryb3AocywgdHAsIDApOyAvKiBFVElNRURP VVQpOyAqLwogCQlicmVhazsKIAl9CiAKSW5kZXg6IHFlbXUvc2xpcnAvdGNwX3RpbWVyLmgKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL3RjcF90aW1lci5oCTIwMDctMTAtMjEgMTg6NDc6 MDguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL3RjcF90aW1lci5oCTIwMDctMTAtMjEg MTg6NDc6MTEuMDAwMDAwMDAwICswMDAwCkBAIC0xMDgsNiArMTA4LDkgQEAKICNkZWZpbmUJVENQ X0xJTkdFUlRJTUUJMTIwCQkJLyogbGluZ2VyIGF0IG1vc3QgMiBtaW51dGVzICovCiAKICNkZWZp bmUgVENQX01BWFJYVFNISUZUIDEyICAgICAgICAgICAgICAgICAgICAgIC8qIG1heGltdW0gcmV0 cmFuc21pdHMgKi8KKy8qKiBNYXhpbXVtIGlkbGUgdGltZSBiZWZvcmUgdGltaW5nIG91dCBhIGNv bm5lY3Rpb24uICovCisjZGVmaW5lIFRDUF9NQVhJRExFIChUQ1BUVl9LRUVQQ05UICogVENQVFZf S0VFUElOVFZMKQorCiAKIAogI2lmZGVmCVRDUFRJTUVSUwpAQCAtMTI2LDE3ICsxMjksMTIgQEAK IAkJKHR2KSA9ICh0dm1heCk7IFwKIH0KIAotZXh0ZXJuIGludCB0Y3Bfa2VlcGlkbGU7CQkvKiB0 aW1lIGJlZm9yZSBrZWVwYWxpdmUgcHJvYmVzIGJlZ2luICovCi1leHRlcm4gaW50IHRjcF9rZWVw aW50dmw7CQkvKiB0aW1lIGJldHdlZW4ga2VlcGFsaXZlIHByb2JlcyAqLwotZXh0ZXJuIGludCB0 Y3BfbWF4aWRsZTsJCQkvKiB0aW1lIHRvIGRyb3AgYWZ0ZXIgc3RhcnRpbmcgcHJvYmVzICovCi1l eHRlcm4gaW50IHRjcF90dGw7CQkJLyogdGltZSB0byBsaXZlIGZvciBUQ1Agc2VncyAqLwotZXh0 ZXJuIGludCB0Y3BfYmFja29mZltdOworZXh0ZXJuIGNvbnN0IGludCB0Y3BfYmFja29mZltdOwog CiBzdHJ1Y3QgdGNwY2I7CiAKLXZvaWQgdGNwX2Zhc3R0aW1vIF9QKCh2b2lkKSk7Ci12b2lkIHRj cF9zbG93dGltbyBfUCgodm9pZCkpOwordm9pZCB0Y3BfZmFzdHRpbW8oc2xpcnBfc3RhdGVfdCAq cyk7Cit2b2lkIHRjcF9zbG93dGltbyhzbGlycF9zdGF0ZV90ICpzKTsKIHZvaWQgdGNwX2NhbmNl bHRpbWVycyBfUCgoc3RydWN0IHRjcGNiICopKTsKLXN0cnVjdCB0Y3BjYiAqIHRjcF90aW1lcnMg X1AoKHJlZ2lzdGVyIHN0cnVjdCB0Y3BjYiAqLCBpbnQpKTsKIAogI2VuZGlmCkluZGV4OiBxZW11 L3NsaXJwL3RjcF92YXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvdGNwX3Zhci5o CTIwMDctMTAtMjEgMTg6NDc6MDguMDAwMDAwMDAwICswMDAwCisrKyBxZW11L3NsaXJwL3RjcF92 YXIuaAkyMDA3LTEwLTIyIDE5OjAzOjU2LjAwMDAwMDAwMCArMDAwMApAQCAtNDUsMTMgKzQ1LDEy IEBACiAjZWxzZQogIHR5cGVkZWYgdV9pbnQzMl90IHRjcGlwaGRycF8zMjsKICNlbmRpZgotCiAv KgogICogVGNwIGNvbnRyb2wgYmxvY2ssIG9uZSBwZXIgdGNwOyBmaWVsZHM6CiAgKi8KIHN0cnVj dCB0Y3BjYiB7Ci0JdGNwaXBoZHJwXzMyIHNlZ19uZXh0OwkvKiBzZXF1ZW5jaW5nIHF1ZXVlICov Ci0JdGNwaXBoZHJwXzMyIHNlZ19wcmV2OworCXRjcGlwaGRycF8zMiB0X3NlZ19uZXh0OwkvKiBz ZXF1ZW5jaW5nIHF1ZXVlICovCisJdGNwaXBoZHJwXzMyIHRfc2VnX3ByZXY7CiAJc2hvcnQJdF9z dGF0ZTsJCS8qIHN0YXRlIG9mIHRoaXMgY29ubmVjdGlvbiAqLwogCXNob3J0CXRfdGltZXJbVENQ VF9OVElNRVJTXTsJLyogdGNwIHRpbWVycyAqLwogCXNob3J0CXRfcnh0c2hpZnQ7CQkvKiBsb2co Mikgb2YgcmV4bXQgZXhwLiBiYWNrb2ZmICovCkBAIC0xMzgsNiArMTM3LDIxIEBACiAKIH07CiAK K3N0YXRpYyBpbmxpbmUgc3RydWN0IHRjcGNiICp0Y3BjYl9nZXRfbmV4dChzdHJ1Y3QgdGNwY2Ig KnRjcGNiKQoreworICAgIHJldHVybiAoc3RydWN0IHRjcGNiICopKHVuc2lnbmVkIGxvbmcpdGNw Y2ItPnRfc2VnX25leHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BjYl9zZXRfbmV4dChz dHJ1Y3QgdGNwY2IgKnRjcGNiLCBzdHJ1Y3QgdGNwY2IgKm5leHQpCit7CisgICAgdGNwY2ItPnRf c2VnX25leHQgPSAodGNwaXBoZHJwXzMyKSh1bnNpZ25lZCBsb25nKW5leHQ7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCB0Y3BjYl9zZXRfcHJldihzdHJ1Y3QgdGNwY2IgKnRjcGNiLCBzdHJ1Y3Qg dGNwY2IgKnByZXYpCit7CisgICAgdGNwY2ItPnRfc2VnX3ByZXYgPSAodGNwaXBoZHJwXzMyKSh1 bnNpZ25lZCBsb25nKXByZXY7Cit9CisKICNkZWZpbmUJc290b3RjcGNiKHNvKQkoKHNvKS0+c29f dGNwY2IpCiAKIC8qCkBAIC0xNzAsMjEgKzE4NCw2IEBACiAjZGVmaW5lCVRDUF9SRVhNVFZBTCh0 cCkgXAogCSgoKHRwKS0+dF9zcnR0ID4+IFRDUF9SVFRfU0hJRlQpICsgKHRwKS0+dF9ydHR2YXIp CiAKLS8qIFhYWAotICogV2Ugd2FudCB0byBhdm9pZCBkb2luZyBtX3B1bGx1cCBvbiBpbmNvbWlu ZyBwYWNrZXRzIGJ1dCB0aGF0Ci0gKiBtZWFucyBhdm9pZGluZyBkdG9tIG9uIHRoZSB0Y3AgcmVh c3NlbWJseSBjb2RlLiAgVGhhdCBpbiB0dXJuIG1lYW5zCi0gKiBrZWVwaW5nIGFuIG1idWYgcG9p bnRlciBpbiB0aGUgcmVhc3NlbWJseSBxdWV1ZSAoc2luY2Ugd2UgbWlnaHQKLSAqIGhhdmUgYSBj bHVzdGVyKS4gIEFzIGEgcXVpY2sgaGFjaywgdGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9uCi0gKiBw b3J0IG51bWJlcnMgKHdoaWNoIGFyZSBubyBsb25nZXIgbmVlZGVkIG9uY2Ugd2UndmUgbG9jYXRl ZCB0aGUKLSAqIHRjcGNiKSBhcmUgb3ZlcmxheWVkIHdpdGggYW4gbWJ1ZiBwb2ludGVyLgotICov Ci0jaWYgU0laRU9GX0NIQVJfUCA9PSA0Ci10eXBlZGVmIHN0cnVjdCBtYnVmICptYnVmcF8zMjsK LSNlbHNlCi10eXBlZGVmIHVfaW50MzJfdCBtYnVmcF8zMjsKLSNlbmRpZgotI2RlZmluZSBSRUFT U19NQlVGKHRpKSAoKihtYnVmcF8zMiAqKSYoKHRpKS0+dGlfdCkpCi0KIC8qCiAgKiBUQ1Agc3Rh dGlzdGljcy4KICAqIE1hbnkgb2YgdGhlc2Ugc2hvdWxkIGJlIGtlcHQgcGVyIGNvbm5lY3Rpb24s CkBAIC0yNDYsNyArMjQ1LDUgQEAKIAl1X2xvbmcJdGNwc19kaWRudXR0aW47CQkvKiBUaW1lcyB0 Y3Bfb3V0cHV0IGRpZG4ndCBkbyBhbnl0aGluZyBYWFggKi8KIH07CiAKLWV4dGVybiBzdHJ1Y3QJ dGNwc3RhdCB0Y3BzdGF0OwkvKiB0Y3Agc3RhdGlzdGljcyAqLwotZXh0ZXJuIHVfaW50MzJfdAl0 Y3Bfbm93OwkJLyogZm9yIFJGQyAxMzIzIHRpbWVzdGFtcHMgKi8KIAogI2VuZGlmCkluZGV4OiBx ZW11L3NsaXJwL3RjcGlwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3NsaXJwL3RjcGlwLmgJ MjAwNy0xMC0yMSAxODo0NzowMy4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvdGNwaXAu aAkyMDA3LTEwLTIyIDE1OjM5OjI5LjAwMDAwMDAwMCArMDAwMApAQCAtMzcsNiArMzcsOCBAQAog I2lmbmRlZiBfVENQSVBfSF8KICNkZWZpbmUgX1RDUElQX0hfCiAKKyNpbmNsdWRlICJtYnVmLmgi CisKIC8qCiAgKiBUY3AraXAgaGVhZGVyLCBhZnRlciBpcCBvcHRpb25zIHJlbW92ZWQuCiAgKi8K QEAgLTQ0LDggKzQ2LDU0IEBACiAJc3RydWN0IAlpcG92bHkgdGlfaTsJCS8qIG92ZXJsYWlkIGlw IHN0cnVjdHVyZSAqLwogCXN0cnVjdAl0Y3BoZHIgdGlfdDsJCS8qIHRjcCBoZWFkZXIgKi8KIH07 Ci0jZGVmaW5lCXRpX25leHQJCXRpX2kuaWhfbmV4dAotI2RlZmluZQl0aV9wcmV2CQl0aV9pLmlo X3ByZXYKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGNwaXBoZHIgKnRpX2dldF9uZXh0KHNsaXJw X3N0YXRlX3QgKnMsIHN0cnVjdCB0Y3BpcGhkciAqdGkpCit7CisgICAgcmV0dXJuIChzdHJ1Y3Qg dGNwaXBoZHIgKilpaF9nZXRfbmV4dChzLCAmdGktPnRpX2kpOworfQorCitzdGF0aWMgaW5saW5l IHN0cnVjdCB0Y3BpcGhkciAqdGlfZ2V0X3ByZXYoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHRj cGlwaGRyICp0aSkKK3sKKyAgICByZXR1cm4gKHN0cnVjdCB0Y3BpcGhkciAqKWloX2dldF9wcmV2 KHMsICZ0aS0+dGlfaSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0aV9zZXRfbmV4dChzbGly cF9zdGF0ZV90ICpzLCBzdHJ1Y3QgdGNwaXBoZHIgKnRpLCBzdHJ1Y3QgdGNwaXBoZHIgKm5leHQp Cit7CisgICAgaWhfc2V0X25leHQocywgJnRpLT50aV9pLCAoc3RydWN0IGlwb3ZseSAqKW5leHQp OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGlfc2V0X3ByZXYoc2xpcnBfc3RhdGVfdCAqcywg c3RydWN0IHRjcGlwaGRyICp0aSwgc3RydWN0IHRjcGlwaGRyICpwcmV2KQoreworICAgIGloX3Nl dF9wcmV2KHMsICZ0aS0+dGlfaSwgKHN0cnVjdCBpcG92bHkgKilwcmV2KTsKK30KKworLyogWFhY CisgKiBXZSB3YW50IHRvIGF2b2lkIGRvaW5nIG1fcHVsbHVwIG9uIGluY29taW5nIHBhY2tldHMg YnV0IHRoYXQKKyAqIG1lYW5zIGF2b2lkaW5nIGR0b20gb24gdGhlIHRjcCByZWFzc2VtYmx5IGNv ZGUuICBUaGF0IGluIHR1cm4gbWVhbnMKKyAqIGtlZXBpbmcgYW4gbWJ1ZiBwb2ludGVyIGluIHRo ZSByZWFzc2VtYmx5IHF1ZXVlIChzaW5jZSB3ZSBtaWdodAorICogaGF2ZSBhIGNsdXN0ZXIpLiAg QXMgYSBxdWljayBoYWNrLCB0aGUgc291cmNlICYgZGVzdGluYXRpb24KKyAqIHBvcnQgbnVtYmVy cyAod2hpY2ggYXJlIG5vIGxvbmdlciBuZWVkZWQgb25jZSB3ZSd2ZSBsb2NhdGVkIHRoZQorICog dGNwY2IpIGFyZSBvdmVybGF5ZWQgd2l0aCBhbiBtYnVmIHBvaW50ZXIuCisgKi8KKyNpZiAwCisj aWYgU0laRU9GX0NIQVJfUCA9PSA0Cit0eXBlZGVmIHN0cnVjdCBtYnVmICptYnVmcF8zMjsKKyNl bHNlCit0eXBlZGVmIHVfaW50MzJfdCBtYnVmcF8zMjsKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IG1idWYgKnRpX2dldF9tYnVmKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVj dCB0Y3BpcGhkciAqdGkpCit7CisgICAgcmV0dXJuIGR0b20ocywgdGkpOworICAgIC8vcmV0dXJu IChzdHJ1Y3QgbWJ1ZiAqKSh1bnNpZ25lZCBsb25nKSgqKG1idWZwXzMyICopJih0aS0+dGlfdCkp OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGlfc2V0X21idWYoc3RydWN0IHRjcGlwaGRyICp0 aSwgc3RydWN0IG1idWYgKm0pCit7CisgICAgLy8qKG1idWZwXzMyICopJigodGkpLT50aV90KSA9 IChtYnVmcF8zMikodW5zaWduZWQgbG9uZyltOworfQorCiAjZGVmaW5lCXRpX3gxCQl0aV9pLmlo X3gxCiAjZGVmaW5lCXRpX3ByCQl0aV9pLmloX3ByCiAjZGVmaW5lCXRpX2xlbgkJdGlfaS5paF9s ZW4KSW5kZXg6IHFlbXUvc2xpcnAvdGZ0cC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9zbGly cC90ZnRwLmMJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xp cnAvdGZ0cC5jCTIwMDctMTAtMjIgMTk6MzU6MDkuMDAwMDAwMDAwICswMDAwCkBAIC0yNCwyMyAr MjQsMTAgQEAKIAogI2luY2x1ZGUgPHNsaXJwLmg+CiAKLXN0cnVjdCB0ZnRwX3Nlc3Npb24gewot ICAgIGludCBpbl91c2U7Ci0gICAgdW5zaWduZWQgY2hhciBmaWxlbmFtZVtURlRQX0ZJTEVOQU1F X01BWF07CiAKLSAgICBzdHJ1Y3QgaW5fYWRkciBjbGllbnRfaXA7Ci0gICAgdV9pbnQxNl90IGNs aWVudF9wb3J0OwotCi0gICAgaW50IHRpbWVzdGFtcDsKLX07Ci0KLXN0cnVjdCB0ZnRwX3Nlc3Np b24gdGZ0cF9zZXNzaW9uc1tURlRQX1NFU1NJT05TX01BWF07Ci0KLWNvbnN0IGNoYXIgKnRmdHBf cHJlZml4OwotCi1zdGF0aWMgdm9pZCB0ZnRwX3Nlc3Npb25fdXBkYXRlKHN0cnVjdCB0ZnRwX3Nl c3Npb24gKnNwdCkKK3N0YXRpYyB2b2lkIHRmdHBfc2Vzc2lvbl91cGRhdGUoc2xpcnBfc3RhdGVf dCAqcywgc3RydWN0IHRmdHBfc2Vzc2lvbiAqc3B0KQogewotICAgIHNwdC0+dGltZXN0YW1wID0g Y3VydGltZTsKKyAgICBzcHQtPnRpbWVzdGFtcCA9IHMtPmN1cnRpbWU7CiAgICAgc3B0LT5pbl91 c2UgPSAxOwogfQogCkBAIC00OSwxOSArMzYsMTkgQEAKICAgc3B0LT5pbl91c2UgPSAwOwogfQog Ci1zdGF0aWMgaW50IHRmdHBfc2Vzc2lvbl9hbGxvY2F0ZShzdHJ1Y3QgdGZ0cF90ICp0cCkKK3N0 YXRpYyBpbnQgdGZ0cF9zZXNzaW9uX2FsbG9jYXRlKHNsaXJwX3N0YXRlX3QgKnMsIHN0cnVjdCB0 ZnRwX3QgKnRwKQogewogICBzdHJ1Y3QgdGZ0cF9zZXNzaW9uICpzcHQ7CiAgIGludCBrOwogCiAg IGZvciAoayA9IDA7IGsgPCBURlRQX1NFU1NJT05TX01BWDsgaysrKSB7Ci0gICAgc3B0ID0gJnRm dHBfc2Vzc2lvbnNba107CisgICAgc3B0ID0gJnMtPnRmdHBfc2Vzc2lvbnNba107CiAKICAgICBp ZiAoIXNwdC0+aW5fdXNlKQogICAgICAgICBnb3RvIGZvdW5kOwogCiAgICAgLyogc2Vzc2lvbnMg dGltZSBvdXQgYWZ0ZXIgNSBpbmFjdGl2ZSBzZWNvbmRzICovCi0gICAgaWYgKChpbnQpKGN1cnRp bWUgLSBzcHQtPnRpbWVzdGFtcCkgPiA1MDAwKQorICAgIGlmICgoaW50KShzLT5jdXJ0aW1lIC0g c3B0LT50aW1lc3RhbXApID4gNTAwMCkKICAgICAgICAgZ290byBmb3VuZDsKICAgfQogCkBAIC03 MiwxOCArNTksMTggQEAKICAgbWVtY3B5KCZzcHQtPmNsaWVudF9pcCwgJnRwLT5pcC5pcF9zcmMs IHNpemVvZihzcHQtPmNsaWVudF9pcCkpOwogICBzcHQtPmNsaWVudF9wb3J0ID0gdHAtPnVkcC51 aF9zcG9ydDsKIAotICB0ZnRwX3Nlc3Npb25fdXBkYXRlKHNwdCk7CisgIHRmdHBfc2Vzc2lvbl91 cGRhdGUocywgc3B0KTsKIAogICByZXR1cm4gazsKIH0KIAotc3RhdGljIGludCB0ZnRwX3Nlc3Np b25fZmluZChzdHJ1Y3QgdGZ0cF90ICp0cCkKK3N0YXRpYyBpbnQgdGZ0cF9zZXNzaW9uX2ZpbmQo c2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHRmdHBfdCAqdHApCiB7CiAgIHN0cnVjdCB0ZnRwX3Nl c3Npb24gKnNwdDsKICAgaW50IGs7CiAKICAgZm9yIChrID0gMDsgayA8IFRGVFBfU0VTU0lPTlNf TUFYOyBrKyspIHsKLSAgICBzcHQgPSAmdGZ0cF9zZXNzaW9uc1trXTsKKyAgICBzcHQgPSAmcy0+ dGZ0cF9zZXNzaW9uc1trXTsKIAogICAgIGlmIChzcHQtPmluX3VzZSkgewogICAgICAgaWYgKCFt ZW1jbXAoJnNwdC0+Y2xpZW50X2lwLCAmdHAtPmlwLmlwX3NyYywgc2l6ZW9mKHNwdC0+Y2xpZW50 X2lwKSkpIHsKQEAgLTk3LDcgKzg0LDcgQEAKICAgcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50 IHRmdHBfcmVhZF9kYXRhKHN0cnVjdCB0ZnRwX3Nlc3Npb24gKnNwdCwgdV9pbnQxNl90IGJsb2Nr X25yLAorc3RhdGljIGludCB0ZnRwX3JlYWRfZGF0YShzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qg dGZ0cF9zZXNzaW9uICpzcHQsIHVfaW50MTZfdCBibG9ja19uciwKIAkJCSAgdV9pbnQ4X3QgKmJ1 ZiwgaW50IGxlbikKIHsKICAgaW50IGZkOwpAQCAtMTA2LDcgKzkzLDcgQEAKICAgaW50IG47CiAK ICAgbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlcy8lcyIsCi0JICAgICAg IHRmdHBfcHJlZml4LCBzcHQtPmZpbGVuYW1lKTsKKwkgICAgICAgcy0+dGZ0cF9wcmVmaXgsIHNw dC0+ZmlsZW5hbWUpOwogICBpZiAobiA+PSBzaXplb2YoYnVmZmVyKSkKICAgICByZXR1cm4gLTE7 CiAKQEAgLTEyNyw3ICsxMTQsOCBAQAogICByZXR1cm4gYnl0ZXNfcmVhZDsKIH0KIAotc3RhdGlj IGludCB0ZnRwX3NlbmRfb2FjayhzdHJ1Y3QgdGZ0cF9zZXNzaW9uICpzcHQsCitzdGF0aWMgaW50 IHRmdHBfc2VuZF9vYWNrKHNsaXJwX3N0YXRlX3QgKnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB0ZnRwX3Nlc3Npb24gKnNwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqa2V5LCB1aW50MzJfdCB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHRmdHBfdCAqcmVjdl90cCkKIHsKQEAgLTEzNiwxNCArMTI0LDE0IEBACiAgICAg c3RydWN0IHRmdHBfdCAqdHA7CiAgICAgaW50IG4gPSAwOwogCi0gICAgbSA9IG1fZ2V0KCk7Cisg ICAgbSA9IG1fZ2V0KHMpOwogCiAgICAgaWYgKCFtKQogCXJldHVybiAtMTsKIAogICAgIG1lbXNl dChtLT5tX2RhdGEsIDAsIG0tPm1fc2l6ZSk7CiAKLSAgICBtLT5tX2RhdGEgKz0gaWZfbWF4bGlu a2hkcjsKKyAgICBtLT5tX2RhdGEgKz0gSUZfTUFYTElOS0hEUjsKICAgICB0cCA9ICh2b2lkICop bS0+bV9kYXRhOwogICAgIG0tPm1fZGF0YSArPSBzaXplb2Yoc3RydWN0IHVkcGlwaGRyKTsKIApA QCAtMTU5LDE0ICsxNDcsMTUgQEAKIAogICAgIG0tPm1fbGVuID0gc2l6ZW9mKHN0cnVjdCB0ZnRw X3QpIC0gNTE0ICsgbiAtCiAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXApIC0gc2l6ZW9mKHN0cnVj dCB1ZHBoZHIpOwotICAgIHVkcF9vdXRwdXQyKE5VTEwsIG0sICZzYWRkciwgJmRhZGRyLCBJUFRP U19MT1dERUxBWSk7CisgICAgdWRwX291dHB1dDIocywgTlVMTCwgbSwgJnNhZGRyLCAmZGFkZHIs IElQVE9TX0xPV0RFTEFZKTsKIAogICAgIHJldHVybiAwOwogfQogCiAKIAotc3RhdGljIGludCB0 ZnRwX3NlbmRfZXJyb3Ioc3RydWN0IHRmdHBfc2Vzc2lvbiAqc3B0LAorc3RhdGljIGludCB0ZnRw X3NlbmRfZXJyb3Ioc2xpcnBfc3RhdGVfdCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB0ZnRwX3Nlc3Npb24gKnNwdCwKIAkJCSAgIHVfaW50MTZfdCBlcnJvcmNvZGUsIGNv bnN0IGNoYXIgKm1zZywKIAkJCSAgIHN0cnVjdCB0ZnRwX3QgKnJlY3ZfdHApCiB7CkBAIC0xNzUs NyArMTY0LDcgQEAKICAgc3RydWN0IHRmdHBfdCAqdHA7CiAgIGludCBub2J5dGVzOwogCi0gIG0g PSBtX2dldCgpOworICBtID0gbV9nZXQocyk7CiAKICAgaWYgKCFtKSB7CiAgICAgcmV0dXJuIC0x OwpAQCAtMTgzLDcgKzE3Miw3IEBACiAKICAgbWVtc2V0KG0tPm1fZGF0YSwgMCwgbS0+bV9zaXpl KTsKIAotICBtLT5tX2RhdGEgKz0gaWZfbWF4bGlua2hkcjsKKyAgbS0+bV9kYXRhICs9IElGX01B WExJTktIRFI7CiAgIHRwID0gKHZvaWQgKiltLT5tX2RhdGE7CiAgIG0tPm1fZGF0YSArPSBzaXpl b2Yoc3RydWN0IHVkcGlwaGRyKTsKIApAQCAtMjAyLDE0ICsxOTEsMTUgQEAKICAgbS0+bV9sZW4g PSBzaXplb2Yoc3RydWN0IHRmdHBfdCkgLSA1MTQgKyAzICsgc3RybGVuKG1zZykgLQogICAgICAg ICBzaXplb2Yoc3RydWN0IGlwKSAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKIAotICB1ZHBfb3V0 cHV0MihOVUxMLCBtLCAmc2FkZHIsICZkYWRkciwgSVBUT1NfTE9XREVMQVkpOworICB1ZHBfb3V0 cHV0MihzLCBOVUxMLCBtLCAmc2FkZHIsICZkYWRkciwgSVBUT1NfTE9XREVMQVkpOwogCiAgIHRm dHBfc2Vzc2lvbl90ZXJtaW5hdGUoc3B0KTsKIAogICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu dCB0ZnRwX3NlbmRfZGF0YShzdHJ1Y3QgdGZ0cF9zZXNzaW9uICpzcHQsCitzdGF0aWMgaW50IHRm dHBfc2VuZF9kYXRhKHNsaXJwX3N0YXRlX3QgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB0ZnRwX3Nlc3Npb24gKnNwdCwKIAkJCSAgdV9pbnQxNl90IGJsb2NrX25yLAogCQkJ ICBzdHJ1Y3QgdGZ0cF90ICpyZWN2X3RwKQogewpAQCAtMjIyLDcgKzIxMiw3IEBACiAgICAgcmV0 dXJuIC0xOwogICB9CiAKLSAgbSA9IG1fZ2V0KCk7CisgIG0gPSBtX2dldChzKTsKIAogICBpZiAo IW0pIHsKICAgICByZXR1cm4gLTE7CkBAIC0yMzAsNyArMjIwLDcgQEAKIAogICBtZW1zZXQobS0+ bV9kYXRhLCAwLCBtLT5tX3NpemUpOwogCi0gIG0tPm1fZGF0YSArPSBpZl9tYXhsaW5raGRyOwor ICBtLT5tX2RhdGEgKz0gSUZfTUFYTElOS0hEUjsKICAgdHAgPSAodm9pZCAqKW0tPm1fZGF0YTsK ICAgbS0+bV9kYXRhICs9IHNpemVvZihzdHJ1Y3QgdWRwaXBoZHIpOwogCkBAIC0yNDMsMTQgKzIz MywxNCBAQAogICBkYWRkci5zaW5fYWRkciA9IHNwdC0+Y2xpZW50X2lwOwogICBkYWRkci5zaW5f cG9ydCA9IHNwdC0+Y2xpZW50X3BvcnQ7CiAKLSAgbm9ieXRlcyA9IHRmdHBfcmVhZF9kYXRhKHNw dCwgYmxvY2tfbnIgLSAxLCB0cC0+eC50cF9kYXRhLnRwX2J1ZiwgNTEyKTsKKyAgbm9ieXRlcyA9 IHRmdHBfcmVhZF9kYXRhKHMsIHNwdCwgYmxvY2tfbnIgLSAxLCB0cC0+eC50cF9kYXRhLnRwX2J1 ZiwgNTEyKTsKIAogICBpZiAobm9ieXRlcyA8IDApIHsKLSAgICBtX2ZyZWUobSk7CisgICAgbV9m cmVlKHMsIG0pOwogCiAgICAgLyogc2VuZCAiZmlsZSBub3QgZm91bmQiIGVycm9yIGJhY2sgKi8K IAotICAgIHRmdHBfc2VuZF9lcnJvcihzcHQsIDEsICJGaWxlIG5vdCBmb3VuZCIsIHRwKTsKKyAg ICB0ZnRwX3NlbmRfZXJyb3Iocywgc3B0LCAxLCAiRmlsZSBub3QgZm91bmQiLCB0cCk7CiAKICAg ICByZXR1cm4gLTE7CiAgIH0KQEAgLTI1OCwxMCArMjQ4LDEwIEBACiAgIG0tPm1fbGVuID0gc2l6 ZW9mKHN0cnVjdCB0ZnRwX3QpIC0gKDUxMiAtIG5vYnl0ZXMpIC0KICAgICAgICAgc2l6ZW9mKHN0 cnVjdCBpcCkgLSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiAKLSAgdWRwX291dHB1dDIoTlVMTCwg bSwgJnNhZGRyLCAmZGFkZHIsIElQVE9TX0xPV0RFTEFZKTsKKyAgdWRwX291dHB1dDIocywgTlVM TCwgbSwgJnNhZGRyLCAmZGFkZHIsIElQVE9TX0xPV0RFTEFZKTsKIAogICBpZiAobm9ieXRlcyA9 PSA1MTIpIHsKLSAgICB0ZnRwX3Nlc3Npb25fdXBkYXRlKHNwdCk7CisgICAgdGZ0cF9zZXNzaW9u X3VwZGF0ZShzLCBzcHQpOwogICB9CiAgIGVsc2UgewogICAgIHRmdHBfc2Vzc2lvbl90ZXJtaW5h dGUoc3B0KTsKQEAgLTI3MCwxOSArMjYwLDE5IEBACiAgIHJldHVybiAwOwogfQogCi1zdGF0aWMg dm9pZCB0ZnRwX2hhbmRsZV9ycnEoc3RydWN0IHRmdHBfdCAqdHAsIGludCBwa3RsZW4pCitzdGF0 aWMgdm9pZCB0ZnRwX2hhbmRsZV9ycnEoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHRmdHBfdCAq dHAsIGludCBwa3RsZW4pCiB7CiAgIHN0cnVjdCB0ZnRwX3Nlc3Npb24gKnNwdDsKLSAgaW50IHMs IGssIG47CisgIGludCBzZXNzaW9uLCBrLCBuOwogICB1X2ludDhfdCAqc3JjLCAqZHN0OwogCi0g IHMgPSB0ZnRwX3Nlc3Npb25fYWxsb2NhdGUodHApOworICBzZXNzaW9uID0gdGZ0cF9zZXNzaW9u X2FsbG9jYXRlKHMsIHRwKTsKIAotICBpZiAocyA8IDApIHsKKyAgaWYgKHNlc3Npb24gPCAwKSB7 CiAgICAgcmV0dXJuOwogICB9CiAKLSAgc3B0ID0gJnRmdHBfc2Vzc2lvbnNbc107CisgIHNwdCA9 ICZzLT50ZnRwX3Nlc3Npb25zW3Nlc3Npb25dOwogCiAgIHNyYyA9IHRwLT54LnRwX2J1ZjsKICAg ZHN0ID0gc3B0LT5maWxlbmFtZTsKQEAgLTMxNSw3ICszMDUsNyBAQAogICB9CiAKICAgaWYgKG1l bWNtcCgmc3JjW2tdLCAib2N0ZXRcMCIsIDYpICE9IDApIHsKLSAgICAgIHRmdHBfc2VuZF9lcnJv cihzcHQsIDQsICJVbnN1cHBvcnRlZCB0cmFuc2ZlciBtb2RlIiwgdHApOworICAgICAgdGZ0cF9z ZW5kX2Vycm9yKHMsIHNwdCwgNCwgIlVuc3VwcG9ydGVkIHRyYW5zZmVyIG1vZGUiLCB0cCk7CiAg ICAgICByZXR1cm47CiAgIH0KIApAQCAtMzI2LDI2ICszMTYsMjYgQEAKICAgaWYgKChzcHQtPmZp bGVuYW1lWzBdICE9ICcvJykKICAgICAgIHx8IChzcHQtPmZpbGVuYW1lW3N0cmxlbihzcHQtPmZp bGVuYW1lKSAtIDFdID09ICcvJykKICAgICAgIHx8ICBzdHJzdHIoc3B0LT5maWxlbmFtZSwgIi8u Li8iKSkgewotICAgICAgdGZ0cF9zZW5kX2Vycm9yKHNwdCwgMiwgIkFjY2VzcyB2aW9sYXRpb24i LCB0cCk7CisgICAgICB0ZnRwX3NlbmRfZXJyb3Iocywgc3B0LCAyLCAiQWNjZXNzIHZpb2xhdGlv biIsIHRwKTsKICAgICAgIHJldHVybjsKICAgfQogCiAgIC8qIG9ubHkgYWxsb3cgZXhwb3J0ZWQg cHJlZml4ZXMgKi8KIAotICBpZiAoIXRmdHBfcHJlZml4KSB7Ci0gICAgICB0ZnRwX3NlbmRfZXJy b3Ioc3B0LCAyLCAiQWNjZXNzIHZpb2xhdGlvbiIsIHRwKTsKKyAgaWYgKCFzLT50ZnRwX3ByZWZp eCkgeworICAgICAgdGZ0cF9zZW5kX2Vycm9yKHMsIHNwdCwgMiwgIkFjY2VzcyB2aW9sYXRpb24i LCB0cCk7CiAgICAgICByZXR1cm47CiAgIH0KIAogICAvKiBjaGVjayBpZiB0aGUgZmlsZSBleGlz dHMgKi8KIAotICBpZiAodGZ0cF9yZWFkX2RhdGEoc3B0LCAwLCBzcHQtPmZpbGVuYW1lLCAwKSA8 IDApIHsKLSAgICAgIHRmdHBfc2VuZF9lcnJvcihzcHQsIDEsICJGaWxlIG5vdCBmb3VuZCIsIHRw KTsKKyAgaWYgKHRmdHBfcmVhZF9kYXRhKHMsIHNwdCwgMCwgc3B0LT5maWxlbmFtZSwgMCkgPCAw KSB7CisgICAgICB0ZnRwX3NlbmRfZXJyb3Iocywgc3B0LCAxLCAiRmlsZSBub3QgZm91bmQiLCB0 cCk7CiAgICAgICByZXR1cm47CiAgIH0KIAogICBpZiAoc3JjW24gLSAxXSAhPSAwKSB7Ci0gICAg ICB0ZnRwX3NlbmRfZXJyb3Ioc3B0LCAyLCAiQWNjZXNzIHZpb2xhdGlvbiIsIHRwKTsKKyAgICAg IHRmdHBfc2VuZF9lcnJvcihzLCBzcHQsIDIsICJBY2Nlc3MgdmlvbGF0aW9uIiwgdHApOwogICAg ICAgcmV0dXJuOwogICB9CiAKQEAgLTM1Niw3ICszNDYsNyBAQAogICAgICAgayArPSBzdHJsZW4o a2V5KSArIDE7CiAKICAgICAgIGlmIChrID49IG4pIHsKLQkgIHRmdHBfc2VuZF9lcnJvcihzcHQs IDIsICJBY2Nlc3MgdmlvbGF0aW9uIiwgdHApOworCSAgdGZ0cF9zZW5kX2Vycm9yKHMsIHNwdCwg MiwgIkFjY2VzcyB2aW9sYXRpb24iLCB0cCk7CiAJICByZXR1cm47CiAgICAgICB9CiAKQEAgLTM2 Nyw1NiArMzU3LDU2IEBACiAJICBpbnQgdHNpemUgPSBhdG9pKHZhbHVlKTsKIAkgIHN0cnVjdCBz dGF0IHN0YXRfcDsKIAotCSAgaWYgKHRzaXplID09IDAgJiYgdGZ0cF9wcmVmaXgpIHsKKwkgIGlm ICh0c2l6ZSA9PSAwICYmIHMtPnRmdHBfcHJlZml4KSB7CiAJICAgICAgY2hhciBidWZmZXJbMTAy NF07CiAJICAgICAgaW50IGxlbjsKIAogCSAgICAgIGxlbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6 ZW9mKGJ1ZmZlciksICIlcy8lcyIsCi0JCQkgICAgIHRmdHBfcHJlZml4LCBzcHQtPmZpbGVuYW1l KTsKKwkJCSAgICAgcy0+dGZ0cF9wcmVmaXgsIHNwdC0+ZmlsZW5hbWUpOwogCiAJICAgICAgaWYg KHN0YXQoYnVmZmVyLCAmc3RhdF9wKSA9PSAwKQogCQkgIHRzaXplID0gc3RhdF9wLnN0X3NpemU7 CiAJICAgICAgZWxzZSB7Ci0JCSAgdGZ0cF9zZW5kX2Vycm9yKHNwdCwgMSwgIkZpbGUgbm90IGZv dW5kIiwgdHApOworCQkgIHRmdHBfc2VuZF9lcnJvcihzLCBzcHQsIDEsICJGaWxlIG5vdCBmb3Vu ZCIsIHRwKTsKIAkJICByZXR1cm47CiAJICAgICAgfQogCSAgfQogCi0JICB0ZnRwX3NlbmRfb2Fj ayhzcHQsICJ0c2l6ZSIsIHRzaXplLCB0cCk7CisJICB0ZnRwX3NlbmRfb2FjayhzLCBzcHQsICJ0 c2l6ZSIsIHRzaXplLCB0cCk7CiAgICAgICB9CiAgIH0KIAotICB0ZnRwX3NlbmRfZGF0YShzcHQs IDEsIHRwKTsKKyAgdGZ0cF9zZW5kX2RhdGEocywgc3B0LCAxLCB0cCk7CiB9CiAKLXN0YXRpYyB2 b2lkIHRmdHBfaGFuZGxlX2FjayhzdHJ1Y3QgdGZ0cF90ICp0cCwgaW50IHBrdGxlbikKK3N0YXRp YyB2b2lkIHRmdHBfaGFuZGxlX2FjayhzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgdGZ0cF90ICp0 cCwgaW50IHBrdGxlbikKIHsKLSAgaW50IHM7CisgIGludCBzZXNzaW9uOwogCi0gIHMgPSB0ZnRw X3Nlc3Npb25fZmluZCh0cCk7CisgIHNlc3Npb24gPSB0ZnRwX3Nlc3Npb25fZmluZChzLCB0cCk7 CiAKLSAgaWYgKHMgPCAwKSB7CisgIGlmIChzZXNzaW9uIDwgMCkgewogICAgIHJldHVybjsKICAg fQogCi0gIGlmICh0ZnRwX3NlbmRfZGF0YSgmdGZ0cF9zZXNzaW9uc1tzXSwKKyAgaWYgKHRmdHBf c2VuZF9kYXRhKHMsICZzLT50ZnRwX3Nlc3Npb25zW3Nlc3Npb25dLAogCQkgICAgIG50b2hzKHRw LT54LnRwX2RhdGEudHBfYmxvY2tfbnIpICsgMSwKIAkJICAgICB0cCkgPCAwKSB7CiAgICAgcmV0 dXJuOwogICB9CiB9CiAKLXZvaWQgdGZ0cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqbSkKK3ZvaWQgdGZ0 cF9pbnB1dChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3QgbWJ1ZiAqbSkKIHsKICAgc3RydWN0IHRm dHBfdCAqdHAgPSAoc3RydWN0IHRmdHBfdCAqKW0tPm1fZGF0YTsKIAogICBzd2l0Y2gobnRvaHMo dHAtPnRwX29wKSkgewogICBjYXNlIFRGVFBfUlJROgotICAgIHRmdHBfaGFuZGxlX3JycSh0cCwg bS0+bV9sZW4pOworICAgIHRmdHBfaGFuZGxlX3JycShzLCB0cCwgbS0+bV9sZW4pOwogICAgIGJy ZWFrOwogCiAgIGNhc2UgVEZUUF9BQ0s6Ci0gICAgdGZ0cF9oYW5kbGVfYWNrKHRwLCBtLT5tX2xl bik7CisgICAgdGZ0cF9oYW5kbGVfYWNrKHMsIHRwLCBtLT5tX2xlbik7CiAgICAgYnJlYWs7CiAg IH0KIH0KSW5kZXg6IHFlbXUvc2xpcnAvdGZ0cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9z bGlycC90ZnRwLmgJMjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUv c2xpcnAvdGZ0cC5oCTIwMDctMTAtMjEgMTg6NDc6MTEuMDAwMDAwMDAwICswMDAwCkBAIC0zMCw0 ICszMCw0IEBACiAgIH0geDsKIH07CiAKLXZvaWQgdGZ0cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqbSk7 Cit2b2lkIHRmdHBfaW5wdXQoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IG1idWYgKm0pOwpJbmRl eDogcWVtdS9zbGlycC91ZHAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxZW11Lm9yaWcvc2xpcnAvdWRwLmMJ MjAwNy0xMC0yMSAxODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvc2xpcnAvdWRwLmMJ MjAwNy0xMC0yMiAxODo1MTo1Ny4wMDAwMDAwMDAgKzAwMDAKQEAgLTQ1LDM4ICs0NSwzMiBAQAog I2luY2x1ZGUgPHNsaXJwLmg+CiAjaW5jbHVkZSAiaXBfaWNtcC5oIgogCi1zdHJ1Y3QgdWRwc3Rh dCB1ZHBzdGF0OwotCi1zdHJ1Y3Qgc29ja2V0IHVkYjsKK3N0YXRpYyB1X2ludDhfdCB1ZHBfdG9z KHN0cnVjdCBzb2NrZXQgKnNvKTsKK3N0YXRpYyB2b2lkIHVkcF9lbXUoc2xpcnBfc3RhdGVfdCAq cywgc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICptKTsKIAogLyoKICAqIFVEUCBwcm90 b2NvbCBpbXBsZW1lbnRhdGlvbi4KICAqIFBlciBSRkMgNzY4LCBBdWd1c3QsIDE5ODAuCiAgKi8K LSNpZm5kZWYJQ09NUEFUXzQyCi1pbnQJdWRwY2tzdW0gPSAxOwotI2Vsc2UKLWludAl1ZHBja3N1 bSA9IDA7CQkvKiBYWFggKi8KLSNlbmRpZgotCi1zdHJ1Y3QJc29ja2V0ICp1ZHBfbGFzdF9zbyA9 ICZ1ZGI7CisjZGVmaW5lIHVkcGNrc3VtIDEKIAogdm9pZAotdWRwX2luaXQoKQordWRwX2luaXQo c2xpcnBfc3RhdGVfdCAqcykKIHsKLQl1ZGIuc29fbmV4dCA9IHVkYi5zb19wcmV2ID0gJnVkYjsK KyAgICAgICAgcy0+dWRwX2xhc3Rfc28gPSAmcy0+dWRiOworCXMtPnVkYi5zb19uZXh0ID0gcy0+ dWRiLnNvX3ByZXYgPSAmcy0+dWRiOwogfQorCiAvKiBtLT5tX2RhdGEgIHBvaW50cyBhdCBpcCBw YWNrZXQgaGVhZGVyCiAgKiBtLT5tX2xlbiAgIGxlbmd0aCBpcCBwYWNrZXQKICAqIGlwLT5pcF9s ZW4gbGVuZ3RoIGRhdGEgKElQRFUpCiAgKi8KIHZvaWQKLXVkcF9pbnB1dChtLCBpcGhsZW4pCi0J cmVnaXN0ZXIgc3RydWN0IG1idWYgKm07Ci0JaW50IGlwaGxlbjsKK3VkcF9pbnB1dChzbGlycF9z dGF0ZV90ICpzLCByZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbikKIHsKIAlyZWdp c3RlciBzdHJ1Y3QgaXAgKmlwOwogCXJlZ2lzdGVyIHN0cnVjdCB1ZHBoZHIgKnVoOworICAgICAg ICBzdHJ1Y3QgaXBvdmx5ICppaDsKIC8qCXN0cnVjdCBtYnVmICpvcHRzID0gMDsqLwogCWludCBs ZW47CiAJc3RydWN0IGlwIHNhdmVfaXA7CkBAIC04Niw3ICs4MCw3IEBACiAJREVCVUdfQVJHKCJt ID0gJWx4IiwgKGxvbmcpbSk7CiAJREVCVUdfQVJHKCJpcGhsZW4gPSAlZCIsIGlwaGxlbik7CiAK LQl1ZHBzdGF0LnVkcHNfaXBhY2tldHMrKzsKKwlTVEFUKHMtPnVkcHN0YXQudWRwc19pcGFja2V0 cysrKTsKIAogCS8qCiAJICogU3RyaXAgSVAgb3B0aW9ucywgaWYgYW55OyBzaG91bGQgc2tpcCB0 aGlzLApAQCAtMTEzLDcgKzEwNyw3IEBACiAKIAlpZiAoaXAtPmlwX2xlbiAhPSBsZW4pIHsKIAkJ aWYgKGxlbiA+IGlwLT5pcF9sZW4pIHsKLQkJCXVkcHN0YXQudWRwc19iYWRsZW4rKzsKKwkJCVNU QVQocy0+dWRwc3RhdC51ZHBzX2JhZGxlbisrKTsKIAkJCWdvdG8gYmFkOwogCQl9CiAJCW1fYWRq KG0sIGxlbiAtIGlwLT5pcF9sZW4pOwpAQCAtMTMwLDE3ICsxMjQsMTggQEAKIAkvKgogCSAqIENo ZWNrc3VtIGV4dGVuZGVkIFVEUCBoZWFkZXIgYW5kIGRhdGEuCiAJICovCisgICAgICAgIGloID0g KHN0cnVjdCBpcG92bHkgKilpcDsKIAlpZiAodWRwY2tzdW0gJiYgdWgtPnVoX3N1bSkgewotCSAg KChzdHJ1Y3QgaXBvdmx5ICopaXApLT5paF9uZXh0ID0gMDsKLQkgICgoc3RydWN0IGlwb3ZseSAq KWlwKS0+aWhfcHJldiA9IDA7Ci0JICAoKHN0cnVjdCBpcG92bHkgKilpcCktPmloX3gxID0gMDsK LQkgICgoc3RydWN0IGlwb3ZseSAqKWlwKS0+aWhfbGVuID0gdWgtPnVoX3VsZW47CisgICAgICAg ICAgICBpaF9zZXRfbmV4dChzLCBpaCwgMCk7CisgICAgICAgICAgICBpaF9zZXRfcHJldihzLCBp aCwgMCk7CisJICBpaC0+aWhfeDEgPSAwOworCSAgaWgtPmloX2xlbiA9IHVoLT51aF91bGVuOwog CSAgLyoga2VlcCB1aF9zdW0gZm9yIElDTVAgcmVwbHkKIAkgICAqIHVoLT51aF9zdW0gPSBja3N1 bShtLCBsZW4gKyBzaXplb2YgKHN0cnVjdCBpcCkpOwogCSAgICogaWYgKHVoLT51aF9zdW0pIHsK IAkgICAqLwogCSAgaWYoY2tzdW0obSwgbGVuICsgc2l6ZW9mKHN0cnVjdCBpcCkpKSB7Ci0JICAg IHVkcHN0YXQudWRwc19iYWRzdW0rKzsKKwkgICAgU1RBVChzLT51ZHBzdGF0LnVkcHNfYmFkc3Vt KyspOwogCSAgICBnb3RvIGJhZDsKIAkgIH0KIAl9CkBAIC0xNDksNyArMTQ0LDcgQEAKICAgICAg ICAgICogIGhhbmRsZSBESENQL0JPT1RQCiAgICAgICAgICAqLwogICAgICAgICBpZiAobnRvaHMo dWgtPnVoX2Rwb3J0KSA9PSBCT09UUF9TRVJWRVIpIHsKLSAgICAgICAgICAgIGJvb3RwX2lucHV0 KG0pOworICAgICAgICAgICAgYm9vdHBfaW5wdXQocywgbSk7CiAgICAgICAgICAgICBnb3RvIGJh ZDsKICAgICAgICAgfQogCkBAIC0xNTcsMTkgKzE1MiwxOSBAQAogICAgICAgICAgKiAgaGFuZGxl IFRGVFAKICAgICAgICAgICovCiAgICAgICAgIGlmIChudG9ocyh1aC0+dWhfZHBvcnQpID09IFRG VFBfU0VSVkVSKSB7Ci0gICAgICAgICAgICB0ZnRwX2lucHV0KG0pOworICAgICAgICAgICAgdGZ0 cF9pbnB1dChzLCBtKTsKICAgICAgICAgICAgIGdvdG8gYmFkOwogICAgICAgICB9CiAKIAkvKgog CSAqIExvY2F0ZSBwY2IgZm9yIGRhdGFncmFtLgogCSAqLwotCXNvID0gdWRwX2xhc3Rfc287CisJ c28gPSBzLT51ZHBfbGFzdF9zbzsKIAlpZiAoc28tPnNvX2xwb3J0ICE9IHVoLT51aF9zcG9ydCB8 fAogCSAgICBzby0+c29fbGFkZHIuc19hZGRyICE9IGlwLT5pcF9zcmMuc19hZGRyKSB7CiAJCXN0 cnVjdCBzb2NrZXQgKnRtcDsKIAotCQlmb3IgKHRtcCA9IHVkYi5zb19uZXh0OyB0bXAgIT0gJnVk YjsgdG1wID0gdG1wLT5zb19uZXh0KSB7CisJCWZvciAodG1wID0gcy0+dWRiLnNvX25leHQ7IHRt cCAhPSAmcy0+dWRiOyB0bXAgPSB0bXAtPnNvX25leHQpIHsKIAkJCWlmICh0bXAtPnNvX2xwb3J0 ID09IHVoLT51aF9zcG9ydCAmJgogCQkJICAgIHRtcC0+c29fbGFkZHIuc19hZGRyID09IGlwLT5p cF9zcmMuc19hZGRyKSB7CiAJCQkJdG1wLT5zb19mYWRkci5zX2FkZHIgPSBpcC0+aXBfZHN0LnNf YWRkcjsKQEAgLTE3OCwxMSArMTczLDExIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJaWYg KHRtcCA9PSAmdWRiKSB7CisJCWlmICh0bXAgPT0gJnMtPnVkYikgewogCQkgIHNvID0gTlVMTDsK IAkJfSBlbHNlIHsKLQkJICB1ZHBzdGF0LnVkcHBzX3BjYmNhY2hlbWlzcysrOwotCQkgIHVkcF9s YXN0X3NvID0gc287CisJCSAgU1RBVChzLT51ZHBzdGF0LnVkcHBzX3BjYmNhY2hlbWlzcysrKTsK KwkJICBzLT51ZHBfbGFzdF9zbyA9IHNvOwogCQl9CiAJfQogCkBAIC0xOTIsMTAgKzE4NywxMCBA QAogCSAgICogY3JlYXRlIG9uZQogCSAgICovCiAJICBpZiAoKHNvID0gc29jcmVhdGUoKSkgPT0g TlVMTCkgZ290byBiYWQ7Ci0JICBpZih1ZHBfYXR0YWNoKHNvKSA9PSAtMSkgeworCSAgaWYodWRw X2F0dGFjaChzLCBzbykgPT0gLTEpIHsKIAkgICAgREVCVUdfTUlTQygoZGZkLCIgdWRwX2F0dGFj aCBlcnJubyA9ICVkLSVzXG4iLAogCQkJZXJybm8sc3RyZXJyb3IoZXJybm8pKSk7Ci0JICAgIHNv ZnJlZShzbyk7CisgICAgICAgICAgICBzb2ZyZWUocywgc28pOwogCSAgICBnb3RvIGJhZDsKIAkg IH0KIApAQCAtMjI2LDE3ICsyMjEsMTcgQEAKIAkgKiBOb3cgd2Ugc2VuZHRvKCkgdGhlIHBhY2tl dC4KIAkgKi8KIAlpZiAoc28tPnNvX2VtdSkKLQkgICB1ZHBfZW11KHNvLCBtKTsKKwkgICB1ZHBf ZW11KHMsIHNvLCBtKTsKIAotCWlmKHNvc2VuZHRvKHNvLG0pID09IC0xKSB7CisJaWYoc29zZW5k dG8ocywgc28sbSkgPT0gLTEpIHsKIAkgIG0tPm1fbGVuICs9IGlwaGxlbjsKIAkgIG0tPm1fZGF0 YSAtPSBpcGhsZW47CiAJICAqaXA9c2F2ZV9pcDsKIAkgIERFQlVHX01JU0MoKGRmZCwidWRwIHR4 IGVycm5vID0gJWQtJXNcbiIsZXJybm8sc3RyZXJyb3IoZXJybm8pKSk7Ci0JICBpY21wX2Vycm9y KG0sIElDTVBfVU5SRUFDSCxJQ01QX1VOUkVBQ0hfTkVULCAwLHN0cmVycm9yKGVycm5vKSk7CisJ ICBpY21wX2Vycm9yKHMsIG0sIElDTVBfVU5SRUFDSCxJQ01QX1VOUkVBQ0hfTkVULCAwLHN0cmVy cm9yKGVycm5vKSk7CiAJfQogCi0JbV9mcmVlKHNvLT5zb19tKTsgICAvKiB1c2VkIGZvciBJQ01Q IGlmIGVycm9yIG9uIHNvcmVjdmZyb20gKi8KKwltX2ZyZWUocywgc28tPnNvX20pOyAgIC8qIHVz ZWQgZm9yIElDTVAgaWYgZXJyb3Igb24gc29yZWN2ZnJvbSAqLwogCiAJLyogcmVzdG9yZSB0aGUg b3JpZyBtYnVmIHBhY2tldCAqLwogCW0tPm1fbGVuICs9IGlwaGxlbjsKQEAgLTI0NiwxMiArMjQx LDEyIEBACiAKIAlyZXR1cm47CiBiYWQ6Ci0JbV9mcmVlbShtKTsKKwltX2ZyZWVtKHMsIG0pOwog CS8qIGlmIChvcHRzKSBtX2ZyZWVtKG9wdHMpOyAqLwogCXJldHVybjsKIH0KIAotaW50IHVkcF9v dXRwdXQyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbSwKK2ludCB1ZHBfb3V0cHV0 MihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm0sCiAg ICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzYWRkciwgc3RydWN0IHNvY2thZGRy X2luICpkYWRkciwKICAgICAgICAgICAgICAgICBpbnQgaXB0b3MpCiB7CkBAIC0yNzUsNyArMjcw LDggQEAKIAkgKiBhbmQgYWRkcmVzc2VzIGFuZCBsZW5ndGggcHV0IGludG8gbmV0d29yayBmb3Jt YXQuCiAJICovCiAJdWkgPSBtdG9kKG0sIHN0cnVjdCB1ZHBpcGhkciAqKTsKLQl1aS0+dWlfbmV4 dCA9IHVpLT51aV9wcmV2ID0gMDsKKyAgICAgICAgdWlfc2V0X25leHQocywgdWksIE5VTEwpOwor ICAgICAgICB1aV9zZXRfcHJldihzLCB1aSwgTlVMTCk7CiAJdWktPnVpX3gxID0gMDsKIAl1aS0+ dWlfcHIgPSBJUFBST1RPX1VEUDsKIAl1aS0+dWlfbGVuID0gaHRvbnMobS0+bV9sZW4gLSBzaXpl b2Yoc3RydWN0IGlwKSk7IC8qICsgc2l6ZW9mIChzdHJ1Y3QgdWRwaGRyKSk7ICovCkBAIC0yOTYs MzcgKzI5MiwzNSBAQAogCX0KIAkoKHN0cnVjdCBpcCAqKXVpKS0+aXBfbGVuID0gbS0+bV9sZW47 CiAKLQkoKHN0cnVjdCBpcCAqKXVpKS0+aXBfdHRsID0gaXBfZGVmdHRsOworCSgoc3RydWN0IGlw ICopdWkpLT5pcF90dGwgPSBJUERFRlRUTDsKIAkoKHN0cnVjdCBpcCAqKXVpKS0+aXBfdG9zID0g aXB0b3M7CiAKLQl1ZHBzdGF0LnVkcHNfb3BhY2tldHMrKzsKKwlTVEFUKHMtPnVkcHN0YXQudWRw c19vcGFja2V0cysrKTsKIAotCWVycm9yID0gaXBfb3V0cHV0KHNvLCBtKTsKKwllcnJvciA9IGlw X291dHB1dChzLCBzbywgbSk7CiAKIAlyZXR1cm4gKGVycm9yKTsKIH0KIAotaW50IHVkcF9vdXRw dXQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICptLAoraW50IHVkcF9vdXRwdXQoc2xp cnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICptLAogICAgICAg ICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICphZGRyKQotCiB7CiAgICAgc3RydWN0IHNvY2th ZGRyX2luIHNhZGRyLCBkYWRkcjsKIAogICAgIHNhZGRyID0gKmFkZHI7Ci0gICAgaWYgKChzby0+ c29fZmFkZHIuc19hZGRyICYgaHRvbmwoMHhmZmZmZmYwMCkpID09IHNwZWNpYWxfYWRkci5zX2Fk ZHIpIHsKKyAgICBpZiAoKHNvLT5zb19mYWRkci5zX2FkZHIgJiBodG9ubCgweGZmZmZmZjAwKSkg PT0gcy0+c3BlY2lhbF9hZGRyLnNfYWRkcikgewogICAgICAgICBzYWRkci5zaW5fYWRkci5zX2Fk ZHIgPSBzby0+c29fZmFkZHIuc19hZGRyOwogICAgICAgICBpZiAoKHNvLT5zb19mYWRkci5zX2Fk ZHIgJiBodG9ubCgweDAwMDAwMGZmKSkgPT0gaHRvbmwoMHhmZikpCi0gICAgICAgICAgICBzYWRk ci5zaW5fYWRkci5zX2FkZHIgPSBhbGlhc19hZGRyLnNfYWRkcjsKKyAgICAgICAgICAgIHNhZGRy LnNpbl9hZGRyLnNfYWRkciA9IHMtPmFsaWFzX2FkZHIuc19hZGRyOwogICAgIH0KICAgICBkYWRk ci5zaW5fYWRkciA9IHNvLT5zb19sYWRkcjsKICAgICBkYWRkci5zaW5fcG9ydCA9IHNvLT5zb19s cG9ydDsKIAotICAgIHJldHVybiB1ZHBfb3V0cHV0MihzbywgbSwgJnNhZGRyLCAmZGFkZHIsIHNv LT5zb19pcHRvcyk7CisgICAgcmV0dXJuIHVkcF9vdXRwdXQyKHMsIHNvLCBtLCAmc2FkZHIsICZk YWRkciwgc28tPnNvX2lwdG9zKTsKIH0KIAogaW50Ci11ZHBfYXR0YWNoKHNvKQotICAgICBzdHJ1 Y3Qgc29ja2V0ICpzbzsKK3VkcF9hdHRhY2goc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tl dCAqc28pCiB7CiAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwogCkBAIC0zNDksMjUgKzM0Mywz MCBAQAogICAgICAgZXJybm89bGFzdGVycm5vOwogI2VuZGlmCiAgICAgfSBlbHNlIHsKKyAgICAg IGludCBvcHQgPSAxOwogICAgICAgLyogc3VjY2VzcywgaW5zZXJ0IGluIHF1ZXVlICovCi0gICAg ICBzby0+c29fZXhwaXJlID0gY3VydGltZSArIFNPX0VYUElSRTsKLSAgICAgIGluc3F1ZShzbywm dWRiKTsKKyAgICAgIHNvLT5zb19leHBpcmUgPSBzLT5jdXJ0aW1lICsgU09fRVhQSVJFOworICAg ICAgLyogZW5hYmxlIGJyb2FkY2FzdCBmb3IgbGF0ZXIgdXNlICovCisgICAgICBzZXRzb2Nrb3B0 KHNvLT5zLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsIChjb25zdCBjaGFyICopJm9wdCwgc2l6 ZW9mKG9wdCkpOworICAgICAgaW5zcXVlKHMsIHNvLCAmcy0+dWRiKTsKICAgICB9CiAgIH0KICAg cmV0dXJuKHNvLT5zKTsKIH0KIAogdm9pZAotdWRwX2RldGFjaChzbykKLQlzdHJ1Y3Qgc29ja2V0 ICpzbzsKK3VkcF9kZXRhY2goc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pCiB7 CisJLyogQ29ycmVjdGx5IHVwZGF0ZSBsaXN0IGlmIGRldGFjaGluZyBsYXN0IHNvY2tldCBpbiBs aXN0LiAqLworCWlmIChzbyA9PSBzLT51ZHBfbGFzdF9zbykKKyAgICAgICAgICAgIHMtPnVkcF9s YXN0X3NvID0gJnMtPnVkYjsKIAljbG9zZXNvY2tldChzby0+cyk7CiAJLyogaWYgKHNvLT5zb19t KSBtX2ZyZWUoc28tPnNvX20pOyAgICBkb25lIGJ5IHNvZnJlZSAqLwogCi0Jc29mcmVlKHNvKTsK Kwlzb2ZyZWUocywgc28pOwogfQogCi1zdHJ1Y3QgdG9zX3QgdWRwdG9zW10gPSB7CitzdGF0aWMg Y29uc3Qgc3RydWN0IHRvc190IHVkcHRvc1tdID0gewogCXswLCA1MywgSVBUT1NfTE9XREVMQVks IDB9LAkJCS8qIEROUyAqLwogCXs1MTcsIDUxNywgSVBUT1NfTE9XREVMQVksIEVNVV9UQUxLfSwJ LyogdGFsayAqLwogCXs1MTgsIDUxOCwgSVBUT1NfTE9XREVMQVksIEVNVV9OVEFMS30sCS8qIG50 YWxrICovCkBAIC0zNzUsOSArMzc0LDggQEAKIAl7MCwgMCwgMCwgMH0KIH07CiAKLXVfaW50OF90 Ci11ZHBfdG9zKHNvKQotCXN0cnVjdCBzb2NrZXQgKnNvOworc3RhdGljIHVfaW50OF90Cit1ZHBf dG9zKHN0cnVjdCBzb2NrZXQgKnNvKQogewogCWludCBpID0gMDsKIApAQCAtNDAwLDEwICszOTgs OCBAQAogLyoKICAqIEhlcmUsIHRhbGsveXRhbGsvbnRhbGsgcmVxdWVzdHMgbXVzdCBiZSBlbXVs YXRlZAogICovCi12b2lkCi11ZHBfZW11KHNvLCBtKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotCXN0 cnVjdCBtYnVmICptOworc3RhdGljIHZvaWQKK3VkcF9lbXUoc2xpcnBfc3RhdGVfdCAqcywgc3Ry dWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICptKQogewogCXN0cnVjdCBzb2NrYWRkcl9pbiBh ZGRyOwogICAgICAgICBpbnQgYWRkcmxlbiA9IHNpemVvZihhZGRyKTsKQEAgLTQ3MCwxNCArNDY2 LDE0IEBACiAJCQlubXNnID0gKENUTF9NU0cgKikgYnVmZjsKIAkJCXR5cGUgPSBvbXNnLT50eXBl OwogCQkJT1RPU0lOKG9tc2csIGN0bF9hZGRyKS0+c2luX3BvcnQgPSBhZGRyLnNpbl9wb3J0Owot CQkJT1RPU0lOKG9tc2csIGN0bF9hZGRyKS0+c2luX2FkZHIgPSBvdXJfYWRkcjsKKwkJCU9UT1NJ TihvbXNnLCBjdGxfYWRkciktPnNpbl9hZGRyID0gcy0+b3VyX2FkZHI7CiAJCQlzdHJuY3B5KG9t c2ctPmxfbmFtZSwgZ2V0bG9naW4oKSwgTkFNRV9TSVpFX09MRCk7CiAJCX0gZWxzZSB7CQkvKiBu ZXcgdGFsayAqLwogCQkJb21zZyA9IChDVExfTVNHX09MRCAqKSBidWZmOwogCQkJbm1zZyA9IG10 b2QobSwgQ1RMX01TRyAqKTsKIAkJCXR5cGUgPSBubXNnLT50eXBlOwogCQkJT1RPU0lOKG5tc2cs IGN0bF9hZGRyKS0+c2luX3BvcnQgPSBhZGRyLnNpbl9wb3J0OwotCQkJT1RPU0lOKG5tc2csIGN0 bF9hZGRyKS0+c2luX2FkZHIgPSBvdXJfYWRkcjsKKwkJCU9UT1NJTihubXNnLCBjdGxfYWRkcikt PnNpbl9hZGRyID0gcy0+b3VyX2FkZHI7CiAJCQlzdHJuY3B5KG5tc2ctPmxfbmFtZSwgZ2V0bG9n aW4oKSwgTkFNRV9TSVpFX09MRCk7CiAJCX0KIApAQCAtNTMwLDkgKzUyNiw5IEBACiAJCQkJCShz dHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsCiAJCQkJCSZhZGRybGVuKTsKIAkJCU9UT1NJTihvbXNn LCBhZGRyKS0+c2luX3BvcnQgPSBhZGRyLnNpbl9wb3J0OwotCQkJT1RPU0lOKG9tc2csIGFkZHIp LT5zaW5fYWRkciA9IG91cl9hZGRyOworCQkJT1RPU0lOKG9tc2csIGFkZHIpLT5zaW5fYWRkciA9 IHMtPm91cl9hZGRyOwogCQkJT1RPU0lOKG5tc2csIGFkZHIpLT5zaW5fcG9ydCA9IGFkZHIuc2lu X3BvcnQ7Ci0JCQlPVE9TSU4obm1zZywgYWRkciktPnNpbl9hZGRyID0gb3VyX2FkZHI7CisJCQlP VE9TSU4obm1zZywgYWRkciktPnNpbl9hZGRyID0gcy0+b3VyX2FkZHI7CiAKIAkJCS8qIHNlbmQg TEVBVkVfSU5WSVRFcyAqLwogCQkJdGVtcF9wb3J0ID0gT1RPU0lOKG9tc2csIGN0bF9hZGRyKS0+ c2luX3BvcnQ7CkBAIC01NDEsNyArNTM3LDcgQEAKIAkJCW9tc2ctPnR5cGUgPSBubXNnLT50eXBl ID0gTEVBVkVfSU5WSVRFOwogCiAJCQlzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQ UFJPVE9fSVApOwotCQkJYWRkci5zaW5fYWRkciA9IG91cl9hZGRyOworCQkJYWRkci5zaW5fYWRk ciA9IHMtPm91cl9hZGRyOwogCQkJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAkJCWFkZHIu c2luX3BvcnQgPSBodG9ucyg1MTcpOwogCQkJc2VuZHRvKHMsIChjaGFyICopb21zZywgc2l6ZW9m KCpvbXNnKSwgMCwKQEAgLTU3Miw3ICs1NjgsNyBAQAogCQkJT1RPU0lOKG5tc2csIGN0bF9hZGRy KS0+c2luX3BvcnQgPSAwOwogCiAJCQlzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQ UFJPVE9fSVApOwotCQkJYWRkci5zaW5fYWRkciA9IG91cl9hZGRyOworCQkJYWRkci5zaW5fYWRk ciA9IHMtPm91cl9hZGRyOwogCQkJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKIAkJCWFkZHIu c2luX3BvcnQgPSBodG9ucyg1MTcpOwogCQkJc2VuZHRvKHMsIChjaGFyICopb21zZywgc2l6ZW9m KCpvbXNnKSwgMCwKQEAgLTYyMSw3ICs2MTcsNyBAQAogCQkJCXJldHVybjsKIAkJCWN1X2hlYWQg PSBtdG9kKG0sIHN0cnVjdCBjdV9oZWFkZXIgKik7CiAJCQljdV9oZWFkLT5zX3BvcnQgPSBhZGRy LnNpbl9wb3J0OwotCQkJY3VfaGVhZC0+c29fYWRkciA9IG91cl9hZGRyLnNfYWRkcjsKKwkJCWN1 X2hlYWQtPnNvX2FkZHIgPSBzLT5vdXJfYWRkci5zX2FkZHI7CiAJCX0KIAogCQlyZXR1cm47CkBA IC02MjksMTEgKzYyNSw4IEBACiB9CiAKIHN0cnVjdCBzb2NrZXQgKgotdWRwX2xpc3Rlbihwb3J0 LCBsYWRkciwgbHBvcnQsIGZsYWdzKQotCXVfaW50IHBvcnQ7Ci0JdV9pbnQzMl90IGxhZGRyOwot CXVfaW50IGxwb3J0OwotCWludCBmbGFnczsKK3VkcF9saXN0ZW4oc2xpcnBfc3RhdGVfdCAqcywg dV9pbnQgcG9ydCwgdV9pbnQzMl90IGxhZGRyLCB1X2ludCBscG9ydCwKKyAgICAgICAgICAgaW50 IGZsYWdzKQogewogCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwogCXN0cnVjdCBzb2NrZXQgKnNv OwpAQCAtNjQ0LDE1ICs2MzcsMTUgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXNvLT5zID0gc29j a2V0KEFGX0lORVQsU09DS19ER1JBTSwwKTsKLQlzby0+c29fZXhwaXJlID0gY3VydGltZSArIFNP X0VYUElSRTsKLQlpbnNxdWUoc28sJnVkYik7CisJc28tPnNvX2V4cGlyZSA9IHMtPmN1cnRpbWUg KyBTT19FWFBJUkU7CisJaW5zcXVlKHMsIHNvLCAmcy0+dWRiKTsKIAogCWFkZHIuc2luX2ZhbWls eSA9IEFGX0lORVQ7CiAJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwogCWFkZHIu c2luX3BvcnQgPSBwb3J0OwogCiAJaWYgKGJpbmQoc28tPnMsKHN0cnVjdCBzb2NrYWRkciAqKSZh ZGRyLCBhZGRybGVuKSA8IDApIHsKLQkJdWRwX2RldGFjaChzbyk7CisJCXVkcF9kZXRhY2gocywg c28pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJc2V0c29ja29wdChzby0+cyxTT0xfU09DS0VULFNP X1JFVVNFQUREUiwoY2hhciAqKSZvcHQsc2l6ZW9mKGludCkpOwpAQCAtNjYwLDggKzY1Myw4IEBA CiAKIAlnZXRzb2NrbmFtZShzby0+cywoc3RydWN0IHNvY2thZGRyICopJmFkZHIsJmFkZHJsZW4p OwogCXNvLT5zb19mcG9ydCA9IGFkZHIuc2luX3BvcnQ7Ci0JaWYgKGFkZHIuc2luX2FkZHIuc19h ZGRyID09IDAgfHwgYWRkci5zaW5fYWRkci5zX2FkZHIgPT0gbG9vcGJhY2tfYWRkci5zX2FkZHIp Ci0JICAgc28tPnNvX2ZhZGRyID0gYWxpYXNfYWRkcjsKKwlpZiAoYWRkci5zaW5fYWRkci5zX2Fk ZHIgPT0gMCB8fCBhZGRyLnNpbl9hZGRyLnNfYWRkciA9PSBzLT5sb29wYmFja19hZGRyLnNfYWRk cikKKwkgICBzby0+c29fZmFkZHIgPSBzLT5hbGlhc19hZGRyOwogCWVsc2UKIAkgICBzby0+c29f ZmFkZHIgPSBhZGRyLnNpbl9hZGRyOwogCkluZGV4OiBxZW11L3NsaXJwL3VkcC5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHFlbXUub3JpZy9zbGlycC91ZHAuaAkyMDA3LTEwLTIxIDE4OjQ3OjA4LjAwMDAwMDAw MCArMDAwMAorKysgcWVtdS9zbGlycC91ZHAuaAkyMDA3LTEwLTIyIDE1OjM5OjU5LjAwMDAwMDAw MCArMDAwMApAQCAtNDAsOCArNDAsNiBAQAogI2RlZmluZSBVRFBfVFRMIDB4NjAKICNkZWZpbmUg VURQX1VEUERBVEFMRU4gMTYxOTIKIAotZXh0ZXJuIHN0cnVjdCBzb2NrZXQgKnVkcF9sYXN0X3Nv OwotCiAvKgogICogVWRwIHByb3RvY29sIGhlYWRlci4KICAqIFBlciBSRkMgNzY4LCBTZXB0ZW1i ZXIsIDE5ODEuCkBAIC02MCw4ICs1OCwxNyBAQAogCSAgICAgICAgc3RydWN0ICBpcG92bHkgdWlf aTsgICAgICAgICAgICAvKiBvdmVybGFpZCBpcCBzdHJ1Y3R1cmUgKi8KIAkgICAgICAgIHN0cnVj dCAgdWRwaGRyIHVpX3U7ICAgICAgICAgICAgLyogdWRwIGhlYWRlciAqLwogfTsKLSNkZWZpbmUg dWlfbmV4dCAgICAgICAgIHVpX2kuaWhfbmV4dAotI2RlZmluZSB1aV9wcmV2ICAgICAgICAgdWlf aS5paF9wcmV2CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1aV9zZXRfbmV4dChzbGlycF9zdGF0ZV90 ICpzLCBzdHJ1Y3QgdWRwaXBoZHIgKnVpLCBzdHJ1Y3QgdWRwaXBoZHIgKm5leHQpCit7CisgICAg aWhfc2V0X25leHQocywgJnVpLT51aV9pLCAoc3RydWN0IGlwb3ZseSAqKW5leHQpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgdWlfc2V0X3ByZXYoc2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHVk cGlwaGRyICp1aSwgc3RydWN0IHVkcGlwaGRyICpwcmV2KQoreworICAgIGloX3NldF9wcmV2KHMs ICZ1aS0+dWlfaSwgKHN0cnVjdCBpcG92bHkgKilwcmV2KTsKK30KKwogI2RlZmluZSB1aV94MSAg ICAgICAgICAgdWlfaS5paF94MQogI2RlZmluZSB1aV9wciAgICAgICAgICAgdWlfaS5paF9wcgog I2RlZmluZSB1aV9sZW4gICAgICAgICAgdWlfaS5paF9sZW4KQEAgLTkyLDE5ICs5OSwxNyBAQAog I2RlZmluZSBVRFBDVExfQ0hFQ0tTVU0gICAgICAgICAxICAgICAgIC8qIGNoZWNrc3VtIFVEUCBw YWNrZXRzICovCiAjZGVmaW5lIFVEUENUTF9NQVhJRCAgICAgICAgICAgIDIKIAotZXh0ZXJuIHN0 cnVjdCB1ZHBzdGF0IHVkcHN0YXQ7Ci1leHRlcm4gc3RydWN0IHNvY2tldCB1ZGI7CiBzdHJ1Y3Qg bWJ1ZjsKIAotdm9pZCB1ZHBfaW5pdCBfUCgodm9pZCkpOwotdm9pZCB1ZHBfaW5wdXQgX1AoKHJl Z2lzdGVyIHN0cnVjdCBtYnVmICosIGludCkpOwotaW50IHVkcF9vdXRwdXQgX1AoKHN0cnVjdCBz b2NrZXQgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IHNvY2thZGRyX2luICopKTsKLWludCB1ZHBf YXR0YWNoIF9QKChzdHJ1Y3Qgc29ja2V0ICopKTsKLXZvaWQgdWRwX2RldGFjaCBfUCgoc3RydWN0 IHNvY2tldCAqKSk7Ci11X2ludDhfdCB1ZHBfdG9zIF9QKChzdHJ1Y3Qgc29ja2V0ICopKTsKLXZv aWQgdWRwX2VtdSBfUCgoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbWJ1ZiAqKSk7Ci1zdHJ1Y3Qg c29ja2V0ICogdWRwX2xpc3RlbiBfUCgodV9pbnQsIHVfaW50MzJfdCwgdV9pbnQsIGludCkpOwot aW50IHVkcF9vdXRwdXQyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbSwKK3ZvaWQg dWRwX2luaXQoc2xpcnBfc3RhdGVfdCAqcyk7Cit2b2lkIHVkcF9pbnB1dChzbGlycF9zdGF0ZV90 ICpzLCByZWdpc3RlciBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbik7CitpbnQgdWRwX291dHB1 dChzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm0sCisg ICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIpOworaW50IHVkcF9hdHRhY2go c2xpcnBfc3RhdGVfdCAqcywgc3RydWN0IHNvY2tldCAqc28pOwordm9pZCB1ZHBfZGV0YWNoKHNs aXJwX3N0YXRlX3QgKnMsIHN0cnVjdCBzb2NrZXQgKnNvKTsKK3N0cnVjdCBzb2NrZXQgKnVkcF9s aXN0ZW4oc2xpcnBfc3RhdGVfdCAqcywgdV9pbnQgcG9ydCwgdV9pbnQzMl90IGxhZGRyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBscG9ydCwgaW50IGZsYWdzKTsKK2ludCB1ZHBf b3V0cHV0MihzbGlycF9zdGF0ZV90ICpzLCBzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYg Km0sCiAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzYWRkciwgc3RydWN0IHNv Y2thZGRyX2luICpkYWRkciwKICAgICAgICAgICAgICAgICBpbnQgaXB0b3MpOwogI2VuZGlmCklu ZGV4OiBxZW11L3ZsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3ZsLmMJMjAwNy0xMC0yMSAx ODo0NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvdmwuYwkyMDA3LTEwLTIxIDE4OjQ3OjEx LjAwMDAwMDAwMCArMDAwMApAQCAtMzYwOCwxMyArMzYwOCwyOCBAQAogCiBzdGF0aWMgaW50IHNs aXJwX2luaXRlZDsKIHN0YXRpYyBWTEFOQ2xpZW50U3RhdGUgKnNsaXJwX3ZjOworc3RhdGljIGNv bnN0IGNoYXIgKnRmdHBfcHJlZml4Oworc3RhdGljIGNvbnN0IGNoYXIgKmJvb3RwX2ZpbGVuYW1l Oworc3RhdGljIGNvbnN0IGNoYXIgKnNsaXJwX2hvc3RuYW1lOworc3RhdGljIHZvaWQgKnNsaXJw X29wYXF1ZTsKK3N0YXRpYyBjaGFyIHNsaXJwX25ldHdvcmtbMzJdOwogCi1pbnQgc2xpcnBfY2Fu X291dHB1dCh2b2lkKQordm9pZCBzbGlycF9tYXliZV9pbml0KHZvaWQpCit7CisgICAgaWYgKCFz bGlycF9pbml0ZWQpIHsKKyAgICAgICAgc2xpcnBfaW5pdGVkID0gMTsKKyAgICAgICAgc3ByaW50 ZihzbGlycF9uZXR3b3JrLCAiMTAuMC4lZC4wIiwgc2xpcnBfdmMtPnZsYW4tPmlkICsgMik7Cisg ICAgICAgIHNsaXJwX29wYXF1ZSA9IHNsaXJwX2luaXQoc2xpcnBfdmMsIHNsaXJwX2hvc3RuYW1l LCB0ZnRwX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlycF9u ZXR3b3JrKTsKKyAgICB9Cit9CisKK2ludCBzbGlycF9jYW5fb3V0cHV0KHZvaWQgKnVzZXIpCiB7 CiAgICAgcmV0dXJuICFzbGlycF92YyB8fCBxZW11X2Nhbl9zZW5kX3BhY2tldChzbGlycF92Yyk7 CiB9CiAKLXZvaWQgc2xpcnBfb3V0cHV0KGNvbnN0IHVpbnQ4X3QgKnBrdCwgaW50IHBrdF9sZW4p Cit2b2lkIHNsaXJwX291dHB1dCh2b2lkICp1c2VyLCBjb25zdCB1aW50OF90ICpwa3QsIGludCBw a3RfbGVuKQogewogI2lmIDAKICAgICBwcmludGYoInNsaXJwIG91dHB1dDpcbiIpOwpAQCAtMzYz MSwxNyArMzY0NiwxMyBAQAogICAgIHByaW50Zigic2xpcnAgaW5wdXQ6XG4iKTsKICAgICBoZXhf ZHVtcChzdGRvdXQsIGJ1Ziwgc2l6ZSk7CiAjZW5kaWYKLSAgICBzbGlycF9pbnB1dChidWYsIHNp emUpOworICAgIHNsaXJwX2lucHV0KHNsaXJwX29wYXF1ZSwgYnVmLCBzaXplKTsKIH0KIAogc3Rh dGljIGludCBuZXRfc2xpcnBfaW5pdChWTEFOU3RhdGUgKnZsYW4pCiB7Ci0gICAgaWYgKCFzbGly cF9pbml0ZWQpIHsKLSAgICAgICAgc2xpcnBfaW5pdGVkID0gMTsKLSAgICAgICAgc2xpcnBfaW5p dCgpOwotICAgIH0KLSAgICBzbGlycF92YyA9IHFlbXVfbmV3X3ZsYW5fY2xpZW50KHZsYW4sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlycF9yZWNlaXZlLCBOVUxMLCBO VUxMKTsKKyAgICBzbGlycF92YyA9IHFlbXVfbmV3X3ZsYW5fY2xpZW50KHZsYW4sIHNsaXJwX3Jl Y2VpdmUsIE5VTEwsIE5VTEwpOworICAgIHNsaXJwX21heWJlX2luaXQoKTsKICAgICBzbnByaW50 ZihzbGlycF92Yy0+aW5mb19zdHIsIHNpemVvZihzbGlycF92Yy0+aW5mb19zdHIpLCAidXNlciBy ZWRpcmVjdG9yIik7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNjU0LDExICszNjY1LDcgQEAKICAg ICBzdHJ1Y3QgaW5fYWRkciBndWVzdF9hZGRyOwogICAgIGludCBob3N0X3BvcnQsIGd1ZXN0X3Bv cnQ7CiAKLSAgICBpZiAoIXNsaXJwX2luaXRlZCkgewotICAgICAgICBzbGlycF9pbml0ZWQgPSAx OwotICAgICAgICBzbGlycF9pbml0KCk7Ci0gICAgfQotCisgICAgc2xpcnBfbWF5YmVfaW5pdCgp OwogICAgIHAgPSByZWRpcl9zdHI7CiAgICAgaWYgKGdldF9zdHJfc2VwKGJ1Ziwgc2l6ZW9mKGJ1 ZiksICZwLCAnOicpIDwgMCkKICAgICAgICAgZ290byBmYWlsOwpAQCAtMzY4OCw3ICszNjk1LDgg QEAKICAgICBpZiAociA9PSBwKQogICAgICAgICBnb3RvIGZhaWw7CiAKLSAgICBpZiAoc2xpcnBf cmVkaXIoaXNfdWRwLCBob3N0X3BvcnQsIGd1ZXN0X2FkZHIsIGd1ZXN0X3BvcnQpIDwgMCkgewor ICAgIGlmIChzbGlycF9yZWRpcihzbGlycF9vcGFxdWUsIGlzX3VkcCwgaG9zdF9wb3J0LCBndWVz dF9hZGRyLAorICAgICAgICAgICAgICAgICAgICBndWVzdF9wb3J0KSA8IDApIHsKICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJxZW11OiBjb3VsZCBub3Qgc2V0IHVwIHJlZGlyZWN0aW9uXG4iKTsK ICAgICAgICAgZXhpdCgxKTsKICAgICB9CkBAIC0zNzMyLDExICszNzQwLDcgQEAKICAgICBjaGFy IHNtYl9jbWRsaW5lWzEwMjRdOwogICAgIEZJTEUgKmY7CiAKLSAgICBpZiAoIXNsaXJwX2luaXRl ZCkgewotICAgICAgICBzbGlycF9pbml0ZWQgPSAxOwotICAgICAgICBzbGlycF9pbml0KCk7Ci0g ICAgfQotCisgICAgc2xpcnBfbWF5YmVfaW5pdCgpOwogICAgIC8qIFhYWDogYmV0dGVyIHRtcCBk aXIgY29uc3RydWN0aW9uICovCiAgICAgc25wcmludGYoc21iX2Rpciwgc2l6ZW9mKHNtYl9kaXIp LCAiL3RtcC9xZW11LXNtYi4lZCIsIGdldHBpZCgpKTsKICAgICBpZiAobWtkaXIoc21iX2Rpciwg MDcwMCkgPCAwKSB7CkBAIC0zNzc3LDEwICszNzgxLDE0IEBACiAgICAgc25wcmludGYoc21iX2Nt ZGxpbmUsIHNpemVvZihzbWJfY21kbGluZSksICIlcyAtcyAlcyIsCiAgICAgICAgICAgICAgU01C RF9DT01NQU5ELCBzbWJfY29uZik7CiAKLSAgICBzbGlycF9hZGRfZXhlYygwLCBzbWJfY21kbGlu ZSwgNCwgMTM5KTsKKyAgICBzbGlycF9hZGRfZXhlYyhzbGlycF9vcGFxdWUsIDAsIHNtYl9jbWRs aW5lLCA0LCAxMzkpOwogfQogCiAjZW5kaWYgLyogIWRlZmluZWQoX1dJTjMyKSAqLwordm9pZCBk b19pbmZvX3NsaXJwKHZvaWQpCit7CisgICAgc2xpcnBfc3RhdHMoc2xpcnBfb3BhcXVlKTsKK30K IAogI2VuZGlmIC8qIENPTkZJR19TTElSUCAqLwogCkBAIC00NjAwLDggKzQ2MDgsOCBAQAogICAg IH0gZWxzZQogI2lmZGVmIENPTkZJR19TTElSUAogICAgIGlmICghc3RyY21wKGRldmljZSwgInVz ZXIiKSkgewotICAgICAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJo b3N0bmFtZSIsIHApKSB7Ci0gICAgICAgICAgICBwc3RyY3B5KHNsaXJwX2hvc3RuYW1lLCBzaXpl b2Yoc2xpcnBfaG9zdG5hbWUpLCBidWYpOworICAgICAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1 Ziwgc2l6ZW9mKGJ1ZiksICJob3N0bmFtZSIsIHApIDw9IDApIHsKKyAgICAgICAgICAgIHNsaXJw X2hvc3RuYW1lID0gc3RyZHVwKGJ1Zik7CiAgICAgICAgIH0KICAgICAgICAgdmxhbi0+bmJfaG9z dF9kZXZzKys7CiAgICAgICAgIHJldCA9IG5ldF9zbGlycF9pbml0KHZsYW4pOwpAQCAtNjgyMyw3 ICs2ODMxLDcgQEAKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX1NMSVJQKQogICAgIGlmIChz bGlycF9pbml0ZWQpIHsKLSAgICAgICAgc2xpcnBfc2VsZWN0X2ZpbGwoJm5mZHMsICZyZmRzLCAm d2ZkcywgJnhmZHMpOworICAgICAgICBzbGlycF9zZWxlY3RfZmlsbChzbGlycF9vcGFxdWUsICZu ZmRzLCAmcmZkcywgJndmZHMsICZ4ZmRzKTsKICAgICB9CiAjZW5kaWYKICAgICByZXQgPSBzZWxl Y3QobmZkcyArIDEsICZyZmRzLCAmd2ZkcywgJnhmZHMsICZ0dik7CkBAIC02ODU3LDcgKzY4NjUs NyBAQAogICAgICAgICAgICAgRkRfWkVSTygmd2Zkcyk7CiAgICAgICAgICAgICBGRF9aRVJPKCZ4 ZmRzKTsKICAgICAgICAgfQotICAgICAgICBzbGlycF9zZWxlY3RfcG9sbCgmcmZkcywgJndmZHMs ICZ4ZmRzKTsKKyAgICAgICAgc2xpcnBfc2VsZWN0X3BvbGwoc2xpcnBfb3BhcXVlLCAmcmZkcywg JndmZHMsICZ4ZmRzKTsKICAgICB9CiAjZW5kaWYKICAgICBxZW11X2Fpb19wb2xsKCk7CkluZGV4 OiBxZW11L3ZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL3ZsLmgJMjAwNy0xMC0yMSAxODo0 NzowOC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvdmwuaAkyMDA3LTEwLTIxIDE4OjQ3OjExLjAw MDAwMDAwMCArMDAwMApAQCAtMTgzLDcgKzE4Myw2IEBACiBleHRlcm4gaW50IHNlbWlob3N0aW5n X2VuYWJsZWQ7CiBleHRlcm4gaW50IGF1dG9zdGFydDsKIGV4dGVybiBpbnQgb2xkX3BhcmFtOwot ZXh0ZXJuIGNvbnN0IGNoYXIgKmJvb3RwX2ZpbGVuYW1lOwogCiAjZGVmaW5lIE1BWF9PUFRJT05f Uk9NUyAxNgogZXh0ZXJuIGNvbnN0IGNoYXIgKm9wdGlvbl9yb21bTUFYX09QVElPTl9ST01TXTsK QEAgLTQzOSw2ICs0MzgsOSBAQAogZXh0ZXJuIGludCBuYl9uaWNzOwogZXh0ZXJuIE5JQ0luZm8g bmRfdGFibGVbTUFYX05JQ1NdOwogCisvKiBTTElSUCAqLwordm9pZCBkb19pbmZvX3NsaXJwKHZv aWQpOworCiAvKiB0aW1lcnMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgUUVNVUNsb2NrIFFFTVVDbG9j azsK ------=_Part_2249_5472696.1193161366501--