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 1vpZzt-00BReO-0I for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Feb 2026 22:44:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vpZzr-00CycC-1l for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Feb 2026 22:44:47 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vpZzq-00Cyc3-0b for pgsql-hackers@lists.postgresql.org; Mon, 09 Feb 2026 22:44:46 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vpZzk-00000001LHC-47mg for pgsql-hackers@lists.postgresql.org; Mon, 09 Feb 2026 22:44:44 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-43767807cf3so1321586f8f.1 for ; Mon, 09 Feb 2026 14:44:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770677079; cv=none; d=google.com; s=arc-20240605; b=ehu+GoE0mBEgE5yatOlJf1HNHBlqasOM+OrDPih9LcZZ7OCV+aXJltkF9OEXQkBIe2 7FRWylUZTkZmwLmYIMWAH7hZKR+mxSHvVgmlACEctiga7D22jVyFfrB67TMpdsRjSbFg fEE/WpRPg1SAOTn3bzkhM9JQaW1gUYo56eyA6/LA4hxGrgnzFkXocjo5v9zkOOqrAbr+ 0A6wzfXM/wC1EVz8n26gLl2TWnN2zHHXJiLgQmGN2mzX2+y98/W9Gfu7b1V/DQ+el1Ym W7jALOnvhdtaw9QnC1pv4rxTkgKSDdAjU3S8xK0j9oY1ZrRf1sDRhr51fU143dLvCGGK AS5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=6KHycySjB7Wi5wjYxZvlVrTfPWWkG74cL3sqZwoooSA=; fh=VkRgYhhdvllNpVoETs1qCRRFH+P9ANn0cA47kavvNqw=; b=Tvx5WmmTz6YyWls0rZOdsjWjpwWhjxy0xnUGhKiOAwEPsSx83WAPMLtvq5ixPjq28B CXVFcdpLD25mT2S6bCkSxiRFstXykbsS2Bs2ayPKya/yppIUucOQEgBdnINkBbVZGbKc kJvHscEYGDbEi84noPvhsEpSOJGBb13Mp/f0rCMgk2tyr1vCVOsQrweN3NYbjuYI/1kU hzfTkYKVegxIPLf1uwxDjrGd71hCi6J99po5X1CImnNY35h37tmb5zvczHRSZejNjNZt 9nAOlcByONXVmGT8yWqnXP6Y/X1a09vhS3fIbCQLPm9pGe4ZV0U4sB3BwT+BWB/UesLq Rp7A==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1770677079; x=1771281879; 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=6KHycySjB7Wi5wjYxZvlVrTfPWWkG74cL3sqZwoooSA=; b=eSbCuQGdPL3Sz8+6K2TDamhK3H1GjLDYTghpWMS1GI+6LFJSrwEwkjBYTD1zkdOCrs nxAd2M30QNTH9OGMNhvoFBwlo5phsnaPfGiskOGrykDY6JPdPmM7t22YwUN+j0i11fhC 2Z/oPg9CXSFIsdrTPgYDtjwhFv0AkNogcaDtsVYyuW21X/d9G//OQwI4OhJ7NB64lxZb gGXw633qKHWrMcwPKqTCO9sm2cZS/uJwI1A1mFAOC6boulmS2KdwG+vnUQ3BBoTRuKEq xMGCU7nwwdaDN2QwtSceXFIlz6V5MznqBnHdfnkg6+7BOme/82aEQTi45TUKmxTCNvo2 3zuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770677079; x=1771281879; 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=6KHycySjB7Wi5wjYxZvlVrTfPWWkG74cL3sqZwoooSA=; b=YlvF6dkntVGS3ACz43bsn8h/BE3c47YUE8SoVl0lTpT9StyvQzga3SCcWYtsA0SqDl zMTKsb1gtOh0UAvOqfxrI9gqV2SFNGVudFL542vtsi13fpwI8kQ/BlCk49qOuDuRhDLG IL6DtTq1F9MuKQwxmmsUApLtSioG9c28vJFbNJmFbfRfNselBTSX8Gkg1zEQCnBVsx5p Qnxbhne6rM9/SfURF4ADrmB+3f77mZjbA2HxuLNMcLojXUJyh2LBcEHw6mxXkOXPtI4Q iaqD8GLJFT5bCOc6RUEtqyUte+1097Imn2DNb3xAnXiGxVa0YrtAkIGzp1oeyo7a9Dm0 JJbQ== X-Forwarded-Encrypted: i=1; AJvYcCVzsn52sIFao9aEI7Gf/NgZr7qLN/sfZbtQ4EI9rEFIVDsX7bJVx3+Rh/bPi+hkEalGTXbYKU0ugpVqk1wZ@lists.postgresql.org X-Gm-Message-State: AOJu0YzkJmWR7VgQszA7ZJz6qOegnxlBECJWsvi2Tvw3fXhPsY4lR/DO TYuOHk1nsxuy8gSflKRURhiCXLbOyYkwsHVS0hHL2xuPENgBsG0XE80jOj96t2/UotYZCgCD+gc 3SLl0NAtcgTY575bJUOwXKAisu+C7Up80W1RC6bt1aQ== X-Gm-Gg: AZuq6aJNfs3+uhSGoYOafNXTQhzJFALVM5yEWJTF/Ei8qF9AkmvNpdemMrirQccv1sp 2HEJR86SIKjVSy/FabXMlDTBEvIk6YWxENY3F1RVuh9f2M99T8ImOHuNkvqqsaC77edSQ/T6fF2 ed2cqsMC6BuQIp8tuvJBzRwwfbrQ5rrL/cVpWuRKNWNIyg4A5lAcMBqCxSGeATf3jGMb0Iyr8RK MYTzRQrl1+UzD8OnhqajeYKxqMg2q/6RXZqPlCdGXd6NyLgvZ337pJDJRv+BS6srSuBCr8= X-Received: by 2002:a05:6000:1ac5:b0:431:67d:53b3 with SMTP id ffacd0b85a97d-436293babaamr18912446f8f.43.1770677078946; Mon, 09 Feb 2026 14:44:38 -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: Mon, 9 Feb 2026 17:44:11 -0500 X-Gm-Features: AZwV_Qhr-sgYr2uinwt5nOQLcMQkvTTjMvzoT7TsHFMtyDmUYfT05nOexWsIavI 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="0000000000004da713064a6be2eb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004da713064a6be2eb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jan 30, 2026 at 7:18=E2=80=AFPM Peter Geoghegan wrote: > Attached is v9. Attached is v10. There are 2 major areas of improvement in this latest revi= sion: 1. We have enhanced the read stream callback (heapam_getnext_stream, which is added by v10-0005-Add-prefetching-to-index-scans-using-batch-inter.patch), making it yield at key intervals. When we yield, we temporarily suspend prefetching -- but only for long enough to give the scan the opportunity to return one more matching tuple (don't confuse yielding with pausing; we do both, but the goals are rather different in each case). Yielding like this keeps the scan responsive during prefetching: the scan should never go too long without returning at least one tuple (except when that just isn't possible at all). Testing has shown that keeping the scan responsive in this sense is particularly important during scans that appear in "ORDER BY ... LIMIT N" queries, as well as during scans that feed into certain merge joins. IOW, it is particularly important that we "keep the scan responsive" whenever it has the potential to allow the scan to shut down before it has performed work that turns out to be unnecessary (though it also seems to have some benefits even when that isn't the case). There is a complex trade-off here: we want to yield when we expect some benefit from doing so. But we don't want to yield when doing so risks compromising the read stream's ability to maintain an adequate prefetch distance. There are comments in heapam_getnext_stream that describe the theory in more detail. There are heuristics that were derived using adversarial benchmarking/stress-testing. I'm sure that they need more work, but this does seem like roughly the right idea. Note that we now test whether the scan's read stream is using its fast-path mode (read stream uses this when the scan reads heap pages that are all cached). 2. A new patch (v10-0007-Limit-get_actual_variable_range-to-scan-one-inde.p= atch) compensates for the fact that the main prefetching commit removes get_actual_variable_range's VISITED_PAGES_LIMIT mechanism. Since VISITED_PAGES_LIMIT cannot easily be ported over to the new table AM interface selfuncs.c now uses. I described the problem that we need to address when I posted v9: > selfuncs.c problem > ------------------ > > Also worth noting that we recently found a problem with selfuncs.c: > the VISITED_PAGES_LIMIT stuff in selfuncs.c is broken right now. v9 > tears that code out, pending adding back a real fix (earlier versions > of the patch had VISITED_PAGES_LIMIT, but it didn't work). > > The underlying problem is that the existing VISITED_PAGES_LIMIT design > is incompatible with our new table_index_getnext_slot interface. The > new interface doesn't stop scanning until it is able to at least > return 1 tuple. But VISITED_PAGES_LIMIT was invented precisely because > get_actual_variable_endpoint's index scans took far too long, even > though they're only ever required to locate 1 tuple. So that just > won't work. > > We'll need to invent some kind of API that directly acknowledges the > needs of the selfuncs.c caller, and others like it. Doing it in an > ad-hoc way just doesn't seem possible anymore. That will have to wait > for the next revision, though (or the one after that). The new patch deals with the problem in a completely different way, and at a completely different layer: it adds a new IndexScanDescData.xs_read_extremal_only field, set only by get_actual_variable_range. When nbtree sees that the field has been set, it gives up after scanning only one leaf page (the page that contains extremal values that are of interest to get_actual_variable_range). Note that we completely stop caring about heap page fetches with this new approach. There are good reasons to believe that the new IndexScanDescData.xs_read_extremal_only approach will solve existing problems with VISITED_PAGES_LIMIT. Recent benchmarking from Mark Callaghan [1] (which I've independently recreated with my own minimal test suite) shows that VISITED_PAGES_LIMIT becomes completely ineffective, once we reach a tipping point where many index tuples at one end of the index all have their LP_DEAD bit set. I'm going to start a new thread to discuss the issues in this area later today. I'm aiming to fix an existing, independent issue in this new patch, so it makes sense to discuss it on a completely separate thread. [1] https://smalldatum.blogspot.com/2026/01/cpu-bound-insert-benchmark-vs-p= ostgres.html -- Peter Geoghegan --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0011-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v10-0011-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdz31 RnJvbSBhNjYzNGJmOGI1MDk1MjIyMmUyOGFlNGZkNGQwNGQ2ZjU0N2I2YmIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMCAxMS8xMV0g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBp bmRleGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9m IGFsbCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2Uu ICBUaGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0 aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5z LgoKTm90ZSB0aGF0IGhhc2ggaW5kZXggc2NhbnMgd2lsbCBub3cgZHJvcCBpbmRleCBwYWdlIGJ1 ZmZlciBwaW5zIGVhZ2VybHkKKGFjdHVhbGx5LCB0aGUgdGFibGUgQU0gd2lsbCBkbyBzbyBvbiBi ZWhhbGYgb2YgdGhlIGhhc2ggaW5kZXggQU0pLgpUaGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBm b3IgYW55IGluZGV4IEFNIHRoYXQgYWRvcHRzIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2Uu ICBHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNoZXMgd29uJ3QgaG9sZCBidWZmZXIKcGlucyBv biBpbmRleCBwYWdlcyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJp bmcgaW5kZXgKcHJlZmV0Y2hpbmcsIHdoZXJlIHRoZSByZWFkIHN0cmVhbSBpcyBleHBlY3RlZCB0 byBob2xkIG1hbnkgcGlucyBvbiBoZWFwCnBhZ2VzICh0aGF0J3Mgd2h5IGFtZ2V0YmF0Y2ggbWFr ZXMgdGhpcyBhIGhhcmQgcmVxdWlyZW1lbnQpLgoKQWxzbyBhZGQgVmFsZ3JpbmQgYnVmZmVyIGxv Y2sgaW5zdHJ1bWVudGF0aW9uIHRvIGhhc2gsIGJyaW5naW5nIGl0IGluCmxpbmUgd2l0aCBuYnRy ZWUgZm9sbG93aW5nIGNvbW1pdCA0YTcwZjgyOS4gIFRoaXMgaXMgYW5vdGhlciByZXF1aXJlbWVu dAp3aGVuIHVzaW5nIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4KCkF1dGhvcjogUGV0ZXIgR2Vv Z2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25k cmEubWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xem1ZcWhhY0JIMTYx cGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2hhc2guaCAgICAgICAgICAgIHwgIDczICstLS0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvUkVBRE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jICAgICAgIHwgMTE2ICsrKystLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2hfeGxvZy5jICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBh Z2UuYyAgIHwgIDI2ICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIHwg MzMyICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaHV0aWwuYyAgIHwgIDg1ICsrKy0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICB8ICAgMiAtCiA4IGZpbGVzIGNoYW5nZWQsIDI0OCBpbnNlcnRpb25zKCspLCA0MTkg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li5mYzY2NDY1YTIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2hhc2guaApAQCAtMTAwLDU4ICsxMDAsNiBAQCB0eXBlZGVmIEhhc2hQYWdlT3BhcXVlRGF0YSAq SGFzaFBhZ2VPcGFxdWU7CiAgKi8KICNkZWZpbmUgSEFTSE9fUEFHRV9JRAkJMHhGRjgwCiAKLXR5 cGVkZWYgc3RydWN0IEhhc2hTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVh Y2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVy ZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBp dGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLX0gSGFzaFNjYW5Qb3NJdGVtOwotCi10eXBl ZGVmIHN0cnVjdCBIYXNoU2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBpZiB2YWxp ZCwgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGN1 cnJlbnQgaGFzaCBpbmRleCBwYWdlICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBuZXh0 IG92ZXJmbG93IHBhZ2UgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIHByZXYgb3ZlcmZs b3cgb3IgYnVja2V0IHBhZ2UgKi8KLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5 cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0 KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUK LQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFu ZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1l bnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEg Y3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgot CSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10g Ki8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwot CWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JSGFz aFNjYW5Qb3NJdGVtIGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIE1VU1QgQkUgTEFT VCAqLwotfSBIYXNoU2NhblBvc0RhdGE7Ci0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1Bpbm5lZChz Y2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3Mp LmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0J QnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJ c1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgo c2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVm KSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0KLSNk ZWZpbmUgSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5w b3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52YWxp ZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJl cjsgXAotCQkoc2NhbnBvcykucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNj YW5wb3MpLmZpcnN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLmxhc3RJdGVtID0gMDsgXAotCQko c2NhbnBvcykuaXRlbUluZGV4ID0gMDsgXAotCX0gd2hpbGUgKDApCi0KIC8qCiAgKglIYXNoU2Nh bk9wYXF1ZURhdGEgaXMgcHJpdmF0ZSBzdGF0ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCiAgKi8K QEAgLTE3OCwxNSArMTI2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRhCiAJ ICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJICov CiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVtcyBp ZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAgICpr aWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLwot CWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICov Ci0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdlIGFu ZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBvc0Rh dGEgY3VyclBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3BhcXVl RGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpAQCAt MzY4LDExICszMDcsMTQgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWwsIERh dHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBjaGVj a1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0IElu ZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBoYXNo Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBw cmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQg aGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVy biBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRlcmJ5 cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNoZnJlZWJhdGNoKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4o SW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hi dWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0Rl bGV0ZVJlc3VsdCAqc3RhdHMsCkBAIC00NDUsOCArMzg3LDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hf ZmluaXNoX3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAog CQkJCQkJCSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4g Ym9vbCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwot ZXh0ZXJuIGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRj aCk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0 IEhTcG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2 LDcgKzQxOSw3IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9u ZXdidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIg X2hhc2hfZ2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9s ZF9idWNrZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVj a2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMy IGxvd21hc2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVt cyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIAogLyogaGFzaC5jICovCiBl eHRlcm4gdm9pZCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJfYnVj a2V0LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FCmluZGV4IGZjOTAzMTExNy4uOTcyYmI2NjZiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvUkVBRE1FCkBAIC0yNTUsMjggKzI1NSwyOSBAQCBUaGUgcmVhZGVyIGFsZ29y aXRobSBpczoKIAkJcmV0YWtlIHRoZSBidWZmZXIgY29udGVudCBsb2NrIG9uIG5ldyBidWNrZXQK IAkJYXJyYW5nZSB0byBzY2FuIHRoZSBvbGQgYnVja2V0IG5vcm1hbGx5IGFuZCB0aGUgbmV3IGJ1 Y2tldCBmb3IKICAgICAgICAgIHR1cGxlcyB3aGljaCBhcmUgbm90IG1vdmVkLWJ5LXNwbGl0Ci0t LSB0aGVuLCBwZXIgcmVhZCByZXF1ZXN0OgorLS0gdGhlbiwgcGVyIGJhdGNoIChwYWdlKSByZXF1 ZXN0OgogCXJlYWNxdWlyZSBjb250ZW50IGxvY2sgb24gY3VycmVudCBwYWdlCiAJc3RlcCB0byBu ZXh0IHBhZ2UgaWYgbmVjZXNzYXJ5IChubyBjaGFpbmluZyBvZiBjb250ZW50IGxvY2tzLCBidXQg a2VlcAogCXRoZSBwaW4gb24gdGhlIHByaW1hcnkgYnVja2V0IHRocm91Z2hvdXQgdGhlIHNjYW4p Ci0Jc2F2ZSBhbGwgdGhlIG1hdGNoaW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBp bnRvIGFuIGl0ZW1zIGFycmF5Ci0JcmVsZWFzZSBwaW4gYW5kIGNvbnRlbnQgbG9jayAoYnV0IGlm IGl0IGlzIHByaW1hcnkgYnVja2V0IHBhZ2UgcmV0YWluCi0JaXRzIHBpbiB0aWxsIHRoZSBlbmQg b2YgdGhlIHNjYW4pCi0JZ2V0IHR1cGxlIGZyb20gYW4gaXRlbSBhcnJheQorCXNhdmUgYWxsIHRo ZSBtYXRjaGluZyB0dXBsZXMgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBhIGJhdGNoCisJ cmVsZWFzZSBjb250ZW50IGxvY2sgb24gY3VycmVudCBwYWdlIHJldHVybiBiYXRjaCB0byB0YWJs ZSBBTSAodGFibGUgQU0KKwl3aWxsIGRyb3AgYmF0Y2gncyBidWZmZXIgcGluLCB0aG91Z2ggcHJp bWFyeSBidWNrZXQgcGFnZSBwaW4gaXMga2VwdAorCXVudGlsIHRoZSBlbmQgb2YgdGhlIHNjYW4p CiAtLSBhdCBzY2FuIHNodXRkb3duOgotCXJlbGVhc2UgYWxsIHBpbnMgc3RpbGwgaGVsZAorCXJl bGVhc2Ugc2Nhbi1vd25lZCBwaW5zIChlLmcuLCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbikgYXMg bmVlZGVkCiAKIEhvbGRpbmcgdGhlIGJ1ZmZlciBwaW4gb24gdGhlIHByaW1hcnkgYnVja2V0IHBh Z2UgZm9yIHRoZSB3aG9sZSBzY2FuIHByZXZlbnRzCi10aGUgcmVhZGVyJ3MgY3VycmVudC10dXBs ZSBwb2ludGVyIGZyb20gYmVpbmcgaW52YWxpZGF0ZWQgYnkgc3BsaXRzIG9yCi1jb21wYWN0aW9u cy4gIChPZiBjb3Vyc2UsIG90aGVyIGJ1Y2tldHMgY2FuIHN0aWxsIGJlIHNwbGl0IG9yIGNvbXBh Y3RlZC4pCit0aGUgYnVja2V0IGZyb20gYmVpbmcgcmVvcmdhbml6ZWQgYnkgc3BsaXRzIG9yIGNv bXBhY3Rpb25zIHdoaWxlIHRoZSBzY2FuIGlzCitpbiBwcm9ncmVzcy4gIChPZiBjb3Vyc2UsIG90 aGVyIGJ1Y2tldHMgY2FuIHN0aWxsIGJlIHNwbGl0IG9yIGNvbXBhY3RlZC4pCiAKLVRvIG1pbmlt aXplIGxvY2svdW5sb2NrIHRyYWZmaWMsIGhhc2ggaW5kZXggc2NhbiBhbHdheXMgc2VhcmNoZXMg dGhlIGVudGlyZQotaGFzaCBwYWdlIHRvIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMg YXQgb25jZSwgY29weWluZyB0aGVpciBoZWFwIHR1cGxlCi1JRHMgaW50byBiYWNrZW5kLWxvY2Fs IHN0b3JhZ2UuIFRoZSBoZWFwIHR1cGxlIElEcyBhcmUgdGhlbiBwcm9jZXNzZWQgd2hpbGUgbm90 Ci1ob2xkaW5nIGFueSBwYWdlIGxvY2sgd2l0aGluIHRoZSBpbmRleCB0aGVyZWJ5LCBhbGxvd2lu ZyBjb25jdXJyZW50IGluc2VydGlvbgotdG8gaGFwcGVuIG9uIHRoZSBzYW1lIGluZGV4IHBhZ2Ug d2l0aG91dCBhbnkgcmVxdWlyZW1lbnQgb2YgcmUtZmluZGluZyB0aGUKLWN1cnJlbnQgc2NhbiBw b3NpdGlvbiBmb3IgdGhlIHJlYWRlci4gV2UgZG8gY29udGludWUgdG8gaG9sZCBhIHBpbiBvbiB0 aGUKLWJ1Y2tldCBwYWdlLCB0byBwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBkZWxldGlvbnMg YW5kIGJ1Y2tldCBzcGxpdC4KK1RvIG1pbmltaXplIGxvY2svdW5sb2NrIHRyYWZmaWMsIGhhc2gg aW5kZXggc2NhbnMgYWx3YXlzIHNlYXJjaCB0aGUgZW50aXJlCitoYXNoIHBhZ2UgdG8gaWRlbnRp ZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNlLCByZXR1cm5pbmcgdGhlbSBpbgorYmF0 Y2hlcyB0byB0aGUgdGFibGUgQU0uICBUaGUgdGFibGUgQU0gcHJvY2Vzc2VzIGJhdGNoZXMgd2hp bGUgbm8gcGFnZSBsb2NrCitpcyBoZWxkIHdpdGhpbiB0aGUgaW5kZXgsIGFsbG93aW5nIGNvbmN1 cnJlbnQgaW5zZXJ0aW9uIHRvIGhhcHBlbiBvbiB0aGUKK3NhbWUgaW5kZXggcGFnZSB3aXRob3V0 IGFueSByZXF1aXJlbWVudCBvZiByZS1maW5kaW5nIHRoZSBjdXJyZW50IHNjYW4KK3Bvc2l0aW9u IGZvciB0aGUgcmVhZGVyLiAgVGhlIHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gYmF0Y2ggYnVmZmVy IHBpbnMgYXJlCitkcm9wcGVkLiAgV2UgZG8gY29udGludWUgdG8gaG9sZCBhIHBpbiBvbiB0aGUg cHJpbWFyeSBidWNrZXQgcGFnZSwgdG8KK3Byb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGJ1Y2tl dCBzcGxpdHMuCiAKIFRvIGFsbG93IGZvciBzY2FucyBkdXJpbmcgYSBidWNrZXQgc3BsaXQsIGlm IGF0IHRoZSBzdGFydCBvZiB0aGUgc2NhbiwgdGhlCiBidWNrZXQgaXMgbWFya2VkIGFzIGJ1Y2tl dC1iZWluZy1wb3B1bGF0ZWQsIGl0IHNjYW4gYWxsIHRoZSB0dXBsZXMgaW4gdGhhdApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jCmluZGV4IGQ3NDJkYWJjZC4uZjQwZTQzOTgzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaC5jCkBAIC0xMDEsOSArMTAxLDkgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykK IAkJLmFtYWRqdXN0bWVtYmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4g PSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNocmVzY2FuLAotCQkuYW1nZXR0dXBs ZSA9IGhhc2hnZXR0dXBsZSwKLQkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAotCQkuYW1mcmVlYmF0Y2gg PSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gaGFzaGdldGJh dGNoLAorCQkuYW1mcmVlYmF0Y2ggPSBoYXNoZnJlZWJhdGNoLAogCQkuYW1nZXRiaXRtYXAgPSBo YXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4sCiAJCS5hbXBvc3Jlc2V0 ID0gTlVMTCwKQEAgLTI4Niw1MyArMjg2LDI4IEBAIGhhc2hpbnNlcnQoUmVsYXRpb24gcmVsLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAKIAogLyoKLSAqCWhhc2hnZXR0dXBsZSgpIC0t IEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWhhc2hnZXRiYXRjaCgpIC0tIEdl dCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNjYW4KICAqLwotYm9v bAotaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJ bmRleFNjYW5CYXRjaAoraGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJSGFzaFNjYW5PcGFxdWUg c28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7CiAKIAkvKiBI YXNoIGluZGV4ZXMgYXJlIGFsd2F5cyBsb3NzeSBzaW5jZSB3ZSBzdG9yZSBvbmx5IHRoZSBoYXNo IGNvZGUgKi8KIAlzY2FuLT54c19yZWNoZWNrID0gdHJ1ZTsKIAotCS8qCi0JICogSWYgd2UndmUg YWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFkdmFuY2UgaXQgaW4g dGhlCi0JICogYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHll dCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8KLQkgKiBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNj YW4uCi0JICovCi0JaWYgKCFIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlyZXMg PSBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwotCWVsc2UKKwlpZiAocHJpb3JiYXRjaCA9PSBOVUxM KQogCXsKLQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2 aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCSAqLwotCQlpZiAoc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSkKLQkJewotCQkJLyoKLQkJCSAqIFllcywgc28gcmVtZW1iZXIgaXQgZm9yIGxhdGVyLiAoV2Un bGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1cGxlcwotCQkJICogYXQgb25jZSByaWdodCBhZnRlciBs ZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9yIGF0IGVuZCBvZiBzY2FuLikKLQkJCSAqIEluIGNhc2Ug aWYgY2FsbGVyIHJldmVyc2VzIHRoZSBpbmRleHNjYW4gZGlyZWN0aW9uIGl0IGlzIHF1aXRlCi0J CQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBzYW1lIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlw bGUgdGltZXMuCi0JCQkgKiBCdXQsIHdlIGRvbid0IGRldGVjdCB0aGF0OyBpbnN0ZWFkLCB3ZSBq dXN0IGZvcmdldCBhbnkgZXhjZXNzCi0JCQkgKiBlbnRyaWVzLgotCQkJICovCi0JCQlpZiAoc28t PmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJc28tPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5 KGludCwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsKKwkJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5k ZXhSZWxhdGlvbjsKIAotCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhJbmRleFR1cGxlc1BlclBh Z2UpCi0JCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5p dGVtSW5kZXg7Ci0JCX0KKwkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQkJLyoKLQkJ ICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkgKi8KLQkJcmVzID0gX2hhc2hfbmV4dChzY2Fu LCBkaXIpOworCQkvKiBJbml0aWFsaXplIHRoZSBzY2FuLCBhbmQgcmV0dXJuIGZpcnN0IGJhdGNo IG9mIG1hdGNoaW5nIGl0ZW1zICovCisJCXJldHVybiBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwog CX0KIAotCXJldHVybiByZXM7CisJLyogUmV0dXJuIGJhdGNoIHBvc2l0aW9uZWQgYWZ0ZXIgY2Fs bGVyJ3MgYmF0Y2ggKGluIGRpcmVjdGlvbiAnZGlyJykgKi8KKwlyZXR1cm4gX2hhc2hfbmV4dChz Y2FuLCBkaXIsIHByaW9yYmF0Y2gpOwogfQogCiAKQEAgLTM0MiwyNiArMzE3LDIyIEBAIGhhc2hn ZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogaW50NjQKIGhh c2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIHsKLQlIYXNo U2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJl czsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwotCUhhc2hTY2Fu UG9zSXRlbSAqY3Vyckl0ZW07CiAKLQlyZXMgPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbik7CisJYmF0Y2ggPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVj dGlvbik7CiAKLQl3aGlsZSAocmVzKQorCXdoaWxlIChiYXRjaCAhPSBOVUxMKQogCXsKLQkJY3Vy ckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKKwkJZm9y IChpbnQgaXRlbUluZGV4ID0gYmF0Y2gtPmZpcnN0SXRlbTsKKwkJCSBpdGVtSW5kZXggPD0gYmF0 Y2gtPmxhc3RJdGVtOworCQkJIGl0ZW1JbmRleCsrKQorCQl7CisJCQl0Ym1fYWRkX3R1cGxlcyh0 Ym0sICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5oZWFwVGlkLCAxLCB0cnVlKTsKKwkJCW50aWRz Kys7CisJCX0KIAotCQkvKgotCQkgKiBfaGFzaF9maXJzdCBhbmQgX2hhc2hfbmV4dCBoYW5kbGUg ZWxpbWluYXRlIGRlYWQgaW5kZXggZW50cmllcwotCQkgKiB3aGVuZXZlciBzY2FuLT5pZ25vcmVf a2lsbGVkX3R1cGxlcyBpcyB0cnVlLiAgVGhlcmVmb3JlLCB0aGVyZSdzCi0JCSAqIG5vdGhpbmcg dG8gZG8gaGVyZSBleGNlcHQgYWRkIHRoZSByZXN1bHRzIHRvIHRoZSBUSURCaXRtYXAuCi0JCSAq LwotCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sICYoY3Vyckl0ZW0tPmhlYXBUaWQpLCAxLCB0cnVlKTsK LQkJbnRpZHMrKzsKLQotCQlyZXMgPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0 aW9uKTsKKwkJYmF0Y2ggPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBi YXRjaCk7CiAJfQogCiAJcmV0dXJuIG50aWRzOwpAQCAtMzgzLDE3ICszNTQsMTQgQEAgaGFzaGJl Z2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuID0g UmVsYXRpb25HZXRJbmRleFNjYW4ocmVsLCBua2V5cywgbm9yZGVyYnlzKTsKIAogCXNvID0gKEhh c2hTY2FuT3BhcXVlKSBwYWxsb2Nfb2JqZWN0KEhhc2hTY2FuT3BhcXVlRGF0YSk7Ci0JSGFzaFNj YW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJ bnZhbGlkQnVmZmVyOwogCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZm ZXI7CiAKIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFzaHNvX2J1 Y19zcGxpdCA9IGZhbHNlOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsKLQlzby0+bnVtS2ls bGVkID0gMDsKLQogCXNjYW4tPm9wYXF1ZSA9IHNvOworCXNjYW4tPm1heGl0ZW1zYmF0Y2ggPSBN YXhJbmRleFR1cGxlc1BlclBhZ2U7CiAKIAlyZXR1cm4gc2NhbjsKIH0KQEAgLTQwOCwxOCArMzc2 LDggQEAgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50 IG5zY2Fua2V5cywKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFz aFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1 cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1L aWxsZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9w c2NhbmJ1ZihyZWwsIHNvKTsKIAotCS8qIHNldCBwb3NpdGlvbiBpbnZhbGlkICh0aGlzIHdpbGwg Y2F1c2UgX2hhc2hfZmlyc3QgY2FsbCkgKi8KLQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1 cnJQb3MpOwotCiAJLyogVXBkYXRlIHNjYW4ga2V5LCBpZiBhIG5ldyBvbmUgaXMgZ2l2ZW4gKi8K IAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQltZW1jcHkoc2Nhbi0+ a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRh KSk7CkBAIC00MjgsNiArMzg2LDIxIEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBm YWxzZTsKIH0KIAorLyoKKyAqCWhhc2hmcmVlYmF0Y2goKSAtLSBGcmVlIGJhdGNoIHJlc291cmNl cworICovCit2b2lkCitoYXNoZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpCit7CisJLyogVGFibGUgQU0gc2hvdWxkIGhhdmUgYWxyZWFkeSByZWxlYXNl ZCBiYXRjaCBwYWdlJ3MgcGluIGJ5IG5vdyAqLworCUFzc2VydCghQnVmZmVySXNWYWxpZChiYXRj aC0+YnVmKSk7CisKKwlpZiAoYmF0Y2gtPm51bUtpbGxlZCA+IDApCisJCV9oYXNoX2tpbGxfaXRl bXMoc2NhbiwgYmF0Y2gpOworCisJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0 Y2gpOworfQorCiAvKgogICoJaGFzaGVuZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2NhbgogICov CkBAIC00MzcsMTcgKzQxMCw4IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlI YXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVJlbGF0 aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNjYW5Qb3NJc1ZhbGlk KHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVh bCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJ X2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNv KTsKIAotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUoc28tPmtpbGxlZEl0 ZW1zKTsKIAlwZnJlZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaF94bG9nLmMKaW5kZXggMjA2MDYyMGM3Li4wMTU3ZWU0NTEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hfeGxvZy5jCkBAIC0xMTQxLDcgKzExNDEsNyBAQCBoYXNoX21hc2soY2hh ciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1Y2tl dCBhbmQgb3ZlcmZsb3cgcGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJICog TFBfRkxBR1Mgd2l0aG91dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhl IGxpbmUKLQkJICogcG9pbnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9raWxs X2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBfaGFzaF9raWxs X2l0ZW1zKCkgZm9yIGRldGFpbHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBhZ2UpOwogCX0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDI2M2JjNzNmMS4uMmJjOGJlYTIyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl ICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNp bmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2lu Y2x1ZGUgInV0aWxzL3JlbC5oIgogCiBzdGF0aWMgYm9vbCBfaGFzaF9hbGxvY19idWNrZXRzKFJl bGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZmlyc3RibG9jaywKQEAgLTc5LDYgKzgwLDkgQEAgX2hh c2hfZ2V0YnVmKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgYmxrbm8sIGludCBhY2Nlc3MsIGlu dCBmbGFncykKIAlpZiAoYWNjZXNzICE9IEhBU0hfTk9MT0NLKQogCQlMb2NrQnVmZmVyKGJ1Ziwg YWNjZXNzKTsKIAorCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCisJCVZBTEdS SU5EX01BS0VfTUVNX0RFRklORUQoQnVmZmVyR2V0UGFnZShidWYpLCBCTENLU1opOworCiAJLyog cmVmIGNvdW50IGFuZCBsb2NrIHR5cGUgYXJlIGNvcnJlY3QgKi8KIAogCV9oYXNoX2NoZWNrcGFn ZShyZWwsIGJ1ZiwgZmxhZ3MpOwpAQCAtMTA4LDYgKzExMiw5IEBAIF9oYXNoX2dldGJ1Zl93aXRo X2NvbmRsb2NrX2NsZWFudXAoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBibGtubywgaW50IGZs YWdzKQogCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAl9CiAKKwlpZiAoIVJlbGF0aW9uVXNlc0xv Y2FsQnVmZmVycyhyZWwpKQorCQlWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKEJ1ZmZlckdldFBh Z2UoYnVmKSwgQkxDS1NaKTsKKwogCS8qIHJlZiBjb3VudCBhbmQgbG9jayB0eXBlIGFyZSBjb3Jy ZWN0ICovCiAKIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBidWYsIGZsYWdzKTsKQEAgLTI4MCwzMSAr Mjg3LDI0IEBAIF9oYXNoX2Ryb3BidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogfQogCiAv KgotICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgdXNlZCBpbiBzY2Fu LgorICoJX2hhc2hfZHJvcHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgb3duZWQgYnkgc2Nh bi4KICAqCi0gKiBUaGlzIHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIHVzZWQgZHVyaW5nIHNj YW4gb24gd2hpY2ggd2UKLSAqIGhvbGQgbm8gbG9jay4KKyAqIFRoaXMgcm91dGluZSB1bnBpbnMg dGhlIGJ1ZmZlcnMgZm9yIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBmb3IgdGhlCisgKiBi dWNrZXQgcGFnZSBvZiBhIGJ1Y2tldCBiZWluZyBzcGxpdCBhcyBuZWVkZWQuCiAgKi8KIHZvaWQK IF9oYXNoX2Ryb3BzY2FuYnVmKFJlbGF0aW9uIHJlbCwgSGFzaFNjYW5PcGFxdWUgc28pCiB7CiAJ LyogcmVsZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICovCi0JaWYgKEJ1 ZmZlcklzVmFsaWQoc28tPmhhc2hzb19idWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX2J1Y2tl dF9idWYgIT0gc28tPmN1cnJQb3MuYnVmKQorCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29f YnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX2J1Y2tldF9idWYp OwogCXNvLT5oYXNoc29fYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNl IHBpbiB3ZSBob2xkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgIG9mIGJ1Y2tldCBiZWluZyBzcGxp dCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikgJiYK LQkJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiBy ZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2Ugb2YgYnVja2V0IGJlaW5nIHNw bGl0ICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKSkK IAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1Zik7CiAJc28t Pmhhc2hzb19zcGxpdF9idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2Ug YW55IHBpbiB3ZSBzdGlsbCBob2xkICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3Mu YnVmKSkKLQkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQ b3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQogCS8qIHJlc2V0IHNwbGl0IHNjYW4gKi8KIAlzby0+ aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZh bHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCmluZGV4IDg5ZDFjNWJjNi4uYTQ1 Y2UzMDZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCkBAIC0yMiwxMDUgKzIy LDgzIEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9y ZWwuaCIKIAotc3RhdGljIGJvb2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBC dWZmZXIgKmJ1ZlAsCi0JCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgYm9vbCBf aGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogc3RhdGljIGludAlfaGFz aF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJ CQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRp YyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1J bmRleCwKKwkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGly LAorCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworc3RhdGljIGlubGluZSB2b2lk IF9oYXNoX3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJ CQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCk7CiBzdGF0aWMgdm9p ZCBfaGFzaF9yZWFkbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmcCwKIAkJCQkJ CSAgIFBhZ2UgKnBhZ2VwLCBIYXNoUGFnZU9wYXF1ZSAqb3BhcXVlcCk7CiAKIC8qCi0gKglfaGFz aF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2hhc2hfbmV4dCgp IC0tIEdldCB0aGUgbmV4dCBiYXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVu dHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5Ci0g KgkJYmUgcGlubmVkIGJ1dCBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlk ZW50aWZpZXMKLSAqCQl3aGljaCBpdGVtIHdhcyBwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9u IGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgY3VycmVudCBwYWdlIGJhdGNoIHdpdGgg aXRlbXMKKyAqCQlhbHJlYWR5IHJldHVybmVkLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQs IHNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBUSUQgb2YgdGhlIG5leHQKLSAqCQloZWFw IHR1cGxlLiAgc28tPmN1cnJQb3MgaXMgdXBkYXRlZCBhcyBuZWVkZWQuCisgKgkJT24gc3VjY2Vz c2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcyBmcm9t CisgKgkJbmV4dCBwYWdlLiAgT3RoZXJ3aXNlIHJldHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0 IHRoZXJlIGFyZSBubworICoJCWZ1cnRoZXIgbWF0Y2hlcy4gIE5vIGxvY2tzIGFyZSBldmVyIGhl bGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBs ZXMpLCB3ZSByZXR1cm4gZmFsc2Ugd2l0aCBwaW4KLSAqCQloZWxkIG9uIGJ1Y2tldCBwYWdlIGJ1 dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQgb24gb3ZlcmZsb3cKLSAqCQlwYWdlLgorICoJCVJldGFp bnMgcGlucyBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgYXMgX2hhc2hfZmlyc3QuCiAgKi8K LWJvb2wKLV9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikK K0luZGV4U2NhbkJhdGNoCitfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIsIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CiAJQmxvY2tOdW1i ZXIgYmxrbm87CiAJQnVmZmVyCQlidWY7Ci0JYm9vbAkJZW5kX29mX3NjYW4gPSBmYWxzZTsKKwlJ bmRleFNjYW5CYXRjaCBiYXRjaDsKIAogCS8qCi0JICogQWR2YW5jZSB0byB0aGUgbmV4dCB0dXBs ZSBvbiB0aGUgY3VycmVudCBwYWdlOyBvciBpZiBkb25lLCB0cnkgdG8gcmVhZAotCSAqIGRhdGEg ZnJvbSB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIGJhc2VkIG9uIHRoZSBzY2FuIGRpcmVjdGlv bi4gQmVmb3JlCi0JICogbW92aW5nIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UgbWFrZSBz dXJlIHRoYXQgd2UgZGVhbCB3aXRoIGFsbCB0aGUKLQkgKiBraWxsZWQgaXRlbXMuCisJICogRGV0 ZXJtaW5lIHdoaWNoIHBhZ2UgdG8gcmVhZCBuZXh0IGJhc2VkIG9uIHNjYW4gZGlyZWN0aW9uIGFu ZCBkZXRhaWxzCisJICogdGFrZW4gZnJvbSB0aGUgcHJpb3IgYmF0Y2gKIAkgKi8KIAlpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUlu ZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0JCXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4g MCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlibGtubyA9IHNvLT5jdXJyUG9z Lm5leHRQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJ YnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFH RSk7Ci0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQkJCQllbmRf b2Zfc2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4gPSB0cnVlOwot CQl9CisJCWJsa25vID0gcHJpb3JiYXRjaC0+bmV4dFBhZ2U7CisJCWlmICghQmxvY2tOdW1iZXJJ c1ZhbGlkKGJsa25vKSB8fCAhcHJpb3JiYXRjaC0+bW9yZVJpZ2h0KQorCQkJcmV0dXJuIE5VTEw7 CiAJfQogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJy UG9zLmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNo X2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0J CQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9n ZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8 IExIX09WRVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBhbHdheXMgbWFpbnRhaW4g dGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJCSAqIG9wZXJhdGlvbiwg c28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkCi0JCQkJICog aGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAot CQkJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCQlfaGFzaF9kcm9w YnVmKHJlbCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1ZiwgZGly KSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVuZF9vZl9z Y2FuID0gdHJ1ZTsKLQkJfQorCQlibGtubyA9IHByaW9yYmF0Y2gtPnByZXZQYWdlOworCQlpZiAo IUJsb2NrTnVtYmVySXNWYWxpZChibGtubykgfHwgIXByaW9yYmF0Y2gtPm1vcmVMZWZ0KQorCQkJ cmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKGVuZF9vZl9zY2FuKQorCS8qIEFsbG9jYXRlIHNwYWNl IGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nh bik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBmb3IgbmV4dCBiYXRjaCAqLworCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBI QVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOworCWVsc2UKIAl7Ci0JCV9oYXNoX2Ryb3BzY2Fu YnVmKHJlbCwgc28pOwotCQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQly ZXR1cm4gZmFsc2U7CisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQs CisJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOworCisJCS8qCisJ CSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9uIGJ1Y2tldCBwYWdlIGZvciB3aG9sZSBz Y2FuIG9wZXJhdGlvbiwKKwkJICogc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBo YXZlIGFjcXVpcmVkIGhlcmUuCisJCSAqLworCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0 X2J1ZiB8fAorCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKKwkJCV9oYXNo X2Ryb3BidWYocmVsLCBidWYpOwogCX0KIAotCS8qIE9LLCBpdGVtSW5kZXggc2F5cyB3aGF0IHRv IHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0 ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOworCS8qIFJl YWQgdGhlIG5leHQgcGFnZSBhbmQgbG9hZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBiYXRjaCAqLwor CWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBkaXIsIGJhdGNoKSkKKwl7CisJCWluZGV4 YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQog Ci0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNoZWQg aXRlbXMgZnJvbSBuZXh0IHBhZ2UgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC0yNzAs MjIgKzI0OCwyMCBAQCBfaGFzaF9yZWFkcHJldihJbmRleFNjYW5EZXNjIHNjYW4sCiB9CiAKIC8q Ci0gKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gYSBzY2FuLgorICoJ X2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4u CiAgKgotICoJCVdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0 aGUgbGFzdCBpdGVtKSBpbiB0aGUKLSAqCQlpbmRleCB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlm aWNhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHNjYW4KLSAqCQlkZXNjcmlwdG9yLgorICoJCVdl IGZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhl IGxhc3QKKyAqCQliYXRjaCkgaW4gdGhlIGluZGV4IHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZp Y2F0aW9uIGFzc29jaWF0ZWQgd2l0aAorICoJCXRoZSBzY2FuIGRlc2NyaXB0b3IuCiAgKgotICoJ CU9uIHN1Y2Nlc3NmdWwgZXhpdCwgaWYgdGhlIHBhZ2UgY29udGFpbmluZyBjdXJyZW50IGluZGV4 IHR1cGxlIGlzIGFuCi0gKgkJb3ZlcmZsb3cgcGFnZSwgYm90aCBwaW4gYW5kIGxvY2sgYXJlIHJl bGVhc2VkIHdoZXJlYXMgaWYgaXQgaXMgYSBidWNrZXQKLSAqCQlwYWdlIHRoZW4gaXQgaXMgcGlu bmVkIGJ1dCBub3QgbG9ja2VkIGFuZCBkYXRhIGFib3V0IHRoZSBtYXRjaGluZwotICoJCXR1cGxl KHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9zLAotICoJCXNj YW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBoZWFwIFRJRCBvZiB0aGUgY3VycmVudCB0dXBs ZS4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJldHVybnMgYSBiYXRjaCBjb250YWluaW5nIG1h dGNoaW5nIGl0ZW1zLgorICoJCU90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhh dCB0aGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzLgorICoJCU5vIGxvY2tzIGFyZSBldmVyIGhl bGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBs ZXMpLCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggcGluIGhlbGQgb24KLSAqCQlidWNrZXQgcGFnZSBi dXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93IHBhZ2UuCisgKgkJV2UgYWx3YXlz IHJldGFpbiBvdXIgb3duIHBpbiBvbiB0aGUgYnVja2V0IHBhZ2UuICBXaGVuIHdlIHJldHVybiBh CisgKgkJYmF0Y2ggd2l0aCBhIGJ1Y2tldCBwYWdlLCBpdCB3aWxsIHJldGFpbiBpdHMgb3duIHJl ZmVyZW5jZSBwaW4uCiAgKi8KLWJvb2wKK0luZGV4U2NhbkJhdGNoCiBfaGFzaF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247CkBAIC0yOTYsNyArMjcyLDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlCdWZmZXIJCWJ1ZjsKIAlQYWdlCQlw YWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVt OworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJcGdzdGF0X2NvdW50X2luZGV4X3NjYW4ocmVs KTsKIAlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKQEAgLTMyNiw3ICszMDIsNyBAQCBfaGFzaF9maXJz dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGl0ZW1zIGluIHRo ZSBpbmRleC4KIAkgKi8KIAlpZiAoY3VyLT5za19mbGFncyAmIFNLX0lTTlVMTCkKLQkJcmV0dXJu IGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogT2theSB0byBjb21wdXRlIHRoZSBo YXNoIGtleS4gIFdlIHdhbnQgdG8gZG8gdGhpcyBiZWZvcmUgYWNxdWlyaW5nIGFueQpAQCAtNDE5 LDE5MSArMzk1LDE2MCBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCQkJX2hhc2hfcmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUp OwogCX0KIAotCS8qIHJlbWVtYmVyIHdoaWNoIGJ1ZmZlciB3ZSBoYXZlIHBpbm5lZCwgaWYgYW55 ICovCi0JQXNzZXJ0KEJ1ZmZlcklzSW52YWxpZChzby0+Y3VyclBvcy5idWYpKTsKLQlzby0+Y3Vy clBvcy5idWYgPSBidWY7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJhdGNoICovCisJ YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CiAKLQkvKiBOb3cgZmluZCBh bGwgdGhlIHR1cGxlcyBzYXRpc2Z5aW5nIHRoZSBxdWFsaWZpY2F0aW9uIGZyb20gYSBwYWdlICov Ci0JaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7 CisJLyogUmVhZCB0aGUgZmlyc3QgcGFnZSBhbmQgbG9hZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBi YXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBkaXIsIGJhdGNoKSkKKwl7 CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5V TEw7CisJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJuICovCi0JY3Vy ckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQlzY2Fu LT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQkvKiBpZiB3ZSdyZSBoZXJlLCBf aGFzaF9yZWFkcGFnZSBmb3VuZCBhIHZhbGlkIHR1cGxlcyAqLwotCXJldHVybiB0cnVlOworCS8q IFJldHVybiB0aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zICovCisJcmV0dXJuIGJh dGNoOwogfQogCiAvKgotICoJX2hhc2hfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJy ZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2hhc2hfcmVhZHBhZ2UoKSAtLSBM b2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBiYXRjaAogICoKICAqCVdlIHNj YW4gYWxsIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBpbmRleCBwYWdlIGFuZCBzYXZlIHRoZW0g aW50bwotICoJc28tPmN1cnJQb3MgaWYgaXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uLiBJ ZiBubyBtYXRjaGluZyBpdGVtcworICoJdGhlIGJhdGNoIGlmIHRoZXkgc2F0aXNmeSB0aGUgcXVh bGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hpbmcgaXRlbXMKICAqCWFyZSBmb3VuZCBpbiB0aGUgY3Vy cmVudCBwYWdlLCB3ZSBtb3ZlIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UKICAqCWluIGEg YnVja2V0IGNoYWluIGFzIGluZGljYXRlZCBieSB0aGUgZGlyZWN0aW9uLgogICoKICAqCVJldHVy biB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBhcmUgZm91bmQgZWxzZSByZXR1cm4gZmFsc2Uu CiAgKi8KIHN0YXRpYyBib29sCi1faGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1 ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCitfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJICAgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlI YXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUJ1ZmZl cgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51 bWJlciBvZmZudW07CiAJdWludDE2CQlpdGVtSW5kZXg7CiAKLQlidWYgPSAqYnVmUDsKIAlBc3Nl cnQoQnVmZmVySXNWYWxpZChidWYpKTsKIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBidWYsIExIX0JV Q0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVm KTsKIAlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKIAotCXNvLT5jdXJyUG9zLmJ1 ZiA9IGJ1ZjsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1 Zik7CisJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwliYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9j a051bWJlcihidWYpOworCWJhdGNoLT5kaXIgPSBkaXI7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpKQogCXsKLQkJQmxvY2tOdW1iZXIgcHJldl9ibGtubyA9IEludmFsaWRCbG9j a051bWJlcjsKLQogCQlmb3IgKDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0 aW5nIHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNl YXJjaChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9s b2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5k ZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwK KwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSAwKQogCQkJCWJy ZWFrOwogCiAJCQkvKgotCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBp biB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUgbmV4dCBwYWdlLiBCZWZvcmUg bGVhdmluZyB0aGUgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55Ci0JCQkgKiBraWxsZWQgaXRl bXMuCisJCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJy ZW50IHBhZ2UsIHRyeSB0bworCQkJICogbW92ZSB0byB0aGUgbmV4dCBwYWdlCiAJCQkgKi8KLQkJ CWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0J CQkvKgotCQkJICogSWYgdGhpcyBpcyBhIHByaW1hcnkgYnVja2V0IHBhZ2UsIGhhc2hvX3ByZXZi bGtubyBpcyBub3QgYSByZWFsCi0JCQkgKiBibG9jayBudW1iZXIuCi0JCQkgKi8KLQkJCWlmIChz by0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQ b3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQlwcmV2X2Jsa25vID0g SW52YWxpZEJsb2NrTnVtYmVyOwotCQkJZWxzZQotCQkJCXByZXZfYmxrbm8gPSBvcGFxdWUtPmhh c2hvX3ByZXZibGtubzsKLQogCQkJX2hhc2hfcmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZv cGFxdWUpOwotCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmKSkKKwkJCWlmICghQnVmZmVySXNWYWxp ZChidWYpKQogCQkJewotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBv cy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQllbHNlCi0J CQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2aW91cyBibG9jayBudW1i ZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93IHRoZSBzdGFydCBwb3Np dGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUgbWF0 Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9uJ3QgcmVzZXQgY3VyclBh Z2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNoX2tpbGxfaXRlbXMgdG8g YmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0aW9uIHJl dHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBwcmV2X2Jsa25vOwot CQkJCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5j dXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCQliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAkJCQly ZXR1cm4gZmFsc2U7CiAJCQl9CisKKwkJCWJhdGNoLT5idWYgPSBidWY7CisJCQliYXRjaC0+Y3Vy clBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9CiAKLQkJc28tPmN1cnJQb3Mu Zmlyc3RJdGVtID0gMDsKLQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwot CQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSAwOworCQliYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJ YmF0Y2gtPmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsKLQkJQmxvY2tO dW1iZXIgbmV4dF9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3IgKDs7KQogCQl7 CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFy Y2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaF9sYXN0KHBhZ2UsIHNvLT5oYXNoc29f c2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNj YW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlm aWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJICAgYmF0Y2gp OwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKIAkJCQlicmVh azsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4g dGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIHByZXZpb3VzIHBhZ2UuIEJlZm9y ZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aAotCQkJICogYW55IGtpbGxlZCBp dGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1 cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBwcmV2aW91cyBwYWdlCiAJCQkg Ki8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4p OwotCi0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAot CQkJCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJ bmV4dF9ibGtubyA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCiAJCQlfaGFzaF9yZWFkcHJl dihzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNWYWxpZChidWYp KQorCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVm ID0gYnVmOwotCQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQg YW5kIHByZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3Jz IHRvIGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRp Y2F0aW5nIHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJ CQkgKiBkb24ndCByZXNldCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJ ICogX2hhc2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0 aGlzCi0JCQkJICogZnVuY3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5w cmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9 IG5leHRfYmxrbm87Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJCWJhdGNoLT5idWYg PSBJbnZhbGlkQnVmZmVyOwogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KKworCQkJYmF0Y2gtPmJ1 ZiA9IGJ1ZjsKKwkJCWJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7 CiAJCX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJy UG9zLmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKLQkJc28tPmN1cnJQb3Mu aXRlbUluZGV4ID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKKwkJYmF0Y2gtPmZpcnN0SXRl bSA9IGl0ZW1JbmRleDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdl IC0gMTsKIAl9CiAKLQlpZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1 ZiB8fAotCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQor CS8qCisJICogU2F2ZWQgYXQgbGVhc3Qgb25lIG1hdGNoIGluIGJhdGNoLml0ZW1zW10uICBQcmVw YXJlIGZvciBoYXNoZ2V0YmF0Y2ggdG8KKwkgKiByZXR1cm4gaXQgYnkgaW5pdGlhbGl6aW5nIHJl bWFpbmluZyB1bmluaXRpYWxpemVkIGZpZWxkcy4KKwkgKi8KKwlpZiAoYmF0Y2gtPmJ1ZiA9PSBz by0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0 X2J1Y2tldF9idWYpCiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051 bWJlcjsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsK LQkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJCS8q CisJCSAqIEJhdGNoJ3MgYnVmZmVyIGlzIGVpdGhlciB0aGUgcHJpbWFyeSBidWNrZXQsIG9yIGEg YnVja2V0IGJlaW5nCisJCSAqIHBvcHVsYXRlZCBkdWUgdG8gYSBzcGxpdC4KKwkJICoKKwkJICog SW5jcmVtZW50IGxvY2FsIHJlZmVyZW5jZSBjb3VudCBzbyB0aGF0IGJhdGNoIGdldHMgYW4gaW5k ZXBlbmRlbnQKKwkJICogYnVmZmVyIHJlZmVyZW5jZSB0aGF0IGNhbiBiZSByZWxlYXNlZCAoYnkg dGhlIGNvcmUgY29kZS90YWJsZSBBTSkKKwkJICogYmVmb3JlIHRoZSBoYXNoc29fYnVja2V0X2J1 Zi9oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiByZWZlcmVuY2VzIGFyZQorCQkgKiByZWxlYXNlZC4K KwkJICovCisJCUluY3JCdWZmZXJSZWZDb3VudChiYXRjaC0+YnVmKTsKKworCQkvKiBDYW4gb25s eSB1c2Ugb3BhcXVlLT5oYXNob19uZXh0Ymxrbm8gKi8KKwkJYmF0Y2gtPnByZXZQYWdlID0gSW52 YWxpZEJsb2NrTnVtYmVyOworCQliYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRi bGtubzsKIAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmhh c2hvX3ByZXZibGtubzsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25l eHRibGtubzsKLQkJX2hhc2hfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJc28tPmN1 cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJLyogQ2FuIHVzZSBvcGFxdWUtPmhhc2hvX3By ZXZibGtubyBhbmQgb3BhcXVlLT5oYXNob19uZXh0Ymxrbm8gKi8KKwkJYmF0Y2gtPnByZXZQYWdl ID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87CisJCWJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+ aGFzaG9fbmV4dGJsa25vOwogCX0KIAotCUFzc2VydChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0g c28tPmN1cnJQb3MubGFzdEl0ZW0pOworCWJhdGNoLT5tb3JlTGVmdCA9IEJsb2NrTnVtYmVySXNW YWxpZChiYXRjaC0+cHJldlBhZ2UpOworCWJhdGNoLT5tb3JlUmlnaHQgPSBCbG9ja051bWJlcklz VmFsaWQoYmF0Y2gtPm5leHRQYWdlKTsKKworCS8qIFVubG9jayAoYW5kIGxpa2VseSB1bnBpbikg YnVmZmVyLCBwZXIgYW1nZXRiYXRjaCBjb250cmFjdCAqLworCWluZGV4YW1fdXRpbF9iYXRjaF91 bmxvY2soc2NhbiwgYmF0Y2gpOworCisJQXNzZXJ0KGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gt Pmxhc3RJdGVtKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKICAqIExvYWQgYWxsIHRoZSBxdWFs aWZpZWQgaXRlbXMgZnJvbSBhIGN1cnJlbnQgaW5kZXggcGFnZQotICogaW50byBzby0+Y3VyclBv cy4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KKyAqIGludG8gYmF0Y2guIEhl bHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2UuCiAgKi8KIHN0YXRpYyBpbnQKIF9oYXNo X2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAotCQkJ CQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCisJCQkJCQkgICBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4U2Nh bkJhdGNoIGJhdGNoKQogewogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CiAJSW5kZXhUdXBsZQlpdHVwOwpAQCAtNjQwLDcgKzU4NSw3IEBAIF9oYXNo X2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCQkJ CV9oYXNoX2NoZWNrcXVhbChzY2FuLCBpdHVwKSkKIAkJCXsKIAkJCQkvKiB0dXBsZSBpcyBxdWFs aWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hhc2hfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRl eCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZlaXRlbShiYXRjaCwgaXRlbUluZGV4LCBv ZmZudW0sIGl0dXApOwogCQkJCWl0ZW1JbmRleCsrOwogCQkJfQogCQkJZWxzZQpAQCAtNjg3LDcg KzYzMiw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbiwg UGFnZSBwYWdlLAogCQkJewogCQkJCWl0ZW1JbmRleC0tOwogCQkJCS8qIHR1cGxlIGlzIHF1YWxp ZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRlbShzbywgaXRlbUluZGV4 LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNoLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCk7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC03MDYsMTMgKzY1MSwxNiBAQCBf aGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwK IAl9CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0 ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIGJhdGNoLT5pdGVtc1tpdGVt SW5kZXhdICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9oYXNoX3NhdmVpdGVtKEhhc2hTY2FuT3Bh cXVlIHNvLCBpbnQgaXRlbUluZGV4LAorX2hhc2hfc2F2ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxl IGl0dXApCiB7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVt c1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9ICZiYXRjaC0+aXRl bXNbaXRlbUluZGV4XTsKIAogCWN1cnJJdGVtLT5oZWFwVGlkID0gaXR1cC0+dF90aWQ7CiAJY3Vy ckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IDA7 CisJY3Vyckl0ZW0tPmNoZWNrZWRWaXNpYmxlID0gZmFsc2U7CisJY3Vyckl0ZW0tPmFsbFZpc2li bGUgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1 dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCmluZGV4IGNmN2YwYjkw MS4uMmMxNzU5MTdhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRp bC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKQEAgLTMzLDcgKzMz LDcgQEAgX2hhc2hfY2hlY2txdWFsKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBpdHVw KQogCS8qCiAJICogQ3VycmVudGx5LCB3ZSBjYW4ndCBjaGVjayBhbnkgb2YgdGhlIHNjYW4gY29u ZGl0aW9ucyBzaW5jZSB3ZSBkbyBub3QKIAkgKiBoYXZlIHRoZSBvcmlnaW5hbCBpbmRleCBlbnRy eSB2YWx1ZSB0byBzdXBwbHkgdG8gdGhlIHNrX2Z1bmMuIEFsd2F5cwotCSAqIHJldHVybiB0cnVl OyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0dHVwbGUgYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxh ZworCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0YmF0Y2ggYWxyZWFkeSBz ZXQgdGhlIHJlY2hlY2sgZmxhZwogCSAqIHRvIG1ha2UgdGhlIG1haW4gaW5kZXhzY2FuIGNvZGUg ZG8gaXQuCiAJICovCiAjaWZkZWYgTk9UX1VTRUQKQEAgLTUxMCw4MSArNTEwLDU5IEBAIF9oYXNo X2dldF9uZXdidWNrZXRfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1 Y2tldCwKICAqIF9oYXNoX2tpbGxfaXRlbXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBmb3IgaXRlbXMg YW4gaW5kZXhzY2FuIGNhbGxlciBoYXMKICAqIHRvbGQgdXMgd2VyZSBraWxsZWQuCiAgKgotICog c2Nhbi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5m b3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhl cmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51 bUtpbGxlZCA+IDApLgorICogVGhlIGJhdGNoIHBhcmFtZXRlciBjb250YWlucyBpbmZvcm1hdGlv biBhYm91dCB0aGUgY3VycmVudCBwYWdlIGFuZCBraWxsZWQKKyAqIHR1cGxlcyB0aGVyZW9uICh0 aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBiYXRjaC0+bnVtS2lsbGVkID4gMCkuCiAgKgot ICogVGhlIGNhbGxlciBkb2VzIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgcGFnZSBhbmQgbWF5IG9y IG1heSBub3QgaGF2ZSB0aGUKLSAqIHBhZ2UgcGlubmVkIGluIGEgYnVmZmVyLiAgTm90ZSB0aGF0 IHJlYWQtbG9jayBpcyBzdWZmaWNpZW50IGZvciBzZXR0aW5nCi0gKiBMUF9ERUFEIHN0YXR1cyAo d2hpY2ggaXMgb25seSBhIGhpbnQpLgorICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sg b24gdGhlIGJhdGNoIHBvc2l0aW9uJ3MgcGFnZS4gIFdoZW4gd2UKKyAqIHJldHVybiwgaXQgc3Rp bGwgd29uJ3QgYmUgbG9ja2VkLiAgSXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5z CisgKiB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCi0gKiBUaGUgY2FsbGVyIG11 c3QgaGF2ZSBwaW4gb24gYnVja2V0IGJ1ZmZlciwgYnV0IG1heSBvciBtYXkgbm90IGhhdmUgcGlu Ci0gKiBvbiBvdmVyZmxvdyBidWZmZXIsIGFzIGluZGljYXRlZCBieSBIYXNoU2NhblBvc0lzUGlu bmVkKHNvLT5jdXJyUG9zKS4KLSAqCi0gKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZv cmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8KLSAqIGRlbGV0ZS4KLSAqCi0g KiBUaGVyZSBhcmUgbmV2ZXIgYW55IHNjYW5zIGFjdGl2ZSBpbiBhIGJ1Y2tldCBhdCB0aGUgdGlt ZSBWQUNVVU0gYmVnaW5zLAotICogYmVjYXVzZSBWQUNVVU0gdGFrZXMgYSBjbGVhbnVwIGxvY2sg b24gdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UgYW5kIHNjYW5zCi0gKiBob2xkIGEgcGluLiAgQSBz Y2FuIGNhbiBiZWdpbiBhZnRlciBWQUNVVU0gbGVhdmVzIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdl Ci0gKiBidXQgYmVmb3JlIGl0IGZpbmlzaGVzIHRoZSBlbnRpcmUgYnVja2V0LCBidXQgaXQgY2Fu IG5ldmVyIHBhc3MgVkFDVVVNLAotICogYmVjYXVzZSBWQUNVVU0gYWx3YXlzIGxvY2tzIHRoZSBu ZXh0IHBhZ2UgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jayBvbgotICogdGhlIHByZXZpb3VzIG9u ZS4gIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBhY2NpZGVudGFsbHkK LSAqIGtpbGxpbmcgYSBUSUQgdGhhdCBoYXMgYmVlbiByZXVzZWQgZm9yIGFuIHVucmVsYXRlZCB0 dXBsZS4KKyAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5 IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKKyAqIExQX0RFQUQuICBXZSBtdXN0IGNvbmRpdGlv biBzZXR0aW5nIExQX0RFQUQgYml0cyBvbiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdAorICogY2hh bmdlZCBzaW5jZSBiYWNrIHdoZW4gX2hhc2hfcmVhZHBhZ2Ugc2F3IHRoZSBwYWdlLiAgV2UgdG90 YWxseSBnaXZlIHVwIG9uCisgKiBzZXR0aW5nIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExT TiBjaGFuZ2VkLgogICovCiB2b2lkCi1faGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh bikKK19oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBi YXRjaCkKIHsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQmxvY2tOdW1iZXIg Ymxrbm87CiAJQnVmZmVyCQlidWY7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFx dWU7CiAJT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQltYXhvZmY7Ci0JaW50CQkJbnVtS2lsbGVk ID0gc28tPm51bUtpbGxlZDsKLQlpbnQJCQlpOwogCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZh bHNlOwotCWJvb2wJCWhhdmVQaW4gPSBmYWxzZTsKKwlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKIAot CUFzc2VydChzby0+bnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KHNvLT5raWxsZWRJdGVtcyAhPSBO VUxMKTsKLQlBc3NlcnQoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisJQXNzZXJ0 KGJhdGNoLT5udW1LaWxsZWQgPiAwKTsKKwlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNo LT5jdXJyUGFnZSkpOwogCi0JLyoKLQkgKiBBbHdheXMgcmVzZXQgdGhlIHNjYW4gc3RhdGUsIHNv IHdlIGRvbid0IGxvb2sgZm9yIHNhbWUgaXRlbXMgb24gb3RoZXIKLQkgKiBwYWdlcy4KLQkgKi8K LQlzby0+bnVtS2lsbGVkID0gMDsKKwlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBiYXRjaC0+Y3Vy clBhZ2UsIEhBU0hfUkVBRCwKKwkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19Q QUdFKTsKIAotCWJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7Ci0JaWYgKEhhc2hTY2FuUG9z SXNQaW5uZWQoc28tPmN1cnJQb3MpKQorCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhi dWYpOworCUFzc2VydChiYXRjaC0+bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24g IT0gbGF0ZXN0bHNuKQogCXsKLQkJLyoKLQkJICogV2UgYWxyZWFkeSBoYXZlIHBpbiBvbiB0aGlz IGJ1ZmZlciwgc28sIGFsbCB3ZSBuZWVkIHRvIGRvIGlzCi0JCSAqIGFjcXVpcmUgbG9jayBvbiBp dC4KLQkJICovCi0JCWhhdmVQaW4gPSB0cnVlOwotCQlidWYgPSBzby0+Y3VyclBvcy5idWY7Ci0J CUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCS8qIE1vZGlmaWVkLCBnaXZl IHVwIG9uIGhpbnRpbmcgKi8KKwkJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKKwkJcmV0dXJuOwog CX0KLQllbHNlCi0JCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExI X09WRVJGTE9XX1BBR0UpOwogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUg PSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKIAltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVt YmVyKHBhZ2UpOwogCi0JZm9yIChpID0gMDsgaSA8IG51bUtpbGxlZDsgaSsrKQorCS8qIEl0ZXJh dGUgdGhyb3VnaCBiYXRjaC0+a2lsbGVkSXRlbXNbXSBpbiBpbmRleCBwYWdlIG9yZGVyICovCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtS2lsbGVkOyBpKyspCiAJewotCQlpbnQJCQlp dGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0 ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwkJaW50CQkJaXRlbUluZGV4ID0g YmF0Y2gtPmtpbGxlZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0gPSAm YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAkJb2ZmbnVtID0gY3Vyckl0ZW0tPmluZGV4T2Zm c2V0OwogCi0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0J CQkgICBpdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCQlBc3NlcnQoaXRlbUlu ZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJCSAgIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFz dEl0ZW0pOwogCiAJCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQogCQl7CkBAIC01OTQsNiArNTcy LDcgQEAgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQlpZiAoSXRlbVBv aW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+aGVhcFRpZCkpCiAJCQl7CiAJ CQkJLyogZm91bmQgdGhlIGl0ZW0gKi8KKwkJCQlBc3NlcnQoIWN1cnJJdGVtLT5hbGxWaXNpYmxl KTsKIAkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOwogCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7 CiAJCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCkBAIC02MTMsOSAr NTkyLDUgQEAgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCU1hcmtCdWZm ZXJEaXJ0eUhpbnQoYnVmLCB0cnVlKTsKIAl9CiAKLQlpZiAoc28tPmhhc2hzb19idWNrZXRfYnVm ID09IHNvLT5jdXJyUG9zLmJ1ZiB8fAotCQloYXZlUGluKQotCQlMb2NrQnVmZmVyKHNvLT5jdXJy UG9zLmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQllbHNlCi0JCV9oYXNoX3JlbGJ1ZihyZWws IGJ1Zik7CisJX2hhc2hfcmVsYnVmKHJlbCwgYnVmKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKaW5kZXggZjUzOGY3MTNhLi4zODk1YzM3NzQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CkBAIC0xMjAyLDggKzEyMDIsNiBAQCBIYXNoUGFnZVN0YXQKIEhhc2hQYXRoCiBIYXNoU2Nhbk9w YXF1ZQogSGFzaFNjYW5PcGFxdWVEYXRhCi1IYXNoU2NhblBvc0RhdGEKLUhhc2hTY2FuUG9zSXRl bQogSGFzaFNrZXdCdWNrZXQKIEhhc2hTdGF0ZQogSGFzaFZhbHVlRnVuYwotLSAKMi41MS4wCgo= --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0008-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v10-0008-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdzf4 RnJvbSA5OTkwNjI1YTg2M2NhOTM4YzExNDk0ZDhjODg5MGQzNWU1NmE3NjdjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTAgMDgvMTFdIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNl cyBjb3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUg c2luY2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMg d2lsbCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCi0tLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgfCAxMTEgKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDU2IGluc2VydGlvbnMoKyksIDU1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggNTUxYTBlZWIzLi40 YThmNDBkYWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC02MzgsNiArNjM4 LDEwIEBAIHN0YXRpYyBpbmxpbmUgQnVmZmVyRGVzYyAqQnVmZmVyQWxsb2MoU01nclJlbGF0aW9u IHNtZ3IsCiAJCQkJCQkJCQkgIGJvb2wgKmZvdW5kUHRyLCBJT0NvbnRleHQgaW9fY29udGV4dCk7 CiBzdGF0aWMgYm9vbCBBc3luY1JlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24sIGludCAqbmJsb2Nrc19wcm9ncmVzcyk7CiBzdGF0aWMgdm9pZCBDaGVja1JlYWRCdWZm ZXJzT3BlcmF0aW9uKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIGJvb2wgaXNfY29t cGxldGUpOworCitzdGF0aWMgdm9pZCBQcm9jZXNzQnVmZmVySGl0KEJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCSBSZWxhdGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNN Z3JSZWxhdGlvbiBzbWdyLAorCQkJCQkJCSBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVy IGJsb2NrbnVtKTsKIHN0YXRpYyBCdWZmZXIgR2V0VmljdGltQnVmZmVyKEJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5IHN0cmF0ZWd5LCBJT0NvbnRleHQgaW9fY29udGV4dCk7CiBzdGF0aWMgdm9pZCBGbHVz aFVubG9ja2VkQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4sCiAJCQkJ CQkJCUlPT2JqZWN0IGlvX29iamVjdCwgSU9Db250ZXh0IGlvX2NvbnRleHQpOwpAQCAtMTIxNiw4 ICsxMjIwLDYgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJCSAgYm9vbCAq Zm91bmRQdHIpCiB7CiAJQnVmZmVyRGVzYyAqYnVmSGRyOwotCUlPQ29udGV4dAlpb19jb250ZXh0 OwotCUlPT2JqZWN0CWlvX29iamVjdDsKIAogCUFzc2VydChibG9ja051bSAhPSBQX05FVyk7CiAK QEAgLTEyMjYsMTcgKzEyMjgsNiBAQCBQaW5CdWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJ CQlwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQgfHwKIAkJCXBlcnNpc3Rl bmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEKSk7CiAKLQlpZiAocGVyc2lzdGVuY2UgPT0g UkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQl7Ci0JCWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFM OwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9URU1QX1JFTEFUSU9OOwotCX0KLQllbHNlCi0Jewot CQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9yU3RyYXRlZ3koc3RyYXRlZ3kpOwotCQlpb19vYmpl Y3QgPSBJT09CSkVDVF9SRUxBVElPTjsKLQl9Ci0KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9S RUFEX1NUQVJUKGZvcmtOdW0sIGJsb2NrTnVtLAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9j YXRvci5sb2NhdG9yLnNwY09pZCwKIAkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5kYk9pZCwKQEAgLTEyNDQsMTggKzEyMzUsMTEgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVs YXRpb24gcmVsLAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAog CWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCXsKIAkJYnVmSGRyID0g TG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3JrTnVtLCBibG9ja051bSwgZm91bmRQdHIpOwotCQlp ZiAoKmZvdW5kUHRyKQotCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCsrOwotCX0KIAll bHNlCi0JewogCQlidWZIZHIgPSBCdWZmZXJBbGxvYyhzbWdyLCBwZXJzaXN0ZW5jZSwgZm9ya051 bSwgYmxvY2tOdW0sCi0JCQkJCQkJIHN0cmF0ZWd5LCBmb3VuZFB0ciwgaW9fY29udGV4dCk7Ci0J CWlmICgqZm91bmRQdHIpCi0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOwotCX0K KwkJCQkJCQkgc3RyYXRlZ3ksIGZvdW5kUHRyLCBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVn eSkpOworCiAJaWYgKHJlbCkKIAl7CiAJCS8qCkBAIC0xMjY0LDIyICsxMjQ4LDEwIEBAIFBpbkJ1 ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwKIAkJICogemVyb2VkIGluc3RlYWQpLCB0aGUgcGVy LXJlbGF0aW9uIHN0YXRzIGFsd2F5cyBjb3VudCB0aGVtLgogCQkgKi8KIAkJcGdzdGF0X2NvdW50 X2J1ZmZlcl9yZWFkKHJlbCk7Ci0JCWlmICgqZm91bmRQdHIpCi0JCQlwZ3N0YXRfY291bnRfYnVm ZmVyX2hpdChyZWwpOwogCX0KLQlpZiAoKmZvdW5kUHRyKQotCXsKLQkJcGdzdGF0X2NvdW50X2lv X29wKGlvX29iamVjdCwgaW9fY29udGV4dCwgSU9PUF9ISVQsIDEsIDApOwotCQlpZiAoVmFjdXVt Q29zdEFjdGl2ZSkKLQkJCVZhY3V1bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0Owog Ci0JCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwK LQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJ CQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBzbWdy LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCSAgc21nci0+c21n cl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJCQkJCSAgdHJ1ZSk7Ci0JfQorCWlmICgqZm91bmRQ dHIpCisJCVByb2Nlc3NCdWZmZXJIaXQoc3RyYXRlZ3ksIHJlbCwgcGVyc2lzdGVuY2UsIHNtZ3Is IGZvcmtOdW0sIGJsb2NrTnVtKTsKIAogCXJldHVybiBCdWZmZXJEZXNjcmlwdG9yR2V0QnVmZmVy KGJ1Zkhkcik7CiB9CkBAIC0xNjg1LDYgKzE2NTcsNTEgQEAgUmVhZEJ1ZmZlcnNDYW5TdGFydElP KEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0KQogCXJldHVybiBSZWFkQnVmZmVyc0NhblN0YXJ0 SU9PbmNlKGJ1ZmZlciwgbm93YWl0KTsKIH0KIAorLyoKKyAqIFdlIHRyYWNrIHZhcmlvdXMgc3Rh dHMgcmVsYXRlZCB0byBidWZmZXIgaGl0cy4gQmVjYXVzZSB0aGlzIGlzIGRvbmUgaW4gYQorICog ZmV3IHNlcGFyYXRlIHBsYWNlcywgdGhpcyBoZWxwZXIgZXhpc3RzIGZvciBjb252ZW5pZW5jZS4K KyAqLworc3RhdGljIHZvaWQKK1Byb2Nlc3NCdWZmZXJIaXQoQnVmZmVyQWNjZXNzU3RyYXRlZ3kg c3RyYXRlZ3ksCisJCQkJIFJlbGF0aW9uIHJlbCwgY2hhciBwZXJzaXN0ZW5jZSwgU01nclJlbGF0 aW9uIHNtZ3IsCisJCQkJIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0p Cit7CisJSU9Db250ZXh0CWlvX2NvbnRleHQ7CisJSU9PYmplY3QJaW9fb2JqZWN0OworCisJaWYg KHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJeworCQlpb19jb250ZXh0ID0g SU9DT05URVhUX05PUk1BTDsKKwkJaW9fb2JqZWN0ID0gSU9PQkpFQ1RfVEVNUF9SRUxBVElPTjsK Kwl9CisJZWxzZQorCXsKKwkJaW9fY29udGV4dCA9IElPQ29udGV4dEZvclN0cmF0ZWd5KHN0cmF0 ZWd5KTsKKwkJaW9fb2JqZWN0ID0gSU9PQkpFQ1RfUkVMQVRJT047CisJfQorCisJVFJBQ0VfUE9T VEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKGZvcmtudW0sCisJCQkJCQkJCQkgIGJsb2NrbnVtLAor CQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ ICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkgIHNtZ3ItPnNt Z3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IuYmFja2VuZCwKKwkJCQkJCQkJCSAgdHJ1ZSk7CisKKwlpZiAocGVyc2lzdGVuY2UgPT0g UkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCArPSAx OworCWVsc2UKKwkJcGdCdWZmZXJVc2FnZS5zaGFyZWRfYmxrc19oaXQgKz0gMTsKKworCWlmIChy ZWwpCisJCXBnc3RhdF9jb3VudF9idWZmZXJfaGl0KHJlbCk7CisKKwlwZ3N0YXRfY291bnRfaW9f b3AoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09QX0hJVCwgMSwgMCk7CisKKwlpZiAoVmFjdXVt Q29zdEFjdGl2ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBhZ2VIaXQ7Cit9 CisKIC8qCiAgKiBIZWxwZXIgZm9yIFdhaXRSZWFkQnVmZmVycygpIHRoYXQgcHJvY2Vzc2VzIHRo ZSByZXN1bHRzIG9mIGEgcmVhZHYKICAqIG9wZXJhdGlvbiwgcmFpc2luZyBhbiBlcnJvciBpZiBu ZWNlc3NhcnkuCkBAIC0xOTgwLDI1ICsxOTk3LDkgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJCSAqIG11 c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhl IG90aGVyCiAJCSAqIGJhY2tlbmQgd2lsbCB0cmFjayB0aGlzIGFzIGEgJ3JlYWQnLgogCQkgKi8K LQkJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfUkVBRF9ET05FKGZvcmtudW0sIGJsb2NrbnVtICsg b3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNt Z3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3It PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkgIG9wZXJhdGlvbi0+c21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCQkgIG9wZXJhdGlv bi0+c21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJCQkJCSAgdHJ1ZSk7Ci0KLQkJ aWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCi0JCQlwZ0J1ZmZlclVzYWdl LmxvY2FsX2Jsa3NfaGl0ICs9IDE7Ci0JCWVsc2UKLQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Js a3NfaGl0ICs9IDE7Ci0KLQkJaWYgKG9wZXJhdGlvbi0+cmVsKQotCQkJcGdzdGF0X2NvdW50X2J1 ZmZlcl9oaXQob3BlcmF0aW9uLT5yZWwpOwotCi0JCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmpl Y3QsIGlvX2NvbnRleHQsIElPT1BfSElULCAxLCAwKTsKLQotCQlpZiAoVmFjdXVtQ29zdEFjdGl2 ZSkKLQkJCVZhY3V1bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQlQcm9jZXNz QnVmZmVySGl0KG9wZXJhdGlvbi0+c3RyYXRlZ3ksIG9wZXJhdGlvbi0+cmVsLCBwZXJzaXN0ZW5j ZSwKKwkJCQkJCSBvcGVyYXRpb24tPnNtZ3IsIGZvcmtudW0sCisJCQkJCQkgYmxvY2tudW0gKyBv cGVyYXRpb24tPm5ibG9ja3NfZG9uZSk7CiAJfQogCWVsc2UKIAl7Ci0tIAoyLjUxLjAKCg== --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0001-Extract-fake-LSN-infrastructure-from-GiST-index-.patch" Content-Disposition: attachment; filename="v10-0001-Extract-fake-LSN-infrastructure-from-GiST-index-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdyp0 RnJvbSAxM2Q0Mjg5YjE3MWNkMmRiYTQ3OWM0ZWZjOTRlODFhMWYxZjIwOGY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTg6MTEgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMCAwMS8xMV0g RXh0cmFjdCBmYWtlIExTTiBpbmZyYXN0cnVjdHVyZSBmcm9tIEdpU1QgaW5kZXggQU0uCgpFeHRy YWN0IHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgR2lTVCB0byBnZW5lcmF0ZSBmYWtlIExTTnMg c28gdGhhdApvdGhlciBpbmRleCBBTXMgY2FuIHJldXNlIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgdG8g Z2VuZXJhdGUgZmFrZSBMU05zLgoKUHJlcGFyYXRpb24gZm9yIGFuIHVwY29taW5nIGNvbW1pdCB0 aGF0IHdpbGwgY2hhbmdlIHRoZSBydWxlcyBhcm91bmQKaG9sZGluZyBvbiB0byBidWZmZXIgcGlu cyBvbiBsZWFmIHBhZ2VzIGluIHVubG9nZ2VkIG5idHJlZSBpbmRleGVzCihhY3R1YWxseSwgaW4g YWxsIGNhc2VzIGJhcnJpbmcgc2NhbnMgdGhhdCB1c2UgYSBub24tTVZDQyBzbmFwc2hvdCkuClRo aXMgaXMgdGhlIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIG5ldyBhbWdldGJhdGNoIGludGVyZmFj ZS4gIEFub3RoZXIKcHJlcGFyYXRvcnkgY29tbWl0IHdpbGwgYWRkIGZha2UgTFNOIHN1cHBvcnQg dG8gbmJ0cmVlIGFoZWFkIG9mIHRoZQphbWdldGJhdGNoIGNvbW1pdC4KCkJ1bXAgWExPR19QQUdF X01BR0lDIGR1ZSB0byBYTE9HX0dJU1RfQVNTSUdOX0xTTiBiZWNvbWluZwpYTE9HX0FTU0lHTl9M U04uCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1o YiswRHIySzBEdGdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdF9w cml2YXRlLmggICAgICAgfCAgNCAtLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3R4bG9nLmggICAg ICAgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggICAgICAgICAgICAgICB8 ICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9naW5zZXJ0LmggICAgICAgICB8ICAyICsKIHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oICAgICAgICB8ICAyICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgfCAgNiArLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3R1dGlsLmMgICAgICB8IDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYyAgICB8ICA4ICstLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdHhsb2cuYyAgICAgIHwgMjEgLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9naXN0ZGVzYy5jICB8ICA2IC0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL3hsb2dkZXNjLmMgIHwgIDcgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMgICAgICAgfCAyOSArKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z2luc2VydC5jIHwgNjUgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgICAgIHwgMTQgKysrLS0tCiAxNCBmaWxlcyBjaGFuZ2VkLCAx MjAgaW5zZXJ0aW9ucygrKSwgOTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dpc3RfcHJpdmF0ZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0 ZS5oCmluZGV4IDU1MmY2MDVjMC4uNDQ1MTRmMWNiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvZ2lzdF9wcml2YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3RfcHJpdmF0 ZS5oCkBAIC00NTcsOCArNDU3LDYgQEAgZXh0ZXJuIFhMb2dSZWNQdHIgZ2lzdFhMb2dTcGxpdChi b29sIHBhZ2VfaXNfbGVhZiwKIAkJCQkJCQkJQmxvY2tOdW1iZXIgb3JpZ3JsaW5rLCBHaXN0TlNO IG9yaWduc24sCiAJCQkJCQkJCUJ1ZmZlciBsZWZ0Y2hpbGRidWYsIGJvb2wgbWFya2ZvbGxvd3Jp Z2h0KTsKIAotZXh0ZXJuIFhMb2dSZWNQdHIgZ2lzdFhMb2dBc3NpZ25MU04odm9pZCk7Ci0KIC8q IGdpc3RnZXQuYyAqLwogZXh0ZXJuIGJvb2wgZ2lzdGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGdpc3RnZXRiaXRtYXAoSW5kZXhT Y2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CkBAIC01MzEsOCArNTI5LDYgQEAgZXh0ZXJu IHZvaWQgZ2lzdE1ha2VVbmlvbktleShHSVNUU1RBVEUgKmdpc3RzdGF0ZSwgaW50IGF0dG5vLAog CQkJCQkJCSBHSVNURU5UUlkgKmVudHJ5MiwgYm9vbCBpc251bGwyLAogCQkJCQkJCSBEYXR1bSAq ZHN0LCBib29sICpkc3Rpc251bGwpOwogCi1leHRlcm4gWExvZ1JlY1B0ciBnaXN0R2V0RmFrZUxT TihSZWxhdGlvbiByZWwpOwotCiAvKiBnaXN0dmFjdXVtLmMgKi8KIGV4dGVybiBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKmdpc3RidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJ CQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oCmlu ZGV4IGQzZDFjNjU0OS4uMWMyY2Y2ZTgxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv Z2lzdHhsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2lzdHhsb2cuaApAQCAtMjYsNyAr MjYsNyBAQAogIC8qICNkZWZpbmUgWExPR19HSVNUX0lOU0VSVF9DT01QTEVURQkgMHg0MCAqLwkv KiBub3QgdXNlZCBhbnltb3JlICovCiAgLyogI2RlZmluZSBYTE9HX0dJU1RfQ1JFQVRFX0lOREVY CQkgMHg1MCAqLwkvKiBub3QgdXNlZCBhbnltb3JlICovCiAjZGVmaW5lIFhMT0dfR0lTVF9QQUdF X0RFTEVURQkJMHg2MAotI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJMHg3MAkvKiBub3As IGFzc2lnbiBuZXcgTFNOICovCisgLyogI2RlZmluZSBYTE9HX0dJU1RfQVNTSUdOX0xTTgkJIDB4 NzAgKi8JLyogbm90IHVzZWQgYW55bW9yZSAqLwogCiAvKgogICogQmFja3VwIEJsayAwOiB1cGRh dGVkIHBhZ2UuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2cuaAppbmRleCBmZGZiNTcyNDYuLjU1M2Q2ZmM5YyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxv Zy5oCkBAIC0yNTgsNiArMjU4LDcgQEAgZXh0ZXJuIGJvb2wgQ3JlYXRlUmVzdGFydFBvaW50KGlu dCBmbGFncyk7CiBleHRlcm4gV0FMQXZhaWxhYmlsaXR5IEdldFdBTEF2YWlsYWJpbGl0eShYTG9n UmVjUHRyIHRhcmdldExTTik7CiBleHRlcm4gdm9pZCBYTG9nUHV0TmV4dE9pZChPaWQgbmV4dE9p ZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBYTG9nUmVzdG9yZVBvaW50KGNvbnN0IGNoYXIgKnJwTmFt ZSk7CitleHRlcm4gWExvZ1JlY1B0ciBYTG9nQXNzaWduTFNOKHZvaWQpOwogZXh0ZXJuIHZvaWQg VXBkYXRlRnVsbFBhZ2VXcml0ZXModm9pZCk7CiBleHRlcm4gdm9pZCBHZXRGdWxsUGFnZVdyaXRl SW5mbyhYTG9nUmVjUHRyICpSZWRvUmVjUHRyX3AsIGJvb2wgKmRvUGFnZVdyaXRlc19wKTsKIGV4 dGVybiBYTG9nUmVjUHRyIEdldFJlZG9SZWNQdHIodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ2luc2VydC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dpbnNlcnQu aAppbmRleCAxNmViYzc2ZTcuLjkxZGZiZDU2MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2dpbnNlcnQuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ2luc2VydC5oCkBA IC02NCw2ICs2NCw4IEBAIGV4dGVybiB2b2lkIGxvZ19uZXdwYWdlX3JhbmdlKFJlbGF0aW9uIHJl bCwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCSAgQmxvY2tOdW1iZXIgc3RhcnRibGssIEJs b2NrTnVtYmVyIGVuZGJsaywgYm9vbCBwYWdlX3N0ZCk7CiBleHRlcm4gWExvZ1JlY1B0ciBYTG9n U2F2ZUJ1ZmZlckZvckhpbnQoQnVmZmVyIGJ1ZmZlciwgYm9vbCBidWZmZXJfc3RkKTsKIAorZXh0 ZXJuIFhMb2dSZWNQdHIgWExvZ0dldEZha2VMU04oUmVsYXRpb24gcmVsKTsKKwogZXh0ZXJuIHZv aWQgSW5pdFhMb2dJbnNlcnQodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBYTE9HSU5TRVJUX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19jb250cm9sLmgKaW5kZXggNzUwM2RiMWFmLi43N2E2NjFlODEgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29udHJvbC5oCisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfY29udHJvbC5oCkBAIC03OCw3ICs3OCw3IEBAIHR5cGVkZWYgc3RydWN0 IENoZWNrUG9pbnQKICNkZWZpbmUgWExPR19FTkRfT0ZfUkVDT1ZFUlkJCQkweDkwCiAjZGVmaW5l IFhMT0dfRlBJX0ZPUl9ISU5UCQkJCTB4QTAKICNkZWZpbmUgWExPR19GUEkJCQkJCQkweEIwCi0v KiAweEMwIGlzIHVzZWQgaW4gUG9zdGdyZXMgOS41LTExICovCisjZGVmaW5lIFhMT0dfQVNTSUdO X0xTTgkJCQkJMHhDMAogI2RlZmluZSBYTE9HX09WRVJXUklURV9DT05UUkVDT1JECQkweEQwCiAj ZGVmaW5lIFhMT0dfQ0hFQ0tQT0lOVF9SRURPCQkJMHhFMAogI2RlZmluZSBYTE9HX0xPR0lDQUxf REVDT0RJTkdfU1RBVFVTX0NIQU5HRQkweEYwCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2lzdC9naXN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKaW5kZXggZGZm ZmNlM2UzLi44NTY1ZTIyNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dp c3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKQEAgLTUxNyw3ICs1MTcs NyBAQCBnaXN0cGxhY2V0b3BhZ2UoUmVsYXRpb24gcmVsLCBTaXplIGZyZWVzcGFjZSwgR0lTVFNU QVRFICpnaXN0c3RhdGUsCiAJCQkJCQkJCQkgICBkaXN0LCBvbGRybGluaywgb2xkbnNuLCBsZWZ0 Y2hpbGRidWYsCiAJCQkJCQkJCQkgICBtYXJrZm9sbG93cmlnaHQpOwogCQkJZWxzZQotCQkJCXJl Y3B0ciA9IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04o cmVsKTsKIAkJfQogCiAJCWZvciAocHRyID0gZGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCkBA IC01OTQsNyArNTk0LDcgQEAgZ2lzdHBsYWNldG9wYWdlKFJlbGF0aW9uIHJlbCwgU2l6ZSBmcmVl c3BhY2UsIEdJU1RTVEFURSAqZ2lzdHN0YXRlLAogCQkJCQkJCQkJCWxlZnRjaGlsZGJ1Zik7CiAJ CQl9CiAJCQllbHNlCi0JCQkJcmVjcHRyID0gZ2lzdEdldEZha2VMU04ocmVsKTsKKwkJCQlyZWNw dHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOwogCQl9CiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRy KTsKIApAQCAtMTczMyw3ICsxNzMzLDcgQEAgZ2lzdHBydW5lcGFnZShSZWxhdGlvbiByZWwsIFBh Z2UgcGFnZSwgQnVmZmVyIGJ1ZmZlciwgUmVsYXRpb24gaGVhcFJlbCkKIAkJCVBhZ2VTZXRMU04o cGFnZSwgcmVjcHRyKTsKIAkJfQogCQllbHNlCi0JCQlQYWdlU2V0TFNOKHBhZ2UsIGdpc3RHZXRG YWtlTFNOKHJlbCkpOworCQkJUGFnZVNldExTTihwYWdlLCBYTG9nR2V0RmFrZUxTTihyZWwpKTsK IAogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpc3QvZ2lzdHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R1dGlsLmMK aW5kZXggMjc5NzJmYWQyLi4wZjU4ZjYxODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3R1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHV0aWwu YwpAQCAtMTAwNyw1NiArMTAwNyw2IEBAIGdpc3Rwcm9wZXJ0eShPaWQgaW5kZXhfb2lkLCBpbnQg YXR0bm8sCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gKiBTb21lIGluZGV4ZXMgYXJlIG5vdCBX QUwtbG9nZ2VkLCBidXQgd2UgbmVlZCBMU05zIHRvIGRldGVjdCBjb25jdXJyZW50IHBhZ2UKLSAq IHNwbGl0cyBhbnl3YXkuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBmYWtlIHNlcXVlbmNlIG9m IExTTnMgZm9yIHRoYXQKLSAqIHB1cnBvc2UuCi0gKi8KLVhMb2dSZWNQdHIKLWdpc3RHZXRGYWtl TFNOKFJlbGF0aW9uIHJlbCkKLXsKLQlpZiAocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09 IFJFTFBFUlNJU1RFTkNFX1RFTVApCi0JewotCQkvKgotCQkgKiBUZW1wb3JhcnkgcmVsYXRpb25z IGFyZSBvbmx5IGFjY2Vzc2libGUgaW4gb3VyIHNlc3Npb24sIHNvIGEgc2ltcGxlCi0JCSAqIGJh Y2tlbmQtbG9jYWwgY291bnRlciB3aWxsIGRvLgotCQkgKi8KLQkJc3RhdGljIFhMb2dSZWNQdHIg Y291bnRlciA9IEZpcnN0Tm9ybWFsVW5sb2dnZWRMU047Ci0KLQkJcmV0dXJuIGNvdW50ZXIrKzsK LQl9Ci0JZWxzZSBpZiAoUmVsYXRpb25Jc1Blcm1hbmVudChyZWwpKQotCXsKLQkJLyoKLQkJICog V0FMLWxvZ2dpbmcgb24gdGhpcyByZWxhdGlvbiB3aWxsIHN0YXJ0IGFmdGVyIGNvbW1pdCwgc28g aXRzIExTTnMKLQkJICogbXVzdCBiZSBkaXN0aW5jdCBudW1iZXJzIHNtYWxsZXIgdGhhbiB0aGUg TFNOIGF0IHRoZSBuZXh0IGNvbW1pdC4KLQkJICogRW1pdCBhIGR1bW15IFdBTCByZWNvcmQgaWYg aW5zZXJ0LUxTTiBoYXNuJ3QgYWR2YW5jZWQgYWZ0ZXIgdGhlCi0JCSAqIGxhc3QgY2FsbC4KLQkJ ICovCi0JCXN0YXRpYyBYTG9nUmVjUHRyIGxhc3Rsc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKLQkJ WExvZ1JlY1B0cgljdXJybHNuID0gR2V0WExvZ0luc2VydFJlY1B0cigpOwotCi0JCS8qIFNob3Vs ZG4ndCBiZSBjYWxsZWQgZm9yIFdBTC1sb2dnaW5nIHJlbGF0aW9ucyAqLwotCQlBc3NlcnQoIVJl bGF0aW9uTmVlZHNXQUwocmVsKSk7Ci0KLQkJLyogTm8gbmVlZCBmb3IgYW4gYWN0dWFsIHJlY29y ZCBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBkaXN0aW5jdCBMU04gKi8KLQkJaWYgKFhMb2dSZWNQdHJJ c1ZhbGlkKGxhc3Rsc24pICYmIGxhc3Rsc24gPT0gY3VycmxzbikKLQkJCWN1cnJsc24gPSBnaXN0 WExvZ0Fzc2lnbkxTTigpOwotCi0JCWxhc3Rsc24gPSBjdXJybHNuOwotCQlyZXR1cm4gY3Vycmxz bjsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogVW5sb2dnZWQgcmVsYXRpb25zIGFyZSBhY2Nl c3NpYmxlIGZyb20gb3RoZXIgYmFja2VuZHMsIGFuZCBzdXJ2aXZlCi0JCSAqIChjbGVhbikgcmVz dGFydHMuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpIGhhbmRsZXMgdGhhdCBmb3IgdXMuCi0J CSAqLwotCQlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RF TkNFX1VOTE9HR0VEKTsKLQkJcmV0dXJuIEdldEZha2VMU05Gb3JVbmxvZ2dlZFJlbCgpOwotCX0K LX0KLQogLyoKICAqIFRoaXMgaXMgYSBzdHJhdG51bSB0cmFuc2xhdGlvbiBzdXBwb3J0IGZ1bmN0 aW9uIGZvciBHaVNUIG9wY2xhc3NlcyB0aGF0IHVzZQogICogdGhlIFJUKlN0cmF0ZWd5TnVtYmVy IGNvbnN0YW50cy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1 dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwppbmRleCA5ZTcxNDk4 MGQuLjY4NmEwNDE4MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHZh Y3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3R2YWN1dW0uYwpAQCAtMTYs NyArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNz L2dpc3RfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAi YWNjZXNzL3hsb2dpbnNlcnQuaCIKICNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKICNpbmNs dWRlICJsaWIvaW50ZWdlcnNldC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtMTgyLDcg KzE4Miw3IEBAIGdpc3R2YWN1dW1zY2FuKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCQl2c3Rh dGUuc3RhcnROU04gPSBHZXRJbnNlcnRSZWNQdHIoKTsKIAllbHNlCi0JCXZzdGF0ZS5zdGFydE5T TiA9IGdpc3RHZXRGYWtlTFNOKHJlbCk7CisJCXZzdGF0ZS5zdGFydE5TTiA9IFhMb2dHZXRGYWtl TFNOKHJlbCk7CiAKIAkvKgogCSAqIFRoZSBvdXRlciBsb29wIGl0ZXJhdGVzIG92ZXIgYWxsIGlu ZGV4IHBhZ2VzLCBpbiBwaHlzaWNhbCBvcmRlciAod2UKQEAgLTQxMyw3ICs0MTMsNyBAQCByZXN0 YXJ0OgogCQkJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAkJCX0KIAkJCWVsc2UKLQkJCQlQ YWdlU2V0TFNOKHBhZ2UsIGdpc3RHZXRGYWtlTFNOKHJlbCkpOworCQkJCVBhZ2VTZXRMU04ocGFn ZSwgWExvZ0dldEZha2VMU04ocmVsKSk7CiAKIAkJCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAt NzA3LDcgKzcwNyw3IEBAIGdpc3RkZWxldGVwYWdlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5k ZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChpbmZvLT5p bmRleCkpCiAJCXJlY3B0ciA9IGdpc3RYTG9nUGFnZURlbGV0ZShsZWFmQnVmZmVyLCB0eGlkLCBw YXJlbnRCdWZmZXIsIGRvd25saW5rKTsKIAllbHNlCi0JCXJlY3B0ciA9IGdpc3RHZXRGYWtlTFNO KGluZm8tPmluZGV4KTsKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04oaW5mby0+aW5kZXgpOwog CVBhZ2VTZXRMU04ocGFyZW50UGFnZSwgcmVjcHRyKTsKIAlQYWdlU2V0TFNOKGxlYWZQYWdlLCBy ZWNwdHIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwppbmRleCBjNzgzODM4NDkuLmFl NTM4ZGM4MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdHhsb2cuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0eGxvZy5jCkBAIC00MjEsOSArNDIxLDYg QEAgZ2lzdF9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQljYXNlIFhMT0dfR0lTVF9Q QUdFX0RFTEVURToKIAkJCWdpc3RSZWRvUGFnZURlbGV0ZShyZWNvcmQpOwogCQkJYnJlYWs7Ci0J CWNhc2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQkvKiBub3AuIFNlZSBnaXN0R2V0RmFrZUxT TigpLiAqLwotCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKFBBTklDLCAiZ2lzdF9yZWRv OiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKIAl9CkBAIC01NjcsMjQgKzU2NCw2IEBAIGdp c3RYTG9nUGFnZURlbGV0ZShCdWZmZXIgYnVmZmVyLCBGdWxsVHJhbnNhY3Rpb25JZCB4aWQsCiAJ cmV0dXJuIHJlY3B0cjsKIH0KIAotLyoKLSAqIFdyaXRlIGFuIGVtcHR5IFhMT0cgcmVjb3JkIHRv IGFzc2lnbiBhIGRpc3RpbmN0IExTTi4KLSAqLwotWExvZ1JlY1B0cgotZ2lzdFhMb2dBc3NpZ25M U04odm9pZCkKLXsKLQlpbnQJCQlkdW1teSA9IDA7Ci0KLQkvKgotCSAqIFJlY29yZHMgb3RoZXIg dGhhbiBYTE9HX1NXSVRDSCBtdXN0IGhhdmUgY29udGVudC4gV2UgdXNlIGFuIGludGVnZXIgMAot CSAqIHRvIGZvbGxvdyB0aGUgcmVzdHJpY3Rpb24uCi0JICovCi0JWExvZ0JlZ2luSW5zZXJ0KCk7 Ci0JWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfTUFSS19VTklNUE9SVEFOVCk7Ci0JWExvZ1JlZ2lz dGVyRGF0YSgmZHVtbXksIHNpemVvZihkdW1teSkpOwotCXJldHVybiBYTG9nSW5zZXJ0KFJNX0dJ U1RfSUQsIFhMT0dfR0lTVF9BU1NJR05fTFNOKTsKLX0KLQogLyoKICAqIFdyaXRlIFhMT0cgcmVj b3JkIGFib3V0IHJldXNlIG9mIGEgZGVsZXRlZCBwYWdlLgogICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9naXN0ZGVzYy5jCmluZGV4IDc5YTgzOWNjMi4uNjc3ODllMDI1IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MvZ2lzdGRlc2MuYwpAQCAtODAsOSArODAsNiBAQCBnaXN0X2Rlc2Mo U3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQljYXNlIFhMT0dfR0lT VF9QQUdFX0RFTEVURToKIAkJCW91dF9naXN0eGxvZ1BhZ2VEZWxldGUoYnVmLCAoZ2lzdHhsb2dQ YWdlRGVsZXRlICopIHJlYyk7CiAJCQlicmVhazsKLQkJY2FzZSBYTE9HX0dJU1RfQVNTSUdOX0xT TjoKLQkJCS8qIE5vIGRldGFpbHMgdG8gd3JpdGUgb3V0ICovCi0JCQlicmVhazsKIAl9CiB9CiAK QEAgLTEwOCw5ICsxMDUsNiBAQCBnaXN0X2lkZW50aWZ5KHVpbnQ4IGluZm8pCiAJCWNhc2UgWExP R19HSVNUX1BBR0VfREVMRVRFOgogCQkJaWQgPSAiUEFHRV9ERUxFVEUiOwogCQkJYnJlYWs7Ci0J CWNhc2UgWExPR19HSVNUX0FTU0lHTl9MU046Ci0JCQlpZCA9ICJBU1NJR05fTFNOIjsKLQkJCWJy ZWFrOwogCX0KIAogCXJldHVybiBpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy94bG9nZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNj LmMKaW5kZXggZmYwNzhmMjIyLi45MDQ0Yjk1MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy94bG9nZGVzYy5jCkBAIC0xNzUsNiArMTc1LDEwIEBAIHhsb2dfZGVzYyhTdHJpbmdJbmZvIGJ1 ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCW1lbWNweSgmZW5hYmxlZCwgcmVjLCBzaXpl b2YoYm9vbCkpOwogCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgZW5hYmxlZCA/ICJ0cnVl IiA6ICJmYWxzZSIpOwogCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfQVNTSUdOX0xTTikKKwl7 CisJCS8qIG5vIGZ1cnRoZXIgaW5mb3JtYXRpb24gdG8gcHJpbnQgKi8KKwl9CiB9CiAKIGNvbnN0 IGNoYXIgKgpAQCAtMjI5LDYgKzIzMyw5IEBAIHhsb2dfaWRlbnRpZnkodWludDggaW5mbykKIAkJ Y2FzZSBYTE9HX0xPR0lDQUxfREVDT0RJTkdfU1RBVFVTX0NIQU5HRToKIAkJCWlkID0gIkxPR0lD QUxfREVDT0RJTkdfU1RBVFVTX0NIQU5HRSI7CiAJCQlicmVhazsKKwkJY2FzZSBYTE9HX0FTU0lH Tl9MU046CisJCQlpZCA9ICJBU1NJR05fTFNOIjsKKwkJCWJyZWFrOwogCX0KIAogCXJldHVybiBp ZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCAxM2VjNjIyNWIuLmFlYTEyYWU4MyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtODIzMCw2ICs4MjMwLDMxIEBAIFhMb2dS ZXN0b3JlUG9pbnQoY29uc3QgY2hhciAqcnBOYW1lKQogCXJldHVybiBSZWNQdHI7CiB9CiAKKy8q CisgKiBXcml0ZSBhbiBlbXB0eSBYTE9HIHJlY29yZCB0byBhc3NpZ24gYSBkaXN0aW5jdCBMU04u CisgKgorICogVGhpcyBpcyB1c2VkIGJ5IGluZGV4IEFNcyAobmJ0cmVlLCBoYXNoLCBHaVNUKSB3 aGVuIGJ1aWxkaW5nIGluZGV4ZXMgb24KKyAqIHBlcm1hbmVudCByZWxhdGlvbnMgd2l0aCB3YWxf bGV2ZWw9bWluaW1hbC4gIEluIHRoYXQgc2NlbmFyaW8sIFdBTC1sb2dnaW5nCisgKiB3aWxsIHN0 YXJ0IGFmdGVyIGNvbW1pdCwgYnV0IHRoZSBpbmRleCBBTSBuZWVkcyBkaXN0aW5jdCBMU05zIHRv IGRldGVjdAorICogY29uY3VycmVudCBwYWdlIG1vZGlmaWNhdGlvbnMuICBXaGVuIHRoZSBjdXJy ZW50IFdBTCBpbnNlcnQgcG9zaXRpb24gaGFzbid0CisgKiBhZHZhbmNlZCBzaW5jZSB0aGUgbGFz dCBjYWxsLCB3ZSBlbWl0IHRoaXMgZHVtbXkgcmVjb3JkIHRvIGVuc3VyZSB3ZSBnZXQgYQorICog bmV3LCBkaXN0aW5jdCBMU04uCisgKi8KK1hMb2dSZWNQdHIKK1hMb2dBc3NpZ25MU04odm9pZCkK K3sKKwlpbnQJCQlkdW1teSA9IDA7CisKKwkvKgorCSAqIFJlY29yZHMgb3RoZXIgdGhhbiBYTE9H X1NXSVRDSCBtdXN0IGhhdmUgY29udGVudC4gIFdlIHVzZSBhbiBpbnRlZ2VyIDAKKwkgKiB0byBz YXRpc2Z5IHRoaXMgcmVzdHJpY3Rpb24uCisJICovCisJWExvZ0JlZ2luSW5zZXJ0KCk7CisJWExv Z1NldFJlY29yZEZsYWdzKFhMT0dfTUFSS19VTklNUE9SVEFOVCk7CisJWExvZ1JlZ2lzdGVyRGF0 YSgmZHVtbXksIHNpemVvZihkdW1teSkpOworCXJldHVybiBYTG9nSW5zZXJ0KFJNX1hMT0dfSUQs IFhMT0dfQVNTSUdOX0xTTik7Cit9CisKIC8qCiAgKiBDaGVjayBpZiBhbnkgb2YgdGhlIEdVQyBw YXJhbWV0ZXJzIHRoYXQgYXJlIGNyaXRpY2FsIGZvciBob3Qgc3RhbmRieQogICogaGF2ZSBjaGFu Z2VkLCBhbmQgdXBkYXRlIHRoZSB2YWx1ZSBpbiBwZ19jb250cm9sIGZpbGUgaWYgbmVjZXNzYXJ5 LgpAQCAtODU5Nyw2ICs4NjIyLDEwIEBAIHhsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCkKIAl7CiAJCS8qIG5vdGhpbmcgdG8gZG8gaGVyZSwgaGFuZGxlZCBpbiB4bG9ncmVjb3Zlcnku YyAqLwogCX0KKwllbHNlIGlmIChpbmZvID09IFhMT0dfQVNTSUdOX0xTTikKKwl7CisJCS8qIG5v dGhpbmcgdG8gZG8gaGVyZSwgc2VlIFhMb2dHZXRGYWtlTFNOKCkgKi8KKwl9CiAJZWxzZSBpZiAo aW5mbyA9PSBYTE9HX0ZQSSB8fCBpbmZvID09IFhMT0dfRlBJX0ZPUl9ISU5UKQogCXsKIAkJLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYwppbmRleCBkM2FjYWE2MzYuLmIx MDdlNDRhYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ2luc2Vy dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dpbnNlcnQuYwpAQCAtNTQ3 LDYgKzU0Nyw3MSBAQCBYTG9nU2ltcGxlSW5zZXJ0SW50NjQoUm1ncklkIHJtaWQsIHVpbnQ4IGlu Zm8sIGludDY0IHZhbHVlKQogCXJldHVybiBYTG9nSW5zZXJ0KHJtaWQsIGluZm8pOwogfQogCisv KgorICogWExvZ0dldEZha2VMU04gLSBnZXQgYSBmYWtlIExTTiBmb3IgYW4gaW5kZXggcGFnZSB0 aGF0IGlzbid0IFdBTC1sb2dnZWQuCisgKgorICogU29tZSBpbmRleCBBTXMgKG5idHJlZSwgaGFz aCwgR2lTVCkgdXNlIExTTnMgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgcGFnZQorICogbW9kaWZpY2F0 aW9ucywgYnV0IG5vdCBhbGwgaW5kZXggcGFnZXMgYXJlIFdBTC1sb2dnZWQuICBUaGlzIGZ1bmN0 aW9uCisgKiBwcm92aWRlcyBhIHNlcXVlbmNlIG9mIGZha2UgTFNOcyBmb3IgdGhhdCBwdXJwb3Nl LgorICoKKyAqIFRoZSBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSByZWxhdGlvbidzIHBlcnNpc3Rl bmNlOgorICoKKyAqIC0gRm9yIHRlbXBvcmFyeSByZWxhdGlvbnMsIHdlIHVzZSBhIHNpbXBsZSBi YWNrZW5kLWxvY2FsIGNvdW50ZXIgc2luY2UKKyAqICAgdGVtcG9yYXJ5IHJlbGF0aW9ucyBhcmUg b25seSBhY2Nlc3NpYmxlIHdpdGhpbiBvdXIgc2Vzc2lvbi4KKyAqCisgKiAtIEZvciBwZXJtYW5l bnQgcmVsYXRpb25zIHdoZW4gV0FMLWxvZ2dpbmcgaXMgZGlzYWJsZWQgKGUuZy4sIGR1cmluZyBp bmRleAorICogICBjcmVhdGlvbiB3aXRoIHdhbF9sZXZlbD1taW5pbWFsKSwgd2UgdXNlIHRoZSBj dXJyZW50IFdBTCBpbnNlcnQgcG9zaXRpb24uCisgKiAgIElmIHRoZSBpbnNlcnQgcG9zaXRpb24g aGFzbid0IGFkdmFuY2VkIHNpbmNlIHRoZSBsYXN0IGNhbGwsIHdlIGVtaXQgYQorICogICBkdW1t eSBXQUwgcmVjb3JkIHZpYSBYTG9nQXNzaWduTFNOKCkgdG8gZW5zdXJlIHdlIGdldCBhIGRpc3Rp bmN0IExTTi4KKyAqCisgKiAtIEZvciB1bmxvZ2dlZCByZWxhdGlvbnMsIHdlIHVzZSB0aGUgZ2xv YmFsIGZha2UgTFNOIGNvdW50ZXIgbWFpbnRhaW5lZAorICogICBieSBHZXRGYWtlTFNORm9yVW5s b2dnZWRSZWwoKS4KKyAqLworWExvZ1JlY1B0cgorWExvZ0dldEZha2VMU04oUmVsYXRpb24gcmVs KQoreworCWlmIChyZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VEVNUCkKKwl7CisJCS8qCisJCSAqIFRlbXBvcmFyeSByZWxhdGlvbnMgYXJlIG9ubHkgYWNjZXNz aWJsZSBpbiBvdXIgc2Vzc2lvbiwgc28gYSBzaW1wbGUKKwkJICogYmFja2VuZC1sb2NhbCBjb3Vu dGVyIHdpbGwgZG8uCisJCSAqLworCQlzdGF0aWMgWExvZ1JlY1B0ciBjb3VudGVyID0gRmlyc3RO b3JtYWxVbmxvZ2dlZExTTjsKKworCQlyZXR1cm4gY291bnRlcisrOworCX0KKwllbHNlIGlmIChS ZWxhdGlvbklzUGVybWFuZW50KHJlbCkpCisJeworCQkvKgorCQkgKiBXQUwtbG9nZ2luZyBvbiB0 aGlzIHJlbGF0aW9uIHdpbGwgc3RhcnQgYWZ0ZXIgY29tbWl0LCBzbyBpdHMgTFNOcworCQkgKiBt dXN0IGJlIGRpc3RpbmN0IG51bWJlcnMgc21hbGxlciB0aGFuIHRoZSBMU04gYXQgdGhlIG5leHQg Y29tbWl0LgorCQkgKiBFbWl0IGEgZHVtbXkgV0FMIHJlY29yZCBpZiBpbnNlcnQtTFNOIGhhc24n dCBhZHZhbmNlZCBhZnRlciB0aGUKKwkJICogbGFzdCBjYWxsLgorCQkgKi8KKwkJc3RhdGljIFhM b2dSZWNQdHIgbGFzdGxzbiA9IEludmFsaWRYTG9nUmVjUHRyOworCQlYTG9nUmVjUHRyCWN1cnJs c24gPSBHZXRYTG9nSW5zZXJ0UmVjUHRyKCk7CisKKwkJLyogU2hvdWxkbid0IGJlIGNhbGxlZCBm b3IgV0FMLWxvZ2dpbmcgcmVsYXRpb25zICovCisJCUFzc2VydCghUmVsYXRpb25OZWVkc1dBTChy ZWwpKTsKKworCQkvKiBObyBuZWVkIGZvciBhbiBhY3R1YWwgcmVjb3JkIGlmIHdlIGFscmVhZHkg aGF2ZSBhIGRpc3RpbmN0IExTTiAqLworCQlpZiAoWExvZ1JlY1B0cklzVmFsaWQobGFzdGxzbikg JiYgbGFzdGxzbiA9PSBjdXJybHNuKQorCQkJY3VycmxzbiA9IFhMb2dBc3NpZ25MU04oKTsKKwor CQlsYXN0bHNuID0gY3VycmxzbjsKKwkJcmV0dXJuIGN1cnJsc247CisJfQorCWVsc2UKKwl7CisJ CS8qCisJCSAqIFVubG9nZ2VkIHJlbGF0aW9ucyBhcmUgYWNjZXNzaWJsZSBmcm9tIG90aGVyIGJh Y2tlbmRzLCBhbmQgc3Vydml2ZQorCQkgKiAoY2xlYW4pIHJlc3RhcnRzLiAgR2V0RmFrZUxTTkZv clVubG9nZ2VkUmVsKCkgaGFuZGxlcyB0aGF0IGZvciB1cy4KKwkJICovCisJCUFzc2VydChyZWwt PnJkX3JlbC0+cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpOworCQly ZXR1cm4gR2V0RmFrZUxTTkZvclVubG9nZ2VkUmVsKCk7CisJfQorfQorCiAvKgogICogQXNzZW1i bGUgYSBXQUwgcmVjb3JkIGZyb20gdGhlIHJlZ2lzdGVyZWQgZGF0YSBhbmQgYnVmZmVycyBpbnRv IGFuCiAgKiBYTG9nUmVjRGF0YSBjaGFpbiwgcmVhZHkgZm9yIGluc2VydGlvbiB3aXRoIFhMb2dJ bnNlcnRSZWNvcmQoKS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggNzI0MTQ3 N2NhLi41NTFhMGVlYjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC00NDY5 LDEzICs0NDY5LDEzIEBAIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9u IHJlbG4sIElPT2JqZWN0IGlvX29iamVjdCwKIAkgKiBsb3N0IGFmdGVyIGEgY3Jhc2ggYW55d2F5 LiAgTW9zdCB1bmxvZ2dlZCByZWxhdGlvbiBwYWdlcyBkbyBub3QgYmVhcgogCSAqIExTTnMgc2lu Y2Ugd2UgbmV2ZXIgZW1pdCBXQUwgcmVjb3JkcyBmb3IgdGhlbSwgYW5kIHRoZXJlZm9yZSBmbHVz aGluZwogCSAqIHVwIHRocm91Z2ggdGhlIGJ1ZmZlciBMU04gd291bGQgYmUgdXNlbGVzcywgYnV0 IGhhcm1sZXNzLiAgSG93ZXZlciwKLQkgKiBHaVNUIGluZGV4ZXMgdXNlIExTTnMgaW50ZXJuYWxs eSB0byB0cmFjayBwYWdlLXNwbGl0cywgYW5kIHRoZXJlZm9yZQotCSAqIHVubG9nZ2VkIEdpU1Qg cGFnZXMgYmVhciAiZmFrZSIgTFNOcyBnZW5lcmF0ZWQgYnkKLQkgKiBHZXRGYWtlTFNORm9yVW5s b2dnZWRSZWwuICBJdCBpcyB1bmxpa2VseSBidXQgcG9zc2libGUgdGhhdCB0aGUgZmFrZQotCSAq IExTTiBjb3VudGVyIGNvdWxkIGFkdmFuY2UgcGFzdCB0aGUgV0FMIGluc2VydGlvbiBwb2ludDsg YW5kIGlmIGl0IGRpZAotCSAqIGhhcHBlbiwgYXR0ZW1wdGluZyB0byBmbHVzaCBXQUwgdGhyb3Vn aCB0aGF0IGxvY2F0aW9uIHdvdWxkIGZhaWwsIHdpdGgKLQkgKiBkaXNhc3Ryb3VzIHN5c3RlbS13 aWRlIGNvbnNlcXVlbmNlcy4gIFRvIG1ha2Ugc3VyZSB0aGF0IGNhbid0IGhhcHBlbiwKLQkgKiBz a2lwIHRoZSBmbHVzaCBpZiB0aGUgYnVmZmVyIGlzbid0IHBlcm1hbmVudC4KKwkgKiBzb21lIGlu ZGV4IEFNcyAobmJ0cmVlLCBoYXNoLCBHaVNUKSB1c2UgTFNOcyBpbnRlcm5hbGx5IHRvIGRldGVj dAorCSAqIGNvbmN1cnJlbnQgcGFnZSBtb2RpZmljYXRpb25zLCBhbmQgdGhlcmVmb3JlIHVubG9n Z2VkIGluZGV4IHBhZ2VzIGJlYXIKKwkgKiAiZmFrZSIgTFNOcyBnZW5lcmF0ZWQgYnkgWExvZ0dl dEZha2VMU04uICBJdCBpcyB1bmxpa2VseSBidXQgcG9zc2libGUKKwkgKiB0aGF0IHRoZSBmYWtl IExTTiBjb3VudGVyIGNvdWxkIGFkdmFuY2UgcGFzdCB0aGUgV0FMIGluc2VydGlvbiBwb2ludDsK KwkgKiBhbmQgaWYgaXQgZGlkIGhhcHBlbiwgYXR0ZW1wdGluZyB0byBmbHVzaCBXQUwgdGhyb3Vn aCB0aGF0IGxvY2F0aW9uCisJICogd291bGQgZmFpbCwgd2l0aCBkaXNhc3Ryb3VzIHN5c3RlbS13 aWRlIGNvbnNlcXVlbmNlcy4gIFRvIG1ha2Ugc3VyZQorCSAqIHRoYXQgY2FuJ3QgaGFwcGVuLCBz a2lwIHRoZSBmbHVzaCBpZiB0aGUgYnVmZmVyIGlzbid0IHBlcm1hbmVudC4KIAkgKi8KIAlpZiAo YnVmX3N0YXRlICYgQk1fUEVSTUFORU5UKQogCQlYTG9nRmx1c2gocmVjcHRyKTsKLS0gCjIuNTEu MAoK --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0009-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v10-0009-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdzb3 RnJvbSAxMDk4OGQwZmRiMDIwMjVjYWZjZDZiY2EwZTYxMmE2MzFkZDVjMjY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTAgMDkvMTFdIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlN RS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRv IHN0YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBp biBwcm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRl CmJlZm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2gg dGhlIGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxh dGVyIGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCBy ZWFkIHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBh bmQgaW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBj b25jdXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1 ZXN0IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBp dCBlbmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZl Y3RpdmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcg dGhlIGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNv cmQKdGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwg V2FpdFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoK SW4gcmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFy dGluZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tl bmQgaGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3Jp cHRvcuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxk IGJlIGJyaWVmIGFuZCB1bmNvbW1vbi4KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDQ5 MSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDMyNSBpbnNlcnRpb25zKCspLCAx NjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggYTQwYWRmNmIyLi4xMzU4ZmM3 ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0cnVjdCBSZWFkQnVm ZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2CQluYmxvY2tzOwogCWludDE2CQlu YmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQZ0Fpb1dhaXRSZWYgaW9fd3JlZjsK IAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwppbmRleCA0YThmNDBkYWEuLmI4ZjA4YzFkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMKQEAgLTE2OSw2ICsxNjksMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclNvcnRBcnJheQog CVNNZ3JSZWxhdGlvbiBzcmVsOwogfSBTTWdyU29ydEFycmF5OwogCisKKy8qCisgKiBJbiBBc3lu Y1JlYWRCdWZmZXJzKCksIHdoZW4gcHJlcGFyaW5nIGEgYnVmZmVyIGZvciByZWFkaW5nIGFuZCBz ZXR0aW5nCisgKiBCTV9JT19JTl9QUk9HUkVTUywgdGhlIGJ1ZmZlciBtYXkgYWxyZWFkeSBoYXZl IEkvTyBpbiBwcm9ncmVzcyBvciBtYXkKKyAqIGFscmVhZHkgY29udGFpbiB0aGUgZGVzaXJlZCBi bG9jay4gQXN5bmNSZWFkQnVmZmVycygpIG11c3QgZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4gdGhl c2UgY2FzZXMgKGFuZCB0aGUgY2FzZSB3aGVyZSBpdCBzaG91bGQgaW5pdGlhdGUgSS9PKSBzbyBp dCBjYW4KKyAqIG1hcmsgYW4gaW4tcHJvZ3Jlc3MgYnVmZmVyIGFzIGZvcmVpZ24gSS9PIHJhdGhl ciB0aGFuIHdhaXRpbmcgb24gaXQuCisgKi8KK3R5cGVkZWYgZW51bSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXMKK3sKKwlSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUsCisJUkVBRF9CVUZGRVJfSU5f UFJPR1JFU1MsCisJUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPLAorfSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXM7CisKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJCXplcm9fZGFtYWdlZF9wYWdl cyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2VzID0gMTAwOwpAQCAtMTYxOCw0 NSArMTYzMyw2IEBAIENoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24oUmVhZEJ1ZmZlcnNPcGVyYXRp b24gKm9wZXJhdGlvbiwgYm9vbCBpc19jb21wbGV0ZSkKICNlbmRpZgogfQogCi0vKiBoZWxwZXIg Zm9yIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCB0byBhdm9pZCByZXBldGl0aW9uICovCi1zdGF0 aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2FuU3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwg Ym9vbCBub3dhaXQpCi17Ci0JaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKLQkJcmV0dXJuIFN0 YXJ0TG9jYWxCdWZmZXJJTyhHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpLAot CQkJCQkJCQkgIHRydWUsIG5vd2FpdCk7Ci0JZWxzZQotCQlyZXR1cm4gU3RhcnRCdWZmZXJJTyhH ZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dhaXQpOwotfQotCi0vKgot ICogSGVscGVyIGZvciBBc3luY1JlYWRCdWZmZXJzIHRoYXQgdHJpZXMgdG8gZ2V0IHRoZSBidWZm ZXIgcmVhZHkgZm9yIElPLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2Fu U3RhcnRJTyhCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKLXsKLQkvKgotCSAqIElmIHRoaXMg YmFja2VuZCBjdXJyZW50bHkgaGFzIHN0YWdlZCBJTywgd2UgbmVlZCB0byBzdWJtaXQgdGhlIHBl bmRpbmcKLQkgKiBJTyBiZWZvcmUgd2FpdGluZyBmb3IgdGhlIHJpZ2h0IHRvIGlzc3VlIElPLCB0 byBhdm9pZCB0aGUgcG90ZW50aWFsIGZvcgotCSAqIGRlYWRsb2NrcyAoYW5kLCBtb3JlIGNvbW1v bmx5LCB1bm5lY2Vzc2FyeSBkZWxheXMgZm9yIG90aGVyIGJhY2tlbmRzKS4KLQkgKi8KLQlpZiAo IW5vd2FpdCAmJiBwZ2Fpb19oYXZlX3N0YWdlZCgpKQotCXsKLQkJaWYgKFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoYnVmZmVyLCB0cnVlKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8qCi0JCSAq IFVuZm9ydHVuYXRlbHkgU3RhcnRCdWZmZXJJTygpIHJldHVybmluZyBmYWxzZSBkb2Vzbid0IGFs bG93IHRvCi0JCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGJ1ZmZlciBhbHJlYWR5IGJlaW5n IHZhbGlkIGFuZCBJTyBhbHJlYWR5Ci0JCSAqIGJlaW5nIGluIHByb2dyZXNzLiBTaW5jZSBJTyBh bHJlYWR5IGJlaW5nIGluIHByb2dyZXNzIGlzIHF1aXRlCi0JCSAqIHJhcmUsIHRoaXMgYXBwcm9h Y2ggc2VlbXMgZmluZS4KLQkJICovCi0JCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKLQl9Ci0KLQly ZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIsIG5vd2FpdCk7Ci19Ci0KIC8q CiAgKiBXZSB0cmFjayB2YXJpb3VzIHN0YXRzIHJlbGF0ZWQgdG8gYnVmZmVyIGhpdHMuIEJlY2F1 c2UgdGhpcyBpcyBkb25lIGluIGEKICAqIGZldyBzZXBhcmF0ZSBwbGFjZXMsIHRoaXMgaGVscGVy IGV4aXN0cyBmb3IgY29udmVuaWVuY2UuCkBAIC0xODA2LDcgKzE3ODIsNyBAQCBXYWl0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCSAqCiAJCQkgKiB3ZSBm aXJzdCBjaGVjayBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIElPIGlzIGNvbXBsZXRlLgogCQkJICov Ci0JCQlpZiAoYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOICYmCisJ CQlpZiAoKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyB8fCBhaW9fcmV0LT5yZXN1bHQuc3RhdHVzID09 IFBHQUlPX1JTX1VOS05PV04pICYmCiAJCQkJIXBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0 aW9uLT5pb193cmVmKSkKIAkJCXsKIAkJCQlpbnN0cl90aW1lCWlvX3N0YXJ0ID0gcGdzdGF0X3By ZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOwpAQCAtMTgyNSwxMSArMTgwMSwzMyBAQCBX YWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCQlBc3Nl cnQocGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlvX3dyZWYpKTsKIAkJCX0KIAot CQkJLyoKLQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBDaGVjayB0aGUg cmVzdWx0cy4gVGhpcwotCQkJICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVy ZSB3ZXJlIGFueS4KLQkJCSAqLwotCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KG9wZXJhdGlv bik7CisJCQlpZiAodW5saWtlbHkob3BlcmF0aW9uLT5mb3JlaWduX2lvKSkKKwkJCXsKKwkJCQlC dWZmZXIJCWJ1ZmZlciA9IG9wZXJhdGlvbi0+YnVmZmVyc1tvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZV07CisJCQkJQnVmZmVyRGVzYyAqZGVzYyA9IEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSA/CisJCQkJ CUdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSkgOgorCQkJCQlHZXRCdWZmZXJE ZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCQkJCXVpbnQzMgkJYnVmX3N0YXRlID0gcGdfYXRvbWlj X3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7CisKKwkJCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQp CisJCQkJeworCQkJCQlvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSArPSAxOworCQkJCQlBc3NlcnQo b3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgPD0gb3BlcmF0aW9uLT5uYmxvY2tzKTsKKworCQkJCQlQ cm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+c3RyYXRlZ3ksCisJCQkJCQkJCQkgb3BlcmF0aW9u LT5yZWwsIG9wZXJhdGlvbi0+cGVyc2lzdGVuY2UsCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5zbWdy LCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5ibG9ja251bSArIG9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJl c3VsdHMuIFRoaXMKKwkJCQkgKiBpbmNsdWRlcyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJl IHdlcmUgYW55LgorCQkJCSAqLworCQkJCVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRp b24pOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTE4NjAsNiArMTg1OCwxNTkgQEAgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJLyogTkI6IFJFQURfRE9O RSB0cmFjZXBvaW50IHdhcyBhbHJlYWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sg Ki8KIH0KIAorLyoKKyAqIExvY2FsIHZlcnNpb24gb2YgUHJlcGFyZU5ld1JlYWRCdWZmZXJJTygp LiBIZXJlIGluc3RlYWQgb2YgbG9jYWxidWYuYyB0bworICogYXZvaWQgYW4gZXh0ZXJuYWwgZnVu Y3Rpb24gY2FsbC4KKyAqLworc3RhdGljIFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworUHJlcGFy ZU5ld0xvY2FsUmVhZEJ1ZmZlcklPKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJ CQkJCQkJQnVmZmVyIGJ1ZmZlcikKK3sKKwlCdWZmZXJEZXNjICpkZXNjID0gR2V0TG9jYWxCdWZm ZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwl1aW50NjQJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21p Y19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOworCisJLyogQWxyZWFkeSB2YWxpZCwgbm8gd29yayB0 byBkbyAqLworCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwl7CisJCXBnYWlvX3dyZWZfY2xl YXIoJm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJFQURZX0RP TkU7CisJfQorCisJcGdhaW9fc3VibWl0X3N0YWdlZCgpOworCisJaWYgKHBnYWlvX3dyZWZfdmFs aWQoJmRlc2MtPmlvX3dyZWYpKQorCXsKKwkJb3BlcmF0aW9uLT5pb193cmVmID0gZGVzYy0+aW9f d3JlZjsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJcmV0dXJuIFJFQURfQlVG RkVSX0lOX1BST0dSRVNTOworCX0KKworCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU87 Cit9CisKKy8qCisgKiBUcnkgdG8gc3RhcnQgSU8gb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiBhIG5l dyBydW4gb2YgYmxvY2tzLiBJZiBBSU8gaXMgaW4KKyAqIHByb2dyZXNzLCBiZSBpdCBpbiB0aGlz IGJhY2tlbmQgb3IgYW5vdGhlciBiYWNrZW5kLCB3ZSBqdXN0IGFzc29jaWF0ZSB0aGUKKyAqIHdh aXQgcmVmZXJlbmNlIHdpdGggdGhlIG9wZXJhdGlvbiBhbmQgd2FpdCBpbiBXYWl0UmVhZEJ1ZmZl cnMoKS4gVGhpcyB0dXJucworICogb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2Ug aW4gdHdvIHdvcmtsb2FkczoKKyAqCisgKiAxKSBBIHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJl YWQgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGltZXMgd2l0aGluIHRoZQorICogICAgcmVhZGFo ZWFkIGRpc3RhbmNlLiBUaGlzIGNhbiBoYXBwZW4gZS5nLiBmb3IgdGhlIHRhYmxlIGFjY2Vzc2Vz IG9mIGFuCisgKiAgICBpbmRleCBzY2FuLgorICoKKyAqIDIpIENvbmN1cnJlbnQgc2NhbnMgYnkg bXVsdGlwbGUgYmFja2VuZHMgb24gdGhlIHNhbWUgcmVsYXRpb24uCisgKgorICogSWYgd2Ugd2Vy ZSB0byBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3Qg YmUgYWJsZQorICogdG8ga2VlcCBlbm91Z2ggSS9PIGluIGZsaWdodC4KKyAqCisgKiBJZiB3ZSBk byBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9PIGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAx LWJsb2NrCisgKiBSZWFkQnVmZmVyc09wZXJhdGlvbiB0aGF0IFdhaXRSZWFkQnVmZmVycyB0aGVu IGNhbiB3YWl0IG9uLgorICoKKyAqIEl0J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQg aGFzIHN0YXJ0ZWQgSU8gb24gdGhlIGJ1ZmZlciBidXQgbm90IHlldAorICogc2V0IGl0cyB3YWl0 IHJlZmVyZW5jZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gd2FpdCBm b3IKKyAqIGVpdGhlciB0aGUgd2FpdCByZWZlcmVuY2UgdG8gYmUgdmFsaWQgb3IgdGhlIElPIHRv IGJlIGRvbmUuCisgKi8KK3N0YXRpYyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVO ZXdSZWFkQnVmZmVySU8oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKKwkJCQkJICAg QnVmZmVyIGJ1ZmZlcikKK3sKKwl1aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNj OworCisJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJcmV0dXJuIFByZXBhcmVOZXdMb2Nh bFJlYWRCdWZmZXJJTyhvcGVyYXRpb24sIGJ1ZmZlcik7CisKKwlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVm ZmVyIC0gMSk7CisKKwlmb3IgKDs7KQorCXsKKwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNj KTsKKworCQkvKiBBbHJlYWR5IHZhbGlkLCBubyB3b3JrIHRvIGRvICovCisJCWlmIChidWZfc3Rh dGUgJiBCTV9WQUxJRCkKKwkJeworCQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJcGdhaW9fd3Jl Zl9jbGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKKwkJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJF QURZX0RPTkU7CisJCX0KKworCQlpZiAoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpCisJ CXsKKwkJCS8qIEpvaW4gZXhpc3RpbmcgcmVhZCAqLworCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQo JmRlc2MtPmlvX3dyZWYpKQorCQkJeworCQkJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlv X3dyZWY7CisJCQkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQkJcmV0dXJuIFJFQURfQlVGRkVSX0lOX1BST0dSRVNTOworCQkJfQorCisJ CQkvKgorCQkJICogSWYgdGhlIHdhaXQgcmVmIGlzIG5vdCB2YWxpZCBidXQgdGhlIElPIGlzIGlu IHByb2dyZXNzLCBzb21lb25lCisJCQkgKiBlbHNlIHN0YXJ0ZWQgSU8gYnV0IGhhc24ndCBzZXQg dGhlIHdhaXQgcmVmIHlldC4gV2UgaGF2ZSBubworCQkJICogY2hvaWNlIGJ1dCB0byB3YWl0IHVu dGlsIHRoZSB3YWl0IHJlZiBpcyBzZXQgb3IgdGhlIElPCisJCQkgKiBjb21wbGV0ZXMuCisJCQkg Ki8KKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKKwkJ CVdhaXRJTyhkZXNjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTm8gSU8gaW4g cHJvZ3Jlc3MgYW5kIG5vdCBhbHJlYWR5IHZhbGlkOyBXZSB3aWxsIHN0YXJ0IElPLiBJdCdzCisJ CSAqIHBvc3NpYmxlIHRoYXQgdGhlIElPIHdhcyBpbiBwcm9ncmVzcyBhbmQgbmV2ZXIgYmVjYW1l IHZhbGlkIGJlY2F1c2UKKwkJICogdGhlIElPIGVycm9yZWQgb3V0LiBXZSdsbCBkbyB0aGUgSU8g b3Vyc2VsdmVzLgorCQkgKi8KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2MsIGJ1Zl9zdGF0ZSwgQk1f SU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVtZW1iZXJCdWZmZXJJTyhD dXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkJCSAgQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZl cihkZXNjKSk7CisKKwkJcmV0dXJuIFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTzsKKwl9Cit9CisK KworLyoKKyAqIFdoZW4gYnVpbGRpbmcgYSBuZXcgSU8gZnJvbSBtdWx0aXBsZSBidWZmZXJzLCB3 ZSB3b24ndCBpbmNsdWRlIGJ1ZmZlcnMKKyAqIHRoYXQgYXJlIGFscmVhZHkgdmFsaWQgb3IgYWxy ZWFkeSBpbiBwcm9ncmVzcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQorICogdXNlZCBm b3IgYWRkaXRpb25hbCBhZGphY2VudCBidWZmZXJzIGZvbGxvd2luZyB0aGUgaGVhZCBidWZmZXIg aW4gYSBuZXcgSU8uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIHN1Y2Nl c3NmdWxseSBwcmVwYXJlZCBmb3IgSU8gYW5kIGZhbHNlIGlmIGl0CisgKiBpcyByZWplY3RlZCBh bmQgdGhlIHJlYWQgSU8gc2hvdWxkIG5vdCBpbmNsdWRlIHRoaXMgYnVmZmVyLgorKi8KK3N0YXRp YyBib29sCitQcmVwYXJlQWRkaXRpb25hbFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlcikKK3sKKwl1 aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNjOworCisJaWYgKEJ1ZmZlcklzTG9j YWwoYnVmZmVyKSkKKwl7CisJCWRlc2MgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZl ciAtIDEpOworCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0YXRlKTsK KwkJLyogTG9jYWwgYnVmZmVycyBkb24ndCB1c2UgQk1fSU9fSU5fUFJPR1JFU1MgKi8KKwkJaWYg KGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEIHx8IHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlvX3dyZWYp KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1 ZmZlciAtIDEpOworCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGRlc2MpOworCQlpZiAoYnVmX3N0 YXRlICYgKEJNX1ZBTElEIHwgQk1fSU9fSU5fUFJPR1JFU1MpKQorCQl7CisJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2Ms IGJ1Zl9zdGF0ZSwgQk1fSU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVt ZW1iZXJCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIEluaXRpYXRlIElPIGZvciB0aGUgUmVhZEJ1ZmZlcnNPcGVy YXRpb24KICAqCkBAIC0xODkzLDcgKzIwNDQsNzUgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJdm9pZAkg ICAqaW9fcGFnZXNbTUFYX0lPX0NPTUJJTkVfTElNSVRdOwogCUlPQ29udGV4dAlpb19jb250ZXh0 OwogCUlPT2JqZWN0CWlvX29iamVjdDsKLQlib29sCQlkaWRfc3RhcnRfaW87CisJaW5zdHJfdGlt ZQlpb19zdGFydDsKKwlQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMgc3RhdHVzOworCisJLyoKKwkg KiBXZSBtdXN0IGdldCBhbiBJTyBoYW5kbGUgYmVmb3JlIFN0YXJ0TmV3QnVmZmVyUmVhZElPKCks IGFzCisJICogcGdhaW9faW9fYWNxdWlyZSgpIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3 YW50IGFmdGVyIHNldHRpbmcKKwkgKiBJT19JTl9QUk9HUkVTUy4gSWYgd2UgZG9uJ3QgbmVlZCB0 byBkbyB0aGUgSU8sIHdlJ2xsIHJlbGVhc2UgdGhlCisJICogaGFuZGxlLgorCSAqCisJICogSWYg d2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdldCBhIGhhbmRsZSwgc3VibWl0 CisJICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQgb3RoZXIgYmFja2VuZHMgZG9u J3QgbmVlZCB0byB3YWl0LgorCSAqIFRoZXJlIHdvdWxkbid0IGJlIGEgZGVhZGxvY2sgcmlzaywg YXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KKwkgKiB3YWl0IGZvciBhbHJlYWR5 IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFkZGl0aW9uYWwgbG9ja3MsCisJ ICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxlIHdhaXRzLgorCSAqCisJICog QSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQgYWxsb3cgdXMgdG8gbWVhc3Vy ZSB0aGUgdGltZSBpbgorCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3aXRob3V0IGNhdXNpbmcgdW5k dWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKKwkgKiBub24tYmxvY2tpbmcsIGNhc2Uu ICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFzdHJ1Y3R1cmUKKwkgKiBkb2Vz bid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRzIHRoYXQgYW4gb3BlcmF0aW9u IGNhbid0CisJICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9ucyBiKSBkb2Vzbid0IGhhdmUg YW4gQVBJIHRvIHJlcG9ydAorCSAqICJhY2N1bXVsYXRlZCIgdGltZS4KKwkgKi8KKwlpb2ggPSBw Z2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19y ZXR1cm4pOworCWlmICh1bmxpa2VseSghaW9oKSkKKwl7CisJCXBnYWlvX3N1Ym1pdF9zdGFnZWQo KTsKKwkJaW9oID0gcGdhaW9faW9fYWNxdWlyZShDdXJyZW50UmVzb3VyY2VPd25lciwgJm9wZXJh dGlvbi0+aW9fcmV0dXJuKTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBmYWxzZTsK KworCS8qIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBi dWZmZXIgKi8KKwlpZiAoKHN0YXR1cyA9IFByZXBhcmVOZXdSZWFkQnVmZmVySU8ob3BlcmF0aW9u LCBidWZmZXJzW25ibG9ja3NfZG9uZV0pKSA8CisJCVJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTykK Kwl7CisJCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwor CQlpZiAoc3RhdHVzID09IFJFQURfQlVGRkVSX0FMUkVBRFlfRE9ORSkKKwkJeworCQkJLyoKKwkJ CSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBibG9jaywgd2UncmUg ZG9uZS4KKwkJCSAqCisJCQkgKiBXaGVuIElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUg aXMgdXBkYXRlZCBpbgorCQkJICogUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KCksIGJ1dCB0aGF0 IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKKwkJCSAqIG5lY2Vzc2FyeS4gVGh1cyB1cGRhdGUg aGVyZS4KKwkJCSAqLworCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKKwkJCUFzc2Vy dChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkv KgorCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2gKKwkJCSAqIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3Mg aW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhlCisJCQkgKiBvdGhlciBiYWNrZW5kIHdpbGwgdHJh Y2sgdGhpcyBhcyBhICdyZWFkJy4KKwkJCSAqLworCQkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRp b24tPnN0cmF0ZWd5LAorCQkJCQkJCSBvcGVyYXRpb24tPnJlbCwgb3BlcmF0aW9uLT5wZXJzaXN0 ZW5jZSwKKwkJCQkJCQkgb3BlcmF0aW9uLT5zbWdyLCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJ CQkJIG9wZXJhdGlvbi0+YmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBUaGUgSU8gaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyAq LworCQlBc3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX0lOX1BST0dSRVNTKTsKKwkJQ2hlY2tS ZWFkQnVmZmVyc09wZXJhdGlvbihvcGVyYXRpb24sIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyogV2UgY2FuIHJlYWQgaW4gYXQgbGVhc3QgdGhlIGhlYWQgYnVmZmVyIC4gKi8KKwlB c3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTyk7CiAKIAkvKgogCSAqIFdo ZW4gdGhpcyBJTyBpcyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LCBlaXRoZXIgYmVjYXVzZSB0aGUg Y2FsbGVyIHdpbGwKQEAgLTE5NDQsMTM4ICsyMTYzLDc0IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCSAq LwogCXBnc3RhdF9wcmVwYXJlX3JlcG9ydF9jaGVja3N1bV9mYWlsdXJlKG9wZXJhdGlvbi0+c21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkKTsKIAotCS8qCi0JICogR2V0IElPIGhhbmRs ZSBiZWZvcmUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKCksIGFzIHBnYWlvX2lvX2FjcXVpcmUoKQot CSAqIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3YW50IGFmdGVyIHNldHRpbmcgSU9fSU5f UFJPR1JFU1MuCi0JICoKLQkgKiBJZiB3ZSBuZWVkIHRvIHdhaXQgZm9yIElPIGJlZm9yZSB3ZSBj YW4gZ2V0IGEgaGFuZGxlLCBzdWJtaXQKLQkgKiBhbHJlYWR5LXN0YWdlZCBJTyBmaXJzdCwgc28g dGhhdCBvdGhlciBiYWNrZW5kcyBkb24ndCBuZWVkIHRvIHdhaXQuCi0JICogVGhlcmUgd291bGRu J3QgYmUgYSBkZWFkbG9jayByaXNrLCBhcyBwZ2Fpb19pb19hY3F1aXJlKCkganVzdCBuZWVkcyB0 bwotCSAqIHdhaXQgZm9yIGFscmVhZHkgc3VibWl0dGVkIElPLCB3aGljaCBkb2Vzbid0IHJlcXVp cmUgYWRkaXRpb25hbCBsb2NrcywKLQkgKiBidXQgaXQgY291bGQgc3RpbGwgY2F1c2UgdW5kZXNp cmFibGUgd2FpdHMuCi0JICoKLQkgKiBBIHNlY29uZGFyeSBiZW5lZml0IGlzIHRoYXQgdGhpcyB3 b3VsZCBhbGxvdyB1cyB0byBtZWFzdXJlIHRoZSB0aW1lIGluCi0JICogcGdhaW9faW9fYWNxdWly ZSgpIHdpdGhvdXQgY2F1c2luZyB1bmR1ZSB0aW1lciBvdmVyaGVhZCBpbiB0aGUgY29tbW9uLAot CSAqIG5vbi1ibG9ja2luZywgY2FzZS4gIEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgcGdzdGF0cyBp bmZyYXN0cnVjdHVyZQotCSAqIGRvZXNuJ3QgcmVhbGx5IGFsbG93IHRoYXQsIGFzIGl0IGEpIGFz c2VydHMgdGhhdCBhbiBvcGVyYXRpb24gY2FuJ3QKLQkgKiBoYXZlIHRpbWUgd2l0aG91dCBvcGVy YXRpb25zIGIpIGRvZXNuJ3QgaGF2ZSBhbiBBUEkgdG8gcmVwb3J0Ci0JICogImFjY3VtdWxhdGVk IiB0aW1lLgotCSAqLwotCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmVfbmIoQ3VycmVudFJlc291cmNl T3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JaWYgKHVubGlrZWx5KCFpb2gpKQotCXsK LQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCi0JCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmUoQ3Vy cmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JfQorCUFzc2VydChp b19idWZmZXJzWzBdID09IGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7CisJaW9fcGFnZXNbMF0gPSBC dWZmZXJHZXRCbG9jayhidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX2J1ZmZlcnNfbGVuID0g MTsKIAogCS8qCi0JICogQ2hlY2sgaWYgd2UgY2FuIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCB0by1i ZS1yZWFkIGJ1ZmZlci4KLQkgKgotCSAqIElmIGFuIEkvTyBpcyBhbHJlYWR5IGluIHByb2dyZXNz IGluIGFub3RoZXIgYmFja2VuZCwgd2Ugd2FudCB0byB3YWl0Ci0JICogZm9yIHRoZSBvdXRjb21l OiBlaXRoZXIgZG9uZSwgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdpbGwKLQkgKiBy ZXRyeS4KKwkgKiBIb3cgbWFueSBuZWlnaGJvcmluZy1vbi1kaXNrIGJsb2NrcyBjYW4gd2Ugc2Nh dHRlci1yZWFkIGludG8gb3RoZXIKKwkgKiBidWZmZXJzIGF0IHRoZSBzYW1lIHRpbWU/ICBJbiB0 aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FpdCBpZiB3ZSBzZWUgYW4gSS9PCisJICogYWxyZWFkeSBpbiBw cm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJNX0lPX0lOX1BST0dSRVNTIGZvciB0aGUgaGVhZAor CSAqIGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0IG9uIHdpdGggdGhhdCBJL08gYXMgc29vbiBhcyBw b3NzaWJsZS4KIAkgKi8KLQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW25ibG9j a3NfZG9uZV0sIGZhbHNlKSkKKwlmb3IgKGludCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9w ZXJhdGlvbi0+bmJsb2NrczsgaSsrKQogCXsKLQkJLyoKLQkJICogU29tZW9uZSBlbHNlIGhhcyBh bHJlYWR5IGNvbXBsZXRlZCB0aGlzIGJsb2NrLCB3ZSdyZSBkb25lLgotCQkgKgotCQkgKiBXaGVu IElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUgaXMgdXBkYXRlZCBpbgotCQkgKiBQcm9j ZXNzUmVhZEJ1ZmZlcnNSZXN1bHQoKSwgYnV0IHRoYXQgaXMgbm90IGNhbGxlZCBpZiBubyBJTyBp cwotCQkgKiBuZWNlc3NhcnkuIFRodXMgdXBkYXRlIGhlcmUuCi0JCSAqLwotCQlvcGVyYXRpb24t Pm5ibG9ja3NfZG9uZSArPSAxOwotCQkqbmJsb2Nrc19wcm9ncmVzcyA9IDE7CisJCWlmICghUHJl cGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVyKGJ1ZmZlcnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11 c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQorCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmZmVyc1tpXSkgLSAxKTsKKwkJQXNzZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09 IGJ1ZmZlcnNbaV0pOwogCi0JCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKLQkJcGdhaW9fd3JlZl9j bGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKLQkJZGlkX3N0YXJ0X2lvID0gZmFsc2U7Ci0KLQkJ LyoKLQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2ggaXQKLQkJICogbXVzdCBoYXZlIHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBp biBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3RoZXIKLQkJICogYmFja2VuZCB3aWxsIHRyYWNr IHRoaXMgYXMgYSAncmVhZCcuCi0JCSAqLwotCQlQcm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+ c3RyYXRlZ3ksIG9wZXJhdGlvbi0+cmVsLCBwZXJzaXN0ZW5jZSwKLQkJCQkJCSBvcGVyYXRpb24t PnNtZ3IsIGZvcmtudW0sCi0JCQkJCQkgYmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSk7CisJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0QmxvY2soYnVmZmVy c1tpXSk7CiAJfQorCisJLyogZ2V0IGEgcmVmZXJlbmNlIHRvIHdhaXQgZm9yIGluIFdhaXRSZWFk QnVmZmVycygpICovCisJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3BlcmF0aW9uLT5pb193cmVm KTsKKworCS8qIHByb3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0aGUgY29tcGxldGlvbiBj YWxsYmFja3MgKi8KKwlwZ2Fpb19pb19zZXRfaGFuZGxlX2RhdGFfMzIoaW9oLCAodWludDMyICop IGlvX2J1ZmZlcnMsIGlvX2J1ZmZlcnNfbGVuKTsKKworCXBnYWlvX2lvX3JlZ2lzdGVyX2NhbGxi YWNrcyhpb2gsCisJCQkJCQkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAgPwor CQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxfQlVGRkVSX1JFQURWIDoKKwkJCQkJCQkJUEdBSU9fSENC X1NIQVJFRF9CVUZGRVJfUkVBRFYsCisJCQkJCQkJCWZsYWdzKTsKKworCXBnYWlvX2lvX3NldF9m bGFnKGlvaCwgaW9oX2ZsYWdzKTsKKworCS8qIC0tLQorCSogRXZlbiB0aG91Z2ggd2UncmUgdHJ5 aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5LCB0cmFjayB0aGUgdGltZQorCSogaW4gc21n cnN0YXJ0cmVhZHYoKToKKwkqIC0gaWYgaW9fbWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdp bGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCisJKiAgIGltbWVkaWF0ZWx5CisJKiAtIHRoZSBpbyBt ZXRob2QgbWlnaHQgbm90IHN1cHBvcnQgdGhlIElPIChlLmcuIHdvcmtlciBJTyBmb3IgYSB0ZW1w CisJKiAgIHRhYmxlKQorCSogLS0tCisJKi8KKwlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lv X3RpbWUodHJhY2tfaW9fdGltaW5nKTsKKwlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+ c21nciwgZm9ya251bSwKKwkJCQkgICBibG9ja251bSArIG5ibG9ja3NfZG9uZSwKKwkJCQkgICBp b19wYWdlcywgaW9fYnVmZmVyc19sZW4pOworCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29i amVjdCwgaW9fY29udGV4dCwgSU9PUF9SRUFELAorCQkJCQkJCWlvX3N0YXJ0LCAxLCBpb19idWZm ZXJzX2xlbiAqIEJMQ0tTWik7CisKKwlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VEVNUCkKKwkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47 CiAJZWxzZQotCXsKLQkJaW5zdHJfdGltZQlpb19zdGFydDsKKwkJcGdCdWZmZXJVc2FnZS5zaGFy ZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qIFdlIGZvdW5kIGEgYnVmZmVy IHRoYXQgd2UgbmVlZCB0byByZWFkIGluLiAqLwotCQlBc3NlcnQoaW9fYnVmZmVyc1swXSA9PSBi dWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19wYWdlc1swXSA9IEJ1ZmZlckdldEJsb2NrKGJ1 ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX2J1ZmZlcnNfbGVuID0gMTsKKwkvKgorCSAqIFRy YWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0 LiBPdGhlcndpc2UKKwkgKiB3ZSBjb3VsZCBlbmQgdXAgaXNzdWluZyBhIGxvdCBvZiBJTyBpbiBh IHNob3J0IHRpbWVzcGFuLCBkZXNwaXRlIGEgbG93CisJICogY29zdCBsaW1pdC4KKwkgKi8KKwlp ZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBh Z2VNaXNzICogaW9fYnVmZmVyc19sZW47CiAKLQkJLyoKLQkJICogSG93IG1hbnkgbmVpZ2hib3Jp bmctb24tZGlzayBibG9ja3MgY2FuIHdlIHNjYXR0ZXItcmVhZCBpbnRvIG90aGVyCi0JCSAqIGJ1 ZmZlcnMgYXQgdGhlIHNhbWUgdGltZT8gIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YWl0IGlmIHdl IHNlZSBhbgotCQkgKiBJL08gYWxyZWFkeSBpbiBwcm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJN X0lPX0lOX1BST0dSRVNTIGZvciB0aGUKLQkJICogaGVhZCBibG9jaywgc28gd2Ugc2hvdWxkIGdl dCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNvb24gYXMgcG9zc2libGUuCi0JCSAqLwotCQlmb3IgKGlu dCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9wZXJhdGlvbi0+bmJsb2NrczsgaSsrKQotCQl7 Ci0JCQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW2ldLCB0cnVlKSkKLQkJCQli cmVhazsKLQkJCS8qIE11c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KLQkJCUFz c2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2kgLSAxXSkgPT0KLQkJCQkgICBCdWZm ZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2ldKSAtIDEpOwotCQkJQXNzZXJ0KGlvX2J1ZmZlcnNb aW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0pOworCSpuYmxvY2tzX3Byb2dyZXNzID0gaW9f YnVmZmVyc19sZW47CiAKLQkJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0 QmxvY2soYnVmZmVyc1tpXSk7Ci0JCX0KLQotCQkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBm b3IgaW4gV2FpdFJlYWRCdWZmZXJzKCkgKi8KLQkJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3Bl cmF0aW9uLT5pb193cmVmKTsKLQotCQkvKiBwcm92aWRlIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8g dGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzICovCi0JCXBnYWlvX2lvX3NldF9oYW5kbGVfZGF0YV8z Mihpb2gsICh1aW50MzIgKikgaW9fYnVmZmVycywgaW9fYnVmZmVyc19sZW4pOwotCi0JCXBnYWlv X2lvX3JlZ2lzdGVyX2NhbGxiYWNrcyhpb2gsCi0JCQkJCQkJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QID8KLQkJCQkJCQkJCVBHQUlPX0hDQl9MT0NBTF9CVUZGRVJfUkVBRFYg OgotCQkJCQkJCQkJUEdBSU9fSENCX1NIQVJFRF9CVUZGRVJfUkVBRFYsCi0JCQkJCQkJCQlmbGFn cyk7Ci0KLQkJcGdhaW9faW9fc2V0X2ZsYWcoaW9oLCBpb2hfZmxhZ3MpOwotCi0JCS8qIC0tLQot CQkgKiBFdmVuIHRob3VnaCB3ZSdyZSB0cnlpbmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHks IHRyYWNrIHRoZSB0aW1lCi0JCSAqIGluIHNtZ3JzdGFydHJlYWR2KCk6Ci0JCSAqIC0gaWYgaW9f bWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCi0J CSAqICAgaW1tZWRpYXRlbHkKLQkJICogLSB0aGUgaW8gbWV0aG9kIG1pZ2h0IG5vdCBzdXBwb3J0 IHRoZSBJTyAoZS5nLiB3b3JrZXIgSU8gZm9yIGEgdGVtcAotCQkgKiAgIHRhYmxlKQotCQkgKiAt LS0KLQkJICovCi0JCWlvX3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190 aW1pbmcpOwotCQlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+c21nciwgZm9ya251bSwK LQkJCQkJICAgYmxvY2tudW0gKyBuYmxvY2tzX2RvbmUsCi0JCQkJCSAgIGlvX3BhZ2VzLCBpb19i dWZmZXJzX2xlbik7Ci0JCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9SRUFELAotCQkJCQkJCQlpb19zdGFydCwgMSwgaW9fYnVmZmVyc19sZW4gKiBC TENLU1opOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCQkJ cGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47Ci0JCWVsc2UK LQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfcmVhZCArPSBpb19idWZmZXJzX2xlbjsKLQot CQkvKgotCQkgKiBUcmFjayB2YWN1dW0gY29zdCB3aGVuIGlzc3VpbmcgSU8sIG5vdCBhZnRlciB3 YWl0aW5nIGZvciBpdC4KLQkJICogT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCBpc3N1aW5nIGEg bG90IG9mIElPIGluIGEgc2hvcnQgdGltZXNwYW4sCi0JCSAqIGRlc3BpdGUgYSBsb3cgY29zdCBs aW1pdC4KLQkJICovCi0JCWlmIChWYWN1dW1Db3N0QWN0aXZlKQotCQkJVmFjdXVtQ29zdEJhbGFu Y2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVyc19sZW47Ci0KLQkJKm5ibG9ja3Nf cHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0YXJ0X2lvID0gdHJ1ZTsKLQl9Ci0K LQlyZXR1cm4gZGlkX3N0YXJ0X2lvOworCXJldHVybiB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBiOTBlMzVjNmIuLmY1MzhmNzEzYSAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTIzNDQsNiArMjM0NCw3IEBAIFByZWRpY2F0ZUxvY2tEYXRhCiBQcmVk aWNhdGVMb2NrVGFyZ2V0VHlwZQogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIFByZXBQYXJhbGxlbFJl c3RvcmVQdHJUeXBlCitQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKIFByZXBhcmVTdG10CiBQcmVw YXJlZFN0YXRlbWVudAogUHJlc29ydGVkS2V5RGF0YQotLSAKMi41MS4wCgo= --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0010-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v10-0010-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdz72 RnJvbSAwNmRiZjRiOWZiNjU4M2IwNmY1NTk4ODZmN2U4MDZlZTljMGU2YTZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MzI6NTIgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMCAxMC8xMV0g QWRkIGZha2UgTFNOIHN1cHBvcnQgdG8gaGFzaCBpbmRleCBBTS4KClRoaXMgaXMgcHJlcGFyYXRp b24gZm9yIGFuIHVwY29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50 ZXJmYWNlIGFuZCBzd2l0Y2ggaGFzaCBvdmVyIHRvIGl0IChmcm9tIGFtZ2V0dHVwbGUpLiAgV2Ug bmVlZCBmYWtlCkxTTnMgdG8gbWFrZSBpdCBzYWZlIHRvIGFwcGx5IGJlaGF2aW9yIHRoYXQgaXMg ZXF1aXZhbGVudCB0byBuYnRyZWUncwpwcmV2aW91cyBkcm9wUGluIGJlaGF2aW9yIHRoYXQgd29y a3Mgd2l0aCB1bmxvZ2dlZCBoYXNoIGluZGV4IHNjYW5zLgoKVGhlIGNvbW1pdCB0aGF0IHdpbGwg YWRkIGhhc2hnZXRiYXRjaCBtYWtlcyB0aGUgcmVxdWlyZWQgY2hhbmdlcyB0bwpfaGFzaF9raWxs X2l0ZW1zIHRoYXQgYWN0dWFsbHkgcmVsaWVzIG9uIGhhc2ggZ2VuZXJhdGluZyBmYWtlIExTTnMu CgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1oYisw RHIySzBEdGdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo LmMgICAgICAgfCAgMjEgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQu YyB8ICAyMCArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyAgIHwgMTEx ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHBhZ2UuYyAgIHwgIDIyICsrKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygr KSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDZhMjBiNjdmNi4u ZDc0MmRhYmNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC00NzYsNiArNDc2LDcgQEAgaGFz aGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQg KnN0YXRzLAogCUJ1ZmZlcgkJbWV0YWJ1ZiA9IEludmFsaWRCdWZmZXI7CiAJSGFzaE1ldGFQYWdl IG1ldGFwOwogCUhhc2hNZXRhUGFnZSBjYWNoZWRtZXRhcDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsK IAogCXR1cGxlc19yZW1vdmVkID0gMDsKIAludW1faW5kZXhfdHVwbGVzID0gMDsKQEAgLTYxNSw3 ICs2MTYsNiBAQCBsb29wX3RvcDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJ eGxfaGFzaF91cGRhdGVfbWV0YV9wYWdlIHhscmVjOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAog CQl4bHJlYy5udHVwbGVzID0gbWV0YXAtPmhhc2htX250dXBsZXM7CiAKQEAgLTYyNSw4ICs2MjUs MTEgQEAgbG9vcF90b3A6CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBtZXRhYnVmLCBSRUdCVUZf U1RBTkRBUkQpOwogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNI X1VQREFURV9NRVRBX1BBR0UpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1Ziks IHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKwor CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklU X1NFQ1RJT04oKTsKIApAQCAtNjk5LDYgKzcwMiw3IEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0 aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCUJ1ZmZlcgkJ YnVmOwogCUJ1Y2tldAkJbmV3X2J1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFkgPSBJbnZh bGlkQnVja2V0OwogCWJvb2wJCWJ1Y2tldF9kaXJ0eSA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJYmxrbm8gPSBidWNrZXRfYmxrbm87CiAJYnVmID0gYnVja2V0X2J1ZjsKQEAgLTgy MSw3ICs4MjUsNiBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJf YnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkp CiAJCQl7CiAJCQkJeGxfaGFzaF9kZWxldGUgeGxyZWM7Ci0JCQkJWExvZ1JlY1B0cglyZWNwdHI7 CiAKIAkJCQl4bHJlYy5jbGVhcl9kZWFkX21hcmtpbmcgPSBjbGVhcl9kZWFkX21hcmtpbmc7CiAJ CQkJeGxyZWMuaXNfcHJpbWFyeV9idWNrZXRfcGFnZSA9IChidWYgPT0gYnVja2V0X2J1Zik7CkBA IC04NDYsOCArODQ5LDExIEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0 IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCQkJCQkJCQkJbmRlbGV0YWJsZSAqIHNp emVvZihPZmZzZXROdW1iZXIpKTsKIAogCQkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9J RCwgWExPR19IQVNIX0RFTEVURSk7Ci0JCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Ziks IHJlY3B0cik7CiAJCQl9CisJCQllbHNlCisJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVs KTsKKworCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7CiAKIAkJCUVO RF9DUklUX1NFQ1RJT04oKTsKIAkJfQpAQCAtOTA2LDE0ICs5MTIsMTUgQEAgaGFzaGJ1Y2tldGNs ZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVmZmVyIGJ1Y2tldF9idWYs CiAJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJewot CQkJWExvZ1JlY1B0cglyZWNwdHI7Ci0KIAkJCVhMb2dCZWdpbkluc2VydCgpOwogCQkJWExvZ1Jl Z2lzdGVyQnVmZmVyKDAsIGJ1Y2tldF9idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJCXJlY3B0 ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NQTElUX0NMRUFOVVApOwotCQkJ UGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCQl9CisJCWVsc2UKKwkJCXJlY3B0ciA9IFhMb2dH ZXRGYWtlTFNOKHJlbCk7CisKKwkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJCUVORF9D UklUX1NFQ1RJT04oKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMKaW5kZXgg MGNlZmJhY2M5Li4zMzk1YmJjMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMK QEAgLTUwLDYgKzUwLDcgQEAgX2hhc2hfZG9pbnNlcnQoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxl IGl0dXAsIFJlbGF0aW9uIGhlYXBSZWwsIGJvb2wgc29ydGVkKQogCXVpbnQzMgkJaGFzaGtleTsK IAlCdWNrZXQJCWJ1Y2tldDsKIAlPZmZzZXROdW1iZXIgaXR1cF9vZmY7CisJWExvZ1JlY1B0cgly ZWNwdHI7CiAKIAkvKgogCSAqIEdldCB0aGUgaGFzaCBrZXkgZm9yIHRoZSBpdGVtIChpdCdzIHN0 b3JlZCBpbiB0aGUgaW5kZXggdHVwbGUgaXRzZWxmKS4KQEAgLTIxNiw3ICsyMTcsNiBAQCByZXN0 YXJ0X2luc2VydDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9p bnNlcnQgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm9mZm51bSA9IGl0 dXBfb2ZmOwogCkBAIC0yMjksMTAgKzIyOSwxMiBAQCByZXN0YXJ0X2luc2VydDoKIAkJWExvZ1Jl Z2lzdGVyQnVmRGF0YSgwLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVwKSk7CiAKIAkJcmVjcHRy ID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfSU5TRVJUKTsKLQotCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKG1ldGFidWYpLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtl TFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKKwlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9T RUNUSU9OKCk7CiAKQEAgLTM3Miw2ICszNzQsNyBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVs YXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAlQ YWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCUhhc2hQYWdlT3BhcXVlIHBhZ2VvcGFx dWU7CiAJSGFzaE1ldGFQYWdlIG1ldGFwOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2Nh biBlYWNoIHR1cGxlIGluIHBhZ2UgdG8gc2VlIGlmIGl0IGlzIG1hcmtlZCBhcyBMUF9ERUFEICov CiAJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKQEAgLTQyNCw3ICs0Mjcs NiBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBC dWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkK IAkJewogCQkJeGxfaGFzaF92YWN1dW1fb25lX3BhZ2UgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJl Y3B0cjsKIAogCQkJeGxyZWMuaXNDYXRhbG9nUmVsID0gUmVsYXRpb25Jc0FjY2Vzc2libGVJbkxv Z2ljYWxEZWNvZGluZyhocmVsKTsKIAkJCXhscmVjLnNuYXBzaG90Q29uZmxpY3RIb3Jpem9uID0g c25hcHNob3RDb25mbGljdEhvcml6b247CkBAIC00NDUsMTAgKzQ0NywxMiBAQCBfaGFzaF92YWN1 dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1Ziwg QnVmZmVyIGJ1ZikKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigxLCBtZXRhYnVmLCBSRUdCVUZfU1RB TkRBUkQpOwogCiAJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9W QUNVVU1fT05FX1BBR0UpOwotCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVj cHRyKTsKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAkJ fQorCQllbHNlCisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBh Z2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAkJRU5EX0NSSVRfU0VDVElPTigpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzUuLmFiZDFmOTFmYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNob3ZmbC5jCkBAIC0xMzIsNiArMTMyLDcgQEAgX2hhc2hfYWRkb3ZmbHBh Z2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZiwgYm9vbCByZXRhaW5f cGluKQogCXVpbnQzMgkJaSwKIAkJCQlqOwogCWJvb2wJCXBhZ2VfZm91bmQgPSBmYWxzZTsKKwlY TG9nUmVjUHRyCXJlY3B0cjsKIAogCS8qCiAJICogV3JpdGUtbG9jayB0aGUgdGFpbCBwYWdlLiAg SGVyZSwgd2UgbmVlZCB0byBtYWludGFpbiBsb2NraW5nIG9yZGVyIHN1Y2gKQEAgLTM4MSw3ICsz ODIsNiBAQCBmb3VuZDoKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwo cmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9oYXNoX2FkZF9vdmZsX3BhZ2Ug eGxyZWM7CiAKIAkJeGxyZWMuYm1wYWdlX2ZvdW5kID0gcGFnZV9mb3VuZDsKQEAgLTQwOCwxOCAr NDA4LDIwIEBAIGZvdW5kOgogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDQsICZtZXRhcC0+aGFzaG1f Zmlyc3RmcmVlLCBzaXplb2YodWludDMyKSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9I QVNIX0lELCBYTE9HX0hBU0hfQUREX09WRkxfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJH ZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVm KSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChtYXBidWYpKQotCQkJUGFnZVNldExT TihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7Ci0KLQkJaWYgKEJ1ZmZlcklzVmFsaWQo bmV3bWFwYnVmKSkKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXdtYXBidWYpLCByZWNw dHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAl9 CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihC dWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQobWFwYnVmKSkKKwkJUGFnZVNl dExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7CisKKwlpZiAoQnVmZmVySXNWYWxp ZChuZXdtYXBidWYpKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobmV3bWFwYnVmKSwgcmVj cHRyKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAog CUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNTEwLDcgKzUxMiwxMSBAQCBfaGFzaF9mcmVlb3Zm bHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAlC dWNrZXQJCWJ1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJQnVmZmVyCQlwcmV2YnVm ID0gSW52YWxpZEJ1ZmZlcjsKIAlCdWZmZXIJCW5leHRidWYgPSBJbnZhbGlkQnVmZmVyOwotCWJv b2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlOworCWJvb2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlLAor CQkJCW1vZF93YnVmLAorCQkJCWlzX3ByaW1fYnVja2V0X3NhbWVfd3J0LAorCQkJCWlzX3ByZXZf YnVja2V0X3NhbWVfd3J0OworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogR2V0IGluZm9ybWF0 aW9uIGZyb20gdGhlIGRvb21lZCBwYWdlICovCiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgb3ZmbGJ1 ZiwgTEhfT1ZFUkZMT1dfUEFHRSk7CkBAIC02NDEsMTkgKzY0NywyMSBAQCBfaGFzaF9mcmVlb3Zm bHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJ TWFya0J1ZmZlckRpcnR5KG1ldGFidWYpOwogCX0KIAorCS8qIERldGVybWluZSB3aGljaCBwYWdl cyBXQUwgcmVjb3JkIG1vZGlmaWVzICovCisJbW9kX3didWYgPSBmYWxzZTsKKwlpc19wcmltX2J1 Y2tldF9zYW1lX3dydCA9ICh3YnVmID09IGJ1Y2tldGJ1Zik7CisJaXNfcHJldl9idWNrZXRfc2Ft ZV93cnQgPSAod2J1ZiA9PSBwcmV2YnVmKTsKKwogCS8qIFhMT0cgc3R1ZmYgKi8KIAlpZiAoUmVs YXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9zcXVlZXplX3BhZ2UgeGxyZWM7Ci0J CVhMb2dSZWNQdHIJcmVjcHRyOwotCQlpbnQJCQlpOwotCQlib29sCQltb2Rfd2J1ZiA9IGZhbHNl OwogCiAJCXhscmVjLnByZXZibGtubyA9IHByZXZibGtubzsKIAkJeGxyZWMubmV4dGJsa25vID0g bmV4dGJsa25vOwogCQl4bHJlYy5udHVwcyA9IG5pdHVwczsKLQkJeGxyZWMuaXNfcHJpbV9idWNr ZXRfc2FtZV93cnQgPSAod2J1ZiA9PSBidWNrZXRidWYpOwotCQl4bHJlYy5pc19wcmV2X2J1Y2tl dF9zYW1lX3dydCA9ICh3YnVmID09IHByZXZidWYpOworCQl4bHJlYy5pc19wcmltX2J1Y2tldF9z YW1lX3dydCA9IGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0OworCQl4bHJlYy5pc19wcmV2X2J1Y2tl dF9zYW1lX3dydCA9IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OwogCiAJCVhMb2dCZWdpbkluc2Vy dCgpOwogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGFzaFNxdWVlemVQYWdlKTsK QEAgLTY2MiwxNCArNjcwLDE0IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShSZWxhdGlvbiByZWwsIEJ1 ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQkgKiBidWNrZXQgYnVmZmVyIHdhcyBu b3QgY2hhbmdlZCwgYnV0IHN0aWxsIG5lZWRzIHRvIGJlIHJlZ2lzdGVyZWQgdG8KIAkJICogZW5z dXJlIHRoYXQgd2UgY2FuIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gaXQgZHVyaW5nIHJlcGxh eS4KIAkJICovCi0JCWlmICgheGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCisJCWlmICgh aXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCiAJCXsKIAkJCXVpbnQ4CQlmbGFncyA9IFJFR0JVRl9T VEFOREFSRCB8IFJFR0JVRl9OT19JTUFHRSB8IFJFR0JVRl9OT19DSEFOR0U7CiAKIAkJCVhMb2dS ZWdpc3RlckJ1ZmZlcigwLCBidWNrZXRidWYsIGZsYWdzKTsKIAkJfQogCi0JCWlmICh4bHJlYy5u dHVwcyA+IDApCisJCWlmIChuaXR1cHMgPiAwKQogCQl7CiAJCQlYTG9nUmVnaXN0ZXJCdWZmZXIo MSwgd2J1ZiwgUkVHQlVGX1NUQU5EQVJEKTsKIApAQCAtNjc4LDEwICs2ODYsMTAgQEAgX2hhc2hf ZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92Zmxi dWYsCiAKIAkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cF9vZmZzZXRzLAogCQkJCQkJCQlu aXR1cHMgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbml0dXBz OyBpKyspCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5pdHVwczsgaSsrKQogCQkJCVhMb2dSZWdp c3RlckJ1ZkRhdGEoMSwgaXR1cHNbaV0sIHR1cHNfc2l6ZVtpXSk7CiAJCX0KLQkJZWxzZSBpZiAo eGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQgfHwgeGxyZWMuaXNfcHJldl9idWNrZXRfc2Ft ZV93cnQpCisJCWVsc2UgaWYgKGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0IHx8IGlzX3ByZXZfYnVj a2V0X3NhbWVfd3J0KQogCQl7CiAJCQl1aW50OAkJd2J1Zl9mbGFnczsKIApAQCAtNjkxLDEwICs2 OTksMTAgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1 ZiwgQnVmZmVyIG92ZmxidWYsCiAJCQkgKiBpZiBpdCBpcyB0aGUgc2FtZSBhcyBwcmltYXJ5IGJ1 Y2tldCBidWZmZXIgb3IgdXBkYXRlIHRoZQogCQkJICogbmV4dGJsa25vIGlmIGl0IGlzIHNhbWUg YXMgdGhlIHByZXZpb3VzIGJ1Y2tldCBidWZmZXIuCiAJCQkgKi8KLQkJCUFzc2VydCh4bHJlYy5u dHVwcyA9PSAwKTsKKwkJCUFzc2VydChuaXR1cHMgPT0gMCk7CiAKIAkJCXdidWZfZmxhZ3MgPSBS RUdCVUZfU1RBTkRBUkQ7Ci0JCQlpZiAoIXhscmVjLmlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQor CQkJaWYgKCFpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKIAkJCXsKIAkJCQl3YnVmX2ZsYWdzIHw9 IFJFR0JVRl9OT19DSEFOR0U7CiAJCQl9CkBAIC03MTQsNyArNzIyLDcgQEAgX2hhc2hfZnJlZW92 ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJ CSAqIHByZXZwYWdlLiAgRHVyaW5nIHJlcGxheSwgd2UgY2FuIGRpcmVjdGx5IHVwZGF0ZSB0aGUg bmV4dGJsb2NrIGluCiAJCSAqIHdyaXRlcGFnZS4KIAkJICovCi0JCWlmIChCdWZmZXJJc1ZhbGlk KHByZXZidWYpICYmICF4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJaWYgKEJ1ZmZl cklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQogCQkJWExvZ1Jl Z2lzdGVyQnVmZmVyKDMsIHByZXZidWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJaWYgKEJ1ZmZl cklzVmFsaWQobmV4dGJ1ZikpCkBAIC03MzAsMjMgKzczOCwzMyBAQCBfaGFzaF9mcmVlb3ZmbHBh Z2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIgb3ZmbGJ1ZiwKIAkJfQog CiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NRVUVFWkVfUEFH RSk7Ci0KLQkJLyogU2V0IExTTiBpZmYgd2J1ZiBpcyBtb2RpZmllZC4gKi8KLQkJaWYgKG1vZF93 YnVmKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOwotCi0JCVBh Z2VTZXRMU04oQnVmZmVyR2V0UGFnZShvdmZsYnVmKSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVy SXNWYWxpZChwcmV2YnVmKSAmJiAheGxyZWMuaXNfcHJldl9idWNrZXRfc2FtZV93cnQpCi0JCQlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7Ci0JCWlmIChCdWZmZXJJ c1ZhbGlkKG5leHRidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG5leHRidWYpLCBy ZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOwot Ci0JCWlmICh1cGRhdGVfbWV0YXApCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1 ZiksIHJlY3B0cik7CiAJfQorCWVsc2UJCQkJCQkvKiAhUmVsYXRpb25OZWVkc1dBTChyZWwpICov CisJeworCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJCS8qIERldGVybWluZSBp ZiB3YnVmIGlzIG1vZGlmaWVkICovCisJCWlmIChuaXR1cHMgPiAwKQorCQkJbW9kX3didWYgPSB0 cnVlOworCQllbHNlIGlmIChpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKKwkJCW1vZF93YnVmID0g dHJ1ZTsKKwl9CisKKwkvKiBTZXQgTFNOIGlmZiB3YnVmIGlzIG1vZGlmaWVkLiAqLworCWlmICht b2Rfd2J1ZikKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCByZWNwdHIpOworCisJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZl cklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQorCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7CisJaWYgKEJ1ZmZlcklzVmFsaWQo bmV4dGJ1ZikpCisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXh0YnVmKSwgcmVjcHRyKTsK KworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNwdHIpOworCisJaWYgKHVw ZGF0ZV9tZXRhcCkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIp OwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC05NTksNiArOTc3LDggQEAgcmVhZHBhZ2U6 CiAKIAkJCQlpZiAobml0dXBzID4gMCkKIAkJCQl7CisJCQkJCVhMb2dSZWNQdHIJcmVjcHRyOwor CiAJCQkJCUFzc2VydChuaXR1cHMgPT0gbmRlbGV0YWJsZSk7CiAKIAkJCQkJLyoKQEAgLTk4Niw3 ICsxMDA2LDYgQEAgcmVhZHBhZ2U6CiAJCQkJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJCQkJaWYgKFJl bGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJCQkJewotCQkJCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJ CQkJCQl4bF9oYXNoX21vdmVfcGFnZV9jb250ZW50cyB4bHJlYzsKIAogCQkJCQkJeGxyZWMubnR1 cHMgPSBuaXR1cHM7CkBAIC0xMDE4LDEwICsxMDM3LDEyIEBAIHJlYWRwYWdlOgogCQkJCQkJCQkJ CQluZGVsZXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOwogCiAJCQkJCQlyZWNwdHIgPSBY TG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9NT1ZFX1BBR0VfQ09OVEVOVFMpOwotCi0J CQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7Ci0JCQkJCQlQYWdl U2V0TFNOKEJ1ZmZlckdldFBhZ2UocmJ1ZiksIHJlY3B0cik7CiAJCQkJCX0KKwkJCQkJZWxzZQor CQkJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJCQlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7CisJCQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFn ZShyYnVmKSwgcmVjcHRyKTsKIAogCQkJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZS4uMjYzYmM3M2YxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTYzMCw2ICs2MzAsNyBAQCBfaGFzaF9leHBhbmR0YWJs ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmKQogCXVpbnQzMgkJbG93bWFzazsKIAlib29s CQltZXRhcF91cGRhdGVfbWFza3MgPSBmYWxzZTsKIAlib29sCQltZXRhcF91cGRhdGVfc3BsaXRw b2ludCA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiByZXN0YXJ0X2V4cGFuZDoKIApA QCAtOTAwLDcgKzkwMSw2IEBAIHJlc3RhcnRfZXhwYW5kOgogCWlmIChSZWxhdGlvbk5lZWRzV0FM KHJlbCkpCiAJewogCQl4bF9oYXNoX3NwbGl0X2FsbG9jYXRlX3BhZ2UgeGxyZWM7Ci0JCVhMb2dS ZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm5ld19idWNrZXQgPSBtYXhidWNrZXQ7CiAJCXhscmVj Lm9sZF9idWNrZXRfZmxhZyA9IG9vcGFxdWUtPmhhc2hvX2ZsYWc7CkBAIC05MzMsMTEgKzkzMywx MyBAQCByZXN0YXJ0X2V4cGFuZDoKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZkhh c2hTcGxpdEFsbG9jUGFnZSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBY TE9HX0hBU0hfU1BMSVRfQUxMT0NBVEVfUEFHRSk7Ci0KLQkJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVm X25ibGtubyksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwg cmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJ UGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOworCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWZfbmJsa25vKSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAg LTEwOTIsNiArMTA5NCw3IEBAIF9oYXNoX3NwbGl0YnVja2V0KFJlbGF0aW9uIHJlbCwKIAlTaXpl CQlhbGxfdHVwc19zaXplID0gMDsKIAlpbnQJCQlpOwogCXVpbnQxNgkJbml0dXBzID0gMDsKKwlY TG9nUmVjUHRyCXJlY3B0cjsKIAogCWJ1Y2tldF9vYnVmID0gb2J1ZjsKIAlvcGFnZSA9IEJ1ZmZl ckdldFBhZ2Uob2J1Zik7CkBAIC0xMjk2LDcgKzEyOTksNiBAQCBfaGFzaF9zcGxpdGJ1Y2tldChS ZWxhdGlvbiByZWwsCiAKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKLQkJWExvZ1Jl Y1B0cglyZWNwdHI7CiAJCXhsX2hhc2hfc3BsaXRfY29tcGxldGUgeGxyZWM7CiAKIAkJeGxyZWMu b2xkX2J1Y2tldF9mbGFnID0gb29wYXF1ZS0+aGFzaG9fZmxhZzsKQEAgLTEzMTAsMTAgKzEzMTIs MTIgQEAgX2hhc2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQlYTG9nUmVnaXN0ZXJCdWZm ZXIoMSwgYnVja2V0X25idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJcmVjcHRyID0gWExvZ0lu c2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQ09NUExFVEUpOwotCi0JCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVm ZmVyR2V0UGFnZShidWNrZXRfbmJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0g WExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRf b2J1ZiksIHJlY3B0cik7CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Y2tldF9uYnVmKSwg cmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIAotLSAKMi41MS4wCgo= --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0005-Add-prefetching-to-index-scans-using-batch-inter.patch" Content-Disposition: attachment; filename="v10-0005-Add-prefetching-to-index-scans-using-batch-inter.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdzo7 RnJvbSBlYjEyODYyYTI5OGZhYTg3OGQ5NDA0YzI1MmM2Njc1YjI1OTBiYmJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMCAwNS8xMV0g QWRkIHByZWZldGNoaW5nIHRvIGluZGV4IHNjYW5zIHVzaW5nIGJhdGNoCiBpbnRlcmZhY2VzLgoK VGhpcyBjb21taXQgaW1wbGVtZW50cyBJL08gcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zLCBt YWRlIHBvc3NpYmxlIGJ5CnRoZSByZWNlbnQgYWRkaXRpb24gb2YgYmF0Y2hpbmcgaW50ZXJmYWNl cyB0byBib3RoIHRoZSB0YWJsZSBBTSBhbmQKaW5kZXggQU0gQVBJcy4KClRoZSBhbWdldGJhdGNo IGluZGV4IEFNIGludGVyZmFjZSBwcm92aWRlcyBiYXRjaGVzIG9mIG1hdGNoaW5nIFRJRHMKKHJh dGhlciB0aGFuIG9uZSB0dXBsZSBhdCBhIHRpbWUpLCBlYWNoIG9mIHdoaWNoIG11c3QgYmUgdGFr ZW4gZnJvbQppbmRleCB0dXBsZXMgdGhhdCBhcHBlYXIgdG9nZXRoZXIgb24gYSBzaW5nbGUgaW5k ZXggcGFnZS4gIFRoaXMgYWxsb3dzCm11bHRpcGxlIGJhdGNoZXMgdG8gYmUgaGVsZCBvcGVuIHNp bXVsdGFuZW91c2x5LiAgR2l2aW5nIHRoZSB0YWJsZSBBTSBhbgpleHBsaWNpdCB1bmRlcnN0YW5k aW5nIG9mIGluZGV4IEFNIGNvbmNlcHRzL2luZGV4IHBhZ2UgYm91bmRhcmllcyBhbGxvd3MKaXQg dG8gY29uc2lkZXIgYWxsIG9mIHRoZSByZWxldmFudCBjb3N0cyBhbmQgYmVuZWZpdHMuCgpQcmVm ZXRjaGluZyBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHByZWZldGNoaW5nIHBvc2l0aW9uIHVuZGVy IHRoZQpjb250cm9sIG9mIHRoZSB0YWJsZSBBTSBhbmQgY29yZSBjb2RlLiAgVGhpcyBpcyBjbG9z ZWx5IHJlbGF0ZWQgdG8gdGhlCnNjYW4gcG9zaXRpb24gYWRkZWQgYnkgY29tbWl0IEZJWE1FLCB3 aGljaCBpbnRyb2R1Y2VkIHRoZSBhbWdldGJhdGNoCmludGVyZmFjZS4gIEEgcmVhZCBzdHJlYW0g Y2FsbGJhY2sgYWR2YW5jZXMgdGhlIHJlYWQgc3RyZWFtIGFzIG5lZWRlZCB0bwpwcm92aWRlIHN1 ZmZpY2llbnRseSBtYW55IGhlYXAgYmxvY2sgbnVtYmVycyB0byBtYWludGFpbiB0aGUgcmVhZApz dHJlYW0ncyB0YXJnZXQgcHJlZmV0Y2ggZGlzdGFuY2UuCgpUZXN0aW5nIGhhcyBzaG93biB0aGF0 IGluZGV4IHByZWZldGNoaW5nIGNhbiBtYWtlIGluZGV4IHNjYW5zIG11Y2gKZmFzdGVyLiAgTGFy Z2UgcmFuZ2Ugc2NhbnMgdGhhdCByZXR1cm4gbWFueSB0dXBsZXMgY2FuIGJlIGFzIG11Y2ggYXMg MzV4CmZhc3Rlci4KCkFuIGltcG9ydGFudCBnb2FsIG9mIHRoZSBhbWdldGJhdGNoIGRlc2lnbiBp cyB0byBlbmFibGUgdGhlIHRhYmxlIEFNJ3MKcmVhZCBzdHJlYW0gY2FsbGJhY2sgdG8gYWR2YW5j ZSBpdHMgcHJlZmV0Y2ggcG9zaXRpb24gdXNpbmcgVElEcyB0aGF0CmFwcGVhciBvbiBhIGxlYWYg cGFnZSB0aGF0J3MgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbidzIGxlYWYKcGFn ZS4gIFRoaXMgaXMgY3J1Y2lhbCB3aXRoIHNjYW5zIG9mIGluZGV4ZXMgd2hlcmUgZWFjaCBsZWFm IHBhZ2UKaGFwcGVucyB0byBoYXZlIHJlbGF0aXZlbHkgZmV3IGRpc3RpbmN0IGhlYXAgYmxvY2tz IGFtb25nIGl0cyBtYXRjaGluZwpUSURzIChhcyB3ZWxsIGFzIHdpdGggc2NhbnMgd2l0aCBsZWFm IHBhZ2VzIHRoYXQgaGF2ZSByZWxhdGl2ZWx5IGZldwp0b3RhbCBtYXRjaGluZyBpdGVtcykuICBJ bmRleCBzY2FucyBjYW4gaGF2ZSBhcyBtYW55IGFzIDY0IG9wZW4gYmF0Y2hlcywKd2hpY2ggdGVz dGluZyBoYXMgc2hvd24gdG8gYmUgYWJvdXQgdGhlIG1heGltdW0gbnVtYmVyIHRoYXQgY2FuIGV2 ZXIgYmUKdXNlZnVsLiAgQmF0Y2hlcyBhcmUgbWFpbnRhaW5lZCBpbiBzY2FuIG9yZGVyIHVzaW5n IGEgc2ltcGxlIHJpbmcgYnVmZmVyCmRhdGEgc3RydWN0dXJlLgoKSW4gcmFyZSBjYXNlcyB3aGVy ZSB0aGUgc2NhbiBleGNlZWRzIHRoaXMgcXVhc2ktYXJiaXRyYXJ5IGxpbWl0IG9mIDY0LAp0aGUg cmVhZCBzdHJlYW0gaXMgdGVtcG9yYXJpbHkgcGF1c2VkLiAgUHJlZmV0Y2hpbmcgKHZpYSB0aGUg cmVhZApzdHJlYW0pIGlzIHJlc3VtZWQgb25seSBhZnRlciB0aGUgc2NhbiBwb3NpdGlvbiBhZHZh bmNlcyBiZXlvbmQgaXRzCmN1cnJlbnQgb3BlbiBiYXRjaCBhbmQgdGhlbiBmcmVlcyBpdCBieSBj YWxsaW5nIGFtZnJlZWJhdGNoIGFuZCByZW1vdmluZwppdCBmcm9tIHRoZSBzY2FuJ3MgYmF0Y2gg cmluZyBidWZmZXIuICBUZXN0aW5nIGhhcyBzaG93biB0aGF0IGl0IGlzbid0CnZlcnkgY29tbW9u IGZvciBzY2FucyB0byBob2xkIG9wZW4gbW9yZSB0aGFuIGFib3V0IDEwIGJhdGNoZXMgdG8gZ2V0 IHRoZQpkZXNpcmVkIEkvTyBwcmVmZXRjaCBkaXN0YW5jZS4KCkF1dGhvcjogVG9tYXMgVm9uZHJh IDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpS ZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpSZXZpZXdlZC1C eTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0ZWJhYkBlbnRl cnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAg ICAgICAgIHwgIDE1ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAg ICAgICB8ICA1MCArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAgICAgICAg ICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcmVhZF9zdHJlYW0uaCAgICAgICAgICAg ICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAg fCA0NDQgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhh bS5jICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJh dGNoLmMgICAgICAgICB8ICA1NSArKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1F ICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNp emUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFt LmMgICAgICAgICB8ICAxMiArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJz LmRhdCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlIHwgICAxICsKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAg ICAgICB8ICAyMSArCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgICAgICAg ICAgfCAzODYgKysrKysrKysrKysrKy0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5z Z21sICAgICAgICAgICAgfCAgMTMgKy0KIGRvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgICAgICAg ICAgICAgICAgICAgICB8ICAgOCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdz Lm91dCAgICAgICAgfCAgIDMgKy0KIDE3IGZpbGVzIGNoYW5nZWQsIDk1OSBpbnNlcnRpb25zKCsp LCA2NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFt LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggMzQ0NDcxZjljLi5mYjhhYmY4 NWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEyMyw2ICsxMjMsMjEgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhGZXRjaEhlYXBEYXRhCiAJQnVmZmVyCQl2bWJ1ZjsJCQkvKiB2aXNpYmlsaXR5IG1hcCBi dWZmZXIgKi8KIAlpbnQJCQl4c192bV9pdGVtczsJLyogaXRlbXMgdG8gcmVzb2x2ZSBkdXJpbmcg dmlzaWJpbGl0eSBjaGVja3MgKi8KIAorCS8qIEZvciBiYXRjaCBpbmRleCBzY2FucyB0aGF0IHVz ZSByZWFkIHN0cmVhbSBmb3IgcHJlZmV0Y2hpbmcgKi8KKwlSZWFkU3RyZWFtICp4c19yZWFkX3N0 cmVhbTsKKworCS8qCisJICogVGhlIHJlYWQgc3RyZWFtIGlzIGFsbG9jYXRlZCBhdCB0aGUgYmVn aW5uaW5nIG9mIHRoZSBzY2FuIGFuZCByZXNldCBvbgorCSAqIHJlc2NhbiBvciB3aGVuIHRoZSBz Y2FuIGRpcmVjdGlvbiBjaGFuZ2VzLiBUaGUgc2NhbiBkaXJlY3Rpb24gaXMgc2F2ZWQKKwkgKiBl YWNoIHRpbWUgYSBuZXcgdHVwbGUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgc2NhbiBkaXJlY3Rpb24g Y2hhbmdlcyBmcm9tCisJICogb25lIHR1cGxlIHRvIHRoZSBuZXh0LCB0aGUgcmVhZCBzdHJlYW0g cmVsZWFzZXMgYWxsIHByZXZpb3VzbHkgcGlubmVkCisJICogYnVmZmVycyBhbmQgcmVzZXRzIHRo ZSBwcmVmZXRjaCBibG9jay4KKwkgKi8KKwlTY2FuRGlyZWN0aW9uIHhzX3JlYWRfc3RyZWFtX2Rp cjsJLyogaW5kZXggc2NhbiBkaXJlY3Rpb24gKi8KKwlCbG9ja051bWJlciB4c19wcmVmZXRjaF9i bG9jazsJLyogbGFzdCBibG9jayByZXR1cm5lZCB0byB4c19yZWFkX3N0cmVhbSAqLworCWJvb2wJ CXhzX3lpZWxkX2NoZWNrOyAvKiBjaGVja2VkIGlmIHByZWZldGNoaW5nIHNob3VsZCB5aWVsZD8g Ki8KKwlib29sCQl4c19wYXVzZWQ7CQkvKiBwYXVzZWQgdW50aWwgbmV4dCBiYXRjaCBpcyByZWFk PyAqLworCiAJLyogTkI6IGlmIHhzX2NidWYgb3Igdm1idWYgYXJlIG5vdCBJbnZhbGlkQnVmZmVy LCB3ZSBob2xkIGEgcGluICovCiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2Fu LmgKaW5kZXggMDA4M2RlNzM1Li4yN2Q2NGEzNjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMjMz LDggKzIzMywxNCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2Nh bkJhdGNoOwogICogTWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcyAobGVhZiBwYWdlcykgd2UgY2Fu IGtlZXAgaW4gbWVtb3J5LiAgV2UgbmVlZCBhCiAgKiBtaW5pbXVtIG9mIHR3bywgc2luY2Ugd2Un bGwgb25seSBjb25zaWRlciByZWxlYXNpbmcgb25lIGJhdGNoIHdoZW4gYW5vdGhlcgogICogaXMg cmVhZC4KKyAqCisgKiBUaGUgY2hvaWNlIG9mIDY0IGJhdGNoZXMgaXMgYXJiaXRyYXJ5LiAgSXQn cyBhYm91dCAxTUIgb2YgZGF0YSB3aXRoIDhLQgorICogcGFnZXMgKDUxMmtCIGZvciBwYWdlcywg YW5kIHRoZW4gYSBiaXQgb2Ygb3ZlcmhlYWQpLiBXZSBzaG91bGQgbm90IHJlYWxseQorICogbmVl ZCB0aGlzIG1hbnkgYmF0Y2hlcyBpbiBtb3N0IGNhc2VzLCB0aG91Z2guIFRoZSByZWFkIHN0cmVh bSBsb29rcyBhaGVhZAorICoganVzdCBlbm91Z2ggdG8gcXVldWUgZW5vdWdoIElPcywgYWRqdXN0 aW5nIHRoZSBkaXN0YW5jZSAoVElEcywgYnV0CisgKiB1bHRpbWF0ZWx5IHRoZSBudW1iZXIgb2Yg ZnV0dXJlIGJhdGNoZXMpIHRvIG1lZXQgdGhhdC4KICAqLwotI2RlZmluZSBJTkRFWF9TQ0FOX01B WF9CQVRDSEVTCQkyCisjZGVmaW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJCTY0CiAjZGVmaW5l IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUwkyCiAKIC8qCkBAIC0yNDYsMTIgKzI1MiwyMSBAQCB0 eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwogICogbWF0 Y2hlcyBpbi4gIEhvd2V2ZXIsIHRhYmxlIEFNcyBhcmUgZnJlZSB0byBmZXRjaCB0YWJsZSB0dXBs ZXMgaW4gd2hhdGV2ZXIKICAqIG9yZGVyIGlzIG1vc3QgY29udmVuaWVudC9lZmZpY2llbnQgLS0g cHJvdmlkZWQgdGhhdCBzdWNoIHJlb3JkZXJpbmcgY2Fubm90CiAgKiBhZmZlY3QgdGhlIG9yZGVy IHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGxhdGVyIHJldHVybnMgdHVwbGVzIGluLgor ICoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgYWxzbyBwcm92aWRlcyB0YWJsZSBBTXMgd2l0aCBh IHdheSB0byByZWFkIGFoZWFkIG9mIHRoZQorICogY3VycmVudCByZWFkIHBvc2l0aW9uIGJ5IF9t dWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBwYWdlcy4gIFRoZSBmdXJ0aGVyIG91dAorICogdGhlIHRh YmxlIEFNIHJlYWRzIGFoZWFkIGxpa2UgdGhpcywgdGhlIGZ1cnRoZXIgaXQgY2FuIHNlZSBpbnRv IHRoZSBmdXR1cmUuCisgKiBUaGF0IHdheSB0aGUgdGFibGUgQU0gaXMgYWJsZSB0byByZW9yZGVy IHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFzIGRlc2lyZWQuCisgKiBGb3IgZXhhbXBsZSwgaW5kZXgg c2NhbnMgc29tZXRpbWVzIG5lZWQgdG8gcmVhZGFoZWFkIGJ5IGFzIG1hbnkgYXMgYSBmZXcKKyAq IGRvemVuIGFtZ2V0YmF0Y2ggYmF0Y2hlcyBpbiBvcmRlciB0byBtYWludGFpbiBhbiBvcHRpbWFs IEkvTyBwcmVmZXRjaAorICogZGlzdGFuY2UgKGRpc3RhbmNlIGZvciByZWFkaW5nIHRhYmxlIGJs b2Nrcy9mZXRjaGluZyB0YWJsZSB0dXBsZXMpLgogICovCiB0eXBlZGVmIHN0cnVjdCBCYXRjaFJp bmdCdWZmZXIKIHsKIAkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBiYXRjaGVzW10gZm9yIHNjYW4g Ki8KIAlCYXRjaFJpbmdJdGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4ncyByZWFkIHBvc2l0aW9uICov CiAJQmF0Y2hSaW5nSXRlbVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8K KwlCYXRjaFJpbmdJdGVtUG9zIHByZWZldGNoUG9zOwkvKiBwcmVmZXRjaGluZyBwb3NpdGlvbiAq LwogCiAJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoOwogCkBAIC00MzEsNiArNDQ2LDM5IEBAIGlu ZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCkKIAlyaW5nYnVmLT5uZXh0QmF0Y2grKzsKIH0KIAorLyoKKyAqIENvbXBhcmUg dHdvIGJhdGNoIHJpbmcgcG9zaXRpb25zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAq CisgKiBSZXR1cm5zIG5lZ2F0aXZlIGlmIHBvczEgaXMgYmVoaW5kIHBvczIsIDAgaWYgZXF1YWws IHBvc2l0aXZlIGlmIHBvczEgaXMKKyAqIGFoZWFkIG9mIHBvczIuCisgKi8KK3N0YXRpYyBpbmxp bmUgaW50CitpbmRleF9zY2FuX3Bvc19jbXAoQmF0Y2hSaW5nSXRlbVBvcyAqcG9zMSwgQmF0Y2hS aW5nSXRlbVBvcyAqcG9zMiwKKwkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlp bnQ4CQliYXRjaGRpZmYgPSAoaW50OCkgKHBvczEtPmJhdGNoIC0gcG9zMi0+YmF0Y2gpOworCisJ aWYgKGJhdGNoZGlmZiAhPSAwKQorCQlyZXR1cm4gYmF0Y2hkaWZmOworCisJLyogU2FtZSBiYXRj aCwgY29tcGFyZSBpdGVtcyAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlv bikpCisJCXJldHVybiBwb3MxLT5pdGVtIC0gcG9zMi0+aXRlbTsKKwllbHNlCisJCXJldHVybiBw b3MyLT5pdGVtIC0gcG9zMS0+aXRlbTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgc2lnbmVkIGRp c3RhbmNlIGluIGJhdGNoZXMgYmV0d2VlbiB0d28gcG9zaXRpb25zLgorICoKKyAqIFBvc2l0aXZl IG1lYW5zIHBvczEgaXMgYWhlYWQgb2YgcG9zMiBieSB0aGF0IG1hbnkgYmF0Y2hlcy4KKyAqLwor c3RhdGljIGlubGluZSBpbnQ4CitpbmRleF9zY2FuX3Bvc19iYXRjaF9kaXN0YW5jZShCYXRjaFJp bmdJdGVtUG9zICpwb3MxLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MyKQoreworCXJldHVybiAoaW50 OCkgKHBvczEtPmJhdGNoIC0gcG9zMi0+YmF0Y2gpOworfQorCiAvKgogICogQWR2YW5jZSBwb3Np dGlvbiB0byBpdHMgbmV4dCBpdGVtIGluIHRoZSBiYXRjaC4KICAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApp bmRleCBmMmZkNWQzMTUuLjQxOTMwMGE2YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC01Miw2ICs1 Miw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlcjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zZXFzY2FuOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV9pbmRleG9ubHlzY2FuOworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2lu ZGV4c2Nhbl9wcmVmZXRjaDsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9iaXRtYXBz Y2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3RpZHNjYW47CiBleHRlcm4gUEdE TExJTVBPUlQgYm9vbCBlbmFibGVfc29ydDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcmVhZF9zdHJlYW0uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVhZF9zdHJlYW0uaAppbmRl eCBlM2I2YmIyZjMuLjljODUxNzBhYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9y ZWFkX3N0cmVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVhZF9zdHJlYW0uaApAQCAt MTAyLDYgKzEwMiw3IEBAIGV4dGVybiBSZWFkU3RyZWFtICpyZWFkX3N0cmVhbV9iZWdpbl9zbWdy X3JlbGF0aW9uKGludCBmbGFncywKIGV4dGVybiBCbG9ja051bWJlciByZWFkX3N0cmVhbV9wYXVz ZShSZWFkU3RyZWFtICpzdHJlYW0pOwogZXh0ZXJuIHZvaWQgcmVhZF9zdHJlYW1fcmVzdW1lKFJl YWRTdHJlYW0gKnN0cmVhbSk7CiBleHRlcm4gQmxvY2tOdW1iZXIgcmVhZF9zdHJlYW1feWllbGQo UmVhZFN0cmVhbSAqc3RyZWFtKTsKK2V4dGVybiBib29sIHJlYWRfc3RyZWFtX3VzZXNfZmFzdF9w YXRoKFJlYWRTdHJlYW0gKnN0cmVhbSk7CiBleHRlcm4gdm9pZCByZWFkX3N0cmVhbV9yZXNldChS ZWFkU3RyZWFtICpzdHJlYW0pOwogZXh0ZXJuIHZvaWQgcmVhZF9zdHJlYW1fZW5kKFJlYWRTdHJl YW0gKnN0cmVhbSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmlu ZGV4IDM1MGQ4MjdlYS4uOGNlNzQ5ODczIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9oYW5kbGVyLmMKQEAgLTM3LDcgKzM3LDkgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVz cy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNp bmNsdWRlICJzdG9yYWdlL2Fpby5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCkBAIC02 MCw2ICs2Miw5IEBAIHN0YXRpYyBCbG9ja051bWJlciBoZWFwYW1fc2Nhbl9nZXRfYmxvY2tzX2Rv bmUoSGVhcFNjYW5EZXNjIGhzY2FuKTsKIHN0YXRpYyBib29sIEJpdG1hcEhlYXBTY2FuTmV4dEJs b2NrKFRhYmxlU2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCWJvb2wgKnJlY2hlY2ssCiAJCQkJCQkJ CQl1aW50NjQgKmxvc3N5X3BhZ2VzLCB1aW50NjQgKmV4YWN0X3BhZ2VzKTsKK3N0YXRpYyBCbG9j a051bWJlciBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJ CQkJCSB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJIHZvaWQgKnBlcl9i dWZmZXJfZGF0YSk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTEsNiArMTE2LDE3IEBA IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCSAq IHNvIHRoYXQgcmVzY2FucyBkb24ndCBkbyBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1 cHMuCiAJICovCiAJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKKworCS8qIFJlc2V0IHJlYWQgc3Ry ZWFtIHN0YXRlICovCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IE5vTW92ZW1lbnRTY2Fu RGlyZWN0aW9uOwkvKiByZWFkX3N0cmVhbV9yZXNldAorCQkJCQkJCQkJCQkJCQkJICogbmVlZHMg dGhpcyAqLworCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsK Kwloc2Nhbi0+eHNfeWllbGRfY2hlY2sgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcGF1c2VkID0gZmFs c2U7CisKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBpdHNlbGYgKi8KKwlpZiAoaHNjYW4tPnhzX3Jl YWRfc3RyZWFtKQorCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOwog fQogCiBzdGF0aWMgdm9pZApAQCAtMTIwLDYgKzEzNiw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9l bmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAogCWhlYXBhbV9pbmRleF9mZXRjaF9yZXNl dChzY2FuKTsKIAorCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCXJlYWRfc3RyZWFtX2Vu ZChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCiAJaWYgKGhzY2FuLT52bWJ1ZiAhPSBJbnZhbGlk QnVmZmVyKQogCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT52bWJ1Zik7CiAKQEAgLTE1MCw3ICsxNjks MTQgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuLAogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCiAJCQlSZWxlYXNl QnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAotCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIo aHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKKwkJLyoKKwkJICogV2hlbiB1c2lu ZyBhIHJlYWQgc3RyZWFtLCB0aGUgc3RyZWFtIHdpbGwgYWxyZWFkeSBrbm93IHdoaWNoIGJsb2Nr CisJCSAqIG51bWJlciBjb21lcyBuZXh0ICh0aG91Z2ggYW4gYXNzZXJ0aW9uIHdpbGwgdmVyaWZ5 IGEgbWF0Y2ggYmVsb3cpCisJCSAqLworCQlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCQkJ aHNjYW4tPnhzX2NidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihoc2Nhbi0+eHNfcmVhZF9z dHJlYW0sIE5VTEwpOworCQllbHNlCisJCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNj YW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgogCQkgKiBQcnVuZSBwYWdl IHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQpAQCAtMjA4LDYgKzIzNCw0MiBA QCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNj YW4sCiAgKiAoaW1wb3J0YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFu ZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQogICogbmVlZCB0byBub3QgaG9sZCBvbnRvIGluZGV4IGxl YWYgcGFnZXMgZm9yIHRvbyBsb25nLgogICoKKyAqIERyb3BwaW5nIGxlYWYgcGFnZSBwaW5zIGVh cmx5CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEluIG5vIGV2ZW50 IHdpbGwgdGhlIHNjYW4gYmUgYWxsb3dlZCB0byBob2xkIG9udG8gbW9yZSB0aGFuIG9uZSBiYXRj aCdzCisgKiBsZWFmIHBhZ2UgcGluIGF0IGEgdGltZS4gIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3Ig dGhpcyByZXN0cmljdGlvbiBpcyB0bworICogYXZvaWQgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMg d2l0aCB0aGUgcmVhZCBzdHJlYW0sIHdoaWNoIGhhcyBpdHMgb3duCisgKiBzdHJhdGVneSBmb3Ig a2VlcGluZyB0aGUgbnVtYmVyIG9mIHBpbnMgaGVsZCBieSB0aGUgYmFja2VuZCB1bmRlciBjb250 cm9sLgorICoKKyAqIE9uY2Ugd2UndmUgcmVzb2x2ZWQgdmlzaWJpbGl0eSBmb3IgYWxsIGl0ZW1z IGluIGEgYmF0Y2gsIHdlIGNhbiBzYWZlbHkgZHJvcAorICogaXRzIGxlYWYgcGFnZSBwaW4uICBU aGlzIGlzIHNhZmUgd2l0aCByZXNwZWN0IHRvIGNvbmN1cnJlbnQgVkFDVVVNIGJlY2F1c2UKKyAq IGluZGV4IHZhY3V1bWluZyB3aWxsIGJsb2NrIG9uIGFjcXVpcmluZyBhIGNvbmZsaWN0aW5nIGNs ZWFudXAgbG9jayBvbiB0aGUKKyAqIGJhdGNoJ3MgaW5kZXggcGFnZSBkdWUgdG8gb3VyIGhvbGRp bmcgYSBwaW4gb24gdGhhdCBzYW1lIHBhZ2UuICBDb3B5aW5nIHRoZQorICogcmVsZXZhbnQgdmlz aWJpbGl0eSBtYXAgZGF0YSBpbnRvIG91ciBsb2NhbCBjYWNoZSBzdWZmaWNlcyB0byBwcmV2ZW50 IHVuc2FmZQorICogY29uY3VycmVudCBUSUQgcmVjeWNsaW5nOiBpZiBhbnkgb2YgdGhlc2UgVElE cyBwb2ludCB0byBkZWFkIGhlYXAgdHVwbGVzLAorICogVkFDVVVNIGNhbm5vdCBwb3NzaWJseSBy ZXR1cm4gZnJvbSBhbWJ1bGtkZWxldGUgYW5kIG1hcmsgdGhlIHBvaW50ZWQtdG8KKyAqIGhlYXAg cGFnZXMgYXMgYWxsLXZpc2libGUuICBWQUNVVU0gX2Nhbl8gZG8gc28gb25jZSB3ZSByZWxlYXNl IHRoZSBiYXRjaCdzCisgKiBwaW4sIGJ1dCB0aGF0J3Mgb2theTsgd2UnbGwgYmUgd29ya2luZyBv ZmYgb2YgY2FjaGVkIHZpc2liaWxpdHkgaW5mbyB0aGF0CisgKiBpbmRpY2F0ZXMgdGhhdCB0aGUg ZGVhZCBUSURzIGFyZSBOT1QgYWxsLXZpc2libGUuCisgKgorICogTm90ZTogV2UgY2Fubm90IGRy b3AgdGhlIHBpbiBlYXJseSB3aGVuIHRoZSBzY2FuIHVzZXMgYSBub24tTVZDQyBzbmFwc2hvdDsK KyAqIHdlIG11c3QgZGVsYXkgaXQgdW50aWwgYWxsIGhlYXAgZmV0Y2hlcyBmb3IgdGhlIGxvYWRl ZCBiYXRjaCBoYXZlIHRha2VuCisgKiBwbGFjZS4gIFRoaXMgaXMgd2h5IHdlIGRvbid0IHN1cHBv cnQgcHJlZmV0Y2hpbmcgZHVyaW5nIHN1Y2ggc2NhbnMuICBTZWUKKyAqIGRvYy9zcmMvc2dtbC9p bmRleGFtLnNnbWwuCisgKgorICogUmVhZCBzdHJlYW0gYWdyZWVtZW50CisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgbXVzdCByZWxpYWJs eSBhZ3JlZSB3aXRoIGhlYXBhbV9nZXRuZXh0X3N0cmVhbQorICogYWJvdXQgd2hpY2ggaGVhcCBi bG9ja3MvVElEcyB3aWxsIHJlcXVpcmUgYSBoZWFwIGZldGNoIChhbmQgd2hpY2ggVElEcworICog d29uJ3QgZHVlIHRvIHBvaW50aW5nIHRvIGFuIGFsbC12aXNpYmxlIGhlYXAgcGFnZSkuICBPdGhl cndpc2Ugd2UgcmlzaworICogYWxsb3dpbmcgdGhlIHJlYWQgc3RyZWFtIHRvIHJldHVybiB1bmV4 cGVjdGVkIGhlYXAgYnVmZmVycy9wYWdlcy4KKyAqCisgKiBDYWNoaW5nIHZpc2liaWxpdHkgaW5m b3JtYXRpb24gdXAgZnJvbnQgYXZvaWRzIHRoYXQgcHJvYmxlbS4gIElmIGEgVk0gYml0CisgKiBp cyBjb25jdXJyZW50bHkgc2V0IChvciB1bnNldCksIGl0IGNhbid0IG1hdHRlciwgc2luY2UgZXZl cnlib2R5IHdpbGwgd29yaworICogb2ZmIG9mIHRoaXMgaW1tdXRhYmxlIGxvY2FsIGNhY2hlLgor ICoKICAqIE5vdGUgb24gTWVtb3J5IE9yZGVyaW5nIEVmZmVjdHMKICAqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KICAqCkBAIC0zNDMsMTEgKzQwNSwxMyBAQCBzdGF0aWMgSW5kZXhT Y2FuQmF0Y2gKIGhlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNoLCBCYXRj aFJpbmdJdGVtUG9zICpwb3MpCiB7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRl eEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwogCUluZGV4U2NhbkJhdGNoIGJh dGNoID0gTlVMTDsKIAlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiBQR19VU0VEX0ZPUl9B U1NFUlRTX09OTFkgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOwogCiAJLyogWFhYOiB3ZSBzaG91bGQg YXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwogCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisJQXNzZXJ0KGRpcmVjdGlvbiA9 PSBoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyKTsKIAogCWlmICghcHJpb3JCYXRjaCkKIAl7CkBA IC0zNzIsNiArNDM2LDEyIEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJewogCQkvKgogCQkgKiBOZXh0IGJhdGNoIGFs cmVhZHkgbG9hZGVkIGZvciB1cy4KKwkJICoKKwkJICogVGhpcyB1c3VhbGx5IGhhcHBlbnMgd2hl biBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQgY2FsbGVyIGZpbmRzCisJCSAqIHRoYXQgaGVhcGFt X2dldG5leHRfc3RyZWFtIGFscmVhZHkgbG9hZGVkIHRoZSBuZXh0IHJlcXVpcmVkIGJhdGNoLgor CQkgKiBCdXQgdGhlcmUgYXJlIGFsc28gY29ybmVyIGNhc2VzIHdoZXJlIGl0IHdvcmtzIHRoZSBv dGhlciB3YXkgYXJvdW5kCisJCSAqIChjYXNlcyB3aGVyZSBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0n cyBwcmVmZXRjaFBvcyBpcyBzbGlnaHRseSBiZWhpbmQKKwkJICogaGVhcGFtX2dldG5leHRfc3Ry ZWFtJ3Mgc2NhblBvcywgYW5kIGNhdGNoZXMgdXAgaGVyZSkuCiAJCSAqLwogCQliYXRjaCA9IGlu ZGV4X3NjYW5fYmF0Y2goc2NhbiwgcG9zLT5iYXRjaCArIDEpOwogCkBAIC0zOTIsNiArNDYyLDcg QEAgaGVhcGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKIAkgKiBidWZmZXIgKGJhdGNoZXMgbXVzdCBzdGF5IGluIHNjYW4gb3JkZXIp LiAgSWYgaXQgaXNuJ3QgdGhlbiB3ZSBzaG91bGQKIAkgKiBoYXZlIGFscmVhZHkgcmV0dXJuZWQg c29tZSBleGlzdGluZyBsb2FkZWQgYmF0Y2ggZWFybGllci4KIAkgKi8KKwlBc3NlcnQoIWhzY2Fu LT54c19wYXVzZWQpOwogCUFzc2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKIAlB c3NlcnQoIXByaW9yQmF0Y2ggfHwKIAkJICAgKGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2Nhbikg PiAwICYmIHByaW9yQmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24gJiYKQEAgLTQyOCw2ICs0OTksNDEg QEAgaGVhcGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKIAkJCVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CiAJCQliYXRjaC0+YnVm ID0gSW52YWxpZEJ1ZmZlcjsKIAkJfQorCisJCS8qCisJCSAqIFJlc2V0IHhzX3lpZWxkX2NoZWNr LCB0byBhbGxvdyBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0gdG8gY29uc2lkZXIgaWYKKwkJICogd2Ug c2hvdWxkIHlpZWxkIG9uIG91ciBuZXdseSBhY3F1aXJlZCBiYXRjaAorCQkgKi8KKwkJaHNjYW4t PnhzX3lpZWxkX2NoZWNrID0gZmFsc2U7CisKKwkJLyoKKwkJICogRGVsYXkgaW5pdGlhbGl6aW5n IHN0cmVhbSB1bnRpbCByZWFkaW5nIGZyb20gc2NhbidzIHNlY29uZCBiYXRjaC4KKwkJICogVGhp cyBoZXVyaXN0aWMgYXZvaWRzIHdhc3RpbmcgY3ljbGVzIG9uIHN0YXJ0aW5nIGEgcmVhZCBzdHJl YW0gZm9yCisJCSAqIHZlcnkgc2VsZWN0aXZlIGluZGV4IHNjYW5zLiAgV2UgY2FuIGxpa2VseSBp bXByb3ZlIHVwb24gdGhpcywgYnV0CisJCSAqIGl0IHdvcmtzIHdlbGwgZW5vdWdoIGZvciBub3cu CisJCSAqCisJCSAqIEFsc28gYXZvaWQgcHJlZmV0Y2hpbmcgZHVyaW5nIHNjYW5zIHdoZXJlIHdl J3JlIHVuYWJsZSB0byBkcm9wIGVhY2gKKwkJICogYmF0Y2gncyBidWZmZXIgcGluIHJpZ2h0IGF3 YXkgKG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdlIGFyZQorCQkgKiBub3QgcHJlcGFyZWQg dG8gc2Vuc2libHkgbGltaXQgdGhlIHRvdGFsIG51bWJlciBvZiBidWZmZXIgcGlucyBoZWxkCisJ CSAqIChyZWFkIHN0cmVhbSBoYW5kbGVzIGFsbCBwaW4gcmVzb3VyY2UgbWFuYWdlbWVudCBmb3Ig dXMsIGFuZCBrbm93cworCQkgKiBub3RoaW5nIGFib3V0IHBpbnMgaGVsZCBvbiBpbmRleCBwYWdl cy93aXRoaW4gYmF0Y2hlcykuCisJCSAqCisJCSAqIEFsc28gZGVsYXkgY3JlYXRpbmcgYSByZWFk IHN0cmVhbSBkdXJpbmcgaW5kZXgtb25seSBzY2FucyB0aGF0CisJCSAqIGhhdmVuJ3QgZG9uZSBh bnkgaGVhcCBmZXRjaGVzIHlldC4gIFdlIGRvbid0IHdhbnQgdG8gd2FzdGUgYW55CisJCSAqIGN5 Y2xlcyBvbiBhbGxvY2F0aW5nIGEgcmVhZCBzdHJlYW0gdW50aWwgd2UgaGF2ZSBhIGRlbW9uc3Ry YXRlZAorCQkgKiBuZWVkIGZvciBwZXJmb3JtIGhlYXAgZmV0Y2hlcy4KKwkJICovCisJCWlmICgh aHNjYW4tPnhzX3JlYWRfc3RyZWFtICYmIHByaW9yQmF0Y2ggJiYgc2Nhbi0+TVZDQ1NjYW4gJiYK KwkJCWhzY2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyICYmCS8qIGZvciBpbmRleC1v bmx5IHNjYW5zICovCisJCQlpb19tZXRob2QgIT0gSU9NRVRIT0RfU1lOQyAmJiBlbmFibGVfaW5k ZXhzY2FuX3ByZWZldGNoKQorCQl7CisJCQlBc3NlcnQoIWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQ b3MudmFsaWQpOworCisJCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW0gPQorCQkJCXJlYWRfc3RyZWFt X2JlZ2luX3JlbGF0aW9uKFJFQURfU1RSRUFNX0RFRkFVTFQsIE5VTEwsCisJCQkJCQkJCQkJICAg c2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkJICAgaGVhcGFtX2dl dG5leHRfc3RyZWFtLCBzY2FuLCAwKTsKKwkJfQogCX0KIAllbHNlCiAJewpAQCAtNDUyLDYgKzU1 OCw0MyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCXJldHVybiBiYXRjaDsKIH0KIAorLyoKKyAqIEhhbmRsZSBhIGNo YW5nZSBpbiBpbmRleCBzY2FuIGRpcmVjdGlvbiAoYXQgdGhlIHR1cGxlIGdyYW51bGFyaXR5KS4K KyAqCisgKiBSZXNldHMgdGhlIHJlYWQgc3RyZWFtLCBzaW5jZSB3ZSBjYW4ndCByZWx5IG9uIHNj YW5Qb3MgY29udGludWluZyB0byBhZ3JlZQorICogd2l0aCB0aGUgYmxvY2tzIHRoYXQgcmVhZCBz dHJlYW0gYWxyZWFkeSBjb25zdW1lZCB1c2luZyBwcmVmZXRjaFBvcy4KKyAqLworc3RhdGljIHBn X25vaW5saW5lIHZvaWQKK2hlYXBhbV9kaXJjaGFuZ2VfcmVhZHN0cmVhbV9yZXNldChJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkgIEJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5n YnVmLAorCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCS8qIFJlc2V0IHJl YWQgc3RyZWFtIHN0YXRlICovCisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZh bHNlOworCWhzY2FuLT54c195aWVsZF9jaGVjayA9IGZhbHNlOworCWhzY2FuLT54c19wYXVzZWQg PSBmYWxzZTsKKwloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gTm9Nb3ZlbWVudFNjYW5EaXJl Y3Rpb247CS8qIHNlZSBub3RlIGJlbG93ICovCisKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBpdHNl bGYgKi8KKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCQlyZWFkX3N0cmVhbV9yZXNldCho c2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCisJLyoKKwkgKiBGaW5hbGx5LCByZW1lbWJlciBuZXcg c2NhbiBkaXJlY3Rpb24uCisJICoKKwkgKiBOb3RlOiB3ZSBuZWVkZWQgdG8gc2V0IHhzX3JlYWRf c3RyZWFtX2RpciB0byBOb01vdmVtZW50U2NhbkRpcmVjdGlvbgorCSAqIG1vbWVudGFyaWx5IHRv IGF2b2lkIHNwdXJpb3VzbHkgcHJlZmV0Y2hpbmcgbW9yZSBibG9ja3MgZnJvbSB3aXRoaW4gdGhl CisJICogcmVhZCBzdHJlYW0gY2FsbGJhY2suICBPbmNlIHdlIHJldHVybiwgdGhlIHJlYWQgc3Ry ZWFtIGNhbiBiZSB1c2VkIHRvCisJICogZmV0Y2ggYmxvY2tzIGluIHRoZSBvcHBvc2l0ZSBzY2Fu IGRpcmVjdGlvbi4KKwkgKgorCSAqIE5vdGU6IGlmZiB0aGUgc2NhbiBfY29udGludWVzXyBpbiB0 aGlzIG5ldyBkaXJlY3Rpb24sIGFuZCBhY3R1YWxseQorCSAqIHN0ZXBzIG9mZiBzY2FuQmF0Y2gg dG8gYW4gZWFybGllciBpbmRleCBwYWdlLCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dCB3aWxsCisJICog ZGVhbCB3aXRoIGl0LiAgQnV0IHRoYXQgbWlnaHQgbmV2ZXIgaGFwcGVuOyB0aGUgc2NhbiBtaWdo dCB5ZXQgY2hhbmdlCisJICogZGlyZWN0aW9uIGFnYWluIChvciBqdXN0IGVuZCBiZWZvcmUgcmV0 dXJuaW5nIG1vcmUgaXRlbXMpLgorCSAqLworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBk aXJlY3Rpb247Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQloZWFwYW1fYmF0Y2hfZ2V0 bmV4dF90aWQgLSBnZXQgbmV4dCBUSUQgZnJvbSBiYXRjaCByaW5nIGJ1ZmZlcgogICoKQEAgLTQ2 OCw5ICs2MTEsMTYgQEAgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2gg PSBOVUxMOwogCiAJLyogc2NhbiBzaG91bGQgb25seSBiZSBwYXVzZWQgd2hlbiB0aGVyZSdzIG5v IGZyZWUgYmF0Y2ggc2xvdHMgKi8KKwlBc3NlcnQoIWhzY2FuLT54c19wYXVzZWQgfHwgaW5kZXhf c2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKIAlBc3NlcnQoIXNjYW5Qb3MtPnZhbGlkIHx8IGJhdGNo cmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKIAlBc3NlcnQoc2NhblBvcy0+ dmFsaWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAwKTsKIAorCS8qIEhhbmRs ZSByZXNldHRpbmcgdGhlIHJlYWQgc3RyZWFtIHdoZW4gc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyAq LworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0 aW9uKQorCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOwkvKiBmaXJzdCBj YWxsICovCisJZWxzZSBpZiAodW5saWtlbHkoaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciAhPSBk aXJlY3Rpb24pKQorCQloZWFwYW1fZGlyY2hhbmdlX3JlYWRzdHJlYW1fcmVzZXQoaHNjYW4sIGJh dGNocmluZ2J1ZiwgZGlyZWN0aW9uKTsKKwogCS8qCiAJICogQ2hlY2sgaWYgdGhlcmUncyBhbiBl eGlzdGluZyBsb2FkZWQgc2NhbkJhdGNoIGZvciB1cyB0byByZXR1cm4gdGhlIG5leHQKIAkgKiBt YXRjaGluZyBpdGVtJ3MgVElEL2luZGV4IHR1cGxlIGZyb20KQEAgLTQ3OSw3ICs2MjksNyBAQCBo ZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuLAogCXsKIAkJLyoKIAkJICogc2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJh dGNoIG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZwotCQkgKiBidWZmZXIuICBX ZSByZWx5IG9uIHRoYXQgaGVyZS4KKwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUg KGNhbid0IGRvIHRoaXMgd2l0aCBwcmVmZXRjaEJhdGNoKS4KIAkJICovCiAJCUFzc2VydChiYXRj aHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CiAKQEAgLTUyMiwyMSArNjcy LDMwOSBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuLAogCXsKIAkJSW5kZXhTY2FuQmF0Y2ggaGVhZEJhdGNoID0g aW5kZXhfc2Nhbl9iYXRjaChzY2FuLAogCQkJCQkJCQkJCQkJCWJhdGNocmluZ2J1Zi0+aGVhZEJh dGNoKTsKKwkJQmF0Y2hSaW5nSXRlbVBvcyAqcHJlZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5w cmVmZXRjaFBvczsKIAogCQkvKiBBbHNvIGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRjaCAodW5s ZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCiAJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNo KHNjYW4sIGhlYWRCYXRjaCk7CiAKKwkJLyoKKwkJICogSWYgd2UncmUgYWJvdXQgdG8gcmVsZWFz ZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBvcyBjdXJyZW50bHkKKwkJICogcG9pbnRzIHRvLCBq dXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBXZSdsbCByZWluaXRpYWxpemUgaXQKKwkJICog dXNpbmcgc2NhblBvcyBpZiBhbmQgd2hlbiBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0gaXMgbmV4dCBj YWxsZWQuIChXZQorCQkgKiBtdXN0IGF2b2lkIGNvbmZ1c2luZyBhIHByZWZldGNoUG9zLT5iYXRj aCB0aGF0J3MgYWN0dWFsbHkgYmVmb3JlCisJCSAqIGhlYWRCYXRjaCB3aXRoIG9uZSB0aGF0J3Mg YWZ0ZXIgbmV4dEJhdGNoIGR1ZSB0byB1aW50OCBvdmVyZmxvdzsKKwkJICogc2ltcGxlc3Qgd2F5 IGlzIHRvIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgbGlrZSB0aGlzLikKKwkJICovCisJCWlmIChw cmVmZXRjaFBvcy0+dmFsaWQgJiYKKwkJCXByZWZldGNoUG9zLT5iYXRjaCA9PSBiYXRjaHJpbmdi dWYtPmhlYWRCYXRjaCkKKwkJCXByZWZldGNoUG9zLT52YWxpZCA9IGZhbHNlOworCiAJCS8qIFJl bW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmluZyBidWZmZXIgKi8KIAkJYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2grKzsKKworCQlpZiAoaHNjYW4tPnhzX3BhdXNlZCkKKwkJeworCQkJLyoKKwkJCSAq IFRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0gd2FzIHBhdXNlZCBieSBoZWFwYW1fZ2V0bmV4dF9zdHJl YW0gZHVlCisJCQkgKiB0byBleGhhdXN0aW5nIGFsbCBhdmFpbGFibGUgZnJlZSBiYXRjaCBzbG90 cy4gIFdlIGp1c3QgZnJlZWQgdXAKKwkJCSAqIG9uZSBzdWNoIHNsb3Qgbm93LCB0aG91Z2guICBS ZXN1bWUgdGhlIHJlYWQgc3RyZWFtIHRvIHJlLWVuYWJsZQorCQkJICogcHJlZmV0Y2hpbmcuCisJ CQkgKi8KKwkJCUFzc2VydCghaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKTsKKwkJCXJlYWRf c3RyZWFtX3Jlc3VtZShoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCQkJaHNjYW4tPnhzX3BhdXNl ZCA9IGZhbHNlOworCQl9CiAJfQogCiAJLyogSW4gcHJhY3RpY2Ugc2NhbkJhdGNoIHdpbGwgYWx3 YXlzIGJlIHRoZSByaW5nIGJ1ZmZlcidzIGhlYWRCYXRjaCAqLwogCUFzc2VydChiYXRjaHJpbmdi dWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7Ci0JQXNzZXJ0KCFoc2Nhbi0+eHNfeWll bGRlZCAmJiAhaHNjYW4tPnhzX3BhdXNlZCk7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsK IAogCXJldHVybiBoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChzY2FuLCBzY2FuQmF0Y2gsIHNjYW5Q b3MpOwogfQogCisvKgorICogaGVhcGFtX2dldG5leHRfc3RyZWFtCisgKgkJcmV0dXJuIHRoZSBu ZXh0IGJsb2NrIHRvIHBhc3MgdG8gdGhlIHJlYWQgc3RyZWFtCisgKgorICogVGhlIGluaXRpYWwg YmF0Y2ggaXMgYWx3YXlzIGxvYWRlZCBieSBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQuICBXZSBk b24ndAorICogZ2V0IGNhbGxlZCB1bnRpbCB0aGUgZmlyc3QgcmVhZF9zdHJlYW1fbmV4dF9idWZm ZXIoKSBjYWxsLCB3aGVuIGEgaGVhcAorICogYmxvY2sgaXMgcmVxdWVzdGVkIGZyb20gdGhlIHNj YW4ncyBzdHJlYW0gZm9yIHRoZSBmaXJzdCB0aW1lLgorICoKKyAqIFRoZSBwb3NpdGlvbiBvZiB0 aGUgcmVhZF9zdHJlYW0gaXMgc3RvcmVkIGluIHByZWZldGNoUG9zLiAgSXQgaXMgdHlwaWNhbCBm b3IKKyAqIHByZWZldGNoUG9zIHRvIGNvbnNpc3RlbnRseSBzdGF5IGFoZWFkIG9mIHRoZSBzY2Fu UG9zIHBvc2l0aW9uIHRoYXQncyB1c2VkIHRvCisgKiB0cmFjayB0aGUgbmV4dCBUSUQgdG8gYmUg cmV0dXJuZWQgdG8gdGhlIHNjYW4gYnkgaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkCisgKiBhZnRl ciB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgY2FsbGVkLiAgSG93ZXZlciwgdGhhdCBpc24ndCBhIHBy ZWNvbmRpdGlvbi4KKyAqIFRoZXJlIGlzIGEgc3RyaWN0IHBvc3Rjb25kaXRpb24sIHRob3VnaDog d2hlbiB3ZSByZXR1cm4gd2UnbGwgYWx3YXlzIGxlYXZlCisgKiBzY2FuUG9zIDw9IHByZWZldGNo UG9zIChleGNlcHQgaW4gY2FzZXMgd2hlcmUgd2UgcmV0dXJuIEludmFsaWRCbG9ja051bWJlciku CisgKi8KK3N0YXRpYyBCbG9ja051bWJlcgoraGVhcGFtX2dldG5leHRfc3RyZWFtKFJlYWRTdHJl YW0gKnN0cmVhbSwgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkgIHZvaWQgKnBl cl9idWZmZXJfZGF0YSkKK3sKKwlJbmRleFNjYW5EZXNjIHNjYW4gPSAoSW5kZXhTY2FuRGVzYykg Y2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5k ZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlCYXRjaFJpbmdCdWZmZXIg KmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAq c2NhblBvcyA9ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqcHJl ZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvczsKKwlTY2FuRGlyZWN0aW9uIHhz X3JlYWRfc3RyZWFtX2RpciA9IGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXI7CisJSW5kZXhTY2Fu QmF0Y2ggcHJlZmV0Y2hCYXRjaDsKKwlib29sCQlmcm9tU2NhblBvcyA9IGZhbHNlOworCisJQXNz ZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsKKworCWlmICh4c19yZWFkX3N0cmVhbV9kaXIgPT0gTm9N b3ZlbWVudFNjYW5EaXJlY3Rpb24pCisJeworCQkvKgorCQkgKiBDYWxsZWQgZnJvbSByZWFkX3N0 cmVhbV9yZXNldCBvciByZWFkX3N0cmVhbV9lbmQuICBEb24ndCByZXR1cm4KKwkJICogYWRkaXRp b25hbCBoZWFwIGJsb2NrcyAoYXQgbGVhc3QgdW50aWwgdGhlIHNjYW4gZGlyZWN0aW9uIGlzIHNl dCB0bworCQkgKiBGb3J3YXJkU2NhbkRpcmVjdGlvbi9CYWNrd2FyZFNjYW5EaXJlY3Rpb24gb25j ZSBhZ2FpbikuCisJCSAqCisJCSAqIFhYWCBXZSBvbmx5IG5lZWQgdGhpcyBoYW5kbGluZyB0byB3 b3JrIGFyb3VuZCBhIGJ1ZyBpbiB0aGUKKwkJICogcmVhZF9zdHJlYW1fcGF1c2UgbWVjaGFuaXNt LgorCQkgKi8KKwkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwl9CisKKwkvKgorCSAqIHNj YW5Qb3MgbXVzdCBhbHdheXMgYmUgdmFsaWQgd2hlbiBwcmVmZXRjaGluZyB0YWtlcyBwbGFjZS4g IFRoZXJlIGhhcworCSAqIHRvIGJlIGF0IGxlYXN0IG9uZSBiYXRjaCwgbG9hZGVkIGFzIG91ciBz Y2FuQmF0Y2guCisJICovCisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAw KTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQpOworCisJLyoKKwkgKiBwcmVmZXRjaFBvcyBtaWdo dCBub3QgeWV0IGJlIHZhbGlkLiAgSXQgbWlnaHQgaGF2ZSBhbHNvIGZhbGxlbiBiZWhpbmQKKwkg KiBzY2FuUG9zLiAgRGVhbCB3aXRoIGJvdGguCisJICoKKwkgKiBJZiBwcmVmZXRjaFBvcyBoYXMg bm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCB0aGF0IHR5cGljYWxseSBpbmRpY2F0ZXMKKwkgKiB0 aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuLiAgV2Ug aW5pdGlhbGl6ZQorCSAqIHByZWZldGNoUG9zIHVzaW5nIHRoZSBjdXJyZW50IHNjYW5Qb3MsIHNp bmNlIHRoZSBjdXJyZW50IHNjYW5CYXRjaAorCSAqIGl0ZW0ncyBUSUQgc2hvdWxkIGhhdmUgaXRz IGJsb2NrIG51bWJlciByZXR1cm5lZCBieSB0aGUgcmVhZCBzdHJlYW0KKwkgKiBmaXJzdC4gIEl0 J3MgbGlrZWx5IHRoYXQgcHJlZmV0Y2hQb3Mgd2lsbCBnZXQgYWhlYWQgb2Ygc2NhblBvcyBiZWZv cmUKKwkgKiBsb25nLCBidXQgdGhhdCBoYXNuJ3QgaGFwcGVuZWQgeWV0LgorCSAqCisJICogSXQn cyBhbHNvIHBvc3NpYmxlIGZvciBwcmVmZXRjaFBvcyB0byAiZmFsbCBiZWhpbmQiIHNjYW5Qb3Ms IGF0IGxlYXN0CisJICogaW4gYSB0cml2aWFsIHNlbnNlOiBpZiBtYW55IGFkamFjZW50IGl0ZW1z IGFyZSByZXR1cm5lZCB0aGF0IGNvbnRhaW4KKwkgKiBUSURzIHRoYXQgcG9pbnQgdG8gdGhlIHNh bWUgaGVhcCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFsbHkgb3ZlcnRha2UKKwkgKiBwcmVmZXRj aFBvcyAocHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1bnRpbCB0aGUgc2NhbiBhY3R1YWxseSBj YWxscworCSAqIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKS4gIFJlaW5pdGlhbGl6aW5nIGZyb20g c2NhblBvcyBpcyBlbm91Z2ggdG8KKwkgKiBlbnN1cmUgdGhhdCBwcmVmZXRjaFBvcyBzdGlsbCBm ZXRjaGVzIHRoZSBuZXh0IGhlYXAgYmxvY2sgdGhhdCBzY2FuUG9zCisJICogd2lsbCByZXF1aXJl IChwcmVmZXRjaFBvcyBjYW4gbmV2ZXIgZmFsbCBiZWhpbmQgImJ5IG1vcmUgdGhhbiBvbmUgZ3Jv dXAKKwkgKiBvZiBpdGVtcyB0aGF0IGFsbCBwb2ludCB0byB0aGUgc2FtZSBoZWFwIGJsb2NrIiwg c28gdGhpcyBpcyBzYWZlKS4KKwkgKgorCSAqIE5vdGU6IHdoZW4gaGVhcGFtX2JhdGNoX2dldG5l eHRfdGlkIGZyZWVzIGEgYmF0Y2ggdGhhdCBwcmVmZXRjaFBvcworCSAqIHBvaW50cyB0bywgaXQn bGwgaW52YWxpZGF0ZSBwcmVmZXRjaFBvcyBmb3IgdXMuICBUaGlzIHJlbW92ZXMgYW55CisJICog ZGFuZ2VyIG9mIHByZWZldGNoUG9zLmJhdGNoIGZhbGxpbmcgc28gZmFyIGJlaGluZCBzY2FuUG9z LmJhdGNoIHRoYXQgaXQKKwkgKiB3cmFwcyBhcm91bmQgKGFuZCBhcHBlYXJzIHRvIGJlIGFoZWFk IG9mIHNjYW5Qb3MgaW5zdGVhZCBvZiBiZWhpbmQgaXQpLgorCSAqLworCWlmICghcHJlZmV0Y2hQ b3MtPnZhbGlkIHx8CisJCWluZGV4X3NjYW5fcG9zX2NtcChwcmVmZXRjaFBvcywgc2NhblBvcywg eHNfcmVhZF9zdHJlYW1fZGlyKSA8IDApCisJeworCQloc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2sg PSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCSpwcmVmZXRjaFBvcyA9ICpzY2FuUG9zOworCQlmcm9t U2NhblBvcyA9IHRydWU7CisJfQorCisJLyoKKwkgKiBDb25zaWRlciBpZiB3ZSBuZWVkIHRvIHlp ZWxkLCBpZiB3ZSBoYXZlbid0IGRvbmUgc28gYWxyZWFkeSBmb3IgdGhpcworCSAqIHByZWZldGNo QmF0Y2guICBXaGVuIHdlIHlpZWxkLCB0aGUgc2NhbiB3aWxsIHJldHVybiBhdCBsZWFzdCBvbmUg bW9yZQorCSAqIHNjYW5Qb3MgaXRlbSwgb2Z0ZW4gc2V2ZXJhbCBtb3JlIChwYXJ0aWN1bGFybHkg ZHVyaW5nIHNjYW5zIG9mIGluZGV4ZXMKKwkgKiB3aXRoIGhpZ2ggcGh5c2ljYWwvbG9naWNhbCBj b3JyZWxhdGlvbiwgd2hlcmUgYmF0Y2hlcyBjb250YWluIGdyb3VwcyBvZgorCSAqIGFkamFjZW50 IGl0ZW1zIHdob3NlIFRJRHMgYWxsIHBvaW50IHRvIHRoZSBzYW1lIGhlYXAgcGFnZSkuCisJICoK KwkgKiBQcmVmZXRjaGluZyBjYW4gY29udGludWUgb25jZSB0aGUgc2NhbiByZXF1ZXN0cyB0aGUg YnVmZmVyIGZvciB0aGUgbmV4dAorCSAqIGVucXVldWVkIGhlYXAgYmxvY2sgYnkgY2FsbGluZyBy ZWFkX3N0cmVhbV9uZXh0X2J1ZmZlci4gIFdlIHdlaWdoIHRoZQorCSAqIG5lZWQgdG8ga2VlcCB0 aGUgc2NhbiByZXNwb25zaXZlICh0byBhdm9pZCBzZW5zZWxlc3NseSBkb2luZyBhIGxhcmdlCisJ ICogYW1vdW50IG9mIHdvcmsgd2hlbiB3ZSBzaG91bGQganVzdCByZXR1cm4gYSBzY2FuUG9zIHR1 cGxlIGltbWVkaWF0ZWx5KQorCSAqIGFnYWluc3QgdGhlIG5lZWQgZm9yIHRoZSByZWFkIHN0cmVh bSB0byBtYWludGFpbiBpdHMgcHJlZmV0Y2ggZGlzdGFuY2UKKwkgKiAoaWYgd2UgcGF1c2UgdG9v IG11Y2ggaXQnbGwgaHVydCB0aGUgc3RyZWFtJ3MgYWJpbGl0eSB0byBtYWludGFpbiBhCisJICog c3VmZmljaWVudCBwcmVmZXRjaCBkaXN0YW5jZSB3aGVuIEkvTyBib3VuZCkuCisJICoKKwkgKiBL ZWVwaW5nIHRoZSBzY2FuIHJlc3BvbnNpdmUgaXMgaW1wb3J0YW50IGR1cmluZyBpbmRleC1vbmx5 IHNjYW5zIHRoYXQKKwkgKiByZXF1aXJlIG9ubHkgYSBmZXcgaGVhcCBmZXRjaGVzLiAgSXQgYWxz byBtYXR0ZXJzIHdoZW4gYWxsb3dpbmcgdGhlCisJICogc2NhbiB0byByZXR1cm4ganVzdCBhIGZl dyBtb3JlIGl0ZW1zIGhhcyB0aGUgcG90ZW50aWFsIHRvIGFsbG93IHRoZQorCSAqIHNjYW4gdG8g ZW5kIGVudGlyZWx5IChlLmcuLCB3aXRoIGFuIE9SREVSIEJZIC4uLiBMSU1JVCBOLCBvciB3aXRo aW4gYQorCSAqIHNjYW4gdGhhdCBmZWVkcyBpbnRvIGEgbWVyZ2Ugam9pbikuCisJICovCisJZWxz ZSBpZiAoIWhzY2FuLT54c195aWVsZF9jaGVjaykKKwl7CisJCWludDgJCWJhdGNoZGlzdGFuY2Ug PSBpbmRleF9zY2FuX3Bvc19iYXRjaF9kaXN0YW5jZShwcmVmZXRjaFBvcywKKwkJCQkJCQkJCQkJ CQkJCQkgIHNjYW5Qb3MpOworCisJCS8qCisJCSAqIFdlIGhhdmVuJ3QgeWllbGRlZCBmb3IgdGhp cyBwcmVmZXRjaEJhdGNoIHlldC4gU2hvdWxkIHdlPworCQkgKgorCQkgKiBEdXJpbmcgSS9PIGJv dW5kIHNjYW5zIGl0J3MgdHlwaWNhbCBmb3IgdGhlIGRpc3RhbmNlIGJldHdlZW4KKwkJICogc2Nh blBvcyBhbmQgcHJlZmV0Y2hQb3MgdG8gZ3JvdyByYXBpZGx5IGF0IGZpcnN0LCBhbmQgdGhlbgor CQkgKiBzdGFiaWxpemUgYXQgc29tZSBmaXhlZCBsZXZlbCBmb3IgdGhlIHJlbWFpbmRlciBvZiB0 aGUgc2Nhbi4KKwkJICovCisJCWhzY2FuLT54c195aWVsZF9jaGVjayA9IHRydWU7CisJCWlmIChi YXRjaGRpc3RhbmNlID09IDApCisJCXsKKwkJCS8qCisJCQkgKiBOZXZlciBhY3R1YWxseSB5aWVs ZCB3aGVuIHByZWZldGNoQmF0Y2ggaXMgYWxzbyBzY2FuQmF0Y2guCisJCQkgKiBBc3N1bWUgdGhh dCB0aGUgc2NhbiBpcyBlaXRoZXIgYWxyZWFkeSBhcyByZXNwb25zaXZlIGFzIGNhbgorCQkJICog cmVhc29uYWJseSBiZSBleHBlY3RlZCwgb3IgdGhhdCBpdCdzIHN0aWxsIHRvbyBlYXJseSB0byB0 ZWxsLgorCQkJICovCisJCX0KKwkJZWxzZSBpZiAoYmF0Y2hkaXN0YW5jZSA8PSAyKQorCQl7CisJ CQkvKgorCQkJICogcHJlZmV0Y2hCYXRjaCBpcyBhaGVhZCBvZiBzY2FuQmF0Y2gsIGJ1dCBvbmx5 IGJ5IG9uZSBvciB0d28KKwkJCSAqIGJhdGNoZXMuICBJZiB0aGUgcmVhZCBzdHJlYW0gaXMgY3Vy cmVudGx5IHVzaW5nIGl0cyBmYXN0IHBhdGgsCisJCQkgKiB5aWVsZC4gIFRoaXMgYXNzdW1lcyB0 aGF0IHRoZSByaXNrIG9mIGNhbGxpbmcgYW1nZXRiYXRjaCB0b28KKwkJCSAqIGVhZ2VybHkgbm93 IG91dHdlaWdocyB0aGUgcmlzayBvZiB5aWVsZGluZyBub3RpY2VhYmx5IGltcGVkaW5nCisJCQkg KiByZWFkIHN0cmVhbSdzIGFiaWxpdHkgdG8gZ2V0IHRvIGFuIGFkZXF1YXRlIHByZWZldGNoIGRp c3RhbmNlLgorCQkJICovCisJCQlpZiAocmVhZF9zdHJlYW1fdXNlc19mYXN0X3BhdGgoc3RyZWFt KSkKKwkJCQlyZXR1cm4gcmVhZF9zdHJlYW1feWllbGQoc3RyZWFtKTsKKworCQkJLyoKKwkJCSAq IERvbid0IHlpZWxkIHlldCAtLSBhdCBsZWFzdCBub3QgdW50aWwgYmF0Y2hkaXN0YW5jZSBjYW4g Z3JvdyB0bworCQkJICogdGhyZWUgb3IgbW9yZSBiYXRjaGVzLiAgVGhlcmUncyBubyBwb2ludCBp biBvdXIgeWllbGRpbmcgaWYKKwkJCSAqIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZSB3aWxsIGhh dmUgdG8gd2FpdCBmb3IgdGhlIG5leHQgYmxvY2suCisJCQkgKi8KKwkJfQorCQllbHNlCisJCXsK KwkJCS8qCisJCQkgKiBwcmVmZXRjaEJhdGNoIGlzIGFoZWFkIG9mIHNjYW5CYXRjaCBieSB0aHJl ZSBvciBtb3JlIGJhdGNoZXMsCisJCQkgKiBzbyB5aWVsZCB1bmNvbmRpdGlvbmFsbHkuICAoVGhl IHJpc2sgb2YgeWllbGRpbmcgaW1wZWRpbmcgcmVhZAorCQkJICogc3RyZWFtJ3MgYWJpbGl0eSB0 byBtYWludGFpbiBhbiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZSBpcworCQkJICogcmVsYXRp dmVseSBzbWFsbC4pCisJCQkgKi8KKwkJCXJldHVybiByZWFkX3N0cmVhbV95aWVsZChzdHJlYW0p OworCQl9CisJfQorCisJcHJlZmV0Y2hCYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJl ZmV0Y2hQb3MtPmJhdGNoKTsKKwlmb3IgKDs7KQorCXsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0 ZW07CisJCUJsb2NrTnVtYmVyIHByZWZldGNoX2Jsb2NrOworCisJCWlmIChmcm9tU2NhblBvcykK KwkJeworCQkJLyoKKwkJCSAqIERvbid0IGluY3JlbWVudCBpdGVtIHdoZW4gcHJlZmV0Y2hQb3Mg d2FzIGp1c3QgaW5pdGlhbGl6ZWQKKwkJCSAqIHVzaW5nIHNjYW5Qb3MuICBXZSdsbCByZXR1cm4g dGhlIHNjYW5Qb3MgaXRlbSdzIGhlYXAgYmxvY2sKKwkJCSAqIGRpcmVjdGx5IG9uIHRoZSBmaXJz dCBjYWxsIGhlcmUuICBJbiBvdGhlciB3b3Jkcywgd2UnbGwgcmV0dXJuCisJCQkgKiB0aGUgaGVh cCBibG9jayBmb3IgdGhlIFRJRCBwYXNzZWQgdG8gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlCisJ CQkgKiBhdCB0aGUgcG9pbnQgd2hlcmUgaXQgY2FsbGVkIHJlYWRfc3RyZWFtX25leHRfYnVmZmVy IGZvciB0aGUKKwkJCSAqIGZpcnN0IHRpbWUgZHVyaW5nIHRoZSBzY2FuLgorCQkJICovCisJCQlm cm9tU2NhblBvcyA9IGZhbHNlOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9zY2FuX3Bvc19hZHZh bmNlKHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwgcHJlZmV0 Y2hQb3MpKQorCQl7CisJCQkvKgorCQkJICogUmFuIG91dCBvZiBpdGVtcyBmcm9tIHByZWZldGNo QmF0Y2guICBUcnkgdG8gYWR2YW5jZSB0byB0aGUKKwkJCSAqIHNjYW4ncyBuZXh0IGJhdGNoLgor CQkJICovCisJCQlpZiAodW5saWtlbHkoaW5kZXhfc2Nhbl9iYXRjaF9mdWxsKHNjYW4pKSkKKwkJ CXsKKwkJCQkvKgorCQkJCSAqIENhbid0IGFkdmFuY2UgcHJlZmV0Y2hCYXRjaCBiZWNhdXNlIGFs bCBhdmFpbGFibGUKKwkJCQkgKiBiYXRjaHJpbmdidWYgYmF0Y2ggc2xvdHMgYXJlIGN1cnJlbnRs eSBpbiB1c2UuCisJCQkJICoKKwkJCQkgKiBEZWFsIHdpdGggdGhpcyBieSBtb21lbnRhcmlseSBw YXVzaW5nIHRoZSByZWFkIHN0cmVhbS4KKwkJCQkgKiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQg d2lsbCByZXN1bWUgdGhlIHJlYWQgc3RyZWFtIGxhdGVyLAorCQkJCSAqIHRob3VnaCBvbmx5IGFm dGVyIHNjYW5Qb3MgaGFzIGNvbnN1bWVkIGFsbCByZW1haW5pbmcgaXRlbXMKKwkJCQkgKiBmcm9t IHNjYW5CYXRjaCAoYXQgd2hpY2ggcG9pbnQgc2NhbkJhdGNoIHdpbGwgYmUgZnJlZWQsCisJCQkJ ICogbWFraW5nIGl0cyBzbG90IGF2YWlsYWJsZSBmb3IgcmV1c2UgYnkgYSBsYXRlciBiYXRjaCku CisJCQkJICoKKwkJCQkgKiBJbiBwcmFjdGljZSB3ZSBoYXJkbHkgZXZlciBuZWVkIHRvIGRvIHRo aXMgKGl0IGhhcHBlbnMgZmFyCisJCQkJICogbGVzcyBvZnRlbiB0aGFuIHlpZWxkaW5nKS4gIEl0 IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGF2b2lkCisJCQkJICogdGhlIG5lZWQgdG8gcGF1c2UgdGhl IHJlYWQgc3RyZWFtIGJ5IGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcKKwkJCQkgKiBzbG90cywgYnV0 IHRoYXQgd291bGQgYWRkIGNvbXBsZXhpdHkgZm9yIG5vIHJlYWwgYmVuZWZpdC4KKwkJCQkgKi8K KwkJCQloc2Nhbi0+eHNfcGF1c2VkID0gdHJ1ZTsKKwkJCQloc2Nhbi0+eHNfeWllbGRfY2hlY2sg PSB0cnVlOwkvKiBza2lwIGNoZWNrIG9uIG5leHQgY2FsbAorCQkJCQkJCQkJCQkJICogaGVyZSAq LworCQkJCXJldHVybiByZWFkX3N0cmVhbV9wYXVzZShzdHJlYW0pOworCQkJfQorCisJCQlwcmVm ZXRjaEJhdGNoID0gaGVhcGFtX2JhdGNoX2dldG5leHQoc2NhbiwgeHNfcmVhZF9zdHJlYW1fZGly LAorCQkJCQkJCQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKTsKKwkJCWlmICghcHJl ZmV0Y2hCYXRjaCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEZhaWxlZCB0byBsb2FkIG5leHQgYmF0 Y2gsIHNvIGFsbCB0aGUgYmF0Y2hlcyB0aGF0IHRoZSBzY2FuCisJCQkJICogd2lsbCBldmVyIHJl cXVpcmUgKGJhcnJpbmcgYSBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24pIGFyZQorCQkJCSAqIG5v dyBsb2FkZWQKKwkJCQkgKi8KKwkJCQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworCQkJfQor CisJCQkvKiBQb3NpdGlvbiBwcmVmZXRjaFBvcyB0byB0aGUgc3RhcnQgb2YgbmV3IHByZWZldGNo QmF0Y2ggKi8KKwkJCWluZGV4X3NjYW5fcG9zX25leHRiYXRjaCh4c19yZWFkX3N0cmVhbV9kaXIs CisJCQkJCQkJCQkgcHJlZmV0Y2hCYXRjaCwgcHJlZmV0Y2hQb3MpOworCQl9CisKKwkJLyoKKwkJ ICogcHJlZmV0Y2hQb3Mgbm93IHBvaW50cyB0byB0aGUgbmV4dCBpdGVtIHdob3NlIFRJRCdzIGhl YXAgYmxvY2sKKwkJICogbnVtYmVyIG1pZ2h0IG5lZWQgdG8gYmUgcHJlZmV0Y2hlZAorCQkgKi8K KwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3MtPmJhdGNoKSA9PSBw cmVmZXRjaEJhdGNoKTsKKworCQkvKiBzY2FuUG9zIGlzIGFsd2F5cyA8PSBwcmVmZXRjaFBvcyB3 aGVuIHdlIHJldHVybiAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNjYW5Qb3MsIHBy ZWZldGNoUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIpIDw9IDApOworCQlBc3NlcnQocHJlZmV0Y2hQ b3MtPml0ZW0gPj0gcHJlZmV0Y2hCYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBwcmVmZXRjaFBv cy0+aXRlbSA8PSBwcmVmZXRjaEJhdGNoLT5sYXN0SXRlbSk7CisKKwkJaXRlbSA9ICZwcmVmZXRj aEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJCXByZWZldGNoX2Jsb2NrID0gSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+aGVhcFRpZCk7CisKKwkJaWYgKHNjYW4tPnhz X3dhbnRfaXR1cCkKKwkJeworCQkJLyogbWFrZSBzdXJlIHdlIGhhdmUgdmlzaWJpbGl0eSBpbmZv IGZvciB0aGUgaXRlbSAqLworCQkJaGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShzY2Fu LCBwcmVmZXRjaEJhdGNoLCBwcmVmZXRjaFBvcyk7CisKKwkJCS8qIGl0ZW0gaXMga25vd24gdG8g YmUgYWxsLXZpc2libGU7IHByZWZldGNoaW5nIGlzbid0IHJlcXVpcmVkICovCisJCQlpZiAoaXRl bS0+YWxsVmlzaWJsZSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwcmVmZXRjaF9ibG9j ayA9PSBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2spCisJCXsKKwkJCS8qCisJCQkgKiBwcmVmZXRj aF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IHByZWZldGNoUG9zIGl0ZW0ncyBUSUQncyBoZWFwCisJ CQkgKiBibG9jayBudW1iZXI7IHdlIG11c3Qgbm90IHJldHVybiB0aGUgc2FtZSBwcmVmZXRjaF9i bG9jayB0d2ljZQorCQkJICogKHR3aWNlIGluIHN1Y2Nlc3Npb24pCisJCQkgKi8KKwkJCWNvbnRp bnVlOworCQl9CisKKwkJLyogV2UgaGF2ZSBhIG5ldyBoZWFwIGJsb2NrIG51bWJlciB0byByZXR1 cm4gdG8gcmVhZCBzdHJlYW0gKi8KKwkJaHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrID0gcHJlZmV0 Y2hfYmxvY2s7CisJCXJldHVybiBwcmVmZXRjaF9ibG9jazsKKwl9CisKKwlyZXR1cm4gSW52YWxp ZEJsb2NrTnVtYmVyOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZmV0Y2hf aGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQogICoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhhbS5jCmluZGV4IGUzNWQ2Y2Y0Mi4uODJlOWFiMzVmIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGFtLmMKQEAgLTM3OSw3ICszNzksNyBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuLAogCUFzc2VydChua2V5cyA9PSBzY2FuLT5udW1iZXJPZktleXMpOwogCUFzc2Vy dChub3JkZXJieXMgPT0gc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CiAKLQkvKiBSZWxlYXNlIHJl c291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qIHJl c2V0IHJlYWQgc3RyZWFtIGFuZCByZWxlYXNlIGJ1ZmZlciBwaW5zIGZyb20gdGFibGUgYWNjZXNz ZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNl dChzY2FuLT54c19oZWFwZmV0Y2gpOwogCkBAIC00NjgsNyArNDY4LDcgQEAgaW5kZXhfcmVzdHJw b3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0Y2gp OwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcG9zcmVzZXQpOwogCi0JLyogcmVsZWFzZSByZXNv dXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKiByZXNl dCByZWFkIHN0cmVhbSBhbmQgcmVsZWFzZSBidWZmZXIgcGlucyBmcm9tIHRhYmxlIGFjY2Vzc2Vz ICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQo c2Nhbi0+eHNfaGVhcGZldGNoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMK aW5kZXggZjQ0YmY5NzliLi5mZTcyY2EyNjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YmF0Y2guYwpAQCAtMTAsNyArMTAsMTAgQEAKICAqIGFwcHJvYWNoIGVuYWJsZXMgZWZmaWNpZW50 IHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIGJsb2NrcyBkdXJpbmcgb3JkZXJlZAogICogaW5kZXgg c2NhbnMuCiAgKgotICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgga2V5 IHNwYWNlIG9yZGVyLgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4gaW5kZXgg a2V5IHNwYWNlIG9yZGVyLiAgVGhpcyBhbGxvd3MgdGhlCisgKiB0YWJsZSBBTSB0byBtYWludGFp biBhbiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZTogaXRzIHJlYWQgc3RyZWFtCisgKiBjYWxs YmFjayBpcyB0aGVyZWJ5IGFibGUgdG8gcmVxdWVzdCB0YWJsZSBibG9ja3MgcmVmZXJlbmNlZCBi eSBpbmRleCBwYWdlcworICogdGhhdCBhcmUgd2VsbCBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2Fu IHBvc2l0aW9uJ3MgaW5kZXggcGFnZS4KICAqCiAgKiBUaGVyZSdzIHRocmVlIHR5cGVzIG9mIGZ1 bmN0aW9ucyBpbiB0aGlzIG1vZHVsZToKICAqCkBAIC0yOCw2ICszMSwzMSBAQAogICogICAgQU1z IHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4gIFRoZXNlIG1hbmFnZSBi YXRjaAogICogICAgYWxsb2NhdGlvbiwgaW5kZXggcGFnZSBidWZmZXIgbG9jayByZWxlYXNlLCBh bmQgYmF0Y2ggbWVtb3J5IHJlY3ljbGluZy4KICAqCisgKiBUaGVzZSB0aHJlZSBsYXllcnMgY29v cmRpbmF0ZSB3aXRob3V0IGV4cGxpY2l0IGNvdXBsaW5nOiB0aGUgY29yZSBsaWZlY3ljbGUKKyAq IGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0YWJsZSBBTXMgdXNlIHNjYW5Qb3Mvc2NhbkJhdGNoIGFu ZCBwcmVmZXRjaFBvcy8KKyAqIHByZWZldGNoQmF0Y2ggaW4gYSBzdGFuZGFyZGl6ZWQgd2F5IChz ZWUgaGVhcGFtX2hhbmRsZXIuYyBmb3IgdGhlIHJlZmVyZW5jZQorICogaW1wbGVtZW50YXRpb24p LCB3aGlsZSB0YWJsZSBBTXMgYXNzdW1lIHRoYXQgaW5kZXggQU1zIGZyZWUgYW5kIHVubG9jawor ICogYmF0Y2hlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlbnRpb25zIGVzdGFibGlzaGVkIGhlcmUu ICBTZWUgaW5kZXhhbS5zZ21sCisgKiBmb3IgdGhlIGZ1bGwgc3BlY2lmaWNhdGlvbiBvZiB0aGUg YW1nZXRiYXRjaC9hbWZyZWViYXRjaCBjb250cmFjdC4KKyAqCisgKiBUaGUgdGFibGUgQU0gZnVs bHkgY29udHJvbHMgdGhlIHJlYWQgc3RyZWFtIGFzIGl0cyBvd24gcHJpdmF0ZSBzdGF0ZS4KKyAq IFdoZW4gdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSB0YWJsZSBBTSBtdXN0IGltbWVk aWF0ZWx5IHJlc2V0IGl0cworICogcmVhZCBzdHJlYW0gLS0gYmxvY2tzIGFscmVhZHkgcmVxdWVz dGVkIHZpYSBwcmVmZXRjaFBvcyB3aWxsIG5vIGxvbmdlcgorICogbWF0Y2ggd2hhdCBzY2FuUG9z IG5lZWRzIHRvIHJldHVybi4KKyAqCisgKiBDcm9zc2luZyBhIGJhdGNoIGJvdW5kYXJ5IGluIGEg bmV3IHNjYW4gZGlyZWN0aW9uIGlzIGEgc2VwYXJhdGUgcHJvY2VzcywKKyAqIGhhbmRsZWQgaGVy ZTogdGFibGUgQU1zIGFyZSByZXF1aXJlZCB0byBjYWxsIHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJj aGFuZ2UKKyAqIHRvIGxlYXZlIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIgaW4gYSBjb25z aXN0ZW50IHN0YXRlLiAgVGhlIGN1cnJlbnQKKyAqIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgdGhp cyBieSBzaW1wbHkgZGlzY2FyZGluZyBtb3N0IGJhdGNoZXMuICBUaGUga2V5CisgKiBpbnZhcmlh bnQgaXMgdGhhdCBhbGwgbG9hZGVkIGJhdGNoZXMgbXVzdCBiZSBpbiBhIGNvbnNpc3RlbnQgc2Nh biBkaXJlY3Rpb24KKyAqIG9yZGVyLiAgKER1cmluZyBjcm9zcy1iYXRjaCBkaXJlY3Rpb24gY2hh bmdlcywgdGhlIGN1cnJlbnQgc2NhbkJhdGNoIHdpbGwKKyAqIGhhdmUgaXRzIEluZGV4U2NhbkJh dGNoRGF0YS5kaXIgZmxpcHBlZCwgYnV0IHdlIGhhdmUgbm8gcHJvdmlzaW9uIGZvcgorICoga2Vl cGluZyBhbGwgb3RoZXIgbG9hZGVkIGJhdGNoZXMuICBJdCdzIG5vdCBjbGVhciB0aGF0IGl0J2Qg YmUgdXNlZnVsIHRvCisgKiBob2xkIG9udG8gdGhlbTsgdGhlIHNjYW4gZGlyZWN0aW9uIGlzIHVu bGlrZWx5IHRvIGNoYW5nZSBiYWNrLiAgVGhlIHNjYW4KKyAqIGJhdGNoIGRpcmVjdGlvbiBpbnZh cmlhbnQga2VlcHMgdGhpbmdzIHNpbXBsZTogaXQgaXMgY29udmVuaWVudCBmb3IgbW9zdAorICog Y29kZSB0aGF0IGRlYWxzIHdpdGggYmF0Y2hlcyB0byBiZSBhYmxlIHRvIGFzc3VtZSB0aGF0IHRo ZSBjb21tb24gY2FzZQorICogd2hlcmUgc2NhbiBkaXJlY3Rpb24gbmV2ZXIgY2hhbmdlcyBpcyB0 aGUgb25seSBjYXNlLikKKyAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCiAgKgpA QCAtNjMsNiArOTEsNyBAQCBpbmRleF9iYXRjaHNjYW5faW5pdChJbmRleFNjYW5EZXNjIHNjYW4p CiAKIAlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52YWxpZCA9IGZhbHNlOwogCXNjYW4tPmJh dGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnBy ZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAKIAlzY2FuLT5iYXRjaHJpbmdidWYubWFya0JhdGNo ID0gTlVMTDsKIAlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoID0gMDsJLyogaW5pdGlhbCBo ZWFkIGJhdGNoICovCkBAIC05MSw2ICsxMjAsNyBAQCBpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKQogCUFzc2VydChzY2FuLT54c19oZWFwZmV0 Y2gpOwogCiAJYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJYmF0Y2hyaW5n YnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOwogCiAJLyoKIAkgKiBXaGVuIGNhbGxlZCB3 aXRoICJjb21wbGV0ZSIgd2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBtYXJrQmF0Y2ggaXMgZnJlZWQs CkBAIC0yNDksNyArMjc5LDEzIEBAIGluZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pCiAgKiB0aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCiAgKgogICog V2UganVzdCBkaXNjYXJkIGFsbCBiYXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3Jl ZCBzY2FuQmF0Y2gpLAotICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNj YW4ncyBjdXJyZW50IHNjYW5CYXRjaC4KKyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJl YWR5IHRoZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guICBXZSBhbHdheXMKKyAqIGludmFsaWRh dGUgcHJlZmV0Y2hQb3MuICBUaGUgcmVhZCBzdHJlYW0gYW5kIHJlbGF0ZWQgcHJlZmV0Y2hpbmcg c3RhdGUgYXJlCisgKiByZXNldCBieSB0YWJsZV9pbmRleF9mZXRjaF9yZXNldCgpLCBjYWxsZWQg YmVmb3JlIHRoaXMgZnVuY3Rpb24uICBUaGlzCisgKiBhcHByb2FjaCBrZWVwcyB0aGluZ3Mgc2lt cGxlIGZvciB0YWJsZSBBTXM6IG1vc3QgY29kZSB0aGF0IGRlYWxzIHdpdGgKKyAqIGJhdGNoZXMg aXMgdGhlcmVieSBhYmxlIHRvIGFzc3VtZSB0aGF0IHRoZSBjb21tb24gY2FzZSB3aGVyZSBzY2Fu IGRpcmVjdGlvbgorICogbmV2ZXIgY2hhbmdlcyBpcyB0aGUgb25seSBjYXNlICh0YWJsZWFtX3V0 aWxfYmF0Y2hfZGlyY2hhbmdlIHRha2VzIGEKKyAqIHNpbWlsYXIgYXBwcm9hY2ggdG8gaGFuZGxp bmcgYSBjcm9zcy1iYXRjaCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24pLgogICovCiB2b2lkCiBp bmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQpAQCAtMjYwLDYg KzI5NiwxNCBAQCBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOwog CUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBv cy0+YmF0Y2gpOwogCisJLyoKKwkgKiBSZXN0b3JpbmcgYSBtYXJrIGFsd2F5cyByZXF1aXJlcyBz dG9wcGluZyBwcmVmZXRjaGluZy4gIFRoaXMgaXMgc2ltaWxhcgorCSAqIHRvIHRoZSBoYW5kbGlu ZyB0YWJsZSBBTXMgaW1wbGVtZW50IHRvIGRlYWwgd2l0aCBhIHR1cGxlLWxldmVsIGNoYW5nZQor CSAqIGluIHRoZSBzY2FuJ3MgZGlyZWN0aW9uLiAgVGhlIHJlYWQgc3RyZWFtIG11c3QgaGF2ZSBh bHJlYWR5IGJlZW4gcmVzZXQKKwkgKiBieSB0aGUgY2FsbGVyICh2aWEgdGFibGVfaW5kZXhfZmV0 Y2hfcmVzZXQpLgorCSAqLworCWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxz ZTsKKwogCWlmIChzY2FuQmF0Y2ggPT0gbWFya0JhdGNoKQogCXsKIAkJLyogbWFya0JhdGNoIGlz IGFscmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0IGNoYW5nZSBiYXRjaHJpbmdidWYgKi8KQEAgLTMy MCw2ICszNjQsMTMgQEAgaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mg c2NhbikKICAqIHBvaW50IG9uIGJhdGNocmluZ2J1ZiB3aWxsIGxvb2sgYXMgaWYgb3VyIG5ldyBz Y2FuIGRpcmVjdGlvbiBoYWQgYmVlbiB1c2VkCiAgKiBmcm9tIHRoZSBzdGFydC4gIFRoaXMgYXBw cm9hY2ggaXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzCiAgKiB3ZWxs IGVub3VnaCBmb3Igd2hhdCBvdWdodCB0byBiZSBhIHJlbGF0aXZlbHkgcmFyZSBvY2N1cnJlbmNl LgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgcmVzZXQgdGhlIHNjYW4ncyByZWFkIHN0cmVhbSBi ZWZvcmUgY2FsbGluZyBoZXJlLiAgVGhhdAorICogbmVlZHMgdG8gaGFwcGVuIGFzIHNvb24gYXMg dGhlIHNjYW4gcmVxdWVzdHMgYSB0dXBsZSBpbiB3aGF0ZXZlciBzY2FuCisgKiBkaXJlY3Rpb24g aXMgb3Bwb3NpdGUtdG8tY3VycmVudC4gIFdlIG9ubHkgZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJl IHRoZQorICogc2NhbiBiYWNrcyB1cCBieSBlbm91Z2ggaXRlbXMgdG8gY3Jvc3MgYSBiYXRjaCBi b3VuZGFyeSAod2hlbiB0aGUgc2NhbgorICogcmVzdW1lcyBzY2FubmluZyBpbiBpdHMgb3JpZ2lu YWwgZGlyZWN0aW9uL2VuZHMgYmVmb3JlIGNyb3NzaW5nIGEgYm91bmRhcnksCisgKiB0aGVyZSBp c24ndCBhbnkgbmVlZCB0byBjYWxsIGhlcmUpLgogICovCiB2b2lkCiB0YWJsZWFtX3V0aWxfYmF0 Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2NhbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvUkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUK aW5kZXggZTc1NTc3YTdlLi4zOTM5MzkxYWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBA IC0xODYsNyArMTg2LDcgQEAgaW50ZXJmYWNlLiAgKFNlZSBhbHNvLCBkb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sKS4KIEJsb2NraW5nIFZBQ1VVTSBsaWtlIHRoaXMgY2FuIGJlIGRpc3J1cHRpdmUs IHNvIHRhYmxlIEFNcyBhdm9pZCBpdCB3aGVuZXZlcgogcG9zc2libGUuICBUaGUgaGVhcCB0YWJs ZSBBTSB1c3VhbGx5IGRyb3BzIGxlYWYgcGFnZSBwaW5zIHJpZ2h0IGF3YXksIHRob3VnaAogbm90 IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LiAgSW5kZXgtb25seSBz Y2FucyBtYXkgYWxzbwotcmV0YWluIHBpbnMgaW4gc29tZSBjYXNlcy4KK3JldGFpbiBwaW5zIGlu IHNvbWUgY2FzZXMsIHRob3VnaCBwcmVmZXRjaGluZyByZXF1aXJlcyBkcm9wcGluZyB0aGVtLgog CiBPcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0aW9uIHBlcmZvcm1zIHRoZSBzYW1lIHBh Z2UtbGV2ZWwKIG1vZGlmaWNhdGlvbnMgYXMgVkFDVVVNLCB3aGlsZSBvbmx5IGhvbGRpbmcgYW4g ZXhjbHVzaXZlIGxvY2suICBUaGlzIGlzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUu YwppbmRleCBjMzBkNmU4NDYuLjllZTIwZjRkYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9j b3N0c2l6ZS5jCkBAIC0xNDUsNiArMTQ1LDcgQEAgaW50CQkJbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDI7CiBib29sCQllbmFibGVfc2Vxc2NhbiA9IHRydWU7CiBib29sCQllbmFi bGVfaW5kZXhzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleG9ubHlzY2FuID0gdHJ1ZTsK K2Jvb2wJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSB0cnVlOwogYm9vbAkJZW5hYmxlX2Jp dG1hcHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNjYW4gPSB0cnVlOwogYm9vbAkJZW5h YmxlX3NvcnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVh ZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXgg MGRiZWMyYWJiLi43ZDYxOWQyMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlv L3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YwpAQCAtMTA4Miw2ICsxMDgyLDE4IEBAIHJlYWRfc3RyZWFtX3lpZWxkKFJlYWRTdHJlYW0gKnN0 cmVhbSkKIAlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCisvKgorICogRG9lcyBjYWxs ZXIncyByZWFkIHN0cmVhbSBjdXJyZW50bHkgdXNlIHRoZSBmYXN0IHBhdGg/CisgKgorICogVGhl IHJlYWQgc3RyZWFtIHVzZXMgdGhlIGZhc3QgcGF0aCBkdXJpbmcgYWxsLWNhY2hlZCBzY2FucyAo YXMgd2VsbCBhcworICogZHVyaW5nIHN1YnNldHMgb2YgYSBzY2FuIHdoZXJlIGFsbCBidWZmZXJz L3BhZ2VzIHJldHVybmVkIGFyZSBjYWNoZWQpLgorICovCitib29sCityZWFkX3N0cmVhbV91c2Vz X2Zhc3RfcGF0aChSZWFkU3RyZWFtICpzdHJlYW0pCit7CisJcmV0dXJuIHN0cmVhbS0+ZmFzdF9w YXRoOworfQorCiAvKgogICogUmVzZXQgYSByZWFkIHN0cmVhbSBieSByZWxlYXNpbmcgYW55IHF1 ZXVlZCB1cCBidWZmZXJzLCBhbGxvd2luZyB0aGUgc3RyZWFtCiAgKiB0byBiZSB1c2VkIGFnYWlu IGZvciBkaWZmZXJlbnQgYmxvY2tzLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBjbGVhciBhbgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCA3NjJiOGVmZTYuLjli ODc4MTQ0YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVy cy5kYXQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAg LTg5MSw2ICs4OTEsMTMgQEAKICAgYm9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4g J1BHQ19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAorICBzaG9ydF9k ZXNjID0+ICdFbmFibGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25s eS1zY2Fucy4nLAorICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5h YmxlX2luZGV4c2Nhbl9wcmVmZXRjaCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKIHsg bmFtZSA9PiAnZW5hYmxlX21hdGVyaWFsJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BH Q19VU0VSU0VUJywgZ3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAogICBzaG9ydF9kZXNj ID0+ICdFbmFibGVzIHRoZSBwbGFubmVyXCdzIHVzZSBvZiBtYXRlcmlhbGl6YXRpb24uJywKICAg ZmxhZ3MgPT4gJ0dVQ19FWFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZQppbmRleCA2ZTgyYzhlMDUuLjczZmZhN2Y1YyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDE2LDYgKzQxNiw3 IEBACiAjZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgPSBvbgogI2VuYWJsZV9pbmRleHNjYW4gPSBv bgogI2VuYWJsZV9pbmRleG9ubHlzY2FuID0gb24KKyNlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo ID0gb24KICNlbmFibGVfbWF0ZXJpYWwgPSBvbgogI2VuYWJsZV9tZW1vaXplID0gb24KICNlbmFi bGVfbWVyZ2Vqb2luID0gb24KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBi L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCAzNzM0Mjk4NjkuLmFiNTEyOWEwMyAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbApAQCAtNTY2OCw2ICs1NjY4LDI3IEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAg ICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVu dHJ5IGlkPSJndWMtZW5hYmxlLWluZGV4c2Nhbi1wcmVmZXRjaCIgeHJlZmxhYmVsPSJlbmFibGVf aW5kZXhzY2FuX3ByZWZldGNoIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9pbmRleHNj YW5fcHJlZmV0Y2g8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRj aDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXgtc2NhbiBh bmQgaW5kZXgtb25seS1zY2FuCisgICAgICAgIHBsYW4gdHlwZXMuICBQcmVmZXRjaGluZyBjYW4g aW1wcm92ZSBwZXJmb3JtYW5jZSBieSByZWFkaW5nIHRhYmxlIEFNCisgICAgICAgIHBhZ2VzIGFo ZWFkIG9mIHdoZW4gdGhleSBhcmUgbmVlZGVkIGR1cmluZyBpbmRleCBzY2Fucy4gIFRoZSBkZWZh dWx0CisgICAgICAgIGlzIDxsaXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIEluZGV4IHByZWZldGNoaW5nIGlzIGFsd2F5cyBkaXNhYmxl ZCB3aGVuCisgICAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1pby1tZXRob2QiLz4gaXMgc2V0IHRv IDxsaXRlcmFsPnN5bmM8L2xpdGVyYWw+LAorICAgICAgICByZWdhcmRsZXNzIG9mIHRoaXMgc2V0 dGluZy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLW1hdGVyaWFsIiB4cmVm bGFiZWw9ImVuYWJsZV9tYXRlcmlhbCI+CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfbWF0 ZXJpYWw8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAgICAgIDxpbmRleHRlcm0+ CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL2lu ZGV4YW0uc2dtbAppbmRleCBmNDhkYTMxODUuLjY5ZTcwYWY0MCAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCkBAIC0x NjcsMTAgKzE2NywxMSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGFtYmVn aW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogICAgIGFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVz Y2FuOwogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgICAgIC8qIGNhbiBiZSBO VUxMICovCisgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVM TCAqLworICAgIGFtZnJlZWJhdGNoX2Z1bmN0aW9uIGFtZnJlZWJhdGNoOwkvKiBjYW4gYmUgTlVM TCAqLwogICAgIGFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOyAgIC8qIGNhbiBiZSBO VUxMICovCiAgICAgYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLSAgICBhbW1hcmtwb3Nf ZnVuY3Rpb24gYW1tYXJrcG9zOyAgICAgICAvKiBjYW4gYmUgTlVMTCAqLwotICAgIGFtcmVzdHJw b3NfZnVuY3Rpb24gYW1yZXN0cnBvczsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1wb3Ny ZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4gYmUgTlVMTCAqLwogCiAgICAgLyogaW50 ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVsIGluZGV4IHNjYW5zICovCiAgICAg YW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuOyAg ICAvKiBjYW4gYmUgTlVMTCAqLwpAQCAtNjc4LDYgKzY3OSwxMCBAQCBhbWJlZ2luc2NhbiAoUmVs YXRpb24gaW5kZXhSZWxhdGlvbiwKICAgIDxmdW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rpb24+ IGRvZXMgbGl0dGxlIGJleW9uZCBtYWtpbmcgdGhhdCBjYWxsIGFuZCBwZXJoYXBzCiAgICBhY3F1 aXJpbmcgbG9ja3M7CiAgICB0aGUgaW50ZXJlc3RpbmcgcGFydHMgb2YgaW5kZXgtc2NhbiBzdGFy dHVwIGFyZSBpbiA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPi4KKyAgIEluZGV4IGFjY2Vz cyBtZXRob2RzIHRoYXQgdXNlIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu dGVyZmFjZQorICAgbXVzdCBhbHNvIHNldCA8bGl0ZXJhbD5zY2FuLSZndDttYXhpdGVtc2JhdGNo PC9saXRlcmFsPiB0byB0aGUgbWF4aW11bSBudW1iZXIKKyAgIG9mIGl0ZW1zIHRoYXQgY2FuIGFw cGVhciBpbiBhIHNpbmdsZSBiYXRjaCAodHlwaWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUKKyAgIGlu ZGV4IHBhZ2Ugc2l6ZSwgZS5nLiwgPGxpdGVyYWw+TWF4SW5kZXhUdXBsZXNQZXJQYWdlPC9saXRl cmFsPikuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTc0OSw2ICs3NTQsMTc4IEBAIGFtZ2V0 dHVwbGUgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxzdHJ1Y3RmaWVsZD5hbWdldHR1cGxlPC9z dHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1 Y3RuYW1lPgogICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCiAgIDwvcGFyYT4KKyAgPG5v dGU+CisgICA8cGFyYT4KKyAgICBBcyBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVj dG5hbWU+IHZlcnNpb24gMTksIHBvc2l0aW9uIG1hcmtpbmcKKyAgICBhbmQgcmVzdG9yYXRpb24g b2Ygc2NhbnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBmb3IgdGhlCisgICAgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPiBpbnRlcmZhY2U7IG9ubHkgdGhlCisgICAgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9ydHMgdGhpcyBmZWF0dXJlLgorICAg PC9wYXJhPgorICA8L25vdGU+CisKKyAgPHBhcmE+Cis8cHJvZ3JhbWxpc3Rpbmc+CitJbmRleFNj YW5CYXRjaAorYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgSW5k ZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKyAgICAgICAgICAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CisgICBSZXR1cm4gdGhlIG5leHQgYmF0Y2ggb2YgaW5k ZXggdHVwbGVzIGluIHRoZSBnaXZlbiBzY2FuLCBtb3ZpbmcgaW4gdGhlCisgICBnaXZlbiBkaXJl Y3Rpb24gKGZvcndhcmQgb3IgYmFja3dhcmQgaW4gdGhlIGluZGV4KS4gIFJldHVybnMgYW4gaW5z dGFuY2Ugb2YKKyAgIDx0eXBlPkluZGV4U2NhbkJhdGNoPC90eXBlPiB3aXRoIGluZGV4IHR1cGxl cyBsb2FkZWQsIG9yCisgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiBpZiB0aGVyZSBhcmUgbm8g bW9yZSBpbmRleCB0dXBsZXMgaW4gdGhlIGdpdmVuCisgICBzY2FuIGRpcmVjdGlvbi4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g aW50ZXJmYWNlIGlzIGFuIGFsdGVybmF0aXZlIHRvCisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+IHRoYXQgcmV0dXJucyBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGluIGJhdGNoZXMK KyAgIHJhdGhlciB0aGFuIG9uZSBhdCBhIHRpbWUuIFRoaXMgZW5hYmxlcyB0aGUgdGFibGUgYWNj ZXNzIG1ldGhvZCB0bworICAgb3B0aW1pemUgdGFibGUgYmxvY2sgYWNjZXNzIHBhdHRlcm5zIGFu ZCBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4KKyAgIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcg aW5kZXggZW50cmllcyBmcm9tIGEgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsCisgICB0aGUg dGFibGUgQU0gY2FuIHJlYWRhaGVhZCB0aHJvdWdoIHRoZSBpbmRleCBhbmQgaWRlbnRpZnkgd2hp Y2ggdGFibGUKKyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCwgYWxsb3dpbmcgcHJlZmV0Y2hpbmcg b2YgdGFibGUgQU0gcGFnZXMgZHVyaW5nCisgICBvcmRlcmVkIGluZGV4IHNjYW5zLgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBUaGUgdGFibGUgQU0gcGFzc2VzIHRoZSBiYXRjaCBtb3N0IHJl Y2VudGx5IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZv ciB0aGUgZ2l2ZW4gc2NhbiBhcworICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gKG9y IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IG9uIHRoZSBmaXJzdCBjYWxsCisgICBmb3IgdGhlIHNj YW4pLiAgVGhlIGluZGV4IEFNIHVzZXMgaW5mb3JtYXRpb24gZnJvbSA8bGl0ZXJhbD5wcmlvcmJh dGNoPC9saXRlcmFsPgorICAgdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8gcmVhZCBu ZXh0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIGJhdGNoIHJldHVybmVkIGJ5IDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgYXNzb2NpYXRlZCB3aXRoIGEKKyAgIHBpbm5l ZCBpbmRleCBwYWdlIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0vdHVwbGUu ICBUaGUgYnVmZmVyCisgICBwaW4gY2FuIGJlIGhlbGQgb250byBieSB0aGUgdGFibGUgQU0gYXMg YW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQKKyAgIHJlY3ljbGluZyBieSA8Y29t bWFuZD5WQUNVVU08L2NvbW1hbmQ+LiAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmci Lz4KKyAgIGZvciBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBkdXJpbmcgaW5kZXgg c2NhbnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8 L3R5cGU+IHRoYXQgaXMgcmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaXMgbm8gbG9uZ2VyIG1hbmFnZWQgYnkgdGhlIGFjY2VzcyBtZXRob2QuCisgICBJdCBp cyB1cCB0byB0aGUgdGFibGUgQU0gY2FsbGVyIHRvIGRlY2lkZSB3aGVuIGl0IHNob3VsZCBiZSBm cmVlZCBieQorICAgcGFzc2luZyBpdCB0byA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9u Pi4gIE5vdGUgYWxzbyB0aGF0CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1 bmN0aW9ucyBtdXN0IG5ldmVyIG1vZGlmeSB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5wcmlvcmJhdGNo PC9zdHJ1Y3RmaWVsZD4gcGFyYW1ldGVyLiAgVGhlIGNvcmUKKyAgIDxmaWxlbmFtZT5zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+IGFuZAorICAgPGZpbGVuYW1lPnNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoLzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9ucyBwcm92aWRlCisgICBy ZWZlcmVuY2UgZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g aW50ZXJmYWNlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgc2FtZSBjYXZlYXRzIGRl c2NyaWJlZCBmb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhcHBseSBoZXJlCisg ICB0b286IGFuIGVudHJ5IGluIHRoZSByZXR1cm5lZCBiYXRjaCBtZWFucyBvbmx5IHRoYXQgdGhl IGluZGV4IGNvbnRhaW5zCisgICBhbiBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHNjYW4ga2V5cywg bm90IHRoYXQgdGhlIHR1cGxlIG5lY2Vzc2FyaWx5IHN0aWxsCisgICBleGlzdHMgaW4gdGhlIGhl YXAgb3Igd2lsbCBwYXNzIHRoZSBjYWxsZXIncyBzbmFwc2hvdCB0ZXN0LgorICA8L3BhcmE+CisK KyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IG11c3Qgc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNr PC9saXRlcmFsPiB0byBpbmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YKKyAgIHNjYW4ga2V5 cyBpcyByZXF1aXJlZCwgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4KKyAgIGRvZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8 L2xpdGVyYWw+IG11c3QgYmUgc2V0IGNvbnNpc3RlbnRseQorICAgZm9yIGFuIGVudGlyZSBzY2Fu IHJhdGhlciB0aGFuIHZhcnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMuIFRoaXMgaXMgYSBrZXkK KyAgIGRpZmZlcmVuY2UgZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB3aGlj aCBjYW4gc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBpbmRl cGVuZGVudGx5IGZvciBlYWNoIHR1cGxlIGl0IHJldHVybnMuCisgICBJbmRleCBhY2Nlc3MgbWV0 aG9kcyB0aGF0IHJlcXVpcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCisgICA8bGl0ZXJhbD5zY2Fu LSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPgorICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgU2ltaWxhcmx5LCB0aGUg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9y dAorICAgaW5kZXgtb25seSBzY2FucyB0aGF0IHJldHVybiBkYXRhIGluIHRoZSBmb3JtIG9mIGEK KyAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFtZT4gcG9pbnRlci4gIEluZGV4LW9u bHkgc2NhbnMgd29yayBieQorICAgY29weWluZyA8c3RydWN0bmFtZT5JbmRleFR1cGxlPC9zdHJ1 Y3RuYW1lPiByZWNvcmRzIGZyb20gaW5kZXggcGFnZXMgaW50byBhCisgICBsb2NhbCBidWZmZXIg YXNzb2NpYXRlZCB3aXRoIGVhY2ggYmF0Y2guICA8bGl0ZXJhbD54c19pdHVwZGVzYzwvbGl0ZXJh bD4KKyAgIHdvcmtzIGluIHRoZSBzYW1lIGFzIGFscmVhZHkgZGVzY3JpYmVkIGZvciA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LgorICAgVGhlIGFjY2VzcyBtZXRob2QgbXVzdCBub3Qg c2V0IHRoZSA8bGl0ZXJhbD5zY2FuLSZndDt4c19pdHVwPC9saXRlcmFsPiBvcgorICAgPGxpdGVy YWw+c2Nhbi0mZ3Q7eHNfaGl0dXA8L2xpdGVyYWw+IGZpZWxkcyBpdHNlbGYuCisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgcHJvdmlkZSBlaXRo ZXIgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IG5vdCBib3RoLgorICAgV2hlbiB0aGUgYWNjZXNzIG1ldGhv ZCBwcm92aWRlcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBpdCBtdXN0CisgICBh bHNvIHByb3ZpZGUgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4K KworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0 aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9y dHMgPHF1b3RlPnBsYWluPC9xdW90ZT4gaW5kZXggc2NhbnMuICBJZiBpdCBkb2Vzbid0LAorICAg dGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZmllbGQgaW4gaXRzCisgICA8c3Ry dWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4gc3RydWN0IG11c3QgYmUgc2V0IHRv IE5VTEwuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK3ZvaWQKK2Ft ZnJlZWJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICAgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIEZyZWVzIGEgYmF0Y2ggcmV0dXJuZWQg YnkgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2suCisgICBUaGUg PGxpdGVyYWw+YmF0Y2g8L2xpdGVyYWw+IGFyZ3VtZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBp bmRleCBwYWdlLAorICAgd2hpY2ggd2lsbCBuZXZlciBiZSBsb2NrZWQgb3IgcGlubmVkIHdoZW4g PGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4KKyAgIGlzIGNhbGxlZC4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gZnJlZXMg bWVtb3J5IGFuZCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoCisgICB0aGUgYmF0Y2guICBJdCBt dXN0IGFsd2F5cyByZWxlYXNlIHRoZSBjYWxsZXIncyBiYXRjaCBsYXN0LCBieSBwYXNzaW5nIGl0 CisgICBhcyBhbiBhcmd1bWVudCB0byA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2U8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQgZXhjbHVzaXZlbHkgYnkgdGFibGUgYWNjZXNzIG1ldGhvZHMgKHZpYSB0aGUKKyAg IDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfZnJlZV9iYXRjaDwvZnVuY3Rpb24+IHdyYXBwZXIgZnVu Y3Rpb24pIHRvIGluZGljYXRlCisgICB0aGF0IHByb2Nlc3Npbmcgb2YgdGhlIGJhdGNoIGlzIGNv bXBsZXRlOyBpdCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhpbgorICAgdGhlIGluZGV4IGFj Y2VzcyBtZXRob2QgaXRzZWxmLiAgVGhlIHRhYmxlIEFNIGlzIHJlc3BvbnNpYmxlIGZvciByZWxl YXNpbmcKKyAgIHRoZSBiYXRjaCdzIGJ1ZmZlciBwaW4gYmVmb3JlIGNhbGxpbmcgPGZ1bmN0aW9u PmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBp bmRleCBBTSBoYXMgdGhlIG9wdGlvbiBvZiBzZXR0aW5nIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVy YWw+IGJpdHMgaW4KKyAgIHRoZSBpbmRleCBwYWdlIHRvIG1hcmsgZGVhZCB0dXBsZXMuICBXaGls ZSB0aGlzIGlzIG9wdGlvbmFsLCBpbXBsZW1lbnRpbmcKKyAgIGl0IGlzIHJlY29tbWVuZGVkIGZv ciBwZXJmb3JtYW5jZSwgYXMgaXQgYWxsb3dzIGZ1dHVyZSBzY2FucyB0byBza2lwCisgICBrbm93 bi1kZWFkIGluZGV4IGVudHJpZXMuICBCb3RoIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZHMgdGhh dCBjdXJyZW50bHkKKyAgIHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAo Qi10cmVlIGFuZCBoYXNoKSBpbXBsZW1lbnQKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+ IG1hcmtpbmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBpbmRleCBhY2Nlc3MgbWV0aG9kcworICAgYXJl IGZyZWUgdG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4KKyAgIFRo ZSB0YWJsZSBBTSBtYXkgY2FsbAorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9raWxsX3NjYW5w b3NpdGVtPC9mdW5jdGlvbj4gdG8gbWFyayBkZWFkIGl0ZW1zIGFzCisgICB0aGUgc2NhbiBwcm9n cmVzc2VzLiBJZiB0aGUgYmF0Y2ggY29udGFpbnMgYW55IHN1Y2ggZGVhZCBpdGVtcywgdGhlIGJh dGNoJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5raWxsZWRJdGVtczwvc3RydWN0ZmllbGQ+IGFycmF5IHdp bGwgaGF2ZSBiZWVuIHNvcnRlZCBhbmQKKyAgIGRlZHVwbGljYXRlZCBiZWZvcmUgPGZ1bmN0aW9u PmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4gaXMgY2FsbGVkLCB3aXRoIGl0ZW0KKyAgIG9mZnNldHMg YXBwZWFyaW5nIGluIGFzY2VuZGluZyBvcmRlciAodGhhdCBpcywgaW4gaW5kZXggcGFnZSBvcmRl ciwgd2hpY2gKKyAgIGlzIGFsc28gYmF0Y2ggb3JkZXIpIGFuZCBubyBvZmZzZXQgYXBwZWFyaW5n IG1vcmUgdGhhbiBvbmNlLiBUaGlzIHNvcnRpbmcKKyAgIG1ha2VzIGl0IHVubmVjZXNzYXJ5IGZv ciB0aGUgdGFibGUgQU0gdG8gY2FsbAorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9raWxsX3Nj YW5wb3NpdGVtPC9mdW5jdGlvbj4gaW4gYW55IHBhcnRpY3VsYXIgb3JkZXIuCisgICAoSW5kZXgg YWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiByZWx5 IG9uIHRoZQorICAgPHN0cnVjdGZpZWxkPmtpbGxfcHJpb3JfdHVwbGU8L3N0cnVjdGZpZWxkPiBt ZWNoYW5pc20gaW5zdGVhZCB0byBtYXJrIGRlYWQKKyAgIHR1cGxlczsgdGhlIDxmaWxlbmFtZT5z cmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbgorICAgcHJv dmlkZXMgYSByZWZlcmVuY2UgZXhhbXBsZS4pCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRo ZSBpbmRleCBBTSBtYXkgY2hvb3NlIHRvIHJldGFpbiBpdHMgb3duIGJ1ZmZlciBwaW5zIHdoZW4g dGhpcyBzZXJ2ZXMgYW4KKyAgIGludGVybmFsIHB1cnBvc2UgKGZvciBleGFtcGxlLCBtYWludGFp bmluZyBhIGRlc2NlbnQgc3RhY2sgb2YgcGlubmVkIGluZGV4CisgICBwYWdlcyBmb3IgcmV1c2Ug YWNyb3NzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMpLiAgSG93ZXZlciwK KyAgIGFueSBzY2hlbWUgdGhhdCByZXRhaW5zIGJ1ZmZlciBwaW5zIG1hbmFnZWQgYnkgdGhlIGlu ZGV4IEFNIG11c3QgYmUgc3VyZSB0bworICAgZnJlZSB0aGUgcGlucyBhdCBhbiBvcHBvcnR1bmUg cG9pbnQgKGZvciBleGFtcGxlIHdoZW4gPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4KKyAg IGFuZC9vciA8ZnVuY3Rpb24+YW1lbmRzY2FuPC9mdW5jdGlvbj4gYXJlIGNhbGxlZCkuICBJdCBt dXN0IGFsc28ga2VlcCB0aGUKKyAgIG51bWJlciBvZiByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBz bWFsbCwgdG8gYXZvaWQgZXhoYXVzdGluZyB0aGUgYmFja2VuZCdzCisgICBidWZmZXIgcGluIGxp bWl0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZnJlZWJhdGNo PC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNj ZXNzIG1ldGhvZCBwcm92aWRlcyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LiBPdGhl cndpc2UgaXQgaGFzIHRvCisgICByZW1haW4gc2V0IHRvIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+ LgorICA8L3BhcmE+CiAKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CkBAIC03NjgsOCArOTQ1 LDggQEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGl0c2VsZiwgYW5kIHRo ZXJlZm9yZSBjYWxsZXJzIHJlY2hlY2sgYm90aCB0aGUgc2NhbiBjb25kaXRpb25zIGFuZCB0aGUK ICAgIHBhcnRpYWwgaW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGZvciByZWNoZWNrYWJsZSB0dXBs ZXMuICBUaGF0IG1pZ2h0IG5vdAogICAgYWx3YXlzIGJlIHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVu Y3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gY2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgaW5kZXggc2NhbjsgdGhlcmUK KyAgIE9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LAorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4gaW5kZXggc2NhbjsgdGhlcmUKICAgIGFy ZSBvdGhlciByZXN0cmljdGlvbnMgdG9vIHdoZW4gdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4sIGFzIGV4cGxhaW5lZAogICAgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nh bm5pbmciLz4uCiAgIDwvcGFyYT4KQEAgLTc5NSwzMiArOTcyLDUyIEBAIGFtZW5kc2NhbiAoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1h cmtwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNj YW4sCisgICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiA8L3Byb2dyYW1saXN0aW5n PgotICAgTWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVk IG9ubHkgc3VwcG9ydCBvbmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4K KyAgIE5vdGlmeSB0aGUgaW5kZXggQU0gdGhhdCB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gY2hh bmdlIHRoZSBzY2FuJ3MKKyAgIGxvZ2ljYWwgcG9zaXRpb24gaW4gYSB3YXkgdGhhdCByZXF1aXJl cyB0aGUgaW5kZXggQU0gdG8gcmVzZXQgYW55IHN0YXRlCisgICB0aGF0IGluZGVwZW5kZW50bHkg dHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3MuICBGb3IgZXhhbXBsZSwgbmJ0cmVlIG11c3QKKyAg IHJlc2V0IHRoZSBhcnJheSBrZXlzIHVzZWQgYnkgPGxpdGVyYWw+U2NhbGFyQXJyYXlPcEV4cHI8 L2xpdGVyYWw+IHF1YWwKKyAgIGV2YWx1YXRpb24gd2hlbiB0aGUgc2NhbiBwb3NpdGlvbiBjaGFu Z2VzLiAgVGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4KKyAgIHRoZSB0YWJsZSBBTSBpcyBh Ym91dCB0byBwcm9jZXNzIGEgYmF0Y2ggaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9uIHRoYW4KKyAg IHdhcyB1c2VkIHdoZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkIGJ5CisgICA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBhbmQgYWxzbyB3aGVuIGEgbWFya2VkIHNj YW4gcG9zaXRpb24gaXMKKyAgIGFib3V0IHRvIGJlIHJlc3RvcmVkLgogICA8L3BhcmE+CiAKICAg PHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5l ZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3Jk ZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bv czwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwv c3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBXaGVuIDxmdW5j dGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gaXMgY2FsbGVkIGR1ZSB0byBhIGNyb3NzLWJhdGNo CisgICBkaXJlY3Rpb24gY2hhbmdlLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkg ZmxpcHBlZCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGZp ZWxkIHRvIHJlZmxlY3QgdGhlIG5ldyBzY2FuIGRpcmVjdGlvbgorICAgYmVmb3JlIG1ha2luZyB0 aGUgY2FsbC4gIFRoZSBpbmRleCBBTSBzaG91bGQgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24K KyAgIHdoZW4gcmVzZXR0aW5nIGFueSBzdGF0ZSB0aGF0IGRlcGVuZHMgb24ga25vd2luZyB3aGlj aCB3YXkgdGhlIHNjYW4gaXMKKyAgIHByb2NlZWRpbmcuICBXaGVuIGNhbGxlZCB0byByZXN0b3Jl IGEgbWFya2VkIHBvc2l0aW9uLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3Ry dWN0ZmllbGQ+IGlzIG5vdCBtb2RpZmllZDsgaXQgcmV0YWlucyB0aGUgZGlyZWN0aW9uCisgICBm cm9tIHdoZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkLiAgSW4gYm90aCBjYXNl cywgdGhlIGJhdGNoCisgICBwYXNzZWQgdG8gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9u PiBpcyB0aGUgYmF0Y2ggdGhhdCB3aWxsIGJlIHVzZWQKKyAgIHRvIGNvbnRpbnVlIHRoZSBzY2Fu LgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkCi1hbXJlc3Ry cG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOwotPC9wcm9ncmFtbGlzdGluZz4KLSAgIFJlc3RvcmUg dGhlIHNjYW4gdG8gdGhlIG1vc3QgcmVjZW50bHkgbWFya2VkIHBvc2l0aW9uLgorICAgSW5kZXgg YWNjZXNzIG1ldGhvZHMgdGhhdCBoYXZlIHByaXZhdGUgc3RhdGUgd2hpY2ggbXVzdCBiZSByZXNl dCB3aGVuIHRoZQorICAgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzIG11c3QgcHJvdmlkZSBhbiA8ZnVu Y3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBpbXBsZW1lbnRhdGlvbi4gIEluZGV4IEFN cyB3aXRoIG5vIHN1Y2ggc3RhdGUgbWF5IHNldAorICAgPHN0cnVjdGZpZWxkPmFtcG9zcmVzZXQ8 L3N0cnVjdGZpZWxkPiB0byBOVUxMLgorICAgVGhlIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5j dGlvbj4gZnVuY3Rpb24gY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2hlbiB0aGUKKyAgIGFjY2VzcyBt ZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdoIHRoZSA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAg IFRoZSA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBi ZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fu cy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtcmVzdHJwb3M8L3N0cnVj dGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5h bWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAgQWxsIGluZGV4IEFNcyB0aGF0 IHByb3ZpZGUgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisg ICBhbmQgc2V0IDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1 ZSBuZWVkIHRvIGJlCisgICBwcmVwYXJlZCBmb3Igc2NhbnMgdGhhdCByZXF1ZXN0IGEgYmF0Y2gg aW4gdGhlIG9wcG9zaXRlIHNjYW4gZGlyZWN0aW9uIHRvCisgICB0aGUgb25lIGluaXRpYWxseSB1 c2VkIHRvIHJldHVybiB0aGUgYmF0Y2ggaW4gcXVlc3Rpb24uICBMaWtld2lzZSwgbWFyayBhbmQK KyAgIHJlc3RvcmUgZnVuY3Rpb25hbGl0eSBpcyBzdXBwb3J0ZWQgYnkgYWxsIGluZGV4IGFjY2Vz cyBtZXRob2RzIHRoYXQgcHJvdmlkZQorICAgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaW50ZXJmYWNlLiAgSXQgaXMgdXAgdG8gaW5kZXggQU1zIHRvCisgICBhZGVxdWF0ZWx5 IGFjY291bnQgZm9yIGhvdyBlaXRoZXIgY2FzZSBtaWdodCBpbnZhbGlkYXRlIHRoZWlyIHByaXZh dGUgc2NhbgorICAgc3RhdGUuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTk3NSw2ICsxMTcy LDggQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1p bHksIE9pZCBvcGNpbnR5cGUpOwogICAgICAgIEFjY2VzcyBtZXRob2RzIHRoYXQgYWx3YXlzIHJl dHVybiBlbnRyaWVzIGluIHRoZSBuYXR1cmFsIG9yZGVyaW5nCiAgICAgICAgb2YgdGhlaXIgZGF0 YSAoc3VjaCBhcyBidHJlZSkgc2hvdWxkIHNldAogICAgICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbm9y ZGVyPC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1ZS4KKyAgICAgICBCb3RoIDxmdW5jdGlvbj5hbWdldHR1 cGxlPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgICAg ICBzY2FucyBzdXBwb3J0IHRoaXMgY2FwYWJpbGl0eS4KICAgICAgICBDdXJyZW50bHksIHN1Y2gg YWNjZXNzIG1ldGhvZHMgbXVzdCB1c2UgYnRyZWUtY29tcGF0aWJsZSBzdHJhdGVneQogICAgICAg IG51bWJlcnMgZm9yIHRoZWlyIGVxdWFsaXR5IGFuZCBvcmRlcmluZyBvcGVyYXRvcnMuCiAgICAg ICA8L3BhcmE+CkBAIC05ODcsNDEgKzExODYsNDkgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21w YXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgICAgIGFu IG9yZGVyIHNhdGlzZnlpbmcgPGxpdGVyYWw+T1JERVIgQlk8L2xpdGVyYWw+IDxyZXBsYWNlYWJs ZT5pbmRleF9rZXk8L3JlcGxhY2VhYmxlPgogICAgICAgIDxyZXBsYWNlYWJsZT5vcGVyYXRvcjwv cmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5jb25zdGFudDwvcmVwbGFjZWFibGU+LiAgU2NhbiBt b2RpZmllcnMKICAgICAgICBvZiB0aGF0IGZvcm0gY2FuIGJlIHBhc3NlZCB0byA8ZnVuY3Rpb24+ YW1yZXNjYW48L2Z1bmN0aW9uPiBhcyBkZXNjcmliZWQKLSAgICAgICBwcmV2aW91c2x5LgorICAg ICAgIHByZXZpb3VzbHkuICBOb3RlIHRoYXQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBzY2FucyBkbyBub3QKKyAgICAgICBzdXBwb3J0IG9yZGVyaW5nIG9wZXJhdG9ycy4KICAgICAg IDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L2l0ZW1pemVkbGlzdD4KICAgPC9wYXJh 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+IGludGVyZmFjZQorICAg c3VwcG9ydCA8cXVvdGU+bWFya2luZzwvcXVvdGU+IGEgcG9zaXRpb24gaW4gYSBzY2FuIGFuZCBs YXRlciByZXR1cm5pbmcgdG8KKyAgIHRoZSBtYXJrZWQgcG9zaXRpb24uICBXaGVuIGEgYmF0Y2gg aXMgcHJvY2Vzc2VkIGluIGEgZGlmZmVyZW50IGRpcmVjdGlvbgorICAgdGhhbiBpdCB3YXMgb3Jp Z2luYWxseSBmZXRjaGVkLCBvciB3aGVuIGEgbWFya2VkIHBvc2l0aW9uIGlzIHJlc3RvcmVkLCB0 aGUKKyAgIGluZGV4IEFNIGlzIG5vdGlmaWVkIHZpYSB0aGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8 L2Z1bmN0aW9uPiBjYWxsYmFjayAoaWYKKyAgIHByb3ZpZGVkKSBzbyBpdCBjYW4gcmVzZXQgYW55 IHByaXZhdGUgc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUKKyAgIHNjYW4ncyBw cm9ncmVzcyAoc3VjaCBhcyBhcnJheSBrZXkgc3RhdGUpLiAgU2VlIHRoZQorICAgPGZ1bmN0aW9u PmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbiBkZXNjcmlwdGlvbiBmb3IgZGV0YWlscy4K ICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgQm90aCB0aGUgc2NhbiBwb3NpdGlvbiBhbmQgdGhl IG1hcmsgcG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFpbmVkCisgICBUaGUgc2NhbiBw b3NpdGlvbiAoaWYgYW55KSBtdXN0IGJlIG1haW50YWluZWQgYnkgdGhlIHRhYmxlIEFNIGFuZCBp bmRleCBBTQogICAgY29uc2lzdGVudGx5IGluIHRoZSBmYWNlIG9mIGNvbmN1cnJlbnQgaW5zZXJ0 aW9ucyBvciBkZWxldGlvbnMgaW4gdGhlCiAgICBpbmRleC4gIEl0IGlzIE9LIGlmIGEgZnJlc2hs eS1pbnNlcnRlZCBlbnRyeSBpcyBub3QgcmV0dXJuZWQgYnkgYSBzY2FuIHRoYXQKICAgIHdvdWxk IGhhdmUgZm91bmQgdGhlIGVudHJ5IGlmIGl0IGhhZCBleGlzdGVkIHdoZW4gdGhlIHNjYW4gc3Rh cnRlZCwgb3IgZm9yCkBAIC0xMDQ0LDEyICsxMjUxLDE0IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAo Q29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9w YXJhPgogCiAgIDxwYXJhPgotICAgSW5zdGVhZCBvZiB1c2luZyA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBkb25lIHdpdGgKLSAgIDxmdW5jdGlv bj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNoIGFsbCB0dXBsZXMgaW4gb25lIGNhbGwu ICBUaGlzIGNhbiBiZQotICAgbm90aWNlYWJseSBtb3JlIGVmZmljaWVudCB0aGFuIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYmVjYXVzZSBpdCBhbGxvd3MKLSAgIGF2b2lkaW5nIGxv Y2svdW5sb2NrIGN5Y2xlcyB3aXRoaW4gdGhlIGFjY2VzcyBtZXRob2QuICBJbiBwcmluY2lwbGUK LSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZSBzYW1l IGVmZmVjdHMgYXMgcmVwZWF0ZWQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4g Y2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KKyAgIEluc3RlYWQg b2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCisg ICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGlu IG9uZSBjYWxsLiAgVGhpcyBjYW4KKyAgIGJlIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhh biB3aXRoIGFuIDxxdW90ZT5vcmRlcmVkPC9xdW90ZT4gc2NhbgorICAgYmVjYXVzZSBpdCBhbGxv d3MgZWZmaWNpZW50IHNlcXVlbnRpYWwgYWNjZXNzIHRvIHRhYmxlIEFNIHBhZ2VzIGNvbnRhaW5p bmcKKyAgIG1hdGNoZXMuICBJbiBwcmluY2lwbGUgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5j dGlvbj4gc2hvdWxkIGhhdmUgdGhlCisgICBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBjYWxscywgYnV0IHdlIGltcG9zZSBzZXZlcmFsIHJlc3RyaWN0aW9ucyB0bwogICAg c2ltcGxpZnkgbWF0dGVycy4gIEZpcnN0IG9mIGFsbCwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9m dW5jdGlvbj4gcmV0dXJucyBhbGwKICAgIHR1cGxlcyBhdCBvbmNlIGFuZCBtYXJraW5nIG9yIHJl c3RvcmluZyBzY2FuIHBvc2l0aW9ucyBpc24ndAogICAgc3VwcG9ydGVkLiBTZWNvbmRseSwgdGhl IHR1cGxlcyBhcmUgcmV0dXJuZWQgaW4gYSBiaXRtYXAgd2hpY2ggZG9lc24ndApAQCAtMTA2Niwx MCArMTI3NSw2MiBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9p ZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAKICAgPHBhcmE+CiAgICBOb3RlIHRoYXQgaXQg aXMgcGVybWl0dGVkIGZvciBhbiBhY2Nlc3MgbWV0aG9kIHRvIGltcGxlbWVudCBvbmx5Ci0gICA8 ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldHR1 cGxlPC9mdW5jdGlvbj4sIG9yIHZpY2UgdmVyc2EsCi0gICBpZiBpdHMgaW50ZXJuYWwgaW1wbGVt ZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCisgICA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4vPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwKKyAgIG9yIHZpY2UgdmVy c2EsIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJ IG9yIHRoZSBvdGhlci4KICAgPC9wYXJhPgogCisgIDxzZWN0MiBpZD0iaW5kZXgtc2Nhbm5pbmct YmF0Y2hlcyI+CisgICA8dGl0bGU+VGFibGUgQU0gQ29uc2lkZXJhdGlvbnMgZm9yIEJhdGNoIFNj YW5uaW5nPC90aXRsZT4KKworICAgPHBhcmE+CisgICAgVGhpcyBzZWN0aW9uIGlzIHByaW1hcmls eSByZWxldmFudCB0bworICAgIDxsaW5rIGxpbmtlbmQ9InRhYmxlYW0iPnRhYmxlIGFjY2VzcyBt ZXRob2Q8L2xpbms+IGF1dGhvcnMuCisgICAgV2hlbiBhbiBpbmRleCBzY2FuIHVzZXMgdGhlIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLAorICAgIHRoZSB0YWJsZSBB TSBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgcG9zaXRpb24gc3RhdGUgd2l0aGluCisgICAg PHN0cnVjdGZpZWxkPnNjYW4tJmd0O2JhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+IGFuZCBmb3Ig Y29udHJvbGxpbmcgd2hlbgorICAgIGJ1ZmZlciBwaW5zIG9uIGluZGV4IHBhZ2VzIGFyZSByZWxl YXNlZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3RmaWVsZD5zY2Fu LSZndDtiYXRjaHJpbmdidWYuc2NhblBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRyYWNrcworICAg IHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gd2l0aGluIHRoZSByaW5nIGJ1ZmZlciBvZiBiYXRj aGVzLiAgVGhlIHRhYmxlIEFNCisgICAgbXVzdCBhZHZhbmNlIDxzdHJ1Y3RmaWVsZD5zY2FuUG9z PC9zdHJ1Y3RmaWVsZD4gYXMgdHVwbGVzIGFyZSByZXR1cm5lZCBieQorICAgIDxmdW5jdGlvbj50 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Q8L2Z1bmN0aW9uPi4gIFRoZSBjb3JlIGNvZGUgbWF5IGFs c28KKyAgICBtb2RpZnkgdGhpcyBmaWVsZCBkdXJpbmcgb3BlcmF0aW9ucyBzdWNoIGFzIG1hcmsv cmVzdG9yZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxzdHJ1Y3RmaWVsZD5z Y2FuLSZndDtiYXRjaHJpbmdidWYucHJlZmV0Y2hQb3M8L3N0cnVjdGZpZWxkPiBmaWVsZAorICAg IHRyYWNrcyB0aGUgcG9zaXRpb24gZm9yIEkvTyBwcmVmZXRjaGluZy4gIEl0IGlzIGdlbmVyYWxs eSBhZHZhbmNlZCBieQorICAgIGluaXRpYWxpemluZyBpdCBmcm9tIDxzdHJ1Y3RmaWVsZD5zY2Fu UG9zPC9zdHJ1Y3RmaWVsZD4gd2l0aGluIGEgcmVhZAorICAgIHN0cmVhbSBjYWxsYmFjaywgYWxs b3dpbmcgdGhlIHRhYmxlIEFNIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBwb2ludGVkIHRvCisg ICAgYnkgaXRlbXMgdGhhdCBhcmUgd2VsbCBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0 aW9uLiAgSW5pdGlhbGx5CisgICAgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVs ZD4gc3RhcnRzIGF0CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiwgYnV0 IGFzIHRoZSByZWFkIHN0cmVhbSByYW1wcyB1cCBpdCBjYW4KKyAgICBnZXQgZmFyIGFoZWFkICZt ZGFzaDsgc3Bhbm5pbmcgbXVsdGlwbGUgaW5kZXggcGFnZXMgaWYgbmVjZXNzYXJ5IHRvCisgICAg bWFpbnRhaW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFuY2UgZm9yIHRhYmxlIGJsb2Nr IHJlYWRzLiAgQSBtYWpvcgorICAgIGdvYWwgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gaW50ZXJmYWNlIGlzIHRvIGFsbG93IHRoZQorICAgIHRhYmxlIEFNIHRvIHByZWZl dGNoIHdpdGhvdXQgYmVpbmcgbGltaXRlZCB0byBpdGVtcyBmcm9tIHRoZSBjdXJyZW50CisgICAg PHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBpbmRleCBsZWFmIHBhZ2UuCisgICA8 L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEJvdGggPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVj dGZpZWxkPiBhbmQKKyAgICA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8L3N0cnVjdGZpZWxkPiBh cmUgY29udHJvbGxlZCBieSB0aGUgdGFibGUgQU0gYW5kCisgICAgY29yZSBjb2RlOyBpbmRleCBh Y2Nlc3MgbWV0aG9kcyBzaG91bGQgbm90IGFjY2VzcyBvciBtYW5pcHVsYXRlIHRoZXNlCisgICAg ZmllbGRzLiAgU2VlIHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvPC9maWxl bmFtZT4KKyAgICBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgZXhhbXBsZS4KKyAgIDwv cGFyYT4KKworICAgPHBhcmE+CisgICAgQnVmZmVyIHBpbnMgb24gaW5kZXggcGFnZXMgcmV0dXJu ZWQgYnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBhcmUKKyAgICBtYW5hZ2VkIGJ5 IHRoZSB0YWJsZSBBTS4gIFNlZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBh bmQKKyAgICA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBkZXNjcmlwdGlvbnMgaW4g PHhyZWYgbGlua2VuZD0iaW5kZXgtZnVuY3Rpb25zIi8+CisgICAgZm9yIGRldGFpbHMuCisgICA8 L3BhcmE+CisKKyAgPC9zZWN0Mj4KKwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4LWxv Y2tpbmciPgpAQCAtMTEyMywxMSArMTM4NCwxMyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBh cmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgIDwvbGlz dGl0ZW0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIEFuIGluZGV4IHNj YW4gbXVzdCBtYWludGFpbiBhIHBpbgotICAgICAgIG9uIHRoZSBpbmRleCBwYWdlIGhvbGRpbmcg dGhlIGl0ZW0gbGFzdCByZXR1cm5lZCBieQotICAgICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4sIGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gY2Fubm90IGRl bGV0ZQotICAgICAgIGVudHJpZXMgZnJvbSBwYWdlcyB0aGF0IGFyZSBwaW5uZWQgYnkgb3RoZXIg YmFja2VuZHMuICBUaGUgbmVlZAotICAgICAgIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJl bG93LgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHNjYW5zLCB0 aGUgaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0CisgICAgICAgbWFpbnRhaW4gYSBwaW4gb24gdGhl IGluZGV4IHBhZ2UgaG9sZGluZyB0aGUgaXRlbSBsYXN0IHJldHVybmVkLCBhbmQKKyAgICAgICA8 ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gY2Fubm90IGRlbGV0ZSBlbnRyaWVzIGZy b20gcGFnZXMgdGhhdAorICAgICAgIGFyZSBwaW5uZWQgYnkgb3RoZXIgYmFja2VuZHMuICBGb3Ig PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBzY2FucywKKyAgICAgICB0aGUgdGFibGUg YWNjZXNzIG1ldGhvZCBjb250cm9scyB3aGVuIHBpbnMgYXJlIGRyb3BwZWQgKHNlZQorICAgICAg IDx4cmVmIGxpbmtlbmQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiLz4pLiAgVGhlIG5lZWQgZm9y IHRoaXMgcnVsZSBpcworICAgICAgIGV4cGxhaW5lZCBiZWxvdy4KICAgICAgIDwvcGFyYT4KICAg ICAgPC9saXN0aXRlbT4KICAgICA8L2l0ZW1pemVkbGlzdD4KQEAgLTExNzMsNiArMTQzNiwzMSBA QCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwg T2lkIG9wY2ludHlwZSk7CiAgICBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIHN1Y2ggc2NhbnMgd2l0 aCBNVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIFRo ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBwcm92aWRlcyBhIGRp ZmZlcmVudCBhcHByb2FjaDoKKyAgIHRoZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIHJlY2VpdmVzIGJh dGNoZXMgb2YgVElEcyBhbmQgY29udHJvbHMgd2hlbiBpbmRleAorICAgcGFnZSBwaW5zIGFyZSBk cm9wcGVkLiAgQmVjYXVzZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHJlYWRzCisg ICBtdWx0aXBsZSBpbmRleCBsZWFmIHBhZ2VzIGFoZWFkIHRvIGZhY2lsaXRhdGUgSS9PIHByZWZl dGNoaW5nIG9mIHRhYmxlCisgICBibG9ja3MsIGl0IGNhbm5vdCBwcmFjdGljYWxseSBob2xkIHBp bnMgb24gYWxsIHRob3NlIHBhZ2VzIHNpbXVsdGFuZW91c2x5LgorICAgVGhlcmVmb3JlLCBsaWtl IDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCBJL08gcHJlZmV0Y2hpbmcgd2l0aAor ICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4g YW4gTVZDQy1jb21wbGlhbnQKKyAgIHNuYXBzaG90IGlzIGluIHVzZS4gIEluIHByYWN0aWNlLCB0 aGUgaGVhcCB0YWJsZSBBTSAoYW5kIGFueSB0YWJsZSBBTQorICAgd2l0aCBzaW1pbGFyIGNvbmN1 cnJlbmN5IHJ1bGVzKSB1c3VhbGx5IGRyb3BzIHBpbnMgZWFnZXJseSBmb3IgTVZDQworICAgc25h cHNob3Qgc2NhbnMsIGJ1dCByZXRhaW5zIHBpbnMgZm9yIG5vbi1NVkNDIHNuYXBzaG90IHNjYW5z LiAgSW5kZXgtb25seQorICAgc2NhbnMgbWF5IHJldGFpbiBwaW5zIGluIHNvbWUgY2FzZXMsIHdo aWxlIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGFuCisgICBNVkNDIHNuYXBzaG90IGFsd2F5 cyBkcm9wIHRoZWlyIHBpbnMgZWFnZXJseS4gIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQKKyAg IGltcGxlbWVudCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGRvIG5vdCBjb250cm9s IHdoZW4gcGlucyBhcmUKKyAgIGRyb3BwZWQ7IHRoYXQgZGVjaXNpb24gaXMgZGVsZWdhdGVkIHRv IHRoZSB0YWJsZSBBTS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1l dGhvZHMgdGhhdCB1c2UgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGltcGxl bWVudAorICAgdGhlIHBpbi1ob2xkaW5nIGJlaGF2aW9yIHRoZW1zZWx2ZXMuICBTdWNoIGluZGV4 IEFNcyBhcmUgZXhwZWN0ZWQgdG8gaG9sZAorICAgb250byB0aGUgbGVhZiBwYWdlIGJ1ZmZlciBw aW4gZm9yIG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zLCByZXBsaWNhdGluZworICAgdGhlIGJlaGF2 aW9yIHRoYXQgdGhlIGhlYXAgdGFibGUgQU0gd291bGQgdXNlIHdpdGgKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgIFdoZW4gdGhl IDxzdHJ1Y3RmaWVsZD5hbXByZWRsb2Nrczwvc3RydWN0ZmllbGQ+IGZsYWcgaXMgbm90IHNldCwg YW55IHNjYW4gdXNpbmcgdGhhdAogICAgaW5kZXggYWNjZXNzIG1ldGhvZCB3aXRoaW4gYSBzZXJp YWxpemFibGUgdHJhbnNhY3Rpb24gd2lsbCBhY3F1aXJlIGEKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJs ZS5zZ21sCmluZGV4IDc3YzVhNzYzZC4uNTViNzIyMmU5IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3Rh YmxlLnNnbWwKQEAgLTExNTIsMTIgKzExNTIsMTMgQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0K ICAgICAgPC9wYXJhPgogCiAgICAgIDxwYXJhPgotICAgICAgVGhlIGFjY2VzcyBtZXRob2QgbXVz dCBzdXBwb3J0IDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+IChzZWUgPHhyZWYKLSAgICAg IGxpbmtlbmQ9ImluZGV4YW0iLz4pOyBhdCBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+R0lO PC9hY3JvbnltPgotICAgICAgY2Fubm90IGJlIHVzZWQuICBBbHRob3VnaCBpdCdzIGFsbG93ZWQs IHRoZXJlIGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZwotICAgICAgQi10cmVlIG9yIGhhc2ggaW5k ZXhlcyB3aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMKLSAgICAgIGRv ZXMgbm90aGluZyB0aGF0IGFuIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3QgZG8g YmV0dGVyLgotICAgICAgU28gaW4gcHJhY3RpY2UgdGhlIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdh eXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKKyAgICAgIFRoZSBhY2Nlc3MgbWV0aG9k IG11c3Qgc3VwcG9ydCBlaXRoZXIgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4KKyAgICAg IG9yIDxsaXRlcmFsPmFtZ2V0YmF0Y2g8L2xpdGVyYWw+IChzZWUgPHhyZWYgbGlua2VuZD0iaW5k ZXhhbSIvPik7IGF0CisgICAgICBwcmVzZW50IHRoaXMgbWVhbnMgPGFjcm9ueW0+R0lOPC9hY3Jv bnltPiBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoCisgICAgICBpdCdzIGFsbG93ZWQsIHRoZXJl IGlzIGxpdHRsZSBwb2ludCBpbiB1c2luZyBCLXRyZWUgb3IgaGFzaCBpbmRleGVzCisgICAgICB3 aXRoIGFuIGV4Y2x1c2lvbiBjb25zdHJhaW50LCBiZWNhdXNlIHRoaXMgZG9lcyBub3RoaW5nIHRo YXQgYW4KKyAgICAgIG9yZGluYXJ5IHVuaXF1ZSBjb25zdHJhaW50IGRvZXNuJ3QgZG8gYmV0dGVy LiAgU28gaW4gcHJhY3RpY2UgdGhlCisgICAgICBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3YXlzIGJl IDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCiAgICAgICA8YWNyb255bT5TUC1HaVNUPC9hY3Jv bnltPi4KICAgICAgPC9wYXJhPgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvdGFibGVhbS5z Z21sIGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbAppbmRleCA5Y2NmNWI3MzkuLjhlNzBhNjE5 NiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvdGFibGVhbS5zZ21sCkBAIC0xMjksNiArMTI5LDE0IEBAIG15X3RhYmxlYW1faGFuZGxlcihQ R19GVU5DVElPTl9BUkdTKQogICBvcHRpb25hbCksIHRoZSBibG9jayBudW1iZXIgbmVlZHMgdG8g cHJvdmlkZSBsb2NhbGl0eS4KICA8L3BhcmE+CiAKKyA8cGFyYT4KKyAgVGFibGUgYWNjZXNzIG1l dGhvZHMgY2FuIHN1cHBvcnQgb3JkZXJlZCBpbmRleCBzY2FucyB1c2luZyB0aGUKKyAgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuIFNlZSBhbHNvCisgIDx4cmVmIGxp bmtlbmQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiLz4gZm9yIGRldGFpbHMgb24gaW50ZXJmYWNp bmcgd2l0aAorICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGluZGV4IGFjY2VzcyBt ZXRob2RzLCBhbmQgbWFuYWdpbmcgdGhlCisgIHNjYW4ncyBwb3NpdGlvbi4KKyA8L3BhcmE+CisK ICA8cGFyYT4KICAgRm9yIGNyYXNoIHNhZmV0eSwgYW4gQU0gY2FuIHVzZSBwb3N0Z3JlcycgPGxp bmsKICAgbGlua2VuZD0id2FsIj48YWNyb255bT5XQUw8L2Fjcm9ueW0+PC9saW5rPiwgb3IgYSBj dXN0b20gaW1wbGVtZW50YXRpb24uCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N5c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0 CmluZGV4IDNkZDYzZmQ4OC4uYjU2Mjg3MzZiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dApAQCAtMTU5LDYgKzE1OSw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20g cGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfaW5jcmVtZW50 YWxfc29ydCAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleG9ubHlzY2FuICAgICAgICAgICB8IG9u CiAgZW5hYmxlX2luZGV4c2NhbiAgICAgICAgICAgICAgIHwgb24KKyBlbmFibGVfaW5kZXhzY2Fu X3ByZWZldGNoICAgICAgfCBvbgogIGVuYWJsZV9tYXRlcmlhbCAgICAgICAgICAgICAgICB8IG9u CiAgZW5hYmxlX21lbW9pemUgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVyZ2Vqb2lu ICAgICAgICAgICAgICAgfCBvbgpAQCAtMTczLDcgKzE3NCw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0 aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVf c2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAg ICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyNSByb3dz KQorKDI2IHJvd3MpCiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlv bnMgZm9yIHZhcmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJlIHByZXNlbnQg b3IgYWJzZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIgc3Rh cnQuCi0tIAoyLjUxLjAKCg== --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0007-Limit-get_actual_variable_range-to-scan-one-inde.patch" Content-Disposition: attachment; filename="v10-0007-Limit-get_actual_variable_range-to-scan-one-inde.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdzi5 RnJvbSA3ZmRlYjU1YjE1MTIyMDQxN2Q4YTE1NmI2NWNjOTgyZGJmODE1OTA4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IE1v biwgMiBGZWIgMjAyNiAyMzozNDozNiAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjEwIDA3LzExXSBM aW1pdCBnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW4gb25lIGluZGV4CiBsZWFmIHBh Z2UuCgpSZXBsYWNlIFZJU0lURURfUEFHRVNfTElNSVQgd2l0aCBhIG1lY2hhbmlzbSB0aGF0IGxp bWl0cwpnZXRfYWN0dWFsX3ZhcmlhYmxlX3JhbmdlIHRvIHNjYW5uaW5nIG9ubHkgdGhlIGV4dHJl bWFsIGluZGV4IGxlYWYgcGFnZSwKcmF0aGVyIHRoYW4gY291bnRpbmcgaGVhcCBwYWdlIHZpc2l0 cy4KCmdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2Ugc2NhbnMgYW4gaW5kZXggdG8gZmluZCBhY3R1 YWwgbWluL21heCB2YWx1ZXMKZm9yIHBsYW5uZXIgc2VsZWN0aXZpdHkgZXN0aW1hdGlvbi4gIFNp bmNlIHRoaXMgaGFwcGVucyBkdXJpbmcgcGxhbm5pbmcsCndlIGNhbid0IGFmZm9yZCB0byBzcGVu ZCB0b28gbXVjaCB0aW1lIG9uIGl0LiAgQ29tbWl0IDljNmFkNWVhYTkgYWRkZWQKVklTSVRFRF9Q QUdFU19MSU1JVCAoYSBsaW1pdCBvZiAxMDAgaGVhcCBwYWdlIHZpc2l0cykgdG8gYm91bmQgdGhl CmFtb3VudCBvZiB3b3JrIHBlcmZvcm1lZCwgZ2l2aW5nIHVwIGFuZCBmYWxsaW5nIGJhY2sgdG8g dGhlIHBnX3N0YXRpc3RpYwpleHRyZW1hbCB2YWx1ZSB3aGVuIHRoZSBsaW1pdCBpcyBleGNlZWRl ZC4gIEJ1dCB0aGF0IGlzbid0IGVmZmVjdGl2ZSBpbgpjYXNlcyB3aXRoIG1vcmUgZXh0cmVtZSBj b25jZW50cmF0aW9ucyBvZiBkZWFkIGluZGV4IHR1cGxlcy4KClJlY2VudCBiZW5jaG1hcmsgcmVz dWx0cyBmcm9tIE1hcmsgQ2FsbGFnaGFuIHNob3cgdGhhdApWSVNJVEVEX1BBR0VTX0xJTUlUIGlz bid0IGVmZmVjdGl2ZSBvbmNlIHRoZSBkZWFkIGluZGV4IHR1cGxlIHByb2JsZW0KZ2V0cyBvdXQg b2YgaGFuZCAod2hpY2ggaXMgZXhwZWN0ZWQgd2l0aCBxdWV1ZS1saWtlIHRhYmxlcyB0aGF0CmNv bnRpbnVhbGx5IGRlbGV0ZSBvbGRlciByZWNvcmRzIGFuZCBpbnNlcnQgbmV3ZXIgb25lcykuICBU aGUgcm9vdCBjYXVzZQppcyB0aGF0IFZJU0lURURfUEFHRVNfTElNSVQgY291bnRzIGhlYXAgcGFn ZSB2aXNpdHMsIGJ1dCB3aGVuIG1hbnkgaW5kZXgKdHVwbGVzIGFyZSBtYXJrZWQgTFBfREVBRCwg X2J0X3JlYWRwYWdlIHRyYXZlcnNlcyBhcmJpdHJhcmlseSBtYW55IGluZGV4CnBhZ2VzIHdpdGhv dXQgcmV0dXJuaW5nIGFueSB0dXBsZXMgLS0gdGhlIGhlYXAgcGFnZSBjb3VudGVyIGluCnNlbGZ1 bmNzLmMgbmV2ZXIgZ2V0cyBhIGNoYW5jZSB0byBpbmNyZW1lbnQsIHNvIFZJU0lURURfUEFHRVNf TElNSVQKbmV2ZXIgdHJpZ2dlcnMuICBGdXJ0aGVybW9yZSwgdGhlIGRlc2lnbiBvZiBzZXR0aW5n IExQX0RFQUQgYml0cyB0byBoZWxwCmZ1dHVyZSBjYWxscyBpcyB1bHRpbWF0ZWx5IGNvdW50ZXJw cm9kdWN0aXZlOiBlYWNoIExQX0RFQUQgdHVwbGUgaXMgb25lCmZld2VyIHRoYXQgY291bnRzIGFn YWluc3QgVklTSVRFRF9QQUdFU19MSU1JVCwgc28gdGhlIG1vcmUgTFBfREVBRCBiaXRzCndlIHNl dCwgdGhlIGxlc3MgZWZmZWN0aXZlIHRoZSBsaW1pdCBiZWNvbWVzIGF0IGJhaWxpbmcgb3V0IGVh cmx5LgoKRml4IHRoaXMgYnkgYWRkaW5nIGEgbmV3IHhzX3JlYWRfZXh0cmVtYWxfb25seSBmbGFn IHRvIEluZGV4U2NhbkRlc2MuCldoZW4gc2V0LCB0aGUgc2NhbiBzdG9wcyBhZnRlciB0aGUgZmly c3QgbGVhZiBwYWdlOiBfYnRfcmVhZGZpcnN0cGFnZQphbmQgX2J0X3JlYWRuZXh0cGFnZSBpbiBu YnRyZWUgdHJlYXQgaXQgbGlrZSBlbmQtb2Ytc2NhbiwgYW5kCmhlYXBhbV9iYXRjaF9nZXRuZXh0 IHJldHVybnMgTlVMTCBhZnRlciB0aGUgZmlyc3QgYmF0Y2guICBzZWxmdW5jcy5jCnNldHMgdGhp cyBmbGFnIGJlZm9yZSBzdGFydGluZyB0aGUgc2Nhbi4KClRoaXMgcHJvdmlkZXMgYSBoYXJkIGd1 YXJhbnRlZSBvbiB0aGUgbWF4aW11bSB3b3JrIHBlciBjYWxsLiAgVW5saWtlClZJU0lURURfUEFH RVNfTElNSVQsIHRoaXMgbGltaXQgY2Fubm90IGJlIGVyb2RlZCBieSBMUF9ERUFEIGJpdHMuCgpU aGlzIGFwcHJvYWNoIGlzIGFsc28gY29tcGF0aWJsZSB3aXRoIGluZGV4IHByZWZldGNoaW5nIGNv bW1pdCdzIG5ldwp0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoKSBpbnRlcmZhY2UsIHdoaWNoIGhp ZGVzIGhlYXAgYWNjZXNzIGRldGFpbHMKZnJvbSBjYWxsZXJzIGxpa2Ugc2VsZnVuY3MuYywgbWFr aW5nIFZJU0lURURfUEFHRVNfTElNSVQgaW1wcmFjdGljYWwgdG8KaW1wbGVtZW50IHdpdGhvdXQg cHVzaGluZyBhZC1ob2MgbG9naWMgaW50byB0aGUgdGFibGUgQU0gbGF5ZXIuCgpOb3RlOiBUaGlz IGlzIHN0aWxsIGEgV0lQLiAgVGhlcmUgYXJlIHBlcmhhcHMgc3RpbGwgc29tZSBjYXNlcyB0aGF0 CndlJ3JlIG5vdCBleGFjdGx5IGhhbmRsaW5nIHBlcmZlY3RseSwgd2hlcmUgKGZvciBleGFtcGxl KSB0aGUgZmlyc3QKYmF0Y2ggdGhhdCB0aGUgc2NhbiByZXR1cm5zIGhhcHBlbnMgdG8gbm90IGNv bnRhaW4gYW55IG1hdGNoZXMgZHVlIHRvCl9idF9maXJzdCBsYW5kaW5nIHJpZ2h0IG9uIHRoZSBl ZGdlIG9mIHZhbHVlcyBiZXR3ZWVuIHR3byBhZGpvaW5pbmcKcGFnZXMgKG5vdGUgdGhhdCB3ZSB1 c2UgYW4gSVMgTk9UIE5VTEwgc2NhbiBrZXkgZnJvbSBzZWxmdW5jcy5jKS4gIEJ1dAp0aGlzIHNl ZW1zIHRvIGJlIHJvdWdobHkgdGhlIHJpZ2h0IGlkZWEuCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICB8ICA3ICsrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbS5jICAgICAgICAgfCAgMyAtLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMgfCAxMiArKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9nZW5hbS5jICAgICAgICAgfCAgMiArKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRz ZWFyY2guYyAgICB8IDEwICsrKysrKystLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5j cy5jICAgICAgICAgfCAxNiArKysrKysrKy0tLS0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDM2IGlu c2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGUzM2I2 NjYzMy4uNzI3NjNjZjQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTM3MCw2ICszNzAsMTMgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNj YW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsKIAogCWludDY0CQl0dXBsZXNfbmVlZGVkOworCisJ LyoKKwkgKiBGbGFnIHRvIHJlcXVlc3QgZWFybHkgYWJvcnQgZHVyaW5nIGdldF9hY3R1YWxfdmFy aWFibGVfcmFuZ2Ugc2NhbnMuCisJICogU3VjaCBzY2FucyBtdXN0IGVuZCBvbiB0aGUgcmlnaHRt b3N0IChvciBsZWZ0bW9zdCkgaW5kZXggcGFnZSwgbm8KKwkgKiBtYXR0ZXIgd2hldGhlciB0aGVy ZSBhcmUgbW9yZSBtYXRjaGVzIGluIHByZXZpb3VzIChvciBsYXRlcikgcGFnZXMuCisJICovCisJ Ym9vbAkJeHNfcmVhZF9leHRyZW1hbF9vbmx5OwogfSBJbmRleFNjYW5EZXNjRGF0YTsKIAogLyog R2VuZXJpYyBzdHJ1Y3R1cmUgZm9yIHBhcmFsbGVsIHNjYW5zICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbS5jCmluZGV4IDMwMDQ5NjRhYi4uYjcxMzJiYzZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYwpAQCAtMTg4Myw5ICsxODgzLDYgQEAgaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcihJdGVtUG9p bnRlciB0aWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkgKiBJZiB3ZSBj YW4ndCBzZWUgaXQsIG1heWJlIG5vIG9uZSBlbHNlIGNhbiBlaXRoZXIuICBBdCBjYWxsZXIKIAkJ ICogcmVxdWVzdCwgY2hlY2sgd2hldGhlciBhbGwgY2hhaW4gbWVtYmVycyBhcmUgZGVhZCB0byBh bGwKIAkJICogdHJhbnNhY3Rpb25zLgotCQkgKgotCQkgKiBOb3RlOiBpZiB5b3UgY2hhbmdlIHRo ZSBjcml0ZXJpb24gaGVyZSBmb3Igd2hhdCBpcyAiZGVhZCIsIGZpeCB0aGUKLQkJICogcGxhbm5l cidzIGdldF9hY3R1YWxfdmFyaWFibGVfcmFuZ2UoKSBmdW5jdGlvbiB0byBtYXRjaC4KIAkJICov CiAJCWlmIChhbGxfZGVhZCAmJiAqYWxsX2RlYWQpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDFmNzMzOGEzNy4uZTBiZmFjZjk3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTUwNiw2ICs1MDYsMTggQEAgaGVh cGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbiwKIAkJICovCiAJCWhzY2FuLT54c195aWVsZF9jaGVjayA9IGZhbHNlOwogCisJCS8qCisJ CSAqIHhzX3JlYWRfZXh0cmVtYWxfb25seSBzY2FucyBhcmUgdXNlZCBieSBnZXRfYWN0dWFsX3Zh cmlhYmxlX3JhbmdlCisJCSAqIHRvIGZpbmQgbWluL21heCB2YWx1ZXMuICBUaGV5IG9ubHkgbmVl ZCB0aGUgZXh0cmVtYWwgKGZpcnN0IG9yCisJCSAqIGxhc3QpIGluZGV4IHBhZ2UsIHNvIG9uY2Ug d2UgaGF2ZSBvbmUgYmF0Y2gsIHdlIGdpdmUgdXAgY29tcGxldGVseS4KKwkJICovCisJCWlmICh1 bmxpa2VseShzY2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkpICYmIHByaW9yQmF0Y2gpCisJCXsK KwkJCUFzc2VydCghaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwkJCUFzc2VydChzY2FuLT54c193 YW50X2l0dXApOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwogCQkvKgogCQkgKiBEZWxheSBpbml0 aWFsaXppbmcgc3RyZWFtIHVudGlsIHJlYWRpbmcgZnJvbSBzY2FuJ3Mgc2Vjb25kIGJhdGNoLgog CQkgKiBUaGlzIGhldXJpc3RpYyBhdm9pZHMgd2FzdGluZyBjeWNsZXMgb24gc3RhcnRpbmcgYSBy ZWFkIHN0cmVhbSBmb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5h bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXggYzU2YTlmMDUyLi41 MWQ5ODk0M2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC0xMjgsNiArMTI4LDggQEAg UmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzKQogCiAJc2Nhbi0+dHVwbGVzX25lZWRlZCA9IC0xOwkvKiBubyBsaW1pdCAq LwogCisJc2Nhbi0+eHNfcmVhZF9leHRyZW1hbF9vbmx5ID0gZmFsc2U7CisKIAlyZXR1cm4gc2Nh bjsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2gu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKaW5kZXggNmZiZGJjYTRm Li42MzEwYzI0NmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwpAQCAtMTY2 NSwxNCArMTY2NSwxOCBAQCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCiAKIAlBc3NlcnQoZmlyc3RiYXRjaC0+ZGlyID09IGRp cik7CiAKLQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJaWYgKGJsa25vID09IFBfTk9ORSB8fCBz Y2FuLT54c19yZWFkX2V4dHJlbWFsX29ubHkgfHwKIAkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSA/CiAJCSAhZmlyc3RiYXRjaC0+bW9yZVJpZ2h0IDogIWZpcnN0YmF0Y2gtPm1vcmVMZWZ0 KSkKIAl7CiAJCS8qCiAJCSAqIGZpcnN0YmF0Y2ggX2J0X3JlYWRwYWdlIGNhbGwgZW5kZWQgc2Nh biBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoCi0JCSAqIGlmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz IHNldCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJICogaWYgc28tPm5l ZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KS4K KwkJICoKKwkJICogQWxzbyBjdXQgb3VyIGxvc3NlcyBkdXJpbmcgeHNfcmVhZF9leHRyZW1hbF9v bmx5IHNjYW5zLCB3aGljaCBhcmUKKwkJICogbGltaXRlZCB0byBzY2FubmluZyBvbmx5IHRoZSBl eHRyZW1hbCBsZWFmIHBhZ2UgaW4gdGhlIGluZGV4LgogCQkgKi8KKwkJQXNzZXJ0KCFzY2FuLT54 c19yZWFkX2V4dHJlbWFsX29ubHkgfHwgIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CiAJCXJldHVybiBOVUxMOwpAQCAtMTc5MCw3ICsxNzk0LDcgQEAgX2J0X3JlYWRuZXh0 cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAogCQluZXdiYXRjaC0+ YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRp cmVjdGlvbj8gKi8KLQkJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQlpZiAoYmxrbm8gPT0gUF9O T05FIHx8IHNjYW4tPnhzX3JlYWRfZXh0cmVtYWxfb25seSB8fAogCQkJKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyKSA/CiAJCQkgIW5ld2JhdGNoLT5tb3JlUmlnaHQgOiAhbmV3YmF0Y2gtPm1v cmVMZWZ0KSkKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCA2MTZhY2ZjOTUuLjZi YTQ0ZmE0NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTcxNjcsMTQgKzcxNjcsMTAg QEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCSAqCiAJ ICogRGVzcGl0ZSBhbGwgdGhpcyBjYXJlLCB0aGVyZSBhcmUgc2l0dWF0aW9ucyB3aGVyZSB3ZSBt aWdodCBmaW5kIG1hbnkKIAkgKiBub24tdmlzaWJsZSB0dXBsZXMgbmVhciB0aGUgZW5kIG9mIHRo ZSBpbmRleC4gIFdlIGRvbid0IHdhbnQgdG8gZXhwZW5kCi0JICogYSBodWdlIGFtb3VudCBvZiB0 aW1lIGhlcmUsIHNvIHdlIGdpdmUgdXAgb25jZSB3ZSd2ZSByZWFkIHRvbyBtYW55IGhlYXAKLQkg KiBwYWdlcy4gIFdoZW4gd2UgZmFpbCBmb3IgdGhhdCByZWFzb24sIHRoZSBjYWxsZXIgd2lsbCBl bmQgdXAgdXNpbmcKLQkgKiB3aGF0ZXZlciBleHRyZW1hbCB2YWx1ZSBpcyByZWNvcmRlZCBpbiBw Z19zdGF0aXN0aWMuCi0JICoKLQkgKiBYWFggVGhpcyBjYW4ndCB3b3JrIHdpdGggdGhlIG5ldyB0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgaW50ZXJmYWNlLAotCSAqIHdoaWNoIHNpbXBseSB3b24n dCByZXR1cm4gYSB0dXBsZSB0aGF0IGlzbid0IHZpc2libGUgdG8gb3VyIHNuYXBzaG90LgotCSAq IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCB3aWxsIG5lZWQgc29tZSBraW5kIG9mIGNhbGxiYWNr IHRoYXQgcHJvdmlkZXMKLQkgKiBhIHdheSBmb3IgdGhlIHNjYW4gdG8gZ2l2ZSB1cCB3aGVuIHRo ZSBjb3N0cyBzdGFydCB0byBnZXQgb3V0IG9mIGhhbmQuCisJICogYSBodWdlIGFtb3VudCBvZiB0 aW1lIGhlcmUsIHNvIHdlIGdpdmUgdXAgdGhlIGV4dHJlbWFsIGluZGV4IGxlYWYgcGFnZQorCSAq IGhhcyBubyBtYXRjaGluZyBpdGVtcyAoZ2VuZXJhbGx5IG9ubHkgc2VlbiB3aGVuIHRoZSBwYWdl IGhhcyBtYW55IGluZGV4CisJICogdHVwbGVzIHdpdGggc2V0IExQX0RFQUQgYml0cykuICBXaGVu IHdlIGdpdmUgdXAgdGhlIGNhbGxlciB3aWxsIGVuZCB1cAorCSAqIHVzaW5nIHdoYXRldmVyIGV4 dHJlbWFsIHZhbHVlIGlzIHJlY29yZGVkIGluIHBnX3N0YXRpc3RpYy4KIAkgKi8KIAlJbml0Tm9u VmFjdXVtYWJsZVNuYXBzaG90KFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwKIAkJCQkJCQkgIEdsb2Jh bFZpc1Rlc3RGb3IoaGVhcFJlbCkpOwpAQCAtNzE4Myw2ICs3MTc5LDEwIEBAIGdldF9hY3R1YWxf dmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJCQkJICZTbmFwc2hvdE5v blZhY3V1bWFibGUsIE5VTEwsCiAJCQkJCQkJCSAxLCAwKTsKIAlBc3NlcnQoaW5kZXhfc2Nhbi0+ eHNfd2FudF9pdHVwKTsKKworCS8qIFNldCB1cCBvdXIgaW5kZXgtb25seSBzY2FuIHRvIHJlYWQg YXQgbW9zdCBvbmUgaW5kZXggbGVhZiBwYWdlICovCisJaW5kZXhfc2Nhbi0+eHNfcmVhZF9leHRy ZW1hbF9vbmx5ID0gdHJ1ZTsKKwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywg MSwgTlVMTCwgMCk7CiAKIAkvKiBGZXRjaCBmaXJzdC9uZXh0IHR1cGxlIGluIHNwZWNpZmllZCBk aXJlY3Rpb24gKi8KLS0gCjIuNTEuMAoK --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0004-Introduce-read_stream_-pause-resume-yield.patch" Content-Disposition: attachment; filename="v10-0004-Introduce-read_stream_-pause-resume-yield.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdzr8 RnJvbSBlNjY2OTQzZGM3ZGU2MjcwOWQyNTcxZTNlZjJmN2Y1NDMyOTEwNDNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTMgSmFuIDIwMjYgMjA6NDQ6MTQgKzAxMDAKU3ViamVjdDogW1BBVENIIHYx MCAwNC8xMV0gSW50cm9kdWNlIHJlYWRfc3RyZWFtX3twYXVzZSxyZXN1bWUseWllbGR9KCkuCgpB dXRob3I6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhVS0dKTFQySnZXTEVpQlhNYmtTU2M1c29fWTclM0RO JTJCUzJjZTducGpMdzhRTDNkNXclNDBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvcmVhZF9zdHJlYW0uaCAgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvYWlvL3JlYWRfc3RyZWFtLmMgICAgICAgIHwgIDUwICsrKystCiBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL01ha2VmaWxlICAgICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2Fpby9tZXNvbi5idWlsZCAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Fpby90LzAwMV9haW8ucGwgICAgICAgfCAgMzAgKysrCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf YWlvL3Rlc3RfYWlvLS0xLjAuc3FsICB8ICAxMyArKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fp by90ZXN0X3JlYWRfc3RyZWFtLmMgfCAxODEgKysrKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgfCAgIDEgKwogOCBmaWxlcyBjaGFu Z2VkLCAyODAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfcmVhZF9zdHJlYW0uYwoKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcmVhZF9zdHJlYW0uaCBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcmVhZF9zdHJlYW0uaAppbmRleCBmMmEwY2M3OWMuLmUzYjZiYjJmMyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9yZWFkX3N0cmVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcmVhZF9zdHJlYW0uaApAQCAtOTksNiArOTksOSBAQCBleHRlcm4gUmVhZFN0cmVhbSAqcmVh ZF9zdHJlYW1fYmVnaW5fc21ncl9yZWxhdGlvbihpbnQgZmxhZ3MsCiAJCQkJCQkJCQkJCQkgICBS ZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBjYWxsYmFjaywKIAkJCQkJCQkJCQkJCSAgIHZvaWQgKmNh bGxiYWNrX3ByaXZhdGVfZGF0YSwKIAkJCQkJCQkJCQkJCSAgIHNpemVfdCBwZXJfYnVmZmVyX2Rh dGFfc2l6ZSk7CitleHRlcm4gQmxvY2tOdW1iZXIgcmVhZF9zdHJlYW1fcGF1c2UoUmVhZFN0cmVh bSAqc3RyZWFtKTsKK2V4dGVybiB2b2lkIHJlYWRfc3RyZWFtX3Jlc3VtZShSZWFkU3RyZWFtICpz dHJlYW0pOworZXh0ZXJuIEJsb2NrTnVtYmVyIHJlYWRfc3RyZWFtX3lpZWxkKFJlYWRTdHJlYW0g KnN0cmVhbSk7CiBleHRlcm4gdm9pZCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJl YW0pOwogZXh0ZXJuIHZvaWQgcmVhZF9zdHJlYW1fZW5kKFJlYWRTdHJlYW0gKnN0cmVhbSk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IDg4NzE3YzJmZi4uMGRiZWMy YWJiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTEwMCwxMSArMTAw LDEzIEBAIHN0cnVjdCBSZWFkU3RyZWFtCiAJaW50MTYJCXBpbm5lZF9idWZmZXJzOwogCWludDE2 CQlkaXN0YW5jZTsKIAlpbnQxNgkJaW5pdGlhbGl6ZWRfYnVmZmVyczsKKwlpbnQxNgkJcmVzdW1l X2Rpc3RhbmNlOwogCWludAkJCXJlYWRfYnVmZmVyc19mbGFnczsKIAlib29sCQlzeW5jX21vZGU7 CQkvKiB1c2luZyBpb19tZXRob2Q9c3luYyAqLwogCWJvb2wJCWJhdGNoX21vZGU7CQkvKiBSRUFE X1NUUkVBTV9VU0VfQkFUQ0hJTkcgKi8KIAlib29sCQlhZHZpY2VfZW5hYmxlZDsKIAlib29sCQl0 ZW1wb3Jhcnk7CisJYm9vbAkJeWllbGRlZDsKIAogCS8qCiAJICogT25lLWJsb2NrIGJ1ZmZlciB0 byBzdXBwb3J0ICd1bmdldHRpbmcnIGEgYmxvY2sgbnVtYmVyLCB0byByZXNvbHZlIGZsb3cKQEAg LTg3OSw3ICs4ODEsMTUgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3Ry ZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCiAJCS8qIEVuZCBvZiBzdHJlYW0gcmVhY2hl ZD8gICovCiAJCWlmIChzdHJlYW0tPmRpc3RhbmNlID09IDApCi0JCQlyZXR1cm4gSW52YWxpZEJ1 ZmZlcjsKKwkJeworCQkJaWYgKCFzdHJlYW0tPnlpZWxkZWQpCisJCQkJcmV0dXJuIEludmFsaWRC dWZmZXI7CisKKwkJCS8qIFRoZSBjYWxsYmFjayB5aWVsZGVkLiAgUmVzdW1lLiAqLworCQkJc3Ry ZWFtLT55aWVsZGVkID0gZmFsc2U7CisJCQlyZWFkX3N0cmVhbV9yZXN1bWUoc3RyZWFtKTsKKwkJ CUFzc2VydChzdHJlYW0tPmRpc3RhbmNlICE9IDApOworCQl9CiAKIAkJLyoKIAkJICogVGhlIHVz dWFsIG9yZGVyIG9mIG9wZXJhdGlvbnMgaXMgdGhhdCB3ZSBsb29rIGFoZWFkIGF0IHRoZSBib3R0 b20KQEAgLTEwMzQsNiArMTA0NCw0NCBAQCByZWFkX3N0cmVhbV9uZXh0X2Jsb2NrKFJlYWRTdHJl YW0gKnN0cmVhbSwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgKnN0cmF0ZWd5KQogCXJldHVybiByZWFk X3N0cmVhbV9nZXRfYmxvY2soc3RyZWFtLCBOVUxMKTsKIH0KIAorLyoKKyAqIFRlbXBvcmFyaWx5 IHN0b3AgY29uc3VtaW5nIGJsb2NrIG51bWJlcnMgZnJvbSB0aGUgYmxvY2sgbnVtYmVyIGNhbGxi YWNrLiAgSWYKKyAqIGNhbGxlZCBpbnNpZGUgdGhlIGJsb2NrIG51bWJlciBjYWxsYmFjaywgaXRz IHJldHVybiB2YWx1ZSBzaG91bGQgYmUKKyAqIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjay4KKyAq LworQmxvY2tOdW1iZXIKK3JlYWRfc3RyZWFtX3BhdXNlKFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sK KwlzdHJlYW0tPnJlc3VtZV9kaXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFuY2U7CisJc3RyZWFtLT5k aXN0YW5jZSA9IDA7CisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKK30KKworLyoKKyAqIFJl c3VtZSBsb29raW5nIGFoZWFkIGFmdGVyIHRoZSBibG9jayBudW1iZXIgY2FsbGJhY2sgcmVwb3J0 ZWQgZW5kLW9mLXN0cmVhbS4KKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBzdHJlYW1zIG9mIHNlbGYt cmVmZXJlbnRpYWwgYmxvY2tzLCBhZnRlciBhIGJ1ZmZlciBuZWVkZWQKKyAqIHRvIGJlIGNvbnN1 bWVkIGFuZCBleGFtaW5lZCB0byBmaW5kIG1vcmUgYmxvY2sgbnVtYmVycy4KKyAqLwordm9pZAor cmVhZF9zdHJlYW1fcmVzdW1lKFJlYWRTdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJlYW0tPmRpc3Rh bmNlID0gc3RyZWFtLT5yZXN1bWVfZGlzdGFuY2U7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBp bnNpZGUgYSBibG9jayBudW1iZXIgY2FsbGJhY2ssIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBj YWxsZXIKKyAqIG9mIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKCkgd2l0aG91dCBsb29raW5nIGZ1 cnRoZXIgYWhlYWQuICBJdHMgcmV0dXJuCisgKiB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgYnkg dGhlIGNhbGxiYWNrLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHBhdXNpbmcgYW5kCisgKiByZXN1 bWluZyBhdXRvbWF0aWNhbGx5IGF0IHRoZSBuZXh0IGNhbGwgdG8gcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoKS4KKyAqLworQmxvY2tOdW1iZXIKK3JlYWRfc3RyZWFtX3lpZWxkKFJlYWRTdHJlYW0g KnN0cmVhbSkKK3sKKwlyZWFkX3N0cmVhbV9wYXVzZShzdHJlYW0pOworCXN0cmVhbS0+eWllbGRl ZCA9IHRydWU7CisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKK30KKwogLyoKICAqIFJlc2V0 IGEgcmVhZCBzdHJlYW0gYnkgcmVsZWFzaW5nIGFueSBxdWV1ZWQgdXAgYnVmZmVycywgYWxsb3dp bmcgdGhlIHN0cmVhbQogICogdG8gYmUgdXNlZCBhZ2FpbiBmb3IgZGlmZmVyZW50IGJsb2Nrcy4g IFRoaXMgY2FuIGJlIHVzZWQgdG8gY2xlYXIgYW4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9haW8vTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL01ha2VmaWxl CmluZGV4IGY1M2NjNjQ2Ny4uNDY1ZWIwOWVlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYWlvL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vTWFrZWZp bGUKQEAgLTUsNyArNSw4IEBAIFBHRklMRURFU0MgPSAidGVzdF9haW8gLSB0ZXN0IGNvZGUgZm9y IEFJTyIKIE1PRFVMRV9iaWcgPSB0ZXN0X2FpbwogT0JKUyA9IFwKIAkkKFdJTjMyUkVTKSBcCi0J dGVzdF9haW8ubworCXRlc3RfYWlvLm8gXAorCXRlc3RfcmVhZF9zdHJlYW0ubwogCiBFWFRFTlNJ T04gPSB0ZXN0X2FpbwogREFUQSA9IHRlc3RfYWlvLS0xLjAuc3FsCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Fpby9tZXNvbi5idWlsZAppbmRleCBmZWZhMjViYzUuLmQxM2ZkYTIxOSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYWlvL21lc29uLmJ1aWxkCkBAIC0yLDYgKzIsNyBAQAogCiB0ZXN0X2Fpb19zb3Vy Y2VzID0gZmlsZXMoCiAgICd0ZXN0X2Fpby5jJywKKyAgJ3Rlc3RfcmVhZF9zdHJlYW0uYycsCiAp CiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Qv MDAxX2Fpby5wbAppbmRleCA1YzYzNGVjM2MuLjVhZjU1OGJmNCAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2Fpby90LzAwMV9haW8ucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2Fpby90LzAwMV9haW8ucGwKQEAgLTE0ODksNiArMTQ4OSwzNSBAQCBTRUxFQ1QgcmVhZF9y ZWxfYmxvY2tfbGwoJ3RibF9jc19mYWlsJywgMywgbmJsb2Nrcz0+MSwgemVyb19vbl9lcnJvcj0+ dHJ1ZSk7KSwKIAkkcHNxbC0+cXVpdCgpOwogfQogCisjIFJlYWQgc3RyZWFtIHRlc3RzCitzdWIg dGVzdF9yZWFkX3N0cmVhbQoreworCW15ICRpb19tZXRob2QgPSBzaGlmdDsKKwlteSAkbm9kZSA9 IHNoaWZ0OworCW15ICgkcmV0LCAkb3V0cHV0KTsKKworCW15ICRwc3FsID0gJG5vZGUtPmJhY2tn cm91bmRfcHNxbCgncG9zdGdyZXMnLCBvbl9lcnJvcl9zdG9wID0+IDApOworCisJJHBzcWwtPnF1 ZXJ5X3NhZmUoCisJCXFxKAorQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSB0bXBfcmVhZF9zdHJlYW0o ZGF0YSBpbnQgbm90IG51bGwpOworSU5TRVJUIElOVE8gdG1wX3JlYWRfc3RyZWFtIFNFTEVDVCBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApOworU0VMRUNUIHRlc3RfcmVhZF9zdHJlYW1fcmVzdW1l KCd0bXBfcmVhZF9zdHJlYW0nLCAwKTsKK0RST1AgVEFCTEUgdG1wX3JlYWRfc3RyZWFtOworKSk7 CisKKwkkcHNxbC0+cXVlcnlfc2FmZSgKKwkJcXEoCitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHRt cF9yZWFkX3N0cmVhbShkYXRhIGludCBub3QgbnVsbCk7CitJTlNFUlQgSU5UTyB0bXBfcmVhZF9z dHJlYW0gU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCk7CitTRUxFQ1QgdGVzdF9yZWFk X3N0cmVhbV95aWVsZCgndG1wX3JlYWRfc3RyZWFtJywgMCk7CitEUk9QIFRBQkxFIHRtcF9yZWFk X3N0cmVhbTsKKykpOworCisJJHBzcWwtPnF1aXQoKTsKK30KKworCiAKICMgUnVuIGFsbCB0ZXN0 cyB0aGF0IGFyZSBzdXBwb3J0ZWQgZm9yIGFsbCBpb19tZXRob2RzCiBzdWIgdGVzdF9nZW5lcmlj CkBAIC0xNTI1LDYgKzE1NTQsNyBAQCBDSEVDS1BPSU5UOwogCXRlc3RfY2hlY2tzdW0oJGlvX21l dGhvZCwgJG5vZGUpOwogCXRlc3RfaWdub3JlX2NoZWNrc3VtKCRpb19tZXRob2QsICRub2RlKTsK IAl0ZXN0X2NoZWNrc3VtX2NyZWF0ZWRiKCRpb19tZXRob2QsICRub2RlKTsKKwl0ZXN0X3JlYWRf c3RyZWFtKCRpb19tZXRob2QsICRub2RlKTsKIAogICBTS0lQOgogCXsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3FsCmluZGV4IGU0OTU0ODFjNC4uZTM3ODEwYjcy IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfYWlvLS0xLjAuc3Fs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8vdGVzdF9haW8tLTEuMC5zcWwKQEAgLTEw NiwzICsxMDYsMTYgQEAgQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKIENSRUFURSBG VU5DVElPTiBpbmpfaW9fcmVvcGVuX2RldGFjaCgpCiBSRVRVUk5TIHBnX2NhdGFsb2cudm9pZCBT VFJJQ1QKIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7CisKKworCisvKgorICogUmVh ZCBzdHJlYW0gcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfcmVh ZF9zdHJlYW1fcmVzdW1lKHJlbCByZWdjbGFzcywgYmxvY2tubyBpbnQ0KQorUkVUVVJOUyBwZ19j YXRhbG9nLnZvaWQgU1RSSUNUCitBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOworCitD UkVBVEUgRlVOQ1RJT04gdGVzdF9yZWFkX3N0cmVhbV95aWVsZChyZWwgcmVnY2xhc3MsIGJsb2Nr bm8gaW50NCkKK1JFVFVSTlMgcGdfY2F0YWxvZy52b2lkIFNUUklDVAorQVMgJ01PRFVMRV9QQVRI TkFNRScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9haW8v dGVzdF9yZWFkX3N0cmVhbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Fpby90ZXN0X3JlYWRf c3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi5kMWQ0MzZhOTAK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYWlvL3Rlc3RfcmVhZF9z dHJlYW0uYwpAQCAtMCwwICsxLDE4MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVz dF9yZWFkX3N0cmVhbS5jCisgKgkJSGVscGVycyB0byB3cml0ZSB0ZXN0cyBmb3IgcmVhZF9zdHJl YW0uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAyMC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9haW8vdGVzdF9yZWFkX3N0cmVhbS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvcmVsYXRp b24uaCIKKyNpbmNsdWRlICJmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNp bmNsdWRlICJzdG9yYWdlL3JlYWRfc3RyZWFtLmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisJQmxv Y2tOdW1iZXIgYmxrbm87CisJaW50CQkJY291bnQ7Cit9IHRlc3RfcmVhZF9zdHJlYW1fcmVzdW1l X3N0YXRlOworCitzdGF0aWMgQmxvY2tOdW1iZXIKK3Rlc3RfcmVhZF9zdHJlYW1fcmVzdW1lX2Ni KFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCSAgIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0 YSwKKwkJCQkJCSAgIHZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwl0ZXN0X3JlYWRfc3RyZWFt X3Jlc3VtZV9zdGF0ZSAqc3RhdGUgPSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisKKwkvKiBQZXJp b2RpYyBlbmQtb2Ytc3RyZWFtLiAqLworCWlmICgrK3N0YXRlLT5jb3VudCAlIDMgPT0gMCkKKwkJ cmV0dXJuIHJlYWRfc3RyZWFtX3BhdXNlKHN0cmVhbSk7CisKKwlyZXR1cm4gc3RhdGUtPmJsa25v OworfQorCisvKgorICogVGVzdCByZWFkX3N0cmVhbV9yZXN1bWUoKSwgYWxsb3dpbmcgYSBzdHJl YW0gdG8gZW5kIHRlbXBvcmFyaWx5IGFuZCB0aGVuCisgKiBjb250aW51ZSB3aGVyZSBpdCBsZWZ0 IG9mZi4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZSk7 CitEYXR1bQordGVzdF9yZWFkX3N0cmVhbV9yZXN1bWUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlP aWQJCQlyZWxpZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJQmxvY2tOdW1iZXIgYmxrbm8gPSBQR19H RVRBUkdfVUlOVDMyKDEpOworCVJlbGF0aW9uCXJlbDsKKwlCdWZmZXIJCWJ1ZjsKKwlSZWFkU3Ry ZWFtICpzdHJlYW07CisJdGVzdF9yZWFkX3N0cmVhbV9yZXN1bWVfc3RhdGUgc3RhdGUgPSB7LmJs a25vID0gYmxrbm99OworCisJcmVsID0gcmVsYXRpb25fb3BlbihyZWxpZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9E RUZBVUxULAorCQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJcmVsLAorCQkJCQkJCQkJCU1BSU5f Rk9SS05VTSwKKwkJCQkJCQkJCQl0ZXN0X3JlYWRfc3RyZWFtX3Jlc3VtZV9jYiwKKwkJCQkJCQkJ CQkmc3RhdGUsCisJCQkJCQkJCQkJMCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkK Kwl7CisJCS8qIFNhbWUgYmxvY2sgdHdpY2UuICovCisJCWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRf YnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWYp ID09IGJsa25vKTsKKwkJUmVsZWFzZUJ1ZmZlcihidWYpOworCQlidWYgPSByZWFkX3N0cmVhbV9u ZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCQlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmKSA9PSBibGtubyk7CisJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKworCQkvKiBFbmQtb2Ytc3Ry ZWFtLiAqLworCQlidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOwor CQlBc3NlcnQoYnVmID09IEludmFsaWRCdWZmZXIpOworCQlidWYgPSByZWFkX3N0cmVhbV9uZXh0 X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCQlBc3NlcnQoYnVmID09IEludmFsaWRCdWZmZXIpOwor CisJCS8qIFJlc3VtZS4gKi8KKwkJcmVhZF9zdHJlYW1fcmVzdW1lKHN0cmVhbSk7CisJfQorCisJ cmVhZF9zdHJlYW1fZW5kKHN0cmVhbSk7CisJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOwor CisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlCbG9ja051bWJl ciBibGtubzsKKwlpbnQJCQljb3VudDsKKwlpbnQJCQl5aWVsZHM7CisJaW50CQkJYmxvY2tzOwor fQkJCXRlc3RfcmVhZF9zdHJlYW1feWllbGRfc3RhdGU7CisKK3N0YXRpYyBCbG9ja051bWJlcgor dGVzdF9yZWFkX3N0cmVhbV95aWVsZF9jYihSZWFkU3RyZWFtICpzdHJlYW0sCisJCQkJCQkgIHZv aWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCSAgdm9pZCAqcGVyX2J1ZmZlcl9kYXRh KQoreworCXRlc3RfcmVhZF9zdHJlYW1feWllbGRfc3RhdGUgKnN0YXRlID0gY2FsbGJhY2tfcHJp dmF0ZV9kYXRhOworCisJLyogWWllbGQgZXZlcnkgdGhpcmQgY2FsbC4gKi8KKwlpZiAoKytzdGF0 ZS0+Y291bnQgJSAzID09IDIpCisJeworCQlzdGF0ZS0+eWllbGRzKys7CisJCXJldHVybiByZWFk X3N0cmVhbV95aWVsZChzdHJlYW0pOworCX0KKworCXN0YXRlLT5ibG9ja3MrKzsKKwlyZXR1cm4g c3RhdGUtPmJsa25vOworfQorCisvKgorICogVGVzdCByZWFkX3N0cmVhbV95aWVsZCgpLCBhbGxv d2luZyBjb250cm9sIHRvIGJlIHlpZWxkZWQgdGVtcG9yYXJpbHkgZnJvbQorICogdGhlIGxvb2th aGVhZCBsb29wIGFuZCByZXR1cm5lZCB0byB0aGUgY2FsbGVyIG9mIHJlYWRfc3RyZWFtX25leHRf YnVmZmVyKCkuCisgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEodGVzdF9yZWFkX3N0cmVhbV95aWVs ZCk7CitEYXR1bQordGVzdF9yZWFkX3N0cmVhbV95aWVsZChQR19GVU5DVElPTl9BUkdTKQorewor CU9pZAkJCXJlbGlkID0gUEdfR0VUQVJHX09JRCgwKTsKKwlCbG9ja051bWJlciBibGtubyA9IFBH X0dFVEFSR19VSU5UMzIoMSk7CisJUmVsYXRpb24JcmVsOworCUJ1ZmZlcgkJYnVmOworCVJlYWRT dHJlYW0gKnN0cmVhbTsKKwl0ZXN0X3JlYWRfc3RyZWFtX3lpZWxkX3N0YXRlIHN0YXRlID0gey5i bGtubyA9IGJsa25vfTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsaWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJc3RyZWFtID0gcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJFQU1f REVGQVVMVCwKKwkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCXJlbCwKKwkJCQkJCQkJCQlNQUlO X0ZPUktOVU0sCisJCQkJCQkJCQkJdGVzdF9yZWFkX3N0cmVhbV95aWVsZF9jYiwKKwkJCQkJCQkJ CQkmc3RhdGUsCisJCQkJCQkJCQkJMCk7CisKKwlidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl cihzdHJlYW0sIE5VTEwpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWYpID09IGJs a25vKTsKKwlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJQXNzZXJ0KHN0YXRlLmJsb2NrcyA9PSAxKTsK KwlBc3NlcnQoc3RhdGUueWllbGRzID09IDEpOworCisJYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9i dWZmZXIoc3RyZWFtLCBOVUxMKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKSA9 PSBibGtubyk7CisJUmVsZWFzZUJ1ZmZlcihidWYpOworCUFzc2VydChzdGF0ZS5ibG9ja3MgPT0g Myk7CisJQXNzZXJ0KHN0YXRlLnlpZWxkcyA9PSAxKTsKKworCWJ1ZiA9IHJlYWRfc3RyZWFtX25l eHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1 ZikgPT0gYmxrbm8pOworCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwlBc3NlcnQoc3RhdGUuYmxvY2tz ID09IDMpOworCUFzc2VydChzdGF0ZS55aWVsZHMgPT0gMik7CisKKwlidWYgPSByZWFkX3N0cmVh bV9uZXh0X2J1ZmZlcihzdHJlYW0sIE5VTEwpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJl cihidWYpID09IGJsa25vKTsKKwlSZWxlYXNlQnVmZmVyKGJ1Zik7CisJQXNzZXJ0KHN0YXRlLmJs b2NrcyA9PSA1KTsKKwlBc3NlcnQoc3RhdGUueWllbGRzID09IDIpOworCisJYnVmID0gcmVhZF9z dHJlYW1fbmV4dF9idWZmZXIoc3RyZWFtLCBOVUxMKTsKKwlBc3NlcnQoQnVmZmVyR2V0QmxvY2tO dW1iZXIoYnVmKSA9PSBibGtubyk7CisJUmVsZWFzZUJ1ZmZlcihidWYpOworCUFzc2VydChzdGF0 ZS5ibG9ja3MgPT0gNSk7CisJQXNzZXJ0KHN0YXRlLnlpZWxkcyA9PSAzKTsKKworCWJ1ZiA9IHJl YWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCk7CisJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZikgPT0gYmxrbm8pOworCVJlbGVhc2VCdWZmZXIoYnVmKTsKKwlBc3NlcnQo c3RhdGUuYmxvY2tzID09IDcpOworCUFzc2VydChzdGF0ZS55aWVsZHMgPT0gMyk7CisKKwlyZWFk X3N0cmVhbV9lbmQoc3RyZWFtKTsKKwlyZWxhdGlvbl9jbG9zZShyZWwsIE5vTG9jayk7CisKKwlQ R19SRVRVUk5fVk9JRCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCAzMWU2NDJm ZjUuLmI5MGUzNWM2YiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQyMDIsNiArNDIw Miw3IEBAIHRlU2VjdGlvbgogdGVtcF90YWJsZXNwYWNlc19leHRyYQogdGVzdDEyOAogdGVzdF9y ZV9mbGFncwordGVzdF9yZWFkX3N0cmVhbV9yZXN1bWVfc3RhdGUKIHRlc3RfcmVnZXhfY3R4CiB0 ZXN0X3NobV9tcV9oZWFkZXIKIHRlc3Rfc3BlYwotLSAKMi41MS4wCgo= --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Disposition: attachment; filename="v10-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdzl6 RnJvbSA3MmQ4YmJkMjRjMzc5YTQ4N2RjZGNhNjMzZTYyYWU1YjUzOWI4MzZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjIgSmFuIDIwMjYgMTM6MDc6MTMgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMCAwNi8xMV0g VXNlIEV4ZWNTZXRUdXBsZUJvdW5kIGhpbnQgZHVyaW5nIGluZGV4IHNjYW5zLgoKVGhpcyBnaXZl cyBpbmRleCBzY2FucyBhIHdheSB0byBhdm9pZCB1c2luZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBj ZXJ0YWluCmtpbmRzIG9mIHF1ZXJpZXMgdGhhdCBhcmUgdmVyeSB1bmxpa2VseSB0byBiZW5lZml0 IGZyb20gcHJlZmV0Y2hpbmc6CnF1ZXJpZXMgd2hvc2UgcGxhbiBpbnZvbHZlcyBhIExJTUlUIG5v ZGUgdGhhdCBpcyBjb25zdW1lcyB0dXBsZXMgZnJvbSBhbgppbmRleCBzY2FuIChvciBpbmRleC1v bmx5IHNjYW4pIG5vZGUuCgpUZXN0aW5nIGhhcyBzaG93biB0aGlzIHRvIGJlIHBhcnRpY3VsYXJs eSBpbXBvcnRhbnQgd2l0aCBuZXN0ZWQgbG9vcApqb2lucyB3aXRoIGEgTElNSVQgb24gYW4gaW5u ZXIgaW5kZXggc2Nhbi4gIFRoaXMgaXMgdHlwaWNhbCBvZiBuZXN0ZWQKbG9vcCBhbnRpLWpvaW5z LCBhbmQgbmVzdGVkIGxvb3Agc2VtaS1qb2lucy4KClhYWCBUaGlzIGlzIHN0aWxsIHZlcnkgbXVj aCBhIFdJUC4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1C eTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICB8ICAyICsrCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9k ZXMuaCAgICAgICAgICAgIHwgIDQgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jIHwgIDUgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAg ICAgIHwgIDIgKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICAgfCA0 NCArKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRl eG9ubHlzY2FuLmMgfCAxMCArKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNj YW4uYyAgICAgfCAxMyArKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDgwIGluc2VydGlvbnMoKykK CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3JlbHNjYW4uaAppbmRleCAyN2Q2NGEzNjMuLmUzM2I2NjYzMyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oCkBAIC0zNjgsNiArMzY4LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0Rh dGEKIAogCS8qIHBhcmFsbGVsIGluZGV4IHNjYW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1v cnkgKi8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsK KworCWludDY0CQl0dXBsZXNfbmVlZGVkOwogfSBJbmRleFNjYW5EZXNjRGF0YTsKIAogLyogR2Vu ZXJpYyBzdHJ1Y3R1cmUgZm9yIHBhcmFsbGVsIHNjYW5zICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmlu ZGV4IDc5M2IxYTNjNi4uNDY5M2IwZmQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMTY5Niw2 ICsxNjk2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKICAqCQlTY2FuRGVzYwkJICAgaW5kZXggc2NhbiBk ZXNjcmlwdG9yCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50 YXRpb24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9u IChubyBsZWFkZXIgZW50cnkpCisgKgkJVHVwbGVzTmVlZGVkCSAgIHR1cGxlIGJvdW5kLCBzZWUg RXhlY1NldFR1cGxlQm91bmQKICAqCiAgKgkJUmVvcmRlclF1ZXVlCSAgIHR1cGxlcyB0aGF0IG5l ZWQgcmVvcmRlcmluZyBkdWUgdG8gcmUtY2hlY2sKICAqCQlSZWFjaGVkRW5kCQkgICBoYXZlIHdl IGZldGNoZWQgYWxsIHR1cGxlcyBmcm9tIGluZGV4IGFscmVhZHk/CkBAIC0xNzI0LDYgKzE3MjUs NyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogCXN0cnVjdCBJbmRleFNjYW5EZXNj RGF0YSAqaXNzX1NjYW5EZXNjOwogCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiBpc3NfSW5zdHJ1 bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlzc19TaGFyZWRJbmZvOwor CWludDY0CQlpc3NfVHVwbGVzTmVlZGVkOwogCiAJLyogVGhlc2UgYXJlIG5lZWRlZCBmb3IgcmUt Y2hlY2tpbmcgT1JERVIgQlkgZXhwciBvcmRlcmluZyAqLwogCXBhaXJpbmdoZWFwICppc3NfUmVv cmRlclF1ZXVlOwpAQCAtMTc1Miw2ICsxNzU0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2Fu U3RhdGUKICAqCQlTY2FuRGVzYwkJICAgaW5kZXggc2NhbiBkZXNjcmlwdG9yCiAgKgkJSW5zdHJ1 bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50YXRpb24KICAqCQlTaGFyZWRJbmZv CQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9uIChubyBsZWFkZXIgZW50cnkpCisg KgkJVHVwbGVzTmVlZGVkCSAgIHR1cGxlIGJvdW5kLCBzZWUgRXhlY1NldFR1cGxlQm91bmQKICAq CQlUYWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRpbmcgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUg dGFibGUKICAqCQlQc2NhbkxlbgkJICAgc2l6ZSBvZiBwYXJhbGxlbCBpbmRleC1vbmx5IHNjYW4g ZGVzY3JpcHRvcgogICoJCU5hbWVDU3RyaW5nQXR0TnVtcyBhdHRudW1zIG9mIG5hbWUgdHlwZWQg Y29sdW1ucyB0byBwYWQgdG8gTkFNRURBVEFMRU4KQEAgLTE3NzQsNiArMTc3Nyw3IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4T25seVNjYW5TdGF0ZQogCXN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAq aW9zc19TY2FuRGVzYzsKIAlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gaW9zc19JbnN0cnVtZW50 OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOworCWlu dDY0CQlpb3NzX1R1cGxlc05lZWRlZDsKIAlUdXBsZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7 CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0 TnVtczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDhjZTc0 OTg3My4uMWY3MzM4YTM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKQEAgLTUyMiw5ICs1MjIsMTQgQEAgaGVhcGFtX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJICogaGF2ZW4ndCBkb25lIGFueSBo ZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9uJ3Qgd2FudCB0byB3YXN0ZSBhbnkKIAkJICogY3ljbGVz IG9uIGFsbG9jYXRpbmcgYSByZWFkIHN0cmVhbSB1bnRpbCB3ZSBoYXZlIGEgZGVtb25zdHJhdGVk CiAJCSAqIG5lZWQgZm9yIHBlcmZvcm0gaGVhcCBmZXRjaGVzLgorCQkgKgorCQkgKiBBbHNvIGF2 b2lkaW5nIHByZWZldGNoaW5nIHdoZW4gdGhlIGNvcmUgZXhlY3V0b3IgcGFzc2VzIHRoZSBzY2Fu IGEKKwkJICogdHVwbGVzX25lZWRlZCBoaW50IHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4g aXMgbGlrZWx5IHRvIGVuZAorCQkgKiBiZWZvcmUgbG9uZy4KIAkJICovCiAJCWlmICghaHNjYW4t PnhzX3JlYWRfc3RyZWFtICYmIHByaW9yQmF0Y2ggJiYgc2Nhbi0+TVZDQ1NjYW4gJiYKIAkJCWhz Y2FuLT54c19ibGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyICYmCS8qIGZvciBpbmRleC1vbmx5IHNj YW5zICovCisJCQkoc2Nhbi0+dHVwbGVzX25lZWRlZCA9PSAtMSB8fCBzY2FuLT50dXBsZXNfbmVl ZGVkID4gMTApICYmCiAJCQlpb19tZXRob2QgIT0gSU9NRVRIT0RfU1lOQyAmJiBlbmFibGVfaW5k ZXhzY2FuX3ByZWZldGNoKQogCQl7CiAJCQlBc3NlcnQoIWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQ b3MudmFsaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwppbmRleCAxOGRjY2QzYzkuLmM1NmE5 ZjA1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsOCBAQCBSZWxh dGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBu b3JkZXJieXMpCiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwZGVzYyA9 IE5VTEw7CiAKKwlzY2FuLT50dXBsZXNfbmVlZGVkID0gLTE7CS8qIG5vIGxpbWl0ICovCisKIAly ZXR1cm4gc2NhbjsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1By b2Nub2RlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUHJvY25vZGUuYwppbmRleCA3ZTQw Yjg1MjUuLjhhZThmYmViZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1By b2Nub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKQEAgLTcy LDYgKzcyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nl c3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBcHBlbmQuaCIKQEAg LTk3Nyw2ICs5NzgsNDkgQEAgRXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwg UGxhblN0YXRlICpjaGlsZF9ub2RlKQogCiAJCUV4ZWNTZXRUdXBsZUJvdW5kKHR1cGxlc19uZWVk ZWQsIG91dGVyUGxhblN0YXRlKGNoaWxkX25vZGUpKTsKIAl9CisJZWxzZSBpZiAoSXNBKGNoaWxk X25vZGUsIEluZGV4U2NhblN0YXRlKSkKKwl7CisJCS8qCisJCSAqIElmIGl0IGlzIGFuIEluZGV4 U2Nhbiwgc2F2ZSB0aGUgdHVwbGVzX25lZWRlZCBpbiB0aGUgc3RhdGUgc28gaXQKKwkJICogY2Fu IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIEluZGV4U2NhbkRlc2Mgd2hlbiB0aGUgc2NhbiBpcyBzdGFy dGVkLgorCQkgKgorCQkgKiBOb3RlOiBBcyB3aXRoIFNvcnQsIHRoZSBpbmRleCBzY2FuIG5vZGUg aXMgcmVzcG9uc2libGUgZm9yIHJlYWN0aW5nCisJCSAqIHByb3Blcmx5IHRvIGNoYW5nZXMgdG8g dGhpcyBwYXJhbWV0ZXIuCisJCSAqLworCQlJbmRleFNjYW5TdGF0ZSAqaXNzdGF0ZSA9IChJbmRl eFNjYW5TdGF0ZSAqKSBjaGlsZF9ub2RlOworCisJCWlzc3RhdGUtPmlzc19UdXBsZXNOZWVkZWQg PSB0dXBsZXNfbmVlZGVkOworCisJCS8qIElmIHNjYW4gYWxyZWFkeSBzdGFydGVkLCB1cGRhdGUg dGhlIEluZGV4U2NhbkRlc2MgdG9vICovCisJCWlmIChpc3N0YXRlLT5pc3NfU2NhbkRlc2MpCisJ CQlpc3N0YXRlLT5pc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNfbmVlZGVkOwor CX0KKwllbHNlIGlmIChJc0EoY2hpbGRfbm9kZSwgSW5kZXhPbmx5U2NhblN0YXRlKSkKKwl7CisJ CS8qIFNhbWUgY29tbWVudHMgYXMgZm9yIEluZGV4U2NhbiAqLworCQlJbmRleE9ubHlTY2FuU3Rh dGUgKmlvc3N0YXRlID0gKEluZGV4T25seVNjYW5TdGF0ZSAqKSBjaGlsZF9ub2RlOworCisJCWlv c3N0YXRlLT5pb3NzX1R1cGxlc05lZWRlZCA9IHR1cGxlc19uZWVkZWQ7CisKKwkJLyogSWYgc2Nh biBhbHJlYWR5IHN0YXJ0ZWQsIHVwZGF0ZSB0aGUgSW5kZXhTY2FuRGVzYyB0b28gKi8KKwkJaWYg KGlvc3N0YXRlLT5pb3NzX1NjYW5EZXNjKQorCQkJaW9zc3RhdGUtPmlvc3NfU2NhbkRlc2MtPnR1 cGxlc19uZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hpbGRfbm9k ZSwgTmVzdExvb3BTdGF0ZSkpCisJeworCQkvKgorCQkgKiBGb3IgTmVzdExvb3Agam9pbnMgd2hl cmUgZWFjaCBvdXRlciB0dXBsZSBwcm9kdWNlcyBhdCBtb3N0IG9uZQorCQkgKiBvdXRwdXQgdHVw bGUsIHdlIGNhbiBwcm9wYWdhdGUgdGhlIGJvdW5kIHRvIHRoZSBvdXRlciBjaGlsZAorCQkgKi8K KwkJTmVzdExvb3BTdGF0ZSAqbmxzdGF0ZSA9IChOZXN0TG9vcFN0YXRlICopIGNoaWxkX25vZGU7 CisJCUpvaW5UeXBlCWpvaW50eXBlID0gbmxzdGF0ZS0+anMuam9pbnR5cGU7CisKKwkJaWYgKGpv aW50eXBlID09IEpPSU5fU0VNSSB8fCBqb2ludHlwZSA9PSBKT0lOX0FOVEkgfHwKKwkJCW5sc3Rh dGUtPmpzLnNpbmdsZV9tYXRjaCkKKwkJeworCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25l ZWRlZCwgb3V0ZXJQbGFuU3RhdGUoY2hpbGRfbm9kZSkpOworCQl9CisJfQogCiAJLyoKIAkgKiBJ biBwcmluY2lwbGUgd2UgY291bGQgZGVzY2VuZCB0aHJvdWdoIGFueSBwbGFuIG5vZGUgdHlwZSB0 aGF0IGlzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBmZjNl OGYzMDIuLjhhMDY4NjM0YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jCkBAIC05Niw2ICs5Niw5IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlKQogCQlub2RlLT5pb3NzX1NjYW5EZXNjID0gc2NhbmRlc2M7CiAJCUFzc2VydChub2RlLT5p b3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCisJCS8qIFBhc3MgZG93biBhbnkgdHVwbGUg Ym91bmQgKi8KKwkJc2NhbmRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05l ZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0 aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRo ZSBpbmRleCBBTS4KQEAgLTUyNCw2ICs1MjcsNyBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5k ZXhPbmx5U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0 ZS0+aW9zc19SdW50aW1lS2V5c1JlYWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50 aW1lS2V5cyA9IE5VTEw7CiAJaW5kZXhzdGF0ZS0+aW9zc19OdW1SdW50aW1lS2V5cyA9IDA7CisJ aW5kZXhzdGF0ZS0+aW9zc19UdXBsZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhl IGluZGV4IHNjYW4ga2V5cyBmcm9tIHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC03MDAsNiAr NzA0LDkgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0 ZSAqbm9kZSwKIAkJCQkJCQkJIHBpc2Nhbik7CiAJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2Mt PnhzX3dhbnRfaXR1cCk7CiAKKwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9k ZS0+aW9zc19TY2FuRGVzYy0+dHVwbGVzX25lZWRlZCA9IG5vZGUtPmlvc3NfVHVwbGVzTmVlZGVk OworCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFy ZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4 IEFNLgpAQCAtNzY1LDYgKzc3Miw5IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZVdvcmtl cihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJCQkJCQkJCSBwaXNjYW4pOwogCUFzc2VydChu b2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCisJLyogUGFzcyBkb3duIGFueSB0 dXBsZSBib3VuZCAqLworCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2Rl LT5pb3NzX1R1cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBj YWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJICogdGhlIHNj YW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpp bmRleCBhMjVlNDBlMWYuLjc2NDFhZGMxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNj YW4uYwpAQCAtMTE1LDYgKzExNSw5IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkK IAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24gYW55 IHR1cGxlIGJvdW5kICovCisJCXNjYW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1 cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0 ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlz IHRvIHRoZSBpbmRleCBBTS4KQEAgLTIxMSw2ICsyMTQsOSBAQCBJbmRleE5leHRXaXRoUmVvcmRl cihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVz YzsKIAorCQkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJCXNjYW5kZXNjLT50dXBs ZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBy dW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5k CiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTk4Miw2ICs5ODgs NyBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCWluZGV4c3RhdGUtPmlzc19SdW50aW1lS2V5c1JlYWR5ID0gZmFsc2U7CiAJ aW5kZXhzdGF0ZS0+aXNzX1J1bnRpbWVLZXlzID0gTlVMTDsKIAlpbmRleHN0YXRlLT5pc3NfTnVt UnVudGltZUtleXMgPSAwOworCWluZGV4c3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSAtMTsKIAog CS8qCiAJICogYnVpbGQgdGhlIGluZGV4IHNjYW4ga2V5cyBmcm9tIHRoZSBpbmRleCBxdWFsaWZp Y2F0aW9uCkBAIC0xNzI2LDYgKzE3MzMsOSBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJ bmRleFNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywK IAkJCQkJCQkJIHBpc2Nhbik7CiAKKwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJ bm9kZS0+aXNzX1NjYW5EZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRl ZDsKKwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBh cmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRl eCBBTS4KQEAgLTE3OTAsNiArMTgwMCw5IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2Vy KEluZGV4U2NhblN0YXRlICpub2RlLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlz LAogCQkJCQkJCQkgcGlzY2FuKTsKIAorCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8K Kwlub2RlLT5pc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pc3NfVHVwbGVzTmVl ZGVkOworCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5 IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGlu ZGV4IEFNLgotLSAKMi41MS4wCgo= --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0003-Add-batching-interfaces-used-by-heapam-and-nbtre.patch" Content-Disposition: attachment; filename="v10-0003-Add-batching-interfaces-used-by-heapam-and-nbtre.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdzt9 RnJvbSBmMDhhYjg3ZjBhNmQwMGJhMzgwZDIzMjhhNmM5ZWE3YTVjYTMyZGZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEwIDAzLzExXSBB ZGQgYmF0Y2hpbmcgaW50ZXJmYWNlcyB1c2VkIGJ5IGhlYXBhbSBhbmQgbmJ0cmVlLgoKQWRkIGEg bmV3IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2Vz cyBtZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbi9vcmRlcmVkIGluZGV4IHNjYW5zIHRoYXQgcmV0 dXJuIGluZGV4IGVudHJpZXMgaW4KcGVyLWxlYWYtcGFnZSBiYXRjaGVzLCByYXRoZXIgdGhhbiBv bmUgYXQgYSB0aW1lLiAgVGhpcyBlbmFibGVzIGEKdmFyaWV0eSBvZiBvcHRpbWl6YXRpb25zIG9u IHRoZSB0YWJsZSBBTSBzaWRlLCBtb3N0IG5vdGFibHkgSS9PCnByZWZldGNoaW5nIG9mIGhlYXAg dHVwbGVzIGR1cmluZyBvcmRlcmVkIGluZGV4IHNjYW5zLgoKSW5kZXggYWNjZXNzIG1ldGhvZHMg dGhhdCBzdXBwb3J0IHBsYWluIGluZGV4IHNjYW5zIG11c3Qgbm93IGltcGxlbWVudAplaXRoZXIg dGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIE9SIHRoZSBhbWdldHR1cGxlIGludGVyZmFjZS4gIFRo ZQphbWdldHR1cGxlIGludGVyZmFjZSB3aWxsIHN0aWxsIGJlIHVzZWQgYnkgaW5kZXggQU1zIHRo YXQgcmVxdWlyZSBkaXJlY3QKY29udHJvbCBvdmVyIHRoZSBwcm9ncmVzcyBvZiBpbmRleCBzY2Fu cyAoZS5nLiwgR2lTVCB3aXRoIEtOTiBvcmRlcmVkCnNjYW5zKS4KClRoaXMgY29tbWl0IGFsc28g YWRkcyBhIG5ldyB0YWJsZSBBTSBpbnRlcmZhY2UgY2FsbGJhY2ssIGNhbGxlZCBieSB0aGUKY29y ZSBleGVjdXRvciB0aHJvdWdoIHRoZSBuZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHNoaW0g ZnVuY3Rpb24uClRoaXMgYWxsb3dzIHRoZSB0YWJsZSBBTSB0byBkaXJlY3RseSBtYW5hZ2UgdGhl IHByb2dyZXNzIG9mIGluZGV4IHNjYW5zCnJhdGhlciB0aGFuIGhhdmluZyBpbmRpdmlkdWFsIFRJ RHMgcGFzc2VkIGluIGJ5IHRoZSBjYWxsZXIuIFRoZQphbWdldGJhdGNoIGludGVyZmFjZSBpcyB0 aWdodGx5IGNvdXBsZWQgd2l0aCB0aGUgbmV3IGFwcHJvYWNoIHRvIG9yZGVyZWQKaW5kZXggc2Nh bnMgYWRkZWQgdG8gdGhlIHRhYmxlIEFNLiAgVGhlIHRhYmxlIEFNIGNhbiBhcHBseSBrbm93bGVk Z2Ugb2YKd2hpY2ggVElEcyB3aWxsIGJlIHJldHVybmVkIHRvIHNjYW4gaW4gdGhlIG5lYXIgZnV0 dXJlIHRvIHBlcmZvcm0gSS9PCnByZWZldGNoaW5nLiAgUHJlZmV0Y2hpbmcgd2lsbCBiZSBhZGRl ZCBieSBhbiB1cGNvbWluZyBjb21taXQuCgpCYXRjaGVzIHJldHVybmVkIGZyb20gYW1nZXRiYXRj aCBhcmUgZ3VhcmFudGVlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggYW4KaW5kZXggcGFnZSBjb250 YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyB0dXBsZS4gIFRoZSBhbWdldGJhdGNoCmludGVy ZmFjZSByZXR1cm5zIGJhdGNoZXMgdGhhdCBob2xkIGEgYnVmZmVyIHBpbiBvbiBhbiBpbmRleCBw YWdlIHRoYXQKY2FuIGJlIHVzZWQgYnkgdGhlIHRhYmxlIEFNIGFzIGFuIGludGVybG9jayBhZ2Fp bnN0IGNvbmN1cnJlbnQgVElECnJlY3ljbGluZyBieSBWQUNVVU0uICBOb3cgaGVhcGFtIG9ubHkg bmVlZHMgdG8gaG9sZCBvbiB0byBzdWNoIGEgcGluIGZvcgphbiBpbnN0YW50IChleGNlcHQgZHVy aW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QsIHdoZXJlIHdlCmNvbnRpbnVl IHRvIG5lZWQgdG8gaG9sZCB0aGUgcGluIHVudGlsIGFsbCBvZiB0aGUgYmF0Y2gncyBUSURzIGhh dmUgYmVlbgpmZXRjaGVkIGZyb20gdGhlIGhlYXApLgoKVGhpcyBleHRlbmRzIHRoZSBkcm9wUGlu IG1lY2hhbmlzbSBhZGRlZCB0byBuYnRyZWUgYnkgY29tbWl0IDJlZDViODdmLAphbmQgZ2VuZXJh bGl6ZXMgaXQgdG8gd29yayB3aXRoIGFsbCBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IHRoZSBuZXcK YW1nZXRiYXRjaCBpbnRlcmZhY2UuICBXZSBjYW4gYWx3YXlzIHNhZmVseSBkcm9wIGluZGV4IHBh Z2UgcGlucyBlYWdlcmx5CndpdGggdW5sb2dnZWQgcmVsYXRpb25zIGFuZCBkdXJpbmcgaW5kZXgt b25seSBzY2FucyBub3csIHByb3ZpZGVkIHRoZQpzY2FuIHVzZXMgYW4gTVZDQyBzbmFwc2hvdCAo dGhlIG5idHJlZSBkcm9wUGluIGZlYXR1cmUgY291bGQgZG8KbmVpdGhlcikuCgpXZSdyZSBhYmxl IHRvIGRvIHRoaXMgd2l0aCB1bmxvZ2dlZCByZWxhdGlvbnMgYnkgcmVxdWlyaW5nIHRoYXQKYW1n ZXRiYXRjaCBpbmRleCBBTXMgdXNlIGZha2UgTFNOcyAob3IsIGFsdGVybmF0aXZlbHksIG5vdCBz dXBwb3J0CkxQX0RFQUQgbWFya2luZyBkZWFkIGluZGV4IHR1cGxlcyBhdCBhbGwpLgoKV2UncmUg YWJsZSB0byBkbyB0aGlzIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIGR1ZSB0byBoZWFwYW0gbm93 IHNhdmluZwppbmZvcm1hdGlvbiBmcm9tIHRoZSB2aXNpYmlsaXR5IG1hcCB1cCBmcm9udCwgaW4g YSBwZXItaXRlbSBiYXRjaCBjYWNoZS4KSW5kZXgtb25seSBzY2FucyBzdGlsbCBuZWVkIHRvIGhv bGQgb250byB0aGUgaW5kZXggcGFnZSBwaW4gZm9yIGFzIGxvbmcKYXMgaXQgdGFrZXMgdG8gcG9w dWxhdGUgdGhlIHZpc2liaWxpdHkgY2FjaGUuCgpUaGUgdXBjb21pbmcgY29tbWl0IHRoYXQgYWRk cyBpbmRleCBwcmVmZXRjaGluZyB3aWxsIHVzZSBhIHJlYWQgc3RyZWFtIHRvCnJlYWQgaGVhcCBw YWdlcyBkdXJpbmcgaW5kZXggc2NhbnMuICBSZWFkIHN0cmVhbSBpcyBjYXJlZnVsIHRvIGxpbWl0 IGhvdwptYW55IHRoaW5ncyBpdCBwaW5zLCBsZXN0IHdlIGdldCBlcnJvcnMgYWJvdXQgaGF2aW5n IHRvbyBtYW55IGJ1ZmZlcnMKcGlubmVkLiAgU2ltcGx5IG5ldmVyIGhvbGRpbmcgb24gdG8gaW5k ZXggcGFnZSBidWZmZXIgcGlucyBncmVhdGx5CnNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVu dCBmb3IgaW5kZXggcHJlZmV0Y2hpbmc7IHRoZXJlJ3Mgbm8gcmlzayBvZgp1bmludGVuZGVkIGlu dGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWFkIHN0cmVhbSBhbmQgaW5kZXggQU0uICAoVGhlIG9u bHkKZG93bnNpZGUgaXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZyBkdXJpbmcg c2NhbnMgdGhhdCB1c2UgYQpub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNj ZXB0YWJsZS4pCgpJbiBwcmFjdGljZSwgaGVhcGFtIGRvZXNuJ3QgZHJvcCBlYWNoIGJhdGNoJ3Mg aW5kZXggcGFnZSBidWZmZXIgcGluIGF0CnRoZSBlYXJsaWVzdCBvcHBvcnR1bml0eSBkdXJpbmcg aW5kZXgtb25seSBzY2Fucy4gIFRoaXMgd2FzIGRlZW1lZApuZWNlc3NhcnkgdG8gYXZvaWQgcmVn cmVzc2luZyBpbmRleC1vbmx5IHNjYW5zIHdpdGggYSBMSU1JVCwgaW4KcGFydGljdWxhciB3aXRo IG5lc3Rsb29wIGFudGktam9pbnMgYW5kIG5lc3Rsb29wIHNlbWktam9pbnMuICBUaGUgbmV3CmFt Z2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9yaXR5IHRvIGRlY2lk ZSB3aGVuIGFuZAp3aGVyZSB0byBkcm9wIGluZGV4IHBhZ2UgcGlucywgc28gdGhpcyBjYW4gYmUg Y29uc2lkZXJlZCBhIGhlYXBhbQppbXBsZW1lbnRhdGlvbiBkZXRhaWwgKGluZGV4IEFNcyBkb24n dCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLiAgVGhpcwpzY2hlbWUgc3RpbGwgYWxsb3dzIGluZGV4 IHByZWZldGNoaW5nIHRvIG9ubHkgaG9sZCBvbnRvIG9uZSBiYXRjaCBpbmRleApwYWdlIHBpbiBh dCBhIHRpbWUsIGV2ZW4gd2hlbiB0aGUgc2NhbiBob2xkcyBvcGVuIG1hbnkgYmF0Y2hlcy4KCkF1 dGhvcjogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hl Z2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJh emVsLmRlPgpSZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29t PgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4 LTUwMDBiODk0ZWJhYkBlbnRlcnByaXNlZGIuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdy LmVzL20vZWZhYzMyMzgtNmYzNC00MWVhLWEzOTMtMjZjYzA0NDFiNTA2JTQwdm9uZHJhLm1lCkRp c2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xems5JTNEeCUzRGEyVGJjcVljWCUy QlhYbURIUXI1JTNEMXY5bTRaX3Y4YS1Ld0YxWm96MEElNDBtYWlsLmdtYWlsLmNvbQotLS0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oICAgICAgICAgICAgICAgICAgICB8ICAyMiArLQogc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAgICAgICAgIHwgIDI5ICstCiBzcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE3NCArLS0tLQogc3Jj L2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgMjg3ICsrKysrKyst CiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAgNDEgKysK IHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oICAgICAgICB8ICAgNiArCiBz cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDIgLQogc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMv YmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFj a2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICAgICAgICAgICB8ICAgNSArLQogc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgNTc2ICsrKysrKysrKysrKysr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYyAgICAgICAgICAgICAgfCAgIDQgKwog c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwgIDEzICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAxNTcgKystLQog c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyAgICAgICAgIHwgNjcxICsrKysr KysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkICAgICAg ICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAg ICB8ICA2NiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMgICAgICAgICAg IHwgICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyAgICAgICB8 IDE5OCArKystLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgICAgICAgICAg ICB8IDMwMSArKystLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyAg ICAgICAgIHwgNTIxICsrKysrLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHV0aWxzLmMgICAgICAgICAgfCAxNDAgKy0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9z cGd1dGlscy5jICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWlu LmMgICAgICAgICAgICAgICAgfCAgMjMgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21k cy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5j ICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhp bmcuYyAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNh dGlvbi5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcElu ZGV4c2Nhbi5jICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlz Y2FuLmMgICAgICB8IDEwOCArLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4u YyAgICAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5j ICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5j ICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAg ICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlv bi5jICAgIHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jICAgICAgICAg ICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAg ICAgICB8ICA2MSArLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAg ICAgIHwgICAyICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDUgKy0KIC4uLi9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMg ICB8ICAgNSArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAg IHwgIDEwICstCiA0NiBmaWxlcyBjaGFuZ2VkLCAyMjM4IGluc2VydGlvbnMoKyksIDEyOTcgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2lu ZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggZWNmYmQwMTdkLi44NWQyNzQ2ZWMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE1IEBAIHR5cGVkZWYgdm9pZCAoKmFtcmVzY2FuX2Z1 bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1nZXR0dXBsZV9m dW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0eXBlZGVmIElu ZGV4U2NhbkJhdGNoICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJICAg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiByZWxlYXNlIGJhdGNoIG9mIHZhbGlkIHR1 cGxlcyAqLwordHlwZWRlZiB2b2lkICgqYW1mcmVlYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogLyogZmV0Y2gg YWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9u KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAgVElEQml0bWFwICp0Ym0pOwpAQCAt MjA1LDExICsyMTQsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2NhbiAqLwogdHlwZWRlZiB2b2lkICgq YW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAotLyogbWFyayBjdXJy ZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtbWFya3Bvc19mdW5jdGlvbikg KEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUgbWFya2VkIHNjYW4gcG9zaXRpb24g Ki8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNj YW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJh Y2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lkICgqYW1wb3NyZXNldF9mdW5jdGlv bikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7 CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1cmVzIC0gZm9yIHBhcmFsbGVsIGlu ZGV4IHNjYW5zLgpAQCAtMzA5LDEwICszMTYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhBbVJv dXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKIAlhbXJlc2Nhbl9mdW5j dGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0dHVwbGU7IC8qIGNhbiBi ZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVM TCAqLworCWFtZnJlZWJhdGNoX2Z1bmN0aW9uIGFtZnJlZWJhdGNoOwkvKiBjYW4gYmUgTlVMTCAq LwogCWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBjYW4gYmUgTlVMTCAqLwog CWFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFy a3BvczsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7 IC8qIGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBj YW4gYmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFs bGVsIGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVz dGltYXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCA0 YzA0MjljYzYuLmUyYzhhYzhmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFt LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTk0LDYgKzk0LDcgQEAgdHlw ZWRlZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVtcHRy LCB2b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nh bi5oICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsK K3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0eXBl ZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0cnVj dCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CkBAIC0x NTQsNiArMTU1LDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwKIAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuKFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAor CQkJCQkJCQkJIGJvb2wgeHNfd2FudF9pdHVwLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90 LAogCQkJCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJ CQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwpAQCAtMTgwLDE0ICsxODIsMTIgQEAgZXh0 ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gaGVhcFJlbGF0 aW9uLAogZXh0ZXJuIHZvaWQgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2Fu KTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlv biBoZWFwcmVsLAogCQkJCQkJCQkJCQkgIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJCQkJCQkg IGJvb2wgeHNfd2FudF9pdHVwLAogCQkJCQkJCQkJCQkgIEluZGV4U2Nhbkluc3RydW1lbnRhdGlv biAqaW5zdHJ1bWVudCwKIAkJCQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJ CQkJCQkJCQkJCSAgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuKTsKIGV4dGVybiBJdGVtUG9p bnRlciBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24pOwotZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJbmRl eFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KTsKLWV4dGVybiBib29sIGluZGV4 X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u LAotCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9n ZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVy biBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5m byAqaW5mbywKQEAgLTI1MSw0ICsyNTEsMjcgQEAgZXh0ZXJuIHZvaWQgc3lzdGFibGVfaW5wbGFj ZV91cGRhdGVfYmVnaW4oUmVsYXRpb24gcmVsYXRpb24sCiBleHRlcm4gdm9pZCBzeXN0YWJsZV9p bnBsYWNlX3VwZGF0ZV9maW5pc2godm9pZCAqc3RhdGUsIEhlYXBUdXBsZSB0dXBsZSk7CiBleHRl cm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9jYW5jZWwodm9pZCAqc3RhdGUpOwogCisv KgorICogYW1nZXRiYXRjaCB1dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4YW0uYyAoaW4gaW5kZXhi YXRjaC5jKQorICovCitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5faW5pdChJbmRleFNjYW5E ZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRl c2Mgc2NhbiwgYm9vbCBjb21wbGV0ZSk7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fZW5k KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fbWFya19w b3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9yZXN0 b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworCisvKgorICogYW1nZXRiYXRjaCB1dGlsaXRp ZXMgY2FsbGVkIGJ5IHRhYmxlIEFNcyAoaW4gaW5kZXhiYXRjaC5jKQorICovCitleHRlcm4gdm9p ZCB0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCB0YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShJbmRleFNjYW5EZXNjIHNjYW4p OworZXh0ZXJuIHZvaWQgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2Fu LCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGllcyBj YWxsZWQgYnkgaW5kZXggQU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lkIGlu ZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBiYXRjaCk7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9j KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKwogI2VuZGlm CQkJCQkJCS8qIEdFTkFNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAzYzA5NjFhYjMuLjM0NDQ3 MWY5YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTE3LDcgKzExNywxMyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleEZldGNoSGVhcERhdGEKIAlJbmRleEZldGNoVGFibGVEYXRhIHhzX2Jhc2U7CS8qIEFN IGluZGVwZW5kZW50IHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IgKi8KIAogCUJ1ZmZlcgkJeHNfY2J1 ZjsJCS8qIGN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55ICovCi0JLyogTkI6IGlm IHhzX2NidWYgaXMgbm90IEludmFsaWRCdWZmZXIsIHdlIGhvbGQgYSBwaW4gb24gdGhhdCBidWZm ZXIgKi8KKwlCbG9ja051bWJlciB4c19ibGs7CQkJLyogeHNfY2J1ZidzIGJsb2NrIG51bWJlciwg aWYgYW55ICovCisKKwkvKiBGb3IgaW5kZXgtb25seSBzY2FucyB0aGF0IG11c3QgYWNjZXNzIHRo ZSB2aXNpYmlsaXR5IG1hcCAqLworCUJ1ZmZlcgkJdm1idWY7CQkJLyogdmlzaWJpbGl0eSBtYXAg YnVmZmVyICovCisJaW50CQkJeHNfdm1faXRlbXM7CS8qIGl0ZW1zIHRvIHJlc29sdmUgZHVyaW5n IHZpc2liaWxpdHkgY2hlY2tzICovCisKKwkvKiBOQjogaWYgeHNfY2J1ZiBvciB2bWJ1ZiBhcmUg bm90IEludmFsaWRCdWZmZXIsIHdlIGhvbGQgYSBwaW4gKi8KIH0gSW5kZXhGZXRjaEhlYXBEYXRh OwogCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBUdXBsZVNhdGlzZmllc1ZhY3V1bSAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L25idHJlZS5oCmluZGV4IDc3MjI0ODU5Ni4uZGJlMjFlNzBiIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCkBA IC05MjQsMTEyICs5MjQsNiBAQCB0eXBlZGVmIHN0cnVjdCBCVFZhY3V1bVBvc3RpbmdEYXRhCiAK IHR5cGVkZWYgQlRWYWN1dW1Qb3N0aW5nRGF0YSAqQlRWYWN1dW1Qb3N0aW5nOwogCi0vKgotICog QlRTY2FuT3BhcXVlRGF0YSBpcyB0aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFu IGluZGV4c2Nhbi4KLSAqIFRoaXMgY29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAo c2VlIF9idF9wcmVwcm9jZXNzX2tleXMoKSBmb3IKLSAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nl c3NpbmcpLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBsb2NhdGlvbgotICogb2YgdGhl IHNjYW4sIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFya2VkIGxvY2F0aW9uLCBpZiBhbnku ICAoV2UgdXNlCi0gKiBCVFNjYW5Qb3NEYXRhIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBuZWVkZWQg Zm9yIGVhY2ggb2YgY3VycmVudCBhbmQgbWFya2VkCi0gKiBsb2NhdGlvbnMuKQlJbiBhZGRpdGlv biB3ZSBjYW4gcmVtZW1iZXIgc29tZSBrbm93bi1raWxsZWQgaW5kZXggZW50cmllcwotICogdGhh dCBtdXN0IGJlIG1hcmtlZCBiZWZvcmUgd2UgY2FuIG1vdmUgb2ZmIHRoZSBjdXJyZW50IHBhZ2Uu Ci0gKgotICogSW5kZXggc2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lOiB3ZSBwaW4gYW5kIHJl YWQtbG9jayB0aGUgcGFnZSwgaWRlbnRpZnkKLSAqIGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24g dGhlIHBhZ2UgYW5kIHNhdmUgdGhlbSBpbiBCVFNjYW5Qb3NEYXRhLCB0aGVuCi0gKiByZWxlYXNl IHRoZSByZWFkLWxvY2sgd2hpbGUgcmV0dXJuaW5nIHRoZSBpdGVtcyB0byB0aGUgY2FsbGVyIGZv cgotICogcHJvY2Vzc2luZy4gIFRoaXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2NrIHRy YWZmaWMuICBXZSBtdXN0IGFsd2F5cwotICogZHJvcCB0aGUgbG9jayB0byBtYWtlIGl0IG9rYXkg Zm9yIGNhbGxlciB0byBwcm9jZXNzIHRoZSByZXR1cm5lZCBpdGVtcy4KLSAqIFdoZXRoZXIgb3Ig bm90IHdlIGNhbiBhbHNvIHJlbGVhc2UgdGhlIHBpbiBkdXJpbmcgdGhpcyB3aW5kb3cgd2lsbCB2 YXJ5LgotICogV2UgZHJvcCB0aGUgcGluICh3aGVuIHNvLT5kcm9wUGluKSB0byBhdm9pZCBibG9j a2luZyBwcm9ncmVzcyBieSBWQUNVVU0KLSAqIChzZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIGFi b3V0IG1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZSkuCi0gKiBXZSdsbCBhbHdh eXMgcmVsZWFzZSBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIG9uIHRoZSBjdXJyZW50IHBhZ2Ug YmVmb3JlCi0gKiBtb3Zpbmcgb24gdG8gaXRzIHNpYmxpbmcgcGFnZS4KLSAqCi0gKiBJZiB3ZSBh cmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhUdXBs ZSBmb3IgZWFjaAotICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVhcCBUSUQg YW5kIG9mZnNldC4gIFRoZSBJbmRleFR1cGxlcyBnbwotICogaW50byBhIHNlcGFyYXRlIHdvcmtz cGFjZSBhcnJheTsgZWFjaCBCVFNjYW5Qb3NJdGVtIHN0b3JlcyBpdHMgdHVwbGUncwotICogb2Zm c2V0IHdpdGhpbiB0aGF0IGFycmF5LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNl IiB0dXBsZSBvbmNlLAotICogYWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZv ciBlYWNoIFRJRCBpbiB0aGUgcG9zdGluZyBsaXN0Ci0gKiB0dXBsZS4KLSAqLwotCi10eXBlZGVm IHN0cnVjdCBCVFNjYW5Qb3NJdGVtCS8qIHdoYXQgd2UgcmVtZW1iZXIgYWJvdXQgZWFjaCBtYXRj aCAqLwotewotCUl0ZW1Qb2ludGVyRGF0YSBoZWFwVGlkOwkvKiBUSUQgb2YgcmVmZXJlbmNlZCBo ZWFwIGl0ZW0gKi8KLQlPZmZzZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBs b2NhdGlvbiB3aXRoaW4gcGFnZSAqLwotCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIElu ZGV4VHVwbGUncyBvZmZzZXQgaW4gd29ya3NwYWNlLCBpZiBhbnkgKi8KLX0gQlRTY2FuUG9zSXRl bTsKLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zRGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8q IGN1cnJQYWdlIGJ1ZiAoaW52YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KLQotCS8qIHBhZ2UgZGV0 YWlscyBhcyBvZiB0aGUgc2F2ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwot CUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogcGFnZSByZWZlcmVuY2VkIGJ5IGl0ZW1zIGFycmF5 ICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLwot CUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCi0JWExv Z1JlY1B0cglsc247CQkJLyogY3VyclBhZ2UncyBMU04gKHdoZW4gc28tPmRyb3BQaW4pICovCi0K LQkvKiBzY2FuIGRpcmVjdGlvbiBmb3IgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRf cmVhZHBhZ2UgKi8KLQlTY2FuRGlyZWN0aW9uIGRpcjsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRv aW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgbmV4dFR1cGxlT2Zmc2V0IGlzIHRoZSBmaXJzdCBmcmVl Ci0JICogbG9jYXRpb24gaW4gdGhlIGFzc29jaWF0ZWQgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2Uu Ci0JICovCi0JaW50CQkJbmV4dFR1cGxlT2Zmc2V0OwotCi0JLyoKLQkgKiBtb3JlTGVmdCBhbmQg bW9yZVJpZ2h0IHRyYWNrIHdoZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCi0J ICogaW5kZXggZW50cmllcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFn ZSwgcmVzcGVjdGl2ZWx5LgotCSAqLwotCWJvb2wJCW1vcmVMZWZ0OwotCWJvb2wJCW1vcmVSaWdo dDsKLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4 IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcg YmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRv LWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4K LQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZh bGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hp Y2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0 SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRl bTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJ CS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JQlRTY2FuUG9zSXRlbSBpdGVtc1tN YXhUSURzUGVyQlRyZWVQYWdlXTsJLyogTVVTVCBCRSBMQVNUICovCi19IEJUU2NhblBvc0RhdGE7 Ci0KLXR5cGVkZWYgQlRTY2FuUG9zRGF0YSAqQlRTY2FuUG9zOwotCi0jZGVmaW5lIEJUU2NhblBv c0lzUGlubmVkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxp ZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcyku YnVmKSksIFwKLQlCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLSNkZWZpbmUgQlRT Y2FuUG9zVW5waW4oc2NhbnBvcykgXAotCWRvIHsgXAotCQlSZWxlYXNlQnVmZmVyKChzY2FucG9z KS5idWYpOyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JfSB3aGlsZSAo MCkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzY2FucG9zKSBcCi0JZG8geyBcCi0J CWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSkgXAotCQkJQlRTY2FuUG9zVW5waW4oc2Nh bnBvcyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIEJUU2NhblBvc0lzVmFsaWQoc2NhbnBv cykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJy UGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJsb2Nr TnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9z SW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlk QnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAot CX0gd2hpbGUgKDApCi0KIC8qIFdlIG5lZWQgb25lIG9mIHRoZXNlIGZvciBlYWNoIGVxdWFsaXR5 LXR5cGUgU0tfU0VBUkNIQVJSQVkgc2NhbiBrZXkgKi8KIHR5cGVkZWYgc3RydWN0IEJUQXJyYXlL ZXlJbmZvCiB7CkBAIC0xMDUwLDYgKzk0NCwyOCBAQCB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5 SW5mbwogCVNjYW5LZXkJCWhpZ2hfY29tcGFyZTsJLyogYXJyYXkncyA8IG9yIDw9IHVwcGVyIGJv dW5kICovCiB9IEJUQXJyYXlLZXlJbmZvOwogCisvKgorICogQlRTY2FuT3BhcXVlRGF0YSBpcyB0 aGUgYnRyZWUtcHJpdmF0ZSBzdGF0ZSBuZWVkZWQgZm9yIGFuIGluZGV4c2Nhbi4KKyAqIFRoaXMg Y29uc2lzdHMgb2YgcHJlcHJvY2Vzc2VkIHNjYW4ga2V5cyAoc2VlIF9idF9wcmVwcm9jZXNzX2tl eXMoKSBmb3IKKyAqIGRldGFpbHMgb2YgdGhlIHByZXByb2Nlc3NpbmcpLCBhbmQgaW5mb3JtYXRp b24gYWJvdXQgdGhlIGN1cnJlbnQgYXJyYXkKKyAqIGtleXMuICBUaGVyZSBhcmUgYXNzdW1wdGlv bnMgYWJvdXQgaG93IHRoZSBjdXJyZW50IGFycmF5IGtleXMgdHJhY2sgdGhlCisgKiBwcm9ncmVz cyBvZiB0aGUgaW5kZXggc2NhbiB0aHJvdWdoIHRoZSBpbmRleCdzIGtleSBzcGFjZSAoc2VlIF9i dF9yZWFkcGFnZQorICogYW5kIF9idF9hZHZhbmNlX2FycmF5X2tleXMpLCBidXQgd2UgZG9uJ3Qg YWN0dWFsbHkgdHJhY2sgYW55dGhpbmcgYWJvdXQgdGhlCisgKiBjdXJyZW50IHNjYW4gcG9zaXRp b24gaW4gdGhpcyBvcGFxdWUgc3RydWN0LgorICoKKyAqIEluZGV4IHNjYW5zIHdvcmsgYSBwYWdl IGF0IGEgdGltZSwgYXMgcmVxdWlyZWQgYnkgdGhlIGFtZ2V0YmF0Y2ggY29udHJhY3Q6CisgKiB3 ZSBwaW4gYW5kIHJlYWQtbG9jayB0aGUgcGFnZSwgaWRlbnRpZnkgYWxsIHRoZSBtYXRjaGluZyBp dGVtcyBvbiB0aGUgcGFnZQorICogYW5kIHJldHVybiB0aGVtIGluIGEgbmV3bHkgYWxsb2NhdGVk IGJhdGNoLiAgV2UgdGhlbiByZWxlYXNlIHRoZSByZWFkLWxvY2sKKyAqIHVzaW5nIGFtZ2V0YmF0 Y2ggdXRpbGl0eSByb3V0aW5lcy4gIFRoaXMgYXBwcm9hY2ggbWluaW1pemVzIGxvY2svdW5sb2Nr CisgKiB0cmFmZmljLiBfYnRfbmV4dCBpcyBwYXNzZWQgcHJpb3JiYXRjaCwgd2hpY2ggY29udGFp bnMgZGV0YWlscyBvZiB3aGljaAorICogcGFnZSBpcyBuZXh0IGluIGxpbmUgdG8gYmUgcmVhZCAo cHJpb3JiYXRjaCBpcyBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCB0bworICogYnRnZXRiYXRjaCBi eSBjb3JlIGNvZGUpLgorICoKKyAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4s IHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCisgKiBtYXRjaGVkIGl0ZW0s IG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhpcyBpcyBhbHNvIHBl ciB0aGUKKyAqIGFtZ2V0YmF0Y2ggY29udHJhY3QuICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3Jl IGEgImJhc2UiIHR1cGxlIG9uY2UsCisgKiBhbGxvd2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0 dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxpc3QuCisgKi8KIHR5cGVkZWYgc3Ry dWN0IEJUU2Nhbk9wYXF1ZURhdGEKIHsKIAkvKiB0aGVzZSBmaWVsZHMgYXJlIHNldCBieSBfYnRf cHJlcHJvY2Vzc19rZXlzKCk6ICovCkBAIC0xMDY2LDMyICs5ODIsNiBAQCB0eXBlZGVmIHN0cnVj dCBCVFNjYW5PcGFxdWVEYXRhCiAJQlRBcnJheUtleUluZm8gKmFycmF5S2V5czsJLyogaW5mbyBh Ym91dCBlYWNoIGVxdWFsaXR5LXR5cGUgYXJyYXkga2V5ICovCiAJRm1nckluZm8gICAqb3JkZXJQ cm9jczsJCS8qIE9SREVSIHByb2NzIGZvciByZXF1aXJlZCBlcXVhbGl0eSBrZXlzICovCiAJTWVt b3J5Q29udGV4dCBhcnJheUNvbnRleHQ7IC8qIHNjYW4tbGlmZXNwYW4gY29udGV4dCBmb3IgYXJy YXkgZGF0YSAqLwotCi0JLyogaW5mbyBhYm91dCBraWxsZWQgaXRlbXMgaWYgYW55IChraWxsZWRJ dGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCi0JaW50CQkgICAqa2lsbGVkSXRlbXM7CS8q IGN1cnJQb3MuaXRlbXMgaW5kZXhlcyBvZiBraWxsZWQgaXRlbXMgKi8KLQlpbnQJCQludW1LaWxs ZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3JlZCBpdGVtcyAqLwotCWJvb2wJCWRyb3BQ aW47CQkvKiBkcm9wIGxlYWYgcGluIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnM/ICovCi0KLQkv KgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoZXNlIGFyZSB0aGUg dHVwbGUgc3RvcmFnZQotCSAqIHdvcmtzcGFjZXMgZm9yIHRoZSBjdXJyUG9zIGFuZCBtYXJrUG9z IHJlc3BlY3RpdmVseS4gIEVhY2ggaXMgb2Ygc2l6ZQotCSAqIEJMQ0tTWiwgc28gaXQgY2FuIGhv bGQgYXMgbXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9mIHR1cGxlcy4KLQkgKi8KLQljaGFy CSAgICpjdXJyVHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgY3VyclBvcyAqLwotCWNoYXIJ ICAgKm1hcmtUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBtYXJrUG9zICovCi0KLQkvKgot CSAqIElmIHRoZSBtYXJrZWQgcG9zaXRpb24gaXMgb24gdGhlIHNhbWUgcGFnZSBhcyBjdXJyZW50 IHBvc2l0aW9uLCB3ZQotCSAqIGRvbid0IHVzZSBtYXJrUG9zLCBidXQganVzdCBrZWVwIHRoZSBt YXJrZWQgaXRlbUluZGV4IGluIG1hcmtJdGVtSW5kZXgKLQkgKiAoYWxsIHRoZSByZXN0IG9mIGN1 cnJQb3MgaXMgdmFsaWQgZm9yIHRoZSBtYXJrIHBvc2l0aW9uKS4gSGVuY2UsIHRvCi0JICogZGV0 ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbWFyaywgZmlyc3QgbG9vayBhdCBtYXJrSXRlbUluZGV4LCB0 aGVuIGF0Ci0JICogbWFya1Bvcy4KLQkgKi8KLQlpbnQJCQltYXJrSXRlbUluZGV4OwkvKiBpdGVt SW5kZXgsIG9yIC0xIGlmIG5vdCB2YWxpZCAqLwotCi0JLyoga2VlcCB0aGVzZSBsYXN0IGluIHN0 cnVjdCBmb3IgZWZmaWNpZW5jeSAqLwotCUJUU2NhblBvc0RhdGEgY3VyclBvczsJCS8qIGN1cnJl bnQgcG9zaXRpb24gZGF0YSAqLwotCUJUU2NhblBvc0RhdGEgbWFya1BvczsJCS8qIG1hcmtlZCBw b3NpdGlvbiwgaWYgYW55ICovCiB9IEJUU2Nhbk9wYXF1ZURhdGE7CiAKIHR5cGVkZWYgQlRTY2Fu T3BhcXVlRGF0YSAqQlRTY2FuT3BhcXVlOwpAQCAtMTE2MCwxNCArMTA1MCwxNiBAQCBleHRlcm4g Ym9vbCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwK IGV4dGVybiBJbmRleFNjYW5EZXNjIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiBTaXplIGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4oUmVs YXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgYnRpbml0 cGFyYWxsZWxzY2FuKHZvaWQgKnRhcmdldCk7Ci1leHRlcm4gYm9vbCBidGdldHR1cGxlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNo IGJ0Z2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2gg cHJpb3JiYXRjaCwKKwkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBi dGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4dGVybiB2 b2lkIGJ0cmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNj YW5rZXlzLAogCQkJCQkgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4g dm9pZCBidGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo KTsKIGV4dGVybiB2b2lkIGJ0cGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4 dGVybiB2b2lkIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRt YXJrcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidHJlc3RycG9zKEluZGV4 U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq YnRidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkgICBJbmRleEJ1 bGtEZWxldGVSZXN1bHQgKnN0YXRzLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZUNhbGxi YWNrIGNhbGxiYWNrLApAQCAtMTI3MSw4ICsxMTYzLDkgQEAgZXh0ZXJuIHZvaWQgX2J0X3ByZXBy b2Nlc3Nfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1 bmN0aW9ucyBpbiBuYnRyZWFkcGFnZS5jCiAgKi8KLWV4dGVybiBib29sIF9idF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAotCQkJCQkJIE9mZnNldE51bWJl ciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKTsKK2V4dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLAorCQkJCQkJIFNjYW5EaXJl Y3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJIGJvb2wgZmlyc3RwYWdlKTsK IGV4dGVybiB2b2lkIF9idF9zdGFydF9hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludAlfYnRfYmluc3JjaF9hcnJheV9za2V5KEZtZ3JJ bmZvICpvcmRlcnByb2MsCiAJCQkJCQkJCSAgIGJvb2wgY3VyX2VsZW1fdHJpZywgU2NhbkRpcmVj dGlvbiBkaXIsCkBAIC0xMjg3LDggKzExODAsOSBAQCBleHRlcm4gQlRTdGFjayBfYnRfc2VhcmNo KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJ CSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNzKTsKIGV4dGVybiBPZmZzZXROdW1iZXIgX2J0X2Jp bnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRTdGF0ZSBpbnNlcnRzdGF0ZSk7CiBl eHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNlcnQga2V5LCBQ YWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pOwotZXh0ZXJuIGJvb2wgX2J0X2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2J0X25l eHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhT Y2FuQmF0Y2ggX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CiBl eHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWws IGJvb2wgcmlnaHRtb3N0KTsKIAogLyoKQEAgLTEyOTYsNyArMTE5MCw3IEBAIGV4dGVybiBCdWZm ZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdo dG1vc3QpOwogICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0IF9idF9ta3NjYW5rZXkoUmVsYXRpb24g cmVsLCBJbmRleFR1cGxlIGl0dXApOwogZXh0ZXJuIHZvaWQgX2J0X2ZyZWVzdGFjayhCVFN0YWNr IHN0YWNrKTsKLWV4dGVybiB2b2lkIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsK K2V4dGVybiB2b2lkIF9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCk7CiBleHRlcm4gQlRDeWNsZUlkIF9idF92YWN1dW1fY3ljbGVpZChSZWxhdGlv biByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfc3RhcnRfdmFjdXVtKFJlbGF0aW9uIHJlbCk7 CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1bShSZWxhdGlvbiByZWwpOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2Fu LmgKaW5kZXggY2UzNDBjMDc2Li4wMDgzZGU3MzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTYs OCArMTYsMTAgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRl ICJhY2Nlc3MvaXR1cC5oIgorI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAibm9k ZXMvdGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCisjaW5jbHVkZSAic3Rv cmFnZS9idWYuaCIKICNpbmNsdWRlICJzdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKQEAgLTEyNCw2 ICsxMjYsMTU3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIAlSZWxhdGlv bglyZWw7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAKKy8qCisgKiBMb2NhdGlvbiBvZiBhIEJh dGNoTWF0Y2hpbmdJdGVtIHRoYXQgYXBwZWFycyBpbiBhIEluZGV4U2NhbkJhdGNoIHJldHVybmVk CisgKiBieSAoYW5kIHN1YnNlcXVlbnRseSBwYXNzZWQgdG8pIGFuIGFtZ2V0YmF0Y2ggcm91dGlu ZQorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdJdGVtUG9zCit7CisJLyogUG9zaXRpb24g cmVmZXJlbmNlcyBhIHZhbGlkIEJhdGNoUmluZ0J1ZmZlci5iYXRjaGVzW10gZW50cnk/ICovCisJ Ym9vbAkJdmFsaWQ7CisKKwkvKiBCYXRjaFJpbmdCdWZmZXIuYmF0Y2hlc1tdLXdpc2UgaW5kZXgg dG8gcmVsZXZhbnQgSW5kZXhTY2FuQmF0Y2ggKi8KKwl1aW50OAkJYmF0Y2g7CisKKwkvKiBJbmRl eFNjYW5CYXRjaC5pdGVtc1tdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgQmF0Y2hNYXRjaGluZ0l0 ZW0gKi8KKwlpbnQJCQlpdGVtOworCit9IEJhdGNoUmluZ0l0ZW1Qb3M7CisKKy8qCisgKiBNYXRj aGluZyBpdGVtIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2ggKGluIHJldHVybmVkIEluZGV4U2NhbkJh dGNoKSBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uICBVc2VkIGJ5IHRhYmxlIEFNIHRvIGxvY2F0 ZSByZWxldmFudCBtYXRjaGluZyB0YWJsZSB0dXBsZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0 Y2hNYXRjaGluZ0l0ZW0KK3sKKwlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJl ZmVyZW5jZWQgaGVhcCBpdGVtICovCisJT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRl eCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KKwlMb2NhdGlvbkluZGV4IHR1cGxlT2Zm c2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55ICovCisJYm9v bAkJY2hlY2tlZFZpc2libGU7IC8qIGNoZWNrZWQgaGVhcFRpZCB0YWJsZSBibG9jaydzIHZpc2li aWxpdHk/ICovCisJYm9vbAkJYWxsVmlzaWJsZTsJCS8qIHRhYmxlIGJsb2NrIGlzIGtub3duIHRv IGJlIGFsbC12aXNpYmxlPyAqLworfSBCYXRjaE1hdGNoaW5nSXRlbTsKKworLyoKKyAqIERhdGEg YWJvdXQgb25lIGJhdGNoIG9mIGl0ZW1zIHJldHVybmVkIGJ5IChhbmQgcGFzc2VkIHRvKSBhbWdl dGJhdGNoIGR1cmluZworICogaW5kZXggc2NhbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuQmF0Y2hEYXRhCit7CisJLyoKKwkgKiBJbmZvcm1hdGlvbiBvdXRwdXQgYnkgYW1nZXRiYXRj aCBpbmRleCBBTXMgdXBvbiByZXR1cm5pbmcgYSBiYXRjaCB3aXRoCisJICogb25lIG9yIG1vcmUg bWF0Y2hpbmcgaXRlbXMsIGRlc2NyaWJpbmcgZGV0YWlscyBvZiB0aGUgaW5kZXggcGFnZSB3aGVy ZQorCSAqIG1hdGNoZXMgd2VyZSBsb2NhdGVkLgorCSAqCisJICogVXNlZCBpbiB0aGUgbmV4dCBh bWdldGJhdGNoIGNhbGwgdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8gcmVhZAorCSAq IG5leHQgKG9yIHRvIGRldGVybWluZSBpZiB0aGVyZSdzIG5vIGZ1cnRoZXIgbWF0Y2hlcyBpbiBj dXJyZW50IHNjYW4KKwkgKiBkaXJlY3Rpb24pLgorCSAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdl OwkJLyogSW5kZXggcGFnZSB3aXRoIG1hdGNoaW5nIGl0ZW1zICovCisJQmxvY2tOdW1iZXIgcHJl dlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdl OwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCisKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJy UGFnZSBidWYgKGludmFsaWQgbWVhbnMgdW5waW5uZWQpICovCisJWExvZ1JlY1B0cglsc247CQkJ LyogY3VyclBhZ2UncyBMU04gKi8KKworCS8qIHNjYW4gZGlyZWN0aW9uIHdoZW4gdGhlIGluZGV4 IHBhZ2Ugd2FzIHJlYWQgKi8KKwlTY2FuRGlyZWN0aW9uIGRpcjsKKworCS8qCisJICoga25vd25F bmRMZWZ0IGFuZCBrbm93bkVuZFJpZ2h0IGFyZSB1c2VkIGJ5IHRhYmxlIEFNcyB0byB0cmFjayB3 aGV0aGVyCisJICogdGhlcmUgbWF5IGJlIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgdG8gdGhlIGxl ZnQgYW5kIHJpZ2h0IG9mIGN1cnJQYWdlLAorCSAqIHJlc3BlY3RpdmVseS4gIFRoaXMgaGVscHMg dGhlbSB0byBhdm9pZCByZXBlYXRlZGx5IGNhbGxpbmcgYW1nZXRiYXRjaC4KKwkgKi8KKwlib29s CQlrbm93bkVuZExlZnQ7CisJYm9vbAkJa25vd25FbmRSaWdodDsKKworCS8qCisJICogbW9yZUxl ZnQgYW5kIG1vcmVSaWdodCBhcmUgdXNlZCBieSBpbmRleCBBTXMgdG8gdHJhY2sgd2hldGhlciB0 aGVyZSBtYXkKKwkgKiBiZSBtYXRjaGluZyBpbmRleCBlbnRyaWVzIHRvIHRoZSBsZWZ0IGFuZCBy aWdodCBjdXJyUGFnZSwgcmVzcGVjdGl2ZWx5LgorCSAqCisJICogTm90ZTogdGhlIGV4YWN0IGlu dGVycHJldGF0aW9uIG9mIHRoZXNlIGZpZWxkcyB2YXJpZXMgYWNyb3NzIGluZGV4IEFNcy4KKwkg KiBUYWJsZSBBTXMgbXVzdCBub3QgcmVseSBvbiB0aGVtIGRpcmVjdGx5OyB0aGV5IG11c3QgYWx3 YXlzIGNhbGwgaW5kZXgKKwkgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSB0byBkZXRlcm1pbmUg aWYgdGhlcmUncyBubyBtb3JlIGJhdGNoZXMgaW4gdGhlCisJICogY3VycmVudCBzY2FuIGRpcmVj dGlvbi4KKwkgKi8KKwlib29sCQltb3JlTGVmdDsKKwlib29sCQltb3JlUmlnaHQ7CisKKwkvKgor CSAqIE1hdGNoaW5nIGl0ZW1zIHN0YXRlIGZvciB0aGlzIGJhdGNoLiAgT3V0cHV0IGJ5IGluZGV4 IEFNIGZvciB0YWJsZSBBTS4KKwkgKgorCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3Jk ZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKKwkgKiBpbmRleG9mZnNldCkuICBX aGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMKKwkg KiB0byBmaWxsIHRoZSBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFz dCBzbG90IGFuZCBmaWxsCisJICogZG93bndhcmRzLiAgSGVuY2UgdGhleSBuZWVkIGEgZmlyc3Qt dmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeQorCSAqIGNvdW50ZXIuCisJICovCisJ aW50CQkJZmlyc3RJdGVtOwkJLyogZmlyc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCWlu dAkJCWxhc3RJdGVtOwkJLyogbGFzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisKKwkvKiBp bmZvIGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2 ZXIgdXNlZCkgKi8KKwlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogaW5kZXhlcyBvZiBraWxsZWQg aXRlbXMgKi8KKwlpbnQJCQludW1LaWxsZWQ7CQkvKiBudW1iZXIgb2YgY3VycmVudGx5IHN0b3Jl ZCBpdGVtcyAqLworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2Fu LCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKKwkgKiB3b3Jrc3BhY2VzIGZvciB0aGUgbWF0 Y2hpbmcgdHVwbGVzICh0dXBsZXMgcmVmZXJlbmNlZCBieSBpdGVtc1tdKS4gRWFjaAorCSAqIGlz IG9mIHNpemUgQkxDS1NaLCBzbyBpdCBjYW4gaG9sZCBhcyBtdWNoIGFzIGEgZnVsbCBwYWdlJ3Mg d29ydGggb2YKKwkgKiB0dXBsZXMuCisJICovCisJY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1 cGxlIHN0b3JhZ2UgZm9yIGl0ZW1zW10gKi8KKwlCYXRjaE1hdGNoaW5nSXRlbSBpdGVtc1tGTEVY SUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBtYXRjaGluZyBpdGVtcyAqLworfSBJbmRleFNjYW5CYXRj aERhdGE7CisKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0 Y2g7CisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzIChsZWFmIHBhZ2VzKSB3ZSBj YW4ga2VlcCBpbiBtZW1vcnkuICBXZSBuZWVkIGEKKyAqIG1pbmltdW0gb2YgdHdvLCBzaW5jZSB3 ZSdsbCBvbmx5IGNvbnNpZGVyIHJlbGVhc2luZyBvbmUgYmF0Y2ggd2hlbiBhbm90aGVyCisgKiBp cyByZWFkLgorICovCisjZGVmaW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJCTIKKyNkZWZpbmUg SU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTCTIKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUg QU1zIHRvIG1hbmFnZSBhbiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICog aW50ZXJmYWNlLiAgU2NhbnMgdXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBi eSBhbWdldGJhdGNoLgorICoKKyAqIEJhdGNoZXMgYXJlIGtlcHQgaW4gdGhlIG9yZGVyIHRoYXQg dGhleSB3ZXJlIHJldHVybmVkIGluIGJ5IGFtZ2V0YmF0Y2gsCisgKiBzaW5jZSB0aGF0IGlzIHRo ZSBzYW1lIG9yZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgcmV0dXJuCisg KiBtYXRjaGVzIGluLiAgSG93ZXZlciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxl IHR1cGxlcyBpbiB3aGF0ZXZlcgorICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVu dCAtLSBwcm92aWRlZCB0aGF0IHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QKKyAqIGFmZmVjdCB0aGUg b3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMg aW4uCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgoreworCS8qIGN1cnJlbnQg cG9zaXRpb25zIGluIGJhdGNoZXNbXSBmb3Igc2NhbiAqLworCUJhdGNoUmluZ0l0ZW1Qb3Mgc2Nh blBvczsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8KKwlCYXRjaFJpbmdJdGVtUG9zIG1hcmtQ b3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCisJSW5kZXhTY2FuQmF0Y2ggbWFya0Jh dGNoOworCisJLyoKKwkgKiBoZWFkQmF0Y2ggaXMgYW4gaW5kZXggdG8gdGhlIGVhcmxpZXN0IHN0 aWxsLXZhbGlkIGJhdGNoIGluICdiYXRjaGVzJy4KKwkgKiBJbiBwcmFjdGljZSB0aGlzIG11c3Qg YmUgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5Qb3MgYmF0Y2ggKHNjYW5CYXRjaCkuCisJICovCisJ dWludDgJCWhlYWRCYXRjaDsKKworCS8qCisJICogbmV4dEJhdGNoIGlzIGFuIGluZGV4IHRvIHRo ZSBuZXh0IGVtcHR5IGJhdGNoIHNsb3QgaW4gJ2JhdGNoZXMnLiAgVGhpcworCSAqIGlzIG9ubHkg YWN0dWFsbHkgdXNhYmxlIHdoZW4gdGhlIHNjYW4gaXMgIWluZGV4X3NjYW5fYmF0Y2hfZnVsbCgp LgorCSAqLworCXVpbnQ4CQluZXh0QmF0Y2g7CisKKwlib29sCQlkb25lOworCisJLyogQXJyYXkg b2YgcG9pbnRlcnMgdG8gY2FjaGVkIHJlY3ljbGFibGUgYmF0Y2hlcyAqLworCUluZGV4U2NhbkJh dGNoIGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFU107CisKKwkvKiBBcnJheSBvZiBwb2lu dGVycyB0byByaW5nIGJ1ZmZlciBiYXRjaGVzICovCisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2hlc1tJ TkRFWF9TQ0FOX01BWF9CQVRDSEVTXTsKKworfSBCYXRjaFJpbmdCdWZmZXI7CisKIHN0cnVjdCBJ bmRleFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8qCkBAIC0xNDEsNiArMjk0LDE1IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJaW50CQkJbnVtYmVyT2ZPcmRlckJ5czsJLyog bnVtYmVyIG9mIG9yZGVyaW5nIG9wZXJhdG9ycyAqLwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqa2V5 RGF0YTsJLyogYXJyYXkgb2YgaW5kZXggcXVhbGlmaWVyIGRlc2NyaXB0b3JzICovCiAJc3RydWN0 IFNjYW5LZXlEYXRhICpvcmRlckJ5RGF0YTsJLyogYXJyYXkgb2Ygb3JkZXJpbmcgb3AgZGVzY3Jp cHRvcnMgKi8KKworCS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0YXRlICovCisJ dm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5mbyAqLworCisJ LyogdGFibGUgYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgYW1nZXRiYXRjaCBzdGF0ZSAqLworCUJh dGNoUmluZ0J1ZmZlciBiYXRjaHJpbmdidWY7CS8qIGFtZ2V0YmF0Y2ggcmVsYXRlZCBzdGF0ZSAq LworCisJYm9vbAkJdXNlYmF0Y2hyaW5nOwkvKiBzY2FuIHVzZXMgYW1nZXRiYXRjaC9iYXRjaHJp bmdidWY/ICovCisKIAlib29sCQl4c193YW50X2l0dXA7CS8qIGNhbGxlciByZXF1ZXN0cyBpbmRl eCB0dXBsZXMgKi8KIAlib29sCQl4c190ZW1wX3NuYXA7CS8qIHVucmVnaXN0ZXIgc25hcHNob3Qg YXQgc2NhbiBlbmQ/ICovCiAKQEAgLTE0OSw5ICszMTEsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eFNjYW5EZXNjRGF0YQogCWJvb2wJCWlnbm9yZV9raWxsZWRfdHVwbGVzOwkvKiBkbyBub3QgcmV0 dXJuIGtpbGxlZCBlbnRyaWVzICovCiAJYm9vbAkJeGFjdFN0YXJ0ZWRJblJlY292ZXJ5OwkvKiBw cmV2ZW50cyBraWxsaW5nL3NlZWluZyBraWxsZWQKIAkJCQkJCQkJCQkgKiB0dXBsZXMgKi8KLQot CS8qIGluZGV4IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0YXRlICovCi0Jdm9pZAkgICAqb3Bh cXVlOwkJCS8qIGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5mbyAqLworCS8qIHhzX3NuYXBzaG90 IHVzZXMgYW4gTVZDQyBzbmFwc2hvdD8gKi8KKwlib29sCQlNVkNDU2NhbjsKIAogCS8qCiAJICog SW5zdHJ1bWVudGF0aW9uIGNvdW50ZXJzIG1haW50YWluZWQgYnkgYWxsIGluZGV4IEFNcyBkdXJp bmcgYm90aApAQCAtMTYwLDEwICszMjEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVz Y0RhdGEKIAlzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50OwogCiAJ LyoKLQkgKiBJbiBhbiBpbmRleC1vbmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCBhbWdldHR1cGxlIGNh bGwgbXVzdCBmaWxsIGVpdGhlcgotCSAqIHhzX2l0dXAgKGFuZCB4c19pdHVwZGVzYykgb3IgeHNf aGl0dXAgKGFuZCB4c19oaXR1cGRlc2MpIHRvIHByb3ZpZGUgdGhlCi0JICogZGF0YSByZXR1cm5l ZCBieSB0aGUgc2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGluIHdoaWNoIGNhc2UgdGhlIGhlYXAK LQkgKiBmb3JtYXQgd2lsbCBiZSB1c2VkLgorCSAqIEluIGFuIGluZGV4LW9ubHkgc2NhbiwgYSBz dWNjZXNzZnVsIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsIG11c3QKKwkgKiBmaWxsIGVp dGhlciB4c19pdHVwIChhbmQgeHNfaXR1cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQgeHNfaGl0dXBk ZXNjKSB0bworCSAqIHByb3ZpZGUgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNjYW4uICBJdCBj YW4gZmlsbCBib3RoLCBpbiB3aGljaCBjYXNlCisJICogdGhlIGhlYXAgZm9ybWF0IHdpbGwgYmUg dXNlZC4KIAkgKi8KIAlJbmRleFR1cGxlCXhzX2l0dXA7CQkvKiBpbmRleCB0dXBsZSByZXR1cm5l ZCBieSBBTSAqLwogCXN0cnVjdCBUdXBsZURlc2NEYXRhICp4c19pdHVwZGVzYzsJLyogcm93dHlw ZSBkZXNjcmlwdG9yIG9mIHhzX2l0dXAgKi8KQEAgLTE3Niw2ICszMzcsOCBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgKnhzX2hlYXBmZXRj aDsKIAogCWJvb2wJCXhzX3JlY2hlY2s7CQkvKiBUIG1lYW5zIHNjYW4ga2V5cyBtdXN0IGJlIHJl Y2hlY2tlZCAqLworCWJvb2wJCXhzX3Zpc2libGU7CQkvKiBUIG1lYW5zIHRoZSBoZWFwIHBhZ2Ug aXMgYWxsLXZpc2libGUgKi8KKwl1aW50MTYJCW1heGl0ZW1zYmF0Y2g7CS8qIHNldCBieSBhbWJl Z2luc2NhbiB3aGVuIGFtZ2V0YmF0Y2ggdXNlZCAqLwogCiAJLyoKIAkgKiBXaGVuIGZldGNoaW5n IHdpdGggYW4gb3JkZXJpbmcgb3BlcmF0b3IsIHRoZSB2YWx1ZXMgb2YgdGhlIE9SREVSIEJZCkBA IC0yMTUsNCArMzc4LDExNCBAQCB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEKIAlzdHJ1 Y3QgVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CiB9IFN5c1NjYW5EZXNjRGF0YTsKIAorLyoKKyAqIENv dW50IGhvdyBtYW55IGJhdGNoZXMgYXJlIGN1cnJlbnRseSBsb2FkZWQgaW4gdGhlIHJpbmcgYnVm ZmVyLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4CitpbmRleF9zY2FuX2JhdGNoX2NvdW50KElu ZGV4U2NhbkRlc2NEYXRhICpzY2FuKQoreworCXJldHVybiAodWludDgpIChzY2FuLT5iYXRjaHJp bmdidWYubmV4dEJhdGNoIC0KKwkJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCk7Cit9 CisKKy8qCisgKiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJhdGNoIHdpdGggdGhlIHJlcXVlc3RlZCBp bmRleD8KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChJ bmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgdWludDggaWR4KQoreworCXJldHVybiAoaW50OCkgKGlk eCAtIHNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2gpID49IDAgJiYKKwkJKGludDgpIChpZHgg LSBzY2FuLT5iYXRjaHJpbmdidWYubmV4dEJhdGNoKSA8IDA7Cit9CisKKy8qCisgKiBIYXZlIHdl IGxvYWRlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcz8KKyAqLworc3RhdGljIGlubGlu ZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2Z1bGwoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7 CisJcmV0dXJuIGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gSU5ERVhfU0NBTl9NQVhf QkFUQ0hFUzsKK30KKworLyoKKyAqIFJldHVybiBiYXRjaCBmb3IgdGhlIHByb3ZpZGVkIGluZGV4 LgorICovCitzdGF0aWMgaW5saW5lIEluZGV4U2NhbkJhdGNoCitpbmRleF9zY2FuX2JhdGNoKElu ZGV4U2NhbkRlc2NEYXRhICpzY2FuLCB1aW50OCBpZHgpCit7CisJQXNzZXJ0KGluZGV4X3NjYW5f YmF0Y2hfbG9hZGVkKHNjYW4sIGlkeCkpOworCisJcmV0dXJuIHNjYW4tPmJhdGNocmluZ2J1Zi5i YXRjaGVzW2lkeCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSldOworfQorCisvKgorICog QXBwZW5kIGdpdmVuIGJhdGNoIHRvIHNjYW4ncyBiYXRjaCByaW5nIGJ1ZmZlci4KKyAqLworc3Rh dGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjRGF0 YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpyaW5n YnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwl1aW50OAkJbmV4dEJhdGNoID0gcmluZ2J1Zi0+ bmV4dEJhdGNoOworCisJcmluZ2J1Zi0+YmF0Y2hlc1tuZXh0QmF0Y2ggJiAoSU5ERVhfU0NBTl9N QVhfQkFUQ0hFUyAtIDEpXSA9IGJhdGNoOworCXJpbmdidWYtPm5leHRCYXRjaCsrOworfQorCisv KgorICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVtIGluIHRoZSBiYXRjaC4KKyAq CisgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0gd2l0aGluIHRoZSBwcm92aWRlZCBiYXRjaCAo b3IgdG8gdGhlIHByZXZpb3VzIGl0ZW0sCisgKiB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuCisg KgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiBjb3VsZCBiZSBhZHZhbmNlZC4gIFJl dHVybnMgZmFsc2Ugd2hlbiB0aGVyZQorICogYXJlIG5vIG1vcmUgaXRlbXMgaW4gdGhlIGJhdGNo IGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhf c2Nhbl9wb3NfYWR2YW5jZShTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJICAgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3NlcnQocG9zLT52 YWxpZCk7CisKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJ aWYgKCsrcG9zLT5pdGVtID4gYmF0Y2gtPmxhc3RJdGVtKQorCQkJcmV0dXJuIGZhbHNlOworCX0K KwllbHNlCQkJCQkJLyogU2NhbkRpcmVjdGlvbklzQmFja3dhcmQgKi8KKwl7CisJCWlmICgtLXBv cy0+aXRlbSA8IGJhdGNoLT5maXJzdEl0ZW0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyog QWR2YW5jZWQgd2l0aGluIGJhdGNoICovCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBBZHZh bmNlIGJhdGNoIHBvc2l0aW9uIHRvIHRoZSBzdGFydCBvZiBpdHMgbmV3IGJhdGNoLgorICoKKyAq IFNldHMgdGhlIGdpdmVuIHBvc2l0aW9uIHRvIHRoZSBmaXN0IGl0ZW0gaW4gdGhlIGdpdmVuIHNj YW4gZGlyZWN0aW9uIChvciB0bworICogdGhlIGxhc3QgaXRlbSwgd2hlbiBzY2FubmluZyBiYWNr d2FyZHMpLiAgIEFsc28gYWR2YW5jZXMvaW5jcmVtZW50cyBiYXRjaAorICogb2Zmc2V0IGZyb20g cG9zaXRpb24gc3VjaCB0aGF0IGl0IHBvaW50cyB0byBuZXdCYXRjaEZvclBvcy4KKyAqLworc3Rh dGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24sCisJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggbmV3QmF0Y2gsIEJhdGNoUmluZ0l0ZW1Q b3MgKnBvcykKK3sKKwlBc3NlcnQobmV3QmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCisJLyog SW5jcmVtZW50IGJhdGNoIChvZnRlbiB3cmFwcyB1aW50OCBiYXRjaCBmaWVsZCkgKi8KKwlpZiAo cG9zLT52YWxpZCkKKwkJcG9zLT5iYXRjaCsrOworCWVsc2UKKwkJcG9zLT5iYXRjaCA9IDA7CisK Kwlwb3MtPnZhbGlkID0gdHJ1ZTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVj dGlvbikpCisJCXBvcy0+aXRlbSA9IG5ld0JhdGNoLT5maXJzdEl0ZW07CisJZWxzZQorCQlwb3Mt Pml0ZW0gPSBuZXdCYXRjaC0+bGFzdEl0ZW07Cit9CisKICNlbmRpZgkJCQkJCQkvKiBSRUxTQ0FO X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDcyNjBiN2IzZC4uYmJmYjk4YWMyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy90YWJsZWFtLmgKQEAgLTQzMywxMSArNDMzLDI5IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1S b3V0aW5lCiAJICovCiAJdm9pZAkJKCppbmRleF9mZXRjaF9lbmQpIChzdHJ1Y3QgSW5kZXhGZXRj aFRhYmxlRGF0YSAqZGF0YSk7CiAKKwkvKgorCSAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20g YW4gaW5kZXggc2NhbiBpbnRvIHNsb3QsIHNjYW5uaW5nIGluIHRoZQorCSAqIHNwZWNpZmllZCBk aXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFsc2UKKwkg KiBvdGhlcndpc2UuCisJICoKKwkgKiBUaGlzIGNhbGxiYWNrIGFsbG93cyB0aGUgdGFibGUgQU0g dG8gZGlyZWN0bHkgbWFuYWdlIHRoZSBzY2FuIHByb2Nlc3MsCisJICogaW5jbHVkaW5nIGludGVy ZmFjaW5nIHdpdGggdGhlIGluZGV4IEFNLiBUaGUgY2FsbGVyIHNpbXBseSBzcGVjaWZpZXMKKwkg KiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY2FuOyB0aGUgdGFibGUgQU0gdGFrZXMgY2FyZSBvZiBy ZXRyaWV2aW5nIFRJRHMKKwkgKiBmcm9tIHRoZSBpbmRleCwgcGVyZm9ybWluZyB2aXNpYmlsaXR5 IGNoZWNrcywgYW5kIHJldHVybmluZyB0dXBsZXMgaW4KKwkgKiB0aGUgc2xvdC4KKwkgKi8KKwli b29sCQkoKmluZGV4X2dldG5leHRfc2xvdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJ CSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpOworCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0 ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRpbmcgdG8gYHNuYXBzaG90YC4g SWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlzaWJpbGl0eQogCSAqIHRlc3Qs IHJldHVybiB0cnVlLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKKwkgKiBUaGlzIGlzIGEgbG93ZXIt bGV2ZWwgY2FsbGJhY2sgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuCisJICogQ2Fs bGVycyBzaG91bGQgZmF2b3IgdGhlIGluZGV4X2dldG5leHRfc2xvdCBjYWxsYmFjayB3aGVuZXZl ciBwb3NzaWJsZS4KKwkgKgogCSAqIE5vdGUgdGhhdCBBTXMgdGhhdCBkbyBub3QgbmVjZXNzYXJp bHkgdXBkYXRlIGluZGV4ZXMgd2hlbiBpbmRleGVkCiAJICogY29sdW1ucyBkbyBub3QgY2hhbmdl LCBuZWVkIHRvIHJldHVybiB0aGUgY3VycmVudC9jb3JyZWN0IHZlcnNpb24gb2YKIAkgKiB0aGUg dHVwbGUgdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBzbmFwc2hvdCwgZXZlbiBpZiB0aGUgdGlkIHBv aW50cyB0byBhbgpAQCAtMTIwOCw2ICsxMjI2LDI2IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0t PmluZGV4X2ZldGNoX2VuZChzY2FuKTsKIH0KIAorLyoKKyAqIEZldGNoIHRoZSBuZXh0IHR1cGxl IGZyb20gYW4gaW5kZXggc2NhbiBpbnRvIGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCisgKiBzcGVj aWZpZWQgZGlyZWN0aW9uLiBSZXR1cm5zIHRydWUgaWYgYSB0dXBsZSB3YXMgZm91bmQsIGZhbHNl IG90aGVyd2lzZS4KKyAqCisgKiBUaGUgaW5kZXggc2NhbiBzaG91bGQgaGF2ZSBiZWVuIHN0YXJ0 ZWQgdmlhIHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKCkuCisgKiBDYWxsZXJzIG11c3QgY2hlY2sg c2Nhbi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2FuIGtleXMgaWYgcmVxdWlyZWQuCisgKgor ICogSW5kZXgtb25seSBzY2FuIGNhbGxlcnMgKHRoYXQgcGFzcyB4c193YW50X2l0dXA9dHJ1ZSB0 byBpbmRleF9iZWdpbnNjYW4pCisgKiBjYW4gY29uc3VtZSBpbmRleCB0dXBsZSByZXN1bHRzIGJ5 IGV4YW1pbmluZyBJbmRleFNjYW5EZXNjRGF0YSBmaWVsZHMgc3VjaAorICogYXMgeHNfaXR1cCBh bmQgeHNfaGl0dXAuICBUaGUgdGFibGUgQU0gd29uJ3QgdXN1YWxseSBmZXRjaCBhIGhlYXAgdHVw bGUKKyAqIGludG8gdGhlIHByb3ZpZGVkIHNsb3QgaW4gdGhlIGNhc2Ugb2YgeHNfd2FudF9pdHVw PXRydWUgY2FsbGVycy4KKyAqLworc3RhdGljIGlubGluZSBib29sCit0YWJsZV9pbmRleF9nZXRu ZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBpc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJ CQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJcmV0dXJuIGlzY2FuLT5oZWFwUmVsYXRp b24tPnJkX3RhYmxlYW0tPmluZGV4X2dldG5leHRfc2xvdChpc2NhbiwKKwkJCQkJCQkJCQkJCQkJ CSAgIGRpcmVjdGlvbiwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBhcyBwYXJ0IG9mIGFu IGluZGV4IHNjYW4sIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZwogICog YSB2aXNpYmlsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElmIGEgdHVwbGUgd2Fz IGZvdW5kIGFuZCBwYXNzZWQKQEAgLTEyMzEsNiArMTI2OSw5IEBAIHRhYmxlX2luZGV4X2ZldGNo X2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVudHJ5IChsaWtlIGhl YXAncyBIT1QpLiBXaGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQog ICogZXZhbHVhdGVzIHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4 IGVudHJ5IC0+dGFibGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192 ZXJzaW9uKCkgaXMgd2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dl ci1sZXZlbCBpbnRlcmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxs ZXJzCisgKiBzaG91bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZh Y2Ugd2hlbmV2ZXIgcG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5k ZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCmluZGV4IDg4NDdkN2Y5NC4uYjViOGY1MDlhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAorKysgYi9z cmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaApAQCAtNDgsNiArNDgsMTIgQEAg dHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uCiB7CiAJLyogSW5kZXggc2Vh cmNoIGNvdW50IChpbmNyZW1lbnRlZCB3aXRoIHBnc3RhdF9jb3VudF9pbmRleF9zY2FuIGNhbGwp ICovCiAJdWludDY0CQluc2VhcmNoZXM7CisKKwkvKgorCSAqIGhlYXAgYmxvY2tzIGZldGNoZWQg Y291bnRzIChpbmNyZW1lbnRlZCBieSBpbmRleF9nZXRuZXh0X3Nsb3QgY2FsbHMKKwkgKiB3aXRo aW4gdGFibGUgQU1zLCB0aG91Z2ggb25seSBkdXJpbmcgaW5kZXgtb25seSBzY2FucykKKwkgKi8K Kwl1aW50NjQJCW5oZWFwZmV0Y2hlczsKIH0gSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCBmODA1M2Q5ZTUuLjc5M2IxYTNjNiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKQEAgLTE3NTMsNyArMTc1Myw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nh blN0YXRlCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50YXRp b24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9uIChu byBsZWFkZXIgZW50cnkpCiAgKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxl cyBmZXRjaGVkIGZyb20gdGhlIHRhYmxlCi0gKgkJVk1CdWZmZXIJCSAgIGJ1ZmZlciBpbiB1c2Ug Zm9yIHZpc2liaWxpdHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2FuTGVuCQkgICBzaXpl IG9mIHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdB dHROdW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxF TgogICoJCU5hbWVDU3RyaW5nQ291bnQgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIE5hbWVD U3RyaW5nQXR0TnVtcyBhcnJheQpAQCAtMTc3Niw3ICsxNzc1LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhPbmx5U2NhblN0YXRlCiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGlvc3NfSW5zdHJ1 bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsK IAlUdXBsZVRhYmxlU2xvdCAqaW9zc19UYWJsZVNsb3Q7Ci0JQnVmZmVyCQlpb3NzX1ZNQnVmZmVy OwogCVNpemUJCWlvc3NfUHNjYW5MZW47CiAJQXR0ck51bWJlciAqaW9zc19OYW1lQ1N0cmluZ0F0 dE51bXM7CiAJaW50CQkJaW9zc19OYW1lQ1N0cmluZ0NvdW50OwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApp bmRleCBmYjgwODgyM2EuLjA3NTkzZDgwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE0MTcs MTIgKzE0MTcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJYm9vbAkJYW1vcHRp b25hbGtleTsKIAlib29sCQlhbXNlYXJjaGFycmF5OwogCWJvb2wJCWFtc2VhcmNobnVsbHM7Ci0J LyogZG9lcyBBTSBoYXZlIGFtZ2V0dHVwbGUgaW50ZXJmYWNlPyAqLwotCWJvb2wJCWFtaGFzZ2V0 dHVwbGU7CisJLyogZG9lcyBBTSBoYXZlIGFtZ2V0YmF0Y2ggKG9yIGdldHR1cGxlKSBpbnRlcmZh Y2U/ICovCisJYm9vbAkJYW1oYXNnZXRiYXRjaDsKIAkvKiBkb2VzIEFNIGhhdmUgYW1nZXRiaXRt YXAgaW50ZXJmYWNlPyAqLwogCWJvb2wJCWFtaGFzZ2V0Yml0bWFwOwogCWJvb2wJCWFtY2FucGFy YWxsZWw7Ci0JLyogZG9lcyBBTSBoYXZlIGFtbWFya3BvcyBpbnRlcmZhY2U/ICovCisJLyogaXMg QU0gcHJlcGFyZWQgZm9yIHVzIHRvIHJlc3RvcmUgYSBtYXJrPyAqLwogCWJvb2wJCWFtY2FubWFy a3BvczsKIAkvKiBBTSdzIGNvc3QgZXN0aW1hdG9yICovCiAJLyogUmF0aGVyIHRoYW4gaW5jbHVk ZSBhbWFwaS5oIGhlcmUsIHdlIGRlY2xhcmUgYW1jb3N0ZXN0aW1hdGUgbGlrZSB0aGlzICovCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvYnJpbi9icmluLmMKaW5kZXggNjg4N2U0MjE0Li5kNWQwMWI4NzcgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv YnJpbi9icmluLmMKQEAgLTI5NCwxMCArMjk0LDExIEBAIGJyaW5oYW5kbGVyKFBHX0ZVTkNUSU9O X0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJyaW5iZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJy aW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAor CQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBicmluZ2V0Yml0bWFwLAog CQkuYW1lbmRzY2FuID0gYnJpbmVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1y ZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJh bGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFy YWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9n aW5nZXQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKaW5kZXggNmIxNDhlNjlh Li44ZjcwMzNkNjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYwpAQCAtMTk1Myw5ICsxOTUzLDkg QEAgZ2luZ2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJICog aW50byB0aGUgbWFpbiBpbmRleCwgYW5kIHNvIHdlIG1pZ2h0IHZpc2l0IGl0IGEgc2Vjb25kIHRp bWUgZHVyaW5nIHRoZQogCSAqIG1haW4gc2Nhbi4gIFRoaXMgaXMgb2theSBiZWNhdXNlIHdlJ2xs IGp1c3QgcmUtc2V0IHRoZSBzYW1lIGJpdCBpbiB0aGUKIAkgKiBiaXRtYXAuICAoVGhlIHBvc3Np YmlsaXR5IG9mIGR1cGxpY2F0ZSB2aXNpdHMgaXMgYSBtYWpvciByZWFzb24gd2h5IEdJTgotCSAq IGNhbid0IHN1cHBvcnQgdGhlIGFtZ2V0dHVwbGUgQVBJLCBob3dldmVyLikgTm90ZSB0aGF0IGl0 IHdvdWxkIG5vdCBkbwotCSAqIHRvIHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5k aW5nIGxpc3QsIHNpbmNlIGNvbmN1cnJlbnQKLQkgKiBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1 cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCisJICogY2FuJ3Qgc3VwcG9ydCBlaXRoZXIgdGhlIGFt Z2V0dHVwbGUgb3IgYW1nZXRiYXRjaCBBUEkuKSBOb3RlIHRoYXQgaXQKKwkgKiB3b3VsZCBub3Qg ZG8gdG8gc2NhbiB0aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2UK KwkgKiBjb25jdXJyZW50IGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBl bnRpcmVseS4KIAkgKi8KIAlzY2FuUGVuZGluZ0luc2VydChzY2FuLCB0Ym0sICZudGlkcyk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMKaW5kZXggZDIwNTA5M2UyLi4xMjYzZGMxODAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2ludXRpbC5jCkBAIC04MiwxMCArODIsMTEgQEAgZ2luaGFuZGxlcihQR19G VU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBnaW5iZWdpbnNjYW4sCiAJCS5hbXJlc2Nh biA9IGdpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5V TEwsCisJCS5hbWZyZWViYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGdpbmdldGJpdG1h cCwKIAkJLmFtZW5kc2NhbiA9IGdpbmVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQku YW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVw YXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFt cGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4IDg1NjVlMjI1 Yi4uMzc4MDRmNTRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBAIC0xMDMsMTAgKzEwMywxMSBA QCBnaXN0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBnaXN0YmVn aW5zY2FuLAogCQkuYW1yZXNjYW4gPSBnaXN0cmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IGdpc3Rn ZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAog CQkuYW1nZXRiaXRtYXAgPSBnaXN0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2lzdGVuZHNj YW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBv c3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1p bml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaC5jCmluZGV4IGU4OGRkYjMyYS4uNmEyMGI2N2Y2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaC5jCkBAIC0xMDIsMTAgKzEwMiwxMSBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9B UkdTKQogCQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNo cmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBO VUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0 bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAot CQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1h dGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJ LmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMKaW5kZXggY2JlZjczZTVkLi4zNTBkODI3ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMTksNiArMTksNyBAQAogICovCiAjaW5jbHVkZSAi cG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgogI2luY2x1ZGUgImFjY2Vz cy9nZW5hbS5oIgogI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKICNpbmNsdWRlICJhY2Nlc3Mv aGVhcHRvYXN0LmgiCkBAIC04NCw3ICs4NSw4IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihS ZWxhdGlvbiByZWwpCiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBhbGxvYzBfb2JqZWN0 KEluZGV4RmV0Y2hIZWFwRGF0YSk7CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwgPSByZWw7Ci0JaHNj YW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxv Y2tOdW1iZXI7CisJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKIAogCXJldHVybiAmaHNjYW4tPnhz X2Jhc2U7CiB9CkBAIC05NCwxMSArOTYsMjEgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9 IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAorCS8qIGRyb3AgcGluIGlmIHRoZXJlJ3Mg YSBwaW5uZWQgaGVhcCBwYWdlICovCiAJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYp KQogCXsKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisKKwkJLyogcmVzZXQgc3Rh dGUgYXNzb2NpYXRlZCB3aXRoIHhzX2NidWYsIHRvbyAqLwogCQloc2Nhbi0+eHNfY2J1ZiA9IElu dmFsaWRCdWZmZXI7CisJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJfQor CisJLyoKKwkgKiBEZWxpYmVyYXRlbHkgZG9uJ3QgZHJvcCBhbnkgdm1idWYgcGluIGhlcmUuICBC dXQgZG8gcmVzZXQgeHNfdm1faXRlbXMsCisJICogc28gdGhhdCByZXNjYW5zIGRvbid0IGRvIGFu IGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0gbG9va3Vwcy4KKwkgKi8KKwloc2Nhbi0+eHNfdm1faXRl bXMgPSAxOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTA4LDYgKzEyMCw5IEBAIGhlYXBhbV9pbmRl eF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAogCWhlYXBhbV9pbmRleF9m ZXRjaF9yZXNldChzY2FuKTsKIAorCWlmIChoc2Nhbi0+dm1idWYgIT0gSW52YWxpZEJ1ZmZlcikK KwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+dm1idWYpOworCiAJcGZyZWUoaHNjYW4pOwogfQogCkBA IC0xMjUsMjIgKzE0MCwyNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4 RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJQXNzZXJ0KFRUU19JU19CVUZGRVJUVVBMRShzbG90KSk7 CiAKIAkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBp biBtaWQtSE9UIGNoYWluLiAqLwotCWlmICghKmNhbGxfYWdhaW4pCisJaWYgKGhzY2FuLT54c19i bGsgIT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQogCXsKLQkJLyogU3dpdGNoIHRv IGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJ CXByZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7CisJCUFzc2VydCghKmNhbGxfYWdhaW4pOwogCi0J CWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhzX2NidWYsCi0J CQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jhc2UucmVsLAotCQkJCQkJCQkJCQkgIEl0ZW1Qb2ludGVy R2V0QmxvY2tOdW1iZXIodGlkKSk7CisJCS8qIFJlbWVtYmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sg bnVtYmVyIGZvciBuZXh0IHRpbWUgKi8KKwkJaHNjYW4tPnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIodGlkKTsKKworCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1Zikp CisJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKKworCQloc2Nhbi0+eHNfY2J1ZiA9 IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgot CQkgKiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhpcyBw YWdlCisJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1l CiAJCSAqLwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2Vf cHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYpOworCQloZWFwX3Bh Z2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYpOwogCX0KIAor CUFzc2VydChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSk7CisJQXNzZXJ0KEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGhzY2FuLT54c19jYnVmKSA9PSBoc2Nhbi0+eHNfYmxrKTsKKwogCS8qIE9i dGFpbiBzaGFyZS1sb2NrIG9uIHRoZSBidWZmZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0 eSAqLwogCUxvY2tCdWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAln b3RfaGVhcF90dXBsZSA9IGhlYXBfaG90X3NlYXJjaF9idWZmZXIodGlkLApAQCAtMTczLDYgKzE5 Myw1MzUgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVE YXRhICpzY2FuLAogCXJldHVybiBnb3RfaGVhcF90dXBsZTsKIH0KIAorLyoKKyAqIGhlYXBhbV9i YXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkKKyAqCQlPYnRhaW4gdmlzaWJpbGl0eSBpbmZvcm1hdGlv biBmb3IgYSBUSUQgZnJvbSBjYWxsZXIncyBiYXRjaC4KKyAqCisgKiBDYWxsZWQgZHVyaW5nIGlu ZGV4LW9ubHkgc2NhbnMuICBXZSBhbHdheXMgY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgY2FsbGVy J3MKKyAqIGl0ZW0gKGFuIG9mZnNldCBpbnRvIGNhbGxlcidzIGJhdGNoLT5pdGVtc1tdIGFycmF5 KS4gIFdlIG1pZ2h0IGFsc28gc2V0CisgKiB2aXNpYmlsaXR5IGluZm8gZm9yIG90aGVyIGl0ZW1z IGZyb20gY2FsbGVyJ3MgYmF0Y2ggbW9yZSBwcm9hY3RpdmVseSB3aGVuCisgKiB0aGF0IG1ha2Vz IHNlbnNlLgorICoKKyAqIFdlIGtlZXAgdHdvIGNvbXBldGluZyBjb25zaWRlcmF0aW9ucyBpbiBi YWxhbmNlIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0bworICogY2hlY2sgYWRkaXRpb25hbCBp dGVtczogdGhlIG5lZWQgdG8ga2VlcCB0aGUgY29zdCBvZiB2aXNpYmlsaXR5IG1hcCBhY2Nlc3MK KyAqIHVuZGVyIGNvbnRyb2wgd2hlbiBtb3N0IGl0ZW1zIHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQg YnkgdGhlIHNjYW4gYW55d2F5CisgKiAoaW1wb3J0YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBv ZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRoZQorICogbmVlZCB0byBub3QgaG9s ZCBvbnRvIGluZGV4IGxlYWYgcGFnZXMgZm9yIHRvbyBsb25nLgorICoKKyAqIE5vdGUgb24gTWVt b3J5IE9yZGVyaW5nIEVmZmVjdHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QgbG9jayB0aGUgdmlzaWJp bGl0eSBtYXAgYnVmZmVyLCBhbmQKKyAqIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQgaGVy ZSBjb3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0CisgKiBjYW4ndCBiZSBzdGFs ZSBlbm91Z2ggdG8gbWF0dGVyLgorICoKKyAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEg Vk0gYml0IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwgYmVjYXVzZQorICogdGhlIHR1cGxl IGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5vdCB2aXNpYmxlLiAgVGhlIHJlYWRp bmcgb2YgdGhlCisgKiBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRo ZSBpbmRleCBidWZmZXIpIGlzIHNlcmlhbGl6ZWQKKyAqIHdpdGggdGhlIGluc2VydCBvZiB0aGUg VElEIGludG8gdGhlIGluZGV4ICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUKKyAqIGlu ZGV4IGJ1ZmZlcikuICBCZWNhdXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRp bmcgdGhlIGluZGV4LAorICogYW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdl IGFjdHMgYXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3ZQorICogYXJlIHN1cmUgdG8gc2VlIHRo ZSBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCisgKgorICog RGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNs ZWFyIG91dCB0aGUgVElEKSwKKyAqIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEg ZGVsZXRlIGlzIG5vdCBzZXJpYWxpemVkIHdpdGggdGhpcyB0ZXN0CisgKiBiZWxvdywgYW5kIHdl IG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzIHNpZ25pZmljYW50bHkgc3RhbGUuICBIb3dldmVyLCB3 ZQorICogZG9uJ3QgY2FyZSBhYm91dCB0aGUgZGVsZXRlIHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhl IHR1cGxlIGlzIHN0aWxsIHZpc2libGUKKyAqIHVudGlsIHRoZSBkZWxldGluZyB0cmFuc2FjdGlv biBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKKyAqIHRyYW5zYWN0 aW9uKS4gIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwgaGF2 ZSBiZWVuCisgKiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xl YXJpbmcgdGhlIGJpdC4gIEFuZCBmb3IgdXMgdG8KKyAqIGhhdmUgYSBzbmFwc2hvdCB0aGF0IGlu Y2x1ZGVzIHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZQorICogaW52 aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVkIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0 aW1lLCBhY3RpbmcgYXMKKyAqIGEgcmVhZCBiYXJyaWVyLgorICoKKyAqIEl0J3Mgd29ydGggZ29p bmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrIHRoZSBW TQorICogYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgor ICovCitzdGF0aWMgdm9pZAoraGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJCQlCYXRjaFJpbmdJdGVt UG9zICpwb3MpCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVh cERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCWludAkJCXBvc0l0ZW0gPSBwb3MtPml0ZW07 CisJaW50CQkJZmlyc3RJdGVtLAorCQkJCWxhc3RJdGVtOworCisJLyogRG8gbm90aGluZyBpZiB3 ZSBhbHJlYWR5IHJlc29sdmVkIHZpc2liaWxpdHkgZm9yIHRoZSBpdGVtLiAqLworCWlmIChiYXRj aC0+aXRlbXNbcG9zSXRlbV0uY2hlY2tlZFZpc2libGUpCisJCXJldHVybjsKKworCS8qIFdlIGJl dHRlciBzdGlsbCBoYXZlIGEgcGluIG9uIGJhdGNoJ3MgaW5kZXggcGFnZSAqLworCUFzc2VydChC dWZmZXJJc1ZhbGlkKGJhdGNoLT5idWYpKTsKKworCS8qIERldGVybWluZSB0aGUgcmFuZ2Ugb2Yg aXRlbXMgdG8gc2V0IHZpc2liaWxpdHkgZm9yICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoYmF0Y2gtPmRpcikpCisJeworCQlmaXJzdEl0ZW0gPSBwb3NJdGVtOworCQlsYXN0SXRlbSA9 IE1pbihiYXRjaC0+bGFzdEl0ZW0sIChwb3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zKSAtIDEp OworCX0KKwllbHNlCisJeworCQlsYXN0SXRlbSA9IHBvc0l0ZW07CisJCWZpcnN0SXRlbSA9IE1h eChiYXRjaC0+Zmlyc3RJdGVtLCAocG9zSXRlbSAtIGhzY2FuLT54c192bV9pdGVtcykgKyAxKTsK Kwl9CisKKwlmb3IgKGludCBpID0gZmlyc3RJdGVtOyBpIDw9IGxhc3RJdGVtOyBpKyspCisJewor CQlCYXRjaE1hdGNoaW5nSXRlbSAqbWl0ZW0gPSAmYmF0Y2gtPml0ZW1zW2ldOworCQlJdGVtUG9p bnRlciB0aWQgPSAmbWl0ZW0tPmhlYXBUaWQ7CisKKwkJbWl0ZW0tPmNoZWNrZWRWaXNpYmxlID0g dHJ1ZTsKKwkJbWl0ZW0tPmFsbFZpc2libGUgPQorCQkJVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVh cFJlbGF0aW9uLAorCQkJCQkJICAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJ CQkJICAgJmhzY2FuLT52bWJ1ZikgIT0gMDsKKwl9CisKKwkvKgorCSAqIEl0J3Mgbm93IHNhZmUg dG8gZHJvcCB0aGUgYmF0Y2gncyBidWZmZXIgcGluLCBhcyB3ZSd2ZSByZXNvbHZlZCB0aGUKKwkg KiB2aXNpYmlsaXR5IHN0YXR1cyBvZiBhbGwgb2YgaXRzIGl0ZW1zLgorCSAqCisJICogSXQncyBl bm91Z2ggdG8gY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IGl0ZW0s IGFzIGFsbAorCSAqIHRoZSBpdGVtcyBpbiBiZXR3ZWVuIGhhdmUgdG8gaGF2ZSB0aGUgdmlzaWJp bGl0eSBzZXQgdG9vLgorCSAqLworCWlmIChiYXRjaC0+aXRlbXNbYmF0Y2gtPmZpcnN0SXRlbV0u Y2hlY2tlZFZpc2libGUgJiYKKwkJYmF0Y2gtPml0ZW1zW2JhdGNoLT5sYXN0SXRlbV0uY2hlY2tl ZFZpc2libGUgJiYKKwkJc2Nhbi0+TVZDQ1NjYW4pCisJeworCQlSZWxlYXNlQnVmZmVyKGJhdGNo LT5idWYpOworCQliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwl9CisKKwkvKgorCSAqIE5l eHQgdGltZSBjaGVjayB2aXNpYmlsaXR5IGZvciB0d2ljZSBhcyBtYW55IGl0ZW1zLiBCdXQgZG9u J3Qgb3ZlcmZsb3cKKwkgKiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoaXMgYmF0Y2ggKGFuZCB0 aHVzIGRvbid0IG92ZXJmbG93IElOVF9NQVgpLgorCSAqLworCWlmIChoc2Nhbi0+eHNfdm1faXRl bXMgPCAoYmF0Y2gtPmxhc3RJdGVtIC0gYmF0Y2gtPmZpcnN0SXRlbSkpCisJCWhzY2FuLT54c192 bV9pdGVtcyAqPSAyOworfQorCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitoZWFwYW1fYmF0 Y2hfcmV0dXJuX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIHNjYW5CYXRj aCwKKwkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MpCit7CisJcGdzdGF0X2NvdW50X2lu ZGV4X3R1cGxlcyhzY2FuLT5pbmRleFJlbGF0aW9uLCAxKTsKKworCWlmIChzY2FuLT54c193YW50 X2l0dXApCisJeworCQloZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5KHNjYW4sIHNjYW5C YXRjaCwgc2NhblBvcyk7CisJCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRj aC0+Y3VyclR1cGxlcyArCisJCQkJCQkJCQkgIHNjYW5CYXRjaC0+aXRlbXNbc2NhblBvcy0+aXRl bV0udHVwbGVPZmZzZXQpOworCX0KKworCS8qCisJICogU2V0IHhzX2hlYXB0aWQgYW5kIHhzX3Zp c2libGUsIHdoaWNoIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgbmVlZHMKKwkgKiAoeHNfdmlz aWJsZSBpc24ndCBuZWVkZWQgd2hlbiAheHNfd2FudF9pdHVwIGJ1dCBzZXQgaXQgY29uc2lzdGVu dGx5KQorCSAqLworCXNjYW4tPnhzX2hlYXB0aWQgPSBzY2FuQmF0Y2gtPml0ZW1zW3NjYW5Qb3Mt Pml0ZW1dLmhlYXBUaWQ7CisJc2Nhbi0+eHNfdmlzaWJsZSA9IHNjYW5CYXRjaC0+aXRlbXNbc2Nh blBvcy0+aXRlbV0uYWxsVmlzaWJsZTsKKworCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKK30K KworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0IC0gZ2V0IHRo ZSBuZXh0IGJhdGNoIG9mIFRJRHMgZnJvbSBhIHNjYW4KKyAqCisgKiBDYWxsZWQgd2hlbiB3ZSBu ZWVkIHRvIGxvYWQgdGhlIG5leHQgYmF0Y2ggb2YgaW5kZXggZW50cmllcyB0byBwcm9jZXNzIGlu CisgKiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBhc3NlcyB1cyBhIGJhdGNoIGFuZCBh IGJhdGNoIHBvc2l0aW9uLCB3aGljaAorICogaGFzIGp1c3QgYmVlbiB1c2VkIHRvIHJlYWQgYWxs IGl0ZW1zIGZyb20gdGhlIGJhdGNoIGluIHRoZSBkaXJlY3Rpb24gcGFzc2VkCisgKiBieSBjYWxs ZXIuCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBiYXRjaCB0byBiZSBwcm9jZXNzZWQgYnkgdGhl IGluZGV4IHNjYW4sIG9yIE5VTEwgd2hlbgorICogdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hlcyBp biB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBEb2VzIG5vdCBhZHZhbmNlCisgKiBjYWxsZXIn cyBiYXRjaCBwb3NpdGlvbjsgdGhhdCBpcyBsZWZ0IHVwIHRvIGNhbGxlci4KKyAqCisgKiBUaGlz IGlzIGFsc28gd2hlcmUgYmF0Y2hlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHNjYW4ncyByaW5nIGJ1 ZmZlci4gIFdlCisgKiBkb24ndCBmcmVlIGFueSBiYXRjaGVzIGhlcmUsIHRob3VnaDsgdGhhdCBp cyBhbHNvIGxlZnQgdXAgdG8gY2FsbGVyLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0 aWMgSW5kZXhTY2FuQmF0Y2gKK2hlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvckJh dGNoLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBO VUxMOworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmIFBHX1VTRURfRk9SX0FTU0VSVFNf T05MWSA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisKKwkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQg dGhhdCBhIHNuYXBzaG90IGlzIHB1c2hlZCBvciByZWdpc3RlcmVkICovCisJQXNzZXJ0KFRyYW5z YWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKKworCWlmICghcHJpb3JCYXRjaCkKKwl7CisJ CS8qIEZpcnN0IGNhbGwgZm9yIHRoZSBzY2FuICovCisJCUFzc2VydChwb3MgPT0gJmJhdGNocmlu Z2J1Zi0+c2NhblBvcyk7CisJfQorCWVsc2UgaWYgKHVubGlrZWx5KHByaW9yQmF0Y2gtPmRpciAh PSBkaXJlY3Rpb24pKQorCXsKKwkJLyoKKwkJICogV2UgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gc2Nh biBkaXJlY3Rpb24gYWNyb3NzIGJhdGNoZXMuICBQcmVwYXJlCisJCSAqIHNjYW4ncyBiYXRjaHJp bmdidWYgc3RhdGUgZm9yIHVzIHRvIGdldCB0aGUgbmV4dCBiYXRjaCBmb3IgdGhlCisJCSAqIG9w cG9zaXRlIHNjYW4gZGlyZWN0aW9uIHRvIHRoZSBvbmUgdXNlZCB3aGVuIHByaW9yQmF0Y2ggd2Fz CisJCSAqIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2guCisJCSAqLworCQl0YWJsZWFtX3V0aWxfYmF0 Y2hfZGlyY2hhbmdlKHNjYW4pOworCisJCS8qIHByaW9yQmF0Y2ggaXMgbm93IGJhdGNocmluZ2J1 ZidzIG9ubHkgYmF0Y2ggKi8KKwkJQXNzZXJ0KHBvcy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2gpOworCQlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAxKTsK Kwl9CisJZWxzZSBpZiAoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgcG9zLT5iYXRjaCAr IDEpKQorCXsKKwkJLyoKKwkJICogTmV4dCBiYXRjaCBhbHJlYWR5IGxvYWRlZCBmb3IgdXMuCisJ CSAqLworCQliYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcG9zLT5iYXRjaCArIDEpOwor CisJCS8qCisJCSAqIEJvdGggYmF0Y2hlcyBtdXN0IGhhdmUgYmVlbiBsb2FkZWQgd2hlbiBtb3Zp bmcgaW4gc2FtZSBzY2FuCisJCSAqIGRpcmVjdGlvbiAob3RoZXJ3aXNlIHRhYmxlYW1fdXRpbF9i YXRjaF9kaXJjaGFuZ2Ugc2hvdWxkIGhhdmUgYmVlbgorCQkgKiBjYWxsZWQgaW5zdGVhZCBvZiBs b2FkaW5nIHRoaXMgbmV4dCBiYXRjaCkKKwkJICovCisJCUFzc2VydChwcmlvckJhdGNoLT5kaXIg PT0gZGlyZWN0aW9uKTsKKwkJQXNzZXJ0KGJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwkJcmV0 dXJuIGJhdGNoOworCX0KKworCS8qCisJICogQXNzZXJ0IHByZWNvbmRpdGlvbnMgZm9yIGNhbGxp bmcgYW1nZXRiYXRjaC4KKwkgKgorCSAqIHByaW9yQmF0Y2ggaGFkIGJldHRlciBiZSBmb3IgdGhl IGxhc3QgdmFsaWQgYmF0Y2ggY3VycmVudGx5IGluIHRoZSByaW5nCisJICogYnVmZmVyIChiYXRj aGVzIG11c3Qgc3RheSBpbiBzY2FuIG9yZGVyKS4gIElmIGl0IGlzbid0IHRoZW4gd2Ugc2hvdWxk CisJICogaGF2ZSBhbHJlYWR5IHJldHVybmVkIHNvbWUgZXhpc3RpbmcgbG9hZGVkIGJhdGNoIGVh cmxpZXIuCisJICovCisJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCUFz c2VydCghcHJpb3JCYXRjaCB8fAorCQkgICAoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA+ IDAgJiYgcHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbiAmJgorCQkJaW5kZXhfc2Nhbl9iYXRj aChzY2FuLCBiYXRjaHJpbmdidWYtPm5leHRCYXRjaCAtIDEpID09IHByaW9yQmF0Y2gpKTsKKwor CS8qCisJICogQmVmb3JlIHdlIGNhbGwgYW1nZXRiYXRjaCBhZ2FpbiwgY2hlY2sgaWYgcHJpb3JC YXRjaCBpcyBhbHJlYWR5IGtub3duCisJICogdG8gYmUgdGhlIGxhc3QgYmF0Y2ggd2l0aCBtYXRj aGluZyBpdGVtcyBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uCisJICovCisJaWYgKHByaW9yQmF0Y2gg JiYKKwkJKChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikgJiYgcHJpb3JCYXRjaC0+ a25vd25FbmRSaWdodCkgfHwKKwkJIChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXJlY3Rpb24p ICYmIHByaW9yQmF0Y2gtPmtub3duRW5kTGVmdCkpKQorCQlyZXR1cm4gTlVMTDsKKworCWJhdGNo ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JC YXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRpcmVjdGlvbik7CisJaWYgKGJhdGNoKQorCXsKKwkJLyog V2UgZ290IHRoZSBiYXRjaCBmcm9tIHRoZSBBTSAqLworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBk aXJlY3Rpb24pOworCisJCS8qIEFwcGVuZCBiYXRjaCB0byB0aGUgZW5kIG9mIHJpbmcgYnVmZmVy L3dyaXRlIGl0IHRvIGJ1ZmZlciBpbmRleCAqLworCQlpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChz Y2FuLCBiYXRjaCk7CisKKwkJLyoKKwkJICogRHJvcCBiYXRjaCdzIGxlYWYgcGFnZSBwaW4gZm9y IHBsYWluIGluZGV4IHNjYW5zLiAgSW5kZXgtb25seSBzY2FucworCQkgKiBkZWxheSBkcm9wcGlu ZyB0aGUgcGluIHVudGlsIGhlYXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkgaGFzCisJCSAq IGNhY2hlZCBhbGwgdmlzaWJpbGl0eSBpbmZvLiAgU2VlIGhlYXBhbV9iYXRjaF9yZXNvbHZlX3Zp c2liaWxpdHkKKwkJICogaGVhZGVyIGNvbW1lbnRzIGZvciBhIGZ1bGwgZXhwbGFuYXRpb24gb2Yg ZWFybHkgcGluIGRyb3BwaW5nLgorCQkgKi8KKwkJQXNzZXJ0KHNjYW4tPk1WQ0NTY2FuID09IElz TVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSk7CisJCWlmIChzY2FuLT5NVkNDU2NhbiAm JiAhc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQlSZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYp OworCQkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJ LyogYW1nZXRiYXRjaCByZXR1cm5lZCBOVUxMICovCisJCWlmIChwcmlvckJhdGNoKQorCQl7CisJ CQkvKgorCQkJICogVGhlcmUgYXJlIG5vIGZ1cnRoZXIgbWF0Y2hlcyB0byBiZSBmb3VuZCBpbiB0 aGUgY3VycmVudCBzY2FuCisJCQkgKiBkaXJlY3Rpb24sIGZvbGxvd2luZyBwcmlvckJhdGNoLiAg UmVtZW1iZXIgdGhhdCBwcmlvckJhdGNoIGlzCisJCQkgKiB0aGUgbGFzdCBiYXRjaCB3aXRoIG1h dGNoaW5nIGl0ZW1zLgorCQkJICovCisJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJl Y3Rpb24pKQorCQkJCXByaW9yQmF0Y2gtPmtub3duRW5kUmlnaHQgPSB0cnVlOworCQkJZWxzZQor CQkJCXByaW9yQmF0Y2gtPmtub3duRW5kTGVmdCA9IHRydWU7CisJCX0KKwl9CisKKwkvKiB4c19o aXR1cCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KKwlBc3NlcnQoIXNj YW4tPnhzX2hpdHVwKTsKKworCXJldHVybiBiYXRjaDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LQorICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCAtIGdldCBuZXh0IFRJRCBmcm9tIGJhdGNo IHJpbmcgYnVmZmVyCisgKgorICogR2V0IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBzY2FuJ3MgYmF0 Y2ggcmluZyBidWZmZXIsIHdoZW4gbW92aW5nIGluIHRoZQorICogZ2l2ZW4gc2NhbiBkaXJlY3Rp b24uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBpbmxpbmUgSXRlbVBvaW50ZXIK K2hlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hI ZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQmF0 Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUJhdGNo UmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOworCUluZGV4U2Nh bkJhdGNoIHNjYW5CYXRjaCA9IE5VTEw7CisKKwkvKiBzY2FuIHNob3VsZCBvbmx5IGJlIHBhdXNl ZCB3aGVuIHRoZXJlJ3Mgbm8gZnJlZSBiYXRjaCBzbG90cyAqLworCUFzc2VydCghc2NhblBvcy0+ dmFsaWQgfHwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFz c2VydChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDAp OworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2FuQmF0 Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQvaW5k ZXggdHVwbGUgZnJvbQorCSAqLworCWlmIChzY2FuUG9zLT52YWxpZCkKKwl7CisJCS8qCisJCSAq IHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGlu IGJhdGNoIHJpbmcKKwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUuCisJCSAqLwor CQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJ CXNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJ CWlmIChpbmRleF9zY2FuX3Bvc19hZHZhbmNlKGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9z KSkKKwkJCXJldHVybiBoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChzY2FuLCBzY2FuQmF0Y2gsIHNj YW5Qb3MpOworCX0KKworCS8qCisJICogRWl0aGVyIHJhbiBvdXQgb2YgaXRlbXMgZnJvbSBvdXIg ZXhpc3Rpbmcgc2NhbkJhdGNoLCBvciBpdCBoYXNuJ3QgYmVlbgorCSAqIGxvYWRlZCB5ZXQgKGJl Y2F1c2UgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgZW50aXJlIHNjYW4pLgor CSAqIFRyeSB0byBhZHZhbmNlIHNjYW5CYXRjaCB0byB0aGUgbmV4dCBiYXRjaCAob3IgZ2V0IHRo ZSBmaXJzdCBiYXRjaCkuCisJICovCisJc2NhbkJhdGNoID0gaGVhcGFtX2JhdGNoX2dldG5leHQo c2NhbiwgZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Qb3MpOworCisJaWYgKCFzY2FuQmF0Y2gp CisJeworCQkvKgorCQkgKiBXZSdyZSBkb25lOyBubyBtb3JlIGJhdGNoZXMgaW4gdGhlIGN1cnJl bnQgc2NhbiBkaXJlY3Rpb24uCisJCSAqCisJCSAqIE5vdGU6IHNjYW5Qb3MgaXMgZ2VuZXJhbGx5 IHN0aWxsIHZhbGlkIGF0IHRoaXMgcG9pbnQuICBUaGUgc2NhbgorCQkgKiBtaWdodCBzdGlsbCBi YWNrIHVwIGluIHRoZSBvdGhlciBkaXJlY3Rpb24uCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwkvKgorCSAqIEFkdmFuY2VkIHNjYW5CYXRjaC4gIE5vdyBwb3NpdGlvbiBzY2FuUG9zIHRv IHRoZSBzdGFydCBvZiBuZXcKKwkgKiBzY2FuQmF0Y2guCisJICovCisJaW5kZXhfc2Nhbl9wb3Nf bmV4dGJhdGNoKGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9zKTsKKwlBc3NlcnQoaW5kZXhf c2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCkgPT0gc2NhbkJhdGNoKTsKKworCS8qCisJ ICogUmVtb3ZlIHRoZSBoZWFkIGJhdGNoIGZyb20gdGhlIGJhdGNoIHJpbmcgYnVmZmVyIChleGNl cHQgd2hlbiB0aGlzIG5ldworCSAqIHNjYW5CYXRjaCBpcyBvdXIgb25seSBvbmUpCisJICovCisJ aWYgKGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoICE9IHNjYW5Qb3MtPmJhdGNoKQorCXsKKwkJSW5k ZXhTY2FuQmF0Y2ggaGVhZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLAorCQkJCQkJCQkJ CQkJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKworCQkvKiBBbHNvIGZyZWUgb2Jzb2xlc2Nl bnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCisJCXRhYmxl YW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CisKKwkJLyogUmVtb3ZlIHRoZSBi YXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAqLworCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCsr OworCX0KKworCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFsd2F5cyBiZSB0aGUgcmlu ZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KKwlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gg PT0gc2NhblBvcy0+YmF0Y2gpOworCUFzc2VydCghaHNjYW4tPnhzX3lpZWxkZWQgJiYgIWhzY2Fu LT54c19wYXVzZWQpOworCisJcmV0dXJuIGhlYXBhbV9iYXRjaF9yZXR1cm5fdGlkKHNjYW4sIHNj YW5CYXRjaCwgc2NhblBvcyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9m ZXRjaF9oZWFwIC0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCisgKgorICogVGhlIHJl c3VsdCBpcyBhIHZpc2libGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJ RCBtb3N0CisgKiByZWNlbnRseSBmZXRjaGVkIGJ5IG91ciBjYWxsZXIgaW4gc2Nhbi0+eHNfaGVh cHRpZCwgb3IgTlVMTCBpZiBubyBtb3JlCisgKiBtYXRjaGluZyB0dXBsZXMgZXhpc3QuICAoVGhl cmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZQorICogb2YgSE9U IGNoYWlucywgYWx0aG91Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBi ZSBpbXBvc3NpYmxlCisgKiBmb3IgbW9yZSB0aGFuIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikK KyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlz IHBpbm5lZC4gIFRoZSBwaW4gbXVzdCBiZQorICogZHJvcHBlZCBlbHNld2hlcmUuCisgKiAtLS0t LS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBib29sCitpbmRleF9mZXRjaF9oZWFwKEluZGV4U2Nh bkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJYm9vbAkJYWxsX2RlYWQgPSBm YWxzZTsKKwlib29sCQlmb3VuZDsKKworCWZvdW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxl KHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCisJCQkJCQkJCQkgc2Nhbi0+ eHNfc25hcHNob3QsIHNsb3QsCisJCQkJCQkJCQkgJnNjYW4tPnhzX2hlYXBfY29udGludWUsICZh bGxfZGVhZCk7CisKKwlpZiAoZm91bmQpCisJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4t PmluZGV4UmVsYXRpb24pOworCisJLyoKKwkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNo YWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCByZW1lbWJlciBpdAorCSAqIGZvciBsYXRl ci4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4gcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlv bGF0ZQorCSAqIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4gUmVsYXRpb25HZXRJbmRl eFNjYW4oKS4KKwkgKi8KKwlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKKwl7CisJ CWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCXsKKwkJCWlmIChhbGxfZGVhZCkKKwkJCQl0YWJs ZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShzY2FuKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8q CisJCQkgKiBUZWxsIGFtZ2V0dHVwbGUtYmFzZWQgaW5kZXggQU0gdG8ga2lsbCBpdHMgZW50cnkg Zm9yIHRoYXQgVElECisJCQkgKiAodGhpcyB3aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0IGNh bGwsIGluIGluZGV4X2dldG5leHRfdGlkKQorCQkJICovCisJCQlzY2FuLT5raWxsX3ByaW9yX3R1 cGxlID0gYWxsX2RlYWQ7CisJCX0KKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0KKyAqCQloZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRoZSBuZXh0 IHR1cGxlIGZyb20gYSBzY2FuCisgKgorICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUg c2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCisgKiBmb3VuZCwg ZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNs b3QuCisgKgorICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUg bGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGNh bGwgaGVyZSAob3IgYnkgYSBsYXRlciBjYWxsIHRvIGluZGV4X2VuZHNjYW4pLgorICoKKyAqIE5v dGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hl Y2tpbmcgb2YgdGhlCisgKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhh dCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRv IGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0t CisgKi8KK3N0YXRpYyBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIFR1cGxlVGFibGVTbG90 ICpzbG90KQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBE YXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlJdGVtUG9pbnRlciB0aWQgPSBOVUxMOworCisJ Zm9yICg7OykKKwl7CisJCWlmICghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKKwkJeworCQkJLyoK KwkJCSAqIFNjYW5zIHRoYXQgdXNlIGFuIGFtZ2V0YmF0Y2ggaW5kZXggQU0gYXJlIG1hbmFnZWQg YnkgaGVhcGFtJ3MKKwkJCSAqIGluZGV4IHNjYW4gbWFuYWdlci4gIFRoaXMgZ2l2ZXMgaGVhcGFt IHRoZSBhYmlsaXR5IHRvIHJlYWQgaGVhcAorCQkJICogdHVwbGVzIGluIGEgZmxleGlibGUgb3Jk ZXIgdGhhdCBpcyBhdHR1bmVkIHRvIGJvdGggY29zdHMgYW5kCisJCQkgKiBiZW5lZml0cyBvbiB0 aGUgaGVhcGFtIGFuZCB0YWJsZSBBTSBzaWRlLgorCQkJICoKKwkJCSAqIFNjYW5zIHRoYXQgdXNl IGFuIGFtZ2V0dHVwbGUgaW5kZXggQU0gc2ltcGx5IGNhbGwgdGhyb3VnaCB0bworCQkJICogaW5k ZXhfZ2V0bmV4dF90aWQgdG8gZ2V0IHRoZSBuZXh0IFRJRCByZXR1cm5lZCBieSBpbmRleCBBTS4g VGhlCisJCQkgKiBwcm9ncmVzcyBvZiB0aGUgc2NhbiB3aWxsIGJlIHVuZGVyIHRoZSBjb250cm9s IG9mIGluZGV4IEFNICh3ZQorCQkJICoganVzdCBwYXNzIGl0IHRocm91Z2ggYSBkaXJlY3Rpb24g dG8gZ2V0IHRoZSBuZXh0IHR1cGxlIGluKSwgc28KKwkJCSAqIHdlIGNhbm5vdCByZW9yZGVyIGFu eSB3b3JrLgorCQkJICovCisJCQlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQkJCXRpZCA9IGhl YXBhbV9iYXRjaF9nZXRuZXh0X3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uKTsKKwkJCWVsc2UK KwkJCXsKKwkJCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCisJ CQkJaWYgKHRpZCAhPSBOVUxMICYmIHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJCQkJc2Nhbi0+eHNf dmlzaWJsZSA9IFZNX0FMTF9WSVNJQkxFKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJCQkJ CQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCQkJCQkgICZoc2Nh bi0+dm1idWYpOworCQkJfQorCisJCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywg d2UncmUgZG9uZSAqLworCQkJaWYgKHRpZCA9PSBOVUxMKQorCQkJCWJyZWFrOworCQl9CisKKwkJ LyoKKwkJICogRmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3Ig dGhpcyBpbmRleCBlbnRyeS4KKwkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBh cm91bmQgYW5kIGdyYWIgdGhlIG5leHQgVElEIGZyb20KKwkJICogdGhlIGluZGV4LgorCQkgKi8K KwkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOworCQlpZiAo IXNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJLyogUGxhaW4gaW5kZXggc2NhbiAqLworCQkJ aWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0K KwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogSW5kZXgtb25seSBzY2FuLgorCQkJICoKKwkJCSAq IFdlIGNhbiBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAg cGFnZSBvbgorCQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVy eWJvZHkuICBJbiBhbnkgY2FzZSwKKwkJCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUgbm90 IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhCisJCQkgKiBzb3VyY2UuCisJCQkgKi8KKwkJCWlm ICghc2Nhbi0+eHNfdmlzaWJsZSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFJhdHMsIHdlIGhhdmUg dG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCQkgKi8KKwkJCQlpZiAo c2Nhbi0+aW5zdHJ1bWVudCkKKwkJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzKys7 CisKKwkJCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCisJCQkJCWNvbnRpbnVl OwkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBlbnRyeSAqLworCisJCQkJRXhl Y0NsZWFyVHVwbGUoc2xvdCk7CisKKwkJCQkvKgorCQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMg YXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGluZGV4LW9ubHkKKwkJCQkgKiBzY2Fucywgc28g dGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVAorCQkJCSAq IGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgT3RoZXIgY2FsbGVy cworCQkJCSAqIChjdXJyZW50bHkgb25seSBzZWxmdW5jcy5jKSB1c2UgU25hcHNob3ROb25WYWN1 dW1hYmxlLCBhbmQKKwkJCQkgKiB3YW50IHVzIHRvIGFzc3VtZSB0aGF0IGp1c3QgaGF2aW5nIG9u ZSB2aXNpYmxlIHR1cGxlIGluIHRoZQorCQkJCSAqIGhvdCBjaGFpbiBpcyBhbHdheXMgZ29vZCBl bm91Z2guCisJCQkJICovCisJCQkJQXNzZXJ0KCEoc2Nhbi0+eHNfaGVhcF9jb250aW51ZSAmJgor CQkJCQkJIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCisJCQkJLyoKKwkJ CQkgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHdlIGFyZSBob2xkaW5nIGEgcGluIG9uIHRoZSBoZWFw IHBhZ2UsCisJCQkJICogYXMgcmVjb3JkZWQgaW4gSW5kZXhGZXRjaEhlYXBEYXRhLnhzX2NidWYu ICBXZSBjb3VsZAorCQkJCSAqIHJlbGVhc2UgdGhhdCBwaW4gbm93LCBidXQgaXQncyBub3QgY2xl YXIgd2hldGhlciBpdCdzIGEgd2luCisJCQkJICogdG8gZG8gc28uICBUaGUgbmV4dCBpbmRleCBl bnRyeSBtaWdodCByZXF1aXJlIGEgdmlzaXQgdG8KKwkJCQkgKiB0aGUgc2FtZSBoZWFwIHBhZ2Uu CisJCQkJICovCisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBkaWRuJ3Qg YWNjZXNzIHRoZSBoZWFwLCBzbyB3ZSdsbCBuZWVkIHRvIHRha2UgYQorCQkJCSAqIHByZWRpY2F0 ZSBsb2NrIGV4cGxpY2l0bHksIGFzIGlmIHdlIGhhZC4gIEZvciBub3cgd2UgZG8KKwkJCQkgKiB0 aGF0IGF0IHBhZ2UgbGV2ZWwuCisJCQkJICovCisJCQkJUHJlZGljYXRlTG9ja1BhZ2UoaHNjYW4t PnhzX2Jhc2UucmVsLAorCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwK KwkJCQkJCQkJICBzY2FuLT54c19zbmFwc2hvdCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZXR1 cm4gbWF0Y2hpbmcgaW5kZXggdHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19pdHVwIChvciByZXR1 cm4KKwkJCSAqIG1hdGNoaW5nIGhlYXAgdHVwbGUgbm93IHNldCBpbiBzY2FuLT54c19oaXR1cCku CisJCQkgKgorCQkJICogTm90ZTogd2Ugd29uJ3QgdXN1YWxseSBoYXZlIGZldGNoZWQgYSBoZWFw IHR1cGxlIGludG8gY2FsbGVyJ3MKKwkJCSAqIHRhYmxlIHNsb3QuICBUaGlzIGlzIHBlciB0aGUg dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNvbnRyYWN0CisJCQkgKiBmb3Igc2Nhbi0+eHNfd2Fu dF9pdHVwIGNhbGxlcnMuCisJCQkgKi8KKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0 dXJuIGZhbHNlOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENhbGxiYWNrcyBmb3Igbm9u LW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzIGZvciBoZWFwIEFNCkBA IC03NTMsNyArMTMwMiw4IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0 aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJ aGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwg T2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxMLCAwLCAwKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhf YmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBmYWxzZSwgU25hcHNob3RBbnksCisJCQkJCQkJ CQlOVUxMLCAwLCAwKTsKIAkJaW5kZXhfcmVzY2FuKGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwg MCk7CiAJfQogCWVsc2UKQEAgLTc5MCw3ICsxMzQwLDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlf Zm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24gTmV3SGVhcCwKIAogCQlpZiAo aW5kZXhTY2FuICE9IE5VTEwpCiAJCXsKLQkJCWlmICghaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4 U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQkJaWYgKCFoZWFwYW1faW5kZXhf Z2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkJ ICAgc2xvdCkpCiAJCQkJYnJlYWs7CiAKIAkJCS8qIFNpbmNlIHdlIHVzZWQgbm8gc2NhbiBrZXlz LCBzaG91bGQgbmV2ZXIgbmVlZCB0byByZWNoZWNrICovCkBAIC0yNjQ3LDYgKzMxOTgsNyBAQCBz dGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4X2Zl dGNoX2JlZ2luID0gaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9yZXNl dCA9IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFt X2luZGV4X2ZldGNoX2VuZCwKKwkuaW5kZXhfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X2dl dG5leHRfc2xvdCwKIAkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFwYW1faW5kZXhfZmV0Y2hfdHVw bGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2luc2VydCwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9NYWtlZmlsZQppbmRleCA2ZjJlMzA2MWEuLmU2ZDY4MWI0MCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBPQkpTID0gXAogCWFtYXBpLm8gXAogCWFt dmFsaWRhdGUubyBcCiAJZ2VuYW0ubyBcCi0JaW5kZXhhbS5vCisJaW5kZXhhbS5vIFwKKwlpbmRl eGJhdGNoLm8KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYwppbmRleCBlZmEwMDcwMzAuLjgzYjY2MzM1OSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2FtYXBpLmMKQEAgLTU1LDYgKzU1LDEwIEBAIEdldEluZGV4QW1Sb3V0aW5l KE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJvdXRpbmUtPmFtcmVzY2FuICE9IE5VTEwpOwogCUFz c2VydChyb3V0aW5lLT5hbWVuZHNjYW4gIT0gTlVMTCk7CiAKKwkvKiBBc3NlcnQgdGhhdCBBTSBk b2Vzbid0IGhhdmUgYW4gaW52YWxpZCBjb21iaW5hdGlvbiBvZiBjYWxsYmFja3MgKi8KKwlBc3Nl cnQoKHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCkgPT0gKHJvdXRpbmUtPmFtZnJlZWJhdGNo ICE9IE5VTEwpKTsKKwlBc3NlcnQocm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMIHx8IHJvdXRp bmUtPmFtcG9zcmVzZXQgPT0gTlVMTCk7CisKIAlyZXR1cm4gcm91dGluZTsKIH0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvZ2VuYW0uYwppbmRleCA1ZTg5Yjg2YTYuLjE4ZGNjZDNjOSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2dlbmFtLmMKQEAgLTg5LDYgKzg5LDggQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVs YXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNjYW4tPnhz X3NuYXBzaG90ID0gSW52YWxpZFNuYXBzaG90OwkvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRo aXMgKi8KIAlzY2FuLT5udW1iZXJPZktleXMgPSBua2V5czsKIAlzY2FuLT5udW1iZXJPZk9yZGVy QnlzID0gbm9yZGVyYnlzOworCXNjYW4tPnVzZWJhdGNocmluZyA9IGZhbHNlOyAvKiBzZXQgbGF0 ZXIgZm9yIGFtZ2V0YmF0Y2ggY2FsbGVycyAqLworCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGZhbHNl OyAvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAogCS8qCiAJICogV2UgYWxsb2Nh dGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQgaXQgd29uJ3QgZ2V0IGZpbGxlZCB1bnRpbCBhbXJl c2Nhbi4KQEAgLTEwMiw4ICsxMDQsNiBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBp bmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJZWxzZQogCQlzY2FuLT5v cmRlckJ5RGF0YSA9IE5VTEw7CiAKLQlzY2FuLT54c193YW50X2l0dXAgPSBmYWxzZTsgLyogbWF5 IGJlIHNldCBsYXRlciAqLwotCiAJLyoKIAkgKiBEdXJpbmcgcmVjb3Zlcnkgd2UgaWdub3JlIGtp bGxlZCB0dXBsZXMgYW5kIGRvbid0IGJvdGhlciB0byBraWxsIHRoZW0KIAkgKiBlaXRoZXIuIFdl IGRvIHRoaXMgYmVjYXVzZSB0aGUgeG1pbiBvbiB0aGUgcHJpbWFyeSBub2RlIGNvdWxkIGVhc2ls eSBiZQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHN5c3RhYmxlX2JlZ2luc2NhbihSZWxhdGlvbiBoZWFw UmVsYXRpb24sCiAJCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4gaW5kZXgiKTsKIAkJ fQogCi0JCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaXJl bCwKKwkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpcmVs LCBmYWxzZSwKIAkJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAkJaW5kZXhf cmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJc3lzc2Nh bi0+c2NhbiA9IE5VTEw7CkBAIC01MTcsNyArNTE3LDggQEAgc3lzdGFibGVfZ2V0bmV4dChTeXNT Y2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewotCQlpZiAoaW5kZXhf Z2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc3lzc2Nh bi0+c2xvdCkpCisJCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4s IEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QpKQogCQl7CiAJ CQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03MTUsNyArNzE2LDcgQEAgc3lzdGFibGVfYmVnaW5z Y2FuX29yZGVyZWQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCWlmIChUcmFuc2FjdGlvbklkSXNW YWxpZChDaGVja1hpZEFsaXZlKSkKIAkJYnN5c3NjYW4gPSB0cnVlOwogCi0Jc3lzc2Nhbi0+aXNj YW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLAorCXN5c3Nj YW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwg ZmFsc2UsCiAJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAlpbmRleF9yZXNj YW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwogCXN5c3NjYW4tPnNj YW4gPSBOVUxMOwpAQCAtNzM0LDcgKzczNSw3IEBAIHN5c3RhYmxlX2dldG5leHRfb3JkZXJlZChT eXNTY2FuRGVzYyBzeXNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFwVHVwbGUJ aHR1cCA9IE5VTEw7CiAKIAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4X2dldG5l eHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwlpZiAo dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3Nj YW4tPnNsb3QpKQogCQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2FuLT5zbG90 LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4dCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNGVkMDUwOGM2Li5lMzVkNmNmNDIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBAQAogICoJCWluZGV4 X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2FuCiAgKgkJ aW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBvZiBhbiBp bmRleAogICoJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwgaW5kZXgg c2NhbgotICoJCWluZGV4X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2Nh bgotICoJCWluZGV4X2ZldGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxl Ci0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2Fu CisgKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFNIGhlbHBlciByb3V0 aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNjYW4KICAq CQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXggdHVwbGVzCiAgKgkJ aW5kZXhfdmFjdXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4gaW5kZXgK QEAgLTI1NSw2ICsyNTMsNyBAQCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRleFJl bGF0aW9uLAogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwKIAkJCQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCWJvb2wgeHNfd2FudF9pdHVw LAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAq aW5zdHJ1bWVudCwKIAkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMpCkBAIC0yODEsNyArMjgw LDEzIEBAIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICovCiAJc2Nh bi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOwogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25h cHNob3Q7CisJc2Nhbi0+TVZDQ1NjYW4gPSBJc01WQ0NTbmFwc2hvdChzbmFwc2hvdCk7CiAJc2Nh bi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CisJc2Nhbi0+eHNfd2FudF9pdHVwID0geHNfd2Fu dF9pdHVwOworCXNjYW4tPnVzZWJhdGNocmluZyA9IGZhbHNlOworCisJaWYgKGluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJCWluZGV4X2JhdGNoc2Nhbl9pbml0 KHNjYW4pOwogCiAJLyogcHJlcGFyZSB0byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUg Ki8KIAlzY2FuLT54c19oZWFwZmV0Y2ggPSB0YWJsZV9pbmRleF9mZXRjaF9iZWdpbihoZWFwUmVs YXRpb24pOwpAQCAtMzEyLDYgKzMxNyw3IEBAIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoUmVsYXRp b24gaW5kZXhSZWxhdGlvbiwKIAkgKiB1cCBieSBSZWxhdGlvbkdldEluZGV4U2Nhbi4KIAkgKi8K IAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4tPk1WQ0NTY2FuID0gSXNNVkND U25hcHNob3Qoc25hcHNob3QpOwogCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OwogCiAJ cmV0dXJuIHNjYW47CkBAIC0zODAsNiArMzg2LDEyIEBAIGluZGV4X3Jlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4sCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5 ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwogCisJaWYgKHNjYW4tPnVzZWJh dGNocmluZykKKwl7CisJCUFzc2VydCghc2Nhbi0+YmF0Y2hyaW5nYnVmLmRvbmUpOworCQlpbmRl eF9iYXRjaHNjYW5fcmVzZXQoc2NhbiwgdHJ1ZSk7CisJfQorCiAJc2Nhbi0+aW5kZXhSZWxhdGlv bi0+cmRfaW5kYW0tPmFtcmVzY2FuKHNjYW4sIGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRl cmJ5cywgbm9yZGVyYnlzKTsKIH0KQEAgLTM5NCw2ICs0MDYsMTAgQEAgaW5kZXhfZW5kc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9DSEVDS1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURVUkUo YW1lbmRzY2FuKTsKIAorCS8qIENsZWFudXAgYmF0Y2hpbmcsIHNvIHRoYXQgdGhlIEFNIGNhbiBy ZWxlYXNlIHBpbnMgYW5kIHNvIG9uLiAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCWlu ZGV4X2JhdGNoc2Nhbl9lbmQoc2Nhbik7CisKIAkvKiBSZWxlYXNlIHJlc291cmNlcyAobGlrZSBi dWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0 Y2gpCiAJewpAQCAtNDIyLDI0ICs0MzgsMjUgQEAgdm9pZAogaW5kZXhfbWFya3BvcyhJbmRleFNj YW5EZXNjIHNjYW4pCiB7CiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1t YXJrcG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbXBvc3Jlc2V0KTsKIAotCXNjYW4tPmlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbW1hcmtwb3Moc2Nhbik7CisJLyogT25seSBhbWdldGJh dGNoIGluZGV4IEFNcyBzdXBwb3J0IG1hcmsgYW5kIHJlc3RvcmUgKi8KKwlpbmRleF9iYXRjaHNj YW5fbWFya19wb3Moc2Nhbik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlpbmRleF9y ZXN0cnBvcwktIHJlc3RvcmUgYSBzY2FuIHBvc2l0aW9uCiAgKgotICogTk9URTogdGhpcyBvbmx5 IHJlc3RvcmVzIHRoZSBpbnRlcm5hbCBzY2FuIHN0YXRlIG9mIHRoZSBpbmRleCBBTS4gIFNlZQot ICogY29tbWVudHMgZm9yIEV4ZWNSZXN0clBvcygpLgorICogTk9URTogdGhpcyBvbmx5IHJlc3Rv cmVzIHRoZSBiYXRjaCBwb3NpdGlvbmFsIHN0YXRlIHNoYXJlZCBieSB0aGUgdGFibGUgYW5kCisg KiBpbmRleCBBTXMuICBTZWUgY29tbWVudHMgZm9yIEV4ZWNSZXN0clBvcygpLgogICoKICAqIE5P VEU6IEZvciBoZWFwLCBpbiB0aGUgcHJlc2VuY2Ugb2YgSE9UIGNoYWlucywgbWFyay9yZXN0b3Jl IG9ubHkgd29ya3MKICAqIGNvcnJlY3RseSBpZiB0aGUgc2NhbidzIHNuYXBzaG90IGlzIE1WQ0Mt c2FmZTsgdGhhdCBlbnN1cmVzIHRoYXQgdGhlcmUncyBhdAogICogbW9zdCBvbmUgcmV0dXJuYWJs ZSB0dXBsZSBpbiBlYWNoIEhPVCBjaGFpbiwgYW5kIHNvIHJlc3RvcmluZyB0aGUgcHJpb3IKLSAq IHN0YXRlIGF0IHRoZSBncmFudWxhcml0eSBvZiB0aGUgaW5kZXggQU0gaXMgc3VmZmljaWVudC4g IFNpbmNlIHRoZSBvbmx5Ci0gKiBjdXJyZW50IHVzZXIgb2YgbWFyay9yZXN0b3JlIGZ1bmN0aW9u YWxpdHkgaXMgbm9kZU1lcmdlam9pbi5jLCB0aGlzCi0gKiBlZmZlY3RpdmVseSBtZWFucyB0aGF0 IG1lcmdlLWpvaW4gcGxhbnMgb25seSB3b3JrIGZvciBNVkNDIHNuYXBzaG90cy4gIFRoaXMKLSAq IGNvdWxkIGJlIGZpeGVkIGlmIG5lY2Vzc2FyeSwgYnV0IGZvciBub3cgaXQgc2VlbXMgdW5pbXBv cnRhbnQuCisgKiBzdGF0ZSBhdCB0aGUgc2NhbiBpdGVtIGdyYW51bGFyaXR5IGlzIHN1ZmZpY2ll bnQuICBTaW5jZSB0aGUgb25seSBjdXJyZW50CisgKiB1c2VyIG9mIG1hcmsvcmVzdG9yZSBmdW5j dGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpvaW4uYywgdGhpcyBlZmZlY3RpdmVseQorICogbWVhbnMg dGhhdCBtZXJnZS1qb2luIHBsYW5zIG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMuICBUaGlz IGNvdWxkIGJlCisgKiBmaXhlZCBpZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0IHNlZW1zIHVu aW1wb3J0YW50LgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCkBAIC00NDgsMTYgKzQ2 NSwxNyBAQCBpbmRleF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KElzTVZD Q1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSk7CiAKIAlTQ0FOX0NIRUNLUzsKLQlDSEVDS19T Q0FOX1BST0NFRFVSRShhbXJlc3RycG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWdldGJh dGNoKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbXBvc3Jlc2V0KTsKIAogCS8qIHJlbGVhc2Ug cmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYg KHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNf aGVhcGZldGNoKTsKIAotCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNh ZmV0eSAqLwotCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKKwkvKiBhbHNvIG5vdGlm eSB0YWJsZSBBTSBhbmQgaW5kZXggQU0gKi8KKwlpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3Mo c2Nhbik7CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1yZXN0cnBvcyhzY2Fu KTsKKwlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIH0K IAogLyoKQEAgLTU3OSw2ICs1OTcsMTIgQEAgaW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuKQogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4X2ZldGNo X3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQor CXsKKwkJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYuZG9uZSk7CisJCWluZGV4X2JhdGNoc2Nh bl9yZXNldChzY2FuLCB0cnVlKTsKKwl9CisKIAkvKiBhbXBhcmFsbGVscmVzY2FuIGlzIG9wdGlv bmFsOyBhc3N1bWUgbm8tb3AgaWYgbm90IHByb3ZpZGVkIGJ5IEFNICovCiAJaWYgKHNjYW4tPmlu ZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuICE9IE5VTEwpCiAJCXNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBhcmFsbGVscmVzY2FuKHNjYW4pOwpAQCAtNTkx LDYgKzYxNSw3IEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKICAq LwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXBy ZWwsIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJIGJvb2wgeHNfd2FudF9pdHVwLAogCQkJCQkJ IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCSBpbnQgbmtleXMs IGludCBub3JkZXJieXMsCiAJCQkJCQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuKQpAQCAt NjEyLDcgKzYzNywxMiBAQCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJl bCwgUmVsYXRpb24gaW5kZXhyZWwsCiAJICovCiAJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcHJl bDsKIAlzY2FuLT54c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4tPk1WQ0NTY2FuID0gSXNN VkNDU25hcHNob3Qoc25hcHNob3QpOwogCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50Owor CXNjYW4tPnhzX3dhbnRfaXR1cCA9IHhzX3dhbnRfaXR1cDsKKworCWlmIChpbmRleHJlbC0+cmRf aW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJaW5kZXhfYmF0Y2hzY2FuX2luaXQoc2Nhbik7 CiAKIAkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwogCXNj YW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwpOwpAQCAt NjIxLDEwICs2NTEsMTQgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXBy ZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBpbmRl eF9nZXRuZXh0X3RpZCAtIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqIGluZGV4X2dl dG5leHRfdGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKICAqCiAgKiBUaGUgcmVzdWx0IGlzIHRo ZSBuZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCiAgKiBvciBOVUxMIGlmIG5vIG1v cmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgorICoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2Fs bGVkIGJ5IHRhYmxlIEFNJ3MgaW5kZXhfZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uLAorICog YW5kIG9ubHkgZ2l2ZW4gYW4gaW5kZXggQU0gdGhhdCBzdXBwb3J0cyB0aGUgc2luZ2xlLXR1cGxl IGFtZ2V0dHVwbGUKKyAqIGludGVyZmFjZS4KICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogSXRl bVBvaW50ZXIKQEAgLTY2Nyw5NyArNzAxLDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlyZXR1cm4gJnNjYW4tPnhzX2hl YXB0aWQ7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9mZXRjaF9oZWFwIC0g Z2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgotICogVGhlIHJlc3VsdCBpcyBhIHZp c2libGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0Ci0gKiBy ZWNlbnRseSBmZXRjaGVkIGJ5IGluZGV4X2dldG5leHRfdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUg bWF0Y2hpbmcgdHVwbGVzCi0gKiBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBt YXRjaGluZyB0dXBsZSBiZWNhdXNlIG9mIEhPVCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3aGVuIHVz aW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIG1vcmUgdGhh bgotICogb25lIHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBi dWZmZXIgY29udGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkICh0aGUgcGluIHdpbGwgYmUK LSAqIGRyb3BwZWQgaW4gYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hl YXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3Qg Y2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAq IHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3 ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkg aW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5k ZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQot ewotCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9IHRh YmxlX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0 aWQsCi0JCQkJCQkJCQlzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZzY2FuLT54 c19oZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQpOwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0YXRfY291 bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0aW9uKTsKLQotCS8qCi0JICogSWYgd2Ugc2Nh bm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBp bmRleAotCSAqIEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRh a2UgZWZmZWN0IGluIHRoZSBuZXh0Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRu ZXh0X3RpZCkuICBXZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVz ZSBpdCBtYXkgdmlvbGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVs YXRpb25HZXRJbmRleFNjYW4oKS4KLQkgKi8KLQlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNv dmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJuIGZv dW5kOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90IC0g Z2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCi0gKgotICogVGhlIHJlc3VsdCBpcyB0cnVl IGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2Fz Ci0gKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUg c3BlY2lmaWVkIHNsb3QuCi0gKgotICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZl ciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVkIGJ5 IGEgZnV0dXJlIGluZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2Vu ZHNjYW4KLSAqIGNhbGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhz X3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYg cmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQot ICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFs IGNhc2UuCi0gKiAtLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2dldG5leHRfc2xv dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxl U2xvdCAqc2xvdCkKLXsKLQlmb3IgKDs7KQotCXsKLQkJaWYgKCFzY2FuLT54c19oZWFwX2NvbnRp bnVlKQotCQl7Ci0JCQlJdGVtUG9pbnRlciB0aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhl IG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChz Y2FuLCBkaXJlY3Rpb24pOwotCi0JCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywg d2UncmUgZG9uZSAqLwotCQkJaWYgKHRpZCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCi0JCQlBc3Nl cnQoSXRlbVBvaW50ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0KLQkJ LyoKLQkJICogRmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3Ig dGhpcyBpbmRleCBlbnRyeS4KLQkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBh cm91bmQgYW5kIGdyYWIgdGhlIG5leHQgVElEIGZyb20KLQkJICogdGhlIGluZGV4LgotCQkgKi8K LQkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlpZiAo aW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJl dHVybiBmYWxzZTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dldGJpdG1h cCAtIGdldCBhbGwgdHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwLi5mNDRiZjk3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhiYXRjaC5jCkBAIC0wLDAgKzEsNjcxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBpbmRleGJhdGNoLmMKKyAqCSAgQmF0Y2gtYmFzZWQgaW5kZXggc2NhbiBpbmZyYXN0 cnVjdHVyZSBmb3IgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgorICoKKyAqIFRoaXMgbW9kdWxl IHByb3ZpZGVzIHRoZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBiYXRjaC1iYXNlZCBpbmRleCBz Y2FucywKKyAqIHdoaWNoIGFsbG93IGluZGV4IEFNcyB0byByZXR1cm4gbXVsdGlwbGUgbWF0Y2hp bmcgVElEcyBwZXIgcGFnZSBpbiBhIHNpbmdsZQorICogY2FsbC4gIFRoZSBiYXRjaCByaW5nIGJ1 ZmZlciBpcyBtYW5hZ2VkIGJ5IHRoZSB0YWJsZSBBTSwgd2l0aCBoZWxwIGZyb20gdXMsCisgKiBh bmQgd2l0aCBoZWxwIGZyb20gdGhlIHJpbmcgYnVmZmVyIGlubGluZSBmdW5jdGlvbnMgaW4gcmVs c2Nhbi5oLiAgVGhpcworICogYXBwcm9hY2ggZW5hYmxlcyBlZmZpY2llbnQgcHJlZmV0Y2hpbmcg b2YgdGFibGUgQU0gYmxvY2tzIGR1cmluZyBvcmRlcmVkCisgKiBpbmRleCBzY2Fucy4KKyAqCisg KiBUaGUgcmluZyBidWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2Ugb3JkZXIu CisgKgorICogVGhlcmUncyB0aHJlZSB0eXBlcyBvZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGU6 CisgKgorICogMS4gQ29yZSBiYXRjaCBzY2FuIGxpZmVjeWNsZSAoaW5kZXhfYmF0Y2hzY2FuXyop OiBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UKKyAqICAgIGJhdGNoIHNjYW4gc3RhdGUgaW5jbHVkaW5n IGluaXRpYWxpemF0aW9uLCByZXNldCwgY2xlYW51cCwgYW5kIHRoZQorICogICAgbWFyay9yZXN0 b3JlIG9wZXJhdGlvbnMgbmVlZGVkIGZvciBtZXJnZSBqb2lucy4gIENhbGxlZCBieSBpbmRleGFt LmMKKyAqICAgIHJvdXRpbmVzIHRoYXQgbWFuYWdlIGluZGV4IHNjYW5zIG9uIGJlaGFsZiBvZiB0 aGUgY29yZSBleGVjdXRvci4KKyAqCisgKiAyLiBUYWJsZSBBTSB1dGlsaXRpZXMgKHRhYmxlYW1f dXRpbF8qKTogSGVscGVyIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGFibGUKKyAqICAgIEFNcyBkdXJp bmcgYW1nZXRiYXRjaCBpbmRleCBzY2Fucy4gIFRoZXNlIGhhbmRsZSBjcm9zcy1iYXRjaCBkaXJl Y3Rpb24KKyAqICAgIGNoYW5nZXMsIHJlY29yZGluZyBkZWFkIGl0ZW1zIGZvciBsYXRlciBMUF9E RUFEIG1hcmtpbmcsIGFuZCBmcmVlaW5nCisgKiAgICBiYXRjaGVzIHdoZW4gdGhlIHRhYmxlIEFN IGlzIGRvbmUgd2l0aCB0aGVtLgorICoKKyAqIDMuIEluZGV4IEFNIHV0aWxpdGllcyAoaW5kZXhh bV91dGlsXyopOiBIZWxwZXIgZnVuY3Rpb25zIGNhbGxlZCBieSBpbmRleAorICogICAgQU1zIHRo YXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4gIFRoZXNlIG1hbmFnZSBiYXRj aAorICogICAgYWxsb2NhdGlvbiwgaW5kZXggcGFnZSBidWZmZXIgbG9jayByZWxlYXNlLCBhbmQg YmF0Y2ggbWVtb3J5IHJlY3ljbGluZy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9pbmRleGJhdGNoLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFj Y2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ludC5oIgorI2luY2x1ZGUgImxpYi9x dW5pcXVlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKKworc3RhdGljIGludAliYXRj aF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpOworCisvKgorICog U2V0cyB1cCB0aGUgYmF0Y2ggcmluZyBidWZmZXIgc3RydWN0dXJlIGZvciB1c2UgYnkgYW4gaW5k ZXggc2Nhbi4KKyAqCisgKiBPbmx5IGNhbGwgaGVyZSB3aGVuIGFsbCBvZiB0aGUgaW5kZXggcmVs YXRlZCBmaWVsZHMgaW4gJ3NjYW4nIHdlcmUgYWxyZWFkeQorICogaW5pdGlhbGl6ZWQuCisgKi8K K3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBC b3RoIGFtZ2V0YmF0Y2ggYW5kIGFtZnJlZWJhdGNoIG11c3QgYmUgcHJlc2VudCB0b2dldGhlciAq LworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBO VUxMKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZnJlZWJhdGNo ICE9IE5VTEwpOworCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsK KwlzY2FuLT5iYXRjaHJpbmdidWYubWFya1Bvcy52YWxpZCA9IGZhbHNlOworCisJc2Nhbi0+YmF0 Y2hyaW5nYnVmLm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRj aCA9IDA7CS8qIGluaXRpYWwgaGVhZCBiYXRjaCAqLworCXNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0 QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoIHN0YXJ0cyBlbXB0eSAqLworCXNjYW4tPmJhdGNo cmluZ2J1Zi5kb25lID0gZmFsc2U7CisJbWVtc2V0KCZzY2FuLT5iYXRjaHJpbmdidWYuY2FjaGUs IDAsIHNpemVvZihzY2FuLT5iYXRjaHJpbmdidWYuY2FjaGUpKTsKKworCXNjYW4tPnVzZWJhdGNo cmluZyA9IHRydWU7Cit9CisKKy8qCisgKiBSZXNldCBzdGF0ZSB1c2VkIGZvciBhIGJhdGNoIGlu ZGV4IHNjYW4KKyAqCisgKiBSZXNldHMgYWxsIGxvYWRlZCBiYXRjaGVzIGluIHRoZSByaW5nIGJ1 ZmZlciwgYW5kIHJlc2V0cyB0aGUgcmVhZCBwb3NpdGlvbgorICogdG8gdGhlIGluaXRpYWwgc3Rh dGUgKG9yIGp1c3QgaW5pdGlhbGl6ZSByaW5nIGJ1ZmZlciBzdGF0ZSkuICBXaGVuCisgKiAnY29t cGxldGUnIGlzIHRydWUsIGFsc28gZnJlZXMgdGhlIHNjYW4ncyBtYXJrZWQgYmF0Y2ggKGlmIGFu eSksIHdoaWNoIGlzCisgKiB1c2VmdWwgd2hlbiBlbmRpbmcgYW4gYW1nZXRiYXRjaC1iYXNlZCBp bmRleCBzY2FuLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVz YyBzY2FuLCBib29sIGNvbXBsZXRlKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVm ID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRj aHJpbmdidWYtPm1hcmtCYXRjaDsKKwlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOworCisJ QXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CisKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFs aWQgPSBmYWxzZTsKKworCS8qCisJICogV2hlbiBjYWxsZWQgd2l0aCAiY29tcGxldGUiIHdlIG11 c3QgbWFrZSBzdXJlIHRoYXQgbWFya0JhdGNoIGlzIGZyZWVkLAorCSAqIGFuZCB0aGF0IGFsbCBt YXJrQmF0Y2ggcmVsYXRlZCBzdGF0ZSBpcyByZXNldAorCSAqLworCWlmIChjb21wbGV0ZSAmJiB1 bmxpa2VseShtYXJrQmF0Y2ggIT0gTlVMTCkpCisJeworCQkvKgorCQkgKiBXZSdsbCBmcmVlIG1h cmtCYXRjaCBkdXJpbmcgdGhpcyBjYWxsLgorCQkgKgorCQkgKiBOb3RlOiB3ZSBtdXN0IHNldCBi YXRjaHJpbmdidWYubWFya0JhdGNoIHRvIE5VTEwgdXAgZnJvbnQgbGlrZSB0aGlzCisJCSAqIHNv IHRoYXQgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggYWN0dWFsbHkgZnJlZXMgbWFya0JhdGNoIGxh dGVyIG9uLgorCQkgKi8KKwkJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2ggPSBOVUxMOworCQliYXRj aHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKwl9CisKKwkvKgorCSAqIFJlbGVhc2Ug YWxsIGN1cnJlbnRseSBsb2FkZWQgYmF0Y2hlcywgYmVpbmcgc3VyZSB0byBhdm9pZCBmcmVlaW5n CisJICogbWFya0JhdGNoICh1bmxlc3MgY2FsbGVkIHdpdGggY29tcGxldGUsIHdoZXJlIHdlJ3Jl IHN1cHBvc2VkIHRvKQorCSAqLworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJh dGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5C YXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJaWYgKGNvbXBsZXRl IHx8IGJhdGNoICE9IG1hcmtCYXRjaCkKKwkJeworCQkJbWFya0JhdGNoRnJlZWQgPSAoYmF0Y2gg PT0gbWFya0JhdGNoKTsKKwkJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGJhdGNoKTsK KwkJfQorCX0KKworCWlmIChjb21wbGV0ZSAmJiBtYXJrQmF0Y2ggIT0gTlVMTCAmJiAhbWFya0Jh dGNoRnJlZWQpCisJeworCQkvKgorCQkgKiBXZSBkaWRuJ3QgZnJlZSBtYXJrQmF0Y2ggYmVjYXVz ZSBpdCB3YXMgbm8gbG9uZ2VyIGxvYWRlZCBpbiByaW5nCisJCSAqIGJ1ZmZlci4gIERvIHNvIG5v dyBpbnN0ZWFkLgorCQkgKi8KKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgbWFya0Jh dGNoKTsKKwl9CisKKwkvKiByZXNldCByZWxldmFudCBiYXRjaCBzdGF0ZSBmaWVsZHMgKi8KKwli YXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggKi8KKwliYXRjaHJp bmdidWYtPm5leHRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggaXMgZW1wdHkgKi8KK30KKwor LyoKKyAqIEZyZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBiYXRjaCBpbmRleCBzY2FuCisgKgorICog Q2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRlZCwgcmlnaHQgYmVmb3JlIHRo ZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXkuICBDbGVhbnMgdXAgYWxsIGJh dGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fZW5kKElu ZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBDYWxsIGFtZnJlZWJhdGNoIGFuZCBhbGwgcmVtYWlu aW5nIGxvYWRlZCBiYXRjaGVzIChldmVuIG1hcmtCYXRjaCkgKi8KKwlzY2FuLT5iYXRjaHJpbmdi dWYuZG9uZSA9IHRydWU7CisJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4sIHRydWUpOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJ CUluZGV4U2NhbkJhdGNoIGNhY2hlZCA9IHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXTsKKwor CQlpZiAoY2FjaGVkID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAoY2FjaGVkLT5raWxs ZWRJdGVtcykKKwkJCXBmcmVlKGNhY2hlZC0+a2lsbGVkSXRlbXMpOworCQlpZiAoY2FjaGVkLT5j dXJyVHVwbGVzKQorCQkJcGZyZWUoY2FjaGVkLT5jdXJyVHVwbGVzKTsKKwkJcGZyZWUoY2FjaGVk KTsKKwl9Cit9CisKKy8qCisgKiBTZXQgYSBtYXJrIGZyb20gc2NhblBvcyBwb3NpdGlvbgorICoK KyAqIFNhdmVzIHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gYW5kIGFzc29jaWF0ZWQgYmF0Y2gg c28gdGhhdCB0aGUgc2NhbiBjYW4KKyAqIGJlIHJlc3RvcmVkIHRvIHRoaXMgcG9pbnQgbGF0ZXIs IHZpYSBhIGNhbGwgdG8gaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zLgorICogVGhlIG1hcmtl ZCBiYXRjaCBpcyByZXRhaW5lZCBhbmQgbm90IGZyZWVkIHVudGlsIGEgbmV3IG1hcmsgaXMgc2V0 IG9yIHRoZQorICogc2NhbiBlbmRzIChvciB1bnRpbCB0aGUgbWFyayBpcyByZXN0b3JlZCkuCisg Ki8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCit7 CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOwor CUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7 CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHJpbmdidWYtPm1hcmtQb3M7CisJ SW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9z LT5iYXRjaCk7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0Y2hyaW5nYnVmLT5tYXJr QmF0Y2g7CisJYm9vbAkJZnJlZU1hcmtCYXRjaDsKKworCS8qCisJICogRnJlZSB0aGUgcHJldmlv dXMgbWFyayBiYXRjaCAoaWYgYW55KSAtLSBidXQgb25seSBpZiBpdCBpc24ndCBvdXIKKwkgKiBz Y2FuQmF0Y2ggKGRlZmVuc2l2ZWx5IG1ha2Ugc3VyZSB0aGF0IG1hcmtCYXRjaCBpc24ndCBzb21l IGxhdGVyCisJICogc3RpbGwtbmVlZGVkIGJhdGNoLCB0b28pCisJICovCisJaWYgKCFtYXJrQmF0 Y2ggfHwgbWFya0JhdGNoID09IHNjYW5CYXRjaCkKKwl7CisJCS8qIERlZmluaXRlbHkgbm8gbWFy a0JhdGNoIHRoYXQgd2Ugc2hvdWxkIGZyZWUgbm93ICovCisJCWZyZWVNYXJrQmF0Y2ggPSBmYWxz ZTsKKwl9CisJZWxzZSBpZiAobGlrZWx5KCFpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBt YXJrUG9zLT5iYXRjaCkpKQorCXsKKwkJLyogRGVmaW5pdGVseSBoYXZlIGEgbm8tbG9uZ2VyLWxv YWRlZCBtYXJrQmF0Y2ggdG8gZnJlZSAqLworCQlmcmVlTWFya0JhdGNoID0gdHJ1ZTsKKwl9CisJ ZWxzZQorCXsKKwkJLyoKKwkJICogSXQgbG9va3MgbGlrZSBtYXJrQmF0Y2ggaXMgbG9hZGVkL3N0 aWxsIG5lZWRlZCB3aXRoaW4gYmF0Y2hyaW5nYnVmLgorCQkgKgorCQkgKiBpbmRleF9zY2FuX2Jh dGNoX2xvYWRlZCBpbmRpY2F0ZXMgdGhhdCBtYXJrcG9zLT5iYXRjaCBpcyBsb2FkZWQKKwkJICog YWxyZWFkeSwgYnV0IHdlIGNhbm5vdCBmdWxseSB0cnVzdCBpdCBoZXJlLiAgSXQncyBqdXN0IGFi b3V0CisJCSAqIHBvc3NpYmxlIHRoYXQgbWFya3Bvcy0+YmF0Y2ggZmFsbHMgd2l0aGluIGEgc2lu Y2UtcmVjeWNsZWQgcmFuZ2Ugb2YKKwkJICogYmF0Y2ggb2Zmc2V0IG51bWJlcnMgKGZvbGxvd2lu ZyB1aW50OCBvdmVyZmxvdykuCisJCSAqCisJCSAqIE1ha2Ugc3VyZSB0aGF0IG1hcmtCYXRjaCBy ZWFsbHkgaXMgbG9hZGVkIGJ5IGRpcmVjdGx5IGNvbXBhcmluZyBpdAorCQkgKiBhZ2FpbnN0IGFs bCBsb2FkZWQgYmF0Y2hlcy4gIFdlIG11c3Qgbm90IGZhaWwgdG8gcmVsZWFzZSBtYXJrQmF0Y2gK KwkJICogd2hlbiBub2JvZHkgZWxzZSB3aWxsIGxhdGVyIG9uLgorCQkgKgorCQkgKiBOb3RlOiBp biBwcmFjdGljZSB3ZSdyZSB2ZXJ5IHVubGlrZWx5IHRvIGVuZCB1cCBoZXJlLiAgSXQgaXMgdmVy eQorCQkgKiBhdHlwaWNhbCBmb3IgYW4gaW5kZXggc2NhbiBvbiB0aGUgaW5uZXIgc2lkZSBvZiBh IG1lcmdlIGpvaW4gdG8KKwkJICogaG9sZCBvbiB0byBhIG1hcmsgdGhhdCB0cmFpbHMgdGhlIGN1 cnJlbnQgc2NhbkJhdGNoIHRoaXMgbXVjaC4KKwkJICovCisJCWZyZWVNYXJrQmF0Y2ggPSB0cnVl OwkvKiBpLmUuIGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkIGxpZWQgdG8gdXMgKi8KKworCQlmb3Ig KHVpbnQ4IGkgPSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5l eHRCYXRjaDsgaSsrKQorCQl7CisJCQlpZiAoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBpKSA9PSBt YXJrQmF0Y2gpCisJCQl7CisJCQkJLyogaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgd2FzIHJpZ2h0 L25vIG92ZXJmbG93IGhhcHBlbmVkICovCisJCQkJZnJlZU1hcmtCYXRjaCA9IGZhbHNlOworCQkJ CWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKGZyZWVNYXJrQmF0Y2gpCisJeworCQkvKiBG cmVlIG1hcmtCYXRjaCwgc2luY2UgaXQgaXNuJ3QgbG9hZGVkL25lZWRlZCBmb3IgYmF0Y2hyaW5n YnVmICovCisJCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gTlVMTDsgLyogZWxzZSBjYWxsIHdv bid0IGZyZWUgbWFya0JhdGNoICovCisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIG1h cmtCYXRjaCk7CisJfQorCisJLyogY29weSB0aGUgc2NhbidzIHBvc2l0aW9uICovCisJYmF0Y2hy aW5nYnVmLT5tYXJrUG9zID0gKnNjYW5Qb3M7CisJYmF0Y2hyaW5nYnVmLT5tYXJrQmF0Y2ggPSBz Y2FuQmF0Y2g7Cit9CisKKy8qCisgKiBSZXN0b3JlIG1hcmsgdG8gc2NhblBvcyBwb3NpdGlvbgor ICoKKyAqIFJlc3RvcmVzIHRoZSBzY2FuIHRvIGEgcG9zaXRpb24gc2F2ZWQgYnkgaW5kZXhfYmF0 Y2hzY2FuX21hcmtfcG9zIGVhcmxpZXIuCisgKiBUaGUgc2NhbidzIG1hcmtQb3MgYmVjb21lcyBp dHMgc2NhblBvcy4gIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmVzdG9yZWQgYXMKKyAqIHRoZSBjdXJy ZW50IHNjYW5CYXRjaCB3aGVuIG5lZWRlZC4KKyAqCisgKiBXZSBqdXN0IGRpc2NhcmQgYWxsIGJh dGNoZXMgKG90aGVyIHRoYW4gbWFya0JhdGNoL3Jlc3RvcmVkIHNjYW5CYXRjaCksCisgKiBleGNl cHQgd2hlbiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1cnJlbnQgc2NhbkJhdGNo LgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBz Y2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmlu Z2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5z Y2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hyaW5nYnVmLT5tYXJr UG9zOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNo OworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2Nh blBvcy0+YmF0Y2gpOworCisJaWYgKHNjYW5CYXRjaCA9PSBtYXJrQmF0Y2gpCisJeworCQkvKiBt YXJrQmF0Y2ggaXMgYWxyZWFkeSBzY2FuQmF0Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1 ZiAqLworCQlBc3NlcnQoc2NhblBvcy0+YmF0Y2ggPT0gbWFya1Bvcy0+YmF0Y2gpOworCisJCXNj YW5Qb3MtPml0ZW0gPSBtYXJrUG9zLT5pdGVtOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBt YXJrQmF0Y2ggaXMgYmVoaW5kIHNjYW5CYXRjaCwgYW5kIHNvIG11c3Qgbm90IGJlIGxvYWRlZCBh bnltb3JlLiAgV2UKKwkgKiBoYXZlIHRvIGRlYWwgd2l0aCByZXN0b3JpbmcgdGhlIG1hcmsgdGhl IGhhcmQgd2F5OiBieSBpbnZhbGlkYXRpbmcgYWxsCisJICogb3RoZXIgbG9hZGVkIGJhdGNoZXMu ICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGNhc2Ugd2hlcmUgdGhlIHNjYW4KKwkgKiBkaXJlY3Rp b24gY2hhbmdlcyBhbmQgdGhlIHNjYW4gYWN0dWFsbHkgY3Jvc3NlcyBiYXRjaC9pbmRleCBwYWdl CisJICogYm91bmRhcmllcyAoc2VlIHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UpLgorCSAq CisJICogQ2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGludmFsaWRhdGUg YW55IHByaXZhdGUgc3RhdGUKKwkgKiB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2Fu J3MgcHJvZ3Jlc3MuCisJICovCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9z cmVzZXQoc2NhbiwgbWFya0JhdGNoKTsKKworCS8qIFJlbW92ZSBhbGwgYmF0Y2hlcyBmcm9tIHRo ZSByaW5nIGJ1ZmZlciBleGNlcHQgZm9yIHRoZSBtYXJrZWQgYmF0Y2ggKi8KKwlzY2FuLT5iYXRj aHJpbmdidWYuZG9uZSA9IHRydWU7CisJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4sIGZhbHNl KTsKKworCS8qCisJICogIkFwcGVuZCIgbWFya0JhdGNoLCBtYWtpbmcgdGhlIHJpbmcgYnVmZmVy IGFwcGVhciBhcyBpZiBpdCB3YXMgdGhlCisJICogZmlyc3QgYmF0Y2ggZXZlciByZXR1cm5lZCBi eSBhbWdldGJhdGNoIGZvciB0aGUgc2NhbgorCSAqLworCW1hcmtQb3MtPmJhdGNoID0gMDsKKwli YXRjaHJpbmdidWYtPnNjYW5Qb3MgPSAqbWFya1BvczsKKwliYXRjaHJpbmdidWYtPm5leHRCYXRj aCA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gbWFya1Bvcy0+YmF0Y2g7CisJaW5kZXhfc2Nh bl9iYXRjaF9hcHBlbmQoc2NhbiwgbWFya0JhdGNoKTsKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRj aChzY2FuLCBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpID09IG1hcmtCYXRjaCk7CisKKwkv KgorCSAqIE5vdGU6IG1hcmtCYXRjaC5raWxsZWRJdGVtc1tdIG1pZ2h0IGFscmVhZHkgY29udGFp biBkZWFkIGl0ZW1zLCBhbmQKKwkgKiBtaWdodCB5ZXQgaGF2ZSBtb3JlIGRlYWQgaXRlbXMgc2F2 ZWQuICB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCBpcworCSAqIHByZXBhcmVkIGZvciB0aGF0Lgor CSAqLworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVuY3Rpb25zIGNhbGxlZCBieSB0 YWJsZSBBTXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSGFuZGxlIGNyb3NzLWJhdGNoIGNo YW5nZSBpbiBzY2FuIGRpcmVjdGlvbgorICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSB3aGVuIGl0 cyBzY2FuIGNoYW5nZXMgZGlyZWN0aW9uIGluIGEgd2F5IHRoYXQKKyAqIG5lY2Vzc2l0YXRlcyBi YWNraW5nIHRoZSBzY2FuIHVwIHRvIGFuIGluZGV4IHBhZ2Ugb3JpZ2luYWxseSBhc3NvY2lhdGVk CisgKiB3aXRoIGEgbm93LWZyZWVkIGJhdGNoLgorICoKKyAqIFdoZW4gd2UgcmV0dXJuLCBiYXRj aHJpbmdidWYgd2lsbCBvbmx5IGNvbnRhaW4gb25lIGJhdGNoICh0aGUgY3VycmVudAorICogaGVh ZEJhdGNoL3NjYW5CYXRjaCkuICBDYWxsZXIgY2FuIHRoZW4gc2FmZWx5IHBhc3MgdGhpcyBiYXRj aCB0byBhbWdldGJhdGNoCisgKiB0byBkZXRlcm1pbmUgd2hpY2ggYmF0Y2ggY29tZXMgbmV4dCBp biB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uLiAgRnJvbSB0aGF0CisgKiBwb2ludCBvbiBiYXRjaHJp bmdidWYgd2lsbCBsb29rIGFzIGlmIG91ciBuZXcgc2NhbiBkaXJlY3Rpb24gaGFkIGJlZW4gdXNl ZAorICogZnJvbSB0aGUgc3RhcnQuICBUaGlzIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBl ZmZpY2llbnQsIGJ1dCBpdCB3b3JrcworICogd2VsbCBlbm91Z2ggZm9yIHdoYXQgb3VnaHQgdG8g YmUgYSByZWxhdGl2ZWx5IHJhcmUgb2NjdXJyZW5jZS4KKyAqLwordm9pZAordGFibGVhbV91dGls X2JhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVy ICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUluZGV4U2NhbkJhdGNoIGhl YWQ7CisKKwkvKgorCSAqIFJlbGVhc2UgYmF0Y2hlcyBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50 ICJ0YWlsIiBiYXRjaCwgd29ya2luZworCSAqIGJhY2t3YXJkcyB1bnRpbCB0aGUgY3VycmVudCBo ZWFkIGJhdGNoICh3aGljaCBtdXN0IGFsc28gYmUgdGhlIGN1cnJlbnQKKwkgKiBzY2FuQmF0Y2gp IGlzIHRoZSBvbmx5IGJhdGNoIGhhc24ndCBiZWVuIGZyZWVkCisJICovCisJd2hpbGUgKGluZGV4 X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAxKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggdGFpbCA9 IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwKKwkJCQkJCQkJCQkJICAgYmF0Y2hyaW5nYnVmLT5uZXh0 QmF0Y2ggLSAxKTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCB0YWlsKTsKKwkJ YmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2gtLTsKKwl9CisKKwkvKiBzY2FuQmF0Y2ggaXMgbm93IHRo ZSBvbmx5IGJhdGNoIHN0aWxsIGxvYWRlZCAqLworCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRC YXRjaCA9PSBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpOworCisJLyoKKwkgKiBEZWFsIHdp dGggaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgcHJvZ3Jlc3Mg b2YgdGhlCisJICogc2Nhbi4gIERvIHRoaXMgYnkgZmxpcHBpbmcgdGhlIGJhdGNoLWxldmVsIHNj YW4gZGlyZWN0aW9uLCBhbmQgdGhlbgorCSAqIGNhbGxpbmcgdGhlIGluZGV4IEFNJ3MgYW1wb3Ny ZXNldC4KKwkgKi8KKwloZWFkID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBiYXRjaHJpbmdidWYt PmhlYWRCYXRjaCk7CisJaGVhZC0+ZGlyID0gLWhlYWQtPmRpcjsKKwlpZiAoc2Nhbi0+aW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQpCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIGhlYWQpOworfQorCisvKgorICogUmVjb3JkIHRoYXQg c2NhblBvcyBpdGVtIGlzIGRlYWQKKyAqCisgKiBSZWNvcmRzIGFuIG9mZnNldCB0byB0aGUgc2Nh bkJhdGNoIGl0ZW0gb2YgdGhlIGN1cnJlbnRseS1yZWFkIHR1cGxlLCBzYXZpbmcKKyAqIGl0IGlu IHNjYW5CYXRjaCdzIGtpbGxlZEl0ZW1zIGFycmF5LiBUaGUgaXRlbXMnIGluZGV4IHR1cGxlcyB3 aWxsIGxhdGVyIGJlCisgKiBtYXJrZWQgTFBfREVBRCB3aGVuIGN1cnJlbnQgc2NhbkJhdGNoIGlz IGZyZWVkIGJ5IGFtZnJlZWJhdGNoIHJvdXRpbmUgKHNlZQorICogdGFibGVhbV91dGlsX2ZyZWVf YmF0Y2ggd3JhcHBlciBmdW5jdGlvbikuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9raWxsX3Nj YW5wb3NpdGVtKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2Fu UG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5C YXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJaWYgKHNj YW5CYXRjaC0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKKwkJc2NhbkJhdGNoLT5raWxsZWRJdGVtcyA9 IHBhbGxvY19hcnJheShpbnQsIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCWlmIChzY2FuQmF0Y2gt Pm51bUtpbGxlZCA8IHNjYW4tPm1heGl0ZW1zYmF0Y2gpCisJCXNjYW5CYXRjaC0+a2lsbGVkSXRl bXNbc2NhbkJhdGNoLT5udW1LaWxsZWQrK10gPSBzY2FuUG9zLT5pdGVtOworfQorCisvKgorICog UmVsZWFzZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgYmF0Y2gKKyAqCisgKiBDYWxsZWQg YnkgdGFibGUgQU0ncyBvcmRlcmVkIGluZGV4IHNjYW4gaW1wbGVtZW50YXRpb24gd2hlbiBpdCBp cyBmaW5pc2hlZAorICogd2l0aCBhIGJhdGNoIGFuZCB3aXNoZXMgdG8gcmVsZWFzZSBpdHMgcmVz b3VyY2VzLgorICoKKyAqIFdlIHJlbGVhc2UgdGhlIGJhdGNoJ3MgYnVmZmVyIHBpbiBpZiB0YWJs ZSBBTSBoYXNuJ3QgcmVsZWFzZWQgaXQgYWxyZWFkeS4KKyAqIEZvciBwbGFpbiBpbmRleCBzY2Fu cyB3aXRoIGFuIE1WQ0Mgc25hcHNob3QsIHRoZSB0YWJsZSBBTSBjYWxsZXIgcmVsZWFzZXMKKyAq IHRoZSBwaW4gaW1tZWRpYXRlbHksIHNvIHdlIG5ldmVyIHJlbGVhc2UgdGhlIHBpbiBoZXJlLiAg SW5kZXgtb25seSBzY2FucworICogbXVzdCBkZWxheSBkcm9wcGluZyB0aGUgcGluIHVudGlsIHZp c2liaWxpdHkgaXMgcmVzb2x2ZWQgZm9yIGFsbCBpdGVtcyBpbgorICogdGhlIGJhdGNoLCBzbyB3 ZSBtYXkgbmVlZCB0byByZWxlYXNlIHRoZSBwaW4gaGVyZS4gIEZvciBub24tTVZDQyBzbmFwc2hv dAorICogc2NhbnMsIHRoZSBwaW4gaXMgYWx3YXlzIGhlbGQgdW50aWwgdGhpcyBmdW5jdGlvbiBy ZWxlYXNlcyBpdC4KKyAqCisgKiBXZSBhbHNvIGNhbGwgdGhlIGluZGV4IEFNJ3MgYW1mcmVlYmF0 Y2ggY2FsbGJhY2sgdG8gcmVsZWFzZSBBTS1zcGVjaWZpYworICogcmVzb3VyY2VzLCBhbmQgdG8g c2V0IExQX0RFQUQgYml0cyBvbiB0aGUgYmF0Y2gncyBpbmRleCBwYWdlIChpbiBpbmRleCBBTXMK KyAqIHRoYXQgaW1wbGVtZW50IHRoYXQgb3B0aW1pemF0aW9uKS4gIEV2ZXJ5IGFtZnJlZWJhdGNo IHJvdXRpbmUgbXVzdCByZWN5Y2xlCisgKiB0aGUgdW5kZXJseWluZyBiYXRjaCBtZW1vcnkgYnkg cGFzc2luZyBpdCB0byBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4KKyAqCisgKiBOb3RlOiBD YWxsaW5nIGhlcmUgd2hlbiAnYmF0Y2gnIGlzIGFsc28gYmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCBp cyBhIG5vLW9wLgorICogQ2FsbGVycyB0aGF0IGRvbid0IHdhbnQgdGhpcyBzaG91bGQgc2V0IGJh dGNocmluZ2J1Zi5tYXJrQmF0Y2ggdG8gTlVMTAorICogYmVmb3JlIGNhbGxpbmcgdXMuICBOb3Rl IHRoYXQgbWFya0JhdGNoIGhhcyB0byBiZSBleHBsaWNpdGx5IGZyZWVkLgorICovCit2b2lkCit0 YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKQoreworCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJhdGNoLT5idWYpIHx8IHNjYW4tPk1W Q0NTY2FuKTsKKworCS8qIGRvbid0IGZyZWUgY2FsbGVyJ3MgYmF0Y2ggaWYgaXQgaXMgc2Nhbidz IGN1cnJlbnQgbWFya0JhdGNoICovCisJaWYgKGJhdGNoID09IHNjYW4tPmJhdGNocmluZ2J1Zi5t YXJrQmF0Y2gpCisJCXJldHVybjsKKworCWlmIChCdWZmZXJJc1ZhbGlkKGJhdGNoLT5idWYpKQor CXsKKwkJLyogdGFibGUgQU0gZGlkbid0IHVucGluIHBhZ2UgZWFybGllciAtLSBkbyBpdCBub3cg Ki8KKwkJQXNzZXJ0KCFzY2FuLT5NVkNDU2NhbiB8fCBzY2FuLT54c193YW50X2l0dXApOworCisJ CVJlbGVhc2VCdWZmZXIoYmF0Y2gtPmJ1Zik7CisJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVy OworCX0KKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJZWxzZSBpZiAoc2Nhbi0+eHNfd2Fu dF9pdHVwKQorCXsKKwkJLyoKKwkJICogSW5kZXgtb25seSBzY2FuIHRoYXQgZHJvcHBlZCB0aGlz IGJhdGNoJ3MgcGluIGVhZ2VybHkuCisJCSAqCisJCSAqIFRhYmxlIEFNIG11c3QgaGF2ZSBjaGVj a2VkIHZpc2liaWxpdHkgZm9yIGV2ZXJ5IGl0ZW0gaW4gdGhlIGJhdGNoLgorCQkgKi8KKwkJZm9y IChpbnQgaSA9IGJhdGNoLT5maXJzdEl0ZW07IGkgPD0gYmF0Y2gtPmxhc3RJdGVtOyBpKyspCisJ CQlBc3NlcnQoYmF0Y2gtPml0ZW1zW2ldLmNoZWNrZWRWaXNpYmxlKTsKKwl9CisjZW5kaWYKKwor CS8qCisJICogYmF0Y2gua2lsbGVkSXRlbXNbXSBpcyBub3cgaW4gd2hhdGV2ZXIgb3JkZXIgdGhl IHNjYW4gcmV0dXJuZWQgaXRlbXMKKwkgKiBpbi4gIFdlIG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0 aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KKwkgKgorCSAqIFNvcnQgYW5kIHVuaXF1ZS1pZnkga2ls bGVkSXRlbXNbXS4gIFRoYXQgd2F5IHRoZSBpbmRleCBBTSBjYW4gc2FmZWx5CisJICogYXNzdW1l IHRoYXQgaXRlbXMgd2lsbCBhbHdheXMgYmUgaW4gdGhlaXIgb3JpZ2luYWwgaW5kZXggcGFnZSBv cmRlci4KKwkgKi8KKwlpZiAoYmF0Y2gtPm51bUtpbGxlZCA+IDEpCisJeworCQlxc29ydChiYXRj aC0+a2lsbGVkSXRlbXMsIGJhdGNoLT5udW1LaWxsZWQsIHNpemVvZihpbnQpLAorCQkJICBiYXRj aF9jb21wYXJlX2ludCk7CisJCWJhdGNoLT5udW1LaWxsZWQgPSBxdW5pcXVlKGJhdGNoLT5raWxs ZWRJdGVtcywgYmF0Y2gtPm51bUtpbGxlZCwKKwkJCQkJCQkJICAgc2l6ZW9mKGludCksIGJhdGNo X2NvbXBhcmVfaW50KTsKKwl9CisKKwlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1m cmVlYmF0Y2goc2NhbiwgYmF0Y2gpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVu Y3Rpb25zIGNhbGxlZCBieSBhbWdldGJhdGNoIGluZGV4IEFNcworICoKKyAqIFRoZXNlIGZ1bmN0 aW9ucyBtYW5hZ2UgYmF0Y2ggYWxsb2NhdGlvbiwgdW5sb2NrL3BpbiBtYW5hZ2VtZW50LCBhbmQg YmF0Y2gKKyAqIHJlc291cmNlIHJlY3ljbGluZy4gIEluZGV4IEFNcyBpbXBsZW1lbnRpbmcgYW1n ZXRiYXRjaCBzaG91bGQgdXNlIHRoZXNlCisgKiByYXRoZXIgdGhhbiBtYW5hZ2luZyBidWZmZXJz IGRpcmVjdGx5LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBVbmxvY2sgYmF0Y2gncyBzaGFy ZWQgYnVmZmVyIGxvY2sKKyAqCisgKiBVbmxvY2tzIGNhbGxlcidzIGJhdGNoLT5idWYgaW4gcHJl cGFyYXRpb24gZm9yIGFtZ2V0YmF0Y2ggcmV0dXJuaW5nIGl0ZW1zCisgKiBzYXZlZCBpbiB0aGF0 IGJhdGNoLiAgUGVyZm9ybXMgZXh0cmEgc3RlcHMgcmVxdWlyZWQgYnkgYW1nZXRiYXRjaCBjYWxs ZXJzCisgKiBpbiBwYXNzaW5nLgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBiYXRjaCBo YXMgb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBhbWdldGJh dGNoIChvciBmb3IgYW1nZXRiaXRtYXAgdG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2YgbWF0Y2hp bmcgVElEcykuCisgKiBXaGVuIGFuIGluZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0J3MgYWx3 YXlzIHNhZmUgZm9yIGluZGV4IEFNcyB0byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUg cGluIGZvciB0aGVtc2VsdmVzLgorICoKKyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQgZm9yIGlu ZGV4IEFNcyB0aGF0IGltcGxlbWVudCBib3RoIGFtZ2V0YmF0Y2ggYW5kCisgKiBhbWdldGJpdG1h cCB0byBjb25zaXN0ZW50bHkgdXNlIHRoZSBzYW1lIGJhdGNoIG1hbmFnZW1lbnQgYXBwcm9hY2gs IHNpbmNlCisgKiB0aGF0IGF2b2lkcyBpbnRyb2R1Y2luZyBzcGVjaWFsIGNhc2VzIHRvIGxvd2Vy LWxldmVsIGNvZGUuICBXZSBkcm9wIGJvdGgKKyAqIHRoZSBsb2NrIGFuZCB0aGUgcGluIG9uIGJh dGNoJ3MgcGFnZSBvbiBiZWhhbGYgb2YgYW1nZXRiaXRtYXAgY2FsbGVycy4KKyAqIFN1Y2ggYW1n ZXRiaXRtYXAgY2FsbGVycyBtdXN0IGJlIGNhcmVmdWwgdG8gZnJlZSBhbGwgYmF0Y2hlcyB3aXRo IG1hdGNoaW5nCisgKiBpdGVtcyBvbmNlIHRoZXkncmUgZG9uZSBzYXZpbmcgdGhlIG1hdGNoaW5n IFRJRHMgKHRoZXJlIHdpbGwgbmV2ZXIgYmUgYW55CisgKiBjYWxscyB0byBhbWZyZWViYXRjaCwg c28gYW1nZXRiaXRtYXAgbXVzdCBjYWxsIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlCisgKiBk aXJlY3RseSwgaW4gbGlldSBvZiBhIGRlZmVycmVkIGNhbGwgdG8gYW1mcmVlYmF0Y2ggZnJvbSBj b3JlIGNvZGUpLiAgV2UKKyAqIG5ldmVyIGRyb3AgdGhlIHBpbiBmb3IgYW4gYW1nZXRiYXRjaCBj YWxsZXIsIHRob3VnaC4KKyAqLwordm9pZAoraW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIGJhdGNoIG11c3Qg aGF2ZSBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyByZXR1cm5lZCBieSBpbmRleCBBTSAqLwor CUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtID49IDAgJiYgYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRj aC0+bGFzdEl0ZW0pOworCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwl7CisJCS8qIGFtZ2V0 YmF0Y2ggKG5vdCBhbWdldGJpdG1hcCkgY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVs YXRpb24gIT0gTlVMTCk7CisKKwkJLyoKKwkJICogSGF2ZSB0byBzZXQgYmF0Y2gtPmxzbiBzbyB0 aGF0IGFtZnJlZWJhdGNoIGhhcyBhIHdheSB0byBkZXRlY3Qgd2hlbgorCQkgKiBjb25jdXJyZW50 IGhlYXAgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KKwkJ ICogSXQnbGwgb25seSBiZSBzYWZlIHRvIHNldCBhbnkgaW5kZXggdHVwbGUgTFBfREVBRCBiaXRz IHdoZW4gdGhlCisJCSAqIHBhZ2UgTFNOIGhhc24ndCBhZHZhbmNlZC4KKwkJICovCisJCWJhdGNo LT5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYmF0Y2gtPmJ1Zik7CisKKwkJLyogRHJvcCB0aGUg bG9jayAqLworCQlMb2NrQnVmZmVyKGJhdGNoLT5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisK KyNpZmRlZiBVU0VfVkFMR1JJTkQKKwkJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMoc2Nh bi0+aW5kZXhSZWxhdGlvbikpCisJCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJH ZXRQYWdlKGJhdGNoLT5idWYpLCBCTENLU1opOworI2VuZGlmCisKKwkJLyogdGFibGUgQU0gZGV0 ZXJtaW5lcyB3aGVuIGl0J2xsIGJlIHNhZmUgdG8gZHJvcCBwaW5zIG9uIGJhdGNoZXMgKi8KKwl9 CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAgKG5vdCBhbWdldGJhdGNoKSBjYWxsZXIgKi8K KwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKworCQkvKiBkcm9wIGJvdGgg dGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJTG9ja0J1ZmZlcihiYXRjaC0+YnVmLCBCVUZGRVJf TE9DS19VTkxPQ0spOworCisjaWZkZWYgVVNFX1ZBTEdSSU5ECisJCWlmICghUmVsYXRpb25Vc2Vz TG9jYWxCdWZmZXJzKHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQkJVkFMR1JJTkRfTUFLRV9NRU1f Tk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShiYXRjaC0+YnVmKSwgQkxDS1NaKTsKKyNlbmRpZgorCQlS ZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCQliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsK Kwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBiYXRjaAorICoKKyAqIFVzZWQgYnkgaW5k ZXggQU1zIHRoYXQgc3VwcG9ydCBhbWdldGJhdGNoIGludGVyZmFjZSAoYm90aCBkdXJpbmcgYW1n ZXRiYXRjaAorICogYW5kIGFtZ2V0Yml0bWFwIHNjYW5zKS4KKyAqCisgKiBSZXR1cm5zIEluZGV4 U2NhbkJhdGNoIHdpdGggc3BhY2UgdG8gZml0IHNjYW4tPm1heGl0ZW1zYmF0Y2gtbWFueQorICog QmF0Y2hNYXRjaGluZ0l0ZW0gZW50cmllcy4gIFRoaXMgd2lsbCBlaXRoZXIgYmUgYSBuZXdseSBh bGxvY2F0ZWQgYmF0Y2gsIG9yCisgKiBhIGJhdGNoIHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlIG1h bmFnZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuICBTZWUKKyAqIGNvbW1lbnRzIGFi b3ZlIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAqIEluZGV4IEFNcyB0aGF0IHVz ZSBiYXRjaGVzIHNob3VsZCBjYWxsIHRoaXMgZnJvbSBlaXRoZXIgdGhlaXIgYW1nZXRiYXRjaCBv cgorICogYW1nZXRiaXRtYXAgcm91dGluZXMgb25seS4gIE5vdGUgaW4gcGFydGljdWxhciB0aGF0 IGl0IGNhbm5vdCBzYWZlbHkgYmUKKyAqIGNhbGxlZCBmcm9tIGEgYW1mcmVlYmF0Y2ggcm91dGlu ZS4KKyAqLworSW5kZXhTY2FuQmF0Y2gKK2luZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNj YW5EZXNjIHNjYW4pCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxMOworCisJLyogRmly c3QgbG9vayBmb3IgYW4gZXhpc3RpbmcgYmF0Y2ggZnJvbSByaW5nIGJ1ZmZlciAqLworCWlmIChz Y2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5f Q0FDSEVfQkFUQ0hFUzsgaSsrKQorCQl7CisJCQlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hl W2ldICE9IE5VTEwpCisJCQl7CisJCQkJLyogUmV0dXJuIGNhY2hlZCB1bnJlZmVyZW5jZWQgYmF0 Y2ggKi8KKwkJCQliYXRjaCA9IHNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXTsKKwkJCQlzY2Fu LT5iYXRjaHJpbmdidWYuY2FjaGVbaV0gPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJ fQorCisJaWYgKCFiYXRjaCkKKwl7CisJCWJhdGNoID0gcGFsbG9jKG9mZnNldG9mKEluZGV4U2Nh bkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCQkJICAgc2l6ZW9mKEJhdGNoTWF0Y2hpbmdJdGVtKSAq IHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCisJCS8qCisJCSAqIElmIHdlIGFyZSBkb2luZyBhbiBp bmRleC1vbmx5IHNjYW4sIHdlIG5lZWQgYSB0dXBsZSBzdG9yYWdlCisJCSAqIHdvcmtzcGFjZS4g V2UgYWxsb2NhdGUgQkxDS1NaIGZvciB0aGlzLCB3aGljaCBzaG91bGQgYWx3YXlzIGdpdmUKKwkJ ICogdGhlIGluZGV4IEFNIGVub3VnaCBzcGFjZSB0byBmaXQgYSBmdWxsIHBhZ2UncyB3b3J0aCBv ZiB0dXBsZXMuCisJCSAqLworCQliYXRjaC0+Y3VyclR1cGxlcyA9IE5VTEw7CisJCWlmIChzY2Fu LT54c193YW50X2l0dXApCisJCQliYXRjaC0+Y3VyclR1cGxlcyA9IHBhbGxvYyhCTENLU1opOwor CisJCS8qCisJCSAqIEJhdGNoZXMgYWxsb2NhdGUga2lsbGVkSXRlbXMgbGF6aWx5ICh0aG91Z2gg bm90ZSB0aGF0IGNhY2hlZAorCQkgKiBiYXRjaGVzIGtlZXAgdGhlaXIga2lsbGVkSXRlbXMgYWxs b2NhdGlvbiB3aGVuIHJlY3ljbGVkKQorCQkgKi8KKwkJYmF0Y2gtPmtpbGxlZEl0ZW1zID0gTlVM TDsKKwl9CisKKwkvKiB4c193YW50X2l0dXAgc2NhbnMgbXVzdCBnZXQgYSBjdXJyVHVwbGVzIHNw YWNlICovCisJQXNzZXJ0KCEoc2Nhbi0+eHNfd2FudF9pdHVwICYmIChiYXRjaC0+Y3VyclR1cGxl cyA9PSBOVUxMKSkpOworCisJLyogc2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJYmF0Y2gtPmJ1 ZiA9IEludmFsaWRCdWZmZXI7CisJYmF0Y2gtPmtub3duRW5kTGVmdCA9IGZhbHNlOworCWJhdGNo LT5rbm93bkVuZFJpZ2h0ID0gZmFsc2U7CisJYmF0Y2gtPmZpcnN0SXRlbSA9IC0xOworCWJhdGNo LT5sYXN0SXRlbSA9IC0xOworCWJhdGNoLT5udW1LaWxsZWQgPSAwOworCisJcmV0dXJuIGJhdGNo OworfQorCisvKgorICogUmVsZWFzZSBhbGxvY2F0ZWQgYmF0Y2gKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCBieSBpbmRleCBBTXMgdG8gcmVsZWFzZSBhIGJhdGNoIGFsbG9jYXRlZCBi eQorICogaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jLiAgQmF0Y2hlcyBhcmUgY2FjaGVkIGhlcmUg Zm9yIHJldXNlICh3aGVuIHNjYW4KKyAqIGhhc24ndCBhbHJlYWR5IGZpbmlzaGVkKSB0byByZWR1 Y2UgcGFsbG9jL3BmcmVlIG92ZXJoZWFkLgorICoKKyAqIEl0J3Mgc2FmZSB0byByZWxlYXNlIGEg YmF0Y2ggaW1tZWRpYXRlbHkgd2hlbiBpdCB3YXMgdXNlZCB0byByZWFkIGEgcGFnZQorICogdGhh dCByZXR1cm5lZCBubyBtYXRjaGVzIHRvIHRoZSBzY2FuLiAgQmF0Y2hlcyBhY3R1YWxseSByZXR1 cm5lZCBieSBpbmRleAorICogQU0ncyBhbWdldGJhdGNoIHJvdXRpbmUgKGkuZS4gYmF0Y2hlcyBm b3IgcGFnZXMgd2l0aCBvbmUgb3IgbW9yZSBtYXRjaGVzKQorICogbXVzdCBiZSByZWxlYXNlZCBi eSBjYWxsaW5nIGhlcmUgYXQgdGhlIGVuZCBvZiB0aGVpciBhbWZyZWViYXRjaCByb3V0aW5lLgor ICogSW5kZXggQU1zIHRoYXQgdXNlcyBiYXRjaGVzIHNob3VsZCBjYWxsIGhlcmUgdG8gcmVsZWFz ZSBhIGJhdGNoIGZyb20gYW55IG9mCisgKiB0aGVpciBhbWdldGJhdGNoLCBhbWdldGJpdG1hcCwg YW5kIGFtZnJlZWJhdGNoIHJvdXRpbmVzLgorICovCit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUFz c2VydChiYXRjaC0+YnVmID09IEludmFsaWRCdWZmZXIpOworCisJaWYgKHNjYW4tPnVzZWJhdGNo cmluZykKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggc2NhbiBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4t PmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCQlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmLmRvbmUp CisJCXsKKwkJCS8qIERvbid0IGJvdGhlciB1c2luZyBjYWNoZSB3aGVuIHNjYW4gaXMgZW5kaW5n ICovCisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVXNlIGNhY2hlLiAgVGhpcyBpcyBn ZW5lcmFsbHkgb25seSBiZW5lZmljaWFsIHdoZW4gdGhlcmUgYXJlCisJCQkgKiBtYW55IHNtYWxs IHJlc2NhbnMgb2YgYW4gaW5kZXguCisJCQkgKi8KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgSU5E RVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJCQl7CisJCQkJaWYgKHNjYW4tPmJhdGNocmlu Z2J1Zi5jYWNoZVtpXSA9PSBOVUxMKQorCQkJCXsKKwkJCQkJLyogZm91bmQgZW1wdHkgc2xvdCwg d2UncmUgZG9uZSAqLworCQkJCQlzY2FuLT5iYXRjaHJpbmdidWYuY2FjaGVbaV0gPSBiYXRjaDsK KwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIEZhaWxlZCB0byBm aW5kIGEgZnJlZSBzbG90IGZvciB0aGlzIGJhdGNoLiAgV2UnbGwganVzdCBmcmVlIGl0CisJCSAq IG91cnNlbHZlcy4gIFRoaXMgaXNuJ3QgcmVhbGx5IGV4cGVjdGVkOyBpdCdzIGp1c3QgZGVmZW5z aXZlLgorCQkgKi8KKwkJaWYgKGJhdGNoLT5raWxsZWRJdGVtcykKKwkJCXBmcmVlKGJhdGNoLT5r aWxsZWRJdGVtcyk7CisJCWlmIChiYXRjaC0+Y3VyclR1cGxlcykKKwkJCXBmcmVlKGJhdGNoLT5j dXJyVHVwbGVzKTsKKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAgc2NhbiBjYWxsZXIg Ki8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNo LT5raWxsZWRJdGVtcyA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5V TEwpOworCX0KKworCS8qIG5vIGZyZWUgc2xvdCB0byBzYXZlIHRoaXMgYmF0Y2ggKGV4cGVjdGVk IHdpdGggYW1nZXRiaXRtYXAgY2FsbGVycykgKi8KKwlwZnJlZShiYXRjaCk7Cit9CisKKy8qCisg KiBxc29ydCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlzCisgKi8KK3N0YXRpYyBp bnQKK2JhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sK KwlpbnQJCQlhID0gKigoY29uc3QgaW50ICopIHZhKTsKKwlpbnQJCQliID0gKigoY29uc3QgaW50 ICopIHZiKTsKKworCXJldHVybiBwZ19jbXBfczMyKGEsIGIpOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L21lc29uLmJ1aWxkCmluZGV4IGRhNjRjYjU5NS4uODNkZmEzZjJiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L21lc29uLmJ1aWxkCkBAIC01LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0g ZmlsZXMoCiAgICdhbXZhbGlkYXRlLmMnLAogICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAor ICAnaW5kZXhiYXRjaC5jJywKICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvUkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggY2I5MjFj YTJlLi5lNzU1NzdhN2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVB RE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC0xNzksMTggKzE3 OSwyMSBAQCBob2xkIG9uIHRvIHRoZSBwaW4gKHVzZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGxl YWYgcGFnZSkgdW50aWwgX2FmdGVyXwogdGhleSdyZSBkb25lIHZpc2l0aW5nIHRoZSBoZWFwIChm b3IgVElEcyBmcm9tIHBpbm5lZCBsZWFmIHBhZ2UpIHByZXZlbnRzCiBjb25jdXJyZW50IFRJRCBy ZWN5Y2xpbmcuICBWQUNVVU0gY2Fubm90IGdldCBhIGNvbmZsaWN0aW5nIGNsZWFudXAgbG9jawog dW50aWwgdGhlIGluZGV4IHNjYW4gaXMgdG90YWxseSBmaW5pc2hlZCBwcm9jZXNzaW5nIGl0cyBs ZWFmIHBhZ2UuCitOb3RlIHRoYXQgdGhlIHRhYmxlIEFNIGRldGVybWluZXMgd2hlbiBhbmQgd2hl cmUgaW5kZXggcGFnZSBwaW5zIGFyZQorZHJvcHBlZC4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgYW55 IGluZGV4IEFNIHRoYXQgaW1wbGVtZW50cyB0aGUgYW1nZXRiYXRjaAoraW50ZXJmYWNlLiAgKFNl ZSBhbHNvLCBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sKS4KIAotVGhpcyBhcHByb2FjaCBpcyBm YWlybHkgY29hcnNlLCBzbyB3ZSBhdm9pZCBpdCB3aGVuZXZlciBwb3NzaWJsZS4gIEluCi1wcmFj dGljZSBtb3N0IGluZGV4IHNjYW5zIHdvbid0IGhvbGQgb250byB0aGVpciBwaW4sIGFuZCBzbyB3 b24ndCBibG9jawotVkFDVVVNLiAgVGhlc2UgaW5kZXggc2NhbnMgbXVzdCBkZWFsIHdpdGggVElE IHJlY3ljbGluZyBkaXJlY3RseSwgd2hpY2ggaXMKLW1vcmUgY29tcGxpY2F0ZWQgYW5kIG5vdCBh bHdheXMgcG9zc2libGUuICBTZWUgbGF0ZXIgc2VjdGlvbiBvbiBtYWtpbmcKLWNvbmN1cnJlbnQg VElEIHJlY3ljbGluZyBzYWZlLgorQmxvY2tpbmcgVkFDVVVNIGxpa2UgdGhpcyBjYW4gYmUgZGlz cnVwdGl2ZSwgc28gdGFibGUgQU1zIGF2b2lkIGl0IHdoZW5ldmVyCitwb3NzaWJsZS4gIFRoZSBo ZWFwIHRhYmxlIEFNIHVzdWFsbHkgZHJvcHMgbGVhZiBwYWdlIHBpbnMgcmlnaHQgYXdheSwgdGhv dWdoCitub3QgZHVyaW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuICBJbmRl eC1vbmx5IHNjYW5zIG1heSBhbHNvCityZXRhaW4gcGlucyBpbiBzb21lIGNhc2VzLgogCi1PcHBv cnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0aW9uIHBlcmZvcm1zIGFsbW9zdCB0aGUgc2FtZSBw YWdlLWxldmVsCi1tb2RpZmljYXRpb25zIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUg bG9jay4gIFRoaXMgaXMgc2FmZSBiZWNhdXNlCi10aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQg cmVjeWNsaW5nIHRha2luZyBwbGFjZSBsYXRlciBvbiAtLSBvbmx5IFZBQ1VVTQotY2FuIG1ha2Ug VElEcyByZWN5Y2xhYmxlLiAgU2VlIGFsc28gc2ltcGxlIGRlbGV0aW9uIGFuZCBib3R0b20tdXAK LWRlbGV0aW9uLCBiZWxvdy4KK09wcG9ydHVuaXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVy Zm9ybXMgdGhlIHNhbWUgcGFnZS1sZXZlbAorbW9kaWZpY2F0aW9ucyBhcyBWQUNVVU0sIHdoaWxl IG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMKK3NhZmUgYmVjYXVzZSB0 aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFjZSAtLSBvbmx5 CitWQUNVVU0gY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxlLiAgSW4gb3RoZXIgd29yZHMsIFZBQ1VV TSdzIGNsZWFudXAgbG9jaworc2VydmVzIHRvIHByb3RlY3Qgbm9uLU1WQ0Mgc25hcHNob3Qgc2Nh bnMgZnJvbSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcKK2hhemFyZHM7IGl0IGRvZXNuJ3QgcHJv dGVjdCB0aGUgQi1UcmVlIHN0cnVjdHVyZSBpdHNlbGYuCiAKIEJlY2F1c2UgYSBwaW4gaXMgbm90 IGFsd2F5cyBoZWxkLCBhbmQgYSBwYWdlIGNhbiBiZSBzcGxpdCBldmVuIHdoaWxlCiBzb21lb25l IGRvZXMgaG9sZCBhIHBpbiBvbiBpdCwgaXQgaXMgcG9zc2libGUgdGhhdCBhbiBpbmRleHNjYW4g d2lsbApAQCAtNDQ0LDQ0ICs0NDcsMjUgQEAgTWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGlu ZyBzYWZlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQXMgZXhwbGFp bmVkIGluIHRoZSBlYXJsaWVyIHNlY3Rpb24gYWJvdXQgZGVsZXRpbmcgaW5kZXggdHVwbGVzIGR1 cmluZwotVkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3RvY29sIHRoYXQgYWxsb3dz IGluZGl2aWR1YWwgaW5kZXggc2NhbnMKLXRvIGF2b2lkIGNvbmN1cnJlbnQgVElEIHJlY3ljbGlu Zy4gIEluZGV4IHNjYW5zIG9wdC1vdXQgKGFuZCBzbyBkcm9wIHRoZWlyCi1sZWFmIHBhZ2UgcGlu IHdoZW4gdmlzaXRpbmcgdGhlIGhlYXApIHdoZW5ldmVyIGl0J3Mgc2FmZSB0byBkbyBzbywgdGhv dWdoLgotRHJvcHBpbmcgdGhlIHBpbiBlYXJseSBpcyB1c2VmdWwgYmVjYXVzZSBpdCBhdm9pZHMg YmxvY2tpbmcgcHJvZ3Jlc3MgYnkKLVZBQ1VVTS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9y dGFudCB3aXRoIGluZGV4IHNjYW5zIHVzZWQgYnkgY3Vyc29ycywKLXNpbmNlIGlkbGUgY3Vyc29y cyBzb21ldGltZXMgc3RvcCBmb3IgcmVsYXRpdmVseSBsb25nIHBlcmlvZHMgb2YgdGltZS4gIElu Ci1leHRyZW1lIGNhc2VzLCBhIGNsaWVudCBhcHBsaWNhdGlvbiBtYXkgaG9sZCBvbiB0byBhbiBp ZGxlIGN1cnNvcnMgZm9yCi1ob3VycyBvciBldmVuIGRheXMuICBCbG9ja2luZyBWQUNVVU0gZm9y IHRoYXQgbG9uZyBjb3VsZCBiZSBkaXNhc3Ryb3VzLgorVkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBs b2NraW5nIHByb3RvY29sIHRoYXQgaGVscHMgdGFibGUgQU1zIGRlYWwgd2l0aCBUSUQKK3JlY3lj bGluZyBoYXphcmRzIGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90Lgog CiBJbmRleCBzY2FucyB0aGF0IGRvbid0IGhvbGQgb24gdG8gYSBidWZmZXIgcGluIGFyZSBwcm90 ZWN0ZWQgYnkgaG9sZGluZyBhbgogTVZDQyBzbmFwc2hvdCBpbnN0ZWFkLiAgVGhpcyBtb3JlIGxp bWl0ZWQgaW50ZXJsb2NrIHByZXZlbnRzIHdyb25nIGFuc3dlcnMKIHRvIHF1ZXJpZXMsIGJ1dCBp dCBkb2VzIG5vdCBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBpdHNlbGYgKG9ubHkK IGhvbGRpbmcgb250byB0aGUgbGVhZiBwYWdlIHBpbiB3aGlsZSBhY2Nlc3NpbmcgdGhlIGhlYXAg ZW5zdXJlcyB0aGF0KS4KK0ZvciB0aGUgbW9zdCBwYXJ0LCBpdCBpcyB1cCB0byB0aGUgdGFibGUg QU0gdG8gZGVhbCB3aXRoIGNvbmN1cnJlbnQgVElECityZWN5Y2xpbmcgaGF6YXJkcy4gIEJ1dCB3 ZSBzdGlsbCBuZWVkIHRvIGRpcmVjdGx5IGNvbnNpZGVyIHN1Y2ggaGF6YXJkcyB3aGVuCittYXJr aW5nIGEga25vd24tZGVhZCBpbmRleCB0dXBsZSBMUF9ERUFELgogCi1JbmRleC1vbmx5IHNjYW5z IGNhbiBuZXZlciBkcm9wIHRoZWlyIGJ1ZmZlciBwaW4sIHNpbmNlIHRoZXkgYXJlIHVuYWJsZSB0 bwotdG9sZXJhdGUgaGF2aW5nIGEgcmVmZXJlbmNlZCBUSUQgYmVjb21lIHJlY3ljbGFibGUuICBJ bmRleC1vbmx5IHNjYW5zCi10eXBpY2FsbHkganVzdCB2aXNpdCB0aGUgdmlzaWJpbGl0eSBtYXAg KG5vdCB0aGUgaGVhcCBwcm9wZXIpLCBhbmQgc28gd2lsbAotbm90IHJlbGlhYmx5IG5vdGljZSB0 aGF0IGFueSBzdGFsZSBUSUQgcmVmZXJlbmNlIChmb3IgYSBUSUQgdGhhdCBwb2ludGVkCi10byBh IGRlYWQtdG8tYWxsIGhlYXAgaXRlbSBhdCBmaXJzdCkgd2FzIGNvbmN1cnJlbnRseSBtYXJrZWQg TFBfVU5VU0VEIGluCi10aGUgaGVhcCBieSBWQUNVVU0uICBUaGlzIGNvdWxkIGVhc2lseSBhbGxv dyBWQUNVVU0gdG8gc2V0IHRoZSB3aG9sZSBoZWFwCi1wYWdlIHRvIGFsbC12aXNpYmxlIGluIHRo ZSB2aXNpYmlsaXR5IG1hcCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLiAgQW4gTVZDQwotc25hcHNo b3QgaXMgb25seSBzdWZmaWNpZW50IHRvIGF2b2lkIHByb2JsZW1zIGR1cmluZyBwbGFpbiBpbmRl eCBzY2FucwotYmVjYXVzZSB0aGV5IG11c3QgYWNjZXNzIGdyYW51bGFyIHZpc2liaWxpdHkgaW5m b3JtYXRpb24gZnJvbSB0aGUgaGVhcAotcHJvcGVyLiAgQSBwbGFpbiBpbmRleCBzY2FuIHdpbGwg ZXZlbiByZWNvZ25pemUgTFBfVU5VU0VEIGl0ZW1zIGluIHRoZQotaGVhcCAoaXRlbXMgdGhhdCBj b3VsZCBiZSByZWN5Y2xlZCBidXQgaGF2ZW4ndCBiZWVuIGp1c3QgeWV0KSBhcyAibm90Ci12aXNp YmxlIiAtLSBldmVuIHdoZW4gdGhlIGhlYXAgcGFnZSBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBh bGwtdmlzaWJsZS4KLQotTFBfREVBRCBzZXR0aW5nIG9mIGluZGV4IHR1cGxlcyBieSB0aGUga2ls bF9wcmlvcl90dXBsZSBvcHRpbWl6YXRpb24KLShkZXNjcmliZWQgaW4gZnVsbCBpbiBzaW1wbGUg ZGVsZXRpb24sIGJlbG93KSBpcyBhbHNvIG1vcmUgY29tcGxpY2F0ZWQgZm9yCi1pbmRleCBzY2Fu cyB0aGF0IGRyb3AgdGhlaXIgbGVhZiBwYWdlIHBpbnMuICBXZSBtdXN0IGJlIGNhcmVmdWwgdG8g YXZvaWQKLUxQX0RFQUQtbWFya2luZyBhbnkgbmV3IGluZGV4IHR1cGxlIHRoYXQgbG9va3MgbGlr ZSBhIGtub3duLWRlYWQgaW5kZXgKLXR1cGxlIGJlY2F1c2UgaXQgaGFwcGVucyB0byBzaGFyZSB0 aGUgc2FtZSBUSUQsIGZvbGxvd2luZyBjb25jdXJyZW50IFRJRAotcmVjeWNsaW5nLiAgSXQncyBq dXN0IGFib3V0IHBvc3NpYmxlIHRoYXQgc29tZSBvdGhlciBzZXNzaW9uIGluc2VydGVkIGEKLW5l dywgdW5yZWxhdGVkIGluZGV4IHR1cGxlLCBvbiB0aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNoIGhh cyB0aGUgc2FtZQotb3JpZ2luYWwgVElELiAgSXQgd291bGQgYmUgdG90YWxseSB3cm9uZyB0byBM UF9ERUFELXNldCB0aGlzIG5ldywKK1dlIG11c3QgYXZvaWQgTFBfREVBRC1tYXJraW5nIGFueSBu ZXcgaW5kZXggdHVwbGUgdGhhdCBsb29rcyBsaWtlIGEKK2tub3duLWRlYWQgaW5kZXggdHVwbGUg YmVjYXVzZSBpdCBoYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIFRJRCwgZm9sbG93aW5nCitjb25j dXJyZW50IFRJRCByZWN5Y2xpbmcuICBJdCdzIGp1c3QgYWJvdXQgcG9zc2libGUgdGhhdCBzb21l IG90aGVyIHNlc3Npb24KK2luc2VydGVkIGEgbmV3LCB1bnJlbGF0ZWQgaW5kZXggdHVwbGUsIG9u IHRoZSBzYW1lIGxlYWYgcGFnZSwgd2hpY2ggaGFzIHRoZQorc2FtZSBvcmlnaW5hbCBUSUQuICBJ dCB3b3VsZCBiZSB0b3RhbGx5IHdyb25nIHRvIExQX0RFQUQtc2V0IHRoaXMgbmV3LAogdW5yZWxh dGVkIGluZGV4IHR1cGxlLgogCi1XZSBoYW5kbGUgdGhpcyBraWxsX3ByaW9yX3R1cGxlIHJhY2Ug Y29uZGl0aW9uIGJ5IGhhdmluZyBhZmZlY3RlZCBpbmRleAorV2UgaGFuZGxlIHRoaXMgTFBfREVB RCBzZXR0aW5nIHJhY2UgY29uZGl0aW9uIGJ5IGhhdmluZyBhbGwgaW5kZXgKIHNjYW5zIGNvbnNl cnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwK IGltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hlZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVy aW0gcGVyaW9kIHdoZW4gbm8KIGJ1ZmZlciBwaW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVu dGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9ERUFEIGJpdHMKQEAgLTczNCw3ICs3MTgsNyBAQCBv ZiByZWFkZXJzIGNvdWxkIHN0aWxsIG1vdmUgcmlnaHQgdG8gcmVjb3ZlciBpZiB3ZSBkaWRuJ3Qg Y291cGxlCiBzYW1lLWxldmVsIGxvY2tzKSwgYnV0IHdlIHByZWZlciB0byBiZSBjb25zZXJ2YXRp dmUgaGVyZS4KIAogRHVyaW5nIHJlY292ZXJ5IGFsbCBpbmRleCBzY2FucyBzdGFydCB3aXRoIGln bm9yZV9raWxsZWRfdHVwbGVzID0gZmFsc2UKLWFuZCB3ZSBuZXZlciBzZXQga2lsbF9wcmlvcl90 dXBsZS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgorYW5kIHdlIG5ldmVyIExQ X0RFQUQtbWFyayB0dXBsZXMuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KIG9u IHRoZSBzdGFuZGJ5IHNlcnZlciBjYW4gYmUgb2xkZXIgdGhhbiB0aGUgb2xkZXN0IHhtaW4gb24g dGhlIHByaW1hcnkKIHNlcnZlciwgd2hpY2ggbWVhbnMgdHVwbGVzIGNhbiBiZSBtYXJrZWQgTFBf REVBRCBldmVuIHdoZW4gdGhleSBhcmUKIHN0aWxsIHZpc2libGUgb24gdGhlIHN0YW5kYnkuIFdl IGRvbid0IFdBTCBsb2cgdHVwbGUgTFBfREVBRCBiaXRzLCBidXQKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRwYWdlLmMKaW5kZXggNzBiNTI0ZGZlLi4yODZmOTVkM2UgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cGFnZS5jCkBAIC0xMDM3LDYgKzEwMzcsOSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9u IHJlbCwgQnVmZmVyIGJ1ZikKICAqIExvY2sgaXMgYWNxdWlyZWQgd2l0aG91dCBhY3F1aXJpbmcg YW5vdGhlciBwaW4uICBUaGlzIGlzIGxpa2UgYSByYXcKICAqIExvY2tCdWZmZXIoKSBjYWxsLCBi dXQgcGVyZm9ybXMgZXh0cmEgc3RlcHMgbmVlZGVkIGJ5IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6 IGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgaGFzIHNpbWlsYXIgVmFsZ3JpbmQgYnVmZmVyIGxv Y2sKKyAqIGluc3RydW1lbnRhdGlvbiwgd2hpY2ggd2UgcmVseSBvbiBoZXJlLgorICoKICAqIE5v dGU6IENhbGxlciBtYXkgbmVlZCB0byBjYWxsIF9idF9jaGVja3BhZ2UoKSB3aXRoIGJ1ZiB3aGVu IHBpbiBvbiBidWYKICAqIHdhc24ndCBvcmlnaW5hbGx5IGFjcXVpcmVkIGluIF9idF9nZXRidWYo KSBvciBfYnRfcmVsYW5kZ2V0YnVmKCkuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVhZHBhZ2UuYwppbmRleCAyYmExY2E2NjAuLjdiMmRkNDUzMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYwpAQCAtMzIsNiArMzIsNyBAQCB0eXBlZGVmIHN0cnVjdCBC VFJlYWRQYWdlU3RhdGUKIHsKIAkvKiBJbnB1dCBwYXJhbWV0ZXJzLCBzZXQgYnkgX2J0X3JlYWRw YWdlIGZvciBfYnRfY2hlY2trZXlzICovCiAJU2NhbkRpcmVjdGlvbiBkaXI7CQkJLyogY3VycmVu dCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIGN1cnJwYWdlOwkJLyogY3VycmVudCBw YWdlIGJlaW5nIHJlYWQgKi8KIAlPZmZzZXROdW1iZXIgbWlub2ZmOwkJLyogTG93ZXN0IG5vbi1w aXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBIaWdoZXN0 IG5vbi1waXZvdCB0dXBsZSdzIG9mZnNldCAqLwogCUluZGV4VHVwbGUJZmluYWx0dXA7CQkvKiBO ZWVkZWQgYnkgc2NhbnMgd2l0aCBhcnJheSBrZXlzICovCkBAIC02MywxNCArNjQsMTMgQEAgc3Rh dGljIGJvb2wgX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJCQkgSW5kZXhUdXBsZSBmaW5hbHR1cCk7CiBzdGF0aWMg Ym9vbCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwKIAkJCQkJCQkJICBJbmRleFR1cGxlIGZpbmFsdHVwKTsKLXN0YXRpYyB2b2lkIF9i dF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkgT2Zmc2V0 TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKTsKLXN0YXRpYyBpbnQJX2J0X3NldHVwcG9z dGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKK3N0YXRpYyB2b2lkIF9i dF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQp Oworc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0 Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3Qg SXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAotCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1cCk7Ci1z dGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGlu dCBpdGVtSW5kZXgsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkJCQkJ ICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJICBJbmRl eFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9idF9z YXZlcG9zdGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9m ZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQg YmFzZU9mZnNldCk7CiBzdGF0aWMgYm9vbCBfYnRfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2Nh biwgQlRSZWFkUGFnZVN0YXRlICpwc3RhdGUsIGJvb2wgYXJyYXlLZXlzLAogCQkJCQkJICBJbmRl eFR1cGxlIHR1cGxlLCBpbnQgdHVwbmF0dHMpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNrX2NvbXBh cmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKQEAgLTExMSwxNSArMTEx LDE1IEBAIHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNj YW5EZXNjIHNjYW4pOwogCiAKIC8qCi0gKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJv bSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2J0X3JlYWRwYWdlKCkg LS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gbmV3YmF0Y2guCiAgKgot ICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgYW5kIHJlYWQtbG9ja2VkIHNvLT5jdXJyUG9zLmJ1 ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlCi0gKiBpcyBub3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgY3Vy clBvcy5tb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IG11c3QgYmUgdmFsaWQ7Ci0gKiB0aGV5IGFyZSB1 cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxsIG90aGVyIGZpZWxkcyBvZiBzby0+Y3VyclBvcyBh cmUKKyAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBuZXdiYXRjaC5i dWY7IHRoZSBidWZmZXIncyBzdGF0ZSBpcworICogbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIG5l d2JhdGNoJ3MgbW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOworICogdGhleSBh cmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2YgbmV3YmF0Y2gg YXJlCiAgKiBpbml0aWFsaXplZCBmcm9tIHNjcmF0Y2ggaGVyZS4KICAqCiAgKiBXZSBzY2FuIHRo ZSBjdXJyZW50IHBhZ2Ugc3RhcnRpbmcgYXQgb2ZmbnVtIGFuZCBtb3ZpbmcgaW4gdGhlIGluZGlj YXRlZAotICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMgYXJl IGxvYWRlZCBpbnRvIGN1cnJQb3MuaXRlbXMuCisgKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMgbWF0 Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgc2F2ZWQgaW4gbmV3YmF0Y2guaXRlbXMuCiAgKiBtb3Jl TGVmdCBvciBtb3JlUmlnaHQgKGFzIGFwcHJvcHJpYXRlKSBpcyBjbGVhcmVkIGlmIF9idF9jaGVj a2tleXMgcmVwb3J0cwogICogdGhhdCB0aGVyZSBjYW4gYmUgbm8gbW9yZSBtYXRjaGluZyB0dXBs ZXMgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KICAqIChjb3VsZCBqdXN0IGJlIGZvciB0 aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2NhbiB3aGVuIHNjYW4gaGFzIGFycmF5cykuCkBA IC0xMzEsOCArMTMxLDggQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlr ZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNoaW5n IGl0ZW1zIGZvdW5kIG9uIHRoZSBwYWdlLCBmYWxzZSBpZiBub25lLgogICovCiBib29sCi1fYnRf cmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVt YmVyIG9mZm51bSwKLQkJCSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJ CSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwg PSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKQEAgLTE0NCwyMyArMTQ0LDIwIEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCWJv b2wJCWFycmF5S2V5cywKIAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9yZV9r aWxsZWRfdHVwbGVzOwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9IDAsCiAJ CQkJaW5kbmF0dHM7CiAKIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIsIGFs b25nIHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+ Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKG5ld2JhdGNoLT5idWYpOwogCW9w YXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1 ZmZlckdldEJsb2NrTnVtYmVyKHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MucHJldlBh Z2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKLQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+ YnRwb19uZXh0OwotCS8qIGRlbGF5IHNldHRpbmcgc28tPmN1cnJQb3MubHNuIHVudGlsIF9idF9k cm9wX2xvY2tfYW5kX21heWJlX3BpbiAqLwotCXBzdGF0ZS5kaXIgPSBzby0+Y3VyclBvcy5kaXIg PSBkaXI7Ci0Jc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ID0gMDsKKwlwc3RhdGUuY3VycnBh Z2UgPSBuZXdiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihuZXdiYXRjaC0+ YnVmKTsKKwluZXdiYXRjaC0+cHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKKwluZXdiYXRj aC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKKwlwc3RhdGUuZGlyID0gbmV3YmF0Y2gt PmRpciA9IGRpcjsKIAogCS8qIGVpdGhlciBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgc2hvdWxkIGJl IHNldCBub3cgKG1heSBiZSB1bnNldCBsYXRlcikgKi8KLQlBc3NlcnQoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8gc28tPmN1cnJQb3MubW9yZVJpZ2h0IDoKLQkJICAgc28tPmN1cnJQb3Mu bW9yZUxlZnQpOworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPyBuZXdiYXRj aC0+bW9yZVJpZ2h0IDogbmV3YmF0Y2gtPm1vcmVMZWZ0KTsKIAlBc3NlcnQoIVBfSUdOT1JFKG9w YXF1ZSkpOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwogCUFzc2Vy dCghc28tPm5lZWRQcmltU2Nhbik7CiAKIAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAq LwpAQCAtMTg4LDE0ICsxODUsMTIgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJewogCQkvKiBhbGxvdyBu ZXh0L3ByZXYgcGFnZSB0byBiZSByZWFkIGJ5IG90aGVyIHdvcmtlciB3aXRob3V0IGRlbGF5ICov CiAJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCQlfYnRfcGFyYWxsZWxfcmVs ZWFzZShzY2FuLCBzby0+Y3VyclBvcy5uZXh0UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1 cnJQYWdlKTsKKwkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoLT5uZXh0UGFn ZSwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJZWxzZQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uo c2Nhbiwgc28tPmN1cnJQb3MucHJldlBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFn ZSk7CisJCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2FuLCBuZXdiYXRjaC0+cHJldlBhZ2UsIG5l d2JhdGNoLT5jdXJyUGFnZSk7CiAJfQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3Vy clBvcy5jdXJyUGFnZSwgc2Nhbi0+eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJl bCwgcHN0YXRlLmN1cnJwYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpKQogCXsKQEAgLTIxMiwxMSArMjA3LDEwIEBAIF9idF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2Zm bnVtLAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZp bmFsdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4 IHNjYW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOwor CQkJCQluZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4g PSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJCQkJCV9idF9wYXJhbGxl bF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1 cnJQYWdlKTsKKwkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBuZXdi YXRjaC0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtMjgw LDI2ICsyNzQsMjYgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJaWYgKCFCVHJlZVR1cGxlSXNQb3N0 aW5nKGl0dXApKQogCQkJCXsKIAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KLQkJCQkJX2J0X3NhdmVp dGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdi YXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJCWl0ZW1J bmRleCsrOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJewotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsK KwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0 YXRlIChhbmQgcmVtZW1iZXIgZmlyc3QgVElEKSAqLwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJ CQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNl T2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4 LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIDApLAot CQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJ CQkJCWl0ZW1JbmRleCsrOwogCiAJCQkJCS8qIFJlbWVtYmVyIGFsbCBsYXRlciBUSURzIChtdXN0 IGJlIGF0IGxlYXN0IG9uZSkgKi8KIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBCVHJlZVR1cGxl R2V0TlBvc3RpbmcoaXR1cCk7IGkrKykKIAkJCQkJewotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRl bShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2Jh dGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdO KGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZz ZXQpOwogCQkJCQkJaXRlbUluZGV4Kys7CiAJCQkJCX0KIAkJCQl9CkBAIC0zMzksMTIgKzMzMywx MSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwg T2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJfQogCiAJCWlmICghcHN0YXRlLmNvbnRpbnVlc2NhbikK LQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJbmV3YmF0Y2gtPm1vcmVSaWdo dCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVlUGFnZSk7 Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0g aXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJbmV3YmF0Y2gt PmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJ fQogCWVsc2UKIAl7CkBAIC0zNjEsMTEgKzM1NCwxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJ IV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJ CQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVy IGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJCQluZXdiYXRj aC0+bW9yZUxlZnQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJ CWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQotCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3Nj aGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJ CQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIG5ld2JhdGNoLT5jdXJyUGFn ZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC00NjYsMjcgKzQ1OCwyNyBA QCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCiAJCQkJCWl0 ZW1JbmRleC0tOwotCQkJCQlfYnRfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVw KTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwg JnR1cGxlT2Zmc2V0KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKIAkJCQkJdWludDE2CQluaXRl bXMgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cCk7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0 OworCQkJCQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qg c3RhdGUgKGFuZCByZW1lbWJlciBsYXN0IFRJRCkgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJ CXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4 LCBvZmZudW0sCisJCQkJCWJhc2VPZmZzZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1z KG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0 UG9zdGluZ04oaXR1cCwgbml0ZW1zIC0gMSksCi0JCQkJCQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJ CQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAogCQkJCQkvKiBSZW1lbWJlciBhbGwgcHJpb3Ig VElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAoaW50IGkgPSBuaXRlbXMg LSAyOyBpID49IDA7IGktLSkKIAkJCQkJewogCQkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCQlfYnRf c2F2ZXBvc3RpbmdpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9z dGluZ2l0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1 cGxlR2V0UG9zdGluZ04oaXR1cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJ CQkJCQkJYmFzZU9mZnNldCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC01MDIsMTIgKzQ5NCwx MSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwg T2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJICogYmUgZm91bmQgdGhlcmUKIAkJICovCiAJCWlmICgh cHN0YXRlLmNvbnRpbnVlc2NhbikKLQkJCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gZmFsc2U7CisJ CQluZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDAp OwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxh c3RJdGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRl eCA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gaXRl bUluZGV4OworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsK IAl9CiAKIAkvKgpAQCAtNTI0LDcgKzUxNSw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAqLwogCUFz c2VydCghcHN0YXRlLmZvcmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3VyclBvcy5m aXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0Y2gtPmZp cnN0SXRlbSA8PSBuZXdiYXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAyNyw5MCArMTAx OCw5OSBAQCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGlu dG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVt IGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9zYXZl aXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2Jh dGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVwbGUg aXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZz by0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZv dChpdHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVh cFRpZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlp ZiAoc28tPmN1cnJUdXBsZXMpCisJLyogY29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0 ZW1zIGFycmF5ICovCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZCA9IGl0dXAt PnRfdGlkOworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmluZGV4T2Zmc2V0ID0gb2ZmbnVt OworCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmNoZWNrZWRWaXNpYmxlID0gZmFsc2U7CisJ bmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uYWxsVmlzaWJsZSA9IGZhbHNlOworCisJaWYgKG5l d2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJU2l6ZQkJaXR1cHN6ID0gSW5kZXhUdXBsZVNpemUo aXR1cCk7CiAKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxl T2Zmc2V0OwotCQltZW1jcHkoc28tPmN1cnJUdXBsZXMgKyBzby0+Y3VyclBvcy5uZXh0VHVwbGVP ZmZzZXQsIGl0dXAsIGl0dXBzeik7Ci0JCXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBN QVhBTElHTihpdHVwc3opOworCQluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50dXBsZU9mZnNl dCA9ICp0dXBsZU9mZnNldDsKKwkJbWVtY3B5KG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1cGxl T2Zmc2V0LCBpdHVwLCBpdHVwc3opOworCQkqdHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6 KTsKIAl9CiB9CiAKIC8qCiAgKiBTZXR1cCBzdGF0ZSB0byBzYXZlIFRJRHMvaXRlbXMgZnJvbSBh IHNpbmdsZSBwb3N0aW5nIGxpc3QgdHVwbGUuCiAgKgotICogU2F2ZXMgYW4gaW5kZXggaXRlbSBp bnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzCi0gKiByZXR1 cm5lZCB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGlu ZyBsaXN0IHNob3VsZAotICogYmUgc2F2ZWQgYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVt KCkuCisgKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4 XSBmb3IgVElEIHRoYXQgaXMgcmV0dXJuZWQKKyAqIHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Ig c3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxpc3Qgc2hvdWxkIGJlIHNhdmVkCisgKiBieSBj YWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4KICAqCi0gKiBSZXR1cm5zIGFuIG9mZnNldCBp bnRvIHR1cGxlIHN0b3JhZ2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzIHN0b3JlZCBhdCBpZgot ICogbmVlZGVkLgorICogUmV0dXJucyBiYXNlT2Zmc2V0LCBhbiBvZmZzZXQgaW50byB0dXBsZSBz dG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcworICogc3RvcmVkIGF0IGlmIG5lZWRlZC4K ICAqLwogc3RhdGljIGludAotX2J0X3NldHVwcG9zdGluZ2l0ZW1zKEJUU2Nhbk9wYXF1ZSBzbywg aW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJICBjb25zdCBJdGVtUG9p bnRlckRhdGEgKmhlYXBUaWQsIEluZGV4VHVwbGUgaXR1cCkKK19idF9zZXR1cHBvc3RpbmdpdGVt cyhJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwKKwkJCQkJICBPZmZzZXRO dW1iZXIgb2ZmbnVtLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKmhlYXBUaWQsCisJCQkJCSAgSW5k ZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJ dGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0g Kml0ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQoQlRyZWVUdXBs ZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1 cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJLyog Y29weSB0aGUgcG9wdWxhdGVkIHBhcnQgb2YgdGhlIGl0ZW1zIGFycmF5ICovCisJaXRlbS0+aGVh cFRpZCA9ICpoZWFwVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWl0ZW0tPmNo ZWNrZWRWaXNpYmxlID0gZmFsc2U7CisJaXRlbS0+YWxsVmlzaWJsZSA9IGZhbHNlOworCisJaWYg KG5ld2JhdGNoLT5jdXJyVHVwbGVzKQogCXsKIAkJLyogU2F2ZSBiYXNlIEluZGV4VHVwbGUgKHRy dW5jYXRlIHBvc3RpbmcgbGlzdCkgKi8KIAkJSW5kZXhUdXBsZQliYXNlOwogCQlTaXplCQlpdHVw c3ogPSBCVHJlZVR1cGxlR2V0UG9zdGluZ09mZnNldChpdHVwKTsKIAogCQlpdHVwc3ogPSBNQVhB TElHTihpdHVwc3opOwotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0 VHVwbGVPZmZzZXQ7Ci0JCWJhc2UgPSAoSW5kZXhUdXBsZSkgKHNvLT5jdXJyVHVwbGVzICsgc28t PmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSAqdHVwbGVP ZmZzZXQ7CisJCWJhc2UgPSAoSW5kZXhUdXBsZSkgKG5ld2JhdGNoLT5jdXJyVHVwbGVzICsgKnR1 cGxlT2Zmc2V0KTsKIAkJbWVtY3B5KGJhc2UsIGl0dXAsIGl0dXBzeik7CiAJCS8qIERlZmVuc2l2 ZWx5IHJlZHVjZSB3b3JrIGFyZWEgaW5kZXggdHVwbGUgaGVhZGVyIHNpemUgKi8KIAkJYmFzZS0+ dF9pbmZvICY9IH5JTkRFWF9TSVpFX01BU0s7CiAJCWJhc2UtPnRfaW5mbyB8PSBpdHVwc3o7Ci0J CXNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCArPSBpdHVwc3o7CisJCSp0dXBsZU9mZnNldCAr PSBpdHVwc3o7CiAKLQkJcmV0dXJuIGN1cnJJdGVtLT50dXBsZU9mZnNldDsKKwkJcmV0dXJuIGl0 ZW0tPnR1cGxlT2Zmc2V0OwogCX0KIAogCXJldHVybiAwOwogfQogCiAvKgotICogU2F2ZSBhbiBp bmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBw b3N0aW5nCisgKiBTYXZlIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5k ZXhdIGZvciBjdXJyZW50IHBvc3RpbmcKICAqIHR1cGxlLgogICoKICAqIEFzc3VtZXMgdGhhdCBf YnRfc2V0dXBwb3N0aW5naXRlbXMoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgY3VycmVu dAotICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBpdHMgcmV0dXJuIHZhbHVl IGFzIHR1cGxlT2Zmc2V0LgorICogcG9zdGluZyBsaXN0IHR1cGxlLiAgQ2FsbGVyIHBhc3NlcyBp dHMgcmV0dXJuIHZhbHVlIGFzIGJhc2VPZmZzZXQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAot X2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNl dE51bWJlciBvZmZudW0sCi0JCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGludCB0dXBsZU9mZnNl dCkKK19idF9zYXZlcG9zdGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVt SW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCUl0ZW1Qb2ludGVyIGhlYXBUaWQsIGlu dCBiYXNlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9z Lml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1 cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7 CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisJaXRlbS0+Y2hlY2tlZFZpc2libGUgPSBm YWxzZTsKKwlpdGVtLT5hbGxWaXNpYmxlID0gZmFsc2U7CiAKIAkvKgogCSAqIEhhdmUgaW5kZXgt b25seSBzY2FucyByZXR1cm4gdGhlIHNhbWUgYmFzZSBJbmRleFR1cGxlIGZvciBldmVyeSBUSUQK IAkgKiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2FtZSBwb3N0aW5nIGxpc3QKIAkgKi8KLQlp ZiAoc28tPmN1cnJUdXBsZXMpCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHR1cGxlT2Zmc2V0 OworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKKwkJaXRlbS0+dHVwbGVPZmZzZXQgPSBiYXNl T2Zmc2V0OwogfQogCiAjZGVmaW5lIExPT0tfQUhFQURfUkVRVUlSRURfUkVDSEVDS1MgCTMKQEAg LTI4MjIsMTMgKzI4MjIsMTMgQEAgbmV3X3ByaW1fc2NhbjoKIAkgKiBOb3RlOiBXZSBtYWtlIGEg c29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gd2lsbAogCSAq IGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0X25leHQsIHdoZW4gaXQgaXMgYXNrZWQgdG8gc3RlcCBv ZmYgdGhpcyBwYWdlLgogCSAqIEl0IGlzIHVwIHRvIF9idF9uZXh0IHRvIGNhbmNlbCB0aGlzIHNj aGVkdWxlZCBwcmltaXRpdmUgaW5kZXggc2NhbgotCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEg cGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIGN1cnJQb3MuZGlyLgorCSAqIHdoZW5ldmVy IGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9zaXRlIHBzdGF0ZS0+ZGly LgogCSAqLwogCXBzdGF0ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRw YWdlIHdlJ3JlIGRvbmUuLi4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsJLyogLi4uYnV0 IGNhbGwgX2J0X2ZpcnN0IGFnYWluICovCiAKIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJ X2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHNvLT5jdXJyUG9zLmN1cnJQYWdl KTsKKwkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHBzdGF0ZS0+Y3VycnBh Z2UpOwogCiAJLyogQ2FsbGVyJ3MgdHVwbGUgZG9lc24ndCBtYXRjaCB0aGUgbmV3IHF1YWwgKi8K IAlyZXR1cm4gZmFsc2U7CkBAIC0yOTEzLDE0ICsyOTEzLDYgQEAgX2J0X2FkdmFuY2VfYXJyYXlf a2V5c19pbmNyZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkg KiBSZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgaW4gaW1tZWRp YXRlbHkgYmVmb3JlIHdlCiAJICogd2VyZSBjYWxsZWQuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUg YXJyYXlzIG9ubHkgZXZlciByYXRjaGV0IGluIHRoZQogCSAqIGN1cnJlbnQgc2NhbiBkaXJlY3Rp b24uCi0JICoKLQkgKiBXaXRob3V0IHRoaXMsIHNjYW5zIGNvdWxkIG92ZXJsb29rIG1hdGNoaW5n IHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0JICogZGlyZWN0aW9uIGdldHMgcmV2ZXJzZWQganVzdCBi ZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91dCBvZiBpdGVtcyB0bwotCSAqIHJldHVybiwgYnV0IGp1 c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHByZXBhcmVzIGFsbCB0aGUgaXRlbXMgZnJvbSB0aGUKLQkg KiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBzby0+Y3VyclBvcy4gIFdoZW4gd2UncmUgb24gdGhlIGZp bmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBpY2FsIGZvciBzby0+Y3VyclBvcyB0byBnZXQgaW52YWxp ZGF0ZWQgb25jZSBidGdldHR1cGxlIGZpbmFsbHkKLQkgKiByZXR1cm5zIGZhbHNlLCB3aGljaCds bCBlZmZlY3RpdmVseSBpbnZhbGlkYXRlIHRoZSBzY2FuJ3MgYXJyYXkga2V5cy4KLQkgKiBUaGF0 IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRob3VnaCAtLSBhbmQgaW4gZ2VuZXJhbCBpdCBtYXkgbmV2 ZXIgaGFwcGVuLgogCSAqLwogCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIC1kaXIpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwppbmRleCA4ZDYzNmQ5ODYuLjg1NjEzMTYzYSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCkBAIC0xNTksMTEgKzE1OSwxMiBAQCBidGhhbmRs ZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGJ0YWRqdXN0bWVtYmVy cywKIAkJLmFtYmVnaW5zY2FuID0gYnRiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJ0cmVzY2Fu LAotCQkuYW1nZXR0dXBsZSA9IGJ0Z2V0dHVwbGUsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJ LmFtZ2V0YmF0Y2ggPSBidGdldGJhdGNoLAorCQkuYW1mcmVlYmF0Y2ggPSBidGZyZWViYXRjaCwK IAkJLmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBidGVuZHNjYW4s Ci0JCS5hbW1hcmtwb3MgPSBidG1hcmtwb3MsCi0JCS5hbXJlc3RycG9zID0gYnRyZXN0cnBvcywK KwkJLmFtcG9zcmVzZXQgPSBidHBvc3Jlc2V0LAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9 IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4sCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBidGluaXRw YXJhbGxlbHNjYW4sCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gYnRwYXJhbGxlbHJlc2NhbiwKQEAg LTIyMiwxMyArMjIzLDEzIEBAIGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywg Ym9vbCAqaXNudWxsLAogfQogCiAvKgotICoJYnRnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0 dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5l eHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJvb2wKLWJ0Z2V0dHVwbGUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitidGdl dGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2Nh bkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IHByaW9yYmF0 Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOwogCkBAIC0yNDEsNDUg KzI0MiwyMCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCS8qCiAJCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3 ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluCiAJCSAqIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24u ICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsCi0JCSAqIF9idF9maXJzdCgpIHRv IGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KKwkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0 IHRoZSBmaXJzdCBiYXRjaCBpbiB0aGUgc2Nhbi4KIAkJICovCi0JCWlmICghQlRTY2FuUG9zSXNW YWxpZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKKwkJaWYg KGJhdGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9maXJzdChzY2FuLCBkaXIpOwogCQllbHNl Ci0JCXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHBy ZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwotCQkJaWYgKHNjYW4tPmtpbGxfcHJpb3Jf dHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4g KFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAqIHR1cGxlcyBhdCBvbmNlIHJpZ2h0IGJl Zm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRoZQotCQkJCSAqIHRlc3QgZm9yIG51bUtp bGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lhOiBpZiB0aGUKLQkJCQkgKiBjYWxsZXIg cmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNjYW4gdGhlbiB0aGUgc2FtZQotCQkJCSAq IGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuIEl0J3Mgbm90IHdvcnRoCi0J CQkJICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNvIHdlIGRvbid0IGRldGVjdCBpdCwgYnV0 IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkgZXhjZXNzIGVudHJpZXMuCi0JCQkJICov Ci0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJCQlzby0+a2lsbGVkSXRlbXMg PSBwYWxsb2NfYXJyYXkoaW50LCBNYXhUSURzUGVyQlRyZWVQYWdlKTsKLQkJCQlpZiAoc28tPm51 bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+ bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OwotCQkJfQorCQkJYmF0Y2ggPSBf YnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoKLQkJCSAqIE5vdyBjb250aW51ZSB0 aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2NhbiwgZGlyKTsKLQkJfQotCi0J CS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4uLiAqLwotCQlpZiAocmVzKQorCQkv KiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4gKi8KKwkJaWYgKGJhdGNoKQogCQkJ YnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdlIG5lZWQgYW5vdGhlciBwcmltaXRp dmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1BcnJheUtleXMgJiYgX2J0X3N0YXJ0 X3ByaW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4gcmVzOworCXJldHVybiBiYXRjaDsKIH0KIAog LyoKQEAgLTI4OSw2ICsyNjUsNyBAQCBpbnQ2NAogYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBz Y2FuLCBUSURCaXRtYXAgKnRibSkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50aWRzID0g MDsKIAlJdGVtUG9pbnRlciBoZWFwVGlkOwogCkBAIC0yOTcsMjkgKzI3NCwyOSBAQCBidGdldGJp dG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCS8qIEVhY2ggbG9vcCBp dGVyYXRpb24gcGVyZm9ybXMgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCWRvCiAJ ewotCQkvKiBGZXRjaCB0aGUgZmlyc3QgcGFnZSAmIHR1cGxlICovCi0JCWlmIChfYnRfZmlyc3Qo c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKQorCQkvKiBGZXRjaCB0aGUgZmlyc3QgYmF0Y2gg Ki8KKwkJaWYgKChiYXRjaCA9IF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikp KQogCQl7Ci0JCQkvKiBTYXZlIHR1cGxlIElELCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8KLQkJ CWhlYXBUaWQgPSAmc2Nhbi0+eHNfaGVhcHRpZDsKKwkJCWludAkJCWl0ZW1JbmRleCA9IDA7CisK KwkJCS8qIFNhdmUgZmlyc3QgdHVwbGUncyBUSUQgKi8KKwkJCWhlYXBUaWQgPSAmYmF0Y2gtPml0 ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsKIAkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwg MSwgZmFsc2UpOwogCQkJbnRpZHMrKzsKIAogCQkJZm9yICg7OykKIAkJCXsKLQkJCQkvKgotCQkJ CSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSB3aXRoaW4gcGFnZS4gIFRoaXMgaXMgdGhlIHNhbWUg YXMgdGhlCi0JCQkJICogZWFzeSBjYXNlIGluIF9idF9uZXh0KCkuCi0JCQkJICovCi0JCQkJaWYg KCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCisJCQkJLyog QWR2YW5jZSB0byBuZXh0IFRJRCB3aXRoaW4gcGFnZS1zaXplZCBiYXRjaCAqLworCQkJCWlmICgr K2l0ZW1JbmRleCA+IGJhdGNoLT5sYXN0SXRlbSkKIAkJCQl7CiAJCQkJCS8qIGxldCBfYnRfbmV4 dCBkbyB0aGUgaGVhdnkgbGlmdGluZyAqLwotCQkJCQlpZiAoIV9idF9uZXh0KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uKSkKKwkJCQkJaXRlbUluZGV4ID0gMDsKKwkJCQkJYmF0Y2ggPSBfYnRf bmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOworCQkJCQlpZiAoIWJhdGNo KQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCi0JCQkJLyogU2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRp bnVlIHNjYW5uaW5nICovCi0JCQkJaGVhcFRpZCA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3Vy clBvcy5pdGVtSW5kZXhdLmhlYXBUaWQ7CisJCQkJaGVhcFRpZCA9ICZiYXRjaC0+aXRlbXNbaXRl bUluZGV4XS5oZWFwVGlkOwogCQkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwgZmFs c2UpOwogCQkJCW50aWRzKys7CiAJCQl9CkBAIC0zNDcsOCArMzI0LDYgQEAgYnRiZWdpbnNjYW4o UmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAKIAkvKiBhbGxvY2F0ZSBw cml2YXRlIHdvcmtzcGFjZSAqLwogCXNvID0gcGFsbG9jX29iamVjdChCVFNjYW5PcGFxdWVEYXRh KTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlk YXRlKHNvLT5tYXJrUG9zKTsKIAlpZiAoc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJc28tPmtl eURhdGEgPSAoU2NhbktleSkgcGFsbG9jKHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2Fu S2V5RGF0YSkpOwogCWVsc2UKQEAgLTM2MiwxOSArMzM3LDkgQEAgYnRiZWdpbnNjYW4oUmVsYXRp b24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc28tPm9yZGVyUHJvY3MgPSBOVUxM OwogCXNvLT5hcnJheUNvbnRleHQgPSBOVUxMOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsJ CS8qIHVudGlsIG5lZWRlZCAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBk b24ndCBrbm93IHlldCB3aGV0aGVyIHRoZSBzY2FuIHdpbGwgYmUgaW5kZXgtb25seSwgc28gd2Ug ZG8gbm90Ci0JICogYWxsb2NhdGUgdGhlIHR1cGxlIHdvcmtzcGFjZSBhcnJheXMgdW50aWwgYnRy ZXNjYW4uICBIb3dldmVyLCB3ZSBzZXQgdXAKLQkgKiBzY2FuLT54c19pdHVwZGVzYyB3aGV0aGVy IHdlJ2xsIG5lZWQgaXQgb3Igbm90LCBzaW5jZSB0aGF0J3Mgc28gY2hlYXAuCi0JICovCi0Jc28t PmN1cnJUdXBsZXMgPSBzby0+bWFya1R1cGxlcyA9IE5VTEw7Ci0KLQlzY2FuLT54c19pdHVwZGVz YyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKLQogCXNjYW4tPm9wYXF1ZSA9IHNvOworCXNjYW4t PnhzX2l0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCXNjYW4tPm1heGl0ZW1zYmF0 Y2ggPSBNYXhUSURzUGVyQlRyZWVQYWdlOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zODgsNjQg KzM1MywzMyBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwg aW50IG5zY2Fua2V5cywKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2Fu LT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdv dHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp Ci0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2ls bGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMo c2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQlCVFNjYW5Q b3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9Ci0KLQkvKgotCSAqIFdlIHByZWZlciB0byBl YWdlcmx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgYmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucy4KLQkg KiBUaGlzIGF2b2lkcyBtYWtpbmcgVkFDVVVNIHdhaXQgdG8gYWNxdWlyZSBhIGNsZWFudXAgbG9j ayBvbiB0aGUgcGFnZS4KLQkgKgotCSAqIFdlIGNhbm5vdCBzYWZlbHkgZHJvcCBsZWFmIHBhZ2Ug cGlucyBkdXJpbmcgaW5kZXgtb25seSBzY2FucyBkdWUgdG8gYQotCSAqIHJhY2UgY29uZGl0aW9u IGludm9sdmluZyBWQUNVVU0gc2V0dGluZyBwYWdlcyBhbGwtdmlzaWJsZSBpbiB0aGUgVk0uCi0J ICogSXQncyBhbHNvIHVuc2FmZSBmb3IgcGxhaW4gaW5kZXggc2NhbnMgdGhhdCB1c2UgYSBub24t TVZDQyBzbmFwc2hvdC4KLQkgKgotCSAqIEFsc28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBh Z2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUg aGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIK LQkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNx dWlyaW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAqIFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24g bWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28t PmRyb3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5nZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYmCi0JCQkJICAgSXNNVkNDU25hcHNob3Qo c2Nhbi0+eHNfc25hcHNob3QpICYmCi0JCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwp OwotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7 Ci0Jc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKLQlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNl OwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1hcmtQb3MpOwotCUJUU2NhblBvc0ludmFs aWRhdGUoc28tPm1hcmtQb3MpOwotCi0JLyoKLQkgKiBBbGxvY2F0ZSB0dXBsZSB3b3Jrc3BhY2Ug YXJyYXlzLCBpZiBuZWVkZWQgZm9yIGFuIGluZGV4LW9ubHkgc2NhbiBhbmQKLQkgKiBub3QgYWxy ZWFkeSBkb25lIGluIGEgcHJldmlvdXMgcmVzY2FuIGNhbGwuICBUbyBzYXZlIG9uIHBhbGxvYwot CSAqIG92ZXJoZWFkLCBib3RoIHdvcmtzcGFjZXMgYXJlIGFsbG9jYXRlZCBhcyBvbmUgcGFsbG9j IGJsb2NrOyBvbmx5IHRoaXMKLQkgKiBmdW5jdGlvbiBhbmQgYnRlbmRzY2FuIGtub3cgdGhhdC4K LQkgKi8KLQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNvLT5jdXJyVHVwbGVzID09IE5VTEwp Ci0JewotCQlzby0+Y3VyclR1cGxlcyA9IChjaGFyICopIHBhbGxvYyhCTENLU1ogKiAyKTsKLQkJ c28tPm1hcmtUdXBsZXMgPSBzby0+Y3VyclR1cGxlcyArIEJMQ0tTWjsKLQl9Ci0KIAkvKgogCSAq IFJlc2V0IHRoZSBzY2FuIGtleXMKIAkgKi8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJP ZktleXMgPiAwKQogCQltZW1jcHkoc2Nhbi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVy T2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNl OworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxz ZTsKIAlzby0+bnVtYmVyT2ZLZXlzID0gMDsJCS8qIHVudGlsIF9idF9wcmVwcm9jZXNzX2tleXMg c2V0cyBpdCAqLwogCXNvLT5udW1BcnJheUtleXMgPSAwOwkJLyogZGl0dG8gKi8KIH0KIAorLyoK KyAqCWJ0ZnJlZWJhdGNoKCkgLS0gRnJlZSBiYXRjaCByZXNvdXJjZXMKKyAqLwordm9pZAorYnRm cmVlYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkv KiBUYWJsZSBBTSBzaG91bGQgaGF2ZSBhbHJlYWR5IHJlbGVhc2VkIGJhdGNoIHBhZ2UncyBwaW4g Ynkgbm93ICovCisJQXNzZXJ0KCFCdWZmZXJJc1ZhbGlkKGJhdGNoLT5idWYpKTsKKworCWlmIChi YXRjaC0+bnVtS2lsbGVkID4gMCkKKwkJX2J0X2tpbGxpdGVtcyhzY2FuLCBiYXRjaCk7CisKKwlp bmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBiYXRjaCk7Cit9CisKIC8qCiAgKglidGVu ZHNjYW4oKSAtLSBjbG9zZSBkb3duIGEgc2NhbgogICovCkBAIC00NTQsMTE2ICszODgsNjIgQEAg YnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVh ZCBsb2NrcywgYnV0IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxp ZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRl YWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJ CV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQ b3MpOwotCX0KLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JQlRTY2FuUG9zVW5waW5JZlBp bm5lZChzby0+bWFya1Bvcyk7Ci0KLQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgcG9zaXRpb25z LCB0aGUgUkFNIGlzIGFib3V0IHRvIGJlIGZyZWVkLiAqLwotCiAJLyogUmVsZWFzZSBzdG9yYWdl ICovCiAJaWYgKHNvLT5rZXlEYXRhICE9IE5VTEwpCiAJCXBmcmVlKHNvLT5rZXlEYXRhKTsKIAkv KiBzby0+YXJyYXlLZXlzIGFuZCBzby0+b3JkZXJQcm9jcyBhcmUgaW4gYXJyYXlDb250ZXh0ICov CiAJaWYgKHNvLT5hcnJheUNvbnRleHQgIT0gTlVMTCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShz by0+YXJyYXlDb250ZXh0KTsKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVl KHNvLT5raWxsZWRJdGVtcyk7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzICE9IE5VTEwpCi0JCXBmcmVl KHNvLT5jdXJyVHVwbGVzKTsKLQkvKiBzby0+bWFya1R1cGxlcyBzaG91bGQgbm90IGJlIHBmcmVl J2QsIHNlZSBidHJlc2NhbiAqLwogCXBmcmVlKHNvKTsKIH0KIAogLyoKLSAqCWJ0bWFya3Bvcygp IC0tIHNhdmUgY3VycmVudCBzY2FuIHBvc2l0aW9uCisgKglidHBvc3Jlc2V0KCkgLS0gcmVzZXQg YXJyYXkga2V5IHN0YXRlIGZvciBzY2FuIHBvc2l0aW9uIGNoYW5nZQorICoKKyAqIENhbGxlZCBi eSB0aGUgY29yZSBzeXN0ZW0gd2hlbiB0aGUgc2NhbidzIGxvZ2ljYWwgcG9zaXRpb24gaXMgYWJv dXQgdG8KKyAqIGNoYW5nZSBpbiBhIHdheSB0aGF0IGludmFsaWRhdGVzIG91ciBhcnJheSBrZXkg c3RhdGUuICBUaGlzIGhhcHBlbnMgd2hlbgorICogcmVzdG9yaW5nIGEgbWFya2VkIHBvc2l0aW9u LCBvciB3aGVuIHRoZSBzY2FuIGNyb3NzZXMgYSBiYXRjaCBib3VuZGFyeQorICogd2hpbGUgbW92 aW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlIG9uZSBvcmlnaW5hbGx5IHVzZWQu CisgKgorICogRm9yIGRpcmVjdGlvbiBjaGFuZ2VzLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZl IGFscmVhZHkgZmxpcHBlZCB0aGUKKyAqIGJhdGNoJ3MgZGlyIGZpZWxkIGJlZm9yZSBjYWxsaW5n IGhlcmU7IHdlIHVzZSB0aGlzIHVwZGF0ZWQgZGlyZWN0aW9uIHdoZW4KKyAqIHJlc2V0dGluZyBv dXIgYXJyYXkga2V5cy4gIEZvciBtYXJrIHJlc3RvcmF0aW9uLCB0aGUgYmF0Y2gncyBkaXIgd2ls bAorICogcmV0YWluIGl0cyBvcmlnaW5hbCB2YWx1ZSAoZnJvbSB3aGVuIGJ0Z2V0YmF0Y2ggcmV0 dXJuZWQgaXQpLgogICovCiB2b2lkCi1idG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorYnRw b3NyZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIFRoZXJl IG1heSBiZSBhbiBvbGQgbWFyayB3aXRoIGEgcGluIChidXQgbm8gbG9jaykuICovCi0JQlRTY2Fu UG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7CisJaWYgKCFzby0+bnVtQXJyYXlLZXlzKQor CQlyZXR1cm47CiAKIAkvKgotCSAqIEp1c3QgcmVjb3JkIHRoZSBjdXJyZW50IGl0ZW1JbmRleC4g IElmIHdlIGxhdGVyIHN0ZXAgdG8gbmV4dCBwYWdlCi0JICogYmVmb3JlIHJlbGVhc2luZyB0aGUg bWFya2VkIHBvc2l0aW9uLCBfYnRfc3RlcHBhZ2UgbWFrZXMgYSBmdWxsIGNvcHkgb2YKLQkgKiB0 aGUgY3VyclBvcyBzdHJ1Y3QgaW4gbWFya1Bvcy4gIElmIChhcyBvZnRlbiBoYXBwZW5zKSB0aGUg bWFyayBpcyBtb3ZlZAotCSAqIGJlZm9yZSB3ZSBsZWF2ZSB0aGUgcGFnZSwgd2UgZG9uJ3QgaGF2 ZSB0byBkbyB0aGF0IHdvcmsuCisJICogUmVzZXQgYXJyYXkga2V5cyB0byBpbml0aWFsIHN0YXRl IGZvciB0aGUgYmF0Y2gncyBzY2FuIGRpcmVjdGlvbi4gIEFsc28KKwkgKiBjbGVhciBuZWVkUHJp bVNjYW4gYW5kIHJlbGF0ZWQgZmxhZ3MuICBUaGVzZSB3ZXJlIHNldCBiYXNlZCBvbiB0aGUgc29m dAorCSAqIGFzc3VtcHRpb24gdGhhdCB0aGUgc2NhbiB3b3VsZCBhbHdheXMgcHJvY2VlZCBpbiB0 aGUgc2FtZSBkaXJlY3Rpb24uCisJICoKKwkgKiBUaGVzZSBzdGVwcyB3b3JrIGFyb3VuZCB0aGUg c29mdCBhc3N1bXB0aW9uIGJlaW5nIHZpb2xhdGVkOiB0aGV5IGZvcmNlCisJICogdGhlIHNjYW4g dG8gc3RlcCB0byB0aGUgbmV4dC9wcmV2aW91cyBwYWdlLCBtYWtpbmcgdGhlIGFycmF5cyByZWNv dmVyLgorCSAqIFdoZW4gd2UgZ28gdG8gcmVhZCB0aGF0IHBhZ2UsIF9idF9yZWFkcGFnZSB3aWxs IHJlbGlhYmx5IGRldGVybWluZSBpZiBhCisJICogcHJpbWl0aXZlIHNjYW4gcmVhbGx5IGlzIG5l ZWRlZCBiYXNlZCBvbiB0aGUgcGFnZSdzIHR1cGxlcy4gIElmIHRoZXJlJ3MKKwkgKiBhIHByaW1p dGl2ZSBzY2FuLCBpdCB3aWxsIHJlcG9zaXRpb24gdGhlIHNjYW4gdXNpbmcgbmV3IGFycmF5IHZh bHVlcworCSAqIChiYXNlZCBvbiB0aGUgdHVwbGVzIGZyb20gdGhlIG5laWdoYm9yaW5nIHBhZ2Ug d2UnbGwgc3RlcCBvbiB0bykuCisJICoKKwkgKiBXZSBuZWVkIHRvIHJlc2V0IHRoZSBhcnJheSBr ZXkgc3RhdGUgaW4gdGhlIGNvcnJlY3QgZGlyZWN0aW9uIHNvIHRoYXQKKwkgKiB3ZSB3b24ndCBn ZXQgY29uZnVzZWQuICBXaGVuIHRoZSBhcnJheSBrZXlzIGFyZSBiZWhpbmQgdGhlIGtleSBzcGFj ZQorCSAqIGZvciB0aGUgcGFnZSB3ZSdyZSBzdGVwcGluZyBvbiB0byAoYmVoaW5kIGluIHRlcm1z IG9mIHRoZSBzY2FuIGRpciksCisJICogdGhleSB3aWxsIGNhdGNoIHVwIGF1dG9tYXRpY2FsbHku ICBCdXQgd2hlbiB0aGV5J3JlIGFoZWFkIG9mIHRoYXQKKwkgKiBwYWdlJ3Mga2V5IHNwYWNlLCB0 aGUgc2NhbiBjb3VsZCBtaXNzIG1hdGNoaW5nIHR1cGxlcy4KIAkgKi8KLQlpZiAoQlRTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXNvLT5tYXJrSXRlbUluZGV4ID0gc28tPmN1cnJQb3Mu aXRlbUluZGV4OworCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIGJhdGNoLT5kaXIpOworCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGJhdGNoLT5kaXIpKQorCQliYXRjaC0+bW9yZVJpZ2h0 ID0gdHJ1ZTsKIAllbHNlCi0JewotCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsK LQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQl9Ci19Ci0KLS8qCi0gKglidHJlc3RycG9zKCkg LS0gcmVzdG9yZSBzY2FuIHRvIGxhc3Qgc2F2ZWQgcG9zaXRpb24KLSAqLwotdm9pZAotYnRyZXN0 cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOwotCi0JaWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDApCi0Jewot CQkvKgotCQkgKiBUaGUgc2NhbiBoYXMgbmV2ZXIgbW92ZWQgdG8gYSBuZXcgcGFnZSBzaW5jZSB0 aGUgbGFzdCBtYXJrLiAgSnVzdAotCQkgKiByZXN0b3JlIHRoZSBpdGVtSW5kZXguCi0JCSAqCi0J CSAqIE5COiBJbiB0aGlzIGNhc2Ugd2UgY2FuJ3QgY291bnQgb24gYW55dGhpbmcgaW4gc28tPm1h cmtQb3MgdG8gYmUKLQkJICogYWNjdXJhdGUuCi0JCSAqLwotCQlzby0+Y3VyclBvcy5pdGVtSW5k ZXggPSBzby0+bWFya0l0ZW1JbmRleDsKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogVGhlIHNj YW4gbW92ZWQgdG8gYSBuZXcgcGFnZSBhZnRlciBsYXN0IG1hcmsgb3IgcmVzdG9yZSwgYW5kIHdl IGFyZQotCQkgKiBub3cgcmVzdG9yaW5nIHRvIHRoZSBtYXJrZWQgcGFnZS4gIFdlIGFyZW4ndCBo b2xkaW5nIGFueSByZWFkCi0JCSAqIGxvY2tzLCBidXQgaWYgd2UncmUgc3RpbGwgaG9sZGluZyB0 aGUgcGluIGZvciB0aGUgY3VycmVudCBwb3NpdGlvbiwKLQkJICogd2UgbXVzdCBkcm9wIGl0Lgot CQkgKi8KLQkJaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQl7Ci0JCQkvKiBC ZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICov Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJ CUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCQl9Ci0KLQkJaWYgKEJUU2Nh blBvc0lzVmFsaWQoc28tPm1hcmtQb3MpKQotCQl7Ci0JCQkvKiBidW1wIHBpbiBvbiBtYXJrIGJ1 ZmZlciBmb3IgYXNzaWdubWVudCB0byBjdXJyZW50IGJ1ZmZlciAqLwotCQkJaWYgKEJUU2NhblBv c0lzUGlubmVkKHNvLT5tYXJrUG9zKSkKLQkJCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPm1hcmtQ b3MuYnVmKTsKLQkJCW1lbWNweSgmc28tPmN1cnJQb3MsICZzby0+bWFya1BvcywKLQkJCQkgICBv ZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJCSAgIHNvLT5tYXJrUG9zLmxh c3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJCWlmIChzby0+Y3VyclR1cGxlcykK LQkJCQltZW1jcHkoc28tPmN1cnJUdXBsZXMsIHNvLT5tYXJrVHVwbGVzLAotCQkJCQkgICBzby0+ bWFya1Bvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQkJLyogUmVzZXQgdGhlIHNjYW4ncyBhcnJheSBr ZXlzIChzZWUgX2J0X3N0ZXBwYWdlIGZvciB3aHkpICovCi0JCQlpZiAoc28tPm51bUFycmF5S2V5 cykKLQkJCXsKLQkJCQlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBzby0+Y3VyclBvcy5kaXIp OwotCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCQlC VFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQl9CisJCWJhdGNoLT5tb3JlTGVmdCA9 IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFs c2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAogLyoKQEAgLTg3OSwxNSAr NzU5LDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1i ZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IEludmFsaWRCbG9ja051bWJl cjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKLQkvKgotCSAqIFJl c2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQgc3VjaCB0 aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdlIHRyZWF0cyB0aGlzIGJh Y2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0aGF0IHN0ZXBzIGZyb20g Kmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNzIHRoaXMKLQkgKiBiYWNr ZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3JlYWRmaXJzdHBhZ2UgYmVm b3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCXNv LT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQogCWlm IChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDM3LDggKzkwOCw2IEBAIF9idF9wYXJhbGxlbF9kb25l KEluZGV4U2NhbkRlc2Mgc2NhbikKIAlCVFBhcmFsbGVsU2NhbkRlc2MgYnRzY2FuOwogCWJvb2wJ CXN0YXR1c19jaGFuZ2VkID0gZmFsc2U7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKTsKLQogCS8qIERvIG5vdGhpbmcsIGZvciBub24tcGFyYWxsZWwgc2NhbnMgKi8K IAlpZiAocGFyYWxsZWxfc2NhbiA9PSBOVUxMKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnRzZWFyY2guYwppbmRleCAwY2VkN2IwMmMuLjZmYmRiY2E0ZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0yNiw1MiArMjYsMjMgQEAKICNpbmNsdWRlICJ1 dGlscy9yZWwuaCIKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X2Ryb3BfbG9ja19hbmRfbWF5 YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKTsKIHN0YXRpYyBCdWZmZXIgX2J0 X21vdmVyaWdodChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBr ZXksCiAJCQkJCQkJQnVmZmVyIGJ1ZiwgYm9vbCBmb3J1cGRhdGUsIEJUU3RhY2sgc3RhY2ssCiAJ CQkJCQkJaW50IGFjY2Vzcyk7CiBzdGF0aWMgT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoKFJlbGF0 aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1Zik7CiBzdGF0aWMgaW50CV9idF9i aW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLAogCQkJCQkJCQlPZmZz ZXROdW1iZXIgb2ZmbnVtKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfcmV0dXJuaXRlbShJbmRl eFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbyk7Ci1zdGF0aWMgYm9vbCBfYnRfc3RlcHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBf YnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0s Ci0JCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZG5leHRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJCQkJIEJsb2Nr TnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLAotCQkJCQkJCSBib29sIHNl aXplZCk7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAorCQkJCQkJCQkJCU9mZnNldE51 bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBf YnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCisJ CQkJCQkJCQkgICBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLAorCQkJCQkJCQkJICAgU2NhbkRp cmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKTsKIHN0YXRpYyBCdWZmZXIgX2J0X2xvY2tfYW5k X3ZhbGlkYXRlX2xlZnQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciAqYmxrbm8sCiAJCQkJCQkJ CQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8pOwotc3RhdGljIGJvb2wgX2J0X2VuZHBvaW50 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2Nh bkJhdGNoIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoKTsKIAogCi0vKgotICoJX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKCkKLSAqCi0gKiBVbmxvY2sgc28tPmN1cnJQb3MuYnVm LiAgSWYgc2NhbiBpcyBzby0+ZHJvcFBpbiwgZHJvcCB0aGUgcGluLCB0b28uCi0gKiBEcm9wcGlu ZyB0aGUgcGluIHByZXZlbnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nIG9uIGFjcXVpcmluZyBhIGNs ZWFudXAgbG9jay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1fYnRfZHJvcF9sb2NrX2FuZF9t YXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pCi17Ci0JaWYgKCFzby0+ZHJv cFBpbikKLQl7Ci0JCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBwaW4pICovCi0JCV9i dF91bmxvY2tidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlyZXR1cm47Ci0JfQotCi0JLyoK LQkgKiBEcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0JICoKLQkgKiBIYXZlIHRvIHNl dCBzby0+Y3VyclBvcy5sc24gc28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdheSB0byBkZXRl Y3QKLQkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdo dCBoYXZlIHRha2VuIHBsYWNlLgotCSAqLwotCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExT TkF0b21pYyhzby0+Y3VyclBvcy5idWYpOwotCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5i dWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci19Ci0KIC8qCiAgKglfYnRf c2VhcmNoKCkgLS0gU2VhcmNoIHRoZSB0cmVlIGZvciBhIHBhcnRpY3VsYXIgc2NhbmtleSwKICAq CQlvciBtb3JlIHByZWNpc2VseSBmb3IgdGhlIGZpcnN0IGxlYWYgcGFnZSBpdCBjb3VsZCBiZSBv bi4KQEAgLTg1NCwyNiArODI1LDIzIEBAIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwKIH0KIAog LyoKLSAqCV9idF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gYSBzY2FuLgorICoJ X2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgYmF0Y2ggaW4gYSBzY2FuLgogICoKICAqCQlX ZSBuZWVkIHRvIGJlIGNsZXZlciBhYm91dCB0aGUgZGlyZWN0aW9uIG9mIHNjYW4sIHRoZSBzZWFy Y2gKLSAqCQljb25kaXRpb25zLCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBm aXJzdCBpdGVtIChvciwKLSAqCQlpZiBiYWNrd2FyZHMgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4g dGhlIHRyZWUgdGhhdCBzYXRpc2ZpZXMgdGhlCi0gKgkJcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNj YW4ga2V5LiAgT24gc3VjY2VzcyBleGl0LCBkYXRhIGFib3V0IHRoZQotICoJCW1hdGNoaW5nIHR1 cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9zLiAgV2Un bGwKLSAqCQlkcm9wIGFsbCBsb2NrcyBhbmQgaG9sZCBvbnRvIGEgcGluIG9uIHBhZ2UncyBidWZm ZXIsIGV4Y2VwdCBkdXJpbmcKLSAqCQlzby0+ZHJvcFBpbiBzY2Fucywgd2hlbiB3ZSBkcm9wIGJv dGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0gKgkJX2J0X3JldHVybml0ZW0gc2V0cyB0aGUgbmV4 dCBpdGVtIHRvIHJldHVybiB0byBzY2FuIG9uIHN1Y2Nlc3MgZXhpdC4KKyAqCQljb25kaXRpb25z LCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBmaXJzdCBsZWFmIHBhZ2UgKG9y CisgKgkJdGhlIGxhc3QgbGVhZiBwYWdlLCB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykgaW4gdGhl IHRyZWUgd2l0aCBhdCBsZWFzdAorICoJCW9uZSB0dXBsZSB0aGF0IHNhdGlzZmllcyB0aGUgcXVh bGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24KKyAqCQlzdWNjZXNzIGV4aXQsIHdlIHJl dHVybiBhIG5ldyBiYXRjaCB3aXRoIHRoYXQgcGFnZSdzIG1hdGNoaW5nIGl0ZW1zLgogICoKLSAq IElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUgaW5kZXgsIHdlIHJldHVybiBm YWxzZSwgd2l0aCBubwotICogcGlucyBvciBsb2NrcyBoZWxkLiAgc28tPmN1cnJQb3Mgd2lsbCBy ZW1haW4gaW52YWxpZC4KKyAqIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0aGUg aW5kZXggKGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbiksCisgKiB3ZSBqdXN0IHJldHVybiBO VUxMLgogICoKICAqIE5vdGUgdGhhdCBzY2FuLT5rZXlEYXRhW10sIGFuZCB0aGUgc28tPmtleURh dGFbXSBzY2Fua2V5IGJ1aWx0IGZyb20gaXQsCiAgKiBhcmUgYm90aCBzZWFyY2gtdHlwZSBzY2Fu a2V5cyAoc2VlIG5idHJlZS9SRUFETUUgZm9yIG1vcmUgYWJvdXQgdGhpcykuCiAgKiBXaXRoaW4g dGhpcyByb3V0aW5lLCB3ZSBidWlsZCBhIHRlbXBvcmFyeSBpbnNlcnRpb24tdHlwZSBzY2Fua2V5 IHRvIHVzZQogICogaW4gbG9jYXRpbmcgdGhlIHNjYW4gc3RhcnQgcG9zaXRpb24uCiAgKi8KLWJv b2wKK0luZGV4U2NhbkJhdGNoCiBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAt ODg3LDggKzg1NSwxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcikKIAlTdHJhdGVneU51bWJlciBzdHJhdF90b3RhbCA9IEludmFsaWRTdHJhdGVneTsK IAlCbG9ja051bWJlciBibGtubyA9IEludmFsaWRCbG9ja051bWJlciwKIAkJCQlsYXN0Y3VycmJs a25vOworCUluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2g7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lz VmFsaWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2gg Ki8KKwlmaXJzdGJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOwogCiAJLyoK IAkgKiBFeGFtaW5lIHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5kYW50IGtl eXM7IGFsc28gbWFyayB0aGUKQEAgLTkwNCw2ICs4NzQsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmlt U2Nhbik7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtOTEz LDcgKzg4NCwxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKIAkgKi8KIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRf cGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJl dHVybiBmYWxzZTsKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0 YmF0Y2gpOworCQlyZXR1cm4gZmFsc2U7CQkJLyogZGVmaW5pdGVseSBkb25lIChzby0+bmVlZFBy aW1TY2FuIGlzIHVuc2V0KSAqLworCX0KIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2Nhbidz IGFycmF5cyAoaWYgYW55KSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTkzMCwx NCArOTA0LDEwIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKQogCQkgKiBfYnRfcmVhZG5leHRwYWdlIHJlbGVhc2VzIHRoZSBzY2FuIGZvciB1cyAobm90 IF9idF9yZWFkZmlyc3RwYWdlKS4KIAkJICovCiAJCUFzc2VydChzY2FuLT5wYXJhbGxlbF9zY2Fu ICE9IE5VTEwpOwotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCQlBc3NlcnQoYmxrbm8g IT0gUF9OT05FKTsKIAotCQlpZiAoIV9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgdHJ1ZSkpCi0JCQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwogCi0JCV9idF9yZXR1cm5pdGVtKHNjYW4s IHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBfYnRfcmVhZG5leHRwYWdlKHNjYW4sIGJs a25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpOwogCX0KIAogCS8qCkBAIC0xMjM3LDcgKzEy MDcsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikK IAkgKiBOb3RlOiBjYWxscyBfYnRfcmVhZGZpcnN0cGFnZSBmb3IgdXMsIHdoaWNoIHJlbGVhc2Vz IHRoZSBwYXJhbGxlbCBzY2FuLgogCSAqLwogCWlmIChrZXlzeiA9PSAwKQotCQlyZXR1cm4gX2J0 X2VuZHBvaW50KHNjYW4sIGRpcik7CisJCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyLCBm aXJzdGJhdGNoKTsKIAogCS8qCiAJICogV2Ugd2FudCB0byBzdGFydCB0aGUgc2NhbiBzb21ld2hl cmUgd2l0aGluIHRoZSBpbmRleC4gIFNldCB1cCBhbgpAQCAtMTUwNSwxMiArMTQ3NSwxMiBAQCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBwb3Np dGlvbiBvdXJzZWx2ZXMgb24gdGhlIHRhcmdldCBsZWFmIHBhZ2UuCiAJICovCiAJQXNzZXJ0KFNj YW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikgPT0gaW5za2V5LmJhY2t3YXJkKTsKLQlzdGFjayA9 IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFE KTsKKwlzdGFjayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmZmlyc3RiYXRjaC0+ YnVmLCBCVF9SRUFEKTsKIAogCS8qIGRvbid0IG5lZWQgdG8ga2VlcCB0aGUgc3RhY2sgYXJvdW5k Li4uICovCiAJX2J0X2ZyZWVzdGFjayhzdGFjayk7CiAKLQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28t PmN1cnJQb3MuYnVmKSkKKwlpZiAodW5saWtlbHkoIUJ1ZmZlcklzVmFsaWQoZmlyc3RiYXRjaC0+ YnVmKSkpCiAJewogCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCkBAIC0xNTI2LDIzICsx NDk2LDI0IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogCQlpZiAoSXNvbGF0aW9uSXNTZXJpYWxpemFibGUoKSkKIAkJewogCQkJUHJlZGljYXRlTG9j a1JlbGF0aW9uKHJlbCwgc2Nhbi0+eHNfc25hcHNob3QpOwotCQkJc3RhY2sgPSBfYnRfc2VhcmNo KHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCk7CisJCQlzdGFj ayA9IF9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmZmlyc3RiYXRjaC0+YnVmLCBCVF9S RUFEKTsKIAkJCV9idF9mcmVlc3RhY2soc3RhY2spOwogCQl9CiAKLQkJaWYgKCFCdWZmZXJJc1Zh bGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5i dWYpKQogCQl7CiAJCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJCWluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJ fQogCiAJLyogcG9zaXRpb24gdG8gdGhlIHByZWNpc2UgaXRlbSBvbiB0aGUgcGFnZSAqLwotCW9m Zm51bSA9IF9idF9iaW5zcmNoKHJlbCwgJmluc2tleSwgc28tPmN1cnJQb3MuYnVmKTsKKwlvZmZu dW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIGZpcnN0YmF0Y2gtPmJ1Zik7CiAKIAkvKgog CSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2NhbiAodXN1YWxs eSB0aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBzby0+Y3VyclBvcy5idWYpLgorCSAqIGN1cnJl bnRseSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoKIAkgKiBJZiBpbnNrZXkubmV4dGtleSA9IGZh bHNlIGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxzZSwgb2ZmbnVtIGlzCiAJICogcG9zaXRpb25l ZCBhdCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlID49IGluc2tleS5zY2Fua2V5cy4KQEAgLTE1 NjAsMTY1ICsxNTMxLDY1IEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3aGVuIGluc2tleSBp cyBib3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4gYWxsIG9mIGl0cyBu b24tcGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIuCiAJICovCi0JaWYg KCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJldHVybiBmYWxzZTsK LQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0 X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIpOwogfQogCiAvKgot ICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCisgKglfYnRfbmV4 dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBz by0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5IGJlIHBpbm5l ZAotICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50 aWZpZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVu dHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3YXMgbGFzdCByZXR1cm5l ZCBieQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9yIGJhdGNoJ3MgcG9zaXRp b25pbmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggbGVhZiBwYWdlIHRvIHJlYWQg bmV4dC4KICAqCi0gKgkJT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVkIGFz IG5lZWRlZCwgYW5kIF9idF9yZXR1cm5pdGVtCi0gKgkJc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJl dHVybiB0byB0aGUgc2Nhbi4gIHNvLT5jdXJyUG9zIHJlbWFpbnMgdmFsaWQuCi0gKgotICoJCU9u IGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRlIHNvLT5jdXJyUG9z LiAgSXQnbGwKLSAqCQlzdGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJuIHR1 cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xsIG5lZWQgdG8gY2Fs bCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAqCQlPbiBzdWNjZXNz IGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9u ZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAoZWxzZSB3ZSdkIGp1 c3QgcmV0dXJuIE5VTEwpLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUp IHNjYW4tPm9wYXF1ZTsKLQotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7 Ci0KLQkvKgotCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSBvbiBjdXJyZW50IHBhZ2U7IG9yIGlm IHRoZXJlJ3Mgbm8gbW9yZSwgdHJ5IHRvCi0JICogc3RlcCB0byB0aGUgbmV4dCBwYWdlIHdpdGgg ZGF0YS4KLQkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCXsKLQkJaWYg KCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0JCXsKLQkJ CWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0J fQotCWVsc2UKLQl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9z LmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJCQly ZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0 dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIGluZGV4IGl0ZW0gZnJvbSBzby0+Y3Vy clBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdIHRvIHRoZQotICogaW5kZXggc2NhbiBi eSBzZXR0aW5nIHRoZSByZWxldmFudCBmaWVsZHMgaW4gY2FsbGVyJ3MgaW5kZXggc2NhbiBkZXNj cmlwdG9yCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X3JldHVybml0ZW0oSW5kZXhTY2Fu RGVzYyBzY2FuLCBCVFNjYW5PcGFxdWUgc28pCi17Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0g PSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQotCS8qIE1vc3Qg cmVjZW50IF9idF9yZWFkcGFnZSBtdXN0IGhhdmUgc3VjY2VlZGVkICovCi0JQXNzZXJ0KEJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4 ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRl eCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkvKiBSZXR1cm4gbmV4dCBpdGVtLCBwZXIg YW1nZXR0dXBsZSBjb250cmFjdCAqLwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVh cFRpZDsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBs ZSkgKHNvLT5jdXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKLX0KLQotLyoKLSAq CV9idF9zdGVwcGFnZSgpIC0tIFN0ZXAgdG8gbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0 YSBmb3Igc2NhbgotICoKLSAqIFdyYXBwZXIgb24gX2J0X3JlYWRuZXh0cGFnZSB0aGF0IHBlcmZv cm1zIGZpbmFsIHN0ZXBzIGZvciB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIE9uIGVudHJ5LCBz by0+Y3VyclBvcyBtdXN0IGJlIHZhbGlkLiAgSXRzIGJ1ZmZlciB3aWxsIGJlIHBpbm5lZCwgdGhv dWdoCi0gKiBuZXZlciBsb2NrZWQuIChBY3R1YWxseSwgd2hlbiBzby0+ZHJvcFBpbiB0aGVyZSB3 b24ndCBldmVuIGJlIGEgcGluIGhlbGQsCi0gKiB0aG91Z2ggc28tPmN1cnJQb3MuY3VyclBhZ2Ug bXVzdCBzdGlsbCBiZSBzZXQgdG8gYSB2YWxpZCBibG9jayBudW1iZXIuKQotICovCi1zdGF0aWMg Ym9vbAotX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp CitJbmRleFNjYW5CYXRjaAorX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUgc28g PSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJ bGFzdGN1cnJibGtubzsKIAotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7 Ci0KLQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVk IGl0ZW1zICovCi0JaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQlfYnRfa2lsbGl0ZW1zKHNjYW4p OwotCi0JLyoKLQkgKiBCZWZvcmUgd2UgbW9kaWZ5IGN1cnJQb3MsIG1ha2UgYSBjb3B5IG9mIHRo ZSBwYWdlIGRhdGEgaWYgdGhlcmUgd2FzIGEKLQkgKiBtYXJrIHBvc2l0aW9uIHRoYXQgbmVlZHMg aXQuCi0JICovCi0JaWYgKHNvLT5tYXJrSXRlbUluZGV4ID49IDApCi0JewotCQkvKiBidW1wIHBp biBvbiBjdXJyZW50IGJ1ZmZlciBmb3IgYXNzaWdubWVudCB0byBtYXJrIGJ1ZmZlciAqLwotCQlp ZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQotCQkJSW5jckJ1ZmZlclJlZkNvdW50 KHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCW1lbWNweSgmc28tPm1hcmtQb3MsICZzby0+Y3VyclBvcywK LQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkgICBzby0+Y3Vy clBvcy5sYXN0SXRlbSAqIHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCWlmIChzby0+bWFya1R1 cGxlcykKLQkJCW1lbWNweShzby0+bWFya1R1cGxlcywgc28tPmN1cnJUdXBsZXMsCi0JCQkJICAg c28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0KTsKLQkJc28tPm1hcmtQb3MuaXRlbUluZGV4ID0g c28tPm1hcmtJdGVtSW5kZXg7Ci0JCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0KLQkJLyoKLQkJ ICogSWYgd2UncmUganVzdCBhYm91dCB0byBzdGFydCB0aGUgbmV4dCBwcmltaXRpdmUgaW5kZXgg c2NhbgotCQkgKiAocG9zc2libGUgd2l0aCBhIHNjYW4gdGhhdCBoYXMgYXJyYXlzIGtleXMsIGFu ZCBuZWVkcyB0byBza2lwIHRvCi0JCSAqIGNvbnRpbnVlIGluIHRoZSBjdXJyZW50IHNjYW4gZGly ZWN0aW9uKSwgbW9yZUxlZnQvbW9yZVJpZ2h0IG9ubHkKLQkJICogaW5kaWNhdGUgdGhlIGVuZCBv ZiB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2Nhbi4gIFRoZXkgbXVzdAotCQkgKiBuZXZl ciBiZSB0YWtlbiB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b3AtbGV2ZWwgaW5kZXggc2NhbiBoYXMg ZW5kZWQKLQkJICogKHRoYXQgd291bGQgYmUgd3JvbmcpLgotCQkgKgotCQkgKiBXZSBjb3VsZCBo YW5kbGUgdGhpcyBjYXNlIGJ5IHRyZWF0aW5nIHRoZSBjdXJyZW50IGFycmF5IGtleXMgYXMKLQkJ ICogbWFya1BvcyBzdGF0ZS4gIEJ1dCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYXJyYXkgc3Rh dGUgbGlrZSB0aGlzCi0JCSAqIHdvdWxkIGFkZCBjb21wbGV4aXR5LiAgSW5zdGVhZCwgd2UganVz dCB1bnNldCBtYXJrUG9zJ3MgY29weSBvZgotCQkgKiBtb3JlUmlnaHQgb3IgbW9yZUxlZnQgKHdo aWNoZXZlciBtaWdodCBiZSBhZmZlY3RlZCksIHdoaWxlIG1ha2luZwotCQkgKiBidHJlc3RycG9z IHJlc2V0IHRoZSBzY2FuJ3MgYXJyYXlzIHRvIHRoZWlyIGluaXRpYWwgc2NhbiBwb3NpdGlvbnMu Ci0JCSAqIEluIGVmZmVjdCwgYnRyZXN0cnBvcyBsZWF2ZXMgYWR2YW5jaW5nIHRoZSBhcnJheXMg dXAgdG8gdGhlIGZpcnN0Ci0JCSAqIF9idF9yZWFkcGFnZSBjYWxsICh0aGF0IHRha2VzIHBsYWNl IGFmdGVyIGl0IGhhcyByZXN0b3JlZCBtYXJrUG9zKS4KLQkJICovCi0JCWlmIChzby0+bmVlZFBy aW1TY2FuKQotCQl7Ci0JCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChzby0+Y3VyclBvcy5k aXIpKQotCQkJCXNvLT5tYXJrUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0JCQllbHNlCi0JCQkJc28t Pm1hcmtQb3MubW9yZUxlZnQgPSB0cnVlOwotCQl9Ci0KLQkJLyogbWFyay9yZXN0b3JlIG5vdCBz dXBwb3J0ZWQgYnkgcGFyYWxsZWwgc2NhbnMgKi8KLQkJQXNzZXJ0KCFzY2FuLT5wYXJhbGxlbF9z Y2FuKTsKLQl9Ci0KLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKKwlBc3Nl cnQoQmxvY2tOdW1iZXJJc1ZhbGlkKHByaW9yYmF0Y2gtPmN1cnJQYWdlKSk7CiAKIAkvKiBXYWxr IHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKLQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJYmxrbm8gPSBwcmlv cmJhdGNoLT5uZXh0UGFnZTsKIAllbHNlCi0JCWJsa25vID0gc28tPmN1cnJQb3MucHJldlBhZ2U7 Ci0JbGFzdGN1cnJibGtubyA9IHNvLT5jdXJyUG9zLmN1cnJQYWdlOworCQlibGtubyA9IHByaW9y YmF0Y2gtPnByZXZQYWdlOworCWxhc3RjdXJyYmxrbm8gPSBwcmlvcmJhdGNoLT5jdXJyUGFnZTsK IAogCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2NoZWR1 bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBfYnRfcmVhZHBhZ2UgZm9yIGN1cnJQb3MgaGFwcGVu ZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlCi0JICogb25lIHRoYXQgd2Un cmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5 Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5j ZSB0aGVtLikKKwkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRoYXQgd2VyZSBzY2hl ZHVsZWQgd2hlbiBwcmlvcmJhdGNoJ3MgY2FsbAorCSAqIHRvIF9idF9yZWFkcGFnZSBoYXBwZW5l ZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIHRoYXQKKwkgKiB3ZSdy ZSBzdGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRoZSBzY2FuJ3MgYXJyYXkg a2V5cworCSAqIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ugd2lsbCBhZHZhbmNl IHRoZW0uKQogCSAqLwotCWlmIChzby0+Y3VyclBvcy5kaXIgIT0gZGlyKQorCWlmIChwcmlvcmJh dGNoLT5kaXIgIT0gZGlyKQogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAKKwlpZiAoYmxr bm8gPT0gUF9OT05FIHx8CisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIXBy aW9yYmF0Y2gtPm1vcmVSaWdodCA6ICFwcmlvcmJhdGNoLT5tb3JlTGVmdCkpCisJeworCQkvKgor CQkgKiBwcmlvcmJhdGNoJ3MgcGFnZSBpcyBrbm93biB0byBiZSB0aGUgZmluYWwgbGVhZiBwYWdl IHdpdGggbWF0Y2hlcworCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIChpdHMgX2J0X3JlYWRw YWdlIGNhbGwgZmlndXJlZCB0aGF0IG91dCkuCisJCSAqCisJCSAqIE5vdGU6IGlmIHNvLT5uZWVk UHJpbVNjYW4gaXMgc2V0LCB0aGVuIHByaW9yYmF0Y2gncyBsZWFmIHBhZ2UgaXMKKwkJICogYWN0 dWFsbHkganVzdCB0aGUgZmluYWwgcGFnZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4 IHNjYW4KKwkJICogaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAodGhlIHNjYW4gd2lsbCBjb250aW51 ZSBpbiBfYnRfZmlyc3QpLgorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJl dHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2NhbiB0 byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYK KwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxz ZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fzbid0 IHNldCAqLworCiAJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJy Ymxrbm8sIGRpciwgZmFsc2UpOwogfQogCkBAIC0xNzMxLDczICsxNjAyLDkwIEBAIF9idF9zdGVw cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogdG8gc3RvcCB0 aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hlY2trZXlzIGFnYWluc3QgdGhl IGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1bGwgZGV0YWlscy4KICAqCi0g KiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2Zm bnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJhdGNoIG11c3QgYmUgcGlubmVk IGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAgKiBQYXJhbGxlbCBzY2FuIGNh bGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoK LSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3VyclBvcyBhbmQgcmV0YWluZWQg bG9ja3MgYW5kIHBpbnMKKyAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBmaXJzdGJhdGNo IGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucwogICogYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1 bGVzIGFzIHRob3NlIGxhaWQgb3V0IGZvciBfYnRfcmVhZG5leHRwYWdlIGV4aXQuCi0gKiBMaWtl IF9idF9yZWFkbmV4dHBhZ2UsIG91ciByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGlmIHRoZXJlIGFy ZSBhbnkgbWF0Y2hpbmcKLSAqIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbi4KICAqCiAg KiBXZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwg cmVnYXJkbGVzcyBvZgogICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJh bGxlbF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCi1fYnRf cmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sIFNj YW5EaXJlY3Rpb24gZGlyKQorc3RhdGljIEluZGV4U2NhbkJhdGNoCitfYnRfcmVhZGZpcnN0cGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJICBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKIHsKIAlCVFNjYW5PcGFxdWUg c28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJ CQkJbGFzdGN1cnJibGtubzsKIAotCXNvLT5udW1LaWxsZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5v aWEgKi8KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwkJLyogZGl0dG8gKi8KLQotCS8qIEluaXRp YWxpemUgc28tPmN1cnJQb3MgZm9yIHRoZSBmaXJzdCBwYWdlIChwYWdlIGluIHNvLT5jdXJyUG9z LmJ1ZikgKi8KKwkvKiBJbml0aWFsaXplIGZpcnN0YmF0Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZp cnN0IHBhZ2UgKi8KIAlpZiAoc28tPm5lZWRQcmltU2NhbikKIAl7CiAJCUFzc2VydChzby0+bnVt QXJyYXlLZXlzKTsKIAotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJy UG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJ Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNl OwogCX0KIAllbHNlIGlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlzby0+ Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOwotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVl OworCQlmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOworCQlmaXJzdGJhdGNoLT5tb3JlUmln aHQgPSB0cnVlOwogCX0KIAllbHNlCiAJewotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7 Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQlmaXJzdGJhdGNoLT5tb3JlTGVm dCA9IHRydWU7CisJCWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCX0KIAogCS8qCiAJ ICogQXR0ZW1wdCB0byBsb2FkIG1hdGNoaW5nIHR1cGxlcyBmcm9tIHRoZSBmaXJzdCBwYWdlLgog CSAqCi0JICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcg dGhlIHNvLT5jdXJyUG9zIGZpZWxkcy4KKwkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwg ZmluaXNoIGluaXRpYWxpemluZyB0aGUgZmlyc3RiYXRjaCBmaWVsZHMuCiAJICogX2J0X3JlYWRw YWdlIGFsc28gcmVsZWFzZXMgcGFyYWxsZWwgc2NhbiAoZXZlbiB3aGVuIGl0IHJldHVybnMgZmFs c2UpLgogCSAqLwotCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZudW0sIHRydWUpKQor CWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgZGlyLCBvZmZudW0sIHRydWUpKQog CXsKLQkJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQotCQkvKgotCQkgKiBf YnRfcmVhZHBhZ2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4p IG9uCi0JCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSBy ZXR1cm5pbmcgdHVwbGVzLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5j dXJyUG9zKSk7Ci0JCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKLQkJcmV0 dXJuIHRydWU7CisJCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGlu IGZpcnN0YmF0Y2guaXRlbXNbXSAqLworCQlpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKHNjYW4s IGZpcnN0YmF0Y2gpOworCQlyZXR1cm4gZmlyc3RiYXRjaDsKIAl9CiAKLQkvKiBUaGVyZSdzIG5v IGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmICov Ci0JX2J0X3VubG9ja2J1ZihzY2FuLT5pbmRleFJlbGF0aW9uLCBzby0+Y3VyclBvcy5idWYpOwor CS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSAqLworCV9i dF9yZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgZmlyc3RiYXRjaC0+YnVmKTsKKwlmaXJzdGJh dGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVz aW5nIGl0cyBfYnRfc3RlcHBhZ2Ugd3JhcHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBw YWdlKHNjYW4sIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBh Z2Ugd2l0aCBkYXRhICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxr bm8gPSBmaXJzdGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0gZmlyc3RiYXRjaC0+ cHJldlBhZ2U7CisJbGFzdGN1cnJibGtubyA9IGZpcnN0YmF0Y2gtPmN1cnJQYWdlOwogCi0JLyog X2J0X3JlYWRwYWdlIGZvciBhIGxhdGVyIHBhZ2UgKG5vdyBpbiBzby0+Y3VyclBvcykgc3VjY2Vl ZGVkICovCi0JcmV0dXJuIHRydWU7CisJQXNzZXJ0KGZpcnN0YmF0Y2gtPmRpciA9PSBkaXIpOwor CisJaWYgKGJsa25vID09IFBfTk9ORSB8fAorCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp ID8KKwkJICFmaXJzdGJhdGNoLT5tb3JlUmlnaHQgOiAhZmlyc3RiYXRjaC0+bW9yZUxlZnQpKQor CXsKKwkJLyoKKwkJICogZmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGlu IHRoaXMgZGlyZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0 IHRoZSBzY2FuIHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJaW5kZXhhbV91 dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CisJCV9idF9wYXJhbGxlbF9kb25l KHNjYW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFz ZShzY2FuLCBmaXJzdGJhdGNoKTsKKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUg c2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5V TEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25v LCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4g d2Fzbid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxh c3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgpAQCAtMTgwNywxMDIgKzE2OTUsNjUg QEAgX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2Zm bnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKICAqIHByZXZpb3VzbHktc2F2ZWQgcmlnaHQgbGluayBv ciBsZWZ0IGxpbmsuICBsYXN0Y3VycmJsa25vIGlzIHRoZSBwYWdlIHRoYXQKICAqIHdhcyBjdXJy ZW50IGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgYmxrbm8gbGluayB3YXMgc2F2ZWQsIHdoaWNoIHdl IHVzZSB0bwogICogcmVhc29uIGFib3V0IGNvbmN1cnJlbnQgcGFnZSBzcGxpdHMvcGFnZSBkZWxl dGlvbnMgZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KLSAqIEluIHRoZSBjb21tb24gY2FzZSB3aGVy ZSBzZWl6ZWQ9ZmFsc2UsIGJsa25vIGlzIGVpdGhlciBzby0+Y3VyclBvcy5uZXh0UGFnZQotICog b3Igc28tPmN1cnJQb3MucHJldlBhZ2UsIGFuZCBsYXN0Y3VycmJsa25vIGlzIHNvLT5jdXJyUG9z LmN1cnJQYWdlLgorICogYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgbmV4dFBhZ2Ugb3IgcHJl dlBhZ2UgKGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAorICogc2NhbiBkaXJlY3Rpb24pLCBhbmQg bGFzdGN1cnJibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBjdXJyUGFnZS4KICAqCi0gKiBPbiBl bnRyeSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3Vy clBvcy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkg Y2FsbGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFk IGFnYWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0 aGF0IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXpl ZD10cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3Vt ZW50cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMg anVzdCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAq IHNvLT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBi ZSB1c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtu byBjYW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJl YWQgbmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0 aGF0Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBj b3JyZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXpl ZD1mYWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNz IGJsa25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVh ZHkgUF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBv cy5tb3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3Vs ZCBiZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQ b3MgaXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3Rp bmcgcGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVy IG9uCi0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2Nh bnMsIHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZB Q1VVTSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgYmF0Y2ggY29udGFpbmluZyBkYXRh IGZyb20gdGhlIG5leHQgcGFnZSB0aGF0IGhhcworICogYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0 ZW0uICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBpbiB0aGUKKyAqIGdpdmVu IHNjYW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoKLSAqIElmIHRoZXJlIGFy ZSBubyBtb3JlIG1hdGNoaW5nIHJlY29yZHMgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiwgd2UgaW52 YWxpZGF0ZQotICogc28tPmN1cnJQb3MgKHdoaWxlIGVuc3VyaW5nIGl0IHJldGFpbnMgbm8gbG9j a3Mgb3IgcGlucyksIGFuZCByZXR1cm4gZmFsc2UuCi0gKgotICogV2UgYWx3YXlzIHJlbGVhc2Ug dGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJlZ2FyZGxlc3Mgb2YKLSAqIHN1 Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29u IGFzIHBvc3NpYmxlLgorICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3Qgc2VpemUgdGhlIHNj YW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIGJsa25vIGFuZAorICogbGFzdGN1cnJibGtubyBzaG91 bGQgY29tZSBmcm9tIHRoZSBzZWl6ZWQgc2Nhbi4gIFdlJ2xsIHJlbGVhc2UgdGhlIHNjYW4gYXMK KyAqIHNvb24gYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBib29sCitzdGF0aWMgSW5kZXhTY2Fu QmF0Y2gKIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBi bGtubywKLQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIs IGJvb2wgc2VpemVkKQorCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0 aW9uIGRpciwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhS ZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7 CisJSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2g7CiAKLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBh Z2UgPT0gbGFzdGN1cnJibGtubyB8fCBzZWl6ZWQpOwotCUFzc2VydCghKGJsa25vID09IFBfTk9O RSAmJiBzZWl6ZWQpKTsKLQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7 CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwluZXdiYXRjaCA9IGluZGV4 YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKIAogCS8qCi0JICogUmVtZW1iZXIgdGhhdCB0aGUg c2NhbiBhbHJlYWR5IHJlYWQgbGFzdGN1cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0Ci0JICog b2YgYmxrbm8gKG9yIHJlbWVtYmVyIHJlYWRpbmcgYSBwYWdlIHRvIHRoZSByaWdodCwgZm9yIGJh Y2t3YXJkcyBzY2FucykKKwkgKiBuZXdiYXRjaCB3aWxsIGJlIHRoZSBiYXRjaCBmb3IgbGFzdGN1 cnJibGtubywgYSBwYWdlIHRvIHRoZSBsZWZ0IG9mCisJICogYmxrbm8gKG9yIHRvIHRoZSByaWdo dCwgd2hlbiB0aGUgc2NhbiBpcyBtb3ZpbmcgYmFja3dhcmRzKQogCSAqLwotCWlmIChTY2FuRGly ZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQll bHNlCi0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJbmV3YmF0Y2gtPm1vcmVMZWZ0 ID0gdHJ1ZTsKKwluZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsKIAogCWZvciAoOzspCiAJewog CQlQYWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCi0JCWlmIChibGtubyA9PSBQ X05PTkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPwotCQkJICFzby0+Y3Vy clBvcy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9yZUxlZnQpKQotCQl7Ci0JCQkvKiBtb3N0 IHJlY2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3RjdXJyYmxrbm8pIGVuZGVkIHNjYW4g Ki8KLQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vICYmICFz ZWl6ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlfYnRfcGFy YWxsZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVlZFByaW1TY2FuICovCi0JCQlyZXR1cm4g ZmFsc2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOwotCi0JCS8qIHBhcmFs bGVsIHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNpdCBzby0+Y3VyclBvcyBibGtubyAqLwot CQlpZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwgJiYKLQkJCSFfYnRf cGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQotCQl7 Ci0JCQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChvciBhbm90aGVyIHByaW1pdGl2ZSBzY2Fu IHJlcXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQly ZXR1cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl KS0+bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSAmJiBsYXN0Y3VycmJs a25vICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJ ewogCQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZvciBpbnRlcnJ1cHRzIGZpcnN0ICovCiAJ CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1 ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCW5ld2JhdGNoLT5idWYgPSBfYnRfZ2V0YnVmKHJl bCwgYmxrbm8sIEJUX1JFQUQpOwogCQl9CiAJCWVsc2UKIAkJewogCQkJLyogcmVhZCBibGtubywg YXZvaWRpbmcgcmFjZSAoYWxzbyBjaGVja3MgZm9yIGludGVycnVwdHMpICovCi0JCQlzby0+Y3Vy clBvcy5idWYgPSBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChyZWwsICZibGtubywKLQkJCQkJ CQkJCQkJCQkJIGxhc3RjdXJyYmxrbm8pOwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBJbnZh bGlkQnVmZmVyKQorCQkJbmV3YmF0Y2gtPmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0 KHJlbCwgJmJsa25vLAorCQkJCQkJCQkJCQkJCSAgIGxhc3RjdXJyYmxrbm8pOworCQkJaWYgKG5l d2JhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJCQkvKiBtdXN0IGhhdmUgYmVl biBhIGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFnZSAqLwotCQkJCUJUU2NhblBv c0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwot CQkJCXJldHVybiBmYWxzZTsKKwkJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBu ZXdiYXRjaCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0KIAotCQlwYWdlID0gQnVmZmVy R2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShuZXdiYXRj aC0+YnVmKTsKIAkJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCQlsYXN0Y3VycmJs a25vID0gYmxrbm87CiAJCWlmIChsaWtlbHkoIVBfSUdOT1JFKG9wYXF1ZSkpKQpAQCAtMTkxMCwx NyArMTc2MSwxNyBAQCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tO dW1iZXIgYmxrbm8sCiAJCQkvKiBzZWUgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGVzIG9uIHRoaXMg cGFnZSAqLwogCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJCXsKLQkJCQkv KiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVSaWdodCBpZiB3ZSBjYW4gc3RvcCAqLwot CQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBz ZWl6ZWQpKQorCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJ CQkJIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJ CWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCQkJYmxrbm8gPSBuZXdiYXRjaC0+bmV4 dFBhZ2U7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0IHRoaXMgd2lsbCBj bGVhciBtb3JlTGVmdCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2Nh biwgZGlyLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBzZWl6ZWQpKQorCQkJCWlmIChf YnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBhZ2VHZXRNYXhPZmZz ZXROdW1iZXIocGFnZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28t PmN1cnJQb3MucHJldlBhZ2U7CisJCQkJYmxrbm8gPSBuZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9 CiAJCX0KIAkJZWxzZQpAQCAtMTkzNSwxOSArMTc4NiwzOSBAQCBfYnRfcmVhZG5leHRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCX0KIAogCQkvKiBubyBtYXRj aGluZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBv cy5idWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiByZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2Ug KG9yIGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwgbmV3YmF0Y2gtPmJ1Zik7CisJCW5ld2Jh dGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCisJCS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRo aXMgZGlyZWN0aW9uPyAqLworCQlpZiAoYmxrbm8gPT0gUF9OT05FIHx8CisJCQkoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpID8KKwkJCSAhbmV3YmF0Y2gtPm1vcmVSaWdodCA6ICFuZXdiYXRj aC0+bW9yZUxlZnQpKQorCQl7CisJCQkvKgorCQkJICogYmxrbm8gX2J0X3JlYWRwYWdlIGNhbGwg ZW5kZWQgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbiAodGhvdWdoIGlmCisJCQkgKiBzby0+bmVlZFBy aW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCQkg Ki8KKwkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3Jl bGVhc2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKiBwYXJh bGxlbCBzY2FuIG11c3Qgc2VpemUgdGhlIHNjYW4gdG8gZ2V0IG5leHQgYmxrbm8gKi8KKwkJaWYg KHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkJIV9idF9wYXJhbGxlbF9zZWl6ZShz Y2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCisJCXsKKwkJCWluZGV4YW1fdXRp bF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJCXJldHVybiBOVUxMOwkJLyogZG9u ZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisJCX0KKworCQlmaXJzdHBhZ2Ug PSBmYWxzZTsJCS8qIG5leHQgcGFnZSBjYW5ub3QgYmUgZmlyc3QgKi8KIAl9CiAKLQkvKgotCSAq IF9idF9yZWFkcGFnZSBzdWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBp bikgb24KLQkgKiBzby0+Y3VyclBvcy5idWYgaW4gcHJlcGFyYXRpb24gZm9yIGJ0Z2V0dHVwbGUg cmV0dXJuaW5nIHR1cGxlcy4KLQkgKi8KLQlBc3NlcnQoc28tPmN1cnJQb3MuY3VyclBhZ2UgPT0g Ymxrbm8pOwotCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCV9idF9k cm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKKwkvKiBfYnRfcmVhZHBhZ2Ugc2F2ZWQg b25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBuZXdiYXRjaC5pdGVtc1tdICovCisJQXNzZXJ0KG5ld2Jh dGNoLT5jdXJyUGFnZSA9PSBibGtubyk7CisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2Fu LCBuZXdiYXRjaCk7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3YmF0Y2g7CiB9CiAKIC8q CkBAIC0yMTczLDI1ICsyMDQ0LDIzIEBAIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1 aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11 c3QgaGF2ZSBzZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqIEV4aXQgY29u ZGl0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgpLgogICovCi1zdGF0aWMgYm9v bAotX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitz dGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoKQogewogCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9w YXF1ZSkgc2Nhbi0+b3BhcXVlOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsK IAlPZmZzZXROdW1iZXIgc3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKTsKLQlBc3NlcnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCUFzc2VydCghKChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZSktPm5lZWRQcmltU2Nhbik7CiAKIAkvKgogCSAqIFNjYW4gZG93 biB0byB0aGUgbGVmdG1vc3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMgaXMgYSBzaW1w bGlmaWVkCiAJICogdmVyc2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJICovCi0Jc28tPmN1cnJQb3Mu YnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRp cikpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGly ZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBv cy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChmaXJzdGJhdGNoLT5idWYpKQogCXsKIAkJLyoK IAkJICogRW1wdHkgaW5kZXguIExvY2sgdGhlIHdob2xlIHJlbGF0aW9uLCBhcyBub3RoaW5nIGZp bmVyIHRvIGxvY2sKQEAgLTIyMDIsNyArMjA3MSw3IEBAIF9idF9lbmRwb2ludChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcGFn ZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFn ZShmaXJzdGJhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAlB c3NlcnQoUF9JU0xFQUYob3BhcXVlKSk7CiAKQEAgLTIyMjgsOSArMjA5Nyw1IEBAIF9idF9lbmRw b2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCS8qCiAJICogTm93 IGxvYWQgZGF0YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgogCSAqLwotCWlmICgh X2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKLQot CV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3Jl YWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQsIGRpcik7CiB9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHV0aWxzLmMKaW5kZXggZmMzMDJjMmFkLi45YWVlNjZjZDEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKQEAgLTIxLDE1ICsyMSwxMiBAQAogI2luY2x1ZGUg ImFjY2Vzcy9yZWxvcHRpb25zLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNs dWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgotI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKLSNpbmNs dWRlICJsaWIvcXVuaXF1ZS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInV0 aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAKIAotc3RhdGljIGludAlfYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEs IGNvbnN0IHZvaWQgKnZiKTsKIHN0YXRpYyBpbnQJX2J0X2tlZXBfbmF0dHMoUmVsYXRpb24gcmVs LCBJbmRleFR1cGxlIGxhc3RsZWZ0LAogCQkJCQkJICAgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LCBC VFNjYW5JbnNlcnQgaXR1cF9rZXkpOwogCkBAIC0xNjAsMTEwICsxNTcsNDcgQEAgX2J0X2ZyZWVz dGFjayhCVFN0YWNrIHN0YWNrKQogCX0KIH0KIAotLyoKLSAqIHFzb3J0IGNvbXBhcmlzb24gZnVu Y3Rpb24gZm9yIGludCBhcnJheXMKLSAqLwotc3RhdGljIGludAotX2J0X2NvbXBhcmVfaW50KGNv bnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKLXsKLQlpbnQJCQlhID0gKigoY29uc3QgaW50 ICopIHZhKTsKLQlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZiKTsKLQotCXJldHVybiBwZ19j bXBfczMyKGEsIGIpOwotfQotCiAvKgogICogX2J0X2tpbGxpdGVtcyAtIHNldCBMUF9ERUFEIHN0 YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwogICogdG9sZCB1cyB3ZXJlIGtp bGxlZAogICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2ggc28s IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBraWxs ZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICogY2Fs bGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KKyAqIFRoZSBiYXRjaCBwYXJhbWV0ZXIgY29udGFp bnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkCisgKiB0dXBs ZXMgdGhlcmVvbiAodGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgYmF0Y2gtPm51bUtpbGxl ZCA+IDApLgogICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2NrIG9uIHRoZSBzby0+ Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4gd2hlbiAhc28tPmRy b3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLgotICogSXQn bGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGlu ZyBoZXJlLgorICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIGJhdGNoIHBv c2l0aW9uJ3MgcGFnZS4gIFdoZW4gd2UKKyAqIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9j a2VkLiAgSXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zCisgKiB3ZXJlIGhlbGQg YmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqCiAgKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBi ZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gc2V0Ci0gKiBMUF9ERUFE LiAgSWYgdGhlIHNjYW4gaXMgb25lIHRoYXQgaG9sZHMgYSBidWZmZXIgcGluIG9uIHRoZSB0YXJn ZXQgcGFnZQotICogY29udGludW91c2x5IGZyb20gaW5pdGlhbGx5IHJlYWRpbmcgdGhlIGl0ZW1z IHVudGlsIGFwcGx5aW5nIHRoaXMgZnVuY3Rpb24KLSAqIChpZiBpdCBpcyBhICFzby0+ZHJvcFBp biBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1zIG9uIHRoZQotICog cGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUgYmVlbiByZWN5Y2xlZCBieSBub3cu ICBUaGVyZSdzIG5vIHJpc2sKLSAqIHRoYXQgd2UnbGwgY29uZnVzZSBhIG5ldyBpbmRleCB0dXBs ZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElECi0gKiB3aXRoIGEgbm93LXJlbW92 ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNlZCB0byBiZSBvbiB0aGlzIHNhbWUK LSAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1cmluZyBzY2FucyB0aGF0IGRyb3Ag YnVmZmVyIHBpbnMgZWFnZXJseQotICogKHNvLT5kcm9wUGluIHNjYW5zKSwgdGhvdWdoLCBzbyB3 ZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0cyBvbgotICogdGhlIHBhZ2UgTFNO IGhhdmluZyBub3QgY2hhbmdlZCBzaW5jZSBiYWNrIHdoZW4gX2J0X3JlYWRwYWdlIHNhdyB0aGUg cGFnZS4KLSAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBzZXR0aW5nIExQX0RFQUQgYml0cyB3aGVu IHRoZSBwYWdlIExTTiBjaGFuZ2VkLgotICoKLSAqIFdlIGdpdmUgdXAgbXVjaCBsZXNzIG9mdGVu IGR1cmluZyAhc28tPmRyb3BQaW4gc2NhbnMsIGJ1dCBpdCBzdGlsbCBoYXBwZW5zLgotICogV2Ug Y29wZSB3aXRoIGNhc2VzIHdoZXJlIGl0ZW1zIGhhdmUgbW92ZWQgcmlnaHQgZHVlIHRvIGluc2Vy dGlvbnMuICBJZiBhbgotICogaXRlbSBoYXMgbW92ZWQgb2ZmIHRoZSBjdXJyZW50IHBhZ2UgZHVl IHRvIGEgc3BsaXQsIHdlJ2xsIGZhaWwgdG8gZmluZCBpdAotICogYW5kIGp1c3QgZ2l2ZSB1cCBv biBpdC4KKyAqIExQX0RFQUQuICBXZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0 cyBvbiB0aGUgcGFnZSBMU04gaGF2aW5nIG5vdAorICogY2hhbmdlZCBzaW5jZSBiYWNrIHdoZW4g X2J0X3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4gIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbgorICogc2V0 dGluZyBMUF9ERUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04gY2hhbmdlZC4KICAqLwogdm9pZAot X2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCitfYnRfa2lsbGl0ZW1zKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nh bi0+aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2Fu LT5vcGFxdWU7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51 bWJlciBtaW5vZmY7CiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsKLQlpbnQJCQludW1LaWxsZWQgPSBz by0+bnVtS2lsbGVkOwogCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOwogCUJ1ZmZlcgkJ YnVmOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOwogCi0JQXNzZXJ0KG51bUtpbGxlZCA+IDApOwot CUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisJQXNzZXJ0KGJhdGNoLT5u dW1LaWxsZWQgPiAwKTsKKwlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5jdXJyUGFn ZSkpOwogCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7IC8qIGNhbid0IGJlIGEg Yml0bWFwIGluZGV4IHNjYW4gKi8KIAotCS8qIEFsd2F5cyBpbnZhbGlkYXRlIHNvLT5raWxsZWRJ dGVtc1tdIGJlZm9yZSBsZWF2aW5nIHNvLT5jdXJyUG9zICovCi0Jc28tPm51bUtpbGxlZCA9IDA7 CisJYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJhdGNoLT5jdXJyUGFnZSwgQlRfUkVBRCk7CiAKLQkv KgotCSAqIFdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxl YWYgcGFnZSBvcmRlcjsgdGhlCi0JICogbG9vcCBiZWxvdyBleHBlY3RzIHRoaXMgKHdoZW4gbWFy a2luZyBwb3N0aW5nIGxpc3QgdHVwbGVzLCBhdCBsZWFzdCkuCi0JICogc28tPmtpbGxlZEl0ZW1z W10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVyIHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgot CSAqIFNjcm9sbGFibGUgY3Vyc29yIHNjYW5zIG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2Ft ZSBpdGVtL1RJRCB0d2ljZS4KLQkgKgotCSAqIFNvcnQgYW5kIHVuaXF1ZS1pZnkgc28tPmtpbGxl ZEl0ZW1zW10gdG8gZGVhbCB3aXRoIGFsbCB0aGlzLgotCSAqLwotCWlmIChudW1LaWxsZWQgPiAx KQorCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCUFzc2VydChiYXRjaC0+ bHNuIDw9IGxhdGVzdGxzbik7CisJaWYgKGJhdGNoLT5sc24gIT0gbGF0ZXN0bHNuKQogCXsKLQkJ cXNvcnQoc28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQsIHNpemVvZihpbnQpLCBfYnRfY29tcGFy ZV9pbnQpOwotCQludW1LaWxsZWQgPSBxdW5pcXVlKHNvLT5raWxsZWRJdGVtcywgbnVtS2lsbGVk LCBzaXplb2YoaW50KSwKLQkJCQkJCQlfYnRfY29tcGFyZV9pbnQpOwotCX0KLQotCWlmICghc28t PmRyb3BQaW4pCi0JewotCQkvKgotCQkgKiBXZSBoYXZlIGhlbGQgdGhlIHBpbiBvbiB0aGlzIHBh Z2Ugc2luY2Ugd2UgcmVhZCB0aGUgaW5kZXggdHVwbGVzLAotCQkgKiBzbyBhbGwgd2UgbmVlZCB0 byBkbyBpcyBsb2NrIGl0LiAgVGhlIHBpbiB3aWxsIGhhdmUgcHJldmVudGVkCi0JCSAqIGNvbmN1 cnJlbnQgVkFDVVVNcyBmcm9tIHJlY3ljbGluZyBhbnkgb2YgdGhlIFRJRHMgb24gdGhlIHBhZ2Uu Ci0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJYnVm ID0gc28tPmN1cnJQb3MuYnVmOwotCQlfYnRfbG9ja2J1ZihyZWwsIGJ1ZiwgQlRfUkVBRCk7Ci0J fQotCWVsc2UKLQl7Ci0JCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOwotCi0JCUFzc2VydCghQlRTY2Fu UG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJYnVmID0gX2J0X2dldGJ1ZihyZWwsIHNvLT5j dXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsKLQotCQlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05B dG9taWMoYnVmKTsKLQkJQXNzZXJ0KHNvLT5jdXJyUG9zLmxzbiA8PSBsYXRlc3Rsc24pOwotCQlp ZiAoc28tPmN1cnJQb3MubHNuICE9IGxhdGVzdGxzbikKLQkJewotCQkJLyogTW9kaWZpZWQsIGdp dmUgdXAgb24gaGludGluZyAqLwotCQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7Ci0JCQlyZXR1cm47 Ci0JCX0KLQotCQkvKiBVbm1vZGlmaWVkLCBoaW50aW5nIGlzIHNhZmUgKi8KKwkJLyogTW9kaWZp ZWQsIGdpdmUgdXAgb24gaGludGluZyAqLworCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKKwkJcmV0 dXJuOwogCX0KIAogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CkBAIC0yNzEsMTcgKzIwNSwx NiBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAltaW5vZmYgPSBQX0ZJUlNU REFUQUtFWShvcGFxdWUpOwogCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7 CiAKLQkvKiBJdGVyYXRlIHRocm91Z2ggc28tPmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9y ZGVyICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKKwkvKiBJdGVyYXRl IHRocm91Z2ggYmF0Y2gtPmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVyICovCisJZm9y IChpbnQgaSA9IDA7IGkgPCBiYXRjaC0+bnVtS2lsbGVkOyBpKyspCiAJewotCQlpbnQJCQlpdGVt SW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtpdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5r aWxsZWRJdGVtc1tpXTsKKwkJQmF0Y2hNYXRjaGluZ0l0ZW0gKmtpdGVtID0gJmJhdGNoLT5pdGVt c1tpdGVtSW5kZXhdOwogCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0 OwogCi0JCUFzc2VydChpdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkg ICBpdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCQlBc3NlcnQoaXRlbUluZGV4 ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJ CUFzc2VydChpID09IDAgfHwKLQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVtc1tzby0+ a2lsbGVkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7CisJCQkgICBvZmZudW0gPj0gYmF0Y2gt Pml0ZW1zW2JhdGNoLT5raWxsZWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKIAogCQlpZiAo b2ZmbnVtIDwgbWlub2ZmKQogCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLwpAQCAt Mjk3LDEyICsyMzAsNiBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCQlp bnQJCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwbGUpOwogCQkJCWludAkJ CWo7CiAKLQkJCQkvKgotCQkJCSAqIE5vdGUgdGhhdCB0aGUgcGFnZSBtYXkgaGF2ZSBiZWVuIG1v ZGlmaWVkIGluIGFsbW9zdCBhbnkgd2F5Ci0JCQkJICogc2luY2Ugd2UgZmlyc3QgcmVhZCBpdCAo aW4gdGhlICFzby0+ZHJvcFBpbiBjYXNlKSwgc28gaXQncwotCQkJCSAqIHBvc3NpYmxlIHRoYXQg dGhpcyBwb3N0aW5nIGxpc3QgdHVwbGUgd2Fzbid0IGEgcG9zdGluZyBsaXN0Ci0JCQkJICogdHVw bGUgd2hlbiB3ZSBmaXJzdCBlbmNvdW50ZXJlZCBpdHMgaGVhcCBUSURzLgotCQkJCSAqLwogCQkJ CWZvciAoaiA9IDA7IGogPCBucG9zdGluZzsgaisrKQogCQkJCXsKIAkJCQkJSXRlbVBvaW50ZXIg aXRlbSA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwbGUsIGopOwpAQCAtMzEwLDEyICsyMzcs OCBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJCQkJaWYgKCFJdGVtUG9p bnRlckVxdWFscyhpdGVtLCAma2l0ZW0tPmhlYXBUaWQpKQogCQkJCQkJYnJlYWs7CS8qIG91dCBv ZiBwb3N0aW5nIGxpc3QgbG9vcCAqLwogCi0JCQkJCS8qCi0JCQkJCSAqIGtpdGVtIG11c3QgaGF2 ZSBtYXRjaGluZyBvZmZudW0gd2hlbiBoZWFwIFRJRHMgbWF0Y2gsCi0JCQkJCSAqIHRob3VnaCBv bmx5IGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGUgcGFnZSBjYW4ndAotCQkJCQkgKiBoYXZl IGJlZW4gY29uY3VycmVudGx5IG1vZGlmaWVkCi0JCQkJCSAqLwotCQkJCQlBc3NlcnQoa2l0ZW0t PmluZGV4T2Zmc2V0ID09IG9mZm51bSB8fCAhc28tPmRyb3BQaW4pOworCQkJCQlBc3NlcnQoa2l0 ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSk7CisJCQkJCUFzc2VydCgha2l0ZW0tPmFsbFZpc2li bGUpOwogCiAJCQkJCS8qCiAJCQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIga2l0ZW1zIGhlcmUu CkBAIC0zMzEsOCArMjU0LDggQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJ CQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxhc3QgaGVhcCBUSUQgaW4gdGhlIGxhc3QgaW5kZXgg dHVwbGUKIAkJCQkJICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBraWxs ZWQpLgogCQkJCQkgKi8KLQkJCQkJaWYgKHBpIDwgbnVtS2lsbGVkKQotCQkJCQkJa2l0ZW0gPSAm c28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW3BpKytdXTsKKwkJCQkJaWYgKHBpIDwg YmF0Y2gtPm51bUtpbGxlZCkKKwkJCQkJCWtpdGVtID0gJmJhdGNoLT5pdGVtc1tiYXRjaC0+a2ls bGVkSXRlbXNbcGkrK11dOwogCQkJCX0KIAogCQkJCS8qCkBAIC0zODIsMTAgKzMwNSw3IEBAIF9i dF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlNYXJrQnVmZmVyRGlydHlIaW50KGJ1 ZiwgdHJ1ZSk7CiAJfQogCi0JaWYgKCFzby0+ZHJvcFBpbikKLQkJX2J0X3VubG9ja2J1ZihyZWws IGJ1Zik7Ci0JZWxzZQotCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKKwlfYnRfcmVsYnVmKHJlbCwg YnVmKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggOWY1Mzc5 Yjg3Li5hMThhMmZhOWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTg4 LDEwICs4OCwxMSBAQCBzcGdoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2Nh biA9IHNwZ2JlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gc3BncmVzY2FuLAogCQkuYW1nZXR0dXBs ZSA9IHNwZ2dldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWZyZWViYXRjaCA9 IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IHNwZ2dldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IHNw Z2VuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJ CS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAog CQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxM LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGI3YmIxMTE2OC4uZWEwYWRkMWM5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCkBAIC0xMzUsNyArMTM1LDcgQEAgc3RhdGljIHZvaWQgc2hvd19yZWN1 cnNpdmVfdW5pb25faW5mbyhSZWN1cnNpdmVVbmlvblN0YXRlICpyc3RhdGUsCiBzdGF0aWMgdm9p ZCBzaG93X21lbW9pemVfaW5mbyhNZW1vaXplU3RhdGUgKm1zdGF0ZSwgTGlzdCAqYW5jZXN0b3Jz LAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2hhc2hhZ2df aW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwotc3RhdGljIHZvaWQg c2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0 ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5z dGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X3RpZGJpdG1hcF9pbmZv KEJpdG1hcEhlYXBTY2FuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJRXhwbGFpblN0YXRlICpl cyk7CiBzdGF0aWMgdm9pZCBzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudChjb25zdCBjaGFyICpx bGFiZWwsIGludCB3aGljaCwKQEAgLTE5NzIsNyArMTk3Miw3IEBAIEV4cGxhaW5Ob2RlKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+cXVhbCkKIAkJ CQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEs CiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5m byhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7 CiAJCQlicmVhazsKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgo KEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4cXVhbCwKQEAgLTE5ODYsMTUgKzE5ODYsMTIg QEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJ CWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJl bW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJCWlm IChlcy0+YW5hbHl6ZSkKLQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiSGVhcCBGZXRjaGVzIiwg TlVMTCwKLQkJCQkJCQkJCSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMyLCAwLCBlcyk7 Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5k ZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcElu ZGV4U2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhTY2FuICopIHBsYW4pLT5p bmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFuY2VzdG9y cywgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlz aG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9C aXRtYXBIZWFwU2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSGVhcFNjYW4gKikgcGxh biktPmJpdG1hcHF1YWxvcmlnLApAQCAtMzg1OCwxNSArMzg1NSwxNiBAQCBzaG93X2hhc2hhZ2df aW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB9CiAKIC8qCi0gKiBT aG93IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kZXggc2VhcmNoZXMgZm9yIGEKKyAqIFNob3cgaW5k ZXggc2NhbiByZWxhdGVkIGV4ZWN1dG9yIGluc3RydW1lbnRhdGlvbiBmb3IgYQogICogSW5kZXhT Y2FuL0luZGV4T25seVNjYW4vQml0bWFwSW5kZXhTY2FuIG5vZGUKICAqLwogc3RhdGljIHZvaWQK LXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3Rh dGUgKmVzKQorc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFp blN0YXRlICplcykKIHsKIAlQbGFuCSAgICpwbGFuID0gcGxhbnN0YXRlLT5wbGFuOwogCVNoYXJl ZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqU2hhcmVkSW5mbyA9IE5VTEw7Ci0JdWludDY0CQlu c2VhcmNoZXMgPSAwOworCXVpbnQ2NAkJbnNlYXJjaGVzID0gMCwKKwkJCQluaGVhcGZldGNoZXMg PSAwOwogCiAJaWYgKCFlcy0+YW5hbHl6ZSkKIAkJcmV0dXJuOwpAQCAtMzg4Nyw2ICszODg1LDcg QEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5T dGF0ZSAqZXMpCiAJCQkJSW5kZXhPbmx5U2NhblN0YXRlICppbmRleHN0YXRlID0gKChJbmRleE9u bHlTY2FuU3RhdGUgKikgcGxhbnN0YXRlKTsKIAogCQkJCW5zZWFyY2hlcyA9IGluZGV4c3RhdGUt Pmlvc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCQkJbmhlYXBmZXRjaGVzID0gaW5kZXhzdGF0 ZS0+aW9zc19JbnN0cnVtZW50Lm5oZWFwZmV0Y2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5kZXhz dGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzkxMCw5ICszOTA5 LDEzIEBAIHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBs YWluU3RhdGUgKmVzKQogCQkJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICp3aW5zdHJ1bWVudCA9 ICZTaGFyZWRJbmZvLT53aW5zdHJ1bWVudFtpXTsKIAogCQkJbnNlYXJjaGVzICs9IHdpbnN0cnVt ZW50LT5uc2VhcmNoZXM7CisJCQluaGVhcGZldGNoZXMgKz0gd2luc3RydW1lbnQtPm5oZWFwZmV0 Y2hlczsKIAkJfQogCX0KIAorCWlmIChub2RlVGFnKHBsYW4pID09IFRfSW5kZXhPbmx5U2NhbikK KwkJRXhwbGFpblByb3BlcnR5VUludGVnZXIoIkhlYXAgRmV0Y2hlcyIsIE5VTEwsIG5oZWFwZmV0 Y2hlcywgZXMpOworCiAJRXhwbGFpblByb3BlcnR5VUludGVnZXIoIkluZGV4IFNlYXJjaGVzIiwg TlVMTCwgbnNlYXJjaGVzLCBlcyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXgg NjM1Njc5Y2MxLi41NGMyNDAzZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2lu ZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC04ODQs NyArODg0LDcgQEAgRGVmaW5lSW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0 aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IG11bHRpY29sdW1uIGluZGV4ZXMiLAogCQkJCQkJ YWNjZXNzTWV0aG9kTmFtZSkpKTsKLQlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0 dXBsZSA9PSBOVUxMKQorCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09 IE5VTEwgJiYgYW1Sb3V0aW5lLT5hbWdldGJhdGNoID09IE5VTEwpCiAJCWVyZXBvcnQoRVJST1Is CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJt c2coImFjY2VzcyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0 cmFpbnRzIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwppbmRleCA5MGE2OGMwZDEuLjBkZmIwMTMzNyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYwpAQCAtNDI4LDcgKzQyOCw3IEBAIEV4ZWNTdXBwb3J0c01h cmtSZXN0b3JlKFBhdGggKnBhdGhub2RlKQogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKIAogCQkJ LyoKLQkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuCisJCQkg KiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgcmVzdG9yaW5nIGEgbWFyawogCQkJICovCiAJ CQlyZXR1cm4gY2FzdE5vZGUoSW5kZXhQYXRoLCBwYXRobm9kZSktPmluZGV4aW5mby0+YW1jYW5t YXJrcG9zOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDZhZTBmOTU5NS4u MzA0MWQ1YzcyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtODE2LDEwICs4 MTYsMTIgQEAgY2hlY2tfZXhjbHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50KFJlbGF0aW9uIGhl YXAsIFJlbGF0aW9uIGluZGV4LAogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxzZTsKIAlmb3VuZF9z ZWxmID0gZmFsc2U7Ci0JaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRleCwg JkRpcnR5U25hcHNob3QsIE5VTEwsIGluZG5rZXlhdHRzLCAwKTsKKwlpbmRleF9zY2FuID0gaW5k ZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCBmYWxzZSwgJkRpcnR5U25hcHNob3QsIE5VTEwsCisJ CQkJCQkJCSBpbmRua2V5YXR0cywgMCk7CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5r ZXlzLCBpbmRua2V5YXR0cywgTlVMTCwgMCk7CiAKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90 KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwl3aGls ZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0 aW9uLAorCQkJCQkJCQkJZXhpc3Rpbmdfc2xvdCkpCiAJewogCQlUcmFuc2FjdGlvbklkIHh3YWl0 OwogCQlYTFRXX09wZXIJcmVhc29uX3dhaXQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNh dGlvbi5jCmluZGV4IDc0M2IxZWUyYi4uYzUwYTk3ZTU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUmVwbGljYXRpb24uYwpAQCAtMjA1LDcgKzIwNSw3IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBs ZUJ5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCXNrZXlfYXR0b2ZmID0gYnVpbGRf cmVwbGluZGV4X3NjYW5fa2V5KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAogCS8q IFN0YXJ0IGFuIGluZGV4IHNjYW4uICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlk eHJlbCwgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5z Y2FuKHJlbCwgaWR4cmVsLCBmYWxzZSwgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAog cmV0cnk6CiAJZm91bmQgPSBmYWxzZTsKQEAgLTIxMyw3ICsyMTMsNyBAQCByZXRyeToKIAlpbmRl eF9yZXNjYW4oc2Nhbiwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRv IGZpbmQgdGhlIHR1cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRf c2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCiAJewogCQkvKgogCQkg KiBBdm9pZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkg a2V5IG9yCkBAIC02NjYsMTIgKzY2NiwxMiBAQCBSZWxhdGlvbkZpbmREZWxldGVkVHVwbGVJbmZv QnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJICogbm90IHlldCBjb21taXR0ZWQg b3IgdGhvc2UganVzdCBjb21taXR0ZWQgcHJpb3IgdG8gdGhlIHNjYW4gYXJlCiAJICogZXhjbHVk ZWQgaW4gdXBkYXRlX21vc3RfcmVjZW50X2RlbGV0aW9uX2luZm8oKS4KIAkgKi8KLQlzY2FuID0g aW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBTbmFwc2hvdEFueSwgTlVMTCwgc2tleV9hdHRv ZmYsIDApOworCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLCBTbmFw c2hvdEFueSwgTlVMTCwgc2tleV9hdHRvZmYsIDApOwogCiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNr ZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAq LwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IHNjYW5zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uLCBzY2Fuc2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNp dmUgZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggMDU4YTU5ZWY1Li4yNTgw YTAxMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNj YW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKQEAg LTIwMiw2ICsyMDIsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4U2NhblN0 YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgQml0bWFwSW5kZXhTY2FuU3Rh dGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0g bm9kZS0+Ymlzc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJQXNzZXJ0KG5vZGUtPmJpc3NfSW5z dHJ1bWVudC5uaGVhcGZldGNoZXMgPT0gMCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlSW5kZXhvbmx5c2Nhbi5jCmluZGV4IGMyZDA5Mzc0NS4uZmYzZThmMzAyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCisrKyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKQEAgLTM0LDE0ICszNCwxMiBAQAog I2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIK ICNpbmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5 bWFwLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Iv ZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5oIgogI2lu Y2x1ZGUgImV4ZWN1dG9yL25vZGVJbmRleHNjYW4uaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK ICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgotI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRl LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIK IApAQCAtNjUsNyArNjMsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSkKIAlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOwog CVR1cGxlVGFibGVTbG90ICpzbG90OwotCUl0ZW1Qb2ludGVyIHRpZDsKIAogCS8qCiAJICogZXh0 cmFjdCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZnJvbSBpbmRleCBzY2FuIG5vZGUKQEAgLTkwLDE4 ICs4NywxNCBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJICog cGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5z c19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAor CQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJICAgZXN0 YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJ CQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19O dW1PcmRlckJ5S2V5cyk7CiAKIAkJbm9kZS0+aW9zc19TY2FuRGVzYyA9IHNjYW5kZXNjOwotCi0K LQkJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQkJbm9kZS0+aW9zc19TY2Fu RGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFs aWRCdWZmZXI7CisJCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwog CiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJl IHJlYWR5LCBnbyBhaGVhZCBhbmQKQEAgLTExOCw3OCArMTExLDEwIEBAIEluZGV4T25seU5leHQo SW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogT0ssIG5vdyB0aGF0IHdlIGhhdmUg d2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoKHRpZCA9 IGluZGV4X2dldG5leHRfdGlkKHNjYW5kZXNjLCBkaXJlY3Rpb24pKSAhPSBOVUxMKQorCXdoaWxl ICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgbm9kZS0+aW9z c19UYWJsZVNsb3QpKQogCXsKLQkJYm9vbAkJdHVwbGVfZnJvbV9oZWFwID0gZmFsc2U7Ci0KIAkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAotCQkvKgotCQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVh cCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24KLQkJICogd2hpY2gg YWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJvZHkuICBJbiBhbnkgY2FzZSwK LQkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBsZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhl IGRhdGEgc291cmNlLgotCQkgKgotCQkgKiBOb3RlIG9uIE1lbW9yeSBPcmRlcmluZyBFZmZlY3Rz OiB2aXNpYmlsaXR5bWFwX2dldF9zdGF0dXMgZG9lcyBub3QKLQkJICogbG9jayB0aGUgdmlzaWJp bGl0eSBtYXAgYnVmZmVyLCBhbmQgdGhlcmVmb3JlIHRoZSByZXN1bHQgd2UgcmVhZAotCQkgKiBo ZXJlIGNvdWxkIGJlIHNsaWdodGx5IHN0YWxlLiAgSG93ZXZlciwgaXQgY2FuJ3QgYmUgc3RhbGUg ZW5vdWdoIHRvCi0JCSAqIG1hdHRlci4KLQkJICoKLQkJICogV2UgbmVlZCB0byBkZXRlY3QgY2xl YXJpbmcgYSBWTSBiaXQgZHVlIHRvIGFuIGluc2VydCByaWdodCBhd2F5LAotCQkgKiBiZWNhdXNl IHRoZSB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBwYWdlIGJ1dCBub3QgdmlzaWJsZS4g VGhlCi0JCSAqIHJlYWRpbmcgb2YgdGhlIFRJRCBieSB0aGlzIHNjYW4gKHVzaW5nIGEgc2hhcmVk IGxvY2sgb24gdGhlIGluZGV4Ci0JCSAqIGJ1ZmZlcikgaXMgc2VyaWFsaXplZCB3aXRoIHRoZSBp bnNlcnQgb2YgdGhlIFRJRCBpbnRvIHRoZSBpbmRleAotCQkgKiAodXNpbmcgYW4gZXhjbHVzaXZl IGxvY2sgb24gdGhlIGluZGV4IGJ1ZmZlcikuIEJlY2F1c2UgdGhlIFZNIGJpdAotCQkgKiBpcyBj bGVhcmVkIGJlZm9yZSB1cGRhdGluZyB0aGUgaW5kZXgsIGFuZCBsb2NraW5nL3VubG9ja2luZyBv ZiB0aGUKLQkJICogaW5kZXggcGFnZSBhY3RzIGFzIGEgZnVsbCBtZW1vcnkgYmFycmllciwgd2Ug YXJlIHN1cmUgdG8gc2VlIHRoZQotCQkgKiBjbGVhcmVkIGJpdCBpZiB3ZSBzZWUgYSByZWNlbnRs eS1pbnNlcnRlZCBUSUQuCi0JCSAqCi0JCSAqIERlbGV0ZXMgZG8gbm90IHVwZGF0ZSB0aGUgaW5k ZXggcGFnZSAob25seSBWQUNVVU0gd2lsbCBjbGVhciBvdXQKLQkJICogdGhlIFRJRCksIHNvIHRo ZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlzIG5vdAotCQkgKiBzZXJpYWxp emVkIHdpdGggdGhpcyB0ZXN0IGJlbG93LCBhbmQgd2UgbWF5IHNlZSBhIHZhbHVlIHRoYXQgaXMK LQkJICogc2lnbmlmaWNhbnRseSBzdGFsZS4gSG93ZXZlciwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0 aGUgZGVsZXRlIHJpZ2h0Ci0JCSAqIGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHN0aWxsIHZp c2libGUgdW50aWwgdGhlIGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIGNvbW1pdHMgb3IgdGhl IHN0YXRlbWVudCBlbmRzIChpZiBpdCdzIG91cgotCQkgKiB0cmFuc2FjdGlvbikuIEluIGVpdGhl ciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwgaGF2ZQotCQkgKiBiZWVuIHJl bGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVhcmluZyB0aGUgYml0 LgotCQkgKiBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFwc2hvdCB0aGF0IGluY2x1ZGVzIHRoZSBk ZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZSBpbnZpc2libGUpLCB3 ZSBtdXN0IGhhdmUgYWNxdWlyZWQKLQkJICogUHJvY0FycmF5TG9jayBhZnRlciB0aGF0IHRpbWUs IGFjdGluZyBhcyBhIHJlYWQgYmFycmllci4KLQkJICoKLQkJICogSXQncyB3b3J0aCBnb2luZyB0 aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBuZWVkaW5nIHRvIGxvY2sKLQkJICogdGhl IFZNIGJ1ZmZlciwgd2hpY2ggY291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgY29udGVudGlvbi4KLQkJ ICovCi0JCWlmICghVk1fQUxMX1ZJU0lCTEUoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKLQkJCQkJ CQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJJm5vZGUtPmlvc3NfVk1C dWZmZXIpKQotCQl7Ci0JCQkvKgotCQkJICogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVh cCB0byBjaGVjayB2aXNpYmlsaXR5LgotCQkJICovCi0JCQlJbnN0ckNvdW50VHVwbGVzMihub2Rl LCAxKTsKLQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuZGVzYywgbm9kZS0+aW9zc19UYWJs ZVNsb3QpKQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5k ZXggZW50cnkgKi8KLQotCQkJRXhlY0NsZWFyVHVwbGUobm9kZS0+aW9zc19UYWJsZVNsb3QpOwot Ci0JCQkvKgotCQkJICogT25seSBNVkNDIHNuYXBzaG90cyBhcmUgc3VwcG9ydGVkIGhlcmUsIHNv IHRoZXJlIHNob3VsZCBiZSBubwotCQkJICogbmVlZCB0byBrZWVwIGZvbGxvd2luZyB0aGUgSE9U IGNoYWluIG9uY2UgYSB2aXNpYmxlIGVudHJ5IGhhcwotCQkJICogYmVlbiBmb3VuZC4gIElmIHdl IGRpZCB3YW50IHRvIGFsbG93IHRoYXQsIHdlJ2QgbmVlZCB0byBrZWVwCi0JCQkgKiBtb3JlIHN0 YXRlIHRvIHJlbWVtYmVyIG5vdCB0byBjYWxsIGluZGV4X2dldG5leHRfdGlkIG5leHQgdGltZS4K LQkJCSAqLwotCQkJaWYgKHNjYW5kZXNjLT54c19oZWFwX2NvbnRpbnVlKQotCQkJCWVsb2coRVJS T1IsICJub24tTVZDQyBzbmFwc2hvdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXgtb25seSBz Y2FucyIpOwotCi0JCQkvKgotCQkJICogTm90ZTogYXQgdGhpcyBwb2ludCB3ZSBhcmUgaG9sZGlu ZyBhIHBpbiBvbiB0aGUgaGVhcCBwYWdlLCBhcwotCQkJICogcmVjb3JkZWQgaW4gc2NhbmRlc2Mt PnhzX2NidWYuICBXZSBjb3VsZCByZWxlYXNlIHRoYXQgcGluIG5vdywKLQkJCSAqIGJ1dCBpdCdz IG5vdCBjbGVhciB3aGV0aGVyIGl0J3MgYSB3aW4gdG8gZG8gc28uICBUaGUgbmV4dCBpbmRleAot CQkJICogZW50cnkgbWlnaHQgcmVxdWlyZSBhIHZpc2l0IHRvIHRoZSBzYW1lIGhlYXAgcGFnZS4K LQkJCSAqLwotCi0JCQl0dXBsZV9mcm9tX2hlYXAgPSB0cnVlOwotCQl9Ci0KIAkJLyoKIAkJICog RmlsbCB0aGUgc2NhbiB0dXBsZSBzbG90IHdpdGggZGF0YSBmcm9tIHRoZSBpbmRleC4gIFRoaXMg bWlnaHQgYmUKIAkJICogcHJvdmlkZWQgaW4gZWl0aGVyIEhlYXBUdXBsZSBvciBJbmRleFR1cGxl IGZvcm1hdC4gIENvbmNlaXZhYmx5IGFuCkBAIC0yMzgsMTYgKzE2Myw2IEBAIEluZGV4T25seU5l eHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJsb3Nz eSBkaXN0YW5jZSBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2Fu cyIpKSk7Ci0KLQkJLyoKLQkJICogSWYgd2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgdGhlbiB3 ZSdsbCBuZWVkIHRvIHRha2UgYSBwcmVkaWNhdGUKLQkJICogbG9jayBleHBsaWNpdGx5LCBhcyBp ZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZSBsZXZlbC4KLQkJICovCi0JCWlm ICghdHVwbGVfZnJvbV9oZWFwKQotCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2NhbmRlc2MtPmhlYXBS ZWxhdGlvbiwKLQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJ CQkgIGVzdGF0ZS0+ZXNfc25hcHNob3QpOwotCiAJCXJldHVybiBzbG90OwogCX0KIApAQCAtNDA3 LDEzICszMjIsNiBAQCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5v ZGUpCiAJaW5kZXhSZWxhdGlvbkRlc2MgPSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYzsKIAlpbmRl eFNjYW5EZXNjID0gbm9kZS0+aW9zc19TY2FuRGVzYzsKIAotCS8qIFJlbGVhc2UgVk0gYnVmZmVy IHBpbiwgaWYgYW55LiAqLwotCWlmIChub2RlLT5pb3NzX1ZNQnVmZmVyICE9IEludmFsaWRCdWZm ZXIpCi0JewotCQlSZWxlYXNlQnVmZmVyKG5vZGUtPmlvc3NfVk1CdWZmZXIpOwotCQlub2RlLT5p b3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0KIAkvKgogCSAqIFdoZW4gZW5kaW5n IGEgcGFyYWxsZWwgd29ya2VyLCBjb3B5IHRoZSBzdGF0aXN0aWNzIGdhdGhlcmVkIGJ5IHRoZQog CSAqIHdvcmtlciBiYWNrIGludG8gc2hhcmVkIG1lbW9yeSBzbyB0aGF0IGl0IGNhbiBiZSBwaWNr ZWQgdXAgYnkgdGhlIG1haW4KQEAgLTQzMyw2ICszNDEsNyBAQCBFeGVjRW5kSW5kZXhPbmx5U2Nh bihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBJ bmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50 LT5uc2VhcmNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJd2luc3Ry dW1lbnQtPm5oZWFwZmV0Y2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQubmhlYXBmZXRjaGVz OwogCX0KIAogCS8qCkBAIC03ODQsMTMgKzY5MywxMiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRp YWxpemVEU00oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19TY2FuRGVz YyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRp b24sCi0JCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlv c3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwK IAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051 bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNjLT54 c193YW50X2l0dXAgPSB0cnVlOwotCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVy OworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCiAJLyoKIAkg KiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28g YWhlYWQgYW5kIHBhc3MKQEAgLTg1MCwxMiArNzU4LDEyIEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5p dGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pb3NzX1Nj YW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRS ZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9k ZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJCQkJCQkJCSAmbm9kZS0+aW9zc19JbnN0cnVt ZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlv c3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotCW5vZGUtPmlvc3NfU2NhbkRl c2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7CisJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhz X3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRl IG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUluZGV4c2Nhbi5jCmluZGV4IGE2MTZhYmZmMC4uYTI1ZTQwZTFmIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0xMDcsNyArMTA3LDcgQEAgSW5kZXhOZXh0KEluZGV4U2Nh blN0YXRlICpub2RlKQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0 IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9i ZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5p c3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxz ZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgJm5vZGUtPmlz c19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0xMjgs NyArMTI4LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogb2ss IG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkg Ki8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNsb3Qp KQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwg c2xvdCkpCiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCkBAIC0yMDMsNyArMjAzLDcg QEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlh bGx5IGV4ZWN1dGluZyBhbiBpbmRleCBzY2FuIHRoYXQgd2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxs ZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJy ZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVz X3NuYXBzaG90LAogCQkJCQkJCQkgICAmbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAg IG5vZGUtPmlzc19OdW1TY2FuS2V5cywKQEAgLTI2MCw3ICsyNjAsNyBAQCBJbmRleE5leHRXaXRo UmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogRmV0Y2ggbmV4dCB0dXBsZSBmcm9t IHRoZSBpbmRleC4KIAkJICovCiBuZXh0X2luZGV4dHVwbGU6Ci0JCWlmICghaW5kZXhfZ2V0bmV4 dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCWlmICghdGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2xv dCkpCiAJCXsKIAkJCS8qCiAJCQkgKiBObyBtb3JlIHR1cGxlcyBmcm9tIHRoZSBpbmRleC4gIEJ1 dCB3ZSBzdGlsbCBuZWVkIHRvIGRyYWluIGFueQpAQCAtODEyLDYgKzgxMiw3IEBAIEV4ZWNFbmRJ bmRleFNjYW4oSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5l dyBJbmRleE9ubHlTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVt ZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQlBc3Nl cnQobm9kZS0+aXNzX0luc3RydW1lbnQubmhlYXBmZXRjaGVzID09IDApOwogCX0KIAogCS8qCkBA IC0xNzE5LDcgKzE3MjAsNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5T dGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9w YXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pc3Nf UmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJ CQkJCQkJCSAmbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2Nh bktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCkBAIC0xNzgzLDcgKzE3 ODQsNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAqbm9k ZSwKIAogCW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChu b2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLAorCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSAm bm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJ CQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtleXMsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTWVyZ2Vqb2luLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVy Z2Vqb2luLmMKaW5kZXggY2JjYWU0YzcwLi45YjQzZWQ4YjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTWVyZ2Vqb2luLmMKQEAgLTU0LDggKzU0LDggQEAKICAqCQl0aGUgaW5uZXIgIjUncyIuIFRo aXMgcmVxdWlyZXMgcmVwb3NpdGlvbmluZyB0aGUgaW5uZXIgImN1cnNvciIKICAqCQl0byBwb2lu dCBhdCB0aGUgZmlyc3QgaW5uZXIgIjUiLiBUaGlzIGlzIGRvbmUgYnkgIm1hcmtpbmciIHRoZQog ICoJCWZpcnN0IGlubmVyIDUgc28gd2UgY2FuIHJlc3RvcmUgdGhlICJjdXJzb3IiIHRvIGl0IGJl Zm9yZSBqb2luaW5nCi0gKgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSBhY2Nlc3MgbWV0 aG9kIGludGVyZmFjZSBwcm92aWRlcwotICoJCXJvdXRpbmVzIHRvIG1hcmsgYW5kIHJlc3RvcmUg dG8gYSB0dXBsZS4KKyAqCQl3aXRoIHRoZSBzZWNvbmQgb3V0ZXIgNS4gVGhlIGluZGV4YmF0Y2gu YyBpbnRlcmZhY2UgcHJvdmlkZXMKKyAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3JlIHRv IGEgdHVwbGUgZHVyaW5nIGluZGV4IHNjYW5zLgogICoKICAqCiAgKgkJRXNzZW50aWFsIG9wZXJh dGlvbiBvZiB0aGUgbWVyZ2Ugam9pbiBhbGdvcml0aG0gaXMgYXMgZm9sbG93czoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IDY3ZDlkYzM1Zi4uZDYxYzBiNmYzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKQEAgLTQzLDcgKzQzLDcgQEAKIC8qIFdo ZXRoZXIgd2UgYXJlIGxvb2tpbmcgZm9yIHBsYWluIGluZGV4c2NhbiwgYml0bWFwIHNjYW4sIG9y IGVpdGhlciAqLwogdHlwZWRlZiBlbnVtCiB7Ci0JU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1 cHBvcnQgYW1nZXR0dXBsZSAqLworCVNUX0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFt Z2V0dHVwbGUgb3IgYW1nZXRiYXRjaCAqLwogCVNUX0JJVE1BUFNDQU4sCQkJCS8qIG11c3Qgc3Vw cG9ydCBhbWdldGJpdG1hcCAqLwogCVNUX0FOWVNDQU4sCQkJCQkvKiBlaXRoZXIgaXMgb2theSAq LwogfSBTY2FuVHlwZUNvbnRyb2w7CkBAIC03NDcsNyArNzQ3LDcgQEAgZ2V0X2luZGV4X3BhdGhz KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlJbmRleFBhdGggICpp cGF0aCA9IChJbmRleFBhdGggKikgbGZpcnN0KGxjKTsKIAotCQlpZiAoaW5kZXgtPmFtaGFzZ2V0 dHVwbGUpCisJCWlmIChpbmRleC0+YW1oYXNnZXRiYXRjaCkKIAkJCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgaXBhdGgpOwogCiAJCWlmIChpbmRleC0+YW1oYXNnZXRiaXRtYXAgJiYKQEAgLTgzNSw3 ICs4MzUsNyBAQCBidWlsZF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogCXN3aXRjaCAoc2NhbnR5cGUpCiAJewogCQljYXNlIFNUX0lOREVYU0NBTjoKLQkJ CWlmICghaW5kZXgtPmFtaGFzZ2V0dHVwbGUpCisJCQlpZiAoIWluZGV4LT5hbWhhc2dldGJhdGNo KQogCQkJCXJldHVybiBOSUw7CiAJCQlicmVhazsKIAkJY2FzZSBTVF9CSVRNQVBTQ0FOOgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IDFiMjBiYzgwNS4uZDI0ZmRkZDAyIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0zMTMsMTEgKzMxMywxMSBAQCBn ZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQs IGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUtPmFt c2VhcmNoYXJyYXk7CiAJCQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+YW1zZWFy Y2hudWxsczsKIAkJCQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNhbnBhcmFs bGVsOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9 IE5VTEwpOworCQkJCWluZm8tPmFtaGFzZ2V0YmF0Y2ggPSAoYW1yb3V0aW5lLT5hbWdldGJhdGNo ICE9IE5VTEwgfHwKKwkJCQkJCQkJCSAgIGFtcm91dGluZS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsK IAkJCQlpbmZvLT5hbWhhc2dldGJpdG1hcCA9IGFtcm91dGluZS0+YW1nZXRiaXRtYXAgIT0gTlVM TCAmJgogCQkJCQlyZWxhdGlvbi0+cmRfdGFibGVhbS0+c2Nhbl9iaXRtYXBfbmV4dF90dXBsZSAh PSBOVUxMOwotCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IChhbXJvdXRpbmUtPmFtbWFya3BvcyAh PSBOVUxMICYmCi0JCQkJCQkJCQkgIGFtcm91dGluZS0+YW1yZXN0cnBvcyAhPSBOVUxMKTsKKwkJ CQlpbmZvLT5hbWNhbm1hcmtwb3MgPSBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTDsKIAkJ CQlpbmZvLT5hbWNvc3Rlc3RpbWF0ZSA9IGFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGU7CiAJCQkJ QXNzZXJ0KGluZm8tPmFtY29zdGVzdGltYXRlICE9IE5VTEwpOwogCkBAIC00MTQsNyArNDE0LDcg QEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVj dElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNlYXJjaGFycmF5ID0gZmFsc2U7CiAJ CQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGZhbHNlOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwg PSBmYWxzZTsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gZmFsc2U7CisJCQkJaW5mby0+YW1o YXNnZXRiYXRjaCA9IGZhbHNlOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gZmFsc2U7CiAJ CQkJaW5mby0+YW1jYW5tYXJrcG9zID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUg PSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxh dGlvbi5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4 IDBiMWQ4MGI1Yi4uNzZiMGQwMzVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9yZWxhdGlvbi5jCkBAIC04OTAsNyArODkwLDggQEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJ ZGVudGl0eUZ1bGwoUmVsYXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogCSAqIFRoZSBn aXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9kIG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiwgd2hp Y2ggd2lsbAogCSAqIGJlIHVzZWQgbGF0ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZSBSZWxh dGlvbkZpbmRSZXBsVHVwbGVCeUluZGV4KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0aW5l QnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwp CisJaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFs c2UpLT5hbWdldHR1cGxlID09IE5VTEwgJiYKKwkJR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4 cmVsLT5yZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJcmV0dXJu IGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvYW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCBjODFm YjYxYTAuLmRkZmQxYjU1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRp bHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsMTAgKzM2 MywxMSBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCVBH X1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2x1c3RlcmFibGUpOwogCiAJCQljYXNlIEFNUFJPUF9J TkRFWF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVl IDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVM TCB8fAorCQkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJCWNhc2Ug QU1QUk9QX0JJVE1BUF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0 bWFwID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJp dG1hcCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQkFDS1dBUkRfU0NBTjoKIAkJCQlQR19S RVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmJhY2t3YXJkKTsKQEAgLTM5Miw3ICszOTMsOCBAQCBp bmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJUEdfUkVUVVJOX0JP T0wocm91dGluZS0+YW1jYW5tdWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0VYQ0xVREU6 Ci0JCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsK KwkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJ ICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fSU5D TFVERToKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9zZWxmdW5jcy5jCmluZGV4IDI5ZmVjNjU1NS4uNjE2YWNmYzk1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvc2VsZnVuY3MuYwpAQCAtMTAyLDcgKzEwMiw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpbi5o IgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgi Ci0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX3N0YXRpc3RpYy5oIgpAQCAtNzEyNCwxMCArNzEyMyw2IEBAIGdldF9hY3R1 YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAlib29sCQloYXZlX2RhdGEg PSBmYWxzZTsKIAlTbmFwc2hvdERhdGEgU25hcHNob3ROb25WYWN1dW1hYmxlOwogCUluZGV4U2Nh bkRlc2MgaW5kZXhfc2NhbjsKLQlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQlC bG9ja051bWJlciBsYXN0X2hlYXBfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JaW50CQkJ bl92aXNpdGVkX2hlYXBfcGFnZXMgPSAwOwotCUl0ZW1Qb2ludGVyIHRpZDsKIAlEYXR1bQkJdmFs dWVzW0lOREVYX01BWF9LRVlTXTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwogCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dDsKQEAgLTcxNzUsNjAgKzcxNzAsMjYgQEAgZ2V0X2FjdHVh bF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCSAqIGEgaHVnZSBhbW91bnQg b2YgdGltZSBoZXJlLCBzbyB3ZSBnaXZlIHVwIG9uY2Ugd2UndmUgcmVhZCB0b28gbWFueSBoZWFw CiAJICogcGFnZXMuICBXaGVuIHdlIGZhaWwgZm9yIHRoYXQgcmVhc29uLCB0aGUgY2FsbGVyIHdp bGwgZW5kIHVwIHVzaW5nCiAJICogd2hhdGV2ZXIgZXh0cmVtYWwgdmFsdWUgaXMgcmVjb3JkZWQg aW4gcGdfc3RhdGlzdGljLgorCSAqCisJICogWFhYIFRoaXMgY2FuJ3Qgd29yayB3aXRoIHRoZSBu ZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwKKwkgKiB3aGljaCBzaW1wbHkg d29uJ3QgcmV0dXJuIGEgdHVwbGUgdGhhdCBpc24ndCB2aXNpYmxlIHRvIG91ciBzbmFwc2hvdC4K KwkgKiB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCBuZWVkIHNvbWUga2luZCBvZiBjYWxs YmFjayB0aGF0IHByb3ZpZGVzCisJICogYSB3YXkgZm9yIHRoZSBzY2FuIHRvIGdpdmUgdXAgd2hl biB0aGUgY29zdHMgc3RhcnQgdG8gZ2V0IG91dCBvZiBoYW5kLgogCSAqLwogCUluaXROb25WYWN1 dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlz VGVzdEZvcihoZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBS ZWwsIGluZGV4UmVsLAorCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5k ZXhSZWwsIHRydWUsCiAJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJ CQkJCQkgMSwgMCk7Ci0JLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQlpbmRl eF9zY2FuLT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChpbmRleF9zY2FuLT54c193YW50 X2l0dXApOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7 CiAKIAkvKiBGZXRjaCBmaXJzdC9uZXh0IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8K LQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRp cikpICE9IE5VTEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2Fu LCBpbmRleHNjYW5kaXIsIHRhYmxlc2xvdCkpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKLQotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhl YXBSZWwsCi0JCQkJCQkJYmxvY2ssCi0JCQkJCQkJJnZtYnVmZmVyKSkKLQkJewotCQkJLyogUmF0 cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5ICovCi0JCQlp ZiAoIWluZGV4X2ZldGNoX2hlYXAoaW5kZXhfc2NhbiwgdGFibGVzbG90KSkKLQkJCXsKLQkJCQkv KgotCQkJCSAqIE5vIHZpc2libGUgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnksIHNvIHdlIG5l ZWQgdG8KLQkJCQkgKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGVudHJ5LiAgQmVmb3JlIGRvaW5nIHNv LCBjb3VudCBoZWFwCi0JCQkJICogcGFnZSBmZXRjaGVzIGFuZCBnaXZlIHVwIGlmIHdlJ3ZlIGRv bmUgdG9vIG1hbnkuCi0JCQkJICoKLQkJCQkgKiBXZSBkb24ndCBjaGFyZ2UgYSBwYWdlIGZldGNo IGlmIHRoaXMgaXMgdGhlIHNhbWUgaGVhcCBwYWdlCi0JCQkJICogYXMgdGhlIHByZXZpb3VzIHR1 cGxlLiAgVGhpcyBpcyBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUsCi0JCQkJICogc2luY2Ugb3Ro ZXIgcmVjZW50bHktYWNjZXNzZWQgcGFnZXMgYXJlIHByb2JhYmx5IHN0aWxsIGluCi0JCQkJICog YnVmZmVycyB0b287IGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciB0aGlzIGhldXJpc3RpYy4KLQkJ CQkgKi8KLSNkZWZpbmUgVklTSVRFRF9QQUdFU19MSU1JVCAxMDAKLQotCQkJCWlmIChibG9jayAh PSBsYXN0X2hlYXBfYmxvY2spCi0JCQkJewotCQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsK LQkJCQkJbl92aXNpdGVkX2hlYXBfcGFnZXMrKzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3Bh Z2VzID4gVklTSVRFRF9QQUdFU19MSU1JVCkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNv bnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJ CX0KLQotCQkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55 dGhpbmcgKi8KLQkJCUV4ZWNDbGVhclR1cGxlKHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBX ZSBkb24ndCBjYXJlIHdoZXRoZXIgdGhlcmUncyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUg aW4KLQkJCSAqIHRoZSBIT1QgY2hhaW47IGlmIGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2Qg ZW5vdWdoLgotCQkJICovCi0JCX0KKwkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVh cCB0dXBsZSBmb3IgYW55dGhpbmcgKi8KKwkJRXhlY0NsZWFyVHVwbGUodGFibGVzbG90KTsKIAog CQkvKgogCQkgKiBXZSBleHBlY3QgdGhhdCB0aGUgaW5kZXggd2lsbCByZXR1cm4gZGF0YSBpbiBJ bmRleFR1cGxlIG5vdApAQCAtNzI2MSw4ICs3MjIyLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9l bmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCQlicmVhazsKIAl9CiAKLQlpZiAodm1idWZmZXIg IT0gSW52YWxpZEJ1ZmZlcikKLQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CiAJaW5kZXhfZW5k c2NhbihpbmRleF9zY2FuKTsKIAogCXJldHVybiBoYXZlX2RhdGE7CmRpZmYgLS1naXQgYS9jb250 cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRy ZWUuYwppbmRleCAzNDQzM2U4MTkuLjNhNWE0YmUzOCAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNo ZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5j CkBAIC0zOTMsNyArMzkzLDcgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBS ZWxhdGlvbiBoZWFwcmVsLCBib29sIGhlYXBrZXlzcGFjZSwKIAkJCSBSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpKTsKIAogCS8qCi0JICogVGhpcyBhc3NlcnRpb24gbWF0Y2hlcyB0aGUgb25l IGluIGluZGV4X2dldG5leHRfdGlkKCkuICBTZWUgcGFnZQorCSAqIFRoaXMgYXNzZXJ0aW9uIG1h dGNoZXMgdGhlIG9uZSBpbiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dCgpLiAgU2VlIHBhZ2UKIAkgKiBy ZWN5Y2xpbmcvInZpc2libGUgdG8gZXZlcnlvbmUiIG5vdGVzIGluIG5idHJlZSBSRUFETUUuCiAJ ICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5k ZXggNTExMWNkYzZkLi43ZmQ5OGRiYTYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGls cy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNDYsMTAgKzE0NiwxMSBAQCBi bGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYmxiZWdpbnNjYW4s CiAJCS5hbXJlc2NhbiA9IGJscmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdl dGJhdGNoID0gTlVMTCwKKwkJLmFtZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0g YmxnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBibGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBO VUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFt ZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVM TCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9k dW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCmluZGV4IDMxZjhkMmI4MS4uNjU1ODg0ODlm IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4 X2FtLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9h bS5jCkBAIC0zMzQsMTAgKzMzNCwxMSBAQCBkaWhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJ LmFtYmVnaW5zY2FuID0gZGliZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGRpcmVzY2FuLAogCQku YW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtZnJlZWJhdGNo ID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJLmFtZW5kc2NhbiA9IGRpZW5kc2Nh biwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9z cmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWlu aXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDc2MTk4NDVmYi4uMzFlNjQyZmY1IDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMjI2LDggKzIyNiw2IEBAIEJUU2Nhbkluc2VydERhdGEKIEJU U2NhbktleVByZXByb2MKIEJUU2Nhbk9wYXF1ZQogQlRTY2FuT3BhcXVlRGF0YQotQlRTY2FuUG9z RGF0YQotQlRTY2FuUG9zSXRlbQogQlRTaGFyZWQKIEJUU29ydEFycmF5Q29udGV4dAogQlRTcG9v bApAQCAtMjU2LDYgKzI1NCw5IEBAIEJhc2VCYWNrdXBDbWQKIEJhc2VCYWNrdXBUYXJnZXRIYW5k bGUKIEJhc2VCYWNrdXBUYXJnZXRUeXBlCiBCYXRjaE1WQ0NTdGF0ZQorQmF0Y2hNYXRjaGluZ0l0 ZW0KK0JhdGNoUmluZ0J1ZmZlcgorQmF0Y2hSaW5nSXRlbVBvcwogQmVnaW5EaXJlY3RNb2RpZnlf ZnVuY3Rpb24KIEJlZ2luRm9yZWlnbkluc2VydF9mdW5jdGlvbgogQmVnaW5Gb3JlaWduTW9kaWZ5 X2Z1bmN0aW9uCkBAIC0xMjg3LDYgKzEyODgsOCBAQCBJbmRleE9yZGVyQnlEaXN0YW5jZQogSW5k ZXhQYXRoCiBJbmRleFJ1bnRpbWVLZXlJbmZvCiBJbmRleFNjYW4KK0luZGV4U2NhbkJhdGNoCitJ bmRleFNjYW5CYXRjaERhdGEKIEluZGV4U2NhbkRlc2MKIEluZGV4U2NhbkRlc2NEYXRhCiBJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24KQEAgLTM0NzUsMTggKzM0NzgsMTcgQEAgYW1jYW5yZXR1cm5f ZnVuY3Rpb24KIGFtY29zdGVzdGltYXRlX2Z1bmN0aW9uCiBhbWVuZHNjYW5fZnVuY3Rpb24KIGFt ZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24KK2FtZ2V0YmF0Y2hfZnVuY3Rpb24KIGFtZ2V0 Yml0bWFwX2Z1bmN0aW9uCiBhbWdldHRyZWVoZWlnaHRfZnVuY3Rpb24KIGFtZ2V0dHVwbGVfZnVu Y3Rpb24KIGFtaW5pdHBhcmFsbGVsc2Nhbl9mdW5jdGlvbgogYW1pbnNlcnRfZnVuY3Rpb24KIGFt aW5zZXJ0Y2xlYW51cF9mdW5jdGlvbgotYW1tYXJrcG9zX2Z1bmN0aW9uCiBhbW9wdGlvbnNfZnVu Y3Rpb24KIGFtcGFyYWxsZWxyZXNjYW5fZnVuY3Rpb24KIGFtcHJvcGVydHlfZnVuY3Rpb24KIGFt cmVzY2FuX2Z1bmN0aW9uCi1hbXJlc3RycG9zX2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9jbXB0eXBl X2Z1bmN0aW9uCiBhbXRyYW5zbGF0ZV9zdHJhdGVneV9mdW5jdGlvbgogYW12YWN1dW1jbGVhbnVw X2Z1bmN0aW9uCi0tIAoyLjUxLjAKCg== --0000000000004da713064a6be2eb Content-Type: application/x-patch; name="v10-0002-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Disposition: attachment; filename="v10-0002-Use-fake-LSNs-to-improve-nbtree-dropPin-behavior.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlfqgdzv10 RnJvbSBmYzFiZDZiNDc5ZjdmY2U2MGE3MzY5ZmI5YWRlMDg2NDE2NThlMWFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MTQ6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMCAwMi8xMV0g VXNlIGZha2UgTFNOcyB0byBpbXByb3ZlIG5idHJlZSBkcm9wUGluIGJlaGF2aW9yLgoKUHJldmlv dXNseSB1bmxvZ2dlZCBuYnRyZWUgaW5kZXhlcyBuZWVkZWQgdG8gaG9sZCBvbiB0byBhIGxlYWYg cGFnZQpidWZmZXIgcGluIHdoZW4gc3RvcHBlZCBvbiB0aGF0IGxlYWYgcGFnZSwgcHVyZWx5IHNv IHRoYXQgdGhlCl9idF9raWxsaXRlbXMgcHJvY2VzcyBoYWQgYSB3YXkgdG8gYmUgc3VyZSB0aGF0 IHRoZXJlIHdhc24ndCBhbnkgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNV VU0uICBUaGUgX2J0X2tpbGxpdGVtcycgZHJvcFBpbiBzdHJhdGVneQpjb3VsZG4ndCBiZSB1c2Vk IGJlZm9yZSBub3csIHNpbmNlIGl0IHdvcmtzIGJ5IGNoZWNraW5nIGlmIHRoZSBwYWdlIExTTgpo YXMgY2hhbmdlZCBpbiB0aGUgcGVyaW9kIGFmdGVyIF9idF9yZWFkcGFnZSByZWFkIHRoZSBwYWdl J3MgaXRlbXMsIGJ1dApiZWZvcmUgX2J0X2tpbGxpdGVtcyB3YXMgY2FsbGVkLiAgV2Ugbm93IHVz ZSB0aGUgc2FtZSBMU04gdHJpY2sgd2l0aAp1bmxvZ2dlZCBpbmRleGVzLCBicmluZ2luZyB0aGUg c2FtZSBiZW5lZml0cyB0byB0aGVzZSBzY2FucyB0aGF0IGNvbW1pdAoyZWQ1Yjg3ZiBicm91Z2h0 IHRvIHNjYW5zIG9mIGxvZ2dlZCByZWxhdGlvbnMuCgpUaGlzIGlzIHByZXBhcmF0aW9uIGZvciBh biB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIGFkZCB0aGUgYW1nZXRiYXRjaAppbnRlcmZhY2Ug YW5kIHN3aXRjaCBuYnRyZWUgb3ZlciB0byBpdCAoZnJvbSBhbWdldHR1cGxlKS4gIFRoYXQgd2ls bCBnbwpmdXJ0aGVyIGJ5IGNvbXBsZXRlbHkgb2J2aWF0aW5nIHRoZSBuZWVkIGZvciBhbWdldGJh dGNoIHNjYW5zIHRvIGhhbmcgb24KdG8gYnVmZmVyIHBpbnMgKGJhcnJpbmcgc2NhbnMgaW52b2x2 aW5nIGEgbm9uLU1WQ0Mgc25hcHNob3QpLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1XemtlaHVoeHl1QThx dWM3clJOM0V0TlhwaUtzalBmTzhtaGIrMERyMkswRHRnQG1haWwuZ21haWwuY29tCi0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICB8ICA1ICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMgIHwgIDggKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idGluc2VydC5jIHwgNDggKysrKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRwYWdlLmMgICB8IDgyICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICB8ICA4IC0tLQogc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyB8ICAxIC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0dXRpbHMuYyAgfCAgMSAtCiA3IGZpbGVzIGNoYW5nZWQsIDgwIGluc2VydGlvbnMoKyks IDczIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggNTNkNGE2MWRj Li5jYjkyMWNhMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1F CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC00ODUsOSArNDg1LDgg QEAgV2UgaGFuZGxlIHRoaXMga2lsbF9wcmlvcl90dXBsZSByYWNlIGNvbmRpdGlvbiBieSBoYXZp bmcgYWZmZWN0ZWQgaW5kZXgKIHNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBj aGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBhbGwKIGltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hl ZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KIGJ1ZmZlciBw aW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9E RUFEIGJpdHMKLW9uIHRoZSBsZWFmIHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2UncyBMU04gaGFz IGNoYW5nZWQuICAoVGhhdCB3b24ndCB3b3JrCi13aXRoIGFuIHVubG9nZ2VkIGluZGV4LCBzbyBm b3Igbm93IHdlIGRvbid0IGV2ZXIgYXBwbHkgdGhlICJkb24ndCBob2xkCi1vbnRvIHBpbiIgb3B0 aW1pemF0aW9uIHRoZXJlLikKK29uIHRoZSBsZWFmIHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2Un cyBMU04gaGFzIGNoYW5nZWQuICAoVGhpcyBpcyB3aHkgd2UKK2ltcGxlbWVudCAiZmFrZSIgTFNO cyBmb3IgdW5sb2dnZWQgaW5kZXggcmVsYXRpb25zLikKIAogRmFzdHBhdGggRm9yIEluZGV4IElu c2VydGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRkZWR1cC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnRkZWR1cC5jCmluZGV4IDk1YmUwYjE3OS4uYWY3YWZmZGY0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGRlZHVwLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRkZWR1cC5jCkBAIC02OSw2ICs2OSw3IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwK IAlTaXplCQlwYWdlc2F2aW5nIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9IDA7CiAJYm9vbAkJ c2luZ2xldmFsc3RyYXQgPSBmYWxzZTsKIAlpbnQJCQlua2V5YXR0cyA9IEluZGV4UmVsYXRpb25H ZXROdW1iZXJPZktleUF0dHJpYnV0ZXMocmVsKTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCS8q IFBhc3NlZC1pbiBuZXdpdGVtc3ogaXMgTUFYQUxJR05FRCBidXQgZG9lcyBub3QgaW5jbHVkZSBs aW5lIHBvaW50ZXIgKi8KIAluZXdpdGVtc3ogKz0gc2l6ZW9mKEl0ZW1JZERhdGEpOwpAQCAtMjQ1 LDcgKzI0Niw2IEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5k ZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYg KFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9i dHJlZV9kZWR1cCB4bHJlY19kZWR1cDsKIAogCQl4bHJlY19kZWR1cC5uaW50ZXJ2YWxzID0gc3Rh dGUtPm5pbnRlcnZhbHM7CkBAIC0yNjMsOSArMjYzLDExIEBAIF9idF9kZWR1cF9wYXNzKFJlbGF0 aW9uIHJlbCwgQnVmZmVyIGJ1ZiwgSW5kZXhUdXBsZSBuZXdpdGVtLCBTaXplIG5ld2l0ZW1zeiwK IAkJCQkJCQlzdGF0ZS0+bmludGVydmFscyAqIHNpemVvZihCVERlZHVwSW50ZXJ2YWwpKTsKIAog CQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX0RFRFVQKTsKLQot CQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dl dEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKIAogCUVORF9DUklU X1NFQ1RJT04oKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRp bnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0aW5zZXJ0LmMKaW5kZXggZDE3 YWFhNWFhLi5jYzc5ODk0ZDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwpA QCAtMTEyNSw2ICsxMTI1LDcgQEAgX2J0X2luc2VydG9ucGcoUmVsYXRpb24gcmVsLAogCUluZGV4 VHVwbGUJb3Bvc3RpbmcgPSBOVUxMOwogCUluZGV4VHVwbGUJb3JpZ2l0dXAgPSBOVUxMOwogCUlu ZGV4VHVwbGUJbnBvc3RpbmcgPSBOVUxMOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJcGFnZSA9 IEJ1ZmZlckdldFBhZ2UoYnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBA IC0xMzIyLDcgKzEzMjMsNiBAQCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJCQl4bF9i dHJlZV9pbnNlcnQgeGxyZWM7CiAJCQl4bF9idHJlZV9tZXRhZGF0YSB4bG1ldGE7CiAJCQl1aW50 OAkJeGxpbmZvOwotCQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCQl1aW50MTYJCXVwb3N0aW5nb2Zm OwogCiAJCQl4bHJlYy5vZmZudW0gPSBuZXdpdGVtb2ZmOwpAQCAtMTM5NSwxNCArMTM5NSwxNiBA QCBfYnRfaW5zZXJ0b25wZyhSZWxhdGlvbiByZWwsCiAJCQl9CiAKIAkJCXJlY3B0ciA9IFhMb2dJ bnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFi dWYpKQotCQkJCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwotCQkJaWYgKCFpc2xlYWYpCi0J CQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGNidWYpLCByZWNwdHIpOwotCi0JCQlQYWdlU2V0 TFNOKHBhZ2UsIHJlY3B0cik7CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dldEZha2VM U04ocmVsKTsKKworCQlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJCVBhZ2VTZXRMU04o bWV0YXBnLCByZWNwdHIpOworCQlpZiAoIWlzbGVhZikKKwkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0 UGFnZShjYnVmKSwgcmVjcHRyKTsKKworCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAkJ RU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC0xNTA0LDYgKzE1MDYsNyBAQCBfYnRfc3BsaXQoUmVs YXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQgaXR1cF9rZXksIEJ1ZmZl ciBidWYsCiAJYm9vbAkJbmV3aXRlbW9ubGVmdCwKIAkJCQlpc2xlYWYsCiAJCQkJaXNyaWdodG1v c3Q7CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKgogCSAqIG9yaWdwYWdlIGlzIHRoZSBvcmln aW5hbCBwYWdlIHRvIGJlIHNwbGl0LiAgbGVmdHBhZ2UgaXMgYSB0ZW1wb3JhcnkKQEAgLTE5ODMs NyArMTk4Niw2IEBAIF9idF9zcGxpdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJU U2Nhbkluc2VydCBpdHVwX2tleSwgQnVmZmVyIGJ1ZiwKIAl7CiAJCXhsX2J0cmVlX3NwbGl0IHhs cmVjOwogCQl1aW50OAkJeGxpbmZvOwotCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQl4bHJlYy5s ZXZlbCA9IHJvcGFxdWUtPmJ0cG9fbGV2ZWw7CiAJCS8qIFNlZSBjb21tZW50cyBiZWxvdyBvbiBu ZXdpdGVtLCBvcmlnbmV3aXRlbSwgYW5kIHBvc3RpbmcgbGlzdHMgKi8KQEAgLTIwNjcsMTQgKzIw NjksMTYgQEAgX2J0X3NwbGl0KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2Fu SW5zZXJ0IGl0dXBfa2V5LCBCdWZmZXIgYnVmLAogCiAJCXhsaW5mbyA9IG5ld2l0ZW1vbmxlZnQg PyBYTE9HX0JUUkVFX1NQTElUX0wgOiBYTE9HX0JUUkVFX1NQTElUX1I7CiAJCXJlY3B0ciA9IFhM b2dJbnNlcnQoUk1fQlRSRUVfSUQsIHhsaW5mbyk7Ci0KLQkJUGFnZVNldExTTihvcmlncGFnZSwg cmVjcHRyKTsKLQkJUGFnZVNldExTTihyaWdodHBhZ2UsIHJlY3B0cik7Ci0JCWlmICghaXNyaWdo dG1vc3QpCi0JCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOwotCQlpZiAoIWlzbGVhZikKLQkJ CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShjYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQly ZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJUGFnZVNldExTTihvcmlncGFnZSwgcmVj cHRyKTsKKwlQYWdlU2V0TFNOKHJpZ2h0cGFnZSwgcmVjcHRyKTsKKwlpZiAoIWlzcmlnaHRtb3N0 KQorCQlQYWdlU2V0TFNOKHNwYWdlLCByZWNwdHIpOworCWlmICghaXNsZWFmKQorCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UoY2J1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7 CiAKQEAgLTI0NzYsNiArMjQ4MCw3IEBAIF9idF9uZXdsZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0 aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIgcmJ1ZikKIAlCdWZmZXIJCW1ldGFidWY7 CiAJUGFnZQkJbWV0YXBnOwogCUJUTWV0YVBhZ2VEYXRhICptZXRhZDsKKwlYTG9nUmVjUHRyCXJl Y3B0cjsKIAogCWxia25vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIobGJ1Zik7CiAJcmJrbm8gPSBC dWZmZXJHZXRCbG9ja051bWJlcihyYnVmKTsKQEAgLTI1NzEsNyArMjU3Niw2IEBAIF9idF9uZXds ZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJ1ZmZlciBsYnVmLCBCdWZmZXIg cmJ1ZikKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbmV3cm9v dCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2J0cmVlX21ldGFkYXRhIG1kOwog CiAJCXhscmVjLnJvb3RibGsgPSByb290YmxrbnVtOwpAQCAtMjYwNSwxMSArMjYwOSwxMyBAQCBf YnRfbmV3bGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCdWZmZXIgbGJ1Ziwg QnVmZmVyIHJidWYpCiAJCQkJCQkJKChQYWdlSGVhZGVyKSByb290cGFnZSktPnBkX3VwcGVyKTsK IAogCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX05FV1JPT1Qp OwotCi0JCVBhZ2VTZXRMU04obHBhZ2UsIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04ocm9vdHBhZ2Us IHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04obWV0YXBnLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJl Y3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKGxwYWdlLCByZWNwdHIp OworCVBhZ2VTZXRMU04ocm9vdHBhZ2UsIHJlY3B0cik7CisJUGFnZVNldExTTihtZXRhcGcsIHJl Y3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRw YWdlLmMKaW5kZXggNDEyNWMxODVlLi43MGI1MjRkZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cGFnZS5jCkBAIC0yMzUsNiArMjM1LDcgQEAgX2J0X3NldF9jbGVhbnVwX2luZm8oUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciBudW1fZGVscGFnZXMpCiAJQnVmZmVyCQltZXRhYnVmOwogCVBh Z2UJCW1ldGFwZzsKIAlCVE1ldGFQYWdlRGF0YSAqbWV0YWQ7CisJWExvZ1JlY1B0cglyZWNwdHI7 CiAKIAkvKgogCSAqIE9uLWRpc2sgY29tcGF0aWJpbGl0eSBub3RlOiBUaGUgYnRtX2xhc3RfY2xl YW51cF9udW1fZGVscGFnZXMgbWV0YXBhZ2UKQEAgLTI4Niw3ICsyODcsNiBAQCBfYnRfc2V0X2Ns ZWFudXBfaW5mbyhSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG51bV9kZWxwYWdlcykKIAlpZiAo UmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfYnRyZWVfbWV0YWRhdGEgbWQ7Ci0JCVhM b2dSZWNQdHIJcmVjcHRyOwogCiAJCVhMb2dCZWdpbkluc2VydCgpOwogCQlYTG9nUmVnaXN0ZXJC dWZmZXIoMCwgbWV0YWJ1ZiwgUkVHQlVGX1dJTExfSU5JVCB8IFJFR0JVRl9TVEFOREFSRCk7CkBA IC0zMDMsOSArMzAzLDExIEBAIF9idF9zZXRfY2xlYW51cF9pbmZvKFJlbGF0aW9uIHJlbCwgQmxv Y2tOdW1iZXIgbnVtX2RlbHBhZ2VzKQogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDAsICZtZCwgc2l6 ZW9mKHhsX2J0cmVlX21ldGFkYXRhKSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9CVFJF RV9JRCwgWExPR19CVFJFRV9NRVRBX0NMRUFOVVApOwotCi0JCVBhZ2VTZXRMU04obWV0YXBnLCBy ZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQ YWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAt MzUxLDYgKzM1Myw3IEBAIF9idF9nZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJl bCwgaW50IGFjY2VzcykKIAlCbG9ja051bWJlciByb290Ymxrbm87CiAJdWludDMyCQlyb290bGV2 ZWw7CiAJQlRNZXRhUGFnZURhdGEgKm1ldGFkOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJQXNz ZXJ0KGFjY2VzcyA9PSBCVF9SRUFEIHx8IGhlYXByZWwgIT0gTlVMTCk7CiAKQEAgLTQ3Myw3ICs0 NzYsNiBAQCBfYnRfZ2V0cm9vdChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGludCBh Y2Nlc3MpCiAJCWlmIChSZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJCXsKIAkJCXhsX2J0cmVlX25l d3Jvb3QgeGxyZWM7Ci0JCQlYTG9nUmVjUHRyCXJlY3B0cjsKIAkJCXhsX2J0cmVlX21ldGFkYXRh IG1kOwogCiAJCQlYTG9nQmVnaW5JbnNlcnQoKTsKQEAgLTQ5NywxMCArNDk5LDEyIEBAIF9idF9n ZXRyb290KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgaW50IGFjY2VzcykKIAkJCVhM b2dSZWdpc3RlckRhdGEoJnhscmVjLCBTaXplT2ZCdHJlZU5ld3Jvb3QpOwogCiAJCQlyZWNwdHIg PSBYTG9nSW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX05FV1JPT1QpOwotCi0JCQlQYWdl U2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOwotCQkJUGFnZVNldExTTihtZXRhcGcsIHJlY3B0cik7 CiAJCX0KKwkJZWxzZQorCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQlQYWdl U2V0TFNOKHJvb3RwYWdlLCByZWNwdHIpOworCQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsK IAogCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTExNjIsNiArMTE2Niw3IEBAIF9idF9kZWxp dGVtc192YWN1dW0oUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCWNoYXIJICAgKnVwZGF0ZWRi dWYgPSBOVUxMOwogCVNpemUJCXVwZGF0ZWRidWZsZW4gPSAwOwogCU9mZnNldE51bWJlciB1cGRh dGVkb2Zmc2V0c1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOworCVhMb2dSZWNQdHIJcmVjcHRyOwog CiAJLyogU2hvdWxkbid0IGJlIGNhbGxlZCB1bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8g Ki8KIAlBc3NlcnQobmRlbGV0YWJsZSA+IDAgfHwgbnVwZGF0YWJsZSA+IDApOwpAQCAtMTIyNiw3 ICsxMjMxLDYgQEAgX2J0X2RlbGl0ZW1zX3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYs CiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChuZWVkc3dhbCkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVj cHRyOwogCQl4bF9idHJlZV92YWN1dW0geGxyZWNfdmFjdXVtOwogCiAJCXhscmVjX3ZhY3V1bS5u ZGVsZXRlZCA9IG5kZWxldGFibGU7CkBAIC0xMjQ4LDkgKzEyNTIsMTEgQEAgX2J0X2RlbGl0ZW1z X3ZhY3V1bShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJCX0KIAogCQlyZWNwdHIgPSBYTG9n SW5zZXJ0KFJNX0JUUkVFX0lELCBYTE9HX0JUUkVFX1ZBQ1VVTSk7Ci0KLQkJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7 CisKKwlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAK QEAgLTEyOTIsNiArMTI5OCw3IEBAIF9idF9kZWxpdGVtc19kZWxldGUoUmVsYXRpb24gcmVsLCBC dWZmZXIgYnVmLAogCWNoYXIJICAgKnVwZGF0ZWRidWYgPSBOVUxMOwogCVNpemUJCXVwZGF0ZWRi dWZsZW4gPSAwOwogCU9mZnNldE51bWJlciB1cGRhdGVkb2Zmc2V0c1tNYXhJbmRleFR1cGxlc1Bl clBhZ2VdOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJLyogU2hvdWxkbid0IGJlIGNhbGxlZCB1 bmxlc3MgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KIAlBc3NlcnQobmRlbGV0YWJsZSA+IDAg fHwgbnVwZGF0YWJsZSA+IDApOwpAQCAtMTM0Miw3ICsxMzQ5LDYgQEAgX2J0X2RlbGl0ZW1zX2Rl bGV0ZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYsCiAJLyogWExPRyBzdHVmZiAqLwogCWlmIChu ZWVkc3dhbCkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9idHJlZV9kZWxldGUgeGxy ZWNfZGVsZXRlOwogCiAJCXhscmVjX2RlbGV0ZS5zbmFwc2hvdENvbmZsaWN0SG9yaXpvbiA9IHNu YXBzaG90Q29uZmxpY3RIb3Jpem9uOwpAQCAtMTM2Niw5ICsxMzcyLDExIEBAIF9idF9kZWxpdGVt c19kZWxldGUoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmLAogCQl9CiAKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9CVFJFRV9JRCwgWExPR19CVFJFRV9ERUxFVEUpOwotCi0JCVBhZ2VTZXRMU04o cGFnZSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwp OworCisJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwog CkBAIC0yMTAzLDYgKzIxMTEsNyBAQCBfYnRfbWFya19wYWdlX2hhbGZkZWFkKFJlbGF0aW9uIHJl bCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVyIGxlYWZidWYsCiAJT2Zmc2V0TnVtYmVyIG5leHRv ZmZzZXQ7CiAJSW5kZXhUdXBsZQlpdHVwOwogCUluZGV4VHVwbGVEYXRhIHRydW5jdHVwbGU7CisJ WExvZ1JlY1B0cglyZWNwdHI7CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAlv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CkBAIC0yMjUzLDcgKzIyNjIsNiBAQCBfYnRf bWFya19wYWdlX2hhbGZkZWFkKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQnVmZmVy IGxlYWZidWYsCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7CiAJCXhsX2J0cmVlX21h cmtfcGFnZV9oYWxmZGVhZCB4bHJlYzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJeGxyZWMu cG9mZnNldCA9IHBvZmZzZXQ7CiAJCXhscmVjLmxlYWZibGsgPSBsZWFmYmxrbm87CkBAIC0yMjc0 LDEyICsyMjgyLDE0IEBAIF9idF9tYXJrX3BhZ2VfaGFsZmRlYWQoUmVsYXRpb24gcmVsLCBSZWxh dGlvbiBoZWFwcmVsLCBCdWZmZXIgbGVhZmJ1ZiwKIAkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMs IFNpemVPZkJ0cmVlTWFya1BhZ2VIYWxmRGVhZCk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChS TV9CVFJFRV9JRCwgWExPR19CVFJFRV9NQVJLX1BBR0VfSEFMRkRFQUQpOwotCi0JCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOwotCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7 Ci0JCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYpOwotCQlQYWdlU2V0TFNOKHBhZ2UsIHJl Y3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKHN1YnRyZWVwYXJlbnQpOworCVBhZ2VTZXRMU04ocGFnZSwgcmVj cHRyKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKKwlQYWdlU2V0TFNOKHBhZ2Us IHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTIzMzcsNiArMjM0Nyw3IEBA IF9idF91bmxpbmtfaGFsZmRlYWRfcGFnZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBsZWFmYnVmLCBC bG9ja051bWJlciBzY2FuYmxrbm8sCiAJdWludDMyCQl0YXJnZXRsZXZlbDsKIAlJbmRleFR1cGxl CWxlYWZoaWtleTsKIAlCbG9ja051bWJlciBsZWFmdG9wcGFyZW50OworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJcGFnZSA9IEJ1ZmZlckdldFBhZ2UobGVhZmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdl R2V0T3BhcXVlKHBhZ2UpOwpAQCAtMjY3Niw3ICsyNjg3LDYgQEAgX2J0X3VubGlua19oYWxmZGVh ZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVtYmVyIHNjYW5ibGtu bywKIAkJeGxfYnRyZWVfdW5saW5rX3BhZ2UgeGxyZWM7CiAJCXhsX2J0cmVlX21ldGFkYXRhIHhs bWV0YTsKIAkJdWludDgJCXhsaW5mbzsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkJWExvZ0Jl Z2luSW5zZXJ0KCk7CiAKQEAgLTI3MjAsMjUgKzI3MzAsMjUgQEAgX2J0X3VubGlua19oYWxmZGVh ZF9wYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGxlYWZidWYsIEJsb2NrTnVtYmVyIHNjYW5ibGtu bywKIAkJCXhsaW5mbyA9IFhMT0dfQlRSRUVfVU5MSU5LX1BBR0U7CiAKIAkJcmVjcHRyID0gWExv Z0luc2VydChSTV9CVFJFRV9JRCwgeGxpbmZvKTsKKwl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9n R2V0RmFrZUxTTihyZWwpOwogCi0JCWlmIChCdWZmZXJJc1ZhbGlkKG1ldGFidWYpKQotCQl7Ci0J CQlQYWdlU2V0TFNOKG1ldGFwZywgcmVjcHRyKTsKLQkJfQotCQlwYWdlID0gQnVmZmVyR2V0UGFn ZShyYnVmKTsKKwlpZiAoQnVmZmVySXNWYWxpZChtZXRhYnVmKSkKKwkJUGFnZVNldExTTihtZXRh cGcsIHJlY3B0cik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UocmJ1Zik7CisJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisJUGFnZVNldExTTihw YWdlLCByZWNwdHIpOworCWlmIChCdWZmZXJJc1ZhbGlkKGxidWYpKQorCXsKKwkJcGFnZSA9IEJ1 ZmZlckdldFBhZ2UobGJ1Zik7CiAJCVBhZ2VTZXRMU04ocGFnZSwgcmVjcHRyKTsKLQkJcGFnZSA9 IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwl9CisJaWYgKHRhcmdldCAhPSBsZWFmYmxrbm8pCisJewor CQlwYWdlID0gQnVmZmVyR2V0UGFnZShsZWFmYnVmKTsKIAkJUGFnZVNldExTTihwYWdlLCByZWNw dHIpOwotCQlpZiAoQnVmZmVySXNWYWxpZChsYnVmKSkKLQkJewotCQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UobGJ1Zik7Ci0JCQlQYWdlU2V0TFNOKHBhZ2UsIHJlY3B0cik7Ci0JCX0KLQkJaWYgKHRh cmdldCAhPSBsZWFmYmxrbm8pCi0JCXsKLQkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGxlYWZidWYp OwotCQkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwotCQl9CiAJfQogCiAJRU5EX0NSSVRfU0VD VElPTigpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5kZXggM2RlYzFlZTY1Li44ZDYz NmQ5ODYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpAQCAtNDA2LDEzICs0MDYsNiBA QCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fu a2V5cywKIAkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMg YWxsLXZpc2libGUgaW4gdGhlIFZNLgogCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGlu ZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCiAJICoKLQkgKiBXaGVuIHdl IGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQgbWFya3Mgc28tPmtpbGxlZEl0 ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMgTFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1cnJl bnQgVElEIHJlY3ljbGluZyByYWNlcy4KLQkgKiBUaGUgc2NoZW1lIHVzZWQgdG8gZGV0ZWN0IHVu c2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hlbiBzY2FubmluZwotCSAqIHVubG9nZ2Vk IHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2aW5nIGFuIGFmZmVjdGVkIHBhZ2UncyBM U04pLgotCSAqIE9wdCBvdXQgb2YgZWFnZXIgcGluIGRyb3BwaW5nIGR1cmluZyB1bmxvZ2dlZCBy ZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0JICogKHRoaXMgaXMgcHJlZmVyYWJsZSB0byBvcHRpbmcg b3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUgTFBfREVBRCBzZXR0aW5nKS4KLQkgKgogCSAqIEFsc28g b3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRtYXAg c2NhbnMuCiAJICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3RhbnQg ZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKIAkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdlbGwg YXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KQEAgLTQyMyw3ICs0 MTYsNiBAQCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50 IG5zY2Fua2V5cywKIAkgKi8KIAlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9pdHVwICYm CiAJCQkJICAgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCi0JCQkJICAgUmVs YXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSAmJgogCQkJCSAgIHNjYW4tPmhlYXBS ZWxhdGlvbiAhPSBOVUxMKTsKIAogCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCAzMmFlMGJkYTguLjBjZWQ3YjAyYyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC02Nyw3ICs2Nyw2IEBAIF9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKIAkgKiBI YXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24gc28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhhcyBhIHdh eSB0byBkZXRlY3QKIAkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgogCSAqLwotCUFzc2VydChSZWxhdGlvbk5lZWRz V0FMKHJlbCkpOwogCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhzby0+Y3Vy clBvcy5idWYpOwogCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwogCXNvLT5jdXJy UG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMK aW5kZXggNWM1MGYwZGQxLi5mYzMwMmMyYWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0 aWxzLmMKQEAgLTI1Miw3ICsyNTIsNiBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh bikKIAkJWExvZ1JlY1B0cglsYXRlc3Rsc247CiAKIAkJQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykpOwotCQlBc3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKIAkJYnVm ID0gX2J0X2dldGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBCVF9SRUFEKTsKIAogCQls YXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKLS0gCjIuNTEuMAoK --0000000000004da713064a6be2eb--