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 1vXNfL-008u8k-0S for pgsql-hackers@arkaria.postgresql.org; Sun, 21 Dec 2025 17:56:24 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vXNfJ-00CBoA-2D for pgsql-hackers@arkaria.postgresql.org; Sun, 21 Dec 2025 17:56:22 +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 1vXNfI-00CBo0-37 for pgsql-hackers@lists.postgresql.org; Sun, 21 Dec 2025 17:56:22 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vXNfE-001wVZ-2S for pgsql-hackers@lists.postgresql.org; Sun, 21 Dec 2025 17:56:19 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-47aa03d3326so19916645e9.3 for ; Sun, 21 Dec 2025 09:56:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1766339770; x=1766944570; 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=EFZe89fKFHe+lM0ZMBLX1aJEezYb9agTmLFXftvsWY0=; b=hGG/juCPujs+cfQYVM2/7F8MZNICppoM2GAqsQxk5cabbdI9rEqAyVjFMrdVXpKn8k Sm35k665uuCajBBhrVH5/XzuUZ8MF8pZij1ucYmY1Uf6xCo8gjIvVYOrkKY5f5riDZw6 rx2FdfB1QDMseVg76X2eG2Ekk5bP364py58vtSOrYpevzgiZyKUx864pmr5HubxusPQA WNotFaF39EI1jRrWWMBhnBC061ZO1qaH229okLss4AeaAgmHfbGVBSSsO/9NCpuV+hyU 9LxT+asLET7ARHRSSUD3YziD+h4QWjqgMNot4V3MmnpW9Qwja86S5cmZizsoglTwbtcH yHLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766339770; x=1766944570; 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=EFZe89fKFHe+lM0ZMBLX1aJEezYb9agTmLFXftvsWY0=; b=geV9BObg43/BDpVJks6RRSvvoIm+JkneW4RhrqNdBe3g10Fz05RULApsP0L18VY3Ym keIRuoacswCShgqQqL43ChTPv0oIhlnVcxRIEdCB6rqsRu01QRNuE/8STvQbxoom7QLu zcxbcsi++1jTnS4FSv0MkJP+xc8sUGX3Wdj5zbXmxT0Fe153A+b8a+ZspCt/1jicaiPc QHJ5KMJezRdPfDdFZscB9QxLAi12ijyVIINUX1Bj4G+fntY3ZQ7cmXjr+/FePbnr4/1J u8C91iQlFzwwPjkWVpocXxn8/q+2GEsDslV44hRAXSGvehzRGquL4H9BpZ+mkzIx1Zaa AutQ== X-Forwarded-Encrypted: i=1; AJvYcCX/pqbYYRxzH2d2yTvYFQREpDG0tGq/7KBbHDZDkuU/lk6bZ9zomPtY1XQzIx3rsi5xd1Q9P3FPnck7hIbr@lists.postgresql.org X-Gm-Message-State: AOJu0Yx4ZB49fov5RPbOsKPSSZ7Dw+yD7I3uSHxlHbNJ1lZUrce3DRNQ Bxd10jH2cZwJcNBV6gbJ/YvfMPmmnVCfbctx6vakhg+lzjY3U73V0HowHa47nOLa9c0j71+UZoL 1BakagGgGbOkKsnI5C7FDl/tkr4fflcp4Ce3PqmvQYQ== X-Gm-Gg: AY/fxX52+rDE4F/L8x3Gz/2hFiBhZroiYXKdY75ugc+WS1tkeCgJCazeHbOYzmf4e4F 8ILW5p4KGQKLwCZ0zsyDtd0Wm9jPJrK0ZZ3k7rvJs6rlG5VppZGw9/bNLpjW07c8fY9nCiOzSlY QHiic+MqPK64GlYygitnYHVhJ4KDl4e3gpdzdsUrYiVcqnhs5COMwZ5BP11BvxGjCFZk3dziGpq 0udu5ffcY9kCxFj7li+3COiF3Fik7gWoPUueSaL6YA5pYBhBBSjH4OJYDQu1JsnJHBrAZM= X-Google-Smtp-Source: AGHT+IG//P2xsejfObHBWV6Ptk9qGOf8Xkyfux0uakPB2XmwNHbctrDwB3Q30dqcpjF7/d0WxqTdG4ohXmrfbpua4PM= X-Received: by 2002:a05:600c:1caa:b0:475:daba:d03c with SMTP id 5b1f17b1804b1-47d19545aaemr99543265e9.13.1766339768966; Sun, 21 Dec 2025 09:56:08 -0800 (PST) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Sun, 21 Dec 2025 12:55:40 -0500 X-Gm-Features: AQt7F2r088sFYy08Le44H_0UivIqFomlAaCj2YooSZb-wrGj7KBM3b9XTQFqamQ Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="0000000000007b96d706467a0698" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007b96d706467a0698 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Dec 10, 2025 at 9:21=E2=80=AFPM Peter Geoghegan wrote: > Attached is v4. Attached is v5. Changes from v4: * Simplified and optimized index-only scans, with a particular emphasis on avoiding regressions with nested loop joins with an inner index-only scan. There were quite a number of small problems/dead code related to index-only scans fixed by this new v5. Overall, I'm quite a bit happier with the state of index-only scans, which I'd not paid too much attention to before now. * Added Valgrind instrumentation to the hash index patch, which was required to fix some false positives. The generic indexam_util_batch_unlock routine had Valgrind instrumentation in earlier versions, just to keep nbtree's buffer locking checks from generating similar false positives. Some time later, when I added the hashgetbatch patch, there were new Valgrind false positives during hash index scans -- which I missed at first. This new v5 revisions adds similar Valgrind checks to hash itself (changes that add code that is more or less a direct port of the stuff added to nbtree by commit 4a70f829), which fixes the false positives, and is independently useful. The rule for amgetbatch-based index AMs is that they must have similar buffer locking instrumentation. That seems like a good thing. -- Peter Geoghegan --0000000000007b96d706467a0698 Content-Type: application/octet-stream; name="v5-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Disposition: attachment; filename="v5-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjg0swit3 RnJvbSA4ZTkxOGNjMDhlN2VhZTJkNWM5MmY2OTM3MDA0ZTYzZDcwMTMxZGViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHY1IDIvNF0gQWRk IHByZWZldGNoaW5nIHRvIGluZGV4IHNjYW5zIHVzaW5nIGJhdGNoIGludGVyZmFjZXMuCgpUaGlz IGNvbW1pdCBpbXBsZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMsIG1hZGUg cG9zc2libGUgYnkKdGhlIHJlY2VudCBhZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRv IGJvdGggdGhlIHRhYmxlIEFNIGFuZAppbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgVElEcyAocmF0aGVyIHRoYW4Kb25l IGF0IGEgdGltZSkgZnJvbSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIGFuZCBhbGxvd3MgbXVs dGlwbGUKYmF0Y2hlcyB0byBiZSBoZWxkIGluIG1lbW9yeS9waW5uZWQgc2ltdWx0YW5lb3VzbHku ICBUaGlzIGdpdmVzIHRoZQp0YWJsZSBBTSB0aGUgZnJlZWRvbSB0byByZWFkYWhlYWQgd2l0aGlu IGFuIGluZGV4IHNjYW4sIHdoaWNoIGlzIGNydWNpYWwKZm9yIEkvTyBwcmVmZXRjaGluZyB3aXRo IGNlcnRhaW4gd29ya2xvYWRzICh3b3JrbG9hZHMgdGhhdCB3b3VsZApvdGhlcndpc2UgYmUgdW5h YmxlIHRvIGtlZXAgYSBzdWZmaWNpZW50bHkgaGlnaCBwcmVmZXRjaCBkaXN0YW5jZSBmb3IKaGVh cCBibG9jayBJL08pLiAgUHJlZmV0Y2hpbmcgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSByZWFkIHN0 cmVhbSB1bmRlcgp0aGUgY29udHJvbCBvZiB0aGUgdGFibGUgQU0uCgpYWFggV2hlbiB0aGUgYmF0 Y2ggcXVldWUgcmVhY2hlcyBjYXBhY2l0eSwgdGhlIHN0cmVhbSBwYXVzZXMgdW50aWwKdGhlIHNj YW4gY2F0Y2hlcyB1cCBhbmQgZnJlZXMgc29tZSBiYXRjaGVzLiAgV2UgbmVlZCBhIG1vcmUgcHJp bmNpcGxlZAphcHByb2FjaCBoZXJlLiAgRXNzZW50aWFsbHksIHdlIG5lZWQgaW5mcmFzdHJ1Y3R1 cmUgdGhhdCBhbGxvd3MgYSByZWFkCnN0cmVhbSBjYWxsIGJhY2sgdG8gdGVsbCB0aGUgcmVhZCBz dHJlYW0gdG8gImJhY2sgb2ZmIiB3aXRob3V0IGl0IGZ1bGx5CmVuZGluZy9yZXNldHRpbmcgdGhl IHJlYWQgc3RyZWFtLgoKTm90ZTogRm9yIG5vdyBwcmVmZXRjaGluZyBpcyB0ZW1wb3JhcmlseSBk aXNhYmxlZCBkdXJpbmcgaW5kZXgtb25seQpzY2FucywgcGVuZGluZyB0aGUgcmVpbnRyb2R1Y3Rp b24gb2YgdmlzaWJpbGl0eSBtYXAgY2FjaGluZyBpbiBiYXRjaGVzLgpQcmV2aW91cyB2ZXJzaW9u cyBvZiB0aGUgcGF0Y2ggc2VyaWVzIGhhZCB0aGF0LCBidXQgaXQgd2FzIHJlbW92ZWQgd2hlbgp3 ZSBtb3ZlZCBvdmVyIHRvIHRoZSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlLgoKQXV0aG9yOiBUb21h cyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJl dmlld2VkLUJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRl YmFiQGVudGVycHJpc2VkYi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAg ICAgICAgICAgICAgICAgfCAgMzMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAg ICAgICAgICAgICAgICB8ICAxNSArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyAgICAgIHwgMjk0ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCAgNDYgKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v cmVhZF9zdHJlYW0uYyAgICAgICAgIHwgIDE0ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1 Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0 Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lz dmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogMTEgZmlsZXMgY2hhbmdlZCwgNDEzIGluc2VydGlv bnMoKyksIDEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9y ZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDFjOWZhYWFkNS4u MTE1N2JhOWJhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRl ICJub2Rlcy90aWRiaXRtYXAuaCIKICNpbmNsdWRlICJwb3J0L2F0b21pY3MuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2J1Zi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcmVhZF9zdHJlYW0uaCIKICNpbmNs dWRlICJzdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgi CiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKQEAgLTEyNCw2ICsxMjUsNyBAQCB0eXBlZGVm IHN0cnVjdCBQYXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0YSAqUGFyYWxsZWxCbG9ja1Rh YmxlU2NhbldvcmtlcjsKIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIHsKIAlS ZWxhdGlvbglyZWw7CisJUmVhZFN0cmVhbSAqcnM7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAK IC8qCkBAIC0yMjAsOCArMjIyLDE0IEBAIHR5cGVkZWYgc3RydWN0IEJhdGNoSW5kZXhTY2FuRGF0 YSAqQmF0Y2hJbmRleFNjYW47CiAgKiBNYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzIChsZWFmIHBh Z2VzKSB3ZSBjYW4ga2VlcCBpbiBtZW1vcnkuICBXZSBuZWVkIGEKICAqIG1pbmltdW0gb2YgdHdv LCBzaW5jZSB3ZSdsbCBvbmx5IGNvbnNpZGVyIHJlbGVhc2luZyBvbmUgYmF0Y2ggd2hlbiBhbm90 aGVyCiAgKiBpcyByZWFkLgorICoKKyAqIFRoZSBjaG9pY2Ugb2YgNjQgYmF0Y2hlcyBpcyBhcmJp dHJhcnkuICBJdCdzIGFib3V0IDFNQiBvZiBkYXRhIHdpdGggOEtCCisgKiBwYWdlcyAoNTEya0Ig Zm9yIHBhZ2VzLCBhbmQgdGhlbiBhIGJpdCBvZiBvdmVyaGVhZCkuIFdlIHNob3VsZCBub3QgcmVh bGx5CisgKiBuZWVkIHRoaXMgbWFueSBiYXRjaGVzIGluIG1vc3QgY2FzZXMsIHRob3VnaC4gVGhl IHJlYWQgc3RyZWFtIGxvb2tzIGFoZWFkCisgKiBqdXN0IGVub3VnaCB0byBxdWV1ZSBlbm91Z2gg SU9zLCBhZGp1c3RpbmcgdGhlIGRpc3RhbmNlIChUSURzLCBidXQKKyAqIHVsdGltYXRlbHkgdGhl IG51bWJlciBvZiBmdXR1cmUgYmF0Y2hlcykgdG8gbWVldCB0aGF0LgogICovCi0jZGVmaW5lIElO REVYX1NDQU5fTUFYX0JBVENIRVMJCTIKKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUwkJ NjQKICNkZWZpbmUgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTCTIKICNkZWZpbmUgSU5ERVhfU0NB Tl9CQVRDSF9DT1VOVChzY2FuKSBcCiAJKChzY2FuKS0+YmF0Y2hxdWV1ZS0+bmV4dEJhdGNoIC0g KHNjYW4pLT5iYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpCkBAIC0yNjgsMTIgKzI3NiwzNSBAQCB0eXBl ZGVmIHN0cnVjdCBCYXRjaEluZGV4U2NhbkRhdGEgKkJhdGNoSW5kZXhTY2FuOwogICovCiB0eXBl ZGVmIHN0cnVjdCBCYXRjaFF1ZXVlCiB7CisJYm9vbAkJcmVzZXQ7CisKKwkvKgorCSAqIERpZCB3 ZSBkaXNhYmxlIHByZWZldGNoaW5nL3VzZSBvZiBhIHJlYWQgc3RyZWFtIGJlY2F1c2UgaXQgZGlk bid0IHBheQorCSAqIGZvciBpdHNlbGY/CisJICovCisJYm9vbAkJcHJlZmV0Y2hpbmdMb2NrZWRJ bjsKKwlib29sCQlkaXNhYmxlZDsKKworCS8qCisJICogRHVyaW5nIHByZWZldGNoaW5nLCBjdXJy ZW50UHJlZmV0Y2hCbG9jayBpcyB0aGUgdGFibGUgQU0gYmxvY2sgbnVtYmVyCisJICogdGhhdCB3 YXMgcmV0dXJuZWQgYnkgb3VyIHJlYWQgc3RyZWFtIGNhbGxiYWNrIG1vc3QgcmVjZW50bHkuICBV c2VkIHRvCisJICogc3VwcHJlc3MgZHVwbGljYXRlIHN1Y2Nlc3NpdmUgcmVhZCBzdHJlYW0gYmxv Y2sgcmVxdWVzdHMuCisJICoKKwkgKiBQcmVmZXRjaGluZyBjYW4gc3RpbGwgcGVyZm9ybSBub24t c3VjY2Vzc2l2ZSByZXF1ZXN0cyBmb3IgdGhlIHNhbWUKKwkgKiBibG9jayBudW1iZXIgKGluIGdl bmVyYWwgd2UncmUgcHJlZmV0Y2hpbmcgaW4gZXhhY3RseSB0aGUgc2FtZSBvcmRlcgorCSAqIHRo YXQgdGhlIHNjYW4gd2lsbCByZXR1cm4gdGFibGUgQU0gVElEcyBpbikuICBXZSBuZWVkIHRvIGF2 b2lkCisJICogZHVwbGljYXRlIHN1Y2Nlc3NpdmUgcmVxdWVzdHMgYmVjYXVzZSB0YWJsZSBBTXMg ZXhwZWN0IHRvIGJlIGFibGUgdG8KKwkgKiBoYW5nIG9uIHRvIGJ1ZmZlciBwaW5zIGFjcm9zcyB0 YWJsZV9pbmRleF9mZXRjaF90dXBsZSBjYWxscy4KKwkgKi8KKwlCbG9ja051bWJlciBjdXJyZW50 UHJlZmV0Y2hCbG9jazsKKwogCS8qIEN1cnJlbnQgc2NhbiBkaXJlY3Rpb24sIGZvciB0aGUgY3Vy cmVudGx5IGxvYWRlZCBiYXRjaGVzICovCiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAKIAkv KiBjdXJyZW50IHBvc2l0aW9ucyBpbiBiYXRjaGVzW10gZm9yIHNjYW4gKi8KIAlCYXRjaFF1ZXVl SXRlbVBvcyByZWFkUG9zOwkvKiByZWFkIHBvc2l0aW9uICovCiAJQmF0Y2hRdWV1ZUl0ZW1Qb3Mg bWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisJQmF0Y2hRdWV1ZUl0ZW1Qb3Mg c3RyZWFtUG9zOwkvKiBzdHJlYW0gcG9zaXRpb24gKGZvciBwcmVmZXRjaGluZykgKi8KIAogCUJh dGNoSW5kZXhTY2FuIG1hcmtCYXRjaDsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggYTU0MzY4MmJi Li43NWM2YjUyNzYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNDQ4LDYgKzQ0OCwyMSBAQCB0eXBl ZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24sCiAJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiAKKwkvKgorCSAqIFJl YWQgc3RyZWFtIGNhbGxiYWNrLCB1c2VkIHRvIHBlcmZvcm0gSS9PIHByZWZldGNoaW5nIG9mIHRh YmxlIEFNIHBhZ2VzCisJICogZHVyaW5nIGBpbmRleF9nZXRuZXh0X3Nsb3RgIGluZGV4IHNjYW5z LgorCSAqCisJICogVGhpcyBjYWxsYmFjayBpcyBkaXJlY3RseSBwYXNzZWQgdG8gcmVhZF9zdHJl YW1fYmVnaW5fcmVsYXRpb24sIGZyb20KKwkgKiBiYXRjaF9nZXRuZXh0IHJvdXRpbmUuICBJdCB3 aWxsIG9ubHkgYmUgdXNlZCBkdXJpbmcgc2NhbnMgd2hvc2UgaW5kZXgKKwkgKiBBTSB1c2VzIHRo ZSBhbWdldGJhdGNoIGludGVyZmFjZS4gIChTY2FucyB3aXRoIGFtZ2V0dHVwbGUtYmFzZWQgaW5k ZXgKKwkgKiBBTXMgY2Fubm90IHJlYXNvbmFibHkgYmUgdXNlZCBmb3IgSS9PIHByZWZldGNoaW5n LCBzaW5jZSBpdHMgb3BhcXVlCisJICogdHVwbGUtYXQtYS10aW1lIGludGVyZmFjZSBtYWtlcyBp dCBpbXBvc3NpYmxlIHRvIHNjaGVkdWxlIGluZGV4IHNjYW4KKwkgKiB3b3JrIHNlbnNpYmx5LikK KwkgKi8KKwlCbG9ja051bWJlciAoKmluZGV4X2dldG5leHRfc3RyZWFtKSAoUmVhZFN0cmVhbSAq c3RyZWFtLAorCQkJCQkJCQkJCSB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJ CQkJIHZvaWQgKnBlcl9idWZmZXJfZGF0YSk7CisKIAkvKgogCSAqIEZldGNoIHR1cGxlIGF0IGB0 aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVzdAogCSAqIGFjY29y ZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2 aXNpYmlsaXR5CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRleCBiNTIzYmNkYTguLjAwZjRjM2QwMCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvY29zdC5oCkBAIC01MSw2ICs1MSw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBDb3N0 IGRpc2FibGVfY29zdDsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlcjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zZXFzY2FuOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2NhbjsKK2V4dGVybiBQR0RMTElN UE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g7CiBleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfaW5kZXhvbmx5c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJs ZV9iaXRtYXBzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3RpZHNjYW47CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCA1MDNmZjA5NWUuLmI5 ZDQyYjE1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC01 OSw2ICs1OSw5IEBAIHN0YXRpYyBCbG9ja051bWJlciBoZWFwYW1fc2Nhbl9nZXRfYmxvY2tzX2Rv bmUoSGVhcFNjYW5EZXNjIGhzY2FuKTsKIHN0YXRpYyBib29sIEJpdG1hcEhlYXBTY2FuTmV4dEJs b2NrKFRhYmxlU2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCWJvb2wgKnJlY2hlY2ssCiAJCQkJCQkJ CQl1aW50NjQgKmxvc3N5X3BhZ2VzLCB1aW50NjQgKmV4YWN0X3BhZ2VzKTsKK3N0YXRpYyBCbG9j a051bWJlciBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJ CQkJCSB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJIHZvaWQgKnBlcl9i dWZmZXJfZGF0YSk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04NCw2ICs4Nyw3IEBAIGhl YXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwpCiAJSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiA9IHBhbGxvY19vYmplY3QoSW5kZXhGZXRjaEhlYXBEYXRhKTsKIAogCWhzY2FuLT54 c19iYXNlLnJlbCA9IHJlbDsKKwloc2Nhbi0+eHNfYmFzZS5ycyA9IE5VTEw7CiAJaHNjYW4tPnhz X2NidWYgPSBJbnZhbGlkQnVmZmVyOwogCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CiAJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsKQEAgLTk2LDYgKzEwMCw5IEBAIGhl YXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewogCUlu ZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAK KwlpZiAoc2Nhbi0+cnMpCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnJzKTsKKwogCS8qIGRl bGliZXJhdGVseSBkb24ndCBkcm9wIFZNIGJ1ZmZlciBwaW4gaGVyZSAqLwogCWlmIChCdWZmZXJJ c1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAl7CkBAIC0xMTIsNiArMTE5LDkgQEAgaGVhcGFtX2lu ZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCiAJaGVhcGFtX2luZGV4 X2ZldGNoX3Jlc2V0KHNjYW4pOwogCisJaWYgKHNjYW4tPnJzKQorCQlyZWFkX3N0cmVhbV9lbmQo c2Nhbi0+cnMpOworCiAJaWYgKGhzY2FuLT52bWJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQogCXsKIAkJ UmVsZWFzZUJ1ZmZlcihoc2Nhbi0+dm1idWYpOwpAQCAtMTQ5LDcgKzE1OSwxMCBAQCBoZWFwYW1f aW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCSAq IFdoZW4gdXNpbmcgYSByZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3aWxsIGFscmVhZHkga25vdyB3 aGljaCBibG9jawogCQkgKiBudW1iZXIgY29tZXMgbmV4dCAodGhvdWdoIGFuIGFzc2VydGlvbiB3 aWxsIHZlcmlmeSBhIG1hdGNoIGJlbG93KQogCQkgKi8KLQkJaHNjYW4tPnhzX2NidWYgPSBSZWFk QnVmZmVyKGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7CisJCWlmIChzY2FuLT5y cykKKwkJCWhzY2FuLT54c19jYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc2Nhbi0+cnMs IE5VTEwpOworCQllbHNlCisJCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhz X2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgogCQkgKiBQcnVuZSBwYWdlIHdoZW4g aXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQpAQCAtMzQzLDEzICszNTYsMjQgQEAgaGVh cGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pCiAJLyogSW5pdGlhbGl6ZSBkaXJlY3Rpb24gb24gZmlyc3QgY2FsbCAqLwogCWlm IChiYXRjaHF1ZXVlLT5kaXJlY3Rpb24gPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCiAJCWJh dGNocXVldWUtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwllbHNlIGlmICh1bmxpa2VseShiYXRj aHF1ZXVlLT5kaXNhYmxlZCAmJiBzY2FuLT54c19oZWFwZmV0Y2gtPnJzKSkKKwl7CisJCS8qCisJ CSAqIEhhbmRsZSBjYW5jZWxsaW5nIHRoZSB1c2Ugb2YgdGhlIHJlYWQgc3RyZWFtIGZvciBwcmVm ZXRjaGluZworCQkgKi8KKwkJYmF0Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3Mp OworCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCQlzY2Fu LT54c19oZWFwZmV0Y2gtPnJzID0gTlVMTDsKKwl9CiAJZWxzZSBpZiAodW5saWtlbHkoYmF0Y2hx dWV1ZS0+ZGlyZWN0aW9uICE9IGRpcmVjdGlvbikpCiAJewogCQkvKgogCQkgKiBIYW5kbGUgYSBj aGFuZ2UgaW4gdGhlIHNjYW4ncyBkaXJlY3Rpb24uCiAJCSAqCiAJCSAqIFJlbGVhc2UgZnV0dXJl IGJhdGNoZXMgcHJvcGVybHksIHRvIG1ha2UgaXQgbG9vayBsaWtlIHRoZSBjdXJyZW50Ci0JCSAq IGJhdGNoIGlzIHRoZSBvbmx5IG9uZSB3ZSBsb2FkZWQuCisJCSAqIGJhdGNoIGlzIHRoZSBvbmx5 IG9uZSB3ZSBsb2FkZWQuIEFsc28gcmVzZXQgdGhlIHN0cmVhbSBwb3NpdGlvbiwgYXMKKwkJICog aWYgd2UgYXJlIGp1c3Qgc3RhcnRpbmcgdGhlIHNjYW4uCiAJCSAqLwogCQl3aGlsZSAoYmF0Y2hx dWV1ZS0+bmV4dEJhdGNoID4gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoICsgMSkKIAkJewpAQCAtMzY0 LDEwICszODgsMTYgQEAgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJCS8qCiAJCSAqIFJlbWVtYmVyIHRoZSBuZXcg ZGlyZWN0aW9uLCBhbmQgbWFrZSBzdXJlIHRoZSBzY2FuIGlzIG5vdCBtYXJrZWQgYXMKIAkJICog ImZpbmlzaGVkIiAod2UgbWlnaHQgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlIGxhc3QgYmF0Y2gsIGJ1 dCBub3cgd2UKLQkJICogbmVlZCB0byBzdGFydCBvdmVyKS4KKwkJICogbmVlZCB0byBzdGFydCBv dmVyKS4gRG8gdGhpcyBiZWZvcmUgcmVzZXR0aW5nIHRoZSBzdHJlYW0gLSBpdAorCQkgKiBzaG91 bGQgbm90IGludm9rZSB0aGUgY2FsbGJhY2sgdW50aWwgdGhlIGZpcnN0IHJlYWQsIGJ1dCBpdCBt YXkKKwkJICogc2VlbSBhIGJpdCBjb25mdXNpbmcgb3RoZXJ3aXNlLgogCQkgKi8KIAkJYmF0Y2hx dWV1ZS0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOwogCQlzY2FuLT5maW5pc2hlZCA9IGZhbHNlOwor CQliYXRjaF9yZXNldF9wb3MoJmJhdGNocXVldWUtPnN0cmVhbVBvcyk7CisKKwkJaWYgKHNjYW4t PnhzX2hlYXBmZXRjaC0+cnMpCisJCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0 Y2gtPnJzKTsKIAl9CiAKIAkvKiBzaG9ydGN1dCBmb3IgdGhlIHJlYWQgcG9zaXRpb24sIGZvciBj b252ZW5pZW5jZSAqLwpAQCAtNDA5LDYgKzQzOSwzNyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90 aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAkJCQlCYXRj aEluZGV4U2NhbiBoZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sCiAJCQkJCQkJCQkJ CQkJCQliYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOwogCisJCQkJLyoKKwkJCQkgKiBYWFggV2hlbiBh ZHZhbmNpbmcgcmVhZFBvcywgdGhlIHN0cmVhbVBvcyBtYXkgZ2V0IGJlaGluZCBhcworCQkJCSAq IHdlJ3JlIG9ubHkgYWR2YW5jaW5nIGl0IHdoZW4gYWN0dWFsbHkgcmVxdWVzdGluZyBoZWFwCisJ CQkJICogYmxvY2tzLiBCdXQgd2UgbWF5IG5vdCBkbyB0aGF0IG9mdGVuIGVub3VnaCAtIGUuZy4g SU9TIG1heQorCQkJCSAqIG5vdCBuZWVkIHRvIGFjY2VzcyBhbGwtdmlzaWJsZSBoZWFwIGJsb2Nr cywgc28gdGhlCisJCQkJICogcmVhZF9uZXh0IGNhbGxiYWNrIGRvZXMgbm90IGdldCBpbnZva2Vk IGZvciBhIGxvbmcgdGltZS4KKwkJCQkgKiBJdCdzIHBvc3NpYmxlIHRoZSBzdHJlYW0gZ2V0cyBz byBmYXIgYmVoaW5kIHRoZSBwb3NpdGlvbgorCQkJCSAqIHRoYXQgaXMgYmVjb21lcyBpbnZhbGlk LCBhcyB3ZSBhbHJlYWR5IHJlbW92ZWQgdGhlIGJhdGNoLgorCQkJCSAqIEJ1dCB0aGF0IG1lYW5z IHdlIGRvbid0IG5lZWQgYW55IGhlYXAgYmxvY2tzIHVudGlsIHRoZQorCQkJCSAqIGN1cnJlbnQg cmVhZCBwb3NpdGlvbiAtLSBpZiB3ZSBkaWQsIHdlIHdvdWxkIG5vdCBiZSBpbiB0aGlzCisJCQkJ ICogc2l0dWF0aW9uIChvciBpdCdzIGEgc2lnbiBvZiBhIGJ1ZywgYXMgdGhvc2UgdHdvIHBsYWNl cyBhcmUKKwkJCQkgKiBleHBlY3RlZCB0byBiZSBpbiBzeW5jKS4gU28gaWYgdGhlIHN0cmVhbVBv cyBzdGlsbCBwb2ludHMKKwkJCQkgKiBhdCB0aGUgYmF0Y2ggd2UncmUgYWJvdXQgdG8gZnJlZSwg cmVzZXQgdGhlIHBvc2l0aW9uIC0tCisJCQkJICogd2UnbGwgc2V0IGl0IHRvIHJlYWRQb3MgaW4g dGhlIHJlYWRfbmV4dCBjYWxsYmFjayBsYXRlciBvbi4KKwkJCQkgKgorCQkJCSAqIFhYWCBUaGlz IGNhbiBoYXBwZW4gYWZ0ZXIgdGhlIHF1ZXVlIGdldHMgZnVsbCwgd2UgInBhdXNlIgorCQkJCSAq IHRoZSBzdHJlYW0sIGFuZCB0aGVuIHJlc2V0IGl0IHRvIGNvbnRpbnVlLiBCdXQgSSB0aGluayB0 aGF0CisJCQkJICoganVzdCBpbmNyZWFzZXMgdGhlIHByb2JhYmlsaXR5IG9mIGhpdHRpbmcgdGhl IGlzc3VlLCBpdCdzCisJCQkJICoganVzdCBtb3JlIGNoYW5jZSB0byB0byBub3QgYWR2YW5jZSB0 aGUgc3RyZWFtUG9zLCB3aGljaAorCQkJCSAqIGRlcGVuZHMgb24gd2hlbiB3ZSB0cnkgdG8gZmV0 Y2ggdGhlIGZpcnN0IGhlYXAgYmxvY2sgYWZ0ZXIKKwkJCQkgKiBjYWxsaW5nIHJlYWRfc3RyZWFt X3Jlc2V0KCkuCisJCQkJICoKKwkJCQkgKiBGSVhNRSBTaW1wbGlmeS9jbGFyaWZ5L3Nob3J0ZW4g dGhpcyBjb21tZW50LiBDYW4gaXQKKwkJCQkgKiBhY3R1YWxseSBoYXBwZW4sIGlmIHdlIG5ldmVy IHB1bGwgZnJvbSB0aGUgc3RyZWFtIGluIElPUz8KKwkJCQkgKiBXZSBwcm9iYWJseSBkb24ndCBs b29rIGFoZWFkIGZvciB0aGUgZmlyc3QgY2FsbC4KKwkJCQkgKi8KKwkJCQlpZiAodW5saWtlbHko YmF0Y2hxdWV1ZS0+c3RyZWFtUG9zLmJhdGNoID09IGJhdGNocXVldWUtPmhlYWRCYXRjaCkpCisJ CQkJeworCQkJCQliYXRjaF9yZXNldF9wb3MoJmJhdGNocXVldWUtPnN0cmVhbVBvcyk7CisJCQkJ fQorCiAJCQkJLyogRnJlZSB0aGUgaGVhZCBiYXRjaCAoZXhjZXB0IHdoZW4gaXQncyBtYXJrQmF0 Y2gpICovCiAJCQkJYmF0Y2hfZnJlZShzY2FuLCBoZWFkQmF0Y2gpOwogCkBAIC00MjcsOCArNDg4 LDM4IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uKQogCQl9CiAKIAkJLyoKLQkJICogRmFpbGVkIHRvIGFkdmFuY2Ug dGhlIHJlYWQgcG9zaXRpb24uICBIYXZlIGluZGV4YmF0Y2guYyB1dGlsaXR5Ci0JCSAqIHJvdXRp bmUgbG9hZCBhbm90aGVyIGJhdGNoIGludG8gb3VyIHF1ZXVlIChuZXh0IGluIHRoaXMgZGlyZWN0 aW9uKS4KKwkJICogV2UgZmFpbGVkIHRvIGFkdmFuY2UsIGkuZS4gd2UgcmFuIG91dCBvZiBjdXJy ZW50bHkgbG9hZGVkIGJhdGNoZXMuCisJCSAqIFNvIGlmIHdlIGZpbGxlZCB0aGUgcXVldWUsIHRo aXMgaXMgYSBnb29kIHRpbWUgdG8gcmVzZXQgdGhlIHN0cmVhbQorCQkgKiAoYmVmb3JlIHdlIHRy eSBsb2FkaW5nIHRoZSBuZXh0IGJhdGNoKS4KKwkJICovCisJCWlmICh1bmxpa2VseShiYXRjaHF1 ZXVlLT5yZXNldCkpCisJCXsKKwkJCWJhdGNocXVldWUtPnJlc2V0ID0gZmFsc2U7CisJCQliYXRj aHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKworCQkJ LyoKKwkJCSAqIE5lZWQgdG8gcmVzZXQgdGhlIHN0cmVhbSBwb3NpdGlvbiwgaXQgbWlnaHQgYmUg dG9vIGZhciBiZWhpbmQuCisJCQkgKiBVbHRpbWF0ZWx5IHdlIHdhbnQgdG8gc2V0IGl0IHRvIHJl YWRQb3MsIGJ1dCB3ZSBjYW4ndCBkbyB0aGF0CisJCQkgKiB5ZXQgLSByZWFkUG9zIHN0aWxsIHBv aW50IHNhdCB0aGUgb2xkIGJhdGNoLCBzbyBqdXN0IHJlc2V0IGl0CisJCQkgKiBhbmQgd2UnbGwg aW5pdCBpdCB0byByZWFkUG9zIGxhdGVyIGluIHRoZSBjYWxsYmFjay4KKwkJCSAqLworCQkJYmF0 Y2hfcmVzZXRfcG9zKCZiYXRjaHF1ZXVlLT5zdHJlYW1Qb3MpOworCisJCQlpZiAoc2Nhbi0+eHNf aGVhcGZldGNoLT5ycykKKwkJCQlyZWFkX3N0cmVhbV9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gt PnJzKTsKKwkJfQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBhZHZhbmNlIHRoZSByZWFkIHBvc2l0 aW9uLCBzbyB0cnkgcmVhZGluZyB0aGUgbmV4dCBiYXRjaC4KKwkJICogSWYgdGhpcyBmYWlscywg d2UncmUgZG9uZSAtIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGxvYWQuCisJCSAqCisJCSAqIE1v c3Qgb2YgdGhlIGJhdGNoZXMgc2hvdWxkIGJlIGxvYWRlZCBmcm9tIHJlYWRfc3RyZWFtX25leHRf YnVmZmVyLAorCQkgKiBidXQgd2UgbmVlZCB0byBjYWxsIGJhdGNoX2dldG5leHQgaGVyZSB0b28s IGZvciB0d28gcmVhc29ucy4gRmlyc3QsCisJCSAqIHRoZSByZWFkX3N0cmVhbSBvbmx5IGdldHMg d29ya2luZyBhZnRlciB3ZSB0cnkgZmV0Y2hpbmcgdGhlIGZpcnN0CisJCSAqIGhlYXAgdHVwbGUs IHNvIHdlIG5lZWQgdG8gbG9hZCB0aGUgaW5pdGlhbCBiYXRjaCAodGhlIGhlYWQpLgorCQkgKiBT ZWNvbmQsIHdoaWxlIG1vc3QgYmF0Y2hlcyB3aWxsIGJlIHByZWxvYWRlZCBieSB0aGUgc3RyZWFt IHRoYW5rcworCQkgKiB0byBwcmVmZXRjaGluZywgaXQncyBwb3NzaWJsZSB0byBzZXQgZWZmZWN0 aXZlX2lvX2NvbmN1cnJlbmN5PTAsCisJCSAqIGFuZCBpbiB0aGF0IGNhc2UgYWxsIHRoZSBiYXRj aGVzIGdldCBsb2FkZWQgZnJvbSBoZXJlLgogCQkgKi8KIAkJaWYgKCFiYXRjaF9nZXRuZXh0KHNj YW4sIGRpcmVjdGlvbikpCiAJCXsKQEAgLTQ0OCw2ICs1MzksMTk4IEBAIGhlYXBhbV9iYXRjaF9n ZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQog CXJldHVybiBOVUxMOwogfQogCisvKgorICogQ29udHJvbHMgd2hlbiB3ZSBjYW5jZWwgdXNlIG9m IGEgcmVhZCBzdHJlYW0gdG8gZG8gcHJlZmV0Y2hpbmcKKyAqLworI2RlZmluZSBJTkRFWF9TQ0FO X01JTl9ESVNUQU5DRV9OQkFUQ0hFUwkyMAorI2RlZmluZSBJTkRFWF9TQ0FOX01JTl9UVVBMRV9E SVNUQU5DRQkJNworCisvKgorICogaGVhcGFtX2dldG5leHRfc3RyZWFtCisgKgkJcmV0dXJuIHRo ZSBuZXh0IGJsb2NrIHRvIHBhc3MgdG8gdGhlIHJlYWQgc3RyZWFtCisgKgorICogVGhpcyBhc3N1 bWVzIHRoZSAiY3VycmVudCIgc2NhbiBkaXJlY3Rpb24sIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVy LgorICoKKyAqIElmIHRoZSBkaXJlY3Rpb24gY2hhbmdlcyBiZWZvcmUgY29uc3VtaW5nIGFsbCBi bG9ja3MsIHdlJ2xsIHJlc2V0IHRoZSBzdHJlYW0KKyAqIGFuZCBzdGFydCBmcm9tIHNjcmF0Y2gu IFRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2UgaXMgaGFuZGxlZCBlbHNld2hlcmUuCisgKiBIZXJl IHdlIHJlbHkgb24gaGF2aW5nIHRoZSBjb3JyZWN0IHZhbHVlIGluIGJhdGNocXVldWUtPmRpcmVj dGlvbi4KKyAqCisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBp biBzdHJlYW1Qb3MsIHdoaWNoIG1heSBiZSBhaGVhZCBvZgorICogdGhlIGN1cnJlbnQgcmVhZFBv cyAod2hpY2ggaXMgd2hhdCBnb3QgY29uc3VtZWQgYnkgdGhlIHNjYW4pLgorICoKKyAqIFRoZSBz dHJlYW1Qb3MgY2FuIGhvd2V2ZXIgYWxzbyBnZXQgYmVoaW5kIHJlYWRQb3MgdG9vLCB3aGVuIHNv bWUgYmxvY2tzIGFyZQorICogc2tpcHBlZCBhbmQgbm90IHJldHVybmVkIHRvIHRoZSByZWFkX3N0 cmVhbS4gQW4gZXhhbXBsZSBpcyBhbiBpbmRleCBzY2FuIG9uCisgKiBhIGNvcnJlbGF0ZWQgaW5k ZXgsIHdpdGggbWFueSBkdXBsaWNhdGUgYmxvY2tzIGFyZSBza2lwcGVkLCBvciBhbiBJT1Mgd2hl cmUKKyAqIGFsbC12aXNpYmxlIGJsb2NrcyBhcmUgc2tpcHBlZC4KKyAqCisgKiBUaGUgaW5pdGlh bCBiYXRjaCBpcyBhbHdheXMgbG9hZGVkIGZyb20gYmF0Y2hfZ2V0bmV4dF90aWQoKS4gV2UgZG9u J3QKKyAqIGdldCBoZXJlIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcigp IGNhbGwsIHdoZW4gcHVsbGluZyB0aGUKKyAqIGZpcnN0IGhlYXAgdHVwbGUgZnJvbSB0aGUgc3Ry ZWFtLiBBZnRlciB0aGF0LCBtb3N0IGJhdGNoZXMgc2hvdWxkIGJlIGxvYWRlZAorICogYnkgdGhp cyBjYWxsYmFjaywgZHJpdmVuIGJ5IHRoZSByZWFkX3N0cmVhbSBsb29rLWFoZWFkIGRpc3RhbmNl LiBIb3dldmVyLAorICogd2l0aCBkaXNhYmxlZCBwcmVmZXRjaGluZyAodGhhdCBpcywgd2l0aCBl ZmZlY3RpdmVfaW9fY29uY3VycmVuY3k9MCksIGFsbAorICogYmF0Y2hlcyB3aWxsIGJlIGxvYWRl ZCBpbiBiYXRjaF9nZXRuZXh0X3RpZC4KKyAqCisgKiBJdCdzIHBvc3NpYmxlIHdlIGdvdCBoZXJl IG9ubHkgZmFpcmx5IGxhdGUgaW4gdGhlIHNjYW4sIGUuZy4gaWYgbWFueSB0dXBsZXMKKyAqIGdv dCBza2lwcGVkIGluIHRoZSBpbmRleC1vbmx5IHNjYW4sIGV0Yy4gSW4gdGhpcyBjYXNlIGp1c3Qg dXNlIHRoZSByZWFkCisgKiBwb3NpdGlvbiBhcyBhIHN0cmVhbVBvcyBzdGFydGluZyBwb2ludC4K KyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCSAgdm9pZCAqcGVy X2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJbmRleFNjYW5EZXNjKSBj YWxsYmFja19wcml2YXRlX2RhdGE7CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJh dGNocXVldWU7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnN0cmVhbVBvcyA9ICZiYXRjaHF1ZXVlLT5z dHJlYW1Qb3M7CisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBiYXRjaHF1ZXVlLT5kaXJlY3Rp b247CisKKwkvKiBCeSBub3cgd2Ugc2hvdWxkIGtub3cgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc2Nh bi4gKi8KKwlBc3NlcnQoZGlyZWN0aW9uICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKwor CS8qCisJICogVGhlIHJlYWQgcG9zaXRpb24gKHJlYWRQb3MpIGhhcyB0byBiZSB2YWxpZC4KKwkg KgorCSAqIFdlIGluaXRpYWxpemUvYWR2YW5jZSBpdCBiZWZvcmUgZXZlbiBhdHRlbXB0aW5nIHRv IHJlYWQgdGhlIGhlYXAgdHVwbGUsCisJICogYW5kIGl0IGdldHMgaW52YWxpZGF0ZWQgd2hlbiB3 ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBzY2FuIChidXQgdGhlbiB3ZQorCSAqIGRvbid0IGludm9r ZSB0aGUgY2FsbGJhY2sgYWdhaW4pLgorCSAqCisJICogWFhYIFRoaXMgYXBwbGllcyB0byB0aGUg cmVhZFBvcy4gV2UnbGwgdXNlIHN0cmVhbVBvcyB0byBkZXRlcm1pbmUgd2hpY2gKKwkgKiBibG9j a3MgdG8gcGFzcyB0byB0aGUgc3RyZWFtLCBhbmQgcmVhZFBvcyBtYXkgYmUgdXNlZCB0byBpbml0 aWFsaXplIGl0LgorCSAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgJmJhdGNocXVl dWUtPnJlYWRQb3MpOworCisJLyoKKwkgKiBUcnkgdG8gYWR2YW5jZSB0aGUgc3RyZWFtUG9zIHRv IHRoZSBuZXh0IGl0ZW0sIGFuZCBpZiB0aGF0IGRvZXNuJ3QKKwkgKiBzdWNjZWVkIChpZiB0aGVy ZSBhcmUgbm8gbW9yZSBpdGVtcyBpbiBsb2FkZWQgYmF0Y2hlcyksIHRyeSBsb2FkaW5nIHRoZQor CSAqIG5leHQgb25lLgorCSAqCisJICogRklYTUUgVW5saWtlIGJhdGNoX2dldG5leHRfdGlkLCB0 aGlzIGNhbiBsb29wIG1vcmUgdGhhbiB0d2ljZS4gSWYgbWFueQorCSAqIGJsb2NrcyBnZXQgc2tp cHBlZCBkdWUgdG8gY3VycmVudFByZWZldGNoQmxvY2sgb3IgYWxsLXZpc2liaWxpdHkgKHBlcgor CSAqIHRoZSAicHJlZmV0Y2giIGNhbGxiYWNrKSwgd2UgZ2V0IHRvIGxvYWQgYWRkaXRpb25hbCBi YXRjaGVzLiBJbiB0aGUKKwkgKiB3b3JzdCBjYXNlIHdlIGhpdCB0aGUgSU5ERVhfU0NBTl9NQVhf QkFUQ0hFUyBsaW1pdCBhbmQgaGF2ZSB0byAicGF1c2UiCisJICogdGhlIHN0cmVhbS4KKwkgKi8K Kwl3aGlsZSAodHJ1ZSkKKwl7CisJCWJvb2wJCWFkdmFuY2VkID0gZmFsc2U7CisKKwkJLyoKKwkJ ICogSWYgdGhlIHN0cmVhbSBwb3NpdGlvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBz ZXQgaXQgdG8gdGhlCisJCSAqIGN1cnJlbnQgcmVhZCBwb3NpdGlvbi4gVGhpcyBpcyB0aGUgaXRl bSB0aGUgY2FsbGVyIGlzIHRyeWluZyB0bworCQkgKiByZWFkLCBzbyBpdCdzIHdoYXQgd2Ugc2hv dWxkIHJldHVybiB0byB0aGUgc3RyZWFtLgorCQkgKi8KKwkJaWYgKElOREVYX1NDQU5fUE9TX0lO VkFMSUQoc3RyZWFtUG9zKSkKKwkJeworCQkJKnN0cmVhbVBvcyA9IGJhdGNocXVldWUtPnJlYWRQ b3M7CisJCQlhZHZhbmNlZCA9IHRydWU7CisJCX0KKwkJZWxzZSBpZiAoaGVhcF9iYXRjaF9hZHZh bmNlX3BvcyhzY2FuLCBzdHJlYW1Qb3MsIGRpcmVjdGlvbikpCisJCXsKKwkJCWFkdmFuY2VkID0g dHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIEZJWE1FIE1heWJlIGNoZWNrIHRoZSBzdHJlYW1Qb3Mg aXMgbm90IGJlaGluZCByZWFkUG9zPworCQkgKgorCQkgKiBGSVhNRSBBY3R1YWxseSwgY291bGQg c3RyZWFtUG9zIGdldCBzdGFsZS9sYWdnaW5nIGJlaGluZCByZWFkUG9zLAorCQkgKiBhbmQgaWYg eWVzIGhvdyBtdWNoLiBDb3VsZCBpdCBnZXQgc28gZmFyIGJlaGluZCB0byBub3QgYmUgdmFsaWQs CisJCSAqIHBvaW50aW5nIGF0IGEgZnJlZWQgYmF0Y2g/IEluIHRoYXQgY2FzZSB3ZSBjYW4ndCBl dmVuIGFkdmFuY2UgaXQsCisJCSAqIGFuZCB3ZSBzaG91bGQganVzdCBpbml0aWFsaXplIGl0IHRv IHJlYWRQb3MuIFdlIG1pZ2h0IGRvIHRoYXQKKwkJICogYW55d2F5LCBJIGd1ZXNzLCBqdXN0IHRv IHNhdmUgb24gInBvaW50bGVzcyIgYWR2YW5jZXMgKGl0IG11c3QKKwkJICogYWdyZWUgd2l0aCBy ZWFkUG9zLCB3ZSBjYW4ndCBhbGxvdyAicmV0cm9hY3RpdmVseSIgY2hhbmdpbmcgdGhlCisJCSAq IGJsb2NrIHNlcXVlbmNlKS4KKwkJICovCisKKwkJLyoKKwkJICogSWYgd2UgYWR2YW5jZWQgdGhl IHBvc2l0aW9uLCBlaXRoZXIgcmV0dXJuIHRoZSBibG9jayBmb3IgdGhlIFRJRCwKKwkJICogb3Ig c2tpcCBpdCAoYW5kIHRoZW4gdHJ5IGFkdmFuY2luZyBhZ2FpbikuCisJCSAqCisJCSAqIFRoZSBi bG9jayBtYXkgYmUgInNraXBwZWQiIGZvciB0d28gcmVhc29ucy4gRmlyc3QsIHRoZSBjYWxsZXIg bWF5CisJCSAqIGRlZmluZSBhICJwcmVmZXRjaCIgY2FsbGJhY2sgdGhhdCB0ZWxscyB1cyB0byBz a2lwIGl0ZW1zIChJT1MgZG9lcworCQkgKiB0aGlzIHRvIHNraXAgYWxsLXZpc2libGUgcGFnZXMp LiBTZWNvbmQsIGN1cnJlbnRQcmVmZXRjaEJsb2NrIGlzCisJCSAqIHVzZWQgdG8gc2tpcCBkdXBs aWNhdGUgYmxvY2sgbnVtYmVycyAoYSBzZXF1ZW5jZSBvZiBUSURTIGZvciB0aGUKKwkJICogc2Ft ZSBibG9jaykuCisJCSAqLworCQlpZiAoYWR2YW5jZWQpCisJCXsKKwkJCUJhdGNoSW5kZXhTY2Fu IHN0cmVhbUJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBzdHJlYW1Qb3MtPmJhdGNoKTsK KwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZzdHJlYW1CYXRjaC0+aXRlbXNbc3RyZWFtUG9zLT5pdGVt XS5oZWFwVGlkOworCisJCQlERUJVR19MT0coImhlYXBhbV9nZXRuZXh0X3N0cmVhbTogaXRlbSAl ZCwgVElEICgldSwldSkiLAorCQkJCQkgIHN0cmVhbVBvcy0+aXRlbSwKKwkJCQkJICBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCSAgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1i ZXIodGlkKSk7CisKKwkJCS8qIHNhbWUgYmxvY2sgYXMgYmVmb3JlLCBkb24ndCBuZWVkIHRvIHJl YWQgaXQgKi8KKwkJCWlmIChiYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9PSBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpCisJCQl7CisJCQkJREVCVUdfTE9HKCJoZWFwYW1f Z2V0bmV4dF9zdHJlYW06IHNraXAgYmxvY2sgKGN1cnJlbnRQcmVmZXRjaEJsb2NrKSIpOworCQkJ CWNvbnRpbnVlOworCQkJfQorCisJCQliYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9 IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQkJcmV0dXJuIGJhdGNocXVldWUt PmN1cnJlbnRQcmVmZXRjaEJsb2NrOworCQl9CisKKwkJLyoKKwkJICogQ291bGRuJ3QgYWR2YW5j ZSB0aGUgcG9zaXRpb24sIG5vIG1vcmUgaXRlbXMgaW4gdGhlIGxvYWRlZCBiYXRjaGVzLgorCQkg KiBUcnkgbG9hZGluZyB0aGUgbmV4dCBiYXRjaCAtIGlmIHRoYXQgc3VjY2VlZHMsIHRyeSBhZHZh bmNpbmcgYWdhaW4KKwkJICogKHRoaXMgdGltZSB0aGUgYWR2YW5jZSBzaG91bGQgd29yaywgYnV0 IHdlIG1heSBza2lwIGFsbCB0aGUgaXRlbXMpLgorCQkgKgorCQkgKiBJZiB3ZSBmYWlsIHRvIGxv YWQgdGhlIG5leHQgYmF0Y2gsIHdlJ3JlIGRvbmUuCisJCSAqLworCQlpZiAoIWJhdGNoX2dldG5l eHQoc2NhbiwgZGlyZWN0aW9uKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIENvbnNpZGVyIGRp c2FibGluZyBwcmVmZXRjaGluZyB3aGVuIHdlIGNhbid0IGtlZXAgYSBzdWZmaWNpZW50bHkKKwkJ ICogbGFyZ2UgImluZGV4IHR1cGxlIGRpc3RhbmNlIiBiZXR3ZWVuIHJlYWRQb3MgYW5kIHN0cmVh bVBvcy4KKwkJICoKKwkJICogT25seSBjb25zaWRlciBkb2luZyB0aGlzIHdoZW4gd2UncmUgbm90 IG9uIHRoZSBzY2FuJ3MgaW5pdGlhbAorCQkgKiBiYXRjaCwgd2hlbiByZWFkUG9zIGFuZCBzdHJl YW1Qb3Mgc2hhcmUgdGhlIHNhbWUgYmF0Y2guCisJCSAqLworCQlpZiAoIXNjYW4tPmZpbmlzaGVk ICYmICFiYXRjaHF1ZXVlLT5wcmVmZXRjaGluZ0xvY2tlZEluKQorCQl7CisJCQlpbnQJCQlpdGVt ZGlmZjsKKworCQkJaWYgKHN0cmVhbVBvcy0+YmF0Y2ggPD0gSU5ERVhfU0NBTl9NSU5fRElTVEFO Q0VfTkJBVENIRVMpCisJCQl7CisJCQkJLyogVG9vIGVhcmx5IHRvIGNoZWNrIGlmIHByZWZldGNo aW5nIHNob3VsZCBiZSBkaXNhYmxlZCAqLworCQkJfQorCQkJZWxzZSBpZiAoYmF0Y2hxdWV1ZS0+ cmVhZFBvcy5iYXRjaCA9PSBzdHJlYW1Qb3MtPmJhdGNoKQorCQkJeworCQkJCUJhdGNoUXVldWVJ dGVtUG9zICpyZWFkUG9zID0gJmJhdGNocXVldWUtPnJlYWRQb3M7CisKKwkJCQlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQkJCQlpdGVtZGlmZiA9IHN0cmVhbVBvcy0+ aXRlbSAtIHJlYWRQb3MtPml0ZW07CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJQmF0Y2hJbmRleFNj YW4gcmVhZEJhdGNoID0KKwkJCQkJCUlOREVYX1NDQU5fQkFUQ0goc2NhbiwgcmVhZFBvcy0+YmF0 Y2gpOworCisJCQkJCWl0ZW1kaWZmID0gKHJlYWRQb3MtPml0ZW0gLSByZWFkQmF0Y2gtPmZpcnN0 SXRlbSkgLQorCQkJCQkJKHN0cmVhbVBvcy0+aXRlbSAtIHJlYWRCYXRjaC0+Zmlyc3RJdGVtKTsK KwkJCQl9CisKKwkJCQlpZiAoaXRlbWRpZmYgPCBJTkRFWF9TQ0FOX01JTl9UVVBMRV9ESVNUQU5D RSkKKwkJCQl7CisJCQkJCWJhdGNocXVldWUtPmRpc2FibGVkID0gdHJ1ZTsKKwkJCQkJcmV0dXJu IEludmFsaWRCbG9ja051bWJlcjsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJYmF0Y2hx dWV1ZS0+cHJlZmV0Y2hpbmdMb2NrZWRJbiA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJZWxzZQor CQkJCWJhdGNocXVldWUtPnByZWZldGNoaW5nTG9ja2VkSW4gPSB0cnVlOworCQl9CisJfQorCisJ Lyogbm8gbW9yZSBpdGVtcyBpbiB0aGlzIHNjYW4gKi8KKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVt YmVyOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdl dCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQogICoKQEAgLTMxMTYsNiArMzM5OSw3IEBAIHN0 YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkuaW5kZXhfZmV0 Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4X2ZldGNoX2VuZCA9 IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCiAJLmluZGV4X2dldG5leHRfc2xvdCA9IGhlYXBhbV9p bmRleF9nZXRuZXh0X3Nsb3QsCisJLmluZGV4X2dldG5leHRfc3RyZWFtID0gaGVhcGFtX2dldG5l eHRfc3RyZWFtLAogCS5pbmRleF9mZXRjaF90dXBsZSA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZSwKIAogCS50dXBsZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0LApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGFtLmMKaW5kZXggMzkzNjNlZmYzLi4wZDJjZmE2MDUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YW0uYwpAQCAtNDY3LDcgKzQ2NywxNSBAQCBpbmRleF9yZXN0cnBvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAJQ0hF Q0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKLQkvKiByZWxlYXNlIHJlc291cmNlcyAo bGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qCisJICogcmVsZWFz ZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMKKwkgKgor CSAqIFhYWDogQ3VycmVudGx5LCB0aGUgZGlzdGFuY2UgaXMgYWx3YXlzIHJlbWVtYmVyZWQgYWNy b3NzIGFueQorCSAqIHJlYWRfc3RyZWFtX3Jlc2V0IGNhbGxzICh0byB3b3JrIGFyb3VuZCB0aGUg c2Nhbi0+YmF0Y2hxdWV1ZS0+cmVzZXQKKwkgKiBiZWhhdmlvciBvZiByZXNldHRpbmcgdGhlIHN0 cmVhbSB0byBkZWFsIHdpdGggcnVubmluZyBvdXQgb2YgYmF0Y2hlcykuCisJICogV2UgcHJvYmFi bHkgX3Nob3VsZF8gYmUgZm9yZ2V0dGluZyB0aGUgZGlzdGFuY2Ugd2hlbiB3ZSByZXNldCB0aGUK KwkgKiBzdHJlYW0gaGVyZSAodGhyb3VnaCBvdXIgdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQgY2Fs bCksIHRob3VnaC4KKwkgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCQl0YWJsZV9pbmRl eF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYwppbmRleCBiNmYyNGIzNzkuLjI5MjA3Mjc2ZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC03NSwxMSArNzUsMTYgQEAgaW5kZXhfYmF0Y2hfaW5p dChJbmRleFNjYW5EZXNjIHNjYW4pCiAJCSghc2Nhbi0+eHNfd2FudF9pdHVwICYmIElzTVZDQ1Nu YXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSAmJgogCQkgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5p bmRleFJlbGF0aW9uKSk7CiAJc2Nhbi0+ZmluaXNoZWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1 ZXVlLT5yZXNldCA9IGZhbHNlOworCXNjYW4tPmJhdGNocXVldWUtPnByZWZldGNoaW5nTG9ja2Vk SW4gPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5kaXNhYmxlZCA9IGZhbHNlOworCXNjYW4t PmJhdGNocXVldWUtPmN1cnJlbnRQcmVmZXRjaEJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwog CXNjYW4tPmJhdGNocXVldWUtPmRpcmVjdGlvbiA9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uOwog CiAJLyogcG9zaXRpb25zIGluIHRoZSBxdWV1ZSBvZiBiYXRjaGVzICovCiAJYmF0Y2hfcmVzZXRf cG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5yZWFkUG9zKTsKIAliYXRjaF9yZXNldF9wb3MoJnNjYW4t PmJhdGNocXVldWUtPm1hcmtQb3MpOworCWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+YmF0Y2hxdWV1 ZS0+c3RyZWFtUG9zKTsKIAogCXNjYW4tPmJhdGNocXVldWUtPm1hcmtCYXRjaCA9IE5VTEw7CiAJ c2Nhbi0+YmF0Y2hxdWV1ZS0+aGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICov CkBAIC0xMjMsNyArMTI4LDIzIEBAIGJhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlpZiAoc2Nhbi0+ZmluaXNoZWQpCiAJCXJldHVybiBm YWxzZTsKIAotCUFzc2VydCghSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pKTsKKwkvKgorCSAq IElmIHdlIGFscmVhZHkgdXNlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmF0Y2ggc2xvdHMgYXZh aWxhYmxlLCBpdCdzCisJICogcG9pbnRsZXNzIHRvIHRyeSBsb2FkaW5nIGFub3RoZXIgb25lLiBU aGlzIGNhbiBoYXBwZW4gZm9yIHZhcmlvdXMKKwkgKiByZWFzb25zLCBlLmcuIGZvciBpbmRleC1v bmx5IHNjYW5zIG9uIGFsbC12aXNpYmxlIHRhYmxlLCBvciBza2lwcGluZworCSAqIGR1cGxpY2F0 ZSBibG9ja3Mgb24gcGVyZmVjdGx5IGNvcnJlbGF0ZWQgaW5kZXhlcywgZXRjLgorCSAqCisJICog V2UgY291bGQgZW5sYXJnZSB0aGUgYXJyYXkgdG8gYWxsb3cgbW9yZSBiYXRjaGVzLCBidXQgdGhh dCdzIGZ1dGlsZSwgd2UKKwkgKiBjYW4gYWx3YXlzIGNvbnN0cnVjdCBhIGNhc2UgdXNpbmcgbW9y ZSBtZW1vcnkuIE5vdCBvbmx5IGl0IHdvdWxkIHJpc2sKKwkgKiBPT00sIGl0J2QgYWxzbyBiZSBp bmVmZmljaWVudCBiZWNhdXNlIHRoaXMgaGFwcGVucyBlYXJseSBpbiB0aGUgc2NhbgorCSAqIChz byBpdCdkIGludGVyZmVyZSB3aXRoIExJTUlUIHF1ZXJpZXMpLgorCSAqLworCWlmIChJTkRFWF9T Q0FOX0JBVENIX0ZVTEwoc2NhbikpCisJeworCQlERUJVR19MT0coImJhdGNoX2dldG5leHQ6IHJh biBvdXQgb2Ygc3BhY2UgZm9yIGJhdGNoZXMiKTsKKwkJc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVzZXQg PSB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQogCiAJYmF0Y2hfZGVidWdfcHJpbnRfYmF0Y2hl cygiYmF0Y2hfZ2V0bmV4dCAvIHN0YXJ0Iiwgc2Nhbik7CiAKQEAgLTE0OCw2ICsxNjksMTcgQEAg YmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u KQogCiAJCURFQlVHX0xPRygiYmF0Y2hfZ2V0bmV4dCBoZWFkQmF0Y2ggJWQgbmV4dEJhdGNoICVk IGJhdGNoICVwIiwKIAkJCQkgIGJhdGNocXVldWUtPmhlYWRCYXRjaCwgYmF0Y2hxdWV1ZS0+bmV4 dEJhdGNoLCBiYXRjaCk7CisKKwkJLyogRGVsYXkgaW5pdGlhbGl6aW5nIHN0cmVhbSB1bnRpbCBy ZWFkaW5nIGZyb20gc2NhbidzIHNlY29uZCBiYXRjaCAqLworCQlpZiAocHJpb3JiYXRjaCAmJiAh c2Nhbi0+eHNfaGVhcGZldGNoLT5ycyAmJiAhYmF0Y2hxdWV1ZS0+ZGlzYWJsZWQgJiYKKwkJCSFz Y2FuLT54c193YW50X2l0dXAgJiYJLyogWFhYIHByZWZldGNoaW5nIGRpc2FibGVkIGZvciBJb1Ms IGZvcgorCQkJCQkJCQkJICogbm93ICovCisJCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoKQor CQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyA9CisJCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRp b24oUkVBRF9TVFJFQU1fREVGQVVMVCwgTlVMTCwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVs YXRpb24sIE1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24tPnJk X3RhYmxlYW0tPmluZGV4X2dldG5leHRfc3RyZWFtLAorCQkJCQkJCQkJCSAgIHNjYW4sIDApOwog CX0KIAllbHNlCiAJCXNjYW4tPmZpbmlzaGVkID0gdHJ1ZTsKQEAgLTE4MCw5ICsyMTIsMTIgQEAg aW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKQogCWJh dGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOwogCWJhdGNoX2RlYnVnX3ByaW50X2JhdGNo ZXMoImluZGV4X2JhdGNoX3Jlc2V0Iiwgc2Nhbik7CiAJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRj aCk7CisJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpCisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNj YW4tPnhzX2hlYXBmZXRjaC0+cnMpOwogCiAJLyogcmVzZXQgdGhlIHBvc2l0aW9ucyAqLwogCWJh dGNoX3Jlc2V0X3BvcygmYmF0Y2hxdWV1ZS0+cmVhZFBvcyk7CisJYmF0Y2hfcmVzZXRfcG9zKCZi YXRjaHF1ZXVlLT5zdHJlYW1Qb3MpOwogCiAJLyoKIAkgKiBXaXRoICJjb21wbGV0ZSIgcmVzZXQs IG1ha2Ugc3VyZSB0byBhbHNvIGZyZWUgdGhlIG1hcmtlZCBiYXRjaCwgZWl0aGVyCkBAIC0yMjgs NiArMjYzLDggQEAgaW5kZXhfYmF0Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNv bXBsZXRlKQogCWJhdGNocXVldWUtPm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggaXMg ZW1wdHkgKi8KIAogCXNjYW4tPmZpbmlzaGVkID0gZmFsc2U7CisJYmF0Y2hxdWV1ZS0+cmVzZXQg PSBmYWxzZTsKKwliYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IEludmFsaWRCbG9j a051bWJlcjsKIAogCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOwogfQpAQCAtMjkx LDkgKzMyOCwxMyBAQCBpbmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4p CiB7CiAJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7CiAJQmF0Y2hR dWV1ZUl0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hxdWV1ZS0+bWFya1BvczsKLQlCYXRjaFF1ZXVl SXRlbVBvcyAqcmVhZFBvcyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9zOwogCUJhdGNoSW5kZXhTY2Fu IG1hcmtCYXRjaCA9IGJhdGNocXVldWUtPm1hcmtCYXRjaDsKIAorCS8qCisJICogWFhYIERpc2Fi bGUgdGhpcyBvcHRpbWl6YXRpb24gd2hlbiBJL08gcHJlZmV0Y2hpbmcgaXMgaW4gdXNlLCBhdCBs ZWFzdAorCSAqIHVudGlsIHRoZSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBzdHJlYW1Qb3Mg YXJlIGZ1bGx5IHVuZGVyc3Rvb2QuCisJICovCisjaWYgMAogCWlmIChyZWFkUG9zLT5iYXRjaCA9 PSBtYXJrUG9zLT5iYXRjaCAmJgogCQlyZWFkUG9zLT5iYXRjaCA9PSBiYXRjaHF1ZXVlLT5oZWFk QmF0Y2gpCiAJewpAQCAtMzA0LDYgKzM0NSw3IEBAIGluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zKElu ZGV4U2NhbkRlc2Mgc2NhbikKIAkJcmVhZFBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CiAJCXJl dHVybjsKIAl9CisjZW5kaWYKIAogCS8qCiAJICogQ2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRl eCBBTSBrbm93IHRvIGludmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IGEzOWNjNzkzYi4uMzdhMGU2YTNmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE0NCw2ICsxNDQsNyBAQCBpbnQJCQltYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKIAogYm9vbAkJZW5hYmxlX3NlcXNjYW4g PSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4c2NhbiA9IHRydWU7Citib29sCQllbmFibGVfaW5k ZXhzY2FuX3ByZWZldGNoID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleG9ubHlzY2FuID0gdHJ1 ZTsKIGJvb2wJCWVuYWJsZV9iaXRtYXBzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV90aWRzY2Fu ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFt LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGYxYjg4ZDA1 OC4uMmEwNjI3OWY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0 cmVhbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTk5 LDYgKzk5LDcgQEAgc3RydWN0IFJlYWRTdHJlYW0KIAlpbnQxNgkJZm9yd2FyZGVkX2J1ZmZlcnM7 CiAJaW50MTYJCXBpbm5lZF9idWZmZXJzOwogCWludDE2CQlkaXN0YW5jZTsKKwlpbnQxNgkJZGlz dGFuY2Vfb2xkOwogCWludDE2CQlpbml0aWFsaXplZF9idWZmZXJzOwogCWludAkJCXJlYWRfYnVm ZmVyc19mbGFnczsKIAlib29sCQlzeW5jX21vZGU7CQkvKiB1c2luZyBpb19tZXRob2Q9c3luYyAq LwpAQCAtNDY0LDYgKzQ2NSw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAq c3RyZWFtKQogCQlpZiAoYmxvY2tudW0gPT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCQl7CiAJCQkv KiBFbmQgb2Ygc3RyZWFtLiAqLworCQkJc3RyZWFtLT5kaXN0YW5jZV9vbGQgPSBzdHJlYW0tPmRp c3RhbmNlOwogCQkJc3RyZWFtLT5kaXN0YW5jZSA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtODYy LDYgKzg2NCw3IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRTdHJlYW0gKnN0cmVhbSwg dm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJZWxzZQogCQl7CiAJCQkvKiBObyBtb3JlIGJsb2Nr cywgZW5kIG9mIHN0cmVhbS4gKi8KKwkJCXN0cmVhbS0+ZGlzdGFuY2Vfb2xkID0gc3RyZWFtLT5k aXN0YW5jZTsKIAkJCXN0cmVhbS0+ZGlzdGFuY2UgPSAwOwogCQkJc3RyZWFtLT5vbGRlc3RfYnVm ZmVyX2luZGV4ID0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleDsKIAkJCXN0cmVhbS0+cGlubmVk X2J1ZmZlcnMgPSAwOwpAQCAtMTA0Niw2ICsxMDQ5LDkgQEAgcmVhZF9zdHJlYW1fcmVzZXQoUmVh ZFN0cmVhbSAqc3RyZWFtKQogCWludDE2CQlpbmRleDsKIAlCdWZmZXIJCWJ1ZmZlcjsKIAorCS8q IHJlbWVtYmVyIHRoZSBvbGQgZGlzdGFuY2UgKGlmIHdlIHJlc2V0IGJlZm9yZSBlbmQgb2YgdGhl IHN0cmVhbSkgKi8KKwlzdHJlYW0tPmRpc3RhbmNlX29sZCA9IE1heChzdHJlYW0tPmRpc3RhbmNl LCBzdHJlYW0tPmRpc3RhbmNlX29sZCk7CisKIAkvKiBTdG9wIGxvb2tpbmcgYWhlYWQuICovCiAJ c3RyZWFtLT5kaXN0YW5jZSA9IDA7CiAKQEAgLTEwNzgsOCArMTA4NCwxMiBAQCByZWFkX3N0cmVh bV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0pCiAJQXNzZXJ0KHN0cmVhbS0+cGlubmVkX2J1ZmZl cnMgPT0gMCk7CiAJQXNzZXJ0KHN0cmVhbS0+aW9zX2luX3Byb2dyZXNzID09IDApOwogCi0JLyog U3RhcnQgb2ZmIGFzc3VtaW5nIGRhdGEgaXMgY2FjaGVkLiAqLwotCXN0cmVhbS0+ZGlzdGFuY2Ug PSAxOworCS8qCisJICogUmVzdG9yZSB0aGUgb2xkIGRpc3RhbmNlLCBpZiB3ZSBoYXZlIG9uZS4g T3RoZXJ3aXNlIHN0YXJ0IGFzc3VtaW5nIGRhdGEKKwkgKiBpcyBjYWNoZWQuCisJICovCisJc3Ry ZWFtLT5kaXN0YW5jZSA9IE1heCgxLCBzdHJlYW0tPmRpc3RhbmNlX29sZCk7CisJc3RyZWFtLT5k aXN0YW5jZV9vbGQgPSAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJh bWV0ZXJzLmRhdAppbmRleCAzYjlkODM0OTAuLjNmMjY0ZjFjZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTg4Miw2ICs4ODIsMTMgQEAKICAgYm9vdF92 YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo JywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FV RVJZX1RVTklOR19NRVRIT0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHByZWZldGNoaW5n IGZvciBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seS1zY2Fucy4nLAorICBmbGFncyA9PiAnR1VD X0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsCisg IGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKIHsgbmFtZSA9PiAnZW5hYmxlX21hdGVyaWFsJywg dHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZ X1RVTklOR19NRVRIT0QnLAogICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBwbGFubmVyXCdz IHVzZSBvZiBtYXRlcmlhbGl6YXRpb24uJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBi L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBkYzll MjI1NWYuLmRhNTBhZTE1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0 Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZQpAQCAtNDEyLDYgKzQxMiw3IEBACiAjZW5hYmxlX2luY3JlbWVudGFsX3Nv cnQgPSBvbgogI2VuYWJsZV9pbmRleHNjYW4gPSBvbgogI2VuYWJsZV9pbmRleG9ubHlzY2FuID0g b24KKyNlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoID0gb24KICNlbmFibGVfbWF0ZXJpYWwgPSBv bgogI2VuYWJsZV9tZW1vaXplID0gb24KICNlbmFibGVfbWVyZ2Vqb2luID0gb24KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggMDQxMWRiODMyLi5hMmE4YzNhZmEgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNTksNiArMTU5LDcgQEAg c2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2Vu YWJsZSUnOwogIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2lu ZGV4b25seXNjYW4gICAgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAg ICAgfCBvbgorIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21h dGVyaWFsICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAg ICAgfCBvbgogIGVuYWJsZV9tZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCkBAIC0xNzMsNyAr MTc0LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1l IGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAg ZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAg ICAgICAgICAgICAgfCBvbgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFs d2F5cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlv blBvaW50CiAtLSBtYXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5 IHNpbmNlIGxhc3QgcG9zdG1hc3RlciBzdGFydC4KLS0gCjIuNTEuMAoK --0000000000007b96d706467a0698 Content-Type: application/octet-stream; name="v5-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v5-0004-Add-amgetbatch-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjg0swio1 RnJvbSAxMTAwZmU2NmY5NTdkNDE4NmY4NjExZTllMzE4ZmIzZTU1NjJmNTk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHY1IDQvNF0gQWRk IGFtZ2V0YmF0Y2ggc3VwcG9ydCB0byBoYXNoIGluZGV4IEFNLgoKVGhpcyBwYXRjaCBzaG91bGQg YmUgY29uc2lkZXJlZCBhIHdvcmsgaW4gcHJvZ3Jlc3MuICBJdCBoYXMgb25seSBiZWVuCmxpZ2h0 bHkgdGVzdGVkLCBhbmQgaXQncyBub3QgY2xlYXIgaWYgSSd2ZSBhY2NvdW50ZWQgZm9yIGFsbCBv ZiB0aGUKaW50cmljYWNpZXMgd2l0aCBidWNrZXQgc3BsaXRzIChhbmQgd2l0aCBwaW5zIHRoYXQg YXJlIGhlbGQgYnkgdGhlCnNjYW4ncyBvcGFxdWUgc3RhdGUgbW9yZSBnZW5lcmFsbHkpLgoKVGhp cyBhdXRvbWF0aWNhbGx5IHN3aXRjaGVkIGhhc2ggaW5kZXhlcyBvdmVyIHRvIHVzaW5nIHRoZSBk cm9wUGluCm9wdGltaXphdGlvbiwgc2luY2UgdGhhdCBpcyBzdGFuZGFyZCB3aGVuIHVzaW5nIHRo ZSBuZXcgYW1nZXRiYXRjaAppbnRlcmZhY2UuICBUaGlzIHdvbid0IGJyaW5nIHNpbWlsYXIgYmVu ZWZpdHMgdG8gaGFzaCBpbmRleCBzY2FucyB0aGF0Cm5idHJlZSBpbmRleCBzY2FucyBnYWluZWQg d2hlbiBjb21taXQgMmVkNWI4N2Ygd2VudCBpbi4gIEhhc2ggaW5kZXgKdmFjdXVtaW5nIGFjcXVp cmVzIGEgY2xlYW51cCBsb2NrIG9uIGJ1Y2tldCBwYWdlcywgYnV0IGNvbmZsaWN0aW5nIHBpbnMK b24gYnVja2V0IHBhZ2VzIGFyZSBzdGlsbCBoZWxkIGZvciB0aGUgZnVsbCBkdXJhdGlvbiBvZiBl YWNoIGluZGV4IHNjYW4uCgpIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCBpbmRlcGVuZGVudCB2YWx1 ZSBpbiBhdm9pZGluZyBob2xkaW5nIG9uIHRvCmJ1ZmZlciBwaW5zIGR1cmluZyBpbmRleCBzY2Fu czogaW5kZXggcHJlZmV0Y2hpbmcgdGVuZHMgdG8gaG9sZCBvcGVuCmFzIG1hbnkgYXMgc2V2ZXJh bCBkb3plbiBiYXRjaGVzIHdpdGggY2VydGFpbiB3b3JrbG9hZHMgKHdvcmtsb2FkcyB3aGVyZQp0 aGUgc3RyZWFtIHBvc2l0aW9uIGhhcyB0byBnZXQgcXVpdGUgZmFyIGFoZWFkIG9mIHRoZSByZWFk IHBvc2l0aW9uIGluCm9yZGVyIHRvIG1haW50YWluIHRoZSBhcHByb3ByaWF0ZSBwcmVmZXRjaCBk aXN0YW5jZSBvbiB0aGUgaGVhcGFtIHNpZGUpLgpHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNo ZXMgd29uJ3QgaG9sZCBidWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyAoYXQKbGVhc3QgZHVyaW5n IHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFuIE1WQ0Mgc25hcHNob3QsIHBlciB0aGUgcnVs ZXMKZXN0YWJsaXNoZWQgYnkgY29tbWl0IDJlZDViODdmKSBpcyBsaWtlbHkgdG8gbWFrZSBsaWZl IGVhc2llciB3aGVuIHRoZQpyZXNvdXJjZSBtYW5hZ2VtZW50IHJ1bGVzIGZvciBJL08gcHJlZmV0 Y2hpbmcgYXJlIGZ1bGx5IGlyb25lZC1vdXQuCgpOb3RlIHRoYXQgdGhlIGNvZGUgcGF0aCBpbiBf aGFzaF9raWxsX2l0ZW1zIHRoYXQgY2FsbHMgX2hhc2hfZ2V0YnVmCih0aG91Z2ggb25seSB3aXRo IHRoZSBMSF9PVkVSRkxPV19QQUdFIGZsYWcvb3ZlcmZsb3cgcGFnZXMpIGlzIGRlYWQKY29kZS92 ZXN0aWdpYWwgb24gbWFzdGVyIFsxXS4gIEhvd2V2ZXIsIGl0J3Mgbm93IHVzZWZ1bCBhZ2Fpbiwg c2luY2UKX2hhc2hfa2lsbF9pdGVtcyBtaWdodCBub3cgbmVlZCB0byByZWxvY2sgYW5kIHJlcGlu IGFuIG92ZXJmbG93IHBhZ2UKKG5vdCBqdXN0IHJlbG9jayBpdCkgZHVyaW5nIGRyb3BQaW4gc2Nh bnMuCgpBbHNvIGFkZCBWYWxncmluZCBidWZmZXIgbG9jayBpbnN0cnVtZW50YXRpb24gdG8gaGFz aCwgYnJpbmdpbmcgaXQgaW4KbGluZSB3aXRoIG5idHJlZSBmb2xsb3dpbmcgY29tbWl0IDRhNzBm ODI5LiAgVGhpcyBpcyBhIHJlcXVpcmVtZW50IGZvcgphbnkgaW5kZXggQU0gdGhhdCB1c2VzIHRo ZSBuZXcgYW1nZXRiYXRjaCBpbnRlcmZhY2UuCgpbMV0gaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgy LVd6PThtZWZ5OFFVY3NuS0xUZVB1eTR0RThwZE8rZ1NSUTl5UXdVSG9hZUZURndAbWFpbC5nbWFp bC5jb20KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVErMGpT RU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oYXNo LmggICAgICAgICAgICB8ICA3MyArLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMgICAgICAgfCAxMjMgKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo cGFnZS5jICAgfCAgMjYgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMg fCAyODcgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNodXRpbC5jICAgfCAgOTggKysrKy0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgfCAgIDIgLQogNiBmaWxlcyBjaGFuZ2VkLCAyNDUgaW5zZXJ0aW9ucygrKSwg MzY0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCmluZGV4IDgzOWMzNDMxMi4uMDNmOGJjOWIzIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oYXNoLmgKQEAgLTEwMCw1OCArMTAwLDYgQEAgdHlwZWRlZiBIYXNoUGFnZU9wYXF1ZURh dGEgKkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4RkY4MAog Ci10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91 dCBlYWNoIG1hdGNoICovCi17Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiBy ZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5k ZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsKLQot dHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7CQkJLyogaWYg dmFsaWQsIHRoZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkv KiBjdXJyZW50IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyog bmV4dCBvdmVyZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2IG92 ZXJmbG93IG9yIGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBh bHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9m ZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwg dGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xv dCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFs aWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBp cyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxl ci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVt c1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10g Ki8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQot CUhhc2hTY2FuUG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNUIEJF IExBU1QgKi8KLX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQaW5u ZWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2Fu cG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwg XAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hTY2Fu UG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFs aWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3Mp LmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQot Ci0jZGVmaW5lIEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShz Y2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IElu dmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tO dW1iZXI7IFwKLQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0J CShzY2FucG9zKS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7IFwK LQkJKHNjYW5wb3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQotCiAvKgogICoJSGFz aFNjYW5PcGFxdWVEYXRhIGlzIHByaXZhdGUgc3RhdGUgZm9yIGEgaGFzaCBpbmRleCBzY2FuLgog ICovCkBAIC0xNzgsMTUgKzEyNiw2IEBAIHR5cGVkZWYgc3RydWN0IEhhc2hTY2FuT3BhcXVlRGF0 YQogCSAqIHJlZmVycmVkIG9ubHkgd2hlbiBoYXNoc29fYnVjX3BvcHVsYXRlZCBpcyB0cnVlLgog CSAqLwogCWJvb2wJCWhhc2hzb19idWNfc3BsaXQ7Ci0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRl bXMgaWYgYW55IChraWxsZWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkg ICAqa2lsbGVkSXRlbXM7CS8qIGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMg Ki8KLQlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVt cyAqLwotCi0JLyoKLQkgKiBJZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIGEgcGFn ZSBhbmQgc2F2ZSB0aGVtIGluCi0JICogSGFzaFNjYW5Qb3NEYXRhCi0JICovCi0JSGFzaFNjYW5Q b3NEYXRhIGN1cnJQb3M7CS8qIGN1cnJlbnQgcG9zaXRpb24gZGF0YSAqLwogfSBIYXNoU2Nhbk9w YXF1ZURhdGE7CiAKIHR5cGVkZWYgSGFzaFNjYW5PcGFxdWVEYXRhICpIYXNoU2Nhbk9wYXF1ZTsK QEAgLTM2OCwxMSArMzA3LDE0IEBAIGV4dGVybiBib29sIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVs LCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAJCQkJCSAgIEluZGV4VW5pcXVlQ2hlY2sg Y2hlY2tVbmlxdWUsCiAJCQkJCSAgIGJvb2wgaW5kZXhVbmNoYW5nZWQsCiAJCQkJCSAgIHN0cnVj dCBJbmRleEluZm8gKmluZGV4SW5mbyk7Ci1leHRlcm4gYm9vbCBoYXNoZ2V0dHVwbGUoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4g aGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJICAgQmF0Y2hJbmRleFNj YW4gcHJpb3JiYXRjaCwKKwkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGlu dDY0IGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBl eHRlcm4gSW5kZXhTY2FuRGVzYyBoYXNoYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSAgIFNjYW5LZXkgb3Jk ZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgaGFzaGZyZWViYXRjaChJbmRleFNj YW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIGV4dGVybiB2b2lkIGhhc2hlbmRz Y2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpo YXNoYnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCiAJCQkJCQkJCQkJCSBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKnN0YXRzLApAQCAtNDQ1LDggKzM4Nyw5IEBAIGV4dGVybiB2b2lkIF9o YXNoX2ZpbmlzaF9zcGxpdChSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmLCBCdWZmZXIgb2J1 ZiwKIAkJCQkJCQkgICB1aW50MzIgbG93bWFzayk7CiAKIC8qIGhhc2hzZWFyY2guYyAqLwotZXh0 ZXJuIGJvb2wgX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KTsKLWV4dGVybiBib29sIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOworZXh0ZXJuIEJhdGNoSW5kZXhTY2FuIF9oYXNoX25leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJIEJhdGNoSW5kZXhTY2FuIHByaW9y YmF0Y2gpOworZXh0ZXJuIEJhdGNoSW5kZXhTY2FuIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogCiAvKiBoYXNoc29ydC5jICovCiB0eXBlZGVmIHN0 cnVjdCBIU3Bvb2wgSFNwb29sOwkvKiBvcGFxdWUgc3RydWN0IGluIGhhc2hzb3J0LmMgKi8KQEAg LTQ3Niw3ICs0MTksNyBAQCBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZ2V0X29sZGJsb2NrX2Zy b21fbmV3YnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG5ld19idQogZXh0ZXJuIEJsb2NrTnVt YmVyIF9oYXNoX2dldF9uZXdibG9ja19mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tl dCBvbGRfYnVja2V0KTsKIGV4dGVybiBCdWNrZXQgX2hhc2hfZ2V0X25ld2J1Y2tldF9mcm9tX29s ZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVja2V0LAogCQkJCQkJCQkJCQkJIHVp bnQzMiBsb3dtYXNrLCB1aW50MzIgbWF4YnVja2V0KTsKLWV4dGVybiB2b2lkIF9oYXNoX2tpbGxf aXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIF9oYXNoX2tpbGxfaXRlbXMo SW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CiAKIC8qIGhhc2guYyAq LwogZXh0ZXJuIHZvaWQgaGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3Vy X2J1Y2tldCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwppbmRleCA3Mjg5ZGY1NzQuLjEwZTZiYTNmMCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAtMTAxLDkgKzEwMSw5IEBAIGhhc2hoYW5kbGVyKFBH X0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWFkanVzdG1lbWJlcnMgPSBoYXNoYWRqdXN0 bWVtYmVyczsKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbjsKIAlhbXJv dXRpbmUtPmFtcmVzY2FuID0gaGFzaHJlc2NhbjsKLQlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBo YXNoZ2V0dHVwbGU7Ci0JYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKLQlhbXJvdXRpbmUt PmFtZnJlZWJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBOVUxMOworCWFt cm91dGluZS0+YW1nZXRiYXRjaCA9IGhhc2hnZXRiYXRjaDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJh dGNoID0gaGFzaGZyZWViYXRjaDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gaGFzaGdldGJp dG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuOwogCWFtcm91dGluZS0+ YW1wb3NyZXNldCA9IE5VTEw7CkBAIC0yODUsNTMgKzI4NSwyMiBAQCBoYXNoaW5zZXJ0KFJlbGF0 aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0gKgloYXNoZ2V0 dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKgloYXNoZ2V0YmF0 Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2Fu CiAgKi8KLWJvb2wKLWhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQorQmF0Y2hJbmRleFNjYW4KK2hhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewotCUhhc2hT Y2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVz OwotCiAJLyogSGFzaCBpbmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25s eSB0aGUgaGFzaCBjb2RlICovCiAJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAKLQkvKgotCSAq IElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZh bmNlIGl0IGluIHRoZQotCSAqIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3Qg ZG9uZSBzbyB5ZXQsIHdlIGNhbGwgYSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBmaXJzdCBpdGVt IGluIHRoZSBzY2FuLgotCSAqLwotCWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSkKLQkJcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYgKHByaW9yYmF0 Y2ggPT0gTlVMTCkKIAl7Ci0JCS8qCi0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2ls bCB0aGUgcHJldmlvdXNseS1mZXRjaGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNjYW4tPmtpbGxf cHJpb3JfdHVwbGUpCi0JCXsKLQkJCS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVyIGl0IGZvciBs YXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0IG9uY2Ugcmln aHQgYWZ0ZXIgbGVhdmluZyB0aGUgaW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nhbi4pCi0JCQkg KiBJbiBjYXNlIGlmIGNhbGxlciByZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVjdGlvbiBpdCBp cyBxdWl0ZQotCQkJICogcG9zc2libGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRl cmVkIG11bHRpcGxlIHRpbWVzLgotCQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3QgdGhhdDsgaW5z dGVhZCwgd2UganVzdCBmb3JnZXQgYW55IGV4Y2VzcwotCQkJICogZW50cmllcy4KLQkJCSAqLwot CQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBh bGxvY19hcnJheShpbnQsIE1heEluZGV4VHVwbGVzUGVyUGFnZSk7Ci0KLQkJCWlmIChzby0+bnVt S2lsbGVkIDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQotCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+ bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQl9Ci0KLQkJLyoKLQkJICog Tm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkgKi8KLQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBk aXIpOworCQkvKiBJbml0aWFsaXplIHRoZSBzY2FuLCBhbmQgcmV0dXJuIGZpcnN0IGJhdGNoIG9m IG1hdGNoaW5nIGl0ZW1zICovCisJCXJldHVybiBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwogCX0K IAotCXJldHVybiByZXM7CisJLyogUmV0dXJuIGJhdGNoIHBvc2l0aW9uZWQgYWZ0ZXIgY2FsbGVy J3MgYmF0Y2ggKGluIGRpcmVjdGlvbiAnZGlyJykgKi8KKwlyZXR1cm4gX2hhc2hfbmV4dChzY2Fu LCBkaXIsIHByaW9yYmF0Y2gpOwogfQogCiAKQEAgLTM0MSwyNiArMzEwLDIzIEBAIGhhc2hnZXR0 dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogaW50NjQKIGhhc2hn ZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIHsKLQlIYXNoU2Nh bk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsK KwlCYXRjaEluZGV4U2NhbiBiYXRjaDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwotCUhhc2hTY2FuUG9z SXRlbSAqY3Vyckl0ZW07CisJaW50CQkJaXRlbUluZGV4OwogCi0JcmVzID0gX2hhc2hfZmlyc3Qo c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCWJhdGNoID0gX2hhc2hfZmlyc3Qoc2Nhbiwg Rm9yd2FyZFNjYW5EaXJlY3Rpb24pOwogCi0Jd2hpbGUgKHJlcykKKwl3aGlsZSAoYmF0Y2ggIT0g TlVMTCkKIAl7Ci0JCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0 ZW1JbmRleF07CisJCWZvciAoaXRlbUluZGV4ID0gYmF0Y2gtPmZpcnN0SXRlbTsKKwkJCSBpdGVt SW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtOworCQkJIGl0ZW1JbmRleCsrKQorCQl7CisJCQl0Ym1f YWRkX3R1cGxlcyh0Ym0sICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlkLCAxLCB0cnVl KTsKKwkJCW50aWRzKys7CisJCX0KIAotCQkvKgotCQkgKiBfaGFzaF9maXJzdCBhbmQgX2hhc2hf bmV4dCBoYW5kbGUgZWxpbWluYXRlIGRlYWQgaW5kZXggZW50cmllcwotCQkgKiB3aGVuZXZlciBz Y2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlcyBpcyB0cnVlLiAgVGhlcmVmb3JlLCB0aGVyZSdzCi0J CSAqIG5vdGhpbmcgdG8gZG8gaGVyZSBleGNlcHQgYWRkIHRoZSByZXN1bHRzIHRvIHRoZSBUSURC aXRtYXAuCi0JCSAqLwotCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sICYoY3Vyckl0ZW0tPmhlYXBUaWQp LCAxLCB0cnVlKTsKLQkJbnRpZHMrKzsKLQotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uKTsKKwkJYmF0Y2ggPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBiYXRjaCk7CiAJfQogCiAJcmV0dXJuIG50aWRzOwpAQCAtMzgyLDE3ICszNDgs MTQgQEAgaGFzaGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5 cykKIAlzY2FuID0gUmVsYXRpb25HZXRJbmRleFNjYW4ocmVsLCBua2V5cywgbm9yZGVyYnlzKTsK IAogCXNvID0gKEhhc2hTY2FuT3BhcXVlKSBwYWxsb2Nfb2JqZWN0KEhhc2hTY2FuT3BhcXVlRGF0 YSk7Ci0JSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAlzby0+aGFzaHNvX2J1 Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9 IEludmFsaWRCdWZmZXI7CiAKIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlz by0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsK LQlzby0+bnVtS2lsbGVkID0gMDsKLQogCXNjYW4tPm9wYXF1ZSA9IHNvOworCXNjYW4tPm1heGl0 ZW1zYmF0Y2ggPSBNYXhJbmRleFR1cGxlc1BlclBhZ2U7CiAKIAlyZXR1cm4gc2NhbjsKIH0KQEAg LTQwNywxOCArMzcwLDggQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkg c2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247 CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9y ZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJ aWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0K IAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCS8qIHNldCBwb3NpdGlvbiBpbnZhbGlk ICh0aGlzIHdpbGwgY2F1c2UgX2hhc2hfZmlyc3QgY2FsbCkgKi8KLQlIYXNoU2NhblBvc0ludmFs aWRhdGUoc28tPmN1cnJQb3MpOwotCiAJLyogVXBkYXRlIHNjYW4ga2V5LCBpZiBhIG5ldyBvbmUg aXMgZ2l2ZW4gKi8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQlt ZW1jcHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9m KFNjYW5LZXlEYXRhKSk7CkBAIC00MjcsNiArMzgwLDI1IEBAIGhhc2hyZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJc28tPmhhc2hzb19i dWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2hmcmVlYmF0Y2goKSAtLSBGcmVlIGJh dGNoIHJlc291cmNlcywgaW5jbHVkaW5nIGl0cyBidWZmZXIgcGluCisgKi8KK3ZvaWQKK2hhc2hm cmVlYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwlp ZiAoYmF0Y2gtPm51bUtpbGxlZCA+IDApCisJCV9oYXNoX2tpbGxfaXRlbXMoc2NhbiwgYmF0Y2gp OworCisJaWYgKCFzY2FuLT5kcm9wUGluKQorCXsKKwkJLyogaW5kZXhhbV91dGlsX2JhdGNoX3Vu bG9jayBkaWRuJ3QgdW5waW4gcGFnZSBlYXJsaWVyLCBkbyBpdCBub3cgKi8KKwkJUmVsZWFzZUJ1 ZmZlcihiYXRjaC0+YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJ aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworfQorCiAvKgogICoJaGFz aGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2NhbgogICovCkBAIC00MzYsMTcgKzQwOCw4IEBA IGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChI YXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0J CS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRl bXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2Fu KTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKIAotCWlmIChzby0+a2lsbGVk SXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0ZW1zKTsKIAlwZnJlZShzbyk7CiAJ c2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4 IGI4ZTViZDAwNS4uZWNkM2JmMWUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAg LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRl ICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiBzdGF0aWMgYm9v bCBfaGFzaF9hbGxvY19idWNrZXRzKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZmlyc3RibG9j aywKQEAgLTc5LDYgKzgwLDkgQEAgX2hhc2hfZ2V0YnVmKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1i ZXIgYmxrbm8sIGludCBhY2Nlc3MsIGludCBmbGFncykKIAlpZiAoYWNjZXNzICE9IEhBU0hfTk9M T0NLKQogCQlMb2NrQnVmZmVyKGJ1ZiwgYWNjZXNzKTsKIAorCWlmICghUmVsYXRpb25Vc2VzTG9j YWxCdWZmZXJzKHJlbCkpCisJCVZBTEdSSU5EX01BS0VfTUVNX0RFRklORUQoQnVmZmVyR2V0UGFn ZShidWYpLCBCTENLU1opOworCiAJLyogcmVmIGNvdW50IGFuZCBsb2NrIHR5cGUgYXJlIGNvcnJl Y3QgKi8KIAogCV9oYXNoX2NoZWNrcGFnZShyZWwsIGJ1ZiwgZmxhZ3MpOwpAQCAtMTA4LDYgKzEx Miw5IEBAIF9oYXNoX2dldGJ1Zl93aXRoX2NvbmRsb2NrX2NsZWFudXAoUmVsYXRpb24gcmVsLCBC bG9ja051bWJlciBibGtubywgaW50IGZsYWdzKQogCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAl9 CiAKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhyZWwpKQorCQlWQUxHUklORF9NQUtF X01FTV9ERUZJTkVEKEJ1ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKwogCS8qIHJlZiBjb3Vu dCBhbmQgbG9jayB0eXBlIGFyZSBjb3JyZWN0ICovCiAKIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBi dWYsIGZsYWdzKTsKQEAgLTI4MCwzMSArMjg3LDI0IEBAIF9oYXNoX2Ryb3BidWYoUmVsYXRpb24g cmVsLCBCdWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxl YXNlIGJ1ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxl YXNlIGJ1ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRo ZSBidWZmZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UKLSAqIGhvbGQgbm8gbG9jay4K KyAqIFRoaXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9yIHRoZSBwcmltYXJ5IGJ1Y2tl dCBwYWdlIGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBhIGJ1Y2tldCBiZWluZyBzcGxp dCBhcyBuZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2FuYnVmKFJlbGF0aW9uIHJlbCwg SGFzaFNjYW5PcGFxdWUgc28pCiB7CiAJLyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5 IGJ1Y2tldCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19idWNrZXRfYnVm KSAmJgotCQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1cnJQb3MuYnVmKQorCWlmIChC dWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVs LCBzby0+aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFs aWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0IHBh Z2UgIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNo c29fc3BsaXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmICE9 IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0 IHBhZ2Ugb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhh c2hzb19zcGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNoc29f c3BsaXRfYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxp ZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xkICovCi0JaWYgKEJ1 ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5j dXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQogCS8qIHJl c2V0IHNwbGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlz by0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJj aC5jCmluZGV4IDkyYzE1YTY1Yi4uYTlmYTgzOWNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHNlYXJjaC5jCkBAIC0yMiwxMDQgKzIyLDc0IEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAK IHN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpi dWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworCQkJCQkJICAgU2NhbkRpcmVjdGlv biBkaXIsIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9xdWFs aWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkgICBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5lIHZv aWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJCQkJ CQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkJ CSAgIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZl aXRlbShCYXRjaEluZGV4U2NhbiBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hfcmVh ZG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdlICpw YWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgpIC0t IEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhl IG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1 cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBpbm5l ZCBidXQgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzCi0g KgkJd2hpY2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJp b3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisgKgkJ YWxyZWFkeSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54c19o ZWFwdGlkIGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4gIHNv LT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwg cmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5leHQg cGFnZS4gIE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUg bm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2Ug cmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0 dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlucyBv ciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMgYWNj b3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1faGFz aF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitCYXRjaEluZGV4 U2NhbgorX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBC YXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOwogCUJsb2NrTnVtYmVyIGJsa25vOwog CUJ1ZmZlcgkJYnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJQmF0Y2hJbmRleFNj YW4gYmF0Y2g7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1 cnJlbnQgcGFnZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5l eHQgb3IgcHJldmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQot CSAqIG1vdmluZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdl IGRlYWwgd2l0aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIERldGVybWluZSB3aGlj aCBwYWdlIHRvIHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0YWlscwor CSAqIHRha2VuIGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyKSkKIAl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5j dXJyUG9zLmxhc3RJdGVtKQorCQlibGtubyA9IHByaW9yYmF0Y2gtPm5leHRQYWdlOworCQlpZiAo IUJsb2NrTnVtYmVySXNWYWxpZChibGtubykgfHwgIXByaW9yYmF0Y2gtPm1vcmVSaWdodCkKIAkJ ewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7 Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJ c1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywg SEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNj YW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UK LQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7CisJCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsK KwkJCXJldHVybiBOVUxMOwogCQl9CiAJfQogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJyUG9z Lml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKKwkJYmxrbm8gPSBwcmlvcmJhdGNo LT5wcmV2UGFnZTsKKwkJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pIHx8ICFwcmlvcmJh dGNoLT5tb3JlTGVmdCkKIAkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNo X2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0J CQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9n ZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8 IExIX09WRVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdheXMgbWFpbnRhaW4g dGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAqIG9wZXJhdGlvbiwg c28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkCi0JCQkJICog aGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAot CQkJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCQlfaGFzaF9kcm9w YnVmKHJlbCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGly KSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9z Y2FuID0gdHJ1ZTsKKwkJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOworCQkJcmV0dXJuIE5V TEw7CiAJCX0KIAl9CiAKLQlpZiAoZW5kX29mX3NjYW4pCisJLyogQWxsb2NhdGUgc3BhY2UgZm9y IG5leHQgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsK KworCS8qIEdldCB0aGUgYnVmZmVyIGZvciBuZXh0IGJhdGNoICovCisJYnVmID0gX2hhc2hfZ2V0 YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7CisKKwkvKiBSZWFk IHRoZSBuZXh0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlp ZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpciwgYmF0Y2gpKQogCXsKLQkJX2hhc2hf ZHJvcHNjYW5idWYocmVsLCBzbyk7Ci0JCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBv cyk7Ci0JCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2Nhbiwg YmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hh dCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBv cy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQot CXJldHVybiB0cnVlOworCS8qIFJldHVybiB0aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0 ZW1zIGZyb20gbmV4dCBwYWdlICovCisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjY5LDIy ICsyMzksMjEgQEAgX2hhc2hfcmVhZHByZXYoSW5kZXhTY2FuRGVzYyBzY2FuLAogfQogCiAvKgot ICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9o YXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgog ICoKLSAqCQlXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhl IGxhc3QgaXRlbSkgaW4gdGhlCi0gKgkJaW5kZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmlj YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzY2FuCi0gKgkJZGVzY3JpcHRvci4KKyAqCQlXZSBm aW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBs YXN0CisgKgkJYmF0Y2gpIGluIHRoZSBpbmRleCB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNh dGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqCQl0aGUgc2NhbiBkZXNjcmlwdG9yLgogICoKLSAqCQlP biBzdWNjZXNzZnVsIGV4aXQsIGlmIHRoZSBwYWdlIGNvbnRhaW5pbmcgY3VycmVudCBpbmRleCB0 dXBsZSBpcyBhbgotICoJCW92ZXJmbG93IHBhZ2UsIGJvdGggcGluIGFuZCBsb2NrIGFyZSByZWxl YXNlZCB3aGVyZWFzIGlmIGl0IGlzIGEgYnVja2V0Ci0gKgkJcGFnZSB0aGVuIGl0IGlzIHBpbm5l ZCBidXQgbm90IGxvY2tlZCBhbmQgZGF0YSBhYm91dCB0aGUgbWF0Y2hpbmcKLSAqCQl0dXBsZShz KSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2FkZWQgaW50byBzby0+Y3VyclBvcywKLSAqCQlzY2Fu LT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgaGVhcCBUSUQgb2YgdGhlIGN1cnJlbnQgdHVwbGUu CisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0Y2ggY29udGFpbmluZyBtYXRj aGluZyBpdGVtcy4KKyAqCQlPdGhlcndpc2UgcmV0dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQg dGhlcmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcy4KKyAqCQlObyBsb2NrcyBhcmUgZXZlciBoZWxk IHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVz KSwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIHBpbiBoZWxkIG9uCi0gKgkJYnVja2V0IHBhZ2UgYnV0 IG5vIHBpbnMgb3IgbG9ja3MgaGVsZCBvbiBvdmVyZmxvdyBwYWdlLgorICoJCVdlIGFsd2F5cyBy ZXRhaW4gb3VyIG93biBwaW4gb24gdGhlIGJ1Y2tldCBwYWdlLiAgV2hlbiB3ZSByZXR1cm4gYQor ICoJCWJhdGNoIHdpdGggYSBidWNrZXQgcGFnZSwgaXQgd2lsbCByZXRhaW4gaXRzIG93biByZWZl cmVuY2UgcGluIGlmZgorICoJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlIGRldGVybWluZWQg dGhhdCB0YWJsZSBBTSByZXF1aXJlcyBvbmUuCiAgKi8KLWJvb2wKK0JhdGNoSW5kZXhTY2FuCiBf aGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJl bGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC0yOTUsNyArMjY0LDcgQEAgX2hh c2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlCdWZmZXIJ CWJ1ZjsKIAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKLQlIYXNoU2NhblBv c0l0ZW0gKmN1cnJJdGVtOworCUJhdGNoSW5kZXhTY2FuIGJhdGNoOwogCiAJcGdzdGF0X2NvdW50 X2luZGV4X3NjYW4ocmVsKTsKIAlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKQEAgLTMyNSw3ICsyOTQs NyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CSAqIGl0ZW1zIGluIHRoZSBpbmRleC4KIAkgKi8KIAlpZiAoY3VyLT5za19mbGFncyAmIFNLX0lT TlVMTCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogT2theSB0 byBjb21wdXRlIHRoZSBoYXNoIGtleS4gIFdlIHdhbnQgdG8gZG8gdGhpcyBiZWZvcmUgYWNxdWly aW5nIGFueQpAQCAtNDE4LDM0ICszODcsMzMgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZw YWdlLCAmb3BhcXVlKTsKIAl9CiAKLQkvKiByZW1lbWJlciB3aGljaCBidWZmZXIgd2UgaGF2ZSBw aW5uZWQsIGlmIGFueSAqLwotCUFzc2VydChCdWZmZXJJc0ludmFsaWQoc28tPmN1cnJQb3MuYnVm KSk7Ci0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBmaXJz dCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOwogCi0J LyogTm93IGZpbmQgYWxsIHRoZSB0dXBsZXMgc2F0aXNmeWluZyB0aGUgcXVhbGlmaWNhdGlvbiBm cm9tIGEgcGFnZSAqLwotCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGlyKSkKLQkJ cmV0dXJuIGZhbHNlOworCS8qIFJlYWQgdGhlIGZpcnN0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50 byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRp ciwgYmF0Y2gpKQorCXsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gp OworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byBy ZXR1cm4gKi8KLQljdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVt SW5kZXhdOwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCS8qIGlm IHdlJ3JlIGhlcmUsIF9oYXNoX3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVwbGVzICovCi0JcmV0 dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMg Ki8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQg ZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfaGFzaF9y ZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGJhdGNo CiAgKgogICoJV2Ugc2NhbiBhbGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGluZGV4IHBhZ2Ug YW5kIHNhdmUgdGhlbSBpbnRvCi0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRpc2ZpZXMgdGhlIHF1 YWxpZmljYXRpb24uIElmIG5vIG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0Y2ggaWYgdGhleSBz YXRpc2Z5IHRoZSBxdWFsaWZpY2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwogICoJYXJlIGZv dW5kIGluIHRoZSBjdXJyZW50IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMg cGFnZQogICoJaW4gYSBidWNrZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaXJlY3Rpb24u CiAgKgogICoJUmV0dXJuIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFyZSBmb3VuZCBlbHNl IHJldHVybiBmYWxzZS4KICAqLwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKK19oYXNoX3JlYWRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCSAgIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmlu ZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKQEAgLTQ2MSw4ICs0MjksOCBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKIAotCXNvLT5j dXJyUG9zLmJ1ZiA9IGJ1ZjsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGJ1Zik7CisJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwliYXRjaC0+Y3VyclBhZ2UgPSBCdWZm ZXJHZXRCbG9ja051bWJlcihidWYpOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSkKIAl7CkBAIC00NzMsMjUgKzQ0MSwyMSBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQkvKiBuZXcgcGFnZSwg bG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9 IF9oYXNoX2JpbnNlYXJjaChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5k ZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7 CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBv ZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAh PSAwKQogCQkJCWJyZWFrOwogCiAJCQkvKgogCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNo aW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUgbmV4dCBw YWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55Ci0JCQkg KiBraWxsZWQgaXRlbXMuCi0JCQkgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlf aGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQkvKgorCQkJICogdGhlIG5leHQgcGFnZS4KKwkJ CSAqCiAJCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBidWNrZXQgcGFnZSwgaGFzaG9fcHJldmJs a25vIGlzIG5vdCBhIHJlYWwKIAkJCSAqIGJsb2NrIG51bWJlci4KIAkJCSAqLwotCQkJaWYgKHNv LT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3VyclBv cy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJaWYgKGJhdGNoLT5idWYg PT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQkJYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNv X3NwbGl0X2J1Y2tldF9idWYpCiAJCQkJcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsK IAkJCWVsc2UKIAkJCQlwcmV2X2Jsa25vID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87CkBAIC00 OTksMjkgKzQ2MywyNSBAQCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZl ciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVm LCAmcGFnZSwgJm9wYXF1ZSk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQogCQkJewotCQkJ CXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZl ckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+ Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQkJfQogCQkJZWxzZQogCQkJ ewogCQkJCS8qCiAJCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVy cyBmb3Igc2Nyb2xsYWJsZQogCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRp b24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNo aW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdl IG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJl IGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1 cm5zLgorCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJl IGZvdW5kCiAJCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBwcmV2X2Jsa25vOwot CQkJCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5j dXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+cHJldlBhZ2UgPSBwcmV2X2Jsa25vOworCQkJ CWJhdGNoLT5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJCQliYXRjaC0+YnVmID0g SW52YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KIAotCQlzby0+Y3Vy clBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAt IDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNoLT5maXJzdEl0ZW0gPSAw OworCQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewpAQCAt NTMyLDc3ICs0OTIsOTEgQEAgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZm ZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBzdGFy dGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9iaW5z ZWFyY2hfbGFzdChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBf aGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlp dGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0s IGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSBNYXhJ bmRleFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7CiAKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3Qg ZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJ CSAqIHRoZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBk ZWFsIHdpdGgKLQkJCSAqIGFueSBraWxsZWQgaXRlbXMuCisJCQkgKiB0aGUgcHJldmlvdXMgcGFn ZQogCQkJICovCi0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVt cyhzY2FuKTsKLQotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9i dWYgfHwKLQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVm KQorCQkJaWYgKGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCQkJYmF0 Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCiAJCQkJbmV4dF9ibGtubyA9 IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCiAJCQlfaGFzaF9yZWFkcHJldihzY2FuLCAmYnVm LCAmcGFnZSwgJm9wYXF1ZSk7CiAJCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQogCQkJewotCQkJ CXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZl ckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+ Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQkJfQogCQkJZWxzZQogCQkJ ewogCQkJCS8qCiAJCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVy cyBmb3Igc2Nyb2xsYWJsZQogCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRp b24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNo aW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdl IG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJl IGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1 cm5zLgorCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJl IGZvdW5kCiAJCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tO dW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBuZXh0X2Jsa25vOwotCQkJCXNvLT5j dXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CisJCQkJYmF0Y2gtPm5leHRQYWdlID0gbmV4dF9ibGtubzsKKwkJCQliYXRjaC0+YnVmID0g SW52YWxpZEJ1ZmZlcjsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCX0KIAotCQlzby0+Y3Vy clBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4 SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4SW5k ZXhUdXBsZXNQZXJQYWdlIC0gMTsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJ YmF0Y2gtPmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKIAl9CiAKLQlpZiAo c28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQlzby0+Y3VyclBv cy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCS8qIFNhdmVkIGF0IGxlYXN0 IG9uZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLCBzbyBwcmVwYXJlIHRvIHJldHVybiBpdCAqLwor CWlmIChiYXRjaC0+YnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQliYXRjaC0+YnVm ID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQ YWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1 ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVS X0xPQ0tfVU5MT0NLKTsKKwkJLyoKKwkJICogQmF0Y2gncyBidWZmZXIgaXMgZWl0aGVyIHRoZSBw cmltYXJ5IGJ1Y2tldCwgb3IgYSBidWNrZXQgYmVpbmcKKwkJICogcG9wdWxhdGVkIGR1ZSB0byBh IHNwbGl0CisJCSAqLworCQliYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJ CWJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOworCQliYXRjaC0+bW9y ZUxlZnQgPSAoU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSAmJgorCQkJCQkJICAgQmxvY2tO dW1iZXJJc1ZhbGlkKGJhdGNoLT5wcmV2UGFnZSkpOworCQliYXRjaC0+bW9yZVJpZ2h0ID0gKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSAmJgorCQkJCQkJCUJsb2NrTnVtYmVySXNWYWxpZChi YXRjaC0+bmV4dFBhZ2UpKTsKKworCQkvKgorCQkgKiBJbmNyZW1lbnQgbG9jYWwgcmVmZXJlbmNl IGNvdW50IHNvIHRoYXQgYmF0Y2ggZ2V0cyBhbiBpbmRlcGVuZGVudAorCQkgKiBidWZmZXIgcmVm ZXJlbmNlIHRoYXQgY2FuIGJlIHJlbGVhc2VkIChieSBoYXNoZnJlZWJhdGNoKSBiZWZvcmUgdGhl CisJCSAqIGhhc2hzb19idWNrZXRfYnVmL2hhc2hzb19zcGxpdF9idWNrZXRfYnVmIHJlZmVyZW5j ZXMgYXJlIHJlbGVhc2VkCisJCSAqLworCQlJbmNyQnVmZmVyUmVmQ291bnQoYmF0Y2gtPmJ1Zik7 CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19w cmV2Ymxrbm87Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxr bm87Ci0JCV9oYXNoX3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNvLT5jdXJyUG9z LmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCWJhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9f cHJldmJsa25vOworCQliYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsK KwkJYmF0Y2gtPm1vcmVMZWZ0ID0gKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikgJiYKKwkJ CQkJCSAgIEJsb2NrTnVtYmVySXNWYWxpZChiYXRjaC0+cHJldlBhZ2UpKTsKKwkJYmF0Y2gtPm1v cmVSaWdodCA9IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgJiYKKwkJCQkJCQlCbG9ja051 bWJlcklzVmFsaWQoYmF0Y2gtPm5leHRQYWdlKSk7CiAJfQogCi0JQXNzZXJ0KHNvLT5jdXJyUG9z LmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJLyogVW5sb2NrIChhbmQgbGlr ZWx5IHVucGluKSBidWZmZXIsIHBlciBhbWdldGJhdGNoIGNvbnRyYWN0ICovCisJaW5kZXhhbV91 dGlsX2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCk7CisKKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRl bSA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogTG9hZCBh bGwgdGhlIHF1YWxpZmllZCBpdGVtcyBmcm9tIGEgY3VycmVudCBpbmRleCBwYWdlCi0gKiBpbnRv IHNvLT5jdXJyUG9zLiBIZWxwZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgorICogaW50 byBiYXRjaC4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KICAqLwogc3RhdGlj IGludAogX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdl IHBhZ2UsCi0JCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikK KwkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJ ICAgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7CkBAIC02MzksNyArNjEz LDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdl IHBhZ2UsCiAJCQkJX2hhc2hfY2hlY2txdWFsKHNjYW4sIGl0dXApKQogCQkJewogCQkJCS8qIHR1 cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRlbShz bywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNoLCBp dGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7CiAJCQl9CiAJCQllbHNl CkBAIC02ODYsNyArNjYwLDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4LS07CiAJCQkJLyogdHVw bGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0 ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcwNSwxMyAr Njc5LDE0IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbiwg UGFnZSBwYWdlLAogCX0KIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQ b3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gYmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2hhc2hfc2F2ZWl0ZW0o SGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitfaGFzaF9zYXZlaXRlbShCYXRjaElu ZGV4U2NhbiBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNldE51bWJlciBvZmZudW0s IEluZGV4VHVwbGUgaXR1cCkKIHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5j dXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0g JmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50 X3RpZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJY3Vyckl0ZW0tPnR1cGxl T2Zmc2V0ID0gMDsJLyogSGFzaCBkb2Vzbid0IHN1cHBvcnQgaW5kZXgtb25seSBzY2FucyAqLwog fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXggZjQxMjMzZmNkLi44MGY5YTM5NmMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAtNTEwLDgxICs1MTAsODQgQEAgX2hh c2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRf YnVja2V0LAogICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVt cyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwogICogdG9sZCB1cyB3ZXJlIGtpbGxlZC4KICAqCi0g KiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBp bmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0 aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+ bnVtS2lsbGVkID4gMCkuCisgKiBUaGUgYmF0Y2ggcGFyYW1ldGVyIGNvbnRhaW5zIGluZm9ybWF0 aW9uIGFib3V0IHRoZSBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZAorICogdHVwbGVzIHRoZXJlb24g KHRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGJhdGNoLT5udW1LaWxsZWQgPiAwKS4KICAq Ci0gKiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBwYWdlIGFuZCBtYXkg b3IgbWF5IG5vdCBoYXZlIHRoZQotICogcGFnZSBwaW5uZWQgaW4gYSBidWZmZXIuICBOb3RlIHRo YXQgcmVhZC1sb2NrIGlzIHN1ZmZpY2llbnQgZm9yIHNldHRpbmcKLSAqIExQX0RFQUQgc3RhdHVz ICh3aGljaCBpcyBvbmx5IGEgaGludCkuCisgKiBDYWxsZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9j ayBvbiB0aGUgYmF0Y2ggcG9zaXRpb24ncyBwYWdlLCBidXQgbXVzdCBob2xkIGEKKyAqIGJ1ZmZl ciBwaW4gd2hlbiAhZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBs b2NrZWQuICBJdCdsbAorICogY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVs ZCBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBpbiBv biBidWNrZXQgYnVmZmVyLCBidXQgbWF5IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAqIG9uIG92ZXJm bG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVkIGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQ b3MpLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0 aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0bwotICogZGVsZXRlLgotICoKLSAqIFRoZXJlIGFyZSBu ZXZlciBhbnkgc2NhbnMgYWN0aXZlIGluIGEgYnVja2V0IGF0IHRoZSB0aW1lIFZBQ1VVTSBiZWdp bnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0aGUgcHJpbWFy eSBidWNrZXQgcGFnZSBhbmQgc2NhbnMKLSAqIGhvbGQgYSBwaW4uICBBIHNjYW4gY2FuIGJlZ2lu IGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UKLSAqIGJ1dCBiZWZv cmUgaXQgZmluaXNoZXMgdGhlIGVudGlyZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2ZXIgcGFzcyBW QUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VVTSBhbHdheXMgbG9ja3MgdGhlIG5leHQgcGFnZSBiZWZv cmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9uCi0gKiB0aGUgcHJldmlvdXMgb25lLiAgVGhlcmVmb3Jl LCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGFjY2lkZW50YWxseQotICoga2lsbGluZyBh IFRJRCB0aGF0IGhhcyBiZWVuIHJldXNlZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxlLgorICogV2Ug bWF0Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdo dCBvbmVzIHRvIHNldAorICogTFBfREVBRC4gIElmIHRoZSBzY2FuIGlzIG9uZSB0aGF0IGhvbGRz IGEgYnVmZmVyIHBpbiBvbiB0aGUgdGFyZ2V0IHBhZ2UKKyAqIGNvbnRpbnVvdXNseSBmcm9tIGlu aXRpYWxseSByZWFkaW5nIHRoZSBpdGVtcyB1bnRpbCBhcHBseWluZyB0aGlzIGZ1bmN0aW9uCisg KiAoaWYgaXQgaXMgYSAhZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQg YW55IGl0ZW1zIG9uIHRoZQorICogcGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUg YmVlbiByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKKyAqIHRoYXQgd2UnbGwgY29u ZnVzZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElE CisgKiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNl ZCB0byBiZSBvbiB0aGlzIHNhbWUKKyAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1 cmluZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQorICogKGkuZS4gZHJvcFBp biBzY2FucyksIHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJp dHMgb24KKyAqIHRoZSBwYWdlIExTTiBoYXZpbmcgbm90IGNoYW5nZWQgc2luY2UgYmFjayB3aGVu IF9oYXNoX3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4KKyAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBz ZXR0aW5nIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFuZ2VkLgogICovCiB2b2lk Ci1faGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKK19oYXNoX2tpbGxfaXRlbXMo SW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKIHsKLQlIYXNoU2Nhbk9w YXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9 IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIgYmxrbm87CiAJQnVmZmVyCQlidWY7 CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIG9m Zm51bSwKIAkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKIAlp bnQJCQlpOwogCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOwotCWJvb2wJCWhhdmVQaW4g PSBmYWxzZTsKIAotCUFzc2VydChzby0+bnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KHNvLT5raWxs ZWRJdGVtcyAhPSBOVUxMKTsKLQlBc3NlcnQoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9z KSk7CisJQXNzZXJ0KGJhdGNoLT5udW1LaWxsZWQgPiAwKTsKKwlBc3NlcnQoYmF0Y2gtPmtpbGxl ZEl0ZW1zICE9IE5VTEwpOworCUFzc2VydChCbG9ja051bWJlcklzVmFsaWQoYmF0Y2gtPmN1cnJQ YWdlKSk7CiAKLQkvKgotCSAqIEFsd2F5cyByZXNldCB0aGUgc2NhbiBzdGF0ZSwgc28gd2UgZG9u J3QgbG9vayBmb3Igc2FtZSBpdGVtcyBvbiBvdGhlcgotCSAqIHBhZ2VzLgotCSAqLwotCXNvLT5u dW1LaWxsZWQgPSAwOwotCi0JYmxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKLQlpZiAoSGFz aFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCisJaWYgKCFzY2FuLT5kcm9wUGluKQogCXsK IAkJLyoKLQkJICogV2UgYWxyZWFkeSBoYXZlIHBpbiBvbiB0aGlzIGJ1ZmZlciwgc28sIGFsbCB3 ZSBuZWVkIHRvIGRvIGlzCi0JCSAqIGFjcXVpcmUgbG9jayBvbiBpdC4KKwkJICogV2UgaGF2ZSBo ZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJlYWQgdGhlIGluZGV4IHR1cGxlcywK KwkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBpdC4gIFRoZSBwaW4gd2lsbCBoYXZl IHByZXZlbnRlZAorCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMgZnJvbSByZWN5Y2xpbmcgYW55IG9m IHRoZSBUSURzIG9uIHRoZSBwYWdlLgogCQkgKi8KLQkJaGF2ZVBpbiA9IHRydWU7Ci0JCWJ1ZiA9 IHNvLT5jdXJyUG9zLmJ1ZjsKKwkJYnVmID0gYmF0Y2gtPmJ1ZjsKIAkJTG9ja0J1ZmZlcihidWYs IEJVRkZFUl9MT0NLX1NIQVJFKTsKIAl9CiAJZWxzZQotCQlidWYgPSBfaGFzaF9nZXRidWYocmVs LCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKKwl7CisJCVhMb2dSZWNQdHIJ bGF0ZXN0bHNuOworCisJCUFzc2VydChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpOworCQlidWYgPSBf aGFzaF9nZXRidWYocmVsLCBiYXRjaC0+Y3VyclBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJCSAgIExI X0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CisKKwkJbGF0ZXN0bHNuID0gQnVmZmVy R2V0TFNOQXRvbWljKGJ1Zik7CisJCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJ CWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKKwkJeworCQkJLyogTW9kaWZpZWQsIGdpdmUg dXAgb24gaGludGluZyAqLworCQkJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKKwkJCXJldHVybjsK KwkJfQorCisJCS8qIFVubW9kaWZpZWQsIGhpbnRpbmcgaXMgc2FmZSAqLworCX0KIAogCXBhZ2Ug PSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7 CiAJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKIAotCWZvciAoaSA9IDA7 IGkgPCBudW1LaWxsZWQ7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgYmF0Y2gtPm51bUtpbGxlZDsg aSsrKQogCXsKLQkJaW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlIYXNo U2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJ CWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5raWxsZWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGlu Z0l0ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJCW9mZm51bSA9 IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKIAotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJy UG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVt KTsKKwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBpdGVt SW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtKTsKIAogCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikK IAkJewpAQCAtNjEzLDkgKzYxNiw4IEBAIF9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBz Y2FuKQogCQlNYXJrQnVmZmVyRGlydHlIaW50KGJ1ZiwgdHJ1ZSk7CiAJfQogCi0JaWYgKHNvLT5o YXNoc29fYnVja2V0X2J1ZiA9PSBzby0+Y3VyclBvcy5idWYgfHwKLQkJaGF2ZVBpbikKLQkJTG9j a0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJaWYgKCFzY2Fu LT5kcm9wUGluKQorCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKIAllbHNl CiAJCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CiB9CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0Cmlu ZGV4IGM1NTk5NzNmNy4uYjYyZGQ3MTM2IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAt MTE5Myw4ICsxMTkzLDYgQEAgSGFzaFBhZ2VTdGF0CiBIYXNoUGF0aAogSGFzaFNjYW5PcGFxdWUK IEhhc2hTY2FuT3BhcXVlRGF0YQotSGFzaFNjYW5Qb3NEYXRhCi1IYXNoU2NhblBvc0l0ZW0KIEhh c2hTa2V3QnVja2V0CiBIYXNoU3RhdGUKIEhhc2hWYWx1ZUZ1bmMKLS0gCjIuNTEuMAoK --0000000000007b96d706467a0698 Content-Type: application/octet-stream; name="v5-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Disposition: attachment; filename="v5-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjg0swii0 RnJvbSAxYTliMzAyNzg3ZmQwZmQ2Y2ZmNDcwZWM4NjdkYzRjOGUzM2E0NjJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjUgMS80XSBBZGQg YmF0Y2hpbmcgaW50ZXJmYWNlcyB1c2VkIGJ5IGhlYXBhbSBhbmQgbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbi9vcmRlcmVkIGluZGV4IHNjYW5zIHRoYXQgcmV0dXJu IGluZGV4IGVudHJpZXMgaW4KcGVyLWxlYWYtcGFnZSBiYXRjaGVzLCByYXRoZXIgdGhhbiBvbmUg YXQgYSB0aW1lLiAgVGhpcyBlbmFibGVzIGEKdmFyaWV0eSBvZiBvcHRpbWl6YXRpb25zIG9uIHRo ZSB0YWJsZSBBTSBzaWRlLCBtb3N0IG5vdGFibHkgSS9PCnByZWZldGNoaW5nIG9mIGhlYXAgdHVw bGVzIGR1cmluZyBvcmRlcmVkIGluZGV4IHNjYW5zLiAgSXQgd2lsbCBhbHNvCmVuYWJsZSBhbiBv cHRpbWl6YXRpb24gdGhhdCBoYXMgaGVhcGFtIGF2b2lkIHJlcGVhdGVkbHkgbG9ja2luZyBhbmQK dW5sb2NraW5nIHRoZSBzYW1lIGhlYXAgcGFnZSdzIGJ1ZmZlci4KCkluZGV4IGFjY2VzcyBtZXRo b2RzIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBsZW1lbnQKZWl0 aGVyIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSBPUiB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2Uu ICBUaGUKYW1nZXR0dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IGluZGV4IEFN cyB0aGF0IHJlcXVpcmUgZGlyZWN0CmNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXgg c2NhbnMgKGUuZy4sIEdpU1Qgd2l0aCBLTk4gb3JkZXJlZApzY2FucykuCgpUaGlzIGNvbW1pdCBh bHNvIGFkZHMgYSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlIGNhbGxiYWNrLCBjYWxsZWQgYnkgdGhl CmNvcmUgZXhlY3V0b3IgdGhyb3VnaCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBz aGltIGZ1bmN0aW9uLgpUaGlzIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdl IHRoZSBwcm9ncmVzcyBvZiBpbmRleCBzY2FucwpyYXRoZXIgdGhhbiBoYXZpbmcgaW5kaXZpZHVh bCBUSURzIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyLiBUaGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ug aXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2FjaCB0byBvcmRlcmVkCmluZGV4 IHNjYW5zIGFkZGVkIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBjYW4gYXBwbHkga25v d2xlZGdlIG9mCndoaWNoIFRJRHMgd2lsbCBiZSByZXR1cm5lZCB0byBzY2FuIGluIHRoZSBuZWFy IGZ1dHVyZSB0byBvcHRpbWl6ZSBhbmQKYmF0Y2ggdGFibGUgQU0gYmxvY2sgYWNjZXNzZXMsIGFu ZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4gIFRoZXNlCm9wdGltaXphdGlvbnMgYXJlIGxl ZnQgYXMgd29yayBmb3IgbGF0ZXIgY29tbWl0cy4KCkJhdGNoZXMgcmV0dXJuZWQgZnJvbSBhbWdl dGJhdGNoIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhbgppbmRleCBwYWdl IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHR1cGxlLiAgVGhlIGFtZ2V0YmF0Y2gK aW50ZXJmYWNlIG1heSBob2xkIGJ1ZmZlciBwaW5zIGFzIGludGVybG9ja3MgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhpcyBleHRlbmRzL2dlbmVyYWxpemVz IHRoZSBtZWNoYW5pc20gYWRkZWQgdG8KbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiB0byBhbGwg aW5kZXggQU1zIHRoYXQgYWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZh Y2UuCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdt YWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1 YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQtNDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRy YS5tZQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3prOSUzRHglM0RhMlRi Y3FZY1glMkJYWG1ESFFyNSUzRDF2OW00Wl92OGEtS3dGMVpvejBBJTQwbWFpbC5nbWFpbC5jb20K LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjIg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAzMiAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICAzICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE3NiArLS0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgMjQ2ICsr KysrKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICAgICB8ICA0 MiArKwogc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAy IC0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAgICAgICAgIHwgICA1ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAgICAgICAgfCAgIDYgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAgICAgICB8ICAgNSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAgICAgIHwgICA1ICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAgICB8IDUwNyArKysrKysr KysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAg IDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICAgICB8ICAx NSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgMTM1 ICstLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAgICB8IDY2 OSArKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWls ZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSAgICAg ICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jICAg ICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMg ICAgICAgfCAxOTIgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAg ICAgICAgICB8IDI5NyArKy0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFy Y2guYyAgICAgICAgIHwgNTEwICsrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0dXRpbHMuYyAgICAgICAgICB8ICA5MyArLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndXRpbHMuYyAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhw bGFpbi5jICAgICAgICAgICAgICAgIHwgIDIzICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9pbmRl eGNtZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNB bWkuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0lu ZGV4aW5nLmMgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYyAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRt YXBJbmRleHNjYW4uYyAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhv bmx5c2Nhbi5jICAgICAgfCAxMDggKy0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhz Y2FuLmMgICAgICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNh dC5jICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jl bGF0aW9uLmMgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMgICAg ICAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAg ICAgICAgICAgIHwgIDY4ICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDMgKy0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICAg ICAgICAgICB8IDMxMCArKysrKystLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dt bCAgICAgICAgICAgIHwgIDEzICstCiAuLi4vbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9p bmRleF9hbS5jICAgfCAgIDQgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAg ICAgICAgICAgICB8ICAgNCAtCiA0NCBmaWxlcyBjaGFuZ2VkLCAyMzMyIGluc2VydGlvbnMoKyks IDEyMzkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFw aS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggNjNkZDQxYzFmLi5hN2ViMzNj ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKmFt cmVzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1n ZXR0dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0 eXBlZGVmIEJhdGNoSW5kZXhTY2FuICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRl c2Mgc2NhbiwKKwkJCQkJCQkJCQkJICAgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwKKwkJCQkJ CQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiByZWxlYXNlIGJhdGNoIG9m IHZhbGlkIHR1cGxlcyAqLwordHlwZWRlZiB2b2lkICgqYW1mcmVlYmF0Y2hfZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKKwog LyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFw X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0bWFwICp0 Ym0pOwpAQCAtMjA1LDExICsyMTQsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVu Y3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAqLwogdHlwZWRl ZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAotLyog bWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtbWFya3Bvc19m dW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFya2VkIHNjYW4g cG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJbmRleFNj YW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5k ZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgqYW1wb3NyZXNl dF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBCYXRjaEluZGV4U2Nh biBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0gZm9yIHBh cmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMzA5LDEwICszMTYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhBbVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKIAlhbXJl c2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7 IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBj YW4gYmUgTlVMTCAqLworCWFtZnJlZWJhdGNoX2Z1bmN0aW9uIGFtZnJlZWJhdGNoOwkvKiBjYW4g YmUgTlVMTCAqLwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBjYW4gYmUg TlVMTCAqLwogCWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9zX2Z1bmN0 aW9uIGFtbWFya3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0aW9uIGFt cmVzdHJwb3M7IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jl c2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBw b3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5j dGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0u aAppbmRleCA5MjAwYTIyYmQuLjg4YzM0Yjk4MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTQwLDYgKzQw LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgogewogCS8qIElu ZGV4IHNlYXJjaCBjb3VudCAoaW5jcmVtZW50ZWQgd2l0aCBwZ3N0YXRfY291bnRfaW5kZXhfc2Nh biBjYWxsKSAqLwogCXVpbnQ2NAkJbnNlYXJjaGVzOworCisJLyoKKwkgKiBoZWFwIGJsb2NrcyBm ZXRjaGVkIGNvdW50cyAoaW5jcmVtZW50ZWQgYnkgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxzCisJ ICogd2l0aGluIHRhYmxlIEFNcywgdGhvdWdoIG9ubHkgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMp CisJICovCisJdWludDY0CQluaGVhcGZldGNoZXM7CiB9IEluZGV4U2Nhbkluc3RydW1lbnRhdGlv bjsKIAogLyoKQEAgLTExNSw2ICsxMjEsNyBAQCB0eXBlZGVmIGJvb2wgKCpJbmRleEJ1bGtEZWxl dGVDYWxsYmFjaykgKEl0ZW1Qb2ludGVyIGl0ZW1wdHIsIHZvaWQgKnN0YXRlKTsKIAogLyogc3Ry dWN0IGRlZmluaXRpb25zIGFwcGVhciBpbiByZWxzY2FuLmggKi8KIHR5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkRlc2NEYXRhICpJbmRleFNjYW5EZXNjOwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hJbmRl eFNjYW5EYXRhICpCYXRjaEluZGV4U2NhbjsKIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0 YSAqU3lzU2NhbkRlc2M7CiAKIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0Rh dGEgKlBhcmFsbGVsSW5kZXhTY2FuRGVzYzsKQEAgLTE3NSw2ICsxODIsNyBAQCBleHRlcm4gdm9p ZCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCiBleHRlcm4g SW5kZXhTY2FuRGVzYyBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJ CQkJCQkJIFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCisJCQkJCQkJCQkgYm9vbCB4c193YW50X2l0 dXAsCiAJCQkJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCQkgSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRl cmJ5cyk7CkBAIC0yMDEsMTQgKzIwOSwxMiBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNj YW5faW5pdGlhbGl6ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9w YXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2Mg aW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAg UmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkJCQkJCSAgYm9vbCB4c193YW50X2l0dXAsCiAJCQkJ CQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJ CQkgIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4 U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJuIEl0ZW1Qb2ludGVyIGluZGV4X2dldG5leHRfdGlkKElu ZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Ci1l eHRlcm4gYm9vbCBpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpOwotZXh0ZXJuIGJvb2wgaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJCQkJICAgVHVwbGVUYWJsZVNs b3QgKnNsb3QpOwogZXh0ZXJuIGludDY0IGluZGV4X2dldGJpdG1hcChJbmRleFNjYW5EZXNjIHNj YW4sIFRJREJpdG1hcCAqYml0bWFwKTsKIAogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq aW5kZXhfYnVsa19kZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLApAQCAtMjcyLDQgKzI3OCwy NCBAQCBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9iZWdpbihSZWxhdGlvbiBy ZWxhdGlvbiwKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2ZpbmlzaCh2b2lk ICpzdGF0ZSwgSGVhcFR1cGxlIHR1cGxlKTsKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lucGxhY2Vf dXBkYXRlX2NhbmNlbCh2b2lkICpzdGF0ZSk7CiAKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGll cyBjYWxsZWQgYnkgaW5kZXhhbS5jIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK3N0cnVjdCBCYXRj aFF1ZXVlSXRlbVBvczsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVz YyBzY2FuKTsKK2V4dGVybiBib29sIGJhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CitleHRlcm4gdm9pZCBiYXRjaF9mcmVlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0 Y2hfcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKTsKK2V4dGVybiB2b2lk IGluZGV4X2JhdGNoX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBp bmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQg aW5kZXhfYmF0Y2hfa2lsbF9pdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBp bmRleF9iYXRjaF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKworLyoKKyAqIGFtZ2V0YmF0Y2gg dXRpbGl0aWVzIGNhbGxlZCBieSBpbmRleCBBTXMgKGluIGluZGV4YmF0Y2guYykKKyAqLworZXh0 ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEJh dGNoSW5kZXhTY2FuIGJhdGNoKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBpbmRleGFtX3V0aWxf YmF0Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4YW1fdXRp bF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gp OworCiAjZW5kaWYJCQkJCQkJLyogR0VOQU1fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IGY3ZTRh ZTM4NC4uNzRhZjcxMjY3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMTcsNyArMTE3LDEwIEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNf YmFzZTsJLyogQU0gaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUgZGVzY3JpcHRvciAqLwogCiAJQnVm ZmVyCQl4c19jYnVmOwkJLyogY3VycmVudCBoZWFwIGJ1ZmZlciBpbiBzY2FuLCBpZiBhbnkgKi8K KwlCbG9ja051bWJlciB4c19ibGs7CQkJLyogeHNfY2J1ZidzIGJsb2NrIG51bWJlciwgaWYgYW55 ICovCiAJLyogTkI6IGlmIHhzX2NidWYgaXMgbm90IEludmFsaWRCdWZmZXIsIHdlIGhvbGQgYSBw aW4gb24gdGhhdCBidWZmZXIgKi8KKworCUJ1ZmZlcgkJdm1idWY7CQkJLyogdmlzaWJpbGl0eSBt YXAgYnVmZmVyICovCiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIAogLyogUmVzdWx0IGNvZGVzIGZv ciBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9uYnRyZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCA3YTNlZmQy MDkuLjY1OGM0NmExZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtOTI0LDExMiArOTI0LDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgQlRWYWN1dW1Qb3N0aW5nRGF0YQogCiB0eXBlZGVmIEJUVmFjdXVtUG9zdGlu Z0RhdGEgKkJUVmFjdXVtUG9zdGluZzsKIAotLyoKLSAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhl IGJ0cmVlLXByaXZhdGUgc3RhdGUgbmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCi0gKiBUaGlzIGNv bnNpc3RzIG9mIHByZXByb2Nlc3NlZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlz KCkgZm9yCi0gKiBkZXRhaWxzIG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwgaW5mb3JtYXRpb24gYWJv dXQgdGhlIGN1cnJlbnQgbG9jYXRpb24KLSAqIG9mIHRoZSBzY2FuLCBhbmQgaW5mb3JtYXRpb24g YWJvdXQgdGhlIG1hcmtlZCBsb2NhdGlvbiwgaWYgYW55LiAgKFdlIHVzZQotICogQlRTY2FuUG9z RGF0YSB0byByZXByZXNlbnQgdGhlIGRhdGEgbmVlZGVkIGZvciBlYWNoIG9mIGN1cnJlbnQgYW5k IG1hcmtlZAotICogbG9jYXRpb25zLikJSW4gYWRkaXRpb24gd2UgY2FuIHJlbWVtYmVyIHNvbWUg a25vd24ta2lsbGVkIGluZGV4IGVudHJpZXMKLSAqIHRoYXQgbXVzdCBiZSBtYXJrZWQgYmVmb3Jl IHdlIGNhbiBtb3ZlIG9mZiB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIEluZGV4IHNjYW5zIHdv cmsgYSBwYWdlIGF0IGEgdGltZTogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50 aWZ5Ci0gKiBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlIGFuZCBzYXZlIHRoZW0g aW4gQlRTY2FuUG9zRGF0YSwgdGhlbgotICogcmVsZWFzZSB0aGUgcmVhZC1sb2NrIHdoaWxlIHJl dHVybmluZyB0aGUgaXRlbXMgdG8gdGhlIGNhbGxlciBmb3IKLSAqIHByb2Nlc3NpbmcuICBUaGlz IGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMK LSAqIGRyb3AgdGhlIGxvY2sgdG8gbWFrZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0 aGUgcmV0dXJuZWQgaXRlbXMuCi0gKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNl IHRoZSBwaW4gZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBp biAod2hlbiBzby0+ZHJvcFBpbikgdG8gYXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVN Ci0gKiAoc2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIHNhZmUpLgotICogV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9j ayBhbmQgdGhlIHBpbiBvbiB0aGUgY3VycmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRv IGl0cyBzaWJsaW5nIHBhZ2UuCi0gKgotICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKLSAqIG1hdGNoZWQg aXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhU dXBsZXMgZ28KLSAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2Fu UG9zSXRlbSBzdG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4g IFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKLSAqIGFsbG93 aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3Rp bmcgbGlzdAotICogdHVwbGUuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkv KiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRh dGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVt YmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8K LQlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdv cmtzcGFjZSwgaWYgYW55ICovCi19IEJUU2NhblBvc0l0ZW07Ci0KLXR5cGVkZWYgc3RydWN0IEJU U2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQg bWVhbnMgdW5waW5uZWQpICovCi0KLQkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBv c2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJ CS8qIHBhZ2UgcmVmZXJlbmNlZCBieSBpdGVtcyBhcnJheSAqLwotCUJsb2NrTnVtYmVyIHByZXZQ YWdlOwkJLyogY3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgcmlnaHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQ YWdlJ3MgTFNOICh3aGVuIHNvLT5kcm9wUGluKSAqLwotCi0JLyogc2NhbiBkaXJlY3Rpb24gZm9y IHRoZSBzYXZlZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JU2NhbkRpcmVj dGlvbiBkaXI7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4s IG5leHRUdXBsZU9mZnNldCBpcyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBh c3NvY2lhdGVkIHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBs ZU9mZnNldDsKLQotCS8qCi0JICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVy IHdlIHRoaW5rIHRoZXJlIG1heSBiZSBtYXRjaGluZwotCSAqIGluZGV4IGVudHJpZXMgdG8gdGhl IGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KLQkgKi8K LQlib29sCQltb3JlTGVmdDsKLQlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVt cyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcK LQkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5p ZW50IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQg dGhlIGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3Ro IGEgZmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAq IGl0ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVy bmVkIHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBp bmRleCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4 IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0 ZW1zW10gKi8KLQotCUJUU2NhblBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8q IE1VU1QgQkUgTEFTVCAqLwotfSBCVFNjYW5Qb3NEYXRhOwotCi10eXBlZGVmIEJUU2NhblBvc0Rh dGEgKkJUU2NhblBvczsKLQotI2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0o IFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8 fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxp ZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwK LQlkbyB7IFwKLQkJUmVsZWFzZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcyku YnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1Vu cGluSWZQaW5uZWQoc2NhbnBvcykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQo c2NhbnBvcykpIFwKLQkJCUJUU2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkK LQotI2RlZmluZSBCVFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3Jv KEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVy SXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3Mp LmN1cnJQYWdlKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAot CWRvIHsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcyku Y3VyclBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQotCiAvKiBXZSBu ZWVkIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJDSEFSUkFZIHNj YW4ga2V5ICovCiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogewpAQCAtMTA1MCw2ICs5 NDQsMzAgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQloaWdoX2Nv bXBhcmU7CS8qIGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5S2V5SW5m bzsKIAorLyoKKyAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUgc3RhdGUg bmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCisgKiBUaGlzIGNvbnNpc3RzIG9mIHByZXByb2Nlc3Nl ZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9yCisgKiBkZXRhaWxzIG9m IHRoZSBwcmVwcm9jZXNzaW5nKSwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGFy cmF5CisgKiBrZXlzLiAgVGhlcmUgYXJlIGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgY3VycmVu dCBhcnJheSBrZXlzIHRyYWNrIHRoZQorICogcHJvZ3Jlc3Mgb2YgdGhlIGluZGV4IHNjYW4gdGhy b3VnaCB0aGUgaW5kZXgncyBrZXkgc3BhY2UgKHNlZSBfYnRfcmVhZHBhZ2UKKyAqIGFuZCBfYnRf YWR2YW5jZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHRyYWNrIGFueXRoaW5n IGFib3V0IHRoZQorICogY3VycmVudCBzY2FuIHBvc2l0aW9uIGluIHRoaXMgb3BhcXVlIHN0cnVj dC4gIFRoYXQgaXMgdHJhY2tlZCBleHRlcm5hbGx5LAorICogYnkgaW1wbGVtZW50aW5nIGEgcXVl dWUgb2YgImJhdGNoZXMiLCB3aGVyZSBlYWNoIGJhdGNoIHJlcHJlc2VudHMgdGhlIGl0ZW1zCisg KiByZXR1cm5lZCBieSBidGdldGJhdGNoIHdpdGhpbiBhIHNpbmdsZSBsZWFmIHBhZ2UuCisgKgor ICogSW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lLCBhcyByZXF1aXJlZCBieSB0aGUg YW1nZXRiYXRjaCBjb250cmFjdDoKKyAqIHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBp ZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlCisgKiBhbmQgcmV0dXJu IHRoZW0gaW4gYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2guICBXZSB0aGVuIHJlbGVhc2UgdGhlIHJl YWQtbG9jaworICogdXNpbmcgYW1nZXRiYXRjaCB1dGlsaXR5IHJvdXRpbmVzLiAgVGhpcyBhcHBy b2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sKKyAqIHRyYWZmaWMuIF9idF9uZXh0IGlzIHBhc3Nl ZCBwcmlvcmJhdGNoLCB3aGljaCBjb250YWlucyBkZXRhaWxzIG9mIHdoaWNoCisgKiBwYWdlIGlz IG5leHQgaW4gbGluZSB0byBiZSByZWFkIChwcmlvcmJhdGNoIGlzIHByb3ZpZGVkIGFzIGFuIGFy Z3VtZW50IHRvCisgKiBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisgKgorICogSWYgd2UgYXJl IGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUg Zm9yIGVhY2gKKyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFu ZCBvZmZzZXQuICBUaGlzIGlzIGFsc28gcGVyIHRoZQorICogYW1nZXRiYXRjaCBjb250cmFjdC4g IFBvc3RpbmcgbGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKKyAqIGFsbG93 aW5nIHRoZSBzYW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3Rp bmcgbGlzdC4KKyAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogewogCS8qIHRo ZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IF9idF9wcmVwcm9jZXNzX2tleXMoKTogKi8KQEAgLTEwNjYs MzIgKzk4NCw2IEBAIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIAlCVEFycmF5S2V5 SW5mbyAqYXJyYXlLZXlzOwkvKiBpbmZvIGFib3V0IGVhY2ggZXF1YWxpdHktdHlwZSBhcnJheSBr ZXkgKi8KIAlGbWdySW5mbyAgICpvcmRlclByb2NzOwkJLyogT1JERVIgcHJvY3MgZm9yIHJlcXVp cmVkIGVxdWFsaXR5IGtleXMgKi8KIAlNZW1vcnlDb250ZXh0IGFycmF5Q29udGV4dDsgLyogc2Nh bi1saWZlc3BhbiBjb250ZXh0IGZvciBhcnJheSBkYXRhICovCi0KLQkvKiBpbmZvIGFib3V0IGtp bGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8K LQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxl ZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3Rv cmVkIGl0ZW1zICovCi0JYm9vbAkJZHJvcFBpbjsJCS8qIGRyb3AgbGVhZiBwaW4gYmVmb3JlIGJ0 Z2V0dHVwbGUgcmV0dXJucz8gKi8KLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4 LW9ubHkgc2NhbiwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCi0JICogd29ya3NwYWNlcyBm b3IgdGhlIGN1cnJQb3MgYW5kIG1hcmtQb3MgcmVzcGVjdGl2ZWx5LiAgRWFjaCBpcyBvZiBzaXpl Ci0JICogQkxDS1NaLCBzbyBpdCBjYW4gaG9sZCBhcyBtdWNoIGFzIGEgZnVsbCBwYWdlJ3Mgd29y dGggb2YgdHVwbGVzLgotCSAqLwotCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0dXBsZSBzdG9y YWdlIGZvciBjdXJyUG9zICovCi0JY2hhcgkgICAqbWFya1R1cGxlczsJCS8qIHR1cGxlIHN0b3Jh Z2UgZm9yIG1hcmtQb3MgKi8KLQotCS8qCi0JICogSWYgdGhlIG1hcmtlZCBwb3NpdGlvbiBpcyBv biB0aGUgc2FtZSBwYWdlIGFzIGN1cnJlbnQgcG9zaXRpb24sIHdlCi0JICogZG9uJ3QgdXNlIG1h cmtQb3MsIGJ1dCBqdXN0IGtlZXAgdGhlIG1hcmtlZCBpdGVtSW5kZXggaW4gbWFya0l0ZW1JbmRl eAotCSAqIChhbGwgdGhlIHJlc3Qgb2YgY3VyclBvcyBpcyB2YWxpZCBmb3IgdGhlIG1hcmsgcG9z aXRpb24pLiBIZW5jZSwgdG8KLQkgKiBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBtYXJrLCBmaXJz dCBsb29rIGF0IG1hcmtJdGVtSW5kZXgsIHRoZW4gYXQKLQkgKiBtYXJrUG9zLgotCSAqLwotCWlu dAkJCW1hcmtJdGVtSW5kZXg7CS8qIGl0ZW1JbmRleCwgb3IgLTEgaWYgbm90IHZhbGlkICovCi0K LQkvKiBrZWVwIHRoZXNlIGxhc3QgaW4gc3RydWN0IGZvciBlZmZpY2llbmN5ICovCi0JQlRTY2Fu UG9zRGF0YSBjdXJyUG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCi0JQlRTY2FuUG9z RGF0YSBtYXJrUG9zOwkJLyogbWFya2VkIHBvc2l0aW9uLCBpZiBhbnkgKi8KIH0gQlRTY2FuT3Bh cXVlRGF0YTsKIAogdHlwZWRlZiBCVFNjYW5PcGFxdWVEYXRhICpCVFNjYW5PcGFxdWU7CkBAIC0x MTYwLDE0ICsxMDUyLDE2IEBAIGV4dGVybiBib29sIGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0 dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgYnRiZWdpbnNj YW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIFNpemUg YnRlc3RpbWF0ZXBhcmFsbGVsc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRl cmJ5cyk7CiBleHRlcm4gdm9pZCBidGluaXRwYXJhbGxlbHNjYW4odm9pZCAqdGFyZ2V0KTsKLWV4 dGVybiBib29sIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cik7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gYnRnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCSBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoLAorCQkJCQkJCQkgU2NhbkRpcmVj dGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2Nhbiwg VElEQml0bWFwICp0Ym0pOwogZXh0ZXJuIHZvaWQgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSBTY2FuS2V5IG9yZGVyYnlz LCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIGJ0ZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwogZXh0ZXJuIHZvaWQgYnRwYXJhbGxlbHJlc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQgYnRlbmRzY2FuKEluZGV4U2NhbkRl c2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4 dGVybiB2b2lkIGJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGJ0 cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBtYXJrYmF0Y2gpOwog ZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqYnRidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5m byAqaW5mbywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAogCQkJ CQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLApAQCAtMTI3MSw4ICsx MTY1LDkgQEAgZXh0ZXJuIHZvaWQgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJbmRleFNjYW5EZXNjIHNj YW4pOwogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnRyZWFkcGFnZS5jCiAg Ki8KLWV4dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKTsK K2V4dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhT Y2FuIG5ld2JhdGNoLAorCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2Zm bnVtLAorCQkJCQkJIGJvb2wgZmlyc3RwYWdlKTsKIGV4dGVybiB2b2lkIF9idF9zdGFydF9hcnJh eV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGlu dAlfYnRfYmluc3JjaF9hcnJheV9za2V5KEZtZ3JJbmZvICpvcmRlcnByb2MsCiAJCQkJCQkJCSAg IGJvb2wgY3VyX2VsZW1fdHJpZywgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMjg3LDggKzExODIs OSBAQCBleHRlcm4gQlRTdGFjayBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVh cHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNz KTsKIGV4dGVybiBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwg QlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVs YXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZu dW0pOwotZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gX2J0X2ZpcnN0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEJhdGNoSW5kZXhTY2FuIF9i dF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJICAg QmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCk7CiBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9p bnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsKIAogLyoKQEAg LTEyOTYsNyArMTE5Miw3IEBAIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlv biByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogICovCiBleHRlcm4gQlRTY2Fu SW5zZXJ0IF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApOwogZXh0 ZXJuIHZvaWQgX2J0X2ZyZWVzdGFjayhCVFN0YWNrIHN0YWNrKTsKLWV4dGVybiB2b2lkIF9idF9r aWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIF9idF9raWxsaXRlbXMo SW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CiBleHRlcm4gQlRDeWNs ZUlkIF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBf YnRfc3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1 bShSZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggNzg5ODlhOTU5Li4xYzlmYWFh ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNj ZXNzL2h0dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCisjaW5jbHVkZSAi YWNjZXNzL3NkaXIuaCIKICNpbmNsdWRlICJub2Rlcy90aWRiaXRtYXAuaCIKICNpbmNsdWRlICJw b3J0L2F0b21pY3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zi5oIgpAQCAtMTI1LDYgKzEyNiwx NzQgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogCVJlbGF0aW9uCXJlbDsK IH0gSW5kZXhGZXRjaFRhYmxlRGF0YTsKIAorLyoKKyAqIFF1ZXVlLXdpc2UgbG9jYXRpb24gb2Yg YSBCYXRjaE1hdGNoaW5nSXRlbSB0aGF0IGFwcGVhcnMgaW4gYSBCYXRjaEluZGV4U2NhbgorICog cmV0dXJuZWQgYnkgKGFuZCBzdWJzZXF1ZW50bHkgcGFzc2VkIHRvKSBhbiBhbWdldGJhdGNoIHJv dXRpbmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hRdWV1ZUl0ZW1Qb3MKK3sKKwkvKiBCYXRj aFF1ZXVlLmJhdGNoZXNbXS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEJhdGNoSW5kZXhTY2FuICov CisJaW50CQkJYmF0Y2g7CisKKwkvKiBCYXRjaEluZGV4U2Nhbi5pdGVtc1tdLXdpc2UgaW5kZXgg dG8gcmVsZXZhbnQgQmF0Y2hNYXRjaGluZ0l0ZW0gKi8KKwlpbnQJCQlpdGVtOworfSBCYXRjaFF1 ZXVlSXRlbVBvczsKKworc3RhdGljIGlubGluZSB2b2lkCitiYXRjaF9yZXNldF9wb3MoQmF0Y2hR dWV1ZUl0ZW1Qb3MgKnBvcykKK3sKKwlwb3MtPmJhdGNoID0gLTE7CisJcG9zLT5pdGVtID0gLTE7 Cit9CisKKy8qCisgKiBNYXRjaGluZyBpdGVtIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2ggKGluIHJl dHVybmVkIEJhdGNoSW5kZXhTY2FuKSBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uICBVc2VkIGJ5 IHRhYmxlIEFNIHRvIGxvY2F0ZSByZWxldmFudCBtYXRjaGluZyB0YWJsZSB0dXBsZS4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0ZW0KK3sKKwlJdGVtUG9pbnRlckRhdGEgaGVh cFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCisJT2Zmc2V0TnVtYmVyIGlu ZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KKwlMb2Nh dGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFj ZSwgaWYgYW55ICovCit9IEJhdGNoTWF0Y2hpbmdJdGVtOworCisvKgorICogRGF0YSBhYm91dCBv bmUgYmF0Y2ggb2YgaXRlbXMgcmV0dXJuZWQgYnkgKGFuZCBwYXNzZWQgdG8pIGFtZ2V0YmF0Y2gg ZHVyaW5nCisgKiBpbmRleCBzY2FucworICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaEluZGV4U2Nh bkRhdGEKK3sKKwkvKgorCSAqIEluZm9ybWF0aW9uIG91dHB1dCBieSBhbWdldGJhdGNoIGluZGV4 IEFNcyB1cG9uIHJldHVybmluZyBhIGJhdGNoIHdpdGgKKwkgKiBvbmUgb3IgbW9yZSBtYXRjaGlu ZyBpdGVtcywgZGVzY3JpYmluZyBkZXRhaWxzIG9mIHRoZSBpbmRleCBwYWdlIHdoZXJlCisJICog bWF0Y2hlcyB3ZXJlIGxvY2F0ZWQuCisJICoKKwkgKiBVc2VkIGluIHRoZSBuZXh0IGFtZ2V0YmF0 Y2ggY2FsbCB0byBkZXRlcm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byByZWFkCisJICogbmV4dCAo b3IgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJ3Mgbm8gZnVydGhlciBtYXRjaGVzIGluIGN1cnJlbnQg c2NhbgorCSAqIGRpcmVjdGlvbikuCisJICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBJ bmRleCBwYWdlIHdpdGggbWF0Y2hpbmcgaXRlbXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJ CS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBj dXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KKworCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1 ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KKwlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJy UGFnZSdzIExTTiAod2hlbiBkcm9wUGluKSAqLworCisJLyogc2NhbiBkaXJlY3Rpb24gd2hlbiB0 aGUgaW5kZXggcGFnZSB3YXMgcmVhZCAqLworCVNjYW5EaXJlY3Rpb24gZGlyOworCisJLyoKKwkg KiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdoZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5 IGJlIG1hdGNoaW5nCisJICogaW5kZXggZW50cmllcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2Yg dGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5CisJICovCisJYm9vbAkJbW9yZUxlZnQ7CisJ Ym9vbAkJbW9yZVJpZ2h0OworCisJLyoKKwkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9y ZGVyZWQgaW4gaW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAg V2hlbiBzY2FubmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0byBmaWxsIHRoZQorCSAq IGFycmF5IGJhY2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3QgYW5kIGZp bGwgZG93bndhcmRzLgorCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVudHJ5 IGFuZCBhIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KKwkgKi8KKwlpbnQJCQlmaXJzdEl0ZW07 CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJaW50CQkJbGFzdEl0ZW07CQkv KiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8qIGluZm8gYWJvdXQga2lsbGVk IGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLworCWlu dAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLworCWludAkJ CW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCisKKwkv KgorCSAqIE1hdGNoaW5nIGl0ZW1zIHN0YXRlIGZvciB0aGlzIGJhdGNoLgorCSAqCisJICogSWYg d2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9y YWdlCisJICogd29ya3NwYWNlcyBmb3IgdGhlIG1hdGNoaW5nIHR1cGxlcyAodHVwbGVzIHJlZmVy ZW5jZWQgYnkgaXRlbXNbXSkuIEVhY2gKKwkgKiBpcyBvZiBzaXplIEJMQ0tTWiwgc28gaXQgY2Fu IGhvbGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9mCisJICogdHVwbGVzLgorCSAq LworCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBpdGVtc1tdICov CisJQmF0Y2hNYXRjaGluZ0l0ZW0gaXRlbXNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gQmF0 Y2hJbmRleFNjYW5EYXRhOworCit0eXBlZGVmIHN0cnVjdCBCYXRjaEluZGV4U2NhbkRhdGEgKkJh dGNoSW5kZXhTY2FuOworCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcyAobGVhZiBw YWdlcykgd2UgY2FuIGtlZXAgaW4gbWVtb3J5LiAgV2UgbmVlZCBhCisgKiBtaW5pbXVtIG9mIHR3 bywgc2luY2Ugd2UnbGwgb25seSBjb25zaWRlciByZWxlYXNpbmcgb25lIGJhdGNoIHdoZW4gYW5v dGhlcgorICogaXMgcmVhZC4KKyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQky CisjZGVmaW5lIElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUwkyCisjZGVmaW5lIElOREVYX1NDQU5f QkFUQ0hfQ09VTlQoc2NhbikgXAorCSgoc2NhbiktPmJhdGNocXVldWUtPm5leHRCYXRjaCAtIChz Y2FuKS0+YmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKQorCisvKiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJh dGNoIHdpdGggdGhlIHJlcXVlc3RlZCBpbmRleD8gKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRD SF9MT0FERUQoc2NhbiwgaWR4KSBcCisJKChpZHgpIDwgKHNjYW4pLT5iYXRjaHF1ZXVlLT5uZXh0 QmF0Y2gpCisKKy8qIEhhdmUgd2UgbG9hZGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiYXRjaGVz PyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0JBVENIX0ZVTEwoc2NhbikgXAorCShJTkRFWF9TQ0FO X0JBVENIX0NPVU5UKHNjYW4pID09IElOREVYX1NDQU5fTUFYX0JBVENIRVMpCisKKy8qIFJldHVy biBiYXRjaCBmb3IgdGhlIHByb3ZpZGVkIGluZGV4LiAqLworI2RlZmluZSBJTkRFWF9TQ0FOX0JB VENIKHNjYW4sIGlkeCkJXAorCQkoKHNjYW4pLT5iYXRjaHF1ZXVlLT5iYXRjaGVzWyhpZHgpICUg SU5ERVhfU0NBTl9NQVhfQkFUQ0hFU10pCisKKy8qIElzIHRoZSBwb3NpdGlvbiBpbnZhbGlkL3Vu ZGVmaW5lZD8gKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9QT1NfSU5WQUxJRChwb3MpIFwKKwkJKCgo cG9zKS0+YmF0Y2ggPT0gLTEpICYmICgocG9zKS0+aXRlbSA9PSAtMSkpCisKKyNpZmRlZiBJTkRF WEFNX0RFQlVHCisjZGVmaW5lIERFQlVHX0xPRyguLi4pIGVsb2coQW1SZWd1bGFyQmFja2VuZFBy b2Nlc3MoKSA/IE5PVElDRSA6IERFQlVHMiwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBE RUJVR19MT0coLi4uKQorI2VuZGlmCisKKy8qCisgKiBTdGF0ZSB1c2VkIGJ5IHRhYmxlIEFNcyB0 byBtYW5hZ2UgYW4gaW5kZXggc2NhbiB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0Y2gKKyAqIGludGVy ZmFjZS4gIFNjYW5zIHdvcmsgd2l0aCBhIHF1ZXVlIG9mIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1n ZXRiYXRjaC4KKyAqCisgKiBCYXRjaGVzIGFyZSBrZXB0IGluIHRoZSBvcmRlciB0aGF0IHRoZXkg d2VyZSByZXR1cm5lZCBpbiBieSBhbWdldGJhdGNoLAorICogc2luY2UgdGhhdCBpcyB0aGUgc2Ft ZSBvcmRlciB0aGF0IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCB3aWxsIHJldHVybgorICogbWF0 Y2hlcyBpbi4gIEhvd2V2ZXIsIHRhYmxlIEFNcyBhcmUgZnJlZSB0byBmZXRjaCB0YWJsZSB0dXBs ZXMgaW4gd2hhdGV2ZXIKKyAqIG9yZGVyIGlzIG1vc3QgY29udmVuaWVudC9lZmZpY2llbnQgLS0g cHJvdmlkZWQgdGhhdCBzdWNoIHJlb3JkZXJpbmcgY2Fubm90CisgKiBhZmZlY3QgdGhlIG9yZGVy IHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGxhdGVyIHJldHVybnMgdHVwbGVzIGluLgor ICoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgYWxzbyBwcm92aWRlcyB0YWJsZSBBTXMgd2l0aCBh IHdheSB0byByZWFkIGFoZWFkIG9mIHRoZQorICogY3VycmVudCByZWFkIHBvc2l0aW9uIGJ5IF9t dWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBwYWdlcy4gIFRoZSBmdXJ0aGVyIG91dAorICogdGhlIHRh YmxlIEFNIHJlYWRzIGFoZWFkIGxpa2UgdGhpcywgdGhlIGZ1cnRoZXIgaXQgY2FuIHNlZSBpbnRv IHRoZSBmdXR1cmUuCisgKiBUaGF0IHdheSB0aGUgdGFibGUgQU0gaXMgYWJsZSB0byByZW9yZGVy IHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFzIGRlc2lyZWQuCisgKiBGb3IgZXhhbXBsZSwgaW5kZXgg c2NhbnMgc29tZXRpbWVzIG5lZWQgdG8gcmVhZGFoZWFkIGJ5IGFzIG1hbnkgYXMgYSBmZXcKKyAq IGRvemVuIGFtZ2V0YmF0Y2ggYmF0Y2hlcyBpbiBvcmRlciB0byBtYWludGFpbiBhbiBvcHRpbWFs IEkvTyBwcmVmZXRjaAorICogZGlzdGFuY2UgKGRpc3RhbmNlIGZvciByZWFkaW5nIHRhYmxlIGJs b2Nrcy9mZXRjaGluZyB0YWJsZSB0dXBsZXMpLgorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFF1 ZXVlCit7CisJLyogQ3VycmVudCBzY2FuIGRpcmVjdGlvbiwgZm9yIHRoZSBjdXJyZW50bHkgbG9h ZGVkIGJhdGNoZXMgKi8KKwlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKKworCS8qIGN1cnJlbnQg cG9zaXRpb25zIGluIGJhdGNoZXNbXSBmb3Igc2NhbiAqLworCUJhdGNoUXVldWVJdGVtUG9zIHJl YWRQb3M7CS8qIHJlYWQgcG9zaXRpb24gKi8KKwlCYXRjaFF1ZXVlSXRlbVBvcyBtYXJrUG9zOwkv KiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8KKworCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaDsK KworCS8qCisJICogQXJyYXkgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSB0aGUgQU0uIFRoZSBhcnJh eSBoYXMgYSBjYXBhY2l0eSAoYnV0IGNhbgorCSAqIGJlIHJlc2l6ZWQgaWYgbmVlZGVkKS4gVGhl IGhlYWRCYXRjaCBpcyBhbiBpbmRleCBvZiB0aGUgYmF0Y2ggd2UncmUKKwkgKiBjdXJyZW50bHkg cmVhZGluZyBmcm9tICh0aGlzIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgYnkgbW9kdWxvCisJICog SU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyBpbnRvIGluZGV4IGluIHRoZSBiYXRjaGVzIGFycmF5KS4K KwkgKi8KKwlpbnQJCQloZWFkQmF0Y2g7CQkvKiBoZWFkIGJhdGNoIHNsb3QgKi8KKwlpbnQJCQlu ZXh0QmF0Y2g7CQkvKiBuZXh0IGVtcHR5IGJhdGNoIHNsb3QgKi8KKworCS8qIEFycmF5IG9mIHBv aW50ZXJzIHRvIGNhY2hlZCByZWN5Y2xhYmxlIGJhdGNoZXMgKi8KKwlCYXRjaEluZGV4U2NhbiBj YWNoZVtJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVNdOworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMg dG8gcXVldWVkIGJhdGNoZXMgKi8KKwlCYXRjaEluZGV4U2NhbiBiYXRjaGVzW0lOREVYX1NDQU5f TUFYX0JBVENIRVNdOworCit9IEJhdGNoUXVldWU7CisKIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVt ZW50YXRpb247CiAKIC8qCkBAIC0xNDIsNiArMzExLDEzIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4 U2NhbkRlc2NEYXRhCiAJaW50CQkJbnVtYmVyT2ZPcmRlckJ5czsJLyogbnVtYmVyIG9mIG9yZGVy aW5nIG9wZXJhdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqa2V5RGF0YTsJLyogYXJyYXkg b2YgaW5kZXggcXVhbGlmaWVyIGRlc2NyaXB0b3JzICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICpv cmRlckJ5RGF0YTsJLyogYXJyYXkgb2Ygb3JkZXJpbmcgb3AgZGVzY3JpcHRvcnMgKi8KKworCS8q IGluZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0YXRlICovCisJdm9pZAkgICAqb3BhcXVl OwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5mbyAqLworCisJLyogdGFibGUgYWNjZXNz IG1ldGhvZCdzIHByaXZhdGUgYW1nZXRiYXRjaCBzdGF0ZSAqLworCUJhdGNoUXVldWUgKmJhdGNo cXVldWU7CQkvKiBhbWdldGJhdGNoIHJlbGF0ZWQgc3RhdGUgKi8KKwogCWJvb2wJCXhzX3dhbnRf aXR1cDsJLyogY2FsbGVyIHJlcXVlc3RzIGluZGV4IHR1cGxlcyAqLwogCWJvb2wJCXhzX3RlbXBf c25hcDsJLyogdW5yZWdpc3RlciBzbmFwc2hvdCBhdCBzY2FuIGVuZD8gKi8KIApAQCAtMTUwLDkg KzMyNiwxNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWJvb2wJCWlnbm9y ZV9raWxsZWRfdHVwbGVzOwkvKiBkbyBub3QgcmV0dXJuIGtpbGxlZCBlbnRyaWVzICovCiAJYm9v bAkJeGFjdFN0YXJ0ZWRJblJlY292ZXJ5OwkvKiBwcmV2ZW50cyBraWxsaW5nL3NlZWluZyBraWxs ZWQKIAkJCQkJCQkJCQkgKiB0dXBsZXMgKi8KKwkvKiBhbWdldGJhdGNoIGNhbiBzYWZlbHkgZHJv cCBwaW5zIG9uIHJldHVybmVkIGJhdGNoJ3MgaW5kZXggcGFnZT8gKi8KKwlib29sCQlkcm9wUGlu OwogCi0JLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KLQl2b2lkCSAg ICpvcGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCisJLyoKKwkgKiBE aWQgd2UgcmVhZCB0aGUgZmluYWwgYmF0Y2ggaW4gdGhpcyBzY2FuIGRpcmVjdGlvbj8gVGhlIGJh dGNoZXMgbWF5IGJlCisJICogbG9hZGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzLCBhbmQgd2UgbmVl ZCB0byByZW1lbWJlciB3aGVuIHdlIGZhaWwgdG8KKwkgKiBsb2FkIHRoZSBuZXh0IGJhdGNoIGlu IGEgZ2l2ZW4gc2NhbiAod2hpY2ggbWVhbnMgIm5vIG1vcmUgYmF0Y2hlcyIpLgorCSAqIGFtZ2V0 YmF0Y2ggbWF5IHJlc3RhcnQgdGhlIHNjYW4gb24gdGhlIGdldCBjYWxsLCBzbyB3ZSBuZWVkIHRv IHJlbWVtYmVyCisJICogaXQncyBvdmVyLgorCSAqLworCWJvb2wJCWZpbmlzaGVkOwogCiAJLyoK IAkgKiBJbnN0cnVtZW50YXRpb24gY291bnRlcnMgbWFpbnRhaW5lZCBieSBhbGwgaW5kZXggQU1z IGR1cmluZyBib3RoCkBAIC0xNzcsNiArMzYxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2Fu RGVzY0RhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhICp4c19oZWFwZmV0Y2g7CiAKIAlib29sCQl4 c19yZWNoZWNrOwkJLyogVCBtZWFucyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KKwl1 aW50MTYJCW1heGl0ZW1zYmF0Y2g7CS8qIHNldCBieSBhbWJlZ2luc2NhbiB3aGVuIGFtZ2V0YmF0 Y2ggdXNlZCAqLwogCiAJLyoKIAkgKiBXaGVuIGZldGNoaW5nIHdpdGggYW4gb3JkZXJpbmcgb3Bl cmF0b3IsIHRoZSB2YWx1ZXMgb2YgdGhlIE9SREVSIEJZCkBAIC0yMTYsNCArNDAxLDYxIEBAIHR5 cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xv dDsKIH0gU3lzU2NhbkRlc2NEYXRhOwogCisvKgorICogQ2hlY2sgdGhhdCBhIHBvc2l0aW9uIChi YXRjaCxpdGVtKSBpcyB2YWxpZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGJhdGNoZXMgd2UKKyAqIGhh dmUgY3VycmVudGx5IGxvYWRlZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitiYXRjaF9hc3Nl cnRfcG9zX3ZhbGlkKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBCYXRjaFF1ZXVlSXRlbVBvcyAq cG9zKQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlCYXRjaFF1ZXVlICpiYXRjaHF1 ZXVlID0gc2Nhbi0+YmF0Y2hxdWV1ZTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgcG9zaXRpb24gaXMg dmFsaWQgZm9yIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hlcyAqLworCUFzc2VydChwb3MtPmJhdGNo ID49IGJhdGNocXVldWUtPmhlYWRCYXRjaCk7CisJQXNzZXJ0KHBvcy0+YmF0Y2ggPCBiYXRjaHF1 ZXVlLT5uZXh0QmF0Y2gpOworI2VuZGlmCit9CisKKy8qCisgKiBDaGVjayBhIHNpbmdsZSBiYXRj aCBpcyB2YWxpZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitiYXRjaF9hc3NlcnRfYmF0Y2hf dmFsaWQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQorewor CS8qIGJhdGNoIG11c3QgaGF2ZSBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyByZXR1cm5lZCBi eSBpbmRleCBBTSAqLworCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtID49IDAgJiYgYmF0Y2gtPmZp cnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCUFzc2VydChiYXRjaC0+aXRlbXMgIT0gTlVM TCk7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2Yga2lsbGVkIGl0ZW1zIG11c3QgYmUgdmFsaWQs IGFuZCB0aGVyZSBtdXN0IGJlIGFuIGFycmF5IG9mCisJICogaW5kZXhlcyBpZiB0aGVyZSBhcmUg aXRlbXMuCisJICovCisJQXNzZXJ0KGJhdGNoLT5udW1LaWxsZWQgPj0gMCk7CisJQXNzZXJ0KCEo YmF0Y2gtPm51bUtpbGxlZCA+IDAgJiYgYmF0Y2gtPmtpbGxlZEl0ZW1zID09IE5VTEwpKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkCitiYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChJbmRleFNj YW5EZXNjRGF0YSAgKnNjYW4pCit7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUJhdGNo UXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCisJLyogd2Ugc2hvdWxkIGhh dmUgYmF0Y2hlcyBpbml0aWFsaXplZCAqLworCUFzc2VydChiYXRjaHF1ZXVlICE9IE5VTEwpOwor CisJLyogVGhlIGhlYWQvbmV4dCBpbmRleGVzIHNob3VsZCBkZWZpbmUgYSB2YWxpZCByYW5nZSAq LworCUFzc2VydChiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPj0gMCAmJgorCQkgICBiYXRjaHF1ZXVl LT5oZWFkQmF0Y2ggPD0gYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKTsKKworCS8qIENoZWNrIGFsbCBj dXJyZW50IGJhdGNoZXMgKi8KKwlmb3IgKGludCBpID0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoOyBp IDwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoOyBpKyspCisJeworCQlCYXRjaEluZGV4U2NhbiBiYXRj aCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgaSk7CisKKwkJYmF0Y2hfYXNzZXJ0X2JhdGNoX3Zh bGlkKHNjYW4sIGJhdGNoKTsKKwl9CisjZW5kaWYKK30KKwogI2VuZGlmCQkJCQkJCS8qIFJFTFND QU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMmZhNzkwYjZiLi5hNTQzNjgyYmIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RhYmxlYW0uaApAQCAtNDMzLDExICs0MzMsMjkgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVB bVJvdXRpbmUKIAkgKi8KIAl2b2lkCQkoKmluZGV4X2ZldGNoX2VuZCkgKHN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICpkYXRhKTsKIAorCS8qCisJICogRmV0Y2ggdGhlIG5leHQgdHVwbGUgZnJv bSBhbiBpbmRleCBzY2FuIGludG8gc2xvdCwgc2Nhbm5pbmcgaW4gdGhlCisJICogc3BlY2lmaWVk IGRpcmVjdGlvbiwgYW5kIHJldHVybiB0cnVlIGlmIGEgdHVwbGUgd2FzIGZvdW5kLCBmYWxzZQor CSAqIG90aGVyd2lzZS4KKwkgKgorCSAqIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRoZSB0YWJsZSBB TSB0byBkaXJlY3RseSBtYW5hZ2UgdGhlIHNjYW4gcHJvY2VzcywKKwkgKiBpbmNsdWRpbmcgaW50 ZXJmYWNpbmcgd2l0aCB0aGUgaW5kZXggQU0uIFRoZSBjYWxsZXIgc2ltcGx5IHNwZWNpZmllcwor CSAqIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNjYW47IHRoZSB0YWJsZSBBTSB0YWtlcyBjYXJlIG9m IHJldHJpZXZpbmcgVElEcworCSAqIGZyb20gdGhlIGluZGV4LCBwZXJmb3JtaW5nIHZpc2liaWxp dHkgY2hlY2tzLCBhbmQgcmV0dXJuaW5nIHR1cGxlcyBpbgorCSAqIHRoZSBzbG90LgorCSAqLwor CWJvb2wJCSgqaW5kZXhfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJ CQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xv dCAqc2xvdCk7CisKIAkvKgogCSAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBh ZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBgc25hcHNob3Rg LiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICogdGVz dCwgcmV0dXJuIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBsb3dl ci1sZXZlbCBjYWxsYmFjayB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkgKiBD YWxsZXJzIHNob3VsZCBmYXZvciB0aGUgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIHdoZW5l dmVyIHBvc3NpYmxlLgorCSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3Nh cmlseSB1cGRhdGUgaW5kZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRvIG5vdCBjaGFu Z2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAqIHRo ZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQg cG9pbnRzIHRvIGFuCkBAIC0xMTg4LDYgKzEyMDYsMjcgQEAgdGFibGVfaW5kZXhfZmV0Y2hfZW5k KHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCXNjYW4tPnJlbC0+cmRfdGFibGVh bS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwogfQogCisvKgorICogRmV0Y2ggdGhlIG5leHQgdHVw bGUgZnJvbSBhbiBpbmRleCBzY2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUKKyAqIHNw ZWNpZmllZCBkaXJlY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFs c2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBpbmRleCBzY2FuIHNob3VsZCBoYXZlIGJlZW4gc3Rh cnRlZCB2aWEgdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oKS4KKyAqIENhbGxlcnMgbXVzdCBjaGVj ayBzY2FuLT54c19yZWNoZWNrIGFuZCByZWNoZWNrIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4KKyAq CisgKiBJbmRleC1vbmx5IHNjYW4gY2FsbGVycyAodGhhdCBwYXNzIHhzX3dhbnRfaXR1cD10cnVl IHRvIGluZGV4X2JlZ2luc2NhbikKKyAqIGNhbiBjb25zdW1lIGluZGV4IHR1cGxlIHJlc3VsdHMg YnkgZXhhbWluaW5nIEluZGV4U2NhbkRlc2NEYXRhIGZpZWxkcyBzdWNoCisgKiBhcyB4c19pdHVw IGFuZCB4c19oaXR1cC4gIFRoZSB0YWJsZSBBTSB3b24ndCB1c3VhbGx5IGZldGNoIGEgaGVhcCB0 dXBsZQorICogaW50byB0aGUgcHJvdmlkZWQgc2xvdCBpbiB0aGUgY2FzZSBvZiB4c193YW50X2l0 dXA9dHJ1ZSBjYWxsZXJzLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK3RhYmxlX2luZGV4X2dl dG5leHRfc2xvdChJbmRleFNjYW5EZXNjIGlkeHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXN0cnVjdCBJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuID0gaWR4c2Nhbi0+eHNfaGVhcGZldGNoOworCisJcmV0dXJuIHNjYW4tPnJl bC0+cmRfdGFibGVhbS0+aW5kZXhfZ2V0bmV4dF9zbG90KGlkeHNjYW4sIGRpcmVjdGlvbiwgc2xv dCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4sIHR1cGxl IGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwogICogYSB2aXNpYmlsaXR5IHRlc3Qg YWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQK QEAgLTEyMTEsNiArMTI1MCw5IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhG ZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVudHJ5IChsaWtlIGhlYXAncyBIT1QpLiBXaGVyZWFz IHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQogICogZXZhbHVhdGVzIHRoZSB0 dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4IGVudHJ5IC0+dGFibGUgdHVw bGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMgd2hhdCdz IHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBpbnRlcmZhY2Ug dGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxsZXJzCisgKiBzaG91bGQgZmF2 b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIgcG9zc2li bGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc3Ry dWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDM5 Njg0MjlmOS4uYzM2OTMyZWRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTc1MSw3ICsxNzUx LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuU3RhdGUKICAqCQlJbnN0cnVtZW50CQkgICBs b2NhbCBpbmRleCBzY2FuIGluc3RydW1lbnRhdGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFs bGVsIHdvcmtlciBpbnN0cnVtZW50YXRpb24gKG5vIGxlYWRlciBlbnRyeSkKICAqCQlUYWJsZVNs b3QJCSAgIHNsb3QgZm9yIGhvbGRpbmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgdGFibGUKLSAq CQlWTUJ1ZmZlcgkJICAgYnVmZmVyIGluIHVzZSBmb3IgdmlzaWJpbGl0eSBtYXAgdGVzdGluZywg aWYgYW55CiAgKgkJUHNjYW5MZW4JCSAgIHNpemUgb2YgcGFyYWxsZWwgaW5kZXgtb25seSBzY2Fu IGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0dE51bXMgYXR0bnVtcyBvZiBuYW1lIHR5cGVk IGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVOCiAgKgkJTmFtZUNTdHJpbmdDb3VudCAgIG51 bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgTmFtZUNTdHJpbmdBdHROdW1zIGFycmF5CkBAIC0xNzc0 LDcgKzE3NzMsNiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUKIAlJbmRleFNj YW5JbnN0cnVtZW50YXRpb24gaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3Ry dW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOwogCVR1cGxlVGFibGVTbG90ICppb3NzX1RhYmxl U2xvdDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIAlB dHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKIAlpbnQJCQlpb3NzX05hbWVDU3Ry aW5nQ291bnQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3Ny Yy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IGI1ZmY0NTZlZi4uNGVkMGYyMmE3IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTM0NCw3ICsxMzQ0LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhPcHRJbmZvCiAJLyogZG9lcyBBTSBoYXZlIGFtZ2V0Yml0bWFwIGludGVyZmFjZT8gKi8K IAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAlib29sCQlhbWNhbnBhcmFsbGVsOwotCS8qIGRvZXMg QU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNlPyAqLworCS8qIGlzIEFNIHByZXBhcmVkIGZvciB1 cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAlib29sCQlhbWNhbm1hcmtwb3M7CiAJLyogQU0ncyBj b3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhlciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBoZXJlLCB3 ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxpa2UgdGhpcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j CmluZGV4IDQ1ZDMwNjAzNy4uMzY0YjM2NTIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0y OTQsMTAgKzI5NCwxMSBAQCBicmluaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCWFtcm91dGlu ZS0+YW1iZWdpbnNjYW4gPSBicmluYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBi cmlucmVzY2FuOwogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5h bWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsKIAlhbXJv dXRpbmUtPmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2Nh biA9IGJyaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRp bmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJ YW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFt aW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0g TlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCmluZGV4IGIzZTJlOWQ1Zi4uYjhmODMxYTMxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKQEAgLTE5NTMsOSArMTk1Myw5IEBAIGdpbmdldGJpdG1h cChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCSAqIGludG8gdGhlIG1haW4g aW5kZXgsIGFuZCBzbyB3ZSBtaWdodCB2aXNpdCBpdCBhIHNlY29uZCB0aW1lIGR1cmluZyB0aGUK IAkgKiBtYWluIHNjYW4uICBUaGlzIGlzIG9rYXkgYmVjYXVzZSB3ZSdsbCBqdXN0IHJlLXNldCB0 aGUgc2FtZSBiaXQgaW4gdGhlCiAJICogYml0bWFwLiAgKFRoZSBwb3NzaWJpbGl0eSBvZiBkdXBs aWNhdGUgdmlzaXRzIGlzIGEgbWFqb3IgcmVhc29uIHdoeSBHSU4KLQkgKiBjYW4ndCBzdXBwb3J0 IHRoZSBhbWdldHR1cGxlIEFQSSwgaG93ZXZlci4pIE5vdGUgdGhhdCBpdCB3b3VsZCBub3QgZG8K LQkgKiB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5j ZSBjb25jdXJyZW50Ci0JICogY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVz IGVudGlyZWx5LgorCSAqIGNhbid0IHN1cHBvcnQgZWl0aGVyIHRoZSBhbWdldHR1cGxlIG9yIGFt Z2V0YmF0Y2ggQVBJLikgTm90ZSB0aGF0IGl0CisJICogd291bGQgbm90IGRvIHRvIHNjYW4gdGhl IG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlCisJICogY29uY3VycmVu dCBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCiAJICov CiAJc2NhblBlbmRpbmdJbnNlcnQoc2NhbiwgdGJtLCAmbnRpZHMpOwogCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2ludXRpbC5jCmluZGV4IDYwNWY4MGFhZC4uMWQyMzMwODdlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dp bnV0aWwuYwpAQCAtODIsMTAgKzgyLDExIEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gZ2luYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1y ZXNjYW4gPSBnaW5yZXNjYW47CiAJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVMTDsKKwlhbXJv dXRpbmUtPmFtZ2V0YmF0Y2ggPSBOVUxMOworCWFtcm91dGluZS0+YW1mcmVlYmF0Y2ggPSBOVUxM OwogCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBnaW5nZXRiaXRtYXA7CiAJYW1yb3V0aW5lLT5h bWVuZHNjYW4gPSBnaW5lbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlh bXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5V TEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRp bmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVz Y2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCBjMjZkODUzOGYuLjBkMjgyYzY5 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAzLDEwICsxMDMsMTEgQEAgZ2lzdGhhbmRs ZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gZ2lzdGJlZ2lu c2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gZ2lzdHJlc2NhbjsKIAlhbXJvdXRpbmUtPmFt Z2V0dHVwbGUgPSBnaXN0Z2V0dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gTlVMTDsK KwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNoID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFw ID0gZ2lzdGdldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IGdpc3RlbmRzY2FuOwot CWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBO VUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGlt YXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9 IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2guYwppbmRleCBlMzg4MjUyYWYuLjcyODlkZjU3NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2gu YwpAQCAtMTAyLDEwICsxMDIsMTEgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlh bXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVz Y2FuID0gaGFzaHJlc2NhbjsKIAlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGU7 CisJYW1yb3V0aW5lLT5hbWdldGJhdGNoID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZnJlZWJhdGNo ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcDsKIAlhbXJv dXRpbmUtPmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuOwotCWFtcm91dGluZS0+YW1tYXJrcG9zID0g TlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1wb3Ny ZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTDsK IAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBh cmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jCmluZGV4IGRkNGZlNmJmNi4uNTAzZmYwOTVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKQEAgLTgxLDEwICs4MSwxMiBAQCBoZWFwYW1fc2xvdF9jYWxsYmFj a3MoUmVsYXRpb24gcmVsYXRpb24pCiBzdGF0aWMgSW5kZXhGZXRjaFRhYmxlRGF0YSAqCiBoZWFw YW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogewotCUluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOworCUluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2Nfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7CiAK IAloc2Nhbi0+eHNfYmFzZS5yZWwgPSByZWw7CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVm ZmVyOworCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJaHNjYW4tPnZtYnVm ID0gSW52YWxpZEJ1ZmZlcjsKIAogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CkBAIC05NCwx MCArOTYsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEg KnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERh dGEgKikgc2NhbjsKIAorCS8qIGRlbGliZXJhdGVseSBkb24ndCBkcm9wIFZNIGJ1ZmZlciBwaW4g aGVyZSAqLwogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAl7CiAJCVJlbGVh c2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCQloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZm ZXI7CisJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJfQogfQogCkBAIC0x MDgsNiArMTEyLDEyIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0 YSAqc2NhbikKIAogCWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChzY2FuKTsKIAorCWlmIChoc2Nh bi0+dm1idWYgIT0gSW52YWxpZEJ1ZmZlcikKKwl7CisJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnZt YnVmKTsKKwkJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwl9CisKIAlwZnJlZShoc2Nh bik7CiB9CiAKQEAgLTEyNSwyMiArMTM1LDMyIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAlBc3NlcnQoVFRTX0lTX0JVRkZFUlRV UExFKHNsb3QpKTsKIAogCS8qIFdlIGNhbiBza2lwIHRoZSBidWZmZXItc3dpdGNoaW5nIGxvZ2lj IGlmIHdlJ3JlIGluIG1pZC1IT1QgY2hhaW4uICovCi0JaWYgKCEqY2FsbF9hZ2FpbikKKwlpZiAo aHNjYW4tPnhzX2JsayAhPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpCiAJewotCQkv KiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICov Ci0JCUJ1ZmZlcgkJcHJldl9idWYgPSBoc2Nhbi0+eHNfY2J1ZjsKKwkJQXNzZXJ0KCEqY2FsbF9h Z2Fpbik7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihoc2Nhbi0+ eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5yZWwsCi0JCQkJCQkJCQkJCSAg SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKwkJLyogUmVtZW1iZXIgdGhpcyBidWZm ZXIncyBibG9jayBudW1iZXIgZm9yIG5leHQgdGltZSAqLworCQloc2Nhbi0+eHNfYmxrID0gSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2Fu LT54c19jYnVmKSkKKwkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCiAJCS8qCi0J CSAqIFBydW5lIHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBvbiB0aGlzIHBh Z2UKKwkJICogV2hlbiB1c2luZyBhIHJlYWQgc3RyZWFtLCB0aGUgc3RyZWFtIHdpbGwgYWxyZWFk eSBrbm93IHdoaWNoIGJsb2NrCisJCSAqIG51bWJlciBjb21lcyBuZXh0ICh0aG91Z2ggYW4gYXNz ZXJ0aW9uIHdpbGwgdmVyaWZ5IGEgbWF0Y2ggYmVsb3cpCiAJCSAqLwotCQlpZiAocHJldl9idWYg IT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNl LnJlbCwgaHNjYW4tPnhzX2NidWYpOworCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNj YW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKKworCQkvKgorCQkgKiBQcnVuZSBwYWdl IHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQorCQkgKi8KKwkJaGVhcF9wYWdl X3BydW5lX29wdChoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19jYnVmKTsKIAl9CiAKKwkv KiBBc3NlcnQgdGhhdCB0aGUgVElEJ3MgYmxvY2sgbnVtYmVyJ3MgYnVmZmVyIGlzIG5vdyBwaW5u ZWQgKi8KKwlBc3NlcnQoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpOworCUFzc2VydChC dWZmZXJHZXRCbG9ja051bWJlcihoc2Nhbi0+eHNfY2J1ZikgPT0gaHNjYW4tPnhzX2Jsayk7CisK IAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5lIHZp c2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19TSEFS RSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKQEAgLTE3 Myw2ICsxOTMsNDY2IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRj aFRhYmxlRGF0YSAqc2NhbiwKIAlyZXR1cm4gZ290X2hlYXBfdHVwbGU7CiB9CiAKKy8qCisgKiBo ZWFwX2JhdGNoX2FkdmFuY2VfcG9zCisgKgkJQWR2YW5jZSB0aGUgcG9zaXRpb24gdG8gdGhlIG5l eHQgaXRlbSwgZGVwZW5kaW5nIG9uIHNjYW4gZGlyZWN0aW9uLgorICoKKyAqIE1vdmUgdG8gdGhl IG5leHQgaXRlbSB3aXRoaW4gdGhlIGJhdGNoIHBvaW50ZWQgdG8gYnkgY2FsbGVyJ3MgcG9zLiAg VGhpcyBpcworICogdXN1YWxseSByZWFkUG9zLiAgQWR2YW5jZXMgdGhlIHBvc2l0aW9uIHRvIHRo ZSBuZXh0IGl0ZW0sIGVpdGhlciBpbiB0aGUKKyAqIHNhbWUgYmF0Y2ggb3IgdGhlIGZvbGxvd2lu ZyBvbmUgKGlmIGFscmVhZHkgYXZhaWxhYmxlKS4KKyAqCisgKiBXZSBjYW4gYWR2YW5jZSBvbmx5 IGlmIHdlIGFscmVhZHkgaGF2ZSBzb21lIGJhdGNoZXMgbG9hZGVkLCBhbmQgdGhlcmUncworICog ZWl0aGVyIGVub3VnaCBpdGVtcyBpbiB0aGUgY3VycmVudCBiYXRjaCwgb3Igc29tZSBtb3JlIGl0 ZW1zIGluIHRoZQorICogc3Vic2VxdWVudCBiYXRjaGVzLgorICoKKyAqIElmIHRoaXMgaXMgdGhl IGZpcnN0IGFkdmFuY2UgKHJpZ2h0IGFmdGVyIGxvYWRpbmcgdGhlIGluaXRpYWwvaGVhZCBiYXRj aCksCisgKiBwb3NpdGlvbiBpcyBzdGlsbCB1bmRlZmluZWQuICBPdGhlcndpc2Ugd2UgZXhwZWN0 IHRoZSBwb3NpdGlvbiB0byBiZSB2YWxpZC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBv c2l0aW9uIHdhcyBhZHZhbmNlZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHBvc2l0aW9uCisgKiBp cyBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIG9ubHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIGFkdmFuY2Uu CisgKi8KK3N0YXRpYyBib29sCitoZWFwX2JhdGNoX2FkdmFuY2VfcG9zKEluZGV4U2NhbkRlc2Mg c2Nhbiwgc3RydWN0IEJhdGNoUXVldWVJdGVtUG9zICpwb3MsCisJCQkJCSAgIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uKQoreworCUJhdGNoSW5kZXhTY2FuIGJhdGNoOworCisJLyogbWFrZSBzdXJl IHdlIGhhdmUgYmF0Y2hpbmcgaW5pdGlhbGl6ZWQgYW5kIGNvbnNpc3RlbnQgKi8KKwliYXRjaF9h c3NlcnRfYmF0Y2hlc192YWxpZChzY2FuKTsKKworCS8qIHNob3VsZCBrbm93IGRpcmVjdGlvbiBi eSBub3cgKi8KKwlBc3NlcnQoZGlyZWN0aW9uID09IHNjYW4tPmJhdGNocXVldWUtPmRpcmVjdGlv bik7CisJQXNzZXJ0KGRpcmVjdGlvbiAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisKKwkv KiBXZSBjYW4ndCBhZHZhbmNlIGlmIHRoZXJlIGFyZSBubyBiYXRjaGVzIGF2YWlsYWJsZS4gKi8K KwlpZiAoSU5ERVhfU0NBTl9CQVRDSF9DT1VOVChzY2FuKSA9PSAwKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKgorCSAqIElmIHRoZSBwb3NpdGlvbiBoYXMgbm90IGJlZW4gYWR2YW5jZWQgeWV0LCBp dCBoYXMgdG8gYmUgcmlnaHQgYWZ0ZXIgd2UKKwkgKiBsb2FkZWQgdGhlIGluaXRpYWwgYmF0Y2gg KG11c3QgYmUgdGhlIGhlYWQgYmF0Y2gpLiBJbiB0aGF0IGNhc2UganVzdAorCSAqIGluaXRpYWxp emUgaXQgdG8gdGhlIGJhdGNoJ3MgZmlyc3QgaXRlbSAob3IgaXRzIGxhc3QgaXRlbSwgd2hlbgor CSAqIHNjYW5uaW5nIGJhY2t3YXJkcykuCisJICovCisJaWYgKElOREVYX1NDQU5fUE9TX0lOVkFM SUQocG9zKSkKKwl7CisJCS8qCisJCSAqIFdlIHNob3VsZCBoYXZlIGxvYWRlZCB0aGUgc2Nhbidz IGluaXRpYWwgYmF0Y2gsIG9yIG1heWJlIHdlIGhhdmUKKwkJICogY2hhbmdlZCB0aGUgZGlyZWN0 aW9uIG9mIHRoZSBzY2FuIGFmdGVyIHNjYW5uaW5nIGFsbCB0aGUgd2F5IHRvIHRoZQorCQkgKiBl bmQgKGluIHdoaWNoIGNhc2UgdGhlIHBvc2l0aW9uIGlzIGludmFsaWQsIGFuZCB3ZSBtYWtlIGl0 IGxvb2sKKwkJICogbGlrZSB0aGVyZSBpcyBqdXN0IG9uZSBiYXRjaCkuIFdlIHNob3VsZCBoYXZl IGp1c3Qgb25lIGJhdGNoLAorCQkgKiB0aG91Z2guCisJCSAqLworCQlBc3NlcnQoSU5ERVhfU0NB Tl9CQVRDSF9DT1VOVChzY2FuKSA9PSAxKTsKKworCQkvKgorCQkgKiBHZXQgdGhlIGluaXRpYWwg YmF0Y2ggKHdoaWNoIG11c3QgYmUgdGhlIGhlYWQpLCBhbmQgaW5pdGlhbGl6ZSB0aGUKKwkJICog cG9zaXRpb24gdG8gdGhlIGFwcHJvcHJpYXRlIGl0ZW0gZm9yIHRoZSBjdXJyZW50IHNjYW4gZGly ZWN0aW9uCisJCSAqLworCQliYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2Nhbiwgc2Nhbi0+YmF0 Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKKworCQlwb3MtPmJhdGNoID0gc2Nhbi0+YmF0Y2hxdWV1ZS0+ aGVhZEJhdGNoOworCisJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJ CQlwb3MtPml0ZW0gPSBiYXRjaC0+Zmlyc3RJdGVtOworCQllbHNlCisJCQlwb3MtPml0ZW0gPSBi YXRjaC0+bGFzdEl0ZW07CisKKwkJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCBwb3MpOwor CisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogVGhlIHBvc2l0aW9uIGlzIGFscmVhZHkg ZGVmaW5lZCwgc28gd2Ugc2hvdWxkIGhhdmUgc29tZSBiYXRjaGVzIGxvYWRlZAorCSAqIGFuZCB0 aGUgcG9zaXRpb24gaGFzIHRvIGJlIHZhbGlkIHdpdGggcmVzcGVjdCB0byB0aG9zZS4KKwkgKi8K KwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHBvcyk7CisKKwkvKgorCSAqIEFkdmFuY2Ug dG8gdGhlIG5leHQgaXRlbSBpbiB0aGUgc2FtZSBiYXRjaCwgaWYgdGhlcmUgYXJlIG1vcmUgaXRl bXMuIElmCisJICogd2UncmUgYXQgdGhlIGxhc3QgaXRlbSwgd2UnbGwgdHJ5IGFkdmFuY2luZyB0 byB0aGUgbmV4dCBiYXRjaCBsYXRlci4KKwkgKi8KKwliYXRjaCA9IElOREVYX1NDQU5fQkFUQ0go c2NhbiwgcG9zLT5iYXRjaCk7CisKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rp b24pKQorCXsKKwkJaWYgKCsrcG9zLT5pdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSkKKwkJeworCQkJ YmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCBwb3MpOworCisJCQlyZXR1cm4gdHJ1ZTsKKwkJ fQorCX0KKwllbHNlCQkJCQkJLyogU2NhbkRpcmVjdGlvbklzQmFja3dhcmQgKi8KKwl7CisJCWlm ICgtLXBvcy0+aXRlbSA+PSBiYXRjaC0+Zmlyc3RJdGVtKQorCQl7CisJCQliYXRjaF9hc3NlcnRf cG9zX3ZhbGlkKHNjYW4sIHBvcyk7CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJLyoK KwkgKiBXZSBjb3VsZG4ndCBhZHZhbmNlIHdpdGhpbiB0aGUgc2FtZSBiYXRjaCwgdHJ5IGFkdmFu Y2luZyB0byB0aGUgbmV4dAorCSAqIGJhdGNoLCBpZiBpdCdzIGFscmVhZHkgbG9hZGVkLgorCSAq LworCWlmIChJTkRFWF9TQ0FOX0JBVENIX0xPQURFRChzY2FuLCBwb3MtPmJhdGNoICsgMSkpCisJ eworCQkvKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGJhdGNoICovCisJCXBvcy0+YmF0Y2grKzsKKwor CQliYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgcG9zLT5iYXRjaCk7CisKKwkJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCXBvcy0+aXRlbSA9IGJhdGNoLT5m aXJzdEl0ZW07CisJCWVsc2UKKwkJCXBvcy0+aXRlbSA9IGJhdGNoLT5sYXN0SXRlbTsKKworCQli YXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHBvcyk7CisKKwkJcmV0dXJuIHRydWU7CisJfQor CisJLyogY2FuJ3QgYWR2YW5jZSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyogLS0tLS0tLS0t LS0tLS0tLQorICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCAtIGdldCBuZXh0IFRJRCBmcm9t IGluZGV4IHNjYW4gYmF0Y2ggcXVldWUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMg aGVhcGFtJ3MgdmVyc2lvbiBvZiBnZXR0aW5nIHRoZSBuZXh0IFRJRCBmcm9tIGFuCisgKiBpbmRl eCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICBJdCBpcyBpbXBsZW1l bnRlZCB1c2luZworICogdmFyaW91cyBpbmRleGJhdGNoLmMgdXRpbGl0eSByb3V0aW5lcy4KKyAq CisgKiBUaGUgcm91dGluZXMgZnJvbSBpbmRleGJhdGNoLmMgYXJlIHN0YXRlbGVzcyAtLSB0aGV5 IGp1c3QgaW1wbGVtZW50IGJhdGNoCisgKiBxdWV1ZSBtZWNoYW5pY3MuICBoZWFwYW1fYmF0Y2hf Z2V0bmV4dF90aWQgaW1wbGVtZW50cyB0aGUgaGVhcGFtIHBvbGljeTsgaXQKKyAqIGRlY2lkZXMg d2hlbiB0byBsb2FkL2ZyZWUgYmF0Y2hlcywgYW5kIGNvbnRyb2xzIHNjYW4gZGlyZWN0aW9uIGNo YW5nZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBJdGVtUG9pbnRlcgoraGVh cGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24pCit7CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7 CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnJlYWRQb3M7CisKKwkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUg d2l0aG91dCBiYXRjaGluZyAqLworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOwor CisJLyogSW5pdGlhbGl6ZSBkaXJlY3Rpb24gb24gZmlyc3QgY2FsbCAqLworCWlmIChiYXRjaHF1 ZXVlLT5kaXJlY3Rpb24gPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCisJCWJhdGNocXVldWUt PmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwllbHNlIGlmICh1bmxpa2VseShiYXRjaHF1ZXVlLT5k aXJlY3Rpb24gIT0gZGlyZWN0aW9uKSkKKwl7CisJCS8qCisJCSAqIEhhbmRsZSBhIGNoYW5nZSBp biB0aGUgc2NhbidzIGRpcmVjdGlvbi4KKwkJICoKKwkJICogUmVsZWFzZSBmdXR1cmUgYmF0Y2hl cyBwcm9wZXJseSwgdG8gbWFrZSBpdCBsb29rIGxpa2UgdGhlIGN1cnJlbnQKKwkJICogYmF0Y2gg aXMgdGhlIG9ubHkgb25lIHdlIGxvYWRlZC4KKwkJICovCisJCXdoaWxlIChiYXRjaHF1ZXVlLT5u ZXh0QmF0Y2ggPiBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggKyAxKQorCQl7CisJCQkvKiByZWxlYXNl ICJsYXRlciIgYmF0Y2hlcyBpbiByZXZlcnNlIG9yZGVyICovCisJCQlCYXRjaEluZGV4U2NhbiBm YmF0Y2g7CisKKwkJCWJhdGNocXVldWUtPm5leHRCYXRjaC0tOworCQkJZmJhdGNoID0gSU5ERVhf U0NBTl9CQVRDSChzY2FuLCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gpOworCQkJYmF0Y2hfZnJlZShz Y2FuLCBmYmF0Y2gpOworCQl9CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIG5ldyBkaXJlY3Rp b24sIGFuZCBtYWtlIHN1cmUgdGhlIHNjYW4gaXMgbm90IG1hcmtlZCBhcworCQkgKiAiZmluaXNo ZWQiICh3ZSBtaWdodCBoYXZlIGFscmVhZHkgcmVhZCB0aGUgbGFzdCBiYXRjaCwgYnV0IG5vdyB3 ZQorCQkgKiBuZWVkIHRvIHN0YXJ0IG92ZXIpLgorCQkgKi8KKwkJYmF0Y2hxdWV1ZS0+ZGlyZWN0 aW9uID0gZGlyZWN0aW9uOworCQlzY2FuLT5maW5pc2hlZCA9IGZhbHNlOworCX0KKworCS8qIHNo b3J0Y3V0IGZvciB0aGUgcmVhZCBwb3NpdGlvbiwgZm9yIGNvbnZlbmllbmNlICovCisJcmVhZFBv cyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9zOworCisJLyoKKwkgKiBUcnkgYWR2YW5jaW5nIHRoZSBi YXRjaCBwb3NpdGlvbi4gSWYgdGhhdCBkb2Vzbid0IHN1Y2NlZWQsIGl0IG1lYW5zIHdlCisJICog ZG9uJ3QgaGF2ZSBtb3JlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGJhdGNoLCBhbmQgdGhlcmUncyBu byBmdXR1cmUgYmF0Y2gKKwkgKiBsb2FkZWQuIFNvIHRyeSBsb2FkaW5nIGFub3RoZXIgYmF0Y2gs IGFuZCByZXRyeSBpZiBuZWVkZWQuCisJICovCisJd2hpbGUgKHRydWUpCisJeworCQkvKgorCQkg KiBJZiB3ZSBtYW5hZ2UgdG8gYWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtcywgcmV0dXJuIGl0IGFu ZCB3ZSdyZQorCQkgKiBkb25lLiBPdGhlcndpc2UgdHJ5IGxvYWRpbmcgYW5vdGhlciBiYXRjaC4K KwkJICovCisJCWlmIChoZWFwX2JhdGNoX2FkdmFuY2VfcG9zKHNjYW4sIHJlYWRQb3MsIGRpcmVj dGlvbikpCisJCXsKKwkJCUJhdGNoSW5kZXhTY2FuIHJlYWRCYXRjaCA9IElOREVYX1NDQU5fQkFU Q0goc2NhbiwgcmVhZFBvcy0+YmF0Y2gpOworCisJCQkvKiBzZXQgdGhlIFRJRCAvIGl0dXAgZm9y IHRoZSBzY2FuICovCisJCQlzY2FuLT54c19oZWFwdGlkID0gcmVhZEJhdGNoLT5pdGVtc1tyZWFk UG9zLT5pdGVtXS5oZWFwVGlkOworCisJCQkvKiB4c19oaXR1cCBpcyBub3Qgc3VwcG9ydGVkIGJ5 IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KKwkJCUFzc2VydCghc2Nhbi0+eHNfaGl0dXApOworCisJCQlp ZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQkJCXNjYW4tPnhzX2l0dXAgPQorCQkJCQkoSW5kZXhU dXBsZSkgKHJlYWRCYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJCQkJCSAgcmVhZEJhdGNoLT5pdGVt c1tyZWFkUG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSBhZHZh bmNlZCB0byB0aGUgbmV4dCBiYXRjaCwgcmVsZWFzZSB0aGUgYmF0Y2ggd2Ugbm8KKwkJCSAqIGxv bmdlciBuZWVkLiBUaGUgcG9zaXRpb25zIGlzIHRoZSAicmVhZCIgcG9zaXRpb24sIGFuZCB3ZSBj YW4KKwkJCSAqIGNvbXBhcmUgaXQgdG8gaGVhZEJhdGNoLgorCQkJICovCisJCQlpZiAodW5saWtl bHkocmVhZFBvcy0+YmF0Y2ggIT0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKSkKKwkJCXsKKwkJCQlC YXRjaEluZGV4U2NhbiBoZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sCisJCQkJCQkJ CQkJCQkJCQliYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpOworCisJCQkJLyogRnJlZSB0aGUgaGVhZCBi YXRjaCAoZXhjZXB0IHdoZW4gaXQncyBtYXJrQmF0Y2gpICovCisJCQkJYmF0Y2hfZnJlZShzY2Fu LCBoZWFkQmF0Y2gpOworCisJCQkJLyoKKwkJCQkgKiBJbiBhbnkgY2FzZSwgcmVtb3ZlIHRoZSBi YXRjaCBmcm9tIHRoZSByZWd1bGFyIHF1ZXVlLCBldmVuCisJCQkJICogaWYgd2Uga2VwdCBpdCBm b3IgbWFyay9yZXN0b3JlLgorCQkJCSAqLworCQkJCWJhdGNocXVldWUtPmhlYWRCYXRjaCsrOwor CisJCQkJLyogd2UgY2FuJ3Qgc2tpcCBhbnkgYmF0Y2hlcyAqLworCQkJCUFzc2VydChiYXRjaHF1 ZXVlLT5oZWFkQmF0Y2ggPT0gcmVhZFBvcy0+YmF0Y2gpOworCQkJfQorCisJCQlwZ3N0YXRfY291 bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVsYXRpb24sIDEpOworCQkJcmV0dXJuICZzY2Fu LT54c19oZWFwdGlkOworCQl9CisKKwkJLyoKKwkJICogRmFpbGVkIHRvIGFkdmFuY2UgdGhlIHJl YWQgcG9zaXRpb24uICBIYXZlIGluZGV4YmF0Y2guYyB1dGlsaXR5CisJCSAqIHJvdXRpbmUgbG9h ZCBhbm90aGVyIGJhdGNoIGludG8gb3VyIHF1ZXVlIChuZXh0IGluIHRoaXMgZGlyZWN0aW9uKS4K KwkJICovCisJCWlmICghYmF0Y2hfZ2V0bmV4dChzY2FuLCBkaXJlY3Rpb24pKQorCQl7CisJCQkv KiB3ZSdyZSBkb25lIC0tIHRoZXJlJ3Mgbm8gbW9yZSBiYXRjaGVzIGluIHRoaXMgc2NhbiBkaXJl Y3Rpb24gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSBnZXQgaGVyZSwg d2UgZmFpbGVkIHRvIGFkdmFuY2UgdGhlIHBvc2l0aW9uIGFuZCB0aGVyZSBhcmUgbm8gbW9yZQor CSAqIGJhdGNoZXMgdG8gYmUgbG9hZGVkIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLiAg RGVmZW5zaXZlbHkgcmVzZXQKKwkgKiB0aGUgcmVhZCBwb3NpdGlvbi4KKwkgKi8KKwliYXRjaF9y ZXNldF9wb3MocmVhZFBvcyk7CisJQXNzZXJ0KHNjYW4tPmZpbmlzaGVkKTsKKworCXJldHVybiBO VUxMOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdl dCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQorICoKKyAqIFRoZSByZXN1bHQgaXMgYSB2aXNp YmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmRleCBUSUQgbW9zdAorICogcmVj ZW50bHkgZmV0Y2hlZCBieSBvdXIgY2FsbGVyIGluIHNjYW4tPnhzX2hlYXB0aWQsIG9yIE5VTEwg aWYgbm8gbW9yZQorICogbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3Jl IHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2UKKyAqIG9mIEhPVCBjaGFpbnMsIGFsdGhv dWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZQor ICogZm9yIG1vcmUgdGhhbiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4pCisgKgorICogT24gc3Vj Y2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQuICBUaGUg cGluIG11c3QgYmUKKyAqIGRyb3BwZWQgZWxzZXdoZXJlLgorICogLS0tLS0tLS0tLS0tLS0tLQor ICovCitzdGF0aWMgYm9vbAoraW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1 cGxlVGFibGVTbG90ICpzbG90KQoreworCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CisJYm9vbAkJ Zm91bmQ7CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19oZWFw ZmV0Y2gsICZzY2FuLT54c19oZWFwdGlkLAorCQkJCQkJCQkJIHNjYW4tPnhzX3NuYXBzaG90LCBz bG90LAorCQkJCQkJCQkJICZzY2FuLT54c19oZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQpOworCisJ aWYgKGZvdW5kKQorCQlwZ3N0YXRfY291bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0aW9u KTsKKworCS8qCisJICogSWYgd2Ugc2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQg b25seSBkZWFkIHR1cGxlcywgcmVtZW1iZXIgaXQKKwkgKiBmb3IgbGF0ZXIuICBXZSBkbyBub3Qg ZG8gdGhpcyB3aGVuIGluIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUKKwkgKiBNVkND IHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCisJICov CisJaWYgKCFzY2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCisJeworCQlpZiAoc2Nhbi0+YmF0 Y2hxdWV1ZSkKKwkJeworCQkJaWYgKGFsbF9kZWFkKQorCQkJCWluZGV4X2JhdGNoX2tpbGxfaXRl bShzY2FuKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBUZWxsIGFtZ2V0dHVwbGUt YmFzZWQgaW5kZXggQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElECisJCQkgKiAodGhp cyB3aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0IGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlk KQorCQkJICovCisJCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7CisJCX0KKwl9 CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1f aW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCisgKgor ICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlz IGFuZCB0aGUgc25hcHNob3Qgd2FzCisgKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1 cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNsb3QuCisgKgorICogT24gc3VjY2Vzcywg cmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3 aWxsIGJlCisgKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBsYXRlciBj YWxsIHRvIGluZGV4X2VuZHNjYW4pLgorICoKKyAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNj YW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCisgKiBzY2FuIGtl eXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qg aGF2ZQorICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBn ZW5lcmFsIGNhc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBib29sCitoZWFw YW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24sCisJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCUluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRj aDsKKwlJdGVtUG9pbnRlciB0aWQgPSBOVUxMOworCisJZm9yICg7OykKKwl7CisJCWlmICghc2Nh bi0+eHNfaGVhcF9jb250aW51ZSkKKwkJeworCQkJLyoKKwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFu IGFtZ2V0YmF0Y2ggaW5kZXggQU0gYXJlIG1hbmFnZWQgYnkgaGVhcGFtJ3MKKwkJCSAqIGluZGV4 IHNjYW4gbWFuYWdlci4gIFRoaXMgZ2l2ZXMgaGVhcGFtIHRoZSBhYmlsaXR5IHRvIHJlYWQgaGVh cAorCQkJICogdHVwbGVzIGluIGEgZmxleGlibGUgb3JkZXIgdGhhdCBpcyBhdHR1bmVkIHRvIGJv dGggY29zdHMgYW5kCisJCQkgKiBiZW5lZml0cyBvbiB0aGUgaGVhcGFtIGFuZCB0YWJsZSBBTSBz aWRlLgorCQkJICoKKwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0dHVwbGUgaW5kZXggQU0g c2ltcGx5IGNhbGwgdGhyb3VnaCB0bworCQkJICogaW5kZXhfZ2V0bmV4dF90aWQgdG8gZ2V0IHRo ZSBuZXh0IFRJRCByZXR1cm5lZCBieSBpbmRleCBBTS4gVGhlCisJCQkgKiBwcm9ncmVzcyBvZiB0 aGUgc2NhbiB3aWxsIGJlIHVuZGVyIHRoZSBjb250cm9sIG9mIGluZGV4IEFNICh3ZQorCQkJICog anVzdCBwYXNzIGl0IHRocm91Z2ggYSBkaXJlY3Rpb24gdG8gZ2V0IHRoZSBuZXh0IHR1cGxlIGlu KSwgc28KKwkJCSAqIHdlIGNhbm5vdCByZW9yZGVyIGFueSB3b3JrLgorCQkJICovCisJCQlpZiAo c2Nhbi0+YmF0Y2hxdWV1ZSAhPSBOVUxMKQorCQkJCXRpZCA9IGhlYXBhbV9iYXRjaF9nZXRuZXh0 X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCQkJZWxzZQorCQkJCXRpZCA9IGluZGV4X2dldG5leHRf dGlkKHNjYW4sIGRpcmVjdGlvbik7CisKKwkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRy aWVzLCB3ZSdyZSBkb25lICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQkJYnJlYWs7CisJCX0K KworCQkvKgorCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxl IGZvciB0aGlzIGluZGV4IGVudHJ5LgorCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBs b29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQorCQkgKiB0aGUgaW5kZXguCisJ CSAqLworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7CisJ CWlmICghc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQkvKiBQbGFpbiBpbmRleCBzY2FuICov CisJCQlpZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKKwkJCQlyZXR1cm4gdHJ1ZTsK KwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBJbmRleC1vbmx5IHNjYW4uCisJCQkgKgor CQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEg aGVhcCBwYWdlIG9uCisJCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRv IGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAorCQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBs ZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEKKwkJCSAqIHNvdXJjZS4KKwkJCSAqCisJ CQkgKiBOb3RlIG9uIE1lbW9yeSBPcmRlcmluZyBFZmZlY3RzOiB2aXNpYmlsaXR5bWFwX2dldF9z dGF0dXMgZG9lcworCQkJICogbm90IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5k IHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlCisJCQkgKiByZWFkIGhlcmUgY291bGQgYmUgc2xpZ2h0 bHkgc3RhbGUuICBIb3dldmVyLCBpdCBjYW4ndCBiZSBzdGFsZQorCQkJICogZW5vdWdoIHRvIG1h dHRlci4KKwkJCSAqCisJCQkgKiBXZSBuZWVkIHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBk dWUgdG8gYW4gaW5zZXJ0IHJpZ2h0CisJCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBw cmVzZW50IGluIHRoZSBpbmRleCBwYWdlIGJ1dCBub3QKKwkJCSAqIHZpc2libGUuIFRoZSByZWFk aW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZAorCQkJICogbG9jayBv biB0aGUgaW5kZXggYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydCBvZiB0aGUK KwkJCSAqIFRJRCBpbnRvIHRoZSBpbmRleCAodXNpbmcgYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhl IGluZGV4CisJCQkgKiBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZCBiZWZv cmUgdXBkYXRpbmcgdGhlCisJCQkgKiBpbmRleCwgYW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRo ZSBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsCisJCQkgKiBtZW1vcnkgYmFycmllciwgd2UgYXJl IHN1cmUgdG8gc2VlIHRoZSBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUgYQorCQkJICogcmVjZW50bHkt aW5zZXJ0ZWQgVElELgorCQkJICoKKwkJCSAqIERlbGV0ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5k ZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhcgorCQkJICogb3V0IHRoZSBUSUQpLCBzbyB0 aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKKwkJCSAqIHNlcmlh bGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBp cworCQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2UgZG9uJ3QgY2FyZSBhYm91 dCB0aGUgZGVsZXRlCisJCQkgKiByaWdodCBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGls bCB2aXNpYmxlIHVudGlsIHRoZQorCQkJICogZGVsZXRpbmcgdHJhbnNhY3Rpb24gY29tbWl0cyBv ciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCisJCQkgKiB0cmFuc2FjdGlvbikuIElu IGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwKKwkJCSAqIGhhdmUg YmVlbiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcK KwkJCSAqIHRoZSBiaXQuIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVk ZXMgdGhlCisJCQkgKiBkZWxldGluZyB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZSBpbnZp c2libGUpLCB3ZSBtdXN0IGhhdmUKKwkJCSAqIGFjcXVpcmVkIFByb2NBcnJheUxvY2sgYWZ0ZXIg dGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkCisJCQkgKiBiYXJyaWVyLgorCQkJICoKKwkJCSAq IEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGlu ZyB0bworCQkJICogbG9jayB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZp Y2FudCBjb250ZW50aW9uLgorCQkJICovCisJCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhzY2FuLT54 c19iYXNlLnJlbCwKKwkJCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJ CQkJCQkmaHNjYW4tPnZtYnVmKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUg dG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlpZiAo c2Nhbi0+aW5zdHJ1bWVudCkKKwkJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzKys7 CisKKwkJCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQkJCWNvbnRpbnVl OwkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLworCisJCQkJRXhl Y0NsZWFyVHVwbGUoc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMg YXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGluZGV4LW9ubHkKKwkJCQkgKiBzY2Fucywgc28g dGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVAorCQkJCSAq IGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgT3RoZXIgY2FsbGVy cworCQkJCSAqIChjdXJyZW50bHkgb25seSBzZWxmdW5jcy5jKSB1c2UgU25hcHNob3ROb25WYWN1 dW1hYmxlLCBhbmQKKwkJCQkgKiB3YW50IHVzIHRvIGFzc3VtZSB0aGF0IGp1c3QgaGF2aW5nIG9u ZSB2aXNpYmxlIHR1cGxlIGluIHRoZQorCQkJCSAqIGhvdCBjaGFpbiBpcyBhbHdheXMgZ29vZCBl bm91Z2guCisJCQkJICovCisJCQkJQXNzZXJ0KCEoc2Nhbi0+eHNfaGVhcF9jb250aW51ZSAmJgor CQkJCQkJIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCisJCQkJLyoKKwkJ CQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHdlIGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFw IHBhZ2UsCisJCQkJICogYXMgcmVjb3JkZWQgaW4gSW5kZXhGZXRjaEhlYXBEYXRhLnhzX2NidWYu ICBXZSBjb3VsZAorCQkJCSAqIHJlbGVhc2UgdGhhdCBwaW4gbm93LCBidXQgd2UgcHJlZmVyIHRv IGhvbGQgb24gdG8gVk0gcGlucy4KKwkJCQkgKiBpdCdzIHF1aXRlIHBvc3NpYmxlIHRoYXQgdGhl IGluZGV4IGVudHJ5IHdpbGwgcmVxdWlyZSBhCisJCQkJICogdmlzaXQgdG8gdGhlIHNhbWUgaGVh cCBwYWdlLiAgSXQncyBldmVuIG1vcmUgbGlrZWx5IHRoYXQKKwkJCQkgKiB0aGUgaW5kZXggZW50 cnkgd2lsbCBmb3JjZSB1cyB0byBwZXJmb3JtIGEgbG9va3VwIHRoYXQgdXNlcworCQkJCSAqIHRo ZSBzYW1lIGFscmVhZHktcGlubmVkIFZNIHBhZ2UuCisJCQkJICovCisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCBzbyB3ZSdsbCBu ZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRpY2F0ZSBsb2NrIGV4cGxpY2l0bHksIGFzIGlmIHdl IGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkgKiB0aGF0IGF0IHBhZ2UgbGV2ZWwuCisJCQkJICov CisJCQkJUHJlZGljYXRlTG9ja1BhZ2UoaHNjYW4tPnhzX2Jhc2UucmVsLAorCQkJCQkJCQkgIEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJICBzY2FuLT54c19zbmFwc2hv dCk7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOwor fQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBv cGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzIGZvciBoZWFwIEFNCkBAIC03NTMsNyArMTIz Myw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAs IFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBO VUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNu YXBzaG90QW55LCBOVUxMLCAwLCAwKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9s ZEhlYXAsIE9sZEluZGV4LCBmYWxzZSwgU25hcHNob3RBbnksCisJCQkJCQkJCQlOVUxMLCAwLCAw KTsKIAkJaW5kZXhfcmVzY2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwgMCk7CiAJfQogCWVs c2UKQEAgLTc5MCw3ICsxMjcxLDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIo UmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQlpZiAoaW5kZXhTY2FuICE9 IE5VTEwpCiAJCXsKLQkJCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQkJaWYgKCFoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90 KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkJICAgc2xvdCkpCiAJ CQkJYnJlYWs7CiAKIAkJCS8qIFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBrZXlzLCBzaG91bGQgbmV2 ZXIgbmVlZCB0byByZWNoZWNrICovCkBAIC0yNjMzLDYgKzMxMTUsNyBAQCBzdGF0aWMgY29uc3Qg VGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4X2ZldGNoX2JlZ2luID0g aGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9yZXNldCA9IGhlYXBhbV9p bmRleF9mZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFtX2luZGV4X2ZldGNo X2VuZCwKKwkuaW5kZXhfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCwK IAkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUsCiAKIAkudHVw bGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmls ZQppbmRleCA2ZjJlMzA2MWEuLmU2ZDY4MWI0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmls ZQpAQCAtMTYsNiArMTYsNyBAQCBPQkpTID0gXAogCWFtYXBpLm8gXAogCWFtdmFsaWRhdGUubyBc CiAJZ2VuYW0ubyBcCi0JaW5kZXhhbS5vCisJaW5kZXhhbS5vIFwKKwlpbmRleGJhdGNoLm8KIAog aW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYwppbmRleCBiN2YxMGExYWUuLjhkY2QwNmIwYSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMKQEAgLTg5LDYgKzg5LDggQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhzX3NuYXBz aG90ID0gSW52YWxpZFNuYXBzaG90OwkvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8K IAlzY2FuLT5udW1iZXJPZktleXMgPSBua2V5czsKIAlzY2FuLT5udW1iZXJPZk9yZGVyQnlzID0g bm9yZGVyYnlzOworCXNjYW4tPmJhdGNocXVldWUgPSBOVUxMOwkvKiBzZXQgbGF0ZXIgZm9yIGFt Z2V0YmF0Y2ggY2FsbGVycyAqLworCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGZhbHNlOyAvKiBjYWxs ZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAogCS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdv cmtzcGFjZSBoZXJlLCBidXQgaXQgd29uJ3QgZ2V0IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAg LTEwMiw4ICsxMDQsNiBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0 aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJZWxzZQogCQlzY2FuLT5vcmRlckJ5RGF0 YSA9IE5VTEw7CiAKLQlzY2FuLT54c193YW50X2l0dXAgPSBmYWxzZTsgLyogbWF5IGJlIHNldCBs YXRlciAqLwotCiAJLyoKIAkgKiBEdXJpbmcgcmVjb3Zlcnkgd2UgaWdub3JlIGtpbGxlZCB0dXBs ZXMgYW5kIGRvbid0IGJvdGhlciB0byBraWxsIHRoZW0KIAkgKiBlaXRoZXIuIFdlIGRvIHRoaXMg YmVjYXVzZSB0aGUgeG1pbiBvbiB0aGUgcHJpbWFyeSBub2RlIGNvdWxkIGVhc2lseSBiZQpAQCAt MTE1LDYgKzExNSw4IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAkgKiBzaG91bGQgbm90IGJlIGFsdGVyZWQg YnkgaW5kZXggQU1zLgogCSAqLwogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsKKwlz Y2FuLT5kcm9wUGluID0gdHJ1ZTsJCS8qIGZvciBub3cgKi8KKwlzY2FuLT5maW5pc2hlZCA9IGZh bHNlOwogCXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSA9IFRyYW5zYWN0aW9uU3RhcnRlZER1 cmluZ1JlY292ZXJ5KCk7CiAJc2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgPSAhc2Nhbi0+eGFj dFN0YXJ0ZWRJblJlY292ZXJ5OwogCkBAIC00NDYsNyArNDQ4LDcgQEAgc3lzdGFibGVfYmVnaW5z Y2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5v dCBpbiBpbmRleCIpOwogCQl9CiAKLQkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4o aGVhcFJlbGF0aW9uLCBpcmVsLAorCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2Nhbiho ZWFwUmVsYXRpb24sIGlyZWwsIGZhbHNlLAogCQkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtl eXMsIDApOwogCQlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5V TEwsIDApOwogCQlzeXNzY2FuLT5zY2FuID0gTlVMTDsKQEAgLTUxNyw3ICs1MTksOCBAQCBzeXN0 YWJsZV9nZXRuZXh0KFN5c1NjYW5EZXNjIHN5c3NjYW4pCiAKIAlpZiAoc3lzc2Nhbi0+aXJlbCkK IAl7Ci0JCWlmIChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwkJaWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xv dChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkgc3lzc2Nh bi0+c2xvdCkpCiAJCXsKIAkJCWJvb2wJCXNob3VsZEZyZWU7CiAKQEAgLTcwNyw3ICs3MTAsNyBA QCBzeXN0YWJsZV9iZWdpbnNjYW5fb3JkZXJlZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQll bG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRleCIpOwogCX0KIAotCXN5c3NjYW4tPmlz Y2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwKKwlzeXNz Y2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24s IGZhbHNlLAogCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5cywgMCk7CiAJaW5kZXhfcmVz Y2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAlzeXNzY2FuLT5z Y2FuID0gTlVMTDsKQEAgLTczNCw3ICs3MzcsNyBAQCBzeXN0YWJsZV9nZXRuZXh0X29yZGVyZWQo U3lzU2NhbkRlc2Mgc3lzc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAJSGVhcFR1cGxl CWh0dXAgPSBOVUxMOwogCiAJQXNzZXJ0KHN5c3NjYW4tPmlyZWwpOwotCWlmIChpbmRleF9nZXRu ZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlvbiwgc3lzc2Nhbi0+c2xvdCkpCisJaWYg KHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNz Y2FuLT5zbG90KSkKIAkJaHR1cCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc3lzc2Nhbi0+c2xv dCwgZmFsc2UsIE5VTEwpOwogCiAJLyogU2VlIG5vdGVzIGluIHN5c3RhYmxlX2dldG5leHQgKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDA0OTJkOTJkMi4uMzkzNjNlZmYzIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTI0LDkgKzI0LDcgQEAKICAqCQlpbmRl eF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZSAtIGluaXRpYWxpemUgcGFyYWxsZWwgc2NhbgogICoJ CWluZGV4X3BhcmFsbGVscmVzY2FuICAtIChyZSlzdGFydCBhIHBhcmFsbGVsIHNjYW4gb2YgYW4g aW5kZXgKICAqCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwgLSBqb2luIHBhcmFsbGVsIGluZGV4 IHNjYW4KLSAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNj YW4KLSAqCQlpbmRleF9mZXRjaF9oZWFwCQktIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBs ZQotICoJCWluZGV4X2dldG5leHRfc2xvdAktIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2Nh bgorICoJCWluZGV4X2dldG5leHRfdGlkCS0gYW1nZXR0dXBsZSB0YWJsZSBBTSBoZWxwZXIgcm91 dGluZQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdldCBhbGwgdHVwbGVzIGZyb20gYSBzY2FuCiAg KgkJaW5kZXhfYnVsa19kZWxldGUJLSBidWxrIGRlbGV0aW9uIG9mIGluZGV4IHR1cGxlcwogICoJ CWluZGV4X3ZhY3V1bV9jbGVhbnVwCS0gcG9zdC1kZWxldGlvbiBjbGVhbnVwIG9mIGFuIGluZGV4 CkBAIC0yNTUsNiArMjUzLDcgQEAgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhS ZWxhdGlvbiwKIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVs YXRpb24sCiAJCQkJUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQlib29sIHhzX3dhbnRfaXR1 cCwKIAkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24g Kmluc3RydW1lbnQsCiAJCQkJaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQpAQCAtMjgyLDYgKzI4 MSwxMCBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCXNjYW4tPmhl YXBSZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKIAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90 OwogCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OworCXNjYW4tPnhzX3dhbnRfaXR1cCA9 IHhzX3dhbnRfaXR1cDsKKworCWlmIChpbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRj aCAhPSBOVUxMKQorCQlpbmRleF9iYXRjaF9pbml0KHNjYW4pOwogCiAJLyogcHJlcGFyZSB0byBm ZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KIAlzY2FuLT54c19oZWFwZmV0Y2ggPSB0 YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVsYXRpb24pOwpAQCAtMzgwLDYgKzM4MywxNSBA QCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCXNjYW4tPmtpbGxfcHJpb3JfdHVw bGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBm YWxzZTsKIAorCS8qCisJICogYmF0Y2hxdWV1ZSBzaG91bGRuJ3QgYmUgbWFya2VkIGZpbmlzaGVk IChtdXN0IG1ha2Ugc3VyZSB0aGF0CisJICogaW5kZXhfYmF0Y2hfcmVzZXQgZG9lc24ndCBzZWUg dGhpcywgc2luY2UgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UKKwkgKiB3aWxsIGJlIGFmZmVj dGVkKQorCSAqLworCXNjYW4tPmZpbmlzaGVkID0gZmFsc2U7CisKKwlpbmRleF9iYXRjaF9yZXNl dChzY2FuLCB0cnVlKTsKKwogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2Nh bihzY2FuLCBrZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7CiB9 CkBAIC0zOTQsNiArNDA2LDkgQEAgaW5kZXhfZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJ U0NBTl9DSEVDS1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1lbmRzY2FuKTsKIAorCS8qIENs ZWFudXAgYmF0Y2hpbmcsIHNvIHRoYXQgdGhlIEFNIGNhbiByZWxlYXNlIHBpbnMgYW5kIHNvIG9u LiAqLworCWluZGV4X2JhdGNoX2VuZChzY2FuKTsKKwogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChs aWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hl YXBmZXRjaCkKIAl7CkBAIC00MjIsOSArNDM3LDEwIEBAIHZvaWQKIGluZGV4X21hcmtwb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKQogewogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJF KGFtbWFya3Bvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKLQlzY2Fu LT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOworCS8qIE9ubHkgYW1n ZXRiYXRjaCBpbmRleCBBTXMgc3VwcG9ydCBtYXJrIGFuZCByZXN0b3JlICovCisJcmV0dXJuIGlu ZGV4X2JhdGNoX21hcmtfcG9zKHNjYW4pOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC00 NDgsNyArNDY0LDggQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2Vy dChJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkpOwogCiAJU0NBTl9DSEVDS1M7Ci0J Q0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1yZXN0cnBvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUo YW1nZXRiYXRjaCk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1wb3NyZXNldCk7CiAKIAkvKiBy ZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAq LwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCkBAIC00NTcsNyArNDc0LDcgQEAgaW5kZXhfcmVz dHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxz ZTsgLyogZm9yIHNhZmV0eSAqLwogCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAot CXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCWluZGV4 X2JhdGNoX3Jlc3RvcmVfcG9zKHNjYW4pOwogfQogCiAvKgpAQCAtNTc5LDYgKzU5Niw4IEBAIGlu ZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlpZiAoc2Nhbi0+eHNfaGVh cGZldGNoKQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwog CisJaW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7CisKIAkvKiBhbXBhcmFsbGVscmVzY2Fu IGlzIG9wdGlvbmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFNICovCiAJaWYg KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuICE9IE5VTEwp CiAJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuKHNjYW4p OwpAQCAtNTkxLDYgKzYxMCw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mg c2NhbikKICAqLwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0 aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJIGJvb2wgeHNfd2FudF9pdHVw LAogCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCSBp bnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBz Y2FuKQpAQCAtNjEzLDYgKzYzMywxMCBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRp b24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiAJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVh cHJlbDsKIAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OwogCXNjYW4tPmluc3RydW1lbnQg PSBpbnN0cnVtZW50OworCXNjYW4tPnhzX3dhbnRfaXR1cCA9IHhzX3dhbnRfaXR1cDsKKworCWlm IChpbmRleHJlbC0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJaW5kZXhfYmF0Y2hf aW5pdChzY2FuKTsKIAogCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRh YmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVh cHJlbCk7CkBAIC02MjEsMTAgKzY0NSwxNCBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVs YXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0KLSAqIGluZGV4X2dldG5leHRfdGlkIC0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2Nhbgor ICogaW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdldHR1cGxlIGludGVyZmFjZQogICoKICAqIFRoZSBy ZXN1bHQgaXMgdGhlIG5leHQgVElEIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cywKICAqIG9yIE5V TEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgZXhpc3QuCisgKgorICogVGhpcyBzaG91bGQg b25seSBiZSBjYWxsZWQgYnkgdGFibGUgQU0ncyBpbmRleF9nZXRuZXh0X3Nsb3QgaW1wbGVtZW50 YXRpb24sCisgKiBhbmQgb25seSBnaXZlbiBhbiBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIHRoZSBz aW5nbGUtdHVwbGUgYW1nZXR0dXBsZQorICogaW50ZXJmYWNlLgogICogLS0tLS0tLS0tLS0tLS0t LQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjY3LDk3ICs2OTUsNiBAQCBpbmRleF9nZXRuZXh0X3Rp ZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCXJldHVybiAm c2Nhbi0+eHNfaGVhcHRpZDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJCWluZGV4X2Zl dGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKLSAqCi0gKiBUaGUgcmVz dWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5kZXggVElE IG1vc3QKLSAqIHJlY2VudGx5IGZldGNoZWQgYnkgaW5kZXhfZ2V0bmV4dF90aWQsIG9yIE5VTEwg aWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMKLSAqIGV4aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3Jl IHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2Ugb2YgSE9UIGNoYWlucywKLSAqIGFsdGhv dWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBpdCBzaG91bGQgYmUgaW1wb3NzaWJsZSBm b3IgbW9yZSB0aGFuCi0gKiBvbmUgc3VjaCB0dXBsZSB0byBleGlzdC4pCi0gKgotICogT24gc3Vj Y2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBoZWFwIHR1cCBpcyBwaW5uZWQgKHRoZSBw aW4gd2lsbCBiZQotICogZHJvcHBlZCBpbiBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5k ZXhfZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBj YWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5n IG9mIHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVy ZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBl ZmZpY2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICov Ci1ib29sCi1pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNs b3QgKnNsb3QpCi17Ci0JYm9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKLQlib29sCQlmb3VuZDsKLQot CWZvdW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nh bi0+eHNfaGVhcHRpZCwKLQkJCQkJCQkJCXNjYW4tPnhzX3NuYXBzaG90LCBzbG90LAotCQkJCQkJ CQkJJnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxfZGVhZCk7Ci0KLQlpZiAoZm91bmQpCi0J CXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24pOwotCi0JLyoKLQkg KiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVw bGVzLCB0ZWxsIGluZGV4Ci0JICogQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElEICh0 aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQKLQkgKiBhbWdldHR1cGxlIGNhbGwsIGlu IGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4KLQkgKiByZWNv dmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMg aW4KLQkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgotCSAqLwotCWlmICghc2Nhbi0+eGFjdFN0 YXJ0ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7Ci0K LQlyZXR1cm4gZm91bmQ7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9nZXRu ZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KLSAqCi0gKiBUaGUgcmVz dWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMgYW5kIHRoZSBz bmFwc2hvdCB3YXMKLSAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVwbGUgaXMgc3Rv cmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KLSAqCi0gKiBPbiBzdWNjZXNzLCByZXNvdXJjZXMg KGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdpbGwgYmUKLSAq IGRyb3BwZWQgYnkgYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAg b3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hl Y2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNj YW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBk b24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4g dGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhf Z2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s IFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWZvciAoOzspCi0JewotCQlpZiAoIXNjYW4tPnhz X2hlYXBfY29udGludWUpCi0JCXsKLQkJCUl0ZW1Qb2ludGVyIHRpZDsKLQotCQkJLyogVGltZSB0 byBmZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5kZXggKi8KLQkJCXRpZCA9IGluZGV4X2dl dG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7Ci0KLQkJCS8qIElmIHdlJ3JlIG91dCBvZiBpbmRl eCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCi0JCQlpZiAodGlkID09IE5VTEwpCi0JCQkJYnJlYWs7 Ci0KLQkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscyh0aWQsICZzY2FuLT54c19oZWFwdGlkKSk7 Ci0JCX0KLQotCQkvKgotCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBoZWFw IHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgotCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFueXRo aW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQotCQkgKiB0aGUgaW5k ZXguCi0JCSAqLwotCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlk KSk7Ci0JCWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQotCQkJcmV0dXJuIHRydWU7 Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5k ZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgYXQgb25jZSBmcm9tIGFuIGluZGV4IHNjYW4K ICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAuLmI2ZjI0YjM3OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAgLTAsMCArMSw2NjkgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYworICoJICBhbWdldGJhdGNoIGltcGxlbWVu dGF0aW9uIHJvdXRpbmVzCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoK KyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5k ZXhiYXRjaC5jCisgKgorICogSU5URVJGQUNFIFJPVVRJTkVTCisgKgkJaW5kZXhfYmF0Y2hfaW5p dCAtIEluaXRpYWxpemUgZmllbGRzIG5lZWRlZCBieSBiYXRjaGluZworICoJCWluZGV4X2JhdGNo X3Jlc2V0IC0gcmVzZXQgYSBiYXRjaAorICoJCWluZGV4X2JhdGNoX21hcmtfcG9zIC0gc2V0IGEg bWFyayBmcm9tIGN1cnJlbnQgYmF0Y2ggcG9zaXRpb24KKyAqCQlpbmRleF9iYXRjaF9yZXN0b3Jl X3BvcyAtIHJlc3RvcmUgbWFyayB0byBjdXJyZW50IGJhdGNoIHBvc2l0aW9uCisgKgkJaW5kZXhf YmF0Y2hfa2lsbF9pdGVtIC0gcmVjb3JkIGRlYWQgaW5kZXggdHVwbGUKKyAqCQlpbmRleF9iYXRj aF9lbmQgLSBlbmQgYmF0Y2gKKyAqCisgKgkJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayAtIHVu bG9jayBiYXRjaCdzIGJ1ZmZlciBsb2NrCisgKgkJaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIC0g YWxsb2NhdGUgYW5vdGhlciBiYXRjaAorICoJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlIC0g cmVsZWFzZSBhbGxvY2F0ZWQgYmF0Y2gKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1 ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ludC5oIgorI2luY2x1ZGUg ImxpYi9xdW5pcXVlLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKKyNpbmNsdWRlICJw Z3N0YXQuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgorCitzdGF0aWMgaW50CWJhdGNo X2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CitzdGF0aWMgdm9p ZCBiYXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKGNvbnN0IGNoYXIgKmxhYmVsLCBJbmRleFNjYW5E ZXNjIHNjYW4pOworCisvKgorICogaW5kZXhfYmF0Y2hfaW5pdAorICoJCUluaXRpYWxpemUgdmFy aW91cyBmaWVsZHMgYW5kIGFycmF5cyBuZWVkZWQgYnkgYmF0Y2hpbmcuCisgKgorICogU2V0cyB1 cCB0aGUgYmF0Y2ggcXVldWUgc3RydWN0dXJlIGFuZCBpdHMgaW5pdGlhbCByZWFkIHBvc2l0aW9u LiAgQWxzbworICogZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzY2FuIHdpbGwgZWFnZXJseSBkcm9w IGluZGV4IHBhZ2UgcGlucy4KKyAqCisgKiBPbmx5IGNhbGwgaGVyZSB3aGVuIGFsbCBvZiB0aGUg aW5kZXggcmVsYXRlZCBmaWVsZHMgaW4gJ3NjYW4nIHdlcmUgYWxyZWFkeQorICogaW5pdGlhbGl6 ZWQuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQorewor CS8qIEJvdGggYW1nZXRiYXRjaCBhbmQgYW1mcmVlYmF0Y2ggbXVzdCBiZSBwcmVzZW50IHRvZ2V0 aGVyICovCisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNo ICE9IE5VTEwpOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1mcmVl YmF0Y2ggIT0gTlVMTCk7CisKKwlzY2FuLT5iYXRjaHF1ZXVlID0gcGFsbG9jX29iamVjdChCYXRj aFF1ZXVlKTsKKworCS8qCisJICogV2UgcHJlZmVyIHRvIGVhZ2VybHkgZHJvcCBsZWFmIHBhZ2Ug cGlucyBiZWZvcmUgYW1nZXRiYXRjaCByZXR1cm5zLgorCSAqIFRoaXMgYXZvaWRzIG1ha2luZyBW QUNVVU0gd2FpdCB0byBhY3F1aXJlIGEgY2xlYW51cCBsb2NrIG9uIHRoZSBwYWdlLgorCSAqCisJ ICogV2UgY2Fubm90IHNhZmVseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGR1cmluZyBpbmRleC1vbmx5 IHNjYW5zIGR1ZSB0byBhCisJICogcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIFZBQ1VVTSBzZXR0 aW5nIHBhZ2VzIGFsbC12aXNpYmxlIGluIHRoZSBWTS4KKwkgKiBJdCdzIGFsc28gdW5zYWZlIGZv ciBwbGFpbiBpbmRleCBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LgorCSAqCisJ ICogV2hlbiB3ZSBkcm9wIHBpbnMgZWFnZXJseSwgdGhlIG1lY2hhbmlzbSB0aGF0IG1hcmtzIGlu ZGV4IHR1cGxlcyBhcworCSAqIExQX0RFQUQgaGFzIHRvIGRlYWwgd2l0aCBjb25jdXJyZW50IFRJ RCByZWN5Y2xpbmcgcmFjZXMuICBUaGUgc2NoZW1lCisJICogdXNlZCB0byBkZXRlY3QgdW5zYWZl IFRJRCByZWN5Y2xpbmcgd29uJ3Qgd29yayB3aGVuIHNjYW5uaW5nIHVubG9nZ2VkCisJICogcmVs YXRpb25zIChzaW5jZSBpdCBpbnZvbHZlcyBzYXZpbmcgYW4gYWZmZWN0ZWQgcGFnZSdzIExTTiku ICBPcHQgb3V0CisJICogb2YgZWFnZXIgcGluIGRyb3BwaW5nIGR1cmluZyB1bmxvZ2dlZCByZWxh dGlvbiBzY2FucyBmb3Igbm93LgorCSAqLworCXNjYW4tPmRyb3BQaW4gPQorCQkoIXNjYW4tPnhz X3dhbnRfaXR1cCAmJiBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKKwkJIFJl bGF0aW9uTmVlZHNXQUwoc2Nhbi0+aW5kZXhSZWxhdGlvbikpOworCXNjYW4tPmZpbmlzaGVkID0g ZmFsc2U7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ZGlyZWN0aW9uID0gTm9Nb3ZlbWVudFNjYW5EaXJl Y3Rpb247CisKKwkvKiBwb3NpdGlvbnMgaW4gdGhlIHF1ZXVlIG9mIGJhdGNoZXMgKi8KKwliYXRj aF9yZXNldF9wb3MoJnNjYW4tPmJhdGNocXVldWUtPnJlYWRQb3MpOworCWJhdGNoX3Jlc2V0X3Bv cygmc2Nhbi0+YmF0Y2hxdWV1ZS0+bWFya1Bvcyk7CisKKwlzY2FuLT5iYXRjaHF1ZXVlLT5tYXJr QmF0Y2ggPSBOVUxMOworCXNjYW4tPmJhdGNocXVldWUtPmhlYWRCYXRjaCA9IDA7CS8qIGluaXRp YWwgaGVhZCBiYXRjaCAqLworCXNjYW4tPmJhdGNocXVldWUtPm5leHRCYXRjaCA9IDA7CS8qIGlu aXRpYWwgYmF0Y2ggc3RhcnRzIGVtcHR5ICovCisJbWVtc2V0KCZzY2FuLT5iYXRjaHF1ZXVlLT5j YWNoZSwgMCwgc2l6ZW9mKHNjYW4tPmJhdGNocXVldWUtPmNhY2hlKSk7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0KKyAqCQliYXRjaF9nZXRuZXh0IC0gZ2V0IHRoZSBuZXh0IGJhdGNoIG9mIFRJ RHMgZnJvbSBhIHNjYW4KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0ncyBvcmRlcmVkIGluZGV4 IHNjYW4gaW1wbGVtZW50YXRpb24gd2hlbiBpdCBuZWVkcyB0bworICogbG9hZCB0aGUgbmV4dCBi YXRjaCBvZiBpbmRleCBlbnRyaWVzIHRvIHByb2Nlc3MgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4K KyAqCisgKiBUaGUgdGFibGUgQU0gY29udHJvbHMgdGhlIG92ZXJhbGwgcHJvZ3Jlc3Mgb2YgdGhl IHNjYW4sIGRlY2lkaW5nIHdoZW4gdG8KKyAqIHJlcXVlc3QgbmV3IGJhdGNoZXMuICBUaGlzIGRp dmlzaW9uIG9mIGxhYm9yIGdpdmVzIHRoZSB0YWJsZSBBTSB0aGUgYWJpbGl0eQorICogdG8gcmVv cmRlciBmZXRjaGVzIG9mIG5lYXJieSB0YWJsZSB0dXBsZXMgKGZyb20gdGhlIHNhbWUgYmF0Y2gs IG9yIGZyb20KKyAqIGFkamFjZW50IGJhdGNoZXMpIGJhc2VkIG9uIGl0cyBvd24gY29uc2lkZXJh dGlvbnMuICBJbXBvcnRhbnRseSwgdGFibGUgQU1zCisgKiBhcmUgX25vdF8gcmVxdWlyZWQgdG8g ZnJlZSBhIGJhdGNoIGJlZm9yZSBsb2FkaW5nIHRoZSBuZXh0IGJhdGNoIGR1cmluZyBhbgorICog aW5kZXggc2NhbiBvZiBhbiBpbmRleCB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0Y2gvYW1mcmVlYmF0 Y2ggaW50ZXJmYWNlLgorICogKFRoaXMgaXNuJ3QgcG9zc2libGUgd2l0aCB0aGUgc2luZ2xlLXR1 cGxlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlLCB3aGljaCBnaXZlcworICogdGhlIGluZGV4IEFNIGRp cmVjdCBjb250cm9sIG92ZXIgdGhlIHByb2dyZXNzIG9mIHRoZSBpbmRleCBzY2FuLiAgYW1nZXR0 dXBsZQorICogaW5kZXggc2NhbnMgcGVyZm9ybSB0aGUgd29yayB0aGF0IHdlIHBlcmZvcm0gaW4g YmF0Y2hfZnJlZSBhcyB0aGUgc2NhbgorICogcHJvZ3Jlc3NlcywgYW5kIHdpdGhvdXQgbm90aWZ5 aW5nIHRoZSB0YWJsZSBBTSwgd2hpY2ggbWFrZXMgaXQgaW1wb3NzaWJsZQorICogdG8gc2FmZWx5 IHJlb3JkZXIgd29yayBpbiB0aGUgd2F5IHRoYXQgb3VyIGNhbGxlcnMgY2FuLikKKyAqCisgKiBS ZXR1cm5zIHRydWUgaWYgd2UgbWFuYWdlZCB0byByZWFkIGEgYmF0Y2ggb2YgVElEcywgb3IgZmFs c2UgaWYgdGhlcmUgYXJlCisgKiBubyBtb3JlIGJhdGNoZXMgaW4gdGhlIGdpdmVuIHNjYW4gZGly ZWN0aW9uLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitib29sCitiYXRjaF9nZXRuZXh0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQmF0Y2hRdWV1 ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7CisJQmF0Y2hJbmRleFNjYW4gcHJpb3Ji YXRjaCA9IE5VTEwsCisJCQkJYmF0Y2ggPSBOVUxMOworCisJLyogWFhYOiB3ZSBzaG91bGQgYXNz ZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLworCUFzc2VydChU cmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisKKwkvKiBEaWQgd2UgYWxyZWFkeSBy ZWFkIHRoZSBsYXN0IGJhdGNoIGZvciB0aGlzIHNjYW4/ICovCisJaWYgKHNjYW4tPmZpbmlzaGVk KQorCQlyZXR1cm4gZmFsc2U7CisKKwlBc3NlcnQoIUlOREVYX1NDQU5fQkFUQ0hfRlVMTChzY2Fu KSk7CisKKwliYXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKCJiYXRjaF9nZXRuZXh0IC8gc3RhcnQi LCBzY2FuKTsKKworCS8qCisJICogR2V0IHRoZSBwcmV2aW91c2x5IHJldHVybmVkIGJhdGNoIHRv IHBhc3MgdG8gYW1nZXRiYXRjaC4gIFRoZSBpbmRleCBBTQorCSAqIHVzZXMgdGhpcyB0byBkZXRl cm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byByZWFkIG5leHQsIHR5cGljYWxseSBieQorCSAqIGZv bGxvd2luZyBwYWdlIGxpbmtzIGZvcndhcmQgb3IgYmFja3dhcmQuCisJICovCisJaWYgKGJhdGNo cXVldWUtPmhlYWRCYXRjaCA8IGJhdGNocXVldWUtPm5leHRCYXRjaCkKKwkJcHJpb3JiYXRjaCA9 IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoIC0gMSk7CisKKwli YXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoKHNjYW4sIHBy aW9yYmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJlY3Rpb24pOworCWlmIChiYXRjaCAhPSBOVUxM KQorCXsKKwkJLyogV2UgZ290IHRoZSBiYXRjaCBmcm9tIHRoZSBBTSAtLSBhZGQgaXQgdG8gb3Vy IHF1ZXVlICovCisJCWludAkJCWJhdGNoSW5kZXggPSBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2g7CisK KwkJSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaEluZGV4KSA9IGJhdGNoOworCisJCWJhdGNo cXVldWUtPm5leHRCYXRjaCsrOworCisJCURFQlVHX0xPRygiYmF0Y2hfZ2V0bmV4dCBoZWFkQmF0 Y2ggJWQgbmV4dEJhdGNoICVkIGJhdGNoICVwIiwKKwkJCQkgIGJhdGNocXVldWUtPmhlYWRCYXRj aCwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoLCBiYXRjaCk7CisJfQorCWVsc2UKKwkJc2Nhbi0+Zmlu aXNoZWQgPSB0cnVlOworCisJYmF0Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQoc2Nhbik7CisKKwli YXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKCJiYXRjaF9nZXRuZXh0IC8gZW5kIiwgc2Nhbik7CisK KwlyZXR1cm4gKGJhdGNoICE9IE5VTEwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJ aW5kZXhfYmF0Y2hfcmVzZXQgLSByZXNldCBiYXRjaCBxdWV1ZSBhbmQgcmVhZCBwb3NpdGlvbgor ICoKKyAqIFJlc2V0cyBhbGwgbG9hZGVkIGJhdGNoZXMgaW4gdGhlIHF1ZXVlLCBhbmQgcmVzZXRz IHRoZSByZWFkIHBvc2l0aW9uIHRvIHRoZQorICogaW5pdGlhbCBzdGF0ZSAob3IganVzdCBpbml0 aWFsaXplIHF1ZXVlIHN0YXRlKS4gIFdoZW4gJ2NvbXBsZXRlJyBpcyB0cnVlLAorICogYWxzbyBm cmVlcyB0aGUgc2NhbidzIG1hcmtlZCBiYXRjaCAoaWYgYW55KSwgd2hpY2ggaXMgdXNlZnVsIHdo ZW4gZW5kaW5nIGFuCisgKiBhbWdldGJhdGNoLWJhc2VkIGluZGV4IHNjYW4uCisgKiAtLS0tLS0t LS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nh biwgYm9vbCBjb21wbGV0ZSkKK3sKKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlID0gc2Nhbi0+YmF0 Y2hxdWV1ZTsKKworCS8qIGJhaWwgb3V0IGlmIGJhdGNoaW5nIG5vdCBlbmFibGVkICovCisJaWYg KCFiYXRjaHF1ZXVlKQorCQlyZXR1cm47CisKKwliYXRjaF9hc3NlcnRfYmF0Y2hlc192YWxpZChz Y2FuKTsKKwliYXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKCJpbmRleF9iYXRjaF9yZXNldCIsIHNj YW4pOworCUFzc2VydChzY2FuLT54c19oZWFwZmV0Y2gpOworCisJLyogcmVzZXQgdGhlIHBvc2l0 aW9ucyAqLworCWJhdGNoX3Jlc2V0X3BvcygmYmF0Y2hxdWV1ZS0+cmVhZFBvcyk7CisKKwkvKgor CSAqIFdpdGggImNvbXBsZXRlIiByZXNldCwgbWFrZSBzdXJlIHRvIGFsc28gZnJlZSB0aGUgbWFy a2VkIGJhdGNoLCBlaXRoZXIKKwkgKiBieSBqdXN0IGZvcmdldHRpbmcgaXQgKGlmIGl0J3Mgc3Rp bGwgaW4gdGhlIHF1ZXVlKSwgb3IgYnkgZXhwbGljaXRseQorCSAqIGZyZWVpbmcgaXQuCisJICov CisJaWYgKGNvbXBsZXRlICYmIHVubGlrZWx5KGJhdGNocXVldWUtPm1hcmtCYXRjaCAhPSBOVUxM KSkKKwl7CisJCUJhdGNoUXVldWVJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocXVldWUtPm1hcmtQ b3M7CisJCUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaCA9IGJhdGNocXVldWUtPm1hcmtCYXRjaDsK KworCQkvKiBhbHdheXMgcmVzZXQgdGhlIHBvc2l0aW9uLCBmb3JnZXQgdGhlIG1hcmtlZCBiYXRj aCAqLworCQliYXRjaHF1ZXVlLT5tYXJrQmF0Y2ggPSBOVUxMOworCisJCS8qCisJCSAqIElmIHdl J3ZlIGFscmVhZHkgbW92ZWQgcGFzdCB0aGUgbWFya2VkIGJhdGNoIChpdCdzIG5vdCBpbiB0aGUK KwkJICogY3VycmVudCBxdWV1ZSksIGZyZWUgaXQgZXhwbGljaXRseS4gT3RoZXJ3aXNlIGl0J2xs IGJlIGluIHRoZSBmcmVlZAorCQkgKiBsYXRlci4KKwkJICovCisJCWlmIChtYXJrUG9zLT5iYXRj aCA8IGJhdGNocXVldWUtPmhlYWRCYXRjaCB8fAorCQkJbWFya1Bvcy0+YmF0Y2ggPj0gYmF0Y2hx dWV1ZS0+bmV4dEJhdGNoKQorCQkJYmF0Y2hfZnJlZShzY2FuLCBtYXJrQmF0Y2gpOworCisJCS8q IHJlc2V0IHBvc2l0aW9uIG9ubHkgYWZ0ZXIgdGhlIHF1ZXVlIHJhbmdlIGNoZWNrICovCisJCWJh dGNoX3Jlc2V0X3BvcygmYmF0Y2hxdWV1ZS0+bWFya1Bvcyk7CisJfQorCisJLyogbm93IHJlbGVh c2UgYWxsIG90aGVyIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hlcyAqLworCXdoaWxlIChiYXRjaHF1 ZXVlLT5oZWFkQmF0Y2ggPCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gpCisJeworCQlCYXRjaEluZGV4 U2NhbiBiYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgYmF0Y2hxdWV1ZS0+aGVhZEJhdGNo KTsKKworCQlERUJVR19MT0coImZyZWVpbmcgYmF0Y2ggJWQgJXAiLCBiYXRjaHF1ZXVlLT5oZWFk QmF0Y2gsIGJhdGNoKTsKKworCQliYXRjaF9mcmVlKHNjYW4sIGJhdGNoKTsKKworCQkvKiB1cGRh dGUgdGhlIHZhbGlkIHJhbmdlLCBzbyB0aGF0IGFzc2VydHMgLyBkZWJ1Z2dpbmcgd29ya3MgKi8K KwkJYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKys7CisJfQorCisJLyogcmVzZXQgcmVsZXZhbnQgYmF0 Y2ggc3RhdGUgZmllbGRzICovCisJYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoID0gMDsJLyogaW5pdGlh bCBiYXRjaCAqLworCWJhdGNocXVldWUtPm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2gg aXMgZW1wdHkgKi8KKworCXNjYW4tPmZpbmlzaGVkID0gZmFsc2U7CisKKwliYXRjaF9hc3NlcnRf YmF0Y2hlc192YWxpZChzY2FuKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4 X2JhdGNoX21hcmtfcG9zIC0gbWFyayBjdXJyZW50IHBvc2l0aW9uIGluIHNjYW4gZm9yIHJlc3Rv cmF0aW9uCisgKgorICogU2F2ZXMgdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBhbmQgYXNzb2Np YXRlZCBiYXRjaCBzbyB0aGF0IHRoZSBzY2FuIGNhbgorICogYmUgcmVzdG9yZWQgdG8gdGhpcyBw b2ludCBsYXRlciwgdmlhIGEgY2FsbCB0byBpbmRleF9iYXRjaF9yZXN0b3JlX3Bvcy4KKyAqIFRo ZSBtYXJrZWQgYmF0Y2ggaXMgcmV0YWluZWQgYW5kIG5vdCBmcmVlZCB1bnRpbCBhIG5ldyBtYXJr IGlzIHNldCBvciB0aGUKKyAqIHNjYW4gZW5kcyAob3IgdW50aWwgdGhlIG1hcmsgaXMgcmVzdG9y ZWQpLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRjaF9tYXJrX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4t PmJhdGNocXVldWU7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hxdWV1ZS0+ bWFya1BvczsKKwlCYXRjaEluZGV4U2NhbiBtYXJrQmF0Y2ggPSBiYXRjaHF1ZXVlLT5tYXJrQmF0 Y2g7CisKKwkvKgorCSAqIEZyZWUgdGhlIHByZXZpb3VzIG1hcmsgYmF0Y2ggKGlmIGFueSksIGJ1 dCBvbmx5IGlmIHRoZSBiYXRjaCBpcyBubworCSAqIGxvbmdlciB2YWxpZCAoaW4gdGhlIGN1cnJl bnQgaGVhZC9uZXh0IHJhbmdlKS4gIE5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlCisJICogdG8gZG8g dGhpcyBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgd2UgbWFyayBhIHBvc2l0aW9uIHRoYXQgY29t ZXMgZnJvbQorCSAqIG91ciBjdXJyZW50IHJlYWRCYXRjaC4KKwkgKi8KKwlpZiAobWFya0JhdGNo ICE9IE5VTEwgJiYgKG1hcmtQb3MtPmJhdGNoIDwgYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoIHx8CisJ CQkJCQkJICBtYXJrUG9zLT5iYXRjaCA+PSBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gpKQorCXsKKwkJ YmF0Y2hxdWV1ZS0+bWFya0JhdGNoID0gTlVMTDsKKwkJYmF0Y2hfZnJlZShzY2FuLCBtYXJrQmF0 Y2gpOworCX0KKworCS8qIGNvcHkgdGhlIHJlYWQgcG9zaXRpb24gKi8KKwliYXRjaHF1ZXVlLT5t YXJrUG9zID0gYmF0Y2hxdWV1ZS0+cmVhZFBvczsKKwliYXRjaHF1ZXVlLT5tYXJrQmF0Y2ggPSBJ TkRFWF9TQ0FOX0JBVENIKHNjYW4sIGJhdGNocXVldWUtPm1hcmtQb3MuYmF0Y2gpOworCisJLyog cmVhZFBvcy9tYXJrUG9zIG11c3QgYmUgdmFsaWQgKi8KKwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlk KHNjYW4sICZiYXRjaHF1ZXVlLT5tYXJrUG9zKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQor ICoJCWluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zIC0gcmVzdG9yZSBzY2FuIHRvIGEgcHJldmlvdXNs eSBtYXJrZWQgcG9zaXRpb24KKyAqCisgKiBSZXN0b3JlcyB0aGUgc2NhbiB0byBhIHBvc2l0aW9u IHByZXZpb3VzbHkgc2F2ZWQgYnkgaW5kZXhfYmF0Y2hfbWFya19wb3MuCisgKiBUaGUgbWFya2Vk IGJhdGNoIGlzIHJlc3RvcmVkIGFzIHRoZSBjdXJyZW50IGJhdGNoLCBhbGxvd2luZyB0aGUgc2Nh biB0bworICogcmVzdW1lIGZyb20gdGhlIG1hcmtlZCBwb3NpdGlvbi4gIEFsc28gbm90aWZpZXMg dGhlIGluZGV4IEFNIHZpYSBhIGNhbGwgdG8KKyAqIGl0cyBhbXBvc3Jlc2V0IHJvdXRpbmUsIHdo aWNoIGFsbG93cyBpdCB0byBpbnZhbGlkYXRlIGFueSBwcml2YXRlIHN0YXRlCisgKiB0aGF0IGlu ZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4gcHJvZ3Jlc3MgKHN1Y2ggYXMgYXJyYXkga2V5IHN0YXRl KQorICoKKyAqIEZ1bmN0aW9uIGN1cnJlbnRseSBqdXN0IGRpc2NhcmRzIG1vc3QgYmF0Y2ggcXVl dWUgc3RhdGUuICBJdCBtaWdodCBtYWtlCisgKiBzZW5zZSB0byB0ZWFjaCBpdCB0byBob2xkIG9u IHRvIG90aGVyIG5lYXJieSBiYXRjaGVzIChzdGlsbC1oZWxkIGJhdGNoZXMKKyAqIHRoYXQgYXJl IGxpa2VseSB0byBiZSBuZWVkZWQgb25jZSB0aGUgc2NhbiBmaW5pc2hlcyByZXR1cm5pbmcgbWF0 Y2hpbmcKKyAqIGl0ZW1zIGZyb20gdGhlIHJlc3RvcmVkIGJhdGNoKSBhcyBhbiBvcHRpbWl6YXRp b24uICBTdWNoIGEgc2NoZW1lIHdvdWxkCisgKiBoYXZlIHRoZSBiZW5lZml0IG9mIGF2b2lkaW5n IHJlcGVhdCBjYWxscyB0byBhbWdldGJhdGNoL3JlcGVhdGVkbHkgcmVhZGluZworICogdGhlIHNh bWUgaW5kZXggcGFnZXMuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2Jh dGNoX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFF1ZXVlICpiYXRj aHF1ZXVlID0gc2Nhbi0+YmF0Y2hxdWV1ZTsKKwlCYXRjaFF1ZXVlSXRlbVBvcyAqbWFya1BvcyA9 ICZiYXRjaHF1ZXVlLT5tYXJrUG9zOworCUJhdGNoUXVldWVJdGVtUG9zICpyZWFkUG9zID0gJmJh dGNocXVldWUtPnJlYWRQb3M7CisJQmF0Y2hJbmRleFNjYW4gbWFya0JhdGNoID0gYmF0Y2hxdWV1 ZS0+bWFya0JhdGNoOworCisJaWYgKHJlYWRQb3MtPmJhdGNoID09IG1hcmtQb3MtPmJhdGNoICYm CisJCXJlYWRQb3MtPmJhdGNoID09IGJhdGNocXVldWUtPmhlYWRCYXRjaCkKKwl7CisJCS8qCisJ CSAqIFdlIGRvbid0IGhhdmUgdG8gZGlzY2FyZCB0aGUgc2NhbidzIHN0YXRlIGFmdGVyIGFsbCwg c2luY2UgdGhlCisJCSAqIGN1cnJlbnQgaGVhZEJhdGNoIGlzIGFsc28gdGhlIGJhdGNoIHRoYXQg d2UncmUgcmVzdG9yaW5nIHRvCisJCSAqLworCQlyZWFkUG9zLT5pdGVtID0gbWFya1Bvcy0+aXRl bTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogQ2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRl eCBBTSBrbm93IHRvIGludmFsaWRhdGUgYW55IHByaXZhdGUgc3RhdGUKKwkgKiB0aGF0IGluZGVw ZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3MKKwkgKi8KKwlzY2FuLT5pbmRleFJl bGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBtYXJrQmF0Y2gpOworCisJLyoKKwkg KiBSZXNldCB0aGUgYmF0Y2hpbmcgc3RhdGUsIGV4Y2VwdCBmb3IgdGhlIG1hcmtlZCBiYXRjaCwg YW5kIG1ha2UgaXQgbG9vaworCSAqIGxpa2Ugd2UgaGF2ZSBhIHNpbmdsZSBiYXRjaCAtLSB0aGUg bWFya2VkIG9uZS4KKwkgKi8KKwlpbmRleF9iYXRjaF9yZXNldChzY2FuLCBmYWxzZSk7CisKKwli YXRjaHF1ZXVlLT5yZWFkUG9zID0gKm1hcmtQb3M7CisJYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoID0g bWFya1Bvcy0+YmF0Y2g7CisJYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoID0gbWFya1Bvcy0+YmF0Y2gg KyAxOworCisJSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRjaHF1ZXVlLT5tYXJrUG9zLmJhdGNo KSA9IG1hcmtCYXRjaDsKKwliYXRjaHF1ZXVlLT5tYXJrQmF0Y2ggPSBtYXJrQmF0Y2g7Cit9CisK Ky8qCisgKiBiYXRjaF9mcmVlCisgKgkJUmVsZWFzZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRo IGEgYmF0Y2ggcmV0dXJuZWQgYnkgdGhlIGluZGV4IEFNLgorICoKKyAqIENhbGxlZCBieSB0YWJs ZSBBTSdzIG9yZGVyZWQgaW5kZXggc2NhbiBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IGlzIGZpbmlz aGVkCisgKiB3aXRoIGEgYmF0Y2ggYW5kIHdpc2hlcyB0byByZWxlYXNlIGl0cyByZXNvdXJjZXMu CisgKgorICogVGhpcyBjYWxscyB0aGUgaW5kZXggQU0ncyBhbWZyZWViYXRjaCBjYWxsYmFjayB0 byByZWxlYXNlIEFNLXNwZWNpZmljCisgKiByZXNvdXJjZXMsIGFuZCB0byBzZXQgTFBfREVBRCBi aXRzIG9uIHRoZSBiYXRjaCdzIGluZGV4IHBhZ2UuICBJdCBpc24ndAorICogc2FmZSBmb3IgdGFi bGUgQU1zIHRvIGZldGNoIHRhYmxlIHR1cGxlcyB1c2luZyBUSURzIHNhdmVkIGZyb20gYSBiYXRj aCB0aGF0CisgKiB3YXMgYWxyZWFkeSBmcmVlZDogJ2Ryb3BQaW4nIHNjYW5zIG5lZWQgdGhlIGlu ZGV4IEFNIHRvIHJldGFpbiBhIHBpbiBvbiB0aGUKKyAqIFRJRCdzIGluZGV4IHBhZ2UsIGFzIGFu IGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4KKyAqLwordm9pZAor YmF0Y2hfZnJlZShJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQorewor CWJhdGNoX2Fzc2VydF9iYXRjaF92YWxpZChzY2FuLCBiYXRjaCk7CisKKwkvKiBkb24ndCBmcmVl IHRoZSBiYXRjaCB0aGF0IGlzIG1hcmtlZCAqLworCWlmIChiYXRjaCA9PSBzY2FuLT5iYXRjaHF1 ZXVlLT5tYXJrQmF0Y2gpCisJCXJldHVybjsKKworCS8qCisJICoga2lsbGVkSXRlbXNbXSBpcyBu b3cgaW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0dXJuZWQgaXRlbXMgaW4uCisJICogU2Ny b2xsYWJsZSBjdXJzb3Igc2NhbnMgbWlnaHQgaGF2ZSBldmVuIHNhdmVkIHRoZSBzYW1lIGl0ZW0v VElEIHR3aWNlLgorCSAqCisJICogU29ydCBhbmQgdW5pcXVlLWlmeSBraWxsZWRJdGVtc1tdLiAg VGhhdCB3YXkgdGhlIGluZGV4IEFNIGNhbiBzYWZlbHkKKwkgKiBhc3N1bWUgdGhhdCBpdGVtcyB3 aWxsIGFsd2F5cyBiZSBpbiB0aGVpciBvcmlnaW5hbCBpbmRleCBwYWdlIG9yZGVyLgorCSAqLwor CWlmIChiYXRjaC0+bnVtS2lsbGVkID4gMSkKKwl7CisJCXFzb3J0KGJhdGNoLT5raWxsZWRJdGVt cywgYmF0Y2gtPm51bUtpbGxlZCwgc2l6ZW9mKGludCksCisJCQkgIGJhdGNoX2NvbXBhcmVfaW50 KTsKKwkJYmF0Y2gtPm51bUtpbGxlZCA9IHF1bmlxdWUoYmF0Y2gtPmtpbGxlZEl0ZW1zLCBiYXRj aC0+bnVtS2lsbGVkLAorCQkJCQkJCQkgICBzaXplb2YoaW50KSwgYmF0Y2hfY29tcGFyZV9pbnQp OworCX0KKworCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWZyZWViYXRjaChzY2Fu LCBiYXRjaCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9raWxs X2l0ZW0gLSByZWNvcmQgaXRlbSBmb3IgZGVmZXJyZWQgTFBfREVBRCBtYXJraW5nCisgKgorICog UmVjb3JkcyB0aGUgaXRlbSBpbmRleCBvZiB0aGUgY3VycmVudGx5LXJlYWQgdHVwbGUgaW4gcmVh ZEJhdGNoJ3MKKyAqIGtpbGxlZEl0ZW1zIGFycmF5LiBUaGUgaXRlbXMnIGluZGV4IHR1cGxlcyB3 aWxsIGxhdGVyIGJlIG1hcmtlZCBMUF9ERUFECisgKiB3aGVuIGN1cnJlbnQgcmVhZEJhdGNoIGlz IGZyZWVkIGJ5IGFtZnJlZWJhdGNoIHJvdXRpbmUgKHNlZSBiYXRjaF9mcmVlKS4KKyAqIC0tLS0t LS0tLS0tLS0tLS0KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hfa2lsbF9pdGVtKEluZGV4U2NhbkRl c2Mgc2NhbikKK3sKKwlCYXRjaFF1ZXVlSXRlbVBvcyAqcmVhZFBvcyA9ICZzY2FuLT5iYXRjaHF1 ZXVlLT5yZWFkUG9zOworCUJhdGNoSW5kZXhTY2FuIHJlYWRCYXRjaCA9IElOREVYX1NDQU5fQkFU Q0goc2NhbiwgcmVhZFBvcy0+YmF0Y2gpOworCisJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2Fu LCByZWFkUG9zKTsKKworCWlmIChyZWFkQmF0Y2gtPmtpbGxlZEl0ZW1zID09IE5VTEwpCisJCXJl YWRCYXRjaC0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBzY2FuLT5tYXhpdGVtc2Jh dGNoKTsKKwlpZiAocmVhZEJhdGNoLT5udW1LaWxsZWQgPCBzY2FuLT5tYXhpdGVtc2JhdGNoKQor CQlyZWFkQmF0Y2gtPmtpbGxlZEl0ZW1zW3JlYWRCYXRjaC0+bnVtS2lsbGVkKytdID0gcmVhZFBv cy0+aXRlbTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2JhdGNoX2VuZCAt IGVuZCBhIGJhdGNoIHNjYW4gYW5kIGZyZWUgYWxsIHJlc291cmNlcworICoKKyAqIENhbGxlZCB3 aGVuIGFuIGluZGV4IHNjYW4gaXMgYmVpbmcgZW5kZWQsIHJpZ2h0IGJlZm9yZSB0aGUgb3duaW5n IHNjYW4KKyAqIGRlc2NyaXB0b3IgZ29lcyBhd2F5LiAgQ2xlYW5zIHVwIGFsbCBiYXRjaCByZWxh dGVkIHJlc291cmNlcy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAoraW5kZXhfYmF0 Y2hfZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlpbmRleF9iYXRjaF9yZXNldChzY2FuLCB0 cnVlKTsKKworCS8qIGJhaWwgb3V0IHdpdGhvdXQgYmF0Y2hpbmcgKi8KKwlpZiAoIXNjYW4tPmJh dGNocXVldWUpCisJCXJldHVybjsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9D QUNIRV9CQVRDSEVTOyBpKyspCisJeworCQlCYXRjaEluZGV4U2NhbiBjYWNoZWQgPSBzY2FuLT5i YXRjaHF1ZXVlLT5jYWNoZVtpXTsKKworCQlpZiAoY2FjaGVkID09IE5VTEwpCisJCQljb250aW51 ZTsKKworCQlpZiAoY2FjaGVkLT5raWxsZWRJdGVtcykKKwkJCXBmcmVlKGNhY2hlZC0+a2lsbGVk SXRlbXMpOworCQlpZiAoY2FjaGVkLT5jdXJyVHVwbGVzKQorCQkJcGZyZWUoY2FjaGVkLT5jdXJy VHVwbGVzKTsKKwkJcGZyZWUoY2FjaGVkKTsKKwl9CisKKwlwZnJlZShzY2FuLT5iYXRjaHF1ZXVl KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCQl1dGlsaXR5IGZ1bmN0aW9ucyBjYWxsZWQgYnkgYW1n ZXRiYXRjaCBpbmRleCBBTXMKKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgbWFuYWdlIGJhdGNoIGFs bG9jYXRpb24sIHVubG9jay9waW4gbWFuYWdlbWVudCwgYW5kIGJhdGNoCisgKiByZXNvdXJjZSBy ZWN5Y2xpbmcuICBJbmRleCBBTXMgaW1wbGVtZW50aW5nIGFtZ2V0YmF0Y2ggc2hvdWxkIHVzZSB0 aGVzZQorICogcmF0aGVyIHRoYW4gbWFuYWdpbmcgYnVmZmVycyBkaXJlY3RseS4KKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworCisvKgorICogaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayAtIERyb3AgbG9jayBh bmQgY29uZGl0aW9uYWxseSBkcm9wIHBpbiBvbiBiYXRjaCBwYWdlCisgKgorICogVW5sb2NrcyBj YWxsZXIncyBiYXRjaC0+YnVmIGluIHByZXBhcmF0aW9uIGZvciBhbWdldGJhdGNoIHJldHVybmlu ZyBpdGVtcworICogc2F2ZWQgaW4gdGhhdCBiYXRjaC4gIE1hbmFnZXMgdGhlIGRldGFpbHMgb2Yg ZHJvcHBpbmcgdGhlIGxvY2sgYW5kIHBvc3NpYmx5CisgKiB0aGUgcGluIGZvciBpbmRleCBBTSBj YWxsZXIgKGRyb3BwaW5nIHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcKKyAq IG9uIGFjcXVpcmluZyBhIGNsZWFudXAgbG9jaywgYnV0IGlzbid0IGFsd2F5cyBzYWZlKS4KKyAq CisgKiBPbmx5IGNhbGwgaGVyZSB3aGVuIGEgYmF0Y2ggaGFzIG9uZSBvciBtb3JlIG1hdGNoaW5n IGl0ZW1zIHRvIHJldHVybiB1c2luZworICogYW1nZXRiYXRjaCAob3IgZm9yIGFtZ2V0Yml0bWFw IHRvIGxvYWQgaW50byBpdHMgYml0bWFwIG9mIG1hdGNoaW5nIFRJRHMpLgorICogV2hlbiBhbiBp bmRleCBwYWdlIGhhcyBubyBtYXRjaGVzLCBpdCdzIGFsd2F5cyBzYWZlIGZvciBpbmRleCBBTXMg dG8gZHJvcAorICogYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiBmb3IgdGhlbXNlbHZlcy4KKyAq CisgKiBOb3RlOiBJdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMgdGhhdCBpbXBsZW1lbnQg Ym90aCBhbWdldGJpdG1hcCBhbmQKKyAqIGFtZ2V0Yml0bWFwIHRvIGNvbnNpc3RlbnRseSB1c2Ug dGhlIHNhbWUgYmF0Y2ggbWFuYWdlbWVudCBhcHByb2FjaCwgc2luY2UKKyAqIHRoYXQgYXZvaWRz IGludHJvZHVjaW5nIHNwZWNpYWwgY2FzZXMgdG8gbG93ZXItbGV2ZWwgY29kZS4gIFdlIGFsd2F5 cyBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIG9uIGJhdGNoJ3MgcGFnZSBvbiBi ZWhhbGYgb2YgYW1nZXRiaXRtYXAgY2FsbGVycy4KKyAqIFN1Y2ggYW1nZXRiaXRtYXAgY2FsbGVy cyBtdXN0IGJlIGNhcmVmdWwgdG8gZnJlZSBhbGwgYmF0Y2hlcyB3aXRoIG1hdGNoaW5nCisgKiBp dGVtcyBvbmNlIHRoZXkncmUgZG9uZSBzYXZpbmcgdGhlIG1hdGNoaW5nIFRJRHMgKHRoZXJlIHdp bGwgbmV2ZXIgYmUgYW55CisgKiBjYWxscyB0byBhbWZyZWViYXRjaCwgc28gYW1nZXRiaXRtYXAg bXVzdCBjYWxsIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlCisgKiBkaXJlY3RseSwgaW4gbGll dSBvZiBhIGRlZmVycmVkIGNhbGwgdG8gYW1mcmVlYmF0Y2ggZnJvbSBjb3JlIGNvZGUpLgorICov Cit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0 Y2hJbmRleFNjYW4gYmF0Y2gpCit7CisJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlv bjsKKwlib29sCQlkcm9wUGluID0gc2Nhbi0+ZHJvcFBpbjsKKworCS8qIGJhdGNoIG11c3QgaGF2 ZSBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyByZXR1cm5lZCBieSBpbmRleCBBTSAqLworCUFz c2VydChiYXRjaC0+Zmlyc3RJdGVtID49IDAgJiYgYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+ bGFzdEl0ZW0pOworCisJaWYgKCFkcm9wUGluKQorCXsKKwkJaWYgKCFSZWxhdGlvblVzZXNMb2Nh bEJ1ZmZlcnMocmVsKSkKKwkJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKEJ1ZmZlckdldFBh Z2UoYmF0Y2gtPmJ1ZiksIEJMQ0tTWik7CisKKwkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3Qg dGhlIHBpbikgKi8KKwkJTG9ja0J1ZmZlcihiYXRjaC0+YnVmLCBCVUZGRVJfTE9DS19VTkxPQ0sp OworCQlyZXR1cm47CisJfQorCisJaWYgKHNjYW4tPmJhdGNocXVldWUpCisJeworCQkvKiBhbWdl dGJhdGNoIChub3QgYW1nZXRiaXRtYXApIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJl bGF0aW9uICE9IE5VTEwpOworCisJCS8qCisJCSAqIEhhdmUgdG8gc2V0IGJhdGNoLT5sc24gc28g dGhhdCBhbWZyZWViYXRjaCBoYXMgYSB3YXkgdG8gZGV0ZWN0IHdoZW4KKwkJICogY29uY3VycmVu dCBoZWFwIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4gcGxhY2UuCisJ CSAqIEl0J2xsIG9ubHkgYmUgc2FmZSB0byBzZXQgYW55IGluZGV4IHR1cGxlIExQX0RFQUQgYml0 cyB3aGVuIHRoZQorCQkgKiBwYWdlIExTTiBoYXNuJ3QgYWR2YW5jZWQuCisJCSAqLworCQlBc3Nl cnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKKwkJQXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXAp OworCQliYXRjaC0+bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJhdGNoLT5idWYpOworCX0KKwor CS8qIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiAqLworCUxvY2tCdWZmZXIoYmF0Y2gt PmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVy cyhyZWwpKQorCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNo LT5idWYpLCBCTENLU1opOworCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CisJYmF0Y2gtPmJ1 ZiA9IEludmFsaWRCdWZmZXI7Cit9CisKKy8qCisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MK KyAqCQlBbGxvY2F0ZSBhIGJhdGNoIGR1cmluZyBhIGFtZ2V0YmF0Y2ggKG9yIGFtZ2V0Yml0bWFw KSBpbmRleCBzY2FuLgorICoKKyAqIFJldHVybnMgQmF0Y2hJbmRleFNjYW4gd2l0aCBzcGFjZSB0 byBmaXQgc2Nhbi0+bWF4aXRlbXNiYXRjaC1tYW55CisgKiBCYXRjaE1hdGNoaW5nSXRlbSBlbnRy aWVzLiAgVGhpcyB3aWxsIGVpdGhlciBiZSBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaCwgb3IKKyAq IGEgYmF0Y2ggcmVjeWNsZWQgZnJvbSB0aGUgY2FjaGUgbWFuYWdlZCBieSBpbmRleGFtX3V0aWxf YmF0Y2hfcmVsZWFzZS4gIFNlZQorICogY29tbWVudHMgYWJvdmUgaW5kZXhhbV91dGlsX2JhdGNo X3JlbGVhc2UuCisgKgorICogSW5kZXggQU1zIHRoYXQgdXNlIGJhdGNoZXMgc2hvdWxkIGNhbGwg dGhpcyBmcm9tIGVpdGhlciB0aGVpciBhbWdldGJhdGNoIG9yCisgKiBhbWdldGJpdG1hcCByb3V0 aW5lcyBvbmx5LiAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgaXQgY2Fubm90IHNhZmVseSBiZQor ICogY2FsbGVkIGZyb20gYSBhbWZyZWViYXRjaCByb3V0aW5lLgorICovCitCYXRjaEluZGV4U2Nh bgoraW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRj aEluZGV4U2NhbiBiYXRjaCA9IE5VTEw7CisKKwkvKiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGlu ZyBiYXRjaCBmcm9tIHF1ZXVlJ3MgY2FjaGUgb2YgYmF0Y2hlcyAqLworCWlmIChzY2FuLT5iYXRj aHF1ZXVlICE9IE5VTEwpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FD SEVfQkFUQ0hFUzsgaSsrKQorCQl7CisJCQlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZS0+Y2FjaGVbaV0g IT0gTlVMTCkKKwkJCXsKKwkJCQkvKiBSZXR1cm4gY2FjaGVkIHVucmVmZXJlbmNlZCBiYXRjaCAq LworCQkJCWJhdGNoID0gc2Nhbi0+YmF0Y2hxdWV1ZS0+Y2FjaGVbaV07CisJCQkJc2Nhbi0+YmF0 Y2hxdWV1ZS0+Y2FjaGVbaV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJ aWYgKCFiYXRjaCkKKwl7CisJCWJhdGNoID0gcGFsbG9jKG9mZnNldG9mKEJhdGNoSW5kZXhTY2Fu RGF0YSwgaXRlbXMpICsKKwkJCQkJICAgc2l6ZW9mKEJhdGNoTWF0Y2hpbmdJdGVtKSAqIHNjYW4t Pm1heGl0ZW1zYmF0Y2gpOworCisJCS8qCisJCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1v bmx5IHNjYW4sIHdlIG5lZWQgYSB0dXBsZSBzdG9yYWdlCisJCSAqIHdvcmtzcGFjZS4gV2UgYWxs b2NhdGUgQkxDS1NaIGZvciB0aGlzLCB3aGljaCBzaG91bGQgYWx3YXlzIGdpdmUKKwkJICogdGhl IGluZGV4IEFNIGVub3VnaCBzcGFjZSB0byBmaXQgYSBmdWxsIHBhZ2UncyB3b3J0aCBvZiB0dXBs ZXMuCisJCSAqLworCQliYXRjaC0+Y3VyclR1cGxlcyA9IE5VTEw7CisJCWlmIChzY2FuLT54c193 YW50X2l0dXApCisJCQliYXRjaC0+Y3VyclR1cGxlcyA9IHBhbGxvYyhCTENLU1opOworCisJCS8q CisJCSAqIEJhdGNoZXMgYWxsb2NhdGUga2lsbGVkSXRlbXMgbGF6aWx5ICh0aG91Z2ggbm90ZSB0 aGF0IGNhY2hlZAorCQkgKiBiYXRjaGVzIGtlZXAgdGhlaXIga2lsbGVkSXRlbXMgYWxsb2NhdGlv biB3aGVuIHJlY3ljbGVkKQorCQkgKi8KKwkJYmF0Y2gtPmtpbGxlZEl0ZW1zID0gTlVMTDsKKwl9 CisKKwkvKiB4c193YW50X2l0dXAgc2NhbnMgbXVzdCBnZXQgYSBjdXJyVHVwbGVzIHNwYWNlICov CisJQXNzZXJ0KCEoc2Nhbi0+eHNfd2FudF9pdHVwICYmIChiYXRjaC0+Y3VyclR1cGxlcyA9PSBO VUxMKSkpOworCisJLyogc2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJYmF0Y2gtPmJ1ZiA9IElu dmFsaWRCdWZmZXI7CisJYmF0Y2gtPmZpcnN0SXRlbSA9IC0xOworCWJhdGNoLT5sYXN0SXRlbSA9 IC0xOworCWJhdGNoLT5udW1LaWxsZWQgPSAwOworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgor ICogaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UKKyAqCQlFaXRoZXIgc3Rhc2ggdGhlIGJhdGNo IGluIGEgc21hbGwgY2FjaGUgZm9yIHJldXNlLCBvciBmcmVlIGl0LgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVk IGJ5CisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVy ZSBmb3IgcmV1c2UgKHdoZW4gc2NhbgorICogaGFzbid0IGFscmVhZHkgZmluaXNoZWQpIHRvIHJl ZHVjZSBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBzYWZlIHRvIHJlbGVhc2Ug YSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0 aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJl dHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVz IGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2Vk IGJ5IGNhbGxpbmcgaGVyZSBhdCB0aGUgZW5kIG9mIHRoZWlyIGFtZnJlZWJhdGNoIHJvdXRpbmUu CisgKiBJbmRleCBBTXMgdGhhdCB1c2VzIGJhdGNoZXMgc2hvdWxkIGNhbGwgaGVyZSB0byByZWxl YXNlIGEgYmF0Y2ggZnJvbSBhbnkgb2YKKyAqIHRoZWlyIGFtZ2V0YmF0Y2gsIGFtZ2V0Yml0bWFw LCBhbmQgYW1mcmVlYmF0Y2ggcm91dGluZXMuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCit7CisJ QXNzZXJ0KGJhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcik7CisKKwlpZiAoc2Nhbi0+YmF0Y2hx dWV1ZSkKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggc2NhbiBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4t PmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCQlpZiAoc2Nhbi0+ZmluaXNoZWQpCisJCXsKKwkJ CS8qIERvbid0IGJvdGhlciB1c2luZyBjYWNoZSB3aGVuIHNjYW4gaXMgZW5kaW5nICovCisJCX0K KwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVXNlIGNhY2hlLiAgVGhpcyBpcyBnZW5lcmFsbHkg b25seSBiZW5lZmljaWFsIHdoZW4gdGhlcmUgYXJlCisJCQkgKiBtYW55IHNtYWxsIHJlc2NhbnMg b2YgYW4gaW5kZXguCisJCQkgKi8KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9D QUNIRV9CQVRDSEVTOyBpKyspCisJCQl7CisJCQkJaWYgKHNjYW4tPmJhdGNocXVldWUtPmNhY2hl W2ldID09IE5VTEwpCisJCQkJeworCQkJCQkvKiBmb3VuZCBlbXB0eSBzbG90LCB3ZSdyZSBkb25l ICovCisJCQkJCXNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ldID0gYmF0Y2g7CisJCQkJCXJldHVy bjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBGYWlsZWQgdG8gZmluZCBhIGZyZWUg c2xvdCBmb3IgdGhpcyBiYXRjaC4gIFdlJ2xsIGp1c3QgZnJlZSBpdAorCQkgKiBvdXJzZWx2ZXMu ICBUaGlzIGlzbid0IHJlYWxseSBleHBlY3RlZDsgaXQncyBqdXN0IGRlZmVuc2l2ZS4KKwkJICov CisJCWlmIChiYXRjaC0+a2lsbGVkSXRlbXMpCisJCQlwZnJlZShiYXRjaC0+a2lsbGVkSXRlbXMp OworCQlpZiAoYmF0Y2gtPmN1cnJUdXBsZXMpCisJCQlwZnJlZShiYXRjaC0+Y3VyclR1cGxlcyk7 CisJfQorCWVsc2UKKwl7CisJCS8qIGFtZ2V0Yml0bWFwIHNjYW4gY2FsbGVyICovCisJCUFzc2Vy dChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisJCUFzc2VydChiYXRjaC0+a2lsbGVkSXRl bXMgPT0gTlVMTCk7CisJCUFzc2VydChiYXRjaC0+Y3VyclR1cGxlcyA9PSBOVUxMKTsKKwl9CisK KwkvKiBubyBmcmVlIHNsb3QgdG8gc2F2ZSB0aGlzIGJhdGNoIChleHBlY3RlZCB3aXRoIGFtZ2V0 Yml0bWFwIGNhbGxlcnMpICovCisJcGZyZWUoYmF0Y2gpOworfQorCisvKgorICogcXNvcnQgY29t cGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50IGFycmF5cworICovCitzdGF0aWMgaW50CitiYXRjaF9j b21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJaW50CQkJYSA9 ICooKGNvbnN0IGludCAqKSB2YSk7CisJaW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2Yik7CisK KwlyZXR1cm4gcGdfY21wX3MzMihhLCBiKTsKK30KKworc3RhdGljIHZvaWQKK2JhdGNoX2RlYnVn X3ByaW50X2JhdGNoZXMoY29uc3QgY2hhciAqbGFiZWwsIEluZGV4U2NhbkRlc2Mgc2NhbikKK3sK KyNpZmRlZiBJTkRFWEFNX0RFQlVHCisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJh dGNocXVldWU7CisKKwlpZiAoIXNjYW4tPmJhdGNocXVldWUpCisJCXJldHVybjsKKworCWlmICgh QW1SZWd1bGFyQmFja2VuZFByb2Nlc3MoKSkKKwkJcmV0dXJuOworCWlmIChJc0NhdGFsb2dSZWxh dGlvbihzY2FuLT5pbmRleFJlbGF0aW9uKSkKKwkJcmV0dXJuOworCisJREVCVUdfTE9HKCIlczog YmF0Y2hlcyBoZWFkQmF0Y2ggJWQgbmV4dEJhdGNoICVkIiwKKwkJCSAgbGFiZWwsCisJCQkgIGJh dGNocXVldWUtPmhlYWRCYXRjaCwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKTsKKworCWZvciAoaW50 IGkgPSBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2g7IGkgPCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2g7IGkr KykKKwl7CisJCUJhdGNoSW5kZXhTY2FuIGJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBp KTsKKworCQlERUJVR19MT0coIiAgICBiYXRjaCAlZCBjdXJyUGFnZSAldSAlcCBmaXJzdEl0ZW0g JWQgbGFzdEl0ZW0gJWQga2lsbGVkICVkIiwKKwkJCQkgIGksIGJhdGNoLT5jdXJyUGFnZSwgYmF0 Y2gsIGJhdGNoLT5maXJzdEl0ZW0sCisJCQkJICBiYXRjaC0+bGFzdEl0ZW0sIGJhdGNoLT5udW1L aWxsZWQpOworCX0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCmlu ZGV4IGUyOWMwMzA4OS4uYzAxZmZmNzA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1 aWxkCkBAIC01LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdhbXZhbGlk YXRlLmMnLAogICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAorICAnaW5kZXhiYXRjaC5jJywK ICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggNTNkNGE2MWRjLi4yMzFkYTIwZTQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC00NzEsNyArNDcxLDcgQEAgcHJvcGVyLiAgQSBw bGFpbiBpbmRleCBzY2FuIHdpbGwgZXZlbiByZWNvZ25pemUgTFBfVU5VU0VEIGl0ZW1zIGluIHRo ZQogaGVhcCAoaXRlbXMgdGhhdCBjb3VsZCBiZSByZWN5Y2xlZCBidXQgaGF2ZW4ndCBiZWVuIGp1 c3QgeWV0KSBhcyAibm90CiB2aXNpYmxlIiAtLSBldmVuIHdoZW4gdGhlIGhlYXAgcGFnZSBpcyBn ZW5lcmFsbHkgY29uc2lkZXJlZCBhbGwtdmlzaWJsZS4KIAotTFBfREVBRCBzZXR0aW5nIG9mIGlu ZGV4IHR1cGxlcyBieSB0aGUga2lsbF9wcmlvcl90dXBsZSBvcHRpbWl6YXRpb24KK09wcG9ydHVu aXN0aWMgTFBfREVBRCBzZXR0aW5nIG9mIGtub3duLWRlYWQgaW5kZXggdHVwbGVzIGR1cmluZyBp bmRleCBzY2FucwogKGRlc2NyaWJlZCBpbiBmdWxsIGluIHNpbXBsZSBkZWxldGlvbiwgYmVsb3cp IGlzIGFsc28gbW9yZSBjb21wbGljYXRlZCBmb3IKIGluZGV4IHNjYW5zIHRoYXQgZHJvcCB0aGVp ciBsZWFmIHBhZ2UgcGlucy4gIFdlIG11c3QgYmUgY2FyZWZ1bCB0byBhdm9pZAogTFBfREVBRC1t YXJraW5nIGFueSBuZXcgaW5kZXggdHVwbGUgdGhhdCBsb29rcyBsaWtlIGEga25vd24tZGVhZCBp bmRleApAQCAtNDgxLDcgKzQ4MSw3IEBAIG5ldywgdW5yZWxhdGVkIGluZGV4IHR1cGxlLCBvbiB0 aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNoIGhhcyB0aGUgc2FtZQogb3JpZ2luYWwgVElELiAgSXQg d291bGQgYmUgdG90YWxseSB3cm9uZyB0byBMUF9ERUFELXNldCB0aGlzIG5ldywKIHVucmVsYXRl ZCBpbmRleCB0dXBsZS4KIAotV2UgaGFuZGxlIHRoaXMga2lsbF9wcmlvcl90dXBsZSByYWNlIGNv bmRpdGlvbiBieSBoYXZpbmcgYWZmZWN0ZWQgaW5kZXgKK1dlIGhhbmRsZSB0aGlzIExQX0RFQUQg c2V0dGluZyByYWNlIGNvbmRpdGlvbiBieSBoYXZpbmcgYWZmZWN0ZWQgaW5kZXgKIHNjYW5zIGNv bnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBh bGwKIGltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hlZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGlu dGVyaW0gcGVyaW9kIHdoZW4gbm8KIGJ1ZmZlciBwaW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxl bWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9ERUFEIGJpdHMKQEAgLTczNSw3ICs3MzUsNyBA QCBvZiByZWFkZXJzIGNvdWxkIHN0aWxsIG1vdmUgcmlnaHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRu J3QgY291cGxlCiBzYW1lLWxldmVsIGxvY2tzKSwgYnV0IHdlIHByZWZlciB0byBiZSBjb25zZXJ2 YXRpdmUgaGVyZS4KIAogRHVyaW5nIHJlY292ZXJ5IGFsbCBpbmRleCBzY2FucyBzdGFydCB3aXRo IGlnbm9yZV9raWxsZWRfdHVwbGVzID0gZmFsc2UKLWFuZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlv cl90dXBsZS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgorYW5kIHdlIG5ldmVy IExQX0RFQUQtbWFyayB0dXBsZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4K IG9uIHRoZSBzdGFuZGJ5IHNlcnZlciBjYW4gYmUgb2xkZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4g b24gdGhlIHByaW1hcnkKIHNlcnZlciwgd2hpY2ggbWVhbnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQg TFBfREVBRCBldmVuIHdoZW4gdGhleSBhcmUKIHN0aWxsIHZpc2libGUgb24gdGhlIHN0YW5kYnku IFdlIGRvbid0IFdBTCBsb2cgdHVwbGUgTFBfREVBRCBiaXRzLCBidXQKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRwYWdlLmMKaW5kZXggY2ZiMDdiMmJjLi4xNWI3ODhlM2EgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0xMDMzLDYgKzEwMzMsOSBAQCBfYnRfcmVsYnVmKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAqIExvY2sgaXMgYWNxdWlyZWQgd2l0aG91dCBhY3F1aXJp bmcgYW5vdGhlciBwaW4uICBUaGlzIGlzIGxpa2UgYSByYXcKICAqIExvY2tCdWZmZXIoKSBjYWxs LCBidXQgcGVyZm9ybXMgZXh0cmEgc3RlcHMgbmVlZGVkIGJ5IFZhbGdyaW5kLgogICoKKyAqIE5v dGU6IGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgaGFzIHNpbWlsYXIgVmFsZ3JpbmQgYnVmZmVy IGxvY2sKKyAqIGluc3RydW1lbnRhdGlvbiwgd2hpY2ggd2UgcmVseSBvbiBoZXJlLgorICoKICAq IE5vdGU6IENhbGxlciBtYXkgbmVlZCB0byBjYWxsIF9idF9jaGVja3BhZ2UoKSB3aXRoIGJ1ZiB3 aGVuIHBpbiBvbiBidWYKICAqIHdhc24ndCBvcmlnaW5hbGx5IGFjcXVpcmVkIGluIF9idF9nZXRi dWYoKSBvciBfYnRfcmVsYW5kZ2V0YnVmKCkuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVhZHBhZ2UuYwppbmRleCBiM2I4YjU1MzQuLjkxYzVlNGRhMCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHN0cnVj dCBCVFJlYWRQYWdlU3RhdGUKIHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQgYnkgX2J0X3Jl YWRwYWdlIGZvciBfYnRfY2hlY2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7CQkJLyogY3Vy cmVudCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJLyogY3VycmVu dCBwYWdlIGJlaW5nIHJlYWQgKi8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJLyogTG93ZXN0IG5v bi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBIaWdo ZXN0IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJZmluYWx0dXA7CQkv KiBOZWVkZWQgYnkgc2NhbnMgd2l0aCBhcnJheSBrZXlzICovCkBAIC02MywxNCArNjQsMTMgQEAg c3RhdGljIGJvb2wgX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1cCk7CiBzdGF0 aWMgYm9vbCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwKIAkJCQkJCQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0YXRpYyB2b2lk IF9idF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkgT2Zm c2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJX2J0X3NldHVw cG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKK3N0YXRpYyB2b2lk IF9idF9zYXZlaXRlbShCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZz ZXQpOworc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQmF0Y2hJbmRleFNjYW4gbmV3 YmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29u c3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAotCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCk7 Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28s IGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJ CQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJICBJ bmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9i dF9zYXZlcG9zdGluZ2l0ZW0oQmF0Y2hJbmRleFNjYW4gbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgs IE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBp bnQgYmFzZU9mZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mg c2NhbiwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJCQkJICBJ bmRleFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNrX2Nv bXBhcmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTExMSwxNSAr MTExLDE1IEBAIHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRl eFNjYW5EZXNjIHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEg ZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3JlYWRwYWdl KCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0Y2guCiAg KgotICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5jdXJyUG9z LmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywg Y3VyclBvcy5tb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0aGV5IGFy ZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+Y3VyclBv cyBhcmUKKyAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBuZXdiYXRj aC5idWY7IHRoZSBidWZmZXIncyBzdGF0ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4gIEFsc28s IG5ld2JhdGNoJ3MgbW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOworICogdGhl eSBhcmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2YgbmV3YmF0 Y2ggYXJlCiAgKiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVyZS4KICAqCiAgKiBXZSBzY2Fu IHRoZSBjdXJyZW50IHBhZ2Ugc3RhcnRpbmcgYXQgb2ZmbnVtIGFuZCBtb3ZpbmcgaW4gdGhlIGlu ZGljYXRlZAotICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMg YXJlIGxvYWRlZCBpbnRvIGN1cnJQb3MuaXRlbXMuCisgKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMg bWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgc2F2ZWQgaW4gbmV3YmF0Y2guaXRlbXMuCiAgKiBt b3JlTGVmdCBvciBtb3JlUmlnaHQgKGFzIGFwcHJvcHJpYXRlKSBpcyBjbGVhcmVkIGlmIF9idF9j aGVja2tleXMgcmVwb3J0cwogICogdGhhdCB0aGVyZSBjYW4gYmUgbm8gbW9yZSBtYXRjaGluZyB0 dXBsZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KICAqIChjb3VsZCBqdXN0IGJlIGZv ciB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2NhbiB3aGVuIHNjYW4gaGFzIGFycmF5cyku CkBAIC0xMzEsOCArMTMxLDggQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJy YXlrZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNo aW5nIGl0ZW1zIGZvdW5kIG9uIHRoZSBwYWdlLCBmYWxzZSBpZiBub25lLgogICovCiBib29sCi1f YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKLQkJCSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbgly ZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFx dWUpIHNjYW4tPm9wYXF1ZTsKQEAgLTE0NCwyMyArMTQ0LDIwIEBAIF9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAog CWJvb2wJCWFycmF5S2V5cywKIAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9y ZV9raWxsZWRfdHVwbGVzOwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9IDAs CiAJCQkJaW5kbmF0dHM7CiAKIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIs IGFsb25nIHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShz by0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKG5ld2JhdGNoLT5idWYpOwog CW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9 IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MucHJl dlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKLQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1 ZS0+YnRwb19uZXh0OwotCS8qIGRlbGF5IHNldHRpbmcgc28tPmN1cnJQb3MubHNuIHVudGlsIF9i dF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbiAqLwotCXBzdGF0ZS5kaXIgPSBzby0+Y3VyclBvcy5k aXIgPSBkaXI7Ci0Jc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ID0gMDsKKwlwc3RhdGUuY3Vy cnBhZ2UgPSBuZXdiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihuZXdiYXRj aC0+YnVmKTsKKwluZXdiYXRjaC0+cHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKKwluZXdi YXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKKwlwc3RhdGUuZGlyID0gbmV3YmF0 Y2gtPmRpciA9IGRpcjsKIAogCS8qIGVpdGhlciBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxk IGJlIHNldCBub3cgKG1heSBiZSB1bnNldCBsYXRlcikgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpID8gc28tPmN1cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQ b3MubW9yZUxlZnQpOworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBuZXdi YXRjaC0+bW9yZVJpZ2h0IDogbmV3YmF0Y2gtPm1vcmVMZWZ0KTsKIAlBc3NlcnQoIVBfSUdOT1JF KG9wYXF1ZSkpOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwogCUFz c2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAKIAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxl cyAqLwpAQCAtMTg4LDE0ICsxODUsMTIgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJewogCQkvKiBhbGxv dyBuZXh0L3ByZXYgcGFnZSB0byBiZSByZWFkIGJ5IG90aGVyIHdvcmtlciB3aXRob3V0IGRlbGF5 ICovCiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCQlfYnRfcGFyYWxsZWxf cmVsZWFzZShzY2FuLCBzby0+Y3VyclBvcy5uZXh0UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9z LmN1cnJQYWdlKTsKKwkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoLT5uZXh0 UGFnZSwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVh c2Uoc2Nhbiwgc28tPmN1cnJQb3MucHJldlBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJy UGFnZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBuZXdiYXRjaC0+cHJldlBhZ2Us IG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJfQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+ Y3VyclBvcy5jdXJyUGFnZSwgc2Nhbi0+eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdl KHJlbCwgcHN0YXRlLmN1cnJwYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRp cmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKQEAgLTIxMiwxMSArMjA3LDEwIEBAIF9idF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIg b2ZmbnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRl LmZpbmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGlu ZGV4IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNl OworCQkJCQluZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNj YW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJCQkJCV9idF9wYXJh bGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9z LmN1cnJQYWdlKTsKKwkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBu ZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAt MjgwLDI2ICsyNzQsMjYgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQ b3N0aW5nKGl0dXApKQogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3Nh dmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShu ZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0 ZW1JbmRleCsrOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNl dDsKKwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0 IHN0YXRlIChhbmQgcmVtZW1iZXIgZmlyc3QgVElEKSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0J CQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQli YXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUlu ZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDAp LAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7 CiAJCQkJCWl0ZW1JbmRleCsrOwogCiAJCQkJCS8qIFJlbWVtYmVyIGFsbCBsYXRlciBUSURzICht dXN0IGJlIGF0IGxlYXN0IG9uZSkgKi8KIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1 cGxlR2V0TlBvc3RpbmcoaXR1cCk7IGkrKykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0aW5n aXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5l d2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3Rp bmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VP ZmZzZXQpOwogCQkJCQkJaXRlbUluZGV4Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMzksMTIgKzMz MywxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2Nh bikKLQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJbmV3YmF0Y2gtPm1vcmVS aWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVlUGFn ZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVt ID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJbmV3YmF0 Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7 CiAJfQogCWVsc2UKIAl7CkBAIC0zNjEsMTEgKzM1NCwxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJ CQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkp CiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFm dGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJCQluZXdi YXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJ CQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2Fu X3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOwor CQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIG5ld2JhdGNoLT5jdXJy UGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC00NjYsMjcgKzQ1OCwy NyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwg T2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCiAJCQkJ CWl0ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBp dHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1 cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKIAkJCQkJdWludDE2CQlu aXRlbXMgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7Ci0JCQkJCWludAkJCXR1cGxlT2Zm c2V0OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxp c3Qgc3RhdGUgKGFuZCByZW1lbWJlciBsYXN0IFRJRCkgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0J CQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUlu ZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0 ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxl R2V0UG9zdGluZ04oaXR1cCwgbml0ZW1zIC0gMSksCi0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJ CQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAogCQkJCQkvKiBSZW1lbWJlciBhbGwgcHJp b3IgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAoaW50IGkgPSBuaXRl bXMgLSAyOyBpID49IDA7IGktLSkKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlf YnRfc2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZl cG9zdGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJl ZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJ CQkJCQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC01MDIsMTIgKzQ5 NCwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJICogYmUgZm91bmQgdGhlcmUKIAkJICovCiAJCWlm ICghcHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7 CisJCQluZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49 IDApOwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9z Lmxhc3RJdGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1J bmRleCA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0g aXRlbUluZGV4OworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0g MTsKIAl9CiAKIAkvKgpAQCAtNTI0LDcgKzUxNSw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAqLwog CUFzc2VydCghcHN0YXRlLmZvcmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3VyclBv cy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0Y2gt PmZpcnN0SXRlbSA8PSBuZXdiYXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAyNyw5MCAr MTAxOCw5MyBAQCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpciwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVt IGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBp dGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9z YXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVy IG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEJhdGNoSW5kZXhTY2FuIG5l d2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVw bGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQ aXZvdChpdHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+ aGVhcFRpZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsK LQlpZiAoc28tPmN1cnJUdXBsZXMpCisJLyogY29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhl IGl0ZW1zIGFycmF5ICovCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZCA9IGl0 dXAtPnRfdGlkOworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gb2Zm bnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6ID0g SW5kZXhUdXBsZVNpemUoaXR1cCk7CiAKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1 cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3Vy clBvcy5uZXh0VHVwbGVPZmZzZXQsIGl0dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5leHRU dXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRlbUlu ZGV4XS50dXBsZU9mZnNldCA9ICp0dXBsZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5jdXJy VHVwbGVzICsgKnR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQgKz0g TUFYQUxJR04oaXR1cHN6KTsKIAl9CiB9CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJ RHMvaXRlbXMgZnJvbSBhIHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2ZXMg YW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0 aGF0IGlzCi0gKiByZXR1cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQg VElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRf c2F2ZXBvc3RpbmdpdGVtKCkuCisgKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2gu aXRlbXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4gZmly c3QuICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkIGJl IHNhdmVkCisgKiBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBSZXR1 cm5zIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlz IHN0b3JlZCBhdCBpZgotICogbmVlZGVkLgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBvZmZz ZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3RvcmVk IGF0IGlmIG5lZWRlZC4KICAqLwogc3RhdGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJU U2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJ ICBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkKK19idF9z ZXR1cHBvc3RpbmdpdGVtcyhCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwK KwkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBU aWQsCisJCQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2Nh blBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0 Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAlB c3NlcnQoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9 ICpoZWFwVGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1 cnJUdXBsZXMpCisJLyogY29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0ZW1zIGFycmF5 ICovCisJaXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2Zm bnVtOworCisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJLyogU2F2ZSBiYXNlIElu ZGV4VHVwbGUgKHRydW5jYXRlIHBvc3RpbmcgbGlzdCkgKi8KIAkJSW5kZXhUdXBsZQliYXNlOwog CQlTaXplCQlpdHVwc3ogPSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChpdHVwKTsKIAogCQlp dHVwc3ogPSBNQVhBTElHTihpdHVwc3opOwotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+ Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQ7Ci0JCWJhc2UgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJy VHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaXRlbS0+dHVwbGVPZmZz ZXQgPSAqdHVwbGVPZmZzZXQ7CisJCWJhc2UgPSAoSW5kZXhUdXBsZSkgKG5ld2JhdGNoLT5jdXJy VHVwbGVzICsgKnR1cGxlT2Zmc2V0KTsKIAkJbWVtY3B5KGJhc2UsIGl0dXAsIGl0dXBzeik7CiAJ CS8qIERlZmVuc2l2ZWx5IHJlZHVjZSB3b3JrIGFyZWEgaW5kZXggdHVwbGUgaGVhZGVyIHNpemUg Ki8KIAkJYmFzZS0+dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CiAJCWJhc2UtPnRfaW5mbyB8 PSBpdHVwc3o7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBpdHVwc3o7CisJCSp0 dXBsZU9mZnNldCArPSBpdHVwc3o7CiAKLQkJcmV0dXJuIGN1cnJJdGVtLT50dXBsZU9mZnNldDsK KwkJcmV0dXJuIGl0ZW0tPnR1cGxlT2Zmc2V0OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgot ICogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBm b3IgY3VycmVudCBwb3N0aW5nCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5p dGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKICAqIHR1cGxlLgogICoKICAqIEFz c3VtZXMgdGhhdCBfYnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxl ZCBmb3IgY3VycmVudAotICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMg cmV0dXJuIHZhbHVlIGFzIHR1cGxlT2Zmc2V0LgorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2Fs bGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVlIGFzIGJhc2VPZmZzZXQuCiAgKi8KIHN0YXRpYyBp bmxpbmUgdm9pZAotX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVt SW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGlu dCB0dXBsZU9mZnNldCkKK19idF9zYXZlcG9zdGluZ2l0ZW0oQmF0Y2hJbmRleFNjYW4gbmV3YmF0 Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCUl0ZW1Qb2ludGVy IGhlYXBUaWQsIGludCBiYXNlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0g JnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0g PSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpo ZWFwVGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT5oZWFwVGlk ID0gKmhlYXBUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CiAKIAkvKgogCSAqIEhh dmUgaW5kZXgtb25seSBzY2FucyByZXR1cm4gdGhlIHNhbWUgYmFzZSBJbmRleFR1cGxlIGZvciBl dmVyeSBUSUQKIAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QK IAkgKi8KLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1 cGxlT2Zmc2V0OworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZz ZXQgPSBiYXNlT2Zmc2V0OwogfQogCiAjZGVmaW5lIExPT0tfQUhFQURfUkVRVUlSRURfUkVDSEVD S1MgCTMKQEAgLTI4MjIsMTMgKzI4MTYsMTMgQEAgbmV3X3ByaW1fc2NhbjoKIAkgKiBOb3RlOiBX ZSBtYWtlIGEgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24g d2lsbAogCSAqIGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0X25leHQsIHdoZW4gaXQgaXMgYXNrZWQg dG8gc3RlcCBvZmYgdGhpcyBwYWdlLgogCSAqIEl0IGlzIHVwIHRvIF9idF9uZXh0IHRvIGNhbmNl bCB0aGlzIHNjaGVkdWxlZCBwcmltaXRpdmUgaW5kZXggc2NhbgotCSAqIHdoZW5ldmVyIGl0IHN0 ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIGN1cnJQb3MuZGlyLgorCSAq IHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIHBz dGF0ZS0+ZGlyLgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8qIFRlbGwg X2J0X3JlYWRwYWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsJ LyogLi4uYnV0IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCiAKIAlpZiAoc2Nhbi0+cGFyYWxsZWxf c2NhbikKLQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHNvLT5jdXJyUG9z LmN1cnJQYWdlKTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHBzdGF0 ZS0+Y3VycnBhZ2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVwbGUgZG9lc24ndCBtYXRjaCB0aGUgbmV3 IHF1YWwgKi8KIAlyZXR1cm4gZmFsc2U7CkBAIC0yOTEzLDE0ICsyOTA3LDYgQEAgX2J0X2FkdmFu Y2VfYXJyYXlfa2V5c19pbmNyZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwKIAkgKiBSZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUg aW4gaW1tZWRpYXRlbHkgYmVmb3JlIHdlCiAJICogd2VyZSBjYWxsZWQuICBUaGlzIGVuc3VyZXMg dGhhdCB0aGUgYXJyYXlzIG9ubHkgZXZlciByYXRjaGV0IGluIHRoZQogCSAqIGN1cnJlbnQgc2Nh biBkaXJlY3Rpb24uCi0JICoKLQkgKiBXaXRob3V0IHRoaXMsIHNjYW5zIGNvdWxkIG92ZXJsb29r IG1hdGNoaW5nIHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGdldHMgcmV2ZXJz ZWQganVzdCBiZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91dCBvZiBpdGVtcyB0bwotCSAqIHJldHVy biwgYnV0IGp1c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHByZXBhcmVzIGFsbCB0aGUgaXRlbXMgZnJv bSB0aGUKLQkgKiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBzby0+Y3VyclBvcy4gIFdoZW4gd2UncmUg b24gdGhlIGZpbmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBpY2FsIGZvciBzby0+Y3VyclBvcyB0byBn ZXQgaW52YWxpZGF0ZWQgb25jZSBidGdldHR1cGxlIGZpbmFsbHkKLQkgKiByZXR1cm5zIGZhbHNl LCB3aGljaCdsbCBlZmZlY3RpdmVseSBpbnZhbGlkYXRlIHRoZSBzY2FuJ3MgYXJyYXkga2V5cy4K LQkgKiBUaGF0IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRob3VnaCAtLSBhbmQgaW4gZ2VuZXJhbCBp dCBtYXkgbmV2ZXIgaGFwcGVuLgogCSAqLwogCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIC1k aXIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCBiNDQyNTIzMTkuLjFkNWIx MThmYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNTksMTEgKzE1OSwxMiBA QCBidGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlhbXJvdXRpbmUtPmFtYWRqdXN0bWVtYmVy cyA9IGJ0YWRqdXN0bWVtYmVyczsKIAlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gYnRiZWdpbnNj YW47CiAJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IGJ0cmVzY2FuOwotCWFtcm91dGluZS0+YW1nZXR0 dXBsZSA9IGJ0Z2V0dHVwbGU7CisJYW1yb3V0aW5lLT5hbWdldHR1cGxlID0gTlVMTDsKKwlhbXJv dXRpbmUtPmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoOworCWFtcm91dGluZS0+YW1mcmVlYmF0Y2gg PSBidGZyZWViYXRjaDsKIAlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXA7CiAJ YW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBidGVuZHNjYW47Ci0JYW1yb3V0aW5lLT5hbW1hcmtwb3Mg PSBidG1hcmtwb3M7Ci0JYW1yb3V0aW5lLT5hbXJlc3RycG9zID0gYnRyZXN0cnBvczsKKwlhbXJv dXRpbmUtPmFtcG9zcmVzZXQgPSBidHBvc3Jlc2V0OwogCWFtcm91dGluZS0+YW1lc3RpbWF0ZXBh cmFsbGVsc2NhbiA9IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW47CiAJYW1yb3V0aW5lLT5hbWluaXRw YXJhbGxlbHNjYW4gPSBidGluaXRwYXJhbGxlbHNjYW47CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVs cmVzY2FuID0gYnRwYXJhbGxlbHJlc2NhbjsKQEAgLTIyMSwxMyArMjIyLDEzIEBAIGJ0aW5zZXJ0 KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogfQogCiAvKgotICoJ YnRnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0 YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBz Y2FuCiAgKi8KLWJvb2wKLWJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKK0JhdGNoSW5kZXhTY2FuCitidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlC YXRjaEluZGV4U2NhbiBiYXRjaCA9IHByaW9yYmF0Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJl bGF0aW9uICE9IE5VTEwpOwogCkBAIC0yNDIsNDMgKzI0MywxOCBAQCBidGdldHR1cGxlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCSAqIHRoZSBhcHByb3ByaWF0ZSBk aXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsCiAJCSAqIF9idF9m aXJzdCgpIHRvIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KIAkJICovCi0JCWlmICgh QlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRfZmlyc3Qoc2Nhbiwg ZGlyKTsKKwkJaWYgKGJhdGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9maXJzdChzY2FuLCBk aXIpOwogCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxk IGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwotCQkJaWYgKHNjYW4t PmtpbGxfcHJpb3JfdHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMsIHJlbWVtYmVyIGl0 IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAqIHR1cGxlcyBhdCBv bmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRoZQotCQkJCSAqIHRl c3QgZm9yIG51bUtpbGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lhOiBpZiB0aGUKLQkJ CQkgKiBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUg c2FtZQotCQkJCSAqIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuIEl0J3Mg bm90IHdvcnRoCi0JCQkJICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNvIHdlIGRvbid0IGRl dGVjdCBpdCwgYnV0IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJp ZXMuCi0JCQkJICovCi0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCQlzby0+ a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJ CQlpZiAoc28tPm51bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJCXNvLT5raWxs ZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQkJfQor CQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoKLQkJCSAqIE5v dyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2NhbiwgZGly KTsKLQkJfQotCi0JCS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4uLiAqLwotCQlp ZiAocmVzKQorCQkvKiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4gKi8KKwkJaWYg KGJhdGNoKQogCQkJYnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdlIG5lZWQgYW5v dGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1BcnJheUtleXMg JiYgX2J0X3N0YXJ0X3ByaW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4gcmVzOworCXJldHVybiBi YXRjaDsKIH0KIAogLyoKQEAgLTI4OCw2ICsyNjQsNyBAQCBpbnQ2NAogYnRnZXRiaXRtYXAoSW5k ZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2g7CiAJaW50 NjQJCW50aWRzID0gMDsKIAlJdGVtUG9pbnRlciBoZWFwVGlkOwogCkBAIC0yOTYsMjkgKzI3Mywy OSBAQCBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCS8q IEVhY2ggbG9vcCBpdGVyYXRpb24gcGVyZm9ybXMgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2Nh biAqLwogCWRvCiAJewotCQkvKiBGZXRjaCB0aGUgZmlyc3QgcGFnZSAmIHR1cGxlICovCi0JCWlm IChfYnRfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKQorCQkvKiBGZXRjaCB0aGUg Zmlyc3QgYmF0Y2ggKi8KKwkJaWYgKChiYXRjaCA9IF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbikpKQogCQl7Ci0JCQkvKiBTYXZlIHR1cGxlIElELCBhbmQgY29udGludWUgc2Nh bm5pbmcgKi8KLQkJCWhlYXBUaWQgPSAmc2Nhbi0+eHNfaGVhcHRpZDsKKwkJCWludAkJCWl0ZW1J bmRleCA9IDA7CisKKwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUncyBUSUQgKi8KKwkJCWhlYXBUaWQg PSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsKIAkJCXRibV9hZGRfdHVwbGVzKHRi bSwgaGVhcFRpZCwgMSwgZmFsc2UpOwogCQkJbnRpZHMrKzsKIAogCQkJZm9yICg7OykKIAkJCXsK LQkJCQkvKgotCQkJCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSB3aXRoaW4gcGFnZS4gIFRoaXMg aXMgdGhlIHNhbWUgYXMgdGhlCi0JCQkJICogZWFzeSBjYXNlIGluIF9idF9uZXh0KCkuCi0JCQkJ ICovCi0JCQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0 ZW0pCisJCQkJLyogQWR2YW5jZSB0byBuZXh0IFRJRCB3aXRoaW4gcGFnZS1zaXplZCBiYXRjaCAq LworCQkJCWlmICgrK2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0SXRlbSkKIAkJCQl7CiAJCQkJCS8q IGxldCBfYnRfbmV4dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAqLwotCQkJCQlpZiAoIV9idF9uZXh0 KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJaXRlbUluZGV4ID0gMDsKKwkJCQkJ YmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOworCQkJ CQlpZiAoIWJhdGNoKQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCi0JCQkJLyogU2F2ZSB0dXBsZSBJ RCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQkJaGVhcFRpZCA9ICZzby0+Y3VyclBvcy5p dGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdLmhlYXBUaWQ7CisJCQkJaGVhcFRpZCA9ICZiYXRj aC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlkOwogCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVh cFRpZCwgMSwgZmFsc2UpOwogCQkJCW50aWRzKys7CiAJCQl9CkBAIC0zNDYsOCArMzIzLDYgQEAg YnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAKIAkv KiBhbGxvY2F0ZSBwcml2YXRlIHdvcmtzcGFjZSAqLwogCXNvID0gcGFsbG9jX29iamVjdChCVFNj YW5PcGFxdWVEYXRhKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlCVFNj YW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nhbi0+bnVtYmVyT2ZLZXlzID4g MCkKIAkJc28tPmtleURhdGEgPSAoU2NhbktleSkgcGFsbG9jKHNjYW4tPm51bWJlck9mS2V5cyAq IHNpemVvZihTY2FuS2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2MSwxOSArMzM2LDkgQEAgYnRiZWdp bnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc28tPm9yZGVy UHJvY3MgPSBOVUxMOwogCXNvLT5hcnJheUNvbnRleHQgPSBOVUxMOwogCi0Jc28tPmtpbGxlZEl0 ZW1zID0gTlVMTDsJCS8qIHVudGlsIG5lZWRlZCAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0J LyoKLQkgKiBXZSBkb24ndCBrbm93IHlldCB3aGV0aGVyIHRoZSBzY2FuIHdpbGwgYmUgaW5kZXgt b25seSwgc28gd2UgZG8gbm90Ci0JICogYWxsb2NhdGUgdGhlIHR1cGxlIHdvcmtzcGFjZSBhcnJh eXMgdW50aWwgYnRyZXNjYW4uICBIb3dldmVyLCB3ZSBzZXQgdXAKLQkgKiBzY2FuLT54c19pdHVw ZGVzYyB3aGV0aGVyIHdlJ2xsIG5lZWQgaXQgb3Igbm90LCBzaW5jZSB0aGF0J3Mgc28gY2hlYXAu Ci0JICovCi0Jc28tPmN1cnJUdXBsZXMgPSBzby0+bWFya1R1cGxlcyA9IE5VTEw7Ci0KLQlzY2Fu LT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKLQogCXNjYW4tPm9wYXF1ZSA9 IHNvOworCXNjYW4tPnhzX2l0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCXNjYW4t Pm1heGl0ZW1zYmF0Y2ggPSBNYXhUSURzUGVyQlRyZWVQYWdlOwogCiAJcmV0dXJuIHNjYW47CiB9 CkBAIC0zODcsNzIgKzM1MiwzNyBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5L ZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2Fu T3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBs b2NrcywgYnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChz by0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwg d2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9i dF9raWxsaXRlbXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3Mp OwotCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdl IHByZWZlciB0byBlYWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUg cmV0dXJucy4KLQkgKiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBh IGNsZWFudXAgbG9jayBvbiB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJv cCBsZWFmIHBhZ2UgcGlucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJh Y2UgY29uZGl0aW9uIGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBp biB0aGUgVk0uCi0JICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhh dCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdC4KLQkgKgotCSAqIFdoZW4gd2UgZHJvcCBwaW5zIGVh Z2VybHksIHRoZSBtZWNoYW5pc20gdGhhdCBtYXJrcyBzby0+a2lsbGVkSXRlbXNbXQotCSAqIGlu ZGV4IHR1cGxlcyBMUF9ERUFEIGhhcyB0byBkZWFsIHdpdGggY29uY3VycmVudCBUSUQgcmVjeWNs aW5nIHJhY2VzLgotCSAqIFRoZSBzY2hlbWUgdXNlZCB0byBkZXRlY3QgdW5zYWZlIFRJRCByZWN5 Y2xpbmcgd29uJ3Qgd29yayB3aGVuIHNjYW5uaW5nCi0JICogdW5sb2dnZWQgcmVsYXRpb25zIChz aW5jZSBpdCBpbnZvbHZlcyBzYXZpbmcgYW4gYWZmZWN0ZWQgcGFnZSdzIExTTikuCi0JICogT3B0 IG91dCBvZiBlYWdlciBwaW4gZHJvcHBpbmcgZHVyaW5nIHVubG9nZ2VkIHJlbGF0aW9uIHNjYW5z IGZvciBub3cKLQkgKiAodGhpcyBpcyBwcmVmZXJhYmxlIHRvIG9wdGluZyBvdXQgb2Yga2lsbF9w cmlvcl90dXBsZSBMUF9ERUFEIHNldHRpbmcpLgotCSAqCi0JICogQWxzbyBvcHQgb3V0IG9mIGRy b3BwaW5nIGxlYWYgcGFnZSBwaW5zIGVhZ2VybHkgZHVyaW5nIGJpdG1hcCBzY2Fucy4KLQkgKiBQ aW5zIGNhbm5vdCBiZSBoZWxkIGZvciBtb3JlIHRoYW4gYW4gaW5zdGFudCBkdXJpbmcgYml0bWFw IHNjYW5zIGVpdGhlcgotCSAqIHdheSwgc28gd2UgbWlnaHQgYXMgd2VsbCBhdm9pZCB3YXN0aW5n IGN5Y2xlcyBvbiBhY3F1aXJpbmcgcGFnZSBMU05zLgotCSAqCi0JICogU2VlIG5idHJlZS9SRUFE TUUgc2VjdGlvbiBvbiBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUuCi0JICoK LQkgKiBOb3RlOiBzby0+ZHJvcFBpbiBzaG91bGQgbmV2ZXIgY2hhbmdlIGFjcm9zcyByZXNjYW5z LgotCSAqLwotCXNvLT5kcm9wUGluID0gKCFzY2FuLT54c193YW50X2l0dXAgJiYKLQkJCQkgICBJ c01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKLQkJCQkgICBSZWxhdGlvbk5lZWRz V0FMKHNjYW4tPmluZGV4UmVsYXRpb24pICYmCi0JCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uICE9 IE5VTEwpOwotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlzby0+bmVlZFByaW1TY2FuID0g ZmFsc2U7Ci0Jc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKLQlzby0+b3Bwb3NpdGVEaXJDaGVjayA9 IGZhbHNlOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOwotCUJUU2NhblBv c0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCi0JLyoKLQkgKiBBbGxvY2F0ZSB0dXBsZSB3b3Jr c3BhY2UgYXJyYXlzLCBpZiBuZWVkZWQgZm9yIGFuIGluZGV4LW9ubHkgc2NhbiBhbmQKLQkgKiBu b3QgYWxyZWFkeSBkb25lIGluIGEgcHJldmlvdXMgcmVzY2FuIGNhbGwuICBUbyBzYXZlIG9uIHBh bGxvYwotCSAqIG92ZXJoZWFkLCBib3RoIHdvcmtzcGFjZXMgYXJlIGFsbG9jYXRlZCBhcyBvbmUg cGFsbG9jIGJsb2NrOyBvbmx5IHRoaXMKLQkgKiBmdW5jdGlvbiBhbmQgYnRlbmRzY2FuIGtub3cg dGhhdC4KLQkgKi8KLQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNvLT5jdXJyVHVwbGVzID09 IE5VTEwpCi0JewotCQlzby0+Y3VyclR1cGxlcyA9IChjaGFyICopIHBhbGxvYyhCTENLU1ogKiAy KTsKLQkJc28tPm1hcmtUdXBsZXMgPSBzby0+Y3VyclR1cGxlcyArIEJMQ0tTWjsKLQl9Ci0KIAkv KgogCSAqIFJlc2V0IHRoZSBzY2FuIGtleXMKIAkgKi8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5u dW1iZXJPZktleXMgPiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+ bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CisJc28tPm5lZWRQcmltU2NhbiA9 IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sg PSBmYWxzZTsKIAlzby0+bnVtYmVyT2ZLZXlzID0gMDsJCS8qIHVudGlsIF9idF9wcmVwcm9jZXNz X2tleXMgc2V0cyBpdCAqLwogCXNvLT5udW1BcnJheUtleXMgPSAwOwkJLyogZGl0dG8gKi8KIH0K IAorLyoKKyAqCWJ0ZnJlZWJhdGNoKCkgLS0gRnJlZSBiYXRjaCByZXNvdXJjZXMsIGluY2x1ZGlu ZyBpdHMgYnVmZmVyIHBpbgorICovCit2b2lkCitidGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNj YW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQoreworCWlmIChiYXRjaC0+bnVtS2lsbGVkID4gMCkK KwkJX2J0X2tpbGxpdGVtcyhzY2FuLCBiYXRjaCk7CisKKwlpZiAoIXNjYW4tPmRyb3BQaW4pCisJ eworCQkvKiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrIGRpZG4ndCB1bnBpbiBwYWdlIGVhcmxp ZXIsIGRvIGl0IG5vdyAqLworCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCQliYXRjaC0+ YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwl9CisKKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShz Y2FuLCBiYXRjaCk7Cit9CisKIC8qCiAgKglidGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2Nh bgogICovCkBAIC00NjEsMTE2ICszOTEsNDggQEAgYnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nh bikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAK LQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRhIGRyb3AgdGhl IHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBC ZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICov Ci0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCUJU U2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCX0KLQotCXNvLT5tYXJrSXRlbUlu ZGV4ID0gLTE7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7Ci0KLQkvKiBO byBuZWVkIHRvIGludmFsaWRhdGUgcG9zaXRpb25zLCB0aGUgUkFNIGlzIGFib3V0IHRvIGJlIGZy ZWVkLiAqLwotCiAJLyogUmVsZWFzZSBzdG9yYWdlICovCiAJaWYgKHNvLT5rZXlEYXRhICE9IE5V TEwpCiAJCXBmcmVlKHNvLT5rZXlEYXRhKTsKIAkvKiBzby0+YXJyYXlLZXlzIGFuZCBzby0+b3Jk ZXJQcm9jcyBhcmUgaW4gYXJyYXlDb250ZXh0ICovCiAJaWYgKHNvLT5hcnJheUNvbnRleHQgIT0g TlVMTCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShzby0+YXJyYXlDb250ZXh0KTsKLQlpZiAoc28t PmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7Ci0JaWYgKHNv LT5jdXJyVHVwbGVzICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5jdXJyVHVwbGVzKTsKLQkvKiBzby0+ bWFya1R1cGxlcyBzaG91bGQgbm90IGJlIHBmcmVlJ2QsIHNlZSBidHJlc2NhbiAqLwogCXBmcmVl KHNvKTsKIH0KIAogLyoKLSAqCWJ0bWFya3BvcygpIC0tIHNhdmUgY3VycmVudCBzY2FuIHBvc2l0 aW9uCisgKglidHBvc3Jlc2V0KCkgLS0gaW52YWxpZGF0ZSBzY2FuJ3MgYXJyYXkga2V5cwogICov CiB2b2lkCi1idG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorYnRwb3NyZXNldChJbmRleFNj YW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIG1hcmtiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiBUaGVyZSBtYXkgYmUgYW4g b2xkIG1hcmsgd2l0aCBhIHBpbiAoYnV0IG5vIGxvY2spLiAqLwotCUJUU2NhblBvc1VucGluSWZQ aW5uZWQoc28tPm1hcmtQb3MpOworCWlmICghc28tPm51bUFycmF5S2V5cykKKwkJcmV0dXJuOwog CiAJLyoKLQkgKiBKdXN0IHJlY29yZCB0aGUgY3VycmVudCBpdGVtSW5kZXguICBJZiB3ZSBsYXRl ciBzdGVwIHRvIG5leHQgcGFnZQotCSAqIGJlZm9yZSByZWxlYXNpbmcgdGhlIG1hcmtlZCBwb3Np dGlvbiwgX2J0X3N0ZXBwYWdlIG1ha2VzIGEgZnVsbCBjb3B5IG9mCi0JICogdGhlIGN1cnJQb3Mg c3RydWN0IGluIG1hcmtQb3MuICBJZiAoYXMgb2Z0ZW4gaGFwcGVucykgdGhlIG1hcmsgaXMgbW92 ZWQKLQkgKiBiZWZvcmUgd2UgbGVhdmUgdGhlIHBhZ2UsIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhh dCB3b3JrLgorCSAqIENvcmUgc3lzdGVtIGlzIGFib3V0IHRvIHJlc3RvcmUgYSBtYXJrIGFzc29j aWF0ZWQgd2l0aCBhIHByZXZpb3VzbHkKKwkgKiByZXR1cm5lZCBiYXRjaC4gIFJlc2V0IHRoZSBz Y2FuJ3MgYXJyYXlzIHRvIG1ha2UgYWxsIHRoaXMgc2FmZS4KIAkgKi8KLQlpZiAoQlRTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXNvLT5tYXJrSXRlbUluZGV4ID0gc28tPmN1cnJQb3Mu aXRlbUluZGV4OworCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIG1hcmtiYXRjaC0+ZGlyKTsK KworCS8qCisJICogQ29yZSBzeXN0ZW0gd2lsbCBpbnZhbGlkYXRlIGFsbCBvdGhlciBiYXRjaGVz LgorCSAqCisJICogRGVhbCB3aXRoIHRoaXMgYnkgdW5zZXR0aW5nIG5lZWRQcmltU2NhbiBhcyB3 ZWxsIGFzIG1vcmVSaWdodCAob3IgYXMKKwkgKiB3ZWxsIGFzIG1vcmVMZWZ0LCB3aGVuIHNjYW5u aW5nIGJhY2t3YXJkcykuICBUaGF0IHdheSwgdGhlIG5leHQgdGltZQorCSAqIF9idF9uZXh0IGlz IGNhbGxlZCBpdCB3aWxsIHN0ZXAgdG8gdGhlIHJpZ2h0IChvciB0byB0aGUgbGVmdCkuICBBdCB0 aGF0CisJICogcG9pbnQgX2J0X3JlYWRwYWdlIHdpbGwgcmVzdG9yZSB0aGUgc2NhbidzIGFycmF5 cyB0byBlbGVtZW50cyB0aGF0CisJICogY29ycmVjdGx5IHRyYWNrIHRoZSBuZXh0IHBhZ2UncyBw b3NpdGlvbiBpbiB0aGUgaW5kZXgncyBrZXkgc3BhY2UuCisJICovCisJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQobWFya2JhdGNoLT5kaXIpKQorCQltYXJrYmF0Y2gtPm1vcmVSaWdodCA9IHRy dWU7CiAJZWxzZQotCXsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0JCXNv LT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JfQotfQotCi0vKgotICoJYnRyZXN0cnBvcygpIC0tIHJl c3RvcmUgc2NhbiB0byBsYXN0IHNhdmVkIHBvc2l0aW9uCi0gKi8KLXZvaWQKLWJ0cmVzdHJwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKLQotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyoK LQkJICogVGhlIHNjYW4gaGFzIG5ldmVyIG1vdmVkIHRvIGEgbmV3IHBhZ2Ugc2luY2UgdGhlIGxh c3QgbWFyay4gIEp1c3QKLQkJICogcmVzdG9yZSB0aGUgaXRlbUluZGV4LgotCQkgKgotCQkgKiBO QjogSW4gdGhpcyBjYXNlIHdlIGNhbid0IGNvdW50IG9uIGFueXRoaW5nIGluIHNvLT5tYXJrUG9z IHRvIGJlCi0JCSAqIGFjY3VyYXRlLgotCQkgKi8KLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0g c28tPm1hcmtJdGVtSW5kZXg7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIG1v dmVkIHRvIGEgbmV3IHBhZ2UgYWZ0ZXIgbGFzdCBtYXJrIG9yIHJlc3RvcmUsIGFuZCB3ZSBhcmUK LQkJICogbm93IHJlc3RvcmluZyB0byB0aGUgbWFya2VkIHBhZ2UuICBXZSBhcmVuJ3QgaG9sZGlu ZyBhbnkgcmVhZAotCQkgKiBsb2NrcywgYnV0IGlmIHdlJ3JlIHN0aWxsIGhvbGRpbmcgdGhlIHBp biBmb3IgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0JCSAqIHdlIG11c3QgZHJvcCBpdC4KLQkJICov Ci0JCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJewotCQkJLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQkJ aWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCQlCVFNj YW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJfQotCi0JCWlmIChCVFNjYW5Qb3NJ c1ZhbGlkKHNvLT5tYXJrUG9zKSkKLQkJewotCQkJLyogYnVtcCBwaW4gb24gbWFyayBidWZmZXIg Zm9yIGFzc2lnbm1lbnQgdG8gY3VycmVudCBidWZmZXIgKi8KLQkJCWlmIChCVFNjYW5Qb3NJc1Bp bm5lZChzby0+bWFya1BvcykpCi0JCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5tYXJrUG9zLmJ1 Zik7Ci0JCQltZW1jcHkoJnNvLT5jdXJyUG9zLCAmc28tPm1hcmtQb3MsCi0JCQkJICAgb2Zmc2V0 b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCQkgICBzby0+bWFya1Bvcy5sYXN0SXRl bSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCQkJ bWVtY3B5KHNvLT5jdXJyVHVwbGVzLCBzby0+bWFya1R1cGxlcywKLQkJCQkJICAgc28tPm1hcmtQ b3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJCS8qIFJlc2V0IHRoZSBzY2FuJ3MgYXJyYXkga2V5cyAo c2VlIF9idF9zdGVwcGFnZSBmb3Igd2h5KSAqLwotCQkJaWYgKHNvLT5udW1BcnJheUtleXMpCi0J CQl7Ci0JCQkJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nhbiwgc28tPmN1cnJQb3MuZGlyKTsKLQkJ CQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQkJQlRTY2Fu UG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQorCQltYXJrYmF0Y2gtPm1vcmVMZWZ0ID0g dHJ1ZTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxz ZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwogfQogCiAvKgpAQCAtODg2LDE1ICs3 NDgsNiBAQCBfYnRfcGFyYWxsZWxfc2VpemUoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJl ciAqbmV4dF9zY2FuX3BhZ2UsCiAJKm5leHRfc2Nhbl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVy OwogCSpsYXN0X2N1cnJfcGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKIAotCS8qCi0JICogUmVz ZXQgc28tPmN1cnJQb3MsIGFuZCBpbml0aWFsaXplIG1vcmVMZWZ0L21vcmVSaWdodCBzdWNoIHRo YXQgdGhlIG5leHQKLQkgKiBjYWxsIHRvIF9idF9yZWFkbmV4dHBhZ2UgdHJlYXRzIHRoaXMgYmFj a2VuZCBzaW1pbGFybHkgdG8gYSBzZXJpYWwKLQkgKiBiYWNrZW5kIHRoYXQgc3RlcHMgZnJvbSAq bGFzdF9jdXJyX3BhZ2UgdG8gKm5leHRfc2Nhbl9wYWdlICh1bmxlc3MgdGhpcwotCSAqIGJhY2tl bmQncyBzby0+Y3VyclBvcyBpcyBpbml0aWFsaXplZCBieSBfYnRfcmVhZGZpcnN0cGFnZSBiZWZv cmUgdGhlbikuCi0JICovCi0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0Jc28t PmN1cnJQb3MubW9yZUxlZnQgPSBzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOwotCiAJaWYg KGZpcnN0KQogCXsKIAkJLyoKQEAgLTEwNDQsOCArODk3LDYgQEAgX2J0X3BhcmFsbGVsX2RvbmUo SW5kZXhTY2FuRGVzYyBzY2FuKQogCUJUUGFyYWxsZWxTY2FuRGVzYyBidHNjYW47CiAJYm9vbAkJ c3RhdHVzX2NoYW5nZWQgPSBmYWxzZTsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpOwotCiAJLyogRG8gbm90aGluZywgZm9yIG5vbi1wYXJhbGxlbCBzY2FucyAqLwog CWlmIChwYXJhbGxlbF9zY2FuID09IE5VTEwpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHNlYXJjaC5jCmluZGV4IDdhNDE2ZDYwYy4uYjA4YmY2MWQ3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKQEAgLTI1LDUzICsyNSwyMyBAQAogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfZHJvcF9sb2NrX2FuZF9tYXli ZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOwogc3RhdGljIEJ1ZmZlciBfYnRf bW92ZXJpZ2h0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtl eSwKIAkJCQkJCQlCdWZmZXIgYnVmLCBib29sIGZvcnVwZGF0ZSwgQlRTdGFjayBzdGFjaywKIAkJ CQkJCQlpbnQgYWNjZXNzKTsKIHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2goUmVsYXRp b24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0YXRpYyBpbnQJX2J0X2Jp bnNyY2hfcG9zdGluZyhCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsCiAJCQkJCQkJCU9mZnNl dE51bWJlciBvZmZudW0pOwotc3RhdGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5pdGVtKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9idF9zdGVwcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9i dF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwK LQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkbmV4dHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkgQmxvY2tO dW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJIGJvb2wgc2Vp emVkKTsKK3N0YXRpYyBCYXRjaEluZGV4U2NhbiBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJT2Zmc2V0TnVt YmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEJhdGNoSW5kZXhTY2FuIF9i dF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKKwkJ CQkJCQkJCSAgIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkgICBTY2FuRGly ZWN0aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRfbG9ja19hbmRf dmFsaWRhdGVfbGVmdChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyICpibGtubywKIAkJCQkJCQkJ CQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRfZW5kcG9pbnQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgQmF0Y2hJbmRl eFNjYW4gX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs CisJCQkJCQkJCSAgIEJhdGNoSW5kZXhTY2FuIGZpcnN0YmF0Y2gpOwogCiAKLS8qCi0gKglfYnRf ZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oKQotICoKLSAqIFVubG9jayBzby0+Y3VyclBvcy5idWYu ICBJZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRvby4KLSAqIERyb3BwaW5n IHRoZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24gYWNxdWlyaW5nIGEgY2xl YW51cCBsb2NrLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9kcm9wX2xvY2tfYW5kX21h eWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKLXsKLQlpZiAoIXNvLT5kcm9w UGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhlIHBpbikgKi8KLQkJX2J0 X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgot CSAqIERyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLQkgKgotCSAqIEhhdmUgdG8gc2V0 IHNvLT5jdXJyUG9zLmxzbiBzbyB0aGF0IF9idF9raWxsaXRlbXMgaGFzIGEgd2F5IHRvIGRldGVj dAotCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0 IGhhdmUgdGFrZW4gcGxhY2UuCi0JICovCi0JQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVsKSk7 Ci0Jc28tPmN1cnJQb3MubHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKHNvLT5jdXJyUG9zLmJ1Zik7 Ci0JX2J0X3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0g SW52YWxpZEJ1ZmZlcjsKLX0KLQogLyoKICAqCV9idF9zZWFyY2goKSAtLSBTZWFyY2ggdGhlIHRy ZWUgZm9yIGEgcGFydGljdWxhciBzY2Fua2V5LAogICoJCW9yIG1vcmUgcHJlY2lzZWx5IGZvciB0 aGUgZmlyc3QgbGVhZiBwYWdlIGl0IGNvdWxkIGJlIG9uLgpAQCAtODYwLDIwICs4MzAsMTYgQEAg X2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLAogICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBv cmRlcmluZy4gIFdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLAogICoJCWlmIGJhY2t3YXJkcyBz Y2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0aGUKICAqCQlx dWFsaWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQsIGRhdGEgYWJv dXQgdGhlCi0gKgkJbWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVk IGludG8gc28tPmN1cnJQb3MuICBXZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFuZCBob2xkIG9u dG8gYSBwaW4gb24gcGFnZSdzIGJ1ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNvLT5kcm9wUGlu IHNjYW5zLCB3aGVuIHdlIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLSAqCQlfYnRf cmV0dXJuaXRlbSBzZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4gb24gc3VjY2Vz cyBleGl0LgorICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRl ZCBpbnRvIHRoZSByZXR1cm5lZCBiYXRjaC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hp bmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8KLSAqIHBpbnMg b3IgbG9ja3MgaGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQuCisgKiBJZiB0 aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4LCB3ZSBqdXN0IHJldHVybiBO VUxMLgogICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUgc28tPmtleURh dGFbXSBzY2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gtdHlwZSBzY2Fu a2V5cyAoc2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAgKiBXaXRoaW4g dGhpcyByb3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5 IHRvIHVzZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAgKi8KLWJv b2wKK0JhdGNoSW5kZXhTY2FuCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAt ODg3LDggKzg1MywxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRTdHJhdGVneTsK IAlCbG9ja051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQlsYXN0Y3VycmJs a25vOworCUJhdGNoSW5kZXhTY2FuIGZpcnN0YmF0Y2g7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lz VmFsaWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2gg Ki8KKwlmaXJzdGJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOwogCiAJLyoK IAkgKiBFeGFtaW5lIHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5kYW50IGtl eXM7IGFsc28gbWFyayB0aGUKQEAgLTkwNCw2ICs4NzIsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmlt U2Nhbik7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtOTEz LDcgKzg4MiwxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKIAkgKi8KIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRf cGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJl dHVybiBmYWxzZTsKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0 YmF0Y2gpOworCQlyZXR1cm4gZmFsc2U7CQkJLyogZGVmaW5pdGVseSBkb25lIChzby0+bmVlZFBy aW1TY2FuIGlzIHVuc2V0KSAqLworCX0KIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2Nhbidz IGFycmF5cyAoaWYgYW55KSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTkzMCwx NCArOTAyLDEwIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCQkgKiBfYnRfcmVhZG5leHRwYWdlIHJlbGVhc2VzIHRoZSBzY2FuIGZvciB1cyAobm90 IF9idF9yZWFkZmlyc3RwYWdlKS4KIAkJICovCiAJCUFzc2VydChzY2FuLT5wYXJhbGxlbF9zY2Fu ICE9IE5VTEwpOwotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCQlBc3NlcnQoYmxrbm8g IT0gUF9OT05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwogCi0JCV9idF9yZXR1cm5pdGVtKHNjYW4s IHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJs a25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpOwogCX0KIAogCS8qCkBAIC0xMjM3LDcgKzEy MDUsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikK IAkgKiBOb3RlOiBjYWxscyBfYnRfcmVhZGZpcnN0cGFnZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2Vz IHRoZSBwYXJhbGxlbCBzY2FuLgogCSAqLwogCWlmIChrZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0 X2VuZHBvaW50KHNjYW4sIGRpcik7CisJCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBm aXJzdGJhdGNoKTsKIAogCS8qCiAJICogV2Ugd2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hl cmUgd2l0aGluIHRoZSBpbmRleC4gIFNldCB1cCBhbgpAQCAtMTUwNSwxMiArMTQ3MywxMiBAQCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBwb3Np dGlvbiBvdXJzZWx2ZXMgb24gdGhlIHRhcmdldCBsZWFmIHBhZ2UuCiAJICovCiAJQXNzZXJ0KFNj YW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikgPT0gaW5za2V5LmJhY2t3YXJkKTsKLQlzdGFjayA9 IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFE KTsKKwlzdGFjayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmZmlyc3RiYXRjaC0+ YnVmLCBCVF9SRUFEKTsKIAogCS8qIGRvbid0IG5lZWQgdG8ga2VlcCB0aGUgc3RhY2sgYXJvdW5k Li4uICovCiAJX2J0X2ZyZWVzdGFjayhzdGFjayk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28t PmN1cnJQb3MuYnVmKSkKKwlpZiAodW5saWtlbHkoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+ YnVmKSkpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCkBAIC0xNTI2LDIzICsx NDk0LDI0IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCQlpZiAoSXNvbGF0aW9uSXNTZXJpYWxpemFibGUoKSkKIAkJewogCQkJUHJlZGljYXRlTG9j a1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNfc25hcHNob3QpOwotCQkJc3RhY2sgPSBfYnRfc2VhcmNo KHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCk7CisJCQlzdGFj ayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmZmlyc3RiYXRjaC0+YnVmLCBCVF9S RUFEKTsKIAkJCV9idF9mcmVlc3RhY2soc3RhY2spOwogCQl9CiAKLQkJaWYgKCFCdWZmZXJJc1Zh bGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5i dWYpKQogCQl7CiAJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJ fQogCiAJLyogcG9zaXRpb24gdG8gdGhlIHByZWNpc2UgaXRlbSBvbiB0aGUgcGFnZSAqLwotCW9m Zm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwgc28tPmN1cnJQb3MuYnVmKTsKKwlvZmZu dW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIGZpcnN0YmF0Y2gtPmJ1Zik7CiAKIAkvKgog CSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2NhbiAodXN1YWxs eSB0aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBzby0+Y3VyclBvcy5idWYpLgorCSAqIGN1cnJl bnRseSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoKIAkgKiBJZiBpbnNrZXkubmV4dGtleSA9IGZh bHNlIGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxzZSwgb2ZmbnVtIGlzCiAJICogcG9zaXRpb25l ZCBhdCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlID49IGluc2tleS5zY2Fua2V5cy4KQEAgLTE1 NjAsMTY4ICsxNTI5LDY5IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3aGVuIGluc2tleSBp cyBib3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4gYWxsIG9mIGl0cyBu b24tcGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIuCiAJICovCi0JaWYg KCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJldHVybiBmYWxzZTsK LQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0 X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIpOwogfQogCiAvKgog ICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCiAgKgotICoJCU9u IGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5 IGJlIHBpbm5lZAotICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUlu ZGV4IGlkZW50aWZpZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVybmVkLgor ICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3YXMgbGFz dCByZXR1cm5lZCBieQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9yIGJhdGNo J3MgcG9zaXRpb25pbmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggcGFnZSB0byBy ZWFkIG5leHQuCiAgKgotICoJCU9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3MgaXMgdXBkYXRl ZCBhcyBuZWVkZWQsIGFuZCBfYnRfcmV0dXJuaXRlbQotICoJCXNldHMgdGhlIG5leHQgaXRlbSB0 byByZXR1cm4gdG8gdGhlIHNjYW4uICBzby0+Y3VyclBvcyByZW1haW5zIHZhbGlkLgorICoJCU9u IHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB0aGUgbmV4dCBiYXRjaC4gIFRoZXJlIG11c3QgYmUgYXQg bGVhc3Qgb25lCisgKgkJbWF0Y2hpbmcgdHVwbGUgb24gYW55IHJldHVybmVkIGJhdGNoIChlbHNl IHdlJ2QganVzdCByZXR1cm4gTlVMTCkuCiAgKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9y ZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRlIHNvLT5jdXJyUG9zLiAgSXQnbGwKLSAqCQlzdGlsbCBi ZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJuIHR1cGxlcyBieSBjaGFuZ2luZyBkaXJl Y3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xsIG5lZWQgdG8gY2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0 aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVz KSwgd2UgcmV0dXJuIE5VTEwuICBJdCdsbCBzdGlsbCBiZQorICoJCXBvc3NpYmxlIGZvciB0aGUg c2NhbiB0byByZXR1cm4gdHVwbGVzIGJ5IGNoYW5naW5nIGRpcmVjdGlvbiwgdGhvdWdoCisgKgkJ d2UnbGwgbmVlZCB0byBjYWxsIF9idF9maXJzdCBhbmV3IGluIHRoYXQgb3RoZXIgZGlyZWN0aW9u LgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK LQotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKgotCSAqIEFk dmFuY2UgdG8gbmV4dCB0dXBsZSBvbiBjdXJyZW50IHBhZ2U7IG9yIGlmIHRoZXJlJ3Mgbm8gbW9y ZSwgdHJ5IHRvCi0JICogc3RlcCB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YS4KLQkgKi8KLQlp ZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCXsKLQkJaWYgKCsrc28tPmN1cnJQb3Mu aXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBw YWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCWVsc2UKLQl7Ci0J CWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSkKLQkJ ewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0J CX0KLQl9Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7Ci19Ci0K LS8qCi0gKiBSZXR1cm4gdGhlIGluZGV4IGl0ZW0gZnJvbSBzby0+Y3VyclBvcy5pdGVtc1tzby0+ Y3VyclBvcy5pdGVtSW5kZXhdIHRvIHRoZQotICogaW5kZXggc2NhbiBieSBzZXR0aW5nIHRoZSBy ZWxldmFudCBmaWVsZHMgaW4gY2FsbGVyJ3MgaW5kZXggc2NhbiBkZXNjcmlwdG9yCi0gKi8KLXN0 YXRpYyBpbmxpbmUgdm9pZAotX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFNj YW5PcGFxdWUgc28pCi17Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3Mu aXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQotCS8qIE1vc3QgcmVjZW50IF9idF9yZWFk cGFnZSBtdXN0IGhhdmUgc3VjY2VlZGVkICovCi0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4ID49IHNvLT5jdXJyUG9z LmZpcnN0SXRlbSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA8PSBzby0+Y3VyclBv cy5sYXN0SXRlbSk7Ci0KLQkvKiBSZXR1cm4gbmV4dCBpdGVtLCBwZXIgYW1nZXR0dXBsZSBjb250 cmFjdCAqLwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQlpZiAoc28t PmN1cnJUdXBsZXMpCi0JCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVw bGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKLX0KLQotLyoKLSAqCV9idF9zdGVwcGFnZSgp IC0tIFN0ZXAgdG8gbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBmb3Igc2NhbgotICoK LSAqIFdyYXBwZXIgb24gX2J0X3JlYWRuZXh0cGFnZSB0aGF0IHBlcmZvcm1zIGZpbmFsIHN0ZXBz IGZvciB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBvcyBtdXN0 IGJlIHZhbGlkLiAgSXRzIGJ1ZmZlciB3aWxsIGJlIHBpbm5lZCwgdGhvdWdoCi0gKiBuZXZlciBs b2NrZWQuIChBY3R1YWxseSwgd2hlbiBzby0+ZHJvcFBpbiB0aGVyZSB3b24ndCBldmVuIGJlIGEg cGluIGhlbGQsCi0gKiB0aG91Z2ggc28tPmN1cnJQb3MuY3VyclBhZ2UgbXVzdCBzdGlsbCBiZSBz ZXQgdG8gYSB2YWxpZCBibG9jayBudW1iZXIuKQotICovCi1zdGF0aWMgYm9vbAotX2J0X3N0ZXBw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2Nh bgorX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQmF0Y2hJ bmRleFNjYW4gcHJpb3JiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7CiAJQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJbGFzdGN1cnJibGtubzsK IAotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKiBCZWZvcmUg bGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JaWYg KHNvLT5udW1LaWxsZWQgPiAwKQotCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCi0JLyoKLQkgKiBC ZWZvcmUgd2UgbW9kaWZ5IGN1cnJQb3MsIG1ha2UgYSBjb3B5IG9mIHRoZSBwYWdlIGRhdGEgaWYg dGhlcmUgd2FzIGEKLQkgKiBtYXJrIHBvc2l0aW9uIHRoYXQgbmVlZHMgaXQuCi0JICovCi0JaWYg KHNvLT5tYXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKiBidW1wIHBpbiBvbiBjdXJyZW50IGJ1 ZmZlciBmb3IgYXNzaWdubWVudCB0byBtYXJrIGJ1ZmZlciAqLwotCQlpZiAoQlRTY2FuUG9zSXNQ aW5uZWQoc28tPmN1cnJQb3MpKQotCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5jdXJyUG9zLmJ1 Zik7Ci0JCW1lbWNweSgmc28tPm1hcmtQb3MsICZzby0+Y3VyclBvcywKLQkJCSAgIG9mZnNldG9m KEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkgICBzby0+Y3VyclBvcy5sYXN0SXRlbSAq IHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCWlmIChzby0+bWFya1R1cGxlcykKLQkJCW1lbWNw eShzby0+bWFya1R1cGxlcywgc28tPmN1cnJUdXBsZXMsCi0JCQkJICAgc28tPmN1cnJQb3MubmV4 dFR1cGxlT2Zmc2V0KTsKLQkJc28tPm1hcmtQb3MuaXRlbUluZGV4ID0gc28tPm1hcmtJdGVtSW5k ZXg7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0KLQkJLyoKLQkJICogSWYgd2UncmUganVz dCBhYm91dCB0byBzdGFydCB0aGUgbmV4dCBwcmltaXRpdmUgaW5kZXggc2NhbgotCQkgKiAocG9z c2libGUgd2l0aCBhIHNjYW4gdGhhdCBoYXMgYXJyYXlzIGtleXMsIGFuZCBuZWVkcyB0byBza2lw IHRvCi0JCSAqIGNvbnRpbnVlIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSwgbW9yZUxl ZnQvbW9yZVJpZ2h0IG9ubHkKLQkJICogaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBw cmltaXRpdmUgaW5kZXggc2Nhbi4gIFRoZXkgbXVzdAotCQkgKiBuZXZlciBiZSB0YWtlbiB0byBp bmRpY2F0ZSB0aGF0IHRoZSB0b3AtbGV2ZWwgaW5kZXggc2NhbiBoYXMgZW5kZWQKLQkJICogKHRo YXQgd291bGQgYmUgd3JvbmcpLgotCQkgKgotCQkgKiBXZSBjb3VsZCBoYW5kbGUgdGhpcyBjYXNl IGJ5IHRyZWF0aW5nIHRoZSBjdXJyZW50IGFycmF5IGtleXMgYXMKLQkJICogbWFya1BvcyBzdGF0 ZS4gIEJ1dCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYXJyYXkgc3RhdGUgbGlrZSB0aGlzCi0J CSAqIHdvdWxkIGFkZCBjb21wbGV4aXR5LiAgSW5zdGVhZCwgd2UganVzdCB1bnNldCBtYXJrUG9z J3MgY29weSBvZgotCQkgKiBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgKHdoaWNoZXZlciBtaWdodCBi ZSBhZmZlY3RlZCksIHdoaWxlIG1ha2luZwotCQkgKiBidHJlc3RycG9zIHJlc2V0IHRoZSBzY2Fu J3MgYXJyYXlzIHRvIHRoZWlyIGluaXRpYWwgc2NhbiBwb3NpdGlvbnMuCi0JCSAqIEluIGVmZmVj dCwgYnRyZXN0cnBvcyBsZWF2ZXMgYWR2YW5jaW5nIHRoZSBhcnJheXMgdXAgdG8gdGhlIGZpcnN0 Ci0JCSAqIF9idF9yZWFkcGFnZSBjYWxsICh0aGF0IHRha2VzIHBsYWNlIGFmdGVyIGl0IGhhcyBy ZXN0b3JlZCBtYXJrUG9zKS4KLQkJICovCi0JCWlmIChzby0+bmVlZFByaW1TY2FuKQotCQl7Ci0J CQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChzby0+Y3VyclBvcy5kaXIpKQotCQkJCXNvLT5t YXJrUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0JCQllbHNlCi0JCQkJc28tPm1hcmtQb3MubW9yZUxl ZnQgPSB0cnVlOwotCQl9Ci0KLQkJLyogbWFyay9yZXN0b3JlIG5vdCBzdXBwb3J0ZWQgYnkgcGFy YWxsZWwgc2NhbnMgKi8KLQkJQXNzZXJ0KCFzY2FuLT5wYXJhbGxlbF9zY2FuKTsKLQl9Ci0KLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKKwlBc3NlcnQoQmxvY2tOdW1iZXJJ c1ZhbGlkKHByaW9yYmF0Y2gtPmN1cnJQYWdlKSk7CiAKIAkvKiBXYWxrIHRvIHRoZSBuZXh0IHBh Z2Ugd2l0aCBkYXRhICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJYmxr bm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJYmxrbm8gPSBwcmlvcmJhdGNoLT5uZXh0UGFn ZTsKIAllbHNlCi0JCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0JbGFzdGN1cnJibGtu byA9IHNvLT5jdXJyUG9zLmN1cnJQYWdlOworCQlibGtubyA9IHByaW9yYmF0Y2gtPnByZXZQYWdl OworCWxhc3RjdXJyYmxrbm8gPSBwcmlvcmJhdGNoLT5jdXJyUGFnZTsKIAogCS8qCi0JICogQ2Fu Y2VsIHByaW1pdGl2ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2NoZWR1bGVkIHdoZW4gdGhlIGNh bGwgdG8KLQkgKiBfYnRfcmVhZHBhZ2UgZm9yIGN1cnJQb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBv cHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlCi0JICogb25lIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4g bm93LiAgKEl0J3Mgb2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5Ci0JICoga2V5cyBhcy1p cywgc2luY2UgdGhlIG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKKwkgKiBD YW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hlZHVsZWQgd2hlbiBwcmlv cmJhdGNoJ3MgY2FsbAorCSAqIHRvIF9idF9yZWFkcGFnZSBoYXBwZW5lZCB0byB1c2UgdGhlIG9w cG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIHRoYXQKKwkgKiB3ZSdyZSBzdGVwcGluZyBpbiBu b3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJyYXkga2V5cworCSAqIGFzLWlz LCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZhbmNlIHRoZW0uKQogCSAqLwot CWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQorCWlmIChwcmlvcmJhdGNoLT5kaXIgIT0gZGly KQogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8 CisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIXByaW9yYmF0Y2gtPm1vcmVS aWdodCA6ICFwcmlvcmJhdGNoLT5tb3JlTGVmdCkpCisJeworCQkvKgorCQkgKiBwcmlvcmJhdGNo IF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24gKHRob3VnaAor CQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBp biBfYnRfZmlyc3QpCisJCSAqLworCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJcmV0dXJu IE5VTEw7CisJfQorCisJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRoZSBzY2FuIHRvIGdl dCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkh X2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkK KwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0 ICovCisKIAlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtu bywgZGlyLCBmYWxzZSk7CiB9CiAKKwogLyoKICAqCV9idF9yZWFkZmlyc3RwYWdlKCkgLS0gUmVh ZCBmaXJzdCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBmb3IgX2J0X2ZpcnN0CiAgKgpAQCAt MTczMSw3MyArMTYwMSw5MCBAQCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKICAqIHRvIHN0b3AgdGhlIHNjYW4gb24gdGhpcyBwYWdlIGJ5IGNhbGxp bmcgX2J0X2NoZWNra2V5cyBhZ2FpbnN0IHRoZSBoaWdoCiAgKiBrZXkuICBTZWUgX2J0X3JlYWRw YWdlIGZvciBmdWxsIGRldGFpbHMuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIG11c3Qg YmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCisgKiBPbiBlbnRy eSwgZmlyc3RiYXRjaCBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMg dmFsaWQpLgogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhlIHNj YW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBPbiBleGl0LCB3ZSdsbCBoYXZlIHVwZGF0 ZWQgc28tPmN1cnJQb3MgYW5kIHJldGFpbmVkIGxvY2tzIGFuZCBwaW5zCisgKiBPbiBleGl0LCB3 ZSdsbCBoYXZlIHVwZGF0ZWQgZmlyc3RiYXRjaCBhbmQgcmV0YWluZWQgbG9ja3MgYW5kIHBpbnMK ICAqIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyBhcyB0aG9zZSBsYWlkIG91dCBmb3IgX2J0 X3JlYWRuZXh0cGFnZSBleGl0LgotICogTGlrZSBfYnRfcmVhZG5leHRwYWdlLCBvdXIgcmV0dXJu IHZhbHVlIGluZGljYXRlcyBpZiB0aGVyZSBhcmUgYW55IG1hdGNoaW5nCi0gKiByZWNvcmRzIGlu IHRoZSBnaXZlbiBkaXJlY3Rpb24uCiAgKgogICogV2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4g Zm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKICAqIHN1Y2Nlc3Mgb3Ig ZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3Np YmxlLgogICovCi1zdGF0aWMgYm9vbAotX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKK3N0YXRpYyBCYXRj aEluZGV4U2NhbgorX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaElu ZGV4U2NhbiBmaXJzdGJhdGNoLAorCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVj dGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOworCUJsb2NrTnVtYmVyIGJsa25vLAorCQkJCWxhc3RjdXJyYmxrbm87CiAKLQlzby0+bnVt S2lsbGVkID0gMDsJCQkvKiBqdXN0IHBhcmFub2lhICovCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAt MTsJCS8qIGRpdHRvICovCi0KLQkvKiBJbml0aWFsaXplIHNvLT5jdXJyUG9zIGZvciB0aGUgZmly c3QgcGFnZSAocGFnZSBpbiBzby0+Y3VyclBvcy5idWYpICovCisJLyogSW5pdGlhbGl6ZSBmaXJz dGJhdGNoJ3MgcG9zaXRpb24gZm9yIHRoZSBmaXJzdCBwYWdlICovCiAJaWYgKHNvLT5uZWVkUHJp bVNjYW4pCiAJewogCQlBc3NlcnQoc28tPm51bUFycmF5S2V5cyk7CiAKLQkJc28tPmN1cnJQb3Mu bW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOworCQlmaXJz dGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7 CiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAl9CiAJZWxzZSBpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKLQkJ c28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZUxlZnQgPSBm YWxzZTsKKwkJZmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAl9CiAJZWxzZQogCXsKLQkJ c28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBm YWxzZTsKKwkJZmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlmaXJzdGJhdGNoLT5tb3Jl UmlnaHQgPSBmYWxzZTsKIAl9CiAKIAkvKgogCSAqIEF0dGVtcHQgdG8gbG9hZCBtYXRjaGluZyB0 dXBsZXMgZnJvbSB0aGUgZmlyc3QgcGFnZS4KIAkgKgotCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBh Z2Ugd2lsbCBmaW5pc2ggaW5pdGlhbGl6aW5nIHRoZSBzby0+Y3VyclBvcyBmaWVsZHMuCisJICog Tm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIGZpcnN0 YmF0Y2ggZmllbGRzLgogCSAqIF9idF9yZWFkcGFnZSBhbHNvIHJlbGVhc2VzIHBhcmFsbGVsIHNj YW4gKGV2ZW4gd2hlbiBpdCByZXR1cm5zIGZhbHNlKS4KIAkgKi8KLQlpZiAoX2J0X3JlYWRwYWdl KHNjYW4sIGRpciwgb2ZmbnVtLCB0cnVlKSkKKwlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGZpcnN0 YmF0Y2gsIGRpciwgb2ZmbnVtLCB0cnVlKSkKIAl7Ci0JCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmlu ZGV4UmVsYXRpb247Ci0KLQkJLyoKLQkJICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERyb3Ag dGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGluKSBvbgotCQkgKiBzby0+Y3VyclBvcy5idWYgaW4g cHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUgcmV0dXJuaW5nIHR1cGxlcy4KLQkJICovCi0JCUFz c2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlfYnRfZHJvcF9sb2NrX2Fu ZF9tYXliZV9waW4ocmVsLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQkvKiBfYnRfcmVhZHBhZ2Ug c2F2ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBmaXJzdGJhdGNoLml0ZW1zW10gKi8KKwkJaW5k ZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBmaXJzdGJhdGNoKTsKKwkJcmV0dXJuIGZpcnN0 YmF0Y2g7CiAJfQogCi0JLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRo ZSBwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZiAqLwotCV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhS ZWxhdGlvbiwgc28tPmN1cnJQb3MuYnVmKTsKKwkvKiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNo aW5nIGRhdGEgb24gdGhlIHBhZ2UgKi8KKwlfYnRfcmVsYnVmKHNjYW4tPmluZGV4UmVsYXRpb24s IGZpcnN0YmF0Y2gtPmJ1Zik7CisJZmlyc3RiYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAot CS8qIENhbGwgX2J0X3JlYWRuZXh0cGFnZSB1c2luZyBpdHMgX2J0X3N0ZXBwYWdlIHdyYXBwZXIg ZnVuY3Rpb24gKi8KLQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQlyZXR1cm4gZmFs c2U7CisJLyogV2FsayB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YSAqLworCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJsa25vID0gZmlyc3RiYXRjaC0+bmV4dFBhZ2U7CisJ ZWxzZQorCQlibGtubyA9IGZpcnN0YmF0Y2gtPnByZXZQYWdlOworCWxhc3RjdXJyYmxrbm8gPSBm aXJzdGJhdGNoLT5jdXJyUGFnZTsKIAotCS8qIF9idF9yZWFkcGFnZSBmb3IgYSBsYXRlciBwYWdl IChub3cgaW4gc28tPmN1cnJQb3MpIHN1Y2NlZWRlZCAqLwotCXJldHVybiB0cnVlOworCUFzc2Vy dChmaXJzdGJhdGNoLT5kaXIgPT0gZGlyKTsKKworCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJ KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCSAhZmlyc3RiYXRjaC0+bW9yZVJpZ2h0 IDogIWZpcnN0YmF0Y2gtPm1vcmVMZWZ0KSkKKwl7CisJCS8qCisJCSAqIGZpcnN0YmF0Y2ggX2J0 X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCisJCSAq IGlmIHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9i dF9maXJzdCkKKwkJICovCisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0 YmF0Y2gpOworCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisKKwkvKiBw YXJhbGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwlp ZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCisJCSFfYnRfcGFyYWxsZWxfc2VpemUo c2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQorCQlyZXR1cm4gTlVMTDsJCQkv KiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKworCXJldHVybiBfYnRf cmVhZG5leHRwYWdlKHNjYW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIGZhbHNlKTsKIH0K IAogLyoKQEAgLTE4MDcsMTAyICsxNjk0LDY1IEBAIF9idF9yZWFkZmlyc3RwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCiAgKiBw cmV2aW91c2x5LXNhdmVkIHJpZ2h0IGxpbmsgb3IgbGVmdCBsaW5rLiAgbGFzdGN1cnJibGtubyBp cyB0aGUgcGFnZSB0aGF0CiAgKiB3YXMgY3VycmVudCBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGJs a25vIGxpbmsgd2FzIHNhdmVkLCB3aGljaCB3ZSB1c2UgdG8KICAqIHJlYXNvbiBhYm91dCBjb25j dXJyZW50IHBhZ2Ugc3BsaXRzL3BhZ2UgZGVsZXRpb25zIGR1cmluZyBiYWNrd2FyZHMgc2NhbnMu Ci0gKiBJbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2VpemVkPWZhbHNlLCBibGtubyBpcyBlaXRo ZXIgc28tPmN1cnJQb3MubmV4dFBhZ2UKLSAqIG9yIHNvLT5jdXJyUG9zLnByZXZQYWdlLCBhbmQg bGFzdGN1cnJibGtubyBpcyBzby0+Y3VyclBvcy5jdXJyUGFnZS4KKyAqIGJsa25vIGlzIHRoZSBw cmlvciBiYXRjaCdzIG5leHRQYWdlIG9yIHByZXZQYWdlIChkZXBlbmRpbmcgb24gdGhlIGN1cnJl bnQKKyAqIHNjYW4gZGlyZWN0aW9uKSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIGJh dGNoJ3MgY3VyclBhZ2UuCiAgKgotICogT24gZW50cnksIHNvLT5jdXJyUG9zIHNob3VsZG4ndCBi ZSBsb2NrZWQgYnkgY2FsbGVyLiAgc28tPmN1cnJQb3MuYnVmIG11c3QKLSAqIGJlIEludmFsaWRC dWZmZXIvdW5waW5uZWQgYXMgbmVlZGVkIGJ5IGNhbGxlciAobm90ZSB0aGF0IGxhc3RjdXJyYmxr bm8KLSAqIHdvbid0IG5lZWQgdG8gYmUgcmVhZCBhZ2FpbiBpbiBhbG1vc3QgYWxsIGNhc2VzKS4g IFBhcmFsbGVsIHNjYW4gY2FsbGVycwotICogdGhhdCBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNh bGxpbmcgaGVyZSBzaG91bGQgcGFzcyBzZWl6ZWQ9dHJ1ZTsgc3VjaCBhCi0gKiBjYWxsZXIncyBi bGtubyBhbmQgbGFzdGN1cnJibGtubyBhcmd1bWVudHMgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nh bi4KLSAqIHNlaXplZD1mYWxzZSBjYWxsZXJzIGp1c3QgcGFzcyB1cyB0aGUgYmxrbm8vbGFzdGN1 cnJibGtubyB0YWtlbiBmcm9tIHRoZWlyCi0gKiBzby0+Y3VyclBvcywgd2hpY2ggKGFsb25nIHdp dGggc28tPmN1cnJQb3MgaXRzZWxmKSBjYW4gYmUgdXNlZCB0byBlbmQgdGhlCi0gKiBzY2FuLiAg QSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gY2FuIG5ldmVyIGJlIGFzc3VtZWQgdG8gYmUg dGhlIHBhZ2UKLSAqIHRoYXQgbXVzdCBiZSByZWFkIG5leHQgZHVyaW5nIGEgcGFyYWxsZWwgc2Nh biwgdGhvdWdoLiAgV2UgbXVzdCBmaWd1cmUgdGhhdAotICogcGFydCBvdXQgZm9yIG91cnNlbHZl cyBieSBzZWl6aW5nIHRoZSBzY2FuICh0aGUgY29ycmVjdCBwYWdlIHRvIHJlYWQgbWlnaHQKLSAq IGFscmVhZHkgYmUgYmV5b25kIHRoZSBzZWl6ZWQ9ZmFsc2UgY2FsbGVyJ3MgYmxrbm8gZHVyaW5n IGEgcGFyYWxsZWwgc2NhbiwKLSAqIHVubGVzcyBibGtuby9zby0+Y3VyclBvcy5uZXh0UGFnZS9z by0+Y3VyclBvcy5wcmV2UGFnZSBpcyBhbHJlYWR5IFBfTk9ORSwKLSAqIG9yIHVubGVzcyBzby0+ Y3VyclBvcy5tb3JlUmlnaHQvc28tPmN1cnJQb3MubW9yZUxlZnQgaXMgYWxyZWFkeSB1bnNldCku CisgKiBPbiBlbnRyeSwgbm8gcGFnZSBzaG91bGQgYmUgbG9ja2VkIGJ5IGNhbGxlci4KICAqCi0g KiBPbiBzdWNjZXNzIGV4aXQsIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBkYXRh IGZyb20gdGhlIG5leHQKLSAqIGludGVyZXN0aW5nIHBhZ2UsIGFuZCB3ZSByZXR1cm4gdHJ1ZS4g IFdlIGhvbGQgYSBwaW4gb24gdGhlIGJ1ZmZlciBvbgotICogc3VjY2VzcyBleGl0IChleGNlcHQg ZHVyaW5nIHNvLT5kcm9wUGluIGluZGV4IHNjYW5zLCB3aGVuIHdlIGRyb3AgdGhlIHBpbgotICog ZWFnZXJseSB0byBhdm9pZCBibG9ja2luZyBWQUNVVU0pLgorICogT24gc3VjY2VzcyBleGl0LCBy ZXR1cm5zIGJhdGNoIGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBuZXh0IHBhZ2UgdGhhdCBoYXMK KyAqIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtLiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0 Y2hpbmcgaXRlbXMgaW4gdGhlCisgKiBnaXZlbiBzY2FuIGRpcmVjdGlvbiwgd2UganVzdCByZXR1 cm4gTlVMTC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyByZWNvcmRzIGlu IHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAqIHNvLT5jdXJyUG9zICh3aGls ZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMpLCBhbmQgcmV0dXJuIGZhbHNl LgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVsIHNjYW4g Y2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xsIGNhbGwg X2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqIFBhcmFsbGVsIHNj YW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuICBibGtu byBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNjYW4u ICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFzIHBvc3NpYmxlLgogICovCi1z dGF0aWMgYm9vbAorc3RhdGljIEJhdGNoSW5kZXhTY2FuCiBfYnRfcmVhZG5leHRwYWdlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJIEJsb2NrTnVtYmVyIGxhc3Rj dXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXplZCkKKwkJCQkgQmxvY2tOdW1i ZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKQogewog CVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoOwog Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2VpemVk KTsKLQlBc3NlcnQoIShibGtubyA9PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFCVFNj YW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0 IGJhdGNoICovCisJbmV3YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CiAK IAkvKgotCSAqIFJlbWVtYmVyIHRoYXQgdGhlIHNjYW4gYWxyZWFkeSByZWFkIGxhc3RjdXJyYmxr bm8sIGEgcGFnZSB0byB0aGUgbGVmdAotCSAqIG9mIGJsa25vIChvciByZW1lbWJlciByZWFkaW5n IGEgcGFnZSB0byB0aGUgcmlnaHQsIGZvciBiYWNrd2FyZHMgc2NhbnMpCisJICogbmV3YmF0Y2gg d2lsbCBiZSB0aGUgYmF0Y2ggZm9yIGxhc3RjdXJyYmxrbm8sIGEgcGFnZSB0byB0aGUgbGVmdCBv ZgorCSAqIGJsa25vIChvciB0byB0aGUgcmlnaHQsIHdoZW4gdGhlIHNjYW4gaXMgbW92aW5nIGJh Y2t3YXJkcykKIAkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlzby0+ Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JZWxzZQotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQg PSB0cnVlOworCW5ld2JhdGNoLT5tb3JlTGVmdCA9IHRydWU7CisJbmV3YmF0Y2gtPm1vcmVSaWdo dCA9IHRydWU7CiAKIAlmb3IgKDs7KQogCXsKIAkJUGFnZQkJcGFnZTsKIAkJQlRQYWdlT3BhcXVl IG9wYXF1ZTsKIAotCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8Ci0JCQkoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8KLQkJCSAhc28tPmN1cnJQb3MubW9yZVJpZ2h0IDogIXNvLT5jdXJyUG9z Lm1vcmVMZWZ0KSkKLQkJewotCQkJLyogbW9zdCByZWNlbnQgX2J0X3JlYWRwYWdlIGNhbGwgKGZv ciBsYXN0Y3VycmJsa25vKSBlbmRlZCBzY2FuICovCi0JCQlBc3NlcnQoc28tPmN1cnJQb3MuY3Vy clBhZ2UgPT0gbGFzdGN1cnJibGtubyAmJiAhc2VpemVkKTsKLQkJCUJUU2NhblBvc0ludmFsaWRh dGUoc28tPmN1cnJQb3MpOwotCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CS8qIGlmZiAhc28t Pm5lZWRQcmltU2NhbiAqLwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJQXNzZXJ0KCFzby0+ bmVlZFByaW1TY2FuKTsKLQotCQkvKiBwYXJhbGxlbCBzY2FuIG11c3QgbmV2ZXIgYWN0dWFsbHkg dmlzaXQgc28tPmN1cnJQb3MgYmxrbm8gKi8KLQkJaWYgKCFzZWl6ZWQgJiYgc2Nhbi0+cGFyYWxs ZWxfc2NhbiAhPSBOVUxMICYmCi0JCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywg Jmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKLQkJewotCQkJLyogd2hvbGUgc2NhbiBpcyBub3cgZG9u ZSAob3IgYW5vdGhlciBwcmltaXRpdmUgc2NhbiByZXF1aXJlZCkgKi8KLQkJCUJUU2NhblBvc0lu dmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9CisJCUFzc2VydCgh KChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CisJCUFzc2VydChi bGtubyAhPSBQX05PTkUgJiYgbGFzdGN1cnJibGtubyAhPSBQX05PTkUpOwogCiAJCWlmIChTY2Fu RGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGJ1dCBjaGVj ayBmb3IgaW50ZXJydXB0cyBmaXJzdCAqLwogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJ CXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtubywgQlRfUkVBRCk7CisJCQlu ZXdiYXRjaC0+YnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKIAkJfQogCQll bHNlCiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGF2b2lkaW5nIHJhY2UgKGFsc28gY2hlY2tzIGZv ciBpbnRlcnJ1cHRzKSAqLwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlk YXRlX2xlZnQocmVsLCAmYmxrbm8sCi0JCQkJCQkJCQkJCQkJCSBsYXN0Y3VycmJsa25vKTsKLQkJ CWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1ZmZlcikKKwkJCW5ld2JhdGNoLT5idWYg PSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKKwkJCQkJCQkJCQkJCQkg ICBsYXN0Y3VycmJsa25vKTsKKwkJCWlmIChuZXdiYXRjaC0+YnVmID09IEludmFsaWRCdWZmZXIp CiAJCQl7CiAJCQkJLyogbXVzdCBoYXZlIGJlZW4gYSBjb25jdXJyZW50IGRlbGV0aW9uIG9mIGxl ZnRtb3N0IHBhZ2UgKi8KLQkJCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAkJ CQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKLQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJaW5kZXhh bV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJCXJldHVybiBOVUxMOwog CQkJfQogCQl9CiAKLQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwkJ cGFnZSA9IEJ1ZmZlckdldFBhZ2UobmV3YmF0Y2gtPmJ1Zik7CiAJCW9wYXF1ZSA9IEJUUGFnZUdl dE9wYXF1ZShwYWdlKTsKIAkJbGFzdGN1cnJibGtubyA9IGJsa25vOwogCQlpZiAobGlrZWx5KCFQ X0lHTk9SRShvcGFxdWUpKSkKQEAgLTE5MTAsMTcgKzE3NjAsMTcgQEAgX2J0X3JlYWRuZXh0cGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCQkJLyogc2VlIGlmIHRo ZXJlIGFyZSBhbnkgbWF0Y2hlcyBvbiB0aGlzIHBhZ2UgKi8KIAkJCWlmIChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikpCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0IHRoaXMgd2lsbCBjbGVhciBt b3JlUmlnaHQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRp ciwgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdl KHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBm aXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLm5leHRQYWdl OworCQkJCWJsa25vID0gbmV3YmF0Y2gtPm5leHRQYWdlOwogCQkJfQogCQkJZWxzZQogCQkJewot CQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZUxlZnQgaWYgd2UgY2FuIHN0b3Ag Ki8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUGFnZUdldE1heE9mZnNldE51bWJl cihwYWdlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBk aXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBmaXJzdHBhZ2UpKQog CQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOworCQkJCWJsa25v ID0gbmV3YmF0Y2gtPnByZXZQYWdlOwogCQkJfQogCQl9CiAJCWVsc2UKQEAgLTE5MzUsMTkgKzE3 ODUsMzkgQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVy IGJsa25vLAogCQl9CiAKIAkJLyogbm8gbWF0Y2hpbmcgdHVwbGVzIG9uIHRoaXMgcGFnZSAqLwot CQlfYnRfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJc2VpemVkID0gZmFsc2U7CQkJ LyogcmVsZWFzZWQgYnkgX2J0X3JlYWRwYWdlIChvciBieSB1cykgKi8KKwkJX2J0X3JlbGJ1Zihy ZWwsIG5ld2JhdGNoLT5idWYpOworCQluZXdiYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwor CQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbj8gKi8KKwkJaWYgKGJsa25v ID09IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCQkgIW5l d2JhdGNoLT5tb3JlUmlnaHQgOiAhbmV3YmF0Y2gtPm1vcmVMZWZ0KSkKKwkJeworCQkJLyoKKwkJ CSAqIGJsa25vIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24g KHRob3VnaCBpZgorCQkJICogc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwg Y29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkJICovCisJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2Fu KTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJl dHVybiBOVUxMOworCQl9CisKKwkJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRoZSBzY2Fu IHRvIGdldCBuZXh0IGJsa25vICovCisJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKKwkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywg ZmFsc2UpKQorCQl7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRj aCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0 IHNldCAqLworCQl9CisKKwkJZmlyc3RwYWdlID0gZmFsc2U7CQkvKiBuZXh0IHBhZ2UgY2Fubm90 IGJlIGZpcnN0ICovCiAJfQogCi0JLyoKLQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVkLiAgRHJv cCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JICogc28tPmN1cnJQb3MuYnVmIGlu IHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JICovCi0JQXNz ZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGJsa25vKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNQ aW5uZWQoc28tPmN1cnJQb3MpKTsKLQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4ocmVsLCBz byk7CisJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gbmV3YmF0 Y2guaXRlbXNbXSAqLworCUFzc2VydChuZXdiYXRjaC0+Y3VyclBhZ2UgPT0gYmxrbm8pOworCWlu ZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgbmV3YmF0Y2gpOwogCi0JcmV0dXJuIHRydWU7 CisJcmV0dXJuIG5ld2JhdGNoOwogfQogCiAvKgpAQCAtMjE3MywyNSArMjA0MywyMyBAQCBfYnRf Z2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCkK ICAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVkIHRoZSBzY2FuIGJlZm9y ZSBjYWxsaW5nIGhlcmUuCiAgKiBFeGl0IGNvbmRpdGlvbnMgYXJlIHRoZSBzYW1lIGFzIGZvciBf YnRfZmlyc3QoKS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9lbmRwb2ludChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEJhdGNoSW5kZXhTY2FuCitfYnRfZW5k cG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQmF0Y2hJbmRleFNj YW4gZmlyc3RiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwot CUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlQYWdlCQlw YWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVyIHN0YXJ0OwogCi0JQXNz ZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KCFzby0+bmVlZFBy aW1TY2FuKTsKKwlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJp bVNjYW4pOwogCiAJLyoKIAkgKiBTY2FuIGRvd24gdG8gdGhlIGxlZnRtb3N0IG9yIHJpZ2h0bW9z dCBsZWFmIHBhZ2UuICBUaGlzIGlzIGEgc2ltcGxpZmllZAogCSAqIHZlcnNpb24gb2YgX2J0X3Nl YXJjaCgpLgogCSAqLwotCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAw LCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKKwlmaXJzdGJhdGNoLT5idWYgPSBfYnRf Z2V0X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CiAKLQlp ZiAoIUJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwlpZiAoIUJ1ZmZlcklzVmFsaWQo Zmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCS8qCiAJCSAqIEVtcHR5IGluZGV4LiBMb2NrIHRoZSB3 aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5lciB0byBsb2NrCkBAIC0yMjAyLDcgKzIwNzAs NyBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikK IAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5jdXJyUG9z LmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoZmlyc3RiYXRjaC0+YnVmKTsKIAlvcGFxdWUg PSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJQXNzZXJ0KFBfSVNMRUFGKG9wYXF1ZSkpOwogCkBA IC0yMjI4LDkgKzIwOTYsNSBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFn ZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIHN0YXJ0 LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0J cmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gs IHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCmluZGV4IGE0 NTFkNDhlMS4uNWE3ODUxZWU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCkBA IC0yMSwxNSArMjEsMTIgQEAKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgogI2luY2x1 ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKLSNp bmNsdWRlICJjb21tb24vaW50LmgiCi0jaW5jbHVkZSAibGliL3F1bmlxdWUuaCIKICNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0 X2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50 CV9idF9rZWVwX25hdHRzKFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJ CSAgIEluZGV4VHVwbGUgZmlyc3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAt MTYwLDEwNCArMTU3LDY5IEBAIF9idF9mcmVlc3RhY2soQlRTdGFjayBzdGFjaykKIAl9CiB9CiAK LS8qCi0gKiBxc29ydCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlzCi0gKi8KLXN0 YXRpYyBpbnQKLV9idF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIp Ci17Ci0JaW50CQkJYSA9ICooKGNvbnN0IGludCAqKSB2YSk7Ci0JaW50CQkJYiA9ICooKGNvbnN0 IGludCAqKSB2Yik7Ci0KLQlyZXR1cm4gcGdfY21wX3MzMihhLCBiKTsKLX0KLQogLyoKICAqIF9i dF9raWxsaXRlbXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBmb3IgaXRlbXMgYW4gaW5kZXhzY2FuIGNh bGxlciBoYXMKICAqIHRvbGQgdXMgd2VyZSBraWxsZWQKICAqCi0gKiBzY2FuLT5vcGFxdWUsIHJl ZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0 aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHks IHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCisg KiBUaGUgYmF0Y2ggcGFyYW1ldGVyIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJy ZW50IHBhZ2UgYW5kIGtpbGxlZAorICogdHVwbGVzIHRoZXJlb24gKHRoaXMgc2hvdWxkIG9ubHkg YmUgY2FsbGVkIGlmIGJhdGNoLT5udW1LaWxsZWQgPiAwKS4KICAqCi0gKiBDYWxsZXIgc2hvdWxk IG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgc28tPmN1cnJQb3MgcGFnZSwgYnV0IG11c3QgaG9sZCBh Ci0gKiBidWZmZXIgcGluIHdoZW4gIXNvLT5kcm9wUGluLiAgV2hlbiB3ZSByZXR1cm4sIGl0IHN0 aWxsIHdvbid0IGJlIGxvY2tlZC4KLSAqIEl0J2xsIGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIg cGlucyB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgaGVyZS4KKyAqIENhbGxlciBzaG91bGQgbm90 IGhhdmUgYSBsb2NrIG9uIHRoZSBiYXRjaCBwb3NpdGlvbidzIHBhZ2UsIGJ1dCBtdXN0IGhvbGQg YQorICogYnVmZmVyIHBpbiB3aGVuICFkcm9wUGluLiAgV2hlbiB3ZSByZXR1cm4sIGl0IHN0aWxs IHdvbid0IGJlIGxvY2tlZC4gIEl0J2xsCisgKiBjb250aW51ZSB0byBob2xkIHdoYXRldmVyIHBp bnMgd2VyZSBoZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKgogICogV2UgbWF0Y2ggaXRlbXMg YnkgaGVhcCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvIHNl dAogICogTFBfREVBRC4gIElmIHRoZSBzY2FuIGlzIG9uZSB0aGF0IGhvbGRzIGEgYnVmZmVyIHBp biBvbiB0aGUgdGFyZ2V0IHBhZ2UKICAqIGNvbnRpbnVvdXNseSBmcm9tIGluaXRpYWxseSByZWFk aW5nIHRoZSBpdGVtcyB1bnRpbCBhcHBseWluZyB0aGlzIGZ1bmN0aW9uCi0gKiAoaWYgaXQgaXMg YSAhc28tPmRyb3BQaW4gc2NhbiksIFZBQ1VVTSBjYW5ub3QgaGF2ZSBkZWxldGVkIGFueSBpdGVt cyBvbiB0aGUKKyAqIChpZiBpdCBpcyBhICFkcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhh dmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCiAgKiBwYWdlLCBzbyB0aGUgcGFnZSdzIFRJRHMg Y2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4gIFRoZXJlJ3Mgbm8gcmlzawogICogdGhh dCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxlIHRoYXQgaGFwcGVucyB0byB1c2UgYSBy ZWN5Y2xlZCBUSUQKICAqIHdpdGggYSBub3ctcmVtb3ZlZCB0dXBsZSB3aXRoIHRoZSBzYW1lIFRJ RCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQogICogcGFnZSkuICBXZSBjYW4ndCByZWx5 IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBidWZmZXIgcGlucyBlYWdlcmx5Ci0gKiAo c28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcg TFBfREVBRCBiaXRzIG9uCisgKiAoaS5lLiBkcm9wUGluIHNjYW5zKSwgdGhvdWdoLCBzbyB3ZSBt dXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0cyBvbgogICogdGhlIHBhZ2UgTFNOIGhh dmluZyBub3QgY2hhbmdlZCBzaW5jZSBiYWNrIHdoZW4gX2J0X3JlYWRwYWdlIHNhdyB0aGUgcGFn ZS4KICAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBzZXR0aW5nIExQX0RFQUQgYml0cyB3aGVuIHRo ZSBwYWdlIExTTiBjaGFuZ2VkLgogICoKLSAqIFdlIGdpdmUgdXAgbXVjaCBsZXNzIG9mdGVuIGR1 cmluZyAhc28tPmRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBzdGlsbCBoYXBwZW5zLgorICogV2UgdGVu ZCB0byBnaXZlIHVwIGxlc3Mgb2Z0ZW4gZHVyaW5nICFkcm9wUGluIHNjYW5zLCBidXQgaXQgc3Rp bGwgaGFwcGVucy4KICAqIFdlIGNvcGUgd2l0aCBjYXNlcyB3aGVyZSBpdGVtcyBoYXZlIG1vdmVk IHJpZ2h0IGR1ZSB0byBpbnNlcnRpb25zLiAgSWYgYW4KICAqIGl0ZW0gaGFzIG1vdmVkIG9mZiB0 aGUgY3VycmVudCBwYWdlIGR1ZSB0byBhIHNwbGl0LCB3ZSdsbCBmYWlsIHRvIGZpbmQgaXQKICAq IGFuZCBqdXN0IGdpdmUgdXAgb24gaXQuCiAgKi8KIHZvaWQKLV9idF9raWxsaXRlbXMoSW5kZXhT Y2FuRGVzYyBzY2FuKQorX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5k ZXhTY2FuIGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0J QlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVBhZ2UJCXBh Z2U7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgbWlub2ZmOwogCU9mZnNl dE51bWJlciBtYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKIAlib29s CQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKIAlCdWZmZXIJCWJ1ZjsKIAotCUFzc2VydChudW1L aWxsZWQgPiAwKTsKLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCUFz c2VydChiYXRjaC0+bnVtS2lsbGVkID4gMCk7CisJQXNzZXJ0KEJsb2NrTnVtYmVySXNWYWxpZChi YXRjaC0+Y3VyclBhZ2UpKTsKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOyAv KiBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCiAKLQkvKiBBbHdheXMgaW52YWxpZGF0 ZSBzby0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3VyclBvcyAqLwotCXNvLT5u dW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBzby0+ a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAqIGxvb3AgYmVsb3cgZXhw ZWN0cyB0aGlzICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxlcywgYXQgbGVhc3QpLgot CSAqIHNvLT5raWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiBy ZXR1cm5lZCBpdGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBzY2FucyBtaWdodCBoYXZl IGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoKLQkgKiBTb3J0IGFuZCB1 bmlxdWUtaWZ5IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBhbGwgdGhpcy4KLQkgKi8K LQlpZiAobnVtS2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxsZWRJdGVtcywgbnVtS2ls bGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVtS2lsbGVkID0gcXVuaXF1 ZShzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksCi0JCQkJCQkJX2J0X2Nv bXBhcmVfaW50KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQorCWlmICghc2Nhbi0+ZHJvcFBp bikKIAl7CiAJCS8qCiAJCSAqIFdlIGhhdmUgaGVsZCB0aGUgcGluIG9uIHRoaXMgcGFnZSBzaW5j ZSB3ZSByZWFkIHRoZSBpbmRleCB0dXBsZXMsCiAJCSAqIHNvIGFsbCB3ZSBuZWVkIHRvIGRvIGlz IGxvY2sgaXQuICBUaGUgcGluIHdpbGwgaGF2ZSBwcmV2ZW50ZWQKIAkJICogY29uY3VycmVudCBW QUNVVU1zIGZyb20gcmVjeWNsaW5nIGFueSBvZiB0aGUgVElEcyBvbiB0aGUgcGFnZS4KIAkJICov Ci0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlidWYgPSBzby0+ Y3VyclBvcy5idWY7CisJCWJ1ZiA9IGJhdGNoLT5idWY7CiAJCV9idF9sb2NrYnVmKHJlbCwgYnVm LCBCVF9SRUFEKTsKIAl9CiAJZWxzZQogCXsKIAkJWExvZ1JlY1B0cglsYXRlc3Rsc247CiAKLQkJ QXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwogCQlBc3NlcnQoUmVsYXRp b25OZWVkc1dBTChyZWwpKTsKLQkJYnVmID0gX2J0X2dldGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmN1 cnJQYWdlLCBCVF9SRUFEKTsKKwkJYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJhdGNoLT5jdXJyUGFn ZSwgQlRfUkVBRCk7CiAKIAkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0J CUFzc2VydChzby0+Y3VyclBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9z LmxzbiAhPSBsYXRlc3Rsc24pCisJCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJ CWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKIAkJewogCQkJLyogTW9kaWZpZWQsIGdpdmUg dXAgb24gaGludGluZyAqLwogCQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CkBAIC0yNzIsMTcgKzIz NCwxNiBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAltaW5vZmYgPSBQX0ZJ UlNUREFUQUtFWShvcGFxdWUpOwogCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFn ZSk7CiAKLQkvKiBJdGVyYXRlIHRocm91Z2ggc28tPmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdl IG9yZGVyICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKKwkvKiBJdGVy YXRlIHRocm91Z2ggYmF0Y2gtPmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVyICovCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtS2lsbGVkOyBpKyspCiAJewotCQlpbnQJCQlp dGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0g JnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNo LT5raWxsZWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmtpdGVtID0gJmJhdGNoLT5p dGVtc1tpdGVtSW5kZXhdOwogCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4T2Zm c2V0OwogCi0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0J CQkgICBpdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCQlBc3NlcnQoaXRlbUlu ZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7 CiAJCUFzc2VydChpID09IDAgfHwKLQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tz by0+a2lsbGVkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7CisJCQkgICBvZmZudW0gPj0gYmF0 Y2gtPml0ZW1zW2JhdGNoLT5raWxsZWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKIAogCQlp ZiAob2ZmbnVtIDwgbWlub2ZmKQogCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLwpA QCAtMzAwLDcgKzI2MSw3IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJ CQkJLyoKIAkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBp biBhbG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQgaXQgKGluIHRoZSAh c28tPmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKKwkJCQkgKiBzaW5jZSB3ZSBmaXJzdCByZWFkIGl0 IChpbiB0aGUgIWRyb3BQaW4gY2FzZSksIHNvIGl0J3MKIAkJCQkgKiBwb3NzaWJsZSB0aGF0IHRo aXMgcG9zdGluZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAogCQkJCSAqIHR1cGxl IHdoZW4gd2UgZmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KIAkJCQkgKi8KQEAgLTMx Niw3ICsyNzcsNyBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCQkJICog dGhvdWdoIG9ubHkgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0CiAJCQkJ CSAqIGhhdmUgYmVlbiBjb25jdXJyZW50bHkgbW9kaWZpZWQKIAkJCQkJICovCi0JCQkJCUFzc2Vy dChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7CisJCQkJCUFz c2VydChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzY2FuLT5kcm9wUGluKTsKIAog CQkJCQkvKgogCQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgpAQCAtMzMy LDggKzI5Myw4IEBAIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkJCQkgKiBr aXRlbSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGluZGV4IHR1cGxlCiAJ CQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMga2lsbGVkKS4KIAkJ CQkJICovCi0JCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07CisJCQkJCWlmIChwaSA8IGJhdGNoLT5u dW1LaWxsZWQpCisJCQkJCQlraXRlbSA9ICZiYXRjaC0+aXRlbXNbYmF0Y2gtPmtpbGxlZEl0ZW1z W3BpKytdXTsKIAkJCQl9CiAKIAkJCQkvKgpAQCAtMzgzLDcgKzM0NCw3IEBAIF9idF9raWxsaXRl bXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlNYXJrQnVmZmVyRGlydHlIaW50KGJ1ZiwgdHJ1ZSk7 CiAJfQogCi0JaWYgKCFzby0+ZHJvcFBpbikKKwlpZiAoIXNjYW4tPmRyb3BQaW4pCiAJCV9idF91 bmxvY2tidWYocmVsLCBidWYpOwogCWVsc2UKIAkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggYTYwZWM4NWU4Li5iMGE2ZTA5NzQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTg4LDEwICs4OCwxMSBAQCBzcGdo YW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IHNwZ2Jl Z2luc2NhbjsKIAlhbXJvdXRpbmUtPmFtcmVzY2FuID0gc3BncmVzY2FuOwogCWFtcm91dGluZS0+ YW1nZXR0dXBsZSA9IHNwZ2dldHR1cGxlOworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IE5VTEw7 CisJYW1yb3V0aW5lLT5hbWZyZWViYXRjaCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJpdG1h cCA9IHNwZ2dldGJpdG1hcDsKIAlhbXJvdXRpbmUtPmFtZW5kc2NhbiA9IHNwZ2VuZHNjYW47Ci0J YW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1yZXN0cnBvcyA9IE5V TEw7CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtZXN0aW1h dGVwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFyYWxsZWxzY2FuID0g TlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhw bGFpbi5jCmluZGV4IDVhNjM5MDYzMS4uYjJhMDk1NDNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j CkBAIC0xMzUsNyArMTM1LDcgQEAgc3RhdGljIHZvaWQgc2hvd19yZWN1cnNpdmVfdW5pb25faW5m byhSZWN1cnNpdmVVbmlvblN0YXRlICpyc3RhdGUsCiBzdGF0aWMgdm9pZCBzaG93X21lbW9pemVf aW5mbyhNZW1vaXplU3RhdGUgKm1zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkJCSAgRXhw bGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAq YWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwotc3RhdGljIHZvaWQgc2hvd19pbmRleHNlYXJj aGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGlj IHZvaWQgc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0 YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X3RpZGJpdG1hcF9pbmZvKEJpdG1hcEhlYXBTY2Fu U3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9p ZCBzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudChjb25zdCBjaGFyICpxbGFiZWwsIGludCB3aGlj aCwKQEAgLTE5NzAsNyArMTk3MCw3IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1l bnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAg cGxhbnN0YXRlLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVz KTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJ Y2FzZSBUX0luZGV4T25seVNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEluZGV4T25seVNjYW4g KikgcGxhbiktPmluZGV4cXVhbCwKQEAgLTE5ODQsMTUgKzE5ODQsMTIgQEAgRXhwbGFpbk5vZGUo UGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWlmIChwbGFuLT5xdWFs KQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVy IiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJCWlmIChlcy0+YW5hbHl6ZSkK LQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiSGVhcCBGZXRjaGVzIiwgTlVMTCwKLQkJCQkJCQkJ CSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMyLCAwLCBlcyk7Ci0JCQlzaG93X2luZGV4 c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxh bnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKIAkJCXNo b3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleHF1YWxvcmlnLAog CQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOwotCQkJc2hv d19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9p bmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoK IAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSGVhcFNjYW4gKikgcGxhbiktPmJpdG1hcHF1YWxv cmlnLApAQCAtMzg1NiwxNSArMzg1MywxNiBAQCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAq YWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB9CiAKIC8qCi0gKiBTaG93IHRoZSB0b3RhbCBu dW1iZXIgb2YgaW5kZXggc2VhcmNoZXMgZm9yIGEKKyAqIFNob3cgaW5kZXggc2NhbiByZWxhdGVk IGV4ZWN1dG9yIGluc3RydW1lbnRhdGlvbiBmb3IgYQogICogSW5kZXhTY2FuL0luZGV4T25seVNj YW4vQml0bWFwSW5kZXhTY2FuIG5vZGUKICAqLwogc3RhdGljIHZvaWQKLXNob3dfaW5kZXhzZWFy Y2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQorc2hvd19p bmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykKIHsK IAlQbGFuCSAgICpwbGFuID0gcGxhbnN0YXRlLT5wbGFuOwogCVNoYXJlZEluZGV4U2Nhbkluc3Ry dW1lbnRhdGlvbiAqU2hhcmVkSW5mbyA9IE5VTEw7Ci0JdWludDY0CQluc2VhcmNoZXMgPSAwOwor CXVpbnQ2NAkJbnNlYXJjaGVzID0gMCwKKwkJCQluaGVhcGZldGNoZXMgPSAwOwogCiAJaWYgKCFl cy0+YW5hbHl6ZSkKIAkJcmV0dXJuOwpAQCAtMzg4NSw2ICszODgzLDcgQEAgc2hvd19pbmRleHNl YXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQkJ SW5kZXhPbmx5U2NhblN0YXRlICppbmRleHN0YXRlID0gKChJbmRleE9ubHlTY2FuU3RhdGUgKikg cGxhbnN0YXRlKTsKIAogCQkJCW5zZWFyY2hlcyA9IGluZGV4c3RhdGUtPmlvc3NfSW5zdHJ1bWVu dC5uc2VhcmNoZXM7CisJCQkJbmhlYXBmZXRjaGVzID0gaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVt ZW50Lm5oZWFwZmV0Y2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5kZXhzdGF0ZS0+aW9zc19TaGFy ZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzkwOCw5ICszOTA3LDEzIEBAIHNob3dfaW5k ZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQog CQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICp3aW5zdHJ1bWVudCA9ICZTaGFyZWRJbmZvLT53 aW5zdHJ1bWVudFtpXTsKIAogCQkJbnNlYXJjaGVzICs9IHdpbnN0cnVtZW50LT5uc2VhcmNoZXM7 CisJCQluaGVhcGZldGNoZXMgKz0gd2luc3RydW1lbnQtPm5oZWFwZmV0Y2hlczsKIAkJfQogCX0K IAorCWlmIChub2RlVGFnKHBsYW4pID09IFRfSW5kZXhPbmx5U2NhbikKKwkJRXhwbGFpblByb3Bl cnR5VUludGVnZXIoIkhlYXAgRmV0Y2hlcyIsIE5VTEwsIG5oZWFwZmV0Y2hlcywgZXMpOworCiAJ RXhwbGFpblByb3BlcnR5VUludGVnZXIoIkluZGV4IFNlYXJjaGVzIiwgTlVMTCwgbnNlYXJjaGVz LCBlcyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggZDljY2NiNmFjLi4zYWM5 MWYxMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC04ODAsNyArODgwLDcgQEAgRGVm aW5lSW5kZXgoT2lkIHRhYmxlSWQsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1 cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhlcyIsCiAJCQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkpOwot CWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKGV4 Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUtPmFt Z2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVz XCIgZG9lcyBub3Qgc3VwcG9ydCBleGNsdXNpb24gY29uc3RyYWludHMiLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0FtaS5jCmluZGV4IDFkMGU4YWQ1Ny4uYWMzMzdkOTAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQW1pLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5j CkBAIC00MjgsNyArNDI4LDcgQEAgRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0aG5v ZGUpCiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCiAJCQkvKgotCQkJICogTm90IGFsbCBpbmRl eCB0eXBlcyBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMg c3VwcG9ydCByZXN0b3JpbmcgYSBtYXJrCiAJCQkgKi8KIAkJCXJldHVybiBjYXN0Tm9kZShJbmRl eFBhdGgsIHBhdGhub2RlKS0+aW5kZXhpbmZvLT5hbWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggMGIzYTMxZjE3Li41ODRjZjdmZDAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04MTYsMTAgKzgxNiwxMiBAQCBjaGVja19leGNsdXNp b25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiBy ZXRyeToKIAljb25mbGljdCA9IGZhbHNlOwogCWZvdW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRleF9z Y2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgTlVMTCwg aW5kbmtleWF0dHMsIDApOworCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5k ZXgsIGZhbHNlLCAmRGlydHlTbmFwc2hvdCwgTlVMTCwKKwkJCQkJCQkJIGluZG5rZXlhdHRzLCAw KTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxM LCAwKTsKIAotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIGV4aXN0aW5nX3Nsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQlleGlzdGlu Z19zbG90KSkKIAl7CiAJCVRyYW5zYWN0aW9uSWQgeHdhaXQ7CiAJCVhMVFdfT3BlcglyZWFzb25f d2FpdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKaW5kZXggODYwZjc5Zjlj Li42MTg0MzU2NzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNh dGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0y MDQsNyArMjA0LDcgQEAgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWws IE9pZCBpZHhvaWQsCiAJc2tleV9hdHRvZmYgPSBidWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tl eSwgcmVsLCBpZHhyZWwsIHNlYXJjaHNsb3QpOwogCiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4g Ki8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCAmc25hcCwgTlVMTCwgc2tl eV9hdHRvZmYsIDApOworCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNl LCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDApOwogCiByZXRyeToKIAlmb3VuZCA9IGZhbHNl OwpAQCAtMjEyLDcgKzIxMiw3IEBAIHJldHJ5OgogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBz a2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3 aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRz bG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVh bGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFyeSBrZXkgb3IKQEAgLTY2NSwxMiArNjY1 LDEyIEBAIFJlbGF0aW9uRmluZERlbGV0ZWRUdXBsZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwg T2lkIGlkeG9pZCwKIAkgKiBub3QgeWV0IGNvbW1pdHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRl ZCBwcmlvciB0byB0aGUgc2NhbiBhcmUKIAkgKiBleGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNl bnRfZGVsZXRpb25faW5mbygpLgogCSAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBp ZHhyZWwsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4 X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgZmFsc2UsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0 dG9mZiwgMCk7CiAKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEws IDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5l eHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QpKQorCXdoaWxlICh0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5z bG90KSkKIAl7CiAJCS8qCiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0 aGUgaW5kZXggaXMgcHJpbWFyeSBrZXkgb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRt YXBJbmRleHNjYW4uYwppbmRleCBhYmJiMDMzODguLjdmZTcyOTkyZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwpAQCAtMjAyLDYgKzIwMiw3IEBAIEV4ZWNF bmRCaXRtYXBJbmRleFNjYW4oQml0bWFwSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNo IHdpbGwgaGF2ZSBhIG5ldyBCaXRtYXBJbmRleFNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgog CQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5iaXNzX0luc3RydW1lbnQu bnNlYXJjaGVzOworCQlBc3NlcnQobm9kZS0+Ymlzc19JbnN0cnVtZW50Lm5oZWFwZmV0Y2hlcyA9 PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMK aW5kZXggNmJlYTQyZjEyLi5jOTBkYzRkODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYwpAQCAtMzQsMTQgKzM0LDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNj YW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90dXBk ZXNjLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUg ImV4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUlu ZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVm bWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCkBAIC02NSw3ICs2Myw2IEBAIElu ZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCVNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CiAJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7 Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJLyoKIAkgKiBleHRyYWN0IG5lY2Vzc2FyeSBpbmZvcm1h dGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtOTAsMTggKzg3LDE0IEBAIEluZGV4T25seU5l eHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiBwYXJhbGxlbC4KIAkJICovCiAJCXNj YW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJ CQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlvc3Nf UmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJ CQkJCQkgICAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX051 bVNjYW5LZXlzLAogCQkJCQkJCQkgICBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzKTsKIAogCQlu b2RlLT5pb3NzX1NjYW5EZXNjID0gc2NhbmRlc2M7Ci0KLQotCQkvKiBTZXQgaXQgdXAgZm9yIGlu ZGV4LW9ubHkgc2NhbiAqLwotCQlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0 cnVlOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwkJQXNzZXJ0KG5v ZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkJLyoKIAkJICogSWYgbm8gcnVu LXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZApA QCAtMTE4LDc4ICsxMTEsMTAgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5v ZGUpCiAJLyoKIAkgKiBPSywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRo ZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlICgodGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2Nh bmRlc2MsIGRpcmVjdGlvbikpICE9IE5VTEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRf c2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBub2RlLT5pb3NzX1RhYmxlU2xvdCkpCiAJewotCQli b29sCQl0dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKLQogCQlDSEVDS19GT1JfSU5URVJSVVBUUygp OwogCi0JCS8qCi0JCSAqIFdlIGNhbiBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVm ZXJlbmNlcyBhIGhlYXAgcGFnZSBvbgotCQkgKiB3aGljaCBhbGwgdHVwbGVzIGFyZSBrbm93biB2 aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNlLAotCQkgKiB3ZSdsbCB1c2UgdGhlIGlu ZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0YSBzb3VyY2UuCi0JCSAqCi0J CSAqIE5vdGUgb24gTWVtb3J5IE9yZGVyaW5nIEVmZmVjdHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0 YXR1cyBkb2VzIG5vdAotCQkgKiBsb2NrIHRoZSB2aXNpYmlsaXR5IG1hcCBidWZmZXIsIGFuZCB0 aGVyZWZvcmUgdGhlIHJlc3VsdCB3ZSByZWFkCi0JCSAqIGhlcmUgY291bGQgYmUgc2xpZ2h0bHkg c3RhbGUuICBIb3dldmVyLCBpdCBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8KLQkJICogbWF0dGVy LgotCQkgKgotCQkgKiBXZSBuZWVkIHRvIGRldGVjdCBjbGVhcmluZyBhIFZNIGJpdCBkdWUgdG8g YW4gaW5zZXJ0IHJpZ2h0IGF3YXksCi0JCSAqIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQg aW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5vdCB2aXNpYmxlLiBUaGUKLQkJICogcmVhZGluZyBvZiB0 aGUgVElEIGJ5IHRoaXMgc2NhbiAodXNpbmcgYSBzaGFyZWQgbG9jayBvbiB0aGUgaW5kZXgKLQkJ ICogYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElEIGludG8g dGhlIGluZGV4Ci0JCSAqICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgaW5kZXggYnVm ZmVyKS4gQmVjYXVzZSB0aGUgVk0gYml0Ci0JCSAqIGlzIGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5n IHRoZSBpbmRleCwgYW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZQotCQkgKiBpbmRleCBwYWdl IGFjdHMgYXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3ZSBhcmUgc3VyZSB0byBzZWUgdGhlCi0J CSAqIGNsZWFyZWQgYml0IGlmIHdlIHNlZSBhIHJlY2VudGx5LWluc2VydGVkIFRJRC4KLQkJICoK LQkJICogRGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3 aWxsIGNsZWFyIG91dAotCQkgKiB0aGUgVElEKSwgc28gdGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBi aXQgYnkgYSBkZWxldGUgaXMgbm90Ci0JCSAqIHNlcmlhbGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVs b3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBpcwotCQkgKiBzaWduaWZpY2FudGx5IHN0 YWxlLiBIb3dldmVyLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBkZWxldGUgcmlnaHQKLQkJICog YXdheSwgYmVjYXVzZSB0aGUgdHVwbGUgaXMgc3RpbGwgdmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRp bmcKLQkJICogdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0 J3Mgb3VyCi0JCSAqIHRyYW5zYWN0aW9uKS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRo ZSBWTSBidWZmZXIgd2lsbCBoYXZlCi0JCSAqIGJlZW4gcmVsZWFzZWQgKGFjdGluZyBhcyBhIHdy aXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFyaW5nIHRoZSBiaXQuCi0JCSAqIEFuZCBmb3IgdXMgdG8g aGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0 aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1aXJlZAot CQkgKiBQcm9jQXJyYXlMb2NrIGFmdGVyIHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJy aWVyLgotCQkgKgotCQkgKiBJdCdzIHdvcnRoIGdvaW5nIHRocm91Z2ggdGhpcyBjb21wbGV4aXR5 IHRvIGF2b2lkIG5lZWRpbmcgdG8gbG9jawotCQkgKiB0aGUgVk0gYnVmZmVyLCB3aGljaCBjb3Vs ZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgotCQkgKi8KLQkJaWYgKCFWTV9BTExfVklT SUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKSwKLQkJCQkJCQkmbm9kZS0+aW9zc19WTUJ1ZmZlcikpCi0JCXsKLQkJCS8qCi0J CQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHku Ci0JCQkgKi8KLQkJCUluc3RyQ291bnRUdXBsZXMyKG5vZGUsIDEpOwotCQkJaWYgKCFpbmRleF9m ZXRjaF9oZWFwKHNjYW5kZXNjLCBub2RlLT5pb3NzX1RhYmxlU2xvdCkpCi0JCQkJY29udGludWU7 CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLwotCi0JCQlFeGVj Q2xlYXJUdXBsZShub2RlLT5pb3NzX1RhYmxlU2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBPbmx5IE1W Q0Mgc25hcHNob3RzIGFyZSBzdXBwb3J0ZWQgaGVyZSwgc28gdGhlcmUgc2hvdWxkIGJlIG5vCi0J CQkgKiBuZWVkIHRvIGtlZXAgZm9sbG93aW5nIHRoZSBIT1QgY2hhaW4gb25jZSBhIHZpc2libGUg ZW50cnkgaGFzCi0JCQkgKiBiZWVuIGZvdW5kLiAgSWYgd2UgZGlkIHdhbnQgdG8gYWxsb3cgdGhh dCwgd2UnZCBuZWVkIHRvIGtlZXAKLQkJCSAqIG1vcmUgc3RhdGUgdG8gcmVtZW1iZXIgbm90IHRv IGNhbGwgaW5kZXhfZ2V0bmV4dF90aWQgbmV4dCB0aW1lLgotCQkJICovCi0JCQlpZiAoc2NhbmRl c2MtPnhzX2hlYXBfY29udGludWUpCi0JCQkJZWxvZyhFUlJPUiwgIm5vbi1NVkNDIHNuYXBzaG90 cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIik7Ci0KLQkJCS8qCi0JCQkg KiBOb3RlOiBhdCB0aGlzIHBvaW50IHdlIGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFwIHBh Z2UsIGFzCi0JCQkgKiByZWNvcmRlZCBpbiBzY2FuZGVzYy0+eHNfY2J1Zi4gIFdlIGNvdWxkIHJl bGVhc2UgdGhhdCBwaW4gbm93LAotCQkJICogYnV0IGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQn cyBhIHdpbiB0byBkbyBzby4gIFRoZSBuZXh0IGluZGV4Ci0JCQkgKiBlbnRyeSBtaWdodCByZXF1 aXJlIGEgdmlzaXQgdG8gdGhlIHNhbWUgaGVhcCBwYWdlLgotCQkJICovCi0KLQkJCXR1cGxlX2Zy b21faGVhcCA9IHRydWU7Ci0JCX0KLQogCQkvKgogCQkgKiBGaWxsIHRoZSBzY2FuIHR1cGxlIHNs b3Qgd2l0aCBkYXRhIGZyb20gdGhlIGluZGV4LiAgVGhpcyBtaWdodCBiZQogCQkgKiBwcm92aWRl ZCBpbiBlaXRoZXIgSGVhcFR1cGxlIG9yIEluZGV4VHVwbGUgZm9ybWF0LiAgQ29uY2VpdmFibHkg YW4KQEAgLTIzOCwxNiArMTYzLDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUg Km5vZGUpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCiAJCQkJCSBlcnJtc2coImxvc3N5IGRpc3RhbmNlIGZ1bmN0aW9ucyBh cmUgbm90IHN1cHBvcnRlZCBpbiBpbmRleC1vbmx5IHNjYW5zIikpKTsKLQotCQkvKgotCQkgKiBJ ZiB3ZSBkaWRuJ3QgYWNjZXNzIHRoZSBoZWFwLCB0aGVuIHdlJ2xsIG5lZWQgdG8gdGFrZSBhIHBy ZWRpY2F0ZQotCQkgKiBsb2NrIGV4cGxpY2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2Ug ZG8gdGhhdCBhdCBwYWdlIGxldmVsLgotCQkgKi8KLQkJaWYgKCF0dXBsZV9mcm9tX2hlYXApCi0J CQlQcmVkaWNhdGVMb2NrUGFnZShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJCQkJCSAgSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSAgZXN0YXRlLT5lc19zbmFwc2hv dCk7Ci0KIAkJcmV0dXJuIHNsb3Q7CiAJfQogCkBAIC00MDcsMTMgKzMyMiw2IEBAIEV4ZWNFbmRJ bmRleE9ubHlTY2FuKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAlpbmRleFJlbGF0aW9uRGVz YyA9IG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjOwogCWluZGV4U2NhbkRlc2MgPSBub2RlLT5pb3Nz X1NjYW5EZXNjOwogCi0JLyogUmVsZWFzZSBWTSBidWZmZXIgcGluLCBpZiBhbnkuICovCi0JaWYg KG5vZGUtPmlvc3NfVk1CdWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQl7Ci0JCVJlbGVhc2VCdWZm ZXIobm9kZS0+aW9zc19WTUJ1ZmZlcik7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlk QnVmZmVyOwotCX0KLQogCS8qCiAJICogV2hlbiBlbmRpbmcgYSBwYXJhbGxlbCB3b3JrZXIsIGNv cHkgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyZWQgYnkgdGhlCiAJICogd29ya2VyIGJhY2sgaW50byBz aGFyZWQgbWVtb3J5IHNvIHRoYXQgaXQgY2FuIGJlIHBpY2tlZCB1cCBieSB0aGUgbWFpbgpAQCAt NDMzLDYgKzM0MSw3IEBAIEV4ZWNFbmRJbmRleE9ubHlTY2FuKEluZGV4T25seVNjYW5TdGF0ZSAq bm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQg emVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5p b3NzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzICs9 IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC5uaGVhcGZldGNoZXM7CiAJfQogCiAJLyoKQEAgLTc4NCwx MyArNjkzLDEyIEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2Fu U3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2Fu X3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlv c3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUs CiAJCQkJCQkJCSAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19O dW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJ CSBwaXNjYW4pOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0J bm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJQXNzZXJ0KG5vZGUtPmlvc3Nf U2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1lIGtleXMg dG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwpAQCAtODUw LDEyICs3NTgsMTIgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25s eVNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdp bnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9k ZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywg dHJ1ZSwKIAkJCQkJCQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5p b3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJ CQkJCQkJIHBpc2Nhbik7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1 ZTsKKwlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJ ICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdv IGFoZWFkIGFuZCBwYXNzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKaW5kZXggNzJi MTM1ZTVkLi4wODJkZWVhNDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKQEAg LTEwNyw3ICsxMDcsNyBAQCBJbmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNl cmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFy YWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19j dXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJ CQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUt PmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICAmbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJ CSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKQEAgLTEyOCw3ICsxMjgsNyBAQCBJbmRleE5leHQo SW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0 IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRu ZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKIAl7CiAJCUNIRUNLX0ZP Ul9JTlRFUlJVUFRTKCk7CiAKQEAgLTIwMyw3ICsyMDMsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRl cihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4 IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNj ID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJ ICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywgZmFsc2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAg ICZub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlz LApAQCAtMjYwLDcgKzI2MCw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRl ICpub2RlKQogCQkgKiBGZXRjaCBuZXh0IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5l eHRfaW5kZXh0dXBsZToKLQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndh cmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKIAkJewogCQkJLyoKIAkJCSAq IE5vIG1vcmUgdHVwbGVzIGZyb20gdGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJh aW4gYW55CkBAIC04MTIsNiArODEyLDcgQEAgRXhlY0VuZEluZGV4U2NhbihJbmRleFNjYW5TdGF0 ZSAqbm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBh bmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2Rl LT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5pc3NfSW5zdHJ1bWVu dC5uaGVhcGZldGNoZXMgPT0gMCk7CiAJfQogCiAJLyoKQEAgLTE3MTksNyArMTcyMCw3IEBAIEV4 ZWNJbmRleFNjYW5Jbml0aWFsaXplRFNNKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+ aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1 cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJICZub2RlLT5pc3NfSW5z dHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUt Pmlzc19OdW1PcmRlckJ5S2V5cywKQEAgLTE3ODMsNyArMTc4NCw3IEBAIEV4ZWNJbmRleFNjYW5J bml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aXNzX1NjYW5E ZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5p c3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJICZub2RlLT5pc3NfSW5zdHJ1bWVudCwK IAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1P cmRlckJ5S2V5cywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDVkNGY4 MWVlNy4uODM2ODFhNmYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9p bmR4cGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAg LTQ1LDcgKzQ1LDcgQEAKIC8qIFdoZXRoZXIgd2UgYXJlIGxvb2tpbmcgZm9yIHBsYWluIGluZGV4 c2NhbiwgYml0bWFwIHNjYW4sIG9yIGVpdGhlciAqLwogdHlwZWRlZiBlbnVtCiB7Ci0JU1RfSU5E RVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSAqLworCVNUX0lOREVYU0NBTiwJ CQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0dHVwbGUgb3IgYW1nZXRiYXRjaCAqLwogCVNUX0JJVE1B UFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldGJpdG1hcCAqLwogCVNUX0FOWVNDQU4sCQkJ CQkvKiBlaXRoZXIgaXMgb2theSAqLwogfSBTY2FuVHlwZUNvbnRyb2w7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggYmY0NWMzNTViLi4zNjRhOTliY2MgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTMxMywxMSArMzEzLDExIEBAIGdldF9yZWxhdGlv bl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhw YXJlbnQsCiAJCQkJaW5mby0+YW1zZWFyY2hhcnJheSA9IGFtcm91dGluZS0+YW1zZWFyY2hhcnJh eTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJjaG51bGxzOwog CQkJCWluZm8tPmFtY2FucGFyYWxsZWwgPSBhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWw7Ci0JCQkJ aW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisJ CQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8 fAorCQkJCQkJCQkJICAgYW1yb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOwogCQkJCWluZm8t PmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJCQkJ CXJlbGF0aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7Ci0J CQkJaW5mby0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwgJiYK LQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8tPmFt Y2FubWFya3BvcyA9IGFtcm91dGluZS0+YW1wb3NyZXNldCAhPSBOVUxMOwogCQkJCWluZm8tPmFt Y29zdGVzdGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQoaW5m by0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVsYXRpb24uYwppbmRleCAyYzg0ODViODguLjRhNzRiNjlkZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYwpAQCAtODg5LDcgKzg4OSw4IEBAIElz SW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0ck1h cCAqYXR0cm1hcCkKIAkgKiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxl bWVudCAiYW1nZXR0dXBsZSIsIHdoaWNoIHdpbGwKIAkgKiBiZSB1c2VkIGxhdGVyIHRvIGZldGNo IHRoZSB0dXBsZXMuICBTZWUgUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleCgpLgogCSAqLwot CWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNl KS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhy ZWwtPnJkX3JlbC0+cmVsYW0sIGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMICYmCisJCUdldElu ZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldGJh dGNoID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9hbXV0aWxzLmMKaW5kZXggMGFmMjZkNmFjLi45N2QyYjdmNjUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Ft dXRpbHMuYwpAQCAtMzYzLDEwICszNjMsMTEgQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNh bGxJbmZvIGZjaW5mbywKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNsdXN0ZXJhYmxl KTsKIAogCQkJY2FzZSBBTVBST1BfSU5ERVhfU0NBTjoKLQkJCQlQR19SRVRVUk5fQk9PTChyb3V0 aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0 aW5lLT5hbWdldHR1cGxlICE9IE5VTEwgfHwKKwkJCQkJCQkgICByb3V0aW5lLT5hbWdldGJhdGNo ICE9IE5VTEwpOwogCiAJCQljYXNlIEFNUFJPUF9CSVRNQVBfU0NBTjoKLQkJCQlQR19SRVRVUk5f Qk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCA/IHRydWUgOiBmYWxzZSk7CisJCQkJUEdfUkVUVVJO X0JPT0wocm91dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9QX0JB Q0tXQVJEX1NDQU46CiAJCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1jYW5iYWNrd2FyZCk7 CkBAIC0zOTIsNyArMzkzLDggQEAgaW5kZXhhbV9wcm9wZXJ0eShGdW5jdGlvbkNhbGxJbmZvIGZj aW5mbywKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FubXVsdGljb2wpOwogCiAJCWNh c2UgQU1QUk9QX0NBTl9FWENMVURFOgotCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1nZXR0 dXBsZSA/IHRydWUgOiBmYWxzZSk7CisJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1 cGxlICE9IE5VTEwgfHwKKwkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAK IAkJY2FzZSBBTVBST1BfQ0FOX0lOQ0xVREU6CiAJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5h bWNhbmluY2x1ZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCBjNzYwYjE5ZGIuLjhi YzUzMzU4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTEwMiw3ICsxMDIsNiBAQAog I2luY2x1ZGUgImFjY2Vzcy9naW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNs dWRlICJhY2Nlc3MvdGFibGVhbS5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X29wZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWMuaCIKQEAgLTcwNDMs MTMgKzcwNDIsMTAgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFw UmVsLAogCWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5v blZhY3V1bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZm ZXIgPSBJbnZhbGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFs aWRCbG9ja051bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBv aW50ZXIgdGlkOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVs bFtJTkRFWF9NQVhfS0VZU107CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCUluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50OwogCiAJLyoKIAkgKiBXZSB1c2UgdGhlIGluZGV4 LW9ubHktc2NhbiBtYWNoaW5lcnkgZm9yIHRoaXMuICBXaXRoIG1vc3RseS1zdGF0aWMKQEAgLTcw OTgsNTYgKzcwOTQsMzIgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBo ZWFwUmVsLAogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxl LAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0g aW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAotCQkJCQkJCQkgJlNuYXBzaG90Tm9u VmFjdXVtYWJsZSwgTlVMTCwKKwkvKgorCSAqIFNldCBpdCB1cCBmb3IgaW5zdHJ1bWVudGVkIGlu ZGV4LW9ubHkgc2Nhbi4gIFdlIG5lZWQgdGhlCisJICogaW5zdHJ1bWVudGF0aW9uIHRvIG1vbml0 b3IgdGhlIG51bWJlciBvZiBoZWFwIGZldGNoZXMuCisJICovCisJbWVtc2V0KCZpbnN0cnVtZW50 LCAwLCBzaXplb2YoaW5zdHJ1bWVudCkpOworCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4o aGVhcFJlbCwgaW5kZXhSZWwsIHRydWUsCisJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxl LCAmaW5zdHJ1bWVudCwKIAkJCQkJCQkJIDEsIDApOwotCS8qIFNldCBpdCB1cCBmb3IgaW5kZXgt b25seSBzY2FuICovCi0JaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlBc3NlcnQo aW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwgc2Nh bmtleXMsIDEsIE5VTEwsIDApOwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBzcGVj aWZpZWQgZGlyZWN0aW9uICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChpbmRl eF9zY2FuLCBpbmRleHNjYW5kaXIpKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRu ZXh0X3Nsb3QoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyLCB0YWJsZXNsb3QpKQogCXsKLQkJQmxv Y2tOdW1iZXIgYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisJCS8qIFdl IGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRoaW5nICovCisJCUV4 ZWNDbGVhclR1cGxlKHRhYmxlc2xvdCk7CiAKLQkJaWYgKCFWTV9BTExfVklTSUJMRShoZWFwUmVs LAotCQkJCQkJCWJsb2NrLAotCQkJCQkJCSZ2bWJ1ZmZlcikpCi0JCXsKLQkJCS8qIFJhdHMsIHdl IGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eSAqLwotCQkJaWYgKCFp bmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4sIHRhYmxlc2xvdCkpCi0JCQl7Ci0JCQkJLyoKLQkJ CQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LCBzbyB3ZSBuZWVkIHRv Ci0JCQkJICogYWR2YW5jZSB0byB0aGUgbmV4dCBlbnRyeS4gIEJlZm9yZSBkb2luZyBzbywgY291 bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2ZSB1cCBpZiB3ZSd2ZSBkb25lIHRv byBtYW55LgotCQkJCSAqCi0JCQkJICogV2UgZG9uJ3QgY2hhcmdlIGEgcGFnZSBmZXRjaCBpZiB0 aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFnZQotCQkJCSAqIGFzIHRoZSBwcmV2aW91cyB0dXBsZS4g IFRoaXMgaXMgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLAotCQkJCSAqIHNpbmNlIG90aGVyIHJl Y2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFyZSBwcm9iYWJseSBzdGlsbCBpbgotCQkJCSAqIGJ1ZmZl cnMgdG9vOyBidXQgaXQncyBnb29kIGVub3VnaCBmb3IgdGhpcyBoZXVyaXN0aWMuCi0JCQkJICov CisJCS8qCisJCSAqIE5vIHZpc2libGUgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnksIHNvIHdl IG5lZWQgdG8gYWR2YW5jZSB0byB0aGUKKwkJICogbmV4dCBlbnRyeS4gIEJlZm9yZSBkb2luZyBz bywgY291bnQgaGVhcCBwYWdlIGZldGNoZXMgYW5kIGdpdmUgdXAKKwkJICogaWYgd2UndmUgZG9u ZSB0b28gbWFueS4KKwkJICovCiAjZGVmaW5lIFZJU0lURURfUEFHRVNfTElNSVQgMTAwCiAKLQkJ CQlpZiAoYmxvY2sgIT0gbGFzdF9oZWFwX2Jsb2NrKQotCQkJCXsKLQkJCQkJbGFzdF9oZWFwX2Js b2NrID0gYmxvY2s7Ci0JCQkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzKys7Ci0JCQkJCWlmIChuX3Zp c2l0ZWRfaGVhcF9wYWdlcyA+IFZJU0lURURfUEFHRVNfTElNSVQpCi0JCQkJCQlicmVhazsKLQkJ CQl9Ci0KLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4 IGVudHJ5ICovCi0JCQl9Ci0KLQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIGhlYXAg dHVwbGUgZm9yIGFueXRoaW5nICovCi0JCQlFeGVjQ2xlYXJUdXBsZSh0YWJsZXNsb3QpOwotCi0J CQkvKgotCQkJICogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZSB2 aXNpYmxlIHR1cGxlIGluCi0JCQkgKiB0aGUgSE9UIGNoYWluOyBpZiBhbnkgYXJlIHZpc2libGUs IHRoYXQncyBnb29kIGVub3VnaC4KLQkJCSAqLwotCQl9CisJCWlmIChpbnN0cnVtZW50Lm5oZWFw ZmV0Y2hlcyA+IFZJU0lURURfUEFHRVNfTElNSVQpCisJCQlicmVhazsKIAogCQkvKgogCQkgKiBX ZSBleHBlY3QgdGhhdCB0aGUgaW5kZXggd2lsbCByZXR1cm4gZGF0YSBpbiBJbmRleFR1cGxlIG5v dApAQCAtNzE4MCw4ICs3MTUyLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxh dGlvbiBoZWFwUmVsLAogCQlicmVhazsKIAl9CiAKLQlpZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1 ZmZlcikKLQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CiAJaW5kZXhfZW5kc2NhbihpbmRleF9z Y2FuKTsKIAogCXJldHVybiBoYXZlX2RhdGE7CmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2Js dXRpbHMuYyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCmluZGV4IDdhNDY4YjRhMS4uMGMzYmE2 ODRhIDEwMDY0NAotLS0gYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Js b29tL2JsdXRpbHMuYwpAQCAtMTQ4LDggKzE0OCw3IEBAIGJsaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQogCWFtcm91dGluZS0+YW1nZXR0dXBsZSA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWdldGJp dG1hcCA9IGJsZ2V0Yml0bWFwOwogCWFtcm91dGluZS0+YW1lbmRzY2FuID0gYmxlbmRzY2FuOwot CWFtcm91dGluZS0+YW1tYXJrcG9zID0gTlVMTDsKLQlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBO VUxMOworCWFtcm91dGluZS0+YW1wb3NyZXNldCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVzdGlt YXRlcGFyYWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9 IE5VTEw7CiAJYW1yb3V0aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmlu ZGV4IDYzZDdlMzc2Zi4uY2RjOWM2NWE2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhh bS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKQEAgLTE2MSwxMCArMTYxLDEx IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5lCiAgICAgYW1iZWdpbnNjYW5fZnVuY3Rp b24gYW1iZWdpbnNjYW47CiAgICAgYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAgICAgYW1n ZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBh bWdldGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1m cmVlYmF0Y2hfZnVuY3Rpb24gYW1mcmVlYmF0Y2g7CS8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1n ZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7ICAgLyogY2FuIGJlIE5VTEwgKi8KICAgICBh bWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotICAgIGFtbWFya3Bvc19mdW5jdGlvbiBhbW1h cmtwb3M7ICAgICAgIC8qIGNhbiBiZSBOVUxMICovCi0gICAgYW1yZXN0cnBvc19mdW5jdGlvbiBh bXJlc3RycG9zOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbXBvc3Jlc2V0X2Z1bmN0aW9u IGFtcG9zcmVzZXQ7IC8qIGNhbiBiZSBOVUxMICovCiAKICAgICAvKiBpbnRlcmZhY2UgZnVuY3Rp b25zIHRvIHN1cHBvcnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KICAgICBhbWVzdGltYXRlcGFy YWxsZWxzY2FuX2Z1bmN0aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8qIGNhbiBiZSBO VUxMICovCkBAIC03NDMsNiArNzQ0LDEzNyBAQCBhbWdldHR1cGxlIChJbmRleFNjYW5EZXNjIHNj YW4sCiAgICA8c3RydWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0 cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KICAgIHN0cnVjdCBtdXN0 IGJlIHNldCB0byBOVUxMLgogICA8L3BhcmE+CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgQXMg b2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJzaW9uIDE5LCBwb3Np dGlvbiBtYXJraW5nCisgICAgYW5kIHJlc3RvcmF0aW9uIG9mIHNjYW5zIGlzIG5vIGxvbmdlciBz dXBwb3J0ZWQgZm9yIHRoZQorICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW50 ZXJmYWNlOyBvbmx5IHRoZQorICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlIHN1cHBvcnRzIHRoaXMgZmVhdHVyZSB0aHJvdWdoCisgICAgdGhlIDxmdW5jdGlvbj5h bXBvc3Jlc2V0PC9mdW5jdGlvbj4gY2FsbGJhY2suCisgICA8L3BhcmE+CisgIDwvbm90ZT4KKwor ICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK0JhdGNoSW5kZXhTY2FuCithbWdldGJhdGNoIChJ bmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNo LAorICAgICAgICAgICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworPC9wcm9ncmFtbGlzdGlu Zz4KKyAgIFJldHVybiB0aGUgbmV4dCBiYXRjaCBvZiBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVu IHNjYW4sIG1vdmluZyBpbiB0aGUKKyAgIGdpdmVuIGRpcmVjdGlvbiAoZm9yd2FyZCBvciBiYWNr d2FyZCBpbiB0aGUgaW5kZXgpLiAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZgorICAgPHR5cGU+QmF0 Y2hJbmRleFNjYW48L3R5cGU+IHdpdGggaW5kZXggdHVwbGVzIGxvYWRlZCwgb3IKKyAgIDxsaXRl cmFsPk5VTEw8L2xpdGVyYWw+IGlmIHRoZXJlIGFyZSBubyBtb3JlIGluZGV4IHR1cGxlcy4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+ IHBhcmFtZXRlciBwYXNzZXMgdGhlIGJhdGNoIHByZXZpb3VzbHkKKyAgIHJldHVybmVkIGJ5IGFu IGVhcmxpZXIgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsIChvcgorICAgPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4gb24gdGhlIGZpcnN0IGNhbGwpLiAgVGhlIGluZGV4IEFNIHVz ZXMKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGRldGVybWluZSB3aGljaCBp bmRleCBwYWdlIHRvIHJlYWQgbmV4dCwKKyAgIHR5cGljYWxseSBieSBmb2xsb3dpbmcgcGFnZSBs aW5rcyBmb3VuZCBpbiA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4KKyAgIFRoZSByZXR1 cm5lZCBiYXRjaCBjb250YWlucyBtYXRjaGluZyBpdGVtcyBpbW1lZGlhdGVseSBhZGphY2VudCB0 byB0aG9zZQorICAgZnJvbSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiBpbiB0aGUgY29t bW9uIGNhc2Ugd2hlcmUKKyAgIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IGlzIHRoZSBi YXRjaCB0aGF0IHdhcyByZXR1cm5lZCBieSB0aGUgbW9zdAorICAgcmVjZW50IGNhbGwgdG8gPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsICh0aG91Z2ggbm90IHdoZW4gdGhlCisg ICBtb3N0IHJlY2VudCBjYWxsIHVzZWQgdGhlIG9wcG9zaXRlIHNjYW4gZGlyZWN0aW9uIHRvIHRo aXMgY2FsbCwgYW5kIG5vdAorICAgd2hlbiBhIG1hcmsgaGFzIGJlZW4gcmVzdG9yZWQpLgorICA8 L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIGJhdGNoIHJldHVybmVkIGJ5IDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gaXMgZ3VhcmFudGVlZCB0byBiZQorICAgYXNzb2NpYXRlZCB3aXRo IGFuIGluZGV4IHBhZ2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgdHVwbGUuCisg ICBUaGUgaW5kZXggcGFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGJhdGNoIG1heSBiZSByZXRhaW5l ZCBpbiBhIGJ1ZmZlciB3aXRoCisgICBpdHMgcGluIGhlbGQgYXMgYW4gaW50ZXJsb2NrIGFnYWlu c3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1h bmQ+LiAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbHMKKyAg IG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBkdXJpbmcgPHF1b3RlPnBsYWluPC9xdW90ZT4gaW5k ZXggc2NhbnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IGluZGV4LW9ubHkKKyAg IHNjYW5zIHRoYXQgcmV0dXJuIGRhdGEgdmlhIHRoZSA8bGl0ZXJhbD54c19oaXR1cDwvbGl0ZXJh bD4gbWVjaGFuaXNtLgorICAgSW5kZXgtb25seSBzY2FucyBhcmUgc3VwcG9ydGVkIHRocm91Z2gg dGhlIDxsaXRlcmFsPnhzX2l0dXA8L2xpdGVyYWw+CisgICBtZWNoYW5pc20gb25seS4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g ZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1ldGhvZCBz dXBwb3J0cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4gIElmIGl0IGRvZXNuJ3Qs CisgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmaWVsZCBpbiBpdHMKKyAg IDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgbXVzdCBiZSBz ZXQgdG8gTlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSA8dHlwZT5CYXRjaEluZGV4 U2NhbjwvdHlwZT4gdGhhdCBpcyByZXR1cm5lZCBieQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpcyBubyBsb25nZXIgbWFuYWdlZCBieSB0aGUgYWNjZXNzIG1ldGhvZC4KKyAg IEl0IGlzIHVwIHRvIHRoZSB0YWJsZSBBTSBjYWxsZXIgdG8gZGVjaWRlIHdoZW4gaXQgc2hvdWxk IGJlIGZyZWVkIGJ5CisgICBwYXNzaW5nIGl0IHRvIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVu Y3Rpb24+LiAgTm90ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxkPnByaW9y YmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFRoZSBhY2Nlc3MgbWV0aG9kIG1heSBwcm92aWRlIG9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4KKyAgIGFuZCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGNhbGxiYWNrcywgbm90IGJvdGggKFhYWCB1bmNlcnRhaW4pLgorICAgV2hlbiB0aGUgYWNjZXNz IG1ldGhvZCBwcm92aWRlcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBpdCBtdXN0 CisgICBhbHNvIHByb3ZpZGUgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4uCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBzYW1lIGNhdmVhdHMgZGVzY3JpYmVkIGZvciA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFwcGx5IGhlcmUKKyAgIHRvbzogYW4gZW50cnkg aW4gdGhlIHJldHVybmVkIGJhdGNoIG1lYW5zIG9ubHkgdGhhdCB0aGUgaW5kZXggY29udGFpbnMK KyAgIGFuIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgc2NhbiBrZXlzLCBub3QgdGhhdCB0aGUgdHVw bGUgbmVjZXNzYXJpbHkgc3RpbGwKKyAgIGV4aXN0cyBpbiB0aGUgaGVhcCBvciB3aWxsIHBhc3Mg dGhlIGNhbGxlcidzIHNuYXBzaG90IHRlc3QuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKzxwcm9n cmFtbGlzdGluZz4KK3ZvaWQKK2FtZnJlZWJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAg ICAgICAgICAgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIFJl bGVhc2VzIGEgYmF0Y2ggcmV0dXJuZWQgYnkgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gY2FsbGJhY2suCisgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBleGNsdXNpdmVseSBi eSB0YWJsZSBhY2Nlc3MgbWV0aG9kcyB0byBpbmRpY2F0ZQorICAgdGhhdCBwcm9jZXNzaW5nIG9m IHRoZSBiYXRjaCBpcyBjb21wbGV0ZTsgaXQgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aXRoaW4K KyAgIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGl0c2VsZi4KKyAgPC9wYXJhPgorCisgIDxwYXJh PgorICAgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gZnJlZXMgYnVmZmVyIHBpbnMg aGVsZCBvbiB0aGUgYmF0Y2gncworICAgYXNzb2NpYXRlZCBpbmRleCBwYWdlIGFuZCByZWxlYXNl cyByZWxhdGVkIG1lbW9yeSBhbmQgcmVzb3VyY2VzLiAgVGhlc2UKKyAgIGJ1ZmZlciBwaW5zIHNl cnZlIGFzIGFuIGludGVybG9jayBhZ2FpbnN0IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieQor ICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiwgcHJvdGVjdGluZyB0aGUgdGFibGUgYWNjZXNz IG1ldGhvZCBmcm9tIGNvbmZ1c2lvbgorICAgYWJvdXQgd2hpY2ggVElEIGNvcnJlc3BvbmRzIHRv IHdoaWNoIGxvZ2ljYWwgcm93LiAgU2VlIDx4cmVmCisgICBsaW5rZW5kPSJpbmRleC1sb2NraW5n Ii8+IGZvciBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIGJ1ZmZlciBwaW4gbWFuYWdlbWVudC4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4IEFNIG1heSBjaG9vc2UgdG8gcmV0YWlu IGl0cyBvd24gYnVmZmVyIHBpbnMgYWNyb3NzIG11bHRpcGxlCisgICA8ZnVuY3Rpb24+YW1mcmVl YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscyB3aGVuIHRoaXMgc2VydmVzIGFuIGludGVybmFsIHB1cnBv c2UKKyAgIChmb3IgZXhhbXBsZSwgbWFpbnRhaW5pbmcgYSBkZXNjZW50IHN0YWNrIG9mIHBpbm5l ZCBpbmRleCBwYWdlcyBmb3IgcmV1c2UKKyAgIGFjcm9zcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGNhbGxzKS4gIEhvd2V2ZXIsIGFueSBzY2hlbWUgdGhhdAorICAgcmV0YWlucyBi dWZmZXIgcGlucyBtdXN0IGtlZXAgdGhlIG51bWJlciBvZiByZXRhaW5lZCBwaW5zIGZpeGVkIGFu ZCBzbWFsbCwKKyAgIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJhY2tlbmQncyBidWZmZXIgcGlu IGxpbWl0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgaW5kZXggQU0gaGFzIHRoZSBv cHRpb24gb2Ygc2V0dGluZyA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzIGluCisgICB0 aGUgaW5kZXggcGFnZSB0byBtYXJrIGRlYWQgdHVwbGVzIGJlZm9yZSByZWxlYXNpbmcgdGhlIGJ1 ZmZlciBwaW4uICBXaGVuCisgICA8bGl0ZXJhbD5CYXRjaFF1ZXVlLmRyb3BQaW48L2xpdGVyYWw+ IGlzIHRydWUgYW5kIHRoZSBidWZmZXIgcGluIGlzIGJlaW5nCisgICBkcm9wcGVkIGVhZ2VybHks IHRoZSBpbmRleCBBTSBtdXN0IGNoZWNrIDxsaXRlcmFsPkJhdGNoSW5kZXhTY2FuLmxzbjwvbGl0 ZXJhbD4KKyAgIHRvIHZlcmlmeSB0aGF0IHRoZSBwYWdlIExTTiBoYXMgbm90IGFkdmFuY2VkIHNp bmNlIHRoZSBiYXRjaCB3YXMgb3JpZ2luYWxseQorICAgcmVhZCBiZWZvcmUgc2V0dGluZyA8bGl0 ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzLCB0byBhdm9pZCBjb25jdXJyZW50CisgICBUSUQg cmVjeWNsaW5nIGhhemFyZHMuICBXaGVuIDxsaXRlcmFsPnNjYW4tPmJhdGNocXVldWUtPmRyb3BQ aW48L2xpdGVyYWw+CisgICBpcyBmYWxzZSAocmVxdWlyaW5nIHRoYXQgYSBidWZmZXIgcGluIGJl IGhlbGQgdGhyb3VnaG91dCBmaXJzdCByZWFkaW5nIHRoZQorICAgaW5kZXggbGVhZiBwYWdlIGFu ZCBjYWxsaW5nIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+KSwKKyAgIDxsaXRlcmFs PkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgY2FuIGFsd2F5cyBiZSBzZXQgc2FmZWx5IHdpdGhvdXQg YW4gTFNOIGNoZWNrLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFt ZnJlZWJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRo ZQorICAgYWNjZXNzIG1ldGhvZCBwcm92aWRlcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+LiBPdGhlcndpc2UgaXQgaGFzIHRvCisgICByZW1haW4gc2V0IHRvIDxsaXRlcmFsPk5VTEw8 L2xpdGVyYWw+LgorICA8L3BhcmE+CiAKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CkBAIC03 NjIsOCArODk0LDggQEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGl0c2Vs ZiwgYW5kIHRoZXJlZm9yZSBjYWxsZXJzIHJlY2hlY2sgYm90aCB0aGUgc2NhbiBjb25kaXRpb25z IGFuZCB0aGUKICAgIHBhcnRpYWwgaW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGZvciByZWNoZWNr YWJsZSB0dXBsZXMuICBUaGF0IG1pZ2h0IG5vdAogICAgYWx3YXlzIGJlIHRydWUsIGhvd2V2ZXIu Ci0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQKLSAgIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgaW5kZXggc2Nh bjsgdGhlcmUKKyAgIE9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+ LCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LAorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gaW5kZXggc2NhbjsgdGhl cmUKICAgIGFyZSBvdGhlciByZXN0cmljdGlvbnMgdG9vIHdoZW4gdXNpbmcgPGZ1bmN0aW9uPmFt Z2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFzIGV4cGxhaW5lZAogICAgaW4gPHhyZWYgbGlua2VuZD0i aW5kZXgtc2Nhbm5pbmciLz4uCiAgIDwvcGFyYT4KQEAgLTc4OSwzMiArOTIxLDI1IEBAIGFtZW5k c2NhbiAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2 b2lkCi1hbW1hcmtwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNj YW5EZXNjIHNjYW4pOwogPC9wcm9ncmFtbGlzdGluZz4KLSAgIE1hcmsgY3VycmVudCBzY2FuIHBv c2l0aW9uLiAgVGhlIGFjY2VzcyBtZXRob2QgbmVlZCBvbmx5IHN1cHBvcnQgb25lCi0gICByZW1l bWJlcmVkIHNjYW4gcG9zaXRpb24gcGVyIHNjYW4uCisgICBOb3RpZnkgaW5kZXggQU0gdGhhdCBj b3JlIGNvZGUgd2lsbCBjaGFuZ2UgdGhlIHNjYW4ncyBwb3NpdGlvbiB0byBhbiBpdGVtCisgICBy ZXR1cm5lZCBhcyBwYXJ0IG9mIGFuIGVhcmxpZXIgYmF0Y2guICBUaGUgaW5kZXggQU0gbXVzdCB0 aGVyZWZvcmUKKyAgIGludmFsaWRhdGUgYW55IHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFj a3MgdGhlIHNjYW4ncyBwcm9ncmVzcworICAgKGUuZy4sIGFycmF5IGtleXMgdXNlZCB3aXRoIGEg U2NhbGFyQXJyYXlPcEV4cHIgcXVhbCkuICBDYWxsZWQgYnkgdGhlIGNvcmUKKyAgIHN5c3RlbSB3 aGVuIGl0IGlzIGFib3V0IHRvIHJlc3RvcmUgYSBtYXJrLgogICA8L3BhcmE+CiAKICAgPHBhcmE+ Ci0gICBUaGUgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25s eSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBz Y2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bvczwvc3Ry dWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0 bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCi0gIDwvcGFyYT4KLQotICA8cGFy YT4KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQKLWFtcmVzdHJwb3MgKEluZGV4U2NhbkRlc2Mgc2Nh bik7Ci08L3Byb2dyYW1saXN0aW5nPgotICAgUmVzdG9yZSB0aGUgc2NhbiB0byB0aGUgbW9zdCBy ZWNlbnRseSBtYXJrZWQgcG9zaXRpb24uCi0gIDwvcGFyYT4KLQotICA8cGFyYT4KLSAgIFRoZSA8 ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92 aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElm IGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtcmVzdHJwb3M8L3N0cnVjdGZpZWxk PiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+Ci0g ICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAgVGhlIDxmdW5jdGlvbj5hbXBvc3Jlc2V0 PC9mdW5jdGlvbj4gZnVuY3Rpb24gY2FuIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nl c3MgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMgdGhyb3VnaCB0aGUgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgaW50ZXJmYWNlLiAgSWYgaXQgZG9lc24ndCwgdGhlIDxz dHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9zdHJ1Y3RmaWVsZD4gZmllbGQKKyAgIGluIGl0cyA8c3Ry dWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4gc3RydWN0IHNob3VsZCBiZSBzZXQg dG8KKyAgIE5VTEwuICBJbmRleCBBTXMgdGhhdCBkb24ndCBoYXZlIGFueSBwcml2YXRlIHN0YXRl IHRoYXQgbWlnaHQgbmVlZCB0byBiZQorICAgaW52YWxpZGF0ZWQgbWlnaHQgc3RpbGwgZmluZCBp dCB1c2VmdWwgdG8gcHJvdmlkZSBhbiBlbXB0eQorICAgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8 L3N0cnVjdGZpZWxkPiBmdW5jdGlvbjsgaWYgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9u PgorICAgaXMgc2V0IHRvIE5VTEwsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGFzc3VtZSB0aGF0IGl0 IGlzIHVuc2FmZSB0byByZXN0b3JlIGEKKyAgIG1hcmtlZCBwb3NpdGlvbi4KICAgPC9wYXJhPgog CiAgIDxwYXJhPgpAQCAtOTg4LDMwICsxMTEzLDQ3IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29t cGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJh PgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZnVu Y3Rpb24gaGFzIGEgPGxpdGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKKyAgIFRo ZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+CisgICBmdW5jdGlvbnMgaGF2ZSBhIDxsaXRlcmFsPmRpcmVjdGlvbjwvbGl0 ZXJhbD4gYXJndW1lbnQsCiAgICB3aGljaCBjYW4gYmUgZWl0aGVyIDxsaXRlcmFsPkZvcndhcmRT Y2FuRGlyZWN0aW9uPC9saXRlcmFsPiAodGhlIG5vcm1hbCBjYXNlKQogICAgb3IgIDxsaXRlcmFs PkJhY2t3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4uICBJZiB0aGUgZmlyc3QgY2FsbCBhZnRl cgogICAgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gc3BlY2lmaWVzIDxsaXRlcmFsPkJh Y2t3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4sIHRoZW4gdGhlCiAgICBzZXQgb2YgbWF0Y2hp bmcgaW5kZXggZW50cmllcyBpcyB0byBiZSBzY2FubmVkIGJhY2stdG8tZnJvbnQgcmF0aGVyIHRo YW4gaW4KLSAgIHRoZSBub3JtYWwgZnJvbnQtdG8tYmFjayBkaXJlY3Rpb24sIHNvIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCByZXR1cm4KLSAgIHRoZSBsYXN0IG1hdGNoaW5n IHR1cGxlIGluIHRoZSBpbmRleCwgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IG9uZSBhcyBpdAotICAg bm9ybWFsbHkgd291bGQuICAoVGhpcyB3aWxsIG9ubHkgb2NjdXIgZm9yIGFjY2VzcwotICAgbWV0 aG9kcyB0aGF0IHNldCA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRy dWUuKSAgQWZ0ZXIgdGhlCi0gICBmaXJzdCBjYWxsLCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+IG11c3QgYmUgcHJlcGFyZWQgdG8gYWR2YW5jZSB0aGUgc2NhbiBpbgorICAgdGhlIG5v cm1hbCBmcm9udC10by1iYWNrIGRpcmVjdGlvbi4gIEluIHRoaXMgY2FzZSwKKyAgIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCByZXR1cm4gdGhlIGxhc3QgbWF0Y2hpbmcgdHVw bGUgaW4gdGhlCisgICBpbmRleCwgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IG9uZSBhcyBpdCBub3Jt YWxseSB3b3VsZC4gIFNpbWlsYXJseSwKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gbXVzdCByZXR1cm4gdGhlIGxhc3QgbWF0Y2hpbmcgYmF0Y2ggb2YgaXRlbXMKKyAgIHdoZW4g ZWl0aGVyIHRoZSBmaXJzdCBjYWxsIGFmdGVyIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+ IHNwZWNpZmllcworICAgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGlyZWN0aW9uPC9saXRlcmFsPiwg b3IgYSBzdWJzZXF1ZW50IGNhbGwgaGFzCisgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBhcyBp dHMgPHN0cnVjdGZpZWxkPnByaW9yYmF0Y2g8L3N0cnVjdGZpZWxkPiBhcmd1bWVudAorICAgKGlu ZGljYXRpbmcgYSBiYWNrd2FyZCBzY2FuIHJlc3RhcnQpLiAgKFRoaXMgYmFja3dhcmQtc2NhbiBi ZWhhdmlvciB3aWxsCisgICBvbmx5IG9jY3VyIGZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IHNldCA8 c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+CisgICB0byB0cnVlLikgIEFmdGVy IHRoZSBmaXJzdCBjYWxsLCBib3RoIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYW5k CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3QgYmUgcHJlcGFyZWQgdG8g YWR2YW5jZSB0aGUgc2NhbiBpbgogICAgZWl0aGVyIGRpcmVjdGlvbiBmcm9tIHRoZSBtb3N0IHJl Y2VudGx5IHJldHVybmVkIGVudHJ5LiAgKEJ1dCBpZgogICAgPHN0cnVjdGZpZWxkPmFtY2FuYmFj a3dhcmQ8L3N0cnVjdGZpZWxkPiBpcyBmYWxzZSwgYWxsIHN1YnNlcXVlbnQKICAgIGNhbGxzIHdp bGwgaGF2ZSB0aGUgc2FtZSBkaXJlY3Rpb24gYXMgdGhlIGZpcnN0IG9uZS4pCiAgIDwvcGFyYT4K IAogICA8cGFyYT4KLSAgIEFjY2VzcyBtZXRob2RzIHRoYXQgc3VwcG9ydCBvcmRlcmVkIHNjYW5z IG11c3Qgc3VwcG9ydCA8cXVvdGU+bWFya2luZzwvcXVvdGU+IGEKLSAgIHBvc2l0aW9uIGluIGEg c2NhbiBhbmQgbGF0ZXIgcmV0dXJuaW5nIHRvIHRoZSBtYXJrZWQgcG9zaXRpb24uICBUaGUgc2Ft ZQotICAgcG9zaXRpb24gbWlnaHQgYmUgcmVzdG9yZWQgbXVsdGlwbGUgdGltZXMuICBIb3dldmVy LCBvbmx5IG9uZSBwb3NpdGlvbiBuZWVkCi0gICBiZSByZW1lbWJlcmVkIHBlciBzY2FuOyBhIG5l dyA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gY2FsbCBvdmVycmlkZXMgdGhlCi0gICBw cmV2aW91c2x5IG1hcmtlZCBwb3NpdGlvbi4gIEFuIGFjY2VzcyBtZXRob2QgdGhhdCBkb2VzIG5v dCBzdXBwb3J0IG9yZGVyZWQKLSAgIHNjYW5zIG5lZWQgbm90IHByb3ZpZGUgPGZ1bmN0aW9uPmFt bWFya3BvczwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+Ci0g ICBmdW5jdGlvbnMgaW4gPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+OyBz ZXQgdGhvc2UgcG9pbnRlcnMgdG8gTlVMTAotICAgaW5zdGVhZC4KKyAgIEFjY2VzcyBtZXRob2Rz IHVzaW5nIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBtYXkK KyAgIHN1cHBvcnQgPHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhIHBvc2l0aW9uIGluIGEgc2NhbiBh bmQgbGF0ZXIgcmV0dXJuaW5nIHRvCisgICB0aGUgbWFya2VkIHBvc2l0aW9uLCB0aG91Z2ggdGhp cyBpcyBvcHRpb25hbC4gIElmIHRoZSBzYW1lIG1hcmtlZCBwb3NpdGlvbgorICAgbWlnaHQgYmUg cmVzdG9yZWQgbXVsdGlwbGUgdGltZXMsIHRoZSBjb3JlIHN5c3RlbSBtYW5hZ2VzIG1hcmtpbmcg YW5kCisgICByZXN0b3JhdGlvbiB0aHJvdWdoIHRoZSA8ZnVuY3Rpb24+aW5kZXhfYmF0Y2hfbWFy a19wb3M8L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlvbj5pbmRleF9iYXRjaF9yZXN0b3JlX3Bv czwvZnVuY3Rpb24+IGludGVybmFsIGZ1bmN0aW9ucy4gIFdoZW4gYQorICAgbWFya2VkIHBvc2l0 aW9uIGlzIHJlc3RvcmVkLCB0aGUgaW5kZXggQU0gaXMgbm90aWZpZWQgdmlhIHRoZQorICAgPGZ1 bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBjYWxsYmFjayBzbyBpdCBjYW4gaW52YWxpZGF0 ZSBhbnkgcHJpdmF0ZQorICAgc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2Nh bidzIHByb2dyZXNzIChzdWNoIGFzIGFycmF5IGtleQorICAgc3RhdGUpLgorICA8L3BhcmE+CisK KyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlv biBpbiA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KKyAgIHNob3VsZCBi ZSBzZXQgdG8gTlVMTCBmb3IgYWNjZXNzIG1ldGhvZHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBtYXJr L3Jlc3RvcmUuCisgICBGb3IgYWNjZXNzIG1ldGhvZHMgdGhhdCBkbyBzdXBwb3J0IHRoaXMgZmVh dHVyZSwgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAgbXVzdCBiZSBwcm92aWRl ZCAodGhvdWdoIGl0IGNhbiBiZSBhIG5vLW9wIGZ1bmN0aW9uIGlmIHRoZSBBTSBoYXMgbm8gcHJp dmF0ZQorICAgc3RhdGUgdG8gaW52YWxpZGF0ZSkuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAg LTExODAsNiArMTMyMiw5NCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5 cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICByZWR1Y2UgdGhlIGZyZXF1ZW5j eSBvZiBzdWNoIHRyYW5zYWN0aW9uIGNhbmNlbGxhdGlvbnMuCiAgIDwvcGFyYT4KIAorICA8c2Vj dDIgaWQ9ImluZGV4LWxvY2tpbmctYmF0Y2hlcyI+CisgICA8dGl0bGU+QmF0Y2ggU2Nhbm5pbmcg YW5kIEJ1ZmZlciBQaW4gTWFuYWdlbWVudDwvdGl0bGU+CisKKyAgIDxwYXJhPgorICAgIEluZGV4 IGFjY2VzcyBtZXRob2RzIHRoYXQgaW1wbGVtZW50IHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+CisgICAgaW50ZXJmYWNlIG11c3QgY29vcGVyYXRlIHdpdGggdGhlIGNvcmUgc3lz dGVtIHRvIG1hbmFnZSBidWZmZXIgcGlucyBpbiBhCisgICAgd2F5IHRoYXQgcHJldmVudHMgY29u Y3VycmVudCA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IGZyb20gY3JlYXRpbmcKKyAgICBUSUQg cmVjeWNsaW5nIGhhemFyZHMuICBVbmxpa2UgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9u PiBzY2FucywKKyAgICB3aGljaCBrZWVwIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGluIGNvbnRy b2wgb2Ygc2NhbiBwcm9ncmVzc2lvbiwKKyAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IHNjYW5zIGdpdmUgY29udHJvbCB0byB0aGUgdGFibGUgYWNjZXNzCisgICAgbWV0aG9kLCB3 aGljaCBtYXkgZmV0Y2ggdGFibGUgdHVwbGVzIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhl IGluZGV4CisgICAgZW50cmllcyB3ZXJlIHJldHVybmVkLiAgVGhpcyBjcmVhdGVzIHRoZSBuZWVk IGZvciBleHBsaWNpdCBidWZmZXIgcGluCisgICAgbWFuYWdlbWVudCB0byBlbnN1cmUgdGhlIHRh YmxlIGFjY2VzcyBtZXRob2QgZG9lcyBub3QgY29uZnVzZSBhIHJlY3ljbGVkCisgICAgVElEIHdp dGggdGhlIG9yaWdpbmFsIHJvdyBpdCBtZWFudCB0byByZWZlcmVuY2UuCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIFdoZW4gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiByZXR1 cm5zIGEgYmF0Y2gsIHRoZSBiYXRjaCdzCisgICAgYXNzb2NpYXRlZCBpbmRleCBwYWdlIG1heSBi ZSByZXRhaW5lZCBpbiBhIGJ1ZmZlciB3aXRoIGEgcGluIGhlbGQgb24gaXQuCisgICAgVGhpcyBw aW4gc2VydmVzIGFzIGFuIGludGVybG9jazogPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjYW5u b3QgcmVjeWNsZQorICAgIFRJRHMgb24gYSBwaW5uZWQgcGFnZS4gIFRoZSBidWZmZXIgcGluIHBy b3RlY3RzIG9ubHkgdGhlIHRhYmxlIGFjY2VzcworICAgIG1ldGhvZCdzIGFiaWxpdHkgdG8gbWFw IFRJRHMgdG8gcm93cyBjb3JyZWN0bHk7IGl0IGRvZXMgbm90IHByb3RlY3QgdGhlCisgICAgaW5k ZXggc3RydWN0dXJlIGl0c2VsZi4gIEluZGV4IGFjY2VzcyBtZXRob2RzIG1heSB1c2UgcGlucyBm b3Igb3RoZXIKKyAgICBwdXJwb3NlcyAoZm9yIGV4YW1wbGUsIG1haW50YWluaW5nIGEgZGVzY2Vu dCBzdGFjayBvZiBwaW5uZWQgcGFnZXMpLCBidXQKKyAgICB0aG9zZSB1c2VzIGFyZSBpbnRlcm5h bCB0byB0aGUgYWNjZXNzIG1ldGhvZCBhbmQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgdGFibGUt QU0gc3luY2hyb25pemF0aW9uIGRlc2NyaWJlZCBoZXJlLgorICAgPC9wYXJhPgorCisgICA8cGFy YT4KKyAgICBXaGV0aGVyIGEgcGluIHNob3VsZCBiZSBoZWxkIHdoZW4gcmV0dXJuaW5nIGEgYmF0 Y2ggaXMgY29udHJvbGxlZCBieSB0aGUKKyAgICA8c3RydWN0ZmllbGQ+ZHJvcFBpbjwvc3RydWN0 ZmllbGQ+IGZsYWcgaW4gdGhlIDx0eXBlPkJhdGNoUXVldWU8L3R5cGU+CisgICAgc3RydWN0dXJl LiBXaGVuIDxsaXRlcmFsPmRyb3BQaW48L2xpdGVyYWw+IGlzIHRydWUsIHRoZSBpbmRleCBhY2Nl c3MgbWV0aG9kCisgICAgZHJvcHMgdGhlIHBpbiBiZWZvcmUgcmV0dXJuaW5nIHRoZSBiYXRjaCwg d2hpY2ggYXZvaWRzIGJsb2NraW5nCisgICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPi4gV2hl biA8bGl0ZXJhbD5kcm9wUGluPC9saXRlcmFsPiBpcyBmYWxzZSwgdGhlCisgICAgaW5kZXggYWNj ZXNzIG1ldGhvZCBtdXN0IGhvbGQgdGhlIHBpbiB1bnRpbCB0aGUgYmF0Y2ggaXMgZnJlZWQgdmlh CisgICAgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4uICBUaGUgY29yZSBzeXN0ZW0g c2V0cyB0aGUKKyAgICA8bGl0ZXJhbD5kcm9wUGluPC9saXRlcmFsPiBmbGFnIGJhc2VkIG9uIHNj YW4gdHlwZTogaXQgaXMgdHJ1ZSBmb3IKKyAgICBNVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMgb24g bG9nZ2VkIHJlbGF0aW9ucyAodW5sZXNzIGluZGV4LW9ubHkgc2NhbnMgYXJlCisgICAgaW4gdXNl KSwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgV2hl biA8bGl0ZXJhbD5kcm9wUGluPC9saXRlcmFsPiBpcyB0cnVlIGFuZCB0aGUgaW5kZXggYWNjZXNz IG1ldGhvZCBpcworICAgIGVhZ2VyIGFib3V0IGRyb3BwaW5nIHBpbnMsIGl0IG11c3Qgc2F2ZSB0 aGUgcGFnZSdzIExTTiBpbiB0aGUgYmF0Y2ggYmVmb3JlCisgICAgcmV0dXJuaW5nLiBMYXRlciwg d2hlbiA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgYW5kIHRoZQor ICAgIGFjY2VzcyBtZXRob2Qgd2lzaGVzIHRvIHNldCA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFs PiBiaXRzIHRvIG1hcmsgZGVhZAorICAgIHR1cGxlcywgaXQgbXVzdCB2ZXJpZnkgdGhhdCB0aGUg cGFnZSdzIExTTiBoYXMgbm90IGNoYW5nZWQgc2luY2UgdGhlIGJhdGNoCisgICAgd2FzIHJlYWQu IElmIHRoZSBMU04gaGFzIGNoYW5nZWQsIHRoZSBwYWdlIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQg YnkKKyAgICBjb25jdXJyZW50IGFjdGl2aXR5IGFuZCBpdCBpcyB1bnNhZmUgdG8gc2V0IDxsaXRl cmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMuCisgICAgVGhpcyBMU04tYmFzZWQgdmFsaWRhdGlv biBzY2hlbWUgcHJvdGVjdHMgYWdhaW5zdCBUSUQgcmVjeWNsaW5nIHJhY2VzIHdoZW4KKyAgICBw aW5zIGhhdmUgYmVlbiBkcm9wcGVkLiAgV2hlbiA8bGl0ZXJhbD5kcm9wUGluPC9saXRlcmFsPiBp cyBmYWxzZSwgdGhlIHBpbgorICAgIHByZXZlbnRzIHVuc2FmZSBjb25jdXJyZW50IHJlbW92YWwg b2YgdGFibGUgVElEIHJlZmVyZW5jZXMgYnkKKyAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+ LCBzbyBubyBMU04gY2hlY2sgaXMgbmVjZXNzYXJ5LgorICAgPC9wYXJhPgorCisgICA8cGFyYT4K KyAgICBUaGUgY29yZSBzeXN0ZW0gcHJvdmlkZXMgdGhyZWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9y IG1hbmFnaW5nIGJhdGNoCisgICAgcmVzb3VyY2VzOgorICAgIDxmdW5jdGlvbj5pbmRleGFtX3V0 aWxfYmF0Y2hfYWxsb2M8L2Z1bmN0aW9uPiBhbGxvY2F0ZXMgYSBuZXcgYmF0Y2ggb3IKKyAgICBy ZXVzZXMgYSBjYWNoZWQgb25lLAorICAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfdW5s b2NrPC9mdW5jdGlvbj4gZHJvcHMgdGhlIGxvY2sgYW5kCisgICAgY29uZGl0aW9uYWxseSBkcm9w cyB0aGUgcGluIG9uIGEgYmF0Y2gncyBpbmRleCBwYWdlIChiYXNlZCBvbiB0aGUKKyAgICA8bGl0 ZXJhbD5kcm9wUGluPC9saXRlcmFsPiBzZXR0aW5nKSwgYW5kCisgICAgPGZ1bmN0aW9uPmluZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlPC9mdW5jdGlvbj4gZnJlZXMgb3IgY2FjaGVzIGEgYmF0Y2gu CisgICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgc2hvdWxkIHVzZSB0aGVzZSB1dGlsaXRpZXMgcmF0 aGVyIHRoYW4gbWFuYWdpbmcKKyAgICBidWZmZXJzIGRpcmVjdGx5LiAgVGhlIDxmaWxlbmFtZT5z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+CisgICAgaW1wbGVtZW50YXRpb24g cHJvdmlkZXMgYSByZWZlcmVuY2UgZXhhbXBsZSBvZiBjb3JyZWN0IHVzYWdlLgorICAgPC9wYXJh PgorCisgICA8cGFyYT4KKyAgICBOb3RlIHRoYXQgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5j dGlvbj4gaXMgY2FsbGVkIG9ubHkgYnkgdGhlIGNvcmUgY29kZQorICAgIGFuZCB0YWJsZSBhY2Nl c3MgbWV0aG9kLCBuZXZlciBieSB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZCBpdHNlbGYuIFRoZQor ICAgIGluZGV4IEFNIG11c3Qgbm90IGFzc3VtZSB0aGF0IGEgY2FsbCB0byA8ZnVuY3Rpb24+YW1m cmVlYmF0Y2g8L2Z1bmN0aW9uPgorICAgIHdpbGwgdGFrZSBwbGFjZSBiZWZvcmUgYW5vdGhlciBj YWxsIHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgICAoZm9yIHRoZSBzYW1l IGluZGV4IHNjYW4pIHRha2VzIHBsYWNlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBU aGUgaW5kZXggQU0gbXVzdCBhbHNvIGF2b2lkIHJlbHlpbmcgb24gdGhlIGNvcmUgY29kZSBjYWxs aW5nCisgICAgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gd2l0aCBiYXRjaGVzIHRo YXQgYXJlIGluIGFueSBwYXJ0aWN1bGFyCisgICAgb3JkZXIuICBGb3IgZXhhbXBsZSwgaXQgaXMg bm90IG9rYXkgZm9yIGFuIGluZGV4IEFNIHRvIGFzc3VtZSB0aGF0IGNhbGxzCisgICAgdG8gPGZ1 bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gd2lsbCB0YWtlIHBsYWNlIGluIHRoZSBzYW1l IG9yZGVyIGFzCisgICAgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMg dGhhdCBpbml0aWFsbHkKKyAgICBhbGxvY2F0ZWQvcG9wdWxhdGVkL3JldHVybmVkIGVhY2ggYmF0 Y2guCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9 ImluZGV4LXVuaXF1ZS1jaGVja3MiPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVh dGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKaW5kZXgg NzdjNWE3NjNkLi41NWI3MjIyZTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRl X3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbApAQCAt MTE1MiwxMiArMTE1MiwxMyBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgICA8L3BhcmE+ CiAKICAgICAgPHBhcmE+Ci0gICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgPGxp dGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZgotICAgICAgbGlua2VuZD0iaW5k ZXhhbSIvPik7IGF0IHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+Ci0g ICAgICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0 dGxlIHBvaW50IGluIHVzaW5nCi0gICAgICBCLXRyZWUgb3IgaGFzaCBpbmRleGVzIHdpdGggYW4g ZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcwotICAgICAgZG9lcyBub3RoaW5nIHRo YXQgYW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuCi0gICAg ICBTbyBpbiBwcmFjdGljZSB0aGUgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255 bT5HaVNUPC9hY3JvbnltPiBvcgorICAgICAgVGhlIGFjY2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0 IGVpdGhlciA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPgorICAgICAgb3IgPGxpdGVyYWw+ YW1nZXRiYXRjaDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQK KyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+IGNhbm5vdCBi ZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBv aW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNoIGluZGV4ZXMKKyAgICAgIHdpdGggYW4gZXhjbHVz aW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcyBkb2VzIG5vdGhpbmcgdGhhdCBhbgorICAgICAg b3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuICBTbyBpbiBwcmFj dGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lT VDwvYWNyb255bT4gb3IKICAgICAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9ueW0+LgogICAgICA8 L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVt bXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5k ZXhfYW0uYwppbmRleCBhMzQzODJhNWYuLjU1MjY3NzFiNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv bW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzE3LDEwICszMTcsMTAg QEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9 IGRpYmVnaW5zY2FuOwogCWFtcm91dGluZS0+YW1yZXNjYW4gPSBkaXJlc2NhbjsKIAlhbXJvdXRp bmUtPmFtZ2V0dHVwbGUgPSBOVUxMOworCWFtcm91dGluZS0+YW1nZXRiYXRjaCA9IE5VTEw7CiAJ YW1yb3V0aW5lLT5hbWdldGJpdG1hcCA9IE5VTEw7CiAJYW1yb3V0aW5lLT5hbWVuZHNjYW4gPSBk aWVuZHNjYW47Ci0JYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOwotCWFtcm91dGluZS0+YW1y ZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ID0gTlVMTDsKIAlhbXJvdXRp bmUtPmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMOwogCWFtcm91dGluZS0+YW1pbml0cGFy YWxsZWxzY2FuID0gTlVMTDsKIAlhbXJvdXRpbmUtPmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMOwpk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAwNDg0NWQ1ZTYuLmM1NTk5NzNmNyAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTIyNiw4ICsyMjYsNiBAQCBCVFNjYW5JbnNlcnREYXRh CiBCVFNjYW5LZXlQcmVwcm9jCiBCVFNjYW5PcGFxdWUKIEJUU2Nhbk9wYXF1ZURhdGEKLUJUU2Nh blBvc0RhdGEKLUJUU2NhblBvc0l0ZW0KIEJUU2hhcmVkCiBCVFNvcnRBcnJheUNvbnRleHQKIEJU U3Bvb2wKQEAgLTM0NjksMTIgKzM0NjcsMTAgQEAgYW1nZXR0dXBsZV9mdW5jdGlvbgogYW1pbml0 cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlvbgogYW1pbnNlcnRjbGVhbnVw X2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9uc19mdW5jdGlvbgogYW1wYXJh bGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlvbgogYW1yZXNjYW5fZnVuY3Rp b24KLWFtcmVzdHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX2NtcHR5cGVfZnVuY3Rpb24KIGFt dHJhbnNsYXRlX3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFudXBfZnVuY3Rpb24KLS0g CjIuNTEuMAoK --0000000000007b96d706467a0698 Content-Type: application/octet-stream; name="v5-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Disposition: attachment; filename="v5-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjg0swir2 RnJvbSBmNDAyNzllZTVjMDU5MWE0ZGEzNDJiNWE3NmVhZWMwNTQ0Y2JjZGE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY1IDMv NF0gYnVmbWdyOiBhaW86IFByb3RvdHlwZSBmb3Igbm90IHdhaXRpbmcgZm9yCiBhbHJlYWR5LWlu LXByb2dyZXNzIElPCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL3psamVyZ3dlcXRpN3g2N2xnNWlqZTJyemp1c2llMzduc2xzbmtqa2tieTRsYXFx YmZ3QDNwM3p1NTIyeXlrdgpCYWNrcGF0Y2g6Ci0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAxNTAgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAxNDIg aW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA5N2Mx MTI0YzEuLjFlZjNlYmM4ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAg c3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAJaW50CQkJZmxhZ3M7CiAJaW50MTYJCW5ibG9j a3M7CiAJaW50MTYJCW5ibG9ja3NfZG9uZTsKKwlib29sCQlmb3JlaWduX2lvOwogCVBnQWlvV2Fp dFJlZiBpb193cmVmOwogCVBnQWlvUmV0dXJuIGlvX3JldHVybjsKIH07CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IGViNTUxMDJiMC4uNDhhMjM3NmRlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTYzMiw2ICsxNjMyLDQ2IEBAIFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJCXJldHVybiBTdGFydEJ1 ZmZlcklPKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSksIHRydWUsIG5vd2FpdCk7CiB9 CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgdW5kZXJnb2luZyByZWFk IEFJTy4gSWYgaXQgaXMsIGFzc2lnbiB0aGUKKyAqIElPJ3Mgd2FpdCByZWZlcmVuY2UgdG8gb3Bl cmF0aW9uLT5pb193cmVmLCB0aGVyZWJ5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8KKyAqIHdhaXQg Zm9yIHRoYXQgSU8uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorUmVhZEJ1ZmZlcnNJT0FscmVh ZHlJblByb2dyZXNzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIEJ1ZmZlciBidWZm ZXIpCit7CisJQnVmZmVyRGVzYyAqZGVzYzsKKwl1aW50MzIJCWJ1Zl9zdGF0ZTsKKwlQZ0Fpb1dh aXRSZWYgaW93OworCisJcGdhaW9fd3JlZl9jbGVhcigmaW93KTsKKworCWlmIChCdWZmZXJJc0xv Y2FsKGJ1ZmZlcikpCisJeworCQlkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZm ZXIgLSAxKTsKKwkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTMyKCZkZXNjLT5zdGF0ZSk7 CisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpICYmICEoYnVmX3N0YXRlICYg Qk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsKKwl9CisJZWxzZQorCXsKKwkJZGVz YyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoZGVzYyk7CisKKwkJaWYgKChidWZfc3RhdGUgJiBCTV9JT19JTl9QUk9HUkVTUykgJiYg IShidWZfc3RhdGUgJiBCTV9WQUxJRCkpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOworCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmlvdykpCisJewor CQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNSZWFkQnVmZmVycyB0aGF0IHRy aWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAqLwpAQCAtMTc2NCw3ICsxODA0 LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJ CQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBJTyBpcyBj b21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9f UlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVpZ25faW8gfHwgYWlvX3JldC0+ cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgogCQkJCSFwZ2Fpb193cmVmX2No ZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJCQkJaW5zdHJfdGltZQlpb19z dGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9fdGltaW5nKTsKQEAgLTE3ODMs MTEgKzE4MjMsNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193 cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBs ZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBv biBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJCVByb2Nlc3NSZWFkQnVmZmVy c1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9wZXJhdGlvbi0+Zm9yZWlnbl9p bykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRpb24tPmJ1ZmZlcnNbb3BlcmF0 aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRlc2M7CisJCQkJdWludDMyCQli dWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCQkJCXsKKwkJCQkJ ZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7CisJCQkJCWJ1Zl9z dGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwkJ CQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJVW5sb2NrQnVmSGRyKGRlc2Mp OworCQkJCX0KKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9j a3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCS8qCisJCQkJCSAqIFJlcG9y dCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4KKwkJCQkJ ICogdGhvdWdoIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4KKwkJCQkJICog UGluQnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyIGJhY2tlbmQgKG9yIG91cnNlbHZlcywKKwkJ CQkJICogYXMgcGFydCBvZiBhIHJlYWQgc3RhcnRlZCBlYXJsaWVyKSB3aWxsIHRyYWNrIHRoaXMg YXMgYQorCQkJCQkgKiAncmVhZCcuCisJCQkJCSAqLworCQkJCQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX0RPTkUob3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCSAgb3BlcmF0 aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAorCQkJCQkJCQkJCQkJCSAg b3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ CQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKKwkJCQkJCQkJCQkJCQkgIHRydWUpOworCisJCQkJCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZl cikpCisJCQkJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJCQkJCWVsc2UK KwkJCQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwkJCQkJaWYgKG9w ZXJhdGlvbi0+cmVsKQorCQkJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQob3BlcmF0aW9uLT5y ZWwpOworCisJCQkJCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElP T1BfSElULCAxLCAwKTsKKworCQkJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJCQkJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBD aGVjayB0aGUgcmVzdWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJv cnMgaWYgdGhlcmUgd2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVz dWx0KG9wZXJhdGlvbik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTg3Myw2ICsxOTY4LDQzIEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpu YmxvY2tzX3Byb2dyZXNzKQogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAK KwkvKgorCSAqIElmIEFJTyBpcyBpbiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UKKwkgKiBqdXN0IGFzc29jaWF0ZSB0aGUgd2FpdCByZWZlcmVu Y2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluCisJICogV2FpdFJlYWRCdWZmZXJzKCku IFRoaXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4KKwkgKiB0 d28gd29ya2xvYWRzOgorCSAqCisJICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFk IHRoZSBzYW1lIGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbgorCSAqIHRoZSByZWFkYWhlYWQg ZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMgb2YK KwkgKiBhbiBpbmRleCBzY2FuLgorCSAqCisJICogMikgQ29uY3VycmVudCBzY2FucyBieSBtdWx0 aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKgorCSAqIElmIHdlIHdlcmUg dG8gc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJl CisJICogYWJsZSB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorCSAqCisJICogSWYgd2Ug ZG8gZmluZCB0aGVyZSBpcyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEg MS1ibG9jaworCSAqIFJlYWRCdWZmZXJzT3BlcmF0aW9uIHRoYXQgV2FpdFJlYWRCdWZmZXJzIHRo ZW4gY2FuIHdhaXQgb24uCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNr ZW5kIHN0YXJ0cyBJTyBvbiB0aGUgYnVmZmVyIGJldHdlZW4gdGhpcworCSAqIGNoZWNrIGFuZCB0 aGUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKG5vd2FpdCA9IGZhbHNlKSBiZWxvdy4gSW4gdGhhdCBj YXNlCisJICogd2Ugd2lsbCBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBJTyBiZWxvdywgYnV0 IHRoZSB3aW5kb3cgZm9yIHRoYXQgaXMKKwkgKiBzbWFsbCBlbm91Z2ggdGhhdCBpdCB3b24ndCBo YXBwZW4gb2Z0ZW4gZW5vdWdoIHRvIGhhdmUgYSBzaWduaWZpY2FudAorCSAqIHBlcmZvcm1hbmNl IGltcGFjdC4KKwkgKi8KKwlpZiAoUmVhZEJ1ZmZlcnNJT0FscmVhZHlJblByb2dyZXNzKG9wZXJh dGlvbiwgYnVmZmVyc1tuYmxvY2tzX2RvbmVdKSkKKwl7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0g MTsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKworCQlDaGVja1JlYWRCdWZmZXJz T3BlcmF0aW9uKG9wZXJhdGlvbiwgZmFsc2UpOworCisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKIAkvKgogCSAqIElmIHplcm9fZGFtYWdl ZF9wYWdlcyBpcyBlbmFibGVkLCBhZGQgdGhlIFJFQURfQlVGRkVSU19aRVJPX09OX0VSUk9SCiAJ ICogZmxhZy4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0LCBob3BlZnVsbHksIHplcm9fZGFt YWdlZF9wYWdlcyBpc24ndApAQCAtMTkzMCw5ICsyMDYyLDkgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ LyoKIAkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQg YnVmZmVyLgogCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgaW4gYW5v dGhlciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6IGVpdGhl ciBkb25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJldHJ5Lgor CSAqIElmIGEgc3luY2hyb25vdXMgSS9PIGlzIGluIHByb2dyZXNzIGluIGFub3RoZXIgYmFja2Vu ZCAoaXQgY2FuJ3QgYmUKKwkgKiB0aGlzIGJhY2tlbmQpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRo ZSBvdXRjb21lOiBlaXRoZXIgZG9uZSwgb3IKKwkgKiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQg d2Ugd2lsbCByZXRyeS4KIAkgKi8KIAlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJz W25ibG9ja3NfZG9uZV0sIGZhbHNlKSkKIAl7Ci0tIAoyLjUxLjAKCg== --0000000000007b96d706467a0698--