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 1w049a-001aP8-2Y for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Mar 2026 20:58:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w049Z-0061CD-0G for pgsql-hackers@arkaria.postgresql.org; Tue, 10 Mar 2026 20:58:09 +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 1w049Y-0061Bz-0j for pgsql-hackers@lists.postgresql.org; Tue, 10 Mar 2026 20:58:09 +0000 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w049U-000000021lP-47w5 for pgsql-hackers@lists.postgresql.org; Tue, 10 Mar 2026 20:58:08 +0000 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-439c5b40f60so6079610f8f.0 for ; Tue, 10 Mar 2026 13:58:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773176284; cv=none; d=google.com; s=arc-20240605; b=F/1+hcH53bVKXq8TAm7ivzWFcMZ62ruZNCVhxKUL6H3Wu6W0gJvFufq1ptGXRFLoX0 Z1bB9TOh0YrP2n3/QNqWMPn+Ys7SdX7uB1V50A+J/c4XvGieWn7QWxmPsXrpBpXPLMRI D2jJpmrt5J7P1cBDo4JaL7zwYBV6CN37NtTjuP+VHMHXZVRHsIKEDx8kVFnPx6VPjPvV UBTYKQAmJJ20QJGxlwotvc5MH75xavtinvUZVgP64bl7CNBHJxmCqBNAOEzgA1YckmO/ zr8RuBuqeKQrCHUpx1XpBjUWICw7dpyNf3IwW4vmB65UUDOtNZU4CFcmfYwqz+LnGmaV bvmA== 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=b0DNeZb48dkEgwW7RctS+ufMaj0GHE6Vp+3m+e/0/2g=; fh=IyRBsVD/gFiSuPOxglDwjfB6qRr9YUGiKdHE2WEOS9M=; b=BfAAERMJgI9B6nKSqiFER4hpYRUX07rokWdpl/QxAKmvUtutWq3iRCqP7Tjx+zSwmH ES9jO8HDazi/I2EItq7rb4wjY7AHGjdSXRkBKnHmbEUD7E5es8bc73KHTwwQi8PB7jZz 7mkAvYZoZiuLTheMQGSIbaGDPXMir5ye7Eo6H3FXLs2PHr5WUezZkQ+V7UwYHoIMoSx0 mGjzxwzGJwzzpdqTm29gpUURJivcLJD9gkimfYcG6kaGrglnMxFUDhf/EhPEoB7u5GJs DEWG50WmqvqJEWPu69T6n0gO0Adz27xf9rZgCDllDJ2kcbkBRTJ/X+2I4CqkIwDWbwCF HJDw==; 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=1773176284; x=1773781084; 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=b0DNeZb48dkEgwW7RctS+ufMaj0GHE6Vp+3m+e/0/2g=; b=JotcRbj4MPCM3wQu0/9j19tkhc1fhIRY4n4oPfFaPMJKzAjWowSP9bfUAfAw9BJs1I OQvNZ0kZPZ023UkvhCzF3xcXmQjHQim+7g+eyQ4VDpxbGIX8p/SUj6A4g5Cw/IYHL/N3 B+8ZG6TSzbmkFl/VhKKkcy3K0ZkhmDUG4qklLiWFnJ9HP75ps1Njp6BVocvNY7po7N4L Ka2JoZhZ+k24ZkSaYZWzf4CIs2VurfOq28bPDNCiudyIqsfuHHxk7yxbL5MkFlq2povi RI+SXOTBqtat6uJ9HV1XnyD6X0pKWCFbRyC/RMAe7C4UmlH6HR8V5ko7pzzvYAx0Zk4H 8CGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773176284; x=1773781084; 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=b0DNeZb48dkEgwW7RctS+ufMaj0GHE6Vp+3m+e/0/2g=; b=nE181AZ0qL02hqv6KNp3bHlX89mc1Gtoylz1jN+FXYPOOPd0wTdewu6FNeffE5Ir1f 7/W8RY6K2SINmh8Yq//tD75UKKXC/twb1MCoppE/1BCj6txzR5V4rgOswF84SgwCrufp qJ5LEdeO2dbQ8VulFofVhCYFwXho8OCeI3FjWFHQy0pFqGxdfqSkafD/oCkNWDA+iGSS uI6iUqD3cA4DL0/fQHWJuYlRCOmDW9oG9lC139lmnp0lcruCzseEvkOEgigBm0Gjrh+J YXC7+6tRSI/cNeSEv71vuf6WbLqbKQvre6wAdQ2Xbt1t1w1NIX0Sgrtt2Q91UHb7I8l9 irFQ== X-Forwarded-Encrypted: i=1; AJvYcCX2QjVZJGIUxu6SciEK4VYZyanfQD7WuqPMFMQL06wleduV34zfhUqj7D56NHWxSyflxD6R+LSFaBMaG/CQ@lists.postgresql.org X-Gm-Message-State: AOJu0YzWWP0byRiMKY52vlfmTZlCMXQvStKHU85ZhfM21jqN9rkRXV71 99uza8xvGePZ9i60NXrt4z+lxRou+yxIQoHTcJCelFLBS6lwoPTnqZzABlwc8mlXfufW42AGm/d wSYemf7hX2vqYtHQ47X0E77+tL8A9CfINq0RFfAOUVA== X-Gm-Gg: ATEYQzyFbilrQxk/vAbeEs7+RBPIU3+gEQAdjI676cZiYQOJiH71CsWkee1orJpEqV5 EXM3OrPfGv3zZftmYgfkKDnvv4MqE1OlFn40H0SMgu9kgkpqTxgqT/aRr7Ecn1U4Z1imFD1AOIe 2s6bN/YzZ4cfWtj8zgDU+dTkRSbuUjDz45+cUEDXL0PGXEsspAZv5fRmDvHurYXuDHwk3+ypOXU OCLdRZDAPXBhzsApf/0j4QHKzHDQ2Yz/NNNH9p22f40JOAScvBkaW8ZRogSp4kR/8jeGOVNgJKJ 8QdUUObo4LAqrh9UGw== X-Received: by 2002:a05:6000:2681:b0:439:b79d:b9ac with SMTP id ffacd0b85a97d-439f8223276mr543777f8f.45.1773176283681; Tue, 10 Mar 2026 13:58:03 -0700 (PDT) MIME-Version: 1.0 References: <64a2re223ajj4popowsyu4xekbuvvyfwkrihn5yzyrkwsmsuvp@2lls3tpww5dl> <52512325-b1f2-4fff-819e-f68122b2e427@vondra.me> <64mfcfv7iihc4pmqlxarii4esnmqry52ckz5m7lmwylnfnuxuz@oxh4ioxkjtep> In-Reply-To: From: Peter Geoghegan Date: Tue, 10 Mar 2026 16:57:35 -0400 X-Gm-Features: AaiRm51ukS92l7In-zQ_Nk32Gv37OXsjpGYO9-BJ2v8e2q5yJ-hA1K5WUE11oL4 Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000843716064cb1c648" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000843716064cb1c648 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Feb 27, 2026 at 6:52=E2=80=AFPM Andres Freund = wrote: > This is a huge change. Is there a chance we can break it up into more > manageable chunks? Attached is v12, which has revisions that address most of your feedback items. It also includes items that address problems that I noticed during performance validation work. Highlights: * Substantial revisions that give table AMs and index AMs direct control over batch layout -- without giving up on batch recycling/caching. This is essentially what you (Andres) requested because the design from v11 was not sufficiently AM agnostic. In particular: - Table AMs now control the size and layout of visibility information (in practice heapam uses this to store per-item visibility state from the visibility map). - Index AMs have their own opaque state for things like sibling link block numbers, avoiding the assumption that other index AMs supporting amgetbatch will need to work like nbtree and hash as regards how they navigate to the next index page/index keyspace associated with each batch. * No more read stream yielding. Numerous new patches from Andres are now included, which helps with this. In particular, "WIP: read_stream: Only increase distance when waiting for IO" fixes the problematic regression in an adversarial query -- the one that prompted me to invent yielding in the first place. As a result of all this, the read stream callback added by the prefetching commit itself is now substantially simpler than it was in v11. * There are now a couple of extra patches created by breaking things into more distinct commits. Namely, there's a new "heapam: Track heap block in IndexFetchHeapData using xs_blk" commit, as well as a new "Make IndexScanInstrumentation a pointer in executor scan nodes" commit. * Moreover, some commits now appear in a slightly different order, prioritizing work closer to being committable; those commits now come first. * The SGML doc changes are now broken up a bit better: the commit that adds basic amgetbatch functionality now includes SGML doc updates describing the required API revisions. The SGML doc changes that describe prefetching concepts now appear in the later prefetching commit. * New commit "Use simple hash for PrivateRefCount" addresses some of the problems we were seeing with PrivateRefCount performance. This generic optimization addresses an existing problem that would otherwise be much worse with the index prefetching work in place. * The new xs_read_extremal_only mechanism (which replaces selfuncs.c's current use of VISITED_PAGES_LIMIT) will now hold on for longer -- up to 3 index leaf pages can be read before we give up on the scan. The number of pages that we're willing to read before giving up is now under the control of the selfuncs.c caller. This addresses concerns that Tom had about selfuncs.c giving up too easily, for example when the rightmost/leftmost leaf page happens to have very few items. * v12 fixes a ~5% regression in bitmap index scans, which was tied to the fact that we were naively using retail pallocs to allocate new batches in all cases. The fix gives amgetbitmap routines the ability to use their own batch cache mechanism, similar to the one used during amgetbatch scans. In practice, btgetbitmap and hashgetbitmap scans will never need to do more than one palloc to allocate a batch; they can continually reuse the same batch. This relies on the fact that amgetbitmap routines don't actually need to hold open more than a single batch at a time/maintain a batch ring buffer (just like master manages currPos state). * v12 addresses certain performance issues with nestloop joins and merge joins by no longer dropping the scan's heap page buffer pin on rescan. This keeps regressions with fully cached workloads to an absolute minimum, and seems to have no real downside. However, I have NOT yet acted on a few feedback items from Andres: * I still don't know what Andres meant about requiring table AMs to free batch index page buffer pins representing a modularity violation. I don't see how we can reasonably avoid it while still preserving the guarantees needed to safely drop buffer pins eagerly during index-only scans that require prefetching. * I'm also not at all sure what Andres meant about index AMs like hash not holding onto their own buffer pins, given that prefetching uses a read stream sensitive to the number of buffer pins the backend holds. I understand the general concern about interfering with the read stream, I think, but I don't see how imposing such a strict rule on index AMs, which have always been allowed to do this, can be practical (though note that nbtree doesn't actually hold on to any buffer pins for internal purposes, and hasn't since Postgres 18 commit 1bd4bc85, so at least nbtree can be relied on to never do this). I asked Andres about these 2 points not too long ago [1], and await further feedback on those questions. * Separate from the 2 closely related items about batch buffer pins, I have not yet made most of the changes Andres requested to the "Use ExecSetTupleBound hint during index scans" commit -- just because I haven't had time. v11 of the patch set hasn't applied cleanly in about a week, so I didn't want to further delay posting v12. Thanks [1] https://postgr.es/m/CAH2-Wznxu+AFz-EBOG-XiRA_R3nXLp45NEiGSD3ebx3h=3DOKP= Aw@mail.gmail.com -- Peter Geoghegan --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0021-Conditional-locking-in-pgaio_worker_submit_inter.patch" Content-Disposition: attachment; filename="v12-0021-Conditional-locking-in-pgaio_worker_submit_inter.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdt43 RnJvbSBkMjFhZjFlY2UwZWMzZTI3YzgyMjhiYmUxNWYyZDAzMjcwZDMxN2MyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGF0ZTog V2VkLCA0IE1hciAyMDI2IDIyOjMwOjM4ICswMTAwClN1YmplY3Q6IFtQQVRDSCB2MTIgMjEvMjNd IENvbmRpdGlvbmFsIGxvY2tpbmcgaW4gcGdhaW9fd29ya2VyX3N1Ym1pdF9pbnRlcm5hbAoKSWYg QWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayBjYW4ndCBiZSBhY3F1aXJlZCB3aXRob3V0IHdh aXRpbmcsCnBlcmZvcm0gdGhlIEkvTyBzeW5jaHJvbm91c2x5IGluc3RlYWQuIFRoZXJlJ3MgYSBz aW5nbGUgc3VibWlzc2lvbgpxdWV1ZSwgYW5kIGluIGNhc2VzIHdpdGggaGlnaCBJL08gY29uY3Vy cmVuY3kgKGUuZy4gbXVsdGlwbGUgYmFja2VuZHMKZXhlY3V0aW5nIGxhcmdlIGluZGV4IHNjYW5z KSwgaXQgd2FzIHBvc3NpYmxlIHRvIGVuZCB1cCB3aXRoIG1vc3QKdGltZSBzcGVudCB3YWl0aW5n IGZvciB0aGUgc2luZ2xlIExXTG9jay4KCldoaWxlIGF0IGl0LCBvcHRpbWl6ZSB0aGUgY2FzZSB3 aGVuIHdlIGNhbid0IGFkZCBlbnRyaWVzIGludG8gYSBmdWxsCnF1ZXVlLiBJbnN0ZWFkIG9mIGFk ZGluZyB0aGVtIHRvIHRoZSBhcnJheSBvZiBzeW5jIEkvT3Mgb25lIGJ5IG9uZSwKaW50ZXJydXB0 IHRoZSBsb29wIG9uIHRoZSBmaXJzdCBmYWlsdXJlIGFuZCBoYW5kbGUgYWxsIHJlbWFpbmluZyBp dGVtcwpzeW5jaHJvbm91c2x5LgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93 b3JrZXIuYyB8IDU4ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAz NiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9t ZXRob2Rfd29ya2VyLmMKaW5kZXggZDk2MTdjMjBlLi4xOGZkZTYzZDYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2Fpby9tZXRob2Rfd29ya2VyLmMKQEAgLTI0Miw0MCArMjQyLDU0IEBAIHBnYWlvX3dv cmtlcl9uZWVkc19zeW5jaHJvbm91c19leGVjdXRpb24oUGdBaW9IYW5kbGUgKmlvaCkKIHN0YXRp YyB2b2lkCiBwZ2Fpb193b3JrZXJfc3VibWl0X2ludGVybmFsKGludCBudW1fc3RhZ2VkX2lvcywg UGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewotCVBnQWlvSGFuZGxlICpzeW5jaHJvbm91c19p b3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOworCVBnQWlvSGFuZGxlICoqc3luY2hyb25vdXNf aW9zID0gTlVMTDsKIAlpbnQJCQluc3luYyA9IDA7CiAJTGF0Y2gJICAgKndha2V1cCA9IE5VTEw7 CiAJaW50CQkJd29ya2VyOwogCiAJQXNzZXJ0KG51bV9zdGFnZWRfaW9zIDw9IFBHQUlPX1NVQk1J VF9CQVRDSF9TSVpFKTsKIAotCUxXTG9ja0FjcXVpcmUoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVl TG9jaywgTFdfRVhDTFVTSVZFKTsKLQlmb3IgKGludCBpID0gMDsgaSA8IG51bV9zdGFnZWRfaW9z OyArK2kpCisJaWYgKExXTG9ja0NvbmRpdGlvbmFsQWNxdWlyZShBaW9Xb3JrZXJTdWJtaXNzaW9u UXVldWVMb2NrLCBMV19FWENMVVNJVkUpKQogCXsKLQkJQXNzZXJ0KCFwZ2Fpb193b3JrZXJfbmVl ZHNfc3luY2hyb25vdXNfZXhlY3V0aW9uKHN0YWdlZF9pb3NbaV0pKTsKLQkJaWYgKCFwZ2Fpb193 b3JrZXJfc3VibWlzc2lvbl9xdWV1ZV9pbnNlcnQoc3RhZ2VkX2lvc1tpXSkpCisJCWZvciAoaW50 IGkgPSAwOyBpIDwgbnVtX3N0YWdlZF9pb3M7ICsraSkKIAkJewotCQkJLyoKLQkJCSAqIFdlJ2xs IGRvIGl0IHN5bmNocm9ub3VzbHksIGJ1dCBvbmx5IGFmdGVyIHdlJ3ZlIHNlbnQgYXMgbWFueSBh cwotCQkJICogd2UgY2FuIHRvIHdvcmtlcnMsIHRvIG1heGltaXplIGNvbmN1cnJlbmN5LgotCQkJ ICovCi0JCQlzeW5jaHJvbm91c19pb3NbbnN5bmMrK10gPSBzdGFnZWRfaW9zW2ldOwotCQkJY29u dGludWU7Ci0JCX0KKwkJCUFzc2VydCghcGdhaW9fd29ya2VyX25lZWRzX3N5bmNocm9ub3VzX2V4 ZWN1dGlvbihzdGFnZWRfaW9zW2ldKSk7CisJCQlpZiAoIXBnYWlvX3dvcmtlcl9zdWJtaXNzaW9u X3F1ZXVlX2luc2VydChzdGFnZWRfaW9zW2ldKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIERvIHRo ZSByZXN0IHN5bmNocm9ub3VzbHkuIElmIHRoZSBxdWV1ZSBpcyBmdWxsLCBpdCdzIHVubGlrZWx5 CisJCQkJICogdG8gZ2V0IHNvbWUgZnJlZSBzcGFjZSB3aGlsZSB0aGlzIHRpZ2h0IGxvb3AgaXMg cnVubmluZy4KKwkJCQkgKi8KKwkJCQlzeW5jaHJvbm91c19pb3MgPSAmc3RhZ2VkX2lvc1tpXTsK KwkJCQluc3luYyA9IChudW1fc3RhZ2VkX2lvcyAtIGkpOwogCi0JCWlmICh3YWtldXAgPT0gTlVM TCkKLQkJewotCQkJLyogQ2hvb3NlIGFuIGlkbGUgd29ya2VyIHRvIHdha2UgdXAgaWYgd2UgaGF2 ZW4ndCBhbHJlYWR5LiAqLwotCQkJd29ya2VyID0gcGdhaW9fd29ya2VyX2Nob29zZV9pZGxlKCk7 Ci0JCQlpZiAod29ya2VyID49IDApCi0JCQkJd2FrZXVwID0gaW9fd29ya2VyX2NvbnRyb2wtPndv cmtlcnNbd29ya2VyXS5sYXRjaDsKKwkJCQkvKgorCQkJCSAqIFhYWCBtYXliZSB3ZSBzaG91bGQg c3RpbGwgdHJ5IHRvIGdldCBhbiBpZGxlIHdvcmtlciwgaWYgd2UKKwkJCQkgKiBwdXQgYW55dGhp bmcgaW4gdGhlIHF1ZXVlPworCQkJCSAqLworCQkJCWJyZWFrOworCQkJfQogCi0JCQlwZ2Fpb19k ZWJ1Z19pbyhERUJVRzQsIHN0YWdlZF9pb3NbaV0sCi0JCQkJCQkgICAiY2hvb3Npbmcgd29ya2Vy ICVkIiwKLQkJCQkJCSAgIHdvcmtlcik7CisJCQlpZiAod2FrZXVwID09IE5VTEwpCisJCQl7CisJ CQkJLyogQ2hvb3NlIGFuIGlkbGUgd29ya2VyIHRvIHdha2UgdXAgaWYgd2UgaGF2ZW4ndCBhbHJl YWR5LiAqLworCQkJCXdvcmtlciA9IHBnYWlvX3dvcmtlcl9jaG9vc2VfaWRsZSgpOworCQkJCWlm ICh3b3JrZXIgPj0gMCkKKwkJCQkJd2FrZXVwID0gaW9fd29ya2VyX2NvbnRyb2wtPndvcmtlcnNb d29ya2VyXS5sYXRjaDsKKworCQkJCXBnYWlvX2RlYnVnX2lvKERFQlVHNCwgc3RhZ2VkX2lvc1tp XSwKKwkJCQkJCQkgICAiY2hvb3Npbmcgd29ya2VyICVkIiwKKwkJCQkJCQkgICB3b3JrZXIpOwor CQkJfQogCQl9CisJCUxXTG9ja1JlbGVhc2UoQWlvV29ya2VyU3VibWlzc2lvblF1ZXVlTG9jayk7 CisJfQorCWVsc2UKKwl7CisJCS8qIGRvIGV2ZXJ5dGhpbmcgc3luY2hyb25vdXNseSwgbm8gd2Fr ZXVwIG5lZWRlZCAqLworCQlzeW5jaHJvbm91c19pb3MgPSBzdGFnZWRfaW9zOworCQluc3luYyA9 IG51bV9zdGFnZWRfaW9zOwogCX0KLQlMV0xvY2tSZWxlYXNlKEFpb1dvcmtlclN1Ym1pc3Npb25R dWV1ZUxvY2spOwogCiAJaWYgKHdha2V1cCkKIAkJU2V0TGF0Y2god2FrZXVwKTsKLS0gCjIuNTMu MAoK --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0022-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v12-0022-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdt12 RnJvbSA5ZTk0NmZmNTU3NzVhYWQ1YzZjNjhiNDE2ZjEzMDRjYmRmZDg0M2VmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MzI6NTIgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiAyMi8yM10g QWRkIGZha2UgTFNOIHN1cHBvcnQgdG8gaGFzaCBpbmRleCBBTS4KClRoaXMgaXMgcHJlcGFyYXRp b24gZm9yIGFuIHVwY29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50 ZXJmYWNlIGFuZCBzd2l0Y2ggaGFzaCBvdmVyIHRvIGl0IChmcm9tIGFtZ2V0dHVwbGUpLiAgV2Ug bmVlZCBmYWtlCkxTTnMgdG8gbWFrZSBpdCBzYWZlIHRvIGFwcGx5IGJlaGF2aW9yIHRoYXQgaXMg ZXF1aXZhbGVudCB0byBuYnRyZWUncwpwcmV2aW91cyBkcm9wUGluIGJlaGF2aW9yIHRoYXQgd29y a3Mgd2l0aCB1bmxvZ2dlZCBoYXNoIGluZGV4IHNjYW5zLgoKVGhlIGNvbW1pdCB0aGF0IHdpbGwg YWRkIGhhc2hnZXRiYXRjaCBtYWtlcyB0aGUgcmVxdWlyZWQgY2hhbmdlcyB0bwpfaGFzaF9raWxs X2l0ZW1zIHRoYXQgYWN0dWFsbHkgcmVsaWVzIG9uIGhhc2ggZ2VuZXJhdGluZyBmYWtlIExTTnMu CgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1oYisw RHIySzBEdGdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMgICAgICAgfCAgMjEgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQu YyB8ICAyMCArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyAgIHwgMTEx ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHBhZ2UuYyAgIHwgIDIyICsrKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygr KSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDViNWM1YzZmYS4u OTI4MjRhYTVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC00NzYsNiArNDc2LDcgQEAgaGFz aGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KnN0YXRzLAogCUJ1ZmZlcgkJbWV0YWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJSGFzaE1ldGFQYWdl IG1ldGFwOwogCUhhc2hNZXRhUGFnZSBjYWNoZWRtZXRhcDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsK IAogCXR1cGxlc19yZW1vdmVkID0gMDsKIAludW1faW5kZXhfdHVwbGVzID0gMDsKQEAgLTYxNSw3 ICs2MTYsNiBAQCBsb29wX3RvcDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJ eGxfaGFzaF91cGRhdGVfbWV0YV9wYWdlIHhscmVjOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAog CQl4bHJlYy5udHVwbGVzID0gbWV0YXAtPmhhc2htX250dXBsZXM7CiAKQEAgLTYyNSw4ICs2MjUs MTEgQEAgbG9vcF90b3A6CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBtZXRhYnVmLCBSRUdCVUZf U1RBTkRBUkQpOwogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNI X1VQREFURV9NRVRBX1BBR0UpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1Ziks IHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKwor CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklU X1NFQ1RJT04oKTsKIApAQCAtNjk5LDYgKzcwMiw3IEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0 aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCUJ1ZmZlcgkJ YnVmOwogCUJ1Y2tldAkJbmV3X2J1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBJbnZh bGlkQnVja2V0OwogCWJvb2wJCWJ1Y2tldF9kaXJ0eSA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJYmxrbm8gPSBidWNrZXRfYmxrbm87CiAJYnVmID0gYnVja2V0X2J1ZjsKQEAgLTgy MSw3ICs4MjUsNiBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJf YnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkp CiAJCQl7CiAJCQkJeGxfaGFzaF9kZWxldGUgeGxyZWM7Ci0JCQkJWExvZ1JlY1B0cglyZWNwdHI7 CiAKIAkJCQl4bHJlYy5jbGVhcl9kZWFkX21hcmtpbmcgPSBjbGVhcl9kZWFkX21hcmtpbmc7CiAJ CQkJeGxyZWMuaXNfcHJpbWFyeV9idWNrZXRfcGFnZSA9IChidWYgPT0gYnVja2V0X2J1Zik7CkBA IC04NDYsOCArODQ5LDExIEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0 IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCQkJCQkJCQkJbmRlbGV0YWJsZSAqIHNp emVvZihPZmZzZXROdW1iZXIpKTsKIAogCQkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9J RCwgWExPR19IQVNIX0RFTEVURSk7Ci0JCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Ziks IHJlY3B0cik7CiAJCQl9CisJCQllbHNlCisJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVs KTsKKworCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7CiAKIAkJCUVO RF9DUklUX1NFQ1RJT04oKTsKIAkJfQpAQCAtOTA2LDE0ICs5MTIsMTUgQEAgaGFzaGJ1Y2tldGNs ZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVmZmVyIGJ1Y2tldF9idWYs CiAJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJewot CQkJWExvZ1JlY1B0cglyZWNwdHI7Ci0KIAkJCVhMb2dCZWdpbkluc2VydCgpOwogCQkJWExvZ1Jl Z2lzdGVyQnVmZmVyKDAsIGJ1Y2tldF9idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJCXJlY3B0 ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NQTElUX0NMRUFOVVApOwotCQkJ UGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCQl9CisJCWVsc2UKKwkJCXJlY3B0ciA9IFhMb2dH ZXRGYWtlTFNOKHJlbCk7CisKKwkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJCUVORF9D UklUX1NFQ1RJT04oKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKaW5kZXgg MGNlZmJhY2M5Li4zMzk1YmJjMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMK QEAgLTUwLDYgKzUwLDcgQEAgX2hhc2hfZG9pbnNlcnQoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxl IGl0dXAsIFJlbGF0aW9uIGhlYXBSZWwsIGJvb2wgc29ydGVkKQogCXVpbnQzMgkJaGFzaGtleTsK IAlCdWNrZXQJCWJ1Y2tldDsKIAlPZmZzZXROdW1iZXIgaXR1cF9vZmY7CisJWExvZ1JlY1B0cgly ZWNwdHI7CiAKIAkvKgogCSAqIEdldCB0aGUgaGFzaCBrZXkgZm9yIHRoZSBpdGVtIChpdCdzIHN0 b3JlZCBpbiB0aGUgaW5kZXggdHVwbGUgaXRzZWxmKS4KQEAgLTIxNiw3ICsyMTcsNiBAQCByZXN0 YXJ0X2luc2VydDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9p bnNlcnQgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm9mZm51bSA9IGl0 dXBfb2ZmOwogCkBAIC0yMjksMTAgKzIyOSwxMiBAQCByZXN0YXJ0X2luc2VydDoKIAkJWExvZ1Jl Z2lzdGVyQnVmRGF0YSgwLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSk7CiAKIAkJcmVjcHRy ID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfSU5TRVJUKTsKLQotCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKG1ldGFidWYpLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtl TFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKKwlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9T RUNUSU9OKCk7CiAKQEAgLTM3Miw2ICszNzQsNyBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVs YXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAlQ YWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCUhhc2hQYWdlT3BhcXVlIHBhZ2VvcGFx dWU7CiAJSGFzaE1ldGFQYWdlIG1ldGFwOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2Nh biBlYWNoIHR1cGxlIGluIHBhZ2UgdG8gc2VlIGlmIGl0IGlzIG1hcmtlZCBhcyBMUF9ERUFEICov CiAJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKQEAgLTQyNCw3ICs0Mjcs NiBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBC dWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkK IAkJewogCQkJeGxfaGFzaF92YWN1dW1fb25lX3BhZ2UgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJl Y3B0cjsKIAogCQkJeGxyZWMuaXNDYXRhbG9nUmVsID0gUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxv Z2ljYWxEZWNvZGluZyhocmVsKTsKIAkJCXhscmVjLnNuYXBzaG90Q29uZmxpY3RIb3Jpem9uID0g c25hcHNob3RDb25mbGljdEhvcml6b247CkBAIC00NDUsMTAgKzQ0NywxMiBAQCBfaGFzaF92YWN1 dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1Ziwg QnVmZmVyIGJ1ZikKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigxLCBtZXRhYnVmLCBSRUdCVUZfU1RB TkRBUkQpOwogCiAJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9W QUNVVU1fT05FX1BBR0UpOwotCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVj cHRyKTsKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAkJ fQorCQllbHNlCisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBh Z2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAkJRU5EX0NSSVRfU0VDVElPTigpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzUuLmFiZDFmOTFmYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNob3ZmbC5jCkBAIC0xMzIsNiArMTMyLDcgQEAgX2hhc2hfYWRkb3ZmbHBh Z2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZiwgYm9vbCByZXRhaW5f cGluKQogCXVpbnQzMgkJaSwKIAkJCQlqOwogCWJvb2wJCXBhZ2VfZm91bmQgPSBmYWxzZTsKKwlY TG9nUmVjUHRyCXJlY3B0cjsKIAogCS8qCiAJICogV3JpdGUtbG9jayB0aGUgdGFpbCBwYWdlLiAg SGVyZSwgd2UgbmVlZCB0byBtYWludGFpbiBsb2NraW5nIG9yZGVyIHN1Y2gKQEAgLTM4MSw3ICsz ODIsNiBAQCBmb3VuZDoKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwo cmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9oYXNoX2FkZF9vdmZsX3BhZ2Ug eGxyZWM7CiAKIAkJeGxyZWMuYm1wYWdlX2ZvdW5kID0gcGFnZV9mb3VuZDsKQEAgLTQwOCwxOCAr NDA4LDIwIEBAIGZvdW5kOgogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDQsICZtZXRhcC0+aGFzaG1f Zmlyc3RmcmVlLCBzaXplb2YodWludDMyKSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9I QVNIX0lELCBYTE9HX0hBU0hfQUREX09WRkxfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJH ZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVm KSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChtYXBidWYpKQotCQkJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7Ci0KLQkJaWYgKEJ1ZmZlcklzVmFsaWQo bmV3bWFwYnVmKSkKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXdtYXBidWYpLCByZWNw dHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAl9 CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihC dWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQobWFwYnVmKSkKKwkJUGFnZVNl dExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7CisKKwlpZiAoQnVmZmVySXNWYWxp ZChuZXdtYXBidWYpKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobmV3bWFwYnVmKSwgcmVj cHRyKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAog CUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNTEwLDcgKzUxMiwxMSBAQCBfaGFzaF9mcmVlb3Zm bHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAlC dWNrZXQJCWJ1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJQnVmZmVyCQlwcmV2YnVm ID0gSW52YWxpZEJ1ZmZlcjsKIAlCdWZmZXIJCW5leHRidWYgPSBJbnZhbGlkQnVmZmVyOwotCWJv b2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlOworCWJvb2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlLAor CQkJCW1vZF93YnVmLAorCQkJCWlzX3ByaW1fYnVja2V0X3NhbWVfd3J0LAorCQkJCWlzX3ByZXZf YnVja2V0X3NhbWVfd3J0OworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogR2V0IGluZm9ybWF0 aW9uIGZyb20gdGhlIGRvb21lZCBwYWdlICovCiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgb3ZmbGJ1 ZiwgTEhfT1ZFUkZMT1dfUEFHRSk7CkBAIC02NDEsMTkgKzY0NywyMSBAQCBfaGFzaF9mcmVlb3Zm bHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJ TWFya0J1ZmZlckRpcnR5KG1ldGFidWYpOwogCX0KIAorCS8qIERldGVybWluZSB3aGljaCBwYWdl cyBXQUwgcmVjb3JkIG1vZGlmaWVzICovCisJbW9kX3didWYgPSBmYWxzZTsKKwlpc19wcmltX2J1 Y2tldF9zYW1lX3dydCA9ICh3YnVmID09IGJ1Y2tldGJ1Zik7CisJaXNfcHJldl9idWNrZXRfc2Ft ZV93cnQgPSAod2J1ZiA9PSBwcmV2YnVmKTsKKwogCS8qIFhMT0cgc3R1ZmYgKi8KIAlpZiAoUmVs YXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9zcXVlZXplX3BhZ2UgeGxyZWM7Ci0J CVhMb2dSZWNQdHIJcmVjcHRyOwotCQlpbnQJCQlpOwotCQlib29sCQltb2Rfd2J1ZiA9IGZhbHNl OwogCiAJCXhscmVjLnByZXZibGtubyA9IHByZXZibGtubzsKIAkJeGxyZWMubmV4dGJsa25vID0g bmV4dGJsa25vOwogCQl4bHJlYy5udHVwcyA9IG5pdHVwczsKLQkJeGxyZWMuaXNfcHJpbV9idWNr ZXRfc2FtZV93cnQgPSAod2J1ZiA9PSBidWNrZXRidWYpOwotCQl4bHJlYy5pc19wcmV2X2J1Y2tl dF9zYW1lX3dydCA9ICh3YnVmID09IHByZXZidWYpOworCQl4bHJlYy5pc19wcmltX2J1Y2tldF9z YW1lX3dydCA9IGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0OworCQl4bHJlYy5pc19wcmV2X2J1Y2tl dF9zYW1lX3dydCA9IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OwogCiAJCVhMb2dCZWdpbkluc2Vy dCgpOwogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGFzaFNxdWVlemVQYWdlKTsK QEAgLTY2MiwxNCArNjcwLDE0IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShSZWxhdGlvbiByZWwsIEJ1 ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQkgKiBidWNrZXQgYnVmZmVyIHdhcyBu b3QgY2hhbmdlZCwgYnV0IHN0aWxsIG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQgdG8KIAkJICogZW5z dXJlIHRoYXQgd2UgY2FuIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gaXQgZHVyaW5nIHJlcGxh eS4KIAkJICovCi0JCWlmICgheGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCisJCWlmICgh aXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCiAJCXsKIAkJCXVpbnQ4CQlmbGFncyA9IFJFR0JVRl9T VEFOREFSRCB8IFJFR0JVRl9OT19JTUFHRSB8IFJFR0JVRl9OT19DSEFOR0U7CiAKIAkJCVhMb2dS ZWdpc3RlckJ1ZmZlcigwLCBidWNrZXRidWYsIGZsYWdzKTsKIAkJfQogCi0JCWlmICh4bHJlYy5u dHVwcyA+IDApCisJCWlmIChuaXR1cHMgPiAwKQogCQl7CiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIo MSwgd2J1ZiwgUkVHQlVGX1NUQU5EQVJEKTsKIApAQCAtNjc4LDEwICs2ODYsMTAgQEAgX2hhc2hf ZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92Zmxi dWYsCiAKIAkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cF9vZmZzZXRzLAogCQkJCQkJCQlu aXR1cHMgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbml0dXBz OyBpKyspCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5pdHVwczsgaSsrKQogCQkJCVhMb2dSZWdp c3RlckJ1ZkRhdGEoMSwgaXR1cHNbaV0sIHR1cHNfc2l6ZVtpXSk7CiAJCX0KLQkJZWxzZSBpZiAo eGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQgfHwgeGxyZWMuaXNfcHJldl9idWNrZXRfc2Ft ZV93cnQpCisJCWVsc2UgaWYgKGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0IHx8IGlzX3ByZXZfYnVj a2V0X3NhbWVfd3J0KQogCQl7CiAJCQl1aW50OAkJd2J1Zl9mbGFnczsKIApAQCAtNjkxLDEwICs2 OTksMTAgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1 ZiwgQnVmZmVyIG92ZmxidWYsCiAJCQkgKiBpZiBpdCBpcyB0aGUgc2FtZSBhcyBwcmltYXJ5IGJ1 Y2tldCBidWZmZXIgb3IgdXBkYXRlIHRoZQogCQkJICogbmV4dGJsa25vIGlmIGl0IGlzIHNhbWUg YXMgdGhlIHByZXZpb3VzIGJ1Y2tldCBidWZmZXIuCiAJCQkgKi8KLQkJCUFzc2VydCh4bHJlYy5u dHVwcyA9PSAwKTsKKwkJCUFzc2VydChuaXR1cHMgPT0gMCk7CiAKIAkJCXdidWZfZmxhZ3MgPSBS RUdCVUZfU1RBTkRBUkQ7Ci0JCQlpZiAoIXhscmVjLmlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQor CQkJaWYgKCFpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKIAkJCXsKIAkJCQl3YnVmX2ZsYWdzIHw9 IFJFR0JVRl9OT19DSEFOR0U7CiAJCQl9CkBAIC03MTQsNyArNzIyLDcgQEAgX2hhc2hfZnJlZW92 ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJ CSAqIHByZXZwYWdlLiAgRHVyaW5nIHJlcGxheSwgd2UgY2FuIGRpcmVjdGx5IHVwZGF0ZSB0aGUg bmV4dGJsb2NrIGluCiAJCSAqIHdyaXRlcGFnZS4KIAkJICovCi0JCWlmIChCdWZmZXJJc1ZhbGlk KHByZXZidWYpICYmICF4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJaWYgKEJ1ZmZl cklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQogCQkJWExvZ1Jl Z2lzdGVyQnVmZmVyKDMsIHByZXZidWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJaWYgKEJ1ZmZl cklzVmFsaWQobmV4dGJ1ZikpCkBAIC03MzAsMjMgKzczOCwzMyBAQCBfaGFzaF9mcmVlb3ZmbHBh Z2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJfQog CiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NRVUVFWkVfUEFH RSk7Ci0KLQkJLyogU2V0IExTTiBpZmYgd2J1ZiBpcyBtb2RpZmllZC4gKi8KLQkJaWYgKG1vZF93 YnVmKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOwotCi0JCVBh Z2VTZXRMU04oQnVmZmVyR2V0UGFnZShvdmZsYnVmKSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVy SXNWYWxpZChwcmV2YnVmKSAmJiAheGxyZWMuaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCi0JCQlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7Ci0JCWlmIChCdWZmZXJJ c1ZhbGlkKG5leHRidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG5leHRidWYpLCBy ZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOwot Ci0JCWlmICh1cGRhdGVfbWV0YXApCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1 ZiksIHJlY3B0cik7CiAJfQorCWVsc2UJCQkJCQkvKiAhUmVsYXRpb25OZWVkc1dBTChyZWwpICov CisJeworCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCS8qIERldGVybWluZSBp ZiB3YnVmIGlzIG1vZGlmaWVkICovCisJCWlmIChuaXR1cHMgPiAwKQorCQkJbW9kX3didWYgPSB0 cnVlOworCQllbHNlIGlmIChpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJCW1vZF93YnVmID0g dHJ1ZTsKKwl9CisKKwkvKiBTZXQgTFNOIGlmZiB3YnVmIGlzIG1vZGlmaWVkLiAqLworCWlmICht b2Rfd2J1ZikKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOworCisJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZl cklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQorCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7CisJaWYgKEJ1ZmZlcklzVmFsaWQo bmV4dGJ1ZikpCisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXh0YnVmKSwgcmVjcHRyKTsK KworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOworCisJaWYgKHVw ZGF0ZV9tZXRhcCkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIp OwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC05NTksNiArOTc3LDggQEAgcmVhZHBhZ2U6 CiAKIAkJCQlpZiAobml0dXBzID4gMCkKIAkJCQl7CisJCQkJCVhMb2dSZWNQdHIJcmVjcHRyOwor CiAJCQkJCUFzc2VydChuaXR1cHMgPT0gbmRlbGV0YWJsZSk7CiAKIAkJCQkJLyoKQEAgLTk4Niw3 ICsxMDA2LDYgQEAgcmVhZHBhZ2U6CiAJCQkJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJCQkJaWYgKFJl bGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJCQkJewotCQkJCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJ CQkJCQl4bF9oYXNoX21vdmVfcGFnZV9jb250ZW50cyB4bHJlYzsKIAogCQkJCQkJeGxyZWMubnR1 cHMgPSBuaXR1cHM7CkBAIC0xMDE4LDEwICsxMDM3LDEyIEBAIHJlYWRwYWdlOgogCQkJCQkJCQkJ CQluZGVsZXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOwogCiAJCQkJCQlyZWNwdHIgPSBY TG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9NT1ZFX1BBR0VfQ09OVEVOVFMpOwotCi0J CQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7Ci0JCQkJCQlQYWdl U2V0TFNOKEJ1ZmZlckdldFBhZ2UocmJ1ZiksIHJlY3B0cik7CiAJCQkJCX0KKwkJCQkJZWxzZQor CQkJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJCQlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7CisJCQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShyYnVmKSwgcmVjcHRyKTsKIAogCQkJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZS4uMjYzYmM3M2YxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTYzMCw2ICs2MzAsNyBAQCBfaGFzaF9leHBhbmR0YWJs ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmKQogCXVpbnQzMgkJbG93bWFzazsKIAlib29s CQltZXRhcF91cGRhdGVfbWFza3MgPSBmYWxzZTsKIAlib29sCQltZXRhcF91cGRhdGVfc3BsaXRw b2ludCA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiByZXN0YXJ0X2V4cGFuZDoKIApA QCAtOTAwLDcgKzkwMSw2IEBAIHJlc3RhcnRfZXhwYW5kOgogCWlmIChSZWxhdGlvbk5lZWRzV0FM KHJlbCkpCiAJewogCQl4bF9oYXNoX3NwbGl0X2FsbG9jYXRlX3BhZ2UgeGxyZWM7Ci0JCVhMb2dS ZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm5ld19idWNrZXQgPSBtYXhidWNrZXQ7CiAJCXhscmVj Lm9sZF9idWNrZXRfZmxhZyA9IG9vcGFxdWUtPmhhc2hvX2ZsYWc7CkBAIC05MzMsMTEgKzkzMywx MyBAQCByZXN0YXJ0X2V4cGFuZDoKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZkhh c2hTcGxpdEFsbG9jUGFnZSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBY TE9HX0hBU0hfU1BMSVRfQUxMT0NBVEVfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVm X25ibGtubyksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwg cmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOworCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWZfbmJsa25vKSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAg LTEwOTIsNiArMTA5NCw3IEBAIF9oYXNoX3NwbGl0YnVja2V0KFJlbGF0aW9uIHJlbCwKIAlTaXpl CQlhbGxfdHVwc19zaXplID0gMDsKIAlpbnQJCQlpOwogCXVpbnQxNgkJbml0dXBzID0gMDsKKwlY TG9nUmVjUHRyCXJlY3B0cjsKIAogCWJ1Y2tldF9vYnVmID0gb2J1ZjsKIAlvcGFnZSA9IEJ1ZmZl ckdldFBhZ2Uob2J1Zik7CkBAIC0xMjk2LDcgKzEyOTksNiBAQCBfaGFzaF9zcGxpdGJ1Y2tldChS ZWxhdGlvbiByZWwsCiAKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKLQkJWExvZ1Jl Y1B0cglyZWNwdHI7CiAJCXhsX2hhc2hfc3BsaXRfY29tcGxldGUgeGxyZWM7CiAKIAkJeGxyZWMu b2xkX2J1Y2tldF9mbGFnID0gb29wYXF1ZS0+aGFzaG9fZmxhZzsKQEAgLTEzMTAsMTAgKzEzMTIs MTIgQEAgX2hhc2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQlYTG9nUmVnaXN0ZXJCdWZm ZXIoMSwgYnVja2V0X25idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJcmVjcHRyID0gWExvZ0lu c2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQ09NUExFVEUpOwotCi0JCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVm ZmVyR2V0UGFnZShidWNrZXRfbmJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0g WExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRf b2J1ZiksIHJlY3B0cik7CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Y2tldF9uYnVmKSwg cmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIAotLSAKMi41My4wCgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0001-Use-simple-hash-for-PrivateRefCount.patch" Content-Disposition: attachment; filename="v12-0001-Use-simple-hash-for-PrivateRefCount.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdsp0 RnJvbSA0OWM5MDAyYzViNDJhMGVjODBkOGYyNzIzOGZjMDkxZjU3ZDNiM2FkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMiBNYXIgMjAyNiAxMzo0NToxMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDAxLzIzXSBV c2Ugc2ltcGxlIGhhc2ggZm9yIFByaXZhdGVSZWZDb3VudAoKLS0tCiBzcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYyB8IDY4ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAx IGZpbGUgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgMzMgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCA1ZjNkMDgzZTkuLjgzZjRmYjYxZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJj YXRhbG9nL3BnX3RhYmxlc3BhY2VfZC5oIgogI2VuZGlmCiAjaW5jbHVkZSAiY2F0YWxvZy9zdG9y YWdlLmgiCisjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvc3Rv cmFnZV94bG9nLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUg ImxpYi9iaW5hcnloZWFwLmgiCkBAIC0xMjQsOSArMTI1LDIyIEBAIHR5cGVkZWYgc3RydWN0IFBy aXZhdGVSZWZDb3VudEVudHJ5CiAJICovCiAJQnVmZmVyCQlidWZmZXI7CiAKKwljaGFyCQlzdGF0 dXM7CisKIAlQcml2YXRlUmVmQ291bnREYXRhIGRhdGE7CiB9IFByaXZhdGVSZWZDb3VudEVudHJ5 OwogCisjZGVmaW5lIFNIX1BSRUZJWCByZWZjb3VudAorI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUg UHJpdmF0ZVJlZkNvdW50RW50cnkKKyNkZWZpbmUgU0hfS0VZX1RZUEUgQnVmZmVyCisjZGVmaW5l IFNIX0tFWSBidWZmZXIKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtleSkgbXVybXVyaGFzaDMy KCh1aW50MzIpIChrZXkpKQorI2RlZmluZSBTSF9FUVVBTCh0YiwgYSwgYikgKChhKSA9PSAoYikp CisjZGVmaW5lIFNIX1NDT1BFIHN0YXRpYyBpbmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2Rl ZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJsaWIvc2ltcGxlaGFzaC5oIgorCiAvKiA2NCBieXRl cywgYWJvdXQgdGhlIHNpemUgb2YgYSBjYWNoZSBsaW5lIG9uIGNvbW1vbiBzeXN0ZW1zICovCiAj ZGVmaW5lIFJFRkNPVU5UX0FSUkFZX0VOVFJJRVMgOAogCkBAIC0yNDgsNyArMjYyLDcgQEAgc3Rh dGljIEJ1ZmZlckRlc2MgKlBpbkNvdW50V2FpdEJ1ZiA9IE5VTEw7CiAgKi8KIHN0YXRpYyBCdWZm ZXIgUHJpdmF0ZVJlZkNvdW50QXJyYXlLZXlzW1JFRkNPVU5UX0FSUkFZX0VOVFJJRVNdOwogc3Rh dGljIHN0cnVjdCBQcml2YXRlUmVmQ291bnRFbnRyeSBQcml2YXRlUmVmQ291bnRBcnJheVtSRUZD T1VOVF9BUlJBWV9FTlRSSUVTXTsKLXN0YXRpYyBIVEFCICpQcml2YXRlUmVmQ291bnRIYXNoID0g TlVMTDsKK3N0YXRpYyByZWZjb3VudF9oYXNoICpQcml2YXRlUmVmQ291bnRIYXNoID0gTlVMTDsK IHN0YXRpYyBpbnQzMiBQcml2YXRlUmVmQ291bnRPdmVyZmxvd2VkID0gMDsKIHN0YXRpYyB1aW50 MzIgUHJpdmF0ZVJlZkNvdW50Q2xvY2sgPSAwOwogc3RhdGljIGludAlSZXNlcnZlZFJlZkNvdW50 U2xvdCA9IC0xOwpAQCAtMzQ3LDEwICszNjEsOSBAQCBSZXNlcnZlUHJpdmF0ZVJlZkNvdW50RW50 cnkodm9pZCkKIAkJQXNzZXJ0KFByaXZhdGVSZWZDb3VudEFycmF5S2V5c1t2aWN0aW1fc2xvdF0g PT0gUHJpdmF0ZVJlZkNvdW50QXJyYXlbdmljdGltX3Nsb3RdLmJ1ZmZlcik7CiAKIAkJLyogZW50 ZXIgdmljdGltIGFycmF5IGVudHJ5IGludG8gaGFzaHRhYmxlICovCi0JCWhhc2hlbnQgPSBoYXNo X3NlYXJjaChQcml2YXRlUmVmQ291bnRIYXNoLAotCQkJCQkJCSAgJlByaXZhdGVSZWZDb3VudEFy cmF5S2V5c1t2aWN0aW1fc2xvdF0sCi0JCQkJCQkJICBIQVNIX0VOVEVSLAotCQkJCQkJCSAgJmZv dW5kKTsKKwkJaGFzaGVudCA9IHJlZmNvdW50X2luc2VydChQcml2YXRlUmVmQ291bnRIYXNoLAor CQkJCQkJCQkgIFByaXZhdGVSZWZDb3VudEFycmF5S2V5c1t2aWN0aW1fc2xvdF0sCisJCQkJCQkJ CSAgJmZvdW5kKTsKIAkJQXNzZXJ0KCFmb3VuZCk7CiAJCS8qIG1vdmUgZGF0YSBmcm9tIHRoZSBl bnRyeSBpbiB0aGUgYXJyYXkgdG8gdGhlIGhhc2ggZW50cnkgKi8KIAkJaGFzaGVudC0+ZGF0YSA9 IHZpY3RpbV9lbnRyeS0+ZGF0YTsKQEAgLTQ0MCw3ICs0NTMsNyBAQCBHZXRQcml2YXRlUmVmQ291 bnRFbnRyeVNsb3coQnVmZmVyIGJ1ZmZlciwgYm9vbCBkb19tb3ZlKQogCWlmIChQcml2YXRlUmVm Q291bnRPdmVyZmxvd2VkID09IDApCiAJCXJldHVybiBOVUxMOwogCi0JcmVzID0gaGFzaF9zZWFy Y2goUHJpdmF0ZVJlZkNvdW50SGFzaCwgJmJ1ZmZlciwgSEFTSF9GSU5ELCBOVUxMKTsKKwlyZXMg PSByZWZjb3VudF9sb29rdXAoUHJpdmF0ZVJlZkNvdW50SGFzaCwgYnVmZmVyKTsKIAogCWlmIChy ZXMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CkBAIC00NTIsOCArNDY1LDE0IEBAIEdldFByaXZh dGVSZWZDb3VudEVudHJ5U2xvdyhCdWZmZXIgYnVmZmVyLCBib29sIGRvX21vdmUpCiAJZWxzZQog CXsKIAkJLyogbW92ZSBidWZmZXIgZnJvbSBoYXNodGFibGUgaW50byB0aGUgZnJlZSBhcnJheSBz bG90ICovCi0JCWJvb2wJCWZvdW5kOwogCQlQcml2YXRlUmVmQ291bnRFbnRyeSAqZnJlZTsKKwkJ UHJpdmF0ZVJlZkNvdW50RGF0YSBkYXRhOworCisJCS8qIFNhdmUgZGF0YSBhbmQgZGVsZXRlIGZy b20gaGFzaHRhYmxlIHdoaWxlIHJlcyBpcyBzdGlsbCB2YWxpZCAqLworCQlkYXRhID0gcmVzLT5k YXRhOworCQlyZWZjb3VudF9kZWxldGVfaXRlbShQcml2YXRlUmVmQ291bnRIYXNoLCByZXMpOwor CQlBc3NlcnQoUHJpdmF0ZVJlZkNvdW50T3ZlcmZsb3dlZCA+IDApOworCQlQcml2YXRlUmVmQ291 bnRPdmVyZmxvd2VkLS07CiAKIAkJLyogRW5zdXJlIHRoZXJlJ3MgYSBmcmVlIGFycmF5IHNsb3Qg Ki8KIAkJUmVzZXJ2ZVByaXZhdGVSZWZDb3VudEVudHJ5KCk7CkBAIC00NjYsMjAgKzQ4NSwxMyBA QCBHZXRQcml2YXRlUmVmQ291bnRFbnRyeVNsb3coQnVmZmVyIGJ1ZmZlciwgYm9vbCBkb19tb3Zl KQogCiAJCS8qIGFuZCBmaWxsIGl0ICovCiAJCWZyZWUtPmJ1ZmZlciA9IGJ1ZmZlcjsKLQkJZnJl ZS0+ZGF0YSA9IHJlcy0+ZGF0YTsKKwkJZnJlZS0+ZGF0YSA9IGRhdGE7CiAJCVByaXZhdGVSZWZD b3VudEFycmF5S2V5c1tSZXNlcnZlZFJlZkNvdW50U2xvdF0gPSBidWZmZXI7CiAJCS8qIHVwZGF0 ZSBjYWNoZSBmb3IgdGhlIG5leHQgbG9va3VwICovCiAJCVByaXZhdGVSZWZDb3VudEVudHJ5TGFz dCA9IG1hdGNoOwogCiAJCVJlc2VydmVkUmVmQ291bnRTbG90ID0gLTE7CiAKLQotCQkvKiBkZWxl dGUgZnJvbSBoYXNodGFibGUgKi8KLQkJaGFzaF9zZWFyY2goUHJpdmF0ZVJlZkNvdW50SGFzaCwg JmJ1ZmZlciwgSEFTSF9SRU1PVkUsICZmb3VuZCk7Ci0JCUFzc2VydChmb3VuZCk7Ci0JCUFzc2Vy dChQcml2YXRlUmVmQ291bnRPdmVyZmxvd2VkID4gMCk7Ci0JCVByaXZhdGVSZWZDb3VudE92ZXJm bG93ZWQtLTsKLQogCQlyZXR1cm4gZnJlZTsKIAl9CiB9CkBAIC01NzEsMTEgKzU4Myw3IEBAIEZv cmdldFByaXZhdGVSZWZDb3VudEVudHJ5KFByaXZhdGVSZWZDb3VudEVudHJ5ICpyZWYpCiAJfQog CWVsc2UKIAl7Ci0JCWJvb2wJCWZvdW5kOwotCQlCdWZmZXIJCWJ1ZmZlciA9IHJlZi0+YnVmZmVy OwotCi0JCWhhc2hfc2VhcmNoKFByaXZhdGVSZWZDb3VudEhhc2gsICZidWZmZXIsIEhBU0hfUkVN T1ZFLCAmZm91bmQpOwotCQlBc3NlcnQoZm91bmQpOworCQlyZWZjb3VudF9kZWxldGVfaXRlbShQ cml2YXRlUmVmQ291bnRIYXNoLCByZWYpOwogCQlBc3NlcnQoUHJpdmF0ZVJlZkNvdW50T3ZlcmZs b3dlZCA+IDApOwogCQlQcml2YXRlUmVmQ291bnRPdmVyZmxvd2VkLS07CiAJfQpAQCAtNDEyMSw4 ICs0MTI5LDYgQEAgQXRFT1hhY3RfQnVmZmVycyhib29sIGlzQ29tbWl0KQogdm9pZAogSW5pdEJ1 ZmZlck1hbmFnZXJBY2Nlc3Modm9pZCkKIHsKLQlIQVNIQ1RMCQloYXNoX2N0bDsKLQogCS8qCiAJ ICogQW4gYWR2aXNvcnkgbGltaXQgb24gdGhlIG51bWJlciBvZiBwaW5zIGVhY2ggYmFja2VuZCBz aG91bGQgaG9sZCwgYmFzZWQKIAkgKiBvbiBzaGFyZWRfYnVmZmVycyBhbmQgdGhlIG1heGltdW0g bnVtYmVyIG9mIGNvbm5lY3Rpb25zIHBvc3NpYmxlLgpAQCAtNDEzNSwxMSArNDE0MSw3IEBAIElu aXRCdWZmZXJNYW5hZ2VyQWNjZXNzKHZvaWQpCiAJbWVtc2V0KCZQcml2YXRlUmVmQ291bnRBcnJh eSwgMCwgc2l6ZW9mKFByaXZhdGVSZWZDb3VudEFycmF5KSk7CiAJbWVtc2V0KCZQcml2YXRlUmVm Q291bnRBcnJheUtleXMsIDAsIHNpemVvZihQcml2YXRlUmVmQ291bnRBcnJheUtleXMpKTsKIAot CWhhc2hfY3RsLmtleXNpemUgPSBzaXplb2YoQnVmZmVyKTsKLQloYXNoX2N0bC5lbnRyeXNpemUg PSBzaXplb2YoUHJpdmF0ZVJlZkNvdW50RW50cnkpOwotCi0JUHJpdmF0ZVJlZkNvdW50SGFzaCA9 IGhhc2hfY3JlYXRlKCJQcml2YXRlUmVmQ291bnQiLCAxMDAsICZoYXNoX2N0bCwKLQkJCQkJCQkJ CSAgSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyk7CisJUHJpdmF0ZVJlZkNvdW50SGFzaCA9IHJlZmNv dW50X2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwgMTAwLCBOVUxMKTsKIAogCS8qCiAJICog QXRQcm9jRXhpdF9CdWZmZXJzIG5lZWRzIExXTG9jayBhY2Nlc3MsIGFuZCB0aGVyZWJ5IGhhcyB0 byBiZSBjYWxsZWQgYXQKQEAgLTQxOTgsMTAgKzQyMDAsMTAgQEAgQ2hlY2tGb3JCdWZmZXJMZWFr cyh2b2lkKQogCS8qIGlmIG5lY2Vzc2FyeSBzZWFyY2ggdGhlIGhhc2ggKi8KIAlpZiAoUHJpdmF0 ZVJlZkNvdW50T3ZlcmZsb3dlZCkKIAl7Ci0JCUhBU0hfU0VRX1NUQVRVUyBoc3RhdDsKKwkJcmVm Y291bnRfaXRlcmF0b3IgaXRlcjsKIAotCQloYXNoX3NlcV9pbml0KCZoc3RhdCwgUHJpdmF0ZVJl ZkNvdW50SGFzaCk7Ci0JCXdoaWxlICgocmVzID0gKFByaXZhdGVSZWZDb3VudEVudHJ5ICopIGhh c2hfc2VxX3NlYXJjaCgmaHN0YXQpKSAhPSBOVUxMKQorCQlyZWZjb3VudF9zdGFydF9pdGVyYXRl KFByaXZhdGVSZWZDb3VudEhhc2gsICZpdGVyKTsKKwkJd2hpbGUgKChyZXMgPSByZWZjb3VudF9p dGVyYXRlKFByaXZhdGVSZWZDb3VudEhhc2gsICZpdGVyKSkgIT0gTlVMTCkKIAkJewogCQkJcyA9 IERlYnVnUHJpbnRCdWZmZXJSZWZjb3VudChyZXMtPmJ1ZmZlcik7CiAJCQllbG9nKFdBUk5JTkcs ICJidWZmZXIgcmVmY291bnQgbGVhazogJXMiLCBzKTsKQEAgLTQyNTQsMTAgKzQyNTYsMTAgQEAg QXNzZXJ0QnVmZmVyTG9ja3NQZXJtaXRDYXRhbG9nUmVhZCh2b2lkKQogCS8qIGlmIG5lY2Vzc2Fy eSBzZWFyY2ggdGhlIGhhc2ggKi8KIAlpZiAoUHJpdmF0ZVJlZkNvdW50T3ZlcmZsb3dlZCkKIAl7 Ci0JCUhBU0hfU0VRX1NUQVRVUyBoc3RhdDsKKwkJcmVmY291bnRfaXRlcmF0b3IgaXRlcjsKIAot CQloYXNoX3NlcV9pbml0KCZoc3RhdCwgUHJpdmF0ZVJlZkNvdW50SGFzaCk7Ci0JCXdoaWxlICgo cmVzID0gKFByaXZhdGVSZWZDb3VudEVudHJ5ICopIGhhc2hfc2VxX3NlYXJjaCgmaHN0YXQpKSAh PSBOVUxMKQorCQlyZWZjb3VudF9zdGFydF9pdGVyYXRlKFByaXZhdGVSZWZDb3VudEhhc2gsICZp dGVyKTsKKwkJd2hpbGUgKChyZXMgPSByZWZjb3VudF9pdGVyYXRlKFByaXZhdGVSZWZDb3VudEhh c2gsICZpdGVyKSkgIT0gTlVMTCkKIAkJewogCQkJQXNzZXJ0Tm90Q2F0YWxvZ0J1ZmZlckxvY2so cmVzLT5idWZmZXIsIHJlcy0+ZGF0YS5sb2NrbW9kZSk7CiAJCX0KLS0gCjIuNTMuMAoK --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0020-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Disposition: attachment; filename="v12-0020-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdt84 RnJvbSAzNTRmZDBmMDEzMGQ3YzkxNTgwNTM2M2FiNTZlYTNmMGI0M2NkNmY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDIw LzIzXSBXSVA6IGFpbzogaW9fdXJpbmc6IFVzZSBJTyBzaXplIG5vdCBJTyBxdWV1ZSB0bwogdHJp Z2dlciBhc3luYyBwcm9jZXNzaW5nCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA1NyArKysrKysrKysrKysrKy0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggNGUxMjQ0ZmExLi4wNDFiNzI2Mjkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCkBAIC00MDcsNyAr NDA3LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2Vk X2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0cnVjdCBpb191cmluZyAqdXJp bmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+aW9fdXJpbmdfcmluZzsKLQlp bnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZwZ2Fpb19teV9iYWNrZW5kLT5p bl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lvcyA8PSBQR0FJT19TVUJNSVRf QkFUQ0hfU0laRSk7CiAKQEAgLTQyMywyNyArNDIyLDYgQEAgcGdhaW9fdXJpbmdfc3VibWl0KHVp bnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCiAJCXBnYWlv X2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5nX3NxX2Zyb21faW8oaW9oLCBz cWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElPIGluIHByb2Nlc3MgY29udGV4 dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBnb29kLCBhcyBpdCByZWR1Y2Vz IGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQotCQkgKiBsb3Qgb2YgYnVmZmVy ZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZAotCQkg KiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVncm91bmQsIGFzIGl0IGNhbid0 IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMgaXMgcG9zc2libGUgd2hlbiB1 c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEgbG90IG9mIGJ1ZmZlcmVkIElP IHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkgKiB0aGFuIHdvcmtlciBtb2Rl LCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlpbmcuIGlvX3VyaW5nCi0JCSAq IGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIgdGhyZWFkcyBpbnN0ZWFkLgot CQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQgd2UgYWxyZWFkeSBoYXZlIElP cyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBiZWluZyBzdWJtaXR0ZWQsIHdl IHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRoZSBJTyBpbiB0aGUgYmFja2dy b3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcgSU9zCi0JCSAqIGJlaW5nIHN1 Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBjb250ZXh0IGhhcyBsb3dlcgot CQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9iZWZvcmUgPiA0ICYmIChpb2gt PmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJpbmdfc3FlX3NldF9mbGFncyhz cWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3JlKys7CiAJfQogCiAJd2hpbGUg KHRydWUpCkBAIC03MDcsNiArNjg1LDcgQEAgc3RhdGljIHZvaWQKIHBnYWlvX3VyaW5nX3NxX2Zy b21faW8oUGdBaW9IYW5kbGUgKmlvaCwgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogewogCXN0 cnVjdCBpb3ZlYyAqaW92OworCXNpemVfdAkJaW9fc2l6ZSA9IDA7CiAKIAlzd2l0Y2ggKChQZ0Fp b09wKSBpb2gtPm9wKQogCXsKQEAgLTcxOSw2ICs2OTgsOCBAQCBwZ2Fpb191cmluZ19zcV9mcm9t X2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJ ICAgaW92LT5pb3ZfYmFzZSwKIAkJCQkJCQkJICAgaW92LT5pb3ZfbGVuLAogCQkJCQkJCQkgICBp b2gtPm9wX2RhdGEucmVhZC5vZmZzZXQpOworCisJCQkJaW9fc2l6ZSA9IGlvdi0+aW92X2xlbjsK IAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcyOCw3ICs3MDksMzkgQEAgcGdhaW9fdXJpbmdfc3Ff ZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJ CQkJCQlpb2gtPm9wX2RhdGEucmVhZC5pb3ZfbGVuZ3RoLAogCQkJCQkJCQkJaW9oLT5vcF9kYXRh LnJlYWQub2Zmc2V0KTsKIAorCQkJCWZvciAoaW50IGkgPSAwOyBpIDw9IGlvaC0+b3BfZGF0YS5y ZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92KyspCisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVu OwogCQkJfQorCisKKwkJCS8qCisJCQkgKiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNz IGNvbnRleHQgaWYgcG9zc2libGUuIFRoYXQncworCQkJICogZ2VuZXJhbGx5IGdvb2QsIGFzIGl0 IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcuIFdoZW4KKwkJCSAqIHBlcmZvcm1pbmcgYSBsb3Qg b2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbgorCQkJICogcGFn ZSBjYWNoZSBhbmQgdXNlcnNwYWNlIG1lbW9yeSBoYXBwZW5zIGluIHRoZSBmb3JlZ3JvdW5kLCBh cworCQkJICogaXQgY2FuJ3QgYmUgb2ZmbG9hZGVkIHRvIERNQSBoYXJkd2FyZSBhcyBpcyBwb3Nz aWJsZSB3aGVuIHVzaW5nCisJCQkgKiBkaXJlY3QgSU8uIFdoZW4gZXhlY3V0aW5nIGEgbG90IG9m IGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzCisJCQkgKiBpb191cmluZyB0byBiZSBzbG93ZXIgdGhh biB3b3JrZXIgbW9kZSwgYXMgd29ya2VyIG1vZGUKKwkJCSAqIHBhcmFsbGVsaXplcyB0aGUgY29w eWluZy4gaW9fdXJpbmcgY2FuIGJlIHRvbGQgdG8gb2ZmbG9hZCB3b3JrCisJCQkgKiB0byB3b3Jr ZXIgdGhyZWFkcyBpbnN0ZWFkLgorCQkJICoKKwkJCSAqIElmIHRoZSBJT3MgYXJlIHNtYWxsLCB0 aGVyZSBpcyBubyBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MKKwkJCSAqIGludG8gdGhlIGJh Y2tncm91bmQsIHRoZSBvdmVyaGVhZCBmcm9tIGNvbnRleHQgc3dpdGNoaW5nIGlzCisJCQkgKiBo aWdoZXIgdGhhbiB0aGUgZ2Fpbi4gIFRoZXJlZm9yZSB3ZSB1c2UgdGhlIHNpemUgb2YgdGhlIHJl YWQgYXMKKwkJCSAqIGEgaGV1cmlzdGljLgorCQkJICoKKwkJCSAqIFhYWDogV2UgdXNlZCB0byBu b3QgZG8gdGhpcyBmb3IgdGhlIGZpcnN0IGZldyBJT3MgaW4gZmxpZ2h0LAorCQkJICogYnV0IG5v dyB3ZSBoYXZlIGEgaGV1cmlzdGljIHByZXZlbnRpbmcgZGVlcGVyIElPIHF1ZXVlcyBpZiBJT3MK KwkJCSAqIGZpbmlzaCBpbiB0aW1lLCB3aGljaCB3aWxsIG9mdGVuIHByZXZlbnQgdXMgZnJvbSBl dmVyIHJlYWNoaW5nCisJCQkgKiB0aGF0IGRlZXAgcXVldWVzLiAgTWF5YmUgdGhlcmUncyBhIGJl dHRlciB3YXk/CisJCQkgKgorCQkJICogWFhYOiBOZWVkIHRvIGV2YWx1YXRlIHRoZSBudW1iZXIg b2YgYmxvY2tzIHdoZW4gSU9TUUVfQVNZTkMKKwkJCSAqIHN0YXJ0cyB0byBtYWtlIHNlbnNlLgor CQkJICovCisJCQlpZiAoaW9fc2l6ZSA+PSAoQkxDS1NaICogNCkgJiYKKwkJCQkoaW9oLT5mbGFn cyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJCQlpb191cmluZ19zcWVfc2V0X2ZsYWdzKHNxZSwg SU9TUUVfQVNZTkMpOworCiAJCQlicmVhazsKIAogCQljYXNlIFBHQUlPX09QX1dSSVRFVjoKLS0g CjIuNTMuMAoK --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0023-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v12-0023-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdsx1 RnJvbSBkYzZkMzA3MjNjZWZiZTA2NWUxNDgxMmNiNjM2OGI1ODQyOGFjMjRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiAyMy8yM10g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBp bmRleGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9m IGFsbCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2Uu ICBUaGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0 aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5z LgoKTm90ZSB0aGF0IGhhc2ggaW5kZXggc2NhbnMgd2lsbCBub3cgZHJvcCBpbmRleCBwYWdlIGJ1 ZmZlciBwaW5zIGVhZ2VybHkKKGFjdHVhbGx5LCB0aGUgdGFibGUgQU0gd2lsbCBkbyBzbyBvbiBi ZWhhbGYgb2YgdGhlIGhhc2ggaW5kZXggQU0pLgpUaGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBm b3IgYW55IGluZGV4IEFNIHRoYXQgYWRvcHRzIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2Uu ICBHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNoZXMgd29uJ3QgaG9sZCBidWZmZXIKcGlucyBv biBpbmRleCBwYWdlcyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJp bmcgaW5kZXgKcHJlZmV0Y2hpbmcsIHdoZXJlIHRoZSByZWFkIHN0cmVhbSBpcyBleHBlY3RlZCB0 byBob2xkIG1hbnkgcGlucyBvbiBoZWFwCnBhZ2VzICh0aGF0J3Mgd2h5IGFtZ2V0YmF0Y2ggbWFr ZXMgdGhpcyBhIGhhcmQgcmVxdWlyZW1lbnQpLgoKQWxzbyBhZGQgVmFsZ3JpbmQgYnVmZmVyIGxv Y2sgaW5zdHJ1bWVudGF0aW9uIHRvIGhhc2gsIGJyaW5naW5nIGl0IGluCmxpbmUgd2l0aCBuYnRy ZWUgZm9sbG93aW5nIGNvbW1pdCA0YTcwZjgyOS4gIFRoaXMgaXMgYW5vdGhlciByZXF1aXJlbWVu dAp3aGVuIHVzaW5nIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4KCkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25k cmEubWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xem1ZcWhhY0JIMTYx cGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2hhc2guaCAgICAgICAgICAgIHwgIDg0ICsrLS0tLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSAgICAgICB8ICAzMSArLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2guYyAgICAgICB8IDE3OCArKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaF94bG9nLmMgIHwgICA0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNocGFnZS5jICAgfCAgMjYgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNo LmMgfCAzMzYgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNodXRpbC5jICAgfCAxMTcgKy0tLS0tLS0tLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QgICAgIHwgICAyIC0KIDggZmlsZXMgY2hhbmdlZCwgMzAxIGluc2VydGlvbnMo KyksIDQ3NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFz aC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaAppbmRleCBhODcwMmYwZTUuLjVlYTZlYmQ5 ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGFzaC5oCkBAIC0xMDAsNTcgKzEwMCwyNSBAQCB0eXBlZGVmIEhhc2hQYWdlT3Bh cXVlRGF0YSAqSGFzaFBhZ2VPcGFxdWU7CiAgKi8KICNkZWZpbmUgSEFTSE9fUEFHRV9JRAkJMHhG RjgwCiAKLXR5cGVkZWYgc3RydWN0IEhhc2hTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVy IGFib3V0IGVhY2ggbWF0Y2ggKi8KKy8qCisgKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRo ZSBoYXNoIGluZGV4IEFNLgorICoKKyAqIFN0b3JlZCBhdCBhIG5lZ2F0aXZlIG9mZnNldCBmcm9t IHRoZSBJbmRleFNjYW5CYXRjaCBwb2ludGVyLCBpbiB0aGUKKyAqIGluZGV4IEFNIG9wYXF1ZSBh cmVhIG9mIGVhY2ggYmF0Y2ggYWxsb2NhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSGFzaEJh dGNoRGF0YQogewotCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNl ZCBoZWFwIGl0ZW0gKi8KLQlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0n cyBsb2NhdGlvbiB3aXRoaW4gcGFnZSAqLwotfSBIYXNoU2NhblBvc0l0ZW07CisJQmxvY2tOdW1i ZXIgY3VyclBhZ2U7CQkvKiBpbmRleCBwYWdlIHdpdGggbWF0Y2hpbmcgaXRlbXMgKi8KKwlCbG9j a051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCisJQmxvY2tOdW1i ZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KK30gSGFzaEJhdGNoRGF0 YTsKIAotdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NEYXRhCisvKiBBY2Nlc3MgdGhlIGhhc2gt cHJpdmF0ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8K K3N0YXRpYyBpbmxpbmUgSGFzaEJhdGNoRGF0YSAqCitoYXNoX2JhdGNoX2RhdGEoSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpCiB7Ci0JQnVmZmVyCQlidWY7CQkJLyogaWYgdmFsaWQsIHRoZSBidWZmZXIg aXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBjdXJyZW50IGhhc2ggaW5k ZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbmV4dCBvdmVyZmxvdyBwYWdl ICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2IG92ZXJmbG93IG9yIGJ1Y2tldCBw YWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBp bmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5u aW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFj ay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2Fy ZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFz dC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5n IHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlm aXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFz dEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5k ZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUhhc2hTY2FuUG9zSXRlbSBp dGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNUIEJFIExBU1QgKi8KLX0gSGFzaFNj YW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBc Ci0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwg XAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQo KHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNWYWxpZChzY2FucG9z KSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQ YWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tO dW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotCi0jZGVmaW5lIEhhc2hTY2Fu UG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZh bGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsg XAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5w b3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5maXJzdEl0 ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLml0ZW1J bmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQorCXJldHVybiAoSGFzaEJhdGNoRGF0YSAqKSAoKGNo YXIgKikgYmF0Y2ggLSBNQVhBTElHTihzaXplb2YoSGFzaEJhdGNoRGF0YSkpKTsKK30KIAogLyoK ICAqCUhhc2hTY2FuT3BhcXVlRGF0YSBpcyBwcml2YXRlIHN0YXRlIGZvciBhIGhhc2ggaW5kZXgg c2Nhbi4KQEAgLTE3OCwxNSArMTQ2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVE YXRhCiAJICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUu CiAJICovCiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBp dGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJ CSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVt cyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0 ZW1zICovCi0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBw YWdlIGFuZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2Nh blBvc0RhdGEgY3VyclBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2Fu T3BhcXVlRGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVl OwpAQCAtMzY4LDExICszMjcsMTQgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiBy ZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVj ayBjaGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3Ry dWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRj aCBoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBJbmRleFNjYW5C YXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4g aW50NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsK IGV4dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtl eXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBv cmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNoa2lsbGl0ZW1zYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBo YXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJl c3VsdCAqaGFzaGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCQkg SW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKQEAgLTQ0NSw4ICs0MDcsOSBAQCBleHRlcm4g dm9pZCBfaGFzaF9maW5pc2hfc3BsaXQoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVm ZmVyIG9idWYsCiAJCQkJCQkJICAgdWludDMyIGxvd21hc2spOwogCiAvKiBoYXNoc2VhcmNoLmMg Ki8KLWV4dGVybiBib29sIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9uZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCSBJbmRleFNjYW5CYXRj aCBwcmlvcmJhdGNoKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9maXJzdChJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIAogLyogaGFzaHNvcnQuYyAqLwogdHlw ZWRlZiBzdHJ1Y3QgSFNwb29sIEhTcG9vbDsJLyogb3BhcXVlIHN0cnVjdCBpbiBoYXNoc29ydC5j ICovCkBAIC00NzYsNyArNDM5LDYgQEAgZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNoX2dldF9vbGRi bG9ja19mcm9tX25ld2J1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBuZXdfYnUKIGV4dGVybiBC bG9ja051bWJlciBfaGFzaF9nZXRfbmV3YmxvY2tfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVs LCBCdWNrZXQgb2xkX2J1Y2tldCk7CiBleHRlcm4gQnVja2V0IF9oYXNoX2dldF9uZXdidWNrZXRf ZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAkJCQkJCQkJ CQkJCSB1aW50MzIgbG93bWFzaywgdWludDMyIG1heGJ1Y2tldCk7Ci1leHRlcm4gdm9pZCBfaGFz aF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIC8qIGhhc2guYyAqLwogZXh0ZXJu IHZvaWQgaGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL1JFQURNRQppbmRleCBmYzkwMzExMTcuLjk3MmJiNjY2YiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL1JFQURNRQpAQCAtMjU1LDI4ICsyNTUsMjkgQEAgVGhlIHJlYWRlciBhbGdvcml0aG0g aXM6CiAJCXJldGFrZSB0aGUgYnVmZmVyIGNvbnRlbnQgbG9jayBvbiBuZXcgYnVja2V0CiAJCWFy cmFuZ2UgdG8gc2NhbiB0aGUgb2xkIGJ1Y2tldCBub3JtYWxseSBhbmQgdGhlIG5ldyBidWNrZXQg Zm9yCiAgICAgICAgICB0dXBsZXMgd2hpY2ggYXJlIG5vdCBtb3ZlZC1ieS1zcGxpdAotLS0gdGhl biwgcGVyIHJlYWQgcmVxdWVzdDoKKy0tIHRoZW4sIHBlciBiYXRjaCAocGFnZSkgcmVxdWVzdDoK IAlyZWFjcXVpcmUgY29udGVudCBsb2NrIG9uIGN1cnJlbnQgcGFnZQogCXN0ZXAgdG8gbmV4dCBw YWdlIGlmIG5lY2Vzc2FyeSAobm8gY2hhaW5pbmcgb2YgY29udGVudCBsb2NrcywgYnV0IGtlZXAK IAl0aGUgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCB0aHJvdWdob3V0IHRoZSBzY2FuKQotCXNh dmUgYWxsIHRoZSBtYXRjaGluZyB0dXBsZXMgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBh biBpdGVtcyBhcnJheQotCXJlbGVhc2UgcGluIGFuZCBjb250ZW50IGxvY2sgKGJ1dCBpZiBpdCBp cyBwcmltYXJ5IGJ1Y2tldCBwYWdlIHJldGFpbgotCWl0cyBwaW4gdGlsbCB0aGUgZW5kIG9mIHRo ZSBzY2FuKQotCWdldCB0dXBsZSBmcm9tIGFuIGl0ZW0gYXJyYXkKKwlzYXZlIGFsbCB0aGUgbWF0 Y2hpbmcgdHVwbGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYSBiYXRjaAorCXJlbGVh c2UgY29udGVudCBsb2NrIG9uIGN1cnJlbnQgcGFnZSByZXR1cm4gYmF0Y2ggdG8gdGFibGUgQU0g KHRhYmxlIEFNCisJd2lsbCBkcm9wIGJhdGNoJ3MgYnVmZmVyIHBpbiwgdGhvdWdoIHByaW1hcnkg YnVja2V0IHBhZ2UgcGluIGlzIGtlcHQKKwl1bnRpbCB0aGUgZW5kIG9mIHRoZSBzY2FuKQogLS0g YXQgc2NhbiBzaHV0ZG93bjoKLQlyZWxlYXNlIGFsbCBwaW5zIHN0aWxsIGhlbGQKKwlyZWxlYXNl IHNjYW4tb3duZWQgcGlucyAoZS5nLiwgcHJpbWFyeSBidWNrZXQgcGFnZSBwaW4pIGFzIG5lZWRl ZAogCiBIb2xkaW5nIHRoZSBidWZmZXIgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGZv ciB0aGUgd2hvbGUgc2NhbiBwcmV2ZW50cwotdGhlIHJlYWRlcidzIGN1cnJlbnQtdHVwbGUgcG9p bnRlciBmcm9tIGJlaW5nIGludmFsaWRhdGVkIGJ5IHNwbGl0cyBvcgotY29tcGFjdGlvbnMuICAo T2YgY291cnNlLCBvdGhlciBidWNrZXRzIGNhbiBzdGlsbCBiZSBzcGxpdCBvciBjb21wYWN0ZWQu KQordGhlIGJ1Y2tldCBmcm9tIGJlaW5nIHJlb3JnYW5pemVkIGJ5IHNwbGl0cyBvciBjb21wYWN0 aW9ucyB3aGlsZSB0aGUgc2NhbiBpcworaW4gcHJvZ3Jlc3MuICAoT2YgY291cnNlLCBvdGhlciBi dWNrZXRzIGNhbiBzdGlsbCBiZSBzcGxpdCBvciBjb21wYWN0ZWQuKQogCi1UbyBtaW5pbWl6ZSBs b2NrL3VubG9jayB0cmFmZmljLCBoYXNoIGluZGV4IHNjYW4gYWx3YXlzIHNlYXJjaGVzIHRoZSBl bnRpcmUKLWhhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9u Y2UsIGNvcHlpbmcgdGhlaXIgaGVhcCB0dXBsZQotSURzIGludG8gYmFja2VuZC1sb2NhbCBzdG9y YWdlLiBUaGUgaGVhcCB0dXBsZSBJRHMgYXJlIHRoZW4gcHJvY2Vzc2VkIHdoaWxlIG5vdAotaG9s ZGluZyBhbnkgcGFnZSBsb2NrIHdpdGhpbiB0aGUgaW5kZXggdGhlcmVieSwgYWxsb3dpbmcgY29u Y3VycmVudCBpbnNlcnRpb24KLXRvIGhhcHBlbiBvbiB0aGUgc2FtZSBpbmRleCBwYWdlIHdpdGhv dXQgYW55IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlCi1jdXJyZW50IHNjYW4gcG9zaXRp b24gZm9yIHRoZSByZWFkZXIuIFdlIGRvIGNvbnRpbnVlIHRvIGhvbGQgYSBwaW4gb24gdGhlCi1i dWNrZXQgcGFnZSwgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgZGVsZXRpb25zIGFuZCBi dWNrZXQgc3BsaXQuCitUbyBtaW5pbWl6ZSBsb2NrL3VubG9jayB0cmFmZmljLCBoYXNoIGluZGV4 IHNjYW5zIGFsd2F5cyBzZWFyY2ggdGhlIGVudGlyZQoraGFzaCBwYWdlIHRvIGlkZW50aWZ5IGFs bCB0aGUgbWF0Y2hpbmcgaXRlbXMgYXQgb25jZSwgcmV0dXJuaW5nIHRoZW0gaW4KK2JhdGNoZXMg dG8gdGhlIHRhYmxlIEFNLiAgVGhlIHRhYmxlIEFNIHByb2Nlc3NlcyBiYXRjaGVzIHdoaWxlIG5v IHBhZ2UgbG9jaworaXMgaGVsZCB3aXRoaW4gdGhlIGluZGV4LCBhbGxvd2luZyBjb25jdXJyZW50 IGluc2VydGlvbiB0byBoYXBwZW4gb24gdGhlCitzYW1lIGluZGV4IHBhZ2Ugd2l0aG91dCBhbnkg cmVxdWlyZW1lbnQgb2YgcmUtZmluZGluZyB0aGUgY3VycmVudCBzY2FuCitwb3NpdGlvbiBmb3Ig dGhlIHJlYWRlci4gIFRoZSB0YWJsZSBBTSBjb250cm9scyB3aGVuIGJhdGNoIGJ1ZmZlciBwaW5z IGFyZQorZHJvcHBlZC4gIFdlIGRvIGNvbnRpbnVlIHRvIGhvbGQgYSBwaW4gb24gdGhlIHByaW1h cnkgYnVja2V0IHBhZ2UsIHRvCitwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBidWNrZXQgc3Bs aXRzLgogCiBUbyBhbGxvdyBmb3Igc2NhbnMgZHVyaW5nIGEgYnVja2V0IHNwbGl0LCBpZiBhdCB0 aGUgc3RhcnQgb2YgdGhlIHNjYW4sIHRoZQogYnVja2V0IGlzIG1hcmtlZCBhcyBidWNrZXQtYmVp bmctcG9wdWxhdGVkLCBpdCBzY2FuIGFsbCB0aGUgdHVwbGVzIGluIHRoYXQKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2guYwppbmRleCA5MjgyNGFhNWQuLjEwNTI0YTIyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2gu YwpAQCAtMTAxLDkgKzEwMSw5IEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5h bWFkanVzdG1lbWJlcnMgPSBoYXNoYWRqdXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gaGFz aGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFzaHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBo YXNoZ2V0dHVwbGUsCi0JCS5hbWdldGJhdGNoID0gTlVMTCwKLQkJLmFta2lsbGl0ZW1zYmF0Y2gg PSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gaGFzaGdldGJh dGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwKIAkJLmFtZ2V0 Yml0bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuLAogCQku YW1wb3NyZXNldCA9IE5VTEwsCkBAIC0yODYsNTMgKzI4NiwyOCBAQCBoYXNoaW5zZXJ0KFJlbGF0 aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0gKgloYXNoZ2V0 dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKgloYXNoZ2V0YmF0 Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2Fu CiAgKi8KLWJvb2wKLWhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQorSW5kZXhTY2FuQmF0Y2gKK2hhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUhhc2hT Y2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVz OwogCiAJLyogSGFzaCBpbmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25s eSB0aGUgaGFzaCBjb2RlICovCiAJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAKLQkvKgotCSAq IElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZh bmNlIGl0IGluIHRoZQotCSAqIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3Qg ZG9uZSBzbyB5ZXQsIHdlIGNhbGwgYSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBmaXJzdCBpdGVt IGluIHRoZSBzY2FuLgotCSAqLwotCWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSkKLQkJcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYgKHByaW9yYmF0 Y2ggPT0gTlVMTCkKIAl7Ci0JCS8qCi0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2ls bCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNjYW4tPmtpbGxf cHJpb3JfdHVwbGUpCi0JCXsKLQkJCS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVyIGl0IGZvciBs YXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0IG9uY2Ugcmln aHQgYWZ0ZXIgbGVhdmluZyB0aGUgaW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nhbi4pCi0JCQkg KiBJbiBjYXNlIGlmIGNhbGxlciByZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVjdGlvbiBpdCBp cyBxdWl0ZQotCQkJICogcG9zc2libGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRl cmVkIG11bHRpcGxlIHRpbWVzLgotCQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3QgdGhhdDsgaW5z dGVhZCwgd2UganVzdCBmb3JnZXQgYW55IGV4Y2VzcwotCQkJICogZW50cmllcy4KLQkJCSAqLwot CQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBh bGxvY19hcnJheShpbnQsIE1heEluZGV4VHVwbGVzUGVyUGFnZSk7CisJCVJlbGF0aW9uCXJlbCA9 IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4SW5kZXhU dXBsZXNQZXJQYWdlKQotCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28t PmN1cnJQb3MuaXRlbUluZGV4OwotCQl9CisJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwog Ci0JCS8qCi0JCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJlcyA9IF9oYXNo X25leHQoc2NhbiwgZGlyKTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5kIHJldHVybiBm aXJzdCBiYXRjaCBvZiBtYXRjaGluZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hfZmlyc3Qoc2Nh biwgZGlyKTsKIAl9CiAKLQlyZXR1cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBwb3NpdGlvbmVk IGFmdGVyIGNhbGxlcidzIGJhdGNoIChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJcmV0dXJuIF9o YXNoX25leHQoc2NhbiwgZGlyLCBwcmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNDIsMjYgKzMxNywy NiBAQCBoYXNoZ2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikK IGludDY0CiBoYXNoZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0p CiB7Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK LQlib29sCQlyZXM7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50aWRzID0gMDsK LQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCi0JcmVzID0gX2hhc2hfZmlyc3Qoc2Nhbiwg Rm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCWJhdGNoID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24pOwogCi0Jd2hpbGUgKHJlcykKKwl3aGlsZSAoYmF0Y2ggIT0gTlVMTCkK IAl7Ci0JCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRl eF07CisJCWZvciAoaW50IGl0ZW1JbmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJCQkgaXRlbUlu ZGV4IDw9IGJhdGNoLT5sYXN0SXRlbTsKKwkJCSBpdGVtSW5kZXgrKykKKwkJeworCQkJdGJtX2Fk ZF90dXBsZXModGJtLCAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQsIDEsIHRydWUp OworCQkJbnRpZHMrKzsKKwkJfQogCiAJCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFuZCBfaGFzaF9u ZXh0IGhhbmRsZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdoZW5ldmVyIHNj YW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRoZXJlJ3MKLQkJ ICogbm90aGluZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8gdGhlIFRJREJp dG1hcC4KKwkJICogX2hhc2hfbmV4dCByZWxlYXNlcyB0aGUgcHJpb3IgYmF0Y2ggZm9yIGJpdG1h cCBjYWxsZXJzIGJlZm9yZQorCQkgKiBhbGxvY2F0aW5nIHRoZSBuZXh0IG9uZSwgc28gb25seSBv bmUgYmF0Y2ggaXMgZXZlciB1c2VkIGF0IGEgdGltZQogCQkgKi8KLQkJdGJtX2FkZF90dXBsZXMo dGJtLCAmKGN1cnJJdGVtLT5oZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7Ci0KLQkJcmVz ID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJhdGNoID0gX2hh c2hfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0KIAogCXJldHVy biBudGlkczsKQEAgLTM4MywxNyArMzU4LDE2IEBAIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVs LCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0SW5kZXhTY2Fu KHJlbCwgbmtleXMsIG5vcmRlcmJ5cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgcGFsbG9j X29iamVjdChIYXNoU2Nhbk9wYXF1ZURhdGEpOwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+ Y3VyclBvcyk7CiAJc28tPmhhc2hzb19idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlzby0+ aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJc28tPmhhc2hzb19i dWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIAot CXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KIAlzY2FuLT5v cGFxdWUgPSBzbzsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdl OworCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6ZW9mKEhhc2hC YXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsKIAogCXJldHVy biBzY2FuOwogfQpAQCAtNDA4LDE4ICszODIsOCBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2FuT3BhcXVlIHNv ID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQot CXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxl ZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1z KHNjYW4pOwotCX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JLyogc2V0IHBv c2l0aW9uIGludmFsaWQgKHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxsKSAqLwotCUhh c2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUgc2NhbiBrZXks IGlmIGEgbmV3IG9uZSBpcyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9m S2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJP ZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKQEAgLTQyOCw2ICszOTIsODEgQEAgaGFzaHJl c2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywK IAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwogfQogCisvKgorICoJaGFzaGtpbGxpdGVt c2JhdGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVBRAorICovCit2 b2lkCitoYXNoa2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOworCUhhc2hC YXRjaERhdGEgKmhiYXRjaCA9IGhhc2hfYmF0Y2hfZGF0YShiYXRjaCk7CisJQnVmZmVyCQlidWY7 CisJUGFnZQkJcGFnZTsKKwlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CisJT2Zmc2V0TnVtYmVyIG9m Zm51bSwKKwkJCQltYXhvZmY7CisJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CisJWExv Z1JlY1B0cglsYXRlc3Rsc247CisKKwlBc3NlcnQoYmF0Y2gtPm51bURlYWQgPiAwKTsKKworCWJ1 ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGhiYXRjaC0+Y3VyclBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJ ICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKKworCWxhdGVzdGxzbiA9IEJ1 ZmZlckdldExTTkF0b21pYyhidWYpOworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7 CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQorCXsKKwkJLyogTW9kaWZpZWQsIGdpdmUg dXAgb24gaGludGluZyAqLworCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOworCQlyZXR1cm47CisJ fQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwlvcGFxdWUgPSBIYXNoUGFnZUdldE9w YXF1ZShwYWdlKTsKKwltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJ LyogSXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5kZWFkSXRlbXNbXSBpbiBpbmRleCBwYWdlIG9yZGVy ICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtRGVhZDsgaSsrKQorCXsKKwkJaW50 CQkJaXRlbUluZGV4ID0gYmF0Y2gtPmRlYWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0g KmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOworCisJCW9mZm51bSA9IGN1cnJJ dGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQoaXRlbUluZGV4ID49IGJhdGNoLT5maXJzdEl0 ZW0gJiYKKwkJCSAgIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJCXdoaWxlIChv ZmZudW0gPD0gbWF4b2ZmKQorCQl7CisJCQlJdGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFn ZSwgb2ZmbnVtKTsKKwkJCUluZGV4VHVwbGUJaXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJ dGVtKHBhZ2UsIGlpZCk7CisKKwkJCWlmIChJdGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3Rp ZCwgJmN1cnJJdGVtLT50YWJsZVRpZCkpCisJCQl7CisJCQkJLyogZm91bmQgdGhlIGl0ZW0gKi8K KwkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOworCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7CisJ CQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCisJCQl9CisJCQlvZmZu dW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNpbmNl IHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4g V2hlbmV2ZXIKKwkgKiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBw YWdlJ3MKKwkgKiBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtld2lz ZSBqdXN0IGEgaGludC4KKwkgKi8KKwlpZiAoa2lsbGVkc29tZXRoaW5nKQorCXsKKwkJb3BhcXVl LT5oYXNob19mbGFnIHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOworCQlNYXJrQnVmZmVyRGly dHlIaW50KGJ1ZiwgdHJ1ZSk7CisJfQorCisJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKK30KKwog LyoKICAqCWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDM3LDE3 ICs0NzYsOCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJSGFzaFNjYW5PcGFx dWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBz Y2FuLT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkg a2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9oYXNoX2tpbGxf aXRlbXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQlpZiAo c28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7CiAJcGZy ZWUoc28pOwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hf eGxvZy5jCmluZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoX3hsb2cuYwpAQCAtMTE0MSwxNCArMTE0MSwxNCBAQCBoYXNoX21hc2soY2hhciAqcGFnZWRh dGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1Y2tldCBhbmQgb3Zl cmZsb3cgcGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJICogTFBfRkxBR1Mg d2l0aG91dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhlIGxpbmUKLQkJ ICogcG9pbnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9raWxsX2l0ZW1zKCkg Zm9yIGRldGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoa2lsbGl0ZW1zYmF0Y2go KSBmb3IgZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoK IAkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9QQUdFX0hBU19ERUFEX1RV UExFUyBtYXkgcmVtYWluCi0JICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBTZWUgX2hhc2hfa2ls bF9pdGVtcygpIGZvciBkZXRhaWxzLgorCSAqIHVubG9nZ2VkLiBTbywgbWFzayBpdC4gU2VlIGhh c2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCSAqLwogCW9wYXF1ZS0+aGFzaG9fZmxh ZyAmPSB+TEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBh Z2UuYwppbmRleCAyNjNiYzczZjEuLjJiYzhiZWEyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo cGFnZS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgi CisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAog c3RhdGljIGJvb2wgX2hhc2hfYWxsb2NfYnVja2V0cyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVy IGZpcnN0YmxvY2ssCkBAIC03OSw2ICs4MCw5IEBAIF9oYXNoX2dldGJ1ZihSZWxhdGlvbiByZWws IEJsb2NrTnVtYmVyIGJsa25vLCBpbnQgYWNjZXNzLCBpbnQgZmxhZ3MpCiAJaWYgKGFjY2VzcyAh PSBIQVNIX05PTE9DSykKIAkJTG9ja0J1ZmZlcihidWYsIGFjY2Vzcyk7CiAKKwlpZiAoIVJlbGF0 aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQorCQlWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKEJ1 ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKwogCS8qIHJlZiBjb3VudCBhbmQgbG9jayB0eXBl IGFyZSBjb3JyZWN0ICovCiAKIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBidWYsIGZsYWdzKTsKQEAg LTEwOCw2ICsxMTIsOSBAQCBfaGFzaF9nZXRidWZfd2l0aF9jb25kbG9ja19jbGVhbnVwKFJlbGF0 aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIGludCBmbGFncykKIAkJcmV0dXJuIEludmFsaWRC dWZmZXI7CiAJfQogCisJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMocmVsKSkKKwkJVkFM R1JJTkRfTUFLRV9NRU1fREVGSU5FRChCdWZmZXJHZXRQYWdlKGJ1ZiksIEJMQ0tTWik7CisKIAkv KiByZWYgY291bnQgYW5kIGxvY2sgdHlwZSBhcmUgY29ycmVjdCAqLwogCiAJX2hhc2hfY2hlY2tw YWdlKHJlbCwgYnVmLCBmbGFncyk7CkBAIC0yODAsMzEgKzI4NywyNCBAQCBfaGFzaF9kcm9wYnVm KFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVm KCkgLS0gcmVsZWFzZSBidWZmZXJzIHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVm KCkgLS0gcmVsZWFzZSBidWZmZXJzIG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5l IHVucGlucyB0aGUgYnVmZmVycyB1c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xk IG5vIGxvY2suCisgKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJp bWFyeSBidWNrZXQgcGFnZSBhbmQgZm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQg YmVpbmcgc3BsaXQgYXMgbmVlZGVkLgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxh dGlvbiByZWwsIEhhc2hTY2FuT3BhcXVlIHNvKQogewogCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQg b24gcHJpbWFyeSBidWNrZXQgcGFnZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29f YnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1 ZikKKwlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9k cm9wYnVmKHJlbCwgc28tPmhhc2hzb19idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9i dWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5 IGJ1Y2tldCBwYWdlICBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxp ZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVj a2V0X2J1ZiAhPSBzby0+Y3VyclBvcy5idWYpCisJLyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmlt YXJ5IGJ1Y2tldCBwYWdlIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1Zh bGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBz by0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1 ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAq LwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYo cmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7 Ci0KIAkvKiByZXNldCBzcGxpdCBzY2FuICovCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0g ZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hzZWFyY2guYwppbmRleCA4OWQxYzViYzYuLmE4NzgzNzJmOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hzZWFyY2guYwpAQCAtMjIsMTA1ICsyMiw4NyBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9o YXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLAotCQkJCQkJICAg U2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4 U2NhbkJhdGNoIGJhdGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMo SW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2 ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2Nh bkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNj YW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2Zm bnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBh Z2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4 dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2gg b2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3Jp YmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxv Y2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRl bSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNj cmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1 cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNl dCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlz IHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJh dGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVy d2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0 aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoK LSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdp dGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxk IG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRo ZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hf bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRj aCBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJ SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNo U2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUhhc2hCYXRjaERhdGEgKmhwcmlvcmJhdGNoID0gaGFz aF9iYXRjaF9kYXRhKHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vOwogCUJ1ZmZlcgkJ YnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7 CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1cnJlbnQgcGFn ZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5leHQgb3IgcHJl dmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQotCSAqIG1vdmlu ZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdlIGRlYWwgd2l0 aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIERldGVybWluZSB3aGljaCBwYWdlIHRv IHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscworCSAqIHRha2Vu IGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxh c3RJdGVtKQotCQl7Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9p dGVtcyhzY2FuKTsKKwkJYmxrbm8gPSBocHJpb3JiYXRjaC0+bmV4dFBhZ2U7CisJZWxzZQorCQli bGtubyA9IGhwcmlvcmJhdGNoLT5wcmV2UGFnZTsKIAotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5u ZXh0UGFnZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1 ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0Up OwotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29m X3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJ fQotCX0KKwkvKgorCSAqIEZvciBiaXRtYXAgc2NhbiBjYWxsZXJzLCByZWxlYXNlIHRoZSBwcmlv ciBiYXRjaCBub3cgc28gdGhhdCB0aGUKKwkgKiBhbGxvY2F0aW9uIGJlbG93IGNhbiByZXVzZSBp dHMgbWVtb3J5LiAgVGhpcyB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJICogbmVlZCBtb3JlIHRo YW4gb25lIGJhdGNoIGFsbG9jYXRpb24uCisJICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcp CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIHByaW9yYmF0Y2gpOworCisJaWYg KCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFsbG9j YXRlIHNwYWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hf YWxsb2Moc2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4dCBiYXRjaCAqLworCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWws IGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwogCWVsc2UKIAl7Ci0JCWlmICgt LXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJewotCQkJ aWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CisJCWJ1 ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNL RVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLnBy ZXZQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVm ID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKLQkJCQkJCQkJICAgTEhfQlVD S0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCQkJCS8qCi0JCQkJICogV2UgYWx3YXlz IG1haW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4KLQkJCQkgKiBv cGVyYXRpb24sIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJl ZAotCQkJCSAqIGhlcmUuCi0JCQkJICovCi0JCQkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tl dF9idWYgfHwKLQkJCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQkJ X2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7Ci0KLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4s ICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJ CQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCX0KKwkJLyoKKwkJICogV2UgYWx3YXlzIG1haW50YWlu IHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNjYW4gb3BlcmF0aW9uLAorCQkgKiBz byByZWxlYXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQgaGVyZS4KKwkJ ICovCisJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQlidWYgPT0gc28t Pmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7CiAJ fQogCi0JaWYgKGVuZF9vZl9zY2FuKQorCS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQgbG9hZCBp dGVtcyBpbnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2Nhbiwg YnVmLCBkaXIsIGJhdGNoKSkKIAl7Ci0JCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwotCQlI YXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQlyZXR1cm4gZmFsc2U7CisJCWlu ZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CiAJ fQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vyckl0ZW0g PSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2FuLT54c19o ZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4g dGhlIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyBmcm9tIG5leHQgcGFnZSAqLworCXJl dHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI3MCwyMiArMjUyLDIwIEBAIF9oYXNoX3JlYWRwcmV2 KEluZGV4U2NhbkRlc2Mgc2NhbiwKIH0KIAogLyoKLSAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0 aGUgZmlyc3QgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZp cnN0IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJV2UgZmluZCB0aGUgZmlyc3Qg aXRlbSAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZQotICoJCWlu ZGV4IHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUg c2NhbgotICoJCWRlc2NyaXB0b3IuCisgKgkJV2UgZmluZCB0aGUgZmlyc3QgYmF0Y2ggb2YgaXRl bXMgKG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdAorICoJCWJhdGNoKSBpbiB0aGUgaW5k ZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoCisgKgkJ dGhlIHNjYW4gZGVzY3JpcHRvci4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBpZiB0aGUg cGFnZSBjb250YWluaW5nIGN1cnJlbnQgaW5kZXggdHVwbGUgaXMgYW4KLSAqCQlvdmVyZmxvdyBw YWdlLCBib3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQgd2hlcmVhcyBpZiBpdCBpcyBhIGJ1 Y2tldAotICoJCXBhZ2UgdGhlbiBpdCBpcyBwaW5uZWQgYnV0IG5vdCBsb2NrZWQgYW5kIGRhdGEg YWJvdXQgdGhlIG1hdGNoaW5nCi0gKgkJdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9h ZGVkIGludG8gc28tPmN1cnJQb3MsCi0gKgkJc2Nhbi0+eHNfaGVhcHRpZCBpcyBzZXQgdG8gdGhl IGhlYXAgVElEIG9mIHRoZSBjdXJyZW50IHR1cGxlLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwg cmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMuCisgKgkJT3RoZXJ3aXNl IHJldHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNo ZXMuCisgKgkJTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVybi4KICAqCi0gKgkJ T24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBmYWxzZSwgd2l0aCBw aW4gaGVsZCBvbgotICoJCWJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24g b3ZlcmZsb3cgcGFnZS4KKyAqCQlXZSBhbHdheXMgcmV0YWluIG91ciBvd24gcGluIG9uIHRoZSBi dWNrZXQgcGFnZS4gIFdoZW4gd2UgcmV0dXJuIGEKKyAqCQliYXRjaCB3aXRoIGEgYnVja2V0IHBh Z2UsIGl0IHdpbGwgcmV0YWluIGl0cyBvd24gcmVmZXJlbmNlIHBpbi4KICAqLwotYm9vbAorSW5k ZXhTY2FuQmF0Y2gKIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTI5Niw3 ICsyNzYsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVl OwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAK IAlwZ3N0YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwogCWlmIChzY2FuLT5pbnN0cnVtZW50KQpA QCAtMzI2LDcgKzMwNiw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGluZGV4LgogCSAqLwogCWlmIChjdXItPnNr X2ZsYWdzICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCiAJ LyoKIAkgKiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gga2V5LiAgV2Ugd2FudCB0byBkbyB0aGlz IGJlZm9yZSBhY3F1aXJpbmcgYW55CkBAIC00MTksMTkxICszOTksMTU4IEBAIF9oYXNoX2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4 dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJfQogCi0JLyogcmVtZW1iZXIgd2hpY2gg YnVmZmVyIHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8KLQlBc3NlcnQoQnVmZmVySXNJbnZhbGlk KHNvLT5jdXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0 ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9h bGxvYyhzY2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUgdHVwbGVzIHNhdGlzZnlpbmcgdGhl IHF1YWxpZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4s ICZidWYsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBSZWFkIHRoZSBmaXJzdCBwYWdlIGFu ZCBsb2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFn ZShzY2FuLCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4 IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tz by0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVh cFRpZDsKLQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQg dHVwbGVzICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5n IG1hdGNoZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFk cGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJy UG9zCisgKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXgg cGFnZSBpbnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJy ZW50IGluZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBz YXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUg YmF0Y2ggaWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBp dGVtcwogICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5l eHQgb3IgcHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5 IHRoZSBkaXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1z IGFyZSBmb3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3Jl YWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRp cikKK19oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRp cmVjdGlvbiBkaXIsCisJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKIAlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWY7CisJSGFzaEJhdGNoRGF0YSAqaGJh dGNoID0gaGFzaF9iYXRjaF9kYXRhKGJhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3Bh cXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgb2ZmbnVtOwogCXVpbnQxNgkJaXRlbUluZGV4Owog Ci0JYnVmID0gKmJ1ZlA7CiAJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYnVmKSk7CiAJX2hhc2hfY2hl Y2twYWdlKHJlbCwgYnVmLCBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFn ZSk7CiAKLQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0Jc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBC dWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWJhdGNoLT5idWYgPSBidWY7CisJaGJhdGNoLT5j dXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJYmF0Y2gtPmRpciA9IGRpcjsK IAogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlCbG9ja051bWJlciBw cmV2X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCiAJCWZvciAoOzspCiAJCXsKIAkJCS8q IG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRpb24gYnkgYmluYXJ5IHNlYXJjaCAqLwog CQkJb2ZmbnVtID0gX2hhc2hfYmluc2VhcmNoKHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAK LQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9m Zm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNj YW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAo aXRlbUluZGV4ICE9IDApCiAJCQkJYnJlYWs7CiAKIAkJCS8qCi0JCQkgKiBDb3VsZCBub3QgZmlu ZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAq IHRoZSBuZXh0IHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0 aCBhbnkKLQkJCSAqIGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRj aGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRo ZSBuZXh0IHBhZ2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNo X2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBi dWNrZXQgcGFnZSwgaGFzaG9fcHJldmJsa25vIGlzIG5vdCBhIHJlYWwKLQkJCSAqIGJsb2NrIG51 bWJlci4KLQkJCSAqLwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tl dF9idWYgfHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRf YnVmKQotCQkJCXByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQllbHNlCi0JCQkJ cHJldl9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwotCiAJCQlfaGFzaF9yZWFkbmV4 dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNWYWxpZChidWYp KQorCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVm ID0gYnVmOwotCQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQg YW5kIHByZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3Jz IHRvIGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRp Y2F0aW5nIHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJ CQkgKiBkb24ndCByZXNldCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJ ICogX2hhc2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0 aGlzCi0JCQkJICogZnVuY3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5w cmV2UGFnZSA9IHByZXZfYmxrbm87Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJCWJhdGNoLT5idWYg PSBJbnZhbGlkQnVmZmVyOwogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KKworCQkJYmF0Y2gtPmJ1 ZiA9IGJ1ZjsKKwkJCWhiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYp OwogCQl9CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFz dEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQli YXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsK IAl9CiAJZWxzZQogCXsKLQkJQmxvY2tOdW1iZXIgbmV4dF9ibGtubyA9IEludmFsaWRCbG9ja051 bWJlcjsKLQogCQlmb3IgKDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5n IHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJj aF9sYXN0KHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNo X2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1J bmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGly LAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IE1heEluZGV4 VHVwbGVzUGVyUGFnZSkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5k IGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICog dGhlIHByZXZpb3VzIHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aAotCQkJICogYW55IGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBt YXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRv IHRoZSBwcmV2aW91cyBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJ CQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNv LT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJs a25vOwotCiAJCQlfaGFzaF9yZWFkcHJldihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0J CQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQorCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJ CQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdl ID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkv KgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNj cm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCBy ZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBs ZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNldCBjdXJyUGFnZSBvciBsc24s IGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQg Zm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVuY3Rpb24gcmV0dXJucy4KLQkJ CQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJ CQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG5leHRfYmxrbm87Ci0JCQkJc28tPmN1cnJQb3MuYnVm ID0gYnVmOworCQkJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCQkJCXJldHVybiBmYWxz ZTsKIAkJCX0KKworCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhiYXRjaC0+Y3VyclBhZ2UgPSBC dWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVt ID0gaXRlbUluZGV4OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVy UGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IE1heEluZGV4VHVwbGVzUGVyUGFn ZSAtIDE7CisJCWJhdGNoLT5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7CisJCWJhdGNoLT5sYXN0SXRl bSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CiAJfQogCi0JaWYgKHNvLT5jdXJyUG9zLmJ1 ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5o YXNoc29fc3BsaXRfYnVja2V0X2J1ZikKKwkvKgorCSAqIFNhdmVkIGF0IGxlYXN0IG9uZSBtYXRj aCBpbiBiYXRjaC5pdGVtc1tdLiAgUHJlcGFyZSBmb3IgaGFzaGdldGJhdGNoIHRvCisJICogcmV0 dXJuIGl0IGJ5IGluaXRpYWxpemluZyByZW1haW5pbmcgdW5pbml0aWFsaXplZCBmaWVsZHMuCisJ ICovCisJaWYgKGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCWJhdGNo LT5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQogCXsKLQkJc28tPmN1cnJQb3Mu cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0g b3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBC VUZGRVJfTE9DS19VTkxPQ0spOworCQkvKgorCQkgKiBCYXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIg dGhlIHByaW1hcnkgYnVja2V0LCBvciBhIGJ1Y2tldCBiZWluZworCQkgKiBwb3B1bGF0ZWQgZHVl IHRvIGEgc3BsaXQuCisJCSAqCisJCSAqIEluY3JlbWVudCBsb2NhbCByZWZlcmVuY2UgY291bnQg c28gdGhhdCBiYXRjaCBnZXRzIGFuIGluZGVwZW5kZW50CisJCSAqIGJ1ZmZlciByZWZlcmVuY2Ug dGhhdCBjYW4gYmUgcmVsZWFzZWQgKGJ5IHRoZSBjb3JlIGNvZGUvdGFibGUgQU0pCisJCSAqIGJl Zm9yZSB0aGUgaGFzaHNvX2J1Y2tldF9idWYvaGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgcmVmZXJl bmNlcyBhcmUKKwkJICogcmVsZWFzZWQuCisJCSAqLworCQlJbmNyQnVmZmVyUmVmQ291bnQoYmF0 Y2gtPmJ1Zik7CisKKwkJLyogQ2FuIG9ubHkgdXNlIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICov CisJCWhiYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWhiYXRjaC0+bmV4 dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKIAl9CiAJZWxzZQogCXsKLQkJc28tPmN1 cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQkJc28tPmN1cnJQb3Mu bmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQkJX2hhc2hfcmVsYnVmKHJlbCwg c28tPmN1cnJQb3MuYnVmKTsKLQkJc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJ LyogQ2FuIHVzZSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubyBhbmQgb3BhcXVlLT5oYXNob19uZXh0 Ymxrbm8gKi8KKwkJaGJhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwor CQloYmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCi0JQXNz ZXJ0KHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJLyog d2Ugc2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBiYXRjaC5pdGVtc1tdICovCisJaW5kZXhh bV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCk7CisKKwlBc3NlcnQoYmF0Y2gtPmZpcnN0 SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogTG9h ZCBhbGwgdGhlIHF1YWxpZmllZCBpdGVtcyBmcm9tIGEgY3VycmVudCBpbmRleCBwYWdlCi0gKiBp bnRvIHNvLT5jdXJyUG9zLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgorICog aW50byBiYXRjaC4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KICAqLwogc3Rh dGljIGludAogX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQ YWdlIHBhZ2UsCi0JCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRp cikKKwkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJ CQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFz aFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7CkBAIC02NDAsNyAr NTg3LDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQ YWdlIHBhZ2UsCiAJCQkJX2hhc2hfY2hlY2txdWFsKHNjYW4sIGl0dXApKQogCQkJewogCQkJCS8q IHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRl bShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNo LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7CiAJCQl9CiAJCQll bHNlCkBAIC02ODcsNyArNjM0LDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhT Y2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4LS07CiAJCQkJLyog dHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVt KHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gs IGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcwNiwx MyArNjUzLDE0IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh biwgUGFnZSBwYWdlLAogCX0KIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1 cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gYmF0 Y2gtPml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2hhc2hfc2F2ZWl0 ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitfaGFzaF9zYXZlaXRlbShJbmRl eFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNldE51bWJlciBvZmZu dW0sIEluZGV4VHVwbGUgaXR1cCkKIHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVt ID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVw LT50X3RpZDsKKwljdXJySXRlbS0+dGFibGVUaWQgPSBpdHVwLT50X3RpZDsKIAljdXJySXRlbS0+ aW5kZXhPZmZzZXQgPSBvZmZudW07CisJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gMDsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCmluZGV4IGNmN2YwYjkwMS4uMzMxZDVmNGRhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUg ImFjY2Vzcy9oYXNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRl ICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKQEAgLTMzLDcg KzMyLDcgQEAgX2hhc2hfY2hlY2txdWFsKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBp dHVwKQogCS8qCiAJICogQ3VycmVudGx5LCB3ZSBjYW4ndCBjaGVjayBhbnkgb2YgdGhlIHNjYW4g Y29uZGl0aW9ucyBzaW5jZSB3ZSBkbyBub3QKIAkgKiBoYXZlIHRoZSBvcmlnaW5hbCBpbmRleCBl bnRyeSB2YWx1ZSB0byBzdXBwbHkgdG8gdGhlIHNrX2Z1bmMuIEFsd2F5cwotCSAqIHJldHVybiB0 cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0dHVwbGUgYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sg ZmxhZworCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0YmF0Y2ggYWxyZWFk eSBzZXQgdGhlIHJlY2hlY2sgZmxhZwogCSAqIHRvIG1ha2UgdGhlIG1haW4gaW5kZXhzY2FuIGNv ZGUgZG8gaXQuCiAJICovCiAjaWZkZWYgTk9UX1VTRUQKQEAgLTUwNSwxMTcgKzUwNCwzIEBAIF9o YXNoX2dldF9uZXdidWNrZXRfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xk X2J1Y2tldCwKIAogCXJldHVybiBuZXdfYnVja2V0OwogfQotCi0vKgotICogX2hhc2hfa2lsbF9p dGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhh cwotICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KLSAqCi0gKiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5j ZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAq IGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHksIHRoaXMg c2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCi0gKgotICog VGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgcGFnZSBhbmQgbWF5IG9yIG1h eSBub3QgaGF2ZSB0aGUKLSAqIHBhZ2UgcGlubmVkIGluIGEgYnVmZmVyLiAgTm90ZSB0aGF0IHJl YWQtbG9jayBpcyBzdWZmaWNpZW50IGZvciBzZXR0aW5nCi0gKiBMUF9ERUFEIHN0YXR1cyAod2hp Y2ggaXMgb25seSBhIGhpbnQpLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBpbiBvbiBi dWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAqIG9uIG92ZXJmbG93 IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3Mp LgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5 IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRlLgotICoKLSAqIFRoZXJlIGFyZSBuZXZl ciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0IHRoZSB0aW1lIFZBQ1VVTSBiZWdpbnMs Ci0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0aGUgcHJpbWFyeSBi dWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBwaW4uICBBIHNjYW4gY2FuIGJlZ2luIGFm dGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UKLSAqIGJ1dCBiZWZvcmUg aXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2ZXIgcGFzcyBWQUNV VU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9ja3MgdGhlIG5leHQgcGFnZSBiZWZvcmUg cmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJldmlvdXMgb25lLiAgVGhlcmVmb3JlLCB3 ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseQotICoga2lsbGluZyBhIFRJ RCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxlLgotICovCi12b2lk Ci1faGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlIYXNoU2Nhbk9wYXF1 ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIgYmxrbm87Ci0JQnVmZmVyCQlidWY7Ci0J UGFnZQkJcGFnZTsKLQlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG9mZm51 bSwKLQkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKLQlpbnQJ CQlpOwotCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOwotCWJvb2wJCWhhdmVQaW4gPSBm YWxzZTsKLQotCUFzc2VydChzby0+bnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KHNvLT5raWxsZWRJ dGVtcyAhPSBOVUxMKTsKLQlBc3NlcnQoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7 Ci0KLQkvKgotCSAqIEFsd2F5cyByZXNldCB0aGUgc2NhbiBzdGF0ZSwgc28gd2UgZG9uJ3QgbG9v ayBmb3Igc2FtZSBpdGVtcyBvbiBvdGhlcgotCSAqIHBhZ2VzLgotCSAqLwotCXNvLT5udW1LaWxs ZWQgPSAwOwotCi0JYmxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKLQlpZiAoSGFzaFNjYW5Q b3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JewotCQkvKgotCQkgKiBXZSBhbHJlYWR5IGhhdmUg cGluIG9uIHRoaXMgYnVmZmVyLCBzbywgYWxsIHdlIG5lZWQgdG8gZG8gaXMKLQkJICogYWNxdWly ZSBsb2NrIG9uIGl0LgotCQkgKi8KLQkJaGF2ZVBpbiA9IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJy UG9zLmJ1ZjsKLQkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKLQl9Ci0JZWxz ZQotCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxP V19QQUdFKTsKLQotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3BhcXVlID0gSGFzaFBh Z2VHZXRPcGFxdWUocGFnZSk7Ci0JbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdl KTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKLQl7Ci0JCWludAkJCWl0ZW1J bmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCi0JCW9mZm51bSA9IGN1cnJJdGVtLT5p bmRleE9mZnNldDsKLQotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRl bSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQotCQl3aGls ZSAob2ZmbnVtIDw9IG1heG9mZikKLQkJewotCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlk KHBhZ2UsIG9mZm51bSk7Ci0JCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdl R2V0SXRlbShwYWdlLCBpaWQpOwotCi0JCQlpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+ dF90aWQsICZjdXJySXRlbS0+aGVhcFRpZCkpCi0JCQl7Ci0JCQkJLyogZm91bmQgdGhlIGl0ZW0g Ki8KLQkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7 Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCi0JCQl9Ci0JCQlv ZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNp bmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGlu dC4gV2hlbmV2ZXIKLQkgKiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRo ZSBwYWdlJ3MKLQkgKiBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtl d2lzZSBqdXN0IGEgaGludC4KLQkgKi8KLQlpZiAoa2lsbGVkc29tZXRoaW5nKQotCXsKLQkJb3Bh cXVlLT5oYXNob19mbGFnIHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOwotCQlNYXJrQnVmZmVy RGlydHlIaW50KGJ1ZiwgdHJ1ZSk7Ci0JfQotCi0JaWYgKHNvLT5oYXNoc29fYnVja2V0X2J1ZiA9 PSBzby0+Y3VyclBvcy5idWYgfHwKLQkJaGF2ZVBpbikKLQkJTG9ja0J1ZmZlcihzby0+Y3VyclBv cy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0JZWxzZQotCQlfaGFzaF9yZWxidWYocmVsLCBi dWYpOwotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjYjU3YmY3MWYuLmU1NGI2ZTJj YyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyMDUsOCArMTIwNSw2IEBAIEhhc2hQ YWdlU3RhdAogSGFzaFBhdGgKIEhhc2hTY2FuT3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhh c2hTY2FuUG9zRGF0YQotSGFzaFNjYW5Qb3NJdGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRl CiBIYXNoVmFsdWVGdW5jCi0tIAoyLjUzLjAKCg== --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0019-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Disposition: attachment; filename="v12-0019-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdtb5 RnJvbSAyZDc0NmJlNDY3YTMzNjM0M2E0ZmI0NzZkZTY0YmQ4ZTM0ODEyMGI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNzoyNToyNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDE5 LzIzXSBXSVA6IHJlYWRfc3RyZWFtOiBQcmV2ZW50IGRpc3RhbmNlIGZyb20gZGVjYXlpbmcKIHRv byBxdWlja2x5CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYyB8IDMzICsrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDMw IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRf c3RyZWFtLmMKaW5kZXggZTI4YWI1ZGUwLi5lM2MxNmJkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgUmVhZFN0cmVhbQogCWlu dDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAJaW50MTYJ CWRpc3RhbmNlOworCXVpbnQxNgkJZGlzdGFuY2VfZGVjYXlfaG9sZG9mZjsKIAlpbnQxNgkJaW5p dGlhbGl6ZWRfYnVmZmVyczsKIAlpbnQxNgkJcmVzdW1lX2Rpc3RhbmNlOwogCWludAkJCXJlYWRf YnVmZmVyc19mbGFnczsKQEAgLTM2NCw5ICszNjUsMjIgQEAgcmVhZF9zdHJlYW1fc3RhcnRfcGVu ZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkvKiBSZW1lbWJlciB3aGV0aGVyIHdlIG5l ZWQgdG8gd2FpdCBiZWZvcmUgcmV0dXJuaW5nIHRoaXMgYnVmZmVyLiAqLwogCWlmICghbmVlZF93 YWl0KQogCXsKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSBkZWNheXMsIG5vIEkvTyBuZWNlc3Nh cnkuICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2Ut LTsKKwkJLyoKKwkJICogSWYgdGhlcmUgY3VycmVudGx5IGlzIG5vIElPIGluIHByb2dyZXNzLCBh bmQgd2UgaGF2ZSBub3QgbmVlZGVkIHRvCisJCSAqIGlzc3VlIElPIHJlY2VudGx5LCBkZWNheSB0 aGUgbG9vay1haGVhZCBkaXN0YW5jZS4gIFdlIGRldGVjdCBpZiB3ZQorCQkgKiBoYWQgdG8gaXNz dWUgSU8gcmVjZW50bHkgYnkgaGF2aW5nIGEgZGVjYXkgaG9sZG9mZiB0aGF0J3Mgc2V0IHRvCisJ CSAqIHRoZSBtYXggbG9va2FoZWFkIGRpc3RhbmNlIHdoZW5ldmVyIHdlIG5lZWQgdG8gZG8gSU8u ICBUaGlzIGlzCisJCSAqIGltcG9ydGFudCB0byBlbnN1cmUgd2UgZXZlbnR1YWxseSByZWFjaCBh IGhpZ2ggZW5vdWdoIGRpc3RhbmNlIHRvCisJCSAqIHBlcmZvcm0gSU8gYXN5bmNocm9ub3VzbHkg d2hlbiBzdGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGxvb2thaGVhZAorCQkgKiBkaXN0YW5jZS4K KwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAmJiBzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA9PSAwKQorCQl7CisJCQlpZiAoc3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID09 IDApCisJCQkJc3RyZWFtLT5kaXN0YW5jZS0tOworCQkJZWxzZQorCQkJCXN0cmVhbS0+ZGlzdGFu Y2VfZGVjYXlfaG9sZG9mZi0tOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC03MDIsNiArNzE2LDcg QEAgcmVhZF9zdHJlYW1fYmVnaW5faW1wbChpbnQgZmxhZ3MsCiAJc3RyZWFtLT5zZXFfYmxvY2tu dW0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJc3RyZWFtLT5zZXFfdW50aWxfcHJvY2Vzc2VkID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCXN0cmVhbS0+dGVtcG9yYXJ5ID0gU21ncklzVGVtcChzbWdy KTsKKwlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5X2hvbGRvZmYgPSAwOwogCiAJLyoKIAkgKiBTa2lw IHRoZSBpbml0aWFsIHJhbXAtdXAgcGhhc2UgaWYgdGhlIGNhbGxlciBzYXlzIHdlJ3JlIGdvaW5n IHRvIGJlCkBAIC05NDQsNiArOTU5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJaWYgKCsrc3RyZWFtLT5v bGRlc3RfaW9faW5kZXggPT0gc3RyZWFtLT5tYXhfaW9zKQogCQkJc3RyZWFtLT5vbGRlc3RfaW9f aW5kZXggPSAwOwogCisJCS8qCisJCSAqIEFzIHdlIG5lZWRlZCBJTywgcHJldmVudCBkaXN0YW5j ZSBmcm9tIGJlaW5nIHJlZHVjZWQgd2l0aGluIG91cgorCQkgKiBtYXhpbXVtIGxvb2thaGVhZCB3 aW5kb3cuIFRoaXMgYXZvaWRzIGhhdmluZyBkaXN0YW5jZSBjb2xsYXBzZSB0b28KKwkJICogcXVp Y2tseSBpbiB3b3JrbG9hZHMgd2hlcmUgbW9zdCBvZiB0aGUgcmVxdWlyZWQgYmxvY2tzIGFyZSBj YWNoZWQsCisJCSAqIGJ1dCB3aGVyZSB0aGUgcmVtYWluaW5nIElPcyBhcmUgYSBzdWZmaWNpZW50 IGVub3VnaCBmYWN0b3IgdG8gY2F1c2UKKwkJICogYSBzdWJzdGFudGlhbCBzbG93ZG93biBpZiBl eGVjdXRlZCBzeW5jaHJvbm91c2x5LgorCQkgKgorCQkgKiBYWFg6IE5vdCBvYnZpb3VzIHdoZXRo ZXIgd2Ugc2hvdWxkIHVzZSBtYXhfaW9zIG9yCisJCSAqIG1heF9waW5uZWRfYnVmZmVycy4gT3Ig c29tZXRoaW5nIGVsc2UgZW50aXJlbHkuCisJCSAqLworCQlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSBzdHJlYW0tPm1heF9pb3M7CisKIAkJLyoKIAkJICogTG9vay1haGVhZCBkaXN0 YW5jZSByYW1wcyB1cCByYXBpZGx5IGFmdGVyIHdlIG5lZWRlZCB0byB3YWl0IGZvcgogCQkgKiBJ Ty4gV2Ugb25seSBpbmNyZWFzZSB0aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwg dG8gYXZvaWQKLS0gCjIuNTMuMAoK --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0017-bufmgr-Fix-use-of-wrong-variable-in-GetPrivateRe.patch" Content-Disposition: attachment; filename="v12-0017-bufmgr-Fix-use-of-wrong-variable-in-GetPrivateRe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdth7 RnJvbSBmMTQyNWI4NzhjMTE5ZDkwOTA5MDA5YTFjYTk3YTViYTg5NTY1ZTY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo1MjoyNCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDE3 LzIzXSBidWZtZ3I6IEZpeCB1c2Ugb2Ygd3JvbmcgdmFyaWFibGUgaW4KIEdldFByaXZhdGVSZWZD b3VudEVudHJ5U2xvdygpCgpVbmZvcnR1bmF0ZWx5IEkgbWFkZSBHZXRQcml2YXRlUmVmQ291bnRF bnRyeVNsb3coKSBzZXQgYSB3cm9uZyBjYWNoZSBoaW50IHdoZW4KbW92aW5nIGVudHJpZXMgZnJv bSB0aGUgaGFzaCB0YWJsZSB0byB0aGUgZmFzdGVyIGFycmF5LiAgVGhlcmUgYXJlIG5vCmNvcnJl Y3RuZXNzIGNvbmNlcm5zIGR1ZSB0byB0aGlzLCBqdXN0IGFuIHVubmVjZXNzYXJ5IGxvc3Mgb2Yg cGVyZm9ybWFuY2UuCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24o LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IDBkZTNlZTkzMi4uYTRhM2Uw MjRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtNTAzLDcgKzUwMyw3IEBA IEdldFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdyhCdWZmZXIgYnVmZmVyLCBib29sIGRvX21vdmUp CiAJCWZyZWUtPmRhdGEgPSBkYXRhOwogCQlQcml2YXRlUmVmQ291bnRBcnJheUtleXNbUmVzZXJ2 ZWRSZWZDb3VudFNsb3RdID0gYnVmZmVyOwogCQkvKiB1cGRhdGUgY2FjaGUgZm9yIHRoZSBuZXh0 IGxvb2t1cCAqLwotCQlQcml2YXRlUmVmQ291bnRFbnRyeUxhc3QgPSBtYXRjaDsKKwkJUHJpdmF0 ZVJlZkNvdW50RW50cnlMYXN0ID0gUmVzZXJ2ZWRSZWZDb3VudFNsb3Q7CiAKIAkJUmVzZXJ2ZWRS ZWZDb3VudFNsb3QgPSAtMTsKIAotLSAKMi41My4wCgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0018-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Disposition: attachment; filename="v12-0018-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdtd6 RnJvbSBkZGNkZWE0ZDRiNjdlNjAwY2QwNWRkNTVlMTM0ZjhjMGI5YmQzYjliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDE4 LzIzXSBXSVA6IHJlYWRfc3RyZWFtOiBPbmx5IGluY3JlYXNlIGRpc3RhbmNlIHdoZW4KIHdhaXRp bmcgZm9yIElPCgpUaGlzIGF2b2lkcyBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgbWF4 aW11bSBpbiBjYXNlcyB3aGVyZSB0aGUgSU8Kc3Vic3lzdGVtIGlzIGFscmVhZHkga2VlcGluZyB1 cC4KClRPRE86IFRoaXMgbWlnaHQgYmUgdG9vIGFnZ3Jlc3NpdmUgd2l0aG91dCBhIHN1YnNlcXVl bnQgcGF0Y2ggdGhhdCByZWR1Y2VzIGhvdwpvZnRlbiB3ZSBkZWNyZWFzZSB0aGUgZGlzdGFuY2Uu CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpC YWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI2 ICsrKysrKysrKysrKysrKysrKystLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9u cygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fp by9yZWFkX3N0cmVhbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpp bmRleCA4MDA2N2I2ZTYuLmUyOGFiNWRlMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0 cmVhbS5jCkBAIC05MzEsMjQgKzkzMSwzNiBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFk U3RyZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJewogCQlpbnQxNgkJaW9f aW5kZXggPSBzdHJlYW0tPm9sZGVzdF9pb19pbmRleDsKIAkJaW50MzIJCWRpc3RhbmNlOwkvKiB3 aWRlciB0ZW1wb3JhcnkgdmFsdWUsIGNsYW1wZWQgYmVsb3cgKi8KKwkJYm9vbAkJbmVlZGVkX3dh aXQ7CiAKIAkJLyogU2FuaXR5IGNoZWNrIHRoYXQgd2Ugc3RpbGwgYWdyZWUgb24gdGhlIGJ1ZmZl cnMuICovCiAJCUFzc2VydChzdHJlYW0tPmlvc1tpb19pbmRleF0ub3AuYnVmZmVycyA9PQogCQkJ ICAgJnN0cmVhbS0+YnVmZmVyc1tvbGRlc3RfYnVmZmVyX2luZGV4XSk7CiAKLQkJV2FpdFJlYWRC dWZmZXJzKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3ApOworCQluZWVkZWRfd2FpdCA9IFdhaXRS ZWFkQnVmZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKIAogCQlBc3NlcnQoc3RyZWFt LT5pb3NfaW5fcHJvZ3Jlc3MgPiAwKTsKIAkJc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MtLTsKIAkJ aWYgKCsrc3RyZWFtLT5vbGRlc3RfaW9faW5kZXggPT0gc3RyZWFtLT5tYXhfaW9zKQogCQkJc3Ry ZWFtLT5vbGRlc3RfaW9faW5kZXggPSAwOwogCi0JCS8qIExvb2stYWhlYWQgZGlzdGFuY2UgcmFt cHMgdXAgcmFwaWRseSBhZnRlciB3ZSBkbyBJL08uICovCi0JCWRpc3RhbmNlID0gc3RyZWFtLT5k aXN0YW5jZSAqIDI7Ci0JCWlmIChkaXN0YW5jZSAmJiBkaXN0YW5jZSA8IFBHX0lOVDE2X01BWCkK LQkJCWRpc3RhbmNlKys7Ci0JCWRpc3RhbmNlID0gTWluKGRpc3RhbmNlLCBzdHJlYW0tPm1heF9w aW5uZWRfYnVmZmVycyk7Ci0JCXN0cmVhbS0+ZGlzdGFuY2UgPSBkaXN0YW5jZTsKKwkJLyoKKwkJ ICogTG9vay1haGVhZCBkaXN0YW5jZSByYW1wcyB1cCByYXBpZGx5IGFmdGVyIHdlIG5lZWRlZCB0 byB3YWl0IGZvcgorCQkgKiBJTy4gV2Ugb25seSBpbmNyZWFzZSB0aGUgZGlzdGFuY2Ugd2hlbiB3 ZSBuZWVkZWQgdG8gd2FpdCwgdG8gYXZvaWQKKwkJICogaW5jcmVhc2luZyB0aGUgZGlzdGFuY2Ug ZnVydGhlciB0aGFuIG5lY2Vzc2FyeSwgYXMgdW5uZWNlc3NhcmlseQorCQkgKiBwaW5uaW5nIG1h bnkgYnVmZmVycyBjYW4gYmUgY29zdGx5LgorCQkgKgorCQkgKiBOQjogTWF5IG5vdCBpbmNyZWFz ZSB0aGUgZGlzdGFuY2UgaWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZQorCQkgKiBzdHJlYW0u CisJCSAqLworCQlpZiAoc3RyZWFtLT5kaXN0YW5jZSA+IDAgJiYgbmVlZGVkX3dhaXQpCisJCXsK KwkJCWRpc3RhbmNlID0gc3RyZWFtLT5kaXN0YW5jZSAqIDI7CisJCQlpZiAoZGlzdGFuY2UgJiYg ZGlzdGFuY2UgPCBQR19JTlQxNl9NQVgpCisJCQkJZGlzdGFuY2UrKzsKKwkJCWRpc3RhbmNlID0g TWluKGRpc3RhbmNlLCBzdHJlYW0tPm1heF9waW5uZWRfYnVmZmVycyk7CisJCQlzdHJlYW0tPmRp c3RhbmNlID0gZGlzdGFuY2U7CisJCX0KIAogCQkvKgogCQkgKiBJZiB3ZSd2ZSByZWFjaGVkIHRo ZSBmaXJzdCBibG9jayBvZiBhIHNlcXVlbnRpYWwgcmVnaW9uIHdlJ3JlCi0tIAoyLjUzLjAKCg== --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0015-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Disposition: attachment; filename="v12-0015-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdtm9 RnJvbSA4ZWViNzQ0MGQxN2FhOWJlMmVmN2M0OTc5OWRmYThkNTJhMWRjZjcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo0MDozNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDE1 LzIzXSBXSVA6IGFpbzogaW9fdXJpbmc6IEFsbG93IElPIG1ldGhvZHMgdG8gY2hlY2sgaWYgSU8K IGNvbXBsZXRlZCBpbiB0aGUgYmFja2dyb3VuZAoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvX2ludGVybmFsLmggICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIHwgNDcgKysrKysrKysrKysrKysrKysrKysrKysK IDMgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRl cm5hbC5oCmluZGV4IDVmZWVhMTViZS4uMzNlMWUyZGMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2lu dGVybmFsLmgKQEAgLTMyOCw2ICszMjgsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW9NZXRob2RPcHMK IAkgKi8KIAl2b2lkCQkoKndhaXRfb25lKSAoUGdBaW9IYW5kbGUgKmlvaCwKIAkJCQkJCQkgdWlu dDY0IHJlZl9nZW5lcmF0aW9uKTsKKworCS8qIC0tLQorCSAqIENoZWNrIGlmIElPIGhhcyBhbHJl YWR5IGNvbXBsZXRlZC4gT3B0aW9uYWwuCisJICoKKwkgKiBTb21lIElPIG1ldGhvZHMgbmVlZCB0 byBwb2xsIGEga2VybmVsIG9iamVjdCB0byBzZWUgaWYgSU8gaGFzIGFscmVhZHkKKwkgKiBjb21w bGV0ZWQgaW4gdGhlIGJhY2tncm91bmQuIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRvIGRvIHNvLgor CSAqCisJICogVGhpcyBjYWxsYmFjayBtYXkgbm90IHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLCBo b3dldmVyIGl0IGlzIGFsbG93ZWQsCisJICogYWx0aG91Z2ggbm90IGRlc2lyYWJsZSwgdG8gd2Fp dCBmb3Igc2hvcnQtbGl2ZWQgbG9ja3MuIEl0IGlzIG9rIGZyb20gYQorCSAqIGNvcnJlY3RuZXNz IHBlcnNwZWN0aXZlIHRvIG5vdCBwcm9jZXNzIGFueS9hbGwgYXZhaWxhYmxlIGNvbXBsZXRpb25z LAorCSAqIGl0IGp1c3QgY2FuIGxlYWQgdG8gaW5mZXJpb3IgcGVyZm9ybWFuY2UuCisJICogLS0t CisJICovCisJdm9pZAkJKCpjaGVja19vbmUpIChQZ0Fpb0hhbmRsZSAqaW9oLAorCQkJCQkJCSAg dWludDY0IHJlZl9nZW5lcmF0aW9uKTsKIH0gSW9NZXRob2RPcHM7CiAKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYwppbmRleCBlNGFlMzAzMWYuLjRlNzQyMDM4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vYWlvLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAg LTEwMTksNiArMTAxOSwyMSBAQCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICpp b3cpCiAKIAlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKIAor CS8qCisJICogSWYgdGhlIElPIGlzIG5vdCBleGVjdXRpbmcgc3luY2hyb25vdXNseSwgYWxsb3cg dGhlIElPIG1ldGhvZCB0byBjaGVjaworCSAqIGlmIHRoZSBJTyBhbHJlYWR5IGhhcyBjb21wbGV0 ZWQuCisJICovCisJaWYgKHBnYWlvX21ldGhvZF9vcHMtPmNoZWNrX29uZSAmJiAhKGlvaC0+Zmxh Z3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUykpCisJeworCQlwZ2Fpb19tZXRob2Rfb3BzLT5jaGVj a19vbmUoaW9oLCByZWZfZ2VuZXJhdGlvbik7CisKKwkJaWYgKHBnYWlvX2lvX3dhc19yZWN5Y2xl ZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJaWYg KHN0YXRlID09IFBHQUlPX0hTX0lETEUpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlpZiAoc3Rh dGUgPT0gUEdBSU9fSFNfQ09NUExFVEVEX1NIQVJFRCB8fAogCQlzdGF0ZSA9PSBQR0FJT19IU19D T01QTEVURURfTE9DQUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v bWV0aG9kX2lvX3VyaW5nLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJp bmcuYwppbmRleCBlZDZlNzFiY2QuLjRlMTI0NGZhMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAgLTU0LDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgcGdhaW9f dXJpbmdfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJp bmdfaW5pdF9iYWNrZW5kKHZvaWQpOwogc3RhdGljIGludAlwZ2Fpb191cmluZ19zdWJtaXQodWlu dDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpOwogc3RhdGljIHZv aWQgcGdhaW9fdXJpbmdfd2FpdF9vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5l cmF0aW9uKTsKK3N0YXRpYyB2b2lkIHBnYWlvX3VyaW5nX2NoZWNrX29uZShQZ0Fpb0hhbmRsZSAq aW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pOwogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCiBz dGF0aWMgdm9pZCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVj dCBpb191cmluZ19zcWUgKnNxZSk7CkBAIC03NSw2ICs3Niw3IEBAIGNvbnN0IElvTWV0aG9kT3Bz IHBnYWlvX3VyaW5nX29wcyA9IHsKIAogCS5zdWJtaXQgPSBwZ2Fpb191cmluZ19zdWJtaXQsCiAJ LndhaXRfb25lID0gcGdhaW9fdXJpbmdfd2FpdF9vbmUsCisJLmNoZWNrX29uZSA9IHBnYWlvX3Vy aW5nX2NoZWNrX29uZSwKIH07CiAKIC8qCkBAIC02NTYsNiArNjU4LDUxIEBAIHBnYWlvX3VyaW5n X3dhaXRfb25lKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQl3 YWl0ZWQpOwogfQogCitzdGF0aWMgdm9pZAorcGdhaW9fdXJpbmdfY2hlY2tfb25lKFBnQWlvSGFu ZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKK3sKKwlQcm9jTnVtYmVyCW93bmVyX3By b2NubyA9IGlvaC0+b3duZXJfcHJvY25vOworCVBnQWlvVXJpbmdDb250ZXh0ICpvd25lcl9jb250 ZXh0ID0gJnBnYWlvX3VyaW5nX2NvbnRleHRzW293bmVyX3Byb2Nub107CisJaW50CQkJd2FpdGVk ID0gMDsKKworCS8qCisJICogVGhpcyBjaGVjayBpcyBub3QgcmVsaWFibGUgd2hlbiBub3QgaG9s ZGluZyB0aGUgY29tcGxldGlvbiBsb2NrLCBidXQKKwkgKiBpdCdzIGEgdXNlZnVsIGNoZWFwIHBy ZS1jaGVjayB0byBzZWUgaWYgaXQncyB3b3J0aCB0cnlpbmcgdG8gZ2V0IHRoZQorCSAqIGNvbXBs ZXRpb24gbG9jay4KKwkgKi8KKwlpZiAoIWlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0 LT5pb191cmluZ19yaW5nKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgY29tcGxldGlv biBsb2NrIGlzIGN1cnJlbnRseSBoZWxkLCB0aGUgaG9sZGVyIHdpbGwgbGlrZWx5CisJICogcHJv Y2VzcyBhbnkgcGVuZGluZyBjb21wbGV0aW9ucywgZ2l2ZSB1cC4KKwkgKi8KKwlpZiAoIUxXTG9j a0NvbmRpdGlvbmFsQWNxdWlyZSgmb3duZXJfY29udGV4dC0+Y29tcGxldGlvbl9sb2NrLCBMV19F WENMVVNJVkUpKQorCQlyZXR1cm47CisKKwlwZ2Fpb19kZWJ1Z19pbyhERUJVRzMsIGlvaCwKKwkJ CQkgICAiY2hlY2tfb25lIGlvX2dlbjogJSIgUFJJdTY0ICIsIHJlZl9nZW46ICUiIFBSSXU2NCAi LCBjeWNsZSAlZCIsCisJCQkJICAgaW9oLT5nZW5lcmF0aW9uLAorCQkJCSAgIHJlZl9nZW5lcmF0 aW9uLAorCQkJCSAgIHdhaXRlZCk7CisKKwkvKgorCSAqIFJlY2hlY2sgaWYgdGhlcmUgYXJlIGFu eSBjb21wbGV0aW9ucywgYW5vdGhlciBiYWNrZW5kIGNvdWxkIGhhdmUKKwkgKiBwcm9jZXNzZWQg dGhlbSBzaW5jZSB3ZSBjaGVja2VkIGFib3ZlLCBvciBvdXIgdW5sb2NrZWQgcHJlLWNoZWNrIGNv dWxkCisJICogaGF2ZSBiZWVuIHJlYWRpbmcgb3V0ZGF0ZWQgdmFsdWVzLgorCSAqCisJICogSXQg aXMgcG9zc2libGUgdGhhdCB0aGUgSU8gaGFuZGxlIGhhcyBiZWVuIHJldXNlZCBzaW5jZSB0aGUg c3RhcnQgb2YKKwkgKiB0aGUgY2FsbCwgYnV0IG5vdyB0aGF0IHdlIGhhdmUgdGhlIGxvY2ssIHdl IGNhbiBqdXN0IGFzIHdlbGwgZHJhaW4gYWxsCisJICogY29tcGxldGlvbnMuCisJICovCisJaWYg KGlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0LT5pb191cmluZ19yaW5nKSkKKwl7CisJ CXBnYWlvX3VyaW5nX2RyYWluX2xvY2tlZChvd25lcl9jb250ZXh0KTsKKwl9CisKKwlMV0xvY2tS ZWxlYXNlKCZvd25lcl9jb250ZXh0LT5jb21wbGV0aW9uX2xvY2spOworfQorCiBzdGF0aWMgdm9p ZAogcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJp bmdfc3FlICpzcWUpCiB7Ci0tIAoyLjUzLjAKCg== --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0016-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Disposition: attachment; filename="v12-0016-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdtj8 RnJvbSAwMjg1NWNlYWY1MmUzZjA2MDliYzJiMTBjMWQzNmZjY2EzMWUzOTgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo1MDo1MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDE2 LzIzXSBidWZtZ3I6IFJldHVybiB3aGV0aGVyIFdhaXRSZWFkQnVmZmVycygpIG5lZWRlZCB0bwog d2FpdAoKSW4gYSBzdWJzZXF1ZW50IGNvbW1pdCByZWFkX3N0cmVhbS5jIHdpbGwgdXNlIHRoaXMg YXMgYW4gaW5wdXQgdG8gdGhlIHJlYWQKYWhlYWQgZGlzdGFuY2UuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgfCAxOCArKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hh bmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApp bmRleCAxMzU4ZmM3ZmEuLjc4ZGE4NGIyYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0yNTAsNyAr MjUwLDcgQEAgZXh0ZXJuIGJvb2wgU3RhcnRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlv biAqb3BlcmF0aW9uLAogCQkJCQkJCSBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkgaW50 ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgV2FpdFJlYWRCdWZm ZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIGJvb2wgV2FpdFJl YWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRlcm4gdm9p ZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2NrUmVsZWFz ZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5k ZXggM2I0YjBjY2NhLi4wZGUzZWU5MzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CkBAIC0xNzMxLDEyICsxNzMxLDIwIEBAIFByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCUFzc2VydChvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOwogfQogCi12b2lkCisvKgorICogV2FpdCBmb3IgdGhl IElPIG9wZXJhdGlvbiBpbml0aWF0ZWQgYnkgU3RhcnRSZWFkQnVmZmVycygpIGV0IGFsIHRvCisg KiBjb21wbGV0ZS4KKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIElPIG9wZXJhdGlvbiBhbHJl YWR5IGhhZCBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgb2YgdGhpcworICogY2FsbC4KKyAqLworYm9v bAogV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiB7CiAJ UGdBaW9SZXR1cm4gKmFpb19yZXQgPSAmb3BlcmF0aW9uLT5pb19yZXR1cm47CiAJSU9Db250ZXh0 CWlvX2NvbnRleHQ7CiAJSU9PYmplY3QJaW9fb2JqZWN0OworCWJvb2wJCW5lZWRlZF93YWl0ID0g ZmFsc2U7CiAKIAlpZiAob3BlcmF0aW9uLT5wZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9U RU1QKQogCXsKQEAgLTE3OTgsNiArMTgwNiw3IEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVy c09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJCWluc3RyX3RpbWUJaW9fc3RhcnQgPSBwZ3N0YXRf cHJlcGFyZV9pb190aW1lKHRyYWNrX2lvX3RpbWluZyk7CiAKIAkJCQlwZ2Fpb193cmVmX3dhaXQo Jm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwogCiAJCQkJLyoK IAkJCQkgKiBUaGUgSU8gb3BlcmF0aW9uIGl0c2VsZiB3YXMgYWxyZWFkeSBjb3VudGVkIGVhcmxp ZXIsIGluCkBAIC0xODUwLDYgKzE4NTksMTIgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJz T3BlcmF0aW9uICpvcGVyYXRpb24pCiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAorCQkv KgorCQkgKiBJZiB0aGUgSU8gY29tcGxldGVkIG9ubHkgcGFydGlhbGx5LCB3ZSBuZWVkIHRvIHBl cmZvcm0gYWRkaXRpb25hbAorCQkgKiB3b3JrLCBjb25zaWRlciB0aGF0IGEgZm9ybSBvZiBoYXZp bmcgaGFkIHRvIHdhaXQuCisJCSAqLworCQluZWVkZWRfd2FpdCA9IHRydWU7CisKIAkJLyoKIAkJ ICogVGhpcyBtYXkgb25seSBjb21wbGV0ZSB0aGUgSU8gcGFydGlhbGx5LCBlaXRoZXIgYmVjYXVz ZSBzb21lCiAJCSAqIGJ1ZmZlcnMgd2VyZSBhbHJlYWR5IHZhbGlkLCBvciBiZWNhdXNlIG9mIGEg cGFydGlhbCByZWFkLgpAQCAtMTg2Niw2ICsxODgxLDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRC dWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJQ2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihv cGVyYXRpb24sIHRydWUpOwogCiAJLyogTkI6IFJFQURfRE9ORSB0cmFjZXBvaW50IHdhcyBhbHJl YWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwlyZXR1cm4gbmVlZGVkX3dh aXQ7CiB9CiAKIC8qCi0tIAoyLjUzLjAKCg== --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0014-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Disposition: attachment; filename="v12-0014-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdto10 RnJvbSA2NjUwYjI5YmM2NWU1NGQ0YzUwMzA1ODI5MjFjMWU5ZTg5MWNhZGVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjoyNTo0MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDE0 LzIzXSBXSVA6IHJlYWRfc3RyZWFtOiBJc3N1ZSBJTyBzeW5jaHJvbm91c2x5IHdoaWxlIGluCiBm YXN0IHBhdGgKCldoaWxlIGluIGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdo dCBlbmNvdW50ZXIKc3luY2hyb25vdXNseS4gQmVjYXVzZSB3ZSBhcmUsIHJpZ2h0IG5vdywgbm90 IHJlYWRpbmcgYWhlYWQsIGRpc3BhdGNoaW5nIGFueQpvY2Nhc2lvbmFsIElPIHRvIHdvcmtlcnMg d291bGQgaGF2ZSB0aGUgb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2VycywKd2l0aG91 dCBhbnkgcmVhbGlzdGljIGNoYW5jZSBvZiB0aGUgSU8gY29tcGxldGluZyBiZWZvcmUgd2UgbmVl ZCBpdC4KCkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vCkJhY2twYXRjaDoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5j IHwgMTUgKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGU3OGMzYjE1YS4uODAwNjdi NmU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTgzMyw2ICs4MzMs MTkgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoq cGVyX2J1ZmZlcl9kYXRhKQogCQkJaWYgKHN0cmVhbS0+YWR2aWNlX2VuYWJsZWQpCiAJCQkJZmxh Z3MgfD0gUkVBRF9CVUZGRVJTX0lTU1VFX0FEVklDRTsKIAorCQkJLyoKKwkJCSAqIFdoaWxlIGlu IGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdodCBlbmNvdW50ZXIKKwkJCSAq IHN5bmNocm9ub3VzbHkuIEJlY2F1c2Ugd2UgYXJlLCByaWdodCBub3csIG5vdCByZWFkaW5nIGFo ZWFkLAorCQkJICogZGlzcGF0Y2hpbmcgYW55IG9jY2FzaW9uYWwgSU8gdG8gd29ya2VycyB3b3Vs ZCBoYXZlIHRoZQorCQkJICogb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2Vycywgd2l0 aG91dCBhbnkgcmVhbGlzdGljCisJCQkgKiBjaGFuY2Ugb2YgdGhlIElPIGNvbXBsZXRpbmcgYmVm b3JlIHdlIG5lZWQgaXQuIFdlIHdpbGwgc3dpdGNoCisJCQkgKiB0byBub24tc3luY2hyb25vdXMg SU8gYWZ0ZXIgdGhpcy4KKwkJCSAqCisJCQkgKiBYWFg6IFNob3VsZCB3ZSBkbyBzbyBvbmx5IGZv ciB3b3JrZXIsIG9yIGFsc28gaW9fdXJpbmc/IFRoZXJlJ3MKKwkJCSAqIG5vdCBtdWNoIGRpc3Bh dGNoIG92ZXJoZWFkIHdpdGggaW9fdXJpbmcsIGNvbXBhcmVkIHRvIHdvcmtlci4uLgorCQkJICov CisJCQlmbGFncyB8PSBSRUFEX0JVRkZFUlNfU1lOQ0hST05PVVNMWTsKKwogCQkJLyoKIAkJCSAq IFBpbiBhIGJ1ZmZlciBmb3IgdGhlIG5leHQgY2FsbC4gIFNhbWUgYnVmZmVyIGVudHJ5LCBhbmQK IAkJCSAqIGFyYml0cmFyeSBJL08gZW50cnkgKHRoZXkncmUgYWxsIGZyZWUpLiAgV2UgZG9uJ3Qg aGF2ZSB0bwpAQCAtODYwLDYgKzg3Myw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJCXN0cmVhbS0+aW9zX2lu X3Byb2dyZXNzID0gMTsKIAkJCXN0cmVhbS0+aW9zWzBdLmJ1ZmZlcl9pbmRleCA9IG9sZGVzdF9i dWZmZXJfaW5kZXg7CiAJCQlzdHJlYW0tPnNlcV9ibG9ja251bSA9IG5leHRfYmxvY2tudW0gKyAx OworCisJCQkvKiBGSVhNRTogaXQgd291bGQgcHJvYmFibHkgd29ydGggaXNzdWluZyByZWFkYWhl YWQgaGVyZSAqLwogCQl9CiAJCWVsc2UKIAkJewotLSAKMi41My4wCgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0012-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v12-0012-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdtv12 RnJvbSBkZjE3NWQ3YTA5OTBkZGJkOTIyNmNkMWQxZjdkYjJkZTQwNjUwODg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTIgMTIvMjNdIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNl cyBjb3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUg c2luY2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMg d2lsbCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCgpOb3Rl OiBJIChwZ2VvZ2hlYW4pIGhhdmUgY2hhbmdlZCB0aGlzIGZyb20gTWVsYW5pZSdzIG9yaWdpbmFs IGJ5CmlubGluaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb246CgpodHRwczovL3Bvc3Rnci5lcy9tL0NB SDItV3prMDJ2UGpzSlB4N0VHTm1ndnNLS2d5SG49WHRHakpjUEUrZVFUUDN4UXQ3d0BtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwgMTExICsr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1NiBpbnNlcnRpb25z KCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDFhNDljYWVjOC4uYWVhNDVhYmMwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtNjQ4LDYgKzY0OCwxMCBAQCBzdGF0aWMgaW5saW5lIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9j KFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJCQkJICBib29sICpmb3VuZFB0ciwgSU9Db250ZXh0 IGlvX2NvbnRleHQpOwogc3RhdGljIGJvb2wgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09w ZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpOwogc3RhdGljIHZvaWQg Q2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9u LCBib29sIGlzX2NvbXBsZXRlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBQcm9jZXNzQnVmZmVySGl0 KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJUmVsYXRpb24gcmVsLCBj aGFyIHBlcnNpc3RlbmNlLAorCQkJCQkJCQkJU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIg Zm9ya251bSwKKwkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKIHN0YXRpYyBCdWZmZXIg R2V0VmljdGltQnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBJT0NvbnRleHQg aW9fY29udGV4dCk7CiBzdGF0aWMgdm9pZCBGbHVzaFVubG9ja2VkQnVmZmVyKEJ1ZmZlckRlc2Mg KmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4sCiAJCQkJCQkJCUlPT2JqZWN0IGlvX29iamVjdCwgSU9D b250ZXh0IGlvX2NvbnRleHQpOwpAQCAtMTIyNiw4ICsxMjMwLDYgQEAgUGluQnVmZmVyRm9yQmxv Y2soUmVsYXRpb24gcmVsLAogCQkJCSAgYm9vbCAqZm91bmRQdHIpCiB7CiAJQnVmZmVyRGVzYyAq YnVmSGRyOwotCUlPQ29udGV4dAlpb19jb250ZXh0OwotCUlPT2JqZWN0CWlvX29iamVjdDsKIAog CUFzc2VydChibG9ja051bSAhPSBQX05FVyk7CiAKQEAgLTEyMzYsMTcgKzEyMzgsNiBAQCBQaW5C dWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9QRVJNQU5FTlQgfHwKIAkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9H R0VEKSk7CiAKLQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQl7Ci0J CWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFMOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9U RU1QX1JFTEFUSU9OOwotCX0KLQllbHNlCi0JewotCQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9y U3RyYXRlZ3koc3RyYXRlZ3kpOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKLQl9 Ci0KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NUQVJUKGZvcmtOdW0sIGJsb2NrTnVt LAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKIAkJCQkJ CQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKQEAgLTEyNTQsMTggKzEy NDUsMTEgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJICAgc21n ci0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAogCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9URU1QKQotCXsKIAkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3Jr TnVtLCBibG9ja051bSwgZm91bmRQdHIpOwotCQlpZiAoKmZvdW5kUHRyKQotCQkJcGdCdWZmZXJV c2FnZS5sb2NhbF9ibGtzX2hpdCsrOwotCX0KIAllbHNlCi0JewogCQlidWZIZHIgPSBCdWZmZXJB bGxvYyhzbWdyLCBwZXJzaXN0ZW5jZSwgZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJIHN0cmF0 ZWd5LCBmb3VuZFB0ciwgaW9fY29udGV4dCk7Ci0JCWlmICgqZm91bmRQdHIpCi0JCQlwZ0J1ZmZl clVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOwotCX0KKwkJCQkJCQkgc3RyYXRlZ3ksIGZvdW5kUHRy LCBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSkpOworCiAJaWYgKHJlbCkKIAl7CiAJCS8q CkBAIC0xMjc0LDIyICsxMjU4LDEwIEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwK IAkJICogemVyb2VkIGluc3RlYWQpLCB0aGUgcGVyLXJlbGF0aW9uIHN0YXRzIGFsd2F5cyBjb3Vu dCB0aGVtLgogCQkgKi8KIAkJcGdzdGF0X2NvdW50X2J1ZmZlcl9yZWFkKHJlbCk7Ci0JCWlmICgq Zm91bmRQdHIpCi0JCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWwpOwogCX0KLQlpZiAoKmZv dW5kUHRyKQotCXsKLQkJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29udGV4dCwg SU9PUF9ISVQsIDEsIDApOwotCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKLQkJCVZhY3V1bUNvc3RC YWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OwogCi0JCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVs TnVtYmVyLAotCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJ CQkJCSAgdHJ1ZSk7Ci0JfQorCWlmICgqZm91bmRQdHIpCisJCVByb2Nlc3NCdWZmZXJIaXQoc3Ry YXRlZ3ksIHJlbCwgcGVyc2lzdGVuY2UsIHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKIAogCXJl dHVybiBCdWZmZXJEZXNjcmlwdG9yR2V0QnVmZmVyKGJ1Zkhkcik7CiB9CkBAIC0xNjk1LDYgKzE2 NjcsNTEgQEAgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0 KQogCXJldHVybiBSZWFkQnVmZmVyc0NhblN0YXJ0SU9PbmNlKGJ1ZmZlciwgbm93YWl0KTsKIH0K IAorLyoKKyAqIFdlIHRyYWNrIHZhcmlvdXMgc3RhdHMgcmVsYXRlZCB0byBidWZmZXIgaGl0cy4g QmVjYXVzZSB0aGlzIGlzIGRvbmUgaW4gYQorICogZmV3IHNlcGFyYXRlIHBsYWNlcywgdGhpcyBo ZWxwZXIgZXhpc3RzIGZvciBjb252ZW5pZW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitQ cm9jZXNzQnVmZmVySGl0KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCSBSZWxh dGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxhdGlvbiBzbWdyLAorCQkJCSBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQoreworCUlPQ29udGV4dAlpb19j b250ZXh0OworCUlPT2JqZWN0CWlvX29iamVjdDsKKworCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QKQorCXsKKwkJaW9fY29udGV4dCA9IElPQ09OVEVYVF9OT1JNQUw7CisJ CWlvX29iamVjdCA9IElPT0JKRUNUX1RFTVBfUkVMQVRJT047CisJfQorCWVsc2UKKwl7CisJCWlv X2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSk7CisJCWlvX29iamVjdCA9 IElPT0JKRUNUX1JFTEFUSU9OOworCX0KKworCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURf RE9ORShmb3JrbnVtLAorCQkJCQkJCQkJICBibG9ja251bSwKKwkJCQkJCQkJCSAgc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJCQkJ CQkJCQkgIHRydWUpOworCisJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAp CisJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQgKz0gMTsKKwllbHNlCisJCXBnQnVmZmVy VXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwlpZiAocmVsKQorCQlwZ3N0YXRfY291bnRf YnVmZmVyX2hpdChyZWwpOworCisJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCisJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworfQorCiAvKgogICogSGVscGVyIGZv ciBXYWl0UmVhZEJ1ZmZlcnMoKSB0aGF0IHByb2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBhIHJlYWR2 CiAgKiBvcGVyYXRpb24sIHJhaXNpbmcgYW4gZXJyb3IgaWYgbmVjZXNzYXJ5LgpAQCAtMTk5MCwy NSArMjAwNyw5IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJh dGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCQkgKiBtdXN0IGhhdmUgc3RhcnRlZCBvdXQg YXMgYSBtaXNzIGluIFBpbkJ1ZmZlckZvckJsb2NrKCkuIFRoZSBvdGhlcgogCQkgKiBiYWNrZW5k IHdpbGwgdHJhY2sgdGhpcyBhcyBhICdyZWFkJy4KIAkJICovCi0JCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19k b25lLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0 b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkgIHRydWUpOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQotCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCArPSAx OwotCQllbHNlCi0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCArPSAxOwotCi0JCWlm IChvcGVyYXRpb24tPnJlbCkKLQkJCXBnc3RhdF9jb3VudF9idWZmZXJfaGl0KG9wZXJhdGlvbi0+ cmVsKTsKLQotCQlwZ3N0YXRfY291bnRfaW9fb3AoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09Q X0hJVCwgMSwgMCk7Ci0KLQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFs YW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKKwkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRpb24t PnN0cmF0ZWd5LCBvcGVyYXRpb24tPnJlbCwgcGVyc2lzdGVuY2UsCisJCQkJCQkgb3BlcmF0aW9u LT5zbWdyLCBmb3JrbnVtLAorCQkJCQkJIGJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2Rv bmUpOwogCX0KIAllbHNlCiAJewotLSAKMi41My4wCgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0011-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Disposition: attachment; filename="v12-0011-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdtx13 RnJvbSBhMTY1ZWFhNzVmN2M3MTVlZGU3NTQ2ZTVhNWM5MDUwZGJiMDQzZjk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjIgSmFuIDIwMjYgMTM6MDc6MTMgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiAxMS8yM10g VXNlIEV4ZWNTZXRUdXBsZUJvdW5kIGhpbnQgZHVyaW5nIGluZGV4IHNjYW5zLgoKVGhpcyBnaXZl cyBpbmRleCBzY2FucyBhIHdheSB0byBhdm9pZCB1c2luZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBj ZXJ0YWluCmtpbmRzIG9mIHF1ZXJpZXMgdGhhdCBhcmUgdmVyeSB1bmxpa2VseSB0byBiZW5lZml0 IGZyb20gcHJlZmV0Y2hpbmc6CnF1ZXJpZXMgd2hvc2UgcGxhbiBpbnZvbHZlcyBhIExJTUlUIG5v ZGUgdGhhdCBpcyBjb25zdW1lcyB0dXBsZXMgZnJvbSBhbgppbmRleCBzY2FuIChvciBpbmRleC1v bmx5IHNjYW4pIG5vZGUuCgpUZXN0aW5nIGhhcyBzaG93biB0aGlzIHRvIGJlIHBhcnRpY3VsYXJs eSBpbXBvcnRhbnQgd2l0aCBuZXN0ZWQgbG9vcApqb2lucyB3aXRoIGEgTElNSVQgb24gYW4gaW5u ZXIgaW5kZXggc2Nhbi4gIFRoaXMgaXMgdHlwaWNhbCBvZiBuZXN0ZWQKbG9vcCBhbnRpLWpvaW5z LCBhbmQgbmVzdGVkIGxvb3Agc2VtaS1qb2lucy4KClhYWCBUaGlzIGlzIHN0aWxsIHZlcnkgbXVj aCBhIFdJUC4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1C eTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICB8ICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICAgfCAgNCArKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyB8ICA1ICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAg ICB8ICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICAgfCA1MCAr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgfCAxMCArKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j ICAgICB8IDEzICsrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKaW5kZXggNmFiMmRlZGM0Li5jNjkwMjEzODkgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aApAQCAtMzk1LDYgKzM5NSw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJ LyogcGFyYWxsZWwgaW5kZXggc2NhbiBpbmZvcm1hdGlvbiwgaW4gc2hhcmVkIG1lbW9yeSAqLwog CXN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpwYXJhbGxlbF9zY2FuOwogCisJaW50 NjQJCXR1cGxlc19uZWVkZWQ7CisKIAkvKgogCSAqIENvdW50ZXIgdG8gcmVxdWVzdCBlYXJseSBh Ym9ydCBkdXJpbmcgZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBzY2Fucy4KIAkgKiBXaGVuIG5v bnplcm8sIHRoZSBzY2FuIHdpbGwgcmVhZCBhdCBtb3N0IHRoaXMgbWFueSBsZWFmIHBhZ2VzIGJl Zm9yZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA3YzFiNDI3ZmIuLjEyZGQ1MzNjMyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKQEAgLTE2OTcsNiArMTY5Nyw3IEBAIHR5cGVkZWYgc3RydWN0CiAgKgkJ U2NhbkRlc2MJCSAgIGluZGV4IHNjYW4gZGVzY3JpcHRvcgogICoJCUluc3RydW1lbnQJCSAgIGxv Y2FsIGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJU2hhcmVkSW5mbwkJICAgcGFyYWxs ZWwgd29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVyIGVudHJ5KQorICoJCVR1cGxlc05l ZWRlZAkgICB0dXBsZSBib3VuZCwgc2VlIEV4ZWNTZXRUdXBsZUJvdW5kCiAgKgogICoJCVJlb3Jk ZXJRdWV1ZQkgICB0dXBsZXMgdGhhdCBuZWVkIHJlb3JkZXJpbmcgZHVlIHRvIHJlLWNoZWNrCiAg KgkJUmVhY2hlZEVuZAkJICAgaGF2ZSB3ZSBmZXRjaGVkIGFsbCB0dXBsZXMgZnJvbSBpbmRleCBh bHJlYWR5PwpAQCAtMTcyNSw2ICsxNzI2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3Rh dGUKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmlzc19TY2FuRGVzYzsKIAlJbmRleFNjYW5J bnN0cnVtZW50YXRpb24gKmlzc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1l bnRhdGlvbiAqaXNzX1NoYXJlZEluZm87CisJaW50NjQJCWlzc19UdXBsZXNOZWVkZWQ7CiAKIAkv KiBUaGVzZSBhcmUgbmVlZGVkIGZvciByZS1jaGVja2luZyBPUkRFUiBCWSBleHByIG9yZGVyaW5n ICovCiAJcGFpcmluZ2hlYXAgKmlzc19SZW9yZGVyUXVldWU7CkBAIC0xNzUzLDYgKzE3NTUsNyBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogICoJCVNjYW5EZXNjCQkgICBpbmRleCBz Y2FuIGRlc2NyaXB0b3IKICAqCQlJbnN0cnVtZW50CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3Ry dW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50 YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKKyAqCQlUdXBsZXNOZWVkZWQJICAgdHVwbGUgYm91bmQs IHNlZSBFeGVjU2V0VHVwbGVCb3VuZAogICoJCVRhYmxlU2xvdAkJICAgc2xvdCBmb3IgaG9sZGlu ZyB0dXBsZXMgZmV0Y2hlZCBmcm9tIHRoZSB0YWJsZQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9m IHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdBdHRO dW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxFTgpA QCAtMTc3NSw2ICsxNzc4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRlCiAJ c3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICppb3NzX1NjYW5EZXNjOwogCUluZGV4U2Nhbkluc3Ry dW1lbnRhdGlvbiAqaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW9zc19TaGFyZWRJbmZvOworCWludDY0CQlpb3NzX1R1cGxlc05lZWRlZDsKIAlUdXBs ZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRy TnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCmluZGV4IDBkNWU5OTA3YS4uZmM0OTcyODJmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTY0OCw5ICs2NDgsMTQgQEAgaGVhcGFt X2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKIAkJICogaGF2ZW4ndCBkb25lIGFueSBoZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9uJ3Qgd2Fu dCB0byB3YXN0ZSBhbnkKIAkJICogY3ljbGVzIG9uIGFsbG9jYXRpbmcgYSByZWFkIHN0cmVhbSB1 bnRpbCB3ZSBoYXZlIGEgZGVtb25zdHJhdGVkCiAJCSAqIG5lZWQgZm9yIHBlcmZvcm0gaGVhcCBm ZXRjaGVzLgorCQkgKgorCQkgKiBBbHNvIGF2b2lkaW5nIHByZWZldGNoaW5nIHdoZW4gdGhlIGNv cmUgZXhlY3V0b3IgcGFzc2VzIHRoZSBzY2FuIGEKKwkJICogdHVwbGVzX25lZWRlZCBoaW50IHRo YXQgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4gaXMgbGlrZWx5IHRvIGVuZAorCQkgKiBiZWZvcmUg bG9uZy4KIAkJICovCiAJCWlmICghaHNjYW4tPnhzX3JlYWRfc3RyZWFtICYmIHByaW9yQmF0Y2gg JiYgc2Nhbi0+TVZDQ1NjYW4gJiYKIAkJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVt YmVyICYmCS8qIGZvciBpbmRleC1vbmx5IHNjYW5zICovCisJCQkoc2Nhbi0+dHVwbGVzX25lZWRl ZCA9PSAtMSB8fCBzY2FuLT50dXBsZXNfbmVlZGVkID4gMjApICYmCiAJCQllbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoKQogCQl7CiAJCQlBc3NlcnQoIWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3Mu dmFsaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCBkNTBlM2ZhNzEuLmFhNDRhMGVj MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsNyBAQCBSZWxhdGlv bkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwID0gTlVM TDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOworCXNjYW4tPnR1cGxlc19uZWVkZWQgPSAt MTsJLyogbm8gbGltaXQgKi8KIAlzY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkgPSAwOwogCiAJ c2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJv Y25vZGUuYwppbmRleCA3ZTQwYjg1MjUuLmFhZWQzNTA2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1Byb2Nub2RlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgi CiAKKyNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1 dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L25vZGVBcHBlbmQuaCIKQEAgLTg0MCw2ICs4NDEsMTIgQEAgRXhlY1NodXRkb3duTm9kZV93YWxr ZXIoUGxhblN0YXRlICpub2RlLCB2b2lkICpjb250ZXh0KQogICogQW55IG5lZ2F0aXZlIHR1cGxl c19uZWVkZWQgdmFsdWUgbWVhbnMgIm5vIGxpbWl0Iiwgd2hpY2ggc2hvdWxkIGJlIHRoZQogICog ZGVmYXVsdCBhc3N1bXB0aW9uIHdoZW4gdGhpcyBpcyBub3QgY2FsbGVkIGF0IGFsbCBmb3IgYSBw YXJ0aWN1bGFyIG5vZGUuCiAgKgorICogTm90ZTogZm9yIG5vZGVzIGxpa2UgU29ydCwgdHVwbGVz X25lZWRlZCBpcyBhIGhhcmQgbGltaXQgLS0gdGhlIG5vZGUgY2FuCisgKiBzdG9wIGFmdGVyIHBy b2R1Y2luZyBleGFjdGx5IHRoYXQgbWFueSB0dXBsZXMuICBGb3IgaW5kZXggc2NhbnMsIGhvd2V2 ZXIsCisgKiB0dXBsZXNfbmVlZGVkIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlvbiwgYmVjYXVzZSBu b24taW5kZXggcXVhbHMgbWF5IGZpbHRlcgorICogb3V0IHNvbWUgdHVwbGVzLiAgVGhlIGFjdHVh bCBudW1iZXIgb2YgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgaW5kZXggbWF5CisgKiBuZWVkIHRv IGV4Y2VlZCB0dXBsZXNfbmVlZGVkIHRvIHNhdGlzZnkgdGhlIGNhbGxlcidzIHJlcXVpcmVtZW50 cy4KKyAqCiAgKiBOb3RlOiBpZiB0aGlzIGlzIGNhbGxlZCByZXBlYXRlZGx5IG9uIGEgcGxhbiB0 cmVlLCB0aGUgZXhhY3Qgc2FtZSBzZXQKICAqIG9mIG5vZGVzIG11c3QgYmUgdXBkYXRlZCB3aXRo IHRoZSBuZXcgbGltaXQgZWFjaCB0aW1lOyBiZSBjYXJlZnVsIHRoYXQKICAqIG9ubHkgdW5jaGFu Z2luZyBjb25kaXRpb25zIGFyZSB0ZXN0ZWQgaGVyZS4KQEAgLTk3Nyw2ICs5ODQsNDkgQEAgRXhl Y1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9ub2Rl KQogCiAJCUV4ZWNTZXRUdXBsZUJvdW5kKHR1cGxlc19uZWVkZWQsIG91dGVyUGxhblN0YXRlKGNo aWxkX25vZGUpKTsKIAl9CisJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIEluZGV4U2NhblN0YXRl KSkKKwl7CisJCS8qCisJCSAqIElmIGl0IGlzIGFuIEluZGV4U2Nhbiwgc2F2ZSB0aGUgdHVwbGVz X25lZWRlZCBpbiB0aGUgc3RhdGUgc28gaXQKKwkJICogY2FuIGJlIHByb3BhZ2F0ZWQgdG8gdGhl IEluZGV4U2NhbkRlc2Mgd2hlbiB0aGUgc2NhbiBpcyBzdGFydGVkLgorCQkgKgorCQkgKiBOb3Rl OiBBcyB3aXRoIFNvcnQsIHRoZSBpbmRleCBzY2FuIG5vZGUgaXMgcmVzcG9uc2libGUgZm9yIHJl YWN0aW5nCisJCSAqIHByb3Blcmx5IHRvIGNoYW5nZXMgdG8gdGhpcyBwYXJhbWV0ZXIuCisJCSAq LworCQlJbmRleFNjYW5TdGF0ZSAqaXNzdGF0ZSA9IChJbmRleFNjYW5TdGF0ZSAqKSBjaGlsZF9u b2RlOworCisJCWlzc3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCisJ CS8qIElmIHNjYW4gYWxyZWFkeSBzdGFydGVkLCB1cGRhdGUgdGhlIEluZGV4U2NhbkRlc2MgdG9v ICovCisJCWlmIChpc3N0YXRlLT5pc3NfU2NhbkRlc2MpCisJCQlpc3N0YXRlLT5pc3NfU2NhbkRl c2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hp bGRfbm9kZSwgSW5kZXhPbmx5U2NhblN0YXRlKSkKKwl7CisJCS8qIFNhbWUgY29tbWVudHMgYXMg Zm9yIEluZGV4U2NhbiAqLworCQlJbmRleE9ubHlTY2FuU3RhdGUgKmlvc3N0YXRlID0gKEluZGV4 T25seVNjYW5TdGF0ZSAqKSBjaGlsZF9ub2RlOworCisJCWlvc3N0YXRlLT5pb3NzX1R1cGxlc05l ZWRlZCA9IHR1cGxlc19uZWVkZWQ7CisKKwkJLyogSWYgc2NhbiBhbHJlYWR5IHN0YXJ0ZWQsIHVw ZGF0ZSB0aGUgSW5kZXhTY2FuRGVzYyB0b28gKi8KKwkJaWYgKGlvc3N0YXRlLT5pb3NzX1NjYW5E ZXNjKQorCQkJaW9zc3RhdGUtPmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNf bmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hpbGRfbm9kZSwgTmVzdExvb3BTdGF0ZSkpCisJ eworCQkvKgorCQkgKiBGb3IgTmVzdExvb3Agam9pbnMgd2hlcmUgZWFjaCBvdXRlciB0dXBsZSBw cm9kdWNlcyBhdCBtb3N0IG9uZQorCQkgKiBvdXRwdXQgdHVwbGUsIHdlIGNhbiBwcm9wYWdhdGUg dGhlIGJvdW5kIHRvIHRoZSBvdXRlciBjaGlsZAorCQkgKi8KKwkJTmVzdExvb3BTdGF0ZSAqbmxz dGF0ZSA9IChOZXN0TG9vcFN0YXRlICopIGNoaWxkX25vZGU7CisJCUpvaW5UeXBlCWpvaW50eXBl ID0gbmxzdGF0ZS0+anMuam9pbnR5cGU7CisKKwkJaWYgKGpvaW50eXBlID09IEpPSU5fU0VNSSB8 fCBqb2ludHlwZSA9PSBKT0lOX0FOVEkgfHwKKwkJCW5sc3RhdGUtPmpzLnNpbmdsZV9tYXRjaCkK KwkJeworCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwgb3V0ZXJQbGFuU3RhdGUo Y2hpbGRfbm9kZSkpOworCQl9CisJfQogCiAJLyoKIAkgKiBJbiBwcmluY2lwbGUgd2UgY291bGQg ZGVzY2VuZCB0aHJvdWdoIGFueSBwbGFuIG5vZGUgdHlwZSB0aGF0IGlzCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCA4NGJmZjYwY2UuLmYzZmM2M2FiZSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC05Niw2ICs5Niw5IEBA IEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQlub2RlLT5pb3NzX1Nj YW5EZXNjID0gc2NhbmRlc2M7CiAJCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50 X2l0dXApOwogCisJCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwkJc2NhbmRlc2Mt PnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJ ZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhl YWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTUyOCw2 ICs1MzEsNyBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwgRVN0 YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5c1Jl YWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5cyA9IE5VTEw7CiAJaW5k ZXhzdGF0ZS0+aW9zc19OdW1SdW50aW1lS2V5cyA9IDA7CisJaW5kZXhzdGF0ZS0+aW9zc19UdXBs ZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGluZGV4IHNjYW4ga2V5cyBmcm9t IHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC03MDQsNiArNzA4LDkgQEAgRXhlY0luZGV4T25s eVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIHBp c2Nhbik7CiAJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKKwkv KiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aW9zc19TY2FuRGVzYy0+dHVw bGVzX25lZWRlZCA9IG5vZGUtPmlvc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBubyBy dW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5k IHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtNzY5LDYgKzc3Niw5 IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUg Km5vZGUsCiAJCQkJCQkJCSBwaXNjYW4pOwogCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54 c193YW50X2l0dXApOwogCisJLyogUGFzcyBkb3duIGFueSB0dXBsZSBib3VuZCAqLworCW5vZGUt Pmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsK KwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUg cmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBB TS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCA2NzgyMjk0N2EuLjNlMTc0 Y2I2NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTE1LDYgKzExNSw5 IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAogCQlub2RlLT5pc3NfU2NhbkRl c2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJCXNj YW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCQkvKgog CQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwg Z28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAg LTIxMSw2ICsyMTQsOSBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9k ZSkKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24g YW55IHR1cGxlIGJvdW5kICovCisJCXNjYW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNz X1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1 bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5r ZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTk4Niw2ICs5OTIsNyBAQCBFeGVjSW5pdEluZGV4U2Nh bihJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4c3Rh dGUtPmlzc19SdW50aW1lS2V5c1JlYWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aXNzX1J1bnRp bWVLZXlzID0gTlVMTDsKIAlpbmRleHN0YXRlLT5pc3NfTnVtUnVudGltZUtleXMgPSAwOworCWlu ZGV4c3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGlu ZGV4IHNjYW4ga2V5cyBmcm9tIHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC0xNzMwLDYgKzE3 MzcsOSBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwK IAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CiAK KwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aXNzX1NjYW5EZXNjLT50 dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYgbm8g cnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFu ZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTE3OTQsNiArMTgw NCw5IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2Rl LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsK IAorCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwlub2RlLT5pc3NfU2NhbkRlc2Mt PnR1cGxlc19uZWVkZWQgPSBub2RlLT5pc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBu byBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQg YW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgotLSAKMi41My4wCgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0010-Add-heapam-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v12-0010-Add-heapam-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdtz14 RnJvbSBkYTA2ZDAxMGZmZjBiMjFlZWNjYWMyMjM0ZTYyZDU3OTVkYjE2NzYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiAxMC8yM10g QWRkIGhlYXBhbSBpbmRleCBzY2FuIEkvTyBwcmVmZXRjaGluZy4KClRoaXMgY29tbWl0IGltcGxl bWVudHMgSS9PIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyAoYW5kIGluZGV4LW9ubHkKc2Nh bnMgdGhhdCByZXF1aXJlIGhlYXAgZmV0Y2hlcykuIFRoaXMgd2FzIG1hZGUgcG9zc2libGUgYnkg dGhlIHJlY2VudAphZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRvIGJvdGggdGhlIHRh YmxlIEFNIGFuZCBpbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJm YWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgbWF0Y2hpbmcgVElEcwoocmF0aGVyIHRoYW4gb25lIHR1 cGxlIGF0IGEgdGltZSksIGVhY2ggb2Ygd2hpY2ggbXVzdCBiZSB0YWtlbiBmcm9tCmluZGV4IHR1 cGxlcyB0aGF0IGFwcGVhciB0b2dldGhlciBvbiBhIHNpbmdsZSBpbmRleCBwYWdlLiAgVGhpcyBh bGxvd3MKbXVsdGlwbGUgYmF0Y2hlcyB0byBiZSBoZWxkIG9wZW4gc2ltdWx0YW5lb3VzbHkuICBH aXZpbmcgdGhlIHRhYmxlIEFNIGFuCmV4cGxpY2l0IHVuZGVyc3RhbmRpbmcgb2YgaW5kZXggQU0g Y29uY2VwdHMvaW5kZXggcGFnZSBib3VuZGFyaWVzIGFsbG93cwppdCB0byBjb25zaWRlciBhbGwg b2YgdGhlIHJlbGV2YW50IGNvc3RzIGFuZCBiZW5lZml0cy4KClByZWZldGNoaW5nIGlzIGltcGxl bWVudGVkIHVzaW5nIGEgcHJlZmV0Y2hpbmcgcG9zaXRpb24gdW5kZXIgdGhlCmNvbnRyb2wgb2Yg dGhlIHRhYmxlIEFNIGFuZCBjb3JlIGNvZGUuICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0 aGUKc2NhbiBwb3NpdGlvbiBhZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQg dGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlLiAgQSByZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNl cyB0aGUgcmVhZCBzdHJlYW0gYXMgbmVlZGVkIHRvCnByb3ZpZGUgc3VmZmljaWVudGx5IG1hbnkg aGVhcCBibG9jayBudW1iZXJzIHRvIG1haW50YWluIHRoZSByZWFkCnN0cmVhbSdzIHRhcmdldCBw cmVmZXRjaCBkaXN0YW5jZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hp bmcgY2FuIG1ha2UgaW5kZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0 aGF0IHJldHVybiBtYW55IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzNXgKZmFzdGVyLgoKQW4g aW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlzIHRvIGVuYWJsZSB0aGUg dGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNlIGl0cyBwcmVmZXRjaCBw b3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBwYWdlIHRoYXQncyBhaGVh ZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdlLiAgVGhpcyBpcyBjcnVj aWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYgcGFnZQpoYXBwZW5zIHRv IGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3MgYW1vbmcgaXRzIG1hdGNo aW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYgcGFnZXMgdGhhdCBoYXZl IHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIEluZGV4IHNjYW5zIGNhbiBo YXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0aW5nIGhhcyBzaG93biB0 byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZlciBiZQp1c2VmdWwuICBC YXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcgYSBzaW1wbGUgcmluZyBi dWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJlIHRoZSBzY2FuIGV4Y2Vl ZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSByZWFkIHN0cmVhbSBpcyB0 ZW1wb3JhcmlseSBwYXVzZWQuICBQcmVmZXRjaGluZyAodmlhIHRoZSByZWFkCnN0cmVhbSkgaXMg cmVzdW1lZCBvbmx5IGFmdGVyIHRoZSBzY2FuIHBvc2l0aW9uIGFkdmFuY2VzIGJleW9uZCBpdHMK Y3VycmVudCBvcGVuIGJhdGNoIGFuZCB0aGVuIGZyZWVzIGFuZCByZW1vdmVzIHRoZSBiYXRjaCBm cm9tIHRoZSBzY2FuJ3MKYmF0Y2ggcmluZyBidWZmZXIuICBUZXN0aW5nIGhhcyBzaG93biB0aGF0 IGl0IGlzbid0IHZlcnkgY29tbW9uIGZvcgpzY2FucyB0byBob2xkIG9wZW4gbW9yZSB0aGFuIGFi b3V0IDEwIGJhdGNoZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIEkvTwpwcmVmZXRjaCBkaXN0YW5jZS4K CkF1dGhvcjogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFu YXJhemVsLmRlPgpSZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwu Y29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01 MjQ4LTUwMDBiODk0ZWJhYkBlbnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDEzICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICAzNSArKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDM3MiArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAgICB8ICA1MiArKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIGRvYy9zcmMvc2dtbC9jb25m aWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAxNiArCiBkb2Mvc3JjL3NnbWwvaW5kZXhh bS5zZ21sICAgICAgICAgICAgICAgICAgICAgfCAxMDMgKysrKy0KIGRvYy9zcmMvc2dtbC90YWJs ZWFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N5c3ZpZXdzLm91dCAgICAgICAgfCAgIDMgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDU5 MSBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNTU1 NzliODgxLi5iYjVhMjNkYmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0u aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEyMyw2ICsxMjMsMTkgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaEhlYXBEYXRhCiAJQnVmZmVyCQl4c192bWJ1ZjsJCS8q IHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAqLwogCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAjIGl0ZW1z IHRvIHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLwogCisJLyogRm9yIGJhdGNoIGluZGV4 IHNjYW5zIHRoYXQgdXNlIHJlYWQgc3RyZWFtIGZvciBwcmVmZXRjaGluZyAqLworCVJlYWRTdHJl YW0gKnhzX3JlYWRfc3RyZWFtOworCisJLyoKKwkgKiBUaGUgcmVhZCBzdHJlYW0gaXMgYWxsb2Nh dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNjYW4gYW5kIHJlc2V0IG9uCisJICogcmVzY2Fu IG9yIHdoZW4gdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMuIFRoZSBzY2FuIGRpcmVjdGlvbiBp cyBzYXZlZAorCSAqIGVhY2ggdGltZSBhIG5ldyB0dXBsZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSBz Y2FuIGRpcmVjdGlvbiBjaGFuZ2VzIGZyb20KKwkgKiBvbmUgdHVwbGUgdG8gdGhlIG5leHQsIHRo ZSByZWFkIHN0cmVhbSByZWxlYXNlcyBhbGwgcHJldmlvdXNseSBwaW5uZWQKKwkgKiBidWZmZXJz IGFuZCByZXNldHMgdGhlIHByZWZldGNoIGJsb2NrLgorCSAqLworCVNjYW5EaXJlY3Rpb24geHNf cmVhZF9zdHJlYW1fZGlyOwkvKiBpbmRleCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVy IHhzX3ByZWZldGNoX2Jsb2NrOwkvKiBsYXN0IGJsb2NrIHJldHVybmVkIHRvIHhzX3JlYWRfc3Ry ZWFtICovCisJYm9vbAkJeHNfcGF1c2VkOwkJLyogcGF1c2VkIHVudGlsIG5leHQgYmF0Y2ggaXMg cmVhZD8gKi8KIAlib29sCQl4c19sYXN0aW5ibG9jazsgLyogbGFzdCBUSUQgb24gdGhpcyBibG9j ayBpbiBjdXJyZW50IGJhdGNoPyAqLwogCiAJLyogTkI6IGlmIHhzX2NidWYgb3Igdm1idWYgYXJl IG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRl eCBhN2FiZjVhNzguLjZhYjJkZWRjNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0yMDQsNiArMjA0 LDEwIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqIFRoaXMgYWxsb3dz IHRhYmxlIEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBz YW1lCiAJICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFk ZGl0aW9uYWwgaW5kZXggcGFnZXMgdG8KIAkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUg bWF0Y2hpbmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICogSW4gcGFydGlj dWxhciwgZHVyaW5nIHByZWZldGNoaW5nIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjayBkaXNjb3Zl cnMKKwkgKiB0aGUgZW5kLW9mLXNjYW4gdmlhIHByZWZldGNoQmF0Y2guICBUaGUgdGFibGUgQU0g Y2hlY2tzIHRoZXNlIGZsYWdzIHNvCisJICogdGhhdCB0aGUgc2NhbiBzaWRlIGRvZXNuJ3QgcmVw ZWF0IHRoZSBzYW1lIGFtZ2V0YmF0Y2ggY2FsbCB3aGVuIGl0CisJICogbGF0ZXIgcmVhY2hlcyB0 aGF0IGJhdGNoIGFzIHNjYW5CYXRjaC4KIAkgKi8KIAlib29sCQlrbm93bkVuZEJhY2t3YXJkOwog CWJvb2wJCWtub3duRW5kRm9yd2FyZDsKQEAgLTI2MiwxMiArMjY2LDIxIEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiAgKiBtYXRjaGVzIGluLiAg SG93ZXZlciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3aGF0 ZXZlcgogICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92aWRlZCB0 aGF0IHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QKICAqIGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0YWJs ZV9pbmRleF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKgorICogVGhp cyBkYXRhIHN0cnVjdHVyZSBhbHNvIHByb3ZpZGVzIHRhYmxlIEFNcyB3aXRoIGEgd2F5IHRvIHJl YWQgYWhlYWQgb2YgdGhlCisgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBi YXRjaGVzL2luZGV4IHBhZ2VzLiAgVGhlIGZ1cnRoZXIgb3V0CisgKiB0aGUgdGFibGUgQU0gcmVh ZHMgYWhlYWQgbGlrZSB0aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVy ZS4KKyAqIFRoYXQgd2F5IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBh Z2dyZXNzaXZlbHkgYXMgZGVzaXJlZC4KKyAqIEZvciBleGFtcGxlLCBpbmRleCBzY2FucyBzb21l dGltZXMgbmVlZCB0byByZWFkYWhlYWQgYnkgYXMgbWFueSBhcyBhIGZldworICogZG96ZW4gYW1n ZXRiYXRjaCBiYXRjaGVzIGluIG9yZGVyIHRvIG1haW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZl dGNoCisgKiBkaXN0YW5jZSAoZGlzdGFuY2UgZm9yIHJlYWRpbmcgdGFibGUgYmxvY2tzL2ZldGNo aW5nIHRhYmxlIHR1cGxlcykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgog ewogCS8qIGN1cnJlbnQgcG9zaXRpb25zIGluIGJhdGNoZXNbXSBmb3Igc2NhbiAqLwogCUJhdGNo UmluZ0l0ZW1Qb3Mgc2NhblBvczsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8KIAlCYXRjaFJp bmdJdGVtUG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCUJhdGNoUmlu Z0l0ZW1Qb3MgcHJlZmV0Y2hQb3M7CS8qIHByZWZldGNoaW5nIHBvc2l0aW9uICovCiAKIAlJbmRl eFNjYW5CYXRjaCBtYXJrQmF0Y2g7CiAKQEAgLTQ3Nyw2ICs0OTAsMjggQEAgaW5kZXhfc2Nhbl9i YXRjaF9hcHBlbmQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo KQogCXJpbmdidWYtPm5leHRCYXRjaCsrOwogfQogCisvKgorICogQ29tcGFyZSB0d28gYmF0Y2gg cmluZyBwb3NpdGlvbnMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICoKKyAqIFJldHVy bnMgbmVnYXRpdmUgaWYgcG9zMSBpcyBiZWhpbmQgcG9zMiwgMCBpZiBlcXVhbCwgcG9zaXRpdmUg aWYgcG9zMSBpcworICogYWhlYWQgb2YgcG9zMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2lu ZGV4X3NjYW5fcG9zX2NtcChCYXRjaFJpbmdJdGVtUG9zICpwb3MxLCBCYXRjaFJpbmdJdGVtUG9z ICpwb3MyLAorCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludDgJCWJhdGNo ZGlmZiA9IChpbnQ4KSAocG9zMS0+YmF0Y2ggLSBwb3MyLT5iYXRjaCk7CisKKwlpZiAoYmF0Y2hk aWZmICE9IDApCisJCXJldHVybiBiYXRjaGRpZmY7CisKKwkvKiBTYW1lIGJhdGNoLCBjb21wYXJl IGl0ZW1zICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJcmV0 dXJuIHBvczEtPml0ZW0gLSBwb3MyLT5pdGVtOworCWVsc2UKKwkJcmV0dXJuIHBvczItPml0ZW0g LSBwb3MxLT5pdGVtOworfQorCiAvKgogICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBp dGVtIGluIHRoZSBiYXRjaC4KICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv Y29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRleCBmMmZkNWQzMTUuLjQx OTMwMGE2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC01Miw2ICs1Miw3IEBAIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcjsKIGV4dGVybiBQR0RM TElNUE9SVCBib29sIGVuYWJsZV9zZXFzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5h YmxlX2luZGV4c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleG9ubHlz Y2FuOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDsK IGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9iaXRtYXBzY2FuOwogZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgZW5hYmxlX3RpZHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFi bGVfc29ydDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDE0 N2MxYTI1Ni4uMGQ1ZTk5MDdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgog I2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgpAQCAtNjAs NiArNjEsOSBAQCBzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX3NjYW5fZ2V0X2Jsb2Nrc19kb25l KEhlYXBTY2FuRGVzYyBoc2Nhbik7CiBzdGF0aWMgYm9vbCBCaXRtYXBIZWFwU2Nhbk5leHRCbG9j ayhUYWJsZVNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQlib29sICpyZWNoZWNrLAogCQkJCQkJCQkJ dWludDY0ICpsb3NzeV9wYWdlcywgdWludDY0ICpleGFjdF9wYWdlcyk7CitzdGF0aWMgQmxvY2tO dW1iZXIgaGVhcGFtX2dldG5leHRfc3RyZWFtKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJ CQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCSB2b2lkICpwZXJfYnVm ZmVyX2RhdGEpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTAxLDYgKzEwNSwxNyBAQCBo ZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAkvKiBS ZXNjYW5zIHNob3VsZCBhdm9pZCBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8K IAloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOwogCisJLyogUmVzZXQgcmVhZCBzdHJlYW0gZGlyZWN0 aW9uIHVuY29uZGl0aW9uYWxseSAqLworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBOb01v dmVtZW50U2NhbkRpcmVjdGlvbjsKKworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIGl0c2VsZiwgYW5k IG90aGVyIGFzc29jaWF0ZWQgc3RhdGUgKi8KKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQor CXsKKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQlo c2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19y ZWFkX3N0cmVhbSk7CisJfQorCiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcg YW55IHBpbnMgbm93IGhlbGQgaW4geHNfY2J1ZiBhbmQgeHNfdm1idWYuCiAJICogVGhpcyBzYXZl cyBjeWNsZXMgZHVyaW5nIGNlcnRhaW4gdGlnaHQgbmVzdGVkIGxvb3Agam9pbnMsIGFuZCBkdXJp bmcKQEAgLTEyMiw2ICsxMzcsOSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hU YWJsZURhdGEgKnNjYW4pCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX3ZtYnVmKSkKIAkJ UmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWYpOwogCisJaWYgKGhzY2FuLT54c19yZWFkX3N0 cmVhbSkKKwkJcmVhZF9zdHJlYW1fZW5kKGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisKIAlwZnJl ZShoc2Nhbik7CiB9CiAKQEAgLTE5MSw3ICsyMDksMTQgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCQlpZiAoQnVmZmVySXNWYWxp ZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAot CQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+ eHNfYmxrKTsKKwkJLyoKKwkJICogV2hlbiB1c2luZyBhIHJlYWQgc3RyZWFtLCB0aGUgc3RyZWFt IHdpbGwgYWxyZWFkeSBrbm93IHdoaWNoIGJsb2NrCisJCSAqIG51bWJlciBjb21lcyBuZXh0ICh0 aG91Z2ggYW4gYXNzZXJ0aW9uIHdpbGwgdmVyaWZ5IGEgbWF0Y2ggYmVsb3cpCisJCSAqLworCQlp ZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCQkJaHNjYW4tPnhzX2NidWYgPSByZWFkX3N0cmVh bV9uZXh0X2J1ZmZlcihoc2Nhbi0+eHNfcmVhZF9zdHJlYW0sIE5VTEwpOworCQllbHNlCisJCQlo c2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNf YmxrKTsKIAogCQkvKgogCQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUg Zmlyc3QgdGltZQpAQCAtMjc2LDYgKzMwMSwzMCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUo c3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAgKiAoaW1wb3J0YW50IGZvciBpbm5l ciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQogICog bmVlZCB0byBub3QgaG9sZCBvbnRvIGluZGV4IGxlYWYgcGFnZXMgZm9yIHRvbyBsb25nLgogICoK KyAqIERyb3BwaW5nIGxlYWYgcGFnZSBwaW5zIGVhcmx5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIEluIG5vIGV2ZW50IHdpbGwgdGhlIHNjYW4gYmUgYWxsb3dlZCB0 byBob2xkIG9udG8gbW9yZSB0aGFuIG9uZSBiYXRjaCdzCisgKiBsZWFmIHBhZ2UgcGluIGF0IGEg dGltZS4gIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhpcyByZXN0cmljdGlvbiBpcyB0bworICog YXZvaWQgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVhZCBzdHJlYW0sIHdoaWNo IGhhcyBpdHMgb3duCisgKiBzdHJhdGVneSBmb3Iga2VlcGluZyB0aGUgbnVtYmVyIG9mIHBpbnMg aGVsZCBieSB0aGUgYmFja2VuZCB1bmRlciBjb250cm9sLgorICoKKyAqIE9uY2Ugd2UndmUgcmVz b2x2ZWQgdmlzaWJpbGl0eSBmb3IgYWxsIGl0ZW1zIGluIGEgYmF0Y2gsIHdlIGNhbiBzYWZlbHkg ZHJvcAorICogaXRzIGxlYWYgcGFnZSBwaW4uICBUaGlzIGlzIHNhZmUgd2l0aCByZXNwZWN0IHRv IGNvbmN1cnJlbnQgVkFDVVVNIGJlY2F1c2UKKyAqIGluZGV4IHZhY3V1bWluZyB3aWxsIGJsb2Nr IG9uIGFjcXVpcmluZyBhIGNvbmZsaWN0aW5nIGNsZWFudXAgbG9jayBvbiB0aGUKKyAqIGJhdGNo J3MgaW5kZXggcGFnZSBkdWUgdG8gb3VyIGhvbGRpbmcgYSBwaW4gb24gdGhhdCBzYW1lIHBhZ2Uu ICBDb3B5aW5nIHRoZQorICogcmVsZXZhbnQgdmlzaWJpbGl0eSBtYXAgZGF0YSBpbnRvIG91ciBs b2NhbCBjYWNoZSBzdWZmaWNlcyB0byBwcmV2ZW50IHVuc2FmZQorICogY29uY3VycmVudCBUSUQg cmVjeWNsaW5nOiBpZiBhbnkgb2YgdGhlc2UgVElEcyBwb2ludCB0byBkZWFkIGhlYXAgdHVwbGVz LAorICogVkFDVVVNIGNhbm5vdCBwb3NzaWJseSByZXR1cm4gZnJvbSBhbWJ1bGtkZWxldGUgYW5k IG1hcmsgdGhlIHBvaW50ZWQtdG8KKyAqIGhlYXAgcGFnZXMgYXMgYWxsLXZpc2libGUuICBWQUNV VU0gX2Nhbl8gZG8gc28gb25jZSB3ZSByZWxlYXNlIHRoZSBiYXRjaCdzCisgKiBwaW4sIGJ1dCB0 aGF0J3Mgb2theTsgd2UnbGwgYmUgd29ya2luZyBvZmYgb2YgY2FjaGVkIHZpc2liaWxpdHkgaW5m byB0aGF0CisgKiBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVhZCBUSURzIGFyZSBOT1QgYWxsLXZpc2li bGUuCisgKgorICogTm90ZTogV2UgY2Fubm90IGRyb3AgdGhlIHBpbiBlYXJseSB3aGVuIHRoZSBz Y2FuIHVzZXMgYSBub24tTVZDQyBzbmFwc2hvdDsKKyAqIHdlIG11c3QgZGVsYXkgaXQgdW50aWwg YWxsIGhlYXAgZmV0Y2hlcyBmb3IgdGhlIGxvYWRlZCBiYXRjaCBoYXZlIHRha2VuCisgKiBwbGFj ZS4gIFRoaXMgaXMgd2h5IHdlIGRvbid0IHN1cHBvcnQgcHJlZmV0Y2hpbmcgZHVyaW5nIHN1Y2gg c2NhbnMuICBTZWUKKyAqIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwuCisgKgogICogTm90ZSBv biBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0cwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICoKQEAgLTQ5MCwxMSArNTM5LDEzIEBAIHN0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IElu ZGV4U2NhbkJhdGNoCiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JCYXRjaCwg QmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQogeworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAo SW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKIAlJbmRleFNjYW5CYXRj aCBiYXRjaCA9IE5VTEw7CiAJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgUEdfVVNFRF9G T1JfQVNTRVJUU19PTkxZID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKIAogCS8qIFhYWDogd2Ugc2hv dWxkIGFzc2VydCB0aGF0IGEgc25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KIAlB c3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOworCUFzc2VydChkaXJlY3Rp b24gPT0gaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2Rpcik7CiAKIAlpZiAoIXByaW9yQmF0Y2gpCiAJ ewpAQCAtNTc2LDkgKzYyNywzOSBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkgKi8KIAkJaWYgKHVubGlrZWx5KHNj YW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSkgJiYgcHJpb3JCYXRjaCkKIAkJeworCQkJQXNzZXJ0 KCFoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOwogCQkJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7 CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQorCisJCS8qCisJCSAqIERlbGF5IGluaXRpYWxpemluZyBz dHJlYW0gdW50aWwgcmVhZGluZyBmcm9tIHNjYW4ncyBzZWNvbmQgYmF0Y2guCisJCSAqIFRoaXMg aGV1cmlzdGljIGF2b2lkcyB3YXN0aW5nIGN5Y2xlcyBvbiBzdGFydGluZyBhIHJlYWQgc3RyZWFt IGZvcgorCQkgKiB2ZXJ5IHNlbGVjdGl2ZSBpbmRleCBzY2Fucy4gIFdlIGNhbiBsaWtlbHkgaW1w cm92ZSB1cG9uIHRoaXMsIGJ1dAorCQkgKiBpdCB3b3JrcyB3ZWxsIGVub3VnaCBmb3Igbm93Lgor CQkgKgorCQkgKiBBbHNvIGF2b2lkIHByZWZldGNoaW5nIGR1cmluZyBzY2FucyB3aGVyZSB3ZSdy ZSB1bmFibGUgdG8gZHJvcCBlYWNoCisJCSAqIGJhdGNoJ3MgYnVmZmVyIHBpbiByaWdodCBhd2F5 IChub24tTVZDQyBzbmFwc2hvdCBzY2FucykuICBXZSBhcmUKKwkJICogbm90IHByZXBhcmVkIHRv IHNlbnNpYmx5IGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVyIHBpbnMgaGVsZAorCQkg KiAocmVhZCBzdHJlYW0gaGFuZGxlcyBhbGwgcGluIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIHVz LCBhbmQga25vd3MKKwkJICogbm90aGluZyBhYm91dCBwaW5zIGhlbGQgb24gaW5kZXggcGFnZXMv d2l0aGluIGJhdGNoZXMpLgorCQkgKgorCQkgKiBBbHNvIGRlbGF5IGNyZWF0aW5nIGEgcmVhZCBz dHJlYW0gZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgdGhhdAorCQkgKiBoYXZlbid0IGRvbmUgYW55 IGhlYXAgZmV0Y2hlcyB5ZXQuICBXZSBkb24ndCB3YW50IHRvIHdhc3RlIGFueQorCQkgKiBjeWNs ZXMgb24gYWxsb2NhdGluZyBhIHJlYWQgc3RyZWFtIHVudGlsIHdlIGhhdmUgYSBkZW1vbnN0cmF0 ZWQKKwkJICogbmVlZCBmb3IgcGVyZm9ybSBoZWFwIGZldGNoZXMuCisJCSAqLworCQlpZiAoIWhz Y2FuLT54c19yZWFkX3N0cmVhbSAmJiBwcmlvckJhdGNoICYmIHNjYW4tPk1WQ0NTY2FuICYmCisJ CQloc2Nhbi0+eHNfYmxrICE9IEludmFsaWRCbG9ja051bWJlciAmJgkvKiBmb3IgaW5kZXgtb25s eSBzY2FucyAqLworCQkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCkKKwkJeworCQkJQXNzZXJ0 KCFiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkKTsKKworCQkJaHNjYW4tPnhzX3JlYWRf c3RyZWFtID0KKwkJCQlyZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9ERUZB VUxULCBOVUxMLAorCQkJCQkJCQkJCSAgIHNjYW4tPmhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVN LAorCQkJCQkJCQkJCSAgIGhlYXBhbV9nZXRuZXh0X3N0cmVhbSwgc2NhbiwgMCk7CisJCX0KIAl9 CiAJZWxzZQogCXsKQEAgLTYwMyw2ICs2ODQsMzIgQEAgaGVhcGFtX2JhdGNoX2dldG5leHQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAlyZXR1cm4gYmF0Y2g7 CiB9CiAKKy8qCisgKiBIYW5kbGUgYSBjaGFuZ2UgaW4gaW5kZXggc2NhbiBkaXJlY3Rpb24gKGF0 IHRoZSB0dXBsZSBncmFudWxhcml0eSkuCisgKgorICogUmVzZXRzIHRoZSByZWFkIHN0cmVhbSwg c2luY2Ugd2UgY2FuJ3QgcmVseSBvbiBzY2FuUG9zIGNvbnRpbnVpbmcgdG8gYWdyZWUKKyAqIHdp dGggdGhlIGJsb2NrcyB0aGF0IHJlYWQgc3RyZWFtIGFscmVhZHkgY29uc3VtZWQgdXNpbmcgcHJl ZmV0Y2hQb3MuCisgKgorICogTm90ZTogaWZmIHRoZSBzY2FuIF9jb250aW51ZXNfIGluIHRoaXMg bmV3IGRpcmVjdGlvbiwgYW5kIGFjdHVhbGx5IHN0ZXBzCisgKiBvZmYgc2NhbkJhdGNoIHRvIGFu IGVhcmxpZXIgaW5kZXggcGFnZSwgaGVhcGFtX2JhdGNoX2dldG5leHQgd2lsbCBkZWFsIHdpdGgK KyAqIGl0LiAgQnV0IHRoYXQgbWlnaHQgbmV2ZXIgaGFwcGVuOyB0aGUgc2NhbiBtaWdodCB5ZXQg Y2hhbmdlIGRpcmVjdGlvbiBhZ2FpbgorICogKG9yIGp1c3QgZW5kIGJlZm9yZSByZXR1cm5pbmcg bW9yZSBpdGVtcykuCisgKi8KK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkCitoZWFwYW1fZGlyY2hh bmdlX3JlYWRzdHJlYW1fcmVzZXQoSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJ ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJICBCYXRjaFJpbmdCdWZmZXIgKmJh dGNocmluZ2J1ZikKK3sKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBzdGF0ZSAqLworCWJhdGNocmlu Z2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcGF1c2VkID0gZmFs c2U7CisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsKKworCS8qIFJlc2V0 IHJlYWQgc3RyZWFtIGl0c2VsZiAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCXJl YWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7Cit9CisKIC8qIC0tLS0tLS0t LS0tLS0tLS0KICAqCQloZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgLSBnZXQgbmV4dCBUSUQgZnJv bSBiYXRjaCByaW5nIGJ1ZmZlcgogICoKQEAgLTYyMSw2ICs3MjgsMTIgQEAgaGVhcGFtX2JhdGNo X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nh biwKIAlBc3NlcnQoIXNjYW5Qb3MtPnZhbGlkIHx8IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09 IHNjYW5Qb3MtPmJhdGNoKTsKIAlBc3NlcnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nhbl9i YXRjaF9jb3VudChzY2FuKSA9PSAwKTsKIAorCS8qIEhhbmRsZSByZXNldHRpbmcgdGhlIHJlYWQg c3RyZWFtIHdoZW4gc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyAqLworCWlmIChoc2Nhbi0+eHNfcmVh ZF9zdHJlYW1fZGlyID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQorCQloc2Nhbi0+eHNfcmVh ZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOwkvKiBmaXJzdCBjYWxsICovCisJZWxzZSBpZiAodW5s aWtlbHkoaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciAhPSBkaXJlY3Rpb24pKQorCQloZWFwYW1f ZGlyY2hhbmdlX3JlYWRzdHJlYW1fcmVzZXQoaHNjYW4sIGRpcmVjdGlvbiwgYmF0Y2hyaW5nYnVm KTsKKwogCS8qCiAJICogQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBsb2FkZWQgc2NhbkJh dGNoIGZvciB1cyB0byByZXR1cm4gdGhlIG5leHQKIAkgKiBtYXRjaGluZyBpdGVtJ3MgVElEL2lu ZGV4IHR1cGxlIGZyb20KQEAgLTYyOSw3ICs3NDIsNyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90 aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogCXsKIAkJ LyoKIAkJICogc2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBs b2FkZWQgaW4gYmF0Y2ggcmluZwotCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZS4K KwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUgKGNhbid0IGRvIHRoaXMgd2l0aCBw cmVmZXRjaEJhdGNoKS4KIAkJICovCiAJCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9 PSBzY2FuUG9zLT5iYXRjaCk7CiAKQEAgLTY3NCwyMSArNzg3LDI3NiBAQCBoZWFwYW1fYmF0Y2hf Z2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2Fu LAogCXsKIAkJSW5kZXhTY2FuQmF0Y2ggaGVhZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2Fu LAogCQkJCQkJCQkJCQkJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwkJQmF0Y2hSaW5nSXRl bVBvcyAqcHJlZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvczsKIAogCQkvKiBm cmVlIG9ic29sZXNjZW50IGhlYWQgYmF0Y2ggKHVubGVzcyBpdCBpcyBzY2FuJ3MgbWFya0JhdGNo KSAqLwogCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBoZWFkQmF0Y2gpOwogCisJCS8q CisJCSAqIElmIHdlJ3JlIGFib3V0IHRvIHJlbGVhc2UgdGhlIGJhdGNoIHRoYXQgcHJlZmV0Y2hQ b3MgY3VycmVudGx5CisJCSAqIHBvaW50cyB0bywganVzdCBpbnZhbGlkYXRlIHByZWZldGNoUG9z LiAgV2UnbGwgcmVpbml0aWFsaXplIGl0CisJCSAqIHVzaW5nIHNjYW5Qb3MgaWYgYW5kIHdoZW4g aGVhcGFtX2dldG5leHRfc3RyZWFtIGlzIG5leHQgY2FsbGVkLiAoV2UKKwkJICogbXVzdCBhdm9p ZCBjb25mdXNpbmcgYSBwcmVmZXRjaFBvcy0+YmF0Y2ggdGhhdCdzIGFjdHVhbGx5IGJlZm9yZQor CQkgKiBoZWFkQmF0Y2ggd2l0aCBvbmUgdGhhdCdzIGFmdGVyIG5leHRCYXRjaCBkdWUgdG8gdWlu dDggb3ZlcmZsb3c7CisJCSAqIHNpbXBsZXN0IHdheSBpcyB0byBpbnZhbGlkYXRlIHByZWZldGNo UG9zIGxpa2UgdGhpcy4pCisJCSAqLworCQlpZiAocHJlZmV0Y2hQb3MtPnZhbGlkICYmCisJCQlw cmVmZXRjaFBvcy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpCisJCQlwcmVmZXRj aFBvcy0+dmFsaWQgPSBmYWxzZTsKKwogCQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJp bmcgYnVmZmVyICovCiAJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKys7CisKKwkJaWYgKGhzY2Fu LT54c19wYXVzZWQpCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgc2NhbidzIHJlYWQgc3RyZWFtIHdh cyBwYXVzZWQgYnkgaGVhcGFtX2dldG5leHRfc3RyZWFtIGR1ZQorCQkJICogdG8gZXhoYXVzdGlu ZyBhbGwgYXZhaWxhYmxlIGZyZWUgYmF0Y2ggc2xvdHMuICBXZSBqdXN0IGZyZWVkIHVwCisJCQkg KiBvbmUgc3VjaCBzbG90IG5vdywgdGhvdWdoLiAgUmVzdW1lIHRoZSByZWFkIHN0cmVhbSB0byBy ZS1lbmFibGUKKwkJCSAqIHByZWZldGNoaW5nLgorCQkJICovCisJCQlBc3NlcnQoIWluZGV4X3Nj YW5fYmF0Y2hfZnVsbChzY2FuKSk7CisJCQlyZWFkX3N0cmVhbV9yZXN1bWUoaHNjYW4tPnhzX3Jl YWRfc3RyZWFtKTsKKwkJCWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJfQogCX0KIAogCS8q IEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFsd2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBo ZWFkQmF0Y2ggKi8KIAlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+ YmF0Y2gpOworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CiAKIAlyZXR1cm4gaGVhcGFtX2Jh dGNoX3JldHVybl90aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9z LAogCQkJCQkJCQkgICBhbGxfdmlzaWJsZSk7CiB9CiAKKy8qCisgKiBoZWFwYW1fZ2V0bmV4dF9z dHJlYW0KKyAqCQlyZXR1cm4gdGhlIG5leHQgYmxvY2sgdG8gcGFzcyB0byB0aGUgcmVhZCBzdHJl YW0KKyAqCisgKiBUaGUgaW5pdGlhbCBiYXRjaCBpcyBhbHdheXMgbG9hZGVkIGJ5IGhlYXBhbV9i YXRjaF9nZXRuZXh0X3RpZC4gIFdlIGRvbid0CisgKiBnZXQgY2FsbGVkIHVudGlsIHRoZSBmaXJz dCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcigpIGNhbGwsIHdoZW4gYSBoZWFwCisgKiBibG9jayBp cyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2NhbidzIHN0cmVhbSBmb3IgdGhlIGZpcnN0IHRpbWUuCisg KgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBzdG9yZWQgaW4gcHJlZmV0 Y2hQb3MuICBJdCBpcyB0eXBpY2FsIGZvcgorICogcHJlZmV0Y2hQb3MgdG8gY29uc2lzdGVudGx5 IHN0YXkgYWhlYWQgb2YgdGhlIHNjYW5Qb3MgcG9zaXRpb24gdGhhdCdzIHVzZWQgdG8KKyAqIHRy YWNrIHRoZSBuZXh0IFRJRCB0byBiZSByZXR1cm5lZCB0byB0aGUgc2NhbiBieSBoZWFwYW1fYmF0 Y2hfZ2V0bmV4dF90aWQKKyAqIGFmdGVyIHRoZSBmaXJzdCB0aW1lIHdlIGdldCBjYWxsZWQuICBI b3dldmVyLCB0aGF0IGlzbid0IGEgcHJlY29uZGl0aW9uLgorICogVGhlcmUgaXMgYSBzdHJpY3Qg cG9zdGNvbmRpdGlvbiwgdGhvdWdoOiB3aGVuIHdlIHJldHVybiB3ZSdsbCBhbHdheXMgbGVhdmUK KyAqIHNjYW5Qb3MgPD0gcHJlZmV0Y2hQb3MgKGV4Y2VwdCBpbiBjYXNlcyB3aGVyZSB3ZSByZXR1 cm4gSW52YWxpZEJsb2NrTnVtYmVyKS4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1f Z2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICpjYWxsYmFja19wcml2YXRl X2RhdGEsCisJCQkJCSAgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mg c2NhbiA9IChJbmRleFNjYW5EZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJSW5kZXhGZXRj aEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZl dGNoOworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1 ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsK KwlCYXRjaFJpbmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNo UG9zOworCVNjYW5EaXJlY3Rpb24geHNfcmVhZF9zdHJlYW1fZGlyID0gaHNjYW4tPnhzX3JlYWRf c3RyZWFtX2RpcjsKKwlJbmRleFNjYW5CYXRjaCBwcmVmZXRjaEJhdGNoOworCWJvb2wJCWZyb21T Y2FuUG9zID0gZmFsc2U7CisKKwkvKgorCSAqIHNjYW5Qb3MgbXVzdCBhbHdheXMgYmUgdmFsaWQg d2hlbiBwcmVmZXRjaGluZyB0YWtlcyBwbGFjZS4gIFRoZXJlIGhhcworCSAqIHRvIGJlIGF0IGxl YXN0IG9uZSBiYXRjaCwgbG9hZGVkIGFzIG91ciBzY2FuQmF0Y2guICBUaGUgc2NhbiBkaXJlY3Rp b24KKwkgKiBtdXN0IGJlIGVzdGFibGlzaGVkLCB0b28uCisJICovCisJQXNzZXJ0KGluZGV4X3Nj YW5fYmF0Y2hfY291bnQoc2NhbikgPiAwKTsKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCUFz c2VydChzY2FuUG9zLT52YWxpZCk7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsKKwlBc3Nl cnQoeHNfcmVhZF9zdHJlYW1fZGlyICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8q CisJICogcHJlZmV0Y2hQb3MgbWlnaHQgbm90IHlldCBiZSB2YWxpZC4gIEl0IG1pZ2h0IGhhdmUg YWxzbyBmYWxsZW4gYmVoaW5kCisJICogc2NhblBvcy4gIERlYWwgd2l0aCBib3RoLgorCSAqCisJ ICogSWYgcHJlZmV0Y2hQb3MgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldCwgdGhhdCB0eXBp Y2FsbHkgaW5kaWNhdGVzCisJICogdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9y IHRoZSBlbnRpcmUgc2Nhbi4gIFdlIGluaXRpYWxpemUKKwkgKiBwcmVmZXRjaFBvcyB1c2luZyB0 aGUgY3VycmVudCBzY2FuUG9zLCBzaW5jZSB0aGUgY3VycmVudCBzY2FuQmF0Y2gKKwkgKiBpdGVt J3MgVElEIHNob3VsZCBoYXZlIGl0cyBibG9jayBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIHJlYWQg c3RyZWFtCisJICogZmlyc3QuICBJdCdzIGxpa2VseSB0aGF0IHByZWZldGNoUG9zIHdpbGwgZ2V0 IGFoZWFkIG9mIHNjYW5Qb3MgYmVmb3JlCisJICogbG9uZywgYnV0IHRoYXQgaGFzbid0IGhhcHBl bmVkIHlldC4KKwkgKgorCSAqIEl0J3MgYWxzbyBwb3NzaWJsZSBmb3IgcHJlZmV0Y2hQb3MgdG8g ImZhbGwgYmVoaW5kIiBzY2FuUG9zLCBhdCBsZWFzdAorCSAqIGluIGEgdHJpdmlhbCBzZW5zZTog aWYgbWFueSBhZGphY2VudCBpdGVtcyBhcmUgcmV0dXJuZWQgdGhhdCBjb250YWluCisJICogVElE cyB0aGF0IHBvaW50IHRvIHRoZSBzYW1lIGhlYXAgYmxvY2ssIHNjYW5Qb3MgY2FuIGFjdHVhbGx5 IG92ZXJ0YWtlCisJICogcHJlZmV0Y2hQb3MgKHByZWZldGNoUG9zIGNhbid0IGFkdmFuY2UgdW50 aWwgdGhlIHNjYW4gYWN0dWFsbHkgY2FsbHMKKwkgKiByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciku ICBSZWluaXRpYWxpemluZyBmcm9tIHNjYW5Qb3MgaXMgZW5vdWdoIHRvCisJICogZW5zdXJlIHRo YXQgcHJlZmV0Y2hQb3Mgc3RpbGwgZmV0Y2hlcyB0aGUgbmV4dCBoZWFwIGJsb2NrIHRoYXQgc2Nh blBvcworCSAqIHdpbGwgcmVxdWlyZSAocHJlZmV0Y2hQb3MgY2FuIG5ldmVyIGZhbGwgYmVoaW5k ICJieSBtb3JlIHRoYW4gb25lIGdyb3VwCisJICogb2YgaXRlbXMgdGhhdCBhbGwgcG9pbnQgdG8g dGhlIHNhbWUgaGVhcCBibG9jayIsIHNvIHRoaXMgaXMgc2FmZSkuCisJICoKKwkgKiBOb3RlOiB3 aGVuIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCBmcmVlcyBhIGJhdGNoIHRoYXQgcHJlZmV0Y2hQ b3MKKwkgKiBwb2ludHMgdG8sIGl0J2xsIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgZm9yIHVzLiAg VGhpcyByZW1vdmVzIGFueQorCSAqIGRhbmdlciBvZiBwcmVmZXRjaFBvcy5iYXRjaCBmYWxsaW5n IHNvIGZhciBiZWhpbmQgc2NhblBvcy5iYXRjaCB0aGF0IGl0CisJICogd3JhcHMgYXJvdW5kIChh bmQgYXBwZWFycyB0byBiZSBhaGVhZCBvZiBzY2FuUG9zIGluc3RlYWQgb2YgYmVoaW5kIGl0KS4K KwkgKi8KKwlpZiAoIXByZWZldGNoUG9zLT52YWxpZCB8fAorCQlpbmRleF9zY2FuX3Bvc19jbXAo cHJlZmV0Y2hQb3MsIHNjYW5Qb3MsIHhzX3JlYWRfc3RyZWFtX2RpcikgPCAwKQorCXsKKwkJaHNj YW4tPnhzX3ByZWZldGNoX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQkqcHJlZmV0Y2hQ b3MgPSAqc2NhblBvczsKKwkJZnJvbVNjYW5Qb3MgPSB0cnVlOworCisJCS8qCisJCSAqIFdlIG11 c3QgYXZvaWQgaG9sZGluZyBvbiB0byBhbnkgYmF0Y2gncyBidWZmZXIgcGluIGZvciBtb3JlIHRo YW4gYW4KKwkJICogaW5zdGFudCwgdG8gYXZvaWQgdW5kZXNpcmFibGUgaW50ZXJhY3Rpb25zIHdp dGggdGhlIHNjYW4ncyByZWFkCisJCSAqIHN0cmVhbS4gIFBsYWluIGluZGV4IHNjYW5zIGFsd2F5 cyBnZXQgdGhpcyBiZWhhdmlvciBhdXRvbWF0aWNhbGx5LgorCQkgKiBJbmRleC1vbmx5IHNjYW5z IGFyZSBtYWRlIHRvIGRyb3AgdGhlaXIgYnVmZmVyIHBpbiBlYWdlcmx5IHRocm91Z2gKKwkJICog YSBwb2xpY3kgb2YgYWx3YXlzIGVhZ2VybHkgc2V0dGluZyBhbGwgdGhlIGJhdGNoIGl0ZW0ncyB2 aXNpYmlsaXR5CisJCSAqIGluZm8gaW4gb25lIGdvLgorCQkgKi8KKwkJaWYgKHNjYW4tPnhzX3dh bnRfaXR1cCkKKwkJeworCQkJLyogTWFrZSBoZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5 IGRyb3AgYmF0Y2ggcGlucyBlYWdlcmx5ICovCisJCQloc2Nhbi0+eHNfdm1faXRlbXMgPSBzY2Fu LT5tYXhpdGVtc2JhdGNoOworCisJCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIG5ldyBwcmVmZXRj aEJhdGNoIGhvbGRzIG5vIHBpbiAqLworCQkJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0 Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKTsKKwkJCWlmIChCdWZmZXJJc1ZhbGlkKHByZWZl dGNoQmF0Y2gtPmJ1ZikpCisJCQl7CisJCQkJSGVhcEJhdGNoRGF0YSAqaGJhdGNoID0gaGVhcF9i YXRjaF9kYXRhKHByZWZldGNoQmF0Y2gsIHNjYW4pOworCisJCQkJLyogU2V0IHZpc2liaWxpdHkg aW5mbyBub3Qgc2V0IHRocm91Z2ggc2NhbkJhdGNoICovCisJCQkJaGVhcGFtX2JhdGNoX3Jlc29s dmVfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQlwcmVm ZXRjaEJhdGNoLCBoYmF0Y2gsCisJCQkJCQkJCQkJCQlwcmVmZXRjaFBvcyk7CisJCQl9CisKKwkJ CS8qIE5vIGJ1ZmZlciBwaW4gd2lsbCBiZSBrZXB0IG9uIGFueSBiYXRjaCBmcm9tIGhlcmUgb24g Ki8KKwkJCUFzc2VydCghQnVmZmVySXNWYWxpZChwcmVmZXRjaEJhdGNoLT5idWYpKTsKKwkJfQor CX0KKworCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNoUG9z LT5iYXRjaCk7CisJZm9yICg7OykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtOworCQlC bG9ja051bWJlciBwcmVmZXRjaF9ibG9jazsKKworCQkvKgorCQkgKiBXZSBuZXZlciBjYWxsIGFt Z2V0YmF0Y2ggd2l0aG91dCBpbW1lZGlhdGVseSBkcm9wcGluZyB0aGUgYmF0Y2gncworCQkgKiBi dWZmZXIgcGluICh3aGljaCByZXF1aXJlcyBzcGVjaWFsIGNhcmUgZHVyaW5nIGluZGV4LW9ubHkg c2NhbnMpLgorCQkgKiBUaGUgcmVhZCBzdHJlYW0gaXMgc2Vuc2l0aXZlIHRvIGJ1ZmZlciBzaG9y dGFnZXMsIHNvIHdlIGRlZmVuc2l2ZWx5CisJCSAqIGF2b2lkIGFueXRoaW5nIHRoYXQgdmlzaWJs eSBhZmZlY3RzIHRoZSBwZXItYmFja2VuZCBidWZmZXIgbGltaXQuCisJCSAqLworCQlBc3NlcnQo IUJ1ZmZlcklzVmFsaWQocHJlZmV0Y2hCYXRjaC0+YnVmKSk7CisKKwkJaWYgKGZyb21TY2FuUG9z KQorCQl7CisJCQkvKgorCQkJICogRG9uJ3QgaW5jcmVtZW50IGl0ZW0gd2hlbiBwcmVmZXRjaFBv cyB3YXMganVzdCBpbml0aWFsaXplZAorCQkJICogdXNpbmcgc2NhblBvcy4gIFdlJ2xsIHJldHVy biB0aGUgc2NhblBvcyBpdGVtJ3MgaGVhcCBibG9jaworCQkJICogZGlyZWN0bHkgb24gdGhlIGZp cnN0IGNhbGwgaGVyZS4gIEluIG90aGVyIHdvcmRzLCB3ZSdsbCByZXR1cm4KKwkJCSAqIHRoZSBo ZWFwIGJsb2NrIGZvciB0aGUgVElEIHBhc3NlZCB0byBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUK KwkJCSAqIGF0IHRoZSBwb2ludCB3aGVyZSBpdCBjYWxsZWQgcmVhZF9zdHJlYW1fbmV4dF9idWZm ZXIgZm9yIHRoZQorCQkJICogZmlyc3QgdGltZSBkdXJpbmcgdGhlIHNjYW4uCisJCQkgKi8KKwkJ CWZyb21TY2FuUG9zID0gZmFsc2U7CisJCX0KKwkJZWxzZSBpZiAoIWluZGV4X3NjYW5fcG9zX2Fk dmFuY2UoeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJCSBwcmVmZXRjaEJhdGNoLCBwcmVm ZXRjaFBvcykpCisJCXsKKwkJCS8qCisJCQkgKiBSYW4gb3V0IG9mIGl0ZW1zIGZyb20gcHJlZmV0 Y2hCYXRjaC4gIFRyeSB0byBhZHZhbmNlIHRvIHRoZQorCQkJICogc2NhbidzIG5leHQgYmF0Y2gu CisJCQkgKi8KKwkJCWlmICh1bmxpa2VseShpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpKQor CQkJeworCQkJCS8qCisJCQkJICogQ2FuJ3QgYWR2YW5jZSBwcmVmZXRjaEJhdGNoIGJlY2F1c2Ug YWxsIGF2YWlsYWJsZQorCQkJCSAqIGJhdGNocmluZ2J1ZiBiYXRjaCBzbG90cyBhcmUgY3VycmVu dGx5IGluIHVzZS4KKwkJCQkgKgorCQkJCSAqIERlYWwgd2l0aCB0aGlzIGJ5IG1vbWVudGFyaWx5 IHBhdXNpbmcgdGhlIHJlYWQgc3RyZWFtLgorCQkJCSAqIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3Rp ZCB3aWxsIHJlc3VtZSB0aGUgcmVhZCBzdHJlYW0gbGF0ZXIsCisJCQkJICogdGhvdWdoIG9ubHkg YWZ0ZXIgc2NhblBvcyBoYXMgY29uc3VtZWQgYWxsIHJlbWFpbmluZyBpdGVtcworCQkJCSAqIGZy b20gc2NhbkJhdGNoIChhdCB3aGljaCBwb2ludCBzY2FuQmF0Y2ggd2lsbCBiZSBmcmVlZCwKKwkJ CQkgKiBtYWtpbmcgaXRzIHNsb3QgYXZhaWxhYmxlIGZvciByZXVzZSBieSBhIGxhdGVyIGJhdGNo KS4KKwkJCQkgKgorCQkJCSAqIEluIHByYWN0aWNlIHdlIGhhcmRseSBldmVyIG5lZWQgdG8gZG8g dGhpcy4gIEl0IHdvdWxkIGJlCisJCQkJICogcG9zc2libGUgdG8gYXZvaWQgdGhlIG5lZWQgdG8g cGF1c2UgdGhlIHJlYWQgc3RyZWFtIGJ5CisJCQkJICogZHluYW1pY2FsbHkgYWxsb2NhdGluZyBz bG90cywgYnV0IHRoYXQgd291bGQgYWRkIGNvbXBsZXhpdHkKKwkJCQkgKiBmb3Igbm8gcmVhbCBi ZW5lZml0LgorCQkJCSAqLworCQkJCWhzY2FuLT54c19wYXVzZWQgPSB0cnVlOworCQkJCXJldHVy biByZWFkX3N0cmVhbV9wYXVzZShzdHJlYW0pOworCQkJfQorCisJCQlwcmVmZXRjaEJhdGNoID0g aGVhcGFtX2JhdGNoX2dldG5leHQoc2NhbiwgeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJ CQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKTsKKwkJCWlmICghcHJlZmV0Y2hCYXRjaCkK KwkJCXsKKwkJCQkvKgorCQkJCSAqIEZhaWxlZCB0byBsb2FkIG5leHQgYmF0Y2gsIHNvIGFsbCB0 aGUgYmF0Y2hlcyB0aGF0IHRoZSBzY2FuCisJCQkJICogd2lsbCBldmVyIHJlcXVpcmUgKGJhcnJp bmcgYSBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24pIGFyZQorCQkJCSAqIG5vdyBsb2FkZWQKKwkJ CQkgKi8KKwkJCQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworCQkJfQorCisJCQkvKiBQb3Np dGlvbiBwcmVmZXRjaFBvcyB0byB0aGUgc3RhcnQgb2YgbmV3IHByZWZldGNoQmF0Y2ggKi8KKwkJ CWluZGV4X3NjYW5fcG9zX25leHRiYXRjaCh4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkg cHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MpOworCisJCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVw ICYmIEJ1ZmZlcklzVmFsaWQocHJlZmV0Y2hCYXRjaC0+YnVmKSkKKwkJCXsKKwkJCQlIZWFwQmF0 Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEocHJlZmV0Y2hCYXRjaCwgc2Nhbik7CisK KwkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBlbnRpcmUg YmF0Y2ggKi8KKwkJCQloZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5KHNjYW4sIHhzX3Jl YWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJCXByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJ CQkJCQkJCXByZWZldGNoUG9zKTsKKwkJCX0KKworCQkJLyogaGVhcGFtX2JhdGNoX3Jlc29sdmVf dmlzaWJpbGl0eSBtdXN0IGRyb3AgYnVmZmVyIHBpbiAqLworCQkJQXNzZXJ0KCFCdWZmZXJJc1Zh bGlkKHByZWZldGNoQmF0Y2gtPmJ1ZikpOworCQl9CisKKwkJLyoKKwkJICogcHJlZmV0Y2hQb3Mg bm93IHBvaW50cyB0byB0aGUgbmV4dCBpdGVtIHdob3NlIFRJRCdzIGhlYXAgYmxvY2sKKwkJICog bnVtYmVyIG1pZ2h0IG5lZWQgdG8gYmUgcHJlZmV0Y2hlZAorCQkgKi8KKwkJQXNzZXJ0KGluZGV4 X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKSA9PSBwcmVmZXRjaEJhdGNoKTsK KwkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID49IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbSAm JgorCQkJICAgcHJlZmV0Y2hQb3MtPml0ZW0gPD0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0pOwor CQkvKiBzY2FuUG9zIGlzIGFsd2F5cyA8PSBwcmVmZXRjaFBvcyB3aGVuIHdlIHJldHVybiAqLwor CQlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNjYW5Qb3MsIHByZWZldGNoUG9zLCB4c19yZWFk X3N0cmVhbV9kaXIpIDw9IDApOworCisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJ CUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShwcmVmZXRjaEJhdGNoLCBz Y2FuKTsKKworCQkJQXNzZXJ0KGhiYXRjaC0+dmlzSW5mb1twcmVmZXRjaFBvcy0+aXRlbV0gJiBC QVRDSF9WSVNfQ0hFQ0tFRCk7CisJCQlpZiAoaGJhdGNoLT52aXNJbmZvW3ByZWZldGNoUG9zLT5p dGVtXSAmIEJBVENIX1ZJU19BTExfVklTSUJMRSkKKwkJCXsKKwkJCQkvKiBpdGVtIGlzIGtub3du IHRvIGJlIGFsbC12aXNpYmxlIC0tIGRvbid0IHByZWZldGNoICovCisJCQkJY29udGludWU7CisJ CQl9CisJCX0KKworCQlpdGVtID0gJnByZWZldGNoQmF0Y2gtPml0ZW1zW3ByZWZldGNoUG9zLT5p dGVtXTsKKwkJcHJlZmV0Y2hfYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZpdGVt LT50YWJsZVRpZCk7CisKKwkJaWYgKHByZWZldGNoX2Jsb2NrID09IGhzY2FuLT54c19wcmVmZXRj aF9ibG9jaykKKwkJeworCQkJLyoKKwkJCSAqIHByZWZldGNoX2Jsb2NrIG1hdGNoZXMgdGhlIGxh c3QgcHJlZmV0Y2hQb3MgaXRlbSdzIFRJRCdzIGhlYXAKKwkJCSAqIGJsb2NrIG51bWJlcjsgd2Ug bXVzdCBub3QgcmV0dXJuIHRoZSBzYW1lIHByZWZldGNoX2Jsb2NrIHR3aWNlCisJCQkgKiAodHdp Y2UgaW4gc3VjY2Vzc2lvbikKKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBXZSBo YXZlIGEgbmV3IGhlYXAgYmxvY2sgbnVtYmVyIHRvIHJldHVybiB0byByZWFkIHN0cmVhbSAqLwor CQloc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2sgPSBwcmVmZXRjaF9ibG9jazsKKwkJcmV0dXJuIHBy ZWZldGNoX2Jsb2NrOworCX0KKworCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7Cit9CisKIC8q IC0tLS0tLS0tLS0tLS0tLS0KICAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRoZSBzY2FuJ3Mg bmV4dCBoZWFwIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5k ZXggY2RmYjllNzYyLi4xZDZmYWNmMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0 Y2guYwpAQCAtMTAsNyArMTAsMTAgQEAKICAqIGFwcHJvYWNoIGVuYWJsZXMgZWZmaWNpZW50IHBy ZWZldGNoaW5nIG9mIHRhYmxlIEFNIGJsb2NrcyBkdXJpbmcgb3JkZXJlZAogICogaW5kZXggc2Nh bnMuCiAgKgotICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5IHNw YWNlIG9yZGVyLgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5 IHNwYWNlIG9yZGVyLiAgVGhpcyBhbGxvd3MgdGhlCisgKiB0YWJsZSBBTSB0byBtYWludGFpbiBh biBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZTogaXRzIHJlYWQgc3RyZWFtCisgKiBjYWxsYmFj ayBpcyB0aGVyZWJ5IGFibGUgdG8gcmVxdWVzdCB0YWJsZSBibG9ja3MgcmVmZXJlbmNlZCBieSBp bmRleCBwYWdlcworICogdGhhdCBhcmUgd2VsbCBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBv c2l0aW9uJ3MgaW5kZXggcGFnZS4KICAqCiAgKiBUaGVyZSdzIHRocmVlIHR5cGVzIG9mIGZ1bmN0 aW9ucyBpbiB0aGlzIG1vZHVsZToKICAqCkBAIC0yOCw2ICszMSwyOCBAQAogICogICAgQU1zIHRo YXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4gIFRoZXNlIG1hbmFnZSBiYXRj aAogICogICAgYWxsb2NhdGlvbiwgaW5kZXggcGFnZSBidWZmZXIgbG9jayByZWxlYXNlLCBhbmQg YmF0Y2ggbWVtb3J5IHJlY3ljbGluZy4KICAqCisgKiBUaGVzZSB0aHJlZSBsYXllcnMgY29vcmRp bmF0ZSB3aXRob3V0IGV4cGxpY2l0IGNvdXBsaW5nOiB0aGUgY29yZSBsaWZlY3ljbGUKKyAqIGZ1 bmN0aW9ucyBhc3N1bWUgdGhhdCB0YWJsZSBBTXMgdXNlIHNjYW5Qb3Mvc2NhbkJhdGNoIGFuZCBw cmVmZXRjaFBvcy8KKyAqIHByZWZldGNoQmF0Y2ggaW4gYSBzdGFuZGFyZGl6ZWQgd2F5IChzZWUg aGVhcGFtX2hhbmRsZXIuYyBmb3IgdGhlIHJlZmVyZW5jZQorICogaW1wbGVtZW50YXRpb24pLCB3 aGlsZSB0YWJsZSBBTXMgYXNzdW1lIHRoYXQgaW5kZXggQU1zIGZyZWUgYW5kIHVubG9jaworICog YmF0Y2hlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlbnRpb25zIGVzdGFibGlzaGVkIGhlcmUuICBT ZWUgaW5kZXhhbS5zZ21sCisgKiBmb3IgdGhlIGZ1bGwgc3BlY2lmaWNhdGlvbiBvZiB0aGUgYW1n ZXRiYXRjaC9hbWtpbGxpdGVtc2JhdGNoIGNvbnRyYWN0LgorICoKKyAqIFRoZSB0YWJsZSBBTSBm dWxseSBjb250cm9scyB0aGUgcmVhZCBzdHJlYW0gYXMgaXRzIG93biBwcml2YXRlIHN0YXRlLgor ICogV2hlbiB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcywgdGhlIHRhYmxlIEFNIG11c3QgaW1t ZWRpYXRlbHkgcmVzZXQgaXRzCisgKiByZWFkIHN0cmVhbSBhbmQgaW52YWxpZGF0ZSBwcmVmZXRj aFBvcyAtLSBibG9ja3MgYWxyZWFkeSByZXF1ZXN0ZWQgdmlhCisgKiBwcmVmZXRjaFBvcyB3aWxs IG5vIGxvbmdlciBtYXRjaCB3aGF0IHNjYW5Qb3MgbmVlZHMgdG8gcmV0dXJuLgorICoKKyAqIENy b3NzaW5nIGEgYmF0Y2ggYm91bmRhcnkgaW4gYSBuZXcgc2NhbiBkaXJlY3Rpb24gaXMgYSBzZXBh cmF0ZSBwcm9jZXNzLAorICogaGFuZGxlZCBoZXJlOiB0YWJsZSBBTXMgYXJlIHJlcXVpcmVkIHRv IGNhbGwgdGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZQorICogdG8gbGVhdmUgdGhlIHNjYW4n cyBiYXRjaCByaW5nIGJ1ZmZlciBpbiBhIGNvbnNpc3RlbnQgc3RhdGUuICBUaGUgY3VycmVudAor ICogaW1wbGVtZW50YXRpb24gaGFuZGxlcyB0aGlzIGJ5IHNpbXBseSBkaXNjYXJkaW5nIG1vc3Qg YmF0Y2hlcy4gIFRoZSBrZXkKKyAqIGludmFyaWFudCBpcyB0aGF0IGFsbCBsb2FkZWQgYmF0Y2hl cyBtdXN0IGJlIGluIGEgY29uc2lzdGVudCBzY2FuIGRpcmVjdGlvbgorICogb3JkZXIuICAoRHVy aW5nIGNyb3NzLWJhdGNoIGRpcmVjdGlvbiBjaGFuZ2VzLCB0aGUgY3VycmVudCBzY2FuQmF0Y2gg d2lsbAorICogaGF2ZSBpdHMgSW5kZXhTY2FuQmF0Y2hEYXRhLmRpciBmbGlwcGVkLCBidXQgd2Ug aGF2ZSBubyBwcm92aXNpb24gZm9yCisgKiBrZWVwaW5nIGFsbCBvdGhlciBsb2FkZWQgYmF0Y2hl cy4gIEl0J3Mgbm90IGNsZWFyIHRoYXQgaXQnZCBiZSB1c2VmdWwgdG8KKyAqIGhvbGQgb250byB0 aGVtOyB0aGUgc2NhbiBkaXJlY3Rpb24gaXMgdW5saWtlbHkgdG8gY2hhbmdlIGJhY2suKQorICoK ICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKICAqCkBAIC02MSw2ICs4Niw3IEBAIGlu ZGV4X2JhdGNoc2Nhbl9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCXNjYW4tPmJhdGNocmlu Z2J1Zi5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3Mu dmFsaWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQgPSBm YWxzZTsKIAogCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOwogCXNjYW4tPmJh dGNocmluZ2J1Zi5oZWFkQmF0Y2ggPSAwOwkvKiBpbml0aWFsIGhlYWQgYmF0Y2ggKi8KQEAgLTg1 LDYgKzExMSw3IEBAIGluZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCiAK IAliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsKIAliYXRjaHJpbmdidWYtPm1h cmtQb3MudmFsaWQgPSBmYWxzZTsKKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0g ZmFsc2U7CiAKIAkvKgogCSAqIEVuc3VyZSB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCB3b24ndCBz a2lwIHRoZSBvbGQgbWFya0JhdGNoIGluIHRoZSBsb29wCkBAIC0yMjEsNyArMjQ4LDEzIEBAIGlu ZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiB0aGUgY3VycmVu dCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCiAgKgogICogV2UganVzdCBkaXNjYXJkIGFsbCBiYXRj aGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAotICogZXhjZXB0 IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4K KyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBz Y2FuQmF0Y2guICBXZSBhbHdheXMKKyAqIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBUaGUgcmVh ZCBzdHJlYW0gYW5kIHJlbGF0ZWQgcHJlZmV0Y2hpbmcgc3RhdGUgYXJlCisgKiByZXNldCBieSB0 YWJsZV9pbmRleF9mZXRjaF9yZXNldCgpLCBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24uICBU aGlzCisgKiBhcHByb2FjaCBrZWVwcyB0aGluZ3Mgc2ltcGxlIGZvciB0YWJsZSBBTXM6IG1vc3Qg Y29kZSB0aGF0IGRlYWxzIHdpdGgKKyAqIGJhdGNoZXMgaXMgdGhlcmVieSBhYmxlIHRvIGFzc3Vt ZSB0aGF0IHRoZSBjb21tb24gY2FzZSB3aGVyZSBzY2FuIGRpcmVjdGlvbgorICogbmV2ZXIgY2hh bmdlcyBpcyB0aGUgb25seSBjYXNlICh0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlIHRha2Vz IGEKKyAqIHNpbWlsYXIgYXBwcm9hY2ggdG8gaGFuZGxpbmcgYSBjcm9zcy1iYXRjaCBjaGFuZ2Ug aW4gc2NhbiBkaXJlY3Rpb24pLgogICovCiB2b2lkCiBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9w b3MoSW5kZXhTY2FuRGVzYyBzY2FuKQpAQCAtMjM2LDYgKzI2OSwxNCBAQCBpbmRleF9iYXRjaHNj YW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydCghYmF0Y2hyaW5nYnVm LT5kb25lKTsKIAlBc3NlcnQobWFya1Bvcy0+dmFsaWQpOwogCisJLyoKKwkgKiBSZXN0b3Jpbmcg YSBtYXJrIGFsd2F5cyByZXF1aXJlcyBzdG9wcGluZyBwcmVmZXRjaGluZy4gIFRoaXMgaXMgc2lt aWxhcgorCSAqIHRvIHRoZSBoYW5kbGluZyB0YWJsZSBBTXMgaW1wbGVtZW50IHRvIGRlYWwgd2l0 aCBhIHR1cGxlLWxldmVsIGNoYW5nZQorCSAqIGluIHRoZSBzY2FuJ3MgZGlyZWN0aW9uLiAgVGhl IHJlYWQgc3RyZWFtIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXQKKwkgKiBieSB0aGUgY2Fs bGVyICh2aWEgdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQpLgorCSAqLworCWJhdGNocmluZ2J1Zi0+ cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKKwogCWlmIChzY2FuQmF0Y2ggPT0gbWFya0JhdGNo KQogCXsKIAkJLyogbWFya0JhdGNoIGlzIGFscmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0IGNoYW5n ZSBiYXRjaHJpbmdidWYgKi8KQEAgLTMwNSw2ICszNDYsMTMgQEAgaW5kZXhfYmF0Y2hzY2FuX3Jl c3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqIHBvaW50IG9uIGJhdGNocmluZ2J1ZiB3 aWxsIGxvb2sgYXMgaWYgb3VyIG5ldyBzY2FuIGRpcmVjdGlvbiBoYWQgYmVlbiB1c2VkCiAgKiBm cm9tIHRoZSBzdGFydC4gIFRoaXMgYXBwcm9hY2ggaXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVu dCwgYnV0IGl0IHdvcmtzCiAgKiB3ZWxsIGVub3VnaCBmb3Igd2hhdCBvdWdodCB0byBiZSBhIHJl bGF0aXZlbHkgcmFyZSBvY2N1cnJlbmNlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgcmVzZXQg dGhlIHNjYW4ncyByZWFkIHN0cmVhbSBiZWZvcmUgY2FsbGluZyBoZXJlLiAgVGhhdAorICogbmVl ZHMgdG8gaGFwcGVuIGFzIHNvb24gYXMgdGhlIHNjYW4gcmVxdWVzdHMgYSB0dXBsZSBpbiB3aGF0 ZXZlciBzY2FuCisgKiBkaXJlY3Rpb24gaXMgb3Bwb3NpdGUtdG8tY3VycmVudC4gIFdlIG9ubHkg ZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZQorICogc2NhbiBiYWNrcyB1cCBieSBlbm91Z2gg aXRlbXMgdG8gY3Jvc3MgYSBiYXRjaCBib3VuZGFyeSAod2hlbiB0aGUgc2NhbgorICogcmVzdW1l cyBzY2FubmluZyBpbiBpdHMgb3JpZ2luYWwgZGlyZWN0aW9uL2VuZHMgYmVmb3JlIGNyb3NzaW5n IGEgYm91bmRhcnksCisgKiB0aGVyZSBpc24ndCBhbnkgbmVlZCB0byBjYWxsIGhlcmUpLgogICov CiB2b2lkCiB0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2NhbikK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggZTc1NTc3YTdlLi4zOTM5MzkxYWUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC0xODYsNyArMTg2LDcgQEAgaW50ZXJmYWNlLiAgKFNl ZSBhbHNvLCBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sKS4KIEJsb2NraW5nIFZBQ1VVTSBsaWtl IHRoaXMgY2FuIGJlIGRpc3J1cHRpdmUsIHNvIHRhYmxlIEFNcyBhdm9pZCBpdCB3aGVuZXZlcgog cG9zc2libGUuICBUaGUgaGVhcCB0YWJsZSBBTSB1c3VhbGx5IGRyb3BzIGxlYWYgcGFnZSBwaW5z IHJpZ2h0IGF3YXksIHRob3VnaAogbm90IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkND IHNuYXBzaG90LiAgSW5kZXgtb25seSBzY2FucyBtYXkgYWxzbwotcmV0YWluIHBpbnMgaW4gc29t ZSBjYXNlcy4KK3JldGFpbiBwaW5zIGluIHNvbWUgY2FzZXMsIHRob3VnaCBwcmVmZXRjaGluZyBy ZXF1aXJlcyBkcm9wcGluZyB0aGVtLgogCiBPcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0 aW9uIHBlcmZvcm1zIHRoZSBzYW1lIHBhZ2UtbGV2ZWwKIG1vZGlmaWNhdGlvbnMgYXMgVkFDVVVN LCB3aGlsZSBvbmx5IGhvbGRpbmcgYW4gZXhjbHVzaXZlIGxvY2suICBUaGlzIGlzCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCA4OWNhNGUwOGIuLjc4ZDg3Y2Q4YiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNDUsNiArMTQ1LDcgQEAgaW50 CQkJbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CiBib29sCQllbmFibGVfc2Vx c2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJs ZV9pbmRleG9ubHlzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gg PSB0cnVlOwogYm9vbAkJZW5hYmxlX2JpdG1hcHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3Rp ZHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3NvcnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggY2Q1NGMxYTc0Li5lNzhjM2IxNWEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpAQCAtOTMwLDYgKzkzMCw4IEBAIHJlYWRfc3RyZWFt X25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkK IAogCQkvKiBMb29rLWFoZWFkIGRpc3RhbmNlIHJhbXBzIHVwIHJhcGlkbHkgYWZ0ZXIgd2UgZG8g SS9PLiAqLwogCQlkaXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFuY2UgKiAyOworCQlpZiAoZGlzdGFu Y2UgJiYgZGlzdGFuY2UgPCBQR19JTlQxNl9NQVgpCisJCQlkaXN0YW5jZSsrOwogCQlkaXN0YW5j ZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOwogCQlzdHJlYW0t PmRpc3RhbmNlID0gZGlzdGFuY2U7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3BhcmFtZXRlcnMuZGF0IGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1l dGVycy5kYXQKaW5kZXggYTVhMGVkZjI1Li43OGMzYzY0N2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CkBAIC04OTEsNiArODkxLDEzIEBACiAgIGJvb3RfdmFs ID0+ICd0cnVlJywKIH0sCiAKK3sgbmFtZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcs IHR5cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVS WV9UVU5JTkdfTUVUSE9EJywKKyAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyBwcmVmZXRjaGluZyBm b3IgaW5kZXggc2NhbnMgYW5kIGluZGV4LW9ubHktc2NhbnMuJywKKyAgZmxhZ3MgPT4gJ0dVQ19F WFBMQUlOJywKKyAgdmFyaWFibGUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLAorICBi b290X3ZhbCA9PiAndHJ1ZScsCit9LAorCiB7IG5hbWUgPT4gJ2VuYWJsZV9tYXRlcmlhbCcsIHR5 cGUgPT4gJ2Jvb2wnLCBjb250ZXh0ID0+ICdQR0NfVVNFUlNFVCcsIGdyb3VwID0+ICdRVUVSWV9U VU5JTkdfTUVUSE9EJywKICAgc2hvcnRfZGVzYyA9PiAnRW5hYmxlcyB0aGUgcGxhbm5lclwncyB1 c2Ugb2YgbWF0ZXJpYWxpemF0aW9uLicsCiAgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9z cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggZTY4NmQ4 OGFmLi5hYWQyNTZlYTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKQEAgLTQxNyw2ICs0MTcsNyBAQAogI2VuYWJsZV9pbmNyZW1lbnRhbF9zb3J0 ID0gb24KICNlbmFibGVfaW5kZXhzY2FuID0gb24KICNlbmFibGVfaW5kZXhvbmx5c2NhbiA9IG9u CisjZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IG9uCiAjZW5hYmxlX21hdGVyaWFsID0gb24K ICNlbmFibGVfbWVtb2l6ZSA9IG9uCiAjZW5hYmxlX21lcmdlam9pbiA9IG9uCmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5k ZXggOGNkZDgyNmZiLi40YTRhMDlhZDcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25maWcu c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTU3MTIsNiArNTcxMiwyMiBA QCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJs ZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJs aXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1pbmRleHNjYW4t cHJlZmV0Y2giIHhyZWZsYWJlbD0iZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCI+CisgICAgICA8 dGVybT48dmFybmFtZT5lbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoPC92YXJuYW1lPiAoPHR5cGU+ Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJu YW1lPmVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFy YW1ldGVyPC9wcmltYXJ5PgorICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIEVuYWJsZXMgb3IgZGlzYWJsZXMg cHJlZmV0Y2hpbmcgZm9yIGluZGV4LXNjYW4gYW5kIGluZGV4LW9ubHktc2NhbgorICAgICAgICBw bGFuIHR5cGVzLiAgUHJlZmV0Y2hpbmcgY2FuIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgcmVhZGlu ZyB0YWJsZSBBTQorICAgICAgICBwYWdlcyBhaGVhZCBvZiB3aGVuIHRoZXkgYXJlIG5lZWRlZCBk dXJpbmcgaW5kZXggc2NhbnMuICBUaGUgZGVmYXVsdAorICAgICAgICBpcyA8bGl0ZXJhbD5vbjwv bGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJs aXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1tYXRlcmlhbCIg eHJlZmxhYmVsPSJlbmFibGVfbWF0ZXJpYWwiPgogICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxl X21hdGVyaWFsPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0 ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dt bC9pbmRleGFtLnNnbWwKaW5kZXggMjEzYTA1YWQ4Li4xNDY5OTBlOWMgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApA QCAtODA4LDkgKzgwOCwxMiBAQCBhbWdldGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgIDxw YXJhPgogICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlz IGFuIGFsdGVybmF0aXZlIHRvCiAgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRo YXQgcmV0dXJucyBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGluIGJhdGNoZXMKLSAgIHJhdGhlciB0 aGFuIG9uZSBhdCBhIHRpbWUuICBCeSByZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJp ZXMgZnJvbSBhCi0gICBzaW5nbGUgaW5kZXggcGFnZSB0b2dldGhlciwgdGhlIHRhYmxlIEFNIGdh aW5zIHZpc2liaWxpdHkgaW50byB3aGljaCB0YWJsZQotICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVk IGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuIFRoaXMg ZW5hYmxlcyB0aGUgdGFibGUgYWNjZXNzIG1ldGhvZCB0bworICAgb3B0aW1pemUgdGFibGUgYmxv Y2sgYWNjZXNzIHBhdHRlcm5zIGFuZCBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4KKyAgIEJ5IHJl dHVybmluZyBhbGwgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBmcm9tIGEgc2luZ2xlIGluZGV4IHBh Z2UgdG9nZXRoZXIsCisgICB0aGUgdGFibGUgQU0gY2FuIHJlYWRhaGVhZCB0aHJvdWdoIHRoZSBp bmRleCBhbmQgaWRlbnRpZnkgd2hpY2ggdGFibGUKKyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCwg YWxsb3dpbmcgcHJlZmV0Y2hpbmcgb2YgdGFibGUgQU0gcGFnZXMgZHVyaW5nCisgICBvcmRlcmVk IGluZGV4IHNjYW5zLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0xMzQxLDYgKzEzNDQsNjAg QEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHks IE9pZCBvcGNpbnR5cGUpOwogICAgb3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVybmFsIGltcGxl bWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgogICA8L3BhcmE+ CiAKKyAgPHNlY3QyIGlkPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIj4KKyAgIDx0aXRsZT5UYWJs ZSBBTSBDb25zaWRlcmF0aW9ucyBmb3IgQmF0Y2ggU2Nhbm5pbmc8L3RpdGxlPgorCisgICA8cGFy YT4KKyAgICBUaGlzIHNlY3Rpb24gaXMgcHJpbWFyaWx5IHJlbGV2YW50IHRvCisgICAgPGxpbmsg bGlua2VuZD0idGFibGVhbSI+dGFibGUgYWNjZXNzIG1ldGhvZDwvbGluaz4gYXV0aG9ycy4KKyAg ICBXaGVuIGFuIGluZGV4IHNjYW4gdXNlcyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBpbnRlcmZhY2UsCisgICAgdGhlIHRhYmxlIEFNIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5h Z2luZyBwb3NpdGlvbiBzdGF0ZSB3aXRoaW4gdGhlCisgICAgPHN0cnVjdG5hbWU+SW5kZXhTY2Fu RGVzYzwvc3RydWN0bmFtZT4ncworICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVj dGZpZWxkPiBhbmQgZm9yIGNvbnRyb2xsaW5nIHdoZW4KKyAgICBidWZmZXIgcGlucyBvbiBpbmRl eCBwYWdlcyBhcmUgcmVsZWFzZWQuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSA8 c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHdpdGhpbgorICAgIDxzdHJ1 Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVjdGZpZWxkPiB0cmFja3Mgd2hpY2ggYmF0Y2ggYW5k IGl0ZW0gd2l0aGluCisgICAgdGhhdCBiYXRjaCB3aWxsIGJlIHJldHVybmVkIG5leHQgdG8gdGhl IGV4ZWN1dG9yLiAgVGhlIHRhYmxlIEFNIG11c3QgYWR2YW5jZQorICAgIDxzdHJ1Y3RmaWVsZD5z Y2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYXMgdHVwbGVzIGFyZSByZXR1cm5lZCBieQorICAgIDxmdW5j dGlvbj50YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Q8L2Z1bmN0aW9uPi4gIFRoZSBjb3JlIGNvZGUg bWF5IGFsc28KKyAgICBtb2RpZnkgdGhpcyBmaWVsZCBkdXJpbmcgb3BlcmF0aW9ucyBzdWNoIGFz IG1hcmsvcmVzdG9yZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3Rm aWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRyYWNrcyB0aGUgcG9zaXRpb24g dXNlZAorICAgIGZvciBJL08gcHJlZmV0Y2hpbmcuICBJdCBpcyBnZW5lcmFsbHkgYWR2YW5jZWQg YnkgaW5pdGlhbGl6aW5nIGl0IGZyb20KKyAgICA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0 ZmllbGQ+IHdpdGhpbiBhIHJlYWQgc3RyZWFtIGNhbGxiYWNrLCBhbGxvd2luZworICAgIHRoZSB0 YWJsZSBBTSB0byBwcmVmZXRjaCB0YWJsZSBibG9ja3MgcG9pbnRlZCB0byBieSBpdGVtcyB0aGF0 IGFyZSB3ZWxsCisgICAgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4gIEluaXRp YWxseQorICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IHN0YXJ0cyBh dAorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4sIGJ1dCBhcyB0aGUgcmVh ZCBzdHJlYW0gcmFtcHMgdXAgaXQgY2FuCisgICAgZ2V0IGZhciBhaGVhZCAmbWRhc2g7IHNwYW5u aW5nIG11bHRpcGxlIGluZGV4IHBhZ2VzIGlmIG5lY2Vzc2FyeSB0bworICAgIG1haW50YWluIGFu IG9wdGltYWwgSS9PIHByZWZldGNoIGRpc3RhbmNlIGZvciB0YWJsZSBibG9jayByZWFkcy4gIEEg bWFqb3IKKyAgICBnb2FsIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu dGVyZmFjZSBpcyB0byBhbGxvdyB0aGUKKyAgICB0YWJsZSBBTSB0byBwcmVmZXRjaCB3aXRob3V0 IGJlaW5nIGxpbWl0ZWQgdG8gaXRlbXMgZnJvbSB0aGUgY3VycmVudAorICAgIDxzdHJ1Y3RmaWVs ZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYmF0Y2gncyBpbmRleCBsZWFmIHBhZ2UuCisgICA8L3Bh cmE+CisKKyAgIDxwYXJhPgorICAgIEJvdGggPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZp ZWxkPiBhbmQKKyAgICA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8L3N0cnVjdGZpZWxkPiBhcmUg Y29udHJvbGxlZCBieSB0aGUgdGFibGUgQU0gYW5kCisgICAgY29yZSBjb2RlOyBpbmRleCBhY2Nl c3MgbWV0aG9kcyBzaG91bGQgbm90IGFjY2VzcyBvciBtYW5pcHVsYXRlIHRoZXNlCisgICAgZmll bGRzLiAgU2VlIHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvPC9maWxlbmFt ZT4KKyAgICBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgZXhhbXBsZS4KKyAgIDwvcGFy YT4KKworICAgPHBhcmE+CisgICAgQnVmZmVyIHBpbnMgb24gaW5kZXggcGFnZXMgcmV0dXJuZWQg YnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhcmUKKyAgICBtYW5hZ2VkIGJ5IHRo ZSB0YWJsZSBBTS4gIFNlZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhbmQK KyAgICA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGRlc2NyaXB0aW9ucyBp biA8eHJlZiBsaW5rZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4KKyAgICBmb3IgZGV0YWlscy4KKyAg IDwvcGFyYT4KKworICA8L3NlY3QyPgorCiAgPC9zZWN0MT4KIAogIDxzZWN0MSBpZD0iaW5kZXgt bG9ja2luZyI+CkBAIC0xNDM0LDMxICsxNDkxLDM5IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29t cGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIFRoaXMg c29sdXRpb24gcmVxdWlyZXMgdGhhdCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGlu ZGV4IHNjYW5zIGJlCiAgICA8cXVvdGU+c3luY2hyb25vdXM8L3F1b3RlPjogdGhlIHRhYmxlIEFN IG11c3QgZmV0Y2ggZWFjaCBoZWFwIHR1cGxlCiAgICBpbW1lZGlhdGVseSBhZnRlciBzY2Fubmlu ZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBlbnRyeS4gIFRoaXMgaXMKLSAgIGV4cGVuc2l2ZSBm b3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFuCi0gICA8cXVvdGU+YXN5bmNocm9ub3VzPC9xdW90 ZT4gc2NhbiBpbiB3aGljaCB3ZSBjb2xsZWN0IG1hbnkgVElEcyBmcm9tIHRoZQotICAgaW5kZXgs IGFuZCBvbmx5IHZpc2l0IHRoZSBoZWFwIHR1cGxlcyBzb21ldGltZSBsYXRlciwgcmVxdWlyZXMg bXVjaCBsZXNzCi0gICBpbmRleCBsb2NraW5nIG92ZXJoZWFkIGFuZCBjYW4gYWxsb3cgYSBtb3Jl IGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLgorICAgZXhwZW5zaXZlIGZvciBhIG51bWJl ciBvZiByZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu dGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25lZCB0bworICAgYWxsb3cgc2NhbnMgdG8g YmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+OiBieSBjb2xsZWN0aW5nIGJhdGNoZXMgb2YK KyAgIFRJRHMgZnJvbSBtdWx0aXBsZSBpbmRleCBwYWdlcywgdGhlIHRhYmxlIEFNIGNhbiBwcmVm ZXRjaCB0aGUgY29ycmVzcG9uZGluZworICAgdGFibGUgYmxvY2tzIHdlbGwgYWhlYWQgb2YgdGhl IGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAodXNpbmcgYXN5bmNocm9ub3VzCisgICBJL08gd2hlbiBh dmFpbGFibGUpLCByZXF1aXJpbmcgbXVjaCBsZXNzIGluZGV4IGxvY2tpbmcgb3ZlcmhlYWQgYW5k IGFsbG93aW5nCisgICBhIG1vcmUgZWZmaWNpZW50IGhlYXAgYWNjZXNzIHBhdHRlcm4uICBOb3Qg YWxsIHNjYW5zIGVuZCB1cCBiZWluZworICAgYXN5bmNocm9ub3VzIGluIHByYWN0aWNlLCBidXQg dGhlIGludGVyZmFjZSBpcyBkZXNpZ25lZCB0byBhbGxvdyBpdC4KICAgIFBlciB0aGUgYWJvdmUg YW5hbHlzaXMsIHdlIG11c3QgdXNlIHRoZSBzeW5jaHJvbm91cyBhcHByb2FjaCBmb3IKICAgIG5v bi1NVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMsIGJ1dCBhbiBhc3luY2hyb25vdXMgc2NhbiBpcyB3 b3JrYWJsZQogICAgZm9yIGEgcXVlcnkgdXNpbmcgYW4gTVZDQyBzbmFwc2hvdC4KICAgPC9wYXJh PgogCiAgIDxwYXJhPgotICAgV2l0aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNj YW5zLCB0aGUgdGFibGUgQU0gY29udHJvbHMgd2hlbgotICAgYnVmZmVyIHBpbnMgb24gaW5kZXgg cGFnZXMgYXJlIGRyb3BwZWQgcmF0aGVyIHRoYW4gdGhlIGluZGV4IEFNLgotICAgSW4gcHJhY3Rp Y2UsIHRoZSBoZWFwIHRhYmxlIEFNIChhbmQgYW55IHRhYmxlIEFNIHdpdGggc2ltaWxhciBjb25j dXJyZW5jeQotICAgcnVsZXMpIHVzdWFsbHkgZHJvcHMgcGlucyBlYWdlcmx5IGZvciBNVkNDIHNu YXBzaG90IHNjYW5zLCBidXQgcmV0YWlucwotICAgcGlucyBmb3Igbm9uLU1WQ0Mgc25hcHNob3Qg c2NhbnMuICBJbmRleC1vbmx5IHNjYW5zIG1heSByZXRhaW4gcGlucyBpbgotICAgc29tZSBjYXNl cywgd2hpbGUgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYW4gTVZDQyBzbmFwc2hvdCBhbHdh eXMgZHJvcAotICAgdGhlaXIgcGlucyBlYWdlcmx5LiAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhh dCBpbXBsZW1lbnQKLSAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZG8gbm90IGNv bnRyb2wgd2hlbiBwaW5zIGFyZSBkcm9wcGVkOyB0aGF0Ci0gICBkZWNpc2lvbiBpcyBkZWxlZ2F0 ZWQgdG8gdGhlIHRhYmxlIEFNLgorICAgQmVjYXVzZSB0aGUgdGFibGUgQU0gcmVhZHMgbXVsdGlw bGUgaW5kZXggbGVhZiBwYWdlcyBhaGVhZCB2aWEKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gdG8gZmFjaWxpdGF0ZSB0aGlzIHByZWZldGNoaW5nLCBpdCBjYW5ub3QKKyAgIHBy YWN0aWNhbGx5IGhvbGQgcGlucyBvbiBhbGwgdGhvc2UgcGFnZXMgc2ltdWx0YW5lb3VzbHkuICBU aGVyZWZvcmUsCisgICBJL08gcHJlZmV0Y2hpbmcgd2l0aAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gYW4gTVZDQy1jb21wbGlhbnQKKyAg IHNuYXBzaG90IGlzIGluIHVzZS4gIEluIHByYWN0aWNlLCB0aGUgaGVhcCB0YWJsZSBBTSAoYW5k IGFueSB0YWJsZSBBTQorICAgd2l0aCBzaW1pbGFyIGNvbmN1cnJlbmN5IHJ1bGVzKSB1c3VhbGx5 IGRyb3BzIHBpbnMgZWFnZXJseSBmb3IgTVZDQworICAgc25hcHNob3Qgc2NhbnMsIGJ1dCByZXRh aW5zIHBpbnMgZm9yIG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zLiAgSW5kZXgtb25seQorICAgc2Nh bnMgbWF5IHJldGFpbiBwaW5zIGluIHNvbWUgY2FzZXMsIHdoaWxlIHBsYWluIGluZGV4IHNjYW5z IHRoYXQgdXNlIGFuCisgICBNVkNDIHNuYXBzaG90IGFsd2F5cyBkcm9wIHRoZWlyIHBpbnMgZWFn ZXJseS4gIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQKKyAgIGltcGxlbWVudCA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGRvIG5vdCBjb250cm9sIHdoZW4gcGlucyBhcmUKKyAgIGRy b3BwZWQ7IHRoYXQgZGVjaXNpb24gaXMgZGVsZWdhdGVkIHRvIHRoZSB0YWJsZSBBTS4KICAgPC9w YXJhPgogCiAgIDxwYXJhPgotICAgSW4gYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlv bj4gaW5kZXggc2NhbiwgdGhlIGFjY2VzcyBtZXRob2QgZG9lcwotICAgbm90IGtlZXAgYW4gaW5k ZXggcGluIG9uIGFueSBvZiB0aGUgcmV0dXJuZWQgdHVwbGVzLiAgVGhlcmVmb3JlCi0gICBpdCBp cyBvbmx5IHNhZmUgdG8gdXNlIHN1Y2ggc2NhbnMgd2l0aCBNVkNDLWNvbXBsaWFudCBzbmFwc2hv dHMuCisgICBTaW1pbGFybHksIGFuIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGlu ZGV4IHNjYW4gaXMgaW5oZXJlbnRseQorICAgYXN5bmNocm9ub3VzOiBhbGwgbWF0Y2hpbmcgVElE cyBhcmUgY29sbGVjdGVkIGludG8gYSBiaXRtYXAgYmVmb3JlIGFueSBoZWFwCisgICBhY2Nlc3Mg YmVnaW5zLiAgU3VjaCBzY2FucyB0aGVyZWZvcmUgcmVxdWlyZSBhbiBNVkNDLWNvbXBsaWFudCBz bmFwc2hvdCwKKyAgIGFuZCB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGUgYWNjZXNzIG1ldGhvZCB0 byBob2xkIGluZGV4IHBhZ2UgcGlucy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0 IGEvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbCBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwK aW5kZXggOWNjZjViNzM5Li44ZTcwYTYxOTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC90YWJs ZWFtLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbApAQCAtMTI5LDYgKzEyOSwx NCBAQCBteV90YWJsZWFtX2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKICAgb3B0aW9uYWwpLCB0 aGUgYmxvY2sgbnVtYmVyIG5lZWRzIHRvIHByb3ZpZGUgbG9jYWxpdHkuCiAgPC9wYXJhPgogCisg PHBhcmE+CisgIFRhYmxlIGFjY2VzcyBtZXRob2RzIGNhbiBzdXBwb3J0IG9yZGVyZWQgaW5kZXgg c2NhbnMgdXNpbmcgdGhlCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJm YWNlLiBTZWUgYWxzbworICA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIi8+ IGZvciBkZXRhaWxzIG9uIGludGVyZmFjaW5nIHdpdGgKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbmRleCBhY2Nlc3MgbWV0aG9kcywgYW5kIG1hbmFnaW5nIHRoZQorICBzY2Fu J3MgcG9zaXRpb24uCisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIEZvciBjcmFzaCBzYWZldHksIGFu IEFNIGNhbiB1c2UgcG9zdGdyZXMnIDxsaW5rCiAgIGxpbmtlbmQ9IndhbCI+PGFjcm9ueW0+V0FM PC9hY3JvbnltPjwvbGluaz4sIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCAxMzJiNTZhNTguLjMyYmMzZGQzZSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2Niw2ICsxNjYsNyBAQCBz ZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5h YmxlJSc7CiAgZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVfaW5k ZXhvbmx5c2NhbiAgICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAg ICB8IG9uCisgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVfbWF0 ZXJpYWwgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAg ICB8IG9uCiAgZW5hYmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24KQEAgLTE4MCw3ICsx ODEsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUg bGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBl bmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAg ICAgICAgICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3 YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9u UG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkg c2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41My4wCgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0013-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v12-0013-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdtr11 RnJvbSA5YjBjM2FkYzM5M2ZhMWFkYTU3ZmQ3ZjkwYjA3ZTliN2UzMTYzZWRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTIgMTMvMjNdIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlN RS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRv IHN0YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBp biBwcm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRl CmJlZm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2gg dGhlIGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxh dGVyIGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCBy ZWFkIHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBh bmQgaW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBj b25jdXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1 ZXN0IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBp dCBlbmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZl Y3RpdmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcg dGhlIGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNv cmQKdGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwg V2FpdFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoK SW4gcmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFy dGluZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tl bmQgaGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3Jp cHRvcuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxk IGJlIGJyaWVmIGFuZCB1bmNvbW1vbi4KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDQ5 MSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDMyNSBpbnNlcnRpb25zKCspLCAx NjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggYTQwYWRmNmIyLi4xMzU4ZmM3 ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0cnVjdCBSZWFkQnVm ZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2CQluYmxvY2tzOwogCWludDE2CQlu YmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQZ0Fpb1dhaXRSZWYgaW9fd3JlZjsK IAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwppbmRleCBhZWE0NWFiYzAuLjNiNGIwY2NjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMKQEAgLTE4NSw2ICsxODUsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclNvcnRBcnJheQog CVNNZ3JSZWxhdGlvbiBzcmVsOwogfSBTTWdyU29ydEFycmF5OwogCisKKy8qCisgKiBJbiBBc3lu Y1JlYWRCdWZmZXJzKCksIHdoZW4gcHJlcGFyaW5nIGEgYnVmZmVyIGZvciByZWFkaW5nIGFuZCBz ZXR0aW5nCisgKiBCTV9JT19JTl9QUk9HUkVTUywgdGhlIGJ1ZmZlciBtYXkgYWxyZWFkeSBoYXZl IEkvTyBpbiBwcm9ncmVzcyBvciBtYXkKKyAqIGFscmVhZHkgY29udGFpbiB0aGUgZGVzaXJlZCBi bG9jay4gQXN5bmNSZWFkQnVmZmVycygpIG11c3QgZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4gdGhl c2UgY2FzZXMgKGFuZCB0aGUgY2FzZSB3aGVyZSBpdCBzaG91bGQgaW5pdGlhdGUgSS9PKSBzbyBp dCBjYW4KKyAqIG1hcmsgYW4gaW4tcHJvZ3Jlc3MgYnVmZmVyIGFzIGZvcmVpZ24gSS9PIHJhdGhl ciB0aGFuIHdhaXRpbmcgb24gaXQuCisgKi8KK3R5cGVkZWYgZW51bSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXMKK3sKKwlSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUsCisJUkVBRF9CVUZGRVJfSU5f UFJPR1JFU1MsCisJUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPLAorfSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXM7CisKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJCXplcm9fZGFtYWdlZF9wYWdl cyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2VzID0gMTAwOwpAQCAtMTYyOCw0 NSArMTY0Myw2IEBAIENoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24oUmVhZEJ1ZmZlcnNPcGVyYXRp b24gKm9wZXJhdGlvbiwgYm9vbCBpc19jb21wbGV0ZSkKICNlbmRpZgogfQogCi0vKiBoZWxwZXIg Zm9yIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCB0byBhdm9pZCByZXBldGl0aW9uICovCi1zdGF0 aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2FuU3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwg Ym9vbCBub3dhaXQpCi17Ci0JaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKLQkJcmV0dXJuIFN0 YXJ0TG9jYWxCdWZmZXJJTyhHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpLAot CQkJCQkJCQkgIHRydWUsIG5vd2FpdCk7Ci0JZWxzZQotCQlyZXR1cm4gU3RhcnRCdWZmZXJJTyhH ZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dhaXQpOwotfQotCi0vKgot ICogSGVscGVyIGZvciBBc3luY1JlYWRCdWZmZXJzIHRoYXQgdHJpZXMgdG8gZ2V0IHRoZSBidWZm ZXIgcmVhZHkgZm9yIElPLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2Fu U3RhcnRJTyhCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKLXsKLQkvKgotCSAqIElmIHRoaXMg YmFja2VuZCBjdXJyZW50bHkgaGFzIHN0YWdlZCBJTywgd2UgbmVlZCB0byBzdWJtaXQgdGhlIHBl bmRpbmcKLQkgKiBJTyBiZWZvcmUgd2FpdGluZyBmb3IgdGhlIHJpZ2h0IHRvIGlzc3VlIElPLCB0 byBhdm9pZCB0aGUgcG90ZW50aWFsIGZvcgotCSAqIGRlYWRsb2NrcyAoYW5kLCBtb3JlIGNvbW1v bmx5LCB1bm5lY2Vzc2FyeSBkZWxheXMgZm9yIG90aGVyIGJhY2tlbmRzKS4KLQkgKi8KLQlpZiAo IW5vd2FpdCAmJiBwZ2Fpb19oYXZlX3N0YWdlZCgpKQotCXsKLQkJaWYgKFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoYnVmZmVyLCB0cnVlKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8qCi0JCSAq IFVuZm9ydHVuYXRlbHkgU3RhcnRCdWZmZXJJTygpIHJldHVybmluZyBmYWxzZSBkb2Vzbid0IGFs bG93IHRvCi0JCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGJ1ZmZlciBhbHJlYWR5IGJlaW5n IHZhbGlkIGFuZCBJTyBhbHJlYWR5Ci0JCSAqIGJlaW5nIGluIHByb2dyZXNzLiBTaW5jZSBJTyBh bHJlYWR5IGJlaW5nIGluIHByb2dyZXNzIGlzIHF1aXRlCi0JCSAqIHJhcmUsIHRoaXMgYXBwcm9h Y2ggc2VlbXMgZmluZS4KLQkJICovCi0JCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKLQl9Ci0KLQly ZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIsIG5vd2FpdCk7Ci19Ci0KIC8q CiAgKiBXZSB0cmFjayB2YXJpb3VzIHN0YXRzIHJlbGF0ZWQgdG8gYnVmZmVyIGhpdHMuIEJlY2F1 c2UgdGhpcyBpcyBkb25lIGluIGEKICAqIGZldyBzZXBhcmF0ZSBwbGFjZXMsIHRoaXMgaGVscGVy IGV4aXN0cyBmb3IgY29udmVuaWVuY2UuCkBAIC0xODE2LDcgKzE3OTIsNyBAQCBXYWl0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCSAqCiAJCQkgKiB3ZSBm aXJzdCBjaGVjayBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIElPIGlzIGNvbXBsZXRlLgogCQkJICov Ci0JCQlpZiAoYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOICYmCisJ CQlpZiAoKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyB8fCBhaW9fcmV0LT5yZXN1bHQuc3RhdHVzID09 IFBHQUlPX1JTX1VOS05PV04pICYmCiAJCQkJIXBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0 aW9uLT5pb193cmVmKSkKIAkJCXsKIAkJCQlpbnN0cl90aW1lCWlvX3N0YXJ0ID0gcGdzdGF0X3By ZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOwpAQCAtMTgzNSwxMSArMTgxMSwzMyBAQCBX YWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCQlBc3Nl cnQocGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlvX3dyZWYpKTsKIAkJCX0KIAot CQkJLyoKLQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBDaGVjayB0aGUg cmVzdWx0cy4gVGhpcwotCQkJICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVy ZSB3ZXJlIGFueS4KLQkJCSAqLwotCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KG9wZXJhdGlv bik7CisJCQlpZiAodW5saWtlbHkob3BlcmF0aW9uLT5mb3JlaWduX2lvKSkKKwkJCXsKKwkJCQlC dWZmZXIJCWJ1ZmZlciA9IG9wZXJhdGlvbi0+YnVmZmVyc1tvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZV07CisJCQkJQnVmZmVyRGVzYyAqZGVzYyA9IEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSA/CisJCQkJ CUdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSkgOgorCQkJCQlHZXRCdWZmZXJE ZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCQkJCXVpbnQzMgkJYnVmX3N0YXRlID0gcGdfYXRvbWlj X3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7CisKKwkJCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQp CisJCQkJeworCQkJCQlvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSArPSAxOworCQkJCQlBc3NlcnQo b3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgPD0gb3BlcmF0aW9uLT5uYmxvY2tzKTsKKworCQkJCQlQ cm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+c3RyYXRlZ3ksCisJCQkJCQkJCQkgb3BlcmF0aW9u LT5yZWwsIG9wZXJhdGlvbi0+cGVyc2lzdGVuY2UsCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5zbWdy LCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5ibG9ja251bSArIG9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJl c3VsdHMuIFRoaXMKKwkJCQkgKiBpbmNsdWRlcyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJl IHdlcmUgYW55LgorCQkJCSAqLworCQkJCVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRp b24pOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTE4NzAsNiArMTg2OCwxNTkgQEAgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJLyogTkI6IFJFQURfRE9O RSB0cmFjZXBvaW50IHdhcyBhbHJlYWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sg Ki8KIH0KIAorLyoKKyAqIExvY2FsIHZlcnNpb24gb2YgUHJlcGFyZU5ld1JlYWRCdWZmZXJJTygp LiBIZXJlIGluc3RlYWQgb2YgbG9jYWxidWYuYyB0bworICogYXZvaWQgYW4gZXh0ZXJuYWwgZnVu Y3Rpb24gY2FsbC4KKyAqLworc3RhdGljIFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworUHJlcGFy ZU5ld0xvY2FsUmVhZEJ1ZmZlcklPKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJ CQkJCQkJQnVmZmVyIGJ1ZmZlcikKK3sKKwlCdWZmZXJEZXNjICpkZXNjID0gR2V0TG9jYWxCdWZm ZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwl1aW50NjQJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21p Y19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOworCisJLyogQWxyZWFkeSB2YWxpZCwgbm8gd29yayB0 byBkbyAqLworCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwl7CisJCXBnYWlvX3dyZWZfY2xl YXIoJm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJFQURZX0RP TkU7CisJfQorCisJcGdhaW9fc3VibWl0X3N0YWdlZCgpOworCisJaWYgKHBnYWlvX3dyZWZfdmFs aWQoJmRlc2MtPmlvX3dyZWYpKQorCXsKKwkJb3BlcmF0aW9uLT5pb193cmVmID0gZGVzYy0+aW9f d3JlZjsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJcmV0dXJuIFJFQURfQlVG RkVSX0lOX1BST0dSRVNTOworCX0KKworCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU87 Cit9CisKKy8qCisgKiBUcnkgdG8gc3RhcnQgSU8gb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiBhIG5l dyBydW4gb2YgYmxvY2tzLiBJZiBBSU8gaXMgaW4KKyAqIHByb2dyZXNzLCBiZSBpdCBpbiB0aGlz IGJhY2tlbmQgb3IgYW5vdGhlciBiYWNrZW5kLCB3ZSBqdXN0IGFzc29jaWF0ZSB0aGUKKyAqIHdh aXQgcmVmZXJlbmNlIHdpdGggdGhlIG9wZXJhdGlvbiBhbmQgd2FpdCBpbiBXYWl0UmVhZEJ1ZmZl cnMoKS4gVGhpcyB0dXJucworICogb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2Ug aW4gdHdvIHdvcmtsb2FkczoKKyAqCisgKiAxKSBBIHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJl YWQgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGltZXMgd2l0aGluIHRoZQorICogICAgcmVhZGFo ZWFkIGRpc3RhbmNlLiBUaGlzIGNhbiBoYXBwZW4gZS5nLiBmb3IgdGhlIHRhYmxlIGFjY2Vzc2Vz IG9mIGFuCisgKiAgICBpbmRleCBzY2FuLgorICoKKyAqIDIpIENvbmN1cnJlbnQgc2NhbnMgYnkg bXVsdGlwbGUgYmFja2VuZHMgb24gdGhlIHNhbWUgcmVsYXRpb24uCisgKgorICogSWYgd2Ugd2Vy ZSB0byBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3Qg YmUgYWJsZQorICogdG8ga2VlcCBlbm91Z2ggSS9PIGluIGZsaWdodC4KKyAqCisgKiBJZiB3ZSBk byBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9PIGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAx LWJsb2NrCisgKiBSZWFkQnVmZmVyc09wZXJhdGlvbiB0aGF0IFdhaXRSZWFkQnVmZmVycyB0aGVu IGNhbiB3YWl0IG9uLgorICoKKyAqIEl0J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQg aGFzIHN0YXJ0ZWQgSU8gb24gdGhlIGJ1ZmZlciBidXQgbm90IHlldAorICogc2V0IGl0cyB3YWl0 IHJlZmVyZW5jZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gd2FpdCBm b3IKKyAqIGVpdGhlciB0aGUgd2FpdCByZWZlcmVuY2UgdG8gYmUgdmFsaWQgb3IgdGhlIElPIHRv IGJlIGRvbmUuCisgKi8KK3N0YXRpYyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVO ZXdSZWFkQnVmZmVySU8oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKKwkJCQkJICAg QnVmZmVyIGJ1ZmZlcikKK3sKKwl1aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNj OworCisJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJcmV0dXJuIFByZXBhcmVOZXdMb2Nh bFJlYWRCdWZmZXJJTyhvcGVyYXRpb24sIGJ1ZmZlcik7CisKKwlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVm ZmVyIC0gMSk7CisKKwlmb3IgKDs7KQorCXsKKwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNj KTsKKworCQkvKiBBbHJlYWR5IHZhbGlkLCBubyB3b3JrIHRvIGRvICovCisJCWlmIChidWZfc3Rh dGUgJiBCTV9WQUxJRCkKKwkJeworCQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJcGdhaW9fd3Jl Zl9jbGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKKwkJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJF QURZX0RPTkU7CisJCX0KKworCQlpZiAoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpCisJ CXsKKwkJCS8qIEpvaW4gZXhpc3RpbmcgcmVhZCAqLworCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQo JmRlc2MtPmlvX3dyZWYpKQorCQkJeworCQkJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlv X3dyZWY7CisJCQkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQkJcmV0dXJuIFJFQURfQlVGRkVSX0lOX1BST0dSRVNTOworCQkJfQorCisJ CQkvKgorCQkJICogSWYgdGhlIHdhaXQgcmVmIGlzIG5vdCB2YWxpZCBidXQgdGhlIElPIGlzIGlu IHByb2dyZXNzLCBzb21lb25lCisJCQkgKiBlbHNlIHN0YXJ0ZWQgSU8gYnV0IGhhc24ndCBzZXQg dGhlIHdhaXQgcmVmIHlldC4gV2UgaGF2ZSBubworCQkJICogY2hvaWNlIGJ1dCB0byB3YWl0IHVu dGlsIHRoZSB3YWl0IHJlZiBpcyBzZXQgb3IgdGhlIElPCisJCQkgKiBjb21wbGV0ZXMuCisJCQkg Ki8KKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKKwkJ CVdhaXRJTyhkZXNjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTm8gSU8gaW4g cHJvZ3Jlc3MgYW5kIG5vdCBhbHJlYWR5IHZhbGlkOyBXZSB3aWxsIHN0YXJ0IElPLiBJdCdzCisJ CSAqIHBvc3NpYmxlIHRoYXQgdGhlIElPIHdhcyBpbiBwcm9ncmVzcyBhbmQgbmV2ZXIgYmVjYW1l IHZhbGlkIGJlY2F1c2UKKwkJICogdGhlIElPIGVycm9yZWQgb3V0LiBXZSdsbCBkbyB0aGUgSU8g b3Vyc2VsdmVzLgorCQkgKi8KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2MsIGJ1Zl9zdGF0ZSwgQk1f SU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVtZW1iZXJCdWZmZXJJTyhD dXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkJCSAgQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZl cihkZXNjKSk7CisKKwkJcmV0dXJuIFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTzsKKwl9Cit9CisK KworLyoKKyAqIFdoZW4gYnVpbGRpbmcgYSBuZXcgSU8gZnJvbSBtdWx0aXBsZSBidWZmZXJzLCB3 ZSB3b24ndCBpbmNsdWRlIGJ1ZmZlcnMKKyAqIHRoYXQgYXJlIGFscmVhZHkgdmFsaWQgb3IgYWxy ZWFkeSBpbiBwcm9ncmVzcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQorICogdXNlZCBm b3IgYWRkaXRpb25hbCBhZGphY2VudCBidWZmZXJzIGZvbGxvd2luZyB0aGUgaGVhZCBidWZmZXIg aW4gYSBuZXcgSU8uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIHN1Y2Nl c3NmdWxseSBwcmVwYXJlZCBmb3IgSU8gYW5kIGZhbHNlIGlmIGl0CisgKiBpcyByZWplY3RlZCBh bmQgdGhlIHJlYWQgSU8gc2hvdWxkIG5vdCBpbmNsdWRlIHRoaXMgYnVmZmVyLgorKi8KK3N0YXRp YyBib29sCitQcmVwYXJlQWRkaXRpb25hbFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlcikKK3sKKwl1 aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNjOworCisJaWYgKEJ1ZmZlcklzTG9j YWwoYnVmZmVyKSkKKwl7CisJCWRlc2MgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZl ciAtIDEpOworCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0YXRlKTsK KwkJLyogTG9jYWwgYnVmZmVycyBkb24ndCB1c2UgQk1fSU9fSU5fUFJPR1JFU1MgKi8KKwkJaWYg KGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEIHx8IHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlvX3dyZWYp KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1 ZmZlciAtIDEpOworCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGRlc2MpOworCQlpZiAoYnVmX3N0 YXRlICYgKEJNX1ZBTElEIHwgQk1fSU9fSU5fUFJPR1JFU1MpKQorCQl7CisJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2Ms IGJ1Zl9zdGF0ZSwgQk1fSU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVt ZW1iZXJCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIEluaXRpYXRlIElPIGZvciB0aGUgUmVhZEJ1ZmZlcnNPcGVy YXRpb24KICAqCkBAIC0xOTAzLDcgKzIwNTQsNzUgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJdm9pZAkg ICAqaW9fcGFnZXNbTUFYX0lPX0NPTUJJTkVfTElNSVRdOwogCUlPQ29udGV4dAlpb19jb250ZXh0 OwogCUlPT2JqZWN0CWlvX29iamVjdDsKLQlib29sCQlkaWRfc3RhcnRfaW87CisJaW5zdHJfdGlt ZQlpb19zdGFydDsKKwlQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMgc3RhdHVzOworCisJLyoKKwkg KiBXZSBtdXN0IGdldCBhbiBJTyBoYW5kbGUgYmVmb3JlIFN0YXJ0TmV3QnVmZmVyUmVhZElPKCks IGFzCisJICogcGdhaW9faW9fYWNxdWlyZSgpIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3 YW50IGFmdGVyIHNldHRpbmcKKwkgKiBJT19JTl9QUk9HUkVTUy4gSWYgd2UgZG9uJ3QgbmVlZCB0 byBkbyB0aGUgSU8sIHdlJ2xsIHJlbGVhc2UgdGhlCisJICogaGFuZGxlLgorCSAqCisJICogSWYg d2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdldCBhIGhhbmRsZSwgc3VibWl0 CisJICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQgb3RoZXIgYmFja2VuZHMgZG9u J3QgbmVlZCB0byB3YWl0LgorCSAqIFRoZXJlIHdvdWxkbid0IGJlIGEgZGVhZGxvY2sgcmlzaywg YXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KKwkgKiB3YWl0IGZvciBhbHJlYWR5 IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFkZGl0aW9uYWwgbG9ja3MsCisJ ICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxlIHdhaXRzLgorCSAqCisJICog QSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQgYWxsb3cgdXMgdG8gbWVhc3Vy ZSB0aGUgdGltZSBpbgorCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3aXRob3V0IGNhdXNpbmcgdW5k dWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKKwkgKiBub24tYmxvY2tpbmcsIGNhc2Uu ICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFzdHJ1Y3R1cmUKKwkgKiBkb2Vz bid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRzIHRoYXQgYW4gb3BlcmF0aW9u IGNhbid0CisJICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9ucyBiKSBkb2Vzbid0IGhhdmUg YW4gQVBJIHRvIHJlcG9ydAorCSAqICJhY2N1bXVsYXRlZCIgdGltZS4KKwkgKi8KKwlpb2ggPSBw Z2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19y ZXR1cm4pOworCWlmICh1bmxpa2VseSghaW9oKSkKKwl7CisJCXBnYWlvX3N1Ym1pdF9zdGFnZWQo KTsKKwkJaW9oID0gcGdhaW9faW9fYWNxdWlyZShDdXJyZW50UmVzb3VyY2VPd25lciwgJm9wZXJh dGlvbi0+aW9fcmV0dXJuKTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBmYWxzZTsK KworCS8qIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBi dWZmZXIgKi8KKwlpZiAoKHN0YXR1cyA9IFByZXBhcmVOZXdSZWFkQnVmZmVySU8ob3BlcmF0aW9u LCBidWZmZXJzW25ibG9ja3NfZG9uZV0pKSA8CisJCVJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTykK Kwl7CisJCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwor CQlpZiAoc3RhdHVzID09IFJFQURfQlVGRkVSX0FMUkVBRFlfRE9ORSkKKwkJeworCQkJLyoKKwkJ CSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBibG9jaywgd2UncmUg ZG9uZS4KKwkJCSAqCisJCQkgKiBXaGVuIElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUg aXMgdXBkYXRlZCBpbgorCQkJICogUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KCksIGJ1dCB0aGF0 IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKKwkJCSAqIG5lY2Vzc2FyeS4gVGh1cyB1cGRhdGUg aGVyZS4KKwkJCSAqLworCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKKwkJCUFzc2Vy dChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkv KgorCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2gKKwkJCSAqIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3Mg aW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhlCisJCQkgKiBvdGhlciBiYWNrZW5kIHdpbGwgdHJh Y2sgdGhpcyBhcyBhICdyZWFkJy4KKwkJCSAqLworCQkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRp b24tPnN0cmF0ZWd5LAorCQkJCQkJCSBvcGVyYXRpb24tPnJlbCwgb3BlcmF0aW9uLT5wZXJzaXN0 ZW5jZSwKKwkJCQkJCQkgb3BlcmF0aW9uLT5zbWdyLCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJ CQkJIG9wZXJhdGlvbi0+YmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBUaGUgSU8gaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyAq LworCQlBc3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX0lOX1BST0dSRVNTKTsKKwkJQ2hlY2tS ZWFkQnVmZmVyc09wZXJhdGlvbihvcGVyYXRpb24sIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyogV2UgY2FuIHJlYWQgaW4gYXQgbGVhc3QgdGhlIGhlYWQgYnVmZmVyIC4gKi8KKwlB c3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTyk7CiAKIAkvKgogCSAqIFdo ZW4gdGhpcyBJTyBpcyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LCBlaXRoZXIgYmVjYXVzZSB0aGUg Y2FsbGVyIHdpbGwKQEAgLTE5NTQsMTM4ICsyMTczLDc0IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCSAq LwogCXBnc3RhdF9wcmVwYXJlX3JlcG9ydF9jaGVja3N1bV9mYWlsdXJlKG9wZXJhdGlvbi0+c21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkKTsKIAotCS8qCi0JICogR2V0IElPIGhhbmRs ZSBiZWZvcmUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKCksIGFzIHBnYWlvX2lvX2FjcXVpcmUoKQot CSAqIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3YW50IGFmdGVyIHNldHRpbmcgSU9fSU5f UFJPR1JFU1MuCi0JICoKLQkgKiBJZiB3ZSBuZWVkIHRvIHdhaXQgZm9yIElPIGJlZm9yZSB3ZSBj YW4gZ2V0IGEgaGFuZGxlLCBzdWJtaXQKLQkgKiBhbHJlYWR5LXN0YWdlZCBJTyBmaXJzdCwgc28g dGhhdCBvdGhlciBiYWNrZW5kcyBkb24ndCBuZWVkIHRvIHdhaXQuCi0JICogVGhlcmUgd291bGRu J3QgYmUgYSBkZWFkbG9jayByaXNrLCBhcyBwZ2Fpb19pb19hY3F1aXJlKCkganVzdCBuZWVkcyB0 bwotCSAqIHdhaXQgZm9yIGFscmVhZHkgc3VibWl0dGVkIElPLCB3aGljaCBkb2Vzbid0IHJlcXVp cmUgYWRkaXRpb25hbCBsb2NrcywKLQkgKiBidXQgaXQgY291bGQgc3RpbGwgY2F1c2UgdW5kZXNp cmFibGUgd2FpdHMuCi0JICoKLQkgKiBBIHNlY29uZGFyeSBiZW5lZml0IGlzIHRoYXQgdGhpcyB3 b3VsZCBhbGxvdyB1cyB0byBtZWFzdXJlIHRoZSB0aW1lIGluCi0JICogcGdhaW9faW9fYWNxdWly ZSgpIHdpdGhvdXQgY2F1c2luZyB1bmR1ZSB0aW1lciBvdmVyaGVhZCBpbiB0aGUgY29tbW9uLAot CSAqIG5vbi1ibG9ja2luZywgY2FzZS4gIEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgcGdzdGF0cyBp bmZyYXN0cnVjdHVyZQotCSAqIGRvZXNuJ3QgcmVhbGx5IGFsbG93IHRoYXQsIGFzIGl0IGEpIGFz c2VydHMgdGhhdCBhbiBvcGVyYXRpb24gY2FuJ3QKLQkgKiBoYXZlIHRpbWUgd2l0aG91dCBvcGVy YXRpb25zIGIpIGRvZXNuJ3QgaGF2ZSBhbiBBUEkgdG8gcmVwb3J0Ci0JICogImFjY3VtdWxhdGVk IiB0aW1lLgotCSAqLwotCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmVfbmIoQ3VycmVudFJlc291cmNl T3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JaWYgKHVubGlrZWx5KCFpb2gpKQotCXsK LQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCi0JCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmUoQ3Vy cmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JfQorCUFzc2VydChp b19idWZmZXJzWzBdID09IGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7CisJaW9fcGFnZXNbMF0gPSBC dWZmZXJHZXRCbG9jayhidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX2J1ZmZlcnNfbGVuID0g MTsKIAogCS8qCi0JICogQ2hlY2sgaWYgd2UgY2FuIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCB0by1i ZS1yZWFkIGJ1ZmZlci4KLQkgKgotCSAqIElmIGFuIEkvTyBpcyBhbHJlYWR5IGluIHByb2dyZXNz IGluIGFub3RoZXIgYmFja2VuZCwgd2Ugd2FudCB0byB3YWl0Ci0JICogZm9yIHRoZSBvdXRjb21l OiBlaXRoZXIgZG9uZSwgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdpbGwKLQkgKiBy ZXRyeS4KKwkgKiBIb3cgbWFueSBuZWlnaGJvcmluZy1vbi1kaXNrIGJsb2NrcyBjYW4gd2Ugc2Nh dHRlci1yZWFkIGludG8gb3RoZXIKKwkgKiBidWZmZXJzIGF0IHRoZSBzYW1lIHRpbWU/ICBJbiB0 aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FpdCBpZiB3ZSBzZWUgYW4gSS9PCisJICogYWxyZWFkeSBpbiBw cm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJNX0lPX0lOX1BST0dSRVNTIGZvciB0aGUgaGVhZAor CSAqIGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0IG9uIHdpdGggdGhhdCBJL08gYXMgc29vbiBhcyBw b3NzaWJsZS4KIAkgKi8KLQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW25ibG9j a3NfZG9uZV0sIGZhbHNlKSkKKwlmb3IgKGludCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9w ZXJhdGlvbi0+bmJsb2NrczsgaSsrKQogCXsKLQkJLyoKLQkJICogU29tZW9uZSBlbHNlIGhhcyBh bHJlYWR5IGNvbXBsZXRlZCB0aGlzIGJsb2NrLCB3ZSdyZSBkb25lLgotCQkgKgotCQkgKiBXaGVu IElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUgaXMgdXBkYXRlZCBpbgotCQkgKiBQcm9j ZXNzUmVhZEJ1ZmZlcnNSZXN1bHQoKSwgYnV0IHRoYXQgaXMgbm90IGNhbGxlZCBpZiBubyBJTyBp cwotCQkgKiBuZWNlc3NhcnkuIFRodXMgdXBkYXRlIGhlcmUuCi0JCSAqLwotCQlvcGVyYXRpb24t Pm5ibG9ja3NfZG9uZSArPSAxOwotCQkqbmJsb2Nrc19wcm9ncmVzcyA9IDE7CisJCWlmICghUHJl cGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVyKGJ1ZmZlcnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11 c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQorCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmZmVyc1tpXSkgLSAxKTsKKwkJQXNzZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09 IGJ1ZmZlcnNbaV0pOwogCi0JCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKLQkJcGdhaW9fd3JlZl9j bGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKLQkJZGlkX3N0YXJ0X2lvID0gZmFsc2U7Ci0KLQkJ LyoKLQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2ggaXQKLQkJICogbXVzdCBoYXZlIHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBp biBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3RoZXIKLQkJICogYmFja2VuZCB3aWxsIHRyYWNr IHRoaXMgYXMgYSAncmVhZCcuCi0JCSAqLwotCQlQcm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+ c3RyYXRlZ3ksIG9wZXJhdGlvbi0+cmVsLCBwZXJzaXN0ZW5jZSwKLQkJCQkJCSBvcGVyYXRpb24t PnNtZ3IsIGZvcmtudW0sCi0JCQkJCQkgYmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSk7CisJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0QmxvY2soYnVmZmVy c1tpXSk7CiAJfQorCisJLyogZ2V0IGEgcmVmZXJlbmNlIHRvIHdhaXQgZm9yIGluIFdhaXRSZWFk QnVmZmVycygpICovCisJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3BlcmF0aW9uLT5pb193cmVm KTsKKworCS8qIHByb3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0aGUgY29tcGxldGlvbiBj YWxsYmFja3MgKi8KKwlwZ2Fpb19pb19zZXRfaGFuZGxlX2RhdGFfMzIoaW9oLCAodWludDMyICop IGlvX2J1ZmZlcnMsIGlvX2J1ZmZlcnNfbGVuKTsKKworCXBnYWlvX2lvX3JlZ2lzdGVyX2NhbGxi YWNrcyhpb2gsCisJCQkJCQkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAgPwor CQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxfQlVGRkVSX1JFQURWIDoKKwkJCQkJCQkJUEdBSU9fSENC X1NIQVJFRF9CVUZGRVJfUkVBRFYsCisJCQkJCQkJCWZsYWdzKTsKKworCXBnYWlvX2lvX3NldF9m bGFnKGlvaCwgaW9oX2ZsYWdzKTsKKworCS8qIC0tLQorCSogRXZlbiB0aG91Z2ggd2UncmUgdHJ5 aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5LCB0cmFjayB0aGUgdGltZQorCSogaW4gc21n cnN0YXJ0cmVhZHYoKToKKwkqIC0gaWYgaW9fbWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdp bGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCisJKiAgIGltbWVkaWF0ZWx5CisJKiAtIHRoZSBpbyBt ZXRob2QgbWlnaHQgbm90IHN1cHBvcnQgdGhlIElPIChlLmcuIHdvcmtlciBJTyBmb3IgYSB0ZW1w CisJKiAgIHRhYmxlKQorCSogLS0tCisJKi8KKwlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lv X3RpbWUodHJhY2tfaW9fdGltaW5nKTsKKwlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+ c21nciwgZm9ya251bSwKKwkJCQkgICBibG9ja251bSArIG5ibG9ja3NfZG9uZSwKKwkJCQkgICBp b19wYWdlcywgaW9fYnVmZmVyc19sZW4pOworCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29i amVjdCwgaW9fY29udGV4dCwgSU9PUF9SRUFELAorCQkJCQkJCWlvX3N0YXJ0LCAxLCBpb19idWZm ZXJzX2xlbiAqIEJMQ0tTWik7CisKKwlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VEVNUCkKKwkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47 CiAJZWxzZQotCXsKLQkJaW5zdHJfdGltZQlpb19zdGFydDsKKwkJcGdCdWZmZXJVc2FnZS5zaGFy ZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qIFdlIGZvdW5kIGEgYnVmZmVy IHRoYXQgd2UgbmVlZCB0byByZWFkIGluLiAqLwotCQlBc3NlcnQoaW9fYnVmZmVyc1swXSA9PSBi dWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19wYWdlc1swXSA9IEJ1ZmZlckdldEJsb2NrKGJ1 ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX2J1ZmZlcnNfbGVuID0gMTsKKwkvKgorCSAqIFRy YWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0 LiBPdGhlcndpc2UKKwkgKiB3ZSBjb3VsZCBlbmQgdXAgaXNzdWluZyBhIGxvdCBvZiBJTyBpbiBh IHNob3J0IHRpbWVzcGFuLCBkZXNwaXRlIGEgbG93CisJICogY29zdCBsaW1pdC4KKwkgKi8KKwlp ZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBh Z2VNaXNzICogaW9fYnVmZmVyc19sZW47CiAKLQkJLyoKLQkJICogSG93IG1hbnkgbmVpZ2hib3Jp bmctb24tZGlzayBibG9ja3MgY2FuIHdlIHNjYXR0ZXItcmVhZCBpbnRvIG90aGVyCi0JCSAqIGJ1 ZmZlcnMgYXQgdGhlIHNhbWUgdGltZT8gIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YWl0IGlmIHdl IHNlZSBhbgotCQkgKiBJL08gYWxyZWFkeSBpbiBwcm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJN X0lPX0lOX1BST0dSRVNTIGZvciB0aGUKLQkJICogaGVhZCBibG9jaywgc28gd2Ugc2hvdWxkIGdl dCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNvb24gYXMgcG9zc2libGUuCi0JCSAqLwotCQlmb3IgKGlu dCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9wZXJhdGlvbi0+bmJsb2NrczsgaSsrKQotCQl7 Ci0JCQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW2ldLCB0cnVlKSkKLQkJCQli cmVhazsKLQkJCS8qIE11c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KLQkJCUFz c2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2kgLSAxXSkgPT0KLQkJCQkgICBCdWZm ZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2ldKSAtIDEpOwotCQkJQXNzZXJ0KGlvX2J1ZmZlcnNb aW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0pOworCSpuYmxvY2tzX3Byb2dyZXNzID0gaW9f YnVmZmVyc19sZW47CiAKLQkJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0 QmxvY2soYnVmZmVyc1tpXSk7Ci0JCX0KLQotCQkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBm b3IgaW4gV2FpdFJlYWRCdWZmZXJzKCkgKi8KLQkJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3Bl cmF0aW9uLT5pb193cmVmKTsKLQotCQkvKiBwcm92aWRlIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8g dGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzICovCi0JCXBnYWlvX2lvX3NldF9oYW5kbGVfZGF0YV8z Mihpb2gsICh1aW50MzIgKikgaW9fYnVmZmVycywgaW9fYnVmZmVyc19sZW4pOwotCi0JCXBnYWlv X2lvX3JlZ2lzdGVyX2NhbGxiYWNrcyhpb2gsCi0JCQkJCQkJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QID8KLQkJCQkJCQkJCVBHQUlPX0hDQl9MT0NBTF9CVUZGRVJfUkVBRFYg OgotCQkJCQkJCQkJUEdBSU9fSENCX1NIQVJFRF9CVUZGRVJfUkVBRFYsCi0JCQkJCQkJCQlmbGFn cyk7Ci0KLQkJcGdhaW9faW9fc2V0X2ZsYWcoaW9oLCBpb2hfZmxhZ3MpOwotCi0JCS8qIC0tLQot CQkgKiBFdmVuIHRob3VnaCB3ZSdyZSB0cnlpbmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHks IHRyYWNrIHRoZSB0aW1lCi0JCSAqIGluIHNtZ3JzdGFydHJlYWR2KCk6Ci0JCSAqIC0gaWYgaW9f bWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCi0J CSAqICAgaW1tZWRpYXRlbHkKLQkJICogLSB0aGUgaW8gbWV0aG9kIG1pZ2h0IG5vdCBzdXBwb3J0 IHRoZSBJTyAoZS5nLiB3b3JrZXIgSU8gZm9yIGEgdGVtcAotCQkgKiAgIHRhYmxlKQotCQkgKiAt LS0KLQkJICovCi0JCWlvX3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190 aW1pbmcpOwotCQlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+c21nciwgZm9ya251bSwK LQkJCQkJICAgYmxvY2tudW0gKyBuYmxvY2tzX2RvbmUsCi0JCQkJCSAgIGlvX3BhZ2VzLCBpb19i dWZmZXJzX2xlbik7Ci0JCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9SRUFELAotCQkJCQkJCQlpb19zdGFydCwgMSwgaW9fYnVmZmVyc19sZW4gKiBC TENLU1opOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCQkJ cGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47Ci0JCWVsc2UK LQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfcmVhZCArPSBpb19idWZmZXJzX2xlbjsKLQot CQkvKgotCQkgKiBUcmFjayB2YWN1dW0gY29zdCB3aGVuIGlzc3VpbmcgSU8sIG5vdCBhZnRlciB3 YWl0aW5nIGZvciBpdC4KLQkJICogT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCBpc3N1aW5nIGEg bG90IG9mIElPIGluIGEgc2hvcnQgdGltZXNwYW4sCi0JCSAqIGRlc3BpdGUgYSBsb3cgY29zdCBs aW1pdC4KLQkJICovCi0JCWlmIChWYWN1dW1Db3N0QWN0aXZlKQotCQkJVmFjdXVtQ29zdEJhbGFu Y2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVyc19sZW47Ci0KLQkJKm5ibG9ja3Nf cHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0YXJ0X2lvID0gdHJ1ZTsKLQl9Ci0K LQlyZXR1cm4gZGlkX3N0YXJ0X2lvOworCXJldHVybiB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBhOTAxMjk4ODQuLmNiNTdiZjcxZiAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTIzNDgsNiArMjM0OCw3IEBAIFByZWRpY2F0ZUxvY2tEYXRhCiBQcmVk aWNhdGVMb2NrVGFyZ2V0VHlwZQogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIFByZXBQYXJhbGxlbFJl c3RvcmVQdHJUeXBlCitQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKIFByZXBhcmVTdG10CiBQcmVw YXJlZFN0YXRlbWVudAogUHJlc29ydGVkS2V5RGF0YQotLSAKMi41My4wCgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0009-Limit-get_actual_variable_range-to-scan-three-in.patch" Content-Disposition: attachment; filename="v12-0009-Limit-get_actual_variable_range-to-scan-three-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdu215 RnJvbSAxOGMzZThjN2EyMDUwNDMzNzdiZWEwZjYxY2ZjZDgwY2M2MjhjMDhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMiBGZWIgMjAyNiAyMzozNDozNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDA5LzIzXSBM aW1pdCBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW4gdGhyZWUgaW5kZXgKIHBhZ2Vz LgoKZ2V0X2FjdHVhbF92YXJpYWJsZV9yYW5nZSBzY2FucyBhbiBpbmRleCB0byBmaW5kIGFjdHVh bCBtaW4vbWF4IHZhbHVlcwpmb3IgcGxhbm5lciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uLiAgU2lu Y2UgdGhpcyBoYXBwZW5zIGR1cmluZyBwbGFubmluZywKd2UgY2FuJ3QgYWZmb3JkIHRvIHNwZW5k IHRvbyBtdWNoIHRpbWUgb24gaXQuICBDb21taXQgOWM2YWQ1ZWFhOSBhZGRlZApWSVNJVEVEX1BB R0VTX0xJTUlUIChhIGxpbWl0IG9mIDEwMCBoZWFwIHBhZ2UgdmlzaXRzKSB0byBib3VuZCB0aGUK YW1vdW50IG9mIHdvcmsgcGVyZm9ybWVkLCBnaXZpbmcgdXAgYW5kIGZhbGxpbmcgYmFjayB0byB0 aGUgcGdfc3RhdGlzdGljCmV4dHJlbWFsIHZhbHVlIHdoZW4gdGhlIGxpbWl0IGlzIGV4Y2VlZGVk LiAgQnV0IHRoYXQgaXNuJ3QgZWZmZWN0aXZlIGluCmNhc2VzIHdpdGggbW9yZSBleHRyZW1lIGNv bmNlbnRyYXRpb25zIG9mIGRlYWQgaW5kZXggdHVwbGVzLgoKUmVjZW50IGJlbmNobWFyayByZXN1 bHRzIGZyb20gTWFyayBDYWxsYWdoYW4gc2hvdyB0aGF0ClZJU0lURURfUEFHRVNfTElNSVQgaXNu J3QgZWZmZWN0aXZlIG9uY2UgdGhlIGRlYWQgaW5kZXggdHVwbGUgcHJvYmxlbQpnZXRzIG91dCBv ZiBoYW5kICh3aGljaCBpcyBleHBlY3RlZCB3aXRoIHF1ZXVlLWxpa2UgdGFibGVzIHRoYXQKY29u dGludWFsbHkgZGVsZXRlIG9sZGVyIHJlY29yZHMgYW5kIGluc2VydCBuZXdlciBvbmVzKS4gIFRo ZSByb290IGNhdXNlCmlzIHRoYXQgVklTSVRFRF9QQUdFU19MSU1JVCBjb3VudHMgaGVhcCBwYWdl IHZpc2l0cywgYnV0IHdoZW4gbWFueSBpbmRleAp0dXBsZXMgYXJlIG1hcmtlZCBMUF9ERUFELCBf YnRfcmVhZHBhZ2UgdHJhdmVyc2VzIGFyYml0cmFyaWx5IG1hbnkgaW5kZXgKcGFnZXMgd2l0aG91 dCByZXR1cm5pbmcgYW55IHR1cGxlcyAtLSB0aGUgaGVhcCBwYWdlIGNvdW50ZXIgaW4Kc2VsZnVu Y3MuYyBuZXZlciBnZXRzIGEgY2hhbmNlIHRvIGluY3JlbWVudCwgc28gVklTSVRFRF9QQUdFU19M SU1JVApuZXZlciB0cmlnZ2Vycy4gIEZ1cnRoZXJtb3JlLCB0aGUgZGVzaWduIG9mIHNldHRpbmcg TFBfREVBRCBiaXRzIHRvIGhlbHAKZnV0dXJlIGNhbGxzIGlzIHVsdGltYXRlbHkgY291bnRlcnBy b2R1Y3RpdmU6IGVhY2ggTFBfREVBRCB0dXBsZSBpcyBvbmUKZmV3ZXIgdGhhdCBjb3VudHMgYWdh aW5zdCBWSVNJVEVEX1BBR0VTX0xJTUlULCBzbyB0aGUgbW9yZSBMUF9ERUFEIGJpdHMKd2Ugc2V0 LCB0aGUgbGVzcyBlZmZlY3RpdmUgdGhlIGxpbWl0IGJlY29tZXMgYXQgYmFpbGluZyBvdXQgZWFy bHkuCgpSZXBsYWNlIFZJU0lURURfUEFHRVNfTElNSVQgd2l0aCBhIG1lY2hhbmlzbSB0aGF0IGxp bWl0cwpnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW5uaW5nIG9ubHkgdGhlIGV4dHJl bWFsIGluZGV4IGxlYWYgcGFnZSwKYW5kIHR3byBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzLCByYXRo ZXIgdGhhbiBjb3VudGluZyBoZWFwIHBhZ2UgdmlzaXRzLgpUaGlzIHByb3ZpZGVzIGEgaGFyZCBn dWFyYW50ZWUgb24gdGhlIG1heGltdW0gd29yayBwZXIgY2FsbC4gIFVubGlrZQpWSVNJVEVEX1BB R0VTX0xJTUlULCB0aGlzIGxpbWl0IGNhbm5vdCBiZSBlcm9kZWQgYnkgTFBfREVBRCBiaXRzLgoK VGhpcyBhcHByb2FjaCBhbHNvIGhhcyB0aGUgbWVyaXQgb2YgYmVpbmcgY29tcGF0aWJsZSB3aXRo IHRoZSBpbmRleApwcmVmZXRjaGluZyBjb21taXQncyBuZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9z bG90KCkgaW50ZXJmYWNlLiAgVGhhdAphcHByb2FjaCBoaWRlcyBoZWFwIGFjY2VzcyBkZXRhaWxz IGZyb20gY2FsbGVycyBsaWtlIHNlbGZ1bmNzLmMsIG1ha2luZwpWSVNJVEVEX1BBR0VTX0xJTUlU IGltcHJhY3RpY2FsIHRvIGltcGxlbWVudCB3aXRob3V0IHB1c2hpbmcgYWQtaG9jCmxvZ2ljIGlu dG8gdGhlIHRhYmxlIEFNIGxheWVyLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3Qu aWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xemt0MVdrS3A0VlJKdTNx SGZtS1hjOFcrWFl2MVJYZzVkMmQzZlN2QWVPPXJnQG1haWwuZ21haWwuY29tCi0tLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICB8ICA4ICsrKysrKwogc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICB8ICAzIC0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8IDExICsrKysrKysrKwogc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0c2VhcmNoLmMgICAgfCAgOSArKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYyAgICAgICAgIHwgMzEgKysrKysrKysrKysrKysrLS0tLS0tLS0tCiA2IGZpbGVzIGNo YW5nZWQsIDQ3IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5o CmluZGV4IGNlZjI4ZjRmZC4uYTdhYmY1YTc4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTM4MSw2 ICszODEsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAogCS8qIHBhcmFs bGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1vcnkgKi8KIAlzdHJ1Y3Qg UGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsKKworCS8qCisJICogQ291 bnRlciB0byByZXF1ZXN0IGVhcmx5IGFib3J0IGR1cmluZyBnZXRfYWN0dWFsX3ZhcmlhYmxlX3Jh bmdlIHNjYW5zLgorCSAqIFdoZW4gbm9uemVybywgdGhlIHNjYW4gd2lsbCByZWFkIGF0IG1vc3Qg dGhpcyBtYW55IGxlYWYgcGFnZXMgYmVmb3JlCisJICogZ2l2aW5nIHVwIChyZWdhcmRsZXNzIG9m IHdoZXRoZXIgdGhvc2UgcGFnZXMgaGFkIG1hdGNoaW5nIGl0ZW1zKS4KKwkgKiBaZXJvIG1lYW5z IGRpc2FibGVkIChub3JtYWwgc2NhbiBiZWhhdmlvcikuCisJICovCisJaW50CQkJeHNfcmVhZF9l eHRyZW1hbF9vbmx5OwogfSBJbmRleFNjYW5EZXNjRGF0YTsKIAogLyogR2VuZXJpYyBzdHJ1Y3R1 cmUgZm9yIHBhcmFsbGVsIHNjYW5zICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmluZGV4IDFl Y2M4MzMwOC4uNzllZjQ4MTZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtMTg4NCw5 ICsxODg0LDYgQEAgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9pbnRlciB0aWQsIFJlbGF0 aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkgKiBJZiB3ZSBjYW4ndCBzZWUgaXQsIG1h eWJlIG5vIG9uZSBlbHNlIGNhbiBlaXRoZXIuICBBdCBjYWxsZXIKIAkJICogcmVxdWVzdCwgY2hl Y2sgd2hldGhlciBhbGwgY2hhaW4gbWVtYmVycyBhcmUgZGVhZCB0byBhbGwKIAkJICogdHJhbnNh Y3Rpb25zLgotCQkgKgotCQkgKiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRoZSBjcml0ZXJpb24gaGVy ZSBmb3Igd2hhdCBpcyAiZGVhZCIsIGZpeCB0aGUKLQkJICogcGxhbm5lcidzIGdldF9hY3R1YWxf dmFyaWFibGVfcmFuZ2UoKSBmdW5jdGlvbiB0byBtYXRjaC4KIAkJICovCiAJCWlmIChhbGxfZGVh ZCAmJiAqYWxsX2RlYWQpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jCmluZGV4IDQ4NGRiMDAyNS4uMTQ3YzFhMjU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKQEAgLTU2OCw2ICs1NjgsMTcgQEAgaGVhcGFtX2JhdGNoX2dldG5l eHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCVJlbGVh c2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CiAJCQliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAkJ fQorCisJCS8qCisJCSAqIHhzX3JlYWRfZXh0cmVtYWxfb25seSBzY2FucyBhcmUgdXNlZCBieSBn ZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlCisJCSAqIHRvIGZpbmQgbWluL21heCB2YWx1ZXMuICBU aGV5IG9ubHkgbmVlZCBhIHZhbHVlIGZyb20gb25lIG9mIHRoZQorCQkgKiBleHRyZW1hbCBsZWFm IHBhZ2VzLCBzbyBvbmNlIHdlIGhhdmUgb25lIGJhdGNoLCB3ZSBnaXZlIHVwLgorCQkgKi8KKwkJ aWYgKHVubGlrZWx5KHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSkgJiYgcHJpb3JCYXRjaCkK KwkJeworCQkJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJ fQogCX0KIAllbHNlCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dl bmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCA2ZTg3MTY5YzIu LmQ1MGUzZmE3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsNyBA QCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMs IGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaXR1cGRlc2MgPSBOVUxMOwogCXNjYW4tPnhzX2hp dHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOworCXNjYW4tPnhzX3JlYWRf ZXh0cmVtYWxfb25seSA9IDA7CiAKIAlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IDA7 CiAJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IDA7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRzZWFyY2guYwppbmRleCBmNWY0ZmQ2NjAuLmQ5ZDQzNDM5NSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0xNjc3LDEzICsxNjc3LDE4IEBAIF9idF9yZWFkZmly c3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCwKIAlB c3NlcnQoZmlyc3RiYXRjaC0+ZGlyID09IGRpcik7CiAKIAlpZiAoYmxrbm8gPT0gUF9OT05FIHx8 CisJCShzY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkgJiYgLS1zY2FuLT54c19yZWFkX2V4dHJl bWFsX29ubHkgPT0gMCkgfHwKIAkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CiAJCSAh YnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgOiAhYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCkpCiAJewog CQkvKgogCQkgKiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhp cyBkaXJlY3Rpb24gKHRob3VnaAotCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhl IHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAqIGlmIHNvLT5uZWVkUHJpbVNj YW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkuCisJCSAqCisJ CSAqIEFsc28gY3V0IG91ciBsb3NzZXMgZHVyaW5nIHhzX3JlYWRfZXh0cmVtYWxfb25seSBzY2Fu cywgd2hpY2ggYXJlCisJCSAqIGxpbWl0ZWQgdG8gc2Nhbm5pbmcgb25seSBhIGZldyBsZWFmIHBh Z2VzIGluIHRoZSBpbmRleC4KIAkJICovCisJCUFzc2VydCghc2Nhbi0+eHNfcmVhZF9leHRyZW1h bF9vbmx5IHx8ICFzby0+bmVlZFByaW1TY2FuKTsKIAkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgZmlyc3RiYXRjaCk7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwogCQlyZXR1 cm4gTlVMTDsKQEAgLTE4MDQsNiArMTgwOSw4IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAogCQkvKiBDb250aW51ZSB0aGUgc2NhbiBp biB0aGlzIGRpcmVjdGlvbj8gKi8KIAkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkJKHNjYW4t PnhzX3JlYWRfZXh0cmVtYWxfb25seSAmJgorCQkJIC0tc2Nhbi0+eHNfcmVhZF9leHRyZW1hbF9v bmx5ID09IDApIHx8CiAJCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KIAkJCSAhYnRu ZXdiYXRjaC0+bW9yZVJpZ2h0IDogIWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0KSkKIAkJewpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvc2VsZnVuY3MuYwppbmRleCA2ZDgwYWUwMDMuLjA5ZjJiOTY1MiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3NlbGZ1bmNzLmMKQEAgLTcwODEsMTMgKzcwODEsMTIgQEAgZ2V0X2FjdHVhbF92YXJpYWJs ZV9yYW5nZShQbGFubmVySW5mbyAqcm9vdCwgVmFyaWFibGVTdGF0RGF0YSAqdmFyZGF0YSwKICAq CiAgKiBzY2Fua2V5cyBpcyBhIDEtZWxlbWVudCBzY2Fua2V5IGFycmF5IHNldCB1cCB0byByZWpl Y3QgbnVsbHMuCiAgKiB0eXBMZW4vdHlwQnlWYWwgZGVzY3JpYmUgdGhlIGRhdGF0eXBlIG9mIHRo ZSBpbmRleCdzIGZpcnN0IGNvbHVtbi4KLSAqIHRhYmxlc2xvdCBpcyBhIHNsb3Qgc3VpdGFibGUg dG8gaG9sZCB0YWJsZSB0dXBsZXMsIGluIGNhc2Ugd2UgbmVlZAotICogdG8gcHJvYmUgdGhlIGhl YXAuCisgKiB0YWJsZXNsb3QgaXMgYSBzbG90IHN1aXRhYmxlIHRvIGhvbGQgdGFibGUgdHVwbGVz LgogICogKFdlIGNvdWxkIGNvbXB1dGUgdGhlc2UgdmFsdWVzIGxvY2FsbHksIGJ1dCB0aGF0IHdv dWxkIG1lYW4gY29tcHV0aW5nIHRoZW0KICAqIHR3aWNlIHdoZW4gZ2V0X2FjdHVhbF92YXJpYWJs ZV9yYW5nZSBuZWVkcyBib3RoIHRoZSBtaW4gYW5kIHRoZSBtYXguKQogICoKLSAqIEZhaWx1cmUg b2NjdXJzIGVpdGhlciB3aGVuIHRoZSBpbmRleCBpcyBlbXB0eSwgb3Igd2UgZGVjaWRlIHRoYXQg aXQncwotICogdGFraW5nIHRvbyBsb25nIHRvIGZpbmQgYSBzdWl0YWJsZSB0dXBsZS4KKyAqIEZh aWx1cmUgb2NjdXJzIGVpdGhlciB3aGVuIHRoZSBpbmRleCBpcyBlbXB0eSwgb3Igd2hlbiBpdCB0 YWtlcyB0b28gbG9uZyB0bworICogZmluZCBhIHN1aXRhYmxlIHR1cGxlLgogICovCiBzdGF0aWMg Ym9vbAogZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLApAQCAt NzE0NywyMiArNzE0NiwzMCBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9u IGhlYXBSZWwsCiAJICoKIAkgKiBEZXNwaXRlIGFsbCB0aGlzIGNhcmUsIHRoZXJlIGFyZSBzaXR1 YXRpb25zIHdoZXJlIHdlIG1pZ2h0IGZpbmQgbWFueQogCSAqIG5vbi12aXNpYmxlIHR1cGxlcyBu ZWFyIHRoZSBlbmQgb2YgdGhlIGluZGV4LiAgV2UgZG9uJ3Qgd2FudCB0byBleHBlbmQKLQkgKiBh IGh1Z2UgYW1vdW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHJlYWQg dG9vIG1hbnkgaGVhcAotCSAqIHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwg dGhlIGNhbGxlciB3aWxsIGVuZCB1cCB1c2luZwotCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVl IGlzIHJlY29yZGVkIGluIHBnX3N0YXRpc3RpYy4KLQkgKgotCSAqIFhYWCBUaGlzIGNhbid0IHdv cmsgd2l0aCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2UsCi0JICog d2hpY2ggc2ltcGx5IHdvbid0IHJldHVybiBhIHR1cGxlIHRoYXQgaXNuJ3QgdmlzaWJsZSB0byBv dXIgc25hcHNob3QuCi0JICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgbmVlZCBzb21l IGtpbmQgb2YgY2FsbGJhY2sgdGhhdCBwcm92aWRlcwotCSAqIGEgd2F5IGZvciB0aGUgc2NhbiB0 byBnaXZlIHVwIHdoZW4gdGhlIGNvc3RzIHN0YXJ0IHRvIGdldCBvdXQgb2YgaGFuZC4KKwkgKiBh IGh1Z2UgYW1vdW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBhZnRlciByZWFkaW5nIGEg ZmV3IGV4dHJlbWFsCisJICogaW5kZXggbGVhZiBwYWdlcyB3aXRob3V0IGZpbmRpbmcgbWF0Y2hp bmcgaXRlbXMgKGdlbmVyYWxseSBvbmx5IHNlZW4KKwkgKiB3aGVuIHBhZ2VzIGhhdmUgbWFueSBp bmRleCB0dXBsZXMgd2l0aCBzZXQgTFBfREVBRCBiaXRzKS4gIFdoZW4gd2UgZ2l2ZQorCSAqIHVw IHRoZSBjYWxsZXIgd2lsbCBlbmQgdXAgdXNpbmcgd2hhdGV2ZXIgZXh0cmVtYWwgdmFsdWUgaXMg cmVjb3JkZWQgaW4KKwkgKiBwZ19zdGF0aXN0aWMuCiAJICovCiAJSW5pdE5vblZhY3V1bWFibGVT bmFwc2hvdChTbmFwc2hvdE5vblZhY3V1bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNUZXN0Rm9y KGhlYXBSZWwpKTsKIAorCS8qIFNldCB1cCBhbiBpbmRleC1vbmx5IHNjYW4gKi8KIAlpbmRleF9z Y2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLCB0cnVlLAogCQkJCQkJCQkg JlNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgTlVMTCwKIAkJCQkJCQkJIDEsIDApOwogCUFzc2VydChp bmRleF9zY2FuLT54c193YW50X2l0dXApOworCisJLyoKKwkgKiBNYWtlIG91ciBzY2FuIHJlYWQg YXQgbW9zdCAzIGluZGV4IGxlYWYgcGFnZXMgYmVmb3JlIGl0IGp1c3QgZ2l2ZXMgdXAuCisJICog VGhpcyBpcyBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGU7IGdpdmluZyB1cCBhZnRlciB0aGUgZmly c3QgbGVhZiBwYWdlCisJICogd291bGQgd29yayBqdXN0IGFzIHdlbGwgaW4gbW9zdCBjYXNlcy4g IEJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlCisJICogaW5kZXgncyBsZWZ0bW9zdC9yaWdodG1v c3QgbGVhZiBwYWdlIGlzIG9uZSB3aXRoIHZlcnkgZmV3IGluZGV4IHR1cGxlcworCSAqICh3aXRo IG9yIHdpdGhvdXQgdGhlaXIgTFBfREVBRCBiaXRzIHNldCkuCisJICovCisJaW5kZXhfc2Nhbi0+ eHNfcmVhZF9leHRyZW1hbF9vbmx5ID0gMzsKKwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBz Y2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkvKiBGZXRjaCBmaXJzdC9uZXh0IHR1cGxlIGluIHNw ZWNpZmllZCBkaXJlY3Rpb24gKi8KLS0gCjIuNTMuMAoK --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0007-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Disposition: attachment; filename="v12-0007-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdu517 RnJvbSBmMjg0Y2IyZDJmNWIxNjkwMjAwY2JiNjY1NWE2ZTQyNTZlOTcyMzQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMiAwNy8yM10g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YQogdXNpbmcgeHNf YmxrCgpBZGQgYW4gZXhwbGljaXQgQmxvY2tOdW1iZXIgZmllbGQgKHhzX2JsaykgdG8gSW5kZXhG ZXRjaEhlYXBEYXRhIHRoYXQKdHJhY2tzIHdoaWNoIGhlYXAgYmxvY2sgaXMgY3VycmVudGx5IHBp bm5lZCBpbiB4c19jYnVmLgoKaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIG5vdyB1c2VzIHhzX2Js ayB0byBkZXRlcm1pbmUgd2hlbiBidWZmZXIKc3dpdGNoaW5nIGlzIG5lZWRlZCwgcmVwbGFjaW5n IHRoZSBwcmV2aW91cyBhcHByb2FjaCB0aGF0IGNvbXBhcmVkCmJ1ZmZlciBpZGVudGl0aWVzIHZp YSBSZWxlYXNlQW5kUmVhZEJ1ZmZlciBvbiBldmVyeSBub24tSE9ULWNoYWluIGNhbGwuClRoZSBu ZXcgYXBwcm9hY2ggc2tpcHMgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgcGF0aCBlbnRpcmVseSB3aGVu IHRoZSBuZXh0ClRJRCBpcyBvbiB0aGUgc2FtZSBoZWFwIHBhZ2UsIHdoaWNoIGFsc28gbWVhbnMg dGhhdCBoZWFwX3BhZ2VfcHJ1bmVfb3B0CmlzIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGJsb2Nr ICh3aGVuIHRoZSBibG9jayBpcyBmaXJzdCBwaW5uZWQpLgoKVGhpcyBpcyBwcmVwYXJhdG9yeSB3 b3JrIGZvciBhbiB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIG5lZWQgeHNfYmxrCnRvIG1hbmFn ZSBidWZmZXIgcGluIHRyYW5zZmVycyBiZXR3ZWVuIHRoZSBzY2FuIGFuZCB0aGUgZXhlY3V0b3Ig c2xvdC4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8IDI4ICsrKysrKysr KysrKysrKy0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxMCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggMjRhMjdjYzA0Li45MmYxN2I2MDYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvaGVhcGFtLmgKQEAgLTExNyw2ICsxMTcsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEZl dGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFNIGluZGVwZW5k ZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1ZjsJCS8qIGN1 cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCisJQmxvY2tOdW1iZXIgeHNfYmxr OwkJCS8qIHhzX2NidWYncyBibG9jayBudW1iZXIsIGlmIGFueSAqLwogCS8qIE5COiBpZiB4c19j YnVmIGlzIG5vdCBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQgYnVmZmVyICov CiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKaW5kZXggNTEzN2QyNTEwLi5kN2IwNWFhMTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtODUsNiArODUsNyBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogCiAJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwogCWhz Y2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJs b2NrTnVtYmVyOwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KQEAgLTk5LDYgKzEwMCw3 IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQog CQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAkJaHNjYW4tPnhzX2NidWYgPSBJbnZh bGlkQnVmZmVyOwogCX0KKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogfQog CiBzdGF0aWMgdm9pZApAQCAtMTI0LDIzICsxMjYsMjkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1 cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCiAJQXNzZXJ0KFRUU19JU19C VUZGRVJUVVBMRShzbG90KSk7CiAKLQkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3aXRjaGlu ZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLwotCWlmICghKmNhbGxfYWdhaW4p CisJLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgb24g dGhlIHNhbWUgcGFnZS4gKi8KKwlpZiAoaHNjYW4tPnhzX2JsayAhPSBJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKHRpZCkpCiAJewotCQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2Ug ZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCi0JCUJ1ZmZlcgkJcHJldl9idWYgPSBoc2Nhbi0+eHNf Y2J1ZjsKKwkJQXNzZXJ0KCEqY2FsbF9hZ2Fpbik7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxl YXNlQW5kUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNf YmFzZS5yZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsK KwkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIgZm9yIG5leHQgdGltZSAq LworCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJ CWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJCVJlbGVhc2VCdWZmZXIoaHNj YW4tPnhzX2NidWYpOworCisJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNf YmFzZS5yZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCi0JCSAqIFBydW5lIHBhZ2UsIGJ1dCBv bmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBvbiB0aGlzIHBhZ2UKKwkJICogUHJ1bmUgcGFnZSB3 aGVuIGl0IGlzIHBpbm5lZCBmb3IgdGhlIGZpcnN0IHRpbWUKIAkJICovCi0JCWlmIChwcmV2X2J1 ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jh c2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CisJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhz X2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1Zik7CiAJfQogCisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQo aHNjYW4tPnhzX2NidWYpKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhz X2NidWYpID09IGhzY2FuLT54c19ibGspOworCUFzc2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0 aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhz Y2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFw X2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKLS0gCjIuNTMuMAoK --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0005-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Disposition: attachment; filename="v12-0005-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdub19 RnJvbSA4NmM4MTVmOTZkM2JiMjJhOGY2NTQ4NmVmODViYjNmYmZkODdiNzExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTQ6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiAwNS8yM10g VXNlIGZha2UgTFNOcyB0byBpbXByb3ZlIG5idHJlZSBkcm9wUGluIGJlaGF2aW9yLgoKUHJldmlv dXNseSB1bmxvZ2dlZCBuYnRyZWUgaW5kZXhlcyBuZWVkZWQgdG8gaG9sZCBvbiB0byBhIGxlYWYg cGFnZQpidWZmZXIgcGluIHdoZW4gc3RvcHBlZCBvbiB0aGF0IGxlYWYgcGFnZSwgcHVyZWx5IHNv IHRoYXQgdGhlCl9idF9raWxsaXRlbXMgcHJvY2VzcyBoYWQgYSB3YXkgdG8gYmUgc3VyZSB0aGF0 IHRoZXJlIHdhc24ndCBhbnkgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNV VU0uICBUaGUgX2J0X2tpbGxpdGVtcycgZHJvcFBpbiBzdHJhdGVneQpjb3VsZG4ndCBiZSB1c2Vk IGJlZm9yZSBub3csIHNpbmNlIGl0IHdvcmtzIGJ5IGNoZWNraW5nIGlmIHRoZSBwYWdlIExTTgpo YXMgY2hhbmdlZCBpbiB0aGUgcGVyaW9kIGFmdGVyIF9idF9yZWFkcGFnZSByZWFkIHRoZSBwYWdl J3MgaXRlbXMsIGJ1dApiZWZvcmUgX2J0X2tpbGxpdGVtcyB3YXMgY2FsbGVkLiAgV2Ugbm93IHVz ZSB0aGUgc2FtZSBMU04gdHJpY2sgd2l0aAp1bmxvZ2dlZCBpbmRleGVzLCBicmluZ2luZyB0aGUg c2FtZSBiZW5lZml0cyB0byB0aGVzZSBzY2FucyB0aGF0IGNvbW1pdAoyZWQ1Yjg3ZiBicm91Z2h0 IHRvIHNjYW5zIG9mIGxvZ2dlZCByZWxhdGlvbnMuCgpUaGlzIGlzIHByZXBhcmF0aW9uIGZvciBh biB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIGFkZCB0aGUgYW1nZXRiYXRjaAppbnRlcmZhY2Ug YW5kIHN3aXRjaCBuYnRyZWUgb3ZlciB0byBpdCAoZnJvbSBhbWdldHR1cGxlKS4gIFRoYXQgd2ls bCBnbwpmdXJ0aGVyIGJ5IGNvbXBsZXRlbHkgb2J2aWF0aW5nIHRoZSBuZWVkIGZvciBhbWdldGJh dGNoIHNjYW5zIHRvIGhhbmcgb24KdG8gYnVmZmVyIHBpbnMgKGJhcnJpbmcgc2NhbnMgaW52b2x2 aW5nIGEgbm9uLU1WQ0Mgc25hcHNob3QpLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1XemtlaHVoeHl1QThx dWM3clJOM0V0TlhwaUtzalBmTzhtaGIrMERyMkswRHRnQG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICB8ICA1ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgIHwgIDggKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idGluc2VydC5jIHwgNDggKysrKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMgICB8IDgyICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICB8ICA4IC0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyB8ICAxIC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0dXRpbHMuYyAgfCAgMSAtCiA3IGZpbGVzIGNoYW5nZWQsIDgwIGluc2VydGlvbnMoKyks IDczIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggNTNkNGE2MWRj Li5jYjkyMWNhMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1F CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC00ODUsOSArNDg1LDgg QEAgV2UgaGFuZGxlIHRoaXMga2lsbF9wcmlvcl90dXBsZSByYWNlIGNvbmRpdGlvbiBieSBoYXZp bmcgYWZmZWN0ZWQgaW5kZXgKIHNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBj aGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwKIGltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hl ZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KIGJ1ZmZlciBw aW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9E RUFEIGJpdHMKLW9uIHRoZSBsZWFmIHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2UncyBMU04gaGFz IGNoYW5nZWQuICAoVGhhdCB3b24ndCB3b3JrCi13aXRoIGFuIHVubG9nZ2VkIGluZGV4LCBzbyBm b3Igbm93IHdlIGRvbid0IGV2ZXIgYXBwbHkgdGhlICJkb24ndCBob2xkCi1vbnRvIHBpbiIgb3B0 aW1pemF0aW9uIHRoZXJlLikKK29uIHRoZSBsZWFmIHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2Un cyBMU04gaGFzIGNoYW5nZWQuICAoVGhpcyBpcyB3aHkgd2UKK2ltcGxlbWVudCAiZmFrZSIgTFNO cyBmb3IgdW5sb2dnZWQgaW5kZXggcmVsYXRpb25zLikKIAogRmFzdHBhdGggRm9yIEluZGV4IElu c2VydGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRkZWR1cC5jCmluZGV4IDk1YmUwYjE3OS4uYWY3YWZmZGY0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRkZWR1cC5jCkBAIC02OSw2ICs2OSw3IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwK IAlTaXplCQlwYWdlc2F2aW5nIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IDA7CiAJYm9vbAkJ c2luZ2xldmFsc3RyYXQgPSBmYWxzZTsKIAlpbnQJCQlua2V5YXR0cyA9IEluZGV4UmVsYXRpb25H ZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCS8q IFBhc3NlZC1pbiBuZXdpdGVtc3ogaXMgTUFYQUxJR05FRCBidXQgZG9lcyBub3QgaW5jbHVkZSBs aW5lIHBvaW50ZXIgKi8KIAluZXdpdGVtc3ogKz0gc2l6ZW9mKEl0ZW1JZERhdGEpOwpAQCAtMjQ1 LDcgKzI0Niw2IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5k ZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYg KFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9i dHJlZV9kZWR1cCB4bHJlY19kZWR1cDsKIAogCQl4bHJlY19kZWR1cC5uaW50ZXJ2YWxzID0gc3Rh dGUtPm5pbnRlcnZhbHM7CkBAIC0yNjMsOSArMjYzLDExIEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwK IAkJCQkJCQlzdGF0ZS0+bmludGVydmFscyAqIHNpemVvZihCVERlZHVwSW50ZXJ2YWwpKTsKIAog CQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX0RFRFVQKTsKLQot CQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dl dEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAogCUVORF9DUklU X1NFQ1RJT04oKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRp bnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggNjVk ZmI4ZGQ0Li5hOWZjMDdkYjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwpA QCAtMTEyNiw2ICsxMTI2LDcgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLAogCUluZGV4 VHVwbGUJb3Bvc3RpbmcgPSBOVUxMOwogCUluZGV4VHVwbGUJb3JpZ2l0dXAgPSBOVUxMOwogCUlu ZGV4VHVwbGUJbnBvc3RpbmcgPSBOVUxMOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJcGFnZSA9 IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBA IC0xMzIzLDcgKzEzMjQsNiBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJCQl4bF9i dHJlZV9pbnNlcnQgeGxyZWM7CiAJCQl4bF9idHJlZV9tZXRhZGF0YSB4bG1ldGE7CiAJCQl1aW50 OAkJeGxpbmZvOwotCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCQl1aW50MTYJCXVwb3N0aW5nb2Zm OwogCiAJCQl4bHJlYy5vZmZudW0gPSBuZXdpdGVtb2ZmOwpAQCAtMTM5NiwxNCArMTM5NiwxNiBA QCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJCQl9CiAKIAkJCXJlY3B0ciA9IFhMb2dJ bnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFi dWYpKQotCQkJCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwotCQkJaWYgKCFpc2xlYWYpCi0J CQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGNidWYpLCByZWNwdHIpOwotCi0JCQlQYWdlU2V0 TFNOKHBhZ2UsIHJlY3B0cik7CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dldEZha2VM U04ocmVsKTsKKworCQlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJCVBhZ2VTZXRMU04o bWV0YXBnLCByZWNwdHIpOworCQlpZiAoIWlzbGVhZikKKwkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0 UGFnZShjYnVmKSwgcmVjcHRyKTsKKworCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAkJ RU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC0xNTA1LDYgKzE1MDcsNyBAQCBfYnRfc3BsaXQoUmVs YXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZl ciBidWYsCiAJYm9vbAkJbmV3aXRlbW9ubGVmdCwKIAkJCQlpc2xlYWYsCiAJCQkJaXNyaWdodG1v c3Q7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKgogCSAqIG9yaWdwYWdlIGlzIHRoZSBvcmln aW5hbCBwYWdlIHRvIGJlIHNwbGl0LiAgbGVmdHBhZ2UgaXMgYSB0ZW1wb3JhcnkKQEAgLTE5ODQs NyArMTk4Nyw2IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJU U2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwKIAl7CiAJCXhsX2J0cmVlX3NwbGl0IHhs cmVjOwogCQl1aW50OAkJeGxpbmZvOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQl4bHJlYy5s ZXZlbCA9IHJvcGFxdWUtPmJ0cG9fbGV2ZWw7CiAJCS8qIFNlZSBjb21tZW50cyBiZWxvdyBvbiBu ZXdpdGVtLCBvcmlnbmV3aXRlbSwgYW5kIHBvc3RpbmcgbGlzdHMgKi8KQEAgLTIwNjgsMTQgKzIw NzAsMTYgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2Fu SW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLAogCiAJCXhsaW5mbyA9IG5ld2l0ZW1vbmxlZnQg PyBYTE9HX0JUUkVFX1NQTElUX0wgOiBYTE9HX0JUUkVFX1NQTElUX1I7CiAJCXJlY3B0ciA9IFhM b2dJbnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJUGFnZVNldExTTihvcmlncGFnZSwg cmVjcHRyKTsKLQkJUGFnZVNldExTTihyaWdodHBhZ2UsIHJlY3B0cik7Ci0JCWlmICghaXNyaWdo dG1vc3QpCi0JCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOwotCQlpZiAoIWlzbGVhZikKLQkJ CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShjYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQly ZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihvcmlncGFnZSwgcmVj cHRyKTsKKwlQYWdlU2V0TFNOKHJpZ2h0cGFnZSwgcmVjcHRyKTsKKwlpZiAoIWlzcmlnaHRtb3N0 KQorCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOworCWlmICghaXNsZWFmKQorCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UoY2J1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7 CiAKQEAgLTI0OTMsNiArMjQ5Nyw3IEBAIF9idF9uZXdsZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0 aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIgcmJ1ZikKIAlCdWZmZXIJCW1ldGFidWY7 CiAJUGFnZQkJbWV0YXBnOwogCUJUTWV0YVBhZ2VEYXRhICptZXRhZDsKKwlYTG9nUmVjUHRyCXJl Y3B0cjsKIAogCWxia25vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIobGJ1Zik7CiAJcmJrbm8gPSBC dWZmZXJHZXRCbG9ja051bWJlcihyYnVmKTsKQEAgLTI1ODgsNyArMjU5Myw2IEBAIF9idF9uZXds ZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIg cmJ1ZikKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbmV3cm9v dCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2J0cmVlX21ldGFkYXRhIG1kOwog CiAJCXhscmVjLnJvb3RibGsgPSByb290YmxrbnVtOwpAQCAtMjYyMiwxMSArMjYyNiwxMyBAQCBf YnRfbmV3bGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCdWZmZXIgbGJ1Ziwg QnVmZmVyIHJidWYpCiAJCQkJCQkJKChQYWdlSGVhZGVyKSByb290cGFnZSktPnBkX3VwcGVyKTsK IAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX05FV1JPT1Qp OwotCi0JCVBhZ2VTZXRMU04obHBhZ2UsIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04ocm9vdHBhZ2Us IHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJl Y3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKGxwYWdlLCByZWNwdHIp OworCVBhZ2VTZXRMU04ocm9vdHBhZ2UsIHJlY3B0cik7CisJUGFnZVNldExTTihtZXRhcGcsIHJl Y3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRw YWdlLmMKaW5kZXggOWFhNzgwNjhhLi5jYzljNDVkYzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jCkBAIC0yMzUsNiArMjM1LDcgQEAgX2J0X3NldF9jbGVhbnVwX2luZm8oUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciBudW1fZGVscGFnZXMpCiAJQnVmZmVyCQltZXRhYnVmOwogCVBh Z2UJCW1ldGFwZzsKIAlCVE1ldGFQYWdlRGF0YSAqbWV0YWQ7CisJWExvZ1JlY1B0cglyZWNwdHI7 CiAKIAkvKgogCSAqIE9uLWRpc2sgY29tcGF0aWJpbGl0eSBub3RlOiBUaGUgYnRtX2xhc3RfY2xl YW51cF9udW1fZGVscGFnZXMgbWV0YXBhZ2UKQEAgLTI4Niw3ICsyODcsNiBAQCBfYnRfc2V0X2Ns ZWFudXBfaW5mbyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG51bV9kZWxwYWdlcykKIAlpZiAo UmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbWV0YWRhdGEgbWQ7Ci0JCVhM b2dSZWNQdHIJcmVjcHRyOwogCiAJCVhMb2dCZWdpbkluc2VydCgpOwogCQlYTG9nUmVnaXN0ZXJC dWZmZXIoMCwgbWV0YWJ1ZiwgUkVHQlVGX1dJTExfSU5JVCB8IFJFR0JVRl9TVEFOREFSRCk7CkBA IC0zMDMsOSArMzAzLDExIEBAIF9idF9zZXRfY2xlYW51cF9pbmZvKFJlbGF0aW9uIHJlbCwgQmxv Y2tOdW1iZXIgbnVtX2RlbHBhZ2VzKQogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZtZCwgc2l6 ZW9mKHhsX2J0cmVlX21ldGFkYXRhKSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9CVFJF RV9JRCwgWExPR19CVFJFRV9NRVRBX0NMRUFOVVApOwotCi0JCVBhZ2VTZXRMU04obWV0YXBnLCBy ZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQ YWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAt MzUxLDYgKzM1Myw3IEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJl bCwgaW50IGFjY2VzcykKIAlCbG9ja051bWJlciByb290Ymxrbm87CiAJdWludDMyCQlyb290bGV2 ZWw7CiAJQlRNZXRhUGFnZURhdGEgKm1ldGFkOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJQXNz ZXJ0KGFjY2VzcyA9PSBCVF9SRUFEIHx8IGhlYXByZWwgIT0gTlVMTCk7CiAKQEAgLTQ3Myw3ICs0 NzYsNiBAQCBfYnRfZ2V0cm9vdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGludCBh Y2Nlc3MpCiAJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJCXsKIAkJCXhsX2J0cmVlX25l d3Jvb3QgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAkJCXhsX2J0cmVlX21ldGFkYXRh IG1kOwogCiAJCQlYTG9nQmVnaW5JbnNlcnQoKTsKQEAgLTQ5NywxMCArNDk5LDEyIEBAIF9idF9n ZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgaW50IGFjY2VzcykKIAkJCVhM b2dSZWdpc3RlckRhdGEoJnhscmVjLCBTaXplT2ZCdHJlZU5ld3Jvb3QpOwogCiAJCQlyZWNwdHIg PSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX05FV1JPT1QpOwotCi0JCQlQYWdl U2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOwotCQkJUGFnZVNldExTTihtZXRhcGcsIHJlY3B0cik7 CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQlQYWdl U2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsK IAogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTExNjIsNiArMTE2Niw3IEBAIF9idF9kZWxp dGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCWNoYXIJICAgKnVwZGF0ZWRi dWYgPSBOVUxMOwogCVNpemUJCXVwZGF0ZWRidWZsZW4gPSAwOwogCU9mZnNldE51bWJlciB1cGRh dGVkb2Zmc2V0c1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCVhMb2dSZWNQdHIJcmVjcHRyOwog CiAJLyogU2hvdWxkbid0IGJlIGNhbGxlZCB1bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8g Ki8KIAlBc3NlcnQobmRlbGV0YWJsZSA+IDAgfHwgbnVwZGF0YWJsZSA+IDApOwpAQCAtMTIyNiw3 ICsxMjMxLDYgQEAgX2J0X2RlbGl0ZW1zX3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYs CiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChuZWVkc3dhbCkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVj cHRyOwogCQl4bF9idHJlZV92YWN1dW0geGxyZWNfdmFjdXVtOwogCiAJCXhscmVjX3ZhY3V1bS5u ZGVsZXRlZCA9IG5kZWxldGFibGU7CkBAIC0xMjQ4LDkgKzEyNTIsMTEgQEAgX2J0X2RlbGl0ZW1z X3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJCX0KIAogCQlyZWNwdHIgPSBYTG9n SW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX1ZBQ1VVTSk7Ci0KLQkJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7 CisKKwlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAK QEAgLTEyOTIsNiArMTI5OCw3IEBAIF9idF9kZWxpdGVtc19kZWxldGUoUmVsYXRpb24gcmVsLCBC dWZmZXIgYnVmLAogCWNoYXIJICAgKnVwZGF0ZWRidWYgPSBOVUxMOwogCVNpemUJCXVwZGF0ZWRi dWZsZW4gPSAwOwogCU9mZnNldE51bWJlciB1cGRhdGVkb2Zmc2V0c1tNYXhJbmRleFR1cGxlc1Bl clBhZ2VdOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2hvdWxkbid0IGJlIGNhbGxlZCB1 bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KIAlBc3NlcnQobmRlbGV0YWJsZSA+IDAg fHwgbnVwZGF0YWJsZSA+IDApOwpAQCAtMTM0Miw3ICsxMzQ5LDYgQEAgX2J0X2RlbGl0ZW1zX2Rl bGV0ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChu ZWVkc3dhbCkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9idHJlZV9kZWxldGUgeGxy ZWNfZGVsZXRlOwogCiAJCXhscmVjX2RlbGV0ZS5zbmFwc2hvdENvbmZsaWN0SG9yaXpvbiA9IHNu YXBzaG90Q29uZmxpY3RIb3Jpem9uOwpAQCAtMTM2Niw5ICsxMzcyLDExIEBAIF9idF9kZWxpdGVt c19kZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCQl9CiAKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9CVFJFRV9JRCwgWExPR19CVFJFRV9ERUxFVEUpOwotCi0JCVBhZ2VTZXRMU04o cGFnZSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwp OworCisJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwog CkBAIC0yMTAzLDYgKzIxMTEsNyBAQCBfYnRfbWFya19wYWdlX2hhbGZkZWFkKFJlbGF0aW9uIHJl bCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVyIGxlYWZidWYsCiAJT2Zmc2V0TnVtYmVyIG5leHRv ZmZzZXQ7CiAJSW5kZXhUdXBsZQlpdHVwOwogCUluZGV4VHVwbGVEYXRhIHRydW5jdHVwbGU7CisJ WExvZ1JlY1B0cglyZWNwdHI7CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAlv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBAIC0yMjUzLDcgKzIyNjIsNiBAQCBfYnRf bWFya19wYWdlX2hhbGZkZWFkKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVy IGxlYWZidWYsCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7CiAJCXhsX2J0cmVlX21h cmtfcGFnZV9oYWxmZGVhZCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJeGxyZWMu cG9mZnNldCA9IHBvZmZzZXQ7CiAJCXhscmVjLmxlYWZibGsgPSBsZWFmYmxrbm87CkBAIC0yMjc0 LDEyICsyMjgyLDE0IEBAIF9idF9tYXJrX3BhZ2VfaGFsZmRlYWQoUmVsYXRpb24gcmVsLCBSZWxh dGlvbiBoZWFwcmVsLCBCdWZmZXIgbGVhZmJ1ZiwKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMs IFNpemVPZkJ0cmVlTWFya1BhZ2VIYWxmRGVhZCk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChS TV9CVFJFRV9JRCwgWExPR19CVFJFRV9NQVJLX1BBR0VfSEFMRkRFQUQpOwotCi0JCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOwotCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7 Ci0JCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYpOwotCQlQYWdlU2V0TFNOKHBhZ2UsIHJl Y3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOworCVBhZ2VTZXRMU04ocGFnZSwgcmVj cHRyKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKKwlQYWdlU2V0TFNOKHBhZ2Us IHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTIzMzcsNiArMjM0Nyw3IEBA IF9idF91bmxpbmtfaGFsZmRlYWRfcGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBsZWFmYnVmLCBC bG9ja051bWJlciBzY2FuYmxrbm8sCiAJdWludDMyCQl0YXJnZXRsZXZlbDsKIAlJbmRleFR1cGxl CWxlYWZoaWtleTsKIAlCbG9ja051bWJlciBsZWFmdG9wcGFyZW50OworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobGVhZmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdl R2V0T3BhcXVlKHBhZ2UpOwpAQCAtMjY3Niw3ICsyNjg3LDYgQEAgX2J0X3VubGlua19oYWxmZGVh ZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVtYmVyIHNjYW5ibGtu bywKIAkJeGxfYnRyZWVfdW5saW5rX3BhZ2UgeGxyZWM7CiAJCXhsX2J0cmVlX21ldGFkYXRhIHhs bWV0YTsKIAkJdWludDgJCXhsaW5mbzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJWExvZ0Jl Z2luSW5zZXJ0KCk7CiAKQEAgLTI3MjAsMjUgKzI3MzAsMjUgQEAgX2J0X3VubGlua19oYWxmZGVh ZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVtYmVyIHNjYW5ibGtu bywKIAkJCXhsaW5mbyA9IFhMT0dfQlRSRUVfVU5MSU5LX1BBR0U7CiAKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9CVFJFRV9JRCwgeGxpbmZvKTsKKwl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9n R2V0RmFrZUxTTihyZWwpOwogCi0JCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFidWYpKQotCQl7Ci0J CQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKLQkJfQotCQlwYWdlID0gQnVmZmVyR2V0UGFn ZShyYnVmKTsKKwlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJUGFnZVNldExTTihtZXRh cGcsIHJlY3B0cik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UocmJ1Zik7CisJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOworCWlmIChCdWZmZXJJc1ZhbGlkKGxidWYpKQorCXsKKwkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UobGJ1Zik7CiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKLQkJcGFnZSA9 IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwl9CisJaWYgKHRhcmdldCAhPSBsZWFmYmxrbm8pCisJewor CQlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAkJUGFnZVNldExTTihwYWdlLCByZWNw dHIpOwotCQlpZiAoQnVmZmVySXNWYWxpZChsYnVmKSkKLQkJewotCQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UobGJ1Zik7Ci0JCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7Ci0JCX0KLQkJaWYgKHRh cmdldCAhPSBsZWFmYmxrbm8pCi0JCXsKLQkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYp OwotCQkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwotCQl9CiAJfQogCiAJRU5EX0NSSVRfU0VD VElPTigpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggNmQwYTZmMjdmLi4wZGE0 OGI0MmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtNDA3LDEzICs0MDcsNiBA QCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fu a2V5cywKIAkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMg YWxsLXZpc2libGUgaW4gdGhlIFZNLgogCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGlu ZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCiAJICoKLQkgKiBXaGVuIHdl IGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQgbWFya3Mgc28tPmtpbGxlZEl0 ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMgTFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1cnJl bnQgVElEIHJlY3ljbGluZyByYWNlcy4KLQkgKiBUaGUgc2NoZW1lIHVzZWQgdG8gZGV0ZWN0IHVu c2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hlbiBzY2FubmluZwotCSAqIHVubG9nZ2Vk IHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2aW5nIGFuIGFmZmVjdGVkIHBhZ2UncyBM U04pLgotCSAqIE9wdCBvdXQgb2YgZWFnZXIgcGluIGRyb3BwaW5nIGR1cmluZyB1bmxvZ2dlZCBy ZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0JICogKHRoaXMgaXMgcHJlZmVyYWJsZSB0byBvcHRpbmcg b3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUgTFBfREVBRCBzZXR0aW5nKS4KLQkgKgogCSAqIEFsc28g b3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAg c2NhbnMuCiAJICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQg ZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKIAkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwg YXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KQEAgLTQyNCw3ICs0 MTcsNiBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50 IG5zY2Fua2V5cywKIAkgKi8KIAlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYm CiAJCQkJICAgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCi0JCQkJICAgUmVs YXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSAmJgogCQkJCSAgIHNjYW4tPmhlYXBS ZWxhdGlvbiAhPSBOVUxMKTsKIAogCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCBiZmFhZjFmMDEuLjliZTM3NGU2ZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC02Nyw3ICs2Nyw2IEBAIF9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKIAkgKiBI YXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24gc28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdh eSB0byBkZXRlY3QKIAkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgogCSAqLwotCUFzc2VydChSZWxhdGlvbk5lZWRz V0FMKHJlbCkpOwogCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhzby0+Y3Vy clBvcy5idWYpOwogCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwogCXNvLT5jdXJy UG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMK aW5kZXggMWI5ZjJhYTEwLi43YTQ2ZDAyNDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMKQEAgLTIzNiw3ICsyMzYsNiBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAkJWExvZ1JlY1B0cglsYXRlc3Rsc247CiAKIAkJQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykpOwotCQlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKIAkJYnVm ID0gX2J0X2dldGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsKIAogCQls YXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKLS0gCjIuNTMuMAoK --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0006-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Disposition: attachment; filename="v12-0006-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdu918 RnJvbSA2Y2U1MDgxMmQ3MjI2MmMxOTJhODUxMjc3ZWEwYjhmYmYwYTk5MTljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6MjI6MjUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMiAwNi8yM10g TWFrZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gYSBwb2ludGVyIGluIGV4ZWN1dG9yCiBzY2Fu IG5vZGVzLgoKQ2hhbmdlIHRoZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gZmllbGRzIGluIElu ZGV4U2NhblN0YXRlLApJbmRleE9ubHlTY2FuU3RhdGUsIGFuZCBCaXRtYXBJbmRleFNjYW5TdGF0 ZSBmcm9tIGlubGluZSBzdHJ1Y3RzIHRvCnBvaW50ZXJzLiAgVGhpcyBhdm9pZHMgYWRkaW5nIGFk ZGl0aW9uYWwgb3ZlcmhlYWQgYXMgbmV3IGZpZWxkcyBhcmUKYWRkZWQgdG8gSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uLCBhdCBsZWFzdCBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlCmluc3Ry dW1lbnRhdGlvbiBpc24ndCB1c2VkIChpLmUuIHdoZW4gdGhlIGV4ZWN1dG9yIG5vZGUgaXNuJ3Qg YmVpbmcgcnVuCnRocm91Z2ggYW4gRVhQTEFJTiBBTkFMWVpFKS4KLS0tCiBzcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgfCAgNiArKystLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICB8ICA2ICsrKy0tLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIHwgIDggKysrKysrLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICB8IDEyICsrKysrKysrLS0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgIHwgMTQgKysrKysrKysrLS0tLS0KIDUg ZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAppbmRleCA2M2MwNjdkNWEuLjUxNzgyZDFmYyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKQEAgLTE3MjMsNyArMTcyMyw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAJ RXhwckNvbnRleHQgKmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbglpc3NfUmVsYXRpb25E ZXNjOwogCXN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqaXNzX1NjYW5EZXNjOwotCUluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiBpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKmlzc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaXNz X1NoYXJlZEluZm87CiAKIAkvKiBUaGVzZSBhcmUgbmVlZGVkIGZvciByZS1jaGVja2luZyBPUkRF UiBCWSBleHByIG9yZGVyaW5nICovCkBAIC0xNzc0LDcgKzE3NzQsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleE9ubHlTY2FuU3RhdGUKIAlFeHByQ29udGV4dCAqaW9zc19SdW50aW1lQ29udGV4dDsK IAlSZWxhdGlvbglpb3NzX1JlbGF0aW9uRGVzYzsKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEg Kmlvc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGlvc3NfSW5zdHJ1bWVu dDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xv dCAqaW9zc19UYWJsZVNsb3Q7CiAJQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwpAQCAtMTgxNSw3ICsx ODE1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQml0bWFwSW5kZXhTY2FuU3RhdGUKIAlFeHByQ29udGV4 dCAqYmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbgliaXNzX1JlbGF0aW9uRGVzYzsKIAlz dHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmJpc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uIGJpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJp c3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJpc3NfU2hh cmVkSW5mbzsKIH0gQml0bWFwSW5kZXhTY2FuU3RhdGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpp bmRleCA5MzkxOGEyMjMuLmJlZDY1ODdjOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzg3 OCw3ICszODc4LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJSW5kZXhTY2FuU3RhdGUgKmluZGV4c3Rh dGUgPSAoKEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCQkJbnNlYXJjaGVzID0gaW5k ZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5k ZXhzdGF0ZS0+aXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zODg2LDcgKzM4 ODYsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhw bGFpblN0YXRlICplcykKIAkJCXsKIAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3RhdGUg PSAoKEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCi0JCQkJbnNlYXJjaGVzID0g aW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0g aW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzg5NCw3 ICszODk0LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJQml0bWFwSW5kZXhTY2FuU3RhdGUgKmluZGV4 c3RhdGUgPSAoKEJpdG1hcEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2Vh cmNoZXMgPSBpbmRleHN0YXRlLT5iaXNzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQkJCW5zZWFy Y2hlcyA9IGluZGV4c3RhdGUtPmJpc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCQkJCVNoYXJl ZEluZm8gPSBpbmRleHN0YXRlLT5iaXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggMDU4YTU5ZWY1 Li4yY2E4MjJjZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJ bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2Fu LmMKQEAgLTIwMSw3ICsyMDEsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2Nh biBpdCB3aWxsIHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3 IEJpdG1hcEluZGV4U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwotCQl3aW5zdHJ1 bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmJpc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdp bnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7 CiAJfQogCiAJLyoKQEAgLTI3Miw2ICsyNzIsMTAgQEAgRXhlY0luaXRCaXRtYXBJbmRleFNjYW4o Qml0bWFwSW5kZXhTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAo ZWZsYWdzICYgRVhFQ19GTEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAK KwkvKiBTZXQgdXAgaW5zdHJ1bWVudGF0aW9uIG9mIGJpdG1hcCBpbmRleCBzY2FucyBpZiByZXF1 ZXN0ZWQgKi8KKwlpZiAoZXN0YXRlLT5lc19pbnN0cnVtZW50KQorCQlpbmRleHN0YXRlLT5iaXNz X0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRleFNjYW5JbnN0cnVtZW50YXRpb24pOwor CiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICovCiAJbG9ja21vZGUgPSBleGVjX3J0X2Zl dGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUpLT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0 YXRlLT5iaXNzX1JlbGF0aW9uRGVzYyA9IGluZGV4X29wZW4obm9kZS0+aW5kZXhpZCwgbG9ja21v ZGUpOwpAQCAtMzIzLDcgKzMyNyw3IEBAIEV4ZWNJbml0Qml0bWFwSW5kZXhTY2FuKEJpdG1hcElu ZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+ Ymlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoaW5kZXhzdGF0ZS0+Ymlz c19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKLQkJCQkJCQkg ICAmaW5kZXhzdGF0ZS0+Ymlzc19JbnN0cnVtZW50LAorCQkJCQkJCSAgIGluZGV4c3RhdGUtPmJp c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkgICBpbmRleHN0YXRlLT5iaXNzX051bVNjYW5LZXlzKTsK IAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBjMmQw OTM3NDUuLmY4NGRiMDQ3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jCkBAIC05Miw3ICs5Miw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlKQogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgICBl c3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAor CQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3Nf TnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMpOwogCkBA IC00MzIsNyArNDMyLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+ bnNlYXJjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCX0KIAogCS8q CkBAIC02MDQsNiArNjA0LDEwIEBAIEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2Fu ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAoZWZsYWdzICYgRVhFQ19G TEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAKKwkvKiBTZXQgdXAgaW5z dHJ1bWVudGF0aW9uIG9mIGluZGV4LW9ubHkgc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVz dGF0ZS0+ZXNfaW5zdHJ1bWVudCkKKwkJaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50ID0gcGFs bG9jMF9vYmplY3QoSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uKTsKKwogCS8qIE9wZW4gdGhlIGlu ZGV4IHJlbGF0aW9uLiAqLwogCWxvY2ttb2RlID0gZXhlY19ydF9mZXRjaChub2RlLT5zY2FuLnNj YW5yZWxpZCwgZXN0YXRlKS0+cmVsbG9ja21vZGU7CiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29w ZW4obm9kZS0+aW5kZXhpZCwgbG9ja21vZGUpOwpAQCAtNzg1LDcgKzc4OSw3IEBAIEV4ZWNJbmRl eE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+ aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19j dXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKLQkJCQkJ CQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCisJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1l bnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9z c19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CkBAIC04NTEsNyArODU1LDcgQEAg RXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSwKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5v ZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25E ZXNjLAotCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlv c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJ CSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCBhNjE2YWJmZjAuLjM2MzIwZDdkMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTA5LDcgKzEwOSw3IEBAIEluZGV4TmV4 dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+ aXNzX0luc3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRl ckJ5S2V5cyk7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRl eFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Mu c3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAog CQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aXNzX0lu c3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBu b2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5 cyk7CiAKQEAgLTgxMSw3ICs4MTEsNyBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5u c2VhcmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAl9CiAKIAkvKgpA QCAtOTcxLDYgKzk3MSwxMCBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVT dGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWlmIChlZmxhZ3MgJiBFWEVDX0ZMQUdfRVhQTEFJ Tl9PTkxZKQogCQlyZXR1cm4gaW5kZXhzdGF0ZTsKIAorCS8qIFNldCB1cCBpbnN0cnVtZW50YXRp b24gb2YgaW5kZXggc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVzdGF0ZS0+ZXNfaW5zdHJ1 bWVudCkKKwkJaW5kZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24pOworCiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICov CiAJbG9ja21vZGUgPSBleGVjX3J0X2ZldGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUp LT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0YXRlLT5pc3NfUmVsYXRpb25EZXNjID0gaW5kZXhfb3Bl bihub2RlLT5pbmRleGlkLCBsb2NrbW9kZSk7CkBAIC0xNzIwLDcgKzE3MjQsNyBAQCBFeGVjSW5k ZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pc3NfU2Nh bkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJICZub2Rl LT5pc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlL ZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKQEAgLTE3ODQsNyArMTc4OCw3IEBAIEV4ZWNJbmRleFNj YW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlzc19TY2Fu RGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgJm5vZGUt Pmlzc19JbnN0cnVtZW50LAorCQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJ CSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtl eXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotLSAKMi41My4wCgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0008-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v12-0008-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdu316 RnJvbSBjNzRmYzM4N2M1NDAwM2ViZTJkNTA5MzE3YThlOGJkN2U0OWMxOGI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEyIDA4LzIzXSBB ZGQgaW50ZXJmYWNlcyB0aGF0IGVuYWJsZSBpbmRleCBwcmVmZXRjaGluZy4KCkFkZCBhIG5ldyBh bWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSB0aGF0IGFsbG93cyBpbmRleCBhY2Nlc3MgbWV0 aG9kcwp0byBpbXBsZW1lbnQgcGxhaW4vb3JkZXJlZCBpbmRleCBzY2FucyB0aGF0IHJldHVybiBp bmRleCBlbnRyaWVzIGluCmJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0Y2hpbmcgaXRlbXMgZnJv bSBhbiBpbmRleCBwYWdlLCByYXRoZXIgdGhhbgpvbmUgbWF0Y2ggYXQgYSB0aW1lLgoKVGhpcyBj b21taXQgYWxzbyBhZGRzIGEgbmV3IHRhYmxlIEFNIGludGVyZmFjZSBjYWxsYmFjaywgY2FsbGVk IGJ5IHRoZQpjb3JlIGV4ZWN1dG9yIHRocm91Z2ggdGhlIG5ldyB0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3Qgc2hpbSBmdW5jdGlvbi4KVGhpcyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIGRpcmVjdGx5 IG1hbmFnZSB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXggc2NhbnMKcmF0aGVyIHRoYW4gaGF2aW5nIGlu ZGl2aWR1YWwgVElEcyBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvbmUgYnkgb25lLgpUaGUgYW1n ZXRiYXRjaCBpbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2Fj aCB0bwppbmRleCBzY2FucyBhZGRlZCB0byB0aGUgdGFibGUgQU0uICBUaGUgdGFibGUgQU0gY2Fu IGFwcGx5IGtub3dsZWRnZSBvZgp3aGljaCBUSURzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHNj YW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0KSS9PIHByZWZldGNoaW5nLiAgUHJlZmV0 Y2hpbmcgd2lsbCBiZSBhZGRlZCBieSBhbiB1cGNvbWluZyBjb21taXQuCgpJbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBub3cgaW1wbGVtZW50 CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UgT1IgdGhlIGFtZ2V0dHVwbGUgaW50ZXJm YWNlLiAgVGhlCmFtZ2V0dHVwbGUgaW50ZXJmYWNlIHdpbGwgc3RpbGwgYmUgdXNlZCBieSBpbmRl eCBBTXMgdGhhdCByZXF1aXJlIGRpcmVjdApjb250cm9sIG92ZXIgdGhlIHByb2dyZXNzIG9mIGlu ZGV4IHNjYW5zIChlLmcuLCBHaVNUIHdpdGggS05OIG9yZGVyZWQKc2NhbnMpLiAgQWxtb3N0IGFs bCBleGlzdGluZyBjYWxsZXJzIHRoYXQgcGVyZm9ybSBpbmRleCBzY2FucyBub3cgdXNlCnRoZSBu ZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB3aGV0 aGVyIHRoZQp1bmRlcmx5aW5nIGluZGV4IEFNIHVzZXMgYW1nZXRiYXRjaCBvciBhbWdldHR1cGxl LgoKVGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIHJldHVybnMgYmF0Y2hlcyB0aGF0IGhvbGQgYSBi dWZmZXIgcGluIG9uIGFuCmluZGV4IHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgdGFibGUg QU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTS4gIE5vdyBoZWFwYW0gb25seSBuZWVkcyB0byBob2xkIG9uIHRvCnN1Y2ggYSBwaW4gZm9y IGFuIGluc3RhbnQgLS0gZXhjZXB0IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDCnNu YXBzaG90LiAgTm9uLU1WQ0Mgc2NhbnMgY29udGludWUgdG8gbmVlZCB0byBob2xkIHRoZSBwaW4g dW50aWwgYWxsIG9mCnRoZSBiYXRjaCdzIFRJRHMgaGF2ZSBiZWVuIGZldGNoZWQgZnJvbSB0aGUg aGVhcC4KClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRkZWQgdG8gbmJ0cmVl IGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdvcmsgd2l0aCBhbGwg aW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgV2Ug Y2FuIGFsd2F5cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQg dGhlIHNjYW4gdXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGlu IG9wdGltaXphdGlvbiwgd2hpY2ggaGFkIGEgY291cGxlIG9mIGFkZGl0aW9uYWwgcmVzdHJpY3Rp b25zKS4KCkFuIHVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGluZGV4IHByZWZldGNoaW5n IHdpbGwgdXNlIGEgcmVhZApzdHJlYW0gdG8gcmVhZCBoZWFwIHBhZ2VzIGR1cmluZyBpbmRleCBz Y2Fucy4gIFJlYWQgc3RyZWFtIGlzIGNhcmVmdWwgdG8KbGltaXQgaG93IG1hbnkgdGhpbmdzIGl0 IHBpbnMsIGxlc3Qgd2UgcnVuIGludG8gcHJvYmxlbXMgZHVlIHRvIGhhdmluZwp0b28gbWFueSBi dWZmZXJzIHBpbm5lZC4gIFNpbXBseSBuZXZlciBob2xkaW5nIG9uIHRvIGluZGV4IHBhZ2UgYnVm ZmVyCnBpbnMgZ3JlYXRseSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGluZGV4 IHByZWZldGNoaW5nOwp0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMg YmV0d2VlbiB0aGUgcmVhZCBzdHJlYW0gYW5kCmluZGV4IEFNLiAgVGhlIG9ubHkgZG93bnNpZGUg aXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZwpkdXJpbmcgc2NhbnMgdGhhdCB1 c2UgYSBub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4KCklu IHByYWN0aWNlLCBoZWFwYW0gZG9lc24ndCBkcm9wIGVhY2ggYmF0Y2gncyBpbmRleCBwYWdlIGJ1 ZmZlciBwaW4gYXQKdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IGR1cmluZyBpbmRleC1vbmx5IHNj YW5zLiAgVGhpcyB3YXMgZGVlbWVkCm5lY2Vzc2FyeSB0byBhdm9pZCByZWdyZXNzaW5nIGluZGV4 LW9ubHkgc2NhbnMgd2l0aCBhIExJTUlULCBpbgpwYXJ0aWN1bGFyIHdpdGggbmVzdGxvb3AgYW50 aS1qb2lucyBhbmQgbmVzdGxvb3Agc2VtaS1qb2luczsgZWFnZXJseQpsb2FkaW5nIGFsbCB0aGUg dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB1cCBmcm9udCByZWdyZXNzZWQgc3VjaCBxdWVyaWVzLgpU aGUgbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9yaXR5 IHRvIGRlY2lkZQp3aGVuIGFuZCB3aGVyZSB0byBkcm9wIGluZGV4IHBhZ2UgcGlucywgc28gdGhp cyBjYW4gYmUgY29uc2lkZXJlZCBhCmhlYXBhbSBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgKGluZGV4 IEFNcyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLgpUaGlzIHNjaGVtZSBzdGlsbCBhbGxv d3MgaW5kZXggcHJlZmV0Y2hpbmcgdG8gY29uc2lzdGVudGx5IGhvbGQgbm8gbW9yZQp0aGFuIG9u ZSBiYXRjaCBpbmRleCBwYWdlIHBpbiBhdCBhIHRpbWUsIGV2ZW4gd2hlbiBhbiBpbmRleC1vbmx5 IHNjYW4KKHRoYXQgbXVzdCBwZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xkcyBvcGVuIHNl dmVyYWwgaW5kZXggYmF0Y2hlcwphdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWluIGFuIGFkZXF1 YXRlIHByZWZldGNoIGRpc3RhbmNlLgoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRy YS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBB bmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9tYXMgTXVu cm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20K RGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0y NmNjMDQ0MWI1MDYlNDB2b25kcmEubWUKLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAg ICAgICAgICAgICAgICAgICAgfCAgMjIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAg ICAgICAgICAgICAgICAgICB8ICAyOSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAg ICAgICAgICAgICAgICAgfCAxODEgKystLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgg ICAgICAgICAgICAgICAgICB8IDMyNSArKysrKysrLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaCAgICAgICAgICAgICAgICAgIHwgIDY1ICsrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0 cnVtZW50X25vZGUuaCAgICAgICAgfCAgIDYgKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmggICAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o ICAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j ICAgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5j ICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j ICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAg ICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAg ICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMgICAgICB8IDcwMiArKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9hbWFwaS5jICAgICAgICAgICAgICB8ICAgNCArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYyAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMgICAgICAgICAgICB8IDE2NyArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jICAgICAgICAgfCA3NTEgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAgICAgIHwgIDY2ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jICAgICAgIHwgMTkzICsrKy0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHJlZS5jICAgICAgICAgICAgfCA0MzggKysrKystLS0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyAgICAgICAgIHwgNTM0ICsrKysrLS0tLS0t LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyAgICAgICAgICB8IDIzMyAt LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jICAgICAgICAgICB8ICAg NiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwgICA1 ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAgfCAgMjMg Ky0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jICAgICAgICAgICAgICAgIHwgICAyICst CiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jICAgICAgICB8ICAgOCArLQog c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICAgICB8IDEwOCArLS0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyAgICAgICAgICB8ICAxMyArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jICAgICAgICAgIHwgICA0ICstCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAgICAgICAgfCAgIDYgKy0KIHNyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgICAgICAgICB8ICAgOCArLQogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jICAgIHwgICAzICstCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvYW11dGlscy5jICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNr ZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgICAgICB8ICA2MSArLQogY29udHJpYi9h bWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICAgIHwgICAyICstCiBjb250cmliL2Js b29tL2JsdXRpbHMuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIGRvYy9zcmMvc2dt bC9pbmRleGFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8IDQxNSArKysrKysrKy0tCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sICAgICAgICAgICAgfCAgMTMgKy0KIC4uLi9t b2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMgICB8ICAgNSArLQogc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgIDEwICstCiA0OSBmaWxl cyBjaGFuZ2VkLCAzMDI3IGluc2VydGlvbnMoKyksIDE0ODkgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2Ft YXBpLmgKaW5kZXggZWNmYmQwMTdkLi44ZDM0ZDU2NDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTgs NiArMTk4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKmFtcmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2Fu RGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1nZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2Nh bkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5l eHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0eXBlZGVmIEluZGV4U2NhbkJhdGNoICgqYW1n ZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAgSW5k ZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24pOworCisvKiBtYXJrIGRlYWQgaXRlbXMgaW4gaW5kZXggcGFnZSAqLwordHlwZWRlZiB2 b2lkICgqYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJ CQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKIC8qIGZldGNoIGFsbCB2YWxpZCB0 dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlvbikgKEluZGV4U2Nh bkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJREJpdG1hcCAqdGJtKTsKQEAgLTIwNSwxMSArMjE0 LDkgQEAgdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVz YyBzY2FuLAogLyogZW5kIGluZGV4IHNjYW4gKi8KIHR5cGVkZWYgdm9pZCAoKmFtZW5kc2Nhbl9m dW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKLS8qIG1hcmsgY3VycmVudCBzY2FuIHBv c2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbW1hcmtwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5E ZXNjIHNjYW4pOwotCi0vKiByZXN0b3JlIG1hcmtlZCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVm IHZvaWQgKCphbXJlc3RycG9zX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKy8qIGlu dmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyBzY2FuJ3Mg cG9zaXRpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmFtcG9zcmVzZXRfZnVuY3Rpb24pIChJbmRleFNj YW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogCiAvKgogICog Q2FsbGJhY2sgZnVuY3Rpb24gc2lnbmF0dXJlcyAtIGZvciBwYXJhbGxlbCBpbmRleCBzY2Fucy4K QEAgLTMwOSwxMCArMzE2LDExIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAJYW1i ZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAJYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNj YW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAvKiBjYW4gYmUgTlVMTCAqLwor CWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbWtp bGxpdGVtc2JhdGNoX2Z1bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7IC8qIGNhbiBiZSBOVUxMICov CiAJYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7CS8qIGNhbiBiZSBOVUxMICovCiAJ YW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLQlhbW1hcmtwb3NfZnVuY3Rpb24gYW1tYXJr cG9zOwkvKiBjYW4gYmUgTlVMTCAqLwotCWFtcmVzdHJwb3NfZnVuY3Rpb24gYW1yZXN0cnBvczsg LyogY2FuIGJlIE5VTEwgKi8KKwlhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFtcG9zcmVzZXQ7IC8qIGNh biBiZSBOVUxMICovCiAKIAkvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcGFyYWxs ZWwgaW5kZXggc2NhbnMgKi8KIAlhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFtZXN0 aW1hdGVwYXJhbGxlbHNjYW47IC8qIGNhbiBiZSBOVUxMICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IDRj MDQyOWNjNi4uNjMyNzY2ZTBhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0u aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtOTQsNiArOTQsNyBAQCB0eXBl ZGVmIGJvb2wgKCpJbmRleEJ1bGtEZWxldGVDYWxsYmFjaykgKEl0ZW1Qb2ludGVyIGl0ZW1wdHIs IHZvaWQgKnN0YXRlKTsKIAogLyogc3RydWN0IGRlZmluaXRpb25zIGFwcGVhciBpbiByZWxzY2Fu LmggKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpJbmRleFNjYW5EZXNjOwor dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNjYW5CYXRjaDsKIHR5cGVk ZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YSAqU3lzU2NhbkRlc2M7CiAKIHR5cGVkZWYgc3RydWN0 IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKlBhcmFsbGVsSW5kZXhTY2FuRGVzYzsKQEAgLTE1 NCw2ICsxNTUsNyBAQCBleHRlcm4gdm9pZCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBp bmRleFJlbGF0aW9uLAogCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW4oUmVs YXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJ CQkJCQkJCQkgYm9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3Qs CiAJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJ CQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CkBAIC0xODAsMTQgKzE4MiwxMiBAQCBleHRl cm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRp b24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4p OwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9u IGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJCSAg Ym9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u ICppbnN0cnVtZW50LAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJ CQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJuIEl0ZW1Qb2lu dGVyIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbik7Ci1leHRlcm4gYm9vbCBpbmRleF9mZXRjaF9oZWFwKEluZGV4 U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwotZXh0ZXJuIGJvb2wgaW5kZXhf Z2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s Ci0JCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGludDY0IGluZGV4X2dl dGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqYml0bWFwKTsKIAogZXh0ZXJu IEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUoSW5kZXhWYWN1dW1JbmZv ICppbmZvLApAQCAtMjUxLDQgKzI1MSwyNyBAQCBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNl X3VwZGF0ZV9iZWdpbihSZWxhdGlvbiByZWxhdGlvbiwKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lu cGxhY2VfdXBkYXRlX2ZpbmlzaCh2b2lkICpzdGF0ZSwgSGVhcFR1cGxlIHR1cGxlKTsKIGV4dGVy biB2b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2NhbmNlbCh2b2lkICpzdGF0ZSk7CiAKKy8q CisgKiBhbWdldGJhdGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXhhbS5jIChpbiBpbmRleGJh dGNoLmMpCisgKi8KK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9pbml0KEluZGV4U2NhbkRl c2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVz YyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9lbmQoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNj IHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CisKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgdGFi bGUgQU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF9i YXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1f dXRpbF9raWxsX3NjYW5wb3NpdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0 YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKKworLyoKKyAqIGFtZ2V0YmF0Y2ggdXRpbGl0aWVzIGNhbGxlZCBieSBpbmRleCBB TXMgKGluIGluZGV4YmF0Y2guYykKKyAqLworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNo X3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVy biBJbmRleFNjYW5CYXRjaCBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKK2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCiAjZW5kaWYJCQkJCQkJLyogR0VOQU1f SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDkyZjE3YjYwNi4uNTU1NzliODgxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oCkBAIC0xMTgsOSArMTE4LDM0IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFw RGF0YQogCiAJQnVmZmVyCQl4c19jYnVmOwkJLyogY3VycmVudCBoZWFwIGJ1ZmZlciBpbiBzY2Fu LCBpZiBhbnkgKi8KIAlCbG9ja051bWJlciB4c19ibGs7CQkJLyogeHNfY2J1ZidzIGJsb2NrIG51 bWJlciwgaWYgYW55ICovCi0JLyogTkI6IGlmIHhzX2NidWYgaXMgbm90IEludmFsaWRCdWZmZXIs IHdlIGhvbGQgYSBwaW4gb24gdGhhdCBidWZmZXIgKi8KKworCS8qIEZvciBpbmRleC1vbmx5IHNj YW5zIHRoYXQgbXVzdCBhY2Nlc3MgdGhlIHZpc2liaWxpdHkgbWFwICovCisJQnVmZmVyCQl4c192 bWJ1ZjsJCS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAqLworCWludAkJCXhzX3ZtX2l0ZW1zOwkv KiAjIGl0ZW1zIHRvIHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLworCisJYm9vbAkJeHNf bGFzdGluYmxvY2s7IC8qIGxhc3QgVElEIG9uIHRoaXMgYmxvY2sgaW4gY3VycmVudCBiYXRjaD8g Ki8KKworCS8qIE5COiBpZiB4c19jYnVmIG9yIHZtYnVmIGFyZSBub3QgSW52YWxpZEJ1ZmZlciwg d2UgaG9sZCBhIHBpbiAqLwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKKy8qCisgKiBQZXItYmF0 Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBoZWFwIHRhYmxlIEFNLgorICoKKyAqIFN0b3JlZCBhdCBh IG5lZ2F0aXZlIG9mZnNldCBmcm9tIHRoZSBJbmRleFNjYW5CYXRjaCBwb2ludGVyLCBpbiB0aGUK KyAqIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIG9mIGVhY2ggYmF0Y2ggYWxsb2NhdGlvbi4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgSGVhcEJhdGNoRGF0YQoreworCXVpbnQ4CSAgICp2aXNJbmZvOwkJLyog cGVyLWl0ZW0gdmlzaWJpbGl0eSBmbGFncywgb3IgTlVMTCAqLworfSBIZWFwQmF0Y2hEYXRhOwor CisvKiBBY2Nlc3MgdGhlIGhlYXAtcHJpdmF0ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4 U2NhbkJhdGNoIHBvaW50ZXIgKi8KK3N0YXRpYyBpbmxpbmUgSGVhcEJhdGNoRGF0YSAqCitoZWFw X2JhdGNoX2RhdGEoSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEluZGV4U2NhbkRlc2Mgc2NhbikKK3sK KwlyZXR1cm4gKEhlYXBCYXRjaERhdGEgKikgKChjaGFyICopIGJhdGNoIC0gc2Nhbi0+YmF0Y2hf dGFibGVfb2Zmc2V0KTsKK30KKwogLyogUmVzdWx0IGNvZGVzIGZvciBIZWFwVHVwbGVTYXRpc2Zp ZXNWYWN1dW0gKi8KIHR5cGVkZWYgZW51bQogewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL25idHJlZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCmluZGV4IGRhNzUwM2M1 Ny4uYmYyMTIyMTUxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBAIC05MjUsMTEwICs5MjUsMjYgQEAgdHlw ZWRlZiBzdHJ1Y3QgQlRWYWN1dW1Qb3N0aW5nRGF0YQogdHlwZWRlZiBCVFZhY3V1bVBvc3RpbmdE YXRhICpCVFZhY3V1bVBvc3Rpbmc7CiAKIC8qCi0gKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBi dHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICogVGhpcyBjb25z aXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygp IGZvcgotICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0aW9uIGFib3V0 IHRoZSBjdXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9ybWF0aW9uIGFi b3V0IHRoZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJUU2NhblBvc0Rh dGEgdG8gcmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJyZW50IGFuZCBt YXJrZWQKLSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJlciBzb21lIGtu b3duLWtpbGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2VkIGJlZm9yZSB3 ZSBjYW4gbW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4KKyAqIFBlci1iYXRjaCBkYXRhIHByaXZh dGUgdG8gdGhlIGJ0cmVlIGluZGV4IEFNLgogICoKLSAqIEluZGV4IHNjYW5zIHdvcmsgYSBwYWdl IGF0IGEgdGltZTogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50aWZ5Ci0gKiBh bGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4gQlRTY2Fu UG9zRGF0YSwgdGhlbgotICogcmVsZWFzZSB0aGUgcmVhZC1sb2NrIHdoaWxlIHJldHVybmluZyB0 aGUgaXRlbXMgdG8gdGhlIGNhbGxlciBmb3IKLSAqIHByb2Nlc3NpbmcuICBUaGlzIGFwcHJvYWNo IG1pbmltaXplcyBsb2NrL3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMKLSAqIGRyb3Ag dGhlIGxvY2sgdG8gbWFrZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0aGUgcmV0dXJu ZWQgaXRlbXMuCi0gKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNlIHRoZSBwaW4g ZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBpbiAod2hlbiBz by0+ZHJvcFBpbikgdG8gYXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVNCi0gKiAoc2Vl IG5idHJlZS9SRUFETUUgc2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNs aW5nIHNhZmUpLgotICogV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9jayBhbmQgdGhl IHBpbiBvbiB0aGUgY3VycmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRvIGl0cyBzaWJs aW5nIHBhZ2UuCi0gKgotICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ug c2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKLSAqIG1hdGNoZWQgaXRlbSwgb3Ro ZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhUdXBsZXMgZ28K LSAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2FuUG9zSXRlbSBz dG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4gIFBvc3Rpbmcg bGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKLSAqIGFsbG93aW5nIHRoZSBz YW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlzdAot ICogdHVwbGUuCisgKiBTdG9yZWQgYXQgYSBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgSW5kZXhT Y2FuQmF0Y2ggcG9pbnRlciwgaW4gdGhlCisgKiBpbmRleCBBTSBvcGFxdWUgYXJlYSBvZiBlYWNo IGJhdGNoIGFsbG9jYXRpb24uCiAgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkv KiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KK3R5cGVkZWYgc3RydWN0IEJU QmF0Y2hEYXRhCiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVu Y2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRl bSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi0JTG9jYXRpb25JbmRleCB0dXBsZU9mZnNldDsJ LyogSW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3b3Jrc3BhY2UsIGlmIGFueSAqLwotfSBCVFNjYW5Q b3NJdGVtOworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogaW5kZXggcGFnZSB3aXRoIG1hdGNo aW5nIGl0ZW1zICovCisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQg c2libGluZyAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBz aWJsaW5nICovCisJYm9vbAkJbW9yZUxlZnQ7CQkvKiBtb3JlIG1hdGNoaW5nIHBhZ2VzIHRvIHRo ZSBsZWZ0PyAqLworCWJvb2wJCW1vcmVSaWdodDsJCS8qIG1vcmUgbWF0Y2hpbmcgcGFnZXMgdG8g dGhlIHJpZ2h0PyAqLworfSBCVEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9z RGF0YQorLyogQWNjZXNzIHRoZSBidHJlZS1wcml2YXRlIHBlci1iYXRjaCBkYXRhIGZyb20gYW4g SW5kZXhTY2FuQmF0Y2ggcG9pbnRlciAqLworc3RhdGljIGlubGluZSBCVEJhdGNoRGF0YSAqCiti dF9iYXRjaF9kYXRhKEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewotCUJ1ZmZlcgkJYnVmOwkJCS8q IGN1cnJQYWdlIGJ1ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KLQotCS8qIHBhZ2UgZGV0 YWlscyBhcyBvZiB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwot CUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogcGFnZSByZWZlcmVuY2VkIGJ5IGl0ZW1zIGFycmF5 ICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLwot CUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCi0JWExv Z1JlY1B0cglsc247CQkJLyogY3VyclBhZ2UncyBMU04gKHdoZW4gc28tPmRyb3BQaW4pICovCi0K LQkvKiBzY2FuIGRpcmVjdGlvbiBmb3IgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRf cmVhZHBhZ2UgKi8KLQlTY2FuRGlyZWN0aW9uIGRpcjsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRv aW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgbmV4dFR1cGxlT2Zmc2V0IGlzIHRoZSBmaXJzdCBmcmVl Ci0JICogbG9jYXRpb24gaW4gdGhlIGFzc29jaWF0ZWQgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2Uu Ci0JICovCi0JaW50CQkJbmV4dFR1cGxlT2Zmc2V0OwotCi0JLyoKLQkgKiBtb3JlTGVmdCBhbmQg bW9yZVJpZ2h0IHRyYWNrIHdoZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCi0J ICogaW5kZXggZW50cmllcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFn ZSwgcmVzcGVjdGl2ZWx5LgotCSAqLwotCWJvb2wJCW1vcmVMZWZ0OwotCWJvb2wJCW1vcmVSaWdo dDsKLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4 IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcg YmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRv LWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4K LQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZh bGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hp Y2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0 SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRl bTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJ CS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JQlRTY2FuUG9zSXRlbSBpdGVtc1tN YXhUSURzUGVyQlRyZWVQYWdlXTsJLyogTVVTVCBCRSBMQVNUICovCi19IEJUU2NhblBvc0RhdGE7 Ci0KLXR5cGVkZWYgQlRTY2FuUG9zRGF0YSAqQlRTY2FuUG9zOwotCi0jZGVmaW5lIEJUU2NhblBv c0lzUGlubmVkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxp ZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcyku YnVmKSksIFwKLQlCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLSNkZWZpbmUgQlRT Y2FuUG9zVW5waW4oc2NhbnBvcykgXAotCWRvIHsgXAotCQlSZWxlYXNlQnVmZmVyKChzY2FucG9z KS5idWYpOyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JfSB3aGlsZSAo MCkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzY2FucG9zKSBcCi0JZG8geyBcCi0J CWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSkgXAotCQkJQlRTY2FuUG9zVW5waW4oc2Nh bnBvcyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIEJUU2NhblBvc0lzVmFsaWQoc2NhbnBv cykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJy UGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJsb2Nr TnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9z SW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlk QnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAot CX0gd2hpbGUgKDApCisJcmV0dXJuIChCVEJhdGNoRGF0YSAqKSAoKGNoYXIgKikgYmF0Y2ggLSBN QVhBTElHTihzaXplb2YoQlRCYXRjaERhdGEpKSk7Cit9CiAKIC8qIFdlIG5lZWQgb25lIG9mIHRo ZXNlIGZvciBlYWNoIGVxdWFsaXR5LXR5cGUgU0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8KIHR5 cGVkZWYgc3RydWN0IEJUQXJyYXlLZXlJbmZvCkBAIC0xMDUwLDYgKzk2NiwyOCBAQCB0eXBlZGVm IHN0cnVjdCBCVEFycmF5S2V5SW5mbwogCVNjYW5LZXkJCWhpZ2hfY29tcGFyZTsJLyogYXJyYXkn cyA8IG9yIDw9IHVwcGVyIGJvdW5kICovCiB9IEJUQXJyYXlLZXlJbmZvOwogCisvKgorICogQlRT Y2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGlu ZGV4c2Nhbi4KKyAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2Vl IF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKKyAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nlc3Np bmcpLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgYXJyYXkKKyAqIGtleXMuICBU aGVyZSBhcmUgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZSBjdXJyZW50IGFycmF5IGtleXMgdHJh Y2sgdGhlCisgKiBwcm9ncmVzcyBvZiB0aGUgaW5kZXggc2NhbiB0aHJvdWdoIHRoZSBpbmRleCdz IGtleSBzcGFjZSAoc2VlIF9idF9yZWFkcGFnZQorICogYW5kIF9idF9hZHZhbmNlX2FycmF5X2tl eXMpLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkgdHJhY2sgYW55dGhpbmcgYWJvdXQgdGhlCisgKiBj dXJyZW50IHNjYW4gcG9zaXRpb24gaW4gdGhpcyBvcGFxdWUgc3RydWN0LgorICoKKyAqIEluZGV4 IHNjYW5zIHdvcmsgYSBwYWdlIGF0IGEgdGltZSwgYXMgcmVxdWlyZWQgYnkgdGhlIGFtZ2V0YmF0 Y2ggY29udHJhY3Q6CisgKiB3ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwgaWRlbnRpZnkg YWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZQorICogYW5kIHJldHVybiB0aGVtIGlu IGEgbmV3bHkgYWxsb2NhdGVkIGJhdGNoLiAgV2UgdGhlbiByZWxlYXNlIHRoZSByZWFkLWxvY2sK KyAqIHVzaW5nIGFtZ2V0YmF0Y2ggdXRpbGl0eSByb3V0aW5lcy4gIFRoaXMgYXBwcm9hY2ggbWlu aW1pemVzIGxvY2svdW5sb2NrCisgKiB0cmFmZmljLiBfYnRfbmV4dCBpcyBwYXNzZWQgcHJpb3Ji YXRjaCwgd2hpY2ggY29udGFpbnMgZGV0YWlscyBvZiB3aGljaAorICogcGFnZSBpcyBuZXh0IGlu IGxpbmUgdG8gYmUgcmVhZCAocHJpb3JiYXRjaCBpcyBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0 bworICogYnRnZXRiYXRjaCBieSBjb3JlIGNvZGUpLgorICoKKyAqIElmIHdlIGFyZSBkb2luZyBh biBpbmRleC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNo CisgKiBtYXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0 LiAgVGhpcyBpcyBhbHNvIHBlciB0aGUKKyAqIGFtZ2V0YmF0Y2ggY29udHJhY3QuICBQb3N0aW5n IGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCisgKiBhbGxvd2luZyB0aGUg c2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxpc3Qu CisgKi8KIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIHsKIAkvKiB0aGVzZSBmaWVs ZHMgYXJlIHNldCBieSBfYnRfcHJlcHJvY2Vzc19rZXlzKCk6ICovCkBAIC0xMDY2LDMyICsxMDA0 LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCUJUQXJyYXlLZXlJbmZvICph cnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10eXBlIGFycmF5IGtleSAqLwog CUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9jcyBmb3IgcmVxdWlyZWQgZXF1 YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250ZXh0OyAvKiBzY2FuLWxpZmVz cGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0 ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLwotCWludAkJ ICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVkIGl0ZW1z ICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRl bXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBpbiBiZWZvcmUgYnRnZXR0dXBs ZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBz Y2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3b3Jrc3BhY2VzIGZvciB0aGUg Y3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9mIHNpemUKLQkgKiBC TENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZiB0 dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxlIHN0b3JhZ2UgZm9y IGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3Ig bWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBvc2l0aW9uIGlzIG9uIHRoZSBz YW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBkb24ndCB1c2UgbWFya1Bvcywg YnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBtYXJrSXRlbUluZGV4Ci0JICog KGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0aGUgbWFyayBwb3NpdGlvbiku IEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG1hcmssIGZpcnN0IGxvb2sg YXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3MuCi0JICovCi0JaW50CQkJbWFy a0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3QgdmFsaWQgKi8KLQotCS8qIGtl ZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kgKi8KLQlCVFNjYW5Qb3NEYXRh IGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KLQlCVFNjYW5Qb3NEYXRhIG1h cmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwogfSBCVFNjYW5PcGFxdWVEYXRh OwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9wYXF1ZTsKQEAgLTExNjAsMTQg KzEwNzIsMTYgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBEYXR1bSAqdmFs dWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBidGJlZ2luc2NhbihSZWxh dGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gU2l6ZSBidGVzdGlt YXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKTsK IGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQpOwotZXh0ZXJuIGJv b2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4 dGVybiBJbmRleFNjYW5CYXRjaCBidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJ CQkJIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRp cik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRt YXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5L ZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5LZXkgb3JkZXJieXMsIGludCBu b3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIGV4dGVybiB2b2lkIGJ0cGFyYWxsZWxyZXNjYW4o SW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiB2b2lkIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNj IHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRl cm4gdm9pZCBidHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBidHBv c3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJu IEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqYnRidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5m bywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAogCQkJCQkJCQkJ CSAgIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLApAQCAtMTI3MSw4ICsxMTg1LDkg QEAgZXh0ZXJuIHZvaWQgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwog LyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnRyZWFkcGFnZS5jCiAgKi8KLWV4 dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyLAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKTsKK2V4dGVy biBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5l d2JhdGNoLAorCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAor CQkJCQkJIGJvb2wgZmlyc3RwYWdlKTsKIGV4dGVybiB2b2lkIF9idF9zdGFydF9hcnJheV9rZXlz KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludAlfYnRf Ymluc3JjaF9hcnJheV9za2V5KEZtZ3JJbmZvICpvcmRlcnByb2MsCiAJCQkJCQkJCSAgIGJvb2wg Y3VyX2VsZW1fdHJpZywgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMjg3LDE1ICsxMjAyLDE1IEBA IGV4dGVybiBCVFN0YWNrIF9idF9zZWFyY2goUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVs LCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJICBCdWZmZXIgKmJ1ZlAsIGludCBhY2Nlc3MsIGJv b2wgcmV0dXJuc3RhY2spOwogZXh0ZXJuIE9mZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNlcnQo UmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQzMiBf YnRfY29tcGFyZShSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwgT2Zm c2V0TnVtYmVyIG9mZm51bSk7Ci1leHRlcm4gYm9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1leHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfYnRf Zmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5k ZXhTY2FuQmF0Y2ggX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwKKwkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKTsKIGV4dGVybiBCdWZmZXIg X2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1v c3QpOwogCiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIG5idHV0aWxzLmMKICAq LwogZXh0ZXJuIEJUU2Nhbkluc2VydCBfYnRfbWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhU dXBsZSBpdHVwKTsKLWV4dGVybiB2b2lkIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2Fu KTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3ZhY3V1bV9jeWNsZWlkKFJlbGF0aW9uIHJlbCk7CiBl eHRlcm4gQlRDeWNsZUlkIF9idF9zdGFydF92YWN1dW0oUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2 b2lkIF9idF9lbmRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCBj ZTM0MGMwNzYuLmNlZjI4ZjRmZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xNiw4ICsxNiwxMCBA QAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9p dHVwLmgiCisjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIKICNpbmNsdWRlICJub2Rlcy90aWRiaXRt YXAuaCIKICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zi5o IgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKICNpbmNsdWRlICJzdG9yYWdl L3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgpAQCAtMTIyLDggKzEyNCwxNzgg QEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFs bGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXI7CiB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoVGFibGVE YXRhCiB7CiAJUmVsYXRpb24JcmVsOworCisJLyogVGFibGUgQU0gcGVyLWJhdGNoIG9wYXF1ZSBh cmVhIHNpemUgKE1BWEFMSUdOJ2QpLCBzZXQgYnkgQU0gKi8KKwl1aW50MTYJCWJhdGNoX29wYXF1 ZV9zaXplOworCisJLyogUGVyLWl0ZW0gdHJhaWxpbmcgZGF0YSBzaXplIGluIGVhY2ggYmF0Y2gg Ki8KKwl1aW50MTYJCWJhdGNoX3Blcl9pdGVtX3NpemU7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7 CiAKKy8qCisgKiBMb2NhdGlvbiBvZiBhIEJhdGNoTWF0Y2hpbmdJdGVtIHRoYXQgYXBwZWFycyBp biBhIEluZGV4U2NhbkJhdGNoIHJldHVybmVkCisgKiBieSAoYW5kIHN1YnNlcXVlbnRseSBwYXNz ZWQgdG8pIGFuIGFtZ2V0YmF0Y2ggcm91dGluZQorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFJp bmdJdGVtUG9zCit7CisJLyogUG9zaXRpb24gcmVmZXJlbmNlcyBhIHZhbGlkIEJhdGNoUmluZ0J1 ZmZlci5iYXRjaGVzW10gZW50cnk/ICovCisJYm9vbAkJdmFsaWQ7CisKKwkvKiBCYXRjaFJpbmdC dWZmZXIuYmF0Y2hlc1tdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgSW5kZXhTY2FuQmF0Y2ggKi8K Kwl1aW50OAkJYmF0Y2g7CisKKwkvKiBJbmRleFNjYW5CYXRjaC5pdGVtc1tdLXdpc2UgaW5kZXgg dG8gcmVsZXZhbnQgQmF0Y2hNYXRjaGluZ0l0ZW0gKi8KKwlpbnQJCQlpdGVtOworCit9IEJhdGNo UmluZ0l0ZW1Qb3M7CisKKy8qCisgKiBNYXRjaGluZyBpdGVtIHJldHVybmVkIGJ5IGFtZ2V0YmF0 Y2ggKGluIHJldHVybmVkIEluZGV4U2NhbkJhdGNoKSBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4u ICBVc2VkIGJ5IHRhYmxlIEFNIHRvIGxvY2F0ZSByZWxldmFudCBtYXRjaGluZyB0YWJsZSB0dXBs ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0ZW0KK3sKKwlJdGVtUG9pbnRl ckRhdGEgdGFibGVUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIHRhYmxlIGl0ZW0gKi8KKwlPZmZz ZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFn ZSAqLworCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQg aW4gd29ya3NwYWNlLCBpZiBhbnkgKi8KK30gQmF0Y2hNYXRjaGluZ0l0ZW07CisKKy8qCisgKiBQ ZXItaXRlbSB2aXNpYmlsaXR5IGZsYWdzIGZvciBpbmRleC1vbmx5IHNjYW5zLiAgU3RvcmVkIGlu IGEgc2VwYXJhdGUKKyAqIGFycmF5IChJbmRleFNjYW5CYXRjaERhdGEudmlzSW5mbykgcmF0aGVy IHRoYW4gaW4gQmF0Y2hNYXRjaGluZ0l0ZW0gdG8ga2VlcAorICogdGhlIGhvdCBpdGVtcyBhcnJh eSBjb21wYWN0LgorICovCisjZGVmaW5lIEJBVENIX1ZJU19DSEVDS0VECQkweDAxCS8qIGNoZWNr ZWQgaXRlbSBpbiBWTT8gKi8KKyNkZWZpbmUgQkFUQ0hfVklTX0FMTF9WSVNJQkxFCTB4MDIJLyog YmxvY2sgaXMga25vd24gYWxsLXZpc2libGU/ICovCisKKy8qCisgKiBEYXRhIGFib3V0IG9uZSBi YXRjaCBvZiBpdGVtcyByZXR1cm5lZCBieSAoYW5kIHBhc3NlZCB0bykgYW1nZXRiYXRjaCBkdXJp bmcKKyAqIGluZGV4IHNjYW5zLgorICoKKyAqIEVhY2ggYmF0Y2ggYWxsb2NhdGlvbiBoYXMgdGhl IGZvbGxvd2luZyBtZW1vcnkgbGF5b3V0OgorICoKKyAqICAgW3RhYmxlIEFNIG9wYXF1ZSBhcmVh XSAgICA8LSBhdCAtKGJhdGNoX3RhYmxlX29mZnNldCkgZnJvbSBiYXRjaCBwdHIKKyAqICAgW2lu ZGV4IEFNIG9wYXF1ZSBhcmVhXSAgICA8LSBhdCAtKGJhdGNoX2luZGV4X29wYXF1ZV9zaXplKSBm cm9tIGJhdGNoIHB0cgorICogICBbSW5kZXhTY2FuQmF0Y2hEYXRhXSAgICAgIDwtIHRoZSByZXR1 cm5lZCBwb2ludGVyCisgKiAgIFtpdGVtc1ttYXhpdGVtc2JhdGNoXV0KKyAqICAgW3RhYmxlIEFN IHRyYWlsaW5nIGRhdGFdICA8LSBlLmcuIHBlci1pdGVtIHZpc2liaWxpdHkgZmxhZ3MKKyAqICAg W2N1cnJUdXBsZXMgd29ya3NwYWNlXSAgICA8LSBzaXplZCBieSBpbmRleCBBTSAoYmF0Y2hfdHVw bGVzX3dvcmtzcGFjZSkKKyAqCisgKiBUaGUgQU0tc3BlY2lmaWMgb3BhcXVlIGFyZWFzIGFyZSBh Y2Nlc3NlZCB2aWEgYWNjZXNzb3IgZnVuY3Rpb25zIGRlZmluZWQgYnkKKyAqIGVhY2ggdGFibGUg QU0gYW5kIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgdGhlIGJhdGNoIGludGVyZmFjZXMuCisgKi8K K3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQoreworCUJ1ZmZlcgkJYnVmOwkJCS8q IGluZGV4IHBhZ2UgYnVmIChpbnZhbGlkIG1lYW5zIHVucGlubmVkKSAqLworCVhMb2dSZWNQdHIJ bHNuOwkJCS8qIGluZGV4IHBhZ2UncyBMU04gKi8KKworCS8qIHNjYW4gZGlyZWN0aW9uIHdoZW4g dGhlIGluZGV4IHBhZ2Ugd2FzIHJlYWQgKi8KKwlTY2FuRGlyZWN0aW9uIGRpcjsKKworCS8qCisJ ICoga25vd25FbmRCYWNrd2FyZCBhbmQga25vd25FbmRGb3J3YXJkIGFyZSBzZXQgYnkgdGhlIHRh YmxlIEFNIHRvCisJICogaW5kaWNhdGUgdGhhdCB0aGlzIGJhdGNoIGlzIHRoZSBsYXN0IG9uZSB3 aXRoIG1hdGNoaW5nIGl0ZW1zIGluIHRoZQorCSAqIHJlbGV2YW50IHNjYW4gZGlyZWN0aW9uLiAg V2hlbiBhbWdldGJhdGNoIHJldHVybnMgTlVMTCBmb3IgYSBnaXZlbgorCSAqIGRpcmVjdGlvbiwg dGhlIHRhYmxlIEFNIHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBvbiB0aGUgcHJpb3JiYXRj aAorCSAqIHRoYXQgd2FzIHBhc3NlZCB0byB0aGF0IGNhbGwuICBXZSBjYW5ub3Qga25vdyB0aGlz IHdoZW4gYSBiYXRjaCBpcworCSAqIGZpcnN0IHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2g7IGl0IG9u bHkgYmVjb21lcyBhcHBhcmVudCB3aGVuIHdlIHRyeSBhbmQKKwkgKiBmYWlsIHRvIGNvbnRpbnVl IHRoZSBzY2FuIHBhc3QgaXQuCisJICoKKwkgKiBUaGlzIGFsbG93cyB0YWJsZSBBTXMgdG8gYXZv aWQgcmVkdW5kYW50IGFtZ2V0YmF0Y2ggY2FsbHMgd2l0aCB0aGUgc2FtZQorCSAqIHByaW9yYmF0 Y2ggLS0gdGhlIGluZGV4IEFNIG1pZ2h0IG5lZWQgdG8gcmVhZCBhZGRpdGlvbmFsIGluZGV4IHBh Z2VzIHRvCisJICogZGV0ZXJtaW5lIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGJl eW9uZCBjYWxsZXIncyBwcmlvcmJhdGNoLgorCSAqLworCWJvb2wJCWtub3duRW5kQmFja3dhcmQ7 CisJYm9vbAkJa25vd25FbmRGb3J3YXJkOworCisJLyoKKwkgKiBNYXRjaGluZyBpdGVtcyBzdGF0 ZSBmb3IgdGhpcyBiYXRjaC4gIE91dHB1dCBieSBpbmRleCBBTSBmb3IgdGFibGUgQU0uCisJICoK KwkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXggb3JkZXIgKGll LCBieSBpbmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2FubmluZyBiYWNrd2Fy ZHMgaXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zCisJICogdG8gZmlsbCB0aGUgYXJyYXkg YmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3QgaXRlbSBzbG90IGFuZAorCSAq IGZpbGwgZG93bndhcmRzLiAgVGhpcyBpcyB3aHkgd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQt ZW50cnkgYW5kIGEKKwkgKiBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCisJICoKKwkgKiBOb3Rl OiB0aGVzZSBhcmUgc2lnbmVkIGJlY2F1c2UgaXQncyBzb21ldGltZXMgY29udmVuaWVudCB0byB1 c2UgLTEgdG8KKwkgKiByZXByZXNlbnQgYW4gb3V0LW9mLWJvdW5kcyBzcGFjZSBqdXN0IGJlZm9y ZSBmaXJzdEl0ZW0gKHdoZW4gaXQncyAwKS4KKwkgKi8KKwlpbnQJCQlmaXJzdEl0ZW07CQkvKiBm aXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0 IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8qIGluZm8gYWJvdXQgZGVhZCBpdGVtcyBp ZiBhbnkgKGRlYWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCisJaW50CQkJbnVtRGVh ZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCisJaW50CQkgICAqZGVh ZEl0ZW1zOwkJLyogaW5kZXhlcyBvZiBkZWFkIGl0ZW1zICovCisKKwkvKgorCSAqIElmIHdlIGFy ZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoaXMgaXMgdGhlIHR1cGxlIHN0b3JhZ2Ugd29y a3NwYWNlCisJICogZm9yIHRoZSBtYXRjaGluZyB0dXBsZXMgKHR1cGxlcyByZWZlcmVuY2VkIGJ5 IGl0ZW1zW10pLiAgVGhlIHdvcmtzcGFjZQorCSAqIHNpemUgaXMgZGV0ZXJtaW5lZCBieSB0aGUg aW5kZXggQU0gKGJhdGNoX3R1cGxlc193b3Jrc3BhY2UpLgorCSAqCisJICogY3VyclR1cGxlcyBw b2ludHMgaW50byB0aGUgdHJhaWxpbmcgcG9ydGlvbiBvZiB0aGlzIGFsbG9jYXRpb24sIHBhc3QK KwkgKiBpdGVtc1tdIGFuZCBhbnkgdGFibGUgQU0gdHJhaWxpbmcgZGF0YS4gIEl0IGlzIE5VTEwg Zm9yIHBsYWluIGluZGV4CisJICogc2NhbnMuCisJICovCisJY2hhcgkgICAqY3VyclR1cGxlczsJ CS8qIHR1cGxlIHN0b3JhZ2UgZm9yIGl0ZW1zW10gKi8KKwlCYXRjaE1hdGNoaW5nSXRlbSBpdGVt c1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBtYXRjaGluZyBpdGVtcyAqLworfSBJbmRleFNj YW5CYXRjaERhdGE7CisKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhT Y2FuQmF0Y2g7CisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzIChsZWFmIHBhZ2Vz KSB3ZSBjYW4ga2VlcCBpbiBtZW1vcnkuICBXZSBuZWVkIGEKKyAqIG1pbmltdW0gb2YgdHdvLCBz aW5jZSB3ZSdsbCBvbmx5IGNvbnNpZGVyIHJlbGVhc2luZyBvbmUgYmF0Y2ggd2hlbiBhbm90aGVy CisgKiBpcyByZWFkLgorICoKKyAqIFRoZSBjdXJyZW50IG1heGltdW0gb2YgNjQgYmF0Y2hlcyBp cyBzb21ld2hhdCBvZiBhbiBhcmJpdHJhcnkgbGltaXQuICBWZXJ5CisgKiBmZXcgc2NhbnMgZXZl ciBnZXQgbmVhciB0byB0aGlzIGxpbWl0IGluIHByYWN0aWNlLgorICovCisjZGVmaW5lIElOREVY X1NDQU5fTUFYX0JBVENIRVMJCTY0CisjZGVmaW5lIElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUwky CisKKy8qCisgKiBTdGF0ZSB1c2VkIGJ5IHRhYmxlIEFNcyB0byBtYW5hZ2UgYW4gaW5kZXggc2Nh biB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0Y2gKKyAqIGludGVyZmFjZS4gIFNjYW5zIHVzZSBhIHJp bmcgYnVmZmVyIG9mIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAqCisgKiBCYXRj aGVzIGFyZSBrZXB0IGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZSByZXR1cm5lZCBpbiBieSBh bWdldGJhdGNoLAorICogc2luY2UgdGhhdCBpcyB0aGUgc2FtZSBvcmRlciB0aGF0IHRhYmxlX2lu ZGV4X2dldG5leHRfc2xvdCB3aWxsIHJldHVybgorICogbWF0Y2hlcyBpbi4gIEhvd2V2ZXIsIHRh YmxlIEFNcyBhcmUgZnJlZSB0byBmZXRjaCB0YWJsZSB0dXBsZXMgaW4gd2hhdGV2ZXIKKyAqIG9y ZGVyIGlzIG1vc3QgY29udmVuaWVudC9lZmZpY2llbnQgLS0gcHJvdmlkZWQgdGhhdCBzdWNoIHJl b3JkZXJpbmcgY2Fubm90CisgKiBhZmZlY3QgdGhlIG9yZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90IGxhdGVyIHJldHVybnMgdHVwbGVzIGluLgorICovCit0eXBlZGVmIHN0cnVjdCBC YXRjaFJpbmdCdWZmZXIKK3sKKwkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBiYXRjaGVzW10gZm9y IHNjYW4gKi8KKwlCYXRjaFJpbmdJdGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4ncyByZWFkIHBvc2l0 aW9uICovCisJQmF0Y2hSaW5nSXRlbVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRp b24gKi8KKworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaDsKKworCS8qCisJICogaGVhZEJhdGNo IGlzIGFuIGluZGV4IHRvIHRoZSBlYXJsaWVzdCBzdGlsbC12YWxpZCBiYXRjaCBpbiAnYmF0Y2hl cycuCisJICogSW4gcHJhY3RpY2UgdGhpcyBtdXN0IGJlIHRoZSBzY2FuJ3MgY3VycmVudCBzY2Fu UG9zIGJhdGNoIChzY2FuQmF0Y2gpLgorCSAqLworCXVpbnQ4CQloZWFkQmF0Y2g7CisKKwkvKgor CSAqIG5leHRCYXRjaCBpcyBhbiBpbmRleCB0byB0aGUgbmV4dCBlbXB0eSBiYXRjaCBzbG90IGlu ICdiYXRjaGVzJy4gIFRoaXMKKwkgKiBpcyBvbmx5IGFjdHVhbGx5IHVzYWJsZSB3aGVuIHRoZSBz Y2FuIGlzICFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoKS4KKwkgKi8KKwl1aW50OAkJbmV4dEJhdGNo OworCisJLyoKKwkgKiBTaG91bGQgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Ugc2F2ZSBjYWxs ZXIncyBiYXRjaCBpbiBjYWNoZVtdPworCSAqLworCWJvb2wJCWRvbmU7CisKKwkvKiBBcnJheSBv ZiBwb2ludGVycyB0byBjYWNoZWQgcmVjeWNsYWJsZSBiYXRjaGVzICovCisJSW5kZXhTY2FuQmF0 Y2ggY2FjaGVbSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTXTsKKworCS8qIEFycmF5IG9mIHBvaW50 ZXJzIHRvIHJpbmcgYnVmZmVyIGJhdGNoZXMgKi8KKwlJbmRleFNjYW5CYXRjaCBiYXRjaGVzW0lO REVYX1NDQU5fTUFYX0JBVENIRVNdOworCit9IEJhdGNoUmluZ0J1ZmZlcjsKKwogc3RydWN0IElu ZGV4U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKQEAgLTE0MSw2ICszMTMsMTggQEAgdHlwZWRl ZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlpbnQJCQludW1iZXJPZk9yZGVyQnlzOwkvKiBu dW1iZXIgb2Ygb3JkZXJpbmcgb3BlcmF0b3JzICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICprZXlE YXRhOwkvKiBhcnJheSBvZiBpbmRleCBxdWFsaWZpZXIgZGVzY3JpcHRvcnMgKi8KIAlzdHJ1Y3Qg U2NhbktleURhdGEgKm9yZGVyQnlEYXRhOwkvKiBhcnJheSBvZiBvcmRlcmluZyBvcCBkZXNjcmlw dG9ycyAqLworCisJLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KKwl2 b2lkCSAgICpvcGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCisKKwkv KiB0YWJsZSBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBhbWdldGJhdGNoIHN0YXRlICovCisJQmF0 Y2hSaW5nQnVmZmVyIGJhdGNocmluZ2J1ZjsJLyogYW1nZXRiYXRjaCByZWxhdGVkIHN0YXRlICov CisKKwlib29sCQl1c2ViYXRjaHJpbmc7CS8qIHNjYW4gdXNlcyBhbWdldGJhdGNoL2JhdGNocmlu Z2J1Zj8gKi8KKworCS8qIENhY2hlZCBiYXRjaCBmb3IgYW1nZXRiaXRtYXAgY2FsbGVycyAoYXZv aWRzIHJlcGVhdGVkIGFsbG9jL2ZyZWUpICovCisJSW5kZXhTY2FuQmF0Y2ggeHNfYml0bWFwX2Jh dGNoOworCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBjYWxsZXIgcmVxdWVzdHMgaW5kZXggdHVw bGVzICovCiAJYm9vbAkJeHNfdGVtcF9zbmFwOwkvKiB1bnJlZ2lzdGVyIHNuYXBzaG90IGF0IHNj YW4gZW5kPyAqLwogCkBAIC0xNDksOSArMzMzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2Fu RGVzY0RhdGEKIAlib29sCQlpZ25vcmVfa2lsbGVkX3R1cGxlczsJLyogZG8gbm90IHJldHVybiBr aWxsZWQgZW50cmllcyAqLwogCWJvb2wJCXhhY3RTdGFydGVkSW5SZWNvdmVyeTsJLyogcHJldmVu dHMga2lsbGluZy9zZWVpbmcga2lsbGVkCiAJCQkJCQkJCQkJICogdHVwbGVzICovCi0KLQkvKiBp bmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAqLwotCXZvaWQJICAgKm9wYXF1ZTsJ CQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKwkvKiB4c19zbmFwc2hvdCB1c2Vz IGFuIE1WQ0Mgc25hcHNob3Q/ICovCisJYm9vbAkJTVZDQ1NjYW47CiAKIAkvKgogCSAqIEluc3Ry dW1lbnRhdGlvbiBjb3VudGVycyBtYWludGFpbmVkIGJ5IGFsbCBpbmRleCBBTXMgZHVyaW5nIGJv dGgKQEAgLTE2MCwxMCArMzQzLDEwIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRh CiAJc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudDsKIAogCS8qCi0J ICogSW4gYW4gaW5kZXgtb25seSBzY2FuLCBhIHN1Y2Nlc3NmdWwgYW1nZXR0dXBsZSBjYWxsIG11 c3QgZmlsbCBlaXRoZXIKLQkgKiB4c19pdHVwIChhbmQgeHNfaXR1cGRlc2MpIG9yIHhzX2hpdHVw IChhbmQgeHNfaGl0dXBkZXNjKSB0byBwcm92aWRlIHRoZQotCSAqIGRhdGEgcmV0dXJuZWQgYnkg dGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlIHRoZSBoZWFwCi0JICog Zm9ybWF0IHdpbGwgYmUgdXNlZC4KKwkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4sIGEgc3VjY2Vz c2Z1bCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbCBtdXN0CisJICogZmlsbCBlaXRoZXIg eHNfaXR1cCAoYW5kIHhzX2l0dXBkZXNjKSBvciB4c19oaXR1cCAoYW5kIHhzX2hpdHVwZGVzYykg dG8KKwkgKiBwcm92aWRlIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBzY2FuLiAgSXQgY2FuIGZp bGwgYm90aCwgaW4gd2hpY2ggY2FzZQorCSAqIHRoZSBoZWFwIGZvcm1hdCB3aWxsIGJlIHVzZWQu CiAJICovCiAJSW5kZXhUdXBsZQl4c19pdHVwOwkJLyogaW5kZXggdHVwbGUgcmV0dXJuZWQgYnkg QU0gKi8KIAlzdHJ1Y3QgVHVwbGVEZXNjRGF0YSAqeHNfaXR1cGRlc2M7CS8qIHJvd3R5cGUgZGVz Y3JpcHRvciBvZiB4c19pdHVwICovCkBAIC0xNzYsNiArMzU5LDE0IEBAIHR5cGVkZWYgc3RydWN0 IEluZGV4U2NhbkRlc2NEYXRhCiAJSW5kZXhGZXRjaFRhYmxlRGF0YSAqeHNfaGVhcGZldGNoOwog CiAJYm9vbAkJeHNfcmVjaGVjazsJCS8qIFQgbWVhbnMgc2NhbiBrZXlzIG11c3QgYmUgcmVjaGVj a2VkICovCisJdWludDE2CQltYXhpdGVtc2JhdGNoOwkvKiBzZXQgYnkgYW1iZWdpbnNjYW4gd2hl biBhbWdldGJhdGNoIHVzZWQgKi8KKworCS8qIFBlci1iYXRjaCBvcGFxdWUgYXJlYSBzaXplcywg c2V0IGJ5IGluZGV4IEFNIGluIGFtYmVnaW5zY2FuICovCisJdWludDE2CQliYXRjaF9pbmRleF9v cGFxdWVfc2l6ZTsJLyogTUFYQUxJR04nZCBpbmRleCBBTSBvcGFxdWUgc2l6ZSAqLworCXVpbnQx NgkJYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTsgLyogY3VyclR1cGxlcyB3b3Jrc3BhY2Ugc2l6ZSAq LworCisJLyogQ29tcHV0ZWQgb2Zmc2V0IGZyb20gYmF0Y2ggcG9pbnRlciB0byB0YWJsZSBBTSBv cGFxdWUgKGluY2x1ZGVzIGJvdGgpICovCisJdWludDE2CQliYXRjaF90YWJsZV9vZmZzZXQ7CiAK IAkvKgogCSAqIFdoZW4gZmV0Y2hpbmcgd2l0aCBhbiBvcmRlcmluZyBvcGVyYXRvciwgdGhlIHZh bHVlcyBvZiB0aGUgT1JERVIgQlkKQEAgLTIxNSw0ICs0MDYsMTI0IEBAIHR5cGVkZWYgc3RydWN0 IFN5c1NjYW5EZXNjRGF0YQogCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIH0gU3lzU2Nh bkRlc2NEYXRhOwogCisvKgorICogUmV0dXJuIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFzZSBvZiBh IGJhdGNoIChhY2NvdW50aW5nIGZvciBBTSBvcGFxdWUgYXJlYXMKKyAqIHN0b3JlZCBiZWZvcmUg dGhlIEluZGV4U2NhbkJhdGNoRGF0YSBwb2ludGVyKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lk ICoKK2JhdGNoX2FsbG9jX2Jhc2UoSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEluZGV4U2NhbkRlc2NE YXRhICpzY2FuKQoreworCXJldHVybiAoY2hhciAqKSBiYXRjaCAtIHNjYW4tPmJhdGNoX3RhYmxl X29mZnNldDsKK30KKworLyoKKyAqIENvdW50IGhvdyBtYW55IGJhdGNoZXMgYXJlIGN1cnJlbnRs eSBsb2FkZWQgaW4gdGhlIHJpbmcgYnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4Citp bmRleF9zY2FuX2JhdGNoX2NvdW50KEluZGV4U2NhbkRlc2NEYXRhICpzY2FuKQoreworCXJldHVy biAodWludDgpIChzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoIC0KKwkJCQkJc2Nhbi0+YmF0 Y2hyaW5nYnVmLmhlYWRCYXRjaCk7Cit9CisKKy8qCisgKiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJh dGNoIHdpdGggdGhlIHJlcXVlc3RlZCBpbmRleD8KKyAqLworc3RhdGljIGlubGluZSBib29sCitp bmRleF9zY2FuX2JhdGNoX2xvYWRlZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgdWludDggaWR4 KQoreworCXJldHVybiAoaW50OCkgKGlkeCAtIHNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2gp ID49IDAgJiYKKwkJKGludDgpIChpZHggLSBzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoKSA8 IDA7Cit9CisKKy8qCisgKiBIYXZlIHdlIGxvYWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmF0 Y2hlcz8KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2Z1bGwoSW5k ZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuIGluZGV4X3NjYW5fYmF0Y2hfY291bnQo c2NhbikgPT0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUzsKK30KKworLyoKKyAqIFJldHVybiBiYXRj aCBmb3IgdGhlIHByb3ZpZGVkIGluZGV4LgorICovCitzdGF0aWMgaW5saW5lIEluZGV4U2NhbkJh dGNoCitpbmRleF9zY2FuX2JhdGNoKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCB1aW50OCBpZHgp Cit7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIGlkeCkpOworCisJcmV0 dXJuIHNjYW4tPmJhdGNocmluZ2J1Zi5iYXRjaGVzW2lkeCAmIChJTkRFWF9TQ0FOX01BWF9CQVRD SEVTIC0gMSldOworfQorCisvKgorICogQXBwZW5kIGdpdmVuIGJhdGNoIHRvIHNjYW4ncyBiYXRj aCByaW5nIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX2JhdGNo X2FwcGVuZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7 CisJQmF0Y2hSaW5nQnVmZmVyICpyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwl1aW50 OAkJbmV4dEJhdGNoID0gcmluZ2J1Zi0+bmV4dEJhdGNoOworCisJcmluZ2J1Zi0+YmF0Y2hlc1tu ZXh0QmF0Y2ggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpXSA9IGJhdGNoOworCXJpbmdi dWYtPm5leHRCYXRjaCsrOworfQorCisvKgorICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4 dCBpdGVtIGluIHRoZSBiYXRjaC4KKyAqCisgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0gd2l0 aGluIHRoZSBwcm92aWRlZCBiYXRjaCAob3IgdG8gdGhlIHByZXZpb3VzIGl0ZW0sCisgKiB3aGVu IHNjYW5uaW5nIGJhY2t3YXJkcykuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlv biBjb3VsZCBiZSBhZHZhbmNlZC4gIFJldHVybnMgZmFsc2Ugd2hlbiB0aGVyZQorICogYXJlIG5v IG1vcmUgaXRlbXMgaW4gdGhlIGJhdGNoIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgKi8KK3N0 YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9wb3NfYWR2YW5jZShTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbiwKKwkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3Mg KnBvcykKK3sKKwlBc3NlcnQocG9zLT52YWxpZCk7CisKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXJlY3Rpb24pKQorCXsKKwkJaWYgKCsrcG9zLT5pdGVtID4gYmF0Y2gtPmxhc3RJdGVt KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCQkJCQkJLyogU2NhbkRpcmVjdGlvbklzQmFj a3dhcmQgKi8KKwl7CisJCWlmICgtLXBvcy0+aXRlbSA8IGJhdGNoLT5maXJzdEl0ZW0pCisJCQly ZXR1cm4gZmFsc2U7CisJfQorCisJLyogQWR2YW5jZWQgd2l0aGluIGJhdGNoICovCisJcmV0dXJu IHRydWU7Cit9CisKKy8qCisgKiBBZHZhbmNlIGJhdGNoIHBvc2l0aW9uIHRvIHRoZSBzdGFydCBv ZiBpdHMgbmV3IGJhdGNoLgorICoKKyAqIFNldHMgdGhlIGdpdmVuIHBvc2l0aW9uIHRvIHRoZSBm aXN0IGl0ZW0gaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uIChvciB0bworICogdGhlIGxhc3Qg aXRlbSwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLiAgIEFsc28gYWR2YW5jZXMvaW5jcmVtZW50 cyBiYXRjaAorICogb2Zmc2V0IGZyb20gcG9zaXRpb24gc3VjaCB0aGF0IGl0IHBvaW50cyB0byBu ZXdCYXRjaEZvclBvcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX3Bvc19u ZXh0YmF0Y2goU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgSW5kZXhTY2FuQmF0Y2gg bmV3QmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3NlcnQobmV3QmF0Y2gtPmRp ciA9PSBkaXJlY3Rpb24pOworCisJLyogSW5jcmVtZW50IGJhdGNoIChvZnRlbiB3cmFwcyB1aW50 OCBiYXRjaCBmaWVsZCkgKi8KKwlpZiAocG9zLT52YWxpZCkKKwkJcG9zLT5iYXRjaCsrOworCWVs c2UKKwkJcG9zLT5iYXRjaCA9IDA7CisKKwlwb3MtPnZhbGlkID0gdHJ1ZTsKKworCWlmIChTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXBvcy0+aXRlbSA9IG5ld0JhdGNoLT5m aXJzdEl0ZW07CisJZWxzZQorCQlwb3MtPml0ZW0gPSBuZXdCYXRjaC0+bGFzdEl0ZW07Cit9CisK ICNlbmRpZgkJCQkJCQkvKiBSRUxTQ0FOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDA2MDg0 NzUyMi4uMzAxMWY0ZWRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQzMywxMSArNDMzLDQyIEBA IHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRj aF9lbmQpIChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIElu aXRpYWxpemUgdGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgd2l0aGluIGEgYmF0Y2gg YWxsb2NhdGlvbi4KKwkgKgorCSAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Mg Zm9yIGVhY2ggbmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorCSAqIFRhYmxlIEFNcyBzaG91bGQgc2V0 IHVwIGl0cyBvcGFxdWUgYXJlYSAoYXQgYSBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUKKwkgKiBi YXRjaCBwb2ludGVyKSBhbmQgYW55IHRyYWlsaW5nIHBlci1pdGVtIGRhdGEgKGUuZy4gdmlzaWJp bGl0eSBmbGFncykuCisJICoKKwkgKiAnbmV3X2FsbG9jJyBpcyB0cnVlIGZvciBmcmVzaGx5IHBh bGxvYydkIGJhdGNoZXMsIGZhbHNlIGZvciBiYXRjaGVzCisJICogcmVjeWNsZWQgZnJvbSB0aGUg Y2FjaGUuCisJICovCisJdm9pZAkJKCppbmRleF9iYXRjaF9pbml0KSAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCSBib29sIG5ld19hbGxvYyk7CisK KwkvKgorCSAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIHNs b3QsIHNjYW5uaW5nIGluIHRoZQorCSAqIHNwZWNpZmllZCBkaXJlY3Rpb24sIGFuZCByZXR1cm4g dHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFsc2UKKwkgKiBvdGhlcndpc2UuCisJICoKKwkg KiBUaGlzIGNhbGxiYWNrIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdlIHRo ZSBzY2FuIHByb2Nlc3MsCisJICogaW5jbHVkaW5nIGludGVyZmFjaW5nIHdpdGggdGhlIGluZGV4 IEFNLiBUaGUgY2FsbGVyIHNpbXBseSBzcGVjaWZpZXMKKwkgKiB0aGUgZGlyZWN0aW9uIG9mIHRo ZSBzY2FuOyB0aGUgdGFibGUgQU0gdGFrZXMgY2FyZSBvZiByZXRyaWV2aW5nIFRJRHMKKwkgKiBm cm9tIHRoZSBpbmRleCwgcGVyZm9ybWluZyB2aXNpYmlsaXR5IGNoZWNrcywgYW5kIHJldHVybmlu ZyB0dXBsZXMgaW4KKwkgKiB0aGUgc2xvdC4KKwkgKi8KKwlib29sCQkoKmluZGV4X2dldG5leHRf c2xvdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uLAorCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCiAJLyoKIAkgKiBG ZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5 IHRlc3QKIAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQg YW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0eQogCSAqIHRlc3QsIHJldHVybiB0cnVlLCBmYWxzZSBv dGhlcndpc2UuCiAJICoKKwkgKiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgY2FsbGJhY2sgdGhhdCB0 YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuCisJICogQ2FsbGVycyBzaG91bGQgZmF2b3IgdGhl IGluZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjayB3aGVuZXZlciBwb3NzaWJsZS4KKwkgKgogCSAq IE5vdGUgdGhhdCBBTXMgdGhhdCBkbyBub3QgbmVjZXNzYXJpbHkgdXBkYXRlIGluZGV4ZXMgd2hl biBpbmRleGVkCiAJICogY29sdW1ucyBkbyBub3QgY2hhbmdlLCBuZWVkIHRvIHJldHVybiB0aGUg Y3VycmVudC9jb3JyZWN0IHZlcnNpb24gb2YKIAkgKiB0aGUgdHVwbGUgdGhhdCBpcyB2aXNpYmxl IHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBpZiB0aGUgdGlkIHBvaW50cyB0byBhbgpAQCAtMTIwNyw2 ICsxMjM4LDM3IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxl RGF0YSAqc2NhbikKIAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2ZldGNoX2VuZChzY2Fu KTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgdGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFy ZWEgd2l0aGluIGEgYmF0Y2ggYWxsb2NhdGlvbi4KKyAqCisgKiBDYWxsZWQgYnkgaW5kZXhhbV91 dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKyAqLworc3Rh dGljIGlubGluZSB2b2lkCit0YWJsZV9pbmRleF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIGJvb2wgbmV3X2FsbG9jKQoreworCXNjYW4tPmhlYXBS ZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfYmF0Y2hfaW5pdChzY2FuLCBiYXRjaCwgbmV3X2Fs bG9jKTsKK30KKworLyoKKyAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2Nh biBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiBS ZXR1cm5zIHRydWUgaWYgYSB0dXBsZSB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisg KiBUaGUgaW5kZXggc2NhbiBzaG91bGQgaGF2ZSBiZWVuIHN0YXJ0ZWQgdmlhIHRhYmxlX2luZGV4 X2ZldGNoX2JlZ2luKCkuCisgKiBDYWxsZXJzIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjayBh bmQgcmVjaGVjayBzY2FuIGtleXMgaWYgcmVxdWlyZWQuCisgKgorICogSW5kZXgtb25seSBzY2Fu IGNhbGxlcnMgKHRoYXQgcGFzcyB4c193YW50X2l0dXA9dHJ1ZSB0byBpbmRleF9iZWdpbnNjYW4p CisgKiBjYW4gY29uc3VtZSBpbmRleCB0dXBsZSByZXN1bHRzIGJ5IGV4YW1pbmluZyBJbmRleFNj YW5EZXNjRGF0YSBmaWVsZHMgc3VjaAorICogYXMgeHNfaXR1cCBhbmQgeHNfaGl0dXAuICBUaGUg dGFibGUgQU0gd29uJ3QgdXN1YWxseSBmZXRjaCBhIGhlYXAgdHVwbGUKKyAqIGludG8gdGhlIHBy b3ZpZGVkIHNsb3QgaW4gdGhlIGNhc2Ugb2YgeHNfd2FudF9pdHVwPXRydWUgY2FsbGVycy4KKyAq Lworc3RhdGljIGlubGluZSBib29sCit0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2Fu RGVzYyBpc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgVHVwbGVUYWJsZVNs b3QgKnNsb3QpCit7CisJcmV0dXJuIGlzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmlu ZGV4X2dldG5leHRfc2xvdChpc2NhbiwKKwkJCQkJCQkJCQkJCQkJCSAgIGRpcmVjdGlvbiwgc2xv dCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4sIHR1cGxl IGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwogICogYSB2aXNpYmlsaXR5IHRlc3Qg YWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQK QEAgLTEyMzAsNiArMTI5Miw5IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVudHJ5IChsaWtlIGhlYXAncyBIT1QpLiBXaGVyZWFz IHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQogICogZXZhbHVhdGVzIHRoZSB0 dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4IGVudHJ5IC0+dGFibGUgdHVw bGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMgd2hhdCdz IHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBpbnRlcmZhY2Ug dGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxsZXJzCisgKiBzaG91bGQgZmF2 b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIgcG9zc2li bGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1l bnRfbm9kZS5oCmluZGV4IDg4NDdkN2Y5NC4uYjViOGY1MDlhIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRv ci9pbnN0cnVtZW50X25vZGUuaApAQCAtNDgsNiArNDgsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogSW5kZXggc2VhcmNoIGNvdW50IChpbmNyZW1l bnRlZCB3aXRoIHBnc3RhdF9jb3VudF9pbmRleF9zY2FuIGNhbGwpICovCiAJdWludDY0CQluc2Vh cmNoZXM7CisKKwkvKgorCSAqIGhlYXAgYmxvY2tzIGZldGNoZWQgY291bnRzIChpbmNyZW1lbnRl ZCBieSBpbmRleF9nZXRuZXh0X3Nsb3QgY2FsbHMKKwkgKiB3aXRoaW4gdGFibGUgQU1zLCB0aG91 Z2ggb25seSBkdXJpbmcgaW5kZXgtb25seSBzY2FucykKKwkgKi8KKwl1aW50NjQJCW5oZWFwZmV0 Y2hlczsKIH0gSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAppbmRleCA1MTc4MmQxZmMuLjdjMWI0MjdmYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3 NTQsNyArMTc1NCw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAgKgkJSW5zdHJ1 bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50YXRpb24KICAqCQlTaGFyZWRJbmZv CQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9uIChubyBsZWFkZXIgZW50cnkpCiAg KgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxlcyBmZXRjaGVkIGZyb20gdGhl IHRhYmxlCi0gKgkJVk1CdWZmZXIJCSAgIGJ1ZmZlciBpbiB1c2UgZm9yIHZpc2liaWxpdHkgbWFw IHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9mIHBhcmFsbGVsIGluZGV4 LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdBdHROdW1zIGF0dG51bXMgb2Yg bmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxFTgogICoJCU5hbWVDU3RyaW5n Q291bnQgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIE5hbWVDU3RyaW5nQXR0TnVtcyBhcnJh eQpAQCAtMTc3Nyw3ICsxNzc2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRl CiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX0luc3RydW1lbnQ7CiAJU2hhcmVkSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX1NoYXJlZEluZm87CiAJVHVwbGVUYWJsZVNsb3Qg Kmlvc3NfVGFibGVTbG90OwotCUJ1ZmZlcgkJaW9zc19WTUJ1ZmZlcjsKIAlTaXplCQlpb3NzX1Bz Y2FuTGVuOwogCUF0dHJOdW1iZXIgKmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zOwogCWludAkJCWlv c3NfTmFtZUNTdHJpbmdDb3VudDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMjc3NThlYzE2Li4w NjYxZmMwM2QgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xNDI1LDEyICsxNDI1LDEyIEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4T3B0SW5mbwogCWJvb2wJCWFtb3B0aW9uYWxrZXk7CiAJYm9vbAkJ YW1zZWFyY2hhcnJheTsKIAlib29sCQlhbXNlYXJjaG51bGxzOwotCS8qIGRvZXMgQU0gaGF2ZSBh bWdldHR1cGxlIGludGVyZmFjZT8gKi8KLQlib29sCQlhbWhhc2dldHR1cGxlOworCS8qIGRvZXMg QU0gaGF2ZSBhbWdldGJhdGNoIChvciBnZXR0dXBsZSkgaW50ZXJmYWNlPyAqLworCWJvb2wJCWFt aGFzZ2V0YmF0Y2g7CiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFjZT8gKi8K IAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAlib29sCQlhbWNhbnBhcmFsbGVsOwotCS8qIGRvZXMg QU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAqLworCS8qIGlzIEFNIHByZXBhcmVkIGZvciB1 cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAlib29sCQlhbWNhbm1hcmtwb3M7CiAJLyogQU0ncyBj b3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhlciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBoZXJlLCB3 ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j CmluZGV4IDE5MDljMzI1NC4uZTcwNzYwNzBmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0y OTYsMTAgKzI5NiwxMSBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdp bnNjYW4gPSBicmluYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBicmlucmVzY2FuLAogCQkuYW1n ZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0 Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBicmluZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2Fu ID0gYnJpbmVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5V TEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBO VUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4g PSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKaW5kZXggNmIxNDhlNjlhLi44ZjcwMzNkNjIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwpAQCAtMTk1Myw5ICsxOTUzLDkgQEAgZ2luZ2V0Yml0 bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJICogaW50byB0aGUgbWFp biBpbmRleCwgYW5kIHNvIHdlIG1pZ2h0IHZpc2l0IGl0IGEgc2Vjb25kIHRpbWUgZHVyaW5nIHRo ZQogCSAqIG1haW4gc2Nhbi4gIFRoaXMgaXMgb2theSBiZWNhdXNlIHdlJ2xsIGp1c3QgcmUtc2V0 IHRoZSBzYW1lIGJpdCBpbiB0aGUKIAkgKiBiaXRtYXAuICAoVGhlIHBvc3NpYmlsaXR5IG9mIGR1 cGxpY2F0ZSB2aXNpdHMgaXMgYSBtYWpvciByZWFzb24gd2h5IEdJTgotCSAqIGNhbid0IHN1cHBv cnQgdGhlIGFtZ2V0dHVwbGUgQVBJLCBob3dldmVyLikgTm90ZSB0aGF0IGl0IHdvdWxkIG5vdCBk bwotCSAqIHRvIHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNp bmNlIGNvbmN1cnJlbnQKLQkgKiBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJp ZXMgZW50aXJlbHkuCisJICogY2FuJ3Qgc3VwcG9ydCBlaXRoZXIgdGhlIGFtZ2V0dHVwbGUgb3Ig YW1nZXRiYXRjaCBBUEkuKSBOb3RlIHRoYXQgaXQKKwkgKiB3b3VsZCBub3QgZG8gdG8gc2NhbiB0 aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2UKKwkgKiBjb25jdXJy ZW50IGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBlbnRpcmVseS4KIAkg Ki8KIAlzY2FuUGVuZGluZ0luc2VydChzY2FuLCB0Ym0sICZudGlkcyk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW51dGlsLmMKaW5kZXggZmY5MjcyNzljLi40MWUwNjI2NmQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2ludXRpbC5jCkBAIC04MiwxMCArODIsMTEgQEAgZ2luaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQogCQkuYW1iZWdpbnNjYW4gPSBnaW5iZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGdpbnJlc2Nh biwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtp bGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gZ2luZ2V0Yml0bWFwLAogCQku YW1lbmRzY2FuID0gZ2luZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3Ry cG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxl bHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0 LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggODU2NWUyMjViLi41YzM4 ZWE5OTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTEwMywxMCArMTAzLDExIEBAIGdpc3Ro YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGdpc3RiZWdpbnNjYW4s CiAJCS5hbXJlc2NhbiA9IGdpc3RyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gZ2lzdGdldHR1cGxl LAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJ LmFtZ2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpc3RlbmRzY2Fu LAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3Ny ZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5p dHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2guYwppbmRleCBlODhkZGIzMmEuLjViNWM1YzZmYSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2guYwpAQCAtMTAyLDEwICsxMDIsMTEgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJH UykKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFzaHJl c2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVM TCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBoYXNoZ2V0 Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxM LAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0 aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwK IAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9oYW5kbGVyLmMKaW5kZXggZDdiMDVhYTE0Li40ODRkYjAwMjUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMTksNiArMTksNyBAQAogICovCiAjaW5jbHVk ZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgogI2luY2x1ZGUgImFj Y2Vzcy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nl c3MvaGVhcHRvYXN0LmgiCkBAIC04NCw4ICs4NSwxMCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfYmVn aW4oUmVsYXRpb24gcmVsKQogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29i amVjdChJbmRleEZldGNoSGVhcERhdGEpOwogCiAJaHNjYW4tPnhzX2Jhc2UucmVsID0gcmVsOwot CWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfYmFzZS5iYXRjaF9v cGFxdWVfc2l6ZSA9IE1BWEFMSUdOKHNpemVvZihIZWFwQmF0Y2hEYXRhKSk7CisJaHNjYW4tPnhz X2Jhc2UuYmF0Y2hfcGVyX2l0ZW1fc2l6ZSA9IHNpemVvZih1aW50OCk7IC8qIHZpc0luZm8gZWxl bWVudCBzaXplICovCiAJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKKwloc2Nh bi0+eHNfdm1faXRlbXMgPSAxOwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKIH0KQEAgLTk1 LDEyICs5OCwxNSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0 YSAqc2NhbikKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFw RGF0YSAqKSBzY2FuOwogCi0JaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQotCXsK LQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7Ci0JCWhzY2FuLT54c19jYnVmID0gSW52 YWxpZEJ1ZmZlcjsKLQl9Ci0JaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKKwkv KiBSZXNjYW5zIHNob3VsZCBhdm9pZCBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMg Ki8KKwloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOworCisJLyoKKwkgKiBEZWxpYmVyYXRlbHkgYXZv aWQgZHJvcHBpbmcgYW55IHBpbnMgbm93IGhlbGQgaW4geHNfY2J1ZiBhbmQgeHNfdm1idWYuCisJ ICogVGhpcyBzYXZlcyBjeWNsZXMgZHVyaW5nIGNlcnRhaW4gdGlnaHQgbmVzdGVkIGxvb3Agam9p bnMsIGFuZCBkdXJpbmcKKwkgKiBtZXJnZSBqb2lucyB0aGF0IGZyZXF1ZW50bHkgcmVzdG9yZSBh IHNhdmVkIG1hcmsuICBJdCBjYW4gYWxzbyBhdm9pZAorCSAqIHJlcGVhdGVkIHBpbm5pbmcgYW5k IHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIgYWNyb3NzIHJlc2NhbnMuCisJICovCiB9CiAK IHN0YXRpYyB2b2lkCkBAIC0xMDgsMTEgKzExNCw1MyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5k KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nh biA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAotCWhlYXBhbV9pbmRleF9mZXRjaF9y ZXNldChzY2FuKTsKKwkvKiBkcm9wIHBpbiBpZiB0aGVyZSdzIGEgcGlubmVkIGhlYXAgcGFnZSAq LworCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJUmVsZWFzZUJ1ZmZlciho c2Nhbi0+eHNfY2J1Zik7CisKKwkvKiBkcm9wIHBpbiBpZiB0aGVyZSdzIGEgcGlubmVkIHZpc2li aWxpdHkgbWFwIHBhZ2UgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWYpKQor CQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1Zik7CiAKIAlwZnJlZShoc2Nhbik7CiB9CiAK Ky8qCisgKiBJbml0aWFsaXplIHRoZSBoZWFwIHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBh cmVhIChIZWFwQmF0Y2hEYXRhKS4KKyAqCisgKiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNo X2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKyAqIFNldHMgdXAgdGhlIHZp c0luZm8gcG9pbnRlciBmb3IgaW5kZXgtb25seSBzY2Fucywgb3IgTlVMTCBvdGhlcndpc2UuCisg Ki8KK3N0YXRpYyB2b2lkCitoZWFwYW1faW5kZXhfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJYm9vbCBuZXdfYWxsb2MpCit7CisJSGVh cEJhdGNoRGF0YSAqaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKGJhdGNoLCBzY2FuKTsKKworCWlm IChzY2FuLT54c193YW50X2l0dXApCisJeworCQlpZiAobmV3X2FsbG9jKQorCQl7CisJCQkvKgor CQkJICogUG9pbnQgdmlzSW5mbyBpbnRvIHRoZSB0cmFpbGluZyBwZXItaXRlbSBhcmVhIHRoYXQg Zm9sbG93cworCQkJICogaXRlbXNbXSBpbiB0aGUgYmF0Y2ggYWxsb2NhdGlvbi4KKwkJCSAqLwor CQkJU2l6ZQkJaXRlbXNFbmQ7CisKKwkJCWl0ZW1zRW5kID0gTUFYQUxJR04ob2Zmc2V0b2YoSW5k ZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJCQkJCQlzaXplb2YoQmF0Y2hNYXRjaGluZ0l0 ZW0pICogc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJCQloYmF0Y2gtPnZpc0luZm8gPSAodWludDgg KikgKChjaGFyICopIGJhdGNoICsgaXRlbXNFbmQpOworCQl9CisKKwkJLyogQ2xlYXIgdmlzaWJp bGl0eSBmbGFncyAobmVlZGVkIGZvciBib3RoIG5ldyBhbmQgcmVjeWNsZWQgYmF0Y2hlcykgKi8K KwkJbWVtc2V0KGhiYXRjaC0+dmlzSW5mbywgMCwgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJfQor CWVsc2UKKwl7CisJCWhiYXRjaC0+dmlzSW5mbyA9IE5VTEw7CisJfQorfQorCiBzdGF0aWMgYm9v bAogaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpz Y2FuLAogCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKQEAgLTEzNCw2ICsxODIsMTIgQEAgaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCQkv KiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51bWJlciBmb3IgbmV4dCB0aW1lICovCiAJ CWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CiAKKwkJLyoK KwkJICogRHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVuZGVudGx5IGhlbGQgb24gYnkgc2xvdCAo aWYgYW55KSBub3cuCisJCSAqIFNlZSBjb21tZW50cyBhcm91bmQgRXhlY1N0b3JlUGlubmVkQnVm ZmVySGVhcFR1cGxlIGNhbGwgYmVsb3cuCisJCSAqLworCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsK KwogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVy KGhzY2FuLT54c19jYnVmKTsKIApAQCAtMTcwLDcgKzIyNCwzMyBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCSpjYWxsX2FnYWlu ID0gIUlzTVZDQ1NuYXBzaG90KHNuYXBzaG90KTsKIAogCQlzbG90LT50dHNfdGFibGVPaWQgPSBS ZWxhdGlvbkdldFJlbGlkKHNjYW4tPnJlbCk7Ci0JCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgm YnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwgaHNjYW4tPnhzX2NidWYpOworCisJCS8qCisJCSAq IElmIHRoaXMgaXMgdGhlIGxhc3QgVElEIG9uIHRoZSBjdXJyZW50IGhlYXAgYmxvY2sgd2l0aGlu IHRoZSBiYXRjaCwKKwkJICogdHJhbnNmZXIgb3VyIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgcmF0 aGVyIHRoYW4gaGF2aW5nIHRoZSBzbG90CisJCSAqIGluY3JlbWVudCB0aGUgcGluIGNvdW50LiAg VGhpcyBzYXZlcyBhIHBhaXIgb2YgSW5jckJ1ZmZlclJlZkNvdW50CisJCSAqIGFuZCBSZWxlYXNl QnVmZmVyIGNhbGxzLCBzaW5jZSB0aGUgY2FsbGVyIHdvdWxkIGp1c3QgcmVsZWFzZSBpdHMKKwkJ ICogcGluIG9uIHhzX2NidWYgd2hlbiBzd2l0Y2hpbmcgdG8gdGhlIG5leHQgYmxvY2sgYW55d2F5 LgorCQkgKgorCQkgKiBXZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gY2FsbF9hZ2FpbiBpcyBmYWxz ZSwgc2luY2Ugb3RoZXJ3aXNlIHRoZQorCQkgKiBjYWxsZXIgd2lsbCBuZWVkIHhzX2NidWYgdG8g cmVtYWluIHZhbGlkIGZvciB0aGUgbmV4dCBjYWxsLgorCQkgKi8KKwkJaWYgKGhzY2FuLT54c19s YXN0aW5ibG9jayAmJiAhKmNhbGxfYWdhaW4pCisJCXsKKwkJCUV4ZWNTdG9yZVBpbm5lZEJ1ZmZl ckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCQkgICBoc2Nh bi0+eHNfY2J1Zik7CisJCQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCQloc2Nh bi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCisJCQkvKgorCQkJICogTm90ZTogdGhl IHBpbiBub3cgb3duZWQgYnkgdGhlIHNsb3QgaXMgZXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQKKwkJ CSAqIG9uIHRoZSBuZXh0IGNhbGwgaGVyZSwgdmlhIGFuIGV4cGxpY2l0IEV4ZWNDbGVhclR1cGxl LiAgVGhpcworCQkJICogYXZvaWRzIGNodXJuIGluIHRoZSBiYWNrZW5kJ3MgcHJpdmF0ZSByZWZj b3VudCBjYWNoZS4KKwkJCSAqLworCQl9CisJCWVsc2UKKwkJCUV4ZWNTdG9yZUJ1ZmZlckhlYXBU dXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCSBoc2Nhbi0+eHNfY2J1 Zik7CiAJfQogCWVsc2UKIAl7CkBAIC0xODEsNiArMjYxLDYwMiBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJcmV0dXJuIGdvdF9o ZWFwX3R1cGxlOwogfQogCisvKgorICogaGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eQor ICoJCU9idGFpbiB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGZvciBhIFRJRCBmcm9tIGNhbGxlcidz IGJhdGNoLgorICoKKyAqIENhbGxlZCBkdXJpbmcgaW5kZXgtb25seSBzY2Fucy4gIFdlIGFsd2F5 cyBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiBjYWxsZXIncworICogaXRlbSAoYW4gb2Zmc2V0IGlu dG8gY2FsbGVyJ3MgYmF0Y2gtPml0ZW1zW10gYXJyYXkpLiAgV2UgbWlnaHQgYWxzbyBzZXQKKyAq IHZpc2liaWxpdHkgaW5mbyBmb3Igb3RoZXIgaXRlbXMgZnJvbSBjYWxsZXIncyBiYXRjaCBtb3Jl IHByb2FjdGl2ZWx5IHdoZW4KKyAqIHRoYXQgbWFrZXMgc2Vuc2UuCisgKgorICogV2Uga2VlcCB0 d28gY29tcGV0aW5nIGNvbnNpZGVyYXRpb25zIGluIGJhbGFuY2Ugd2hlbiBkZXRlcm1pbmluZyB3 aGV0aGVyIHRvCisgKiBjaGVjayBhZGRpdGlvbmFsIGl0ZW1zOiB0aGUgbmVlZCB0byBrZWVwIHRo ZSBjb3N0IG9mIHZpc2liaWxpdHkgbWFwIGFjY2VzcworICogdW5kZXIgY29udHJvbCB3aGVuIG1v c3QgaXRlbXMgd2lsbCBuZXZlciBiZSByZXR1cm5lZCBieSB0aGUgc2NhbiBhbnl3YXkKKyAqIChp bXBvcnRhbnQgZm9yIGlubmVyIGluZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5kIHNlbWktam9p bnMpLCBhbmQgdGhlCisgKiBuZWVkIHRvIG5vdCBob2xkIG9udG8gaW5kZXggbGVhZiBwYWdlcyBm b3IgdG9vIGxvbmcuCisgKgorICogTm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0cworICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHZpc2liaWxpdHltYXBfZ2V0 X3N0YXR1cyBkb2VzIG5vdCBsb2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsIGFuZAorICog dGhlcmVmb3JlIHRoZSByZXN1bHQgd2UgcmVhZCBoZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxl LiAgSG93ZXZlciwgaXQKKyAqIGNhbid0IGJlIHN0YWxlIGVub3VnaCB0byBtYXR0ZXIuCisgKgor ICogV2UgbmVlZCB0byBkZXRlY3QgY2xlYXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCBy aWdodCBhd2F5LCBiZWNhdXNlCisgKiB0aGUgdHVwbGUgaXMgcHJlc2VudCBpbiB0aGUgaW5kZXgg cGFnZSBidXQgbm90IHZpc2libGUuICBUaGUgcmVhZGluZyBvZiB0aGUKKyAqIFRJRCBieSB0aGlz IHNjYW4gKHVzaW5nIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikgaXMgc2VyaWFs aXplZAorICogd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZSBUSUQgaW50byB0aGUgaW5kZXggKHVzaW5n IGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZQorICogaW5kZXggYnVmZmVyKS4gIEJlY2F1c2UgdGhl IFZNIGJpdCBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgaW5kZXgsCisgKiBhbmQgbG9j a2luZy91bmxvY2tpbmcgb2YgdGhlIGluZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVtb3J5IGJh cnJpZXIsIHdlCisgKiBhcmUgc3VyZSB0byBzZWUgdGhlIGNsZWFyZWQgYml0IGlmIHdlIHNlZSBh IHJlY2VudGx5LWluc2VydGVkIFRJRC4KKyAqCisgKiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhl IGluZGV4IHBhZ2UgKG9ubHkgVkFDVVVNIHdpbGwgY2xlYXIgb3V0IHRoZSBUSUQpLAorICogc28g dGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgbm90IHNlcmlhbGl6ZWQg d2l0aCB0aGlzIHRlc3QKKyAqIGJlbG93LCBhbmQgd2UgbWF5IHNlZSBhIHZhbHVlIHRoYXQgaXMg c2lnbmlmaWNhbnRseSBzdGFsZS4gIEhvd2V2ZXIsIHdlCisgKiBkb24ndCBjYXJlIGFib3V0IHRo ZSBkZWxldGUgcmlnaHQgYXdheSwgYmVjYXVzZSB0aGUgdHVwbGUgaXMgc3RpbGwgdmlzaWJsZQor ICogdW50aWwgdGhlIGRlbGV0aW5nIHRyYW5zYWN0aW9uIGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVu dCBlbmRzIChpZiBpdCdzIG91cgorICogdHJhbnNhY3Rpb24pLiAgSW4gZWl0aGVyIGNhc2UsIHRo ZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbCBoYXZlIGJlZW4KKyAqIHJlbGVhc2VkIChhY3Rp bmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVhcmluZyB0aGUgYml0LiAgQW5kIGZvciB1 cyB0bworICogaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlIGRlbGV0aW5nIHRyYW5z YWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlCisgKiBpbnZpc2libGUpLCB3ZSBtdXN0IGhhdmUgYWNx dWlyZWQgUHJvY0FycmF5TG9jayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcworICogYSByZWFk IGJhcnJpZXIuCisgKgorICogSXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0 eSB0byBhdm9pZCBuZWVkaW5nIHRvIGxvY2sgdGhlIFZNCisgKiBidWZmZXIsIHdoaWNoIGNvdWxk IGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitoZWFwYW1f YmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCisJCQkJCQkJCUluZGV4U2NhbkJhdGNoIGJhdGNoLCBIZWFwQmF0Y2hEYXRh ICpoYmF0Y2gsCisJCQkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRleEZldGNo SGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFwZmV0 Y2g7CisJaW50CQkJcG9zSXRlbSA9IHBvcy0+aXRlbTsKKwlpbnQJCQlub1NldEl0ZW0sCisJCQkJ c3RlcDsKKwlib29sCQlhbGxiYXRjaGl0ZW12aXNpYmxlOworCUJsb2NrTnVtYmVyIGN1cnZtaGVh cGJsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXVpbnQ4CQljdXJ2bWhlYXBibGtmbGFncyA9 IDA7CisKKwlBc3NlcnQoaGJhdGNoID09IGhlYXBfYmF0Y2hfZGF0YShiYXRjaCwgc2NhbikpOwor CisJLyogV2UgYmV0dGVyIHN0aWxsIGhhdmUgYSBwaW4gb24gYmF0Y2gncyBpbmRleCBwYWdlICov CisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYmF0Y2gtPmJ1ZikpOworCisJLyogRGV0ZXJtaW5lIHRo ZSByYW5nZSBvZiBpdGVtcyB0byBzZXQgdmlzaWJpbGl0eSBmb3IgKi8KKwlpZiAoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJbm9TZXRJdGVtID0gTWluKGJhdGNoLT5s YXN0SXRlbSArIDEsIHBvc0l0ZW0gKyBoc2Nhbi0+eHNfdm1faXRlbXMpOworCQlhbGxiYXRjaGl0 ZW12aXNpYmxlID0gbm9TZXRJdGVtID4gYmF0Y2gtPmxhc3RJdGVtICYmCisJCQkocG9zSXRlbSA9 PSBiYXRjaC0+Zmlyc3RJdGVtIHx8CisJCQkgKGhiYXRjaC0+dmlzSW5mb1tiYXRjaC0+Zmlyc3RJ dGVtXSAmIEJBVENIX1ZJU19DSEVDS0VEKSk7CisJCXN0ZXAgPSAxOworCX0KKwllbHNlCisJewor CQlub1NldEl0ZW0gPSBNYXgoYmF0Y2gtPmZpcnN0SXRlbSAtIDEsIHBvc0l0ZW0gLSBoc2Nhbi0+ eHNfdm1faXRlbXMpOworCQlhbGxiYXRjaGl0ZW12aXNpYmxlID0gbm9TZXRJdGVtIDwgYmF0Y2gt PmZpcnN0SXRlbSAmJgorCQkJKHBvc0l0ZW0gPT0gYmF0Y2gtPmxhc3RJdGVtIHx8CisJCQkgKGhi YXRjaC0+dmlzSW5mb1tiYXRjaC0+bGFzdEl0ZW1dICYgQkFUQ0hfVklTX0NIRUNLRUQpKTsKKwkJ c3RlcCA9IC0xOworCX0KKworCS8qCisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgYSByYW5n ZSBvZiBpdGVtcywgaW4gc2NhbiBvcmRlci4KKwkgKgorCSAqIG5vU2V0SXRlbSBpcyB0aGUgZmly c3QgaXRlbSAoaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uKSB0aGF0IHdvbid0IGJlCisJICog c2V0IGR1cmluZyB0aGlzIGNhbGwuICBub1NldEl0ZW0gb2Z0ZW4gcG9pbnRzIHRvIGp1c3QgcGFz dCB0aGUgZW5kIG9mCisJICogKG9yIGp1c3QgYmVmb3JlIHRoZSBzdGFydCBvZikgdGhlIGJhdGNo J3MgJ2l0ZW1zJyBhcnJheS4KKwkgKgorCSAqIFdlIGl0ZXJhdGUgdGhpcyB3YXkgdG8gYXZvaWQg dGhlIG5lZWQgZm9yIDIgZGlyZWN0aW9uLXNwZWNpZmljIGxvb3BzLAorCSAqIHNpbmNlIHRoaXMg aXMgYSBob3QgY29kZSBwYXRoIHRoYXQncyBzZW5zaXRpdmUgdG8gY29kZSBzaXplIGluY3JlYXNl cy4KKwkgKi8KKwlmb3IgKGludCBzZXRJdGVtID0gcG9zSXRlbTsgc2V0SXRlbSAhPSBub1NldEl0 ZW07IHNldEl0ZW0gKz0gc3RlcCkKKwl7CisJCUl0ZW1Qb2ludGVyIHRpZCA9ICZiYXRjaC0+aXRl bXNbc2V0SXRlbV0udGFibGVUaWQ7CisJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2lu dGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKwkJdWludDgJCWZsYWdzOworCisJCWlmIChoZWFwYmxr bm8gPT0gY3Vydm1oZWFwYmxrbm8pCisJCXsKKwkJCS8qIGNvbnRpZ3VvdXMgaGVhcCBibG9jayAt LSBqdXN0IHJldXNlIGxhc3QgaXRlbSdzIGZsYWdzICovCisJCQloYmF0Y2gtPnZpc0luZm9bc2V0 SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFnczsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZmxhZ3Mg PSBCQVRDSF9WSVNfQ0hFQ0tFRDsKKwkJaWYgKFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxh dGlvbiwgaGVhcGJsa25vLCAmaHNjYW4tPnhzX3ZtYnVmKSkKKwkJCWZsYWdzIHw9IEJBVENIX1ZJ U19BTExfVklTSUJMRTsKKworCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2bWhlYXBi bGtmbGFncyA9IGZsYWdzOworCQljdXJ2bWhlYXBibGtubyA9IGhlYXBibGtubzsKKwl9CisKKwkv KgorCSAqIEl0J3Mgc2FmZSB0byBkcm9wIHRoZSBiYXRjaCdzIGJ1ZmZlciBwaW4gYXMgc29vbiBh cyB3ZSd2ZSByZXNvbHZlZCB0aGUKKwkgKiB2aXNpYmlsaXR5IHN0YXR1cyBvZiBhbGwgb2YgaXRz IGl0ZW1zCisJICovCisJaWYgKGFsbGJhdGNoaXRlbXZpc2libGUgJiYgc2Nhbi0+TVZDQ1NjYW4p CisJeworCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5maXJzdEl0ZW1dICYgQkFUQ0hf VklTX0NIRUNLRUQpOworCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5sYXN0SXRlbV0g JiBCQVRDSF9WSVNfQ0hFQ0tFRCk7CisKKwkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+YnVmKTsKKwkJ YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJLyoKKwkgKiBFbHNlIGNoZWNrIHZp c2liaWxpdHkgZm9yIHR3aWNlIGFzIG1hbnkgaXRlbXMgbmV4dCB0aW1lLCBvciBhbGwgaXRlbXMu CisJICogV2UgY2hlY2sgYWxsIGl0ZW1zIGluIG9uZSBnbyBvbmNlIHdlJ3JlIHBhc3NlZCB0aGUg c2NhbidzIGZpcnN0IGJhdGNoLgorCSAqLworCWVsc2UgaWYgKGhzY2FuLT54c192bV9pdGVtcyA8 IChiYXRjaC0+bGFzdEl0ZW0gLSBiYXRjaC0+Zmlyc3RJdGVtKSkKKwkJaHNjYW4tPnhzX3ZtX2l0 ZW1zICo9IDI7CisJZWxzZQorCQloc2Nhbi0+eHNfdm1faXRlbXMgPSBzY2FuLT5tYXhpdGVtc2Jh dGNoOworfQorCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitoZWFwYW1fYmF0Y2hfcmV0dXJu X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJ CQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJ CQkJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcywgYm9vbCAqYWxsX3Zpc2libGUpCit7CisJSGVh cEJhdGNoRGF0YSAqaGJhdGNoOworCisJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhzY2FuLT5p bmRleFJlbGF0aW9uLCAxKTsKKworCS8qIFNldCB4c19oZWFwdGlkLCB3aGljaCBoZWFwYW1faW5k ZXhfZ2V0bmV4dF9zbG90IHdpbGwgbmVlZCAqLworCXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuQmF0 Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnRhYmxlVGlkOworCisJaWYgKCFzY2FuLT54c193YW50 X2l0dXApCisJeworCQlpbnQJCQluZXh0SXRlbTsKKwkJYm9vbAkJaGFzTmV4dDsKKworCQkvKgor CQkgKiBQbGFpbiBpbmRleCBzY2FuLgorCQkgKgorCQkgKiBEZXRlcm1pbmUgaWYgdGhlIG5leHQg aXRlbSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiBpcyBvbiBhCisJCSAqIGRpZmZlcmVu dCBoZWFwIGJsb2NrLiAgV2hlbiBpdCBpcywgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIGNhbgor CQkgKiB0cmFuc2ZlciBpdHMgYnVmZmVyIHBpbiB0byB0aGUgc2xvdCBpbnN0ZWFkIG9mIGluY3Jl bWVudGluZyB0aGUgcGluCisJCSAqIGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJS ZWZDb3VudC9SZWxlYXNlQnVmZmVyIGNhbGxzLgorCQkgKgorCQkgKiBOb3RlOiBXZSBjYW5ub3Qg ZG8gdGhpcyBmb3IgaW5kZXgtb25seSBzY2FucyBiZWNhdXNlIGFsbC12aXNpYmxlCisJCSAqIGl0 ZW1zIGFyZSBza2lwcGVkIGJ5IGJvdGggdGhlIHNjYW4gYW5kIHRoZSByZWFkIHN0cmVhbSBjYWxs YmFjay4KKwkJICogU2tpcHBlZCBpdGVtcyBjYW4gYnJlYWsgdGhlIGJsb2NrIGRlZHVwbGljYXRp b24gc3ltbWV0cnkgYmV0d2VlbgorCQkgKiB0aGUgc3RyZWFtIGFuZCB0aGUgc2NhbjogdGhlIHN0 cmVhbSBkZWR1cGxpY2F0ZXMgY29uc2VjdXRpdmUKKwkJICogbm9uLWFsbC12aXNpYmxlIGl0ZW1z IGJ5IGJsb2NrLCBidXQgYWZ0ZXIgaW52YWxpZGF0aW5nIHhzX2JsayB0aGUKKwkJICogc2NhbiB3 b3VsZCB0cnkgdG8gcmUtZmV0Y2ggYSBibG9jayB0aGF0IHRoZSBzdHJlYW0gYWxyZWFkeSByZXR1 cm5lZAorCQkgKiBhbmQgZGVkdXBsaWNhdGVkIGF3YXkuCisJCSAqLworCQlpZiAoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Qb3MtPml0 ZW0gKyAxOworCQkJaGFzTmV4dCA9IChuZXh0SXRlbSA8PSBzY2FuQmF0Y2gtPmxhc3RJdGVtKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCW5leHRJdGVtID0gc2NhblBvcy0+aXRlbSAtIDE7CisJCQlo YXNOZXh0ID0gKG5leHRJdGVtID49IHNjYW5CYXRjaC0+Zmlyc3RJdGVtKTsKKwkJfQorCisJCWhz Y2FuLT54c19sYXN0aW5ibG9jayA9IGhhc05leHQgJiYKKwkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIoJnNjYW5CYXRjaC0+aXRlbXNbbmV4dEl0ZW1dLnRhYmxlVGlkKSAhPQorCQkJSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcigmc2Nhbi0+eHNfaGVhcHRpZCk7CisKKwkJcmV0dXJuICZzY2Fu LT54c19oZWFwdGlkOworCX0KKworCS8qCisJICogSW5kZXgtb25seSBzY2FuLgorCSAqCisJICog QWxzbyBzZXQgeHNfaXR1cCwgd2hpY2ggaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCBuZWVkcyB0 b28uCisJICovCisJc2Nhbi0+eHNfaXR1cCA9IChJbmRleFR1cGxlKSAoc2NhbkJhdGNoLT5jdXJy VHVwbGVzICsKKwkJCQkJCQkJICBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3MtPml0ZW1dLnR1cGxl T2Zmc2V0KTsKKworCS8qCisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgdGhlIGN1cnJlbnQg c2NhblBvcyBpdGVtIChwbHVzIHBvc3NpYmx5IHNvbWUKKwkgKiBhZGRpdGlvbmFsIGl0ZW1zIGlu IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSBhcyBuZWVkZWQKKwkgKi8KKwloYmF0Y2ggPSBo ZWFwX2JhdGNoX2RhdGEoc2NhbkJhdGNoLCBzY2FuKTsKKwlpZiAoIShoYmF0Y2gtPnZpc0luZm9b c2NhblBvcy0+aXRlbV0gJiBCQVRDSF9WSVNfQ0hFQ0tFRCkpCisJCWhlYXBhbV9iYXRjaF9yZXNv bHZlX3Zpc2liaWxpdHkoc2NhbiwgZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIGhiYXRjaCwKKwkJCQkJ CQkJCQlzY2FuUG9zKTsKKworCS8qIEZpbmFsbHksIHNldCBhbGxfdmlzaWJsZSBmb3IgaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdCAqLworCSphbGxfdmlzaWJsZSA9CisJCShoYmF0Y2gtPnZpc0lu Zm9bc2NhblBvcy0+aXRlbV0gJiBCQVRDSF9WSVNfQUxMX1ZJU0lCTEUpICE9IDA7CisKKwlyZXR1 cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFw YW1fYmF0Y2hfZ2V0bmV4dCAtIGdldCB0aGUgbmV4dCBiYXRjaCBvZiBUSURzIGZyb20gYSBzY2Fu CisgKgorICogQ2FsbGVkIHdoZW4gd2UgbmVlZCB0byBsb2FkIHRoZSBuZXh0IGJhdGNoIG9mIGlu ZGV4IGVudHJpZXMgdG8gcHJvY2VzcyBpbgorICogdGhlIGdpdmVuIGRpcmVjdGlvbi4gIENhbGxl ciBwYXNzZXMgdXMgYSBiYXRjaCBhbmQgYSBiYXRjaCBwb3NpdGlvbiwgd2hpY2gKKyAqIGhhcyBq dXN0IGJlZW4gdXNlZCB0byByZWFkIGFsbCBpdGVtcyBmcm9tIHRoZSBiYXRjaCBpbiB0aGUgZGly ZWN0aW9uIHBhc3NlZAorICogYnkgY2FsbGVyLgorICoKKyAqIFJldHVybnMgdGhlIG5leHQgYmF0 Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSBpbmRleCBzY2FuLCBvciBOVUxMIHdoZW4KKyAqIHRo ZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgRG9l cyBub3QgYWR2YW5jZQorICogY2FsbGVyJ3MgYmF0Y2ggcG9zaXRpb247IHRoYXQgaXMgbGVmdCB1 cCB0byBjYWxsZXIuCisgKgorICogVGhpcyBpcyBhbHNvIHdoZXJlIGJhdGNoZXMgYXJlIGFwcGVu ZGVkIHRvIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBXZQorICogZG9uJ3QgZnJlZSBhbnkgYmF0 Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMgYWxzbyBsZWZ0IHVwIHRvIGNhbGxlci4KKyAqIC0t LS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgSW5kZXhTY2FuQmF0 Y2gKK2hlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCisJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNoLCBCYXRjaFJpbmdJ dGVtUG9zICpwb3MpCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxMOworCUJhdGNoUmlu Z0J1ZmZlciAqYmF0Y2hyaW5nYnVmIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9ICZzY2FuLT5i YXRjaHJpbmdidWY7CisKKwkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90 IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlk KFJlY2VudFhtaW4pKTsKKworCWlmICghcHJpb3JCYXRjaCkKKwl7CisJCS8qIEZpcnN0IGNhbGwg Zm9yIHRoZSBzY2FuICovCisJCUFzc2VydChwb3MgPT0gJmJhdGNocmluZ2J1Zi0+c2NhblBvcyk7 CisJfQorCWVsc2UgaWYgKHVubGlrZWx5KHByaW9yQmF0Y2gtPmRpciAhPSBkaXJlY3Rpb24pKQor CXsKKwkJLyoKKwkJICogV2UgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24gYWNy b3NzIGJhdGNoZXMuICBQcmVwYXJlCisJCSAqIHNjYW4ncyBiYXRjaHJpbmdidWYgc3RhdGUgZm9y IHVzIHRvIGdldCB0aGUgbmV4dCBiYXRjaCBmb3IgdGhlCisJCSAqIG9wcG9zaXRlIHNjYW4gZGly ZWN0aW9uIHRvIHRoZSBvbmUgdXNlZCB3aGVuIHByaW9yQmF0Y2ggd2FzCisJCSAqIHJldHVybmVk IGJ5IGFtZ2V0YmF0Y2guCisJCSAqLworCQl0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlKHNj YW4pOworCisJCS8qIHByaW9yQmF0Y2ggaXMgbm93IGJhdGNocmluZ2J1ZidzIG9ubHkgYmF0Y2gg Ki8KKwkJQXNzZXJ0KHBvcy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlB c3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAxKTsKKwl9CisJZWxzZSBpZiAo aW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgcG9zLT5iYXRjaCArIDEpKQorCXsKKwkJLyog TmV4dCBiYXRjaCBhbHJlYWR5IGxvYWRlZCBmb3IgdXMgKi8KKwkJYmF0Y2ggPSBpbmRleF9zY2Fu X2JhdGNoKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKTsKKworCQlBc3NlcnQocHJpb3JCYXRjaC0+ZGly ID09IGRpcmVjdGlvbik7CisJCUFzc2VydChiYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisJCXJl dHVybiBiYXRjaDsKKwl9CisKKwkvKgorCSAqIEFzc2VydCBwcmVjb25kaXRpb25zIGZvciBjYWxs aW5nIGFtZ2V0YmF0Y2guCisJICoKKwkgKiBwcmlvckJhdGNoIGhhZCBiZXR0ZXIgYmUgZm9yIHRo ZSBsYXN0IHZhbGlkIGJhdGNoIGN1cnJlbnRseSBpbiB0aGUgcmluZworCSAqIGJ1ZmZlciAoYmF0 Y2hlcyBtdXN0IHN0YXkgaW4gc2NhbiBvcmRlcikuICBJZiBpdCBpc24ndCB0aGVuIHdlIHNob3Vs ZAorCSAqIGhhdmUgYWxyZWFkeSByZXR1cm5lZCBzb21lIGV4aXN0aW5nIGxvYWRlZCBiYXRjaCBl YXJsaWVyLgorCSAqLworCUFzc2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKwlB c3NlcnQoIXByaW9yQmF0Y2ggfHwKKwkJICAgKGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2Nhbikg PiAwICYmIHByaW9yQmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24gJiYKKwkJCWluZGV4X3NjYW5fYmF0 Y2goc2NhbiwgYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggLSAxKSA9PSBwcmlvckJhdGNoKSk7CisK KwkvKgorCSAqIEJlZm9yZSB3ZSBjYWxsIGFtZ2V0YmF0Y2ggYWdhaW4sIGNoZWNrIGlmIHByaW9y QmF0Y2ggaXMgYWxyZWFkeSBrbm93bgorCSAqIHRvIGJlIHRoZSBsYXN0IGJhdGNoIHdpdGggbWF0 Y2hpbmcgaXRlbXMgaW4gdGhpcyBzY2FuIGRpcmVjdGlvbgorCSAqLworCWlmIChwcmlvckJhdGNo ICYmCisJCSgoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pICYmIHByaW9yQmF0Y2gt Pmtub3duRW5kRm9yd2FyZCkgfHwKKwkJIChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXJlY3Rp b24pICYmIHByaW9yQmF0Y2gtPmtub3duRW5kQmFja3dhcmQpKSkKKwkJcmV0dXJuIE5VTEw7CisK KwliYXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoKHNjYW4s IHByaW9yQmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJlY3Rpb24pOworCWlmIChiYXRjaCkKKwl7 CisJCS8qIFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0aGUgQU0gKi8KKwkJQXNzZXJ0KGJhdGNoLT5k aXIgPT0gZGlyZWN0aW9uKTsKKworCQkvKiBBcHBlbmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiByaW5n IGJ1ZmZlci93cml0ZSBpdCB0byBidWZmZXIgaW5kZXggKi8KKwkJaW5kZXhfc2Nhbl9iYXRjaF9h cHBlbmQoc2NhbiwgYmF0Y2gpOworCisJCS8qCisJCSAqIERyb3AgYmF0Y2gncyBsZWFmIHBhZ2Ug cGluIGZvciBwbGFpbiBpbmRleCBzY2Fucy4gIEluZGV4LW9ubHkgc2NhbnMKKwkJICogZGVsYXkg ZHJvcHBpbmcgdGhlIHBpbiB1bnRpbCBoZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5IGhh cworCQkgKiBjYWNoZWQgYWxsIHZpc2liaWxpdHkgaW5mby4gIFNlZSBoZWFwYW1fYmF0Y2hfcmVz b2x2ZV92aXNpYmlsaXR5CisJCSAqIGhlYWRlciBjb21tZW50cyBmb3IgYSBmdWxsIGV4cGxhbmF0 aW9uIG9mIGVhcmx5IHBpbiBkcm9wcGluZy4KKwkJICovCisJCUFzc2VydChzY2FuLT5NVkNDU2Nh biA9PSBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkpOworCQlpZiAoc2Nhbi0+TVZD Q1NjYW4gJiYgIXNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJUmVsZWFzZUJ1ZmZlcihiYXRj aC0+YnVmKTsKKwkJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCQl9CisJfQorCWVsc2UK Kwl7CisJCS8qIGFtZ2V0YmF0Y2ggcmV0dXJuZWQgTlVMTCAqLworCQlpZiAocHJpb3JCYXRjaCkK KwkJeworCQkJLyoKKwkJCSAqIFRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMgdG8gYmUgZm91 bmQgaW4gdGhlIGN1cnJlbnQgc2NhbgorCQkJICogZGlyZWN0aW9uLCBmb2xsb3dpbmcgcHJpb3JC YXRjaC4gIFJlbWVtYmVyIHRoYXQgcHJpb3JCYXRjaCBpcworCQkJICogdGhlIGxhc3QgYmF0Y2gg d2l0aCBtYXRjaGluZyBpdGVtcy4KKwkJCSAqLworCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyZWN0aW9uKSkKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZEZvcndhcmQgPSB0cnVlOwor CQkJZWxzZQorCQkJCXByaW9yQmF0Y2gtPmtub3duRW5kQmFja3dhcmQgPSB0cnVlOworCQl9CisJ fQorCisJLyogeHNfaGl0dXAgaXNuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBhbWdldGJhdGNo IHNjYW5zICovCisJQXNzZXJ0KCFzY2FuLT54c19oaXR1cCk7CisKKwlyZXR1cm4gYmF0Y2g7Cit9 CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgLSBn ZXQgbmV4dCBUSUQgZnJvbSBiYXRjaCByaW5nIGJ1ZmZlcgorICoKKyAqIEdldCB0aGUgbmV4dCBU SUQgZnJvbSB0aGUgc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyLCB3aGVuIG1vdmluZyBpbiB0aGUK KyAqIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0 aWMgcGdfYXR0cmlidXRlX2hvdCBJdGVtUG9pbnRlcgoraGVhcGFtX2JhdGNoX2dldG5leHRfdGlk KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCSBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCAqYWxsX3Zpc2libGUpCit7CisJQmF0Y2hSaW5n QnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0 ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNo IHNjYW5CYXRjaCA9IE5VTEw7CisKKwlBc3NlcnQoIXNjYW5Qb3MtPnZhbGlkIHx8IGJhdGNocmlu Z2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKwlBc3NlcnQoc2NhblBvcy0+dmFs aWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAwKTsKKworCS8qCisJICogQ2hl Y2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBsb2FkZWQgc2NhbkJhdGNoIGZvciB1cyB0byByZXR1 cm4gdGhlIG5leHQKKwkgKiBtYXRjaGluZyBpdGVtJ3MgVElEL2luZGV4IHR1cGxlIGZyb20KKwkg Ki8KKwlpZiAoc2NhblBvcy0+dmFsaWQpCisJeworCQkvKgorCQkgKiBzY2FuUG9zIGlzIHZhbGlk LCBzbyBzY2FuQmF0Y2ggbXVzdCBhbHJlYWR5IGJlIGxvYWRlZCBpbiBiYXRjaCByaW5nCisJCSAq IGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJlLgorCQkgKi8KKwkJQXNzZXJ0KGJhdGNocmlu Z2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKworCQlzY2FuQmF0Y2ggPSBpbmRl eF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCQlpZiAoaW5kZXhfc2Nhbl9w b3NfYWR2YW5jZShkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcykpCisJCQlyZXR1cm4gaGVh cGFtX2JhdGNoX3JldHVybl90aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkg ICBzY2FuQmF0Y2gsIHNjYW5Qb3MsCisJCQkJCQkJCQkJICAgYWxsX3Zpc2libGUpOworCX0KKwor CS8qCisJICogRWl0aGVyIHJhbiBvdXQgb2YgaXRlbXMgZnJvbSBvdXIgZXhpc3Rpbmcgc2NhbkJh dGNoLCBvciBpdCBoYXNuJ3QgYmVlbgorCSAqIGxvYWRlZCB5ZXQgKGJlY2F1c2UgdGhpcyBpcyB0 aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgZW50aXJlIHNjYW4pLgorCSAqIFRyeSB0byBhZHZh bmNlIHNjYW5CYXRjaCB0byB0aGUgbmV4dCBiYXRjaCAob3IgZ2V0IHRoZSBmaXJzdCBiYXRjaCku CisJICovCisJc2NhbkJhdGNoID0gaGVhcGFtX2JhdGNoX2dldG5leHQoc2NhbiwgZGlyZWN0aW9u LCBzY2FuQmF0Y2gsIHNjYW5Qb3MpOworCisJaWYgKCFzY2FuQmF0Y2gpCisJeworCQkvKgorCQkg KiBXZSdyZSBkb25lOyBubyBtb3JlIGJhdGNoZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rp b24uCisJCSAqCisJCSAqIE5vdGU6IHNjYW5Qb3MgaXMgZ2VuZXJhbGx5IHN0aWxsIHZhbGlkIGF0 IHRoaXMgcG9pbnQuICBUaGUgc2NhbgorCQkgKiBtaWdodCBzdGlsbCBiYWNrIHVwIGluIHRoZSBv dGhlciBkaXJlY3Rpb24uCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIEFk dmFuY2VkIHNjYW5CYXRjaC4gIE5vdyBwb3NpdGlvbiBzY2FuUG9zIHRvIHRoZSBzdGFydCBvZiBu ZXcKKwkgKiBzY2FuQmF0Y2guCisJICovCisJaW5kZXhfc2Nhbl9wb3NfbmV4dGJhdGNoKGRpcmVj dGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9zKTsKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2Fu LCBzY2FuUG9zLT5iYXRjaCkgPT0gc2NhbkJhdGNoKTsKKworCS8qCisJICogUmVtb3ZlIHRoZSBo ZWFkIGJhdGNoIGZyb20gdGhlIGJhdGNoIHJpbmcgYnVmZmVyIChleGNlcHQgd2hlbiB0aGlzIG5l dworCSAqIHNjYW5CYXRjaCBpcyBvdXIgb25seSBvbmUpCisJICovCisJaWYgKGJhdGNocmluZ2J1 Zi0+aGVhZEJhdGNoICE9IHNjYW5Qb3MtPmJhdGNoKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggaGVh ZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLAorCQkJCQkJCQkJCQkJCWJhdGNocmluZ2J1 Zi0+aGVhZEJhdGNoKTsKKworCQkvKiBmcmVlIG9ic29sZXNjZW50IGhlYWQgYmF0Y2ggKHVubGVz cyBpdCBpcyBzY2FuJ3MgbWFya0JhdGNoKSAqLworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChz Y2FuLCBoZWFkQmF0Y2gpOworCisJCS8qIFJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmluZyBi dWZmZXIgKi8KKwkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2grKzsKKwl9CisKKwkvKiBJbiBwcmFj dGljZSBzY2FuQmF0Y2ggd2lsbCBhbHdheXMgYmUgdGhlIHJpbmcgYnVmZmVyJ3MgaGVhZEJhdGNo ICovCisJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsK KworCXJldHVybiBoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9u LCBzY2FuQmF0Y2gsIHNjYW5Qb3MsCisJCQkJCQkJCSAgIGFsbF92aXNpYmxlKTsKK30KKworLyog LS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBu ZXh0IGhlYXAgdHVwbGUKKyAqCisgKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxl IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKKyAqIHJlY2VudGx5IGZldGNoZWQg Ynkgb3VyIGNhbGxlciBpbiBzY2FuLT54c19oZWFwdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUKKyAq IG1hdGNoaW5nIHR1cGxlcyBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRj aGluZyB0dXBsZSBiZWNhdXNlCisgKiBvZiBIT1QgY2hhaW5zLCBhbHRob3VnaCB3aGVuIHVzaW5n IGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUKKyAqIGZvciBtb3JlIHRo YW4gb25lIHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZm ZXIgY29udGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkLiAgVGhlIHBpbiBtdXN0IGJlCisg KiBkcm9wcGVkIGVsc2V3aGVyZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHBn X2F0dHJpYnV0ZV9ob3QgYm9vbAoraW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4s IFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CisJYm9v bAkJZm91bmQ7CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19o ZWFwZmV0Y2gsICZzY2FuLT54c19oZWFwdGlkLAorCQkJCQkJCQkJIHNjYW4tPnhzX3NuYXBzaG90 LCBzbG90LAorCQkJCQkJCQkJICZzY2FuLT54c19oZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQpOwor CisJaWYgKGZvdW5kKQorCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0 aW9uKTsKKworCS8qCisJICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91 bmQgb25seSBkZWFkIHR1cGxlcywgcmVtZW1iZXIgaXQKKwkgKiBmb3IgbGF0ZXIuICBXZSBkbyBu b3QgZG8gdGhpcyB3aGVuIGluIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUKKwkgKiBN VkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCisJ ICovCisJaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCisJeworCQlpZiAoc2Nhbi0+ dXNlYmF0Y2hyaW5nKQorCQl7CisJCQlpZiAoYWxsX2RlYWQpCisJCQkJdGFibGVhbV91dGlsX2tp bGxfc2NhbnBvc2l0ZW0oc2Nhbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVGVs bCBhbWdldHR1cGxlLWJhc2VkIGluZGV4IEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJ RAorCQkJICogKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dCBjYWxsLCBpbiBpbmRl eF9nZXRuZXh0X3RpZCkKKwkJCSAqLworCQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9k ZWFkOworCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t CisgKgkJaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9t IGEgc2NhbgorICoKKyAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcg dGhlIHNjYW4ga2V5cyBhbmQgdGhlIHNuYXBzaG90IHdhcworICogZm91bmQsIGZhbHNlIG90aGVy d2lzZS4gIFRoZSB0dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgorICoKKyAq IE9uIHN1Y2Nlc3MsIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBi ZSBoZWxkLCBhbmQgd2lsbCBiZQorICogZHJvcHBlZCBieSBhIGZ1dHVyZSBjYWxsIGhlcmUgKG9y IGJ5IGEgbGF0ZXIgY2FsbCB0byBpbmRleF9lbmRzY2FuKS4KKyAqCisgKiBOb3RlOiBjYWxsZXIg bXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRo ZQorICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNh dXNlIHdlIGRvbid0IGhhdmUKKyAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2ll bnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0 aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIFR1cGxlVGFi bGVTbG90ICpzbG90KQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRj aEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlJdGVtUG9pbnRlciB0aWQgPSBOVUxM OworCWJvb2wJCWFsbF92aXNpYmxlID0gZmFsc2U7CisKKwlmb3IgKDs7KQorCXsKKwkJaWYgKCFz Y2FuLT54c19oZWFwX2NvbnRpbnVlKQorCQl7CisJCQkvKgorCQkJICogU2NhbnMgdGhhdCB1c2Ug YW4gYW1nZXRiYXRjaCBpbmRleCBBTSBhcmUgbWFuYWdlZCBieSBoZWFwYW0ncworCQkJICogaW5k ZXggc2NhbiBtYW5hZ2VyLiAgVGhpcyBnaXZlcyBoZWFwYW0gdGhlIGFiaWxpdHkgdG8gcmVhZCBo ZWFwCisJCQkgKiB0dXBsZXMgaW4gYSBmbGV4aWJsZSBvcmRlciB0aGF0IGlzIGF0dHVuZWQgdG8g Ym90aCBjb3N0cyBhbmQKKwkJCSAqIGJlbmVmaXRzIG9uIHRoZSBoZWFwYW0gYW5kIHRhYmxlIEFN IHNpZGUuCisJCQkgKgorCQkJICogU2NhbnMgdGhhdCB1c2UgYW4gYW1nZXR0dXBsZSBpbmRleCBB TSBzaW1wbHkgY2FsbCB0aHJvdWdoIHRvCisJCQkgKiBpbmRleF9nZXRuZXh0X3RpZCB0byBnZXQg dGhlIG5leHQgVElEIHJldHVybmVkIGJ5IGluZGV4IEFNLiBUaGUKKwkJCSAqIHByb2dyZXNzIG9m IHRoZSBzY2FuIHdpbGwgYmUgdW5kZXIgdGhlIGNvbnRyb2wgb2YgaW5kZXggQU0gKHdlCisJCQkg KiBqdXN0IHBhc3MgaXQgdGhyb3VnaCBhIGRpcmVjdGlvbiB0byBnZXQgdGhlIG5leHQgdHVwbGUg aW4pLCBzbworCQkJICogd2UgY2Fubm90IHJlb3JkZXIgYW55IHdvcmsuCisJCQkgKi8KKwkJCWlm IChzY2FuLT51c2ViYXRjaHJpbmcpCisJCQkJdGlkID0gaGVhcGFtX2JhdGNoX2dldG5leHRfdGlk KHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCSAgICZhbGxfdmlzaWJsZSk7CisJ CQllbHNlCisJCQl7CisJCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9u KTsKKworCQkJCWlmICh0aWQgIT0gTlVMTCAmJiBzY2FuLT54c193YW50X2l0dXApCisJCQkJCWFs bF92aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJ CQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCQkJCSAmaHNjYW4t PnhzX3ZtYnVmKTsKKwkJCX0KKworCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMs IHdlJ3JlIGRvbmUgKi8KKwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJfQorCisJ CS8qCisJCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9y IHRoaXMgaW5kZXggZW50cnkuCisJCSAqIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIGxvb3Ag YXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCisJCSAqIHRoZSBpbmRleC4KKwkJICov CisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hlYXB0aWQpKTsKKwkJaWYg KCFzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCS8qIFBsYWluIGluZGV4IHNjYW4gKi8KKwkJ CWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQorCQkJCXJldHVybiB0cnVlOworCQl9 CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEluZGV4LW9ubHkgc2Nhbi4KKwkJCSAqCisJCQkg KiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFw IHBhZ2Ugb24KKwkJCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZl cnlib2R5LiAgSW4gYW55IGNhc2UsCisJCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5v dCB0aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0YQorCQkJICogc291cmNlLgorCQkJICovCisJCQlp ZiAoIWFsbF92aXNpYmxlKQorCQkJeworCQkJCS8qCisJCQkJICogUmF0cywgd2UgaGF2ZSB0byB2 aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgorCQkJCSAqLworCQkJCWlmIChzY2Fu LT5pbnN0cnVtZW50KQorCQkJCQlzY2FuLT5pbnN0cnVtZW50LT5uaGVhcGZldGNoZXMrKzsKKwor CQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKKwkJCQkJY29udGludWU7CS8q IG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCisKKwkJCQlFeGVjQ2xl YXJUdXBsZShzbG90KTsKKworCQkJCS8qCisJCQkJICogT25seSBNVkNDIHNuYXBzaG90cyBhcmUg c3VwcG9ydGVkIHdpdGggc3RhbmRhcmQgaW5kZXgtb25seQorCQkJCSAqIHNjYW5zLCBzbyB0aGVy ZSBzaG91bGQgYmUgbm8gbmVlZCB0byBrZWVwIGZvbGxvd2luZyB0aGUgSE9UCisJCQkJICogY2hh aW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzIGJlZW4gZm91bmQuICBPdGhlciBjYWxsZXJzCisJ CQkJICogKGN1cnJlbnRseSBvbmx5IHNlbGZ1bmNzLmMpIHVzZSBTbmFwc2hvdE5vblZhY3V1bWFi bGUsIGFuZAorCQkJCSAqIHdhbnQgdXMgdG8gYXNzdW1lIHRoYXQganVzdCBoYXZpbmcgb25lIHZp c2libGUgdHVwbGUgaW4gdGhlCisJCQkJICogaG90IGNoYWluIGlzIGFsd2F5cyBnb29kIGVub3Vn aC4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoIShzY2FuLT54c19oZWFwX2NvbnRpbnVlICYmCisJCQkJ CQkgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCBzbyB3ZSdsbCBu ZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRpY2F0ZSBsb2NrIGV4cGxpY2l0bHksIGFzIGlmIHdl IGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkgKiB0aGF0IGF0IHBhZ2UgbGV2ZWwuCisJCQkJICov CisJCQkJUHJlZGljYXRlTG9ja1BhZ2UoaHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkgIEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJICBzY2FuLT54c19zbmFwc2hv dCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZXR1cm4gbWF0Y2hpbmcgaW5kZXggdHVwbGUgbm93 IHNldCBpbiBzY2FuLT54c19pdHVwIChvciByZXR1cm4KKwkJCSAqIG1hdGNoaW5nIGhlYXAgdHVw bGUgbm93IHNldCBpbiBzY2FuLT54c19oaXR1cCkuCisJCQkgKgorCQkJICogTm90ZTogd2Ugd29u J3QgdXN1YWxseSBoYXZlIGZldGNoZWQgYSBoZWFwIHR1cGxlIGludG8gY2FsbGVyJ3MKKwkJCSAq IHRhYmxlIHNsb3QuICBUaGlzIGlzIHBlciB0aGUgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNv bnRyYWN0CisJCQkgKiBmb3Igc2Nhbi0+eHNfd2FudF9pdHVwIGNhbGxlcnMuCisJCQkgKi8KKwkJ CXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KICAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGlu ZGl2aWR1YWwgdHVwbGVzIGZvciBoZWFwIEFNCkBAIC03NjEsNyArMTQzNyw4IEBAIGhlYXBhbV9y ZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hl YXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNj YW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxM LCAwLCAwKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4 LCBmYWxzZSwgU25hcHNob3RBbnksCisJCQkJCQkJCQlOVUxMLCAwLCAwKTsKIAkJaW5kZXhfcmVz Y2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwgMCk7CiAJfQogCWVsc2UKQEAgLTc5OCw3ICsx NDc1LDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVh cCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQlpZiAoaW5kZXhTY2FuICE9IE5VTEwpCiAJCXsKLQkJ CWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IHNsb3QpKQorCQkJaWYgKCFoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9y d2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkJICAgc2xvdCkpCiAJCQkJYnJlYWs7CiAKIAkJ CS8qIFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBrZXlzLCBzaG91bGQgbmV2ZXIgbmVlZCB0byByZWNo ZWNrICovCkBAIC0yNjU3LDYgKzMzMzUsOCBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUg aGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4X2ZldGNoX2JlZ2luID0gaGVhcGFtX2luZGV4X2Zl dGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9yZXNldCA9IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNl dCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX2VuZCwKKwkuaW5kZXhf YmF0Y2hfaW5pdCA9IGhlYXBhbV9pbmRleF9iYXRjaF9pbml0LAorCS5pbmRleF9nZXRuZXh0X3Ns b3QgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90LAogCS5pbmRleF9mZXRjaF90dXBsZSA9IGhl YXBhbV9pbmRleF9mZXRjaF90dXBsZSwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVf aW5zZXJ0LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCmluZGV4IDZmMmUzMDYxYS4uZTZkNjgx YjQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIE9CSlMg PSBcCiAJYW1hcGkubyBcCiAJYW12YWxpZGF0ZS5vIFwKIAlnZW5hbS5vIFwKLQlpbmRleGFtLm8K KwlpbmRleGFtLm8gXAorCWluZGV4YmF0Y2gubwogCiBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3Jj L2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv YW1hcGkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCmluZGV4IGVmYTAwNzAz MC4uYTY5NjU1ZGE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGku YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwpAQCAtNTUsNiArNTUsMTAg QEAgR2V0SW5kZXhBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+YW1y ZXNjYW4gIT0gTlVMTCk7CiAJQXNzZXJ0KHJvdXRpbmUtPmFtZW5kc2NhbiAhPSBOVUxMKTsKIAor CS8qIEFzc2VydCB0aGF0IEFNIGRvZXNuJ3QgaGF2ZSBhbiBpbnZhbGlkIGNvbWJpbmF0aW9uIG9m IGNhbGxiYWNrcyAqLworCUFzc2VydChyb3V0aW5lLT5hbWtpbGxpdGVtc2JhdGNoID09IE5VTEwg fHwgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+YW1nZXRi YXRjaCAhPSBOVUxMIHx8IHJvdXRpbmUtPmFtcG9zcmVzZXQgPT0gTlVMTCk7CisKIAlyZXR1cm4g cm91dGluZTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFt LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCA1ZTg5Yjg2YTYuLjZl ODcxNjljMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTg5LDYgKzg5LDkgQEAgUmVs YXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCXNjYW4tPnhzX3NuYXBzaG90ID0gSW52YWxpZFNuYXBzaG90OwkvKiBjYWxs ZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAlzY2FuLT5udW1iZXJPZktleXMgPSBua2V5czsK IAlzY2FuLT5udW1iZXJPZk9yZGVyQnlzID0gbm9yZGVyYnlzOworCXNjYW4tPnVzZWJhdGNocmlu ZyA9IGZhbHNlOyAvKiBzZXQgbGF0ZXIgZm9yIGFtZ2V0YmF0Y2ggY2FsbGVycyAqLworCXNjYW4t PnhzX2JpdG1hcF9iYXRjaCA9IE5VTEw7CisJc2Nhbi0+eHNfd2FudF9pdHVwID0gZmFsc2U7IC8q IGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBr ZXkgd29ya3NwYWNlIGhlcmUsIGJ1dCBpdCB3b24ndCBnZXQgZmlsbGVkIHVudGlsIGFtcmVzY2Fu LgpAQCAtMTAyLDggKzEwNSw2IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAllbHNlCiAJCXNjYW4tPm9yZGVy QnlEYXRhID0gTlVMTDsKIAotCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGZhbHNlOyAvKiBtYXkgYmUg c2V0IGxhdGVyICovCi0KIAkvKgogCSAqIER1cmluZyByZWNvdmVyeSB3ZSBpZ25vcmUga2lsbGVk IHR1cGxlcyBhbmQgZG9uJ3QgYm90aGVyIHRvIGtpbGwgdGhlbQogCSAqIGVpdGhlci4gV2UgZG8g dGhpcyBiZWNhdXNlIHRoZSB4bWluIG9uIHRoZSBwcmltYXJ5IG5vZGUgY291bGQgZWFzaWx5IGJl CkBAIC0xMjYsNiArMTI3LDEwIEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9IE5V TEw7CiAJc2Nhbi0+eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPmJhdGNoX2luZGV4X29w YXF1ZV9zaXplID0gMDsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsKKwlzY2Fu LT5iYXRjaF90YWJsZV9vZmZzZXQgPSAwOworCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTQ1NCw3 ICs0NTksNyBAQCBzeXN0YWJsZV9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJ CWVsb2coRVJST1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4Iik7CiAJCX0KIAotCQlzeXNzY2Fu LT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGlyZWwsCisJCXN5c3NjYW4t PmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJlbCwgZmFsc2UsCiAJCQkJ CQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCk7CiAJCWluZGV4X3Jlc2NhbihzeXNzY2Fu LT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CiAJCXN5c3NjYW4tPnNjYW4gPSBOVUxM OwpAQCAtNTE3LDcgKzUyMiw4IEBAIHN5c3RhYmxlX2dldG5leHQoU3lzU2NhbkRlc2Mgc3lzc2Nh bikKIAogCWlmIChzeXNzY2FuLT5pcmVsKQogCXsKLQkJaWYgKGluZGV4X2dldG5leHRfc2xvdChz eXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCQlp ZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwKKwkJCQkJCQkJCSBzeXNzY2FuLT5zbG90KSkKIAkJewogCQkJYm9vbAkJc2hvdWxk RnJlZTsKIApAQCAtNzE1LDcgKzcyMSw3IEBAIHN5c3RhYmxlX2JlZ2luc2Nhbl9vcmRlcmVkKFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoQ2hlY2tYaWRB bGl2ZSkpCiAJCWJzeXNzY2FuID0gdHJ1ZTsKIAotCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVn aW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwKKwlzeXNzY2FuLT5pc2NhbiA9IGlu ZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24sIGZhbHNlLAogCQkJCQkJ CQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCk7CiAJaW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlz Y2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAlzeXNzY2FuLT5zY2FuID0gTlVMTDsKQEAg LTczNCw3ICs3NDAsNyBAQCBzeXN0YWJsZV9nZXRuZXh0X29yZGVyZWQoU3lzU2NhbkRlc2Mgc3lz c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJSGVhcFR1cGxlCWh0dXAgPSBOVUxMOwog CiAJQXNzZXJ0KHN5c3NjYW4tPmlyZWwpOwotCWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nh bi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJaWYgKHRhYmxlX2luZGV4X2dl dG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKIAkJ aHR1cCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc3lzc2Nhbi0+c2xvdCwgZmFsc2UsIE5VTEwp OwogCiAJLyogU2VlIG5vdGVzIGluIHN5c3RhYmxlX2dldG5leHQgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhhbS5jCmluZGV4IDQzZjY0YTBlNy4uYTc3NDg5YjIzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGFtLmMKQEAgLTI0LDkgKzI0LDcgQEAKICAqCQlpbmRleF9wYXJhbGxlbHNjYW5f aW5pdGlhbGl6ZSAtIGluaXRpYWxpemUgcGFyYWxsZWwgc2NhbgogICoJCWluZGV4X3BhcmFsbGVs cmVzY2FuICAtIChyZSlzdGFydCBhIHBhcmFsbGVsIHNjYW4gb2YgYW4gaW5kZXgKICAqCQlpbmRl eF9iZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2luIHBhcmFsbGVsIGluZGV4IHNjYW4KLSAqCQlpbmRl eF9nZXRuZXh0X3RpZAktIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KLSAqCQlpbmRleF9m ZXRjaF9oZWFwCQktIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQotICoJCWluZGV4X2dl dG5leHRfc2xvdAktIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2NhbgorICoJCWluZGV4X2dl dG5leHRfdGlkCS0gYW1nZXR0dXBsZSB0YWJsZSBBTSBoZWxwZXIgcm91dGluZQogICoJCWluZGV4 X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGZyb20gYSBzY2FuCiAgKgkJaW5kZXhfYnVsa19k ZWxldGUJLSBidWxrIGRlbGV0aW9uIG9mIGluZGV4IHR1cGxlcwogICoJCWluZGV4X3ZhY3V1bV9j bGVhbnVwCS0gcG9zdC1kZWxldGlvbiBjbGVhbnVwIG9mIGFuIGluZGV4CkBAIC0yNTUsNiArMjUz LDcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIEluZGV4 U2NhbkRlc2MKIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJUmVs YXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQlib29sIHhzX3dhbnRfaXR1cCwKIAkJCQlTbmFwc2hv dCBzbmFwc2hvdCwKIAkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJ CQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQpAQCAtMjgxLDcgKzI4MCwxMyBAQCBpbmRleF9i ZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCSAqLwogCXNjYW4tPmhlYXBSZWxhdGlv biA9IGhlYXBSZWxhdGlvbjsKIAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4t Pk1WQ0NTY2FuID0gSXNNVkNDU25hcHNob3Qoc25hcHNob3QpOwogCXNjYW4tPmluc3RydW1lbnQg PSBpbnN0cnVtZW50OworCXNjYW4tPnhzX3dhbnRfaXR1cCA9IHhzX3dhbnRfaXR1cDsKKwlzY2Fu LT51c2ViYXRjaHJpbmcgPSBmYWxzZTsKKworCWlmIChpbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+ YW1nZXRiYXRjaCAhPSBOVUxMKQorCQlpbmRleF9iYXRjaHNjYW5faW5pdChzY2FuKTsKIAogCS8q IHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+eHNf aGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcFJlbGF0aW9uKTsKQEAgLTMx Miw2ICszMTcsNyBAQCBpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sCiAJICogdXAgYnkgUmVsYXRpb25HZXRJbmRleFNjYW4uCiAJICovCiAJc2Nhbi0+eHNfc25h cHNob3QgPSBzbmFwc2hvdDsKKwlzY2FuLT5NVkNDU2NhbiA9IElzTVZDQ1NuYXBzaG90KHNuYXBz aG90KTsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKIAogCXJldHVybiBzY2FuOwpA QCAtMzczLDEzICszNzksMTkgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAlB c3NlcnQobmtleXMgPT0gc2Nhbi0+bnVtYmVyT2ZLZXlzKTsKIAlBc3NlcnQobm9yZGVyYnlzID09 IHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwogCi0JLyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2Ug YnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKiByZXNldCB0YWJsZSBBTSBz dGF0ZSBmb3IgcmVzY2FuICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5k ZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAogCXNjYW4tPmtpbGxfcHJpb3Jf dHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGludWUg PSBmYWxzZTsKIAorCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlBc3NlcnQoIXNjYW4t PmJhdGNocmluZ2J1Zi5kb25lKTsKKwkJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4pOworCX0K KwogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBrZXlzLCBu a2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7CiB9CkBAIC0zOTQsNiArNDA2 LDE3IEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCVNDQU5fQ0hFQ0tTOwog CUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZW5kc2Nhbik7CiAKKwkvKiBDbGVhbnVwIGJhdGNoaW5n LCBzbyB0aGF0IHRoZSBBTSBjYW4gcmVsZWFzZSBwaW5zIGFuZCBzbyBvbi4gKi8KKwlpZiAoc2Nh bi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRleF9iYXRjaHNjYW5fZW5kKHNjYW4pOworCisJLyogRnJl ZSBjYWNoZWQgYml0bWFwIGJhdGNoIGlmIGFueSAqLworCWlmIChzY2FuLT54c19iaXRtYXBfYmF0 Y2ggIT0gTlVMTCkKKwl7CisJCXBmcmVlKGJhdGNoX2FsbG9jX2Jhc2Uoc2Nhbi0+eHNfYml0bWFw X2JhdGNoLCBzY2FuKSk7CisJCXNjYW4tPnhzX2JpdG1hcF9iYXRjaCA9IE5VTEw7CisJfQorCiAJ LyogUmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNz ZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCXsKQEAgLTQyMiwyNCArNDQ1LDI1IEBA IHZvaWQKIGluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCVNDQU5fQ0hFQ0tT OwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURV UkUoYW1nZXRiYXRjaCk7CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJr cG9zKHNjYW4pOworCS8qIE9ubHkgYW1nZXRiYXRjaCBpbmRleCBBTXMgc3VwcG9ydCBtYXJrIGFu ZCByZXN0b3JlICovCisJaW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zKHNjYW4pOwogfQogCiAvKiAt LS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfcmVzdHJwb3MJLSByZXN0b3JlIGEgc2NhbiBwb3Np dGlvbgogICoKLSAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgaW50ZXJuYWwgc2NhbiBz dGF0ZSBvZiB0aGUgaW5kZXggQU0uICBTZWUKLSAqIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3Mo KS4KKyAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgYmF0Y2ggcG9zaXRpb25hbCBzdGF0 ZSBzaGFyZWQgYnkgdGhlIHRhYmxlIGFuZAorICogaW5kZXggQU1zLiAgU2VlIGNvbW1lbnRzIGZv ciBFeGVjUmVzdHJQb3MoKS4KICAqCiAgKiBOT1RFOiBGb3IgaGVhcCwgaW4gdGhlIHByZXNlbmNl IG9mIEhPVCBjaGFpbnMsIG1hcmsvcmVzdG9yZSBvbmx5IHdvcmtzCiAgKiBjb3JyZWN0bHkgaWYg dGhlIHNjYW4ncyBzbmFwc2hvdCBpcyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZXJl J3MgYXQKICAqIG1vc3Qgb25lIHJldHVybmFibGUgdHVwbGUgaW4gZWFjaCBIT1QgY2hhaW4sIGFu ZCBzbyByZXN0b3JpbmcgdGhlIHByaW9yCi0gKiBzdGF0ZSBhdCB0aGUgZ3JhbnVsYXJpdHkgb2Yg dGhlIGluZGV4IEFNIGlzIHN1ZmZpY2llbnQuICBTaW5jZSB0aGUgb25seQotICogY3VycmVudCB1 c2VyIG9mIG1hcmsvcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpvaW4uYywgdGhp cwotICogZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCBtZXJnZS1qb2luIHBsYW5zIG9ubHkgd29yayBm b3IgTVZDQyBzbmFwc2hvdHMuICBUaGlzCi0gKiBjb3VsZCBiZSBmaXhlZCBpZiBuZWNlc3Nhcnks IGJ1dCBmb3Igbm93IGl0IHNlZW1zIHVuaW1wb3J0YW50LgorICogc3RhdGUgYXQgdGhlIHNjYW4g aXRlbSBncmFudWxhcml0eSBpcyBzdWZmaWNpZW50LiAgU2luY2UgdGhlIG9ubHkgY3VycmVudAor ICogdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVuY3Rpb25hbGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMs IHRoaXMgZWZmZWN0aXZlbHkKKyAqIG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBwbGFucyBvbmx5IHdv cmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhpcyBjb3VsZCBiZQorICogZml4ZWQgaWYgbmVjZXNz YXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1bmltcG9ydGFudC4KICAqIC0tLS0tLS0tLS0tLS0t LS0KICAqLwogdm9pZApAQCAtNDQ4LDE2ICs0NzIsMTYgQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhT Y2FuRGVzYyBzY2FuKQogCUFzc2VydChJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkp OwogCiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1yZXN0cnBvcyk7CisJ Q0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQkvKiByZWxlYXNlIHJlc291cmNl cyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qIHJlc2V0IHRh YmxlIEFNIHN0YXRlIGZvciByZXNjYW4gKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCQl0 YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCi0Jc2Nhbi0+a2ls bF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCi0Jc2Nhbi0+eHNfaGVhcF9j b250aW51ZSA9IGZhbHNlOworCS8qIGFsc28gbm90aWZ5IHRhYmxlIEFNIGFuZCBpbmRleCBBTSAq LworCWluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKIAotCXNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCXNjYW4tPnhzX2hlYXBfY29udGlu dWUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogfQogCiAvKgpAQCAtNTc5LDYgKzYwMywxMiBA QCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKHNjYW4tPnhz X2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNo KTsKIAorCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlBc3NlcnQoIXNjYW4tPmJhdGNo cmluZ2J1Zi5kb25lKTsKKwkJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4pOworCX0KKwogCS8q IGFtcGFyYWxsZWxyZXNjYW4gaXMgb3B0aW9uYWw7IGFzc3VtZSBuby1vcCBpZiBub3QgcHJvdmlk ZWQgYnkgQU0gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxs ZWxyZXNjYW4gIT0gTlVMTCkKIAkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFy YWxsZWxyZXNjYW4oc2Nhbik7CkBAIC01OTEsNiArNjIxLDcgQEAgaW5kZXhfcGFyYWxsZWxyZXNj YW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogICovCiBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNj YW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkg Ym9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0 cnVtZW50LAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCSBQYXJhbGxl bEluZGV4U2NhbkRlc2MgcHNjYW4pCkBAIC02MTIsNyArNjQzLDEyIEBAIGluZGV4X2JlZ2luc2Nh bl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKIAkgKi8KIAlz Y2FuLT5oZWFwUmVsYXRpb24gPSBoZWFwcmVsOwogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNo b3Q7CisJc2Nhbi0+TVZDQ1NjYW4gPSBJc01WQ0NTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2Nhbi0+ aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CisJc2Nhbi0+eHNfd2FudF9pdHVwID0geHNfd2FudF9p dHVwOworCisJaWYgKGluZGV4cmVsLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBOVUxMKQorCQlp bmRleF9iYXRjaHNjYW5faW5pdChzY2FuKTsKIAogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXgg bWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhf ZmV0Y2hfYmVnaW4oaGVhcHJlbCk7CkBAIC02MjEsMTAgKzY1NywxNCBAQCBpbmRleF9iZWdpbnNj YW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiB9CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4X2dldG5leHRfdGlkIC0gZ2V0IHRoZSBuZXh0IFRJ RCBmcm9tIGEgc2NhbgorICogaW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdldHR1cGxlIGludGVyZmFj ZQogICoKICAqIFRoZSByZXN1bHQgaXMgdGhlIG5leHQgVElEIHNhdGlzZnlpbmcgdGhlIHNjYW4g a2V5cywKICAqIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgZXhpc3QuCisgKgor ICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGFibGUgQU0ncyBpbmRleF9nZXRuZXh0 X3Nsb3QgaW1wbGVtZW50YXRpb24sCisgKiBhbmQgb25seSBnaXZlbiBhbiBpbmRleCBBTSB0aGF0 IHN1cHBvcnRzIHRoZSBzaW5nbGUtdHVwbGUgYW1nZXR0dXBsZQorICogaW50ZXJmYWNlLgogICog LS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjY3LDk3ICs3MDcsNiBAQCBp bmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKQogCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0t LQotICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUK LSAqCi0gKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0 aCB0aGUgaW5kZXggVElEIG1vc3QKLSAqIHJlY2VudGx5IGZldGNoZWQgYnkgaW5kZXhfZ2V0bmV4 dF90aWQsIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMKLSAqIGV4aXN0LiAgKFRo ZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2Ugb2YgSE9UIGNo YWlucywKLSAqIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQg YmUgaW1wb3NzaWJsZSBmb3IgbW9yZSB0aGFuCi0gKiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4p Ci0gKgotICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBp cyBwaW5uZWQgKHRoZSBwaW4gd2lsbCBiZQotICogZHJvcHBlZCBpbiBhIGZ1dHVyZSBpbmRleF9n ZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4K LSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVy Zm9ybSByZWNoZWNraW5nIG9mIHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8g bm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1h dGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0t LS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2Nh biwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JYm9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKLQli b29sCQlmb3VuZDsKLQotCWZvdW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNf aGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKLQkJCQkJCQkJCXNjYW4tPnhzX3NuYXBzaG90 LCBzbG90LAotCQkJCQkJCQkJJnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxfZGVhZCk7Ci0K LQlpZiAoZm91bmQpCi0JCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRp b24pOwotCi0JLyoKLQkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3Vu ZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4Ci0JICogQU0gdG8ga2lsbCBpdHMgZW50cnkg Zm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKLQkgKiBhbWdl dHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdo ZW4gaW4KLQkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28u ICBTZWUgY29tbWVudHMgaW4KLQkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgotCSAqLwotCWlm ICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxl ID0gYWxsX2RlYWQ7Ci0KLQlyZXR1cm4gZm91bmQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0K LSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4K LSAqCi0gKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2Fu IGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKLSAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBU aGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KLSAqCi0gKiBPbiBzdWNj ZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwg YW5kIHdpbGwgYmUKLSAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGlu ZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTog Y2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2lu ZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhl cmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQg ZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAq LwotYm9vbAotaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWZvciAoOzspCi0Jewot CQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGludWUpCi0JCXsKLQkJCUl0ZW1Qb2ludGVyIHRpZDsK LQotCQkJLyogVGltZSB0byBmZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KLQkJ CXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7Ci0KLQkJCS8qIElmIHdl J3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCi0JCQlpZiAodGlkID09IE5V TEwpCi0JCQkJYnJlYWs7Ci0KLQkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscyh0aWQsICZzY2Fu LT54c19oZWFwdGlkKSk7Ci0JCX0KLQotCQkvKgotCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25s eSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgotCQkgKiBJZiB3ZSBk b24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJv bQotCQkgKiB0aGUgaW5kZXguCi0JCSAqLwotCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZz Y2FuLT54c19oZWFwdGlkKSk7Ci0JCWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQot CQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKiAtLS0tLS0tLS0t LS0tLS0tCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgYXQgb25jZSBmcm9t IGFuIGluZGV4IHNjYW4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmNkZmI5ZTc2MgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTAsMCArMSw3 NTEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYworICoJICBCYXRj aC1iYXNlZCBpbmRleCBzY2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRiYXRjaCBpbnRl cmZhY2UuCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGNvcmUgaW5mcmFzdHJ1Y3R1 cmUgZm9yIGJhdGNoLWJhc2VkIGluZGV4IHNjYW5zLAorICogd2hpY2ggYWxsb3cgaW5kZXggQU1z IHRvIHJldHVybiBtdWx0aXBsZSBtYXRjaGluZyBUSURzIHBlciBwYWdlIGluIGEgc2luZ2xlCisg KiBjYWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlIEFN LCB3aXRoIGhlbHAgZnJvbSB1cywKKyAqIGFuZCB3aXRoIGhlbHAgZnJvbSB0aGUgcmluZyBidWZm ZXIgaW5saW5lIGZ1bmN0aW9ucyBpbiByZWxzY2FuLmguICBUaGlzCisgKiBhcHByb2FjaCBlbmFi bGVzIGVmZmljaWVudCBwcmVmZXRjaGluZyBvZiB0YWJsZSBBTSBibG9ja3MgZHVyaW5nIG9yZGVy ZWQKKyAqIGluZGV4IHNjYW5zLgorICoKKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVz IGluIGluZGV4IGtleSBzcGFjZSBvcmRlci4KKyAqCisgKiBUaGVyZSdzIHRocmVlIHR5cGVzIG9m IGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZToKKyAqCisgKiAxLiBDb3JlIGJhdGNoIHNjYW4gbGlm ZWN5Y2xlIChpbmRleF9iYXRjaHNjYW5fKik6IEZ1bmN0aW9ucyB0aGF0IG1hbmFnZQorICogICAg YmF0Y2ggc2NhbiBzdGF0ZSBpbmNsdWRpbmcgaW5pdGlhbGl6YXRpb24sIHJlc2V0LCBjbGVhbnVw LCBhbmQgdGhlCisgKiAgICBtYXJrL3Jlc3RvcmUgb3BlcmF0aW9ucyBuZWVkZWQgZm9yIG1lcmdl IGpvaW5zLiAgQ2FsbGVkIGJ5IGluZGV4YW0uYworICogICAgcm91dGluZXMgdGhhdCBtYW5hZ2Ug aW5kZXggc2NhbnMgb24gYmVoYWxmIG9mIHRoZSBjb3JlIGV4ZWN1dG9yLgorICoKKyAqIDIuIFRh YmxlIEFNIHV0aWxpdGllcyAodGFibGVhbV91dGlsXyopOiBIZWxwZXIgZnVuY3Rpb25zIGNhbGxl ZCBieSB0YWJsZQorICogICAgQU1zIGR1cmluZyBhbWdldGJhdGNoIGluZGV4IHNjYW5zLiAgVGhl c2UgaGFuZGxlIGNyb3NzLWJhdGNoIGRpcmVjdGlvbgorICogICAgY2hhbmdlcywgcmVjb3JkaW5n IGRlYWQgaXRlbXMgZm9yIGEgbGF0ZXIgY2FsbCB0byBhbWtpbGxpdGVtc2JhdGNoLCBhbmQKKyAq ICAgIGZyZWVpbmcgYmF0Y2hlcyB3aGVuIHRoZSB0YWJsZSBBTSBpcyBkb25lIHdpdGggdGhlbS4K KyAqCisgKiAzLiBJbmRleCBBTSB1dGlsaXRpZXMgKGluZGV4YW1fdXRpbF8qKTogSGVscGVyIGZ1 bmN0aW9ucyBjYWxsZWQgYnkgaW5kZXgKKyAqICAgIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1n ZXRiYXRjaCBpbnRlcmZhY2UuICBUaGVzZSBtYW5hZ2UgYmF0Y2gKKyAqICAgIGFsbG9jYXRpb24s IGluZGV4IHBhZ2UgYnVmZmVyIGxvY2sgcmVsZWFzZSwgYW5kIGJhdGNoIG1lbW9yeSByZWN5Y2xp bmcuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2lu Y2x1ZGUgImNvbW1vbi9pbnQuaCIKKyNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgorI2luY2x1ZGUg InV0aWxzL21lbWRlYnVnLmgiCisKK3N0YXRpYyBpbnQJYmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qg dm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKTsKKworLyoKKyAqIFNldHMgdXAgdGhlIGJhdGNoIHJp bmcgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdXNlIGJ5IGFuIGluZGV4IHNjYW4uCisgKgorICogT25s eSBjYWxsIGhlcmUgd2hlbiBhbGwgb2YgdGhlIGluZGV4IHJlbGF0ZWQgZmllbGRzIGluICdzY2Fu JyB3ZXJlIGFscmVhZHkKKyAqIGluaXRpYWxpemVkLgorICovCit2b2lkCitpbmRleF9iYXRjaHNj YW5faW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJc2Nhbi0+YmF0Y2hyaW5nYnVm LnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHJpbmdidWYubWFya1Bvcy52YWxp ZCA9IGZhbHNlOworCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nh bi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgaGVhZCBiYXRjaCAqLwor CXNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoIHN0YXJ0 cyBlbXB0eSAqLworCXNjYW4tPmJhdGNocmluZ2J1Zi5kb25lID0gZmFsc2U7CisJbWVtc2V0KCZz Y2FuLT5iYXRjaHJpbmdidWYuY2FjaGUsIDAsIHNpemVvZihzY2FuLT5iYXRjaHJpbmdidWYuY2Fj aGUpKTsKKworCXNjYW4tPnVzZWJhdGNocmluZyA9IHRydWU7Cit9CisKKy8qCisgKiBSZXNldCBz dGF0ZSB1c2VkIGZvciBhIGJhdGNoIGluZGV4IHNjYW4KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hz Y2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNo cmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNo ID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisJYm9vbAkJbWFya0JhdGNoRnJlZWQgPSBmYWxz ZTsKKworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJYmF0Y2hyaW5nYnVmLT5zY2Fu UG9zLnZhbGlkID0gZmFsc2U7CisJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFsc2U7 CisKKwkvKgorCSAqIEVuc3VyZSB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCB3b24ndCBza2lwIHRo ZSBvbGQgbWFya0JhdGNoIGluIHRoZSBsb29wCisJICogYmVsb3cKKwkgKi8KKwliYXRjaHJpbmdi dWYtPm1hcmtCYXRjaCA9IE5VTEw7CisKKwlmb3IgKHVpbnQ4IGkgPSBiYXRjaHJpbmdidWYtPmhl YWRCYXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJSW5kZXhT Y2FuQmF0Y2ggYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkpOworCisJCWlmIChiYXRj aCA9PSBtYXJrQmF0Y2gpCisJCQltYXJrQmF0Y2hGcmVlZCA9IHRydWU7CisKKwkJdGFibGVhbV91 dGlsX2ZyZWVfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCWlmICghbWFya0JhdGNoRnJlZWQg JiYgdW5saWtlbHkobWFya0JhdGNoKSkKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2Nhbiwg bWFya0JhdGNoKTsKKworCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gMDsKKwliYXRjaHJpbmdi dWYtPm5leHRCYXRjaCA9IDA7Cit9CisKKy8qCisgKiBGcmVlIHJlc291cmNlcyBhdCBlbmQgb2Yg YmF0Y2ggaW5kZXggc2NhbgorICoKKyAqIENhbGxlZCB3aGVuIGFuIGluZGV4IHNjYW4gaXMgYmVp bmcgZW5kZWQsIHJpZ2h0IGJlZm9yZSB0aGUgb3duaW5nIHNjYW4KKyAqIGRlc2NyaXB0b3IgZ29l cyBhd2F5LiAgQ2xlYW5zIHVwIGFsbCBiYXRjaCByZWxhdGVkIHJlc291cmNlcy4KKyAqLwordm9p ZAoraW5kZXhfYmF0Y2hzY2FuX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJLyogRnJlZSBh bGwgcmVtYWluaW5nIGxvYWRlZCBiYXRjaGVzIChldmVuIG1hcmtCYXRjaCkgKi8KKwlzY2FuLT5i YXRjaHJpbmdidWYuZG9uZSA9IHRydWU7CisJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4pOwor CisJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7 CisJCUluZGV4U2NhbkJhdGNoIGNhY2hlZCA9IHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXTsK KworCQlpZiAoY2FjaGVkID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAoY2FjaGVkLT5k ZWFkSXRlbXMpCisJCQlwZnJlZShjYWNoZWQtPmRlYWRJdGVtcyk7CisJCXBmcmVlKGJhdGNoX2Fs bG9jX2Jhc2UoY2FjaGVkLCBzY2FuKSk7CisJfQorfQorCisvKgorICogU2V0IGEgbWFyayBmcm9t IHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBTYXZlcyB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9u IGFuZCBhc3NvY2lhdGVkIGJhdGNoIHNvIHRoYXQgdGhlIHNjYW4gY2FuCisgKiBiZSByZXN0b3Jl ZCB0byB0aGlzIHBvaW50IGxhdGVyLCB2aWEgYSBjYWxsIHRvIGluZGV4X2JhdGNoc2Nhbl9yZXN0 b3JlX3Bvcy4KKyAqIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmV0YWluZWQgYW5kIG5vdCBmcmVlZCB1 bnRpbCBhIG5ldyBtYXJrIGlzIHNldCBvciB0aGUKKyAqIHNjYW4gZW5kcyAob3IgdW50aWwgdGhl IG1hcmsgaXMgcmVzdG9yZWQpLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fbWFya19wb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0g JnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4t PmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0 Y2hyaW5nYnVmLT5tYXJrUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3Nj YW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRj aCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCWJvb2wJCWZyZWVNYXJrQmF0Y2g7CisKKwlB c3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCisJLyoKKwkgKiBGcmVlIHRoZSBwcmV2aW91cyBtYXJr IGJhdGNoIChpZiBhbnkpIC0tIGJ1dCBvbmx5IGlmIGl0IGlzbid0IG91cgorCSAqIHNjYW5CYXRj aCAoZGVmZW5zaXZlbHkgbWFrZSBzdXJlIHRoYXQgbWFya0JhdGNoIGlzbid0IHNvbWUgbGF0ZXIK KwkgKiBzdGlsbC1uZWVkZWQgYmF0Y2gsIHRvbykKKwkgKi8KKwlpZiAoIW1hcmtCYXRjaCB8fCBt YXJrQmF0Y2ggPT0gc2NhbkJhdGNoKQorCXsKKwkJLyogRGVmaW5pdGVseSBubyBtYXJrQmF0Y2gg dGhhdCB3ZSBzaG91bGQgZnJlZSBub3cgKi8KKwkJZnJlZU1hcmtCYXRjaCA9IGZhbHNlOworCX0K KwllbHNlIGlmIChsaWtlbHkoIWluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIG1hcmtQb3Mt PmJhdGNoKSkpCisJeworCQkvKiBEZWZpbml0ZWx5IGhhdmUgYSBuby1sb25nZXItbG9hZGVkIG1h cmtCYXRjaCB0byBmcmVlICovCisJCWZyZWVNYXJrQmF0Y2ggPSB0cnVlOworCX0KKwllbHNlCisJ eworCQkvKgorCQkgKiBJdCBsb29rcyBsaWtlIG1hcmtCYXRjaCBpcyBsb2FkZWQvc3RpbGwgbmVl ZGVkIHdpdGhpbiBiYXRjaHJpbmdidWYuCisJCSAqCisJCSAqIGluZGV4X3NjYW5fYmF0Y2hfbG9h ZGVkIGluZGljYXRlcyB0aGF0IG1hcmtwb3MtPmJhdGNoIGlzIGxvYWRlZAorCQkgKiBhbHJlYWR5 LCBidXQgd2UgY2Fubm90IGZ1bGx5IHRydXN0IGl0IGhlcmUuICBJdCdzIGp1c3QgYWJvdXQKKwkJ ICogcG9zc2libGUgdGhhdCBtYXJrcG9zLT5iYXRjaCBmYWxscyB3aXRoaW4gYSBzaW5jZS1yZWN5 Y2xlZCByYW5nZSBvZgorCQkgKiBiYXRjaCBvZmZzZXQgbnVtYmVycyAoZm9sbG93aW5nIHVpbnQ4 IG92ZXJmbG93KS4KKwkJICoKKwkJICogTWFrZSBzdXJlIHRoYXQgbWFya0JhdGNoIHJlYWxseSBp cyBsb2FkZWQgYnkgZGlyZWN0bHkgY29tcGFyaW5nIGl0CisJCSAqIGFnYWluc3QgYWxsIGxvYWRl ZCBiYXRjaGVzLiAgV2UgbXVzdCBub3QgZmFpbCB0byByZWxlYXNlIG1hcmtCYXRjaAorCQkgKiB3 aGVuIG5vYm9keSBlbHNlIHdpbGwgbGF0ZXIgb24uCisJCSAqCisJCSAqIE5vdGU6IGluIHByYWN0 aWNlIHdlJ3JlIHZlcnkgdW5saWtlbHkgdG8gZW5kIHVwIGhlcmUuICBJdCBpcyB2ZXJ5CisJCSAq IGF0eXBpY2FsIGZvciBhbiBpbmRleCBzY2FuIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbWVyZ2Ug am9pbiB0bworCQkgKiBob2xkIG9uIHRvIGEgbWFyayB0aGF0IHRyYWlscyB0aGUgY3VycmVudCBz Y2FuQmF0Y2ggdGhpcyBtdWNoLgorCQkgKi8KKwkJZnJlZU1hcmtCYXRjaCA9IHRydWU7CS8qIGku ZS4gaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgbGllZCB0byB1cyAqLworCisJCWZvciAodWludDgg aSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNo OyBpKyspCisJCXsKKwkJCWlmIChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkpID09IG1hcmtCYXRj aCkKKwkJCXsKKwkJCQkvKiBpbmRleF9zY2FuX2JhdGNoX2xvYWRlZCB3YXMgcmlnaHQvbm8gb3Zl cmZsb3cgaGFwcGVuZWQgKi8KKwkJCQlmcmVlTWFya0JhdGNoID0gZmFsc2U7CisJCQkJYnJlYWs7 CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZnJlZU1hcmtCYXRjaCkKKwl7CisJCS8qIEZyZWUgbWFy a0JhdGNoLCBzaW5jZSBpdCBpc24ndCBsb2FkZWQvbmVlZGVkIGZvciBiYXRjaHJpbmdidWYgKi8K KwkJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2ggPSBOVUxMOyAvKiBlbHNlIGNhbGwgd29uJ3QgZnJl ZSBtYXJrQmF0Y2ggKi8KKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgbWFya0JhdGNo KTsKKwl9CisKKwkvKiBjb3B5IHRoZSBzY2FuJ3MgcG9zaXRpb24gKi8KKwliYXRjaHJpbmdidWYt Pm1hcmtQb3MgPSAqc2NhblBvczsKKwliYXRjaHJpbmdidWYtPm1hcmtCYXRjaCA9IHNjYW5CYXRj aDsKK30KKworLyoKKyAqIFJlc3RvcmUgbWFyayB0byBzY2FuUG9zIHBvc2l0aW9uCisgKgorICog UmVzdG9yZXMgdGhlIHNjYW4gdG8gYSBwb3NpdGlvbiBzYXZlZCBieSBpbmRleF9iYXRjaHNjYW5f bWFya19wb3MgZWFybGllci4KKyAqIFRoZSBzY2FuJ3MgbWFya1BvcyBiZWNvbWVzIGl0cyBzY2Fu UG9zLiAgVGhlIG1hcmtlZCBiYXRjaCBpcyByZXN0b3JlZCBhcworICogdGhlIGN1cnJlbnQgc2Nh bkJhdGNoIHdoZW4gbmVlZGVkLgorICoKKyAqIFdlIGp1c3QgZGlzY2FyZCBhbGwgYmF0Y2hlcyAo b3RoZXIgdGhhbiBtYXJrQmF0Y2gvcmVzdG9yZWQgc2NhbkJhdGNoKSwKKyAqIGV4Y2VwdCB3aGVu IG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRoZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guCisgKi8K K3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7 CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOwor CUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7 CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHJpbmdidWYtPm1hcmtQb3M7CisJ SW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisJSW5k ZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5i YXRjaCk7CisKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCUFzc2VydCghYmF0Y2hyaW5nYnVm LT5kb25lKTsKKwlBc3NlcnQobWFya1Bvcy0+dmFsaWQpOworCisJaWYgKHNjYW5CYXRjaCA9PSBt YXJrQmF0Y2gpCisJeworCQkvKiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSBzY2FuQmF0Y2g7IG5lZWRu J3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLworCQlBc3NlcnQoc2NhblBvcy0+YmF0Y2ggPT0gbWFy a1Bvcy0+YmF0Y2gpOworCisJCXNjYW5Qb3MtPml0ZW0gPSBtYXJrUG9zLT5pdGVtOworCQlyZXR1 cm47CisJfQorCisJLyoKKwkgKiBtYXJrQmF0Y2ggaXMgYmVoaW5kIHNjYW5CYXRjaCwgYW5kIHNv IG11c3Qgbm90IGJlIHNhdmVkIGluIHJpbmcgYnVmZmVyCisJICogYW55bW9yZS4gIFdlIGhhdmUg dG8gZGVhbCB3aXRoIHJlc3RvcmluZyB0aGUgbWFyayB0aGUgaGFyZCB3YXk6IGJ5CisJICogaW52 YWxpZGF0aW5nIGFsbCBvdGhlciBsb2FkZWQgYmF0Y2hlcy4gIFRoaXMgaXMgc2ltaWxhciB0byB0 aGUgY2FzZQorCSAqIHdoZXJlIHRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzIGFuZCB0aGUgc2Nh biBhY3R1YWxseSBjcm9zc2VzCisJICogYmF0Y2gvaW5kZXggcGFnZSBib3VuZGFyaWVzIChzZWUg dGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZSkuCisJICoKKwkgKiBGaXJzdCwgZnJlZSBhbGwg YmF0Y2hlcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUgcmluZyBidWZmZXIuCisJICovCisJZm9yICh1 aW50OCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0 QmF0Y2g7IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNoIGJhdGNoID0gaW5kZXhfc2Nhbl9iYXRj aChzY2FuLCBpKTsKKworCQlBc3NlcnQoYmF0Y2ggIT0gbWFya0JhdGNoKTsKKworCQl0YWJsZWFt X3V0aWxfZnJlZV9iYXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJLyoKKwkgKiBOZXh0ICJhcHBl bmQiIHN0YW5kYWxvbmUgbWFya0JhdGNoLCBtYWtpbmcgdGhlIHJpbmcgYnVmZmVyIGFwcGVhciBh cyBpZgorCSAqIGl0IHdhcyB0aGUgZmlyc3QgYmF0Y2ggZXZlciByZXR1cm5lZCBieSBhbWdldGJh dGNoIGZvciB0aGUgc2NhbgorCSAqLworCW1hcmtQb3MtPmJhdGNoID0gMDsKKwliYXRjaHJpbmdi dWYtPnNjYW5Qb3MgPSAqbWFya1BvczsKKwliYXRjaHJpbmdidWYtPm5leHRCYXRjaCA9IGJhdGNo cmluZ2J1Zi0+aGVhZEJhdGNoID0gbWFya1Bvcy0+YmF0Y2g7CisJaW5kZXhfc2Nhbl9iYXRjaF9h cHBlbmQoc2NhbiwgbWFya0JhdGNoKTsKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBi YXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpID09IG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIEZp bmFsbHksIGNhbGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBpbnZhbGlkYXRl IGFueSBwcml2YXRlCisJICogc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2Nh bidzIHByb2dyZXNzCisJICovCisJaWYgKHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChz Y2FuLCBtYXJrQmF0Y2gpOworCisJLyoKKwkgKiBOb3RlOiBtYXJrQmF0Y2guZGVhZEl0ZW1zW10g bWlnaHQgYWxyZWFkeSBjb250YWluIGRlYWQgaXRlbXMsIGFuZCBtaWdodAorCSAqIHlldCBoYXZl IG1vcmUgZGVhZCBpdGVtcyBzYXZlZC4gIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIGlzIHByZXBh cmVkCisJICogZm9yIHRoYXQuCisJICovCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJdXRpbGl0eSBm dW5jdGlvbnMgY2FsbGVkIGJ5IHRhYmxlIEFNcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBI YW5kbGUgY3Jvc3MtYmF0Y2ggY2hhbmdlIGluIHNjYW4gZGlyZWN0aW9uCisgKgorICogQ2FsbGVk IGJ5IHRhYmxlIEFNIHdoZW4gaXRzIHNjYW4gY2hhbmdlcyBkaXJlY3Rpb24gaW4gYSB3YXkgdGhh dAorICogbmVjZXNzaXRhdGVzIGJhY2tpbmcgdGhlIHNjYW4gdXAgdG8gYW4gaW5kZXggcGFnZSBv cmlnaW5hbGx5IGFzc29jaWF0ZWQKKyAqIHdpdGggYSBub3ctZnJlZWQgYmF0Y2guCisgKgorICog V2hlbiB3ZSByZXR1cm4sIGJhdGNocmluZ2J1ZiB3aWxsIG9ubHkgY29udGFpbiBvbmUgYmF0Y2gg KHRoZSBjdXJyZW50CisgKiBoZWFkQmF0Y2gvc2NhbkJhdGNoKS4gIENhbGxlciBjYW4gdGhlbiBz YWZlbHkgcGFzcyB0aGlzIGJhdGNoIHRvIGFtZ2V0YmF0Y2gKKyAqIHRvIGRldGVybWluZSB3aGlj aCBiYXRjaCBjb21lcyBuZXh0IGluIHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24uICBGcm9tIHRoYXQK KyAqIHBvaW50IG9uIGJhdGNocmluZ2J1ZiB3aWxsIGxvb2sgYXMgaWYgb3VyIG5ldyBzY2FuIGRp cmVjdGlvbiBoYWQgYmVlbiB1c2VkCisgKiBmcm9tIHRoZSBzdGFydC4gIFRoaXMgYXBwcm9hY2gg aXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzCisgKiB3ZWxsIGVub3Vn aCBmb3Igd2hhdCBvdWdodCB0byBiZSBhIHJlbGF0aXZlbHkgcmFyZSBvY2N1cnJlbmNlLgorICov Cit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2NhbikK K3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7 CisJSW5kZXhTY2FuQmF0Y2ggaGVhZDsKKworCS8qCisJICogUmVsZWFzZSBiYXRjaGVzIHN0YXJ0 aW5nIGZyb20gdGhlIGN1cnJlbnQgInRhaWwiIGJhdGNoLCB3b3JraW5nCisJICogYmFja3dhcmRz IHVudGlsIHRoZSBjdXJyZW50IGhlYWQgYmF0Y2ggKHdoaWNoIG11c3QgYWxzbyBiZSB0aGUgY3Vy cmVudAorCSAqIHNjYW5CYXRjaCkgaXMgdGhlIG9ubHkgYmF0Y2ggaGFzbid0IGJlZW4gZnJlZWQK KwkgKi8KKwl3aGlsZSAoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA+IDEpCisJeworCQlJ bmRleFNjYW5CYXRjaCB0YWlsID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLAorCQkJCQkJCQkJCQkg ICBiYXRjaHJpbmdidWYtPm5leHRCYXRjaCAtIDEpOworCisJCXRhYmxlYW1fdXRpbF9mcmVlX2Jh dGNoKHNjYW4sIHRhaWwpOworCQliYXRjaHJpbmdidWYtPm5leHRCYXRjaC0tOworCX0KKworCS8q IHNjYW5CYXRjaCBpcyBub3cgdGhlIG9ubHkgYmF0Y2ggc3RpbGwgbG9hZGVkICovCisJQXNzZXJ0 KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IGJhdGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCk7 CisKKwkvKgorCSAqIERlYWwgd2l0aCBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkg dHJhY2tzIHRoZSBwcm9ncmVzcyBvZiB0aGUKKwkgKiBzY2FuLiAgRG8gdGhpcyBieSBmbGlwcGlu ZyB0aGUgYmF0Y2gtbGV2ZWwgc2NhbiBkaXJlY3Rpb24sIGFuZCB0aGVuCisJICogY2FsbGluZyB0 aGUgaW5kZXggQU0ncyBhbXBvc3Jlc2V0LgorCSAqLworCWhlYWQgPSBpbmRleF9zY2FuX2JhdGNo KHNjYW4sIGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwloZWFkLT5kaXIgPSAtaGVhZC0+ZGly OworCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldCkKKwkJc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQoc2NhbiwgaGVhZCk7Cit9CisK Ky8qCisgKiBSZWNvcmQgdGhhdCBzY2FuUG9zIGl0ZW0gaXMgZGVhZAorICoKKyAqIFJlY29yZHMg YW4gb2Zmc2V0IHRvIHRoZSBjdXJyZW50IHNjYW5CYXRjaC9zY2FuUG9zIGl0ZW0sIHNhdmluZyBp dCBpbgorICogc2NhbkJhdGNoJ3MgZGVhZEl0ZW1zIGFycmF5LiAgVGhlIGl0ZW1zJyBpbmRleCB0 dXBsZXMgd2lsbCBsYXRlciBiZQorICogbWFya2VkIExQX0RFQUQgd2hlbiBjdXJyZW50IHNjYW5C YXRjaCBpcyBmcmVlZC4KKyAqLwordm9pZAordGFibGVhbV91dGlsX2tpbGxfc2NhbnBvc2l0ZW0o SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nh bi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5k ZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwlpZiAoc2NhbkJhdGNoLT5k ZWFkSXRlbXMgPT0gTlVMTCkKKwkJc2NhbkJhdGNoLT5kZWFkSXRlbXMgPSBwYWxsb2NfYXJyYXko aW50LCBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwlpZiAoc2NhbkJhdGNoLT5udW1EZWFkIDwgc2Nh bi0+bWF4aXRlbXNiYXRjaCkKKwkJc2NhbkJhdGNoLT5kZWFkSXRlbXNbc2NhbkJhdGNoLT5udW1E ZWFkKytdID0gc2NhblBvcy0+aXRlbTsKK30KKworLyoKKyAqIFJlbGVhc2UgcmVzb3VyY2VzIGFz c29jaWF0ZWQgd2l0aCBhIGJhdGNoCisgKgorICogQ2FsbGVkIGJ5IHRhYmxlIEFNJ3Mgb3JkZXJl ZCBpbmRleCBzY2FuIGltcGxlbWVudGF0aW9uIHdoZW4gaXQgaXMgZmluaXNoZWQKKyAqIHdpdGgg YSBiYXRjaCBhbmQgd2lzaGVzIHRvIHJlbGVhc2UgaXRzIHJlc291cmNlcy4KKyAqCisgKiBXZSBy ZWxlYXNlIHRoZSBiYXRjaCdzIGJ1ZmZlciBwaW4gaWYgdGFibGUgQU0gaGFzbid0IHJlbGVhc2Vk IGl0IGFscmVhZHkuCisgKiBGb3IgcGxhaW4gaW5kZXggc2NhbnMgd2l0aCBhbiBNVkNDIHNuYXBz aG90LCB0aGUgdGFibGUgQU0gY2FsbGVyIHJlbGVhc2VzCisgKiB0aGUgcGluIGltbWVkaWF0ZWx5 LCBzbyB3ZSBuZXZlciByZWxlYXNlIHRoZSBwaW4gaGVyZS4gIEluZGV4LW9ubHkgc2NhbnMKKyAq IG11c3QgZGVsYXkgZHJvcHBpbmcgdGhlIHBpbiB1bnRpbCB2aXNpYmlsaXR5IGlzIHJlc29sdmVk IGZvciBhbGwgaXRlbXMgaW4KKyAqIHRoZSBiYXRjaCwgc28gd2UgbWF5IG5lZWQgdG8gcmVsZWFz ZSB0aGUgcGluIGhlcmUuICBGb3Igbm9uLU1WQ0Mgc25hcHNob3QKKyAqIHNjYW5zLCB0aGUgcGlu IGlzIGFsd2F5cyBoZWxkIHVudGlsIHRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgaXQuCisgKgorICog V2hlbiB0aGUgYmF0Y2ggaGFzIGRlYWQgaXRlbXMgKG51bURlYWQgPiAwKSBhbmQgdGhlIGluZGV4 IEFNIHByb3ZpZGVzIGFuCisgKiBhbWtpbGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3ZSBjYWxsIGl0 IHRvIHNldCBMUF9ERUFEIGJpdHMgaW4gdGhlIGluZGV4CisgKiBwYWdlLiAgV2UgYWx3YXlzIHJl Y3ljbGUgdGhlIGJhdGNoIG1lbW9yeSB2aWEgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuCisg KgorICogTm90ZTogQ2FsbGluZyBoZXJlIHdoZW4gJ2JhdGNoJyBpcyBhbHNvIGJhdGNocmluZ2J1 Zi5tYXJrQmF0Y2ggaXMgYSBuby1vcC4KKyAqIENhbGxlcnMgdGhhdCBkb24ndCB3YW50IHRoaXMg c2hvdWxkIHNldCBiYXRjaHJpbmdidWYubWFya0JhdGNoIHRvIE5VTEwKKyAqIGJlZm9yZSBjYWxs aW5nIHVzLiAgTm90ZSB0aGF0IG1hcmtCYXRjaCBoYXMgdG8gYmUgZXhwbGljaXRseSBmcmVlZC4K KyAqLwordm9pZAordGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlBc3NlcnQoQnVmZmVySXNWYWxpZChiYXRjaC0+YnVm KSB8fCBzY2FuLT5NVkNDU2Nhbik7CisKKwkvKiBkb24ndCBmcmVlIGNhbGxlcidzIGJhdGNoIGlm IGl0IGlzIHNjYW4ncyBjdXJyZW50IG1hcmtCYXRjaCAqLworCWlmIChiYXRjaCA9PSBzY2FuLT5i YXRjaHJpbmdidWYubWFya0JhdGNoKQorCQlyZXR1cm47CisKKwlpZiAoQnVmZmVySXNWYWxpZChi YXRjaC0+YnVmKSkKKwl7CisJCS8qIHRhYmxlIEFNIGRpZG4ndCB1bnBpbiBwYWdlIGVhcmxpZXIg LS0gZG8gaXQgbm93ICovCisJCUFzc2VydCghc2Nhbi0+TVZDQ1NjYW4gfHwgc2Nhbi0+eHNfd2Fu dF9pdHVwKTsKKworCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCQliYXRjaC0+YnVmID0g SW52YWxpZEJ1ZmZlcjsKKwl9CisKKwkvKgorCSAqIExldCB0aGUgaW5kZXggQU0gc2V0IExQX0RF QUQgYml0cyBpbiB0aGUgaW5kZXggcGFnZSwgaWYgYXBwbGljYWJsZS4KKwkgKgorCSAqIGJhdGNo LmRlYWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5lZCBp dGVtcyBpbi4KKwkgKiBXZSBtaWdodCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQg dHdpY2UuCisJICoKKwkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5IGRlYWRJdGVtc1tdLiAgVGhhdCB3 YXkgdGhlIGluZGV4IEFNIGNhbiBzYWZlbHkKKwkgKiBhc3N1bWUgdGhhdCBpdGVtcyB3aWxsIGFs d2F5cyBiZSBpbiB0aGVpciBvcmlnaW5hbCBpbmRleCBwYWdlIG9yZGVyLgorCSAqLworCWlmIChi YXRjaC0+bnVtRGVhZCA+IDAgJiYKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt a2lsbGl0ZW1zYmF0Y2ggIT0gTlVMTCkKKwl7CisJCWlmIChiYXRjaC0+bnVtRGVhZCA+IDEpCisJ CXsKKwkJCXFzb3J0KGJhdGNoLT5kZWFkSXRlbXMsIGJhdGNoLT5udW1EZWFkLCBzaXplb2YoaW50 KSwKKwkJCQkgIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJCWJhdGNoLT5udW1EZWFkID0gcXVuaXF1 ZShiYXRjaC0+ZGVhZEl0ZW1zLCBiYXRjaC0+bnVtRGVhZCwKKwkJCQkJCQkJCSBzaXplb2YoaW50 KSwgYmF0Y2hfY29tcGFyZV9pbnQpOworCQl9CisKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRf aW5kYW0tPmFta2lsbGl0ZW1zYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJICogVXNl IGNhY2hlLCBqdXN0IGxpa2UgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UgZG9lcyBpdC4KKwkg Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQor CXsKKwkJaWYgKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXSA9PSBOVUxMKQorCQl7CisJCQkv KiBmb3VuZCBlbXB0eSBzbG90LCB3ZSdyZSBkb25lICovCisJCQlzY2FuLT5iYXRjaHJpbmdidWYu Y2FjaGVbaV0gPSBiYXRjaDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlmIChiYXRjaC0+ZGVh ZEl0ZW1zKQorCQlwZnJlZShiYXRjaC0+ZGVhZEl0ZW1zKTsKKwlwZnJlZShiYXRjaF9hbGxvY19i YXNlKGJhdGNoLCBzY2FuKSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJdXRpbGl0eSBmdW5jdGlv bnMgY2FsbGVkIGJ5IGFtZ2V0YmF0Y2ggaW5kZXggQU1zCisgKgorICogVGhlc2UgZnVuY3Rpb25z IG1hbmFnZSBiYXRjaCBhbGxvY2F0aW9uLCB1bmxvY2svcGluIG1hbmFnZW1lbnQsIGFuZCBiYXRj aAorICogcmVzb3VyY2UgcmVjeWNsaW5nLiAgSW5kZXggQU1zIGltcGxlbWVudGluZyBhbWdldGJh dGNoIHNob3VsZCB1c2UgdGhlc2UKKyAqIHJhdGhlciB0aGFuIG1hbmFnaW5nIGJ1ZmZlcnMgZGly ZWN0bHkuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFVubG9jayBiYXRjaCdzIHNoYXJlZCBi dWZmZXIgbG9jaworICoKKyAqIFVubG9ja3MgY2FsbGVyJ3MgYmF0Y2gtPmJ1ZiBpbiBwcmVwYXJh dGlvbiBmb3IgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXRlbXMKKyAqIHNhdmVkIGluIHRoYXQgYmF0 Y2guICBQZXJmb3JtcyBleHRyYSBzdGVwcyByZXF1aXJlZCBieSBhbWdldGJhdGNoIGNhbGxlcnMK KyAqIGluIHBhc3NpbmcuCisgKgorICogT25seSBjYWxsIGhlcmUgd2hlbiBhIGJhdGNoIGhhcyBv bmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyB0byByZXR1cm4gdXNpbmcKKyAqIGFtZ2V0YmF0Y2gg KG9yIGZvciBhbWdldGJpdG1hcCB0byBsb2FkIGludG8gaXRzIGJpdG1hcCBvZiBtYXRjaGluZyBU SURzKS4KKyAqIFdoZW4gYW4gaW5kZXggcGFnZSBoYXMgbm8gbWF0Y2hlcywgaXQncyBhbHdheXMg c2FmZSBmb3IgaW5kZXggQU1zIHRvIGRyb3AKKyAqIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4g Zm9yIHRoZW1zZWx2ZXMuCisgKgorICogTm90ZTogSXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXgg QU1zIHRoYXQgaW1wbGVtZW50IGJvdGggYW1nZXRiYXRjaCBhbmQKKyAqIGFtZ2V0Yml0bWFwIHRv IGNvbnNpc3RlbnRseSB1c2UgdGhlIHNhbWUgYmF0Y2ggbWFuYWdlbWVudCBhcHByb2FjaCwgc2lu Y2UKKyAqIHRoYXQgYXZvaWRzIGludHJvZHVjaW5nIHNwZWNpYWwgY2FzZXMgdG8gbG93ZXItbGV2 ZWwgY29kZS4gIFdlIGRyb3AgYm90aAorICogdGhlIGxvY2sgYW5kIHRoZSBwaW4gb24gYmF0Y2gn cyBwYWdlIG9uIGJlaGFsZiBvZiBhbWdldGJpdG1hcCBjYWxsZXJzLgorICogU3VjaCBhbWdldGJp dG1hcCBjYWxsZXJzIG11c3QgYmUgY2FyZWZ1bCB0byBmcmVlIGFsbCBiYXRjaGVzIHdpdGggbWF0 Y2hpbmcKKyAqIGl0ZW1zIG9uY2UgdGhleSdyZSBkb25lIHNhdmluZyB0aGUgbWF0Y2hpbmcgVElE cy4gIFdlIG5ldmVyIGRyb3AgdGhlIHBpbgorICogZm9yIGFuIGFtZ2V0YmF0Y2ggY2FsbGVyLCB0 aG91Z2ggLS0gdGhhdCdzIHVwIHRvIHRoZSB0YWJsZSBBTS4KKyAqLwordm9pZAoraW5kZXhhbV91 dGlsX2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo KQoreworCS8qIGJhdGNoIG11c3QgaGF2ZSBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyByZXR1 cm5lZCBieSBpbmRleCBBTSAqLworCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtID49IDAgJiYgYmF0 Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCisJaWYgKHNjYW4tPnVzZWJhdGNo cmluZykKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggKG5vdCBhbWdldGJpdG1hcCkgY2FsbGVyICovCisJ CUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CisKKwkJLyoKKwkJICogSGF2ZSB0 byBzZXQgYmF0Y2gtPmxzbiBzbyB0aGF0IGFta2lsbGl0ZW1zYmF0Y2ggaGFzIGEgd2F5IHRvIGRl dGVjdAorCQkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBt aWdodCBoYXZlIHRha2VuCisJCSAqIHBsYWNlLiAgSXQnbGwgb25seSBiZSBzYWZlIHRvIHNldCBh bnkgaW5kZXggdHVwbGUgTFBfREVBRCBiaXRzIHdoZW4KKwkJICogdGhlIHBhZ2UgTFNOIGhhc24n dCBhZHZhbmNlZC4KKwkJICovCisJCWJhdGNoLT5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYmF0 Y2gtPmJ1Zik7CisKKwkJLyogRHJvcCB0aGUgbG9jayAqLworCQlMb2NrQnVmZmVyKGJhdGNoLT5i dWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKyNpZmRlZiBVU0VfVkFMR1JJTkQKKwkJaWYgKCFS ZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMoc2Nhbi0+aW5kZXhSZWxhdGlvbikpCisJCQlWQUxHUklO RF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNoLT5idWYpLCBCTENLU1opOwor I2VuZGlmCisKKwkJLyogdGFibGUgQU0gZGV0ZXJtaW5lcyB3aGVuIGl0J2xsIGJlIHNhZmUgdG8g ZHJvcCBwaW5zIG9uIGJhdGNoZXMgKi8KKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAg KG5vdCBhbWdldGJhdGNoKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9 PSBOVUxMKTsKKworCQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJTG9j a0J1ZmZlcihiYXRjaC0+YnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisjaWZkZWYgVVNFX1ZB TEdSSU5ECisJCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHNjYW4tPmluZGV4UmVsYXRp b24pKQorCQkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShiYXRjaC0+ YnVmKSwgQkxDS1NaKTsKKyNlbmRpZgorCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCQli YXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5l dyBiYXRjaAorICoKKyAqIFVzZWQgYnkgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCBhbWdldGJhdGNo IGludGVyZmFjZSAoYm90aCBkdXJpbmcgYW1nZXRiYXRjaAorICogYW5kIGFtZ2V0Yml0bWFwIHNj YW5zKS4KKyAqCisgKiBSZXR1cm5zIEluZGV4U2NhbkJhdGNoIHdpdGggc3BhY2UgdG8gZml0IHNj YW4tPm1heGl0ZW1zYmF0Y2gtbWFueQorICogQmF0Y2hNYXRjaGluZ0l0ZW0gZW50cmllcy4gIFRo aXMgd2lsbCBlaXRoZXIgYmUgYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2gsIG9yCisgKiBhIGJhdGNo IHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlIG1hbmFnZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX3Jl bGVhc2UuICBTZWUKKyAqIGNvbW1lbnRzIGFib3ZlIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNl LgorICoKKyAqIEhvdXNla2VlcGluZyBmaWVsZHMgKGJ1Ziwga25vd25FbmRCYWNrd2FyZC9Gb3J3 YXJkLCBmaXJzdEl0ZW0sIGxhc3RJdGVtLAorICogbnVtRGVhZCwgZGVhZEl0ZW1zLCBjdXJyVHVw bGVzKSBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4gIFRoZSB0YWJsZSBBTSdzCisgKiBiYXRjaF9pbml0 IGNhbGxiYWNrIGlzIGludm9rZWQgaGVyZSB0byBpbml0aWFsaXplIHRoZSB0YWJsZSBBTSBvcGFx dWUgYXJlYS4KKyAqIFRoZSBpbmRleCBBTSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxp bmcgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUKKyAqIGZpZWxkcyBhbmQgdGhlIG1hdGNoaW5nIGl0 ZW1zW10gYXJyYXkuCisgKgorICogT25jZSBwb3B1bGF0ZWQsIGNhbGxlciBlaXRoZXIgcGFzc2Vz IHRoZSBiYXRjaCB0byBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrCisgKiAoYWhlYWQgb2YgYW1n ZXRiYXRjaCByZXR1cm5pbmcgaXQpLCBvciB0byBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZSAo d2hlbgorICogdGhlIHBhZ2UgaGFkIG5vIG1hdGNoZXMpLgorICovCitJbmRleFNjYW5CYXRjaAor aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlJbmRleFNj YW5CYXRjaCBiYXRjaCA9IE5VTEw7CisJYm9vbAkJbmV3X2FsbG9jID0gZmFsc2U7CisKKwkvKgor CSAqIExhemlseSBjb21wdXRlIGJhdGNoX3RhYmxlX29mZnNldCBvbiBmaXJzdCBhbGxvY2F0aW9u LiAgVGhpcyBjb21iaW5lcworCSAqIHRoZSB0YWJsZSBBTSBhbmQgaW5kZXggQU0gb3BhcXVlIHNp emVzIGludG8gYSBzaW5nbGUgb2Zmc2V0IHRoYXQgY2FuIGJlCisJICogdXNlZCB0byBmaW5kIHRo ZSB0YWJsZSBBTSBvcGFxdWUgYXJlYSAoYW5kIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFzZSkKKwkg KiBmcm9tIHRoZSBiYXRjaCBwb2ludGVyLgorCSAqLworCWlmIChzY2FuLT5iYXRjaF90YWJsZV9v ZmZzZXQgPT0gMCAmJgorCQkoc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPiAwIHx8CisJ CSAoc2Nhbi0+eHNfaGVhcGZldGNoICYmIHNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hfb3BhcXVl X3NpemUgPiAwKSkpCisJeworCQl1aW50MTYJCXRhYmxlX29wYXF1ZSA9IHNjYW4tPnhzX2hlYXBm ZXRjaCA/CisJCQlzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX29wYXF1ZV9zaXplIDogMDsKKwor CQlzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQgPSB0YWJsZV9vcGFxdWUgKworCQkJc2Nhbi0+YmF0 Y2hfaW5kZXhfb3BhcXVlX3NpemU7CisJfQorCisJLyogRmlyc3QgbG9vayBmb3IgYW4gZXhpc3Rp bmcgYmF0Y2ggZnJvbSB0aGUgY2FjaGUgKi8KKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsK KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwkJ eworCQkJaWYgKHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXSAhPSBOVUxMKQorCQkJeworCQkJ CS8qIFJldHVybiBjYWNoZWQgdW5yZWZlcmVuY2VkIGJhdGNoICovCisJCQkJYmF0Y2ggPSBzY2Fu LT5iYXRjaHJpbmdidWYuY2FjaGVbaV07CisJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ld ID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwllbHNlIGlmIChzY2FuLT54c19i aXRtYXBfYmF0Y2ggIT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFJldXNlIGNhY2hlZCBiYXRjaCBm cm9tIHByaW9yIGFtZ2V0Yml0bWFwIGl0ZXJhdGlvbi4gIFRoaXMgcGF0aCBpcworCQkgKiBoaXQg b24gZXZlcnkgYW1nZXRiaXRtYXAgY2FsbCBoZXJlIGFmdGVyIHRoZSBzY2FuJ3MgZmlyc3QuCisJ CSAqLworCQliYXRjaCA9IHNjYW4tPnhzX2JpdG1hcF9iYXRjaDsKKwkJc2Nhbi0+eHNfYml0bWFw X2JhdGNoID0gTlVMTDsKKwl9CisKKwlpZiAoIWJhdGNoKQorCXsKKwkJU2l6ZQkJcHJlZml4X3N6 OworCQlTaXplCQliYXNlX3N6OworCQlTaXplCQl0cmFpbGluZ19zejsKKwkJU2l6ZQkJYWxsb2Nz ejsKKwkJY2hhcgkgICAqcmF3OworCisjaWZkZWYgQkFUQ0hfQ0FDSEVfREVCVUcKKwkJc2Nhbi0+ YmF0Y2hyaW5nYnVmLmNhY2hlTWlzc2VzKys7CisjZW5kaWYKKworCQkvKiBBTSBvcGFxdWUgYXJl YXMgYmVmb3JlIHRoZSBiYXRjaCBwb2ludGVyICovCisJCXByZWZpeF9zeiA9IHNjYW4tPmJhdGNo X3RhYmxlX29mZnNldDsKKworCQkvKiBJbmRleFNjYW5CYXRjaERhdGEgaGVhZGVyICsgaXRlbXNb XSAqLworCQliYXNlX3N6ID0gb2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKwor CQkJc2l6ZW9mKEJhdGNoTWF0Y2hpbmdJdGVtKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2g7CisKKwkJ LyoKKwkJICogVHJhaWxpbmcgZGF0YSBhZnRlciBpdGVtc1tdOiB0YWJsZSBBTSBwZXItaXRlbSBk YXRhIChlLmcuIHZpc0luZm8pCisJCSAqIGFuZCBjdXJyVHVwbGVzIGluZGV4IEFNIHR1cGxlIHdv cmtzcGFjZS4KKwkJICovCisJCXRyYWlsaW5nX3N6ID0gMDsKKwkJaWYgKHNjYW4tPnhzX3dhbnRf aXR1cCkKKwkJeworCQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCAmJgorCQkJCXNjYW4tPnhzX2hl YXBmZXRjaC0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSA+IDApCisJCQkJdHJhaWxpbmdfc3ogKz0gTUFY QUxJR04oc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplICoKKwkJCQkJCQkJ CQlzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCXRyYWlsaW5nX3N6ICs9IHNjYW4tPmJhdGNoX3R1 cGxlc193b3Jrc3BhY2U7CisJCX0KKworCQlhbGxvY3N6ID0gcHJlZml4X3N6ICsgTUFYQUxJR04o YmFzZV9zeikgKyB0cmFpbGluZ19zejsKKwkJcmF3ID0gcGFsbG9jKGFsbG9jc3opOworCQliYXRj aCA9IChJbmRleFNjYW5CYXRjaCkgKHJhdyArIHByZWZpeF9zeik7CisKKwkJLyogU2V0IHVwIGN1 cnJUdXBsZXMgcG9pbnRlciBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQlpZiAoc2Nhbi0+eHNf d2FudF9pdHVwICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwKQorCQl7CisJCQlT aXplCQlpdGVtc0VuZCA9IE1BWEFMSUdOKGJhc2Vfc3opOworCQkJU2l6ZQkJdGFibGVUcmFpbGlu ZyA9IDA7CisKKwkJCWlmIChzY2FuLT54c19oZWFwZmV0Y2ggJiYKKwkJCQlzY2FuLT54c19oZWFw ZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgPiAwKQorCQkJCXRhYmxlVHJhaWxpbmcgPSBNQVhB TElHTihzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgKgorCQkJCQkJCQkJ CSBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gKGNoYXIgKikg YmF0Y2ggKyBpdGVtc0VuZCArIHRhYmxlVHJhaWxpbmc7CisJCX0KKwkJZWxzZQorCQkJYmF0Y2gt PmN1cnJUdXBsZXMgPSBOVUxMOworCisJCS8qCisJCSAqIEJhdGNoZXMgYWxsb2NhdGUgZGVhZEl0 ZW1zIGxhemlseSAodGhvdWdoIG5vdGUgdGhhdCBjYWNoZWQgYmF0Y2hlcworCQkgKiBrZWVwIHRo ZWlyIGRlYWRJdGVtcyBhbGxvY2F0aW9uIHdoZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+ ZGVhZEl0ZW1zID0gTlVMTDsKKwkJbmV3X2FsbG9jID0gdHJ1ZTsKKwl9CisKKwkvKiB4c193YW50 X2l0dXAgc2NhbnMgbXVzdCBnZXQgYSBjdXJyVHVwbGVzIHNwYWNlICovCisJQXNzZXJ0KCEoc2Nh bi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwICYmCisJ CQkgYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCkpOworCisJLyogTGV0IHRoZSB0YWJsZSBBTSBp bml0aWFsaXplIGl0cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgKi8KKwlpZiAoc2Nhbi0+eHNfaGVh cGZldGNoKQorCQl0YWJsZV9pbmRleF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLCBuZXdfYWxsb2Mp OworCisJLyogc2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJYmF0Y2gtPmJ1ZiA9IEludmFsaWRC dWZmZXI7CisJYmF0Y2gtPmtub3duRW5kQmFja3dhcmQgPSBmYWxzZTsKKwliYXRjaC0+a25vd25F bmRGb3J3YXJkID0gZmFsc2U7CisJYmF0Y2gtPmZpcnN0SXRlbSA9IC0xOworCWJhdGNoLT5sYXN0 SXRlbSA9IC0xOworCWJhdGNoLT5udW1EZWFkID0gMDsKKworCXJldHVybiBiYXRjaDsKK30KKwor LyoKKyAqIFJlbGVhc2UgYWxsb2NhdGVkIGJhdGNoCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQgYnkgaW5kZXggQU1zIHRvIHJlbGVhc2UgYSBiYXRjaCBhbGxvY2F0ZWQgYnkKKyAqIGlu ZGV4YW1fdXRpbF9iYXRjaF9hbGxvYy4gIEJhdGNoZXMgYXJlIGNhY2hlZCBoZXJlIGZvciByZXVz ZSAod2hlbiBzY2FuCisgKiBoYXNuJ3QgYWxyZWFkeSBmaW5pc2hlZCkgdG8gcmVkdWNlIHBhbGxv Yy9wZnJlZSBvdmVyaGVhZC4KKyAqCisgKiBJdCdzIHNhZmUgdG8gcmVsZWFzZSBhIGJhdGNoIGlt bWVkaWF0ZWx5IHdoZW4gaXQgd2FzIHVzZWQgdG8gcmVhZCBhIHBhZ2UKKyAqIHRoYXQgcmV0dXJu ZWQgbm8gbWF0Y2hlcyB0byB0aGUgc2Nhbi4gIEJhdGNoZXMgYWN0dWFsbHkgcmV0dXJuZWQgYnkg aW5kZXgKKyAqIEFNJ3MgYW1nZXRiYXRjaCByb3V0aW5lIChpLmUuIGJhdGNoZXMgZm9yIHBhZ2Vz IHdpdGggb25lIG9yIG1vcmUgbWF0Y2hlcykKKyAqIG11c3QgYmUgcmVsZWFzZWQgYnkgdGFibGVh bV91dGlsX2ZyZWVfYmF0Y2gsIHdoaWNoIGNhbGxzIGhlcmUgYWZ0ZXIgdGhlCisgKiBpbmRleCBB TSdzIGFta2lsbGl0ZW1zYmF0Y2ggcm91dGluZSAoaWYgYW55KS4gIEluZGV4IEFNcyB0aGF0IHVz ZSBiYXRjaGVzCisgKiBzaG91bGQgY2FsbCBoZXJlIHRvIHJlbGVhc2UgYSBiYXRjaCBmcm9tIHRo ZWlyIGFtZ2V0YmF0Y2ggb3IgYW1nZXRiaXRtYXAKKyAqIHJvdXRpbmVzLgorICoKKyAqIFRoZSBy dWxlcyBmb3IgYmF0Y2ggb3duZXJzaGlwIGRpZmZlciBzbGlnaHRseSBmb3IgYW1nZXRiaXRtYXAg c2NhbnM7IHNlZQorICogdGhlIGFtZ2V0Yml0bWFwIGRvY3VtZW50YXRpb24gaW4gZG9jL3NyYy9z Z21sL2luZGV4YW0uc2dtbCBmb3IgZGV0YWlscy4KKyAqLwordm9pZAoraW5kZXhhbV91dGlsX2Jh dGNoX3JlbGVhc2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sK KwlBc3NlcnQoYmF0Y2gtPmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKTsKKworCWlmIChzY2FuLT51c2Vi YXRjaHJpbmcpCisJeworCQkvKiBhbWdldGJhdGNoIHNjYW4gY2FsbGVyICovCisJCUFzc2VydChz Y2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7CisKKwkJaWYgKHNjYW4tPmJhdGNocmluZ2J1Zi5k b25lKQorCQl7CisJCQkvKiBEb24ndCBib3RoZXIgdXNpbmcgY2FjaGUgd2hlbiBzY2FuIGlzIGVu ZGluZyAqLworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFVzZSBjYWNoZS4gIFRoaXMg aXMgZ2VuZXJhbGx5IG9ubHkgYmVuZWZpY2lhbCB3aGVuIHRoZXJlIGFyZQorCQkJICogbWFueSBz bWFsbCByZXNjYW5zIG9mIGFuIGluZGV4LgorCQkJICovCisJCQlmb3IgKGludCBpID0gMDsgaSA8 IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQkJeworCQkJCWlmIChzY2FuLT5iYXRj aHJpbmdidWYuY2FjaGVbaV0gPT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qIGZvdW5kIGVtcHR5IHNs b3QsIHdlJ3JlIGRvbmUgKi8KKwkJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldID0gYmF0 Y2g7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBGYWlsZWQg dG8gZmluZCBhIGZyZWUgc2xvdCBmb3IgdGhpcyBiYXRjaC4gIFdlJ2xsIGp1c3QgZnJlZSBpdAor CQkgKiBvdXJzZWx2ZXMuICBUaGlzIGlzbid0IHJlYWxseSBleHBlY3RlZDsgaXQncyBqdXN0IGRl ZmVuc2l2ZS4KKwkJICovCisJCWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQkJcGZyZWUoYmF0Y2gt PmRlYWRJdGVtcyk7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIGFtZ2V0Yml0bWFwIHNjYW4g Y2FsbGVyLgorCQkgKgorCQkgKiBhbWdldGJpdG1hcCByb3V0aW5lcyBhcmUgcmVxdWlyZWQgdG8g YWxsb2NhdGUgbm8gbW9yZSB0aGFuIG9uZQorCQkgKiBiYXRjaCBhdCBhIHRpbWUsIHNvIHdlJ2xs IGFsd2F5cyBoYXZlIGEgZnJlZSBzbG90LgorCQkgKi8KKwkJQXNzZXJ0KHNjYW4tPnhzX2JpdG1h cF9iYXRjaCA9PSBOVUxMKTsKKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsK KwkJQXNzZXJ0KGJhdGNoLT5kZWFkSXRlbXMgPT0gTlVMTCk7CisJCUFzc2VydChiYXRjaC0+Y3Vy clR1cGxlcyA9PSBOVUxMKTsKKworCQlzY2FuLT54c19iaXRtYXBfYmF0Y2ggPSBiYXRjaDsKKwkJ cmV0dXJuOworCX0KKworCS8qIG5vIGZyZWUgc2xvdCB0byBzYXZlIHRoaXMgYmF0Y2ggKGV4cGVj dGVkIHdpdGggYW1nZXRiaXRtYXAgY2FsbGVycykgKi8KKwlwZnJlZShiYXRjaF9hbGxvY19iYXNl KGJhdGNoLCBzY2FuKSk7Cit9CisKKy8qCisgKiBxc29ydCBjb21wYXJpc29uIGZ1bmN0aW9uIGZv ciBpbnQgYXJyYXlzCisgKi8KK3N0YXRpYyBpbnQKK2JhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZv aWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sKKwlpbnQJCQlhID0gKigoY29uc3QgaW50ICopIHZh KTsKKwlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZiKTsKKworCXJldHVybiBwZ19jbXBfczMy KGEsIGIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1 aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCmluZGV4IGRhNjRjYjU5 NS4uODNkZmEzZjJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24u YnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCkBAIC01LDQg KzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhbXZhbGlkYXRlLmMnLAogICAn Z2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRjaC5jJywKICkKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9SRUFETUUKaW5kZXggY2I5MjFjYTJlLi5lNzU1NzdhN2UgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvUkVBRE1FCkBAIC0xNzksMTggKzE3OSwyMSBAQCBob2xkIG9uIHRvIHRoZSBwaW4gKHVz ZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGxlYWYgcGFnZSkgdW50aWwgX2FmdGVyXwogdGhleSdy ZSBkb25lIHZpc2l0aW5nIHRoZSBoZWFwIChmb3IgVElEcyBmcm9tIHBpbm5lZCBsZWFmIHBhZ2Up IHByZXZlbnRzCiBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBWQUNVVU0gY2Fubm90IGdldCBh IGNvbmZsaWN0aW5nIGNsZWFudXAgbG9jawogdW50aWwgdGhlIGluZGV4IHNjYW4gaXMgdG90YWxs eSBmaW5pc2hlZCBwcm9jZXNzaW5nIGl0cyBsZWFmIHBhZ2UuCitOb3RlIHRoYXQgdGhlIHRhYmxl IEFNIGRldGVybWluZXMgd2hlbiBhbmQgd2hlcmUgaW5kZXggcGFnZSBwaW5zIGFyZQorZHJvcHBl ZC4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgYW55IGluZGV4IEFNIHRoYXQgaW1wbGVtZW50cyB0aGUg YW1nZXRiYXRjaAoraW50ZXJmYWNlLiAgKFNlZSBhbHNvLCBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5z Z21sKS4KIAotVGhpcyBhcHByb2FjaCBpcyBmYWlybHkgY29hcnNlLCBzbyB3ZSBhdm9pZCBpdCB3 aGVuZXZlciBwb3NzaWJsZS4gIEluCi1wcmFjdGljZSBtb3N0IGluZGV4IHNjYW5zIHdvbid0IGhv bGQgb250byB0aGVpciBwaW4sIGFuZCBzbyB3b24ndCBibG9jawotVkFDVVVNLiAgVGhlc2UgaW5k ZXggc2NhbnMgbXVzdCBkZWFsIHdpdGggVElEIHJlY3ljbGluZyBkaXJlY3RseSwgd2hpY2ggaXMK LW1vcmUgY29tcGxpY2F0ZWQgYW5kIG5vdCBhbHdheXMgcG9zc2libGUuICBTZWUgbGF0ZXIgc2Vj dGlvbiBvbiBtYWtpbmcKLWNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgorQmxvY2tpbmcg VkFDVVVNIGxpa2UgdGhpcyBjYW4gYmUgZGlzcnVwdGl2ZSwgc28gdGFibGUgQU1zIGF2b2lkIGl0 IHdoZW5ldmVyCitwb3NzaWJsZS4gIFRoZSBoZWFwIHRhYmxlIEFNIHVzdWFsbHkgZHJvcHMgbGVh ZiBwYWdlIHBpbnMgcmlnaHQgYXdheSwgdGhvdWdoCitub3QgZHVyaW5nIHNjYW5zIHRoYXQgdXNl IGEgbm9uLU1WQ0Mgc25hcHNob3QuICBJbmRleC1vbmx5IHNjYW5zIG1heSBhbHNvCityZXRhaW4g cGlucyBpbiBzb21lIGNhc2VzLgogCi1PcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0aW9u IHBlcmZvcm1zIGFsbW9zdCB0aGUgc2FtZSBwYWdlLWxldmVsCi1tb2RpZmljYXRpb25zIHdoaWxl IG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMgc2FmZSBiZWNhdXNlCi10 aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFjZSBsYXRlciBv biAtLSBvbmx5IFZBQ1VVTQotY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxlLiAgU2VlIGFsc28gc2lt cGxlIGRlbGV0aW9uIGFuZCBib3R0b20tdXAKLWRlbGV0aW9uLCBiZWxvdy4KK09wcG9ydHVuaXN0 aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgdGhlIHNhbWUgcGFnZS1sZXZlbAorbW9k aWZpY2F0aW9ucyBhcyBWQUNVVU0sIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9j ay4gIFRoaXMgaXMKK3NhZmUgYmVjYXVzZSB0aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVj eWNsaW5nIHRha2luZyBwbGFjZSAtLSBvbmx5CitWQUNVVU0gY2FuIG1ha2UgVElEcyByZWN5Y2xh YmxlLiAgSW4gb3RoZXIgd29yZHMsIFZBQ1VVTSdzIGNsZWFudXAgbG9jaworc2VydmVzIHRvIHBy b3RlY3Qgbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMgZnJvbSBjb25jdXJyZW50IFRJRCByZWN5Y2xp bmcKK2hhemFyZHM7IGl0IGRvZXNuJ3QgcHJvdGVjdCB0aGUgQi1UcmVlIHN0cnVjdHVyZSBpdHNl bGYuCiAKIEJlY2F1c2UgYSBwaW4gaXMgbm90IGFsd2F5cyBoZWxkLCBhbmQgYSBwYWdlIGNhbiBi ZSBzcGxpdCBldmVuIHdoaWxlCiBzb21lb25lIGRvZXMgaG9sZCBhIHBpbiBvbiBpdCwgaXQgaXMg cG9zc2libGUgdGhhdCBhbiBpbmRleHNjYW4gd2lsbApAQCAtNDQ0LDQ0ICs0NDcsMjUgQEAgTWFr aW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIAogQXMgZXhwbGFpbmVkIGluIHRoZSBlYXJsaWVyIHNlY3Rpb24gYWJv dXQgZGVsZXRpbmcgaW5kZXggdHVwbGVzIGR1cmluZwotVkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBs b2NraW5nIHByb3RvY29sIHRoYXQgYWxsb3dzIGluZGl2aWR1YWwgaW5kZXggc2NhbnMKLXRvIGF2 b2lkIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIEluZGV4IHNjYW5zIG9wdC1vdXQgKGFuZCBz byBkcm9wIHRoZWlyCi1sZWFmIHBhZ2UgcGluIHdoZW4gdmlzaXRpbmcgdGhlIGhlYXApIHdoZW5l dmVyIGl0J3Mgc2FmZSB0byBkbyBzbywgdGhvdWdoLgotRHJvcHBpbmcgdGhlIHBpbiBlYXJseSBp cyB1c2VmdWwgYmVjYXVzZSBpdCBhdm9pZHMgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkKLVZBQ1VVTS4g IFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3aXRoIGluZGV4IHNjYW5zIHVzZWQgYnkg Y3Vyc29ycywKLXNpbmNlIGlkbGUgY3Vyc29ycyBzb21ldGltZXMgc3RvcCBmb3IgcmVsYXRpdmVs eSBsb25nIHBlcmlvZHMgb2YgdGltZS4gIEluCi1leHRyZW1lIGNhc2VzLCBhIGNsaWVudCBhcHBs aWNhdGlvbiBtYXkgaG9sZCBvbiB0byBhbiBpZGxlIGN1cnNvcnMgZm9yCi1ob3VycyBvciBldmVu IGRheXMuICBCbG9ja2luZyBWQUNVVU0gZm9yIHRoYXQgbG9uZyBjb3VsZCBiZSBkaXNhc3Ryb3Vz LgorVkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3RvY29sIHRoYXQgaGVscHMgdGFi bGUgQU1zIGRlYWwgd2l0aCBUSUQKK3JlY3ljbGluZyBoYXphcmRzIGR1cmluZyBzY2FucyB0aGF0 IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LgogCiBJbmRleCBzY2FucyB0aGF0IGRvbid0IGhvbGQg b24gdG8gYSBidWZmZXIgcGluIGFyZSBwcm90ZWN0ZWQgYnkgaG9sZGluZyBhbgogTVZDQyBzbmFw c2hvdCBpbnN0ZWFkLiAgVGhpcyBtb3JlIGxpbWl0ZWQgaW50ZXJsb2NrIHByZXZlbnRzIHdyb25n IGFuc3dlcnMKIHRvIHF1ZXJpZXMsIGJ1dCBpdCBkb2VzIG5vdCBwcmV2ZW50IGNvbmN1cnJlbnQg VElEIHJlY3ljbGluZyBpdHNlbGYgKG9ubHkKIGhvbGRpbmcgb250byB0aGUgbGVhZiBwYWdlIHBp biB3aGlsZSBhY2Nlc3NpbmcgdGhlIGhlYXAgZW5zdXJlcyB0aGF0KS4KK0ZvciB0aGUgbW9zdCBw YXJ0LCBpdCBpcyB1cCB0byB0aGUgdGFibGUgQU0gdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElE CityZWN5Y2xpbmcgaGF6YXJkcy4gIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGRpcmVjdGx5IGNvbnNp ZGVyIHN1Y2ggaGF6YXJkcyB3aGVuCittYXJraW5nIGEga25vd24tZGVhZCBpbmRleCB0dXBsZSBM UF9ERUFELgogCi1JbmRleC1vbmx5IHNjYW5zIGNhbiBuZXZlciBkcm9wIHRoZWlyIGJ1ZmZlciBw aW4sIHNpbmNlIHRoZXkgYXJlIHVuYWJsZSB0bwotdG9sZXJhdGUgaGF2aW5nIGEgcmVmZXJlbmNl ZCBUSUQgYmVjb21lIHJlY3ljbGFibGUuICBJbmRleC1vbmx5IHNjYW5zCi10eXBpY2FsbHkganVz dCB2aXNpdCB0aGUgdmlzaWJpbGl0eSBtYXAgKG5vdCB0aGUgaGVhcCBwcm9wZXIpLCBhbmQgc28g d2lsbAotbm90IHJlbGlhYmx5IG5vdGljZSB0aGF0IGFueSBzdGFsZSBUSUQgcmVmZXJlbmNlIChm b3IgYSBUSUQgdGhhdCBwb2ludGVkCi10byBhIGRlYWQtdG8tYWxsIGhlYXAgaXRlbSBhdCBmaXJz dCkgd2FzIGNvbmN1cnJlbnRseSBtYXJrZWQgTFBfVU5VU0VEIGluCi10aGUgaGVhcCBieSBWQUNV VU0uICBUaGlzIGNvdWxkIGVhc2lseSBhbGxvdyBWQUNVVU0gdG8gc2V0IHRoZSB3aG9sZSBoZWFw Ci1wYWdlIHRvIGFsbC12aXNpYmxlIGluIHRoZSB2aXNpYmlsaXR5IG1hcCBpbW1lZGlhdGVseSBh ZnRlcndhcmRzLiAgQW4gTVZDQwotc25hcHNob3QgaXMgb25seSBzdWZmaWNpZW50IHRvIGF2b2lk IHByb2JsZW1zIGR1cmluZyBwbGFpbiBpbmRleCBzY2FucwotYmVjYXVzZSB0aGV5IG11c3QgYWNj ZXNzIGdyYW51bGFyIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZnJvbSB0aGUgaGVhcAotcHJvcGVy LiAgQSBwbGFpbiBpbmRleCBzY2FuIHdpbGwgZXZlbiByZWNvZ25pemUgTFBfVU5VU0VEIGl0ZW1z IGluIHRoZQotaGVhcCAoaXRlbXMgdGhhdCBjb3VsZCBiZSByZWN5Y2xlZCBidXQgaGF2ZW4ndCBi ZWVuIGp1c3QgeWV0KSBhcyAibm90Ci12aXNpYmxlIiAtLSBldmVuIHdoZW4gdGhlIGhlYXAgcGFn ZSBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbGwtdmlzaWJsZS4KLQotTFBfREVBRCBzZXR0aW5n IG9mIGluZGV4IHR1cGxlcyBieSB0aGUga2lsbF9wcmlvcl90dXBsZSBvcHRpbWl6YXRpb24KLShk ZXNjcmliZWQgaW4gZnVsbCBpbiBzaW1wbGUgZGVsZXRpb24sIGJlbG93KSBpcyBhbHNvIG1vcmUg Y29tcGxpY2F0ZWQgZm9yCi1pbmRleCBzY2FucyB0aGF0IGRyb3AgdGhlaXIgbGVhZiBwYWdlIHBp bnMuICBXZSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQKLUxQX0RFQUQtbWFya2luZyBhbnkgbmV3 IGluZGV4IHR1cGxlIHRoYXQgbG9va3MgbGlrZSBhIGtub3duLWRlYWQgaW5kZXgKLXR1cGxlIGJl Y2F1c2UgaXQgaGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBUSUQsIGZvbGxvd2luZyBjb25jdXJy ZW50IFRJRAotcmVjeWNsaW5nLiAgSXQncyBqdXN0IGFib3V0IHBvc3NpYmxlIHRoYXQgc29tZSBv dGhlciBzZXNzaW9uIGluc2VydGVkIGEKLW5ldywgdW5yZWxhdGVkIGluZGV4IHR1cGxlLCBvbiB0 aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNoIGhhcyB0aGUgc2FtZQotb3JpZ2luYWwgVElELiAgSXQg d291bGQgYmUgdG90YWxseSB3cm9uZyB0byBMUF9ERUFELXNldCB0aGlzIG5ldywKK1dlIG11c3Qg YXZvaWQgTFBfREVBRC1tYXJraW5nIGFueSBuZXcgaW5kZXggdHVwbGUgdGhhdCBsb29rcyBsaWtl IGEKK2tub3duLWRlYWQgaW5kZXggdHVwbGUgYmVjYXVzZSBpdCBoYXBwZW5zIHRvIHNoYXJlIHRo ZSBzYW1lIFRJRCwgZm9sbG93aW5nCitjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcuICBJdCdzIGp1 c3QgYWJvdXQgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIHNlc3Npb24KK2luc2VydGVkIGEgbmV3 LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUsIG9uIHRoZSBzYW1lIGxlYWYgcGFnZSwgd2hpY2ggaGFz IHRoZQorc2FtZSBvcmlnaW5hbCBUSUQuICBJdCB3b3VsZCBiZSB0b3RhbGx5IHdyb25nIHRvIExQ X0RFQUQtc2V0IHRoaXMgbmV3LAogdW5yZWxhdGVkIGluZGV4IHR1cGxlLgogCi1XZSBoYW5kbGUg dGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmluZyBhZmZlY3RlZCBp bmRleAorV2UgaGFuZGxlIHRoaXMgTFBfREVBRCBzZXR0aW5nIHJhY2UgY29uZGl0aW9uIGJ5IGhh dmluZyBhbGwgaW5kZXgKIHNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBjaGFu Z2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwKIGltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hlZCBi eSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KIGJ1ZmZlciBwaW4g d2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9ERUFE IGJpdHMKQEAgLTczNCw3ICs3MTgsNyBAQCBvZiByZWFkZXJzIGNvdWxkIHN0aWxsIG1vdmUgcmln aHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3QgY291cGxlCiBzYW1lLWxldmVsIGxvY2tzKSwgYnV0 IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRpdmUgaGVyZS4KIAogRHVyaW5nIHJlY292ZXJ5IGFs bCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGlnbm9yZV9raWxsZWRfdHVwbGVzID0gZmFsc2UKLWFu ZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90dXBsZS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBv bGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQX0RFQUQtbWFyayB0dXBsZXMuIFdlIGRvIHRoaXMg YmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9uIHRoZSBzdGFuZGJ5IHNlcnZlciBjYW4gYmUgb2xk ZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24gdGhlIHByaW1hcnkKIHNlcnZlciwgd2hpY2ggbWVh bnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBfREVBRCBldmVuIHdoZW4gdGhleSBhcmUKIHN0aWxs IHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdlIGRvbid0IFdBTCBsb2cgdHVwbGUgTFBfREVBRCBi aXRzLCBidXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggY2M5YzQ1ZGM0Li42 MTBlOTdhOTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0xMDM3LDYgKzEw MzcsOSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAqIExvY2sgaXMg YWNxdWlyZWQgd2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4uICBUaGlzIGlzIGxpa2UgYSBy YXcKICAqIExvY2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMgZXh0cmEgc3RlcHMgbmVlZGVk IGJ5IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6IGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgaGFz IHNpbWlsYXIgVmFsZ3JpbmQgYnVmZmVyIGxvY2sKKyAqIGluc3RydW1lbnRhdGlvbiwgd2hpY2gg d2UgcmVseSBvbiBoZXJlLgorICoKICAqIE5vdGU6IENhbGxlciBtYXkgbmVlZCB0byBjYWxsIF9i dF9jaGVja3BhZ2UoKSB3aXRoIGJ1ZiB3aGVuIHBpbiBvbiBidWYKICAqIHdhc24ndCBvcmlnaW5h bGx5IGFjcXVpcmVkIGluIF9idF9nZXRidWYoKSBvciBfYnRfcmVsYW5kZ2V0YnVmKCkuCiAgKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwppbmRleCAyYmExY2E2NjAuLjU2 NWMyNTAxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFn ZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpAQCAtMzIs NiArMzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBCVFJlYWRQYWdlU3RhdGUKIHsKIAkvKiBJbnB1dCBw YXJhbWV0ZXJzLCBzZXQgYnkgX2J0X3JlYWRwYWdlIGZvciBfYnRfY2hlY2trZXlzICovCiAJU2Nh bkRpcmVjdGlvbiBkaXI7CQkJLyogY3VycmVudCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVt YmVyIGN1cnJwYWdlOwkJLyogY3VycmVudCBwYWdlIGJlaW5nIHJlYWQgKi8KIAlPZmZzZXROdW1i ZXIgbWlub2ZmOwkJLyogTG93ZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCU9mZnNl dE51bWJlciBtYXhvZmY7CQkvKiBIaWdoZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwog CUluZGV4VHVwbGUJZmluYWx0dXA7CQkvKiBOZWVkZWQgYnkgc2NhbnMgd2l0aCBhcnJheSBrZXlz ICovCkBAIC02MywxNCArNjQsMTMgQEAgc3RhdGljIGJvb2wgX2J0X3NjYW5iZWhpbmRfY2hlY2tr ZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCQkgSW5k ZXhUdXBsZSBmaW5hbHR1cCk7CiBzdGF0aWMgYm9vbCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJICBJbmRleFR1cGxl IGZpbmFsdHVwKTsKLXN0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGlu dCBpdGVtSW5kZXgsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVw KTsKLXN0YXRpYyBpbnQJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50 IGl0ZW1JbmRleCwKLQkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9p bnRlckRhdGEgKmhlYXBUaWQsCi0JCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBp bmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1J bmRleCwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJCQkgICBJdGVt UG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpOworc3RhdGljIHZvaWQgX2J0X3NhdmVp dGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIg b2ZmbnVtLAorCQkJCQkJIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCk7CitzdGF0 aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50 IGl0ZW1JbmRleCwKKwkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9p bnRlckRhdGEgKnRhYmxlVGlkLAorCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBs ZU9mZnNldCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNj YW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJ CQkJCQkJCSAgIEl0ZW1Qb2ludGVyIHRhYmxlVGlkLCBpbnQgYmFzZU9mZnNldCk7CiBzdGF0aWMg 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 aW5kZXggc2NhbiB3aGVuIHNjYW4gaGFzIGFycmF5cykuCkBAIC0xMzEsMTEgKzEzMSwxMiBAQCBz dGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcgaXRlbXMgZm91bmQgb24gdGhl IHBhZ2UsIGZhbHNlIGlmIG5vbmUuCiAgKi8KIGJvb2wKLV9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJIGJv b2wgZmlyc3RwYWdlKQorX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggbmV3YmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJIE9mZnNldE51bWJlciBvZmZu dW0sIGJvb2wgZmlyc3RwYWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJU QmF0Y2hEYXRhICpidGJhdGNoID0gYnRfYmF0Y2hfZGF0YShuZXdiYXRjaCk7CiAJUGFnZQkJcGFn ZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBtaW5vZmY7CkBAIC0xNDQs MjMgKzE0NSwyMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAlib29sCQlhcnJheUtleXMsCiAJCQkJaWdu b3JlX2tpbGxlZF90dXBsZXMgPSBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlczsKIAlpbnQJCQlp dGVtSW5kZXgsCisJCQkJdHVwbGVPZmZzZXQgPSAwLAogCQkJCWluZG5hdHRzOwogCiAJLyogc2F2 ZSB0aGUgcGFnZS9idWZmZXIgYmxvY2sgbnVtYmVyLCBhbG9uZyB3aXRoIGl0cyBzaWJsaW5nIGxp bmtzICovCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0g QnVmZmVyR2V0UGFnZShuZXdiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUo cGFnZSk7Ci0Jc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihzby0+ Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7 Ci0Jc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKLQkvKiBkZWxheSBz ZXR0aW5nIHNvLT5jdXJyUG9zLmxzbiB1bnRpbCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4g Ki8KLQlwc3RhdGUuZGlyID0gc28tPmN1cnJQb3MuZGlyID0gZGlyOwotCXNvLT5jdXJyUG9zLm5l eHRUdXBsZU9mZnNldCA9IDA7CisJcHN0YXRlLmN1cnJwYWdlID0gYnRiYXRjaC0+Y3VyclBhZ2Ug PSBCdWZmZXJHZXRCbG9ja051bWJlcihuZXdiYXRjaC0+YnVmKTsKKwlidGJhdGNoLT5wcmV2UGFn ZSA9IG9wYXF1ZS0+YnRwb19wcmV2OworCWJ0YmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5idHBv X25leHQ7CisJcHN0YXRlLmRpciA9IG5ld2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkvKiBlaXRoZXIg bW9yZVJpZ2h0IG9yIG1vcmVMZWZ0IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0 ZXIpICovCi0JQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9z Lm1vcmVSaWdodCA6Ci0JCSAgIHNvLT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpID8gYnRiYXRjaC0+bW9yZVJpZ2h0IDogYnRiYXRjaC0+bW9y ZUxlZnQpOwogCUFzc2VydCghUF9JR05PUkUob3BhcXVlKSk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lz UGlubmVkKHNvLT5jdXJyUG9zKSk7CiAJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAogCS8q IGluaXRpYWxpemUgbG9jYWwgdmFyaWFibGVzICovCkBAIC0xODgsMTQgKzE4NiwxMiBAQCBfYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKIAl7CiAJCS8qIGFsbG93IG5leHQvcHJldiBwYWdlIHRvIGJlIHJlYWQgYnkg b3RoZXIgd29ya2VyIHdpdGhvdXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQ YWdlLAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3Jl bGVhc2Uoc2NhbiwgYnRiYXRjaC0+bmV4dFBhZ2UsIGJ0YmF0Y2gtPmN1cnJQYWdlKTsKIAkJZWxz ZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1cnJQb3MucHJldlBhZ2UsCi0J CQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShz Y2FuLCBidGJhdGNoLT5wcmV2UGFnZSwgYnRiYXRjaC0+Y3VyclBhZ2UpOwogCX0KIAotCVByZWRp Y2F0ZUxvY2tQYWdlKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90 KTsKKwlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHBzdGF0ZS5jdXJycGFnZSwgc2Nhbi0+eHNfc25h cHNob3QpOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7CkBAIC0yMTIs MTEgKzIwOCwxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNr a2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVs ZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3Vy clBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJCQkJYnRiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7 CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxf c2NhbikKLQkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJ CQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCV9idF9wYXJhbGxlbF9wcmlt c2Nhbl9zY2hlZHVsZShzY2FuLCBidGJhdGNoLT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxz ZTsKIAkJCQl9CiAJCQl9CkBAIC0yODAsMjYgKzI3NSwyNiBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJ CQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkpCiAJCQkJewogCQkJCQkvKiBSZW1lbWJl ciBpdCAqLwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsK KwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1 cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0J CQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8q IFNldCB1cCBwb3N0aW5nIGxpc3Qgc3RhdGUgKGFuZCByZW1lbWJlciBmaXJzdCBUSUQpICovCi0J CQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUlu ZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxl R2V0UG9zdGluZ04oaXR1cCwgMCksCi0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJCQkJCSAg aXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4Kys7CiAKIAkJCQkJLyogUmVtZW1i ZXIgYWxsIGxhdGVyIFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGlu dCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsgaSsrKQogCQkJCQl7Ci0J CQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9i dF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJ CQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0 KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQkJfQog CQkJCX0KQEAgLTMzOSwxMiArMzM0LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQl9CiAKIAkJaWYg KCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7 CisJCQlidGJhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4IDw9 IE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlz by0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1J bmRleCA9IDA7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSAwOworCQluZXdiYXRjaC0+bGFzdEl0 ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewpAQCAtMzYxLDExICszNTUsMTAgQEAg X2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNl dE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGly LCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmlt aXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZUxlZnQg PSBmYWxzZTsKKwkJCQkJYnRiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQ cmltU2NhbiA9IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJCQkJX2J0 X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1 cnJQb3MuY3VyclBhZ2UpOworCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNj YW4sIGJ0YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0K QEAgLTQ2NiwyNyArNDU5LDI3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCXsKIAkJCQkJLyogUmVt ZW1iZXIgaXQgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRl bUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1J bmRleCwgb2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJ ewogCQkJCQl1aW50MTYJCW5pdGVtcyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwKTsKLQkJ CQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyog U2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGxhc3QgVElEKSAqLwogCQkJ CQlpdGVtSW5kZXgtLTsKLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGlu Z2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlf YnRfc2V0dXBwb3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJ CQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBuaXRlbXMgLSAxKSwKLQkJCQkJCQkJ CQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCiAJCQkJCS8q IFJlbWVtYmVyIGFsbCBwcmlvciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8KIAkJCQkJ Zm9yIChpbnQgaSA9IG5pdGVtcyAtIDI7IGkgPj0gMDsgaS0tKQogCQkJCQl7CiAJCQkJCQlpdGVt SW5kZXgtLTsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVt LAorCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0s CiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJ dHVwbGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJfQogCQkJCX0KIAkJ CX0KQEAgLTUwMiwxMiArNDk1LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkgKiBiZSBmb3VuZCB0 aGVyZQogCQkgKi8KIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJc28tPmN1cnJQb3Mu bW9yZUxlZnQgPSBmYWxzZTsKKwkJCWJ0YmF0Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CiAKIAkJQXNz ZXJ0KGl0ZW1JbmRleCA+PSAwKTsKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRlbUluZGV4 OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOwotCQlz by0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsKKwkJbmV3YmF0 Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJbmV3YmF0Y2gtPmxhc3RJdGVtID0gTWF4VElE c1BlckJUcmVlUGFnZSAtIDE7CiAJfQogCiAJLyoKQEAgLTUyNCw3ICs1MTYsNyBAQCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKIAkgKi8KIAlBc3NlcnQoIXBzdGF0ZS5mb3JjZW5vbnJlcXVpcmVkKTsKIAotCXJl dHVybiAoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKKwly ZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3YmF0Y2gtPmxhc3RJdGVtKTsKIH0KIAog LyoKQEAgLTEwMjcsOTAgKzEwMTksOTEgQEAgX2J0X29wcG9kaXJfY2hlY2trZXlzKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIFNh dmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gKi8KKy8q IFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0 YXRpYyB2b2lkCi1fYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAot CQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkKK19idF9zYXZlaXRlbShJ bmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKKwkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7Ci0JQlRTY2FuUG9z SXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQogCUFzc2Vy dCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgIUJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cCkp OwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKLQljdXJySXRlbS0+aW5kZXhP ZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCW5ld2JhdGNoLT5pdGVtc1tp dGVtSW5kZXhdLnRhYmxlVGlkID0gaXR1cC0+dF90aWQ7CisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1J bmRleF0uaW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMp CiAJewogCQlTaXplCQlpdHVwc3ogPSBJbmRleFR1cGxlU2l6ZShpdHVwKTsKIAotCQljdXJySXRl bS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0JCW1lbWNweShz by0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6 KTsKLQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CisJ CW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0Owor CQltZW1jcHkobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAqdHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBz eik7CisJCSp0dXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOwogCX0KIH0KIAogLyoKICAq IFNldHVwIHN0YXRlIHRvIHNhdmUgVElEcy9pdGVtcyBmcm9tIGEgc2luZ2xlIHBvc3RpbmcgbGlz dCB0dXBsZS4KICAqCi0gKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRl bXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMKLSAqIHJldHVybmVkIHRvIHNjYW4gZmlyc3Qu ICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkCi0gKiBi ZSBzYXZlZCBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KKyAqIFNhdmVzIGFuIGlu ZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcyBy ZXR1cm5lZAorICogdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9y IHBvc3RpbmcgbGlzdCBzaG91bGQgYmUgc2F2ZWQKKyAqIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0 aW5naXRlbSgpLgogICoKLSAqIFJldHVybnMgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBz cGFjZSB0aGF0IG1haW4gdHVwbGUgaXMgc3RvcmVkIGF0IGlmCi0gKiBuZWVkZWQuCisgKiBSZXR1 cm5zIGJhc2VPZmZzZXQsIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBt YWluIHR1cGxlIGlzCisgKiBzdG9yZWQgYXQgaWYgbmVlZGVkLgogICovCiBzdGF0aWMgaW50Ci1f YnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZz ZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkgIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqaGVhcFRpZCwg SW5kZXhUdXBsZSBpdHVwKQorX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEluZGV4U2NhbkJhdGNoIG5l d2JhdGNoLCBpbnQgaXRlbUluZGV4LAorCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0 IEl0ZW1Qb2ludGVyRGF0YSAqdGFibGVUaWQsCisJCQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQg KnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7 CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNl dCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJaXRlbS0+dGFibGVUaWQgPSAqdGFi bGVUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlpZiAobmV3YmF0Y2gtPmN1 cnJUdXBsZXMpCiAJewogCQkvKiBTYXZlIGJhc2UgSW5kZXhUdXBsZSAodHJ1bmNhdGUgcG9zdGlu ZyBsaXN0KSAqLwogCQlJbmRleFR1cGxlCWJhc2U7CiAJCVNpemUJCWl0dXBzeiA9IEJUcmVlVHVw bGVHZXRQb3N0aW5nT2Zmc2V0KGl0dXApOwogCiAJCWl0dXBzeiA9IE1BWEFMSUdOKGl0dXBzeik7 Ci0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsK LQkJYmFzZSA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQpOworCQlpdGVtLT50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJYmFz ZSA9IChJbmRleFR1cGxlKSAobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAqdHVwbGVPZmZzZXQpOwog CQltZW1jcHkoYmFzZSwgaXR1cCwgaXR1cHN6KTsKIAkJLyogRGVmZW5zaXZlbHkgcmVkdWNlIHdv cmsgYXJlYSBpbmRleCB0dXBsZSBoZWFkZXIgc2l6ZSAqLwogCQliYXNlLT50X2luZm8gJj0gfklO REVYX1NJWkVfTUFTSzsKIAkJYmFzZS0+dF9pbmZvIHw9IGl0dXBzejsKLQkJc28tPmN1cnJQb3Mu bmV4dFR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKKwkJKnR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKIAot CQlyZXR1cm4gY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0OworCQlyZXR1cm4gaXRlbS0+dHVwbGVPZmZz ZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50 byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKKyAqIFNh dmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJl bnQgcG9zdGluZwogICogdHVwbGUuCiAgKgogICogQXNzdW1lcyB0aGF0IF9idF9zZXR1cHBvc3Rp bmdpdGVtcygpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBjdXJyZW50Ci0gKiBwb3N0aW5n IGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFsdWUgYXMgdHVwbGVPZmZz ZXQuCisgKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFs dWUgYXMgYmFzZU9mZnNldC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1fYnRfc2F2ZXBvc3Rp bmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51 bSwKLQkJCQkJSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KQorX2J0X3NhdmVw b3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKKwkJCQkJSXRlbVBvaW50ZXIgdGFibGVUaWQsIGludCBiYXNlT2Zmc2V0 KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1J bmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1J bmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1cnJJdGVtLT5pbmRl eE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT50YWJsZVRpZCA9ICp0YWJsZVRpZDsKKwlpdGVtLT5p bmRleE9mZnNldCA9IG9mZm51bTsKIAogCS8qCiAJICogSGF2ZSBpbmRleC1vbmx5IHNjYW5zIHJl dHVybiB0aGUgc2FtZSBiYXNlIEluZGV4VHVwbGUgZm9yIGV2ZXJ5IFRJRAogCSAqIHRoYXQgb3Jp Z2luYXRlcyBmcm9tIHRoZSBzYW1lIHBvc3RpbmcgbGlzdAogCSAqLwotCWlmIChzby0+Y3VyclR1 cGxlcykKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gdHVwbGVPZmZzZXQ7CisJaWYgKG5ld2Jh dGNoLT5jdXJyVHVwbGVzKQorCQlpdGVtLT50dXBsZU9mZnNldCA9IGJhc2VPZmZzZXQ7CiB9CiAK ICNkZWZpbmUgTE9PS19BSEVBRF9SRVFVSVJFRF9SRUNIRUNLUyAJMwpAQCAtMjgyMiwxMyArMjgx NSwxMyBAQCBuZXdfcHJpbV9zY2FuOgogCSAqIE5vdGU6IFdlIG1ha2UgYSBzb2Z0IGFzc3VtcHRp b24gdGhhdCB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiB3aWxsCiAJICogYWxzbyBiZSB1c2Vk IHdpdGhpbiBfYnRfbmV4dCwgd2hlbiBpdCBpcyBhc2tlZCB0byBzdGVwIG9mZiB0aGlzIHBhZ2Uu CiAJICogSXQgaXMgdXAgdG8gX2J0X25leHQgdG8gY2FuY2VsIHRoaXMgc2NoZWR1bGVkIHByaW1p dGl2ZSBpbmRleCBzY2FuCi0JICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8gYSBwYWdlIGluIHRoZSBk aXJlY3Rpb24gb3Bwb3NpdGUgY3VyclBvcy5kaXIuCisJICogd2hlbmV2ZXIgaXQgc3RlcHMgdG8g YSBwYWdlIGluIHRoZSBkaXJlY3Rpb24gb3Bwb3NpdGUgcHN0YXRlLT5kaXIuCiAJICovCiAJcHN0 YXRlLT5jb250aW51ZXNjYW4gPSBmYWxzZTsJLyogVGVsbCBfYnRfcmVhZHBhZ2Ugd2UncmUgZG9u ZS4uLiAqLwogCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwkvKiAuLi5idXQgY2FsbCBfYnRfZmly c3QgYWdhaW4gKi8KIAogCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQlfYnRfcGFyYWxsZWxf cHJpbXNjYW5fc2NoZWR1bGUoc2Nhbiwgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQlfYnRfcGFy YWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwgcHN0YXRlLT5jdXJycGFnZSk7CiAKIAkvKiBD YWxsZXIncyB0dXBsZSBkb2Vzbid0IG1hdGNoIHRoZSBuZXcgcXVhbCAqLwogCXJldHVybiBmYWxz ZTsKQEAgLTI5MTMsMTQgKzI5MDYsNiBAQCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzX2luY3JlbWVu dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCSAqIFJlc3RvcmUgdGhl IGFycmF5IGtleXMgdG8gdGhlIHN0YXRlIHRoZXkgd2VyZSBpbiBpbW1lZGlhdGVseSBiZWZvcmUg d2UKIAkgKiB3ZXJlIGNhbGxlZC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheXMgb25seSBl dmVyIHJhdGNoZXQgaW4gdGhlCiAJICogY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KLQkgKgotCSAq IFdpdGhvdXQgdGhpcywgc2NhbnMgY291bGQgb3Zlcmxvb2sgbWF0Y2hpbmcgdHVwbGVzIHdoZW4g dGhlIHNjYW4KLQkgKiBkaXJlY3Rpb24gZ2V0cyByZXZlcnNlZCBqdXN0IGJlZm9yZSBidGdldHR1 cGxlIHJ1bnMgb3V0IG9mIGl0ZW1zIHRvCi0JICogcmV0dXJuLCBidXQganVzdCBhZnRlciBfYnRf cmVhZHBhZ2UgcHJlcGFyZXMgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZQotCSAqIHNjYW4ncyBmaW5h bCBwYWdlIGluIHNvLT5jdXJyUG9zLiAgV2hlbiB3ZSdyZSBvbiB0aGUgZmluYWwgcGFnZSBpdCBp cwotCSAqIHR5cGljYWwgZm9yIHNvLT5jdXJyUG9zIHRvIGdldCBpbnZhbGlkYXRlZCBvbmNlIGJ0 Z2V0dHVwbGUgZmluYWxseQotCSAqIHJldHVybnMgZmFsc2UsIHdoaWNoJ2xsIGVmZmVjdGl2ZWx5 IGludmFsaWRhdGUgdGhlIHNjYW4ncyBhcnJheSBrZXlzLgotCSAqIFRoYXQgaGFzbid0IGhhcHBl bmVkIHlldCwgdGhvdWdoIC0tIGFuZCBpbiBnZW5lcmFsIGl0IG1heSBuZXZlciBoYXBwZW4uCiAJ ICovCiAJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgLWRpcik7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHJlZS5jCmluZGV4IDBkYTQ4YjQyYS4uYmYzOWQ3OGZkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMKQEAgLTE2MCwxMSArMTYwLDEyIEBAIGJ0aGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCQkuYW1hZGp1c3RtZW1iZXJzID0gYnRhZGp1c3RtZW1iZXJzLAogCQkuYW1iZWdp bnNjYW4gPSBidGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gYnRyZXNjYW4sCi0JCS5hbWdldHR1 cGxlID0gYnRnZXR0dXBsZSwKKwkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9 IGJ0Z2V0YmF0Y2gsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gYnRraWxsaXRlbXNiYXRjaCwKIAkJ LmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBidGVuZHNjYW4sCi0J CS5hbW1hcmtwb3MgPSBidG1hcmtwb3MsCi0JCS5hbXJlc3RycG9zID0gYnRyZXN0cnBvcywKKwkJ LmFtcG9zcmVzZXQgPSBidHBvc3Jlc2V0LAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IGJ0 ZXN0aW1hdGVwYXJhbGxlbHNjYW4sCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBidGluaXRwYXJh bGxlbHNjYW4sCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gYnRwYXJhbGxlbHJlc2NhbiwKQEAgLTIy MywxMyArMjI0LDEzIEBAIGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9v bCAqaXNudWxsLAogfQogCiAvKgotICoJYnRnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBs ZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQg YmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJvb2wKLWJ0Z2V0dHVwbGUoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitidGdldGJh dGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2NhbkRp cmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IHByaW9yYmF0Y2g7 CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOwogCkBAIC0yNDIsNDUgKzI0 MywyMCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CiAJCS8qCiAJCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBj YW4ganVzdCBhZHZhbmNlIGl0IGluCiAJCSAqIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBJ ZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsCi0JCSAqIF9idF9maXJzdCgpIHRvIGdl dCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KKwkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRo ZSBmaXJzdCBiYXRjaCBpbiB0aGUgc2Nhbi4KIAkJICovCi0JCWlmICghQlRTY2FuUG9zSXNWYWxp ZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKKwkJaWYgKGJh dGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9maXJzdChzY2FuLCBkaXIpOwogCQllbHNlCi0J CXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZp b3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwotCQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVw bGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdl J2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAqIHR1cGxlcyBhdCBvbmNlIHJpZ2h0IGJlZm9y ZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRoZQotCQkJCSAqIHRlc3QgZm9yIG51bUtpbGxl ZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lhOiBpZiB0aGUKLQkJCQkgKiBjYWxsZXIgcmV2 ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZQotCQkJCSAqIGl0 ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuIEl0J3Mgbm90IHdvcnRoCi0JCQkJ ICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNvIHdlIGRvbid0IGRldGVjdCBpdCwgYnV0IGlu c3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCi0JCQkJICovCi0J CQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCQlzby0+a2lsbGVkSXRlbXMgPSBw YWxsb2NfYXJyYXkoaW50LCBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJCQlpZiAoc28tPm51bUtp bGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVt S2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQkJfQorCQkJYmF0Y2ggPSBfYnRf bmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoKLQkJCSAqIE5vdyBjb250aW51ZSB0aGUg c2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2NhbiwgZGlyKTsKLQkJfQotCi0JCS8q IElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4uLiAqLwotCQlpZiAocmVzKQorCQkvKiBJ ZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4gKi8KKwkJaWYgKGJhdGNoKQogCQkJYnJl YWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdlIG5lZWQgYW5vdGhlciBwcmltaXRpdmUg aW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1BcnJheUtleXMgJiYgX2J0X3N0YXJ0X3By aW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4gcmVzOworCXJldHVybiBiYXRjaDsKIH0KIAogLyoK QEAgLTI5MCwzOCArMjY2LDQzIEBAIGludDY0CiBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNj YW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAlpbnQ2NAkJbnRpZHMgPSAw OwotCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CisJSXRlbVBvaW50ZXIgdGFibGVUaWQ7CiAKIAlBc3Nl cnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOwogCiAJLyogRWFjaCBsb29wIGl0ZXJhdGlv biBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuICovCiAJZG8KIAl7Ci0JCS8q IEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVwbGUgKi8KLQkJaWYgKF9idF9maXJzdChzY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8qIEZldGNoIHRoZSBmaXJzdCBiYXRjaCAqLworCQlp ZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkpCiAJCXsK LQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJaGVhcFRp ZCA9ICZzY2FuLT54c19oZWFwdGlkOwotCQkJdGJtX2FkZF90dXBsZXModGJtLCBoZWFwVGlkLCAx LCBmYWxzZSk7CisJCQlpbnQJCQlpdGVtSW5kZXggPSAwOworCisJCQkvKiBTYXZlIGZpcnN0IHR1 cGxlJ3MgVElEICovCisJCQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJs ZVRpZDsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJCW50 aWRzKys7CiAKIAkJCWZvciAoOzspCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRvIG5l eHQgdHVwbGUgd2l0aGluIHBhZ2UuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZQotCQkJCSAqIGVh c3kgY2FzZSBpbiBfYnRfbmV4dCgpLgotCQkJCSAqLwotCQkJCWlmICgrK3NvLT5jdXJyUG9zLml0 ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4dCBU SUQgd2l0aGluIHBhZ2Utc2l6ZWQgYmF0Y2ggKi8KKwkJCQlpZiAoKytpdGVtSW5kZXggPiBiYXRj aC0+bGFzdEl0ZW0pCiAJCQkJewotCQkJCQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxp ZnRpbmcgKi8KLQkJCQkJaWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikp CisJCQkJCS8qCisJCQkJCSAqIF9idF9uZXh0IHJlbGVhc2VzIHRoZSBwcmlvciBiYXRjaCBmb3Ig Yml0bWFwIGNhbGxlcnMKKwkJCQkJICogYmVmb3JlIGFsbG9jYXRpbmcgdGhlIG5leHQgb25lLCBz byBvbmx5IG9uZSBiYXRjaCBpcworCQkJCQkgKiBldmVyIHVzZWQgYXQgYSB0aW1lCisJCQkJCSAq LworCQkJCQlpdGVtSW5kZXggPSAwOworCQkJCQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJCQkJCWlmICghYmF0Y2gpCiAJCQkJCQlicmVhazsK IAkJCQl9CiAKLQkJCQkvKiBTYXZlIHR1cGxlIElELCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8K LQkJCQloZWFwVGlkID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0u aGVhcFRpZDsKLQkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKKwkJ CQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZDsKKwkJCQl0Ym1f YWRkX3R1cGxlcyh0Ym0sIHRhYmxlVGlkLCAxLCBmYWxzZSk7CiAJCQkJbnRpZHMrKzsKIAkJCX0K IAkJfQpAQCAtMzQ4LDggKzMyOSw2IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2UgKi8K IAlzbyA9IHBhbGxvY19vYmplY3QoQlRTY2FuT3BhcXVlRGF0YSk7Ci0JQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7CiAJ aWYgKHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCXNvLT5rZXlEYXRhID0gKFNjYW5LZXkpIHBh bGxvYyhzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKIAllbHNlCkBA IC0zNjMsMTkgKzM0MiwxMSBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywg aW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQcm9jcyA9IE5VTEw7CiAJc28tPmFycmF5Q29udGV4 dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxMOwkJLyogdW50aWwgbmVlZGVkICov Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdlIGRvbid0IGtub3cgeWV0IHdoZXRo ZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5LCBzbyB3ZSBkbyBub3QKLQkgKiBhbGxvY2F0 ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1bnRpbCBidHJlc2Nhbi4gIEhvd2V2ZXIsIHdl IHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBkZXNjIHdoZXRoZXIgd2UnbGwgbmVlZCBpdCBvciBu b3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4KLQkgKi8KLQlzby0+Y3VyclR1cGxlcyA9IHNvLT5t YXJrVHVwbGVzID0gTlVMTDsKLQotCXNjYW4tPnhzX2l0dXBkZXNjID0gUmVsYXRpb25HZXREZXNj cihyZWwpOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxh dGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+bWF4aXRlbXNiYXRjaCA9IE1heFRJRHNQZXJCVHJl ZVBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSBNQVhBTElHTihzaXplb2Yo QlRCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gQkxDS1NaOwog CiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zODksNjQgKzM2MCwxNTUgQEAgYnRyZXNjYW4oSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiB7CiAJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0 IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYg KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcg Y3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51 bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklm UGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7 Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBwaW5z IGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhpcyBhdm9pZHMgbWFraW5nIFZBQ1VV TSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBhZ2UuCi0JICoKLQkgKiBX ZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5nIGluZGV4LW9ubHkgc2Nh bnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcg cGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBs YWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCi0JICoKLQkgKiBB bHNvIG9wdCBvdXQgb2YgZHJvcHBpbmcgbGVhZiBwYWdlIHBpbnMgZWFnZXJseSBkdXJpbmcgYml0 bWFwIHNjYW5zLgotCSAqIFBpbnMgY2Fubm90IGJlIGhlbGQgZm9yIG1vcmUgdGhhbiBhbiBpbnN0 YW50IGR1cmluZyBiaXRtYXAgc2NhbnMgZWl0aGVyCi0JICogd2F5LCBzbyB3ZSBtaWdodCBhcyB3 ZWxsIGF2b2lkIHdhc3RpbmcgY3ljbGVzIG9uIGFjcXVpcmluZyBwYWdlIExTTnMuCi0JICoKLQkg KiBTZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIG9uIG1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5 Y2xpbmcgc2FmZS4KLQkgKgotCSAqIE5vdGU6IHNvLT5kcm9wUGluIHNob3VsZCBuZXZlciBjaGFu Z2UgYWNyb3NzIHJlc2NhbnMuCi0JICovCi0Jc28tPmRyb3BQaW4gPSAoIXNjYW4tPnhzX3dhbnRf aXR1cCAmJgotCQkJCSAgIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgotCQkJ CSAgIHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0g LTE7Ci0Jc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7 Ci0Jc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVk KHNvLT5tYXJrUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8q Ci0JICogQWxsb2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBp bmRleC1vbmx5IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJl c2NhbiBjYWxsLiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3Bh Y2VzIGFyZSBhbGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlzCi0JICogZnVu Y3Rpb24gYW5kIGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRf aXR1cCAmJiBzby0+Y3VyclR1cGxlcyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAo Y2hhciAqKSBwYWxsb2MoQkxDS1NaICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJU dXBsZXMgKyBCTENLU1o7Ci0JfQotCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICov CiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4t PmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0 YSkpOworCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNl OworCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7 CQkvKiB1bnRpbCBfYnRfcHJlcHJvY2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlL ZXlzID0gMDsJCS8qIGRpdHRvICovCiB9CiAKKy8qCisgKglidGtpbGxpdGVtc2JhdGNoKCkgLS0g TWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVBRAorICovCit2b2lkCitidGtpbGxp dGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwlCVEJhdGNoRGF0YSAqYnRiYXRj aCA9IGJ0X2JhdGNoX2RhdGEoYmF0Y2gpOworCVBhZ2UJCXBhZ2U7CisJQlRQYWdlT3BhcXVlIG9w YXF1ZTsKKwlPZmZzZXROdW1iZXIgbWlub2ZmOworCU9mZnNldE51bWJlciBtYXhvZmY7CisJYm9v bAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CisJQnVmZmVyCQlidWY7CisJWExvZ1JlY1B0cgls YXRlc3Rsc247CisKKwkvKiBUYWJsZSBBTSBzaG91bGQgaGF2ZSBhbHJlYWR5IHJlbGVhc2VkIGJh dGNoIHBhZ2UncyBwaW4gYnkgbm93ICovCisJQXNzZXJ0KGJhdGNoLT5udW1EZWFkID4gMCk7CisK KwlidWYgPSBfYnRfZ2V0YnVmKHJlbCwgYnRiYXRjaC0+Y3VyclBhZ2UsIEJUX1JFQUQpOworCisJ bGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJQXNzZXJ0KGJhdGNoLT5sc24g PD0gbGF0ZXN0bHNuKTsKKwlpZiAoYmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCisJeworCQkvKiBN b2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCisJCV9idF9yZWxidWYocmVsLCBidWYpOwor CQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwlvcGFxdWUgPSBC VFBhZ2VHZXRPcGFxdWUocGFnZSk7CisJbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsK KwltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJLyogSXRlcmF0ZSB0 aHJvdWdoIGJhdGNoLT5kZWFkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXIgKi8KKwlmb3IgKGlu dCBpID0gMDsgaSA8IGJhdGNoLT5udW1EZWFkOyBpKyspCisJeworCQlpbnQJCQlpdGVtSW5kZXgg PSBiYXRjaC0+ZGVhZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqa2l0ZW0gPSAmYmF0 Y2gtPml0ZW1zW2l0ZW1JbmRleF07CisJCU9mZnNldE51bWJlciBvZmZudW0gPSBraXRlbS0+aW5k ZXhPZmZzZXQ7CisKKwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmIGl0 ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCQlBc3NlcnQoaSA9PSAwIHx8CisJCQkgICBv ZmZudW0gPj0gYmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNl dCk7CisKKwkJaWYgKG9mZm51bSA8IG1pbm9mZikKKwkJCWNvbnRpbnVlOwkJCS8qIHB1cmUgcGFy YW5vaWEgKi8KKwkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCisJCXsKKwkJCUl0ZW1JZAkJaWlk ID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOworCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAo SW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKKwkJCWJvb2wJCWtpbGx0dXBsZSA9 IGZhbHNlOworCisJCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUpKQorCQkJeworCQkJ CWludAkJCXBpID0gaSArIDE7CisJCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBv c3RpbmcoaXR1cGxlKTsKKwkJCQlpbnQJCQlqOworCisJCQkJZm9yIChqID0gMDsgaiA8IG5wb3N0 aW5nOyBqKyspCisJCQkJeworCQkJCQlJdGVtUG9pbnRlciBpdGVtID0gQlRyZWVUdXBsZUdldFBv c3RpbmdOKGl0dXBsZSwgaik7CisKKwkJCQkJaWYgKCFJdGVtUG9pbnRlckVxdWFscyhpdGVtLCAm a2l0ZW0tPnRhYmxlVGlkKSkKKwkJCQkJCWJyZWFrOwkvKiBvdXQgb2YgcG9zdGluZyBsaXN0IGxv b3AgKi8KKworCQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSk7CisKKwkJ CQkJLyoKKwkJCQkJICogUmVhZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4KKwkJCQkJICoK KwkJCQkJICogV2UgcmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0 ZW0gaGVyZQorCQkJCQkgKiB3aWxsIHByZXZlbnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9z dGluZyBsaXN0IHR1cGxlCisJCQkJCSAqIGZ1bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBu ZXh0IGhlYXAgVElEIGluIG5leHQKKwkJCQkJICogbG9vcCBpdGVyYXRpb24uCisJCQkJCSAqCisJ CQkJCSAqIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQg aW4KKwkJCQkJICogdGhlIHBvc3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxl ZAorCQkJCQkgKiByZWdhcmRsZXNzIChpLmUuIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUg bGFzdAorCQkJCQkgKiBraXRlbSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0 IGluZGV4IHR1cGxlCisJCQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdl dHMga2lsbGVkKS4KKwkJCQkJICovCisJCQkJCWlmIChwaSA8IGJhdGNoLT5udW1EZWFkKQorCQkJ CQkJa2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRlbXNbcGkrK11dOworCQkJCX0K KworCQkJCS8qCisJCQkJICogRG9uJ3QgYm90aGVyIGFkdmFuY2luZyB0aGUgb3V0ZXJtb3N0IGxv b3AncyBpbnQgaXRlcmF0b3IgdG8KKwkJCQkgKiBhdm9pZCBwcm9jZXNzaW5nIGRlYWQgaXRlbXMg dGhhdCByZWxhdGUgdG8gdGhlIHNhbWUKKwkJCQkgKiBvZmZudW0vcG9zdGluZyBsaXN0IHR1cGxl LiAgVGhpcyBtaWNyby1vcHRpbWl6YXRpb24gaGFyZGx5CisJCQkJICogc2VlbXMgd29ydGggaXQu ICAoRnVydGhlciBpdGVyYXRpb25zIG9mIHRoZSBvdXRlcm1vc3QgbG9vcAorCQkJCSAqIHdpbGwg ZmFpbCB0byBtYXRjaCBvbiB0aGlzIHNhbWUgcG9zdGluZyBsaXN0J3MgZmlyc3QgaGVhcAorCQkJ CSAqIFRJRCBpbnN0ZWFkLCBzbyB3ZSdsbCBhZHZhbmNlIHRvIHRoZSBuZXh0IG9mZm51bS9pbmRl eAorCQkJCSAqIHR1cGxlIHByZXR0eSBxdWlja2x5LikKKwkJCQkgKi8KKwkJCQlpZiAoaiA9PSBu cG9zdGluZykKKwkJCQkJa2lsbHR1cGxlID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKEl0ZW1Q b2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAma2l0ZW0tPnRhYmxlVGlkKSkKKwkJCQlraWxs dHVwbGUgPSB0cnVlOworCisJCQkvKgorCQkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlm IGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0aGlzCisJCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRp bmcgYSBzaGFyZWQgYnVmZmVyIGxvY2ssIGl0J3MgcG9zc2libGUgdGhhdAorCQkJICogbXVsdGlw bGUgcHJvY2Vzc2VzIGF0dGVtcHQgdG8gZG8gdGhpcyBzaW11bHRhbmVvdXNseSwgbGVhZGluZwor CQkJICogdG8gbXVsdGlwbGUgZnVsbC1wYWdlIGltYWdlcyBiZWluZyBzZW50IHRvIFdBTCAoaWYK KwkJCSAqIHdhbF9sb2dfaGludHMgb3IgZGF0YSBjaGVja3N1bXMgYXJlIGVuYWJsZWQpLCB3aGlj aCBpcworCQkJICogdW5kZXNpcmFibGUuCisJCQkgKi8KKwkJCWlmIChraWxsdHVwbGUgJiYgIUl0 ZW1JZElzRGVhZChpaWQpKQorCQkJeworCQkJCS8qIGZvdW5kIHRoZSBpdGVtL2FsbCBwb3N0aW5n IGxpc3QgaXRlbXMgKi8KKwkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOworCQkJCWtpbGxlZHNvbWV0 aGluZyA9IHRydWU7CisJCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICov CisJCQl9CisJCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7CisJCX0KKwl9CisK KwkvKgorCSAqIFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsg YXMgZGlydHkgaGludC4KKwkgKgorCSAqIFdoZW5ldmVyIHdlIG1hcmsgYW55dGhpbmcgTFBfREVB RCwgd2UgYWxzbyBzZXQgdGhlIHBhZ2UncworCSAqIEJUUF9IQVNfR0FSQkFHRSBmbGFnLCB3aGlj aCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4gIChOb3RlIHRoYXQgd2UKKwkgKiBvbmx5IHJlbHkg b24gdGhlIHBhZ2UtbGV2ZWwgZmxhZyBpbiAhaGVhcGtleXNwYWNlIGluZGV4ZXMuKQorCSAqLwor CWlmIChraWxsZWRzb21ldGhpbmcpCisJeworCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX0hB U19HQVJCQUdFOworCQlNYXJrQnVmZmVyRGlydHlIaW50KGJ1ZiwgdHJ1ZSk7CisJfQorCisJX2J0 X3JlbGJ1ZihyZWwsIGJ1Zik7Cit9CisKIC8qCiAgKglidGVuZHNjYW4oKSAtLSBjbG9zZSBkb3du IGEgc2NhbgogICovCkBAIC00NTUsMTE2ICs1MTcsNjMgQEAgYnRlbmRzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRhIGRy b3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0Jewot CQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0 ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nhbik7 Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCX0KLQotCXNvLT5tYXJr SXRlbUluZGV4ID0gLTE7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7Ci0K LQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgcG9zaXRpb25zLCB0aGUgUkFNIGlzIGFib3V0IHRv IGJlIGZyZWVkLiAqLwotCiAJLyogUmVsZWFzZSBzdG9yYWdlICovCiAJaWYgKHNvLT5rZXlEYXRh ICE9IE5VTEwpCiAJCXBmcmVlKHNvLT5rZXlEYXRhKTsKIAkvKiBzby0+YXJyYXlLZXlzIGFuZCBz by0+b3JkZXJQcm9jcyBhcmUgaW4gYXJyYXlDb250ZXh0ICovCiAJaWYgKHNvLT5hcnJheUNvbnRl eHQgIT0gTlVMTCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShzby0+YXJyYXlDb250ZXh0KTsKLQlp ZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7Ci0J aWYgKHNvLT5jdXJyVHVwbGVzICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5jdXJyVHVwbGVzKTsKLQkv KiBzby0+bWFya1R1cGxlcyBzaG91bGQgbm90IGJlIHBmcmVlJ2QsIHNlZSBidHJlc2NhbiAqLwog CXBmcmVlKHNvKTsKIH0KIAogLyoKLSAqCWJ0bWFya3BvcygpIC0tIHNhdmUgY3VycmVudCBzY2Fu IHBvc2l0aW9uCisgKglidHBvc3Jlc2V0KCkgLS0gcmVzZXQgYXJyYXkga2V5IHN0YXRlIGZvciBz Y2FuIHBvc2l0aW9uIGNoYW5nZQorICoKKyAqIENhbGxlZCBieSB0aGUgY29yZSBzeXN0ZW0gd2hl biB0aGUgc2NhbidzIGxvZ2ljYWwgcG9zaXRpb24gaXMgYWJvdXQgdG8KKyAqIGNoYW5nZSBpbiBh IHdheSB0aGF0IGludmFsaWRhdGVzIG91ciBhcnJheSBrZXkgc3RhdGUuICBUaGlzIGhhcHBlbnMg d2hlbgorICogcmVzdG9yaW5nIGEgbWFya2VkIHBvc2l0aW9uLCBvciB3aGVuIHRoZSBzY2FuIGNy b3NzZXMgYSBiYXRjaCBib3VuZGFyeQorICogd2hpbGUgbW92aW5nIGluIHRoZSBvcHBvc2l0ZSBk aXJlY3Rpb24gdG8gdGhlIG9uZSBvcmlnaW5hbGx5IHVzZWQuCisgKgorICogRm9yIGRpcmVjdGlv biBjaGFuZ2VzLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxpcHBlZCB0aGUK KyAqIGJhdGNoJ3MgZGlyIGZpZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmU7IHdlIHVzZSB0aGlzIHVw ZGF0ZWQgZGlyZWN0aW9uIHdoZW4KKyAqIHJlc2V0dGluZyBvdXIgYXJyYXkga2V5cy4gIEZvciBt YXJrIHJlc3RvcmF0aW9uLCB0aGUgYmF0Y2gncyBkaXIgd2lsbAorICogcmV0YWluIGl0cyBvcmln aW5hbCB2YWx1ZSAoZnJvbSB3aGVuIGJ0Z2V0YmF0Y2ggcmV0dXJuZWQgaXQpLgogICovCiB2b2lk Ci1idG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorYnRwb3NyZXNldChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9IGJ0X2JhdGNo X2RhdGEoYmF0Y2gpOwogCi0JLyogVGhlcmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4g KGJ1dCBubyBsb2NrKS4gKi8KLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsK KwlpZiAoIXNvLT5udW1BcnJheUtleXMpCisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNv cmQgdGhlIGN1cnJlbnQgaXRlbUluZGV4LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UK LQkgKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBt YWtlcyBhIGZ1bGwgY29weSBvZgotCSAqIHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAg SWYgKGFzIG9mdGVuIGhhcHBlbnMpIHRoZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxl YXZlIHRoZSBwYWdlLCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBSZXNldCBh cnJheSBrZXlzIHRvIGluaXRpYWwgc3RhdGUgZm9yIHRoZSBiYXRjaCdzIHNjYW4gZGlyZWN0aW9u LiAgQWxzbworCSAqIGNsZWFyIG5lZWRQcmltU2NhbiBhbmQgcmVsYXRlZCBmbGFncy4gIFRoZXNl IHdlcmUgc2V0IGJhc2VkIG9uIHRoZSBzb2Z0CisJICogYXNzdW1wdGlvbiB0aGF0IHRoZSBzY2Fu IHdvdWxkIGFsd2F5cyBwcm9jZWVkIGluIHRoZSBzYW1lIGRpcmVjdGlvbi4KKwkgKgorCSAqIFRo ZXNlIHN0ZXBzIHdvcmsgYXJvdW5kIHRoZSBzb2Z0IGFzc3VtcHRpb24gYmVpbmcgdmlvbGF0ZWQ6 IHRoZXkgZm9yY2UKKwkgKiB0aGUgc2NhbiB0byBzdGVwIHRvIHRoZSBuZXh0L3ByZXZpb3VzIHBh Z2UsIG1ha2luZyB0aGUgYXJyYXlzIHJlY292ZXIuCisJICogV2hlbiB3ZSBnbyB0byByZWFkIHRo YXQgcGFnZSwgX2J0X3JlYWRwYWdlIHdpbGwgcmVsaWFibHkgZGV0ZXJtaW5lIGlmIGEKKwkgKiBw cmltaXRpdmUgc2NhbiByZWFsbHkgaXMgbmVlZGVkIGJhc2VkIG9uIHRoZSBwYWdlJ3MgdHVwbGVz LiAgSWYgdGhlcmUncworCSAqIGEgcHJpbWl0aXZlIHNjYW4sIGl0IHdpbGwgcmVwb3NpdGlvbiB0 aGUgc2NhbiB1c2luZyBuZXcgYXJyYXkgdmFsdWVzCisJICogKGJhc2VkIG9uIHRoZSB0dXBsZXMg ZnJvbSB0aGUgbmVpZ2hib3JpbmcgcGFnZSB3ZSdsbCBzdGVwIG9uIHRvKS4KKwkgKgorCSAqIFdl IG5lZWQgdG8gcmVzZXQgdGhlIGFycmF5IGtleSBzdGF0ZSBpbiB0aGUgY29ycmVjdCBkaXJlY3Rp b24gc28gdGhhdAorCSAqIHdlIHdvbid0IGdldCBjb25mdXNlZC4gIFdoZW4gdGhlIGFycmF5IGtl eXMgYXJlIGJlaGluZCB0aGUga2V5IHNwYWNlCisJICogZm9yIHRoZSBwYWdlIHdlJ3JlIHN0ZXBw aW5nIG9uIHRvIChiZWhpbmQgaW4gdGVybXMgb2YgdGhlIHNjYW4gZGlyKSwKKwkgKiB0aGV5IHdp bGwgY2F0Y2ggdXAgYXV0b21hdGljYWxseS4gIEJ1dCB3aGVuIHRoZXkncmUgYWhlYWQgb2YgdGhh dAorCSAqIHBhZ2UncyBrZXkgc3BhY2UsIHRoZSBzY2FuIGNvdWxkIG1pc3MgbWF0Y2hpbmcgdHVw bGVzLgogCSAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJc28tPm1h cmtJdGVtSW5kZXggPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7CisJX2J0X3N0YXJ0X2FycmF5X2tl eXMoc2NhbiwgYmF0Y2gtPmRpcik7CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoYmF0Y2gt PmRpcikpCisJCWJ0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJZWxzZQotCXsKLQkJQlRTY2Fu UG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0J fQotfQotCi0vKgotICoJYnRyZXN0cnBvcygpIC0tIHJlc3RvcmUgc2NhbiB0byBsYXN0IHNhdmVk IHBvc2l0aW9uCi0gKi8KLXZvaWQKLWJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQotewot CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQotCWlmIChz by0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyoKLQkJICogVGhlIHNjYW4gaGFzIG5ldmVy IG1vdmVkIHRvIGEgbmV3IHBhZ2Ugc2luY2UgdGhlIGxhc3QgbWFyay4gIEp1c3QKLQkJICogcmVz dG9yZSB0aGUgaXRlbUluZGV4LgotCQkgKgotCQkgKiBOQjogSW4gdGhpcyBjYXNlIHdlIGNhbid0 IGNvdW50IG9uIGFueXRoaW5nIGluIHNvLT5tYXJrUG9zIHRvIGJlCi0JCSAqIGFjY3VyYXRlLgot CQkgKi8KLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5kZXg7Ci0JfQot CWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIG1vdmVkIHRvIGEgbmV3IHBhZ2UgYWZ0ZXIg bGFzdCBtYXJrIG9yIHJlc3RvcmUsIGFuZCB3ZSBhcmUKLQkJICogbm93IHJlc3RvcmluZyB0byB0 aGUgbWFya2VkIHBhZ2UuICBXZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZAotCQkgKiBsb2Nrcywg YnV0IGlmIHdlJ3JlIHN0aWxsIGhvbGRpbmcgdGhlIHBpbiBmb3IgdGhlIGN1cnJlbnQgcG9zaXRp b24sCi0JCSAqIHdlIG11c3QgZHJvcCBpdC4KLQkJICovCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlk KHNvLT5jdXJyUG9zKSkKLQkJewotCQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBk ZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQot CQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5j dXJyUG9zKTsKLQkJfQotCi0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5tYXJrUG9zKSkKLQkJ ewotCQkJLyogYnVtcCBwaW4gb24gbWFyayBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gY3VycmVu dCBidWZmZXIgKi8KLQkJCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+bWFya1BvcykpCi0JCQkJ SW5jckJ1ZmZlclJlZkNvdW50KHNvLT5tYXJrUG9zLmJ1Zik7Ci0JCQltZW1jcHkoJnNvLT5jdXJy UG9zLCAmc28tPm1hcmtQb3MsCi0JCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNb MV0pICsKLQkJCQkgICBzby0+bWFya1Bvcy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVt KSk7Ci0JCQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzLCBz by0+bWFya1R1cGxlcywKLQkJCQkJICAgc28tPm1hcmtQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJ CS8qIFJlc2V0IHRoZSBzY2FuJ3MgYXJyYXkga2V5cyAoc2VlIF9idF9zdGVwcGFnZSBmb3Igd2h5 KSAqLwotCQkJaWYgKHNvLT5udW1BcnJheUtleXMpCi0JCQl7Ci0JCQkJX2J0X3N0YXJ0X2FycmF5 X2tleXMoc2Nhbiwgc28tPmN1cnJQb3MuZGlyKTsKLQkJCQlzby0+bmVlZFByaW1TY2FuID0gZmFs c2U7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBv cyk7Ci0JfQorCQlidGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9 IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sg PSBmYWxzZTsKIH0KIAogLyoKQEAgLTg4MCwxNSArODg5LDYgQEAgX2J0X3BhcmFsbGVsX3NlaXpl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0 X3NjYW5fcGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZh bGlkQmxvY2tOdW1iZXI7CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlh bGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBf YnRfcmVhZG5leHRwYWdlIHRyZWF0cyB0aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFs Ci0JICogYmFja2VuZCB0aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3Nj YW5fcGFnZSAodW5sZXNzIHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlh bGl6ZWQgYnkgX2J0X3JlYWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBv c0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1 cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDM4 LDggKzEwMzgsNiBAQCBfYnRfcGFyYWxsZWxfZG9uZShJbmRleFNjYW5EZXNjIHNjYW4pCiAJQlRQ YXJhbGxlbFNjYW5EZXNjIGJ0c2NhbjsKIAlib29sCQlzdGF0dXNfY2hhbmdlZCA9IGZhbHNlOwog Ci0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KIAkvKiBEbyBub3Ro aW5nLCBmb3Igbm9uLXBhcmFsbGVsIHNjYW5zICovCiAJaWYgKHBhcmFsbGVsX3NjYW4gPT0gTlVM TCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRz ZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggOWJl Mzc0ZTZkLi5mNWY0ZmQ2NjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpA QCAtMjYsNTIgKzI2LDIzIEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3RhdGljIGlu bGluZSB2b2lkIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nh bk9wYXF1ZSBzbyk7CiBzdGF0aWMgQnVmZmVyIF9idF9tb3ZlcmlnaHQoUmVsYXRpb24gcmVsLCBS ZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJCUJ1ZmZlciBidWYsIGJv b2wgZm9ydXBkYXRlLCBCVFN0YWNrIHN0YWNrLAogCQkJCQkJCWludCBhY2Nlc3MpOwogc3RhdGlj IE9mZnNldE51bWJlciBfYnRfYmluc3JjaChSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXks IEJ1ZmZlciBidWYpOwogc3RhdGljIGludAlfYnRfYmluc3JjaF9wb3N0aW5nKEJUU2Nhbkluc2Vy dCBrZXksIFBhZ2UgcGFnZSwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1zdGF0aWMg aW5saW5lIHZvaWQgX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNjYW5PcGFx dWUgc28pOwotc3RhdGljIGJvb2wgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIGJvb2wgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBk aXIpOwotc3RhdGljIGJvb2wgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJs b2NrTnVtYmVyIGJsa25vLAotCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2Fu RGlyZWN0aW9uIGRpciwKLQkJCQkJCQkgYm9vbCBzZWl6ZWQpOworc3RhdGljIEluZGV4U2NhbkJh dGNoIF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg Zmlyc3RiYXRjaCwKKwkJCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9u IGRpcik7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAorCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgbGFz dGN1cnJibGtubywKKwkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFn ZSk7CiBzdGF0aWMgQnVmZmVyIF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KFJlbGF0aW9uIHJl bCwgQmxvY2tOdW1iZXIgKmJsa25vLAogCQkJCQkJCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJs a25vKTsKLXN0YXRpYyBib29sIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfZW5kcG9pbnQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJICAgSW5kZXhTY2FuQmF0 Y2ggZmlyc3RiYXRjaCk7CiAKIAotLyoKLSAqCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3Bpbigp Ci0gKgotICogVW5sb2NrIHNvLT5jdXJyUG9zLmJ1Zi4gIElmIHNjYW4gaXMgc28tPmRyb3BQaW4s IGRyb3AgdGhlIHBpbiwgdG9vLgotICogRHJvcHBpbmcgdGhlIHBpbiBwcmV2ZW50cyBWQUNVVU0g ZnJvbSBibG9ja2luZyBvbiBhY3F1aXJpbmcgYSBjbGVhbnVwIGxvY2suCi0gKi8KLXN0YXRpYyBp bmxpbmUgdm9pZAotX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRT Y2FuT3BhcXVlIHNvKQotewotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKiBKdXN0IGRyb3Ag dGhlIGxvY2sgKG5vdCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJlbCwgc28tPmN1cnJQ b3MuYnVmKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogRHJvcCBib3RoIHRoZSBsb2NrIGFu ZCB0aGUgcGluLgotCSAqCi0JICogSGF2ZSB0byBzZXQgc28tPmN1cnJQb3MubHNuIHNvIHRoYXQg X2J0X2tpbGxpdGVtcyBoYXMgYSB3YXkgdG8gZGV0ZWN0Ci0JICogd2hlbiBjb25jdXJyZW50IGhl YXAgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KLQkgKi8K LQlzby0+Y3VyclBvcy5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsK LQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJ bnZhbGlkQnVmZmVyOwotfQotCiAvKgogICoJX2J0X3NlYXJjaCgpIC0tIFNlYXJjaCB0aGUgdHJl ZSBmb3IgYSBwYXJ0aWN1bGFyIHNjYW5rZXksCiAgKgkJb3IgbW9yZSBwcmVjaXNlbHkgZm9yIHRo ZSBmaXJzdCBsZWFmIHBhZ2UgaXQgY291bGQgYmUgb24uCkBAIC04NjEsMjYgKzgzMiwyMyBAQCBf YnRfY29tcGFyZShSZWxhdGlvbiByZWwsCiB9CiAKIC8qCi0gKglfYnRfZmlyc3QoKSAtLSBGaW5k IHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9idF9maXJzdCgpIC0tIEZpbmQgdGhlIGZp cnN0IGJhdGNoIGluIGEgc2Nhbi4KICAqCiAgKgkJV2UgbmVlZCB0byBiZSBjbGV2ZXIgYWJvdXQg dGhlIGRpcmVjdGlvbiBvZiBzY2FuLCB0aGUgc2VhcmNoCi0gKgkJY29uZGl0aW9ucywgYW5kIHRo ZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsCi0gKgkJaWYgYmFj a3dhcmRzIHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZSB0cmVlIHRoYXQgc2F0aXNmaWVzIHRo ZQotICoJCXF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtleS4gIE9uIHN1Y2Nlc3MgZXhpdCwg ZGF0YSBhYm91dCB0aGUKLSAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVl biBsb2FkZWQgaW50byBzby0+Y3VyclBvcy4gIFdlJ2xsCi0gKgkJZHJvcCBhbGwgbG9ja3MgYW5k IGhvbGQgb250byBhIHBpbiBvbiBwYWdlJ3MgYnVmZmVyLCBleGNlcHQgZHVyaW5nCi0gKgkJc28t PmRyb3BQaW4gc2NhbnMsIHdoZW4gd2UgZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgot ICoJCV9idF9yZXR1cm5pdGVtIHNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gc2NhbiBv biBzdWNjZXNzIGV4aXQuCisgKgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAg V2UgZmluZCB0aGUgZmlyc3QgbGVhZiBwYWdlIChvcgorICoJCXRoZSBsYXN0IGxlYWYgcGFnZSwg d2hlbiBzY2FubmluZyBiYWNrd2FyZHMpIGluIHRoZSB0cmVlIHdpdGggYXQgbGVhc3QKKyAqCQlv bmUgdHVwbGUgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtl eS4gIE9uCisgKgkJc3VjY2VzcyBleGl0LCB3ZSByZXR1cm4gYSBuZXcgYmF0Y2ggd2l0aCB0aGF0 IHBhZ2UncyBtYXRjaGluZyBpdGVtcy4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcg aXRlbXMgaW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8KLSAqIHBpbnMgb3Ig bG9ja3MgaGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQuCisgKiBJZiB0aGVy ZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4IChpbiB0aGUgZ2l2ZW4gc2NhbiBk aXJlY3Rpb24pLAorICogd2UganVzdCByZXR1cm4gTlVMTC4KICAqCiAgKiBOb3RlIHRoYXQgc2Nh bi0+a2V5RGF0YVtdLCBhbmQgdGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9tIGl0 LAogICogYXJlIGJvdGggc2VhcmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1FIGZv ciBtb3JlIGFib3V0IHRoaXMpLgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQgYSB0 ZW1wb3JhcnkgaW5zZXJ0aW9uLXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5nIHRo ZSBzY2FuIHN0YXJ0IHBvc2l0aW9uLgogICovCi1ib29sCitJbmRleFNjYW5CYXRjaAogX2J0X2Zp cnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24J cmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTg5Myw4ICs4NjEsMTAgQEAgX2J0X2ZpcnN0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRlZ3lOdW1iZXIg c3RyYXRfdG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxrbm8gPSBJbnZh bGlkQmxvY2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKKwlJbmRleFNjYW5CYXRjaCBmaXJz dGJhdGNoOwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisJLyog QWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoICovCisJZmlyc3RiYXRjaCA9IGluZGV4YW1f dXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKIAogCS8qCiAJICogRXhhbWluZSB0aGUgc2NhbiBrZXlz IGFuZCBlbGltaW5hdGUgYW55IHJlZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhlCkBAIC05MTAs NiArODgwLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlfYnRfcGFyYWxsZWxfZG9u ZShzY2FuKTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7 CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTkxOSw3ICs4OTAsMTAgQEAgX2J0X2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICovCiAJaWYgKHNjYW4tPnBh cmFsbGVsX3NjYW4gIT0gTlVMTCAmJgogCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtu bywgJmxhc3RjdXJyYmxrbm8sIHRydWUpKQotCQlyZXR1cm4gZmFsc2U7CisJeworCQlpbmRleGFt X3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJcmV0dXJuIGZhbHNlOwkJ CS8qIGRlZmluaXRlbHkgZG9uZSAoc28tPm5lZWRQcmltU2NhbiBpcyB1bnNldCkgKi8KKwl9CiAK IAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHNjYW4ncyBhcnJheXMgKGlmIGFueSkgZm9yIHRoZSBj dXJyZW50IHNjYW4gZGlyZWN0aW9uCkBAIC05MzYsMTQgKzkxMCwxMCBAQCBfYnRfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJICogX2J0X3JlYWRuZXh0cGFn ZSByZWxlYXNlcyB0aGUgc2NhbiBmb3IgdXMgKG5vdCBfYnRfcmVhZGZpcnN0cGFnZSkuCiAJCSAq LwogCQlBc3NlcnQoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMKTsKLQkJQXNzZXJ0KCFzby0+ bmVlZFByaW1TY2FuKTsKLQkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSk7CiAKLQkJaWYgKCFfYnRf cmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpKQotCQkJ cmV0dXJuIGZhbHNlOworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJh dGNoKTsKIAotCQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQly ZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0 cnVlKTsKIAl9CiAKIAkvKgpAQCAtMTI0Myw3ICsxMjEzLDcgQEAgX2J0X2ZpcnN0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogTm90ZTogY2FsbHMgX2J0X3JlYWRm aXJzdHBhZ2UgZm9yIHVzLCB3aGljaCByZWxlYXNlcyB0aGUgcGFyYWxsZWwgc2Nhbi4KIAkgKi8K IAlpZiAoa2V5c3ogPT0gMCkKLQkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIpOworCQly ZXR1cm4gX2J0X2VuZHBvaW50KHNjYW4sIGRpciwgZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIFdl IHdhbnQgdG8gc3RhcnQgdGhlIHNjYW4gc29tZXdoZXJlIHdpdGhpbiB0aGUgaW5kZXguICBTZXQg dXAgYW4KQEAgLTE1MTEsOSArMTQ4MSw5IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIHBvc2l0aW9uIG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0 IGxlYWYgcGFnZS4KIAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSA9 PSBpbnNrZXkuYmFja3dhcmQpOwotCV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28t PmN1cnJQb3MuYnVmLCBCVF9SRUFELCBmYWxzZSk7CisJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZp bnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAotCWlmICghQnVmZmVy SXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICh1bmxpa2VseSghQnVmZmVySXNWYWxpZChm aXJzdGJhdGNoLT5idWYpKSkKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAKQEAg LTE1MjksMjIgKzE0OTksMjMgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCiAJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQogCQl7CiAJCQlQ cmVkaWNhdGVMb2NrUmVsYXRpb24ocmVsLCBzY2FuLT54c19zbmFwc2hvdCk7Ci0JCQlfYnRfc2Vh cmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2Up OworCQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZmaXJzdGJhdGNoLT5idWYsIEJU X1JFQUQsIGZhbHNlKTsKIAkJfQogCi0JCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5i dWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+YnVmKSkKIAkJewogCQkJX2J0 X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2Fu LCBmaXJzdGJhdGNoKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KIAogCS8qIHBvc2l0aW9u IHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBhZ2UgKi8KLQlvZmZudW0gPSBfYnRfYmluc3Jj aChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisJb2ZmbnVtID0gX2J0X2JpbnNyY2go cmVsLCAmaW5za2V5LCBmaXJzdGJhdGNoLT5idWYpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRh IGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4gKHVzdWFsbHkgdGhlIHBhZ2UKLQkgKiBj dXJyZW50bHkgaW4gc28tPmN1cnJQb3MuYnVmKS4KKwkgKiBjdXJyZW50bHkgaW4gZmlyc3RiYXRj aC5idWYpLgogCSAqCiAJICogSWYgaW5za2V5Lm5leHRrZXkgPSBmYWxzZSBhbmQgaW5za2V5LmJh Y2t3YXJkID0gZmFsc2UsIG9mZm51bSBpcwogCSAqIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0IG5v bi1waXZvdCB0dXBsZSA+PSBpbnNrZXkuc2NhbmtleXMuCkBAIC0xNTYyLDE2NSArMTUzMyw3MyBA QCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBm b3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBsZSwgd2hlbiBpbnNrZXkgaXMgYm90aCA8IHRoZSBsZWFm IHBhZ2UncyBoaWdoCiAJICoga2V5IGFuZCA+IGFsbCBvZiBpdHMgbm9uLXBpdm90IHR1cGxlcywg b2ZmbnVtIHdpbGwgYmUgIm1heG9mZiArIDEiLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBh Z2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRl bShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNj YW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwgZGlyKTsKIH0KIAogLyoKLSAqCV9idF9uZXh0KCkgLS0g R2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5l eHQgYmF0Y2ggaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3Jp YmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heSBiZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90 IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0g d2FzCi0gKgkJcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBk ZXNjcmliZXMgdGhlIGJhdGNoIHRoYXQgd2FzIGxhc3QgcmV0dXJuZWQgYnkKKyAqCQlidGdldGJh dGNoLiAgV2UnbGwgdXNlIHRoZSBwcmlvciBiYXRjaCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9u IHRvCisgKgkJZGVjaWRlIHdoaWNoIGxlYWYgcGFnZSB0byByZWFkIG5leHQuCiAgKgotICoJCU9u IHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQsIGFuZCBfYnRf cmV0dXJuaXRlbQotICoJCXNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gdGhlIHNjYW4u ICBzby0+Y3VyclBvcyByZW1haW5zIHZhbGlkLgotICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5v IG1vcmUgdHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0J2xsCi0gKgkJc3Rp bGwgYmUgcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMgYnkgY2hhbmdpbmcg ZGlyZWN0aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0X2ZpcnN0IGFuZXcg aW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24gc3VjY2VzcyBleGl0LCByZXR1cm5zIHRo ZSBuZXh0IGJhdGNoLiAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKKyAqCQltYXRjaGluZyB0 dXBsZSBvbiBhbnkgcmV0dXJuZWQgYmF0Y2ggKGVsc2Ugd2UnZCBqdXN0IHJldHVybiBOVUxMKS4K ICAqLwotYm9vbAotX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0K LQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyoKLQkgKiBBZHZh bmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBpZiB0aGVyZSdzIG5vIG1vcmUs IHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEuCi0JICovCi0JaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0 ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoIV9idF9zdGVwcGFn ZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQllbHNlCi0JewotCQlp ZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCi0JCXsK LQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9 Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOwotfQotCi0v KgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1 cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4gYnkgc2V0dGluZyB0aGUgcmVs ZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVzY3JpcHRvcgotICovCi1zdGF0 aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2Fu T3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0 ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0IHJlY2VudCBfYnRfcmVhZHBh Z2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5j dXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5m aXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5kZXggPD0gc28tPmN1cnJQb3Mu bGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVyIGFtZ2V0dHVwbGUgY29udHJh Y3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0JaWYgKHNvLT5j dXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxl cyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0gKglfYnRfc3RlcHBhZ2UoKSAt LSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRhdGEgZm9yIHNjYW4KLSAqCi0g KiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJmb3JtcyBmaW5hbCBzdGVwcyBm b3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBi ZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRob3VnaAotICogbmV2ZXIgbG9j a2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUgd29uJ3QgZXZlbiBiZSBhIHBp biBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdlIG11c3Qgc3RpbGwgYmUgc2V0 IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGljIGJvb2wKLV9idF9zdGVwcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0Y2gK K19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2Nh bkJhdGNoIHByaW9yYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidHByaW9yYmF0Y2ggPSBidF9iYXRjaF9kYXRh KHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxhc3RjdXJyYmxrbm87Ci0K LQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCi0JLyogQmVmb3JlIGxl YXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCWlmIChz by0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQotCS8qCi0JICogQmVm b3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBkYXRhIGlmIHRo ZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgotCSAqLwotCWlmIChz by0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyogYnVtcCBwaW4gb24gY3VycmVudCBidWZm ZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KLQkJaWYgKEJUU2NhblBvc0lzUGlu bmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+Y3VyclBvcy5idWYp OwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCi0JCQkgICBvZmZzZXRvZihC VFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAgc28tPmN1cnJQb3MubGFzdEl0ZW0gKiBz aXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28tPm1hcmtUdXBsZXMpCi0JCQltZW1jcHko c28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAotCQkJCSAgIHNvLT5jdXJyUG9zLm5leHRU dXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4 OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0JCS8qCi0JCSAqIElmIHdlJ3JlIGp1c3Qg YWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZlIGluZGV4IHNjYW4KLQkJICogKHBvc3Np YmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBrZXlzLCBhbmQgbmVlZHMgdG8gc2tpcCB0 bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbiksIG1vcmVMZWZ0 L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgcHJp bWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJICogbmV2ZXIgYmUgdGFrZW4gdG8gaW5k aWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGFzIGVuZGVkCi0JCSAqICh0aGF0 IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2UgY291bGQgaGFuZGxlIHRoaXMgY2FzZSBi eSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlzIGFzCi0JCSAqIG1hcmtQb3Mgc3RhdGUu ICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFycmF5IHN0YXRlIGxpa2UgdGhpcwotCQkg KiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQsIHdlIGp1c3QgdW5zZXQgbWFya1Bvcydz IGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0ICh3aGljaGV2ZXIgbWlnaHQgYmUg YWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRyZXN0cnBvcyByZXNldCB0aGUgc2Nhbidz IGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9zaXRpb25zLgotCQkgKiBJbiBlZmZlY3Qs IGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUgYXJyYXlzIHVwIHRvIHRoZSBmaXJzdAot CQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtlcyBwbGFjZSBhZnRlciBpdCBoYXMgcmVz dG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28tPm5lZWRQcmltU2NhbikKLQkJewotCQkJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1cnJQb3MuZGlyKSkKLQkJCQlzby0+bWFy a1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQotCQkJCXNvLT5tYXJrUG9zLm1vcmVMZWZ0 ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9yZSBub3Qgc3VwcG9ydGVkIGJ5IHBhcmFs bGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFyYWxsZWxfc2Nhbik7Ci0JfQotCi0JQlRT Y2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7CisJYm9vbAkJbW9yZUluRGlyOwogCiAJ LyogV2FsayB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YSAqLwogCWlmIChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikpCi0JCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCWJsa25v ID0gYnRwcmlvcmJhdGNoLT5uZXh0UGFnZTsKIAllbHNlCi0JCWJsa25vID0gc28tPmN1cnJQb3Mu cHJldlBhZ2U7Ci0JbGFzdGN1cnJibGtubyA9IHNvLT5jdXJyUG9zLmN1cnJQYWdlOworCQlibGtu byA9IGJ0cHJpb3JiYXRjaC0+cHJldlBhZ2U7CisJbGFzdGN1cnJibGtubyA9IGJ0cHJpb3JiYXRj aC0+Y3VyclBhZ2U7CisJbW9yZUluRGlyID0gU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8K KwkJYnRwcmlvcmJhdGNoLT5tb3JlUmlnaHQgOiBidHByaW9yYmF0Y2gtPm1vcmVMZWZ0OwogCiAJ LyoKLQkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hlZHVsZWQg d2hlbiB0aGUgY2FsbCB0bwotCSAqIF9idF9yZWFkcGFnZSBmb3IgY3VyclBvcyBoYXBwZW5lZCB0 byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUKLQkgKiBvbmUgdGhhdCB3ZSdyZSBz dGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJyYXkKLQkg KiBrZXlzIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZhbmNlIHRo ZW0uKQorCSAqIENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVkdWxl ZCB3aGVuIHByaW9yYmF0Y2gncyBjYWxsCisJICogdG8gX2J0X3JlYWRwYWdlIGhhcHBlbmVkIHRv IHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZSBvbmUgdGhhdAorCSAqIHdlJ3JlIHN0 ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJheSBrZXlz CisJICogYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFuY2UgdGhl bS4pCiAJICovCi0JaWYgKHNvLT5jdXJyUG9zLmRpciAhPSBkaXIpCisJaWYgKHByaW9yYmF0Y2gt PmRpciAhPSBkaXIpCiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAorCS8qCisJICogRm9y IGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHByaW9yIGJhdGNoIG5vdyBzbyB0aGF0 CisJICogX2J0X3JlYWRuZXh0cGFnZSBjYW4gcmV1c2UgaXRzIG1lbW9yeS4gIFRoaXMgd2F5IGJp dG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFuIG9uZSBiYXRjaCBhbGxvY2F0aW9u LgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShzY2FuLCBwcmlvcmJhdGNoKTsKKworCWlmIChibGtubyA9PSBQX05PTkUgfHwgIW1v cmVJbkRpcikKKwl7CisJCS8qCisJCSAqIHByaW9yYmF0Y2gncyBwYWdlIGlzIGtub3duIHRvIGJl IHRoZSBmaW5hbCBsZWFmIHBhZ2Ugd2l0aCBtYXRjaGVzCisJCSAqIGluIHRoaXMgc2NhbiBkaXJl Y3Rpb24gKGl0cyBfYnRfcmVhZHBhZ2UgY2FsbCBmaWd1cmVkIHRoYXQgb3V0KS4KKwkJICoKKwkJ ICogTm90ZTogaWYgc28tPm5lZWRQcmltU2NhbiBpcyBzZXQsIHRoZW4gcHJpb3JiYXRjaCdzIGxl YWYgcGFnZSBpcworCQkgKiBhY3R1YWxseSBqdXN0IHRoZSBmaW5hbCBwYWdlIGZvciB0aGUgY3Vy cmVudCBwcmltaXRpdmUgaW5kZXggc2NhbgorCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uICh0 aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkuCisJCSAqLworCQlfYnRfcGFyYWxs ZWxfZG9uZShzY2FuKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogcGFyYWxsZWwgc2NhbiBt dXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFs bGVsX3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywg Jmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28t Pm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKIAlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShz Y2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKQEAgLTE3MzMsNzMg KzE2MTIsOTEgQEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAgKiB0byBzdG9wIHRoZSBzY2FuIG9uIHRoaXMgcGFnZSBieSBjYWxsaW5nIF9idF9j aGVja2tleXMgYWdhaW5zdCB0aGUgaGlnaAogICoga2V5LiAgU2VlIF9idF9yZWFkcGFnZSBmb3Ig ZnVsbCBkZXRhaWxzLgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0IGJlIHBpbm5l ZCBhbmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgorICogT24gZW50cnksIGZpcnN0 YmF0Y2ggbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4K ICAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9y ZSBjYWxsaW5nIGhlcmUuCiAgKgotICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRhdGVkIHNvLT5j dXJyUG9zIGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucworICogT24gZXhpdCwgd2UnbGwgaGF2 ZSB1cGRhdGVkIGZpcnN0YmF0Y2ggYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCiAgKiBhY2Nv cmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgbGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4 dHBhZ2UgZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBp bmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGluZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2 ZW4gZGlyZWN0aW9uLgogICoKICAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBh cmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1cmU7 IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAq Lwotc3RhdGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0 Y2gKK19idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2gg Zmlyc3RiYXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGly KQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlC VEJhdGNoRGF0YSAqYnRmaXJzdGJhdGNoID0gYnRfYmF0Y2hfZGF0YShmaXJzdGJhdGNoKTsKKwlC bG9ja051bWJlciBibGtubywKKwkJCQlsYXN0Y3VycmJsa25vOwogCi0Jc28tPm51bUtpbGxlZCA9 IDA7CQkJLyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CQkvKiBk aXR0byAqLwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3VyclBvcyBmb3IgdGhlIGZpcnN0IHBhZ2Ug KHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8qIEluaXRpYWxpemUgZmlyc3RiYXRjaCdz IHBvc2l0aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwogCWlmIChzby0+bmVlZFByaW1TY2FuKQog CXsKIAkJQXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwogCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0 ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNo LT5tb3JlTGVmdCA9IHRydWU7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAkJ c28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwogCX0KIAllbHNlIGlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcikpCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOwotCQlzby0+ Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gZmFs c2U7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAl9CiAJZWxzZQogCXsKLQkJ c28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBm YWxzZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJCWJ0Zmlyc3RiYXRjaC0+ bW9yZVJpZ2h0ID0gZmFsc2U7CiAJfQogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGxvYWQgbWF0Y2hp bmcgdHVwbGVzIGZyb20gdGhlIGZpcnN0IHBhZ2UuCiAJICoKLQkgKiBOb3RlIHRoYXQgX2J0X3Jl YWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0aGUgc28tPmN1cnJQb3MgZmllbGRzLgor CSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBm aXJzdGJhdGNoIGZpZWxkcy4KIAkgKiBfYnRfcmVhZHBhZ2UgYWxzbyByZWxlYXNlcyBwYXJhbGxl bCBzY2FuIChldmVuIHdoZW4gaXQgcmV0dXJucyBmYWxzZSkuCiAJICovCi0JaWYgKF9idF9yZWFk cGFnZShzY2FuLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCisJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBm aXJzdGJhdGNoLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCiAJewotCQlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwotCi0JCS8qCi0JCSAqIF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBE cm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBpbikgb24KLQkJICogc28tPmN1cnJQb3MuYnVm IGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JCSAqLwot CQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJX2J0X2Ryb3BfbG9j a19hbmRfbWF5YmVfcGluKHJlbCwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJLyogX2J0X3JlYWRw YWdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gZmlyc3RiYXRjaC5pdGVtc1tdICovCisJ CWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgZmlyc3RiYXRjaCk7CisJCXJldHVybiBm aXJzdGJhdGNoOwogCX0KIAotCS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBv biB0aGUgcGFnZSBpbiBzby0+Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2NrYnVmKHNjYW4tPmlu ZGV4UmVsYXRpb24sIHNvLT5jdXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBubyBhY3R1YWxseS1t YXRjaGluZyBkYXRhIG9uIHRoZSBwYWdlICovCisJX2J0X3JlbGJ1ZihzY2FuLT5pbmRleFJlbGF0 aW9uLCBmaXJzdGJhdGNoLT5idWYpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7 CiAKLQkvKiBDYWxsIF9idF9yZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9zdGVwcGFnZSB3cmFw cGVyIGZ1bmN0aW9uICovCi0JaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJcmV0dXJu IGZhbHNlOworCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEgKi8KKwlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlibGtubyA9IGJ0Zmlyc3RiYXRjaC0+bmV4dFBh Z2U7CisJZWxzZQorCQlibGtubyA9IGJ0Zmlyc3RiYXRjaC0+cHJldlBhZ2U7CisJbGFzdGN1cnJi bGtubyA9IGJ0Zmlyc3RiYXRjaC0+Y3VyclBhZ2U7CiAKLQkvKiBfYnRfcmVhZHBhZ2UgZm9yIGEg bGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9zKSBzdWNjZWVkZWQgKi8KLQlyZXR1cm4gdHJ1 ZTsKKwlBc3NlcnQoZmlyc3RiYXRjaC0+ZGlyID09IGRpcik7CisKKwlpZiAoYmxrbm8gPT0gUF9O T05FIHx8CisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIWJ0Zmlyc3RiYXRj aC0+bW9yZVJpZ2h0IDogIWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQpKQorCXsKKwkJLyoKKwkJICog Zmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9u ICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwg Y29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlyZXR1 cm4gTlVMTDsKKwl9CisKKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJh dGNoKTsKKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4 dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJIV9idF9w YXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXJl dHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLwor CisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRp ciwgZmFsc2UpOwogfQogCiAvKgpAQCAtMTgwOSwxMDIgKzE3MDYsNjcgQEAgX2J0X3JlYWRmaXJz dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0 aW9uIGRpcikKICAqIHByZXZpb3VzbHktc2F2ZWQgcmlnaHQgbGluayBvciBsZWZ0IGxpbmsuICBs YXN0Y3VycmJsa25vIGlzIHRoZSBwYWdlIHRoYXQKICAqIHdhcyBjdXJyZW50IGF0IHRoZSBwb2lu dCB3aGVyZSB0aGUgYmxrbm8gbGluayB3YXMgc2F2ZWQsIHdoaWNoIHdlIHVzZSB0bwogICogcmVh c29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxldGlvbnMgZHVyaW5nIGJh Y2t3YXJkcyBzY2Fucy4KLSAqIEluIHRoZSBjb21tb24gY2FzZSB3aGVyZSBzZWl6ZWQ9ZmFsc2Us IGJsa25vIGlzIGVpdGhlciBzby0+Y3VyclBvcy5uZXh0UGFnZQotICogb3Igc28tPmN1cnJQb3Mu cHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJsa25vIGlzIHNvLT5jdXJyUG9zLmN1cnJQYWdlLgorICog Ymxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgbmV4dFBhZ2Ugb3IgcHJldlBhZ2UgKGRlcGVuZGlu ZyBvbiB0aGUgY3VycmVudAorICogc2NhbiBkaXJlY3Rpb24pLCBhbmQgbGFzdGN1cnJibGtubyBp cyB0aGUgcHJpb3IgYmF0Y2gncyBjdXJyUGFnZS4KICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQ b3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3VyclBvcy5idWYgbXVzdAot ICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkgY2FsbGVyIChub3RlIHRo YXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFkIGFnYWluIGluIGFsbW9z dCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0aGF0IHNlaXplZCB0aGUg c2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXplZD10cnVlOyBzdWNoIGEK LSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3VtZW50cyBjb21lIGZyb20g dGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMganVzdCBwYXNzIHVzIHRo ZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAqIHNvLT5jdXJyUG9zLCB3 aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBiZSB1c2VkIHRvIGVuZCB0 aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBjYW4gbmV2ZXIgYmUg YXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJlYWQgbmV4dCBkdXJpbmcg YSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0aGF0Ci0gKiBwYXJ0IG91 dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBjb3JyZWN0IHBhZ2UgdG8g cmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXplZD1mYWxzZSBjYWxsZXIn cyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNzIGJsa25vL3NvLT5jdXJy UG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVhZHkgUF9OT05FLAotICog b3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBvcy5tb3JlTGVmdCBpcyBh bHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3VsZCBiZSBsb2NrZWQgYnkg Y2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCB0 byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3RpbmcgcGFnZSwgYW5kIHdl IHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVyIG9uCi0gKiBzdWNjZXNz IGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2NhbnMsIHdoZW4gd2UgZHJv cCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZBQ1VVTSkuCisgKiBPbiBz dWNjZXNzIGV4aXQsIHJldHVybnMgYmF0Y2ggY29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQg cGFnZSB0aGF0IGhhcworICogYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0uICBJZiB0aGVyZSBh cmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBpbiB0aGUKKyAqIGdpdmVuIHNjYW4gZGlyZWN0aW9u LCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoKLSAqIElmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNo aW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgd2UgaW52YWxpZGF0ZQotICogc28t PmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5nIGl0IHJldGFpbnMgbm8gbG9ja3Mgb3IgcGlucyksIGFu ZCByZXR1cm4gZmFsc2UuCi0gKgotICogV2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEg cGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKLSAqIHN1Y2Nlc3Mgb3IgZmFpbHVy ZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgor ICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qgc2VpemUgdGhlIHNjYW4gYmVmb3JlIGNhbGxp bmcgaGVyZS4gIGJsa25vIGFuZAorICogbGFzdGN1cnJibGtubyBzaG91bGQgY29tZSBmcm9tIHRo ZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJlbGVhc2UgdGhlIHNjYW4gYXMKKyAqIHNvb24gYXMgcG9z c2libGUuCiAgKi8KLXN0YXRpYyBib29sCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKIF9idF9yZWFk bmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkgQmxv Y2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgc2VpemVkKQor CQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBm aXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNj YW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJSW5kZXhTY2FuQmF0 Y2ggbmV3YmF0Y2g7CisJQlRCYXRjaERhdGEgKmJ0bmV3YmF0Y2g7CiAKLQlBc3NlcnQoc28tPmN1 cnJQb3MuY3VyclBhZ2UgPT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwotCUFzc2VydCghKGJs a25vID09IFBfTk9ORSAmJiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwluZXdi YXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKKwlidG5ld2JhdGNoID0gYnRf YmF0Y2hfZGF0YShuZXdiYXRjaCk7CiAKIAkvKgotCSAqIFJlbWVtYmVyIHRoYXQgdGhlIHNjYW4g YWxyZWFkeSByZWFkIGxhc3RjdXJyYmxrbm8sIGEgcGFnZSB0byB0aGUgbGVmdAotCSAqIG9mIGJs a25vIChvciByZW1lbWJlciByZWFkaW5nIGEgcGFnZSB0byB0aGUgcmlnaHQsIGZvciBiYWNrd2Fy ZHMgc2NhbnMpCisJICogbmV3YmF0Y2ggd2lsbCBiZSB0aGUgYmF0Y2ggZm9yIGxhc3RjdXJyYmxr bm8sIGEgcGFnZSB0byB0aGUgbGVmdCBvZgorCSAqIGJsa25vIChvciB0byB0aGUgcmlnaHQsIHdo ZW4gdGhlIHNjYW4gaXMgbW92aW5nIGJhY2t3YXJkcykKIAkgKi8KLQlpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JZWxzZQot CQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0ID0g dHJ1ZTsKKwlidG5ld2JhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCiAJZm9yICg7OykKIAl7CiAJ CVBhZ2UJCXBhZ2U7CiAJCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAKLQkJaWYgKGJsa25vID09IFBf Tk9ORSB8fAotCQkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/Ci0JCQkgIXNvLT5jdXJy UG9zLm1vcmVSaWdodCA6ICFzby0+Y3VyclBvcy5tb3JlTGVmdCkpCi0JCXsKLQkJCS8qIG1vc3Qg cmVjZW50IF9idF9yZWFkcGFnZSBjYWxsIChmb3IgbGFzdGN1cnJibGtubykgZW5kZWQgc2NhbiAq LwotCQkJQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gJiYgIXNl aXplZCk7Ci0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJCV9idF9wYXJh bGxlbF9kb25lKHNjYW4pOwkvKiBpZmYgIXNvLT5uZWVkUHJpbVNjYW4gKi8KLQkJCXJldHVybiBm YWxzZTsKLQkJfQotCi0JCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7Ci0KLQkJLyogcGFyYWxs ZWwgc2NhbiBtdXN0IG5ldmVyIGFjdHVhbGx5IHZpc2l0IHNvLT5jdXJyUG9zIGJsa25vICovCi0J CWlmICghc2VpemVkICYmIHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgotCQkJIV9idF9w YXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCi0JCXsK LQkJCS8qIHdob2xlIHNjYW4gaXMgbm93IGRvbmUgKG9yIGFub3RoZXIgcHJpbWl0aXZlIHNjYW4g cmVxdWlyZWQpICovCi0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJCXJl dHVybiBmYWxzZTsKLQkJfQorCQlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUp LT5uZWVkUHJpbVNjYW4pOworCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FICYmIGxhc3RjdXJyYmxr bm8gIT0gUF9OT05FKTsKIAogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQl7 CiAJCQkvKiByZWFkIGJsa25vLCBidXQgY2hlY2sgZm9yIGludGVycnVwdHMgZmlyc3QgKi8KIAkJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0YnVm KHJlbCwgYmxrbm8sIEJUX1JFQUQpOworCQkJbmV3YmF0Y2gtPmJ1ZiA9IF9idF9nZXRidWYocmVs LCBibGtubywgQlRfUkVBRCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBh dm9pZGluZyByYWNlIChhbHNvIGNoZWNrcyBmb3IgaW50ZXJydXB0cykgKi8KLQkJCXNvLT5jdXJy UG9zLmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAotCQkJCQkJ CQkJCQkJCQkgbGFzdGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IEludmFs aWRCdWZmZXIpCisJCQluZXdiYXRjaC0+YnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQo cmVsLCAmYmxrbm8sCisJCQkJCQkJCQkJCQkJICAgbGFzdGN1cnJibGtubyk7CisJCQlpZiAobmV3 YmF0Y2gtPmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQogCQkJewogCQkJCS8qIG11c3QgaGF2ZSBiZWVu IGEgY29uY3VycmVudCBkZWxldGlvbiBvZiBsZWZ0bW9zdCBwYWdlICovCi0JCQkJQlRTY2FuUG9z SW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0J CQkJcmV0dXJuIGZhbHNlOworCQkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5l d2JhdGNoKTsKKwkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJfQogCi0JCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKG5ld2JhdGNo LT5idWYpOwogCQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJCWxhc3RjdXJyYmxr bm8gPSBibGtubzsKIAkJaWYgKGxpa2VseSghUF9JR05PUkUob3BhcXVlKSkpCkBAIC0xOTEyLDE3 ICsxNzc0LDE3IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051 bWJlciBibGtubywKIAkJCS8qIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1hdGNoZXMgb24gdGhpcyBw YWdlICovCiAJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQkJewotCQkJCS8q IG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0IGlmIHdlIGNhbiBzdG9wICovCi0J CQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIHNl aXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJ CQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJ Ymxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJCQlibGtubyA9IGJ0bmV3YmF0Y2gtPm5l eHRQYWdlOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwg Y2xlYXIgbW9yZUxlZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNj YW4sIGRpciwgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJCQlpZiAo X2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4T2Zm c2V0TnVtYmVyKHBhZ2UpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNv LT5jdXJyUG9zLnByZXZQYWdlOworCQkJCWJsa25vID0gYnRuZXdiYXRjaC0+cHJldlBhZ2U7CiAJ CQl9CiAJCX0KIAkJZWxzZQpAQCAtMTkzNywxOSArMTc5OSwzOSBAQCBfYnRfcmVhZG5leHRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCX0KIAogCQkvKiBubyBt YXRjaGluZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9idF9yZWxidWYocmVsLCBzby0+Y3Vy clBvcy5idWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiByZWxlYXNlZCBieSBfYnRfcmVhZHBh Z2UgKG9yIGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwgbmV3YmF0Y2gtPmJ1Zik7CisJCW5l d2JhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCisJCS8qIENvbnRpbnVlIHRoZSBzY2FuIGlu IHRoaXMgZGlyZWN0aW9uPyAqLworCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCQkoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJCSAhYnRuZXdiYXRjaC0+bW9yZVJpZ2h0IDogIWJ0 bmV3YmF0Y2gtPm1vcmVMZWZ0KSkKKwkJeworCQkJLyoKKwkJCSAqIGJsa25vIF9idF9yZWFkcGFn ZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaCBpZgorCQkJICogc28t Pm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0 KQorCQkJICovCisJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJ LyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICov CisJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKKwkJCSFfYnRfcGFyYWxsZWxf c2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQl7CisJCQlpbmRl eGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsJ CS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0IHNldCAqLworCQl9CisKKwkJZmly c3RwYWdlID0gZmFsc2U7CQkvKiBuZXh0IHBhZ2UgY2Fubm90IGJlIGZpcnN0ICovCiAJfQogCi0J LyoKLQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJl IHRoZSBwaW4pIG9uCi0JICogc28tPmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdl dHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JICovCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQ YWdlID09IGJsa25vKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsK LQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4ocmVsLCBzbyk7CisJLyogX2J0X3JlYWRwYWdl IHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gbmV3YmF0Y2guaXRlbXNbXSAqLworCUFzc2Vy dChidG5ld2JhdGNoLT5jdXJyUGFnZSA9PSBibGtubyk7CisJaW5kZXhhbV91dGlsX2JhdGNoX3Vu bG9jayhzY2FuLCBuZXdiYXRjaCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3YmF0Y2g7 CiB9CiAKIC8qCkBAIC0yMTc1LDI1ICsyMDU3LDIzIEBAIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRp b24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxsZWwgc2NhbiBj YWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAq IEV4aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgpLgogICovCi1z dGF0aWMgYm9vbAotX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9lbmRwb2ludChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoKQogewog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVl IG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCUFzc2VydCgh KChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CiAKIAkvKgogCSAq IFNjYW4gZG93biB0byB0aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMg aXMgYSBzaW1wbGlmaWVkCiAJICogdmVyc2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJICovCi0Jc28t PmN1cnJQb3MuYnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0Jh Y2t3YXJkKGRpcikpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAw LCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChz by0+Y3VyclBvcy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKQog CXsKIAkJLyoKIAkJICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xlIHJlbGF0aW9uLCBhcyBu b3RoaW5nIGZpbmVyIHRvIGxvY2sKQEAgLTIyMDQsNyArMjA4NCw3IEBAIF9idF9lbmRwb2ludChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlyZXR1cm4gZmFsc2U7CiAJ fQogCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0gQnVm ZmVyR2V0UGFnZShmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShw YWdlKTsKIAlBc3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTIyMzAsOSArMjExMCw1IEBA IF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCS8q CiAJICogTm93IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgogCSAq LwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0JCXJldHVybiBm YWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1 cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQsIGRpcik7CiB9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggN2E0NmQwMjQ5Li43NmIzODMwMWEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTE5LDE3ICsxOSwxMyBAQAog CiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25z LmgiCi0jaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9n cmVzcy5oIgotI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKLSNpbmNsdWRlICJsaWIvcXVuaXF1ZS5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3Rh dGljIGludAlfYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKTsK IHN0YXRpYyBpbnQJX2J0X2tlZXBfbmF0dHMoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGxhc3Rs ZWZ0LAogCQkJCQkJICAgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LCBCVFNjYW5JbnNlcnQgaXR1cF9r ZXkpOwogCkBAIC0xNDQsMjM1ICsxNDAsNiBAQCBfYnRfbWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwg SW5kZXhUdXBsZSBpdHVwKQogCXJldHVybiBrZXk7CiB9CiAKLS8qCi0gKiBxc29ydCBjb21wYXJp c29uIGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlzCi0gKi8KLXN0YXRpYyBpbnQKLV9idF9jb21wYXJl X2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCi17Ci0JaW50CQkJYSA9ICooKGNv bnN0IGludCAqKSB2YSk7Ci0JaW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2Yik7Ci0KLQlyZXR1 cm4gcGdfY21wX3MzMihhLCBiKTsKLX0KLQotLyoKLSAqIF9idF9raWxsaXRlbXMgLSBzZXQgTFBf REVBRCBzdGF0ZSBmb3IgaXRlbXMgYW4gaW5kZXhzY2FuIGNhbGxlciBoYXMKLSAqIHRvbGQgdXMg d2VyZSBraWxsZWQKLSAqCi0gKiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJv dWdoIHNvLCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBh bmQga2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUK LSAqIGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCi0gKgotICogQ2FsbGVyIHNob3VsZCBu b3QgaGF2ZSBhIGxvY2sgb24gdGhlIHNvLT5jdXJyUG9zIHBhZ2UsIGJ1dCBtdXN0IGhvbGQgYQot ICogYnVmZmVyIHBpbiB3aGVuICFzby0+ZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGls bCB3b24ndCBiZSBsb2NrZWQuCi0gKiBJdCdsbCBjb250aW51ZSB0byBob2xkIHdoYXRldmVyIHBp bnMgd2VyZSBoZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCi0gKgotICogV2UgbWF0Y2ggaXRlbXMg YnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvIHNl dAotICogTFBfREVBRC4gIElmIHRoZSBzY2FuIGlzIG9uZSB0aGF0IGhvbGRzIGEgYnVmZmVyIHBp biBvbiB0aGUgdGFyZ2V0IHBhZ2UKLSAqIGNvbnRpbnVvdXNseSBmcm9tIGluaXRpYWxseSByZWFk aW5nIHRoZSBpdGVtcyB1bnRpbCBhcHBseWluZyB0aGlzIGZ1bmN0aW9uCi0gKiAoaWYgaXQgaXMg YSAhc28tPmRyb3BQaW4gc2NhbiksIFZBQ1VVTSBjYW5ub3QgaGF2ZSBkZWxldGVkIGFueSBpdGVt cyBvbiB0aGUKLSAqIHBhZ2UsIHNvIHRoZSBwYWdlJ3MgVElEcyBjYW4ndCBoYXZlIGJlZW4gcmVj eWNsZWQgYnkgbm93LiAgVGhlcmUncyBubyByaXNrCi0gKiB0aGF0IHdlJ2xsIGNvbmZ1c2UgYSBu ZXcgaW5kZXggdHVwbGUgdGhhdCBoYXBwZW5zIHRvIHVzZSBhIHJlY3ljbGVkIFRJRAotICogd2l0 aCBhIG5vdy1yZW1vdmVkIHR1cGxlIHdpdGggdGhlIHNhbWUgVElEICh0aGF0IHVzZWQgdG8gYmUg b24gdGhpcyBzYW1lCi0gKiBwYWdlKS4gIFdlIGNhbid0IHJlbHkgb24gdGhhdCBkdXJpbmcgc2Nh bnMgdGhhdCBkcm9wIGJ1ZmZlciBwaW5zIGVhZ2VybHkKLSAqIChzby0+ZHJvcFBpbiBzY2Fucyks IHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgb24KLSAq IHRoZSBwYWdlIExTTiBoYXZpbmcgbm90IGNoYW5nZWQgc2luY2UgYmFjayB3aGVuIF9idF9yZWFk cGFnZSBzYXcgdGhlIHBhZ2UuCi0gKiBXZSB0b3RhbGx5IGdpdmUgdXAgb24gc2V0dGluZyBMUF9E RUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04gY2hhbmdlZC4KLSAqCi0gKiBXZSBnaXZlIHVwIG11 Y2ggbGVzcyBvZnRlbiBkdXJpbmcgIXNvLT5kcm9wUGluIHNjYW5zLCBidXQgaXQgc3RpbGwgaGFw cGVucy4KLSAqIFdlIGNvcGUgd2l0aCBjYXNlcyB3aGVyZSBpdGVtcyBoYXZlIG1vdmVkIHJpZ2h0 IGR1ZSB0byBpbnNlcnRpb25zLiAgSWYgYW4KLSAqIGl0ZW0gaGFzIG1vdmVkIG9mZiB0aGUgY3Vy cmVudCBwYWdlIGR1ZSB0byBhIHNwbGl0LCB3ZSdsbCBmYWlsIHRvIGZpbmQgaXQKLSAqIGFuZCBq dXN0IGdpdmUgdXAgb24gaXQuCi0gKi8KLXZvaWQKLV9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuKQotewotCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVBhZ2UJCXBhZ2U7Ci0J QlRQYWdlT3BhcXVlIG9wYXF1ZTsKLQlPZmZzZXROdW1iZXIgbWlub2ZmOwotCU9mZnNldE51bWJl ciBtYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKLQlib29sCQlraWxs ZWRzb21ldGhpbmcgPSBmYWxzZTsKLQlCdWZmZXIJCWJ1ZjsKLQotCUFzc2VydChudW1LaWxsZWQg PiAwKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydChz Y2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7IC8qIGNhbid0IGJlIGEgYml0bWFwIGluZGV4IHNj YW4gKi8KLQotCS8qIEFsd2F5cyBpbnZhbGlkYXRlIHNvLT5raWxsZWRJdGVtc1tdIGJlZm9yZSBs ZWF2aW5nIHNvLT5jdXJyUG9zICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdl IG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBv cmRlcjsgdGhlCi0JICogbG9vcCBiZWxvdyBleHBlY3RzIHRoaXMgKHdoZW4gbWFya2luZyBwb3N0 aW5nIGxpc3QgdHVwbGVzLCBhdCBsZWFzdCkuCi0JICogc28tPmtpbGxlZEl0ZW1zW10gaXMgbm93 IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgotCSAqIFNjcm9s bGFibGUgY3Vyc29yIHNjYW5zIG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJ RCB0d2ljZS4KLQkgKgotCSAqIFNvcnQgYW5kIHVuaXF1ZS1pZnkgc28tPmtpbGxlZEl0ZW1zW10g dG8gZGVhbCB3aXRoIGFsbCB0aGlzLgotCSAqLwotCWlmIChudW1LaWxsZWQgPiAxKQotCXsKLQkJ cXNvcnQoc28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQsIHNpemVvZihpbnQpLCBfYnRfY29tcGFy ZV9pbnQpOwotCQludW1LaWxsZWQgPSBxdW5pcXVlKHNvLT5raWxsZWRJdGVtcywgbnVtS2lsbGVk LCBzaXplb2YoaW50KSwKLQkJCQkJCQlfYnRfY29tcGFyZV9pbnQpOwotCX0KLQotCWlmICghc28t PmRyb3BQaW4pCi0JewotCQkvKgotCQkgKiBXZSBoYXZlIGhlbGQgdGhlIHBpbiBvbiB0aGlzIHBh Z2Ugc2luY2Ugd2UgcmVhZCB0aGUgaW5kZXggdHVwbGVzLAotCQkgKiBzbyBhbGwgd2UgbmVlZCB0 byBkbyBpcyBsb2NrIGl0LiAgVGhlIHBpbiB3aWxsIGhhdmUgcHJldmVudGVkCi0JCSAqIGNvbmN1 cnJlbnQgVkFDVVVNcyBmcm9tIHJlY3ljbGluZyBhbnkgb2YgdGhlIFRJRHMgb24gdGhlIHBhZ2Uu Ci0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJYnVm ID0gc28tPmN1cnJQb3MuYnVmOwotCQlfYnRfbG9ja2J1ZihyZWwsIGJ1ZiwgQlRfUkVBRCk7Ci0J fQotCWVsc2UKLQl7Ci0JCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOwotCi0JCUFzc2VydCghQlRTY2Fu UG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJYnVmID0gX2J0X2dldGJ1ZihyZWwsIHNvLT5j dXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsKLQotCQlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05B dG9taWMoYnVmKTsKLQkJQXNzZXJ0KHNvLT5jdXJyUG9zLmxzbiA8PSBsYXRlc3Rsc24pOwotCQlp ZiAoc28tPmN1cnJQb3MubHNuICE9IGxhdGVzdGxzbikKLQkJewotCQkJLyogTW9kaWZpZWQsIGdp dmUgdXAgb24gaGludGluZyAqLwotCQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7Ci0JCQlyZXR1cm47 Ci0JCX0KLQotCQkvKiBVbm1vZGlmaWVkLCBoaW50aW5nIGlzIHNhZmUgKi8KLQl9Ci0KLQlwYWdl ID0gQnVmZmVyR2V0UGFnZShidWYpOwotCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsK LQltaW5vZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOwotCW1heG9mZiA9IFBhZ2VHZXRNYXhP ZmZzZXROdW1iZXIocGFnZSk7Ci0KLQkvKiBJdGVyYXRlIHRocm91Z2ggc28tPmtpbGxlZEl0ZW1z W10gaW4gbGVhZiBwYWdlIG9yZGVyICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBudW1LaWxsZWQ7 IGkrKykKLQl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJQlRT Y2FuUG9zSXRlbSAqa2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQkJT2Zm c2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsKLQotCQlBc3NlcnQoaXRlbUlu ZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5j dXJyUG9zLmxhc3RJdGVtKTsKLQkJQXNzZXJ0KGkgPT0gMCB8fAotCQkJICAgb2ZmbnVtID49IHNv LT5jdXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKLQot CQlpZiAob2ZmbnVtIDwgbWlub2ZmKQotCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAq LwotCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKLQkJewotCQkJSXRlbUlkCQlpaWQgPSBQYWdl R2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0JCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1 cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwotCQkJYm9vbAkJa2lsbHR1cGxlID0gZmFsc2U7 Ci0KLQkJCWlmIChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXBsZSkpCi0JCQl7Ci0JCQkJaW50CQkJ cGkgPSBpICsgMTsKLQkJCQlpbnQJCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhp dHVwbGUpOwotCQkJCWludAkJCWo7Ci0KLQkJCQkvKgotCQkJCSAqIE5vdGUgdGhhdCB0aGUgcGFn ZSBtYXkgaGF2ZSBiZWVuIG1vZGlmaWVkIGluIGFsbW9zdCBhbnkgd2F5Ci0JCQkJICogc2luY2Ug d2UgZmlyc3QgcmVhZCBpdCAoaW4gdGhlICFzby0+ZHJvcFBpbiBjYXNlKSwgc28gaXQncwotCQkJ CSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBwb3N0aW5nIGxpc3QgdHVwbGUgd2Fzbid0IGEgcG9zdGlu ZyBsaXN0Ci0JCQkJICogdHVwbGUgd2hlbiB3ZSBmaXJzdCBlbmNvdW50ZXJlZCBpdHMgaGVhcCBU SURzLgotCQkJCSAqLwotCQkJCWZvciAoaiA9IDA7IGogPCBucG9zdGluZzsgaisrKQotCQkJCXsK LQkJCQkJSXRlbVBvaW50ZXIgaXRlbSA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwbGUsIGop OwotCi0JCQkJCWlmICghSXRlbVBvaW50ZXJFcXVhbHMoaXRlbSwgJmtpdGVtLT5oZWFwVGlkKSkK LQkJCQkJCWJyZWFrOwkvKiBvdXQgb2YgcG9zdGluZyBsaXN0IGxvb3AgKi8KLQotCQkJCQkvKgot CQkJCQkgKiBraXRlbSBtdXN0IGhhdmUgbWF0Y2hpbmcgb2ZmbnVtIHdoZW4gaGVhcCBUSURzIG1h dGNoLAotCQkJCQkgKiB0aG91Z2ggb25seSBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlIHBh Z2UgY2FuJ3QKLQkJCQkJICogaGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBtb2RpZmllZAotCQkJCQkg Ki8KLQkJCQkJQXNzZXJ0KGtpdGVtLT5pbmRleE9mZnNldCA9PSBvZmZudW0gfHwgIXNvLT5kcm9w UGluKTsKLQotCQkJCQkvKgotCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJl LgotCQkJCQkgKgotCQkJCQkgKiBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgbm90IGFk dmFuY2luZyBraXRlbSBoZXJlCi0JCQkJCSAqIHdpbGwgcHJldmVudCB1cyBmcm9tIGNvbnNpZGVy aW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKLQkJCQkJICogZnVsbHkgZGVhZCBieSBub3QgbWF0 Y2hpbmcgaXRzIG5leHQgaGVhcCBUSUQgaW4gbmV4dAotCQkJCQkgKiBsb29wIGl0ZXJhdGlvbi4K LQkJCQkJICoKLQkJCQkJICogSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGlzIHRoZSBmaW5h bCBoZWFwIFRJRCBpbgotCQkJCQkgKiB0aGUgcG9zdGluZyBsaXN0IHR1cGxlLCB0aGVuIHR1cGxl IGdldHMga2lsbGVkCi0JCQkJCSAqIHJlZ2FyZGxlc3MgKGkuZS4gd2UgaGFuZGxlIHRoZSBjYXNl IHdoZXJlIHRoZSBsYXN0Ci0JCQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxhc3QgaGVhcCBUSUQg aW4gdGhlIGxhc3QgaW5kZXggdHVwbGUKLQkJCQkJICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVw bGUgc3RpbGwgZ2V0cyBraWxsZWQpLgotCQkJCQkgKi8KLQkJCQkJaWYgKHBpIDwgbnVtS2lsbGVk KQotCQkJCQkJa2l0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW3BpKytd XTsKLQkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIERvbid0IGJvdGhlciBhZHZhbmNpbmcgdGhlIG91 dGVybW9zdCBsb29wJ3MgaW50IGl0ZXJhdG9yIHRvCi0JCQkJICogYXZvaWQgcHJvY2Vzc2luZyBr aWxsZWQgaXRlbXMgdGhhdCByZWxhdGUgdG8gdGhlIHNhbWUKLQkJCQkgKiBvZmZudW0vcG9zdGlu ZyBsaXN0IHR1cGxlLiAgVGhpcyBtaWNyby1vcHRpbWl6YXRpb24gaGFyZGx5Ci0JCQkJICogc2Vl bXMgd29ydGggaXQuICAoRnVydGhlciBpdGVyYXRpb25zIG9mIHRoZSBvdXRlcm1vc3QgbG9vcAot CQkJCSAqIHdpbGwgZmFpbCB0byBtYXRjaCBvbiB0aGlzIHNhbWUgcG9zdGluZyBsaXN0J3MgZmly c3QgaGVhcAotCQkJCSAqIFRJRCBpbnN0ZWFkLCBzbyB3ZSdsbCBhZHZhbmNlIHRvIHRoZSBuZXh0 IG9mZm51bS9pbmRleAotCQkJCSAqIHR1cGxlIHByZXR0eSBxdWlja2x5LikKLQkJCQkgKi8KLQkJ CQlpZiAoaiA9PSBucG9zdGluZykKLQkJCQkJa2lsbHR1cGxlID0gdHJ1ZTsKLQkJCX0KLQkJCWVs c2UgaWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAma2l0ZW0tPmhlYXBUaWQp KQotCQkJCWtpbGx0dXBsZSA9IHRydWU7Ci0KLQkJCS8qCi0JCQkgKiBNYXJrIGluZGV4IGl0ZW0g YXMgZGVhZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeS4gIFNpbmNlIHRoaXMKLQkJCSAqIGhhcHBlbnMg d2hpbGUgaG9sZGluZyBhIGJ1ZmZlciBsb2NrIHBvc3NpYmx5IGluIHNoYXJlZCBtb2RlLAotCQkJ ICogaXQncyBwb3NzaWJsZSB0aGF0IG11bHRpcGxlIHByb2Nlc3NlcyBhdHRlbXB0IHRvIGRvIHRo aXMKLQkJCSAqIHNpbXVsdGFuZW91c2x5LCBsZWFkaW5nIHRvIG11bHRpcGxlIGZ1bGwtcGFnZSBp bWFnZXMgYmVpbmcgc2VudAotCQkJICogdG8gV0FMIChpZiB3YWxfbG9nX2hpbnRzIG9yIGRhdGEg Y2hlY2tzdW1zIGFyZSBlbmFibGVkKSwgd2hpY2gKLQkJCSAqIGlzIHVuZGVzaXJhYmxlLgotCQkJ ICovCi0JCQlpZiAoa2lsbHR1cGxlICYmICFJdGVtSWRJc0RlYWQoaWlkKSkKLQkJCXsKLQkJCQkv KiBmb3VuZCB0aGUgaXRlbS9hbGwgcG9zdGluZyBsaXN0IGl0ZW1zICovCi0JCQkJSXRlbUlkTWFy a0RlYWQoaWlkKTsKLQkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwotCQkJCWJyZWFrOwkJCS8q IG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLwotCQkJfQotCQkJb2ZmbnVtID0gT2Zmc2V0TnVt YmVyTmV4dChvZmZudW0pOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTaW5jZSB0aGlzIGNhbiBiZSBy ZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuCi0JICoKLQkgKiBXaGVu ZXZlciB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MKLQkg KiBCVFBfSEFTX0dBUkJBR0UgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQuICAo Tm90ZSB0aGF0IHdlCi0JICogb25seSByZWx5IG9uIHRoZSBwYWdlLWxldmVsIGZsYWcgaW4gIWhl YXBrZXlzcGFjZSBpbmRleGVzLikKLQkgKi8KLQlpZiAoa2lsbGVkc29tZXRoaW5nKQotCXsKLQkJ b3BhcXVlLT5idHBvX2ZsYWdzIHw9IEJUUF9IQVNfR0FSQkFHRTsKLQkJTWFya0J1ZmZlckRpcnR5 SGludChidWYsIHRydWUpOwotCX0KLQotCWlmICghc28tPmRyb3BQaW4pCi0JCV9idF91bmxvY2ti dWYocmVsLCBidWYpOwotCWVsc2UKLQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7Ci19Ci0KLQogLyoK ICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgbWFuYWdlIGEgc2hhcmVkLW1lbW9yeSBhcmVhIGlu IHdoaWNoIHdlIHRyYWNrCiAgKiBhc3NpZ25tZW50IG9mICJ2YWN1dW0gY3ljbGUgSURzIiB0byBj dXJyZW50bHktYWN0aXZlIGJ0cmVlIHZhY3V1bWluZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnR4bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhs b2cuYwppbmRleCBkZmY3ZDI4NmYuLjNiYzVlNWNjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnR4bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR4bG9nLmMKQEAgLTEwOTUsMTUgKzEwOTUsMTUgQEAgYnRyZWVfbWFzayhjaGFyICpwYWdlZGF0 YSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCS8qCiAJCSAqIEluIGJ0cmVlIGxlYWYgcGFnZXMsIGl0 IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgTFBfRkxBR1Mgd2l0aG91dAogCQkgKiBlbWl0dGlu ZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhlIGxpbmUgcG9pbnRlciBmbGFncy4gU2Vl Ci0JCSAqIF9idF9raWxsaXRlbXMoKSwgX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgor CQkgKiBidGtpbGxpdGVtc2JhdGNoKCksIF9idF9jaGVja191bmlxdWUoKSBmb3IgZGV0YWlscy4K IAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoKIAkgKiBCVFBfSEFTX0dB UkJBR0UgaXMganVzdCBhbiB1bi1sb2dnZWQgaGludCBiaXQuIFNvLCBtYXNrIGl0LiBTZWUKLQkg KiBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIF9idF9raWxsaXRlbXMoKSwgYW5kIF9i dF9jaGVja191bmlxdWUoKQotCSAqIGZvciBkZXRhaWxzLgorCSAqIF9idF9kZWxldGVfb3JfZGVk dXBfb25lX3BhZ2UoKSwgYnRraWxsaXRlbXNiYXRjaCgpLCBhbmQKKwkgKiBfYnRfY2hlY2tfdW5p cXVlKCkgZm9yIGRldGFpbHMuCiAJICovCiAJbWFza29wYXEtPmJ0cG9fZmxhZ3MgJj0gfkJUUF9I QVNfR0FSQkFHRTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1 dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IDlmNTM3 OWI4Ny4uNDRlNDA0NTFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3Nw Z3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC04 OCwxMCArODgsMTEgQEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNj YW4gPSBzcGdiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IHNwZ3Jlc2NhbiwKIAkJLmFtZ2V0dHVw bGUgPSBzcGdnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNi YXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IHNwZ2dldGJpdG1hcCwKIAkJLmFtZW5kc2Nh biA9IHNwZ2VuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5V TEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBO VUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4g PSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGJlZDY1ODdjOC4uNGUwNWJkNzcwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMzUsNyArMTM1LDcgQEAgc3RhdGljIHZvaWQgc2hv d19yZWN1cnNpdmVfdW5pb25faW5mbyhSZWN1cnNpdmVVbmlvblN0YXRlICpyc3RhdGUsCiBzdGF0 aWMgdm9pZCBzaG93X21lbW9pemVfaW5mbyhNZW1vaXplU3RhdGUgKm1zdGF0ZSwgTGlzdCAqYW5j ZXN0b3JzLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2hh c2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwotc3RhdGlj IHZvaWQgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxh aW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X3RpZGJpdG1h cF9pbmZvKEJpdG1hcEhlYXBTY2FuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJRXhwbGFpblN0 YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudChjb25zdCBj aGFyICpxbGFiZWwsIGludCB3aGljaCwKQEAgLTE5NzIsNyArMTk3Miw3IEBAIEV4cGxhaW5Ob2Rl KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+cXVh bCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRl ciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNo ZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRl LCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAJCQlzaG93X3NjYW5f cXVhbCgoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4cXVhbCwKQEAgLTE5ODYsMTUgKzE5 ODYsMTIgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9y cywKIAkJCWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJS b3dzIFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsK LQkJCWlmIChlcy0+YW5hbHl6ZSkKLQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiSGVhcCBGZXRj aGVzIiwgTlVMTCwKLQkJCQkJCQkJCSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMyLCAw LCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNo b3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0Jp dG1hcEluZGV4U2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhTY2FuICopIHBs YW4pLT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFu Y2VzdG9ycywgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7 CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNh c2UgVF9CaXRtYXBIZWFwU2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSGVhcFNjYW4g KikgcGxhbiktPmJpdG1hcHF1YWxvcmlnLApAQCAtMzg1OCwxNSArMzg1NSwxNiBAQCBzaG93X2hh c2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB9CiAKIC8q Ci0gKiBTaG93IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kZXggc2VhcmNoZXMgZm9yIGEKKyAqIFNo b3cgaW5kZXggc2NhbiByZWxhdGVkIGV4ZWN1dG9yIGluc3RydW1lbnRhdGlvbiBmb3IgYQogICog SW5kZXhTY2FuL0luZGV4T25seVNjYW4vQml0bWFwSW5kZXhTY2FuIG5vZGUKICAqLwogc3RhdGlj IHZvaWQKLXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBs YWluU3RhdGUgKmVzKQorc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwg RXhwbGFpblN0YXRlICplcykKIHsKIAlQbGFuCSAgICpwbGFuID0gcGxhbnN0YXRlLT5wbGFuOwog CVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqU2hhcmVkSW5mbyA9IE5VTEw7Ci0JdWlu dDY0CQluc2VhcmNoZXMgPSAwOworCXVpbnQ2NAkJbnNlYXJjaGVzID0gMCwKKwkJCQluaGVhcGZl dGNoZXMgPSAwOwogCiAJaWYgKCFlcy0+YW5hbHl6ZSkKIAkJcmV0dXJuOwpAQCAtMzg4Nyw2ICsz ODg1LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4 cGxhaW5TdGF0ZSAqZXMpCiAJCQkJSW5kZXhPbmx5U2NhblN0YXRlICppbmRleHN0YXRlID0gKChJ bmRleE9ubHlTY2FuU3RhdGUgKikgcGxhbnN0YXRlKTsKIAogCQkJCW5zZWFyY2hlcyA9IGluZGV4 c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQkJCW5oZWFwZmV0Y2hlcyA9IGlu ZGV4c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzOwogCQkJCVNoYXJlZEluZm8g PSBpbmRleHN0YXRlLT5pb3NzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zOTEw LDkgKzM5MDksMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKndpbnN0 cnVtZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwogCiAJCQluc2VhcmNoZXMgKz0g d2luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW5oZWFwZmV0Y2hlcyArPSB3aW5zdHJ1bWVudC0+ bmhlYXBmZXRjaGVzOwogCQl9CiAJfQogCisJaWYgKG5vZGVUYWcocGxhbikgPT0gVF9JbmRleE9u bHlTY2FuKQorCQlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSGVhcCBGZXRjaGVzIiwgTlVMTCwg bmhlYXBmZXRjaGVzLCBlcyk7CisKIAlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSW5kZXggU2Vh cmNoZXMiLCBOVUxMLCBuc2VhcmNoZXMsIGVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMu YwppbmRleCA2MzU2NzljYzEuLjU0YzI0MDNkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMK QEAgLTg4NCw3ICs4ODQsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFj Y2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhlcyIs CiAJCQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5l LT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0 dHVwbGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJlcG9y dChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJ CQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBleGNsdXNp b24gY29uc3RyYWludHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0Ft aS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDkwYTY4YzBkMS4uMGRm YjAxMzM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC00MjgsNyArNDI4LDcgQEAgRXhlY1N1 cHBvcnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0aG5vZGUpCiAJCWNhc2UgVF9JbmRleE9ubHlTY2Fu OgogCiAJCQkvKgotCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IG1hcmsvcmVzdG9y ZS4KKwkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCByZXN0b3JpbmcgYSBtYXJrCiAJ CQkgKi8KIAkJCXJldHVybiBjYXN0Tm9kZShJbmRleFBhdGgsIHBhdGhub2RlKS0+aW5kZXhpbmZv LT5hbWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJ bmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggOWQw NzFlNDk1Li4zZjBjODQ1M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJ bmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04 MTUsMTAgKzgxNSwxMiBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVs YXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9IGZhbHNlOwog CWZvdW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAs IGluZGV4LCAmRGlydHlTbmFwc2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDApOworCWluZGV4X3Nj YW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLCAmRGlydHlTbmFwc2hvdCwg TlVMTCwKKwkJCQkJCQkJIGluZG5rZXlhdHRzLCAwKTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nh biwgc2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKIAotCXdoaWxlIChpbmRleF9nZXRu ZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0aW5nX3Nsb3Qp KQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNj YW5EaXJlY3Rpb24sCisJCQkJCQkJCQlleGlzdGluZ19zbG90KSkKIAl7CiAJCVRyYW5zYWN0aW9u SWQgeHdhaXQ7CiAJCVhMVFdfT3BlcglyZWFzb25fd2FpdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1JlcGxpY2F0aW9uLmMKaW5kZXggMjQ5N2VlN2VkLi4yZjYzNmJhM2UgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0yMDUsNyArMjA1LDcgQEAgUmVsYXRpb25GaW5k UmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJc2tleV9hdHRvZmYg PSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNlYXJjaHNsb3Qp OwogCiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2Fu KHJlbCwgaWR4cmVsLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDApOworCXNjYW4gPSBpbmRl eF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYs IDApOwogCiByZXRyeToKIAlmb3VuZCA9IGZhbHNlOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHJldHJ5 OgogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkv KiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNj YW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhf Z2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7CiAJ CS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMg cHJpbWFyeSBrZXkgb3IKQEAgLTY2NiwxMiArNjY2LDEyIEBAIFJlbGF0aW9uRmluZERlbGV0ZWRU dXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBub3QgeWV0IGNv bW1pdHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2NhbiBhcmUKIAkg KiBleGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygpLgogCSAqLwot CXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIFNuYXBzaG90QW55LCBOVUxMLCBz a2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgZmFs c2UsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIAlpbmRleF9yZXNjYW4o c2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhl IHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRp cmVjdGlvbiwgc2NhbnNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh biwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKIAl7CiAJCS8qCiAJCSAqIEF2b2lk IGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFyeSBrZXkgb3IK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwppbmRleCAyY2E4MjJj ZjguLmE4OTc3Y2NhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1h cEluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNj YW4uYwpAQCAtMjAyLDYgKzIwMiw3IEBAIEV4ZWNFbmRCaXRtYXBJbmRleFNjYW4oQml0bWFwSW5k ZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBCaXRtYXBJbmRl eFNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5iaXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJQXNzZXJ0KG5vZGUt PmJpc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzID09IDApOwogCX0KIAogCS8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBmODRkYjA0NzYuLjg0YmZmNjBj ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwor KysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC0zNCwxNCAr MzQsMTIgQEAKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90 YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3R1cGRlc2MuaCIKLSNpbmNsdWRlICJhY2Nlc3Mv dmlzaWJpbGl0eW1hcC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4b25seXNj YW4uaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSW5kZXhzY2FuLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKLSNpbmNsdWRlICJzdG9yYWdl L3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAKQEAgLTY1LDcgKzYzLDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2Fu U3RhdGUgKm5vZGUpCiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAJSW5kZXhTY2FuRGVzYyBz Y2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAKIAkv KgogCSAqIGV4dHJhY3QgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gaW5kZXggc2NhbiBub2Rl CkBAIC05MCwxOCArODcsMTQgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5v ZGUpCiAJCSAqIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4o bm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0 aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJCQkJ CQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfSW5zdHJ1 bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJICAgbm9k ZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CiAKIAkJbm9kZS0+aW9zc19TY2FuRGVzYyA9IHNjYW5k ZXNjOwotCi0KLQkJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQkJbm9kZS0+ aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZl ciA9IEludmFsaWRCdWZmZXI7CisJCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50 X2l0dXApOwogCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9y IHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKQEAgLTExOCw3OCArMTExLDEwIEBAIEluZGV4 T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogT0ssIG5vdyB0aGF0 IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGls ZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5kZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxM KQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwg bm9kZS0+aW9zc19UYWJsZVNsb3QpKQogCXsKLQkJYm9vbAkJdHVwbGVfZnJvbV9oZWFwID0gZmFs c2U7Ci0KIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkvKgotCQkgKiBXZSBjYW4gc2tp cCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24KLQkJ ICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJvZHkuICBJbiBh bnkgY2FzZSwKLQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAgdHVw bGUgYXMgdGhlIGRhdGEgc291cmNlLgotCQkgKgotCQkgKiBOb3RlIG9uIE1lbW9yeSBPcmRlcmlu ZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QKLQkJICogbG9jayB0 aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRoZSByZXN1bHQgd2UgcmVh ZAotCQkgKiBoZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgSG93ZXZlciwgaXQgY2FuJ3Qg YmUgc3RhbGUgZW5vdWdoIHRvCi0JCSAqIG1hdHRlci4KLQkJICoKLQkJICogV2UgbmVlZCB0byBk ZXRlY3QgY2xlYXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCByaWdodCBhd2F5LAotCQkg KiBiZWNhdXNlIHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdlIGJ1dCBub3Qg dmlzaWJsZS4gVGhlCi0JCSAqIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0aGlzIHNjYW4gKHVzaW5n IGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4Ci0JCSAqIGJ1ZmZlcikgaXMgc2VyaWFsaXplZCB3 aXRoIHRoZSBpbnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleAotCQkgKiAodXNpbmcgYW4g ZXhjbHVzaXZlIGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikuIEJlY2F1c2UgdGhlIFZNIGJpdAot CQkgKiBpcyBjbGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgaW5kZXgsIGFuZCBsb2NraW5nL3Vu bG9ja2luZyBvZiB0aGUKLQkJICogaW5kZXggcGFnZSBhY3RzIGFzIGEgZnVsbCBtZW1vcnkgYmFy cmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZQotCQkgKiBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUg YSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCi0JCSAqCi0JCSAqIERlbGV0ZXMgZG8gbm90IHVwZGF0 ZSB0aGUgaW5kZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBvdXQKLQkJICogdGhlIFRJ RCksIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlzIG5vdAotCQkg KiBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0IGJlbG93LCBhbmQgd2UgbWF5IHNlZSBhIHZhbHVl IHRoYXQgaXMKLQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2UgZG9uJ3QgY2Fy ZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0Ci0JCSAqIGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlz IHN0aWxsIHZpc2libGUgdW50aWwgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIGNvbW1p dHMgb3IgdGhlIHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgotCQkgKiB0cmFuc2FjdGlvbiku IEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwgaGF2ZQotCQkg KiBiZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVhcmlu ZyB0aGUgYml0LgotCQkgKiBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFwc2hvdCB0aGF0IGluY2x1 ZGVzIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZSBpbnZp c2libGUpLCB3ZSBtdXN0IGhhdmUgYWNxdWlyZWQKLQkJICogUHJvY0FycmF5TG9jayBhZnRlciB0 aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KLQkJICoKLQkJICogSXQncyB3b3J0 aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBuZWVkaW5nIHRvIGxvY2sK LQkJICogdGhlIFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgY29udGVu dGlvbi4KLQkJICovCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhlYXBSZWxhdGlv biwKLQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJJm5vZGUt Pmlvc3NfVk1CdWZmZXIpKQotCQl7Ci0JCQkvKgotCQkJICogUmF0cywgd2UgaGF2ZSB0byB2aXNp dCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgotCQkJICovCi0JCQlJbnN0ckNvdW50VHVw bGVzMihub2RlLCAxKTsKLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuZGVzYywgbm9kZS0+ aW9zc19UYWJsZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5 IG5leHQgaW5kZXggZW50cnkgKi8KLQotCQkJRXhlY0NsZWFyVHVwbGUobm9kZS0+aW9zc19UYWJs ZVNsb3QpOwotCi0JCQkvKgotCQkJICogT25seSBNVkNDIHNuYXBzaG90cyBhcmUgc3VwcG9ydGVk IGhlcmUsIHNvIHRoZXJlIHNob3VsZCBiZSBubwotCQkJICogbmVlZCB0byBrZWVwIGZvbGxvd2lu ZyB0aGUgSE9UIGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcwotCQkJICogYmVlbiBmb3Vu ZC4gIElmIHdlIGRpZCB3YW50IHRvIGFsbG93IHRoYXQsIHdlJ2QgbmVlZCB0byBrZWVwCi0JCQkg KiBtb3JlIHN0YXRlIHRvIHJlbWVtYmVyIG5vdCB0byBjYWxsIGluZGV4X2dldG5leHRfdGlkIG5l eHQgdGltZS4KLQkJCSAqLwotCQkJaWYgKHNjYW5kZXNjLT54c19oZWFwX2NvbnRpbnVlKQotCQkJ CWVsb2coRVJST1IsICJub24tTVZDQyBzbmFwc2hvdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5k ZXgtb25seSBzY2FucyIpOwotCi0JCQkvKgotCQkJICogTm90ZTogYXQgdGhpcyBwb2ludCB3ZSBh cmUgaG9sZGluZyBhIHBpbiBvbiB0aGUgaGVhcCBwYWdlLCBhcwotCQkJICogcmVjb3JkZWQgaW4g c2NhbmRlc2MtPnhzX2NidWYuICBXZSBjb3VsZCByZWxlYXNlIHRoYXQgcGluIG5vdywKLQkJCSAq IGJ1dCBpdCdzIG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8gZG8gc28uICBUaGUgbmV4 dCBpbmRleAotCQkJICogZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0IHRvIHRoZSBzYW1lIGhl YXAgcGFnZS4KLQkJCSAqLwotCi0JCQl0dXBsZV9mcm9tX2hlYXAgPSB0cnVlOwotCQl9Ci0KIAkJ LyoKIAkJICogRmlsbCB0aGUgc2NhbiB0dXBsZSBzbG90IHdpdGggZGF0YSBmcm9tIHRoZSBpbmRl eC4gIFRoaXMgbWlnaHQgYmUKIAkJICogcHJvdmlkZWQgaW4gZWl0aGVyIEhlYXBUdXBsZSBvciBJ bmRleFR1cGxlIGZvcm1hdC4gIENvbmNlaXZhYmx5IGFuCkBAIC0yMzgsMTYgKzE2Myw2IEBAIElu ZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJZXJlcG9ydChFUlJPUiwK IAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJy bXNnKCJsb3NzeSBkaXN0YW5jZSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXgt b25seSBzY2FucyIpKSk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZGlkbid0IGFjY2VzcyB0aGUgaGVh cCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHRha2UgYSBwcmVkaWNhdGUKLQkJICogbG9jayBleHBsaWNp dGx5LCBhcyBpZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZSBsZXZlbC4KLQkJ ICovCi0JCWlmICghdHVwbGVfZnJvbV9oZWFwKQotCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2NhbmRl c2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlk KSwKLQkJCQkJCQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOwotCiAJCXJldHVybiBzbG90OwogCX0K IApAQCAtNDA3LDEzICszMjIsNiBAQCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2Fu U3RhdGUgKm5vZGUpCiAJaW5kZXhSZWxhdGlvbkRlc2MgPSBub2RlLT5pb3NzX1JlbGF0aW9uRGVz YzsKIAlpbmRleFNjYW5EZXNjID0gbm9kZS0+aW9zc19TY2FuRGVzYzsKIAotCS8qIFJlbGVhc2Ug Vk0gYnVmZmVyIHBpbiwgaWYgYW55LiAqLwotCWlmIChub2RlLT5pb3NzX1ZNQnVmZmVyICE9IElu dmFsaWRCdWZmZXIpCi0JewotCQlSZWxlYXNlQnVmZmVyKG5vZGUtPmlvc3NfVk1CdWZmZXIpOwot CQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0KIAkvKgogCSAqIFdo ZW4gZW5kaW5nIGEgcGFyYWxsZWwgd29ya2VyLCBjb3B5IHRoZSBzdGF0aXN0aWNzIGdhdGhlcmVk IGJ5IHRoZQogCSAqIHdvcmtlciBiYWNrIGludG8gc2hhcmVkIG1lbW9yeSBzbyB0aGF0IGl0IGNh biBiZSBwaWNrZWQgdXAgYnkgdGhlIG1haW4KQEAgLTQzMyw2ICszNDEsNyBAQCBFeGVjRW5kSW5k ZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2 ZSBhIG5ldyBJbmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdp bnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7 CisJCXdpbnN0cnVtZW50LT5uaGVhcGZldGNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50LT5u aGVhcGZldGNoZXM7CiAJfQogCiAJLyoKQEAgLTc4OCwxMyArNjk3LDEyIEBAIEV4ZWNJbmRleE9u bHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5p b3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1 cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJ CQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJCQkJCQkJCSBub2RlLT5pb3NzX0lu c3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9k ZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7Ci0Jbm9kZS0+aW9zc19T Y2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52 YWxpZEJ1ZmZlcjsKKwlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsK IAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUg cmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCkBAIC04NTQsMTIgKzc2MiwxMiBAQCBFeGVjSW5kZXhP bmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCiAJbm9k ZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5z c19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJ CQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgbm9kZS0+aW9z c19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJ IG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotCW5vZGUtPmlv c3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7CisJQXNzZXJ0KG5vZGUtPmlvc3NfU2Nh bkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8g Y2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IDM2MzIwZDdkMi4uNjc4MjI5NDdhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMDcsNyArMTA3LDcgQEAgSW5kZXhOZXh0 KEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXgg c2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2Mg PSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkg ICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLCBmYWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAg bm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5cywK QEAgLTEyOCw3ICsxMjgsNyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJLyoK IAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1 cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlv biwgc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGly ZWN0aW9uLCBzbG90KSkKIAl7CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTIwMyw3 ICsyMDMsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJ ICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBi ZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNz LnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywK KwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSAgIGVz dGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJ CQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0yNjAsNyArMjYwLDcgQEAgSW5kZXhO ZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIEZldGNoIG5leHQgdHVw bGUgZnJvbSB0aGUgaW5kZXguCiAJCSAqLwogbmV4dF9pbmRleHR1cGxlOgotCQlpZiAoIWluZGV4 X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQlp ZiAoIXRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rp b24sIHNsb3QpKQogCQl7CiAJCQkvKgogCQkJICogTm8gbW9yZSB0dXBsZXMgZnJvbSB0aGUgaW5k ZXguICBCdXQgd2Ugc3RpbGwgbmVlZCB0byBkcmFpbiBhbnkKQEAgLTgxMiw2ICs4MTIsNyBAQCBF eGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhh dmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3 aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7 CisJCUFzc2VydChub2RlLT5pc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzID09IDApOwogCX0K IAogCS8qCkBAIC0xNzIzLDcgKzE3MjQsNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJ bmRleFNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2Jl Z2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBu b2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywg ZmFsc2UsCiAJCQkJCQkJCSBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlz c19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKQEAgLTE3 ODcsNyArMTc4OCw3IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0 YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3Bh cmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlzc19S ZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJ CQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5L ZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZU1lcmdlam9pbi5jCmluZGV4IGNiY2FlNGM3MC4uOWI0M2VkOGI0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZU1lcmdlam9pbi5jCkBAIC01NCw4ICs1NCw4IEBACiAgKgkJdGhlIGlubmVyICI1 J3MiLiBUaGlzIHJlcXVpcmVzIHJlcG9zaXRpb25pbmcgdGhlIGlubmVyICJjdXJzb3IiCiAgKgkJ dG8gcG9pbnQgYXQgdGhlIGZpcnN0IGlubmVyICI1Ii4gVGhpcyBpcyBkb25lIGJ5ICJtYXJraW5n IiB0aGUKICAqCQlmaXJzdCBpbm5lciA1IHNvIHdlIGNhbiByZXN0b3JlIHRoZSAiY3Vyc29yIiB0 byBpdCBiZWZvcmUgam9pbmluZwotICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgYWNj ZXNzIG1ldGhvZCBpbnRlcmZhY2UgcHJvdmlkZXMKLSAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCBy ZXN0b3JlIHRvIGEgdHVwbGUuCisgKgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSBpbmRl eGJhdGNoLmMgaW50ZXJmYWNlIHByb3ZpZGVzCisgKgkJcm91dGluZXMgdG8gbWFyayBhbmQgcmVz dG9yZSB0byBhIHR1cGxlIGR1cmluZyBpbmRleCBzY2Fucy4KICAqCiAgKgogICoJCUVzc2VudGlh bCBvcGVyYXRpb24gb2YgdGhlIG1lcmdlIGpvaW4gYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwppbmRleCA2N2Q5ZGMzNWYuLmQ2MWMwYjZm MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC00Myw3ICs0Myw3IEBA CiAvKiBXaGV0aGVyIHdlIGFyZSBsb29raW5nIGZvciBwbGFpbiBpbmRleHNjYW4sIGJpdG1hcCBz Y2FuLCBvciBlaXRoZXIgKi8KIHR5cGVkZWYgZW51bQogewotCVNUX0lOREVYU0NBTiwJCQkJLyog bXVzdCBzdXBwb3J0IGFtZ2V0dHVwbGUgKi8KKwlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3Vw cG9ydCBhbWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggKi8KIAlTVF9CSVRNQVBTQ0FOLAkJCQkvKiBt dXN0IHN1cHBvcnQgYW1nZXRiaXRtYXAgKi8KIAlTVF9BTllTQ0FOLAkJCQkJLyogZWl0aGVyIGlz IG9rYXkgKi8KIH0gU2NhblR5cGVDb250cm9sOwpAQCAtNzQ3LDcgKzc0Nyw3IEBAIGdldF9pbmRl eF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXsKIAkJSW5kZXhQ YXRoICAqaXBhdGggPSAoSW5kZXhQYXRoICopIGxmaXJzdChsYyk7CiAKLQkJaWYgKGluZGV4LT5h bWhhc2dldHR1cGxlKQorCQlpZiAoaW5kZXgtPmFtaGFzZ2V0YmF0Y2gpCiAJCQlhZGRfcGF0aChy ZWwsIChQYXRoICopIGlwYXRoKTsKIAogCQlpZiAoaW5kZXgtPmFtaGFzZ2V0Yml0bWFwICYmCkBA IC04MzUsNyArODM1LDcgQEAgYnVpbGRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCwKIAlzd2l0Y2ggKHNjYW50eXBlKQogCXsKIAkJY2FzZSBTVF9JTkRFWFND QU46Ci0JCQlpZiAoIWluZGV4LT5hbWhhc2dldHR1cGxlKQorCQkJaWYgKCFpbmRleC0+YW1oYXNn ZXRiYXRjaCkKIAkJCQlyZXR1cm4gTklMOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RfQklUTUFQU0NB TjoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBiMmZiZDZhMDguLjY2NWRk Y2E1MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtMzEwLDExICszMTAs MTEgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9i amVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNlYXJjaGFycmF5ID0gYW1yb3V0 aW5lLT5hbXNlYXJjaGFycmF5OwogCQkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBhbXJvdXRpbmUt PmFtc2VhcmNobnVsbHM7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGFtcm91dGluZS0+YW1j YW5wYXJhbGxlbDsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gKGFtcm91dGluZS0+YW1nZXR0 dXBsZSAhPSBOVUxMKTsKKwkJCQlpbmZvLT5hbWhhc2dldGJhdGNoID0gKGFtcm91dGluZS0+YW1n ZXRiYXRjaCAhPSBOVUxMIHx8CisJCQkJCQkJCQkgICBhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0g TlVMTCk7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJvdXRpbmUtPmFtZ2V0Yml0bWFw ICE9IE5VTEwgJiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxlYW0tPnNjYW5fYml0bWFwX25leHRf dHVwbGUgIT0gTlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSAoYW1yb3V0aW5lLT5hbW1h cmtwb3MgIT0gTlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRpbmUtPmFtcmVzdHJwb3MgIT0gTlVM TCk7CisJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0aW5lLT5hbWdldGJhdGNoICE9IE5V TEw7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBhbXJvdXRpbmUtPmFtY29zdGVzdGltYXRl OwogCQkJCUFzc2VydChpbmZvLT5hbWNvc3Rlc3RpbWF0ZSAhPSBOVUxMKTsKIApAQCAtNDExLDcg KzQxMSw3IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRp b25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGZh bHNlOwogCQkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNhbnBh cmFsbGVsID0gZmFsc2U7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IGZhbHNlOworCQkJCWlu Zm8tPmFtaGFzZ2V0YmF0Y2ggPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWhhc2dldGJpdG1hcCA9IGZh bHNlOwogCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGZhbHNlOwogCQkJCWluZm8tPmFtY29zdGVz dGltYXRlID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24u YwppbmRleCAwYjFkODBiNWIuLjc2YjBkMDM1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcmVsYXRpb24uYwpAQCAtODkwLDcgKzg5MCw4IEBAIElzSW5kZXhVc2FibGVGb3JS ZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0ck1hcCAqYXR0cm1hcCkKIAkg KiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBs ZSIsIHdoaWNoIHdpbGwKIAkgKiBiZSB1c2VkIGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBT ZWUgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleCgpLgogCSAqLwotCWlmIChHZXRJbmRleEFt Um91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9 PSBOVUxMKQorCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVs YW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmCisJCUdldEluZGV4QW1Sb3V0aW5lQnlB bUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldGJhdGNoID09IE5VTEwpCiAJ CXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2FtdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKaW5k ZXggYzgxZmI2MWEwLi5kZGZkMWI1NWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9hbXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwpAQCAtMzYz LDEwICszNjMsMTEgQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywK IAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNsdXN0ZXJhYmxlKTsKIAogCQkJY2FzZSBB TVBST1BfSU5ERVhfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxl ID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxl ICE9IE5VTEwgfHwKKwkJCQkJCQkgICByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCiAJ CQljYXNlIEFNUFJPUF9CSVRNQVBfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5h bWdldGJpdG1hcCA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+ YW1nZXRiaXRtYXAgIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9QX0JBQ0tXQVJEX1NDQU46CiAJ CQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5iYWNrd2FyZCk7CkBAIC0zOTIsNyArMzkz LDggQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCVBHX1JF VFVSTl9CT09MKHJvdXRpbmUtPmFtY2FubXVsdGljb2wpOwogCiAJCWNhc2UgQU1QUk9QX0NBTl9F WENMVURFOgotCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0dXBsZSA/IHRydWUgOiBm YWxzZSk7CisJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwgfHwK KwkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJY2FzZSBBTVBST1Bf Q0FOX0lOQ0xVREU6CiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmluY2x1ZGUpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCBkNGRhMGU4ZGUuLjZkODBhZTAwMyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTEwMiw3ICsxMDIsNiBAQAogI2luY2x1ZGUgImFjY2Vz cy9naW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFi bGVhbS5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWMuaCIKQEAgLTcxMDQsMTAgKzcxMDMsNiBAQCBn ZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJYm9vbAkJaGF2 ZV9kYXRhID0gZmFsc2U7CiAJU25hcHNob3REYXRhIFNuYXBzaG90Tm9uVmFjdXVtYWJsZTsKIAlJ bmRleFNjYW5EZXNjIGluZGV4X3NjYW47Ci0JQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZm ZXI7Ci0JQmxvY2tOdW1iZXIgbGFzdF9oZWFwX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwot CWludAkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzID0gMDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAJRGF0 dW0JCXZhbHVlc1tJTkRFWF9NQVhfS0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlT XTsKIAlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CkBAIC03MTU1LDYwICs3MTUwLDI2IEBAIGdl dF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkgKiBhIGh1Z2Ug YW1vdW50IG9mIHRpbWUgaGVyZSwgc28gd2UgZ2l2ZSB1cCBvbmNlIHdlJ3ZlIHJlYWQgdG9vIG1h bnkgaGVhcAogCSAqIHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwgdGhlIGNh bGxlciB3aWxsIGVuZCB1cCB1c2luZwogCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVlIGlzIHJl Y29yZGVkIGluIHBnX3N0YXRpc3RpYy4KKwkgKgorCSAqIFhYWCBUaGlzIGNhbid0IHdvcmsgd2l0 aCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2UsCisJICogd2hpY2gg c2ltcGx5IHdvbid0IHJldHVybiBhIHR1cGxlIHRoYXQgaXNuJ3QgdmlzaWJsZSB0byBvdXIgc25h cHNob3QuCisJICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgbmVlZCBzb21lIGtpbmQg b2YgY2FsbGJhY2sgdGhhdCBwcm92aWRlcworCSAqIGEgd2F5IGZvciB0aGUgc2NhbiB0byBnaXZl IHVwIHdoZW4gdGhlIGNvc3RzIHN0YXJ0IHRvIGdldCBvdXQgb2YgaGFuZC4KIAkgKi8KIAlJbml0 Tm9uVmFjdXVtYWJsZVNuYXBzaG90KFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwKIAkJCQkJCQkgIEds b2JhbFZpc1Rlc3RGb3IoaGVhcFJlbCkpOwogCi0JaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2Nh bihoZWFwUmVsLCBpbmRleFJlbCwKKwlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBS ZWwsIGluZGV4UmVsLCB0cnVlLAogCQkJCQkJCQkgJlNuYXBzaG90Tm9uVmFjdXVtYWJsZSwgTlVM TCwKIAkJCQkJCQkJIDEsIDApOwotCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICov Ci0JaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQoaW5kZXhfc2Nhbi0+ eHNfd2FudF9pdHVwKTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIDEsIE5V TEwsIDApOwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVjaWZpZWQgZGlyZWN0 aW9uICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRleF9zY2FuLCBpbmRl eHNjYW5kaXIpKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5k ZXhfc2NhbiwgaW5kZXhzY2FuZGlyLCB0YWJsZXNsb3QpKQogCXsKLQkJQmxvY2tOdW1iZXIgYmxv Y2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0KLQkJaWYgKCFWTV9BTExfVklT SUJMRShoZWFwUmVsLAotCQkJCQkJCWJsb2NrLAotCQkJCQkJCSZ2bWJ1ZmZlcikpCi0JCXsKLQkJ CS8qIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eSAq LwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4sIHRhYmxlc2xvdCkpCi0JCQl7 Ci0JCQkJLyoKLQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LCBz byB3ZSBuZWVkIHRvCi0JCQkJICogYWR2YW5jZSB0byB0aGUgbmV4dCBlbnRyeS4gIEJlZm9yZSBk b2luZyBzbywgY291bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2ZSB1cCBpZiB3 ZSd2ZSBkb25lIHRvbyBtYW55LgotCQkJCSAqCi0JCQkJICogV2UgZG9uJ3QgY2hhcmdlIGEgcGFn ZSBmZXRjaCBpZiB0aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFnZQotCQkJCSAqIGFzIHRoZSBwcmV2 aW91cyB0dXBsZS4gIFRoaXMgaXMgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLAotCQkJCSAqIHNp bmNlIG90aGVyIHJlY2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFyZSBwcm9iYWJseSBzdGlsbCBpbgot CQkJCSAqIGJ1ZmZlcnMgdG9vOyBidXQgaXQncyBnb29kIGVub3VnaCBmb3IgdGhpcyBoZXVyaXN0 aWMuCi0JCQkJICovCi0jZGVmaW5lIFZJU0lURURfUEFHRVNfTElNSVQgMTAwCi0KLQkJCQlpZiAo YmxvY2sgIT0gbGFzdF9oZWFwX2Jsb2NrKQotCQkJCXsKLQkJCQkJbGFzdF9oZWFwX2Jsb2NrID0g YmxvY2s7Ci0JCQkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzKys7Ci0JCQkJCWlmIChuX3Zpc2l0ZWRf aGVhcF9wYWdlcyA+IFZJU0lURURfUEFHRVNfTElNSVQpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0K LQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5 ICovCi0JCQl9Ci0KLQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUg Zm9yIGFueXRoaW5nICovCi0JCQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwotCi0JCQkvKgot CQkJICogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB2aXNpYmxl IHR1cGxlIGluCi0JCQkgKiB0aGUgSE9UIGNoYWluOyBpZiBhbnkgYXJlIHZpc2libGUsIHRoYXQn cyBnb29kIGVub3VnaC4KLQkJCSAqLwotCQl9CisJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQg dGhlIGhlYXAgdHVwbGUgZm9yIGFueXRoaW5nICovCisJCUV4ZWNDbGVhclR1cGxlKHRhYmxlc2xv dCk7CiAKIAkJLyoKIAkJICogV2UgZXhwZWN0IHRoYXQgdGhlIGluZGV4IHdpbGwgcmV0dXJuIGRh dGEgaW4gSW5kZXhUdXBsZSBub3QKQEAgLTcyNDEsOCArNzIwMiw2IEBAIGdldF9hY3R1YWxfdmFy aWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHZt YnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZmZXIpOwogCWlu ZGV4X2VuZHNjYW4oaW5kZXhfc2Nhbik7CiAKIAlyZXR1cm4gaGF2ZV9kYXRhOwpkaWZmIC0tZ2l0 IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJp ZnlfbmJ0cmVlLmMKaW5kZXggYjc0YWI1ZjdhLi4wNjU1MzYwOWIgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKKysrIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9u YnRyZWUuYwpAQCAtMzkzLDcgKzM5Myw3IEBAIGJ0X2NoZWNrX2V2ZXJ5X2xldmVsKFJlbGF0aW9u IHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFwa2V5c3BhY2UsCiAJCQkgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsKSk7CiAKIAkvKgotCSAqIFRoaXMgYXNzZXJ0aW9uIG1hdGNoZXMg dGhlIG9uZSBpbiBpbmRleF9nZXRuZXh0X3RpZCgpLiAgU2VlIHBhZ2UKKwkgKiBUaGlzIGFzc2Vy dGlvbiBtYXRjaGVzIHRoZSBvbmUgaW4gaGVhcGFtX2JhdGNoX2dldG5leHQoKS4gIFNlZSBwYWdl CiAJICogcmVjeWNsaW5nLyJ2aXNpYmxlIHRvIGV2ZXJ5b25lIiBub3RlcyBpbiBuYnRyZWUgUkVB RE1FLgogCSAqLwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CmRp ZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBiL2NvbnRyaWIvYmxvb20vYmx1dGls cy5jCmluZGV4IDUxMTFjZGM2ZC4uZWE3ZDA5OGFhIDEwMDY0NAotLS0gYS9jb250cmliL2Jsb29t L2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwpAQCAtMTQ2LDEwICsxNDYs MTEgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJsYmVn aW5zY2FuLAogCQkuYW1yZXNjYW4gPSBibHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAor CQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFt Z2V0Yml0bWFwID0gYmxnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBibGVuZHNjYW4sCi0JCS5h bW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0g TlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxs ZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5k ZXggZjQ4ZGEzMTg1Li4yMTNhMDVhZDggMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFt LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtMTY3LDEwICsxNjcsMTEg QEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKICAgICBhbWJlZ2luc2Nhbl9mdW5jdGlv biBhbWJlZ2luc2NhbjsKICAgICBhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKICAgICBhbWdl dHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFt Z2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbWtp bGxpdGVtc2JhdGNoX2Z1bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7CS8qIGNhbiBiZSBOVUxMICov CiAgICAgYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7ICAgLyogY2FuIGJlIE5VTEwg Ki8KICAgICBhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotICAgIGFtbWFya3Bvc19mdW5j dGlvbiBhbW1hcmtwb3M7ICAgICAgIC8qIGNhbiBiZSBOVUxMICovCi0gICAgYW1yZXN0cnBvc19m dW5jdGlvbiBhbXJlc3RycG9zOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbXBvc3Jlc2V0 X2Z1bmN0aW9uIGFtcG9zcmVzZXQ7IC8qIGNhbiBiZSBOVUxMICovCiAKICAgICAvKiBpbnRlcmZh Y2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KICAgICBhbWVz dGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8q IGNhbiBiZSBOVUxMICovCkBAIC02NzgsNiArNjc5LDM4IEBAIGFtYmVnaW5zY2FuIChSZWxhdGlv biBpbmRleFJlbGF0aW9uLAogICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9mdW5jdGlvbj4gZG9l cyBsaXR0bGUgYmV5b25kIG1ha2luZyB0aGF0IGNhbGwgYW5kIHBlcmhhcHMKICAgIGFjcXVpcmlu ZyBsb2NrczsKICAgIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyBvZiBpbmRleC1zY2FuIHN0YXJ0dXAg YXJlIGluIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+LgorICAgSW5kZXggYWNjZXNzIG1l dGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJm YWNlCisgICBtdXN0IGFsc28gc2V0IHRoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBzY2FuIGRl c2NyaXB0b3I6CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDttYXhpdGVtc2JhdGNoPC9saXRlcmFsPjogdGhlIG1h eGltdW0gbnVtYmVyIG9mIGl0ZW1zCisgICAgICB0aGF0IGNhbiBhcHBlYXIgaW4gYSBzaW5nbGUg YmF0Y2ggKHR5cGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGluZGV4IHBhZ2UKKyAgICAgIHNpemUs IGUuZy4sIDxsaXRlcmFsPk1heEluZGV4VHVwbGVzUGVyUGFnZTwvbGl0ZXJhbD4pLgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemU8L2xpdGVyYWw+OiB0 aGUKKyAgICAgIDxmdW5jdGlvbj5NQVhBTElHTjwvZnVuY3Rpb24+J2Qgc2l6ZSBvZiB0aGUgaW5k ZXggQU0ncyBwZXItYmF0Y2ggb3BhcXVlCisgICAgICBhcmVhLiAgRWFjaCBiYXRjaCBhbGxvY2F0 aW9uIHJlc2VydmVzIHRoaXMgbXVjaCBzcGFjZSBpbW1lZGlhdGVseSBiZWZvcmUKKyAgICAgIHRo ZSA8c3RydWN0bmFtZT5JbmRleFNjYW5CYXRjaERhdGE8L3N0cnVjdG5hbWU+IHBvaW50ZXIsIGZv ciB1c2UgYnkgdGhlCisgICAgICBpbmRleCBBTSB0byBzdG9yZSBwZXItcGFnZSBuYXZpZ2F0aW9u IHN0YXRlIChlLmcuLCBzaWJsaW5nIHBhZ2UgbGlua3MpLgorICAgICAgVGhlIGluZGV4IEFNIHNo b3VsZCBwcm92aWRlIGFuIGlubGluZSBhY2Nlc3NvciBmdW5jdGlvbiB0byByZXRyaWV2ZSBhCisg ICAgICBwb2ludGVyIHRvIHRoaXMgYXJlYSBmcm9tIGFuIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90 eXBlPiAoZm9yIGV4YW1wbGUsCisgICAgICBCLXRyZWUgcHJvdmlkZXMgPGZ1bmN0aW9uPmJ0X2Jh dGNoX2RhdGEoKTwvZnVuY3Rpb24+KS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O2JhdGNo X3R1cGxlc193b3Jrc3BhY2U8L2xpdGVyYWw+OiB0aGUgc2l6ZSBpbiBieXRlcworICAgICAgb2Yg dGhlIHBlci1iYXRjaCB0dXBsZSBzdG9yYWdlIHdvcmtzcGFjZSB1c2VkIGZvciBpbmRleC1vbmx5 IHNjYW5zCisgICAgICAodHlwaWNhbGx5IDxsaXRlcmFsPkJMQ0tTWjwvbGl0ZXJhbD4pLCBvciAw IGlmIHRoZSBpbmRleCBBTSBkb2VzIG5vdAorICAgICAgc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5z LiAgVGhlIHdvcmtzcGFjZSBpcyBhY2Nlc3NpYmxlIHZpYQorICAgICAgPHN0cnVjdGZpZWxkPmJh dGNoLSZndDtjdXJyVHVwbGVzPC9zdHJ1Y3RmaWVsZD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTc0 OSw2ICs3ODIsMTkzIEBAIGFtZ2V0dHVwbGUgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxzdHJ1 Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1l PkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgogICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5V TEwuCiAgIDwvcGFyYT4KKyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBBcyBvZiA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHZlcnNpb24gMTksIHBvc2l0aW9uIG1hcmtpbmcK KyAgICBhbmQgcmVzdG9yYXRpb24gb2Ygc2NhbnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBmb3Ig dGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbnRlcmZhY2U7IG9ubHkg dGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9y dHMgdGhpcyBmZWF0dXJlLgorICAgPC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cis8cHJv Z3JhbWxpc3Rpbmc+CitJbmRleFNjYW5CYXRjaAorYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBz Y2FuLAorICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKyAgICAgICAgICAg IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBSZXR1cm4g dGhlIG5leHQgYmF0Y2ggb2YgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbiBzY2FuLCBtb3Zpbmcg aW4gdGhlCisgICBnaXZlbiBkaXJlY3Rpb24gKGZvcndhcmQgb3IgYmFja3dhcmQgaW4gdGhlIGlu ZGV4KS4gIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YKKyAgIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90 eXBlPiB3aXRoIGluZGV4IHR1cGxlcyBsb2FkZWQsIG9yCisgICA8bGl0ZXJhbD5OVUxMPC9saXRl cmFsPiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuCisgICBz Y2FuIGRpcmVjdGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCisgICA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBpbmRl eCBlbnRyaWVzIGluIGJhdGNoZXMKKyAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuICBCeSBy ZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhCisgICBzaW5nbGUgaW5k ZXggcGFnZSB0b2dldGhlciwgdGhlIHRhYmxlIEFNIGdhaW5zIHZpc2liaWxpdHkgaW50byB3aGlj aCB0YWJsZQorICAgYmxvY2tzIHdpbGwgYmUgbmVlZGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHRhYmxlIEFNIHBhc3NlcyB0aGUgYmF0Y2ggbW9z dCByZWNlbnRseSByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBmb3IgdGhlIGdpdmVuIHNjYW4gYXMKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+ IChvciA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBvbiB0aGUgZmlyc3QgY2FsbAorICAgZm9yIHRo ZSBzY2FuKS4gIFRoZSBpbmRleCBBTSB1c2VzIGluZm9ybWF0aW9uIGZyb20gPGxpdGVyYWw+cHJp b3JiYXRjaDwvbGl0ZXJhbD4KKyAgIHRvIGRldGVybWluZSB3aGljaCBpbmRleCBwYWdlIHRvIHJl YWQgbmV4dC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSBiYXRjaCByZXR1cm5lZCBieSA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIGFzc29jaWF0ZWQgd2l0aCBhCisgICBw aW5uZWQgaW5kZXggcGFnZSBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtL3R1 cGxlLiAgVGhlIGJ1ZmZlcgorICAgcGluIGNhbiBiZSBoZWxkIG9udG8gYnkgdGhlIHRhYmxlIEFN IGFzIGFuIGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElECisgICByZWN5Y2xpbmcgYnkg PGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2Nr aW5nIi8+CisgICBmb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGlu ZGV4IHNjYW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkluZGV4U2NhbkJh dGNoPC90eXBlPiB0aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGlzIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgorICAg SXQgaXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQg YmUgZnJlZWQgKHZpYQorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoPC9mdW5j dGlvbj4pLiAgTm90ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxkPnByaW9y YmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQorICAgPGZpbGVuYW1lPnNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gYW5kCisgICA8ZmlsZW5hbWU+c3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb25zIHByb3ZpZGUK KyAgIHJlZmVyZW5jZSBleGFtcGxlcyBvZiB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBpbnRlcmZhY2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBzYW1lIGNhdmVh dHMgZGVzY3JpYmVkIGZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFwcGx5IGhl cmUKKyAgIHRvbzogYW4gZW50cnkgaW4gdGhlIHJldHVybmVkIGJhdGNoIG1lYW5zIG9ubHkgdGhh dCB0aGUgaW5kZXggY29udGFpbnMKKyAgIGFuIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgc2NhbiBr ZXlzLCBub3QgdGhhdCB0aGUgdHVwbGUgbmVjZXNzYXJpbHkgc3RpbGwKKyAgIGV4aXN0cyBpbiB0 aGUgaGVhcCBvciB3aWxsIHBhc3MgdGhlIGNhbGxlcidzIHNuYXBzaG90IHRlc3QuCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHVzaW5nIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBzZXQKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3Jl Y2hlY2s8L2xpdGVyYWw+IHRvIGluZGljYXRlIHdoZXRoZXIgcmVjaGVja2luZyBvZgorICAgc2Nh biBrZXlzIGlzIHJlcXVpcmVkLCBpbiB0aGUgc2FtZSB3YXkgYXMgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPgorICAgZG9lcy4gSG93ZXZlciwgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVj aGVjazwvbGl0ZXJhbD4gbXVzdCBiZSBzZXQgY29uc2lzdGVudGx5CisgICBmb3IgYW4gZW50aXJl IHNjYW4gcmF0aGVyIHRoYW4gdmFyeWluZyBvbiBhIHBlci10dXBsZSBiYXNpcy4gVGhpcyBpcyBh IGtleQorICAgZGlmZmVyZW5jZSBmcm9tIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4s IHdoaWNoIGNhbiBzZXQKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+ IGluZGVwZW5kZW50bHkgZm9yIGVhY2ggdHVwbGUgaXQgcmV0dXJucy4KKyAgIEluZGV4IGFjY2Vz cyBtZXRob2RzIHRoYXQgcmVxdWlyZSBncmFudWxhciBjb250cm9sIG92ZXIKKyAgIDxsaXRlcmFs PnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG11c3QgdXNlIHRoZSA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UgaW5zdGVhZCBvZiA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBTaW1pbGFybHks IHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBkb2VzIG5vdCBj dXJyZW50bHkKKyAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2FucyB0aGF0IHJldHVybiBkYXRhIGlu IHRoZSBmb3JtIG9mIGEKKyAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFtZT4gcG9p bnRlci4gIEluZGV4LW9ubHkgc2NhbnMgd29yayBieQorICAgY29weWluZyA8c3RydWN0bmFtZT5J bmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiByZWNvcmRzIGZyb20gaW5kZXggcGFnZXMgaW50byBhCisg ICBsb2NhbCBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYmF0Y2guICA8bGl0ZXJhbD54c19p dHVwZGVzYzwvbGl0ZXJhbD4KKyAgIHdvcmtzIGluIHRoZSBzYW1lIHdheSBhcyBhbHJlYWR5IGRl c2NyaWJlZCBmb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPi4KKyAgIFRoZSBhY2Nl c3MgbWV0aG9kIG11c3Qgbm90IHNldCB0aGUgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaXR1cDwvbGl0 ZXJhbD4gb3IKKyAgIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2hpdHVwPC9saXRlcmFsPiBmaWVsZHMg aXRzZWxmLgorICAgV2l0aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB0aGUgaW5k ZXggQU0gc2V0cworICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfaGl0dXA8L2xpdGVyYWw+IHRvIHBv aW50IHRvIGEgcmVjb25zdHJ1Y3RlZAorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3Ru YW1lPiB3aG9zZSBsaWZldGltZSBleHRlbmRzIHVudGlsIHRoZSBuZXh0CisgICA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbGwgJm1kYXNoOyBvbmx5IG9uZSB0dXBsZSBpcyB2YWxp ZCBhdCBhCisgICB0aW1lLiAgV2l0aCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBt dWx0aXBsZSBiYXRjaGVzIGFyZSBoZWxkIG9wZW4KKyAgIHNpbXVsdGFuZW91c2x5IGFuZCBpdGVt cyBhcmUgY29uc3VtZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIHRhYmxlIEFNLCBzbworICAgdGhl cmUgaXMgbm8gZXF1aXZhbGVudCBzaW5nbGUtdHVwbGUgbGlmZXRpbWUgZm9yIHBlci1pdGVtCisg ICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBvaW50ZXJzLiAgVGhlIGJhdGNo IGluZnJhc3RydWN0dXJlCisgICBwcm92aWRlcyBwZXItYmF0Y2ggc3RvcmFnZSBmb3IgPHN0cnVj dG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gY29waWVzLAorICAgYnV0IGhhcyBubyBhbmFs b2dvdXMgbWVjaGFuaXNtIGZvciA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IGRh dGEKKyAgICh1c2VkIGJ5IGluZGV4IEFNcyBzdWNoIGFzIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+ IGFuZAorICAgPGFjcm9ueW0+U1AtR2lTVDwvYWNyb255bT4gZm9yIHJlY29uc3RydWN0ZWQgdHVw bGVzIHRoYXQgbWlnaHQgbm90IGZpdCBpbgorICAgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3Ry dWN0bmFtZT4gZm9ybWF0KS4gIFRoaXMgbGltaXRhdGlvbiBjb3VsZCBiZQorICAgYWRkcmVzc2Vk IGluIGEgZnV0dXJlIHZlcnNpb24gb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3Ru YW1lPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4IGFjY2VzcyBtZXRob2Qg bXVzdCBwcm92aWRlIGVpdGhlciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBv ciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBidXQgbm90IGJvdGguCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1 bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3Vw cG9ydHMgPHF1b3RlPnBsYWluPC9xdW90ZT4gaW5kZXggc2NhbnMuICBJZiBpdCBkb2Vzbid0LAor ICAgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZmllbGQgaW4gaXRzCisgICA8 c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4gc3RydWN0IG11c3QgYmUgc2V0 IHRvIE5VTEwuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK3ZvaWQK K2Fta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAgICAg IEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBDYWxsZWQgYnkg dGhlIHRhYmxlIEFNIHdoZW4gaXQgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcgYSBiYXRjaCB0aGF0 CisgICBjb250YWlucyBkZWFkIGl0ZW1zLCB0byBzZXQgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJh bD4gYml0cyBpbiB0aGUKKyAgIGJhdGNoJ3MgaW5kZXggcGFnZS4gIFRoZSBiYXRjaCdzIGluZGV4 IHBhZ2Ugd2lsbCBuZXZlciBiZSBsb2NrZWQgb3IgcGlubmVkCisgICB3aGVuIHRoaXMgZnVuY3Rp b24gaXMgY2FsbGVkLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGlsZSBpbXBsZW1lbnRp bmcgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBpcyBvcHRpb25hbCwKKyAg IGRvaW5nIHNvIGlzIHJlY29tbWVuZGVkIGZvciBwZXJmb3JtYW5jZSwgYXMgaXQgYWxsb3dzIGZ1 dHVyZSBzY2FucyB0byBza2lwCisgICBrbm93bi1kZWFkIGluZGV4IGVudHJpZXMuICBCb3RoIGNv cmUgaW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBjdXJyZW50bHkKKyAgIHN1cHBvcnQgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlIGFuZCBoYXNoKSBpbXBsZW1lbnQKKyAg IDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBp bmRleCBhY2Nlc3MgbWV0aG9kcworICAgYXJlIGZyZWUgdG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1w bGVtZW50IHRoaXMgZmVhdHVyZS4KKyAgIFRoZSB0YWJsZSBBTSBtYXkgY2FsbAorICAgPGZ1bmN0 aW9uPnRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4gdG8gbWFyayBkZWFk IGl0ZW1zIGFzCisgICB0aGUgc2NhbiBwcm9ncmVzc2VzLiAgSWYgdGhlIGJhdGNoIGNvbnRhaW5z IGFueSBzdWNoIGRlYWQgaXRlbXMsIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0 ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgd2lsbCBoYXZlIGJlZW4gc29ydGVkIGFuZAorICAgZGVk dXBsaWNhdGVkIGJlZm9yZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGlz IGNhbGxlZCwgd2l0aAorICAgaXRlbSBvZmZzZXRzIGFwcGVhcmluZyBpbiBhc2NlbmRpbmcgb3Jk ZXIgKHRoYXQgaXMsIGluIGluZGV4IHBhZ2Ugb3JkZXIsCisgICB3aGljaCBpcyBhbHNvIGJhdGNo IG9yZGVyKSBhbmQgbm8gb2Zmc2V0IGFwcGVhcmluZyBtb3JlIHRoYW4gb25jZS4gIEluZGV4Cisg ICBhY2Nlc3MgbWV0aG9kcyBjYW4gcmVseSBvbiB0aGlzIG9yZGVyaW5nIHdoZW4gcHJvY2Vzc2lu ZyBkZWFkIGl0ZW1zOiB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5kZWFkSXRlbXM8L3N0cnVjdGZpZWxk PiBhcnJheSBjYW4gYmUgd2Fsa2VkIGluIGxvY2tzdGVwIHdpdGgKKyAgIHRoZSBpbmRleCBwYWdl J3MgaXRlbSBwb2ludGVycywgc2luY2UgYm90aCBhcmUgaW4gYXNjZW5kaW5nIG9mZnNldCBvcmRl ci4KKyAgIFRoaXMgYWxzbyBtZWFucyB0aGUgdGFibGUgQU0gbmVlZCBub3QgY2FsbAorICAgPGZ1 bmN0aW9uPnRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4gaW4gYW55IHBh cnRpY3VsYXIgb3JkZXIuCisgICAoSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiByZWx5IG9uIHRoZQorICAgPHN0cnVjdGZpZWxkPmtpbGxf cHJpb3JfdHVwbGU8L3N0cnVjdGZpZWxkPiBtZWNoYW5pc20gaW5zdGVhZCB0byBtYXJrIGRlYWQK KyAgIHR1cGxlczsgdGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC88L2ZpbGVu YW1lPiBpbXBsZW1lbnRhdGlvbgorICAgcHJvdmlkZXMgYSByZWZlcmVuY2UgZXhhbXBsZS4pCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gaW1wbGVtZW50aW5nIDxmdW5jdGlvbj5hbWtp bGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4sIHRoZSBpbmRleCBBTQorICAgc2hvdWxkIHZlcmlmeSB0 aGF0IHRoZSBpbmRleCBwYWdlIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgYmF0Y2gg d2FzCisgICBvcmlnaW5hbGx5IHJlYWQuICBUaGUgYmF0Y2gncyA8c3RydWN0ZmllbGQ+bHNuPC9z dHJ1Y3RmaWVsZD4gZmllbGQgcmVjb3JkcworICAgdGhlIHBhZ2UgTFNOIGF0IHRoZSB0aW1lIHRo ZSBpbmRleCBwYWdlIGxvY2sgd2FzIHJlbGVhc2VkIChzZXQKKyAgIGF1dG9tYXRpY2FsbHkgYnkg dGhlIGNvcmUgY29kZSkuICBUaGUgaW5kZXggQU0gc2hvdWxkIHJlLXJlYWQgdGhlIHBhZ2UsCisg ICBjb21wYXJlIHRoZSBjdXJyZW50IHBhZ2UgTFNOIGFnYWluc3QgPHN0cnVjdGZpZWxkPmJhdGNo LSZndDtsc248L3N0cnVjdGZpZWxkPiwKKyAgIGFuZCBnaXZlIHVwIG9uIHNldHRpbmcgPGxpdGVy YWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBpZiB0aGUgTFNOIGhhcworICAgYWR2YW5jZWQuICBB biBhZHZhbmNlZCBMU04gaW5kaWNhdGVzIHRoYXQgdGhlIHBhZ2Ugd2FzIG1vZGlmaWVkICZtZGFz aDsKKyAgIHBvc3NpYmx5IGJ5IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gcmVjeWNsaW5nIGhl YXAgVElEcyAmbWRhc2g7IHNvIGl0CisgICB3b3VsZCBiZSB1bnNhZmUgdG8gYXNzdW1lIHRoYXQg aW5kZXggZW50cmllcyBzdGlsbCBwb2ludCB0byB0aGUgc2FtZSBoZWFwCisgICB0dXBsZXMuICBT aW5jZSA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nIGlzIG9ubHkgYW4gb3B0aW1p emF0aW9uCisgICBoaW50LCBpdCBpcyBhbHdheXMgc2FmZSB0byBza2lwIGl0LiAgU2VlIHRoZSBC LXRyZWUgYW5kIGhhc2ggaW5kZXgKKyAgIGltcGxlbWVudGF0aW9ucyBmb3IgcmVmZXJlbmNlIGV4 YW1wbGVzIG9mIHRoaXMgdGVjaG5pcXVlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUg aW5kZXggQU0gbWF5IGNob29zZSB0byByZXRhaW4gaXRzIG93biBidWZmZXIgcGlucyB3aGVuIHRo aXMgc2VydmVzIGFuCisgICBpbnRlcm5hbCBwdXJwb3NlIChmb3IgZXhhbXBsZSwgbWFpbnRhaW5p bmcgYSBkZXNjZW50IHN0YWNrIG9mIHBpbm5lZCBpbmRleAorICAgcGFnZXMgZm9yIHJldXNlIGFj cm9zcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGxzKS4gIEhvd2V2ZXIsCisg ICBhbnkgc2NoZW1lIHRoYXQgcmV0YWlucyBidWZmZXIgcGlucyBtYW5hZ2VkIGJ5IHRoZSBpbmRl eCBBTSBtdXN0IGJlIHN1cmUgdG8KKyAgIGZyZWUgdGhlIHBpbnMgYXQgYW4gb3Bwb3J0dW5lIHBv aW50IChmb3IgZXhhbXBsZSB3aGVuIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+CisgICBh bmQvb3IgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVuY3Rpb24+IGFyZSBjYWxsZWQpLiAgSXQgbXVz dCBhbHNvIGtlZXAgdGhlCisgICBudW1iZXIgb2YgcmV0YWluZWQgcGlucyBmaXhlZCBhbmQgc21h bGwsIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncworICAgYnVmZmVyIHBpbiBsaW1p dC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2Jh dGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgb3B0aW9uYWwuICBJbmRleAorICAgYWNjZXNzIG1l dGhvZHMgdGhhdCB3YW50IHRvIG1hcmsgZGVhZCBpbmRleCB0dXBsZXMgd2l0aAorICAgPGxpdGVy YWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBzaG91bGQgcHJvdmlkZSBpdDsgdGhvc2UgdGhhdCBk b24ndCBjYW4KKyAgIGxlYXZlIGl0IHNldCB0byA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBldmVu IHdoZW4gdGhleSBwcm92aWRlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+Lgor ICA8L3BhcmE+CiAKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CkBAIC03NjgsOCArOTg4LDgg QEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGl0c2VsZiwgYW5kIHRoZXJl Zm9yZSBjYWxsZXJzIHJlY2hlY2sgYm90aCB0aGUgc2NhbiBjb25kaXRpb25zIGFuZCB0aGUKICAg IHBhcnRpYWwgaW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGZvciByZWNoZWNrYWJsZSB0dXBsZXMu ICBUaGF0IG1pZ2h0IG5vdAogICAgYWx3YXlzIGJlIHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gY2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgaW5kZXggc2NhbjsgdGhlcmUKKyAg IE9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+LAorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gaW5kZXggc2NhbjsgdGhlcmUKICAgIGFyZSBv dGhlciByZXN0cmljdGlvbnMgdG9vIHdoZW4gdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9m dW5jdGlvbj4sIGFzIGV4cGxhaW5lZAogICAgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5p bmciLz4uCiAgIDwvcGFyYT4KQEAgLTc4MSw2ICsxMDAxLDI5IEBAIGFtZ2V0Yml0bWFwIChJbmRl eFNjYW5EZXNjIHNjYW4sCiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJh PgogCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICB3aWxsIGdlbmVyYWxseSBh bHNvIHdhbnQgdG8gdXNlIHRoZSBiYXRjaCBhbGxvY2F0aW9uIGluZnJhc3RydWN0dXJlCisgICAo PGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGFuZAorICAgPGZ1 bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlPC9mdW5jdGlvbj4pIHdpdGhpbiB0aGVp cgorICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW1wbGVtZW50YXRpb24uICBU aGUgY29udmVudGlvbiBpcyB0aGF0IG9ubHkKKyAgIG9uZSBiYXRjaCBpcyBhbGxvY2F0ZWQgYXQg YSB0aW1lIGR1cmluZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwKKyAgIHVubGlr ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHdoZXJlIHNldmVyYWwgYmF0Y2hlcyBt YXkgYmUKKyAgIG91dHN0YW5kaW5nIGluIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciBjb25jdXJyZW50 bHkuICBUbyBtYWludGFpbiB0aGlzCisgICBvbmUtYmF0Y2gtYXQtYS10aW1lIGludmFyaWFudCwg dGhlIGluZGV4IEFNIGl0c2VsZiByZWxlYXNlcyBpdHMgcHJpb3IgYmF0Y2gKKyAgIHZpYSA8ZnVu Y3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2U8L2Z1bmN0aW9uPiBqdXN0IGFzIHRoZSBz Y2FuIGxlYXZlcworICAgdGhhdCBiYXRjaCdzIGluZGV4IHBhZ2UgYW5kIGlzIGFib3V0IHRvIGdl bmVyYXRlIHRoZSBuZXh0IGJhdGNoICZtZGFzaDsgdGhlCisgICBzYW1lIHBvaW50IHdoZXJlIGl0 IGV4dHJhY3RzIG5hdmlnYXRpb24gc3RhdGUgKHN1Y2ggYXMgc2libGluZy1wYWdlIGxpbmtzKQor ICAgZnJvbSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4gIFRoaXMgZWFybHkgcmVsZWFz ZSBpcyBzcGVjaWZpYyB0bworICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2Nh bnM7IGR1cmluZyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICBzY2FucyB0aGUg PGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIHRh YmxlIEFNCisgICBhbmQgY29yZSBjb2RlLCBhbmQgdGhlIGluZGV4IEFNIG11c3QgbmV2ZXIgcmVs ZWFzZSBpdC4gIFNlZQorICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gYW5kIDxmdW5j dGlvbj5faGFzaF9uZXh0PC9mdW5jdGlvbj4gZm9yCisgICByZWZlcmVuY2UgZXhhbXBsZXMuICBU aGUgcmVsZWFzZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkgYW5kIHJldXNlZCBieQorICAg dGhlIG5leHQgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGNh bGwsIGF2b2lkaW5nCisgICByZXBlYXRlZCBtZW1vcnkgYWxsb2NhdGlvbiBkdXJpbmcgdGhlIGJp dG1hcCBzY2FuLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lk CkBAIC03OTUsMzIgKzEwMzgsNDEgQEAgYW1lbmRzY2FuIChJbmRleFNjYW5EZXNjIHNjYW4pOwog ICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQKLWFtbWFya3BvcyAoSW5kZXhTY2FuRGVz YyBzY2FuKTsKK2FtcG9zcmVzZXQgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgIElu ZGV4U2NhbkJhdGNoIGJhdGNoKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICBNYXJrIGN1cnJlbnQg c2NhbiBwb3NpdGlvbi4gIFRoZSBhY2Nlc3MgbWV0aG9kIG5lZWQgb25seSBzdXBwb3J0IG9uZQot ICAgcmVtZW1iZXJlZCBzY2FuIHBvc2l0aW9uIHBlciBzY2FuLgorICAgTm90aWZ5IHRoZSBpbmRl eCBBTSB0aGF0IHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0byBjaGFuZ2UgdGhlIHNjYW4ncworICAg bG9naWNhbCBwb3NpdGlvbiBpbiBhIHdheSB0aGF0IHJlcXVpcmVzIHRoZSBpbmRleCBBTSB0byBy ZXNldCBhbnkgc3RhdGUKKyAgIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHNjYW4ncyBw cm9ncmVzcy4gIEZvciBleGFtcGxlLCBuYnRyZWUgbXVzdAorICAgcmVzZXQgdGhlIGFycmF5IGtl eXMgdXNlZCBieSA8bGl0ZXJhbD5TY2FsYXJBcnJheU9wRXhwcjwvbGl0ZXJhbD4gcXVhbAorICAg ZXZhbHVhdGlvbiB3aGVuIHRoZSBzY2FuIHBvc2l0aW9uIGNoYW5nZXMuICBUaGlzIGNhbGxiYWNr IGlzIGludm9rZWQgd2hlbgorICAgdGhlIHRhYmxlIEFNIGlzIGFib3V0IHRvIHByb2Nlc3MgYSBi YXRjaCBpbiBhIGRpZmZlcmVudCBkaXJlY3Rpb24gdGhhbgorICAgd2FzIHVzZWQgd2hlbiB0aGUg YmF0Y2ggd2FzIG9yaWdpbmFsbHkgcmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4sIGFuZCBhbHNvIHdoZW4gYSBtYXJrZWQgc2NhbiBwb3NpdGlvbiBpcworICAg YWJvdXQgdG8gYmUgcmVzdG9yZWQuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSA8ZnVu Y3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVk IGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQg ZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1tYXJrcG9zPC9zdHJ1Y3RmaWVsZD4gZmll bGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3Ry dWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIFdoZW4gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1 bmN0aW9uPiBpcyBjYWxsZWQgZHVlIHRvIGEgY3Jvc3MtYmF0Y2gKKyAgIGRpcmVjdGlvbiBjaGFu Z2UsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBmbGlwcGVkIHRoZSBiYXRjaCdz CisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdG8gcmVmbGVjdCB0aGUg bmV3IHNjYW4gZGlyZWN0aW9uCisgICBiZWZvcmUgbWFraW5nIHRoZSBjYWxsLiAgVGhlIGluZGV4 IEFNIHNob3VsZCB1c2UgdGhpcyB1cGRhdGVkIGRpcmVjdGlvbgorICAgd2hlbiByZXNldHRpbmcg YW55IHN0YXRlIHRoYXQgZGVwZW5kcyBvbiBrbm93aW5nIHdoaWNoIHdheSB0aGUgc2NhbiBpcwor ICAgcHJvY2VlZGluZy4gIFdoZW4gY2FsbGVkIHRvIHJlc3RvcmUgYSBtYXJrZWQgcG9zaXRpb24s IHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gaXMgbm90IG1v ZGlmaWVkOyBpdCByZXRhaW5zIHRoZSBkaXJlY3Rpb24KKyAgIGZyb20gd2hlbiB0aGUgYmF0Y2gg d2FzIG9yaWdpbmFsbHkgcmV0dXJuZWQuICBJbiBib3RoIGNhc2VzLCB0aGUgYmF0Y2gKKyAgIHBh c3NlZCB0byA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGlzIHRoZSBiYXRjaCB0aGF0 IHdpbGwgYmUgdXNlZAorICAgdG8gY29udGludWUgdGhlIHNjYW4uCiAgIDwvcGFyYT4KIAogICA8 cGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQKLWFtcmVzdHJwb3MgKEluZGV4U2NhbkRlc2Mg c2Nhbik7Ci08L3Byb2dyYW1saXN0aW5nPgotICAgUmVzdG9yZSB0aGUgc2NhbiB0byB0aGUgbW9z dCByZWNlbnRseSBtYXJrZWQgcG9zaXRpb24uCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLSAgIFRo ZSA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBw cm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4g IElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtcmVzdHJwb3M8L3N0cnVjdGZp ZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+ Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMg dGhhdCBoYXZlIHByaXZhdGUgc3RhdGUgd2hpY2ggbXVzdCBiZSByZXNldCB3aGVuIHRoZQorICAg c2NhbiBwb3NpdGlvbiBjaGFuZ2VzIG11c3QgcHJvdmlkZSBhbiA8ZnVuY3Rpb24+YW1wb3NyZXNl dDwvZnVuY3Rpb24+CisgICBpbXBsZW1lbnRhdGlvbi4gIEluZGV4IEFNcyB3aXRoIG5vIHN1Y2gg c3RhdGUgbWF5IHNldAorICAgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8L3N0cnVjdGZpZWxkPiB0 byBOVUxMLgorICAgVGhlIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gZnVuY3Rpb24g Y2FuIG9ubHkgYmUgcHJvdmlkZWQgd2hlbiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMg b3JkZXJlZCBzY2FucyB0aHJvdWdoIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ CisgICBpbnRlcmZhY2UuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTk3NSw2ICsxMjI3LDgg QEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHks IE9pZCBvcGNpbnR5cGUpOwogICAgICAgIEFjY2VzcyBtZXRob2RzIHRoYXQgYWx3YXlzIHJldHVy biBlbnRyaWVzIGluIHRoZSBuYXR1cmFsIG9yZGVyaW5nCiAgICAgICAgb2YgdGhlaXIgZGF0YSAo c3VjaCBhcyBidHJlZSkgc2hvdWxkIHNldAogICAgICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVy PC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1ZS4KKyAgICAgICBCb3RoIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgICAgICBz Y2FucyBzdXBwb3J0IHRoaXMgY2FwYWJpbGl0eS4KICAgICAgICBDdXJyZW50bHksIHN1Y2ggYWNj ZXNzIG1ldGhvZHMgbXVzdCB1c2UgYnRyZWUtY29tcGF0aWJsZSBzdHJhdGVneQogICAgICAgIG51 bWJlcnMgZm9yIHRoZWlyIGVxdWFsaXR5IGFuZCBvcmRlcmluZyBvcGVyYXRvcnMuCiAgICAgICA8 L3BhcmE+CkBAIC05ODcsNDEgKzEyNDEsNTYgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJl VHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgICAgIGFuIG9y ZGVyIHNhdGlzZnlpbmcgPGxpdGVyYWw+T1JERVIgQlk8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5p bmRleF9rZXk8L3JlcGxhY2VhYmxlPgogICAgICAgIDxyZXBsYWNlYWJsZT5vcGVyYXRvcjwvcmVw bGFjZWFibGU+IDxyZXBsYWNlYWJsZT5jb25zdGFudDwvcmVwbGFjZWFibGU+LiAgU2NhbiBtb2Rp ZmllcnMKICAgICAgICBvZiB0aGF0IGZvcm0gY2FuIGJlIHBhc3NlZCB0byA8ZnVuY3Rpb24+YW1y ZXNjYW48L2Z1bmN0aW9uPiBhcyBkZXNjcmliZWQKLSAgICAgICBwcmV2aW91c2x5LgorICAgICAg IHByZXZpb3VzbHkuICBOb3RlIHRoYXQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBz Y2FucyBkbyBub3QKKyAgICAgICBjdXJyZW50bHkgc3VwcG9ydCBvcmRlcmluZyBvcGVyYXRvcnMu ICBUaGUgY29yZSBleGVjdXRvciBleHBlY3RzCisgICAgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiB0byBzZXQKKyAgICAgICA8c3RydWN0ZmllbGQ+eHNfb3JkZXJieXZhbHM8L3N0 cnVjdGZpZWxkPiBmb3IgZWFjaCByZXR1cm5lZCB0dXBsZSwgYnV0CisgICAgICAgdGhlcmUgaXMg Y3VycmVudGx5IG5vIG1lY2hhbmlzbSB0byBhc3NvY2lhdGUgcGVyLWl0ZW0gb3JkZXJpbmcgdmFs dWVzCisgICAgICAgd2l0aCBpbmRpdmlkdWFsIGl0ZW1zIHdpdGhpbiBhIGJhdGNoLiAgVGhpcyB3 b3VsZCByZXF1aXJlIGFuIGFkZGl0aW9uYWwKKyAgICAgICBsYXllciBvZiBpbmRpcmVjdGlvbiB0 aGF0IGRvZXMgbm90IHlldCBleGlzdCwgYnV0IGNvdWxkIGJlIGFkZGVkIGluIGEKKyAgICAgICBm dXR1cmUgdmVyc2lvbiBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+Lgog ICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgogICA8 L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiBmdW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAor ICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4KKyAgIGZ1bmN0aW9ucyBoYXZlIGEgPGxpdGVyYWw+ZGlyZWN0aW9u PC9saXRlcmFsPiBhcmd1bWVudCwKICAgIHdoaWNoIGNhbiBiZSBlaXRoZXIgPGxpdGVyYWw+Rm9y d2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+ICh0aGUgbm9ybWFsIGNhc2UpCiAgICBvciAgPGxp dGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPi4gIElmIHRoZSBmaXJzdCBjYWxs IGFmdGVyCiAgICA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMgPGxpdGVy YWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiwgdGhlbiB0aGUKICAgIHNldCBvZiBt YXRjaGluZyBpbmRleCBlbnRyaWVzIGlzIHRvIGJlIHNjYW5uZWQgYmFjay10by1mcm9udCByYXRo ZXIgdGhhbiBpbgotICAgdGhlIG5vcm1hbCBmcm9udC10by1iYWNrIGRpcmVjdGlvbiwgc28gPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybgotICAgdGhlIGxhc3QgbWF0 Y2hpbmcgdHVwbGUgaW4gdGhlIGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lIGFzIGl0 Ci0gICBub3JtYWxseSB3b3VsZC4gIChUaGlzIHdpbGwgb25seSBvY2N1ciBmb3IgYWNjZXNzCi0g ICBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4g dG8gdHJ1ZS4pICBBZnRlciB0aGUKLSAgIGZpcnN0IGNhbGwsIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCisgICB0 aGUgbm9ybWFsIGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLiAgSW4gdGhpcyBjYXNlLAorICAgPGZ1 bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBtYXRjaGlu ZyB0dXBsZSBpbiB0aGUKKyAgIGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lIGFzIGl0 IG5vcm1hbGx5IHdvdWxkLiAgU2ltaWxhcmx5LAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBtYXRjaGluZyBiYXRjaCBvZiBpdGVtcworICAg d2hlbiBlaXRoZXIgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5j dGlvbj4gc3BlY2lmaWVzCisgICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVy YWw+LCBvciBhIHN1YnNlcXVlbnQgY2FsbCBoYXMKKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+ IGFzIGl0cyA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IGFyZ3VtZW50Cisg ICAoaW5kaWNhdGluZyBhIGJhY2t3YXJkIHNjYW4gcmVzdGFydCkuICAoVGhpcyBiYWNrd2FyZC1z Y2FuIGJlaGF2aW9yIHdpbGwKKyAgIG9ubHkgb2NjdXIgZm9yIGFjY2VzcyBtZXRob2RzIHRoYXQg c2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4KKyAgIHRvIHRydWUuKSAg QWZ0ZXIgdGhlIGZpcnN0IGNhbGwsIGJvdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiBhbmQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJl ZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCiAgICBlaXRoZXIgZGlyZWN0aW9uIGZyb20gdGhlIG1v c3QgcmVjZW50bHkgcmV0dXJuZWQgZW50cnkuICAoQnV0IGlmCiAgICA8c3RydWN0ZmllbGQ+YW1j YW5iYWNrd2FyZDwvc3RydWN0ZmllbGQ+IGlzIGZhbHNlLCBhbGwgc3Vic2VxdWVudAogICAgY2Fs bHMgd2lsbCBoYXZlIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgZmlyc3Qgb25lLikKICAgPC9w YXJhPgogCiAgIDxwYXJhPgotICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IG9yZGVyZWQg c2NhbnMgbXVzdCBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYQotICAgcG9zaXRpb24g aW4gYSBzY2FuIGFuZCBsYXRlciByZXR1cm5pbmcgdG8gdGhlIG1hcmtlZCBwb3NpdGlvbi4gIFRo ZSBzYW1lCi0gICBwb3NpdGlvbiBtaWdodCBiZSByZXN0b3JlZCBtdWx0aXBsZSB0aW1lcy4gIEhv d2V2ZXIsIG9ubHkgb25lIHBvc2l0aW9uIG5lZWQKLSAgIGJlIHJlbWVtYmVyZWQgcGVyIHNjYW47 IGEgbmV3IDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBjYWxsIG92ZXJyaWRlcyB0aGUK LSAgIHByZXZpb3VzbHkgbWFya2VkIHBvc2l0aW9uLiAgQW4gYWNjZXNzIG1ldGhvZCB0aGF0IGRv ZXMgbm90IHN1cHBvcnQgb3JkZXJlZAotICAgc2NhbnMgbmVlZCBub3QgcHJvdmlkZSA8ZnVuY3Rp b24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5jdGlv bj4KLSAgIGZ1bmN0aW9ucyBpbiA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFt ZT47IHNldCB0aG9zZSBwb2ludGVycyB0byBOVUxMCi0gICBpbnN0ZWFkLgorICAgQWNjZXNzIG1l dGhvZHMgdXNpbmcgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNl CisgICBzdXBwb3J0IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYSBwb3NpdGlvbiBpbiBhIHNjYW4g YW5kIGxhdGVyIHJldHVybmluZyB0bworICAgdGhlIG1hcmtlZCBwb3NpdGlvbi4gIFdoZW4gYSBi YXRjaCBpcyBwcm9jZXNzZWQgaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9uCisgICB0aGFuIGl0IHdh cyBvcmlnaW5hbGx5IGZldGNoZWQsIG9yIHdoZW4gYSBtYXJrZWQgcG9zaXRpb24gaXMgcmVzdG9y ZWQsIHRoZQorICAgaW5kZXggQU0gaXMgbm90aWZpZWQgdmlhIHRoZSA8ZnVuY3Rpb24+YW1wb3Ny ZXNldDwvZnVuY3Rpb24+IGNhbGxiYWNrIChpZgorICAgcHJvdmlkZWQpIHNvIGl0IGNhbiByZXNl dCBhbnkgcHJpdmF0ZSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZQorICAgc2Nh bidzIHByb2dyZXNzIChzdWNoIGFzIGFycmF5IGtleSBzdGF0ZSkuICBTZWUgdGhlIGRlc2NyaXB0 aW9uIG9mCisgICA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGluIDx4cmVmIGxpbmtl bmQ9ImluZGV4LWZ1bmN0aW9ucyIvPiBmb3IKKyAgIGRldGFpbHMuCiAgIDwvcGFyYT4KIAogICA8 cGFyYT4KLSAgIEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5kIHRoZSBtYXJrIHBvc2l0aW9uIChp ZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNjYW4gcG9zaXRpb24gKGlmIGFueSkg bXVzdCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQgaW5kZXggQU0KICAgIGNvbnNp c3RlbnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGluc2VydGlvbnMgb3IgZGVsZXRpb25z IGluIHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZyZXNobHktaW5zZXJ0ZWQgZW50cnkg aXMgbm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3b3VsZCBoYXZlIGZvdW5kIHRoZSBl bnRyeSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2FuIHN0YXJ0ZWQsIG9yIGZvcgpAQCAt MTA0NCwxMiArMTMxMywxNCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5 cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4K LSAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgYW4g aW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1 bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4gYmUKLSAg IG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+IGJlY2F1c2UgaXQgYWxsb3dzCi0gICBhdm9pZGluZyBsb2NrL3VubG9jayBjeWNsZXMg d2l0aGluIHRoZSBhY2Nlc3MgbWV0aG9kLiAgSW4gcHJpbmNpcGxlCi0gICA8ZnVuY3Rpb24+YW1n ZXRiaXRtYXA8L2Z1bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3RzIGFzIHJlcGVh dGVkCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbGxzLCBidXQgd2UgaW1w b3NlIHNldmVyYWwgcmVzdHJpY3Rpb25zIHRvCisgICBJbnN0ZWFkIG9mIHVzaW5nIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0aAorICAgPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxlcyBpbiBvbmUgY2FsbC4gIFRoaXMg Y2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50IHRoYW4gd2l0aCBhbiA8cXVvdGU+ b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQgYWxsb3dzIGVmZmljaWVudCBzZXF1 ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250YWluaW5nCisgICBtYXRjaGVzLiAg SW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZl IHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMsIGJ1 dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KICAgIHNpbXBsaWZ5IG1hdHRlcnMu ICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHJldHVybnMg YWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBvciByZXN0b3Jpbmcgc2NhbiBwb3Np dGlvbnMgaXNuJ3QKICAgIHN1cHBvcnRlZC4gU2Vjb25kbHksIHRoZSB0dXBsZXMgYXJlIHJldHVy bmVkIGluIGEgYml0bWFwIHdoaWNoIGRvZXNuJ3QKQEAgLTEwNjYsOCArMTMzNyw4IEBAIGFtdHJh bnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3Bj aW50eXBlKTsKIAogICA8cGFyYT4KICAgIE5vdGUgdGhhdCBpdCBpcyBwZXJtaXR0ZWQgZm9yIGFu IGFjY2VzcyBtZXRob2QgdG8gaW1wbGVtZW50IG9ubHkKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgb3Ig dmljZSB2ZXJzYSwKLSAgIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRl ZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KKyAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVu Y3Rpb24+IGFuZCBub3QgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+LAorICAgb3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVybmFs IGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgogICA8 L3BhcmE+CiAKICA8L3NlY3QxPgpAQCAtMTEyMywxMSArMTM5NCwxNSBAQCBhbXRyYW5zbGF0ZWNt cHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7 CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAg IEFuIGluZGV4IHNjYW4gbXVzdCBtYWludGFpbiBhIHBpbgotICAgICAgIG9uIHRoZSBpbmRleCBw YWdlIGhvbGRpbmcgdGhlIGl0ZW0gbGFzdCByZXR1cm5lZCBieQotICAgICAgIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4sIGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlv bj4gY2Fubm90IGRlbGV0ZQotICAgICAgIGVudHJpZXMgZnJvbSBwYWdlcyB0aGF0IGFyZSBwaW5u ZWQgYnkgb3RoZXIgYmFja2VuZHMuICBUaGUgbmVlZAotICAgICAgIGZvciB0aGlzIHJ1bGUgaXMg ZXhwbGFpbmVkIGJlbG93LgorICAgICAgIEEgcGluIG11c3QgYmUgaGVsZCBvbiBhbnkgaW5kZXgg cGFnZSB3aG9zZSBpdGVtcyBtaWdodCBzdGlsbCBuZWVkIHRvCisgICAgICAgYmUgZm9sbG93ZWQs IGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gbXVzdCBhY3F1aXJlIGEKKyAg ICAgICBjbGVhbnVwIGxvY2sgb24gZWFjaCBpbmRleCBwYWdlLCB3aGljaCB3aWxsIGJsb2NrIGlm IGFueSBvdGhlcgorICAgICAgIGJhY2tlbmQgaG9sZHMgYSBwaW4gb24gdGhhdCBwYWdlLgorICAg ICAgIEZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHNjYW5zLCB0aGUgaW5kZXgg YWNjZXNzIG1ldGhvZAorICAgICAgIG1hbmFnZXMgdGhpcyBwaW4gZGlyZWN0bHkuCisgICAgICAg Rm9yIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMsIHRoZSB0YWJsZSBhY2Nl c3MgbWV0aG9kCisgICAgICAgY29udHJvbHMgd2hlbiBwaW5zIGFyZSBkcm9wcGVkLgorICAgICAg IFRoZSBuZWVkIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgogICAgICAgPC9wYXJh PgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtMTE1NiwyMyArMTQz MSw0MyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZh bWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoaXMgc29s dXRpb24gcmVxdWlyZXMgdGhhdCBpbmRleCBzY2FucyBiZSA8cXVvdGU+c3luY2hyb25vdXM8L3F1 b3RlPjogd2UgaGF2ZQotICAgdG8gZmV0Y2ggZWFjaCBoZWFwIHR1cGxlIGltbWVkaWF0ZWx5IGFm dGVyIHNjYW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4Ci0gICBlbnRyeS4gIFRoaXMgaXMg ZXhwZW5zaXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgQW4KLSAgIDxxdW90ZT5hc3luY2hy b25vdXM8L3F1b3RlPiBzY2FuIGluIHdoaWNoIHdlIGNvbGxlY3QgbWFueSBUSURzIGZyb20gdGhl IGluZGV4LAotICAgYW5kIG9ubHkgdmlzaXQgdGhlIGhlYXAgdHVwbGVzIHNvbWV0aW1lIGxhdGVy LCByZXF1aXJlcyBtdWNoIGxlc3MgaW5kZXgKLSAgIGxvY2tpbmcgb3ZlcmhlYWQgYW5kIGNhbiBh bGxvdyBhIG1vcmUgZWZmaWNpZW50IGhlYXAgYWNjZXNzIHBhdHRlcm4uCisgICBUaGlzIHNvbHV0 aW9uIHJlcXVpcmVzIHRoYXQgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbmRleCBz Y2FucyBiZQorICAgPHF1b3RlPnN5bmNocm9ub3VzPC9xdW90ZT46IHRoZSB0YWJsZSBBTSBtdXN0 IGZldGNoIGVhY2ggaGVhcCB0dXBsZQorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhl IGNvcnJlc3BvbmRpbmcgaW5kZXggZW50cnkuICBUaGlzIGlzCisgICBleHBlbnNpdmUgZm9yIGEg bnVtYmVyIG9mIHJlYXNvbnMuICBBbgorICAgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+IHNj YW4gaW4gd2hpY2ggd2UgY29sbGVjdCBtYW55IFRJRHMgZnJvbSB0aGUKKyAgIGluZGV4LCBhbmQg b25seSB2aXNpdCB0aGUgaGVhcCB0dXBsZXMgc29tZXRpbWUgbGF0ZXIsIHJlcXVpcmVzIG11Y2gg bGVzcworICAgaW5kZXggbG9ja2luZyBvdmVyaGVhZCBhbmQgY2FuIGFsbG93IGEgbW9yZSBlZmZp Y2llbnQgaGVhcCBhY2Nlc3MgcGF0dGVybi4KICAgIFBlciB0aGUgYWJvdmUgYW5hbHlzaXMsIHdl IG11c3QgdXNlIHRoZSBzeW5jaHJvbm91cyBhcHByb2FjaCBmb3IKICAgIG5vbi1NVkNDLWNvbXBs aWFudCBzbmFwc2hvdHMsIGJ1dCBhbiBhc3luY2hyb25vdXMgc2NhbiBpcyB3b3JrYWJsZQogICAg Zm9yIGEgcXVlcnkgdXNpbmcgYW4gTVZDQyBzbmFwc2hvdC4KICAgPC9wYXJhPgogCiAgIDxwYXJh PgotICAgSW4gYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2Nhbiwg dGhlIGFjY2VzcyBtZXRob2QgZG9lcyBub3QKLSAgIGtlZXAgYW4gaW5kZXggcGluIG9uIGFueSBv ZiB0aGUgcmV0dXJuZWQgdHVwbGVzLiAgVGhlcmVmb3JlCisgICBXaXRoIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMsIHRoZSB0YWJsZSBBTSBjb250cm9scyB3aGVuCisgICBi dWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyBhcmUgZHJvcHBlZCByYXRoZXIgdGhhbiB0aGUgaW5k ZXggQU0uCisgICBJbiBwcmFjdGljZSwgdGhlIGhlYXAgdGFibGUgQU0gKGFuZCBhbnkgdGFibGUg QU0gd2l0aCBzaW1pbGFyIGNvbmN1cnJlbmN5CisgICBydWxlcykgdXN1YWxseSBkcm9wcyBwaW5z IGVhZ2VybHkgZm9yIE1WQ0Mgc25hcHNob3Qgc2NhbnMsIGJ1dCByZXRhaW5zCisgICBwaW5zIGZv ciBub24tTVZDQyBzbmFwc2hvdCBzY2Fucy4gIEluZGV4LW9ubHkgc2NhbnMgbWF5IHJldGFpbiBw aW5zIGluCisgICBzb21lIGNhc2VzLCB3aGlsZSBwbGFpbiBpbmRleCBzY2FucyB0aGF0IHVzZSBh biBNVkNDIHNuYXBzaG90IGFsd2F5cyBkcm9wCisgICB0aGVpciBwaW5zIGVhZ2VybHkuICBJbmRl eCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGltcGxlbWVudAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBkbyBub3QgY29udHJvbCB3aGVuIHBpbnMgYXJlIGRyb3BwZWQ7IHRoYXQKKyAg IGRlY2lzaW9uIGlzIGRlbGVnYXRlZCB0byB0aGUgdGFibGUgQU0uCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIEluIGFuIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGluZGV4IHNj YW4sIHRoZSBhY2Nlc3MgbWV0aG9kIGRvZXMKKyAgIG5vdCBrZWVwIGFuIGluZGV4IHBpbiBvbiBh bnkgb2YgdGhlIHJldHVybmVkIHR1cGxlcy4gIFRoZXJlZm9yZQogICAgaXQgaXMgb25seSBzYWZl IHRvIHVzZSBzdWNoIHNjYW5zIHdpdGggTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLgogICA8L3Bh cmE+CiAKKyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgbWFuYWdlCisgICBwaW4gbGlmZXRpbWUgdGhl bXNlbHZlcywgc2luY2UgdGhlcmUgaXMgbm8gdGFibGUgQU0gaW50ZXJtZWRpYXJ5ICh1bmxpa2UK KyAgIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPikuICBUaGUgaW5kZXggQU0g bXVzdCBob2xkIGEgcGluIG9uIHRoZQorICAgY3VycmVudCBpbmRleCBwYWdlIHVudGlsIHRoZSBz Y2FuIG1vdmVzIHRvIGEgZGlmZmVyZW50IHBhZ2Ugb3IgZW5kcy4KKyAgPC9wYXJhPgorCiAgIDxw YXJhPgogICAgV2hlbiB0aGUgPHN0cnVjdGZpZWxkPmFtcHJlZGxvY2tzPC9zdHJ1Y3RmaWVsZD4g ZmxhZyBpcyBub3Qgc2V0LCBhbnkgc2NhbiB1c2luZyB0aGF0CiAgICBpbmRleCBhY2Nlc3MgbWV0 aG9kIHdpdGhpbiBhIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiB3aWxsIGFjcXVpcmUgYQpkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKaW5kZXggOTgyNTMyZmU3Li5mNThjMjg4MTUgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbApAQCAtMTE1MywxMiArMTE1MywxMyBAQCBXSVRIICgg TU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9y ZXBsYWNlYWJsZT4sIFJFTQogICAgICA8L3BhcmE+CiAKICAgICAgPHBhcmE+Ci0gICAgICBUaGUg YWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4g KHNlZSA8eHJlZgotICAgICAgbGlua2VuZD0iaW5kZXhhbSIvPik7IGF0IHByZXNlbnQgdGhpcyBt ZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+Ci0gICAgICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhv dWdoIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nCi0gICAgICBC LXRyZWUgb3IgaGFzaCBpbmRleGVzIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1 c2UgdGhpcwotICAgICAgZG9lcyBub3RoaW5nIHRoYXQgYW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0 cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuCi0gICAgICBTbyBpbiBwcmFjdGljZSB0aGUgYWNjZXNz IG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgorICAgICAg VGhlIGFjY2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0IGVpdGhlciA8bGl0ZXJhbD5hbWdldHR1cGxl PC9saXRlcmFsPgorICAgICAgb3IgPGxpdGVyYWw+YW1nZXRiYXRjaDwvbGl0ZXJhbD4gKHNlZSA8 eHJlZiBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQKKyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8 YWNyb255bT5HSU48L2Fjcm9ueW0+IGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0 J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNo IGluZGV4ZXMKKyAgICAgIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhp cyBkb2VzIG5vdGhpbmcgdGhhdCBhbgorICAgICAgb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQg ZG9lc24ndCBkbyBiZXR0ZXIuICBTbyBpbiBwcmFjdGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRo b2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKICAgICAgIDxhY3Jv bnltPlNQLUdpU1Q8L2Fjcm9ueW0+LgogICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21v ZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwppbmRleCAzMWY4ZDJiODEuLjc0 NWM0YzhmZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1t eV9pbmRleF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlf aW5kZXhfYW0uYwpAQCAtMzM0LDEwICszMzQsMTEgQEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCS5hbWJlZ2luc2NhbiA9IGRpYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBkaXJlc2Nh biwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtp bGxpdGVtc2JhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJLmFtZW5kc2Nh biA9IGRpZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVM TCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5V TEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9 IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDc0NGVmMjlkNC4uYTkwMTI5ODg0 IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjI3LDggKzIyNyw2IEBAIEJUU2Nhbklu c2VydERhdGEKIEJUU2NhbktleVByZXByb2MKIEJUU2Nhbk9wYXF1ZQogQlRTY2FuT3BhcXVlRGF0 YQotQlRTY2FuUG9zRGF0YQotQlRTY2FuUG9zSXRlbQogQlRTaGFyZWQKIEJUU29ydEFycmF5Q29u dGV4dAogQlRTcG9vbApAQCAtMjU3LDYgKzI1NSw5IEBAIEJhc2VCYWNrdXBDbWQKIEJhc2VCYWNr dXBUYXJnZXRIYW5kbGUKIEJhc2VCYWNrdXBUYXJnZXRUeXBlCiBCYXRjaE1WQ0NTdGF0ZQorQmF0 Y2hNYXRjaGluZ0l0ZW0KK0JhdGNoUmluZ0J1ZmZlcgorQmF0Y2hSaW5nSXRlbVBvcwogQmVnaW5E aXJlY3RNb2RpZnlfZnVuY3Rpb24KIEJlZ2luRm9yZWlnbkluc2VydF9mdW5jdGlvbgogQmVnaW5G b3JlaWduTW9kaWZ5X2Z1bmN0aW9uCkBAIC0xMjkwLDYgKzEyOTEsOCBAQCBJbmRleE9yZGVyQnlE aXN0YW5jZQogSW5kZXhQYXRoCiBJbmRleFJ1bnRpbWVLZXlJbmZvCiBJbmRleFNjYW4KK0luZGV4 U2NhbkJhdGNoCitJbmRleFNjYW5CYXRjaERhdGEKIEluZGV4U2NhbkRlc2MKIEluZGV4U2NhbkRl c2NEYXRhCiBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KQEAgLTM0ODQsMTggKzM0ODcsMTcgQEAg YW1jYW5yZXR1cm5fZnVuY3Rpb24KIGFtY29zdGVzdGltYXRlX2Z1bmN0aW9uCiBhbWVuZHNjYW5f ZnVuY3Rpb24KIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24KK2FtZ2V0YmF0Y2hfZnVu Y3Rpb24KIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uCiBhbWdldHRyZWVoZWlnaHRfZnVuY3Rpb24KIGFt Z2V0dHVwbGVfZnVuY3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nhbl9mdW5jdGlvbgogYW1pbnNlcnRf ZnVuY3Rpb24KIGFtaW5zZXJ0Y2xlYW51cF9mdW5jdGlvbgotYW1tYXJrcG9zX2Z1bmN0aW9uCiBh bW9wdGlvbnNfZnVuY3Rpb24KIGFtcGFyYWxsZWxyZXNjYW5fZnVuY3Rpb24KIGFtcHJvcGVydHlf ZnVuY3Rpb24KIGFtcmVzY2FuX2Z1bmN0aW9uCi1hbXJlc3RycG9zX2Z1bmN0aW9uCiBhbXRyYW5z bGF0ZV9jbXB0eXBlX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9zdHJhdGVneV9mdW5jdGlvbgogYW12 YWN1dW1jbGVhbnVwX2Z1bmN0aW9uCi0tIAoyLjUzLjAKCg== --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0004-Use-GetXLogInsertEndRecPtr-in-XLogGetFakeLSN.patch" Content-Disposition: attachment; filename="v12-0004-Use-GetXLogInsertEndRecPtr-in-XLogGetFakeLSN.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdud20 RnJvbSA2YWQwZjEwNmMxNmJkZWIzODZkN2M1ZGJkYjYwZjg4ZTQ4YmFjZWM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGF0ZTog VGh1LCA1IE1hciAyMDI2IDE2OjUxOjI4ICswMTAwClN1YmplY3Q6IFtQQVRDSCB2MTIgMDQvMjNd IFVzZSBHZXRYTG9nSW5zZXJ0RW5kUmVjUHRyIGluIFhMb2dHZXRGYWtlTFNOCgpUaGUgZnVuY3Rp b24gdXNlZCBHZXRYTG9nSW5zZXJ0UmVjUHRyKCkgdG8gZ2VuZXJhdGUgdGhlIGZha2UgTFNOLiBN b3N0Cm9mIHRoZSB0aW1lIHRoaXMgaXMgdGhlIHNhbWUgYXMgd2hhdCBYTG9nSW5zZXJ0KCkgd291 bGQgcmV0dXJuLCBhbmQgc28KaXQgd29ya3MgZmluZSB3aXRoIHRoZSBYTG9nRmx1c2goKSBjYWxs LiBCdXQgaWYgdGhlIGxhc3QgcmVjb3JkIGVuZHMgYXQKYSBwYWdlIGJvdW5kYXJ5LCBHZXRYTG9n SW5zZXJ0UmVjUHRyKCkgcmV0dXJucyBMU04gcG9pbnRpbmcgYWZ0ZXIgdGhlCnBhZ2UgaGVhZGVy LiBJbiBzdWNoIGNhc2UgWExvZ0ZsdXNoKCkgZmFpbHMgd2l0aCBlcnJvcnMgbGlrZSB0aGlzOgoK ICBFUlJPUjogeGxvZyBmbHVzaCByZXF1ZXN0IDAvMDFCRDIwMTggaXMgbm90IHNhdGlzZmllZCAt LS0gZmx1c2hlZCBvbmx5IHRvIDAvMDFCRDIwMDAKClN1Y2ggZmFpbHVyZXMgYXJlIHZlcnkgaGFy ZCB0byB0cmlnZ2VyLCBwYXJ0aWN1bGFybHkgb3V0c2lkZSBhZ2dyZXNzaXZlCnRlc3Qgc2NlbmFy aW9zLgoKRml4ZWQgYnkgaW50cm9kdWNpbmcgR2V0WExvZ0luc2VydEVuZFJlY1B0cigpLCByZXR1 cm5pbmcgdGhlIGNvcnJlY3QgTFNOCndpdGhvdXQgc2tpcHBpbmcgdGhlIGhlYWRlci4gVGhpcyBp cyB0aGUgc2FtZSBhcyBHZXRYTG9nSW5zZXJ0UmVjUHRyKCksCmV4Y2VwdCB0aGF0IGl0IGNhbGxz IFhMb2dCeXRlUG9zVG9FbmRSZWNQdHIoKS4KClRoaXMgaXMgYSBsb25nLXN0YW5kaW5nIGJ1ZyBp biBnaXN0R2V0RmFrZUxTTigpLCBwcm9iYWJseSBpbnRyb2R1Y2VkIGJ5CmM2YjkyMDQxZDM4LiBU aGUgZmFrZSBMU04gYXBwcm9hY2ggd2FzIGdlbmVyYWxpemVkIHRvIG90aGVyIGluZGV4IHR5cGVz LAppbmhlcml0aW5nIHRoZSBzYW1lIGJ1Zy4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vdmY0aGJ3cm90dmhiZ2Nua25ycW1mYnFsdTc1b3lqa21hdXN2eTY2aWM3eDd2dWhhZnhAZTRy dndhdnRqc3dvCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaCAgICAgICAgICAgICAgIHwg IDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jICAgICAgIHwgMTYgKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2luc2VydC5jIHwgIDIg Ky0KIDMgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv eGxvZy5oCmluZGV4IDU1M2Q2ZmM5Yy4uZGNjMTJlYjhjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKQEAgLTIzOCw2 ICsyMzgsNyBAQCBleHRlcm4gYm9vbCBSZWNvdmVyeUluUHJvZ3Jlc3Modm9pZCk7CiBleHRlcm4g UmVjb3ZlcnlTdGF0ZSBHZXRSZWNvdmVyeVN0YXRlKHZvaWQpOwogZXh0ZXJuIGJvb2wgWExvZ0lu c2VydEFsbG93ZWQodm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBHZXRYTG9nSW5zZXJ0UmVjUHRy KHZvaWQpOworZXh0ZXJuIFhMb2dSZWNQdHIgR2V0WExvZ0luc2VydEVuZFJlY1B0cih2b2lkKTsK IGV4dGVybiBYTG9nUmVjUHRyIEdldFhMb2dXcml0ZVJlY1B0cih2b2lkKTsKIAogZXh0ZXJuIHVp bnQ2NCBHZXRTeXN0ZW1JZGVudGlmaWVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CmluZGV4IDkyZTQ0YTUwMS4uMmI2ZTYxMjAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CkBAIC05NjIzLDYgKzk2MjMsMjIgQEAgR2V0WExvZ0luc2VydFJlY1B0cih2b2lkKQogCXJldHVy biBYTG9nQnl0ZVBvc1RvUmVjUHRyKGN1cnJlbnRfYnl0ZXBvcyk7CiB9CiAKKy8qCisgKiBHZXQg bGF0ZXN0IFdBTCBpbnNlcnQgcG9pbnRlcgorICovCitYTG9nUmVjUHRyCitHZXRYTG9nSW5zZXJ0 RW5kUmVjUHRyKHZvaWQpCit7CisJWExvZ0N0bEluc2VydCAqSW5zZXJ0ID0gJlhMb2dDdGwtPklu c2VydDsKKwl1aW50NjQJCWN1cnJlbnRfYnl0ZXBvczsKKworCVNwaW5Mb2NrQWNxdWlyZSgmSW5z ZXJ0LT5pbnNlcnRwb3NfbGNrKTsKKwljdXJyZW50X2J5dGVwb3MgPSBJbnNlcnQtPkN1cnJCeXRl UG9zOworCVNwaW5Mb2NrUmVsZWFzZSgmSW5zZXJ0LT5pbnNlcnRwb3NfbGNrKTsKKworCXJldHVy biBYTG9nQnl0ZVBvc1RvRW5kUmVjUHRyKGN1cnJlbnRfYnl0ZXBvcyk7Cit9CisKIC8qCiAgKiBH ZXQgbGF0ZXN0IFdBTCB3cml0ZSBwb2ludGVyCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3hsb2dpbnNlcnQuYwppbmRleCBjMDlkZWIxNzQuLjdjNDdmNjBjOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2luc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYwpAQCAtNTk4LDcgKzU5OCw3IEBAIFhMb2dHZXRGYWtl TFNOKFJlbGF0aW9uIHJlbCkKIAkJICogbGFzdCBjYWxsLgogCQkgKi8KIAkJc3RhdGljIFhMb2dS ZWNQdHIgbGFzdGxzbiA9IEludmFsaWRYTG9nUmVjUHRyOwotCQlYTG9nUmVjUHRyCWN1cnJsc24g PSBHZXRYTG9nSW5zZXJ0UmVjUHRyKCk7CisJCVhMb2dSZWNQdHIJY3VycmxzbiA9IEdldFhMb2dJ bnNlcnRFbmRSZWNQdHIoKTsKIAogCQlBc3NlcnQoIVJlbGF0aW9uTmVlZHNXQUwocmVsKSk7CiAJ CUFzc2VydChSZWxhdGlvbklzUGVybWFuZW50KHJlbCkpOwotLSAKMi41My4wCgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0002-Don-t-allocate-_bt_search-stack.patch" Content-Disposition: attachment; filename="v12-0002-Don-t-allocate-_bt_search-stack.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdui22 RnJvbSAzZmRiYTI5Y2QwMjRhNDgxM2U0Y2RmNDYxMTMwNWNmNDZiMzMzYWEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMTIgRmViIDIwMjYgMTQ6MDY6NDcgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiAwMi8yM10g RG9uJ3QgYWxsb2NhdGUgX2J0X3NlYXJjaCBzdGFjawoKLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv bmJ0cmVlLmggICAgICAgICAgIHwgIDMgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dGluc2VydC5jIHwgMTkgKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jICAgfCAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2gu YyB8IDM2ICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnR1dGlscy5jICB8IDE2IC0tLS0tLS0tLS0tLQogY29udHJpYi9hbWNoZWNrL3Zlcmlm eV9uYnRyZWUuYyAgICAgICB8ICA0ICstLQogNiBmaWxlcyBjaGFuZ2VkLCA0MCBpbnNlcnRpb25z KCspLCA0MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggNzcyMjQ4NTk2Li5kYTc1 MDNjNTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTEyODQsNyArMTI4NCw3IEBAIGV4dGVybiBpbnQJ X2J0X2JpbnNyY2hfYXJyYXlfc2tleShGbWdySW5mbyAqb3JkZXJwcm9jLAogICogcHJvdG90eXBl cyBmb3IgZnVuY3Rpb25zIGluIG5idHNlYXJjaC5jCiAgKi8KIGV4dGVybiBCVFN0YWNrIF9idF9z ZWFyY2goUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAot CQkJCQkJICBCdWZmZXIgKmJ1ZlAsIGludCBhY2Nlc3MpOworCQkJCQkJICBCdWZmZXIgKmJ1ZlAs IGludCBhY2Nlc3MsIGJvb2wgcmV0dXJuc3RhY2spOwogZXh0ZXJuIE9mZnNldE51bWJlciBfYnRf Ymluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlKTsK IGV4dGVybiBpbnQzMiBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsIEJUU2Nhbkluc2VydCBrZXks IFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZm51bSk7CiBleHRlcm4gYm9vbCBfYnRfZmlyc3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CkBAIC0xMjk1LDcgKzEyOTUs NiBAQCBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIg bGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBu YnR1dGlscy5jCiAgKi8KIGV4dGVybiBCVFNjYW5JbnNlcnQgX2J0X21rc2NhbmtleShSZWxhdGlv biByZWwsIEluZGV4VHVwbGUgaXR1cCk7Ci1leHRlcm4gdm9pZCBfYnRfZnJlZXN0YWNrKEJUU3Rh Y2sgc3RhY2spOwogZXh0ZXJuIHZvaWQgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4p OwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfdmFjdXVtX2N5Y2xlaWQoUmVsYXRpb24gcmVsKTsKIGV4 dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1bShSZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggZDE3YWFhNWFhLi42NWRmYjhkZDQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwpAQCAtNjEsNiArNjEsNyBAQCBzdGF0aWMg QnVmZmVyIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbklu c2VydCBpdHVwX2tleSwKIAkJCQkJCUluZGV4VHVwbGUgbnBvc3RpbmcsIHVpbnQxNiBwb3N0aW5n b2ZmKTsKIHN0YXRpYyB2b2lkIF9idF9pbnNlcnRfcGFyZW50KFJlbGF0aW9uIHJlbCwgUmVsYXRp b24gaGVhcHJlbCwgQnVmZmVyIGJ1ZiwKIAkJCQkJCQkgIEJ1ZmZlciByYnVmLCBCVFN0YWNrIHN0 YWNrLCBib29sIGlzcm9vdCwgYm9vbCBpc29ubHkpOworc3RhdGljIHZvaWQgX2J0X2ZyZWVzdGFj ayhCVFN0YWNrIHN0YWNrKTsKIHN0YXRpYyBCdWZmZXIgX2J0X25ld2xldmVsKFJlbGF0aW9uIHJl bCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVyIGxidWYsIEJ1ZmZlciByYnVmKTsKIHN0YXRpYyBp bmxpbmUgYm9vbCBfYnRfcGdhZGR0dXAoUGFnZSBwYWdlLCBTaXplIGl0ZW1zaXplLCBjb25zdCBJ bmRleFR1cGxlRGF0YSAqaXR1cCwKIAkJCQkJCQkJT2Zmc2V0TnVtYmVyIGl0dXBfb2ZmLCBib29s IG5ld2ZpcnN0ZGF0YWl0ZW0pOwpAQCAtMzgwLDcgKzM4MSw3IEBAIF9idF9zZWFyY2hfaW5zZXJ0 KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0 ZSkKIAogCS8qIENhbm5vdCB1c2Ugb3B0aW1pemF0aW9uIC0tIGRlc2NlbmQgdHJlZSwgcmV0dXJu IHByb3BlciBkZXNjZW50IHN0YWNrICovCiAJcmV0dXJuIF9idF9zZWFyY2gocmVsLCBoZWFwcmVs LCBpbnNlcnRzdGF0ZS0+aXR1cF9rZXksICZpbnNlcnRzdGF0ZS0+YnVmLAotCQkJCQkgIEJUX1dS SVRFKTsKKwkJCQkJICBCVF9XUklURSwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC0yNDM4LDYgKzI0Mzks MjIgQEAgX2J0X2dldHN0YWNrYnVmKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRT dGFjayBzdGFjaywgQmxvY2tOdW1iZXIgY2hpbGQKIAl9CiB9CiAKKy8qCisgKiBfYnRfZnJlZXN0 YWNrKCkgLS0gZnJlZSBhIHJldHJhY2VtZW50IHN0YWNrIG1hZGUgYnkgX2J0X3NlYXJjaF9pbnNl cnQuCisgKi8KK3N0YXRpYyB2b2lkCitfYnRfZnJlZXN0YWNrKEJUU3RhY2sgc3RhY2spCit7CisJ QlRTdGFjawkJb3N0YWNrOworCisJd2hpbGUgKHN0YWNrICE9IE5VTEwpCisJeworCQlvc3RhY2sg PSBzdGFjazsKKwkJc3RhY2sgPSBzdGFjay0+YnRzX3BhcmVudDsKKwkJcGZyZWUob3N0YWNrKTsK Kwl9Cit9CisKIC8qCiAgKglfYnRfbmV3bGV2ZWwoKSAtLSBDcmVhdGUgYSBuZXcgbGV2ZWwgYWJv dmUgcm9vdCBwYWdlLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggNDEy NWMxODVlLi45YWE3ODA2OGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0x OTY2LDcgKzE5NjYsNyBAQCBfYnRfcGFnZWRlbChSZWxhdGlvbiByZWwsIEJ1ZmZlciBsZWFmYnVm LCBCVFZhY1N0YXRlICp2c3RhdGUpCiAJCQkJLyogU2V0IHVwIGEgQlRMZXNzU3RyYXRlZ3lOdW1i ZXItbGlrZSBpbnNlcnRpb24gc2NhbiBrZXkgKi8KIAkJCQlpdHVwX2tleS0+bmV4dGtleSA9IGZh bHNlOwogCQkJCWl0dXBfa2V5LT5iYWNrd2FyZCA9IHRydWU7Ci0JCQkJc3RhY2sgPSBfYnRfc2Vh cmNoKHJlbCwgTlVMTCwgaXR1cF9rZXksICZzbGVhZmJ1ZiwgQlRfUkVBRCk7CisJCQkJc3RhY2sg PSBfYnRfc2VhcmNoKHJlbCwgTlVMTCwgaXR1cF9rZXksICZzbGVhZmJ1ZiwgQlRfUkVBRCwgdHJ1 ZSk7CiAJCQkJLyogd29uJ3QgbmVlZCBhIHNlY29uZCBsb2NrIG9yIHBpbiBvbiBsZWFmYnVmICov CiAJCQkJX2J0X3JlbGJ1ZihyZWwsIHNsZWFmYnVmKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0c2VhcmNoLmMKaW5kZXggMzJhZTBiZGE4Li5iZmFhZjFmMDEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzZWFyY2guYwpAQCAtODAsMTAgKzgwLDEzIEBAIF9idF9kcm9wX2xvY2tfYW5k X21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKICAqIFRoZSBwYXNzZWQg c2NhbmtleSBpcyBhbiBpbnNlcnRpb24tdHlwZSBzY2Fua2V5IChzZWUgbmJ0cmVlL1JFQURNRSks CiAgKiBidXQgaXQgY2FuIG9taXQgdGhlIHJpZ2h0bW9zdCBjb2x1bW4ocykgb2YgdGhlIGluZGV4 LgogICoKLSAqIFJldHVybiB2YWx1ZSBpcyBhIHN0YWNrIG9mIHBhcmVudC1wYWdlIHBvaW50ZXJz IChpLmUuIHRoZXJlIGlzIG5vIGVudHJ5IGZvcgotICogdGhlIGxlYWYgbGV2ZWwvcGFnZSkuICAq YnVmUCBpcyBzZXQgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGxlYWYtcGFnZSBidWZmZXIsCi0gKiB3 aGljaCBpcyBsb2NrZWQgYW5kIHBpbm5lZC4gIE5vIGxvY2tzIGFyZSBoZWxkIG9uIHRoZSBwYXJl bnQgcGFnZXMsCi0gKiBob3dldmVyIQorICogSWYgcmV0dXJuc3RhY2sgaXMgdHJ1ZSwgcmV0dXJu IHZhbHVlIGlzIGEgc3RhY2sgb2YgcGFyZW50LXBhZ2UgcG9pbnRlcnMKKyAqIChpLmUuIHRoZXJl IGlzIG5vIGVudHJ5IGZvciB0aGUgbGVhZiBsZXZlbC9wYWdlKS4gIElmIHJldHVybnN0YWNrIGlz IGZhbHNlLAorICogd2UganVzdCByZXR1cm4gTlVMTC4gIFRoaXMgc2NoZW1lIGFsbG93cyBjYWxs ZXJzIHRoYXQgZG9uJ3QgbmVlZCBhIGRlc2NlbnQKKyAqIHN0YWNrIHRvIGF2b2lkIHBhbGxvYyBj aHVybi4KKyAqCisgKiBXaGVuIHdlIHJldHVybiAqYnVmUCBpcyBzZXQgdG8gdGhlIGFkZHJlc3Mg b2YgdGhlIGxlYWYtcGFnZSBidWZmZXIsIHdoaWNoCisgKiBpcyBsb2NrZWQgYW5kIHBpbm5lZC4g IE5vIGxvY2tzIGFyZSBoZWxkIG9uIHRoZSBwYXJlbnQgcGFnZXMsIGhvd2V2ZXIhCiAgKgogICog VGhlIHJldHVybmVkIGJ1ZmZlciBpcyBsb2NrZWQgYWNjb3JkaW5nIHRvIGFjY2VzcyBwYXJhbWV0 ZXIuICBBZGRpdGlvbmFsbHksCiAgKiBhY2Nlc3MgPSBCVF9XUklURSB3aWxsIGFsbG93IGFuIGVt cHR5IHJvb3QgcGFnZSB0byBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC4KQEAgLTk2LDcgKzk5LDcg QEAgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVl IHNvKQogICovCiBCVFN0YWNrCiBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVh cHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyICpidWZQLAotCQkgICBpbnQgYWNjZXNzKQor CQkgICBpbnQgYWNjZXNzLCBib29sIHJldHVybnN0YWNrKQogewogCUJUU3RhY2sJCXN0YWNrX2lu ID0gTlVMTDsKIAlpbnQJCQlwYWdlX2FjY2VzcyA9IEJUX1JFQUQ7CkBAIC0xNjAsMTAgKzE2Mywx MyBAQCBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5z ZXJ0IGtleSwgQnVmZmVyICpidWZQLAogCQkgKiBwYWdlIG9uZSBsZXZlbCBkb3duLCBpdCB1c3Vh bGx5IGVuZHMgdXAgaW5zZXJ0aW5nIGEgbmV3IHBpdm90CiAJCSAqIHR1cGxlL2Rvd25saW5rIGlt bWVkaWF0ZWx5IGFmdGVyIHRoZSBsb2NhdGlvbiByZWNvcmRlZCBoZXJlLgogCQkgKi8KLQkJbmV3 X3N0YWNrID0gKEJUU3RhY2spIHBhbGxvY19vYmplY3QoQlRTdGFja0RhdGEpOwotCQluZXdfc3Rh Y2stPmJ0c19ibGtubyA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKCpidWZQKTsKLQkJbmV3X3N0YWNr LT5idHNfb2Zmc2V0ID0gb2ZmbnVtOwotCQluZXdfc3RhY2stPmJ0c19wYXJlbnQgPSBzdGFja19p bjsKKwkJaWYgKHJldHVybnN0YWNrKQorCQl7CisJCQluZXdfc3RhY2sgPSAoQlRTdGFjaykgcGFs bG9jX29iamVjdChCVFN0YWNrRGF0YSk7CisJCQluZXdfc3RhY2stPmJ0c19ibGtubyA9IEJ1ZmZl ckdldEJsb2NrTnVtYmVyKCpidWZQKTsKKwkJCW5ld19zdGFjay0+YnRzX29mZnNldCA9IG9mZm51 bTsKKwkJCW5ld19zdGFjay0+YnRzX3BhcmVudCA9IHN0YWNrX2luOworCQl9CiAKIAkJLyoKIAkJ ICogUGFnZSBsZXZlbCAxIGlzIGxvd2VzdCBub24tbGVhZiBwYWdlIGxldmVsIHByaW9yIHRvIGxl YXZlcy4gIFNvLCBpZgpAQCAtMTc3LDcgKzE4Myw4IEBAIF9idF9zZWFyY2goUmVsYXRpb24gcmVs LCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgKmJ1ZlAsCiAJCSpi dWZQID0gX2J0X3JlbGFuZGdldGJ1ZihyZWwsICpidWZQLCBjaGlsZCwgcGFnZV9hY2Nlc3MpOwog CiAJCS8qIG9rYXksIGFsbCBzZXQgdG8gbW92ZSBkb3duIGEgbGV2ZWwgKi8KLQkJc3RhY2tfaW4g PSBuZXdfc3RhY2s7CisJCWlmIChyZXR1cm5zdGFjaykKKwkJCXN0YWNrX2luID0gbmV3X3N0YWNr OwogCX0KIAogCS8qCkBAIC04NzksNyArODg2LDYgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhS ZWxhdGlvbjsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 Ci0JQlRTdGFjawkJc3RhY2s7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bTsKIAlCVFNjYW5JbnNlcnRE YXRhIGluc2tleTsKIAlTY2FuS2V5CQlzdGFydEtleXNbSU5ERVhfTUFYX0tFWVNdOwpAQCAtMTUw NiwxMCArMTUxMiw3IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCSAqIHBvc2l0aW9uIG91cnNlbHZlcyBvbiB0aGUgdGFyZ2V0IGxlYWYgcGFnZS4K IAkgKi8KIAlBc3NlcnQoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSA9PSBpbnNrZXkuYmFj a3dhcmQpOwotCXN0YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3Vy clBvcy5idWYsIEJUX1JFQUQpOwotCi0JLyogZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBzdGFjayBh cm91bmQuLi4gKi8KLQlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKKwlfYnRfc2VhcmNoKHJlbCwgTlVM TCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOwogCiAJaWYgKCFC dWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCiAJewpAQCAtMTUyNyw4ICsxNTMwLDcgQEAg X2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCWlmIChJ c29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQogCQl7CiAJCQlQcmVkaWNhdGVMb2NrUmVsYXRpb24o cmVsLCBzY2FuLT54c19zbmFwc2hvdCk7Ci0JCQlzdGFjayA9IF9idF9zZWFyY2gocmVsLCBOVUxM LCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFEKTsKLQkJCV9idF9mcmVlc3RhY2so c3RhY2spOworCQkJX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5i dWYsIEJUX1JFQUQsIGZhbHNlKTsKIAkJfQogCiAJCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3Vy clBvcy5idWYpKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGls cy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCmluZGV4IDVjNTBmMGRk MS4uMWI5ZjJhYTEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCkBAIC0xNDQs MjIgKzE0NCw2IEBAIF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXAp CiAJcmV0dXJuIGtleTsKIH0KIAotLyoKLSAqIGZyZWUgYSByZXRyYWNlbWVudCBzdGFjayBtYWRl IGJ5IF9idF9zZWFyY2guCi0gKi8KLXZvaWQKLV9idF9mcmVlc3RhY2soQlRTdGFjayBzdGFjaykK LXsKLQlCVFN0YWNrCQlvc3RhY2s7Ci0KLQl3aGlsZSAoc3RhY2sgIT0gTlVMTCkKLQl7Ci0JCW9z dGFjayA9IHN0YWNrOwotCQlzdGFjayA9IHN0YWNrLT5idHNfcGFyZW50OwotCQlwZnJlZShvc3Rh Y2spOwotCX0KLX0KLQogLyoKICAqIHFzb3J0IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGludCBh cnJheXMKICAqLwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBi L2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKaW5kZXggZTA0YjdjYTY5Li5iNzRhYjVm N2EgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKKysrIGIvY29u dHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwpAQCAtMzAwOSw3ICszMDA5LDYgQEAgc3RhdGlj IGJvb2wKIGJ0X3Jvb3RkZXNjZW5kKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUg aXR1cCkKIHsKIAlCVFNjYW5JbnNlcnQga2V5OwotCUJUU3RhY2sJCXN0YWNrOwogCUJ1ZmZlcgkJ bGJ1ZjsKIAlib29sCQlleGlzdHM7CiAKQEAgLTMwMjYsNyArMzAyNSw3IEBAIGJ0X3Jvb3RkZXNj ZW5kKEJ0cmVlQ2hlY2tTdGF0ZSAqc3RhdGUsIEluZGV4VHVwbGUgaXR1cCkKIAkgKi8KIAlBc3Nl cnQoc3RhdGUtPnJlYWRvbmx5ICYmIHN0YXRlLT5yb290ZGVzY2VuZCk7CiAJZXhpc3RzID0gZmFs c2U7Ci0Jc3RhY2sgPSBfYnRfc2VhcmNoKHN0YXRlLT5yZWwsIE5VTEwsIGtleSwgJmxidWYsIEJU X1JFQUQpOworCV9idF9zZWFyY2goc3RhdGUtPnJlbCwgTlVMTCwga2V5LCAmbGJ1ZiwgQlRfUkVB RCwgZmFsc2UpOwogCiAJaWYgKEJ1ZmZlcklzVmFsaWQobGJ1ZikpCiAJewpAQCAtMzA1Myw3ICsz MDUyLDYgQEAgYnRfcm9vdGRlc2NlbmQoQnRyZWVDaGVja1N0YXRlICpzdGF0ZSwgSW5kZXhUdXBs ZSBpdHVwKQogCQlfYnRfcmVsYnVmKHN0YXRlLT5yZWwsIGxidWYpOwogCX0KIAotCV9idF9mcmVl c3RhY2soc3RhY2spOwogCXBmcmVlKGtleSk7CiAKIAlyZXR1cm4gZXhpc3RzOwotLSAKMi41My4w Cgo= --000000000000843716064cb1c648 Content-Type: application/octet-stream; name="v12-0003-Extract-fake-LSN-infrastructure-from-GiST-index-.patch" Content-Disposition: attachment; filename="v12-0003-Extract-fake-LSN-infrastructure-from-GiST-index-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mml3cdug21 RnJvbSA0YzVlYmE3YWJlZWE0YzhiMDAzMjM5MWNkY2JlMWY5ZTgyNzFlNDUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTg6MTEgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiAwMy8yM10g RXh0cmFjdCBmYWtlIExTTiBpbmZyYXN0cnVjdHVyZSBmcm9tIEdpU1QgaW5kZXggQU0uCgpFeHRy YWN0IHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgR2lTVCB0byBnZW5lcmF0ZSBmYWtlIExTTnMg c28gdGhhdApvdGhlciBpbmRleCBBTXMgY2FuIHJldXNlIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgdG8g Z2VuZXJhdGUgZmFrZSBMU05zLgoKUHJlcGFyYXRpb24gZm9yIGFuIHVwY29taW5nIGNvbW1pdCB0 aGF0IHdpbGwgY2hhbmdlIHRoZSBydWxlcyBhcm91bmQKaG9sZGluZyBvbiB0byBidWZmZXIgcGlu cyBvbiBsZWFmIHBhZ2VzIGluIHVubG9nZ2VkIG5idHJlZSBpbmRleGVzCihhY3R1YWxseSwgaW4g YWxsIGNhc2VzIGJhcnJpbmcgc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdCkuClRo aXMgaXMgdGhlIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIG5ldyBhbWdldGJhdGNoIGludGVyZmFj ZS4gIEFub3RoZXIKcHJlcGFyYXRvcnkgY29tbWl0IHdpbGwgYWRkIGZha2UgTFNOIHN1cHBvcnQg dG8gbmJ0cmVlIGFoZWFkIG9mIHRoZQphbWdldGJhdGNoIGNvbW1pdC4KCkJ1bXAgWExPR19QQUdF X01BR0lDIGR1ZSB0byBYTE9HX0dJU1RfQVNTSUdOX0xTTiBiZWNvbWluZwpYTE9HX0FTU0lHTl9M U04uCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1o YiswRHIySzBEdGdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9w cml2YXRlLmggICAgICAgfCAgNCAtLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3R4bG9nLmggICAg ICAgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggICAgICAgICAgICAgICB8 ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9naW5zZXJ0LmggICAgICAgICB8ICAyICsKIHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oICAgICAgICB8ICAyICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgfCAgNiArLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3R1dGlsLmMgICAgICB8IDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYyAgICB8ICA4ICstLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdHhsb2cuYyAgICAgIHwgMjEgLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9naXN0ZGVzYy5jICB8ICA2IC0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL3hsb2dkZXNjLmMgIHwgIDcgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMgICAgICAgfCAyOCArKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z2luc2VydC5jIHwgNjUgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgICAgIHwgIDYgKy0tCiAxNCBmaWxlcyBjaGFuZ2VkLCAxMTUg aW5zZXJ0aW9ucygrKSwgOTMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL2dpc3RfcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5o CmluZGV4IDU1MmY2MDVjMC4uNDQ1MTRmMWNiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvZ2lzdF9wcml2YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5o CkBAIC00NTcsOCArNDU3LDYgQEAgZXh0ZXJuIFhMb2dSZWNQdHIgZ2lzdFhMb2dTcGxpdChib29s IHBhZ2VfaXNfbGVhZiwKIAkJCQkJCQkJQmxvY2tOdW1iZXIgb3JpZ3JsaW5rLCBHaXN0TlNOIG9y aWduc24sCiAJCQkJCQkJCUJ1ZmZlciBsZWZ0Y2hpbGRidWYsIGJvb2wgbWFya2ZvbGxvd3JpZ2h0 KTsKIAotZXh0ZXJuIFhMb2dSZWNQdHIgZ2lzdFhMb2dBc3NpZ25MU04odm9pZCk7Ci0KIC8qIGdp c3RnZXQuYyAqLwogZXh0ZXJuIGJvb2wgZ2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGdpc3RnZXRiaXRtYXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CkBAIC01MzEsOCArNTI5LDYgQEAgZXh0ZXJuIHZv aWQgZ2lzdE1ha2VVbmlvbktleShHSVNUU1RBVEUgKmdpc3RzdGF0ZSwgaW50IGF0dG5vLAogCQkJ CQkJCSBHSVNURU5UUlkgKmVudHJ5MiwgYm9vbCBpc251bGwyLAogCQkJCQkJCSBEYXR1bSAqZHN0 LCBib29sICpkc3Rpc251bGwpOwogCi1leHRlcm4gWExvZ1JlY1B0ciBnaXN0R2V0RmFrZUxTTihS ZWxhdGlvbiByZWwpOwotCiAvKiBnaXN0dmFjdXVtLmMgKi8KIGV4dGVybiBJbmRleEJ1bGtEZWxl dGVSZXN1bHQgKmdpc3RidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJ CQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2lzdHhsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oCmluZGV4 IGQzZDFjNjU0OS4uMWMyY2Y2ZTgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lz dHhsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaApAQCAtMjYsNyArMjYs NyBAQAogIC8qICNkZWZpbmUgWExPR19HSVNUX0lOU0VSVF9DT01QTEVURQkgMHg0MCAqLwkvKiBu b3QgdXNlZCBhbnltb3JlICovCiAgLyogI2RlZmluZSBYTE9HX0dJU1RfQ1JFQVRFX0lOREVYCQkg MHg1MCAqLwkvKiBub3QgdXNlZCBhbnltb3JlICovCiAjZGVmaW5lIFhMT0dfR0lTVF9QQUdFX0RF TEVURQkJMHg2MAotI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJMHg3MAkvKiBub3AsIGFz c2lnbiBuZXcgTFNOICovCisgLyogI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJIDB4NzAg Ki8JLyogbm90IHVzZWQgYW55bW9yZSAqLwogCiAvKgogICogQmFja3VwIEJsayAwOiB1cGRhdGVk IHBhZ2UuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2cuaAppbmRleCBmZGZiNTcyNDYuLjU1M2Q2ZmM5YyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5o CkBAIC0yNTgsNiArMjU4LDcgQEAgZXh0ZXJuIGJvb2wgQ3JlYXRlUmVzdGFydFBvaW50KGludCBm bGFncyk7CiBleHRlcm4gV0FMQXZhaWxhYmlsaXR5IEdldFdBTEF2YWlsYWJpbGl0eShYTG9nUmVj UHRyIHRhcmdldExTTik7CiBleHRlcm4gdm9pZCBYTG9nUHV0TmV4dE9pZChPaWQgbmV4dE9pZCk7 CiBleHRlcm4gWExvZ1JlY1B0ciBYTG9nUmVzdG9yZVBvaW50KGNvbnN0IGNoYXIgKnJwTmFtZSk7 CitleHRlcm4gWExvZ1JlY1B0ciBYTG9nQXNzaWduTFNOKHZvaWQpOwogZXh0ZXJuIHZvaWQgVXBk YXRlRnVsbFBhZ2VXcml0ZXModm9pZCk7CiBleHRlcm4gdm9pZCBHZXRGdWxsUGFnZVdyaXRlSW5m byhYTG9nUmVjUHRyICpSZWRvUmVjUHRyX3AsIGJvb2wgKmRvUGFnZVdyaXRlc19wKTsKIGV4dGVy biBYTG9nUmVjUHRyIEdldFJlZG9SZWNQdHIodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MveGxvZ2luc2VydC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dpbnNlcnQuaApp bmRleCAxNmViYzc2ZTcuLjkxZGZiZDU2MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hsb2dpbnNlcnQuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2luc2VydC5oCkBAIC02 NCw2ICs2NCw4IEBAIGV4dGVybiB2b2lkIGxvZ19uZXdwYWdlX3JhbmdlKFJlbGF0aW9uIHJlbCwg Rm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCSAgQmxvY2tOdW1iZXIgc3RhcnRibGssIEJsb2Nr TnVtYmVyIGVuZGJsaywgYm9vbCBwYWdlX3N0ZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBYTG9nU2F2 ZUJ1ZmZlckZvckhpbnQoQnVmZmVyIGJ1ZmZlciwgYm9vbCBidWZmZXJfc3RkKTsKIAorZXh0ZXJu IFhMb2dSZWNQdHIgWExvZ0dldEZha2VMU04oUmVsYXRpb24gcmVsKTsKKwogZXh0ZXJuIHZvaWQg SW5pdFhMb2dJbnNlcnQodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBYTE9HSU5TRVJUX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKaW5kZXggNzUwM2RiMWFmLi43N2E2NjFlODEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oCisrKyBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfY29udHJvbC5oCkBAIC03OCw3ICs3OCw3IEBAIHR5cGVkZWYgc3RydWN0IENo ZWNrUG9pbnQKICNkZWZpbmUgWExPR19FTkRfT0ZfUkVDT1ZFUlkJCQkweDkwCiAjZGVmaW5lIFhM T0dfRlBJX0ZPUl9ISU5UCQkJCTB4QTAKICNkZWZpbmUgWExPR19GUEkJCQkJCQkweEIwCi0vKiAw eEMwIGlzIHVzZWQgaW4gUG9zdGdyZXMgOS41LTExICovCisjZGVmaW5lIFhMT0dfQVNTSUdOX0xT TgkJCQkJMHhDMAogI2RlZmluZSBYTE9HX09WRVJXUklURV9DT05UUkVDT1JECQkweEQwCiAjZGVm aW5lIFhMT0dfQ0hFQ0tQT0lOVF9SRURPCQkJMHhFMAogI2RlZmluZSBYTE9HX0xPR0lDQUxfREVD T0RJTkdfU1RBVFVTX0NIQU5HRQkweEYwCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggZGZmZmNl M2UzLi44NTY1ZTIyNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3Qu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTUxNyw3ICs1MTcsNyBA QCBnaXN0cGxhY2V0b3BhZ2UoUmVsYXRpb24gcmVsLCBTaXplIGZyZWVzcGFjZSwgR0lTVFNUQVRF ICpnaXN0c3RhdGUsCiAJCQkJCQkJCQkgICBkaXN0LCBvbGRybGluaywgb2xkbnNuLCBsZWZ0Y2hp bGRidWYsCiAJCQkJCQkJCQkgICBtYXJrZm9sbG93cmlnaHQpOwogCQkJZWxzZQotCQkJCXJlY3B0 ciA9IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVs KTsKIAkJfQogCiAJCWZvciAocHRyID0gZGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCkBAIC01 OTQsNyArNTk0LDcgQEAgZ2lzdHBsYWNldG9wYWdlKFJlbGF0aW9uIHJlbCwgU2l6ZSBmcmVlc3Bh Y2UsIEdJU1RTVEFURSAqZ2lzdHN0YXRlLAogCQkJCQkJCQkJCWxlZnRjaGlsZGJ1Zik7CiAJCQl9 CiAJCQllbHNlCi0JCQkJcmVjcHRyID0gZ2lzdEdldEZha2VMU04ocmVsKTsKKwkJCQlyZWNwdHIg PSBYTG9nR2V0RmFrZUxTTihyZWwpOwogCQl9CiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsK IApAQCAtMTczMyw3ICsxNzMzLDcgQEAgZ2lzdHBydW5lcGFnZShSZWxhdGlvbiByZWwsIFBhZ2Ug cGFnZSwgQnVmZmVyIGJ1ZmZlciwgUmVsYXRpb24gaGVhcFJlbCkKIAkJCVBhZ2VTZXRMU04ocGFn ZSwgcmVjcHRyKTsKIAkJfQogCQllbHNlCi0JCQlQYWdlU2V0TFNOKHBhZ2UsIGdpc3RHZXRGYWtl TFNOKHJlbCkpOworCQkJUGFnZVNldExTTihwYWdlLCBYTG9nR2V0RmFrZUxTTihyZWwpKTsKIAog CQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMKaW5k ZXggMjc5NzJmYWQyLi4wZjU4ZjYxODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aXN0L2dpc3R1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwuYwpA QCAtMTAwNyw1NiArMTAwNyw2IEBAIGdpc3Rwcm9wZXJ0eShPaWQgaW5kZXhfb2lkLCBpbnQgYXR0 bm8sCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gKiBTb21lIGluZGV4ZXMgYXJlIG5vdCBXQUwt bG9nZ2VkLCBidXQgd2UgbmVlZCBMU05zIHRvIGRldGVjdCBjb25jdXJyZW50IHBhZ2UKLSAqIHNw bGl0cyBhbnl3YXkuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBmYWtlIHNlcXVlbmNlIG9mIExT TnMgZm9yIHRoYXQKLSAqIHB1cnBvc2UuCi0gKi8KLVhMb2dSZWNQdHIKLWdpc3RHZXRGYWtlTFNO KFJlbGF0aW9uIHJlbCkKLXsKLQlpZiAocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJF TFBFUlNJU1RFTkNFX1RFTVApCi0JewotCQkvKgotCQkgKiBUZW1wb3JhcnkgcmVsYXRpb25zIGFy ZSBvbmx5IGFjY2Vzc2libGUgaW4gb3VyIHNlc3Npb24sIHNvIGEgc2ltcGxlCi0JCSAqIGJhY2tl bmQtbG9jYWwgY291bnRlciB3aWxsIGRvLgotCQkgKi8KLQkJc3RhdGljIFhMb2dSZWNQdHIgY291 bnRlciA9IEZpcnN0Tm9ybWFsVW5sb2dnZWRMU047Ci0KLQkJcmV0dXJuIGNvdW50ZXIrKzsKLQl9 Ci0JZWxzZSBpZiAoUmVsYXRpb25Jc1Blcm1hbmVudChyZWwpKQotCXsKLQkJLyoKLQkJICogV0FM LWxvZ2dpbmcgb24gdGhpcyByZWxhdGlvbiB3aWxsIHN0YXJ0IGFmdGVyIGNvbW1pdCwgc28gaXRz IExTTnMKLQkJICogbXVzdCBiZSBkaXN0aW5jdCBudW1iZXJzIHNtYWxsZXIgdGhhbiB0aGUgTFNO IGF0IHRoZSBuZXh0IGNvbW1pdC4KLQkJICogRW1pdCBhIGR1bW15IFdBTCByZWNvcmQgaWYgaW5z ZXJ0LUxTTiBoYXNuJ3QgYWR2YW5jZWQgYWZ0ZXIgdGhlCi0JCSAqIGxhc3QgY2FsbC4KLQkJICov Ci0JCXN0YXRpYyBYTG9nUmVjUHRyIGxhc3Rsc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKLQkJWExv Z1JlY1B0cgljdXJybHNuID0gR2V0WExvZ0luc2VydFJlY1B0cigpOwotCi0JCS8qIFNob3VsZG4n dCBiZSBjYWxsZWQgZm9yIFdBTC1sb2dnaW5nIHJlbGF0aW9ucyAqLwotCQlBc3NlcnQoIVJlbGF0 aW9uTmVlZHNXQUwocmVsKSk7Ci0KLQkJLyogTm8gbmVlZCBmb3IgYW4gYWN0dWFsIHJlY29yZCBp ZiB3ZSBhbHJlYWR5IGhhdmUgYSBkaXN0aW5jdCBMU04gKi8KLQkJaWYgKFhMb2dSZWNQdHJJc1Zh bGlkKGxhc3Rsc24pICYmIGxhc3Rsc24gPT0gY3VycmxzbikKLQkJCWN1cnJsc24gPSBnaXN0WExv Z0Fzc2lnbkxTTigpOwotCi0JCWxhc3Rsc24gPSBjdXJybHNuOwotCQlyZXR1cm4gY3VycmxzbjsK LQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogVW5sb2dnZWQgcmVsYXRpb25zIGFyZSBhY2Nlc3Np YmxlIGZyb20gb3RoZXIgYmFja2VuZHMsIGFuZCBzdXJ2aXZlCi0JCSAqIChjbGVhbikgcmVzdGFy dHMuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpIGhhbmRsZXMgdGhhdCBmb3IgdXMuCi0JCSAq LwotCQlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNF X1VOTE9HR0VEKTsKLQkJcmV0dXJuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpOwotCX0KLX0K LQogLyoKICAqIFRoaXMgaXMgYSBzdHJhdG51bSB0cmFuc2xhdGlvbiBzdXBwb3J0IGZ1bmN0aW9u IGZvciBHaVNUIG9wY2xhc3NlcyB0aGF0IHVzZQogICogdGhlIFJUKlN0cmF0ZWd5TnVtYmVyIGNv bnN0YW50cy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0u YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwppbmRleCA5ZTcxNDk4MGQu LjY4NmEwNDE4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZhY3V1 bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwpAQCAtMTYsNyAr MTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2dp c3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAiYWNj ZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNsdWRl ICJsaWIvaW50ZWdlcnNldC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMTgyLDcgKzE4 Miw3IEBAIGdpc3R2YWN1dW1zY2FuKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVs ZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCQl2c3RhdGUu c3RhcnROU04gPSBHZXRJbnNlcnRSZWNQdHIoKTsKIAllbHNlCi0JCXZzdGF0ZS5zdGFydE5TTiA9 IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCXZzdGF0ZS5zdGFydE5TTiA9IFhMb2dHZXRGYWtlTFNO KHJlbCk7CiAKIAkvKgogCSAqIFRoZSBvdXRlciBsb29wIGl0ZXJhdGVzIG92ZXIgYWxsIGluZGV4 IHBhZ2VzLCBpbiBwaHlzaWNhbCBvcmRlciAod2UKQEAgLTQxMyw3ICs0MTMsNyBAQCByZXN0YXJ0 OgogCQkJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAkJCX0KIAkJCWVsc2UKLQkJCQlQYWdl U2V0TFNOKHBhZ2UsIGdpc3RHZXRGYWtlTFNOKHJlbCkpOworCQkJCVBhZ2VTZXRMU04ocGFnZSwg WExvZ0dldEZha2VMU04ocmVsKSk7CiAKIAkJCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNzA3 LDcgKzcwNyw3IEBAIGdpc3RkZWxldGVwYWdlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhC dWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChpbmZvLT5pbmRl eCkpCiAJCXJlY3B0ciA9IGdpc3RYTG9nUGFnZURlbGV0ZShsZWFmQnVmZmVyLCB0eGlkLCBwYXJl bnRCdWZmZXIsIGRvd25saW5rKTsKIAllbHNlCi0JCXJlY3B0ciA9IGdpc3RHZXRGYWtlTFNOKGlu Zm8tPmluZGV4KTsKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04oaW5mby0+aW5kZXgpOwogCVBh Z2VTZXRMU04ocGFyZW50UGFnZSwgcmVjcHRyKTsKIAlQYWdlU2V0TFNOKGxlYWZQYWdlLCByZWNw dHIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwppbmRleCBjNzgzODM4NDkuLmFlNTM4 ZGM4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jCkBAIC00MjEsOSArNDIxLDYgQEAg Z2lzdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQljYXNlIFhMT0dfR0lTVF9QQUdF X0RFTEVURToKIAkJCWdpc3RSZWRvUGFnZURlbGV0ZShyZWNvcmQpOwogCQkJYnJlYWs7Ci0JCWNh c2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQkvKiBub3AuIFNlZSBnaXN0R2V0RmFrZUxTTigp LiAqLwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKFBBTklDLCAiZ2lzdF9yZWRvOiB1 bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKIAl9CkBAIC01NjcsMjQgKzU2NCw2IEBAIGdpc3RY TG9nUGFnZURlbGV0ZShCdWZmZXIgYnVmZmVyLCBGdWxsVHJhbnNhY3Rpb25JZCB4aWQsCiAJcmV0 dXJuIHJlY3B0cjsKIH0KIAotLyoKLSAqIFdyaXRlIGFuIGVtcHR5IFhMT0cgcmVjb3JkIHRvIGFz c2lnbiBhIGRpc3RpbmN0IExTTi4KLSAqLwotWExvZ1JlY1B0cgotZ2lzdFhMb2dBc3NpZ25MU04o dm9pZCkKLXsKLQlpbnQJCQlkdW1teSA9IDA7Ci0KLQkvKgotCSAqIFJlY29yZHMgb3RoZXIgdGhh biBYTE9HX1NXSVRDSCBtdXN0IGhhdmUgY29udGVudC4gV2UgdXNlIGFuIGludGVnZXIgMAotCSAq IHRvIGZvbGxvdyB0aGUgcmVzdHJpY3Rpb24uCi0JICovCi0JWExvZ0JlZ2luSW5zZXJ0KCk7Ci0J WExvZ1NldFJlY29yZEZsYWdzKFhMT0dfTUFSS19VTklNUE9SVEFOVCk7Ci0JWExvZ1JlZ2lzdGVy RGF0YSgmZHVtbXksIHNpemVvZihkdW1teSkpOwotCXJldHVybiBYTG9nSW5zZXJ0KFJNX0dJU1Rf SUQsIFhMT0dfR0lTVF9BU1NJR05fTFNOKTsKLX0KLQogLyoKICAqIFdyaXRlIFhMT0cgcmVjb3Jk IGFib3V0IHJldXNlIG9mIGEgZGVsZXRlZCBwYWdlLgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9naXN0ZGVzYy5jCmluZGV4IDc5YTgzOWNjMi4uNjc3ODllMDI1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYwpAQCAtODAsOSArODAsNiBAQCBnaXN0X2Rlc2MoU3Ry aW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQljYXNlIFhMT0dfR0lTVF9Q QUdFX0RFTEVURToKIAkJCW91dF9naXN0eGxvZ1BhZ2VEZWxldGUoYnVmLCAoZ2lzdHhsb2dQYWdl RGVsZXRlICopIHJlYyk7CiAJCQlicmVhazsKLQkJY2FzZSBYTE9HX0dJU1RfQVNTSUdOX0xTTjoK LQkJCS8qIE5vIGRldGFpbHMgdG8gd3JpdGUgb3V0ICovCi0JCQlicmVhazsKIAl9CiB9CiAKQEAg LTEwOCw5ICsxMDUsNiBAQCBnaXN0X2lkZW50aWZ5KHVpbnQ4IGluZm8pCiAJCWNhc2UgWExPR19H SVNUX1BBR0VfREVMRVRFOgogCQkJaWQgPSAiUEFHRV9ERUxFVEUiOwogCQkJYnJlYWs7Ci0JCWNh c2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQlpZCA9ICJBU1NJR05fTFNOIjsKLQkJCWJyZWFr OwogCX0KIAogCXJldHVybiBpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy94bG9nZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMK aW5kZXggZmYwNzhmMjIyLi45MDQ0Yjk1MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy94bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94 bG9nZGVzYy5jCkBAIC0xNzUsNiArMTc1LDEwIEBAIHhsb2dfZGVzYyhTdHJpbmdJbmZvIGJ1Ziwg WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCW1lbWNweSgmZW5hYmxlZCwgcmVjLCBzaXplb2Yo Ym9vbCkpOwogCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgZW5hYmxlZCA/ICJ0cnVlIiA6 ICJmYWxzZSIpOwogCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfQVNTSUdOX0xTTikKKwl7CisJ CS8qIG5vIGZ1cnRoZXIgaW5mb3JtYXRpb24gdG8gcHJpbnQgKi8KKwl9CiB9CiAKIGNvbnN0IGNo YXIgKgpAQCAtMjI5LDYgKzIzMyw5IEBAIHhsb2dfaWRlbnRpZnkodWludDggaW5mbykKIAkJY2Fz ZSBYTE9HX0xPR0lDQUxfREVDT0RJTkdfU1RBVFVTX0NIQU5HRToKIAkJCWlkID0gIkxPR0lDQUxf REVDT0RJTkdfU1RBVFVTX0NIQU5HRSI7CiAJCQlicmVhazsKKwkJY2FzZSBYTE9HX0FTU0lHTl9M U046CisJCQlpZCA9ICJBU1NJR05fTFNOIjsKKwkJCWJyZWFrOwogCX0KIAogCXJldHVybiBpZDsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCBiOWI2NzhmMzcuLjkyZTQ0YTUwMSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtODIyNCw2ICs4MjI0LDMwIEBAIFhMb2dSZXN0 b3JlUG9pbnQoY29uc3QgY2hhciAqcnBOYW1lKQogCXJldHVybiBSZWNQdHI7CiB9CiAKKy8qCisg KiBXcml0ZSBhbiBlbXB0eSBYTE9HIHJlY29yZCB0byBhc3NpZ24gYSBkaXN0aW5jdCBMU04uCisg KgorICogVGhpcyBpcyB1c2VkIGJ5IHNvbWUgaW5kZXggQU1zIHdoZW4gYnVpbGRpbmcgaW5kZXhl cyBvbiBwZXJtYW5lbnQgcmVsYXRpb25zCisgKiB3aXRoIHdhbF9sZXZlbD1taW5pbWFsLiAgSW4g dGhhdCBzY2VuYXJpbywgV0FMLWxvZ2dpbmcgd2lsbCBzdGFydCBhZnRlcgorICogY29tbWl0LCBi dXQgdGhlIGluZGV4IEFNIG5lZWRzIGRpc3RpbmN0IExTTnMgdG8gZGV0ZWN0IGNvbmN1cnJlbnQg cGFnZQorICogbW9kaWZpY2F0aW9ucy4gIFdoZW4gdGhlIGN1cnJlbnQgV0FMIGluc2VydCBwb3Np dGlvbiBoYXNuJ3QgYWR2YW5jZWQgc2luY2UKKyAqIHRoZSBsYXN0IGNhbGwsIHdlIGVtaXQgYSBk dW1teSByZWNvcmQgdG8gZW5zdXJlIHdlIGdldCBhIG5ldywgZGlzdGluY3QgTFNOLgorICovCitY TG9nUmVjUHRyCitYTG9nQXNzaWduTFNOKHZvaWQpCit7CisJaW50CQkJZHVtbXkgPSAwOworCisJ LyoKKwkgKiBSZWNvcmRzIG90aGVyIHRoYW4gWExPR19TV0lUQ0ggbXVzdCBoYXZlIGNvbnRlbnQu ICBXZSB1c2UgYW4gaW50ZWdlciAwCisJICogdG8gc2F0aXNmeSB0aGlzIHJlc3RyaWN0aW9uLgor CSAqLworCVhMb2dCZWdpbkluc2VydCgpOworCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX01BUktf VU5JTVBPUlRBTlQpOworCVhMb2dSZWdpc3RlckRhdGEoJmR1bW15LCBzaXplb2YoZHVtbXkpKTsK KwlyZXR1cm4gWExvZ0luc2VydChSTV9YTE9HX0lELCBYTE9HX0FTU0lHTl9MU04pOworfQorCiAv KgogICogQ2hlY2sgaWYgYW55IG9mIHRoZSBHVUMgcGFyYW1ldGVycyB0aGF0IGFyZSBjcml0aWNh bCBmb3IgaG90IHN0YW5kYnkKICAqIGhhdmUgY2hhbmdlZCwgYW5kIHVwZGF0ZSB0aGUgdmFsdWUg aW4gcGdfY29udHJvbCBmaWxlIGlmIG5lY2Vzc2FyeS4KQEAgLTg1OTEsNiArODYxNSwxMCBAQCB4 bG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJewogCQkvKiBub3RoaW5nIHRvIGRv IGhlcmUsIGhhbmRsZWQgaW4geGxvZ3JlY292ZXJ5LmMgKi8KIAl9CisJZWxzZSBpZiAoaW5mbyA9 PSBYTE9HX0FTU0lHTl9MU04pCisJeworCQkvKiBub3RoaW5nIHRvIGRvIGhlcmUsIHNlZSBYTG9n R2V0RmFrZUxTTigpICovCisJfQogCWVsc2UgaWYgKGluZm8gPT0gWExPR19GUEkgfHwgaW5mbyA9 PSBYTE9HX0ZQSV9GT1JfSElOVCkKIAl7CiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9naW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9naW5zZXJ0LmMKaW5kZXggYTlhMTY3OGFjLi5jMDlkZWIxNzQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9naW5zZXJ0LmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxz L3Bnc3RhdF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAvKgogICogR3Vl c3MgdGhlIG1heGltdW0gYnVmZmVyIHNpemUgcmVxdWlyZWQgdG8gc3RvcmUgYSBjb21wcmVzc2Vk IHZlcnNpb24gb2YKQEAgLTU0Nyw2ICs1NDgsNzAgQEAgWExvZ1NpbXBsZUluc2VydEludDY0KFJt Z3JJZCBybWlkLCB1aW50OCBpbmZvLCBpbnQ2NCB2YWx1ZSkKIAlyZXR1cm4gWExvZ0luc2VydChy bWlkLCBpbmZvKTsKIH0KIAorLyoKKyAqIFhMb2dHZXRGYWtlTFNOIC0gZ2V0IGEgZmFrZSBMU04g Zm9yIGFuIGluZGV4IHBhZ2UgdGhhdCBpc24ndCBXQUwtbG9nZ2VkLgorICoKKyAqIFNvbWUgaW5k ZXggQU1zIHVzZSBMU05zIHRvIGRldGVjdCBjb25jdXJyZW50IHBhZ2UgbW9kaWZpY2F0aW9ucywg YnV0IG5vdAorICogYWxsIGluZGV4IHBhZ2VzIGFyZSBXQUwtbG9nZ2VkLiAgVGhpcyBmdW5jdGlv biBwcm92aWRlcyBhIHNlcXVlbmNlIG9mIGZha2UKKyAqIExTTnMgZm9yIHRoYXQgcHVycG9zZS4K KyAqCisgKiBUaGUgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcmVsYXRpb24ncyBwZXJzaXN0ZW5j ZToKKyAqCisgKiAtIEZvciB0ZW1wb3JhcnkgcmVsYXRpb25zLCB3ZSB1c2UgYSBzaW1wbGUgYmFj a2VuZC1sb2NhbCBjb3VudGVyIHNpbmNlCisgKiAgIHRlbXBvcmFyeSByZWxhdGlvbnMgYXJlIG9u bHkgYWNjZXNzaWJsZSB3aXRoaW4gb3VyIHNlc3Npb24uCisgKgorICogLSBGb3IgcGVybWFuZW50 IHJlbGF0aW9ucyB3aGVuIFdBTC1sb2dnaW5nIGlzIGRpc2FibGVkIChlLmcuLCBkdXJpbmcgaW5k ZXgKKyAqICAgY3JlYXRpb24gd2l0aCB3YWxfbGV2ZWw9bWluaW1hbCksIHdlIHVzZSB0aGUgY3Vy cmVudCBXQUwgaW5zZXJ0IHBvc2l0aW9uLgorICogICBJZiB0aGUgaW5zZXJ0IHBvc2l0aW9uIGhh c24ndCBhZHZhbmNlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLCB3ZSBlbWl0IGEKKyAqICAgZHVtbXkg V0FMIHJlY29yZCB2aWEgWExvZ0Fzc2lnbkxTTigpIHRvIGVuc3VyZSB3ZSBnZXQgYSBkaXN0aW5j dCBMU04uCisgKgorICogLSBGb3IgdW5sb2dnZWQgcmVsYXRpb25zLCB3ZSB1c2UgdGhlIGdsb2Jh bCBmYWtlIExTTiBjb3VudGVyIG1haW50YWluZWQKKyAqICAgYnkgR2V0RmFrZUxTTkZvclVubG9n Z2VkUmVsKCkuCisgKi8KK1hMb2dSZWNQdHIKK1hMb2dHZXRGYWtlTFNOKFJlbGF0aW9uIHJlbCkK K3sKKwlpZiAocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RF TVApCisJeworCQkvKgorCQkgKiBUZW1wb3JhcnkgcmVsYXRpb25zIGFyZSBvbmx5IGFjY2Vzc2li bGUgaW4gb3VyIHNlc3Npb24sIHNvIGEgc2ltcGxlCisJCSAqIGJhY2tlbmQtbG9jYWwgY291bnRl ciB3aWxsIGRvLgorCQkgKi8KKwkJc3RhdGljIFhMb2dSZWNQdHIgY291bnRlciA9IEZpcnN0Tm9y bWFsVW5sb2dnZWRMU047CisKKwkJcmV0dXJuIGNvdW50ZXIrKzsKKwl9CisJZWxzZSBpZiAocmVs LT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEKQorCXsK KwkJLyoKKwkJICogVW5sb2dnZWQgcmVsYXRpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gb3RoZXIg YmFja2VuZHMsIGFuZCBzdXJ2aXZlCisJCSAqIChjbGVhbikgcmVzdGFydHMuICBHZXRGYWtlTFNO Rm9yVW5sb2dnZWRSZWwoKSBoYW5kbGVzIHRoYXQgZm9yIHVzLgorCQkgKi8KKwkJcmV0dXJuIEdl dEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBXQUwt bG9nZ2luZyBvbiB0aGlzIHJlbGF0aW9uIHdpbGwgc3RhcnQgYWZ0ZXIgY29tbWl0LCBzbyBpdHMg TFNOcworCQkgKiBtdXN0IGJlIGRpc3RpbmN0IG51bWJlcnMgc21hbGxlciB0aGFuIHRoZSBMU04g YXQgdGhlIG5leHQgY29tbWl0LgorCQkgKiBFbWl0IGEgZHVtbXkgV0FMIHJlY29yZCBpZiBpbnNl cnQtTFNOIGhhc24ndCBhZHZhbmNlZCBhZnRlciB0aGUKKwkJICogbGFzdCBjYWxsLgorCQkgKi8K KwkJc3RhdGljIFhMb2dSZWNQdHIgbGFzdGxzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlYTG9n UmVjUHRyCWN1cnJsc24gPSBHZXRYTG9nSW5zZXJ0UmVjUHRyKCk7CisKKwkJQXNzZXJ0KCFSZWxh dGlvbk5lZWRzV0FMKHJlbCkpOworCQlBc3NlcnQoUmVsYXRpb25Jc1Blcm1hbmVudChyZWwpKTsK KworCQkvKiBObyBuZWVkIGZvciBhbiBhY3R1YWwgcmVjb3JkIGlmIHdlIGFscmVhZHkgaGF2ZSBh IGRpc3RpbmN0IExTTiAqLworCQlpZiAoWExvZ1JlY1B0cklzVmFsaWQobGFzdGxzbikgJiYgbGFz dGxzbiA9PSBjdXJybHNuKQorCQkJY3VycmxzbiA9IFhMb2dBc3NpZ25MU04oKTsKKworCQlsYXN0 bHNuID0gY3VycmxzbjsKKwkJcmV0dXJuIGN1cnJsc247CisJfQorfQorCiAvKgogICogQXNzZW1i bGUgYSBXQUwgcmVjb3JkIGZyb20gdGhlIHJlZ2lzdGVyZWQgZGF0YSBhbmQgYnVmZmVycyBpbnRv IGFuCiAgKiBYTG9nUmVjRGF0YSBjaGFpbiwgcmVhZHkgZm9yIGluc2VydGlvbiB3aXRoIFhMb2dJ bnNlcnRSZWNvcmQoKS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggODNmNGZi NjFkLi4xYTQ5Y2FlYzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC00NDcz LDkgKzQ0NzMsOSBAQCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiBy ZWxuLCBJT09iamVjdCBpb19vYmplY3QsCiAJICogbG9zdCBhZnRlciBhIGNyYXNoIGFueXdheS4g IE1vc3QgdW5sb2dnZWQgcmVsYXRpb24gcGFnZXMgZG8gbm90IGJlYXIKIAkgKiBMU05zIHNpbmNl IHdlIG5ldmVyIGVtaXQgV0FMIHJlY29yZHMgZm9yIHRoZW0sIGFuZCB0aGVyZWZvcmUgZmx1c2hp bmcKIAkgKiB1cCB0aHJvdWdoIHRoZSBidWZmZXIgTFNOIHdvdWxkIGJlIHVzZWxlc3MsIGJ1dCBo YXJtbGVzcy4gIEhvd2V2ZXIsCi0JICogR2lTVCBpbmRleGVzIHVzZSBMU05zIGludGVybmFsbHkg dG8gdHJhY2sgcGFnZS1zcGxpdHMsIGFuZCB0aGVyZWZvcmUKLQkgKiB1bmxvZ2dlZCBHaVNUIHBh Z2VzIGJlYXIgImZha2UiIExTTnMgZ2VuZXJhdGVkIGJ5Ci0JICogR2V0RmFrZUxTTkZvclVubG9n Z2VkUmVsLiAgSXQgaXMgdW5saWtlbHkgYnV0IHBvc3NpYmxlIHRoYXQgdGhlIGZha2UKKwkgKiBz b21lIGluZGV4IEFNcyB1c2UgTFNOcyBpbnRlcm5hbGx5IHRvIGRldGVjdCBjb25jdXJyZW50IHBh Z2UKKwkgKiBtb2RpZmljYXRpb25zLCBhbmQgdGhlcmVmb3JlIHVubG9nZ2VkIGluZGV4IHBhZ2Vz IGJlYXIgImZha2UiIExTTnMKKwkgKiBnZW5lcmF0ZWQgYnkgWExvZ0dldEZha2VMU04uICBJdCBp cyB1bmxpa2VseSBidXQgcG9zc2libGUgdGhhdCB0aGUgZmFrZQogCSAqIExTTiBjb3VudGVyIGNv dWxkIGFkdmFuY2UgcGFzdCB0aGUgV0FMIGluc2VydGlvbiBwb2ludDsgYW5kIGlmIGl0IGRpZAog CSAqIGhhcHBlbiwgYXR0ZW1wdGluZyB0byBmbHVzaCBXQUwgdGhyb3VnaCB0aGF0IGxvY2F0aW9u IHdvdWxkIGZhaWwsIHdpdGgKIAkgKiBkaXNhc3Ryb3VzIHN5c3RlbS13aWRlIGNvbnNlcXVlbmNl cy4gIFRvIG1ha2Ugc3VyZSB0aGF0IGNhbid0IGhhcHBlbiwKLS0gCjIuNTMuMAoK --000000000000843716064cb1c648--