From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 2970A41CBC;
	Fri, 17 Feb 2023 09:49:10 +0100 (CET)
Received: from mails.dpdk.org (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id A9C5F40F17;
	Fri, 17 Feb 2023 09:49:09 +0100 (CET)
Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com
 [67.231.156.173])
 by mails.dpdk.org (Postfix) with ESMTP id 6D8D140EE1
 for <dev@dpdk.org>; Fri, 17 Feb 2023 09:49:08 +0100 (CET)
Received: from pps.filterd (m0045851.ppops.net [127.0.0.1])
 by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id
 31H4ph6e026698; Fri, 17 Feb 2023 00:49:07 -0800
Received: from nam12-bn8-obe.outbound.protection.outlook.com
 (mail-bn8nam12lp2169.outbound.protection.outlook.com [104.47.55.169])
 by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3nsg6wehky-1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);
 Fri, 17 Feb 2023 00:49:07 -0800
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Ywij46Dj322d+PldKeoSSRFDO8fg5okGwQ0iBcDb3zVj+B5UOB6pCiEjxsrtawRSboAP61oULZlqxeceTzbLJDRtE+4xyrdHHfDNOC9OsyNlhnQwh/qr/4B396ZgT4NzcW96SWNf132EMFmqtS/co38lLxrP0SBHPAcklZeApaMANJ/nkQG8gYStybUjqceDPZI274Px7SpCwBetrY7LEUAF8rV1ThXgErvzKhvlqle8qvpUf9qALhOA2WVesu+6G38qRAdCCjzS96Vqpt1LaRmIQpLFG9Eyweap18NVDnPZJzxxDhIAD9vwlZe2BvamyVyUTiKSgZpirJvAdD8noA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=6qKQ2Aq2FJ6asLKsJtBON/ifGRJI+G98fJm8tMrVXrE=;
 b=ZrvpSl/tFJOMbTm5AKEku4IMSzby+ms2+nCuBEM6F9DPGsuQtroL6mF2iHpK9CBUZw6thd99AfJ7Kglh370maSNDuFy1MACxaKWDBh3jma5O7rZDBM4WViSBqHM7faHyl5hA/cwG5AEQkWI5glnlJjQlMACrcHVlgq7Ygo1Uj/wqcqpIwLunscGCL0Ro73H2hEwRnR/Sl5FNTVY/n8cvC/N+aySpMi65ElCfOvzfGgYBtI228wduTNbmb34Y2Ic8rY5BRmzzOww84urDmnfjDPLPIuteo9vrL0BIcO76BpZQP0YOuJz5b5BaDvSc7tlkgSM+oA77vm6rWBePotYBWQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com;
 dkim=pass header.d=marvell.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=6qKQ2Aq2FJ6asLKsJtBON/ifGRJI+G98fJm8tMrVXrE=;
 b=bGe6WxxvnkGOJAElrxTPRIX7bhaPCM5VR3Geur0NgLw7fa5GtbnSJQeAoDRb1csxqRweXVpK9SJSDt183Ngr0XfaHQ43seiYW2iVX19q33WgB7653fSBmF/uyCM+iEeTn60afaNRHOXFpoj2xr0uxhQUX4yFDcEzIS8cIyODWI0=
Received: from DM4PR18MB4368.namprd18.prod.outlook.com (2603:10b6:5:39d::6) by
 CO1PR18MB4684.namprd18.prod.outlook.com (2603:10b6:303:e7::5) with
 Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.6111.13; Fri, 17 Feb 2023 08:49:04 +0000
Received: from DM4PR18MB4368.namprd18.prod.outlook.com
 ([fe80::6d6a:99da:de:ea6b]) by DM4PR18MB4368.namprd18.prod.outlook.com
 ([fe80::6d6a:99da:de:ea6b%8]) with mapi id 15.20.6111.015; Fri, 17 Feb 2023
 08:49:04 +0000
From: Tomasz Duszynski <tduszynski@marvell.com>
To: Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>, "dev@dpdk.org"
 <dev@dpdk.org>
Subject: RE: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading
 PMU events
Thread-Topic: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading
 PMU events
Thread-Index: AQHZQi/ugndN0uHRZEy+gbr3w2CIfa7SPocAgAB/jGA=
Date: Fri, 17 Feb 2023 08:49:04 +0000
Message-ID: <DM4PR18MB43685A2D4112F65069769D09D2A19@DM4PR18MB4368.namprd18.prod.outlook.com>
References: <20230213113156.385482-1-tduszynski@marvell.com>
 <20230216175502.3164820-1-tduszynski@marvell.com>
 <20230216175502.3164820-2-tduszynski@marvell.com>
 <4b055bbc-36e5-671c-8117-fb0ee7307d55@yandex.ru>
