Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oFusO-0003cX-JT for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Jul 2022 09:59:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oFusN-0000S4-7N for pgsql-hackers@arkaria.postgresql.org; Mon, 25 Jul 2022 09:59:47 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oFusL-0000Rv-Sj for pgsql-hackers@lists.postgresql.org; Mon, 25 Jul 2022 09:59:46 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oFus6-0001p5-Bx for pgsql-hackers@postgresql.org; Mon, 25 Jul 2022 09:59:44 +0000 Received: from [192.168.1.113] (dsl-hkibng22-54f8d8-220.dhcp.inet.fi [84.248.216.220]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id AC3E41B002DA; Mon, 25 Jul 2022 12:59:25 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1658743165; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=5j25prb0xsBFEcpL3FVv5lAJ7vOD5eT36dyCVK3q42s=; b=M1YA/GYUST2mxNY59WKc9QE+U6mH7V5GMA/GVQmhI+mum1hCAvZA2BdmB9HPJvJ1Ul8G67 6ROOE7lzc3SILlKyxCak0kfCW71Q9RXeWInLCR4lfbQdG5i8Gw7r8GfhkqOFrufITiDfkk IXnM2GVNO1ptyucQP9yB9SDuJ/SE1FYzdwlrJ5fexgk1bXYMgkLN/VUweKgQBM1kMl4Xq0 L5cinMzoOEzErl8rvhxeDJDo4iAkKyvDBpqW3QEGstGJE7rL7Gy0xficzk+LFWT2PGzfkG wQKT+8QA1H0u9qWkVL2VWPHqsuMVUGLq800obxQkbpkbMS+6NWA0baGAIEoFbw== Content-Type: multipart/mixed; boundary="------------ZE0vKShhXkyE3BnngRBSgBaH" Message-ID: <128709bc-992c-b57a-7174-098433b7faa4@iki.fi> Date: Mon, 25 Jul 2022 12:59:25 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: SLRUs in the main buffer pool, redux Content-Language: en-US From: Heikki Linnakangas To: Thomas Munro Cc: pgsql-hackers , Yura Sokolov References: <5ced6199-9fa2-722c-2163-4418ca907a95@iki.fi> In-Reply-To: ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1658743165; a=rsa-sha256; cv=none; b=lp43+uRj4BmD3l6R1GWJAZy+8rMyTIVGiVAw4DWX6+v3fyHDOPMFdJw6C3+VCL4/LL86xu MkCBxC+xeJKC+TVTUoVipVqF7dgs3mP4k1ijVr6MtYEk1269whioMANXNMbZjsWHbvwp/S pn+BeMsOBK7iOphSuJyHaRn9Qulsp+iTOmkfJpYFxJ2vbgBeeHRWVcsKwk2NIM/yaujd36 M37SlKzBj5ILoPgF6NWnhcnhNt9zrDSECoZnZHC9j73OIxaecKzxt3+ry9MDRIzA0w5OP4 ypv/GRcwitlH8GuNpYakZTkKdsPhtC0Ql/dZay1xw6K4OSDMwytB8MBuYOx01A== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1658743165; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=5j25prb0xsBFEcpL3FVv5lAJ7vOD5eT36dyCVK3q42s=; b=A4kofcc2yXIWz6VLMF3w3uZzs7251ddpQeIh/8Wm8rpalc6+WUu7xj+HdAY8KmMnPtOXhB HBmcnZFOEJWSbZzH8OJw2qtDpIgGM8fkkRUN2XD/LwmMdRd8vGa6JHinbmIOZlERmb5eZk iiLxG+fmr6u9liIYZnH3w4uyf2O0aCrCmY/1CQD0TmbNF6O3qzOooCy8EbzkloC0e3+H+s yWtqcnM/MQ9pDn89VcpLC7mo4IzNCr9hfxf6YcbdWLfT7SD1dQaK2I59bLPw739TobL4HS m5eHw8eEYtUEpfzW9m9ucfMYKmqb0slqlKfaC3BCOfW5VpgV4YFipsBa5tJPbA== List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------ZE0vKShhXkyE3BnngRBSgBaH Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 25/07/2022 09:54, Heikki Linnakangas wrote: > I'll write a separate post with my thoughts on the high-level design of > this, ... This patch represents each SLRU as a relation. The CLOG is one relation, pg_subtrans is another relations, and so forth. The SLRU relations use a different SMGR implementation, which is implemented in slru.c. As you know, I'd like to make the SMGR implementation replaceable by extensions. We need that for Neon, and I'd imagine it to be useful for many other things, too, like compression, encryption, or restoring data from a backup on-demand. I'd like all file operations to go through the smgr API as much as possible, so that an extension can intercept SLRU file operations too. If we introduce another internal SMGR implementation, then an extension would need to replace both implementations separately. I'd prefer to use the current md.c implementation for SLRUs too, instead. Thus I propose: Let's represent each SLRU *segment* as a separate relation, giving each SLRU segment a separate relNumber. Then we can use md.c for SLRUs, too. Dropping an SLRU segment can be done by calling smgrunlink(). You won't need to deal with missing segments in md.c, because each individual SLRU file is a complete file, with no holes. Dropping buffers for one SLRU segment can be done with DropRelationBuffers(), instead of introducing the new DiscardBuffer() function. You can let md.c handle the caching of the file descriptors, you won't need to reimplement that with 'slru_file_segment'. SLRUs won't need the segmentation into 1 GB segments that md.c does, because each SLRU file is just 256 kB in size. That's OK. (BTW, I propose that we bump the SLRU segment size up to a whopping 1 MB or even more, while we're at it. But one step at a time.) SLRUs also won't need the concept of relation forks. That's fine, we can just use MAIN_FORKNUM. elated to that, I'm somewhat bothered by the way that SMgrRelation currently bundles all the relation forks together. A comment in smgr.h says: > smgr.c maintains a table of SMgrRelation objects, which are essentially > cached file handles. But when we introduced relation forks, that got a bit muddled. Each SMgrRelation object is now a file handle for a bunch of related relation forks, and each fork is a separate file that can be created and truncated separately. That means that an SMGR implementation, like md.c, needs to track the file handles for each fork. I think things would be more clear if we unbundled the forks at the SMGR level, so that we would have a separate SMgrRelation struct for each fork. And let's rename it to SMgrFile to make the role more clear. I think that would reduce the confusion when we start using it for SLRUs; an SLRU is not a relation, after all. md.c would still segment each logical file into 1 GB segments, but it would not need to deal with forks. Attached is a draft patch to refactor it that way, and a refactored version of your SLRU patch over that. The relation cache now needs to hold a separate reference to the SMgrFile of each fork of a relation. And smgr cache invalidation still works at relation granularity. Doing it per SmgrFile would be more clean in smgr.c, but in practice all the forks of a relation are unlinked and truncated together, so sending a separate invalidation event for each SMgrFile would increase the cache invalidation traffic. In the passing, I moved the DropRelationBuffers() calls from smgr.c to the callers. smgr.c doesn't otherwise make any effort to keep the buffer manager in sync with the state on-disk, that responsibility is normally with the code that *uses* the smgr functions, so I think that's more logical. The first patch currently causes the '018_wal_optimize.pl' test to fail. I guess I messed up something in the relation truncation code, but I haven't investigated it yet. I wanted to post this to get comments on the design, before spending more time on that. What do you think? - Heikki --------------ZE0vKShhXkyE3BnngRBSgBaH Content-Type: text/x-patch; charset=UTF-8; name="0001-WIP-Have-separate-SMmgrRelation-per-fork-rename-it-t.patch" Content-Disposition: attachment; filename*0="0001-WIP-Have-separate-SMmgrRelation-per-fork-rename-it-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5MzAyYjY0OTg0NTNlYTRkY2I1YzkwNmEwNzYzM2JhYTJjYzFmOGFkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjUgSnVsIDIwMjIgMTI6NTA6NDQgKzAzMDAK U3ViamVjdDogW1BBVENIIDEvMl0gV0lQOiBIYXZlIHNlcGFyYXRlIFNNbWdyUmVsYXRpb24g cGVyIGZvcmssIHJlbmFtZSBpdCB0bwogU01nckZpbGUKCi0tLQogY29udHJpYi9hbWNoZWNr L3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICB8ICAgMiArLQogY29udHJpYi9ibG9vbS9i bGluc2VydC5jICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogY29udHJpYi9wZ19wcmV3 YXJtL2F1dG9wcmV3YXJtLmMgICAgICAgICAgICB8ICAgMiArLQogY29udHJpYi9wZ19wcmV3 YXJtL3BnX3ByZXdhcm0uYyAgICAgICAgICAgICB8ICAgNCArLQogY29udHJpYi9wZ192aXNp YmlsaXR5L3BnX3Zpc2liaWxpdHkuYyAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdGJ1aWxkLmMgICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHBhZ2UuYyAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICB8ICAzMiArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvcmV3cml0ZWhlYXAuYyAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jICAgICB8ICA0MSArKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c29ydC5jICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMgICAgICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90YWJsZS90YWJsZWFtLmMgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMgfCAgMjggKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jICAgICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL2Nh dGFsb2cvY2F0YWxvZy5jICAgICAgICAgICAgICAgfCAgNTMgKy0tCiBzcmMvYmFja2VuZC9j YXRhbG9nL2luZGV4LmMgICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9j YXRhbG9nL3N0b3JhZ2UuYyAgICAgICAgICAgICAgIHwgMjA1ICsrKysrKystLS0tCiBzcmMv YmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMgICAgICAgICAgIHwgICAyICstCiBzcmMv YmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgICAgICAgIHwgICA4ICstCiBzcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgIHwgIDE5ICstCiBzcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgMjY0ICsrKysrKyst LS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1Zi5jICAgICAgIHwg IDI1ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYyAgIHwg IDQxICsrLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMgICAgICAgICAgICAgICB8 IDM1OSArKysrKysrKy0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21n ci5jICAgICAgICAgICAgIHwgMzc2ICsrKysrKysrKy0tLS0tLS0tLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9pbnZhbC5jICAgICAgICAgICAgIHwgIDE3ICstCiBzcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgIHwgIDE1ICstCiBzcmMvY29tbW9u L3JlbHBhdGguYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVk ZS9jYXRhbG9nL3N0b3JhZ2UuaCAgICAgICAgICAgICAgIHwgIDExICstCiBzcmMvaW5jbHVk ZS9jb21tb24vcmVscGF0aC5oICAgICAgICAgICAgICAgIHwgIDEyICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCAgICAgICAgIHwgICA1ICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAgIHwgIDI1ICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL21kLmggICAgICAgICAgICAgICAgICAgIHwgIDI4ICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmggICAgICAgIHwgIDI5ICstCiBzcmMvaW5jbHVk ZS9zdG9yYWdlL3NtZ3IuaCAgICAgICAgICAgICAgICAgIHwgIDk4ICsrKy0tCiBzcmMvaW5j bHVkZS91dGlscy9pbnZhbC5oICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5j bHVkZS91dGlscy9yZWwuaCAgICAgICAgICAgICAgICAgICAgIHwgIDM4ICstCiAzOSBmaWxl cyBjaGFuZ2VkLCA4ODUgaW5zZXJ0aW9ucygrKSwgOTQ2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hl Y2svdmVyaWZ5X25idHJlZS5jCmluZGV4IDJiZWVlYmIxNjM1Li4zYWEyMGJiNWNjYyAxMDA2 NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmli L2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCkBAIC0zMjMsNyArMzIzLDcgQEAgYnRfaW5kZXhf Y2hlY2tfaW50ZXJuYWwoT2lkIGluZHJlbGlkLCBib29sIHBhcmVudGNoZWNrLCBib29sIGhl YXBhbGxpbmRleGVkLAogCQlib29sCQloZWFwa2V5c3BhY2UsCiAJCQkJCWFsbGVxdWFsaW1h Z2U7CiAKLQkJaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihpbmRyZWwpLCBNQUlO X0ZPUktOVU0pKQorCQlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKGluZHJlbCwg TUFJTl9GT1JLTlVNKSkpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOREVYX0NPUlJVUFRFRCksCiAJCQkJCSBlcnJtc2coImluZGV4IFwiJXNcIiBsYWNr cyBhIG1haW4gcmVsYXRpb24gZm9yayIsCmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2Js aW5zZXJ0LmMgYi9jb250cmliL2Jsb29tL2JsaW5zZXJ0LmMKaW5kZXggZTY0MjkxZTA0OWEu LjQ5ZjNhNDZjMTI1IDEwMDY0NAotLS0gYS9jb250cmliL2Jsb29tL2JsaW5zZXJ0LmMKKysr IGIvY29udHJpYi9ibG9vbS9ibGluc2VydC5jCkBAIC0xNzcsOSArMTc3LDkgQEAgYmxidWls ZGVtcHR5KFJlbGF0aW9uIGluZGV4KQogCSAqIHRoaXMgZXZlbiB3aGVuIHdhbF9sZXZlbD1t aW5pbWFsLgogCSAqLwogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobWV0YXBhZ2UsIEJMT09N X01FVEFQQUdFX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwg SU5JVF9GT1JLTlVNLCBCTE9PTV9NRVRBUEFHRV9CTEtOTywKKwlzbWdyd3JpdGUoUmVsYXRp b25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0pLCBCTE9PTV9NRVRBUEFHRV9CTEtOTywK IAkJCSAgKGNoYXIgKikgbWV0YXBhZ2UsIHRydWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRp b25HZXRTbWdyKGluZGV4KSktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVN LAorCWxvZ19uZXdwYWdlKCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJ CUJMT09NX01FVEFQQUdFX0JMS05PLCBtZXRhcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTg3 LDcgKzE4Nyw3IEBAIGJsYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiB3cml0ZSBk aWQgbm90IGdvIHRocm91Z2ggc2hhcmVkX2J1ZmZlcnMgYW5kIHRoZXJlZm9yZSBhIGNvbmN1 cnJlbnQKIAkgKiBjaGVja3BvaW50IG1heSBoYXZlIG1vdmVkIHRoZSByZWRvIHBvaW50ZXIg cGFzdCBvdXIgeGxvZyByZWNvcmQuCiAJICovCi0Jc21ncmltbWVkc3luYyhSZWxhdGlvbkdl dFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0pOworCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25H ZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0pKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2FybS5jIGIvY29udHJpYi9wZ19wcmV3YXJtL2F1 dG9wcmV3YXJtLmMKaW5kZXggYjJkNjAyNjA5MzQuLjkyZDIzZjQ1YjYwIDEwMDY0NAotLS0g YS9jb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYworKysgYi9jb250cmliL3BnX3By ZXdhcm0vYXV0b3ByZXdhcm0uYwpAQCAtNTM1LDcgKzUzNSw3IEBAIGF1dG9wcmV3YXJtX2Rh dGFiYXNlX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJCQkgKi8KIAkJCWlmIChibGstPmZvcmtu dW0gPiBJbnZhbGlkRm9ya051bWJlciAmJgogCQkJCWJsay0+Zm9ya251bSA8PSBNQVhfRk9S S05VTSAmJgotCQkJCXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIGJsay0+Zm9y a251bSkpCisJCQkJc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBibGstPmZvcmtu dW0pKSkKIAkJCQluYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nrc0luRm9yayhy ZWwsIGJsay0+Zm9ya251bSk7CiAJCQllbHNlCiAJCQkJbmJsb2NrcyA9IDA7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3ByZXdhcm0vcGdfcHJld2FybS5jIGIvY29udHJpYi9wZ19wcmV3 YXJtL3BnX3ByZXdhcm0uYwppbmRleCBjYWZmNWM0YTgwZi4uMWU1NzQ4MWVmOTIgMTAwNjQ0 Ci0tLSBhL2NvbnRyaWIvcGdfcHJld2FybS9wZ19wcmV3YXJtLmMKKysrIGIvY29udHJpYi9w Z19wcmV3YXJtL3BnX3ByZXdhcm0uYwpAQCAtMTA5LDcgKzEwOSw3IEBAIHBnX3ByZXdhcm0o UEdfRlVOQ1RJT05fQVJHUykKIAkJYWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBnZXRfcmVs a2luZF9vYmp0eXBlKHJlbC0+cmRfcmVsLT5yZWxraW5kKSwgZ2V0X3JlbF9uYW1lKHJlbE9p ZCkpOwogCiAJLyogQ2hlY2sgdGhhdCB0aGUgZm9yayBleGlzdHMuICovCi0JaWYgKCFzbWdy ZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtYmVyKSkKKwlpZiAoIXNtZ3Jl eGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bWJlcikpKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAog CQkJCSBlcnJtc2coImZvcmsgXCIlc1wiIGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIHJlbGF0 aW9uIiwKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwZ19wcmV3YXJtKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCWZvciAoYmxvY2sgPSBmaXJzdF9ibG9jazsgYmxvY2sgPD0gbGFzdF9ibG9jazsgKyti bG9jaykKIAkJewogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJCXNtZ3JyZWFkKFJl bGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtYmVyLCBibG9jaywgYmxvY2tidWZmZXIuZGF0 YSk7CisJCQlzbWdycmVhZChSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtYmVyKSwgYmxv Y2ssIGJsb2NrYnVmZmVyLmRhdGEpOwogCQkJKytibG9ja3NfZG9uZTsKIAkJfQogCX0KZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMgYi9jb250 cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCmluZGV4IGE5NWY3M2VjNzk2Li4z OGNiNTZjOWJjZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2li aWxpdHkuYworKysgYi9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCkBA IC0zODgsMTMgKzM4OCwxNCBAQCBwZ190cnVuY2F0ZV92aXNpYmlsaXR5X21hcChQR19GVU5D VElPTl9BUkdTKQogCWNoZWNrX3JlbGF0aW9uX3JlbGtpbmQocmVsKTsKIAogCS8qIEZvcmNp Ymx5IHJlc2V0IGNhY2hlZCBmaWxlIHNpemUgKi8KLQlSZWxhdGlvbkdldFNtZ3IocmVsKS0+ c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID0gSW52YWxpZEJs b2NrTnVtYmVyOworCVJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05V TSktPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKIAlibG9j ayA9IHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShyZWwsIDApOwogCWlmIChCbG9j a051bWJlcklzVmFsaWQoYmxvY2spKQogCXsKIAkJZm9yayA9IFZJU0lCSUxJVFlNQVBfRk9S S05VTTsKLQkJc21ncnRydW5jYXRlKFJlbGF0aW9uR2V0U21ncihyZWwpLCAmZm9yaywgMSwg JmJsb2NrKTsKKwkJRHJvcFJlbGF0aW9uQnVmZmVycyhyZWwtPnJkX2xvY2F0b3IsIHJlbC0+ cmRfYmFja2VuZCwgJmZvcmssIDEsICZibG9jayk7CisJCXNtZ3J0cnVuY2F0ZV9tdWx0aShy ZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgJmZvcmssIDEsICZibG9jayk7CiAJ fQogCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdGJ1aWxkLmMKaW5kZXggMzc0ZTY0ZTgwODYuLjBhNTgxY2Q4Y2FjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYwpAQCAtNDE1LDcgKzQxNSw3IEBAIGdpc3RfaW5k ZXhzb3J0YnVpbGQoR0lTVEJ1aWxkU3RhdGUgKnN0YXRlKQogCSAqIHJlcGxhY2VkIHdpdGgg dGhlIHJlYWwgcm9vdCBwYWdlIGF0IHRoZSBlbmQuCiAJICovCiAJcGFnZSA9IHBhbGxvYzAo QkxDS1NaKTsKLQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwp LCBNQUlOX0ZPUktOVU0sIEdJU1RfUk9PVF9CTEtOTywKKwlzbWdyZXh0ZW5kKFJlbGF0aW9u R2V0U21ncihzdGF0ZS0+aW5kZXhyZWwsIE1BSU5fRk9SS05VTSksIEdJU1RfUk9PVF9CTEtO TywKIAkJCSAgIHBhZ2UsIHRydWUpOwogCXN0YXRlLT5wYWdlc19hbGxvY2F0ZWQrKzsKIAlz dGF0ZS0+cGFnZXNfd3JpdHRlbisrOwpAQCAtNDU5LDcgKzQ1OSw3IEBAIGdpc3RfaW5kZXhz b3J0YnVpbGQoR0lTVEJ1aWxkU3RhdGUgKnN0YXRlKQogCS8qIFdyaXRlIG91dCB0aGUgcm9v dCAqLwogCVBhZ2VTZXRMU04obGV2ZWxzdGF0ZS0+cGFnZXNbMF0sIEdpc3RCdWlsZExTTik7 CiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShsZXZlbHN0YXRlLT5wYWdlc1swXSwgR0lTVF9S T09UX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5pbmRleHJl bCksIE1BSU5fRk9SS05VTSwgR0lTVF9ST09UX0JMS05PLAorCXNtZ3J3cml0ZShSZWxhdGlv bkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBNQUlOX0ZPUktOVU0pLCBHSVNUX1JPT1RfQkxL Tk8sCiAJCQkgIGxldmVsc3RhdGUtPnBhZ2VzWzBdLCB0cnVlKTsKIAlpZiAoUmVsYXRpb25O ZWVkc1dBTChzdGF0ZS0+aW5kZXhyZWwpKQogCQlsb2dfbmV3cGFnZSgmc3RhdGUtPmluZGV4 cmVsLT5yZF9sb2NhdG9yLCBNQUlOX0ZPUktOVU0sIEdJU1RfUk9PVF9CTEtOTywKQEAgLTQ3 OCw3ICs0NzgsNyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkKEdJU1RCdWlsZFN0YXRlICpzdGF0 ZSkKIAkgKiBzdGlsbCBub3QgYmUgb24gZGlzayB3aGVuIHRoZSBjcmFzaCBvY2N1cnMuCiAJ ICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPmluZGV4cmVsKSkKLQkJc21ncmlt bWVkc3luYyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsKSwgTUFJTl9GT1JLTlVN KTsKKwkJc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBN QUlOX0ZPUktOVU0pKTsKIH0KIAogLyoKQEAgLTY1Niw3ICs2NTYsNyBAQCBnaXN0X2luZGV4 c29ydGJ1aWxkX2ZsdXNoX3JlYWR5X3BhZ2VzKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAog CQlQYWdlU2V0TFNOKHBhZ2UsIEdpc3RCdWlsZExTTik7CiAJCVBhZ2VTZXRDaGVja3N1bUlu cGxhY2UocGFnZSwgYmxrbm8pOwotCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0 ZS0+aW5kZXhyZWwpLCBNQUlOX0ZPUktOVU0sIGJsa25vLCBwYWdlLAorCQlzbWdyZXh0ZW5k KFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwsIE1BSU5fRk9SS05VTSksIGJsa25v LCBwYWdlLAogCQkJCSAgIHRydWUpOwogCiAJCXN0YXRlLT5wYWdlc193cml0dGVuKys7CkBA IC05NDIsOCArOTQyLDcgQEAgZ2lzdEJ1aWxkQ2FsbGJhY2soUmVsYXRpb24gaW5kZXgsCiAJ ICovCiAJaWYgKChidWlsZHN0YXRlLT5idWlsZE1vZGUgPT0gR0lTVF9CVUZGRVJJTkdfQVVU TyAmJgogCQkgYnVpbGRzdGF0ZS0+aW5kdHVwbGVzICUgQlVGRkVSSU5HX01PREVfU1dJVENI X0NIRUNLX1NURVAgPT0gMCAmJgotCQkgZWZmZWN0aXZlX2NhY2hlX3NpemUgPCBzbWdybmJs b2NrcyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLAotCQkJCQkJCQkJCQlNQUlOX0ZPUktOVU0p KSB8fAorCQkgZWZmZWN0aXZlX2NhY2hlX3NpemUgPCBzbWdybmJsb2NrcyhSZWxhdGlvbkdl dFNtZ3IoaW5kZXgsIE1BSU5fRk9SS05VTSkpKSB8fAogCQkoYnVpbGRzdGF0ZS0+YnVpbGRN b2RlID09IEdJU1RfQlVGRkVSSU5HX1NUQVRTICYmCiAJCSBidWlsZHN0YXRlLT5pbmR0dXBs ZXMgPj0gQlVGRkVSSU5HX01PREVfVFVQTEVfU0laRV9TVEFUU19UQVJHRVQpKQogCXsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IGQyZWRjZDQ2MTcyLi45NjEzM2Iw ZmQ0OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBAIC0xMDI2LDcgKzEw MjYsNyBAQCBfaGFzaF9hbGxvY19idWNrZXRzKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIg Zmlyc3RibG9jaywgdWludDMyIG5ibG9ja3MpCiAJCQkJCXRydWUpOwogCiAJUGFnZVNldENo ZWNrc3VtSW5wbGFjZShwYWdlLCBsYXN0YmxvY2spOwotCXNtZ3JleHRlbmQoUmVsYXRpb25H ZXRTbWdyKHJlbCksIE1BSU5fRk9SS05VTSwgbGFzdGJsb2NrLCB6ZXJvYnVmLmRhdGEsCisJ c21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3IocmVsLCBNQUlOX0ZPUktOVU0pLCBsYXN0Ymxv Y2ssIHplcm9idWYuZGF0YSwKIAkJCSAgIGZhbHNlKTsKIAogCXJldHVybiB0cnVlOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggYTM0MTRhNzZl OGQuLjBmMThmNTFhNTZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKQEAgLTU3Miw3ICs1NzIsNyBAQCBoZWFwYW1fcmVsYXRpb25fc2V0X25ld19m aWxlbG9jYXRvcihSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUcmFuc2FjdGlvbklkICpmcmVl emVYaWQsCiAJCQkJCQkJCQlNdWx0aVhhY3RJZCAqbWlubXVsdGkpCiB7Ci0JU01nclJlbGF0 aW9uIHNyZWw7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKgogCSAqIEluaXRpYWxp emUgdG8gdGhlIG1pbmltdW0gWElEIHRoYXQgY291bGQgcHV0IHR1cGxlcyBpbiB0aGUgdGFi bGUuIFdlCkBAIC01OTEsNyArNTkxLDcgQEAgaGVhcGFtX3JlbGF0aW9uX3NldF9uZXdfZmls ZWxvY2F0b3IoUmVsYXRpb24gcmVsLAogCSAqLwogCSptaW5tdWx0aSA9IEdldE9sZGVzdE11 bHRpWGFjdElkKCk7CiAKLQlzcmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9j YXRvciwgcGVyc2lzdGVuY2UsIHRydWUpOworCXNmaWxlID0gUmVsYXRpb25DcmVhdGVTdG9y YWdlKCpuZXdybG9jYXRvciwgcGVyc2lzdGVuY2UsIHRydWUpOwogCiAJLyoKIAkgKiBJZiBy ZXF1aXJlZCwgc2V0IHVwIGFuIGluaXQgZm9yayBmb3IgYW4gdW5sb2dnZWQgdGFibGUgc28g dGhhdCBpdCBjYW4KQEAgLTYwNCwxNSArNjA0LDE4IEBAIGhlYXBhbV9yZWxhdGlvbl9zZXRf bmV3X2ZpbGVsb2NhdG9yKFJlbGF0aW9uIHJlbCwKIAkgKi8KIAlpZiAocGVyc2lzdGVuY2Ug PT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpCiAJeworCQlTTWdyRmlsZUhhbmRsZSBzZmls ZV9pbml0OworCiAJCUFzc2VydChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1JF TEFUSU9OIHx8CiAJCQkgICByZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX01BVFZJ RVcgfHwKIAkJCSAgIHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfVE9BU1RWQUxV RSk7Ci0JCXNtZ3JjcmVhdGUoc3JlbCwgSU5JVF9GT1JLTlVNLCBmYWxzZSk7CisJCXNmaWxl X2luaXQgPSBzbWdyb3BlbigqbmV3cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIElOSVRf Rk9SS05VTSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGVfaW5pdCwgZmFsc2UpOwogCQlsb2dfc21n cmNyZWF0ZShuZXdybG9jYXRvciwgSU5JVF9GT1JLTlVNKTsKLQkJc21ncmltbWVkc3luYyhz cmVsLCBJTklUX0ZPUktOVU0pOworCQlzbWdyaW1tZWRzeW5jKHNmaWxlKTsKIAl9CiAKLQlz bWdyY2xvc2Uoc3JlbCk7CisJc21ncmNsb3NlKHNmaWxlKTsKIH0KIAogc3RhdGljIHZvaWQK QEAgLTYyNCw5ICs2MjcsNyBAQCBoZWFwYW1fcmVsYXRpb25fbm9udHJhbnNhY3Rpb25hbF90 cnVuY2F0ZShSZWxhdGlvbiByZWwpCiBzdGF0aWMgdm9pZAogaGVhcGFtX3JlbGF0aW9uX2Nv cHlfZGF0YShSZWxhdGlvbiByZWwsIGNvbnN0IFJlbEZpbGVMb2NhdG9yICpuZXdybG9jYXRv cikKIHsKLQlTTWdyUmVsYXRpb24gZHN0cmVsOwotCi0JZHN0cmVsID0gc21ncm9wZW4oKm5l d3Jsb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQpOworCVNNZ3JGaWxlSGFuZGxlIGRzdG1haW47 CiAKIAkvKgogCSAqIFNpbmNlIHdlIGNvcHkgdGhlIGZpbGUgZGlyZWN0bHkgd2l0aG91dCBs b29raW5nIGF0IHRoZSBzaGFyZWQgYnVmZmVycywKQEAgLTY0NiwxNiArNjQ3LDIxIEBAIGhl YXBhbV9yZWxhdGlvbl9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBjb25zdCBSZWxGaWxlTG9j YXRvciAqbmV3cmxvY2F0b3IpCiAJUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9jYXRv ciwgcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlLCB0cnVlKTsKIAogCS8qIGNvcHkgbWFp biBmb3JrICovCi0JUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlvbkdldFNtZ3IocmVsKSwg ZHN0cmVsLCBNQUlOX0ZPUktOVU0sCisJZHN0bWFpbiA9IHNtZ3JvcGVuKCpuZXdybG9jYXRv ciwgcmVsLT5yZF9iYWNrZW5kLCBNQUlOX0ZPUktOVU0pOworCVJlbGF0aW9uQ29weVN0b3Jh Z2UoUmVsYXRpb25HZXRTbWdyKHJlbCwgTUFJTl9GT1JLTlVNKSwgZHN0bWFpbiwKIAkJCQkJ CXJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CiAKIAkvKiBjb3B5IHRob3NlIGV4dHJh IGZvcmtzIHRoYXQgZXhpc3QgKi8KIAlmb3IgKEZvcmtOdW1iZXIgZm9ya051bSA9IE1BSU5f Rk9SS05VTSArIDE7CiAJCSBmb3JrTnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrTnVtKyspCiAJ ewotCQlpZiAoc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051bSkpCisJ CVNNZ3JGaWxlSGFuZGxlIHNyY19mb3JrID0gUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051 bSk7CisKKwkJaWYgKHNtZ3JleGlzdHMoc3JjX2ZvcmspKQogCQl7Ci0JCQlzbWdyY3JlYXRl KGRzdHJlbCwgZm9ya051bSwgZmFsc2UpOworCQkJU01nckZpbGVIYW5kbGUgZHN0X2Zvcmsg PSBzbWdyb3BlbigqbmV3cmxvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya051bSk7CisK KwkJCXNtZ3JjcmVhdGUoZHN0X2ZvcmssIGZhbHNlKTsKIAogCQkJLyoKIAkJCSAqIFdBTCBs b2cgY3JlYXRpb24gaWYgdGhlIHJlbGF0aW9uIGlzIHBlcnNpc3RlbnQsIG9yIHRoaXMgaXMg dGhlCkBAIC02NjUsNyArNjcxLDcgQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZGF0YShSZWxh dGlvbiByZWwsIGNvbnN0IFJlbEZpbGVMb2NhdG9yICpuZXdybG9jYXRvcikKIAkJCQkocmVs LT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEICYm CiAJCQkJIGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNKSkKIAkJCQlsb2dfc21ncmNyZWF0ZShu ZXdybG9jYXRvciwgZm9ya051bSk7Ci0JCQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9u R2V0U21ncihyZWwpLCBkc3RyZWwsIGZvcmtOdW0sCisJCQlSZWxhdGlvbkNvcHlTdG9yYWdl KFJlbGF0aW9uR2V0U21ncihyZWwsIGZvcmtOdW0pLCBkc3RfZm9yaywKIAkJCQkJCQkJcmVs LT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKIAkJfQogCX0KQEAgLTY3Myw3ICs2NzksNyBA QCBoZWFwYW1fcmVsYXRpb25fY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgY29uc3QgUmVsRmls ZUxvY2F0b3IgKm5ld3Jsb2NhdG9yKQogCiAJLyogZHJvcCBvbGQgcmVsYXRpb24sIGFuZCBj bG9zZSBuZXcgb25lICovCiAJUmVsYXRpb25Ecm9wU3RvcmFnZShyZWwpOwotCXNtZ3JjbG9z ZShkc3RyZWwpOworCXNtZ3JjbG9zZShkc3RtYWluKTsKIH0KIAogc3RhdGljIHZvaWQKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCmluZGV4IDE5N2YwNmI1ZWNhLi44 YTg2ZGM4YWFlYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0 ZWhlYXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCkBA IC0zMjYsNyArMzI2LDcgQEAgZW5kX2hlYXBfcmV3cml0ZShSZXdyaXRlU3RhdGUgc3RhdGUp CiAKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZShzdGF0ZS0+cnNfYnVmZmVyLCBzdGF0ZS0+ cnNfYmxvY2tubyk7CiAKLQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJz X25ld19yZWwpLCBNQUlOX0ZPUktOVU0sCisJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdy KHN0YXRlLT5yc19uZXdfcmVsLCBNQUlOX0ZPUktOVU0pLAogCQkJCSAgIHN0YXRlLT5yc19i bG9ja25vLCAoY2hhciAqKSBzdGF0ZS0+cnNfYnVmZmVyLCB0cnVlKTsKIAl9CiAKQEAgLTMz OCw3ICszMzgsNyBAQCBlbmRfaGVhcF9yZXdyaXRlKFJld3JpdGVTdGF0ZSBzdGF0ZSkKIAkg KiB3cm90ZSBiZWZvcmUgdGhlIGNoZWNrcG9pbnQuCiAJICovCiAJaWYgKFJlbGF0aW9uTmVl ZHNXQUwoc3RhdGUtPnJzX25ld19yZWwpKQotCQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0 U21ncihzdGF0ZS0+cnNfbmV3X3JlbCksIE1BSU5fRk9SS05VTSk7CisJCXNtZ3JpbW1lZHN5 bmMoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsLCBNQUlOX0ZPUktOVU0pKTsK IAogCWxvZ2ljYWxfZW5kX2hlYXBfcmV3cml0ZShzdGF0ZSk7CiAKQEAgLTY5Miw3ICs2OTIs NyBAQCByYXdfaGVhcF9pbnNlcnQoUmV3cml0ZVN0YXRlIHN0YXRlLCBIZWFwVHVwbGUgdHVw KQogCQkJICovCiAJCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIHN0YXRlLT5yc19i bG9ja25vKTsKIAotCQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25l d19yZWwpLCBNQUlOX0ZPUktOVU0sCisJCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihz dGF0ZS0+cnNfbmV3X3JlbCwgTUFJTl9GT1JLTlVNKSwKIAkJCQkJICAgc3RhdGUtPnJzX2Js b2Nrbm8sIChjaGFyICopIHBhZ2UsIHRydWUpOwogCiAJCQlzdGF0ZS0+cnNfYmxvY2tubysr OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCmluZGV4IGVkNzJl YjdiNjMxLi43OTZmNTdlZTA0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvdmlzaWJpbGl0eW1hcC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2li aWxpdHltYXAuYwpAQCAtNDYwLDcgKzQ2MCw3IEBAIHZpc2liaWxpdHltYXBfcHJlcGFyZV90 cnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5oZWFwYmxvY2tzKQogCSAqIElm IG5vIHZpc2liaWxpdHkgbWFwIGhhcyBiZWVuIGNyZWF0ZWQgeWV0IGZvciB0aGlzIHJlbGF0 aW9uLCB0aGVyZSdzCiAJICogbm90aGluZyB0byB0cnVuY2F0ZS4KIAkgKi8KLQlpZiAoIXNt Z3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkp CisJaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBf Rk9SS05VTSkpKQogCQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwogCiAJLyoKQEAgLTUy Nyw3ICs1MjcsNyBAQCB2aXNpYmlsaXR5bWFwX3ByZXBhcmVfdHJ1bmNhdGUoUmVsYXRpb24g cmVsLCBCbG9ja051bWJlciBuaGVhcGJsb2NrcykKIAllbHNlCiAJCW5ld25ibG9ja3MgPSB0 cnVuY0Jsb2NrOwogCi0JaWYgKHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBW SVNJQklMSVRZTUFQX0ZPUktOVU0pIDw9IG5ld25ibG9ja3MpCisJaWYgKHNtZ3JuYmxvY2tz KFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpIDw9IG5ld25i bG9ja3MpCiAJewogCQkvKiBub3RoaW5nIHRvIGRvLCB0aGUgZmlsZSB3YXMgYWxyZWFkeSBz bWFsbGVyIHRoYW4gcmVxdWVzdGVkIHNpemUgKi8KIAkJcmV0dXJuIEludmFsaWRCbG9ja051 bWJlcjsKQEAgLTU0NiwyOSArNTQ2LDI5IEBAIHN0YXRpYyBCdWZmZXIKIHZtX3JlYWRidWYo UmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgYm9vbCBleHRlbmQpCiB7CiAJQnVm ZmVyCQlidWY7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgdm1fc2Zp bGU7CiAKIAkvKgogCSAqIENhdXRpb246IHJlLXVzaW5nIHRoaXMgc21nciBwb2ludGVyIGNv dWxkIGZhaWwgaWYgdGhlIHJlbGNhY2hlIGVudHJ5CiAJICogZ2V0cyBjbG9zZWQuICBJdCdz IHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAq IGJldHdlZW4gaGVyZSBhbmQgdGhlIGxhc3QgdXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwot CXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKKwl2bV9zZmlsZSA9IFJlbGF0aW9uR2V0 U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CiAKIAkvKgogCSAqIElmIHdlIGhh dmVuJ3QgY2FjaGVkIHRoZSBzaXplIG9mIHRoZSB2aXNpYmlsaXR5IG1hcCBmb3JrIHlldCwg Y2hlY2sgaXQKIAkgKiBmaXJzdC4KIAkgKi8KLQlpZiAocmVsbi0+c21ncl9jYWNoZWRfbmJs b2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID09IEludmFsaWRCbG9ja051bWJlcikKKwlp ZiAodm1fc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPT0gSW52YWxpZEJsb2NrTnVtYmVy KQogCXsKLQkJaWYgKHNtZ3JleGlzdHMocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSkK LQkJCXNtZ3JuYmxvY2tzKHJlbG4sIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CisJCWlmIChz bWdyZXhpc3RzKHZtX3NmaWxlKSkKKwkJCXNtZ3JuYmxvY2tzKHZtX3NmaWxlKTsKIAkJZWxz ZQotCQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1d ID0gMDsKKwkJCXZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gMDsKIAl9CiAKIAkv KiBIYW5kbGUgcmVxdWVzdHMgYmV5b25kIEVPRiAqLwotCWlmIChibGtubyA+PSByZWxuLT5z bWdyX2NhY2hlZF9uYmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0pCisJaWYgKGJsa25v ID49IHZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzKQogCXsKIAkJaWYgKGV4dGVuZCkK IAkJCXZtX2V4dGVuZChyZWwsIGJsa25vICsgMSk7CkBAIC01OTUsOCArNTk1LDcgQEAgdm1f cmVhZGJ1ZihSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGJsa25vLCBib29sIGV4dGVuZCkK IAkgKiBsb25nIGFzIGl0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBwYWdlIGhlYWRlciBoYXZp bmcgY29ycmVjdCBjb250ZW50cy4KIAkgKiBDdXJyZW50IHVzYWdlIGlzIHNhZmUgYmVjYXVz ZSBQYWdlR2V0Q29udGVudHMoKSBkb2VzIG5vdCByZXF1aXJlIHRoYXQuCiAJICovCi0JYnVm ID0gUmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwgVklTSUJJTElUWU1BUF9GT1JLTlVNLCBibGtu bywKLQkJCQkJCQkgUkJNX1pFUk9fT05fRVJST1IsIE5VTEwpOworCWJ1ZiA9IFJlYWRCdWZm ZXJFeHRlbmRlZChyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSwgYmxrbm8sIFJCTV9aRVJP X09OX0VSUk9SLCBOVUxMKTsKIAlpZiAoUGFnZUlzTmV3KEJ1ZmZlckdldFBhZ2UoYnVmKSkp CiAJewogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKQEAgLTYx Niw3ICs2MTUsNyBAQCB2bV9leHRlbmQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciB2bV9u YmxvY2tzKQogewogCUJsb2NrTnVtYmVyIHZtX25ibG9ja3Nfbm93OwogCVBHQWxpZ25lZEJs b2NrIHBnOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIHZtX3NmaWxl OwogCiAJUGFnZUluaXQoKFBhZ2UpIHBnLmRhdGEsIEJMQ0tTWiwgMCk7CiAKQEAgLTYzNywy NyArNjM2LDI3IEBAIHZtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIHZtX25i bG9ja3MpCiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5 IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxh c3QgdXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3Io cmVsKTsKKwl2bV9zZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBf Rk9SS05VTSk7CiAKIAkvKgogCSAqIENyZWF0ZSB0aGUgZmlsZSBmaXJzdCBpZiBpdCBkb2Vz bid0IGV4aXN0LiAgSWYgc21ncl92bV9uYmxvY2tzIGlzCiAJICogcG9zaXRpdmUgdGhlbiBp dCBtdXN0IGV4aXN0LCBubyBuZWVkIGZvciBhbiBzbWdyZXhpc3RzIGNhbGwuCiAJICovCi0J aWYgKChyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0g PT0gMCB8fAotCQkgcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZP UktOVU1dID09IEludmFsaWRCbG9ja051bWJlcikgJiYKLQkJIXNtZ3JleGlzdHMocmVsbiwg VklTSUJJTElUWU1BUF9GT1JLTlVNKSkKLQkJc21ncmNyZWF0ZShyZWxuLCBWSVNJQklMSVRZ TUFQX0ZPUktOVU0sIGZhbHNlKTsKKwlpZiAoKHZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxv Y2tzID09IDAgfHwKKwkJIHZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IEludmFs aWRCbG9ja051bWJlcikgJiYKKwkJIXNtZ3JleGlzdHModm1fc2ZpbGUpKQorCQlzbWdyY3Jl YXRlKHZtX3NmaWxlLCBmYWxzZSk7CiAKIAkvKiBJbnZhbGlkYXRlIGNhY2hlIHNvIHRoYXQg c21ncm5ibG9ja3MoKSBhc2tzIHRoZSBrZXJuZWwuICovCi0JcmVsbi0+c21ncl9jYWNoZWRf bmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVtYmVyOwot CXZtX25ibG9ja3Nfbm93ID0gc21ncm5ibG9ja3MocmVsbiwgVklTSUJJTElUWU1BUF9GT1JL TlVNKTsKKwl2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051 bWJlcjsKKwl2bV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxvY2tzKHZtX3NmaWxlKTsKIAogCS8q IE5vdyBleHRlbmQgdGhlIGZpbGUgKi8KIAl3aGlsZSAodm1fbmJsb2Nrc19ub3cgPCB2bV9u YmxvY2tzKQogCXsKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZSgoUGFnZSkgcGcuZGF0YSwg dm1fbmJsb2Nrc19ub3cpOwogCi0JCXNtZ3JleHRlbmQocmVsbiwgVklTSUJJTElUWU1BUF9G T1JLTlVNLCB2bV9uYmxvY2tzX25vdywgcGcuZGF0YSwgZmFsc2UpOworCQlzbWdyZXh0ZW5k KHZtX3NmaWxlLCB2bV9uYmxvY2tzX25vdywgcGcuZGF0YSwgZmFsc2UpOwogCQl2bV9uYmxv Y2tzX25vdysrOwogCX0KIApAQCAtNjY4LDcgKzY2Nyw3IEBAIHZtX2V4dGVuZChSZWxhdGlv biByZWwsIEJsb2NrTnVtYmVyIHZtX25ibG9ja3MpCiAJICogdG8ga2VlcCBjaGVja2luZyBm b3IgY3JlYXRpb24gb3IgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlLCB3aGljaCBoYXBwZW5zCiAJ ICogaW5mcmVxdWVudGx5LgogCSAqLwotCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmVsbi0+c21n cl9ybG9jYXRvcik7CisJQ2FjaGVJbnZhbGlkYXRlU21ncihyZWwtPnJkX2xvY2F0b3IsIHJl bC0+cmRfYmFja2VuZCk7CiAKIAlVbmxvY2tSZWxhdGlvbkZvckV4dGVuc2lvbihyZWwsIEV4 Y2x1c2l2ZUxvY2spOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXgg YjUyZWNhOGYzOGIuLjY0NDQzMWE3ZTNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVlLmMKQEAgLTE2NCw5ICsxNjQsOSBAQCBidGJ1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgp CiAJICogdGhpcyBldmVuIHdoZW4gd2FsX2xldmVsPW1pbmltYWwuCiAJICovCiAJUGFnZVNl dENoZWNrc3VtSW5wbGFjZShtZXRhcGFnZSwgQlRSRUVfTUVUQVBBR0UpOwotCXNtZ3J3cml0 ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0sIEJUUkVFX01FVEFQQUdF LAorCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIElOSVRfRk9SS05VTSksIEJU UkVFX01FVEFQQUdFLAogCQkJICAoY2hhciAqKSBtZXRhcGFnZSwgdHJ1ZSk7Ci0JbG9nX25l d3BhZ2UoJlJlbGF0aW9uR2V0U21ncihpbmRleCktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwg SU5JVF9GT1JLTlVNLAorCWxvZ19uZXdwYWdlKCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9G T1JLTlVNLAogCQkJCUJUUkVFX01FVEFQQUdFLCBtZXRhcGFnZSwgdHJ1ZSk7CiAKIAkvKgpA QCAtMTc0LDcgKzE3NCw3IEBAIGJ0YnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiB3 cml0ZSBkaWQgbm90IGdvIHRocm91Z2ggc2hhcmVkX2J1ZmZlcnMgYW5kIHRoZXJlZm9yZSBh IGNvbmN1cnJlbnQKIAkgKiBjaGVja3BvaW50IG1heSBoYXZlIG1vdmVkIHRoZSByZWRvIHBv aW50ZXIgcGFzdCBvdXIgeGxvZyByZWNvcmQuCiAJICovCi0Jc21ncmltbWVkc3luYyhSZWxh dGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0pOworCXNtZ3JpbW1lZHN5bmMoUmVs YXRpb25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0pKTsKIH0KIAogLyoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzb3J0LmMKaW5kZXggYmQxNjg1YzQ0MWIuLjUzZGRkZGZkNjlm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYwpAQCAtNjYyLDcgKzY2Miw3 IEBAIF9idF9ibHdyaXRlcGFnZShCVFdyaXRlU3RhdGUgKndzdGF0ZSwgUGFnZSBwYWdlLCBC bG9ja051bWJlciBibGtubykKIAkJaWYgKCF3c3RhdGUtPmJ0d3NfemVyb3BhZ2UpCiAJCQl3 c3RhdGUtPmJ0d3NfemVyb3BhZ2UgPSAoUGFnZSkgcGFsbG9jMChCTENLU1opOwogCQkvKiBk b24ndCBzZXQgY2hlY2tzdW0gZm9yIGFsbC16ZXJvIHBhZ2UgKi8KLQkJc21ncmV4dGVuZChS ZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9SS05VTSwKKwkJc21ncmV4 dGVuZChSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCwgTUFJTl9GT1JLTlVNKSwKIAkJ CQkgICB3c3RhdGUtPmJ0d3NfcGFnZXNfd3JpdHRlbisrLAogCQkJCSAgIChjaGFyICopIHdz dGF0ZS0+YnR3c196ZXJvcGFnZSwKIAkJCQkgICB0cnVlKTsKQEAgLTY3NywxNCArNjc3LDE0 IEBAIF9idF9ibHdyaXRlcGFnZShCVFdyaXRlU3RhdGUgKndzdGF0ZSwgUGFnZSBwYWdlLCBC bG9ja051bWJlciBibGtubykKIAlpZiAoYmxrbm8gPT0gd3N0YXRlLT5idHdzX3BhZ2VzX3dy aXR0ZW4pCiAJewogCQkvKiBleHRlbmRpbmcgdGhlIGZpbGUuLi4gKi8KLQkJc21ncmV4dGVu ZChSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9SS05VTSwgYmxrbm8s CisJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgsIE1BSU5fRk9S S05VTSksIGJsa25vLAogCQkJCSAgIChjaGFyICopIHBhZ2UsIHRydWUpOwogCQl3c3RhdGUt PmJ0d3NfcGFnZXNfd3JpdHRlbisrOwogCX0KIAllbHNlCiAJewogCQkvKiBvdmVyd3JpdGlu ZyBhIGJsb2NrIHdlIHplcm8tZmlsbGVkIGJlZm9yZSAqLwotCQlzbWdyd3JpdGUoUmVsYXRp b25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBNQUlOX0ZPUktOVU0sIGJsa25vLAorCQlzbWdy d3JpdGUoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgsIE1BSU5fRk9SS05VTSksIGJs a25vLAogCQkJCSAgKGNoYXIgKikgcGFnZSwgdHJ1ZSk7CiAJfQogCkBAIC0xNDMxLDcgKzE0 MzEsNyBAQCBfYnRfbG9hZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRTcG9vbCAqYnRzcG9v bCwgQlRTcG9vbCAqYnRzcG9vbDIpCiAJICogc3RpbGwgbm90IGJlIG9uIGRpc2sgd2hlbiB0 aGUgY3Jhc2ggb2NjdXJzLgogCSAqLwogCWlmICh3c3RhdGUtPmJ0d3NfdXNlX3dhbCkKLQkJ c21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9S S05VTSk7CisJCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgs IE1BSU5fRk9SS05VTSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn aW5zZXJ0LmMKaW5kZXggYzY4MjFiNTk1MjQuLjc1ZWIwOTU0M2Q5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMKQEAgLTE1NSw4ICsxNTUsMTEgQEAgc3BnYnVp bGQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZv KQogdm9pZAogc3BnYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIHsKKwlTTWdyRmlsZUhh bmRsZSBzZmlsZTsKIAlQYWdlCQlwYWdlOwogCisJc2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3Io aW5kZXgsIElOSVRfRk9SS05VTSk7CisKIAkvKiBDb25zdHJ1Y3QgbWV0YXBhZ2UuICovCiAJ cGFnZSA9IChQYWdlKSBwYWxsb2MoQkxDS1NaKTsKIAlTcEdpc3RJbml0TWV0YXBhZ2UocGFn ZSk7CkBAIC0xNjksMjcgKzE3MiwyNyBAQCBzcGdidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4 KQogCSAqIHJlcGxheWVkLgogCSAqLwogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwg U1BHSVNUX01FVEFQQUdFX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGlu ZGV4KSwgSU5JVF9GT1JLTlVNLCBTUEdJU1RfTUVUQVBBR0VfQkxLTk8sCisJc21ncndyaXRl KHNmaWxlLCBTUEdJU1RfTUVUQVBBR0VfQkxLTk8sCiAJCQkgIChjaGFyICopIHBhZ2UsIHRy dWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRpb25HZXRTbWdyKGluZGV4KSktPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAorCWxvZ19uZXdwYWdlKCZpbmRleC0+cmRf bG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCVNQR0lTVF9NRVRBUEFHRV9CTEtOTywgcGFn ZSwgdHJ1ZSk7CiAKIAkvKiBMaWtld2lzZSBmb3IgdGhlIHJvb3QgcGFnZS4gKi8KIAlTcEdp c3RJbml0UGFnZShwYWdlLCBTUEdJU1RfTEVBRik7CiAKIAlQYWdlU2V0Q2hlY2tzdW1JbnBs YWNlKHBhZ2UsIFNQR0lTVF9ST09UX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRT bWdyKGluZGV4KSwgSU5JVF9GT1JLTlVNLCBTUEdJU1RfUk9PVF9CTEtOTywKKwlzbWdyd3Jp dGUoc2ZpbGUsIFNQR0lTVF9ST09UX0JMS05PLAogCQkJICAoY2hhciAqKSBwYWdlLCB0cnVl KTsKLQlsb2dfbmV3cGFnZSgmKFJlbGF0aW9uR2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IsIElOSVRfRk9SS05VTSwKKwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xv Y2F0b3IsIElOSVRfRk9SS05VTSwKIAkJCQlTUEdJU1RfUk9PVF9CTEtOTywgcGFnZSwgdHJ1 ZSk7CiAKIAkvKiBMaWtld2lzZSBmb3IgdGhlIG51bGwtdHVwbGVzIHJvb3QgcGFnZS4gKi8K IAlTcEdpc3RJbml0UGFnZShwYWdlLCBTUEdJU1RfTEVBRiB8IFNQR0lTVF9OVUxMUyk7CiAK IAlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIFNQR0lTVF9OVUxMX0JMS05PKTsKLQlz bWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5JVF9GT1JLTlVNLCBTUEdJU1Rf TlVMTF9CTEtOTywKKwlzbWdyd3JpdGUoc2ZpbGUsIFNQR0lTVF9OVUxMX0JMS05PLAogCQkJ ICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKLQlsb2dfbmV3cGFnZSgmKFJlbGF0aW9uR2V0U21n cihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElOSVRfRk9SS05VTSwKKwlsb2df bmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSwKIAkJCQlTUEdJU1Rf TlVMTF9CTEtOTywgcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTk3LDcgKzIwMCw3IEBAIHNw Z2J1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAJICogd3JpdGVzIGRpZCBub3QgZ28gdGhy b3VnaCBzaGFyZWQgYnVmZmVycyBhbmQgdGhlcmVmb3JlIGEgY29uY3VycmVudAogCSAqIGNo ZWNrcG9pbnQgbWF5IGhhdmUgbW92ZWQgdGhlIHJlZG8gcG9pbnRlciBwYXN0IG91ciB4bG9n IHJlY29yZC4KIAkgKi8KLQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihpbmRleCks IElOSVRfRk9SS05VTSk7CisJc21ncmltbWVkc3luYyhzZmlsZSk7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwppbmRleCBiM2QxYTZjM2Y4Zi4uMThjNGU4N2Zm NTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAtNjMyLDEwICs2MzIs MTAgQEAgdGFibGVfYmxvY2tfcmVsYXRpb25fc2l6ZShSZWxhdGlvbiByZWwsIEZvcmtOdW1i ZXIgZm9ya051bWJlcikKIAlpZiAoZm9ya051bWJlciA9PSBJbnZhbGlkRm9ya051bWJlcikK IAl7CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0ZPUktOVU07IGkrKykKLQkJCW5ibG9j a3MgKz0gc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJlbCksIGkpOworCQkJbmJsb2Nr cyArPSBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsLCBpKSk7CiAJfQogCWVsc2UK LQkJbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVt YmVyKTsKKwkJbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwsIGZv cmtOdW1iZXIpKTsKIAogCXJldHVybiBuYmxvY2tzICogQkxDS1NaOwogfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMKaW5kZXggODdkMTQyMTBi ZTcuLmJjMmVjZWMyMjA1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9ncHJlZmV0Y2hlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2dwcmVmZXRjaGVyLmMKQEAgLTY1MCw3ICs2NTAsNyBAQCBYTG9nUHJlZmV0Y2hlck5leHRC bG9jayh1aW50cHRyX3QgcGdzcl9wcml2YXRlLCBYTG9nUmVjUHRyICpsc24pCiAJCXsKIAkJ CWludAkJCWJsb2NrX2lkID0gcHJlZmV0Y2hlci0+bmV4dF9ibG9ja19pZCsrOwogCQkJRGVj b2RlZEJrcEJsb2NrICpibG9jayA9ICZyZWNvcmQtPmJsb2Nrc1tibG9ja19pZF07Ci0JCQlT TWdyUmVsYXRpb24gcmVsbjsKKwkJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCQkJUHJlZmV0 Y2hCdWZmZXJSZXN1bHQgcmVzdWx0OwogCiAJCQlpZiAoIWJsb2NrLT5pbl91c2UpCkBAIC03 MjAsNyArNzIwLDcgQEAgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90IHBnc3Jf cHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJICogc2FtZSByZWxhdGlvbiAod2l0aCBz b21lIHNjaGVtZSB0byBoYW5kbGUgaW52YWxpZGF0aW9ucwogCQkJICogc2FmZWx5KSwgYnV0 IGZvciBub3cgd2UnbGwgY2FsbCBzbWdyb3BlbigpIGV2ZXJ5IHRpbWUuCiAJCQkgKi8KLQkJ CXJlbG4gPSBzbWdyb3BlbihibG9jay0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwor CQkJc2ZpbGUgPSBzbWdyb3BlbihibG9jay0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQs IGJsb2NrLT5mb3JrbnVtKTsKIAogCQkJLyoKIAkJCSAqIElmIHRoZSByZWxhdGlvbiBmaWxl IGRvZXNuJ3QgZXhpc3Qgb24gZGlzaywgZm9yIGV4YW1wbGUgYmVjYXVzZQpAQCAtNzI5LDE0 ICs3MjksMTQgQEAgWExvZ1ByZWZldGNoZXJOZXh0QmxvY2sodWludHB0cl90IHBnc3JfcHJp dmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJICogZnVydGhlciBwcmVmZXRjaGluZyBpbiB0 aGUgcmVsYXRpb24gdW50aWwgdGhpcyByZWNvcmQgaXMKIAkJCSAqIHJlcGxheWVkLgogCQkJ ICovCi0JCQlpZiAoIXNtZ3JleGlzdHMocmVsbiwgTUFJTl9GT1JLTlVNKSkKKwkJCWlmICgh c21ncmV4aXN0cyhzZmlsZSkpCiAJCQl7CiAjaWZkZWYgWExPR1BSRUZFVENIRVJfREVCVUdf TEVWRUwKIAkJCQllbG9nKFhMT0dQUkVGRVRDSEVSX0RFQlVHX0xFVkVMLAogCQkJCQkgInN1 cHByZXNzaW5nIGFsbCBwcmVmZXRjaCBpbiByZWxhdGlvbiAldS8ldS8ldSB1bnRpbCAlWC8l WCBpcyByZXBsYXllZCwgYmVjYXVzZSB0aGUgcmVsYXRpb24gZG9lcyBub3QgZXhpc3Qgb24g ZGlzayIsCi0JCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJ CQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkgcmVsbi0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJIHNmaWxlLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5kYk9pZCwKKwkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVy LAogCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHJlY29yZC0+bHNuKSk7CiAjZW5kaWYKIAkJCQlY TG9nUHJlZmV0Y2hlckFkZEZpbHRlcihwcmVmZXRjaGVyLCBibG9jay0+cmxvY2F0b3IsIDAs CkBAIC03NTAsMTQgKzc1MCwxNCBAQCBYTG9nUHJlZmV0Y2hlck5leHRCbG9jayh1aW50cHRy X3QgcGdzcl9wcml2YXRlLCBYTG9nUmVjUHRyICpsc24pCiAJCQkgKiBibG9jayB5ZXQsIHN1 cHByZXNzIHByZWZldGNoaW5nIG9mIHRoaXMgYmxvY2sgYW5kIGhpZ2hlciB1bnRpbAogCQkJ ICogdGhpcyByZWNvcmQgaXMgcmVwbGF5ZWQuCiAJCQkgKi8KLQkJCWlmIChibG9jay0+Ymxr bm8gPj0gc21ncm5ibG9ja3MocmVsbiwgYmxvY2stPmZvcmtudW0pKQorCQkJaWYgKGJsb2Nr LT5ibGtubyA+PSBzbWdybmJsb2NrcyhzZmlsZSkpCiAJCQl7CiAjaWZkZWYgWExPR1BSRUZF VENIRVJfREVCVUdfTEVWRUwKIAkJCQllbG9nKFhMT0dQUkVGRVRDSEVSX0RFQlVHX0xFVkVM LAogCQkJCQkgInN1cHByZXNzaW5nIHByZWZldGNoIGluIHJlbGF0aW9uICV1LyV1LyV1IGZy b20gYmxvY2sgJXUgdW50aWwgJVgvJVggaXMgcmVwbGF5ZWQsIGJlY2F1c2UgdGhlIHJlbGF0 aW9uIGlzIHRvbyBzbWFsbCIsCi0JCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAotCQkJCQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJ CQkgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJIHNmaWxl LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkgc2ZpbGUtPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IucmVsTnVtYmVyLAogCQkJCQkgYmxvY2stPmJsa25vLAogCQkJCQkgTFNOX0ZPUk1BVF9B UkdTKHJlY29yZC0+bHNuKSk7CiAjZW5kaWYKQEAgLTc2OCw3ICs3NjgsNyBAQCBYTG9nUHJl ZmV0Y2hlck5leHRCbG9jayh1aW50cHRyX3QgcGdzcl9wcml2YXRlLCBYTG9nUmVjUHRyICps c24pCiAJCQl9CiAKIAkJCS8qIFRyeSB0byBpbml0aWF0ZSBwcmVmZXRjaGluZy4gKi8KLQkJ CXJlc3VsdCA9IFByZWZldGNoU2hhcmVkQnVmZmVyKHJlbG4sIGJsb2NrLT5mb3JrbnVtLCBi bG9jay0+Ymxrbm8pOworCQkJcmVzdWx0ID0gUHJlZmV0Y2hTaGFyZWRCdWZmZXIoc2ZpbGUs IGJsb2NrLT5ibGtubyk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChyZXN1bHQucmVjZW50X2J1 ZmZlcikpCiAJCQl7CiAJCQkJLyogQ2FjaGUgaGl0LCBub3RoaW5nIHRvIGRvLiAqLwpAQCAt Nzk0LDkgKzc5NCw5IEBAIFhMb2dQcmVmZXRjaGVyTmV4dEJsb2NrKHVpbnRwdHJfdCBwZ3Ny X3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJCQkgKi8KIAkJCQllbG9nKEVSUk9SLAog CQkJCQkgImNvdWxkIG5vdCBwcmVmZXRjaCByZWxhdGlvbiAldS8ldS8ldSBibG9jayAldSIs Ci0JCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkgcmVs bi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkgcmVsbi0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9j YXRvci5zcGNPaWQsCisJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQs CisJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAogCQkJCQkg YmxvY2stPmJsa25vKTsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9ndXRpbHMuYwppbmRleCAwY2RhMjI1OTdmZS4uNzkwMWZjNWZmYzggMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jCkBAIC00NzUsNyArNDc1LDcgQEAgWExv Z1JlYWRCdWZmZXJFeHRlbmRlZChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJl ciBmb3JrbnVtLAogewogCUJsb2NrTnVtYmVyIGxhc3RibG9jazsKIAlCdWZmZXIJCWJ1ZmZl cjsKLQlTTWdyUmVsYXRpb24gc21ncjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAogCUFz c2VydChibGtubyAhPSBQX05FVyk7CiAKQEAgLTQ4OSw3ICs0ODksNyBAQCBYTG9nUmVhZEJ1 ZmZlckV4dGVuZGVkKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtu dW0sCiAJfQogCiAJLyogT3BlbiB0aGUgcmVsYXRpb24gYXQgc21nciBsZXZlbCAqLwotCXNt Z3IgPSBzbWdyb3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CisJc2ZpbGUgPSBz bWdyb3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSk7CiAKIAkvKgog CSAqIENyZWF0ZSB0aGUgdGFyZ2V0IGZpbGUgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0 LiAgVGhpcyBsZXRzIHVzIGNvcGUKQEAgLTQ5OSw5ICs0OTksOSBAQCBYTG9nUmVhZEJ1ZmZl ckV4dGVuZGVkKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0s CiAJICogZmlsZXN5c3RlbSBsb3NlcyBhbiBpbm9kZSBkdXJpbmcgYSBjcmFzaC4gIEJldHRl ciB0byB3cml0ZSB0aGUgZGF0YQogCSAqIHVudGlsIHdlIGFyZSBhY3R1YWxseSB0b2xkIHRv IGRlbGV0ZSB0aGUgZmlsZS4pCiAJICovCi0Jc21ncmNyZWF0ZShzbWdyLCBmb3JrbnVtLCB0 cnVlKTsKKwlzbWdyY3JlYXRlKHNmaWxlLCB0cnVlKTsKIAotCWxhc3RibG9jayA9IHNtZ3Ju YmxvY2tzKHNtZ3IsIGZvcmtudW0pOworCWxhc3RibG9jayA9IHNtZ3JuYmxvY2tzKHNmaWxl KTsKIAogCWlmIChibGtubyA8IGxhc3RibG9jaykKIAl7CkBAIC02MjksNyArNjI5LDcgQEAg Q3JlYXRlRmFrZVJlbGNhY2hlRW50cnkoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IpCiAJcmVs LT5yZF9sb2NrSW5mby5sb2NrUmVsSWQuZGJJZCA9IHJsb2NhdG9yLmRiT2lkOwogCXJlbC0+ cmRfbG9ja0luZm8ubG9ja1JlbElkLnJlbElkID0gcmxvY2F0b3IucmVsTnVtYmVyOwogCi0J cmVsLT5yZF9zbWdyID0gTlVMTDsKKwlNZW1TZXQocmVsLT5yZF9zbWdyLCAwLCBzaXplb2Yo cmVsLT5yZF9zbWdyKSk7CiAKIAlyZXR1cm4gcmVsOwogfQpAQCAtNjQxLDggKzY0MSwxMSBA QCB2b2lkCiBGcmVlRmFrZVJlbGNhY2hlRW50cnkoUmVsYXRpb24gZmFrZXJlbCkKIHsKIAkv KiBtYWtlIHN1cmUgdGhlIGZha2VyZWwgaXMgbm90IHJlZmVyZW5jZWQgYnkgdGhlIFNtZ3JS ZWxhdGlvbiBhbnltb3JlICovCi0JaWYgKGZha2VyZWwtPnJkX3NtZ3IgIT0gTlVMTCkKLQkJ c21ncmNsZWFyb3duZXIoJmZha2VyZWwtPnJkX3NtZ3IsIGZha2VyZWwtPnJkX3NtZ3IpOwor CWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJeworCQlpZiAoZmFr ZXJlbC0+cmRfc21ncltpXSAhPSBOVUxMKQorCQkJc21ncmNsZWFyb3duZXIoJmZha2VyZWwt PnJkX3NtZ3JbaV0sIGZha2VyZWwtPnJkX3NtZ3JbaV0pOworCX0KIAlwZnJlZShmYWtlcmVs KTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9nLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL2NhdGFsb2cuYwppbmRleCA2ZjQzODcwNzc5Zi4uMDNkMTYz Zjc4ODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvY2F0YWxvZy5jCisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvY2F0YWxvZy5jCkBAIC00OTksMTAgKzQ5OSwxMCBAQCBH ZXROZXdPaWRXaXRoSW5kZXgoUmVsYXRpb24gcmVsYXRpb24sIE9pZCBpbmRleElkLCBBdHRy TnVtYmVyIG9pZGNvbHVtbikKIFJlbEZpbGVOdW1iZXIKIEdldE5ld1JlbEZpbGVOdW1iZXIo T2lkIHJlbHRhYmxlc3BhY2UsIFJlbGF0aW9uIHBnX2NsYXNzLCBjaGFyIHJlbHBlcnNpc3Rl bmNlKQogewotCVJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvcjsKLQljaGFyCSAgICpy cGF0aDsKLQlib29sCQljb2xsaWRlczsKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKIAlC YWNrZW5kSWQJYmFja2VuZDsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKKwlib29sCQljb2xs aWRlczsKIAogCS8qCiAJICogSWYgd2UgZXZlciBnZXQgaGVyZSBkdXJpbmcgcGdfdXBncmFk ZSwgdGhlcmUncyBzb21ldGhpbmcgd3Jvbmc7IGFsbApAQCAtNTExLDYgKzUxMSwxMSBAQCBH ZXROZXdSZWxGaWxlTnVtYmVyKE9pZCByZWx0YWJsZXNwYWNlLCBSZWxhdGlvbiBwZ19jbGFz cywgY2hhciByZWxwZXJzaXN0ZW5jZSkKIAkgKi8KIAlBc3NlcnQoIUlzQmluYXJ5VXBncmFk ZSk7CiAKKwkvKgorCSAqIFRoZSByZWxwYXRoIHdpbGwgdmFyeSBiYXNlZCBvbiB0aGUgYmFj a2VuZCBJRCwgc28gd2UgbXVzdCBpbml0aWFsaXplCisJICogdGhhdCBwcm9wZXJseSBoZXJl IHRvIG1ha2Ugc3VyZSB0aGF0IGFueSBjb2xsaXNpb25zIGJhc2VkIG9uIGZpbGVuYW1lCisJ ICogYXJlIHByb3Blcmx5IGRldGVjdGVkLgorCSAqLwogCXN3aXRjaCAocmVscGVyc2lzdGVu Y2UpCiAJewogCQljYXNlIFJFTFBFUlNJU1RFTkNFX1RFTVA6CkBAIC01MjYsNTMgKzUzMSwy OSBAQCBHZXROZXdSZWxGaWxlTnVtYmVyKE9pZCByZWx0YWJsZXNwYWNlLCBSZWxhdGlvbiBw Z19jbGFzcywgY2hhciByZWxwZXJzaXN0ZW5jZSkKIAl9CiAKIAkvKiBUaGlzIGxvZ2ljIHNo b3VsZCBtYXRjaCBSZWxhdGlvbkluaXRQaHlzaWNhbEFkZHIgKi8KLQlybG9jYXRvci5sb2Nh dG9yLnNwY09pZCA9IHJlbHRhYmxlc3BhY2UgPyByZWx0YWJsZXNwYWNlIDogTXlEYXRhYmFz ZVRhYmxlU3BhY2U7Ci0JcmxvY2F0b3IubG9jYXRvci5kYk9pZCA9Ci0JCShybG9jYXRvci5s b2NhdG9yLnNwY09pZCA9PSBHTE9CQUxUQUJMRVNQQUNFX09JRCkgPworCXJsb2NhdG9yLnNw Y09pZCA9IHJlbHRhYmxlc3BhY2UgPyByZWx0YWJsZXNwYWNlIDogTXlEYXRhYmFzZVRhYmxl U3BhY2U7CisJcmxvY2F0b3IuZGJPaWQgPQorCQkocmxvY2F0b3Iuc3BjT2lkID09IEdMT0JB TFRBQkxFU1BBQ0VfT0lEKSA/CiAJCUludmFsaWRPaWQgOiBNeURhdGFiYXNlSWQ7CiAKLQkv KgotCSAqIFRoZSByZWxwYXRoIHdpbGwgdmFyeSBiYXNlZCBvbiB0aGUgYmFja2VuZCBJRCwg c28gd2UgbXVzdCBpbml0aWFsaXplCi0JICogdGhhdCBwcm9wZXJseSBoZXJlIHRvIG1ha2Ug c3VyZSB0aGF0IGFueSBjb2xsaXNpb25zIGJhc2VkIG9uIGZpbGVuYW1lCi0JICogYXJlIHBy b3Blcmx5IGRldGVjdGVkLgotCSAqLwotCXJsb2NhdG9yLmJhY2tlbmQgPSBiYWNrZW5kOwot CiAJZG8KIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKIAkJLyogR2VuZXJhdGUg dGhlIE9JRCAqLwogCQlpZiAocGdfY2xhc3MpCi0JCQlybG9jYXRvci5sb2NhdG9yLnJlbE51 bWJlciA9IEdldE5ld09pZFdpdGhJbmRleChwZ19jbGFzcywgQ2xhc3NPaWRJbmRleElkLAor CQkJcmxvY2F0b3IucmVsTnVtYmVyID0gR2V0TmV3T2lkV2l0aEluZGV4KHBnX2NsYXNzLCBD bGFzc09pZEluZGV4SWQsCiAJCQkJCQkJCQkJCQkJCQlBbnVtX3BnX2NsYXNzX29pZCk7CiAJ CWVsc2UKLQkJCXJsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyID0gR2V0TmV3T2JqZWN0SWQo KTsKKwkJCXJsb2NhdG9yLnJlbE51bWJlciA9IEdldE5ld09iamVjdElkKCk7CiAKIAkJLyog Q2hlY2sgZm9yIGV4aXN0aW5nIGZpbGUgb2Ygc2FtZSBuYW1lICovCi0JCXJwYXRoID0gcmVs cGF0aChybG9jYXRvciwgTUFJTl9GT1JLTlVNKTsKLQotCQlpZiAoYWNjZXNzKHJwYXRoLCBG X09LKSA9PSAwKQotCQl7Ci0JCQkvKiBkZWZpbml0ZSBjb2xsaXNpb24gKi8KLQkJCWNvbGxp ZGVzID0gdHJ1ZTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBIZXJlIHdlIGhh dmUgYSBsaXR0bGUgYml0IG9mIGEgZGlsZW1tYTogaWYgZXJybm8gaXMgc29tZXRoaW5nCi0J CQkgKiBvdGhlciB0aGFuIEVOT0VOVCwgc2hvdWxkIHdlIGRlY2xhcmUgYSBjb2xsaXNpb24g YW5kIGxvb3A/IEluCi0JCQkgKiBwcmFjdGljZSBpdCBzZWVtcyBiZXN0IHRvIGdvIGFoZWFk IHJlZ2FyZGxlc3Mgb2YgdGhlIGVycm5vLiAgSWYKLQkJCSAqIHRoZXJlIGlzIGEgY29sbGlk aW5nIGZpbGUgd2Ugd2lsbCBnZXQgYW4gc21nciBmYWlsdXJlIHdoZW4gd2UKLQkJCSAqIGF0 dGVtcHQgdG8gY3JlYXRlIHRoZSBuZXcgcmVsYXRpb24gZmlsZS4KLQkJCSAqLwotCQkJY29s bGlkZXMgPSBmYWxzZTsKLQkJfQotCi0JCXBmcmVlKHJwYXRoKTsKKwkJc2ZpbGUgPSBzbWdy b3BlbihybG9jYXRvciwgYmFja2VuZCwgTUFJTl9GT1JLTlVNKTsKKwkJY29sbGlkZXMgPSBz bWdyZXhpc3RzKHNmaWxlKTsKKwkJc21ncmNsb3NlKHNmaWxlKTsKIAl9IHdoaWxlIChjb2xs aWRlcyk7CiAKLQlyZXR1cm4gcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXI7CisJcmV0dXJu IHJsb2NhdG9yLnJlbE51bWJlcjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRleCBk NzE5MmYzNWUzZi4uMDdjZjdiNjY3ODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTMwMjYs OSArMzAyNiw5IEBAIGluZGV4X2J1aWxkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkgKiBy ZWxmaWxlbnVtYmVyIHdvbid0IGNoYW5nZSwgYW5kIG5vdGhpbmcgbmVlZHMgdG8gYmUgZG9u ZSBoZXJlLgogCSAqLwogCWlmIChpbmRleFJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3Rl bmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEICYmCi0JCSFzbWdyZXhpc3RzKFJlbGF0 aW9uR2V0U21ncihpbmRleFJlbGF0aW9uKSwgSU5JVF9GT1JLTlVNKSkKKwkJIXNtZ3JleGlz dHMoUmVsYXRpb25HZXRTbWdyKGluZGV4UmVsYXRpb24sIElOSVRfRk9SS05VTSkpKQogCXsK LQkJc21ncmNyZWF0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXhSZWxhdGlvbiksIElOSVRfRk9S S05VTSwgZmFsc2UpOworCQlzbWdyY3JlYXRlKFJlbGF0aW9uR2V0U21ncihpbmRleFJlbGF0 aW9uLCBJTklUX0ZPUktOVU0pLCBmYWxzZSk7CiAJCWluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWJ1aWxkZW1wdHkoaW5kZXhSZWxhdGlvbik7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFn ZS5jCmluZGV4IGQ3MDhhZjE5ZWQyLi41ZDQ3ODY0ZTNhOSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9y YWdlLmMKQEAgLTExNiwxMSArMTE2LDExIEBAIEFkZFBlbmRpbmdTeW5jKGNvbnN0IFJlbEZp bGVMb2NhdG9yICpybG9jYXRvcikKICAqIHRoYXQgZG9lcyBub3Qgd2FudCB0aGUgc3RvcmFn ZSB0byBiZSBkZXN0cm95ZWQgaW4gY2FzZSBvZiBhbiBhYm9ydCBtYXkKICAqIHBhc3MgcmVn aXN0ZXJfZGVsZXRlID0gZmFsc2UuCiAgKi8KLVNNZ3JSZWxhdGlvbgorU01nckZpbGVIYW5k bGUKIFJlbGF0aW9uQ3JlYXRlU3RvcmFnZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgY2hh ciByZWxwZXJzaXN0ZW5jZSwKIAkJCQkJICBib29sIHJlZ2lzdGVyX2RlbGV0ZSkKIHsKLQlT TWdyUmVsYXRpb24gc3JlbDsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAlCYWNrZW5kSWQJ YmFja2VuZDsKIAlib29sCQluZWVkc193YWw7CiAKQEAgLTE0NSwxMSArMTQ1LDExIEBAIFJl bGF0aW9uQ3JlYXRlU3RvcmFnZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgY2hhciByZWxw ZXJzaXN0ZW5jZSwKIAkJCXJldHVybiBOVUxMOwkJLyogcGxhY2F0ZSBjb21waWxlciAqLwog CX0KIAotCXNyZWwgPSBzbWdyb3BlbihybG9jYXRvciwgYmFja2VuZCk7Ci0Jc21ncmNyZWF0 ZShzcmVsLCBNQUlOX0ZPUktOVU0sIGZhbHNlKTsKKwlzZmlsZSA9IHNtZ3JvcGVuKHJsb2Nh dG9yLCBiYWNrZW5kLCBNQUlOX0ZPUktOVU0pOworCXNtZ3JjcmVhdGUoc2ZpbGUsIGZhbHNl KTsKIAogCWlmIChuZWVkc193YWwpCi0JCWxvZ19zbWdyY3JlYXRlKCZzcmVsLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3IsIE1BSU5fRk9SS05VTSk7CisJCWxvZ19zbWdyY3JlYXRlKCZybG9j YXRvciwgTUFJTl9GT1JLTlVNKTsKIAogCS8qCiAJICogQWRkIHRoZSByZWxhdGlvbiB0byB0 aGUgbGlzdCBvZiBzdHVmZiB0byBkZWxldGUgYXQgYWJvcnQsIGlmIHdlIGFyZQpAQCAtMTc1 LDcgKzE3NSw3IEBAIFJlbGF0aW9uQ3JlYXRlU3RvcmFnZShSZWxGaWxlTG9jYXRvciBybG9j YXRvciwgY2hhciByZWxwZXJzaXN0ZW5jZSwKIAkJQWRkUGVuZGluZ1N5bmMoJnJsb2NhdG9y KTsKIAl9CiAKLQlyZXR1cm4gc3JlbDsKKwlyZXR1cm4gc2ZpbGU7CiB9CiAKIC8qCkBAIC0y OTIsMTYgKzI5MiwxOCBAQCBSZWxhdGlvblRydW5jYXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tO dW1iZXIgbmJsb2NrcykKIAlGb3JrTnVtYmVyCWZvcmtzW01BWF9GT1JLTlVNXTsKIAlCbG9j a051bWJlciBibG9ja3NbTUFYX0ZPUktOVU1dOwogCWludAkJCW5mb3JrcyA9IDA7Ci0JU01n clJlbGF0aW9uIHJlbG47CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSBzbWdyX3RhcmdibG9jayBl dGMgYXJlbid0IHBvaW50aW5nIHNvbWV3aGVyZSBwYXN0IG5ldyBlbmQuCiAJICogKE5vdGU6 IGRvbid0IHJlbHkgb24gdGhpcyByZWxuIHBvaW50ZXIgYmVsb3cgdGhpcyBsb29wLikKIAkg Ki8KLQlyZWxuID0gUmVsYXRpb25HZXRTbWdyKHJlbCk7Ci0JcmVsbi0+c21ncl90YXJnYmxv Y2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZP UktOVU07ICsraSkKLQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tpXSA9IEludmFsaWRC bG9ja051bWJlcjsKKwlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9SS05VTTsgaSsrKQor CXsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3IocmVsLCBpKTsK KworCQlzZmlsZS0+c21ncl90YXJnYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCXNm aWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVyOworCX0KIAog CS8qIFByZXBhcmUgZm9yIHRydW5jYXRpb24gb2YgTUFJTiBmb3JrIG9mIHRoZSByZWxhdGlv biAqLwogCWZvcmtzW25mb3Jrc10gPSBNQUlOX0ZPUktOVU07CkBAIC0zMDksNyArMzExLDcg QEAgUmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3Mp CiAJbmZvcmtzKys7CiAKIAkvKiBQcmVwYXJlIGZvciB0cnVuY2F0aW9uIG9mIHRoZSBGU00g aWYgaXQgZXhpc3RzICovCi0JZnNtID0gc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVs KSwgRlNNX0ZPUktOVU0pOworCWZzbSA9IHNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJl bCwgRlNNX0ZPUktOVU0pKTsKIAlpZiAoZnNtKQogCXsKIAkJYmxvY2tzW25mb3Jrc10gPSBG cmVlU3BhY2VNYXBQcmVwYXJlVHJ1bmNhdGVSZWwocmVsLCBuYmxvY2tzKTsKQEAgLTMyMiw3 ICszMjQsNyBAQCBSZWxhdGlvblRydW5jYXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIg bmJsb2NrcykKIAl9CiAKIAkvKiBQcmVwYXJlIGZvciB0cnVuY2F0aW9uIG9mIHRoZSB2aXNp YmlsaXR5IG1hcCB0b28gaWYgaXQgZXhpc3RzICovCi0Jdm0gPSBzbWdyZXhpc3RzKFJlbGF0 aW9uR2V0U21ncihyZWwpLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pOworCXZtID0gc21ncmV4 aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pKTsKIAlp ZiAodm0pCiAJewogCQlibG9ja3NbbmZvcmtzXSA9IHZpc2liaWxpdHltYXBfcHJlcGFyZV90 cnVuY2F0ZShyZWwsIG5ibG9ja3MpOwpAQCAtMzkwLDExICszOTIsMTIgQEAgUmVsYXRpb25U cnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJfQogCiAJLyoK LQkgKiBUaGlzIHdpbGwgZmlyc3QgcmVtb3ZlIGFueSBidWZmZXJzIGZyb20gdGhlIGJ1ZmZl ciBwb29sIHRoYXQgc2hvdWxkIG5vCisJICogRmlyc3QgcmVtb3ZlIGFueSBidWZmZXJzIGZy b20gdGhlIGJ1ZmZlciBwb29sIHRoYXQgc2hvdWxkIG5vCiAJICogbG9uZ2VyIGV4aXN0IGFm dGVyIHRydW5jYXRpb24gaXMgY29tcGxldGUsIGFuZCB0aGVuIHRydW5jYXRlIHRoZQogCSAq IGNvcnJlc3BvbmRpbmcgZmlsZXMgb24gZGlzay4KIAkgKi8KLQlzbWdydHJ1bmNhdGUoUmVs YXRpb25HZXRTbWdyKHJlbCksIGZvcmtzLCBuZm9ya3MsIGJsb2Nrcyk7CisJRHJvcFJlbGF0 aW9uQnVmZmVycyhyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya3MsIG5m b3JrcywgYmxvY2tzKTsKKwlzbWdydHJ1bmNhdGVfbXVsdGkocmVsLT5yZF9sb2NhdG9yLCBy ZWwtPnJkX2JhY2tlbmQsIGZvcmtzLCBuZm9ya3MsIGJsb2Nrcyk7CiAKIAkvKiBXZSd2ZSBk b25lIGFsbCB0aGUgY3JpdGljYWwgd29yaywgc28gY2hlY2twb2ludHMgYXJlIE9LIG5vdy4g Ki8KIAlNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyAmPSB+REVMQVlfQ0hLUFRfQ09NUExFVEU7 CkBAIC00MjgsNyArNDMxLDcgQEAgUmVsYXRpb25QcmVUcnVuY2F0ZShSZWxhdGlvbiByZWwp CiAJCXJldHVybjsKIAogCXBlbmRpbmcgPSBoYXNoX3NlYXJjaChwZW5kaW5nU3luY0hhc2gs Ci0JCQkJCQkgICYoUmVsYXRpb25HZXRTbWdyKHJlbCktPnNtZ3JfcmxvY2F0b3IubG9jYXRv ciksCisJCQkJCQkgICZyZWwtPnJkX2xvY2F0b3IsCiAJCQkJCQkgIEhBU0hfRklORCwgTlVM TCk7CiAJaWYgKHBlbmRpbmcpCiAJCXBlbmRpbmctPmlzX3RydW5jYXRlZCA9IHRydWU7CkBA IC00NDQsMTIgKzQ0NywxMiBAQCBSZWxhdGlvblByZVRydW5jYXRlKFJlbGF0aW9uIHJlbCkK ICAqIEFsc28gbm90ZSB0aGF0IHRoaXMgaXMgZnJlcXVlbnRseSBjYWxsZWQgdmlhIGxvY3V0 aW9ucyBzdWNoIGFzCiAgKgkJUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlvbkdldFNtZ3Io cmVsKSwgLi4uKTsKICAqIFRoYXQncyBzYWZlIG9ubHkgYmVjYXVzZSB3ZSBwZXJmb3JtIG9u bHkgc21nciBhbmQgV0FMIG9wZXJhdGlvbnMgaGVyZS4KLSAqIElmIHdlIGludm9rZWQgYW55 dGhpbmcgZWxzZSwgYSByZWxjYWNoZSBmbHVzaCBjb3VsZCBjYXVzZSBvdXIgU01nclJlbGF0 aW9uCisgKiBJZiB3ZSBpbnZva2VkIGFueXRoaW5nIGVsc2UsIGEgcmVsY2FjaGUgZmx1c2gg Y291bGQgY2F1c2Ugb3VyIFNNZ3JGaWxlSGFuZGxlCiAgKiBhcmd1bWVudCB0byBiZWNvbWUg YSBkYW5nbGluZyBwb2ludGVyLgogICovCiB2b2lkCi1SZWxhdGlvbkNvcHlTdG9yYWdlKFNN Z3JSZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCi0JCQkJCUZvcmtOdW1iZXIgZm9y a051bSwgY2hhciByZWxwZXJzaXN0ZW5jZSkKK1JlbGF0aW9uQ29weVN0b3JhZ2UoU01nckZp bGVIYW5kbGUgc3JjLCBTTWdyRmlsZUhhbmRsZSBkc3QsCisJCQkJCWNoYXIgcmVscGVyc2lz dGVuY2UpCiB7CiAJUEdBbGlnbmVkQmxvY2sgYnVmOwogCVBhZ2UJCXBhZ2U7CkBAIC00NjYs NyArNDY5LDcgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdy UmVsYXRpb24gZHN0LAogCSAqIGl0IG5lZWRzIHRvIGJlIHN5bmNlZCB0byBkaXNrLgogCSAq LwogCWNvcHlpbmdfaW5pdGZvcmsgPSByZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5D RV9VTkxPR0dFRCAmJgotCQlmb3JrTnVtID09IElOSVRfRk9SS05VTTsKKwkJc3JjLT5zbWdy X2xvY2F0b3IuZm9ya251bSA9PSBJTklUX0ZPUktOVU07CiAKIAkvKgogCSAqIFdlIG5lZWQg dG8gbG9nIHRoZSBjb3BpZWQgZGF0YSBpbiBXQUwgaWZmIFdBTCBhcmNoaXZpbmcvc3RyZWFt aW5nIGlzCkBAIC00NzcsMTQgKzQ4MCwxNCBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JS ZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJdXNlX3dhbCA9IFhMb2dJc05lZWRl ZCgpICYmCiAJCShyZWxwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQg fHwgY29weWluZ19pbml0Zm9yayk7CiAKLQluYmxvY2tzID0gc21ncm5ibG9ja3Moc3JjLCBm b3JrTnVtKTsKKwluYmxvY2tzID0gc21ncm5ibG9ja3Moc3JjKTsKIAogCWZvciAoYmxrbm8g PSAwOyBibGtubyA8IG5ibG9ja3M7IGJsa25vKyspCiAJewogCQkvKiBJZiB3ZSBnb3QgYSBj YW5jZWwgc2lnbmFsIGR1cmluZyB0aGUgY29weSBvZiB0aGUgZGF0YSwgcXVpdCAqLwogCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCXNtZ3JyZWFkKHNyYywgZm9ya051bSwgYmxr bm8sIGJ1Zi5kYXRhKTsKKwkJc21ncnJlYWQoc3JjLCBibGtubywgYnVmLmRhdGEpOwogCiAJ CWlmICghUGFnZUlzVmVyaWZpZWRFeHRlbmRlZChwYWdlLCBibGtubywKIAkJCQkJCQkJCVBJ Vl9MT0dfV0FSTklORyB8IFBJVl9SRVBPUlRfU1RBVCkpCkBAIC00OTYsOSArNDk5LDcgQEAg UmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24gZHN0 LAogCQkJICogKGVycmNvbnRleHQgY2FsbGJhY2tzIHNob3VsZG4ndCBiZSByaXNraW5nIGFu eSBzdWNoIHRoaW5nLCBidXQKIAkJCSAqIHBlb3BsZSBoYXZlIGJlZW4ga25vd24gdG8gZm9y Z2V0IHRoYXQgcnVsZS4pCiAJCQkgKi8KLQkJCWNoYXIJICAgKnJlbHBhdGggPSByZWxwYXRo YmFja2VuZChzcmMtPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwKLQkJCQkJCQkJCQkJCSBzcmMt PnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkJCSBmb3JrTnVtKTsKKwkJCWNo YXIJICAgKnJlbHBhdGggPSBzbWdyZmlsZXBhdGgoc3JjLT5zbWdyX2xvY2F0b3IpOwogCiAJ CQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVE KSwKQEAgLTUxMiw3ICs1MTMsNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JSZWxhdGlv biBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJCSAqIHNwYWNlLgogCQkgKi8KIAkJaWYgKHVz ZV93YWwpCi0JCQlsb2dfbmV3cGFnZSgmZHN0LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIGZv cmtOdW0sIGJsa25vLCBwYWdlLCBmYWxzZSk7CisJCQlsb2dfbmV3cGFnZSgmZHN0LT5zbWdy X2xvY2F0b3IubG9jYXRvciwgZHN0LT5zbWdyX2xvY2F0b3IuZm9ya251bSwgYmxrbm8sIHBh Z2UsIGZhbHNlKTsKIAogCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIGJsa25vKTsK IApAQCAtNTIxLDcgKzUyMiw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9u IHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAkJICogbmVlZCBmb3Igc21nciB0byBzY2hlZHVs ZSBhbiBmc3luYyBmb3IgdGhpcyB3cml0ZTsgd2UnbGwgZG8gaXQKIAkJICogb3Vyc2VsdmVz IGJlbG93LgogCQkgKi8KLQkJc21ncmV4dGVuZChkc3QsIGZvcmtOdW0sIGJsa25vLCBidWYu ZGF0YSwgdHJ1ZSk7CisJCXNtZ3JleHRlbmQoZHN0LCBibGtubywgYnVmLmRhdGEsIHRydWUp OwogCX0KIAogCS8qCkBAIC01MzQsNyArNTM1LDcgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShT TWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24gZHN0LAogCSAqIHRoZXkgbWlnaHQgc3Rp bGwgbm90IGJlIG9uIGRpc2sgd2hlbiB0aGUgY3Jhc2ggb2NjdXJzLgogCSAqLwogCWlmICh1 c2Vfd2FsIHx8IGNvcHlpbmdfaW5pdGZvcmspCi0JCXNtZ3JpbW1lZHN5bmMoZHN0LCBmb3Jr TnVtKTsKKwkJc21ncmltbWVkc3luYyhkc3QpOwogfQogCiAvKgpAQCAtNjUzLDkgKzY1NCw5 IEBAIHNtZ3JEb1BlbmRpbmdEZWxldGVzKGJvb2wgaXNDb21taXQpCiAJUGVuZGluZ1JlbERl bGV0ZSAqcGVuZGluZzsKIAlQZW5kaW5nUmVsRGVsZXRlICpwcmV2OwogCVBlbmRpbmdSZWxE ZWxldGUgKm5leHQ7Ci0JaW50CQkJbnJlbHMgPSAwLAotCQkJCW1heHJlbHMgPSAwOwotCVNN Z3JSZWxhdGlvbiAqc3JlbHMgPSBOVUxMOworCWludAkJCW5sb2NhdG9ycyA9IDAsCisJCQkJ bWF4bG9jYXRvcnMgPSAwOworCVJlbEZpbGVMb2NhdG9yQmFja2VuZCAqbG9jYXRvcnMgPSBO VUxMOwogCiAJcHJldiA9IE5VTEw7CiAJZm9yIChwZW5kaW5nID0gcGVuZGluZ0RlbGV0ZXM7 IHBlbmRpbmcgIT0gTlVMTDsgcGVuZGluZyA9IG5leHQpCkBAIC02NzYsMjMgKzY3NywyMSBA QCBzbWdyRG9QZW5kaW5nRGVsZXRlcyhib29sIGlzQ29tbWl0KQogCQkJLyogZG8gZGVsZXRp b24gaWYgY2FsbGVkIGZvciAqLwogCQkJaWYgKHBlbmRpbmctPmF0Q29tbWl0ID09IGlzQ29t bWl0KQogCQkJewotCQkJCVNNZ3JSZWxhdGlvbiBzcmVsOwotCi0JCQkJc3JlbCA9IHNtZ3Jv cGVuKHBlbmRpbmctPnJsb2NhdG9yLCBwZW5kaW5nLT5iYWNrZW5kKTsKKwkJCQlSZWxGaWxl TG9jYXRvckJhY2tlbmQgcmxvY2F0b3IgPSB7IHBlbmRpbmctPnJsb2NhdG9yLCBwZW5kaW5n LT5iYWNrZW5kIH07CiAKIAkJCQkvKiBhbGxvY2F0ZSB0aGUgaW5pdGlhbCBhcnJheSwgb3Ig ZXh0ZW5kIGl0LCBpZiBuZWVkZWQgKi8KLQkJCQlpZiAobWF4cmVscyA9PSAwKQorCQkJCWlm IChtYXhsb2NhdG9ycyA9PSAwKQogCQkJCXsKLQkJCQkJbWF4cmVscyA9IDg7Ci0JCQkJCXNy ZWxzID0gcGFsbG9jKHNpemVvZihTTWdyUmVsYXRpb24pICogbWF4cmVscyk7CisJCQkJCW1h eGxvY2F0b3JzID0gODsKKwkJCQkJbG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9mKFJlbEZpbGVM b2NhdG9yQmFja2VuZCkgKiBtYXhsb2NhdG9ycyk7CiAJCQkJfQotCQkJCWVsc2UgaWYgKG1h eHJlbHMgPD0gbnJlbHMpCisJCQkJZWxzZSBpZiAobWF4bG9jYXRvcnMgPD0gbmxvY2F0b3Jz KQogCQkJCXsKLQkJCQkJbWF4cmVscyAqPSAyOwotCQkJCQlzcmVscyA9IHJlcGFsbG9jKHNy ZWxzLCBzaXplb2YoU01nclJlbGF0aW9uKSAqIG1heHJlbHMpOworCQkJCQltYXhsb2NhdG9y cyAqPSAyOworCQkJCQlsb2NhdG9ycyA9IHJlcGFsbG9jKGxvY2F0b3JzLCBzaXplb2YoUmVs RmlsZUxvY2F0b3JCYWNrZW5kKSAqIG1heGxvY2F0b3JzKTsKIAkJCQl9CiAKLQkJCQlzcmVs c1tucmVscysrXSA9IHNyZWw7CisJCQkJbG9jYXRvcnNbbmxvY2F0b3JzKytdID0gcmxvY2F0 b3I7CiAJCQl9CiAJCQkvKiBtdXN0IGV4cGxpY2l0bHkgZnJlZSB0aGUgbGlzdCBlbnRyeSAq LwogCQkJcGZyZWUocGVuZGluZyk7CkBAIC03MDAsMTUgKzY5OSw1OCBAQCBzbWdyRG9QZW5k aW5nRGVsZXRlcyhib29sIGlzQ29tbWl0KQogCQl9CiAJfQogCi0JaWYgKG5yZWxzID4gMCkK KwlpZiAobmxvY2F0b3JzID4gMCkKIAl7Ci0JCXNtZ3Jkb3VubGlua2FsbChzcmVscywgbnJl bHMsIGZhbHNlKTsKKwkJRm9ya051bWJlciBmb3Jrc1tNQVhfRk9SS05VTSArIDFdOworCisJ CWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJCQlmb3Jrc1tpXSA9 IGk7CisKKwkJLyoKKwkJICogR2V0IHJpZCBvZiBhbnkgcmVtYWluaW5nIGJ1ZmZlcnMgZm9y IHRoZSByZWxhdGlvbnMuICBidWZtZ3Igd2lsbCBqdXN0CisJCSAqIGRyb3AgdGhlbSB3aXRo b3V0IGJvdGhlcmluZyB0byB3cml0ZSB0aGUgY29udGVudHMuCisJCSAqLworCQlEcm9wUmVs YXRpb25zQWxsQnVmZmVycyhsb2NhdG9ycywgbmxvY2F0b3JzKTsKIAotCQlmb3IgKGludCBp ID0gMDsgaSA8IG5yZWxzOyBpKyspCi0JCQlzbWdyY2xvc2Uoc3JlbHNbaV0pOworCQlmb3Ig KGludCBpID0gMDsgaSA8IG5sb2NhdG9yczsgaSsrKQorCQkJc21ncnVubGlua19tdWx0aShs b2NhdG9yc1tpXS5sb2NhdG9yLCBsb2NhdG9yc1tpXS5iYWNrZW5kLCBmb3JrcywgTUFYX0ZP UktOVU0gKyAxLCBmYWxzZSk7CisJCXBmcmVlKGxvY2F0b3JzKTsKKwl9Cit9CisKKy8qCisg KiBEcm9wUmVsYXRpb25GaWxlcyAtLSBkcm9wIGZpbGVzIG9mIGFsbCBnaXZlbiByZWxhdGlv bnMKKyAqLwordm9pZAorRHJvcFJlbGF0aW9uRmlsZXMoUmVsRmlsZUxvY2F0b3IgKmRlbHJl bHMsIGludCBuZGVscmVscywgYm9vbCBpc1JlZG8pCit7CisJUmVsRmlsZUxvY2F0b3JCYWNr ZW5kICpsb2NhdG9yczsKKwlpbnQJCQlpOworCUZvcmtOdW1iZXIJYWxsX2ZvcmtzW01BWF9G T1JLTlVNICsgMV07CiAKLQkJcGZyZWUoc3JlbHMpOworCWxvY2F0b3JzID0gcGFsbG9jKHNp emVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbmRlbHJlbHMpOworCWZvciAoaSA9IDA7 IGkgPCBuZGVscmVsczsgaSsrKQorCXsKKwkJaWYgKGlzUmVkbykKKwkJeworCQkJZm9yIChp bnQgZm9yayA9IDA7IGZvcmsgPD0gTUFYX0ZPUktOVU07IGZvcmsrKykKKwkJCQlYTG9nRHJv cFJlbGF0aW9uKGRlbHJlbHNbaV0sIGZvcmspOworCQl9CisJCWxvY2F0b3JzW2ldLmxvY2F0 b3IgPSBkZWxyZWxzW2ldOworCQlsb2NhdG9yc1tpXS5iYWNrZW5kID0gSW52YWxpZEJhY2tl bmRJZDsKIAl9CisKKwkvKgorCSAqIEdldCByaWQgb2YgYW55IHJlbWFpbmluZyBidWZmZXJz IGZvciB0aGUgcmVsYXRpb25zLiAgYnVmbWdyIHdpbGwganVzdAorCSAqIGRyb3AgdGhlbSB3 aXRob3V0IGJvdGhlcmluZyB0byB3cml0ZSB0aGUgY29udGVudHMuCisJICovCisJRHJvcFJl bGF0aW9uc0FsbEJ1ZmZlcnMobG9jYXRvcnMsIG5kZWxyZWxzKTsKKworCWZvciAoaW50IGZv cmsgPSAwOyBmb3JrIDw9IE1BWF9GT1JLTlVNOyBmb3JrKyspCisJCWFsbF9mb3Jrc1tmb3Jr XSA9IGZvcms7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmRlbHJlbHM7IGkrKykKKwkJc21ncnVu bGlua19tdWx0aShsb2NhdG9yc1tpXS5sb2NhdG9yLCBsb2NhdG9yc1tpXS5iYWNrZW5kLCBh bGxfZm9ya3MsIE1BWF9GT1JLTlVNICsgMSwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC03MTgsOSAr NzYwLDkgQEAgdm9pZAogc21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wg aXNQYXJhbGxlbFdvcmtlcikKIHsKIAlQZW5kaW5nUmVsRGVsZXRlICpwZW5kaW5nOwotCWlu dAkJCW5yZWxzID0gMCwKLQkJCQltYXhyZWxzID0gMDsKLQlTTWdyUmVsYXRpb24gKnNyZWxz ID0gTlVMTDsKKwlpbnQJCQlubG9jYXRvcnMgPSAwLAorCQkJCW1heGxvY2F0b3JzID0gMDsK KwlSZWxGaWxlTG9jYXRvciAqbG9jYXRvcnMgPSBOVUxMOwogCUhBU0hfU0VRX1NUQVRVUyBz Y2FuOwogCVBlbmRpbmdSZWxTeW5jICpwZW5kaW5nc3luYzsKIApAQCAtNzU3LDkgKzc5OSw2 IEBAIHNtZ3JEb1BlbmRpbmdTeW5jcyhib29sIGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxX b3JrZXIpCiAJCUZvcmtOdW1iZXIJZm9yazsKIAkJQmxvY2tOdW1iZXIgbmJsb2Nrc1tNQVhf Rk9SS05VTSArIDFdOwogCQlCbG9ja051bWJlciB0b3RhbF9ibG9ja3MgPSAwOwotCQlTTWdy UmVsYXRpb24gc3JlbDsKLQotCQlzcmVsID0gc21ncm9wZW4ocGVuZGluZ3N5bmMtPnJsb2Nh dG9yLCBJbnZhbGlkQmFja2VuZElkKTsKIAogCQkvKgogCQkgKiBXZSBlbWl0IG5ld3BhZ2Ug V0FMIHJlY29yZHMgZm9yIHNtYWxsZXIgcmVsYXRpb25zLgpAQCAtNzczLDkgKzgxMiwxMiBA QCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0NvbW1pdCwgYm9vbCBpc1BhcmFsbGVsV29y a2VyKQogCQl7CiAJCQlmb3IgKGZvcmsgPSAwOyBmb3JrIDw9IE1BWF9GT1JLTlVNOyBmb3Jr KyspCiAJCQl7Ci0JCQkJaWYgKHNtZ3JleGlzdHMoc3JlbCwgZm9yaykpCisJCQkJU01nckZp bGVIYW5kbGUgc2ZpbGU7CisKKwkJCQlzZmlsZSA9IHNtZ3JvcGVuKHBlbmRpbmdzeW5jLT5y bG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9yayk7CisJCQkJaWYgKHNtZ3JleGlzdHMo c2ZpbGUpKQogCQkJCXsKLQkJCQkJQmxvY2tOdW1iZXIgbiA9IHNtZ3JuYmxvY2tzKHNyZWws IGZvcmspOworCQkJCQlCbG9ja051bWJlciBuID0gc21ncm5ibG9ja3Moc2ZpbGUpOwogCiAJ CQkJCS8qIHdlIHNob3VsZG4ndCBjb21lIGhlcmUgZm9yIHVubG9nZ2VkIHJlbGF0aW9ucyAq LwogCQkJCQlBc3NlcnQoZm9yayAhPSBJTklUX0ZPUktOVU0pOwpAQCAtODAzLDE4ICs4NDUs MTkgQEAgc21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNQYXJhbGxl bFdvcmtlcikKIAkJCXRvdGFsX2Jsb2NrcyAqIEJMQ0tTWiAvIDEwMjQgPj0gd2FsX3NraXBf dGhyZXNob2xkKQogCQl7CiAJCQkvKiBhbGxvY2F0ZSB0aGUgaW5pdGlhbCBhcnJheSwgb3Ig ZXh0ZW5kIGl0LCBpZiBuZWVkZWQgKi8KLQkJCWlmIChtYXhyZWxzID09IDApCisJCQlpZiAo bWF4bG9jYXRvcnMgPT0gMCkKIAkJCXsKLQkJCQltYXhyZWxzID0gODsKLQkJCQlzcmVscyA9 IHBhbGxvYyhzaXplb2YoU01nclJlbGF0aW9uKSAqIG1heHJlbHMpOworCQkJCW1heGxvY2F0 b3JzID0gODsKKwkJCQlsb2NhdG9ycyA9IHBhbGxvYyhzaXplb2YoUmVsRmlsZUxvY2F0b3JC YWNrZW5kKSAqIG1heGxvY2F0b3JzKTsKIAkJCX0KLQkJCWVsc2UgaWYgKG1heHJlbHMgPD0g bnJlbHMpCisJCQllbHNlIGlmIChtYXhsb2NhdG9ycyA8PSBubG9jYXRvcnMpCiAJCQl7Ci0J CQkJbWF4cmVscyAqPSAyOwotCQkJCXNyZWxzID0gcmVwYWxsb2Moc3JlbHMsIHNpemVvZihT TWdyUmVsYXRpb24pICogbWF4cmVscyk7CisJCQkJbWF4bG9jYXRvcnMgKj0gMjsKKwkJCQls b2NhdG9ycyA9IHJlcGFsbG9jKGxvY2F0b3JzLCBzaXplb2YoUmVsRmlsZUxvY2F0b3JCYWNr ZW5kKSAqIG1heGxvY2F0b3JzKTsKIAkJCX0KIAotCQkJc3JlbHNbbnJlbHMrK10gPSBzcmVs OworCQkJbG9jYXRvcnNbbmxvY2F0b3JzXSA9IHBlbmRpbmdzeW5jLT5ybG9jYXRvcjsKKwkJ CW5sb2NhdG9ycysrOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtODMzLDcgKzg3Niw3IEBAIHNt Z3JEb1BlbmRpbmdTeW5jcyhib29sIGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxXb3JrZXIp CiAJCQkJICogcGFnZSBpbmNsdWRpbmcgYW55IHVudXNlZCBzcGFjZS4gIFJlYWRCdWZmZXJF eHRlbmRlZCgpCiAJCQkJICogY291bnRzIHNvbWUgcGdzdGF0IGV2ZW50czsgdW5mb3J0dW5h dGVseSwgd2UgZGlzY2FyZCB0aGVtLgogCQkJCSAqLwotCQkJCXJlbCA9IENyZWF0ZUZha2VS ZWxjYWNoZUVudHJ5KHNyZWwtPnNtZ3JfcmxvY2F0b3IubG9jYXRvcik7CisJCQkJcmVsID0g Q3JlYXRlRmFrZVJlbGNhY2hlRW50cnkocGVuZGluZ3N5bmMtPnJsb2NhdG9yKTsKIAkJCQls b2dfbmV3cGFnZV9yYW5nZShyZWwsIGZvcmssIDAsIG4sIGZhbHNlKTsKIAkJCQlGcmVlRmFr ZVJlbGNhY2hlRW50cnkocmVsKTsKIAkJCX0KQEAgLTg0MiwxMSArODg1LDIwIEBAIHNtZ3JE b1BlbmRpbmdTeW5jcyhib29sIGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxXb3JrZXIpCiAK IAlwZW5kaW5nU3luY0hhc2ggPSBOVUxMOwogCi0JaWYgKG5yZWxzID4gMCkKKwlGbHVzaFJl bGF0aW9uc0FsbEJ1ZmZlcnMobG9jYXRvcnMsIG5sb2NhdG9ycyk7CisKKwlmb3IgKGludCBp ID0gMDsgaSA8IG5sb2NhdG9yczsgaSsrKQogCXsKLQkJc21ncmRvc3luY2FsbChzcmVscywg bnJlbHMpOwotCQlwZnJlZShzcmVscyk7CisJCWZvciAoaW50IGZvcmsgPSAwOyBmb3JrIDw9 IE1BWF9GT1JLTlVNOyBmb3JrKyspCisJCXsKKwkJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0g c21ncm9wZW4obG9jYXRvcnNbaV0sIEludmFsaWRCYWNrZW5kSWQsIGZvcmspOworCisJCQlp ZiAoc21ncmV4aXN0cyhzZmlsZSkpCisJCQkJc21ncmltbWVkc3luYyhzZmlsZSk7CisJCX0K IAl9CisJaWYgKGxvY2F0b3JzICE9IE5VTEwpCisJCXBmcmVlKGxvY2F0b3JzKTsKIH0KIAog LyoKQEAgLTk2NiwyMiArMTAxOCwyMiBAQCBzbWdyX3JlZG8oWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpCiAJaWYgKGluZm8gPT0gWExPR19TTUdSX0NSRUFURSkKIAl7CiAJCXhsX3NtZ3Jf Y3JlYXRlICp4bHJlYyA9ICh4bF9zbWdyX2NyZWF0ZSAqKSBYTG9nUmVjR2V0RGF0YShyZWNv cmQpOwotCQlTTWdyUmVsYXRpb24gcmVsbjsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAK LQkJcmVsbiA9IHNtZ3JvcGVuKHhscmVjLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7 Ci0JCXNtZ3JjcmVhdGUocmVsbiwgeGxyZWMtPmZvcmtOdW0sIHRydWUpOworCQlzZmlsZSA9 IHNtZ3JvcGVuKHhscmVjLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgeGxyZWMtPmZv cmtOdW0pOworCQlzbWdyY3JlYXRlKHNmaWxlLCB0cnVlKTsKIAl9CiAJZWxzZSBpZiAoaW5m byA9PSBYTE9HX1NNR1JfVFJVTkNBVEUpCiAJewogCQl4bF9zbWdyX3RydW5jYXRlICp4bHJl YyA9ICh4bF9zbWdyX3RydW5jYXRlICopIFhMb2dSZWNHZXREYXRhKHJlY29yZCk7Ci0JCVNN Z3JSZWxhdGlvbiByZWxuOworCQlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAkJUmVsYXRpb24J cmVsOwogCQlGb3JrTnVtYmVyCWZvcmtzW01BWF9GT1JLTlVNXTsKIAkJQmxvY2tOdW1iZXIg YmxvY2tzW01BWF9GT1JLTlVNXTsKIAkJaW50CQkJbmZvcmtzID0gMDsKIAkJYm9vbAkJbmVl ZF9mc21fdmFjdXVtID0gZmFsc2U7CiAKLQkJcmVsbiA9IHNtZ3JvcGVuKHhscmVjLT5ybG9j YXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CisJCXNmaWxlID0gc21ncm9wZW4oeGxyZWMtPnJs b2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOwogCiAJCS8qCiAJCSAq IEZvcmNpYmx5IGNyZWF0ZSByZWxhdGlvbiBpZiBpdCBkb2Vzbid0IGV4aXN0ICh3aGljaCBz dWdnZXN0cyB0aGF0CkBAIC05ODksNyArMTA0MSw3IEBAIHNtZ3JfcmVkbyhYTG9nUmVhZGVy U3RhdGUgKnJlY29yZCkKIAkJICogWExvZ1JlYWRCdWZmZXJGb3JSZWRvLCB3ZSBwcmVmZXIg dG8gcmVjcmVhdGUgdGhlIHJlbCBhbmQgcmVwbGF5IHRoZQogCQkgKiBsb2cgYXMgYmVzdCB3 ZSBjYW4gdW50aWwgdGhlIGRyb3AgaXMgc2Vlbi4KIAkJICovCi0JCXNtZ3JjcmVhdGUocmVs biwgTUFJTl9GT1JLTlVNLCB0cnVlKTsKKwkJc21ncmNyZWF0ZShzZmlsZSwgdHJ1ZSk7CiAK IAkJLyoKIAkJICogQmVmb3JlIHdlIHBlcmZvcm0gdGhlIHRydW5jYXRpb24sIHVwZGF0ZSBt aW5pbXVtIHJlY292ZXJ5IHBvaW50IHRvCkBAIC0xMDIyLDggKzEwNzQsMTAgQEAgc21ncl9y ZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkvKiBQcmVwYXJlIGZvciB0cnVuY2F0 aW9uIG9mIEZTTSBhbmQgVk0gdG9vICovCiAJCXJlbCA9IENyZWF0ZUZha2VSZWxjYWNoZUVu dHJ5KHhscmVjLT5ybG9jYXRvcik7CiAKKwkJRHJvcFJlbGF0aW9uQnVmZmVycyh4bHJlYy0+ cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtzLCBuZm9ya3MsIGJsb2Nrcyk7CisK IAkJaWYgKCh4bHJlYy0+ZmxhZ3MgJiBTTUdSX1RSVU5DQVRFX0ZTTSkgIT0gMCAmJgotCQkJ c21ncmV4aXN0cyhyZWxuLCBGU01fRk9SS05VTSkpCisJCQlzbWdyZXhpc3RzKHNtZ3JvcGVu KHhscmVjLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgRlNNX0ZPUktOVU0pKSkKIAkJ ewogCQkJYmxvY2tzW25mb3Jrc10gPSBGcmVlU3BhY2VNYXBQcmVwYXJlVHJ1bmNhdGVSZWwo cmVsLCB4bHJlYy0+Ymxrbm8pOwogCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibG9ja3Nb bmZvcmtzXSkpCkBAIC0xMDM0LDcgKzEwODgsNyBAQCBzbWdyX3JlZG8oWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQpCiAJCQl9CiAJCX0KIAkJaWYgKCh4bHJlYy0+ZmxhZ3MgJiBTTUdSX1RS VU5DQVRFX1ZNKSAhPSAwICYmCi0JCQlzbWdyZXhpc3RzKHJlbG4sIFZJU0lCSUxJVFlNQVBf Rk9SS05VTSkpCisJCQlzbWdyZXhpc3RzKHNtZ3JvcGVuKHhscmVjLT5ybG9jYXRvciwgSW52 YWxpZEJhY2tlbmRJZCwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSkpCiAJCXsKIAkJCWJsb2Nr c1tuZm9ya3NdID0gdmlzaWJpbGl0eW1hcF9wcmVwYXJlX3RydW5jYXRlKHJlbCwgeGxyZWMt PmJsa25vKTsKIAkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxvY2tzW25mb3Jrc10pKQpA QCAtMTA0Niw3ICsxMTAwLDEwIEBAIHNtZ3JfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCkKIAogCQkvKiBEbyB0aGUgcmVhbCB3b3JrIHRvIHRydW5jYXRlIHJlbGF0aW9uIGZvcmtz ICovCiAJCWlmIChuZm9ya3MgPiAwKQotCQkJc21ncnRydW5jYXRlKHJlbG4sIGZvcmtzLCBu Zm9ya3MsIGJsb2Nrcyk7CisJCXsKKwkJCURyb3BSZWxhdGlvbkJ1ZmZlcnMoeGxyZWMtPnJs b2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCQkJ c21ncnRydW5jYXRlX211bHRpKHhscmVjLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwg Zm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwkJfQogCiAJCS8qCiAJCSAqIFVwZGF0ZSB1cHBl ci1sZXZlbCBGU00gcGFnZXMgdG8gYWNjb3VudCBmb3IgdGhlIHRydW5jYXRpb24uIFRoaXMg aXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYwppbmRleCAwOTlkMzY5YjJmNC4uODBk NTVjMTM3NWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMu YworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKQEAgLTI4MCw3ICsy ODAsNyBAQCBTY2FuU291cmNlRGF0YWJhc2VQZ0NsYXNzKE9pZCB0YmlkLCBPaWQgZGJpZCwg Y2hhciAqc3JjcGF0aCkKIAkgKiBpbnZhbGlkYXRpb25zLgogCSAqLwogCXJlbCA9IENyZWF0 ZUZha2VSZWxjYWNoZUVudHJ5KHJsb2NhdG9yKTsKLQluYmxvY2tzID0gc21ncm5ibG9ja3Mo UmVsYXRpb25HZXRTbWdyKHJlbCksIE1BSU5fRk9SS05VTSk7CisJbmJsb2NrcyA9IHNtZ3Ju YmxvY2tzKFJlbGF0aW9uR2V0U21ncihyZWwsIE1BSU5fRk9SS05VTSkpOwogCUZyZWVGYWtl UmVsY2FjaGVFbnRyeShyZWwpOwogCiAJLyogVXNlIGEgYnVmZmVyIGFjY2VzcyBzdHJhdGVn eSBzaW5jZSB0aGlzIGlzIGEgYnVsayByZWFkIG9wZXJhdGlvbi4gKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9zZXF1ZW5jZS5jCmluZGV4IGIwYjIxMTg5MWMzLi4wODg4YjUxMDdiMyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0zNDUsMTQgKzM0NSwxNCBAQCBmaWxsX3NlcV93aXRo X2RhdGEoUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwbGUpCiAKIAlpZiAocmVsLT5yZF9y ZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEKQogCXsKLQkJ U01nclJlbGF0aW9uIHNyZWw7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCi0JCXNyZWwg PSBzbWdyb3BlbihyZWwtPnJkX2xvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwotCQlzbWdy Y3JlYXRlKHNyZWwsIElOSVRfRk9SS05VTSwgZmFsc2UpOworCQlzZmlsZSA9IHNtZ3JvcGVu KHJlbC0+cmRfbG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgSU5JVF9GT1JLTlVNKTsKKwkJ c21ncmNyZWF0ZShzZmlsZSwgZmFsc2UpOwogCQlsb2dfc21ncmNyZWF0ZSgmcmVsLT5yZF9s b2NhdG9yLCBJTklUX0ZPUktOVU0pOwogCQlmaWxsX3NlcV9mb3JrX3dpdGhfZGF0YShyZWws IHR1cGxlLCBJTklUX0ZPUktOVU0pOwogCQlGbHVzaFJlbGF0aW9uQnVmZmVycyhyZWwpOwot CQlzbWdyY2xvc2Uoc3JlbCk7CisJCXNtZ3JjbG9zZShzZmlsZSk7CiAJfQogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDdmYmVlMGMxZjcxLi41MTI4NzZhYTk1MyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTE0NTkzLDkgKzE0NTkzLDcgQEAg QWx0ZXJUYWJsZU1vdmVBbGwoQWx0ZXJUYWJsZU1vdmVBbGxTdG10ICpzdG10KQogc3RhdGlj IHZvaWQKIGluZGV4X2NvcHlfZGF0YShSZWxhdGlvbiByZWwsIFJlbEZpbGVMb2NhdG9yIG5l d3Jsb2NhdG9yKQogewotCVNNZ3JSZWxhdGlvbiBkc3RyZWw7Ci0KLQlkc3RyZWwgPSBzbWdy b3BlbihuZXdybG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kKTsKKwlTTWdyRmlsZUhhbmRsZSBk c3RtYWluOwogCiAJLyoKIAkgKiBTaW5jZSB3ZSBjb3B5IHRoZSBmaWxlIGRpcmVjdGx5IHdp dGhvdXQgbG9va2luZyBhdCB0aGUgc2hhcmVkIGJ1ZmZlcnMsCkBAIC0xNDYxNSwxNiArMTQ2 MTMsMjAgQEAgaW5kZXhfY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgUmVsRmlsZUxvY2F0b3Ig bmV3cmxvY2F0b3IpCiAJUmVsYXRpb25DcmVhdGVTdG9yYWdlKG5ld3Jsb2NhdG9yLCByZWwt PnJkX3JlbC0+cmVscGVyc2lzdGVuY2UsIHRydWUpOwogCiAJLyogY29weSBtYWluIGZvcmsg Ki8KLQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwpLCBkc3RyZWws IE1BSU5fRk9SS05VTSwKKwlkc3RtYWluID0gc21ncm9wZW4obmV3cmxvY2F0b3IsIHJlbC0+ cmRfYmFja2VuZCwgTUFJTl9GT1JLTlVNKTsKKwlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0 aW9uR2V0U21ncihyZWwsIE1BSU5fRk9SS05VTSksIGRzdG1haW4sCiAJCQkJCQlyZWwtPnJk X3JlbC0+cmVscGVyc2lzdGVuY2UpOwogCiAJLyogY29weSB0aG9zZSBleHRyYSBmb3JrcyB0 aGF0IGV4aXN0ICovCiAJZm9yIChGb3JrTnVtYmVyIGZvcmtOdW0gPSBNQUlOX0ZPUktOVU0g KyAxOwogCQkgZm9ya051bSA8PSBNQVhfRk9SS05VTTsgZm9ya051bSsrKQogCXsKLQkJaWYg KHNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIGZvcmtOdW0pKQorCQlpZiAoc21n cmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtKSkpCiAJCXsKLQkJCXNtZ3Jj cmVhdGUoZHN0cmVsLCBmb3JrTnVtLCBmYWxzZSk7CisJCQlTTWdyRmlsZUhhbmRsZSBzcmNf Zm9yayA9IFJlbGF0aW9uR2V0U21ncihyZWwsIGZvcmtOdW0pOworCQkJU01nckZpbGVIYW5k bGUgZHN0X2ZvcmsgPSBzbWdyb3BlbihuZXdybG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBm b3JrTnVtKTsKKworCQkJc21ncmNyZWF0ZShkc3RfZm9yaywgZmFsc2UpOwogCiAJCQkvKgog CQkJICogV0FMIGxvZyBjcmVhdGlvbiBpZiB0aGUgcmVsYXRpb24gaXMgcGVyc2lzdGVudCwg b3IgdGhpcyBpcyB0aGUKQEAgLTE0NjM0LDE0ICsxNDYzNiwxNSBAQCBpbmRleF9jb3B5X2Rh dGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRvcikKIAkJCQkocmVs LT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEICYm CiAJCQkJIGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNKSkKIAkJCQlsb2dfc21ncmNyZWF0ZSgm bmV3cmxvY2F0b3IsIGZvcmtOdW0pOwotCQkJUmVsYXRpb25Db3B5U3RvcmFnZShSZWxhdGlv bkdldFNtZ3IocmVsKSwgZHN0cmVsLCBmb3JrTnVtLAorCQkJUmVsYXRpb25Db3B5U3RvcmFn ZShzcmNfZm9yaywgZHN0X2ZvcmssCiAJCQkJCQkJCXJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0 ZW5jZSk7CisJCQlzbWdyY2xvc2UoZHN0X2ZvcmspOwogCQl9CiAJfQogCiAJLyogZHJvcCBv bGQgcmVsYXRpb24sIGFuZCBjbG9zZSBuZXcgb25lICovCiAJUmVsYXRpb25Ecm9wU3RvcmFn ZShyZWwpOwotCXNtZ3JjbG9zZShkc3RyZWwpOworCXNtZ3JjbG9zZShkc3RtYWluKTsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggYjc0ODhiNWQ4 OWUuLjJiYTc1ZjY3NmFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtMTE3LDE5ICsxMTcsNiBAQCB0eXBlZGVmIHN0cnVjdCBDa3B0VHNTdGF0dXMKIAlpbnQJ CQlpbmRleDsKIH0gQ2twdFRzU3RhdHVzOwogCi0vKgotICogVHlwZSBmb3IgYXJyYXkgdXNl ZCB0byBzb3J0IFNNZ3JSZWxhdGlvbnMKLSAqCi0gKiBGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZl cnMgc2hhcmVzIHRoZSBzYW1lIGNvbXBhcmF0b3IgZnVuY3Rpb24gd2l0aAotICogRHJvcFJl bGF0aW9uc0FsbEJ1ZmZlcnMuIFBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3QgYW5kIFJlbEZpbGVM b2NhdG9yIG11c3QgYmUKLSAqIGNvbXBhdGlibGUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IFNN Z3JTb3J0QXJyYXkKLXsKLQlSZWxGaWxlTG9jYXRvciBybG9jYXRvcjsJLyogVGhpcyBtdXN0 IGJlIHRoZSBmaXJzdCBtZW1iZXIgKi8KLQlTTWdyUmVsYXRpb24gc3JlbDsKLX0gU01nclNv cnRBcnJheTsKLQogLyogR1VDIHZhcmlhYmxlcyAqLwogYm9vbAkJemVyb19kYW1hZ2VkX3Bh Z2VzID0gZmFsc2U7CiBpbnQJCQliZ3dyaXRlcl9scnVfbWF4cGFnZXMgPSAxMDA7CkBAIC00 NTksOCArNDQ2LDggQEAgRm9yZ2V0UHJpdmF0ZVJlZkNvdW50RW50cnkoUHJpdmF0ZVJlZkNv dW50RW50cnkgKnJlZikKICkKIAogCi1zdGF0aWMgQnVmZmVyIFJlYWRCdWZmZXJfY29tbW9u KFNNZ3JSZWxhdGlvbiByZWxuLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAotCQkJCQkJCQlGb3Jr TnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAorc3RhdGljIEJ1ZmZlciBS ZWFkQnVmZmVyX2NvbW1vbihTTWdyRmlsZUhhbmRsZSBzZmlsZSwgY2hhciByZWxwZXJzaXN0 ZW5jZSwKKwkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJCQkJCQkJCVJlYWRCdWZm ZXJNb2RlIG1vZGUsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQli b29sICpoaXQpOwogc3RhdGljIGJvb2wgUGluQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3kpOwpAQCAtNDc2LDEzICs0NjMsMTIgQEAgc3Rh dGljIHZvaWQgVGVybWluYXRlQnVmZmVySU8oQnVmZmVyRGVzYyAqYnVmLCBib29sIGNsZWFy X2RpcnR5LAogCQkJCQkJCSAgdWludDMyIHNldF9mbGFnX2JpdHMpOwogc3RhdGljIHZvaWQg c2hhcmVkX2J1ZmZlcl93cml0ZV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwogc3RhdGlj IHZvaWQgbG9jYWxfYnVmZmVyX3dyaXRlX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7Ci1z dGF0aWMgQnVmZmVyRGVzYyAqQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsCitzdGF0 aWMgQnVmZmVyRGVzYyAqQnVmZmVyQWxsb2MoU01nckZpbGVIYW5kbGUgc21nciwKIAkJCQkJ CQkgICBjaGFyIHJlbHBlcnNpc3RlbmNlLAotCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya051 bSwKIAkJCQkJCQkgICBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkgICBCdWZmZXJB Y2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQkgICBib29sICpmb3VuZFB0cik7Ci1z dGF0aWMgdm9pZCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiBy ZWxuKTsKK3N0YXRpYyB2b2lkIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nckZp bGVIYW5kbGUgc2ZpbGUpOwogc3RhdGljIHZvaWQgRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZl cnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsCiAJCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZv cmtOdW0sCiAJCQkJCQkJCQkgICBCbG9ja051bWJlciBuRm9ya0Jsb2NrLApAQCAtNTAyLDkg KzQ4OCw3IEBAIHN0YXRpYyBpbnQJdHNfY2twdF9wcm9ncmVzc19jb21wYXJhdG9yKERhdHVt IGEsIERhdHVtIGIsIHZvaWQgKmFyZyk7CiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBQcmVmZXRj aEJ1ZmZlcigpIGZvciBzaGFyZWQgYnVmZmVycy4KICAqLwogUHJlZmV0Y2hCdWZmZXJSZXN1 bHQKLVByZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sCi0JCQkJ CSBGb3JrTnVtYmVyIGZvcmtOdW0sCi0JCQkJCSBCbG9ja051bWJlciBibG9ja051bSkKK1By ZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBi bG9ja051bSkKIHsKIAlQcmVmZXRjaEJ1ZmZlclJlc3VsdCByZXN1bHQgPSB7SW52YWxpZEJ1 ZmZlciwgZmFsc2V9OwogCUJ1ZmZlclRhZwluZXdUYWc7CQkJLyogaWRlbnRpdHkgb2YgcmVx dWVzdGVkIGJsb2NrICovCkBAIC01MTUsOCArNDk5LDggQEAgUHJlZmV0Y2hTaGFyZWRCdWZm ZXIoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwKIAlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlk KGJsb2NrTnVtKSk7CiAKIAkvKiBjcmVhdGUgYSB0YWcgc28gd2UgY2FuIGxvb2t1cCB0aGUg YnVmZmVyICovCi0JSU5JVF9CVUZGRVJUQUcobmV3VGFnLCBzbWdyX3JlbG4tPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvciwKLQkJCQkgICBmb3JrTnVtLCBibG9ja051bSk7CisJSU5JVF9CVUZG RVJUQUcobmV3VGFnLCBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IsCisJCQkJICAgc2Zp bGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051bSk7CiAKIAkvKiBkZXRlcm1pbmUg aXRzIGhhc2ggY29kZSBhbmQgcGFydGl0aW9uIGxvY2sgSUQgKi8KIAluZXdIYXNoID0gQnVm VGFibGVIYXNoQ29kZSgmbmV3VGFnKTsKQEAgLTUzNSw3ICs1MTksNyBAQCBQcmVmZXRjaFNo YXJlZEJ1ZmZlcihTTWdyUmVsYXRpb24gc21ncl9yZWxuLAogCQkgKiBUcnkgdG8gaW5pdGlh dGUgYW4gYXN5bmNocm9ub3VzIHJlYWQuICBUaGlzIHJldHVybnMgZmFsc2UgaW4KIAkJICog cmVjb3ZlcnkgaWYgdGhlIHJlbGF0aW9uIGZpbGUgZG9lc24ndCBleGlzdC4KIAkJICovCi0J CWlmIChzbWdycHJlZmV0Y2goc21ncl9yZWxuLCBmb3JrTnVtLCBibG9ja051bSkpCisJCWlm IChzbWdycHJlZmV0Y2goc2ZpbGUsIGJsb2NrTnVtKSkKIAkJCXJlc3VsdC5pbml0aWF0ZWRf aW8gPSB0cnVlOwogI2VuZGlmCQkJCQkJCS8qIFVTRV9QUkVGRVRDSCAqLwogCX0KQEAgLTYw MywxMiArNTg3LDEyIEBAIFByZWZldGNoQnVmZmVyKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCiAJCQkJCSBlcnJtc2coImNhbm5v dCBhY2Nlc3MgdGVtcG9yYXJ5IHRhYmxlcyBvZiBvdGhlciBzZXNzaW9ucyIpKSk7CiAKIAkJ LyogcGFzcyBpdCBvZmYgdG8gbG9jYWxidWYuYyAqLwotCQlyZXR1cm4gUHJlZmV0Y2hMb2Nh bEJ1ZmZlcihSZWxhdGlvbkdldFNtZ3IocmVsbiksIGZvcmtOdW0sIGJsb2NrTnVtKTsKKwkJ cmV0dXJuIFByZWZldGNoTG9jYWxCdWZmZXIoUmVsYXRpb25HZXRTbWdyKHJlbG4sIGZvcmtO dW0pLCBibG9ja051bSk7CiAJfQogCWVsc2UKIAl7CiAJCS8qIHBhc3MgaXQgdG8gdGhlIHNo YXJlZCBidWZmZXIgdmVyc2lvbiAqLwotCQlyZXR1cm4gUHJlZmV0Y2hTaGFyZWRCdWZmZXIo UmVsYXRpb25HZXRTbWdyKHJlbG4pLCBmb3JrTnVtLCBibG9ja051bSk7CisJCXJldHVybiBQ cmVmZXRjaFNoYXJlZEJ1ZmZlcihSZWxhdGlvbkdldFNtZ3IocmVsbiwgZm9ya051bSksIGJs b2NrTnVtKTsKIAl9CiB9CiAKQEAgLTc3Nyw4ICs3NjEsOSBAQCBSZWFkQnVmZmVyRXh0ZW5k ZWQoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9j a051bSwKIAkgKiBtaXNzLgogCSAqLwogCXBnc3RhdF9jb3VudF9idWZmZXJfcmVhZChyZWxu KTsKLQlidWYgPSBSZWFkQnVmZmVyX2NvbW1vbihSZWxhdGlvbkdldFNtZ3IocmVsbiksIHJl bG4tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UsCi0JCQkJCQkJZm9ya051bSwgYmxvY2tOdW0s IG1vZGUsIHN0cmF0ZWd5LCAmaGl0KTsKKwlidWYgPSBSZWFkQnVmZmVyX2NvbW1vbihSZWxh dGlvbkdldFNtZ3IocmVsbiwgZm9ya051bSksCisJCQkJCQkJcmVsbi0+cmRfcmVsLT5yZWxw ZXJzaXN0ZW5jZSwKKwkJCQkJCQlibG9ja051bSwgbW9kZSwgc3RyYXRlZ3ksICZoaXQpOwog CWlmIChoaXQpCiAJCXBnc3RhdF9jb3VudF9idWZmZXJfaGl0KHJlbG4pOwogCXJldHVybiBi dWY7CkBAIC04MDIsMTAgKzc4NywxMCBAQCBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiB7CiAJYm9vbAkJ aGl0OwogCi0JU01nclJlbGF0aW9uIHNtZ3IgPSBzbWdyb3BlbihybG9jYXRvciwgSW52YWxp ZEJhY2tlbmRJZCk7CisJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBzbWdyb3BlbihybG9jYXRv ciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya051bSk7CiAKLQlyZXR1cm4gUmVhZEJ1ZmZlcl9j b21tb24oc21nciwgcGVybWFuZW50ID8gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UIDoKLQkJ CQkJCQkgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQsIGZvcmtOdW0sIGJsb2NrTnVtLAorCXJl dHVybiBSZWFkQnVmZmVyX2NvbW1vbihzZmlsZSwgcGVybWFuZW50ID8gUkVMUEVSU0lTVEVO Q0VfUEVSTUFORU5UIDoKKwkJCQkJCQkgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQsIGJsb2Nr TnVtLAogCQkJCQkJCSBtb2RlLCBzdHJhdGVneSwgJmhpdCk7CiB9CiAKQEAgLTgxNiw3ICs4 MDEsNyBAQCBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKFJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAgKiAqaGl0IGlzIHNldCB0byB0cnVlIGlmIHRo ZSByZXF1ZXN0IHdhcyBzYXRpc2ZpZWQgZnJvbSBzaGFyZWQgYnVmZmVyIGNhY2hlLgogICov CiBzdGF0aWMgQnVmZmVyCi1SZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwg Y2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAorUmVhZEJ1ZmZlcl9j b21tb24oU01nckZpbGVIYW5kbGUgc2ZpbGUsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJCQkJ ICBCbG9ja051bWJlciBibG9ja051bSwgUmVhZEJ1ZmZlck1vZGUgbW9kZSwKIAkJCQkgIEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBib29sICpoaXQpCiB7CkBAIC04MjQsNyAr ODA5LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVs cGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAlCbG9jawkJYnVmQmxvY2s7CiAJ Ym9vbAkJZm91bmQ7CiAJYm9vbAkJaXNFeHRlbmQ7Ci0JYm9vbAkJaXNMb2NhbEJ1ZiA9IFNt Z3JJc1RlbXAoc21ncik7CisJYm9vbAkJaXNMb2NhbEJ1ZiA9IFNtZ3JJc1RlbXAoc2ZpbGUp OwogCiAJKmhpdCA9IGZhbHNlOwogCkBAIC04MzMsMjkgKzgxOCwzMCBAQCBSZWFkQnVmZmVy X2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051 bWJlciBmb3JrTnVtLAogCiAJaXNFeHRlbmQgPSAoYmxvY2tOdW0gPT0gUF9ORVcpOwogCi0J VFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9TVEFSVChmb3JrTnVtLCBibG9ja051bSwK LQkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJ CQkJCQkgICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkg ICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJICAg c21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAorCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfU1RBUlQoc21nci0+c21ncl9sb2NhdG9yLmZvcmtOdW0sCisJCQkJCQkJCQkgICBi bG9ja051bSwKKwkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnNwY09p ZCwKKwkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJ CQkJCQkJICAgc21nci0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJ CQkJICAgc21nci0+c21ncl9sb2NhdG9yLmJhY2tlbmQsCiAJCQkJCQkJCQkgICBpc0V4dGVu ZCk7CiAKIAkvKiBTdWJzdGl0dXRlIHByb3BlciBibG9jayBudW1iZXIgaWYgY2FsbGVyIGFz a2VkIGZvciBQX05FVyAqLwogCWlmIChpc0V4dGVuZCkKIAl7Ci0JCWJsb2NrTnVtID0gc21n cm5ibG9ja3Moc21nciwgZm9ya051bSk7CisJCWJsb2NrTnVtID0gc21ncm5ibG9ja3Moc2Zp bGUpOwogCQkvKiBGYWlsIGlmIHJlbGF0aW9uIGlzIGFscmVhZHkgYXQgbWF4aW11bSBwb3Nz aWJsZSBsZW5ndGggKi8KIAkJaWYgKGJsb2NrTnVtID09IFBfTkVXKQogCQkJZXJlcG9ydChF UlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwK IAkJCQkJIGVycm1zZygiY2Fubm90IGV4dGVuZCByZWxhdGlvbiAlcyBiZXlvbmQgJXUgYmxv Y2tzIiwKLQkJCQkJCQlyZWxwYXRoKHNtZ3ItPnNtZ3JfcmxvY2F0b3IsIGZvcmtOdW0pLAor CQkJCQkJCXNtZ3JmaWxlcGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKSwKIAkJCQkJCQlQX05F VykpKTsKIAl9CiAKIAlpZiAoaXNMb2NhbEJ1ZikKIAl7Ci0JCWJ1ZkhkciA9IExvY2FsQnVm ZmVyQWxsb2Moc21nciwgZm9ya051bSwgYmxvY2tOdW0sICZmb3VuZCk7CisJCWJ1ZkhkciA9 IExvY2FsQnVmZmVyQWxsb2Moc2ZpbGUsIGJsb2NrTnVtLCAmZm91bmQpOwogCQlpZiAoZm91 bmQpCiAJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0Kys7CiAJCWVsc2UgaWYgKGlz RXh0ZW5kKQpAQCAtODcwLDcgKzg1Niw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxh dGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJ CSAqIGxvb2t1cCB0aGUgYnVmZmVyLiAgSU9fSU5fUFJPR1JFU1MgaXMgc2V0IGlmIHRoZSBy ZXF1ZXN0ZWQgYmxvY2sgaXMKIAkJICogbm90IGN1cnJlbnRseSBpbiBtZW1vcnkuCiAJCSAq LwotCQlidWZIZHIgPSBCdWZmZXJBbGxvYyhzbWdyLCByZWxwZXJzaXN0ZW5jZSwgZm9ya051 bSwgYmxvY2tOdW0sCisJCWJ1ZkhkciA9IEJ1ZmZlckFsbG9jKHNmaWxlLCByZWxwZXJzaXN0 ZW5jZSwgYmxvY2tOdW0sCiAJCQkJCQkJIHN0cmF0ZWd5LCAmZm91bmQpOwogCQlpZiAoZm91 bmQpCiAJCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOwpAQCAtODk1LDExICs4 ODEsMTIgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVs cGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCWlmIChWYWN1dW1Db3N0QWN0 aXZlKQogCQkJCVZhY3V1bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OwogCi0J CQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUoZm9ya051bSwgYmxvY2tOdW0s Ci0JCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJ CQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJ CQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJ CQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJCQlUUkFDRV9QT1NUR1JFU1FM X0JVRkZFUl9SRUFEX0RPTkUoc2ZpbGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCQkJICBi bG9ja051bSwKKwkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNw Y09pZCwKKwkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lk LAorCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVy LAorCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCiAJCQkJCQkJ CQkJCSAgaXNFeHRlbmQsCiAJCQkJCQkJCQkJCSAgZm91bmQpOwogCkBAIC05MzYsNyArOTIz LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVy c2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJaWYgKCFQYWdlSXNOZXcoKFBhZ2Up IGJ1ZkJsb2NrKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJtc2coInVuZXhwZWN0 ZWQgZGF0YSBiZXlvbmQgRU9GIGluIGJsb2NrICV1IG9mIHJlbGF0aW9uICVzIiwKLQkJCQkJ CQlibG9ja051bSwgcmVscGF0aChzbWdyLT5zbWdyX3Jsb2NhdG9yLCBmb3JrTnVtKSksCisJ CQkJCQkJYmxvY2tOdW0sIHNtZ3JmaWxlcGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKSksCiAJ CQkJCSBlcnJoaW50KCJUaGlzIGhhcyBiZWVuIHNlZW4gdG8gb2NjdXIgd2l0aCBidWdneSBr ZXJuZWxzOyBjb25zaWRlciB1cGRhdGluZyB5b3VyIHN5c3RlbS4iKSkpOwogCiAJCS8qCkBA IC05OTMsNyArOTgwLDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3Is IGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJLyogbmV3IGJ1 ZmZlcnMgYXJlIHplcm8tZmlsbGVkICovCiAJCU1lbVNldCgoY2hhciAqKSBidWZCbG9jaywg MCwgQkxDS1NaKTsKIAkJLyogZG9uJ3Qgc2V0IGNoZWNrc3VtIGZvciBhbGwtemVybyBwYWdl ICovCi0JCXNtZ3JleHRlbmQoc21nciwgZm9ya051bSwgYmxvY2tOdW0sIChjaGFyICopIGJ1 ZkJsb2NrLCBmYWxzZSk7CisJCXNtZ3JleHRlbmQoc2ZpbGUsIGJsb2NrTnVtLCAoY2hhciAq KSBidWZCbG9jaywgZmFsc2UpOwogCiAJCS8qCiAJCSAqIE5COiB3ZSdyZSAqbm90KiBkb2lu ZyBhIFNjaGVkdWxlQnVmZmVyVGFnRm9yV3JpdGViYWNrIGhlcmU7CkBAIC0xMDE4LDcgKzEw MDUsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxw ZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJaWYgKHRyYWNrX2lvX3RpbWlu ZykKIAkJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGlvX3N0YXJ0KTsKIAotCQkJc21ncnJl YWQoc21nciwgZm9ya051bSwgYmxvY2tOdW0sIChjaGFyICopIGJ1ZkJsb2NrKTsKKwkJCXNt Z3JyZWFkKHNmaWxlLCBibG9ja051bSwgKGNoYXIgKikgYnVmQmxvY2spOwogCiAJCQlpZiAo dHJhY2tfaW9fdGltaW5nKQogCQkJewpAQCAtMTAzOCw3ICsxMDI1LDcgQEAgUmVhZEJ1ZmZl cl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtO dW1iZXIgZm9ya051bSwKIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVE KSwKIAkJCQkJCQkgZXJybXNnKCJpbnZhbGlkIHBhZ2UgaW4gYmxvY2sgJXUgb2YgcmVsYXRp b24gJXM7IHplcm9pbmcgb3V0IHBhZ2UiLAogCQkJCQkJCQkJYmxvY2tOdW0sCi0JCQkJCQkJ CQlyZWxwYXRoKHNtZ3ItPnNtZ3JfcmxvY2F0b3IsIGZvcmtOdW0pKSkpOworCQkJCQkJCQkJ c21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpKSkpOwogCQkJCQlNZW1TZXQoKGNo YXIgKikgYnVmQmxvY2ssIDAsIEJMQ0tTWik7CiAJCQkJfQogCQkJCWVsc2UKQEAgLTEwNDYs NyArMTAzMyw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFy IHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCiAJCQkJCQkJIGVycm1zZygiaW52YWxpZCBwYWdl IGluIGJsb2NrICV1IG9mIHJlbGF0aW9uICVzIiwKIAkJCQkJCQkJCWJsb2NrTnVtLAotCQkJ CQkJCQkJcmVscGF0aChzbWdyLT5zbWdyX3Jsb2NhdG9yLCBmb3JrTnVtKSkpKTsKKwkJCQkJ CQkJCXNtZ3JmaWxlcGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKSkpKTsKIAkJCX0KIAkJfQog CX0KQEAgLTEwODUsMTEgKzEwNzIsMTIgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0 aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAlp ZiAoVmFjdXVtQ29zdEFjdGl2ZSkKIAkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29z dFBhZ2VNaXNzOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKGZvcmtO dW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAotCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQs Ci0JCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0J CQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKKwlUUkFDRV9QT1NUR1JF U1FMX0JVRkZFUl9SRUFEX0RPTkUoc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAorCQkJ CQkJCQkJICBibG9ja051bSwKKwkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2Nh dG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRi T2lkLAorCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVy LAorCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmJhY2tlbmQsCiAJCQkJCQkJCQkg IGlzRXh0ZW5kLAogCQkJCQkJCQkJICBmb3VuZCk7CiAKQEAgLTExMTYsNyArMTEwNCw3IEBA IFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3Rl bmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAgKiBObyBsb2NrcyBhcmUgaGVsZCBlaXRoZXIg YXQgZW50cnkgb3IgZXhpdC4KICAqLwogc3RhdGljIEJ1ZmZlckRlc2MgKgotQnVmZmVyQWxs b2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIg Zm9ya051bSwKK0J1ZmZlckFsbG9jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBjaGFyIHJlbHBl cnNpc3RlbmNlLAogCQkJQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJCQlCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSwKIAkJCWJvb2wgKmZvdW5kUHRyKQpAQCAtMTEzNCw3ICsxMTIy LDcgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVu Y2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAl1aW50MzIJCWJ1Zl9zdGF0ZTsKIAogCS8qIGNy ZWF0ZSBhIHRhZyBzbyB3ZSBjYW4gbG9va3VwIHRoZSBidWZmZXIgKi8KLQlJTklUX0JVRkZF UlRBRyhuZXdUYWcsIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgZm9ya051bSwgYmxv Y2tOdW0pOworCUlOSVRfQlVGRkVSVEFHKG5ld1RhZywgc2ZpbGUtPnNtZ3JfbG9jYXRvci5s b2NhdG9yLCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIGJsb2NrTnVtKTsKIAogCS8q IGRldGVybWluZSBpdHMgaGFzaCBjb2RlIGFuZCBwYXJ0aXRpb24gbG9jayBJRCAqLwogCW5l d0hhc2ggPSBCdWZUYWJsZUhhc2hDb2RlKCZuZXdUYWcpOwpAQCAtMTI2NCwxMCArMTI1Miwx MSBAQCBCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5j ZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCX0KIAogCQkJCS8qIE9LLCBkbyB0aGUgSS9P ICovCi0JCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJVEVfRElSVFlfU1RBUlQoZm9y a051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5s b2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLnJlbE51bWJlcik7CisJCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJVEVfRElS VFlfU1RBUlQoc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCQkg IGJsb2NrTnVtLAorCQkJCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRv ci5zcGNPaWQsCisJCQkJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9y LmRiT2lkLAorCQkJCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5y ZWxOdW1iZXIpOwogCiAJCQkJRmx1c2hCdWZmZXIoYnVmLCBOVUxMKTsKIAkJCQlMV0xvY2tS ZWxlYXNlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhidWYpKTsKQEAgLTEyNzUs MTAgKzEyNjQsMTEgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVs cGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQlTY2hlZHVsZUJ1ZmZlclRh Z0ZvcldyaXRlYmFjaygmQmFja2VuZFdyaXRlYmFja0NvbnRleHQsCiAJCQkJCQkJCQkJCSAg JmJ1Zi0+dGFnKTsKIAotCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1dSSVRFX0RJUlRZ X0RPTkUoZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkJCQkJCSBzbWdyLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCQkJCQkgc21nci0+c21ncl9ybG9j YXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCQkJCQkgc21nci0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLnJlbE51bWJlcik7CisJCQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfV1JJ VEVfRElSVFlfRE9ORShzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sCisJCQkJCQkJCQkJ CQkJCSBibG9ja051bSwKKwkJCQkJCQkJCQkJCQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9j YXRvci5zcGNPaWQsCisJCQkJCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0 b3IuZGJPaWQsCisJCQkJCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE0MzQsNyArMTQyNCw3IEBA IEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBG b3JrTnVtYmVyIGZvcmtOdW0sCiAJYnVmX3N0YXRlICY9IH4oQk1fVkFMSUQgfCBCTV9ESVJU WSB8IEJNX0pVU1RfRElSVElFRCB8CiAJCQkJICAgQk1fQ0hFQ0tQT0lOVF9ORUVERUQgfCBC TV9JT19FUlJPUiB8IEJNX1BFUk1BTkVOVCB8CiAJCQkJICAgQlVGX1VTQUdFQ09VTlRfTUFT Syk7Ci0JaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8 fCBmb3JrTnVtID09IElOSVRfRk9SS05VTSkKKwlpZiAocmVscGVyc2lzdGVuY2UgPT0gUkVM UEVSU0lTVEVOQ0VfUEVSTUFORU5UIHx8IHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSA9 PSBJTklUX0ZPUktOVU0pCiAJCWJ1Zl9zdGF0ZSB8PSBCTV9UQUdfVkFMSUQgfCBCTV9QRVJN QU5FTlQgfCBCVUZfVVNBR0VDT1VOVF9PTkU7CiAJZWxzZQogCQlidWZfc3RhdGUgfD0gQk1f VEFHX1ZBTElEIHwgQlVGX1VTQUdFQ09VTlRfT05FOwpAQCAtMjgyMiw3ICsyODEyLDcgQEAg QnVmZmVyR2V0VGFnKEJ1ZmZlciBidWZmZXIsIFJlbEZpbGVMb2NhdG9yICpybG9jYXRvciwg Rm9ya051bWJlciAqZm9ya251bSwKICAqIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiAgSWYg bm90LCBwYXNzIE5VTEwuCiAgKi8KIHN0YXRpYyB2b2lkCi1GbHVzaEJ1ZmZlcihCdWZmZXJE ZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKQorRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAq YnVmLCBTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAlYTG9nUmVjUHRyCXJlY3B0cjsKIAlF cnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKQEAgLTI4NDcsMTQgKzI4MzcsMTQg QEAgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikKIAll cnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOwogCiAJLyogRmluZCBzbWdyIHJl bGF0aW9uIGZvciBidWZmZXIgKi8KLQlpZiAocmVsbiA9PSBOVUxMKQotCQlyZWxuID0gc21n cm9wZW4oYnVmLT50YWcucmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCWlmIChzZmls ZSA9PSBOVUxMKQorCQlzZmlsZSA9IHNtZ3JvcGVuKGJ1Zi0+dGFnLnJsb2NhdG9yLCBJbnZh bGlkQmFja2VuZElkLCBidWYtPnRhZy5mb3JrTnVtKTsKIAotCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX0ZMVVNIX1NUQVJUKGJ1Zi0+dGFnLmZvcmtOdW0sCisJVFJBQ0VfUE9TVEdSRVNR TF9CVUZGRVJfRkxVU0hfU1RBUlQoc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAogCQkJ CQkJCQkJCWJ1Zi0+dGFnLmJsb2NrTnVtLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLmRiT2lkLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxO dW1iZXIpOworCQkJCQkJCQkJCXNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQs CisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJ CQkJCXNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOwogCiAJYnVmX3N0 YXRlID0gTG9ja0J1ZkhkcihidWYpOwogCkBAIC0yOTA4LDggKzI4OTgsNyBAQCBGbHVzaEJ1 ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKQogCS8qCiAJICogYnVm VG9Xcml0ZSBpcyBlaXRoZXIgdGhlIHNoYXJlZCBidWZmZXIgb3IgYSBjb3B5LCBhcyBhcHBy b3ByaWF0ZS4KIAkgKi8KLQlzbWdyd3JpdGUocmVsbiwKLQkJCSAgYnVmLT50YWcuZm9ya051 bSwKKwlzbWdyd3JpdGUoc2ZpbGUsCiAJCQkgIGJ1Zi0+dGFnLmJsb2NrTnVtLAogCQkJICBi dWZUb1dyaXRlLAogCQkJICBmYWxzZSk7CkBAIC0yOTMwLDExICsyOTE5LDExIEBAIEZsdXNo QnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAJICovCiAJVGVy bWluYXRlQnVmZmVySU8oYnVmLCB0cnVlLCAwKTsKIAotCVRSQUNFX1BPU1RHUkVTUUxfQlVG RkVSX0ZMVVNIX0RPTkUoYnVmLT50YWcuZm9ya051bSwKKwlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9GTFVTSF9ET05FKHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwKIAkJCQkJCQkJ CSAgIGJ1Zi0+dGFnLmJsb2NrTnVtLAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5kYk9pZCwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5y ZWxOdW1iZXIpOworCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnNw Y09pZCwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwK KwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOwog CiAJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCiAJZXJyb3JfY29udGV4dF9z dGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwpAQCAtMjk2Nyw3ICsyOTU2LDcgQEAgUmVs YXRpb25HZXROdW1iZXJPZkJsb2Nrc0luRm9yayhSZWxhdGlvbiByZWxhdGlvbiwgRm9ya051 bWJlciBmb3JrTnVtKQogCX0KIAllbHNlIGlmIChSRUxLSU5EX0hBU19TVE9SQUdFKHJlbGF0 aW9uLT5yZF9yZWwtPnJlbGtpbmQpKQogCXsKLQkJcmV0dXJuIHNtZ3JuYmxvY2tzKFJlbGF0 aW9uR2V0U21ncihyZWxhdGlvbiksIGZvcmtOdW0pOworCQlyZXR1cm4gc21ncm5ibG9ja3Mo UmVsYXRpb25HZXRTbWdyKHJlbGF0aW9uLCBmb3JrTnVtKSk7CiAJfQogCWVsc2UKIAkJQXNz ZXJ0KGZhbHNlKTsKQEAgLTMwNTcsMjYgKzMwNDYsMjAgQEAgQnVmZmVyR2V0TFNOQXRvbWlj KEJ1ZmZlciBidWZmZXIpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1Ecm9wUmVs YXRpb25CdWZmZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtO dW0sCitEcm9wUmVsYXRpb25CdWZmZXJzKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNr ZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciAqZm9ya051bSwKIAkJCQkJaW50IG5mb3Jrcywg QmxvY2tOdW1iZXIgKmZpcnN0RGVsQmxvY2spCiB7CiAJaW50CQkJaTsKIAlpbnQJCQlqOwot CVJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvcjsKIAlCbG9ja051bWJlciBuRm9ya0Js b2NrW01BWF9GT1JLTlVNXTsKIAl1aW50NjQJCW5CbG9ja3NUb0ludmFsaWRhdGUgPSAwOwog Ci0JcmxvY2F0b3IgPSBzbWdyX3JlbG4tPnNtZ3JfcmxvY2F0b3I7Ci0KIAkvKiBJZiBpdCdz IGEgbG9jYWwgcmVsYXRpb24sIGl0J3MgbG9jYWxidWYuYydzIHByb2JsZW0uICovCi0JaWYg KFJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9jYXRvcikpCisJaWYgKGJhY2tlbmQg PT0gTXlCYWNrZW5kSWQpCiAJewotCQlpZiAocmxvY2F0b3IuYmFja2VuZCA9PSBNeUJhY2tl bmRJZCkKLQkJewotCQkJZm9yIChqID0gMDsgaiA8IG5mb3JrczsgaisrKQotCQkJCURyb3BS ZWxhdGlvbkxvY2FsQnVmZmVycyhybG9jYXRvci5sb2NhdG9yLCBmb3JrTnVtW2pdLAotCQkJ CQkJCQkJCSBmaXJzdERlbEJsb2NrW2pdKTsKLQkJfQorCQlmb3IgKGogPSAwOyBqIDwgbmZv cmtzOyBqKyspCisJCQlEcm9wUmVsYXRpb25Mb2NhbEJ1ZmZlcnMocmxvY2F0b3IsIGZvcmtO dW1bal0sCisJCQkJCQkJCQkgZmlyc3REZWxCbG9ja1tqXSk7CiAJCXJldHVybjsKIAl9CiAK QEAgLTMxMDUsNyArMzA4OCwxMCBAQCBEcm9wUmVsYXRpb25CdWZmZXJzKFNNZ3JSZWxhdGlv biBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtOdW0sCiAJZm9yIChpID0gMDsgaSA8IG5m b3JrczsgaSsrKQogCXsKIAkJLyogR2V0IHRoZSBudW1iZXIgb2YgYmxvY2tzIGZvciBhIHJl bGF0aW9uJ3MgZm9yayAqLwotCQluRm9ya0Jsb2NrW2ldID0gc21ncm5ibG9ja3NfY2FjaGVk KHNtZ3JfcmVsbiwgZm9ya051bVtpXSk7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOworCisJ CXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtOdW1baV0pOworCQlu Rm9ya0Jsb2NrW2ldID0gc21ncm5ibG9ja3NfY2FjaGVkKHNmaWxlKTsKIAogCQlpZiAobkZv cmtCbG9ja1tpXSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJCXsKQEAgLTMxMjUsNyArMzEx MSw3IEBAIERyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9y a051bWJlciAqZm9ya051bSwKIAkJbkJsb2Nrc1RvSW52YWxpZGF0ZSA8IEJVRl9EUk9QX0ZV TExfU0NBTl9USFJFU0hPTEQpCiAJewogCQlmb3IgKGogPSAwOyBqIDwgbmZvcmtzOyBqKysp Ci0JCQlGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVycyhybG9jYXRvci5sb2NhdG9yLCBmb3Jr TnVtW2pdLAorCQkJRmluZEFuZERyb3BSZWxhdGlvbkJ1ZmZlcnMocmxvY2F0b3IsIGZvcmtO dW1bal0sCiAJCQkJCQkJCQkgICBuRm9ya0Jsb2NrW2pdLCBmaXJzdERlbEJsb2NrW2pdKTsK IAkJcmV0dXJuOwogCX0KQEAgLTMxNTEsMTQgKzMxMzcsMTQgQEAgRHJvcFJlbGF0aW9uQnVm ZmVycyhTTWdyUmVsYXRpb24gc21ncl9yZWxuLCBGb3JrTnVtYmVyICpmb3JrTnVtLAogCQkg KiBXZSBjb3VsZCBjaGVjayBmb3JrTnVtIGFuZCBibG9ja051bSBhcyB3ZWxsIGFzIHRoZSBy bG9jYXRvciwgYnV0CiAJCSAqIHRoZSBpbmNyZW1lbnRhbCB3aW4gZnJvbSBkb2luZyBzbyBz ZWVtcyBzbWFsbC4KIAkJICovCi0JCWlmICghUmVsRmlsZUxvY2F0b3JFcXVhbHMoYnVmSGRy LT50YWcucmxvY2F0b3IsIHJsb2NhdG9yLmxvY2F0b3IpKQorCQlpZiAoIVJlbEZpbGVMb2Nh dG9yRXF1YWxzKGJ1Zkhkci0+dGFnLnJsb2NhdG9yLCBybG9jYXRvcikpCiAJCQljb250aW51 ZTsKIAogCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zkhkcik7CiAKIAkJZm9yIChqID0g MDsgaiA8IG5mb3JrczsgaisrKQogCQl7Ci0JCQlpZiAoUmVsRmlsZUxvY2F0b3JFcXVhbHMo YnVmSGRyLT50YWcucmxvY2F0b3IsIHJsb2NhdG9yLmxvY2F0b3IpICYmCisJCQlpZiAoUmVs RmlsZUxvY2F0b3JFcXVhbHMoYnVmSGRyLT50YWcucmxvY2F0b3IsIHJsb2NhdG9yKSAmJgog CQkJCWJ1Zkhkci0+dGFnLmZvcmtOdW0gPT0gZm9ya051bVtqXSAmJgogCQkJCWJ1Zkhkci0+ dGFnLmJsb2NrTnVtID49IGZpcnN0RGVsQmxvY2tbal0pCiAJCQl7CkBAIC0zMTgwLDEyICsz MTY2LDExIEBAIERyb3BSZWxhdGlvbkJ1ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwg Rm9ya051bWJlciAqZm9ya051bSwKICAqCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1E cm9wUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5s b2NhdG9ycykKK0Ryb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFJlbEZpbGVMb2NhdG9yQmFja2Vu ZCAqcmxvY2F0b3JzLCBpbnQgbmxvY2F0b3JzKQogewogCWludAkJCWk7CiAJaW50CQkJajsK IAlpbnQJCQluID0gMDsKLQlTTWdyUmVsYXRpb24gKnJlbHM7CiAJQmxvY2tOdW1iZXIgKCpi bG9jaylbTUFYX0ZPUktOVU0gKyAxXTsKIAl1aW50NjQJCW5CbG9ja3NUb0ludmFsaWRhdGUg PSAwOwogCVJlbEZpbGVMb2NhdG9yICpsb2NhdG9yczsKQEAgLTMxOTUsMTggKzMxODAsMTgg QEAgRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdyX3JlbG4sIGlu dCBubG9jYXRvcnMpCiAJaWYgKG5sb2NhdG9ycyA9PSAwKQogCQlyZXR1cm47CiAKLQlyZWxz ID0gcGFsbG9jKHNpemVvZihTTWdyUmVsYXRpb24pICogbmxvY2F0b3JzKTsJLyogbm9uLWxv Y2FsIHJlbGF0aW9ucyAqLworCWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxlTG9j YXRvcikgKiBubG9jYXRvcnMpOwkvKiBub24tbG9jYWwgcmVsYXRpb25zICovCiAKIAkvKiBJ ZiBpdCdzIGEgbG9jYWwgcmVsYXRpb24sIGl0J3MgbG9jYWxidWYuYydzIHByb2JsZW0uICov CiAJZm9yIChpID0gMDsgaSA8IG5sb2NhdG9yczsgaSsrKQogCXsKLQkJaWYgKFJlbEZpbGVM b2NhdG9yQmFja2VuZElzVGVtcChzbWdyX3JlbG5baV0tPnNtZ3JfcmxvY2F0b3IpKQorCQlp ZiAocmxvY2F0b3JzW2ldLmJhY2tlbmQgIT0gSW52YWxpZEJhY2tlbmRJZCkKIAkJewotCQkJ aWYgKHNtZ3JfcmVsbltpXS0+c21ncl9ybG9jYXRvci5iYWNrZW5kID09IE15QmFja2VuZElk KQotCQkJCURyb3BSZWxhdGlvbkFsbExvY2FsQnVmZmVycyhzbWdyX3JlbG5baV0tPnNtZ3Jf cmxvY2F0b3IubG9jYXRvcik7CisJCQlpZiAocmxvY2F0b3JzW2ldLmJhY2tlbmQgPT0gTXlC YWNrZW5kSWQpCisJCQkJRHJvcFJlbGF0aW9uQWxsTG9jYWxCdWZmZXJzKHJsb2NhdG9yc1tp XS5sb2NhdG9yKTsKIAkJfQogCQllbHNlCi0JCQlyZWxzW24rK10gPSBzbWdyX3JlbG5baV07 CisJCQlsb2NhdG9yc1tuKytdID0gcmxvY2F0b3JzW2ldLmxvY2F0b3I7CiAJfQogCiAJLyoK QEAgLTMyMTUsNyArMzIwMCw3IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxh dGlvbiAqc21ncl9yZWxuLCBpbnQgbmxvY2F0b3JzKQogCSAqLwogCWlmIChuID09IDApCiAJ ewotCQlwZnJlZShyZWxzKTsKKwkJcGZyZWUobG9jYXRvcnMpOwogCQlyZXR1cm47CiAJfQog CkBAIC0zMjM1LDEyICszMjIwLDEzIEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JS ZWxhdGlvbiAqc21ncl9yZWxuLCBpbnQgbmxvY2F0b3JzKQogCQlmb3IgKGogPSAwOyBqIDw9 IE1BWF9GT1JLTlVNOyBqKyspCiAJCXsKIAkJCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJsb2Nr cyBmb3IgYSByZWxhdGlvbidzIGZvcmsuICovCi0JCQlibG9ja1tpXVtqXSA9IHNtZ3JuYmxv Y2tzX2NhY2hlZChyZWxzW2ldLCBqKTsKKwkJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gc21n cm9wZW4obG9jYXRvcnNbaV0sIEludmFsaWRCYWNrZW5kSWQsIGopOworCQkJYmxvY2tbaV1b al0gPSBzbWdybmJsb2Nrc19jYWNoZWQoc2ZpbGUpOwogCiAJCQkvKiBXZSBuZWVkIHRvIG9u bHkgY29uc2lkZXIgdGhlIHJlbGF0aW9uIGZvcmtzIHRoYXQgZXhpc3RzLiAqLwogCQkJaWYg KGJsb2NrW2ldW2pdID09IEludmFsaWRCbG9ja051bWJlcikKIAkJCXsKLQkJCQlpZiAoIXNt Z3JleGlzdHMocmVsc1tpXSwgaikpCisJCQkJaWYgKCFzbWdyZXhpc3RzKHNmaWxlKSkKIAkJ CQkJY29udGludWU7CiAJCQkJY2FjaGVkID0gZmFsc2U7CiAJCQkJYnJlYWs7CkBAIC0zMjY2 LDIwICszMjUyLDE3IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAq c21ncl9yZWxuLCBpbnQgbmxvY2F0b3JzKQogCQkJCQljb250aW51ZTsKIAogCQkJCS8qIGRy b3AgYWxsIHRoZSBidWZmZXJzIGZvciBhIHBhcnRpY3VsYXIgcmVsYXRpb24gZm9yayAqLwot CQkJCUZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKHJlbHNbaV0tPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvciwKKwkJCQlGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVycyhsb2NhdG9yc1tpXSwK IAkJCQkJCQkJCQkgICBqLCBibG9ja1tpXVtqXSwgMCk7CiAJCQl9CiAJCX0KIAogCQlwZnJl ZShibG9jayk7Ci0JCXBmcmVlKHJlbHMpOworCQlwZnJlZShsb2NhdG9ycyk7CiAJCXJldHVy bjsKIAl9CiAKIAlwZnJlZShibG9jayk7Ci0JbG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9mKFJl bEZpbGVMb2NhdG9yKSAqIG4pOwkvKiBub24tbG9jYWwgcmVsYXRpb25zICovCi0JZm9yIChp ID0gMDsgaSA8IG47IGkrKykKLQkJbG9jYXRvcnNbaV0gPSByZWxzW2ldLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3I7CiAKIAkvKgogCSAqIEZvciBsb3cgbnVtYmVyIG9mIHJlbGF0aW9ucyB0 byBkcm9wIGp1c3QgdXNlIGEgc2ltcGxlIHdhbGsgdGhyb3VnaCwgdG8KQEAgLTMzMzYsNyAr MzMxOSw2IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9y ZWxuLCBpbnQgbmxvY2F0b3JzKQogCX0KIAogCXBmcmVlKGxvY2F0b3JzKTsKLQlwZnJlZShy ZWxzKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNTQzLDggKzM1MjUsNyBAQCBG bHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpCiAKIAkJCQlQYWdlU2V0Q2hlY2tz dW1JbnBsYWNlKGxvY2FscGFnZSwgYnVmSGRyLT50YWcuYmxvY2tOdW0pOwogCi0JCQkJc21n cndyaXRlKFJlbGF0aW9uR2V0U21ncihyZWwpLAotCQkJCQkJICBidWZIZHItPnRhZy5mb3Jr TnVtLAorCQkJCXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IocmVsLCBidWZIZHItPnRhZy5m b3JrTnVtKSwKIAkJCQkJCSAgYnVmSGRyLT50YWcuYmxvY2tOdW0sCiAJCQkJCQkgIGxvY2Fs cGFnZSwKIAkJCQkJCSAgZmFsc2UpOwpAQCAtMzU4NCw3ICszNTY1LDcgQEAgRmx1c2hSZWxh dGlvbkJ1ZmZlcnMoUmVsYXRpb24gcmVsKQogCQl7CiAJCQlQaW5CdWZmZXJfTG9ja2VkKGJ1 Zkhkcik7CiAJCQlMV0xvY2tBY3F1aXJlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9j ayhidWZIZHIpLCBMV19TSEFSRUQpOwotCQkJRmx1c2hCdWZmZXIoYnVmSGRyLCBSZWxhdGlv bkdldFNtZ3IocmVsKSk7CisJCQlGbHVzaEJ1ZmZlcihidWZIZHIsIFJlbGF0aW9uR2V0U21n cihyZWwsIGJ1Zkhkci0+dGFnLmZvcmtOdW0pKTsKIAkJCUxXTG9ja1JlbGVhc2UoQnVmZmVy RGVzY3JpcHRvckdldENvbnRlbnRMb2NrKGJ1ZkhkcikpOwogCQkJVW5waW5CdWZmZXIoYnVm SGRyLCB0cnVlKTsKIAkJfQpAQCAtMzYwMywyNSArMzU4NCwyMCBAQCBGbHVzaFJlbGF0aW9u QnVmZmVycyhSZWxhdGlvbiByZWwpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1G bHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxz KQorRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFJlbEZpbGVMb2NhdG9yICpyZWxzLCBpbnQg bnJlbHMpCiB7CiAJaW50CQkJaTsKLQlTTWdyU29ydEFycmF5ICpzcmVsczsKKwlSZWxGaWxl TG9jYXRvciAqbG9jYXRvcnMgPSBOVUxMOwogCWJvb2wJCXVzZV9ic2VhcmNoOwogCiAJaWYg KG5yZWxzID09IDApCiAJCXJldHVybjsKIAogCS8qIGZpbGwtaW4gYXJyYXkgZm9yIHFzb3J0 ICovCi0Jc3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JTb3J0QXJyYXkpICogbnJlbHMpOwor CWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxlTG9jYXRvcikgKiBucmVscyk7CiAK IAlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQl7Ci0JCUFzc2VydCghUmVsRmlsZUxv Y2F0b3JCYWNrZW5kSXNUZW1wKHNtZ3JzW2ldLT5zbWdyX3Jsb2NhdG9yKSk7Ci0KLQkJc3Jl bHNbaV0ucmxvY2F0b3IgPSBzbWdyc1tpXS0+c21ncl9ybG9jYXRvci5sb2NhdG9yOwotCQlz cmVsc1tpXS5zcmVsID0gc21ncnNbaV07Ci0JfQorCQlsb2NhdG9yc1tpXSA9IHJlbHNbaV07 CiAKIAkvKgogCSAqIFNhdmUgdGhlIGJzZWFyY2ggb3ZlcmhlYWQgZm9yIGxvdyBudW1iZXIg b2YgcmVsYXRpb25zIHRvIHN5bmMuIFNlZQpAQCAtMzYyOSwxNiArMzYwNSwxNiBAQCBGbHVz aFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxzKQog CSAqLwogCXVzZV9ic2VhcmNoID0gbnJlbHMgPiBSRUxTX0JTRUFSQ0hfVEhSRVNIT0xEOwog Ci0JLyogc29ydCB0aGUgbGlzdCBvZiBTTWdyUmVsYXRpb25zIGlmIG5lY2Vzc2FyeSAqLwor CS8qIHNvcnQgdGhlIGxpc3Qgb2YgbG9jYXRvcnMgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKHVz ZV9ic2VhcmNoKQotCQlwZ19xc29ydChzcmVscywgbnJlbHMsIHNpemVvZihTTWdyU29ydEFy cmF5KSwgcmxvY2F0b3JfY29tcGFyYXRvcik7CisJCXBnX3Fzb3J0KGxvY2F0b3JzLCBucmVs cywgc2l6ZW9mKFJlbEZpbGVMb2NhdG9yKSwgcmxvY2F0b3JfY29tcGFyYXRvcik7CiAKIAkv KiBNYWtlIHN1cmUgd2UgY2FuIGhhbmRsZSB0aGUgcGluIGluc2lkZSB0aGUgbG9vcCAqLwog CVJlc291cmNlT3duZXJFbmxhcmdlQnVmZmVycyhDdXJyZW50UmVzb3VyY2VPd25lcik7CiAK IAlmb3IgKGkgPSAwOyBpIDwgTkJ1ZmZlcnM7IGkrKykKIAl7Ci0JCVNNZ3JTb3J0QXJyYXkg KnNyZWxlbnQgPSBOVUxMOworCQlSZWxGaWxlTG9jYXRvciAqZm91bmQgPSBOVUxMOwogCQlC dWZmZXJEZXNjICpidWZIZHIgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGkpOwogCQl1aW50MzIJ CWJ1Zl9zdGF0ZTsKIApAQCAtMzY1MywzMyArMzYyOSwzNSBAQCBGbHVzaFJlbGF0aW9uc0Fs bEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxzKQogCiAJCQlmb3IgKGog PSAwOyBqIDwgbnJlbHM7IGorKykKIAkJCXsKLQkJCQlpZiAoUmVsRmlsZUxvY2F0b3JFcXVh bHMoYnVmSGRyLT50YWcucmxvY2F0b3IsIHNyZWxzW2pdLnJsb2NhdG9yKSkKKwkJCQlpZiAo UmVsRmlsZUxvY2F0b3JFcXVhbHMoYnVmSGRyLT50YWcucmxvY2F0b3IsIGxvY2F0b3JzW2pd KSkKIAkJCQl7Ci0JCQkJCXNyZWxlbnQgPSAmc3JlbHNbal07CisJCQkJCWZvdW5kID0gJmxv Y2F0b3JzW2pdOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CiAJCX0KIAkJZWxzZQogCQl7 Ci0JCQlzcmVsZW50ID0gYnNlYXJjaCgoY29uc3Qgdm9pZCAqKSAmKGJ1Zkhkci0+dGFnLnJs b2NhdG9yKSwKLQkJCQkJCQkgIHNyZWxzLCBucmVscywgc2l6ZW9mKFNNZ3JTb3J0QXJyYXkp LAotCQkJCQkJCSAgcmxvY2F0b3JfY29tcGFyYXRvcik7CisJCQlmb3VuZCA9IGJzZWFyY2go KGNvbnN0IHZvaWQgKikgJihidWZIZHItPnRhZy5ybG9jYXRvciksCisJCQkJCQkJbG9jYXRv cnMsIG5yZWxzLCBzaXplb2YoUmVsRmlsZUxvY2F0b3IpLAorCQkJCQkJCXJsb2NhdG9yX2Nv bXBhcmF0b3IpOwogCQl9CiAKIAkJLyogYnVmZmVyIGRvZXNuJ3QgYmVsb25nIHRvIGFueSBv ZiB0aGUgZ2l2ZW4gcmVsZmlsZWxvY2F0b3JzOyBza2lwIGl0ICovCi0JCWlmIChzcmVsZW50 ID09IE5VTEwpCisJCWlmIChmb3VuZCA9PSBOVUxMKQogCQkJY29udGludWU7CiAKKwkJLyog RklYTUU6IGNhY2hlIFNNZ3JGaWxlSGFuZGxlcyBmb3IgdGhlIHJlbHMsIGFuZCBwYXNzIHRv IEZsdXNoQnVmZmVyICovCisKIAkJUmVzZXJ2ZVByaXZhdGVSZWZDb3VudEVudHJ5KCk7CiAK IAkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihidWZIZHIpOwotCQlpZiAoUmVsRmlsZUxvY2F0 b3JFcXVhbHMoYnVmSGRyLT50YWcucmxvY2F0b3IsIHNyZWxlbnQtPnJsb2NhdG9yKSAmJgor CQlpZiAoUmVsRmlsZUxvY2F0b3JFcXVhbHMoYnVmSGRyLT50YWcucmxvY2F0b3IsICpmb3Vu ZCkgJiYKIAkJCShidWZfc3RhdGUgJiAoQk1fVkFMSUQgfCBCTV9ESVJUWSkpID09IChCTV9W QUxJRCB8IEJNX0RJUlRZKSkKIAkJewogCQkJUGluQnVmZmVyX0xvY2tlZChidWZIZHIpOwog CQkJTFdMb2NrQWNxdWlyZShCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYnVmSGRy KSwgTFdfU0hBUkVEKTsKLQkJCUZsdXNoQnVmZmVyKGJ1Zkhkciwgc3JlbGVudC0+c3JlbCk7 CisJCQlGbHVzaEJ1ZmZlcihidWZIZHIsIE5VTEwpOwogCQkJTFdMb2NrUmVsZWFzZShCdWZm ZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYnVmSGRyKSk7CiAJCQlVbnBpbkJ1ZmZlcihi dWZIZHIsIHRydWUpOwogCQl9CkBAIC0zNjg3LDcgKzM2NjUsNyBAQCBGbHVzaFJlbGF0aW9u c0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpzbWdycywgaW50IG5yZWxzKQogCQkJVW5sb2Nr QnVmSGRyKGJ1ZkhkciwgYnVmX3N0YXRlKTsKIAl9CiAKLQlwZnJlZShzcmVscyk7CisJcGZy ZWUobG9jYXRvcnMpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3MjIsNyArMzcw MCw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihSZWxhdGlvbiBzcmMsIFJl bGF0aW9uIGRzdCwgRm9ya051bWJlciBmb3JrTnVtLAogCXVzZV93YWwgPSBYTG9nSXNOZWVk ZWQoKSAmJiAocGVybWFuZW50IHx8IGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNKTsKIAogCS8q IEdldCBudW1iZXIgb2YgYmxvY2tzIGluIHRoZSBzb3VyY2UgcmVsYXRpb24uICovCi0JbmJs b2NrcyA9IHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihzcmMpLCBmb3JrTnVtKTsKKwlu YmxvY2tzID0gc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHNyYywgZm9ya051bSkpOwog CiAJLyogTm90aGluZyB0byBjb3B5OyBqdXN0IHJldHVybi4gKi8KIAlpZiAobmJsb2NrcyA9 PSAwKQpAQCAtMzgyMCw5ICszNzk4LDkgQEAgQ3JlYXRlQW5kQ29weVJlbGF0aW9uRGF0YShS ZWxGaWxlTG9jYXRvciBzcmNfcmxvY2F0b3IsCiAJZm9yIChGb3JrTnVtYmVyIGZvcmtOdW0g PSBNQUlOX0ZPUktOVU0gKyAxOwogCQkgZm9ya051bSA8PSBNQVhfRk9SS05VTTsgZm9ya051 bSsrKQogCXsKLQkJaWYgKHNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHNyY19yZWwpLCBm b3JrTnVtKSkKKwkJaWYgKHNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHNyY19yZWwsIGZv cmtOdW0pKSkKIAkJewotCQkJc21ncmNyZWF0ZShSZWxhdGlvbkdldFNtZ3IoZHN0X3JlbCks IGZvcmtOdW0sIGZhbHNlKTsKKwkJCXNtZ3JjcmVhdGUoUmVsYXRpb25HZXRTbWdyKGRzdF9y ZWwsIGZvcmtOdW0pLCBmYWxzZSk7CiAKIAkJCS8qCiAJCQkgKiBXQUwgbG9nIGNyZWF0aW9u IGlmIHRoZSByZWxhdGlvbiBpcyBwZXJzaXN0ZW50LCBvciB0aGlzIGlzIHRoZQpAQCAtNDk1 Miw3ICs0OTMwLDcgQEAgSXNzdWVQZW5kaW5nV3JpdGViYWNrcyhXcml0ZWJhY2tDb250ZXh0 ICpjb250ZXh0KQogCXsKIAkJUGVuZGluZ1dyaXRlYmFjayAqY3VyOwogCQlQZW5kaW5nV3Jp dGViYWNrICpuZXh0OwotCQlTTWdyUmVsYXRpb24gcmVsbjsKKwkJU01nckZpbGVIYW5kbGUg c2ZpbGU7CiAJCWludAkJCWFoZWFkOwogCQlCdWZmZXJUYWcJdGFnOwogCQlTaXplCQluYmxv Y2tzID0gMTsKQEAgLTQ5ODgsOCArNDk2Niw4IEBAIElzc3VlUGVuZGluZ1dyaXRlYmFja3Mo V3JpdGViYWNrQ29udGV4dCAqY29udGV4dCkKIAkJaSArPSBhaGVhZDsKIAogCQkvKiBhbmQg ZmluYWxseSB0ZWxsIHRoZSBrZXJuZWwgdG8gd3JpdGUgdGhlIGRhdGEgdG8gc3RvcmFnZSAq LwotCQlyZWxuID0gc21ncm9wZW4odGFnLnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKTsK LQkJc21ncndyaXRlYmFjayhyZWxuLCB0YWcuZm9ya051bSwgdGFnLmJsb2NrTnVtLCBuYmxv Y2tzKTsKKwkJc2ZpbGUgPSBzbWdyb3Blbih0YWcucmxvY2F0b3IsIEludmFsaWRCYWNrZW5k SWQsIHRhZy5mb3JrTnVtKTsKKwkJc21ncndyaXRlYmFjayhzZmlsZSwgdGFnLmJsb2NrTnVt LCBuYmxvY2tzKTsKIAl9CiAKIAljb250ZXh0LT5ucl9wZW5kaW5nID0gMDsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2xvY2FsYnVmLmMgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1Zi5jCmluZGV4IDljMDM4ODUxZDc1Li45Mjc2NzEy Mjc5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYu YworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1Zi5jCkBAIC02MSwx NCArNjEsMTMgQEAgc3RhdGljIEJsb2NrIEdldExvY2FsQnVmZmVyU3RvcmFnZSh2b2lkKTsK ICAqIE5vLW9wIGlmIHByZWZldGNoaW5nIGlzbid0IGNvbXBpbGVkIGluLgogICovCiBQcmVm ZXRjaEJ1ZmZlclJlc3VsdAotUHJlZmV0Y2hMb2NhbEJ1ZmZlcihTTWdyUmVsYXRpb24gc21n ciwgRm9ya051bWJlciBmb3JrTnVtLAotCQkJCQlCbG9ja051bWJlciBibG9ja051bSkKK1By ZWZldGNoTG9jYWxCdWZmZXIoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJs b2NrTnVtKQogewogCVByZWZldGNoQnVmZmVyUmVzdWx0IHJlc3VsdCA9IHtJbnZhbGlkQnVm ZmVyLCBmYWxzZX07CiAJQnVmZmVyVGFnCW5ld1RhZzsJCQkvKiBpZGVudGl0eSBvZiByZXF1 ZXN0ZWQgYmxvY2sgKi8KIAlMb2NhbEJ1ZmZlckxvb2t1cEVudCAqaHJlc3VsdDsKIAotCUlO SVRfQlVGRkVSVEFHKG5ld1RhZywgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBmb3Jr TnVtLCBibG9ja051bSk7CisJSU5JVF9CVUZGRVJUQUcobmV3VGFnLCBzZmlsZS0+c21ncl9s b2NhdG9yLmxvY2F0b3IsIHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwgYmxvY2tOdW0p OwogCiAJLyogSW5pdGlhbGl6ZSBsb2NhbCBidWZmZXJzIGlmIGZpcnN0IHJlcXVlc3QgaW4g dGhpcyBzZXNzaW9uICovCiAJaWYgKExvY2FsQnVmSGFzaCA9PSBOVUxMKQpAQCAtODcsNyAr ODYsNyBAQCBQcmVmZXRjaExvY2FsQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVt YmVyIGZvcmtOdW0sCiAJewogI2lmZGVmIFVTRV9QUkVGRVRDSAogCQkvKiBOb3QgaW4gYnVm ZmVycywgc28gaW5pdGlhdGUgcHJlZmV0Y2ggKi8KLQkJc21ncnByZWZldGNoKHNtZ3IsIGZv cmtOdW0sIGJsb2NrTnVtKTsKKwkJc21ncnByZWZldGNoKHNmaWxlLCBibG9ja051bSk7CiAJ CXJlc3VsdC5pbml0aWF0ZWRfaW8gPSB0cnVlOwogI2VuZGlmCQkJCQkJCS8qIFVTRV9QUkVG RVRDSCAqLwogCX0KQEAgLTEwNiw4ICsxMDUsNyBAQCBQcmVmZXRjaExvY2FsQnVmZmVyKFNN Z3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAgKiAoaGVuY2UsIHVzYWdl X2NvdW50IGlzIGFsd2F5cyBhZHZhbmNlZCkuCiAgKi8KIEJ1ZmZlckRlc2MgKgotTG9jYWxC dWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9j a051bWJlciBibG9ja051bSwKLQkJCQkgYm9vbCAqZm91bmRQdHIpCitMb2NhbEJ1ZmZlckFs bG9jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja051bSwgYm9vbCAq Zm91bmRQdHIpCiB7CiAJQnVmZmVyVGFnCW5ld1RhZzsJCQkvKiBpZGVudGl0eSBvZiByZXF1 ZXN0ZWQgYmxvY2sgKi8KIAlMb2NhbEJ1ZmZlckxvb2t1cEVudCAqaHJlc3VsdDsKQEAgLTEx Nyw3ICsxMTUsNyBAQCBMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3Jr TnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCWJvb2wJCWZvdW5kOwog CXVpbnQzMgkJYnVmX3N0YXRlOwogCi0JSU5JVF9CVUZGRVJUQUcobmV3VGFnLCBzbWdyLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKKwlJTklUX0JVRkZF UlRBRyhuZXdUYWcsIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNtZ3Jf bG9jYXRvci5mb3JrbnVtLCBibG9ja051bSk7CiAKIAkvKiBJbml0aWFsaXplIGxvY2FsIGJ1 ZmZlcnMgaWYgZmlyc3QgcmVxdWVzdCBpbiB0aGlzIHNlc3Npb24gKi8KIAlpZiAoTG9jYWxC dWZIYXNoID09IE5VTEwpCkBAIC0xMzQsNyArMTMyLDcgQEAgTG9jYWxCdWZmZXJBbGxvYyhT TWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9j a051bSwKIAkJQXNzZXJ0KEJVRkZFUlRBR1NfRVFVQUwoYnVmSGRyLT50YWcsIG5ld1RhZykp OwogI2lmZGVmIExCREVCVUcKIAkJZnByaW50ZihzdGRlcnIsICJMQiBBTExPQyAoJXUsJWQs JWQpICVkXG4iLAotCQkJCXNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIs IGZvcmtOdW0sIGJsb2NrTnVtLCAtYiAtIDEpOworCQkJCXNmaWxlLT5zbWdyX2xvY2F0b3Iu bG9jYXRvci5yZWxOdW1iZXIsIHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwgYmxvY2tO dW0sIC1iIC0gMSk7CiAjZW5kaWYKIAkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTMy KCZidWZIZHItPnN0YXRlKTsKIApAQCAtMTYyLDcgKzE2MCw3IEBAIExvY2FsQnVmZmVyQWxs b2MoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIg YmxvY2tOdW0sCiAKICNpZmRlZiBMQkRFQlVHCiAJZnByaW50ZihzdGRlcnIsICJMQiBBTExP QyAoJXUsJWQsJWQpICVkXG4iLAotCQkJc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJl bE51bWJlciwgZm9ya051bSwgYmxvY2tOdW0sCisJCQlzZmlsZS0+c21ncl9sb2NhdG9yLmxv Y2F0b3IucmVsTnVtYmVyLCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sIGJsb2NrTnVt LAogCQkJLW5leHRGcmVlTG9jYWxCdWYgLSAxKTsKICNlbmRpZgogCkBAIC0yMTEsMTcgKzIw OSwxNiBAQCBMb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVy IGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCSAqLwogCWlmIChidWZfc3RhdGUg JiBCTV9ESVJUWSkKIAl7Ci0JCVNNZ3JSZWxhdGlvbiBvcmVsbjsKKwkJU01nckZpbGVIYW5k bGUgb2ZpbGU7CiAJCVBhZ2UJCWxvY2FscGFnZSA9IChjaGFyICopIExvY2FsQnVmSGRyR2V0 QmxvY2soYnVmSGRyKTsKIAotCQkvKiBGaW5kIHNtZ3IgcmVsYXRpb24gZm9yIGJ1ZmZlciAq LwotCQlvcmVsbiA9IHNtZ3JvcGVuKGJ1Zkhkci0+dGFnLnJsb2NhdG9yLCBNeUJhY2tlbmRJ ZCk7CisJCS8qIEZpbmQgc21nciBmaWxlIGhhbmRsZSBmb3IgYnVmZmVyICovCisJCW9maWxl ID0gc21ncm9wZW4oYnVmSGRyLT50YWcucmxvY2F0b3IsIE15QmFja2VuZElkLCBidWZIZHIt PnRhZy5mb3JrTnVtKTsKIAogCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKGxvY2FscGFnZSwg YnVmSGRyLT50YWcuYmxvY2tOdW0pOwogCiAJCS8qIEFuZCB3cml0ZS4uLiAqLwotCQlzbWdy d3JpdGUob3JlbG4sCi0JCQkJICBidWZIZHItPnRhZy5mb3JrTnVtLAorCQlzbWdyd3JpdGUo b2ZpbGUsCiAJCQkJICBidWZIZHItPnRhZy5ibG9ja051bSwKIAkJCQkgIGxvY2FscGFnZSwK IAkJCQkgIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNw YWNlL2ZyZWVzcGFjZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9mcmVlc3BhY2UvZnJlZXNw YWNlLmMKaW5kZXggMDA1ZGVmNTZkY2IuLjczMTczODQ5YmZkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYworKysgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYwpAQCAtMjcxLDcgKzI3MSw3IEBAIEZy ZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVy IG5ibG9ja3MpCiAJICogSWYgbm8gRlNNIGhhcyBiZWVuIGNyZWF0ZWQgeWV0IGZvciB0aGlz IHJlbGF0aW9uLCB0aGVyZSdzIG5vdGhpbmcgdG8KIAkgKiB0cnVuY2F0ZS4KIAkgKi8KLQlp ZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIEZTTV9GT1JLTlVNKSkKKwlp ZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgRlNNX0ZPUktOVU0pKSkKIAkJ cmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKIAogCS8qIEdldCB0aGUgbG9jYXRpb24gaW4g dGhlIEZTTSBvZiB0aGUgZmlyc3QgcmVtb3ZlZCBoZWFwIGJsb2NrICovCkBAIC0zMTcsNyAr MzE3LDcgQEAgRnJlZVNwYWNlTWFwUHJlcGFyZVRydW5jYXRlUmVsKFJlbGF0aW9uIHJlbCwg QmxvY2tOdW1iZXIgbmJsb2NrcykKIAllbHNlCiAJewogCQluZXdfbmZzbWJsb2NrcyA9IGZz bV9sb2dpY2FsX3RvX3BoeXNpY2FsKGZpcnN0X3JlbW92ZWRfYWRkcmVzcyk7Ci0JCWlmIChz bWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgRlNNX0ZPUktOVU0pIDw9IG5ld19u ZnNtYmxvY2tzKQorCQlpZiAoc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJlbCwgRlNN X0ZPUktOVU0pKSA8PSBuZXdfbmZzbWJsb2NrcykKIAkJCXJldHVybiBJbnZhbGlkQmxvY2tO dW1iZXI7CS8qIG5vdGhpbmcgdG8gZG87IHRoZSBGU00gd2FzIGFscmVhZHkKIAkJCQkJCQkJ CQkgKiBzbWFsbGVyICovCiAJfQpAQCAtNTMyLDE0ICs1MzIsMTQgQEAgZnNtX3JlYWRidWYo UmVsYXRpb24gcmVsLCBGU01BZGRyZXNzIGFkZHIsIGJvb2wgZXh0ZW5kKQogewogCUJsb2Nr TnVtYmVyIGJsa25vID0gZnNtX2xvZ2ljYWxfdG9fcGh5c2ljYWwoYWRkcik7CiAJQnVmZmVy CQlidWY7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgZnNtX2ZpbGU7 CiAKIAkvKgogCSAqIENhdXRpb246IHJlLXVzaW5nIHRoaXMgc21nciBwb2ludGVyIGNvdWxk IGZhaWwgaWYgdGhlIHJlbGNhY2hlIGVudHJ5CiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNh ZmUgYXMgbG9uZyBhcyB3ZSBvbmx5IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJl dHdlZW4gaGVyZSBhbmQgdGhlIGxhc3QgdXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJl bG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKKwlmc21fZmlsZSA9IFJlbGF0aW9uR2V0U21n cihyZWwsIEZTTV9GT1JLTlVNKTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZW4ndCBjYWNoZWQg dGhlIHNpemUgb2YgdGhlIEZTTSB5ZXQsIGNoZWNrIGl0IGZpcnN0LiAgQWxzbwpAQCAtNTQ3 LDE5ICs1NDcsMTkgQEAgZnNtX3JlYWRidWYoUmVsYXRpb24gcmVsLCBGU01BZGRyZXNzIGFk ZHIsIGJvb2wgZXh0ZW5kKQogCSAqIHZhbHVlIG1pZ2h0IGJlIHN0YWxlLiAgKFdlIHNlbmQg c21nciBpbnZhbCBtZXNzYWdlcyBvbiB0cnVuY2F0aW9uLCBidXQKIAkgKiBub3Qgb24gZXh0 ZW5zaW9uLikKIAkgKi8KLQlpZiAocmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9S S05VTV0gPT0gSW52YWxpZEJsb2NrTnVtYmVyIHx8Ci0JCWJsa25vID49IHJlbG4tPnNtZ3Jf Y2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dKQorCWlmIChmc21fZmlsZS0+c21ncl9jYWNo ZWRfbmJsb2NrcyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIgfHwKKwkJYmxrbm8gPj0gZnNtX2Zp bGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MpCiAJewogCQkvKiBJbnZhbGlkYXRlIHRoZSBjYWNo ZSBzbyBzbWdybmJsb2NrcyBhc2tzIHRoZSBrZXJuZWwuICovCi0JCXJlbG4tPnNtZ3JfY2Fj aGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlpZiAo c21ncmV4aXN0cyhyZWxuLCBGU01fRk9SS05VTSkpCi0JCQlzbWdybmJsb2NrcyhyZWxuLCBG U01fRk9SS05VTSk7CisJCWZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxp ZEJsb2NrTnVtYmVyOworCQlpZiAoc21ncmV4aXN0cyhmc21fZmlsZSkpCisJCQlzbWdybmJs b2Nrcyhmc21fZmlsZSk7CiAJCWVsc2UKLQkJCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3Nb RlNNX0ZPUktOVU1dID0gMDsKKwkJCWZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0g MDsKIAl9CiAKIAkvKiBIYW5kbGUgcmVxdWVzdHMgYmV5b25kIEVPRiAqLwotCWlmIChibGtu byA+PSByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSkKKwlpZiAoYmxr bm8gPj0gZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MpCiAJewogCQlpZiAoZXh0ZW5k KQogCQkJZnNtX2V4dGVuZChyZWwsIGJsa25vICsgMSk7CkBAIC02MDksNyArNjA5LDcgQEAg ZnNtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIGZzbV9uYmxvY2tzKQogewog CUJsb2NrTnVtYmVyIGZzbV9uYmxvY2tzX25vdzsKIAlQR0FsaWduZWRCbG9jayBwZzsKLQlT TWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUhhbmRsZSBmc21fZmlsZTsKIAogCVBhZ2VJ bml0KChQYWdlKSBwZy5kYXRhLCBCTENLU1osIDApOwogCkBAIC02MzAsMjkgKzYzMCwyOCBA QCBmc21fZXh0ZW5kKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZnNtX25ibG9ja3MpCiAJ ICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5IGRvIHNtZ3It bGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxhc3QgdXNlIG9m IHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKKwlm c21fZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKTsKIAogCS8qCiAJ ICogQ3JlYXRlIHRoZSBGU00gZmlsZSBmaXJzdCBpZiBpdCBkb2Vzbid0IGV4aXN0LiAgSWYK IAkgKiBzbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSBpcyBwb3NpdGl2ZSB0aGVu IGl0IG11c3QgZXhpc3QsIG5vCiAJICogbmVlZCBmb3IgYW4gc21ncmV4aXN0cyBjYWxsLgog CSAqLwotCWlmICgocmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPT0g MCB8fAotCQkgcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPT0gSW52 YWxpZEJsb2NrTnVtYmVyKSAmJgotCQkhc21ncmV4aXN0cyhyZWxuLCBGU01fRk9SS05VTSkp Ci0JCXNtZ3JjcmVhdGUocmVsbiwgRlNNX0ZPUktOVU0sIGZhbHNlKTsKKwlpZiAoKGZzbV9m aWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IDAgfHwKKwkJIGZzbV9maWxlLT5zbWdyX2Nh Y2hlZF9uYmxvY2tzID09IEludmFsaWRCbG9ja051bWJlcikgJiYKKwkJIXNtZ3JleGlzdHMo ZnNtX2ZpbGUpKQorCQlzbWdyY3JlYXRlKGZzbV9maWxlLCBmYWxzZSk7CiAKIAkvKiBJbnZh bGlkYXRlIGNhY2hlIHNvIHRoYXQgc21ncm5ibG9ja3MoKSBhc2tzIHRoZSBrZXJuZWwuICov Ci0JcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JZnNtX25ibG9ja3Nfbm93ID0gc21ncm5ibG9ja3MocmVsbiwgRlNNX0ZP UktOVU0pOworCWZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2Nr TnVtYmVyOworCWZzbV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxvY2tzKGZzbV9maWxlKTsKIAog CS8qIEV4dGVuZCBhcyBuZWVkZWQuICovCiAJd2hpbGUgKGZzbV9uYmxvY2tzX25vdyA8IGZz bV9uYmxvY2tzKQogCXsKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZSgoUGFnZSkgcGcuZGF0 YSwgZnNtX25ibG9ja3Nfbm93KTsKIAotCQlzbWdyZXh0ZW5kKHJlbG4sIEZTTV9GT1JLTlVN LCBmc21fbmJsb2Nrc19ub3csCi0JCQkJICAgcGcuZGF0YSwgZmFsc2UpOworCQlzbWdyZXh0 ZW5kKGZzbV9maWxlLCBmc21fbmJsb2Nrc19ub3csIHBnLmRhdGEsIGZhbHNlKTsKIAkJZnNt X25ibG9ja3Nfbm93Kys7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L3NtZ3IvbWQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCmluZGV4IDM5OTgy OTZhNjJmLi40NTI4ZTQ1YTVjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9z bWdyL21kLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMKQEAgLTY2LDEw ICs2NiwxMCBAQAogICoJb3V0IHRvIGFuIHVubGlua2VkIG9sZCBjb3B5IG9mIGEgc2VnbWVu dCBmaWxlIHRoYXQgd2lsbCBldmVudHVhbGx5CiAgKglkaXNhcHBlYXIuCiAgKgotICoJRmls ZSBkZXNjcmlwdG9ycyBhcmUgc3RvcmVkIGluIHRoZSBwZXItZm9yayBtZF9zZWdfZmRzIGFy cmF5cyBpbnNpZGUKLSAqCVNNZ3JSZWxhdGlvbi4gVGhlIGxlbmd0aCBvZiB0aGVzZSBhcnJh eXMgaXMgc3RvcmVkIGluIG1kX251bV9vcGVuX3NlZ3MuCi0gKglOb3RlIHRoYXQgYSBmb3Jr J3MgbWRfbnVtX29wZW5fc2VncyBoYXZpbmcgYSBzcGVjaWZpYyB2YWx1ZSBkb2VzIG5vdAot ICoJbmVjZXNzYXJpbHkgbWVhbiB0aGUgcmVsYXRpb24gZG9lc24ndCBoYXZlIGFkZGl0aW9u YWwgc2VnbWVudHM7IHdlIG1heQorICoJRmlsZSBkZXNjcmlwdG9ycyBhcmUgc3RvcmVkIGlu IHRoZSBtZF9zZWdfZmRzIGFycmF5IGluc2lkZQorICoJU01nckZpbGVEYXRhLiBUaGUgbGVu Z3RoIG9mIHRoZSBhcnJheSBpcyBzdG9yZWQgaW4gbWRfbnVtX29wZW5fc2Vncy4KKyAqCU5v dGUgdGhhdCBtZF9udW1fb3Blbl9zZWdzIGhhdmluZyBhIHNwZWNpZmljIHZhbHVlIGRvZXMg bm90CisgKgluZWNlc3NhcmlseSBtZWFuIHRoZSBmaWxlIGRvZXNuJ3QgaGF2ZSBhZGRpdGlv bmFsIHNlZ21lbnRzOyB3ZSBtYXkKICAqCWp1c3Qgbm90IGhhdmUgb3BlbmVkIHRoZSBuZXh0 IHNlZ21lbnQgeWV0LiAgKFdlIGNvdWxkIG5vdCBoYXZlICJhbGwKICAqCXNlZ21lbnRzIGFy ZSBpbiB0aGUgYXJyYXkiIGFzIGFuIGludmFyaWFudCBhbnl3YXksIHNpbmNlIGFub3RoZXIg YmFja2VuZAogICoJY291bGQgZXh0ZW5kIHRoZSByZWxhdGlvbiB3aGlsZSB3ZSBhcmVuJ3Qg bG9va2luZy4pICBXZSBkbyBub3QgaGF2ZQpAQCAtMTIxLDI2ICsxMjEsMTggQEAgc3RhdGlj IE1lbW9yeUNvbnRleHQgTWRDeHQ7CQkvKiBjb250ZXh0IGZvciBhbGwgTWRmZFZlYyBvYmpl Y3RzICovCiAKIAogLyogbG9jYWwgcm91dGluZXMgKi8KLXN0YXRpYyB2b2lkIG1kdW5saW5r Zm9yayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051 bSwKLQkJCQkJCSBib29sIGlzUmVkbyk7Ci1zdGF0aWMgTWRmZFZlYyAqbWRvcGVuZm9yayhT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpOwot c3RhdGljIHZvaWQgcmVnaXN0ZXJfZGlydHlfc2VnbWVudChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkgICBNZGZkVmVjICpzZWcpOwotc3RhdGlj IHZvaWQgcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJs b2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCQlCbG9ja051bWJlciBzZWdu byk7Ci1zdGF0aWMgdm9pZCByZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChSZWxGaWxlTG9jYXRv ckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJCUJsb2Nr TnVtYmVyIHNlZ25vKTsKLXN0YXRpYyB2b2lkIF9mZHZlY19yZXNpemUoU01nclJlbGF0aW9u IHJlbG4sCi0JCQkJCQkgIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCSAgaW50IG5zZWcp Owotc3RhdGljIGNoYXIgKl9tZGZkX3NlZ3BhdGgoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKLQkJCQkJCSAgIEJsb2NrTnVtYmVyIHNlZ25vKTsKLXN0YXRpYyBN ZGZkVmVjICpfbWRmZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtubywKK3N0YXRpYyB2b2lkIG1kdW5saW5rZm9yayhTTWdyRmlsZUxvY2F0b3Igc2xvY2F0 b3IsIGJvb2wgaXNSZWRvKTsKK3N0YXRpYyBNZGZkVmVjICptZG9wZW5mb3JrKFNNZ3JGaWxl SGFuZGxlIHNmaWxlLCBpbnQgYmVoYXZpb3IpOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfZGly dHlfc2VnbWVudChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgTWRmZFZlYyAqc2VnKTsKK3N0YXRp YyB2b2lkIHJlZ2lzdGVyX3VubGlua19zZWdtZW50KFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRv ciwgQmxvY2tOdW1iZXIgc2Vnbm8pOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfZm9yZ2V0X3Jl cXVlc3QoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBCbG9ja051bWJlciBzZWdubyk7Citz dGF0aWMgdm9pZCBfZmR2ZWNfcmVzaXplKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBpbnQgbnNl Zyk7CitzdGF0aWMgY2hhciAqX21kZmRfc2VncGF0aChTTWdyRmlsZUhhbmRsZSBzZmlsZSwg QmxvY2tOdW1iZXIgc2Vnbm8pOworc3RhdGljIE1kZmRWZWMgKl9tZGZkX29wZW5zZWcoU01n ckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJICBCbG9ja051bWJlciBzZWdubywgaW50IG9m bGFncyk7Ci1zdGF0aWMgTWRmZFZlYyAqX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtubywKK3N0YXRpYyBNZGZkVmVjICpfbWRmZF9nZXRzZWcoU01n ckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJIEJsb2NrTnVtYmVyIGJsa25vLCBib29sIHNr aXBGc3luYywgaW50IGJlaGF2aW9yKTsKLXN0YXRpYyBCbG9ja051bWJlciBfbWRuYmxvY2tz KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJICBNZGZk VmVjICpzZWcpOworc3RhdGljIEJsb2NrTnVtYmVyIF9tZG5ibG9ja3MoU01nckZpbGVIYW5k bGUgc2ZpbGUsIE1kZmRWZWMgKnNlZyk7CiAKIAogLyoKQEAgLTE2MCw3ICsxNTIsNyBAQCBt ZGluaXQodm9pZCkKICAqIE5vdGU6IHRoaXMgd2lsbCByZXR1cm4gdHJ1ZSBmb3IgbGluZ2Vy aW5nIGZpbGVzLCB3aXRoIHBlbmRpbmcgZGVsZXRpb25zCiAgKi8KIGJvb2wKLW1kZXhpc3Rz KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0pCittZGV4aXN0cyhTTWdy RmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKgogCSAqIENsb3NlIGl0IGZpcnN0LCB0byBlbnN1 cmUgdGhhdCB3ZSBub3RpY2UgaWYgdGhlIGZvcmsgaGFzIGJlZW4gdW5saW5rZWQKQEAgLTE2 OCw5ICsxNjAsOSBAQCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrTnVtKQogCSAqIHdoaWNoIGFscmVhZHkgY2xvc2VzIHJlbGF0aW9ucyB3aGVuIGRyb3Bw aW5nIHRoZW0uCiAJICovCiAJaWYgKCFJblJlY292ZXJ5KQotCQltZGNsb3NlKHJlbG4sIGZv cmtOdW0pOworCQltZGNsb3NlKHNmaWxlKTsKIAotCXJldHVybiAobWRvcGVuZm9yayhyZWxu LCBmb3JrTnVtLCBFWFRFTlNJT05fUkVUVVJOX05VTEwpICE9IE5VTEwpOworCXJldHVybiAo bWRvcGVuZm9yayhzZmlsZSwgRVhURU5TSU9OX1JFVFVSTl9OVUxMKSAhPSBOVUxMKTsKIH0K IAogLyoKQEAgLTE3OSwxNiArMTcxLDE2IEBAIG1kZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtOdW0pCiAgKiBJZiBpc1JlZG8gaXMgdHJ1ZSwgaXQncyBva2F5 IGZvciB0aGUgcmVsYXRpb24gdG8gZXhpc3QgYWxyZWFkeS4KICAqLwogdm9pZAotbWRjcmVh dGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgYm9vbCBpc1JlZG8p CittZGNyZWF0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pCiB7CiAJTWRm ZFZlYyAgICAqbWRmZDsKIAljaGFyCSAgICpwYXRoOwogCUZpbGUJCWZkOwogCi0JaWYgKGlz UmVkbyAmJiByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtOdW1dID4gMCkKKwlpZiAoaXNS ZWRvICYmIHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID4gMCkKIAkJcmV0dXJuOwkJCQkJLyog Y3JlYXRlZCBhbmQgb3BlbmVkIGFscmVhZHkuLi4gKi8KIAotCUFzc2VydChyZWxuLT5tZF9u dW1fb3Blbl9zZWdzW2ZvcmtOdW1dID09IDApOworCUFzc2VydChzZmlsZS0+bWRfbnVtX29w ZW5fc2VncyA9PSAwKTsKIAogCS8qCiAJICogV2UgbWF5IGJlIHVzaW5nIHRoZSB0YXJnZXQg dGFibGUgc3BhY2UgZm9yIHRoZSBmaXJzdCB0aW1lIGluIHRoaXMKQEAgLTE5OSwxMSArMTkx LDExIEBAIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtOdW0s IGJvb2wgaXNSZWRvKQogCSAqIHNob3VsZCBiZSBoZXJlIGFuZCBub3QgaW4gY29tbWFuZHMv dGFibGVzcGFjZS5jPyAgQnV0IHRoYXQgd291bGQgaW1wbHkKIAkgKiBpbXBvcnRpbmcgYSBs b3Qgb2Ygc3R1ZmYgdGhhdCBzbWdyLmMgb3VnaHRuJ3Qga25vdywgZWl0aGVyLgogCSAqLwot CVRhYmxlc3BhY2VDcmVhdGVEYnNwYWNlKHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5z cGNPaWQsCi0JCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCVRh Ymxlc3BhY2VDcmVhdGVEYnNwYWNlKHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNP aWQsCisJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAogCQkJCQkJ CWlzUmVkbyk7CiAKLQlwYXRoID0gcmVscGF0aChyZWxuLT5zbWdyX3Jsb2NhdG9yLCBmb3Jr TnVtKTsKKwlwYXRoID0gc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpOwogCiAJ ZmQgPSBQYXRoTmFtZU9wZW5GaWxlKHBhdGgsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wg fCBQR19CSU5BUlkpOwogCkBAIC0yMjUsOCArMjE3LDggQEAgbWRjcmVhdGUoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgYm9vbCBpc1JlZG8pCiAKIAlwZnJlZShw YXRoKTsKIAotCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya051bSwgMSk7Ci0JbWRmZCA9ICZy ZWxuLT5tZF9zZWdfZmRzW2ZvcmtOdW1dWzBdOworCV9mZHZlY19yZXNpemUoc2ZpbGUsIDEp OworCW1kZmQgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbMF07CiAJbWRmZC0+bWRmZF92ZmQgPSBm ZDsKIAltZGZkLT5tZGZkX3NlZ25vID0gMDsKIH0KQEAgLTI3OCwxNiArMjcwLDkgQEAgbWRj cmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgYm9vbCBpc1Jl ZG8pCiAgKiB3ZSBhcmUgdXN1YWxseSBub3QgaW4gYSB0cmFuc2FjdGlvbiBhbnltb3JlIHdo ZW4gdGhpcyBpcyBjYWxsZWQuCiAgKi8KIHZvaWQKLW1kdW5saW5rKFJlbEZpbGVMb2NhdG9y QmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLCBib29sIGlzUmVkbykKK21k dW5saW5rKFNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9vbCBpc1JlZG8pCiB7Ci0JLyog Tm93IGRvIHRoZSBwZXItZm9yayB3b3JrICovCi0JaWYgKGZvcmtOdW0gPT0gSW52YWxpZEZv cmtOdW1iZXIpCi0JewotCQlmb3IgKGZvcmtOdW0gPSAwOyBmb3JrTnVtIDw9IE1BWF9GT1JL TlVNOyBmb3JrTnVtKyspCi0JCQltZHVubGlua2ZvcmsocmxvY2F0b3IsIGZvcmtOdW0sIGlz UmVkbyk7Ci0JfQotCWVsc2UKLQkJbWR1bmxpbmtmb3JrKHJsb2NhdG9yLCBmb3JrTnVtLCBp c1JlZG8pOworCW1kdW5saW5rZm9yayhzbG9jYXRvciwgaXNSZWRvKTsKIH0KIAogLyoKQEAg LTMxNSwyNSArMzAwLDI1IEBAIGRvX3RydW5jYXRlKGNvbnN0IGNoYXIgKnBhdGgpCiB9CiAK IHN0YXRpYyB2b2lkCi1tZHVubGlua2ZvcmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2Nh dG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sIGJvb2wgaXNSZWRvKQorbWR1bmxpbmtmb3JrKFNN Z3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9vbCBpc1JlZG8pCiB7CiAJY2hhcgkgICAqcGF0 aDsKIAlpbnQJCQlyZXQ7CiAKLQlwYXRoID0gcmVscGF0aChybG9jYXRvciwgZm9ya051bSk7 CisJcGF0aCA9IHNtZ3JmaWxlcGF0aChzbG9jYXRvcik7CiAKIAkvKgogCSAqIERlbGV0ZSBv ciB0cnVuY2F0ZSB0aGUgZmlyc3Qgc2VnbWVudC4KIAkgKi8KLQlpZiAoaXNSZWRvIHx8IGZv cmtOdW0gIT0gTUFJTl9GT1JLTlVNIHx8IFJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChy bG9jYXRvcikpCisJaWYgKGlzUmVkbyB8fCBzbG9jYXRvci5mb3JrbnVtICE9IE1BSU5fRk9S S05VTSB8fCBTTWdyRmlsZUxvY2F0b3JJc1RlbXAoc2xvY2F0b3IpKQogCXsKLQkJaWYgKCFS ZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxvY2F0b3IpKQorCQlpZiAoIVNNZ3JGaWxl TG9jYXRvcklzVGVtcChzbG9jYXRvcikpCiAJCXsKIAkJCS8qIFByZXZlbnQgb3RoZXIgYmFj a2VuZHMnIGZkcyBmcm9tIGhvbGRpbmcgb24gdG8gdGhlIGRpc2sgc3BhY2UgKi8KIAkJCXJl dCA9IGRvX3RydW5jYXRlKHBhdGgpOwogCiAJCQkvKiBGb3JnZXQgYW55IHBlbmRpbmcgc3lu YyByZXF1ZXN0cyBmb3IgdGhlIGZpcnN0IHNlZ21lbnQgKi8KLQkJCXJlZ2lzdGVyX2Zvcmdl dF9yZXF1ZXN0KHJsb2NhdG9yLCBmb3JrTnVtLCAwIC8qIGZpcnN0IHNlZyAqLyApOworCQkJ cmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3Qoc2xvY2F0b3IsIDAgLyogZmlyc3Qgc2VnICovICk7 CiAJCX0KIAkJZWxzZQogCQkJcmV0ID0gMDsKQEAgLTM1NCw3ICszMzksNyBAQCBtZHVubGlu a2ZvcmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtO dW0sIGJvb2wgaXNSZWRvKQogCQlyZXQgPSBkb190cnVuY2F0ZShwYXRoKTsKIAogCQkvKiBS ZWdpc3RlciByZXF1ZXN0IHRvIHVubGluayBmaXJzdCBzZWdtZW50IGxhdGVyICovCi0JCXJl Z2lzdGVyX3VubGlua19zZWdtZW50KHJsb2NhdG9yLCBmb3JrTnVtLCAwIC8qIGZpcnN0IHNl ZyAqLyApOworCQlyZWdpc3Rlcl91bmxpbmtfc2VnbWVudChzbG9jYXRvciwgMCAvKiBmaXJz dCBzZWcgKi8gKTsKIAl9CiAKIAkvKgpAQCAtMzczLDcgKzM1OCw3IEBAIG1kdW5saW5rZm9y ayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwg Ym9vbCBpc1JlZG8pCiAJCXsKIAkJCXNwcmludGYoc2VncGF0aCwgIiVzLiV1IiwgcGF0aCwg c2Vnbm8pOwogCi0JCQlpZiAoIVJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9jYXRv cikpCisJCQlpZiAoIVNNZ3JGaWxlTG9jYXRvcklzVGVtcChzbG9jYXRvcikpCiAJCQl7CiAJ CQkJLyoKIAkJCQkgKiBQcmV2ZW50IG90aGVyIGJhY2tlbmRzJyBmZHMgZnJvbSBob2xkaW5n IG9uIHRvIHRoZSBkaXNrCkBAIC0zODYsNyArMzcxLDcgQEAgbWR1bmxpbmtmb3JrKFJlbEZp bGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLCBib29sIGlz UmVkbykKIAkJCQkgKiBGb3JnZXQgYW55IHBlbmRpbmcgc3luYyByZXF1ZXN0cyBmb3IgdGhp cyBzZWdtZW50IGJlZm9yZSB3ZQogCQkJCSAqIHRyeSB0byB1bmxpbmsuCiAJCQkJICovCi0J CQkJcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QocmxvY2F0b3IsIGZvcmtOdW0sIHNlZ25vKTsK KwkJCQlyZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChzbG9jYXRvciwgc2Vnbm8pOwogCQkJfQog CiAJCQlpZiAodW5saW5rKHNlZ3BhdGgpIDwgMCkKQEAgLTQxNSw3ICs0MDAsNyBAQCBtZHVu bGlua2ZvcmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZv cmtOdW0sIGJvb2wgaXNSZWRvKQogICoJCWNhdXNlcyBpbnRlcnZlbmluZyBmaWxlIHNwYWNl IHRvIGJlY29tZSBmaWxsZWQgd2l0aCB6ZXJvZXMuCiAgKi8KIHZvaWQKLW1kZXh0ZW5kKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2Nr bnVtLAorbWRleHRlbmQoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2Nr bnVtLAogCQkgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYykKIHsKIAlvZmZfdAkJc2Vl a3BvczsKQEAgLTQyNCw3ICs0MDksNyBAQCBtZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKIAogCS8qIFRoaXMg YXNzZXJ0IGlzIHRvbyBleHBlbnNpdmUgdG8gaGF2ZSBvbiBub3JtYWxseSAuLi4gKi8KICNp ZmRlZiBDSEVDS19XUklURV9WU19FWFRFTkQKLQlBc3NlcnQoYmxvY2tudW0gPj0gbWRuYmxv Y2tzKHJlbG4sIGZvcmtudW0pKTsKKwlBc3NlcnQoYmxvY2tudW0gPj0gbWRuYmxvY2tzKHNm aWxlKSk7CiAjZW5kaWYKIAogCS8qCkBAIC00MzcsMTAgKzQyMiwxMCBAQCBtZGV4dGVuZChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9j a251bSwKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1f TElNSVRfRVhDRUVERUQpLAogCQkJCSBlcnJtc2coImNhbm5vdCBleHRlbmQgZmlsZSBcIiVz XCIgYmV5b25kICV1IGJsb2NrcyIsCi0JCQkJCQlyZWxwYXRoKHJlbG4tPnNtZ3JfcmxvY2F0 b3IsIGZvcmtudW0pLAorCQkJCQkJc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3Ip LAogCQkJCQkJSW52YWxpZEJsb2NrTnVtYmVyKSkpOwogCi0JdiA9IF9tZGZkX2dldHNlZyhy ZWxuLCBmb3JrbnVtLCBibG9ja251bSwgc2tpcEZzeW5jLCBFWFRFTlNJT05fQ1JFQVRFKTsK Kwl2ID0gX21kZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251bSwgc2tpcEZzeW5jLCBFWFRFTlNJ T05fQ1JFQVRFKTsKIAogCXNlZWtwb3MgPSAob2ZmX3QpIEJMQ0tTWiAqIChibG9ja251bSAl ICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSk7CiAKQEAgLTQ2MywxMCArNDQ4LDEwIEBA IG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIGJsb2NrbnVtLAogCQkJCSBlcnJoaW50KCJDaGVjayBmcmVlIGRpc2sgc3BhY2Uu IikpKTsKIAl9CiAKLQlpZiAoIXNraXBGc3luYyAmJiAhU21ncklzVGVtcChyZWxuKSkKLQkJ cmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3JrbnVtLCB2KTsKKwlpZiAoIXNraXBG c3luYyAmJiAhU21ncklzVGVtcChzZmlsZSkpCisJCXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQo c2ZpbGUsIHYpOwogCi0JQXNzZXJ0KF9tZG5ibG9ja3MocmVsbiwgZm9ya251bSwgdikgPD0g KChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwlBc3NlcnQoX21kbmJsb2NrcyhzZmls ZSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKIH0KIAogLyoKQEAgLTQ4 MCwxNyArNDY1LDE3IEBAIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICogaW52ZW50IG9uZSBvdXQgb2Yg d2hvbGUgY2xvdGguCiAgKi8KIHN0YXRpYyBNZGZkVmVjICoKLW1kb3BlbmZvcmsoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKQorbWRvcGVu Zm9yayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgaW50IGJlaGF2aW9yKQogewogCU1kZmRWZWMg ICAgKm1kZmQ7CiAJY2hhcgkgICAqcGF0aDsKIAlGaWxlCQlmZDsKIAogCS8qIE5vIHdvcmsg aWYgYWxyZWFkeSBvcGVuICovCi0JaWYgKHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251 bV0gPiAwKQotCQlyZXR1cm4gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bMF07CisJaWYg KHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID4gMCkKKwkJcmV0dXJuICZzZmlsZS0+bWRfc2Vn X2Zkc1swXTsKIAotCXBhdGggPSByZWxwYXRoKHJlbG4tPnNtZ3JfcmxvY2F0b3IsIGZvcmtu dW0pOworCXBhdGggPSBzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcik7CiAKIAlm ZCA9IFBhdGhOYW1lT3BlbkZpbGUocGF0aCwgT19SRFdSIHwgUEdfQklOQVJZKTsKIApAQCAt NTA5LDEyICs0OTQsMTIgQEAgbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpCiAKIAlwZnJlZShwYXRoKTsKIAotCV9mZHZl Y19yZXNpemUocmVsbiwgZm9ya251bSwgMSk7Ci0JbWRmZCA9ICZyZWxuLT5tZF9zZWdfZmRz W2ZvcmtudW1dWzBdOworCV9mZHZlY19yZXNpemUoc2ZpbGUsIDEpOworCW1kZmQgPSAmc2Zp bGUtPm1kX3NlZ19mZHNbMF07CiAJbWRmZC0+bWRmZF92ZmQgPSBmZDsKIAltZGZkLT5tZGZk X3NlZ25vID0gMDsKIAotCUFzc2VydChfbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0sIG1kZmQp IDw9ICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSk7CisJQXNzZXJ0KF9tZG5ibG9ja3Mo c2ZpbGUsIG1kZmQpIDw9ICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSk7CiAKIAlyZXR1 cm4gbWRmZDsKIH0KQEAgLTUyMywyMCArNTA4LDE5IEBAIG1kb3BlbmZvcmsoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKQogICogIG1kb3Bl bigpIC0tIEluaXRpYWxpemUgbmV3bHktb3BlbmVkIHJlbGF0aW9uLgogICovCiB2b2lkCi1t ZG9wZW4oU01nclJlbGF0aW9uIHJlbG4pCittZG9wZW4oU01nckZpbGVIYW5kbGUgc2ZpbGUp CiB7CiAJLyogbWFyayBpdCBub3Qgb3BlbiAqLwotCWZvciAoaW50IGZvcmtudW0gPSAwOyBm b3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCXJlbG4tPm1kX251bV9vcGVu X3NlZ3NbZm9ya251bV0gPSAwOworCXNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID0gMDsKIH0K IAogLyoKICAqCW1kY2xvc2UoKSAtLSBDbG9zZSB0aGUgc3BlY2lmaWVkIHJlbGF0aW9uLCBp ZiBpdCBpc24ndCBjbG9zZWQgYWxyZWFkeS4KICAqLwogdm9pZAotbWRjbG9zZShTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorbWRjbG9zZShTTWdyRmlsZUhhbmRs ZSBzZmlsZSkKIHsKLQlpbnQJCQlub3BlbnNlZ3MgPSByZWxuLT5tZF9udW1fb3Blbl9zZWdz W2ZvcmtudW1dOworCWludAkJCW5vcGVuc2VncyA9IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdz OwogCiAJLyogTm8gd29yayBpZiBhbHJlYWR5IGNsb3NlZCAqLwogCWlmIChub3BlbnNlZ3Mg PT0gMCkKQEAgLTU0NSwxMCArNTI5LDEwIEBAIG1kY2xvc2UoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSkKIAkvKiBjbG9zZSBzZWdtZW50cyBzdGFydGluZyBmcm9t IHRoZSBlbmQgKi8KIAl3aGlsZSAobm9wZW5zZWdzID4gMCkKIAl7Ci0JCU1kZmRWZWMgICAg KnYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtub3BlbnNlZ3MgLSAxXTsKKwkJTWRm ZFZlYyAgICAqdiA9ICZzZmlsZS0+bWRfc2VnX2Zkc1tub3BlbnNlZ3MgLSAxXTsKIAogCQlG aWxlQ2xvc2Uodi0+bWRmZF92ZmQpOwotCQlfZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0s IG5vcGVuc2VncyAtIDEpOworCQlfZmR2ZWNfcmVzaXplKHNmaWxlLCBub3BlbnNlZ3MgLSAx KTsKIAkJbm9wZW5zZWdzLS07CiAJfQogfQpAQCAtNTU3LDEzICs1NDEsMTMgQEAgbWRjbG9z ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICoJbWRwcmVmZXRj aCgpIC0tIEluaXRpYXRlIGFzeW5jaHJvbm91cyByZWFkIG9mIHRoZSBzcGVjaWZpZWQgYmxv Y2sgb2YgYSByZWxhdGlvbgogICovCiBib29sCi1tZHByZWZldGNoKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQorbWRwcmVm ZXRjaChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pCiB7CiAj aWZkZWYgVVNFX1BSRUZFVENICiAJb2ZmX3QJCXNlZWtwb3M7CiAJTWRmZFZlYyAgICAqdjsK IAotCXYgPSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGZhbHNlLAor CXYgPSBfbWRmZF9nZXRzZWcoc2ZpbGUsIGJsb2NrbnVtLCBmYWxzZSwKIAkJCQkJIEluUmVj b3ZlcnkgPyBFWFRFTlNJT05fUkVUVVJOX05VTEwgOiBFWFRFTlNJT05fRkFJTCk7CiAJaWYg KHYgPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNTg1LDggKzU2OSw3IEBAIG1kcHJl ZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgYmxvY2tudW0pCiAgKiBjb25zaWRlcmFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiBkb2lu ZyBzbyBpbmRpdmlkdWFsbHkuCiAgKi8KIHZvaWQKLW1kd3JpdGViYWNrKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQlCbG9ja051bWJlciBibG9ja251bSwg QmxvY2tOdW1iZXIgbmJsb2NrcykKK21kd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxl LCBCbG9ja051bWJlciBibG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIHsKIAkvKgog CSAqIElzc3VlIGZsdXNoIHJlcXVlc3RzIGluIGFzIGZldyByZXF1ZXN0cyBhcyBwb3NzaWJs ZTsgaGF2ZSB0byBzcGxpdCBhdApAQCAtNjAwLDcgKzU4Myw3IEBAIG1kd3JpdGViYWNrKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCWludAkJCXNlZ251bV9z dGFydCwKIAkJCQkJc2VnbnVtX2VuZDsKIAotCQl2ID0gX21kZmRfZ2V0c2VnKHJlbG4sIGZv cmtudW0sIGJsb2NrbnVtLCB0cnVlIC8qIG5vdCB1c2VkICovICwKKwkJdiA9IF9tZGZkX2dl dHNlZyhzZmlsZSwgYmxvY2tudW0sIHRydWUgLyogbm90IHVzZWQgKi8gLAogCQkJCQkJIEVY VEVOU0lPTl9ET05UX09QRU4pOwogCiAJCS8qCkBAIC02MzcsMjAgKzYyMCwyMSBAQCBtZHdy aXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogICoJbWRy ZWFkKCkgLS0gUmVhZCB0aGUgc3BlY2lmaWVkIGJsb2NrIGZyb20gYSByZWxhdGlvbi4KICAq Lwogdm9pZAotbWRyZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IEJsb2NrTnVtYmVyIGJsb2NrbnVtLAorbWRyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBC bG9ja051bWJlciBibG9ja251bSwKIAkgICBjaGFyICpidWZmZXIpCiB7CiAJb2ZmX3QJCXNl ZWtwb3M7CiAJaW50CQkJbmJ5dGVzOwogCU1kZmRWZWMgICAgKnY7CiAKLQlUUkFDRV9QT1NU R1JFU1FMX1NNR1JfTURfUkVBRF9TVEFSVChmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJ CQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCXJlbG4t PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0 b3IuYmFja2VuZCk7CisJVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01EX1JFQURfU1RBUlQoc2Zp bGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCQlibG9ja251bSwKKwkJCQkJCQkJCQlzZmls ZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCQlzZmlsZS0+c21n cl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdyX3Jsb2NhdG9y LmJhY2tlbmQpOwogCi0JdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251 bSwgZmFsc2UsCisJdiA9IF9tZGZkX2dldHNlZyhzZmlsZSwgYmxvY2tudW0sIGZhbHNlLAog CQkJCQkgRVhURU5TSU9OX0ZBSUwgfCBFWFRFTlNJT05fQ1JFQVRFX1JFQ09WRVJZKTsKIAog CXNlZWtwb3MgPSAob2ZmX3QpIEJMQ0tTWiAqIChibG9ja251bSAlICgoQmxvY2tOdW1iZXIp IFJFTFNFR19TSVpFKSk7CkBAIC02NTksMTEgKzY0MywxMiBAQCBtZHJlYWQoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAK IAluYnl0ZXMgPSBGaWxlUmVhZCh2LT5tZGZkX3ZmZCwgYnVmZmVyLCBCTENLU1osIHNlZWtw b3MsIFdBSVRfRVZFTlRfREFUQV9GSUxFX1JFQUQpOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9T TUdSX01EX1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJCSAgIHJlbG4t PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRv ci5iYWNrZW5kLAorCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9SRUFEX0RPTkUoc2ZpbGUt PnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCSAgIGJsb2NrbnVtLAorCQkJCQkJCQkJICAgc2Zp bGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkgICBzZmlsZS0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCQkJCQkgICBzZmlsZS0+c21ncl9y bG9jYXRvci5iYWNrZW5kLAogCQkJCQkJCQkJICAgbmJ5dGVzLAogCQkJCQkJCQkJICAgQkxD S1NaKTsKIApAQCAtNzAyLDcgKzY4Nyw3IEBAIG1kcmVhZChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKICAqCQl1c2UgbWRl eHRlbmQoKS4KICAqLwogdm9pZAotbWR3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKK21kd3JpdGUoU01nckZpbGVI YW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQljaGFyICpidWZmZXIsIGJv b2wgc2tpcEZzeW5jKQogewogCW9mZl90CQlzZWVrcG9zOwpAQCAtNzExLDE2ICs2OTYsMTcg QEAgbWR3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBibG9ja251bSwKIAogCS8qIFRoaXMgYXNzZXJ0IGlzIHRvbyBleHBlbnNpdmUg dG8gaGF2ZSBvbiBub3JtYWxseSAuLi4gKi8KICNpZmRlZiBDSEVDS19XUklURV9WU19FWFRF TkQKLQlBc3NlcnQoYmxvY2tudW0gPCBtZG5ibG9ja3MocmVsbiwgZm9ya251bSkpOworCUFz c2VydChibG9ja251bSA8IG1kbmJsb2NrcyhzZmlsZSkpOwogI2VuZGlmCiAKLQlUUkFDRV9Q T1NUR1JFU1FMX1NNR1JfTURfV1JJVEVfU1RBUlQoZm9ya251bSwgYmxvY2tudW0sCi0JCQkJ CQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJ IHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkgcmVsbi0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCQkgcmVsbi0+c21n cl9ybG9jYXRvci5iYWNrZW5kKTsKKwlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfV1JJVEVf U1RBUlQoc2ZpbGUtPnNtZ3JfZm9ya251bSwKKwkJCQkJCQkJCQkgYmxvY2tudW0sCisJCQkJ CQkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ CSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJCSBzZmls ZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCQkgc2ZpbGUt PnNtZ3JfcmxvY2F0b3IuYmFja2VuZCk7CiAKLQl2ID0gX21kZmRfZ2V0c2VnKHJlbG4sIGZv cmtudW0sIGJsb2NrbnVtLCBza2lwRnN5bmMsCisJdiA9IF9tZGZkX2dldHNlZyhzZmlsZSwg YmxvY2tudW0sIHNraXBGc3luYywKIAkJCQkJIEVYVEVOU0lPTl9GQUlMIHwgRVhURU5TSU9O X0NSRUFURV9SRUNPVkVSWSk7CiAKIAlzZWVrcG9zID0gKG9mZl90KSBCTENLU1ogKiAoYmxv Y2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwpAQCAtNzI5LDExICs3MTUs MTIgQEAgbWR3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBC bG9ja051bWJlciBibG9ja251bSwKIAogCW5ieXRlcyA9IEZpbGVXcml0ZSh2LT5tZGZkX3Zm ZCwgYnVmZmVyLCBCTENLU1osIHNlZWtwb3MsIFdBSVRfRVZFTlRfREFUQV9GSUxFX1dSSVRF KTsKIAotCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9XUklURV9ET05FKGZvcmtudW0sIGJs b2NrbnVtLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQs Ci0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJ CQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJ cmVsbi0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAorCVRSQUNFX1BPU1RHUkVTUUxfU01HUl9N RF9XUklURV9ET05FKHNmaWxlLT5zbWdyX2ZvcmtudW0sCisJCQkJCQkJCQkJYmxvY2tudW0s CisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJ CQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCQlz ZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJCQkJCQkJCQlzZmls ZS0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAogCQkJCQkJCQkJCW5ieXRlcywKIAkJCQkJCQkJ CQlCTENLU1opOwogCkBAIC03NTQsOCArNzQxLDggQEAgbWR3cml0ZShTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJCQkg ZXJyaGludCgiQ2hlY2sgZnJlZSBkaXNrIHNwYWNlLiIpKSk7CiAJfQogCi0JaWYgKCFza2lw RnN5bmMgJiYgIVNtZ3JJc1RlbXAocmVsbikpCi0JCXJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQo cmVsbiwgZm9ya251bSwgdik7CisJaWYgKCFza2lwRnN5bmMgJiYgIVNtZ3JJc1RlbXAoc2Zp bGUpKQorCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHNmaWxlLCB2KTsKIH0KIAogLyoKQEAg LTc2NywxNiArNzU0LDE2IEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJYXJlIHByZXNlbnQgaW4g dGhlIGFycmF5LgogICovCiBCbG9ja051bWJlcgotbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCittZG5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2Zp bGUpCiB7CiAJTWRmZFZlYyAgICAqdjsKIAlCbG9ja051bWJlciBuYmxvY2tzOwogCUJsb2Nr TnVtYmVyIHNlZ25vOwogCi0JbWRvcGVuZm9yayhyZWxuLCBmb3JrbnVtLCBFWFRFTlNJT05f RkFJTCk7CisJbWRvcGVuZm9yayhzZmlsZSwgRVhURU5TSU9OX0ZBSUwpOwogCiAJLyogbWRv cGVuIGhhcyBvcGVuZWQgdGhlIGZpcnN0IHNlZ21lbnQgKi8KLQlBc3NlcnQocmVsbi0+bWRf bnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApOworCUFzc2VydChzZmlsZS0+bWRfbnVtX29w ZW5fc2VncyA+IDApOwogCiAJLyoKIAkgKiBTdGFydCBmcm9tIHRoZSBsYXN0IG9wZW4gc2Vn bWVudHMsIHRvIGF2b2lkIHJlZHVuZGFudCBzZWVrcy4gIFdlIGhhdmUKQEAgLTc5MSwxMiAr Nzc4LDEyIEBAIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtKQogCSAqIHRoYXQncyBPSyBiZWNhdXNlIHRoZSBjaGVja3BvaW50ZXIgbmV2ZXIgbmVl ZHMgdG8gY29tcHV0ZSByZWxhdGlvbgogCSAqIHNpemUuKQogCSAqLwotCXNlZ25vID0gcmVs bi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSAtIDE7Ci0JdiA9ICZyZWxuLT5tZF9zZWdf ZmRzW2ZvcmtudW1dW3NlZ25vXTsKKwlzZWdubyA9IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdz IC0gMTsKKwl2ID0gJnNmaWxlLT5tZF9zZWdfZmRzW3NlZ25vXTsKIAogCWZvciAoOzspCiAJ ewotCQluYmxvY2tzID0gX21kbmJsb2NrcyhyZWxuLCBmb3JrbnVtLCB2KTsKKwkJbmJsb2Nr cyA9IF9tZG5ibG9ja3Moc2ZpbGUsIHYpOwogCQlpZiAobmJsb2NrcyA+ICgoQmxvY2tOdW1i ZXIpIFJFTFNFR19TSVpFKSkKIAkJCWVsb2coRkFUQUwsICJzZWdtZW50IHRvbyBiaWciKTsK IAkJaWYgKG5ibG9ja3MgPCAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpCkBAIC04MTQs NyArODAxLDcgQEAgbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0pCiAJCSAqIHVuZGVybWluZXMgX21kZmRfZ2V0c2VnJ3MgYXR0ZW1wdHMgdG8gbm90 aWNlIGFuZCByZXBvcnQgYW4gZXJyb3IKIAkJICogdXBvbiBhY2Nlc3MgdG8gYSBtaXNzaW5n IHNlZ21lbnQuCiAJCSAqLwotCQl2ID0gX21kZmRfb3BlbnNlZyhyZWxuLCBmb3JrbnVtLCBz ZWdubywgMCk7CisJCXYgPSBfbWRmZF9vcGVuc2VnKHNmaWxlLCBzZWdubywgMCk7CiAJCWlm ICh2ID09IE5VTEwpCiAJCQlyZXR1cm4gc2Vnbm8gKiAoKEJsb2NrTnVtYmVyKSBSRUxTRUdf U0laRSk7CiAJfQpAQCAtODI0LDcgKzgxMSw3IEBAIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICoJbWR0cnVuY2F0ZSgpIC0tIFRydW5jYXRl IHJlbGF0aW9uIHRvIHNwZWNpZmllZCBudW1iZXIgb2YgYmxvY2tzLgogICovCiB2b2lkCi1t ZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIG5ibG9ja3MpCittZHRydW5jYXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9j a051bWJlciBuYmxvY2tzKQogewogCUJsb2NrTnVtYmVyIGN1cm5ibGs7CiAJQmxvY2tOdW1i ZXIgcHJpb3JibG9ja3M7CkBAIC04MzQsNyArODIxLDcgQEAgbWR0cnVuY2F0ZShTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQog CSAqIE5PVEU6IG1kbmJsb2NrcyBtYWtlcyBzdXJlIHdlIGhhdmUgb3BlbmVkIGFsbCBhY3Rp dmUgc2VnbWVudHMsIHNvIHRoYXQKIAkgKiB0cnVuY2F0aW9uIGxvb3Agd2lsbCBnZXQgdGhl bSBhbGwhCiAJICovCi0JY3VybmJsayA9IG1kbmJsb2NrcyhyZWxuLCBmb3JrbnVtKTsKKwlj dXJuYmxrID0gbWRuYmxvY2tzKHNmaWxlKTsKIAlpZiAobmJsb2NrcyA+IGN1cm5ibGspCiAJ ewogCQkvKiBCb2d1cyByZXF1ZXN0IC4uLiBidXQgbm8gY29tcGxhaW50IGlmIEluUmVjb3Zl cnkgKi8KQEAgLTg0Miw3ICs4MjksNyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJCQlyZXR1cm47 CiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycm1zZygiY291bGQgbm90IHRydW5jYXRlIGZp bGUgXCIlc1wiIHRvICV1IGJsb2NrczogaXQncyBvbmx5ICV1IGJsb2NrcyBub3ciLAotCQkJ CQkJcmVscGF0aChyZWxuLT5zbWdyX3Jsb2NhdG9yLCBmb3JrbnVtKSwKKwkJCQkJCXNtZ3Jm aWxlcGF0aChzZmlsZS0+c21ncl9sb2NhdG9yKSwKIAkJCQkJCW5ibG9ja3MsIGN1cm5ibGsp KSk7CiAJfQogCWlmIChuYmxvY2tzID09IGN1cm5ibGspCkBAIC04NTIsMTQgKzgzOSwxNCBA QCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJs b2NrTnVtYmVyIG5ibG9ja3MpCiAJICogVHJ1bmNhdGUgc2VnbWVudHMsIHN0YXJ0aW5nIGF0 IHRoZSBsYXN0IG9uZS4gU3RhcnRpbmcgYXQgdGhlIGVuZCBtYWtlcwogCSAqIG1hbmFnaW5n IHRoZSBtZW1vcnkgZm9yIHRoZSBmZCBhcnJheSBlYXNpZXIsIHNob3VsZCB0aGVyZSBiZSBl cnJvcnMuCiAJICovCi0JY3Vyb3BlbnNlZ3MgPSByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2Zv cmtudW1dOworCWN1cm9wZW5zZWdzID0gc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3M7CiAJd2hp bGUgKGN1cm9wZW5zZWdzID4gMCkKIAl7CiAJCU1kZmRWZWMgICAgKnY7CiAKIAkJcHJpb3Ji bG9ja3MgPSAoY3Vyb3BlbnNlZ3MgLSAxKSAqIFJFTFNFR19TSVpFOwogCi0JCXYgPSAmcmVs bi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtjdXJvcGVuc2VncyAtIDFdOworCQl2ID0gJnNmaWxl LT5tZF9zZWdfZmRzW2N1cm9wZW5zZWdzIC0gMV07CiAKIAkJaWYgKHByaW9yYmxvY2tzID4g bmJsb2NrcykKIAkJewpAQCAtODczLDE0ICs4NjAsMTQgQEAgbWR0cnVuY2F0ZShTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQog CQkJCQkJIGVycm1zZygiY291bGQgbm90IHRydW5jYXRlIGZpbGUgXCIlc1wiOiAlbSIsCiAJ CQkJCQkJCUZpbGVQYXRoTmFtZSh2LT5tZGZkX3ZmZCkpKSk7CiAKLQkJCWlmICghU21ncklz VGVtcChyZWxuKSkKLQkJCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0s IHYpOworCQkJaWYgKCFTbWdySXNUZW1wKHNmaWxlKSkKKwkJCQlyZWdpc3Rlcl9kaXJ0eV9z ZWdtZW50KHNmaWxlLCB2KTsKIAogCQkJLyogd2UgbmV2ZXIgZHJvcCB0aGUgMXN0IHNlZ21l bnQgKi8KLQkJCUFzc2VydCh2ICE9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dWzBdKTsK KwkJCUFzc2VydCh2ICE9ICZzZmlsZS0+bWRfc2VnX2Zkc1swXSk7CiAKIAkJCUZpbGVDbG9z ZSh2LT5tZGZkX3ZmZCk7Ci0JCQlfZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIGN1cm9w ZW5zZWdzIC0gMSk7CisJCQlfZmR2ZWNfcmVzaXplKHNmaWxlLCBjdXJvcGVuc2VncyAtIDEp OwogCQl9CiAJCWVsc2UgaWYgKHByaW9yYmxvY2tzICsgKChCbG9ja051bWJlcikgUkVMU0VH X1NJWkUpID4gbmJsb2NrcykKIAkJewpAQCAtODk5LDggKzg4Niw4IEBAIG1kdHJ1bmNhdGUo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbmJs b2NrcykKIAkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB0cnVuY2F0ZSBmaWxlIFwiJXNcIiB0 byAldSBibG9ja3M6ICVtIiwKIAkJCQkJCQkJRmlsZVBhdGhOYW1lKHYtPm1kZmRfdmZkKSwK IAkJCQkJCQkJbmJsb2NrcykpKTsKLQkJCWlmICghU21ncklzVGVtcChyZWxuKSkKLQkJCQly ZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCQkJaWYgKCFTbWdy SXNUZW1wKHNmaWxlKSkKKwkJCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHNmaWxlLCB2KTsK IAkJfQogCQllbHNlCiAJCXsKQEAgLTkyNiw3ICs5MTMsNyBAQCBtZHRydW5jYXRlKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3Mp CiAgKiBzZWdtZW50IG1heSBzdXJ2aXZlIHJlY292ZXJ5LCByZWludHJvZHVjaW5nIHVud2Fu dGVkIGRhdGEgaW50byB0aGUgdGFibGUuCiAgKi8KIHZvaWQKLW1kaW1tZWRzeW5jKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCittZGltbWVkc3luYyhTTWdyRmls ZUhhbmRsZSBzZmlsZSkKIHsKIAlpbnQJCQlzZWdubzsKIAlpbnQJCQltaW5faW5hY3RpdmVf c2VnOwpAQCAtOTM1LDkgKzkyMiw5IEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJICogTk9URTogbWRuYmxvY2tzIG1ha2VzIHN1cmUg d2UgaGF2ZSBvcGVuZWQgYWxsIGFjdGl2ZSBzZWdtZW50cywgc28gdGhhdAogCSAqIGZzeW5j IGxvb3Agd2lsbCBnZXQgdGhlbSBhbGwhCiAJICovCi0JbWRuYmxvY2tzKHJlbG4sIGZvcmtu dW0pOworCW1kbmJsb2NrcyhzZmlsZSk7CiAKLQltaW5faW5hY3RpdmVfc2VnID0gc2Vnbm8g PSByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOworCW1pbl9pbmFjdGl2ZV9zZWcg PSBzZWdubyA9IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzOwogCiAJLyoKIAkgKiBUZW1wb3Jh cmlseSBvcGVuIGluYWN0aXZlIHNlZ21lbnRzLCB0aGVuIGNsb3NlIHRoZW0gYWZ0ZXIgc3lu Yy4gIFRoZXJlCkBAIC05NDUsMTIgKzkzMiwxMiBAQCBtZGltbWVkc3luYyhTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogCSAqIGlzIGhhcm1sZXNzLiAgV2UgZG9u J3QgYm90aGVyIHRvIGNsZWFuIHRoZW0gdXAgYW5kIHRha2UgYSByaXNrIG9mCiAJICogZnVy dGhlciB0cm91YmxlLiAgVGhlIG5leHQgbWRjbG9zZSgpIHdpbGwgc29vbiBjbG9zZSB0aGVt LgogCSAqLwotCXdoaWxlIChfbWRmZF9vcGVuc2VnKHJlbG4sIGZvcmtudW0sIHNlZ25vLCAw KSAhPSBOVUxMKQorCXdoaWxlIChfbWRmZF9vcGVuc2VnKHNmaWxlLCBzZWdubywgMCkgIT0g TlVMTCkKIAkJc2Vnbm8rKzsKIAogCXdoaWxlIChzZWdubyA+IDApCiAJewotCQlNZGZkVmVj ICAgICp2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bc2Vnbm8gLSAxXTsKKwkJTWRm ZFZlYyAgICAqdiA9ICZzZmlsZS0+bWRfc2VnX2Zkc1tzZWdubyAtIDFdOwogCiAJCWlmIChG aWxlU3luYyh2LT5tZGZkX3ZmZCwgV0FJVF9FVkVOVF9EQVRBX0ZJTEVfSU1NRURJQVRFX1NZ TkMpIDwgMCkKIAkJCWVyZXBvcnQoZGF0YV9zeW5jX2VsZXZlbChFUlJPUiksCkBAIC05NjIs NyArOTQ5LDcgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSkKIAkJaWYgKHNlZ25vID4gbWluX2luYWN0aXZlX3NlZykKIAkJewogCQkJRmls ZUNsb3NlKHYtPm1kZmRfdmZkKTsKLQkJCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwg c2Vnbm8gLSAxKTsKKwkJCV9mZHZlY19yZXNpemUoc2ZpbGUsIHNlZ25vIC0gMSk7CiAJCX0K IAogCQlzZWduby0tOwpAQCAtOTc5LDE0ICs5NjYsMTQgQEAgbWRpbW1lZHN5bmMoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKICAqIGVub3VnaCB0byBiZSBhIHBl cmZvcm1hbmNlIHByb2JsZW0pLgogICovCiBzdGF0aWMgdm9pZAotcmVnaXN0ZXJfZGlydHlf c2VnbWVudChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZkVmVj ICpzZWcpCityZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBN ZGZkVmVjICpzZWcpCiB7CiAJRmlsZVRhZwkJdGFnOwogCi0JSU5JVF9NRF9GSUxFVEFHKHRh ZywgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBmb3JrbnVtLCBzZWctPm1kZmRfc2Vn bm8pOworCUlOSVRfTURfRklMRVRBRyh0YWcsIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRv ciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBzZWctPm1kZmRfc2Vnbm8pOwogCiAJ LyogVGVtcCByZWxhdGlvbnMgc2hvdWxkIG5ldmVyIGJlIGZzeW5jJ2QgKi8KLQlBc3NlcnQo IVNtZ3JJc1RlbXAocmVsbikpOworCUFzc2VydCghU21ncklzVGVtcChzZmlsZSkpOwogCiAJ aWYgKCFSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfUkVRVUVTVCwgZmFsc2UgLyog cmV0cnlPbkVycm9yICovICkpCiAJewpAQCAtMTAwNSwxNSArOTkyLDE0IEBAIHJlZ2lzdGVy X2RpcnR5X3NlZ21lbnQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg TWRmZFZlYyAqc2VnKQogICogcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoKSAtLSBTY2hlZHVs ZSBhIGZpbGUgdG8gYmUgZGVsZXRlZCBhZnRlciBuZXh0IGNoZWNrcG9pbnQKICAqLwogc3Rh dGljIHZvaWQKLXJlZ2lzdGVyX3VubGlua19zZWdtZW50KFJlbEZpbGVMb2NhdG9yQmFja2Vu ZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJQmxvY2tOdW1iZXIgc2Vn bm8pCityZWdpc3Rlcl91bmxpbmtfc2VnbWVudChTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3Is IEJsb2NrTnVtYmVyIHNlZ25vKQogewogCUZpbGVUYWcJCXRhZzsKIAotCUlOSVRfTURfRklM RVRBRyh0YWcsIHJsb2NhdG9yLmxvY2F0b3IsIGZvcmtudW0sIHNlZ25vKTsKKwlJTklUX01E X0ZJTEVUQUcodGFnLCBzbG9jYXRvci5sb2NhdG9yLCBzbG9jYXRvci5mb3JrbnVtLCBzZWdu byk7CiAKIAkvKiBTaG91bGQgbmV2ZXIgYmUgdXNlZCB3aXRoIHRlbXAgcmVsYXRpb25zICov Ci0JQXNzZXJ0KCFSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxvY2F0b3IpKTsKKwlB c3NlcnQoIVNNZ3JGaWxlTG9jYXRvcklzVGVtcChzbG9jYXRvcikpOwogCiAJUmVnaXN0ZXJT eW5jUmVxdWVzdCgmdGFnLCBTWU5DX1VOTElOS19SRVFVRVNULCB0cnVlIC8qIHJldHJ5T25F cnJvciAqLyApOwogfQpAQCAtMTAyMiwxMiArMTAwOCwxMSBAQCByZWdpc3Rlcl91bmxpbmtf c2VnbWVudChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a251bSwKICAqIHJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KCkgLS0gZm9yZ2V0IGFueSBmc3lu Y3MgZm9yIGEgcmVsYXRpb24gZm9yaydzIHNlZ21lbnQKICAqLwogc3RhdGljIHZvaWQKLXJl Z2lzdGVyX2ZvcmdldF9yZXF1ZXN0KFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwg Rm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJQmxvY2tOdW1iZXIgc2Vnbm8pCityZWdpc3Rl cl9mb3JnZXRfcmVxdWVzdChTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIEJsb2NrTnVtYmVy IHNlZ25vKQogewogCUZpbGVUYWcJCXRhZzsKIAotCUlOSVRfTURfRklMRVRBRyh0YWcsIHJs b2NhdG9yLmxvY2F0b3IsIGZvcmtudW0sIHNlZ25vKTsKKwlJTklUX01EX0ZJTEVUQUcodGFn LCBzbG9jYXRvci5sb2NhdG9yLCBzbG9jYXRvci5mb3JrbnVtLCBzZWdubyk7CiAKIAlSZWdp c3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfRk9SR0VUX1JFUVVFU1QsIHRydWUgLyogcmV0 cnlPbkVycm9yICovICk7CiB9CkBAIC0xMDUwLDU3ICsxMDM1LDI1IEBAIEZvcmdldERhdGFi YXNlU3luY1JlcXVlc3RzKE9pZCBkYmlkKQogCVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywg U1lOQ19GSUxURVJfUkVRVUVTVCwgdHJ1ZSAvKiByZXRyeU9uRXJyb3IgKi8gKTsKIH0KIAot LyoKLSAqIERyb3BSZWxhdGlvbkZpbGVzIC0tIGRyb3AgZmlsZXMgb2YgYWxsIGdpdmVuIHJl bGF0aW9ucwotICovCi12b2lkCi1Ecm9wUmVsYXRpb25GaWxlcyhSZWxGaWxlTG9jYXRvciAq ZGVscmVscywgaW50IG5kZWxyZWxzLCBib29sIGlzUmVkbykKLXsKLQlTTWdyUmVsYXRpb24g KnNyZWxzOwotCWludAkJCWk7Ci0KLQlzcmVscyA9IHBhbGxvYyhzaXplb2YoU01nclJlbGF0 aW9uKSAqIG5kZWxyZWxzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbmRlbHJlbHM7IGkrKykKLQl7 Ci0JCVNNZ3JSZWxhdGlvbiBzcmVsID0gc21ncm9wZW4oZGVscmVsc1tpXSwgSW52YWxpZEJh Y2tlbmRJZCk7Ci0KLQkJaWYgKGlzUmVkbykKLQkJewotCQkJRm9ya051bWJlcglmb3JrOwot Ci0JCQlmb3IgKGZvcmsgPSAwOyBmb3JrIDw9IE1BWF9GT1JLTlVNOyBmb3JrKyspCi0JCQkJ WExvZ0Ryb3BSZWxhdGlvbihkZWxyZWxzW2ldLCBmb3JrKTsKLQkJfQotCQlzcmVsc1tpXSA9 IHNyZWw7Ci0JfQotCi0Jc21ncmRvdW5saW5rYWxsKHNyZWxzLCBuZGVscmVscywgaXNSZWRv KTsKLQotCWZvciAoaSA9IDA7IGkgPCBuZGVscmVsczsgaSsrKQotCQlzbWdyY2xvc2Uoc3Jl bHNbaV0pOwotCXBmcmVlKHNyZWxzKTsKLX0KLQogCiAvKgogICoJX2ZkdmVjX3Jlc2l6ZSgp IC0tIFJlc2l6ZSB0aGUgZm9yaydzIG9wZW4gc2VnbWVudHMgYXJyYXkKICAqLwogc3RhdGlj IHZvaWQKLV9mZHZlY19yZXNpemUoU01nclJlbGF0aW9uIHJlbG4sCi0JCQkgIEZvcmtOdW1i ZXIgZm9ya251bSwKK19mZHZlY19yZXNpemUoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkg IGludCBuc2VnKQogewogCWlmIChuc2VnID09IDApCiAJewotCQlpZiAocmVsbi0+bWRfbnVt X29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApCisJCWlmIChzZmlsZS0+bWRfbnVtX29wZW5fc2Vn cyA+IDApCiAJCXsKLQkJCXBmcmVlKHJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV0pOwotCQkJ cmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSA9IE5VTEw7CisJCQlwZnJlZShzZmlsZS0+bWRf c2VnX2Zkcyk7CisJCQlzZmlsZS0+bWRfc2VnX2ZkcyA9IE5VTEw7CiAJCX0KIAl9Ci0JZWxz ZSBpZiAocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9PSAwKQorCWVsc2UgaWYg KHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID09IDApCiAJewotCQlyZWxuLT5tZF9zZWdfZmRz W2ZvcmtudW1dID0KKwkJc2ZpbGUtPm1kX3NlZ19mZHMgPQogCQkJTWVtb3J5Q29udGV4dEFs bG9jKE1kQ3h0LCBzaXplb2YoTWRmZFZlYykgKiBuc2VnKTsKIAl9CiAJZWxzZQpAQCAtMTEx MSwxMiArMTA2NCwxMiBAQCBfZmR2ZWNfcmVzaXplKFNNZ3JSZWxhdGlvbiByZWxuLAogCQkg KiBGaWxlQ2xvc2UoKSwgYW5kIHRoZSBtZW1vcnkgY29udGV4dCBpbnRlcm5hbGx5IHdpbGwg c29tZXRpbWVzIGF2b2lkCiAJCSAqIGRvaW5nIGFuIGFjdHVhbCByZWFsbG9jYXRpb24uCiAJ CSAqLwotCQlyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dID0KLQkJCXJlcGFsbG9jKHJlbG4t Pm1kX3NlZ19mZHNbZm9ya251bV0sCisJCXNmaWxlLT5tZF9zZWdfZmRzID0KKwkJCXJlcGFs bG9jKHNmaWxlLT5tZF9zZWdfZmRzLAogCQkJCQkgc2l6ZW9mKE1kZmRWZWMpICogbnNlZyk7 CiAJfQogCi0JcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9IG5zZWc7CisJc2Zp bGUtPm1kX251bV9vcGVuX3NlZ3MgPSBuc2VnOwogfQogCiAvKgpAQCAtMTEyNCwxMiArMTA3 NywxMiBAQCBfZmR2ZWNfcmVzaXplKFNNZ3JSZWxhdGlvbiByZWxuLAogICogcmV0dXJuZWQg c3RyaW5nIGlzIHBhbGxvYydkLgogICovCiBzdGF0aWMgY2hhciAqCi1fbWRmZF9zZWdwYXRo KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIHNl Z25vKQorX21kZmRfc2VncGF0aChTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIg c2Vnbm8pCiB7CiAJY2hhcgkgICAqcGF0aCwKIAkJCSAgICpmdWxscGF0aDsKIAotCXBhdGgg PSByZWxwYXRoKHJlbG4tPnNtZ3JfcmxvY2F0b3IsIGZvcmtudW0pOworCXBhdGggPSBzbWdy ZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcik7CiAKIAlpZiAoc2Vnbm8gPiAwKQogCXsK QEAgLTExNDcsMTQgKzExMDAsMTQgQEAgX21kZmRfc2VncGF0aChTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBzZWdubykKICAqIGFuZCBtYWtl IGEgTWRmZFZlYyBvYmplY3QgZm9yIGl0LiAgUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuCiAg Ki8KIHN0YXRpYyBNZGZkVmVjICoKLV9tZGZkX29wZW5zZWcoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgc2Vnbm8sCitfbWRmZF9vcGVuc2Vn KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBzZWdubywKIAkJCSAgaW50IG9m bGFncykKIHsKIAlNZGZkVmVjICAgICp2OwogCUZpbGUJCWZkOwogCWNoYXIJICAgKmZ1bGxw YXRoOwogCi0JZnVsbHBhdGggPSBfbWRmZF9zZWdwYXRoKHJlbG4sIGZvcmtudW0sIHNlZ25v KTsKKwlmdWxscGF0aCA9IF9tZGZkX3NlZ3BhdGgoc2ZpbGUsIHNlZ25vKTsKIAogCS8qIG9w ZW4gdGhlIGZpbGUgKi8KIAlmZCA9IFBhdGhOYW1lT3BlbkZpbGUoZnVsbHBhdGgsIE9fUkRX UiB8IFBHX0JJTkFSWSB8IG9mbGFncyk7CkBAIC0xMTY4LDE2ICsxMTIxLDE2IEBAIF9tZGZk X29wZW5zZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tO dW1iZXIgc2Vnbm8sCiAJICogU2VnbWVudHMgYXJlIGFsd2F5cyBvcGVuZWQgaW4gb3JkZXIg ZnJvbSBsb3dlc3QgdG8gaGlnaGVzdCwgc28gd2UgbXVzdAogCSAqIGJlIGFkZGluZyBhIG5l dyBvbmUgYXQgdGhlIGVuZC4KIAkgKi8KLQlBc3NlcnQoc2Vnbm8gPT0gcmVsbi0+bWRfbnVt X29wZW5fc2Vnc1tmb3JrbnVtXSk7CisJQXNzZXJ0KHNlZ25vID09IHNmaWxlLT5tZF9udW1f b3Blbl9zZWdzKTsKIAotCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgc2Vnbm8gKyAx KTsKKwlfZmR2ZWNfcmVzaXplKHNmaWxlLCBzZWdubyArIDEpOwogCiAJLyogZmlsbCB0aGUg ZW50cnkgKi8KLQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bc2Vnbm9dOworCXYg PSAmc2ZpbGUtPm1kX3NlZ19mZHNbc2Vnbm9dOwogCXYtPm1kZmRfdmZkID0gZmQ7CiAJdi0+ bWRmZF9zZWdubyA9IHNlZ25vOwogCi0JQXNzZXJ0KF9tZG5ibG9ja3MocmVsbiwgZm9ya251 bSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKKwlBc3NlcnQoX21kbmJs b2NrcyhzZmlsZSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKIAogCS8q IGFsbCBkb25lICovCiAJcmV0dXJuIHY7CkBAIC0xMTkyLDcgKzExNDUsNyBAQCBfbWRmZF9v cGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIHNlZ25vLAogICogRVhURU5TSU9OX0NSRUFURSBjYXNlLgogICovCiBzdGF0aWMgTWRm ZFZlYyAqCi1fbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCitfbWRmZF9nZXRzZWcoU01nckZpbGVIYW5kbGUg c2ZpbGUsIEJsb2NrTnVtYmVyIGJsa25vLAogCQkJIGJvb2wgc2tpcEZzeW5jLCBpbnQgYmVo YXZpb3IpCiB7CiAJTWRmZFZlYyAgICAqdjsKQEAgLTEyMDcsOSArMTE2MCw5IEBAIF9tZGZk X2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051 bWJlciBibGtubywKIAl0YXJnZXRzZWcgPSBibGtubyAvICgoQmxvY2tOdW1iZXIpIFJFTFNF R19TSVpFKTsKIAogCS8qIGlmIGFuIGV4aXN0aW5nIGFuZCBvcGVuZWQgc2VnbWVudCwgd2Un cmUgZG9uZSAqLwotCWlmICh0YXJnZXRzZWcgPCByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2Zv cmtudW1dKQorCWlmICh0YXJnZXRzZWcgPCBzZmlsZS0+bWRfbnVtX29wZW5fc2VncykKIAl7 Ci0JCXYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVt0YXJnZXRzZWddOworCQl2ID0g JnNmaWxlLT5tZF9zZWdfZmRzW3RhcmdldHNlZ107CiAJCXJldHVybiB2OwogCX0KIApAQCAt MTIyNCwxOSArMTE3NywxOSBAQCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJICogJ2JlaGF2aW9yJyku IFN0YXJ0IHdpdGggZWl0aGVyIHRoZSBsYXN0IG9wZW5lZCwgb3IgdGhlIGZpcnN0IHNlZ21l bnQgaWYKIAkgKiBub25lIHdhcyBvcGVuZWQgYmVmb3JlLgogCSAqLwotCWlmIChyZWxuLT5t ZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKLQkJdiA9ICZyZWxuLT5tZF9zZWdfZmRz W2ZvcmtudW1dW3JlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0gLSAxXTsKKwlpZiAo c2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAwKQorCQl2ID0gJnNmaWxlLT5tZF9zZWdfZmRz W3NmaWxlLT5tZF9udW1fb3Blbl9zZWdzIC0gMV07CiAJZWxzZQogCXsKLQkJdiA9IG1kb3Bl bmZvcmsocmVsbiwgZm9ya251bSwgYmVoYXZpb3IpOworCQl2ID0gbWRvcGVuZm9yayhzZmls ZSwgYmVoYXZpb3IpOwogCQlpZiAoIXYpCiAJCQlyZXR1cm4gTlVMTDsJCS8qIGlmIGJlaGF2 aW9yICYgRVhURU5TSU9OX1JFVFVSTl9OVUxMICovCiAJfQogCi0JZm9yIChuZXh0c2Vnbm8g PSByZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOworCWZvciAobmV4dHNlZ25vID0g c2ZpbGUtPm1kX251bV9vcGVuX3NlZ3M7CiAJCSBuZXh0c2Vnbm8gPD0gdGFyZ2V0c2VnOyBu ZXh0c2Vnbm8rKykKIAl7Ci0JCUJsb2NrTnVtYmVyIG5ibG9ja3MgPSBfbWRuYmxvY2tzKHJl bG4sIGZvcmtudW0sIHYpOworCQlCbG9ja051bWJlciBuYmxvY2tzID0gX21kbmJsb2Nrcyhz ZmlsZSwgdik7CiAJCWludAkJCWZsYWdzID0gMDsKIAogCQlBc3NlcnQobmV4dHNlZ25vID09 IHYtPm1kZmRfc2Vnbm8gKyAxKTsKQEAgLTEyNjUsNyArMTIxOCw3IEBAIF9tZGZkX2dldHNl ZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bGtubywKIAkJCXsKIAkJCQljaGFyCSAgICp6ZXJvYnVmID0gcGFsbG9jMChCTENLU1opOwog Ci0JCQkJbWRleHRlbmQocmVsbiwgZm9ya251bSwKKwkJCQltZGV4dGVuZChzZmlsZSwKIAkJ CQkJCSBuZXh0c2Vnbm8gKiAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkgLSAxLAogCQkJ CQkJIHplcm9idWYsIHNraXBGc3luYyk7CiAJCQkJcGZyZWUoemVyb2J1Zik7CkBAIC0xMjk2 LDExICsxMjQ5LDExIEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKIAkJCWVyZXBvcnQoRVJST1IsCiAJ CQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3VsZCBu b3Qgb3BlbiBmaWxlIFwiJXNcIiAodGFyZ2V0IGJsb2NrICV1KTogcHJldmlvdXMgc2VnbWVu dCBpcyBvbmx5ICV1IGJsb2NrcyIsCi0JCQkJCQkJX21kZmRfc2VncGF0aChyZWxuLCBmb3Jr bnVtLCBuZXh0c2Vnbm8pLAorCQkJCQkJCV9tZGZkX3NlZ3BhdGgoc2ZpbGUsIG5leHRzZWdu byksCiAJCQkJCQkJYmxrbm8sIG5ibG9ja3MpKSk7CiAJCX0KIAotCQl2ID0gX21kZmRfb3Bl bnNlZyhyZWxuLCBmb3JrbnVtLCBuZXh0c2Vnbm8sIGZsYWdzKTsKKwkJdiA9IF9tZGZkX29w ZW5zZWcoc2ZpbGUsIG5leHRzZWdubywgZmxhZ3MpOwogCiAJCWlmICh2ID09IE5VTEwpCiAJ CXsKQEAgLTEzMTAsNyArMTI2Myw3IEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKIAkJCWVyZXBvcnQo RVJST1IsCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNn KCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiAodGFyZ2V0IGJsb2NrICV1KTogJW0iLAot CQkJCQkJCV9tZGZkX3NlZ3BhdGgocmVsbiwgZm9ya251bSwgbmV4dHNlZ25vKSwKKwkJCQkJ CQlfbWRmZF9zZWdwYXRoKHNmaWxlLCBuZXh0c2Vnbm8pLAogCQkJCQkJCWJsa25vKSkpOwog CQl9CiAJfQpAQCAtMTMyMiw3ICsxMjc1LDcgQEAgX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAogICogR2V0 IG51bWJlciBvZiBibG9ja3MgcHJlc2VudCBpbiBhIHNpbmdsZSBkaXNrIGZpbGUKICAqLwog c3RhdGljIEJsb2NrTnVtYmVyCi1fbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKK19tZG5ibG9ja3MoU01nckZpbGVIYW5k bGUgc2ZpbGUsIE1kZmRWZWMgKnNlZykKIHsKIAlvZmZfdAkJbGVuOwogCkBAIC0xMzQ1LDE2 ICsxMjk4LDE2IEBAIF9tZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwgTWRmZFZlYyAqc2VnKQogaW50CiBtZHN5bmNmaWxldGFnKGNvbnN0IEZpbGVU YWcgKmZ0YWcsIGNoYXIgKnBhdGgpCiB7Ci0JU01nclJlbGF0aW9uIHJlbG4gPSBzbWdyb3Bl bihmdGFnLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CisJU01nckZpbGVIYW5kbGUg c2ZpbGUgPSBzbWdyb3BlbihmdGFnLT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZnRh Zy0+Zm9ya251bSk7CiAJRmlsZQkJZmlsZTsKIAlib29sCQluZWVkX3RvX2Nsb3NlOwogCWlu dAkJCXJlc3VsdCwKIAkJCQlzYXZlX2Vycm5vOwogCiAJLyogU2VlIGlmIHdlIGFscmVhZHkg aGF2ZSB0aGUgZmlsZSBvcGVuLCBvciBuZWVkIHRvIG9wZW4gaXQuICovCi0JaWYgKGZ0YWct PnNlZ25vIDwgcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmdGFnLT5mb3JrbnVtXSkKKwlpZiAo ZnRhZy0+c2Vnbm8gPCBzZmlsZS0+bWRfbnVtX29wZW5fc2VncykKIAl7Ci0JCWZpbGUgPSBy ZWxuLT5tZF9zZWdfZmRzW2Z0YWctPmZvcmtudW1dW2Z0YWctPnNlZ25vXS5tZGZkX3ZmZDsK KwkJZmlsZSA9IHNmaWxlLT5tZF9zZWdfZmRzW2Z0YWctPnNlZ25vXS5tZGZkX3ZmZDsKIAkJ c3RybGNweShwYXRoLCBGaWxlUGF0aE5hbWUoZmlsZSksIE1BWFBHUEFUSCk7CiAJCW5lZWRf dG9fY2xvc2UgPSBmYWxzZTsKIAl9CkBAIC0xMzYyLDcgKzEzMTUsNyBAQCBtZHN5bmNmaWxl dGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpCiAJewogCQljaGFyCSAgICpw OwogCi0JCXAgPSBfbWRmZF9zZWdwYXRoKHJlbG4sIGZ0YWctPmZvcmtudW0sIGZ0YWctPnNl Z25vKTsKKwkJcCA9IF9tZGZkX3NlZ3BhdGgoc2ZpbGUsIGZ0YWctPnNlZ25vKTsKIAkJc3Ry bGNweShwYXRoLCBwLCBNQVhQR1BBVEgpOwogCQlwZnJlZShwKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv c21nci9zbWdyLmMKaW5kZXggYzFhNWZlYmNiZmQuLjZlMWFkMzE2NTRlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2Uvc21nci9zbWdyLmMKQEAgLTQxLDI3ICs0MSwyNCBAQCB0eXBlZGVmIHN0cnVjdCBm X3NtZ3IKIHsKIAl2b2lkCQkoKnNtZ3JfaW5pdCkgKHZvaWQpOwkvKiBtYXkgYmUgTlVMTCAq LwogCXZvaWQJCSgqc21ncl9zaHV0ZG93bikgKHZvaWQpOwkvKiBtYXkgYmUgTlVMTCAqLwot CXZvaWQJCSgqc21ncl9vcGVuKSAoU01nclJlbGF0aW9uIHJlbG4pOwotCXZvaWQJCSgqc21n cl9jbG9zZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotCXZv aWQJCSgqc21ncl9jcmVhdGUpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLAotCQkJCQkJCQlib29sIGlzUmVkbyk7Ci0JYm9vbAkJKCpzbWdyX2V4aXN0cykgKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotCXZvaWQJCSgqc21ncl91 bmxpbmspIChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a251bSwKLQkJCQkJCQkJYm9vbCBpc1JlZG8pOwotCXZvaWQJCSgqc21ncl9leHRlbmQpIChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCXZvaWQJCSgqc21ncl9v cGVuKSAoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworCXZvaWQJCSgqc21ncl9jbG9zZSkgKFNN Z3JGaWxlSGFuZGxlIHNmaWxlKTsKKwl2b2lkCQkoKnNtZ3JfY3JlYXRlKSAoU01nckZpbGVI YW5kbGUgc2ZpbGUsIGJvb2wgaXNSZWRvKTsKKwlib29sCQkoKnNtZ3JfZXhpc3RzKSAoU01n ckZpbGVIYW5kbGUgc2ZpbGUpOworCXZvaWQJCSgqc21ncl91bmxpbmspIChTTWdyRmlsZUxv Y2F0b3Igc2xvY2F0b3IsIGJvb2wgaXNSZWRvKTsKKwl2b2lkCQkoKnNtZ3JfZXh0ZW5kKSAo U01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtLCBj aGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKTsKLQlib29sCQkoKnNtZ3JfcHJlZmV0Y2gp IChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCWJvb2wJCSgqc21n cl9wcmVmZXRjaCkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCQkgIEJsb2NrTnVt YmVyIGJsb2NrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfcmVhZCkgKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX3JlYWQpIChTTWdyRmlsZUhh bmRsZSBzZmlsZSwKIAkJCQkJCQkgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZm ZXIpOwotCXZvaWQJCSgqc21ncl93cml0ZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX3dyaXRlKSAoU01nckZpbGVIYW5kbGUgc2Zp bGUsCiAJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9v bCBza2lwRnN5bmMpOwotCXZvaWQJCSgqc21ncl93cml0ZWJhY2spIChTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCXZvaWQJCSgqc21ncl93cml0ZWJhY2spIChT TWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tudW0s IEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotCUJsb2NrTnVtYmVyICgqc21ncl9uYmxvY2tzKSAo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci0Jdm9pZAkJKCpzbWdy X3RydW5jYXRlKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJ CQkJCQkJICBCbG9ja051bWJlciBuYmxvY2tzKTsKLQl2b2lkCQkoKnNtZ3JfaW1tZWRzeW5j KSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CisJQmxvY2tOdW1i ZXIgKCpzbWdyX25ibG9ja3MpIChTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CisJdm9pZAkJKCpz bWdyX3RydW5jYXRlKSAoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIG5ibG9j a3MpOworCXZvaWQJCSgqc21ncl9pbW1lZHN5bmMpIChTTWdyRmlsZUhhbmRsZSBzZmlsZSk7 CiB9IGZfc21ncjsKIAogc3RhdGljIGNvbnN0IGZfc21nciBzbWdyc3dbXSA9IHsKQEAgLTg4 LDEyICs4NSwxMiBAQCBzdGF0aWMgY29uc3QgZl9zbWdyIHNtZ3Jzd1tdID0gewogc3RhdGlj IGNvbnN0IGludCBOU21nciA9IGxlbmd0aG9mKHNtZ3Jzdyk7CiAKIC8qCi0gKiBFYWNoIGJh Y2tlbmQgaGFzIGEgaGFzaHRhYmxlIHRoYXQgc3RvcmVzIGFsbCBleHRhbnQgU01nclJlbGF0 aW9uIG9iamVjdHMuCi0gKiBJbiBhZGRpdGlvbiwgInVub3duZWQiIFNNZ3JSZWxhdGlvbiBv YmplY3RzIGFyZSBjaGFpbmVkIHRvZ2V0aGVyIGluIGEgbGlzdC4KKyAqIEVhY2ggYmFja2Vu ZCBoYXMgYSBoYXNodGFibGUgdGhhdCBzdG9yZXMgYWxsIGV4dGFudCBTTWdyRmlsZURhdGEg b2JqZWN0cy4KKyAqIEluIGFkZGl0aW9uLCAidW5vd25lZCIgU01nckZpbGUgb2JqZWN0cyBh cmUgY2hhaW5lZCB0b2dldGhlciBpbiBhIGxpc3QuCiAgKi8KLXN0YXRpYyBIVEFCICpTTWdy UmVsYXRpb25IYXNoID0gTlVMTDsKK3N0YXRpYyBIVEFCICpTTWdyRmlsZUhhc2ggPSBOVUxM OwogCi1zdGF0aWMgZGxpc3RfaGVhZCB1bm93bmVkX3JlbG5zOworc3RhdGljIGRsaXN0X2hl YWQgdW5vd25lZF9zZmlsZXM7CiAKIC8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8K IHN0YXRpYyB2b2lkIHNtZ3JzaHV0ZG93bihpbnQgY29kZSwgRGF0dW0gYXJnKTsKQEAgLTE0 Miw1MCArMTM5LDUwIEBAIHNtZ3JzaHV0ZG93bihpbnQgY29kZSwgRGF0dW0gYXJnKQogICoK ICAqCQlUaGlzIGRvZXMgbm90IGF0dGVtcHQgdG8gYWN0dWFsbHkgb3BlbiB0aGUgdW5kZXJs eWluZyBmaWxlLgogICovCi1TTWdyUmVsYXRpb24KLXNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9y IHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKK1NNZ3JGaWxlSGFuZGxlCitzbWdyb3Bl bihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZvcmtOdW1i ZXIgZm9ya051bSkKIHsKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgYnJsb2NhdG9yOwotCVNN Z3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlTG9jYXRvciBzbG9jYXRvcjsKKwlTTWdyRmls ZUhhbmRsZSBzZmlsZTsKIAlib29sCQlmb3VuZDsKIAotCWlmIChTTWdyUmVsYXRpb25IYXNo ID09IE5VTEwpCisJaWYgKFNNZ3JGaWxlSGFzaCA9PSBOVUxMKQogCXsKIAkJLyogRmlyc3Qg dGltZSB0aHJvdWdoOiBpbml0aWFsaXplIHRoZSBoYXNoIHRhYmxlICovCiAJCUhBU0hDVEwJ CWN0bDsKIAotCQljdGwua2V5c2l6ZSA9IHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQp OwotCQljdGwuZW50cnlzaXplID0gc2l6ZW9mKFNNZ3JSZWxhdGlvbkRhdGEpOwotCQlTTWdy UmVsYXRpb25IYXNoID0gaGFzaF9jcmVhdGUoInNtZ3IgcmVsYXRpb24gdGFibGUiLCA0MDAs CisJCWN0bC5rZXlzaXplID0gc2l6ZW9mKFNNZ3JGaWxlTG9jYXRvcik7CisJCWN0bC5lbnRy eXNpemUgPSBzaXplb2YoU01nckZpbGVEYXRhKTsKKwkJU01nckZpbGVIYXNoID0gaGFzaF9j cmVhdGUoInNtZ3IgcmVsYXRpb24gdGFibGUiLCA0MDAsCiAJCQkJCQkJCQkgICAmY3RsLCBI QVNIX0VMRU0gfCBIQVNIX0JMT0JTKTsKLQkJZGxpc3RfaW5pdCgmdW5vd25lZF9yZWxucyk7 CisJCWRsaXN0X2luaXQoJnVub3duZWRfc2ZpbGVzKTsKIAl9CiAKIAkvKiBMb29rIHVwIG9y IGNyZWF0ZSBhbiBlbnRyeSAqLwotCWJybG9jYXRvci5sb2NhdG9yID0gcmxvY2F0b3I7Ci0J YnJsb2NhdG9yLmJhY2tlbmQgPSBiYWNrZW5kOwotCXJlbG4gPSAoU01nclJlbGF0aW9uKSBo YXNoX3NlYXJjaChTTWdyUmVsYXRpb25IYXNoLAotCQkJCQkJCQkJICAodm9pZCAqKSAmYnJs b2NhdG9yLAotCQkJCQkJCQkJICBIQVNIX0VOVEVSLCAmZm91bmQpOworCXNsb2NhdG9yLmxv Y2F0b3IgPSBybG9jYXRvcjsKKwlzbG9jYXRvci5iYWNrZW5kID0gYmFja2VuZDsKKwlzbG9j YXRvci5mb3JrbnVtID0gZm9ya051bTsKKwlzZmlsZSA9IChTTWdyRmlsZUhhbmRsZSkgaGFz aF9zZWFyY2goU01nckZpbGVIYXNoLAorCQkJCQkJCQkJCSAodm9pZCAqKSAmc2xvY2F0b3Is CisJCQkJCQkJCQkJIEhBU0hfRU5URVIsICZmb3VuZCk7CiAKIAkvKiBJbml0aWFsaXplIGl0 IGlmIG5vdCBwcmVzZW50IGJlZm9yZSAqLwogCWlmICghZm91bmQpCiAJewogCQkvKiBoYXNo X3NlYXJjaCBhbHJlYWR5IGZpbGxlZCBpbiB0aGUgbG9va3VwIGtleSAqLwotCQlyZWxuLT5z bWdyX293bmVyID0gTlVMTDsKLQkJcmVsbi0+c21ncl90YXJnYmxvY2sgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyArK2kpCi0J CQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ldID0gSW52YWxpZEJsb2NrTnVtYmVyOwot CQlyZWxuLT5zbWdyX3doaWNoID0gMDsJLyogd2Ugb25seSBoYXZlIG1kLmMgYXQgcHJlc2Vu dCAqLworCQlzZmlsZS0+c21ncl9vd25lciA9IE5VTEw7CisJCXNmaWxlLT5zbWdyX3Rhcmdi bG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9j a3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCXNmaWxlLT5zbWdyX3doaWNoID0gMDsJLyog d2Ugb25seSBoYXZlIG1kLmMgYXQgcHJlc2VudCAqLwogCiAJCS8qIGltcGxlbWVudGF0aW9u LXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCi0JCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNo XS5zbWdyX29wZW4ocmVsbik7CisJCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl9v cGVuKHNmaWxlKTsKIAogCQkvKiBpdCBoYXMgbm8gb3duZXIgeWV0ICovCi0JCWRsaXN0X3B1 c2hfdGFpbCgmdW5vd25lZF9yZWxucywgJnJlbG4tPm5vZGUpOworCQlkbGlzdF9wdXNoX3Rh aWwoJnVub3duZWRfc2ZpbGVzLCAmc2ZpbGUtPm5vZGUpOwogCX0KIAotCXJldHVybiByZWxu OworCXJldHVybiBzZmlsZTsKIH0KIAogLyoKQEAgLTE5NSw3ICsxOTIsNyBAQCBzbWdyb3Bl bihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQpCiAgKiB0aGUg b25seSBzdWNoIG93bmVycyBleGlzdCBpbiB0aGUgcmVsY2FjaGUuCiAgKi8KIHZvaWQKLXNt Z3JzZXRvd25lcihTTWdyUmVsYXRpb24gKm93bmVyLCBTTWdyUmVsYXRpb24gcmVsbikKK3Nt Z3JzZXRvd25lcihTTWdyRmlsZUhhbmRsZSAqb3duZXIsIFNNZ3JGaWxlSGFuZGxlIHNmaWxl KQogewogCS8qIFdlIGRvbid0IHN1cHBvcnQgImRpc293bmluZyIgYW4gU01nclJlbGF0aW9u IGhlcmUsIHVzZSBzbWdyY2xlYXJvd25lciAqLwogCUFzc2VydChvd25lciAhPSBOVUxMKTsK QEAgLTIwNiw2OCArMjAzLDY2IEBAIHNtZ3JzZXRvd25lcihTTWdyUmVsYXRpb24gKm93bmVy LCBTTWdyUmVsYXRpb24gcmVsbikKIAkgKiBkZXBlbmRpbmcgb24gdGhlIG9yZGVyIG9mIHBy b2Nlc3NpbmcuICBJdCdzIG9rIHRvIGNsb3NlIHRoZSBvbGQKIAkgKiByZWxjYWNoZSBlbnRy eSBlYXJseSBpbiB0aGF0IGNhc2UuKQogCSAqCi0JICogSWYgdGhlcmUgaXNuJ3QgYW4gb2xk IG93bmVyLCB0aGVuIHRoZSByZWxuIHNob3VsZCBiZSBpbiB0aGUgdW5vd25lZAorCSAqIElm IHRoZXJlIGlzbid0IGFuIG9sZCBvd25lciwgdGhlbiB0aGUgc2ZpbGUgc2hvdWxkIGJlIGlu IHRoZSB1bm93bmVkCiAJICogbGlzdCwgYW5kIHdlIG5lZWQgdG8gcmVtb3ZlIGl0LgogCSAq LwotCWlmIChyZWxuLT5zbWdyX293bmVyKQotCQkqKHJlbG4tPnNtZ3Jfb3duZXIpID0gTlVM TDsKKwlpZiAoc2ZpbGUtPnNtZ3Jfb3duZXIpCisJCSooc2ZpbGUtPnNtZ3Jfb3duZXIpID0g TlVMTDsKIAllbHNlCi0JCWRsaXN0X2RlbGV0ZSgmcmVsbi0+bm9kZSk7CisJCWRsaXN0X2Rl bGV0ZSgmc2ZpbGUtPm5vZGUpOwogCiAJLyogTm93IGVzdGFibGlzaCB0aGUgb3duZXJzaGlw IHJlbGF0aW9uc2hpcC4gKi8KLQlyZWxuLT5zbWdyX293bmVyID0gb3duZXI7Ci0JKm93bmVy ID0gcmVsbjsKKwlzZmlsZS0+c21ncl9vd25lciA9IG93bmVyOworCSpvd25lciA9IHNmaWxl OwogfQogCiAvKgotICogc21ncmNsZWFyb3duZXIoKSAtLSBSZW1vdmUgbG9uZy1saXZlZCBy ZWZlcmVuY2UgdG8gYW4gU01nclJlbGF0aW9uIG9iamVjdAorICogc21ncmNsZWFyb3duZXIo KSAtLSBSZW1vdmUgbG9uZy1saXZlZCByZWZlcmVuY2UgdG8gYW4gU01nckZpbGVIYW5kbGUg b2JqZWN0CiAgKgkJCQkJICAgaWYgb25lIGV4aXN0cwogICovCiB2b2lkCi1zbWdyY2xlYXJv d25lcihTTWdyUmVsYXRpb24gKm93bmVyLCBTTWdyUmVsYXRpb24gcmVsbikKK3NtZ3JjbGVh cm93bmVyKFNNZ3JGaWxlSGFuZGxlICpvd25lciwgU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7 CiAJLyogRG8gbm90aGluZyBpZiB0aGUgU01nclJlbGF0aW9uIG9iamVjdCBpcyBub3Qgb3du ZWQgYnkgdGhlIG93bmVyICovCi0JaWYgKHJlbG4tPnNtZ3Jfb3duZXIgIT0gb3duZXIpCisJ aWYgKHNmaWxlLT5zbWdyX293bmVyICE9IG93bmVyKQogCQlyZXR1cm47CiAKIAkvKiB1bnNl dCB0aGUgb3duZXIncyByZWZlcmVuY2UgKi8KIAkqb3duZXIgPSBOVUxMOwogCiAJLyogdW5z ZXQgb3VyIHJlZmVyZW5jZSB0byB0aGUgb3duZXIgKi8KLQlyZWxuLT5zbWdyX293bmVyID0g TlVMTDsKKwlzZmlsZS0+c21ncl9vd25lciA9IE5VTEw7CiAKIAkvKiBhZGQgdG8gbGlzdCBv ZiB1bm93bmVkIHJlbGF0aW9ucyAqLwotCWRsaXN0X3B1c2hfdGFpbCgmdW5vd25lZF9yZWxu cywgJnJlbG4tPm5vZGUpOworCWRsaXN0X3B1c2hfdGFpbCgmdW5vd25lZF9zZmlsZXMsICZz ZmlsZS0+bm9kZSk7CiB9CiAKIC8qCi0gKglzbWdyZXhpc3RzKCkgLS0gRG9lcyB0aGUgdW5k ZXJseWluZyBmaWxlIGZvciBhIGZvcmsgZXhpc3Q/CisgKglzbWdyZXhpc3RzKCkgLS0gRG9l cyB0aGUgdW5kZXJseWluZyBmaWxlIGV4aXN0PwogICovCiBib29sCi1zbWdyZXhpc3RzKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCitzbWdyZXhpc3RzKFNNZ3JG aWxlSGFuZGxlIHNmaWxlKQogewotCXJldHVybiBzbWdyc3dbcmVsbi0+c21ncl93aGljaF0u c21ncl9leGlzdHMocmVsbiwgZm9ya251bSk7CisJcmV0dXJuIHNtZ3Jzd1tzZmlsZS0+c21n cl93aGljaF0uc21ncl9leGlzdHMoc2ZpbGUpOwogfQogCiAvKgotICoJc21ncmNsb3NlKCkg LS0gQ2xvc2UgYW5kIGRlbGV0ZSBhbiBTTWdyUmVsYXRpb24gb2JqZWN0LgorICoJc21ncmNs b3NlKCkgLS0gQ2xvc2UgYW5kIGRlbGV0ZSBhbiBTTWdyRmlsZSBvYmplY3QuCiAgKi8KIHZv aWQKLXNtZ3JjbG9zZShTTWdyUmVsYXRpb24gcmVsbikKK3NtZ3JjbG9zZShTTWdyRmlsZUhh bmRsZSBzZmlsZSkKIHsKLQlTTWdyUmVsYXRpb24gKm93bmVyOwotCUZvcmtOdW1iZXIJZm9y a251bTsKKwlTTWdyRmlsZUhhbmRsZSAqb3duZXI7CiAKLQlmb3IgKGZvcmtudW0gPSAwOyBm b3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCXNtZ3Jzd1tyZWxuLT5zbWdy X3doaWNoXS5zbWdyX2Nsb3NlKHJlbG4sIGZvcmtudW0pOworCXNtZ3Jzd1tzZmlsZS0+c21n cl93aGljaF0uc21ncl9jbG9zZShzZmlsZSk7CiAKLQlvd25lciA9IHJlbG4tPnNtZ3Jfb3du ZXI7CisJb3duZXIgPSBzZmlsZS0+c21ncl9vd25lcjsKIAogCWlmICghb3duZXIpCi0JCWRs aXN0X2RlbGV0ZSgmcmVsbi0+bm9kZSk7CisJCWRsaXN0X2RlbGV0ZSgmc2ZpbGUtPm5vZGUp OwogCi0JaWYgKGhhc2hfc2VhcmNoKFNNZ3JSZWxhdGlvbkhhc2gsCi0JCQkJCSh2b2lkICop ICYocmVsbi0+c21ncl9ybG9jYXRvciksCisJaWYgKGhhc2hfc2VhcmNoKFNNZ3JGaWxlSGFz aCwKKwkJCQkJKHZvaWQgKikgJihzZmlsZS0+c21ncl9sb2NhdG9yKSwKIAkJCQkJSEFTSF9S RU1PVkUsIE5VTEwpID09IE5VTEwpCiAJCWVsb2coRVJST1IsICJTTWdyUmVsYXRpb24gaGFz aHRhYmxlIGNvcnJ1cHRlZCIpOwogCkBAIC0yODQsMTQgKzI3OSwxMSBAQCBzbWdyY2xvc2Uo U01nclJlbGF0aW9uIHJlbG4pCiAgKgogICoJVGhlIG9iamVjdCByZW1haW5zIHZhbGlkLgog ICovCi12b2lkCi1zbWdycmVsZWFzZShTTWdyUmVsYXRpb24gcmVsbikKK3N0YXRpYyB2b2lk CitzbWdycmVsZWFzZShTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKLQlmb3IgKEZvcmtOdW1i ZXIgZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQl7 Ci0JCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX2Nsb3NlKHJlbG4sIGZvcmtudW0p OwotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gSW52YWxpZEJsb2Nr TnVtYmVyOwotCX0KKwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfY2xvc2Uoc2Zp bGUpOworCXNmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVy OwogfQogCiAvKgpAQCAtMzAzLDE2ICsyOTUsMTYgQEAgdm9pZAogc21ncnJlbGVhc2VhbGwo dm9pZCkKIHsKIAlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOwotCVNNZ3JSZWxhdGlvbiByZWxu OworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCiAJLyogTm90aGluZyB0byBkbyBpZiBoYXNo dGFibGUgbm90IHNldCB1cCAqLwotCWlmIChTTWdyUmVsYXRpb25IYXNoID09IE5VTEwpCisJ aWYgKFNNZ3JGaWxlSGFzaCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQloYXNoX3NlcV9pbml0 KCZzdGF0dXMsIFNNZ3JSZWxhdGlvbkhhc2gpOworCWhhc2hfc2VxX2luaXQoJnN0YXR1cywg U01nckZpbGVIYXNoKTsKIAotCXdoaWxlICgocmVsbiA9IChTTWdyUmVsYXRpb24pIGhhc2hf c2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKLQkJc21ncnJlbGVhc2UocmVsbik7CisJ d2hpbGUgKChzZmlsZSA9IChTTWdyRmlsZUhhbmRsZSkgaGFzaF9zZXFfc2VhcmNoKCZzdGF0 dXMpKSAhPSBOVUxMKQorCQlzbWdycmVsZWFzZShzZmlsZSk7CiB9CiAKIC8qCkBAIC0zMjIs MTYgKzMxNCwxNiBAQCB2b2lkCiBzbWdyY2xvc2VhbGwodm9pZCkKIHsKIAlIQVNIX1NFUV9T VEFUVVMgc3RhdHVzOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIHNm aWxlOwogCiAJLyogTm90aGluZyB0byBkbyBpZiBoYXNodGFibGUgbm90IHNldCB1cCAqLwot CWlmIChTTWdyUmVsYXRpb25IYXNoID09IE5VTEwpCisJaWYgKFNNZ3JGaWxlSGFzaCA9PSBO VUxMKQogCQlyZXR1cm47CiAKLQloYXNoX3NlcV9pbml0KCZzdGF0dXMsIFNNZ3JSZWxhdGlv bkhhc2gpOworCWhhc2hfc2VxX2luaXQoJnN0YXR1cywgU01nckZpbGVIYXNoKTsKIAotCXdo aWxlICgocmVsbiA9IChTTWdyUmVsYXRpb24pIGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkg IT0gTlVMTCkKLQkJc21ncmNsb3NlKHJlbG4pOworCXdoaWxlICgoc2ZpbGUgPSAoU01nckZp bGVIYW5kbGUpIGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwkJc21ncmNs b3NlKHNmaWxlKTsKIH0KIAogLyoKQEAgLTM0MywxMTEgKzMzNSw2NSBAQCBzbWdyY2xvc2Vh bGwodm9pZCkKICAqIHN1Y2ggZW50cnkgZXhpc3RzIGFscmVhZHkuCiAgKi8KIHZvaWQKLXNt Z3JjbG9zZXJlbGxvY2F0b3IoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yKQorc21n cmNsb3NlcmVsbG9jYXRvcihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJh Y2tlbmQpCiB7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7 CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIGhhc2h0YWJsZSBub3Qgc2V0IHVwICovCi0JaWYg KFNNZ3JSZWxhdGlvbkhhc2ggPT0gTlVMTCkKKwlpZiAoU01nckZpbGVIYXNoID09IE5VTEwp CiAJCXJldHVybjsKIAotCXJlbG4gPSAoU01nclJlbGF0aW9uKSBoYXNoX3NlYXJjaChTTWdy UmVsYXRpb25IYXNoLAotCQkJCQkJCQkJICAodm9pZCAqKSAmcmxvY2F0b3IsCi0JCQkJCQkJ CQkgIEhBU0hfRklORCwgTlVMTCk7Ci0JaWYgKHJlbG4gIT0gTlVMTCkKLQkJc21ncmNsb3Nl KHJlbG4pOworCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJewor CQlTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IgPSB7IHJsb2NhdG9yLCBiYWNrZW5kLCBpIH07 CisKKwkJc2ZpbGUgPSAoU01nckZpbGVIYW5kbGUpIGhhc2hfc2VhcmNoKFNNZ3JGaWxlSGFz aCwKKwkJCQkJCQkJCQkJICh2b2lkICopICZzbG9jYXRvciwKKwkJCQkJCQkJCQkJIEhBU0hf RklORCwgTlVMTCk7CisJCWlmIChzZmlsZSAhPSBOVUxMKQorCQkJc21ncmNsb3NlKHNmaWxl KTsKKwl9CiB9CiAKIC8qCi0gKglzbWdyY3JlYXRlKCkgLS0gQ3JlYXRlIGEgbmV3IHJlbGF0 aW9uLgorICoJc21ncmNyZWF0ZSgpIC0tIENyZWF0ZSBhIG5ldyBmaWxlLgogICoKLSAqCQlH aXZlbiBhbiBhbHJlYWR5LWNyZWF0ZWQgKGJ1dCBwcmVzdW1hYmx5IHVudXNlZCkgU01nclJl bGF0aW9uLAorICoJCUdpdmVuIGFuIGFscmVhZHktY3JlYXRlZCAoYnV0IHByZXN1bWFibHkg dW51c2VkKSBTTWdyRmlsZUhhbmRsZSwKICAqCQljYXVzZSB0aGUgdW5kZXJseWluZyBkaXNr IGZpbGUgb3Igb3RoZXIgc3RvcmFnZSBmb3IgdGhlIGZvcmsKICAqCQl0byBiZSBjcmVhdGVk LgogICovCiB2b2lkCi1zbWdyY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIGJvb2wgaXNSZWRvKQotewotCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5z bWdyX2NyZWF0ZShyZWxuLCBmb3JrbnVtLCBpc1JlZG8pOwotfQotCi0vKgotICoJc21ncmRv c3luY2FsbCgpIC0tIEltbWVkaWF0ZWx5IHN5bmMgYWxsIGZvcmtzIG9mIGFsbCBnaXZlbiBy ZWxhdGlvbnMKLSAqCi0gKgkJQWxsIGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMgYXJl IHN5bmNlZCBvdXQgdG8gdGhlIHN0b3JlLgotICoKLSAqCQlUaGlzIGlzIGVxdWl2YWxlbnQg dG8gRmx1c2hSZWxhdGlvbkJ1ZmZlcnMoKSBmb3IgZWFjaCBzbWdyIHJlbGF0aW9uLAotICoJ CXRoZW4gY2FsbGluZyBzbWdyaW1tZWRzeW5jKCkgZm9yIGFsbCBmb3JrcyBvZiBlYWNoIHJl bGF0aW9uLCBidXQgaXQncwotICoJCXNpZ25pZmljYW50bHkgcXVpY2tlciBzbyBzaG91bGQg YmUgcHJlZmVycmVkIHdoZW4gcG9zc2libGUuCi0gKi8KLXZvaWQKLXNtZ3Jkb3N5bmNhbGwo U01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJlbHMpCitzbWdyY3JlYXRlKFNNZ3JGaWxlSGFu ZGxlIHNmaWxlLCBib29sIGlzUmVkbykKIHsKLQlpbnQJCQlpID0gMDsKLQlGb3JrTnVtYmVy CWZvcmtudW07Ci0KLQlpZiAobnJlbHMgPT0gMCkKLQkJcmV0dXJuOwotCi0JRmx1c2hSZWxh dGlvbnNBbGxCdWZmZXJzKHJlbHMsIG5yZWxzKTsKLQotCS8qCi0JICogU3luYyB0aGUgcGh5 c2ljYWwgZmlsZShzKS4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQl7 Ci0JCWludAkJCXdoaWNoID0gcmVsc1tpXS0+c21ncl93aGljaDsKLQotCQlmb3IgKGZvcmtu dW0gPSAwOyBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCXsKLQkJCWlm IChzbWdyc3dbd2hpY2hdLnNtZ3JfZXhpc3RzKHJlbHNbaV0sIGZvcmtudW0pKQotCQkJCXNt Z3Jzd1t3aGljaF0uc21ncl9pbW1lZHN5bmMocmVsc1tpXSwgZm9ya251bSk7Ci0JCX0KLQl9 CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2NyZWF0ZShzZmlsZSwgaXNSZWRv KTsKIH0KIAogLyoKLSAqCXNtZ3Jkb3VubGlua2FsbCgpIC0tIEltbWVkaWF0ZWx5IHVubGlu ayBhbGwgZm9ya3Mgb2YgYWxsIGdpdmVuIHJlbGF0aW9ucworICoJc21ncnVubGlua19tdWx0 aSgpIC0tIEltbWVkaWF0ZWx5IHVubGluayBnaXZlbiBmb3JrcyBvZiBnaXZlbiByZWxhdGlv bgogICoKLSAqCQlBbGwgZm9ya3Mgb2YgYWxsIGdpdmVuIHJlbGF0aW9ucyBhcmUgcmVtb3Zl ZCBmcm9tIHRoZSBzdG9yZS4gIFRoaXMKKyAqCQlUaGUgZ2l2ZW4gZm9ya3Mgb2YgdGhlIHJl bGF0aW9uIGFyZSByZW1vdmVkIGZyb20gdGhlIHN0b3JlLiAgVGhpcwogICoJCXNob3VsZCBu b3QgYmUgdXNlZCBkdXJpbmcgdHJhbnNhY3Rpb25hbCBvcGVyYXRpb25zLCBzaW5jZSBpdCBj YW4ndCBiZQogICoJCXVuZG9uZS4KICAqCisgKgkJVGhpcyBoYW5kbGVzIG11bHRpcGxlIGZv cmtzIGluIG9uZSBjYWxsLCBiZWNhdXNlIHRoZSBjYWNoZSBpbnZhbGlkYXRpb24KKyAqCQlo YXBwZW5zIGF0IHJlbGF0aW9uIGdyYW51bGFyaXR5LiBJZiB3ZSBoYWQgYW4gc21ncnVubGlu aygpIGZ1bmN0aW9uCisgKgkJdG8gdW5saW5rIGp1c3QgYSBzaW5nbGUgc21nciBmaWxlLCBh bmQgdGhlIGNhbGxlciB3YW50ZWQgdG8gZGVsZXRlCisgKgkJbXVsdGlwbGUgZm9ya3Mgb2Yg YSBzaW5nbGUgcmVsYXRpb24sIGVhY2ggY2FsbCB3b3VsZCBzZW5kIGEgbmV3CisgKgkJY2Fj aGUgaW52YWxpZGF0aW9uIGV2ZW50LCB3aGljaCB3b3VsZCBiZSB3YXN0ZWZ1bC4KKyAqCiAg KgkJSWYgaXNSZWRvIGlzIHRydWUsIGl0IGlzIG9rYXkgZm9yIHRoZSB1bmRlcmx5aW5nIGZp bGUocykgdG8gYmUgZ29uZQogICoJCWFscmVhZHkuCiAgKi8KIHZvaWQKLXNtZ3Jkb3VubGlu a2FsbChTTWdyUmVsYXRpb24gKnJlbHMsIGludCBucmVscywgYm9vbCBpc1JlZG8pCitzbWdy dW5saW5rX211bHRpKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2Vu ZCwgRm9ya051bWJlciAqZm9ya3MsIGludCBuZm9ya3MsIGJvb2wgaXNSZWRvKQogeworCWlu dAkJCXdoaWNoOwogCWludAkJCWkgPSAwOwotCVJlbEZpbGVMb2NhdG9yQmFja2VuZCAqcmxv Y2F0b3JzOwotCUZvcmtOdW1iZXIJZm9ya251bTsKLQotCWlmIChucmVscyA9PSAwKQotCQly ZXR1cm47Ci0KLQkvKgotCSAqIEdldCByaWQgb2YgYW55IHJlbWFpbmluZyBidWZmZXJzIGZv ciB0aGUgcmVsYXRpb25zLiAgYnVmbWdyIHdpbGwganVzdAotCSAqIGRyb3AgdGhlbSB3aXRo b3V0IGJvdGhlcmluZyB0byB3cml0ZSB0aGUgY29udGVudHMuCi0JICovCi0JRHJvcFJlbGF0 aW9uc0FsbEJ1ZmZlcnMocmVscywgbnJlbHMpOwotCi0JLyoKLQkgKiBjcmVhdGUgYW4gYXJy YXkgd2hpY2ggY29udGFpbnMgYWxsIHJlbGF0aW9ucyB0byBiZSBkcm9wcGVkLCBhbmQgY2xv c2UKLQkgKiBlYWNoIHJlbGF0aW9uJ3MgZm9ya3MgYXQgdGhlIHNtZ3IgbGV2ZWwgd2hpbGUg YXQgaXQKLQkgKi8KLQlybG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9mKFJlbEZpbGVMb2NhdG9y QmFja2VuZCkgKiBucmVscyk7Ci0JZm9yIChpID0gMDsgaSA8IG5yZWxzOyBpKyspCi0Jewot CQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IgPSByZWxzW2ldLT5zbWdyX3Jsb2Nh dG9yOwotCQlpbnQJCQl3aGljaCA9IHJlbHNbaV0tPnNtZ3Jfd2hpY2g7CiAKLQkJcmxvY2F0 b3JzW2ldID0gcmxvY2F0b3I7CisJd2hpY2ggPSAwOwkvKiB3ZSBvbmx5IGhhdmUgbWQuYyBh dCBwcmVzZW50ICovCiAKLQkJLyogQ2xvc2UgdGhlIGZvcmtzIGF0IHNtZ3IgbGV2ZWwgKi8K LQkJZm9yIChmb3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsr KQotCQkJc21ncnN3W3doaWNoXS5zbWdyX2Nsb3NlKHJlbHNbaV0sIGZvcmtudW0pOwotCX0K KwkvKiBDbG9zZSB0aGUgZm9ya3MgYXQgc21nciBsZXZlbCAqLworCXNtZ3JjbG9zZXJlbGxv Y2F0b3IocmxvY2F0b3IsIGJhY2tlbmQpOwogCiAJLyoKIAkgKiBTZW5kIGEgc2hhcmVkLWlu dmFsIG1lc3NhZ2UgdG8gZm9yY2Ugb3RoZXIgYmFja2VuZHMgdG8gY2xvc2UgYW55CkBAIC00 NTcsOCArNDAzLDcgQEAgc21ncmRvdW5saW5rYWxsKFNNZ3JSZWxhdGlvbiAqcmVscywgaW50 IG5yZWxzLCBib29sIGlzUmVkbykKIAkgKiBiYWNrIHRvIHRoaXMgYmFja2VuZCwgdG9vLCBh bmQgdGhlcmVieSBwcm92aWRlIGEgYmFja3N0b3AgdGhhdCB3ZQogCSAqIGNsb3NlZCBvdXIg b3duIHNtZ3IgcmVsLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCQlD YWNoZUludmFsaWRhdGVTbWdyKHJsb2NhdG9yc1tpXSk7CisJQ2FjaGVJbnZhbGlkYXRlU21n cihybG9jYXRvciwgYmFja2VuZCk7CiAKIAkvKgogCSAqIERlbGV0ZSB0aGUgcGh5c2ljYWwg ZmlsZShzKS4KQEAgLTQ2NywxNiArNDEyLDExIEBAIHNtZ3Jkb3VubGlua2FsbChTTWdyUmVs YXRpb24gKnJlbHMsIGludCBucmVscywgYm9vbCBpc1JlZG8pCiAJICogRVJST1IsIGJlY2F1 c2Ugd2UndmUgYWxyZWFkeSBkZWNpZGVkIHRvIGNvbW1pdCBvciBhYm9ydCB0aGUgY3VycmVu dAogCSAqIHhhY3QuCiAJICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKKwlm b3IgKGkgPSAwOyBpIDwgbmZvcmtzOyBpKyspCiAJewotCQlpbnQJCQl3aGljaCA9IHJlbHNb aV0tPnNtZ3Jfd2hpY2g7Ci0KLQkJZm9yIChmb3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhf Rk9SS05VTTsgZm9ya251bSsrKQotCQkJc21ncnN3W3doaWNoXS5zbWdyX3VubGluayhybG9j YXRvcnNbaV0sIGZvcmtudW0sIGlzUmVkbyk7CisJCVNNZ3JGaWxlTG9jYXRvciBzbG9jYXRv ciA9IHsgcmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtzW2ldIH07CisJCXNtZ3Jzd1t3aGljaF0u c21ncl91bmxpbmsoc2xvY2F0b3IsIGlzUmVkbyk7CiAJfQotCi0JcGZyZWUocmxvY2F0b3Jz KTsKIH0KIAogCkBAIC00OTAsMjEgKzQzMCwyMSBAQCBzbWdyZG91bmxpbmthbGwoU01nclJl bGF0aW9uICpyZWxzLCBpbnQgbnJlbHMsIGJvb2wgaXNSZWRvKQogICoJCWNhdXNlcyBpbnRl cnZlbmluZyBmaWxlIHNwYWNlIHRvIGJlY29tZSBmaWxsZWQgd2l0aCB6ZXJvZXMuCiAgKi8K IHZvaWQKLXNtZ3JleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCitzbWdyZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJICAgY2hhciAqYnVmZmVyLCBib29sIHNr aXBGc3luYykKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9leHRlbmQocmVs biwgZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJCQkJIGJ1ZmZlciwgc2tpcEZzeW5jKTsK KwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfZXh0ZW5kKHNmaWxlLCBibG9ja251 bSwKKwkJCQkJCQkJCQkgIGJ1ZmZlciwgc2tpcEZzeW5jKTsKIAogCS8qCiAJICogTm9ybWFs bHkgd2UgZXhwZWN0IHRoaXMgdG8gaW5jcmVhc2UgbmJsb2NrcyBieSBvbmUsIGJ1dCBpZiB0 aGUgY2FjaGVkCiAJICogdmFsdWUgaXNuJ3QgYXMgZXhwZWN0ZWQsIGp1c3QgaW52YWxpZGF0 ZSBpdCBzbyB0aGUgbmV4dCBjYWxsIGFza3MgdGhlCiAJICoga2VybmVsLgogCSAqLwotCWlm IChyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID09IGJsb2NrbnVtKQotCQly ZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gYmxvY2tudW0gKyAxOworCWlm IChzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9PSBibG9ja251bSkKKwkJc2ZpbGUtPnNt Z3JfY2FjaGVkX25ibG9ja3MgPSBibG9ja251bSArIDE7CiAJZWxzZQotCQlyZWxuLT5zbWdy X2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlzZmls ZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKIH0KIAogLyoK QEAgLTUxNSwxMyArNDU1LDEzIEBAIHNtZ3JleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJcmVjb3JkKS4K ICAqLwogYm9vbAotc21ncnByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQorc21ncnByZWZldGNoKFNNZ3JGaWxl SGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251bSkKIHsKLQlyZXR1cm4gc21ncnN3 W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfcHJlZmV0Y2gocmVsbiwgZm9ya251bSwgYmxvY2tu dW0pOworCXJldHVybiBzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfcHJlZmV0Y2go c2ZpbGUsIGJsb2NrbnVtKTsKIH0KIAogLyoKLSAqCXNtZ3JyZWFkKCkgLS0gcmVhZCBhIHBh cnRpY3VsYXIgYmxvY2sgZnJvbSBhIHJlbGF0aW9uIGludG8gdGhlIHN1cHBsaWVkCisgKglz bWdycmVhZCgpIC0tIHJlYWQgYSBwYXJ0aWN1bGFyIGJsb2NrIGZyb20gYSBmaWxlIGludG8g dGhlIHN1cHBsaWVkCiAgKgkJCQkgIGJ1ZmZlci4KICAqCiAgKgkJVGhpcyByb3V0aW5lIGlz IGNhbGxlZCBmcm9tIHRoZSBidWZmZXIgbWFuYWdlciBpbiBvcmRlciB0bwpAQCAtNTI5LDEw ICs0NjksOSBAQCBzbWdycHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0pCiAgKgkJcmV0dXJuIHBhZ2VzIGluIHRo ZSBmb3JtYXQgdGhhdCBQT1NUR1JFUyBleHBlY3RzLgogICovCiB2b2lkCi1zbWdycmVhZChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9j a251bSwKLQkJIGNoYXIgKmJ1ZmZlcikKK3NtZ3JyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxl LCBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyKQogewotCXNtZ3Jzd1tyZWxu LT5zbWdyX3doaWNoXS5zbWdyX3JlYWQocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGJ1ZmZl cik7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3JlYWQoc2ZpbGUsIGJsb2Nr bnVtLCBidWZmZXIpOwogfQogCiAvKgpAQCAtNTUxLDExICs0OTAsMTEgQEAgc21ncnJlYWQo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxv Y2tudW0sCiAgKgkJZG8gbm90IHJlcXVpcmUgZnN5bmMuCiAgKi8KIHZvaWQKLXNtZ3J3cml0 ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bG9ja251bSwKK3NtZ3J3cml0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIg YmxvY2tudW0sCiAJCSAgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYykKIHsKLQlzbWdy c3dbcmVsbi0+c21ncl93aGljaF0uc21ncl93cml0ZShyZWxuLCBmb3JrbnVtLCBibG9ja251 bSwKLQkJCQkJCQkJCQlidWZmZXIsIHNraXBGc3luYyk7CisJc21ncnN3W3NmaWxlLT5zbWdy X3doaWNoXS5zbWdyX3dyaXRlKHNmaWxlLCBibG9ja251bSwKKwkJCQkJCQkJCQkgYnVmZmVy LCBza2lwRnN5bmMpOwogfQogCiAKQEAgLTU2NCwxMSArNTAzLDExIEBAIHNtZ3J3cml0ZShT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9j a251bSwKICAqCQkJCQkgICBibG9ja3MuCiAgKi8KIHZvaWQKLXNtZ3J3cml0ZWJhY2soU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tu dW0sCitzbWdyd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBi bG9ja251bSwKIAkJCSAgQmxvY2tOdW1iZXIgbmJsb2NrcykKIHsKLQlzbWdyc3dbcmVsbi0+ c21ncl93aGljaF0uc21ncl93cml0ZWJhY2socmVsbiwgZm9ya251bSwgYmxvY2tudW0sCi0J CQkJCQkJCQkJCW5ibG9ja3MpOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl93 cml0ZWJhY2soc2ZpbGUsIGJsb2NrbnVtLAorCQkJCQkJCQkJCQkgbmJsb2Nrcyk7CiB9CiAK IC8qCkBAIC01NzYsMTggKzUxNSwxOCBAQCBzbWdyd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICoJCQkJ CSBzdXBwbGllZCByZWxhdGlvbi4KICAqLwogQmxvY2tOdW1iZXIKLXNtZ3JuYmxvY2tzKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCitzbWdybmJsb2NrcyhTTWdy RmlsZUhhbmRsZSBzZmlsZSkKIHsKIAlCbG9ja051bWJlciByZXN1bHQ7CiAKIAkvKiBDaGVj ayBhbmQgcmV0dXJuIGlmIHdlIGdldCB0aGUgY2FjaGVkIHZhbHVlIGZvciB0aGUgbnVtYmVy IG9mIGJsb2Nrcy4gKi8KLQlyZXN1bHQgPSBzbWdybmJsb2Nrc19jYWNoZWQocmVsbiwgZm9y a251bSk7CisJcmVzdWx0ID0gc21ncm5ibG9ja3NfY2FjaGVkKHNmaWxlKTsKIAlpZiAocmVz dWx0ICE9IEludmFsaWRCbG9ja051bWJlcikKIAkJcmV0dXJuIHJlc3VsdDsKIAotCXJlc3Vs dCA9IHNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX25ibG9ja3MocmVsbiwgZm9ya251 bSk7CisJcmVzdWx0ID0gc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX25ibG9ja3Mo c2ZpbGUpOwogCi0JcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3JrbnVtXSA9IHJlc3Vs dDsKKwlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IHJlc3VsdDsKIAogCXJldHVybiBy ZXN1bHQ7CiB9CkBAIC02MDAsMzggKzUzOSw0MSBAQCBzbWdybmJsb2NrcyhTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICogZm9yayBzaXplIGlzIG5vdCBjYWNo ZWQuCiAgKi8KIEJsb2NrTnVtYmVyCi1zbWdybmJsb2Nrc19jYWNoZWQoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JuYmxvY2tzX2NhY2hlZChTTWdyRmls ZUhhbmRsZSBzZmlsZSkKIHsKIAkvKgogCSAqIEZvciBub3csIHdlIG9ubHkgdXNlIGNhY2hl ZCB2YWx1ZXMgaW4gcmVjb3ZlcnkgZHVlIHRvIGxhY2sgb2YgYSBzaGFyZWQKIAkgKiBpbnZh bGlkYXRpb24gbWVjaGFuaXNtIGZvciBjaGFuZ2VzIGluIGZpbGUgc2l6ZS4KIAkgKi8KLQlp ZiAoSW5SZWNvdmVyeSAmJiByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dICE9 IEludmFsaWRCbG9ja051bWJlcikKLQkJcmV0dXJuIHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9j a3NbZm9ya251bV07CisJaWYgKEluUmVjb3ZlcnkgJiYgc2ZpbGUtPnNtZ3JfY2FjaGVkX25i bG9ja3MgIT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCQlyZXR1cm4gc2ZpbGUtPnNtZ3JfY2Fj aGVkX25ibG9ja3M7CiAKIAlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCiAvKgot ICoJc21ncnRydW5jYXRlKCkgLS0gVHJ1bmNhdGUgdGhlIGdpdmVuIGZvcmtzIG9mIHN1cHBs aWVkIHJlbGF0aW9uIHRvCi0gKgkJCQkJICBlYWNoIHNwZWNpZmllZCBudW1iZXJzIG9mIGJs b2NrcworICoJc21ncnRydW5jYXRlX211bHRpKCkgLS0gVHJ1bmNhdGUgdGhlIGdpdmVuIGZv cmtzIG9mIHN1cHBsaWVkIHJlbGF0aW9uIHRvCisgKgkJCQkJCQllYWNoIHNwZWNpZmllZCBu dW1iZXJzIG9mIGJsb2NrcwogICoKICAqIFRoZSB0cnVuY2F0aW9uIGlzIGRvbmUgaW1tZWRp YXRlbHksIHNvIHRoaXMgY2FuJ3QgYmUgcm9sbGVkIGJhY2suCiAgKgogICogVGhlIGNhbGxl ciBtdXN0IGhvbGQgQWNjZXNzRXhjbHVzaXZlTG9jayBvbiB0aGUgcmVsYXRpb24sIHRvIGVu c3VyZSB0aGF0CiAgKiBvdGhlciBiYWNrZW5kcyByZWNlaXZlIHRoZSBzbWdyIGludmFsaWRh dGlvbiBldmVudCB0aGF0IHRoaXMgZnVuY3Rpb24gc2VuZHMKICAqIGJlZm9yZSB0aGV5IGFj Y2VzcyBhbnkgZm9ya3Mgb2YgdGhlIHJlbGF0aW9uIGFnYWluLgorICoKKyAqIExpa2Ugc21n cnVubGlua19tdWx0aSgpLCB0aGlzIGhhbmRsZXMgbXVsdGlwbGUgZm9ya3MgaW4gb25lIGNh bGwgYmVjYXVzZQorICogdGhlIGNhY2hlIGludmFsaWRhdGlvbiBoYXBwZW5zIGF0IHJlbGF0 aW9uIGdyYW51bGFyaXR5LgorICoKKyAqIE5COiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxl IGZvciBkcm9wcGluZyBidWZmZXJzISBCZWZvcmUgdjE2LCB0aGlzCisgKiBmdW5jdGlvbiBk aWQgaXQuCiAgKi8KIHZvaWQKLXNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciAqZm9ya251bSwgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5ibG9ja3MpCitz bWdydHJ1bmNhdGVfbXVsdGkoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBi YWNrZW5kLCBGb3JrTnVtYmVyICpmb3JrcywKKwkJCQkgICBpbnQgbmZvcmtzLCBCbG9ja051 bWJlciAqbmJsb2NrcykKIHsKIAlpbnQJCQlpOwogCi0JLyoKLQkgKiBHZXQgcmlkIG9mIGFu eSBidWZmZXJzIGZvciB0aGUgYWJvdXQtdG8tYmUtZGVsZXRlZCBibG9ja3MuIGJ1Zm1nciB3 aWxsCi0JICoganVzdCBkcm9wIHRoZW0gd2l0aG91dCBib3RoZXJpbmcgdG8gd3JpdGUgdGhl IGNvbnRlbnRzLgotCSAqLwotCURyb3BSZWxhdGlvbkJ1ZmZlcnMocmVsbiwgZm9ya251bSwg bmZvcmtzLCBuYmxvY2tzKTsKKwlBc3NlcnQobmZvcmtzIDwgTUFYX0ZPUktOVU0gKyAxKTsK IAogCS8qCiAJICogU2VuZCBhIHNoYXJlZC1pbnZhbCBtZXNzYWdlIHRvIGZvcmNlIG90aGVy IGJhY2tlbmRzIHRvIGNsb3NlIGFueSBzbWdyCkBAIC02NDMsMTUgKzU4NSwxOSBAQCBzbWdy dHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtudW0sIGludCBu Zm9ya3MsIEJsb2NrTnVtYmVyICpuYgogCSAqIGlzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwg cGF0aC4pICBBcyBpbiB0aGUgdW5saW5rIGNvZGUsIHdlIHdhbnQgdG8gYmUKIAkgKiBzdXJl IHRoZSBtZXNzYWdlIGlzIHNlbnQgYmVmb3JlIHdlIHN0YXJ0IGNoYW5naW5nIHRoaW5ncyBv bi1kaXNrLgogCSAqLwotCUNhY2hlSW52YWxpZGF0ZVNtZ3IocmVsbi0+c21ncl9ybG9jYXRv cik7CisJQ2FjaGVJbnZhbGlkYXRlU21ncihybG9jYXRvciwgYmFja2VuZCk7CiAKLQkvKiBE byB0aGUgdHJ1bmNhdGlvbiAqLworCS8qIERvIHRoZSB0cnVuY2F0aW9ucyAqLwogCWZvciAo aSA9IDA7IGkgPCBuZm9ya3M7IGkrKykKIAl7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwor CisJCXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtzW2ldKTsKKwog CQkvKiBNYWtlIHRoZSBjYWNoZWQgc2l6ZSBpcyBpbnZhbGlkIGlmIHdlIGVuY291bnRlciBh biBlcnJvci4gKi8KLQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3JrbnVtW2ldXSA9 IEludmFsaWRCbG9ja051bWJlcjsKKwkJc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJ bnZhbGlkQmxvY2tOdW1iZXI7CiAKLQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jf dHJ1bmNhdGUocmVsbiwgZm9ya251bVtpXSwgbmJsb2Nrc1tpXSk7CisJCXNtZ3Jzd1tzZmls ZS0+c21ncl93aGljaF0uc21ncl90cnVuY2F0ZShzZmlsZSwgbmJsb2Nrc1tpXSk7CiAKIAkJ LyoKIAkJICogV2UgbWlnaHQgYXMgd2VsbCB1cGRhdGUgdGhlIGxvY2FsIHNtZ3JfY2FjaGVk X25ibG9ja3MgdmFsdWVzLiBUaGUKQEAgLTY2MCw3ICs2MDYsNyBAQCBzbWdydHJ1bmNhdGUo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtudW0sIGludCBuZm9ya3MsIEJs b2NrTnVtYmVyICpuYgogCQkgKiBzbWdyX3ZtX25ibG9ja3MsIGFuZCB0aGVzZSBvbmVzIHRv byBhdCB0aGUgbmV4dCBjb21tYW5kIGJvdW5kYXJ5LgogCQkgKiBCdXQgdGhlc2UgZW5zdXJl IHRoZXkgYXJlbid0IG91dHJpZ2h0IHdyb25nIHVudGlsIHRoZW4uCiAJCSAqLwotCQlyZWxu LT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1baV1dID0gbmJsb2Nrc1tpXTsKKwkJc2Zp bGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBuYmxvY2tzW2ldOwogCX0KIH0KIApAQCAtNjg4 LDkgKzYzNCw5IEBAIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciAqZm9ya251bSwgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5iCiAgKgkJb3RoZXJ3aXNl IHRoZSBzeW5jIGlzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuCiAgKi8KIHZvaWQKLXNtZ3JpbW1l ZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3NtZ3JpbW1l ZHN5bmMoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jfd2hp Y2hdLnNtZ3JfaW1tZWRzeW5jKHJlbG4sIGZvcmtudW0pOworCXNtZ3Jzd1tzZmlsZS0+c21n cl93aGljaF0uc21ncl9pbW1lZHN5bmMoc2ZpbGUpOwogfQogCiAvKgpAQCAtNzE0LDE0ICs2 NjAsMTQgQEAgQXRFT1hhY3RfU01ncih2b2lkKQogCSAqIFphcCBhbGwgdW5vd25lZCBTTWdy UmVsYXRpb25zLiAgV2UgcmVseSBvbiBzbWdyY2xvc2UoKSB0byByZW1vdmUgZWFjaAogCSAq IG9uZSBmcm9tIHRoZSBsaXN0LgogCSAqLwotCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIs ICZ1bm93bmVkX3JlbG5zKQorCWRsaXN0X2ZvcmVhY2hfbW9kaWZ5KGl0ZXIsICZ1bm93bmVk X3NmaWxlcykKIAl7Ci0JCVNNZ3JSZWxhdGlvbiByZWwgPSBkbGlzdF9jb250YWluZXIoU01n clJlbGF0aW9uRGF0YSwgbm9kZSwKLQkJCQkJCQkJCQkgICBpdGVyLmN1cik7CisJCVNNZ3JG aWxlSGFuZGxlIHNmaWxlID0gZGxpc3RfY29udGFpbmVyKFNNZ3JGaWxlRGF0YSwgbm9kZSwK KwkJCQkJCQkJCQkJICAgaXRlci5jdXIpOwogCi0JCUFzc2VydChyZWwtPnNtZ3Jfb3duZXIg PT0gTlVMTCk7CisJCUFzc2VydChzZmlsZS0+c21ncl9vd25lciA9PSBOVUxMKTsKIAotCQlz bWdyY2xvc2UocmVsKTsKKwkJc21ncmNsb3NlKHNmaWxlKTsKIAl9CiB9CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMgYi9zcmMvYmFja2VuZC91dGls cy9jYWNoZS9pbnZhbC5jCmluZGV4IGViNTc4MmY4MmE0Li5iZDQzNTIxNWRjYSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvaW52YWwuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9pbnZhbC5jCkBAIC02NjEsMTEgKzY2MSwxMiBAQCBMb2NhbEV4ZWN1 dGVJbnZhbGlkYXRpb25NZXNzYWdlKFNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UgKm1zZykK IAkJICogV2UgY291bGQgaGF2ZSBzbWdyIGVudHJpZXMgZm9yIHJlbGF0aW9ucyBvZiBvdGhl ciBkYXRhYmFzZXMsIHNvIG5vCiAJCSAqIHNob3J0LWNpcmN1aXQgdGVzdCBpcyBwb3NzaWJs ZSBoZXJlLgogCQkgKi8KLQkJUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yOworCQlS ZWxGaWxlTG9jYXRvciBybG9jYXRvcjsKKwkJQmFja2VuZElkIGJhY2tlbmQ7CiAKLQkJcmxv Y2F0b3IubG9jYXRvciA9IG1zZy0+c20ucmxvY2F0b3I7Ci0JCXJsb2NhdG9yLmJhY2tlbmQg PSAobXNnLT5zbS5iYWNrZW5kX2hpIDw8IDE2KSB8IChpbnQpIG1zZy0+c20uYmFja2VuZF9s bzsKLQkJc21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvcik7CisJCXJsb2NhdG9yID0gbXNn LT5zbS5ybG9jYXRvcjsKKwkJYmFja2VuZCA9IChtc2ctPnNtLmJhY2tlbmRfaGkgPDwgMTYp IHwgKGludCkgbXNnLT5zbS5iYWNrZW5kX2xvOworCQlzbWdyY2xvc2VyZWxsb2NhdG9yKHJs b2NhdG9yLCBiYWNrZW5kKTsKIAl9CiAJZWxzZSBpZiAobXNnLT5pZCA9PSBTSEFSRURJTlZB TFJFTE1BUF9JRCkKIAl7CkBAIC0xNDU5LDE0ICsxNDYwLDE0IEBAIENhY2hlSW52YWxpZGF0 ZVJlbGNhY2hlQnlSZWxpZChPaWQgcmVsaWQpCiAgKiBUaHVzLCB0aGUgbWF4aW11bSBwb3Nz aWJsZSBiYWNrZW5kIElEIGlzIDJeMjMtMS4KICAqLwogdm9pZAotQ2FjaGVJbnZhbGlkYXRl U21ncihSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IpCitDYWNoZUludmFsaWRhdGVT bWdyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKIHsKIAlT aGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlIG1zZzsKIAogCW1zZy5zbS5pZCA9IFNIQVJFRElO VkFMU01HUl9JRDsKLQltc2cuc20uYmFja2VuZF9oaSA9IHJsb2NhdG9yLmJhY2tlbmQgPj4g MTY7Ci0JbXNnLnNtLmJhY2tlbmRfbG8gPSBybG9jYXRvci5iYWNrZW5kICYgMHhmZmZmOwot CW1zZy5zbS5ybG9jYXRvciA9IHJsb2NhdG9yLmxvY2F0b3I7CisJbXNnLnNtLmJhY2tlbmRf aGkgPSBiYWNrZW5kID4+IDE2OworCW1zZy5zbS5iYWNrZW5kX2xvID0gYmFja2VuZCAmIDB4 ZmZmZjsKKwltc2cuc20ucmxvY2F0b3IgPSBybG9jYXRvcjsKIAkvKiBjaGVjayBBZGRDYXRj YWNoZUludmFsaWRhdGlvbk1lc3NhZ2UoKSBmb3IgYW4gZXhwbGFuYXRpb24gKi8KIAlWQUxH UklORF9NQUtFX01FTV9ERUZJTkVEKCZtc2csIHNpemVvZihtc2cpKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggYmRiNzcxZDI3OGYuLjkwYTFlYjkxOTgwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTQxOCw3ICs0MTgsNyBAQCBB bGxvY2F0ZVJlbGF0aW9uRGVzYyhGb3JtX3BnX2NsYXNzIHJlbHApCiAJcmVsYXRpb24gPSAo UmVsYXRpb24pIHBhbGxvYzAoc2l6ZW9mKFJlbGF0aW9uRGF0YSkpOwogCiAJLyogbWFrZSBz dXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8gb3BlbiBmaWxlIHlldCAqLwot CXJlbGF0aW9uLT5yZF9zbWdyID0gTlVMTDsKKwlNZW1TZXQocmVsYXRpb24tPnJkX3NtZ3Is IDAsIHNpemVvZihyZWxhdGlvbi0+cmRfc21ncikpOwogCiAJLyoKIAkgKiBDb3B5IHRoZSBy ZWxhdGlvbiB0dXBsZSBmb3JtCkBAIC0xMjQ3LDcgKzEyNDcsNyBAQCByZXRyeToKIAlSZWxh dGlvbkluaXRQaHlzaWNhbEFkZHIocmVsYXRpb24pOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0 aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8gb3BlbiBmaWxlIHlldCAqLwotCXJlbGF0aW9u LT5yZF9zbWdyID0gTlVMTDsKKwlNZW1TZXQocmVsYXRpb24tPnJkX3NtZ3IsIDAsIHNpemVv ZihyZWxhdGlvbi0+cmRfc21ncikpOwogCiAJLyoKIAkgKiBub3cgd2UgY2FuIGZyZWUgdGhl IG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHBnX2NsYXNzX3R1cGxlCkBAIC0xODc2LDcgKzE4NzYs NyBAQCBmb3JtcmRlc2MoY29uc3QgY2hhciAqcmVsYXRpb25OYW1lLCBPaWQgcmVsYXRpb25S ZWx0eXBlLAogCXJlbGF0aW9uID0gKFJlbGF0aW9uKSBwYWxsb2MwKHNpemVvZihSZWxhdGlv bkRhdGEpKTsKIAogCS8qIG1ha2Ugc3VyZSByZWxhdGlvbiBpcyBtYXJrZWQgYXMgaGF2aW5n IG5vIG9wZW4gZmlsZSB5ZXQgKi8KLQlyZWxhdGlvbi0+cmRfc21nciA9IE5VTEw7CisJTWVt U2V0KHJlbGF0aW9uLT5yZF9zbWdyLCAwLCBzaXplb2YocmVsYXRpb24tPnJkX3NtZ3IpKTsK IAogCS8qCiAJICogaW5pdGlhbGl6ZSByZWZlcmVuY2UgY291bnQ6IDEgYmVjYXVzZSBpdCBp cyBuYWlsZWQgaW4gY2FjaGUKQEAgLTI2OTMsNyArMjY5Myw4IEBAIFJlbGF0aW9uQ2xlYXJS ZWxhdGlvbihSZWxhdGlvbiByZWxhdGlvbiwgYm9vbCByZWJ1aWxkKQogCQl9CiAKIAkJLyog cmRfc21nciBtdXN0IG5vdCBiZSBzd2FwcGVkLCBkdWUgdG8gYmFjay1saW5rcyBmcm9tIHNt Z3IgbGV2ZWwgKi8KLQkJU1dBUEZJRUxEKFNNZ3JSZWxhdGlvbiwgcmRfc21ncik7CisJCWZv ciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJCQlTV0FQRklFTEQoU01n ckZpbGVIYW5kbGUsIHJkX3NtZ3JbaV0pOwogCQkvKiByZF9yZWZjbnQgbXVzdCBiZSBwcmVz ZXJ2ZWQgKi8KIAkJU1dBUEZJRUxEKGludCwgcmRfcmVmY250KTsKIAkJLyogaXNuYWlsZWQg c2hvdWxkbid0IGNoYW5nZSAqLwpAQCAtMzUyNCw3ICszNTI1LDcgQEAgUmVsYXRpb25CdWls ZExvY2FsUmVsYXRpb24oY29uc3QgY2hhciAqcmVsbmFtZSwKIAlyZWwgPSAoUmVsYXRpb24p IHBhbGxvYzAoc2l6ZW9mKFJlbGF0aW9uRGF0YSkpOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0 aW9uIGlzIG1hcmtlZCBhcyBoYXZpbmcgbm8gb3BlbiBmaWxlIHlldCAqLwotCXJlbC0+cmRf c21nciA9IE5VTEw7CisJTWVtU2V0KHJlbC0+cmRfc21nciwgMCwgc2l6ZW9mKHJlbC0+cmRf c21ncikpOwogCiAJLyogbWFyayBpdCBuYWlsZWQgaWYgYXBwcm9wcmlhdGUgKi8KIAlyZWwt PnJkX2lzbmFpbGVkID0gbmFpbGl0OwpAQCAtMzc0OCw3ICszNzQ5LDcgQEAgUmVsYXRpb25T ZXROZXdSZWxmaWxlbnVtYmVyKFJlbGF0aW9uIHJlbGF0aW9uLCBjaGFyIHBlcnNpc3RlbmNl KQogCWVsc2UgaWYgKFJFTEtJTkRfSEFTX1NUT1JBR0UocmVsYXRpb24tPnJkX3JlbC0+cmVs a2luZCkpCiAJewogCQkvKiBoYW5kbGUgdGhlc2UgZGlyZWN0bHksIGF0IGxlYXN0IGZvciBu b3cgKi8KLQkJU01nclJlbGF0aW9uIHNyZWw7CisJCVNNZ3JGaWxlSGFuZGxlIHNyZWw7CiAK IAkJc3JlbCA9IFJlbGF0aW9uQ3JlYXRlU3RvcmFnZShuZXdybG9jYXRvciwgcGVyc2lzdGVu Y2UsIHRydWUpOwogCQlzbWdyY2xvc2Uoc3JlbCk7CkBAIC02MjM1LDcgKzYyMzYsNyBAQCBs b2FkX3JlbGNhY2hlX2luaXRfZmlsZShib29sIHNoYXJlZCkKIAkJLyoKIAkJICogUmVzZXQg dHJhbnNpZW50LXN0YXRlIGZpZWxkcyBpbiB0aGUgcmVsY2FjaGUgZW50cnkKIAkJICovCi0J CXJlbC0+cmRfc21nciA9IE5VTEw7CisJCU1lbVNldChyZWwtPnJkX3NtZ3IsIDAsIHNpemVv ZihyZWwtPnJkX3NtZ3IpKTsKIAkJaWYgKHJlbC0+cmRfaXNuYWlsZWQpCiAJCQlyZWwtPnJk X3JlZmNudCA9IDE7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vcmVscGF0aC5j IGIvc3JjL2NvbW1vbi9yZWxwYXRoLmMKaW5kZXggMWI2YjYyMGNlODMuLmFlODc4NDNhZTdl IDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3JlbHBhdGguYworKysgYi9zcmMvY29tbW9uL3Jl bHBhdGguYwpAQCAtMTI5LDcgKzEyOSw3IEBAIEdldERhdGFiYXNlUGF0aChPaWQgZGJPaWQs IE9pZCBzcGNPaWQpCiB9CiAKIC8qCi0gKiBHZXRSZWxhdGlvblBhdGggLSBjb25zdHJ1Y3Qg cGF0aCB0byBhIHJlbGF0aW9uJ3MgZmlsZQorICogR2V0U01nckZpbGVQYXRoIC0gY29uc3Ry dWN0IHBhdGggdG8gYSByZWxhdGlvbidzIGZpbGUKICAqCiAgKiBSZXN1bHQgaXMgYSBwYWxs b2MnZCBzdHJpbmcuCiAgKgpAQCAtMTM4LDcgKzEzOCw3IEBAIEdldERhdGFiYXNlUGF0aChP aWQgZGJPaWQsIE9pZCBzcGNPaWQpCiAgKiB0aGUgdHJvdWJsZSBjb25zaWRlcmluZyBCYWNr ZW5kSWQgaXMganVzdCBpbnQgYW55d2F5LgogICovCiBjaGFyICoKLUdldFJlbGF0aW9uUGF0 aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQsIFJlbEZpbGVOdW1iZXIgcmVsTnVtYmVyLAorR2V0 U01nckZpbGVQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCwgUmVsRmlsZU51bWJlciByZWxO dW1iZXIsCiAJCQkJaW50IGJhY2tlbmRJZCwgRm9ya051bWJlciBmb3JrTnVtYmVyKQogewog CWNoYXIJICAgKnBhdGg7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3Jh Z2UuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oCmluZGV4IDk5NjRjMzEyYWEy Li4wNDExNDMwNTU0NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9zdG9yYWdl LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9zdG9yYWdlLmgKQEAgLTIyLDE5ICsyMiwy MCBAQAogLyogR1VDIHZhcmlhYmxlcyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCB3YWxf c2tpcF90aHJlc2hvbGQ7CiAKLWV4dGVybiBTTWdyUmVsYXRpb24gUmVsYXRpb25DcmVhdGVT dG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAotCQkJCQkJCQkJCSAgY2hhciByZWxw ZXJzaXN0ZW5jZSwKLQkJCQkJCQkJCQkgIGJvb2wgcmVnaXN0ZXJfZGVsZXRlKTsKK2V4dGVy biBTTWdyRmlsZUhhbmRsZSBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3Ig cmxvY2F0b3IsCisJCQkJCQkJCQkJCWNoYXIgcmVscGVyc2lzdGVuY2UsCisJCQkJCQkJCQkJ CWJvb2wgcmVnaXN0ZXJfZGVsZXRlKTsKIGV4dGVybiB2b2lkIFJlbGF0aW9uRHJvcFN0b3Jh Z2UoUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lkIFJlbGF0aW9uUHJlc2VydmVTdG9yYWdl KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBib29sIGF0Q29tbWl0KTsKIGV4dGVybiB2b2lk IFJlbGF0aW9uUHJlVHJ1bmNhdGUoUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lkIFJlbGF0 aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuYmxvY2tzKTsKLWV4dGVy biB2b2lkIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0 aW9uIGRzdCwKLQkJCQkJCQkJRm9ya051bWJlciBmb3JrTnVtLCBjaGFyIHJlbHBlcnNpc3Rl bmNlKTsKK2V4dGVybiB2b2lkIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nckZpbGVIYW5kbGUg c3JjLCBTTWdyRmlsZUhhbmRsZSBkc3QsCisJCQkJCQkJCWNoYXIgcmVscGVyc2lzdGVuY2Up OwogZXh0ZXJuIGJvb2wgUmVsRmlsZUxvY2F0b3JTa2lwcGluZ1dBTChSZWxGaWxlTG9jYXRv ciBybG9jYXRvcik7CiBleHRlcm4gU2l6ZSBFc3RpbWF0ZVBlbmRpbmdTeW5jc1NwYWNlKHZv aWQpOwogZXh0ZXJuIHZvaWQgU2VyaWFsaXplUGVuZGluZ1N5bmNzKFNpemUgbWF4U2l6ZSwg Y2hhciAqc3RhcnRBZGRyZXNzKTsKIGV4dGVybiB2b2lkIFJlc3RvcmVQZW5kaW5nU3luY3Mo Y2hhciAqc3RhcnRBZGRyZXNzKTsKK2V4dGVybiB2b2lkIERyb3BSZWxhdGlvbkZpbGVzKFJl bEZpbGVMb2NhdG9yICpkZWxyZWxzLCBpbnQgbmRlbHJlbHMsIGJvb2wgaXNSZWRvKTsKIAog LyoKICAqIFRoZXNlIGZ1bmN0aW9ucyB1c2VkIHRvIGJlIGluIHN0b3JhZ2Uvc21nci9zbWdy LmMsIHdoaWNoIGV4cGxhaW5zIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbW9u L3JlbHBhdGguaCBiL3NyYy9pbmNsdWRlL2NvbW1vbi9yZWxwYXRoLmgKaW5kZXggM2FiNzEz MjQ3ZjMuLmJlOTI5ODBmYjM0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vcmVs cGF0aC5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi9yZWxwYXRoLmgKQEAgLTY2LDI1ICs2 NiwyNSBAQCBleHRlcm4gaW50CWZvcmtuYW1lX2NoYXJzKGNvbnN0IGNoYXIgKnN0ciwgRm9y a051bWJlciAqZm9yayk7CiAgKi8KIGV4dGVybiBjaGFyICpHZXREYXRhYmFzZVBhdGgoT2lk IGRiT2lkLCBPaWQgc3BjT2lkKTsKIAotZXh0ZXJuIGNoYXIgKkdldFJlbGF0aW9uUGF0aChP aWQgZGJPaWQsIE9pZCBzcGNPaWQsIFJlbEZpbGVOdW1iZXIgcmVsTnVtYmVyLAorZXh0ZXJu IGNoYXIgKkdldFNNZ3JGaWxlUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQsIFJlbEZpbGVO dW1iZXIgcmVsTnVtYmVyLAogCQkJCQkJCSBpbnQgYmFja2VuZElkLCBGb3JrTnVtYmVyIGZv cmtOdW1iZXIpOwogCiAvKgogICogV3JhcHBlciBtYWNyb3MgZm9yIEdldFJlbGF0aW9uUGF0 aC4gIEJld2FyZSBvZiBtdWx0aXBsZQotICogZXZhbHVhdGlvbiBvZiB0aGUgUmVsRmlsZUxv Y2F0b3Igb3IgUmVsRmlsZUxvY2F0b3JCYWNrZW5kIGFyZ3VtZW50IQorICogZXZhbHVhdGlv biBvZiB0aGUgUmVsRmlsZUxvY2F0b3Igb3IgU01nckZpbGVMb2NhdG9yIGFyZ3VtZW50IQog ICovCiAKIC8qIEZpcnN0IGFyZ3VtZW50IGlzIGEgUmVsRmlsZUxvY2F0b3IgKi8KICNkZWZp bmUgcmVscGF0aGJhY2tlbmQocmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtudW0pIFwKLQlHZXRS ZWxhdGlvblBhdGgoKHJsb2NhdG9yKS5kYk9pZCwgKHJsb2NhdG9yKS5zcGNPaWQsIChybG9j YXRvcikucmVsTnVtYmVyLCBcCisJR2V0U01nckZpbGVQYXRoKChybG9jYXRvcikuZGJPaWQs IChybG9jYXRvcikuc3BjT2lkLCAocmxvY2F0b3IpLnJlbE51bWJlciwgXAogCQkJCQliYWNr ZW5kLCBmb3JrbnVtKQogCiAvKiBGaXJzdCBhcmd1bWVudCBpcyBhIFJlbEZpbGVMb2NhdG9y ICovCiAjZGVmaW5lIHJlbHBhdGhwZXJtKHJsb2NhdG9yLCBmb3JrbnVtKSBcCiAJcmVscGF0 aGJhY2tlbmQocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtudW0pCiAKLS8qIEZp cnN0IGFyZ3VtZW50IGlzIGEgUmVsRmlsZUxvY2F0b3JCYWNrZW5kICovCi0jZGVmaW5lIHJl bHBhdGgocmxvY2F0b3IsIGZvcmtudW0pIFwKLQlyZWxwYXRoYmFja2VuZCgocmxvY2F0b3Ip LmxvY2F0b3IsIChybG9jYXRvcikuYmFja2VuZCwgZm9ya251bSkKKy8qIEZpcnN0IGFyZ3Vt ZW50IGlzIGEgU01nckZpbGVMb2NhdG9yICovCisjZGVmaW5lIHNtZ3JmaWxlcGF0aChzbG9j YXRvcikgXAorCUdldFNNZ3JGaWxlUGF0aCgoc2xvY2F0b3IpLmxvY2F0b3IuZGJPaWQsIChz bG9jYXRvcikubG9jYXRvci5zcGNPaWQsIChzbG9jYXRvcikubG9jYXRvci5yZWxOdW1iZXIs IChzbG9jYXRvcikuYmFja2VuZCwgKHNsb2NhdG9yKS5mb3JrbnVtKQogCiAjZW5kaWYJCQkJ CQkJLyogUkVMUEFUSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1 Zl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCmlu ZGV4IDY5ZTQ1OTAwYmFlLi40ZTIzMmU1ZDc5NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZf aW50ZXJuYWxzLmgKQEAgLTMzMSwxMCArMzMxLDkgQEAgZXh0ZXJuIGludAlCdWZUYWJsZUlu c2VydChCdWZmZXJUYWcgKnRhZ1B0ciwgdWludDMyIGhhc2hjb2RlLCBpbnQgYnVmX2lkKTsK IGV4dGVybiB2b2lkIEJ1ZlRhYmxlRGVsZXRlKEJ1ZmZlclRhZyAqdGFnUHRyLCB1aW50MzIg aGFzaGNvZGUpOwogCiAvKiBsb2NhbGJ1Zi5jICovCi1leHRlcm4gUHJlZmV0Y2hCdWZmZXJS ZXN1bHQgUHJlZmV0Y2hMb2NhbEJ1ZmZlcihTTWdyUmVsYXRpb24gc21nciwKLQkJCQkJCQkJ CQkJCUZvcmtOdW1iZXIgZm9ya051bSwKK2V4dGVybiBQcmVmZXRjaEJ1ZmZlclJlc3VsdCBQ cmVmZXRjaExvY2FsQnVmZmVyKFNNZ3JGaWxlSGFuZGxlIHNtZ3IsCiAJCQkJCQkJCQkJCQlC bG9ja051bWJlciBibG9ja051bSk7Ci1leHRlcm4gQnVmZmVyRGVzYyAqTG9jYWxCdWZmZXJB bGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLAorZXh0ZXJuIEJ1 ZmZlckRlc2MgKkxvY2FsQnVmZmVyQWxsb2MoU01nckZpbGVIYW5kbGUgc21nciwKIAkJCQkJ CQkJCUJsb2NrTnVtYmVyIGJsb2NrTnVtLCBib29sICpmb3VuZFB0cik7CiBleHRlcm4gdm9p ZCBNYXJrTG9jYWxCdWZmZXJEaXJ0eShCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiB2b2lkIERy b3BSZWxhdGlvbkxvY2FsQnVmZmVycyhSZWxGaWxlTG9jYXRvciBybG9jYXRvciwKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zm1nci5oCmluZGV4IGJmOGNjZTdjY2Y2Li44OTdmMjg5Mzg2MCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zm1nci5oCkBAIC01OSw3ICs1OSw3IEBAIHR5cGVkZWYgc3RydWN0IFByZWZldGNo QnVmZmVyUmVzdWx0CiBzdHJ1Y3QgV3JpdGViYWNrQ29udGV4dDsKIAogLyogZm9yd2FyZCBk ZWNsYXJlZCwgdG8gYXZvaWQgaW5jbHVkaW5nIHNtZ3IuaCBoZXJlICovCi1zdHJ1Y3QgU01n clJlbGF0aW9uRGF0YTsKK3N0cnVjdCBTTWdyRmlsZURhdGE7CiAKIC8qIGluIGdsb2JhbHMu YyAuLi4gdGhpcyBkdXBsaWNhdGVzIG1pc2NhZG1pbi5oICovCiBleHRlcm4gUEdETExJTVBP UlQgaW50IE5CdWZmZXJzOwpAQCAtMTAxLDggKzEwMSw3IEBAIGV4dGVybiBQR0RMTElNUE9S VCBpbnQzMiAqTG9jYWxSZWZDb3VudDsKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlv bnMgaW4gYnVmbWdyLmMKICAqLwotZXh0ZXJuIFByZWZldGNoQnVmZmVyUmVzdWx0IFByZWZl dGNoU2hhcmVkQnVmZmVyKHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICpzbWdyX3JlbG4sCi0J CQkJCQkJCQkJCQkgRm9ya051bWJlciBmb3JrTnVtLAorZXh0ZXJuIFByZWZldGNoQnVmZmVy UmVzdWx0IFByZWZldGNoU2hhcmVkQnVmZmVyKHN0cnVjdCBTTWdyRmlsZURhdGEgKnNtZ3Jf ZmlsZSwKIAkJCQkJCQkJCQkJCSBCbG9ja051bWJlciBibG9ja051bSk7CiBleHRlcm4gUHJl ZmV0Y2hCdWZmZXJSZXN1bHQgUHJlZmV0Y2hCdWZmZXIoUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrTnVtLAogCQkJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrTnVtKTsKQEAg LTEzMSwxOCArMTMwLDI2IEBAIGV4dGVybiB2b2lkIENoZWNrUG9pbnRCdWZmZXJzKGludCBm bGFncyk7CiBleHRlcm4gQmxvY2tOdW1iZXIgQnVmZmVyR2V0QmxvY2tOdW1iZXIoQnVmZmVy IGJ1ZmZlcik7CiBleHRlcm4gQmxvY2tOdW1iZXIgUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nr c0luRm9yayhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCQkJCSAgIEZvcmtOdW1iZXIg Zm9ya051bSk7Ci1leHRlcm4gdm9pZCBGbHVzaE9uZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsK LWV4dGVybiB2b2lkIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCk7Ci1leHRl cm4gdm9pZCBGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoc3RydWN0IFNNZ3JSZWxhdGlvbkRh dGEgKipzbWdycywgaW50IG5yZWxzKTsKIGV4dGVybiB2b2lkIENyZWF0ZUFuZENvcHlSZWxh dGlvbkRhdGEoUmVsRmlsZUxvY2F0b3Igc3JjX3Jsb2NhdG9yLAogCQkJCQkJCQkJICBSZWxG aWxlTG9jYXRvciBkc3RfcmxvY2F0b3IsCiAJCQkJCQkJCQkgIGJvb2wgcGVybWFuZW50KTsK KworZXh0ZXJuIHZvaWQgRmx1c2hPbmVCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CitleHRlcm4g dm9pZCBGbHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpOworZXh0ZXJuIHZvaWQg Rmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFJlbEZpbGVMb2NhdG9yICpsb2NhdG9ycywgaW50 IG5sb2NhdG9ycyk7CiBleHRlcm4gdm9pZCBGbHVzaERhdGFiYXNlQnVmZmVycyhPaWQgZGJp ZCk7Ci1leHRlcm4gdm9pZCBEcm9wUmVsYXRpb25CdWZmZXJzKHN0cnVjdCBTTWdyUmVsYXRp b25EYXRhICpzbWdyX3JlbG4sCisKK2V4dGVybiB2b2lkIERyb3BSZWxhdGlvbkJ1ZmZlcnMo UmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLAogCQkJCQkJCQlG b3JrTnVtYmVyICpmb3JrTnVtLAogCQkJCQkJCQlpbnQgbmZvcmtzLCBCbG9ja051bWJlciAq Zmlyc3REZWxCbG9jayk7Ci1leHRlcm4gdm9pZCBEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhz dHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqKnNtZ3JfcmVsbiwKLQkJCQkJCQkJCWludCBubG9j YXRvcnMpOworCit0eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvckJhY2tlbmQKK3sKKwlS ZWxGaWxlTG9jYXRvciBsb2NhdG9yOworCUJhY2tlbmRJZAliYWNrZW5kOworfSBSZWxGaWxl TG9jYXRvckJhY2tlbmQ7CisKK2V4dGVybiB2b2lkIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJz KFJlbEZpbGVMb2NhdG9yQmFja2VuZCAqbG9jYXRvcnMsIGludCBubG9jYXRvcnMpOwogZXh0 ZXJuIHZvaWQgRHJvcERhdGFiYXNlQnVmZmVycyhPaWQgZGJpZCk7CiAKICNkZWZpbmUgUmVs YXRpb25HZXROdW1iZXJPZkJsb2NrcyhyZWxuKSBcCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL21kLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL21kLmgKaW5kZXggMTBhYTFi MDEwOWIuLmJjYjg3ZDU2Mjk1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL21k LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oCkBAIC0yMSwyOCArMjEsMjYgQEAK IAogLyogbWQgc3RvcmFnZSBtYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgKi8KIGV4dGVybiB2b2lk IG1kaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIG1kb3BlbihTTWdyUmVsYXRpb24gcmVsbik7 Ci1leHRlcm4gdm9pZCBtZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0pOwotZXh0ZXJuIHZvaWQgbWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pOwotZXh0ZXJuIGJvb2wgbWRleGlzdHMoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4gdm9pZCBtZHVu bGluayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251 bSwgYm9vbCBpc1JlZG8pOwotZXh0ZXJuIHZvaWQgbWRleHRlbmQoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIG1kb3BlbihTTWdyRmlsZUhh bmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBtZGNsb3NlKFNNZ3JGaWxlSGFuZGxlIHNmaWxl KTsKK2V4dGVybiB2b2lkIG1kY3JlYXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29sIGlz UmVkbyk7CitleHRlcm4gYm9vbCBtZGV4aXN0cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7Citl eHRlcm4gdm9pZCBtZHVubGluayhTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIGJvb2wgaXNS ZWRvKTsKK2V4dGVybiB2b2lkIG1kZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJ CQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMp OwotZXh0ZXJuIGJvb2wgbWRwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLAorZXh0ZXJuIGJvb2wgbWRwcmVmZXRjaChTTWdyRmlsZUhhbmRsZSBzZmls ZSwKIAkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tudW0pOwotZXh0ZXJuIHZvaWQgbWRyZWFk KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJs b2NrbnVtLAorZXh0ZXJuIHZvaWQgbWRyZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9j a051bWJlciBibG9ja251bSwKIAkJCQkgICBjaGFyICpidWZmZXIpOwotZXh0ZXJuIHZvaWQg bWR3cml0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0ZXJu IHZvaWQgbWR3cml0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJQmxvY2tOdW1iZXIg YmxvY2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotZXh0ZXJuIHZvaWQg bWR3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4 dGVybiB2b2lkIG1kd3JpdGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJQmxv Y2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotZXh0ZXJuIEJsb2Nr TnVtYmVyIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt KTsKLWV4dGVybiB2b2lkIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwKLQkJCQkJICAgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci1leHRlcm4gdm9p ZCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsK K2V4dGVybiBCbG9ja051bWJlciBtZG5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUpOwor ZXh0ZXJuIHZvaWQgbWR0cnVuY2F0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1i ZXIgbmJsb2Nrcyk7CitleHRlcm4gdm9pZCBtZGltbWVkc3luYyhTTWdyRmlsZUhhbmRsZSBz ZmlsZSk7CiAKIGV4dGVybiB2b2lkIEZvcmdldERhdGFiYXNlU3luY1JlcXVlc3RzKE9pZCBk YmlkKTsKLWV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpk ZWxyZWxzLCBpbnQgbmRlbHJlbHMsIGJvb2wgaXNSZWRvKTsKIAogLyogbWQgc3luYyBjYWxs YmFja3MgKi8KIGV4dGVybiBpbnQJbWRzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFn LCBjaGFyICpwYXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmls ZWxvY2F0b3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaAppbmRl eCAxMGY0MWYzYWJiMy4uMjk2Y2IxYjhlNTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3JlbGZp bGVsb2NhdG9yLmgKQEAgLTUzLDYgKzUzLDggQEAKICAqIE5vdGU6IHZhcmlvdXMgcGxhY2Vz IHVzZSBSZWxGaWxlTG9jYXRvciBpbiBoYXNodGFibGUga2V5cy4gIFRoZXJlZm9yZSwKICAq IHRoZXJlICptdXN0IG5vdCogYmUgYW55IHVudXNlZCBwYWRkaW5nIGJ5dGVzIGluIHRoaXMg c3RydWN0LiAgVGhhdAogICogc2hvdWxkIGJlIHNhZmUgYXMgbG9uZyBhcyBhbGwgdGhlIGZp ZWxkcyBhcmUgb2YgdHlwZSBPaWQuCisgKgorICogU2VlIGFsc28gU01nckZpbGVMb2NhdG9y IGluIHNtZ3IuaC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgUmVsRmlsZUxvY2F0b3IKIHsKQEAg LTYyLDM4ICs2NCwxNSBAQCB0eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvcgogfSBSZWxG aWxlTG9jYXRvcjsKIAogLyoKLSAqIEF1Z21lbnRpbmcgYSByZWxmaWxlbG9jYXRvciB3aXRo IHRoZSBiYWNrZW5kIElEIHByb3ZpZGVzIGFsbCB0aGUgaW5mb3JtYXRpb24KLSAqIHdlIG5l ZWQgdG8gbG9jYXRlIHRoZSBwaHlzaWNhbCBzdG9yYWdlLiAgVGhlIGJhY2tlbmQgSUQgaXMg SW52YWxpZEJhY2tlbmRJZAotICogZm9yIHJlZ3VsYXIgcmVsYXRpb25zICh0aG9zZSBhY2Nl c3NpYmxlIHRvIG1vcmUgdGhhbiBvbmUgYmFja2VuZCksIG9yIHRoZQotICogb3duaW5nIGJh Y2tlbmQncyBJRCBmb3IgYmFja2VuZC1sb2NhbCByZWxhdGlvbnMuICBCYWNrZW5kLWxvY2Fs IHJlbGF0aW9ucwotICogYXJlIGFsd2F5cyB0cmFuc2llbnQgYW5kIHJlbW92ZWQgaW4gY2Fz ZSBvZiBhIGRhdGFiYXNlIGNyYXNoOyB0aGV5IGFyZQotICogbmV2ZXIgV0FMLWxvZ2dlZCBv ciBmc3luYydkLgotICovCi10eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRvckJhY2tlbmQK LXsKLQlSZWxGaWxlTG9jYXRvciBsb2NhdG9yOwotCUJhY2tlbmRJZAliYWNrZW5kOwotfSBS ZWxGaWxlTG9jYXRvckJhY2tlbmQ7Ci0KLSNkZWZpbmUgUmVsRmlsZUxvY2F0b3JCYWNrZW5k SXNUZW1wKHJsb2NhdG9yKSBcCi0JKChybG9jYXRvcikuYmFja2VuZCAhPSBJbnZhbGlkQmFj a2VuZElkKQotCi0vKgotICogTm90ZTogUmVsRmlsZUxvY2F0b3JFcXVhbHMgYW5kIFJlbEZp bGVMb2NhdG9yQmFja2VuZEVxdWFscyBjb21wYXJlIHJlbE51bWJlcgorICogTm90ZTogUmVs RmlsZUxvY2F0b3JFcXVhbHMgY29tcGFyZXMgcmVsTnVtYmVyCiAgKiBmaXJzdCBzaW5jZSB0 aGF0IGlzIG1vc3QgbGlrZWx5IHRvIGJlIGRpZmZlcmVudCBpbiB0d28gdW5lcXVhbAogICog UmVsRmlsZUxvY2F0b3JzLiAgSXQgaXMgcHJvYmFibHkgcmVkdW5kYW50IHRvIGNvbXBhcmUg c3BjT2lkIGlmIHRoZSBvdGhlcgogICogZmllbGRzIGFyZSBmb3VuZCBlcXVhbCwgYnV0IGRv IGl0IGFueXdheSB0byBiZSBzdXJlLiAgTGlrZXdpc2UgZm9yIGNoZWNraW5nCi0gKiB0aGUg YmFja2VuZCBJRCBpbiBSZWxGaWxlTG9jYXRvckJhY2tlbmRFcXVhbHMuCisgKiB0aGUgYmFj a2VuZCBJRCBpbiBTTWdyRmlsZUxvY2F0b3JCYWNrZW5kRXF1YWxzLgogICovCiAjZGVmaW5l IFJlbEZpbGVMb2NhdG9yRXF1YWxzKGxvY2F0b3IxLCBsb2NhdG9yMikgXAogCSgobG9jYXRv cjEpLnJlbE51bWJlciA9PSAobG9jYXRvcjIpLnJlbE51bWJlciAmJiBcCiAJIChsb2NhdG9y MSkuZGJPaWQgPT0gKGxvY2F0b3IyKS5kYk9pZCAmJiBcCiAJIChsb2NhdG9yMSkuc3BjT2lk ID09IChsb2NhdG9yMikuc3BjT2lkKQogCi0jZGVmaW5lIFJlbEZpbGVMb2NhdG9yQmFja2Vu ZEVxdWFscyhsb2NhdG9yMSwgbG9jYXRvcjIpIFwKLQkoKGxvY2F0b3IxKS5sb2NhdG9yLnJl bE51bWJlciA9PSAobG9jYXRvcjIpLmxvY2F0b3IucmVsTnVtYmVyICYmIFwKLQkgKGxvY2F0 b3IxKS5sb2NhdG9yLmRiT2lkID09IChsb2NhdG9yMikubG9jYXRvci5kYk9pZCAmJiBcCi0J IChsb2NhdG9yMSkuYmFja2VuZCA9PSAobG9jYXRvcjIpLmJhY2tlbmQgJiYgXAotCSAobG9j YXRvcjEpLmxvY2F0b3Iuc3BjT2lkID09IChsb2NhdG9yMikubG9jYXRvci5zcGNPaWQpCi0K ICNlbmRpZgkJCQkJCQkvKiBSRUxGSUxFTE9DQVRPUl9IICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCmlu ZGV4IGEwNzcxNTM1NmJhLi4xMzBlNTkyNDFlMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9zbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKQEAgLTE4 LDMxICsxOCw1NiBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKICNpbmNsdWRlICJz dG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgiCiAKKwogLyoKLSAqIHNtZ3IuYyBtYWludGFpbnMg YSB0YWJsZSBvZiBTTWdyUmVsYXRpb24gb2JqZWN0cywgd2hpY2ggYXJlIGVzc2VudGlhbGx5 Ci0gKiBjYWNoZWQgZmlsZSBoYW5kbGVzLiAgQW4gU01nclJlbGF0aW9uIGlzIGNyZWF0ZWQg KGlmIG5vdCBhbHJlYWR5IHByZXNlbnQpCisgKiBTTWdyRmlsZUxvY2F0b3IgY29udGFpbnMg YWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gbG9jYXRlIHRoZSBwaHlzaWNhbAorICog c3RvcmFnZSBvZiBhIHJlbGF0aW9uIGZvcmssIG9yIHNvbWUgb3RoZXIgZmlsZSB0aGF0IGlz IG1hbmFnZWQgYnkgdGhlIGJ1ZmZlcgorICogbWFuYWdlci4KKyAqCisgKiBUaGUgYmFja2Vu ZCBJRCBpcyBJbnZhbGlkQmFja2VuZElkIGZvciByZWd1bGFyIHJlbGF0aW9ucyAodGhvc2Ug YWNjZXNzaWJsZQorICogdG8gbW9yZSB0aGFuIG9uZSBiYWNrZW5kKSwgb3IgdGhlIG93bmlu ZyBiYWNrZW5kJ3MgSUQgZm9yIGJhY2tlbmQtbG9jYWwKKyAqIHJlbGF0aW9ucy4gQmFja2Vu ZC1sb2NhbCByZWxhdGlvbnMgYXJlIGFsd2F5cyB0cmFuc2llbnQgYW5kIHJlbW92ZWQgaW4K KyAqIGNhc2Ugb2YgYSBkYXRhYmFzZSBjcmFzaDsgdGhleSBhcmUgbmV2ZXIgV0FMLWxvZ2dl ZCBvciBmc3luYydkLgorICovCit0eXBlZGVmIHN0cnVjdCBTTWdyRmlsZUxvY2F0b3IKK3sK KwlSZWxGaWxlTG9jYXRvciBsb2NhdG9yOworCUJhY2tlbmRJZAliYWNrZW5kOworCUZvcmtO dW1iZXIJZm9ya251bTsKK30gU01nckZpbGVMb2NhdG9yOworCisjZGVmaW5lIFNNZ3JGaWxl TG9jYXRvcklzVGVtcChzbG9jYXRvcikgXAorCSgoc2xvY2F0b3IpLmJhY2tlbmQgIT0gSW52 YWxpZEJhY2tlbmRJZCkKKworLyoKKyAqIHNtZ3IuYyBtYWludGFpbnMgYSB0YWJsZSBvZiBT TWdyRmlsZURhdGEgb2JqZWN0cywgd2hpY2ggYXJlIGVzc2VudGlhbGx5CisgKiBjYWNoZWQg ZmlsZSBoYW5kbGVzLiAgQW4gU01nckZpbGUgaXMgY3JlYXRlZCAoaWYgbm90IGFscmVhZHkg cHJlc2VudCkKICAqIGJ5IHNtZ3JvcGVuKCksIGFuZCBkZXN0cm95ZWQgYnkgc21ncmNsb3Nl KCkuICBOb3RlIHRoYXQgbmVpdGhlciBvZiB0aGVzZQogICogb3BlcmF0aW9ucyBpbXBseSBJ L08sIHRoZXkganVzdCBjcmVhdGUgb3IgZGVzdHJveSBhIGhhc2h0YWJsZSBlbnRyeS4KICAq IChCdXQgc21ncmNsb3NlKCkgbWF5IHJlbGVhc2UgYXNzb2NpYXRlZCByZXNvdXJjZXMsIHN1 Y2ggYXMgT1MtbGV2ZWwgZmlsZQogICogZGVzY3JpcHRvcnMuKQogICoKLSAqIEFuIFNNZ3JS ZWxhdGlvbiBtYXkgaGF2ZSBhbiAib3duZXIiLCB3aGljaCBpcyBqdXN0IGEgcG9pbnRlciB0 byBpdCBmcm9tCi0gKiBzb21ld2hlcmUgZWxzZTsgc21nci5jIHdpbGwgY2xlYXIgdGhpcyBw b2ludGVyIGlmIHRoZSBTTWdyUmVsYXRpb24gaXMKKyAqIEFuIFNNZ3JGaWxlIG1heSBoYXZl IGFuICJvd25lciIsIHdoaWNoIGlzIGp1c3QgYSBwb2ludGVyIHRvIGl0IGZyb20KKyAqIHNv bWV3aGVyZSBlbHNlOyBzbWdyLmMgd2lsbCBjbGVhciB0aGlzIHBvaW50ZXIgaWYgdGhlIFNN Z3JGaWxlIGlzCiAgKiBjbG9zZWQuICBXZSB1c2UgdGhpcyB0byBhdm9pZCBkYW5nbGluZyBw b2ludGVycyBmcm9tIHJlbGNhY2hlIHRvIHNtZ3IKICAqIHdpdGhvdXQgaGF2aW5nIHRvIG1h a2UgdGhlIHNtZ3IgZXhwbGljaXRseSBhd2FyZSBvZiByZWxjYWNoZS4gIFRoZXJlCiAgKiBj YW4ndCBiZSBtb3JlIHRoYW4gb25lICJvd25lciIgcG9pbnRlciBwZXIgU01nclJlbGF0aW9u LCBidXQgdGhhdCdzCiAgKiBhbGwgd2UgbmVlZC4KICAqCi0gKiBTTWdyUmVsYXRpb25zIHRo YXQgZG8gbm90IGhhdmUgYW4gIm93bmVyIiBhcmUgY29uc2lkZXJlZCB0byBiZSB0cmFuc2ll bnQsCisgKiBTTWdyRmlsZXMgdGhhdCBkbyBub3QgaGF2ZSBhbiAib3duZXIiIGFyZSBjb25z aWRlcmVkIHRvIGJlIHRyYW5zaWVudCwKICAqIGFuZCBhcmUgZGVsZXRlZCBhdCBlbmQgb2Yg dHJhbnNhY3Rpb24uCisgKgorICogQSBmaWxlIHRoYXQgaXMgcmVwcmVzZW50ZWQgYnkgYW4g U01nckZpbGUgY2FuIGJlIG1hbmFnZWQgYnkgdGhlIGJ1ZmZlcgorICogbWFuYWdlci4gQ3Vy cmVudGx5LCBpdCdzIG9ubHkgdXNlZCBmb3IgcmVsYXRpb24gZmlsZXMsIGJ1dCBjb3VsZCBi ZSB1c2VkCisgKiBmb3IgU0xSVXMgYW5kIG90aGVyIHRoaW5ncyBpbiB0aGUgZnV0dXJlLgog ICovCi10eXBlZGVmIHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhCit0eXBlZGVmIHN0cnVjdCBT TWdyRmlsZURhdGEKIHsKLQkvKiBybG9jYXRvciBpcyB0aGUgaGFzaHRhYmxlIGxvb2t1cCBr ZXksIHNvIGl0IG11c3QgYmUgZmlyc3QhICovCi0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHNt Z3JfcmxvY2F0b3I7CS8qIHJlbGF0aW9uIHBoeXNpY2FsIGlkZW50aWZpZXIgKi8KKwkvKiBs b2NhdG9yIGlzIHRoZSBoYXNodGFibGUgbG9va3VwIGtleSwgc28gbXVzdCBiZSBmaXJzdCEg Ki8KKwlTTWdyRmlsZUxvY2F0b3Igc21ncl9sb2NhdG9yOwkvKiBmaWxlIHBoeXNpY2FsIGlk ZW50aWZpZXIgKi8KIAogCS8qIHBvaW50ZXIgdG8gb3duaW5nIHBvaW50ZXIsIG9yIE5VTEwg aWYgbm9uZSAqLwotCXN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICoqc21ncl9vd25lcjsKKwlz dHJ1Y3QgU01nckZpbGVEYXRhICoqc21ncl9vd25lcjsKIAogCS8qCiAJICogVGhlIGZvbGxv d2luZyBmaWVsZHMgYXJlIHJlc2V0IHRvIEludmFsaWRCbG9ja051bWJlciB1cG9uIGEgY2Fj aGUgZmx1c2gKQEAgLTUxLDcgKzc2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclJlbGF0aW9u RGF0YQogCSAqIGludmFsaWRhdGlvbiBmb3IgZm9yayBleHRlbnNpb24uCiAJICovCiAJQmxv Y2tOdW1iZXIgc21ncl90YXJnYmxvY2s7IC8qIGN1cnJlbnQgaW5zZXJ0aW9uIHRhcmdldCBi bG9jayAqLwotCUJsb2NrTnVtYmVyIHNtZ3JfY2FjaGVkX25ibG9ja3NbTUFYX0ZPUktOVU0g KyAxXTsJLyogbGFzdCBrbm93biBzaXplICovCisJQmxvY2tOdW1iZXIgc21ncl9jYWNoZWRf bmJsb2NrczsJLyogbGFzdCBrbm93biBzaXplICovCiAKIAkvKiBhZGRpdGlvbmFsIHB1Ymxp YyBmaWVsZHMgbWF5IHNvbWVkYXkgZXhpc3QgaGVyZSAqLwogCkBAIC02NSw0NiArOTAsNDUg QEAgdHlwZWRlZiBzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YQogCSAqIGZvciBtZC5jOyBwZXIt Zm9yayBhcnJheXMgb2YgdGhlIG51bWJlciBvZiBvcGVuIHNlZ21lbnRzCiAJICogKG1kX251 bV9vcGVuX3NlZ3MpIGFuZCB0aGUgc2VnbWVudHMgdGhlbXNlbHZlcyAobWRfc2VnX2Zkcyku CiAJICovCi0JaW50CQkJbWRfbnVtX29wZW5fc2Vnc1tNQVhfRk9SS05VTSArIDFdOwotCXN0 cnVjdCBfTWRmZFZlYyAqbWRfc2VnX2Zkc1tNQVhfRk9SS05VTSArIDFdOworCWludAkJCW1k X251bV9vcGVuX3NlZ3M7CisJc3RydWN0IF9NZGZkVmVjICptZF9zZWdfZmRzOwogCi0JLyog aWYgdW5vd25lZCwgbGlzdCBsaW5rIGluIGxpc3Qgb2YgYWxsIHVub3duZWQgU01nclJlbGF0 aW9ucyAqLworCS8qIGlmIHVub3duZWQsIGxpc3QgbGluayBpbiBsaXN0IG9mIGFsbCB1bm93 bmVkIFNNZ3JGaWxlcyAqLwogCWRsaXN0X25vZGUJbm9kZTsKLX0gU01nclJlbGF0aW9uRGF0 YTsKK30gU01nckZpbGVEYXRhOwogCi10eXBlZGVmIFNNZ3JSZWxhdGlvbkRhdGEgKlNNZ3JS ZWxhdGlvbjsKK3R5cGVkZWYgU01nckZpbGVEYXRhICpTTWdyRmlsZUhhbmRsZTsKIAogI2Rl ZmluZSBTbWdySXNUZW1wKHNtZ3IpIFwKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAo KHNtZ3IpLT5zbWdyX3Jsb2NhdG9yKQorCVNNZ3JGaWxlTG9jYXRvcklzVGVtcCgoc21ncikt PnNtZ3JfbG9jYXRvcikKIAogZXh0ZXJuIHZvaWQgc21ncmluaXQodm9pZCk7Ci1leHRlcm4g U01nclJlbGF0aW9uIHNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5k SWQgYmFja2VuZCk7Ci1leHRlcm4gYm9vbCBzbWdyZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgc21ncnNldG93bmVyKFNNZ3JS ZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKTsKLWV4dGVybiB2b2lkIHNtZ3Jj bGVhcm93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKTsKLWV4 dGVybiB2b2lkIHNtZ3JjbG9zZShTTWdyUmVsYXRpb24gcmVsbik7CitleHRlcm4gU01nckZp bGVIYW5kbGUgc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBi YWNrZW5kLCBGb3JrTnVtYmVyIGZvcmtOdW0pOworZXh0ZXJuIGJvb2wgc21ncmV4aXN0cyhT TWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBzbWdyc2V0b3duZXIoU01nckZp bGVIYW5kbGUgKm93bmVyLCBTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBz bWdyY2xlYXJvd25lcihTTWdyRmlsZUhhbmRsZSAqb3duZXIsIFNNZ3JGaWxlSGFuZGxlIHNm aWxlKTsKK2V4dGVybiB2b2lkIHNtZ3JjbG9zZShTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CiBl eHRlcm4gdm9pZCBzbWdyY2xvc2VhbGwodm9pZCk7Ci1leHRlcm4gdm9pZCBzbWdyY2xvc2Vy ZWxsb2NhdG9yKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvcik7Ci1leHRlcm4gdm9p ZCBzbWdycmVsZWFzZShTTWdyUmVsYXRpb24gcmVsbik7CiBleHRlcm4gdm9pZCBzbWdycmVs ZWFzZWFsbCh2b2lkKTsKLWV4dGVybiB2b2lkIHNtZ3JjcmVhdGUoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pOwotZXh0ZXJuIHZvaWQgc21n cmRvc3luY2FsbChTTWdyUmVsYXRpb24gKnJlbHMsIGludCBucmVscyk7Ci1leHRlcm4gdm9p ZCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJlbHMsIGJvb2wg aXNSZWRvKTsKLWV4dGVybiB2b2lkIHNtZ3JleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIHNtZ3JjcmVhdGUoU01nckZpbGVIYW5k bGUgc2ZpbGUsIGJvb2wgaXNSZWRvKTsKK2V4dGVybiB2b2lkIHNtZ3JleHRlbmQoU01nckZp bGVIYW5kbGUgc2ZpbGUsCiAJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpi dWZmZXIsIGJvb2wgc2tpcEZzeW5jKTsKLWV4dGVybiBib29sIHNtZ3JwcmVmZXRjaChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJIEJsb2NrTnVtYmVy IGJsb2NrbnVtKTsKLWV4dGVybiB2b2lkIHNtZ3JyZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gYm9vbCBzbWdycHJlZmV0Y2goU01nckZpbGVI YW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKK2V4dGVybiB2b2lkIHNtZ3Jy ZWFkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0s IGNoYXIgKmJ1ZmZlcik7Ci1leHRlcm4gdm9pZCBzbWdyd3JpdGUoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiB2b2lkIHNtZ3J3cml0ZShTTWdyRmls ZUhhbmRsZSBzZmlsZSwKIAkJCQkJICBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVm ZmVyLCBib29sIHNraXBGc3luYyk7Ci1leHRlcm4gdm9pZCBzbWdyd3JpdGViYWNrKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gdm9pZCBzbWdyd3Jp dGViYWNrKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJICBCbG9ja051bWJlciBibG9j a251bSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci1leHRlcm4gQmxvY2tOdW1iZXIgc21ncm5i bG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4g QmxvY2tOdW1iZXIgc21ncm5ibG9ja3NfY2FjaGVkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgc21ncnRydW5jYXRlKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyICpmb3JrbnVtLAotCQkJCQkJIGludCBuZm9ya3MsIEJsb2Nr TnVtYmVyICpuYmxvY2tzKTsKLWV4dGVybiB2b2lkIHNtZ3JpbW1lZHN5bmMoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gQmxvY2tOdW1iZXIgc21n cm5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIEJsb2NrTnVtYmVyIHNt Z3JuYmxvY2tzX2NhY2hlZChTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBz bWdyaW1tZWRzeW5jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKKworZXh0ZXJuIHZvaWQgc21n cnRydW5jYXRlX211bHRpKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFj a2VuZCwgRm9ya051bWJlciAqZm9ya3MsIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYmxv Y2tzKTsKK2V4dGVybiB2b2lkIHNtZ3J1bmxpbmtfbXVsdGkoUmVsRmlsZUxvY2F0b3Igcmxv Y2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyICpmb3JrcywgaW50IG5mb3Jr cywgYm9vbCBpc1JlZG8pOworCitleHRlcm4gdm9pZCBzbWdyY2xvc2VyZWxsb2NhdG9yKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCk7CisKIGV4dGVybiB2 b2lkIEF0RU9YYWN0X1NNZ3Iodm9pZCk7CiBleHRlcm4gYm9vbCBQcm9jZXNzQmFycmllclNt Z3JSZWxlYXNlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9pbnZh bC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaAppbmRleCAyMzc0OGI3MmNhZi4uYzQ5 NGMwMTA1NmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmgKKysrIGIv c3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaApAQCAtNDgsNyArNDgsNyBAQCBleHRlcm4gdm9p ZCBDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5VHVwbGUoSGVhcFR1cGxlIGNsYXNzVHVwbGUp OwogCiBleHRlcm4gdm9pZCBDYWNoZUludmFsaWRhdGVSZWxjYWNoZUJ5UmVsaWQoT2lkIHJl bGlkKTsKIAotZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlkYXRlU21ncihSZWxGaWxlTG9jYXRv ckJhY2tlbmQgcmxvY2F0b3IpOworZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlkYXRlU21ncihS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQpOwogCiBleHRlcm4g dm9pZCBDYWNoZUludmFsaWRhdGVSZWxtYXAoT2lkIGRhdGFiYXNlSWQpOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5o CmluZGV4IDdkYzQwMWNmMGRmLi42ZTg0OWE5MDFjZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTU0LDcg KzU0LDcgQEAgdHlwZWRlZiBMb2NrSW5mb0RhdGEgKkxvY2tJbmZvOwogdHlwZWRlZiBzdHJ1 Y3QgUmVsYXRpb25EYXRhCiB7CiAJUmVsRmlsZUxvY2F0b3IgcmRfbG9jYXRvcjsJLyogcmVs YXRpb24gcGh5c2ljYWwgaWRlbnRpZmllciAqLwotCVNNZ3JSZWxhdGlvbiByZF9zbWdyOwkJ LyogY2FjaGVkIGZpbGUgaGFuZGxlLCBvciBOVUxMICovCisJU01nckZpbGVIYW5kbGUgcmRf c21ncltNQVhfRk9SS05VTSArIDFdOwkJLyogY2FjaGVkIGZpbGUgaGFuZGxlcywgb3IgTlVM THMgKi8KIAlpbnQJCQlyZF9yZWZjbnQ7CQkvKiByZWZlcmVuY2UgY291bnQgKi8KIAlCYWNr ZW5kSWQJcmRfYmFja2VuZDsJCS8qIG93bmluZyBiYWNrZW5kIGlkLCBpZiB0ZW1wb3Jhcnkg cmVsYXRpb24gKi8KIAlib29sCQlyZF9pc2xvY2FsdGVtcDsgLyogcmVsIGlzIGEgdGVtcCBy ZWwgb2YgdGhpcyBzZXNzaW9uICovCkBAIC01NjIsMTUgKzU2MiwxNSBAQCB0eXBlZGVmIHN0 cnVjdCBWaWV3T3B0aW9ucwogICogTm90ZTogc2luY2UgYSByZWxjYWNoZSBmbHVzaCBjYW4g Y2F1c2UgdGhlIGZpbGUgaGFuZGxlIHRvIGJlIGNsb3NlZCBhZ2FpbiwKICAqIGl0J3MgdW53 aXNlIHRvIGhvbGQgb250byB0aGUgcG9pbnRlciByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9u IGZvciBhbnkKICAqIGxvbmcgcGVyaW9kLiAgUmVjb21tZW5kZWQgcHJhY3RpY2UgaXMgdG8g anVzdCByZS1leGVjdXRlIFJlbGF0aW9uR2V0U21ncgotICogZWFjaCB0aW1lIHlvdSBuZWVk IHRvIGFjY2VzcyB0aGUgU01nclJlbGF0aW9uLiAgSXQncyBxdWl0ZSBjaGVhcCBpbgorICog ZWFjaCB0aW1lIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgU01nckZpbGVIYW5kbGUuICBJdCdz IHF1aXRlIGNoZWFwIGluCiAgKiBjb21wYXJpc29uIHRvIHdoYXRldmVyIGFuIHNtZ3IgZnVu Y3Rpb24gaXMgZ29pbmcgdG8gZG8uCiAgKi8KLXN0YXRpYyBpbmxpbmUgU01nclJlbGF0aW9u Ci1SZWxhdGlvbkdldFNtZ3IoUmVsYXRpb24gcmVsKQorc3RhdGljIGlubGluZSBTTWdyRmls ZUhhbmRsZQorUmVsYXRpb25HZXRTbWdyKFJlbGF0aW9uIHJlbCwgRm9ya051bWJlciBmb3Jr TnVtKQogewotCWlmICh1bmxpa2VseShyZWwtPnJkX3NtZ3IgPT0gTlVMTCkpCi0JCXNtZ3Jz ZXRvd25lcigmKHJlbC0+cmRfc21nciksIHNtZ3JvcGVuKHJlbC0+cmRfbG9jYXRvciwgcmVs LT5yZF9iYWNrZW5kKSk7Ci0JcmV0dXJuIHJlbC0+cmRfc21ncjsKKwlpZiAodW5saWtlbHko cmVsLT5yZF9zbWdyW2ZvcmtOdW1dID09IE5VTEwpKQorCQlzbWdyc2V0b3duZXIoJihyZWwt PnJkX3NtZ3JbZm9ya051bV0pLCBzbWdyb3BlbihyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRf YmFja2VuZCwgZm9ya051bSkpOworCXJldHVybiByZWwtPnJkX3NtZ3JbZm9ya051bV07CiB9 CiAjZW5kaWYKIApAQCAtNTgwLDE0ICs1ODAsMTggQEAgUmVsYXRpb25HZXRTbWdyKFJlbGF0 aW9uIHJlbCkKICAqCiAgKiBOb3RlOiBzbWdyY2xvc2Ugc2hvdWxkIHVuaG9vayBmcm9tIG93 bmVyIHBvaW50ZXIsIGhlbmNlIHRoZSBBc3NlcnQuCiAgKi8KLSNkZWZpbmUgUmVsYXRpb25D bG9zZVNtZ3IocmVsYXRpb24pIFwKLQlkbyB7IFwKLQkJaWYgKChyZWxhdGlvbiktPnJkX3Nt Z3IgIT0gTlVMTCkgXAotCQl7IFwKLQkJCXNtZ3JjbG9zZSgocmVsYXRpb24pLT5yZF9zbWdy KTsgXAotCQkJQXNzZXJ0KChyZWxhdGlvbiktPnJkX3NtZ3IgPT0gTlVMTCk7IFwKLQkJfSBc Ci0JfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorUmVsYXRpb25DbG9zZVNtZ3Io UmVsYXRpb24gcmVsYXRpb24pCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktO VU07IGkrKykKKwl7CisJCWlmIChyZWxhdGlvbi0+cmRfc21ncltpXSAhPSBOVUxMKQorCQl7 CisJCQlzbWdyY2xvc2UocmVsYXRpb24tPnJkX3NtZ3JbaV0pOworCQkJQXNzZXJ0KHJlbGF0 aW9uLT5yZF9zbWdyW2ldID09IE5VTEwpOworCQl9CisJfQorfQogCiAvKgogICogUmVsYXRp b25HZXRUYXJnZXRCbG9jawpAQCAtNTk4LDcgKzYwMiw3IEBAIFJlbGF0aW9uR2V0U21ncihS ZWxhdGlvbiByZWwpCiAgKiBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gcmUtb3BlbiB0aGUgc21n ciBoYW5kbGUgaWYgaXQncyBub3QgY3VycmVudGx5IG9wZW4uCiAgKi8KICNkZWZpbmUgUmVs YXRpb25HZXRUYXJnZXRCbG9jayhyZWxhdGlvbikgXAotCSggKHJlbGF0aW9uKS0+cmRfc21n ciAhPSBOVUxMID8gKHJlbGF0aW9uKS0+cmRfc21nci0+c21ncl90YXJnYmxvY2sgOiBJbnZh bGlkQmxvY2tOdW1iZXIgKQorCSggKHJlbGF0aW9uKS0+cmRfc21ncltNQUlOX0ZPUktOVU1d ICE9IE5VTEwgPyAocmVsYXRpb24pLT5yZF9zbWdyW01BSU5fRk9SS05VTV0tPnNtZ3JfdGFy Z2Jsb2NrIDogSW52YWxpZEJsb2NrTnVtYmVyICkKIAogLyoKICAqIFJlbGF0aW9uU2V0VGFy Z2V0QmxvY2sKQEAgLTYwNiw3ICs2MTAsNyBAQCBSZWxhdGlvbkdldFNtZ3IoUmVsYXRpb24g cmVsKQogICovCiAjZGVmaW5lIFJlbGF0aW9uU2V0VGFyZ2V0QmxvY2socmVsYXRpb24sIHRh cmdibG9jaykgXAogCWRvIHsgXAotCQlSZWxhdGlvbkdldFNtZ3IocmVsYXRpb24pLT5zbWdy X3RhcmdibG9jayA9ICh0YXJnYmxvY2spOyBcCisJCVJlbGF0aW9uR2V0U21ncihyZWxhdGlv biwgTUFJTl9GT1JLTlVNKS0+c21ncl90YXJnYmxvY2sgPSAodGFyZ2Jsb2NrKTsgXAogCX0g d2hpbGUgKDApCiAKIC8qCi0tIAoyLjMwLjIKCg== --------------ZE0vKShhXkyE3BnngRBSgBaH Content-Type: text/x-patch; charset=UTF-8; name="0002-WIP-SLRUs.patch" Content-Disposition: attachment; filename="0002-WIP-SLRUs.patch" Content-Transfer-Encoding: base64 RnJvbSA4YjJjNzFkYWQ0NTRiYjgxZmU4YWI5Y2IxZThmZjcyNmNlMzg3NTBkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMjUgSnVsIDIwMjIgMTI6MDc6NDkgKzAzMDAK U3ViamVjdDogW1BBVENIIDIvMl0gV0lQOiBTTFJVcwoKVGhpcyBpcyBUaG9tYXMncyBwYXRj aCByZWZhY3RvcmVkIG92ZXIgdGhlIHBlci1mb3JrIFNNZ3JGaWxlIHBhdGNoOgoKLSBlYWNo IFNMUlUgc2VnbWVudCBpcyByZXByZXNlbnRlZCBieSBhIHNlcGFyYXRlIFNNZ3JGaWxlLgot IG1kLmMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBTTFJVcywgdG9vCi0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jICAgICAgfCAgMTk5ICstLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5jIHwgIDE1NiArLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIHwgIDM1NyArKy0tLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3NscnUuYyAgICAgIHwgMTQ4NyArKystLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgIHwgIDEwOCArLQog c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jICAgICAgfCAgICAyICsKIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgIHwgICAxNSArLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgfCAgIDY3ICstCiBzcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jICB8ICAgMTcgKy0KIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2J1Zm1nci5jICAgIHwgICA2MiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvaXBjaS5jICAgICAgICAgfCAgICA0IC0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9w cmVkaWNhdGUuYyAgIHwgICA2MiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMg ICAgICAgICAgfCAgICA5ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jICAg ICAgICB8ICAgNDMgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYyAgICAgICAg fCAgIDIwICstCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYyAgICAgICAgICB8ICAg MTMgKy0KIHNyYy9jb21tb24vcmVscGF0aC5jICAgICAgICAgICAgICAgICAgIHwgICAyNyAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaCAgICAgICAgICAgICAgfCAgICA2IC0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy9jb21taXRfdHMuaCAgICAgICAgIHwgICAgMyAtCiBzcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUv YWNjZXNzL3NscnUuaCAgICAgICAgICAgICAgfCAgMTgwICstLQogc3JjL2luY2x1ZGUvYWNj ZXNzL3NscnVsaXN0LmggICAgICAgICAgfCAgIDMwICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9z dWJ0cmFucy5oICAgICAgICAgIHwgICAgMyAtCiBzcmMvaW5jbHVkZS9jb21tb24vcmVscGF0 aC5oICAgICAgICAgICB8ICAgIDMgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJu YWxzLmggICAgfCAgICA2ICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggICAgICAg ICAgIHwgICAgOCArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmggICAgICAgICAgICAg fCAgICAxICsKIDI3IGZpbGVzIGNoYW5nZWQsIDY4OSBpbnNlcnRpb25zKCspLCAyMjAyIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1 bGlzdC5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCmluZGV4IDNkOTA4OGE3MDQ4 Li5mYmRhMmM2OWVhZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v Y2xvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtNDEs NiArNDEsOCBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNl LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIK KyNpbmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdl L3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N5bmMuaCIKIApAQCAtODEsMTUgKzgzLDgg QEAKICAqLwogI2RlZmluZSBUSFJFU0hPTERfU1VCVFJBTlNfQ0xPR19PUFQJNQogCi0vKgot ICogTGluayB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgQ0xPRyBjb250 cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBYYWN0Q3RsRGF0YTsKLQotI2RlZmluZSBY YWN0Q3RsICgmWGFjdEN0bERhdGEpCi0KIAotc3RhdGljIGludAlaZXJvQ0xPR1BhZ2UoaW50 IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOworc3RhdGljIEJ1ZmZlciBaZXJvQ0xPR1BhZ2Uo aW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgQ0xPR1BhZ2VQcmVj ZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiBzdGF0aWMgdm9pZCBXcml0ZVplcm9QYWdl WGxvZ1JlYyhpbnQgcGFnZW5vKTsKIHN0YXRpYyB2b2lkIFdyaXRlVHJ1bmNhdGVYbG9nUmVj KGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwKQEAgLTk5LDcgKzk0LDcg QEAgc3RhdGljIHZvaWQgVHJhbnNhY3Rpb25JZFNldFBhZ2VTdGF0dXMoVHJhbnNhY3Rpb25J ZCB4aWQsIGludCBuc3VieGlkcywKIAkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbHNuLCBpbnQg cGFnZW5vLAogCQkJCQkJCQkJICAgYm9vbCBhbGxfeGFjdF9zYW1lX3BhZ2UpOwogc3RhdGlj IHZvaWQgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlk U3RhdHVzIHN0YXR1cywKLQkJCQkJCQkJCSAgWExvZ1JlY1B0ciBsc24sIGludCBzbG90bm8p OworCQkJCQkJCQkJICBYTG9nUmVjUHRyIGxzbiwgQnVmZmVyIGJ1ZmZlcik7CiBzdGF0aWMg dm9pZCBzZXRfc3RhdHVzX2J5X3BhZ2VzKGludCBuc3VieGlkcywgVHJhbnNhY3Rpb25JZCAq c3VieGlkcywKIAkJCQkJCQkJWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24pOwog c3RhdGljIGJvb2wgVHJhbnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlv bklkIHhpZCwKQEAgLTM0MSwxMyArMzM2LDEyIEBAIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3Rh dHVzSW50ZXJuYWwoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIAkJCQkJCQkJ ICAgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywgWGlkU3RhdHVzIHN0YXR1cywKIAkJCQkJCQkJ ICAgWExvZ1JlY1B0ciBsc24sIGludCBwYWdlbm8pCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1 ZmZlcgkJYnVmZmVyOwogCWludAkJCWk7CiAKIAlBc3NlcnQoc3RhdHVzID09IFRSQU5TQUNU SU9OX1NUQVRVU19DT01NSVRURUQgfHwKIAkJICAgc3RhdHVzID09IFRSQU5TQUNUSU9OX1NU QVRVU19BQk9SVEVEIHx8CiAJCSAgIChzdGF0dXMgPT0gVFJBTlNBQ1RJT05fU1RBVFVTX1NV Ql9DT01NSVRURUQgJiYgIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpKTsKLQlBc3NlcnQo TFdMb2NrSGVsZEJ5TWVJbk1vZGUoWGFjdFNMUlVMb2NrLCBMV19FWENMVVNJVkUpKTsKIAog CS8qCiAJICogSWYgd2UncmUgZG9pbmcgYW4gYXN5bmMgY29tbWl0IChpZSwgbHNuIGlzIHZh bGlkKSwgdGhlbiB3ZSBtdXN0IHdhaXQKQEAgLTM1OCw3ICszNTIsOCBAQCBUcmFuc2FjdGlv bklkU2V0UGFnZVN0YXR1c0ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1Ynhp ZHMsCiAJICogd3JpdGUtYnVzeSwgc2luY2Ugd2UgZG9uJ3QgY2FyZSBpZiB0aGUgdXBkYXRl IHJlYWNoZXMgZGlzayBzb29uZXIgdGhhbgogCSAqIHdlIHRoaW5rLgogCSAqLwotCXNsb3Ru byA9IFNpbXBsZUxydVJlYWRQYWdlKFhhY3RDdGwsIHBhZ2VubywgWExvZ1JlY1B0cklzSW52 YWxpZChsc24pLCB4aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ0xPR19J RCwgcGFnZW5vKTsKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZF KTsKIAogCS8qCiAJICogU2V0IHRoZSBtYWluIHRyYW5zYWN0aW9uIGlkLCBpZiBhbnkuCkBA IC0zNzYsMjUgKzM3MSwyNiBAQCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1c0ludGVybmFs KFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCXsKIAkJCWZvciAoaSA9IDA7 IGkgPCBuc3VieGlkczsgaSsrKQogCQkJewotCQkJCUFzc2VydChYYWN0Q3RsLT5zaGFyZWQt PnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gVHJhbnNhY3Rpb25JZFRvUGFnZShzdWJ4aWRzW2ld KSk7CisJCQkJQXNzZXJ0KHBhZ2VubyA9PSBUcmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNb aV0pKTsKIAkJCQlUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KHN1YnhpZHNbaV0sCiAJCQkJ CQkJCQkJICBUUkFOU0FDVElPTl9TVEFUVVNfU1VCX0NPTU1JVFRFRCwKLQkJCQkJCQkJCQkg IGxzbiwgc2xvdG5vKTsKKwkJCQkJCQkJCQkgIGxzbiwgYnVmZmVyKTsKIAkJCX0KIAkJfQog CiAJCS8qIC4uLiB0aGVuIHRoZSBtYWluIHRyYW5zYWN0aW9uICovCi0JCVRyYW5zYWN0aW9u SWRTZXRTdGF0dXNCaXQoeGlkLCBzdGF0dXMsIGxzbiwgc2xvdG5vKTsKKwkJVHJhbnNhY3Rp b25JZFNldFN0YXR1c0JpdCh4aWQsIHN0YXR1cywgbHNuLCBidWZmZXIpOwogCX0KIAogCS8q IFNldCB0aGUgc3VidHJhbnNhY3Rpb25zICovCiAJZm9yIChpID0gMDsgaSA8IG5zdWJ4aWRz OyBpKyspCiAJewotCQlBc3NlcnQoWGFjdEN0bC0+c2hhcmVkLT5wYWdlX251bWJlcltzbG90 bm9dID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOwotCQlUcmFuc2FjdGlv bklkU2V0U3RhdHVzQml0KHN1YnhpZHNbaV0sIHN0YXR1cywgbHNuLCBzbG90bm8pOworCQlB c3NlcnQocGFnZW5vID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOworCQlU cmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KHN1YnhpZHNbaV0sIHN0YXR1cywgbHNuLCBidWZm ZXIpOwogCX0KIAotCVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1 ZTsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 ZmZlcik7CiB9CiAKIC8qCkBAIC01NjgsNyArNTY0LDcgQEAgVHJhbnNhY3Rpb25Hcm91cFVw ZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywKICAq IE11c3QgYmUgY2FsbGVkIHdpdGggWGFjdFNMUlVMb2NrIGhlbGQKICAqLwogc3RhdGljIHZv aWQKLVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0 YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuLCBpbnQgc2xvdG5vKQorVHJhbnNhY3Rpb25J ZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywgWExv Z1JlY1B0ciBsc24sIEJ1ZmZlciBidWZmZXIpCiB7CiAJaW50CQkJYnl0ZW5vID0gVHJhbnNh Y3Rpb25JZFRvQnl0ZSh4aWQpOwogCWludAkJCWJzaGlmdCA9IFRyYW5zYWN0aW9uSWRUb0JJ bmRleCh4aWQpICogQ0xPR19CSVRTX1BFUl9YQUNUOwpAQCAtNTc2LDcgKzU3MiwxMCBAQCBU cmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMg c3RhdHVzLCBYTG9nUmVjUHRyIGxzbiwgaQogCWNoYXIJCWJ5dGV2YWw7CiAJY2hhcgkJY3Vy dmFsOwogCi0JYnl0ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5v XSArIGJ5dGVubzsKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5TWVJbk1vZGUoQnVmZmVyRGVzY3Jp cHRvckdldENvbnRlbnRMb2NrKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSkpLAor CQkJCQkJCQlMV19FWENMVVNJVkUpKTsKKworCWJ5dGVwdHIgPSBCdWZmZXJHZXRQYWdlKGJ1 ZmZlcikgKyBieXRlbm87CiAJY3VydmFsID0gKCpieXRlcHRyID4+IGJzaGlmdCkgJiBDTE9H X1hBQ1RfQklUTUFTSzsKIAogCS8qCkBAIC02MDUsNyArNjA0LDcgQEAgVHJhbnNhY3Rpb25J ZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywgWExv Z1JlY1B0ciBsc24sIGkKIAkqYnl0ZXB0ciA9IGJ5dGV2YWw7CiAKIAkvKgotCSAqIFVwZGF0 ZSB0aGUgZ3JvdXAgTFNOIGlmIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIExTTiBpcyBo aWdoZXIuCisJICogVXBkYXRlIHRoZSBidWZmZXIgTFNOIGlmIHRoZSB0cmFuc2FjdGlvbiBj b21wbGV0aW9uIExTTiBpcyBoaWdoZXIuCiAJICoKIAkgKiBOb3RlOiBsc24gd2lsbCBiZSBp bnZhbGlkIHdoZW4gc3VwcGxpZWQgZHVyaW5nIEluUmVjb3ZlcnkgcHJvY2Vzc2luZywKIAkg KiBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgdG8gYXZvaWQgTFNO IHVwZGF0ZXMgZHVyaW5nCkBAIC02MTQsMTAgKzYxMyw4IEBAIFRyYW5zYWN0aW9uSWRTZXRT dGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQ dHIgbHNuLCBpCiAJICovCiAJaWYgKCFYTG9nUmVjUHRySXNJbnZhbGlkKGxzbikpCiAJewot CQlpbnQJCQlsc25pbmRleCA9IEdldExTTkluZGV4KHNsb3RubywgeGlkKTsKLQotCQlpZiAo WGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25bbHNuaW5kZXhdIDwgbHNuKQotCQkJWGFjdEN0 bC0+c2hhcmVkLT5ncm91cF9sc25bbHNuaW5kZXhdID0gbHNuOworCQlpZiAoQnVmZmVyR2V0 RXh0ZXJuYWxMU04oR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIpKSA8IGxzbikKKwkJCUJ1 ZmZlclNldEV4dGVybmFsTFNOKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyKSwgbHNuKTsK IAl9CiB9CiAKQEAgLTY0Miw2NyArNjM5LDIyIEBAIFRyYW5zYWN0aW9uSWRHZXRTdGF0dXMo VHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgKmxzbikKIAlpbnQJCQlwYWdlbm8gPSBU cmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAJaW50CQkJYnl0ZW5vID0gVHJhbnNhY3Rpb25J ZFRvQnl0ZSh4aWQpOwogCWludAkJCWJzaGlmdCA9IFRyYW5zYWN0aW9uSWRUb0JJbmRleCh4 aWQpICogQ0xPR19CSVRTX1BFUl9YQUNUOwotCWludAkJCXNsb3RubzsKLQlpbnQJCQlsc25p bmRleDsKIAljaGFyCSAgICpieXRlcHRyOwogCVhpZFN0YXR1cwlzdGF0dXM7CisJQnVmZmVy CQlidWZmZXI7CiAKLQkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdl X1JlYWRPbmx5ICovCi0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShY YWN0Q3RsLCBwYWdlbm8sIHhpZCk7Ci0JYnl0ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFn ZV9idWZmZXJbc2xvdG5vXSArIGJ5dGVubzsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihT TFJVX0NMT0dfSUQsIHBhZ2Vubyk7CisJYnl0ZXB0ciA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVy KSArIGJ5dGVubzsKIAogCXN0YXR1cyA9ICgqYnl0ZXB0ciA+PiBic2hpZnQpICYgQ0xPR19Y QUNUX0JJVE1BU0s7CiAKLQlsc25pbmRleCA9IEdldExTTkluZGV4KHNsb3RubywgeGlkKTsK LQkqbHNuID0gWGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25bbHNuaW5kZXhdOworCSpsc24g PSBCdWZmZXJHZXRFeHRlcm5hbExTTihHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlcikpOwog Ci0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOworCVJlbGVhc2VCdWZmZXIoYnVmZmVy KTsKIAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qCi0gKiBOdW1iZXIgb2Ygc2hhcmVkIENM T0cgYnVmZmVycy4KLSAqCi0gKiBPbiBsYXJnZXIgbXVsdGktcHJvY2Vzc29yIHN5c3RlbXMs IGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbWFueSBDTE9HIHBhZ2UKLSAqIHJlcXVlc3RzIGlu IGZsaWdodCBhdCBvbmUgdGltZSB3aGljaCBjb3VsZCBsZWFkIHRvIGRpc2sgYWNjZXNzIGZv ciBDTE9HCi0gKiBwYWdlIGlmIHRoZSByZXF1aXJlZCBwYWdlIGlzIG5vdCBmb3VuZCBpbiBt ZW1vcnkuICBUZXN0aW5nIHJldmVhbGVkIHRoYXQgd2UKLSAqIGNhbiBnZXQgdGhlIGJlc3Qg cGVyZm9ybWFuY2UgYnkgaGF2aW5nIDEyOCBDTE9HIGJ1ZmZlcnMsIG1vcmUgdGhhbiB0aGF0 IGl0Ci0gKiBkb2Vzbid0IGltcHJvdmUgcGVyZm9ybWFuY2UuCi0gKgotICogVW5jb25kaXRp b25hbGx5IGtlZXBpbmcgdGhlIG51bWJlciBvZiBDTE9HIGJ1ZmZlcnMgdG8gMTI4IGRpZCBu b3Qgc2VlbSBsaWtlCi0gKiBhIGdvb2QgaWRlYSwgYmVjYXVzZSBpdCB3b3VsZCBpbmNyZWFz ZSB0aGUgbWluaW11bSBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeQotICogcmVxdWlyZWQgdG8g c3RhcnQsIHdoaWNoIGNvdWxkIGJlIGEgcHJvYmxlbSBmb3IgcGVvcGxlIHJ1bm5pbmcgdmVy eSBzbWFsbAotICogY29uZmlndXJhdGlvbnMuICBUaGUgZm9sbG93aW5nIGZvcm11bGEgc2Vl bXMgdG8gcmVwcmVzZW50IGEgcmVhc29uYWJsZQotICogY29tcHJvbWlzZTogcGVvcGxlIHdp dGggdmVyeSBsb3cgdmFsdWVzIGZvciBzaGFyZWRfYnVmZmVycyB3aWxsIGdldCBmZXdlcgot ICogQ0xPRyBidWZmZXJzIGFzIHdlbGwsIGFuZCBldmVyeW9uZSBlbHNlIHdpbGwgZ2V0IDEy OC4KLSAqLwotU2l6ZQotQ0xPR1NobWVtQnVmZmVycyh2b2lkKQotewotCXJldHVybiBNaW4o MTI4LCBNYXgoNCwgTkJ1ZmZlcnMgLyA1MTIpKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemF0 aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIENMT0cKLSAqLwotU2l6ZQotQ0xPR1NobWVtU2l6 ZSh2b2lkKQotewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ0xPR1NobWVtQnVmZmVy cygpLCBDTE9HX0xTTlNfUEVSX1BBR0UpOwotfQotCi12b2lkCi1DTE9HU2htZW1Jbml0KHZv aWQpCi17Ci0JWGFjdEN0bC0+UGFnZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRlczsKLQlT aW1wbGVMcnVJbml0KFhhY3RDdGwsICJYYWN0IiwgQ0xPR1NobWVtQnVmZmVycygpLCBDTE9H X0xTTlNfUEVSX1BBR0UsCi0JCQkJICBYYWN0U0xSVUxvY2ssICJwZ194YWN0IiwgTFdUUkFO Q0hFX1hBQ1RfQlVGRkVSLAotCQkJCSAgU1lOQ19IQU5ETEVSX0NMT0cpOwotCVNscnVQYWdl UHJlY2VkZXNVbml0VGVzdHMoWGFjdEN0bCwgQ0xPR19YQUNUU19QRVJfUEFHRSk7Ci19Ci0K IC8qCiAgKiBUaGlzIGZ1bmMgbXVzdCBiZSBjYWxsZWQgT05DRSBvbiBzeXN0ZW0gaW5zdGFs bC4gIEl0IGNyZWF0ZXMKICAqIHRoZSBpbml0aWFsIENMT0cgc2VnbWVudC4gIChUaGUgQ0xP RyBkaXJlY3RvcnkgaXMgYXNzdW1lZCB0bwpAQCAtNzEyLDE4ICs2NjQsMTUgQEAgQ0xPR1No bWVtSW5pdCh2b2lkKQogdm9pZAogQm9vdFN0cmFwQ0xPRyh2b2lkKQogewotCWludAkJCXNs b3RubzsKLQotCUxXTG9ja0FjcXVpcmUoWGFjdFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwor CUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyogQ3JlYXRlIGFuZCB6ZXJvIHRoZSBmaXJzdCBwYWdl IG9mIHRoZSBjb21taXQgbG9nICovCi0Jc2xvdG5vID0gWmVyb0NMT0dQYWdlKDAsIGZhbHNl KTsKKwlidWZmZXIgPSBaZXJvQ0xPR1BhZ2UoMCwgZmFsc2UpOwogCiAJLyogTWFrZSBzdXJl IGl0J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBhZ2UoWGFjdEN0bCwgc2xv dG5vKTsKLQlBc3NlcnQoIVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsK KwlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOwogCi0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxv Y2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAgLTczNSwx NyArNjg0LDE4IEBAIEJvb3RTdHJhcENMT0codm9pZCkKICAqCiAgKiBDb250cm9sIGxvY2sg bXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8K LXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBi b29sIHdyaXRlWGxvZykKIHsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVyCQlidWZmZXI7CiAK LQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShYYWN0Q3RsLCBwYWdlbm8pOworCWJ1ZmZl ciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfQ0xPR19JRCwgcGFnZW5vKTsKKwlNYXJrQnVmZmVy RGlydHkoYnVmZmVyKTsKIAogCWlmICh3cml0ZVhsb2cpCiAJCVdyaXRlWmVyb1BhZ2VYbG9n UmVjKHBhZ2Vubyk7CiAKLQlyZXR1cm4gc2xvdG5vOworCXJldHVybiBidWZmZXI7CiB9CiAK IC8qCkBAIC03NTUsMTcgKzcwNSw2IEBAIFplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBib29s IHdyaXRlWGxvZykKIHZvaWQKIFN0YXJ0dXBDTE9HKHZvaWQpCiB7Ci0JVHJhbnNhY3Rpb25J ZCB4aWQgPSBYaWRGcm9tRnVsbFRyYW5zYWN0aW9uSWQoU2htZW1WYXJpYWJsZUNhY2hlLT5u ZXh0WGlkKTsKLQlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7Ci0K LQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0J ICogSW5pdGlhbGl6ZSBvdXIgaWRlYSBvZiB0aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyLgotCSAq LwotCVhhY3RDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOwotCi0J TFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOwogfQogCiAvKgpAQCAtNzc3LDggKzcxNiw2 IEBAIFRyaW1DTE9HKHZvaWQpCiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBYaWRGcm9tRnVsbFRy YW5zYWN0aW9uSWQoU2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkKTsKIAlpbnQJCQlwYWdl bm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAKLQlMV0xvY2tBY3F1aXJlKFhhY3RT TFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCS8qCiAJICogWmVybyBvdXQgdGhlIHJlbWFp bmRlciBvZiB0aGUgY3VycmVudCBjbG9nIHBhZ2UuICBVbmRlciBub3JtYWwKIAkgKiBjaXJj dW1zdGFuY2VzIGl0IHNob3VsZCBiZSB6ZXJvZXMgYWxyZWFkeSwgYnV0IGl0IHNlZW1zIGF0 IGxlYXN0CkBAIC03OTUsNDAgKzczMiwyNCBAQCBUcmltQ0xPRyh2b2lkKQogCXsKIAkJaW50 CQkJYnl0ZW5vID0gVHJhbnNhY3Rpb25JZFRvQnl0ZSh4aWQpOwogCQlpbnQJCQlic2hpZnQg PSBUcmFuc2FjdGlvbklkVG9CSW5kZXgoeGlkKSAqIENMT0dfQklUU19QRVJfWEFDVDsKLQkJ aW50CQkJc2xvdG5vOwogCQljaGFyCSAgICpieXRlcHRyOworCQlCdWZmZXIJCWJ1ZmZlcjsK IAotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShYYWN0Q3RsLCBwYWdlbm8sIGZhbHNl LCB4aWQpOwotCQlieXRlcHRyID0gWGFjdEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90 bm9dICsgYnl0ZW5vOworCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQs IHBhZ2Vubyk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUp OworCQlieXRlcHRyID0gQnVmZmVyR2V0UGFnZShidWZmZXIpICsgYnl0ZW5vOwogCiAJCS8q IFplcm8gc28tZmFyLXVudXNlZCBwb3NpdGlvbnMgaW4gdGhlIGN1cnJlbnQgYnl0ZSAqLwog CQkqYnl0ZXB0ciAmPSAoMSA8PCBic2hpZnQpIC0gMTsKIAkJLyogWmVybyB0aGUgcmVzdCBv ZiB0aGUgcGFnZSAqLwogCQlNZW1TZXQoYnl0ZXB0ciArIDEsIDAsIEJMQ0tTWiAtIGJ5dGVu byAtIDEpOwogCi0JCVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1 ZTsKLQl9CisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0JTFdMb2NrUmVsZWFzZShY YWN0U0xSVUxvY2spOwotfQotCi0vKgotICogUGVyZm9ybSBhIGNoZWNrcG9pbnQgLS0tIGVp dGhlciBkdXJpbmcgc2h1dGRvd24sIG9yIG9uLXRoZS1mbHkKLSAqLwotdm9pZAotQ2hlY2tQ b2ludENMT0codm9pZCkKLXsKLQkvKgotCSAqIFdyaXRlIGRpcnR5IENMT0cgcGFnZXMgdG8g ZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJlcXVlc3RzCi0JICogcXVldWVkIGZv ciBsYXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1JlcXVlc3RzKCksIGFzIHBhcnQgb2Yg dGhlCi0JICogY2hlY2twb2ludC4KLQkgKi8KLQlUUkFDRV9QT1NUR1JFU1FMX0NMT0dfQ0hF Q0tQT0lOVF9TVEFSVCh0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChYYWN0Q3RsLCB0cnVl KTsKLQlUUkFDRV9QT1NUR1JFU1FMX0NMT0dfQ0hFQ0tQT0lOVF9ET05FKHRydWUpOworCQlV bmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJfQogfQogCi0KIC8qCiAgKiBNYWtlIHN1 cmUgdGhhdCBDTE9HIGhhcyByb29tIGZvciBhIG5ld2x5LWFsbG9jYXRlZCBYSUQuCiAgKgpA QCAtODUyLDEyICs3NzMsOCBAQCBFeHRlbmRDTE9HKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFj dCkKIAogCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb1BhZ2UobmV3ZXN0WGFjdCk7CiAKLQlM V0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCS8qIFplcm8g dGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExPRyBlbnRyeSBhYm91dCBpdCAqLwotCVplcm9DTE9H UGFnZShwYWdlbm8sIHRydWUpOwotCi0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOwor CVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb0NMT0dQYWdlKHBhZ2VubywgdHJ1ZSkpOwogfQog CiAKQEAgLTg4OCw3ICs4MDUsOCBAQCBUcnVuY2F0ZUNMT0coVHJhbnNhY3Rpb25JZCBvbGRl c3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCkKIAljdXRvZmZQYWdlID0gVHJhbnNhY3Rp b25JZFRvUGFnZShvbGRlc3RYYWN0KTsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSdz IGFueSBmaWxlcyB0aGF0IGNvdWxkIGJlIHJlbW92ZWQgKi8KLQlpZiAoIVNscnVTY2FuRGly ZWN0b3J5KFhhY3RDdGwsIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZSwgJmN1dG9mZlBh Z2UpKQorCWlmICghU2xydVNjYW5EaXJlY3RvcnkoU0xSVV9DTE9HX0lELCBDTE9HUGFnZVBy ZWNlZGVzLAorCQkJCQkJICAgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlLCAmY3V0b2Zm UGFnZSkpCiAJCXJldHVybjsJCQkJCS8qIG5vdGhpbmcgdG8gcmVtb3ZlICovCiAKIAkvKgpA QCAtOTA5LDcgKzgyNyw3IEBAIFRydW5jYXRlQ0xPRyhUcmFuc2FjdGlvbklkIG9sZGVzdFhh Y3QsIE9pZCBvbGRlc3R4aWRfZGF0b2lkKQogCVdyaXRlVHJ1bmNhdGVYbG9nUmVjKGN1dG9m ZlBhZ2UsIG9sZGVzdFhhY3QsIG9sZGVzdHhpZF9kYXRvaWQpOwogCiAJLyogTm93IHdlIGNh biByZW1vdmUgdGhlIG9sZCBDTE9HIHNlZ21lbnQocykgKi8KLQlTaW1wbGVMcnVUcnVuY2F0 ZShYYWN0Q3RsLCBjdXRvZmZQYWdlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NMT0df SUQsIENMT0dQYWdlUHJlY2VkZXMsIGN1dG9mZlBhZ2UpOwogfQogCiAKQEAgLTk5NCwxNyAr OTEyLDEzIEBAIGNsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAlpZiAoaW5m byA9PSBDTE9HX1pFUk9QQUdFKQogCXsKIAkJaW50CQkJcGFnZW5vOwotCQlpbnQJCQlzbG90 bm87CisJCUJ1ZmZlcgkJYnVmZmVyOwogCiAJCW1lbWNweSgmcGFnZW5vLCBYTG9nUmVjR2V0 RGF0YShyZWNvcmQpLCBzaXplb2YoaW50KSk7CiAKLQkJTFdMb2NrQWNxdWlyZShYYWN0U0xS VUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5vID0gWmVyb0NMT0dQYWdlKHBhZ2Vu bywgZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoWGFjdEN0bCwgc2xvdG5vKTsKLQkJ QXNzZXJ0KCFYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJTFdM b2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOworCQlidWZmZXIgPSBaZXJvQ0xPR1BhZ2UocGFn ZW5vLCBmYWxzZSk7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBDTE9HX1RSVU5DQVRF KQogCXsKQEAgLTEwMTQsMTcgKzkyOCw4IEBAIGNsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAogCQlBZHZhbmNlT2xkZXN0Q2xvZ1hpZCh4bHJlYy5vbGRlc3RYYWN0KTsK IAotCQlTaW1wbGVMcnVUcnVuY2F0ZShYYWN0Q3RsLCB4bHJlYy5wYWdlbm8pOworCQlTaW1w bGVMcnVUcnVuY2F0ZShTTFJVX0NMT0dfSUQsIENMT0dQYWdlUHJlY2VkZXMsIHhscmVjLnBh Z2Vubyk7CiAJfQogCWVsc2UKIAkJZWxvZyhQQU5JQywgImNsb2dfcmVkbzogdW5rbm93biBv cCBjb2RlICV1IiwgaW5mbyk7CiB9Ci0KLS8qCi0gKiBFbnRyeXBvaW50IGZvciBzeW5jLmMg dG8gc3luYyBjbG9nIGZpbGVzLgotICovCi1pbnQKLWNsb2dzeW5jZmlsZXRhZyhjb25zdCBG aWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQotewotCXJldHVybiBTbHJ1U3luY0ZpbGVUYWco WGFjdEN0bCwgZnRhZywgcGF0aCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9jb21taXRfdHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nv bW1pdF90cy5jCmluZGV4IDRkYzhkNDAyYmQzLi43ZWRlZDBkMTkyMSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKQEAgLTczLDEzICs3Myw2IEBAIHR5cGVk ZWYgc3RydWN0IENvbW1pdFRpbWVzdGFtcEVudHJ5CiAjZGVmaW5lIFRyYW5zYWN0aW9uSWRU b0NUc0VudHJ5KHhpZCkJXAogCSgoeGlkKSAlIChUcmFuc2FjdGlvbklkKSBDT01NSVRfVFNf WEFDVFNfUEVSX1BBR0UpCiAKLS8qCi0gKiBMaW5rIHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBz dHJ1Y3R1cmVzIGZvciBDb21taXRUcyBjb250cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0 YSBDb21taXRUc0N0bERhdGE7Ci0KLSNkZWZpbmUgQ29tbWl0VHNDdGwgKCZDb21taXRUc0N0 bERhdGEpCi0KIC8qCiAgKiBXZSBrZWVwIGEgY2FjaGUgb2YgdGhlIGxhc3QgdmFsdWUgc2V0 IGluIHNoYXJlZCBtZW1vcnkuCiAgKgpAQCAtMTEwLDcgKzEwMyw3IEBAIHN0YXRpYyB2b2lk IFNldFhpZENvbW1pdFRzSW5QYWdlKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMs CiBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoVHJhbnNhY3Rpb25JZCB4 aWQsIFRpbWVzdGFtcFR6IHRzLAogCQkJCQkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgaW50 IHNsb3Rubyk7CiBzdGF0aWMgdm9pZCBlcnJvcl9jb21taXRfdHNfZGlzYWJsZWQodm9pZCk7 Ci1zdGF0aWMgaW50CVplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhs b2cpOworc3RhdGljIEJ1ZmZlciBaZXJvQ29tbWl0VHNQYWdlKGludCBwYWdlbm8sIGJvb2wg d3JpdGVYbG9nKTsKIHN0YXRpYyBib29sIENvbW1pdFRzUGFnZVByZWNlZGVzKGludCBwYWdl MSwgaW50IHBhZ2UyKTsKIHN0YXRpYyB2b2lkIEFjdGl2YXRlQ29tbWl0VHModm9pZCk7CiBz dGF0aWMgdm9pZCBEZWFjdGl2YXRlQ29tbWl0VHModm9pZCk7CkBAIC0yMTksMzAgKzIxMiwy NyBAQCBTZXRYaWRDb21taXRUc0luUGFnZShUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4 aWRzLAogCQkJCQkgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywgVGltZXN0YW1wVHogdHMsCiAJ CQkJCSBSZXBPcmlnaW5JZCBub2RlaWQsIGludCBwYWdlbm8pCiB7Ci0JaW50CQkJc2xvdG5v OwogCWludAkJCWk7CisJQnVmZmVyCQlidWZmZXI7CiAKLQlMV0xvY2tBY3F1aXJlKENvbW1p dFRzU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZShDb21taXRUc0N0bCwgcGFnZW5vLCB0cnVlLCB4aWQpOworCWJ1ZmZlciA9IFJlYWRT bHJ1QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lELCBwYWdlbm8pOworCUxvY2tCdWZmZXIoYnVm ZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOwogCi0JVHJhbnNhY3Rpb25JZFNldENvbW1p dFRzKHhpZCwgdHMsIG5vZGVpZCwgc2xvdG5vKTsKKwlUcmFuc2FjdGlvbklkU2V0Q29tbWl0 VHMoeGlkLCB0cywgbm9kZWlkLCBidWZmZXIpOwogCWZvciAoaSA9IDA7IGkgPCBuc3VieGlk czsgaSsrKQotCQlUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoc3VieGlkc1tpXSwgdHMsIG5v ZGVpZCwgc2xvdG5vKTsKKwkJVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKHN1YnhpZHNbaV0s IHRzLCBub2RlaWQsIGJ1ZmZlcik7CiAKLQlDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2Rp cnR5W3Nsb3Rub10gPSB0cnVlOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0JTFdM b2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 ZmZlcik7CiB9CiAKIC8qCiAgKiBTZXRzIHRoZSBjb21taXQgdGltZXN0YW1wIG9mIGEgc2lu Z2xlIHRyYW5zYWN0aW9uLgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggQ29tbWl0VHNT TFJVTG9jayBoZWxkCiAgKi8KIHN0YXRpYyB2b2lkCiBUcmFuc2FjdGlvbklkU2V0Q29tbWl0 VHMoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6IHRzLAotCQkJCQkJIFJlcE9yaWdp bklkIG5vZGVpZCwgaW50IHNsb3RubykKKwkJCQkJCSBSZXBPcmlnaW5JZCBub2RlaWQsIEJ1 ZmZlciBidWZmZXIpCiB7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0NUc0Vu dHJ5KHhpZCk7CiAJQ29tbWl0VGltZXN0YW1wRW50cnkgZW50cnk7CkBAIC0yNTIsOCArMjQy LDcgQEAgVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1l c3RhbXBUeiB0cywKIAllbnRyeS50aW1lID0gdHM7CiAJZW50cnkubm9kZWlkID0gbm9kZWlk OwogCi0JbWVtY3B5KENvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10g KwotCQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSAqIGVudHJ5bm8sCisJbWVtY3B5 KEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5ICog ZW50cnlubywKIAkJICAgJmVudHJ5LCBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CiB9 CiAKQEAgLTI3MSwxMCArMjYwLDEwIEBAIFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEo VHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6ICp0cywKIHsKIAlpbnQJCQlwYWdlbm8g PSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKHhpZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5z YWN0aW9uSWRUb0NUc0VudHJ5KHhpZCk7Ci0JaW50CQkJc2xvdG5vOwogCUNvbW1pdFRpbWVz dGFtcEVudHJ5IGVudHJ5OwogCVRyYW5zYWN0aW9uSWQgb2xkZXN0Q29tbWl0VHNYaWQ7CiAJ VHJhbnNhY3Rpb25JZCBuZXdlc3RDb21taXRUc1hpZDsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAog CWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKIAkJZXJlcG9ydChFUlJPUiwKQEAg LTMyOCwxMCArMzE3LDExIEBAIFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEoVHJhbnNh Y3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6ICp0cywKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAot CS8qIGxvY2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8K LQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShDb21taXRUc0N0bCwgcGFn ZW5vLCB4aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lE LCBwYWdlbm8pOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisK IAltZW1jcHkoJmVudHJ5LAotCQkgICBDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdlX2J1ZmZl cltzbG90bm9dICsKKwkJICAgQnVmZmVyR2V0UGFnZShidWZmZXIpICsKIAkJICAgU2l6ZU9m Q29tbWl0VGltZXN0YW1wRW50cnkgKiBlbnRyeW5vLAogCQkgICBTaXplT2ZDb21taXRUaW1l c3RhbXBFbnRyeSk7CiAKQEAgLTMzOSw3ICszMjksNyBAQCBUcmFuc2FjdGlvbklkR2V0Q29t bWl0VHNEYXRhKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiAqdHMsCiAJaWYgKG5v ZGVpZCkKIAkJKm5vZGVpZCA9IGVudHJ5Lm5vZGVpZDsKIAotCUxXTG9ja1JlbGVhc2UoQ29t bWl0VHNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCXJldHVy biAqdHMgIT0gMDsKIH0KIApAQCAtNTA4LDI3ICs0OTgsMTMgQEAgcGdfeGFjdF9jb21taXRf dGltZXN0YW1wX29yaWdpbihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9EQVRVTShI ZWFwVHVwbGVHZXREYXR1bShodHVwKSk7CiB9CiAKLS8qCi0gKiBOdW1iZXIgb2Ygc2hhcmVk IENvbW1pdFRTIGJ1ZmZlcnMuCi0gKgotICogV2UgdXNlIGEgdmVyeSBzaW1pbGFyIGxvZ2lj IGFzIGZvciB0aGUgbnVtYmVyIG9mIENMT0cgYnVmZmVycyAoZXhjZXB0IHdlCi0gKiBzY2Fs ZSB1cCB0d2ljZSBhcyBmYXN0IHdpdGggc2hhcmVkIGJ1ZmZlcnMsIGFuZCB0aGUgbWF4aW11 bSBpcyB0d2ljZSBhcwotICogaGlnaCk7IHNlZSBjb21tZW50cyBpbiBDTE9HU2htZW1CdWZm ZXJzLgotICovCi1TaXplCi1Db21taXRUc1NobWVtQnVmZmVycyh2b2lkKQotewotCXJldHVy biBNaW4oMjU2LCBNYXgoNCwgTkJ1ZmZlcnMgLyAyNTYpKTsKLX0KLQogLyoKICAqIFNoYXJl ZCBtZW1vcnkgc2l6aW5nIGZvciBDb21taXRUcwogICovCiBTaXplCiBDb21taXRUc1NobWVt U2l6ZSh2b2lkKQogewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ29tbWl0VHNTaG1l bUJ1ZmZlcnMoKSwgMCkgKwotCQlzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKTsKKwly ZXR1cm4gc2l6ZW9mKENvbW1pdFRpbWVzdGFtcFNoYXJlZCk7CiB9CiAKIC8qCkBAIC01NDAs MTIgKzUxNiw3IEBAIENvbW1pdFRzU2htZW1Jbml0KHZvaWQpCiB7CiAJYm9vbAkJZm91bmQ7 CiAKLQlDb21taXRUc0N0bC0+UGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXM7 Ci0JU2ltcGxlTHJ1SW5pdChDb21taXRUc0N0bCwgIkNvbW1pdFRzIiwgQ29tbWl0VHNTaG1l bUJ1ZmZlcnMoKSwgMCwKLQkJCQkgIENvbW1pdFRzU0xSVUxvY2ssICJwZ19jb21taXRfdHMi LAotCQkJCSAgTFdUUkFOQ0hFX0NPTU1JVFRTX0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExF Ul9DT01NSVRfVFMpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoQ29tbWl0VHNDdGws IENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSk7CisJU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0 cyhDb21taXRUc1BhZ2VQcmVjZWRlcywgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFKTsKIAog CWNvbW1pdFRzU2hhcmVkID0gU2htZW1Jbml0U3RydWN0KCJDb21taXRUcyBzaGFyZWQiLAog CQkJCQkJCQkJIHNpemVvZihDb21taXRUaW1lc3RhbXBTaGFyZWQpLApAQCAtNTg5LDE3ICs1 NjAsMTggQEAgQm9vdFN0cmFwQ29tbWl0VHModm9pZCkKICAqCiAgKiBDb250cm9sIGxvY2sg bXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8K LXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2Vu bywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVy OwogCi0Jc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoQ29tbWl0VHNDdGwsIHBhZ2Vubyk7 CisJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7 CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAlpZiAod3JpdGVYbG9nKQogCQlXcml0 ZVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8pOwogCi0JcmV0dXJuIHNsb3RubzsKKwlyZXR1cm4g YnVmZmVyOwogfQogCiAvKgpAQCAtNjk3LDEzICs2NjksNiBAQCBBY3RpdmF0ZUNvbW1pdFRz KHZvaWQpCiAJeGlkID0gWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKFNobWVtVmFyaWFibGVD YWNoZS0+bmV4dFhpZCk7CiAJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQp OwogCi0JLyoKLQkgKiBSZS1Jbml0aWFsaXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3QgcGFn ZSBudW1iZXIuCi0JICovCi0JTFdMb2NrQWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19F WENMVVNJVkUpOwotCUNvbW1pdFRzQ3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9 IHBhZ2VubzsKLQlMV0xvY2tSZWxlYXNlKENvbW1pdFRzU0xSVUxvY2spOwotCiAJLyoKIAkg KiBJZiBDb21taXRUcyBpcyBlbmFibGVkLCBidXQgaXQgd2Fzbid0IGluIHRoZSBwcmV2aW91 cyBzZXJ2ZXIgcnVuLCB3ZQogCSAqIG5lZWQgdG8gc2V0IHRoZSBvbGRlc3QgYW5kIG5ld2Vz dCB2YWx1ZXMgdG8gdGhlIG5leHQgWGlkOyB0aGF0IHdheSwgd2UKQEAgLTcyNiwxNSArNjkx LDE0IEBAIEFjdGl2YXRlQ29tbWl0VHModm9pZCkKIAlMV0xvY2tSZWxlYXNlKENvbW1pdFRz TG9jayk7CiAKIAkvKiBDcmVhdGUgdGhlIGN1cnJlbnQgc2VnbWVudCBmaWxlLCBpZiBuZWNl c3NhcnkgKi8KLQlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChDb21taXRU c0N0bCwgcGFnZW5vKSkKKwlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChT TFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vKSkKIAl7Ci0JCWludAkJCXNsb3RubzsKKwkJQnVm ZmVyCQlidWZmZXI7CiAKLQkJTFdMb2NrQWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19F WENMVVNJVkUpOwotCQlzbG90bm8gPSBaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgZmFsc2Up OwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoQ29tbWl0VHNDdGwsIHNsb3Rubyk7Ci0JCUFzc2Vy dCghQ29tbWl0VHNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQkJTFdMb2Nr UmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKKwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIo U0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIp OworCQlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 ZmZlcik7CiAJfQogCiAJLyogQ2hhbmdlIHRoZSBhY3RpdmF0aW9uIHN0YXR1cyBpbiBzaGFy ZWQgbWVtb3J5LiAqLwpAQCAtNzgzLDIzICs3NDcsOSBAQCBEZWFjdGl2YXRlQ29tbWl0VHMo dm9pZCkKIAkgKiBiZSBvdmVyd3JpdHRlbiBhbnl3YXkgd2hlbiB3ZSB3cmFwIGFyb3VuZCwg YnV0IGl0IHNlZW1zIGJldHRlciB0byBiZQogCSAqIHRpZHkuKQogCSAqLwotCUxXTG9ja0Fj cXVpcmUoQ29tbWl0VHNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQkodm9pZCkgU2xydVNj YW5EaXJlY3RvcnkoQ29tbWl0VHNDdGwsIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwp OwotCUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7Ci19Ci0KLS8qCi0gKiBQZXJm b3JtIGEgY2hlY2twb2ludCAtLS0gZWl0aGVyIGR1cmluZyBzaHV0ZG93biwgb3Igb24tdGhl LWZseQotICovCi12b2lkCi1DaGVja1BvaW50Q29tbWl0VHModm9pZCkKLXsKLQkvKgotCSAq IFdyaXRlIGRpcnR5IENvbW1pdFRzIHBhZ2VzIHRvIGRpc2suICBUaGlzIG1heSByZXN1bHQg aW4gc3luYyByZXF1ZXN0cwotCSAqIHF1ZXVlZCBmb3IgbGF0ZXIgaGFuZGxpbmcgYnkgUHJv Y2Vzc1N5bmNSZXF1ZXN0cygpLCBhcyBwYXJ0IG9mIHRoZQotCSAqIGNoZWNrcG9pbnQuCi0J ICovCi0JU2ltcGxlTHJ1V3JpdGVBbGwoQ29tbWl0VHNDdGwsIHRydWUpOworCSh2b2lkKSBT bHJ1U2NhbkRpcmVjdG9yeShTTFJVX0NPTU1JVF9UU19JRCwKKwkJCQkJCQkgQ29tbWl0VHNQ YWdlUHJlY2VkZXMsCisJCQkJCQkJIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOwog fQogCiAvKgpAQCAtODM3LDEyICs3ODcsOCBAQCBFeHRlbmRDb21taXRUcyhUcmFuc2FjdGlv bklkIG5ld2VzdFhhY3QpCiAKIAlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKG5l d2VzdFhhY3QpOwogCi0JTFdMb2NrQWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENM VVNJVkUpOwotCiAJLyogWmVybyB0aGUgcGFnZSBhbmQgbWFrZSBhbiBYTE9HIGVudHJ5IGFi b3V0IGl0ICovCi0JWmVyb0NvbW1pdFRzUGFnZShwYWdlbm8sICFJblJlY292ZXJ5KTsKLQot CUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZl cihaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgIUluUmVjb3ZlcnkpKTsKIH0KIAogLyoKQEAg LTg2Myw3ICs4MDksOSBAQCBUcnVuY2F0ZUNvbW1pdFRzKFRyYW5zYWN0aW9uSWQgb2xkZXN0 WGFjdCkKIAljdXRvZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZShvbGRlc3RYYWN0 KTsKIAogCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBmaWxlcyB0aGF0IGNvdWxk IGJlIHJlbW92ZWQgKi8KLQlpZiAoIVNscnVTY2FuRGlyZWN0b3J5KENvbW1pdFRzQ3RsLCBT bHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UsCisJaWYgKCFTbHJ1U2NhbkRpcmVjdG9yeShT TFJVX0NPTU1JVF9UU19JRCwKKwkJCQkJCSAgIENvbW1pdFRzUGFnZVByZWNlZGVzLAorCQkJ CQkJICAgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlLAogCQkJCQkJICAgJmN1dG9mZlBh Z2UpKQogCQlyZXR1cm47CQkJCQkvKiBub3RoaW5nIHRvIHJlbW92ZSAqLwogCkBAIC04NzEs NyArODE5LDcgQEAgVHJ1bmNhdGVDb21taXRUcyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3Qp CiAJV3JpdGVUcnVuY2F0ZVhsb2dSZWMoY3V0b2ZmUGFnZSwgb2xkZXN0WGFjdCk7CiAKIAkv KiBOb3cgd2UgY2FuIHJlbW92ZSB0aGUgb2xkIENvbW1pdFRzIHNlZ21lbnQocykgKi8KLQlT aW1wbGVMcnVUcnVuY2F0ZShDb21taXRUc0N0bCwgY3V0b2ZmUGFnZSk7CisJU2ltcGxlTHJ1 VHJ1bmNhdGUoU0xSVV9DT01NSVRfVFNfSUQsIENvbW1pdFRzUGFnZVByZWNlZGVzLCBjdXRv ZmZQYWdlKTsKIH0KIAogLyoKQEAgLTk5NSwxNyArOTQzLDE0IEBAIGNvbW1pdF90c19yZWRv KFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IENPTU1JVF9UU19aRVJP UEFHRSkKIAl7CiAJCWludAkJCXBhZ2VubzsKLQkJaW50CQkJc2xvdG5vOworCQlCdWZmZXIJ CWJ1ZmZlcjsKIAogCQltZW1jcHkoJnBhZ2VubywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwg c2l6ZW9mKGludCkpOwogCi0JCUxXTG9ja0FjcXVpcmUoQ29tbWl0VHNTTFJVTG9jaywgTFdf RVhDTFVTSVZFKTsKLQotCQlzbG90bm8gPSBaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgZmFs c2UpOwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoQ29tbWl0VHNDdGwsIHNsb3Rubyk7Ci0JCUFz c2VydCghQ29tbWl0VHNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQotCQlM V0xvY2tSZWxlYXNlKENvbW1pdFRzU0xSVUxvY2spOworCQlidWZmZXIgPSBaZXJvU2xydUJ1 ZmZlcihTTFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vKTsKKwkJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VCdWZm ZXIoYnVmZmVyKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBDT01NSVRfVFNfVFJVTkNBVEUp CiAJewpAQCAtMTAxMywyMyArOTU4LDggQEAgY29tbWl0X3RzX3JlZG8oWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQpCiAKIAkJQWR2YW5jZU9sZGVzdENvbW1pdFRzWGlkKHRydW5jLT5vbGRl c3RYaWQpOwogCi0JCS8qCi0JCSAqIER1cmluZyBYTE9HIHJlcGxheSwgbGF0ZXN0X3BhZ2Vf bnVtYmVyIGlzbid0IHNldCB1cCB5ZXQ7IGluc2VydCBhCi0JCSAqIHN1aXRhYmxlIHZhbHVl IHRvIGJ5cGFzcyB0aGUgc2FuaXR5IHRlc3QgaW4gU2ltcGxlTHJ1VHJ1bmNhdGUuCi0JCSAq LwotCQlDb21taXRUc0N0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSB0cnVuYy0+ cGFnZW5vOwotCi0JCVNpbXBsZUxydVRydW5jYXRlKENvbW1pdFRzQ3RsLCB0cnVuYy0+cGFn ZW5vKTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9DT01NSVRfVFNfSUQsIENvbW1pdFRz UGFnZVByZWNlZGVzLCB0cnVuYy0+cGFnZW5vKTsKIAl9CiAJZWxzZQogCQllbG9nKFBBTklD LCAiY29tbWl0X3RzX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOwogfQotCi0v KgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgY29tbWl0X3RzIGZpbGVzLgot ICovCi1pbnQKLWNvbW1pdHRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hh ciAqcGF0aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKENvbW1pdFRzQ3RsLCBmdGFn LCBwYXRoKTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211 bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5k ZXggOGY3ZDEyOTUwZTUuLmFhYmU4YjUzNDUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYwpAQCAtMTgxLDE1ICsxODEsNiBAQAogI2RlZmluZSBQcmV2aW91 c011bHRpWGFjdElkKHhpZCkgXAogCSgoeGlkKSA9PSBGaXJzdE11bHRpWGFjdElkID8gTWF4 TXVsdGlYYWN0SWQgOiAoeGlkKSAtIDEpCiAKLS8qCi0gKiBMaW5rcyB0byBzaGFyZWQtbWVt b3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgTXVsdGlYYWN0IGNvbnRyb2wKLSAqLwotc3RhdGlj IFNscnVDdGxEYXRhIE11bHRpWGFjdE9mZnNldEN0bERhdGE7Ci1zdGF0aWMgU2xydUN0bERh dGEgTXVsdGlYYWN0TWVtYmVyQ3RsRGF0YTsKLQotI2RlZmluZSBNdWx0aVhhY3RPZmZzZXRD dGwJKCZNdWx0aVhhY3RPZmZzZXRDdGxEYXRhKQotI2RlZmluZSBNdWx0aVhhY3RNZW1iZXJD dGwJKCZNdWx0aVhhY3RNZW1iZXJDdGxEYXRhKQotCiAvKgogICogTXVsdGlYYWN0IHN0YXRl IHNoYXJlZCBhY3Jvc3MgYWxsIGJhY2tlbmRzLiAgQWxsIHRoaXMgc3RhdGUgaXMgcHJvdGVj dGVkCiAgKiBieSBNdWx0aVhhY3RHZW5Mb2NrLiAgKFdlIGFsc28gdXNlIE11bHRpWGFjdE9m ZnNldFNMUlVMb2NrIGFuZApAQCAtMzUzLDEwICszNDQsOSBAQCBzdGF0aWMgdm9pZCBtWGFj dENhY2hlUHV0KE11bHRpWGFjdElkIG11bHRpLCBpbnQgbm1lbWJlcnMsCiBzdGF0aWMgY2hh ciAqbXhzdGF0dXNfdG9fc3RyaW5nKE11bHRpWGFjdFN0YXR1cyBzdGF0dXMpOwogCiAvKiBt YW5hZ2VtZW50IG9mIFNMUlUgaW5mcmFzdHJ1Y3R1cmUgKi8KLXN0YXRpYyBpbnQJWmVyb011 bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwotc3RhdGlj IGludAlaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxv Zyk7CitzdGF0aWMgQnVmZmVyIFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKGludCBwYWdlbm8s IGJvb2wgd3JpdGVYbG9nKTsKK3N0YXRpYyBCdWZmZXIgWmVyb011bHRpWGFjdE1lbWJlclBh Z2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgTXVsdGlYYWN0 T2Zmc2V0UGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKTsKLXN0YXRpYyBib29s IE11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiBz dGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zm c2V0MSwKIAkJCQkJCQkJCU11bHRpWGFjdE9mZnNldCBvZmZzZXQyKTsKIHN0YXRpYyB2b2lk IEV4dGVuZE11bHRpWGFjdE9mZnNldChNdWx0aVhhY3RJZCBtdWx0aSk7CkBAIC04NjUsMzQg Kzg1NSwyNSBAQCBSZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRp WGFjdE9mZnNldCBvZmZzZXQsCiAJaW50CQkJcGFnZW5vOwogCWludAkJCXByZXZfcGFnZW5v OwogCWludAkJCWVudHJ5bm87Ci0JaW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNldCAq b2ZmcHRyOwogCWludAkJCWk7Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNM UlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJcGFnZW5vID0g TXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwogCWVudHJ5bm8gPSBNdWx0aVhhY3RJ ZFRvT2Zmc2V0RW50cnkobXVsdGkpOwogCi0JLyoKLQkgKiBOb3RlOiB3ZSBwYXNzIHRoZSBN dWx0aVhhY3RJZCB0byBTaW1wbGVMcnVSZWFkUGFnZSBhcyB0aGUgInRyYW5zYWN0aW9uIgot CSAqIHRvIGNvbXBsYWluIGFib3V0IGlmIHRoZXJlJ3MgYW55IEkvTyBlcnJvci4gIFRoaXMg aXMga2luZGEgYm9ndXMsIGJ1dAotCSAqIHNpbmNlIHRoZSBlcnJvcnMgd2lsbCBhbHdheXMg Z2l2ZSB0aGUgZnVsbCBwYXRobmFtZSwgaXQgc2hvdWxkIGJlIGNsZWFyCi0JICogZW5vdWdo IHRoYXQgYSBNdWx0aVhhY3RJZCBpcyByZWFsbHkgaW52b2x2ZWQuICBQZXJoYXBzIHNvbWVk YXkgd2UnbGwKLQkgKiB0YWtlIHRoZSB0cm91YmxlIHRvIGdlbmVyYWxpemUgdGhlIHNscnUu YyBlcnJvciByZXBvcnRpbmcgY29kZS4KLQkgKi8KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0 ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBh Z2VfYnVmZmVyW3Nsb3Rub107CisJLyogWFhYIHNldCB1cCBlcnJvciBjb250ZXh0PyAqLwor CWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFn ZW5vKTsKKwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlv ZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKIAlv ZmZwdHIgKz0gZW50cnlubzsKIAogCSpvZmZwdHIgPSBvZmZzZXQ7CiAKLQlNdWx0aVhhY3RP ZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQotCS8qIEV4 Y2hhbmdlIG91ciBsb2NrICovCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJV TG9jayk7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKLQlMV0xvY2tBY3F1aXJlKE11 bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmZmVyKTsKKwlidWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCiAJcHJldl9wYWdl bm8gPSAtMTsKIApAQCAtOTE0LDI3ICs4OTUsMjggQEAgUmVjb3JkTmV3TXVsdGlYYWN0KE11 bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAogCiAJCWlmIChwYWdl bm8gIT0gcHJldl9wYWdlbm8pCiAJCXsKLQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdl KE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0cnVlLCBtdWx0aSk7CisJCQlpZiAoQnVm ZmVySXNWYWxpZChidWZmZXIpKQorCQkJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsK KwkJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwg cGFnZW5vKTsKKwkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUp OwogCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CiAJCX0KIAotCQltZW1iZXJwdHIgPSAoVHJh bnNhY3Rpb25JZCAqKQotCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1 ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKKwkJbWVtYmVycHRyID0gKFRyYW5zYWN0aW9u SWQgKikgKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIG1lbWJlcm9mZik7CiAKIAkJKm1lbWJl cnB0ciA9IG1lbWJlcnNbaV0ueGlkOwogCi0JCWZsYWdzcHRyID0gKHVpbnQzMiAqKQotCQkJ KE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgZmxh Z3NvZmYpOworCQlmbGFnc3B0ciA9ICh1aW50MzIgKikgKEJ1ZmZlckdldFBhZ2UoYnVmZmVy KSArIGZsYWdzb2ZmKTsKIAogCQlmbGFnc3ZhbCA9ICpmbGFnc3B0cjsKIAkJZmxhZ3N2YWwg Jj0gfigoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0gMSkgPDwgYnNoaWZ0 KTsKIAkJZmxhZ3N2YWwgfD0gKG1lbWJlcnNbaV0uc3RhdHVzIDw8IGJzaGlmdCk7CiAJCSpm bGFnc3B0ciA9IGZsYWdzdmFsOwogCi0JCU11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5w YWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsK IAl9CiAKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsKKwlVbmxv Y2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC0xMjI2LDcgKzEyMDgsNiBA QCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1l bWJlciAqKm1lbWJlcnMsCiAJaW50CQkJcGFnZW5vOwogCWludAkJCXByZXZfcGFnZW5vOwog CWludAkJCWVudHJ5bm87Ci0JaW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNldCAqb2Zm cHRyOwogCU11bHRpWGFjdE9mZnNldCBvZmZzZXQ7CiAJaW50CQkJbGVuZ3RoOwpAQCAtMTIz Nyw2ICsxMjE4LDcgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRp LCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCU11bHRpWGFjdElkIHRtcE1YYWN0Owog CU11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0OwogCU11bHRpWGFjdE1lbWJlciAqcHRyOwor CUJ1ZmZlcgkJYnVmZmVyOwogCiAJZGVidWdfZWxvZzMoREVCVUcyLCAiR2V0TWVtYmVyczog YXNrZWQgZm9yICV1IiwgbXVsdGkpOwogCkBAIC0xMzQwLDEzICsxMzIyLDEyIEBAIEdldE11 bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoq bWVtYmVycywKIAkgKiB0aW1lIG9uIGV2ZXJ5IG11bHRpeGFjdCBjcmVhdGlvbi4KIAkgKi8K IHJldHJ5OgotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VY Q0xVU0lWRSk7Ci0KIAlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7 CiAJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7CiAKLQlzbG90 bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1 ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zm c2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJYnVmZmVyID0gUmVhZFNs cnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8pOworCUxvY2tCdWZm ZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJb2ZmcHRyID0gKE11bHRpWGFjdE9m ZnNldCAqKSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAJb2ZmcHRyICs9IGVudHJ5bm87CiAJ b2Zmc2V0ID0gKm9mZnB0cjsKIApAQCAtMTM3NywxNiArMTM1OCwyMCBAQCByZXRyeToKIAkJ ZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeSh0bXBNWGFjdCk7CiAKIAkJaWYg KHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKLQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdl KE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCB0bXBNWGFjdCk7CisJCXsKKwkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVm ZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKTsKKwkJCUxvY2tCdWZmZXIo YnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCX0KIAotCQlvZmZwdHIgPSAoTXVsdGlY YWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltz bG90bm9dOworCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBhZ2Uo YnVmZmVyKTsKIAkJb2ZmcHRyICs9IGVudHJ5bm87CiAJCW5leHRNWE9mZnNldCA9ICpvZmZw dHI7CiAKIAkJaWYgKG5leHRNWE9mZnNldCA9PSAwKQogCQl7CiAJCQkvKiBDb3JuZXIgY2Fz ZSAyOiBuZXh0IG11bHRpeGFjdCBpcyBzdGlsbCBiZWluZyBmaWxsZWQgaW4gKi8KLQkJCUxX TG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOworCQkJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihidWZmZXIpOwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAkJCXBnX3Vz bGVlcCgxMDAwTCk7CiAJCQlnb3RvIHJldHJ5OwpAQCAtMTM5NCwxNCArMTM3OSwxMSBAQCBy ZXRyeToKIAogCQlsZW5ndGggPSBuZXh0TVhPZmZzZXQgLSBvZmZzZXQ7CiAJfQotCi0JTFdM b2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1 ZmZlcihidWZmZXIpOworCWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAKIAlwdHIgPSAoTXVs dGlYYWN0TWVtYmVyICopIHBhbGxvYyhsZW5ndGggKiBzaXplb2YoTXVsdGlYYWN0TWVtYmVy KSk7CiAKLQkvKiBOb3cgZ2V0IHRoZSBtZW1iZXJzIHRoZW1zZWx2ZXMuICovCi0JTFdMb2Nr QWNxdWlyZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCXRy dWVsZW5ndGggPSAwOwogCXByZXZfcGFnZW5vID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IGxl bmd0aDsgaSsrLCBvZmZzZXQrKykKQEAgLTE0MTcsMTIgKzEzOTksMTQgQEAgcmV0cnk6CiAK IAkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKIAkJewotCQkJc2xvdG5vID0gU2ltcGxl THJ1UmVhZFBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsK KwkJCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZmZlcikpCisJCQkJVW5sb2NrUmVsZWFzZUJ1ZmZl cihidWZmZXIpOworCQkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1Rf TUVNQkVSX0lELCBwYWdlbm8pOworCQkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NL X1NIQVJFKTsKIAkJCXByZXZfcGFnZW5vID0gcGFnZW5vOwogCQl9CiAKLQkJeGFjdHB0ciA9 IChUcmFuc2FjdGlvbklkICopCi0JCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBh Z2VfYnVmZmVyW3Nsb3Rub10gKyBtZW1iZXJvZmYpOworCQl4YWN0cHRyID0gKFRyYW5zYWN0 aW9uSWQgKikgKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSArIG1lbWJlcm9mZik7CiAKIAkJaWYg KCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikpCiAJCXsKQEAgLTE0MzMsMTQgKzE0 MTcsMTMgQEAgcmV0cnk6CiAKIAkJZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQo b2Zmc2V0KTsKIAkJYnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsK LQkJZmxhZ3NwdHIgPSAodWludDMyICopIChNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+ cGFnZV9idWZmZXJbc2xvdG5vXSArIGZsYWdzb2ZmKTsKKwkJZmxhZ3NwdHIgPSAodWludDMy ICopIChCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBmbGFnc29mZik7CiAKIAkJcHRyW3RydWVs ZW5ndGhdLnhpZCA9ICp4YWN0cHRyOwogCQlwdHJbdHJ1ZWxlbmd0aF0uc3RhdHVzID0gKCpm bGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSzsKIAkJdHJ1 ZWxlbmd0aCsrOwogCX0KLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0TWVtYmVyU0xSVUxv Y2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCS8qIEEgbXVsdGl4aWQg d2l0aCB6ZXJvIG1lbWJlcnMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAlBc3NlcnQodHJ1ZWxl bmd0aCA+IDApOwpAQCAtMTgzNCw4ICsxODE3LDYgQEAgTXVsdGlYYWN0U2htZW1TaXplKHZv aWQpCiAJCQkgbXVsX3NpemUoc2l6ZW9mKE11bHRpWGFjdElkKSAqIDIsIE1heE9sZGVzdFNs b3QpKQogCiAJc2l6ZSA9IFNIQVJFRF9NVUxUSVhBQ1RfU1RBVEVfU0laRTsKLQlzaXplID0g YWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9NVUxUSVhBQ1RPRkZTRVRf QlVGRkVSUywgMCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1lbVNp emUoTlVNX01VTFRJWEFDVE1FTUJFUl9CVUZGRVJTLCAwKSk7CiAKIAlyZXR1cm4gc2l6ZTsK IH0KQEAgLTE4NDcsMjIgKzE4MjgsNiBAQCBNdWx0aVhhY3RTaG1lbUluaXQodm9pZCkKIAog CWRlYnVnX2Vsb2cyKERFQlVHMiwgIlNoYXJlZCBNZW1vcnkgSW5pdCBmb3IgTXVsdGlYYWN0 Iik7CiAKLQlNdWx0aVhhY3RPZmZzZXRDdGwtPlBhZ2VQcmVjZWRlcyA9IE11bHRpWGFjdE9m ZnNldFBhZ2VQcmVjZWRlczsKLQlNdWx0aVhhY3RNZW1iZXJDdGwtPlBhZ2VQcmVjZWRlcyA9 IE11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlczsKLQotCVNpbXBsZUxydUluaXQoTXVsdGlY YWN0T2Zmc2V0Q3RsLAotCQkJCSAgIk11bHRpWGFjdE9mZnNldCIsIE5VTV9NVUxUSVhBQ1RP RkZTRVRfQlVGRkVSUywgMCwKLQkJCQkgIE11bHRpWGFjdE9mZnNldFNMUlVMb2NrLCAicGdf bXVsdGl4YWN0L29mZnNldHMiLAotCQkJCSAgTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9C VUZGRVIsCi0JCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX09GRlNFVCk7Ci0JU2xydVBh Z2VQcmVjZWRlc1VuaXRUZXN0cyhNdWx0aVhhY3RPZmZzZXRDdGwsIE1VTFRJWEFDVF9PRkZT RVRTX1BFUl9QQUdFKTsKLQlTaW1wbGVMcnVJbml0KE11bHRpWGFjdE1lbWJlckN0bCwKLQkJ CQkgICJNdWx0aVhhY3RNZW1iZXIiLCBOVU1fTVVMVElYQUNUTUVNQkVSX0JVRkZFUlMsIDAs Ci0JCQkJICBNdWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgInBnX211bHRpeGFjdC9tZW1iZXJz IiwKLQkJCQkgIExXVFJBTkNIRV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSLAotCQkJCSAgU1lO Q19IQU5ETEVSX01VTFRJWEFDVF9NRU1CRVIpOwotCS8qIGRvZXNuJ3QgY2FsbCBTaW1wbGVM cnVUcnVuY2F0ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQgdGVzdHMgKi8KLQogCS8q IEluaXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KIAlNdWx0aVhhY3RTdGF0 ZSA9IFNobWVtSW5pdFN0cnVjdCgiU2hhcmVkIE11bHRpWGFjdCBTdGF0ZSIsCiAJCQkJCQkJ CQkgU0hBUkVEX01VTFRJWEFDVF9TVEFURV9TSVpFLApAQCAtMTg5MywyOSArMTg1OCwxNyBA QCBNdWx0aVhhY3RTaG1lbUluaXQodm9pZCkKIHZvaWQKIEJvb3RTdHJhcE11bHRpWGFjdCh2 b2lkKQogewotCWludAkJCXNsb3RubzsKLQotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zm c2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJQnVmZmVyCQlidWZmZXI7CiAKIAkvKiBD cmVhdGUgYW5kIHplcm8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIG9mZnNldHMgbG9nICovCi0J c2xvdG5vID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UoMCwgZmFsc2UpOwotCi0JLyogTWFr ZSBzdXJlIGl0J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBhZ2UoTXVsdGlY YWN0T2Zmc2V0Q3RsLCBzbG90bm8pOwotCUFzc2VydCghTXVsdGlYYWN0T2Zmc2V0Q3RsLT5z aGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFj dE9mZnNldFNMUlVMb2NrKTsKLQotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0TWVtYmVyU0xS VUxvY2ssIExXX0VYQ0xVU0lWRSk7CisJYnVmZmVyID0gWmVyb011bHRpWGFjdE9mZnNldFBh Z2UoMCwgZmFsc2UpOworCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJVW5sb2NrUmVsZWFz ZUJ1ZmZlcihidWZmZXIpOwogCiAJLyogQ3JlYXRlIGFuZCB6ZXJvIHRoZSBmaXJzdCBwYWdl IG9mIHRoZSBtZW1iZXJzIGxvZyAqLwotCXNsb3RubyA9IFplcm9NdWx0aVhhY3RNZW1iZXJQ YWdlKDAsIGZhbHNlKTsKLQotCS8qIE1ha2Ugc3VyZSBpdCdzIHdyaXR0ZW4gb3V0ICovCi0J U2ltcGxlTHJ1V3JpdGVQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgc2xvdG5vKTsKLQlBc3Nl cnQoIU11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwot Ci0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJYnVmZmVyID0g WmVyb011bHRpWGFjdE1lbWJlclBhZ2UoMCwgZmFsc2UpOworCUZsdXNoT25lQnVmZmVyKGJ1 ZmZlcik7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogfQogCiAvKgpAQCAtMTky NywzMyArMTg4MCwzNSBAQCBCb290U3RyYXBNdWx0aVhhY3Qodm9pZCkKICAqCiAgKiBDb250 cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4 aXQuCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9NdWx0aVhhY3RPZmZz ZXRQYWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKQogewotCWludAkJCXNsb3RubzsK KwlCdWZmZXIJCWJ1ZmZlcjsKIAotCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE11bHRp WGFjdE9mZnNldEN0bCwgcGFnZW5vKTsKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJV X01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vubyk7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZl cik7CiAKIAlpZiAod3JpdGVYbG9nKQogCQlXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5v LCBYTE9HX01VTFRJWEFDVF9aRVJPX09GRl9QQUdFKTsKIAotCXJldHVybiBzbG90bm87CisJ cmV0dXJuIGJ1ZmZlcjsKIH0KIAogLyoKICAqIERpdHRvLCBmb3IgTXVsdGlYYWN0TWVtYmVy CiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9NdWx0aVhhY3RNZW1iZXJQ YWdlKGludCBwYWdlbm8sIGJvb2wgd3JpdGVYbG9nKQogewotCWludAkJCXNsb3RubzsKKwlC dWZmZXIJCWJ1ZmZlcjsKIAotCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE11bHRpWGFj dE1lbWJlckN0bCwgcGFnZW5vKTsKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJVX01V TFRJWEFDVF9NRU1CRVJfSUQsIHBhZ2Vubyk7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7 CiAKIAlpZiAod3JpdGVYbG9nKQogCQlXcml0ZU1aZXJvUGFnZVhsb2dSZWMocGFnZW5vLCBY TE9HX01VTFRJWEFDVF9aRVJPX01FTV9QQUdFKTsKIAotCXJldHVybiBzbG90bm87CisJcmV0 dXJuIGJ1ZmZlcjsKIH0KIAogLyoKQEAgLTE5NzgsMjIgKzE5MzMsMTQgQEAgTWF5YmVFeHRl bmRPZmZzZXRTbHJ1KHZvaWQpCiAKIAlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFn ZShNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0KTsKIAotCUxXTG9ja0FjcXVpcmUoTXVsdGlY YWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlpZiAoIVNpbXBsZUxydURv ZXNQaHlzaWNhbFBhZ2VFeGlzdChNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubykpCisJaWYg KCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VU X0lELCBwYWdlbm8pKQogCXsKLQkJaW50CQkJc2xvdG5vOworCQlCdWZmZXIJCQlidWZmZXI7 CiAKLQkJLyoKLQkJICogRm9ydHVuYXRlbHkgZm9yIHVzLCBTaW1wbGVMcnVXcml0ZVBhZ2Ug aXMgYWxyZWFkeSBwcmVwYXJlZCB0byBkZWFsCi0JCSAqIHdpdGggY3JlYXRpbmcgYSBuZXcg c2VnbWVudCBmaWxlIGV2ZW4gaWYgdGhlIHBhZ2Ugd2UncmUgd3JpdGluZyBpcwotCQkgKiBu b3QgdGhlIGZpcnN0IGluIGl0LCBzbyB0aGlzIGlzIGVub3VnaC4KLQkJICovCi0JCXNsb3Ru byA9IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKHBhZ2VubywgZmFsc2UpOwotCQlTaW1wbGVM cnVXcml0ZVBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBzbG90bm8pOworCQlidWZmZXIgPSBa ZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZShwYWdlbm8sIGZhbHNlKTsKKwkJRmx1c2hPbmVCdWZm ZXIoYnVmZmVyKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KLQotCUxX TG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOwogfQogCiAvKgpAQCAtMjAw NywyMSArMTk1NCw2IEBAIE1heWJlRXh0ZW5kT2Zmc2V0U2xydSh2b2lkKQogdm9pZAogU3Rh cnR1cE11bHRpWGFjdCh2b2lkKQogewotCU11bHRpWGFjdElkIG11bHRpID0gTXVsdGlYYWN0 U3RhdGUtPm5leHRNWGFjdDsKLQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0ID0gTXVsdGlYYWN0 U3RhdGUtPm5leHRPZmZzZXQ7Ci0JaW50CQkJcGFnZW5vOwotCi0JLyoKLQkgKiBJbml0aWFs aXplIG9mZnNldCdzIGlkZWEgb2YgdGhlIGxhdGVzdCBwYWdlIG51bWJlci4KLQkgKi8KLQlw YWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7Ci0JTXVsdGlYYWN0T2Zm c2V0Q3RsLT5zaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQotCS8qCi0J ICogSW5pdGlhbGl6ZSBtZW1iZXIncyBpZGVhIG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIu Ci0JICovCi0JcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKLQlNdWx0 aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOwog fQogCiAvKgpAQCAtMjA0NSwxNCArMTk3Nyw3IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAlv bGRlc3RNWGFjdERCID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdERCOwogCUxX TG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKLQkvKiBDbGVhbiB1cCBvZmZzZXRz IHN0YXRlICovCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdf RVhDTFVTSVZFKTsKLQotCS8qCi0JICogKFJlLSlJbml0aWFsaXplIG91ciBpZGVhIG9mIHRo ZSBsYXRlc3QgcGFnZSBudW1iZXIgZm9yIG9mZnNldHMuCi0JICovCi0JcGFnZW5vID0gTXVs dGlYYWN0SWRUb09mZnNldFBhZ2UobmV4dE1YYWN0KTsKLQlNdWx0aVhhY3RPZmZzZXRDdGwt PnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFnZW5vOworCXBhZ2VubyA9IE1YT2Zm c2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7CiAKIAkvKgogCSAqIFplcm8gb3V0IHRoZSByZW1h aW5kZXIgb2YgdGhlIGN1cnJlbnQgb2Zmc2V0cyBwYWdlLiAgU2VlIG5vdGVzIGluCkBAIC0y MDY1LDI5ICsxOTkwLDIwIEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAllbnRyeW5vID0gTXVs dGlYYWN0SWRUb09mZnNldEVudHJ5KG5leHRNWGFjdCk7CiAJaWYgKGVudHJ5bm8gIT0gMCkK IAl7Ci0JCWludAkJCXNsb3RubzsKIAkJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CisJCUJ1 ZmZlcgkJYnVmZmVyOwogCi0JCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFj dE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCBuZXh0TVhhY3QpOwotCQlvZmZwdHIgPSAoTXVs dGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZl cltzbG90bm9dOworCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9P RkZTRVRfSUQsIHBhZ2Vubyk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19F WENMVVNJVkUpOworCQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdldFBh Z2UoYnVmZmVyKTsKIAkJb2ZmcHRyICs9IGVudHJ5bm87CiAKIAkJTWVtU2V0KG9mZnB0ciwg MCwgQkxDS1NaIC0gKGVudHJ5bm8gKiBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkpOwogCi0J CU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVl OworCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihi dWZmZXIpOwogCX0KIAotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2sp OwotCi0JLyogQW5kIHRoZSBzYW1lIGZvciBtZW1iZXJzICovCi0JTFdMb2NrQWNxdWlyZShN dWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICogKFJl LSlJbml0aWFsaXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIgZm9yIG1l bWJlcnMuCi0JICovCi0JcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsK LQlNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+bGF0ZXN0X3BhZ2VfbnVtYmVyID0gcGFn ZW5vOwotCiAJLyoKIAkgKiBaZXJvIG91dCB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50 IG1lbWJlcnMgcGFnZS4gIFNlZSBub3RlcyBpbgogCSAqIFRyaW1DTE9HKCkgZm9yIG1vdGl2 YXRpb24uCkBAIC0yMDk1LDE0ICsyMDExLDE0IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAlm bGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOwogCWlmIChmbGFnc29m ZiAhPSAwKQogCXsKLQkJaW50CQkJc2xvdG5vOwogCQlUcmFuc2FjdGlvbklkICp4aWRwdHI7 CiAJCWludAkJCW1lbWJlcm9mZjsKKwkJQnVmZmVyCQlidWZmZXI7CiAKIAkJbWVtYmVyb2Zm ID0gTVhPZmZzZXRUb01lbWJlck9mZnNldChvZmZzZXQpOwotCQlzbG90bm8gPSBTaW1wbGVM cnVSZWFkUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgb2Zmc2V0KTsK LQkJeGlkcHRyID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJCShNdWx0aVhhY3RNZW1iZXJDdGwt PnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG1lbWJlcm9mZik7CisJCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vKTsKKwkJ TG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJCXhpZHB0ciA9 IChUcmFuc2FjdGlvbklkICopIChCdWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBtZW1iZXJvZmYp OwogCiAJCU1lbVNldCh4aWRwdHIsIDAsIEJMQ0tTWiAtIG1lbWJlcm9mZik7CiAKQEAgLTIx MTIsMTEgKzIwMjgsMTAgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCQkgKiB3cml0aW5nLgog CQkgKi8KIAotCQlNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90 bm9dID0gdHJ1ZTsKKwkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJl clNMUlVMb2NrKTsKLQogCS8qIHNpZ25hbCB0aGF0IHdlJ3JlIG9mZmljaWFsbHkgdXAgKi8K IAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVs dGlYYWN0U3RhdGUtPmZpbmlzaGVkU3RhcnR1cCA9IHRydWU7CkBAIC0yMTQ4LDI1ICsyMDYz LDYgQEAgTXVsdGlYYWN0R2V0Q2hlY2twdE11bHRpKGJvb2wgaXNfc2h1dGRvd24sCiAJCQkJ Km5leHRNdWx0aSwgKm5leHRNdWx0aU9mZnNldCwgKm9sZGVzdE11bHRpLCAqb2xkZXN0TXVs dGlEQik7CiB9CiAKLS8qCi0gKiBQZXJmb3JtIGEgY2hlY2twb2ludCAtLS0gZWl0aGVyIGR1 cmluZyBzaHV0ZG93biwgb3Igb24tdGhlLWZseQotICovCi12b2lkCi1DaGVja1BvaW50TXVs dGlYYWN0KHZvaWQpCi17Ci0JVFJBQ0VfUE9TVEdSRVNRTF9NVUxUSVhBQ1RfQ0hFQ0tQT0lO VF9TVEFSVCh0cnVlKTsKLQotCS8qCi0JICogV3JpdGUgZGlydHkgTXVsdGlYYWN0IHBhZ2Vz IHRvIGRpc2suICBUaGlzIG1heSByZXN1bHQgaW4gc3luYyByZXF1ZXN0cwotCSAqIHF1ZXVl ZCBmb3IgbGF0ZXIgaGFuZGxpbmcgYnkgUHJvY2Vzc1N5bmNSZXF1ZXN0cygpLCBhcyBwYXJ0 IG9mIHRoZQotCSAqIGNoZWNrcG9pbnQuCi0JICovCi0JU2ltcGxlTHJ1V3JpdGVBbGwoTXVs dGlYYWN0T2Zmc2V0Q3RsLCB0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChNdWx0aVhhY3RN ZW1iZXJDdGwsIHRydWUpOwotCi0JVFJBQ0VfUE9TVEdSRVNRTF9NVUxUSVhBQ1RfQ0hFQ0tQ T0lOVF9ET05FKHRydWUpOwotfQotCiAvKgogICogU2V0IHRoZSBuZXh0LXRvLWJlLWFzc2ln bmVkIE11bHRpWGFjdElkIGFuZCBvZmZzZXQKICAqCkBAIC0yNDE1LDEyICsyMzExLDggQEAg RXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKQogCiAJcGFnZW5vID0g TXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwogCi0JTFdMb2NrQWNxdWlyZShNdWx0 aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCS8qIFplcm8gdGhlIHBh Z2UgYW5kIG1ha2UgYW4gWExPRyBlbnRyeSBhYm91dCBpdCAqLwotCVplcm9NdWx0aVhhY3RP ZmZzZXRQYWdlKHBhZ2VubywgdHJ1ZSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9m ZnNldFNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9NdWx0aVhhY3RPZmZz ZXRQYWdlKHBhZ2VubywgdHJ1ZSkpOwogfQogCiAvKgpAQCAtMjQ1NiwxMiArMjM0OCw4IEBA IEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1l bWJlcnMpCiAKIAkJCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7CiAK LQkJCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lW RSk7Ci0KIAkJCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExPRyBlbnRyeSBhYm91 dCBpdCAqLwotCQkJWmVyb011bHRpWGFjdE1lbWJlclBhZ2UocGFnZW5vLCB0cnVlKTsKLQot CQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJCQlVbmxvY2tS ZWxlYXNlQnVmZmVyKFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKHBhZ2VubywgdHJ1ZSkpOwog CQl9CiAKIAkJLyoKQEAgLTI3MzYsOCArMjYyNCw4IEBAIGZpbmRfbXVsdGl4YWN0X3N0YXJ0 KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKIAlNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCXBhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwotCWlu dAkJCXNsb3RubzsKIAlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKKwlCdWZmZXIJCWJ1ZmZl cjsKIAogCUFzc2VydChNdWx0aVhhY3RTdGF0ZS0+ZmluaXNoZWRTdGFydHVwKTsKIApAQCAt Mjc0NSwyMCArMjYzMywxOSBAQCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBt dWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAJZW50cnlubyA9IE11bHRpWGFjdElk VG9PZmZzZXRFbnRyeShtdWx0aSk7CiAKIAkvKgotCSAqIFdyaXRlIG91dCBkaXJ0eSBkYXRh LCBzbyBQaHlzaWNhbFBhZ2VFeGlzdHMgY2FuIHdvcmsgY29ycmVjdGx5LgorCSAqIENvcGUg d2l0aCBtaXNzaW5nL2JvZ3VzIG9sZGVzdCBNdWx0aVhhY3QgaW4gaW5jb25zaXN0ZW50IHN0 YXRlcyAoc2VlCisJICogY29tbWl0IDA2OGNmYWRmOSkuCiAJICovCi0JU2ltcGxlTHJ1V3Jp dGVBbGwoTXVsdGlYYWN0T2Zmc2V0Q3RsLCB0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChN dWx0aVhhY3RNZW1iZXJDdGwsIHRydWUpOwotCi0JaWYgKCFTaW1wbGVMcnVEb2VzUGh5c2lj YWxQYWdlRXhpc3QoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKQorCWlmICghUHJvYmVT bHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwgcGFnZW5vKSAmJgorCQkhU2lt cGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwg cGFnZW5vKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogbG9jayBpcyBhY3F1aXJlZCBieSBT aW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQ YWdlX1JlYWRPbmx5KE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCBtdWx0aSk7Ci0Jb2Zm cHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+ cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01V TFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vubyk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZF Ul9MT0NLX1NIQVJFKTsKKwlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIEJ1ZmZlckdl dFBhZ2UoYnVmZmVyKTsKIAlvZmZwdHIgKz0gZW50cnlubzsKIAlvZmZzZXQgPSAqb2ZmcHRy OwotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2spOworCVVubG9ja1Jl bGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCSpyZXN1bHQgPSBvZmZzZXQ7CiAJcmV0dXJuIHRy dWU7CkBAIC0yODY1LDEyICsyNzUyLDEzIEBAIHR5cGVkZWYgc3RydWN0IG14dHJ1bmNpbmZv CiAgKgkJVGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIHRoZSBlYXJsaWVzdCBleGlzdGluZyBw YWdlIG51bWJlci4KICAqLwogc3RhdGljIGJvb2wKLVNscnVTY2FuRGlyQ2JGaW5kRWFybGll c3QoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0 YSkKK1NscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QoaW50IHNscnVfaWQsIFNscnVQYWdlUHJl Y2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLCBp bnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKIHsKIAlteHRydW5jaW5mbyAqdHJ1bmMgPSAobXh0 cnVuY2luZm8gKikgZGF0YTsKIAogCWlmICh0cnVuYy0+ZWFybGllc3RFeGlzdGluZ1BhZ2Ug PT0gLTEgfHwKLQkJY3RsLT5QYWdlUHJlY2VkZXMoc2VncGFnZSwgdHJ1bmMtPmVhcmxpZXN0 RXhpc3RpbmdQYWdlKSkKKwkJUGFnZVByZWNlZGVzKHNlZ3BhZ2UsIHRydW5jLT5lYXJsaWVz dEV4aXN0aW5nUGFnZSkpCiAJewogCQl0cnVuYy0+ZWFybGllc3RFeGlzdGluZ1BhZ2UgPSBz ZWdwYWdlOwogCX0KQEAgLTI5MDIsNyArMjc5MCw3IEBAIFBlcmZvcm1NZW1iZXJzVHJ1bmNh dGlvbihNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0LCBNdWx0aVhhY3RPZmZzZXQgbmV3 T2xkZXN0CiAJd2hpbGUgKHNlZ21lbnQgIT0gZW5kc2VnbWVudCkKIAl7CiAJCWVsb2coREVC VUcyLCAidHJ1bmNhdGluZyBtdWx0aXhhY3QgbWVtYmVycyBzZWdtZW50ICV4Iiwgc2VnbWVu dCk7Ci0JCVNscnVEZWxldGVTZWdtZW50KE11bHRpWGFjdE1lbWJlckN0bCwgc2VnbWVudCk7 CisJCVNscnVEZWxldGVTZWdtZW50KFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgc2VnbWVu dCk7CiAKIAkJLyogbW92ZSB0byBuZXh0IHNlZ21lbnQsIGhhbmRsaW5nIHdyYXBhcm91bmQg Y29ycmVjdGx5ICovCiAJCWlmIChzZWdtZW50ID09IG1heHNlZ21lbnQpCkBAIC0yOTI1LDcg KzI4MTMsOCBAQCBQZXJmb3JtT2Zmc2V0c1RydW5jYXRpb24oTXVsdGlYYWN0SWQgb2xkZXN0 TXVsdGksIE11bHRpWGFjdElkIG5ld09sZGVzdE11bHRpKQogCSAqIGRpZG4ndCBzdWJ0cmFj dCBvbmUsIHdlJ2QgdHJpZ2dlciBTaW1wbGVMcnVUcnVuY2F0ZSdzIHdyYXBhcm91bmQKIAkg KiBkZXRlY3Rpb24uCiAJICovCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoTXVsdGlYYWN0T2Zmc2V0 Q3RsLAorCVNpbXBsZUxydVRydW5jYXRlKFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwKKwkJ CQkJICBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMsCiAJCQkJCSAgTXVsdGlYYWN0SWRU b09mZnNldFBhZ2UoUHJldmlvdXNNdWx0aVhhY3RJZChuZXdPbGRlc3RNdWx0aSkpKTsKIH0K IApAQCAtMjk5OSw3ICsyODg4LDkgQEAgVHJ1bmNhdGVNdWx0aVhhY3QoTXVsdGlYYWN0SWQg bmV3T2xkZXN0TXVsdGksIE9pZCBuZXdPbGRlc3RNdWx0aURCKQogCSAqIGJlZW4gdHJ1bmNh dGVkIGF3YXksIGFuZCB3ZSBjcmFzaGVkIGJlZm9yZSB1cGRhdGluZyBvbGRlc3RNdWx0aS4K IAkgKi8KIAl0cnVuYy5lYXJsaWVzdEV4aXN0aW5nUGFnZSA9IC0xOwotCVNscnVTY2FuRGly ZWN0b3J5KE11bHRpWGFjdE9mZnNldEN0bCwgU2xydVNjYW5EaXJDYkZpbmRFYXJsaWVzdCwg JnRydW5jKTsKKwlTbHJ1U2NhbkRpcmVjdG9yeShTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQs CisJCQkJCSAgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzLAorCQkJCQkgIFNscnVTY2Fu RGlyQ2JGaW5kRWFybGllc3QsICZ0cnVuYyk7CiAJZWFybGllc3QgPSB0cnVuYy5lYXJsaWVz dEV4aXN0aW5nUGFnZSAqIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOwogCWlmIChlYXJs aWVzdCA8IEZpcnN0TXVsdGlYYWN0SWQpCiAJCWVhcmxpZXN0ID0gRmlyc3RNdWx0aVhhY3RJ ZDsKQEAgLTMxMzEsMjQgKzMwMjIsNiBAQCBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMo aW50IHBhZ2UxLCBpbnQgcGFnZTIpCiAJCQkJCQkJCW11bHRpMiArIE1VTFRJWEFDVF9PRkZT RVRTX1BFUl9QQUdFIC0gMSkpOwogfQogCi0vKgotICogRGVjaWRlIHdoZXRoZXIgYSBNdWx0 aVhhY3RNZW1iZXIgcGFnZSBudW1iZXIgaXMgIm9sZGVyIiBmb3IgdHJ1bmNhdGlvbgotICog cHVycG9zZXMuICBUaGVyZSBpcyBubyAiaW52YWxpZCBvZmZzZXQgbnVtYmVyIiBzbyB1c2Ug dGhlIG51bWJlcnMgdmVyYmF0aW0uCi0gKi8KLXN0YXRpYyBib29sCi1NdWx0aVhhY3RNZW1i ZXJQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpCi17Ci0JTXVsdGlYYWN0T2Zm c2V0IG9mZnNldDE7Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDI7Ci0KLQlvZmZzZXQxID0g KChNdWx0aVhhY3RPZmZzZXQpIHBhZ2UxKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdF OwotCW9mZnNldDIgPSAoKE11bHRpWGFjdE9mZnNldCkgcGFnZTIpICogTVVMVElYQUNUX01F TUJFUlNfUEVSX1BBR0U7Ci0KLQlyZXR1cm4gKE11bHRpWGFjdE9mZnNldFByZWNlZGVzKG9m ZnNldDEsIG9mZnNldDIpICYmCi0JCQlNdWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhvZmZzZXQx LAotCQkJCQkJCQkJb2Zmc2V0MiArIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFIC0gMSkp OwotfQotCiAvKgogICogRGVjaWRlIHdoaWNoIG9mIHR3byBNdWx0aVhhY3RJZHMgaXMgZWFy bGllci4KICAqCkBAIC0zMjQzLDMyICszMTE2LDE4IEBAIG11bHRpeGFjdF9yZWRvKFhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX1pFUk9f T0ZGX1BBR0UpCiAJewogCQlpbnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsKIAogCQlt ZW1jcHkoJnBhZ2VubywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwog Ci0JCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lW RSk7Ci0KLQkJc2xvdG5vID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxz ZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7 Ci0JCUFzc2VydCghTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xv dG5vXSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CisJ CVVubG9ja1JlbGVhc2VCdWZmZXIoWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBm YWxzZSkpOwogCX0KIAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX1pFUk9fTUVN X1BBR0UpCiAJewogCQlpbnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsKIAogCQltZW1j cHkoJnBhZ2VubywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwgc2l6ZW9mKGludCkpOwogCi0J CUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7 Ci0KLQkJc2xvdG5vID0gWmVyb011bHRpWGFjdE1lbWJlclBhZ2UocGFnZW5vLCBmYWxzZSk7 Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHNsb3Rubyk7Ci0J CUFzc2VydCghTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5v XSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJCVVu bG9ja1JlbGVhc2VCdWZmZXIoWmVyb011bHRpWGFjdE1lbWJlclBhZ2UocGFnZW5vLCBmYWxz ZSkpOwogCX0KIAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX0NSRUFURV9JRCkK IAl7CkBAIC0zMzAyLDcgKzMxNjEsNiBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3Rh dGUgKnJlY29yZCkKIAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX1RSVU5DQVRF X0lEKQogCXsKIAkJeGxfbXVsdGl4YWN0X3RydW5jYXRlIHhscmVjOwotCQlpbnQJCQlwYWdl bm87CiAKIAkJbWVtY3B5KCZ4bHJlYywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwKIAkJCSAg IFNpemVPZk11bHRpWGFjdFRydW5jYXRlKTsKQEAgLTMzMjgsMTMgKzMxODYsNiBAQCBtdWx0 aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAogCQlQZXJmb3JtTWVtYmVy c1RydW5jYXRpb24oeGxyZWMuc3RhcnRUcnVuY01lbWIsIHhscmVjLmVuZFRydW5jTWVtYik7 CiAKLQkJLyoKLQkJICogRHVyaW5nIFhMT0cgcmVwbGF5LCBsYXRlc3RfcGFnZV9udW1iZXIg aXNuJ3QgbmVjZXNzYXJpbHkgc2V0IHVwCi0JCSAqIHlldDsgaW5zZXJ0IGEgc3VpdGFibGUg dmFsdWUgdG8gYnlwYXNzIHRoZSBzYW5pdHkgdGVzdCBpbgotCQkgKiBTaW1wbGVMcnVUcnVu Y2F0ZS4KLQkJICovCi0JCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKHhscmVj LmVuZFRydW5jT2ZmKTsKLQkJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPmxhdGVzdF9w YWdlX251bWJlciA9IHBhZ2VubzsKIAkJUGVyZm9ybU9mZnNldHNUcnVuY2F0aW9uKHhscmVj LnN0YXJ0VHJ1bmNPZmYsIHhscmVjLmVuZFRydW5jT2ZmKTsKIAogCQlMV0xvY2tSZWxlYXNl KE11bHRpWGFjdFRydW5jYXRpb25Mb2NrKTsKQEAgLTM0MDcsMjEgKzMyNTgsMyBAQCBwZ19n ZXRfbXVsdGl4YWN0X21lbWJlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAogCVNSRl9SRVRVUk5f RE9ORShmdW5jY3h0KTsKIH0KLQotLyoKLSAqIEVudHJ5cG9pbnQgZm9yIHN5bmMuYyB0byBz eW5jIG9mZnNldHMgZmlsZXMuCi0gKi8KLWludAotbXVsdGl4YWN0b2Zmc2V0c3N5bmNmaWxl dGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpCi17Ci0JcmV0dXJuIFNscnVT eW5jRmlsZVRhZyhNdWx0aVhhY3RPZmZzZXRDdGwsIGZ0YWcsIHBhdGgpOwotfQotCi0vKgot ICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgbWVtYmVycyBmaWxlcy4KLSAqLwot aW50Ci1tdWx0aXhhY3RtZW1iZXJzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywg Y2hhciAqcGF0aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKE11bHRpWGFjdE1lbWJl ckN0bCwgZnRhZywgcGF0aCk7Ci19CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9zbHJ1LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKaW5k ZXggYjY1Y2I0OWQ3ZmYuLjg4OTA1MDNiN2NmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9zbHJ1LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v c2xydS5jCkBAIC0xLDQxICsxLDkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAq IHNscnUuYwotICoJCVNpbXBsZSBMUlUgYnVmZmVyaW5nIGZvciB0cmFuc2FjdGlvbiBzdGF0 dXMgbG9nZmlsZXMKKyAqCQlTaW1wbGUgYnVmZmVyaW5nIGZvciB0cmFuc2FjdGlvbiBzdGF0 dXMgbG9nZmlsZXMKICAqCi0gKiBXZSB1c2UgYSBzaW1wbGUgbGVhc3QtcmVjZW50bHktdXNl ZCBzY2hlbWUgdG8gbWFuYWdlIGEgcG9vbCBvZiBwYWdlCi0gKiBidWZmZXJzLiAgVW5kZXIg b3JkaW5hcnkgY2lyY3Vtc3RhbmNlcyB3ZSBleHBlY3QgdGhhdCB3cml0ZQotICogdHJhZmZp YyB3aWxsIG9jY3VyIG1vc3RseSB0byB0aGUgbGF0ZXN0IHBhZ2UgKGFuZCB0byB0aGUganVz dC1wcmlvcgotICogcGFnZSwgc29vbiBhZnRlciBhIHBhZ2UgdHJhbnNpdGlvbikuICBSZWFk IHRyYWZmaWMgd2lsbCBwcm9iYWJseSB0b3VjaAotICogYSBsYXJnZXIgc3BhbiBvZiBwYWdl cywgYnV0IGluIGFueSBjYXNlIGEgZmFpcmx5IHNtYWxsIG51bWJlciBvZiBwYWdlCi0gKiBi dWZmZXJzIHNob3VsZCBiZSBzdWZmaWNpZW50LiAgU28sIHdlIGp1c3Qgc2VhcmNoIHRoZSBi dWZmZXJzIHVzaW5nIHBsYWluCi0gKiBsaW5lYXIgc2VhcmNoOyB0aGVyZSdzIG5vIG5lZWQg Zm9yIGEgaGFzaHRhYmxlIG9yIGFueXRoaW5nIGZhbmN5LgotICogVGhlIG1hbmFnZW1lbnQg YWxnb3JpdGhtIGlzIHN0cmFpZ2h0IExSVSBleGNlcHQgdGhhdCB3ZSB3aWxsIG5ldmVyIHN3 YXAKLSAqIG91dCB0aGUgbGF0ZXN0IHBhZ2UgKHNpbmNlIHdlIGtub3cgaXQncyBnb2luZyB0 byBiZSBoaXQgYWdhaW4gZXZlbnR1YWxseSkuCi0gKgotICogV2UgdXNlIGEgY29udHJvbCBM V0xvY2sgdG8gcHJvdGVjdCB0aGUgc2hhcmVkIGRhdGEgc3RydWN0dXJlcywgcGx1cwotICog cGVyLWJ1ZmZlciBMV0xvY2tzIHRoYXQgc3luY2hyb25pemUgSS9PIGZvciBlYWNoIGJ1ZmZl ci4gIFRoZSBjb250cm9sIGxvY2sKLSAqIG11c3QgYmUgaGVsZCB0byBleGFtaW5lIG9yIG1v ZGlmeSBhbnkgc2hhcmVkIHN0YXRlLiAgQSBwcm9jZXNzIHRoYXQgaXMKLSAqIHJlYWRpbmcg aW4gb3Igd3JpdGluZyBvdXQgYSBwYWdlIGJ1ZmZlciBkb2VzIG5vdCBob2xkIHRoZSBjb250 cm9sIGxvY2ssCi0gKiBvbmx5IHRoZSBwZXItYnVmZmVyIGxvY2sgZm9yIHRoZSBidWZmZXIg aXQgaXMgd29ya2luZyBvbi4KLSAqCi0gKiAiSG9sZGluZyB0aGUgY29udHJvbCBsb2NrIiBt ZWFucyBleGNsdXNpdmUgbG9jayBpbiBhbGwgY2FzZXMgZXhjZXB0IGZvcgotICogU2ltcGxl THJ1UmVhZFBhZ2VfUmVhZE9ubHkoKTsgc2VlIGNvbW1lbnRzIGZvciBTbHJ1UmVjZW50bHlV c2VkKCkgZm9yCi0gKiB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQuCi0gKgotICogV2hlbiBp bml0aWF0aW5nIEkvTyBvbiBhIGJ1ZmZlciwgd2UgYWNxdWlyZSB0aGUgcGVyLWJ1ZmZlciBs b2NrIGV4Y2x1c2l2ZWx5Ci0gKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjb250cm9sIGxvY2su ICBUaGUgcGVyLWJ1ZmZlciBsb2NrIGlzIHJlbGVhc2VkIGFmdGVyCi0gKiBjb21wbGV0aW5n IHRoZSBJL08sIHJlLWFjcXVpcmluZyB0aGUgY29udHJvbCBsb2NrLCBhbmQgdXBkYXRpbmcg dGhlIHNoYXJlZAotICogc3RhdGUuICAoRGVhZGxvY2sgaXMgbm90IHBvc3NpYmxlIGhlcmUs IGJlY2F1c2Ugd2UgbmV2ZXIgdHJ5IHRvIGluaXRpYXRlCi0gKiBJL08gd2hlbiBzb21lb25l IGVsc2UgaXMgYWxyZWFkeSBkb2luZyBJL08gb24gdGhlIHNhbWUgYnVmZmVyLikKLSAqIFRv IHdhaXQgZm9yIEkvTyB0byBjb21wbGV0ZSwgcmVsZWFzZSB0aGUgY29udHJvbCBsb2NrLCBh Y3F1aXJlIHRoZQotICogcGVyLWJ1ZmZlciBsb2NrIGluIHNoYXJlZCBtb2RlLCBpbW1lZGlh dGVseSByZWxlYXNlIHRoZSBwZXItYnVmZmVyIGxvY2ssCi0gKiByZWFjcXVpcmUgdGhlIGNv bnRyb2wgbG9jaywgYW5kIHRoZW4gcmVjaGVjayBzdGF0ZSAoc2luY2UgYXJiaXRyYXJ5IHRo aW5ncwotICogY291bGQgaGF2ZSBoYXBwZW5lZCB3aGlsZSB3ZSBkaWRuJ3QgaGF2ZSB0aGUg bG9jaykuCi0gKgotICogQXMgd2l0aCB0aGUgcmVndWxhciBidWZmZXIgbWFuYWdlciwgaXQg aXMgcG9zc2libGUgZm9yIGFub3RoZXIgcHJvY2VzcwotICogdG8gcmUtZGlydHkgYSBwYWdl IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHdyaXR0ZW4gb3V0LiAgVGhpcyBpcyBoYW5kbGVk Ci0gKiBieSByZS1zZXR0aW5nIHRoZSBwYWdlJ3MgcGFnZV9kaXJ0eSBmbGFnLgorICogWFhY IHdyaXRlIG1lCiAgKgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cApAQCAtNjAsNTYxICsyOCwz NCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVt LmgiCiAKLSNkZWZpbmUgU2xydUZpbGVOYW1lKGN0bCwgcGF0aCwgc2VnKSBcCi0Jc25wcmlu dGYocGF0aCwgTUFYUEdQQVRILCAiJXMvJTA0WCIsIChjdGwpLT5EaXIsIHNlZykKLQogLyoK LSAqIER1cmluZyBTaW1wbGVMcnVXcml0ZUFsbCgpLCB3ZSB3aWxsIHVzdWFsbHkgbm90IG5l ZWQgdG8gd3JpdGUgbW9yZSB0aGFuIG9uZQotICogb3IgdHdvIHBoeXNpY2FsIGZpbGVzLCBi dXQgd2UgbWF5IG5lZWQgdG8gd3JpdGUgc2V2ZXJhbCBwYWdlcyBwZXIgZmlsZS4gIFdlCi0g KiBjYW4gY29uc29saWRhdGUgdGhlIEkvTyByZXF1ZXN0cyBieSBsZWF2aW5nIGZpbGVzIG9w ZW4gdW50aWwgY29udHJvbCByZXR1cm5zCi0gKiB0byBTaW1wbGVMcnVXcml0ZUFsbCgpLiAg VGhpcyBkYXRhIHN0cnVjdHVyZSByZW1lbWJlcnMgd2hpY2ggZmlsZXMgYXJlIG9wZW4uCisg KiBTTFJVIElEIHRvIHBhdGggbWFwcGluZwogICovCi0jZGVmaW5lIE1BWF9XUklURUFMTF9C VUZGRVJTCTE2CisjZGVmaW5lIFBHX1NMUlUoc3ltbmFtZSxuYW1lLHBhdGgsc3luY2hyb25p emUpIFwKKwlwYXRoLAogCi10eXBlZGVmIHN0cnVjdCBTbHJ1V3JpdGVBbGxEYXRhCitzdGF0 aWMgY2hhciAqc2xydV9kaXJzW10gPQogewotCWludAkJCW51bV9maWxlczsJCS8qICMgZmls ZXMgYWN0dWFsbHkgb3BlbiAqLwotCWludAkJCWZkW01BWF9XUklURUFMTF9CVUZGRVJTXTsJ LyogdGhlaXIgRkQncyAqLwotCWludAkJCXNlZ25vW01BWF9XUklURUFMTF9CVUZGRVJTXTsJ LyogdGhlaXIgbG9nIHNlZyNzICovCi19IFNscnVXcml0ZUFsbERhdGE7Ci0KLXR5cGVkZWYg c3RydWN0IFNscnVXcml0ZUFsbERhdGEgKlNscnVXcml0ZUFsbDsKKyNpbmNsdWRlICJhY2Nl c3Mvc2xydWxpc3QuaCIKK307CiAKIC8qCi0gKiBQb3B1bGF0ZSBhIGZpbGUgdGFnIGRlc2Ny aWJpbmcgYSBzZWdtZW50IGZpbGUuICBXZSBvbmx5IHVzZSB0aGUgc2VnbWVudAotICogbnVt YmVyLCBzaW5jZSB3ZSBjYW4gZGVyaXZlIGV2ZXJ5dGhpbmcgZWxzZSB3ZSBuZWVkIGJ5IGhh dmluZyBzZXBhcmF0ZQotICogc3luYyBoYW5kbGVyIGZ1bmN0aW9ucyBmb3IgY2xvZywgbXVs dGl4YWN0IGV0Yy4KKyAqIFdlJ2xsIG1haW50YWluIGEgbGl0dGxlIGNhY2hlIG9mIHJlY2Vu dGx5IHNlZW4gYnVmZmVycywgdG8gdHJ5IHRvIGF2b2lkIHRoZQorICogYnVmZmVyIG1hcHBp bmcgdGFibGUgb24gcmVwZWF0IGFjY2VzcyAoaWUgdGhlIGJ1c3kgZW5kIG9mIHRoZSBDTE9H KS4gIE9uZQorICogZW50cnkgcGVyIFNMUlUuCiAgKi8KLSNkZWZpbmUgSU5JVF9TTFJVRklM RVRBRyhhLHh4X2hhbmRsZXIseHhfc2Vnbm8pIFwKLSggXAotCW1lbXNldCgmKGEpLCAwLCBz aXplb2YoRmlsZVRhZykpLCBcCi0JKGEpLmhhbmRsZXIgPSAoeHhfaGFuZGxlciksIFwKLQko YSkuc2Vnbm8gPSAoeHhfc2Vnbm8pIFwKLSkKLQotLyoKLSAqIE1hY3JvIHRvIG1hcmsgYSBi dWZmZXIgc2xvdCAibW9zdCByZWNlbnRseSB1c2VkIi4gIE5vdGUgbXVsdGlwbGUgZXZhbHVh dGlvbgotICogb2YgYXJndW1lbnRzIQotICoKLSAqIFRoZSByZWFzb24gZm9yIHRoZSBpZi10 ZXN0IGlzIHRoYXQgdGhlcmUgYXJlIG9mdGVuIG1hbnkgY29uc2VjdXRpdmUKLSAqIGFjY2Vz c2VzIHRvIHRoZSBzYW1lIHBhZ2UgKHBhcnRpY3VsYXJseSB0aGUgbGF0ZXN0IHBhZ2UpLiAg Qnkgc3VwcHJlc3NpbmcKLSAqIHVzZWxlc3MgaW5jcmVtZW50cyBvZiBjdXJfbHJ1X2NvdW50 LCB3ZSByZWR1Y2UgdGhlIHByb2JhYmlsaXR5IHRoYXQgb2xkCi0gKiBwYWdlcycgY291bnRz IHdpbGwgIndyYXAgYXJvdW5kIiBhbmQgbWFrZSB0aGVtIGFwcGVhciByZWNlbnRseSB1c2Vk LgotICoKLSAqIFdlIGFsbG93IHRoaXMgY29kZSB0byBiZSBleGVjdXRlZCBjb25jdXJyZW50 bHkgYnkgbXVsdGlwbGUgcHJvY2Vzc2VzIHdpdGhpbgotICogU2ltcGxlTHJ1UmVhZFBhZ2Vf UmVhZE9ubHkoKS4gIEFzIGxvbmcgYXMgaW50IHJlYWRzIGFuZCB3cml0ZXMgYXJlIGF0b21p YywKLSAqIHRoaXMgc2hvdWxkIG5vdCBjYXVzZSBhbnkgY29tcGxldGVseS1ib2d1cyB2YWx1 ZXMgdG8gZW50ZXIgdGhlIGNvbXB1dGF0aW9uLgotICogSG93ZXZlciwgaXQgaXMgcG9zc2li bGUgZm9yIGVpdGhlciBjdXJfbHJ1X2NvdW50IG9yIGluZGl2aWR1YWwKLSAqIHBhZ2VfbHJ1 X2NvdW50IGVudHJpZXMgdG8gYmUgInJlc2V0IiB0byBsb3dlciB2YWx1ZXMgdGhhbiB0aGV5 IHNob3VsZCBoYXZlLAotICogaW4gY2FzZSBhIHByb2Nlc3MgaXMgZGVsYXllZCB3aGlsZSBp dCBleGVjdXRlcyB0aGlzIG1hY3JvLiAgV2l0aCBjYXJlIGluCi0gKiBTbHJ1U2VsZWN0TFJV UGFnZSgpLCB0aGlzIGRvZXMgbGl0dGxlIGhhcm0sIGFuZCBpbiBhbnkgY2FzZSB0aGUgYWJz b2x1dGUKLSAqIHdvcnN0IHBvc3NpYmxlIGNvbnNlcXVlbmNlIGlzIGEgbm9ub3B0aW1hbCBj aG9pY2Ugb2YgcGFnZSB0byBldmljdC4gIFRoZQotICogZ2FpbiBmcm9tIGFsbG93aW5nIGNv bmN1cnJlbnQgcmVhZHMgb2YgU0xSVSBwYWdlcyBzZWVtcyB3b3J0aCBpdC4KLSAqLwotI2Rl ZmluZSBTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xvdG5vKQlcCi0JZG8geyBcCi0JCWlu dAkJbmV3X2xydV9jb3VudCA9IChzaGFyZWQpLT5jdXJfbHJ1X2NvdW50OyBcCi0JCWlmIChu ZXdfbHJ1X2NvdW50ICE9IChzaGFyZWQpLT5wYWdlX2xydV9jb3VudFtzbG90bm9dKSB7IFwK LQkJCShzaGFyZWQpLT5jdXJfbHJ1X2NvdW50ID0gKytuZXdfbHJ1X2NvdW50OyBcCi0JCQko c2hhcmVkKS0+cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IG5ld19scnVfY291bnQ7IFwKLQkJ fSBcCi0JfSB3aGlsZSAoMCkKLQotLyogU2F2ZWQgaW5mbyBmb3IgU2xydVJlcG9ydElPRXJy b3IgKi8KLXR5cGVkZWYgZW51bQotewotCVNMUlVfT1BFTl9GQUlMRUQsCi0JU0xSVV9TRUVL X0ZBSUxFRCwKLQlTTFJVX1JFQURfRkFJTEVELAotCVNMUlVfV1JJVEVfRkFJTEVELAotCVNM UlVfRlNZTkNfRkFJTEVELAotCVNMUlVfQ0xPU0VfRkFJTEVECi19IFNscnVFcnJvckNhdXNl Oworc3RydWN0IFNscnVSZWNlbnRCdWZmZXIgeworCWludAkJCXBhZ2VubzsKKwlCdWZmZXIJ CXJlY2VudF9idWZmZXI7Cit9OwogCi1zdGF0aWMgU2xydUVycm9yQ2F1c2Ugc2xydV9lcnJj YXVzZTsKLXN0YXRpYyBpbnQJc2xydV9lcnJubzsKK3N0YXRpYyBzdHJ1Y3QgU2xydVJlY2Vu dEJ1ZmZlciBzbHJ1X3JlY2VudF9idWZmZXJzW1NMUlVfTkVYVF9JRF07CiAKLQotc3RhdGlj IHZvaWQgU2ltcGxlTHJ1WmVyb0xTTnMoU2xydUN0bCBjdGwsIGludCBzbG90bm8pOwotc3Rh dGljIHZvaWQgU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKTsKLXN0 YXRpYyB2b2lkIFNscnVJbnRlcm5hbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3Ru bywgU2xydVdyaXRlQWxsIGZkYXRhKTsKLXN0YXRpYyBib29sIFNscnVQaHlzaWNhbFJlYWRQ YWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBpbnQgc2xvdG5vKTsKLXN0YXRpYyBib29s IFNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgaW50IHNs b3RubywKLQkJCQkJCQkJICBTbHJ1V3JpdGVBbGwgZmRhdGEpOwotc3RhdGljIHZvaWQgU2xy dVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQg eGlkKTsKLXN0YXRpYyBpbnQJU2xydVNlbGVjdExSVVBhZ2UoU2xydUN0bCBjdGwsIGludCBw YWdlbm8pOwotCi1zdGF0aWMgYm9vbCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVD dGwgY3RsLCBjaGFyICpmaWxlbmFtZSwKK3N0YXRpYyBib29sIFNscnVTY2FuRGlyQ2JEZWxl dGVDdXRvZmYoaW50IHNscnVfaWQsCisJCQkJCQkJCQkgIFNscnVQYWdlUHJlY2VkZXNGdW5j dGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLAogCQkJCQkJ CQkJICBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgdm9pZCBTbHJ1SW50ZXJu YWxEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vnbm8pOwotCi0vKgotICogSW5p dGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1lbW9yeQotICovCi0KLVNpemUKLVNpbXBsZUxydVNo bWVtU2l6ZShpbnQgbnNsb3RzLCBpbnQgbmxzbnMpCi17Ci0JU2l6ZQkJc3o7Ci0KLQkvKiB3 ZSBhc3N1bWUgbnNsb3RzIGlzbid0IHNvIGxhcmdlIGFzIHRvIHJpc2sgb3ZlcmZsb3cgKi8K LQlzeiA9IE1BWEFMSUdOKHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwotCXN6ICs9IE1BWEFM SUdOKG5zbG90cyAqIHNpemVvZihjaGFyICopKTsJLyogcGFnZV9idWZmZXJbXSAqLwotCXN6 ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihTbHJ1UGFnZVN0YXR1cykpOwkvKiBwYWdl X3N0YXR1c1tdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGJvb2wpKTsJ LyogcGFnZV9kaXJ0eVtdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGlu dCkpOwkvKiBwYWdlX251bWJlcltdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6 ZW9mKGludCkpOwkvKiBwYWdlX2xydV9jb3VudFtdICovCi0Jc3ogKz0gTUFYQUxJR04obnNs b3RzICogc2l6ZW9mKExXTG9ja1BhZGRlZCkpOwkvKiBidWZmZXJfbG9ja3NbXSAqLwotCi0J aWYgKG5sc25zID4gMCkKLQkJc3ogKz0gTUFYQUxJR04obnNsb3RzICogbmxzbnMgKiBzaXpl b2YoWExvZ1JlY1B0cikpOwkvKiBncm91cF9sc25bXSAqLwotCi0JcmV0dXJuIEJVRkZFUkFM SUdOKHN6KSArIEJMQ0tTWiAqIG5zbG90czsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUsIG9y IGF0dGFjaCB0bywgYSBzaW1wbGUgTFJVIGNhY2hlIGluIHNoYXJlZCBtZW1vcnkuCi0gKgot ICogY3RsOiBhZGRyZXNzIG9mIGxvY2FsICh1bnNoYXJlZCkgY29udHJvbCBzdHJ1Y3R1cmUu Ci0gKiBuYW1lOiBuYW1lIG9mIFNMUlUuICAoVGhpcyBpcyB1c2VyLXZpc2libGUsIHBpY2sg d2l0aCBjYXJlISkKLSAqIG5zbG90czogbnVtYmVyIG9mIHBhZ2Ugc2xvdHMgdG8gdXNlLgot ICogbmxzbnM6IG51bWJlciBvZiBMU04gZ3JvdXBzIHBlciBwYWdlIChzZXQgdG8gemVybyBp ZiBub3QgcmVsZXZhbnQpLgotICogY3RsbG9jazogTFdMb2NrIHRvIHVzZSB0byBjb250cm9s IGFjY2VzcyB0byB0aGUgc2hhcmVkIGNvbnRyb2wgc3RydWN0dXJlLgotICogc3ViZGlyOiBQ R0RBVEEtcmVsYXRpdmUgc3ViZGlyZWN0b3J5IHRoYXQgd2lsbCBjb250YWluIHRoZSBmaWxl cy4KLSAqIHRyYW5jaGVfaWQ6IExXTG9jayB0cmFuY2hlIElEIHRvIHVzZSBmb3IgdGhlIFNM UlUncyBwZXItYnVmZmVyIExXTG9ja3MuCi0gKi8KLXZvaWQKLVNpbXBsZUxydUluaXQoU2xy dUN0bCBjdGwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKLQkJ CSAgTFdMb2NrICpjdGxsb2NrLCBjb25zdCBjaGFyICpzdWJkaXIsIGludCB0cmFuY2hlX2lk LAotCQkJICBTeW5jUmVxdWVzdEhhbmRsZXIgc3luY19oYW5kbGVyKQotewotCVNscnVTaGFy ZWQJc2hhcmVkOwotCWJvb2wJCWZvdW5kOwotCi0Jc2hhcmVkID0gKFNscnVTaGFyZWQpIFNo bWVtSW5pdFN0cnVjdChuYW1lLAotCQkJCQkJCQkJCSAgU2ltcGxlTHJ1U2htZW1TaXplKG5z bG90cywgbmxzbnMpLAotCQkJCQkJCQkJCSAgJmZvdW5kKTsKLQotCWlmICghSXNVbmRlclBv c3RtYXN0ZXIpCi0JewotCQkvKiBJbml0aWFsaXplIGxvY2tzIGFuZCBzaGFyZWQgbWVtb3J5 IGFyZWEgKi8KLQkJY2hhcgkgICAqcHRyOwotCQlTaXplCQlvZmZzZXQ7Ci0JCWludAkJCXNs b3RubzsKLQotCQlBc3NlcnQoIWZvdW5kKTsKLQotCQltZW1zZXQoc2hhcmVkLCAwLCBzaXpl b2YoU2xydVNoYXJlZERhdGEpKTsKLQotCQlzaGFyZWQtPkNvbnRyb2xMb2NrID0gY3RsbG9j azsKLQotCQlzaGFyZWQtPm51bV9zbG90cyA9IG5zbG90czsKLQkJc2hhcmVkLT5sc25fZ3Jv dXBzX3Blcl9wYWdlID0gbmxzbnM7Ci0KLQkJc2hhcmVkLT5jdXJfbHJ1X2NvdW50ID0gMDsK LQotCQkvKiBzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciB3aWxsIGJlIHNldCBsYXRlciAq LwotCi0JCXNoYXJlZC0+c2xydV9zdGF0c19pZHggPSBwZ3N0YXRfZ2V0X3NscnVfaW5kZXgo bmFtZSk7Ci0KLQkJcHRyID0gKGNoYXIgKikgc2hhcmVkOwotCQlvZmZzZXQgPSBNQVhBTElH TihzaXplb2YoU2xydVNoYXJlZERhdGEpKTsKLQkJc2hhcmVkLT5wYWdlX2J1ZmZlciA9IChj aGFyICoqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAq IHNpemVvZihjaGFyICopKTsKLQkJc2hhcmVkLT5wYWdlX3N0YXR1cyA9IChTbHJ1UGFnZVN0 YXR1cyAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAq IHNpemVvZihTbHJ1UGFnZVN0YXR1cykpOwotCQlzaGFyZWQtPnBhZ2VfZGlydHkgPSAoYm9v bCAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNp emVvZihib29sKSk7Ci0JCXNoYXJlZC0+cGFnZV9udW1iZXIgPSAoaW50ICopIChwdHIgKyBv ZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGludCkpOwot CQlzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50ID0gKGludCAqKSAocHRyICsgb2Zmc2V0KTsKLQkJ b2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVvZihpbnQpKTsKLQotCQkvKiBJbml0 aWFsaXplIExXTG9ja3MgKi8KLQkJc2hhcmVkLT5idWZmZXJfbG9ja3MgPSAoTFdMb2NrUGFk ZGVkICopIChwdHIgKyBvZmZzZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICog c2l6ZW9mKExXTG9ja1BhZGRlZCkpOwotCi0JCWlmIChubHNucyA+IDApCi0JCXsKLQkJCXNo YXJlZC0+Z3JvdXBfbHNuID0gKFhMb2dSZWNQdHIgKikgKHB0ciArIG9mZnNldCk7Ci0JCQlv ZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogbmxzbnMgKiBzaXplb2YoWExvZ1JlY1B0cikp OwotCQl9Ci0KLQkJcHRyICs9IEJVRkZFUkFMSUdOKG9mZnNldCk7Ci0JCWZvciAoc2xvdG5v ID0gMDsgc2xvdG5vIDwgbnNsb3RzOyBzbG90bm8rKykKLQkJewotCQkJTFdMb2NrSW5pdGlh bGl6ZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrLAotCQkJCQkJCSB0cmFu Y2hlX2lkKTsKLQotCQkJc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dID0gcHRyOwotCQkJ c2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJc2hh cmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSBmYWxzZTsKLQkJCXNoYXJlZC0+cGFnZV9scnVf Y291bnRbc2xvdG5vXSA9IDA7Ci0JCQlwdHIgKz0gQkxDS1NaOwotCQl9Ci0KLQkJLyogU2hv dWxkIGZpdCB0byBlc3RpbWF0ZWQgc2htZW0gc2l6ZSAqLwotCQlBc3NlcnQocHRyIC0gKGNo YXIgKikgc2hhcmVkIDw9IFNpbXBsZUxydVNobWVtU2l6ZShuc2xvdHMsIG5sc25zKSk7Ci0J fQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUg dW5zaGFyZWQgY29udHJvbCBzdHJ1Y3QsIGluY2x1ZGluZyBkaXJlY3RvcnkgcGF0aC4gV2UK LQkgKiBhc3N1bWUgY2FsbGVyIHNldCBQYWdlUHJlY2VkZXMuCi0JICovCi0JY3RsLT5zaGFy ZWQgPSBzaGFyZWQ7Ci0JY3RsLT5zeW5jX2hhbmRsZXIgPSBzeW5jX2hhbmRsZXI7Ci0Jc3Ry bGNweShjdGwtPkRpciwgc3ViZGlyLCBzaXplb2YoY3RsLT5EaXIpKTsKLX0KLQotLyoKLSAq IEluaXRpYWxpemUgKG9yIHJlaW5pdGlhbGl6ZSkgYSBwYWdlIHRvIHplcm9lcy4KLSAqCi0g KiBUaGUgcGFnZSBpcyBub3QgYWN0dWFsbHkgd3JpdHRlbiwganVzdCBzZXQgdXAgaW4gc2hh cmVkIG1lbW9yeS4KLSAqIFRoZSBzbG90IG51bWJlciBvZiB0aGUgbmV3IHBhZ2UgaXMgcmV0 dXJuZWQuCi0gKgotICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5k IHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICovCi1pbnQKLVNpbXBsZUxydVplcm9QYWdlKFNs cnVDdGwgY3RsLCBpbnQgcGFnZW5vKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5z aGFyZWQ7Ci0JaW50CQkJc2xvdG5vOwotCi0JLyogRmluZCBhIHN1aXRhYmxlIGJ1ZmZlciBz bG90IGZvciB0aGUgcGFnZSAqLwotCXNsb3RubyA9IFNscnVTZWxlY3RMUlVQYWdlKGN0bCwg cGFnZW5vKTsKLQlBc3NlcnQoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVf UEFHRV9FTVBUWSB8fAotCQkgICAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNM UlVfUEFHRV9WQUxJRCAmJgotCQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKSB8fAot CQkgICBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vKTsKLQotCS8qIE1h cmsgdGhlIHNsb3QgYXMgY29udGFpbmluZyB0aGlzIHBhZ2UgKi8KLQlzaGFyZWQtPnBhZ2Vf bnVtYmVyW3Nsb3Rub10gPSBwYWdlbm87Ci0Jc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9d ID0gU0xSVV9QQUdFX1ZBTElEOwotCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1 ZTsKLQlTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xvdG5vKTsKLQotCS8qIFNldCB0aGUg YnVmZmVyIHRvIHplcm9lcyAqLwotCU1lbVNldChzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Ru b10sIDAsIEJMQ0tTWik7Ci0KLQkvKiBTZXQgdGhlIExTTnMgZm9yIHRoaXMgbmV3IHBhZ2Ug dG8gemVybyAqLwotCVNpbXBsZUxydVplcm9MU05zKGN0bCwgc2xvdG5vKTsKLQotCS8qIEFz c3VtZSB0aGlzIHBhZ2UgaXMgbm93IHRoZSBsYXRlc3QgYWN0aXZlIHBhZ2UgKi8KLQlzaGFy ZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQotCS8qIHVwZGF0ZSB0aGUgc3Rh dHMgY291bnRlciBvZiB6ZXJvZWQgcGFnZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9wYWdl X3plcm9lZChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCXJldHVybiBzbG90bm87Ci19 Ci0KLS8qCi0gKiBaZXJvIGFsbCB0aGUgTFNOcyB3ZSBzdG9yZSBmb3IgdGhpcyBzbHJ1IHBh Z2UuCi0gKgotICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGVhY2ggdGltZSB3ZSBjcmVhdGUg YSBuZXcgcGFnZSwgYW5kIGVhY2ggdGltZSB3ZSByZWFkCi0gKiBpbiBhIHBhZ2UgZnJvbSBk aXNrIGludG8gYW4gZXhpc3RpbmcgYnVmZmVyLiAgKFN1Y2ggYW4gb2xkIHBhZ2UgY2Fubm90 Ci0gKiBoYXZlIGFueSBpbnRlcmVzdGluZyBMU05zLCBzaW5jZSB3ZSdkIGhhdmUgZmx1c2hl ZCB0aGVtIGJlZm9yZSB3cml0aW5nCi0gKiB0aGUgcGFnZSBpbiB0aGUgZmlyc3QgcGxhY2Uu KQotICoKLSAqIFRoaXMgYXNzdW1lcyB0aGF0IEludmFsaWRYTG9nUmVjUHRyIGlzIGJpdHdp c2UtYWxsLTAuCi0gKi8KLXN0YXRpYyB2b2lkCi1TaW1wbGVMcnVaZXJvTFNOcyhTbHJ1Q3Rs IGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVk OwotCi0JaWYgKHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSA+IDApCi0JCU1lbVNldCgm c2hhcmVkLT5ncm91cF9sc25bc2xvdG5vICogc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdl XSwgMCwKLQkJCSAgIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSAqIHNpemVvZihYTG9n UmVjUHRyKSk7Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciBhbnkgYWN0aXZlIEkvTyBvbiBhIHBh Z2Ugc2xvdCB0byBmaW5pc2guICAoVGhpcyBkb2VzIG5vdAotICogZ3VhcmFudGVlIHRoYXQg bmV3IEkvTyBoYXNuJ3QgYmVlbiBzdGFydGVkIGJlZm9yZSB3ZSByZXR1cm4sIHRob3VnaC4K LSAqIEluIGZhY3QgdGhlIHNsb3QgbWlnaHQgbm90IGV2ZW4gY29udGFpbiB0aGUgc2FtZSBw YWdlIGFueW1vcmUuKQotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50 cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KLSAqLwotc3RhdGljIHZvaWQKLVNpbXBs ZUxydVdhaXRJTyhTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1U2hhcmVkCXNo YXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JLyogU2VlIG5vdGVzIGF0IHRvcCBvZiBmaWxlICov Ci0JTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKLQlMV0xvY2tBY3F1aXJl KCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssIExXX1NIQVJFRCk7Ci0JTFdM b2NrUmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrKTsKLQlMV0xv Y2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKgot CSAqIElmIHRoZSBzbG90IGlzIHN0aWxsIGluIGFuIGlvLWluLXByb2dyZXNzIHN0YXRlLCB0 aGVuIGVpdGhlciBzb21lb25lCi0JICogYWxyZWFkeSBzdGFydGVkIGEgbmV3IEkvTyBvbiB0 aGUgc2xvdCwgb3IgYSBwcmV2aW91cyBJL08gZmFpbGVkIGFuZAotCSAqIG5lZ2xlY3RlZCB0 byByZXNldCB0aGUgcGFnZSBzdGF0ZS4gIFRoYXQgc2hvdWxkbid0IGhhcHBlbiwgcmVhbGx5 LCBidXQKLQkgKiBpdCBzZWVtcyB3b3J0aCBhIGZldyBleHRyYSBjeWNsZXMgdG8gY2hlY2sg YW5kIHJlY292ZXIgZnJvbSBpdC4gV2UgY2FuCi0JICogY2hlYXBseSB0ZXN0IGZvciBmYWls dXJlIGJ5IHNlZWluZyBpZiB0aGUgYnVmZmVyIGxvY2sgaXMgc3RpbGwgaGVsZCAod2UKLQkg KiBhc3N1bWUgdGhhdCB0cmFuc2FjdGlvbiBhYm9ydCB3b3VsZCByZWxlYXNlIHRoZSBsb2Nr KS4KLQkgKi8KLQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFH RV9SRUFEX0lOX1BST0dSRVNTIHx8Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9 PSBTTFJVX1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MpCi0JewotCQlpZiAoTFdMb2NrQ29uZGl0 aW9uYWxBY3F1aXJlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssIExXX1NI QVJFRCkpCi0JCXsKLQkJCS8qIGluZGVlZCwgdGhlIEkvTyBtdXN0IGhhdmUgZmFpbGVkICov Ci0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFE X0lOX1BST0dSRVNTKQotCQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVf UEFHRV9FTVBUWTsKLQkJCWVsc2UJCQkJLyogd3JpdGVfaW5fcHJvZ3Jlc3MgKi8KLQkJCXsK LQkJCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPSBTTFJVX1BBR0VfVkFMSUQ7Ci0J CQkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOwotCQkJfQotCQkJTFdMb2Nr UmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5sb2NrKTsKLQkJfQotCX0K LX0KLQotLyoKLSAqIEZpbmQgYSBwYWdlIGluIGEgc2hhcmVkIGJ1ZmZlciwgcmVhZGluZyBp dCBpbiBpZiBuZWNlc3NhcnkuCi0gKiBUaGUgcGFnZSBudW1iZXIgbXVzdCBjb3JyZXNwb25k IHRvIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgcGFnZS4KLSAqCi0gKiBJZiB3cml0ZV9vayBp cyB0cnVlIHRoZW4gaXQgaXMgT0sgdG8gcmV0dXJuIGEgcGFnZSB0aGF0IGlzIGluCi0gKiBX UklURV9JTl9QUk9HUkVTUyBzdGF0ZTsgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmls aXR5IHRvIGJlIHN1cmUKLSAqIHRoYXQgbW9kaWZpY2F0aW9uIG9mIHRoZSBwYWdlIGlzIHNh ZmUuICBJZiB3cml0ZV9vayBpcyBmYWxzZSB0aGVuIHdlCi0gKiB3aWxsIG5vdCByZXR1cm4g dGhlIHBhZ2UgdW50aWwgaXQgaXMgbm90IHVuZGVyZ29pbmcgYWN0aXZlIEkvTy4KLSAqCi0g KiBUaGUgcGFzc2VkLWluIHhpZCBpcyB1c2VkIG9ubHkgZm9yIGVycm9yIHJlcG9ydGluZywg YW5kIG1heSBiZQotICogSW52YWxpZFRyYW5zYWN0aW9uSWQgaWYgbm8gc3BlY2lmaWMgeGlk IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aW9uLgotICoKLSAqIFJldHVybiB2YWx1ZSBp cyB0aGUgc2hhcmVkLWJ1ZmZlciBzbG90IG51bWJlciBub3cgaG9sZGluZyB0aGUgcGFnZS4K LSAqIFRoZSBidWZmZXIncyBMUlUgYWNjZXNzIGluZm8gaXMgdXBkYXRlZC4KLSAqCi0gKiBD b250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0 IGV4aXQuCi0gKi8KLWludAotU2ltcGxlTHJ1UmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBw YWdlbm8sIGJvb2wgd3JpdGVfb2ssCi0JCQkJICBUcmFuc2FjdGlvbklkIHhpZCkKLXsKLQlT bHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JLyogT3V0ZXIgbG9vcCBoYW5k bGVzIHJlc3RhcnQgaWYgd2UgbXVzdCB3YWl0IGZvciBzb21lb25lIGVsc2UncyBJL08gKi8K LQlmb3IgKDs7KQotCXsKLQkJaW50CQkJc2xvdG5vOwotCQlib29sCQlvazsKLQotCQkvKiBT ZWUgaWYgcGFnZSBhbHJlYWR5IGlzIGluIG1lbW9yeTsgaWYgbm90LCBwaWNrIHZpY3RpbSBz bG90ICovCi0JCXNsb3RubyA9IFNscnVTZWxlY3RMUlVQYWdlKGN0bCwgcGFnZW5vKTsKLQot CQkvKiBEaWQgd2UgZmluZCB0aGUgcGFnZSBpbiBtZW1vcnk/ICovCi0JCWlmIChzaGFyZWQt PnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCQlzaGFyZWQtPnBhZ2Vfc3Rh dHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZKQotCQl7Ci0JCQkvKgotCQkJICogSWYg cGFnZSBpcyBzdGlsbCBiZWluZyByZWFkIGluLCB3ZSBtdXN0IHdhaXQgZm9yIEkvTy4gIExp a2V3aXNlCi0JCQkgKiBpZiB0aGUgcGFnZSBpcyBiZWluZyB3cml0dGVuIGFuZCB0aGUgY2Fs bGVyIHNhaWQgdGhhdCdzIG5vdCBPSy4KLQkJCSAqLwotCQkJaWYgKHNoYXJlZC0+cGFnZV9z dGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfUkVBRF9JTl9QUk9HUkVTUyB8fAotCQkJCShz aGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lOX1BST0dS RVNTICYmCi0JCQkJICF3cml0ZV9vaykpCi0JCQl7Ci0JCQkJU2ltcGxlTHJ1V2FpdElPKGN0 bCwgc2xvdG5vKTsKLQkJCQkvKiBOb3cgd2UgbXVzdCByZWNoZWNrIHN0YXRlIGZyb20gdGhl IHRvcCAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyogT3RoZXJ3aXNlLCBpdCdzIHJl YWR5IHRvIHVzZSAqLwotCQkJU2xydVJlY2VudGx5VXNlZChzaGFyZWQsIHNsb3Rubyk7Ci0K LQkJCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiBwYWdlcyBmb3VuZCBpbiB0aGUg U0xSVSAqLwotCQkJcGdzdGF0X2NvdW50X3NscnVfcGFnZV9oaXQoc2hhcmVkLT5zbHJ1X3N0 YXRzX2lkeCk7Ci0KLQkJCXJldHVybiBzbG90bm87Ci0JCX0KLQotCQkvKiBXZSBmb3VuZCBu byBtYXRjaDsgYXNzZXJ0IHdlIHNlbGVjdGVkIGEgZnJlZWFibGUgc2xvdCAqLwotCQlBc3Nl cnQoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSB8fAot CQkJICAgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQg JiYKLQkJCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pKTsKLQotCQkvKiBNYXJrIHRo ZSBzbG90IHJlYWQtYnVzeSAqLwotCQlzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPSBw YWdlbm87Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9SRUFE X0lOX1BST0dSRVNTOwotCQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOwot Ci0JCS8qIEFjcXVpcmUgcGVyLWJ1ZmZlciBsb2NrIChjYW5ub3QgZGVhZGxvY2ssIHNlZSBu b3RlcyBhdCB0b3ApICovCi0JCUxXTG9ja0FjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tz W3Nsb3Rub10ubG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQkvKiBSZWxlYXNlIGNvbnRyb2wg bG9jayB3aGlsZSBkb2luZyBJL08gKi8KLQkJTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRy b2xMb2NrKTsKLQotCQkvKiBEbyB0aGUgcmVhZCAqLwotCQlvayA9IFNscnVQaHlzaWNhbFJl YWRQYWdlKGN0bCwgcGFnZW5vLCBzbG90bm8pOwotCi0JCS8qIFNldCB0aGUgTFNOcyBmb3Ig dGhpcyBuZXdseSByZWFkLWluIHBhZ2UgdG8gemVybyAqLwotCQlTaW1wbGVMcnVaZXJvTFNO cyhjdGwsIHNsb3Rubyk7Ci0KLQkJLyogUmUtYWNxdWlyZSBjb250cm9sIGxvY2sgYW5kIHVw ZGF0ZSBwYWdlIHN0YXRlICovCi0JCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9j aywgTFdfRVhDTFVTSVZFKTsKLQotCQlBc3NlcnQoc2hhcmVkLT5wYWdlX251bWJlcltzbG90 bm9dID09IHBhZ2VubyAmJgotCQkJICAgc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09 IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTICYmCi0JCQkgICAhc2hhcmVkLT5wYWdlX2Rp cnR5W3Nsb3Rub10pOwotCi0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IG9rID8g U0xSVV9QQUdFX1ZBTElEIDogU0xSVV9QQUdFX0VNUFRZOwotCi0JCUxXTG9ja1JlbGVhc2Uo JnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jayk7Ci0KLQkJLyogTm93IGl0J3Mg b2theSB0byBlcmVwb3J0IGlmIHdlIGZhaWxlZCAqLwotCQlpZiAoIW9rKQotCQkJU2xydVJl cG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIHhpZCk7Ci0KLQkJU2xydVJlY2VudGx5VXNlZChz aGFyZWQsIHNsb3Rubyk7Ci0KLQkJLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHBh Z2VzIG5vdCBmb3VuZCBpbiBTTFJVICovCi0JCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfcmVh ZChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCQlyZXR1cm4gc2xvdG5vOwotCX0KLX0K LQotLyoKLSAqIEZpbmQgYSBwYWdlIGluIGEgc2hhcmVkIGJ1ZmZlciwgcmVhZGluZyBpdCBp biBpZiBuZWNlc3NhcnkuCi0gKiBUaGUgcGFnZSBudW1iZXIgbXVzdCBjb3JyZXNwb25kIHRv IGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgcGFnZS4KLSAqIFRoZSBjYWxsZXIgbXVzdCBpbnRl bmQgb25seSByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBwYWdlLgotICoKLSAqIFRoZSBwYXNz ZWQtaW4geGlkIGlzIHVzZWQgb25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQgbWF5IGJl Ci0gKiBJbnZhbGlkVHJhbnNhY3Rpb25JZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNzb2Np YXRlZCB3aXRoIHRoZSBhY3Rpb24uCi0gKgotICogUmV0dXJuIHZhbHVlIGlzIHRoZSBzaGFy ZWQtYnVmZmVyIHNsb3QgbnVtYmVyIG5vdyBob2xkaW5nIHRoZSBwYWdlLgotICogVGhlIGJ1 ZmZlcidzIExSVSBhY2Nlc3MgaW5mbyBpcyB1cGRhdGVkLgotICoKLSAqIENvbnRyb2wgbG9j ayBtdXN0IE5PVCBiZSBoZWxkIGF0IGVudHJ5LCBidXQgd2lsbCBiZSBoZWxkIGF0IGV4aXQu Ci0gKiBJdCBpcyB1bnNwZWNpZmllZCB3aGV0aGVyIHRoZSBsb2NrIHdpbGwgYmUgc2hhcmVk IG9yIGV4Y2x1c2l2ZS4KLSAqLwotaW50Ci1TaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShT bHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgVHJhbnNhY3Rpb25JZCB4aWQpCi17Ci0JU2xydVNo YXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzbG90bm87Ci0KLQkvKiBUcnkg dG8gZmluZCB0aGUgcGFnZSB3aGlsZSBob2xkaW5nIG9ubHkgc2hhcmVkIGxvY2sgKi8KLQlM V0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX1NIQVJFRCk7Ci0KLQkvKiBT ZWUgaWYgcGFnZSBpcyBhbHJlYWR5IGluIGEgYnVmZmVyICovCi0JZm9yIChzbG90bm8gPSAw OyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JewotCQlpZiAoc2hh cmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAmJgotCQkJc2hhcmVkLT5wYWdl X3N0YXR1c1tzbG90bm9dICE9IFNMUlVfUEFHRV9FTVBUWSAmJgotCQkJc2hhcmVkLT5wYWdl X3N0YXR1c1tzbG90bm9dICE9IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTKQotCQl7Ci0J CQkvKiBTZWUgY29tbWVudHMgZm9yIFNscnVSZWNlbnRseVVzZWQgbWFjcm8gKi8KLQkJCVNs cnVSZWNlbnRseVVzZWQoc2hhcmVkLCBzbG90bm8pOwotCi0JCQkvKiB1cGRhdGUgdGhlIHN0 YXRzIGNvdW50ZXIgb2YgcGFnZXMgZm91bmQgaW4gdGhlIFNMUlUgKi8KLQkJCXBnc3RhdF9j b3VudF9zbHJ1X3BhZ2VfaGl0KHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JCQlyZXR1 cm4gc2xvdG5vOwotCQl9Ci0JfQotCi0JLyogTm8gbHVjaywgc28gc3dpdGNoIHRvIG5vcm1h bCBleGNsdXNpdmUgbG9jayBhbmQgZG8gcmVndWxhciByZWFkICovCi0JTFdMb2NrUmVsZWFz ZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJv bExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlyZXR1cm4gU2ltcGxlTHJ1UmVhZFBhZ2UoY3Rs LCBwYWdlbm8sIHRydWUsIHhpZCk7Ci19Ci0KLS8qCi0gKiBXcml0ZSBhIHBhZ2UgZnJvbSBh IHNoYXJlZCBidWZmZXIsIGlmIG5lY2Vzc2FyeS4KLSAqIERvZXMgbm90aGluZyBpZiB0aGUg c3BlY2lmaWVkIHNsb3QgaXMgbm90IGRpcnR5LgotICoKLSAqIE5PVEU6IG9ubHkgb25lIHdy aXRlIGF0dGVtcHQgaXMgbWFkZSBoZXJlLiAgSGVuY2UsIGl0IGlzIHBvc3NpYmxlIHRoYXQK LSAqIHRoZSBwYWdlIGlzIHN0aWxsIGRpcnR5IGF0IGV4aXQgKGlmIHNvbWVvbmUgZWxzZSBy ZS1kaXJ0aWVkIGl0IGR1cmluZwotICogdGhlIHdyaXRlKS4gIEhvd2V2ZXIsIHdlICpkbyog YXR0ZW1wdCBhIGZyZXNoIHdyaXRlIGV2ZW4gaWYgdGhlIHBhZ2UKLSAqIGlzIGFscmVhZHkg YmVpbmcgd3JpdHRlbjsgdGhpcyBpcyBmb3IgY2hlY2twb2ludHMuCi0gKgotICogQ29udHJv bCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0 LgotICovCi1zdGF0aWMgdm9pZAotU2xydUludGVybmFsV3JpdGVQYWdlKFNscnVDdGwgY3Rs LCBpbnQgc2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCi17Ci0JU2xydVNoYXJlZAlzaGFy ZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlwYWdlbm8gPSBzaGFyZWQtPnBhZ2VfbnVtYmVy W3Nsb3Rub107Ci0JYm9vbAkJb2s7Ci0KLQkvKiBJZiBhIHdyaXRlIGlzIGluIHByb2dyZXNz LCB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KLQl3aGlsZSAoc2hhcmVkLT5wYWdlX3N0YXR1 c1tzbG90bm9dID09IFNMUlVfUEFHRV9XUklURV9JTl9QUk9HUkVTUyAmJgotCQkgICBzaGFy ZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vKQotCXsKLQkJU2ltcGxlTHJ1V2Fp dElPKGN0bCwgc2xvdG5vKTsKLQl9Ci0KLQkvKgotCSAqIERvIG5vdGhpbmcgaWYgcGFnZSBp cyBub3QgZGlydHksIG9yIGlmIGJ1ZmZlciBubyBsb25nZXIgY29udGFpbnMgdGhlCi0JICog c2FtZSBwYWdlIHdlIHdlcmUgY2FsbGVkIGZvci4KLQkgKi8KLQlpZiAoIXNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dIHx8Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSAhPSBT TFJVX1BBR0VfVkFMSUQgfHwKLQkJc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dICE9IHBh Z2VubykKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBNYXJrIHRoZSBzbG90IHdyaXRlLWJ1c3ks IGFuZCBjbGVhciB0aGUgZGlydHliaXQuICBBZnRlciB0aGlzIHBvaW50LCBhCi0JICogdHJh bnNhY3Rpb24gc3RhdHVzIHVwZGF0ZSBvbiB0aGlzIHBhZ2Ugd2lsbCBtYXJrIGl0IGRpcnR5 IGFnYWluLgotCSAqLwotCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFH RV9XUklURV9JTl9QUk9HUkVTUzsKLQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZh bHNlOwotCi0JLyogQWNxdWlyZSBwZXItYnVmZmVyIGxvY2sgKGNhbm5vdCBkZWFkbG9jaywg c2VlIG5vdGVzIGF0IHRvcCkgKi8KLQlMV0xvY2tBY3F1aXJlKCZzaGFyZWQtPmJ1ZmZlcl9s b2Nrc1tzbG90bm9dLmxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKiBSZWxlYXNlIGNvbnRy b2wgbG9jayB3aGlsZSBkb2luZyBJL08gKi8KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29u dHJvbExvY2spOwotCi0JLyogRG8gdGhlIHdyaXRlICovCi0Jb2sgPSBTbHJ1UGh5c2ljYWxX cml0ZVBhZ2UoY3RsLCBwYWdlbm8sIHNsb3RubywgZmRhdGEpOwotCi0JLyogSWYgd2UgZmFp bGVkLCBhbmQgd2UncmUgaW4gYSBmbHVzaCwgYmV0dGVyIGNsb3NlIHRoZSBmaWxlcyAqLwot CWlmICghb2sgJiYgZmRhdGEpCi0JewotCQlpbnQJCQlpOwotCi0JCWZvciAoaSA9IDA7IGkg PCBmZGF0YS0+bnVtX2ZpbGVzOyBpKyspCi0JCQlDbG9zZVRyYW5zaWVudEZpbGUoZmRhdGEt PmZkW2ldKTsKLQl9Ci0KLQkvKiBSZS1hY3F1aXJlIGNvbnRyb2wgbG9jayBhbmQgdXBkYXRl IHBhZ2Ugc3RhdGUgKi8KLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExX X0VYQ0xVU0lWRSk7Ci0KLQlBc3NlcnQoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09 IHBhZ2VubyAmJgotCQkgICBzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9Q QUdFX1dSSVRFX0lOX1BST0dSRVNTKTsKLQotCS8qIElmIHdlIGZhaWxlZCB0byB3cml0ZSwg bWFyayB0aGUgcGFnZSBkaXJ0eSBhZ2FpbiAqLwotCWlmICghb2spCi0JCXNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQotCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5v XSA9IFNMUlVfUEFHRV9WQUxJRDsKLQotCUxXTG9ja1JlbGVhc2UoJnNoYXJlZC0+YnVmZmVy X2xvY2tzW3Nsb3Rub10ubG9jayk7Ci0KLQkvKiBOb3cgaXQncyBva2F5IHRvIGVyZXBvcnQg aWYgd2UgZmFpbGVkICovCi0JaWYgKCFvaykKLQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBw YWdlbm8sIEludmFsaWRUcmFuc2FjdGlvbklkKTsKLQotCS8qIElmIHBhcnQgb2YgYSBjaGVj a3BvaW50LCBjb3VudCB0aGlzIGFzIGEgYnVmZmVyIHdyaXR0ZW4uICovCi0JaWYgKGZkYXRh KQotCQlDaGVja3BvaW50U3RhdHMuY2twdF9idWZzX3dyaXR0ZW4rKzsKLX0KLQotLyoKLSAq IFdyYXBwZXIgb2YgU2xydUludGVybmFsV3JpdGVQYWdlLCBmb3IgZXh0ZXJuYWwgY2FsbGVy cy4KLSAqIGZkYXRhIGlzIGFsd2F5cyBwYXNzZWQgYSBOVUxMIGhlcmUuCi0gKi8KLXZvaWQK LVNpbXBsZUxydVdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1 SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sIE5VTEwpOwotfQorc3RhdGljIHZvaWQg U2xydUludGVybmFsRGVsZXRlU2VnbWVudChpbnQgc2xydV9pZCwgaW50IHNlZ25vKTsKIAog LyoKICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBwYWdlIGV4aXN0cyBvbiBkaXNrLgpA QCAtNjIzLDU5MiArNjQsMjQgQEAgU2ltcGxlTHJ1V3JpdGVQYWdlKFNscnVDdGwgY3RsLCBp bnQgc2xvdG5vKQogICogbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBhZ2Uu CiAgKi8KIGJvb2wKLVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3RsIGN0 bCwgaW50IHBhZ2VubykKLXsKLQlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNf UEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVS X1NFR01FTlQ7Ci0JaW50CQkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJMQ0tTWjsKLQljaGFyCQlw YXRoW01BWFBHUEFUSF07Ci0JaW50CQkJZmQ7Ci0JYm9vbAkJcmVzdWx0OwotCW9mZl90CQll bmRwb3M7Ci0KLQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgY2hlY2tlZCBwYWdl cyAqLwotCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfZXhpc3RzKGN0bC0+c2hhcmVkLT5zbHJ1 X3N0YXRzX2lkeCk7Ci0KLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0KLQlm ZCA9IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9fUkRPTkxZIHwgUEdfQklOQVJZKTsKLQlp ZiAoZmQgPCAwKQotCXsKLQkJLyogZXhwZWN0ZWQ6IGZpbGUgZG9lc24ndCBleGlzdCAqLwot CQlpZiAoZXJybm8gPT0gRU5PRU5UKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCS8qIHJlcG9y dCBlcnJvciBub3JtYWxseSAqLwotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9PUEVOX0ZBSUxF RDsKLQkJc2xydV9lcnJubyA9IGVycm5vOwotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBh Z2VubywgMCk7Ci0JfQotCi0JaWYgKChlbmRwb3MgPSBsc2VlayhmZCwgMCwgU0VFS19FTkQp KSA8IDApCi0JewotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9TRUVLX0ZBSUxFRDsKLQkJc2xy dV9lcnJubyA9IGVycm5vOwotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgMCk7 Ci0JfQotCi0JcmVzdWx0ID0gZW5kcG9zID49IChvZmZfdCkgKG9mZnNldCArIEJMQ0tTWik7 Ci0KLQlpZiAoQ2xvc2VUcmFuc2llbnRGaWxlKGZkKSAhPSAwKQotCXsKLQkJc2xydV9lcnJj YXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCXJl dHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKgotICogUGh5c2lj YWwgcmVhZCBvZiBhIChwcmV2aW91c2x5IGV4aXN0aW5nKSBwYWdlIGludG8gYSBidWZmZXIg c2xvdAotICoKLSAqIE9uIGZhaWx1cmUsIHdlIGNhbm5vdCBqdXN0IGVyZXBvcnQoRVJST1Ip IHNpbmNlIGNhbGxlciBoYXMgcHV0IHN0YXRlIGluCi0gKiBzaGFyZWQgbWVtb3J5IHRoYXQg bXVzdCBiZSB1bmRvbmUuICBTbywgd2UgcmV0dXJuIGZhbHNlIGFuZCBzYXZlIGVub3VnaAot ICogaW5mbyBpbiBzdGF0aWMgdmFyaWFibGVzIHRvIGxldCBTbHJ1UmVwb3J0SU9FcnJvciBt YWtlIHRoZSByZXBvcnQuCi0gKgotICogRm9yIG5vdywgYXNzdW1lIGl0J3Mgbm90IHdvcnRo IGtlZXBpbmcgYSBmaWxlIHBvaW50ZXIgb3BlbiBhY3Jvc3MKLSAqIHJlYWQvd3JpdGUgb3Bl cmF0aW9ucy4gIFdlIGNvdWxkIGNhY2hlIG9uZSB2aXJ0dWFsIGZpbGUgcG9pbnRlciAuLi4K LSAqLwotc3RhdGljIGJvb2wKLVNscnVQaHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBp bnQgcGFnZW5vLCBpbnQgc2xvdG5vKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5z aGFyZWQ7Ci0JaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5U OwotCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwot CW9mZl90CQlvZmZzZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBhdGhbTUFYUEdQ QVRIXTsKLQlpbnQJCQlmZDsKLQotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsK LQotCS8qCi0JICogSW4gYSBjcmFzaC1hbmQtcmVzdGFydCBzaXR1YXRpb24sIGl0J3MgcG9z c2libGUgZm9yIHVzIHRvIHJlY2VpdmUKLQkgKiBjb21tYW5kcyB0byBzZXQgdGhlIGNvbW1p dCBzdGF0dXMgb2YgdHJhbnNhY3Rpb25zIHdob3NlIGJpdHMgYXJlIGluCi0JICogYWxyZWFk eS10cnVuY2F0ZWQgc2VnbWVudHMgb2YgdGhlIGNvbW1pdCBsb2cgKHNlZSBub3RlcyBpbgot CSAqIFNscnVQaHlzaWNhbFdyaXRlUGFnZSkuICBIZW5jZSwgaWYgd2UgYXJlIEluUmVjb3Zl cnksIGFsbG93IHRoZSBjYXNlCi0JICogd2hlcmUgdGhlIGZpbGUgZG9lc24ndCBleGlzdCwg YW5kIHJldHVybiB6ZXJvZXMgaW5zdGVhZC4KLQkgKi8KLQlmZCA9IE9wZW5UcmFuc2llbnRG aWxlKHBhdGgsIE9fUkRPTkxZIHwgUEdfQklOQVJZKTsKLQlpZiAoZmQgPCAwKQotCXsKLQkJ aWYgKGVycm5vICE9IEVOT0VOVCB8fCAhSW5SZWNvdmVyeSkKLQkJewotCQkJc2xydV9lcnJj YXVzZSA9IFNMUlVfT1BFTl9GQUlMRUQ7Ci0JCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCQly ZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJmaWxl IFwiJXNcIiBkb2Vzbid0IGV4aXN0LCByZWFkaW5nIGFzIHplcm9lcyIsCi0JCQkJCQlwYXRo KSkpOwotCQlNZW1TZXQoc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dLCAwLCBCTENLU1op OwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQllcnJubyA9IDA7Ci0JcGdzdGF0X3JlcG9ydF93 YWl0X3N0YXJ0KFdBSVRfRVZFTlRfU0xSVV9SRUFEKTsKLQlpZiAocGdfcHJlYWQoZmQsIHNo YXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSwgQkxDS1NaLCBvZmZzZXQpICE9IEJMQ0tTWikK LQl7Ci0JCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJc2xydV9lcnJjYXVzZSA9IFNM UlVfUkVBRF9GQUlMRUQ7Ci0JCXNscnVfZXJybm8gPSBlcnJubzsKLQkJQ2xvc2VUcmFuc2ll bnRGaWxlKGZkKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlwZ3N0YXRfcmVwb3J0X3dhaXRf ZW5kKCk7Ci0KLQlpZiAoQ2xvc2VUcmFuc2llbnRGaWxlKGZkKSAhPSAwKQotCXsKLQkJc2xy dV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87 Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFBo eXNpY2FsIHdyaXRlIG9mIGEgcGFnZSBmcm9tIGEgYnVmZmVyIHNsb3QKLSAqCi0gKiBPbiBm YWlsdXJlLCB3ZSBjYW5ub3QganVzdCBlcmVwb3J0KEVSUk9SKSBzaW5jZSBjYWxsZXIgaGFz IHB1dCBzdGF0ZSBpbgotICogc2hhcmVkIG1lbW9yeSB0aGF0IG11c3QgYmUgdW5kb25lLiAg U28sIHdlIHJldHVybiBmYWxzZSBhbmQgc2F2ZSBlbm91Z2gKLSAqIGluZm8gaW4gc3RhdGlj IHZhcmlhYmxlcyB0byBsZXQgU2xydVJlcG9ydElPRXJyb3IgbWFrZSB0aGUgcmVwb3J0Lgot ICoKLSAqIEZvciBub3csIGFzc3VtZSBpdCdzIG5vdCB3b3J0aCBrZWVwaW5nIGEgZmlsZSBw b2ludGVyIG9wZW4gYWNyb3NzCi0gKiBpbmRlcGVuZGVudCByZWFkL3dyaXRlIG9wZXJhdGlv bnMuICBXZSBkbyBiYXRjaCBvcGVyYXRpb25zIGR1cmluZwotICogU2ltcGxlTHJ1V3JpdGVB bGwsIHRob3VnaC4KLSAqCi0gKiBmZGF0YSBpcyBOVUxMIGZvciBhIHN0YW5kYWxvbmUgd3Jp dGUsIHBvaW50ZXIgdG8gb3Blbi1maWxlIGluZm8gZHVyaW5nCi0gKiBTaW1wbGVMcnVXcml0 ZUFsbC4KLSAqLwotc3RhdGljIGJvb2wKLVNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3Rs IGN0bCwgaW50IHBhZ2VubywgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKQorU2lt cGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKQog ewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7CiAJaW50CQkJc2Vnbm8gPSBw YWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCWludAkJCXJwYWdlbm8gPSBwYWdl bm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCW9mZl90CQlvZmZzZXQgPSBycGFnZW5v ICogQkxDS1NaOwotCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlmZCA9IC0xOwot Ci0JLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIHdyaXR0ZW4gcGFnZXMgKi8KLQlw Z3N0YXRfY291bnRfc2xydV9wYWdlX3dyaXR0ZW4oc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7 Ci0KLQkvKgotCSAqIEhvbm9yIHRoZSB3cml0ZS1XQUwtYmVmb3JlLWRhdGEgcnVsZSwgaWYg YXBwcm9wcmlhdGUsIHNvIHRoYXQgd2UgZG8gbm90Ci0JICogd3JpdGUgb3V0IGRhdGEgYmVm b3JlIGFzc29jaWF0ZWQgV0FMIHJlY29yZHMuICBUaGlzIGlzIHRoZSBzYW1lIGFjdGlvbgot CSAqIHBlcmZvcm1lZCBkdXJpbmcgRmx1c2hCdWZmZXIoKSBpbiB0aGUgbWFpbiBidWZmZXIg bWFuYWdlci4KLQkgKi8KLQlpZiAoc2hhcmVkLT5ncm91cF9sc24gIT0gTlVMTCkKLQl7Ci0J CS8qCi0JCSAqIFdlIG11c3QgZGV0ZXJtaW5lIHRoZSBsYXJnZXN0IGFzeW5jLWNvbW1pdCBM U04gZm9yIHRoZSBwYWdlLiBUaGlzCi0JCSAqIGlzIGEgYml0IHRlZGlvdXMsIGJ1dCBzaW5j ZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBpcyBhIHNsb3cgcGF0aAotCQkgKiBhbnl3YXksIGl0 IHNlZW1zIGJldHRlciB0byBkbyB0aGlzIGhlcmUgdGhhbiB0byBtYWludGFpbiBhIHBlci1w YWdlCi0JCSAqIExTTiB2YXJpYWJsZSAod2hpY2gnZCBuZWVkIGFuIGV4dHJhIGNvbXBhcmlz b24gaW4gdGhlCi0JCSAqIHRyYW5zYWN0aW9uLWNvbW1pdCBwYXRoKS4KLQkJICovCi0JCVhM b2dSZWNQdHIJbWF4X2xzbjsKLQkJaW50CQkJbHNuaW5kZXgsCi0JCQkJCWxzbm9mZjsKLQot CQlsc25pbmRleCA9IHNsb3RubyAqIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZTsKLQkJ bWF4X2xzbiA9IHNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4KytdOwotCQlmb3IgKGxzbm9m ZiA9IDE7IGxzbm9mZiA8IHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZTsgbHNub2ZmKysp Ci0JCXsKLQkJCVhMb2dSZWNQdHIJdGhpc19sc24gPSBzaGFyZWQtPmdyb3VwX2xzbltsc25p bmRleCsrXTsKLQotCQkJaWYgKG1heF9sc24gPCB0aGlzX2xzbikKLQkJCQltYXhfbHNuID0g dGhpc19sc247Ci0JCX0KLQotCQlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQobWF4X2xzbikp Ci0JCXsKLQkJCS8qCi0JCQkgKiBBcyBub3RlZCBhYm92ZSwgZWxvZyhFUlJPUikgaXMgbm90 IGFjY2VwdGFibGUgaGVyZSwgc28gaWYKLQkJCSAqIFhMb2dGbHVzaCB3ZXJlIHRvIGZhaWws IHdlIG11c3QgUEFOSUMuICBUaGlzIGlzbid0IG11Y2ggb2YgYQotCQkJICogcmVzdHJpY3Rp b24gYmVjYXVzZSBYTG9nRmx1c2ggaXMganVzdCBhYm91dCBhbGwgY3JpdGljYWwKLQkJCSAq IHNlY3Rpb24gYW55d2F5LCBidXQgbGV0J3MgbWFrZSBzdXJlLgotCQkJICovCi0JCQlTVEFS VF9DUklUX1NFQ1RJT04oKTsKLQkJCVhMb2dGbHVzaChtYXhfbHNuKTsKLQkJCUVORF9DUklU X1NFQ1RJT04oKTsKLQkJfQotCX0KLQotCS8qCi0JICogRHVyaW5nIGEgV3JpdGVBbGwsIHdl IG1heSBhbHJlYWR5IGhhdmUgdGhlIGRlc2lyZWQgZmlsZSBvcGVuLgotCSAqLwotCWlmIChm ZGF0YSkKLQl7Ci0JCWludAkJCWk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGZkYXRhLT5udW1f ZmlsZXM7IGkrKykKLQkJewotCQkJaWYgKGZkYXRhLT5zZWdub1tpXSA9PSBzZWdubykKLQkJ CXsKLQkJCQlmZCA9IGZkYXRhLT5mZFtpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0K LQotCWlmIChmZCA8IDApCi0JewotCQkvKgotCQkgKiBJZiB0aGUgZmlsZSBkb2Vzbid0IGFs cmVhZHkgZXhpc3QsIHdlIHNob3VsZCBjcmVhdGUgaXQuICBJdCBpcwotCQkgKiBwb3NzaWJs ZSBmb3IgdGhpcyB0byBuZWVkIHRvIGhhcHBlbiB3aGVuIHdyaXRpbmcgYSBwYWdlIHRoYXQn cyBub3QKLQkJICogZmlyc3QgaW4gaXRzIHNlZ21lbnQ7IHdlIGFzc3VtZSB0aGUgT1MgY2Fu IGNvcGUgd2l0aCB0aGF0LiAoTm90ZToKLQkJICogaXQgbWlnaHQgc2VlbSB0aGF0IGl0J2Qg YmUgb2theSB0byBjcmVhdGUgZmlsZXMgb25seSB3aGVuCi0JCSAqIFNpbXBsZUxydVplcm9Q YWdlIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHBhZ2Ugb2YgYSBzZWdtZW50LgotCQkgKiBI b3dldmVyLCBpZiBhZnRlciBhIGNyYXNoIGFuZCByZXN0YXJ0IHRoZSBSRURPIGxvZ2ljIGVs ZWN0cyB0bwotCQkgKiByZXBsYXkgdGhlIGxvZyBmcm9tIGEgY2hlY2twb2ludCBiZWZvcmUg dGhlIGxhdGVzdCBvbmUsIHRoZW4gaXQncwotCQkgKiBwb3NzaWJsZSB0aGF0IHdlIHdpbGwg Z2V0IGNvbW1hbmRzIHRvIHNldCB0cmFuc2FjdGlvbiBzdGF0dXMgb2YKLQkJICogdHJhbnNh Y3Rpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gdHJ1bmNhdGVkIGZyb20gdGhlIGNvbW1p dCBsb2cuCi0JCSAqIEVhc2llc3Qgd2F5IHRvIGRlYWwgd2l0aCB0aGF0IGlzIHRvIGFjY2Vw dCByZWZlcmVuY2VzIHRvCi0JCSAqIG5vbmV4aXN0ZW50IGZpbGVzIGhlcmUgYW5kIGluIFNs cnVQaHlzaWNhbFJlYWRQYWdlLikKLQkJICoKLQkJICogTm90ZTogaXQgaXMgcG9zc2libGUg Zm9yIG1vcmUgdGhhbiBvbmUgYmFja2VuZCB0byBiZSBleGVjdXRpbmcgdGhpcwotCQkgKiBj b2RlIHNpbXVsdGFuZW91c2x5IGZvciBkaWZmZXJlbnQgcGFnZXMgb2YgdGhlIHNhbWUgZmls ZS4gSGVuY2UsCi0JCSAqIGRvbid0IHVzZSBPX0VYQ0wgb3IgT19UUlVOQyBvciBhbnl0aGlu ZyBsaWtlIHRoYXQuCi0JCSAqLwotCQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7 Ci0JCWZkID0gT3BlblRyYW5zaWVudEZpbGUocGF0aCwgT19SRFdSIHwgT19DUkVBVCB8IFBH X0JJTkFSWSk7Ci0JCWlmIChmZCA8IDApCi0JCXsKLQkJCXNscnVfZXJyY2F1c2UgPSBTTFJV X09QRU5fRkFJTEVEOwotCQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJcmV0dXJuIGZhbHNl OwotCQl9Ci0KLQkJaWYgKGZkYXRhKQotCQl7Ci0JCQlpZiAoZmRhdGEtPm51bV9maWxlcyA8 IE1BWF9XUklURUFMTF9CVUZGRVJTKQotCQkJewotCQkJCWZkYXRhLT5mZFtmZGF0YS0+bnVt X2ZpbGVzXSA9IGZkOwotCQkJCWZkYXRhLT5zZWdub1tmZGF0YS0+bnVtX2ZpbGVzXSA9IHNl Z25vOwotCQkJCWZkYXRhLT5udW1fZmlsZXMrKzsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJ CQkvKgotCQkJCSAqIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IHdlIGV4Y2VlZCBNQVhf RkxVU0hfQlVGRkVSUywKLQkJCQkgKiBmYWxsIGJhY2sgdG8gdHJlYXRpbmcgaXQgYXMgYSBz dGFuZGFsb25lIHdyaXRlLgotCQkJCSAqLwotCQkJCWZkYXRhID0gTlVMTDsKLQkJCX0KLQkJ fQotCX0KLQotCWVycm5vID0gMDsKLQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9F VkVOVF9TTFJVX1dSSVRFKTsKLQlpZiAocGdfcHdyaXRlKGZkLCBzaGFyZWQtPnBhZ2VfYnVm ZmVyW3Nsb3Rub10sIEJMQ0tTWiwgb2Zmc2V0KSAhPSBCTENLU1opCi0JewotCQlwZ3N0YXRf cmVwb3J0X3dhaXRfZW5kKCk7Ci0JCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFz c3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KLQkJaWYgKGVycm5vID09IDApCi0J CQllcnJubyA9IEVOT1NQQzsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfV1JJVEVfRkFJTEVE OwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCWlmICghZmRhdGEpCi0JCQlDbG9zZVRyYW5z aWVudEZpbGUoZmQpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXBnc3RhdF9yZXBvcnRfd2Fp dF9lbmQoKTsKLQotCS8qIFF1ZXVlIHVwIGEgc3luYyByZXF1ZXN0IGZvciB0aGUgY2hlY2tw b2ludGVyLiAqLwotCWlmIChjdGwtPnN5bmNfaGFuZGxlciAhPSBTWU5DX0hBTkRMRVJfTk9O RSkKLQl7Ci0JCUZpbGVUYWcJCXRhZzsKLQotCQlJTklUX1NMUlVGSUxFVEFHKHRhZywgY3Rs LT5zeW5jX2hhbmRsZXIsIHNlZ25vKTsKLQkJaWYgKCFSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0 YWcsIFNZTkNfUkVRVUVTVCwgZmFsc2UpKQotCQl7Ci0JCQkvKiBObyBzcGFjZSB0byBlbnF1 ZXVlIHN5bmMgcmVxdWVzdC4gIERvIGl0IHN5bmNocm9ub3VzbHkuICovCi0JCQlwZ3N0YXRf cmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTFJVX1NZTkMpOwotCQkJaWYgKHBnX2Zz eW5jKGZkKSAhPSAwKQotCQkJewotCQkJCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJ CQlzbHJ1X2VycmNhdXNlID0gU0xSVV9GU1lOQ19GQUlMRUQ7Ci0JCQkJc2xydV9lcnJubyA9 IGVycm5vOwotCQkJCUNsb3NlVHJhbnNpZW50RmlsZShmZCk7Ci0JCQkJcmV0dXJuIGZhbHNl OwotCQkJfQotCQkJcGdzdGF0X3JlcG9ydF93YWl0X2VuZCgpOwotCQl9Ci0JfQotCi0JLyog Q2xvc2UgZmlsZSwgdW5sZXNzIHBhcnQgb2YgZmx1c2ggcmVxdWVzdC4gKi8KLQlpZiAoIWZk YXRhKQotCXsKLQkJaWYgKENsb3NlVHJhbnNpZW50RmlsZShmZCkgIT0gMCkKLQkJewotCQkJ c2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwotCQkJc2xydV9lcnJubyA9IGVy cm5vOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0K LS8qCi0gKiBJc3N1ZSB0aGUgZXJyb3IgbWVzc2FnZSBhZnRlciBmYWlsdXJlIG9mIFNscnVQ aHlzaWNhbFJlYWRQYWdlIG9yCi0gKiBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UuICBDYWxsIHRo aXMgYWZ0ZXIgY2xlYW5pbmcgdXAgc2hhcmVkLW1lbW9yeSBzdGF0ZS4KLSAqLwotc3RhdGlj IHZvaWQKLVNscnVSZXBvcnRJT0Vycm9yKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBUcmFu c2FjdGlvbklkIHhpZCkKLXsKLQlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNf UEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVS X1NFR01FTlQ7Ci0JaW50CQkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJMQ0tTWjsKLQljaGFyCQlw YXRoW01BWFBHUEFUSF07Ci0KLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0J ZXJybm8gPSBzbHJ1X2Vycm5vOwotCXN3aXRjaCAoc2xydV9lcnJjYXVzZSkKLQl7Ci0JCWNh c2UgU0xSVV9PUEVOX0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0 YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxk IG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlbS4iLCBwYXRoKSkpOwotCQkJYnJlYWs7Ci0JCWNh c2UgU0xSVV9TRUVLX0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0 YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxk IG5vdCBzZWVrIGluIGZpbGUgXCIlc1wiIHRvIG9mZnNldCAlZDogJW0uIiwKLQkJCQkJCQkg ICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTTFJVX1JFQURfRkFJTEVE OgotCQkJaWYgKGVycm5vKQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3Rh dHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxk IG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbS4iLAotCQkJCQkJ CQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQllbHNlCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJ CQkJCShlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1 IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBc IiVzXCIgYXQgb2Zmc2V0ICVkOiByZWFkIHRvbyBmZXcgYnl0ZXMuIiwgcGF0aCwgb2Zmc2V0 KSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9XUklURV9GQUlMRUQ6Ci0JCQlpZiAoZXJy bm8pCi0JCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vz cygpLAotCQkJCQkJIGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNh Y3Rpb24gJXUiLCB4aWQpLAotCQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IHdyaXRlIHRv IGZpbGUgXCIlc1wiIGF0IG9mZnNldCAlZDogJW0uIiwKLQkJCQkJCQkJICAgcGF0aCwgb2Zm c2V0KSkpOwotCQkJZWxzZQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJj b3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJ CQkgZXJyZGV0YWlsKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0 ICVkOiB3cm90ZSB0b28gZmV3IGJ5dGVzLiIsCi0JCQkJCQkJCSAgIHBhdGgsIG9mZnNldCkp KTsKLQkJCWJyZWFrOwotCQljYXNlIFNMUlVfRlNZTkNfRkFJTEVEOgotCQkJZXJlcG9ydChk YXRhX3N5bmNfZWxldmVsKEVSUk9SKSwKLQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0 aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IGZzeW5jIGZpbGUg XCIlc1wiOiAlbS4iLAotCQkJCQkJCSAgIHBhdGgpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBT TFJVX0NMT1NFX0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zv cl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1 cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5v dCBjbG9zZSBmaWxlIFwiJXNcIjogJW0uIiwKLQkJCQkJCQkgICBwYXRoKSkpOwotCQkJYnJl YWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBjYW4ndCBnZXQgaGVyZSwgd2UgdHJ1c3QgKi8KLQkJ CWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgU2ltcGxlTHJ1IGVycm9yIGNhdXNlOiAlZCIs Ci0JCQkJIChpbnQpIHNscnVfZXJyY2F1c2UpOwotCQkJYnJlYWs7Ci0JfQotfQotCi0vKgot ICogU2VsZWN0IHRoZSBzbG90IHRvIHJlLXVzZSB3aGVuIHdlIG5lZWQgYSBmcmVlIHNsb3Qu Ci0gKgotICogVGhlIHRhcmdldCBwYWdlIG51bWJlciBpcyBwYXNzZWQgYmVjYXVzZSB3ZSBu ZWVkIHRvIGNvbnNpZGVyIHRoZQotICogcG9zc2liaWxpdHkgdGhhdCBzb21lIG90aGVyIHBy b2Nlc3MgcmVhZHMgaW4gdGhlIHRhcmdldCBwYWdlIHdoaWxlCi0gKiB3ZSBhcmUgZG9pbmcg SS9PIHRvIGZyZWUgYSBzbG90LiAgSGVuY2UsIGNoZWNrIG9yIHJlY2hlY2sgdG8gc2VlIGlm Ci0gKiBhbnkgc2xvdCBhbHJlYWR5IGhvbGRzIHRoZSB0YXJnZXQgcGFnZSwgYW5kIHJldHVy biB0aGF0IHNsb3QgaWYgc28uCi0gKiBUaHVzLCB0aGUgcmV0dXJuZWQgc2xvdCBpcyAqZWl0 aGVyKiBhIHNsb3QgYWxyZWFkeSBob2xkaW5nIHRoZSBwYWdlbm8KLSAqIChjb3VsZCBiZSBh bnkgc3RhdGUgZXhjZXB0IEVNUFRZKSwgKm9yKiBhIGZyZWVhYmxlIHNsb3QgKHN0YXRlIEVN UFRZCi0gKiBvciBDTEVBTikuCi0gKgotICogQ29udHJvbCBsb2NrIG11c3QgYmUgaGVsZCBh dCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICovCi1zdGF0aWMgaW50Ci1T bHJ1U2VsZWN0TFJVUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubykKLXsKLQlTbHJ1U2hh cmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JLyogT3V0ZXIgbG9vcCBoYW5kbGVzIHJl c3RhcnQgYWZ0ZXIgSS9PICovCi0JZm9yICg7OykKLQl7Ci0JCWludAkJCXNsb3RubzsKLQkJ aW50CQkJY3VyX2NvdW50OwotCQlpbnQJCQliZXN0dmFsaWRzbG90ID0gMDsJLyoga2VlcCBj b21waWxlciBxdWlldCAqLwotCQlpbnQJCQliZXN0X3ZhbGlkX2RlbHRhID0gLTE7Ci0JCWlu dAkJCWJlc3RfdmFsaWRfcGFnZV9udW1iZXIgPSAwOyAvKiBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCi0JCWludAkJCWJlc3RpbnZhbGlkc2xvdCA9IDA7CS8qIGtlZXAgY29tcGlsZXIgcXVp ZXQgKi8KLQkJaW50CQkJYmVzdF9pbnZhbGlkX2RlbHRhID0gLTE7Ci0JCWludAkJCWJlc3Rf aW52YWxpZF9wYWdlX251bWJlciA9IDA7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLQot CQkvKiBTZWUgaWYgcGFnZSBhbHJlYWR5IGhhcyBhIGJ1ZmZlciBhc3NpZ25lZCAqLwotCQlm b3IgKHNsb3RubyA9IDA7IHNsb3RubyA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykK LQkJewotCQkJaWYgKHNoYXJlZC0+cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8gJiYK LQkJCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZKQot CQkJCXJldHVybiBzbG90bm87Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB3ZSBmaW5kIGFueSBF TVBUWSBzbG90LCBqdXN0IHNlbGVjdCB0aGF0IG9uZS4gRWxzZSBjaG9vc2UgYQotCQkgKiB2 aWN0aW0gcGFnZSB0byByZXBsYWNlLiAgV2Ugbm9ybWFsbHkgdGFrZSB0aGUgbGVhc3QgcmVj ZW50bHkgdXNlZAotCQkgKiB2YWxpZCBwYWdlLCBidXQgd2Ugd2lsbCBuZXZlciB0YWtlIHRo ZSBzbG90IGNvbnRhaW5pbmcKLQkJICogbGF0ZXN0X3BhZ2VfbnVtYmVyLCBldmVuIGlmIGl0 IGFwcGVhcnMgbGVhc3QgcmVjZW50bHkgdXNlZC4gIFdlCi0JCSAqIHdpbGwgc2VsZWN0IGEg c2xvdCB0aGF0IGlzIGFscmVhZHkgSS9PIGJ1c3kgb25seSBpZiB0aGVyZSBpcyBubwotCQkg KiBvdGhlciBjaG9pY2U6IGEgcmVhZC1idXN5IHNsb3Qgd2lsbCBub3QgYmUgbGVhc3QgcmVj ZW50bHkgdXNlZCBvbmNlCi0JCSAqIHRoZSByZWFkIGZpbmlzaGVzLCBhbmQgd2FpdGluZyBm b3IgYW4gSS9PIG9uIGEgd3JpdGUtYnVzeSBzbG90IGlzCi0JCSAqIGluZmVyaW9yIHRvIGp1 c3QgcGlja2luZyBzb21lIG90aGVyIHNsb3QuICBUZXN0aW5nIHNob3dzIHRoZSBzbG90Ci0J CSAqIHdlIHBpY2sgaW5zdGVhZCB3aWxsIG9mdGVuIGJlIGNsZWFuLCBhbGxvd2luZyB1cyB0 byBiZWdpbiBhIHJlYWQgYXQKLQkJICogb25jZS4KLQkJICoKLQkJICogTm9ybWFsbHkgdGhl IHBhZ2VfbHJ1X2NvdW50IHZhbHVlcyB3aWxsIGFsbCBiZSBkaWZmZXJlbnQgYW5kIHNvCi0J CSAqIHRoZXJlIHdpbGwgYmUgYSB3ZWxsLWRlZmluZWQgTFJVIHBhZ2UuICBCdXQgc2luY2Ug d2UgYWxsb3cKLQkJICogY29uY3VycmVudCBleGVjdXRpb24gb2YgU2xydVJlY2VudGx5VXNl ZCgpIHdpdGhpbgotCQkgKiBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSgpLCBpdCBpcyBw b3NzaWJsZSB0aGF0IG11bHRpcGxlIHBhZ2VzCi0JCSAqIGFjcXVpcmUgdGhlIHNhbWUgbHJ1 X2NvdW50IHZhbHVlcy4gIEluIHRoYXQgY2FzZSB3ZSBicmVhayB0aWVzIGJ5Ci0JCSAqIGNo b29zaW5nIHRoZSBmdXJ0aGVzdC1iYWNrIHBhZ2UuCi0JCSAqCi0JCSAqIE5vdGljZSB0aGF0 IHRoaXMgbmV4dCBsaW5lIGZvcmNpYmx5IGFkdmFuY2VzIGN1cl9scnVfY291bnQgdG8gYQot CQkgKiB2YWx1ZSB0aGF0IGlzIGNlcnRhaW5seSBiZXlvbmQgYW55IHZhbHVlIHRoYXQgd2ls bCBiZSBpbiB0aGUKLQkJICogcGFnZV9scnVfY291bnQgYXJyYXkgYWZ0ZXIgdGhlIGxvb3Ag ZmluaXNoZXMuICBUaGlzIGVuc3VyZXMgdGhhdAotCQkgKiB0aGUgbmV4dCBleGVjdXRpb24g b2YgU2xydVJlY2VudGx5VXNlZCB3aWxsIG1hcmsgdGhlIHBhZ2UgbmV3bHkKLQkJICogdXNl ZCwgZXZlbiBpZiBpdCdzIGZvciBhIHBhZ2UgdGhhdCBoYXMgdGhlIGN1cnJlbnQgY291bnRl ciB2YWx1ZS4KLQkJICogVGhhdCBnZXRzIHVzIGJhY2sgb24gdGhlIHBhdGggdG8gaGF2aW5n IGdvb2QgZGF0YSB3aGVuIHRoZXJlIGFyZQotCQkgKiBtdWx0aXBsZSBwYWdlcyB3aXRoIHRo ZSBzYW1lIGxydV9jb3VudC4KLQkJICovCi0JCWN1cl9jb3VudCA9IChzaGFyZWQtPmN1cl9s cnVfY291bnQpKys7Ci0JCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hhcmVkLT5udW1f c2xvdHM7IHNsb3RubysrKQotCQl7Ci0JCQlpbnQJCQl0aGlzX2RlbHRhOwotCQkJaW50CQkJ dGhpc19wYWdlX251bWJlcjsKLQotCQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5v XSA9PSBTTFJVX1BBR0VfRU1QVFkpCi0JCQkJcmV0dXJuIHNsb3RubzsKLQkJCXRoaXNfZGVs dGEgPSBjdXJfY291bnQgLSBzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50W3Nsb3Rub107Ci0JCQlp ZiAodGhpc19kZWx0YSA8IDApCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBDbGVhbiB1cCBpbiBj YXNlIHNoYXJlZCB1cGRhdGVzIGhhdmUgY2F1c2VkIGN1cl9jb3VudAotCQkJCSAqIGluY3Jl bWVudHMgdG8gZ2V0ICJsb3N0Ii4gIFdlIGJhY2sgb2ZmIHRoZSBwYWdlIGNvdW50cywKLQkJ CQkgKiByYXRoZXIgdGhhbiB0cnlpbmcgdG8gaW5jcmVhc2UgY3VyX2NvdW50LCB0byBhdm9p ZCBhbnkKLQkJCQkgKiBxdWVzdGlvbiBvZiBpbmZpbml0ZSBsb29wcyBvciBmYWlsdXJlIGlu IHRoZSBwcmVzZW5jZSBvZgotCQkJCSAqIHdyYXBwZWQtYXJvdW5kIGNvdW50cy4KLQkJCQkg Ki8KLQkJCQlzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50W3Nsb3Rub10gPSBjdXJfY291bnQ7Ci0J CQkJdGhpc19kZWx0YSA9IDA7Ci0JCQl9Ci0JCQl0aGlzX3BhZ2VfbnVtYmVyID0gc2hhcmVk LT5wYWdlX251bWJlcltzbG90bm9dOwotCQkJaWYgKHRoaXNfcGFnZV9udW1iZXIgPT0gc2hh cmVkLT5sYXRlc3RfcGFnZV9udW1iZXIpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoc2hhcmVk LT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCkKLQkJCXsKLQkJCQlp ZiAodGhpc19kZWx0YSA+IGJlc3RfdmFsaWRfZGVsdGEgfHwKLQkJCQkJKHRoaXNfZGVsdGEg PT0gYmVzdF92YWxpZF9kZWx0YSAmJgotCQkJCQkgY3RsLT5QYWdlUHJlY2VkZXModGhpc19w YWdlX251bWJlciwKLQkJCQkJCQkJCSAgIGJlc3RfdmFsaWRfcGFnZV9udW1iZXIpKSkKLQkJ CQl7Ci0JCQkJCWJlc3R2YWxpZHNsb3QgPSBzbG90bm87Ci0JCQkJCWJlc3RfdmFsaWRfZGVs dGEgPSB0aGlzX2RlbHRhOwotCQkJCQliZXN0X3ZhbGlkX3BhZ2VfbnVtYmVyID0gdGhpc19w YWdlX251bWJlcjsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJaWYgKHRoaXNf ZGVsdGEgPiBiZXN0X2ludmFsaWRfZGVsdGEgfHwKLQkJCQkJKHRoaXNfZGVsdGEgPT0gYmVz dF9pbnZhbGlkX2RlbHRhICYmCi0JCQkJCSBjdGwtPlBhZ2VQcmVjZWRlcyh0aGlzX3BhZ2Vf bnVtYmVyLAotCQkJCQkJCQkJICAgYmVzdF9pbnZhbGlkX3BhZ2VfbnVtYmVyKSkpCi0JCQkJ ewotCQkJCQliZXN0aW52YWxpZHNsb3QgPSBzbG90bm87Ci0JCQkJCWJlc3RfaW52YWxpZF9k ZWx0YSA9IHRoaXNfZGVsdGE7Ci0JCQkJCWJlc3RfaW52YWxpZF9wYWdlX251bWJlciA9IHRo aXNfcGFnZV9udW1iZXI7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLyoKLQkJICogSWYgYWxs IHBhZ2VzIChleGNlcHQgcG9zc2libHkgdGhlIGxhdGVzdCBvbmUpIGFyZSBJL08gYnVzeSwg d2UnbGwKLQkJICogaGF2ZSB0byB3YWl0IGZvciBhbiBJL08gdG8gY29tcGxldGUgYW5kIHRo ZW4gcmV0cnkuICBJbiB0aGF0Ci0JCSAqIHVuaGFwcHkgY2FzZSwgd2UgY2hvb3NlIHRvIHdh aXQgZm9yIHRoZSBJL08gb24gdGhlIGxlYXN0IHJlY2VudGx5Ci0JCSAqIHVzZWQgc2xvdCwg b24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCB3YXMgbGlrZWx5IGluaXRpYXRlZCBmaXJzdCBv ZgotCQkgKiBhbGwgdGhlIEkvT3MgaW4gcHJvZ3Jlc3MgYW5kIG1heSB0aGVyZWZvcmUgZmlu aXNoIGZpcnN0LgotCQkgKi8KLQkJaWYgKGJlc3RfdmFsaWRfZGVsdGEgPCAwKQotCQl7Ci0J CQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBiZXN0aW52YWxpZHNsb3QpOwotCQkJY29udGludWU7 Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUgc2VsZWN0ZWQgcGFnZSBpcyBjbGVhbiwgd2Un cmUgc2V0LgotCQkgKi8KLQkJaWYgKCFzaGFyZWQtPnBhZ2VfZGlydHlbYmVzdHZhbGlkc2xv dF0pCi0JCQlyZXR1cm4gYmVzdHZhbGlkc2xvdDsKLQotCQkvKgotCQkgKiBXcml0ZSB0aGUg cGFnZS4KLQkJICovCi0JCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGwsIGJlc3R2YWxpZHNs b3QsIE5VTEwpOwotCi0JCS8qCi0JCSAqIE5vdyBsb29wIGJhY2sgYW5kIHRyeSBhZ2Fpbi4g IFRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IG9mIGRlYWxpbmcKLQkJICogd2l0aCBjb3JuZXIg Y2FzZXMgc3VjaCBhcyB0aGUgdmljdGltIHBhZ2UgYmVpbmcgcmUtZGlydGllZCB3aGlsZSB3 ZQotCQkgKiB3cm90ZSBpdC4KLQkJICovCi0JfQotfQotCi0vKgotICogV3JpdGUgZGlydHkg cGFnZXMgdG8gZGlzayBkdXJpbmcgY2hlY2twb2ludCBvciBkYXRhYmFzZSBzaHV0ZG93bi4g IEZsdXNoaW5nCi0gKiBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIFByb2Nl c3NTeW5jUmVxdWVzdHMoKSwgdGhvdWdoIHdlIGRvIGZzeW5jCi0gKiB0aGUgY29udGFpbmlu ZyBkaXJlY3RvcnkgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCBuZXdseSBjcmVhdGVkIGRpcmVj dG9yeQotICogZW50cmllcyBhcmUgb24gZGlzay4KLSAqLwotdm9pZAotU2ltcGxlTHJ1V3Jp dGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKQotewotCVNscnVTaGFy ZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JU2xydVdyaXRlQWxsRGF0YSBmZGF0YTsKLQlp bnQJCQlzbG90bm87Ci0JaW50CQkJcGFnZW5vID0gMDsKLQlpbnQJCQlpOwotCWJvb2wJCW9r OwotCi0JLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIGZsdXNoZXMgKi8KLQlwZ3N0 YXRfY291bnRfc2xydV9mbHVzaChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCS8qCi0J ICogRmluZCBhbmQgd3JpdGUgZGlydHkgcGFnZXMKLQkgKi8KLQlmZGF0YS5udW1fZmlsZXMg PSAwOwotCi0JTFdMb2NrQWNxdWlyZShzaGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJ VkUpOwotCi0JZm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsg c2xvdG5vKyspCi0JewotCQlTbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sICZm ZGF0YSk7Ci0KLQkJLyoKLQkJICogSW4gc29tZSBwbGFjZXMgKGUuZy4gY2hlY2twb2ludHMp LCB3ZSBjYW5ub3QgYXNzZXJ0IHRoYXQgdGhlIHNsb3QKLQkJICogaXMgY2xlYW4gbm93LCBz aW5jZSBhbm90aGVyIHByb2Nlc3MgbWlnaHQgaGF2ZSByZS1kaXJ0aWVkIGl0Ci0JCSAqIGFs cmVhZHkuICBUaGF0J3Mgb2theS4KLQkJICovCi0JCUFzc2VydChhbGxvd19yZWRpcnRpZWQg fHwKLQkJCSAgIHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1Q VFkgfHwKLQkJCSAgIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdF X1ZBTElEICYmCi0JCQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKSk7Ci0JfQorCW9m Zl90CQlzaXplOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2Nh dG9yKHNscnVfaWQsIHNlZ25vKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVu KHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOwogCi0JTFdMb2Nr UmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKKwkvKiB1cGRhdGUgdGhlIHN0YXRzIGNv dW50ZXIgb2YgY2hlY2tlZCBwYWdlcyAqLworCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfZXhp c3RzKHNscnVfaWQpOwogCi0JLyoKLQkgKiBOb3cgY2xvc2UgYW55IGZpbGVzIHRoYXQgd2Vy ZSBvcGVuCi0JICovCi0Jb2sgPSB0cnVlOwotCWZvciAoaSA9IDA7IGkgPCBmZGF0YS5udW1f ZmlsZXM7IGkrKykKLQl7Ci0JCWlmIChDbG9zZVRyYW5zaWVudEZpbGUoZmRhdGEuZmRbaV0p ICE9IDApCi0JCXsKLQkJCXNscnVfZXJyY2F1c2UgPSBTTFJVX0NMT1NFX0ZBSUxFRDsKLQkJ CXNscnVfZXJybm8gPSBlcnJubzsKLQkJCXBhZ2VubyA9IGZkYXRhLnNlZ25vW2ldICogU0xS VV9QQUdFU19QRVJfU0VHTUVOVDsKLQkJCW9rID0gZmFsc2U7Ci0JCX0KLQl9Ci0JaWYgKCFv aykKLQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIEludmFsaWRUcmFuc2FjdGlv bklkKTsKKwlpZiAoc21ncmV4aXN0cyhzZmlsZSkpCisJCXNpemUgPSBzbWdybmJsb2Nrcyhz ZmlsZSk7CisJZWxzZQorCQlzaXplID0gMDsKIAotCS8qIEVuc3VyZSB0aGF0IGRpcmVjdG9y eSBlbnRyaWVzIGZvciBuZXcgZmlsZXMgYXJlIG9uIGRpc2suICovCi0JaWYgKGN0bC0+c3lu Y19oYW5kbGVyICE9IFNZTkNfSEFORExFUl9OT05FKQotCQlmc3luY19mbmFtZShjdGwtPkRp ciwgdHJ1ZSk7CisJcmV0dXJuIHNpemUgPj0gb2Zmc2V0ICsgQkxDS1NaOwogfQogCiAvKgpA QCAtMTIyMyw3NSArOTYsMTQgQEAgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJv b2wgYWxsb3dfcmVkaXJ0aWVkKQogICogYWZ0ZXIgaXQgaGFzIGFjY3J1ZWQgZnJlc2hseS13 cml0dGVuIGRhdGEuCiAgKi8KIHZvaWQKLVNpbXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3Rs LCBpbnQgY3V0b2ZmUGFnZSkKK1NpbXBsZUxydVRydW5jYXRlKGludCBzbHJ1X2lkLCBTbHJ1 UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLCBpbnQgY3V0b2ZmUGFnZSkKIHsK LQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXNsb3RubzsKLQog CS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiB0cnVuY2F0ZXMgKi8KLQlwZ3N0YXRf Y291bnRfc2xydV90cnVuY2F0ZShzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCS8qCi0J ICogU2NhbiBzaGFyZWQgbWVtb3J5IGFuZCByZW1vdmUgYW55IHBhZ2VzIHByZWNlZGluZyB0 aGUgY3V0b2ZmIHBhZ2UsIHRvCi0JICogZW5zdXJlIHdlIHdvbid0IHJld3JpdGUgdGhlbSBs YXRlci4gIChTaW5jZSB0aGlzIGlzIG5vcm1hbGx5IGNhbGxlZCBpbgotCSAqIG9yIGp1c3Qg YWZ0ZXIgYSBjaGVja3BvaW50LCBhbnkgZGlydHkgcGFnZXMgc2hvdWxkIGhhdmUgYmVlbiBm bHVzaGVkCi0JICogYWxyZWFkeSAuLi4gd2UncmUganVzdCBiZWluZyBleHRyYSBjYXJlZnVs IGhlcmUuKQotCSAqLwotCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdf RVhDTFVTSVZFKTsKLQotcmVzdGFydDo7Ci0KLQkvKgotCSAqIFdoaWxlIHdlIGFyZSBob2xk aW5nIHRoZSBsb2NrLCBtYWtlIGFuIGltcG9ydGFudCBzYWZldHkgY2hlY2s6IHRoZQotCSAq IGN1cnJlbnQgZW5kcG9pbnQgcGFnZSBtdXN0IG5vdCBiZSBlbGlnaWJsZSBmb3IgcmVtb3Zh bC4KLQkgKi8KLQlpZiAoY3RsLT5QYWdlUHJlY2VkZXMoc2hhcmVkLT5sYXRlc3RfcGFnZV9u dW1iZXIsIGN1dG9mZlBhZ2UpKQotCXsKLQkJTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRy b2xMb2NrKTsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygiY291bGQgbm90IHRydW5j YXRlIGRpcmVjdG9yeSBcIiVzXCI6IGFwcGFyZW50IHdyYXBhcm91bmQiLAotCQkJCQkJY3Rs LT5EaXIpKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKHNsb3RubyA9IDA7IHNsb3RubyA8 IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQl7Ci0JCWlmIChzaGFyZWQtPnBhZ2Vf c3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZKQotCQkJY29udGludWU7Ci0JCWlm ICghY3RsLT5QYWdlUHJlY2VkZXMoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dLCBjdXRv ZmZQYWdlKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIElmIHBhZ2UgaXMgY2xlYW4s IGp1c3QgY2hhbmdlIHN0YXRlIHRvIEVNUFRZIChleHBlY3RlZCBjYXNlKS4KLQkJICovCi0J CWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEICYm Ci0JCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pCi0JCXsKLQkJCXNoYXJlZC0+cGFn ZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9FTVBUWTsKLQkJCWNvbnRpbnVlOwotCQl9 Ci0KLQkJLyoKLQkJICogSG1tLCB3ZSBoYXZlIChvciBtYXkgaGF2ZSkgSS9PIG9wZXJhdGlv bnMgYWN0aW5nIG9uIHRoZSBwYWdlLCBzbwotCQkgKiB3ZSd2ZSBnb3QgdG8gd2FpdCBmb3Ig dGhlbSB0byBmaW5pc2ggYW5kIHRoZW4gc3RhcnQgYWdhaW4uIFRoaXMgaXMKLQkJICogdGhl IHNhbWUgbG9naWMgYXMgaW4gU2xydVNlbGVjdExSVVBhZ2UuICAoWFhYIGlmIHBhZ2UgaXMg ZGlydHksCi0JCSAqIHdvdWxkbid0IGl0IGJlIE9LIHRvIGp1c3QgZGlzY2FyZCBpdCB3aXRo b3V0IHdyaXRpbmcgaXQ/Ci0JCSAqIFNscnVNYXlEZWxldGVTZWdtZW50KCkgdXNlcyBhIHN0 cmljdGVyIHF1YWxpZmljYXRpb24sIHNvIHdlIG1pZ2h0Ci0JCSAqIG5vdCBkZWxldGUgdGhp cyBwYWdlIGluIHRoZSBlbmQ7IGV2ZW4gaWYgd2UgZG9uJ3QgZGVsZXRlIGl0LCB3ZQotCQkg KiB3b24ndCBoYXZlIGNhdXNlIHRvIHJlYWQgaXRzIGRhdGEgYWdhaW4uICBGb3Igbm93LCBr ZWVwIHRoZSBsb2dpYwotCQkgKiB0aGUgc2FtZSBhcyBpdCB3YXMuKQotCQkgKi8KLQkJaWYg KHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQpCi0JCQlT bHJ1SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sIE5VTEwpOwotCQllbHNlCi0JCQlT aW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCi0J TFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKKwlwZ3N0YXRfY291bnRfc2xy dV90cnVuY2F0ZShzbHJ1X2lkKTsKIAogCS8qIE5vdyB3ZSBjYW4gcmVtb3ZlIHRoZSBvbGQg c2VnbWVudChzKSAqLwotCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShjdGwsIFNscnVTY2Fu RGlyQ2JEZWxldGVDdXRvZmYsICZjdXRvZmZQYWdlKTsKKwkodm9pZCkgU2xydVNjYW5EaXJl Y3Rvcnkoc2xydV9pZCwgUGFnZVByZWNlZGVzLCBTbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2Zm LAorCQkJCQkJCSAmY3V0b2ZmUGFnZSk7CiB9CiAKIC8qCkBAIC0xMzAxLDc3ICsxMTMsMjIg QEAgcmVzdGFydDo7CiAgKiB0aGV5IGVpdGhlciBjYW4ndCB5ZXQgY29udGFpbiBhbnl0aGlu Zywgb3IgaGF2ZSBhbHJlYWR5IGJlZW4gY2xlYW5lZCBvdXQuCiAgKi8KIHN0YXRpYyB2b2lk Ci1TbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vnbm8pCitT bHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGludCBzbHJ1X2lkLCBpbnQgc2Vnbm8pCiB7Ci0J Y2hhcgkJcGF0aFtNQVhQR1BBVEhdOwotCi0JLyogRm9yZ2V0IGFueSBmc3luYyByZXF1ZXN0 cyBxdWV1ZWQgZm9yIHRoaXMgc2VnbWVudC4gKi8KLQlpZiAoY3RsLT5zeW5jX2hhbmRsZXIg IT0gU1lOQ19IQU5ETEVSX05PTkUpCi0JewotCQlGaWxlVGFnCQl0YWc7Ci0KLQkJSU5JVF9T TFJVRklMRVRBRyh0YWcsIGN0bC0+c3luY19oYW5kbGVyLCBzZWdubyk7Ci0JCVJlZ2lzdGVy U3luY1JlcXVlc3QoJnRhZywgU1lOQ19GT1JHRVRfUkVRVUVTVCwgdHJ1ZSk7Ci0JfQorCVJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHNscnVfaWQsIHNl Z25vKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZh bGlkQmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOwogCiAJLyogVW5saW5rIHRoZSBmaWxlLiAq LwotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQllcmVwb3J0KERFQlVHMiwg KGVycm1zZ19pbnRlcm5hbCgicmVtb3ZpbmcgZmlsZSBcIiVzXCIiLCBwYXRoKSkpOwotCXVu bGluayhwYXRoKTsKKwlzbWdydW5saW5rKHNmaWxlLCBmYWxzZSk7CiB9CiAKIC8qCiAgKiBE ZWxldGUgYW4gaW5kaXZpZHVhbCBTTFJVIHNlZ21lbnQsIGlkZW50aWZpZWQgYnkgdGhlIHNl Z21lbnQgbnVtYmVyLgogICovCiB2b2lkCi1TbHJ1RGVsZXRlU2VnbWVudChTbHJ1Q3RsIGN0 bCwgaW50IHNlZ25vKQorU2xydURlbGV0ZVNlZ21lbnQoaW50IHNscnVfaWQsIGludCBzZWdu bykKIHsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCWludAkJCXNsb3Ru bzsKLQlib29sCQlkaWRfd3JpdGU7Ci0KLQkvKiBDbGVhbiBvdXQgYW55IHBvc3NpYmx5IGV4 aXN0aW5nIHJlZmVyZW5jZXMgdG8gdGhlIHNlZ21lbnQuICovCi0JTFdMb2NrQWNxdWlyZShz aGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotcmVzdGFydDoKLQlkaWRfd3Jp dGUgPSBmYWxzZTsKLQlmb3IgKHNsb3RubyA9IDA7IHNsb3RubyA8IHNoYXJlZC0+bnVtX3Ns b3RzOyBzbG90bm8rKykKLQl7Ci0JCWludAkJCXBhZ2VzZWdubyA9IHNoYXJlZC0+cGFnZV9u dW1iZXJbc2xvdG5vXSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0KLQkJaWYgKHNoYXJl ZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1QVFkpCi0JCQljb250aW51 ZTsKLQotCQkvKiBub3QgdGhlIHNlZ21lbnQgd2UncmUgbG9va2luZyBmb3IgKi8KLQkJaWYg KHBhZ2VzZWdubyAhPSBzZWdubykKLQkJCWNvbnRpbnVlOwotCi0JCS8qIElmIHBhZ2UgaXMg Y2xlYW4sIGp1c3QgY2hhbmdlIHN0YXRlIHRvIEVNUFRZIChleHBlY3RlZCBjYXNlKS4gKi8K LQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQg JiYKLQkJCSFzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSkKLQkJewotCQkJc2hhcmVkLT5w YWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJY29udGludWU7Ci0J CX0KLQotCQkvKiBTYW1lIGxvZ2ljIGFzIFNpbXBsZUxydVRydW5jYXRlKCkgKi8KLQkJaWYg KHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfVkFMSUQpCi0JCQlT bHJ1SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sIE5VTEwpOwotCQllbHNlCi0JCQlT aW1wbGVMcnVXYWl0SU8oY3RsLCBzbG90bm8pOwotCi0JCWRpZF93cml0ZSA9IHRydWU7Ci0J fQotCi0JLyoKLQkgKiBCZSBleHRyYSBjYXJlZnVsIGFuZCByZS1jaGVjay4gVGhlIElPIGZ1 bmN0aW9ucyByZWxlYXNlIHRoZSBjb250cm9sCi0JICogbG9jaywgc28gbmV3IHBhZ2VzIGNv dWxkIGhhdmUgYmVlbiByZWFkIGluLgotCSAqLwotCWlmIChkaWRfd3JpdGUpCi0JCWdvdG8g cmVzdGFydDsKLQotCVNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQoY3RsLCBzZWdubyk7Ci0K LQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOworCVNscnVJbnRlcm5hbERl bGV0ZVNlZ21lbnQoc2xydV9pZCwgc2Vnbm8pOwogfQogCiAvKgpAQCAtMTM4OCwxOSArMTQ1 LDIxIEBAIHJlc3RhcnQ6CiAgKiBmaXJzdD49Y3V0b2ZmICYmIGxhc3Q+PWN1dG9mZjogbm87 IGV2ZXJ5IHBhZ2Ugb2YgdGhpcyBzZWdtZW50IGlzIHRvbyB5b3VuZwogICovCiBzdGF0aWMg Ym9vbAotU2xydU1heURlbGV0ZVNlZ21lbnQoU2xydUN0bCBjdGwsIGludCBzZWdwYWdlLCBp bnQgY3V0b2ZmUGFnZSkKK1NscnVNYXlEZWxldGVTZWdtZW50KFNscnVQYWdlUHJlY2VkZXNG dW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCSBpbnQgc2VncGFnZSwgaW50IGN1dG9mZlBh Z2UpCiB7CiAJaW50CQkJc2VnX2xhc3RfcGFnZSA9IHNlZ3BhZ2UgKyBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UIC0gMTsKIAogCUFzc2VydChzZWdwYWdlICUgU0xSVV9QQUdFU19QRVJfU0VH TUVOVCA9PSAwKTsKIAotCXJldHVybiAoY3RsLT5QYWdlUHJlY2VkZXMoc2VncGFnZSwgY3V0 b2ZmUGFnZSkgJiYKLQkJCWN0bC0+UGFnZVByZWNlZGVzKHNlZ19sYXN0X3BhZ2UsIGN1dG9m ZlBhZ2UpKTsKKwlyZXR1cm4gKFBhZ2VQcmVjZWRlcyhzZWdwYWdlLCBjdXRvZmZQYWdlKSAm JgorCQkJUGFnZVByZWNlZGVzKHNlZ19sYXN0X3BhZ2UsIGN1dG9mZlBhZ2UpKTsKIH0KIAog I2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIHN0YXRpYyB2b2lkCi1TbHJ1UGFnZVByZWNl ZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlLCB1aW50MzIgb2Zmc2V0 KQorU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9u IFBhZ2VQcmVjZWRlcywKKwkJCQkJCSAgIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkK IHsKIAlUcmFuc2FjdGlvbklkIGxocywKIAkJCQlyaHM7CkBAIC0xNDI1LDE5ICsxODQsMTkg QEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFn ZSwgdWludDMyIG9mZnNldCkKIAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRQcmVjZWRlcyhyaHMs IGxocyArIDEpKTsKIAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMobGhz LCByaHMpKTsKIAlBc3NlcnQoIVRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMocmhzLCBs aHMpKTsKLQlBc3NlcnQoIWN0bC0+UGFnZVByZWNlZGVzKGxocyAvIHBlcl9wYWdlLCBsaHMg LyBwZXJfcGFnZSkpOwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMobGhzIC8gcGVyX3Bh Z2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcyhyaHMg LyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoIWN0bC0+UGFnZVByZWNl ZGVzKChsaHMgLSBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKLQlB c3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAzICogcGVy X3BhZ2UpIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQoY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8g cGVyX3BhZ2UsIChsaHMgLSAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpKTsKLQlBc3NlcnQo Y3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAxICogcGVyX3BhZ2Up IC8gcGVyX3BhZ2UpCisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2UsIGxo cyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMobGhzIC8gcGVyX3BhZ2Us IHJocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMocmhzIC8gcGVyX3Bh Z2UsIGxocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJlY2VkZXMoKGxocyAtIHBl cl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydChQYWdlUHJl Y2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgLSAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2Up KTsKKwlBc3NlcnQoUGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMiAqIHBl cl9wYWdlKSAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KFBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJf cGFnZSwgKGxocyAtIDEgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSkKIAkJICAgfHwgKDFVIDw8 IDMxKSAlIHBlcl9wYWdlICE9IDApOwkvKiBTZWUgQ29tbWl0VHNQYWdlUHJlY2VkZXMoKSAq LwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcygobGhzICsgMSAqIHBlcl9wYWdlKSAvIHBl cl9wYWdlLCByaHMgLyBwZXJfcGFnZSkKKwlBc3NlcnQoUGFnZVByZWNlZGVzKChsaHMgKyAx ICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKQogCQkgICB8fCAoMVUg PDwgMzEpICUgcGVyX3BhZ2UgIT0gMCk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKChs aHMgKyAyICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNz ZXJ0KGN0bC0+UGFnZVByZWNlZGVzKChsaHMgKyAzICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2Us IHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcyhyaHMgLyBw ZXJfcGFnZSwgKGxocyArIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KFBhZ2VQ cmVjZWRlcygobGhzICsgMiAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFn ZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMoKGxocyArIDMgKiBwZXJfcGFnZSkgLyBwZXJf cGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoIVBhZ2VQcmVjZWRlcyhyaHMgLyBw ZXJfcGFnZSwgKGxocyArIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7CiAKIAkvKgogCSAqIEdl dE5ld1RyYW5zYWN0aW9uSWQoKSBoYXMgYXNzaWduZWQgdGhlIGxhc3QgWElEIGl0IGNhbiBz YWZlbHkgdXNlLCBhbmQKQEAgLTE0NTAsNyArMjA5LDcgQEAgU2xydVBhZ2VQcmVjZWRlc1Rl c3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIAlv bGRlc3RYYWN0ID0gbmV3ZXN0WGFjdCArIDE7CiAJb2xkZXN0WGFjdCAtPSAxVSA8PCAzMTsK IAlvbGRlc3RQYWdlID0gb2xkZXN0WGFjdCAvIHBlcl9wYWdlOwotCUFzc2VydCghU2xydU1h eURlbGV0ZVNlZ21lbnQoY3RsLAorCUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoUGFn ZVByZWNlZGVzLAogCQkJCQkJCQkgKG5ld2VzdFBhZ2UgLQogCQkJCQkJCQkgIG5ld2VzdFBh Z2UgJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSwKIAkJCQkJCQkJIG9sZGVzdFBhZ2UpKTsK QEAgLTE0NjYsNyArMjI1LDcgQEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0 bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKIAlvbGRlc3RYYWN0ID0gbmV3 ZXN0WGFjdCArIDE7CiAJb2xkZXN0WGFjdCAtPSAxVSA8PCAzMTsKIAlvbGRlc3RQYWdlID0g b2xkZXN0WGFjdCAvIHBlcl9wYWdlOwotCUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQo Y3RsLAorCUFzc2VydCghU2xydU1heURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVzLAogCQkJ CQkJCQkgKG5ld2VzdFBhZ2UgLQogCQkJCQkJCQkgIG5ld2VzdFBhZ2UgJSBTTFJVX1BBR0VT X1BFUl9TRUdNRU5UKSwKIAkJCQkJCQkJIG9sZGVzdFBhZ2UpKTsKQEAgLTE0ODIsMTIgKzI0 MSwxMiBAQCBTbHJ1UGFnZVByZWNlZGVzVGVzdE9mZnNldChTbHJ1Q3RsIGN0bCwgaW50IHBl cl9wYWdlLCB1aW50MzIgb2Zmc2V0KQogICogZG8gbm90IGFwcGx5IHRvIHRoZW0uKQogICov CiB2b2lkCi1TbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVDdGwgY3RsLCBpbnQgcGVy X3BhZ2UpCitTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVQYWdlUHJlY2VkZXNGdW5j dGlvbiBQYWdlUHJlY2VkZXMsIGludCBwZXJfcGFnZSkKIHsKIAkvKiBUZXN0IGZpcnN0LCBt aWRkbGUgYW5kIGxhc3QgZW50cmllcyBvZiBhIHBhZ2UuICovCi0JU2xydVBhZ2VQcmVjZWRl c1Rlc3RPZmZzZXQoY3RsLCBwZXJfcGFnZSwgMCk7Ci0JU2xydVBhZ2VQcmVjZWRlc1Rlc3RP ZmZzZXQoY3RsLCBwZXJfcGFnZSwgcGVyX3BhZ2UgLyAyKTsKLQlTbHJ1UGFnZVByZWNlZGVz VGVzdE9mZnNldChjdGwsIHBlcl9wYWdlLCBwZXJfcGFnZSAtIDEpOworCVNscnVQYWdlUHJl Y2VkZXNUZXN0T2Zmc2V0KFBhZ2VQcmVjZWRlcywgcGVyX3BhZ2UsIDApOworCVNscnVQYWdl UHJlY2VkZXNUZXN0T2Zmc2V0KFBhZ2VQcmVjZWRlcywgcGVyX3BhZ2UsIHBlcl9wYWdlIC8g Mik7CisJU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoUGFnZVByZWNlZGVzLCBwZXJfcGFn ZSwgcGVyX3BhZ2UgLSAxKTsKIH0KICNlbmRpZgogCkBAIC0xNDk3LDExICsyNTYsMTIgQEAg U2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1Q3RsIGN0bCwgaW50IHBlcl9wYWdlKQog ICoJCW9uZSBjb250YWluaW5nIHRoZSBwYWdlIHBhc3NlZCBhcyAiZGF0YSIuCiAgKi8KIGJv b2wKLVNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAqZmls ZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhKQorU2xydVNjYW5EaXJDYlJlcG9ydFBy ZXNlbmNlKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNl ZGVzLAorCQkJCQkJCWNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkK IHsKIAlpbnQJCQljdXRvZmZQYWdlID0gKihpbnQgKikgZGF0YTsKIAotCWlmIChTbHJ1TWF5 RGVsZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQorCWlmIChTbHJ1TWF5 RGVsZXRlU2VnbWVudChQYWdlUHJlY2VkZXMsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQogCQly ZXR1cm4gdHJ1ZTsJCQkvKiBmb3VuZCBvbmU7IGRvbid0IGl0ZXJhdGUgYW55IG1vcmUgKi8K IAogCXJldHVybiBmYWxzZTsJCQkJLyoga2VlcCBnb2luZyAqLwpAQCAtMTUxMiwxMiArMjcy LDE1IEBAIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShTbHJ1Q3RsIGN0bCwgY2hhciAq ZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpkYXRhCiAgKgkJVGhpcyBjYWxsYmFjayBk ZWxldGVzIHNlZ21lbnRzIHByaW9yIHRvIHRoZSBvbmUgcGFzc2VkIGluIGFzICJkYXRhIi4K ICAqLwogc3RhdGljIGJvb2wKLVNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydUN0bCBj dGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2Fu RGlyQ2JEZWxldGVDdXRvZmYoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlv biBQYWdlUHJlY2VkZXMsCisJCQkJCQkgIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwg dm9pZCAqZGF0YSkKIHsKIAlpbnQJCQljdXRvZmZQYWdlID0gKihpbnQgKikgZGF0YTsKIAot CWlmIChTbHJ1TWF5RGVsZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQot CQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwgc2VncGFnZSAvIFNMUlVfUEFHRVNf UEVSX1NFR01FTlQpOworCWlmIChTbHJ1TWF5RGVsZXRlU2VnbWVudChQYWdlUHJlY2VkZXMs IHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpKQorCXsKKwkJU2xydURlbGV0ZVNlZ21lbnQoc2xydV9p ZCwgc2VncGFnZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOworCX0KIAogCXJldHVybiBm YWxzZTsJCQkJLyoga2VlcCBnb2luZyAqLwogfQpAQCAtMTUyNyw5ICsyOTAsMTAgQEAgU2xy dVNjYW5EaXJDYkRlbGV0ZUN1dG9mZihTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGlu dCBzZWdwYWdlLCB2b2lkICpkYXRhKQogICoJCVRoaXMgY2FsbGJhY2sgZGVsZXRlcyBhbGwg c2VnbWVudHMuCiAgKi8KIGJvb2wKLVNscnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBj dGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKK1NscnVTY2Fu RGlyQ2JEZWxldGVBbGwoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQ YWdlUHJlY2VkZXMsCisJCQkJCSAgIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9p ZCAqZGF0YSkKIHsKLQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwgc2VncGFnZSAv IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOworCVNscnVJbnRlcm5hbERlbGV0ZVNlZ21lbnQo c2xydV9pZCwgc2VncGFnZSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpOwogCiAJcmV0dXJu IGZhbHNlOwkJCQkvKiBrZWVwIGdvaW5nICovCiB9CkBAIC0xNTUwLDE2ICszMTQsMjAgQEAg U2xydVNjYW5EaXJDYkRlbGV0ZUFsbChTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGlu dCBzZWdwYWdlLCB2b2lkICpkYXRhKQogICogTm90ZSB0aGF0IG5vIGxvY2tpbmcgaXMgYXBw bGllZC4KICAqLwogYm9vbAotU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0bCBjdGwsIFNscnVT Y2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpCitTbHJ1U2NhbkRpcmVjdG9yeShp bnQgc2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJ CQkgIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpCiB7CiAJYm9vbAkJ cmV0dmFsID0gZmFsc2U7CiAJRElSCQkgICAqY2xkaXI7CiAJc3RydWN0IGRpcmVudCAqY2xk ZTsKIAlpbnQJCQlzZWdubzsKIAlpbnQJCQlzZWdwYWdlOworCWNvbnN0IGNoYXIgKnBhdGg7 CiAKLQljbGRpciA9IEFsbG9jYXRlRGlyKGN0bC0+RGlyKTsKLQl3aGlsZSAoKGNsZGUgPSBS ZWFkRGlyKGNsZGlyLCBjdGwtPkRpcikpICE9IE5VTEwpCisJcGF0aCA9IHNscnVfZGlyc1tz bHJ1X2lkXTsKKworCWNsZGlyID0gQWxsb2NhdGVEaXIocGF0aCk7CisJd2hpbGUgKChjbGRl ID0gUmVhZERpcihjbGRpciwgcGF0aCkpICE9IE5VTEwpCiAJewogCQlzaXplX3QJCWxlbjsK IApAQCAtMTU3Miw4ICszNDAsOCBAQCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwg U2xydVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIAkJCXNlZ3BhZ2UgPSBz ZWdubyAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CiAKIAkJCWVsb2coREVCVUcyLCAiU2xy dVNjYW5EaXJlY3RvcnkgaW52b2tpbmcgY2FsbGJhY2sgb24gJXMvJXMiLAotCQkJCSBjdGwt PkRpciwgY2xkZS0+ZF9uYW1lKTsKLQkJCXJldHZhbCA9IGNhbGxiYWNrKGN0bCwgY2xkZS0+ ZF9uYW1lLCBzZWdwYWdlLCBkYXRhKTsKKwkJCQkgcGF0aCwgY2xkZS0+ZF9uYW1lKTsKKwkJ CXJldHZhbCA9IGNhbGxiYWNrKHNscnVfaWQsIFBhZ2VQcmVjZWRlcywgY2xkZS0+ZF9uYW1l LCBzZWdwYWdlLCBkYXRhKTsKIAkJCWlmIChyZXR2YWwpCiAJCQkJYnJlYWs7CiAJCX0KQEAg LTE1ODQsMjkgKzM1Miw3OCBAQCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xy dVNjYW5DYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSkKIH0KIAogLyoKLSAqIEluZGl2 aWR1YWwgU0xSVXMgKGNsb2csIC4uLikgaGF2ZSB0byBwcm92aWRlIGEgc3luYy5jIGhhbmRs ZXIgZnVuY3Rpb24gc28KLSAqIHRoYXQgdGhleSBjYW4gcHJvdmlkZSB0aGUgY29ycmVjdCAi U2xydUN0bCIgKG90aGVyd2lzZSB3ZSBkb24ndCBrbm93IGhvdyB0bwotICogYnVpbGQgdGhl IHBhdGgpLCBidXQgdGhleSBqdXN0IGZvcndhcmQgdG8gdGhpcyBjb21tb24gaW1wbGVtZW50 YXRpb24gdGhhdAotICogcGVyZm9ybXMgdGhlIGZzeW5jLgorICogUmVhZCBhIGJ1ZmZlci4g IEJ1ZmZlciBpcyBwaW5uZWQgb24gcmV0dXJuLgogICovCi1pbnQKLVNscnVTeW5jRmlsZVRh ZyhTbHJ1Q3RsIGN0bCwgY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKK0J1ZmZl cgorUmVhZFNscnVCdWZmZXIoaW50IHNscnVfaWQsIGludCBwYWdlbm8pCiB7Ci0JaW50CQkJ ZmQ7Ci0JaW50CQkJc2F2ZV9lcnJubzsKLQlpbnQJCQlyZXN1bHQ7CisJaW50CQkJc2Vnbm8g PSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCWludAkJCXJwYWdlbm8gPSBw YWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCVJlbEZpbGVMb2NhdG9yIHJsb2Nh dG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHNscnVfaWQsIHNlZ25vKTsKKwlCdWZmZXIJCWJ1 ZmZlcjsKKwlib29sCQloaXQ7CisKKwkvKiBUcnkgdG8gYXZvaWQgZG9pbmcgYSBidWZmZXIg bWFwcGluZyB0YWJsZSBsb29rdXAgZm9yIHJlcGVhdGVkIGFjY2Vzcy4gKi8KKwlidWZmZXIg PSBzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnJlY2VudF9idWZmZXI7CisJaWYgKHNs cnVfcmVjZW50X2J1ZmZlcnNbc2xydV9pZF0ucGFnZW5vID09IHBhZ2VubyAmJgorCQlCdWZm ZXJJc1ZhbGlkKGJ1ZmZlcikgJiYKKwkJUmVhZFJlY2VudEJ1ZmZlcihybG9jYXRvciwgTUFJ Tl9GT1JLTlVNLCBwYWdlbm8sIGJ1ZmZlcikpCisJeworCQlwZ3N0YXRfY291bnRfc2xydV9w YWdlX2hpdChzbHJ1X2lkKTsKKwkJcmV0dXJuIGJ1ZmZlcjsKKwl9CisKKwkvKiBSZWd1bGFy IGxvb2t1cC4gKi8KKwlidWZmZXIgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlV2l0aEhp dChybG9jYXRvciwgTUFJTl9GT1JLTlVNLCBycGFnZW5vLAorCQkJCQkJCQkJCQkgIFJCTV9O T1JNQUwsIE5VTEwsIHRydWUsICZoaXQpOwogCi0JU2xydUZpbGVOYW1lKGN0bCwgcGF0aCwg ZnRhZy0+c2Vnbm8pOworCS8qIFJlbWVtYmVyIHdoZXJlIHRoaXMgcGFnZSBpcyBmb3IgbmV4 dCB0aW1lLiAqLworCXNscnVfcmVjZW50X2J1ZmZlcnNbc2xydV9pZF0ucGFnZW5vID0gcGFn ZW5vOworCXNscnVfcmVjZW50X2J1ZmZlcnNbc2xydV9pZF0ucmVjZW50X2J1ZmZlciA9IGJ1 ZmZlcjsKIAotCWZkID0gT3BlblRyYW5zaWVudEZpbGUocGF0aCwgT19SRFdSIHwgUEdfQklO QVJZKTsKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gLTE7CisJaWYgKGhpdCkKKwkJcGdzdGF0 X2NvdW50X3NscnVfcGFnZV9oaXQoc2xydV9pZCk7CiAKLQlyZXN1bHQgPSBwZ19mc3luYyhm ZCk7Ci0Jc2F2ZV9lcnJubyA9IGVycm5vOworCXJldHVybiBidWZmZXI7Cit9CisKKy8qCisg KiBaZXJvLWluaXRpYWxpemUgYSBidWZmZXIuICBCdWZmZXIgaXMgcGlubmVkIGFuZCBleGNs dXNpdmVseSBsb2NrZWQgb24gcmV0dXJuLgorICovCitCdWZmZXIKK1plcm9TbHJ1QnVmZmVy KGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKQoreworCWludAkJCXNlZ25vID0gcGFnZW5vIC8g U0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUgU0xS VV9QQUdFU19QRVJfU0VHTUVOVDsKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvciA9IFNscnVS ZWxGaWxlTG9jYXRvcihzbHJ1X2lkLCBzZWdubyk7CisJQnVmZmVyCQlidWZmZXI7CisJU01n ckZpbGVIYW5kbGUgc2ZpbGU7CiAKLQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOworCWlmIChy cGFnZW5vID09IDApCisJeworCQlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlk QmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOworCQlpZiAoIXNtZ3JleGlzdHMoc2ZpbGUpKQor CQkJc21ncmNyZWF0ZShzZmlsZSwgZmFsc2UpOworCX0KKworCWJ1ZmZlciA9IFJlYWRCdWZm ZXJXaXRob3V0UmVsY2FjaGUocmxvY2F0b3IsIE1BSU5fRk9SS05VTSwgcnBhZ2VubywKKwkJ CQkJCQkJCSAgIFJCTV9aRVJPX0FORF9MT0NLLCBOVUxMLCB0cnVlKTsKKworCS8qIFJlbWVt YmVyIHdoZXJlIHRoaXMgcGFnZSBpcyBmb3IgbmV4dCB0aW1lLiAqLworCXNscnVfcmVjZW50 X2J1ZmZlcnNbc2xydV9pZF0ucGFnZW5vID0gcGFnZW5vOworCXNscnVfcmVjZW50X2J1ZmZl cnNbc2xydV9pZF0ucmVjZW50X2J1ZmZlciA9IGJ1ZmZlcjsKKworCXBnc3RhdF9jb3VudF9z bHJ1X3BhZ2VfemVyb2VkKHNscnVfaWQpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworYm9v bAorUHJvYmVTbHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKQoreworCWludAkJ CXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlpbnQJCQlycGFn ZW5vID0gcGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlSZWxGaWxlTG9jYXRv ciBybG9jYXRvciA9IFNscnVSZWxGaWxlTG9jYXRvcihzbHJ1X2lkLCBzZWdubyk7CiAKLQll cnJubyA9IHNhdmVfZXJybm87Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gQnVmZmVyUHJv YmUocmxvY2F0b3IsIE1BSU5fRk9SS05VTSwgcnBhZ2Vubyk7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vc3VidHJhbnMuYwppbmRleCA2NmQzNTQ4MTU1Mi4uY2VmZDkyODAyMWQg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwpAQCAtMzIsNiArMzIs NyBAQAogI2luY2x1ZGUgImFjY2Vzcy9zdWJ0cmFucy5oIgogI2luY2x1ZGUgImFjY2Vzcy90 cmFuc2FtLmgiCiAjaW5jbHVkZSAicGdfdHJhY2UuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKIAogCkBAIC01NSwxNSArNTYs NyBAQAogI2RlZmluZSBUcmFuc2FjdGlvbklkVG9FbnRyeSh4aWQpICgoeGlkKSAlIChUcmFu c2FjdGlvbklkKSBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSkKIAogCi0vKgotICogTGluayB0 byBzaGFyZWQtbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBmb3IgU1VCVFJBTlMgY29udHJvbAot ICovCi1zdGF0aWMgU2xydUN0bERhdGEgU3ViVHJhbnNDdGxEYXRhOwotCi0jZGVmaW5lIFN1 YlRyYW5zQ3RsICAoJlN1YlRyYW5zQ3RsRGF0YSkKLQotCi1zdGF0aWMgaW50CVplcm9TVUJU UkFOU1BhZ2UoaW50IHBhZ2Vubyk7CitzdGF0aWMgQnVmZmVyIFplcm9TVUJUUkFOU1BhZ2Uo aW50IHBhZ2Vubyk7CiBzdGF0aWMgYm9vbCBTdWJUcmFuc1BhZ2VQcmVjZWRlcyhpbnQgcGFn ZTEsIGludCBwYWdlMik7CiAKIApAQCAtNzUsMTYgKzY4LDE1IEBAIFN1YlRyYW5zU2V0UGFy ZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHBhcmVudCkKIHsKIAlpbnQJ CQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAJaW50CQkJZW50cnlubyA9 IFRyYW5zYWN0aW9uSWRUb0VudHJ5KHhpZCk7Ci0JaW50CQkJc2xvdG5vOwogCVRyYW5zYWN0 aW9uSWQgKnB0cjsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCUFzc2VydChUcmFuc2FjdGlvbklk SXNWYWxpZChwYXJlbnQpKTsKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZEZvbGxvd3MoeGlkLCBw YXJlbnQpKTsKIAotCUxXTG9ja0FjcXVpcmUoU3VidHJhbnNTTFJVTG9jaywgTFdfRVhDTFVT SVZFKTsKLQotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFN1YlRyYW5zQ3RsLCBwYWdl bm8sIHRydWUsIHhpZCk7Ci0JcHRyID0gKFRyYW5zYWN0aW9uSWQgKikgU3ViVHJhbnNDdGwt PnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZl cihTTFJVX1NVQlRSQU5TX0lELCBwYWdlbm8pOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZG RVJfTE9DS19FWENMVVNJVkUpOworCXB0ciA9IChUcmFuc2FjdGlvbklkICopIEJ1ZmZlckdl dFBhZ2UoYnVmZmVyKTsKIAlwdHIgKz0gZW50cnlubzsKIAogCS8qCkBAIC05NiwxMCArODgs MTAgQEAgU3ViVHJhbnNTZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQsIFRyYW5zYWN0aW9u SWQgcGFyZW50KQogCXsKIAkJQXNzZXJ0KCpwdHIgPT0gSW52YWxpZFRyYW5zYWN0aW9uSWQp OwogCQkqcHRyID0gcGFyZW50OwotCQlTdWJUcmFuc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5 W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAl9CiAKLQlM V0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIo YnVmZmVyKTsKIH0KIAogLyoKQEAgLTExMCw5ICsxMDIsOSBAQCBTdWJUcmFuc0dldFBhcmVu dChUcmFuc2FjdGlvbklkIHhpZCkKIHsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklk VG9QYWdlKHhpZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0VudHJ5KHhp ZCk7Ci0JaW50CQkJc2xvdG5vOwogCVRyYW5zYWN0aW9uSWQgKnB0cjsKIAlUcmFuc2FjdGlv bklkIHBhcmVudDsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIENhbid0IGFzayBhYm91dCBz dHVmZiB0aGF0IG1pZ2h0IG5vdCBiZSBhcm91bmQgYW55bW9yZSAqLwogCUFzc2VydChUcmFu c2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHhpZCwgVHJhbnNhY3Rpb25YbWluKSk7CkBAIC0x MjEsMTUgKzExMywxNCBAQCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCkK IAlpZiAoIVRyYW5zYWN0aW9uSWRJc05vcm1hbCh4aWQpKQogCQlyZXR1cm4gSW52YWxpZFRy YW5zYWN0aW9uSWQ7CiAKLQkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQ YWdlX1JlYWRPbmx5ICovCisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9TVUJUUkFO U19JRCwgcGFnZW5vKTsKIAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5 KFN1YlRyYW5zQ3RsLCBwYWdlbm8sIHhpZCk7Ci0JcHRyID0gKFRyYW5zYWN0aW9uSWQgKikg U3ViVHJhbnNDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlwdHIgPSAoVHJh bnNhY3Rpb25JZCAqKSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAJcHRyICs9IGVudHJ5bm87 CiAKIAlwYXJlbnQgPSAqcHRyOwogCi0JTFdMb2NrUmVsZWFzZShTdWJ0cmFuc1NMUlVMb2Nr KTsKKwlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAKIAlyZXR1cm4gcGFyZW50OwogfQpAQCAt MTc3LDI2ICsxNjgsNiBAQCBTdWJUcmFuc0dldFRvcG1vc3RUcmFuc2FjdGlvbihUcmFuc2Fj dGlvbklkIHhpZCkKIAlyZXR1cm4gcHJldmlvdXNYaWQ7CiB9CiAKLQotLyoKLSAqIEluaXRp YWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIFNVQlRSQU5TCi0gKi8KLVNpemUKLVNV QlRSQU5TU2htZW1TaXplKHZvaWQpCi17Ci0JcmV0dXJuIFNpbXBsZUxydVNobWVtU2l6ZShO VU1fU1VCVFJBTlNfQlVGRkVSUywgMCk7Ci19Ci0KLXZvaWQKLVNVQlRSQU5TU2htZW1Jbml0 KHZvaWQpCi17Ci0JU3ViVHJhbnNDdGwtPlBhZ2VQcmVjZWRlcyA9IFN1YlRyYW5zUGFnZVBy ZWNlZGVzOwotCVNpbXBsZUxydUluaXQoU3ViVHJhbnNDdGwsICJTdWJ0cmFucyIsIE5VTV9T VUJUUkFOU19CVUZGRVJTLCAwLAotCQkJCSAgU3VidHJhbnNTTFJVTG9jaywgInBnX3N1YnRy YW5zIiwKLQkJCQkgIExXVFJBTkNIRV9TVUJUUkFOU19CVUZGRVIsIFNZTkNfSEFORExFUl9O T05FKTsKLQlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFN1YlRyYW5zQ3RsLCBTVUJUUkFO U19YQUNUU19QRVJfUEFHRSk7Ci19Ci0KIC8qCiAgKiBUaGlzIGZ1bmMgbXVzdCBiZSBjYWxs ZWQgT05DRSBvbiBzeXN0ZW0gaW5zdGFsbC4gIEl0IGNyZWF0ZXMKICAqIHRoZSBpbml0aWFs IFNVQlRSQU5TIHNlZ21lbnQuICAoVGhlIFNVQlRSQU5TIGRpcmVjdG9yeSBpcyBhc3N1bWVk IHRvCkBAIC0yMTAsMTggKzE4MSwxNiBAQCBTVUJUUkFOU1NobWVtSW5pdCh2b2lkKQogdm9p ZAogQm9vdFN0cmFwU1VCVFJBTlModm9pZCkKIHsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVy CQlidWZmZXI7CiAKLQlMV0xvY2tBY3F1aXJlKFN1YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xV U0lWRSk7CisJU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTdWJUcmFuc1BhZ2VQcmVjZWRl cywgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UpOwogCiAJLyogQ3JlYXRlIGFuZCB6ZXJvIHRo ZSBmaXJzdCBwYWdlIG9mIHRoZSBzdWJ0cmFucyBsb2cgKi8KLQlzbG90bm8gPSBaZXJvU1VC VFJBTlNQYWdlKDApOworCWJ1ZmZlciA9IFplcm9TVUJUUkFOU1BhZ2UoMCk7CiAKIAkvKiBN YWtlIHN1cmUgaXQncyB3cml0dGVuIG91dCAqLwotCVNpbXBsZUxydVdyaXRlUGFnZShTdWJU cmFuc0N0bCwgc2xvdG5vKTsKLQlBc3NlcnQoIVN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2Vf ZGlydHlbc2xvdG5vXSk7Ci0KLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOwor CUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIp OwogfQogCiAvKgpAQCAtMjMyLDEwICsyMDEsMTUgQEAgQm9vdFN0cmFwU1VCVFJBTlModm9p ZCkKICAqCiAgKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2ls bCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFpl cm9TVUJUUkFOU1BhZ2UoaW50IHBhZ2VubykKIHsKLQlyZXR1cm4gU2ltcGxlTHJ1WmVyb1Bh Z2UoU3ViVHJhbnNDdGwsIHBhZ2Vubyk7CisJQnVmZmVyCQlidWZmZXI7CisKKwlidWZmZXIg PSBaZXJvU2xydUJ1ZmZlcihTTFJVX1NVQlRSQU5TX0lELCBwYWdlbm8pOworCU1hcmtCdWZm ZXJEaXJ0eShidWZmZXIpOworCisJcmV0dXJuIGJ1ZmZlcjsKIH0KIAogLyoKQEAgLTI1OCw3 ICsyMzIsNiBAQCBTdGFydHVwU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RBY3RpdmVY SUQpCiAJICogV2hlbmV2ZXIgd2UgYWR2YW5jZSBpbnRvIGEgbmV3IHBhZ2UsIEV4dGVuZFNV QlRSQU5TIHdpbGwgbGlrZXdpc2UgemVybwogCSAqIHRoZSBuZXcgcGFnZSB3aXRob3V0IHJl Z2FyZCB0byB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBvbiBkaXNrLgogCSAqLwotCUxXTG9j a0FjcXVpcmUoU3VidHJhbnNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKIAogCXN0YXJ0UGFn ZSA9IFRyYW5zYWN0aW9uSWRUb1BhZ2Uob2xkZXN0QWN0aXZlWElEKTsKIAluZXh0WGlkID0g U2htZW1WYXJpYWJsZUNhY2hlLT5uZXh0WGlkOwpAQCAtMjY2LDM2ICsyMzksMTUgQEAgU3Rh cnR1cFNVQlRSQU5TKFRyYW5zYWN0aW9uSWQgb2xkZXN0QWN0aXZlWElEKQogCiAJd2hpbGUg KHN0YXJ0UGFnZSAhPSBlbmRQYWdlKQogCXsKLQkJKHZvaWQpIFplcm9TVUJUUkFOU1BhZ2Uo c3RhcnRQYWdlKTsKKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvU1VCVFJBTlNQYWdlKHN0 YXJ0UGFnZSkpOwogCQlzdGFydFBhZ2UrKzsKIAkJLyogbXVzdCBhY2NvdW50IGZvciB3cmFw YXJvdW5kICovCiAJCWlmIChzdGFydFBhZ2UgPiBUcmFuc2FjdGlvbklkVG9QYWdlKE1heFRy YW5zYWN0aW9uSWQpKQogCQkJc3RhcnRQYWdlID0gMDsKIAl9Ci0JKHZvaWQpIFplcm9TVUJU UkFOU1BhZ2Uoc3RhcnRQYWdlKTsKLQotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9j ayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvU1VCVFJBTlNQYWdlKHN0YXJ0UGFnZSkp OwogfQogCi0vKgotICogUGVyZm9ybSBhIGNoZWNrcG9pbnQgLS0tIGVpdGhlciBkdXJpbmcg c2h1dGRvd24sIG9yIG9uLXRoZS1mbHkKLSAqLwotdm9pZAotQ2hlY2tQb2ludFNVQlRSQU5T KHZvaWQpCi17Ci0JLyoKLQkgKiBXcml0ZSBkaXJ0eSBTVUJUUkFOUyBwYWdlcyB0byBkaXNr Ci0JICoKLQkgKiBUaGlzIGlzIG5vdCBhY3R1YWxseSBuZWNlc3NhcnkgZnJvbSBhIGNvcnJl Y3RuZXNzIHBvaW50IG9mIHZpZXcuIFdlIGRvCi0JICogaXQgbWVyZWx5IHRvIGltcHJvdmUg dGhlIG9kZHMgdGhhdCB3cml0aW5nIG9mIGRpcnR5IHBhZ2VzIGlzIGRvbmUgYnkKLQkgKiB0 aGUgY2hlY2twb2ludCBwcm9jZXNzIGFuZCBub3QgYnkgYmFja2VuZHMuCi0JICovCi0JVFJB Q0VfUE9TVEdSRVNRTF9TVUJUUkFOU19DSEVDS1BPSU5UX1NUQVJUKHRydWUpOwotCVNpbXBs ZUxydVdyaXRlQWxsKFN1YlRyYW5zQ3RsLCB0cnVlKTsKLQlUUkFDRV9QT1NUR1JFU1FMX1NV QlRSQU5TX0NIRUNLUE9JTlRfRE9ORSh0cnVlKTsKLX0KLQotCiAvKgogICogTWFrZSBzdXJl IHRoYXQgU1VCVFJBTlMgaGFzIHJvb20gZm9yIGEgbmV3bHktYWxsb2NhdGVkIFhJRC4KICAq CkBAIC0zMTksMTIgKzI3MSw4IEBAIEV4dGVuZFNVQlRSQU5TKFRyYW5zYWN0aW9uSWQgbmV3 ZXN0WGFjdCkKIAogCXBhZ2VubyA9IFRyYW5zYWN0aW9uSWRUb1BhZ2UobmV3ZXN0WGFjdCk7 CiAKLQlMV0xvY2tBY3F1aXJlKFN1YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0K IAkvKiBaZXJvIHRoZSBwYWdlICovCi0JWmVyb1NVQlRSQU5TUGFnZShwYWdlbm8pOwotCi0J TFdMb2NrUmVsZWFzZShTdWJ0cmFuc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVy KFplcm9TVUJUUkFOU1BhZ2UocGFnZW5vKSk7CiB9CiAKIApAQCAtMzUwLDcgKzI5OCw3IEBA IFRydW5jYXRlU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0KQogCVRyYW5zYWN0 aW9uSWRSZXRyZWF0KG9sZGVzdFhhY3QpOwogCWN1dG9mZlBhZ2UgPSBUcmFuc2FjdGlvbklk VG9QYWdlKG9sZGVzdFhhY3QpOwogCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoU3ViVHJhbnNDdGws IGN1dG9mZlBhZ2UpOworCVNpbXBsZUxydVRydW5jYXRlKFNMUlVfU1VCVFJBTlNfSUQsIFN1 YlRyYW5zUGFnZVByZWNlZGVzLCBjdXRvZmZQYWdlKTsKIH0KIAogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94YWN0LmMKaW5kZXggMTE2ZGUxMTc1YjIuLjYxYzI1YmMwYTgyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAi dXRpbHMvaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUg InV0aWxzL3JlbG1hcHBlci5oIgorI2luY2x1ZGUgInV0aWxzL3Jlc293bmVyX3ByaXZhdGUu aCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZW91 dC5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgpAQCAtMTM5Myw2ICsxMzk0LDcg QEAgUmVjb3JkVHJhbnNhY3Rpb25Db21taXQodm9pZCkKIAkJICogYXJlIGRlbGF5aW5nIHRo ZSBjaGVja3BvaW50IGEgYml0IGZ1enp5LCBidXQgaXQgZG9lc24ndCBtYXR0ZXIuCiAJCSAq LwogCQlBc3NlcnQoKE15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICYgREVMQVlfQ0hLUFRfU1RB UlQpID09IDApOworCiAJCVNUQVJUX0NSSVRfU0VDVElPTigpOwogCQlNeVByb2MtPmRlbGF5 Q2hrcHRGbGFncyB8PSBERUxBWV9DSEtQVF9TVEFSVDsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jCmluZGV4IDE1YWI4ZDkwZDRiLi5lOTUwNjE3NTIzOSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNDUwMSw2ICs0NTAxLDcgQEAgQm9vdFN0cmFwWExP Ryh2b2lkKQogCXVpbnQ2NAkJc3lzaWRlbnRpZmllcjsKIAlzdHJ1Y3QgdGltZXZhbCB0djsK IAlwZ19jcmMzMmMJY3JjOworCVJlc291cmNlT3duZXIgcmVzb3duZXI7CiAKIAkvKiBhbGxv dyBvcmRpbmFyeSBXQUwgc2VnbWVudCBjcmVhdGlvbiwgbGlrZSBTdGFydHVwWExPRygpIHdv dWxkICovCiAJTFdMb2NrQWNxdWlyZShDb250cm9sRmlsZUxvY2ssIExXX0VYQ0xVU0lWRSk7 CkBAIC00NjQyLDEwICs0NjQzLDE0IEBAIEJvb3RTdHJhcFhMT0codm9pZCkKIAlXcml0ZUNv bnRyb2xGaWxlKCk7CiAKIAkvKiBCb290c3RyYXAgdGhlIGNvbW1pdCBsb2csIHRvbyAqLwor CXJlc293bmVyID0gUmVzb3VyY2VPd25lckNyZWF0ZShOVUxMLCAiYm9vdHN0cmFwIHJlc293 bmVyIik7CisJQ3VycmVudFJlc291cmNlT3duZXIgPSByZXNvd25lcjsKIAlCb290U3RyYXBD TE9HKCk7CiAJQm9vdFN0cmFwQ29tbWl0VHMoKTsKIAlCb290U3RyYXBTVUJUUkFOUygpOwog CUJvb3RTdHJhcE11bHRpWGFjdCgpOworCUN1cnJlbnRSZXNvdXJjZU93bmVyID0gTlVMTDsK KwlSZXNvdXJjZU93bmVyRGVsZXRlKHJlc293bmVyKTsKIAogCXBmcmVlKGJ1ZmZlcik7CiAK QEAgLTQ2NTQsNiArNDY1OSw4IEBAIEJvb3RTdHJhcFhMT0codm9pZCkKIAkgKiBvdGhlcndp c2UgbmV2ZXIgcnVuIHRoZSBjaGVja3MgYW5kIEdVQyByZWxhdGVkIGluaXRpYWxpemF0aW9u cyB0aGVyZWluLgogCSAqLwogCVJlYWRDb250cm9sRmlsZSgpOworCisJc21ncmNsb3NlYWxs KCk7CiB9CiAKIHN0YXRpYyBjaGFyICoKQEAgLTY4NTEsMTUgKzY4NTgsMTEgQEAgQ2hlY2tQ b2ludEd1dHMoWExvZ1JlY1B0ciBjaGVja1BvaW50UmVkbywgaW50IGZsYWdzKQogCUNoZWNr UG9pbnRTbmFwQnVpbGQoKTsKIAlDaGVja1BvaW50TG9naWNhbFJld3JpdGVIZWFwKCk7CiAJ Q2hlY2tQb2ludFJlcGxpY2F0aW9uT3JpZ2luKCk7CisJQ2hlY2tQb2ludFByZWRpY2F0ZSgp OwogCi0JLyogV3JpdGUgb3V0IGFsbCBkaXJ0eSBkYXRhIGluIFNMUlVzIGFuZCB0aGUgbWFp biBidWZmZXIgcG9vbCAqLworCS8qIFdyaXRlIG91dCBhbGwgZGlydHkgZGF0YSBpbiB0aGUg YnVmZmVyIHBvb2wgKi8KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9DSEVDS1BPSU5UX1NU QVJUKGZsYWdzKTsKIAlDaGVja3BvaW50U3RhdHMuY2twdF93cml0ZV90ID0gR2V0Q3VycmVu dFRpbWVzdGFtcCgpOwotCUNoZWNrUG9pbnRDTE9HKCk7Ci0JQ2hlY2tQb2ludENvbW1pdFRz KCk7Ci0JQ2hlY2tQb2ludFNVQlRSQU5TKCk7Ci0JQ2hlY2tQb2ludE11bHRpWGFjdCgpOwot CUNoZWNrUG9pbnRQcmVkaWNhdGUoKTsKIAlDaGVja1BvaW50QnVmZmVycyhmbGFncyk7CiAK IAkvKiBQZXJmb3JtIGFsbCBxdWV1ZWQgdXAgZnN5bmNzICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMu YwppbmRleCAzZTFiOTJkZjAzMC4uNzYwNzA1Y2FmOTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMu YwpAQCAtMTQxLDYgKzE0MSw3IEBACiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKICNpbmNs dWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNs dWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKQEAgLTMw NSwxMiArMzA2LDYgQEAgc3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29u dHJvbDsKICNkZWZpbmUgUVVFVUVfTkVYVF9MSVNURU5FUihpKQkJKGFzeW5jUXVldWVDb250 cm9sLT5iYWNrZW5kW2ldLm5leHRMaXN0ZW5lcikKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9Q T1MoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5wb3MpCiAKLS8qCi0gKiBU aGUgU0xSVSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUgbm90aWZp Y2F0aW9uIHF1ZXVlCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBOb3RpZnlDdGxEYXRhOwot Ci0jZGVmaW5lIE5vdGlmeUN0bAkJCQkJKCZOb3RpZnlDdGxEYXRhKQogI2RlZmluZSBRVUVV RV9QQUdFU0laRQkJCQlCTENLU1oKICNkZWZpbmUgUVVFVUVfRlVMTF9XQVJOX0lOVEVSVkFM CTUwMDAJLyogd2FybiBhdCBtb3N0IG9uY2UgZXZlcnkgNXMgKi8KIApAQCAtNTIxLDggKzUx Niw2IEBAIEFzeW5jU2htZW1TaXplKHZvaWQpCiAJc2l6ZSA9IG11bF9zaXplKE1heEJhY2tl bmRzICsgMSwgc2l6ZW9mKFF1ZXVlQmFja2VuZFN0YXR1cykpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBvZmZzZXRvZihBc3luY1F1ZXVlQ29udHJvbCwgYmFja2VuZCkpOwogCi0Jc2l6 ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fTk9USUZZX0JVRkZF UlMsIDApKTsKLQogCXJldHVybiBzaXplOwogfQogCkBAIC01NjUsMjAgKzU1OCwxMyBAQCBB c3luY1NobWVtSW5pdCh2b2lkKQogCQl9CiAJfQogCi0JLyoKLQkgKiBTZXQgdXAgU0xSVSBt YW5hZ2VtZW50IG9mIHRoZSBwZ19ub3RpZnkgZGF0YS4KLQkgKi8KLQlOb3RpZnlDdGwtPlBh Z2VQcmVjZWRlcyA9IGFzeW5jUXVldWVQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5pdChO b3RpZnlDdGwsICJOb3RpZnkiLCBOVU1fTk9USUZZX0JVRkZFUlMsIDAsCi0JCQkJICBOb3Rp ZnlTTFJVTG9jaywgInBnX25vdGlmeSIsIExXVFJBTkNIRV9OT1RJRllfQlVGRkVSLAotCQkJ CSAgU1lOQ19IQU5ETEVSX05PTkUpOwotCiAJaWYgKCFmb3VuZCkKIAl7CiAJCS8qCiAJCSAq IER1cmluZyBzdGFydCBvciByZWJvb3QsIGNsZWFuIG91dCB0aGUgcGdfbm90aWZ5IGRpcmVj dG9yeS4KIAkJICovCi0JCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShOb3RpZnlDdGwsIFNs cnVTY2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOworCQkodm9pZCkgU2xydVNjYW5EaXJlY3Rv cnkoU0xSVV9OT1RJRllfSUQsIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMsCisJCQkJCQkJCSBT bHJ1U2NhbkRpckNiRGVsZXRlQWxsLCBOVUxMKTsKIAl9CiB9CiAKQEAgLTE0MTEsMTAgKzEz OTcsNyBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAlR dWV1ZVBvc2l0aW9uIHF1ZXVlX2hlYWQ7CiAJaW50CQkJcGFnZW5vOwogCWludAkJCW9mZnNl dDsKLQlpbnQJCQlzbG90bm87Ci0KLQkvKiBXZSBob2xkIGJvdGggTm90aWZ5UXVldWVMb2Nr IGFuZCBOb3RpZnlTTFJVTG9jayBkdXJpbmcgdGhpcyBvcGVyYXRpb24gKi8KLQlMV0xvY2tB Y3F1aXJlKE5vdGlmeVNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVy OwogCiAJLyoKIAkgKiBXZSB3b3JrIHdpdGggYSBsb2NhbCBjb3B5IG9mIFFVRVVFX0hFQUQs IHdoaWNoIHdlIHdyaXRlIGJhY2sgdG8gc2hhcmVkCkBAIC0xNDM5LDEzICsxNDIyLDE3IEBA IGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90aWZ5KQogCSAqLwogCXBh Z2VubyA9IFFVRVVFX1BPU19QQUdFKHF1ZXVlX2hlYWQpOwogCWlmIChRVUVVRV9QT1NfSVNf WkVSTyhxdWV1ZV9oZWFkKSkKLQkJc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTm90aWZ5 Q3RsLCBwYWdlbm8pOworCXsKKwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9OT1RJ RllfSUQsIHBhZ2Vubyk7CisJfQogCWVsc2UKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2UoTm90aWZ5Q3RsLCBwYWdlbm8sIHRydWUsCi0JCQkJCQkJCSAgIEludmFsaWRUcmFuc2Fj dGlvbklkKTsKKwl7CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTk9USUZZX0lE LCBwYWdlbm8pOworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZF KTsKKwl9CiAKIAkvKiBOb3RlIHdlIG1hcmsgdGhlIHBhZ2UgZGlydHkgYmVmb3JlIHdyaXRp bmcgaW4gaXQgKi8KLQlOb3RpZnlDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0g dHJ1ZTsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAogCXdoaWxlIChuZXh0Tm90aWZ5 ICE9IE5VTEwpCiAJewpAQCAtMTQ3Niw3ICsxNDYzLDcgQEAgYXN5bmNRdWV1ZUFkZEVudHJp ZXMoTGlzdENlbGwgKm5leHROb3RpZnkpCiAJCX0KIAogCQkvKiBOb3cgY29weSBxZSBpbnRv IHRoZSBzaGFyZWQgYnVmZmVyIHBhZ2UgKi8KLQkJbWVtY3B5KE5vdGlmeUN0bC0+c2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dICsgb2Zmc2V0LAorCQltZW1jcHkoQnVmZmVyR2V0UGFn ZShidWZmZXIpICsgb2Zmc2V0LAogCQkJICAgJnFlLAogCQkJICAgcWUubGVuZ3RoKTsKIApA QCAtMTQ5MSw3ICsxNDc4LDEwIEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpu ZXh0Tm90aWZ5KQogCQkJICogYXN5bmNRdWV1ZUlzRnVsbCgpIGVuc3VyZWQgdGhhdCB0aGVy ZSBpcyByb29tIHRvIGNyZWF0ZSB0aGlzCiAJCQkgKiBwYWdlIHdpdGhvdXQgb3ZlcnJ1bm5p bmcgdGhlIHF1ZXVlLgogCQkJICovCi0JCQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShO b3RpZnlDdGwsIFFVRVVFX1BPU19QQUdFKHF1ZXVlX2hlYWQpKTsKKwkJCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKKwkJCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfTk9U SUZZX0lELAorCQkJCQkJCQkJUVVFVUVfUE9TX1BBR0UocXVldWVfaGVhZCkpOworCQkJTWFy a0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKIAkJCS8qCiAJCQkgKiBJZiB0aGUgbmV3IHBhZ2Ug YWRkcmVzcyBpcyBhIG11bHRpcGxlIG9mIFFVRVVFX0NMRUFOVVBfREVMQVksCkBAIC0xNTA1 LDEyICsxNDk1LDExIEBAIGFzeW5jUXVldWVBZGRFbnRyaWVzKExpc3RDZWxsICpuZXh0Tm90 aWZ5KQogCQkJYnJlYWs7CiAJCX0KIAl9CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIp OwogCiAJLyogU3VjY2Vzcywgc28gdXBkYXRlIHRoZSBnbG9iYWwgUVVFVUVfSEVBRCAqLwog CVFVRVVFX0hFQUQgPSBxdWV1ZV9oZWFkOwogCi0JTFdMb2NrUmVsZWFzZShOb3RpZnlTTFJV TG9jayk7Ci0KIAlyZXR1cm4gbmV4dE5vdGlmeTsKIH0KIApAQCAtMTk4MywxNyArMTk3Miwx NiBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAkJewogCQkJaW50 CQkJY3VycGFnZSA9IFFVRVVFX1BPU19QQUdFKHBvcyk7CiAJCQlpbnQJCQljdXJvZmZzZXQg PSBRVUVVRV9QT1NfT0ZGU0VUKHBvcyk7Ci0JCQlpbnQJCQlzbG90bm87CiAJCQlpbnQJCQlj b3B5c2l6ZTsKKwkJCUJ1ZmZlcgkJYnVmZmVyOwogCiAJCQkvKgotCQkJICogV2UgY29weSB0 aGUgZGF0YSBmcm9tIFNMUlUgaW50byBhIGxvY2FsIGJ1ZmZlciwgc28gYXMgdG8gYXZvaWQK LQkJCSAqIGhvbGRpbmcgdGhlIE5vdGlmeVNMUlVMb2NrIHdoaWxlIHdlIGFyZSBleGFtaW5p bmcgdGhlIGVudHJpZXMKLQkJCSAqIGFuZCBwb3NzaWJseSB0cmFuc21pdHRpbmcgdGhlbSB0 byBvdXIgZnJvbnRlbmQuICBDb3B5IG9ubHkgdGhlCi0JCQkgKiBwYXJ0IG9mIHRoZSBwYWdl IHdlIHdpbGwgYWN0dWFsbHkgaW5zcGVjdC4KKwkJCSAqIFdlIGNvcHkgdGhlIGRhdGEgaW50 byBhIGxvY2FsIGJ1ZmZlciwgc28gYXMgdG8gYXZvaWQgaG9sZGluZyBhCisJCQkgKiBidWZm ZXIgcGluIHdoaWxlIHdlIGFyZSBleGFtaW5pbmcgdGhlIGVudHJpZXMgYW5kIHBvc3NpYmx5 CisJCQkgKiB0cmFuc21pdHRpbmcgdGhlbSB0byBvdXIgZnJvbnRlbmQuICBDb3B5IG9ubHkg dGhlIHBhcnQgb2YgdGhlCisJCQkgKiBwYWdlIHdlIHdpbGwgYWN0dWFsbHkgaW5zcGVjdC4K IAkJCSAqLwotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoTm90aWZ5 Q3RsLCBjdXJwYWdlLAotCQkJCQkJCQkJCQkJSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCQkJ YnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9OT1RJRllfSUQsIGN1cnBhZ2UpOwogCQkJ aWYgKGN1cnBhZ2UgPT0gUVVFVUVfUE9TX1BBR0UoaGVhZCkpCiAJCQl7CiAJCQkJLyogd2Ug b25seSB3YW50IHRvIHJlYWQgYXMgZmFyIGFzIGhlYWQgKi8KQEAgLTIwMDcsMTAgKzE5OTUs OSBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAkJCQljb3B5c2l6 ZSA9IFFVRVVFX1BBR0VTSVpFIC0gY3Vyb2Zmc2V0OwogCQkJfQogCQkJbWVtY3B5KHBhZ2Vf YnVmZmVyLmJ1ZiArIGN1cm9mZnNldCwKLQkJCQkgICBOb3RpZnlDdGwtPnNoYXJlZC0+cGFn ZV9idWZmZXJbc2xvdG5vXSArIGN1cm9mZnNldCwKKwkJCQkgICBCdWZmZXJHZXRQYWdlKGJ1 ZmZlcikgKyBjdXJvZmZzZXQsCiAJCQkJICAgY29weXNpemUpOwotCQkJLyogUmVsZWFzZSBs b2NrIHRoYXQgd2UgZ290IGZyb20gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKSAqLwot CQkJTFdMb2NrUmVsZWFzZShOb3RpZnlTTFJVTG9jayk7CisJCQlSZWxlYXNlQnVmZmVyKGJ1 ZmZlcik7CiAKIAkJCS8qCiAJCQkgKiBQcm9jZXNzIG1lc3NhZ2VzIHVwIHRvIHRoZSBzdG9w IHBvc2l0aW9uLCBlbmQgb2YgcGFnZSwgb3IgYW4KQEAgLTIyMDcsNyArMjE5NCw3IEBAIGFz eW5jUXVldWVBZHZhbmNlVGFpbCh2b2lkKQogCQkgKiBTaW1wbGVMcnVUcnVuY2F0ZSgpIHdp bGwgYXNrIGZvciBOb3RpZnlTTFJVTG9jayBidXQgd2lsbCBhbHNvCiAJCSAqIHJlbGVhc2Ug dGhlIGxvY2sgYWdhaW4uCiAJCSAqLwotCQlTaW1wbGVMcnVUcnVuY2F0ZShOb3RpZnlDdGws IG5ld3RhaWxwYWdlKTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9OT1RJRllfSUQsIGFz eW5jUXVldWVQYWdlUHJlY2VkZXMsIG5ld3RhaWxwYWdlKTsKIAogCQkvKgogCQkgKiBVcGRh dGUgUVVFVUVfU1RPUF9QQUdFLiAgVGhpcyBjaGFuZ2VzIGFzeW5jUXVldWVJc0Z1bGwoKSdz IHZlcmRpY3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9p bml0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IDI4 NjJlOWU0MTJjLi43MTlmMjdhODZhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZfaW5pdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAKIEJ1ZmZlckRlc2NQYWRkZWQgKkJ1ZmZl ckRlc2NyaXB0b3JzOwogY2hhcgkgICAqQnVmZmVyQmxvY2tzOworWExvZ1JlY1B0ciAqQnVm ZmVyRXh0ZXJuYWxMU05zOwogQ29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRkZWQgKkJ1 ZmZlcklPQ1ZBcnJheTsKIFdyaXRlYmFja0NvbnRleHQgQmFja2VuZFdyaXRlYmFja0NvbnRl eHQ7CiBDa3B0U29ydEl0ZW0gKkNrcHRCdWZmZXJJZHM7CkBAIC02OSw5ICs3MCwxMSBAQCBJ bml0QnVmZmVyUG9vbCh2b2lkKQogewogCWJvb2wJCWZvdW5kQnVmcywKIAkJCQlmb3VuZERl c2NzLAorCQkJCWZvdW5kTFNOcywKIAkJCQlmb3VuZElPQ1YsCiAJCQkJZm91bmRCdWZDa3B0 OwogCisKIAkvKiBBbGlnbiBkZXNjcmlwdG9ycyB0byBhIGNhY2hlbGluZSBib3VuZGFyeS4g Ki8KIAlCdWZmZXJEZXNjcmlwdG9ycyA9IChCdWZmZXJEZXNjUGFkZGVkICopCiAJCVNobWVt SW5pdFN0cnVjdCgiQnVmZmVyIERlc2NyaXB0b3JzIiwKQEAgLTg4LDYgKzkxLDExIEBAIElu aXRCdWZmZXJQb29sKHZvaWQpCiAJCQkJCQlOQnVmZmVycyAqIHNpemVvZihDb25kaXRpb25W YXJpYWJsZU1pbmltYWxseVBhZGRlZCksCiAJCQkJCQkmZm91bmRJT0NWKTsKIAorCUJ1ZmZl ckV4dGVybmFsTFNOcyA9IChYTG9nUmVjUHRyICopCisJCVNobWVtSW5pdFN0cnVjdCgiQnVm ZmVyIEV4dGVybmFsIExTTnMiLAorCQkJCQkJTkJ1ZmZlcnMgKiBzaXplb2YoWExvZ1JlY1B0 ciksCisJCQkJCQkmZm91bmRMU05zKTsKKwogCS8qCiAJICogVGhlIGFycmF5IHVzZWQgdG8g c29ydCB0by1iZS1jaGVja3BvaW50ZWQgYnVmZmVyIGlkcyBpcyBsb2NhdGVkIGluCiAJICog c2hhcmVkIG1lbW9yeSwgdG8gYXZvaWQgaGF2aW5nIHRvIGFsbG9jYXRlIHNpZ25pZmljYW50 IGFtb3VudHMgb2YKQEAgLTk5LDEwICsxMDcsMTAgQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkK IAkJU2htZW1Jbml0U3RydWN0KCJDaGVja3BvaW50IEJ1ZmZlcklkcyIsCiAJCQkJCQlOQnVm ZmVycyAqIHNpemVvZihDa3B0U29ydEl0ZW0pLCAmZm91bmRCdWZDa3B0KTsKIAotCWlmIChm b3VuZERlc2NzIHx8IGZvdW5kQnVmcyB8fCBmb3VuZElPQ1YgfHwgZm91bmRCdWZDa3B0KQor CWlmIChmb3VuZERlc2NzIHx8IGZvdW5kQnVmcyB8fCBmb3VuZElPQ1YgfHwgZm91bmRCdWZD a3B0IHx8IGZvdW5kTFNOcykKIAl7CiAJCS8qIHNob3VsZCBmaW5kIGFsbCBvZiB0aGVzZSwg b3Igbm9uZSBvZiB0aGVtICovCi0JCUFzc2VydChmb3VuZERlc2NzICYmIGZvdW5kQnVmcyAm JiBmb3VuZElPQ1YgJiYgZm91bmRCdWZDa3B0KTsKKwkJQXNzZXJ0KGZvdW5kRGVzY3MgJiYg Zm91bmRCdWZzICYmIGZvdW5kSU9DViAmJiBmb3VuZEJ1ZkNrcHQgJiYgZm91bmRMU05zKTsK IAkJLyogbm90ZTogdGhpcyBwYXRoIGlzIG9ubHkgdGFrZW4gaW4gRVhFQ19CQUNLRU5EIGNh c2UgKi8KIAl9CiAJZWxzZQpAQCAtMTMzLDYgKzE0MSw4IEBAIEluaXRCdWZmZXJQb29sKHZv aWQpCiAJCQkJCQkJIExXVFJBTkNIRV9CVUZGRVJfQ09OVEVOVCk7CiAKIAkJCUNvbmRpdGlv blZhcmlhYmxlSW5pdChCdWZmZXJEZXNjcmlwdG9yR2V0SU9DVihidWYpKTsKKworCQkJQnVm ZmVyRXh0ZXJuYWxMU05zW2ldID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJCX0KIAogCQkvKiBD b3JyZWN0IGxhc3QgZW50cnkgb2YgbGlua2VkIGxpc3QgKi8KQEAgLTE2Niw2ICsxNzYsOSBA QCBCdWZmZXJTaG1lbVNpemUodm9pZCkKIAkvKiBzaXplIG9mIGRhdGEgcGFnZXMgKi8KIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTkJ1ZmZlcnMsIEJMQ0tTWikpOwogCisJ Lyogc2l6ZSBvZiBleHRlcm5hbCBMU05zICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11 bF9zaXplKE5CdWZmZXJzLCBzaXplb2YoWExvZ1JlY1B0cikpKTsKKwogCS8qIHNpemUgb2Yg c3R1ZmYgY29udHJvbGxlZCBieSBmcmVlbGlzdC5jICovCiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIFN0cmF0ZWd5U2htZW1TaXplKCkpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jCmluZGV4IDJiYTc1ZjY3NmFkLi5mYTA2MDg2NDc3MyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTU3LDEwICs1NywyMSBAQAogI2luY2x1ZGUgInV0 aWxzL3Jlc293bmVyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIK IAorLyoKKyAqIFhYWCBJZGVhbGx5IHdlJ2Qgc3dpdGNoIHRvIHN0YW5kYXJkIHBhZ2VzIGZv ciBTTFJVIGRhdGEsIGJ1dCBpbiB0aGUKKyAqIG1lYW50aW1lIHdlIG5lZWQgc29tZSB3YXkg dG8gaWRlbnRpZnkgYnVmZmVycyB0aGF0IGhvbGQgcmF3IGRhdGEgKG5vCisgKiBpbnZhc2l2 ZSBMU04sIG5vIGNoZWNrc3VtcykuCisgKi8KKyNkZWZpbmUgQnVmZmVySGFzU3RhbmRhcmRQ YWdlKGJ1ZkhkcikJCQlcCisJKChidWZIZHIpLT50YWcucmxvY2F0b3Iuc3BjT2lkICE9IDkp CisKKyNkZWZpbmUgQnVmZmVySGFzRXh0ZXJuYWxMU04oYnVmSGRyKQkJCVwKKwkhQnVmZmVy SGFzU3RhbmRhcmRQYWdlKGJ1ZkhkcikKIAogLyogTm90ZTogdGhlc2UgdHdvIG1hY3JvcyBv bmx5IHdvcmsgb24gc2hhcmVkIGJ1ZmZlcnMsIG5vdCBsb2NhbCBvbmVzISAqLwogI2RlZmlu ZSBCdWZIZHJHZXRCbG9jayhidWZIZHIpCSgoQmxvY2spIChCdWZmZXJCbG9ja3MgKyAoKFNp emUpIChidWZIZHIpLT5idWZfaWQpICogQkxDS1NaKSkKLSNkZWZpbmUgQnVmZmVyR2V0TFNO KGJ1ZkhkcikJKFBhZ2VHZXRMU04oQnVmSGRyR2V0QmxvY2soYnVmSGRyKSkpCisjZGVmaW5l IEJ1ZmZlckdldExTTihidWZIZHIpIFwKKwkoQnVmZmVySGFzRXh0ZXJuYWxMU04oYnVmSGRy KSA/IEJ1ZmZlckdldEV4dGVybmFsTFNOKGJ1ZkhkcikgOiBQYWdlR2V0TFNOKEJ1Zkhkckdl dEJsb2NrKGJ1ZkhkcikpKQogCiAvKiBOb3RlOiB0aGlzIG1hY3JvIG9ubHkgd29ya3Mgb24g bG9jYWwgYnVmZmVycywgbm90IHNoYXJlZCBvbmVzISAqLwogI2RlZmluZSBMb2NhbEJ1Zkhk ckdldEJsb2NrKGJ1ZkhkcikgXApAQCAtNzk0LDYgKzgwNSwxOCBAQCBSZWFkQnVmZmVyV2l0 aG91dFJlbGNhY2hlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtO dW0sCiAJCQkJCQkJIG1vZGUsIHN0cmF0ZWd5LCAmaGl0KTsKIH0KIAorQnVmZmVyCitSZWFk QnVmZmVyV2l0aG91dFJlbGNhY2hlV2l0aEhpdChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwg Rm9ya051bWJlciBmb3JrTnVtLAorCQkJCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tOdW0sIFJl YWRCdWZmZXJNb2RlIG1vZGUsCisJCQkJCQkJCSBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJh dGVneSwgYm9vbCBwZXJtYW5lbnQsIGJvb2wgKmhpdCkKK3sKKwlTTWdyRmlsZUhhbmRsZSBz ZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrTnVtKTsK KworCXJldHVybiBSZWFkQnVmZmVyX2NvbW1vbihzZmlsZSwgcGVybWFuZW50ID8gUkVMUEVS U0lTVEVOQ0VfUEVSTUFORU5UIDoKKwkJCQkJCQkgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQs IGJsb2NrTnVtLAorCQkJCQkJCSBtb2RlLCBzdHJhdGVneSwgaGl0KTsKK30KKwogCiAvKgog ICogUmVhZEJ1ZmZlcl9jb21tb24gLS0gY29tbW9uIGxvZ2ljIGZvciBhbGwgUmVhZEJ1ZmZl ciB2YXJpYW50cwpAQCAtMTAxNiw3ICsxMDM5LDggQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01n ckZpbGVIYW5kbGUgc2ZpbGUsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJCQl9CiAKIAkJCS8q IGNoZWNrIGZvciBnYXJiYWdlIGRhdGEgKi8KLQkJCWlmICghUGFnZUlzVmVyaWZpZWRFeHRl bmRlZCgoUGFnZSkgYnVmQmxvY2ssIGJsb2NrTnVtLAorCQkJaWYgKEJ1ZmZlckhhc1N0YW5k YXJkUGFnZShidWZIZHIpICYmCisJCQkJIVBhZ2VJc1ZlcmlmaWVkRXh0ZW5kZWQoKFBhZ2Up IGJ1ZkJsb2NrLCBibG9ja051bSwKIAkJCQkJCQkJCQlQSVZfTE9HX1dBUk5JTkcgfCBQSVZf UkVQT1JUX1NUQVQpKQogCQkJewogCQkJCWlmIChtb2RlID09IFJCTV9aRVJPX09OX0VSUk9S IHx8IHplcm9fZGFtYWdlZF9wYWdlcykKQEAgLTE0NDAsNiArMTQ2NCw5IEBAIEJ1ZmZlckFs bG9jKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAogCiAJTFdM b2NrUmVsZWFzZShuZXdQYXJ0aXRpb25Mb2NrKTsKIAorCWlmIChCdWZmZXJIYXNFeHRlcm5h bExTTihidWYpKQorCQlCdWZmZXJTZXRFeHRlcm5hbExTTihidWYsIEludmFsaWRYTG9nUmVj UHRyKTsKKwogCS8qCiAJICogQnVmZmVyIGNvbnRlbnRzIGFyZSBjdXJyZW50bHkgaW52YWxp ZC4gIFRyeSB0byBvYnRhaW4gdGhlIHJpZ2h0IHRvCiAJICogc3RhcnQgSS9PLiAgSWYgU3Rh cnRCdWZmZXJJTyByZXR1cm5zIGZhbHNlLCB0aGVuIHNvbWVvbmUgZWxzZSBtYW5hZ2VkCkBA IC0zMDE4LDcgKzMwNDUsMTAgQEAgQnVmZmVyR2V0TFNOQXRvbWljKEJ1ZmZlciBidWZmZXIp CiAJQXNzZXJ0KEJ1ZmZlcklzUGlubmVkKGJ1ZmZlcikpOwogCiAJYnVmX3N0YXRlID0gTG9j a0J1ZkhkcihidWZIZHIpOwotCWxzbiA9IFBhZ2VHZXRMU04ocGFnZSk7CisJaWYgKEJ1ZmZl ckhhc1N0YW5kYXJkUGFnZShidWZIZHIpKQorCQlsc24gPSBQYWdlR2V0TFNOKHBhZ2UpOwor CWVsc2UKKwkJbHNuID0gQnVmZmVyR2V0RXh0ZXJuYWxMU04oYnVmSGRyKTsKIAlVbmxvY2tC dWZIZHIoYnVmSGRyLCBidWZfc3RhdGUpOwogCiAJcmV0dXJuIGxzbjsKQEAgLTQ5ODksMyAr NTAxOSwyOSBAQCBUZXN0Rm9yT2xkU25hcHNob3RfaW1wbChTbmFwc2hvdCBzbmFwc2hvdCwg UmVsYXRpb24gcmVsYXRpb24pCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TTkFQU0hPVF9UT09f T0xEKSwKIAkJCQkgZXJybXNnKCJzbmFwc2hvdCB0b28gb2xkIikpKTsKIH0KKworLyoKKyAq IENoZWNrIGlmIGEgYnVmZmVyIHRhZyBpcyBjdXJyZW50bHkgbWFwcGVkLgorICoKKyAqIFhY WCBEdWJpb3VzIHNlbWFudGljczsgbmVlZGVkIG9ubHkgZm9yIG11bHRpeGFjdCdzIGhhbmRs aW5nIGZvcgorICogaW5jb25zaXN0ZW50IHN0YXRlcy4KKyAqLworYm9vbAorQnVmZmVyUHJv YmUoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tO dW1iZXIgYmxvY2tOdW0pCit7CisJQnVmZmVyVGFnCXRhZzsKKwl1aW50MzIJCWhhc2g7CisJ TFdMb2NrCSAgICpwYXJ0aXRpb25Mb2NrOworCWludAkJCWJ1Zl9pZDsKKworCUlOSVRfQlVG RkVSVEFHKHRhZywgcmxvY2F0b3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKKworCWhhc2ggPSBC dWZUYWJsZUhhc2hDb2RlKCZ0YWcpOworCXBhcnRpdGlvbkxvY2sgPSBCdWZNYXBwaW5nUGFy dGl0aW9uTG9jayhoYXNoKTsKKworCUxXTG9ja0FjcXVpcmUocGFydGl0aW9uTG9jaywgTFdf U0hBUkVEKTsKKwlidWZfaWQgPSBCdWZUYWJsZUxvb2t1cCgmdGFnLCBoYXNoKTsKKwlMV0xv Y2tSZWxlYXNlKHBhcnRpdGlvbkxvY2spOworCisJcmV0dXJuIGJ1Zl9pZCA+PSAwOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDFhNmY1MjcwNTE4Li5jMDYzYTIwMWE0ZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMTE2LDkgKzExNiw3IEBAIENhbGN1bGF0 ZVNobWVtU2l6ZShpbnQgKm51bV9zZW1hcGhvcmVzKQogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBYTG9nUHJlZmV0Y2hTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhM T0dTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMb2dSZWNvdmVyeVNo bWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ0xPR1NobWVtU2l6ZSgpKTsK IAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ29tbWl0VHNTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9 IGFkZF9zaXplKHNpemUsIFNVQlRSQU5TU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBUd29QaGFzZVNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg QmFja2dyb3VuZFdvcmtlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg TXVsdGlYYWN0U2htZW1TaXplKCkpOwpAQCAtMjQwLDkgKzIzOCw3IEBAIENyZWF0ZVNoYXJl ZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAlYTE9HU2htZW1Jbml0KCk7CiAJWExvZ1By ZWZldGNoU2htZW1Jbml0KCk7CiAJWExvZ1JlY292ZXJ5U2htZW1Jbml0KCk7Ci0JQ0xPR1No bWVtSW5pdCgpOwogCUNvbW1pdFRzU2htZW1Jbml0KCk7Ci0JU1VCVFJBTlNTaG1lbUluaXQo KTsKIAlNdWx0aVhhY3RTaG1lbUluaXQoKTsKIAlJbml0QnVmZmVyUG9vbCgpOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKaW5kZXggNTEzNmRhNmVhMzYuLjkxZDI3 NjQ4OTBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRl LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCkBAIC0zMTIs MTQgKzMxMiw2IEBACiAJKCh0YXJnZXRoYXNoKSBeICgodWludDMyKSBQb2ludGVyR2V0RGF0 dW0oKHByZWRpY2F0ZWxvY2t0YWcpLT5teVhhY3QpKSBcCiAJIDw8IExPRzJfTlVNX1BSRURJ Q0FURUxPQ0tfUEFSVElUSU9OUykKIAotCi0vKgotICogVGhlIFNMUlUgYnVmZmVyIGFyZWEg dGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG9sZCB4aWRzLgotICovCi1zdGF0aWMgU2xy dUN0bERhdGEgU2VyaWFsU2xydUN0bERhdGE7Ci0KLSNkZWZpbmUgU2VyaWFsU2xydUN0bAkJ CSgmU2VyaWFsU2xydUN0bERhdGEpCi0KICNkZWZpbmUgU0VSSUFMX1BBR0VTSVpFCQkJQkxD S1NaCiAjZGVmaW5lIFNFUklBTF9FTlRSWVNJWkUJCQlzaXplb2YoU2VyQ29tbWl0U2VxTm8p CiAjZGVmaW5lIFNFUklBTF9FTlRSSUVTUEVSUEFHRQkoU0VSSUFMX1BBR0VTSVpFIC8gU0VS SUFMX0VOVFJZU0laRSkKQEAgLTMzMSw4ICszMjMsOCBAQCBzdGF0aWMgU2xydUN0bERhdGEg U2VyaWFsU2xydUN0bERhdGE7CiAKICNkZWZpbmUgU2VyaWFsTmV4dFBhZ2UocGFnZSkgKCgo cGFnZSkgPj0gU0VSSUFMX01BWF9QQUdFKSA/IDAgOiAocGFnZSkgKyAxKQogCi0jZGVmaW5l IFNlcmlhbFZhbHVlKHNsb3RubywgeGlkKSAoKigoU2VyQ29tbWl0U2VxTm8gKikgXAotCShT ZXJpYWxTbHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBcCisjZGVmaW5l IFNlcmlhbFZhbHVlKGJ1ZmZlciwgeGlkKSAoKigoU2VyQ29tbWl0U2VxTm8gKikgXAorCShC dWZmZXJHZXRQYWdlKGJ1ZmZlcikgKyBcCiAJKCgoKHVpbnQzMikgKHhpZCkpICUgU0VSSUFM X0VOVFJJRVNQRVJQQUdFKSAqIFNFUklBTF9FTlRSWVNJWkUpKSkpCiAKICNkZWZpbmUgU2Vy aWFsUGFnZSh4aWQpCSgoKHVpbnQzMikgKHhpZCkpIC8gU0VSSUFMX0VOVFJJRVNQRVJQQUdF KQpAQCAtODY3LDE3ICs4NTksMTAgQEAgU2VyaWFsSW5pdCh2b2lkKQogewogCWJvb2wJCWZv dW5kOwogCi0JLyoKLQkgKiBTZXQgdXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19zZXJp YWwgZGF0YS4KLQkgKi8KLQlTZXJpYWxTbHJ1Q3RsLT5QYWdlUHJlY2VkZXMgPSBTZXJpYWxQ YWdlUHJlY2VkZXNMb2dpY2FsbHk7Ci0JU2ltcGxlTHJ1SW5pdChTZXJpYWxTbHJ1Q3RsLCAi U2VyaWFsIiwKLQkJCQkgIE5VTV9TRVJJQUxfQlVGRkVSUywgMCwgU2VyaWFsU0xSVUxvY2ss ICJwZ19zZXJpYWwiLAotCQkJCSAgTFdUUkFOQ0hFX1NFUklBTF9CVUZGRVIsIFNZTkNfSEFO RExFUl9OT05FKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiAJU2VyaWFsUGFnZVBy ZWNlZGVzTG9naWNhbGx5VW5pdFRlc3RzKCk7CiAjZW5kaWYKLQlTbHJ1UGFnZVByZWNlZGVz VW5pdFRlc3RzKFNlcmlhbFNscnVDdGwsIFNFUklBTF9FTlRSSUVTUEVSUEFHRSk7CisJU2xy dVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHksIFNF UklBTF9FTlRSSUVTUEVSUEFHRSk7CiAKIAkvKgogCSAqIENyZWF0ZSBvciBhdHRhY2ggdG8g dGhlIFNlcmlhbENvbnRyb2wgc3RydWN0dXJlLgpAQCAtOTA3LDkgKzg5Miw5IEBAIFNlcmlh bEFkZChUcmFuc2FjdGlvbklkIHhpZCwgU2VyQ29tbWl0U2VxTm8gbWluQ29uZmxpY3RDb21t aXRTZXFObykKIHsKIAlUcmFuc2FjdGlvbklkIHRhaWxYaWQ7CiAJaW50CQkJdGFyZ2V0UGFn ZTsKLQlpbnQJCQlzbG90bm87CiAJaW50CQkJZmlyc3RaZXJvUGFnZTsKIAlib29sCQlpc05l d1BhZ2U7CisJQnVmZmVyCQlidWZmZXI7CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFs aWQoeGlkKSk7CiAKQEAgLTk1NCwxNiArOTM5LDIyIEBAIFNlcmlhbEFkZChUcmFuc2FjdGlv bklkIHhpZCwgU2VyQ29tbWl0U2VxTm8gbWluQ29uZmxpY3RDb21taXRTZXFObykKIAkJLyog SW5pdGlhbGl6ZSBpbnRlcnZlbmluZyBwYWdlcy4gKi8KIAkJd2hpbGUgKGZpcnN0WmVyb1Bh Z2UgIT0gdGFyZ2V0UGFnZSkKIAkJewotCQkJKHZvaWQpIFNpbXBsZUxydVplcm9QYWdlKFNl cmlhbFNscnVDdGwsIGZpcnN0WmVyb1BhZ2UpOworCQkJYnVmZmVyID0gWmVyb1NscnVCdWZm ZXIoU0xSVV9TRVJJQUxfSUQsIGZpcnN0WmVyb1BhZ2UpOworCQkJTWFya0J1ZmZlckRpcnR5 KGJ1ZmZlcik7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJCQlmaXJzdFpl cm9QYWdlID0gU2VyaWFsTmV4dFBhZ2UoZmlyc3RaZXJvUGFnZSk7CiAJCX0KLQkJc2xvdG5v ID0gU2ltcGxlTHJ1WmVyb1BhZ2UoU2VyaWFsU2xydUN0bCwgdGFyZ2V0UGFnZSk7CisJCWJ1 ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfU0VSSUFMX0lELCB0YXJnZXRQYWdlKTsKIAl9 CiAJZWxzZQotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShTZXJpYWxTbHJ1Q3RsLCB0 YXJnZXRQYWdlLCB0cnVlLCB4aWQpOworCXsKKwkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIo U0xSVV9TRVJJQUxfSUQsIHRhcmdldFBhZ2UpOworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVG RkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwl9CiAKLQlTZXJpYWxWYWx1ZShzbG90bm8sIHhpZCkg PSBtaW5Db25mbGljdENvbW1pdFNlcU5vOwotCVNlcmlhbFNscnVDdGwtPnNoYXJlZC0+cGFn ZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwlTZXJpYWxWYWx1ZShidWZmZXIsIHhpZCkgPSBt aW5Db25mbGljdENvbW1pdFNlcU5vOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCVVu bG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCUxXTG9ja1JlbGVhc2UoU2VyaWFsU0xS VUxvY2spOwogfQpAQCAtOTc5LDcgKzk3MCw3IEBAIFNlcmlhbEdldE1pbkNvbmZsaWN0Q29t bWl0U2VxTm8oVHJhbnNhY3Rpb25JZCB4aWQpCiAJVHJhbnNhY3Rpb25JZCBoZWFkWGlkOwog CVRyYW5zYWN0aW9uSWQgdGFpbFhpZDsKIAlTZXJDb21taXRTZXFObyB2YWw7Ci0JaW50CQkJ c2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1Zh bGlkKHhpZCkpOwogCkBAIC0xMDAxLDkgKzk5Miw5IEBAIFNlcmlhbEdldE1pbkNvbmZsaWN0 Q29tbWl0U2VxTm8oVHJhbnNhY3Rpb25JZCB4aWQpCiAJICogVGhlIGZvbGxvd2luZyBmdW5j dGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgU2VyaWFsU0xSVUxvY2ssCiAJ ICogYnV0IHdpbGwgcmV0dXJuIHdpdGggdGhhdCBsb2NrIGhlbGQsIHdoaWNoIG11c3QgdGhl biBiZSByZWxlYXNlZC4KIAkgKi8KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFk T25seShTZXJpYWxTbHJ1Q3RsLAotCQkJCQkJCQkJCVNlcmlhbFBhZ2UoeGlkKSwgeGlkKTsK LQl2YWwgPSBTZXJpYWxWYWx1ZShzbG90bm8sIHhpZCk7CisJYnVmZmVyID0gUmVhZFNscnVC dWZmZXIoU0xSVV9TRVJJQUxfSUQsIFNlcmlhbFBhZ2UoeGlkKSk7CisJdmFsID0gU2VyaWFs VmFsdWUoYnVmZmVyLCB4aWQpOworCVJlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAlMV0xvY2tS ZWxlYXNlKFNlcmlhbFNMUlVMb2NrKTsKIAlyZXR1cm4gdmFsOwogfQpAQCAtMTEyMiwxOSAr MTExMyw3IEBAIENoZWNrUG9pbnRQcmVkaWNhdGUodm9pZCkKIAlMV0xvY2tSZWxlYXNlKFNl cmlhbFNMUlVMb2NrKTsKIAogCS8qIFRydW5jYXRlIGF3YXkgcGFnZXMgdGhhdCBhcmUgbm8g bG9uZ2VyIHJlcXVpcmVkICovCi0JU2ltcGxlTHJ1VHJ1bmNhdGUoU2VyaWFsU2xydUN0bCwg dGFpbFBhZ2UpOwotCi0JLyoKLQkgKiBXcml0ZSBkaXJ0eSBTTFJVIHBhZ2VzIHRvIGRpc2sK LQkgKgotCSAqIFRoaXMgaXMgbm90IGFjdHVhbGx5IG5lY2Vzc2FyeSBmcm9tIGEgY29ycmVj dG5lc3MgcG9pbnQgb2Ygdmlldy4gV2UgZG8KLQkgKiBpdCBtZXJlbHkgYXMgYSBkZWJ1Z2dp bmcgYWlkLgotCSAqCi0JICogV2UncmUgZG9pbmcgdGhpcyBhZnRlciB0aGUgdHJ1bmNhdGlv biB0byBhdm9pZCB3cml0aW5nIHBhZ2VzIHJpZ2h0Ci0JICogYmVmb3JlIGRlbGV0aW5nIHRo ZSBmaWxlIGluIHdoaWNoIHRoZXkgc2l0LCB3aGljaCB3b3VsZCBiZSBjb21wbGV0ZWx5Ci0J ICogcG9pbnRsZXNzLgotCSAqLwotCVNpbXBsZUxydVdyaXRlQWxsKFNlcmlhbFNscnVDdGws IHRydWUpOworCVNpbXBsZUxydVRydW5jYXRlKFNMUlVfU0VSSUFMX0lELCBTZXJpYWxQYWdl UHJlY2VkZXNMb2dpY2FsbHksIHRhaWxQYWdlKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0qLwpAQCAtMTM5Niw3ICsxMzc1LDYgQEAgUHJlZGljYXRlTG9ja1NobWVtU2l6ZSh2b2lk KQogCiAJLyogU2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzIGZvciBTTFJVIHRyYWNraW5nIG9m IG9sZCBjb21taXR0ZWQgeGlkcy4gKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgc2l6ZW9m KFNlcmlhbENvbnRyb2xEYXRhKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFNpbXBsZUxy dVNobWVtU2l6ZShOVU1fU0VSSUFMX0JVRkZFUlMsIDApKTsKIAogCXJldHVybiBzaXplOwog fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL3NtZ3IvbWQuYwppbmRleCA0NTI4ZTQ1YTVjYS4uOWZjM2NiMWNhYWYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCkBAIC0xOTEsOSArMTkxLDEyIEBAIG1kY3JlYXRl KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29sIGlzUmVkbykKIAkgKiBzaG91bGQgYmUgaGVy ZSBhbmQgbm90IGluIGNvbW1hbmRzL3RhYmxlc3BhY2UuYz8gIEJ1dCB0aGF0IHdvdWxkIGlt cGx5CiAJICogaW1wb3J0aW5nIGEgbG90IG9mIHN0dWZmIHRoYXQgc21nci5jIG91Z2h0bid0 IGtub3csIGVpdGhlci4KIAkgKi8KLQlUYWJsZXNwYWNlQ3JlYXRlRGJzcGFjZShzZmlsZS0+ c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCXNmaWxlLT5zbWdyX2xvY2F0 b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQlpc1JlZG8pOworCWlmIChzZmlsZS0+c21ncl9s b2NhdG9yLmxvY2F0b3Iuc3BjT2lkICE9IFNMUlVfU1BDX09JRCkKKwl7CisJCVRhYmxlc3Bh Y2VDcmVhdGVEYnNwYWNlKHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJ CQkJCQkJCXNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJaXNS ZWRvKTsKKwl9CiAKIAlwYXRoID0gc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3Ip OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwppbmRleCA2ZTFhZDMxNjU0ZS4uZGUxMDMz MjA1NzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9zbWdyLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwpAQCAtNDE5LDYgKzQxOSw0OSBA QCBzbWdydW5saW5rX211bHRpKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQg YmFja2VuZCwgRm9ya051bWJlciAqZm9ya3MsCiAJfQogfQogCisvKgorICoJc21ncmRvdW5s aW5rKCkgLS0gSW1tZWRpYXRlbHkgdW5saW5rIGEgZmlsZQorICoKKyAqCQlJZiBpc1JlZG8g aXMgdHJ1ZSwgaXQgaXMgb2theSBmb3IgdGhlIHVuZGVybHlpbmcgZmlsZShzKSB0byBiZSBn b25lCisgKgkJYWxyZWFkeS4KKyAqCisgKiBUbyByZW1vdmUgYSByZWxhdGlvbiB0cmFuc2Fj dGlvbmFsbHksIHNlZSBSZWxhdGlvbkRyb3BTdG9yYWdlKCkgaW5zdGVhZC4KKyAqIFRoaXMg d2lsbCBjYXVzZSBjYWNoZSBpbnZhbGlkYXRpb24gb2YgYWxsIGZvcmtzIG9mIHRoZSByZWxh dGlvbiwgbm90IGp1c3QKKyAqIHRoaXMgb25lLgorICovCit2b2lkCitzbWdydW5saW5rKFNN Z3JGaWxlSGFuZGxlIHNmaWxlLCBib29sIGlzUmVkbykKK3sKKwlTTWdyRmlsZUxvY2F0b3Ig bG9jYXRvcjsKKwlpbnQJCQl3aGljaDsKKworCS8qIHJlbWVtYmVyIGJlZm9yZSBjbG9zaW5n ICovCisJd2hpY2ggPSBzZmlsZS0+c21ncl93aGljaDsKKwlsb2NhdG9yID0gc2ZpbGUtPnNt Z3JfbG9jYXRvcjsKKworCS8qIENsb3NlIHRoZSBmaWxlIGF0IHNtZ3IgbGV2ZWwgKi8KKwlz bWdyY2xvc2Uoc2ZpbGUpOworCisJLyoKKwkgKiBTZW5kIGEgc2hhcmVkLWludmFsIG1lc3Nh Z2UgdG8gZm9yY2Ugb3RoZXIgYmFja2VuZHMgdG8gY2xvc2UgYW55CisJICogZGFuZ2xpbmcg c21nciByZWZlcmVuY2VzIHRoZXkgbWF5IGhhdmUgZm9yIHRoZXNlIHJlbHMuICBXZSBzaG91 bGQgZG8KKwkgKiB0aGlzIGJlZm9yZSBzdGFydGluZyB0aGUgYWN0dWFsIHVubGlua2luZywg aW4gY2FzZSB3ZSBmYWlsIHBhcnR3YXkKKwkgKiB0aHJvdWdoIHRoYXQgc3RlcC4gIE5vdGUg dGhhdCB0aGUgc2ludmFsIG1lc3NhZ2VzIHdpbGwgZXZlbnR1YWxseSBjb21lCisJICogYmFj ayB0byB0aGlzIGJhY2tlbmQsIHRvbywgYW5kIHRoZXJlYnkgcHJvdmlkZSBhIGJhY2tzdG9w IHRoYXQgd2UKKwkgKiBjbG9zZWQgb3VyIG93biBzbWdyIHJlbC4KKwkgKi8KKwlDYWNoZUlu dmFsaWRhdGVTbWdyKGxvY2F0b3IubG9jYXRvciwgbG9jYXRvci5iYWNrZW5kKTsKKworCS8q CisJICogRGVsZXRlIHRoZSBwaHlzaWNhbCBmaWxlKHMpLgorCSAqCisJICogTm90ZTogc21n cl91bmxpbmsgbXVzdCB0cmVhdCBkZWxldGlvbiBmYWlsdXJlIGFzIGEgV0FSTklORywgbm90 IGFuCisJICogRVJST1IsIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBkZWNpZGVkIHRvIGNvbW1p dCBvciBhYm9ydCB0aGUgY3VycmVudAorCSAqIHhhY3QuCisJICovCisJc21ncnN3W3doaWNo XS5zbWdyX3VubGluayhsb2NhdG9yLCBpc1JlZG8pOworfQorCiAKIC8qCiAgKglzbWdyZXh0 ZW5kKCkgLS0gQWRkIGEgbmV3IGJsb2NrIHRvIGEgZmlsZS4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2Uvc3luYy9zeW5jLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3N5bmMv c3luYy5jCmluZGV4IDlkNmE5ZTkxMDkwLi4zNTcyMDc4YmE3OSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L3N5bmMvc3luYy5jCkBAIC0xOCw5ICsxOCw3IEBACiAjaW5jbHVkZSA8ZmNudGwuaD4KICNp bmNsdWRlIDxzeXMvZmlsZS5oPgogCi0jaW5jbHVkZSAiYWNjZXNzL2NvbW1pdF90cy5oIgot I2luY2x1ZGUgImFjY2Vzcy9jbG9nLmgiCi0jaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5o IgorI2luY2x1ZGUgImFjY2Vzcy9zbHJ1LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIK ICNpbmNsdWRlICJhY2Nlc3MveGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFi bGVzcGFjZS5oIgpAQCAtMTA2LDIyICsxMDQsNiBAQCBzdGF0aWMgY29uc3QgU3luY09wcyBz eW5jc3dbXSA9IHsKIAkJLnN5bmNfdW5saW5rZmlsZXRhZyA9IG1kdW5saW5rZmlsZXRhZywK IAkJLnN5bmNfZmlsZXRhZ21hdGNoZXMgPSBtZGZpbGV0YWdtYXRjaGVzCiAJfSwKLQkvKiBw Z194YWN0ICovCi0JW1NZTkNfSEFORExFUl9DTE9HXSA9IHsKLQkJLnN5bmNfc3luY2ZpbGV0 YWcgPSBjbG9nc3luY2ZpbGV0YWcKLQl9LAotCS8qIHBnX2NvbW1pdF90cyAqLwotCVtTWU5D X0hBTkRMRVJfQ09NTUlUX1RTXSA9IHsKLQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBjb21taXR0 c3N5bmNmaWxldGFnCi0JfSwKLQkvKiBwZ19tdWx0aXhhY3Qvb2Zmc2V0cyAqLwotCVtTWU5D X0hBTkRMRVJfTVVMVElYQUNUX09GRlNFVF0gPSB7Ci0JCS5zeW5jX3N5bmNmaWxldGFnID0g bXVsdGl4YWN0b2Zmc2V0c3N5bmNmaWxldGFnCi0JfSwKLQkvKiBwZ19tdWx0aXhhY3QvbWVt YmVycyAqLwotCVtTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01FTUJFUl0gPSB7Ci0JCS5zeW5j X3N5bmNmaWxldGFnID0gbXVsdGl4YWN0bWVtYmVyc3N5bmNmaWxldGFnCi0JfQogfTsKIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKaW5kZXggZTEyYmUxYjliZDguLmYwMjU1Zjg5NWM2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9tbWdyL21jeHQuYwpAQCAtNjksOSArNjksMjAgQEAgc3RhdGljIHZv aWQgTWVtb3J5Q29udGV4dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lk ICpwYXNzdGhydSwKICAqIFlvdSBzaG91bGQgbm90IGRvIG1lbW9yeSBhbGxvY2F0aW9ucyB3 aXRoaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBiZWNhdXNlCiAgKiBhbiBvdXQtb2YtbWVtb3J5 IGVycm9yIHdpbGwgYmUgZXNjYWxhdGVkIHRvIGEgUEFOSUMuIFRvIGVuZm9yY2UgdGhhdAog ICogcnVsZSwgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb25zIEFzc2VydCB0aGF0LgorICoKKyAq IEZJWE1FOiBieXBhc3MgdGhpcyBmb3IgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaW4gUmVjb3Jk VHJhbnNhY3Rpb25Db21taXQoKQorICogZm9yIG5vdy4gSXQgZG9lcyBhIGxvdCBvZiB0aGlu Z3MgdGhhdCBjYW4gYWxsb2NhdGU6CisgKiAtIGNhbGxzIFRyYW5zYWN0aW9uSWRDb21taXRU cmVlLCB3aGljaCBwaW5zIGJ1ZmZlcnMsIHdoaWNoIHJlcXVpcmVzCisgKiAgIHNwYWNlIGlu IHRoZSBSZXNvdXJjZU93bmVyIGZvciB0aGUgcGluIChSZXNvdXJjZU93bmVyRW5sYXJnZUJ1 ZmZlcnMoKSkKKyAqIC0gc2FtZSBmb3IgVHJhbnNhY3Rpb25UcmVlU2V0Q29tbWl0VHNEYXRh KCkgY2FsbC4KKyAqIC0gcmVhZGluZyBhIHBhZ2UgY2FuIHJlcXVpcmUgZmx1c2hpbmcgb3Ro ZXIgcGFnZXMsIHdoaWNoIGluIHR1cm4KKyAqICAgY2FuIGNhbGwgQ29tcGFjdENoZWNrcG9p bnRlclJlcXVlc3RRdWV1ZSgpLCB3aGljaCBhbGxvY2F0ZXMKKyAqIC0gcmVhZGluZyBhIHBh Z2UgY2FsbHMgc21ncm9wZW4oKSwgd2hpY2ggYWxsb2NhdGVzIHRoZSBTTWdyRmlsZSBlbnRy eQorICogICBpZiBpdCdzIG5vdCBvcGVuIGFscmVhZHkKICAqLwogI2RlZmluZSBBc3NlcnRO b3RJbkNyaXRpY2FsU2VjdGlvbihjb250ZXh0KSBcCi0JQXNzZXJ0KENyaXRTZWN0aW9uQ291 bnQgPT0gMCB8fCAoY29udGV4dCktPmFsbG93SW5Dcml0U2VjdGlvbikKKwlBc3NlcnQoQ3Jp dFNlY3Rpb25Db3VudCA9PSAwIHx8IChjb250ZXh0KS0+YWxsb3dJbkNyaXRTZWN0aW9uIHx8 IFwKKwkJICAgKE15UHJvYyAhPSBOVUxMICYmIChNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyAm IERFTEFZX0NIS1BUX1NUQVJUICE9IDApKSkKIAogCiAvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vcmVscGF0aC5jIGIvc3JjL2NvbW1vbi9yZWxw YXRoLmMKaW5kZXggYWU4Nzg0M2FlN2UuLjAwN2IwODk4MDQ5IDEwMDY0NAotLS0gYS9zcmMv Y29tbW9uL3JlbHBhdGguYworKysgYi9zcmMvY29tbW9uL3JlbHBhdGguYwpAQCAtMjIsNiAr MjIsMTYgQEAKICNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYmFja2VuZGlkLmgiCiAKKy8qCisgKiBTTFJVIElEIHRvIHBhdGggbWFwcGluZworICov CisjZGVmaW5lIFBHX1NMUlUoc3ltbmFtZSxuYW1lLHBhdGgsc3luY2hyb25pemUpIFwKKwlw YXRoLAorCitzdGF0aWMgY2hhciAqc2xydV9kaXJzW10gPQoreworI2luY2x1ZGUgImFjY2Vz cy9zbHJ1bGlzdC5oIgorfTsKIAogLyoKICAqIExvb2t1cCB0YWJsZSBvZiBmb3JrIG5hbWUg YnkgZm9yayBudW1iZXIuCkBAIC0xNDMsNyArMTUzLDIyIEBAIEdldFNNZ3JGaWxlUGF0aChP aWQgZGJPaWQsIE9pZCBzcGNPaWQsIFJlbEZpbGVOdW1iZXIgcmVsTnVtYmVyLAogewogCWNo YXIJICAgKnBhdGg7CiAKLQlpZiAoc3BjT2lkID09IEdMT0JBTFRBQkxFU1BBQ0VfT0lEKQor CWlmIChzcGNPaWQgPT0gU0xSVV9TUENfT0lEKQorCXsKKwkJaWYgKGRiT2lkID49IGxlbmd0 aG9mKHNscnVfZGlycykgfHwgZm9ya051bWJlciAhPSAwIHx8IGJhY2tlbmRJZCAhPSBJbnZh bGlkQmFja2VuZElkKQorCQl7CisjaWZuZGVmIEZST05URU5ECisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJIGVycm1zZygiaW52YWxpZCBTTFJVIGZpbGUgbG9jYXRvciAldS8ldS8ldS8ldS8ldSIs CisJCQkJCQkJc3BjT2lkLCBkYk9pZCwgcmVsTnVtYmVyLCBiYWNrZW5kSWQsIGZvcmtOdW1i ZXIpKSk7CisjZWxzZQorCQkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKwkJfQorCQlwYXRoID0g cHNwcmludGYoIiVzLyV1Iiwgc2xydV9kaXJzW2RiT2lkXSwgcmVsTnVtYmVyKTsKKwl9CisJ ZWxzZSBpZiAoc3BjT2lkID09IEdMT0JBTFRBQkxFU1BBQ0VfT0lEKQogCXsKIAkJLyogU2hh cmVkIHN5c3RlbSByZWxhdGlvbnMgbGl2ZSBpbiB7ZGF0YWRpcn0vZ2xvYmFsICovCiAJCUFz c2VydChkYk9pZCA9PSAwKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9jbG9n LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oCmluZGV4IDU0M2YyZTI2NDNhLi5hZjE2 YTJhZmNiOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvY2xvZy5oCkBAIC00MCwxOCArNDAsMTIgQEAgZXh0ZXJuIHZv aWQgVHJhbnNhY3Rpb25JZFNldFRyZWVTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBu c3VieGlkcywKIAkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMsIFhpZFN0YXR1 cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuKTsKIGV4dGVybiBYaWRTdGF0dXMgVHJhbnNhY3Rp b25JZEdldFN0YXR1cyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciAqbHNuKTsKIAot ZXh0ZXJuIFNpemUgQ0xPR1NobWVtQnVmZmVycyh2b2lkKTsKLWV4dGVybiBTaXplIENMT0dT aG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBDTE9HU2htZW1Jbml0KHZvaWQpOwogZXh0 ZXJuIHZvaWQgQm9vdFN0cmFwQ0xPRyh2b2lkKTsKIGV4dGVybiB2b2lkIFN0YXJ0dXBDTE9H KHZvaWQpOwogZXh0ZXJuIHZvaWQgVHJpbUNMT0codm9pZCk7Ci1leHRlcm4gdm9pZCBDaGVj a1BvaW50Q0xPRyh2b2lkKTsKIGV4dGVybiB2b2lkIEV4dGVuZENMT0coVHJhbnNhY3Rpb25J ZCBuZXdlc3RYYWN0KTsKIGV4dGVybiB2b2lkIFRydW5jYXRlQ0xPRyhUcmFuc2FjdGlvbklk IG9sZGVzdFhhY3QsIE9pZCBvbGRlc3R4aWRfZGF0b2lkKTsKIAotZXh0ZXJuIGludAljbG9n c3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7Ci0KIC8qIFhM T0cgc3R1ZmYgKi8KICNkZWZpbmUgQ0xPR19aRVJPUEFHRQkJMHgwMAogI2RlZmluZSBDTE9H X1RSVU5DQVRFCQkweDEwCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0 X3RzLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmgKaW5kZXggNzY2MmY4ZTFh OWMuLjRlOTg2ZmMwMjNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0 X3RzLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oCkBAIC0yNyw3ICsy Nyw2IEBAIGV4dGVybiBib29sIFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEoVHJhbnNh Y3Rpb25JZCB4aWQsCiBleHRlcm4gVHJhbnNhY3Rpb25JZCBHZXRMYXRlc3RDb21taXRUc0Rh dGEoVGltZXN0YW1wVHogKnRzLAogCQkJCQkJCQkJCSAgIFJlcE9yaWdpbklkICpub2RlaWQp OwogCi1leHRlcm4gU2l6ZSBDb21taXRUc1NobWVtQnVmZmVycyh2b2lkKTsKIGV4dGVybiBT aXplIENvbW1pdFRzU2htZW1TaXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgQ29tbWl0VHNTaG1l bUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBCb290U3RyYXBDb21taXRUcyh2b2lkKTsKQEAg LTQxLDggKzQwLDYgQEAgZXh0ZXJuIHZvaWQgU2V0Q29tbWl0VHNMaW1pdChUcmFuc2FjdGlv bklkIG9sZGVzdFhhY3QsCiAJCQkJCQkJIFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCk7CiBl eHRlcm4gdm9pZCBBZHZhbmNlT2xkZXN0Q29tbWl0VHNYaWQoVHJhbnNhY3Rpb25JZCBvbGRl c3RYYWN0KTsKIAotZXh0ZXJuIGludAljb21taXR0c3N5bmNmaWxldGFnKGNvbnN0IEZpbGVU YWcgKmZ0YWcsIGNoYXIgKnBhdGgpOwotCiAvKiBYTE9HIHN0dWZmICovCiAjZGVmaW5lIENP TU1JVF9UU19aRVJPUEFHRQkJMHgwMAogI2RlZmluZSBDT01NSVRfVFNfVFJVTkNBVEUJCTB4 MTAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAppbmRleCBhNTYwMGEzMjBhZS4uYTZiYmU1M2Ux YmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKQEAgLTExOCw5ICsxMTgsNiBAQCBleHRl cm4gYm9vbCBNdWx0aVhhY3RJZFByZWNlZGVzKE11bHRpWGFjdElkIG11bHRpMSwgTXVsdGlY YWN0SWQgbXVsdGkyKTsKIGV4dGVybiBib29sIE11bHRpWGFjdElkUHJlY2VkZXNPckVxdWFs cyhNdWx0aVhhY3RJZCBtdWx0aTEsCiAJCQkJCQkJCQkJTXVsdGlYYWN0SWQgbXVsdGkyKTsK IAotZXh0ZXJuIGludAltdWx0aXhhY3RvZmZzZXRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRh ZyAqZnRhZywgY2hhciAqcGF0aCk7Ci1leHRlcm4gaW50CW11bHRpeGFjdG1lbWJlcnNzeW5j ZmlsZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsKLQogZXh0ZXJuIHZv aWQgQXRFT1hhY3RfTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQXRQcmVwYXJlX011 bHRpWGFjdCh2b2lkKTsKIGV4dGVybiB2b2lkIFBvc3RQcmVwYXJlX011bHRpWGFjdChUcmFu c2FjdGlvbklkIHhpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaAppbmRleCAxMzBjNDFjODYzMi4uZWUxYjJm NDBjN2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1LmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3NscnUuaApAQCAtMSw3ICsxLDcgQEAKIC8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICoKICAqIHNscnUuaAotICoJCVNpbXBsZSBMUlUgYnVmZmVyaW5nIGZvciB0 cmFuc2FjdGlvbiBzdGF0dXMgbG9nZmlsZXMKKyAqCQlCdWZmZXJpbmcgZm9yIHRyYW5zYWN0 aW9uIHN0YXR1cyBsb2dmaWxlcwogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKQEAgLTE0LDkgKzE0LDM1IEBACiAjZGVmaW5lIFNMUlVfSAogCiAjaW5jbHVk ZSAiYWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNl X2QuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHds b2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9z eW5jLmgiCiAKKy8qIFBzZXVkbyBkYXRhYmFzZSBJRCB1c2VkIGZvciBTTFJVIGRhdGEuICov CisjZGVmaW5lIFNMUlVfU1BDX0lEIDkKKworLyogUHNldWRvIGRhdGFiYXNlIElEcyB1c2Vk IGJ5IGVhY2ggY2FjaGUuICovCisjZGVmaW5lIFBHX1NMUlUoc3ltbmFtZSxuYW1lLHBhdGgs IHN5bmNocm9uaXplKSBcCisJc3ltbmFtZSwKKwordHlwZWRlZiBlbnVtIFNscnVJZHMKK3sK KyNpbmNsdWRlICJhY2Nlc3Mvc2xydWxpc3QuaCIKKwlTTFJVX05FWFRfSUQKK30JCQlTbHJ1 SWRzOworI3VuZGVmIFBHX1NMUlUKKwordHlwZWRlZiBib29sICgqU2xydVBhZ2VQcmVjZWRl c0Z1bmN0aW9uKSAoaW50LCBpbnQpOworCitzdGF0aWMgaW5saW5lIFJlbEZpbGVMb2NhdG9y CitTbHJ1UmVsRmlsZUxvY2F0b3IodWludDMyIHNscnVfZGJfaWQsIHVpbnQzMiBzZWdtZW50 X2lkKQoreworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0ge1NMUlVfU1BDX0lELCBzbHJ1 X2RiX2lkLCBzZWdtZW50X2lkfTsKKwlyZXR1cm4gcmxvY2F0b3I7Cit9CisKIAogLyoKICAq IERlZmluZSBTTFJVIHNlZ21lbnQgc2l6ZS4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1og YXMgaXMgdXNlZCBldmVyeXdoZXJlCkBAIC0zMywxNDIgKzU5LDQwIEBACiAgKi8KICNkZWZp bmUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVAkzMgogCi0vKgotICogUGFnZSBzdGF0dXMgY29k ZXMuICBOb3RlIHRoYXQgdGhlc2UgZG8gbm90IGluY2x1ZGUgdGhlICJkaXJ0eSIgYml0Lgot ICogcGFnZV9kaXJ0eSBjYW4gYmUgdHJ1ZSBvbmx5IGluIHRoZSBWQUxJRCBvciBXUklURV9J Tl9QUk9HUkVTUyBzdGF0ZXM7Ci0gKiBpbiB0aGUgbGF0dGVyIGNhc2UgaXQgaW1wbGllcyB0 aGF0IHRoZSBwYWdlIGhhcyBiZWVuIHJlLWRpcnRpZWQgc2luY2UKLSAqIHRoZSB3cml0ZSBz dGFydGVkLgotICovCi10eXBlZGVmIGVudW0KLXsKLQlTTFJVX1BBR0VfRU1QVFksCQkJLyog YnVmZmVyIGlzIG5vdCBpbiB1c2UgKi8KLQlTTFJVX1BBR0VfUkVBRF9JTl9QUk9HUkVTUywg LyogcGFnZSBpcyBiZWluZyByZWFkIGluICovCi0JU0xSVV9QQUdFX1ZBTElELAkJCS8qIHBh Z2UgaXMgdmFsaWQgYW5kIG5vdCBiZWluZyB3cml0dGVuICovCi0JU0xSVV9QQUdFX1dSSVRF X0lOX1BST0dSRVNTIC8qIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiBvdXQgKi8KLX0gU2xydVBh Z2VTdGF0dXM7Ci0KLS8qCi0gKiBTaGFyZWQtbWVtb3J5IHN0YXRlCi0gKi8KLXR5cGVkZWYg c3RydWN0IFNscnVTaGFyZWREYXRhCi17Ci0JTFdMb2NrCSAgICpDb250cm9sTG9jazsKLQot CS8qIE51bWJlciBvZiBidWZmZXJzIG1hbmFnZWQgYnkgdGhpcyBTTFJVIHN0cnVjdHVyZSAq LwotCWludAkJCW51bV9zbG90czsKLQotCS8qCi0JICogQXJyYXlzIGhvbGRpbmcgaW5mbyBm b3IgZWFjaCBidWZmZXIgc2xvdC4gIFBhZ2UgbnVtYmVyIGlzIHVuZGVmaW5lZAotCSAqIHdo ZW4gc3RhdHVzIGlzIEVNUFRZLCBhcyBpcyBwYWdlX2xydV9jb3VudC4KLQkgKi8KLQljaGFy CSAgKipwYWdlX2J1ZmZlcjsKLQlTbHJ1UGFnZVN0YXR1cyAqcGFnZV9zdGF0dXM7Ci0JYm9v bAkgICAqcGFnZV9kaXJ0eTsKLQlpbnQJCSAgICpwYWdlX251bWJlcjsKLQlpbnQJCSAgICpw YWdlX2xydV9jb3VudDsKLQlMV0xvY2tQYWRkZWQgKmJ1ZmZlcl9sb2NrczsKLQotCS8qCi0J ICogT3B0aW9uYWwgYXJyYXkgb2YgV0FMIGZsdXNoIExTTnMgYXNzb2NpYXRlZCB3aXRoIGVu dHJpZXMgaW4gdGhlIFNMUlUKLQkgKiBwYWdlcy4gIElmIG5vdCB6ZXJvL05VTEwsIHdlIG11 c3QgZmx1c2ggV0FMIGJlZm9yZSB3cml0aW5nIHBhZ2VzICh0cnVlCi0JICogZm9yIHBnX3hh Y3QsIGZhbHNlIGZvciBtdWx0aXhhY3QsIHBnX3N1YnRyYW5zLCBwZ19ub3RpZnkpLiAgZ3Jv dXBfbHNuW10KLQkgKiBoYXMgbHNuX2dyb3Vwc19wZXJfcGFnZSBlbnRyaWVzIHBlciBidWZm ZXIgc2xvdCwgZWFjaCBjb250YWluaW5nIHRoZQotCSAqIGhpZ2hlc3QgTFNOIGtub3duIGZv ciBhIGNvbnRpZ3VvdXMgZ3JvdXAgb2YgU0xSVSBlbnRyaWVzIG9uIHRoYXQgc2xvdCdzCi0J ICogcGFnZS4KLQkgKi8KLQlYTG9nUmVjUHRyICpncm91cF9sc247Ci0JaW50CQkJbHNuX2dy b3Vwc19wZXJfcGFnZTsKLQotCS8qLS0tLS0tLS0tLQotCSAqIFdlIG1hcmsgYSBwYWdlICJt b3N0IHJlY2VudGx5IHVzZWQiIGJ5IHNldHRpbmcKLQkgKgkJcGFnZV9scnVfY291bnRbc2xv dG5vXSA9ICsrY3VyX2xydV9jb3VudDsKLQkgKiBUaGUgb2xkZXN0IHBhZ2UgaXMgdGhlcmVm b3JlIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCB2YWx1ZSBvZgotCSAqCQljdXJfbHJ1X2Nv dW50IC0gcGFnZV9scnVfY291bnRbc2xvdG5vXQotCSAqIFRoZSBjb3VudHMgd2lsbCBldmVu dHVhbGx5IHdyYXAgYXJvdW5kLCBidXQgdGhpcyBjYWxjdWxhdGlvbiBzdGlsbAotCSAqIHdv cmtzIGFzIGxvbmcgYXMgbm8gcGFnZSdzIGFnZSBleGNlZWRzIElOVF9NQVggY291bnRzLgot CSAqLS0tLS0tLS0tLQotCSAqLwotCWludAkJCWN1cl9scnVfY291bnQ7Ci0KLQkvKgotCSAq IGxhdGVzdF9wYWdlX251bWJlciBpcyB0aGUgcGFnZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQg ZW5kIG9mIHRoZSBsb2c7Ci0JICogdGhpcyBpcyBub3QgY3JpdGljYWwgZGF0YSwgc2luY2Ug d2UgdXNlIGl0IG9ubHkgdG8gYXZvaWQgc3dhcHBpbmcgb3V0Ci0JICogdGhlIGxhdGVzdCBw YWdlLgotCSAqLwotCWludAkJCWxhdGVzdF9wYWdlX251bWJlcjsKLQotCS8qIFNMUlUncyBp bmRleCBmb3Igc3RhdGlzdGljcyBwdXJwb3NlcyAobWlnaHQgbm90IGJlIHVuaXF1ZSkgKi8K LQlpbnQJCQlzbHJ1X3N0YXRzX2lkeDsKLX0gU2xydVNoYXJlZERhdGE7Ci0KLXR5cGVkZWYg U2xydVNoYXJlZERhdGEgKlNscnVTaGFyZWQ7Ci0KLS8qCi0gKiBTbHJ1Q3RsRGF0YSBpcyBh biB1bnNoYXJlZCBzdHJ1Y3R1cmUgdGhhdCBwb2ludHMgdG8gdGhlIGFjdGl2ZSBpbmZvcm1h dGlvbgotICogaW4gc2hhcmVkIG1lbW9yeS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgU2xydUN0 bERhdGEKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZDsKLQotCS8qCi0JICogV2hpY2ggc3luYyBo YW5kbGVyIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIGhhbmRpbmcgc3luYyByZXF1ZXN0cyBvdmVy IHRvCi0JICogdGhlIGNoZWNrcG9pbnRlci4gIFNZTkNfSEFORExFUl9OT05FIHRvIGRpc2Fi bGUgZnN5bmMgKGVnIHBnX25vdGlmeSkuCi0JICovCi0JU3luY1JlcXVlc3RIYW5kbGVyIHN5 bmNfaGFuZGxlcjsKLQotCS8qCi0JICogRGVjaWRlIHdoZXRoZXIgYSBwYWdlIGlzICJvbGRl ciIgZm9yIHRydW5jYXRpb24gYW5kIGFzIGEgaGludCBmb3IKLQkgKiBldmljdGluZyBwYWdl cyBpbiBMUlUgb3JkZXIuICBSZXR1cm4gdHJ1ZSBpZiBldmVyeSBlbnRyeSBvZiB0aGUgZmly c3QKLQkgKiBhcmd1bWVudCBpcyBvbGRlciB0aGFuIGV2ZXJ5IGVudHJ5IG9mIHRoZSBzZWNv bmQgYXJndW1lbnQuICBOb3RlIHRoYXQKLQkgKiAhUGFnZVByZWNlZGVzKGEsYikgJiYgIVBh Z2VQcmVjZWRlcyhiLGEpIG5lZWQgbm90IGltcGx5IGE9PWI7IGl0IGFsc28KLQkgKiBhcmlz ZXMgd2hlbiBzb21lIGVudHJpZXMgYXJlIG9sZGVyIGFuZCBzb21lIGFyZSBub3QuICBGb3Ig U0xSVXMgdXNpbmcKLQkgKiBTaW1wbGVMcnVUcnVuY2F0ZSgpLCB0aGlzIG11c3QgdXNlIG1v ZHVsYXIgYXJpdGhtZXRpYy4gIChGb3Igb3RoZXJzLAotCSAqIHRoZSBiZWhhdmlvciBvZiB0 aGlzIGNhbGxiYWNrIGhhcyBubyBmdW5jdGlvbmFsIGltcGxpY2F0aW9ucy4pICBVc2UKLQkg KiBTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKCkgaW4gU0xSVXMgbWVldGluZyBpdHMgY3Jp dGVyaWEuCi0JICovCi0JYm9vbAkJKCpQYWdlUHJlY2VkZXMpIChpbnQsIGludCk7Ci0KLQkv KgotCSAqIERpciBpcyBzZXQgZHVyaW5nIFNpbXBsZUxydUluaXQgYW5kIGRvZXMgbm90IGNo YW5nZSB0aGVyZWFmdGVyLiBTaW5jZQotCSAqIGl0J3MgYWx3YXlzIHRoZSBzYW1lLCBpdCBk b2Vzbid0IG5lZWQgdG8gYmUgaW4gc2hhcmVkIG1lbW9yeS4KLQkgKi8KLQljaGFyCQlEaXJb NjRdOwotfSBTbHJ1Q3RsRGF0YTsKLQotdHlwZWRlZiBTbHJ1Q3RsRGF0YSAqU2xydUN0bDsK LQotCi1leHRlcm4gU2l6ZSBTaW1wbGVMcnVTaG1lbVNpemUoaW50IG5zbG90cywgaW50IG5s c25zKTsKLWV4dGVybiB2b2lkIFNpbXBsZUxydUluaXQoU2xydUN0bCBjdGwsIGNvbnN0IGNo YXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKLQkJCQkJCSAgTFdMb2NrICpjdGxs b2NrLCBjb25zdCBjaGFyICpzdWJkaXIsIGludCB0cmFuY2hlX2lkLAotCQkJCQkJICBTeW5j UmVxdWVzdEhhbmRsZXIgc3luY19oYW5kbGVyKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1WmVy b1BhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pOwotZXh0ZXJuIGludAlTaW1wbGVMcnVS ZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKLQkJCQkJ CQkgIFRyYW5zYWN0aW9uSWQgeGlkKTsKLWV4dGVybiBpbnQJU2ltcGxlTHJ1UmVhZFBhZ2Vf UmVhZE9ubHkoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sCi0JCQkJCQkJCQkgICBUcmFuc2Fj dGlvbklkIHhpZCk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVXcml0ZVBhZ2UoU2xydUN0bCBj dGwsIGludCBzbG90bm8pOwotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0 bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNL SU5HCi1leHRlcm4gdm9pZCBTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVDdGwgY3Rs LCBpbnQgcGVyX3BhZ2UpOworZXh0ZXJuIHZvaWQgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0 cyhTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJCQkJICBp bnQgcGVyX3BhZ2UpOwogI2Vsc2UKICNkZWZpbmUgU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0 cyhjdGwsIHBlcl9wYWdlKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgotZXh0ZXJuIHZvaWQg U2ltcGxlTHJ1VHJ1bmNhdGUoU2xydUN0bCBjdGwsIGludCBjdXRvZmZQYWdlKTsKLWV4dGVy biBib29sIFNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTbHJ1Q3RsIGN0bCwgaW50 IHBhZ2Vubyk7CitleHRlcm4gdm9pZCBTaW1wbGVMcnVUcnVuY2F0ZShpbnQgc2xydV9pZCwg U2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkgIGludCBj dXRvZmZQYWdlKTsKK2V4dGVybiBib29sIFNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlz dChpbnQgc2xydV9pZCwgaW50IHBhZ2Vubyk7CiAKLXR5cGVkZWYgYm9vbCAoKlNscnVTY2Fu Q2FsbGJhY2spIChTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLAor dHlwZWRlZiBib29sICgqU2xydVNjYW5DYWxsYmFjaykgKGludCBzbHJ1X2lkLAorCQkJCQkJ CQkgIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCSAg Y2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLAogCQkJCQkJCQkgIHZvaWQgKmRhdGEpOwot ZXh0ZXJuIGJvb2wgU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0bCBjdGwsIFNscnVTY2FuQ2Fs bGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpOwotZXh0ZXJuIHZvaWQgU2xydURlbGV0ZVNl Z21lbnQoU2xydUN0bCBjdGwsIGludCBzZWdubyk7Ci0KLWV4dGVybiBpbnQJU2xydVN5bmNG aWxlVGFnKFNscnVDdGwgY3RsLCBjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKTsK K2V4dGVybiBib29sIFNscnVTY2FuRGlyZWN0b3J5KGludCBzbHJ1X2lkLCBTbHJ1UGFnZVBy ZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJCSAgU2xydVNjYW5DYWxsYmFj ayBjYWxsYmFjaywgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCBTbHJ1RGVsZXRlU2VnbWVu dChpbnQgc2xydV9pZCwgaW50IHNlZ25vKTsKIAogLyogU2xydVNjYW5EaXJlY3RvcnkgcHVi bGljIGNhbGxiYWNrcyAqLwotZXh0ZXJuIGJvb2wgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNl bmNlKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwKK2V4dGVybiBib29sIFNscnVTY2Fu RGlyQ2JSZXBvcnRQcmVzZW5jZShpbnQgc2xydV9pZCwKKwkJCQkJCQkJCQlTbHJ1UGFnZVBy ZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkJCQkJCWNoYXIgKmZpbGVuYW1l LAogCQkJCQkJCQkJCWludCBzZWdwYWdlLCB2b2lkICpkYXRhKTsKLWV4dGVybiBib29sIFNs cnVTY2FuRGlyQ2JEZWxldGVBbGwoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQg c2VncGFnZSwKK2V4dGVybiBib29sIFNscnVTY2FuRGlyQ2JEZWxldGVBbGwoaW50IHNscnVf aWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCSAg IGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwKIAkJCQkJCQkJICAgdm9pZCAqZGF0YSk7 CiAKKy8qIEJ1ZmZlciBhY2Nlc3MgKi8KK2V4dGVybiBCdWZmZXIgUmVhZFNscnVCdWZmZXIo aW50IHNscnVfaWQsIGludCBwYWdlbm8pOworZXh0ZXJuIEJ1ZmZlciBaZXJvU2xydUJ1ZmZl cihpbnQgc2xydV9pZCwgaW50IHBhZ2Vubyk7CitleHRlcm4gYm9vbCBQcm9iZVNscnVCdWZm ZXIoaW50IHNscnVfaWQsIGludCBwYWdlbm8pOworCisvKiBJbnRlcmZhY2VzIHVzZSBieSBz dGF0cyB2aWV3ICovCitleHRlcm4gT2lkIFNscnVSZWxJZEJ5TmFtZShjb25zdCBjaGFyICpu YW1lKTsKK2V4dGVybiBjb25zdCBjaGFyICpTbHJ1TmFtZShpbnQgc2xydV9pZCk7CisKICNl bmRpZgkJCQkJCQkvKiBTTFJVX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9zbHJ1bGlzdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVsaXN0LmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMxMjg5YTEzMjZjCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVsaXN0LmgKQEAgLTAsMCArMSwzMCBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHNscnVsaXN0LmgKKyAqCisgKiBUaGUg U0xSVSBsaXN0IGlzIGtlcHQgaW4gaXRzIG93biBzb3VyY2UgZmlsZSBmb3IgcG9zc2libGUK KyAqIHVzZSBieSBhdXRvbWF0aWMgdG9vbHMuICBUaGUgZXhhY3QgcmVwcmVzZW50YXRpb24g b2YgYSBybWdyIGlzIGRldGVybWluZWQKKyAqIGJ5IHRoZSBQR19TTFJVIG1hY3JvLCB3aGlj aCBpcyBub3QgZGVmaW5lZCBpbiB0aGlzIGZpbGU7IGl0IGNhbiBiZQorICogZGVmaW5lZCBi eSB0aGUgY2FsbGVyIGZvciBzcGVjaWFsIHB1cnBvc2VzLgorICoKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xy dWxpc3QuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiB0aGVyZSBpcyBk ZWxpYmVyYXRlbHkgbm90IGFuICNpZm5kZWYgU0xSVUxJU1RfSCBoZXJlICovCisKKy8qCisg KiBMaXN0IG9mIFNMUlUgZW50cmllcy4gIE5vdGUgdGhhdCBvcmRlciBvZiBlbnRyaWVzIGRl ZmluZXMgdGhlCisgKiBudW1lcmljYWwgdmFsdWVzIG9mIGVhY2ggU0xSVSdzIElELCB3aGlj aCBpcyB1c2VkIGluIGluLW1lbW9yeSBzdHJ1Y3R1cy4KKyAqLworCisvKiBzeW1ib2wgbmFt ZSwgdGV4dHVhbCBuYW1lLCBwYXRoLCBzeW5jaHJvbml6ZSAqLworUEdfU0xSVShTTFJVX0NM T0dfSUQsICJYYWN0IiwgInBnX3hhY3QiLCB0cnVlKQorUEdfU0xSVShTTFJVX1NVQlRSQU5T X0lELCAiU3VidHJhbnMiLCAicGdfc3VidHJhbnMiLCBmYWxzZSkKK1BHX1NMUlUoU0xSVV9N VUxUSVhBQ1RfT0ZGU0VUX0lELCAiTXVsdGlYYWN0T2Zmc2V0IiwgInBnX211bHRpeGFjdC9v ZmZzZXRzIiwgdHJ1ZSkKK1BHX1NMUlUoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCAiTXVs dGlYYWN0TWVtYmVyIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIiwgdHJ1ZSkKK1BHX1NMUlUo U0xSVV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsICJwZ19jb21taXRfdHMiLCB0cnVlKQor UEdfU0xSVShTTFJVX1NFUklBTF9JRCwgIlNlcmlhbCIsICJwZ19zZXJpYWwiLCBmYWxzZSkK K1BHX1NMUlUoU0xSVV9OT1RJRllfSUQsICJOb3RpZnkiLCAicGdfbm90aWZ5IiwgZmFsc2Up CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9zdWJ0cmFucy5oCmluZGV4IGY5NGUxMTY2NDBiLi40Njg1YTA1YmM5MiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmgKQEAgLTE4LDExICsxOCw4IEBAIGV4dGVybiB2b2lk IFN1YlRyYW5zU2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHBh cmVudCk7CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2Fj dGlvbklkIHhpZCk7CiBleHRlcm4gVHJhbnNhY3Rpb25JZCBTdWJUcmFuc0dldFRvcG1vc3RU cmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCk7CiAKLWV4dGVybiBTaXplIFNVQlRSQU5T U2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgU1VCVFJBTlNTaG1lbUluaXQodm9pZCk7 CiBleHRlcm4gdm9pZCBCb290U3RyYXBTVUJUUkFOUyh2b2lkKTsKIGV4dGVybiB2b2lkIFN0 YXJ0dXBTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdEFjdGl2ZVhJRCk7Ci1leHRlcm4g dm9pZCBDaGVja1BvaW50U1VCVFJBTlModm9pZCk7CiBleHRlcm4gdm9pZCBFeHRlbmRTVUJU UkFOUyhUcmFuc2FjdGlvbklkIG5ld2VzdFhhY3QpOwogZXh0ZXJuIHZvaWQgVHJ1bmNhdGVT VUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QpOwogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jb21tb24vcmVscGF0aC5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGgu aAppbmRleCBiZTkyOTgwZmIzNC4uMWVkMGM4ZWQxMjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NvbW1vbi9yZWxwYXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGgu aApAQCAtNTYsNiArNTYsOSBAQCB0eXBlZGVmIGVudW0gRm9ya051bWJlcgogCiAjZGVmaW5l IEZPUktOQU1FQ0hBUlMJNAkJLyogbWF4IGNoYXJzIGZvciBhIGZvcmsgbmFtZSAqLwogCisv KiBQc2V1ZG8gdGFibGVzcGFjZSBJRCB1c2VkIGZvciBTTFJVcy4gKi8KKyNkZWZpbmUgU0xS VV9TUENfT0lEIDkKKwogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0IGZv cmtOYW1lc1tdOwogCiBleHRlcm4gRm9ya051bWJlciBmb3JrbmFtZV90b19udW1iZXIoY29u c3QgY2hhciAqZm9ya05hbWUpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9i dWZfaW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaApp bmRleCA0ZTIzMmU1ZDc5NC4uYTkzYTc3NzFjYTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVm X2ludGVybmFscy5oCkBAIC0yMzAsNiArMjMwLDExIEBAIHR5cGVkZWYgdW5pb24gQnVmZmVy RGVzY1BhZGRlZAogI2RlZmluZSBCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYmRl c2MpIFwKIAkoKExXTG9jayopICgmKGJkZXNjKS0+Y29udGVudF9sb2NrKSkKIAorI2RlZmlu ZSBCdWZmZXJHZXRFeHRlcm5hbExTTihidWZIZHIpIFwKKwlCdWZmZXJFeHRlcm5hbExTTnNb KGJ1ZkhkciktPmJ1Zl9pZF0KKyNkZWZpbmUgQnVmZmVyU2V0RXh0ZXJuYWxMU04oYnVmSGRy LCBsc24pIFwKKwlCdWZmZXJFeHRlcm5hbExTTnNbKGJ1ZkhkciktPmJ1Zl9pZF0gPSAobHNu KQorCiBleHRlcm4gUEdETExJTVBPUlQgQ29uZGl0aW9uVmFyaWFibGVNaW5pbWFsbHlQYWRk ZWQgKkJ1ZmZlcklPQ1ZBcnJheTsKIAogLyoKQEAgLTI3Niw2ICsyODEsNyBAQCB0eXBlZGVm IHN0cnVjdCBXcml0ZWJhY2tDb250ZXh0CiAKIC8qIGluIGJ1Zl9pbml0LmMgKi8KIGV4dGVy biBQR0RMTElNUE9SVCBCdWZmZXJEZXNjUGFkZGVkICpCdWZmZXJEZXNjcmlwdG9yczsKK2V4 dGVybiBQR0RMTElNUE9SVCBYTG9nUmVjUHRyICpCdWZmZXJFeHRlcm5hbExTTnM7CiBleHRl cm4gUEdETExJTVBPUlQgV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4 dDsKIAogLyogaW4gbG9jYWxidWYuYyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggODk3 ZjI4OTM4NjAuLmU1OTU3YzU5NjVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKQEAgLTExNSwx MyArMTE1LDE5IEBAIGV4dGVybiBCdWZmZXIgUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwKIAkJCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0s IEJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJCQkJCQkJCVJlYWRCdWZmZXJNb2RlIG1vZGUs IEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJCWJvb2wgcGVybWFu ZW50KTsKK2V4dGVybiBCdWZmZXIgUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZVdpdGhIaXQo UmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsCisJCQkJCQkJCQkJRm9ya051bWJlciBmb3JrTnVt LCBCbG9ja051bWJlciBibG9ja051bSwKKwkJCQkJCQkJCQlSZWFkQnVmZmVyTW9kZSBtb2Rl LCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCQkJICAgYm9vbCBw ZXJtYW5lbnQsIGJvb2wgKmhpdCk7CiBleHRlcm4gdm9pZCBSZWxlYXNlQnVmZmVyKEJ1ZmZl ciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2NrUmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVm ZmVyKTsKIGV4dGVybiB2b2lkIE1hcmtCdWZmZXJEaXJ0eShCdWZmZXIgYnVmZmVyKTsKIGV4 dGVybiB2b2lkIEluY3JCdWZmZXJSZWZDb3VudChCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiBC dWZmZXIgUmVsZWFzZUFuZFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlciwgUmVsYXRpb24gcmVs YXRpb24sCiAJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrTnVtKTsKLQorZXh0ZXJuIGJv b2wgQnVmZmVyUHJvYmUoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a051bSwKKwkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrTnVtKTsKKyAKIGV4dGVybiB2b2lkIElu aXRCdWZmZXJQb29sKHZvaWQpOwogZXh0ZXJuIHZvaWQgSW5pdEJ1ZmZlclBvb2xBY2Nlc3Mo dm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9CdWZmZXJzKGJvb2wgaXNDb21taXQpOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL3NtZ3IuaAppbmRleCAxMzBlNTkyNDFlMy4uMGVkNTY5YjI4MzYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2Uvc21nci5oCkBAIC0xMjMsNiArMTIzLDcgQEAgZXh0ZXJuIHZvaWQgc21ncndyaXRlYmFj ayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIGV4dGVybiBCbG9ja051bWJlciBzbWdybmJsb2Nr cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CiBleHRlcm4gQmxvY2tOdW1iZXIgc21ncm5ibG9j a3NfY2FjaGVkKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKIGV4dGVybiB2b2lkIHNtZ3JpbW1l ZHN5bmMoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgc21ncnVubGluayhT TWdyRmlsZUhhbmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pOwogCiBleHRlcm4gdm9pZCBzbWdy dHJ1bmNhdGVfbXVsdGkoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNr ZW5kLCBGb3JrTnVtYmVyICpmb3JrcywgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5ibG9j a3MpOwogZXh0ZXJuIHZvaWQgc21ncnVubGlua19tdWx0aShSZWxGaWxlTG9jYXRvciBybG9j YXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZvcmtOdW1iZXIgKmZvcmtzLCBpbnQgbmZvcmtz LCBib29sIGlzUmVkbyk7Ci0tIAoyLjMwLjIKCg== --------------ZE0vKShhXkyE3BnngRBSgBaH--