Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vhcZO-002vGD-0r for pgsql-hackers@arkaria.postgresql.org; Sun, 18 Jan 2026 23:52:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vhcZL-00B0fM-2S for pgsql-hackers@arkaria.postgresql.org; Sun, 18 Jan 2026 23:52:32 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vhcZK-00B0fE-37 for pgsql-hackers@lists.postgresql.org; Sun, 18 Jan 2026 23:52:31 +0000 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vhcZH-001Ez9-2M for pgsql-hackers@lists.postgresql.org; Sun, 18 Jan 2026 23:52:30 +0000 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-432dc56951eso2510893f8f.0 for ; Sun, 18 Jan 2026 15:52:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1768780346; cv=none; d=google.com; s=arc-20240605; b=TCcQyjCMRdP/2rOy+Dt76azm/laKXB+agvP4klVfU8/5CtQ76jNGHFBfliIUbg4T1w +vonknLD5Cgbtbdodj9XwAYFjZ0sKjEdj1eMjBdzCZv7IuTgvmOwrQLU8egZ137a0NQW naO2kisbTDdNzYwO0INGLZoKfKtM02697jRD2F+kwy7/oV5aOUsSsgbN3qzHS0hjZBkK V2wXncPGKvV6qk5HdrIr/ayofm+WVROqZmr0U+KsefDGiwUl21ciP2xv925q/AM/keqV FT1k9pq6Y/iG3TYpbxQDM34rZJS4DXbXfPFNepCFYBtdKceBffhkdl4L3jauyP8Kau/T q91A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=D1xeoXOUpVNu1M24zdmTAG9GsZ+LxDrAf6y+b82buF4=; fh=dFOPUwj093EfuYYUm+Zs6Crn9zTz0xx6UiecMG/ZIVc=; b=ELsBA+2sSvFASkL12eA51DR1dTk/rZJSLd5xODEWi/Ewv8q8k3fdWgll3cXTDB413Q 5UqDLZg9BEwpTCYf//8dQ0yUpQ4tSTsdjd1yLUuTU4yD/x987dqViwofi8fgKssOXN82 yOS0QlZrn7lBZ4ByjWS1TpgNZq5C5sjK1kYrBLub/tjH3e0qyPOz6IKI6mfS8nRtJIxO 9ZQF4K+/DzJAluRac03/pvZs1Bk5Dwg+cVST7X/v3XFIBiPd/303FNb7Lr/Ru2WNg4yu jpvjqMDNVpq/3yj5Jw9ddviCGLE7n6Qy0bIRVqG5ipe2m09u1xQTo682BPS2nwmNqMTB QOXA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1768780346; x=1769385146; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=D1xeoXOUpVNu1M24zdmTAG9GsZ+LxDrAf6y+b82buF4=; b=dixtfaDexnJ8v5YE0oJ8R9+ju436JUMUtn23siJl4WusXyykDLhZCah0Sdjpw90SCt lV2jm/PGyS7R2RIk5bWgSXyDvIxemxfzIpGC4UxXnzN644lyOPq/alunUzmg38ER7JcL w7Wb+GcsDNUizv5KItoQVzOTLL0u9y7rqE3LiQr3W6BxYgtFMndZsxGKxc8CL9qcKac8 DPvC5sHkG1g+lINc3m/zF4KawaWyO2ADX0+JsL1zKvoCqLWQ8jnNDkAl1GThc05l1AJx C/1TjHCSqcFzR0rtC5DtiOPmYwvexK4jyNjcDOH6oURAKlSbTp0rCuojcDKiNoaqw3Ix I6oQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768780346; x=1769385146; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=D1xeoXOUpVNu1M24zdmTAG9GsZ+LxDrAf6y+b82buF4=; b=OD0cnmTZRmzH2pv/PNwfPyUIg+/yIRWGQuMh48BEIEKkbFOk5iVTJVMGkAJnN7k33z x5TWDwhcleI4mdf4bShz+kSnlTOM6aYLFcZfcopDHgKjv49m3HbES6XuiFqyI2F7Xj00 ZrqCnSVBK5rFFYIb7KHmER+KyiqqWLQDD0PiUOGLgMo2lIOVi5Qps48HmBxozHLvqrgs KFaScYeQzyXOQ84YHelZThcpwfDIVBm3zI9fuHAbgZUQ0/4BholCo39EI/K3KUoJP5lA Nn0R8qmNKRxqe0xP6dxw/8QQyHQq55P9b17OB9HY+SHWCf+/yJlnJqpsKRr58NmUPRvb OssQ== X-Forwarded-Encrypted: i=1; AJvYcCUcDIwx6dvC/mFb2kM8kocNF3cxpDuWnkGMTKF+22+aPbn11PlMYz/fOzh6u68y0cXtNueYj+DYfsf8C1We@lists.postgresql.org X-Gm-Message-State: AOJu0YytsgO4Lgs2BVfznFeZR++JPXxC4U78c5noIfpvB7cuL/Ngen7G n0tFkJPY6T3bUcttAjmAd4SikRp3/hmSnG8R8YcIze72n567ivhvLZi/fuotwT/w8Wx3v97AE5Q GcLInY09wtJpX04PIOm7hmezaCOTE42F6YHhGP2jPVQ== X-Gm-Gg: AY/fxX6RFXLBmYIkrHy4tzFEDhoURf7NBPSholmlJo9MitGi4ILYBzjRxdafKbtLNIy XkREY8kqKE1dNFjO1KY6nUM6PGCHyeNaVJatsK0jn3VoqWaXyZmNzrwuEHfVISzSZTyMuB2PKSN FpOFEOGNXUwxFdB00QHXCQxcpJphAztoJkzDdGNYi3rv68aoA14HOsK6qCMN1KqGSJflylXNomw BFk6KbL0pCSNcQLG9YdjbGmY9hN+5oPb4zf3xTJtOdINUqwX6Rxm0GtLK6Wv76QjuigEw4= X-Received: by 2002:a05:6000:400d:b0:434:24ae:f682 with SMTP id ffacd0b85a97d-4356996f270mr12803282f8f.11.1768780345614; Sun, 18 Jan 2026 15:52:25 -0800 (PST) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Sun, 18 Jan 2026 18:51:58 -0500 X-Gm-Features: AZwV_QhVb9yZP-THz02pUp40loj5tRM_VPLo3g9W-_fLyatXSHWF9Ac6W0kblyA Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="0000000000002fd78b0648b24456" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002fd78b0648b24456 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Jan 13, 2026 at 3:36=E2=80=AFPM Peter Geoghegan wrote: > The batch stopped applying again. Attached is v7. Attached is v8. A lot has changed in just the past week. We're feeling optimistic about getting I/O prefetching into Postgres 19, and so we've decided to fully commit ourselves to that. All of the remaining kludges that we've relied on up until now have either been removed, or replaced with a principled approach. Notable changes in this v8 compared to v7: * We no longer "reset" the read stream to deal with exhaustion of the available slots for batches. We now rely on a patch of Thomas Munro's [1] to pause the read stream from within the new heapam callback, in the event of running out of batch slots. When this happens we pause only for as long as it takes for the scan to return enough items to make the scan need to advance scanPos to the next batch in the ring buffer (obviously, this next batch must be already loaded in this scenario). At that point we'll resume the read stream, which will once again be able to call amgetbatch to store another batch in the just-freed slot. Running out of batch slots like this happens rarely, so it's important to have a reasonably simple and elegant solution. Which this seems to be. Importantly, there's no "ping ponging" behavior here. * Removed grotty heuristics in our read stream call back to avoid regressio= ns. These first appeared many months ago, and no longer appear to be necessary. There's still some regressions with pathological cases, but they seem to be well within acceptable bounds. I saw about a 10% remaining increase in query execution time for an adversarially crafted query that Tomas came up with back in August [2]. That query provided the original justification for my inventing those heuristics. * We now have a real strategy around resource management and buffer pins. A concern long held by Andres (and others) was that holding on to many index leaf page buffer pins would somehow conflict with read stream's careful management of heap page buffer pins [3]. We were particularly concerned about hard to hit cases where the read stream is somehow limited by recently acquired buffer pins for index pages. This was probably the thing that made me most doubtful about our ability to get the prefetching patch in shape for Postgres 19. But that's completely changed in just the past week. Dropping leaf page buffer pins during index-only scans ------------------------------------------------------ I realized (following a point made by Matthias van de Meent during a private call) that it simply isn't necessary for index pages to hold on to buffer pins, in general. We haven't actually done that with nbtree plain index scans with MVCC snapshots since 2015's commit 2ed5b87f, which added what we now call nbtree's dropPin optimization. What if we could find a way to teach *every* amgetbatch-supporting index AM to do the same trick for *all* scans (barring non-MVCC snapshot scans)? Including index-only scans and scans of unlogged relations? Then we'd have zero chance of unintended interactions with the read stream; there'd simply be no extra buffer pins that might confuse the read stream in the first place! Matthias told me that his patch to fix the bugs in GiST index-only scans works by not dropping a pin on a GiST leaf page right away. It delays dropping such pins, but only very slightly: if we cache visibility information from the VM (which we're doing already in the amgetbatch patch, and which Matthias' patch does too), and delay dropping a batch's leaf page pin until after its VM cache is loaded, it reliably avoids races of the kind that we need to be worried about here. In short, we can eagerly drop buffer pins during index-only scans in the same way (or virtually the same way) that we've long been able to with nbtree plain index scans thanks to nbtree's dropPin optimization. The race in question involves VACUUM concurrently setting a VM page all visible on a heap page with a TID that is also recycled by VACUUM (as it sets its page all-visible). We can safely allow VACUUM to go ahead with this while still dropping our pin early -- provided we build our local cache of visibility information first. Holding on to a leaf page pin while reading from the VM suffices. The important principle is that our local cache of VM info is (and will remain) consistent with what we saw on the index page when we saved its matching TIDs into a batch. (It doesn't matter that we do heap fetches for now-all-visible pages, because they cannot possibly be visible to the scan's MVCC snapshot. Just like in the plain index scan dropPin case. And rather like bitmap index scans.) v8-0003-Add-batching-interfaces-used-by-heapam-and-nbtree.patch has a new isolation test that demonstrates the new "drop pins eagerly during index-only scans" behavior, which is named index-only-scan-visibility.spec. The isolation test is a variant of the one I posted on the GiST thread, which proved that GiST is broken here (a problem that Matthias is working on fixing). If you attempt to run = this isolation test on master, it'll block forever; VACUUM can never acquire a cleanup lock due to a conflicting buffer pin held by an index-only scan. That doesn't happen with v8 of the patch, though; it completes in less than 20ms on my system (and the scan actually gives correct results!). This still leaves non-MVCC snapshot scans. There's nothing we can do to avoid holding on to a leaf page buffer pin while accessing the heap there. But that's okay; now we just refuse to do I/O prefetching during such scans. Dropping leaf page buffer pins during scans of an unlogged relation ------------------------------------------------------------------- Another thing that hinders nbtree's dropPin optimization (and that we must deal with to get a guarantee that leaf page buffer pins never really need to be kept around) is the use of an unlogged relation. That breaks dropPin's approach to detecting unsafe concurrent TID recycling when marking dead items LP_DEAD on index pages, since that involves stashing a page LSN, and then checking if it has changed later on. We solve that problem by introducing GiST style "fake LSNs" to both ntbree and hash. Now the same LSN trick works for unlogged relations, too. We now require that any other amgetbatch index AMs that might be added in the future also use fake LSNs like this. Alternatively, such an index AM could just not provide a _bt_killitems-like mechanism at all -- that also works. Or, they could limit the use of such a mechanism to logged relations. Third party table AMs don't really need to deal with this themselves, though. Performance impact of calling BufferGetLSNAtomic during affected scans ---------------------------------------------------------------------- Our expanded use of BufferGetLSNAtomic() during index-only scans has the potential to cause regressions, at least when page checksums are enabled. We're planning on relying on a patch of Andreas Karlsson's to make BufferGetLSNAtomic use an atomic op [4], which fixes this regression. I'm not including that here, though (I would but for the fact that it breaks the Debian Trixie CI target due to a known misaligned access bug that Andreas is working on fixing). Anybody that does performance validation of either index-only scans or scans of an unlogged relation should bear that in mind. > > I still haven't had time to produce an implementation of the "heap > > buffer locking minimization" optimization that's clean enough to > > present to the list. > > Still haven't done this. This idea has now been deprioritized. Quite a few things have fallen together recently, so we're "pivoting back" to work on prefetching for Postgres 19. [1] https://postgr.es/m/CA%2BhUKGJLT2JvWLEiBXMbkSSc5so_Y7%3DN%2BS2ce7npjLw8= QL3d5w%40mail.gmail.com [2] https://postgr.es/m/9af33041-1c16-4973-855a-718aa1048ee1@vondra.me [3] https://postgr.es/m/mc5w6mj52dzl7ant7nmjmwxjmvmlwekwjmf77eotrra3pghrfl@= d7mq3hxvdapa [4] https://postgr.es/m/b6610c3b-3f59-465a-bdbb-8e9259f0abc4@proxel.se -- Peter Geoghegan --0000000000002fd78b0648b24456 Content-Type: application/x-patch; name="v8-0006-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Disposition: attachment; filename="v8-0006-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkkde7oj3 RnJvbSA0NDNiOWY5NmJlYzEyMDQ0OTFmMGRiNTU2ZWMwM2I3ZmI3MzE5NjVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY4IDYv OF0gYnVmbWdyOiBhaW86IFByb3RvdHlwZSBmb3Igbm90IHdhaXRpbmcgZm9yCiBhbHJlYWR5LWlu LXByb2dyZXNzIElPCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL3psamVyZ3dlcXRpN3g2N2xnNWlqZTJyemp1c2llMzduc2xzbmtqa2tieTRsYXFx YmZ3QDNwM3p1NTIyeXlrdgpCYWNrcGF0Y2g6Ci0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAxNTAgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAxNDIg aW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCBhNDBh ZGY2YjIuLjEzNThmYzdmYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAg c3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAJaW50CQkJZmxhZ3M7CiAJaW50MTYJCW5ibG9j a3M7CiAJaW50MTYJCW5ibG9ja3NfZG9uZTsKKwlib29sCQlmb3JlaWduX2lvOwogCVBnQWlvV2Fp dFJlZiBpb193cmVmOwogCVBnQWlvUmV0dXJuIGlvX3JldHVybjsKIH07CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IDI3NWNkNDAzMi4uNmUwOTM4NTBkIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTY1Nyw2ICsxNjU3LDQ2IEBAIFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJCXJldHVybiBTdGFydEJ1 ZmZlcklPKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSksIHRydWUsIG5vd2FpdCk7CiB9 CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgdW5kZXJnb2luZyByZWFk IEFJTy4gSWYgaXQgaXMsIGFzc2lnbiB0aGUKKyAqIElPJ3Mgd2FpdCByZWZlcmVuY2UgdG8gb3Bl cmF0aW9uLT5pb193cmVmLCB0aGVyZWJ5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8KKyAqIHdhaXQg Zm9yIHRoYXQgSU8uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorUmVhZEJ1ZmZlcnNJT0FscmVh ZHlJblByb2dyZXNzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIEJ1ZmZlciBidWZm ZXIpCit7CisJQnVmZmVyRGVzYyAqZGVzYzsKKwl1aW50MzIJCWJ1Zl9zdGF0ZTsKKwlQZ0Fpb1dh aXRSZWYgaW93OworCisJcGdhaW9fd3JlZl9jbGVhcigmaW93KTsKKworCWlmIChCdWZmZXJJc0xv Y2FsKGJ1ZmZlcikpCisJeworCQlkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZm ZXIgLSAxKTsKKwkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7 CisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpICYmICEoYnVmX3N0YXRlICYg Qk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsKKwl9CisJZWxzZQorCXsKKwkJZGVz YyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoZGVzYyk7CisKKwkJaWYgKChidWZfc3RhdGUgJiBCTV9JT19JTl9QUk9HUkVTUykgJiYg IShidWZfc3RhdGUgJiBCTV9WQUxJRCkpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOworCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmlvdykpCisJewor CQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNSZWFkQnVmZmVycyB0aGF0IHRy aWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAqLwpAQCAtMTc4OSw3ICsxODI5 LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJ CQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBJTyBpcyBj b21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9f UlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVpZ25faW8gfHwgYWlvX3JldC0+ cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgogCQkJCSFwZ2Fpb193cmVmX2No ZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJCQkJaW5zdHJfdGltZQlpb19z dGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9fdGltaW5nKTsKQEAgLTE4MDgs MTEgKzE4NDgsNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193 cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBs ZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBv biBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJCVByb2Nlc3NSZWFkQnVmZmVy c1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9wZXJhdGlvbi0+Zm9yZWlnbl9p bykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRpb24tPmJ1ZmZlcnNbb3BlcmF0 aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRlc2M7CisJCQkJdWludDMyCQli dWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCQkJCXsKKwkJCQkJ ZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7CisJCQkJCWJ1Zl9z dGF0ZSA9IHBnX2F0b21pY19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwkJ CQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJVW5sb2NrQnVmSGRyKGRlc2Mp OworCQkJCX0KKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9j a3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCS8qCisJCQkJCSAqIFJlcG9y dCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4KKwkJCQkJ ICogdGhvdWdoIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4KKwkJCQkJICog UGluQnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyIGJhY2tlbmQgKG9yIG91cnNlbHZlcywKKwkJ CQkJICogYXMgcGFydCBvZiBhIHJlYWQgc3RhcnRlZCBlYXJsaWVyKSB3aWxsIHRyYWNrIHRoaXMg YXMgYQorCQkJCQkgKiAncmVhZCcuCisJCQkJCSAqLworCQkJCQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX0RPTkUob3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCSAgb3BlcmF0 aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAorCQkJCQkJCQkJCQkJCSAg b3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ CQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKKwkJCQkJCQkJCQkJCQkgIHRydWUpOworCisJCQkJCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZl cikpCisJCQkJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJCQkJCWVsc2UK KwkJCQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwkJCQkJaWYgKG9w ZXJhdGlvbi0+cmVsKQorCQkJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQob3BlcmF0aW9uLT5y ZWwpOworCisJCQkJCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElP T1BfSElULCAxLCAwKTsKKworCQkJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJCQkJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBD aGVjayB0aGUgcmVzdWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJv cnMgaWYgdGhlcmUgd2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVz dWx0KG9wZXJhdGlvbik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTg5OCw2ICsxOTkzLDQzIEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpu YmxvY2tzX3Byb2dyZXNzKQogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAK KwkvKgorCSAqIElmIEFJTyBpcyBpbiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UKKwkgKiBqdXN0IGFzc29jaWF0ZSB0aGUgd2FpdCByZWZlcmVu Y2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluCisJICogV2FpdFJlYWRCdWZmZXJzKCku IFRoaXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4KKwkgKiB0 d28gd29ya2xvYWRzOgorCSAqCisJICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFk IHRoZSBzYW1lIGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbgorCSAqIHRoZSByZWFkYWhlYWQg ZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMgb2YK KwkgKiBhbiBpbmRleCBzY2FuLgorCSAqCisJICogMikgQ29uY3VycmVudCBzY2FucyBieSBtdWx0 aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKgorCSAqIElmIHdlIHdlcmUg dG8gc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJl CisJICogYWJsZSB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorCSAqCisJICogSWYgd2Ug ZG8gZmluZCB0aGVyZSBpcyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEg MS1ibG9jaworCSAqIFJlYWRCdWZmZXJzT3BlcmF0aW9uIHRoYXQgV2FpdFJlYWRCdWZmZXJzIHRo ZW4gY2FuIHdhaXQgb24uCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNr ZW5kIHN0YXJ0cyBJTyBvbiB0aGUgYnVmZmVyIGJldHdlZW4gdGhpcworCSAqIGNoZWNrIGFuZCB0 aGUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKG5vd2FpdCA9IGZhbHNlKSBiZWxvdy4gSW4gdGhhdCBj YXNlCisJICogd2Ugd2lsbCBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBJTyBiZWxvdywgYnV0 IHRoZSB3aW5kb3cgZm9yIHRoYXQgaXMKKwkgKiBzbWFsbCBlbm91Z2ggdGhhdCBpdCB3b24ndCBo YXBwZW4gb2Z0ZW4gZW5vdWdoIHRvIGhhdmUgYSBzaWduaWZpY2FudAorCSAqIHBlcmZvcm1hbmNl IGltcGFjdC4KKwkgKi8KKwlpZiAoUmVhZEJ1ZmZlcnNJT0FscmVhZHlJblByb2dyZXNzKG9wZXJh dGlvbiwgYnVmZmVyc1tuYmxvY2tzX2RvbmVdKSkKKwl7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0g MTsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKworCQlDaGVja1JlYWRCdWZmZXJz T3BlcmF0aW9uKG9wZXJhdGlvbiwgZmFsc2UpOworCisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKIAkvKgogCSAqIElmIHplcm9fZGFtYWdl ZF9wYWdlcyBpcyBlbmFibGVkLCBhZGQgdGhlIFJFQURfQlVGRkVSU19aRVJPX09OX0VSUk9SCiAJ ICogZmxhZy4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0LCBob3BlZnVsbHksIHplcm9fZGFt YWdlZF9wYWdlcyBpc24ndApAQCAtMTk1NSw5ICsyMDg3LDkgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ LyoKIAkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQg YnVmZmVyLgogCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgaW4gYW5v dGhlciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6IGVpdGhl ciBkb25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJldHJ5Lgor CSAqIElmIGEgc3luY2hyb25vdXMgSS9PIGlzIGluIHByb2dyZXNzIGluIGFub3RoZXIgYmFja2Vu ZCAoaXQgY2FuJ3QgYmUKKwkgKiB0aGlzIGJhY2tlbmQpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRo ZSBvdXRjb21lOiBlaXRoZXIgZG9uZSwgb3IKKwkgKiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQg d2Ugd2lsbCByZXRyeS4KIAkgKi8KIAlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJz W25ibG9ja3NfZG9uZV0sIGZhbHNlKSkKIAl7Ci0tIAoyLjUxLjAKCg== --0000000000002fd78b0648b24456 Content-Type: application/x-patch; name="v8-0008-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v8-0008-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkkde7o61 RnJvbSA2YmY4NjZkZWJmMWRiYjIyMDliZDhkZGEyZTczNTgzZjZiZjIxMjdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHY4IDgvOF0gTWFr ZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFzaGdl dHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUK bmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBpbmRl eGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9mIGFs bCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2UuICBU aGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0aW1p emF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5zLgoK Tm90ZSB0aGF0IHRoaXMgbWFrZXMgaGFzaCBpbmRleCBzY2FucyB1c2UgdGhlIGRyb3BQaW4gb3B0 aW1pemF0aW9uLApzaW5jZSB0aGF0IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgYW1nZXRiYXRjaCBp bnRlcmZhY2UuICBUaGlzIHdvbid0CmF2b2lkIG1ha2luZyBoYXNoIGluZGV4IHZhY3V1bWluZyB3 YWl0IGZvciBhIGNsZWFudXAgbG9jayB3aGVuIGFuIGluZGV4CnNjYW4gaG9sZHMgb250byBhIGNv bmZsaWN0aW5nIHBpbiwgc2luY2Ugc3VjaCBpbmRleCBzY2FucyBzdGlsbCBuZWVkIHRvCmhvbGQg b250byBhIGNvbmZsaWN0aW5nIGJ1Y2tldCBwYWdlIHBpbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRo ZSBzY2FuLgpJbiBvdGhlciB3b3JkcywgdXNlIG9mIHRoZSBkcm9wUGluIG9wdGltaXphdGlvbiB3 b24ndCBiZW5lZml0IGhhc2ggaW5kZXgKc2NhbnMgaW4gdGhlIHNhbWUgd2F5IHRoYXQgaXQgYmVu ZWZpdHMgbmJ0cmVlIGluZGV4IHNjYW5zIGZvbGxvd2luZwpjb21taXQgMmVkNWI4N2YuICBIb3dl dmVyLCB0aGVyZSBpcyBzdGlsbCBzb21lIHZhbHVlIGluIGtlZXBpbmcgdGhlCm51bWJlciBvZiBi dWZmZXIgcGlucyBoZWxkIGF0IGFueSBvbmUgdGltZSB0byBhIG1pbmltdW0uCgpJbmRleCBwcmVm ZXRjaGluZyB0ZW5kcyB0byBob2xkIG9wZW4gYXMgbWFueSBhcyBzZXZlcmFsIGRvemVuIGJhdGNo ZXMKd2l0aCBjZXJ0YWluIHdvcmtsb2FkcyAod29ya2xvYWRzIHdoZXJlIHRoZSBzdHJlYW0gcG9z aXRpb24gaGFzIHRvIGdldApxdWl0ZSBmYXIgYWhlYWQgb2YgdGhlIHJlYWQgcG9zaXRpb24gaW4g b3JkZXIgdG8gbWFpbnRhaW4gdGhlCmFwcHJvcHJpYXRlIHByZWZldGNoIGRpc3RhbmNlIG9uIHRo ZSBoZWFwYW0gc2lkZSkuICBHdWFyYW50ZWVpbmcgdGhhdApvcGVuIGJhdGNoZXMgd29uJ3QgaG9s ZCBidWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyAoYXQgbGVhc3QgaW4gdGhlCmNvbW1vbiBjYXNl IHdoZXJlIHRoZSBkcm9wUGluIG9wdGltaXphdGlvbiBpcyBzYWZlIHRvIHVzZSkgdGhlcmVieQpz aW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHByZWZldGNoaW5nLgoK QWxzbyBhZGQgVmFsZ3JpbmQgYnVmZmVyIGxvY2sgaW5zdHJ1bWVudGF0aW9uIHRvIGhhc2gsIGJy aW5naW5nIGl0IGluCmxpbmUgd2l0aCBuYnRyZWUgZm9sbG93aW5nIGNvbW1pdCA0YTcwZjgyOS4g IFRoaXMgaXMgYW5vdGhlciByZXF1aXJlbWVudAp3aGVuIHVzaW5nIHRoZSBhbWdldGJhdGNoIGlu dGVyZmFjZS4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVEr MGpTRU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9o YXNoLmggICAgICAgICAgICB8ICA3MyArLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYyAgICAgICB8IDEyNCArKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo cGFnZS5jICAgfCAgMjYgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMg fCAzMzEgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNodXRpbC5jICAgfCAgODMgKysrLS0tLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgIHwgICAyIC0KIDYgZmlsZXMgY2hhbmdlZCwgMjM2IGluc2VydGlvbnMoKyksIDQw MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaAppbmRleCBhODcwMmYwZTUuLmZjNjY0NjVhMiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaGFzaC5oCkBAIC0xMDAsNTggKzEwMCw2IEBAIHR5cGVkZWYgSGFzaFBhZ2VPcGFxdWVEYXRh ICpIYXNoUGFnZU9wYXF1ZTsKICAqLwogI2RlZmluZSBIQVNIT19QQUdFX0lECQkweEZGODAKIAot dHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NJdGVtCS8qIHdoYXQgd2UgcmVtZW1iZXIgYWJvdXQg ZWFjaCBtYXRjaCAqLwotewotCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVm ZXJlbmNlZCBoZWFwIGl0ZW0gKi8KLQlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4 IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLwotfSBIYXNoU2NhblBvc0l0ZW07Ci0KLXR5 cGVkZWYgc3RydWN0IEhhc2hTY2FuUG9zRGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGlmIHZh bGlkLCB0aGUgYnVmZmVyIGlzIHBpbm5lZCAqLwotCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyog Y3VycmVudCBoYXNoIGluZGV4IHBhZ2UgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIG5l eHQgb3ZlcmZsb3cgcGFnZSAqLwotCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogcHJldiBvdmVy ZmxvdyBvciBidWNrZXQgcGFnZSAqLwotCi0JLyoKLQkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3 YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCi0JICogaW5kZXhvZmZz ZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0byBmaWxsIHRo ZQotCSAqIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3Qg YW5kIGZpbGwgZG93bndhcmRzLgotCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlk LWVudHJ5IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KLQkgKiBpdGVtSW5kZXggaXMg YSBjdXJzb3Igc2hvd2luZyB3aGljaCBlbnRyeSB3YXMgbGFzdCByZXR1cm5lZCB0byBjYWxsZXIu Ci0JICovCi0JaW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNb XSAqLwotCWludAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICov Ci0JaW50CQkJaXRlbUluZGV4OwkJLyogY3VycmVudCBpbmRleCBpbiBpdGVtc1tdICovCi0KLQlI YXNoU2NhblBvc0l0ZW0gaXRlbXNbTWF4SW5kZXhUdXBsZXNQZXJQYWdlXTsJLyogTVVTVCBCRSBM QVNUICovCi19IEhhc2hTY2FuUG9zRGF0YTsKLQotI2RlZmluZSBIYXNoU2NhblBvc0lzUGlubmVk KHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBv cykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwK LQlCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLQotI2RlZmluZSBIYXNoU2NhblBv c0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlk KChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5i dWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIFwKLSkKLQot I2RlZmluZSBIYXNoU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAotCWRvIHsgXAotCQkoc2Nh bnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcykuY3VyclBhZ2UgPSBJbnZh bGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVt YmVyOyBcCi0JCShzY2FucG9zKS5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQko c2NhbnBvcykuZmlyc3RJdGVtID0gMDsgXAotCQkoc2NhbnBvcykubGFzdEl0ZW0gPSAwOyBcCi0J CShzY2FucG9zKS5pdGVtSW5kZXggPSAwOyBcCi0JfSB3aGlsZSAoMCkKLQogLyoKICAqCUhhc2hT Y2FuT3BhcXVlRGF0YSBpcyBwcml2YXRlIHN0YXRlIGZvciBhIGhhc2ggaW5kZXggc2Nhbi4KICAq LwpAQCAtMTc4LDE1ICsxMjYsNiBAQCB0eXBlZGVmIHN0cnVjdCBIYXNoU2Nhbk9wYXF1ZURhdGEK IAkgKiByZWZlcnJlZCBvbmx5IHdoZW4gaGFzaHNvX2J1Y19wb3B1bGF0ZWQgaXMgdHJ1ZS4KIAkg Ki8KIAlib29sCQloYXNoc29fYnVjX3NwbGl0OwotCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1z IGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLwotCWludAkJICAg KmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVkIGl0ZW1zICov Ci0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMg Ki8KLQotCS8qCi0JICogSWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiBhIHBhZ2Ug YW5kIHNhdmUgdGhlbSBpbgotCSAqIEhhc2hTY2FuUG9zRGF0YQotCSAqLwotCUhhc2hTY2FuUG9z RGF0YSBjdXJyUG9zOwkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KIH0gSGFzaFNjYW5PcGFx dWVEYXRhOwogCiB0eXBlZGVmIEhhc2hTY2FuT3BhcXVlRGF0YSAqSGFzaFNjYW5PcGFxdWU7CkBA IC0zNjgsMTEgKzMwNywxNCBAQCBleHRlcm4gYm9vbCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwg RGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCQkJCQkgICBJbmRleFVuaXF1ZUNoZWNrIGNo ZWNrVW5pcXVlLAogCQkJCQkgICBib29sIGluZGV4VW5jaGFuZ2VkLAogCQkJCQkgICBzdHJ1Y3Qg SW5kZXhJbmZvICppbmRleEluZm8pOwotZXh0ZXJuIGJvb2wgaGFzaGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGhh c2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNo IHByaW9yYmF0Y2gsCisJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2 NCBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwogZXh0 ZXJuIEluZGV4U2NhbkRlc2MgaGFzaGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywg aW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gdm9pZCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCQkJCQkgICBTY2FuS2V5IG9yZGVy YnlzLCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIGhhc2hmcmVlYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBoYXNoZW5kc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaGFz aGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCQkgSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICpzdGF0cywKQEAgLTQ0NSw4ICszODcsOSBAQCBleHRlcm4gdm9pZCBfaGFz aF9maW5pc2hfc3BsaXQoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIG9idWYs CiAJCQkJCQkJICAgdWludDMyIGxvd21hc2spOwogCiAvKiBoYXNoc2VhcmNoLmMgKi8KLWV4dGVy biBib29sIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 Ci1leHRlcm4gYm9vbCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvcmJh dGNoKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIAogLyogaGFzaHNvcnQuYyAqLwogdHlwZWRlZiBzdHJ1 Y3QgSFNwb29sIEhTcG9vbDsJLyogb3BhcXVlIHN0cnVjdCBpbiBoYXNoc29ydC5jICovCkBAIC00 NzYsNyArNDE5LDcgQEAgZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNoX2dldF9vbGRibG9ja19mcm9t X25ld2J1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBuZXdfYnUKIGV4dGVybiBCbG9ja051bWJl ciBfaGFzaF9nZXRfbmV3YmxvY2tfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQg b2xkX2J1Y2tldCk7CiBleHRlcm4gQnVja2V0IF9oYXNoX2dldF9uZXdidWNrZXRfZnJvbV9vbGRi dWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAkJCQkJCQkJCQkJCSB1aW50 MzIgbG93bWFzaywgdWludDMyIG1heGJ1Y2tldCk7Ci1leHRlcm4gdm9pZCBfaGFzaF9raWxsX2l0 ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBfaGFzaF9raWxsX2l0ZW1zKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogCiAvKiBoYXNoLmMgKi8K IGV4dGVybiB2b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9i dWNrZXQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggZDc0MmRhYmNkLi5kZGI4NDcxOWUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTEwMSw5ICsxMDEsOSBAQCBoYXNoaGFuZGxlcihQR19G VU5DVElPTl9BUkdTKQogCQkuYW1hZGp1c3RtZW1iZXJzID0gaGFzaGFkanVzdG1lbWJlcnMsCiAJ CS5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4s Ci0JCS5hbWdldHR1cGxlID0gaGFzaGdldHR1cGxlLAotCQkuYW1nZXRiYXRjaCA9IE5VTEwsCi0J CS5hbWZyZWViYXRjaCA9IE5VTEwsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0 Y2ggPSBoYXNoZ2V0YmF0Y2gsCisJCS5hbWZyZWViYXRjaCA9IGhhc2hmcmVlYmF0Y2gsCiAJCS5h bWdldGJpdG1hcCA9IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwK IAkJLmFtcG9zcmVzZXQgPSBOVUxMLApAQCAtMjg2LDUzICsyODYsMjcgQEAgaGFzaGluc2VydChS ZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAogCiAvKgotICoJaGFz aGdldHR1cGxlKCkgLS0gR2V0IHRoZSBuZXh0IHR1cGxlIGluIHRoZSBzY2FuLgorICoJaGFzaGdl dGJhdGNoKCkgLS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJhdGNoIG9mIHR1cGxlcyBpbiB0aGUg c2NhbgogICovCi1ib29sCi1oYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlI YXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJ CXJlczsKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCiAJLyogSGFzaCBp bmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25seSB0aGUgaGFzaCBjb2Rl ICovCiAJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAKLQkvKgotCSAqIElmIHdlJ3ZlIGFscmVh ZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluIHRoZQot CSAqIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdl IGNhbGwgYSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgot CSAqLwotCWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJcmVzID0gX2hh c2hfZmlyc3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYgKHByaW9yYmF0Y2ggPT0gTlVMTCkKIAl7 Ci0JCS8qCi0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNs eS1mZXRjaGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0J CXsKLQkJCS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRl YWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0IG9uY2UgcmlnaHQgYWZ0ZXIgbGVhdmlu ZyB0aGUgaW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nhbi4pCi0JCQkgKiBJbiBjYXNlIGlmIGNh bGxlciByZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVjdGlvbiBpdCBpcyBxdWl0ZQotCQkJICog cG9zc2libGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRp bWVzLgotCQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3QgdGhhdDsgaW5zdGVhZCwgd2UganVzdCBm b3JnZXQgYW55IGV4Y2VzcwotCQkJICogZW50cmllcy4KLQkJCSAqLwotCQkJaWYgKHNvLT5raWxs ZWRJdGVtcyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQs IE1heEluZGV4VHVwbGVzUGVyUGFnZSk7CisJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwog Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKLQkJCQlzby0+ a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKLQkJ fQotCi0JCS8qCi0JCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJlcyA9IF9o YXNoX25leHQoc2NhbiwgZGlyKTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5kIHJldHVy biBmaXJzdCBiYXRjaCBvZiBtYXRjaGluZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hfZmlyc3Qo c2NhbiwgZGlyKTsKIAl9CiAKLQlyZXR1cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBwb3NpdGlv bmVkIGFmdGVyIGNhbGxlcidzIGJhdGNoIChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJcmV0dXJu IF9oYXNoX25leHQoc2NhbiwgZGlyLCBwcmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNDIsMjYgKzMx NiwyMyBAQCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKIGludDY0CiBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0 Ym0pCiB7Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1 ZTsKLQlib29sCQlyZXM7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50aWRzID0g MDsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCWludAkJCWl0ZW1JbmRleDsKIAotCXJl cyA9IF9oYXNoX2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKKwliYXRjaCA9IF9o YXNoX2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKIAotCXdoaWxlIChyZXMpCisJ d2hpbGUgKGJhdGNoICE9IE5VTEwpCiAJewotCQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVt c1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOworCQlmb3IgKGl0ZW1JbmRleCA9IGJhdGNoLT5maXJz dEl0ZW07CisJCQkgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbTsKKwkJCSBpdGVtSW5kZXgr KykKKwkJeworCQkJdGJtX2FkZF90dXBsZXModGJtLCAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0u aGVhcFRpZCwgMSwgdHJ1ZSk7CisJCQludGlkcysrOworCQl9CiAKLQkJLyoKLQkJICogX2hhc2hf Zmlyc3QgYW5kIF9oYXNoX25leHQgaGFuZGxlIGVsaW1pbmF0ZSBkZWFkIGluZGV4IGVudHJpZXMK LQkJICogd2hlbmV2ZXIgc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgaXMgdHJ1ZS4gIFRoZXJl Zm9yZSwgdGhlcmUncwotCQkgKiBub3RoaW5nIHRvIGRvIGhlcmUgZXhjZXB0IGFkZCB0aGUgcmVz dWx0cyB0byB0aGUgVElEQml0bWFwLgotCQkgKi8KLQkJdGJtX2FkZF90dXBsZXModGJtLCAmKGN1 cnJJdGVtLT5oZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7Ci0KLQkJcmVzID0gX2hhc2hf bmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJhdGNoID0gX2hhc2hfbmV4dChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0KIAogCXJldHVybiBudGlkczsK QEAgLTM4MywxNyArMzU0LDE0IEBAIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtl eXMsIGludCBub3JkZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0SW5kZXhTY2FuKHJlbCwgbmtl eXMsIG5vcmRlcmJ5cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgcGFsbG9jX29iamVjdChI YXNoU2Nhbk9wYXF1ZURhdGEpOwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7 CiAJc28tPmhhc2hzb19idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJc28tPmhhc2hzb19idWNfcG9wdWxh dGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIAotCXNvLT5raWxs ZWRJdGVtcyA9IE5VTEw7Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KIAlzY2FuLT5vcGFxdWUgPSBz bzsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlOwogCiAJcmV0 dXJuIHNjYW47CiB9CkBAIC00MDgsMTggKzM3Niw4IEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJSGFzaFNjYW5PcGFxdWUg c28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp Ci0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2ls bGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9oYXNoX2tpbGxfaXRl bXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQkvKiBzZXQg cG9zaXRpb24gaW52YWxpZCAodGhpcyB3aWxsIGNhdXNlIF9oYXNoX2ZpcnN0IGNhbGwpICovCi0J SGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQogCS8qIFVwZGF0ZSBzY2FuIGtl eSwgaWYgYSBuZXcgb25lIGlzIGdpdmVuICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVy T2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJl ck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwpAQCAtNDI4LDYgKzM4NiwyNyBAQCBoYXNo cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlz LAogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiB9CiAKKy8qCisgKgloYXNoZnJlZWJh dGNoKCkgLS0gRnJlZSBiYXRjaCByZXNvdXJjZXMsIGluY2x1ZGluZyBpdHMgYnVmZmVyIHBpbgor ICovCit2b2lkCitoYXNoZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpCit7CisJaWYgKGJhdGNoLT5udW1LaWxsZWQgPiAwKQorCQlfaGFzaF9raWxsX2l0 ZW1zKHNjYW4sIGJhdGNoKTsKKworCWlmIChCdWZmZXJJc1ZhbGlkKGJhdGNoLT5idWYpKQorCXsK KwkJLyogdGFibGUgQU0gZGlkbid0IHVucGluIHBhZ2UgZWFybGllciAtLSBkbyBpdCBub3cgKi8K KwkJQXNzZXJ0KCFzY2FuLT5NVkNDU2Nhbik7CisKKwkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVm KTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaW5kZXhhbV91dGlsX2Jh dGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworfQorCiAvKgogICoJaGFzaGVuZHNjYW4oKSAtLSBj bG9zZSBkb3duIGEgc2NhbgogICovCkBAIC00MzcsMTcgKzQxNiw4IEBAIGhhc2hlbmRzY2FuKElu ZGV4U2NhbkRlc2Mgc2NhbikKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlp ZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2 aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNv LT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFz aF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkK LQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKIAlwZnJlZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0g TlVMTDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDI2M2JjNzNmMS4uMmJj OGJlYTIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTM1LDYgKzM1LDcgQEAK ICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1 Zy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiBzdGF0aWMgYm9vbCBfaGFzaF9hbGxvY19i dWNrZXRzKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZmlyc3RibG9jaywKQEAgLTc5LDYgKzgw LDkgQEAgX2hhc2hfZ2V0YnVmKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIGludCBh Y2Nlc3MsIGludCBmbGFncykKIAlpZiAoYWNjZXNzICE9IEhBU0hfTk9MT0NLKQogCQlMb2NrQnVm ZmVyKGJ1ZiwgYWNjZXNzKTsKIAorCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkp CisJCVZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQoQnVmZmVyR2V0UGFnZShidWYpLCBCTENLU1op OworCiAJLyogcmVmIGNvdW50IGFuZCBsb2NrIHR5cGUgYXJlIGNvcnJlY3QgKi8KIAogCV9oYXNo X2NoZWNrcGFnZShyZWwsIGJ1ZiwgZmxhZ3MpOwpAQCAtMTA4LDYgKzExMiw5IEBAIF9oYXNoX2dl dGJ1Zl93aXRoX2NvbmRsb2NrX2NsZWFudXAoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtu bywgaW50IGZsYWdzKQogCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAl9CiAKKwlpZiAoIVJlbGF0 aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQorCQlWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKEJ1 ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKwogCS8qIHJlZiBjb3VudCBhbmQgbG9jayB0eXBl IGFyZSBjb3JyZWN0ICovCiAKIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBidWYsIGZsYWdzKTsKQEAg LTI4MCwzMSArMjg3LDI0IEBAIF9oYXNoX2Ryb3BidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVm KQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgdXNl ZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgb3du ZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIHVzZWQg ZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAqIGhvbGQgbm8gbG9jay4KKyAqIFRoaXMgcm91dGlu ZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBmb3Ig dGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1Y2tldCBiZWluZyBzcGxpdCBhcyBuZWVkZWQuCiAg Ki8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVmKFJlbGF0aW9uIHJlbCwgSGFzaFNjYW5PcGFxdWUg c28pCiB7CiAJLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICov Ci0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19idWNrZXRfYnVmKSAmJgotCQlzby0+aGFz aHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3MuYnVmKQorCWlmIChCdWZmZXJJc1ZhbGlkKHNv LT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX2J1 Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkv KiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgIG9mIGJ1Y2tldCBi ZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0 X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1 ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2Ugb2YgYnVja2V0 IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19zcGxpdF9idWNr ZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1 Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAotCS8q IHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xkICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28t PmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0J c28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQogCS8qIHJlc2V0IHNwbGl0IHNjYW4g Ki8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFzaHNvX2J1Y19z cGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNl YXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCmluZGV4IDg5ZDFj NWJjNi4uNDlkZGNmM2EyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCkBAIC0y MiwxMDUgKzIyLDgzIEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKIAotc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBCdWZmZXIgKmJ1ZlAsCi0JCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0 aWMgYm9vbCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWYsIFNj YW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogc3RhdGlj IGludAlfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2Ug cGFnZSwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGly KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1ZSBzbywg aW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJl Y3Rpb24gZGlyLAorCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworc3RhdGljIGlu bGluZSB2b2lkIF9oYXNoX3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbUlu ZGV4LAogCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCk7CiBz dGF0aWMgdm9pZCBfaGFzaF9yZWFkbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVm cCwKIAkJCQkJCSAgIFBhZ2UgKnBhZ2VwLCBIYXNoUGFnZU9wYXF1ZSAqb3BhcXVlcCk7CiAKIC8q Ci0gKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2hh c2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4uCiAgKgot ICoJCU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hp Y2ggbWF5Ci0gKgkJYmUgcGlubmVkIGJ1dCBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRl bUluZGV4IGlkZW50aWZpZXMKLSAqCQl3aGljaCBpdGVtIHdhcyBwcmV2aW91c2x5IHJldHVybmVk LgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlIGJh dGNoIHdpdGggaXRlbXMKKyAqCQlhbHJlYWR5IHJldHVybmVkLgogICoKLSAqCQlPbiBzdWNjZXNz ZnVsIGV4aXQsIHNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBUSUQgb2YgdGhlIG5leHQK LSAqCQloZWFwIHR1cGxlLiAgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQuCisgKgkJ T24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBp dGVtcyBmcm9tCisgKgkJbmV4dCBwYWdlLiAgT3RoZXJ3aXNlIHJldHVybnMgTlVMTCwgaW5kaWNh dGluZyB0aGF0IHRoZXJlIGFyZSBubworICoJCWZ1cnRoZXIgbWF0Y2hlcy4gIE5vIGxvY2tzIGFy ZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8g bW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2Ugd2l0aCBwaW4KLSAqCQloZWxkIG9uIGJ1Y2tl dCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3ZlcmZsb3cKLSAqCQlwYWdlLgor ICoJCVJldGFpbnMgcGlucyBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgYXMgX2hhc2hfZmly c3QuCiAgKi8KLWJvb2wKLV9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpCiB7CiAJUmVsYXRp b24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNo U2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CiAJ QmxvY2tOdW1iZXIgYmxrbm87CiAJQnVmZmVyCQlidWY7Ci0JYm9vbAkJZW5kX29mX3NjYW4gPSBm YWxzZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAogCS8qCi0JICogQWR2YW5jZSB0byB0aGUg bmV4dCB0dXBsZSBvbiB0aGUgY3VycmVudCBwYWdlOyBvciBpZiBkb25lLCB0cnkgdG8gcmVhZAot CSAqIGRhdGEgZnJvbSB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIGJhc2VkIG9uIHRoZSBzY2Fu IGRpcmVjdGlvbi4gQmVmb3JlCi0JICogbW92aW5nIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBh Z2UgbWFrZSBzdXJlIHRoYXQgd2UgZGVhbCB3aXRoIGFsbCB0aGUKLQkgKiBraWxsZWQgaXRlbXMu CisJICogRGV0ZXJtaW5lIHdoaWNoIHBhZ2UgdG8gcmVhZCBuZXh0IGJhc2VkIG9uIHNjYW4gZGly ZWN0aW9uIGFuZCBkZXRhaWxzCisJICogdGFrZW4gZnJvbSB0aGUgcHJpb3IgYmF0Y2gKIAkgKi8K IAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJaWYgKCsrc28tPmN1cnJQ b3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0JCXsKLQkJCWlmIChzby0+bnVt S2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlibGtubyA9IHNv LT5jdXJyUG9zLm5leHRQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0J CQl7Ci0JCQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZF UkZMT1dfUEFHRSk7Ci0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQot CQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4g PSB0cnVlOwotCQl9CisJCWJsa25vID0gcHJpb3JiYXRjaC0+bmV4dFBhZ2U7CisJCWlmICghQmxv Y2tOdW1iZXJJc1ZhbGlkKGJsa25vKSB8fCAhcHJpb3JiYXRjaC0+bW9yZVJpZ2h0KQorCQkJcmV0 dXJuIE5VTEw7CiAJfQogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8 IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQot CQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJl dlBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYg PSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9CVUNL RVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdheXMg bWFpbnRhaW4gdGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAqIG9w ZXJhdGlvbiwgc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVk Ci0JCQkJICogaGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0 X2J1ZiB8fAotCQkJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCQlf aGFzaF9kcm9wYnVmKHJlbCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2Nhbiwg JmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJ CWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQorCQlibGtubyA9IHByaW9yYmF0Y2gtPnByZXZQYWdl OworCQlpZiAoIUJsb2NrTnVtYmVySXNWYWxpZChibGtubykgfHwgIXByaW9yYmF0Y2gtPm1vcmVM ZWZ0KQorCQkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKGVuZF9vZl9zY2FuKQorCS8qIEFsbG9j YXRlIHNwYWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hf YWxsb2Moc2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4dCBiYXRjaCAqLworCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWws IGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOworCWVsc2UKIAl7Ci0JCV9oYXNo X2Ryb3BzY2FuYnVmKHJlbCwgc28pOwotCQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQ b3MpOwotCQlyZXR1cm4gZmFsc2U7CisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBI QVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwor CisJCS8qCisJCSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9uIGJ1Y2tldCBwYWdlIGZv ciB3aG9sZSBzY2FuIG9wZXJhdGlvbiwKKwkJICogc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFs IHBpbiB3ZSBoYXZlIGFjcXVpcmVkIGhlcmUuCisJCSAqLworCQlpZiAoYnVmID09IHNvLT5oYXNo c29fYnVja2V0X2J1ZiB8fAorCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikK KwkJCV9oYXNoX2Ryb3BidWYocmVsLCBidWYpOwogCX0KIAotCS8qIE9LLCBpdGVtSW5kZXggc2F5 cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5j dXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlk OworCS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQgbG9hZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBi YXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBkaXIsIGJhdGNoKSkKKwl7 CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5V TEw7CisJfQogCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5n IG1hdGNoZWQgaXRlbXMgZnJvbSBuZXh0IHBhZ2UgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8q CkBAIC0yNzAsMjIgKzI0OCwyMSBAQCBfaGFzaF9yZWFkcHJldihJbmRleFNjYW5EZXNjIHNjYW4s CiB9CiAKIC8qCi0gKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gYSBz Y2FuLgorICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyBp biBhIHNjYW4uCiAgKgotICoJCVdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLCBpZiBiYWNrd2Fy ZCBzY2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUKLSAqCQlpbmRleCB0aGF0IHNhdGlzZmllcyB0 aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHNjYW4KLSAqCQlkZXNjcmlwdG9y LgorICoJCVdlIGZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIChvciwgaWYgYmFja3dhcmQg c2NhbiwgdGhlIGxhc3QKKyAqCQliYXRjaCkgaW4gdGhlIGluZGV4IHRoYXQgc2F0aXNmaWVzIHRo ZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aAorICoJCXRoZSBzY2FuIGRlc2NyaXB0b3Iu CiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgaWYgdGhlIHBhZ2UgY29udGFpbmluZyBjdXJy ZW50IGluZGV4IHR1cGxlIGlzIGFuCi0gKgkJb3ZlcmZsb3cgcGFnZSwgYm90aCBwaW4gYW5kIGxv Y2sgYXJlIHJlbGVhc2VkIHdoZXJlYXMgaWYgaXQgaXMgYSBidWNrZXQKLSAqCQlwYWdlIHRoZW4g aXQgaXMgcGlubmVkIGJ1dCBub3QgbG9ja2VkIGFuZCBkYXRhIGFib3V0IHRoZSBtYXRjaGluZwot ICoJCXR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9z LAotICoJCXNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBoZWFwIFRJRCBvZiB0aGUgY3Vy cmVudCB0dXBsZS4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJldHVybnMgYSBiYXRjaCBjb250 YWluaW5nIG1hdGNoaW5nIGl0ZW1zLgorICoJCU90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGlj YXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzLgorICoJCU5vIGxvY2tzIGFy ZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8g bW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggcGluIGhlbGQgb24KLSAqCQlidWNr ZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93IHBhZ2UuCisgKgkJ V2UgYWx3YXlzIHJldGFpbiBvdXIgb3duIHBpbiBvbiB0aGUgYnVja2V0IHBhZ2UuICBXaGVuIHdl IHJldHVybiBhCisgKgkJYmF0Y2ggd2l0aCBhIGJ1Y2tldCBwYWdlLCBpdCB3aWxsIHJldGFpbiBp dHMgb3duIHJlZmVyZW5jZSBwaW4gaWZmCisgKgkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Ug ZGV0ZXJtaW5lZCB0aGF0IHRhYmxlIEFNIHJlcXVpcmVzIG9uZS4KICAqLwotYm9vbAorSW5kZXhT Y2FuQmF0Y2gKIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTI5Niw3ICsy NzMsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwot CUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAKIAlw Z3N0YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwogCWlmIChzY2FuLT5pbnN0cnVtZW50KQpAQCAt MzI2LDcgKzMwMyw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGluZGV4LgogCSAqLwogCWlmIChjdXItPnNrX2Zs YWdzICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCiAJLyoK IAkgKiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gga2V5LiAgV2Ugd2FudCB0byBkbyB0aGlzIGJl Zm9yZSBhY3F1aXJpbmcgYW55CkBAIC00MTksMTkxICszOTYsMTU5IEBAIF9oYXNoX2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChz Y2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJfQogCi0JLyogcmVtZW1iZXIgd2hpY2ggYnVm ZmVyIHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8KLQlBc3NlcnQoQnVmZmVySXNJbnZhbGlkKHNv LT5jdXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0ZSBz cGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxv YyhzY2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUgdHVwbGVzIHNhdGlzZnlpbmcgdGhlIHF1 YWxpZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZi dWYsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBSZWFkIHRoZSBmaXJzdCBwYWdlIGFuZCBs b2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShz Y2FuLCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uo c2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNh eXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+ Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRp ZDsKLQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVw bGVzICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1h dGNoZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFn ZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9z CisgKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFn ZSBpbnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50 IGluZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRp c2ZpZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0 Y2ggaWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVt cwogICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQg b3IgcHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRo ZSBkaXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFy ZSBmb3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikK K19oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVj dGlvbiBkaXIsCisJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWY7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFn ZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bTsKIAl1aW50MTYJCWl0ZW1JbmRl eDsKIAotCWJ1ZiA9ICpidWZQOwogCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJ1ZikpOwogCV9oYXNo X2NoZWNrcGFnZShyZWwsIGJ1ZiwgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsK IAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVl KHBhZ2UpOwogCi0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdl ID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKKwliYXRjaC0+YnVmID0gYnVmOworCWJhdGNo LT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJYmF0Y2gtPmRpciA9IGRp cjsKIAogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlCbG9ja051bWJl ciBwcmV2X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCiAJCWZvciAoOzspCiAJCXsKIAkJ CS8qIG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRpb24gYnkgYmluYXJ5IHNlYXJjaCAq LwogCQkJb2ZmbnVtID0gX2hhc2hfYmluc2VhcmNoKHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7 CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2Us IG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1z KHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlp ZiAoaXRlbUluZGV4ICE9IDApCiAJCQkJYnJlYWs7CiAKIAkJCS8qCi0JCQkgKiBDb3VsZCBub3Qg ZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJ CSAqIHRoZSBuZXh0IHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkKLQkJCSAqIGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBt YXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRv IHRoZSBuZXh0IHBhZ2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9o YXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFy eSBidWNrZXQgcGFnZSwgaGFzaG9fcHJldmJsa25vIGlzIG5vdCBhIHJlYWwKLQkJCSAqIGJsb2Nr IG51bWJlci4KLQkJCSAqLwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1 Y2tldF9idWYgfHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNr ZXRfYnVmKQotCQkJCXByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQllbHNlCi0J CQkJcHJldl9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwotCiAJCQlfaGFzaF9yZWFk bmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNWYWxpZChi dWYpKQorCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJCQl7Ci0JCQkJc28tPmN1cnJQb3Mu YnVmID0gYnVmOwotCQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1i ZXIoYnVmKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5l eHQgYW5kIHByZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJz b3JzIHRvIGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBp bmRpY2F0aW5nIHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywK LQkJCQkgKiBkb24ndCByZXNldCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0J CQkJICogX2hhc2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRl ciB0aGlzCi0JCQkJICogZnVuY3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBv cy5wcmV2UGFnZSA9IHByZXZfYmxrbm87Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBJbnZh bGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJCWJhdGNoLT5i dWYgPSBJbnZhbGlkQnVmZmVyOwogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KKworCQkJYmF0Y2gt PmJ1ZiA9IGJ1ZjsKKwkJCWJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1 Zik7CiAJCX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5s YXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJ CWJhdGNoLT5maXJzdEl0ZW0gPSAwOworCQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAx OwogCX0KIAllbHNlCiAJewotCQlCbG9ja051bWJlciBuZXh0X2Jsa25vID0gSW52YWxpZEJsb2Nr TnVtYmVyOwotCiAJCWZvciAoOzspCiAJCXsKIAkJCS8qIG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRp bmcgcG9zaXRpb24gYnkgYmluYXJ5IHNlYXJjaCAqLwogCQkJb2ZmbnVtID0gX2hhc2hfYmluc2Vh cmNoX2xhc3QocGFnZSwgc28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hh c2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRl bUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBk aXIsCisJCQkJCQkJCQkJCQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gTWF4SW5k ZXhUdXBsZXNQZXJQYWdlKQogCQkJCWJyZWFrOwogCiAJCQkvKgotCQkJICogQ291bGQgbm90IGZp bmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkg KiB0aGUgcHJldmlvdXMgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVh bCB3aXRoCi0JCQkgKiBhbnkga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZpbmQgYW55 IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUg dG8gdGhlIHByZXZpb3VzIHBhZ2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQot CQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0g c28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQluZXh0X2Jsa25vID0gb3BhcXVlLT5oYXNob19uZXh0 Ymxrbm87Ci0KIAkJCV9oYXNoX3JlYWRwcmV2KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsK LQkJCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnVmKSkK IAkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJc28tPmN1cnJQb3MuY3VyclBh Z2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJ CS8qCi0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVycyBmb3Ig c2Nyb2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRpb24gYW5k IHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1 cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdlIG9yIGxz biwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJlIGNhbGxl ZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1cm5zLgot CQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwot CQkJCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gbmV4dF9ibGtubzsKLQkJCQlzby0+Y3VyclBvcy5i dWYgPSBidWY7CisJCQkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJCQkJcmV0dXJuIGZh bHNlOwogCQkJfQorCisJCQliYXRjaC0+YnVmID0gYnVmOworCQkJYmF0Y2gtPmN1cnJQYWdlID0g QnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0SXRl bSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1Bl clBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhJbmRleFR1cGxlc1BlclBh Z2UgLSAxOworCQliYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4OworCQliYXRjaC0+bGFzdEl0 ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwogCX0KIAotCWlmIChzby0+Y3VyclBvcy5i dWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+ aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJLyoKKwkgKiBTYXZlZCBhdCBsZWFzdCBvbmUgbWF0 Y2ggaW4gYmF0Y2guaXRlbXNbXS4gIFByZXBhcmUgZm9yIGhhc2hnZXRiYXRjaCB0bworCSAqIHJl dHVybiBpdCBieSBpbml0aWFsaXppbmcgcmVtYWluaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgor CSAqLworCWlmIChiYXRjaC0+YnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQliYXRj aC0+YnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKIAl7Ci0JCXNvLT5jdXJyUG9z LnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9 IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1Ziwg QlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJLyoKKwkJICogQmF0Y2gncyBidWZmZXIgaXMgZWl0aGVy IHRoZSBwcmltYXJ5IGJ1Y2tldCwgb3IgYSBidWNrZXQgYmVpbmcKKwkJICogcG9wdWxhdGVkIGR1 ZSB0byBhIHNwbGl0LgorCQkgKgorCQkgKiBJbmNyZW1lbnQgbG9jYWwgcmVmZXJlbmNlIGNvdW50 IHNvIHRoYXQgYmF0Y2ggZ2V0cyBhbiBpbmRlcGVuZGVudAorCQkgKiBidWZmZXIgcmVmZXJlbmNl IHRoYXQgY2FuIGJlIHJlbGVhc2VkIChieSBoYXNoZnJlZWJhdGNoKSBiZWZvcmUgdGhlCisJCSAq IGhhc2hzb19idWNrZXRfYnVmL2hhc2hzb19zcGxpdF9idWNrZXRfYnVmIHJlZmVyZW5jZXMgYXJl IHJlbGVhc2VkLgorCQkgKi8KKwkJSW5jckJ1ZmZlclJlZkNvdW50KGJhdGNoLT5idWYpOworCisJ CS8qIENhbiBvbmx5IHVzZSBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLworCQliYXRjaC0+cHJl dlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+ aGFzaG9fbmV4dGJsa25vOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9 IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1 ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlfaGFzaF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYp OwotCQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOworCQkvKiBDYW4gdXNlIG9wYXF1 ZS0+aGFzaG9fcHJldmJsa25vIGFuZCBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLworCQliYXRj aC0+cHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKKwkJYmF0Y2gtPm5leHRQYWdl ID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmZp cnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJYmF0Y2gtPm1vcmVMZWZ0ID0gQmxv Y2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5wcmV2UGFnZSk7CisJYmF0Y2gtPm1vcmVSaWdodCA9IEJs b2NrTnVtYmVySXNWYWxpZChiYXRjaC0+bmV4dFBhZ2UpOworCisJLyogVW5sb2NrIChhbmQgbGlr ZWx5IHVucGluKSBidWZmZXIsIHBlciBhbWdldGJhdGNoIGNvbnRyYWN0ICovCisJaW5kZXhhbV91 dGlsX2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCk7CisKKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRl bSA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogTG9hZCBh bGwgdGhlIHF1YWxpZmllZCBpdGVtcyBmcm9tIGEgY3VycmVudCBpbmRleCBwYWdlCi0gKiBpbnRv IHNvLT5jdXJyUG9zLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgorICogaW50 byBiYXRjaC4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KICAqLwogc3RhdGlj IGludAogX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdl IHBhZ2UsCi0JCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikK KwkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJ ICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7CkBAIC02NDAsNyArNTg1 LDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdl IHBhZ2UsCiAJCQkJX2hhc2hfY2hlY2txdWFsKHNjYW4sIGl0dXApKQogCQkJewogCQkJCS8qIHR1 cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRlbShz bywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNoLCBp dGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7CiAJCQl9CiAJCQllbHNl CkBAIC02ODcsNyArNjMyLDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4LS07CiAJCQkJLyogdHVw bGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0 ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcwNiwxMyAr NjUxLDE1IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbiwg UGFnZSBwYWdlLAogCX0KIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQ b3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gYmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2hhc2hfc2F2ZWl0ZW0o SGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitfaGFzaF9zYXZlaXRlbShJbmRleFNj YW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNldE51bWJlciBvZmZudW0s IEluZGV4VHVwbGUgaXR1cCkKIHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5j dXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0g JmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50 X3RpZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJY3Vyckl0ZW0tPnR1cGxl T2Zmc2V0ID0gMDsKKwljdXJySXRlbS0+YWxsVmlzaWJsZSA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggY2Y3ZjBiOTAxLi5lOWJhOWIxZjMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtNTEwLDgxICs1MTAsNTkgQEAgX2hhc2hfZ2V0X25ld2J1 Y2tldF9mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVja2V0LAogICog X2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNj YW4gY2FsbGVyIGhhcwogICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KICAqCi0gKiBzY2FuLT5vcGFx dWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBpbmZvcm1hdGlvbiBh Ym91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5l cmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4g MCkuCisgKiBUaGUgYmF0Y2ggcGFyYW1ldGVyIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRo ZSBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZAorICogdHVwbGVzIHRoZXJlb24gKHRoaXMgc2hvdWxk IG9ubHkgYmUgY2FsbGVkIGlmIGJhdGNoLT5udW1LaWxsZWQgPiAwKS4KICAqCi0gKiBUaGUgY2Fs bGVyIGRvZXMgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBwYWdlIGFuZCBtYXkgb3IgbWF5IG5vdCBo YXZlIHRoZQotICogcGFnZSBwaW5uZWQgaW4gYSBidWZmZXIuICBOb3RlIHRoYXQgcmVhZC1sb2Nr IGlzIHN1ZmZpY2llbnQgZm9yIHNldHRpbmcKLSAqIExQX0RFQUQgc3RhdHVzICh3aGljaCBpcyBv bmx5IGEgaGludCkuCisgKiBDYWxsZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgYmF0 Y2ggcG9zaXRpb24ncyBwYWdlLiAgV2hlbiB3ZQorICogcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBi ZSBsb2NrZWQuICBJdCdsbCBjb250aW51ZSB0byBob2xkIHdoYXRldmVyIHBpbnMKKyAqIHdlcmUg aGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBp biBvbiBidWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAqIG9uIG92 ZXJmbG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1 cnJQb3MpLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWlu ZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRlLgotICoKLSAqIFRoZXJlIGFy ZSBuZXZlciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0IHRoZSB0aW1lIFZBQ1VVTSBi ZWdpbnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0aGUgcHJp bWFyeSBidWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBwaW4uICBBIHNjYW4gY2FuIGJl Z2luIGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UKLSAqIGJ1dCBi ZWZvcmUgaXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2ZXIgcGFz cyBWQUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9ja3MgdGhlIG5leHQgcGFnZSBi ZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJldmlvdXMgb25lLiAgVGhlcmVm b3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseQotICoga2lsbGlu ZyBhIFRJRCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxlLgorICog V2UgbWF0Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSBy aWdodCBvbmVzIHRvIHNldAorICogTFBfREVBRC4gIFdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcg TFBfREVBRCBiaXRzIG9uIHRoZSBwYWdlIExTTiBoYXZpbmcgbm90CisgKiBjaGFuZ2VkIHNpbmNl IGJhY2sgd2hlbiBfaGFzaF9yZWFkcGFnZSBzYXcgdGhlIHBhZ2UuICBXZSB0b3RhbGx5IGdpdmUg dXAgb24KKyAqIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4gdGhlIHBhZ2UgTFNOIGNoYW5nZWQu CiAgKi8KIHZvaWQKLV9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQorX2hhc2hf a2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewot CUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVs YXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCbG9ja051bWJlciBibGtubzsKIAlC dWZmZXIJCWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZz ZXROdW1iZXIgb2ZmbnVtLAogCQkJCW1heG9mZjsKLQlpbnQJCQludW1LaWxsZWQgPSBzby0+bnVt S2lsbGVkOwotCWludAkJCWk7CiAJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7Ci0JYm9v bAkJaGF2ZVBpbiA9IGZhbHNlOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOwogCi0JQXNzZXJ0KHNv LT5udW1LaWxsZWQgPiAwKTsKLQlBc3NlcnQoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpOwotCUFz c2VydChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwlBc3NlcnQoYmF0Y2gtPm51 bUtpbGxlZCA+IDApOworCUFzc2VydChCbG9ja051bWJlcklzVmFsaWQoYmF0Y2gtPmN1cnJQYWdl KSk7CiAKLQkvKgotCSAqIEFsd2F5cyByZXNldCB0aGUgc2NhbiBzdGF0ZSwgc28gd2UgZG9uJ3Qg bG9vayBmb3Igc2FtZSBpdGVtcyBvbiBvdGhlcgotCSAqIHBhZ2VzLgotCSAqLwotCXNvLT5udW1L aWxsZWQgPSAwOworCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJhdGNoLT5jdXJyUGFnZSwgSEFT SF9SRUFELAorCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCi0J Ymxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKLQlpZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChz by0+Y3VyclBvcykpCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJQXNz ZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAoYmF0Y2gtPmxzbiAhPSBsYXRlc3Rs c24pCiAJewotCQkvKgotCQkgKiBXZSBhbHJlYWR5IGhhdmUgcGluIG9uIHRoaXMgYnVmZmVyLCBz bywgYWxsIHdlIG5lZWQgdG8gZG8gaXMKLQkJICogYWNxdWlyZSBsb2NrIG9uIGl0LgotCQkgKi8K LQkJaGF2ZVBpbiA9IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJTG9ja0J1ZmZl cihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGlu dGluZyAqLworCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47CiAJfQotCWVsc2UK LQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1df UEFHRSk7CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCW9wYXF1ZSA9IEhhc2hQYWdl R2V0T3BhcXVlKHBhZ2UpOwogCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7 CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCisJLyogSXRlcmF0ZSB0aHJvdWdo IGJhdGNoLT5raWxsZWRJdGVtc1tdIGluIGluZGV4IHBhZ2Ugb3JkZXIgKi8KKwlmb3IgKGludCBp ID0gMDsgaSA8IGJhdGNoLT5udW1LaWxsZWQ7IGkrKykKIAl7Ci0JCWludAkJCWl0ZW1JbmRleCA9 IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+ Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCQlpbnQJCQlpdGVtSW5kZXggPSBiYXRjaC0+a2ls bGVkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9ICZiYXRjaC0+aXRl bXNbaXRlbUluZGV4XTsKIAogCQlvZmZudW0gPSBjdXJySXRlbS0+aW5kZXhPZmZzZXQ7CiAKLQkJ QXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1J bmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0 Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAK IAkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCiAJCXsKQEAgLTU5NCw2ICs1NzIsNyBAQCBfaGFz aF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCWlmIChJdGVtUG9pbnRlckVxdWFs cygmaXR1cGxlLT50X3RpZCwgJmN1cnJJdGVtLT5oZWFwVGlkKSkKIAkJCXsKIAkJCQkvKiBmb3Vu ZCB0aGUgaXRlbSAqLworCQkJCUFzc2VydCghY3Vyckl0ZW0tPmFsbFZpc2libGUpOwogCQkJCUl0 ZW1JZE1hcmtEZWFkKGlpZCk7CiAJCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKIAkJCQlicmVh azsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KQEAgLTYxMyw5ICs1OTIsNSBAQCBf aGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJTWFya0J1ZmZlckRpcnR5SGlu dChidWYsIHRydWUpOwogCX0KIAotCWlmIChzby0+aGFzaHNvX2J1Y2tldF9idWYgPT0gc28tPmN1 cnJQb3MuYnVmIHx8Ci0JCWhhdmVQaW4pCi0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBC VUZGRVJfTE9DS19VTkxPQ0spOwotCWVsc2UKLQkJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKKwlf aGFzaF9yZWxidWYocmVsLCBidWYpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBm YTg0YWJmYzUuLmVlYjdlY2Q4NiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyMDEs OCArMTIwMSw2IEBAIEhhc2hQYWdlU3RhdAogSGFzaFBhdGgKIEhhc2hTY2FuT3BhcXVlCiBIYXNo U2Nhbk9wYXF1ZURhdGEKLUhhc2hTY2FuUG9zRGF0YQotSGFzaFNjYW5Qb3NJdGVtCiBIYXNoU2tl d0J1Y2tldAogSGFzaFN0YXRlCiBIYXNoVmFsdWVGdW5jCi0tIAoyLjUxLjAKCg== --0000000000002fd78b0648b24456 Content-Type: application/x-patch; name="v8-0007-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v8-0007-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkkde7oe2 RnJvbSA0ODMwMjVjYTVjZDZhZGJkYjg3Nzk0Y2ZjZjE5NjhiZWNiMzViZDg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MzI6NTIgLTA1MDAKU3ViamVjdDogW1BBVENIIHY4IDcvOF0gQWRk IGZha2UgTFNOIHN1cHBvcnQgdG8gaGFzaCBpbmRleCBBTS4KClRoaXMgaXMgcHJlcGFyYXRpb24g Zm9yIGFuIHVwY29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50ZXJm YWNlIGFuZCBzd2l0Y2ggaGFzaCBvdmVyIHRvIGl0IChmcm9tIGFtZ2V0dHVwbGUpLiAgV2UgbmVl ZCBmYWtlCkxTTnMgdG8gbWFrZSBpdCBzYWZlIHRvIGFwcGx5IGJlaGF2aW9yIHRoYXQgaXMgZXF1 aXZhbGVudCB0byBuYnRyZWUncwpwcmV2aW91cyBkcm9wUGluIGJlaGF2aW9yIHRoYXQgd29ya3Mg d2l0aCB1bmxvZ2dlZCBoYXNoIGluZGV4IHNjYW5zLgoKVGhlIGNvbW1pdCB0aGF0IHdpbGwgYWRk IGhhc2hnZXRiYXRjaCBtYWtlcyB0aGUgcmVxdWlyZWQgY2hhbmdlcyB0bwpfaGFzaF9raWxsX2l0 ZW1zIHRoYXQgYWN0dWFsbHkgcmVsaWVzIG9uIGhhc2ggZ2VuZXJhdGluZyBmYWtlIExTTnMuCgpB dXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KLS0tCiBzcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoLmMgICAgICAgfCAgMjEgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hpbnNlcnQuYyB8ICAyMCArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92 ZmwuYyAgIHwgMTExICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHBhZ2UuYyAgIHwgIDIyICsrKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDUg aW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4 IDZhMjBiNjdmNi4uZDc0MmRhYmNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC00NzYsNiAr NDc2LDcgQEAgaGFzaGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKnN0YXRzLAogCUJ1ZmZlcgkJbWV0YWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJ SGFzaE1ldGFQYWdlIG1ldGFwOwogCUhhc2hNZXRhUGFnZSBjYWNoZWRtZXRhcDsKKwlYTG9nUmVj UHRyCXJlY3B0cjsKIAogCXR1cGxlc19yZW1vdmVkID0gMDsKIAludW1faW5kZXhfdHVwbGVzID0g MDsKQEAgLTYxNSw3ICs2MTYsNiBAQCBsb29wX3RvcDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChy ZWwpKQogCXsKIAkJeGxfaGFzaF91cGRhdGVfbWV0YV9wYWdlIHhscmVjOwotCQlYTG9nUmVjUHRy CXJlY3B0cjsKIAogCQl4bHJlYy5udHVwbGVzID0gbWV0YXAtPmhhc2htX250dXBsZXM7CiAKQEAg LTYyNSw4ICs2MjUsMTEgQEAgbG9vcF90b3A6CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBtZXRh YnVmLCBSRUdCVUZfU1RBTkRBUkQpOwogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9J RCwgWExPR19IQVNIX1VQREFURV9NRVRBX1BBR0UpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBh Z2UobWV0YWJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VM U04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsK IAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNjk5LDYgKzcwMiw3IEBAIGhhc2hidWNrZXRj bGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVm LAogCUJ1ZmZlcgkJYnVmOwogCUJ1Y2tldAkJbmV3X2J1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRT X09OTFkgPSBJbnZhbGlkQnVja2V0OwogCWJvb2wJCWJ1Y2tldF9kaXJ0eSA9IGZhbHNlOworCVhM b2dSZWNQdHIJcmVjcHRyOwogCiAJYmxrbm8gPSBidWNrZXRfYmxrbm87CiAJYnVmID0gYnVja2V0 X2J1ZjsKQEAgLTgyMSw3ICs4MjUsNiBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWws IEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkJCWlmIChSZWxhdGlvbk5l ZWRzV0FMKHJlbCkpCiAJCQl7CiAJCQkJeGxfaGFzaF9kZWxldGUgeGxyZWM7Ci0JCQkJWExvZ1Jl Y1B0cglyZWNwdHI7CiAKIAkJCQl4bHJlYy5jbGVhcl9kZWFkX21hcmtpbmcgPSBjbGVhcl9kZWFk X21hcmtpbmc7CiAJCQkJeGxyZWMuaXNfcHJpbWFyeV9idWNrZXRfcGFnZSA9IChidWYgPT0gYnVj a2V0X2J1Zik7CkBAIC04NDYsOCArODQ5LDExIEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9u IHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCQkJCQkJCQkJbmRl bGV0YWJsZSAqIHNpemVvZihPZmZzZXROdW1iZXIpKTsKIAogCQkJCXJlY3B0ciA9IFhMb2dJbnNl cnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX0RFTEVURSk7Ci0JCQkJUGFnZVNldExTTihCdWZmZXJH ZXRQYWdlKGJ1ZiksIHJlY3B0cik7CiAJCQl9CisJCQllbHNlCisJCQkJcmVjcHRyID0gWExvZ0dl dEZha2VMU04ocmVsKTsKKworCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJlY3B0 cik7CiAKIAkJCUVORF9DUklUX1NFQ1RJT04oKTsKIAkJfQpAQCAtOTA2LDE0ICs5MTIsMTUgQEAg aGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVmZmVy IGJ1Y2tldF9idWYsCiAJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwo cmVsKSkKIAkJewotCQkJWExvZ1JlY1B0cglyZWNwdHI7Ci0KIAkJCVhMb2dCZWdpbkluc2VydCgp OwogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAsIGJ1Y2tldF9idWYsIFJFR0JVRl9TVEFOREFSRCk7 CiAKIAkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NQTElUX0NM RUFOVVApOwotCQkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCQl9CisJCWVsc2UKKwkJCXJl Y3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwkJUGFnZVNldExTTihwYWdlLCByZWNwdHIp OwogCiAJCUVORF9DUklUX1NFQ1RJT04oKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5z ZXJ0LmMKaW5kZXggMGNlZmJhY2M5Li4zMzk1YmJjMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoaW5zZXJ0LmMKQEAgLTUwLDYgKzUwLDcgQEAgX2hhc2hfZG9pbnNlcnQoUmVsYXRpb24gcmVs LCBJbmRleFR1cGxlIGl0dXAsIFJlbGF0aW9uIGhlYXBSZWwsIGJvb2wgc29ydGVkKQogCXVpbnQz MgkJaGFzaGtleTsKIAlCdWNrZXQJCWJ1Y2tldDsKIAlPZmZzZXROdW1iZXIgaXR1cF9vZmY7CisJ WExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKgogCSAqIEdldCB0aGUgaGFzaCBrZXkgZm9yIHRoZSBp dGVtIChpdCdzIHN0b3JlZCBpbiB0aGUgaW5kZXggdHVwbGUgaXRzZWxmKS4KQEAgLTIxNiw3ICsy MTcsNiBAQCByZXN0YXJ0X2luc2VydDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsK IAkJeGxfaGFzaF9pbnNlcnQgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVj Lm9mZm51bSA9IGl0dXBfb2ZmOwogCkBAIC0yMjksMTAgKzIyOSwxMiBAQCByZXN0YXJ0X2luc2Vy dDoKIAkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSk7 CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfSU5TRVJUKTsK LQotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9 IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwg cmVjcHRyKTsKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAK IAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTM3Miw2ICszNzQsNyBAQCBfaGFzaF92YWN1dW1f b25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVm ZmVyIGJ1ZikKIAlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCUhhc2hQYWdlT3Bh cXVlIHBhZ2VvcGFxdWU7CiAJSGFzaE1ldGFQYWdlIG1ldGFwOworCVhMb2dSZWNQdHIJcmVjcHRy OwogCiAJLyogU2NhbiBlYWNoIHR1cGxlIGluIHBhZ2UgdG8gc2VlIGlmIGl0IGlzIG1hcmtlZCBh cyBMUF9ERUFEICovCiAJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKQEAg LTQyNCw3ICs0MjcsNiBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxh dGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJaWYgKFJlbGF0aW9uTmVl ZHNXQUwocmVsKSkKIAkJewogCQkJeGxfaGFzaF92YWN1dW1fb25lX3BhZ2UgeGxyZWM7Ci0JCQlY TG9nUmVjUHRyCXJlY3B0cjsKIAogCQkJeGxyZWMuaXNDYXRhbG9nUmVsID0gUmVsYXRpb25Jc0Fj Y2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhocmVsKTsKIAkJCXhscmVjLnNuYXBzaG90Q29uZmxp Y3RIb3Jpem9uID0gc25hcHNob3RDb25mbGljdEhvcml6b247CkBAIC00NDUsMTAgKzQ0NywxMiBA QCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZm ZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigxLCBtZXRhYnVm LCBSRUdCVUZfU1RBTkRBUkQpOwogCiAJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQs IFhMT0dfSEFTSF9WQUNVVU1fT05FX1BBR0UpOwotCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBh Z2UoYnVmKSwgcmVjcHRyKTsKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwg cmVjcHRyKTsKIAkJfQorCQllbHNlCisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOwor CisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCQlQYWdlU2V0TFNO KEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAkJRU5EX0NSSVRfU0VDVElPTigp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzUuLmFiZDFmOTFm YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jCkBAIC0xMzIsNiArMTMyLDcgQEAgX2hh c2hfYWRkb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1Ziwg Ym9vbCByZXRhaW5fcGluKQogCXVpbnQzMgkJaSwKIAkJCQlqOwogCWJvb2wJCXBhZ2VfZm91bmQg PSBmYWxzZTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCS8qCiAJICogV3JpdGUtbG9jayB0aGUg dGFpbCBwYWdlLiAgSGVyZSwgd2UgbmVlZCB0byBtYWludGFpbiBsb2NraW5nIG9yZGVyIHN1Y2gK QEAgLTM4MSw3ICszODIsNiBAQCBmb3VuZDoKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKFJlbGF0 aW9uTmVlZHNXQUwocmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9oYXNoX2Fk ZF9vdmZsX3BhZ2UgeGxyZWM7CiAKIAkJeGxyZWMuYm1wYWdlX2ZvdW5kID0gcGFnZV9mb3VuZDsK QEAgLTQwOCwxOCArNDA4LDIwIEBAIGZvdW5kOgogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDQsICZt ZXRhcC0+aGFzaG1fZmlyc3RmcmVlLCBzaXplb2YodWludDMyKSk7CiAKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfQUREX09WRkxfUEFHRSk7Ci0KLQkJUGFnZVNl dExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChtYXBidWYpKQot CQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7Ci0KLQkJaWYgKEJ1 ZmZlcklzVmFsaWQobmV3bWFwYnVmKSkKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXdt YXBidWYpLCByZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwg cmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCVBhZ2VTZXRMU04o QnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQobWFwYnVm KSkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7CisKKwlpZiAo QnVmZmVySXNWYWxpZChuZXdtYXBidWYpKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobmV3 bWFwYnVmKSwgcmVjcHRyKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwg cmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNTEwLDcgKzUxMiwxMSBAQCBf aGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIg b3ZmbGJ1ZiwKIAlCdWNrZXQJCWJ1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJQnVm ZmVyCQlwcmV2YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlCdWZmZXIJCW5leHRidWYgPSBJbnZhbGlk QnVmZmVyOwotCWJvb2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlOworCWJvb2wJCXVwZGF0ZV9tZXRh cCA9IGZhbHNlLAorCQkJCW1vZF93YnVmLAorCQkJCWlzX3ByaW1fYnVja2V0X3NhbWVfd3J0LAor CQkJCWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyog R2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGRvb21lZCBwYWdlICovCiAJX2hhc2hfY2hlY2twYWdl KHJlbCwgb3ZmbGJ1ZiwgTEhfT1ZFUkZMT1dfUEFHRSk7CkBAIC02NDEsMTkgKzY0NywyMSBAQCBf aGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIg b3ZmbGJ1ZiwKIAkJTWFya0J1ZmZlckRpcnR5KG1ldGFidWYpOwogCX0KIAorCS8qIERldGVybWlu ZSB3aGljaCBwYWdlcyBXQUwgcmVjb3JkIG1vZGlmaWVzICovCisJbW9kX3didWYgPSBmYWxzZTsK Kwlpc19wcmltX2J1Y2tldF9zYW1lX3dydCA9ICh3YnVmID09IGJ1Y2tldGJ1Zik7CisJaXNfcHJl dl9idWNrZXRfc2FtZV93cnQgPSAod2J1ZiA9PSBwcmV2YnVmKTsKKwogCS8qIFhMT0cgc3R1ZmYg Ki8KIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9zcXVlZXplX3Bh Z2UgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwotCQlpbnQJCQlpOwotCQlib29sCQltb2Rf d2J1ZiA9IGZhbHNlOwogCiAJCXhscmVjLnByZXZibGtubyA9IHByZXZibGtubzsKIAkJeGxyZWMu bmV4dGJsa25vID0gbmV4dGJsa25vOwogCQl4bHJlYy5udHVwcyA9IG5pdHVwczsKLQkJeGxyZWMu aXNfcHJpbV9idWNrZXRfc2FtZV93cnQgPSAod2J1ZiA9PSBidWNrZXRidWYpOwotCQl4bHJlYy5p c19wcmV2X2J1Y2tldF9zYW1lX3dydCA9ICh3YnVmID09IHByZXZidWYpOworCQl4bHJlYy5pc19w cmltX2J1Y2tldF9zYW1lX3dydCA9IGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0OworCQl4bHJlYy5p c19wcmV2X2J1Y2tldF9zYW1lX3dydCA9IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OwogCiAJCVhM b2dCZWdpbkluc2VydCgpOwogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGFzaFNx dWVlemVQYWdlKTsKQEAgLTY2MiwxNCArNjcwLDE0IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShSZWxh dGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQkgKiBidWNrZXQg YnVmZmVyIHdhcyBub3QgY2hhbmdlZCwgYnV0IHN0aWxsIG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQg dG8KIAkJICogZW5zdXJlIHRoYXQgd2UgY2FuIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gaXQg ZHVyaW5nIHJlcGxheS4KIAkJICovCi0JCWlmICgheGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93 cnQpCisJCWlmICghaXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCiAJCXsKIAkJCXVpbnQ4CQlmbGFn cyA9IFJFR0JVRl9TVEFOREFSRCB8IFJFR0JVRl9OT19JTUFHRSB8IFJFR0JVRl9OT19DSEFOR0U7 CiAKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBidWNrZXRidWYsIGZsYWdzKTsKIAkJfQogCi0J CWlmICh4bHJlYy5udHVwcyA+IDApCisJCWlmIChuaXR1cHMgPiAwKQogCQl7CiAJCQlYTG9nUmVn aXN0ZXJCdWZmZXIoMSwgd2J1ZiwgUkVHQlVGX1NUQU5EQVJEKTsKIApAQCAtNjc4LDEwICs2ODYs MTAgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1Ziwg QnVmZmVyIG92ZmxidWYsCiAKIAkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cF9vZmZzZXRz LAogCQkJCQkJCQluaXR1cHMgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7Ci0JCQlmb3IgKGkgPSAw OyBpIDwgbml0dXBzOyBpKyspCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5pdHVwczsgaSsrKQog CQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cHNbaV0sIHR1cHNfc2l6ZVtpXSk7CiAJCX0K LQkJZWxzZSBpZiAoeGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQgfHwgeGxyZWMuaXNfcHJl dl9idWNrZXRfc2FtZV93cnQpCisJCWVsc2UgaWYgKGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0IHx8 IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQogCQl7CiAJCQl1aW50OAkJd2J1Zl9mbGFnczsKIApA QCAtNjkxLDEwICs2OTksMTAgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVm ZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJCQkgKiBpZiBpdCBpcyB0aGUgc2FtZSBh cyBwcmltYXJ5IGJ1Y2tldCBidWZmZXIgb3IgdXBkYXRlIHRoZQogCQkJICogbmV4dGJsa25vIGlm IGl0IGlzIHNhbWUgYXMgdGhlIHByZXZpb3VzIGJ1Y2tldCBidWZmZXIuCiAJCQkgKi8KLQkJCUFz c2VydCh4bHJlYy5udHVwcyA9PSAwKTsKKwkJCUFzc2VydChuaXR1cHMgPT0gMCk7CiAKIAkJCXdi dWZfZmxhZ3MgPSBSRUdCVUZfU1RBTkRBUkQ7Ci0JCQlpZiAoIXhscmVjLmlzX3ByZXZfYnVja2V0 X3NhbWVfd3J0KQorCQkJaWYgKCFpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKIAkJCXsKIAkJCQl3 YnVmX2ZsYWdzIHw9IFJFR0JVRl9OT19DSEFOR0U7CiAJCQl9CkBAIC03MTQsNyArNzIyLDcgQEAg X2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVy IG92ZmxidWYsCiAJCSAqIHByZXZwYWdlLiAgRHVyaW5nIHJlcGxheSwgd2UgY2FuIGRpcmVjdGx5 IHVwZGF0ZSB0aGUgbmV4dGJsb2NrIGluCiAJCSAqIHdyaXRlcGFnZS4KIAkJICovCi0JCWlmIChC dWZmZXJJc1ZhbGlkKHByZXZidWYpICYmICF4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCkK KwkJaWYgKEJ1ZmZlcklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0 KQogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDMsIHByZXZidWYsIFJFR0JVRl9TVEFOREFSRCk7CiAK IAkJaWYgKEJ1ZmZlcklzVmFsaWQobmV4dGJ1ZikpCkBAIC03MzAsMjMgKzczOCwzMyBAQCBfaGFz aF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3Zm bGJ1ZiwKIAkJfQogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNI X1NRVUVFWkVfUEFHRSk7Ci0KLQkJLyogU2V0IExTTiBpZmYgd2J1ZiBpcyBtb2RpZmllZC4gKi8K LQkJaWYgKG1vZF93YnVmKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNw dHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShvdmZsYnVmKSwgcmVjcHRyKTsKLQot CQlpZiAoQnVmZmVySXNWYWxpZChwcmV2YnVmKSAmJiAheGxyZWMuaXNfcHJldl9idWNrZXRfc2Ft ZV93cnQpCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7Ci0J CWlmIChCdWZmZXJJc1ZhbGlkKG5leHRidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdl KG5leHRidWYpLCByZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYp LCByZWNwdHIpOwotCi0JCWlmICh1cGRhdGVfbWV0YXApCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdl dFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UJCQkJCQkvKiAhUmVsYXRpb25OZWVk c1dBTChyZWwpICovCisJeworCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCS8q IERldGVybWluZSBpZiB3YnVmIGlzIG1vZGlmaWVkICovCisJCWlmIChuaXR1cHMgPiAwKQorCQkJ bW9kX3didWYgPSB0cnVlOworCQllbHNlIGlmIChpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJ CW1vZF93YnVmID0gdHJ1ZTsKKwl9CisKKwkvKiBTZXQgTFNOIGlmZiB3YnVmIGlzIG1vZGlmaWVk LiAqLworCWlmIChtb2Rfd2J1ZikKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCBy ZWNwdHIpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOwor CisJaWYgKEJ1ZmZlcklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0 KQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7CisJaWYgKEJ1 ZmZlcklzVmFsaWQobmV4dGJ1ZikpCisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXh0YnVm KSwgcmVjcHRyKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIp OworCisJaWYgKHVwZGF0ZV9tZXRhcCkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFi dWYpLCByZWNwdHIpOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC05NTksNiArOTc3LDgg QEAgcmVhZHBhZ2U6CiAKIAkJCQlpZiAobml0dXBzID4gMCkKIAkJCQl7CisJCQkJCVhMb2dSZWNQ dHIJcmVjcHRyOworCiAJCQkJCUFzc2VydChuaXR1cHMgPT0gbmRlbGV0YWJsZSk7CiAKIAkJCQkJ LyoKQEAgLTk4Niw3ICsxMDA2LDYgQEAgcmVhZHBhZ2U6CiAJCQkJCS8qIFhMT0cgc3R1ZmYgKi8K IAkJCQkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJCQkJewotCQkJCQkJWExvZ1JlY1B0 cglyZWNwdHI7CiAJCQkJCQl4bF9oYXNoX21vdmVfcGFnZV9jb250ZW50cyB4bHJlYzsKIAogCQkJ CQkJeGxyZWMubnR1cHMgPSBuaXR1cHM7CkBAIC0xMDE4LDEwICsxMDM3LDEyIEBAIHJlYWRwYWdl OgogCQkJCQkJCQkJCQluZGVsZXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOwogCiAJCQkJ CQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9NT1ZFX1BBR0VfQ09O VEVOVFMpOwotCi0JCQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7 Ci0JCQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocmJ1ZiksIHJlY3B0cik7CiAJCQkJCX0K KwkJCQkJZWxzZQorCQkJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJCQlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7CisJCQkJCVBhZ2VTZXRMU04o QnVmZmVyR2V0UGFnZShyYnVmKSwgcmVjcHRyKTsKIAogCQkJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZS4uMjYzYmM3M2Yx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTYzMCw2ICs2MzAsNyBAQCBfaGFz aF9leHBhbmR0YWJsZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmKQogCXVpbnQzMgkJbG93 bWFzazsKIAlib29sCQltZXRhcF91cGRhdGVfbWFza3MgPSBmYWxzZTsKIAlib29sCQltZXRhcF91 cGRhdGVfc3BsaXRwb2ludCA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiByZXN0YXJ0 X2V4cGFuZDoKIApAQCAtOTAwLDcgKzkwMSw2IEBAIHJlc3RhcnRfZXhwYW5kOgogCWlmIChSZWxh dGlvbk5lZWRzV0FMKHJlbCkpCiAJewogCQl4bF9oYXNoX3NwbGl0X2FsbG9jYXRlX3BhZ2UgeGxy ZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm5ld19idWNrZXQgPSBtYXhidWNr ZXQ7CiAJCXhscmVjLm9sZF9idWNrZXRfZmxhZyA9IG9vcGFxdWUtPmhhc2hvX2ZsYWc7CkBAIC05 MzMsMTEgKzkzMywxMyBAQCByZXN0YXJ0X2V4cGFuZDoKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxy ZWMsIFNpemVPZkhhc2hTcGxpdEFsbG9jUGFnZSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChS TV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQUxMT0NBVEVfUEFHRSk7Ci0KLQkJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UoYnVmX25ibGtubyksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShtZXRhYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxT TihyZWwpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIp OworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWZfbmJsa25vKSwgcmVjcHRyKTsKKwlQYWdl U2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNU SU9OKCk7CiAKQEAgLTEwOTIsNiArMTA5NCw3IEBAIF9oYXNoX3NwbGl0YnVja2V0KFJlbGF0aW9u IHJlbCwKIAlTaXplCQlhbGxfdHVwc19zaXplID0gMDsKIAlpbnQJCQlpOwogCXVpbnQxNgkJbml0 dXBzID0gMDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCWJ1Y2tldF9vYnVmID0gb2J1ZjsKIAlv cGFnZSA9IEJ1ZmZlckdldFBhZ2Uob2J1Zik7CkBAIC0xMjk2LDcgKzEyOTksNiBAQCBfaGFzaF9z cGxpdGJ1Y2tldChSZWxhdGlvbiByZWwsCiAKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQog CXsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2hhc2hfc3BsaXRfY29tcGxldGUgeGxyZWM7 CiAKIAkJeGxyZWMub2xkX2J1Y2tldF9mbGFnID0gb29wYXF1ZS0+aGFzaG9fZmxhZzsKQEAgLTEz MTAsMTAgKzEzMTIsMTIgQEAgX2hhc2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQlYTG9n UmVnaXN0ZXJCdWZmZXIoMSwgYnVja2V0X25idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJcmVj cHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQ09NUExFVEUpOwot Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7Ci0JCVBh Z2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRfbmJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UK KwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0 UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1 Y2tldF9uYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIAotLSAKMi41MS4w Cgo= --0000000000002fd78b0648b24456 Content-Type: application/x-patch; name="v8-0005-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Disposition: attachment; filename="v8-0005-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkkde7on4 RnJvbSA1MDk5Y2NhNTRlOGUxZDBmOTczMWY0YzIxNTE0MjcyNjhlM2UxN2Q1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHY4IDUvOF0gQWRk IHByZWZldGNoaW5nIHRvIGluZGV4IHNjYW5zIHVzaW5nIGJhdGNoIGludGVyZmFjZXMuCgpUaGlz IGNvbW1pdCBpbXBsZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMsIG1hZGUg cG9zc2libGUgYnkKdGhlIHJlY2VudCBhZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRv IGJvdGggdGhlIHRhYmxlIEFNIGFuZAppbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgbWF0Y2hpbmcgVElEcwoocmF0aGVy IHRoYW4gb25lIHR1cGxlIGF0IGEgdGltZSksIGVhY2ggb2Ygd2hpY2ggbXVzdCBiZSB0YWtlbiBm cm9tCmluZGV4IHR1cGxlcyB0aGF0IGFwcGVhciB0b2dldGhlciBvbiBhIHNpbmdsZSBpbmRleCBw YWdlLiAgVGhpcyBhbGxvd3MKbXVsdGlwbGUgYmF0Y2hlcyB0byBiZSBoZWxkIG9wZW4gc2ltdWx0 YW5lb3VzbHkuICBHaXZpbmcgdGhlIHRhYmxlIEFNIGFuCmV4cGxpY2l0IHVuZGVyc3RhbmRpbmcg b2YgaW5kZXggQU0gY29uY2VwdHMvaW5kZXggcGFnZSBib3VuZGFyaWVzIGFsbG93cwppdCB0byBj b25zaWRlciBhbGwgb2YgdGhlIHJlbGV2YW50IGNvc3RzIGFuZCBiZW5lZml0cy4KClByZWZldGNo aW5nIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgcHJlZmV0Y2hpbmcgcG9zaXRpb24gdW5kZXIgdGhl CmNvbnRyb2wgb2YgdGhlIHRhYmxlIEFNIGFuZCBjb3JlIGNvZGUuICBUaGlzIGlzIGNsb3NlbHkg cmVsYXRlZCB0byB0aGUKc2NhbiBwb3NpdGlvbiBhZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNo IGludHJvZHVjZWQgdGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlLiAgQSByZWFkIHN0cmVhbSBjYWxs YmFjayBhZHZhbmNlcyB0aGUgcmVhZCBzdHJlYW0gYXMgbmVlZGVkIHRvCnByb3ZpZGUgc3VmZmlj aWVudGx5IG1hbnkgaGVhcCBibG9jayBudW1iZXJzIHRvIG1haW50YWluIHRoZSByZWFkCnN0cmVh bSdzIHRhcmdldCBwcmVmZXRjaCBkaXN0YW5jZS4KCkFuIGltcG9ydGFudCBnb2FsIG9mIHRoZSBh bWdldGJhdGNoIGRlc2lnbiBpcyB0byBlbmFibGUgdGhlIHRhYmxlIEFNJ3MKcmVhZCBzdHJlYW0g Y2FsbGJhY2sgdG8gYWR2YW5jZSBpdHMgcHJlZmV0Y2ggcG9zaXRpb24gdXNpbmcgVElEcyB0aGF0 CmFwcGVhciBvbiBhIGxlYWYgcGFnZSB0aGF0J3MgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBw b3NpdGlvbidzIGxlYWYKcGFnZS4gIFRoaXMgaXMgY3J1Y2lhbCB3aXRoIHNjYW5zIG9mIGluZGV4 ZXMgd2hlcmUgZWFjaCBsZWFmIHBhZ2UKaGFwcGVucyB0byBoYXZlIHJlbGF0aXZlbHkgZmV3IGRp c3RpbmN0IGhlYXAgYmxvY2tzIGFtb25nIGl0cyBtYXRjaGluZwpUSURzIChhcyB3ZWxsIGFzIHdp dGggc2NhbnMgd2l0aCBsZWFmIHBhZ2VzIHRoYXQgaGF2ZSByZWxhdGl2ZWx5IGZldwp0b3RhbCBt YXRjaGluZyBpdGVtcykuICBJbmRleCBzY2FucyBjYW4gaGF2ZSBhcyBtYW55IGFzIDY0IG9wZW4g YmF0Y2hlcywKd2hpY2ggdGVzdGluZyBoYXMgc2hvd24gdG8gYmUgYWJvdXQgdGhlIG1heGltdW0g bnVtYmVyIHRoYXQgY2FuIGV2ZXIgYmUKdXNlZnVsLiAgQmF0Y2hlcyBhcmUgbWFpbnRhaW5lZCBp biBzY2FuIG9yZGVyIHVzaW5nIGEgc2ltcGxlIHJpbmcgYnVmZmVyCmRhdGEgc3RydWN0dXJlLgoK SW4gcmFyZSBjYXNlcyB3aGVyZSB0aGUgc2NhbiBleGNlZWRzIHRoaXMgcXVhc2ktYXJiaXRyYXJ5 IGxpbWl0IG9mIDY0LAp0aGUgcmVhZCBzdHJlYW0gaXMgdGVtcG9yYXJpbHkgcGF1c2VkLiAgUHJl ZmV0Y2hpbmcgKHZpYSB0aGUgcmVhZApzdHJlYW0pIGlzIHJlc3VtZWQgb25seSBhZnRlciB0aGUg c2NhbiBwb3NpdGlvbiBhZHZhbmNlcyBiZXlvbmQgaXRzCmN1cnJlbnQgb3BlbiBiYXRjaCBhbmQg dGhlbiBmcmVlcyBpdCBieSBjYWxsaW5nIGFtZnJlZWJhdGNoIGFuZCByZW1vdmluZwppdCBmcm9t IHRoZSBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIuICBUZXN0aW5nIGhhcyBzaG93biB0aGF0IGl0 IGlzbid0CnZlcnkgY29tbW9uIGZvciBzY2FucyB0byBob2xkIG9wZW4gbW9yZSB0aGFuIGFib3V0 IDEwIGJhdGNoZXMgdG8gZ2V0IHRoZQpkZXNpcmVkIEkvTyBwcmVmZXRjaCBkaXN0YW5jZS4KCkF1 dGhvcjogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hl Z2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJh emVsLmRlPgpSZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29t PgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4 LTUwMDBiODk0ZWJhYkBlbnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgIDM5ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIv Y29zdC5oICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgMjg0ICsrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAgICB8ICAxNiArLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwogZG9jL3NyYy9zZ21sL2NvbmZpZy5z Z21sICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsKIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNn bWwgICAgICAgICAgICAgICAgICAgICB8IDM3MiArKysrKysrKysrKysrKystLS0KIGRvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgICAgICAgICAgICB8ICAxMyArLQogc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwgICAzICstCiAxMSBmaWxlcyBj aGFuZ2VkLCA2ODggaW5zZXJ0aW9ucygrKSwgNjUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2Fu LmgKaW5kZXggYWU4NWU4ZGRjLi4yNjBjM2M1MmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMjAs NiArMjAsNyBAQAogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1ZGUgInBvcnQv YXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCisjaW5jbHVkZSAic3RvcmFnZS9y ZWFkX3N0cmVhbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKICNpbmNs dWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgpAQCAtMTI0 LDYgKzEyNSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXJE YXRhICpQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyOwogdHlwZWRlZiBzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YQogewogCVJlbGF0aW9uCXJlbDsKKwlSZWFkU3RyZWFtICpyczsKIH0gSW5k ZXhGZXRjaFRhYmxlRGF0YTsKIAogLyoKQEAgLTIyNyw4ICsyMjksMTQgQEAgdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKICAqIE1heGltdW0gbnVtYmVy IG9mIGJhdGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVwIGluIG1lbW9yeS4gIFdlIG5lZWQg YQogICogbWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9ubHkgY29uc2lkZXIgcmVsZWFzaW5n IG9uZSBiYXRjaCB3aGVuIGFub3RoZXIKICAqIGlzIHJlYWQuCisgKgorICogVGhlIGNob2ljZSBv ZiA2NCBiYXRjaGVzIGlzIGFyYml0cmFyeS4gIEl0J3MgYWJvdXQgMU1CIG9mIGRhdGEgd2l0aCA4 S0IKKyAqIHBhZ2VzICg1MTJrQiBmb3IgcGFnZXMsIGFuZCB0aGVuIGEgYml0IG9mIG92ZXJoZWFk KS4gV2Ugc2hvdWxkIG5vdCByZWFsbHkKKyAqIG5lZWQgdGhpcyBtYW55IGJhdGNoZXMgaW4gbW9z dCBjYXNlcywgdGhvdWdoLiBUaGUgcmVhZCBzdHJlYW0gbG9va3MgYWhlYWQKKyAqIGp1c3QgZW5v dWdoIHRvIHF1ZXVlIGVub3VnaCBJT3MsIGFkanVzdGluZyB0aGUgZGlzdGFuY2UgKFRJRHMsIGJ1 dAorICogdWx0aW1hdGVseSB0aGUgbnVtYmVyIG9mIGZ1dHVyZSBiYXRjaGVzKSB0byBtZWV0IHRo YXQuCiAgKi8KLSNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUwkJMgorI2RlZmluZSBJTkRF WF9TQ0FOX01BWF9CQVRDSEVTCQk2NAogI2RlZmluZSBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVMJ MgogI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pIFwKIAkoKHNjYW4pLT5iYXRj aHJpbmdidWYtPm5leHRCYXRjaCAtIChzY2FuKS0+YmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpCkBA IC0yNzAsNiArMjc4LDE0IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5k ZXhTY2FuQmF0Y2g7CiAgKiBtYXRjaGVzIGluLiAgSG93ZXZlciwgdGFibGUgQU1zIGFyZSBmcmVl IHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3aGF0ZXZlcgogICogb3JkZXIgaXMgbW9zdCBjb252 ZW5pZW50L2VmZmljaWVudCAtLSBwcm92aWRlZCB0aGF0IHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QK ICAqIGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgbGF0ZXIg cmV0dXJucyB0dXBsZXMgaW4uCisgKgorICogVGhpcyBkYXRhIHN0cnVjdHVyZSBhbHNvIHByb3Zp ZGVzIHRhYmxlIEFNcyB3aXRoIGEgd2F5IHRvIHJlYWQgYWhlYWQgb2YgdGhlCisgKiBjdXJyZW50 IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBiYXRjaGVzL2luZGV4IHBhZ2VzLiAgVGhlIGZ1 cnRoZXIgb3V0CisgKiB0aGUgdGFibGUgQU0gcmVhZHMgYWhlYWQgbGlrZSB0aGlzLCB0aGUgZnVy dGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVyZS4KKyAqIFRoYXQgd2F5IHRoZSB0YWJsZSBB TSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBhZ2dyZXNzaXZlbHkgYXMgZGVzaXJlZC4KKyAq IEZvciBleGFtcGxlLCBpbmRleCBzY2FucyBzb21ldGltZXMgbmVlZCB0byByZWFkYWhlYWQgYnkg YXMgbWFueSBhcyBhIGZldworICogZG96ZW4gYW1nZXRiYXRjaCBiYXRjaGVzIGluIG9yZGVyIHRv IG1haW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoCisgKiBkaXN0YW5jZSAoZGlzdGFuY2Ug Zm9yIHJlYWRpbmcgdGFibGUgYmxvY2tzL2ZldGNoaW5nIHRhYmxlIHR1cGxlcykuCiAgKi8KIHR5 cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgogewpAQCAtMjc5LDYgKzI5NSw3IEBAIHR5cGVk ZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgogCS8qIGN1cnJlbnQgcG9zaXRpb25zIGluIGJhdGNo ZXNbXSBmb3Igc2NhbiAqLwogCUJhdGNoUmluZ0l0ZW1Qb3Mgc2NhblBvczsJLyogc2NhbidzIHJl YWQgcG9zaXRpb24gKi8KIAlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9y ZSBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3MgcHJlZmV0Y2hQb3M7CS8qIHByZWZldGNo aW5nIHBvc2l0aW9uICovCiAKIAlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2g7CiAKQEAgLTI5Nyw2 ICszMTQsMjYgQEAgdHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nQnVmZmVyCiAJLyogQXJyYXkgb2Yg cG9pbnRlcnMgdG8gcmluZyBidWZmZXIgYmF0Y2hlcyAqLwogCUluZGV4U2NhbkJhdGNoIGJhdGNo ZXNbSU5ERVhfU0NBTl9NQVhfQkFUQ0hFU107CiAKKwkvKgorCSAqIFByZWZldGNoaW5nIHJlbGF0 ZWQgc3RhdGUuCisJICoKKwkgKiBYWFggU2hvdWxkIHdlIG1vdmUgdGhpcyB0byBhIGhlYXBhbSBz dHJ1Y3QsIHN1Y2ggYXMgSW5kZXhGZXRjaEhlYXBEYXRhPworCSAqCisJICogY3VycmVudFByZWZl dGNoQmxvY2sgaXMgdGhlIHRhYmxlIEFNIGJsb2NrIG51bWJlciB0aGF0IHdhcyByZXR1cm5lZCBi eQorCSAqIGl0cyByZWFkIHN0cmVhbSBjYWxsYmFjayBtb3N0IHJlY2VudGx5LiAgVXNlZCB0byBz dXBwcmVzcyBkdXBsaWNhdGUKKwkgKiBzdWNjZXNzaXZlIHJlYWQgc3RyZWFtIGJsb2NrIHJlcXVl c3RzLgorCSAqCisJICogT2NjYXNpb25hbGx5LCB0aGUgcmVhZCBzdHJlYW0gY2FsbGJhY2sgd2ls bCByZXF1ZXN0IGFub3RoZXIgdGFibGUgYmxvY2sKKwkgKiB3aGVuIHRoZSBzY2FuIGhhcyBhbHJl YWR5IHN0b3JlZCBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTLW1hbnkgYmF0Y2hlcy4KKwkgKiBUaGUg cGF1c2VkIGZsYWcgY2FuIHNldCB0byByZW1lbWJlciB0aGF0IHRoZSBjYWxsYmFjayBoYWQgdG8g cmV0dXJuCisJICogcmVhZF9zdHJlYW1fcGF1c2UoKSAocmF0aGVyIHRoYW4gdGhlIG5leHQgYmxv Y2sgaW4gbGluZSB0byBiZSByZWFkKS4KKwkgKiBXaGVuIHRoZSBzY2FuIGNhbiBzdWJzZXF1ZW50 bHkgY29uc3VtZXMgZW5vdWdoIHNjYW5Qb3MgaXRlbXMgdG8gbWFrZSBpdAorCSAqIHNhZmUgdG8g ZnJlZSBhbm90aGVyIGJhdGNoLCBpdCBtdXN0IGNoZWNrIHRoaXMgZmxhZy4gIElmIHRoZSBmbGFn IGlzCisJICogc2V0LCB0aGVuIHRoZSBzY2FuIHNob3VsZCBjYWxsIHJlYWRfc3RyZWFtX3Jlc3Vt ZSAoYW5kIHVuc2V0IHRoZSBmbGFnKS4KKwkgKi8KKwlCbG9ja051bWJlciBjdXJyZW50UHJlZmV0 Y2hCbG9jazsKKwlib29sCQlwYXVzZWQ7CisKIH0gQmF0Y2hSaW5nQnVmZmVyOwogCiBzdHJ1Y3Qg SW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggMDdiOGJmYTYz Li42MGRjNGVhM2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysr IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTIsNiArNTIsNyBAQCBleHRlcm4g UEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4g UEdETExJTVBPUlQgYm9vbCBlbmFibGVfc2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV9pbmRleHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhv bmx5c2NhbjsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0 Y2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV90aWRzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wg ZW5hYmxlX3NvcnQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRl eCA0OTNkNmNiNzIuLjc2MWMyMzc1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3Mu aCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5j bHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZnBhZ2UuaCIKQEAg LTYwLDYgKzYxLDkgQEAgc3RhdGljIEJsb2NrTnVtYmVyIGhlYXBhbV9zY2FuX2dldF9ibG9ja3Nf ZG9uZShIZWFwU2NhbkRlc2MgaHNjYW4pOwogc3RhdGljIGJvb2wgQml0bWFwSGVhcFNjYW5OZXh0 QmxvY2soVGFibGVTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJYm9vbCAqcmVjaGVjaywKIAkJCQkJ CQkJCXVpbnQ2NCAqbG9zc3lfcGFnZXMsIHVpbnQ2NCAqZXhhY3RfcGFnZXMpOworc3RhdGljIEJs b2NrTnVtYmVyIGhlYXBhbV9nZXRuZXh0X3N0cmVhbShSZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJ CQkJCQkJIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJCQkgdm9pZCAqcGVy X2J1ZmZlcl9kYXRhKTsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg1LDYgKzg5LDcgQEAg aGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKIAlJbmRleEZldGNoSGVhcERh dGEgKmhzY2FuID0gcGFsbG9jX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCiAJaHNjYW4t PnhzX2Jhc2UucmVsID0gcmVsOworCWhzY2FuLT54c19iYXNlLnJzID0gTlVMTDsKIAloc2Nhbi0+ eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CiAJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051 bWJlcjsKIAloc2Nhbi0+dm1idWYgPSBJbnZhbGlkQnVmZmVyOwpAQCAtOTcsNiArMTAyLDkgQEAg aGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJ SW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsK IAorCWlmIChzY2FuLT5ycykKKwkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+cnMpOworCiAJLyog ZGVsaWJlcmF0ZWx5IGRvbid0IGRyb3AgVk0gYnVmZmVyIHBpbiBoZXJlICovCiAJaWYgKEJ1ZmZl cklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQogCXsKQEAgLTExMyw2ICsxMjEsOSBAQCBoZWFwYW1f aW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAKIAloZWFwYW1faW5k ZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CiAKKwlpZiAoc2Nhbi0+cnMpCisJCXJlYWRfc3RyZWFtX2Vu ZChzY2FuLT5ycyk7CisKIAlpZiAoaHNjYW4tPnZtYnVmICE9IEludmFsaWRCdWZmZXIpCiAJewog CQlSZWxlYXNlQnVmZmVyKGhzY2FuLT52bWJ1Zik7CkBAIC0xNDYsNyArMTU3LDE3IEBAIGhlYXBh bV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJ aWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQogCQkJUmVsZWFzZUJ1ZmZlcihoc2Nh bi0+eHNfY2J1Zik7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWFkQnVmZmVyKGhzY2FuLT54c19i YXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7CisJCS8qCisJCSAqIFdoZW4gdXNpbmcgYSByZWFkIHN0 cmVhbSwgdGhlIHN0cmVhbSB3aWxsIGFscmVhZHkga25vdyB3aGljaCBibG9jaworCQkgKiBudW1i ZXIgY29tZXMgbmV4dCAodGhvdWdoIGFuIGFzc2VydGlvbiB3aWxsIHZlcmlmeSBhIG1hdGNoIGJl bG93KQorCQkgKi8KKwkJaWYgKHNjYW4tPnJzKQorCQkJaHNjYW4tPnhzX2NidWYgPSByZWFkX3N0 cmVhbV9uZXh0X2J1ZmZlcihzY2FuLT5ycywgTlVMTCk7CisJCWVsc2UKKwkJCWhzY2FuLT54c19j YnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19ibGspOworCisJ CUFzc2VydChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSk7CisJCUFzc2VydChCdWZmZXJH ZXRCbG9ja051bWJlcihoc2Nhbi0+eHNfY2J1ZikgPT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpKTsKIAogCQkvKgogCQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0 aGUgZmlyc3QgdGltZQpAQCAtMjQ0LDYgKzI2NSwxNSBAQCBoZWFwYW1fYmF0Y2hfcmV0dXJuX3Rp ZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCwKIC8qCiAgKiBo ZWFwX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eQogICoJCU9idGFpbiB2aXNpYmlsaXR5IGluZm9y bWF0aW9uIGZvciBldmVyeSBUSUQgZnJvbSBjYWxsZXIncyBiYXRjaC4KKyAqCisgKiBoZWFwYW1f YmF0Y2hfZ2V0bmV4dF90aWQgbXVzdCByZWxpYWJseSBhZ3JlZSB3aXRoIGhlYXBhbV9nZXRuZXh0 X3N0cmVhbQorICogYWJvdXQgd2hpY2ggaGVhcCBibG9ja3MvVElEcyB3aWxsIHJlcXVpcmUgYSBo ZWFwIGZldGNoIChhbmQgd2hpY2ggVElEcworICogd29uJ3QgZHVlIHRvIHBvaW50aW5nIHRvIGFu IGFsbC12aXNpYmxlIGhlYXAgcGFnZSkuICBPdGhlcndpc2Ugd2UgcmlzaworICogYWxsb3dpbmcg dGhlIHJlYWQgc3RyZWFtIHRvIHJldHVybiB1bmV4cGVjdGVkIGhlYXAgYnVmZmVycy9wYWdlcy4K KyAqCisgKiBDYWNoaW5nIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gdXAgZnJvbnQgYXZvaWRzIHRo YXQgcHJvYmxlbS4gIElmIGEgVk0gYml0CisgKiBpcyBjb25jdXJyZW50bHkgc2V0IChvciB1bnNl dCksIGl0IGNhbid0IG1hdHRlciwgc2luY2UgZXZlcnlib2R5IHdpbGwgaGF2ZQorICogd29ya3Mg b2ZmIG9mIHRoaXMgaW1tdXRhYmxlIGxvY2FsIGNhY2hlLgogICovCiBzdGF0aWMgdm9pZAogaGVh cF9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCkKQEAgLTMwNCw2ICszMzQsNyBAQCBoZWFwX2JhdGNoX2dldG5leHQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAogCiAJLyogWFhYOiB3ZSBz aG91bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwog CUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisJQXNzZXJ0KCFiYXRj aHJpbmdidWYtPnBhdXNlZCk7CiAKIAkvKgogCSAqIFdoZW4gY2FsbGVyIHByb3ZpZGVzIGEgcHJp b3JiYXRjaCBpdCBoYWQgYmV0dGVyIGJlIGZvciB0aGUgbGFzdCB2YWxpZApAQCAtMzUyLDYgKzM4 MywyOSBAQCBoZWFwX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBwcmlvcmJhdGNoLAogCQkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKIAkJCWJhdGNo LT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCQl9CisKKwkJLyoKKwkJICogRGVsYXkgaW5pdGlhbGl6 aW5nIHN0cmVhbSB1bnRpbCByZWFkaW5nIGZyb20gc2NhbidzIHNlY29uZCBiYXRjaC4KKwkJICog VGhpcyBoZXVyaXN0aWMgYXZvaWRzIHdhc3RpbmcgY3ljbGVzIG9uIHN0YXJ0aW5nIGEgcmVhZCBz dHJlYW0gZm9yCisJCSAqIHZlcnkgc2VsZWN0aXZlIGluZGV4IHNjYW5zLiAgV2UgY2FuIGxpa2Vs eSBpbXByb3ZlIHVwb24gdGhpcywgYnV0CisJCSAqIGl0IHdvcmtzIHdlbGwgZW5vdWdoIGZvciBu b3cuCisJCSAqCisJCSAqIEFsc28gYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdoZXJl IHdlJ3JlIHVuYWJsZSB0byBkcm9wIGVhY2gKKwkJICogYmF0Y2gncyBidWZmZXIgcGluIHJpZ2h0 IGF3YXkgKG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdlIGFyZQorCQkgKiBub3QgcHJlcGFy ZWQgdG8gc2Vuc2libHkgbGltaXQgdGhlIHRvdGFsIG51bWJlciBvZiBidWZmZXIgcGlucyBoZWxk CisJCSAqIChyZWFkIHN0cmVhbSBoYW5kbGVzIGFsbCBwaW4gcmVzb3VyY2UgbWFuYWdlbWVudCBm b3IgdXMsIGFuZCBrbm93cworCQkgKiBub3RoaW5nIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBw YWdlcy93aXRoaW4gYmF0Y2hlcykuCisJCSAqLworCQlpZiAoIXNjYW4tPnhzX2hlYXBmZXRjaC0+ cnMgJiYgcHJpb3JiYXRjaCAmJiBzY2FuLT5NVkNDU2NhbiAmJgorCQkJZW5hYmxlX2luZGV4c2Nh bl9wcmVmZXRjaCkKKwkJeworCQkJQXNzZXJ0KElOREVYX1NDQU5fUE9TX0lOVkFMSUQoJmJhdGNo cmluZ2J1Zi0+cHJlZmV0Y2hQb3MpKTsKKworCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyA9CisJ CQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwK KwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5fRk9SS05VTSwKKwkJCQkJCQkJ CQkgICBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0sIHNjYW4sIDApOworCQl9CiAJfQogCiAJLyogeHNf aGl0dXAgaXMgbm90IHN1cHBvcnRlZCBieSBhbWdldGJhdGNoIHNjYW5zICovCkBAIC0zODMsMTQg KzQzNywzNCBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAkvKiB4c19oaXR1cCBpcyBub3Qgc3VwcG9ydGVkIGJ5 IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KIAlBc3NlcnQoIXNjYW4tPnhzX2hpdHVwKTsKIAorCS8qIHNj YW4gc2hvdWxkIG9ubHkgYmUgcGF1c2VkIHdoZW4gdGhlcmUncyBubyBmcmVlIGJhdGNoIHNsb3Rz ICovCisJQXNzZXJ0KCFiYXRjaHJpbmdidWYtPnBhdXNlZCB8fCBJTkRFWF9TQ0FOX0JBVENIX0ZV TEwoc2NhbikpOworCiAJLyogSW5pdGlhbGl6ZSBkaXJlY3Rpb24gb24gZmlyc3QgY2FsbCAqLwog CWlmIChiYXRjaHJpbmdidWYtPmRpcmVjdGlvbiA9PSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbikK IAkJYmF0Y2hyaW5nYnVmLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CiAKKwkvKgorCSAqIFhYWCBT aG91bGRuJ3QgdGhpcyBhbHNvIHVwZGF0ZSB0aGUgYmF0Y2hyaW5nYnVmLT5kaXJlY3Rpb24/IElm IHdlIGdldAorCSAqIHRvIHRoZSBuZXh0IGJsb2NrIGhhbmdsaW5nIGRpcmVjdGlvbiBjaGFuZ2Us IHRoZW4gd2Ugd2lsbCByZW1lbWJlciBpdAorCSAqIChiZWNhdXNlIGhlYXBhbV9iYXRjaF9yZXdp bmQgd2lsbCBzdG9yZSBpdCkuIEJ1dCBpZiB3ZSByZXR1cm4gaW4gdGhlCisJICogbmV4dCBibG9j aywgd29uJ3Qgd2UgZm9yZ2V0IGFib3V0IGl0PworCSAqCisJICogWFhYIEl0J3MgYSBiaXQgd2Vp cmQgd2UgaGFuZGxlIHRoZSBkaXJlY3Rpb24gY2hhbmdlIGluIHR3byBwbGFjZXMuCisJICogV291 bGQgYmUgZ29vZCB0byBleHBsYWluIHdoeSB0aGF0J3MgbmVjZXNzYXJ5LgorCSAqCisJICogWFhY IEhvdyBjb21lIHRoaXMgZG9lc24ndCBuZWVkIHRvIGRvIGhlYXBhbV9iYXRjaF9yZXdpbmQgdG9v PyBDb3VsZAorCSAqIHRoZXJlIGJlIHNvbWUgZnV0dXJlIGJhdGNoZXMgYWxyZWFkeSBsb2FkZWQ/ CisJICovCiAJaWYgKHVubGlrZWx5KGJhdGNocmluZ2J1Zi0+ZGlyZWN0aW9uICE9IGRpcmVjdGlv bikpCiAJeworCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykKKwkJCXJlYWRfc3RyZWFtX3Jl c2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCQliYXRjaF9yZXNldF9wb3MoJmJhdGNocmlu Z2J1Zi0+cHJlZmV0Y2hQb3MpOworCiAJCS8qIFdlIG1heSBjaGFuZ2UgZGlyZWN0aW9uIGFmdGVy IHJlYWRpbmcgdGhlIGxhc3QgYmF0Y2guICovCiAJCXNjYW4tPmZpbmlzaGVkID0gZmFsc2U7CisJ CWJhdGNocmluZ2J1Zi0+cGF1c2VkID0gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTQyNyw2ICs1MDEs NyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbikKIAkgKi8KIAlpZiAoSU5ERVhfU0NBTl9CQVRDSF9MT0FERUQoc2Nh biwgc2NhblBvcy0+YmF0Y2ggKyAxKSkKIAl7CisJCS8qIE5leHQgYmF0Y2ggYWxyZWFkeSBsb2Fk ZWQgYnkgaGVhcGFtX2dldG5leHRfc3RyZWFtICovCiAJCXNjYW5CYXRjaCA9IElOREVYX1NDQU5f QkFUQ0goc2Nhbiwgc2NhblBvcy0+YmF0Y2ggKyAxKTsKIAl9CiAJZWxzZSBpZiAoKHNjYW5CYXRj aCA9IGhlYXBfYmF0Y2hfZ2V0bmV4dChzY2FuLCBzY2FuQmF0Y2gsIGRpcmVjdGlvbikpICE9IE5V TEwpCkBAIC00NjYsMTEgKzU0MSwyMTggQEAgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIAkJLyogd2UgY2FuJ3Qg c2tpcCBhbnkgYmF0Y2hlcyAqLwogCQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0g c2NhblBvcy0+YmF0Y2gpOworCisJCWlmIChiYXRjaHJpbmdidWYtPnBhdXNlZCkKKwkJeworCQkJ LyoKKwkJCSAqIFRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0gd2FzIHBhdXNlZCBieSBoZWFwYW1fZ2V0 bmV4dF9zdHJlYW0gZHVlCisJCQkgKiB0byBleGhhdXN0aW5nIGFsbCBhdmFpbGFibGUgZnJlZSBi YXRjaCBzbG90cy4gIFdlIGp1c3QgZnJlZWQgdXAKKwkJCSAqIG9uZSBzdWNoIHNsb3Qgbm93LCB0 aG91Z2guICBSZXN1bWUgdGhlIHJlYWQgc3RyZWFtIHRvIHJlLWVuYWJsZQorCQkJICogcHJlZmV0 Y2hpbmcuCisJCQkgKi8KKwkJCUFzc2VydCghSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pKTsK KwkJCXJlYWRfc3RyZWFtX3Jlc3VtZShzY2FuLT54c19oZWFwZmV0Y2gtPnJzKTsKKwkJCWJhdGNo cmluZ2J1Zi0+cGF1c2VkID0gZmFsc2U7CisJCX0KIAl9CiAKIAlyZXR1cm4gaGVhcGFtX2JhdGNo X3JldHVybl90aWQoc2Nhbiwgc2NhbkJhdGNoLCBzY2FuUG9zKTsKIH0KIAorLyoKKyAqIGhlYXBh bV9nZXRuZXh0X3N0cmVhbQorICoJCXJldHVybiB0aGUgbmV4dCBibG9jayB0byBwYXNzIHRvIHRo ZSByZWFkIHN0cmVhbQorICoKKyAqIFRoZSBpbml0aWFsIGJhdGNoIGlzIGFsd2F5cyBsb2FkZWQg YnkgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkLiAgV2UgZG9uJ3QKKyAqIGdldCBjYWxsZWQgdW50 aWwgdGhlIGZpcnN0IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKCkgY2FsbCwgd2hlbiBhIGhlYXAK KyAqIGJsb2NrIGlzIHJlcXVlc3RlZCBmcm9tIHRoZSBzY2FuJ3Mgc3RyZWFtIGZvciB0aGUgZmly c3QgdGltZS4KKyAqCisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3Jl ZCBpbiBwcmVmZXRjaFBvcy4gIEl0IGlzIHR5cGljYWwgZm9yCisgKiBwcmVmZXRjaFBvcyB0byBj b25zaXN0ZW50bHkgc3RheSBhaGVhZCBvZiB0aGUgc2NhblBvcyBwb3NpdGlvbiB0aGF0J3MgdXNl ZCB0bworICogdHJhY2sgdGhlIG5leHQgVElEIHRvIGJlIHJldHVybmVkIHRvIHRoZSBzY2FuIGJ5 IGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZAorICogYWZ0ZXIgdGhlIGZpcnN0IHRpbWUgd2UgZ2V0 IGNhbGxlZC4gIEhvd2V2ZXIsIHRoYXQgaXNuJ3QgYSBwcmVjb25kaXRpb24uCisgKiBUaGVyZSBp cyBhIHN0cmljdCBwb3N0Y29uZGl0aW9uLCB0aG91Z2g6IHdoZW4gd2UgcmV0dXJuIHdlJ2xsIGFs d2F5cyBsZWF2ZQorICogc2NhblBvcyA8PSBwcmVmZXRjaFBvcyAoZXhjZXB0IGluIGNhc2VzIHdo ZXJlIHdlIHJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXIpLgorICovCitzdGF0aWMgQmxvY2tOdW1i ZXIKK2hlYXBhbV9nZXRuZXh0X3N0cmVhbShSZWFkU3RyZWFtICpzdHJlYW0sIHZvaWQgKmNhbGxi YWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJICB2b2lkICpwZXJfYnVmZmVyX2RhdGEpCit7CisJSW5k ZXhTY2FuRGVzYyBzY2FuID0gKEluZGV4U2NhbkRlc2MpIGNhbGxiYWNrX3ByaXZhdGVfZGF0YTsK KwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9IHNjYW4tPmJhdGNocmluZ2J1ZjsKKwlC YXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlCYXRj aFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOwor CVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uID0gYmF0Y2hyaW5nYnVmLT5kaXJlY3Rpb247CisJSW5k ZXhTY2FuQmF0Y2ggcHJlZmV0Y2hCYXRjaDsKKwlib29sCQlmcm9tU2NhblBvcyA9IGZhbHNlOwor CisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHNjYW4ncyBkaXJlY3Rpb24gdG8gY2hh bmdlLCBidXQgdGhhdCdzIGhhbmRsZWQKKwkgKiBlbHNld2hlcmUuICBXZSBkb24ndCBrbm93IGhv dyB0byBkZWFsIHdpdGggYW55IHZhcmlhdGlvbiBpbiBzY2FuCisJICogZGlyZWN0aW9uIGhlcmUu ICBXZSBhc3N1bWUgdGhhdCBhbGwgbG9hZGVkIGFuZCBuZXdseSByZXF1ZXN0ZWQgYmF0Y2hlcwor CSAqIG11c3QgdXNlIHRoZSBzYW1lIHNjYW4gZGlyZWN0aW9uLgorCSAqLworCUFzc2VydChkaXJl Y3Rpb24gIT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pOworCUFzc2VydCghYmF0Y2hyaW5nYnVm LT5wYXVzZWQpOworCisJaWYgKHNjYW4tPmZpbmlzaGVkKQorCQlyZXR1cm4gSW52YWxpZEJsb2Nr TnVtYmVyOworCisJLyoKKwkgKiBzY2FuUG9zIG11c3QgYWx3YXlzIGJlIHZhbGlkIHdoZW4gd2Un cmUgY2FsbGVkIC0tIHRoZXJlIGhhcyB0byBiZSBhdAorCSAqIGxlYXN0IG9uZSBiYXRjaCwgbG9h ZGVkLCBmb3Igc2NhbkJhdGNoLiAgcHJlZmV0Y2hQb3MgbWlnaHQgbm90IHlldCBiZQorCSAqIHZh bGlkLCBpbiB3aGljaCBjYXNlIGl0J2xsIGJlIGluaXRpYWxpemVkIHVzaW5nIHNjYW5Qb3MuCisJ ICovCisJQXNzZXJ0KElOREVYX1NDQU5fQkFUQ0hfQ09VTlQoc2NhbikgPiAwKTsKKwliYXRjaF9h c3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHNjYW5Qb3MpOworCisJLyoKKwkgKiBJZiBwcmVmZXRjaFBv cyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCB0aGF0IHR5cGljYWxseSBpbmRpY2F0ZXMK KwkgKiB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2Fu IChiYXJyaW5nIGNoYW5nZXMKKwkgKiBpbiBzY2FuIGRpcmVjdGlvbiB3aXRoIGEgc2Nyb2xsYWJs ZSBjdXJzb3IpLiAgV2UgaW5pdGlhbGl6ZSBwcmVmZXRjaFBvcworCSAqIHVzaW5nIHRoZSBjdXJy ZW50IHNjYW5Qb3MsIHNpbmNlIHRoZSBjdXJyZW50IHNjYW5CYXRjaCBpdGVtJ3MgVElECisJICog c2hvdWxkIGhhdmUgaXRzIGJsb2NrIG51bWJlciByZXR1cm5lZCBieSB0aGUgcmVhZCBzdHJlYW0g Zmlyc3QuICBJdCdzCisJICogbGlrZWx5IHRoYXQgcHJlZmV0Y2hQb3Mgd2lsbCBnZXQgYWhlYWQg b2Ygc2NhblBvcyBiZWZvcmUgbG9uZywgYnV0IHRoYXQKKwkgKiBoYXNuJ3QgaGFwcGVuZWQgeWV0 LgorCSAqCisJICogSXQncyBhbHNvIHBvc3NpYmxlIGZvciBwcmVmZXRjaFBvcyB0byAiZmFsbCBi ZWhpbmQiIHNjYW5Qb3MsIGF0IGxlYXN0CisJICogaW4gYSB0cml2aWFsIHNlbnNlOiBpZiBtYW55 IGFkamFjZW50IGl0ZW1zIGFyZSByZXR1cm5lZCB0aGF0IGNvbnRhaW4KKwkgKiBUSURzIHRoYXQg cG9pbnQgdG8gdGhlIHNhbWUgaGVhcCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFsbHkgb3ZlcnRh a2UKKwkgKiBwcmVmZXRjaFBvcyAocHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1bnRpbCB0aGUg c2NhbiBhY3R1YWxseSBjYWxscworCSAqIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKS4gIFVzdWFs bHkgdGhpcyBkb2Vzbid0IHJlcXVpcmUgYW55IHNwZWNpYWwKKwkgKiBoYW5kbGluZzsgdGhlIHN0 YW5kYXJkIGN1cnJlbnRQcmVmZXRjaEJsb2NrIHRlc3RzIGluIHRoZSBsb29wIGJlbG93CisJICog d2lsbCBpbmNyZW1lbnQgcHJlZmV0Y2hQb3MgdW50aWwgaXQgY2F0Y2hlcyB1cCB3aXRoIHNjYW5Q b3Mgb25jZSBhZ2Fpbi4KKwkgKiBIb3dldmVyLCB0aGF0IGNhbid0IHdvcmsgd2hlbiBwcmVmZXRj aFBvcyBmYWxscyBzbyBmYXIgYmVoaW5kIHRoYXQgaXRzCisJICogYmF0Y2ggZ2V0cyBmcmVlZC4g IFdlIGhhbmRsZSB0aGF0IGNhc2UgaGVyZSwgdG9vLgorCSAqCisJICogVGhpcyAhSU5ERVhfU0NB Tl9CQVRDSF9MT0FERUQoKSBjYXNlIGNhbiBiZSBoYW5kbGVkIHVzaW5nIHRoZSBzdGFuZGFyZAor CSAqIGFwcHJvYWNoIHRvIGluaXRpYWxpemluZyBwcmVmZXRjaFBvcyBkdXJpbmcgdGhlIHNjYW4n cyBmaXJzdCBjYWxsIGhlcmUuCisJICogSW4gZWZmZWN0LCB0aGlzIGlzIGFuIGFsdGVybmF0aXZl IHdheSBmb3IgcHJlZmV0Y2hQb3MgdG8gY2F0Y2ggdXAgd2l0aAorCSAqIHNjYW5Qb3MgLS0gb25l IHRoYXQgZG9lc24ndCByZWx5IG9uIHByZWZldGNoUG9zLT5iYXRjaCBzdGF5aW5nIGFyb3VuZC4K KwkgKi8KKwlpZiAoSU5ERVhfU0NBTl9QT1NfSU5WQUxJRChwcmVmZXRjaFBvcykgfHwKKwkJIUlO REVYX1NDQU5fQkFUQ0hfTE9BREVEKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCkpCisJeworCQli YXRjaHJpbmdidWYtPmN1cnJlbnRQcmVmZXRjaEJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwor CQkqcHJlZmV0Y2hQb3MgPSAqc2NhblBvczsKKwkJZnJvbVNjYW5Qb3MgPSB0cnVlOworCX0KKwor CXByZWZldGNoQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHByZWZldGNoUG9zLT5iYXRj aCk7CisJZm9yICg7OykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtOworCQlCbG9ja051 bWJlciBwcmVmZXRjaEJsb2NrOworCisJCWlmIChmcm9tU2NhblBvcykKKwkJeworCQkJLyoKKwkJ CSAqIERvbid0IGluY3JlbWVudCBpdGVtIHdoZW4gcHJlZmV0Y2hQb3Mgd2FzIGp1c3QgaW5pdGlh bGl6ZWQKKwkJCSAqIHVzaW5nIHNjYW5Qb3MuICBXZSdsbCByZXR1cm4gdGhlIHNjYW5Qb3MgaXRl bSdzIGhlYXAgYmxvY2sKKwkJCSAqIGRpcmVjdGx5IG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUuICBJ biBvdGhlciB3b3Jkcywgd2UnbGwgcmV0dXJuCisJCQkgKiB0aGUgaGVhcCBibG9jayBmb3IgdGhl IFRJRCBwYXNzZWQgdG8gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlCisJCQkgKiBhdCB0aGUgcG9p bnQgd2hlcmUgaXQgY2FsbGVkIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGZvciB0aGUKKwkJCSAq IGZpcnN0IHRpbWUgZHVyaW5nIHRoZSBzY2FuLgorCQkJICovCisJCQlmcm9tU2NhblBvcyA9IGZh bHNlOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9iYXRjaHBvc19hZHZhbmNlKHByZWZldGNoQmF0 Y2gsIHByZWZldGNoUG9zLCBkaXJlY3Rpb24pKQorCQl7CisJCQkvKgorCQkJICogUmFuIG91dCBv ZiBpdGVtcyBmcm9tIHByZWZldGNoQmF0Y2guICBUcnkgdG8gYWR2YW5jZSBpdCB0byBuZXh0CisJ CQkgKiBiYXRjaC4KKwkJCSAqLworCQkJaWYgKElOREVYX1NDQU5fQkFUQ0hfTE9BREVEKHNjYW4s IHByZWZldGNoUG9zLT5iYXRjaCArIDEpKQorCQkJeworCQkJCS8qCisJCQkJICogVGhlIG5leHQg YmF0Y2ggd2FzIGFscmVhZHkgbG9hZGVkIGZvciB1cy4KKwkJCQkgKgorCQkJCSAqIFR5cGljYWxs eSwgcHJlZmV0Y2hQb3MgaXMgYWhlYWQgb2Ygc2NhblBvcyBmb3IgdGhlIGVudGlyZQorCQkJCSAq IGR1cmF0aW9uIG9mIHRoZSBzY2FuIChhdCBsZWFzdCBhZnRlciB3ZSdyZSBmaXJzdCBjYWxsZWQp LgorCQkJCSAqIEhvd2V2ZXIsIHByZWZldGNoUG9zIGNhbiBzb21ldGltZXMgZmFsbCBiZWhpbmQg c2NhblBvcy4KKwkJCQkgKiBUaGF0J3Mgd2h5IHdlIG5lZWQgdG8gaGFuZGxlIGFscmVhZHktbG9h ZGVkIGJhdGNoZXMgaGVyZS4KKwkJCQkgKgorCQkJCSAqIFRoaXMgaGFwcGVucyB3aGVuIHNvbWUg YmxvY2tzIGFyZSBza2lwcGVkIGFuZCBub3QgcmV0dXJuZWQKKwkJCQkgKiB0byB0aGUgcmVhZF9z dHJlYW0uICBBbiBleGFtcGxlIGlzIGFuIGluZGV4IHNjYW4gb24gYQorCQkJCSAqIGNvcnJlbGF0 ZWQgaW5kZXgsIHdpdGggbWFueSBkdXBsaWNhdGUgYmxvY2tzIGFyZSBza2lwcGVkLAorCQkJCSAq IG9yIGFuIElPUyB3aGVyZSBhbGwtdmlzaWJsZSBibG9ja3MgYXJlIHNraXBwZWQuCisJCQkJICov CisJCQkJcHJlZmV0Y2hCYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgcHJlZmV0Y2hQb3Mt PmJhdGNoICsgMSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBh bHJlYWR5IHVzZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJhdGNoIHNsb3RzCisJCQkJICogYXZh aWxhYmxlLCBpdCdzIHBvaW50bGVzcyB0byB0cnkgbG9hZGluZyBhbm90aGVyIG9uZS4gVGhpcwor CQkJCSAqIGNhbiBoYXBwZW4gZm9yIHZhcmlvdXMgcmVhc29ucywgZS5nLiBmb3IgaW5kZXgtb25s eSBzY2FucworCQkJCSAqIG9uIGFsbC12aXNpYmxlIHRhYmxlLCBvciBza2lwcGluZyBkdXBsaWNh dGUgYmxvY2tzIG9uCisJCQkJICogcGVyZmVjdGx5IGNvcnJlbGF0ZWQgaW5kZXhlcywgZXRjLgor CQkJCSAqLworCQkJCWlmIChJTkRFWF9TQ0FOX0JBVENIX0ZVTEwoc2NhbikpCisJCQkJeworCQkJ CQliYXRjaHJpbmdidWYtPnBhdXNlZCA9IHRydWU7CisJCQkJCXJldHVybiByZWFkX3N0cmVhbV9w YXVzZShzdHJlYW0pOworCQkJCX0KKworCQkJCXByZWZldGNoQmF0Y2ggPSBoZWFwX2JhdGNoX2dl dG5leHQoc2NhbiwgcHJlZmV0Y2hCYXRjaCwgZGlyZWN0aW9uKTsKKwkJCQlpZiAoIXByZWZldGNo QmF0Y2gpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGYWlsZWQgdG8gbG9hZCBuZXh0IGJhdGNo LCBzbyBhbGwgdGhlIGJhdGNoZXMgdGhhdCB0aGUKKwkJCQkJICogc2NhbiB3aWxsIGV2ZXIgcmVx dWlyZSAoYmFycmluZyBhIGNoYW5nZSBpbiBzY2FuCisJCQkJCSAqIGRpcmVjdGlvbikgYXJlIG5v dyBsb2FkZWQKKwkJCQkJICovCisJCQkJCXNjYW4tPmZpbmlzaGVkID0gdHJ1ZTsKKwkJCQkJcmV0 dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCQl9CisJCQl9CisKKwkJCS8qIFBvc2l0aW9uIHBy ZWZldGNoUG9zIHRvIHRoZSBzdGFydCBvZiBuZXcgcHJlZmV0Y2hCYXRjaCAqLworCQkJaW5kZXhf YmF0Y2hwb3NfbmV3YmF0Y2gocHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MsIGRpcmVjdGlvbik7 CisJCX0KKworCQkvKgorCQkgKiBwcmVmZXRjaFBvcyBub3cgcG9pbnRzIHRvIHRoZSBuZXh0IGl0 ZW0gd2hvc2UgVElEJ3MgaGVhcCBibG9jaworCQkgKiBudW1iZXIgbWlnaHQgbmVlZCB0byBiZSBw cmVmZXRjaGVkCisJCSAqLworCQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHByZWZldGNo UG9zKTsKKwkJQXNzZXJ0KElOREVYX1NDQU5fQkFUQ0goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNo KSA9PSBwcmVmZXRjaEJhdGNoKTsKKwkJQXNzZXJ0KHByZWZldGNoQmF0Y2gtPmRpciA9PSBkaXJl Y3Rpb24pOworCisJCS8qIHNjYW5Qb3MgaXMgYWx3YXlzIDw9IHByZWZldGNoUG9zIHdoZW4gd2Ug cmV0dXJuICovCisJCUFzc2VydChzY2FuUG9zLT5iYXRjaCA8IHByZWZldGNoUG9zLT5iYXRjaCB8 fAorCQkJICAgKHNjYW5Qb3MtPmJhdGNoID09IHByZWZldGNoUG9zLT5iYXRjaCAmJgorCQkJCVNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSA/CisJCQkJc2NhblBvcy0+aXRlbSA8PSBw cmVmZXRjaFBvcy0+aXRlbSA6CisJCQkJc2NhblBvcy0+aXRlbSA+PSBwcmVmZXRjaFBvcy0+aXRl bSkpOworCisJCWl0ZW0gPSAmcHJlZmV0Y2hCYXRjaC0+aXRlbXNbcHJlZmV0Y2hQb3MtPml0ZW1d OworCQlwcmVmZXRjaEJsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+aGVh cFRpZCk7CisKKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBpdGVtLT5hbGxWaXNpYmxlKQor CQl7CisJCQkvKiBpdGVtIGlzIGtub3duIHRvIGJlIGFsbC12aXNpYmxlOyBwcmVmZXRjaGluZyBp c24ndCByZXF1aXJlZCAqLworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocHJlZmV0Y2hCbG9j ayA9PSBiYXRjaHJpbmdidWYtPmN1cnJlbnRQcmVmZXRjaEJsb2NrKQorCQl7CisJCQkvKgorCQkJ ICogcHJlZmV0Y2hCbG9jayBtYXRjaGVzIHRoZSBsYXN0IHByZWZldGNoUG9zIGl0ZW0ncyBUSUQn cyBoZWFwCisJCQkgKiBibG9jayBudW1iZXI7IHdlIG11c3Qgbm90IHJldHVybiB0aGUgc2FtZSBw cmVmZXRjaEJsb2NrIHR3aWNlCisJCQkgKiAodHdpY2UgaW4gc3VjY2Vzc2lvbikKKwkJCSAqLwor CQkJY29udGludWU7CisJCX0KKworCQkvKiBXZSBoYXZlIGEgbmV3IGhlYXAgYmxvY2sgbnVtYmVy IHRvIHJldHVybiB0byByZWFkIHN0cmVhbSAqLworCQliYXRjaHJpbmdidWYtPmN1cnJlbnRQcmVm ZXRjaEJsb2NrID0gcHJlZmV0Y2hCbG9jazsKKwkJcmV0dXJuIHByZWZldGNoQmxvY2s7CisJfQor CisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQog ICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAq CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwppbmRleCBkNWI4Y2U2Y2QuLjJlMGM4 ZWQyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC01OSwxMSArNTks MTQgQEAgaW5kZXhfYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCS8qIHBvc2l0 aW9ucyBpbiB0aGUgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyAqLwogCWJhdGNoX3Jlc2V0X3Bvcygm c2Nhbi0+YmF0Y2hyaW5nYnVmLT5zY2FuUG9zKTsKIAliYXRjaF9yZXNldF9wb3MoJnNjYW4tPmJh dGNocmluZ2J1Zi0+bWFya1Bvcyk7CisJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHJpbmdi dWYtPnByZWZldGNoUG9zKTsKIAogCXNjYW4tPmJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gTlVM TDsKIAlzY2FuLT5iYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgaGVhZCBi YXRjaCAqLwogCXNjYW4tPmJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBi YXRjaCBzdGFydHMgZW1wdHkgKi8KIAltZW1zZXQoJnNjYW4tPmJhdGNocmluZ2J1Zi0+Y2FjaGUs IDAsIHNpemVvZihzY2FuLT5iYXRjaHJpbmdidWYtPmNhY2hlKSk7CisJc2Nhbi0+YmF0Y2hyaW5n YnVmLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKwlzY2FuLT5i YXRjaHJpbmdidWYtPnBhdXNlZCA9IGZhbHNlOwogfQogCiAvKgpAQCAtODIsOCArODUsMTIgQEAg aW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSkK IAliYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKIAlBc3NlcnQoc2Nhbi0+eHNfaGVh cGZldGNoKTsKIAorCWlmIChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKQorCQlyZWFkX3N0cmVhbV9y ZXNldChzY2FuLT54c19oZWFwZmV0Y2gtPnJzKTsKKwogCS8qIHJlc2V0IHRoZSBwb3NpdGlvbnMg Ki8KIAliYXRjaF9yZXNldF9wb3MoJmJhdGNocmluZ2J1Zi0+c2NhblBvcyk7CisJYmF0Y2hfcmVz ZXRfcG9zKCZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zKTsKIAogCS8qCiAJICogV2l0aCAiY29t cGxldGUiIHJlc2V0LCBtYWtlIHN1cmUgdG8gYWxzbyBmcmVlIHRoZSBtYXJrZWQgYmF0Y2gsIGVp dGhlcgpAQCAtMTI2LDYgKzEzMyw4IEBAIGluZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5E ZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCiAJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggPSAwOwkv KiBpbml0aWFsIGJhdGNoIGlzIGVtcHR5ICovCiAKIAlzY2FuLT5maW5pc2hlZCA9IGZhbHNlOwor CWJhdGNocmluZ2J1Zi0+Y3VycmVudFByZWZldGNoQmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CisJYmF0Y2hyaW5nYnVmLT5wYXVzZWQgPSBmYWxzZTsKIAogCWJhdGNoX2Fzc2VydF9iYXRjaGVz X3ZhbGlkKHNjYW4pOwogfQpAQCAtMjE1LDkgKzIyNCwxMyBAQCBpbmRleF9iYXRjaHNjYW5fcmVz dG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hy aW5nYnVmID0gc2Nhbi0+YmF0Y2hyaW5nYnVmOwogCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3Mg PSAmYmF0Y2hyaW5nYnVmLT5tYXJrUG9zOwotCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAm YmF0Y2hyaW5nYnVmLT5zY2FuUG9zIDsKIAlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRj aHJpbmdidWYtPm1hcmtCYXRjaDsKIAorCS8qCisJICogWFhYIERpc2FibGUgdGhpcyBvcHRpbWl6 YXRpb24gd2hlbiBJL08gcHJlZmV0Y2hpbmcgaXMgaW4gdXNlLCBhdCBsZWFzdAorCSAqIHVudGls IHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBwcmVmZXRjaFBvcyBhcmUgZnVsbHkgdW5k ZXJzdG9vZC4KKwkgKi8KKyNpZiAwCiAJaWYgKHNjYW5Qb3MtPmJhdGNoID09IG1hcmtQb3MtPmJh dGNoICYmCiAJCXNjYW5Qb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKQogCXsK QEAgLTIyOCw2ICsyNDEsNyBAQCBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2Fu RGVzYyBzY2FuKQogCQlzY2FuUG9zLT5pdGVtID0gbWFya1Bvcy0+aXRlbTsKIAkJcmV0dXJuOwog CX0KKyNlbmRpZgogCiAJLyoKIAkgKiBDYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFNIGtu b3cgdG8gaW52YWxpZGF0ZSBhbnkgcHJpdmF0ZSBzdGF0ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2Nvc3RzaXplLmMKaW5kZXggMTZiZjFmNjFhLi43OGY0YjkwZDMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTQ1LDYgKzE0NSw3IEBAIGludAkJCW1heF9wYXJhbGxl bF93b3JrZXJzX3Blcl9nYXRoZXIgPSAyOwogYm9vbAkJZW5hYmxlX3NlcXNjYW4gPSB0cnVlOwog Ym9vbAkJZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhvbmx5c2Nh biA9IHRydWU7Citib29sCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoID0gdHJ1ZTsKIGJvb2wJ CWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2FuID0gdHJ1ZTsK IGJvb2wJCWVuYWJsZV9zb3J0ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFy YW1ldGVycy5kYXQKaW5kZXggN2M2MGIxMjU1Li5hOTlhYTQxZGIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC04OTEsNiArODkxLDEzIEBACiAgIGJvb3Rf dmFsID0+ICd0cnVlJywKIH0sCiAKK3sgbmFtZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRj aCcsIHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdR VUVSWV9UVU5JTkdfTUVUSE9EJywKKyAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyBwcmVmZXRjaGlu ZyBmb3IgaW5kZXggc2NhbnMgYW5kIGluZGV4LW9ubHktc2NhbnMuJywKKyAgZmxhZ3MgPT4gJ0dV Q19FWFBMQUlOJywKKyAgdmFyaWFibGUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLAor ICBib290X3ZhbCA9PiAndHJ1ZScsCit9LAorCiB7IG5hbWUgPT4gJ2VuYWJsZV9tYXRlcmlhbCcs IHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVS WV9UVU5JTkdfTUVUSE9EJywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwn cyB1c2Ugb2YgbWF0ZXJpYWxpemF0aW9uLicsCiAgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZGM5 ZTIyNTVmLi5kYTUwYWUxNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVz cWwuY29uZi5zYW1wbGUKQEAgLTQxMiw2ICs0MTIsNyBAQAogI2VuYWJsZV9pbmNyZW1lbnRhbF9z b3J0ID0gb24KICNlbmFibGVfaW5kZXhzY2FuID0gb24KICNlbmFibGVfaW5kZXhvbmx5c2NhbiA9 IG9uCisjZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IG9uCiAjZW5hYmxlX21hdGVyaWFsID0g b24KICNlbmFibGVfbWVtb2l6ZSA9IG9uCiAjZW5hYmxlX21lcmdlam9pbiA9IG9uCmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwK aW5kZXggMGZhZDM0ZGE2Li4wNWEzMTVhNTUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTU2MzEsNiArNTYzMSwy MiBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNl YWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92 YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1pbmRleHNj YW4tcHJlZmV0Y2giIHhyZWZsYWJlbD0iZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCI+CisgICAg ICA8dGVybT48dmFybmFtZT5lbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoPC92YXJuYW1lPiAoPHR5 cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPmVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+Cisg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIEVuYWJsZXMgb3IgZGlzYWJs ZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4LXNjYW4gYW5kIGluZGV4LW9ubHktc2NhbgorICAgICAg ICBwbGFuIHR5cGVzLiAgUHJlZmV0Y2hpbmcgY2FuIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgcmVh ZGluZyB0YWJsZSBBTQorICAgICAgICBwYWdlcyBhaGVhZCBvZiB3aGVuIHRoZXkgYXJlIG5lZWRl ZCBkdXJpbmcgaW5kZXggc2NhbnMuICBUaGUgZGVmYXVsdAorICAgICAgICBpcyA8bGl0ZXJhbD5v bjwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1tYXRlcmlh bCIgeHJlZmxhYmVsPSJlbmFibGVfbWF0ZXJpYWwiPgogICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5h YmxlX21hdGVyaWFsPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5k ZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMv c2dtbC9pbmRleGFtLnNnbWwKaW5kZXggZjQ4ZGEzMTg1Li4yMGFkMjA4NDIgMTAwNjQ0Ci0tLSBh L2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dt bApAQCAtMTY3LDEwICsxNjcsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKICAg ICBhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKICAgICBhbXJlc2Nhbl9mdW5jdGlv biBhbXJlc2NhbjsKICAgICBhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7ICAgICAvKiBj YW4gYmUgTlVMTCAqLworICAgIGFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2Fu IGJlIE5VTEwgKi8KKyAgICBhbWZyZWViYXRjaF9mdW5jdGlvbiBhbWZyZWViYXRjaDsJLyogY2Fu IGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBj YW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1t YXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBh bXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAg IGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAg IC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAq LwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTc0OSw2ICs3NTAsMTg0IEBAIGFtZ2V0dHVw bGUgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxzdHJ1Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1 Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3Ru YW1lPgogICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCiAgIDwvcGFyYT4KKyAgPG5vdGU+ CisgICA8cGFyYT4KKyAgICBBcyBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5h bWU+IHZlcnNpb24gMTksIHBvc2l0aW9uIG1hcmtpbmcKKyAgICBhbmQgcmVzdG9yYXRpb24gb2Yg c2NhbnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBmb3IgdGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiBpbnRlcmZhY2U7IG9ubHkgdGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9ydHMgdGhpcyBmZWF0dXJlIHRocm91Z2gK KyAgICB0aGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBjYWxsYmFjay4KKyAgIDwv cGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgorSW5kZXhTY2Fu QmF0Y2gKK2FtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgIEluZGV4 U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisgICAgICAgICAgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv bik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUmV0dXJuIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4 IHR1cGxlcyBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92aW5nIGluIHRoZQorICAgZ2l2ZW4gZGlyZWN0 aW9uIChmb3J3YXJkIG9yIGJhY2t3YXJkIGluIHRoZSBpbmRleCkuICBSZXR1cm5zIGFuIGluc3Rh bmNlIG9mCisgICA8dHlwZT5JbmRleFNjYW5CYXRjaDwvdHlwZT4gd2l0aCBpbmRleCB0dXBsZXMg bG9hZGVkLCBvcgorICAgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gaWYgdGhlcmUgYXJlIG5vIG1v cmUgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbgorICAgc2NhbiBkaXJlY3Rpb24uCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu dGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bworICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBpbiBiYXRjaGVzCisg ICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiBUaGlzIGVuYWJsZXMgdGhlIHRhYmxlIGFjY2Vz cyBtZXRob2QgdG8KKyAgIG9wdGltaXplIHRhYmxlIGJsb2NrIGFjY2VzcyBwYXR0ZXJucyBhbmQg cGVyZm9ybSBJL08gcHJlZmV0Y2hpbmcuCisgICBCeSByZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGlu ZGV4IGVudHJpZXMgZnJvbSBhIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLAorICAgdGhlIHRh YmxlIEFNIGNhbiByZWFkYWhlYWQgdGhyb3VnaCB0aGUgaW5kZXggYW5kIGlkZW50aWZ5IHdoaWNo IHRhYmxlCisgICBibG9ja3Mgd2lsbCBiZSBuZWVkZWQsIGFsbG93aW5nIHByZWZldGNoaW5nIG9m IHRhYmxlIEFNIHBhZ2VzIGR1cmluZworICAgb3JkZXJlZCBpbmRleCBzY2Fucy4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgVGhlIHRhYmxlIEFNIHBhc3NlcyB0aGUgYmF0Y2ggbW9zdCByZWNl bnRseSByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmb3Ig dGhlIGdpdmVuIHNjYW4gYXMKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IChvciA8 bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBvbiB0aGUgZmlyc3QgY2FsbAorICAgZm9yIHRoZSBzY2Fu KS4gIFRoZSBpbmRleCBBTSB1c2VzIGluZm9ybWF0aW9uIGZyb20gPGxpdGVyYWw+cHJpb3JiYXRj aDwvbGl0ZXJhbD4KKyAgIHRvIGRldGVybWluZSB3aGljaCBpbmRleCBwYWdlIHRvIHJlYWQgbmV4 dC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSBiYXRjaCByZXR1cm5lZCBieSA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIGFzc29jaWF0ZWQgd2l0aCBhCisgICBwaW5uZWQg aW5kZXggcGFnZSBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtL3R1cGxlLiAg VGhlIGJ1ZmZlcgorICAgcGluIGNhbiBiZSBoZWxkIG9udG8gYnkgdGhlIHRhYmxlIEFNIGFzIGFu IGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElECisgICByZWN5Y2xpbmcgYnkgPGNvbW1h bmQ+VkFDVVVNPC9jb21tYW5kPi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+ CisgICBmb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNj YW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90 eXBlPiB0aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGlzIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgorICAgSXQgaXMg dXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQgYmUgZnJl ZWQgYnkKKyAgIHBhc3NpbmcgaXQgdG8gPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4u ICBOb3RlIGFsc28gdGhhdAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5j dGlvbnMgbXVzdCBuZXZlciBtb2RpZnkgdGhlCisgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwv c3RydWN0ZmllbGQ+IHBhcmFtZXRlci4gIFRoZSBjb3JlCisgICA8ZmlsZW5hbWU+c3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS88L2ZpbGVuYW1lPiBhbmQKKyAgIDxmaWxlbmFtZT5zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZQorICAgcmVm ZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu dGVyZmFjZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHNhbWUgY2F2ZWF0cyBkZXNj cmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYXBwbHkgaGVyZQorICAg dG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJuZWQgYmF0Y2ggbWVhbnMgb25seSB0aGF0IHRoZSBp bmRleCBjb250YWlucworICAgYW4gZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBzY2FuIGtleXMsIG5v dCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBzdGlsbAorICAgZXhpc3RzIGluIHRoZSBoZWFw IG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mgc25hcHNob3QgdGVzdC4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBtdXN0IHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwv bGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hldGhlciByZWNoZWNraW5nIG9mCisgICBzY2FuIGtleXMg aXMgcmVxdWlyZWQsIGluIHRoZSBzYW1lIHdheSBhcyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+CisgICBkb2VzLiBIb3dldmVyLCA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9s aXRlcmFsPiBtdXN0IGJlIHNldCBjb25zaXN0ZW50bHkKKyAgIGZvciBhbiBlbnRpcmUgc2NhbiBy YXRoZXIgdGhhbiB2YXJ5aW5nIG9uIGEgcGVyLXR1cGxlIGJhc2lzLiBUaGlzIGlzIGEga2V5Cisg ICBkaWZmZXJlbmNlIGZyb20gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgd2hpY2gg Y2FuIHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gaW5kZXBl bmRlbnRseSBmb3IgZWFjaCB0dXBsZSBpdCByZXR1cm5zLgorICAgSW5kZXggYWNjZXNzIG1ldGhv ZHMgdGhhdCByZXF1aXJlIGdyYW51bGFyIGNvbnRyb2wgb3ZlcgorICAgPGxpdGVyYWw+c2Nhbi0m Z3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gbXVzdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZSBpbnN0ZWFkIG9mIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWlsYXJseSwgdGhlIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQK KyAgIGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4gZGF0YSBpbiB0aGUgZm9ybSBvZiBhCisg ICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBvaW50ZXIuICBJbmRleC1vbmx5 IHNjYW5zIHdvcmsgYnkKKyAgIGNvcHlpbmcgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0 bmFtZT4gcmVjb3JkcyBmcm9tIGluZGV4IHBhZ2VzIGludG8gYQorICAgbG9jYWwgYnVmZmVyIGFz c29jaWF0ZWQgd2l0aCBlYWNoIGJhdGNoLiAgPGxpdGVyYWw+eHNfaXR1cGRlc2M8L2xpdGVyYWw+ CisgICB3b3JrcyBpbiB0aGUgc2FtZSBhcyBhbHJlYWR5IGRlc2NyaWJlZCBmb3IgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPi4KKyAgIFRoZSBhY2Nlc3MgbWV0aG9kIG11c3Qgbm90IHNl dCB0aGUgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaXR1cDwvbGl0ZXJhbD4gb3IKKyAgIDxsaXRlcmFs PnNjYW4tJmd0O3hzX2hpdHVwPC9saXRlcmFsPiBmaWVsZHMgaXRzZWxmLgorICA8L3BhcmE+CisK KyAgPHBhcmE+CisgICBUaGUgaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IHByb3ZpZGUgZWl0aGVy IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIG9yIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4sIGJ1dCBub3QgYm90aC4KKyAgIFdoZW4gdGhlIGFjY2VzcyBtZXRob2Qg cHJvdmlkZXMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgaXQgbXVzdAorICAgYWxz byBwcm92aWRlIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisK KyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlv biBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRz IDxxdW90ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKKyAgIHRo ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZpZWxkIGluIGl0cworICAgPHN0cnVj dG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+IHN0cnVjdCBtdXN0IGJlIHNldCB0byBO VUxMLgorICA8L3BhcmE+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+Cit2b2lkCithbWZy ZWViYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBGcmVlcyBhIGJhdGNoIHJldHVybmVkIGJ5 IHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrLgorICAgVGhlIDxs aXRlcmFsPmJhdGNoPC9saXRlcmFsPiBhcmd1bWVudCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gaW5k ZXggcGFnZSwKKyAgIHdoaWNoIHdpbGwgbmV2ZXIgYmUgbG9ja2VkIHdoZW4gPGZ1bmN0aW9uPmFt ZnJlZWJhdGNoPC9mdW5jdGlvbj4gaXMgY2FsbGVkLgorICAgVGhlIGJhdGNoIG1pZ2h0IHN0aWxs IHJldGFpbiBhIGJ1ZmZlciBwaW4gb24gdGhlIHBhZ2UgYnkgdGhlIHRpbWUgdGhhdAorICAgPGZ1 bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gaXMgY2FsbGVkICh3aGV0aGVyIG9yIG5vdCBp dCBkb2VzIGlzCisgICBkZWNpZGVkIGJ5IHRoZSB0YWJsZSBBTSkuCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+IHJlbGVhc2VzIHRoZSBi dWZmZXIgcGluIG9uIHRoZSBiYXRjaCdzCisgICBhc3NvY2lhdGVkIGluZGV4IHBhZ2UgKGlmIHRo ZSB0YWJsZSBBTSBoYXMgbm90IGFscmVhZHkgcmVsZWFzZWQgaXQpLCBhbmQKKyAgIGZyZWVzIHJl bGF0ZWQgbWVtb3J5IGFuZCByZXNvdXJjZXMuICBJdCBtdXN0IGFsd2F5cyByZWxlYXNlIHRoZSBj YWxsZXIncworICAgYmF0Y2ggbGFzdCwgYnkgcGFzc2luZyBpdCBhcyBhbiBhcmd1bWVudCB0bwor ICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlPC9mdW5jdGlvbj4uCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGV4Y2x1c2l2ZWx5 IGJ5IHRhYmxlIGFjY2VzcyBtZXRob2RzIHRvIGluZGljYXRlCisgICB0aGF0IHByb2Nlc3Npbmcg b2YgdGhlIGJhdGNoIGlzIGNvbXBsZXRlOyBpdCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhp bgorICAgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QgaXRzZWxmLiAgVGhlIHRhYmxlIGFjY2VzcyBt ZXRob2QgY29udHJvbHMgd2hlbiB0aGUKKyAgIGJ1ZmZlciBwaW4gaXMgZHJvcHBlZDogZm9yIE1W Q0Mgc25hcHNob3Qgc2NhbnMgdGhlIHBpbiBpcyBkcm9wcGVkIGVhZ2VybHkKKyAgIGFmdGVyIHRo ZSBiYXRjaCBpcyByZXR1cm5lZCwgd2hpbGUgZm9yIG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zIHRo ZSBwaW4gaXMKKyAgIHJldGFpbmVkIHVudGlsIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rp b24+IGlzIGNhbGxlZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4IEFNIGhh cyB0aGUgb3B0aW9uIG9mIHNldHRpbmcgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBp bgorICAgdGhlIGluZGV4IHBhZ2UgdG8gbWFyayBkZWFkIHR1cGxlcyBiZWZvcmUgcmVsZWFzaW5n IHRoZSBidWZmZXIgcGluLiBXaGlsZQorICAgdGhpcyBpcyBvcHRpb25hbCwgaW1wbGVtZW50aW5n IGl0IGlzIHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZSwgYXMgaXQKKyAgIGFsbG93cyBmdXR1 cmUgc2NhbnMgdG8gc2tpcCBrbm93bi1kZWFkIGluZGV4IGVudHJpZXMuIEJvdGggY29yZSBpbmRl eCBhY2Nlc3MKKyAgIG1ldGhvZHMgdGhhdCBjdXJyZW50bHkgc3VwcG9ydCA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IChCLXRyZWUKKyAgIGFuZCBoYXNoKSBpbXBsZW1lbnQgPGxpdGVy YWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZywgdGhvdWdoIHRoaXJkLXBhcnR5CisgICBpbmRl eCBhY2Nlc3MgbWV0aG9kcyBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byBpbXBsZW1lbnQg dGhpcyBmZWF0dXJlLgorICAgVGhlIHRhYmxlIEFNIG1heSBjYWxsCisgICA8ZnVuY3Rpb24+dGFi bGVhbV91dGlsX2tpbGxfc2NhbnBvc2l0ZW08L2Z1bmN0aW9uPiB0byBtYXJrIGRlYWQgaXRlbXMg YXMKKyAgIHRoZSBzY2FuIHByb2dyZXNzZXMuIElmIHRoZSBiYXRjaCBjb250YWlucyBhbnkgc3Vj aCBkZWFkIGl0ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmtpbGxlZEl0ZW1zPC9z dHJ1Y3RmaWVsZD4gYXJyYXkgd2lsbCBoYXZlIGJlZW4gc29ydGVkIGFuZAorICAgZGVkdXBsaWNh dGVkIGJlZm9yZSA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIHdp dGggaXRlbQorICAgb2Zmc2V0cyBhcHBlYXJpbmcgaW4gYXNjZW5kaW5nIG9yZGVyICh0aGF0IGlz LCBpbiBpbmRleCBwYWdlIG9yZGVyLCB3aGljaAorICAgaXMgYWxzbyBiYXRjaCBvcmRlcikgYW5k IG5vIG9mZnNldCBhcHBlYXJpbmcgbW9yZSB0aGFuIG9uY2UuIFRoaXMgc29ydGluZworICAgbWFr ZXMgaXQgdW5uZWNlc3NhcnkgZm9yIHRoZSB0YWJsZSBBTSB0byBjYWxsCisgICA8ZnVuY3Rpb24+ dGFibGVhbV91dGlsX2tpbGxfc2NhbnBvc2l0ZW08L2Z1bmN0aW9uPiBpbiBhbnkgcGFydGljdWxh ciBvcmRlci4KKyAgIChJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1nZXR0 dXBsZTwvZnVuY3Rpb24+IHJlbHkgb24gdGhlCisgICA8c3RydWN0ZmllbGQ+a2lsbF9wcmlvcl90 dXBsZTwvc3RydWN0ZmllbGQ+IG1lY2hhbmlzbSBpbnN0ZWFkIHRvIG1hcmsgZGVhZAorICAgdHVw bGVzOyB0aGUgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0LzwvZmlsZW5hbWU+IGlt cGxlbWVudGF0aW9uCisgICBwcm92aWRlcyBhIHJlZmVyZW5jZSBleGFtcGxlLikKKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4IEFNIG1heSBjaG9vc2UgdG8gcmV0YWluIGl0cyBv d24gYnVmZmVyIHBpbnMgd2hlbiB0aGlzIHNlcnZlcyBhbgorICAgaW50ZXJuYWwgcHVycG9zZSAo Zm9yIGV4YW1wbGUsIG1haW50YWluaW5nIGEgZGVzY2VudCBzdGFjayBvZiBwaW5uZWQgaW5kZXgK KyAgIHBhZ2VzIGZvciByZXVzZSBhY3Jvc3MgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBjYWxscykuICBIb3dldmVyLAorICAgYW55IHNjaGVtZSB0aGF0IHJldGFpbnMgYnVmZmVyIHBp bnMgbWFuYWdlZCBieSB0aGUgaW5kZXggQU0gbXVzdCBiZSBzdXJlIHRvCisgICBmcmVlIHRoZSBw aW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoZm9yIGV4YW1wbGUgd2hlbiA8ZnVuY3Rpb24+YW1y ZXNjYW48L2Z1bmN0aW9uPgorICAgYW5kL29yIDxmdW5jdGlvbj5hbWVuZHNjYW48L2Z1bmN0aW9u PiBhcmUgY2FsbGVkKS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZQorICAgbnVtYmVyIG9mIHJldGFp bmVkIHBpbnMgZml4ZWQgYW5kIHNtYWxsLCB0byBhdm9pZCBleGhhdXN0aW5nIHRoZSBiYWNrZW5k J3MKKyAgIGJ1ZmZlciBwaW4gbGltaXQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8 ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJv dmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9kIHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4uIE90aGVyd2lzZSBpdCBoYXMgdG8KKyAgIHJlbWFpbiBzZXQgdG8gPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KIAogICA8cGFyYT4KIDxwcm9ncmFtbGlz dGluZz4KQEAgLTc2OCw4ICs5NDcsOCBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2Fu LAogICAgaXRzZWxmLCBhbmQgdGhlcmVmb3JlIGNhbGxlcnMgcmVjaGVjayBib3RoIHRoZSBzY2Fu IGNvbmRpdGlvbnMgYW5kIHRoZQogICAgcGFydGlhbCBpbmRleCBwcmVkaWNhdGUgKGlmIGFueSkg Zm9yIHJlY2hlY2thYmxlIHR1cGxlcy4gIFRoYXQgbWlnaHQgbm90CiAgICBhbHdheXMgYmUgdHJ1 ZSwgaG93ZXZlci4KLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZAotICAg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2Ft ZSBpbmRleCBzY2FuOyB0aGVyZQorICAgT25seSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sCisgICBvciA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBpbmRl eCBzY2FuOyB0aGVyZQogICAgYXJlIG90aGVyIHJlc3RyaWN0aW9ucyB0b28gd2hlbiB1c2luZyA8 ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwgYXMgZXhwbGFpbmVkCiAgICBpbiA8eHJl ZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZyIvPi4KICAgPC9wYXJhPgpAQCAtNzk1LDMyICs5NzQs MjUgQEAgYW1lbmRzY2FuIChJbmRleFNjYW5EZXNjIHNjYW4pOwogICA8cGFyYT4KIDxwcm9ncmFt bGlzdGluZz4KIHZvaWQKLWFtbWFya3BvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2FtcG9zcmVz ZXQgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiA8L3Byb2dyYW1saXN0aW5nPgotICAgTWFyayBjdXJy ZW50IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkgc3VwcG9ydCBv bmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5vdGlmeSBpbmRl eCBBTSB0aGF0IGNvcmUgY29kZSB3aWxsIGNoYW5nZSB0aGUgc2NhbidzIHBvc2l0aW9uIHRvIGFu IGl0ZW0KKyAgIHJldHVybmVkIGFzIHBhcnQgb2YgYW4gZWFybGllciBiYXRjaC4gIFRoZSBpbmRl eCBBTSBtdXN0IHRoZXJlZm9yZQorICAgaW52YWxpZGF0ZSBhbnkgc3RhdGUgdGhhdCBpbmRlcGVu ZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzCisgICAoZS5nLiwgYXJyYXkga2V5cyB1 c2VkIHdpdGggYSBTY2FsYXJBcnJheU9wRXhwciBxdWFsKS4gIENhbGxlZCBieSB0aGUgY29yZQor ICAgc3lzdGVtIHdoZW4gaXQgaXMgYWJvdXQgdG8gcmVzdG9yZSBhIG1hcmsuCiAgIDwvcGFyYT4K IAogICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVuY3Rp b24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0 cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1t YXJrcG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0 aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KLSAgPC9wYXJh PgotCi0gIDxwYXJhPgotPHByb2dyYW1saXN0aW5nPgotdm9pZAotYW1yZXN0cnBvcyAoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICBSZXN0b3JlIHRoZSBzY2FuIHRv IHRoZSBtb3N0IHJlY2VudGx5IG1hcmtlZCBwb3NpdGlvbi4KLSAgPC9wYXJhPgotCi0gIDxwYXJh PgotICAgVGhlIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBv bmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVk IHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1yZXN0cnBvczwv c3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3Ry dWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBUaGUgPGZ1bmN0aW9u PmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBjYW4gb25seSBiZSBwcm92aWRlZCBpZiB0 aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdoIHRoZSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UuICBJZiBpdCBkb2Vz bid0LCB0aGUgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8L3N0cnVjdGZpZWxkPiBmaWVsZAorICAg aW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3Qgc2hv dWxkIGJlIHNldCB0bworICAgTlVMTC4gIEluZGV4IEFNcyB0aGF0IGRvbid0IGhhdmUgYW55IHBy aXZhdGUgc3RhdGUgdGhhdCBtaWdodCBuZWVkIHRvIGJlCisgICBpbnZhbGlkYXRlZCBtaWdodCBz dGlsbCBmaW5kIGl0IHVzZWZ1bCB0byBwcm92aWRlIGFuIGVtcHR5CisgICA8c3RydWN0ZmllbGQ+ YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+IGZ1bmN0aW9uOyBpZiA8ZnVuY3Rpb24+YW1wb3NyZXNl dDwvZnVuY3Rpb24+CisgICBpcyBzZXQgdG8gTlVMTCwgdGhlIGNvcmUgc3lzdGVtIHdpbGwgYXNz dW1lIHRoYXQgaXQgaXMgdW5zYWZlIHRvIHJlc3RvcmUgYQorICAgbWFya2VkIHBvc2l0aW9uLgog ICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05NzUsNiArMTE0Nyw4IEBAIGFtdHJhbnNsYXRlY21w dHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsK ICAgICAgICBBY2Nlc3MgbWV0aG9kcyB0aGF0IGFsd2F5cyByZXR1cm4gZW50cmllcyBpbiB0aGUg bmF0dXJhbCBvcmRlcmluZwogICAgICAgIG9mIHRoZWlyIGRhdGEgKHN1Y2ggYXMgYnRyZWUpIHNo b3VsZCBzZXQKICAgICAgICA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRv IHRydWUuCisgICAgICAgQm90aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFuZCA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICAgICAgc2NhbnMgc3VwcG9ydCB0aGlz IGNhcGFiaWxpdHkuCiAgICAgICAgQ3VycmVudGx5LCBzdWNoIGFjY2VzcyBtZXRob2RzIG11c3Qg dXNlIGJ0cmVlLWNvbXBhdGlibGUgc3RyYXRlZ3kKICAgICAgICBudW1iZXJzIGZvciB0aGVpciBl cXVhbGl0eSBhbmQgb3JkZXJpbmcgb3BlcmF0b3JzLgogICAgICAgPC9wYXJhPgpAQCAtOTg3LDQx ICsxMTYxLDQ4IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lk IG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgICAgICBhbiBvcmRlciBzYXRpc2Z5aW5nIDxs aXRlcmFsPk9SREVSIEJZPC9saXRlcmFsPiA8cmVwbGFjZWFibGU+aW5kZXhfa2V5PC9yZXBsYWNl YWJsZT4KICAgICAgICA8cmVwbGFjZWFibGU+b3BlcmF0b3I8L3JlcGxhY2VhYmxlPiA8cmVwbGFj ZWFibGU+Y29uc3RhbnQ8L3JlcGxhY2VhYmxlPi4gIFNjYW4gbW9kaWZpZXJzCiAgICAgICAgb2Yg dGhhdCBmb3JtIGNhbiBiZSBwYXNzZWQgdG8gPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4g YXMgZGVzY3JpYmVkCi0gICAgICAgcHJldmlvdXNseS4KKyAgICAgICBwcmV2aW91c2x5LiAgTm90 ZSB0aGF0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgZG8gbm90CisgICAg ICAgc3VwcG9ydCBvcmRlcmluZyBvcGVyYXRvcnMuCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlz dGl0ZW0+CiAgICAgPC9pdGVtaXplZGxpc3Q+CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRo ZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGhhcyBhIDxsaXRlcmFs PmRpcmVjdGlvbjwvbGl0ZXJhbD4gYXJndW1lbnQsCisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgZnVu Y3Rpb25zIGhhdmUgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAg d2hpY2ggY2FuIGJlIGVpdGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJh bD4gKHRoZSBub3JtYWwgY2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rp b248L2xpdGVyYWw+LiAgSWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJl c2NhbjwvZnVuY3Rpb24+IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+LCB0aGVuIHRoZQogICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMg dG8gYmUgc2Nhbm5lZCBiYWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFs IGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IG11c3QgcmV0dXJuCi0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgs IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRo aXMgd2lsbCBvbmx5IG9jY3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVj dGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAg Zmlyc3QgY2FsbCwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBh cmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4KKyAgIHRoZSBub3JtYWwgZnJvbnQtdG8tYmFjayBk aXJlY3Rpb24uICBJbiB0aGlzIGNhc2UsCisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IG11c3QgcmV0dXJuIHRoZSBsYXN0IG1hdGNoaW5nIHR1cGxlIGluIHRoZQorICAgaW5kZXgs IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQgbm9ybWFsbHkgd291bGQuICBTaW1pbGFy bHksCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3QgcmV0dXJuIHRoZSBs YXN0IG1hdGNoaW5nIGJhdGNoIG9mIGl0ZW1zCisgICB3aGVuIGVpdGhlciB0aGUgZmlyc3QgY2Fs bCBhZnRlciA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMKKyAgIDxsaXRl cmFsPkJhY2t3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4sIG9yIGEgc3Vic2VxdWVudCBjYWxs IGhhcworICAgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gYXMgaXRzIDxzdHJ1Y3RmaWVsZD5wcmlv cmJhdGNoPC9zdHJ1Y3RmaWVsZD4gYXJndW1lbnQKKyAgIChpbmRpY2F0aW5nIGEgYmFja3dhcmQg c2NhbiByZXN0YXJ0KS4gIChUaGlzIGJhY2t3YXJkLXNjYW4gYmVoYXZpb3Igd2lsbAorICAgb25s eSBvY2N1ciBmb3IgYWNjZXNzIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFtY2Fub3Jk ZXI8L3N0cnVjdGZpZWxkPgorICAgdG8gdHJ1ZS4pICBBZnRlciB0aGUgZmlyc3QgY2FsbCwgYm90 aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4K ICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5lZCBlbnRy eS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4g aXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhhdmUgdGhlIHNhbWUgZGly ZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBBY2Nl c3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1cHBvcnQgPHF1b3Rl Pm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVy bmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBvc2l0aW9uIG1pZ2h0 IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25seSBvbmUgcG9zaXRpb24g bmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0aW9uPmFtbWFya3Bv czwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlvdXNseSBtYXJrZWQgcG9z aXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcmRlcmVkCi0g ICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBh bmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rpb25zIGluIDxzdHJ1 Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3NlIHBvaW50ZXJzIHRv IE5VTEwKLSAgIGluc3RlYWQuCisgICBBY2Nlc3MgbWV0aG9kcyB1c2luZyB0aGUgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgbWF5CisgICBzdXBwb3J0IDxxdW90ZT5t YXJraW5nPC9xdW90ZT4gYSBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVybmluZyB0 bworICAgdGhlIG1hcmtlZCBwb3NpdGlvbiwgdGhvdWdoIHRoaXMgaXMgb3B0aW9uYWwuICBXaGVu IGEgbWFya2VkIHBvc2l0aW9uIGlzCisgICByZXN0b3JlZCwgdGhlIGluZGV4IEFNIGlzIG5vdGlm aWVkIHZpYSB0aGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAgY2FsbGJhY2sg c28gaXQgY2FuIGludmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5 IHRyYWNrcworICAgdGhlIHNjYW4ncyBwcm9ncmVzcyAoc3VjaCBhcyBhcnJheSBrZXkgc3RhdGUp LiAgU2VlIHRoZQorICAgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBk ZXNjcmlwdGlvbiBmb3IgZGV0YWlscy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgQm90aCB0 aGUgc2NhbiBwb3NpdGlvbiBhbmQgdGhlIG1hcmsgcG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBt YWludGFpbmVkCisgICBUaGUgc2NhbiBwb3NpdGlvbiAoaWYgYW55KSBtdXN0IGJlIG1haW50YWlu ZWQgYnkgdGhlIHRhYmxlIEFNIGFuZCBpbmRleCBBTQogICAgY29uc2lzdGVudGx5IGluIHRoZSBm YWNlIG9mIGNvbmN1cnJlbnQgaW5zZXJ0aW9ucyBvciBkZWxldGlvbnMgaW4gdGhlCiAgICBpbmRl eC4gIEl0IGlzIE9LIGlmIGEgZnJlc2hseS1pbnNlcnRlZCBlbnRyeSBpcyBub3QgcmV0dXJuZWQg YnkgYSBzY2FuIHRoYXQKICAgIHdvdWxkIGhhdmUgZm91bmQgdGhlIGVudHJ5IGlmIGl0IGhhZCBl eGlzdGVkIHdoZW4gdGhlIHNjYW4gc3RhcnRlZCwgb3IgZm9yCkBAIC0xMDQ0LDEyICsxMjI1LDE0 IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5 LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW5zdGVhZCBvZiB1 c2luZyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBi ZSBkb25lIHdpdGgKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNo IGFsbCB0dXBsZXMgaW4gb25lIGNhbGwuICBUaGlzIGNhbiBiZQotICAgbm90aWNlYWJseSBtb3Jl IGVmZmljaWVudCB0aGFuIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYmVjYXVzZSBp dCBhbGxvd3MKLSAgIGF2b2lkaW5nIGxvY2svdW5sb2NrIGN5Y2xlcyB3aXRoaW4gdGhlIGFjY2Vz cyBtZXRob2QuICBJbiBwcmluY2lwbGUKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rp b24+IHNob3VsZCBoYXZlIHRoZSBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQKLSAgIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0 cmljdGlvbnMgdG8KKyAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYW4gaW5kZXgg c2NhbiBjYW4gYmUgZG9uZSB3aXRoCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9u PiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4KKyAgIGJlIG5vdGlj ZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiB3aXRoIGFuIDxxdW90ZT5vcmRlcmVkPC9xdW90ZT4g c2NhbgorICAgYmVjYXVzZSBpdCBhbGxvd3MgZWZmaWNpZW50IHNlcXVlbnRpYWwgYWNjZXNzIHRv IHRhYmxlIEFNIHBhZ2VzIGNvbnRhaW5pbmcKKyAgIG1hdGNoZXMuICBJbiBwcmluY2lwbGUgPGZ1 bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2hvdWxkIGhhdmUgdGhlCisgICBzYW1lIGVm ZmVjdHMgYXMgcmVwZWF0ZWQgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscywgYnV0IHdlIGltcG9zZSBzZXZl cmFsIHJlc3RyaWN0aW9ucyB0bwogICAgc2ltcGxpZnkgbWF0dGVycy4gIEZpcnN0IG9mIGFsbCwg PGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gcmV0dXJucyBhbGwKICAgIHR1cGxlcyBh dCBvbmNlIGFuZCBtYXJraW5nIG9yIHJlc3RvcmluZyBzY2FuIHBvc2l0aW9ucyBpc24ndAogICAg c3VwcG9ydGVkLiBTZWNvbmRseSwgdGhlIHR1cGxlcyBhcmUgcmV0dXJuZWQgaW4gYSBiaXRtYXAg d2hpY2ggZG9lc24ndApAQCAtMTA2NiwxMCArMTI0OSw2NCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUg KENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAKICAg PHBhcmE+CiAgICBOb3RlIHRoYXQgaXQgaXMgcGVybWl0dGVkIGZvciBhbiBhY2Nlc3MgbWV0aG9k IHRvIGltcGxlbWVudCBvbmx5Ci0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBh bmQgbm90IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIG9yIHZpY2UgdmVyc2EsCi0g ICBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBv ciB0aGUgb3RoZXIuCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90 IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiwKKyAgIG9yIHZpY2UgdmVyc2EsIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlv biBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KICAgPC9wYXJhPgogCisgIDxz ZWN0MiBpZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyI+CisgICA8dGl0bGU+VGFibGUgQU0gQ29u c2lkZXJhdGlvbnMgZm9yIEJhdGNoIFNjYW5uaW5nPC90aXRsZT4KKworICAgPHBhcmE+CisgICAg VGhpcyBzZWN0aW9uIGlzIHByaW1hcmlseSByZWxldmFudCB0byB0YWJsZSBhY2Nlc3MgbWV0aG9k IGF1dGhvcnMuCisgICAgV2hlbiBhbiBpbmRleCBzY2FuIHVzZXMgdGhlIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLAorICAgIHRoZSB0YWJsZSBBTSBpcyByZXNwb25z aWJsZSBmb3IgbWFuYWdpbmcgcG9zaXRpb24gc3RhdGUgd2l0aGluCisgICAgPHN0cnVjdGZpZWxk PnNjYW4tJmd0O2JhdGNoUmluZ0J1ZmZlcjwvc3RydWN0ZmllbGQ+IGFuZCBmb3IgY29udHJvbGxp bmcgd2hlbgorICAgIGJ1ZmZlciBwaW5zIG9uIGluZGV4IHBhZ2VzIGFyZSByZWxlYXNlZC4KKyAg IDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3RmaWVsZD5zY2FuLSZndDtiYXRj aFJpbmdCdWZmZXIuc2NhblBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRyYWNrcyB0aGUKKyAgICBj dXJyZW50IHJlYWQgcG9zaXRpb24gd2l0aGluIHRoZSByaW5nIGJ1ZmZlciBvZiBiYXRjaGVzLiAg VGhlIHRhYmxlIEFNCisgICAgbXVzdCBhZHZhbmNlIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1 Y3RmaWVsZD4gYXMgdHVwbGVzIGFyZSByZXR1cm5lZAorICAgIGJ5IDxmdW5jdGlvbj50YWJsZV9p bmRleF9nZXRuZXh0X3Nsb3Q8L2Z1bmN0aW9uPi4gIFRoZSBjb3JlIGNvZGUgbWF5IGFsc28KKyAg ICBtb2RpZnkgdGhpcyBmaWVsZCBkdXJpbmcgb3BlcmF0aW9ucyBzdWNoIGFzIG1hcmsvcmVzdG9y ZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3RmaWVsZD5zY2FuLSZn dDtiYXRjaFJpbmdCdWZmZXIucHJlZmV0Y2hQb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCB0cmFja3MK KyAgICB0aGUgcG9zaXRpb24gZm9yIEkvTyBwcmVmZXRjaGluZy4gIEl0IGlzIGdlbmVyYWxseSBh ZHZhbmNlZCBieSBpbml0aWFsaXppbmcKKyAgICBpdCBmcm9tIDxzdHJ1Y3RmaWVsZD5yZWFkUG9z PC9zdHJ1Y3RmaWVsZD4gd2l0aGluIGEgcmVhZCBzdHJlYW0gY2FsbGJhY2ssCisgICAgYWxsb3dp bmcgdGhlIHRhYmxlIEFNIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBwb2ludGVkIHRvIGJ5IGl0 ZW1zIHRoYXQgYXJlCisgICAgd2VsbCBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9u LiAgSW5pdGlhbGx5CisgICAgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4g c3RhcnRzIGF0CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiwgYnV0IGFz IHRoZSByZWFkIHN0cmVhbSByYW1wcyB1cCBpdCBjYW4KKyAgICBnZXQgZmFyIGFoZWFkICZtZGFz aDsgc3Bhbm5pbmcgbXVsdGlwbGUgaW5kZXggcGFnZXMgaWYgbmVjZXNzYXJ5IHRvCisgICAgbWFp bnRhaW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFuY2UgZm9yIHRhYmxlIGJsb2NrIHJl YWRzLiAgQSBtYWpvciBnb2FsCisgICAgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaW50ZXJmYWNlIGlzIHRvIGFsbG93IHRoZSB0YWJsZSBBTQorICAgIHRvIHByZWZldGNo IHdpdGhvdXQgYmVpbmcgbGltaXRlZCB0byBpdGVtcyBmcm9tIHRoZSBjdXJyZW50CisgICAgPHN0 cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBpbmRleCBsZWFmIHBhZ2UuCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIEJvdGggPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZp ZWxkPiBhbmQKKyAgICA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8L3N0cnVjdGZpZWxkPiBhcmUg Y29udHJvbGxlZCBieSB0aGUgdGFibGUgQU0gYW5kCisgICAgY29yZSBjb2RlOyBpbmRleCBhY2Nl c3MgbWV0aG9kcyBzaG91bGQgbm90IGFjY2VzcyBvciBtYW5pcHVsYXRlIHRoZXNlCisgICAgZmll bGRzLiAgU2VlIHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvPC9maWxlbmFt ZT4KKyAgICBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgZXhhbXBsZS4KKyAgIDwvcGFy YT4KKworICAgPHBhcmE+CisgICAgQnVmZmVyIHBpbnMgb24gaW5kZXggcGFnZXMgcmV0dXJuZWQg YnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhcmUKKyAgICBtYW5hZ2VkIGJ5IHRo ZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBkZWNpZGVzIHdoZW4gdG8gZHJvcCBpbmRleCBwYWdl CisgICAgcGlucyBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzY2FuIHVzZXMgYW4gTVZDQy1jb21wbGlh bnQgc25hcHNob3QuICBGb3IgTVZDQworICAgIHNuYXBzaG90IHNjYW5zLCBwaW5zIGFyZSBkcm9w cGVkIGVhZ2VybHk7IGZvciBub24tTVZDQyBzbmFwc2hvdCBzY2FucywKKyAgICBwaW5zIGFyZSBy ZXRhaW5lZCB1bnRpbCA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQu CisgICAgU2VlIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rp b24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPgorICAgIGRlc2NyaXB0aW9ucyBpbiA8eHJlZiBsaW5r ZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFpbHMuCisgICA8L3BhcmE+CisKKyAgPC9z ZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4LWxvY2tpbmciPgpAQCAtMTEy MywxMSArMTM2MCwxMyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUs IE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDxs aXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIEFuIGluZGV4IHNjYW4gbXVzdCBtYWludGFp biBhIHBpbgotICAgICAgIG9uIHRoZSBpbmRleCBwYWdlIGhvbGRpbmcgdGhlIGl0ZW0gbGFzdCBy ZXR1cm5lZCBieQotICAgICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuZCA8 ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gY2Fubm90IGRlbGV0ZQotICAgICAgIGVu dHJpZXMgZnJvbSBwYWdlcyB0aGF0IGFyZSBwaW5uZWQgYnkgb3RoZXIgYmFja2VuZHMuICBUaGUg bmVlZAotICAgICAgIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgorICAgICAgIEZv ciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHNjYW5zLCB0aGUgaW5kZXggYWNjZXNz IG1ldGhvZCBtdXN0CisgICAgICAgbWFpbnRhaW4gYSBwaW4gb24gdGhlIGluZGV4IHBhZ2UgaG9s ZGluZyB0aGUgaXRlbSBsYXN0IHJldHVybmVkLCBhbmQKKyAgICAgICA8ZnVuY3Rpb24+YW1idWxr ZGVsZXRlPC9mdW5jdGlvbj4gY2Fubm90IGRlbGV0ZSBlbnRyaWVzIGZyb20gcGFnZXMgdGhhdAor ICAgICAgIGFyZSBwaW5uZWQgYnkgb3RoZXIgYmFja2VuZHMuICBGb3IgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucywKKyAgICAgICB0aGUgdGFibGUgYWNjZXNzIG1ldGhvZCBj b250cm9scyB3aGVuIHBpbnMgYXJlIGRyb3BwZWQgKHNlZQorICAgICAgIDx4cmVmIGxpbmtlbmQ9 ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiLz4pLiAgVGhlIG5lZWQgZm9yIHRoaXMgcnVsZSBpcwor ICAgICAgIGV4cGxhaW5lZCBiZWxvdy4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4K ICAgICA8L2l0ZW1pemVkbGlzdD4KQEAgLTExNzMsNiArMTQxMiwyOSBAQCBhbXRyYW5zbGF0ZWNt cHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7 CiAgICBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIHN1Y2ggc2NhbnMgd2l0aCBNVkNDLWNvbXBsaWFu dCBzbmFwc2hvdHMuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBwcm92aWRlcyBhIGRpZmZlcmVudCBhcHByb2Fj aDoKKyAgIHRoZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIHJlY2VpdmVzIGJhdGNoZXMgb2YgVElEcyBh bmQgY29udHJvbHMgd2hlbiBpbmRleAorICAgcGFnZSBwaW5zIGFyZSBkcm9wcGVkLiAgQmVjYXVz ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHJlYWRzCisgICBtdWx0aXBsZSBpbmRl eCBsZWFmIHBhZ2VzIGFoZWFkIHRvIGZhY2lsaXRhdGUgSS9PIHByZWZldGNoaW5nIG9mIHRhYmxl CisgICBibG9ja3MsIGl0IGNhbm5vdCBwcmFjdGljYWxseSBob2xkIHBpbnMgb24gYWxsIHRob3Nl IHBhZ2VzIHNpbXVsdGFuZW91c2x5LgorICAgVGhlcmVmb3JlLCBsaWtlIDxmdW5jdGlvbj5hbWdl dGJpdG1hcDwvZnVuY3Rpb24+LCBJL08gcHJlZmV0Y2hpbmcgd2l0aAorICAgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gYW4gTVZDQy1jb21wbGlh bnQKKyAgIHNuYXBzaG90IGlzIGluIHVzZS4gIEluIHByYWN0aWNlLCB0aGUgaGVhcCB0YWJsZSBB TSAoYW5kIGFueSB0YWJsZSBBTQorICAgd2l0aCBzaW1pbGFyIGNvbmN1cnJlbmN5IHJ1bGVzKSBk cm9wcyBwaW5zIGVhZ2VybHkgZm9yIE1WQ0Mgc25hcHNob3Qgc2NhbnMKKyAgIGJ1dCByZXRhaW5z IHBpbnMgZm9yIG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zLiAgSW5kZXggYWNjZXNzIG1ldGhvZHMg dGhhdAorICAgaW1wbGVtZW50IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZG8gbm90 IGNvbnRyb2wgd2hlbiBwaW5zIGFyZQorICAgZHJvcHBlZDsgdGhhdCBkZWNpc2lvbiBpcyBkZWxl Z2F0ZWQgdG8gdGhlIHRhYmxlIEFNLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBh Y2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11 c3QgaW1wbGVtZW50CisgICB0aGUgcGluLWhvbGRpbmcgYmVoYXZpb3IgdGhlbXNlbHZlcy4gIFN1 Y2ggaW5kZXggQU1zIGFyZSBleHBlY3RlZCB0byBob2xkCisgICBvbnRvIHRoZSBsZWFmIHBhZ2Ug YnVmZmVyIHBpbiBmb3Igbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMsIHJlcGxpY2F0aW5nCisgICB0 aGUgYmVoYXZpb3IgdGhhdCB0aGUgaGVhcCB0YWJsZSBBTSB3b3VsZCB1c2Ugd2l0aAorICAgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAg V2hlbiB0aGUgPHN0cnVjdGZpZWxkPmFtcHJlZGxvY2tzPC9zdHJ1Y3RmaWVsZD4gZmxhZyBpcyBu b3Qgc2V0LCBhbnkgc2NhbiB1c2luZyB0aGF0CiAgICBpbmRleCBhY2Nlc3MgbWV0aG9kIHdpdGhp biBhIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiB3aWxsIGFjcXVpcmUgYQpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX3RhYmxlLnNnbWwKaW5kZXggNzdjNWE3NjNkLi41NWI3MjIyZTkgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9j cmVhdGVfdGFibGUuc2dtbApAQCAtMTE1MiwxMiArMTE1MiwxMyBAQCBXSVRIICggTU9EVUxVUyA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJs ZT4sIFJFTQogICAgICA8L3BhcmE+CiAKICAgICAgPHBhcmE+Ci0gICAgICBUaGUgYWNjZXNzIG1l dGhvZCBtdXN0IHN1cHBvcnQgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJl ZgotICAgICAgbGlua2VuZD0iaW5kZXhhbSIvPik7IGF0IHByZXNlbnQgdGhpcyBtZWFucyA8YWNy b255bT5HSU48L2Fjcm9ueW0+Ci0gICAgICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoIGl0J3Mg YWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nCi0gICAgICBCLXRyZWUgb3Ig aGFzaCBpbmRleGVzIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcwot ICAgICAgZG9lcyBub3RoaW5nIHRoYXQgYW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9l c24ndCBkbyBiZXR0ZXIuCi0gICAgICBTbyBpbiBwcmFjdGljZSB0aGUgYWNjZXNzIG1ldGhvZCB3 aWxsIGFsd2F5cyBiZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgorICAgICAgVGhlIGFjY2Vz cyBtZXRob2QgbXVzdCBzdXBwb3J0IGVpdGhlciA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFs PgorICAgICAgb3IgPGxpdGVyYWw+YW1nZXRiYXRjaDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5r ZW5kPSJpbmRleGFtIi8+KTsgYXQKKyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5H SU48L2Fjcm9ueW0+IGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0J3MgYWxsb3dl ZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNoIGluZGV4ZXMK KyAgICAgIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcyBkb2VzIG5v dGhpbmcgdGhhdCBhbgorICAgICAgb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBk byBiZXR0ZXIuICBTbyBpbiBwcmFjdGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRob2Qgd2lsbCBh bHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKICAgICAgIDxhY3JvbnltPlNQLUdp U1Q8L2Fjcm9ueW0+LgogICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2 aWV3cy5vdXQKaW5kZXggM2RkNjNmZDg4Li5iNTYyODczNmIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNTksNiArMTU5LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRp bmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9p bmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4b25seXNjYW4gICAgICAg ICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAgfCBvbgorIGVuYWJsZV9p bmRleHNjYW5fcHJlZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21hdGVyaWFsICAgICAgICAgICAg ICAgIHwgb24KICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9t ZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCkBAIC0xNzMsNyArMTc0LDcgQEAgc2VsZWN0IG5h bWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwog IGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3NvcnQgICAgICAg ICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBvbgot KDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50IGRl c2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50CiAtLSBtYXkgYmUg cHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNlIGxhc3QgcG9zdG1h c3RlciBzdGFydC4KLS0gCjIuNTEuMAoK --0000000000002fd78b0648b24456 Content-Type: application/x-patch; name="v8-0001-Extract-fake-LSN-infrastructure-from-GiST-index-A.patch" Content-Disposition: attachment; filename="v8-0001-Extract-fake-LSN-infrastructure-from-GiST-index-A.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkkde7ns0 RnJvbSA5YmIxOTEzZGQyYTcwNDdkZjNkYmE5YTI4ZDA0YjVhNTZjMTg1YTRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTg6MTEgLTA1MDAKU3ViamVjdDogW1BBVENIIHY4IDEvOF0gRXh0 cmFjdCBmYWtlIExTTiBpbmZyYXN0cnVjdHVyZSBmcm9tIEdpU1QgaW5kZXggQU0uCgpFeHRyYWN0 IHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgR2lTVCB0byBnZW5lcmF0ZSBmYWtlIExTTnMgc28g dGhhdApvdGhlciBpbmRleCBBTXMgY2FuIHJldXNlIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgdG8gZ2Vu ZXJhdGUgZmFrZSBMU05zLgoKUHJlcGFyYXRpb24gZm9yIGFuIHVwY29taW5nIGNvbW1pdCB0aGF0 IHdpbGwgY2hhbmdlIHRoZSBydWxlcyBhcm91bmQKaG9sZGluZyBvbiB0byBidWZmZXIgcGlucyBv biBsZWFmIHBhZ2VzIGluIHVubG9nZ2VkIG5idHJlZSBpbmRleGVzCihhY3R1YWxseSwgaW4gYWxs IGNhc2VzIGJhcnJpbmcgc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdCkuClRoaXMg aXMgdGhlIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIG5ldyBhbWdldGJhdGNoIGludGVyZmFjZS4g IEFub3RoZXIKcHJlcGFyYXRvcnkgY29tbWl0IHdpbGwgYWRkIGZha2UgTFNOIHN1cHBvcnQgdG8g bmJ0cmVlIGFoZWFkIG9mIHRoZQphbWdldGJhdGNoIGNvbW1pdC4KCkJ1bXAgWExPR19QQUdFX01B R0lDIGR1ZSB0byBYTE9HX0dJU1RfQVNTSUdOX0xTTiBiZWNvbWluZwpYTE9HX0FTU0lHTl9MU04u CgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KLS0tCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvZ2lzdF9wcml2YXRlLmggICAgICAgfCAgNCAtLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dp c3R4bG9nLmggICAgICAgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggICAg ICAgICAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9naW5zZXJ0LmggICAgICAg ICB8ICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oICAgICAgICB8ICAyICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgfCAgNiArLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMgICAgICB8IDUwIC0tLS0tLS0tLS0tLS0tLS0t LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYyAgICB8ICA4ICstLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYyAgICAgIHwgMjEgLS0tLS0tLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9naXN0ZGVzYy5jICB8ICA2IC0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgIHwgIDcgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMgICAgICAgfCAyOSArKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ2luc2VydC5jIHwgNjUgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3Jj L2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgICAgIHwgMTQgKysrLS0tCiAxNCBmaWxl cyBjaGFuZ2VkLCAxMjAgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2dpc3RfcHJpdmF0ZS5oCmluZGV4IDU1MmY2MDVjMC4uNDQ1MTRmMWNiIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9wcml2YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2dpc3RfcHJpdmF0ZS5oCkBAIC00NTcsOCArNDU3LDYgQEAgZXh0ZXJuIFhMb2dSZWNQdHIgZ2lz dFhMb2dTcGxpdChib29sIHBhZ2VfaXNfbGVhZiwKIAkJCQkJCQkJQmxvY2tOdW1iZXIgb3JpZ3Js aW5rLCBHaXN0TlNOIG9yaWduc24sCiAJCQkJCQkJCUJ1ZmZlciBsZWZ0Y2hpbGRidWYsIGJvb2wg bWFya2ZvbGxvd3JpZ2h0KTsKIAotZXh0ZXJuIFhMb2dSZWNQdHIgZ2lzdFhMb2dBc3NpZ25MU04o dm9pZCk7Ci0KIC8qIGdpc3RnZXQuYyAqLwogZXh0ZXJuIGJvb2wgZ2lzdGdldHR1cGxlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGdpc3RnZXRi aXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CkBAIC01MzEsOCArNTI5 LDYgQEAgZXh0ZXJuIHZvaWQgZ2lzdE1ha2VVbmlvbktleShHSVNUU1RBVEUgKmdpc3RzdGF0ZSwg aW50IGF0dG5vLAogCQkJCQkJCSBHSVNURU5UUlkgKmVudHJ5MiwgYm9vbCBpc251bGwyLAogCQkJ CQkJCSBEYXR1bSAqZHN0LCBib29sICpkc3Rpc251bGwpOwogCi1leHRlcm4gWExvZ1JlY1B0ciBn aXN0R2V0RmFrZUxTTihSZWxhdGlvbiByZWwpOwotCiAvKiBnaXN0dmFjdXVtLmMgKi8KIGV4dGVy biBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmdpc3RidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAq aW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9n aXN0eGxvZy5oCmluZGV4IGQzZDFjNjU0OS4uMWMyY2Y2ZTgxIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cu aApAQCAtMjYsNyArMjYsNyBAQAogIC8qICNkZWZpbmUgWExPR19HSVNUX0lOU0VSVF9DT01QTEVU RQkgMHg0MCAqLwkvKiBub3QgdXNlZCBhbnltb3JlICovCiAgLyogI2RlZmluZSBYTE9HX0dJU1Rf Q1JFQVRFX0lOREVYCQkgMHg1MCAqLwkvKiBub3QgdXNlZCBhbnltb3JlICovCiAjZGVmaW5lIFhM T0dfR0lTVF9QQUdFX0RFTEVURQkJMHg2MAotI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJ MHg3MAkvKiBub3AsIGFzc2lnbiBuZXcgTFNOICovCisgLyogI2RlZmluZSBYTE9HX0dJU1RfQVNT SUdOX0xTTgkJIDB4NzAgKi8JLyogbm90IHVzZWQgYW55bW9yZSAqLwogCiAvKgogICogQmFja3Vw IEJsayAwOiB1cGRhdGVkIHBhZ2UuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxv Zy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAppbmRleCAwNTkxYTg4NWQuLmIwNWVmZTdj NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZy5oCkBAIC0yNTcsNiArMjU3LDcgQEAgZXh0ZXJuIGJvb2wgQ3JlYXRlUmVz dGFydFBvaW50KGludCBmbGFncyk7CiBleHRlcm4gV0FMQXZhaWxhYmlsaXR5IEdldFdBTEF2YWls YWJpbGl0eShYTG9nUmVjUHRyIHRhcmdldExTTik7CiBleHRlcm4gdm9pZCBYTG9nUHV0TmV4dE9p ZChPaWQgbmV4dE9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBYTG9nUmVzdG9yZVBvaW50KGNvbnN0 IGNoYXIgKnJwTmFtZSk7CitleHRlcm4gWExvZ1JlY1B0ciBYTG9nQXNzaWduTFNOKHZvaWQpOwog ZXh0ZXJuIHZvaWQgVXBkYXRlRnVsbFBhZ2VXcml0ZXModm9pZCk7CiBleHRlcm4gdm9pZCBHZXRG dWxsUGFnZVdyaXRlSW5mbyhYTG9nUmVjUHRyICpSZWRvUmVjUHRyX3AsIGJvb2wgKmRvUGFnZVdy aXRlc19wKTsKIGV4dGVybiBYTG9nUmVjUHRyIEdldFJlZG9SZWNQdHIodm9pZCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2luc2VydC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dpbnNlcnQuaAppbmRleCAxNmViYzc2ZTcuLjkxZGZiZDU2MiAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL3hsb2dpbnNlcnQuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxv Z2luc2VydC5oCkBAIC02NCw2ICs2NCw4IEBAIGV4dGVybiB2b2lkIGxvZ19uZXdwYWdlX3Jhbmdl KFJlbGF0aW9uIHJlbCwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCSAgQmxvY2tOdW1iZXIg c3RhcnRibGssIEJsb2NrTnVtYmVyIGVuZGJsaywgYm9vbCBwYWdlX3N0ZCk7CiBleHRlcm4gWExv Z1JlY1B0ciBYTG9nU2F2ZUJ1ZmZlckZvckhpbnQoQnVmZmVyIGJ1ZmZlciwgYm9vbCBidWZmZXJf c3RkKTsKIAorZXh0ZXJuIFhMb2dSZWNQdHIgWExvZ0dldEZha2VMU04oUmVsYXRpb24gcmVsKTsK KwogZXh0ZXJuIHZvaWQgSW5pdFhMb2dJbnNlcnQodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBY TE9HSU5TRVJUX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJv bC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKaW5kZXggNzUwM2RiMWFmLi43 N2E2NjFlODEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oCisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oCkBAIC03OCw3ICs3OCw3IEBAIHR5 cGVkZWYgc3RydWN0IENoZWNrUG9pbnQKICNkZWZpbmUgWExPR19FTkRfT0ZfUkVDT1ZFUlkJCQkw eDkwCiAjZGVmaW5lIFhMT0dfRlBJX0ZPUl9ISU5UCQkJCTB4QTAKICNkZWZpbmUgWExPR19GUEkJ CQkJCQkweEIwCi0vKiAweEMwIGlzIHVzZWQgaW4gUG9zdGdyZXMgOS41LTExICovCisjZGVmaW5l IFhMT0dfQVNTSUdOX0xTTgkJCQkJMHhDMAogI2RlZmluZSBYTE9HX09WRVJXUklURV9DT05UUkVD T1JECQkweEQwCiAjZGVmaW5lIFhMT0dfQ0hFQ0tQT0lOVF9SRURPCQkJMHhFMAogI2RlZmluZSBY TE9HX0xPR0lDQUxfREVDT0RJTkdfU1RBVFVTX0NIQU5HRQkweEYwCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 LmMKaW5kZXggZDU5NDQyMDVkLi42ODNlYmNhNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naXN0L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAg LTUxNyw3ICs1MTcsNyBAQCBnaXN0cGxhY2V0b3BhZ2UoUmVsYXRpb24gcmVsLCBTaXplIGZyZWVz cGFjZSwgR0lTVFNUQVRFICpnaXN0c3RhdGUsCiAJCQkJCQkJCQkgICBkaXN0LCBvbGRybGluaywg b2xkbnNuLCBsZWZ0Y2hpbGRidWYsCiAJCQkJCQkJCQkgICBtYXJrZm9sbG93cmlnaHQpOwogCQkJ ZWxzZQotCQkJCXJlY3B0ciA9IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCQkJcmVjcHRyID0gWExv Z0dldEZha2VMU04ocmVsKTsKIAkJfQogCiAJCWZvciAocHRyID0gZGlzdDsgcHRyOyBwdHIgPSBw dHItPm5leHQpCkBAIC01OTQsNyArNTk0LDcgQEAgZ2lzdHBsYWNldG9wYWdlKFJlbGF0aW9uIHJl bCwgU2l6ZSBmcmVlc3BhY2UsIEdJU1RTVEFURSAqZ2lzdHN0YXRlLAogCQkJCQkJCQkJCWxlZnRj aGlsZGJ1Zik7CiAJCQl9CiAJCQllbHNlCi0JCQkJcmVjcHRyID0gZ2lzdEdldEZha2VMU04ocmVs KTsKKwkJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOwogCQl9CiAJCVBhZ2VTZXRMU04o cGFnZSwgcmVjcHRyKTsKIApAQCAtMTczMyw3ICsxNzMzLDcgQEAgZ2lzdHBydW5lcGFnZShSZWxh dGlvbiByZWwsIFBhZ2UgcGFnZSwgQnVmZmVyIGJ1ZmZlciwgUmVsYXRpb24gaGVhcFJlbCkKIAkJ CVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAkJfQogCQllbHNlCi0JCQlQYWdlU2V0TFNOKHBh Z2UsIGdpc3RHZXRGYWtlTFNOKHJlbCkpOworCQkJUGFnZVNldExTTihwYWdlLCBYTG9nR2V0RmFr ZUxTTihyZWwpKTsKIAogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAJfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3R1dGlsLmMKaW5kZXggMjc5NzJmYWQyLi4wZjU4ZjYxODcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdHV0aWwuYwpAQCAtMTAwNyw1NiArMTAwNyw2IEBAIGdpc3Rwcm9wZXJ0eShPaWQgaW5k ZXhfb2lkLCBpbnQgYXR0bm8sCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gKiBTb21lIGluZGV4 ZXMgYXJlIG5vdCBXQUwtbG9nZ2VkLCBidXQgd2UgbmVlZCBMU05zIHRvIGRldGVjdCBjb25jdXJy ZW50IHBhZ2UKLSAqIHNwbGl0cyBhbnl3YXkuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBmYWtl IHNlcXVlbmNlIG9mIExTTnMgZm9yIHRoYXQKLSAqIHB1cnBvc2UuCi0gKi8KLVhMb2dSZWNQdHIK LWdpc3RHZXRGYWtlTFNOKFJlbGF0aW9uIHJlbCkKLXsKLQlpZiAocmVsLT5yZF9yZWwtPnJlbHBl cnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCi0JewotCQkvKgotCQkgKiBUZW1wb3Jh cnkgcmVsYXRpb25zIGFyZSBvbmx5IGFjY2Vzc2libGUgaW4gb3VyIHNlc3Npb24sIHNvIGEgc2lt cGxlCi0JCSAqIGJhY2tlbmQtbG9jYWwgY291bnRlciB3aWxsIGRvLgotCQkgKi8KLQkJc3RhdGlj IFhMb2dSZWNQdHIgY291bnRlciA9IEZpcnN0Tm9ybWFsVW5sb2dnZWRMU047Ci0KLQkJcmV0dXJu IGNvdW50ZXIrKzsKLQl9Ci0JZWxzZSBpZiAoUmVsYXRpb25Jc1Blcm1hbmVudChyZWwpKQotCXsK LQkJLyoKLQkJICogV0FMLWxvZ2dpbmcgb24gdGhpcyByZWxhdGlvbiB3aWxsIHN0YXJ0IGFmdGVy IGNvbW1pdCwgc28gaXRzIExTTnMKLQkJICogbXVzdCBiZSBkaXN0aW5jdCBudW1iZXJzIHNtYWxs ZXIgdGhhbiB0aGUgTFNOIGF0IHRoZSBuZXh0IGNvbW1pdC4KLQkJICogRW1pdCBhIGR1bW15IFdB TCByZWNvcmQgaWYgaW5zZXJ0LUxTTiBoYXNuJ3QgYWR2YW5jZWQgYWZ0ZXIgdGhlCi0JCSAqIGxh c3QgY2FsbC4KLQkJICovCi0JCXN0YXRpYyBYTG9nUmVjUHRyIGxhc3Rsc24gPSBJbnZhbGlkWExv Z1JlY1B0cjsKLQkJWExvZ1JlY1B0cgljdXJybHNuID0gR2V0WExvZ0luc2VydFJlY1B0cigpOwot Ci0JCS8qIFNob3VsZG4ndCBiZSBjYWxsZWQgZm9yIFdBTC1sb2dnaW5nIHJlbGF0aW9ucyAqLwot CQlBc3NlcnQoIVJlbGF0aW9uTmVlZHNXQUwocmVsKSk7Ci0KLQkJLyogTm8gbmVlZCBmb3IgYW4g YWN0dWFsIHJlY29yZCBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBkaXN0aW5jdCBMU04gKi8KLQkJaWYg KFhMb2dSZWNQdHJJc1ZhbGlkKGxhc3Rsc24pICYmIGxhc3Rsc24gPT0gY3VycmxzbikKLQkJCWN1 cnJsc24gPSBnaXN0WExvZ0Fzc2lnbkxTTigpOwotCi0JCWxhc3Rsc24gPSBjdXJybHNuOwotCQly ZXR1cm4gY3VycmxzbjsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogVW5sb2dnZWQgcmVsYXRp b25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIgYmFja2VuZHMsIGFuZCBzdXJ2aXZlCi0JCSAq IChjbGVhbikgcmVzdGFydHMuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpIGhhbmRsZXMgdGhh dCBmb3IgdXMuCi0JCSAqLwotCQlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09 IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEKTsKLQkJcmV0dXJuIEdldEZha2VMU05Gb3JVbmxvZ2dl ZFJlbCgpOwotCX0KLX0KLQogLyoKICAqIFRoaXMgaXMgYSBzdHJhdG51bSB0cmFuc2xhdGlvbiBz dXBwb3J0IGZ1bmN0aW9uIGZvciBHaVNUIG9wY2xhc3NlcyB0aGF0IHVzZQogICogdGhlIFJUKlN0 cmF0ZWd5TnVtYmVyIGNvbnN0YW50cy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3R2YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwpp bmRleCA5ZTcxNDk4MGQuLjY4NmEwNDE4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1 dW0uYwpAQCAtMTYsNyArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5j bHVkZSAiYWNjZXNzL2dpc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgi CisjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1 dW0uaCIKICNpbmNsdWRlICJsaWIvaW50ZWdlcnNldC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgpAQCAtMTgyLDcgKzE4Miw3IEBAIGdpc3R2YWN1dW1zY2FuKEluZGV4VmFjdXVtSW5mbyAqaW5m bywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChy ZWwpKQogCQl2c3RhdGUuc3RhcnROU04gPSBHZXRJbnNlcnRSZWNQdHIoKTsKIAllbHNlCi0JCXZz dGF0ZS5zdGFydE5TTiA9IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCXZzdGF0ZS5zdGFydE5TTiA9 IFhMb2dHZXRGYWtlTFNOKHJlbCk7CiAKIAkvKgogCSAqIFRoZSBvdXRlciBsb29wIGl0ZXJhdGVz IG92ZXIgYWxsIGluZGV4IHBhZ2VzLCBpbiBwaHlzaWNhbCBvcmRlciAod2UKQEAgLTQxMyw3ICs0 MTMsNyBAQCByZXN0YXJ0OgogCQkJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAkJCX0KIAkJ CWVsc2UKLQkJCQlQYWdlU2V0TFNOKHBhZ2UsIGdpc3RHZXRGYWtlTFNOKHJlbCkpOworCQkJCVBh Z2VTZXRMU04ocGFnZSwgWExvZ0dldEZha2VMU04ocmVsKSk7CiAKIAkJCUVORF9DUklUX1NFQ1RJ T04oKTsKIApAQCAtNzA3LDcgKzcwNyw3IEBAIGdpc3RkZWxldGVwYWdlKEluZGV4VmFjdXVtSW5m byAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVk c1dBTChpbmZvLT5pbmRleCkpCiAJCXJlY3B0ciA9IGdpc3RYTG9nUGFnZURlbGV0ZShsZWFmQnVm ZmVyLCB0eGlkLCBwYXJlbnRCdWZmZXIsIGRvd25saW5rKTsKIAllbHNlCi0JCXJlY3B0ciA9IGdp c3RHZXRGYWtlTFNOKGluZm8tPmluZGV4KTsKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04oaW5m by0+aW5kZXgpOwogCVBhZ2VTZXRMU04ocGFyZW50UGFnZSwgcmVjcHRyKTsKIAlQYWdlU2V0TFNO KGxlYWZQYWdlLCByZWNwdHIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0eGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwppbmRleCBj NzgzODM4NDkuLmFlNTM4ZGM4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdHhsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jCkBAIC00 MjEsOSArNDIxLDYgQEAgZ2lzdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQljYXNl IFhMT0dfR0lTVF9QQUdFX0RFTEVURToKIAkJCWdpc3RSZWRvUGFnZURlbGV0ZShyZWNvcmQpOwog CQkJYnJlYWs7Ci0JCWNhc2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQkvKiBub3AuIFNlZSBn aXN0R2V0RmFrZUxTTigpLiAqLwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKFBBTklD LCAiZ2lzdF9yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKIAl9CkBAIC01NjcsMjQg KzU2NCw2IEBAIGdpc3RYTG9nUGFnZURlbGV0ZShCdWZmZXIgYnVmZmVyLCBGdWxsVHJhbnNhY3Rp b25JZCB4aWQsCiAJcmV0dXJuIHJlY3B0cjsKIH0KIAotLyoKLSAqIFdyaXRlIGFuIGVtcHR5IFhM T0cgcmVjb3JkIHRvIGFzc2lnbiBhIGRpc3RpbmN0IExTTi4KLSAqLwotWExvZ1JlY1B0cgotZ2lz dFhMb2dBc3NpZ25MU04odm9pZCkKLXsKLQlpbnQJCQlkdW1teSA9IDA7Ci0KLQkvKgotCSAqIFJl Y29yZHMgb3RoZXIgdGhhbiBYTE9HX1NXSVRDSCBtdXN0IGhhdmUgY29udGVudC4gV2UgdXNlIGFu IGludGVnZXIgMAotCSAqIHRvIGZvbGxvdyB0aGUgcmVzdHJpY3Rpb24uCi0JICovCi0JWExvZ0Jl Z2luSW5zZXJ0KCk7Ci0JWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfTUFSS19VTklNUE9SVEFOVCk7 Ci0JWExvZ1JlZ2lzdGVyRGF0YSgmZHVtbXksIHNpemVvZihkdW1teSkpOwotCXJldHVybiBYTG9n SW5zZXJ0KFJNX0dJU1RfSUQsIFhMT0dfR0lTVF9BU1NJR05fTFNOKTsKLX0KLQogLyoKICAqIFdy aXRlIFhMT0cgcmVjb3JkIGFib3V0IHJldXNlIG9mIGEgZGVsZXRlZCBwYWdlLgogICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9ybWdyZGVzYy9naXN0ZGVzYy5jCmluZGV4IDc5YTgzOWNjMi4uNjc3ODllMDI1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYwpAQCAtODAsOSArODAsNiBA QCBnaXN0X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQlj YXNlIFhMT0dfR0lTVF9QQUdFX0RFTEVURToKIAkJCW91dF9naXN0eGxvZ1BhZ2VEZWxldGUoYnVm LCAoZ2lzdHhsb2dQYWdlRGVsZXRlICopIHJlYyk7CiAJCQlicmVhazsKLQkJY2FzZSBYTE9HX0dJ U1RfQVNTSUdOX0xTTjoKLQkJCS8qIE5vIGRldGFpbHMgdG8gd3JpdGUgb3V0ICovCi0JCQlicmVh azsKIAl9CiB9CiAKQEAgLTEwOCw5ICsxMDUsNiBAQCBnaXN0X2lkZW50aWZ5KHVpbnQ4IGluZm8p CiAJCWNhc2UgWExPR19HSVNUX1BBR0VfREVMRVRFOgogCQkJaWQgPSAiUEFHRV9ERUxFVEUiOwog CQkJYnJlYWs7Ci0JCWNhc2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQlpZCA9ICJBU1NJR05f TFNOIjsKLQkJCWJyZWFrOwogCX0KIAogCXJldHVybiBpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL3hsb2dkZXNjLmMKaW5kZXggZmYwNzhmMjIyLi45MDQ0Yjk1MjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCkBAIC0xNzUsNiArMTc1LDEwIEBAIHhsb2dfZGVzYyhT dHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCW1lbWNweSgmZW5hYmxl ZCwgcmVjLCBzaXplb2YoYm9vbCkpOwogCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgZW5h YmxlZCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfQVNT SUdOX0xTTikKKwl7CisJCS8qIG5vIGZ1cnRoZXIgaW5mb3JtYXRpb24gdG8gcHJpbnQgKi8KKwl9 CiB9CiAKIGNvbnN0IGNoYXIgKgpAQCAtMjI5LDYgKzIzMyw5IEBAIHhsb2dfaWRlbnRpZnkodWlu dDggaW5mbykKIAkJY2FzZSBYTE9HX0xPR0lDQUxfREVDT0RJTkdfU1RBVFVTX0NIQU5HRToKIAkJ CWlkID0gIkxPR0lDQUxfREVDT0RJTkdfU1RBVFVTX0NIQU5HRSI7CiAJCQlicmVhazsKKwkJY2Fz ZSBYTE9HX0FTU0lHTl9MU046CisJCQlpZCA9ICJBU1NJR05fTFNOIjsKKwkJCWJyZWFrOwogCX0K IAogCXJldHVybiBpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCA4MWRjODY4NDcu LmM4ZGIzM2QyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtODIyOCw2ICs4MjI4 LDMxIEBAIFhMb2dSZXN0b3JlUG9pbnQoY29uc3QgY2hhciAqcnBOYW1lKQogCXJldHVybiBSZWNQ dHI7CiB9CiAKKy8qCisgKiBXcml0ZSBhbiBlbXB0eSBYTE9HIHJlY29yZCB0byBhc3NpZ24gYSBk aXN0aW5jdCBMU04uCisgKgorICogVGhpcyBpcyB1c2VkIGJ5IGluZGV4IEFNcyAobmJ0cmVlLCBo YXNoLCBHaVNUKSB3aGVuIGJ1aWxkaW5nIGluZGV4ZXMgb24KKyAqIHBlcm1hbmVudCByZWxhdGlv bnMgd2l0aCB3YWxfbGV2ZWw9bWluaW1hbC4gIEluIHRoYXQgc2NlbmFyaW8sIFdBTC1sb2dnaW5n CisgKiB3aWxsIHN0YXJ0IGFmdGVyIGNvbW1pdCwgYnV0IHRoZSBpbmRleCBBTSBuZWVkcyBkaXN0 aW5jdCBMU05zIHRvIGRldGVjdAorICogY29uY3VycmVudCBwYWdlIG1vZGlmaWNhdGlvbnMuICBX aGVuIHRoZSBjdXJyZW50IFdBTCBpbnNlcnQgcG9zaXRpb24gaGFzbid0CisgKiBhZHZhbmNlZCBz aW5jZSB0aGUgbGFzdCBjYWxsLCB3ZSBlbWl0IHRoaXMgZHVtbXkgcmVjb3JkIHRvIGVuc3VyZSB3 ZSBnZXQgYQorICogbmV3LCBkaXN0aW5jdCBMU04uCisgKi8KK1hMb2dSZWNQdHIKK1hMb2dBc3Np Z25MU04odm9pZCkKK3sKKwlpbnQJCQlkdW1teSA9IDA7CisKKwkvKgorCSAqIFJlY29yZHMgb3Ro ZXIgdGhhbiBYTE9HX1NXSVRDSCBtdXN0IGhhdmUgY29udGVudC4gIFdlIHVzZSBhbiBpbnRlZ2Vy IDAKKwkgKiB0byBzYXRpc2Z5IHRoaXMgcmVzdHJpY3Rpb24uCisJICovCisJWExvZ0JlZ2luSW5z ZXJ0KCk7CisJWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfTUFSS19VTklNUE9SVEFOVCk7CisJWExv Z1JlZ2lzdGVyRGF0YSgmZHVtbXksIHNpemVvZihkdW1teSkpOworCXJldHVybiBYTG9nSW5zZXJ0 KFJNX1hMT0dfSUQsIFhMT0dfQVNTSUdOX0xTTik7Cit9CisKIC8qCiAgKiBDaGVjayBpZiBhbnkg b2YgdGhlIEdVQyBwYXJhbWV0ZXJzIHRoYXQgYXJlIGNyaXRpY2FsIGZvciBob3Qgc3RhbmRieQog ICogaGF2ZSBjaGFuZ2VkLCBhbmQgdXBkYXRlIHRoZSB2YWx1ZSBpbiBwZ19jb250cm9sIGZpbGUg aWYgbmVjZXNzYXJ5LgpAQCAtODU5NSw2ICs4NjIwLDEwIEBAIHhsb2dfcmVkbyhYTG9nUmVhZGVy U3RhdGUgKnJlY29yZCkKIAl7CiAJCS8qIG5vdGhpbmcgdG8gZG8gaGVyZSwgaGFuZGxlZCBpbiB4 bG9ncmVjb3ZlcnkuYyAqLwogCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfQVNTSUdOX0xTTikK Kwl7CisJCS8qIG5vdGhpbmcgdG8gZG8gaGVyZSwgc2VlIFhMb2dHZXRGYWtlTFNOKCkgKi8KKwl9 CiAJZWxzZSBpZiAoaW5mbyA9PSBYTE9HX0ZQSSB8fCBpbmZvID09IFhMT0dfRlBJX0ZPUl9ISU5U KQogCXsKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dp bnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYwppbmRleCA5 MmM0OGU3NjguLmZmODNhYjVmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ2luc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNl cnQuYwpAQCAtNTQ3LDYgKzU0Nyw3MSBAQCBYTG9nU2ltcGxlSW5zZXJ0SW50NjQoUm1ncklkIHJt aWQsIHVpbnQ4IGluZm8sIGludDY0IHZhbHVlKQogCXJldHVybiBYTG9nSW5zZXJ0KHJtaWQsIGlu Zm8pOwogfQogCisvKgorICogWExvZ0dldEZha2VMU04gLSBnZXQgYSBmYWtlIExTTiBmb3IgYW4g aW5kZXggcGFnZSB0aGF0IGlzbid0IFdBTC1sb2dnZWQuCisgKgorICogU29tZSBpbmRleCBBTXMg KG5idHJlZSwgaGFzaCwgR2lTVCkgdXNlIExTTnMgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgcGFnZQor ICogbW9kaWZpY2F0aW9ucywgYnV0IG5vdCBhbGwgaW5kZXggcGFnZXMgYXJlIFdBTC1sb2dnZWQu ICBUaGlzIGZ1bmN0aW9uCisgKiBwcm92aWRlcyBhIHNlcXVlbmNlIG9mIGZha2UgTFNOcyBmb3Ig dGhhdCBwdXJwb3NlLgorICoKKyAqIFRoZSBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSByZWxhdGlv bidzIHBlcnNpc3RlbmNlOgorICoKKyAqIC0gRm9yIHRlbXBvcmFyeSByZWxhdGlvbnMsIHdlIHVz ZSBhIHNpbXBsZSBiYWNrZW5kLWxvY2FsIGNvdW50ZXIgc2luY2UKKyAqICAgdGVtcG9yYXJ5IHJl bGF0aW9ucyBhcmUgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiBvdXIgc2Vzc2lvbi4KKyAqCisgKiAt IEZvciBwZXJtYW5lbnQgcmVsYXRpb25zIHdoZW4gV0FMLWxvZ2dpbmcgaXMgZGlzYWJsZWQgKGUu Zy4sIGR1cmluZyBpbmRleAorICogICBjcmVhdGlvbiB3aXRoIHdhbF9sZXZlbD1taW5pbWFsKSwg d2UgdXNlIHRoZSBjdXJyZW50IFdBTCBpbnNlcnQgcG9zaXRpb24uCisgKiAgIElmIHRoZSBpbnNl cnQgcG9zaXRpb24gaGFzbid0IGFkdmFuY2VkIHNpbmNlIHRoZSBsYXN0IGNhbGwsIHdlIGVtaXQg YQorICogICBkdW1teSBXQUwgcmVjb3JkIHZpYSBYTG9nQXNzaWduTFNOKCkgdG8gZW5zdXJlIHdl IGdldCBhIGRpc3RpbmN0IExTTi4KKyAqCisgKiAtIEZvciB1bmxvZ2dlZCByZWxhdGlvbnMsIHdl IHVzZSB0aGUgZ2xvYmFsIGZha2UgTFNOIGNvdW50ZXIgbWFpbnRhaW5lZAorICogICBieSBHZXRG YWtlTFNORm9yVW5sb2dnZWRSZWwoKS4KKyAqLworWExvZ1JlY1B0cgorWExvZ0dldEZha2VMU04o UmVsYXRpb24gcmVsKQoreworCWlmIChyZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UgPT0gUkVM UEVSU0lTVEVOQ0VfVEVNUCkKKwl7CisJCS8qCisJCSAqIFRlbXBvcmFyeSByZWxhdGlvbnMgYXJl IG9ubHkgYWNjZXNzaWJsZSBpbiBvdXIgc2Vzc2lvbiwgc28gYSBzaW1wbGUKKwkJICogYmFja2Vu ZC1sb2NhbCBjb3VudGVyIHdpbGwgZG8uCisJCSAqLworCQlzdGF0aWMgWExvZ1JlY1B0ciBjb3Vu dGVyID0gRmlyc3ROb3JtYWxVbmxvZ2dlZExTTjsKKworCQlyZXR1cm4gY291bnRlcisrOworCX0K KwllbHNlIGlmIChSZWxhdGlvbklzUGVybWFuZW50KHJlbCkpCisJeworCQkvKgorCQkgKiBXQUwt bG9nZ2luZyBvbiB0aGlzIHJlbGF0aW9uIHdpbGwgc3RhcnQgYWZ0ZXIgY29tbWl0LCBzbyBpdHMg TFNOcworCQkgKiBtdXN0IGJlIGRpc3RpbmN0IG51bWJlcnMgc21hbGxlciB0aGFuIHRoZSBMU04g YXQgdGhlIG5leHQgY29tbWl0LgorCQkgKiBFbWl0IGEgZHVtbXkgV0FMIHJlY29yZCBpZiBpbnNl cnQtTFNOIGhhc24ndCBhZHZhbmNlZCBhZnRlciB0aGUKKwkJICogbGFzdCBjYWxsLgorCQkgKi8K KwkJc3RhdGljIFhMb2dSZWNQdHIgbGFzdGxzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlYTG9n UmVjUHRyCWN1cnJsc24gPSBHZXRYTG9nSW5zZXJ0UmVjUHRyKCk7CisKKwkJLyogU2hvdWxkbid0 IGJlIGNhbGxlZCBmb3IgV0FMLWxvZ2dpbmcgcmVsYXRpb25zICovCisJCUFzc2VydCghUmVsYXRp b25OZWVkc1dBTChyZWwpKTsKKworCQkvKiBObyBuZWVkIGZvciBhbiBhY3R1YWwgcmVjb3JkIGlm IHdlIGFscmVhZHkgaGF2ZSBhIGRpc3RpbmN0IExTTiAqLworCQlpZiAoWExvZ1JlY1B0cklzVmFs aWQobGFzdGxzbikgJiYgbGFzdGxzbiA9PSBjdXJybHNuKQorCQkJY3VycmxzbiA9IFhMb2dBc3Np Z25MU04oKTsKKworCQlsYXN0bHNuID0gY3VycmxzbjsKKwkJcmV0dXJuIGN1cnJsc247CisJfQor CWVsc2UKKwl7CisJCS8qCisJCSAqIFVubG9nZ2VkIHJlbGF0aW9ucyBhcmUgYWNjZXNzaWJsZSBm cm9tIG90aGVyIGJhY2tlbmRzLCBhbmQgc3Vydml2ZQorCQkgKiAoY2xlYW4pIHJlc3RhcnRzLiAg R2V0RmFrZUxTTkZvclVubG9nZ2VkUmVsKCkgaGFuZGxlcyB0aGF0IGZvciB1cy4KKwkJICovCisJ CUFzc2VydChyZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5M T0dHRUQpOworCQlyZXR1cm4gR2V0RmFrZUxTTkZvclVubG9nZ2VkUmVsKCk7CisJfQorfQorCiAv KgogICogQXNzZW1ibGUgYSBXQUwgcmVjb3JkIGZyb20gdGhlIHJlZ2lzdGVyZWQgZGF0YSBhbmQg YnVmZmVycyBpbnRvIGFuCiAgKiBYTG9nUmVjRGF0YSBjaGFpbiwgcmVhZHkgZm9yIGluc2VydGlv biB3aXRoIFhMb2dJbnNlcnRSZWNvcmQoKS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMK aW5kZXggNmY5MzU2NDhhLi4yNzVjZDQwMzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1n ci5jCkBAIC00NDY5LDEzICs0NDY5LDEzIEBAIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1Ziwg U01nclJlbGF0aW9uIHJlbG4sIElPT2JqZWN0IGlvX29iamVjdCwKIAkgKiBsb3N0IGFmdGVyIGEg Y3Jhc2ggYW55d2F5LiAgTW9zdCB1bmxvZ2dlZCByZWxhdGlvbiBwYWdlcyBkbyBub3QgYmVhcgog CSAqIExTTnMgc2luY2Ugd2UgbmV2ZXIgZW1pdCBXQUwgcmVjb3JkcyBmb3IgdGhlbSwgYW5kIHRo ZXJlZm9yZSBmbHVzaGluZwogCSAqIHVwIHRocm91Z2ggdGhlIGJ1ZmZlciBMU04gd291bGQgYmUg dXNlbGVzcywgYnV0IGhhcm1sZXNzLiAgSG93ZXZlciwKLQkgKiBHaVNUIGluZGV4ZXMgdXNlIExT TnMgaW50ZXJuYWxseSB0byB0cmFjayBwYWdlLXNwbGl0cywgYW5kIHRoZXJlZm9yZQotCSAqIHVu bG9nZ2VkIEdpU1QgcGFnZXMgYmVhciAiZmFrZSIgTFNOcyBnZW5lcmF0ZWQgYnkKLQkgKiBHZXRG YWtlTFNORm9yVW5sb2dnZWRSZWwuICBJdCBpcyB1bmxpa2VseSBidXQgcG9zc2libGUgdGhhdCB0 aGUgZmFrZQotCSAqIExTTiBjb3VudGVyIGNvdWxkIGFkdmFuY2UgcGFzdCB0aGUgV0FMIGluc2Vy dGlvbiBwb2ludDsgYW5kIGlmIGl0IGRpZAotCSAqIGhhcHBlbiwgYXR0ZW1wdGluZyB0byBmbHVz aCBXQUwgdGhyb3VnaCB0aGF0IGxvY2F0aW9uIHdvdWxkIGZhaWwsIHdpdGgKLQkgKiBkaXNhc3Ry b3VzIHN5c3RlbS13aWRlIGNvbnNlcXVlbmNlcy4gIFRvIG1ha2Ugc3VyZSB0aGF0IGNhbid0IGhh cHBlbiwKLQkgKiBza2lwIHRoZSBmbHVzaCBpZiB0aGUgYnVmZmVyIGlzbid0IHBlcm1hbmVudC4K KwkgKiBzb21lIGluZGV4IEFNcyAobmJ0cmVlLCBoYXNoLCBHaVNUKSB1c2UgTFNOcyBpbnRlcm5h bGx5IHRvIGRldGVjdAorCSAqIGNvbmN1cnJlbnQgcGFnZSBtb2RpZmljYXRpb25zLCBhbmQgdGhl cmVmb3JlIHVubG9nZ2VkIGluZGV4IHBhZ2VzIGJlYXIKKwkgKiAiZmFrZSIgTFNOcyBnZW5lcmF0 ZWQgYnkgWExvZ0dldEZha2VMU04uICBJdCBpcyB1bmxpa2VseSBidXQgcG9zc2libGUKKwkgKiB0 aGF0IHRoZSBmYWtlIExTTiBjb3VudGVyIGNvdWxkIGFkdmFuY2UgcGFzdCB0aGUgV0FMIGluc2Vy dGlvbiBwb2ludDsKKwkgKiBhbmQgaWYgaXQgZGlkIGhhcHBlbiwgYXR0ZW1wdGluZyB0byBmbHVz aCBXQUwgdGhyb3VnaCB0aGF0IGxvY2F0aW9uCisJICogd291bGQgZmFpbCwgd2l0aCBkaXNhc3Ry b3VzIHN5c3RlbS13aWRlIGNvbnNlcXVlbmNlcy4gIFRvIG1ha2Ugc3VyZQorCSAqIHRoYXQgY2Fu J3QgaGFwcGVuLCBza2lwIHRoZSBmbHVzaCBpZiB0aGUgYnVmZmVyIGlzbid0IHBlcm1hbmVudC4K IAkgKi8KIAlpZiAoYnVmX3N0YXRlICYgQk1fUEVSTUFORU5UKQogCQlYTG9nRmx1c2gocmVjcHRy KTsKLS0gCjIuNTEuMAoK --0000000000002fd78b0648b24456 Content-Type: application/x-patch; name="v8-0004-Introduce-read_stream_-pause-resume-yield.patch" Content-Disposition: attachment; filename="v8-0004-Introduce-read_stream_-pause-resume-yield.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkkde7os5 RnJvbSAyZjVjNTY5ZjcwZmI4M2RmNWU3YWNmNjhkNTNhZjc1ODcxMDc0YWJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTMgSmFuIDIwMjYgMjA6NDQ6MTQgKzAxMDAKU3ViamVjdDogW1BBVENIIHY4 IDQvOF0gSW50cm9kdWNlIHJlYWRfc3RyZWFtX3twYXVzZSxyZXN1bWUseWllbGR9KCkuCgpBdXRo b3I6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhVS0dKTFQySnZXTEVpQlhNYmtTU2M1c29fWTclM0ROJTJC UzJjZTducGpMdzhRTDNkNXclNDBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL3N0b3Jh Z2UvcmVhZF9zdHJlYW0uaCAgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMgICAgICAgIHwgIDUwICsrKystCiBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL01ha2VmaWxlICAgICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Fpby9tZXNvbi5idWlsZCAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fp by90LzAwMV9haW8ucGwgICAgICAgfCAgMzAgKysrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlv L3Rlc3RfYWlvLS0xLjAuc3FsICB8ICAxMyArKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90 ZXN0X3JlYWRfc3RyZWFtLmMgfCAxODEgKysrKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgfCAgIDEgKwogOCBmaWxlcyBjaGFuZ2Vk LCAyODAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfcmVhZF9zdHJlYW0uYwoKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVhZF9zdHJlYW0uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cmVhZF9zdHJlYW0uaAppbmRleCBmMmEwY2M3OWMuLmUzYjZiYjJmMyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9yZWFkX3N0cmVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cmVhZF9zdHJlYW0uaApAQCAtOTksNiArOTksOSBAQCBleHRlcm4gUmVhZFN0cmVhbSAqcmVhZF9z dHJlYW1fYmVnaW5fc21ncl9yZWxhdGlvbihpbnQgZmxhZ3MsCiAJCQkJCQkJCQkJCQkgICBSZWFk U3RyZWFtQmxvY2tOdW1iZXJDQiBjYWxsYmFjaywKIAkJCQkJCQkJCQkJCSAgIHZvaWQgKmNhbGxi YWNrX3ByaXZhdGVfZGF0YSwKIAkJCQkJCQkJCQkJCSAgIHNpemVfdCBwZXJfYnVmZmVyX2RhdGFf c2l6ZSk7CitleHRlcm4gQmxvY2tOdW1iZXIgcmVhZF9zdHJlYW1fcGF1c2UoUmVhZFN0cmVhbSAq c3RyZWFtKTsKK2V4dGVybiB2b2lkIHJlYWRfc3RyZWFtX3Jlc3VtZShSZWFkU3RyZWFtICpzdHJl YW0pOworZXh0ZXJuIEJsb2NrTnVtYmVyIHJlYWRfc3RyZWFtX3lpZWxkKFJlYWRTdHJlYW0gKnN0 cmVhbSk7CiBleHRlcm4gdm9pZCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0p OwogZXh0ZXJuIHZvaWQgcmVhZF9zdHJlYW1fZW5kKFJlYWRTdHJlYW0gKnN0cmVhbSk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IDg4NzE3YzJmZi4uMGRiZWMyYWJi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTEwMCwxMSArMTAwLDEz IEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJaW50MTYJCXBpbm5lZF9idWZmZXJzOwogCWludDE2CQlk aXN0YW5jZTsKIAlpbnQxNgkJaW5pdGlhbGl6ZWRfYnVmZmVyczsKKwlpbnQxNgkJcmVzdW1lX2Rp c3RhbmNlOwogCWludAkJCXJlYWRfYnVmZmVyc19mbGFnczsKIAlib29sCQlzeW5jX21vZGU7CQkv KiB1c2luZyBpb19tZXRob2Q9c3luYyAqLwogCWJvb2wJCWJhdGNoX21vZGU7CQkvKiBSRUFEX1NU UkVBTV9VU0VfQkFUQ0hJTkcgKi8KIAlib29sCQlhZHZpY2VfZW5hYmxlZDsKIAlib29sCQl0ZW1w b3Jhcnk7CisJYm9vbAkJeWllbGRlZDsKIAogCS8qCiAJICogT25lLWJsb2NrIGJ1ZmZlciB0byBz dXBwb3J0ICd1bmdldHRpbmcnIGEgYmxvY2sgbnVtYmVyLCB0byByZXNvbHZlIGZsb3cKQEAgLTg3 OSw3ICs4ODEsMTUgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFt LCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCiAJCS8qIEVuZCBvZiBzdHJlYW0gcmVhY2hlZD8g ICovCiAJCWlmIChzdHJlYW0tPmRpc3RhbmNlID09IDApCi0JCQlyZXR1cm4gSW52YWxpZEJ1ZmZl cjsKKwkJeworCQkJaWYgKCFzdHJlYW0tPnlpZWxkZWQpCisJCQkJcmV0dXJuIEludmFsaWRCdWZm ZXI7CisKKwkJCS8qIFRoZSBjYWxsYmFjayB5aWVsZGVkLiAgUmVzdW1lLiAqLworCQkJc3RyZWFt LT55aWVsZGVkID0gZmFsc2U7CisJCQlyZWFkX3N0cmVhbV9yZXN1bWUoc3RyZWFtKTsKKwkJCUFz c2VydChzdHJlYW0tPmRpc3RhbmNlICE9IDApOworCQl9CiAKIAkJLyoKIAkJICogVGhlIHVzdWFs IG9yZGVyIG9mIG9wZXJhdGlvbnMgaXMgdGhhdCB3ZSBsb29rIGFoZWFkIGF0IHRoZSBib3R0b20K QEAgLTEwMzQsNiArMTA0NCw0NCBAQCByZWFkX3N0cmVhbV9uZXh0X2Jsb2NrKFJlYWRTdHJlYW0g KnN0cmVhbSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgKnN0cmF0ZWd5KQogCXJldHVybiByZWFkX3N0 cmVhbV9nZXRfYmxvY2soc3RyZWFtLCBOVUxMKTsKIH0KIAorLyoKKyAqIFRlbXBvcmFyaWx5IHN0 b3AgY29uc3VtaW5nIGJsb2NrIG51bWJlcnMgZnJvbSB0aGUgYmxvY2sgbnVtYmVyIGNhbGxiYWNr LiAgSWYKKyAqIGNhbGxlZCBpbnNpZGUgdGhlIGJsb2NrIG51bWJlciBjYWxsYmFjaywgaXRzIHJl dHVybiB2YWx1ZSBzaG91bGQgYmUKKyAqIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjay4KKyAqLwor QmxvY2tOdW1iZXIKK3JlYWRfc3RyZWFtX3BhdXNlKFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlz dHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFuY2U7CisJc3RyZWFtLT5kaXN0 YW5jZSA9IDA7CisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKK30KKworLyoKKyAqIFJlc3Vt ZSBsb29raW5nIGFoZWFkIGFmdGVyIHRoZSBibG9jayBudW1iZXIgY2FsbGJhY2sgcmVwb3J0ZWQg ZW5kLW9mLXN0cmVhbS4KKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBzdHJlYW1zIG9mIHNlbGYtcmVm ZXJlbnRpYWwgYmxvY2tzLCBhZnRlciBhIGJ1ZmZlciBuZWVkZWQKKyAqIHRvIGJlIGNvbnN1bWVk IGFuZCBleGFtaW5lZCB0byBmaW5kIG1vcmUgYmxvY2sgbnVtYmVycy4KKyAqLwordm9pZAorcmVh ZF9zdHJlYW1fcmVzdW1lKFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJlYW0tPmRpc3RhbmNl ID0gc3RyZWFtLT5yZXN1bWVfZGlzdGFuY2U7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBpbnNp ZGUgYSBibG9jayBudW1iZXIgY2FsbGJhY2ssIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBjYWxs ZXIKKyAqIG9mIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKCkgd2l0aG91dCBsb29raW5nIGZ1cnRo ZXIgYWhlYWQuICBJdHMgcmV0dXJuCisgKiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgYnkgdGhl IGNhbGxiYWNrLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHBhdXNpbmcgYW5kCisgKiByZXN1bWlu ZyBhdXRvbWF0aWNhbGx5IGF0IHRoZSBuZXh0IGNhbGwgdG8gcmVhZF9zdHJlYW1fbmV4dF9idWZm ZXIoKS4KKyAqLworQmxvY2tOdW1iZXIKK3JlYWRfc3RyZWFtX3lpZWxkKFJlYWRTdHJlYW0gKnN0 cmVhbSkKK3sKKwlyZWFkX3N0cmVhbV9wYXVzZShzdHJlYW0pOworCXN0cmVhbS0+eWllbGRlZCA9 IHRydWU7CisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKK30KKwogLyoKICAqIFJlc2V0IGEg cmVhZCBzdHJlYW0gYnkgcmVsZWFzaW5nIGFueSBxdWV1ZWQgdXAgYnVmZmVycywgYWxsb3dpbmcg dGhlIHN0cmVhbQogICogdG8gYmUgdXNlZCBhZ2FpbiBmb3IgZGlmZmVyZW50IGJsb2Nrcy4gIFRo aXMgY2FuIGJlIHVzZWQgdG8gY2xlYXIgYW4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9haW8vTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL01ha2VmaWxlCmlu ZGV4IGY1M2NjNjQ2Ny4uNDY1ZWIwOWVlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfYWlvL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vTWFrZWZpbGUK QEAgLTUsNyArNSw4IEBAIFBHRklMRURFU0MgPSAidGVzdF9haW8gLSB0ZXN0IGNvZGUgZm9yIEFJ TyIKIE1PRFVMRV9iaWcgPSB0ZXN0X2FpbwogT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCi0JdGVz dF9haW8ubworCXRlc3RfYWlvLm8gXAorCXRlc3RfcmVhZF9zdHJlYW0ubwogCiBFWFRFTlNJT04g PSB0ZXN0X2FpbwogREFUQSA9IHRlc3RfYWlvLS0xLjAuc3FsCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fp by9tZXNvbi5idWlsZAppbmRleCBmZWZhMjViYzUuLmQxM2ZkYTIxOSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL21lc29uLmJ1aWxkCkBAIC0yLDYgKzIsNyBAQAogCiB0ZXN0X2Fpb19zb3VyY2Vz ID0gZmlsZXMoCiAgICd0ZXN0X2Fpby5jJywKKyAgJ3Rlc3RfcmVhZF9zdHJlYW0uYycsCiApCiAK IGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2Fpby90LzAwMV9haW8ucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3QvMDAx X2Fpby5wbAppbmRleCA1YzYzNGVjM2MuLjVhZjU1OGJmNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Fpby90LzAwMV9haW8ucGwKQEAgLTE0ODksNiArMTQ4OSwzNSBAQCBTRUxFQ1QgcmVhZF9yZWxf YmxvY2tfbGwoJ3RibF9jc19mYWlsJywgMywgbmJsb2Nrcz0+MSwgemVyb19vbl9lcnJvcj0+dHJ1 ZSk7KSwKIAkkcHNxbC0+cXVpdCgpOwogfQogCisjIFJlYWQgc3RyZWFtIHRlc3RzCitzdWIgdGVz dF9yZWFkX3N0cmVhbQoreworCW15ICRpb19tZXRob2QgPSBzaGlmdDsKKwlteSAkbm9kZSA9IHNo aWZ0OworCW15ICgkcmV0LCAkb3V0cHV0KTsKKworCW15ICRwc3FsID0gJG5vZGUtPmJhY2tncm91 bmRfcHNxbCgncG9zdGdyZXMnLCBvbl9lcnJvcl9zdG9wID0+IDApOworCisJJHBzcWwtPnF1ZXJ5 X3NhZmUoCisJCXFxKAorQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0bXBfcmVhZF9zdHJlYW0oZGF0 YSBpbnQgbm90IG51bGwpOworSU5TRVJUIElOVE8gdG1wX3JlYWRfc3RyZWFtIFNFTEVDVCBnZW5l cmF0ZV9zZXJpZXMoMSwgMTAwMDApOworU0VMRUNUIHRlc3RfcmVhZF9zdHJlYW1fcmVzdW1lKCd0 bXBfcmVhZF9zdHJlYW0nLCAwKTsKK0RST1AgVEFCTEUgdG1wX3JlYWRfc3RyZWFtOworKSk7CisK KwkkcHNxbC0+cXVlcnlfc2FmZSgKKwkJcXEoCitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRtcF9y ZWFkX3N0cmVhbShkYXRhIGludCBub3QgbnVsbCk7CitJTlNFUlQgSU5UTyB0bXBfcmVhZF9zdHJl YW0gU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCk7CitTRUxFQ1QgdGVzdF9yZWFkX3N0 cmVhbV95aWVsZCgndG1wX3JlYWRfc3RyZWFtJywgMCk7CitEUk9QIFRBQkxFIHRtcF9yZWFkX3N0 cmVhbTsKKykpOworCisJJHBzcWwtPnF1aXQoKTsKK30KKworCiAKICMgUnVuIGFsbCB0ZXN0cyB0 aGF0IGFyZSBzdXBwb3J0ZWQgZm9yIGFsbCBpb19tZXRob2RzCiBzdWIgdGVzdF9nZW5lcmljCkBA IC0xNTI1LDYgKzE1NTQsNyBAQCBDSEVDS1BPSU5UOwogCXRlc3RfY2hlY2tzdW0oJGlvX21ldGhv ZCwgJG5vZGUpOwogCXRlc3RfaWdub3JlX2NoZWNrc3VtKCRpb19tZXRob2QsICRub2RlKTsKIAl0 ZXN0X2NoZWNrc3VtX2NyZWF0ZWRiKCRpb19tZXRob2QsICRub2RlKTsKKwl0ZXN0X3JlYWRfc3Ry ZWFtKCRpb19tZXRob2QsICRub2RlKTsKIAogICBTS0lQOgogCXsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCmluZGV4IGU0OTU0ODFjNC4uZTM3ODEwYjcyIDEw MDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwKQEAgLTEwNiwz ICsxMDYsMTYgQEAgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIENSRUFURSBGVU5D VElPTiBpbmpfaW9fcmVvcGVuX2RldGFjaCgpCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBTVFJJ Q1QKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKKworCisvKgorICogUmVhZCBz dHJlYW0gcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfcmVhZF9z dHJlYW1fcmVzdW1lKHJlbCByZWdjbGFzcywgYmxvY2tubyBpbnQ0KQorUkVUVVJOUyBwZ19jYXRh bG9nLnZvaWQgU1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitDUkVB VEUgRlVOQ1RJT04gdGVzdF9yZWFkX3N0cmVhbV95aWVsZChyZWwgcmVnY2xhc3MsIGJsb2Nrbm8g aW50NCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAorQVMgJ01PRFVMRV9QQVRITkFN RScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVz dF9yZWFkX3N0cmVhbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X3JlYWRfc3Ry ZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5kMWQ0MzZhOTAKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfcmVhZF9zdHJl YW0uYwpAQCAtMCwwICsxLDE4MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF9y ZWFkX3N0cmVhbS5jCisgKgkJSGVscGVycyB0byB3cml0ZSB0ZXN0cyBmb3IgcmVhZF9zdHJlYW0u YworICoKKyAqIENvcHlyaWdodCAoYykgMjAyMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9haW8vdGVzdF9yZWFkX3N0cmVhbS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24u aCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNs dWRlICJzdG9yYWdlL3JlYWRfc3RyZWFtLmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisJQmxvY2tO dW1iZXIgYmxrbm87CisJaW50CQkJY291bnQ7Cit9IHRlc3RfcmVhZF9zdHJlYW1fcmVzdW1lX3N0 YXRlOworCitzdGF0aWMgQmxvY2tOdW1iZXIKK3Rlc3RfcmVhZF9zdHJlYW1fcmVzdW1lX2NiKFJl YWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCSAgIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwK KwkJCQkJCSAgIHZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwl0ZXN0X3JlYWRfc3RyZWFtX3Jl c3VtZV9zdGF0ZSAqc3RhdGUgPSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisKKwkvKiBQZXJpb2Rp YyBlbmQtb2Ytc3RyZWFtLiAqLworCWlmICgrK3N0YXRlLT5jb3VudCAlIDMgPT0gMCkKKwkJcmV0 dXJuIHJlYWRfc3RyZWFtX3BhdXNlKHN0cmVhbSk7CisKKwlyZXR1cm4gc3RhdGUtPmJsa25vOwor fQorCisvKgorICogVGVzdCByZWFkX3N0cmVhbV9yZXN1bWUoKSwgYWxsb3dpbmcgYSBzdHJlYW0g dG8gZW5kIHRlbXBvcmFyaWx5IGFuZCB0aGVuCisgKiBjb250aW51ZSB3aGVyZSBpdCBsZWZ0IG9m Zi4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZSk7CitE YXR1bQordGVzdF9yZWFkX3N0cmVhbV9yZXN1bWUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlPaWQJ CQlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJQmxvY2tOdW1iZXIgYmxrbm8gPSBQR19HRVRB UkdfVUlOVDMyKDEpOworCVJlbGF0aW9uCXJlbDsKKwlCdWZmZXIJCWJ1ZjsKKwlSZWFkU3RyZWFt ICpzdHJlYW07CisJdGVzdF9yZWFkX3N0cmVhbV9yZXN1bWVfc3RhdGUgc3RhdGUgPSB7LmJsa25v ID0gYmxrbm99OworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9ERUZB VUxULAorCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJcmVsLAorCQkJCQkJCQkJCU1BSU5fRk9S S05VTSwKKwkJCQkJCQkJCQl0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZV9jYiwKKwkJCQkJCQkJCQkm c3RhdGUsCisJCQkJCQkJCQkJMCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkKKwl7 CisJCS8qIFNhbWUgYmxvY2sgdHdpY2UuICovCisJCWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVm ZmVyKHN0cmVhbSwgTlVMTCk7CisJCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWYpID09 IGJsa25vKTsKKwkJUmVsZWFzZUJ1ZmZlcihidWYpOworCQlidWYgPSByZWFkX3N0cmVhbV9uZXh0 X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCQlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVm KSA9PSBibGtubyk7CisJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKworCQkvKiBFbmQtb2Ytc3RyZWFt LiAqLworCQlidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCQlB c3NlcnQoYnVmID09IEludmFsaWRCdWZmZXIpOworCQlidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1 ZmZlcihzdHJlYW0sIE5VTEwpOworCQlBc3NlcnQoYnVmID09IEludmFsaWRCdWZmZXIpOworCisJ CS8qIFJlc3VtZS4gKi8KKwkJcmVhZF9zdHJlYW1fcmVzdW1lKHN0cmVhbSk7CisJfQorCisJcmVh ZF9zdHJlYW1fZW5kKHN0cmVhbSk7CisJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCisJ UEdfUkVUVVJOX1ZPSUQoKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlCbG9ja051bWJlciBi bGtubzsKKwlpbnQJCQljb3VudDsKKwlpbnQJCQl5aWVsZHM7CisJaW50CQkJYmxvY2tzOworfQkJ CXRlc3RfcmVhZF9zdHJlYW1feWllbGRfc3RhdGU7CisKK3N0YXRpYyBCbG9ja051bWJlcgordGVz dF9yZWFkX3N0cmVhbV95aWVsZF9jYihSZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkgIHZvaWQg KmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCSAgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQor eworCXRlc3RfcmVhZF9zdHJlYW1feWllbGRfc3RhdGUgKnN0YXRlID0gY2FsbGJhY2tfcHJpdmF0 ZV9kYXRhOworCisJLyogWWllbGQgZXZlcnkgdGhpcmQgY2FsbC4gKi8KKwlpZiAoKytzdGF0ZS0+ Y291bnQgJSAzID09IDIpCisJeworCQlzdGF0ZS0+eWllbGRzKys7CisJCXJldHVybiByZWFkX3N0 cmVhbV95aWVsZChzdHJlYW0pOworCX0KKworCXN0YXRlLT5ibG9ja3MrKzsKKwlyZXR1cm4gc3Rh dGUtPmJsa25vOworfQorCisvKgorICogVGVzdCByZWFkX3N0cmVhbV95aWVsZCgpLCBhbGxvd2lu ZyBjb250cm9sIHRvIGJlIHlpZWxkZWQgdGVtcG9yYXJpbHkgZnJvbQorICogdGhlIGxvb2thaGVh ZCBsb29wIGFuZCByZXR1cm5lZCB0byB0aGUgY2FsbGVyIG9mIHJlYWRfc3RyZWFtX25leHRfYnVm ZmVyKCkuCisgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9yZWFkX3N0cmVhbV95aWVsZCk7 CitEYXR1bQordGVzdF9yZWFkX3N0cmVhbV95aWVsZChQR19GVU5DVElPTl9BUkdTKQoreworCU9p ZAkJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwlCbG9ja051bWJlciBibGtubyA9IFBHX0dF VEFSR19VSU5UMzIoMSk7CisJUmVsYXRpb24JcmVsOworCUJ1ZmZlcgkJYnVmOworCVJlYWRTdHJl YW0gKnN0cmVhbTsKKwl0ZXN0X3JlYWRfc3RyZWFtX3lpZWxkX3N0YXRlIHN0YXRlID0gey5ibGtu byA9IGJsa25vfTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsaWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJc3RyZWFtID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1fREVG QVVMVCwKKwkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCXJlbCwKKwkJCQkJCQkJCQlNQUlOX0ZP UktOVU0sCisJCQkJCQkJCQkJdGVzdF9yZWFkX3N0cmVhbV95aWVsZF9jYiwKKwkJCQkJCQkJCQkm c3RhdGUsCisJCQkJCQkJCQkJMCk7CisKKwlidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihz dHJlYW0sIE5VTEwpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWYpID09IGJsa25v KTsKKwlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJQXNzZXJ0KHN0YXRlLmJsb2NrcyA9PSAxKTsKKwlB c3NlcnQoc3RhdGUueWllbGRzID09IDEpOworCisJYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZm ZXIoc3RyZWFtLCBOVUxMKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKSA9PSBi bGtubyk7CisJUmVsZWFzZUJ1ZmZlcihidWYpOworCUFzc2VydChzdGF0ZS5ibG9ja3MgPT0gMyk7 CisJQXNzZXJ0KHN0YXRlLnlpZWxkcyA9PSAxKTsKKworCWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRf YnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zikg PT0gYmxrbm8pOworCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwlBc3NlcnQoc3RhdGUuYmxvY2tzID09 IDMpOworCUFzc2VydChzdGF0ZS55aWVsZHMgPT0gMik7CisKKwlidWYgPSByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihi dWYpID09IGJsa25vKTsKKwlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJQXNzZXJ0KHN0YXRlLmJsb2Nr cyA9PSA1KTsKKwlBc3NlcnQoc3RhdGUueWllbGRzID09IDIpOworCisJYnVmID0gcmVhZF9zdHJl YW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1i ZXIoYnVmKSA9PSBibGtubyk7CisJUmVsZWFzZUJ1ZmZlcihidWYpOworCUFzc2VydChzdGF0ZS5i bG9ja3MgPT0gNSk7CisJQXNzZXJ0KHN0YXRlLnlpZWxkcyA9PSAzKTsKKworCWJ1ZiA9IHJlYWRf c3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJQXNzZXJ0KEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGJ1ZikgPT0gYmxrbm8pOworCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwlBc3NlcnQoc3Rh dGUuYmxvY2tzID09IDcpOworCUFzc2VydChzdGF0ZS55aWVsZHMgPT0gMyk7CisKKwlyZWFkX3N0 cmVhbV9lbmQoc3RyZWFtKTsKKwlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisKKwlQR19S RVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjM2YyYTlmYzgu LmZhODRhYmZjNSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK KysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQxOTUsNiArNDE5NSw3 IEBAIHRlU2VjdGlvbgogdGVtcF90YWJsZXNwYWNlc19leHRyYQogdGVzdDEyOAogdGVzdF9yZV9m bGFncwordGVzdF9yZWFkX3N0cmVhbV9yZXN1bWVfc3RhdGUKIHRlc3RfcmVnZXhfY3R4CiB0ZXN0 X3NobV9tcV9oZWFkZXIKIHRlc3Rfc3BlYwotLSAKMi41MS4wCgo= --0000000000002fd78b0648b24456 Content-Type: application/x-patch; name="v8-0002-Add-fake-LSN-support-to-nbtree.patch" Content-Disposition: attachment; filename="v8-0002-Add-fake-LSN-support-to-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkkde7p17 RnJvbSA4N2Q1MDQyNGY1NmQzMzE2MzEyMGU2YTY1NGIzMTIwNDFlMmIzMjFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTQ6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHY4IDIvOF0gQWRk IGZha2UgTFNOIHN1cHBvcnQgdG8gbmJ0cmVlLgoKVGhpcyBpcyBwcmVwYXJhdGlvbiBmb3IgYW4g dXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlIGFu ZCBzd2l0Y2ggbmJ0cmVlIG92ZXIgdG8gaXQgKGZyb20gYW1nZXR0dXBsZSkuICBXZSBuZWVkIGZh a2UKTFNOcyB0byBtYWtlIGl0IHNhZmUgdG8gYXBwbHkgdGhlIGRyb3BQaW4gYmVoYXZpb3IgdG8g bmJ0cmVlIHNjYW5zIG9mCnVubG9nZ2VkIGluZGV4ZXMgKGFjdHVhbGx5LCB0byBhcHBseSB0aGUg YmVoYXZpb3Igd2l0aCBhbnkgc2NhbiBvZiBhbgp1bmxvZ2dlZCBpbmRleCB0aGF0IHVzZXMgdGhl IG5ldyBhbWdldGJhdGNoIGludGVyZmFjZSwgbm8gbWF0dGVyIHRoZQppbmRleCBBTSkuCgpDdXJy ZW50bHksIHVubG9nZ2VkIG5idHJlZSBpbmRleGVzIG5lZWQgdG8gaG9sZCBvbiB0byBhIGxlYWYg cGFnZSBidWZmZXIKcGluIHdoZW4gc3RvcHBlZCBvbiB0aGF0IGxlYWYgcGFnZSwgcHVyZWx5IHNv IHRoYXQgdGhlIF9idF9raWxsaXRlbXMKcHJvY2VzcyBoYXMgYSB3YXkgdGhhdCBpdCBjYW4gYmUg c3VyZSB0aGF0IHRoZXJlIHdhc24ndCBhbnkgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJlY3ljbGlu ZyBieSBWQUNVVU0uICBUaGUgX2J0X2tpbGxpdGVtcycgZHJvcFBpbiBzdHJhdGVneQpjb3VsZG4n dCBiZSB1c2VkIGJlZm9yZSBub3csIHNpbmNlIHRoYXQgd29ya3MgYnkgY2hlY2tpbmcgaWYgdGhl IHBhZ2UKTFNOIGhhcyBjaGFuZ2VkIGluIHRoZSBwZXJpb2QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHJl YWQgdGhlIHBhZ2UncyBpdGVtcywKYnV0IGJlZm9yZSBfYnRfa2lsbGl0ZW1zIHdhcyBjYWxsZWQu ICBJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIHRoZSBzYW1lCkxTTiB0cmljayB3aXRoIHVubG9n Z2VkIGluZGV4ZXMgKGJ1dCB3ZSBkb24ndCBkbyB0aGF0IGp1c3QgeWV0KS4KClRoZSB1cGNvbWlu ZyBhbWdldGJhdGNoIGNvbW1pdCB3aWxsIG1ha2UgX2J0X2tpbGxpdGVtcyBjaGVjayBpZiB0aGUg cGFnZQpMU04gaGFzIGNoYW5nZWQgZm9yIGxvZ2dlZCBhbmQgdW5sb2dnZWQgaW5kZXhlcyBhbGlr ZS4gIEluIGZhY3QsIGl0IHdpbGwKcmVtb3ZlIHRoZSBuZWVkIGZvciBpbmRleCBzY2FucyAoaW5j bHVkaW5nIGluZGV4LW9ubHkgc2NhbnMpIHRvIGhvbGQgb24KdG8gYSBsZWFmIHBhZ2UgYnVmZmVy IHBpbiAoYXNzdW1pbmcgYW4gaW5kZXggQU0gdGhhdCB1c2VzIHRoZSBuZXcKYW1nZXRiYXRjaCBp bnRlcmZhY2UsIGFuZCBiYXJyaW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3Qp LgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+Ci0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRkZWR1cC5jICB8ICA4ICsrLQogc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRpbnNlcnQuYyB8IDQ4ICsrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cGFnZS5jICAgfCA4MiArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIDMg ZmlsZXMgY2hhbmdlZCwgNzggaW5zZXJ0aW9ucygrKSwgNjAgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRkZWR1cC5jCmluZGV4IDk1YmUwYjE3OS4uYWY3YWZmZGY0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jCkBAIC02OSw2ICs2OSw3IEBAIF9idF9kZWR1 cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXpl IG5ld2l0ZW1zeiwKIAlTaXplCQlwYWdlc2F2aW5nIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9 IDA7CiAJYm9vbAkJc2luZ2xldmFsc3RyYXQgPSBmYWxzZTsKIAlpbnQJCQlua2V5YXR0cyA9IElu ZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsKKwlYTG9nUmVjUHRyCXJl Y3B0cjsKIAogCS8qIFBhc3NlZC1pbiBuZXdpdGVtc3ogaXMgTUFYQUxJR05FRCBidXQgZG9lcyBu b3QgaW5jbHVkZSBsaW5lIHBvaW50ZXIgKi8KIAluZXdpdGVtc3ogKz0gc2l6ZW9mKEl0ZW1JZERh dGEpOwpAQCAtMjQ1LDcgKzI0Niw2IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVm ZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwKIAkvKiBYTE9HIHN0 dWZmICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVj cHRyOwogCQl4bF9idHJlZV9kZWR1cCB4bHJlY19kZWR1cDsKIAogCQl4bHJlY19kZWR1cC5uaW50 ZXJ2YWxzID0gc3RhdGUtPm5pbnRlcnZhbHM7CkBAIC0yNjMsOSArMjYzLDExIEBAIF9idF9kZWR1 cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXpl IG5ld2l0ZW1zeiwKIAkJCQkJCQlzdGF0ZS0+bmludGVydmFscyAqIHNpemVvZihCVERlZHVwSW50 ZXJ2YWwpKTsKIAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVF X0RFRFVQKTsKLQotCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVj cHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsK IAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0 LmMKaW5kZXggNjNlZGEwOGY3Li4wNmFiZGY1MjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRpbnNlcnQuYwpAQCAtMTEyNSw2ICsxMTI1LDcgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24g cmVsLAogCUluZGV4VHVwbGUJb3Bvc3RpbmcgPSBOVUxMOwogCUluZGV4VHVwbGUJb3JpZ2l0dXAg PSBOVUxMOwogCUluZGV4VHVwbGUJbnBvc3RpbmcgPSBOVUxMOworCVhMb2dSZWNQdHIJcmVjcHRy OwogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFx dWUocGFnZSk7CkBAIC0xMzIyLDcgKzEzMjMsNiBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiBy ZWwsCiAJCQl4bF9idHJlZV9pbnNlcnQgeGxyZWM7CiAJCQl4bF9idHJlZV9tZXRhZGF0YSB4bG1l dGE7CiAJCQl1aW50OAkJeGxpbmZvOwotCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCQl1aW50MTYJ CXVwb3N0aW5nb2ZmOwogCiAJCQl4bHJlYy5vZmZudW0gPSBuZXdpdGVtb2ZmOwpAQCAtMTM5NSwx NCArMTM5NSwxNiBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJCQl9CiAKIAkJCXJl Y3B0ciA9IFhMb2dJbnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJCWlmIChCdWZmZXJJ c1ZhbGlkKG1ldGFidWYpKQotCQkJCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwotCQkJaWYg KCFpc2xlYWYpCi0JCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGNidWYpLCByZWNwdHIpOwot Ci0JCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0g WExvZ0dldEZha2VMU04ocmVsKTsKKworCQlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJ CVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOworCQlpZiAoIWlzbGVhZikKKwkJCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShjYnVmKSwgcmVjcHRyKTsKKworCQlQYWdlU2V0TFNOKHBhZ2UsIHJl Y3B0cik7CiAKIAkJRU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC0xNTA0LDYgKzE1MDYsNyBAQCBf YnRfc3BsaXQoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1 cF9rZXksIEJ1ZmZlciBidWYsCiAJYm9vbAkJbmV3aXRlbW9ubGVmdCwKIAkJCQlpc2xlYWYsCiAJ CQkJaXNyaWdodG1vc3Q7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKgogCSAqIG9yaWdwYWdl IGlzIHRoZSBvcmlnaW5hbCBwYWdlIHRvIGJlIHNwbGl0LiAgbGVmdHBhZ2UgaXMgYSB0ZW1wb3Jh cnkKQEAgLTE5ODMsNyArMTk4Niw2IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9u IGhlYXByZWwsIEJUU2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwKIAl7CiAJCXhsX2J0 cmVlX3NwbGl0IHhscmVjOwogCQl1aW50OAkJeGxpbmZvOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsK IAogCQl4bHJlYy5sZXZlbCA9IHJvcGFxdWUtPmJ0cG9fbGV2ZWw7CiAJCS8qIFNlZSBjb21tZW50 cyBiZWxvdyBvbiBuZXdpdGVtLCBvcmlnbmV3aXRlbSwgYW5kIHBvc3RpbmcgbGlzdHMgKi8KQEAg LTIwNjcsMTQgKzIwNjksMTYgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVh cHJlbCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLAogCiAJCXhsaW5mbyA9IG5l d2l0ZW1vbmxlZnQgPyBYTE9HX0JUUkVFX1NQTElUX0wgOiBYTE9HX0JUUkVFX1NQTElUX1I7CiAJ CXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJUGFnZVNldExT TihvcmlncGFnZSwgcmVjcHRyKTsKLQkJUGFnZVNldExTTihyaWdodHBhZ2UsIHJlY3B0cik7Ci0J CWlmICghaXNyaWdodG1vc3QpCi0JCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOwotCQlpZiAo IWlzbGVhZikKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShjYnVmKSwgcmVjcHRyKTsKIAl9 CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihv cmlncGFnZSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKHJpZ2h0cGFnZSwgcmVjcHRyKTsKKwlpZiAo IWlzcmlnaHRtb3N0KQorCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOworCWlmICghaXNsZWFm KQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoY2J1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJ VF9TRUNUSU9OKCk7CiAKQEAgLTI0NzYsNiArMjQ4MCw3IEBAIF9idF9uZXdsZXZlbChSZWxhdGlv biByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIgcmJ1ZikKIAlCdWZm ZXIJCW1ldGFidWY7CiAJUGFnZQkJbWV0YXBnOwogCUJUTWV0YVBhZ2VEYXRhICptZXRhZDsKKwlY TG9nUmVjUHRyCXJlY3B0cjsKIAogCWxia25vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIobGJ1Zik7 CiAJcmJrbm8gPSBCdWZmZXJHZXRCbG9ja051bWJlcihyYnVmKTsKQEAgLTI1NzEsNyArMjU3Niw2 IEBAIF9idF9uZXdsZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBs YnVmLCBCdWZmZXIgcmJ1ZikKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxf YnRyZWVfbmV3cm9vdCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2J0cmVlX21l dGFkYXRhIG1kOwogCiAJCXhscmVjLnJvb3RibGsgPSByb290YmxrbnVtOwpAQCAtMjYwNSwxMSAr MjYwOSwxMyBAQCBfYnRfbmV3bGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBC dWZmZXIgbGJ1ZiwgQnVmZmVyIHJidWYpCiAJCQkJCQkJKChQYWdlSGVhZGVyKSByb290cGFnZSkt PnBkX3VwcGVyKTsKIAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JU UkVFX05FV1JPT1QpOwotCi0JCVBhZ2VTZXRMU04obHBhZ2UsIHJlY3B0cik7Ci0JCVBhZ2VTZXRM U04ocm9vdHBhZ2UsIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwogCX0K KwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKGxw YWdlLCByZWNwdHIpOworCVBhZ2VTZXRMU04ocm9vdHBhZ2UsIHJlY3B0cik7CisJUGFnZVNldExT TihtZXRhcGcsIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMKaW5kZXggNDEyNWMxODVlLi43MGI1MjRkZmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0yMzUsNiArMjM1LDcgQEAgX2J0X3NldF9jbGVhbnVw X2luZm8oUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBudW1fZGVscGFnZXMpCiAJQnVmZmVyCQlt ZXRhYnVmOwogCVBhZ2UJCW1ldGFwZzsKIAlCVE1ldGFQYWdlRGF0YSAqbWV0YWQ7CisJWExvZ1Jl Y1B0cglyZWNwdHI7CiAKIAkvKgogCSAqIE9uLWRpc2sgY29tcGF0aWJpbGl0eSBub3RlOiBUaGUg YnRtX2xhc3RfY2xlYW51cF9udW1fZGVscGFnZXMgbWV0YXBhZ2UKQEAgLTI4Niw3ICsyODcsNiBA QCBfYnRfc2V0X2NsZWFudXBfaW5mbyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG51bV9kZWxw YWdlcykKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbWV0YWRh dGEgbWQ7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCVhMb2dCZWdpbkluc2VydCgpOwogCQlY TG9nUmVnaXN0ZXJCdWZmZXIoMCwgbWV0YWJ1ZiwgUkVHQlVGX1dJTExfSU5JVCB8IFJFR0JVRl9T VEFOREFSRCk7CkBAIC0zMDMsOSArMzAzLDExIEBAIF9idF9zZXRfY2xlYW51cF9pbmZvKFJlbGF0 aW9uIHJlbCwgQmxvY2tOdW1iZXIgbnVtX2RlbHBhZ2VzKQogCQlYTG9nUmVnaXN0ZXJCdWZEYXRh KDAsICZtZCwgc2l6ZW9mKHhsX2J0cmVlX21ldGFkYXRhKSk7CiAKIAkJcmVjcHRyID0gWExvZ0lu c2VydChSTV9CVFJFRV9JRCwgWExPR19CVFJFRV9NRVRBX0NMRUFOVVApOwotCi0JCVBhZ2VTZXRM U04obWV0YXBnLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNO KHJlbCk7CisKKwlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJ T04oKTsKIApAQCAtMzUxLDYgKzM1Myw3IEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgUmVs YXRpb24gaGVhcHJlbCwgaW50IGFjY2VzcykKIAlCbG9ja051bWJlciByb290Ymxrbm87CiAJdWlu dDMyCQlyb290bGV2ZWw7CiAJQlRNZXRhUGFnZURhdGEgKm1ldGFkOworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJQXNzZXJ0KGFjY2VzcyA9PSBCVF9SRUFEIHx8IGhlYXByZWwgIT0gTlVMTCk7CiAK QEAgLTQ3Myw3ICs0NzYsNiBAQCBfYnRfZ2V0cm9vdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhl YXByZWwsIGludCBhY2Nlc3MpCiAJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJCXsKIAkJ CXhsX2J0cmVlX25ld3Jvb3QgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAkJCXhsX2J0 cmVlX21ldGFkYXRhIG1kOwogCiAJCQlYTG9nQmVnaW5JbnNlcnQoKTsKQEAgLTQ5NywxMCArNDk5 LDEyIEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgaW50IGFj Y2VzcykKIAkJCVhMb2dSZWdpc3RlckRhdGEoJnhscmVjLCBTaXplT2ZCdHJlZU5ld3Jvb3QpOwog CiAJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX05FV1JPT1Qp OwotCi0JCQlQYWdlU2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOwotCQkJUGFnZVNldExTTihtZXRh cGcsIHJlY3B0cik7CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVs KTsKKworCQlQYWdlU2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKG1ldGFw ZywgcmVjcHRyKTsKIAogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTExNjIsNiArMTE2Niw3 IEBAIF9idF9kZWxpdGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCWNoYXIJ ICAgKnVwZGF0ZWRidWYgPSBOVUxMOwogCVNpemUJCXVwZGF0ZWRidWZsZW4gPSAwOwogCU9mZnNl dE51bWJlciB1cGRhdGVkb2Zmc2V0c1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCVhMb2dSZWNQ dHIJcmVjcHRyOwogCiAJLyogU2hvdWxkbid0IGJlIGNhbGxlZCB1bmxlc3MgdGhlcmUncyBzb21l dGhpbmcgdG8gZG8gKi8KIAlBc3NlcnQobmRlbGV0YWJsZSA+IDAgfHwgbnVwZGF0YWJsZSA+IDAp OwpAQCAtMTIyNiw3ICsxMjMxLDYgQEAgX2J0X2RlbGl0ZW1zX3ZhY3V1bShSZWxhdGlvbiByZWws IEJ1ZmZlciBidWYsCiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChuZWVkc3dhbCkKIAl7Ci0JCVhM b2dSZWNQdHIJcmVjcHRyOwogCQl4bF9idHJlZV92YWN1dW0geGxyZWNfdmFjdXVtOwogCiAJCXhs cmVjX3ZhY3V1bS5uZGVsZXRlZCA9IG5kZWxldGFibGU7CkBAIC0xMjQ4LDkgKzEyNTIsMTEgQEAg X2J0X2RlbGl0ZW1zX3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJCX0KIAogCQly ZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX1ZBQ1VVTSk7Ci0KLQkJ UGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRG YWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9T RUNUSU9OKCk7CiAKQEAgLTEyOTIsNiArMTI5OCw3IEBAIF9idF9kZWxpdGVtc19kZWxldGUoUmVs YXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCWNoYXIJICAgKnVwZGF0ZWRidWYgPSBOVUxMOwogCVNp emUJCXVwZGF0ZWRidWZsZW4gPSAwOwogCU9mZnNldE51bWJlciB1cGRhdGVkb2Zmc2V0c1tNYXhJ bmRleFR1cGxlc1BlclBhZ2VdOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2hvdWxkbid0 IGJlIGNhbGxlZCB1bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KIAlBc3NlcnQobmRl bGV0YWJsZSA+IDAgfHwgbnVwZGF0YWJsZSA+IDApOwpAQCAtMTM0Miw3ICsxMzQ5LDYgQEAgX2J0 X2RlbGl0ZW1zX2RlbGV0ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJLyogWExPRyBzdHVm ZiAqLwogCWlmIChuZWVkc3dhbCkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9idHJl ZV9kZWxldGUgeGxyZWNfZGVsZXRlOwogCiAJCXhscmVjX2RlbGV0ZS5zbmFwc2hvdENvbmZsaWN0 SG9yaXpvbiA9IHNuYXBzaG90Q29uZmxpY3RIb3Jpem9uOwpAQCAtMTM2Niw5ICsxMzcyLDExIEBA IF9idF9kZWxpdGVtc19kZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCQl9CiAKIAkJ cmVjcHRyID0gWExvZ0luc2VydChSTV9CVFJFRV9JRCwgWExPR19CVFJFRV9ERUxFVEUpOwotCi0J CVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0 RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJRU5EX0NSSVRf U0VDVElPTigpOwogCkBAIC0yMTAzLDYgKzIxMTEsNyBAQCBfYnRfbWFya19wYWdlX2hhbGZkZWFk KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVyIGxlYWZidWYsCiAJT2Zmc2V0 TnVtYmVyIG5leHRvZmZzZXQ7CiAJSW5kZXhUdXBsZQlpdHVwOwogCUluZGV4VHVwbGVEYXRhIHRy dW5jdHVwbGU7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShs ZWFmYnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBAIC0yMjUzLDcgKzIy NjIsNiBAQCBfYnRfbWFya19wYWdlX2hhbGZkZWFkKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVh cHJlbCwgQnVmZmVyIGxlYWZidWYsCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7CiAJ CXhsX2J0cmVlX21hcmtfcGFnZV9oYWxmZGVhZCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7 CiAKIAkJeGxyZWMucG9mZnNldCA9IHBvZmZzZXQ7CiAJCXhscmVjLmxlYWZibGsgPSBsZWFmYmxr bm87CkBAIC0yMjc0LDEyICsyMjgyLDE0IEBAIF9idF9tYXJrX3BhZ2VfaGFsZmRlYWQoUmVsYXRp b24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCdWZmZXIgbGVhZmJ1ZiwKIAkJWExvZ1JlZ2lzdGVy RGF0YSgmeGxyZWMsIFNpemVPZkJ0cmVlTWFya1BhZ2VIYWxmRGVhZCk7CiAKIAkJcmVjcHRyID0g WExvZ0luc2VydChSTV9CVFJFRV9JRCwgWExPR19CVFJFRV9NQVJLX1BBR0VfSEFMRkRFQUQpOwot Ci0JCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOwotCQlQYWdlU2V0TFNOKHBh Z2UsIHJlY3B0cik7Ci0JCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYpOwotCQlQYWdlU2V0 TFNOKHBhZ2UsIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04o cmVsKTsKKworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOworCVBhZ2VTZXRM U04ocGFnZSwgcmVjcHRyKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKKwlQYWdl U2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTIzMzcs NiArMjM0Nyw3IEBAIF9idF91bmxpbmtfaGFsZmRlYWRfcGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZl ciBsZWFmYnVmLCBCbG9ja051bWJlciBzY2FuYmxrbm8sCiAJdWludDMyCQl0YXJnZXRsZXZlbDsK IAlJbmRleFR1cGxlCWxlYWZoaWtleTsKIAlCbG9ja051bWJlciBsZWFmdG9wcGFyZW50OworCVhM b2dSZWNQdHIJcmVjcHRyOwogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobGVhZmJ1Zik7CiAJb3Bh cXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwpAQCAtMjY3Niw3ICsyNjg3LDYgQEAgX2J0X3Vu bGlua19oYWxmZGVhZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVt YmVyIHNjYW5ibGtubywKIAkJeGxfYnRyZWVfdW5saW5rX3BhZ2UgeGxyZWM7CiAJCXhsX2J0cmVl X21ldGFkYXRhIHhsbWV0YTsKIAkJdWludDgJCXhsaW5mbzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7 CiAKIAkJWExvZ0JlZ2luSW5zZXJ0KCk7CiAKQEAgLTI3MjAsMjUgKzI3MzAsMjUgQEAgX2J0X3Vu bGlua19oYWxmZGVhZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVt YmVyIHNjYW5ibGtubywKIAkJCXhsaW5mbyA9IFhMT0dfQlRSRUVfVU5MSU5LX1BBR0U7CiAKIAkJ cmVjcHRyID0gWExvZ0luc2VydChSTV9CVFJFRV9JRCwgeGxpbmZvKTsKKwl9CisJZWxzZQorCQly ZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOwogCi0JCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFi dWYpKQotCQl7Ci0JCQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKLQkJfQotCQlwYWdlID0g QnVmZmVyR2V0UGFnZShyYnVmKTsKKwlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJUGFn ZVNldExTTihtZXRhcGcsIHJlY3B0cik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UocmJ1Zik7CisJ UGFnZVNldExTTihwYWdlLCByZWNwdHIpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisJ UGFnZVNldExTTihwYWdlLCByZWNwdHIpOworCWlmIChCdWZmZXJJc1ZhbGlkKGxidWYpKQorCXsK KwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobGJ1Zik7CiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRy KTsKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwl9CisJaWYgKHRhcmdldCAhPSBsZWFm Ymxrbm8pCisJeworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAkJUGFnZVNldExT TihwYWdlLCByZWNwdHIpOwotCQlpZiAoQnVmZmVySXNWYWxpZChsYnVmKSkKLQkJewotCQkJcGFn ZSA9IEJ1ZmZlckdldFBhZ2UobGJ1Zik7Ci0JCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7Ci0J CX0KLQkJaWYgKHRhcmdldCAhPSBsZWFmYmxrbm8pCi0JCXsKLQkJCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKGxlYWZidWYpOwotCQkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwotCQl9CiAJfQogCiAJ RU5EX0NSSVRfU0VDVElPTigpOwotLSAKMi41MS4wCgo= --0000000000002fd78b0648b24456 Content-Type: application/x-patch; name="v8-0003-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Disposition: attachment; filename="v8-0003-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkkde7ox6 RnJvbSAxM2VhNTgxMzJlMDVhNmZkMjU5N2E2ODZjOTk2MzUzNDM2OGI3ZGNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjggMy84XSBBZGQg YmF0Y2hpbmcgaW50ZXJmYWNlcyB1c2VkIGJ5IGhlYXBhbSBhbmQgbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbi9vcmRlcmVkIGluZGV4IHNjYW5zIHRoYXQgcmV0dXJu IGluZGV4IGVudHJpZXMgaW4KcGVyLWxlYWYtcGFnZSBiYXRjaGVzLCByYXRoZXIgdGhhbiBvbmUg YXQgYSB0aW1lLiAgVGhpcyBlbmFibGVzIGEKdmFyaWV0eSBvZiBvcHRpbWl6YXRpb25zIG9uIHRo ZSB0YWJsZSBBTSBzaWRlLCBtb3N0IG5vdGFibHkgSS9PCnByZWZldGNoaW5nIG9mIGhlYXAgdHVw bGVzIGR1cmluZyBvcmRlcmVkIGluZGV4IHNjYW5zLiAgSXQgd2lsbCBhbHNvCmVuYWJsZSBhbiBv cHRpbWl6YXRpb24gdGhhdCBoYXMgaGVhcGFtIGF2b2lkIHJlcGVhdGVkbHkgbG9ja2luZyBhbmQK dW5sb2NraW5nIHRoZSBzYW1lIGhlYXAgcGFnZSdzIGJ1ZmZlci4KCkluZGV4IGFjY2VzcyBtZXRo b2RzIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBsZW1lbnQKZWl0 aGVyIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSBPUiB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2Uu ICBUaGUKYW1nZXR0dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IGluZGV4IEFN cyB0aGF0IHJlcXVpcmUgZGlyZWN0CmNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXgg c2NhbnMgKGUuZy4sIEdpU1Qgd2l0aCBLTk4gb3JkZXJlZApzY2FucykuCgpUaGlzIGNvbW1pdCBh bHNvIGFkZHMgYSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlIGNhbGxiYWNrLCBjYWxsZWQgYnkgdGhl CmNvcmUgZXhlY3V0b3IgdGhyb3VnaCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBz aGltIGZ1bmN0aW9uLgpUaGlzIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdl IHRoZSBwcm9ncmVzcyBvZiBpbmRleCBzY2FucwpyYXRoZXIgdGhhbiBoYXZpbmcgaW5kaXZpZHVh bCBUSURzIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyLiBUaGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ug aXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2FjaCB0byBvcmRlcmVkCmluZGV4 IHNjYW5zIGFkZGVkIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBjYW4gYXBwbHkga25v d2xlZGdlIG9mCndoaWNoIFRJRHMgd2lsbCBiZSByZXR1cm5lZCB0byBzY2FuIGluIHRoZSBuZWFy IGZ1dHVyZSB0byBwZXJmb3JtIEkvTwpwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIHdpbGwgYmUg YWRkZWQgYnkgYW4gdXBjb21pbmcgY29tbWl0LgoKQmF0Y2hlcyByZXR1cm5lZCBmcm9tIGFtZ2V0 YmF0Y2ggYXJlIGd1YXJhbnRlZWQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGFuCmluZGV4IHBhZ2Ug Y29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgdHVwbGUuICBUaGUgYW1nZXRiYXRjaApp bnRlcmZhY2UgcmV0dXJucyBiYXRjaGVzIHRoYXQgaG9sZCBhIGJ1ZmZlciBwaW4gb24gYW4gaW5k ZXggcGFnZSB0aGF0CmNhbiBiZSB1c2VkIGJ5IHRoZSB0YWJsZSBBTSBhcyBhbiBpbnRlcmxvY2sg YWdhaW5zdCBjb25jdXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgSW4gcHJhY3RpY2Ug aGVhcGFtIG9ubHkgYWN0dWFsbHkgaG9sZHMgb24gdG8gc3VjaAphIHBpbiBmb3IgYW4gaW5zdGFu dCwgZXhjZXB0IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LAp3aGVy ZSB3ZSBjb250aW51ZSB0byBuZWVkIHRvIGhvbGQgdGhlIHBpbiB1bnRpbCBhbGwgb2YgdGhlIGJh dGNoJ3MgVElEcwpoYXZlIGJlZW4gZmV0Y2hlZCBmcm9tIHRoZSBoZWFwLgoKVGhpcyBleHRlbmRz IHRoZSBkcm9wUGluIG1lY2hhbmlzbSBhZGRlZCB0byBuYnRyZWUgYnkgY29tbWl0IDJlZDViODdm LAphbmQgZ2VuZXJhbGl6ZXMgaXQgdG8gd29yayB3aXRoIGFsbCBpbmRleCBBTXMgdGhhdCBzdXBw b3J0IHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2UuICBXZSdsbCBhbHdheXMgZHJvcCBpbmRl eCBwYWdlIHBpbnMgZWFnZXJseSB3aXRoCnVubG9nZ2VkIHJlbGF0aW9ucyBhbmQgZHVyaW5nIGlu ZGV4LW9ubHkgc2NhbnMgbm93LCBwcm92aWRlZCB0aGUgc2Nhbgp1c2VzIGFuIE1WQ0Mgc25hcHNo b3QgKHRoZSBuYnRyZWUgZHJvcFBpbiBmZWF0dXJlIGNvdWxkIGRvIG5laXRoZXIpLgpXZSdyZSBh YmxlIHRvIGRvIHRoaXMgd2l0aCB1bmxvZ2dlZCByZWxhdGlvbnMgYnkgcmVxdWlyaW5nIHRoYXQK YW1nZXRiYXRjaCBpbmRleCBBTXMgdXNlIGZha2UgTFNOcyAob3IsIGFsdGVybmF0aXZlbHksIG5v dCBzdXBwb3J0CkxQX0RFQUQgbWFya2luZyBkZWFkIGluZGV4IHR1cGxlcyBhdCBhbGwpLiAgV2Un cmUgYWJsZSB0byBkbyB0aGlzIGR1cmluZwppbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBoZWFwYW0g bm93IHNhdmluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZQp2aXNpYmlsaXR5IG1hcCB1cCBmcm9udCwg aW4gYSBwZXItaXRlbSBiYXRjaCBjYWNoZS4gIEluZGV4LW9ubHkgc2NhbnMKc3RpbGwgbmVlZCB0 byBob2xkIG9udG8gdGhlIGluZGV4IHBhZ2UgcGluIGZvciBhcyBsb25nIGFzIGl0IHRha2VzIHRv CnBvcHVsYXRlIHRoZSB2aXNpYmlsaXR5IGNhY2hlLCBidXQgdGhhdCBpcyBhIHZlcnkgZmFzdCBw cm9jZXNzLCBhbmQgb25lCnRoYXQgbmV2ZXIgaGFzIHRvIHdhaXQgZm9yIHNvbWUgb3RoZXIgcHJv Y2VzcyB0byB5aWVsZC4gIChUaGUgbmVlZCB0bwpkZWxheSBkcm9wcGluZyBpbmRleCBwYWdlIHBp bnMgdW50aWwgdGhlIGJhdGNoJ3MgVk0gY2FjaGUgY2FuIGJlIGZpbGxlZApsaWtlIHRoaXMgaXMg b25lIHJlYXNvbiB3aHkgdGFibGUgQU1zIG5vdyBmdWxseSBjb250cm9sIHdoZW4gYW5kIHdoZXJl CmluZGV4IHBhZ2UgcGlucyBhc3NvY2lhdGVkIHdpdGggYSBiYXRjaCBhcmUgZHJvcHBlZC4pCgpU aGUgdXBjb21pbmcgY29tbWl0IHRoYXQgYWRkcyBpbmRleCBwcmVmZXRjaGluZyB3aWxsIHVzZSBh IHJlYWQgc3RyZWFtIHRvCnJlYWQgaGVhcCBwYWdlcyBkdXJpbmcgaW5kZXggc2NhbnMuICBSZWFk IHN0cmVhbSBpcyBjYXJlZnVsIHRvIGxpbWl0IGhvdwptYW55IHRoaW5ncyBpdCBwaW5zLCBsZXN0 IHdlIGdldCBlcnJvcnMgYWJvdXQgaGF2aW5nIHRvbyBtYW55IGJ1ZmZlcnMKcGlubmVkLiAgU2lt cGx5IG5ldmVyIGhvbGRpbmcgb24gdG8gaW5kZXggcGFnZSBidWZmZXIgcGlucyBncmVhdGx5CnNp bXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgaW5kZXggcHJlZmV0Y2hpbmc7IHRoZXJl J3Mgbm8gcmlzayBvZgp1bmludGVuZGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWFkIHN0 cmVhbSBhbmQgaW5kZXggQU0uICAoVGhlIG9ubHkKZG93bnNpZGUgaXMgdGhhdCB3ZSBjYW5ub3Qg c3VwcG9ydCBwcmVmZXRjaGluZyBkdXJpbmcgc2NhbnMgdGhhdCB1c2UgYQpub24tTVZDQyBzbmFw c2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4pCgpBdXRob3I6IFRvbWFzIFZvbmRy YSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4K UmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQt Qnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1YjItNTI0OC01MDAwYjg5NGViYWJAZW50 ZXJwcmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZm MzQtNDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRyYS5tZQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL0NBSDItV3prOSUzRHglM0RhMlRiY3FZY1glMkJYWG1ESFFyNSUzRDF2OW00 Wl92OGEtS3dGMVpvejBBJTQwbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv YW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9n ZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAyOCArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRy ZWUuaCAgICAgICAgICAgICAgICAgICB8IDE3NiArKy0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggICAgICAgICAgICAgICAgICB8IDMwMiArKysrKysrKystCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAgNDEgKysKIHNyYy9pbmNsdWRlL2V4 ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDIgLQogc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmggICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv YnJpbi9icmluLmMgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2luZ2V0LmMgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW51dGlsLmMgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0LmMgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2guYyAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgNTM3ICsrKysrKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgMTQ0ICsrLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA1NDQgKysrKysrKysrKysrKysr KysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAgICAgIHwgICA2ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAgICAgICAgfCAgIDMgKwog c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jICAgICAgIHwgMTk1ICsrKy0t LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAgICB8IDMwMSAr KystLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jICAgICAgICAg fCA1MTAgKysrKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGls cy5jICAgICAgICAgIHwgMTQxICstLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAg ICAgICAgICAgICAgICB8ICAyMyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMg ICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgICAg ICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5j ICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9u LmMgICAgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhz Y2FuLmMgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4u YyAgICAgIHwgMTA4ICstLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyAg ICAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyAg ICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAg ICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24u YyAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYyAgICAgICAgICAg ICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyAgICAgICAgICAg ICAgfCAgNjggKy0tCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDUgKy0KIC4uLi9leHBlY3RlZC9pbmRleC1vbmx5LXNjYW4tdmlzaWJpbGl0eS5vdXQg ICB8ICAzMiArKwogc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZSAgICAgICAg IHwgICAxICsKIC4uLi9zcGVjcy9pbmRleC1vbmx5LXNjYW4tdmlzaWJpbGl0eS5zcGVjICAgICB8 ICA4NCArKysKIC4uLi9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgICB8 ICAgNSArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwg IDEwICstCiA0NiBmaWxlcyBjaGFuZ2VkLCAyMTU5IGluc2VydGlvbnMoKyksIDEyMzkgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YmF0Y2guYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9p bmRleC1vbmx5LXNjYW4tdmlzaWJpbGl0eS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9pc29sYXRpb24vc3BlY3MvaW5kZXgtb25seS1zY2FuLXZpc2liaWxpdHkuc3BlYwoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2Ft YXBpLmgKaW5kZXggZWNmYmQwMTdkLi44NWQyNzQ2ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTgs NiArMTk4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2Fu RGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2Nh bkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5l eHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0eXBlZGVmIEluZGV4U2NhbkJhdGNoICgqYW1n ZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAgSW5k ZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24pOworCisvKiByZWxlYXNlIGJhdGNoIG9mIHZhbGlkIHR1cGxlcyAqLwordHlwZWRlZiB2 b2lkICgqYW1mcmVlYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJ CQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAq LwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBz Y2FuLAogCQkJCQkJCQkJICAgVElEQml0bWFwICp0Ym0pOwpAQCAtMjA1LDExICsyMTQsOSBAQCB0 eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4s CiAvKiBlbmQgaW5kZXggc2NhbiAqLwogdHlwZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAotLyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24g Ki8KLXR5cGVkZWYgdm9pZCAoKmFtbWFya3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nh bik7Ci0KLS8qIHJlc3RvcmUgbWFya2VkIHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAo KmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0 ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlv biAqLwordHlwZWRlZiB2b2lkICgqYW1wb3NyZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFj ayBmdW5jdGlvbiBzaWduYXR1cmVzIC0gZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMzA5 LDEwICszMTYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWJlZ2luc2Nh bl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKIAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlh bWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXRi YXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZnJlZWJhdGNo X2Z1bmN0aW9uIGFtZnJlZWJhdGNoOwkvKiBjYW4gYmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1 bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBjYW4gYmUgTlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlv biBhbWVuZHNjYW47Ci0JYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5V TEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICov CisJYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAJ LyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICov CiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2Fu OyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFt LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCA0YzA0MjljYzYuLjg2NjkwYWI1 MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTk0LDYgKzk0LDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhC dWxrRGVsZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAK IC8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0 cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0eXBlZGVmIHN0cnVjdCBTeXNTY2Fu RGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2Nh bkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CkBAIC0xNTQsNiArMTU1LDcgQEAgZXh0 ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAog ZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlv biwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJIGJvb2wgeHNf d2FudF9pdHVwLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIEluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCQkJCSBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpOwpAQCAtMTgwLDE0ICsxODIsMTIgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfcGFy YWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogZXh0ZXJuIHZvaWQg aW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleFNj YW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLAogCQkJCQkJ CQkJCQkgIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJCQkJCQkgIGJvb2wgeHNfd2FudF9pdHVw LAogCQkJCQkJCQkJCQkgIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJ CQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkJCQkJCSAgUGFyYWxs ZWxJbmRleFNjYW5EZXNjIHBzY2FuKTsKIGV4dGVybiBJdGVtUG9pbnRlciBpbmRleF9nZXRuZXh0 X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pOwotZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1 cGxlVGFibGVTbG90ICpzbG90KTsKLWV4dGVybiBib29sIGluZGV4X2dldG5leHRfc2xvdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCSAgIFR1cGxl VGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVS ZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKQEAgLTI1MSw0 ICsyNTEsMjYgQEAgZXh0ZXJuIHZvaWQgc3lzdGFibGVfaW5wbGFjZV91cGRhdGVfYmVnaW4oUmVs YXRpb24gcmVsYXRpb24sCiBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9maW5p c2godm9pZCAqc3RhdGUsIEhlYXBUdXBsZSB0dXBsZSk7CiBleHRlcm4gdm9pZCBzeXN0YWJsZV9p bnBsYWNlX3VwZGF0ZV9jYW5jZWwodm9pZCAqc3RhdGUpOwogCisvKgorICogYW1nZXRiYXRjaCB1 dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4YW0uYyAoaW4gaW5kZXhiYXRjaC5jKQorICovCitleHRl cm4gdm9pZCBpbmRleF9iYXRjaHNjYW5faW5pdChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJu IHZvaWQgaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21w bGV0ZSk7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2Nh bik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fbWFya19wb3MoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pOworCisvKgorICogYW1nZXRiYXRjaCB1dGlsaXRpZXMgY2FsbGVkIGJ5IHRhYmxl IEFNcyAoaW4gaW5kZXhiYXRjaC5jKQorICovCitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfa2ls bF9zY2FucG9zaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgdGFibGVhbV91 dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7 CisKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXggQU1zIChpbiBp bmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2so SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRlcm4gSW5kZXhT Y2FuQmF0Y2ggaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKEluZGV4U2NhbkRlc2Mgc2Nhbik7Citl eHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogI2VuZGlmCQkJCQkJCS8qIEdFTkFNX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaAppbmRleCAzYzA5NjFhYjMuLjQ5NGYzNmVjYyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApA QCAtMTE3LDcgKzExNywxMCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAlJ bmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFNIGluZGVwZW5kZW50IHBhcnQgb2YgdGhl IGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZm ZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tOdW1iZXIgeHNfYmxrOwkJCS8qIHhzX2NidWYn cyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8qIE5COiBpZiB4c19jYnVmIGlzIG5vdCBJbnZh bGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQgYnVmZmVyICovCisKKwlCdWZmZXIJCXZt YnVmOwkJCS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAqLwogfSBJbmRleEZldGNoSGVhcERhdGE7 CiAKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv bmJ0cmVlLmgKaW5kZXggNzcyMjQ4NTk2Li41ZTAxZTJlN2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAg LTkyNCwxMTIgKzkyNCw2IEBAIHR5cGVkZWYgc3RydWN0IEJUVmFjdXVtUG9zdGluZ0RhdGEKIAog dHlwZWRlZiBCVFZhY3V1bVBvc3RpbmdEYXRhICpCVFZhY3V1bVBvc3Rpbmc7CiAKLS8qCi0gKiBC VFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4g aW5kZXhzY2FuLgotICogVGhpcyBjb25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChz ZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZvcgotICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vz c2luZyksIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUg c2NhbiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4g IChXZSB1c2UKLSAqIEJUU2NhblBvc0RhdGEgdG8gcmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBm b3IgZWFjaCBvZiBjdXJyZW50IGFuZCBtYXJrZWQKLSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9u IHdlIGNhbiByZW1lbWJlciBzb21lIGtub3duLWtpbGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0 IG11c3QgYmUgbWFya2VkIGJlZm9yZSB3ZSBjYW4gbW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4K LSAqCi0gKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWU6IHdlIHBpbiBhbmQgcmVh ZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeQotICogYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0 aGUgcGFnZSBhbmQgc2F2ZSB0aGVtIGluIEJUU2NhblBvc0RhdGEsIHRoZW4KLSAqIHJlbGVhc2Ug dGhlIHJlYWQtbG9jayB3aGlsZSByZXR1cm5pbmcgdGhlIGl0ZW1zIHRvIHRoZSBjYWxsZXIgZm9y Ci0gKiBwcm9jZXNzaW5nLiAgVGhpcyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJh ZmZpYy4gIFdlIG11c3QgYWx3YXlzCi0gKiBkcm9wIHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBm b3IgY2FsbGVyIHRvIHByb2Nlc3MgdGhlIHJldHVybmVkIGl0ZW1zLgotICogV2hldGhlciBvciBu b3Qgd2UgY2FuIGFsc28gcmVsZWFzZSB0aGUgcGluIGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZh cnkuCi0gKiBXZSBkcm9wIHRoZSBwaW4gKHdoZW4gc28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2Nr aW5nIHByb2dyZXNzIGJ5IFZBQ1VVTQotICogKHNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJv dXQgbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5 cyByZWxlYXNlIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBi ZWZvcmUKLSAqIG1vdmluZyBvbiB0byBpdHMgc2libGluZyBwYWdlLgotICoKLSAqIElmIHdlIGFy ZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxl IGZvciBlYWNoCi0gKiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBh bmQgb2Zmc2V0LiAgVGhlIEluZGV4VHVwbGVzIGdvCi0gKiBpbnRvIGEgc2VwYXJhdGUgd29ya3Nw YWNlIGFycmF5OyBlYWNoIEJUU2NhblBvc0l0ZW0gc3RvcmVzIGl0cyB0dXBsZSdzCi0gKiBvZmZz ZXQgd2l0aGluIHRoYXQgYXJyYXkuICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2Ui IHR1cGxlIG9uY2UsCi0gKiBhbGxvd2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9y IGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxpc3QKLSAqIHR1cGxlLgotICovCi0KLXR5cGVkZWYg c3RydWN0IEJUU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNo ICovCi17Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhl YXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxv Y2F0aW9uIHdpdGhpbiBwYWdlICovCi0JTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5k ZXhUdXBsZSdzIG9mZnNldCBpbiB3b3Jrc3BhY2UsIGlmIGFueSAqLwotfSBCVFNjYW5Qb3NJdGVt OwotCi10eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyog Y3VyclBhZ2UgYnVmIChpbnZhbGlkIG1lYW5zIHVucGlubmVkKSAqLwotCi0JLyogcGFnZSBkZXRh aWxzIGFzIG9mIHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0J QmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBwYWdlIHJlZmVyZW5jZWQgYnkgaXRlbXMgYXJyYXkg Ki8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCi0J QmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KLQlYTG9n UmVjUHRyCWxzbjsJCQkvKiBjdXJyUGFnZSdzIExTTiAod2hlbiBzby0+ZHJvcFBpbikgKi8KLQot CS8qIHNjYW4gZGlyZWN0aW9uIGZvciB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9y ZWFkcGFnZSAqLwotCVNjYW5EaXJlY3Rpb24gZGlyOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9p bmcgYW4gaW5kZXgtb25seSBzY2FuLCBuZXh0VHVwbGVPZmZzZXQgaXMgdGhlIGZpcnN0IGZyZWUK LQkgKiBsb2NhdGlvbiBpbiB0aGUgYXNzb2NpYXRlZCB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZS4K LQkgKi8KLQlpbnQJCQluZXh0VHVwbGVPZmZzZXQ7Ci0KLQkvKgotCSAqIG1vcmVMZWZ0IGFuZCBt b3JlUmlnaHQgdHJhY2sgd2hldGhlciB3ZSB0aGluayB0aGVyZSBtYXkgYmUgbWF0Y2hpbmcKLQkg KiBpbmRleCBlbnRyaWVzIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgY3VycmVudCBwYWdl LCByZXNwZWN0aXZlbHkuCi0JICovCi0JYm9vbAkJbW9yZUxlZnQ7Ci0JYm9vbAkJbW9yZVJpZ2h0 OwotCi0JLyoKLQkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXgg b3JkZXIgKGllLCBpbmNyZWFzaW5nCi0JICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBi YWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0byBmaWxsIHRoZQotCSAqIGFycmF5IGJhY2stdG8t ZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndhcmRzLgot CSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxhc3QtdmFs aWQtZW50cnkgY291bnRlci4KLQkgKiBpdGVtSW5kZXggaXMgYSBjdXJzb3Igc2hvd2luZyB3aGlj aCBlbnRyeSB3YXMgbGFzdCByZXR1cm5lZCB0byBjYWxsZXIuCi0JICovCi0JaW50CQkJZmlyc3RJ dGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWxhc3RJdGVt OwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJaXRlbUluZGV4OwkJ LyogY3VycmVudCBpbmRleCBpbiBpdGVtc1tdICovCi0KLQlCVFNjYW5Qb3NJdGVtIGl0ZW1zW01h eFRJRHNQZXJCVHJlZVBhZ2VdOwkvKiBNVVNUIEJFIExBU1QgKi8KLX0gQlRTY2FuUG9zRGF0YTsK LQotdHlwZWRlZiBCVFNjYW5Qb3NEYXRhICpCVFNjYW5Qb3M7Ci0KLSNkZWZpbmUgQlRTY2FuUG9z SXNQaW5uZWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlk KChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5i dWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotI2RlZmluZSBCVFNj YW5Qb3NVbnBpbihzY2FucG9zKSBcCi0JZG8geyBcCi0JCVJlbGVhc2VCdWZmZXIoKHNjYW5wb3Mp LmJ1Zik7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQl9IHdoaWxlICgw KQotI2RlZmluZSBCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJ aWYgKEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3MpKSBcCi0JCQlCVFNjYW5Qb3NVbnBpbihzY2Fu cG9zKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQlRTY2FuUG9zSXNWYWxpZChzY2FucG9z KSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQ YWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tO dW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotI2RlZmluZSBCVFNjYW5Qb3NJ bnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRC dWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0J fSB3aGlsZSAoMCkKLQogLyogV2UgbmVlZCBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggZXF1YWxpdHkt dHlwZSBTS19TRUFSQ0hBUlJBWSBzY2FuIGtleSAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtl eUluZm8KIHsKQEAgLTEwNTAsNiArOTQ0LDMwIEBAIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJ bmZvCiAJU2NhbktleQkJaGlnaF9jb21wYXJlOwkvKiBhcnJheSdzIDwgb3IgPD0gdXBwZXIgYm91 bmQgKi8KIH0gQlRBcnJheUtleUluZm87CiAKKy8qCisgKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRo ZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgorICogVGhpcyBj b25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5 cygpIGZvcgorICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGFuZCBpbmZvcm1hdGlv biBhYm91dCB0aGUgY3VycmVudCBhcnJheQorICoga2V5cy4gIFRoZXJlIGFyZSBhc3N1bXB0aW9u cyBhYm91dCBob3cgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyB0cmFjayB0aGUKKyAqIHByb2dyZXNz IG9mIHRoZSBpbmRleCBzY2FuIHRocm91Z2ggdGhlIGluZGV4J3Mga2V5IHNwYWNlIChzZWUgX2J0 X3JlYWRwYWdlCisgKiBhbmQgX2J0X2FkdmFuY2VfYXJyYXlfa2V5cyksIGJ1dCB3ZSBkb24ndCBh Y3R1YWxseSB0cmFjayBhbnl0aGluZyBhYm91dCB0aGUKKyAqIGN1cnJlbnQgc2NhbiBwb3NpdGlv biBpbiB0aGlzIG9wYXF1ZSBzdHJ1Y3QuICBUaGF0IGlzIHRyYWNrZWQgZXh0ZXJuYWxseSwKKyAq IGJ5IGltcGxlbWVudGluZyBhIHJpbmcgYnVmZmVyIG9mICJiYXRjaGVzIiwgd2hlcmUgZWFjaCBi YXRjaCByZXByZXNlbnRzIHRoZQorICogaXRlbXMgcmV0dXJuZWQgYnkgYnRnZXRiYXRjaCB3aXRo aW4gYSBzaW5nbGUgbGVhZiBwYWdlLgorICoKKyAqIEluZGV4IHNjYW5zIHdvcmsgYSBwYWdlIGF0 IGEgdGltZSwgYXMgcmVxdWlyZWQgYnkgdGhlIGFtZ2V0YmF0Y2ggY29udHJhY3Q6CisgKiB3ZSBw aW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwgaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVt cyBvbiB0aGUgcGFnZQorICogYW5kIHJldHVybiB0aGVtIGluIGEgbmV3bHkgYWxsb2NhdGVkIGJh dGNoLiAgV2UgdGhlbiByZWxlYXNlIHRoZSByZWFkLWxvY2sKKyAqIHVzaW5nIGFtZ2V0YmF0Y2gg dXRpbGl0eSByb3V0aW5lcy4gIFRoaXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2NrCisg KiB0cmFmZmljLiBfYnRfbmV4dCBpcyBwYXNzZWQgcHJpb3JiYXRjaCwgd2hpY2ggY29udGFpbnMg ZGV0YWlscyBvZiB3aGljaAorICogcGFnZSBpcyBuZXh0IGluIGxpbmUgdG8gYmUgcmVhZCAocHJp b3JiYXRjaCBpcyBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0bworICogYnRnZXRiYXRjaCBieSBj b3JlIGNvZGUpLgorICoKKyAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdl IHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCisgKiBtYXRjaGVkIGl0ZW0sIG90 aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhpcyBpcyBhbHNvIHBlciB0 aGUKKyAqIGFtZ2V0YmF0Y2ggY29udHJhY3QuICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEg ImJhc2UiIHR1cGxlIG9uY2UsCisgKiBhbGxvd2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJu ZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxpc3QuCisgKi8KIHR5cGVkZWYgc3RydWN0 IEJUU2Nhbk9wYXF1ZURhdGEKIHsKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIHNldCBieSBfYnRfcHJl cHJvY2Vzc19rZXlzKCk6ICovCkBAIC0xMDY2LDMyICs5ODQsNiBAQCB0eXBlZGVmIHN0cnVjdCBC VFNjYW5PcGFxdWVEYXRhCiAJQlRBcnJheUtleUluZm8gKmFycmF5S2V5czsJLyogaW5mbyBhYm91 dCBlYWNoIGVxdWFsaXR5LXR5cGUgYXJyYXkga2V5ICovCiAJRm1nckluZm8gICAqb3JkZXJQcm9j czsJCS8qIE9SREVSIHByb2NzIGZvciByZXF1aXJlZCBlcXVhbGl0eSBrZXlzICovCiAJTWVtb3J5 Q29udGV4dCBhcnJheUNvbnRleHQ7IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3IgYXJyYXkg ZGF0YSAqLwotCi0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJdGVt cyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8qIGN1 cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxsZWQ7 CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCWJvb2wJCWRyb3BQaW47 CQkvKiBkcm9wIGxlYWYgcGluIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnM/ICovCi0KLQkvKgot CSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUgdHVw bGUgc3RvcmFnZQotCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9zIHJl c3BlY3RpdmVseS4gIEVhY2ggaXMgb2Ygc2l6ZQotCSAqIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQg YXMgbXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQljaGFyCSAg ICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgY3VyclBvcyAqLwotCWNoYXIJICAg Km1hcmtUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBtYXJrUG9zICovCi0KLQkvKgotCSAq IElmIHRoZSBtYXJrZWQgcG9zaXRpb24gaXMgb24gdGhlIHNhbWUgcGFnZSBhcyBjdXJyZW50IHBv c2l0aW9uLCB3ZQotCSAqIGRvbid0IHVzZSBtYXJrUG9zLCBidXQganVzdCBrZWVwIHRoZSBtYXJr ZWQgaXRlbUluZGV4IGluIG1hcmtJdGVtSW5kZXgKLQkgKiAoYWxsIHRoZSByZXN0IG9mIGN1cnJQ b3MgaXMgdmFsaWQgZm9yIHRoZSBtYXJrIHBvc2l0aW9uKS4gSGVuY2UsIHRvCi0JICogZGV0ZXJt aW5lIGlmIHRoZXJlIGlzIGEgbWFyaywgZmlyc3QgbG9vayBhdCBtYXJrSXRlbUluZGV4LCB0aGVu IGF0Ci0JICogbWFya1Bvcy4KLQkgKi8KLQlpbnQJCQltYXJrSXRlbUluZGV4OwkvKiBpdGVtSW5k ZXgsIG9yIC0xIGlmIG5vdCB2YWxpZCAqLwotCi0JLyoga2VlcCB0aGVzZSBsYXN0IGluIHN0cnVj dCBmb3IgZWZmaWNpZW5jeSAqLwotCUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1cnJlbnQg cG9zaXRpb24gZGF0YSAqLwotCUJUU2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtlZCBwb3Np dGlvbiwgaWYgYW55ICovCiB9IEJUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2FuT3Bh cXVlRGF0YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE2MCwxNCArMTA1MiwxNiBAQCBleHRlcm4gYm9v bCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIGV4 dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVsYXRp b24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0cGFy YWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGJ0 Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJp b3JiYXRjaCwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBidGdl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2b2lk IGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5r ZXlzLAogCQkJCQkgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9p ZCBidGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsK IGV4dGVybiB2b2lkIGJ0cGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVy biB2b2lkIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRtYXJr cG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidHJlc3RycG9zKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggbWFya2JhdGNoKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KmJ0YnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJICAgSW5kZXhC dWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVDYWxs YmFjayBjYWxsYmFjaywKQEAgLTEyNzEsOCArMTE2NSw5IEBAIGV4dGVybiB2b2lkIF9idF9wcmVw cm9jZXNzX2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBm dW5jdGlvbnMgaW4gbmJ0cmVhZHBhZ2UuYwogICovCi1leHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJCQkJCSBPZmZzZXROdW1i ZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSk7CitleHRlcm4gYm9vbCBfYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwKKwkJCQkJCSBTY2FuRGly ZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBib29sIGZpcnN0cGFnZSk7 CiBleHRlcm4gdm9pZCBfYnRfc3RhcnRfYXJyYXlfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQJX2J0X2JpbnNyY2hfYXJyYXlfc2tleShGbWdy SW5mbyAqb3JkZXJwcm9jLAogCQkJCQkJCQkgICBib29sIGN1cl9lbGVtX3RyaWcsIFNjYW5EaXJl Y3Rpb24gZGlyLApAQCAtMTI4Nyw4ICsxMTgyLDkgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJj aChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJ CQkgIEJ1ZmZlciAqYnVmUCwgaW50IGFjY2Vzcyk7CiBleHRlcm4gT2Zmc2V0TnVtYmVyIF9idF9i aW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0c3RhdGUpOwog ZXh0ZXJuIGludDMyIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwg UGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4dGVybiBib29sIF9idF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVybiBib29sIF9idF9u ZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4 U2NhbkJhdGNoIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpOwog ZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVs LCBib29sIHJpZ2h0bW9zdCk7CiAKIC8qCkBAIC0xMjk2LDcgKzExOTIsNyBAQCBleHRlcm4gQnVm ZmVyIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmln aHRtb3N0KTsKICAqLwogZXh0ZXJuIEJUU2Nhbkluc2VydCBfYnRfbWtzY2Fua2V5KFJlbGF0aW9u IHJlbCwgSW5kZXhUdXBsZSBpdHVwKTsKIGV4dGVybiB2b2lkIF9idF9mcmVlc3RhY2soQlRTdGFj ayBzdGFjayk7Ci1leHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CitleHRlcm4gdm9pZCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfdmFjdXVtX2N5Y2xlaWQoUmVsYXRp b24gcmVsKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1bShSZWxhdGlvbiByZWwp OwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRpb24gcmVsKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nh bi5oCmluZGV4IGNlMzQwYzA3Ni4uYWU4NWU4ZGRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTE2 LDggKzE2LDEwIEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgIm5v ZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvYnVmLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgogI2luY2x1 ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC0xMjQs NiArMTI2LDE3OSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhCiAJUmVsYXRp b24JcmVsOwogfSBJbmRleEZldGNoVGFibGVEYXRhOwogCisvKgorICogTG9jYXRpb24gb2YgYSBC YXRjaE1hdGNoaW5nSXRlbSB0aGF0IGFwcGVhcnMgaW4gYSBJbmRleFNjYW5CYXRjaCByZXR1cm5l ZAorICogYnkgKGFuZCBzdWJzZXF1ZW50bHkgcGFzc2VkIHRvKSBhbiBhbWdldGJhdGNoIHJvdXRp bmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hSaW5nSXRlbVBvcworeworCS8qIEJhdGNoUmlu Z0J1ZmZlci5iYXRjaGVzW10td2lzZSBpbmRleCB0byByZWxldmFudCBJbmRleFNjYW5CYXRjaCAq LworCWludAkJCWJhdGNoOworCisJLyogSW5kZXhTY2FuQmF0Y2guaXRlbXNbXS13aXNlIGluZGV4 IHRvIHJlbGV2YW50IEJhdGNoTWF0Y2hpbmdJdGVtICovCisJaW50CQkJaXRlbTsKK30gQmF0Y2hS aW5nSXRlbVBvczsKKworc3RhdGljIGlubGluZSB2b2lkCitiYXRjaF9yZXNldF9wb3MoQmF0Y2hS aW5nSXRlbVBvcyAqcG9zKQoreworCXBvcy0+YmF0Y2ggPSAtMTsKKwlwb3MtPml0ZW0gPSAtMTsK K30KKworLyoKKyAqIE1hdGNoaW5nIGl0ZW0gcmV0dXJuZWQgYnkgYW1nZXRiYXRjaCAoaW4gcmV0 dXJuZWQgSW5kZXhTY2FuQmF0Y2gpIGR1cmluZyBhbgorICogaW5kZXggc2Nhbi4gIFVzZWQgYnkg dGFibGUgQU0gdG8gbG9jYXRlIHJlbGV2YW50IG1hdGNoaW5nIHRhYmxlIHR1cGxlLgorICovCit0 eXBlZGVmIHN0cnVjdCBCYXRjaE1hdGNoaW5nSXRlbQoreworCUl0ZW1Qb2ludGVyRGF0YSBoZWFw VGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCBoZWFwIGl0ZW0gKi8KKwlPZmZzZXROdW1iZXIgaW5k ZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLworCUxvY2F0 aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQgaW4gd29ya3NwYWNl LCBpZiBhbnkgKi8KKwlib29sCQlhbGxWaXNpYmxlOwkJLyogVElEIHBvaW50cyB0byBhbGwtdmlz aWJsZSBwYWdlICovCit9IEJhdGNoTWF0Y2hpbmdJdGVtOworCisvKgorICogRGF0YSBhYm91dCBv bmUgYmF0Y2ggb2YgaXRlbXMgcmV0dXJuZWQgYnkgKGFuZCBwYXNzZWQgdG8pIGFtZ2V0YmF0Y2gg ZHVyaW5nCisgKiBpbmRleCBzY2FucworICovCit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRj aERhdGEKK3sKKwkvKgorCSAqIEluZm9ybWF0aW9uIG91dHB1dCBieSBhbWdldGJhdGNoIGluZGV4 IEFNcyB1cG9uIHJldHVybmluZyBhIGJhdGNoIHdpdGgKKwkgKiBvbmUgb3IgbW9yZSBtYXRjaGlu ZyBpdGVtcywgZGVzY3JpYmluZyBkZXRhaWxzIG9mIHRoZSBpbmRleCBwYWdlIHdoZXJlCisJICog bWF0Y2hlcyB3ZXJlIGxvY2F0ZWQuCisJICoKKwkgKiBVc2VkIGluIHRoZSBuZXh0IGFtZ2V0YmF0 Y2ggY2FsbCB0byBkZXRlcm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byByZWFkCisJICogbmV4dCAo b3IgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3Mgbm8gZnVydGhlciBtYXRjaGVzIGluIGN1cnJlbnQg c2NhbgorCSAqIGRpcmVjdGlvbikuCisJICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBJ bmRleCBwYWdlIHdpdGggbWF0Y2hpbmcgaXRlbXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBj dXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KKworCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1 ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KKwlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJy UGFnZSdzIExTTiAqLworCisJLyogc2NhbiBkaXJlY3Rpb24gd2hlbiB0aGUgaW5kZXggcGFnZSB3 YXMgcmVhZCAqLworCVNjYW5EaXJlY3Rpb24gZGlyOworCisJLyoKKwkgKiBtb3JlTGVmdCBhbmQg bW9yZVJpZ2h0IGFyZSB1c2VkIGJ5IGluZGV4IEFNcyB0byB0cmFjayB3aGV0aGVyIHRoZXJlIG1h eQorCSAqIGJlIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IGN1 cnJQYWdlLCByZXNwZWN0aXZlbHkuCisJICoKKwkgKiBOb3RlOiB0aGUgZXhhY3QgaW50ZXJwcmV0 YXRpb24gb2YgdGhlc2UgZmllbGRzIHZhcmllcyBhY3Jvc3MgaW5kZXggQU1zLgorCSAqIFRhYmxl IEFNcyBtdXN0IG5vdCByZWx5IG9uIHRoZW0gZGlyZWN0bHk7IHRoZXkgbXVzdCBhbHdheXMgY2Fs bCBpbmRleAorCSAqIEFNJ3MgYW1nZXRiYXRjaCByb3V0aW5lIHRvIGRldGVybWluZSBpZiB0aGVy ZSdzIG5vIG1vcmUgYmF0Y2hlcyBpbiB0aGUKKwkgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgor CSAqLworCWJvb2wJCW1vcmVMZWZ0OworCWJvb2wJCW1vcmVSaWdodDsKKworCS8qCisJICogTWF0 Y2hpbmcgaXRlbXMgc3RhdGUgZm9yIHRoaXMgYmF0Y2guICBPdXRwdXQgYnkgaW5kZXggQU0gZm9y IHRhYmxlIEFNLgorCSAqCisJICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGlu IGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZworCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nh bm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFNcworCSAqIHRvIGZp bGwgdGhlIGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3Qg YW5kIGZpbGwKKwkgKiBkb3dud2FyZHMuICBIZW5jZSB0aGV5IG5lZWQgYSBmaXJzdC12YWxpZC1l bnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5CisJICogY291bnRlci4KKwkgKi8KKwlpbnQJCQlm aXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJaW50CQkJbGFz dEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8qIGluZm8gYWJv dXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2Vk KSAqLworCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAq LworCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1z ICovCisKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNl IGFyZSB0aGUgdHVwbGUgc3RvcmFnZQorCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBtYXRjaGluZyB0 dXBsZXMgKHR1cGxlcyByZWZlcmVuY2VkIGJ5IGl0ZW1zW10pLiBFYWNoCisJICogaXMgb2Ygc2l6 ZSBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2UncyB3b3J0aCBv ZgorCSAqIHR1cGxlcy4KKwkgKi8KKwljaGFyCSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3Rv cmFnZSBmb3IgaXRlbXNbXSAqLworCUJhdGNoTWF0Y2hpbmdJdGVtIGl0ZW1zW0ZMRVhJQkxFX0FS UkFZX01FTUJFUl07IC8qIG1hdGNoaW5nIGl0ZW1zICovCit9IEluZGV4U2NhbkJhdGNoRGF0YTsK KwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKKwor LyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXMgKGxlYWYgcGFnZXMpIHdlIGNhbiBrZWVw IGluIG1lbW9yeS4gIFdlIG5lZWQgYQorICogbWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9u bHkgY29uc2lkZXIgcmVsZWFzaW5nIG9uZSBiYXRjaCB3aGVuIGFub3RoZXIKKyAqIGlzIHJlYWQu CisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUwkJMgorI2RlZmluZSBJTkRFWF9T Q0FOX0NBQ0hFX0JBVENIRVMJMgorI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4p IFwKKwkoKHNjYW4pLT5iYXRjaHJpbmdidWYtPm5leHRCYXRjaCAtIChzY2FuKS0+YmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2gpCisKKy8qIERpZCB3ZSBhbHJlYWR5IGxvYWQgYmF0Y2ggd2l0aCB0aGUg cmVxdWVzdGVkIGluZGV4PyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0xPQURFRChzY2Fu LCBpZHgpIFwKKwkoKGlkeCkgPj0gKHNjYW4pLT5iYXRjaHJpbmdidWYtPmhlYWRCYXRjaCAmJiAo aWR4KSA8IChzY2FuKS0+YmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2gpCisKKy8qIEhhdmUgd2UgbG9h ZGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzPyAqLworI2RlZmluZSBJTkRFWF9TQ0FO X0JBVENIX0ZVTEwoc2NhbikgXAorCShJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID09IElO REVYX1NDQU5fTUFYX0JBVENIRVMpCisKKy8qIFJldHVybiBiYXRjaCBmb3IgdGhlIHByb3ZpZGVk IGluZGV4ICovCisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0goc2NhbiwgaWR4KQlcCisoIFwKKwlB c3NlcnRNYWNybyhJTkRFWF9TQ0FOX0JBVENIX0xPQURFRChzY2FuLCBpZHgpKSwgXAorCSgoc2Nh biktPmJhdGNocmluZ2J1Zi0+YmF0Y2hlc1soaWR4KSAlIElOREVYX1NDQU5fTUFYX0JBVENIRVNd KSBcCispCisKKy8qIEFwcGVuZCBnaXZlbiBiYXRjaCB0byBzY2FuJ3MgYmF0Y2ggcmluZyBidWZm ZXIgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSF9BUFBFTkQoc2NhbiwgYmF0Y2gpIFwKKwlk byB7IFwKKwkJQmF0Y2hSaW5nQnVmZmVyICptcmluZ2J1ZiA9IChzY2FuKS0+YmF0Y2hyaW5nYnVm OwlcCisJCWludAkJCQluZXh0QmF0Y2ggPSBtcmluZ2J1Zi0+bmV4dEJhdGNoOyBcCisJCW1yaW5n YnVmLT5iYXRjaGVzW25leHRCYXRjaCAlIElOREVYX1NDQU5fTUFYX0JBVENIRVNdID0gKGJhdGNo KTsgXAorCQltcmluZ2J1Zi0+bmV4dEJhdGNoKys7IFwKKwl9IHdoaWxlKDApCisKKy8qIElzIHRo ZSBwb3NpdGlvbiBpbnZhbGlkL3VuZGVmaW5lZD8gKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9QT1Nf SU5WQUxJRChwb3MpIFwKKwkJKCgocG9zKS0+YmF0Y2ggPT0gLTEpICYmICgocG9zKS0+aXRlbSA9 PSAtMSkpCisKKy8qCisgKiBTdGF0ZSB1c2VkIGJ5IHRhYmxlIEFNcyB0byBtYW5hZ2UgYW4gaW5k ZXggc2NhbiB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0Y2gKKyAqIGludGVyZmFjZS4gIFNjYW5zIHVz ZSBhIHJpbmcgYnVmZmVyIG9mIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqCisg KiBCYXRjaGVzIGFyZSBrZXB0IGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZSByZXR1cm5lZCBp biBieSBhbWdldGJhdGNoLAorICogc2luY2UgdGhhdCBpcyB0aGUgc2FtZSBvcmRlciB0aGF0IHRh YmxlX2luZGV4X2dldG5leHRfc2xvdCB3aWxsIHJldHVybgorICogbWF0Y2hlcyBpbi4gIEhvd2V2 ZXIsIHRhYmxlIEFNcyBhcmUgZnJlZSB0byBmZXRjaCB0YWJsZSB0dXBsZXMgaW4gd2hhdGV2ZXIK KyAqIG9yZGVyIGlzIG1vc3QgY29udmVuaWVudC9lZmZpY2llbnQgLS0gcHJvdmlkZWQgdGhhdCBz dWNoIHJlb3JkZXJpbmcgY2Fubm90CisgKiBhZmZlY3QgdGhlIG9yZGVyIHRoYXQgdGFibGVfaW5k ZXhfZ2V0bmV4dF9zbG90IGxhdGVyIHJldHVybnMgdHVwbGVzIGluLgorICovCit0eXBlZGVmIHN0 cnVjdCBCYXRjaFJpbmdCdWZmZXIKK3sKKwkvKiBDdXJyZW50IHNjYW4gZGlyZWN0aW9uLCBmb3Ig dGhlIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hlcyAqLworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u OworCisJLyogY3VycmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCisJQmF0 Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLworCUJhdGNo UmluZ0l0ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisKKwlJbmRl eFNjYW5CYXRjaCBtYXJrQmF0Y2g7CisKKwkvKgorCSAqIEFycmF5IG9mIGJhdGNoZXMgcmV0dXJu ZWQgYnkgdGhlIEFNLiBUaGUgYXJyYXkgaGFzIGEgY2FwYWNpdHkgKGJ1dCBjYW4KKwkgKiBiZSBy ZXNpemVkIGlmIG5lZWRlZCkuIFRoZSBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggb2YgdGhlIGJhdGNo IHdlJ3JlCisJICogY3VycmVudGx5IHJlYWRpbmcgZnJvbSAodGhpcyBuZWVkcyB0byBiZSB0cmFu c2xhdGVkIGJ5IG1vZHVsbworCSAqIElOREVYX1NDQU5fTUFYX0JBVENIRVMgaW50byBpbmRleCBp biB0aGUgYmF0Y2hlcyBhcnJheSkuCisJICovCisJaW50CQkJaGVhZEJhdGNoOwkJLyogaGVhZCBi YXRjaCBzbG90ICovCisJaW50CQkJbmV4dEJhdGNoOwkJLyogbmV4dCBlbXB0eSBiYXRjaCBzbG90 ICovCisKKwkvKiBBcnJheSBvZiBwb2ludGVycyB0byBjYWNoZWQgcmVjeWNsYWJsZSBiYXRjaGVz ICovCisJSW5kZXhTY2FuQmF0Y2ggY2FjaGVbSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTXTsKKwor CS8qIEFycmF5IG9mIHBvaW50ZXJzIHRvIHJpbmcgYnVmZmVyIGJhdGNoZXMgKi8KKwlJbmRleFNj YW5CYXRjaCBiYXRjaGVzW0lOREVYX1NDQU5fTUFYX0JBVENIRVNdOworCit9IEJhdGNoUmluZ0J1 ZmZlcjsKKwogc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKQEAgLTE0MSw2 ICszMTYsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlpbnQJCQludW1i ZXJPZk9yZGVyQnlzOwkvKiBudW1iZXIgb2Ygb3JkZXJpbmcgb3BlcmF0b3JzICovCiAJc3RydWN0 IFNjYW5LZXlEYXRhICprZXlEYXRhOwkvKiBhcnJheSBvZiBpbmRleCBxdWFsaWZpZXIgZGVzY3Jp cHRvcnMgKi8KIAlzdHJ1Y3QgU2NhbktleURhdGEgKm9yZGVyQnlEYXRhOwkvKiBhcnJheSBvZiBv cmRlcmluZyBvcCBkZXNjcmlwdG9ycyAqLworCisJLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHBy aXZhdGUgc3RhdGUgKi8KKwl2b2lkCSAgICpvcGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVj aWZpYyBpbmZvICovCisKKwkvKiB0YWJsZSBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBhbWdldGJh dGNoIHN0YXRlICovCisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWY7CS8qIGFtZ2V0YmF0 Y2ggcmVsYXRlZCBzdGF0ZSAqLworCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBjYWxsZXIgcmVx dWVzdHMgaW5kZXggdHVwbGVzICovCiAJYm9vbAkJeHNfdGVtcF9zbmFwOwkvKiB1bnJlZ2lzdGVy IHNuYXBzaG90IGF0IHNjYW4gZW5kPyAqLwogCkBAIC0xNDksOSArMzMxLDEzIEBAIHR5cGVkZWYg c3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkJaWdub3JlX2tpbGxlZF90dXBsZXM7CS8q IGRvIG5vdCByZXR1cm4ga2lsbGVkIGVudHJpZXMgKi8KIAlib29sCQl4YWN0U3RhcnRlZEluUmVj b3Zlcnk7CS8qIHByZXZlbnRzIGtpbGxpbmcvc2VlaW5nIGtpbGxlZAogCQkJCQkJCQkJCSAqIHR1 cGxlcyAqLworCS8qIFNhZmUgdG8gZHJvcCBpbmRleCBwYWdlIHBpbnMgZWFnZXJseT8gKi8KKwli b29sCQlNVkNDU2NhbjsKIAotCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0YXRl ICovCi0Jdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5mbyAq LworCS8qCisJICogRGlkIHdlIHJlYWQgdGhlIGZpbmFsIGJhdGNoIGluIHRoaXMgc2NhbiBkaXJl Y3Rpb24/CisJICovCisJYm9vbAkJZmluaXNoZWQ7CiAKIAkvKgogCSAqIEluc3RydW1lbnRhdGlv biBjb3VudGVycyBtYWludGFpbmVkIGJ5IGFsbCBpbmRleCBBTXMgZHVyaW5nIGJvdGgKQEAgLTE3 Niw2ICszNjIsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCUluZGV4RmV0 Y2hUYWJsZURhdGEgKnhzX2hlYXBmZXRjaDsKIAogCWJvb2wJCXhzX3JlY2hlY2s7CQkvKiBUIG1l YW5zIHNjYW4ga2V5cyBtdXN0IGJlIHJlY2hlY2tlZCAqLworCWJvb2wJCXhzX3Zpc2libGU7CQkv KiBUIG1lYW5zIHRoZSBoZWFwIHBhZ2UgaXMgYWxsLXZpc2libGUgKi8KKwl1aW50MTYJCW1heGl0 ZW1zYmF0Y2g7CS8qIHNldCBieSBhbWJlZ2luc2NhbiB3aGVuIGFtZ2V0YmF0Y2ggdXNlZCAqLwog CiAJLyoKIAkgKiBXaGVuIGZldGNoaW5nIHdpdGggYW4gb3JkZXJpbmcgb3BlcmF0b3IsIHRoZSB2 YWx1ZXMgb2YgdGhlIE9SREVSIEJZCkBAIC0yMTUsNCArNDAzLDExNCBAQCB0eXBlZGVmIHN0cnVj dCBTeXNTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiB9IFN5c1Nj YW5EZXNjRGF0YTsKIAorLyoKKyAqIEFkdmFuY2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRlbSBp biB0aGUgYmF0Y2guCisgKgorICogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtIHdpdGhpbiB0aGUg cHJvdmlkZWQgYmF0Y2ggKG9yIHRvIHRoZSBwcmV2aW91cyBpdGVtLAorICogd2hlbiBzY2Fubmlu ZyBiYWNrd2FyZHMpLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY291bGQg YmUgYWR2YW5jZWQuICBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlcmUKKyAqIGFyZSBubyBtb3JlIGl0 ZW1zIGluIHRoZSBiYXRjaCBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgorICovCitzdGF0aWMgaW5s aW5lIGJvb2wKK2luZGV4X2JhdGNocG9zX2FkdmFuY2UoSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJh dGNoUmluZ0l0ZW1Qb3MgKnBvcywKKwkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7 CisJQXNzZXJ0KCFJTkRFWF9TQ0FOX1BPU19JTlZBTElEKHBvcykpOworCisJaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCWlmICgrK3Bvcy0+aXRlbSA+IGJhdGNo LT5sYXN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQkJCQkJCS8qIFNjYW5EaXJl Y3Rpb25Jc0JhY2t3YXJkICovCisJeworCQlpZiAoLS1wb3MtPml0ZW0gPCBiYXRjaC0+Zmlyc3RJ dGVtKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEFkdmFuY2VkIHdpdGhpbiBiYXRjaCAq LworCXJldHVybiB0cnVlOworfQorCisvKgorICogQWR2YW5jZSBiYXRjaCBwb3NpdGlvbiBzdGFy dCBvZiBpdHMgbmV3IGJhdGNoLgorICoKKyAqIFNldHMgdGhlIGdpdmVuIHBvc2l0aW9uIHRvIHRo ZSBmaXN0IGl0ZW0gaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uIChvciB0bworICogdGhlIGxh c3QgaXRlbSwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLiAgIEFsc28gYWR2YW5jZXMvaW5jcmVt ZW50cyBiYXRjaAorICogb2Zmc2V0IGZyb20gcG9zaXRpb24gc3VjaCB0aGF0IGl0IHBvaW50cyB0 byBuZXdCYXRjaEZvclBvcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9iYXRjaHBv c19uZXdiYXRjaChJbmRleFNjYW5CYXRjaCBuZXdCYXRjaEZvclBvcywgQmF0Y2hSaW5nSXRlbVBv cyAqcG9zLAorCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQXNzZXJ0KG5ld0Jh dGNoRm9yUG9zLT5kaXIgPT0gZGlyZWN0aW9uKTsKKworCS8qIE5leHQgYmF0Y2ggc3VjY2Vzc2Z1 bGx5IGxvYWRlZCAqLworCXBvcy0+YmF0Y2grKzsKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChkaXJlY3Rpb24pKQorCQlwb3MtPml0ZW0gPSBuZXdCYXRjaEZvclBvcy0+Zmlyc3RJdGVtOwor CWVsc2UKKwkJcG9zLT5pdGVtID0gbmV3QmF0Y2hGb3JQb3MtPmxhc3RJdGVtOworCisJQXNzZXJ0 KCFJTkRFWF9TQ0FOX1BPU19JTlZBTElEKHBvcykpOworfQorCisvKgorICogQ2hlY2sgdGhhdCBh IHBvc2l0aW9uIChiYXRjaCxpdGVtKSBpcyB2YWxpZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGJhdGNo ZXMgd2UKKyAqIGhhdmUgY3VycmVudGx5IGxvYWRlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lk CitiYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBCYXRjaFJp bmdJdGVtUG9zICpwb3MpCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUJhdGNoUmlu Z0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUluZGV4U2NhbkJh dGNoIGJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBwb3MtPmJhdGNoKTsKKworCS8qIG1h a2Ugc3VyZSB0aGUgcG9zaXRpb24gaXMgdmFsaWQgZm9yIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hl cyAqLworCUFzc2VydChwb3MtPmJhdGNoID49IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwlB c3NlcnQocG9zLT5iYXRjaCA8IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoKTsKKwlBc3NlcnQocG9z LT5pdGVtID49IGJhdGNoLT5maXJzdEl0ZW0pOworCUFzc2VydChwb3MtPml0ZW0gPD0gYmF0Y2gt Pmxhc3RJdGVtKTsKKyNlbmRpZgorfQorCisvKgorICogQ2hlY2sgYSBzaW5nbGUgYmF0Y2ggaXMg dmFsaWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYmF0Y2hfYXNzZXJ0X2JhdGNoX3ZhbGlk KEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBi YXRjaCBtdXN0IGhhdmUgb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgcmV0dXJuZWQgYnkgaW5k ZXggQU0gKi8KKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA+PSAwICYmIGJhdGNoLT5maXJzdEl0 ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKwlBc3NlcnQoYmF0Y2gtPml0ZW1zICE9IE5VTEwpOwor CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGtpbGxlZCBpdGVtcyBtdXN0IGJlIHZhbGlkLCBhbmQg dGhlcmUgbXVzdCBiZSBhbiBhcnJheSBvZgorCSAqIGluZGV4ZXMgaWYgdGhlcmUgYXJlIGl0ZW1z LgorCSAqLworCUFzc2VydChiYXRjaC0+bnVtS2lsbGVkID49IDApOworCUFzc2VydCghKGJhdGNo LT5udW1LaWxsZWQgPiAwICYmIGJhdGNoLT5raWxsZWRJdGVtcyA9PSBOVUxMKSk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAorYmF0Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQoSW5kZXhTY2FuRGVz Y0RhdGEgKnNjYW4pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUJhdGNoUmluZ0J1 ZmZlciAqYmF0Y2hyaW5nYnVmID0gc2Nhbi0+YmF0Y2hyaW5nYnVmOworCisJLyogVGhlIGhlYWQv bmV4dCBpbmRleGVzIHNob3VsZCBkZWZpbmUgYSB2YWxpZCByYW5nZSAqLworCUFzc2VydChiYXRj aHJpbmdidWYtPmhlYWRCYXRjaCA+PSAwICYmCisJCSAgIGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo IDw9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoKTsKKworCS8qIENoZWNrIGFsbCBjdXJyZW50IGJh dGNoZXMgKi8KKwlmb3IgKGludCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkgPCBiYXRj aHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBJ TkRFWF9TQ0FOX0JBVENIKHNjYW4sIGkpOworCisJCWJhdGNoX2Fzc2VydF9iYXRjaF92YWxpZChz Y2FuLCBiYXRjaCk7CisJfQorI2VuZGlmCit9CisKICNlbmRpZgkJCQkJCQkvKiBSRUxTQ0FOX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IGUyZWM1Mjg5ZC4uOThlMzM3OTcyIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmgKQEAgLTQzMywxMSArNDMzLDI5IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0 aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChzdHJ1Y3QgSW5kZXhGZXRjaFRh YmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4g aW5kZXggc2NhbiBpbnRvIHNsb3QsIHNjYW5uaW5nIGluIHRoZQorCSAqIHNwZWNpZmllZCBkaXJl Y3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFsc2UKKwkgKiBv dGhlcndpc2UuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGFsbG93cyB0aGUgdGFibGUgQU0gdG8g ZGlyZWN0bHkgbWFuYWdlIHRoZSBzY2FuIHByb2Nlc3MsCisJICogaW5jbHVkaW5nIGludGVyZmFj aW5nIHdpdGggdGhlIGluZGV4IEFNLiBUaGUgY2FsbGVyIHNpbXBseSBzcGVjaWZpZXMKKwkgKiB0 aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2FuOyB0aGUgdGFibGUgQU0gdGFrZXMgY2FyZSBvZiByZXRy aWV2aW5nIFRJRHMKKwkgKiBmcm9tIHRoZSBpbmRleCwgcGVyZm9ybWluZyB2aXNpYmlsaXR5IGNo ZWNrcywgYW5kIHJldHVybmluZyB0dXBsZXMgaW4KKwkgKiB0aGUgc2xvdC4KKwkgKi8KKwlib29s CQkoKmluZGV4X2dldG5leHRfc2xvdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAg IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNs b3QpOworCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIg ZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYg YSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0eQogCSAqIHRlc3QsIHJl dHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKKwkgKiBUaGlzIGlzIGEgbG93ZXItbGV2 ZWwgY2FsbGJhY2sgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuCisJICogQ2FsbGVy cyBzaG91bGQgZmF2b3IgdGhlIGluZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjayB3aGVuZXZlciBw b3NzaWJsZS4KKwkgKgogCSAqIE5vdGUgdGhhdCBBTXMgdGhhdCBkbyBub3QgbmVjZXNzYXJpbHkg dXBkYXRlIGluZGV4ZXMgd2hlbiBpbmRleGVkCiAJICogY29sdW1ucyBkbyBub3QgY2hhbmdlLCBu ZWVkIHRvIHJldHVybiB0aGUgY3VycmVudC9jb3JyZWN0IHZlcnNpb24gb2YKIAkgKiB0aGUgdHVw bGUgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBpZiB0aGUgdGlkIHBvaW50 cyB0byBhbgpAQCAtMTE4OCw2ICsxMjA2LDI2IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1 Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmlu ZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoKKyAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZy b20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVjaWZp ZWQgZGlyZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSB3YXMgZm91bmQsIGZhbHNlIG90 aGVyd2lzZS4KKyAqCisgKiBUaGUgaW5kZXggc2NhbiBzaG91bGQgaGF2ZSBiZWVuIHN0YXJ0ZWQg dmlhIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKCkuCisgKiBDYWxsZXJzIG11c3QgY2hlY2sgc2Nh bi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2FuIGtleXMgaWYgcmVxdWlyZWQuCisgKgorICog SW5kZXgtb25seSBzY2FuIGNhbGxlcnMgKHRoYXQgcGFzcyB4c193YW50X2l0dXA9dHJ1ZSB0byBp bmRleF9iZWdpbnNjYW4pCisgKiBjYW4gY29uc3VtZSBpbmRleCB0dXBsZSByZXN1bHRzIGJ5IGV4 YW1pbmluZyBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMgc3VjaAorICogYXMgeHNfaXR1cCBhbmQg eHNfaGl0dXAuICBUaGUgdGFibGUgQU0gd29uJ3QgdXN1YWxseSBmZXRjaCBhIGhlYXAgdHVwbGUK KyAqIGludG8gdGhlIHByb3ZpZGVkIHNsb3QgaW4gdGhlIGNhc2Ugb2YgeHNfd2FudF9pdHVwPXRy dWUgY2FsbGVycy4KKyAqLworc3RhdGljIGlubGluZSBib29sCit0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3QoSW5kZXhTY2FuRGVzYyBpc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJ CQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJcmV0dXJuIGlzY2FuLT5oZWFwUmVsYXRpb24t PnJkX3RhYmxlYW0tPmluZGV4X2dldG5leHRfc2xvdChpc2NhbiwKKwkJCQkJCQkJCQkJCQkJCSAg IGRpcmVjdGlvbiwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFuIGlu ZGV4IHNjYW4sIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwogICogYSB2 aXNpYmlsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZv dW5kIGFuZCBwYXNzZWQKQEAgLTEyMTEsNiArMTI0OSw5IEBAIHRhYmxlX2luZGV4X2ZldGNoX2Vu ZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVudHJ5IChsaWtlIGhlYXAn cyBIT1QpLiBXaGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQogICog ZXZhbHVhdGVzIHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4IGVu dHJ5IC0+dGFibGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJz aW9uKCkgaXMgd2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dlci1s ZXZlbCBpbnRlcmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxsZXJz CisgKiBzaG91bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2Ug d2hlbmV2ZXIgcG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5kZXhf ZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCmluZGV4IDg4NDdkN2Y5NC4uYjViOGY1MDlhIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAorKysgYi9zcmMv aW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaApAQCAtNDgsNiArNDgsMTIgQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogSW5kZXggc2VhcmNo IGNvdW50IChpbmNyZW1lbnRlZCB3aXRoIHBnc3RhdF9jb3VudF9pbmRleF9zY2FuIGNhbGwpICov CiAJdWludDY0CQluc2VhcmNoZXM7CisKKwkvKgorCSAqIGhlYXAgYmxvY2tzIGZldGNoZWQgY291 bnRzIChpbmNyZW1lbnRlZCBieSBpbmRleF9nZXRuZXh0X3Nsb3QgY2FsbHMKKwkgKiB3aXRoaW4g dGFibGUgQU1zLCB0aG91Z2ggb25seSBkdXJpbmcgaW5kZXgtb25seSBzY2FucykKKwkgKi8KKwl1 aW50NjQJCW5oZWFwZmV0Y2hlczsKIH0gSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaAppbmRleCBmODA1M2Q5ZTUuLjc5M2IxYTNjNiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhl Y25vZGVzLmgKQEAgLTE3NTMsNyArMTc1Myw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0 YXRlCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50YXRpb24K ICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9uIChubyBs ZWFkZXIgZW50cnkpCiAgKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxlcyBm ZXRjaGVkIGZyb20gdGhlIHRhYmxlCi0gKgkJVk1CdWZmZXIJCSAgIGJ1ZmZlciBpbiB1c2UgZm9y IHZpc2liaWxpdHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9m IHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdBdHRO dW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxFTgog ICoJCU5hbWVDU3RyaW5nQ291bnQgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIE5hbWVDU3Ry aW5nQXR0TnVtcyBhcnJheQpAQCAtMTc3Niw3ICsxNzc1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhPbmx5U2NhblN0YXRlCiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGlvc3NfSW5zdHJ1bWVu dDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsKIAlU dXBsZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7Ci0JQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwog CVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0ck51bWJlciAqaW9zc19OYW1lQ1N0cmluZ0F0dE51 bXM7CiAJaW50CQkJaW9zc19OYW1lQ1N0cmluZ0NvdW50OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRl eCA0NDk4ODViOTMuLjNjODE2MDJiNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEzNDQsNyAr MTM0NCw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T3B0SW5mbwogCS8qIGRvZXMgQU0gaGF2ZSBh bWdldGJpdG1hcCBpbnRlcmZhY2U/ICovCiAJYm9vbAkJYW1oYXNnZXRiaXRtYXA7CiAJYm9vbAkJ YW1jYW5wYXJhbGxlbDsKLQkvKiBkb2VzIEFNIGhhdmUgYW1tYXJrcG9zIGludGVyZmFjZT8gKi8K KwkvKiBpcyBBTSBwcmVwYXJlZCBmb3IgdXMgdG8gcmVzdG9yZSBhIG1hcms/ICovCiAJYm9vbAkJ YW1jYW5tYXJrcG9zOwogCS8qIEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8KIAkvKiBSYXRoZXIgdGhh biBpbmNsdWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtlIHRo aXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCA2ODg3ZTQyMTQuLmQ1ZDAxYjg3NyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMjk0LDEwICsyOTQsMTEgQEAgYnJpbmhhbmRsZXIoUEdf RlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYnJpbmJlZ2luc2NhbiwKIAkJLmFtcmVz Y2FuID0gYnJpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9 IE5VTEwsCisJCS5hbWZyZWViYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGJyaW5nZXRi aXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBicmluZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEws Ci0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3Rp bWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAog CQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbmdldC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwppbmRleCA2 YjE0OGU2OWEuLjhmNzAzM2Q2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9n aW5nZXQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCkBAIC0xOTUzLDkg KzE5NTMsOSBAQCBnaW5nZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRi bSkKIAkgKiBpbnRvIHRoZSBtYWluIGluZGV4LCBhbmQgc28gd2UgbWlnaHQgdmlzaXQgaXQgYSBz ZWNvbmQgdGltZSBkdXJpbmcgdGhlCiAJICogbWFpbiBzY2FuLiAgVGhpcyBpcyBva2F5IGJlY2F1 c2Ugd2UnbGwganVzdCByZS1zZXQgdGhlIHNhbWUgYml0IGluIHRoZQogCSAqIGJpdG1hcC4gIChU aGUgcG9zc2liaWxpdHkgb2YgZHVwbGljYXRlIHZpc2l0cyBpcyBhIG1ham9yIHJlYXNvbiB3aHkg R0lOCi0JICogY2FuJ3Qgc3VwcG9ydCB0aGUgYW1nZXR0dXBsZSBBUEksIGhvd2V2ZXIuKSBOb3Rl IHRoYXQgaXQgd291bGQgbm90IGRvCi0JICogdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUg dGhlIHBlbmRpbmcgbGlzdCwgc2luY2UgY29uY3VycmVudAotCSAqIGNsZWFudXAgY291bGQgdGhl biBtYWtlIHVzIG1pc3MgZW50cmllcyBlbnRpcmVseS4KKwkgKiBjYW4ndCBzdXBwb3J0IGVpdGhl ciB0aGUgYW1nZXR0dXBsZSBvciBhbWdldGJhdGNoIEFQSS4pIE5vdGUgdGhhdCBpdAorCSAqIHdv dWxkIG5vdCBkbyB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0 LCBzaW5jZQorCSAqIGNvbmN1cnJlbnQgY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBl bnRyaWVzIGVudGlyZWx5LgogCSAqLwogCXNjYW5QZW5kaW5nSW5zZXJ0KHNjYW4sIHRibSwgJm50 aWRzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwppbmRleCBkMjA1MDkzZTIuLjEyNjNkYzE4 MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKQEAgLTgyLDEwICs4MiwxMSBAQCBnaW5oYW5k bGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGdpbmJlZ2luc2NhbiwKIAkJ LmFtcmVzY2FuID0gZ2lucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJh dGNoID0gTlVMTCwKKwkJLmFtZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gZ2lu Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2luZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5V TEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1l c3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxM LAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXgg NjgzZWJjYTUyLi5iMGM2N2UzYWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTEwMywxMCAr MTAzLDExIEBAIGdpc3RoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9 IGdpc3RiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpc3RyZXNjYW4sCiAJCS5hbWdldHR1cGxl ID0gZ2lzdGdldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWZyZWViYXRjaCA9 IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGdpc3RnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBn aXN0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwK KwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEws CiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5V TEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggZTg4ZGRiMzJhLi42YTIwYjY3ZjYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTEwMiwxMCArMTAyLDExIEBAIGhhc2hoYW5kbGVyKFBHX0ZV TkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW4sCiAJCS5hbXJlc2Nh biA9IGhhc2hyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gaGFzaGdldHR1cGxlLAorCQkuYW1nZXRi YXRjaCA9IE5VTEwsCisJCS5hbWZyZWViYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGhh c2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9 IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQku YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBO VUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYwppbmRleCBjYmVmNzNlNWQuLjQ5M2Q2Y2I3MiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KICNp bmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgogI2luY2x1ZGUg ImFjY2Vzcy9oZWFwdG9hc3QuaCIKQEAgLTgxLDEwICs4MiwxMiBAQCBoZWFwYW1fc2xvdF9jYWxs YmFja3MoUmVsYXRpb24gcmVsYXRpb24pCiBzdGF0aWMgSW5kZXhGZXRjaFRhYmxlRGF0YSAqCiBo ZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogewotCUluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOworCUluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2Nfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7 CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwgPSByZWw7CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlk QnVmZmVyOworCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJaHNjYW4tPnZt YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CkBAIC05 NCwxMCArOTcsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVh cERhdGEgKikgc2NhbjsKIAorCS8qIGRlbGliZXJhdGVseSBkb24ndCBkcm9wIFZNIGJ1ZmZlciBw aW4gaGVyZSAqLwogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAl7CiAJCVJl bGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRC dWZmZXI7CisJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJfQogfQogCkBA IC0xMDgsNiArMTEzLDEyIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxl RGF0YSAqc2NhbikKIAogCWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIAorCWlmICho c2Nhbi0+dm1idWYgIT0gSW52YWxpZEJ1ZmZlcikKKwl7CisJCVJlbGVhc2VCdWZmZXIoaHNjYW4t PnZtYnVmKTsKKwkJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwl9CisKIAlwZnJlZSho c2Nhbik7CiB9CiAKQEAgLTEyNSwyMiArMTM2LDI4IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAlBc3NlcnQoVFRTX0lTX0JVRkZF UlRVUExFKHNsb3QpKTsKIAogCS8qIFdlIGNhbiBza2lwIHRoZSBidWZmZXItc3dpdGNoaW5nIGxv Z2ljIGlmIHdlJ3JlIGluIG1pZC1IT1QgY2hhaW4uICovCi0JaWYgKCEqY2FsbF9hZ2FpbikKKwlp ZiAoaHNjYW4tPnhzX2JsayAhPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpCiAJewot CQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5 ICovCi0JCUJ1ZmZlcgkJcHJldl9idWYgPSBoc2Nhbi0+eHNfY2J1ZjsKKwkJQXNzZXJ0KCEqY2Fs bF9hZ2Fpbik7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihoc2Nh bi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5yZWwsCi0JCQkJCQkJCQkJ CSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKwkJLyogUmVtZW1iZXIgdGhpcyBi dWZmZXIncyBibG9jayBudW1iZXIgZm9yIG5leHQgdGltZSAqLworCQloc2Nhbi0+eHNfYmxrID0g SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJCWlmIChCdWZmZXJJc1ZhbGlkKGhz Y2FuLT54c19jYnVmKSkKKwkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOworCisJCWhz Y2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19i bGspOwogCiAJCS8qCi0JCSAqIFBydW5lIHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3QgYWxy ZWFkeSBvbiB0aGlzIHBhZ2UKKwkJICogUHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBpbm5lZCBmb3Ig dGhlIGZpcnN0IHRpbWUKIAkJICovCi0JCWlmIChwcmV2X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikK LQkJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1 Zik7CisJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNf Y2J1Zik7CiAJfQogCisJLyogQXNzZXJ0IHRoYXQgdGhlIFRJRCdzIGJsb2NrIG51bWJlcidzIGJ1 ZmZlciBpcyBub3cgcGlubmVkICovCisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2Ni dWYpKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhzX2NidWYpID09IGhz Y2FuLT54c19ibGspOworCiAJLyogT2J0YWluIHNoYXJlLWxvY2sgb24gdGhlIGJ1ZmZlciBzbyB3 ZSBjYW4gZXhhbWluZSB2aXNpYmlsaXR5ICovCiAJTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1Ziwg QlVGRkVSX0xPQ0tfU0hBUkUpOwogCWdvdF9oZWFwX3R1cGxlID0gaGVhcF9ob3Rfc2VhcmNoX2J1 ZmZlcih0aWQsCkBAIC0xNzMsNiArMTkwLDQ5OSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUo c3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJcmV0dXJuIGdvdF9oZWFwX3R1cGxl OwogfQogCitzdGF0aWMgcGdfbm9pbmxpbmUgdm9pZAoraGVhcGFtX2JhdGNoX3Jld2luZChJbmRl eFNjYW5EZXNjIHNjYW4sIEJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmLAorCQkJCQlTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKgorCSAqIEhhbmRsZSBhIGNoYW5nZSBpbiB0aGUg c2NhbidzIGRpcmVjdGlvbi4KKwkgKgorCSAqIFJlbGVhc2UgZnV0dXJlIGJhdGNoZXMgcHJvcGVy bHksIHRvIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBjdXJyZW50IGJhdGNoCisJICogaXMgdGhlIG9u bHkgb25lIHdlIGxvYWRlZC4KKwkgKi8KKwl3aGlsZSAoYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2gg PiBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCArIDEpCisJeworCQkvKiByZWxlYXNlICJsYXRlciIg YmF0Y2hlcyBpbiByZXZlcnNlIG9yZGVyICovCisJCUluZGV4U2NhbkJhdGNoIGZiYXRjaDsKKwor CQlmYmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNo IC0gMSk7CisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGZiYXRjaCk7CisJCWJhdGNo cmluZ2J1Zi0+bmV4dEJhdGNoLS07CisJfQorCisJLyoKKwkgKiBSZW1lbWJlciB0aGUgbmV3IGRp cmVjdGlvbiwgYW5kIG1ha2Ugc3VyZSB0aGUgc2NhbiBpcyBub3QgbWFya2VkIGFzCisJICogImZp bmlzaGVkIiAod2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2gsIGJ1dCBu b3cgd2UgbmVlZAorCSAqIHRvIHN0YXJ0IG92ZXIpLgorCSAqLworCWJhdGNocmluZ2J1Zi0+ZGly ZWN0aW9uID0gZGlyZWN0aW9uOworCXNjYW4tPmZpbmlzaGVkID0gZmFsc2U7Cit9CisKK3N0YXRp YyBpbmxpbmUgSXRlbVBvaW50ZXIKK2hlYXBhbV9iYXRjaF9yZXR1cm5fdGlkKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJCQkJQmF0Y2hSaW5nSXRlbVBv cyAqc2NhblBvcykKK3sKKwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHNjYW5Qb3MpOwor CisJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKKwor CS8qIHNldCB0aGUgVElEIC8gaXR1cCBmb3IgdGhlIHNjYW4gKi8KKwlzY2FuLT54c19oZWFwdGlk ID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS5oZWFwVGlkOworCisJLyogcGxhaW4g aW5kZXggc2NhbnMgd2lsbCBoYXZlIGZsYWdzIGxlZnQgc2V0IHRvIDAgKi8KKwlzY2FuLT54c192 aXNpYmxlID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS5hbGxWaXNpYmxlOworCisJ aWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJc2Nhbi0+eHNfaXR1cCA9CisJCQkoSW5kZXhUdXBs ZSkgKHNjYW5CYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJCQkgIHNjYW5CYXRjaC0+aXRlbXNbc2Nh blBvcy0+aXRlbV0udHVwbGVPZmZzZXQpOworCisJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwor fQorCisvKgorICogaGVhcF9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkKKyAqCQlPYnRhaW4gdmlz aWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgZXZlcnkgVElEIGZyb20gY2FsbGVyJ3MgYmF0Y2guCisg Ki8KK3N0YXRpYyB2b2lkCitoZWFwX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKworCS8q CisJICogQmF0Y2gncyBidWZmZXIgcGluICh0aGUgb25lIGhlbGQgd2hlbiBhbWdldGJhdGNoIHJl dHVybmVkKSBtdXN0IHN0aWxsCisJICogYmUgaGVsZCB3aGVuIHdlJ3JlIGNhbGxlZC4gIEl0J2xs IGJlIHJlbGVhc2VkIGJ5IG91ciBjYWxsZXIgdXBvbiByZXR1cm4KKwkgKiAob3VyIGNhbGxlciB3 aWxsIGRlZmluaXRlbHkgZG8gdGhpcyBiZWNhdXNlIGluZGV4LW9ubHkgc2NhbnMgYWx3YXlzIHVz ZQorCSAqIGFuIE1WQ0Mgc25hcHNob3QpLgorCSAqCisJICogSW5kZXggdmFjdXVtaW5nIHdpbGwg YmxvY2sgb24gYWNxdWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cCBsb2NrIG9uCisJICogYmF0 Y2gncyBpbmRleCBwYWdlIGR1ZSB0byBvdXIgaG9sZGluZyBvbiB0byBhIHBpbiBvbiB0aGF0IHNh bWUgcGFnZS4KKwkgKiBDb3B5aW5nIHRoZSByZWxldmFudCB2aXNpYmlsaXR5IG1hcCBkYXRhIGlu dG8gb3VyIGxvY2FsIGNhY2hlIHN1ZmZpY2VzCisJICogdG8gcHJldmVudCB1bnNhZmUgY29uY3Vy cmVudCBUSUQgcmVjeWNsaW5nOiBpZiBhbnkgb2YgdGhlc2UgVElEcyBwb2ludAorCSAqIHRvIGRl YWQgaGVhcCB0dXBsZXMsIFZBQ1VVTSBjYW5ub3QgcG9zc2libHkgcmV0dXJuIGZyb20gYW1idWxr ZGVsZXRlCisJICogYW5kIG1hcmsgdGhlIHBvaW50ZWQtdG8gaGVhcCBwYWdlcyBhcyBhbGwtdmlz aWJsZS4gIFZBQ1VVTSBfY2FuXyBkbyBzbworCSAqIG9uY2Ugb3VyIGNhbGxlciByZWxlYXNlcyB0 aGUgYmF0Y2gncyBwaW4sIGJ1dCB0aGF0J3Mgb2theTsgd2UnbGwgYmUKKwkgKiB3b3JraW5nIG9m ZiBvZiBjYWNoZWQgdmlzaWJpbGl0eSBpbmZvIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIGRlYWQg VElEcworCSAqIGFyZSBOT1QgYWxsLXZpc2libGUuICBUaGUgc3Vic2VxdWVudCBoZWFwIGZldGNo ZXMgZm9yIHRoZXNlIGRlYWQgVElEcworCSAqIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGV5J3JlIG5v dCBkZWFkLXRvLWFsbCwgYnV0IHRoYXQncyBva2F5OyB0aGV5IHdvbid0CisJICogYmUgdmlzaWJs ZSB0byBfb3VyXyBNVkNDIHNuYXBzaG90LCBzbyBldmVyeXRoaW5nIHdvcmtzIG91dC4KKwkgKi8K KwlBc3NlcnQoQnVmZmVySXNWYWxpZChiYXRjaC0+YnVmKSk7CisKKwlmb3IgKGludCBpID0gYmF0 Y2gtPmZpcnN0SXRlbTsgaSA8PSBiYXRjaC0+bGFzdEl0ZW07IGkrKykKKwl7CisJCUJhdGNoTWF0 Y2hpbmdJdGVtICppdGVtID0gJmJhdGNoLT5pdGVtc1tpXTsKKwkJSXRlbVBvaW50ZXIgdGlkID0g Jml0ZW0tPmhlYXBUaWQ7CisKKwkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlv biwKKwkJCQkJCSAgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCSAgICZo c2Nhbi0+dm1idWYpKQorCQl7CisJCQlpdGVtLT5hbGxWaXNpYmxlID0gdHJ1ZTsKKwkJfQorCX0K K30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWhlYXBfYmF0Y2hfZ2V0bmV4dCAtIGdldCB0 aGUgbmV4dCBiYXRjaCBvZiBUSURzIGZyb20gYSBzY2FuCisgKgorICogQ2FsbGVkIHdoZW4gd2Ug bmVlZCB0byBsb2FkIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IGVudHJpZXMgdG8gcHJvY2VzcyBp bgorICogdGhlIGdpdmVuIGRpcmVjdGlvbi4KKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0IGJhdGNo IHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgaW5kZXggc2Nhbiwgb3IgTlVMTCB3aGVuCisgKiB0aGVy ZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIEFsc28g YXBwZW5kcyB0aGUKKyAqIHJldHVybmVkIGJhdGNoIHRvIHRoZSBlbmQgb2YgdGhlIHNjYW4ncyBi YXRjaCByaW5nIGJ1ZmZlci4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIEluZGV4 U2NhbkJhdGNoCitoZWFwX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQorewor CUluZGV4U2NhbkJhdGNoIGJhdGNoID0gTlVMTDsKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmlu Z2J1ZiBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBzY2FuLT5iYXRjaHJpbmdidWY7CisKKwkv KiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdp c3RlcmVkICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKwor CS8qCisJICogV2hlbiBjYWxsZXIgcHJvdmlkZXMgYSBwcmlvcmJhdGNoIGl0IGhhZCBiZXR0ZXIg YmUgZm9yIHRoZSBsYXN0IHZhbGlkCisJICogYmF0Y2ggY3VycmVudGx5IGluIHRoZSBiYXRjaCBy aW5nIGJ1ZmZlciAob3RoZXJ3aXNlIGFwcGVuZGluZyBhIG5ldworCSAqIGJhdGNoIHdvdWxkIHJl c3VsdCBiYXRjaGVzIHRoYXQgYXJlbid0IGluIHNjYW4gb3JkZXIsIHdoaWNoIGlzIHdyb25nKS4K KwkgKi8KKwlBc3NlcnQoIUlOREVYX1NDQU5fQkFUQ0hfRlVMTChzY2FuKSk7CisJQXNzZXJ0KCFw cmlvcmJhdGNoIHx8CisJCSAgIChJTkRFWF9TQ0FOX0JBVENIX0NPVU5UKHNjYW4pID4gMCAmJgor CQkJSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaHJpbmdidWYtPm5leHRCYXRjaCAtIDEpID09 IHByaW9yYmF0Y2gpKTsKKworCWlmIChzY2FuLT5maW5pc2hlZCkKKwkJcmV0dXJuIE5VTEw7CisK KwliYXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoKHNjYW4s IHByaW9yYmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJlY3Rpb24pOworCWlmIChiYXRjaCAhPSBO VUxMKQorCXsKKwkJLyogV2UgZ290IHRoZSBiYXRjaCBmcm9tIHRoZSBBTSAqLworCQlBc3NlcnQo YmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJ CXsKKwkJCS8qCisJCQkgKiBJbmRleC1vbmx5IHNjYW4uICBFYWdlcmx5IGZldGNoIHZpc2liaWxp dHkgaW5mbyBmcm9tIHZpc2liaWxpdHkKKwkJCSAqIG1hcCBmb3IgYWxsIGJhdGNoIGl0ZW0gVElE cy4KKwkJCSAqLworCQkJaGVhcF9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkoc2NhbiwgYmF0Y2gp OworCQl9CisKKwkJLyogQXBwZW5kIGJhdGNoIHRvIHRoZSBlbmQgb2YgcmluZyBidWZmZXIvd3Jp dGUgaXQgdG8gYnVmZmVyIGluZGV4ICovCisJCUlOREVYX1NDQU5fQkFUQ0hfQVBQRU5EKHNjYW4s IGJhdGNoKTsKKworCQkvKgorCQkgKiBJdCdzIG5vdyBzYWZlIHRvIGRyb3AgdGhlIGJhdGNoJ3Mg YnVmZmVyIHBpbiwgYXMgd2UndmUgcmVzb2x2ZWQgdGhlCisJCSAqIHZpc2liaWxpdHkgc3RhdHVz IG9mIGFsbCBvZiBpdHMgaXRlbXMgKGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKS4KKwkJICogU2Vl IGhlYXBfYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5IGNvbW1lbnRzIGZvciBhbiBleHBsYW5hdGlv bi4KKwkJICoKKwkJICogTm90ZTogV2UgY2FuJ3QgZHJvcCB0aGUgcGluIGhlcmUgKHdlIGRlbGF5 IGl0IHVudGlsIGFtZnJlZWJhdGNoIGlzCisJCSAqIGNhbGxlZCBmb3IgdGhlIGJhdGNoKSB3aGVu ZXZlciB0aGUgc2NhbiB1c2VzIGEgbm9uLU1WQ0Mgc25hcHNob3QuCisJCSAqIFRoaXMgaXMgZXhw bGFpbmVkIGZ1bGx5IGluIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwuCisJCSAqLworCQlBc3Nl cnQoc2Nhbi0+TVZDQ1NjYW4gPT0gSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKTsK KwkJaWYgKHNjYW4tPk1WQ0NTY2FuKQorCQl7CisJCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYp OworCQkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCX0KKwl9CisKKwkvKiB4c19oaXR1 cCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KKwlBc3NlcnQoIXNjYW4t PnhzX2hpdHVwKTsKKworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOworCisJcmV0 dXJuIGJhdGNoOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaGVhcGFtX2JhdGNoX2dl dG5leHRfdGlkIC0gZ2V0IG5leHQgVElEIGZyb20gYmF0Y2ggcmluZyBidWZmZXIKKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgaGVhcGFtJ3MgdmVyc2lvbiBvZiBnZXR0aW5nIHRoZSBu ZXh0IFRJRCBmcm9tIGFuCisgKiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaCBp bnRlcmZhY2UuICBJdCBpcyBpbXBsZW1lbnRlZCB1c2luZworICogdmFyaW91cyBpbmRleGJhdGNo LmMgdXRpbGl0eSByb3V0aW5lcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIEl0 ZW1Qb2ludGVyCitoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1 ZiA9IHNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJh dGNocmluZ2J1Zi0+c2NhblBvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBOVUxMOwor CisJLyogc2hvdWxkbid0IGdldCBoZXJlIHdpdGhvdXQgYmF0Y2hpbmcgKi8KKwliYXRjaF9hc3Nl cnRfYmF0Y2hlc192YWxpZChzY2FuKTsKKworCS8qIHhzX2hpdHVwIGlzIG5vdCBzdXBwb3J0ZWQg YnkgYW1nZXRiYXRjaCBzY2FucyAqLworCUFzc2VydCghc2Nhbi0+eHNfaGl0dXApOworCisJLyog SW5pdGlhbGl6ZSBkaXJlY3Rpb24gb24gZmlyc3QgY2FsbCAqLworCWlmIChiYXRjaHJpbmdidWYt PmRpcmVjdGlvbiA9PSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbikKKwkJYmF0Y2hyaW5nYnVmLT5k aXJlY3Rpb24gPSBkaXJlY3Rpb247CisKKwlpZiAodW5saWtlbHkoYmF0Y2hyaW5nYnVmLT5kaXJl Y3Rpb24gIT0gZGlyZWN0aW9uKSkKKwl7CisJCS8qIFdlIG1heSBjaGFuZ2UgZGlyZWN0aW9uIGFm dGVyIHJlYWRpbmcgdGhlIGxhc3QgYmF0Y2guICovCisJCXNjYW4tPmZpbmlzaGVkID0gZmFsc2U7 CisJfQorCisJLyoKKwkgKiBUcnkgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbiBpbiB0aGUgY3VycmVu dCBiYXRjaC4gSWYgdGhhdCBkb2Vzbid0CisJICogc3VjY2VlZCwgaXQgbWVhbnMgd2UgZG9uJ3Qg aGF2ZSBtb3JlIGl0ZW1zIGluIGl0LCBhbmQgd2UgbmVlZCB0bworCSAqIGFkdmFuY2UgdG8gdGhl IG5leHQgb25lIChpbiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uKS4KKwkgKi8KKwlpZiAoSU5ERVhf U0NBTl9CQVRDSF9MT0FERUQoc2Nhbiwgc2NhblBvcy0+YmF0Y2gpKQorCXsKKwkJc2NhbkJhdGNo ID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwkJaWYgKGluZGV4 X2JhdGNocG9zX2FkdmFuY2Uoc2NhbkJhdGNoLCBzY2FuUG9zLCBkaXJlY3Rpb24pKQorCQkJcmV0 dXJuIGhlYXBhbV9iYXRjaF9yZXR1cm5fdGlkKHNjYW4sIHNjYW5CYXRjaCwgc2NhblBvcyk7CisJ fQorCisJaWYgKHVubGlrZWx5KGJhdGNocmluZ2J1Zi0+ZGlyZWN0aW9uICE9IGRpcmVjdGlvbikp CisJeworCQkvKiBYWFggc2hvdWxkbid0IGhlYXBhbV9iYXRjaF9yZXdpbmQgdXBkYXRlIHRoZSBz Y2FuUG9zIHRvbz8gKi8KKwkJaGVhcGFtX2JhdGNoX3Jld2luZChzY2FuLCBiYXRjaHJpbmdidWYs IGRpcmVjdGlvbik7CisKKwkJLyoKKwkJICogWFhYIEl0IHNlZW1zIGEgYml0IHdlaXJkIHRvIHVw ZGF0ZSBqdXN0IHRoZSBiYXRjaCBwYXJ0IG9mIHRoZQorCQkgKiBzY2FuUG9zLiBEb2Vzbid0IGl0 IG1ha2UgaXQgcmF0aGVyIHdyb25nLCB3aXRoIHRoZSBpdGVtIHN0aWxsIHNldAorCQkgKiBmcm9t IHRoZSBvcmlnaW5hbCBiYXRjaD8gVGhlIG5leHQgY29kZSBibG9jayBzZXRzIGl0ZW0gdG9vLiBT byBpdAorCQkgKiBzZWVtcyB3ZSdyZSBkb2luZyB0aGlzIG9ubHkgdG8gImZha2UiIHRoZSBiYXRj aCwgYW5kIHRoZW4gdGhlIG5leHQKKwkJICogYmxvY2sgd2lsbCBhZHZhbmNlIGJhdGNoIGFuZCBy ZXNldCB0aGUgaXRlbS4gSXQncyBjb25mdXNpbmcsIHdvcnRoCisJCSAqIGRvY3VtZW50aW5nLiBN YXliZSB3ZSBzaG91bGQgc2V0IGl0ZW09LTE/CisJCSAqLworCQlzY2FuUG9zLT5iYXRjaCA9IGJh dGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMTsKKwl9CisKKwkvKgorCSAqIFJhbiBvdXQgb2YgaXRl bXMgZnJvbSBzY2FuQmF0Y2guICBUcnkgdG8gYWR2YW5jZSBpdCB0byBuZXh0IGJhdGNoLgorCSAq LworCWlmIChJTkRFWF9TQ0FOX0JBVENIX0xPQURFRChzY2FuLCBzY2FuUG9zLT5iYXRjaCArIDEp KQorCXsKKwkJc2NhbkJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzY2FuUG9zLT5iYXRj aCArIDEpOworCX0KKwllbHNlIGlmICgoc2NhbkJhdGNoID0gaGVhcF9iYXRjaF9nZXRuZXh0KHNj YW4sIHNjYW5CYXRjaCwgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl7CisJCS8qIENhbGxlZCBhbWdl dGJhdGNoIGFnYWluLCBsb2FkaW5nIG5ldyBzY2FuQmF0Y2ggaW50byByaW5nIGJ1ZmZlciAqLwor CX0KKwllbHNlCisJeworCQkvKgorCQkgKiBUaGVyZSBhcmUgbm8gbW9yZSBiYXRjaGVzIHRvIGJl IGxvYWRlZCBpbiB0aGUgY3VycmVudCBzY2FuCisJCSAqIGRpcmVjdGlvbi4gIERlZmVuc2l2ZWx5 IHJlc2V0IHRoZSByZWFkIHBvc2l0aW9uLgorCQkgKi8KKwkJYmF0Y2hfcmVzZXRfcG9zKHNjYW5Q b3MpOworCQlzY2FuLT5maW5pc2hlZCA9IHRydWU7CisKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ LyogUG9zaXRpb24gc2NhblBvcyB0byB0aGUgc3RhcnQgb2YgbmV3IHNjYW5CYXRjaCAqLworCWlu ZGV4X2JhdGNocG9zX25ld2JhdGNoKHNjYW5CYXRjaCwgc2NhblBvcywgZGlyZWN0aW9uKTsKKwlB c3NlcnQoSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzY2FuUG9zLT5iYXRjaCkgPT0gc2NhbkJhdGNo KTsKKworCS8qIEZyZWUgbm93LXVubmVlZGVkIG9sZGVyIGJhdGNoL3ByaW9yIHNjYW5CYXRjaCAq LworCWlmIChzY2FuUG9zLT5iYXRjaCAhPSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCkKKwl7CisJ CUluZGV4U2NhbkJhdGNoIGhlYWRCYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwKKwkJCQkJ CQkJCQkJCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisKKwkJLyogRnJlZSB0aGUgaGVhZCBi YXRjaCAoZXhjZXB0IHdoZW4gaXQncyBtYXJrQmF0Y2gpICovCisJCXRhYmxlYW1fdXRpbF9mcmVl X2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CisKKwkJLyoKKwkJICogSW4gYW55IGNhc2UsIHJlbW92 ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmluZyBidWZmZXIsIGV2ZW4gaWYgd2Uga2VwdAorCQkgKiBp dCBmb3IgbWFyay9yZXN0b3JlCisJCSAqLworCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCsrOwor CisJCS8qIHdlIGNhbid0IHNraXAgYW55IGJhdGNoZXMgKi8KKwkJQXNzZXJ0KGJhdGNocmluZ2J1 Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKwl9CisKKwlyZXR1cm4gaGVhcGFtX2Jh dGNoX3JldHVybl90aWQoc2Nhbiwgc2NhbkJhdGNoLCBzY2FuUG9zKTsKK30KKworLyogLS0tLS0t LS0tLS0tLS0tLQorICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhl YXAgdHVwbGUKKyAqCisgKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29j aWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKKyAqIHJlY2VudGx5IGZldGNoZWQgYnkgb3Vy IGNhbGxlciBpbiBzY2FuLT54c19oZWFwdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUKKyAqIG1hdGNo aW5nIHR1cGxlcyBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0 dXBsZSBiZWNhdXNlCisgKiBvZiBIT1QgY2hhaW5zLCBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1W Q0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUKKyAqIGZvciBtb3JlIHRoYW4gb25l IHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29u dGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkLiAgVGhlIHBpbiBtdXN0IGJlCisgKiBkcm9w cGVkIGVsc2V3aGVyZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGJvb2wKK2lu ZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkK K3sKKwlib29sCQlhbGxfZGVhZCA9IGZhbHNlOworCWJvb2wJCWZvdW5kOworCisJZm91bmQgPSBo ZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVh cHRpZCwKKwkJCQkJCQkJCSBzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKKwkJCQkJCQkJCSAmc2Nh bi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKKworCWlmIChmb3VuZCkKKwkJcGdzdGF0 X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7CisKKwkvKgorCSAqIElmIHdl IHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9ubHkgZGVhZCB0dXBsZXMsIHJl bWVtYmVyIGl0CisJICogZm9yIGxhdGVyLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBpbiByZWNv dmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlCisJICogTVZDQyB0byBkbyBzby4gIFNlZSBjb21t ZW50cyBpbiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgorCSAqLworCWlmICghc2Nhbi0+eGFjdFN0 YXJ0ZWRJblJlY292ZXJ5KQorCXsKKwkJaWYgKHNjYW4tPmJhdGNocmluZ2J1ZikKKwkJeworCQkJ aWYgKGFsbF9kZWFkKQorCQkJCXRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtKHNjYW4pOwor CQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRlbGwgYW1nZXR0dXBsZS1iYXNlZCBpbmRl eCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQKKwkJCSAqICh0aGlzIHdpbGwgdGFr ZSBlZmZlY3QgaW4gdGhlIG5leHQgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpCisJCQkgKi8K KwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwkJfQorCX0KKworCXJldHVy biBmb3VuZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWhlYXBhbV9pbmRleF9nZXRu ZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCisgKiBUaGUgcmVz dWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBz bmFwc2hvdCB3YXMKKyAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3Rv cmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KKyAqCisgKiBPbiBzdWNjZXNzLCByZXNvdXJjZXMg KGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwgYmUKKyAq IGRyb3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxhdGVyIGNhbGwgdG8gaW5k ZXhfZW5kc2NhbikuCisgKgorICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVj aGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKKyAqIHNjYW4ga2V5cyBpZiByZXF1 aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCisgKiBl bm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2Fz ZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGJvb2wKK2hlYXBhbV9pbmRleF9n ZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK KwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpo c2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCUl0ZW1Q b2ludGVyIHRpZCA9IE5VTEw7CisKKwlmb3IgKDs7KQorCXsKKwkJaWYgKCFzY2FuLT54c19oZWFw X2NvbnRpbnVlKQorCQl7CisJCQkvKgorCQkJICogU2NhbnMgdGhhdCB1c2UgYW4gYW1nZXRiYXRj aCBpbmRleCBBTSBhcmUgbWFuYWdlZCBieSBoZWFwYW0ncworCQkJICogaW5kZXggc2NhbiBtYW5h Z2VyLiAgVGhpcyBnaXZlcyBoZWFwYW0gdGhlIGFiaWxpdHkgdG8gcmVhZCBoZWFwCisJCQkgKiB0 dXBsZXMgaW4gYSBmbGV4aWJsZSBvcmRlciB0aGF0IGlzIGF0dHVuZWQgdG8gYm90aCBjb3N0cyBh bmQKKwkJCSAqIGJlbmVmaXRzIG9uIHRoZSBoZWFwYW0gYW5kIHRhYmxlIEFNIHNpZGUuCisJCQkg KgorCQkJICogU2NhbnMgdGhhdCB1c2UgYW4gYW1nZXR0dXBsZSBpbmRleCBBTSBzaW1wbHkgY2Fs bCB0aHJvdWdoIHRvCisJCQkgKiBpbmRleF9nZXRuZXh0X3RpZCB0byBnZXQgdGhlIG5leHQgVElE IHJldHVybmVkIGJ5IGluZGV4IEFNLiBUaGUKKwkJCSAqIHByb2dyZXNzIG9mIHRoZSBzY2FuIHdp bGwgYmUgdW5kZXIgdGhlIGNvbnRyb2wgb2YgaW5kZXggQU0gKHdlCisJCQkgKiBqdXN0IHBhc3Mg aXQgdGhyb3VnaCBhIGRpcmVjdGlvbiB0byBnZXQgdGhlIG5leHQgdHVwbGUgaW4pLCBzbworCQkJ ICogd2UgY2Fubm90IHJlb3JkZXIgYW55IHdvcmsuCisJCQkgKi8KKwkJCWlmIChzY2FuLT5iYXRj aHJpbmdidWYgIT0gTlVMTCkKKwkJCQl0aWQgPSBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoc2Nh biwgZGlyZWN0aW9uKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQl0aWQgPSBpbmRleF9nZXRuZXh0X3Rp ZChzY2FuLCBkaXJlY3Rpb24pOworCisJCQkJLyoKKwkJCQkgKiBtYWtlIHN1cmUgdG8gc2V0IHRo ZSB4c192aXNpYmxlIGZsYWcsIGp1c3QgbGlrZSBpdCdzIGRvbmUKKwkJCQkgKiBpbiBoZWFwYW1f YmF0Y2hfZ2V0bmV4dF90aWQKKwkJCQkgKi8KKwkJCQlpZiAodGlkICE9IE5VTEwgJiYgc2Nhbi0+ eHNfd2FudF9pdHVwKQorCQkJCQlzY2FuLT54c192aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUoc2Nh bi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpLAorCQkJCQkJCQkJCQkJCSAgJmhzY2FuLT52bWJ1Zik7CisJCQl9CisKKwkJCS8qIElm IHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCisJCQlpZiAodGlkID09 IE5VTEwpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Ig b25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgorCQkgKiBJZiB3 ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQg ZnJvbQorCQkgKiB0aGUgaW5kZXguCisJCSAqLworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlk KCZzY2FuLT54c19oZWFwdGlkKSk7CisJCWlmICghc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJ CQkvKiBQbGFpbiBpbmRleCBzY2FuICovCisJCQlpZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBz bG90KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBJ bmRleC1vbmx5IHNjYW4uCisJCQkgKgorCQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2gg aWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCisJCQkgKiB3aGljaCBhbGwgdHVw bGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAorCQkJICog d2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEK KwkJCSAqIHNvdXJjZS4KKwkJCSAqCisJCQkgKiBOb3RlIG9uIE1lbW9yeSBPcmRlcmluZyBFZmZl Y3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcworCQkJICogbm90IGxvY2sgdGhlIHZp c2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlCisJCQkgKiBy ZWFkIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBpdCBjYW4ndCBiZSBz dGFsZQorCQkJICogZW5vdWdoIHRvIG1hdHRlci4KKwkJCSAqCisJCQkgKiBXZSBuZWVkIHRvIGRl dGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0CisJCQkgKiBhd2F5 LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdlIGJ1dCBub3QK KwkJCSAqIHZpc2libGUuIFRoZSByZWFkaW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2lu ZyBhIHNoYXJlZAorCQkJICogbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKSBpcyBzZXJpYWxpemVk IHdpdGggdGhlIGluc2VydCBvZiB0aGUKKwkJCSAqIFRJRCBpbnRvIHRoZSBpbmRleCAodXNpbmcg YW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4CisJCQkgKiBidWZmZXIpLiBCZWNhdXNlIHRo ZSBWTSBiaXQgaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhlCisJCQkgKiBpbmRleCwgYW5k IGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsCisJCQkg KiBtZW1vcnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZSBjbGVhcmVkIGJpdCBpZiB3 ZSBzZWUgYQorCQkJICogcmVjZW50bHktaW5zZXJ0ZWQgVElELgorCQkJICoKKwkJCSAqIERlbGV0 ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhcgor CQkJICogb3V0IHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRl bGV0ZSBpcyBub3QKKwkJCSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3 ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBpcworCQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93 ZXZlciwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlCisJCQkgKiByaWdodCBhd2F5LCBi ZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRoZQorCQkJICogZGVsZXRp bmcgdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3Vy CisJCQkgKiB0cmFuc2FjdGlvbikuIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0g YnVmZmVyIHdpbGwKKwkJCSAqIGhhdmUgYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUg YmFycmllcikgYWZ0ZXIgY2xlYXJpbmcKKwkJCSAqIHRoZSBiaXQuIEFuZCBmb3IgdXMgdG8gaGF2 ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlCisJCQkgKiBkZWxldGluZyB0cmFuc2FjdGlv biAobWFraW5nIHRoZSB0dXBsZSBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUKKwkJCSAqIGFjcXVp cmVkIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkCisJCQkg KiBiYXJyaWVyLgorCQkJICoKKwkJCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNv bXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0bworCQkJICogbG9jayB0aGUgVk0gYnVmZmVyLCB3 aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgorCQkJICovCisJCQlpZiAo IXNjYW4tPnhzX3Zpc2libGUpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBSYXRzLCB3ZSBoYXZlIHRv IHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCisJCQkJICovCisJCQkJaWYgKHNj YW4tPmluc3RydW1lbnQpCisJCQkJCXNjYW4tPmluc3RydW1lbnQtPm5oZWFwZmV0Y2hlcysrOwor CisJCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQorCQkJCQljb250aW51ZTsJ Lyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KKworCQkJCUV4ZWND bGVhclR1cGxlKHNsb3QpOworCisJCQkJLyoKKwkJCQkgKiBPbmx5IE1WQ0Mgc25hcHNob3RzIGFy ZSBzdXBwb3J0ZWQgd2l0aCBzdGFuZGFyZCBpbmRleC1vbmx5CisJCQkJICogc2NhbnMsIHNvIHRo ZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGtlZXAgZm9sbG93aW5nIHRoZSBIT1QKKwkJCQkgKiBj aGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMgYmVlbiBmb3VuZC4gIE90aGVyIGNhbGxlcnMK KwkJCQkgKiAoY3VycmVudGx5IG9ubHkgc2VsZnVuY3MuYykgdXNlIFNuYXBzaG90Tm9uVmFjdXVt YWJsZSwgYW5kCisJCQkJICogd2FudCB1cyB0byBhc3N1bWUgdGhhdCBqdXN0IGhhdmluZyBvbmUg dmlzaWJsZSB0dXBsZSBpbiB0aGUKKwkJCQkgKiBob3QgY2hhaW4gaXMgYWx3YXlzIGdvb2QgZW5v dWdoLgorCQkJCSAqLworCQkJCUFzc2VydCghKHNjYW4tPnhzX2hlYXBfY29udGludWUgJiYKKwkJ CQkJCSBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkpKTsKKworCQkJCS8qCisJCQkJ ICogTm90ZTogYXQgdGhpcyBwb2ludCB3ZSBhcmUgaG9sZGluZyBhIHBpbiBvbiB0aGUgaGVhcCBw YWdlLAorCQkJCSAqIGFzIHJlY29yZGVkIGluIEluZGV4RmV0Y2hIZWFwRGF0YS54c19jYnVmLiAg V2UgY291bGQKKwkJCQkgKiByZWxlYXNlIHRoYXQgcGluIG5vdywgYnV0IGl0J3Mgbm90IGNsZWFy IHdoZXRoZXIgaXQncyBhIHdpbgorCQkJCSAqIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5kZXggZW50 cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0IHRvCisJCQkJICogdGhlIHNhbWUgaGVhcCBwYWdlLgor CQkJCSAqLworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogV2UgZGlkbid0IGFj Y2VzcyB0aGUgaGVhcCwgc28gd2UnbGwgbmVlZCB0byB0YWtlIGEKKwkJCQkgKiBwcmVkaWNhdGUg bG9jayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvCisJCQkJICogdGhh dCBhdCBwYWdlIGxldmVsLgorCQkJCSAqLworCQkJCVByZWRpY2F0ZUxvY2tQYWdlKGhzY2FuLT54 c19iYXNlLnJlbCwKKwkJCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJ CQkJCQkJCSAgc2Nhbi0+eHNfc25hcHNob3QpOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJ fQorCX0KKworCXJldHVybiBmYWxzZTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDYWxs YmFja3MgZm9yIG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1cGxlcyBm b3IgaGVhcCBBTQpAQCAtNzUzLDcgKzEyNjMsOCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3Jf Y2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCXRhYmxlU2Nh biA9IE5VTEw7CiAJCWhlYXBTY2FuID0gTlVMTDsKLQkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5z Y2FuKE9sZEhlYXAsIE9sZEluZGV4LCBTbmFwc2hvdEFueSwgTlVMTCwgMCwgMCk7CisJCWluZGV4 U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgZmFsc2UsIFNuYXBzaG90 QW55LAorCQkJCQkJCQkJTlVMTCwgMCwgMCk7CiAJCWluZGV4X3Jlc2NhbihpbmRleFNjYW4sIE5V TEwsIDAsIE5VTEwsIDApOwogCX0KIAllbHNlCkBAIC03OTAsNyArMTMwMSw4IEBAIGhlYXBhbV9y ZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hl YXAsCiAKIAkJaWYgKGluZGV4U2NhbiAhPSBOVUxMKQogCQl7Ci0JCQlpZiAoIWluZGV4X2dldG5l eHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJCWlmICgh aGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChpbmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LAorCQkJCQkJCQkJCSAgIHNsb3QpKQogCQkJCWJyZWFrOwogCiAJCQkvKiBTaW5jZSB3ZSB1c2Vk IG5vIHNjYW4ga2V5cywgc2hvdWxkIG5ldmVyIG5lZWQgdG8gcmVjaGVjayAqLwpAQCAtMjY0Nyw2 ICszMTU5LDcgQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0g ewogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbiwKIAkuaW5k ZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4X2ZldGNo X2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCisJLmluZGV4X2dldG5leHRfc2xvdCA9IGhl YXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QsCiAJLmluZGV4X2ZldGNoX3R1cGxlID0gaGVhcGFtX2lu ZGV4X2ZldGNoX3R1cGxlLAogCiAJLnR1cGxlX2luc2VydCA9IGhlYXBhbV90dXBsZV9pbnNlcnQs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5lNmQ2ODFiNDAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9IFwKIAlh bWFwaS5vIFwKIAlhbXZhbGlkYXRlLm8gXAogCWdlbmFtLm8gXAotCWluZGV4YW0ubworCWluZGV4 YW0ubyBcCisJaW5kZXhiYXRjaC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2Vu ZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXggYTI5YmU2ZjQ2Li41NTZh NzJmYjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC04OSw2ICs4OSw4IEBAIFJlbGF0 aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5v cmRlcmJ5cykKIAlzY2FuLT54c19zbmFwc2hvdCA9IEludmFsaWRTbmFwc2hvdDsJLyogY2FsbGVy IG11c3QgaW5pdGlhbGl6ZSB0aGlzICovCiAJc2Nhbi0+bnVtYmVyT2ZLZXlzID0gbmtleXM7CiAJ c2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyA9IG5vcmRlcmJ5czsKKwlzY2FuLT5iYXRjaHJpbmdidWYg PSBOVUxMOwkvKiBzZXQgbGF0ZXIgZm9yIGFtZ2V0YmF0Y2ggY2FsbGVycyAqLworCXNjYW4tPnhz X3dhbnRfaXR1cCA9IGZhbHNlOyAvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAog CS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQgaXQgd29uJ3QgZ2V0 IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAgLTEwMiw4ICsxMDQsNiBAQCBSZWxhdGlvbkdldElu ZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiAJZWxzZQogCQlzY2FuLT5vcmRlckJ5RGF0YSA9IE5VTEw7CiAKLQlzY2FuLT54c193YW50X2l0 dXAgPSBmYWxzZTsgLyogbWF5IGJlIHNldCBsYXRlciAqLwotCiAJLyoKIAkgKiBEdXJpbmcgcmVj b3Zlcnkgd2UgaWdub3JlIGtpbGxlZCB0dXBsZXMgYW5kIGRvbid0IGJvdGhlciB0byBraWxsIHRo ZW0KIAkgKiBlaXRoZXIuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgeG1pbiBvbiB0aGUgcHJpbWFy eSBub2RlIGNvdWxkIGVhc2lseSBiZQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIHN5c3RhYmxlX2JlZ2lu c2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBu b3QgaW4gaW5kZXgiKTsKIAkJfQogCi0JCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2Fu KGhlYXBSZWxhdGlvbiwgaXJlbCwKKwkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4o aGVhcFJlbGF0aW9uLCBpcmVsLCBmYWxzZSwKIAkJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5r ZXlzLCAwKTsKIAkJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBO VUxMLCAwKTsKIAkJc3lzc2Nhbi0+c2NhbiA9IE5VTEw7CkBAIC01MTcsNyArNTE3LDggQEAgc3lz dGFibGVfZ2V0bmV4dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwp CiAJewotCQlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIHN5c3Nj YW4tPnNsb3QpKQogCQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03MDcsNyArNzA4LDcg QEAgc3lzdGFibGVfYmVnaW5zY2FuX29yZGVyZWQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJ ZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4gaW5kZXgiKTsKIAl9CiAKLQlzeXNzY2FuLT5p c2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sCisJc3lz c2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9u LCBmYWxzZSwKIAkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtleXMsIDApOwogCWluZGV4X3Jl c2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CiAJc3lzc2Nhbi0+ c2NhbiA9IE5VTEw7CkBAIC03MzQsNyArNzM1LDcgQEAgc3lzdGFibGVfZ2V0bmV4dF9vcmRlcmVk KFN5c1NjYW5EZXNjIHN5c3NjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCUhlYXBUdXBs ZQlodHVwID0gTlVMTDsKIAogCUFzc2VydChzeXNzY2FuLT5pcmVsKTsKLQlpZiAoaW5kZXhfZ2V0 bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCWlm ICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lz c2Nhbi0+c2xvdCkpCiAJCWh0dXAgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHN5c3NjYW4tPnNs b3QsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFNlZSBub3RlcyBpbiBzeXN0YWJsZV9nZXRuZXh0ICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCA0ZWQwNTA4YzYuLjU3ZGE2OGQ4YSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0yNCw5ICsyNCw3IEBACiAgKgkJaW5k ZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUgLSBpbml0aWFsaXplIHBhcmFsbGVsIHNjYW4KICAq CQlpbmRleF9wYXJhbGxlbHJlc2NhbiAgLSAocmUpc3RhcnQgYSBwYXJhbGxlbCBzY2FuIG9mIGFu IGluZGV4CiAgKgkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsIC0gam9pbiBwYXJhbGxlbCBpbmRl eCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBnZXQgdGhlIG5leHQgVElEIGZyb20gYSBz Y2FuCi0gKgkJaW5kZXhfZmV0Y2hfaGVhcAkJLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVw bGUKLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QJLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNj YW4KKyAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGFtZ2V0dHVwbGUgdGFibGUgQU0gaGVscGVyIHJv dXRpbmUKICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBmcm9tIGEgc2Nhbgog ICoJCWluZGV4X2J1bGtfZGVsZXRlCS0gYnVsayBkZWxldGlvbiBvZiBpbmRleCB0dXBsZXMKICAq CQlpbmRleF92YWN1dW1fY2xlYW51cAktIHBvc3QtZGVsZXRpb24gY2xlYW51cCBvZiBhbiBpbmRl eApAQCAtMjU1LDYgKzI1Myw3IEBAIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sCiBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogCQkJCVJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJYm9vbCB4c193YW50X2l0 dXAsCiAJCQkJU25hcHNob3Qgc25hcHNob3QsCiAJCQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u ICppbnN0cnVtZW50LAogCQkJCWludCBua2V5cywgaW50IG5vcmRlcmJ5cykKQEAgLTI4MSw3ICsy ODAsMTMgQEAgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkgKi8KIAlz Y2FuLT5oZWFwUmVsYXRpb24gPSBoZWFwUmVsYXRpb247CiAJc2Nhbi0+eHNfc25hcHNob3QgPSBz bmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KTsKKwlz Y2FuLT5maW5pc2hlZCA9IGZhbHNlOwogCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50Owor CXNjYW4tPnhzX3dhbnRfaXR1cCA9IHhzX3dhbnRfaXR1cDsKKworCWlmIChpbmRleFJlbGF0aW9u LT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQorCQlpbmRleF9iYXRjaHNjYW5faW5pdChz Y2FuKTsKIAogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICov CiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcFJlbGF0 aW9uKTsKQEAgLTMxMiw2ICszMTcsOCBAQCBpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9u IGluZGV4UmVsYXRpb24sCiAJICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCiAJICovCiAJ c2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ1Nu YXBzaG90KHNuYXBzaG90KTsKKwlzY2FuLT5maW5pc2hlZCA9IGZhbHNlOwogCXNjYW4tPmluc3Ry dW1lbnQgPSBpbnN0cnVtZW50OwogCiAJcmV0dXJuIHNjYW47CkBAIC0zODAsNiArMzg3LDE2IEBA IGluZGV4X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZh bHNlOwogCisJLyoKKwkgKiBiYXRjaHJpbmdidWYgc2hvdWxkbid0IGJlIG1hcmtlZCBmaW5pc2hl ZCAobXVzdCBtYWtlIHN1cmUgdGhhdAorCSAqIGluZGV4X2JhdGNoc2Nhbl9yZXNldCBkb2Vzbid0 IHNlZSB0aGlzLCBzaW5jZSBpZiBpdCBpcyB0aGVuCisJICogaW5kZXhhbV91dGlsX2JhdGNoX3Jl bGVhc2Ugd2lsbCBiZSBhZmZlY3RlZCkKKwkgKi8KKwlzY2FuLT5maW5pc2hlZCA9IGZhbHNlOwor CisJaWYgKHNjYW4tPmJhdGNocmluZ2J1ZikKKwkJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4s IHRydWUpOworCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzY2FuKHNjYW4s IGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRlcmJ5cywgbm9yZGVyYnlzKTsKIH0KQEAgLTM5 NCw2ICs0MTEsMTAgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9D SEVDS1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1lbmRzY2FuKTsKIAorCS8qIENsZWFudXAg YmF0Y2hpbmcsIHNvIHRoYXQgdGhlIEFNIGNhbiByZWxlYXNlIHBpbnMgYW5kIHNvIG9uLiAqLwor CWlmIChzY2FuLT5iYXRjaHJpbmdidWYpCisJCWluZGV4X2JhdGNoc2Nhbl9lbmQoc2Nhbik7CisK IAkvKiBSZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nl c3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJewpAQCAtNDIyLDkgKzQ0MywxMCBA QCB2b2lkCiBpbmRleF9tYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlTQ0FOX0NIRUNL UzsKLQlDSEVDS19TQ0FOX1BST0NFRFVSRShhbW1hcmtwb3MpOworCUNIRUNLX1NDQU5fUFJPQ0VE VVJFKGFtcG9zcmVzZXQpOwogCi0Jc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtbWFy a3BvcyhzY2FuKTsKKwkvKiBPbmx5IGFtZ2V0YmF0Y2ggaW5kZXggQU1zIHN1cHBvcnQgbWFyayBh bmQgcmVzdG9yZSAqLworCWluZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhzY2FuKTsKIH0KIAogLyog LS0tLS0tLS0tLS0tLS0tLQpAQCAtNDQ4LDcgKzQ3MCw4IEBAIGluZGV4X3Jlc3RycG9zKEluZGV4 U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQoSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3Qp KTsKIAogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcmVzdHJwb3MpOwor CUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0Y2gpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJF KGFtcG9zcmVzZXQpOwogCiAJLyogcmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMp IGZyb20gdGFibGUgYWNjZXNzZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQpAQCAtNDU3 LDcgKzQ4MCw3IEBAIGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlzY2FuLT5r aWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFw X2NvbnRpbnVlID0gZmFsc2U7CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1y ZXN0cnBvcyhzY2FuKTsKKwlpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3Moc2Nhbik7CiB9CiAK IC8qCkBAIC01NzksNiArNjAyLDkgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuKQogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4X2ZldGNoX3Jl c2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKKwlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmKQorCQlp bmRleF9iYXRjaHNjYW5fcmVzZXQoc2NhbiwgdHJ1ZSk7CisKIAkvKiBhbXBhcmFsbGVscmVzY2Fu IGlzIG9wdGlvbmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFNICovCiAJaWYg KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuICE9IE5VTEwp CiAJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuKHNjYW4p OwpAQCAtNTkxLDYgKzYxNyw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbikKICAqLwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0 aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJIGJvb2wgeHNfd2FudF9pdHVw LAogCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCSBp bnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBz Y2FuKQpAQCAtNjEyLDcgKzYzOSwxMyBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRp b24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiAJICovCiAJc2Nhbi0+aGVhcFJlbGF0aW9u ID0gaGVhcHJlbDsKIAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4tPk1WQ0NT Y2FuID0gSXNNVkNDU25hcHNob3Qoc25hcHNob3QpOworCXNjYW4tPmZpbmlzaGVkID0gZmFsc2U7 CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CisJc2Nhbi0+eHNfd2FudF9pdHVwID0g eHNfd2FudF9pdHVwOworCisJaWYgKGluZGV4cmVsLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBO VUxMKQorCQlpbmRleF9iYXRjaHNjYW5faW5pdChzY2FuKTsKIAogCS8qIHByZXBhcmUgdG8gZmV0 Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFi bGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCk7CkBAIC02MjEsMTAgKzY1NCwxNCBAQCBpbmRl eF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWws CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4X2dldG5leHRfdGlkIC0gZ2V0IHRo ZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgorICogaW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdldHR1cGxl IGludGVyZmFjZQogICoKICAqIFRoZSByZXN1bHQgaXMgdGhlIG5leHQgVElEIHNhdGlzZnlpbmcg dGhlIHNjYW4ga2V5cywKICAqIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgZXhp c3QuCisgKgorICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGFibGUgQU0ncyBpbmRl eF9nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24sCisgKiBhbmQgb25seSBnaXZlbiBhbiBpbmRl eCBBTSB0aGF0IHN1cHBvcnRzIHRoZSBzaW5nbGUtdHVwbGUgYW1nZXR0dXBsZQorICogaW50ZXJm YWNlLgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjY3LDk3ICs3 MDQsNiBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uKQogCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKIH0KIAotLyogLS0tLS0t LS0tLS0tLS0tLQotICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhl YXAgdHVwbGUKLSAqCi0gKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29j aWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKLSAqIHJlY2VudGx5IGZldGNoZWQgYnkgaW5k ZXhfZ2V0bmV4dF90aWQsIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMKLSAqIGV4 aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2Ug b2YgSE9UIGNoYWlucywKLSAqIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBp dCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgbW9yZSB0aGFuCi0gKiBvbmUgc3VjaCB0dXBsZSB0 byBleGlzdC4pCi0gKgotICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBo ZWFwIHR1cCBpcyBwaW5uZWQgKHRoZSBwaW4gd2lsbCBiZQotICogZHJvcHBlZCBpbiBhIGZ1dHVy ZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0g KiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNr LCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVk LiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3Vn aCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgot ICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRleF9mZXRjaF9oZWFwKEluZGV4U2Nh bkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JYm9vbAkJYWxsX2RlYWQgPSBm YWxzZTsKLQlib29sCQlmb3VuZDsKLQotCWZvdW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUo c2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKLQkJCQkJCQkJCXNjYW4tPnhz X3NuYXBzaG90LCBzbG90LAotCQkJCQkJCQkJJnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxf ZGVhZCk7Ci0KLQlpZiAoZm91bmQpCi0JCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmlu ZGV4UmVsYXRpb24pOwotCi0JLyoKLQkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWlu IGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4Ci0JICogQU0gdG8ga2lsbCBp dHMgZW50cnkgZm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQK LQkgKiBhbWdldHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBk byB0aGlzIHdoZW4gaW4KLQkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0Mg dG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4KLQkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgot CSAqLwotCWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3By aW9yX3R1cGxlID0gYWxsX2RlYWQ7Ci0KLQlyZXR1cm4gZm91bmQ7Ci19Ci0KLS8qIC0tLS0tLS0t LS0tLS0tLS0KLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJv bSBhIHNjYW4KLSAqCi0gKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5n IHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKLSAqIGZvdW5kLCBmYWxzZSBvdGhl cndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KLSAqCi0g KiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8g YmUgaGVsZCwgYW5kIHdpbGwgYmUKLSAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgaW5kZXhfZ2V0bmV4 dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgot ICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0g cmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBk byB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24g dG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0t LS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWZvciAo OzspCi0JewotCQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGludWUpCi0JCXsKLQkJCUl0ZW1Qb2lu dGVyIHRpZDsKLQotCQkJLyogVGltZSB0byBmZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5k ZXggKi8KLQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7Ci0KLQkJ CS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCi0JCQlpZiAo dGlkID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0KLQkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscyh0 aWQsICZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCX0KLQotCQkvKgotCQkgKiBGZXRjaCB0aGUgbmV4 dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgotCQkg KiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4 dCBUSUQgZnJvbQotCQkgKiB0aGUgaW5kZXguCi0JCSAqLwotCQlBc3NlcnQoSXRlbVBvaW50ZXJJ c1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4s IHNsb3QpKQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKiAt LS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgYXQg b25jZSBmcm9tIGFuIGluZGV4IHNjYW4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0 Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmQ1YjhjZTZjZAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAg LTAsMCArMSw1NDQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYwor ICoJICBhbWdldGJhdGNoIGltcGxlbWVudGF0aW9uIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisgKgorICogSU5URVJGQUNFIFJPVVRJ TkVTCisgKgkJaW5kZXhfYmF0Y2hzY2FuX2luaXQgLSBpbml0aWFsaXplIGZpZWxkcyBmb3IgYSBi YXRjaCBpbmRleCBzY2FuCisgKgkJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0IC0gcmVzZXQgc3RhdGUg bmVlZGVkIGJ5IGEgYmF0Y2ggaW5kZXggc2NhbgorICoJCWluZGV4X2JhdGNoc2Nhbl9lbmQgLSBm cmVlIHJlc291cmNlcyBhdCBlbmQgb2YgYmF0Y2ggaW5kZXggc2NhbgorICoJCWluZGV4X2JhdGNo c2Nhbl9tYXJrX3BvcyAtIHNldCBhIG1hcmsgZnJvbSBzY2FuUG9zIHBvc2l0aW9uCisgKgkJaW5k ZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zIC0gcmVzdG9yZSBtYXJrIHRvIHNjYW5Qb3MgcG9zaXRp b24KKyAqCQl0YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbSAtIHJlY29yZCB0aGF0IHNjYW5Q b3MgaXRlbSBpcyBkZWFkCisgKgkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggLSByZWxlYXNlIHJl c291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBiYXRjaAorICoJCWluZGV4YW1fdXRpbF9iYXRjaF91 bmxvY2sgLSB1bmxvY2sgYmF0Y2gncyBidWZmZXIgbG9jaworICoJCWluZGV4YW1fdXRpbF9iYXRj aF9hbGxvYyAtIGFsbG9jYXRlIGEgbmV3IGJhdGNoCisgKgkJaW5kZXhhbV91dGlsX2JhdGNoX3Jl bGVhc2UgLSByZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgi CisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJjb21tb24vaW50LmgiCisj aW5jbHVkZSAibGliL3F1bmlxdWUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgorCitz dGF0aWMgaW50CWJhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2 Yik7CisKKy8qCisgKiBpbmRleF9iYXRjaHNjYW5faW5pdCAtIGluaXRpYWxpemUgZmllbGRzIGZv ciBhIGJhdGNoIGluZGV4IHNjYW4uCisgKgorICogU2V0cyB1cCB0aGUgYmF0Y2ggcmluZyBidWZm ZXIgc3RydWN0dXJlIGFuZCBpdHMgaW5pdGlhbCByZWFkIHBvc2l0aW9uLgorICogQWxzbyBkZXRl cm1pbmVzIHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBlYWdlcmx5IGRyb3AgaW5kZXggcGFnZSBwaW5z LgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYWxsIG9mIHRoZSBpbmRleCByZWxhdGVkIGZp ZWxkcyBpbiAnc2Nhbicgd2VyZSBhbHJlYWR5CisgKiBpbml0aWFsaXplZC4KKyAqLwordm9pZAor aW5kZXhfYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCS8qIEJvdGggYW1n ZXRiYXRjaCBhbmQgYW1mcmVlYmF0Y2ggbXVzdCBiZSBwcmVzZW50IHRvZ2V0aGVyICovCisJQXNz ZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOwor CUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1mcmVlYmF0Y2ggIT0gTlVM TCk7CisKKwlzY2FuLT5iYXRjaHJpbmdidWYgPSBwYWxsb2Nfb2JqZWN0KEJhdGNoUmluZ0J1ZmZl cik7CisKKwkvKiBUcmFja3Mgc2NhbiBkaXJlY3Rpb24gdXNlZCB0byByZXR1cm4gbGFzdCBpdGVt ICovCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLT5kaXJlY3Rpb24gPSBOb01vdmVtZW50U2NhbkRpcmVj dGlvbjsKKworCS8qIHBvc2l0aW9ucyBpbiB0aGUgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyAqLwor CWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+YmF0Y2hyaW5nYnVmLT5zY2FuUG9zKTsKKwliYXRjaF9y ZXNldF9wb3MoJnNjYW4tPmJhdGNocmluZ2J1Zi0+bWFya1Bvcyk7CisKKwlzY2FuLT5iYXRjaHJp bmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gg PSAwOwkvKiBpbml0aWFsIGhlYWQgYmF0Y2ggKi8KKwlzY2FuLT5iYXRjaHJpbmdidWYtPm5leHRC YXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggc3RhcnRzIGVtcHR5ICovCisJbWVtc2V0KCZzY2Fu LT5iYXRjaHJpbmdidWYtPmNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hyaW5nYnVmLT5jYWNo ZSkpOworfQorCisvKgorICogaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0IC0gcmVzZXQgc3RhdGUgdXNl ZCBmb3IgYSBiYXRjaCBpbmRleCBzY2FuCisgKgorICogUmVzZXRzIGFsbCBsb2FkZWQgYmF0Y2hl cyBpbiB0aGUgcmluZyBidWZmZXIsIGFuZCByZXNldHMgdGhlIHJlYWQgcG9zaXRpb24KKyAqIHRv IHRoZSBpbml0aWFsIHN0YXRlIChvciBqdXN0IGluaXRpYWxpemUgcmluZyBidWZmZXIgc3RhdGUp LiAgV2hlbgorICogJ2NvbXBsZXRlJyBpcyB0cnVlLCBhbHNvIGZyZWVzIHRoZSBzY2FuJ3MgbWFy a2VkIGJhdGNoIChpZiBhbnkpLCB3aGljaCBpcworICogdXNlZnVsIHdoZW4gZW5kaW5nIGFuIGFt Z2V0YmF0Y2gtYmFzZWQgaW5kZXggc2Nhbi4KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hzY2FuX3Jl c2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSkKK3sKKwlCYXRjaFJpbmdCdWZm ZXIgKmJhdGNocmluZ2J1ZiA9IHNjYW4tPmJhdGNocmluZ2J1ZjsKKworCWJhdGNoX2Fzc2VydF9i YXRjaGVzX3ZhbGlkKHNjYW4pOworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJLyog cmVzZXQgdGhlIHBvc2l0aW9ucyAqLworCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hyaW5nYnVmLT5z Y2FuUG9zKTsKKworCS8qCisJICogV2l0aCAiY29tcGxldGUiIHJlc2V0LCBtYWtlIHN1cmUgdG8g YWxzbyBmcmVlIHRoZSBtYXJrZWQgYmF0Y2gsIGVpdGhlcgorCSAqIGJ5IGp1c3QgZm9yZ2V0dGlu ZyBpdCAoaWYgaXQncyBzdGlsbCBpbiB0aGUgcmluZyBidWZmZXIpLCBvciBieQorCSAqIGV4cGxp Y2l0bHkgZnJlZWluZyBpdC4KKwkgKi8KKwlpZiAoY29tcGxldGUgJiYgdW5saWtlbHkoYmF0Y2hy aW5nYnVmLT5tYXJrQmF0Y2ggIT0gTlVMTCkpCisJeworCQlCYXRjaFJpbmdJdGVtUG9zICptYXJr UG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwkJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNo ID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisKKwkJLyogYWx3YXlzIHJlc2V0IHRoZSBwb3Np dGlvbiwgZm9yZ2V0IHRoZSBtYXJrZWQgYmF0Y2ggKi8KKwkJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0 Y2ggPSBOVUxMOworCisJCS8qCisJCSAqIElmIHdlJ3ZlIGFscmVhZHkgbW92ZWQgcGFzdCB0aGUg bWFya2VkIGJhdGNoIChpdCdzIG5vdCBsb2FkZWQgaW50bworCQkgKiB0aGUgcmluZyBidWZmZXIp LCBmcmVlIGl0IGV4cGxpY2l0bHkgbm93LiAgT3RoZXJ3aXNlLCBpdCdsbCBiZQorCQkgKiBmcmVl ZCBhbG9uZyB3aXRoIHRoZSBvdGhlciBsb2FkZWQgYmF0Y2hlcy4KKwkJICovCisJCWlmICghSU5E RVhfU0NBTl9CQVRDSF9MT0FERUQoc2NhbiwgbWFya1Bvcy0+YmF0Y2gpKQorCQkJdGFibGVhbV91 dGlsX2ZyZWVfYmF0Y2goc2NhbiwgbWFya0JhdGNoKTsKKworCQliYXRjaF9yZXNldF9wb3MoJmJh dGNocmluZ2J1Zi0+bWFya1Bvcyk7CisJfQorCisJLyogbm93IHJlbGVhc2UgYWxsIG90aGVyIGN1 cnJlbnRseSBsb2FkZWQgYmF0Y2hlcyAqLworCXdoaWxlIChiYXRjaHJpbmdidWYtPmhlYWRCYXRj aCA8IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggYmF0Y2gg PSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sCisJCQkJCQkJCQkJCQliYXRjaHJpbmdidWYtPmhlYWRC YXRjaCk7CisKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgYmF0Y2gpOworCisJCS8q IHVwZGF0ZSB0aGUgdmFsaWQgcmFuZ2UsIHNvIHRoYXQgYXNzZXJ0cyAvIGRlYnVnZ2luZyB3b3Jr cyAqLworCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCsrOworCX0KKworCS8qIHJlc2V0IHJlbGV2 YW50IGJhdGNoIHN0YXRlIGZpZWxkcyAqLworCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gMDsJ LyogaW5pdGlhbCBiYXRjaCAqLworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gMDsJLyogaW5p dGlhbCBiYXRjaCBpcyBlbXB0eSAqLworCisJc2Nhbi0+ZmluaXNoZWQgPSBmYWxzZTsKKworCWJh dGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOworfQorCisvKgorICogaW5kZXhfYmF0Y2hz Y2FuX2VuZCAtIGZyZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBiYXRjaCBpbmRleCBzY2FuCisgKgor ICogQ2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRlZCwgcmlnaHQgYmVmb3Jl IHRoZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXkuICBDbGVhbnMgdXAgYWxs IGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fZW5k KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBDYWxsIGFtZnJlZWJhdGNoIGFuZCBhbGwgcmVt YWluaW5nIGxvYWRlZCBiYXRjaGVzIChldmVuIG1hcmtCYXRjaCkgKi8KKwlpbmRleF9iYXRjaHNj YW5fcmVzZXQoc2NhbiwgdHJ1ZSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5f Q0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggY2FjaGVkID0gc2Nhbi0+ YmF0Y2hyaW5nYnVmLT5jYWNoZVtpXTsKKworCQlpZiAoY2FjaGVkID09IE5VTEwpCisJCQljb250 aW51ZTsKKworCQlpZiAoY2FjaGVkLT5raWxsZWRJdGVtcykKKwkJCXBmcmVlKGNhY2hlZC0+a2ls bGVkSXRlbXMpOworCQlpZiAoY2FjaGVkLT5jdXJyVHVwbGVzKQorCQkJcGZyZWUoY2FjaGVkLT5j dXJyVHVwbGVzKTsKKwkJcGZyZWUoY2FjaGVkKTsKKwl9CisKKwlwZnJlZShzY2FuLT5iYXRjaHJp bmdidWYpOworfQorCisvKgorICogaW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zIC0gc2V0IGEgbWFy ayBmcm9tIHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBTYXZlcyB0aGUgY3VycmVudCByZWFkIHBv c2l0aW9uIGFuZCBhc3NvY2lhdGVkIGJhdGNoIHNvIHRoYXQgdGhlIHNjYW4gY2FuCisgKiBiZSBy ZXN0b3JlZCB0byB0aGlzIHBvaW50IGxhdGVyLCB2aWEgYSBjYWxsIHRvIGluZGV4X2JhdGNoc2Nh bl9yZXN0b3JlX3Bvcy4KKyAqIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmV0YWluZWQgYW5kIG5vdCBm cmVlZCB1bnRpbCBhIG5ldyBtYXJrIGlzIHNldCBvciB0aGUKKyAqIHNjYW4gZW5kcyAob3IgdW50 aWwgdGhlIG1hcmsgaXMgcmVzdG9yZWQpLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fbWFy a19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5n YnVmID0gc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAm YmF0Y2hyaW5nYnVmLT5tYXJrUG9zOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNo cmluZ2J1Zi0+bWFya0JhdGNoOworCisJLyoKKwkgKiBGcmVlIHRoZSBwcmV2aW91cyBtYXJrIGJh dGNoIChpZiBhbnkpLCBidXQgb25seSBpZiB0aGUgYmF0Y2ggaXMgbm8KKwkgKiBsb25nZXIgbG9h ZGVkIGludG8gdGhlIHJpbmcgYnVmZmVyCisJICovCisJaWYgKG1hcmtCYXRjaCAmJiAhSU5ERVhf U0NBTl9CQVRDSF9MT0FERUQoc2NhbiwgbWFya1Bvcy0+YmF0Y2gpKQorCXsKKwkJYmF0Y2hyaW5n YnVmLT5tYXJrQmF0Y2ggPSBOVUxMOworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBt YXJrQmF0Y2gpOworCX0KKworCS8qIGNvcHkgdGhlIHNjYW4ncyBwb3NpdGlvbiAqLworCWJhdGNo cmluZ2J1Zi0+bWFya1BvcyA9IGJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwliYXRjaHJpbmdidWYt Pm1hcmtCYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwKKwkJCQkJCQkJCQkJICAgYmF0Y2hy aW5nYnVmLT5tYXJrUG9zLmJhdGNoKTsKKworCS8qIHNjYW5Qb3MvbWFya1BvcyBtdXN0IGJlIHZh bGlkICovCisJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCAmYmF0Y2hyaW5nYnVmLT5tYXJr UG9zKTsKK30KKworLyoKKyAqIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyAtIHJlc3RvcmUg bWFyayB0byBzY2FuUG9zIHBvc2l0aW9uCisgKgorICogUmVzdG9yZXMgdGhlIHNjYW4gdG8gYSBw b3NpdGlvbiBwcmV2aW91c2x5IHNhdmVkIGJ5CisgKiBpbmRleF9iYXRjaHNjYW5fbWFya19wb3Mu ICBUaGUgbWFya2VkIGJhdGNoIGlzIHJlc3RvcmVkIGFzIHRoZSBjdXJyZW50CisgKiBiYXRjaCwg YWxsb3dpbmcgdGhlIHNjYW4gdG8gcmVzdW1lIGZyb20gdGhlIG1hcmtlZCBwb3NpdGlvbi4gIEFs c28gbm90aWZpZXMKKyAqIHRoZSBpbmRleCBBTSB2aWEgYSBjYWxsIHRvIGl0cyBhbXBvc3Jlc2V0 IHJvdXRpbmUsIHdoaWNoIGFsbG93cyBpdCB0bworICogaW52YWxpZGF0ZSBhbnkgcHJpdmF0ZSBz dGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4gcHJvZ3Jlc3MgKHN1Y2gKKyAqIGFz IGFycmF5IGtleSBzdGF0ZSkuCisgKgorICogRnVuY3Rpb24gY3VycmVudGx5IGp1c3QgZGlzY2Fy ZHMgbW9zdCBiYXRjaCByaW5nIGJ1ZmZlciBzdGF0ZS4gIEl0IG1pZ2h0CisgKiBtYWtlIHNlbnNl IHRvIHRlYWNoIGl0IHRvIGhvbGQgb24gdG8gb3RoZXIgbmVhcmJ5IGJhdGNoZXMgKHN0aWxsLWhl bGQKKyAqIGJhdGNoZXMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG5lZWRlZCBvbmNlIHRoZSBzY2Fu IGZpbmlzaGVzIHJldHVybmluZworICogbWF0Y2hpbmcgaXRlbXMgZnJvbSB0aGUgcmVzdG9yZWQg YmF0Y2gpIGFzIGFuIG9wdGltaXphdGlvbi4gIFN1Y2ggYSBzY2hlbWUKKyAqIHdvdWxkIGhhdmUg dGhlIGJlbmVmaXQgb2YgYXZvaWRpbmcgcmVwZWF0IGNhbGxzIHRvIGFtZ2V0YmF0Y2gvcmVwZWF0 ZWRseQorICogcmVhZGluZyB0aGUgc2FtZSBpbmRleCBwYWdlcy4KKyAqLwordm9pZAoraW5kZXhf YmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdC dWZmZXIgKmJhdGNocmluZ2J1ZiA9IHNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVt UG9zICptYXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlCYXRjaFJpbmdJdGVtUG9z ICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvcyA7CisJSW5kZXhTY2FuQmF0Y2ggbWFy a0JhdGNoID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisKKwlpZiAoc2NhblBvcy0+YmF0Y2gg PT0gbWFya1Bvcy0+YmF0Y2ggJiYKKwkJc2NhblBvcy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2gpCisJeworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGRpc2NhcmQgdGhlIHNj YW4ncyBzdGF0ZSBhZnRlciBhbGwsIHNpbmNlIHRoZQorCQkgKiBjdXJyZW50IGhlYWRCYXRjaCBp cyBhbHNvIHRoZSBiYXRjaCB0aGF0IHdlJ3JlIHJlc3RvcmluZyB0bworCQkgKi8KKwkJc2NhblBv cy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIENhbGwg YW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBpbnZhbGlkYXRlIGFueSBwcml2YXRl IHN0YXRlCisJICogdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNz CisJICovCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQoc2Nhbiwg bWFya0JhdGNoKTsKKworCS8qIFJlbW92ZSBhbGwgYmF0Y2hlcyBmcm9tIHRoZSByaW5nIGJ1ZmZl ciBleGNlcHQgZm9yIHRoZSBtYXJrZWQgYmF0Y2ggKi8KKwlpbmRleF9iYXRjaHNjYW5fcmVzZXQo c2NhbiwgZmFsc2UpOworCisJLyoKKwkgKiAiQXBwZW5kIiBtYXJrQmF0Y2gsIG1ha2luZyB0aGUg cmluZyBidWZmZXIgYXBwZWFyIGFzIGlmIGl0IHdhcyB0aGUKKwkgKiBmaXJzdCBiYXRjaCBldmVy IHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2ggZm9yIHRoZSBzY2FuCisJICovCisJbWFya1Bvcy0+YmF0 Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+c2NhblBvcyA9ICptYXJrUG9zOworCWJhdGNocmluZ2J1 Zi0+bmV4dEJhdGNoID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsK KwlJTkRFWF9TQ0FOX0JBVENIX0FQUEVORChzY2FuLCBtYXJrQmF0Y2gpOworCUFzc2VydChJTkRF WF9TQ0FOX0JBVENIKHNjYW4sIGJhdGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCkgPT0gbWFya0Jh dGNoKTsKKworCS8qCisJICogTm90ZTogbWFya0JhdGNoLmtpbGxlZEl0ZW1zW10gbWlnaHQgYWxy ZWFkeSBjb250YWluIGRlYWQgaXRlbXMsIGFuZAorCSAqIG1pZ2h0IHlldCBoYXZlIG1vcmUgZGVh ZCBpdGVtcyBzYXZlZC4gIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIGlzCisJICogcHJlcGFyZWQg Zm9yIHRoYXQuCisJICovCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJdXRpbGl0eSBmdW5jdGlvbnMg Y2FsbGVkIGJ5IHRhYmxlIEFNcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiB0YWJsZWFtX3V0 aWxfa2lsbF9zY2FucG9zaXRlbSAtIHJlY29yZCB0aGF0IHNjYW5Qb3MgaXRlbSBpcyBkZWFkCisg KgorICogUmVjb3JkcyBhbiBvZmZzZXQgdG8gdGhlIHNjYW5CYXRjaCBpdGVtIG9mIHRoZSBjdXJy ZW50bHktcmVhZCB0dXBsZSwgc2F2aW5nCisgKiBpdCBpbiBzY2FuQmF0Y2gncyBraWxsZWRJdGVt cyBhcnJheS4gVGhlIGl0ZW1zJyBpbmRleCB0dXBsZXMgd2lsbCBsYXRlciBiZQorICogbWFya2Vk IExQX0RFQUQgd2hlbiBjdXJyZW50IHNjYW5CYXRjaCBpcyBmcmVlZCBieSBhbWZyZWViYXRjaCBy b3V0aW5lIChzZWUKKyAqIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIHdyYXBwZXIgZnVuY3Rpb24p LgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShJbmRleFNjYW5EZXNj IHNjYW4pCit7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdi dWYtPnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gSU5ERVhfU0NBTl9CQVRD SChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4s IHNjYW5Qb3MpOworCisJaWYgKHNjYW5CYXRjaC0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKKwkJc2Nh bkJhdGNoLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIHNjYW4tPm1heGl0ZW1zYmF0 Y2gpOworCWlmIChzY2FuQmF0Y2gtPm51bUtpbGxlZCA8IHNjYW4tPm1heGl0ZW1zYmF0Y2gpCisJ CXNjYW5CYXRjaC0+a2lsbGVkSXRlbXNbc2NhbkJhdGNoLT5udW1LaWxsZWQrK10gPSBzY2FuUG9z LT5pdGVtOworfQorCisvKgorICogdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggLSByZWxlYXNlIHJl c291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBiYXRjaAorICoKKyAqIENhbGxlZCBieSB0YWJsZSBB TSdzIG9yZGVyZWQgaW5kZXggc2NhbiBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVk CisgKiB3aXRoIGEgYmF0Y2ggYW5kIHdpc2hlcyB0byByZWxlYXNlIGl0cyByZXNvdXJjZXMuCisg KgorICogVGhpcyBjYWxscyB0aGUgaW5kZXggQU0ncyBhbWZyZWViYXRjaCBjYWxsYmFjayB0byBy ZWxlYXNlIEFNLXNwZWNpZmljCisgKiByZXNvdXJjZXMsIGFuZCB0byBzZXQgTFBfREVBRCBiaXRz IG9uIHRoZSBiYXRjaCdzIGluZGV4IHBhZ2UgKGluIGluZGV4IEFNcworICogdGhhdCBpbXBsZW1l bnQgdGhhdCBvcHRpbWl6YXRpb24pLiAgRXZlcnkgYW1mcmVlYmF0Y2ggcm91dGluZSBtdXN0IHJl Y3ljbGUKKyAqIHRoZSB1bmRlcmx5aW5nIGJhdGNoIG1lbW9yeSBieSBwYXNzaW5nIGl0IHRvIGlu ZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfZnJlZV9i YXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCWJhdGNo X2Fzc2VydF9iYXRjaF92YWxpZChzY2FuLCBiYXRjaCk7CisKKwkvKiBkb24ndCBmcmVlIHRoZSBi YXRjaCB0aGF0IGlzIG1hcmtlZCAqLworCWlmIChiYXRjaCA9PSBzY2FuLT5iYXRjaHJpbmdidWYt Pm1hcmtCYXRjaCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBiYXRjaC5raWxsZWRJdGVtc1tdIGlz IG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVtcworCSAqIGluLiAg V2UgbWlnaHQgaGF2ZSBldmVuIHNhdmVkIHRoZSBzYW1lIGl0ZW0vVElEIHR3aWNlLgorCSAqCisJ ICogU29ydCBhbmQgdW5pcXVlLWlmeSBraWxsZWRJdGVtc1tdLiAgVGhhdCB3YXkgdGhlIGluZGV4 IEFNIGNhbiBzYWZlbHkKKwkgKiBhc3N1bWUgdGhhdCBpdGVtcyB3aWxsIGFsd2F5cyBiZSBpbiB0 aGVpciBvcmlnaW5hbCBpbmRleCBwYWdlIG9yZGVyLgorCSAqLworCWlmIChiYXRjaC0+bnVtS2ls bGVkID4gMSkKKwl7CisJCXFzb3J0KGJhdGNoLT5raWxsZWRJdGVtcywgYmF0Y2gtPm51bUtpbGxl ZCwgc2l6ZW9mKGludCksCisJCQkgIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJYmF0Y2gtPm51bUtp bGxlZCA9IHF1bmlxdWUoYmF0Y2gtPmtpbGxlZEl0ZW1zLCBiYXRjaC0+bnVtS2lsbGVkLAorCQkJ CQkJCQkgICBzaXplb2YoaW50KSwgYmF0Y2hfY29tcGFyZV9pbnQpOworCX0KKworCXNjYW4tPmlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWZyZWViYXRjaChzY2FuLCBiYXRjaCk7Cit9CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCQkJdXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFtZ2V0YmF0Y2ggaW5k ZXggQU1zCisgKgorICogVGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBiYXRjaCBhbGxvY2F0aW9uLCB1 bmxvY2svcGluIG1hbmFnZW1lbnQsIGFuZCBiYXRjaAorICogcmVzb3VyY2UgcmVjeWNsaW5nLiAg SW5kZXggQU1zIGltcGxlbWVudGluZyBhbWdldGJhdGNoIHNob3VsZCB1c2UgdGhlc2UKKyAqIHJh dGhlciB0aGFuIG1hbmFnaW5nIGJ1ZmZlcnMgZGlyZWN0bHkuCisgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor LyoKKyAqIGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgLSB1bmxvY2sgYmF0Y2gncyBzaGFyZWQg YnVmZmVyIGxvY2sKKyAqCisgKiBVbmxvY2tzIGNhbGxlcidzIGJhdGNoLT5idWYgaW4gcHJlcGFy YXRpb24gZm9yIGFtZ2V0YmF0Y2ggcmV0dXJuaW5nIGl0ZW1zCisgKiBzYXZlZCBpbiB0aGF0IGJh dGNoLiAgUGVyZm9ybXMgZXh0cmEgc3RlcHMgcmVxdWlyZWQgYnkgYW1nZXRiYXRjaCBjYWxsZXJz CisgKiBpbiBwYXNzaW5nLgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBiYXRjaCBoYXMg b25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBhbWdldGJhdGNo IChvciBmb3IgYW1nZXRiaXRtYXAgdG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2YgbWF0Y2hpbmcg VElEcykuCisgKiBXaGVuIGFuIGluZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0J3MgYWx3YXlz IHNhZmUgZm9yIGluZGV4IEFNcyB0byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGlu IGZvciB0aGVtc2VsdmVzLgorICoKKyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4 IEFNcyB0aGF0IGltcGxlbWVudCBib3RoIGFtZ2V0Yml0bWFwIGFuZAorICogYW1nZXRiaXRtYXAg dG8gY29uc2lzdGVudGx5IHVzZSB0aGUgc2FtZSBiYXRjaCBtYW5hZ2VtZW50IGFwcHJvYWNoLCBz aW5jZQorICogdGhhdCBhdm9pZHMgaW50cm9kdWNpbmcgc3BlY2lhbCBjYXNlcyB0byBsb3dlci1s ZXZlbCBjb2RlLiAgV2UgZHJvcCBib3RoCisgKiB0aGUgbG9jayBhbmQgdGhlIHBpbiBvbiBiYXRj aCdzIHBhZ2Ugb24gYmVoYWxmIG9mIGFtZ2V0Yml0bWFwIGNhbGxlcnMuCisgKiBTdWNoIGFtZ2V0 Yml0bWFwIGNhbGxlcnMgbXVzdCBiZSBjYXJlZnVsIHRvIGZyZWUgYWxsIGJhdGNoZXMgd2l0aCBt YXRjaGluZworICogaXRlbXMgb25jZSB0aGV5J3JlIGRvbmUgc2F2aW5nIHRoZSBtYXRjaGluZyBU SURzICh0aGVyZSB3aWxsIG5ldmVyIGJlIGFueQorICogY2FsbHMgdG8gYW1mcmVlYmF0Y2gsIHNv IGFtZ2V0Yml0bWFwIG11c3QgY2FsbCBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZQorICogZGly ZWN0bHksIGluIGxpZXUgb2YgYSBkZWZlcnJlZCBjYWxsIHRvIGFtZnJlZWJhdGNoIGZyb20gY29y ZSBjb2RlKS4gIFdlCisgKiBuZXZlciBkcm9wIHRoZSBwaW4gZm9yIGFuIGFtZ2V0YmF0Y2ggY2Fs bGVyLCB0aG91Z2guCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBiYXRjaCBtdXN0IGhh dmUgb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgcmV0dXJuZWQgYnkgaW5kZXggQU0gKi8KKwlB c3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA+PSAwICYmIGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gt Pmxhc3RJdGVtKTsKKworCWlmIChzY2FuLT5iYXRjaHJpbmdidWYpCisJeworCQkvKiBhbWdldGJh dGNoIChub3QgYW1nZXRiaXRtYXApIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uICE9IE5VTEwpOworCisJCS8qCisJCSAqIEhhdmUgdG8gc2V0IGJhdGNoLT5sc24gc28gdGhh dCBhbWZyZWViYXRjaCBoYXMgYSB3YXkgdG8gZGV0ZWN0IHdoZW4KKwkJICogY29uY3VycmVudCBo ZWFwIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCisJCSAq IEl0J2xsIG9ubHkgYmUgc2FmZSB0byBzZXQgYW55IGluZGV4IHR1cGxlIExQX0RFQUQgYml0cyB3 aGVuIHRoZQorCQkgKiBwYWdlIExTTiBoYXNuJ3QgYWR2YW5jZWQuCisJCSAqLworCQliYXRjaC0+ bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJhdGNoLT5idWYpOworCisJCS8qIERyb3AgdGhlIGxv Y2sgKi8KKwkJTG9ja0J1ZmZlcihiYXRjaC0+YnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisj aWZkZWYgVVNFX1ZBTEdSSU5ECisJCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHNjYW4t PmluZGV4UmVsYXRpb24pKQorCQkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0 UGFnZShiYXRjaC0+YnVmKSwgQkxDS1NaKTsKKyNlbmRpZgorCisJCS8qIHRhYmxlIEFNIGRldGVy bWluZXMgd2hlbiBpdCdsbCBiZSBzYWZlIHRvIGRyb3AgcGlucyBvbiBiYXRjaGVzICovCisJfQor CWVsc2UKKwl7CisJCS8qIGFtZ2V0Yml0bWFwIChub3QgYW1nZXRiYXRjaCkgY2FsbGVyICovCisJ CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisKKwkJLyogZHJvcCBib3RoIHRo ZSBsb2NrIGFuZCB0aGUgcGluICovCisJCUxvY2tCdWZmZXIoYmF0Y2gtPmJ1ZiwgQlVGRkVSX0xP Q0tfVU5MT0NLKTsKKworI2lmZGVmIFVTRV9WQUxHUklORAorCQlpZiAoIVJlbGF0aW9uVXNlc0xv Y2FsQnVmZmVycyhzY2FuLT5pbmRleFJlbGF0aW9uKSkKKwkJCVZBTEdSSU5EX01BS0VfTUVNX05P QUNDRVNTKEJ1ZmZlckdldFBhZ2UoYmF0Y2gtPmJ1ZiksIEJMQ0tTWik7CisjZW5kaWYKKwkJUmVs ZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJ fQorfQorCisvKgorICogaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIC0gYWxsb2NhdGUgYSBuZXcg YmF0Y2gKKyAqCisgKiBVc2VkIGJ5IGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgYW1nZXRiYXRjaCBp bnRlcmZhY2UgKGJvdGggZHVyaW5nIGFtZ2V0YmF0Y2gKKyAqIGFuZCBhbWdldGJpdG1hcCBzY2Fu cykuCisgKgorICogUmV0dXJucyBJbmRleFNjYW5CYXRjaCB3aXRoIHNwYWNlIHRvIGZpdCBzY2Fu LT5tYXhpdGVtc2JhdGNoLW1hbnkKKyAqIEJhdGNoTWF0Y2hpbmdJdGVtIGVudHJpZXMuICBUaGlz IHdpbGwgZWl0aGVyIGJlIGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLCBvcgorICogYSBiYXRjaCBy ZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZSBtYW5hZ2VkIGJ5IGluZGV4YW1fdXRpbF9iYXRjaF9yZWxl YXNlLiAgU2VlCisgKiBjb21tZW50cyBhYm92ZSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4K KyAqCisgKiBJbmRleCBBTXMgdGhhdCB1c2UgYmF0Y2hlcyBzaG91bGQgY2FsbCB0aGlzIGZyb20g ZWl0aGVyIHRoZWlyIGFtZ2V0YmF0Y2ggb3IKKyAqIGFtZ2V0Yml0bWFwIHJvdXRpbmVzIG9ubHku ICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBpdCBjYW5ub3Qgc2FmZWx5IGJlCisgKiBjYWxsZWQg ZnJvbSBhIGFtZnJlZWJhdGNoIHJvdXRpbmUuCisgKi8KK0luZGV4U2NhbkJhdGNoCitpbmRleGFt X3V0aWxfYmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUluZGV4U2NhbkJhdGNo IGJhdGNoID0gTlVMTDsKKworCS8qIEZpcnN0IGxvb2sgZm9yIGFuIGV4aXN0aW5nIGJhdGNoIGZy b20gcmluZyBidWZmZXIgKi8KKwlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmICE9IE5VTEwpCisJewor CQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQl7 CisJCQlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmLT5jYWNoZVtpXSAhPSBOVUxMKQorCQkJeworCQkJ CS8qIFJldHVybiBjYWNoZWQgdW5yZWZlcmVuY2VkIGJhdGNoICovCisJCQkJYmF0Y2ggPSBzY2Fu LT5iYXRjaHJpbmdidWYtPmNhY2hlW2ldOworCQkJCXNjYW4tPmJhdGNocmluZ2J1Zi0+Y2FjaGVb aV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKCFiYXRjaCkKKwl7 CisJCWJhdGNoID0gcGFsbG9jKG9mZnNldG9mKEluZGV4U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsK KwkJCQkJICAgc2l6ZW9mKEJhdGNoTWF0Y2hpbmdJdGVtKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2gp OworCisJCS8qCisJCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHdlIG5l ZWQgYSB0dXBsZSBzdG9yYWdlCisJCSAqIHdvcmtzcGFjZS4gV2UgYWxsb2NhdGUgQkxDS1NaIGZv ciB0aGlzLCB3aGljaCBzaG91bGQgYWx3YXlzIGdpdmUKKwkJICogdGhlIGluZGV4IEFNIGVub3Vn aCBzcGFjZSB0byBmaXQgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCisJCSAqLworCQli YXRjaC0+Y3VyclR1cGxlcyA9IE5VTEw7CisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQli YXRjaC0+Y3VyclR1cGxlcyA9IHBhbGxvYyhCTENLU1opOworCisJCS8qCisJCSAqIEJhdGNoZXMg YWxsb2NhdGUga2lsbGVkSXRlbXMgbGF6aWx5ICh0aG91Z2ggbm90ZSB0aGF0IGNhY2hlZAorCQkg KiBiYXRjaGVzIGtlZXAgdGhlaXIga2lsbGVkSXRlbXMgYWxsb2NhdGlvbiB3aGVuIHJlY3ljbGVk KQorCQkgKi8KKwkJYmF0Y2gtPmtpbGxlZEl0ZW1zID0gTlVMTDsKKwl9CisKKwkvKiB4c193YW50 X2l0dXAgc2NhbnMgbXVzdCBnZXQgYSBjdXJyVHVwbGVzIHNwYWNlICovCisJQXNzZXJ0KCEoc2Nh bi0+eHNfd2FudF9pdHVwICYmIChiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKSkpOworCisJLyog c2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJ YmF0Y2gtPmZpcnN0SXRlbSA9IC0xOworCWJhdGNoLT5sYXN0SXRlbSA9IC0xOworCWJhdGNoLT5u dW1LaWxsZWQgPSAwOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogaW5kZXhhbV91dGls X2JhdGNoX3JlbGVhc2UgLSByZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqIFRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVk IGJ5CisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVy ZSBmb3IgcmV1c2UgKHdoZW4gc2NhbgorICogaGFzbid0IGFscmVhZHkgZmluaXNoZWQpIHRvIHJl ZHVjZSBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBzYWZlIHRvIHJlbGVhc2Ug YSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0 aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJl dHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVz IGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2Vk IGJ5IGNhbGxpbmcgaGVyZSBhdCB0aGUgZW5kIG9mIHRoZWlyIGFtZnJlZWJhdGNoIHJvdXRpbmUu CisgKiBJbmRleCBBTXMgdGhhdCB1c2VzIGJhdGNoZXMgc2hvdWxkIGNhbGwgaGVyZSB0byByZWxl YXNlIGEgYmF0Y2ggZnJvbSBhbnkgb2YKKyAqIHRoZWlyIGFtZ2V0YmF0Y2gsIGFtZ2V0Yml0bWFw LCBhbmQgYW1mcmVlYmF0Y2ggcm91dGluZXMuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJ QXNzZXJ0KGJhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcik7CisKKwlpZiAoc2Nhbi0+YmF0Y2hy aW5nYnVmKQorCXsKKwkJLyogYW1nZXRiYXRjaCBzY2FuIGNhbGxlciAqLworCQlBc3NlcnQoc2Nh bi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJCWlmIChzY2FuLT5maW5pc2hlZCkKKwkJewor CQkJLyogRG9uJ3QgYm90aGVyIHVzaW5nIGNhY2hlIHdoZW4gc2NhbiBpcyBlbmRpbmcgKi8KKwkJ fQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBVc2UgY2FjaGUuICBUaGlzIGlzIGdlbmVyYWxs eSBvbmx5IGJlbmVmaWNpYWwgd2hlbiB0aGVyZSBhcmUKKwkJCSAqIG1hbnkgc21hbGwgcmVzY2Fu cyBvZiBhbiBpbmRleC4KKwkJCSAqLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FO X0NBQ0hFX0JBVENIRVM7IGkrKykKKwkJCXsKKwkJCQlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmLT5j YWNoZVtpXSA9PSBOVUxMKQorCQkJCXsKKwkJCQkJLyogZm91bmQgZW1wdHkgc2xvdCwgd2UncmUg ZG9uZSAqLworCQkJCQlzY2FuLT5iYXRjaHJpbmdidWYtPmNhY2hlW2ldID0gYmF0Y2g7CisJCQkJ CXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBGYWlsZWQgdG8gZmluZCBh IGZyZWUgc2xvdCBmb3IgdGhpcyBiYXRjaC4gIFdlJ2xsIGp1c3QgZnJlZSBpdAorCQkgKiBvdXJz ZWx2ZXMuICBUaGlzIGlzbid0IHJlYWxseSBleHBlY3RlZDsgaXQncyBqdXN0IGRlZmVuc2l2ZS4K KwkJICovCisJCWlmIChiYXRjaC0+a2lsbGVkSXRlbXMpCisJCQlwZnJlZShiYXRjaC0+a2lsbGVk SXRlbXMpOworCQlpZiAoYmF0Y2gtPmN1cnJUdXBsZXMpCisJCQlwZnJlZShiYXRjaC0+Y3VyclR1 cGxlcyk7CisJfQorCWVsc2UKKwl7CisJCS8qIGFtZ2V0Yml0bWFwIHNjYW4gY2FsbGVyICovCisJ CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisJCUFzc2VydChiYXRjaC0+a2ls bGVkSXRlbXMgPT0gTlVMTCk7CisJCUFzc2VydChiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKTsK Kwl9CisKKwkvKiBubyBmcmVlIHNsb3QgdG8gc2F2ZSB0aGlzIGJhdGNoIChleHBlY3RlZCB3aXRo IGFtZ2V0Yml0bWFwIGNhbGxlcnMpICovCisJcGZyZWUoYmF0Y2gpOworfQorCisvKgorICogYmF0 Y2hfY29tcGFyZV9pbnQgLSBxc29ydCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlz CisgKi8KK3N0YXRpYyBpbnQKK2JhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25z dCB2b2lkICp2YikKK3sKKwlpbnQJCQlhID0gKigoY29uc3QgaW50ICopIHZhKTsKKwlpbnQJCQli ID0gKigoY29uc3QgaW50ICopIHZiKTsKKworCXJldHVybiBwZ19jbXBfczMyKGEsIGIpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCmluZGV4IGRhNjRjYjU5NS4uODNkZmEzZjJi IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCkBAIC01LDQgKzUsNSBAQCBiYWNr ZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhbXZhbGlkYXRlLmMnLAogICAnZ2VuYW0uYycsCiAg ICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRjaC5jJywKICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFE TUUKaW5kZXggNTNkNGE2MWRjLi4yMzFkYTIwZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1F CkBAIC00NzEsNyArNDcxLDcgQEAgcHJvcGVyLiAgQSBwbGFpbiBpbmRleCBzY2FuIHdpbGwgZXZl biByZWNvZ25pemUgTFBfVU5VU0VEIGl0ZW1zIGluIHRoZQogaGVhcCAoaXRlbXMgdGhhdCBjb3Vs ZCBiZSByZWN5Y2xlZCBidXQgaGF2ZW4ndCBiZWVuIGp1c3QgeWV0KSBhcyAibm90CiB2aXNpYmxl IiAtLSBldmVuIHdoZW4gdGhlIGhlYXAgcGFnZSBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbGwt dmlzaWJsZS4KIAotTFBfREVBRCBzZXR0aW5nIG9mIGluZGV4IHR1cGxlcyBieSB0aGUga2lsbF9w cmlvcl90dXBsZSBvcHRpbWl6YXRpb24KK09wcG9ydHVuaXN0aWMgTFBfREVBRCBzZXR0aW5nIG9m IGtub3duLWRlYWQgaW5kZXggdHVwbGVzIGR1cmluZyBpbmRleCBzY2FucwogKGRlc2NyaWJlZCBp biBmdWxsIGluIHNpbXBsZSBkZWxldGlvbiwgYmVsb3cpIGlzIGFsc28gbW9yZSBjb21wbGljYXRl ZCBmb3IKIGluZGV4IHNjYW5zIHRoYXQgZHJvcCB0aGVpciBsZWFmIHBhZ2UgcGlucy4gIFdlIG11 c3QgYmUgY2FyZWZ1bCB0byBhdm9pZAogTFBfREVBRC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVw bGUgdGhhdCBsb29rcyBsaWtlIGEga25vd24tZGVhZCBpbmRleApAQCAtNDgxLDcgKzQ4MSw3IEBA IG5ldywgdW5yZWxhdGVkIGluZGV4IHR1cGxlLCBvbiB0aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNo IGhhcyB0aGUgc2FtZQogb3JpZ2luYWwgVElELiAgSXQgd291bGQgYmUgdG90YWxseSB3cm9uZyB0 byBMUF9ERUFELXNldCB0aGlzIG5ldywKIHVucmVsYXRlZCBpbmRleCB0dXBsZS4KIAotV2UgaGFu ZGxlIHRoaXMga2lsbF9wcmlvcl90dXBsZSByYWNlIGNvbmRpdGlvbiBieSBoYXZpbmcgYWZmZWN0 ZWQgaW5kZXgKK1dlIGhhbmRsZSB0aGlzIExQX0RFQUQgc2V0dGluZyByYWNlIGNvbmRpdGlvbiBi eSBoYXZpbmcgYWZmZWN0ZWQgaW5kZXgKIHNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0 IGFueSBjaGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwKIGltcGxpZXMgdGhhdCBpdCB3YXMg cmVhY2hlZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KIGJ1 ZmZlciBwaW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFu eSBMUF9ERUFEIGJpdHMKQEAgLTczNSw3ICs3MzUsNyBAQCBvZiByZWFkZXJzIGNvdWxkIHN0aWxs IG1vdmUgcmlnaHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3QgY291cGxlCiBzYW1lLWxldmVsIGxv Y2tzKSwgYnV0IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRpdmUgaGVyZS4KIAogRHVyaW5nIHJl Y292ZXJ5IGFsbCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGlnbm9yZV9raWxsZWRfdHVwbGVzID0g ZmFsc2UKLWFuZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90dXBsZS4gV2UgZG8gdGhpcyBiZWNh dXNlIHRoZSBvbGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQX0RFQUQtbWFyayB0dXBsZXMuIFdl IGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9uIHRoZSBzdGFuZGJ5IHNlcnZlciBj YW4gYmUgb2xkZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24gdGhlIHByaW1hcnkKIHNlcnZlciwg d2hpY2ggbWVhbnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBfREVBRCBldmVuIHdoZW4gdGhleSBh cmUKIHN0aWxsIHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdlIGRvbid0IFdBTCBsb2cgdHVwbGUg TFBfREVBRCBiaXRzLCBidXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggNzBi NTI0ZGZlLi4yODZmOTVkM2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0x MDM3LDYgKzEwMzcsOSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAq IExvY2sgaXMgYWNxdWlyZWQgd2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4uICBUaGlzIGlz IGxpa2UgYSByYXcKICAqIExvY2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMgZXh0cmEgc3Rl cHMgbmVlZGVkIGJ5IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6IGluZGV4YW1fdXRpbF9iYXRjaF91 bmxvY2sgaGFzIHNpbWlsYXIgVmFsZ3JpbmQgYnVmZmVyIGxvY2sKKyAqIGluc3RydW1lbnRhdGlv biwgd2hpY2ggd2UgcmVseSBvbiBoZXJlLgorICoKICAqIE5vdGU6IENhbGxlciBtYXkgbmVlZCB0 byBjYWxsIF9idF9jaGVja3BhZ2UoKSB3aXRoIGJ1ZiB3aGVuIHBpbiBvbiBidWYKICAqIHdhc24n dCBvcmlnaW5hbGx5IGFjcXVpcmVkIGluIF9idF9nZXRidWYoKSBvciBfYnRfcmVsYW5kZ2V0YnVm KCkuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBh Z2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwppbmRleCAyYmEx Y2E2NjAuLmUyNGFiZjQ2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWFkcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2Uu YwpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFJlYWRQYWdlU3RhdGUKIHsKIAkv KiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQgYnkgX2J0X3JlYWRwYWdlIGZvciBfYnRfY2hlY2trZXlz ICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7CQkJLyogY3VycmVudCBzY2FuIGRpcmVjdGlvbiAqLwor CUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJLyogY3VycmVudCBwYWdlIGJlaW5nIHJlYWQgKi8KIAlP ZmZzZXROdW1iZXIgbWlub2ZmOwkJLyogTG93ZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAq LwogCU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBIaWdoZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9m ZnNldCAqLwogCUluZGV4VHVwbGUJZmluYWx0dXA7CQkvKiBOZWVkZWQgYnkgc2NhbnMgd2l0aCBh cnJheSBrZXlzICovCkBAIC02MywxNCArNjQsMTMgQEAgc3RhdGljIGJvb2wgX2J0X3NjYW5iZWhp bmRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJ CQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1cCk7CiBzdGF0aWMgYm9vbCBfYnRfb3Bwb2Rpcl9jaGVj a2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJICBJ bmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShCVFNjYW5PcGFx dWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhU dXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1 ZSBzbywgaW50IGl0ZW1JbmRleCwKK3N0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShJbmRleFNjYW5C YXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJ CSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGludAlfYnRfc2V0 dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJ CQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFw VGlkLAotCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0 X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJ CQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRp ZCwgaW50IHR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVw bGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGluZ2l0ZW0oSW5kZXhT Y2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJ CQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9mZnNldCk7CiBzdGF0aWMg Ym9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRSZWFkUGFnZVN0YXRlICpw c3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJCQkJICBJbmRleFR1cGxlIHR1cGxlLCBpbnQgdHVw bmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNrX2NvbXBhcmUoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTExMSwxNSArMTExLDE1IEBAIHN0YXRpYyBib29sIF9i dF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogCiAKIC8q Ci0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2Ug aW50byBzby0+Y3VyclBvcworICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3Vy cmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0Y2guCiAgKgotICogQ2FsbGVyIG11c3QgaGF2ZSBw aW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5jdXJyUG9zLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRl Ci0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgY3VyclBvcy5tb3JlTGVmdCBhbmQgbW9y ZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRl LiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+Y3VyclBvcyBhcmUKKyAqIENhbGxlciBtdXN0IGhh dmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBuZXdiYXRjaC5idWY7IHRoZSBidWZmZXIncyBzdGF0 ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIG5ld2JhdGNoJ3MgbW9yZUxlZnQgYW5k IG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOworICogdGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3By aWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2YgbmV3YmF0Y2ggYXJlCiAgKiBpbml0aWFsaXplZCBm cm9tIHNjcmF0Y2ggaGVyZS4KICAqCiAgKiBXZSBzY2FuIHRoZSBjdXJyZW50IHBhZ2Ugc3RhcnRp bmcgYXQgb2ZmbnVtIGFuZCBtb3ZpbmcgaW4gdGhlIGluZGljYXRlZAotICogZGlyZWN0aW9uLiAg QWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIGxvYWRlZCBpbnRvIGN1cnJQb3Mu aXRlbXMuCisgKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBh cmUgc2F2ZWQgaW4gbmV3YmF0Y2guaXRlbXMuCiAgKiBtb3JlTGVmdCBvciBtb3JlUmlnaHQgKGFz IGFwcHJvcHJpYXRlKSBpcyBjbGVhcmVkIGlmIF9idF9jaGVja2tleXMgcmVwb3J0cwogICogdGhh dCB0aGVyZSBjYW4gYmUgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgc2Nh biBkaXJlY3Rpb24KICAqIChjb3VsZCBqdXN0IGJlIGZvciB0aGUgY3VycmVudCBwcmltaXRpdmUg aW5kZXggc2NhbiB3aGVuIHNjYW4gaGFzIGFycmF5cykuCkBAIC0xMzEsOCArMTMxLDggQEAgc3Rh dGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlrZXlzKEluZGV4U2NhbkRlc2Mgc2Nh bik7CiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGZvdW5kIG9uIHRoZSBw YWdlLCBmYWxzZSBpZiBub25lLgogICovCiBib29sCi1fYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCSBib29s IGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCSBPZmZzZXROdW1iZXIgb2ZmbnVt LCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9u OwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKQEAgLTE0 NCwyMyArMTQ0LDIwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCWJvb2wJCWFycmF5S2V5cywKIAkJCQlp Z25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzOwogCWludAkJ CWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9IDAsCiAJCQkJaW5kbmF0dHM7CiAKIAkvKiBz YXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIsIGFsb25nIHdpdGggaXRzIHNpYmxpbmcg bGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKG5ld2JhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1 ZShwYWdlKTsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNv LT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJl djsKLQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OwotCS8qIGRlbGF5 IHNldHRpbmcgc28tPmN1cnJQb3MubHNuIHVudGlsIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3Bp biAqLwotCXBzdGF0ZS5kaXIgPSBzby0+Y3VyclBvcy5kaXIgPSBkaXI7Ci0Jc28tPmN1cnJQb3Mu bmV4dFR1cGxlT2Zmc2V0ID0gMDsKKwlwc3RhdGUuY3VycnBhZ2UgPSBuZXdiYXRjaC0+Y3VyclBh Z2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihuZXdiYXRjaC0+YnVmKTsKKwluZXdiYXRjaC0+cHJl dlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKKwluZXdiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUt PmJ0cG9fbmV4dDsKKwlwc3RhdGUuZGlyID0gbmV3YmF0Y2gtPmRpciA9IGRpcjsKIAogCS8qIGVp dGhlciBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJlIHNldCBub3cgKG1heSBiZSB1bnNl dCBsYXRlcikgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8gc28tPmN1 cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQb3MubW9yZUxlZnQpOworCUFzc2VydChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBuZXdiYXRjaC0+bW9yZVJpZ2h0IDogbmV3YmF0 Y2gtPm1vcmVMZWZ0KTsKIAlBc3NlcnQoIVBfSUdOT1JFKG9wYXF1ZSkpOwotCUFzc2VydChCVFNj YW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwogCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7 CiAKIAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAqLwpAQCAtMTg4LDE0ICsxODUsMTIg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCiAJewogCQkvKiBhbGxvdyBuZXh0L3ByZXYgcGFnZSB0byBiZSBy ZWFkIGJ5IG90aGVyIHdvcmtlciB3aXRob3V0IGRlbGF5ICovCiAJCWlmIChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikpCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBzby0+Y3VyclBv cy5uZXh0UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCV9idF9wYXJh bGxlbF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoLT5uZXh0UGFnZSwgbmV3YmF0Y2gtPmN1cnJQYWdl KTsKIAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MucHJl dlBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxf cmVsZWFzZShzY2FuLCBuZXdiYXRjaC0+cHJldlBhZ2UsIG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJ fQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgc2Nhbi0+ eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgcHN0YXRlLmN1cnJwYWdlLCBz Y2FuLT54c19zbmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQog CXsKQEAgLTIxMiwxMSArMjA3LDEwIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5i ZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJ CS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0J CQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJCQluZXdiYXRjaC0+bW9yZVJp Z2h0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nh bi0+cGFyYWxsZWxfc2NhbikKLQkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShz Y2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCV9idF9w YXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJ CQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMjgwLDI2ICsyNzQsMjYgQEAgX2J0X3Jl YWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJl ciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKQogCQkJCXsKIAkJ CQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZu dW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCQkJCX0KIAkJCQll bHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNl dDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1iZXIgZmly c3QgVElEKSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRl bXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9z ZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJ CSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAotCQkJCQkJCQkJCQkgIGl0dXApOwor CQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1JbmRleCsrOwogCiAJ CQkJCS8qIFJlbWVtYmVyIGFsbCBsYXRlciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8K IAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkr KykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZu dW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51 bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJ CQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4 Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMzksMTIgKzMzMywxMSBAQCBfYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK IAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVS aWdodCA9IGZhbHNlOworCQkJbmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2Vy dChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVlUGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0 SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28t PmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5l d2JhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7CkBAIC0zNjEs MTEgKzM1NCwxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNr a2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVs ZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3Vy clBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJCQluZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsK IAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9z Y2FuKQotCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJ CQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1z Y2FuX3NjaGVkdWxlKHNjYW4sIG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxz ZTsKIAkJCQl9CiAJCQl9CkBAIC00NjYsMjcgKzQ1OCwyNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJ CQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQlfYnRf c2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVt KG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQl9 CiAJCQkJZWxzZQogCQkJCXsKIAkJCQkJdWludDE2CQluaXRlbXMgPSBCVHJlZVR1cGxlR2V0TlBv c3RpbmcoaXR1cCk7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zm c2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1lbWJlciBs YXN0IFRJRCkgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJ CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJhc2VP ZmZzZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgs IG9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgbml0ZW1z IC0gMSksCi0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zm c2V0KTsKIAogCQkJCQkvKiBSZW1lbWJlciBhbGwgcHJpb3IgVElEcyAobXVzdCBiZSBhdCBsZWFz dCBvbmUpICovCiAJCQkJCWZvciAoaW50IGkgPSBuaXRlbXMgLSAyOyBpID49IDA7IGktLSkKIAkJ CQkJewogCQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBp dGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0 ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwg aSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJ CQkJCX0KIAkJCQl9CiAJCQl9CkBAIC01MDIsMTIgKzQ5NCwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK IAkJICogYmUgZm91bmQgdGhlcmUKIAkJICovCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikK LQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJCQluZXdiYXRjaC0+bW9yZUxlZnQg PSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDApOwotCQlzby0+Y3VyclBvcy5maXJz dEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4VElEc1BlckJU cmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IE1heFRJRHNQZXJCVHJlZVBh Z2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4OworCQluZXdiYXRjaC0+ bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKIAl9CiAKIAkvKgpAQCAtNTI0LDcg KzUxNSw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAqLwogCUFzc2VydCghcHN0YXRlLmZvcmNlbm9u cmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQ b3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0Y2gtPmZpcnN0SXRlbSA8PSBuZXdiYXRjaC0+ bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAyNyw5MCArMTAxOCw5NiBAQCBfYnRfb3Bwb2Rpcl9j aGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAlyZXR1cm4g dHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNb aXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNb aXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28s IGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVw KQorX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBP ZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNl dCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVt SW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZvdChpdHVwKSAmJiAhQlRyZWVUdXBs ZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRfdGlkOwot CWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJ LyogY29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0ZW1zIGFycmF5ICovCisJbmV3YmF0 Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZCA9IGl0dXAtPnRfdGlkOworCW5ld2JhdGNoLT5p dGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCW5ld2JhdGNoLT5pdGVtc1tp dGVtSW5kZXhdLmFsbFZpc2libGUgPSBmYWxzZTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxl cykKIAl7CiAJCVNpemUJCWl0dXBzeiA9IEluZGV4VHVwbGVTaXplKGl0dXApOwogCi0JCWN1cnJJ dGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJbWVtY3B5 KHNvLT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVw c3opOwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsK KwkJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7 CisJCW1lbWNweShuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCwgaXR1cCwgaXR1 cHN6KTsKKwkJKnR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CiAJfQogfQogCiAvKgog ICogU2V0dXAgc3RhdGUgdG8gc2F2ZSBUSURzL2l0ZW1zIGZyb20gYSBzaW5nbGUgcG9zdGluZyBs aXN0IHR1cGxlLgogICoKLSAqIFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5p dGVtc1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcwotICogcmV0dXJuZWQgdG8gc2NhbiBmaXJz dC4gIFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQKLSAq IGJlIHNhdmVkIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgorICogU2F2ZXMgYW4g aW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlz IHJldHVybmVkCisgKiB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBm b3IgcG9zdGluZyBsaXN0IHNob3VsZCBiZSBzYXZlZAorICogYnkgY2FsbGluZyBfYnRfc2F2ZXBv c3RpbmdpdGVtKCkuCiAgKgotICogUmV0dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdl IHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcyBzdG9yZWQgYXQgaWYKLSAqIG5lZWRlZC4KKyAqIFJl dHVybnMgYmFzZU9mZnNldCwgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0 IG1haW4gdHVwbGUgaXMKKyAqIHN0b3JlZCBhdCBpZiBuZWVkZWQuCiAgKi8KIHN0YXRpYyBpbnQK LV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9m ZnNldE51bWJlciBvZmZudW0sCi0JCQkJCSAgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlk LCBJbmRleFR1cGxlIGl0dXApCitfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2gg bmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29u c3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAorCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50 ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBv cy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNo LT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkp OwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+aW5kZXhPZmZz ZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCS8qIGNvcHkgdGhlIHBvcHVsYXRl ZCBwYXJ0IG9mIHRoZSBpdGVtcyBhcnJheSAqLworCWl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsK KwlpdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT5hbGxWaXNpYmxlID0gZmFsc2U7 CisKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMpCiAJewogCQkvKiBTYXZlIGJhc2UgSW5kZXhU dXBsZSAodHJ1bmNhdGUgcG9zdGluZyBsaXN0KSAqLwogCQlJbmRleFR1cGxlCWJhc2U7CiAJCVNp emUJCWl0dXBzeiA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KGl0dXApOwogCiAJCWl0dXBz eiA9IE1BWEFMSUdOKGl0dXBzeik7Ci0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJy UG9zLm5leHRUdXBsZU9mZnNldDsKLQkJYmFzZSA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBs ZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOworCQlpdGVtLT50dXBsZU9mZnNldCA9 ICp0dXBsZU9mZnNldDsKKwkJYmFzZSA9IChJbmRleFR1cGxlKSAobmV3YmF0Y2gtPmN1cnJUdXBs ZXMgKyAqdHVwbGVPZmZzZXQpOwogCQltZW1jcHkoYmFzZSwgaXR1cCwgaXR1cHN6KTsKIAkJLyog RGVmZW5zaXZlbHkgcmVkdWNlIHdvcmsgYXJlYSBpbmRleCB0dXBsZSBoZWFkZXIgc2l6ZSAqLwog CQliYXNlLT50X2luZm8gJj0gfklOREVYX1NJWkVfTUFTSzsKIAkJYmFzZS0+dF9pbmZvIHw9IGl0 dXBzejsKLQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKKwkJKnR1cGxl T2Zmc2V0ICs9IGl0dXBzejsKIAotCQlyZXR1cm4gY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0OworCQly ZXR1cm4gaXRlbS0+dHVwbGVPZmZzZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBT YXZlIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBj dXJyZW50IHBvc3RpbmcKKyAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1z W2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZwogICogdHVwbGUuCiAgKgogICogQXNzdW1l cyB0aGF0IF9idF9zZXR1cHBvc3RpbmdpdGVtcygpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZv ciBjdXJyZW50Ci0gKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1 cm4gdmFsdWUgYXMgdHVwbGVPZmZzZXQuCisgKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIg cGFzc2VzIGl0cyByZXR1cm4gdmFsdWUgYXMgYmFzZU9mZnNldC4KICAqLwogc3RhdGljIGlubGlu ZSB2b2lkCi1fYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRl eCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1 cGxlT2Zmc2V0KQorX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwg aW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJSXRlbVBvaW50ZXIgaGVh cFRpZCwgaW50IGJhc2VPZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28t PmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbSA9ICZu ZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBU aWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWl0ZW0tPmhlYXBUaWQgPSAq aGVhcFRpZDsKKwlpdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT5hbGxWaXNpYmxl ID0gZmFsc2U7CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgtb25seSBzY2FucyByZXR1cm4gdGhlIHNh bWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVyeSBUSUQKIAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJv bSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1 cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0OworCWlmIChuZXdiYXRjaC0+Y3VyclR1 cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNlT2Zmc2V0OwogfQogCiAjZGVmaW5lIExP T0tfQUhFQURfUkVRVUlSRURfUkVDSEVDS1MgCTMKQEAgLTI4MjIsMTMgKzI4MTksMTMgQEAgbmV3 X3ByaW1fc2NhbjoKIAkgKiBOb3RlOiBXZSBtYWtlIGEgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhl IGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gd2lsbAogCSAqIGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0 X25leHQsIHdoZW4gaXQgaXMgYXNrZWQgdG8gc3RlcCBvZmYgdGhpcyBwYWdlLgogCSAqIEl0IGlz IHVwIHRvIF9idF9uZXh0IHRvIGNhbmNlbCB0aGlzIHNjaGVkdWxlZCBwcmltaXRpdmUgaW5kZXgg c2NhbgotCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9w cG9zaXRlIGN1cnJQb3MuZGlyLgorCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0 aGUgZGlyZWN0aW9uIG9wcG9zaXRlIHBzdGF0ZS0+ZGlyLgogCSAqLwogCXBzdGF0ZS0+Y29udGlu dWVzY2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlz by0+bmVlZFByaW1TY2FuID0gdHJ1ZTsJLyogLi4uYnV0IGNhbGwgX2J0X2ZpcnN0IGFnYWluICov CiAKIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3Nj aGVkdWxlKHNjYW4sIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1z Y2FuX3NjaGVkdWxlKHNjYW4sIHBzdGF0ZS0+Y3VycnBhZ2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVw bGUgZG9lc24ndCBtYXRjaCB0aGUgbmV3IHF1YWwgKi8KIAlyZXR1cm4gZmFsc2U7CkBAIC0yOTEz LDE0ICsyOTEwLDYgQEAgX2J0X2FkdmFuY2VfYXJyYXlfa2V5c19pbmNyZW1lbnQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkgKiBSZXN0b3JlIHRoZSBhcnJheSBrZXlz IHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgaW4gaW1tZWRpYXRlbHkgYmVmb3JlIHdlCiAJICogd2Vy ZSBjYWxsZWQuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJyYXlzIG9ubHkgZXZlciByYXRjaGV0 IGluIHRoZQogCSAqIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCi0JICoKLQkgKiBXaXRob3V0IHRo aXMsIHNjYW5zIGNvdWxkIG92ZXJsb29rIG1hdGNoaW5nIHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0J ICogZGlyZWN0aW9uIGdldHMgcmV2ZXJzZWQganVzdCBiZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91 dCBvZiBpdGVtcyB0bwotCSAqIHJldHVybiwgYnV0IGp1c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHBy ZXBhcmVzIGFsbCB0aGUgaXRlbXMgZnJvbSB0aGUKLQkgKiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBz by0+Y3VyclBvcy4gIFdoZW4gd2UncmUgb24gdGhlIGZpbmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBp Y2FsIGZvciBzby0+Y3VyclBvcyB0byBnZXQgaW52YWxpZGF0ZWQgb25jZSBidGdldHR1cGxlIGZp bmFsbHkKLQkgKiByZXR1cm5zIGZhbHNlLCB3aGljaCdsbCBlZmZlY3RpdmVseSBpbnZhbGlkYXRl IHRoZSBzY2FuJ3MgYXJyYXkga2V5cy4KLQkgKiBUaGF0IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRo b3VnaCAtLSBhbmQgaW4gZ2VuZXJhbCBpdCBtYXkgbmV2ZXIgaGFwcGVuLgogCSAqLwogCV9idF9z dGFydF9hcnJheV9rZXlzKHNjYW4sIC1kaXIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUu YwppbmRleCAzZGVjMWVlNjUuLjY5MGYwNTM0ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJl ZS5jCkBAIC0xNTksMTEgKzE1OSwxMiBAQCBidGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJ LmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gYnRi ZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0cmVzY2FuLAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0 dHVwbGUsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNo LAorCQkuYW1mcmVlYmF0Y2ggPSBidGZyZWViYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gYnRnZXRi aXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBidGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBidG1hcmtw b3MsCi0JCS5hbXJlc3RycG9zID0gYnRyZXN0cnBvcywKKwkJLmFtcG9zcmVzZXQgPSBidHBvc3Jl c2V0LAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4s CiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBidGluaXRwYXJhbGxlbHNjYW4sCiAJCS5hbXBhcmFs bGVscmVzY2FuID0gYnRwYXJhbGxlbHJlc2NhbiwKQEAgLTIyMiwxMyArMjIzLDEzIEBAIGJ0aW5z ZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogfQogCiAvKgot ICoJYnRnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0 Z2V0YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRo ZSBzY2FuCiAgKi8KLWJvb2wKLWJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsK KwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IHByaW9yYmF0Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVh cFJlbGF0aW9uICE9IE5VTEwpOwogCkBAIC0yNDEsNDUgKzI0MiwyMCBAQCBidGdldHR1cGxlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCS8qCiAJCSAqIElmIHdlJ3Zl IGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGlu CiAJCSAqIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28g eWV0LCB3ZSBjYWxsCi0JCSAqIF9idF9maXJzdCgpIHRvIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0 aGUgc2Nhbi4KKwkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBiYXRjaCBpbiB0aGUg c2Nhbi4KIAkJICovCi0JCWlmICghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCQly ZXMgPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKKwkJaWYgKGJhdGNoID09IE5VTEwpCisJCQliYXRj aCA9IF9idF9maXJzdChzY2FuLCBkaXIpOwogCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBDaGVj ayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4K LQkJCSAqLwotCQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJ CQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3Vj aAotCQkJCSAqIHR1cGxlcyBhdCBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRoZSBpbmRleCBw YWdlLikgIFRoZQotCQkJCSAqIHRlc3QgZm9yIG51bUtpbGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0 IHBhcmFub2lhOiBpZiB0aGUKLQkJCQkgKiBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRo ZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZQotCQkJCSAqIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQg bXVsdGlwbGUgdGltZXMuIEl0J3Mgbm90IHdvcnRoCi0JCQkJICogdHJ5aW5nIHRvIG9wdGltaXpl IHRoYXQsIHNvIHdlIGRvbid0IGRldGVjdCBpdCwgYnV0IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZv cmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCi0JCQkJICovCi0JCQkJaWYgKHNvLT5raWxsZWRJdGVt cyA9PSBOVUxMKQotCQkJCQlzby0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhU SURzUGVyQlRyZWVQYWdlKTsKLQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJl ZVBhZ2UpCi0JCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQ b3MuaXRlbUluZGV4OwotCQkJfQorCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBkaXIsIGJhdGNo KTsKIAotCQkJLyoKLQkJCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVz ID0gX2J0X25leHQoc2NhbiwgZGlyKTsKLQkJfQotCi0JCS8qIElmIHdlIGhhdmUgYSB0dXBsZSwg cmV0dXJuIGl0IC4uLiAqLwotCQlpZiAocmVzKQorCQkvKiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJl dHVybiBpdCAuLi4gKi8KKwkJaWYgKGJhdGNoKQogCQkJYnJlYWs7CiAJCS8qIC4uLiBvdGhlcndp c2Ugc2VlIGlmIHdlIG5lZWQgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCX0gd2hp bGUgKHNvLT5udW1BcnJheUtleXMgJiYgX2J0X3N0YXJ0X3ByaW1fc2NhbihzY2FuKSk7CiAKLQly ZXR1cm4gcmVzOworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI4OSw2ICsyNjUsNyBAQCBp bnQ2NAogYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIHsK IAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJSW5kZXhT Y2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50aWRzID0gMDsKIAlJdGVtUG9pbnRlciBoZWFwVGlk OwogCkBAIC0yOTcsMjkgKzI3NCwyOSBAQCBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4s IFRJREJpdG1hcCAqdGJtKQogCS8qIEVhY2ggbG9vcCBpdGVyYXRpb24gcGVyZm9ybXMgYW5vdGhl ciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCWRvCiAJewotCQkvKiBGZXRjaCB0aGUgZmlyc3Qg cGFnZSAmIHR1cGxlICovCi0JCWlmIChfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24pKQorCQkvKiBGZXRjaCB0aGUgZmlyc3QgYmF0Y2ggKi8KKwkJaWYgKChiYXRjaCA9IF9idF9m aXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpKQogCQl7Ci0JCQkvKiBTYXZlIHR1cGxl IElELCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8KLQkJCWhlYXBUaWQgPSAmc2Nhbi0+eHNfaGVh cHRpZDsKKwkJCWludAkJCWl0ZW1JbmRleCA9IDA7CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUn cyBUSUQgKi8KKwkJCWhlYXBUaWQgPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsK IAkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMrKzsK IAogCQkJZm9yICg7OykKIAkJCXsKLQkJCQkvKgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBs ZSB3aXRoaW4gcGFnZS4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBjYXNl IGluIF9idF9uZXh0KCkuCi0JCQkJICovCi0JCQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4 ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3aXRo aW4gcGFnZS1zaXplZCBiYXRjaCAqLworCQkJCWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0 SXRlbSkKIAkJCQl7CiAJCQkJCS8qIGxldCBfYnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAq LwotCQkJCQlpZiAoIV9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJ aXRlbUluZGV4ID0gMDsKKwkJCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwgYmF0Y2gpOworCQkJCQlpZiAoIWJhdGNoKQogCQkJCQkJYnJlYWs7CiAJCQkJfQog Ci0JCQkJLyogU2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQkJaGVh cFRpZCA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdLmhlYXBUaWQ7 CisJCQkJaGVhcFRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlkOwogCQkJCXRi bV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFsc2UpOwogCQkJCW50aWRzKys7CiAJCQl9 CkBAIC0zNDcsOCArMzI0LDYgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMs IGludCBub3JkZXJieXMpCiAKIAkvKiBhbGxvY2F0ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNv ID0gcGFsbG9jX29iamVjdChCVFNjYW5PcGFxdWVEYXRhKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAo c2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtleURhdGEgPSAoU2NhbktleSkgcGFsbG9j KHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2 MiwxOSArMzM3LDkgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBu b3JkZXJieXMpCiAJc28tPm9yZGVyUHJvY3MgPSBOVUxMOwogCXNvLT5hcnJheUNvbnRleHQgPSBO VUxMOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsJCS8qIHVudGlsIG5lZWRlZCAqLwotCXNv LT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBkb24ndCBrbm93IHlldCB3aGV0aGVyIHRo ZSBzY2FuIHdpbGwgYmUgaW5kZXgtb25seSwgc28gd2UgZG8gbm90Ci0JICogYWxsb2NhdGUgdGhl IHR1cGxlIHdvcmtzcGFjZSBhcnJheXMgdW50aWwgYnRyZXNjYW4uICBIb3dldmVyLCB3ZSBzZXQg dXAKLQkgKiBzY2FuLT54c19pdHVwZGVzYyB3aGV0aGVyIHdlJ2xsIG5lZWQgaXQgb3Igbm90LCBz aW5jZSB0aGF0J3Mgc28gY2hlYXAuCi0JICovCi0Jc28tPmN1cnJUdXBsZXMgPSBzby0+bWFya1R1 cGxlcyA9IE5VTEw7Ci0KLQlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVs KTsKLQogCXNjYW4tPm9wYXF1ZSA9IHNvOworCXNjYW4tPnhzX2l0dXBkZXNjID0gUmVsYXRpb25H ZXREZXNjcihyZWwpOworCXNjYW4tPm1heGl0ZW1zYmF0Y2ggPSBNYXhUSURzUGVyQlRyZWVQYWdl OwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zODgsNzIgKzM1MywzOSBAQCBidHJlc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIHsKIAlCVFNj YW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVu J3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlp ZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmlu ZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+ bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGlu SWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9z KTsKLQl9Ci0KLQkvKgotCSAqIFdlIHByZWZlciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBp bnMgYmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkgKiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFD VVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9jayBvbiB0aGUgcGFnZS4KLQkgKgotCSAq IFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25seSBz Y2FucyBkdWUgdG8gYQotCSAqIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGlu ZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0JICogSXQncyBhbHNvIHVuc2FmZSBmb3Ig cGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KLQkgKgotCSAq IFdoZW4gd2UgZHJvcCBwaW5zIGVhZ2VybHksIHRoZSBtZWNoYW5pc20gdGhhdCBtYXJrcyBzby0+ a2lsbGVkSXRlbXNbXQotCSAqIGluZGV4IHR1cGxlcyBMUF9ERUFEIGhhcyB0byBkZWFsIHdpdGgg Y29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHJhY2VzLgotCSAqIFRoZSBzY2hlbWUgdXNlZCB0byBk ZXRlY3QgdW5zYWZlIFRJRCByZWN5Y2xpbmcgd29uJ3Qgd29yayB3aGVuIHNjYW5uaW5nCi0JICog dW5sb2dnZWQgcmVsYXRpb25zIChzaW5jZSBpdCBpbnZvbHZlcyBzYXZpbmcgYW4gYWZmZWN0ZWQg cGFnZSdzIExTTikuCi0JICogT3B0IG91dCBvZiBlYWdlciBwaW4gZHJvcHBpbmcgZHVyaW5nIHVu bG9nZ2VkIHJlbGF0aW9uIHNjYW5zIGZvciBub3cKLQkgKiAodGhpcyBpcyBwcmVmZXJhYmxlIHRv IG9wdGluZyBvdXQgb2Yga2lsbF9wcmlvcl90dXBsZSBMUF9ERUFEIHNldHRpbmcpLgotCSAqCi0J ICogQWxzbyBvcHQgb3V0IG9mIGRyb3BwaW5nIGxlYWYgcGFnZSBwaW5zIGVhZ2VybHkgZHVyaW5n IGJpdG1hcCBzY2Fucy4KLQkgKiBQaW5zIGNhbm5vdCBiZSBoZWxkIGZvciBtb3JlIHRoYW4gYW4g aW5zdGFudCBkdXJpbmcgYml0bWFwIHNjYW5zIGVpdGhlcgotCSAqIHdheSwgc28gd2UgbWlnaHQg YXMgd2VsbCBhdm9pZCB3YXN0aW5nIGN5Y2xlcyBvbiBhY3F1aXJpbmcgcGFnZSBMU05zLgotCSAq Ci0JICogU2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBvbiBtYWtpbmcgY29uY3VycmVudCBUSUQg cmVjeWNsaW5nIHNhZmUuCi0JICoKLQkgKiBOb3RlOiBzby0+ZHJvcFBpbiBzaG91bGQgbmV2ZXIg Y2hhbmdlIGFjcm9zcyByZXNjYW5zLgotCSAqLwotCXNvLT5kcm9wUGluID0gKCFzY2FuLT54c193 YW50X2l0dXAgJiYKLQkJCQkgICBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYK LQkJCQkgICBSZWxhdGlvbk5lZWRzV0FMKHNjYW4tPmluZGV4UmVsYXRpb24pICYmCi0JCQkJICAg c2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOwotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsK LQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0Jc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKLQlz by0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28t Pm1hcmtQb3MpOwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCi0JLyoKLQkg KiBBbGxvY2F0ZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzLCBpZiBuZWVkZWQgZm9yIGFuIGluZGV4 LW9ubHkgc2NhbiBhbmQKLQkgKiBub3QgYWxyZWFkeSBkb25lIGluIGEgcHJldmlvdXMgcmVzY2Fu IGNhbGwuICBUbyBzYXZlIG9uIHBhbGxvYwotCSAqIG92ZXJoZWFkLCBib3RoIHdvcmtzcGFjZXMg YXJlIGFsbG9jYXRlZCBhcyBvbmUgcGFsbG9jIGJsb2NrOyBvbmx5IHRoaXMKLQkgKiBmdW5jdGlv biBhbmQgYnRlbmRzY2FuIGtub3cgdGhhdC4KLQkgKi8KLQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVw ICYmIHNvLT5jdXJyVHVwbGVzID09IE5VTEwpCi0JewotCQlzby0+Y3VyclR1cGxlcyA9IChjaGFy ICopIHBhbGxvYyhCTENLU1ogKiAyKTsKLQkJc28tPm1hcmtUdXBsZXMgPSBzby0+Y3VyclR1cGxl cyArIEJMQ0tTWjsKLQl9Ci0KIAkvKgogCSAqIFJlc2V0IHRoZSBzY2FuIGtleXMKIAkgKi8KIAlp ZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5 RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7 CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJ c28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIAlzby0+bnVtYmVyT2ZLZXlzID0gMDsJCS8q IHVudGlsIF9idF9wcmVwcm9jZXNzX2tleXMgc2V0cyBpdCAqLwogCXNvLT5udW1BcnJheUtleXMg PSAwOwkJLyogZGl0dG8gKi8KIH0KIAorLyoKKyAqCWJ0ZnJlZWJhdGNoKCkgLS0gRnJlZSBiYXRj aCByZXNvdXJjZXMsIGluY2x1ZGluZyBpdHMgYnVmZmVyIHBpbgorICovCit2b2lkCitidGZyZWVi YXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCWlmIChi YXRjaC0+bnVtS2lsbGVkID4gMCkKKwkJX2J0X2tpbGxpdGVtcyhzY2FuLCBiYXRjaCk7CisKKwlp ZiAoQnVmZmVySXNWYWxpZChiYXRjaC0+YnVmKSkKKwl7CisJCS8qIHRhYmxlIEFNIGRpZG4ndCB1 bnBpbiBwYWdlIGVhcmxpZXIgLS0gZG8gaXQgbm93ICovCisJCUFzc2VydCghc2Nhbi0+TVZDQ1Nj YW4pOworCisJCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CisJCWJhdGNoLT5idWYgPSBJbnZh bGlkQnVmZmVyOworCX0KKworCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNo KTsKK30KKwogLyoKICAqCWJ0ZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAg LTQ2MiwxMTYgKzM5NCw0OCBAQCBidGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFy ZW4ndCBob2xkaW5nIGFueSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwot CWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2 aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNv LT5udW1LaWxsZWQgPiAwKQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5w aW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsK LQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8g aW52YWxpZGF0ZSBwb3NpdGlvbnMsIHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0K IAkvKiBSZWxlYXNlIHN0b3JhZ2UgKi8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZy ZWUoc28tPmtleURhdGEpOwogCS8qIHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFy ZSBpbiBhcnJheUNvbnRleHQgKi8KIAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlN ZW1vcnlDb250ZXh0RGVsZXRlKHNvLT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRl bXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBs ZXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVz IHNob3VsZCBub3QgYmUgcGZyZWUnZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQog CiAvKgotICoJYnRtYXJrcG9zKCkgLS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0 cG9zcmVzZXQoKSAtLSBpbnZhbGlkYXRlIHNjYW4ncyBhcnJheSBrZXlzCiAgKi8KIHZvaWQKLWJ0 bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCitidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggbWFya2JhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIFRoZXJlIG1heSBiZSBhbiBvbGQgbWFyayB3 aXRoIGEgcGluIChidXQgbm8gbG9jaykuICovCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+ bWFya1Bvcyk7CisJaWYgKCFzby0+bnVtQXJyYXlLZXlzKQorCQlyZXR1cm47CiAKIAkvKgotCSAq IEp1c3QgcmVjb3JkIHRoZSBjdXJyZW50IGl0ZW1JbmRleC4gIElmIHdlIGxhdGVyIHN0ZXAgdG8g bmV4dCBwYWdlCi0JICogYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFya2VkIHBvc2l0aW9uLCBfYnRf c3RlcHBhZ2UgbWFrZXMgYSBmdWxsIGNvcHkgb2YKLQkgKiB0aGUgY3VyclBvcyBzdHJ1Y3QgaW4g bWFya1Bvcy4gIElmIChhcyBvZnRlbiBoYXBwZW5zKSB0aGUgbWFyayBpcyBtb3ZlZAotCSAqIGJl Zm9yZSB3ZSBsZWF2ZSB0aGUgcGFnZSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IHdvcmsuCisJ ICogQ29yZSBzeXN0ZW0gaXMgYWJvdXQgdG8gcmVzdG9yZSBhIG1hcmsgYXNzb2NpYXRlZCB3aXRo IGEgcHJldmlvdXNseQorCSAqIHJldHVybmVkIGJhdGNoLiAgUmVzZXQgdGhlIHNjYW4ncyBhcnJh eXMgdG8gbWFrZSBhbGwgdGhpcyBzYWZlLgogCSAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSkKLQkJc28tPm1hcmtJdGVtSW5kZXggPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7 CisJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgbWFya2JhdGNoLT5kaXIpOworCisJLyoKKwkg KiBDb3JlIHN5c3RlbSB3aWxsIGludmFsaWRhdGUgYWxsIG90aGVyIGJhdGNoZXMuCisJICoKKwkg KiBEZWFsIHdpdGggdGhpcyBieSB1bnNldHRpbmcgbmVlZFByaW1TY2FuIGFzIHdlbGwgYXMgbW9y ZVJpZ2h0IChvciBhcworCSAqIHdlbGwgYXMgbW9yZUxlZnQsIHdoZW4gc2Nhbm5pbmcgYmFja3dh cmRzKS4gIFRoYXQgd2F5LCB0aGUgbmV4dCB0aW1lCisJICogX2J0X25leHQgaXMgY2FsbGVkIGl0 IHdpbGwgc3RlcCB0byB0aGUgcmlnaHQgKG9yIHRvIHRoZSBsZWZ0KS4gIEF0IHRoYXQKKwkgKiBw b2ludCBfYnRfcmVhZHBhZ2Ugd2lsbCByZXN0b3JlIHRoZSBzY2FuJ3MgYXJyYXlzIHRvIGVsZW1l bnRzIHRoYXQKKwkgKiBjb3JyZWN0bHkgdHJhY2sgdGhlIG5leHQgcGFnZSdzIHBvc2l0aW9uIGlu IHRoZSBpbmRleCdzIGtleSBzcGFjZS4KKwkgKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2Fy ZChtYXJrYmF0Y2gtPmRpcikpCisJCW1hcmtiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAllbHNl Ci0JewotCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQkJc28tPm1hcmtJdGVt SW5kZXggPSAtMTsKLQl9Ci19Ci0KLS8qCi0gKglidHJlc3RycG9zKCkgLS0gcmVzdG9yZSBzY2Fu IHRvIGxhc3Qgc2F2ZWQgcG9zaXRpb24KLSAqLwotdm9pZAotYnRyZXN0cnBvcyhJbmRleFNjYW5E ZXNjIHNjYW4pCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOwotCi0JaWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKgotCQkgKiBUaGUg c2NhbiBoYXMgbmV2ZXIgbW92ZWQgdG8gYSBuZXcgcGFnZSBzaW5jZSB0aGUgbGFzdCBtYXJrLiAg SnVzdAotCQkgKiByZXN0b3JlIHRoZSBpdGVtSW5kZXguCi0JCSAqCi0JCSAqIE5COiBJbiB0aGlz IGNhc2Ugd2UgY2FuJ3QgY291bnQgb24gYW55dGhpbmcgaW4gc28tPm1hcmtQb3MgdG8gYmUKLQkJ ICogYWNjdXJhdGUuCi0JCSAqLwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0 ZW1JbmRleDsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gbW92ZWQgdG8gYSBu ZXcgcGFnZSBhZnRlciBsYXN0IG1hcmsgb3IgcmVzdG9yZSwgYW5kIHdlIGFyZQotCQkgKiBub3cg cmVzdG9yaW5nIHRvIHRoZSBtYXJrZWQgcGFnZS4gIFdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFk Ci0JCSAqIGxvY2tzLCBidXQgaWYgd2UncmUgc3RpbGwgaG9sZGluZyB0aGUgcGluIGZvciB0aGUg Y3VycmVudCBwb3NpdGlvbiwKLQkJICogd2UgbXVzdCBkcm9wIGl0LgotCQkgKi8KLQkJaWYgKEJU U2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQl7Ci0JCQkvKiBCZWZvcmUgbGVhdmluZyBj dXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCQlpZiAoc28tPm51 bUtpbGxlZCA+IDApCi0JCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJCUJUU2NhblBvc1VucGlu SWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQl9Ci0KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28t Pm1hcmtQb3MpKQotCQl7Ci0JCQkvKiBidW1wIHBpbiBvbiBtYXJrIGJ1ZmZlciBmb3IgYXNzaWdu bWVudCB0byBjdXJyZW50IGJ1ZmZlciAqLwotCQkJaWYgKEJUU2NhblBvc0lzUGlubmVkKHNvLT5t YXJrUG9zKSkKLQkJCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPm1hcmtQb3MuYnVmKTsKLQkJCW1l bWNweSgmc28tPmN1cnJQb3MsICZzby0+bWFya1BvcywKLQkJCQkgICBvZmZzZXRvZihCVFNjYW5Q b3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJCSAgIHNvLT5tYXJrUG9zLmxhc3RJdGVtICogc2l6ZW9m KEJUU2NhblBvc0l0ZW0pKTsKLQkJCWlmIChzby0+Y3VyclR1cGxlcykKLQkJCQltZW1jcHkoc28t PmN1cnJUdXBsZXMsIHNvLT5tYXJrVHVwbGVzLAotCQkJCQkgICBzby0+bWFya1Bvcy5uZXh0VHVw bGVPZmZzZXQpOwotCQkJLyogUmVzZXQgdGhlIHNjYW4ncyBhcnJheSBrZXlzIChzZWUgX2J0X3N0 ZXBwYWdlIGZvciB3aHkpICovCi0JCQlpZiAoc28tPm51bUFycmF5S2V5cykKLQkJCXsKLQkJCQlf YnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBzby0+Y3VyclBvcy5kaXIpOwotCQkJCXNvLT5uZWVk UHJpbVNjYW4gPSBmYWxzZTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCQlCVFNjYW5Qb3NJbnZhbGlk YXRlKHNvLT5jdXJyUG9zKTsKLQl9CisJCW1hcmtiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCXNv LT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5v cHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiB9CiAKIC8qCkBAIC04ODcsMTUgKzc1MSw2IEBAIF9i dF9wYXJhbGxlbF9zZWl6ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyICpuZXh0X3Nj YW5fcGFnZSwKIAkqbmV4dF9zY2FuX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJKmxhc3Rf Y3Vycl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCi0JLyoKLQkgKiBSZXNldCBzby0+Y3Vy clBvcywgYW5kIGluaXRpYWxpemUgbW9yZUxlZnQvbW9yZVJpZ2h0IHN1Y2ggdGhhdCB0aGUgbmV4 dAotCSAqIGNhbGwgdG8gX2J0X3JlYWRuZXh0cGFnZSB0cmVhdHMgdGhpcyBiYWNrZW5kIHNpbWls YXJseSB0byBhIHNlcmlhbAotCSAqIGJhY2tlbmQgdGhhdCBzdGVwcyBmcm9tICpsYXN0X2N1cnJf cGFnZSB0byAqbmV4dF9zY2FuX3BhZ2UgKHVubGVzcyB0aGlzCi0JICogYmFja2VuZCdzIHNvLT5j dXJyUG9zIGlzIGluaXRpYWxpemVkIGJ5IF9idF9yZWFkZmlyc3RwYWdlIGJlZm9yZSB0aGVuKS4K LQkgKi8KLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlzby0+Y3VyclBvcy5t b3JlTGVmdCA9IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0KIAlpZiAoZmlyc3QpCiAJ ewogCQkvKgpAQCAtMTA0NSw4ICs5MDAsNiBAQCBfYnRfcGFyYWxsZWxfZG9uZShJbmRleFNjYW5E ZXNjIHNjYW4pCiAJQlRQYXJhbGxlbFNjYW5EZXNjIGJ0c2NhbjsKIAlib29sCQlzdGF0dXNfY2hh bmdlZCA9IGZhbHNlOwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7 Ci0KIAkvKiBEbyBub3RoaW5nLCBmb3Igbm9uLXBhcmFsbGVsIHNjYW5zICovCiAJaWYgKHBhcmFs bGVsX3NjYW4gPT0gTlVMTCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMKaW5kZXggMzJhZTBiZGE4Li4wM2U4OTMxZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRzZWFyY2guYwpAQCAtMjYsNTMgKzI2LDIzIEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CiAKIAotc3RhdGljIGlubGluZSB2b2lkIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxh dGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbyk7CiBzdGF0aWMgQnVmZmVyIF9idF9tb3ZlcmlnaHQo UmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJ CUJ1ZmZlciBidWYsIGJvb2wgZm9ydXBkYXRlLCBCVFN0YWNrIHN0YWNrLAogCQkJCQkJCWludCBh Y2Nlc3MpOwogc3RhdGljIE9mZnNldE51bWJlciBfYnRfYmluc3JjaChSZWxhdGlvbiByZWwsIEJU U2Nhbkluc2VydCBrZXksIEJ1ZmZlciBidWYpOwogc3RhdGljIGludAlfYnRfYmluc3JjaF9wb3N0 aW5nKEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9m Zm51bSk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVzYyBz Y2FuLCBCVFNjYW5PcGFxdWUgc28pOwotc3RhdGljIGJvb2wgX2J0X3N0ZXBwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIGJvb2wgX2J0X3JlYWRmaXJz dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCSAg U2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIGJvb2wgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCQkJCSBCbG9ja051bWJlciBsYXN0 Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwKLQkJCQkJCQkgYm9vbCBzZWl6ZWQpOworc3Rh dGljIEluZGV4U2NhbkJhdGNoIF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCwKKwkJCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVt LCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X3JlYWRuZXh0 cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAorCQkJCQkJCQkJICAg QmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywKKwkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGly LCBib29sIGZpcnN0cGFnZSk7CiBzdGF0aWMgQnVmZmVyIF9idF9sb2NrX2FuZF92YWxpZGF0ZV9s ZWZ0KFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgKmJsa25vLAogCQkJCQkJCQkJCSBCbG9ja051 bWJlciBsYXN0Y3VycmJsa25vKTsKLXN0YXRpYyBib29sIF9idF9lbmRwb2ludChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRf ZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJ ICAgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCk7CiAKIAotLyoKLSAqCV9idF9kcm9wX2xvY2tf YW5kX21heWJlX3BpbigpCi0gKgotICogVW5sb2NrIHNvLT5jdXJyUG9zLmJ1Zi4gIElmIHNjYW4g aXMgc28tPmRyb3BQaW4sIGRyb3AgdGhlIHBpbiwgdG9vLgotICogRHJvcHBpbmcgdGhlIHBpbiBw cmV2ZW50cyBWQUNVVU0gZnJvbSBibG9ja2luZyBvbiBhY3F1aXJpbmcgYSBjbGVhbnVwIGxvY2su Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJl bGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKQotewotCWlmICghc28tPmRyb3BQaW4pCi0Jewot CQkvKiBKdXN0IGRyb3AgdGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVm KHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogRHJvcCBi b3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgotCSAqCi0JICogSGF2ZSB0byBzZXQgc28tPmN1cnJQ b3MubHNuIHNvIHRoYXQgX2J0X2tpbGxpdGVtcyBoYXMgYSB3YXkgdG8gZGV0ZWN0Ci0JICogd2hl biBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtl biBwbGFjZS4KLQkgKi8KLQlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKLQlzby0+Y3Vy clBvcy5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsKLQlfYnRfcmVs YnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVm ZmVyOwotfQotCiAvKgogICoJX2J0X3NlYXJjaCgpIC0tIFNlYXJjaCB0aGUgdHJlZSBmb3IgYSBw YXJ0aWN1bGFyIHNjYW5rZXksCiAgKgkJb3IgbW9yZSBwcmVjaXNlbHkgZm9yIHRoZSBmaXJzdCBs ZWFmIHBhZ2UgaXQgY291bGQgYmUgb24uCkBAIC04NjEsMjAgKzgzMSwxNiBAQCBfYnRfY29tcGFy ZShSZWxhdGlvbiByZWwsCiAgKgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAg V2UgZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsCiAgKgkJaWYgYmFja3dhcmRzIHNjYW4sIHRoZSBs YXN0IGl0ZW0pIGluIHRoZSB0cmVlIHRoYXQgc2F0aXNmaWVzIHRoZQogICoJCXF1YWxpZmljYXRp b25zIGluIHRoZSBzY2FuIGtleS4gIE9uIHN1Y2Nlc3MgZXhpdCwgZGF0YSBhYm91dCB0aGUKLSAq CQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50byBzby0+ Y3VyclBvcy4gIFdlJ2xsCi0gKgkJZHJvcCBhbGwgbG9ja3MgYW5kIGhvbGQgb250byBhIHBpbiBv biBwYWdlJ3MgYnVmZmVyLCBleGNlcHQgZHVyaW5nCi0gKgkJc28tPmRyb3BQaW4gc2NhbnMsIHdo ZW4gd2UgZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgotICoJCV9idF9yZXR1cm5pdGVt IHNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gc2NhbiBvbiBzdWNjZXNzIGV4aXQuCisg KgkJbWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8gdGhl IHJldHVybmVkIGJhdGNoLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBp biB0aGUgaW5kZXgsIHdlIHJldHVybiBmYWxzZSwgd2l0aCBubwotICogcGlucyBvciBsb2NrcyBo ZWxkLiAgc28tPmN1cnJQb3Mgd2lsbCByZW1haW4gaW52YWxpZC4KKyAqIElmIHRoZXJlIGFyZSBu byBtYXRjaGluZyBpdGVtcyBpbiB0aGUgaW5kZXgsIHdlIGp1c3QgcmV0dXJuIE5VTEwuCiAgKgog ICogTm90ZSB0aGF0IHNjYW4tPmtleURhdGFbXSwgYW5kIHRoZSBzby0+a2V5RGF0YVtdIHNjYW5r ZXkgYnVpbHQgZnJvbSBpdCwKICAqIGFyZSBib3RoIHNlYXJjaC10eXBlIHNjYW5rZXlzIChzZWUg bmJ0cmVlL1JFQURNRSBmb3IgbW9yZSBhYm91dCB0aGlzKS4KICAqIFdpdGhpbiB0aGlzIHJvdXRp bmUsIHdlIGJ1aWxkIGEgdGVtcG9yYXJ5IGluc2VydGlvbi10eXBlIHNjYW5rZXkgdG8gdXNlCiAg KiBpbiBsb2NhdGluZyB0aGUgc2NhbiBzdGFydCBwb3NpdGlvbi4KICAqLwotYm9vbAorSW5kZXhT Y2FuQmF0Y2gKIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC04ODgsOCArODU0 LDEwIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CVN0cmF0ZWd5TnVtYmVyIHN0cmF0X3RvdGFsID0gSW52YWxpZFN0cmF0ZWd5OwogCUJsb2NrTnVt YmVyIGJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyLAogCQkJCWxhc3RjdXJyYmxrbm87CisJSW5k ZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWZpcnN0 YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CiAKIAkvKgogCSAqIEV4YW1p bmUgdGhlIHNjYW4ga2V5cyBhbmQgZWxpbWluYXRlIGFueSByZWR1bmRhbnQga2V5czsgYWxzbyBt YXJrIHRoZQpAQCAtOTA1LDYgKzg3Myw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAkJ X2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNj YW4sIGZpcnN0YmF0Y2gpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC05MTQsNyArODgzLDEw IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAq LwogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKIAkJIV9idF9wYXJhbGxlbF9z ZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCB0cnVlKSkKLQkJcmV0dXJuIGZhbHNl OworCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJ CXJldHVybiBmYWxzZTsJCQkvKiBkZWZpbml0ZWx5IGRvbmUgKHNvLT5uZWVkUHJpbVNjYW4gaXMg dW5zZXQpICovCisJfQogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBzY2FuJ3MgYXJyYXlzIChp ZiBhbnkpIGZvciB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbgpAQCAtOTMxLDE0ICs5MDMsMTAg QEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAq IF9idF9yZWFkbmV4dHBhZ2UgcmVsZWFzZXMgdGhlIHNjYW4gZm9yIHVzIChub3QgX2J0X3JlYWRm aXJzdHBhZ2UpLgogCQkgKi8KIAkJQXNzZXJ0KHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCk7 Ci0JCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7Ci0JCUFzc2VydChibGtubyAhPSBQX05PTkUp OwogCi0JCWlmICghX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywg ZGlyLCB0cnVlKSkKLQkJCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgZmlyc3RiYXRjaCk7CiAKLQkJX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCQly ZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTEyMzgsNyArMTIwNiw3IEBAIF9i dF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIE5vdGU6 IGNhbGxzIF9idF9yZWFkZmlyc3RwYWdlIGZvciB1cywgd2hpY2ggcmVsZWFzZXMgdGhlIHBhcmFs bGVsIHNjYW4uCiAJICovCiAJaWYgKGtleXN6ID09IDApCi0JCXJldHVybiBfYnRfZW5kcG9pbnQo c2NhbiwgZGlyKTsKKwkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIsIGZpcnN0YmF0Y2gp OwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRoaW4g dGhlIGluZGV4LiAgU2V0IHVwIGFuCkBAIC0xNTA2LDEyICsxNDc0LDEyIEBAIF9idF9maXJzdChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0aW9uIG91cnNl bHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVjdGlv bklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFja3dhcmQpOwotCXN0YWNrID0gX2J0X3NlYXJj aChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJUX1JFQUQpOworCXN0YWNr ID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJUX1JF QUQpOwogCiAJLyogZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBzdGFjayBhcm91bmQuLi4gKi8KIAlf YnRfZnJlZXN0YWNrKHN0YWNrKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5i dWYpKQorCWlmICh1bmxpa2VseSghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKSkKIAl7 CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAKQEAgLTE1MjcsMjMgKzE0OTUsMjQgQEAg X2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCWlmIChJ c29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQogCQl7CiAJCQlQcmVkaWNhdGVMb2NrUmVsYXRpb24o cmVsLCBzY2FuLT54c19zbmFwc2hvdCk7Ci0JCQlzdGFjayA9IF9idF9zZWFyY2gocmVsLCBOVUxM LCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFEKTsKKwkJCXN0YWNrID0gX2J0X3Nl YXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQpOwogCQkJ X2J0X2ZyZWVzdGFjayhzdGFjayk7CiAJCX0KIAotCQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1 cnJQb3MuYnVmKSkKKwkJaWYgKCFCdWZmZXJJc1ZhbGlkKGZpcnN0YmF0Y2gtPmJ1ZikpCiAJCXsK IAkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgZmlyc3RiYXRjaCk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CiAKIAkvKiBw b3NpdGlvbiB0byB0aGUgcHJlY2lzZSBpdGVtIG9uIHRoZSBwYWdlICovCi0Jb2ZmbnVtID0gX2J0 X2JpbnNyY2gocmVsLCAmaW5za2V5LCBzby0+Y3VyclBvcy5idWYpOworCW9mZm51bSA9IF9idF9i aW5zcmNoKHJlbCwgJmluc2tleSwgZmlyc3RiYXRjaC0+YnVmKTsKIAogCS8qCiAJICogTm93IGxv YWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuICh1c3VhbGx5IHRoZSBwYWdl Ci0JICogY3VycmVudGx5IGluIHNvLT5jdXJyUG9zLmJ1ZikuCisJICogY3VycmVudGx5IGluIGZp cnN0YmF0Y2guYnVmKS4KIAkgKgogCSAqIElmIGluc2tleS5uZXh0a2V5ID0gZmFsc2UgYW5kIGlu c2tleS5iYWNrd2FyZCA9IGZhbHNlLCBvZmZudW0gaXMKIAkgKiBwb3NpdGlvbmVkIGF0IHRoZSBm aXJzdCBub24tcGl2b3QgdHVwbGUgPj0gaW5za2V5LnNjYW5rZXlzLgpAQCAtMTU2MSwxNjggKzE1 MzAsNjkgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAJICogZm9yIHRoZSBwYWdlLiAgRm9yIGV4YW1wbGUsIHdoZW4gaW5za2V5IGlzIGJvdGggPCB0 aGUgbGVhZiBwYWdlJ3MgaGlnaAogCSAqIGtleSBhbmQgPiBhbGwgb2YgaXRzIG5vbi1waXZvdCB0 dXBsZXMsIG9mZm51bSB3aWxsIGJlICJtYXhvZmYgKyAxIi4KIAkgKi8KLQlpZiAoIV9idF9yZWFk Zmlyc3RwYWdlKHNjYW4sIG9mZm51bSwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3Jl dHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0 cGFnZShzY2FuLCBmaXJzdGJhdGNoLCBvZmZudW0sIGRpcik7CiB9CiAKIC8qCiAgKglfYnRfbmV4 dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KICAqCi0gKgkJT24gZW50cnksIHNv LT5jdXJyUG9zIGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkgYmUgcGlubmVk Ci0gKgkJYnV0IGlzIG5vdCBsb2NrZWQsIGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRp ZmllcyB3aGljaCBpdGVtIHdhcwotICoJCXByZXZpb3VzbHkgcmV0dXJuZWQuCisgKgkJT24gZW50 cnksIHByaW9yYmF0Y2ggZGVzY3JpYmVzIHRoZSBiYXRjaCB0aGF0IHdhcyBsYXN0IHJldHVybmVk IGJ5CisgKgkJYnRnZXRiYXRjaC4gIFdlJ2xsIHVzZSB0aGUgcHJpb3IgYmF0Y2gncyBwb3NpdGlv bmluZyBpbmZvcm1hdGlvbiB0bworICoJCWRlY2lkZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dC4K ICAqCi0gKgkJT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVkIGFzIG5lZWRl ZCwgYW5kIF9idF9yZXR1cm5pdGVtCi0gKgkJc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0 byB0aGUgc2Nhbi4gIHNvLT5jdXJyUG9zIHJlbWFpbnMgdmFsaWQuCisgKgkJT24gc3VjY2VzcyBl eGl0LCByZXR1cm5zIHRoZSBuZXh0IGJhdGNoLiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUK KyAqCQltYXRjaGluZyB0dXBsZSBvbiBhbnkgcmV0dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0 IHJldHVybiBOVUxMKS4KICAqCi0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyks IHdlIGludmFsaWRhdGUgc28tPmN1cnJQb3MuICBJdCdsbAotICoJCXN0aWxsIGJlIHBvc3NpYmxl IGZvciB0aGUgc2NhbiB0byByZXR1cm4gdHVwbGVzIGJ5IGNoYW5naW5nIGRpcmVjdGlvbiwKLSAq CQl0aG91Z2ggd2UnbGwgbmVlZCB0byBjYWxsIF9idF9maXJzdCBhbmV3IGluIHRoYXQgb3RoZXIg ZGlyZWN0aW9uLgorICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1 cm4gTlVMTC4gIEl0J2xsIHN0aWxsIGJlCisgKgkJcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJl dHVybiB0dXBsZXMgYnkgY2hhbmdpbmcgZGlyZWN0aW9uLCB0aG91Z2gKKyAqCQl3ZSdsbCBuZWVk IHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcgaW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCiAgKi8KLWJv b2wKLV9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCi17Ci0J QlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JQXNzZXJ0 KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWR2YW5jZSB0byBu ZXh0IHR1cGxlIG9uIGN1cnJlbnQgcGFnZTsgb3IgaWYgdGhlcmUncyBubyBtb3JlLCB0cnkgdG8K LQkgKiBzdGVwIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhLgotCSAqLwotCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXgg PiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2Nhbiwg ZGlyKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJaWYgKC0tc28t PmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7Ci0JCQlpZiAo IV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQot CV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFJl dHVybiB0aGUgaW5kZXggaXRlbSBmcm9tIHNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0 ZW1JbmRleF0gdG8gdGhlCi0gKiBpbmRleCBzY2FuIGJ5IHNldHRpbmcgdGhlIHJlbGV2YW50IGZp ZWxkcyBpbiBjYWxsZXIncyBpbmRleCBzY2FuIGRlc2NyaXB0b3IKLSAqLwotc3RhdGljIGlubGlu ZSB2b2lkCi1fYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBz bykKLXsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+ Y3VyclBvcy5pdGVtSW5kZXhdOwotCi0JLyogTW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIG11c3Qg aGF2ZSBzdWNjZWVkZWQgKi8KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVt KTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVt KTsKLQotCS8qIFJldHVybiBuZXh0IGl0ZW0sIHBlciBhbWdldHR1cGxlIGNvbnRyYWN0ICovCi0J c2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOwotCWlmIChzby0+Y3VyclR1cGxl cykKLQkJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBjdXJy SXRlbS0+dHVwbGVPZmZzZXQpOwotfQotCi0vKgotICoJX2J0X3N0ZXBwYWdlKCkgLS0gU3RlcCB0 byBuZXh0IHBhZ2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBzY2FuCi0gKgotICogV3JhcHBl ciBvbiBfYnRfcmVhZG5leHRwYWdlIHRoYXQgcGVyZm9ybXMgZmluYWwgc3RlcHMgZm9yIHRoZSBj dXJyZW50IHBhZ2UuCi0gKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3QgYmUgdmFsaWQu ICBJdHMgYnVmZmVyIHdpbGwgYmUgcGlubmVkLCB0aG91Z2gKLSAqIG5ldmVyIGxvY2tlZC4gKEFj dHVhbGx5LCB3aGVuIHNvLT5kcm9wUGluIHRoZXJlIHdvbid0IGV2ZW4gYmUgYSBwaW4gaGVsZCwK LSAqIHRob3VnaCBzby0+Y3VyclBvcy5jdXJyUGFnZSBtdXN0IHN0aWxsIGJlIHNldCB0byBhIHZh bGlkIGJsb2NrIG51bWJlci4pCi0gKi8KLXN0YXRpYyBib29sCi1fYnRfc3RlcHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitfYnRfbmV4 dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBw cmlvcmJhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKIAlCbG9ja051bWJlciBibGtubywKIAkJCQlsYXN0Y3VycmJsa25vOwogCi0JQXNzZXJ0 KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qIEJlZm9yZSBsZWF2aW5nIGN1 cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQlpZiAoc28tPm51bUtp bGxlZCA+IDApCi0JCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0KLQkvKgotCSAqIEJlZm9yZSB3ZSBt b2RpZnkgY3VyclBvcywgbWFrZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZGF0YSBpZiB0aGVyZSB3YXMg YQotCSAqIG1hcmsgcG9zaXRpb24gdGhhdCBuZWVkcyBpdC4KLQkgKi8KLQlpZiAoc28tPm1hcmtJ dGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qIGJ1bXAgcGluIG9uIGN1cnJlbnQgYnVmZmVyIGZvciBh c3NpZ25tZW50IHRvIG1hcmsgYnVmZmVyICovCi0JCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+ Y3VyclBvcykpCi0JCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPmN1cnJQb3MuYnVmKTsKLQkJbWVt Y3B5KCZzby0+bWFya1BvcywgJnNvLT5jdXJyUG9zLAotCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9z RGF0YSwgaXRlbXNbMV0pICsKLQkJCSAgIHNvLT5jdXJyUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJU U2NhblBvc0l0ZW0pKTsKLQkJaWYgKHNvLT5tYXJrVHVwbGVzKQotCQkJbWVtY3B5KHNvLT5tYXJr VHVwbGVzLCBzby0+Y3VyclR1cGxlcywKLQkJCQkgICBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZz ZXQpOwotCQlzby0+bWFya1Bvcy5pdGVtSW5kZXggPSBzby0+bWFya0l0ZW1JbmRleDsKLQkJc28t Pm1hcmtJdGVtSW5kZXggPSAtMTsKLQotCQkvKgotCQkgKiBJZiB3ZSdyZSBqdXN0IGFib3V0IHRv IHN0YXJ0IHRoZSBuZXh0IHByaW1pdGl2ZSBpbmRleCBzY2FuCi0JCSAqIChwb3NzaWJsZSB3aXRo IGEgc2NhbiB0aGF0IGhhcyBhcnJheXMga2V5cywgYW5kIG5lZWRzIHRvIHNraXAgdG8KLQkJICog Y29udGludWUgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24pLCBtb3JlTGVmdC9tb3JlUmln aHQgb25seQotCQkgKiBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBp bmRleCBzY2FuLiAgVGhleSBtdXN0Ci0JCSAqIG5ldmVyIGJlIHRha2VuIHRvIGluZGljYXRlIHRo YXQgdGhlIHRvcC1sZXZlbCBpbmRleCBzY2FuIGhhcyBlbmRlZAotCQkgKiAodGhhdCB3b3VsZCBi ZSB3cm9uZykuCi0JCSAqCi0JCSAqIFdlIGNvdWxkIGhhbmRsZSB0aGlzIGNhc2UgYnkgdHJlYXRp bmcgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyBhcwotCQkgKiBtYXJrUG9zIHN0YXRlLiAgQnV0IGRl cGVuZGluZyBvbiB0aGUgY3VycmVudCBhcnJheSBzdGF0ZSBsaWtlIHRoaXMKLQkJICogd291bGQg YWRkIGNvbXBsZXhpdHkuICBJbnN0ZWFkLCB3ZSBqdXN0IHVuc2V0IG1hcmtQb3MncyBjb3B5IG9m Ci0JCSAqIG1vcmVSaWdodCBvciBtb3JlTGVmdCAod2hpY2hldmVyIG1pZ2h0IGJlIGFmZmVjdGVk KSwgd2hpbGUgbWFraW5nCi0JCSAqIGJ0cmVzdHJwb3MgcmVzZXQgdGhlIHNjYW4ncyBhcnJheXMg dG8gdGhlaXIgaW5pdGlhbCBzY2FuIHBvc2l0aW9ucy4KLQkJICogSW4gZWZmZWN0LCBidHJlc3Ry cG9zIGxlYXZlcyBhZHZhbmNpbmcgdGhlIGFycmF5cyB1cCB0byB0aGUgZmlyc3QKLQkJICogX2J0 X3JlYWRwYWdlIGNhbGwgKHRoYXQgdGFrZXMgcGxhY2UgYWZ0ZXIgaXQgaGFzIHJlc3RvcmVkIG1h cmtQb3MpLgotCQkgKi8KLQkJaWYgKHNvLT5uZWVkUHJpbVNjYW4pCi0JCXsKLQkJCWlmIChTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKHNvLT5jdXJyUG9zLmRpcikpCi0JCQkJc28tPm1hcmtQb3MubW9y ZVJpZ2h0ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCQlzby0+bWFya1Bvcy5tb3JlTGVmdCA9IHRydWU7 Ci0JCX0KLQotCQkvKiBtYXJrL3Jlc3RvcmUgbm90IHN1cHBvcnRlZCBieSBwYXJhbGxlbCBzY2Fu cyAqLwotCQlBc3NlcnQoIXNjYW4tPnBhcmFsbGVsX3NjYW4pOwotCX0KLQotCUJUU2NhblBvc1Vu cGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCUFzc2VydChCbG9ja051bWJlcklzVmFsaWQocHJp b3JiYXRjaC0+Y3VyclBhZ2UpKTsKIAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRh dGEgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtubyA9IHNvLT5j dXJyUG9zLm5leHRQYWdlOworCQlibGtubyA9IHByaW9yYmF0Y2gtPm5leHRQYWdlOwogCWVsc2UK LQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsKLQlsYXN0Y3VycmJsa25vID0gc28tPmN1 cnJQb3MuY3VyclBhZ2U7CisJCWJsa25vID0gcHJpb3JiYXRjaC0+cHJldlBhZ2U7CisJbGFzdGN1 cnJibGtubyA9IHByaW9yYmF0Y2gtPmN1cnJQYWdlOwogCiAJLyoKLQkgKiBDYW5jZWwgcHJpbWl0 aXZlIGluZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hlZHVsZWQgd2hlbiB0aGUgY2FsbCB0bwotCSAq IF9idF9yZWFkcGFnZSBmb3IgY3VyclBvcyBoYXBwZW5lZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRp cmVjdGlvbiB0byB0aGUKLQkgKiBvbmUgdGhhdCB3ZSdyZSBzdGVwcGluZyBpbiBub3cuICAoSXQn cyBva2F5IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJyYXkKLQkgKiBrZXlzIGFzLWlzLCBzaW5jZSB0 aGUgbmV4dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZhbmNlIHRoZW0uKQorCSAqIENhbmNlbCBwcmlt aXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHByaW9yYmF0Y2gncyBj YWxsCisJICogdG8gX2J0X3JlYWRwYWdlIGhhcHBlbmVkIHRvIHVzZSB0aGUgb3Bwb3NpdGUgZGly ZWN0aW9uIHRvIHRoZSBvbmUgdGhhdAorCSAqIHdlJ3JlIHN0ZXBwaW5nIGluIG5vdy4gIChJdCdz IG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheSBrZXlzCisJICogYXMtaXMsIHNpbmNlIHRo ZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2UgdGhlbS4pCiAJICovCi0JaWYgKHNvLT5j dXJyUG9zLmRpciAhPSBkaXIpCisJaWYgKHByaW9yYmF0Y2gtPmRpciAhPSBkaXIpCiAJCXNvLT5u ZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAorCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJKFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCSAhcHJpb3JiYXRjaC0+bW9yZVJpZ2h0IDogIXBy aW9yYmF0Y2gtPm1vcmVMZWZ0KSkKKwl7CisJCS8qCisJCSAqIHByaW9yYmF0Y2ggX2J0X3JlYWRw YWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCisJCSAqIGlmIHNv LT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJz dCkKKwkJICovCisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxr bm8gKi8KKwlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxs ZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4g TlVMTDsJCQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKwogCXJl dHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZh bHNlKTsKIH0KIAorCiAvKgogICoJX2J0X3JlYWRmaXJzdHBhZ2UoKSAtLSBSZWFkIGZpcnN0IHBh Z2UgY29udGFpbmluZyB2YWxpZCBkYXRhIGZvciBfYnRfZmlyc3QKICAqCkBAIC0xNzMyLDczICsx NjAyLDkwIEBAIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogICogdG8gc3RvcCB0aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hl Y2trZXlzIGFnYWluc3QgdGhlIGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1 bGwgZGV0YWlscy4KICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQg YW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJh dGNoIG11c3QgYmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAg KiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUg Y2FsbGluZyBoZXJlLgogICoKLSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3Vy clBvcyBhbmQgcmV0YWluZWQgbG9ja3MgYW5kIHBpbnMKKyAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUg dXBkYXRlZCBmaXJzdGJhdGNoIGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucwogICogYWNjb3Jk aW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIHRob3NlIGxhaWQgb3V0IGZvciBfYnRfcmVhZG5leHRw YWdlIGV4aXQuCi0gKiBMaWtlIF9idF9yZWFkbmV4dHBhZ2UsIG91ciByZXR1cm4gdmFsdWUgaW5k aWNhdGVzIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hpbmcKLSAqIHJlY29yZHMgaW4gdGhlIGdpdmVu IGRpcmVjdGlvbi4KICAqCiAgKiBXZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJh bGxlbCBzY2FuIGNhbGxlciwgcmVnYXJkbGVzcyBvZgogICogc3VjY2VzcyBvciBmYWlsdXJlOyB3 ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCiAgKi8K LXN0YXRpYyBib29sCi1fYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNl dE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNo CitfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZp cnN0YmF0Y2gsCisJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikK IHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQmxv Y2tOdW1iZXIgYmxrbm8sCisJCQkJbGFzdGN1cnJibGtubzsKIAotCXNvLT5udW1LaWxsZWQgPSAw OwkJCS8qIGp1c3QgcGFyYW5vaWEgKi8KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwkJLyogZGl0 dG8gKi8KLQotCS8qIEluaXRpYWxpemUgc28tPmN1cnJQb3MgZm9yIHRoZSBmaXJzdCBwYWdlIChw YWdlIGluIHNvLT5jdXJyUG9zLmJ1ZikgKi8KKwkvKiBJbml0aWFsaXplIGZpcnN0YmF0Y2gncyBw b3NpdGlvbiBmb3IgdGhlIGZpcnN0IHBhZ2UgKi8KIAlpZiAoc28tPm5lZWRQcmltU2NhbikKIAl7 CiAJCUFzc2VydChzby0+bnVtQXJyYXlLZXlzKTsKIAotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9 IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1v cmVMZWZ0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAkJc28tPm5l ZWRQcmltU2NhbiA9IGZhbHNlOwogCX0KIAllbHNlIGlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikpCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOwotCQlzby0+Y3VyclBv cy5tb3JlUmlnaHQgPSB0cnVlOworCQlmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOworCQlm aXJzdGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBv cy5tb3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlm aXJzdGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IGZh bHNlOwogCX0KIAogCS8qCiAJICogQXR0ZW1wdCB0byBsb2FkIG1hdGNoaW5nIHR1cGxlcyBmcm9t IHRoZSBmaXJzdCBwYWdlLgogCSAqCi0JICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZp bmlzaCBpbml0aWFsaXppbmcgdGhlIHNvLT5jdXJyUG9zIGZpZWxkcy4KKwkgKiBOb3RlIHRoYXQg X2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0aGUgZmlyc3RiYXRjaCBmaWVs ZHMuCiAJICogX2J0X3JlYWRwYWdlIGFsc28gcmVsZWFzZXMgcGFyYWxsZWwgc2NhbiAoZXZlbiB3 aGVuIGl0IHJldHVybnMgZmFsc2UpLgogCSAqLwotCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGly LCBvZmZudW0sIHRydWUpKQorCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgZGly LCBvZmZudW0sIHRydWUpKQogCXsKLQkJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlv bjsKLQotCQkvKgotCQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAo YW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlv biBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2Nh blBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3Bp bihyZWwsIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUg b3IgbW9yZSBtYXRjaGVzIGluIGZpcnN0YmF0Y2guaXRlbXNbXSAqLworCQlpbmRleGFtX3V0aWxf YmF0Y2hfdW5sb2NrKHNjYW4sIGZpcnN0YmF0Y2gpOworCQlyZXR1cm4gZmlyc3RiYXRjaDsKIAl9 CiAKLQkvKiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4g c28tPmN1cnJQb3MuYnVmICovCi0JX2J0X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBz by0+Y3VyclBvcy5idWYpOworCS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBv biB0aGUgcGFnZSAqLworCV9idF9yZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgZmlyc3RiYXRj aC0+YnVmKTsKKwlmaXJzdGJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogQ2FsbCBf YnRfcmVhZG5leHRwYWdlIHVzaW5nIGl0cyBfYnRfc3RlcHBhZ2Ugd3JhcHBlciBmdW5jdGlvbiAq LwotCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBX YWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyKSkKKwkJYmxrbm8gPSBmaXJzdGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJs a25vID0gZmlyc3RiYXRjaC0+cHJldlBhZ2U7CisJbGFzdGN1cnJibGtubyA9IGZpcnN0YmF0Y2gt PmN1cnJQYWdlOwogCi0JLyogX2J0X3JlYWRwYWdlIGZvciBhIGxhdGVyIHBhZ2UgKG5vdyBpbiBz by0+Y3VyclBvcykgc3VjY2VlZGVkICovCi0JcmV0dXJuIHRydWU7CisJQXNzZXJ0KGZpcnN0YmF0 Y2gtPmRpciA9PSBkaXIpOworCisJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpID8KKwkJICFmaXJzdGJhdGNoLT5tb3JlUmlnaHQgOiAhZmlyc3Ri YXRjaC0+bW9yZUxlZnQpKQorCXsKKwkJLyoKKwkJICogZmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2Ug Y2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5l ZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQor CQkgKi8KKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJ CV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleGFt X3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKworCS8qIHBhcmFsbGVsIHNj YW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5w YXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxr bm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZm IHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBh Z2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgpAQCAt MTgwOCwxMDIgKzE2OTUsNjUgQEAgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2Fu LCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKICAqIHByZXZpb3VzbHkt c2F2ZWQgcmlnaHQgbGluayBvciBsZWZ0IGxpbmsuICBsYXN0Y3VycmJsa25vIGlzIHRoZSBwYWdl IHRoYXQKICAqIHdhcyBjdXJyZW50IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgYmxrbm8gbGluayB3 YXMgc2F2ZWQsIHdoaWNoIHdlIHVzZSB0bwogICogcmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFn ZSBzcGxpdHMvcGFnZSBkZWxldGlvbnMgZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KLSAqIEluIHRo ZSBjb21tb24gY2FzZSB3aGVyZSBzZWl6ZWQ9ZmFsc2UsIGJsa25vIGlzIGVpdGhlciBzby0+Y3Vy clBvcy5uZXh0UGFnZQotICogb3Igc28tPmN1cnJQb3MucHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJs a25vIGlzIHNvLT5jdXJyUG9zLmN1cnJQYWdlLgorICogYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNo J3MgbmV4dFBhZ2Ugb3IgcHJldlBhZ2UgKGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAorICogc2Nh biBkaXJlY3Rpb24pLCBhbmQgbGFzdGN1cnJibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBjdXJy UGFnZS4KICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBi eSBjYWxsZXIuICBzby0+Y3VyclBvcy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBp bm5lZCBhcyBuZWVkZWQgYnkgY2FsbGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29u J3QgbmVlZCB0byBiZSByZWFkIGFnYWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwg c2NhbiBjYWxsZXJzCi0gKiB0aGF0IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJl IHNob3VsZCBwYXNzIHNlaXplZD10cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBs YXN0Y3VycmJsa25vIGFyZ3VtZW50cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2Vp emVkPWZhbHNlIGNhbGxlcnMganVzdCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRh a2VuIGZyb20gdGhlaXIKLSAqIHNvLT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3Vy clBvcyBpdHNlbGYpIGNhbiBiZSB1c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1m YWxzZSBjYWxsZXIncyBibGtubyBjYW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQot ICogdGhhdCBtdXN0IGJlIHJlYWQgbmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2gu ICBXZSBtdXN0IGZpZ3VyZSB0aGF0Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXpp bmcgdGhlIHNjYW4gKHRoZSBjb3JyZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBi ZSBiZXlvbmQgdGhlIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxl bCBzY2FuLAotICogdW5sZXNzIGJsa25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9z LnByZXZQYWdlIGlzIGFscmVhZHkgUF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1v cmVSaWdodC9zby0+Y3VyclBvcy5tb3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVu dHJ5LCBubyBwYWdlIHNob3VsZCBiZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nl c3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUg bmV4dAotICogaW50ZXJlc3RpbmcgcGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBh IHBpbiBvbiB0aGUgYnVmZmVyIG9uCi0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28t PmRyb3BQaW4gaW5kZXggc2NhbnMsIHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRv IGF2b2lkIGJsb2NraW5nIFZBQ1VVTSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgYmF0 Y2ggY29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQgcGFnZSB0aGF0IGhhcworICogYXQgbGVh c3Qgb25lIG1hdGNoaW5nIGl0ZW0uICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVt cyBpbiB0aGUKKyAqIGdpdmVuIHNjYW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLgog ICoKLSAqIElmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIHJlY29yZHMgaW4gdGhlIGdpdmVu IGRpcmVjdGlvbiwgd2UgaW52YWxpZGF0ZQotICogc28tPmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5n IGl0IHJldGFpbnMgbm8gbG9ja3Mgb3IgcGlucyksIGFuZCByZXR1cm4gZmFsc2UuCi0gKgotICog V2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJl Z2FyZGxlc3Mgb2YKLSAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxs ZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICogUGFyYWxsZWwgc2NhbiBjYWxsZXJz IG11c3Qgc2VpemUgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIGJsa25vIGFuZAorICog bGFzdGN1cnJibGtubyBzaG91bGQgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJl bGVhc2UgdGhlIHNjYW4gYXMKKyAqIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29s CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywg U2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgc2VpemVkKQorCQkJCSBCbG9ja051bWJlciBsYXN0Y3Vy cmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24J cmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7CisJSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2g7CiAKLQlBc3NlcnQo c28tPmN1cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwotCUFzc2Vy dCghKGJsa25vID09IFBfTk9ORSAmJiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBvc0lzUGlu bmVkKHNvLT5jdXJyUG9zKSk7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8K KwluZXdiYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKIAogCS8qCi0JICog UmVtZW1iZXIgdGhhdCB0aGUgc2NhbiBhbHJlYWR5IHJlYWQgbGFzdGN1cnJibGtubywgYSBwYWdl IHRvIHRoZSBsZWZ0Ci0JICogb2YgYmxrbm8gKG9yIHJlbWVtYmVyIHJlYWRpbmcgYSBwYWdlIHRv IHRoZSByaWdodCwgZm9yIGJhY2t3YXJkcyBzY2FucykKKwkgKiBuZXdiYXRjaCB3aWxsIGJlIHRo ZSBiYXRjaCBmb3IgbGFzdGN1cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0IG9mCisJICogYmxr bm8gKG9yIHRvIHRoZSByaWdodCwgd2hlbiB0aGUgc2NhbiBpcyBtb3ZpbmcgYmFja3dhcmRzKQog CSAqLwotCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCXNvLT5jdXJyUG9zLm1v cmVMZWZ0ID0gdHJ1ZTsKLQllbHNlCi0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJ bmV3YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwluZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsK IAogCWZvciAoOzspCiAJewogCQlQYWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwog Ci0JCWlmIChibGtubyA9PSBQX05PTkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRp cikgPwotCQkJICFzby0+Y3VyclBvcy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQp KQotCQl7Ci0JCQkvKiBtb3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJy Ymxrbm8pIGVuZGVkIHNjYW4gKi8KLQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBs YXN0Y3VycmJsa25vICYmICFzZWl6ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3Vy clBvcyk7Ci0JCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1T Y2FuICovCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNj YW4pOwotCi0JCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+ Y3VyclBvcyBibGtubyAqLwotCQlpZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9 IE5VTEwgJiYKLQkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJi bGtubywgZmFsc2UpKQotCQl7Ci0JCQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90 aGVyIHByaW1pdGl2ZSBzY2FuIHJlcXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShz by0+Y3VyclBvcyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBf Tk9ORSAmJiBsYXN0Y3VycmJsa25vICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyKSkKIAkJewogCQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRl cnJ1cHRzIGZpcnN0ICovCiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQ b3MuYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCW5ld2JhdGNoLT5i dWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewog CQkJLyogcmVhZCBibGtubywgYXZvaWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVw dHMpICovCi0JCQlzby0+Y3VyclBvcy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChy ZWwsICZibGtubywKLQkJCQkJCQkJCQkJCQkJIGxhc3RjdXJyYmxrbm8pOwotCQkJaWYgKHNvLT5j dXJyUG9zLmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQorCQkJbmV3YmF0Y2gtPmJ1ZiA9IF9idF9sb2Nr X2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAorCQkJCQkJCQkJCQkJCSAgIGxhc3RjdXJy Ymxrbm8pOworCQkJaWYgKG5ld2JhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJ CQkvKiBtdXN0IGhhdmUgYmVlbiBhIGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFn ZSAqLwotCQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9idF9wYXJh bGxlbF9kb25lKHNjYW4pOwotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlpbmRleGFtX3V0aWxfYmF0 Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0K IAotCQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdlID0gQnVm ZmVyR2V0UGFnZShuZXdiYXRjaC0+YnVmKTsKIAkJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBh Z2UpOwogCQlsYXN0Y3VycmJsa25vID0gYmxrbm87CiAJCWlmIChsaWtlbHkoIVBfSUdOT1JFKG9w YXF1ZSkpKQpAQCAtMTkxMSwxNyArMTc2MSwxNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkvKiBzZWUgaWYgdGhlcmUgYXJlIGFu eSBtYXRjaGVzIG9uIHRoaXMgcGFnZSAqLwogCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVSaWdodCBp ZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQX0ZJUlNU REFUQUtFWShvcGFxdWUpLCBzZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3 YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIGZpcnN0cGFnZSkp CiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCQkJYmxr bm8gPSBuZXdiYXRjaC0+bmV4dFBhZ2U7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogbm90 ZSB0aGF0IHRoaXMgd2lsbCBjbGVhciBtb3JlTGVmdCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlm IChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBz ZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJ CQkJIFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFr OwotCQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7CisJCQkJYmxrbm8gPSBuZXdiYXRj aC0+cHJldlBhZ2U7CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtMTkzNiwxOSArMTc4NiwzOSBAQCBf YnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJ CX0KIAogCQkvKiBubyBtYXRjaGluZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9idF9yZWxi dWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiByZWxlYXNl ZCBieSBfYnRfcmVhZHBhZ2UgKG9yIGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwgbmV3YmF0 Y2gtPmJ1Zik7CisJCW5ld2JhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCisJCS8qIENvbnRp bnVlIHRoZSBzY2FuIGluIHRoaXMgZGlyZWN0aW9uPyAqLworCQlpZiAoYmxrbm8gPT0gUF9OT05F IHx8CisJCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJCSAhbmV3YmF0Y2gtPm1v cmVSaWdodCA6ICFuZXdiYXRjaC0+bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8g X2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlm CisJCQkgKiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBp biBfYnRfZmlyc3QpCisJCQkgKi8KKwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7 CisJCX0KKworCQkvKiBwYXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5l eHQgYmxrbm8gKi8KKwkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9i dF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJ CXsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJl dHVybiBOVUxMOwkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJ CX0KKworCQlmaXJzdHBhZ2UgPSBmYWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3Qg Ki8KIAl9CiAKLQkvKgotCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2Nr IChhbmQgbWF5YmUgdGhlIHBpbikgb24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRp b24gZm9yIGJ0Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1 cnJQb3MuY3VyclBhZ2UgPT0gYmxrbm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+ Y3VyclBvcykpOwotCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBf YnRfcmVhZHBhZ2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1td ICovCisJQXNzZXJ0KG5ld2JhdGNoLT5jdXJyUGFnZSA9PSBibGtubyk7CisJaW5kZXhhbV91dGls X2JhdGNoX3VubG9jayhzY2FuLCBuZXdiYXRjaCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4g bmV3YmF0Y2g7CiB9CiAKIC8qCkBAIC0yMTc0LDI1ICsyMDQ0LDIzIEBAIF9idF9nZXRfZW5kcG9p bnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxs ZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcg aGVyZS4KICAqIEV4aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgp LgogICovCi1zdGF0aWMgYm9vbAotX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9lbmRwb2ludChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJh dGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVBhZ2UJCXBhZ2U7CiAJQlRQ YWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwor CUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CiAK IAkvKgogCSAqIFNjYW4gZG93biB0byB0aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFn ZS4gIFRoaXMgaXMgYSBzaW1wbGlmaWVkCiAJICogdmVyc2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJ ICovCi0Jc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJl Y3Rpb25Jc0JhY2t3YXJkKGRpcikpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRfZW5kcG9p bnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICghQnVmZmVy SXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNo LT5idWYpKQogCXsKIAkJLyoKIAkJICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xlIHJlbGF0 aW9uLCBhcyBub3RoaW5nIGZpbmVyIHRvIGxvY2sKQEAgLTIyMDMsNyArMjA3MSw3IEBAIF9idF9l bmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlyZXR1cm4g ZmFsc2U7CiAJfQogCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdl dE9wYXF1ZShwYWdlKTsKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTIyMjksOSAr MjA5Nyw1IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCS8qCiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBz Y2FuLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0J CXJldHVybiBmYWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1 ZTsKKwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQsIGRp cik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggNWM1MGYwZGQxLi45 YWVlNjZjZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTIxLDE1ICsy MSwxMiBAQAogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3JlbHNjYW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgotI2luY2x1ZGUgImNv bW1vbi9pbnQuaCIKLSNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3RhdGljIGludAlfYnRfY29tcGFyZV9p bnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKTsKIHN0YXRpYyBpbnQJX2J0X2tlZXBf bmF0dHMoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LAogCQkJCQkJICAgSW5kZXhU dXBsZSBmaXJzdHJpZ2h0LCBCVFNjYW5JbnNlcnQgaXR1cF9rZXkpOwogCkBAIC0xNjAsMTExICsx NTcsNDcgQEAgX2J0X2ZyZWVzdGFjayhCVFN0YWNrIHN0YWNrKQogCX0KIH0KIAotLyoKLSAqIHFz b3J0IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGludCBhcnJheXMKLSAqLwotc3RhdGljIGludAot X2J0X2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKLXsKLQlpbnQJ CQlhID0gKigoY29uc3QgaW50ICopIHZhKTsKLQlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZi KTsKLQotCXJldHVybiBwZ19jbXBfczMyKGEsIGIpOwotfQotCiAvKgogICogX2J0X2tpbGxpdGVt cyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwog ICogdG9sZCB1cyB3ZXJlIGtpbGxlZAogICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBs b2NhbGx5IHRocm91Z2ggc28sIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3Vy cmVudCBwYWdlIGFuZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91 bGQgb25seSBiZQotICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KKyAqIFRoZSBiYXRj aCBwYXJhbWV0ZXIgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBh bmQga2lsbGVkCisgKiB0dXBsZXMgdGhlcmVvbiAodGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg aWYgYmF0Y2gtPm51bUtpbGxlZCA+IDApLgogICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUg YSBsb2NrIG9uIHRoZSBzby0+Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZl ciBwaW4gd2hlbiAhc28tPmRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3Qg YmUgbG9ja2VkLgotICogSXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUg aGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgorICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxv Y2sgb24gdGhlIGJhdGNoIHBvc2l0aW9uJ3MgcGFnZS4gIFdoZW4gd2UKKyAqIHJldHVybiwgaXQg c3RpbGwgd29uJ3QgYmUgbG9ja2VkLiAgSXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBw aW5zCisgKiB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCiAgKiBXZSBtYXRjaCBp dGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMg dG8gc2V0Ci0gKiBMUF9ERUFELiAgSWYgdGhlIHNjYW4gaXMgb25lIHRoYXQgaG9sZHMgYSBidWZm ZXIgcGluIG9uIHRoZSB0YXJnZXQgcGFnZQotICogY29udGludW91c2x5IGZyb20gaW5pdGlhbGx5 IHJlYWRpbmcgdGhlIGl0ZW1zIHVudGlsIGFwcGx5aW5nIHRoaXMgZnVuY3Rpb24KLSAqIChpZiBp dCBpcyBhICFzby0+ZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55 IGl0ZW1zIG9uIHRoZQotICogcGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUgYmVl biByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKLSAqIHRoYXQgd2UnbGwgY29uZnVz ZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElECi0g KiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNlZCB0 byBiZSBvbiB0aGlzIHNhbWUKLSAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1cmlu ZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQotICogKHNvLT5kcm9wUGluIHNj YW5zKSwgdGhvdWdoLCBzbyB3ZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0cyBv bgotICogdGhlIHBhZ2UgTFNOIGhhdmluZyBub3QgY2hhbmdlZCBzaW5jZSBiYWNrIHdoZW4gX2J0 X3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4KLSAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBzZXR0aW5n IExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFuZ2VkLgotICoKLSAqIFdlIGdpdmUg dXAgbXVjaCBsZXNzIG9mdGVuIGR1cmluZyAhc28tPmRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBzdGls bCBoYXBwZW5zLgotICogV2UgY29wZSB3aXRoIGNhc2VzIHdoZXJlIGl0ZW1zIGhhdmUgbW92ZWQg cmlnaHQgZHVlIHRvIGluc2VydGlvbnMuICBJZiBhbgotICogaXRlbSBoYXMgbW92ZWQgb2ZmIHRo ZSBjdXJyZW50IHBhZ2UgZHVlIHRvIGEgc3BsaXQsIHdlJ2xsIGZhaWwgdG8gZmluZCBpdAotICog YW5kIGp1c3QgZ2l2ZSB1cCBvbiBpdC4KKyAqIExQX0RFQUQuICBXZSBtdXN0IGNvbmRpdGlvbiBz ZXR0aW5nIExQX0RFQUQgYml0cyBvbiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdAorICogY2hhbmdl ZCBzaW5jZSBiYWNrIHdoZW4gX2J0X3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4gIFdlIHRvdGFsbHkg Z2l2ZSB1cCBvbgorICogc2V0dGluZyBMUF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04gY2hh bmdlZC4KICAqLwogdm9pZAotX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCitfYnRf a2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUg b3BhcXVlOwogCU9mZnNldE51bWJlciBtaW5vZmY7CiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsKLQlp bnQJCQludW1LaWxsZWQgPSBzby0+bnVtS2lsbGVkOwogCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9 IGZhbHNlOwogCUJ1ZmZlcgkJYnVmOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOwogCi0JQXNzZXJ0 KG51bUtpbGxlZCA+IDApOwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7 CisJQXNzZXJ0KGJhdGNoLT5udW1LaWxsZWQgPiAwKTsKKwlBc3NlcnQoQmxvY2tOdW1iZXJJc1Zh bGlkKGJhdGNoLT5jdXJyUGFnZSkpOwogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVM TCk7IC8qIGNhbid0IGJlIGEgYml0bWFwIGluZGV4IHNjYW4gKi8KIAotCS8qIEFsd2F5cyBpbnZh bGlkYXRlIHNvLT5raWxsZWRJdGVtc1tdIGJlZm9yZSBsZWF2aW5nIHNvLT5jdXJyUG9zICovCi0J c28tPm51bUtpbGxlZCA9IDA7CisJYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJhdGNoLT5jdXJyUGFn ZSwgQlRfUkVBRCk7CiAKLQkvKgotCSAqIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHNvLT5r aWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlcjsgdGhlCi0JICogbG9vcCBiZWxvdyBleHBl Y3RzIHRoaXMgKHdoZW4gbWFya2luZyBwb3N0aW5nIGxpc3QgdHVwbGVzLCBhdCBsZWFzdCkuCi0J ICogc28tPmtpbGxlZEl0ZW1zW10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJl dHVybmVkIGl0ZW1zIGluLgotCSAqIFNjcm9sbGFibGUgY3Vyc29yIHNjYW5zIG1pZ2h0IGhhdmUg ZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KLQkgKgotCSAqIFNvcnQgYW5kIHVu aXF1ZS1pZnkgc28tPmtpbGxlZEl0ZW1zW10gdG8gZGVhbCB3aXRoIGFsbCB0aGlzLgotCSAqLwot CWlmIChudW1LaWxsZWQgPiAxKQorCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYp OworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0g bGF0ZXN0bHNuKQogCXsKLQkJcXNvcnQoc28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQsIHNpemVv ZihpbnQpLCBfYnRfY29tcGFyZV9pbnQpOwotCQludW1LaWxsZWQgPSBxdW5pcXVlKHNvLT5raWxs ZWRJdGVtcywgbnVtS2lsbGVkLCBzaXplb2YoaW50KSwKLQkJCQkJCQlfYnRfY29tcGFyZV9pbnQp OwotCX0KLQotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKgotCQkgKiBXZSBoYXZlIGhlbGQg dGhlIHBpbiBvbiB0aGlzIHBhZ2Ugc2luY2Ugd2UgcmVhZCB0aGUgaW5kZXggdHVwbGVzLAotCQkg KiBzbyBhbGwgd2UgbmVlZCB0byBkbyBpcyBsb2NrIGl0LiAgVGhlIHBpbiB3aWxsIGhhdmUgcHJl dmVudGVkCi0JCSAqIGNvbmN1cnJlbnQgVkFDVVVNcyBmcm9tIHJlY3ljbGluZyBhbnkgb2YgdGhl IFRJRHMgb24gdGhlIHBhZ2UuCi0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28t PmN1cnJQb3MpKTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOwotCQlfYnRfbG9ja2J1ZihyZWws IGJ1ZiwgQlRfUkVBRCk7Ci0JfQotCWVsc2UKLQl7Ci0JCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOwot Ci0JCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJQXNzZXJ0KFJl bGF0aW9uTmVlZHNXQUwocmVsKSk7Ci0JCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBv cy5jdXJyUGFnZSwgQlRfUkVBRCk7Ci0KLQkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWlj KGJ1Zik7Ci0JCUFzc2VydChzby0+Y3VyclBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNv LT5jdXJyUG9zLmxzbiAhPSBsYXRlc3Rsc24pCi0JCXsKLQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVw IG9uIGhpbnRpbmcgKi8KLQkJCV9idF9yZWxidWYocmVsLCBidWYpOwotCQkJcmV0dXJuOwotCQl9 Ci0KLQkJLyogVW5tb2RpZmllZCwgaGludGluZyBpcyBzYWZlICovCisJCS8qIE1vZGlmaWVkLCBn aXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsK IAl9CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwpAQCAtMjcyLDE3ICsyMDUsMTYgQEAg X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJbWlub2ZmID0gUF9GSVJTVERBVEFL RVkob3BhcXVlKTsKIAltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwogCi0J LyogSXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAq LwotCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCisJLyogSXRlcmF0ZSB0aHJv dWdoIGJhdGNoLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLworCWZvciAoaW50 IGkgPSAwOyBpIDwgYmF0Y2gtPm51bUtpbGxlZDsgaSsrKQogCXsKLQkJaW50CQkJaXRlbUluZGV4 ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlCVFNjYW5Qb3NJdGVtICpraXRlbSA9ICZzby0+Y3Vy clBvcy5pdGVtc1tpdGVtSW5kZXhdOworCQlpbnQJCQlpdGVtSW5kZXggPSBiYXRjaC0+a2lsbGVk SXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRl bUluZGV4XTsKIAkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsKIAot CQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRl bUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBi YXRjaC0+Zmlyc3RJdGVtICYmIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCQlBc3Nl cnQoaSA9PSAwIHx8Ci0JCQkgICBvZmZudW0gPj0gc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxl ZEl0ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOworCQkJICAgb2ZmbnVtID49IGJhdGNoLT5pdGVt c1tiYXRjaC0+a2lsbGVkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7CiAKIAkJaWYgKG9mZm51 bSA8IG1pbm9mZikKIAkJCWNvbnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KQEAgLTI5OCwx MiArMjMwLDYgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJaW50CQkJ bnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKIAkJCQlpbnQJCQlqOwog Ci0JCQkJLyoKLQkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmll ZCBpbiBhbG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRo ZSAhc28tPmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMg cG9zdGluZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAqIHR1cGxlIHdo ZW4gd2UgZmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8KIAkJCQlmb3Ig KGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKIAkJCQl7CiAJCQkJCUl0ZW1Qb2ludGVyIGl0ZW0g PSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKQEAgLTMxMSwxMiArMjM3LDggQEAg X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJCWlmICghSXRlbVBvaW50ZXJF cXVhbHMoaXRlbSwgJmtpdGVtLT5oZWFwVGlkKSkKIAkJCQkJCWJyZWFrOwkvKiBvdXQgb2YgcG9z dGluZyBsaXN0IGxvb3AgKi8KIAotCQkJCQkvKgotCQkJCQkgKiBraXRlbSBtdXN0IGhhdmUgbWF0 Y2hpbmcgb2ZmbnVtIHdoZW4gaGVhcCBUSURzIG1hdGNoLAotCQkJCQkgKiB0aG91Z2ggb25seSBp biB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlIHBhZ2UgY2FuJ3QKLQkJCQkJICogaGF2ZSBiZWVu IGNvbmN1cnJlbnRseSBtb2RpZmllZAotCQkJCQkgKi8KLQkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRl eE9mZnNldCA9PSBvZmZudW0gfHwgIXNvLT5kcm9wUGluKTsKKwkJCQkJQXNzZXJ0KGtpdGVtLT5p bmRleE9mZnNldCA9PSBvZmZudW0pOworCQkJCQlBc3NlcnQoIWtpdGVtLT5hbGxWaXNpYmxlKTsK IAogCQkJCQkvKgogCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgpAQCAt MzMyLDggKzI1NCw4IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJCQkg KiBraXRlbSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxl CiAJCQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4K IAkJCQkJICovCi0JCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5j dXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07CisJCQkJCWlmIChwaSA8IGJhdGNo LT5udW1LaWxsZWQpCisJCQkJCQlraXRlbSA9ICZiYXRjaC0+aXRlbXNbYmF0Y2gtPmtpbGxlZEl0 ZW1zW3BpKytdXTsKIAkJCQl9CiAKIAkJCQkvKgpAQCAtMzgzLDEwICszMDUsNyBAQCBfYnRfa2ls bGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJTWFya0J1ZmZlckRpcnR5SGludChidWYsIHRy dWUpOwogCX0KIAotCWlmICghc28tPmRyb3BQaW4pCi0JCV9idF91bmxvY2tidWYocmVsLCBidWYp OwotCWVsc2UKLQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CisJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7 CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IDlmNTM3OWI4Ny4u YTE4YTJmYTllIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxz LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC04OCwxMCAr ODgsMTEgQEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBz cGdiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IHNwZ3Jlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBz cGdnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBOVUxM LAogCQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBzcGdlbmRz Y2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1w b3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFt aW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYwppbmRleCBiN2JiMTExNjguLmVhMGFkZDFjOSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V4cGxhaW4uYwpAQCAtMTM1LDcgKzEzNSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcmVjdXJzaXZl X3VuaW9uX2luZm8oUmVjdXJzaXZlVW5pb25TdGF0ZSAqcnN0YXRlLAogc3RhdGljIHZvaWQgc2hv d19tZW1vaXplX2luZm8oTWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJ CQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19oYXNoYWdnX2luZm8o QWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKLXN0YXRpYyB2b2lkIHNob3df aW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVz KTsKK3N0YXRpYyB2b2lkIHNob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5mbyhCaXRt YXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMpOwog c3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hhciAqcWxhYmVs LCBpbnQgd2hpY2gsCkBAIC0xOTcyLDcgKzE5NzIsNyBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJc2hv d19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAogCQkJ CQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxh bnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJ YnJlYWs7CiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChJbmRl eE9ubHlTY2FuICopIHBsYW4pLT5pbmRleHF1YWwsCkBAIC0xOTg2LDE1ICsxOTg2LDEyIEBAIEV4 cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAo cGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVk IGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlpZiAoZXMt PmFuYWx5emUpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkhlYXAgRmV0Y2hlcyIsIE5VTEws Ci0JCQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzMiwgMCwgZXMpOwotCQkJ c2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nh bl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRleFNj YW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhx dWFsb3JpZywKIAkJCQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMsIGVz KTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hvd19p bmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfQml0bWFw SGVhcFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEhlYXBTY2FuICopIHBsYW4pLT5i aXRtYXBxdWFsb3JpZywKQEAgLTM4NTgsMTUgKzM4NTUsMTYgQEAgc2hvd19oYXNoYWdnX2luZm8o QWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogfQogCiAvKgotICogU2hvdyB0 aGUgdG90YWwgbnVtYmVyIG9mIGluZGV4IHNlYXJjaGVzIGZvciBhCisgKiBTaG93IGluZGV4IHNj YW4gcmVsYXRlZCBleGVjdXRvciBpbnN0cnVtZW50YXRpb24gZm9yIGEKICAqIEluZGV4U2Nhbi9J bmRleE9ubHlTY2FuL0JpdG1hcEluZGV4U2NhbiBub2RlCiAgKi8KIHN0YXRpYyB2b2lkCi1zaG93 X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICpl cykKK3Nob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0 ZSAqZXMpCiB7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsKIAlTaGFyZWRJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKlNoYXJlZEluZm8gPSBOVUxMOwotCXVpbnQ2NAkJbnNlYXJj aGVzID0gMDsKKwl1aW50NjQJCW5zZWFyY2hlcyA9IDAsCisJCQkJbmhlYXBmZXRjaGVzID0gMDsK IAogCWlmICghZXMtPmFuYWx5emUpCiAJCXJldHVybjsKQEAgLTM4ODcsNiArMzg4NSw3IEBAIHNo b3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUg KmVzKQogCQkJCUluZGV4T25seVNjYW5TdGF0ZSAqaW5kZXhzdGF0ZSA9ICgoSW5kZXhPbmx5U2Nh blN0YXRlICopIHBsYW5zdGF0ZSk7CiAKIAkJCQluc2VhcmNoZXMgPSBpbmRleHN0YXRlLT5pb3Nz X0luc3RydW1lbnQubnNlYXJjaGVzOworCQkJCW5oZWFwZmV0Y2hlcyA9IGluZGV4c3RhdGUtPmlv c3NfSW5zdHJ1bWVudC5uaGVhcGZldGNoZXM7CiAJCQkJU2hhcmVkSW5mbyA9IGluZGV4c3RhdGUt Pmlvc3NfU2hhcmVkSW5mbzsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTM5MTAsOSArMzkwOSwxMyBA QCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0 YXRlICplcykKIAkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqd2luc3RydW1lbnQgPSAmU2hh cmVkSW5mby0+d2luc3RydW1lbnRbaV07CiAKIAkJCW5zZWFyY2hlcyArPSB3aW5zdHJ1bWVudC0+ bnNlYXJjaGVzOworCQkJbmhlYXBmZXRjaGVzICs9IHdpbnN0cnVtZW50LT5uaGVhcGZldGNoZXM7 CiAJCX0KIAl9CiAKKwlpZiAobm9kZVRhZyhwbGFuKSA9PSBUX0luZGV4T25seVNjYW4pCisJCUV4 cGxhaW5Qcm9wZXJ0eVVJbnRlZ2VyKCJIZWFwIEZldGNoZXMiLCBOVUxMLCBuaGVhcGZldGNoZXMs IGVzKTsKKwogCUV4cGxhaW5Qcm9wZXJ0eVVJbnRlZ2VyKCJJbmRleCBTZWFyY2hlcyIsIE5VTEws IG5zZWFyY2hlcywgZXMpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9p bmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDYzNTY3 OWNjMS4uNTRjMjQwM2RhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtODg0LDcgKzg4 NCw3IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBc IiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aWNvbHVtbiBpbmRleGVzIiwKIAkJCQkJCWFjY2Vz c01ldGhvZE5hbWUpKSk7Ci0JaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUg PT0gTlVMTCkKKwlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxM ICYmIGFtUm91dGluZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJ CShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJh Y2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50 cyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjQW1pLmMKaW5kZXggOTBhNjhjMGQxLi4wZGZiMDEzMzcgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjQW1pLmMKQEAgLTQyOCw3ICs0MjgsNyBAQCBFeGVjU3VwcG9ydHNNYXJrUmVz dG9yZShQYXRoICpwYXRobm9kZSkKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAKIAkJCS8qCi0J CQkgKiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgbWFyay9yZXN0b3JlLgorCQkJICogTm90 IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IHJlc3RvcmluZyBhIG1hcmsKIAkJCSAqLwogCQkJcmV0 dXJuIGNhc3ROb2RlKEluZGV4UGF0aCwgcGF0aG5vZGUpLT5pbmRleGluZm8tPmFtY2FubWFya3Bv czsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCA2YWUwZjk1OTUuLjMwNDFk NWM3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTgxNiwxMCArODE2LDEy IEBAIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFwLCBS ZWxhdGlvbiBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0gZmFsc2U7CiAJZm91bmRfc2VsZiA9 IGZhbHNlOwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsICZEaXJ0 eVNuYXBzaG90LCBOVUxMLCBpbmRua2V5YXR0cywgMCk7CisJaW5kZXhfc2NhbiA9IGluZGV4X2Jl Z2luc2NhbihoZWFwLCBpbmRleCwgZmFsc2UsICZEaXJ0eVNuYXBzaG90LCBOVUxMLAorCQkJCQkJ CQkgaW5kbmtleWF0dHMsIDApOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywg aW5kbmtleWF0dHMsIE5VTEwsIDApOwogCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRl eF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCisJd2hpbGUgKHRh YmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwK KwkJCQkJCQkJCWV4aXN0aW5nX3Nsb3QpKQogCXsKIAkJVHJhbnNhY3Rpb25JZCB4d2FpdDsKIAkJ WExUV19PcGVyCXJlYXNvbl93YWl0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24u YwppbmRleCA3MmYyYmZmNzcuLmFiNDg3YjllNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Jl cGxpY2F0aW9uLmMKQEAgLTIwNSw3ICsyMDUsNyBAQCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVCeUlu ZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAlza2V5X2F0dG9mZiA9IGJ1aWxkX3JlcGxp bmRleF9zY2FuX2tleShza2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAKIAkvKiBTdGFy dCBhbiBpbmRleCBzY2FuLiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWws ICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2Nhbihy ZWwsIGlkeHJlbCwgZmFsc2UsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIHJldHJ5 OgogCWZvdW5kID0gZmFsc2U7CkBAIC0yMTMsNyArMjEzLDcgQEAgcmV0cnk6CiAJaW5kZXhfcmVz Y2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5k IHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIG91dHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQogCXsKIAkJLyoKIAkJICogQXZv aWQgZXhwZW5zaXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtleSBv cgpAQCAtNjY2LDEyICs2NjYsMTIgQEAgUmVsYXRpb25GaW5kRGVsZXRlZFR1cGxlSW5mb0J5SW5k ZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCSAqIG5vdCB5ZXQgY29tbWl0dGVkIG9yIHRo b3NlIGp1c3QgY29tbWl0dGVkIHByaW9yIHRvIHRoZSBzY2FuIGFyZQogCSAqIGV4Y2x1ZGVkIGlu IHVwZGF0ZV9tb3N0X3JlY2VudF9kZWxldGlvbl9pbmZvKCkuCiAJICovCi0Jc2NhbiA9IGluZGV4 X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgU25hcHNob3RBbnksIE5VTEwsIHNrZXlfYXR0b2ZmLCAw KTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBmYWxzZSwgU25hcHNob3RB bnksIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBz a2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3 aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzY2Fu c2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbiwgc2NhbnNsb3QpKQogCXsKIAkJLyoKIAkJICogQXZvaWQgZXhwZW5zaXZlIGVx dWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtleSBvcgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCmluZGV4IDA1OGE1OWVmNS4uMjU4MGEwMTM5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCkBAIC0yMDIs NiArMjAyLDcgQEAgRXhlY0VuZEJpdG1hcEluZGV4U2NhbihCaXRtYXBJbmRleFNjYW5TdGF0ZSAq bm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEJpdG1hcEluZGV4U2NhblN0YXRlIGFu ZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUt PmJpc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5iaXNzX0luc3RydW1l bnQubmhlYXBmZXRjaGVzID09IDApOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUluZGV4b25seXNjYW4uYwppbmRleCBjMmQwOTM3NDUuLmZmM2U4ZjMwMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC0zNCwxNCArMzQsMTIgQEAKICNpbmNs dWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3R1cGRlc2MuaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1 dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uaCIKICNpbmNsdWRl ICJleGVjdXRvci9ub2RlSW5kZXhzY2FuLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKLSNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgog I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKQEAg LTY1LDcgKzYzLDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJ U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBs ZVRhYmxlU2xvdCAqc2xvdDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAKIAkvKgogCSAqIGV4dHJhY3Qg bmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gaW5kZXggc2NhbiBub2RlCkBAIC05MCwxOCArODcs MTQgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHBhcmFs bGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3Vy cmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJ CQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgICZub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJ CSAgIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3Jk ZXJCeUtleXMpOwogCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKLQotCi0JCS8q IFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JCW5vZGUtPmlvc3NfU2NhbkRlc2Mt PnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVm ZmVyOworCQlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCQkv KgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFk eSwgZ28gYWhlYWQgYW5kCkBAIC0xMTgsNzggKzExMSwxMCBAQCBJbmRleE9ubHlOZXh0KEluZGV4 T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQg d2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRl eF9nZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAodGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIG5vZGUtPmlvc3NfVGFi bGVTbG90KSkKIAl7Ci0JCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwotCiAJCUNIRUNL X0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJLyoKLQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0 Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCi0JCSAqIHdoaWNoIGFsbCB0 dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0JCSAq IHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRh IHNvdXJjZS4KLQkJICoKLQkJICogTm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czogdmlz aWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90Ci0JCSAqIGxvY2sgdGhlIHZpc2liaWxpdHkg bWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQKLQkJICogaGVyZSBj b3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlIGVub3Vn aCB0bwotCQkgKiBtYXR0ZXIuCi0JCSAqCi0JCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5n IGEgVk0gYml0IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwKLQkJICogYmVjYXVzZSB0aGUg dHVwbGUgaXMgcHJlc2VudCBpbiB0aGUgaW5kZXggcGFnZSBidXQgbm90IHZpc2libGUuIFRoZQot CQkgKiByZWFkaW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2Nr IG9uIHRoZSBpbmRleAotCQkgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0 IG9mIHRoZSBUSUQgaW50byB0aGUgaW5kZXgKLQkJICogKHVzaW5nIGFuIGV4Y2x1c2l2ZSBsb2Nr IG9uIHRoZSBpbmRleCBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQKLQkJICogaXMgY2xlYXJl ZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhl Ci0JCSAqIGluZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBz dXJlIHRvIHNlZSB0aGUKLQkJICogY2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHktaW5z ZXJ0ZWQgVElELgotCQkgKgotCQkgKiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBh Z2UgKG9ubHkgVkFDVVVNIHdpbGwgY2xlYXIgb3V0Ci0JCSAqIHRoZSBUSUQpLCBzbyB0aGUgY2xl YXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKLQkJICogc2VyaWFsaXplZCB3 aXRoIHRoaXMgdGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCi0JCSAq IHNpZ25pZmljYW50bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRl bGV0ZSByaWdodAotCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxl IHVudGlsIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0 ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKLQkJICogdHJhbnNhY3Rpb24pLiBJbiBlaXRoZXIgY2Fz ZSwgdGhlIGxvY2sgb24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUKLQkJICogYmVlbiByZWxlYXNl ZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4KLQkJ ICogQW5kIGZvciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRp bmcKLQkJICogdHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVz dCBoYXZlIGFjcXVpcmVkCi0JCSAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3Rp bmcgYXMgYSByZWFkIGJhcnJpZXIuCi0JCSAqCi0JCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3Vn aCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrCi0JCSAqIHRoZSBWTSBi dWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCi0JCSAqLwot CQlpZiAoIVZNX0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVy KSkKLQkJewotCQkJLyoKLQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8g Y2hlY2sgdmlzaWJpbGl0eS4KLQkJCSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7 Ci0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90 KSkKLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVu dHJ5ICovCi0KLQkJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlvc3NfVGFibGVTbG90KTsKLQotCQkJ LyoKLQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVy ZSBzaG91bGQgYmUgbm8KLQkJCSAqIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFp biBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMKLQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQg d2FudCB0byBhbGxvdyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0 byByZW1lbWJlciBub3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0JCQkg Ki8KLQkJCWlmIChzY2FuZGVzYy0+eHNfaGVhcF9jb250aW51ZSkKLQkJCQllbG9nKEVSUk9SLCAi bm9uLU1WQ0Mgc25hcHNob3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMi KTsKLQotCQkJLyoKLQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBw aW4gb24gdGhlIGhlYXAgcGFnZSwgYXMKLQkJCSAqIHJlY29yZGVkIGluIHNjYW5kZXNjLT54c19j YnVmLiAgV2UgY291bGQgcmVsZWFzZSB0aGF0IHBpbiBub3csCi0JCQkgKiBidXQgaXQncyBub3Qg Y2xlYXIgd2hldGhlciBpdCdzIGEgd2luIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5kZXgKLQkJCSAq IGVudHJ5IG1pZ2h0IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuCi0JCQkg Ki8KLQotCQkJdHVwbGVfZnJvbV9oZWFwID0gdHJ1ZTsKLQkJfQotCiAJCS8qCiAJCSAqIEZpbGwg dGhlIHNjYW4gdHVwbGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0 IGJlCiAJCSAqIHByb3ZpZGVkIGluIGVpdGhlciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBmb3Jt YXQuICBDb25jZWl2YWJseSBhbgpAQCAtMjM4LDE2ICsxNjMsNiBAQCBJbmRleE9ubHlOZXh0KElu ZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVycm1zZygibG9zc3kgZGlz dGFuY2UgZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKSkp OwotCi0JCS8qCi0JCSAqIElmIHdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHRoZW4gd2UnbGwg bmVlZCB0byB0YWtlIGEgcHJlZGljYXRlCi0JCSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2Ug aGFkLiAgRm9yIG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2UgbGV2ZWwuCi0JCSAqLwotCQlpZiAoIXR1 cGxlX2Zyb21faGVhcCkKLQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVsYXRp b24sCi0JCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJICBl c3RhdGUtPmVzX3NuYXBzaG90KTsKLQogCQlyZXR1cm4gc2xvdDsKIAl9CiAKQEAgLTQwNywxMyAr MzIyLDYgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQog CWluZGV4UmVsYXRpb25EZXNjID0gbm9kZS0+aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2Fu RGVzYyA9IG5vZGUtPmlvc3NfU2NhbkRlc2M7CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4s IGlmIGFueS4gKi8KLQlpZiAobm9kZS0+aW9zc19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQot CXsKLQkJUmVsZWFzZUJ1ZmZlcihub2RlLT5pb3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9zc19W TUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JfQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBhIHBh cmFsbGVsIHdvcmtlciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkgKiB3 b3JrZXIgYmFjayBpbnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVw IGJ5IHRoZSBtYWluCkBAIC00MzMsNiArMzQxLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5k ZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhP bmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNl YXJjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdpbnN0cnVtZW50 LT5uaGVhcGZldGNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50Lm5oZWFwZmV0Y2hlczsKIAl9 CiAKIAkvKgpAQCAtNzg0LDEzICs2OTMsMTIgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXpl RFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQog CQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAot CQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pb3NzX1Jl bGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJ CQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRl ckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2Fu dF9pdHVwID0gdHJ1ZTsKLQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwlB c3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYg bm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFk IGFuZCBwYXNzCkBAIC04NTAsMTIgKzc1OCwxMiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxp emVXb3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19TY2FuRGVz YyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRp b24sCi0JCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlv c3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwK IAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051 bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNjLT54 c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50 X2l0dXApOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0 aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRl eHNjYW4uYwppbmRleCA4NDgyM2YwYjYuLmMzNGExM2E4NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVJbmRleHNjYW4uYwpAQCAtMTA3LDcgKzEwNyw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0 ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMg cGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5z Y2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNzX1Jl bGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJ CQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgICZub2RlLT5pc3NfSW5z dHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApAQCAtMTI4LDcgKzEy OCw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIG9rLCBub3cg dGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0J d2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKKwl3 aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3Qp KQogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApAQCAtMjAzLDcgKzIwMyw3IEBAIElu ZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBzZXJpYWxseSBl eGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgog CQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBu b2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFw c2hvdCwKIAkJCQkJCQkJICAgJm5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2Rl LT5pc3NfTnVtU2NhbktleXMsCkBAIC0yNjAsNyArMjYwLDcgQEAgSW5kZXhOZXh0V2l0aFJlb3Jk ZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIEZldGNoIG5leHQgdHVwbGUgZnJvbSB0aGUg aW5kZXguCiAJCSAqLwogbmV4dF9pbmRleHR1cGxlOgotCQlpZiAoIWluZGV4X2dldG5leHRfc2xv dChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQlpZiAoIXRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQog CQl7CiAJCQkvKgogCQkJICogTm8gbW9yZSB0dXBsZXMgZnJvbSB0aGUgaW5kZXguICBCdXQgd2Ug c3RpbGwgbmVlZCB0byBkcmFpbiBhbnkKQEAgLTgxMiw2ICs4MTIsNyBAQCBFeGVjRW5kSW5kZXhT Y2FuKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5k ZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+ bnNlYXJjaGVzICs9IG5vZGUtPmlzc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJQXNzZXJ0KG5v ZGUtPmlzc19JbnN0cnVtZW50Lm5oZWFwZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpAQCAtMTcx OSw3ICsxNzIwLDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUg Km5vZGUsCiAKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxs ZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0 aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJ CQkgJm5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlz LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApAQCAtMTc4Myw3ICsxNzg0LDcg QEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAK IAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+ c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywK KwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgJm5vZGUt Pmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJ CQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMKaW5kZXggMjljYjYwZDZiLi5jZmEwMjJmMGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvaW5keHBhdGguYwpAQCAtNDMsNyArNDMsNyBAQAogLyogV2hldGhlciB3ZSBhcmUgbG9va2lu ZyBmb3IgcGxhaW4gaW5kZXhzY2FuLCBiaXRtYXAgc2Nhbiwgb3IgZWl0aGVyICovCiB0eXBlZGVm IGVudW0KIHsKLQlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlICov CisJU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSBvciBhbWdldGJh dGNoICovCiAJU1RfQklUTUFQU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0Yml0bWFwICov CiAJU1RfQU5ZU0NBTiwJCQkJCS8qIGVpdGhlciBpcyBva2F5ICovCiB9IFNjYW5UeXBlQ29udHJv bDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBhOTBlMWM5ZWUuLjM5YTVl YTI5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtMzEzLDExICszMTMs MTEgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9i amVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNlYXJjaGFycmF5ID0gYW1yb3V0 aW5lLT5hbXNlYXJjaGFycmF5OwogCQkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBhbXJvdXRpbmUt PmFtc2VhcmNobnVsbHM7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGFtcm91dGluZS0+YW1j YW5wYXJhbGxlbDsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gKGFtcm91dGluZS0+YW1nZXR0 dXBsZSAhPSBOVUxMKTsKKwkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gKGFtcm91dGluZS0+YW1n ZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkJCQkgICBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0g TlVMTCk7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJvdXRpbmUtPmFtZ2V0Yml0bWFw ICE9IE5VTEwgJiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxlYW0tPnNjYW5fYml0bWFwX25leHRf dHVwbGUgIT0gTlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSAoYW1yb3V0aW5lLT5hbW1h cmtwb3MgIT0gTlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRpbmUtPmFtcmVzdHJwb3MgIT0gTlVM TCk7CisJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ICE9IE5V TEw7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRl OwogCQkJCUFzc2VydChpbmZvLT5hbWNvc3Rlc3RpbWF0ZSAhPSBOVUxMKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4IDBiMWQ4MGI1Yi4uNzZiMGQw MzVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBAIC04 OTAsNyArODkwLDggQEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJZGVudGl0eUZ1bGwoUmVsYXRp b24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogCSAqIFRoZSBnaXZlbiBpbmRleCBhY2Nlc3Mg bWV0aG9kIG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiwgd2hpY2ggd2lsbAogCSAqIGJlIHVz ZWQgbGF0ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZSBSZWxhdGlvbkZpbmRSZXBsVHVwbGVC eUluZGV4KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRf cmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKEdldEluZGV4QW1S b3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09 IE5VTEwgJiYKKwkJR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJlbGFt LCBmYWxzZSktPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0dXJu IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCBjODFmYjYxYTAuLmRkZmQxYjU1YyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsMTAgKzM2MywxMSBAQCBpbmRleGFtX3By b3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRp bmUtPmFtY2x1c3RlcmFibGUpOwogCiAJCQljYXNlIEFNUFJPUF9JTkRFWF9TQ0FOOgotCQkJCVBH X1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJCVBH X1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJCSAgIHJv dXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9QX0JJVE1BUF9TQ0FO OgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwID8gdHJ1ZSA6IGZhbHNl KTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMKTsKIAog CQkJY2FzZSBBTVBST1BfQkFDS1dBUkRfU0NBTjoKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5l LT5hbWNhbmJhY2t3YXJkKTsKQEAgLTM5Miw3ICszOTMsOCBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5t dWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0VYQ0xVREU6Ci0JCQlQR19SRVRVUk5fQk9P TChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCVBHX1JFVFVSTl9CT09M KHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJICAgcm91dGluZS0+YW1nZXRi YXRjaCAhPSBOVUxMKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fSU5DTFVERToKIAkJCVBHX1JFVFVS Tl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmlu ZGV4IDI5ZmVjNjU1NS4uYTcyMTM2NTRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAt MTAyLDcgKzEwMiw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpbi5oIgogI2luY2x1ZGUgImFjY2Vz cy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCi0jaW5jbHVkZSAiYWNjZXNz L3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRp c3RpYy5oIgpAQCAtNzEyNCwxMyArNzEyMywxMCBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBv aW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJYm9vbAkJaGF2ZV9kYXRhID0gZmFsc2U7CiAJU25hcHNo b3REYXRhIFNuYXBzaG90Tm9uVmFjdXVtYWJsZTsKIAlJbmRleFNjYW5EZXNjIGluZGV4X3NjYW47 Ci0JQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JQmxvY2tOdW1iZXIgbGFzdF9o ZWFwX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWludAkJCW5fdmlzaXRlZF9oZWFwX3Bh Z2VzID0gMDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAJRGF0dW0JCXZhbHVlc1tJTkRFWF9NQVhfS0VZ U107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKIAlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQ7CisJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGluc3RydW1lbnQ7CiAKIAkvKgogCSAq IFdlIHVzZSB0aGUgaW5kZXgtb25seS1zY2FuIG1hY2hpbmVyeSBmb3IgdGhpcy4gIFdpdGggbW9z dGx5LXN0YXRpYwpAQCAtNzE3OSw1NiArNzE3NSwzMiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2Vu ZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJSW5pdE5vblZhY3V1bWFibGVTbmFwc2hvdChTbmFw c2hvdE5vblZhY3V1bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNUZXN0Rm9yKGhlYXBSZWwpKTsK IAotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsCi0JCQkJ CQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAorCS8qCisJICogU2V0IGl0IHVwIGZv ciBpbnN0cnVtZW50ZWQgaW5kZXgtb25seSBzY2FuLiAgV2UgbmVlZCB0aGUKKwkgKiBpbnN0cnVt ZW50YXRpb24gdG8gbW9uaXRvciB0aGUgbnVtYmVyIG9mIGhlYXAgZmV0Y2hlcy4KKwkgKi8KKwlt ZW1zZXQoJmluc3RydW1lbnQsIDAsIHNpemVvZihpbnN0cnVtZW50KSk7CisJaW5kZXhfc2NhbiA9 IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRleFJlbCwgdHJ1ZSwKKwkJCQkJCQkJICZTbmFw c2hvdE5vblZhY3V1bWFibGUsICZpbnN0cnVtZW50LAogCQkJCQkJCQkgMSwgMCk7Ci0JLyogU2V0 IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQlpbmRleF9zY2FuLT54c193YW50X2l0dXAg PSB0cnVlOworCUFzc2VydChpbmRleF9zY2FuLT54c193YW50X2l0dXApOwogCWluZGV4X3Jlc2Nh bihpbmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkvKiBGZXRjaCBmaXJzdC9u ZXh0IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4 X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9IE5VTEwpCisJd2hpbGUg KHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIsIHRhYmxl c2xvdCkpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1i ZXIodGlkKTsKKwkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3Ig YW55dGhpbmcgKi8KKwkJRXhlY0NsZWFyVHVwbGUodGFibGVzbG90KTsKIAotCQlpZiAoIVZNX0FM TF9WSVNJQkxFKGhlYXBSZWwsCi0JCQkJCQkJYmxvY2ssCi0JCQkJCQkJJnZtYnVmZmVyKSkKLQkJ ewotCQkJLyogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmls aXR5ICovCi0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoaW5kZXhfc2NhbiwgdGFibGVzbG90KSkK LQkJCXsKLQkJCQkvKgotCQkJCSAqIE5vIHZpc2libGUgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50 cnksIHNvIHdlIG5lZWQgdG8KLQkJCQkgKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGVudHJ5LiAgQmVm b3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwCi0JCQkJICogcGFnZSBmZXRjaGVzIGFuZCBnaXZlIHVw IGlmIHdlJ3ZlIGRvbmUgdG9vIG1hbnkuCi0JCQkJICoKLQkJCQkgKiBXZSBkb24ndCBjaGFyZ2Ug YSBwYWdlIGZldGNoIGlmIHRoaXMgaXMgdGhlIHNhbWUgaGVhcCBwYWdlCi0JCQkJICogYXMgdGhl IHByZXZpb3VzIHR1cGxlLiAgVGhpcyBpcyBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUsCi0JCQkJ ICogc2luY2Ugb3RoZXIgcmVjZW50bHktYWNjZXNzZWQgcGFnZXMgYXJlIHByb2JhYmx5IHN0aWxs IGluCi0JCQkJICogYnVmZmVycyB0b287IGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciB0aGlzIGhl dXJpc3RpYy4KLQkJCQkgKi8KKwkJLyoKKwkJICogTm8gdmlzaWJsZSB0dXBsZSBmb3IgdGhpcyBp bmRleCBlbnRyeSwgc28gd2UgbmVlZCB0byBhZHZhbmNlIHRvIHRoZQorCQkgKiBuZXh0IGVudHJ5 LiAgQmVmb3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2ZSB1cAor CQkgKiBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55LgorCQkgKi8KICNkZWZpbmUgVklTSVRFRF9QQUdF U19MSU1JVCAxMDAKIAotCQkJCWlmIChibG9jayAhPSBsYXN0X2hlYXBfYmxvY2spCi0JCQkJewot CQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsKLQkJCQkJbl92aXNpdGVkX2hlYXBfcGFnZXMr KzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3BhZ2VzID4gVklTSVRFRF9QQUdFU19MSU1JVCkK LQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0dXBs ZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJCX0KLQotCQkJLyogV2UgZG9uJ3QgYWN0dWFs bHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55dGhpbmcgKi8KLQkJCUV4ZWNDbGVhclR1cGxl KHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBXZSBkb24ndCBjYXJlIHdoZXRoZXIgdGhlcmUn cyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUgaW4KLQkJCSAqIHRoZSBIT1QgY2hhaW47IGlm IGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2QgZW5vdWdoLgotCQkJICovCi0JCX0KKwkJaWYg KGluc3RydW1lbnQubmhlYXBmZXRjaGVzID4gVklTSVRFRF9QQUdFU19MSU1JVCkKKwkJCWJyZWFr OwogCiAJCS8qCiAJCSAqIFdlIGV4cGVjdCB0aGF0IHRoZSBpbmRleCB3aWxsIHJldHVybiBkYXRh IGluIEluZGV4VHVwbGUgbm90CkBAIC03MjYxLDggKzcyMzMsNiBAQCBnZXRfYWN0dWFsX3Zhcmlh YmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJCWJyZWFrOwogCX0KIAotCWlmICh2bWJ1 ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKIAlpbmRl eF9lbmRzY2FuKGluZGV4X3NjYW4pOwogCiAJcmV0dXJuIGhhdmVfZGF0YTsKZGlmZiAtLWdpdCBh L2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXgg NTExMWNkYzZkLi43ZmQ5OGRiYTYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5j CisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNDYsMTAgKzE0NiwxMSBAQCBibGhh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYmxiZWdpbnNjYW4sCiAJ CS5hbXJlc2NhbiA9IGJscmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJh dGNoID0gTlVMTCwKKwkJLmFtZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYmxn ZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBibGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxM LAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0 aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwK IAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0 aW9uL2V4cGVjdGVkL2luZGV4LW9ubHktc2Nhbi12aXNpYmlsaXR5Lm91dCBiL3NyYy90ZXN0L2lz b2xhdGlvbi9leHBlY3RlZC9pbmRleC1vbmx5LXNjYW4tdmlzaWJpbGl0eS5vdXQKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi42MTZhYjE5ZGMKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5kZXgtb25seS1zY2FuLXZpc2liaWxpdHku b3V0CkBAIC0wLDAgKzEsMzIgQEAKK1BhcnNlZCB0ZXN0IHNwZWMgd2l0aCAyIHNlc3Npb25zCisK K3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMl92YWN1dW0gczJfZGVsZXRlIHMxX2JlZ2luIHMxX3By ZXBhcmUgczFfZmV0Y2hfMSBzMl92YWN1dW0gczFfZmV0Y2hfYWxsIHMxX2NvbW1pdAorc3RlcCBz Ml92YWN1dW06IAorCVZBQ1VVTSAoVFJVTkNBVEUgZmFsc2UpIGlvc192aXNfdGVzdDsKKworc3Rl cCBzMl9kZWxldGU6IAorCURFTEVURSBGUk9NIGlvc192aXNfdGVzdCBXSEVSRSBhID4gMTsKKwor c3RlcCBzMV9iZWdpbjogQkVHSU47CitzdGVwIHMxX3ByZXBhcmU6IAorCURFQ0xBUkUgZm9vIE5P IFNDUk9MTCBDVVJTT1IgRk9SIFNFTEVDVCBhIEZST00gaW9zX3Zpc190ZXN0IFdIRVJFIGEgPiAw OworCitzdGVwIHMxX2ZldGNoXzE6IAorCUZFVENIIEZST00gZm9vOworCithCistCisxCisoMSBy b3cpCisKK3N0ZXAgczJfdmFjdXVtOiAKKwlWQUNVVU0gKFRSVU5DQVRFIGZhbHNlKSBpb3Nfdmlz X3Rlc3Q7CisKK3N0ZXAgczFfZmV0Y2hfYWxsOiAKKwlGRVRDSCBBTEwgRlJPTSBmb287CisKK2EK Ky0KKygwIHJvd3MpCisKK3N0ZXAgczFfY29tbWl0OiBDT01NSVQ7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lz b2xhdGlvbl9zY2hlZHVsZQppbmRleCAwMWZmMWM2NTguLmNmZjYzMDU5MSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbl9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9pc29s YXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCkBAIC0xNyw2ICsxNyw3IEBAIHRlc3Q6IHBhcnRpYWwt aW5kZXgKIHRlc3Q6IHR3by1pZHMKIHRlc3Q6IG11bHRpcGxlLXJvdy12ZXJzaW9ucwogdGVzdDog aW5kZXgtb25seS1zY2FuCit0ZXN0OiBpbmRleC1vbmx5LXNjYW4tdmlzaWJpbGl0eQogdGVzdDog aW5kZXgtb25seS1iaXRtYXBzY2FuCiB0ZXN0OiBwcmVkaWNhdGUtbG9jay1ob3QtdHVwbGUKIHRl c3Q6IHVwZGF0ZS1jb25mbGljdC1vdXQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9z cGVjcy9pbmRleC1vbmx5LXNjYW4tdmlzaWJpbGl0eS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9u L3NwZWNzL2luZGV4LW9ubHktc2Nhbi12aXNpYmlsaXR5LnNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwLi44NmRmZjI0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9pc29sYXRpb24vc3BlY3MvaW5kZXgtb25seS1zY2FuLXZpc2liaWxpdHkuc3BlYwpAQCAtMCww ICsxLDg0IEBACisjIEluZGV4LW9ubHkgc2NhbiB2aXNpYmlsaXR5IHRlc3QKKyMKKyMgVmVyaWZ5 IHRoYXQgVkFDVVVNIGRvZXNuJ3QgYmxvY2sgZm9yZXZlciB0cnlpbmcgdG8gYWNxdWlyZSBhIGNs ZWFudXAgbG9jaworIyBvbiBhbiBpbmRleCBwYWdlIHdoaWxlIGFuIGluZGV4LW9ubHkgc2NhbiBo YXMgYSBjdXJzb3Igb3Blbi4gIFdpdGggTVZDQworIyBzY2Fucywgd2UgZWFnZXJseSBkcm9wIHRo ZSBwaW4gb24gZWFjaCBiYXRjaCdzIGxlYWYgcGFnZSBhZnRlciBjYWNoaW5nCisjIHZpc2liaWxp dHkgaW5mbywgYWxsb3dpbmcgVkFDVVVNIHRvIHByb2NlZWQuCitzZXR1cAoreworCS0tIExvdyBm aWxsZmFjdG9yICsgd2lkZSB0dXBsZXMgPSBtdWx0aXBsZSBoZWFwIGJsb2NrcyB3aXRoIGZldyBy b3dzCisJQ1JFQVRFIFRBQkxFIGlvc192aXNfdGVzdAorICAoYSBpbnQgTk9UIE5VTEwsCisgICBi IGludCBOT1QgTlVMTCwKKyAgIHBhZCBjaGFyKDEwMjQpIERFRkFVTFQgJycpCisJV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UsIGZpbGxmYWN0b3IgPSAxMCk7CisKKwlJTlNFUlQgSU5U TyBpb3NfdmlzX3Rlc3QgU0VMRUNUIGcuaSwgZy5pIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEw KSBnKGkpOworCisJQ1JFQVRFIElOREVYIGlvc192aXNfdGVzdF9hIE9OIGlvc192aXNfdGVzdCAo YSk7Cit9CisKK3RlYXJkb3duCit7CisJRFJPUCBUQUJMRSBpb3NfdmlzX3Rlc3Q7Cit9CisKKwor c2Vzc2lvbiBzMQorCisjIEZvcmNlIGluZGV4LW9ubHkgc2NhbjoKK3NldHVwIHsKKwlTRVQgZW5h YmxlX2JpdG1hcHNjYW4gPSBmYWxzZTsKKwlTRVQgZW5hYmxlX2luZGV4b25seXNjYW4gPSB0cnVl OworCVNFVCBlbmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKK30KKworc3RlcCBzMV9iZWdpbiB7IEJF R0lOOyB9CitzdGVwIHMxX2NvbW1pdCB7IENPTU1JVDsgfQorCitzdGVwIHMxX3ByZXBhcmUgewor CURFQ0xBUkUgZm9vIE5PIFNDUk9MTCBDVVJTT1IgRk9SIFNFTEVDVCBhIEZST00gaW9zX3Zpc190 ZXN0IFdIRVJFIGEgPiAwOworfQorCitzdGVwIHMxX2ZldGNoXzEgeworCUZFVENIIEZST00gZm9v OworfQorCitzdGVwIHMxX2ZldGNoX2FsbCB7CisJRkVUQ0ggQUxMIEZST00gZm9vOworfQorCisK K3Nlc3Npb24gczIKKworIyBLZWVwIHJvdyAxIHNvIGN1cnNvciBoYXMgYSByb3cgdG8gInJlc3Qi IG9uCitzdGVwIHMyX2RlbGV0ZSB7CisJREVMRVRFIEZST00gaW9zX3Zpc190ZXN0IFdIRVJFIGEg PiAxOworfQorCisjIERpc2FibGUgdHJ1bmNhdGlvbiB0byBhdm9pZCB1bnJlbGF0ZWQgQWNjZXNz RXhjbHVzaXZlTG9jayB3YWl0cworc3RlcCBzMl92YWN1dW0geworCVZBQ1VVTSAoVFJVTkNBVEUg ZmFsc2UpIGlvc192aXNfdGVzdDsKK30KKworcGVybXV0YXRpb24KKwkjIFZBQ1VVTSBmaXJzdCwg dG8gZW5zdXJlIFZNIGV4aXN0cworCXMyX3ZhY3V1bQorCisJIyBEZWxldGUgbmVhcmx5IGFsbCBy b3dzCisJczJfZGVsZXRlCisKKwkjIE9wZW4gYSBjdXJzb3IgYW5kIGZldGNoIG9uZSByb3csIHBp bm5pbmcgdGhlIGZpcnN0IGxlYWYgcGFnZQorCXMxX2JlZ2luCisJczFfcHJlcGFyZQorCXMxX2Zl dGNoXzEKKworICAjIFRoaXMgVkFDVVVNIG11c3Qgbm90IGJsb2NrIGZvcmV2ZXIgd2FpdGluZyBm b3IgYSBjbGVhbnVwIGxvY2suICBJdCB3aWxsCisgICMgbWFyayBoZWFwIHBhZ2VzIGFzIGFsbC12 aXNpYmxlLCBidXQgdGhlIHNjYW4gaGFzIGFscmVhZHkgY2FjaGVkIHZpc2liaWxpdHkKKyAgIyBp bmZvLCBzbyBzdWJzZXF1ZW50IGZldGNoZXMgY29ycmVjdGx5IHNlZSBubyBhZGRpdGlvbmFsIHJv d3MuCisJczJfdmFjdXVtCisKKyAgIyBNdXN0IHJldHVybiBubyByb3dzIChkZWxldGVkIHJvd3Mg YXJlIG5vdCB2aXNpYmxlIHRvIG91ciBNVkNDIHNuYXBzaG90KQorCXMxX2ZldGNoX2FsbAorCisJ czFfY29tbWl0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1 bW15X2luZGV4X2FtLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2lu ZGV4X2FtLmMKaW5kZXggOWViOGYwYTZjLi45ZDRmZGRlYzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYworKysgYi9zcmMvdGVzdC9t b2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKQEAgLTMxNywxMCArMzE3LDEx IEBAIGRpaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBkaWJlZ2lu c2NhbiwKIAkJLmFtcmVzY2FuID0gZGlyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJ LmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRt YXAgPSBOVUxMLAogCQkuYW1lbmRzY2FuID0gZGllbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVM TCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVz dGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEws CiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggM2YzYTg4OGZkLi5jM2YyYTlmYzggMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0y MjYsOCArMjI2LDYgQEAgQlRTY2FuSW5zZXJ0RGF0YQogQlRTY2FuS2V5UHJlcHJvYwogQlRTY2Fu T3BhcXVlCiBCVFNjYW5PcGFxdWVEYXRhCi1CVFNjYW5Qb3NEYXRhCi1CVFNjYW5Qb3NJdGVtCiBC VFNoYXJlZAogQlRTb3J0QXJyYXlDb250ZXh0CiBCVFNwb29sCkBAIC0yNTYsNiArMjU0LDkgQEAg QmFzZUJhY2t1cENtZAogQmFzZUJhY2t1cFRhcmdldEhhbmRsZQogQmFzZUJhY2t1cFRhcmdldFR5 cGUKIEJhdGNoTVZDQ1N0YXRlCitCYXRjaE1hdGNoaW5nSXRlbQorQmF0Y2hSaW5nQnVmZmVyCitC YXRjaFJpbmdJdGVtUG9zCiBCZWdpbkRpcmVjdE1vZGlmeV9mdW5jdGlvbgogQmVnaW5Gb3JlaWdu SW5zZXJ0X2Z1bmN0aW9uCiBCZWdpbkZvcmVpZ25Nb2RpZnlfZnVuY3Rpb24KQEAgLTEyODYsNiAr MTI4Nyw4IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJbmRleFBhdGgKIEluZGV4UnVudGltZUtl eUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2gKK0luZGV4U2NhbkJhdGNoRGF0YQogSW5k ZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0RhdGEKIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgpA QCAtMzQ3MSwxOCArMzQ3NCwxNyBAQCBhbWNhbnJldHVybl9mdW5jdGlvbgogYW1jb3N0ZXN0aW1h dGVfZnVuY3Rpb24KIGFtZW5kc2Nhbl9mdW5jdGlvbgogYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9m dW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlvbgogYW1nZXRiaXRtYXBfZnVuY3Rpb24KIGFtZ2V0 dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0dXBsZV9mdW5jdGlvbgogYW1pbml0cGFyYWxsZWxz Y2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlvbgogYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9u Ci1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9uc19mdW5jdGlvbgogYW1wYXJhbGxlbHJlc2Nh bl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlvbgogYW1yZXNjYW5fZnVuY3Rpb24KLWFtcmVz dHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX2NtcHR5cGVfZnVuY3Rpb24KIGFtdHJhbnNsYXRl X3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFudXBfZnVuY3Rpb24KLS0gCjIuNTEuMAoK --0000000000002fd78b0648b24456--