In-Reply-To: <4b055bbc-36e5-671c-8117-fb0ee7307d55@yandex.ru>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: DM4PR18MB4368:EE_|CO1PR18MB4684:EE_
x-ms-office365-filtering-correlation-id: 17b3b95d-9597-425c-36fe-08db10c3d2bb
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: Tqd9pSWFyPiQRxqJW9hkX/qqmp3jHjIhQp+wAH50ujmIkvh80ZKmJvRhbkONpCnEWFWE/AMFCc2GeGD4JYaZIvRav0pqiw5MEtYTBPddHzyHJj49IerfF24nb/z1J51HGcO6rtyeHRMXIGaCGYiszif47N9LnxBhGp/+C30qCKiZhk9pqN1shJ5jvuxjr09YzF3OTN7V1WOI3S9FOhOmXjB9t9287/qaWqvaH29D2CYnLsQjV7sxMY24yZaks1l7eBT5bu5bNiqEOgY2NRNyqbxEqeQTsOHUVn5B3ymd57XXKqjmMSBpdOpKdWJO9BmXOMI+IZ2K/2wmWOPuCbW8DHyDUf96UtUTHLiNCmhZwK6q7r7bEv1dA5nSPCZgyp+JFBFvUH4+rPbzgMUDqMzCfy3duGBOgWf9PWov6spfAVhMwnqkENTcBk1K2KKgIIdTyl9cUal/F8RdKAf/chUHbeXRaVxjpUheCjUUL23Lg3qFfK/28WUy/ZaWwEF5sgaomWFe9nerS1GR6aSarUCQGlaxWf8t4G5G36SCDrd6cQB1DGJb3I6Avhz4UUAj3txNtWEWPrWBRKpCHYsGwjOFeW9DaCxjDj0A66u24BiW4L6AwZNrUiU6volmvhM1Eb4KRMHuKWAfAuy0hjy9aAibiAZeDpO2Ol5nqS7vsR9Hg43/u0/ubAmNjqV1Ivy2SgmdTkkNkfE4RFGNKKzEd4Rzf/EGc6hAfiNDVEyKnc9yPeY=
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:DM4PR18MB4368.namprd18.prod.outlook.com; PTR:; CAT:NONE;
 SFS:(13230025)(4636009)(396003)(39860400002)(366004)(136003)(376002)(346002)(451199018)(55016003)(83380400001)(2906002)(66574015)(33656002)(26005)(478600001)(71200400001)(7696005)(186003)(6506007)(9686003)(86362001)(38070700005)(30864003)(38100700002)(5660300002)(122000001)(52536014)(8936002)(64756008)(41300700001)(66446008)(66946007)(66476007)(66556008)(110136005)(8676002)(76116006)(316002)(41533002)(559001)(579004);
 DIR:OUT; SFP:1101; 
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cTJOZDlpVGxmb2ZFc3ZoUUtJQlZvWlZMcVpUUnFIYlM3dTdUd2lOeVRjUnQr?=
 =?utf-8?B?VUJWQVNmSGpUK0ZJaGJNeStUV3BKNTFzbmJQVno1N2FybzMyS3BYUVN6N01a?=
 =?utf-8?B?dHVmS1FKU0d6b2l6NHUyUEY3TEFNOUI1OXM1UWs1ZVplY0t0SmpzdVVGaGlS?=
 =?utf-8?B?Q1pHdE14bGI4VWFYd1RCbW1lZ0hwcUVQVXVYeHM4cTNnT2xMSmtkcDBXVmp3?=
 =?utf-8?B?L0VhOXo2T0pWV1FrSTZRc2RKSlZZbzBlVVZnb2w0d0N6Tm9KejdmS2RxSElu?=
 =?utf-8?B?QTN6VHdBaGJQS0VlYkd4VTVxUGRLUS92eEhiOWtVZGdvbjM4TlNuaVRPcVg4?=
 =?utf-8?B?RWRKTGhTQUw1c0VIVlh0RXp4S2w4ZTBmYk1BTlZ5S3dqSnJkbVNUc01wVVd5?=
 =?utf-8?B?c3JPQmhLWnR4ZGFRdzlpeVhCL3ZmWFNZclBURUp1dGRDcE9VdEx3aUNoSXR3?=
 =?utf-8?B?RFg5eVFUWnlXZHlsREJpc3JJVDhmUmRBZzJoay9iOWgxWHFFbVhleDB5enhO?=
 =?utf-8?B?dDR2b0VnTlNmTjFoMDFSMFFKQlNtTW45S0hDZmZwWGFQUUVXcmdzdHcwaGdI?=
 =?utf-8?B?ek5VeEVTbzUwVDBtOXpZSUR6NVhJM1FORElUbWtkd3ZaQm1KWjdhVUduTWhs?=
 =?utf-8?B?Vis1c0lYSmVobGRvdHVzcHQ3VHBKMWRkSDc3eU9vUEhpeS9WUmFlNDVoa2pQ?=
 =?utf-8?B?TDUyMFcyUkoxVHVWTTA5ODV6cTJaNjQ0WGx5bEo0YXRQWnhFM3JPdmQ0RXFQ?=
 =?utf-8?B?bnBWdmlRRGVIYjR4V0VLT2FpREVHb2s5VmRRNTRPanRNMmtFcGhuV0NNOFEw?=
 =?utf-8?B?MzYrZkFoUlRvOVlDbWp2c2Z5Um4xcHFhTWRuUTY0bjdDM3ZNVWx4ZDR6VUlN?=
 =?utf-8?B?WHFMUVo5d3o3N2FmT0FYY0dCVWhPSWNsMGZaZTNoam9BUFF5RmdmOFZzcUJG?=
 =?utf-8?B?bURZSk82dzNBU1NoY3RSdjJBd3BNbTc1NUhWVmg5a012VUxQNmx1YXJWakxs?=
 =?utf-8?B?VE1IN1RESU1BZDNwSjREaWJLYjNFeS9EbitDcmJOTzQzS2VqUHhCU2RTL29R?=
 =?utf-8?B?Nzk0WGFvVUJRM1FsQ3FlMHVqcEh0emdmaitQNWJYNHVyRHVCeVZnbGlzTUk5?=
 =?utf-8?B?SG1LVDdERTEwblViTERkZHEydkkwQU1tK2VHdGhzSkY3Wk9zZ2ExNmJNWUpn?=
 =?utf-8?B?OTVldTJHNXMzS3NPNFNnMzRwZ2tBWStGM2JvWHR4c3VqdUVhUXRSNWRRTTND?=
 =?utf-8?B?ZFl4dFhlMGRMbWNqZEdFQ28ycjlpOXZBb1F5bVZic25OTDkrRXRLV2tXVnlE?=
 =?utf-8?B?YndLbThzTjI0b3hIZkdhUE9zcXUrdXA2QUZ1aCtNMDZBU2tXcmhYYWtOUjlQ?=
 =?utf-8?B?WEhMR2xQQjlUT2QvMy9QdkNDVFZPdFVveUYrK1ZFdkYzSkFTODRSZThZU1FE?=
 =?utf-8?B?OE5KZlFhSGUrK1ZyM3U1eGtwMnZrRExnRTU1QzkwRVowYkUrOUU1S3Y0OHBD?=
 =?utf-8?B?NTJaWldUSGRmREt4M01FT0w1TzZRSGErQ1hwUGE3S1B4SDBCWDdVS2tYZllR?=
 =?utf-8?B?NFVKZUxKL2dwYWZYZVRBSW04dlpLeFZJYzM2bE9QMEREMXpJaExwdFlwYVM1?=
 =?utf-8?B?bWRobXV1OWxrQW8zR1M4THBPK1pHem9sa3NUYyt1QmgwWlI1OVdTTFdJR1h0?=
 =?utf-8?B?OW0rUVpKcmxITFNJL1NBbC94SS9WY1RJZmozVXpTNmFmTkdXYU5JdHp0c2g4?=
 =?utf-8?B?Y2ZGYjJaYkVuZUp2NjI2Y3BLVTR2dW5URHdEZDYvb0lHSzhTMHZwMTBLUnhQ?=
 =?utf-8?B?Z3pnR01YUjFyK2lhQkpON2ZtZUthNVF0QW9aRWR0ODJOUjdsbm9JanNudy9W?=
 =?utf-8?B?amVNV1QwN1c2MVgvQXJUazc0SXJSbnFNcGVDS3drMU95UGROek9mVWVkRUZv?=
 =?utf-8?B?bXc5UFpTYktjVXN0T2MxZStHVHRrTG9hOWhoL3R0NEllSllmN3ljNG9oMzE1?=
 =?utf-8?B?VXRCMzdKeGtRSDJNZ2pLakVkR3ZaTVFwcmRRWUVzUmpKWlh5Q3ZMbzdHeVBy?=
 =?utf-8?B?VWtjeEJUVGpUaHp1N3FSRGxMbXBQUWc3ZVorMjFqdDdOUEpCbVIrM2owTCtq?=
 =?utf-8?Q?dv5qePzxdrRGVAasIA67gRtsK?=
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-OriginatorOrg: marvell.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: DM4PR18MB4368.namprd18.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 17b3b95d-9597-425c-36fe-08db10c3d2bb
X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Feb 2023 08:49:04.2584 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: lIZt9cn4iywzH86Mqe1QLIwORTI1u/xFAqOjywF88+MZCz423lFxLzSaN1rrfOw9mHkqMUV3EO9imL4EBDFHZg==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR18MB4684
X-Proofpoint-ORIG-GUID: B49W0kiVlHvIHs8brfEDPBgdB3UeM88n
X-Proofpoint-GUID: B49W0kiVlHvIHs8brfEDPBgdB3UeM88n
X-Proofpoint-Virus-Version: vendor=baseguard
 engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22
 definitions=2023-02-17_04,2023-02-16_01,2023-02-09_01
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IEtvbnN0YW50aW4gQW5hbnll
diA8a29uc3RhbnRpbi52LmFuYW55ZXZAeWFuZGV4LnJ1Pg0KPlNlbnQ6IEZyaWRheSwgRmVicnVh
cnkgMTcsIDIwMjMgMTI6NTEgQU0NCj5UbzogZGV2QGRwZGsub3JnDQo+U3ViamVjdDogW0VYVF0g
UmU6IFtQQVRDSCB2MTEgMS80XSBsaWI6IGFkZCBnZW5lcmljIHN1cHBvcnQgZm9yIHJlYWRpbmcg
UE1VIGV2ZW50cw0KPg0KPkV4dGVybmFsIEVtYWlsDQo+DQo+LS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPjE2LzAy
LzIwMjMgMTc6NTQsIFRvbWFzeiBEdXN6eW5za2kg0L/QuNGI0LXRgjoNCj4+IEFkZCBzdXBwb3J0
IGZvciBwcm9ncmFtbWluZyBQTVUgY291bnRlcnMgYW5kIHJlYWRpbmcgdGhlaXIgdmFsdWVzIGlu
DQo+PiBydW50aW1lIGJ5cGFzc2luZyBrZXJuZWwgY29tcGxldGVseS4NCj4+DQo+PiBUaGlzIGlz
IGVzcGVjaWFsbHkgdXNlZnVsIGluIGNhc2VzIHdoZXJlIENQVSBjb3JlcyBhcmUgaXNvbGF0ZWQg
aS5lDQo+PiBydW4gZGVkaWNhdGVkIHRhc2tzLiBJbiBzdWNoIGNhc2VzIG9uZSBjYW5ub3QgdXNl
IHN0YW5kYXJkIHBlcmYNCj4+IHV0aWxpdHkgd2l0aG91dCBzYWNyaWZpY2luZyBsYXRlbmN5IGFu
ZCBwZXJmb3JtYW5jZS4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBUb21hc3ogRHVzenluc2tpIDx0
ZHVzenluc2tpQG1hcnZlbGwuY29tPg0KPj4gQWNrZWQtYnk6IE1vcnRlbiBCcsO4cnVwIDxtYkBz
bWFydHNoYXJlc3lzdGVtcy5jb20+DQo+PiAtLS0NCj4+ICAgTUFJTlRBSU5FUlMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDUgKw0KPj4gICBhcHAvdGVzdC9tZXNvbi5idWlsZCAgICAg
ICAgICAgICAgICAgICB8ICAgMiArDQo+PiAgIGFwcC90ZXN0L3Rlc3RfcG11LmMgICAgICAgICAg
ICAgICAgICAgIHwgIDYyICsrKysNCj4+ICAgZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZCAgICAg
ICAgICAgICAgfCAgIDMgKy0NCj4+ICAgZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluICAgICAgICAg
ICAgICAgfCAgIDEgKw0KPj4gICBkb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAucnN0
ICB8ICAxMiArDQo+PiAgIGRvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjNfMDMucnN0IHwg
ICA3ICsNCj4+ICAgbGliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg
Kw0KPj4gICBsaWIvcG11L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICB8ICAxMyArDQo+
PiAgIGxpYi9wbXUvcG11X3ByaXZhdGUuaCAgICAgICAgICAgICAgICAgIHwgIDMyICsrDQo+PiAg
IGxpYi9wbXUvcnRlX3BtdS5jICAgICAgICAgICAgICAgICAgICAgIHwgNDYwICsrKysrKysrKysr
KysrKysrKysrKysrKysNCj4+ICAgbGliL3BtdS9ydGVfcG11LmggICAgICAgICAgICAgICAgICAg
ICAgfCAyMTIgKysrKysrKysrKysrDQo+PiAgIGxpYi9wbXUvdmVyc2lvbi5tYXAgICAgICAgICAg
ICAgICAgICAgIHwgIDE1ICsNCj4+ICAgMTMgZmlsZXMgY2hhbmdlZCwgODI0IGluc2VydGlvbnMo
KyksIDEgZGVsZXRpb24oLSkNCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGFwcC90ZXN0L3Rlc3Rf
cG11LmMNCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9wbXUvbWVzb24uYnVpbGQNCj4+ICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9wbXUvcG11X3ByaXZhdGUuaA0KPj4gICBjcmVhdGUgbW9k
ZSAxMDA2NDQgbGliL3BtdS9ydGVfcG11LmMNCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9w
bXUvcnRlX3BtdS5oDQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvcG11L3ZlcnNpb24ubWFw
DQo+Pg0KPj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMgaW5kZXggMzQ5
NTk0NmQwZi4uZDM3ZjI0MjEyMA0KPj4gMTAwNjQ0DQo+PiAtLS0gYS9NQUlOVEFJTkVSUw0KPj4g
KysrIGIvTUFJTlRBSU5FUlMNCj4+IEBAIC0xNjk3LDYgKzE2OTcsMTEgQEAgTTogTml0aGluIERh
YmlscHVyYW0gPG5kYWJpbHB1cmFtQG1hcnZlbGwuY29tPg0KPj4gICBNOiBQYXZhbiBOaWtoaWxl
c2ggPHBiaGFnYXZhdHVsYUBtYXJ2ZWxsLmNvbT4NCj4+ICAgRjogbGliL25vZGUvDQo+Pg0KPj4g
K1BNVSAtIEVYUEVSSU1FTlRBTA0KPj4gK006IFRvbWFzeiBEdXN6eW5za2kgPHRkdXN6eW5za2lA
bWFydmVsbC5jb20+DQo+PiArRjogbGliL3BtdS8NCj4+ICtGOiBhcHAvdGVzdC90ZXN0X3BtdSoN
Cj4+ICsNCj4+DQo+PiAgIFRlc3QgQXBwbGljYXRpb25zDQo+PiAgIC0tLS0tLS0tLS0tLS0tLS0t
DQo+PiBkaWZmIC0tZ2l0IGEvYXBwL3Rlc3QvbWVzb24uYnVpbGQgYi9hcHAvdGVzdC9tZXNvbi5i
dWlsZCBpbmRleA0KPj4gZjM0ZDE5ZTNjMy4uNmI2MWI3ZmMzMiAxMDA2NDQNCj4+IC0tLSBhL2Fw
cC90ZXN0L21lc29uLmJ1aWxkDQo+PiArKysgYi9hcHAvdGVzdC9tZXNvbi5idWlsZA0KPj4gQEAg
LTExMSw2ICsxMTEsNyBAQCB0ZXN0X3NvdXJjZXMgPSBmaWxlcygNCj4+ICAgICAgICAgICAndGVz
dF9yZWNpcHJvY2FsX2RpdmlzaW9uX3BlcmYuYycsDQo+PiAgICAgICAgICAgJ3Rlc3RfcmVkLmMn
LA0KPj4gICAgICAgICAgICd0ZXN0X3BpZS5jJywNCj4+ICsgICAgICAgICd0ZXN0X3BtdS5jJywN
Cj4+ICAgICAgICAgICAndGVzdF9yZW9yZGVyLmMnLA0KPj4gICAgICAgICAgICd0ZXN0X3JpYi5j
JywNCj4+ICAgICAgICAgICAndGVzdF9yaWI2LmMnLA0KPj4gQEAgLTIzOSw2ICsyNDAsNyBAQCBm
YXN0X3Rlc3RzID0gWw0KPj4gICAgICAgICAgIFsna25pX2F1dG90ZXN0JywgZmFsc2UsIHRydWVd
LA0KPj4gICAgICAgICAgIFsna3ZhcmdzX2F1dG90ZXN0JywgdHJ1ZSwgdHJ1ZV0sDQo+PiAgICAg
ICAgICAgWydtZW1iZXJfYXV0b3Rlc3QnLCB0cnVlLCB0cnVlXSwNCj4+ICsgICAgICAgIFsncG11
X2F1dG90ZXN0JywgdHJ1ZSwgdHJ1ZV0sDQo+PiAgICAgICAgICAgWydwb3dlcl9jcHVmcmVxX2F1
dG90ZXN0JywgZmFsc2UsIHRydWVdLA0KPj4gICAgICAgICAgIFsncG93ZXJfYXV0b3Rlc3QnLCB0
cnVlLCB0cnVlXSwNCj4+ICAgICAgICAgICBbJ3Bvd2VyX2t2bV92bV9hdXRvdGVzdCcsIGZhbHNl
LCB0cnVlXSwgZGlmZiAtLWdpdA0KPj4gYS9hcHAvdGVzdC90ZXN0X3BtdS5jIGIvYXBwL3Rlc3Qv
dGVzdF9wbXUuYyBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPj4gMDAwMDAwMDAwMC4uYzI1
NzYzOGU4Yg0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvYXBwL3Rlc3QvdGVzdF9wbXUuYw0K
Pj4gQEAgLTAsMCArMSw2MiBAQA0KPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt
My1DbGF1c2UNCj4+ICsgKiBDb3B5cmlnaHQoQykgMjAyMyBNYXJ2ZWxsIEludGVybmF0aW9uYWwg
THRkLg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpbmNsdWRlICJ0ZXN0LmgiDQo+PiArDQo+PiArI2lm
bmRlZiBSVEVfRVhFQ19FTlZfTElOVVgNCj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+PiArdGVzdF9w
bXUodm9pZCkNCj4+ICt7DQo+PiArCXByaW50ZigicG11X2F1dG90ZXN0IG9ubHkgc3VwcG9ydGVk
IG9uIExpbnV4LCBza2lwcGluZyB0ZXN0XG4iKTsNCj4+ICsJcmV0dXJuIFRFU1RfU0tJUFBFRDsN
Cj4+ICt9DQo+PiArDQo+PiArI2Vsc2UNCj4+ICsNCj4+ICsjaW5jbHVkZSA8cnRlX3BtdS5oPg0K
Pj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICt0ZXN0X3BtdV9yZWFkKHZvaWQpDQo+PiArew0KPj4g
Kwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsNCj4+ICsJaW50IHRyaWVzID0gMTAsIGV2ZW50Ow0K
Pj4gKwl1aW50NjRfdCB2YWwgPSAwOw0KPj4gKw0KPj4gKwlpZiAobmFtZSA9PSBOVUxMKSB7DQo+
PiArCQlwcmludGYoIlBNVSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgYXJjaFxuIik7DQo+PiArCQly
ZXR1cm4gVEVTVF9TS0lQUEVEOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChydGVfcG11X2luaXQo
KSA8IDApDQo+PiArCQlyZXR1cm4gVEVTVF9TS0lQUEVEOw0KPj4gKw0KPj4gKwlldmVudCA9IHJ0
ZV9wbXVfYWRkX2V2ZW50KG5hbWUpOw0KPj4gKwl3aGlsZSAodHJpZXMtLSkNCj4+ICsJCXZhbCAr
PSBydGVfcG11X3JlYWQoZXZlbnQpOw0KPj4gKw0KPj4gKwlydGVfcG11X2ZpbmkoKTsNCj4+ICsN
Cj4+ICsJcmV0dXJuIHZhbCA/IFRFU1RfU1VDQ0VTUyA6IFRFU1RfRkFJTEVEOyB9DQo+PiArDQo+
PiArc3RhdGljIHN0cnVjdCB1bml0X3Rlc3Rfc3VpdGUgcG11X3Rlc3RzID0gew0KPj4gKwkuc3Vp
dGVfbmFtZSA9ICJwbXUgYXV0b3Rlc3QiLA0KPj4gKwkuc2V0dXAgPSBOVUxMLA0KPj4gKwkudGVh
cmRvd24gPSBOVUxMLA0KPj4gKwkudW5pdF90ZXN0X2Nhc2VzID0gew0KPj4gKwkJVEVTVF9DQVNF
KHRlc3RfcG11X3JlYWQpLA0KPj4gKwkJVEVTVF9DQVNFU19FTkQoKQ0KPj4gKwl9DQo+PiArfTsN
Cj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+PiArdGVzdF9wbXUodm9pZCkNCj4+ICt7DQo+PiArCXJl
dHVybiB1bml0X3Rlc3Rfc3VpdGVfcnVubmVyKCZwbXVfdGVzdHMpOw0KPj4gK30NCj4+ICsNCj4+
ICsjZW5kaWYgLyogUlRFX0VYRUNfRU5WX0xJTlVYICovDQo+PiArDQo+PiArUkVHSVNURVJfVEVT
VF9DT01NQU5EKHBtdV9hdXRvdGVzdCwgdGVzdF9wbXUpOw0KPj4gZGlmZiAtLWdpdCBhL2RvYy9h
cGkvZG94eS1hcGktaW5kZXgubWQgYi9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kDQo+PiBpbmRl
eCAyZGVlYzdlYTE5Li5hOGUwNGExOTVkIDEwMDY0NA0KPj4gLS0tIGEvZG9jL2FwaS9kb3h5LWFw
aS1pbmRleC5tZA0KPj4gKysrIGIvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZA0KPj4gQEAgLTIy
Myw3ICsyMjMsOCBAQCBUaGUgcHVibGljIEFQSSBoZWFkZXJzIGFyZSBncm91cGVkIGJ5IHRvcGlj
czoNCj4+ICAgICBbbG9nXShAcmVmIHJ0ZV9sb2cuaCksDQo+PiAgICAgW2Vycm5vXShAcmVmIHJ0
ZV9lcnJuby5oKSwNCj4+ICAgICBbdHJhY2VdKEByZWYgcnRlX3RyYWNlLmgpLA0KPj4gLSAgW3Ry
YWNlX3BvaW50XShAcmVmIHJ0ZV90cmFjZV9wb2ludC5oKQ0KPj4gKyAgW3RyYWNlX3BvaW50XShA
cmVmIHJ0ZV90cmFjZV9wb2ludC5oKSwgIFtwbXVdKEByZWYgcnRlX3BtdS5oKQ0KPj4NCj4+ICAg
LSAqKm1pc2MqKjoNCj4+ICAgICBbRUFMIGNvbmZpZ10oQHJlZiBydGVfZWFsLmgpLA0KPj4gZGlm
ZiAtLWdpdCBhL2RvYy9hcGkvZG94eS1hcGkuY29uZi5pbiBiL2RvYy9hcGkvZG94eS1hcGkuY29u
Zi5pbiBpbmRleA0KPj4gZTg1OTQyNjA5OS4uMzUwYjVhOGM5NCAxMDA2NDQNCj4+IC0tLSBhL2Rv
Yy9hcGkvZG94eS1hcGkuY29uZi5pbg0KPj4gKysrIGIvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmlu
DQo+PiBAQCAtNjMsNiArNjMsNyBAQCBJTlBVVCAgICAgICAgICAgICAgICAgICA9IEBUT1BESVJA
L2RvYy9hcGkvZG94eS1hcGktaW5kZXgubWQgXA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEBUT1BESVJAL2xpYi9wY2kgXA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBU
T1BESVJAL2xpYi9wZHVtcCBcDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFRPUERJ
UkAvbGliL3BpcGVsaW5lIFwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJA
L2xpYi9wbXUgXA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9w
b3J0IFwNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAVE9QRElSQC9saWIvcG93ZXIg
XA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9yYXdkZXYgXCBk
aWZmIC0tZ2l0DQo+PiBhL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2FwcC5yc3QNCj4+
IGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Byb2ZpbGVfYXBwLnJzdA0KPj4gaW5kZXggMTQyOTJk
NGMyNS4uODllMzhjZDMwMSAxMDA2NDQNCj4+IC0tLSBhL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS9w
cm9maWxlX2FwcC5yc3QNCj4+ICsrKyBiL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2Fw
cC5yc3QNCj4+IEBAIC03LDYgKzcsMTggQEAgUHJvZmlsZSBZb3VyIEFwcGxpY2F0aW9uDQo+PiAg
IFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgbWV0aG9kcyBvZiBwcm9maWxpbmcgRFBE
SyBhcHBsaWNhdGlvbnMgb24NCj4+ICAgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuDQo+Pg0KPj4g
K1BlcmZvcm1hbmNlIGNvdW50ZXIgYmFzZWQgcHJvZmlsaW5nDQo+PiArLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+ICsNCj4+ICtNYWpvcml0eSBvZiBhcmNoaXRlY3R1cmVz
IHN1cHBvcnQgc29tZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVuaXQgKFBNVSkuDQo+PiArU3Vj
aCB1bml0IHByb3ZpZGVzIHByb2dyYW1tYWJsZSBjb3VudGVycyB0aGF0IG1vbml0b3Igc3BlY2lm
aWMgZXZlbnRzLg0KPj4gKw0KPj4gK0RpZmZlcmVudCB0b29scyBnYXRoZXIgdGhhdCBpbmZvcm1h
dGlvbiwgbGlrZSBmb3IgZXhhbXBsZSBwZXJmLg0KPj4gK0hvd2V2ZXIsIGluIHNvbWUgc2NlbmFy
aW9zIHdoZW4gQ1BVIGNvcmVzIGFyZSBpc29sYXRlZCBhbmQgcnVuDQo+PiArZGVkaWNhdGVkIHRh
c2tzIGludGVycnVwdGluZyB0aG9zZSB0YXNrcyB3aXRoIHBlcmYgbWF5IGJlIHVuZGVzaXJhYmxl
Lg0KPj4gKw0KPj4gK0luIHN1Y2ggY2FzZXMsIGFuIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlIFBN
VSBsaWJyYXJ5IHRvIHJlYWQgc3VjaCBldmVudHMgdmlhDQo+YGBydGVfcG11X3JlYWQoKWBgLg0K
Pj4gKw0KPj4NCj4+ICAgUHJvZmlsaW5nIG9uIHg4Ng0KPj4gICAtLS0tLS0tLS0tLS0tLS0tDQo+
PiBkaWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yM18wMy5yc3QNCj4+
IGIvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yM18wMy5yc3QNCj4+IGluZGV4IGFiOTk4
YTUzNTcuLjIwNjIyZWZlNTggMTAwNjQ0DQo+PiAtLS0gYS9kb2MvZ3VpZGVzL3JlbF9ub3Rlcy9y
ZWxlYXNlXzIzXzAzLnJzdA0KPj4gKysrIGIvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8y
M18wMy5yc3QNCj4+IEBAIC0xNDcsNiArMTQ3LDEzIEBAIE5ldyBGZWF0dXJlcw0KPj4gICAgICog
QWRkZWQgc3VwcG9ydCB0byBjYXB0dXJlIHBhY2tldHMgYXQgZWFjaCBncmFwaCBub2RlIHdpdGgg
cGFja2V0IG1ldGFkYXRhIGFuZA0KPj4gICAgICAgbm9kZSBuYW1lLg0KPj4NCj4+ICsqICoqQWRk
ZWQgUE1VIGxpYnJhcnkuKioNCj4+ICsNCj4+ICsgIEFkZGVkIGEgbmV3IHBlcmZvcm1hbmNlIG1v
bml0b3JpbmcgdW5pdCAoUE1VKSBsaWJyYXJ5IHdoaWNoIGFsbG93cw0KPj4gKyBhcHBsaWNhdGlv
bnMgIHRvIHBlcmZvcm0gc2VsZiBtb25pdG9yaW5nIGFjdGl2aXRpZXMgd2l0aG91dCBkZXBlbmRp
bmcgb24gZXh0ZXJuYWwgdXRpbGl0aWVzDQo+bGlrZSBwZXJmLg0KPj4gKyAgQWZ0ZXIgaW50ZWdy
YXRpb24gd2l0aCA6ZG9jOmAuLi9wcm9nX2d1aWRlL3RyYWNlX2xpYmAgZGF0YSBnYXRoZXJlZA0K
Pj4gKyBmcm9tIGhhcmR3YXJlIGNvdW50ZXJzICBjYW4gYmUgc3RvcmVkIGluIENURiBmb3JtYXQg
Zm9yIGZ1cnRoZXIgYW5hbHlzaXMuDQo+PiArDQo+Pg0KPj4gICBSZW1vdmVkIEl0ZW1zDQo+PiAg
IC0tLS0tLS0tLS0tLS0NCj4+IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVz
b24uYnVpbGQgaW5kZXgNCj4+IDQ1MGMwNjFkMmIuLjhhNDJkNDVkMjAgMTAwNjQ0DQo+PiAtLS0g
YS9saWIvbWVzb24uYnVpbGQNCj4+ICsrKyBiL2xpYi9tZXNvbi5idWlsZA0KPj4gQEAgLTExLDYg
KzExLDcgQEANCj4+ICAgbGlicmFyaWVzID0gWw0KPj4gICAgICAgICAgICdrdmFyZ3MnLCAjIGVh
bCBkZXBlbmRzIG9uIGt2YXJncw0KPj4gICAgICAgICAgICd0ZWxlbWV0cnknLCAjIGJhc2ljIGlu
Zm8gcXVlcnlpbmcNCj4+ICsgICAgICAgICdwbXUnLA0KPj4gICAgICAgICAgICdlYWwnLCAjIGV2
ZXJ5dGhpbmcgZGVwZW5kcyBvbiBlYWwNCj4+ICAgICAgICAgICAncmluZycsDQo+PiAgICAgICAg
ICAgJ3JjdScsICMgcmN1IGRlcGVuZHMgb24gcmluZyBkaWZmIC0tZ2l0DQo+PiBhL2xpYi9wbXUv
bWVzb24uYnVpbGQgYi9saWIvcG11L21lc29uLmJ1aWxkIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGlu
ZGV4DQo+PiAwMDAwMDAwMDAwLi5hNDE2MGI0OTRlDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysg
Yi9saWIvcG11L21lc29uLmJ1aWxkDQo+PiBAQCAtMCwwICsxLDEzIEBADQo+PiArIyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICMgQ29weXJpZ2h0KEMpIDIwMjMgTWFydmVs
bA0KPj4gK0ludGVybmF0aW9uYWwgTHRkLg0KPj4gKw0KPj4gK2lmIG5vdCBpc19saW51eA0KPj4g
KyAgICBidWlsZCA9IGZhbHNlDQo+PiArICAgIHJlYXNvbiA9ICdvbmx5IHN1cHBvcnRlZCBvbiBM
aW51eCcNCj4+ICsgICAgc3ViZGlyX2RvbmUoKQ0KPj4gK2VuZGlmDQo+PiArDQo+PiAraW5jbHVk
ZXMgPSBbZ2xvYmFsX2luY10NCj4+ICsNCj4+ICtzb3VyY2VzID0gZmlsZXMoJ3J0ZV9wbXUuYycp
DQo+PiAraGVhZGVycyA9IGZpbGVzKCdydGVfcG11LmgnKQ0KPj4gZGlmZiAtLWdpdCBhL2xpYi9w
bXUvcG11X3ByaXZhdGUuaCBiL2xpYi9wbXUvcG11X3ByaXZhdGUuaCBuZXcgZmlsZQ0KPj4gbW9k
ZSAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMC4uYjlmOGMxZGRjOA0KPj4gLS0tIC9kZXYvbnVsbA0K
Pj4gKysrIGIvbGliL3BtdS9wbXVfcHJpdmF0ZS5oDQo+PiBAQCAtMCwwICsxLDMyIEBADQo+PiAr
LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPj4gKyAqIENvcHlyaWdo
dChjKSAyMDIzIE1hcnZlbGwNCj4+ICsgKi8NCj4+ICsNCj4+ICsjaWZuZGVmIF9QTVVfUFJJVkFU
RV9IXw0KPj4gKyNkZWZpbmUgX1BNVV9QUklWQVRFX0hfDQo+PiArDQo+PiArLyoqDQo+PiArICog
QXJjaGl0ZWN0dXJlIHNwZWNpZmljIFBNVSBpbml0IGNhbGxiYWNrLg0KPj4gKyAqDQo+PiArICog
QHJldHVybg0KPj4gKyAqICAgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90
aGVyd2lzZS4NCj4+ICsgKi8NCj4+ICtpbnQNCj4+ICtwbXVfYXJjaF9pbml0KHZvaWQpOw0KPj4g
Kw0KPj4gKy8qKg0KPj4gKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBQTVUgY2xlYW51cCBjYWxs
YmFjay4NCj4+ICsgKi8NCj4+ICt2b2lkDQo+PiArcG11X2FyY2hfZmluaSh2b2lkKTsNCj4+ICsN
Cj4+ICsvKioNCj4+ICsgKiBBcHBseSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgc2V0dGluZ3MgdG8g
Y29uZmlnIGJlZm9yZSBwYXNzaW5nIGl0IHRvIHN5c2NhbGwuDQo+PiArICoNCj4+ICsgKiBAcGFy
YW0gY29uZmlnDQo+PiArICogICBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgZXZlbnQgY29uZmlndXJh
dGlvbi4gQ29uc3VsdCBrZXJuZWwgc291cmNlcyBmb3IgYXZhaWxhYmxlIG9wdGlvbnMuDQo+PiAr
ICovDQo+PiArdm9pZA0KPj4gK3BtdV9hcmNoX2ZpeHVwX2NvbmZpZyh1aW50NjRfdCBjb25maWdb
M10pOw0KPj4gKw0KPj4gKyNlbmRpZiAvKiBfUE1VX1BSSVZBVEVfSF8gKi8NCj4+IGRpZmYgLS1n
aXQgYS9saWIvcG11L3J0ZV9wbXUuYyBiL2xpYi9wbXUvcnRlX3BtdS5jIG5ldyBmaWxlIG1vZGUN
Cj4+IDEwMDY0NCBpbmRleCAwMDAwMDAwMDAwLi45NTBmOTk5Y2I3DQo+PiAtLS0gL2Rldi9udWxs
DQo+PiArKysgYi9saWIvcG11L3J0ZV9wbXUuYw0KPj4gQEAgLTAsMCArMSw0NjAgQEANCj4+ICsv
KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+PiArICogQ29weXJpZ2h0
KEMpIDIwMjMgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4+ICsgKi8NCj4+ICsNCj4+ICsj
aW5jbHVkZSA8Y3R5cGUuaD4NCj4+ICsjaW5jbHVkZSA8ZGlyZW50Lmg+DQo+PiArI2luY2x1ZGUg
PGVycm5vLmg+DQo+PiArI2luY2x1ZGUgPHJlZ2V4Lmg+DQo+PiArI2luY2x1ZGUgPHN0ZGxpYi5o
Pg0KPj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+DQo+
PiArI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQo+PiArI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPg0KPj4g
KyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPg0KPj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4NCj4+ICsN
Cj4+ICsjaW5jbHVkZSA8cnRlX2F0b21pYy5oPg0KPj4gKyNpbmNsdWRlIDxydGVfcGVyX2xjb3Jl
Lmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9wbXUuaD4NCj4+ICsjaW5jbHVkZSA8cnRlX3NwaW5sb2Nr
Lmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV90YWlscS5oPg0KPj4gKw0KPj4gKyNpbmNsdWRlICJwbXVf
cHJpdmF0ZS5oIg0KPj4gKw0KPj4gKyNkZWZpbmUgRVZFTlRfU09VUkNFX0RFVklDRVNfUEFUSCAi
L3N5cy9idXMvZXZlbnRfc291cmNlL2RldmljZXMiDQo+DQo+DQo+SSBzdXBwb3NlIHRoYXQgcGFz
cyAoYXMgdGhlIHdob2xlIGltcGxlbWVudGF0aW9uKSBpcyBsaW51eCBzcGVjaWZpYz8NCj5JZiBz
bywgd291bGRuJ3QgaXQgbWFrZSBzZW5zZSB0byBoYXZlIGl0IHVuZGVyIGxpbnV4IHN1YmRpcj8N
Cj4NCg0KVGhlcmUgYXJlIG5vdCBhbnkgcGxhbnMgdG8gc3VwcG9ydCB0aGF0IGVsc2V3aGVyZSBj
dXJyZW50bHkgc28gZmxhdA0KZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBnb29kIGVub3VnaC4gDQoN
Cj4+ICsNCj4+ICsjZGVmaW5lIEdFTk1BU0tfVUxMKGgsIGwpICgofjBVTEwgLSAoMVVMTCA8PCAo
bCkpICsgMSkgJiAofjBVTEwgPj4NCj4+ICsoKDY0IC0gMSAtIChoKSkpKSkgI2RlZmluZSBGSUVM
RF9QUkVQKG0sIHYpICgoKHVpbnQ2NF90KSh2KSA8PA0KPj4gKyhfX2J1aWx0aW5fZmZzbGwobSkg
LSAxKSkgJiAobSkpDQo+PiArDQo+PiArUlRFX0RFRklORV9QRVJfTENPUkUoc3RydWN0IHJ0ZV9w
bXVfZXZlbnRfZ3JvdXAsIF9ldmVudF9ncm91cCk7DQo+PiArc3RydWN0IHJ0ZV9wbXUgcnRlX3Bt
dTsNCj4NCj5EbyB3ZSByZWFsbHkgbmVlZCBzdHJ1Y3QgZGVjbGFyYXRpb24gaGVyZT8NCj4NCg0K
V2hhdOKAmXMgdGhlIHByb2JsZW0gd2l0aCB0aGlzIHBsYWNlbWVudCBwcmVjaXNlbHk/DQoNCj4N
Cj4+ICsvKg0KPj4gKyAqIEZvbGxvd2luZyBfX3J0ZV93ZWFrIGZ1bmN0aW9ucyBwcm92aWRlIGRl
ZmF1bHQgbm8tb3AuDQo+PiArQXJjaGl0ZWN0dXJlcyBzaG91bGQgb3ZlcnJpZGUgdGhlbSBpZg0K
Pj4gKyAqIG5lY2Vzc2FyeS4NCj4+ICsgKi8NCj4+ICsNCj4+ICtpbnQNCj4+ICtfX3J0ZV93ZWFr
IHBtdV9hcmNoX2luaXQodm9pZCkNCj4+ICt7DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsN
Cj4+ICt2b2lkDQo+PiArX19ydGVfd2VhayBwbXVfYXJjaF9maW5pKHZvaWQpDQo+PiArew0KPj4g
K30NCj4+ICsNCj4+ICt2b2lkDQo+PiArX19ydGVfd2VhayBwbXVfYXJjaF9maXh1cF9jb25maWco
dWludDY0X3QgX19ydGVfdW51c2VkIGNvbmZpZ1szXSkgeyB9DQo+PiArDQo+PiArc3RhdGljIGlu
dA0KPj4gK2dldF90ZXJtX2Zvcm1hdChjb25zdCBjaGFyICpuYW1lLCBpbnQgKm51bSwgdWludDY0
X3QgKm1hc2spIHsNCj4+ICsJY2hhciBwYXRoW1BBVEhfTUFYXTsNCj4+ICsJY2hhciAqY29uZmln
ID0gTlVMTDsNCj4+ICsJaW50IGhpZ2gsIGxvdywgcmV0Ow0KPj4gKwlGSUxFICpmcDsNCj4+ICsN
Cj4+ICsJKm51bSA9ICptYXNrID0gMDsNCj4+ICsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgp
LCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZm9ybWF0LyVzIiwgcnRlX3BtdS5uYW1l
LCBuYW1lKTsNCj4+ICsJZnAgPSBmb3BlbihwYXRoLCAiciIpOw0KPj4gKwlpZiAoZnAgPT0gTlVM
TCkNCj4+ICsJCXJldHVybiAtZXJybm87DQo+PiArDQo+PiArCWVycm5vID0gMDsNCj4+ICsJcmV0
ID0gZnNjYW5mKGZwLCAiJW1bXjpdOiVkLSVkIiwgJmNvbmZpZywgJmxvdywgJmhpZ2gpOw0KPj4g
KwlpZiAocmV0IDwgMikgew0KPj4gKwkJcmV0ID0gLUVOT0RBVEE7DQo+PiArCQlnb3RvIG91dDsN
Cj4+ICsJfQ0KPj4gKwlpZiAoZXJybm8pIHsNCj4+ICsJCXJldCA9IC1lcnJubzsNCj4+ICsJCWdv
dG8gb3V0Ow0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChyZXQgPT0gMikNCj4+ICsJCWhpZ2ggPSBs
b3c7DQo+PiArDQo+PiArCSptYXNrID0gR0VOTUFTS19VTEwoaGlnaCwgbG93KTsNCj4+ICsJLyog
TGFzdCBkaWdpdCBzaG91bGQgYmUgWzAxMl0uIElmIGxhc3QgZGlnaXQgaXMgbWlzc2luZyAwIGlz
IGltcGxpZWQuICovDQo+PiArCSpudW0gPSBjb25maWdbc3RybGVuKGNvbmZpZykgLSAxXTsNCj4+
ICsJKm51bSA9IGlzZGlnaXQoKm51bSkgPyAqbnVtIC0gJzAnIDogMDsNCj4+ICsNCj4+ICsJcmV0
ID0gMDsNCj4+ICtvdXQ6DQo+PiArCWZyZWUoY29uZmlnKTsNCj4+ICsJZmNsb3NlKGZwKTsNCj4+
ICsNCj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK3Bh
cnNlX2V2ZW50KGNoYXIgKmJ1ZiwgdWludDY0X3QgY29uZmlnWzNdKSB7DQo+PiArCWNoYXIgKnRv
a2VuLCAqdGVybTsNCj4+ICsJaW50IG51bSwgcmV0LCB2YWw7DQo+PiArCXVpbnQ2NF90IG1hc2s7
DQo+PiArDQo+PiArCWNvbmZpZ1swXSA9IGNvbmZpZ1sxXSA9IGNvbmZpZ1syXSA9IDA7DQo+PiAr
DQo+PiArCXRva2VuID0gc3RydG9rKGJ1ZiwgIiwiKTsNCj4+ICsJd2hpbGUgKHRva2VuKSB7DQo+
PiArCQllcnJubyA9IDA7DQo+PiArCQkvKiA8dGVybT49PHZhbHVlPiAqLw0KPj4gKwkJcmV0ID0g
c3NjYW5mKHRva2VuLCAiJW1bXj1dPSVpIiwgJnRlcm0sICZ2YWwpOw0KPj4gKwkJaWYgKHJldCA8
IDEpDQo+PiArCQkJcmV0dXJuIC1FTk9EQVRBOw0KPj4gKwkJaWYgKGVycm5vKQ0KPj4gKwkJCXJl
dHVybiAtZXJybm87DQo+PiArCQlpZiAocmV0ID09IDEpDQo+PiArCQkJdmFsID0gMTsNCj4+ICsN
Cj4+ICsJCXJldCA9IGdldF90ZXJtX2Zvcm1hdCh0ZXJtLCAmbnVtLCAmbWFzayk7DQo+PiArCQlm
cmVlKHRlcm0pOw0KPj4gKwkJaWYgKHJldCkNCj4+ICsJCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4g
KwkJY29uZmlnW251bV0gfD0gRklFTERfUFJFUChtYXNrLCB2YWwpOw0KPj4gKwkJdG9rZW4gPSBz
dHJ0b2soTlVMTCwgIiwiKTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+
PiArDQo+PiArc3RhdGljIGludA0KPj4gK2dldF9ldmVudF9jb25maWcoY29uc3QgY2hhciAqbmFt
ZSwgdWludDY0X3QgY29uZmlnWzNdKSB7DQo+PiArCWNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZltC
VUZTSVpdOw0KPj4gKwlGSUxFICpmcDsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJc25wcmlu
dGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZXZl
bnRzLyVzIiwgcnRlX3BtdS5uYW1lLCBuYW1lKTsNCj4+ICsJZnAgPSBmb3BlbihwYXRoLCAiciIp
Ow0KPj4gKwlpZiAoZnAgPT0gTlVMTCkNCj4+ICsJCXJldHVybiAtZXJybm87DQo+PiArDQo+PiAr
CXJldCA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIGZwKTsNCj4+ICsJaWYgKHJldCA9PSAw
KSB7DQo+PiArCQlmY2xvc2UoZnApOw0KPj4gKw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiAr
CX0NCj4+ICsJZmNsb3NlKGZwKTsNCj4+ICsJYnVmW3JldF0gPSAnXDAnOw0KPj4gKw0KPj4gKwly
ZXR1cm4gcGFyc2VfZXZlbnQoYnVmLCBjb25maWcpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg
aW50DQo+PiArZG9fcGVyZl9ldmVudF9vcGVuKHVpbnQ2NF90IGNvbmZpZ1szXSwgaW50IGdyb3Vw
X2ZkKSB7DQo+PiArCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0ciA9IHsNCj4+ICsJCS5zaXpl
ID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIpLA0KPj4gKwkJLnR5cGUgPSBQRVJGX1RZ
UEVfUkFXLA0KPj4gKwkJLmV4Y2x1ZGVfa2VybmVsID0gMSwNCj4+ICsJCS5leGNsdWRlX2h2ID0g
MSwNCj4+ICsJCS5kaXNhYmxlZCA9IDEsDQo+PiArCX07DQo+PiArDQo+PiArCXBtdV9hcmNoX2Zp
eHVwX2NvbmZpZyhjb25maWcpOw0KPj4gKw0KPj4gKwlhdHRyLmNvbmZpZyA9IGNvbmZpZ1swXTsN
Cj4+ICsJYXR0ci5jb25maWcxID0gY29uZmlnWzFdOw0KPj4gKwlhdHRyLmNvbmZpZzIgPSBjb25m
aWdbMl07DQo+PiArDQo+PiArCXJldHVybiBzeXNjYWxsKFNZU19wZXJmX2V2ZW50X29wZW4sICZh
dHRyLCAwLCAtMSwgZ3JvdXBfZmQsIDApOyB9DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK29w
ZW5fZXZlbnRzKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCkgew0KPj4gKwlzdHJ1
Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+PiArCXVpbnQ2NF90IGNvbmZpZ1szXTsNCj4+ICsJ
aW50IG51bSA9IDAsIHJldDsNCj4+ICsNCj4+ICsJLyogZ3JvdXAgbGVhZGVyIGdldHMgY3JlYXRl
ZCBmaXJzdCwgd2l0aCBmZCA9IC0xICovDQo+PiArCWdyb3VwLT5mZHNbMF0gPSAtMTsNCj4+ICsN
Cj4+ICsJVEFJTFFfRk9SRUFDSChldmVudCwgJnJ0ZV9wbXUuZXZlbnRfbGlzdCwgbmV4dCkgew0K
Pj4gKwkJcmV0ID0gZ2V0X2V2ZW50X2NvbmZpZyhldmVudC0+bmFtZSwgY29uZmlnKTsNCj4+ICsJ
CWlmIChyZXQpDQo+PiArCQkJY29udGludWU7DQo+PiArDQo+PiArCQlyZXQgPSBkb19wZXJmX2V2
ZW50X29wZW4oY29uZmlnLCBncm91cC0+ZmRzWzBdKTsNCj4+ICsJCWlmIChyZXQgPT0gLTEpIHsN
Cj4+ICsJCQlyZXQgPSAtZXJybm87DQo+PiArCQkJZ290byBvdXQ7DQo+PiArCQl9DQo+PiArDQo+
PiArCQlncm91cC0+ZmRzW2V2ZW50LT5pbmRleF0gPSByZXQ7DQo+PiArCQludW0rKzsNCj4+ICsJ
fQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICtvdXQ6DQo+PiArCWZvciAoLS1udW07IG51bSA+
PSAwOyBudW0tLSkgew0KPj4gKwkJY2xvc2UoZ3JvdXAtPmZkc1tudW1dKTsNCj4+ICsJCWdyb3Vw
LT5mZHNbbnVtXSA9IC0xOw0KPj4gKwl9DQo+PiArDQo+PiArDQo+PiArCXJldHVybiByZXQ7DQo+
PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICttbWFwX2V2ZW50cyhzdHJ1Y3QgcnRlX3Bt
dV9ldmVudF9ncm91cCAqZ3JvdXApIHsNCj4+ICsJbG9uZyBwYWdlX3NpemUgPSBzeXNjb25mKF9T
Q19QQUdFX1NJWkUpOw0KPj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4+ICsJdm9pZCAqYWRkcjsNCj4+
ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IHJ0ZV9wbXUubnVtX2dyb3Vw
X2V2ZW50czsgaSsrKSB7DQo+PiArCQlhZGRyID0gbW1hcCgwLCBwYWdlX3NpemUsIFBST1RfUkVB
RCwgTUFQX1NIQVJFRCwgZ3JvdXAtPmZkc1tpXSwgMCk7DQo+PiArCQlpZiAoYWRkciA9PSBNQVBf
RkFJTEVEKSB7DQo+PiArCQkJcmV0ID0gLWVycm5vOw0KPj4gKwkJCWdvdG8gb3V0Ow0KPj4gKwkJ
fQ0KPj4gKw0KPj4gKwkJZ3JvdXAtPm1tYXBfcGFnZXNbaV0gPSBhZGRyOw0KPj4gKwkJaWYgKCFn
cm91cC0+bW1hcF9wYWdlc1tpXS0+Y2FwX3VzZXJfcmRwbWMpIHsNCj4+ICsJCQlyZXQgPSAtRVBF
Uk07DQo+PiArCQkJZ290byBvdXQ7DQo+PiArCQl9DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJu
IDA7DQo+PiArb3V0Og0KPj4gKwlmb3IgKDsgaTsgaS0tKSB7DQo+PiArCQltdW5tYXAoZ3JvdXAt
Pm1tYXBfcGFnZXNbaSAtIDFdLCBwYWdlX3NpemUpOw0KPj4gKwkJZ3JvdXAtPm1tYXBfcGFnZXNb
aSAtIDFdID0gTlVMTDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+
ICsNCj4+ICtzdGF0aWMgdm9pZA0KPj4gK2NsZWFudXBfZXZlbnRzKHN0cnVjdCBydGVfcG11X2V2
ZW50X2dyb3VwICpncm91cCkgew0KPj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4+ICsNCj4+ICsJaWYg
KGdyb3VwLT5mZHNbMF0gIT0gLTEpDQo+PiArCQlpb2N0bChncm91cC0+ZmRzWzBdLCBQRVJGX0VW
RU5UX0lPQ19ESVNBQkxFLCBQRVJGX0lPQ19GTEFHX0dST1VQKTsNCj4+ICsNCj4+ICsJZm9yIChp
ID0gMDsgaSA8IHJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50czsgaSsrKSB7DQo+PiArCQlpZiAoZ3Jv
dXAtPm1tYXBfcGFnZXNbaV0pIHsNCj4+ICsJCQltdW5tYXAoZ3JvdXAtPm1tYXBfcGFnZXNbaV0s
IHN5c2NvbmYoX1NDX1BBR0VfU0laRSkpOw0KPj4gKwkJCWdyb3VwLT5tbWFwX3BhZ2VzW2ldID0g
TlVMTDsNCj4+ICsJCX0NCj4+ICsNCj4+ICsJCWlmIChncm91cC0+ZmRzW2ldICE9IC0xKSB7DQo+
PiArCQkJY2xvc2UoZ3JvdXAtPmZkc1tpXSk7DQo+PiArCQkJZ3JvdXAtPmZkc1tpXSA9IC0xOw0K
Pj4gKwkJfQ0KPj4gKwl9DQo+PiArDQo+PiArCWdyb3VwLT5lbmFibGVkID0gZmFsc2U7DQo+PiAr
fQ0KPj4gKw0KPj4gK2ludA0KPj4gK19fcnRlX3BtdV9lbmFibGVfZ3JvdXAodm9pZCkNCj4+ICt7
DQo+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCA9ICZSVEVfUEVSX0xDT1JF
KF9ldmVudF9ncm91cCk7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCWlmIChydGVfcG11Lm51
bV9ncm91cF9ldmVudHMgPT0gMCkNCj4+ICsJCXJldHVybiAtRU5PREVWOw0KPj4gKw0KPj4gKwly
ZXQgPSBvcGVuX2V2ZW50cyhncm91cCk7DQo+PiArCWlmIChyZXQpDQo+PiArCQlnb3RvIG91dDsN
Cj4+ICsNCj4+ICsJcmV0ID0gbW1hcF9ldmVudHMoZ3JvdXApOw0KPj4gKwlpZiAocmV0KQ0KPj4g
KwkJZ290byBvdXQ7DQo+PiArDQo+PiArCWlmIChpb2N0bChncm91cC0+ZmRzWzBdLCBQRVJGX0VW
RU5UX0lPQ19SRVNFVCwgUEVSRl9JT0NfRkxBR19HUk9VUCkgPT0gLTEpIHsNCj4+ICsJCXJldCA9
IC1lcnJubzsNCj4+ICsJCWdvdG8gb3V0Ow0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChpb2N0bChn
cm91cC0+ZmRzWzBdLCBQRVJGX0VWRU5UX0lPQ19FTkFCTEUsIFBFUkZfSU9DX0ZMQUdfR1JPVVAp
ID09IC0xKSB7DQo+PiArCQlyZXQgPSAtZXJybm87DQo+PiArCQlnb3RvIG91dDsNCj4+ICsJfQ0K
Pj4gKw0KPj4gKwlydGVfc3BpbmxvY2tfbG9jaygmcnRlX3BtdS5sb2NrKTsNCj4+ICsJVEFJTFFf
SU5TRVJUX1RBSUwoJnJ0ZV9wbXUuZXZlbnRfZ3JvdXBfbGlzdCwgZ3JvdXAsIG5leHQpOw0KPj4g
KwlydGVfc3BpbmxvY2tfdW5sb2NrKCZydGVfcG11LmxvY2spOw0KPj4gKwlncm91cC0+ZW5hYmxl
ZCA9IHRydWU7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gKw0KPj4gK291dDoNCj4+ICsJY2xl
YW51cF9ldmVudHMoZ3JvdXApOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsN
Cj4+ICtzdGF0aWMgaW50DQo+PiArc2Nhbl9wbXVzKHZvaWQpDQo+PiArew0KPj4gKwljaGFyIHBh
dGhbUEFUSF9NQVhdOw0KPj4gKwlzdHJ1Y3QgZGlyZW50ICpkZW50Ow0KPj4gKwljb25zdCBjaGFy
ICpuYW1lOw0KPj4gKwlESVIgKmRpcnA7DQo+PiArDQo+PiArCWRpcnAgPSBvcGVuZGlyKEVWRU5U
X1NPVVJDRV9ERVZJQ0VTX1BBVEgpOw0KPj4gKwlpZiAoZGlycCA9PSBOVUxMKQ0KPj4gKwkJcmV0
dXJuIC1lcnJubzsNCj4+ICsNCj4+ICsJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXJwKSkpIHsN
Cj4+ICsJCW5hbWUgPSBkZW50LT5kX25hbWU7DQo+PiArCQlpZiAobmFtZVswXSA9PSAnLicpDQo+
PiArCQkJY29udGludWU7DQo+PiArDQo+PiArCQkvKiBzeXNmcyBlbnRyeSBzaG91bGQgZWl0aGVy
IGNvbnRhaW4gY3B1cyBvciBiZSBhIGNwdSAqLw0KPj4gKwkJaWYgKCFzdHJjbXAobmFtZSwgImNw
dSIpKQ0KPj4gKwkJCWJyZWFrOw0KPj4gKw0KPj4gKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBh
dGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvY3B1cyIsIG5hbWUpOw0KPj4gKwkJ
aWYgKGFjY2VzcyhwYXRoLCBGX09LKSA9PSAwKQ0KPj4gKwkJCWJyZWFrOw0KPj4gKwl9DQo+PiAr
DQo+PiArCWlmIChkZW50KSB7DQo+PiArCQlydGVfcG11Lm5hbWUgPSBzdHJkdXAobmFtZSk7DQo+
PiArCQlpZiAocnRlX3BtdS5uYW1lID09IE5VTEwpIHsNCj4+ICsJCQljbG9zZWRpcihkaXJwKTsN
Cj4+ICsNCj4+ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4g
KwljbG9zZWRpcihkaXJwKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHJ0ZV9wbXUubmFtZSA/IDAgOiAt
RU5PREVWOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IHJ0ZV9wbXVfZXZlbnQgKg0K
Pj4gK25ld19ldmVudChjb25zdCBjaGFyICpuYW1lKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJ0ZV9w
bXVfZXZlbnQgKmV2ZW50Ow0KPj4gKw0KPj4gKwlldmVudCA9IGNhbGxvYygxLCBzaXplb2YoKmV2
ZW50KSk7DQo+PiArCWlmIChldmVudCA9PSBOVUxMKQ0KPj4gKwkJZ290byBvdXQ7DQo+PiArDQo+
PiArCWV2ZW50LT5uYW1lID0gc3RyZHVwKG5hbWUpOw0KPj4gKwlpZiAoZXZlbnQtPm5hbWUgPT0g
TlVMTCkgew0KPj4gKwkJZnJlZShldmVudCk7DQo+PiArCQlldmVudCA9IE5VTEw7DQo+PiArCX0N
Cj4+ICsNCj4+ICtvdXQ6DQo+PiArCXJldHVybiBldmVudDsNCj4+ICt9DQo+PiArDQo+PiArc3Rh
dGljIHZvaWQNCj4+ICtmcmVlX2V2ZW50KHN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudCkgew0K
Pj4gKwlmcmVlKGV2ZW50LT5uYW1lKTsNCj4+ICsJZnJlZShldmVudCk7DQo+PiArfQ0KPj4gKw0K
Pj4gK2ludA0KPj4gK3J0ZV9wbXVfYWRkX2V2ZW50KGNvbnN0IGNoYXIgKm5hbWUpDQo+PiArew0K
Pj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+PiArCWNoYXIgcGF0aFtQQVRIX01B
WF07DQo+PiArDQo+PiArCWlmIChydGVfcG11Lm5hbWUgPT0gTlVMTCkNCj4+ICsJCXJldHVybiAt
RU5PREVWOw0KPj4gKw0KPj4gKwlpZiAocnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzICsgMSA+PSBN
QVhfTlVNX0dST1VQX0VWRU5UUykNCj4+ICsJCXJldHVybiAtRU5PU1BDOw0KPj4gKw0KPj4gKwlz
bnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEggIi8l
cy9ldmVudHMvJXMiLCBydGVfcG11Lm5hbWUsIG5hbWUpOw0KPj4gKwlpZiAoYWNjZXNzKHBhdGgs
IFJfT0spKQ0KPj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+PiArDQo+PiArCVRBSUxRX0ZPUkVBQ0go
ZXZlbnQsICZydGVfcG11LmV2ZW50X2xpc3QsIG5leHQpIHsNCj4+ICsJCWlmICghc3RyY21wKGV2
ZW50LT5uYW1lLCBuYW1lKSkNCj4+ICsJCQlyZXR1cm4gZXZlbnQtPmluZGV4Ow0KPj4gKwkJY29u
dGludWU7DQo+PiArCX0NCj4+ICsNCj4+ICsJZXZlbnQgPSBuZXdfZXZlbnQobmFtZSk7DQo+PiAr
CWlmIChldmVudCA9PSBOVUxMKQ0KPj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+PiArDQo+PiArCWV2
ZW50LT5pbmRleCA9IHJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50cysrOw0KPj4gKwlUQUlMUV9JTlNF
UlRfVEFJTCgmcnRlX3BtdS5ldmVudF9saXN0LCBldmVudCwgbmV4dCk7DQo+PiArDQo+PiArCXJl
dHVybiBldmVudC0+aW5kZXg7DQo+PiArfQ0KPj4gKw0KPj4gK2ludA0KPj4gK3J0ZV9wbXVfaW5p
dCh2b2lkKQ0KPj4gK3sNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJLyogQWxsb3cgY2FsbGlu
ZyBpbml0IGZyb20gbXVsdGlwbGUgY29udGV4dHMgd2l0aGluIGEgc2luZ2xlIHRocmVhZC4gVGhp
cyBzaW1wbGlmaWVzDQo+PiArCSAqIHJlc291cmNlIG1hbmFnZW1lbnQgYSBiaXQgZS5nIGluIGNh
c2UgZmFzdC1wYXRoIHRyYWNlcG9pbnQgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkDQo+PiArCSAq
IHZpYSBjb21tYW5kIGxpbmUgYnV0IGFwcGxpY2F0aW9uIGRvZXNuJ3QgY2FyZSBlbm91Z2ggYW5k
IHBlcmZvcm1zIGluaXQvZmluaSBhZ2Fpbi4NCj4+ICsJICovDQo+PiArCWlmIChydGVfcG11Lmlu
aXRpYWxpemVkICE9IDApIHsNCj4+ICsJCXJ0ZV9wbXUuaW5pdGlhbGl6ZWQrKzsNCj4+ICsJCXJl
dHVybiAwOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldCA9IHNjYW5fcG11cygpOw0KPj4gKwlpZiAo
cmV0KQ0KPj4gKwkJZ290byBvdXQ7DQo+PiArDQo+PiArCXJldCA9IHBtdV9hcmNoX2luaXQoKTsN
Cj4+ICsJaWYgKHJldCkNCj4+ICsJCWdvdG8gb3V0Ow0KPj4gKw0KPj4gKwlUQUlMUV9JTklUKCZy
dGVfcG11LmV2ZW50X2xpc3QpOw0KPj4gKwlUQUlMUV9JTklUKCZydGVfcG11LmV2ZW50X2dyb3Vw
X2xpc3QpOw0KPj4gKwlydGVfc3BpbmxvY2tfaW5pdCgmcnRlX3BtdS5sb2NrKTsNCj4+ICsJcnRl
X3BtdS5pbml0aWFsaXplZCA9IDE7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK291dDoNCj4+
ICsJZnJlZShydGVfcG11Lm5hbWUpOw0KPj4gKwlydGVfcG11Lm5hbWUgPSBOVUxMOw0KPj4gKw0K
Pj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICt2b2lkDQo+PiArcnRlX3BtdV9maW5p
KHZvaWQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXAsICp0
bXBfZ3JvdXA7DQo+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudCwgKnRtcF9ldmVudDsN
Cj4+ICsNCj4+ICsJLyogY2xlYW51cCBvbmNlIGluaXQgY291bnQgZHJvcHMgdG8gemVybyAqLw0K
Pj4gKwlpZiAocnRlX3BtdS5pbml0aWFsaXplZCA9PSAwIHx8IC0tcnRlX3BtdS5pbml0aWFsaXpl
ZCAhPSAwKQ0KPj4gKwkJcmV0dXJuOw0KPj4gKw0KPj4gKwlSVEVfVEFJTFFfRk9SRUFDSF9TQUZF
KGV2ZW50LCAmcnRlX3BtdS5ldmVudF9saXN0LCBuZXh0LCB0bXBfZXZlbnQpIHsNCj4+ICsJCVRB
SUxRX1JFTU9WRSgmcnRlX3BtdS5ldmVudF9saXN0LCBldmVudCwgbmV4dCk7DQo+PiArCQlmcmVl
X2V2ZW50KGV2ZW50KTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlSVEVfVEFJTFFfRk9SRUFDSF9TQUZF
KGdyb3VwLCAmcnRlX3BtdS5ldmVudF9ncm91cF9saXN0LCBuZXh0LCB0bXBfZ3JvdXApIHsNCj4+
ICsJCVRBSUxRX1JFTU9WRSgmcnRlX3BtdS5ldmVudF9ncm91cF9saXN0LCBncm91cCwgbmV4dCk7
DQo+PiArCQljbGVhbnVwX2V2ZW50cyhncm91cCk7DQo+PiArCX0NCj4+ICsNCj4+ICsJcG11X2Fy
Y2hfZmluaSgpOw0KPj4gKwlmcmVlKHJ0ZV9wbXUubmFtZSk7DQo+PiArCXJ0ZV9wbXUubmFtZSA9
IE5VTEw7DQo+PiArCXJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50cyA9IDA7DQo+PiArfQ0KPj4gZGlm
ZiAtLWdpdCBhL2xpYi9wbXUvcnRlX3BtdS5oIGIvbGliL3BtdS9ydGVfcG11LmggbmV3IGZpbGUg
bW9kZQ0KPj4gMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLjZiNjY0YzMzMzYNCj4+IC0tLSAvZGV2
L251bGwNCj4+ICsrKyBiL2xpYi9wbXUvcnRlX3BtdS5oDQo+PiBAQCAtMCwwICsxLDIxMiBAQA0K
Pj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4+ICsgKiBDb3B5
cmlnaHQoYykgMjAyMyBNYXJ2ZWxsDQo+PiArICovDQo+PiArDQo+PiArI2lmbmRlZiBfUlRFX1BN
VV9IXw0KPj4gKyNkZWZpbmUgX1JURV9QTVVfSF8NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAZmls
ZQ0KPj4gKyAqDQo+PiArICogUE1VIGV2ZW50IHRyYWNpbmcgb3BlcmF0aW9ucw0KPj4gKyAqDQo+
PiArICogVGhpcyBmaWxlIGRlZmluZXMgZ2VuZXJpYyBBUEkgYW5kIHR5cGVzIG5lY2Vzc2FyeSB0
byBzZXR1cCBQTVUgYW5kDQo+PiArICogcmVhZCBzZWxlY3RlZCBjb3VudGVycyBpbiBydW50aW1l
Lg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPj4gK2V4dGVybiAiQyIg
ew0KPj4gKyNlbmRpZg0KPj4gKw0KPj4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+
PiArDQo+PiArI2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4+ICsjaW5jbHVkZSA8cnRlX2JyYW5j
aF9wcmVkaWN0aW9uLmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4+ICsjaW5jbHVk
ZSA8cnRlX2NvbXBhdC5oPg0KPj4gKyNpbmNsdWRlIDxydGVfc3BpbmxvY2suaD4NCj4+ICsNCj4+
ICsvKiogTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIGluIGEgZ3JvdXAgKi8gI2RlZmluZQ0KPj4g
K01BWF9OVU1fR1JPVVBfRVZFTlRTIDgNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBBIHN0cnVjdHVy
ZSBkZXNjcmliaW5nIGEgZ3JvdXAgb2YgZXZlbnRzLg0KPj4gKyAqLw0KPj4gK3N0cnVjdCBydGVf
cG11X2V2ZW50X2dyb3VwIHsNCj4+ICsJc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlICptbWFw
X3BhZ2VzW01BWF9OVU1fR1JPVVBfRVZFTlRTXTsgLyoqPCBhcnJheSBvZiB1c2VyIHBhZ2VzICov
DQo+PiArCWludCBmZHNbTUFYX05VTV9HUk9VUF9FVkVOVFNdOyAvKio8IGFycmF5IG9mIGV2ZW50
IGRlc2NyaXB0b3JzICovDQo+PiArCWJvb2wgZW5hYmxlZDsgLyoqPCB0cnVlIGlmIGdyb3VwIHdh
cyBlbmFibGVkIG9uIHBhcnRpY3VsYXIgbGNvcmUgKi8NCj4+ICsJVEFJTFFfRU5UUlkocnRlX3Bt
dV9ldmVudF9ncm91cCkgbmV4dDsgLyoqPCBsaXN0IGVudHJ5ICovIH0NCj4+ICtfX3J0ZV9jYWNo
ZV9hbGlnbmVkOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcg
YW4gZXZlbnQuDQo+PiArICovDQo+PiArc3RydWN0IHJ0ZV9wbXVfZXZlbnQgew0KPj4gKwljaGFy
ICpuYW1lOyAvKio8IG5hbWUgb2YgYW4gZXZlbnQgKi8NCj4+ICsJdW5zaWduZWQgaW50IGluZGV4
OyAvKio8IGV2ZW50IGluZGV4IGludG8gZmRzL21tYXBfcGFnZXMgKi8NCj4+ICsJVEFJTFFfRU5U
UlkocnRlX3BtdV9ldmVudCkgbmV4dDsgLyoqPCBsaXN0IGVudHJ5ICovIH07DQo+PiArDQo+PiAr
LyoqDQo+PiArICogQSBQTVUgc3RhdGUgY29udGFpbmVyLg0KPj4gKyAqLw0KPj4gK3N0cnVjdCBy
dGVfcG11IHsNCj4+ICsJY2hhciAqbmFtZTsgLyoqPCBuYW1lIG9mIGNvcmUgUE1VIGxpc3RlZCB1
bmRlciAvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcyAqLw0KPj4gKwlydGVfc3BpbmxvY2tf
dCBsb2NrOyAvKio8IHNlcmlhbGl6ZSBhY2Nlc3MgdG8gZXZlbnQgZ3JvdXAgbGlzdCAqLw0KPj4g
KwlUQUlMUV9IRUFEKCwgcnRlX3BtdV9ldmVudF9ncm91cCkgZXZlbnRfZ3JvdXBfbGlzdDsgLyoq
PCBsaXN0IG9mIGV2ZW50IGdyb3VwcyAqLw0KPj4gKwl1bnNpZ25lZCBpbnQgbnVtX2dyb3VwX2V2
ZW50czsgLyoqPCBudW1iZXIgb2YgZXZlbnRzIGluIGEgZ3JvdXAgKi8NCj4+ICsJVEFJTFFfSEVB
RCgsIHJ0ZV9wbXVfZXZlbnQpIGV2ZW50X2xpc3Q7IC8qKjwgbGlzdCBvZiBtYXRjaGluZyBldmVu
dHMgKi8NCj4+ICsJdW5zaWduZWQgaW50IGluaXRpYWxpemVkOyAvKio8IGluaXRpYWxpemF0aW9u
IGNvdW50ZXIgKi8gfTsNCj4+ICsNCj4+ICsvKiogbGNvcmUgZXZlbnQgZ3JvdXAgKi8NCj4+ICtS
VEVfREVDTEFSRV9QRVJfTENPUkUoc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAsIF9ldmVudF9n
cm91cCk7DQo+PiArDQo+PiArLyoqIFBNVSBzdGF0ZSBjb250YWluZXIgKi8NCj4+ICtleHRlcm4g
c3RydWN0IHJ0ZV9wbXUgcnRlX3BtdTsNCj4+ICsNCj4+ICsvKiogRWFjaCBhcmNoaXRlY3R1cmUg
c3VwcG9ydGluZyBQTVUgbmVlZHMgdG8gcHJvdmlkZSBpdHMgb3duIHZlcnNpb24NCj4+ICsqLyAj
aWZuZGVmIHJ0ZV9wbXVfcG1jX3JlYWQgI2RlZmluZSBydGVfcG11X3BtY19yZWFkKGluZGV4KSAo
eyAwOyB9KQ0KPj4gKyNlbmRpZg0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEB3YXJuaW5nDQo+PiAr
ICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90
aWNlDQo+PiArICoNCj4+ICsgKiBSZWFkIFBNVSBjb3VudGVyLg0KPj4gKyAqDQo+PiArICogQHdh
cm5pbmcgVGhpcyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJlY3RseS4NCj4+ICsgKg0KPj4gKyAq
IEBwYXJhbSBwYw0KPj4gKyAqICAgUG9pbnRlciB0byB0aGUgbW1hcHBlZCB1c2VyIHBhZ2UuDQo+
PiArICogQHJldHVybg0KPj4gKyAqICAgQ291bnRlciB2YWx1ZSByZWFkIGZyb20gaGFyZHdhcmUu
DQo+PiArICovDQo+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDY0X3QNCj4+ICtf
X3J0ZV9wbXVfcmVhZF91c2VycGFnZShzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKnBjKSB7
DQo+PiArCXVpbnQ2NF90IHdpZHRoLCBvZmZzZXQ7DQo+PiArCXVpbnQzMl90IHNlcSwgaW5kZXg7
DQo+PiArCWludDY0X3QgcG1jOw0KPj4gKw0KPj4gKwlmb3IgKDs7KSB7DQo+PiArCQlzZXEgPSBw
Yy0+bG9jazsNCj4+ICsJCXJ0ZV9jb21waWxlcl9iYXJyaWVyKCk7DQo+DQo+QXJlIHlvdSBzdXJl
IHRoYXQgY29tcGlsZXJfYmFycmllcigpIGlzIGVub3VnaCBoZXJlPw0KPk9uIHNvbWUgYXJjaHMg
Q1BVIGl0c2VsZiBoYXMgZnJlZWRvbSB0byByZS1vcmRlciByZWFkcy4NCj5PciBJIGFtIG1pc3Np
bmcgc29tZXRoaW5nIG9idmlvdXMgaGVyZT8NCj4NCg0KSXQncyBhIG1hdHRlciBvZiBub3Qga2Vl
cGluZyBvbGQgc3R1ZmYgY2FjaGVkIGluIHJlZ2lzdGVycyANCmFuZCBtYWtpbmcgc3VyZSB0aGF0
IHdlIGhhdmUgdHdvIHJlYWRzIG9mIGxvY2suIENQVSByZW9yZGVyaW5nDQp3b24ndCBkbyBhbnkg
aGFybSBoZXJlLiANCg0KPj4gKwkJaW5kZXggPSBwYy0+aW5kZXg7DQo+PiArCQlvZmZzZXQgPSBw
Yy0+b2Zmc2V0Ow0KPj4gKwkJd2lkdGggPSBwYy0+cG1jX3dpZHRoOw0KPj4gKw0KPj4gKwkJLyog
aW5kZXggc2V0IHRvIDAgbWVhbnMgdGhhdCBwYXJ0aWN1bGFyIGNvdW50ZXIgY2Fubm90IGJlIHVz
ZWQgKi8NCj4+ICsJCWlmIChsaWtlbHkocGMtPmNhcF91c2VyX3JkcG1jICYmIGluZGV4KSkgew0K
Pj4gKwkJCXBtYyA9IHJ0ZV9wbXVfcG1jX3JlYWQoaW5kZXggLSAxKTsNCj4+ICsJCQlwbWMgPDw9
IDY0IC0gd2lkdGg7DQo+PiArCQkJcG1jID4+PSA2NCAtIHdpZHRoOw0KPj4gKwkJCW9mZnNldCAr
PSBwbWM7DQo+PiArCQl9DQo+PiArDQo+PiArCQlydGVfY29tcGlsZXJfYmFycmllcigpOw0KPj4g
Kw0KPj4gKwkJaWYgKGxpa2VseShwYy0+bG9jayA9PSBzZXEpKQ0KPj4gKwkJCXJldHVybiBvZmZz
ZXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gKy8qKg0K
Pj4gKyAqIEB3YXJuaW5nDQo+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hh
bmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+PiArICoNCj4+ICsgKiBFbmFibGUgZ3JvdXAgb2Yg
ZXZlbnRzIG9uIHRoZSBjYWxsaW5nIGxjb3JlLg0KPj4gKyAqDQo+PiArICogQHdhcm5pbmcgVGhp
cyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJlY3RseS4NCj4+ICsgKg0KPj4gKyAqIEByZXR1cm4N
Cj4+ICsgKiAgIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2Uu
DQo+PiArICovDQo+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiAraW50DQo+PiArX19ydGVfcG11
X2VuYWJsZV9ncm91cCh2b2lkKTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAd2FybmluZw0KPj4g
KyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5v
dGljZQ0KPj4gKyAqDQo+PiArICogSW5pdGlhbGl6ZSBQTVUgbGlicmFyeS4NCj4+ICsgKg0KPj4g
KyAqIEB3YXJuaW5nIFRoaXMgc2hvdWxkIGJlIG5vdCBjYWxsZWQgZGlyZWN0bHkuDQo+PiArICoN
Cj4+ICsgKiBAcmV0dXJuDQo+PiArICogICAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgbmVnYXRpdmUg
dmFsdWUgb3RoZXJ3aXNlLg0KPj4gKyAqLw0KPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPj4gK2lu
dA0KPj4gK3J0ZV9wbXVfaW5pdCh2b2lkKTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAd2Fybmlu
Zw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHBy
aW9yIG5vdGljZQ0KPj4gKyAqDQo+PiArICogRmluYWxpemUgUE1VIGxpYnJhcnkuIFRoaXMgc2hv
dWxkIGJlIGNhbGxlZCBhZnRlciBQTVUgY291bnRlcnMgYXJlIG5vIGxvbmdlciBiZWluZyByZWFk
Lg0KPj4gKyAqLw0KPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPj4gK3ZvaWQNCj4+ICtydGVfcG11
X2Zpbmkodm9pZCk7DQo+PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBAYiBF
WFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4+
ICsgKg0KPj4gKyAqIEFkZCBldmVudCB0byB0aGUgZ3JvdXAgb2YgZW5hYmxlZCBldmVudHMuDQo+
PiArICoNCj4+ICsgKiBAcGFyYW0gbmFtZQ0KPj4gKyAqICAgTmFtZSBvZiBhbiBldmVudCBsaXN0
ZWQgdW5kZXIgL3N5cy9idXMvZXZlbnRfc291cmNlL2RldmljZXMvcG11L2V2ZW50cy4NCj4+ICsg
KiBAcmV0dXJuDQo+PiArICogICBFdmVudCBpbmRleCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0
aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4+ICsgKi8NCj4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+
ICtpbnQNCj4+ICtydGVfcG11X2FkZF9ldmVudChjb25zdCBjaGFyICpuYW1lKTsNCj4+ICsNCj4+
ICsvKioNCj4+ICsgKiBAd2FybmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkg
bWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPj4gKyAqDQo+PiArICogUmVhZCBoYXJk
d2FyZSBjb3VudGVyIGNvbmZpZ3VyZWQgdG8gY291bnQgb2NjdXJyZW5jZXMgb2YgYW4gZXZlbnQu
DQo+PiArICoNCj4+ICsgKiBAcGFyYW0gaW5kZXgNCj4+ICsgKiAgIEluZGV4IG9mIGFuIGV2ZW50
IHRvIGJlIHJlYWQuDQo+PiArICogQHJldHVybg0KPj4gKyAqICAgRXZlbnQgdmFsdWUgcmVhZCBm
cm9tIHJlZ2lzdGVyLiBJbiBjYXNlIG9mIGVycm9ycyBvciBsYWNrIG9mIHN1cHBvcnQNCj4+ICsg
KiAgIDAgaXMgcmV0dXJuZWQuIEluIG90aGVyIHdvcmRzLCBzdHJlYW0gb2YgemVyb3MgaW4gYSB0
cmFjZSBmaWxlDQo+PiArICogICBpbmRpY2F0ZXMgcHJvYmxlbSB3aXRoIHJlYWRpbmcgcGFydGlj
dWxhciBQTVUgZXZlbnQgcmVnaXN0ZXIuDQo+PiArICovDQo+PiArX19ydGVfZXhwZXJpbWVudGFs
DQo+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDY0X3QNCj4+ICtydGVfcG11X3Jl
YWQodW5zaWduZWQgaW50IGluZGV4KQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRf
Z3JvdXAgKmdyb3VwID0gJlJURV9QRVJfTENPUkUoX2V2ZW50X2dyb3VwKTsNCj4+ICsJaW50IHJl
dDsNCj4+ICsNCj4+ICsJaWYgKHVubGlrZWx5KCFydGVfcG11LmluaXRpYWxpemVkKSkNCj4+ICsJ
CXJldHVybiAwOw0KPj4gKw0KPj4gKwlpZiAodW5saWtlbHkoIWdyb3VwLT5lbmFibGVkKSkgew0K
Pj4gKwkJcmV0ID0gX19ydGVfcG11X2VuYWJsZV9ncm91cCgpOw0KPj4gKwkJaWYgKHJldCkNCj4+
ICsJCQlyZXR1cm4gMDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAodW5saWtlbHkoaW5kZXggPj0g
cnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzKSkNCj4+ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwly
ZXR1cm4gX19ydGVfcG11X3JlYWRfdXNlcnBhZ2UoZ3JvdXAtPm1tYXBfcGFnZXNbaW5kZXhdKTsN
Cj4+ICt9DQo+PiArDQo+PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+PiArfQ0KPj4gKyNlbmRpZg0K
Pj4gKw0KPj4gKyNlbmRpZiAvKiBfUlRFX1BNVV9IXyAqLw0KPj4gZGlmZiAtLWdpdCBhL2xpYi9w
bXUvdmVyc2lvbi5tYXAgYi9saWIvcG11L3ZlcnNpb24ubWFwIG5ldyBmaWxlIG1vZGUNCj4+IDEw
MDY0NCBpbmRleCAwMDAwMDAwMDAwLi4zOWE0ZjI3OWMxDQo+PiAtLS0gL2Rldi9udWxsDQo+PiAr
KysgYi9saWIvcG11L3ZlcnNpb24ubWFwDQo+PiBAQCAtMCwwICsxLDE1IEBADQo+PiArRFBES18y
MyB7DQo+PiArCWxvY2FsOiAqOw0KPj4gK307DQo+PiArDQo+PiArRVhQRVJJTUVOVEFMIHsNCj4+
ICsJZ2xvYmFsOg0KPj4gKw0KPj4gKwlfX3J0ZV9wbXVfZW5hYmxlX2dyb3VwOw0KPj4gKwlwZXJf
bGNvcmVfX2V2ZW50X2dyb3VwOw0KPj4gKwlydGVfcG11Ow0KPj4gKwlydGVfcG11X2FkZF9ldmVu
dDsNCj4+ICsJcnRlX3BtdV9maW5pOw0KPj4gKwlydGVfcG11X2luaXQ7DQo+PiArCXJ0ZV9wbXVf
cmVhZDsNCj4+ICt9Ow0KDQo=