From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sender4-pp-o91.zoho.com (sender4-pp-o91.zoho.com [136.143.188.91]) by sourceware.org (Postfix) with ESMTPS id 1FA343857830; Fri, 21 Jan 2022 16:22:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1FA343857830 ARC-Seal: i=1; a=rsa-sha256; t=1642782147; cv=none; d=zohomail.com; s=zohoarc; b=hOnPLPGH1bekj1x6r7CezUgfBtcimWWONBuhsKRzsrYLcbDnm4c/g3NhbufpvNQpbNd1H12syoeyAD8zZJtZpD6R4lD071we7FZUCBfdz8E5gN7fl+Ckm+s4yEPJkedlXcJC4li1lmKJvlcBD2GObQtGK3ighoIaFNHSqHVnljc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1642782147; h=Content-Type:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=AZ9NSIuwC9aPxH1BD+GWaBeNelMvjYhakBjMCy7iJ88=; b=FhjIPpbK0PuCD3eeRkFTu1A4FOSTY//hvTWGFq50ZqJbgsexBSsA7byNwNf3NwTAjz467Pwdi0TTPrhi7VRli7fR/KUCS+vkbQQApEgrvfO4baz8IPL9rBGiLWuFNdQqVjAHQ9u6YdstenAcX/XcEdI50MKgeDJ9Y3Rl0n+vJDM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zoho.com; spf=pass smtp.mailfrom=bouanto@zoho.com; dmarc=pass header.from= Received: from [192.168.1.174] (38.87.11.6 [38.87.11.6]) by mx.zohomail.com with SMTPS id 1642782144261468.4346601994612; Fri, 21 Jan 2022 08:22:24 -0800 (PST) Message-ID: <70459fd53eb780e3c3735955539a1bb7a1024bf4.camel@zoho.com> Subject: Re: [PATCH] libgccjit: Add support for sized integer types, including 128-bit integers [PR95325] From: Antoni Boucher To: David Malcolm , Jakub Jelinek Cc: jit@gcc.gnu.org, gcc-patches@gcc.gnu.org Date: Fri, 21 Jan 2022 11:22:22 -0500 In-Reply-To: <5f858ec27ded31ddddf4564f3a3b20c2e29b015f.camel@redhat.com> References: <92a0bd2aad201de75a71d0a00414e518cf1716e6.camel@zoho.com> <20210518125306.GP1179226@tucnak> <5f858ec27ded31ddddf4564f3a3b20c2e29b015f.camel@redhat.com> Content-Type: multipart/mixed; boundary="=-4mvW1w67uht+07acSx5x" User-Agent: Evolution 3.42.3 MIME-Version: 1.0 X-Zoho-Virus-Status: 1 X-ZohoMailClient: External X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Jan 2022 16:22:38 -0000 --=-4mvW1w67uht+07acSx5x Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable David: this is the email I was talking about in my other email. Here's the updated patch. By the way, I find the usage of NUM_GCC_JIT_TYPES brittle. Would it be better to switch to a new enum value for that instead? See comments below. Le jeudi 20 mai 2021 =C3=A0 15:25 -0400, David Malcolm a =C3=A9crit=C2=A0: > On Tue, 2021-05-18 at 14:53 +0200, Jakub Jelinek via Jit wrote: > > On Tue, May 18, 2021 at 08:23:56AM -0400, Antoni Boucher via Gcc- > > patches wrote: > > > Hello. > > > This patch add support for sized integer types. > > > Maybe it should check whether the size of a byte for the current > > > platform is 8 bits and do other checks so that they're only > > > available > > > when it makes sense. > > > What do you think? > >=20 > > Not a review, just a comment.=C2=A0 The 128-bit integral types are > > available > > only on some targets, the test e.g. the C/C++ FE do for those is > > targetm.scalar_mode_supported_p (TImode) > > and so even libgccjit shouldn't provide those types > > unconditionally. > > Similarly for the tests (though it could be guarded with e.g > > #ifdef __SIZEOF_INT128__ > > in that case). > > Also, while currently all in tree targets have BITS_PER_UNIT 8 and > > therefore QImode is 8-bit, HImode 16-bit, SImode 32-bit and DImode > > 64- > > bit, > > in the past and maybe in he future there can be targets that could > > have > > e.g. 16-bit or 32-bit QImode and then there wouldn't be any > > uint8_t/int8_t > > and int16_t would be intQImode_type_node etc. > > =C2=A0 uint16_type_node =3D make_or_reuse_type (16, 1); > > =C2=A0 uint32_type_node =3D make_or_reuse_type (32, 1); > > =C2=A0 uint64_type_node =3D make_or_reuse_type (64, 1); > > =C2=A0 if (targetm.scalar_mode_supported_p (TImode)) > > =C2=A0=C2=A0=C2=A0 uint128_type_node =3D make_or_reuse_type (128, 1); > > are always with the given precisions, perhaps jit should use > > signed_type_for (uint16_type_node) etc.? >=20 > I seem to have mislaid Antoni's original email (sorry), so I'll reply > to Jakub's. >=20 > > 2021-05-18=C2=A0 Antoni Boucher=C2=A0 > >=20 > > =C2=A0=C2=A0=C2=A0 gcc/jit/ > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PR t= arget/95325 > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * ji= t-playback.c: Add support for the sized integer > > types. > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * ji= t-recording.c: Add support for the sized integer > > types. > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * li= bgccjit.h (GCC_JIT_TYPE_UINT8_T, > > GCC_JIT_TYPE_UINT16_T, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GCC_= JIT_TYPE_UINT32_T, GCC_JIT_TYPE_UINT64_T, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GCC_= JIT_TYPE_UINT128_T, GCC_JIT_TYPE_INT8_T, > > GCC_JIT_TYPE_INT16_T, > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GCC_= JIT_TYPE_INT32_T, GCC_JIT_TYPE_INT64_T, > > GCC_JIT_TYPE_INT128_T): > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 New = enum variants for gcc_jit_types. > > =C2=A0=C2=A0=C2=A0 gcc/testsuite/ > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PR t= arget/95325 > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * ji= t.dg/test-types.c: Add tests for sized integer > > types. >=20 > First a high-level question, why not use (or extend) > gcc_jit_context_get_int_type instead? If I remember correctly, I believe I had some issues with this function, like having it return sometimes long long, and other times long for the same size. Maybe that was an issue with a global variable not cleaned up. >=20 > Do we really need to extend enum gcc_jit_types?=C2=A0 Is this a quality- > of- > life thing for users of the library? >=20 > That said, recording::context::get_int_type is currently a bit of a > hack, and maybe could probably be improved by using the new enum > values > the patch adds. >=20 > IIRC, libgccjit.c does type-checking by comparing recording::type > pointer values; does this patch gives us multiple equivalent types > that > ought to compare as equal? >=20 > If a user gets a type via GCC_JIT_TYPE_INT and gets "another" type > via > GCC_JIT_TYPE_INT32_T and they happen to be the same on the current > target, should libgccjit complain if you use "int" when you meant > "int32_t", or accept it? I updated the function compatible_types to make them compare as equal. I believe that it's not used everywhere though, so a cast will be necessary in some cases. >=20 > Various comments inline below... >=20 > > diff --git a/gcc/jit/jit-playback.c b/gcc/jit/jit-playback.c > > index c6136301243..40630aa1ab8 100644 > > --- a/gcc/jit/jit-playback.c > > +++ b/gcc/jit/jit-playback.c > > @@ -193,6 +193,27 @@ get_tree_node_for_type (enum gcc_jit_types > > type_) > > =C2=A0=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UNSIGNED_INT: > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return unsigned_type_node; > > =C2=A0 > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT8_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return unsigned_intQI_type_node; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT16_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return uint16_type_node; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT32_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return uint32_type_node; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT64_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return uint64_type_node; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT128_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return uint128_type_node; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT8_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return intQI_type_node; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT16_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return intHI_type_node; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT32_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return intSI_type_node; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT64_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return intDI_type_node; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT128_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return intTI_type_node; > > + >=20 > Jakub has already commented that 128 bit types might not be > available. >=20 > Ideally we'd report that they're not available as soon as the user > tries to use them, in gcc_jit_context_get_type, but unfortunately it > looks like the test requires us to use > targetm.scalar_mode_supported_p, > and that requires us to hold the jit mutex and thus be at playback > time. >=20 > So I think get_tree_node_for_type should take a context, and add an > error on the context if there's a failure, returning NULL.=20 > playback::context::get_type is the only caller currently and has > handling for an unrecognized value, so I think that logic needs to be > moved to get_tree_node_for_type so that the user can distinguish > between unrecognized types versus types that are unsupported on this > target. >=20 >=20 > > diff --git a/gcc/jit/jit-recording.c b/gcc/jit/jit-recording.c > > index 117ff70114c..b67ae8bfb78 100644 > > --- a/gcc/jit/jit-recording.c > > +++ b/gcc/jit/jit-recording.c > > @@ -2247,6 +2247,18 @@ recording::memento_of_get_type::get_size () > > =C2=A0=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UNSIGNED_LONG_LONG: > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 size =3D LONG_LONG_TYPE_SIZE; > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT8_T: > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT16_T: > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT32_T: > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT64_T: > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_UINT128_T: > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT8_T: > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT16_T: > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT32_T: > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT64_T: > > +=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_INT128_T: > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 size =3D 128; > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >=20 > This gives 128 bits as the size for all of these types, which seems > wrong. >=20 > > =C2=A0=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_FLOAT: > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 size =3D FLOAT_TYPE_SIZE; > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; > > =C2=A0=C2=A0=C2=A0=C2=A0 case GCC_JIT_TYPE_FLOAT: >=20 > > diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h > > index 5c722c2c57f..5d88033a2ab 100644 > > --- a/gcc/jit/libgccjit.h > > +++ b/gcc/jit/libgccjit.h > > @@ -548,6 +548,17 @@ enum gcc_jit_types > > =C2=A0=C2=A0 GCC_JIT_TYPE_LONG_LONG, /* signed */ > > =C2=A0=C2=A0 GCC_JIT_TYPE_UNSIGNED_LONG_LONG, > > =C2=A0 > > +=C2=A0 GCC_JIT_TYPE_UINT8_T, > > +=C2=A0 GCC_JIT_TYPE_UINT16_T, > > +=C2=A0 GCC_JIT_TYPE_UINT32_T, > > +=C2=A0 GCC_JIT_TYPE_UINT64_T, > > +=C2=A0 GCC_JIT_TYPE_UINT128_T, > > +=C2=A0 GCC_JIT_TYPE_INT8_T, > > +=C2=A0 GCC_JIT_TYPE_INT16_T, > > +=C2=A0 GCC_JIT_TYPE_INT32_T, > > +=C2=A0 GCC_JIT_TYPE_INT64_T, > > +=C2=A0 GCC_JIT_TYPE_INT128_T, > > + > > =C2=A0=C2=A0 /* Floating-point types=C2=A0 */ > > =C2=A0 > > =C2=A0=C2=A0 GCC_JIT_TYPE_FLOAT, >=20 > The patch adds the new enum values between existing values of enum > gcc_jit_types, effectively changing the ABI, since e.g. the numerical > value of GCC_JIT_TYPE_FLOAT changes with this, and there's no way of > telling which enum values a binary linked against libgccjit.so is > going > to supply when it calls into libgccjit. >=20 > If we're going to extend the enum, the new values need to be added to > the end, extending the ABI rather than changing it. Fixed. >=20 > I don't think the patch provides a way to detect that the client code > is using the new ABI and thus mark it in the metadata.=C2=A0 I'm not sure > how to do that. Now this patch adds new functions. Does that solve this issue? >=20 > > diff --git a/gcc/testsuite/jit.dg/test-types.c > > b/gcc/testsuite/jit.dg/test-types.c > > index 8debcd7eb82..9c66284f193 100644 > > --- a/gcc/testsuite/jit.dg/test-types.c > > +++ b/gcc/testsuite/jit.dg/test-types.c >=20 > [...snip...] >=20 > The tests seem reasonable, but as noted by Jakub the 128-bit support > needs to be conditionalized. >=20 > Hope this is constructive > Dave >=20 --=-4mvW1w67uht+07acSx5x Content-Disposition: attachment; filename*0=0001-libgccjit-Add-support-for-sized-integer-types-includ.pat; filename*1=ch Content-Type: text/x-patch; name="0001-libgccjit-Add-support-for-sized-integer-types-includ.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBkYjg4MzZkMWUxNmU0MzJiNmY0MGEyNjU0OTY0OGY2NDc3ZDQ5MWJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6b2hvLmNvbT4KRGF0 ZTogTW9uLCAxMCBNYXkgMjAyMSAxOTo0MzowMiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIGxpYmdj Y2ppdDogQWRkIHN1cHBvcnQgZm9yIHNpemVkIGludGVnZXIgdHlwZXMsIGluY2x1ZGluZwogMTI4 LWJpdCBpbnRlZ2VycyBbUFI5NTMyNV0KCjIwMjItMDEtMTkgIEFudG9uaSBCb3VjaGVyICA8Ym91 YW50b0B6b2hvLmNvbT4KCmdjYy9qaXQvCglQUiB0YXJnZXQvOTUzMjUKCSogZG9jcy90b3BpY3Mv Y29tcGF0aWJpbGl0eS5yc3QgKExJQkdDQ0pJVF9BQklfMjApOiBOZXcgQUJJIHRhZy4KCSogZG9j cy90b3BpY3MvdHlwZXMucnN0OiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIG5ldyB0eXBlcwoJ R0NDX0pJVF9UWVBFX1VJTlQ4X1QsIEdDQ19KSVRfVFlQRV9VSU5UMTZfVCwKCUdDQ19KSVRfVFlQ RV9VSU5UMzJfVCwgR0NDX0pJVF9UWVBFX1VJTlQ2NF9ULAoJR0NDX0pJVF9UWVBFX1VJTlQxMjhf VCwgR0NDX0pJVF9UWVBFX0lOVDhfVCwgR0NDX0pJVF9UWVBFX0lOVDE2X1QsCglHQ0NfSklUX1RZ UEVfSU5UMzJfVCwgR0NDX0pJVF9UWVBFX0lOVDY0X1QsIEdDQ19KSVRfVFlQRV9JTlQxMjhfVCBh bmQKCW5ldyBmdW5jdGlvbnMgKGdjY19qaXRfY29tcGF0aWJsZV90eXBlcywgZ2NjX2ppdF90eXBl X2dldF9zaXplKS4KCSogaml0LWJ1aWx0aW5zLmNjOiBBZGQgc3VwcG9ydCBmb3IgQlRfVUlOVDEy OC4KCSogaml0LWNvbW1vbi5oOiBVcGRhdGUgdGhlIHZhbHVlIG9mIE5VTV9HQ0NfSklUX1RZUEVT LgoJKiBqaXQtcGxheWJhY2suY2M6IEFkZCBzdXBwb3J0IGZvciB0aGUgc2l6ZWQgaW50ZWdlciB0 eXBlcy4KCSogaml0LXJlY29yZGluZy5jYzogQWRkIHN1cHBvcnQgZm9yIHRoZSBzaXplZCBpbnRl Z2VyIHR5cGVzLgoJKiBqaXQtcmVjb3JkaW5nLmg6IEFkZCBzdXBwb3J0IGZvciBjb21wYXJpbmcg aW50ZWdlciB0eXBlcwoJYW5kIG5ldyBmdW5jdGlvbiAoaXNfc2lnbmVkKS4KCSogbGliZ2Njaml0 LmNjOiBSZW5hbWUgY29tcGF0aWJsZV90eXBlcyB0bwoJZ2NjX2ppdF9jb21wYXRpYmxlX3R5cGVz IGFuZCBuZXcgZnVuY3Rpb24gKGdjY19qaXRfdHlwZV9nZXRfc2l6ZSkuCgkqIGxpYmdjY2ppdC5o OiBOZXcgZW51bSB2YXJpYW50cyBmb3IgZ2NjX2ppdF90eXBlcwoJKEdDQ19KSVRfVFlQRV9VSU5U OF9ULCBHQ0NfSklUX1RZUEVfVUlOVDE2X1QsCglHQ0NfSklUX1RZUEVfVUlOVDMyX1QsIEdDQ19K SVRfVFlQRV9VSU5UNjRfVCwKCUdDQ19KSVRfVFlQRV9VSU5UMTI4X1QsIEdDQ19KSVRfVFlQRV9J TlQ4X1QsCglHQ0NfSklUX1RZUEVfSU5UMTZfVCwgR0NDX0pJVF9UWVBFX0lOVDMyX1QsCglHQ0Nf SklUX1RZUEVfSU5UNjRfVCwgR0NDX0pJVF9UWVBFX0lOVDEyOF9UKSBhbmQgbmV3IGZ1bmN0aW9u cwoJKGdjY19qaXRfY29tcGF0aWJsZV90eXBlcywgZ2NjX2ppdF90eXBlX2dldF9zaXplKS4KCWxp YmdjY2ppdC5tYXAgKExJQkdDQ0pJVF9BQklfMjApOiBOZXcgQUJJIHRhZy4KCmdjYy90ZXN0c3Vp dGUvCglQUiB0YXJnZXQvOTUzMjUKCSogaml0LmRnL3Rlc3QtdHlwZXMuYzogQWRkIHRlc3RzIGZv ciBzaXplZCBpbnRlZ2VyIHR5cGVzLgotLS0KIGdjYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJp bGl0eS5yc3QgfCAgMjAgKysrKwogZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QgICAgICAg ICB8ICA0MSArKysrKysrKwogZ2NjL2ppdC9qaXQtYnVpbHRpbnMuY2MgICAgICAgICAgICAgICB8 ICAgMSArCiBnY2Mvaml0L2ppdC1jb21tb24uaCAgICAgICAgICAgICAgICAgIHwgICAyICstCiBn Y2Mvaml0L2ppdC1wbGF5YmFjay5jYyAgICAgICAgICAgICAgIHwgIDM3ICsrKysrKy0KIGdjYy9q aXQvaml0LXJlY29yZGluZy5jYyAgICAgICAgICAgICAgfCAxNDYgKysrKysrKysrKysrKysrKysr KysrKysrKy0KIGdjYy9qaXQvaml0LXJlY29yZGluZy5oICAgICAgICAgICAgICAgfCAgMTYgKysr CiBnY2Mvaml0L2xpYmdjY2ppdC5jYyAgICAgICAgICAgICAgICAgIHwgIDUyICsrKysrLS0tLQog Z2NjL2ppdC9saWJnY2NqaXQuaCAgICAgICAgICAgICAgICAgICB8ICAzMiArKysrKy0KIGdjYy9q aXQvbGliZ2Njaml0Lm1hcCAgICAgICAgICAgICAgICAgfCAgIDYgKysKIGdjYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtdHlwZXMuYyAgICAgfCAxMzEgKysrKysrKysrKysrKysrKysrKysrKysKIDEx IGZpbGVzIGNoYW5nZWQsIDQ1NyBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0IGIvZ2NjL2ppdC9k b2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdAppbmRleCAxNmNlYmUzMWExMC4uNzNhMTc2NjQ2 OTggMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QKKysr IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdApAQCAtMzAyLDMgKzMwMiwy MyBAQCB0aHJlYWQtbG9jYWwgc3RvcmFnZSBtb2RlbCBvZiBhIHZhcmlhYmxlOgogc2VjdGlvbiBv ZiBhIHZhcmlhYmxlOgogCiAgICogOmZ1bmM6YGdjY19qaXRfbHZhbHVlX3NldF9saW5rX3NlY3Rp b25gCisKKy4uIF9MSUJHQ0NKSVRfQUJJXzIwOgorCitgYExJQkdDQ0pJVF9BQklfMjBgYAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BgTElCR0NDSklUX0FCSV8yMGBgIGNvdmVycyB0aGUgYWRk aXRpb24gb2Ygc2l6ZWQgaW50ZWdlciB0eXBlcywgaW5jbHVkaW5nCisxMjgtYml0IGludGVnZXJz IGFuZCBoZWxwZXIgZnVuY3Rpb25zIGZvciB0eXBlczoKKworICAqIDpmdW5jOmBnY2Nfaml0X2Nv bXBhdGlibGVfdHlwZXNgCisgICogOmZ1bmM6YGdjY19qaXRfdHlwZV9nZXRfc2l6ZWAKKyAgKiA6 YzptYWNybzpgR0NDX0pJVF9UWVBFX1VJTlQ4X1RgCisgICogOmM6bWFjcm86YEdDQ19KSVRfVFlQ RV9VSU5UMTZfVGAKKyAgKiA6YzptYWNybzpgR0NDX0pJVF9UWVBFX1VJTlQzMl9UYAorICAqIDpj Om1hY3JvOmBHQ0NfSklUX1RZUEVfVUlOVDY0X1RgCisgICogOmM6bWFjcm86YEdDQ19KSVRfVFlQ RV9VSU5UMTI4X1RgCisgICogOmM6bWFjcm86YEdDQ19KSVRfVFlQRV9JTlQ4X1RgCisgICogOmM6 bWFjcm86YEdDQ19KSVRfVFlQRV9JTlQxNl9UYAorICAqIDpjOm1hY3JvOmBHQ0NfSklUX1RZUEVf SU5UMzJfVGAKKyAgKiA6YzptYWNybzpgR0NDX0pJVF9UWVBFX0lOVDY0X1RgCisgICogOmM6bWFj cm86YEdDQ19KSVRfVFlQRV9JTlQxMjhfVGAKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3Bp Y3MvdHlwZXMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QKaW5kZXggOTc3OWFk MjZiNmYuLmVkZWRmNDllMTQ5IDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVz LnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdApAQCAtNzYsNiArNzYsMTYg QEAgU3RhbmRhcmQgdHlwZXMKICAgIDpjOmRhdGE6YEdDQ19KSVRfVFlQRV9VTlNJR05FRF9MT05H YCAgICAgICAgQydzIGBgdW5zaWduZWQgbG9uZ2BgCiAgICA6YzpkYXRhOmBHQ0NfSklUX1RZUEVf TE9OR19MT05HYCAgICAgICAgICAgIEM5OSdzIGBgbG9uZyBsb25nYGAgKHNpZ25lZCkKICAgIDpj OmRhdGE6YEdDQ19KSVRfVFlQRV9VTlNJR05FRF9MT05HX0xPTkdgICAgQzk5J3MgYGB1bnNpZ25l ZCBsb25nIGxvbmdgYAorICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBFX1VJTlQ4X1RgICAgICAgICAg ICAgICBDOTkncyBgYHVpbnQ4X3RgYAorICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBFX1VJTlQxNl9U YCAgICAgICAgICAgICBDOTkncyBgYHVpbnQxNl90YGAKKyAgIDpjOmRhdGE6YEdDQ19KSVRfVFlQ RV9VSU5UMzJfVGAgICAgICAgICAgICAgQzk5J3MgYGB1aW50MzJfdGBgCisgICA6YzpkYXRhOmBH Q0NfSklUX1RZUEVfVUlOVDY0X1RgICAgICAgICAgICAgIEM5OSdzIGBgdWludDY0X3RgYAorICAg OmM6ZGF0YTpgR0NDX0pJVF9UWVBFX1VJTlQxMjhfVGAgICAgICAgICAgICBDOTkncyBgYF9fdWlu dDEyOF90YGAKKyAgIDpjOmRhdGE6YEdDQ19KSVRfVFlQRV9JTlQ4X1RgICAgICAgICAgICAgICAg Qzk5J3MgYGBpbnQ4X3RgYAorICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBFX0lOVDE2X1RgICAgICAg ICAgICAgICBDOTkncyBgYGludDE2X3RgYAorICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBFX0lOVDMy X1RgICAgICAgICAgICAgICBDOTkncyBgYGludDMyX3RgYAorICAgOmM6ZGF0YTpgR0NDX0pJVF9U WVBFX0lOVDY0X1RgICAgICAgICAgICAgICBDOTkncyBgYGludDY0X3RgYAorICAgOmM6ZGF0YTpg R0NDX0pJVF9UWVBFX0lOVDEyOF9UYCAgICAgICAgICAgICBDOTkncyBgYF9faW50MTI4X3RgYAog ICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBFX0ZMT0FUYAogICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBF X0RPVUJMRWAKICAgIDpjOmRhdGE6YEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRWAKQEAgLTQ2Nywz ICs0NzcsMzQgQEAgUmVmbGVjdGlvbiBBUEkKICAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9S RUZMRUNUSU9OCiAKICAgIC4uIHR5cGU6OiBnY2Nfaml0X2Nhc2UKKworLi4gZnVuY3Rpb246OiAg aW50XAorICAgICAgICAgICAgICAgZ2NjX2ppdF9jb21wYXRpYmxlX3R5cGVzIChnY2Nfaml0X3R5 cGUgKmx0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nf aml0X3R5cGUgKnJ0eXBlKQorCisgICAgIFJldHVybiBub24temVybyBpZiB0aGUgdHdvIHR5cGVz IGFyZSBjb21wYXRpYmxlLiBGb3IgaW5zdGFuY2UsCisgICAgIGlmIDpjOmRhdGE6YEdDQ19KSVRf VFlQRV9VSU5UNjRfVGAgYW5kIDpjOmRhdGE6YEdDQ19KSVRfVFlQRV9VTlNJR05FRF9MT05HYAor ICAgICBhcmUgdGhlIHNhbWUgc2l6ZSBvbiB0aGUgdGFyZ2V0LCB0aGlzIHdpbGwgcmV0dXJuIG5v bi16ZXJvLgorICAgICBUaGUgcGFyYW1ldGVycyBgYGx0eXBlYGAgYW5kIGBgcnR5cGVgYCBtdXN0 IGJlIG5vbi1OVUxMLgorICAgICBSZXR1cm4gMCBvbiBlcnJvcnMuCisKKyAgIFRoaXMgZW50cnlw b2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8yMGA7IHlvdSBjYW4gdGVzdCBm b3IKKyAgIGl0cyBwcmVzZW5jZSB1c2luZworCisgICAuLiBjb2RlLWJsb2NrOjogYworCisgICAg ICAjaWZkZWYgTElCR0NDSklUX0hBVkVfU0laRURfSU5URUdFUlMKKworLi4gZnVuY3Rpb246OiAg c3NpemVfdFwKKyAgICAgICAgICAgICAgIGdjY19qaXRfdHlwZV9nZXRfc2l6ZSAoZ2NjX2ppdF90 eXBlICp0eXBlKQorCisgICAgIFJldHVybiB0aGUgc2l6ZSBvZiBhIHR5cGUsIGluIGJ5dGVzLiBJ dCBvbmx5IHdvcmtzIG9uIGludGVnZXIgdHlwZXMgZm9yIG5vdy4KKyAgICAgVGhlIHBhcmFtZXRl ciBgYHR5cGVgYCBtdXN0IGJlIG5vbi1OVUxMLgorICAgICBSZXR1cm4gLTEgb24gZXJyb3JzLgor CisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjBg OyB5b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1i bG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX1NJWkVEX0lOVEVHRVJTCmRp ZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1idWlsdGlucy5jYyBiL2djYy9qaXQvaml0LWJ1aWx0aW5z LmNjCmluZGV4IDcxYzM4ZWIwOTQ4Li5iOTQ5YjczNDMzMiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9q aXQtYnVpbHRpbnMuY2MKKysrIGIvZ2NjL2ppdC9qaXQtYnVpbHRpbnMuY2MKQEAgLTQ4Myw2ICs0 ODMsNyBAQCBidWlsdGluc19tYW5hZ2VyOjptYWtlX3ByaW1pdGl2ZV90eXBlIChlbnVtIGppdF9i dWlsdGluX3R5cGUgdHlwZV9pZCkKICAgICBjYXNlIEJUX1VJTlQxNjogcmV0dXJuIG1fY3R4dC0+ Z2V0X2ludF90eXBlICgyLCBmYWxzZSk7CiAgICAgY2FzZSBCVF9VSU5UMzI6IHJldHVybiBtX2N0 eHQtPmdldF9pbnRfdHlwZSAoNCwgZmFsc2UpOwogICAgIGNhc2UgQlRfVUlOVDY0OiByZXR1cm4g bV9jdHh0LT5nZXRfaW50X3R5cGUgKDgsIGZhbHNlKTsKKyAgICBjYXNlIEJUX1VJTlQxMjg6IHJl dHVybiBtX2N0eHQtPmdldF9pbnRfdHlwZSAoMTYsIGZhbHNlKTsKICAgICAvLyBjYXNlIEJUX1dP UkQ6CiAgICAgLy8gY2FzZSBCVF9VTldJTkRXT1JEOgogICAgIGNhc2UgQlRfRkxPQVQ6IHJldHVy biBtX2N0eHQtPmdldF90eXBlIChHQ0NfSklUX1RZUEVfRkxPQVQpOwpkaWZmIC0tZ2l0IGEvZ2Nj L2ppdC9qaXQtY29tbW9uLmggYi9nY2Mvaml0L2ppdC1jb21tb24uaAppbmRleCAxYThjZDhiYWM3 Yi4uOGM1MmRkZjgwZTEgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LWNvbW1vbi5oCisrKyBiL2dj Yy9qaXQvaml0LWNvbW1vbi5oCkBAIC0zNiw3ICszNiw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUg dGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjZW5kaWYKICNlbmRpZgogCi1jb25zdCBp bnQgTlVNX0dDQ19KSVRfVFlQRVMgPSBHQ0NfSklUX1RZUEVfQ09NUExFWF9MT05HX0RPVUJMRSAr IDE7Citjb25zdCBpbnQgTlVNX0dDQ19KSVRfVFlQRVMgPSBHQ0NfSklUX1RZUEVfSU5UMTI4X1Qg KyAxOwogCiAvKiBUaGlzIGNvbW1lbnQgaXMgaW5jbHVkZWQgYnkgdGhlIGRvY3MuCiAKZGlmZiAt LWdpdCBhL2djYy9qaXQvaml0LXBsYXliYWNrLmNjIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MK aW5kZXggZDE4MzVjNzk4NjMuLjQ2ODNlODYyNjExIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1w bGF5YmFjay5jYworKysgYi9nY2Mvaml0L2ppdC1wbGF5YmFjay5jYwpAQCAtMjM3LDYgKzIzNywz NiBAQCBnZXRfdHJlZV9ub2RlX2Zvcl90eXBlIChlbnVtIGdjY19qaXRfdHlwZXMgdHlwZV8pCiAg ICAgY2FzZSBHQ0NfSklUX1RZUEVfVU5TSUdORURfSU5UOgogICAgICAgcmV0dXJuIHVuc2lnbmVk X3R5cGVfbm9kZTsKIAorICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VJTlQ4X1Q6CisgICAgICByZXR1 cm4gdW5zaWduZWRfaW50UUlfdHlwZV9ub2RlOworICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VJTlQx Nl9UOgorICAgICAgcmV0dXJuIHVpbnQxNl90eXBlX25vZGU7CisgICAgY2FzZSBHQ0NfSklUX1RZ UEVfVUlOVDMyX1Q6CisgICAgICByZXR1cm4gdWludDMyX3R5cGVfbm9kZTsKKyAgICBjYXNlIEdD Q19KSVRfVFlQRV9VSU5UNjRfVDoKKyAgICAgIHJldHVybiB1aW50NjRfdHlwZV9ub2RlOworICAg IGNhc2UgR0NDX0pJVF9UWVBFX1VJTlQxMjhfVDoKKyAgICAgIGlmICh0YXJnZXRtLnNjYWxhcl9t b2RlX3N1cHBvcnRlZF9wIChUSW1vZGUpKQorICAgICAgICByZXR1cm4gdWludDEyOF90eXBlX25v ZGU7CisKKyAgICAgIGFkZF9lcnJvciAoTlVMTCwgImdjY19qaXRfdHlwZXMgdmFsdWUgdW5zdXBw b3J0ZWQgb24gdGhpcyB0YXJnZXQ6ICVpIiwgdHlwZV8pOworICAgICAgcmV0dXJuIE5VTEw7CisK KyAgICBjYXNlIEdDQ19KSVRfVFlQRV9JTlQ4X1Q6CisgICAgICByZXR1cm4gaW50UUlfdHlwZV9u b2RlOworICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDE2X1Q6CisgICAgICByZXR1cm4gaW50SElf dHlwZV9ub2RlOworICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDMyX1Q6CisgICAgICByZXR1cm4g aW50U0lfdHlwZV9ub2RlOworICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDY0X1Q6CisgICAgICBy ZXR1cm4gaW50RElfdHlwZV9ub2RlOworICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDEyOF9UOgor ICAgICAgaWYgKHRhcmdldG0uc2NhbGFyX21vZGVfc3VwcG9ydGVkX3AgKFRJbW9kZSkpCisgICAg ICAgIHJldHVybiBpbnRUSV90eXBlX25vZGU7CisKKyAgICAgIGFkZF9lcnJvciAoTlVMTCwgImdj Y19qaXRfdHlwZXMgdmFsdWUgdW5zdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQ6ICVpIiwgdHlwZV8p OworICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9MT05HOgogICAg ICAgcmV0dXJuIGxvbmdfaW50ZWdlcl90eXBlX25vZGU7CiAgICAgY2FzZSBHQ0NfSklUX1RZUEVf VU5TSUdORURfTE9ORzoKQEAgLTI2OCw2ICsyOTgsOCBAQCBnZXRfdHJlZV9ub2RlX2Zvcl90eXBl IChlbnVtIGdjY19qaXRfdHlwZXMgdHlwZV8pCiAgICAgICByZXR1cm4gY29tcGxleF9sb25nX2Rv dWJsZV90eXBlX25vZGU7CiAgICAgfQogCisgIGFkZF9lcnJvciAoTlVMTCwgInVucmVjb2duaXpl ZCAoZW51bSBnY2Nfaml0X3R5cGVzKSB2YWx1ZTogJWkiLCB0eXBlXyk7CisKICAgcmV0dXJuIE5V TEw7CiB9CiAKQEAgLTI4MCwxMCArMzEyLDcgQEAgZ2V0X3R5cGUgKGVudW0gZ2NjX2ppdF90eXBl cyB0eXBlXykKIHsKICAgdHJlZSB0eXBlX25vZGUgPSBnZXRfdHJlZV9ub2RlX2Zvcl90eXBlICh0 eXBlXyk7CiAgIGlmICh0eXBlX25vZGUgPT0gTlVMTCkKLSAgICB7Ci0gICAgICBhZGRfZXJyb3Ig KE5VTEwsICJ1bnJlY29nbml6ZWQgKGVudW0gZ2NjX2ppdF90eXBlcykgdmFsdWU6ICVpIiwgdHlw ZV8pOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIHJldHVybiBOVUxMOwogCiAgIHJl dHVybiBuZXcgdHlwZSAodHlwZV9ub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXJl Y29yZGluZy5jYyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5jYwppbmRleCAxZTNmYWRmYWNkNy4u NGZmZGFkMDY2NWYgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jYworKysgYi9n Y2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MKQEAgLTgyMiw2ICs4MjIsMTAgQEAgcmVjb3JkaW5nOjpj b250ZXh0OjpnZXRfaW50X3R5cGUgKGludCBudW1fYnl0ZXMsIGludCBpc19zaWduZWQpCiAgICAg cmV0dXJuIGdldF90eXBlIChpc19zaWduZWQKIAkJICAgICA/IEdDQ19KSVRfVFlQRV9MT05HX0xP TkcKIAkJICAgICA6IEdDQ19KSVRfVFlQRV9VTlNJR05FRF9MT05HX0xPTkcpOworICBpZiAobnVt X2JpdHMgPT0gMTI4KQorICAgIHJldHVybiBnZXRfdHlwZSAoaXNfc2lnbmVkCisJCSAgICAgPyBH Q0NfSklUX1RZUEVfSU5UMTI4X1QKKwkJICAgICA6IEdDQ19KSVRfVFlQRV9VSU5UMTI4X1QpOwog CiAgIC8qIFNvbWUgb3RoZXIgc2l6ZSwgbm90IGNvcnJlc3BvbmRpbmcgdG8gdGhlIEMgaW50IHR5 cGVzLiAgKi8KICAgLyogVG8gYmUgd3JpdHRlbjogc3VwcG9ydCBhcmJpdHJhcnkgb3RoZXIgc2l6 ZXMsIHNoYXJpbmcgYnkKQEAgLTIzMjUsNiArMjMyOSwyNiBAQCByZWNvcmRpbmc6Om1lbWVudG9f b2ZfZ2V0X3R5cGU6OmdldF9zaXplICgpCiAgICAgY2FzZSBHQ0NfSklUX1RZUEVfVU5TSUdORURf TE9OR19MT05HOgogICAgICAgc2l6ZSA9IExPTkdfTE9OR19UWVBFX1NJWkU7CiAgICAgICBicmVh azsKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VSU5UOF9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBF X0lOVDhfVDoKKyAgICAgIHNpemUgPSA4OworICAgICAgYnJlYWs7CisgICAgY2FzZSBHQ0NfSklU X1RZUEVfVUlOVDE2X1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UMTZfVDoKKyAgICAgIHNp emUgPSAxNjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VJTlQzMl9UOgor ICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDMyX1Q6CisgICAgICBzaXplID0gMzI7CisgICAgICBi cmVhazsKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VSU5UNjRfVDoKKyAgICBjYXNlIEdDQ19KSVRf VFlQRV9JTlQ2NF9UOgorICAgICAgc2l6ZSA9IDY0OworICAgICAgYnJlYWs7CisgICAgY2FzZSBH Q0NfSklUX1RZUEVfVUlOVDEyOF9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDEyOF9UOgor ICAgICAgc2l6ZSA9IDEyODsKKyAgICAgIGJyZWFrOwogICAgIGNhc2UgR0NDX0pJVF9UWVBFX0ZM T0FUOgogICAgICAgc2l6ZSA9IEZMT0FUX1RZUEVfU0laRTsKICAgICAgIGJyZWFrOwpAQCAtMjMz NCw2ICsyMzU4LDkgQEAgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlOjpnZXRfc2l6ZSAo KQogICAgIGNhc2UgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFOgogICAgICAgc2l6ZSA9IExPTkdf RE9VQkxFX1RZUEVfU0laRTsKICAgICAgIGJyZWFrOworICAgIGNhc2UgR0NDX0pJVF9UWVBFX1NJ WkVfVDoKKyAgICAgIHNpemUgPSBNQVhfQklUU19QRVJfV09SRDsKKyAgICAgIGJyZWFrOwogICAg IGRlZmF1bHQ6CiAgICAgICAvKiBBcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieQogCSAnZ2Nj X2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyJyBhbmQKQEAgLTIzNzMsNiArMjQwMCwxNiBAQCBy ZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGU6OmRlcmVmZXJlbmNlICgpCiAgICAgY2FzZSBH Q0NfSklUX1RZUEVfVU5TSUdORURfTE9ORzoKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9MT05HX0xP Tkc6CiAgICAgY2FzZSBHQ0NfSklUX1RZUEVfVU5TSUdORURfTE9OR19MT05HOgorICAgIGNhc2Ug R0NDX0pJVF9UWVBFX1VJTlQ4X1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfVUlOVDE2X1Q6Cisg ICAgY2FzZSBHQ0NfSklUX1RZUEVfVUlOVDMyX1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfVUlO VDY0X1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfVUlOVDEyOF9UOgorICAgIGNhc2UgR0NDX0pJ VF9UWVBFX0lOVDhfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9JTlQxNl9UOgorICAgIGNhc2Ug R0NDX0pJVF9UWVBFX0lOVDMyX1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UNjRfVDoKKyAg ICBjYXNlIEdDQ19KSVRfVFlQRV9JTlQxMjhfVDoKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9GTE9B VDoKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9ET1VCTEU6CiAgICAgY2FzZSBHQ0NfSklUX1RZUEVf TE9OR19ET1VCTEU6CkBAIC0yNDI1LDYgKzI0NjIsMTYgQEAgcmVjb3JkaW5nOjptZW1lbnRvX29m X2dldF90eXBlOjppc19pbnQgKCkgY29uc3QKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9VTlNJR05F RF9MT05HOgogICAgIGNhc2UgR0NDX0pJVF9UWVBFX0xPTkdfTE9ORzoKICAgICBjYXNlIEdDQ19K SVRfVFlQRV9VTlNJR05FRF9MT05HX0xPTkc6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfVUlOVDhf VDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VSU5UMTZfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQ RV9VSU5UMzJfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VSU5UNjRfVDoKKyAgICBjYXNlIEdD Q19KSVRfVFlQRV9VSU5UMTI4X1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UOF9UOgorICAg IGNhc2UgR0NDX0pJVF9UWVBFX0lOVDE2X1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UMzJf VDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9JTlQ2NF9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBF X0lOVDEyOF9UOgogICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9G TE9BVDoKQEAgLTI0NDgsNiArMjQ5NSw2MCBAQCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5 cGU6OmlzX2ludCAoKSBjb25zdAogICAgIH0KIH0KIAorLyogSW1wbGVtZW50YXRpb24gb2YgcHVy ZSB2aXJ0dWFsIGhvb2sgcmVjb3JkaW5nOjp0eXBlOjppc19zaWduZWQgZm9yCisgICByZWNvcmRp bmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUuICAqLworCitib29sCityZWNvcmRpbmc6Om1lbWVudG9f b2ZfZ2V0X3R5cGU6OmlzX3NpZ25lZCAoKSBjb25zdAoreworICBzd2l0Y2ggKG1fa2luZCkKKyAg ICB7CisgICAgZGVmYXVsdDogZ2NjX3VucmVhY2hhYmxlICgpOworCisgICAgY2FzZSBHQ0NfSklU X1RZUEVfU0lHTkVEX0NIQVI6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfQ0hBUjoKKyAgICBjYXNl IEdDQ19KSVRfVFlQRV9TSE9SVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9JTlQ6CisgICAgY2Fz ZSBHQ0NfSklUX1RZUEVfTE9ORzoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9MT05HX0xPTkc6Cisg ICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UOF9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDE2 X1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UMzJfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQ RV9JTlQ2NF9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDEyOF9UOgorICAgICAgcmV0dXJu IHRydWU7CisKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9WT0lEOgorICAgIGNhc2UgR0NDX0pJVF9U WVBFX1ZPSURfUFRSOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0JPT0w6CisgICAgY2FzZSBHQ0Nf SklUX1RZUEVfVU5TSUdORURfQ0hBUjoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9T SE9SVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9JTlQ6CisgICAgY2FzZSBHQ0Nf SklUX1RZUEVfVU5TSUdORURfTE9ORzoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9M T05HX0xPTkc6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfVUlOVDhfVDoKKyAgICBjYXNlIEdDQ19K SVRfVFlQRV9VSU5UMTZfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VSU5UMzJfVDoKKyAgICBj YXNlIEdDQ19KSVRfVFlQRV9VSU5UNjRfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VSU5UMTI4 X1Q6CisKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9GTE9BVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQ RV9ET1VCTEU6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfTE9OR19ET1VCTEU6CisKKyAgICBjYXNl IEdDQ19KSVRfVFlQRV9DT05TVF9DSEFSX1BUUjoKKworICAgIGNhc2UgR0NDX0pJVF9UWVBFX1NJ WkVfVDoKKworICAgIGNhc2UgR0NDX0pJVF9UWVBFX0ZJTEVfUFRSOgorCisgICAgY2FzZSBHQ0Nf SklUX1RZUEVfQ09NUExFWF9GTE9BVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RP VUJMRToKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFOgorICAgICAg cmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogLyogSW1wbGVtZW50YXRpb24gb2YgcHVyZSB2aXJ0 dWFsIGhvb2sgcmVjb3JkaW5nOjp0eXBlOjppc19mbG9hdCBmb3IKICAgIHJlY29yZGluZzo6bWVt ZW50b19vZl9nZXRfdHlwZS4gICovCiAKQEAgLTI0NzgsNiArMjU3OSwxNiBAQCByZWNvcmRpbmc6 Om1lbWVudG9fb2ZfZ2V0X3R5cGU6OmlzX2Zsb2F0ICgpIGNvbnN0CiAgICAgY2FzZSBHQ0NfSklU X1RZUEVfVU5TSUdORURfTE9ORzoKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9MT05HX0xPTkc6CiAg ICAgY2FzZSBHQ0NfSklUX1RZUEVfVU5TSUdORURfTE9OR19MT05HOgorICAgIGNhc2UgR0NDX0pJ VF9UWVBFX1VJTlQ4X1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfVUlOVDE2X1Q6CisgICAgY2Fz ZSBHQ0NfSklUX1RZUEVfVUlOVDMyX1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfVUlOVDY0X1Q6 CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfVUlOVDEyOF9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBF X0lOVDhfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9JTlQxNl9UOgorICAgIGNhc2UgR0NDX0pJ VF9UWVBFX0lOVDMyX1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UNjRfVDoKKyAgICBjYXNl IEdDQ19KSVRfVFlQRV9JTlQxMjhfVDoKICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2Ug R0NDX0pJVF9UWVBFX0ZMT0FUOgpAQCAtMjUzMSw2ICsyNjQyLDE2IEBAIHJlY29yZGluZzo6bWVt ZW50b19vZl9nZXRfdHlwZTo6aXNfYm9vbCAoKSBjb25zdAogICAgIGNhc2UgR0NDX0pJVF9UWVBF X1VOU0lHTkVEX0xPTkc6CiAgICAgY2FzZSBHQ0NfSklUX1RZUEVfTE9OR19MT05HOgogICAgIGNh c2UgR0NDX0pJVF9UWVBFX1VOU0lHTkVEX0xPTkdfTE9ORzoKKyAgICBjYXNlIEdDQ19KSVRfVFlQ RV9VSU5UOF9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VJTlQxNl9UOgorICAgIGNhc2UgR0ND X0pJVF9UWVBFX1VJTlQzMl9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VJTlQ2NF9UOgorICAg IGNhc2UgR0NDX0pJVF9UWVBFX1VJTlQxMjhfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9JTlQ4 X1Q6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UMTZfVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQ RV9JTlQzMl9UOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0lOVDY0X1Q6CisgICAgY2FzZSBHQ0Nf SklUX1RZUEVfSU5UMTI4X1Q6CiAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIEdDQ19K SVRfVFlQRV9GTE9BVDoKQEAgLTI2MDEsNyArMjcyMiwxOCBAQCBzdGF0aWMgY29uc3QgY2hhciAq IGNvbnN0IGdldF90eXBlX3N0cmluZ3NbXSA9IHsKIAogICAiY29tcGxleCBmbG9hdCIsIC8qIEdD Q19KSVRfVFlQRV9DT01QTEVYX0ZMT0FUICovCiAgICJjb21wbGV4IGRvdWJsZSIsIC8qIEdDQ19K SVRfVFlQRV9DT01QTEVYX0RPVUJMRSAqLwotICAiY29tcGxleCBsb25nIGRvdWJsZSIgIC8qIEdD Q19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFICovCisgICJjb21wbGV4IGxvbmcgZG91Ymxl IiwgIC8qIEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFICovCisKKyAgIl9fdWludDhf dCIsICAgIC8qIEdDQ19KSVRfVFlQRV9VSU5UOF9UICovCisgICJfX3VpbnQxNl90IiwgICAvKiBH Q0NfSklUX1RZUEVfVUlOVDE2X1QgKi8KKyAgIl9fdWludDMyX3QiLCAgIC8qIEdDQ19KSVRfVFlQ RV9VSU5UMzJfVCAqLworICAiX191aW50NjRfdCIsICAgLyogR0NDX0pJVF9UWVBFX1VJTlQ2NF9U ICovCisgICJfX3VpbnQxMjhfdCIsICAvKiBHQ0NfSklUX1RZUEVfVUlOVDEyOF9UICovCisgICJf X2ludDhfdCIsICAgICAvKiBHQ0NfSklUX1RZUEVfSU5UOF9UICovCisgICJfX2ludDE2X3QiLCAg ICAvKiBHQ0NfSklUX1RZUEVfSU5UMTZfVCAqLworICAiX19pbnQzMl90IiwgICAgLyogR0NDX0pJ VF9UWVBFX0lOVDMyX1QgKi8KKyAgIl9faW50NjRfdCIsICAgIC8qIEdDQ19KSVRfVFlQRV9JTlQ2 NF9UICovCisgICJfX2ludDEyOF90IiwgICAvKiBHQ0NfSklUX1RZUEVfSU5UMTI4X1QgKi8KIAog fTsKIApAQCAtMjYzNyw3ICsyNzY5LDE3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2V0 X3R5cGVfZW51bV9zdHJpbmdzW10gPSB7CiAgICJHQ0NfSklUX1RZUEVfRklMRV9QVFIiLAogICAi R0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQiLAogICAiR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9V QkxFIiwKLSAgIkdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFIgorICAiR0NDX0pJVF9U WVBFX0NPTVBMRVhfTE9OR19ET1VCTEUiLAorICAiR0NDX0pJVF9UWVBFX1VJTlQ4X1QiLAorICAi R0NDX0pJVF9UWVBFX1VJTlQxNl9UIiwKKyAgIkdDQ19KSVRfVFlQRV9VSU5UMzJfVCIsCisgICJH Q0NfSklUX1RZUEVfVUlOVDY0X1QiLAorICAiR0NDX0pJVF9UWVBFX1VJTlQxMjhfVCIsCisgICJH Q0NfSklUX1RZUEVfSU5UOF9UIiwKKyAgIkdDQ19KSVRfVFlQRV9JTlQxNl9UIiwKKyAgIkdDQ19K SVRfVFlQRV9JTlQzMl9UIiwKKyAgIkdDQ19KSVRfVFlQRV9JTlQ2NF9UIiwKKyAgIkdDQ19KSVRf VFlQRV9JTlQxMjhfVCIsCiB9OwogCiB2b2lkCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1yZWNv cmRpbmcuaCBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCmluZGV4IDg0NmQ2NWNiMjAyLi4xODA0 YWFhNjY2NCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKKysrIGIvZ2NjL2pp dC9qaXQtcmVjb3JkaW5nLmgKQEAgLTU2NCw2ICs1NjQsNyBAQCBwdWJsaWM6CiAgIHZpcnR1YWwg Ym9vbCBpc192b2lkICgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgIHZpcnR1YWwgdmVjdG9y X3R5cGUgKmlzX3ZlY3RvciAoKSB7IHJldHVybiBOVUxMOyB9CiAgIHZpcnR1YWwgYm9vbCBoYXNf a25vd25fc2l6ZSAoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgIHZpcnR1YWwgYm9vbCBpc19z aWduZWQgKCkgY29uc3QgPSAwOwogCiAgIGJvb2wgaXNfbnVtZXJpYyAoKSBjb25zdAogICB7CkBA IC02MDQsMTIgKzYwNSwxOSBAQCBwdWJsaWM6CiAgIGJvb2wgYWNjZXB0c193cml0ZXNfZnJvbSAo dHlwZSAqcnR5cGUpIEZJTkFMIE9WRVJSSURFCiAgIHsKICAgICBpZiAobV9raW5kID09IEdDQ19K SVRfVFlQRV9WT0lEX1BUUikKKyAgICB7CiAgICAgICBpZiAocnR5cGUtPmlzX3BvaW50ZXIgKCkp CiAJewogCSAgLyogTEhTICh0aGlzKSBpcyB0eXBlICh2b2lkICopLCBhbmQgdGhlIFJIUyBpcyBh IHBvaW50ZXI6CiAJICAgICBhY2NlcHQgaXQ6ICAqLwogCSAgcmV0dXJuIHRydWU7CiAJfQorICAg IH0KKyAgICBlbHNlIGlmIChpc19pbnQgKCkgJiYgcnR5cGUtPmlzX2ludCAoKSAmJiBnZXRfc2l6 ZSAoKSA9PSBydHlwZS0+Z2V0X3NpemUgKCkgJiYgaXNfc2lnbmVkICgpID09IHJ0eXBlLT5pc19z aWduZWQgKCkpCisgICAgeworICAgICAgLyogTEhTICh0aGlzKSBpcyBhbiBpbnRlZ2VyIG9mIHRo ZSBzYW1lIHNpemUgYW5kIHNpZ24gYXMgcnR5cGUuICAqLworICAgICAgcmV0dXJuIHRydWU7Cisg ICAgfQogCiAgICAgcmV0dXJuIHR5cGU6OmFjY2VwdHNfd3JpdGVzX2Zyb20gKHJ0eXBlKTsKICAg fQpAQCAtNjIwLDYgKzYyOCw3IEBAIHB1YmxpYzoKICAgdHlwZSAqaXNfcG9pbnRlciAoKSBGSU5B TCBPVkVSUklERSB7IHJldHVybiBkZXJlZmVyZW5jZSAoKTsgfQogICB0eXBlICppc19hcnJheSAo KSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBOVUxMOyB9CiAgIGJvb2wgaXNfdm9pZCAoKSBjb25z dCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBtX2tpbmQgPT0gR0NDX0pJVF9UWVBFX1ZPSUQ7IH0K KyAgYm9vbCBpc19zaWduZWQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREU7CiAKIHB1YmxpYzoKICAg dm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpIEZJTkFMIE9WRVJSSURFOwpAQCAtNjUzLDYg KzY2Miw3IEBAIHB1YmxpYzoKICAgYm9vbCBpc19ib29sICgpIGNvbnN0IEZJTkFMIE9WRVJSSURF IHsgcmV0dXJuIGZhbHNlOyB9CiAgIHR5cGUgKmlzX3BvaW50ZXIgKCkgRklOQUwgT1ZFUlJJREUg eyByZXR1cm4gbV9vdGhlcl90eXBlOyB9CiAgIHR5cGUgKmlzX2FycmF5ICgpIEZJTkFMIE9WRVJS SURFIHsgcmV0dXJuIE5VTEw7IH0KKyAgYm9vbCBpc19zaWduZWQgKCkgY29uc3QgRklOQUwgT1ZF UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJpdmF0ZToKICAgc3RyaW5nICogbWFrZV9kZWJ1 Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJREU7CkBAIC02NzQsMTIgKzY4NCwxNSBAQCBwdWJsaWM6 CiAKICAgdHlwZSAqZGVyZWZlcmVuY2UgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9vdGhl cl90eXBlLT5kZXJlZmVyZW5jZSAoKTsgfQogCisgIHNpemVfdCBnZXRfc2l6ZSAoKSBGSU5BTCBP VkVSUklERSB7IHJldHVybiBtX290aGVyX3R5cGUtPmdldF9zaXplICgpOyB9OworCiAgIGJvb2wg aXNfaW50ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIG1fb3RoZXJfdHlwZS0+aXNf aW50ICgpOyB9CiAgIGJvb2wgaXNfZmxvYXQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1 cm4gbV9vdGhlcl90eXBlLT5pc19mbG9hdCAoKTsgfQogICBib29sIGlzX2Jvb2wgKCkgY29uc3Qg RklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9vdGhlcl90eXBlLT5pc19ib29sICgpOyB9CiAgIHR5 cGUgKmlzX3BvaW50ZXIgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9vdGhlcl90eXBlLT5p c19wb2ludGVyICgpOyB9CiAgIHR5cGUgKmlzX2FycmF5ICgpIEZJTkFMIE9WRVJSSURFIHsgcmV0 dXJuIG1fb3RoZXJfdHlwZS0+aXNfYXJyYXkgKCk7IH0KICAgc3RydWN0XyAqaXNfc3RydWN0ICgp IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIG1fb3RoZXJfdHlwZS0+aXNfc3RydWN0ICgpOyB9Cisg IGJvb2wgaXNfc2lnbmVkICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIG1fb3RoZXJf dHlwZS0+aXNfc2lnbmVkICgpOyB9CiAKIHByb3RlY3RlZDoKICAgdHlwZSAqbV9vdGhlcl90eXBl OwpAQCAtODExLDYgKzgyNCw3IEBAIGNsYXNzIGFycmF5X3R5cGUgOiBwdWJsaWMgdHlwZQogICB0 eXBlICppc19wb2ludGVyICgpIEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIE5VTEw7IH0KICAgdHlw ZSAqaXNfYXJyYXkgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9lbGVtZW50X3R5cGU7IH0K ICAgaW50IG51bV9lbGVtZW50cyAoKSB7IHJldHVybiBtX251bV9lbGVtZW50czsgfQorICBib29s IGlzX3NpZ25lZCAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogCiAg IHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICopIEZJTkFMIE9WRVJSSURFOwogCkBAIC04NDQs NiArODU4LDcgQEAgcHVibGljOgogICBib29sIGlzX2Jvb2wgKCkgY29uc3QgRklOQUwgT1ZFUlJJ REUgeyByZXR1cm4gZmFsc2U7IH0KICAgdHlwZSAqaXNfcG9pbnRlciAoKSBGSU5BTCBPVkVSUklE RSB7IHJldHVybiBOVUxMOyB9CiAgIHR5cGUgKmlzX2FycmF5ICgpIEZJTkFMIE9WRVJSSURFIHsg cmV0dXJuIE5VTEw7IH0KKyAgYm9vbCBpc19zaWduZWQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUg eyByZXR1cm4gZmFsc2U7IH0KIAogICB2b2lkIHJlcGxheV9pbnRvIChyZXBsYXllciAqKSBGSU5B TCBPVkVSUklERTsKIApAQCAtOTU3LDYgKzk3Miw3IEBAIHB1YmxpYzoKICAgYm9vbCBpc19ib29s ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgIHR5cGUgKmlzX3Bv aW50ZXIgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gTlVMTDsgfQogICB0eXBlICppc19hcnJh eSAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBOVUxMOyB9CisgIGJvb2wgaXNfc2lnbmVkICgp IGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgYm9vbCBoYXNfa25v d25fc2l6ZSAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBtX2ZpZWxkcyAhPSBOVUxM OyB9CiAKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmNjIGIvZ2NjL2ppdC9saWJnY2Nq aXQuY2MKaW5kZXggNGMzNTJlOGM5M2QuLmYwOWJhNmMzZTQyIDEwMDY0NAotLS0gYS9nY2Mvaml0 L2xpYmdjY2ppdC5jYworKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5jYwpAQCAtMzQ1LDEwICszNDUs MTIgQEAgaml0X2Vycm9yIChnY2M6OmppdDo6cmVjb3JkaW5nOjpjb250ZXh0ICpjdHh0LAogICAg Z2NjOjpqaXQ6OnJlY29yZGluZzo6dHlwZTo6YWNjZXB0c193cml0ZXNfZnJvbSB2aXJ0dWFsIGZ1 bmN0aW9uIG9uCiAgICBMVFlQRS4gICovCiAKLXN0YXRpYyBib29sCi1jb21wYXRpYmxlX3R5cGVz IChnY2M6OmppdDo6cmVjb3JkaW5nOjp0eXBlICpsdHlwZSwKLQkJICBnY2M6OmppdDo6cmVjb3Jk aW5nOjp0eXBlICpydHlwZSkKK2ludAorZ2NjX2ppdF9jb21wYXRpYmxlX3R5cGVzIChnY2Nfaml0 X3R5cGUgKmx0eXBlLAorCQkJICBnY2Nfaml0X3R5cGUgKnJ0eXBlKQogeworICBSRVRVUk5fVkFM X0lGX0ZBSUwgKGx0eXBlLCAwLCBOVUxMLCBOVUxMLCAiTlVMTCBsdHlwZSIpOworICBSRVRVUk5f VkFMX0lGX0ZBSUwgKHJ0eXBlLCAwLCBOVUxMLCBOVUxMLCAiTlVMTCBydHlwZSIpOwogICByZXR1 cm4gbHR5cGUtPmFjY2VwdHNfd3JpdGVzX2Zyb20gKHJ0eXBlKTsKIH0KIApAQCAtNDU2LDcgKzQ1 OCw3IEBAIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAog ICBKSVRfTE9HX0ZVTkMgKGN0eHQtPmdldF9sb2dnZXIgKCkpOwogICBSRVRVUk5fTlVMTF9JRl9G QUlMX1BSSU5URjEgKAogICAgICh0eXBlID49IEdDQ19KSVRfVFlQRV9WT0lECi0gICAgICYmIHR5 cGUgPD0gR0NDX0pJVF9UWVBFX0ZJTEVfUFRSKSwKKyAgICAgJiYgdHlwZSA8IE5VTV9HQ0NfSklU X1RZUEVTKSwKICAgICBjdHh0LCBOVUxMLAogICAgICJ1bnJlY29nbml6ZWQgdmFsdWUgZm9yIGVu dW0gZ2NjX2ppdF90eXBlczogJWkiLCB0eXBlKTsKIApAQCAtNTIzLDYgKzUyNSwyMCBAQCBnY2Nf aml0X3R5cGVfZ2V0X3ZvbGF0aWxlIChnY2Nfaml0X3R5cGUgKnR5cGUpCiAgIHJldHVybiAoZ2Nj X2ppdF90eXBlICopdHlwZS0+Z2V0X3ZvbGF0aWxlICgpOwogfQogCisvKiBQdWJsaWMgZW50cnlw b2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KKworICAgQWZ0ZXIgZXJyb3It Y2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKKyAgIGdjYzo6aml0OjpyZWNv cmRpbmc6OnR5cGU6OmdldF9zaXplIG1ldGhvZCwgaW4KKyAgIGppdC1yZWNvcmRpbmcuY2MuICAq LworCitzc2l6ZV90CitnY2Nfaml0X3R5cGVfZ2V0X3NpemUgKGdjY19qaXRfdHlwZSAqdHlwZSkK K3sKKyAgUkVUVVJOX1ZBTF9JRl9GQUlMICh0eXBlLCAtMSwgTlVMTCwgTlVMTCwgIk5VTEwgdHlw ZSIpOworICBSRVRVUk5fVkFMX0lGX0ZBSUwgKHR5cGUtPmlzX2ludCAoKSwgLTEsIE5VTEwsIE5V TEwsICJvbmx5IGdldHRpbmcgdGhlIHNpemUgb2YgYW4gaW50IHR5cGUgaXMgc3VwcG9ydGVkIGZv ciBub3ciKTsKKyAgcmV0dXJuIHR5cGUtPmdldF9zaXplICgpOworfQorCiAvKiBQdWJsaWMgZW50 cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KIAogICAgQWZ0ZXIgZXJy b3ItY2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKQEAgLTIxMTksNyArMjEz NSw3IEBAIGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsCiAgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGEsIGN0eHQsIGxvYywgIk5VTEwgYSIpOwogICBS RVRVUk5fTlVMTF9JRl9GQUlMIChiLCBjdHh0LCBsb2MsICJOVUxMIGIiKTsKICAgUkVUVVJOX05V TExfSUZfRkFJTF9QUklOVEY0ICgKLSAgICBhLT5nZXRfdHlwZSAoKS0+dW5xdWFsaWZpZWQgKCkg PT0gYi0+Z2V0X3R5cGUgKCktPnVucXVhbGlmaWVkICgpLAorICAgIGdjY19qaXRfY29tcGF0aWJs ZV90eXBlcyAoKGdjY19qaXRfdHlwZSopYS0+Z2V0X3R5cGUgKCktPnVucXVhbGlmaWVkICgpLCAo Z2NjX2ppdF90eXBlKiliLT5nZXRfdHlwZSAoKS0+dW5xdWFsaWZpZWQgKCkpLAogICAgIGN0eHQs IGxvYywKICAgICAibWlzbWF0Y2hpbmcgdHlwZXMgZm9yIGJpbmFyeSBvcDoiCiAgICAgIiBhOiAl cyAodHlwZTogJXMpIGI6ICVzICh0eXBlOiAlcykiLApAQCAtMjIyOCw4ICsyMjQ0LDggQEAgZ2Nj X2ppdF9jb250ZXh0X25ld19jYWxsIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJcGFyYW0tPmdl dF90eXBlICgpLT5nZXRfZGVidWdfc3RyaW5nICgpKTsKIAogICAgICAgUkVUVVJOX05VTExfSUZf RkFJTF9QUklOVEY2ICgKLQljb21wYXRpYmxlX3R5cGVzIChwYXJhbS0+Z2V0X3R5cGUgKCksCi0J CQkgIGFyZy0+Z2V0X3R5cGUgKCkpLAorCWdjY19qaXRfY29tcGF0aWJsZV90eXBlcyAoKGdjY19q aXRfdHlwZSopIHBhcmFtLT5nZXRfdHlwZSAoKSwKKwkJCSAgKGdjY19qaXRfdHlwZSopIGFyZy0+ Z2V0X3R5cGUgKCkpLAogCWN0eHQsIGxvYywKIAkibWlzbWF0Y2hpbmcgdHlwZXMgZm9yIGFyZ3Vt ZW50ICVkIG9mIGZ1bmN0aW9uIFwiJXNcIjoiCiAJIiBhc3NpZ25tZW50IHRvIHBhcmFtICVzICh0 eXBlOiAlcykgZnJvbSAlcyAodHlwZTogJXMpIiwKQEAgLTIzMTcsOCArMjMzMyw4IEBAIGdjY19q aXRfY29udGV4dF9uZXdfY2FsbF90aHJvdWdoX3B0ciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAog CXBhcmFtX3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOwogCiAgICAgICBSRVRVUk5fTlVMTF9J Rl9GQUlMX1BSSU5URjYgKAotCWNvbXBhdGlibGVfdHlwZXMgKHBhcmFtX3R5cGUsCi0JCQkgIGFy Zy0+Z2V0X3R5cGUgKCkpLAorCWdjY19qaXRfY29tcGF0aWJsZV90eXBlcyAoKGdjY19qaXRfdHlw ZSopIHBhcmFtX3R5cGUsCisJCQkgIChnY2Nfaml0X3R5cGUqKSBhcmctPmdldF90eXBlICgpKSwK IAljdHh0LCBsb2MsCiAJIm1pc21hdGNoaW5nIHR5cGVzIGZvciBhcmd1bWVudCAlZCBvZiBmbl9w dHI6ICVzOiIKIAkiIGFzc2lnbm1lbnQgdG8gcGFyYW0gJWQgKHR5cGU6ICVzKSBmcm9tICVzICh0 eXBlOiAlcykiLApAQCAtMjcyOSw4ICsyNzQ1LDggQEAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdu bWVudCAoZ2NjX2ppdF9ibG9jayAqYmxvY2ssCiAgIFJFVFVSTl9JRl9GQUlMIChsdmFsdWUsIGN0 eHQsIGxvYywgIk5VTEwgbHZhbHVlIik7CiAgIFJFVFVSTl9JRl9GQUlMIChydmFsdWUsIGN0eHQs IGxvYywgIk5VTEwgcnZhbHVlIik7CiAgIFJFVFVSTl9JRl9GQUlMX1BSSU5URjQgKAotICAgIGNv bXBhdGlibGVfdHlwZXMgKGx2YWx1ZS0+Z2V0X3R5cGUgKCksCi0JCSAgICAgIHJ2YWx1ZS0+Z2V0 X3R5cGUgKCkpLAorICAgIGdjY19qaXRfY29tcGF0aWJsZV90eXBlcyAoKGdjY19qaXRfdHlwZSop IGx2YWx1ZS0+Z2V0X3R5cGUgKCksCisJCSAgICAgIChnY2Nfaml0X3R5cGUqKSBydmFsdWUtPmdl dF90eXBlICgpKSwKICAgICBjdHh0LCBsb2MsCiAgICAgIm1pc21hdGNoaW5nIHR5cGVzOiIKICAg ICAiIGFzc2lnbm1lbnQgdG8gJXMgKHR5cGU6ICVzKSBmcm9tICVzICh0eXBlOiAlcykiLApAQCAt Mjc3NSw4ICsyNzkxLDggQEAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudF9vcCAoZ2NjX2pp dF9ibG9jayAqYmxvY2ssCiAgICAgb3ApOwogICBSRVRVUk5fSUZfRkFJTCAocnZhbHVlLCBjdHh0 LCBsb2MsICJOVUxMIHJ2YWx1ZSIpOwogICBSRVRVUk5fSUZfRkFJTF9QUklOVEY0ICgKLSAgICBj b21wYXRpYmxlX3R5cGVzIChsdmFsdWUtPmdldF90eXBlICgpLAotCQkgICAgICBydmFsdWUtPmdl dF90eXBlICgpKSwKKyAgICBnY2Nfaml0X2NvbXBhdGlibGVfdHlwZXMgKChnY2Nfaml0X3R5cGUq KSBsdmFsdWUtPmdldF90eXBlICgpLAorCQkgICAgICAoZ2NjX2ppdF90eXBlKikgcnZhbHVlLT5n ZXRfdHlwZSAoKSksCiAgICAgY3R4dCwgbG9jLAogICAgICJtaXNtYXRjaGluZyB0eXBlczoiCiAg ICAgIiBhc3NpZ25tZW50IHRvICVzICh0eXBlOiAlcykgaW52b2x2aW5nICVzICh0eXBlOiAlcyki LApAQCAtMjkzMiw5ICsyOTQ4LDkgQEAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGdj Y19qaXRfYmxvY2sgKmJsb2NrLAogICBnY2M6OmppdDo6cmVjb3JkaW5nOjpmdW5jdGlvbiAqZnVu YyA9IGJsb2NrLT5nZXRfZnVuY3Rpb24gKCk7CiAgIFJFVFVSTl9JRl9GQUlMIChydmFsdWUsIGN0 eHQsIGxvYywgIk5VTEwgcnZhbHVlIik7CiAgIFJFVFVSTl9JRl9GQUlMX1BSSU5URjQgKAotICAg IGNvbXBhdGlibGVfdHlwZXMgKAotICAgICAgZnVuYy0+Z2V0X3JldHVybl90eXBlICgpLAotICAg ICAgcnZhbHVlLT5nZXRfdHlwZSAoKSksCisgICAgZ2NjX2ppdF9jb21wYXRpYmxlX3R5cGVzICgK KyAgICAgIChnY2Nfaml0X3R5cGUqKSBmdW5jLT5nZXRfcmV0dXJuX3R5cGUgKCksCisgICAgICAo Z2NjX2ppdF90eXBlKikgcnZhbHVlLT5nZXRfdHlwZSAoKSksCiAgICAgY3R4dCwgbG9jLAogICAg ICJtaXNtYXRjaGluZyB0eXBlczoiCiAgICAgIiByZXR1cm4gb2YgJXMgKHR5cGU6ICVzKSBpbiBm dW5jdGlvbiAlcyAocmV0dXJuIHR5cGU6ICVzKSIsCkBAIC0zOTMyLDggKzM5NDgsOCBAQCBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX3ZlY3RvciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0 LAogICAgICAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxICgKIAllbGVtZW50c1tpXSwgY3R4 dCwgbG9jLCAiTlVMTCBlbGVtZW50c1slemldIiwgaSk7CiAgICAgICBSRVRVUk5fTlVMTF9JRl9G QUlMX1BSSU5URjQgKAotCWNvbXBhdGlibGVfdHlwZXMgKGVsZW1lbnRfdHlwZSwKLQkJCSAgZWxl bWVudHNbaV0tPmdldF90eXBlICgpKSwKKwlnY2Nfaml0X2NvbXBhdGlibGVfdHlwZXMgKChnY2Nf aml0X3R5cGUqKSBlbGVtZW50X3R5cGUsCisJCQkgIChnY2Nfaml0X3R5cGUqKSBlbGVtZW50c1tp XS0+Z2V0X3R5cGUgKCkpLAogCWN0eHQsIGxvYywKIAkibWlzbWF0Y2hpbmcgdHlwZSBmb3IgZWxl bWVudFslemldIChleHBlY3RlZCB0eXBlOiAlcyk6ICVzICh0eXBlOiAlcykiLAogCWksCmRpZmYg LS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5oIGIvZ2NjL2ppdC9saWJnY2NqaXQuaAppbmRleCAy YTVmZmFjYjFmZS4uMWQ5ZGEzNTRmMzEgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmgK KysrIGIvZ2NjL2ppdC9saWJnY2NqaXQuaApAQCAtNTc0LDggKzU3NCwxOSBAQCBlbnVtIGdjY19q aXRfdHlwZXMKICAgLyogQ29tcGxleCBudW1iZXJzLiAgKi8KICAgR0NDX0pJVF9UWVBFX0NPTVBM RVhfRkxPQVQsCiAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKLSAgR0NDX0pJVF9UWVBF X0NPTVBMRVhfTE9OR19ET1VCTEUKLQorICBHQ0NfSklUX1RZUEVfQ09NUExFWF9MT05HX0RPVUJM RSwKKworICAvKiBTaXplZCBpbnRlZ2VyIHR5cGVzLiAgKi8KKyAgR0NDX0pJVF9UWVBFX1VJTlQ4 X1QsCisgIEdDQ19KSVRfVFlQRV9VSU5UMTZfVCwKKyAgR0NDX0pJVF9UWVBFX1VJTlQzMl9ULAor ICBHQ0NfSklUX1RZUEVfVUlOVDY0X1QsCisgIEdDQ19KSVRfVFlQRV9VSU5UMTI4X1QsCisgIEdD Q19KSVRfVFlQRV9JTlQ4X1QsCisgIEdDQ19KSVRfVFlQRV9JTlQxNl9ULAorICBHQ0NfSklUX1RZ UEVfSU5UMzJfVCwKKyAgR0NDX0pJVF9UWVBFX0lOVDY0X1QsCisgIEdDQ19KSVRfVFlQRV9JTlQx MjhfVAogfTsKIAogZXh0ZXJuIGdjY19qaXRfdHlwZSAqCkBAIC02MDEsNiArNjEyLDIzIEBAIGdj Y19qaXRfdHlwZV9nZXRfY29uc3QgKGdjY19qaXRfdHlwZSAqdHlwZSk7CiBleHRlcm4gZ2NjX2pp dF90eXBlICoKIGdjY19qaXRfdHlwZV9nZXRfdm9sYXRpbGUgKGdjY19qaXRfdHlwZSAqdHlwZSk7 CiAKKyNkZWZpbmUgTElCR0NDSklUX0hBVkVfU0laRURfSU5URUdFUlMKKworLyogR2l2ZW4gdHlw ZXMgTFRZUEUgYW5kIFJUWVBFLCByZXR1cm4gbm9uLXplcm8gaWYgdGhleSBhcmUgY29tcGF0aWJs ZS4KKyAgIFRoaXMgQVBJIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIExJQkdDQ0pJVF9BQklfMjA7 IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZworICAgICAjaWZkZWYgTElC R0NDSklUX0hBVkVfU0laRURfSU5URUdFUlMgICovCitleHRlcm4gaW50CitnY2Nfaml0X2NvbXBh dGlibGVfdHlwZXMgKGdjY19qaXRfdHlwZSAqbHR5cGUsCisJCQkgIGdjY19qaXRfdHlwZSAqcnR5 cGUpOworCisvKiBHaXZlbiB0eXBlICJUIiwgZ2V0IGl0cyBzaXplLgorICAgVGhpcyBBUEkgZW50 cnlwb2ludCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8yMDsgeW91IGNhbiB0ZXN0IGZvciBp dHMKKyAgIHByZXNlbmNlIHVzaW5nCisgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9TSVpFRF9J TlRFR0VSUyAgKi8KK2V4dGVybiBzc2l6ZV90CitnY2Nfaml0X3R5cGVfZ2V0X3NpemUgKGdjY19q aXRfdHlwZSAqdHlwZSk7CisKIC8qIEdpdmVuIHR5cGUgIlQiLCBnZXQgdHlwZSAiVFtOXSIgKGZv ciBhIGNvbnN0YW50IE4pLiAgKi8KIGV4dGVybiBnY2Nfaml0X3R5cGUgKgogZ2NjX2ppdF9jb250 ZXh0X25ld19hcnJheV90eXBlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCmRpZmYgLS1naXQgYS9n Y2Mvaml0L2xpYmdjY2ppdC5tYXAgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKaW5kZXggZjM3M2Zk MzlhYzcuLjFjMDAyNzg2ZTg0IDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKKysr IGIvZ2NjL2ppdC9saWJnY2NqaXQubWFwCkBAIC0yNDMsMyArMjQzLDkgQEAgTElCR0NDSklUX0FC SV8xOSB7CiAgICAgZ2NjX2ppdF9jb250ZXh0X25ld191bmlvbl9jb25zdHJ1Y3RvcjsKICAgICBn Y2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlhbGl6ZXJfcnZhbHVlOwogfSBMSUJHQ0NKSVRfQUJJXzE4 OworCitMSUJHQ0NKSVRfQUJJXzIwIHsKKyAgZ2xvYmFsOgorICAgIGdjY19qaXRfY29tcGF0aWJs ZV90eXBlczsKKyAgICBnY2Nfaml0X3R5cGVfZ2V0X3NpemU7Cit9IExJQkdDQ0pJVF9BQklfMTk7 CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXR5cGVzLmMgYi9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LXR5cGVzLmMKaW5kZXggOGRlYmNkN2ViODIuLjY4MzY1OTdkMTRl IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXR5cGVzLmMKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC10eXBlcy5jCkBAIC0xLDMgKzEsNCBAQAorI2luY2x1ZGUg PHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j bHVkZSA8c3RkZGVmLmg+CkBAIC0yOSw2ICszMCwyMSBAQCBzdHJ1Y3Qgem9vCiAgIGxvbmcgbG9u ZyBtX2xvbmdfbG9uZzsKICAgdW5zaWduZWQgbG9uZyBsb25nIG1fdW5zaWduZWRfbG9uZ19sb25n OwogCisgIHVpbnQ4X3QgbV91ODsKKyAgdWludDE2X3QgbV91MTY7CisgIHVpbnQzMl90IG1fdTMy OworICB1aW50NjRfdCBtX3U2NDsKKworICBpbnQ4X3QgbV9pODsKKyAgaW50MTZfdCBtX2kxNjsK KyAgaW50MzJfdCBtX2kzMjsKKyAgaW50NjRfdCBtX2k2NDsKKworI2lmZGVmIF9fU0laRU9GX0lO VDEyOF9fCisgIF9fdWludDEyOF90IG1fdTEyODsKKyAgX19pbnQxMjhfdCBtX2kxMjg7CisjZW5k aWYKKwogICBpbnQgbV9zaXplZF9pbnRfdHlwZTsKIAogICBmbG9hdCBtX2Zsb2F0OwpAQCAtMTAx LDYgKzExNywzMSBAQCBjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1 c2VyX2RhdGEpCiAgIGdjY19qaXRfZmllbGQgKmZpZWxkX21fdW5zaWduZWRfbG9uZ19sb25nID0K ICAgICBDUkVBVEVfRklFTEQgKEdDQ19KSVRfVFlQRV9VTlNJR05FRF9MT05HX0xPTkcsICJtX3Vu c2lnbmVkX2xvbmdfbG9uZyIpOwogCisgIGdjY19qaXRfZmllbGQgKmZpZWxkX21fdTggPQorICAg IENSRUFURV9GSUVMRCAoR0NDX0pJVF9UWVBFX1VJTlQ4X1QsICJtX3U4Iik7CisgIGdjY19qaXRf ZmllbGQgKmZpZWxkX21fdTE2ID0KKyAgICBDUkVBVEVfRklFTEQgKEdDQ19KSVRfVFlQRV9VSU5U MTZfVCwgIm1fdTE2Iik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkX21fdTMyID0KKyAgICBDUkVB VEVfRklFTEQgKEdDQ19KSVRfVFlQRV9VSU5UMzJfVCwgIm1fdTMyIik7CisgIGdjY19qaXRfZmll bGQgKmZpZWxkX21fdTY0ID0KKyAgICBDUkVBVEVfRklFTEQgKEdDQ19KSVRfVFlQRV9VSU5UNjRf VCwgIm1fdTY0Iik7CisKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRfbV9pOCA9CisgICAgQ1JFQVRF X0ZJRUxEIChHQ0NfSklUX1RZUEVfSU5UOF9ULCAibV9pOCIpOworICBnY2Nfaml0X2ZpZWxkICpm aWVsZF9tX2kxNiA9CisgICAgQ1JFQVRFX0ZJRUxEIChHQ0NfSklUX1RZUEVfSU5UMTZfVCwgIm1f aTE2Iik7CisgIGdjY19qaXRfZmllbGQgKmZpZWxkX21faTMyID0KKyAgICBDUkVBVEVfRklFTEQg KEdDQ19KSVRfVFlQRV9JTlQzMl9ULCAibV9pMzIiKTsKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRf bV9pNjQgPQorICAgIENSRUFURV9GSUVMRCAoR0NDX0pJVF9UWVBFX0lOVDY0X1QsICJtX2k2NCIp OworCisjaWZkZWYgX19TSVpFT0ZfSU5UMTI4X18KKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRfbV91 MTI4ID0KKyAgICBDUkVBVEVfRklFTEQgKEdDQ19KSVRfVFlQRV9VSU5UMTI4X1QsICJtX3UxMjgi KTsKKyAgZ2NjX2ppdF9maWVsZCAqZmllbGRfbV9pMTI4ID0KKyAgICBDUkVBVEVfRklFTEQgKEdD Q19KSVRfVFlQRV9JTlQxMjhfVCwgIm1faTEyOCIpOworI2VuZGlmCisKICAgLyogU2lnbmVkIGlu dCB0eXBlIHdpdGggc2l6ZW9mIChpbnQpOiAqLwogICBnY2Nfaml0X3R5cGUgKnNpemVkX2ludF90 eXBlID0KICAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X2ludF90eXBlIChjdHh0LCBzaXplb2YgKGlu dCksIDEpOwpAQCAtMTQ3LDYgKzE4OCwyMSBAQCBjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0 ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCiAgICAgZmllbGRfbV9sb25nX2xvbmcsCiAgICAgZmll bGRfbV91bnNpZ25lZF9sb25nX2xvbmcsCiAKKyAgICBmaWVsZF9tX3U4LAorICAgIGZpZWxkX21f dTE2LAorICAgIGZpZWxkX21fdTMyLAorICAgIGZpZWxkX21fdTY0LAorCisgICAgZmllbGRfbV9p OCwKKyAgICBmaWVsZF9tX2kxNiwKKyAgICBmaWVsZF9tX2kzMiwKKyAgICBmaWVsZF9tX2k2NCwK KworI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fCisgICAgZmllbGRfbV91MTI4LAorICAgIGZpZWxk X21faTEyOCwKKyNlbmRpZgorCiAgICAgZmllbGRfbV9zaXplZF9pbnRfdHlwZSwKIAogICAgIGZp ZWxkX21fZmxvYXQsCkBAIC0yNjYsNiArMzIyLDYxIEBAIGNyZWF0ZV9jb2RlIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKICAgICAgIGdjY19qaXRfY29udGV4dF9nZXRf dHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX1VOU0lHTkVEX0xPTkdfTE9ORyksCiAgICAgICAxMjM0 NTY3ODkpKQogCisgIEFTU0lHTihmaWVsZF9tX3U4LAorICAgIGdjY19qaXRfY29udGV4dF9uZXdf cnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsCisgICAgICBnY2Nfaml0X2NvbnRleHRfZ2V0 X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9VSU5UOF9UKSwKKyAgICAgIDEyMykpCisgIEFTU0lH TihmaWVsZF9tX3UxNiwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAo CisgICAgICBjdHh0LAorICAgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0Nf SklUX1RZUEVfVUlOVDE2X1QpLAorICAgICAgMTIzNDUpKQorICBBU1NJR04oZmllbGRfbV91MzIs CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwK KyAgICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX1VJTlQz Ml9UKSwKKyAgICAgIDEyMzQ1Njc4OSkpCisgIEFTU0lHTihmaWVsZF9tX3U2NCwKKyAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LAorICAgICAgZ2Nj X2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfVUlOVDY0X1QpLAorICAg ICAgMTIzNDU2Nzg5KSkKKworICBBU1NJR04oZmllbGRfbV9pOCwKKyAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisgICAgICBjdHh0LAorICAgICAgZ2NjX2ppdF9jb250 ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfSU5UOF9UKSwKKyAgICAgIC0xKSkKKyAg QVNTSUdOKGZpZWxkX21faTE2LAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f aW50ICgKKyAgICAgIGN0eHQsCisgICAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQs IEdDQ19KSVRfVFlQRV9JTlQxNl9UKSwKKyAgICAgIC0yKSkKKyAgQVNTSUdOKGZpZWxkX21faTMy LAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQs CisgICAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQz Ml9UKSwKKyAgICAgIC0zKSkKKyAgQVNTSUdOKGZpZWxkX21faTY0LAorICAgIGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsCisgICAgICBnY2Nfaml0X2Nv bnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQ2NF9UKSwKKyAgICAgIC00KSkK KworI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fCisgIEFTU0lHTihmaWVsZF9tX3UxMjgsCisgICAg Z2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwKKyAgICAg IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX1VJTlQxMjhfVCks CisgICAgICAxMjM0NTY3ODkpKQorICBBU1NJR04oZmllbGRfbV9pMTI4LAorICAgIGdjY19qaXRf Y29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50ICgKKyAgICAgIGN0eHQsCisgICAgICBnY2Nfaml0 X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQxMjhfVCksCisgICAgICAt NSkpCisjZW5kaWYKKwogICBBU1NJR04oZmllbGRfbV9zaXplZF9pbnRfdHlwZSwKICAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCiAgICAgICBjdHh0LApAQCAtMzQ3LDYg KzQ1OCwyMSBAQCB2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jl c3VsdCAqcmVzdWx0KQogICBDSEVDS19WQUxVRSAoei5tX2xvbmdfbG9uZywgLTQyKTsKICAgQ0hF Q0tfVkFMVUUgKHoubV91bnNpZ25lZF9sb25nX2xvbmcsIDEyMzQ1Njc4OSk7CiAKKyAgQ0hFQ0tf VkFMVUUgKHoubV91OCwgMTIzKTsKKyAgQ0hFQ0tfVkFMVUUgKHoubV91MTYsIDEyMzQ1KTsKKyAg Q0hFQ0tfVkFMVUUgKHoubV91MzIsIDEyMzQ1Njc4OSk7CisgIENIRUNLX1ZBTFVFICh6Lm1fdTY0 LCAxMjM0NTY3ODkpOworCisgIENIRUNLX1ZBTFVFICh6Lm1faTgsIC0xKTsKKyAgQ0hFQ0tfVkFM VUUgKHoubV9pMTYsIC0yKTsKKyAgQ0hFQ0tfVkFMVUUgKHoubV9pMzIsIC0zKTsKKyAgQ0hFQ0tf VkFMVUUgKHoubV9pNjQsIC00KTsKKworI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9fCisgIENIRUNL X1ZBTFVFICh6Lm1fdTEyOCwgMTIzNDU2Nzg5KTsKKyAgQ0hFQ0tfVkFMVUUgKHoubV9pMTI4LCAt NSk7CisjZW5kaWYKKwogICBDSEVDS19WQUxVRSAoei5tX3NpemVkX2ludF90eXBlLCA1MDApOwog CiAgIENIRUNLX1ZBTFVFICh6Lm1fZmxvYXQsIDMuMTQxZik7CkBAIC0zNTgsNCArNDg0LDkgQEAg dmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3Vs dCkKICAgQ0hFQ0tfVkFMVUUgKHoubV9zaXplX3QsIHNpemVvZiAoc3RydWN0IHpvbykpOwogCiAg IENIRUNLX1ZBTFVFICh6Lm1fRklMRV9wdHIsIHN0ZGVycik7CisKKyAgaWYgKHNpemVvZihsb25n KSA9PSA4KQorICAgIENIRUNLIChnY2Nfaml0X2NvbXBhdGlibGVfdHlwZXMgKAorICAgICAgZ2Nj X2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfTE9ORyksCisgICAgICBn Y2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQ2NF9UKSkpOwog fQotLSAKMi4yNi4yLjcuZzE5ZGI5Y2ZiNjguZGlydHkKCg== --=-4mvW1w67uht+07acSx5x--