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 C673DA04FD;
	Fri, 29 Jul 2022 13:50:22 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id AAA954069C;
	Fri, 29 Jul 2022 13:50:22 +0200 (CEST)
Received: from frasgout.his.huawei.com (frasgout.his.huawei.com
 [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id E4E4540151
 for <dev@dpdk.org>; Fri, 29 Jul 2022 13:50:20 +0200 (CEST)
Received: from fraeml707-chm.china.huawei.com (unknown [172.18.147.226])
 by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4LvQkc1tD1z6855h;
 Fri, 29 Jul 2022 19:48:08 +0800 (CST)
Received: from fraeml712-chm.china.huawei.com (10.206.15.61) by
 fraeml707-chm.china.huawei.com (10.206.15.35) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2375.24; Fri, 29 Jul 2022 13:50:18 +0200
Received: from fraeml712-chm.china.huawei.com ([10.206.15.61]) by
 fraeml712-chm.china.huawei.com ([10.206.15.61]) with mapi id 15.01.2375.024;
 Fri, 29 Jul 2022 13:50:18 +0200
From: Konstantin Ananyev <konstantin.ananyev@huawei.com>
To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= <mb@smartsharesystems.com>, "Konstantin
 Ananyev" <konstantin.v.ananyev@yandex.ru>, "dev@dpdk.org" <dev@dpdk.org>,
 Bruce Richardson <bruce.richardson@intel.com>
CC: Jan Viktorin <viktorin@rehivetech.com>, Ruifeng Wang
 <ruifeng.wang@arm.com>, David Christensen <drc@linux.vnet.ibm.com>,
 "Stanislaw Kardach" <kda@semihalf.com>
Subject: RE: [RFC v2] non-temporal memcpy
Thread-Topic: [RFC v2] non-temporal memcpy
Thread-Index: AdifYjmzwv8JvkFhT0yj+PrUQl+y2QAQTHNwAN90EwAAAaH6gAAF35ig
Date: Fri, 29 Jul 2022 11:50:18 +0000
Message-ID: <24a6aafd01534dc0b75105f1356de574@huawei.com>
References: <98CBD80474FA8B44BF855DF32C47DC35D871D4@smartserver.smartshare.dk>
 <bac1f67b-e189-fe5c-1dc9-9ec777b692e5@yandex.ru>
 <98CBD80474FA8B44BF855DF32C47DC35D871DB@smartserver.smartshare.dk>
 <262c214b-7870-a221-2621-6684dce42823@yandex.ru>
 <98CBD80474FA8B44BF855DF32C47DC35D871E6@smartserver.smartshare.dk>
 <2c646d01-14d0-e5cb-2d7c-50c8456fc3e5@yandex.ru>
 <98CBD80474FA8B44BF855DF32C47DC35D8720C@smartserver.smartshare.dk>
In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35D8720C@smartserver.smartshare.dk>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [10.126.174.150]
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-CFilter-Loop: Reflected
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

DQo+ID4gRnJvbTogS29uc3RhbnRpbiBBbmFueWV2IFttYWlsdG86a29uc3RhbnRpbi52LmFuYW55
ZXZAeWFuZGV4LnJ1XQ0KPiA+IFNlbnQ6IEZyaWRheSwgMjkgSnVseSAyMDIyIDEyLjAwDQo+ID4N
Cj4gPiAyNC8wNy8yMDIyIDIzOjE4LCBNb3J0ZW4gQnLDuHJ1cCDQv9C40YjQtdGCOg0KPiA+ID4+
IEZyb206IEtvbnN0YW50aW4gQW5hbnlldiBbbWFpbHRvOmtvbnN0YW50aW4udi5hbmFueWV2QHlh
bmRleC5ydV0NCj4gPiA+PiBTZW50OiBTdW5kYXksIDI0IEp1bHkgMjAyMiAxNS4zNQ0KPiA+ID4+
DQo+ID4gPj4gMjIvMDcvMjAyMiAxMTo0NCwgTW9ydGVuIEJyw7hydXAg0L/QuNGI0LXRgjoNCj4g
PiA+Pj4+IEZyb206IEtvbnN0YW50aW4gQW5hbnlldiBbbWFpbHRvOmtvbnN0YW50aW4udi5hbmFu
eWV2QHlhbmRleC5ydV0NCj4gPiA+Pj4+IFNlbnQ6IEZyaWRheSwgMjIgSnVseSAyMDIyIDAxLjIw
DQo+ID4gPj4+Pg0KPiA+ID4+Pj4gSGkgTW9ydGVuLA0KPiA+ID4+Pj4NCj4gPiA+Pj4+PiBUaGlz
IFJGQyBwcm9wb3NlcyBhIHNldCBvZiBmdW5jdGlvbnMgb3B0aW1pemVkIGZvciBub24tdGVtcG9y
YWwNCj4gPiA+Pj4+IG1lbW9yeSBjb3B5Lg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gQXQgdGhpcyBz
dGFnZSwgSSBhbSBhc2tpbmcgZm9yIGZlZWRiYWNrIG9uIHRoZSBjb25jZXB0Lg0KPiA+ID4+Pj4+
DQo+ID4gPj4+Pj4gQXBwbGljYXRpb25zIHNvbWV0aW1lcyBkYXRhIHRvIGFub3RoZXIgbWVtb3J5
IGxvY2F0aW9uLCB3aGljaCBpcw0KPiA+ID4+IG9ubHkNCj4gPiA+Pj4+IHVzZWQNCj4gPiA+Pj4+
PiBtdWNoIGxhdGVyLg0KPiA+ID4+Pj4+IEluIHRoaXMgY2FzZSwgaXQgaXMgaW5lZmZpY2llbnQg
dG8gcG9sbHV0ZSB0aGUgZGF0YSBjYWNoZSB3aXRoDQo+ID4gdGhlDQo+ID4gPj4+PiBjb3BpZWQN
Cj4gPiA+Pj4+PiBkYXRhLg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gQW4gZXhhbXBsZSB1c2UgY2Fz
ZSAob3JpZ2luYXRpbmcgZnJvbSBhIHJlYWwgbGlmZSBhcHBsaWNhdGlvbik6DQo+ID4gPj4+Pj4g
Q29weWluZyBmaWx0ZXJlZCBwYWNrZXRzLCBvciB0aGUgZmlyc3QgcGFydCBvZiB0aGVtLCBpbnRv
IGENCj4gPiBjYXB0dXJlDQo+ID4gPj4+PiBidWZmZXINCj4gPiA+Pj4+PiBmb3Igb2ZmbGluZSBh
bmFseXNpcy4NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IFRoZSBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0
aW9ucyBpcyB0byBhY2hpZXZlIGEgcGVyZm9ybWFuY2UgZ2Fpbg0KPiA+IGJ5DQo+ID4gPj4+PiBu
b3QNCj4gPiA+Pj4+PiBwb2xsdXRpbmcgdGhlIGNhY2hlIHdoZW4gY29weWluZyBkYXRhLg0KPiA+
ID4+Pj4+IEFsdGhvdWdoIHRoZSB0aHJvdWdocHV0IG1heSBiZSBpbXByb3ZlZCBieSBmdXJ0aGVy
IG9wdGltaXphdGlvbiwNCj4gPiBJDQo+ID4gPj4gZG8NCj4gPiA+Pj4+IG5vdA0KPiA+ID4+Pj4+
IGNvbnNpZGVyIHRocm91Z3B1dCBvcHRpbWl6YXRpb24gcmVsZXZhbnQgaW5pdGlhbGx5Lg0KPiA+
ID4+Pj4+DQo+ID4gPj4+Pj4gVGhlIHg4NiBub24tdGVtcG9yYWwgbG9hZCBpbnN0cnVjdGlvbnMg
aGF2ZSAxNiBieXRlIGFsaWdubWVudA0KPiA+ID4+Pj4+IHJlcXVpcmVtZW50cyBbMV0sIHdoaWxl
IEFSTSBub24tdGVtcG9yYWwgbG9hZCBpbnN0cnVjdGlvbnMgYXJlDQo+ID4gPj4+PiBhdmFpbGFi
bGUgd2l0aA0KPiA+ID4+Pj4+IDQgYnl0ZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIFsyXS4NCj4g
PiA+Pj4+PiBCb3RoIHBsYXRmb3JtcyBvZmZlciBub24tdGVtcG9yYWwgc3RvcmUgaW5zdHJ1Y3Rp
b25zIHdpdGggNCBieXRlDQo+ID4gPj4+PiBhbGlnbm1lbnQNCj4gPiA+Pj4+PiByZXF1aXJlbWVu
dHMuDQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiBJbiBhZGRpdGlvbiB0byB0aGUgcHJpbWFyeSBmdW5j
dGlvbiB3aXRob3V0IGFueSBhbGlnbm1lbnQNCj4gPiA+Pj4+IHJlcXVpcmVtZW50cywgd2UNCj4g
PiA+Pj4+PiBhbHNvIHByb3ZpZGUgZnVuY3Rpb25zIGZvciByZXNwZWN0aXZseSAxNiBhbmQgNCBi
eXRlIGFsaWduZWQNCj4gPiBhY2Nlc3MNCj4gPiA+Pj4+IGZvcg0KPiA+ID4+Pj4+IHBlcmZvcm1h
bmNlIHB1cnBvc2VzLg0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gVGhlIGZ1bmN0aW9uIG5hbWVzIHJl
c2VtYmxlIHN0YW5kYXJkIEMgbGlicmFyeSBmdW5jdGlvbiBuYW1lcywNCj4gPiBidXQNCj4gPiA+
Pj4+IHRoZWlyDQo+ID4gPj4+Pj4gc2lnbmF0dXJlcyBhcmUgaW50ZW50aW9uYWxseSBkaWZmZXJl
bnQuIE5vIG5lZWQgdG8gZHJhZyBsZWdhY3kNCj4gPiBpbnRvDQo+ID4gPj4+PiBpdC4NCj4gPiA+
Pj4+Pg0KPiA+ID4+Pj4+IE5COiBEb24ndCBjb21tZW50IG9uIHNwYWNlcyBmb3IgaW5kZW50YXRp
b247IGEgcGF0Y2ggd2lsbCBmb2xsb3cNCj4gPiA+PiBEUERLDQo+ID4gPj4+PiBjb2RpbmcNCj4g
PiA+Pj4+PiBzdHlsZSBhbmQgdXNlIFRBQi4NCj4gPiA+Pj4+DQo+ID4gPj4+Pg0KPiA+ID4+Pj4g
SSB0aGluayB0aGVyZSB3ZXJlIGRpc2N1c3Npb25zIGluIG90aGVyIGRpcmVjdGlvbiAtIHJlbW92
ZQ0KPiA+ID4+IHJ0ZV9tZW1jcHkoKQ0KPiA+ID4+Pj4gY29tcGxldGVseSBhbmQgdXNlIG1lbWNw
eSgpIGluc3RlYWQuLi4NCj4gPiA+Pj4NCj4gPiA+Pj4gWWVzLCB0aGUgaGlnaGx5IG9wdGltaXpl
ZCBydGVfbWVtY3B5KCkgaW1wbGVtZW50YXRpb24gb2YgbWVtY3B5KCkNCj4gPiBoYXMNCj4gPiA+
PiBiZWNvbWUgb2Jzb2xldGUsIG5vdyB0aGF0IG1vZGVybiBjb21waWxlcnMgcHJvdmlkZSBhbiBl
ZmZpY2llbnQNCj4gPiA+PiBtZW1jcHkoKSBpbXBsZW1lbnRhdGlvbi4NCj4gPiA+Pj4NCj4gPiA+
Pj4gSXQncyBhbiBleGNlbGxlbnQgcmVmZXJlbmNlLCBiZWNhdXNlIHdlIHNob3VsZCBsZWFybiBm
cm9tIGl0LCBhbmQNCj4gPiA+PiBhdm9pZCBpbnRyb2R1Y2luZyBzaW1pbGFyIG1pc3Rha2VzIHdp
dGggbm9uLXRlbXBvcmFsIG1lbWNweS4NCj4gPiA+Pj4NCj4gPiA+Pj4+IEJ1dCBpZiB3ZSBoYXZl
IGEgZ29vZCB1c2UgY2FzZSBmb3IgdGhhdCwgdGhlbiBJIGFtIHBvc2l0aXZlIGluDQo+ID4gPj4+
PiBwcmluY2lwbGUuDQo+ID4gPj4+DQo+ID4gPj4+IFRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgZG9l
c24ndCBvZmZlciBub24tdGVtcG9yYWwgbWVtY3B5KCksIHNvIHdlDQo+ID4gPj4gbmVlZCB0byBp
bXBsZW1lbnQgaXQgb3Vyc2VsdmVzLg0KPiA+ID4+Pg0KPiA+ID4+Pj4gVGhvdWdoIEkgdGhpbmsg
d2UgbmVlZCBhIGNsZWFyIHVzZS1jYXNlIHdpdGhpbiBkcGRrIGZvciBpdA0KPiA+ID4+Pj4gdG8g
ZGVtb25zdHJhdGUgcGVyZm9tYW5jZSBnYWluLg0KPiA+ID4+Pg0KPiA+ID4+PiBUaGUgcGVyZm9y
bWFuY2UgZ2FpbiBpcyB0byBhdm9pZCBwb2xsdXRpbmcgdGhlIGRhdGEgY2FjaGUuIERQREsNCj4g
PiA+PiBleGFtcGxlIGFwcGxpY2F0aW9ucywgbGlrZSBsM2Z3ZCwgYXJlIHByb2JhYmx5IHRvbyBw
cmltaXRpdmUgdG8NCj4gPiBtZWFzdXJlDQo+ID4gPj4gYW55IGJlbmVmaXQgaW4gdGhpcyByZWdh
cmQuDQo+ID4gPj4+DQo+ID4gPj4+PiBQcm9iYWJseSBjb3B5aW5nIHBhY2tldHMgd2l0aGluIHBk
dW1wIGxpYiwgb3IgZXhhbXBsZXMvZG1hLiBvciAuLi4NCj4gPiA+Pj4NCj4gPiA+Pj4gR29vZCBw
b2ludCAtIHRoZSBuZXcgZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIHNvbWV3aGVyZSB3aXRoaW4N
Cj4gPiBEUERLLg0KPiA+ID4+IEZvciB0aGlzIHB1cnBvc2UsIEkgd2lsbCBsb29rIGludG8gbW9k
aWZ5aW5nIHJ0ZV9wa3RtYnVmX2NvcHkoKSwNCj4gPiB3aGljaA0KPiA+ID4+IGlzIHVzZWQgYnkg
cGR1bXBfY29weSgpLCB0byB1c2Ugbm9uLXRlbXBvcmFsIGNvcHlpbmcgb2YgdGhlIHBhY2tldA0K
PiA+ID4+IGRhdGEuDQo+ID4gPj4+DQo+ID4gPj4+PiBBbm90aGVyIHRob3VnaHQgLSBkbyB3ZSBy
ZWFsbHkgbmVlZCBhIHNlcGFyYXRlIGlubGluZSBmdW5jdGlvbiBmb3INCj4gPiA+PiBlYWNoDQo+
ID4gPj4+PiBmbGF2b3VyPw0KPiA+ID4+Pj4gTWlnaHQgYmUganVzdCBvbmUgbm9uLWlubGluZSBy
dGVfbWVtY3B5X250KGRzdCwgc3JjLCBzaXplLCBmbGFncyksDQo+ID4gPj4+PiB3aGVyZSBmbGFn
cyBjb3VsZCBiZSBjb21iaW5hdGlvbiBvZiBOVF9TUkMsIE5UX0RTVCwgYW5kIGtlZXANCj4gPiA+
PiBhbGlnbm1lbnQNCj4gPiA+Pj4+IGRldGVjdGlvbi9kZWNpc2lvbnMgdG8gcGFydGljdWxhciBp
bXBsZW1lbnRhdGlvbj8NCj4gPiA+Pj4NCj4gPiA+Pj4gVGhhbmsgeW91IGZvciB0aGUgZmVlZGJh
Y2ssIEtvbnN0YW50aW4uDQo+ID4gPj4+DQo+ID4gPj4+IE15IGFuc3dlciB0byB0aGlzIHN1Z2dl
c3Rpb24gZ2V0cyBhIGxpdHRsZSBsb25nd2luZGVkLi4uDQo+ID4gPj4+DQo+ID4gPj4+IExvb2tp
bmcgYXQgdGhlIERQREsgcGNhcG5nIGxpYnJhcnksIGl0IGNvcGllcyBhIDQgYnl0ZSBhbGlnbmVk
DQo+ID4gPj4gbWV0YWRhdGEgc3RydWN0dXJlIHNpemVkIDI4IGJ5dGUuIFNvIGl0IGNhbiBkbyB3
aXRoIDQgYnl0ZSBhbGlnbmVkDQo+ID4gPj4gZnVuY3Rpb25zLg0KPiA+ID4+Pg0KPiA+ID4+PiBP
dXIgYXBwbGljYXRpb24gY2FuIGNhcHR1cmUgcGFja2V0cyBzdGFydGluZyBhdCB0aGUgSVAgaGVh
ZGVyLA0KPiA+IHdoaWNoDQo+ID4gPj4gaXMgb2Zmc2V0IGJ5IDE0IGJ5dGUgKEV0aGVybmV0IGhl
YWRlciBzaXplKSBmcm9tIHRoZSBwYWNrZXQgYnVmZmVyLA0KPiA+IHNvDQo+ID4gPj4gaXQgcmVx
dWlyZXMgMiBieXRlIGFsaWdubWVudC4gQW5kIHRodXMsIHJlcXVpcmluZyA0IGJ5dGUgYWxpZ25t
ZW50DQo+ID4gaXMNCj4gPiA+PiBub3QgYWNjZXB0YWJsZS4NCj4gPiA+Pj4NCj4gPiA+Pj4gT3Vy
IGFwcGxpY2F0aW9uIHVzZXMgMTYgYnl0ZSBhbGlnbm1lbnQgaW4gdGhlIGNhcHR1cmUgYnVmZmVy
IGFyZWEsDQo+ID4gPj4gYW5kIGNhbiBiZW5lZml0IGZyb20gMTYgYnl0ZSBhbGlnbmVkIGZ1bmN0
aW9ucy4gRnVydGhlcm1vcmUsIHg4Ng0KPiA+ID4+IHByb2Nlc3NvcnMgcmVxdWlyZSAxNiBieXRl
IGFsaWdubWVudCBmb3Igbm9uLXRlbXBvcmFsIGxvYWQNCj4gPiA+PiBpbnN0cnVjdGlvbnMsIHNv
IEkgdGhpbmsgYSAxNiBieXRlIGFsaWduZWQgbm9uLXRlbXBvcmFsIG1lbWNweQ0KPiA+IGZ1bmN0
aW9uDQo+ID4gPj4gc2hvdWxkIGJlIG9mZmVyZWQuDQo+ID4gPj4NCj4gPiA+Pg0KPiA+ID4+IFll
cywgeDg2IG5lZWRzIDE2QiBhbGlnbm1lbnQgZm9yIE5UIGxvYWQvc3RvcmVzDQo+ID4gPj4gQnV0
IHRoYXQncyBzdXBwb3NlZCB0byBiZSBhcmNoIHNwZWNpZmljIGxpbWl0YXRpb24sDQo+ID4gPj4g
dGhhdCB3ZSBwcm9iYWJseSB3YW50IHRvIGhpZGUsIG5vPw0KPiA+ID4NCj4gPiA+IEFncmVlLg0K
PiA+ID4NCj4gPiA+PiBJbnNpZGUgdGhlIGZ1bmN0aW9uIGNhbiBjaGVjayBhbGlnbm1lbnQgb2Yg
Ym90aCBzcmMgYW5kIGRzdA0KPiA+ID4+IGFuZCBkZWNpZGUgc2hvdWxkIGl0IHVzZSBOVCBsb2Fk
L3N0b3JlIGluc3RydWN0aW9ucyBvciBqdXN0DQo+ID4gPj4gZG8gbm9ybWFsIGNvcHkuDQo+ID4g
Pg0KPiA+ID4gWWVzLCBJJ20gZXhwZXJpbWVudGluZyB3aXRoIHRoZSB4ODYgaW5saW5lIGZ1bmN0
aW9uIHNob3duIGJlbG93LiBBbmQNCj4gPiBob3BlZnVsbHksIHdpdGggc29tZSAiZXh0ZXJuIGlu
bGluZSIgb3Igb3RoZXIgbWFnaWMsIEkgY2FuIGhpZGUgdGhlDQo+ID4gZGlmZmVyZW50IGltcGxl
bWVudGF0aW9ucyBpbiB0aGUgYXJjaCBzcGVjaWZpYyBoZWFkZXJzLCBhbmQgb25seSBleHBvc2UN
Cj4gPiB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gb2YgcnRlX21lbWNweV9udCgpIGluIHRoZSBj
b21tb24gaGVhZGVyLg0KPiA+ID4NCj4gPiA+IEknbSBjdXJyZW50bHkgd29ya2luZyBvbiB0aGUg
eDg2IGltcGxlbWVudGF0aW9uIC0gd2hlbiBJJ20gc2F0aXNmaWVkDQo+ID4gd2l0aCB0aGF0LCBJ
J2xsIGxvb2sgaW50byBob3cgdG8gaGlkZSB0aGUgaW1wbGVtZW50YXRpb25zIGluIHRoZSBhcmNo
DQo+ID4gc3BlY2lmaWMgaGVhZGVyIGZpbGVzLCBhbmQgb25seSBleHBvc2UgdGhlIGNvbW1vbiBm
dW5jdGlvbiBkZWNsYXJhdGlvbg0KPiA+IGluIHRoZSBnZW5lcmljIGhlYWRlciBmaWxlIGFsc28g
dXNlZCBmb3IgZG9jdW1lbnRhdGlvbi4gSSB3b3JrcyBmb3INCj4gPiBydGVfbWVtY3B5KCksIHNv
IEkgY2FuIHByb2JhYmx5IGZpbmQgdGhlIHdheSB0byBkbyBpdCB0aGVyZS4NCj4gPiA+DQo+ID4g
PiAvKg0KPiA+ID4gICAqIE5vbi1UZW1wb3JhbCBNZW1vcnkgT3BlcmF0aW9ucyBGbGFncy4NCj4g
PiA+ICAgKi8NCj4gPiA+DQo+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNfRl9MRU5BX01BU0sgIChV
SU5UNjRfQygweEZFKSA8PCAwKSAgIC8qKiBMZW5ndGgNCj4gPiBhbGlnbm1lbnQgbWFzay4gKi8N
Cj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjJBICAgICAgKFVJTlQ2NF9DKDIpIDw8IDAp
ICAgICAgLyoqIExlbmd0aCBpcw0KPiA+IDIgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmlu
ZSBSVEVfTUVNT1BTX0ZfTEVONEEgICAgICAoVUlOVDY0X0MoNCkgPDwgMCkgICAgICAvKiogTGVu
Z3RoIGlzDQo+ID4gNCBieXRlIGFsaWduZWQuICovDQo+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNf
Rl9MRU44QSAgICAgIChVSU5UNjRfQyg4KSA8PCAwKSAgICAgIC8qKiBMZW5ndGggaXMNCj4gPiA4
IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjE2QSAgICAg
KFVJTlQ2NF9DKDE2KSA8PCAwKSAgICAgLyoqIExlbmd0aCBpcw0KPiA+IDE2IGJ5dGUgYWxpZ25l
ZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjMyQSAgICAgKFVJTlQ2NF9DKDMy
KSA8PCAwKSAgICAgLyoqIExlbmd0aCBpcw0KPiA+IDMyIGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+
ICNkZWZpbmUgUlRFX01FTU9QU19GX0xFTjY0QSAgICAgKFVJTlQ2NF9DKDY0KSA8PCAwKSAgICAg
LyoqIExlbmd0aCBpcw0KPiA+IDY0IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRF
X01FTU9QU19GX0xFTjEyOEEgICAgKFVJTlQ2NF9DKDEyOCkgPDwgMCkgICAgLyoqIExlbmd0aCBp
cw0KPiA+IDEyOCBieXRlIGFsaWduZWQuICovDQo+ID4gPg0KPiA+ID4gI2RlZmluZSBSVEVfTUVN
T1BTX0ZfRFNUQV9NQVNLICAoVUlOVDY0X0MoMHhGRSkgPDwgOCkgICAvKioNCj4gPiBEZXN0aW5h
dGlvbiBhZGRyZXNzIGFsaWdubWVudCBtYXNrLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BT
X0ZfRFNUMkEgICAgICAoVUlOVDY0X0MoMikgPDwgOCkgICAgICAvKioNCj4gPiBEZXN0aW5hdGlv
biBhZGRyZXNzIGlzIDIgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BT
X0ZfRFNUNEEgICAgICAoVUlOVDY0X0MoNCkgPDwgOCkgICAgICAvKioNCj4gPiBEZXN0aW5hdGlv
biBhZGRyZXNzIGlzIDQgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BT
X0ZfRFNUOEEgICAgICAoVUlOVDY0X0MoOCkgPDwgOCkgICAgICAvKioNCj4gPiBEZXN0aW5hdGlv
biBhZGRyZXNzIGlzIDggYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BT
X0ZfRFNUMTZBICAgICAoVUlOVDY0X0MoMTYpIDw8IDgpICAgICAvKioNCj4gPiBEZXN0aW5hdGlv
biBhZGRyZXNzIGlzIDE2IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9Q
U19GX0RTVDMyQSAgICAgKFVJTlQ2NF9DKDMyKSA8PCA4KSAgICAgLyoqDQo+ID4gRGVzdGluYXRp
b24gYWRkcmVzcyBpcyAzMiBieXRlIGFsaWduZWQuICovDQo+ID4gPiAjZGVmaW5lIFJURV9NRU1P
UFNfRl9EU1Q2NEEgICAgIChVSU5UNjRfQyg2NCkgPDwgOCkgICAgIC8qKg0KPiA+IERlc3RpbmF0
aW9uIGFkZHJlc3MgaXMgNjQgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVN
T1BTX0ZfRFNUMTI4QSAgICAoVUlOVDY0X0MoMTI4KSA8PCA4KSAgICAvKioNCj4gPiBEZXN0aW5h
dGlvbiBhZGRyZXNzIGlzIDEyOCBieXRlIGFsaWduZWQuICovDQo+ID4gPg0KPiA+ID4gI2RlZmlu
ZSBSVEVfTUVNT1BTX0ZfU1JDQV9NQVNLICAoVUlOVDY0X0MoMHhGRSkgPDwgMTYpICAvKiogU291
cmNlDQo+ID4gYWRkcmVzcyBhbGlnbm1lbnQgbWFzay4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01F
TU9QU19GX1NSQzJBICAgICAgKFVJTlQ2NF9DKDIpIDw8IDE2KSAgICAgLyoqIFNvdXJjZQ0KPiA+
IGFkZHJlc3MgaXMgMiBieXRlIGFsaWduZWQuICovDQo+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNf
Rl9TUkM0QSAgICAgIChVSU5UNjRfQyg0KSA8PCAxNikgICAgIC8qKiBTb3VyY2UNCj4gPiBhZGRy
ZXNzIGlzIDQgYnl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BTX0ZfU1JD
OEEgICAgICAoVUlOVDY0X0MoOCkgPDwgMTYpICAgICAvKiogU291cmNlDQo+ID4gYWRkcmVzcyBp
cyA4IGJ5dGUgYWxpZ25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX1NSQzE2QSAg
ICAgKFVJTlQ2NF9DKDE2KSA8PCAxNikgICAgLyoqIFNvdXJjZQ0KPiA+IGFkZHJlc3MgaXMgMTYg
Ynl0ZSBhbGlnbmVkLiAqLw0KPiA+ID4gI2RlZmluZSBSVEVfTUVNT1BTX0ZfU1JDMzJBICAgICAo
VUlOVDY0X0MoMzIpIDw8IDE2KSAgICAvKiogU291cmNlDQo+ID4gYWRkcmVzcyBpcyAzMiBieXRl
IGFsaWduZWQuICovDQo+ID4gPiAjZGVmaW5lIFJURV9NRU1PUFNfRl9TUkM2NEEgICAgIChVSU5U
NjRfQyg2NCkgPDwgMTYpICAgIC8qKiBTb3VyY2UNCj4gPiBhZGRyZXNzIGlzIDY0IGJ5dGUgYWxp
Z25lZC4gKi8NCj4gPiA+ICNkZWZpbmUgUlRFX01FTU9QU19GX1NSQzEyOEEgICAgKFVJTlQ2NF9D
KDEyOCkgPDwgMTYpICAgLyoqIFNvdXJjZQ0KPiA+IGFkZHJlc3MgaXMgMTI4IGJ5dGUgYWxpZ25l
ZC4gKi8NCj4gPiA+DQo+ID4gPiAvKioNCj4gPiA+ICAgKiBAd2FybmluZw0KPiA+ID4gICAqIEBi
IEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4N
Cj4gPiA+ICAgKg0KPiA+ID4gICAqIE5vbi10ZW1wb3JhbCBtZW1vcnkgY29weS4NCj4gPiA+ICAg
KiBUaGUgbWVtb3J5IGFyZWFzIG11c3Qgbm90IG92ZXJsYXAuDQo+ID4gPiAgICoNCj4gPiA+ICAg
KiBAbm90ZQ0KPiA+ID4gICAqIElmIHRoZSBkZXN0aW5hdGlvbiBhbmQvb3IgbGVuZ3RoIGlzIHVu
YWxpZ25lZCwgc29tZSBjb3BpZWQgYnl0ZXMNCj4gPiB3aWxsIGJlDQo+ID4gPiAgICogc3RvcmVk
IGluIHRoZSBkZXN0aW5hdGlvbiBtZW1vcnkgYXJlYSB1c2luZyB0ZW1wb3JhbCBhY2Nlc3MuDQo+
ID4gPiAgICoNCj4gPiA+ICAgKiBAcGFyYW0gZHN0DQo+ID4gPiAgICogICBQb2ludGVyIHRvIHRo
ZSBub24tdGVtcG9yYWwgZGVzdGluYXRpb24gbWVtb3J5IGFyZWEuDQo+ID4gPiAgICogQHBhcmFt
IHNyYw0KPiA+ID4gICAqICAgUG9pbnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIHNvdXJjZSBtZW1v
cnkgYXJlYS4NCj4gPiA+ICAgKiBAcGFyYW0gbGVuDQo+ID4gPiAgICogICBOdW1iZXIgb2YgYnl0
ZXMgdG8gY29weS4NCj4gPiA+ICAgKiBAcGFyYW0gZmxhZ3MNCj4gPiA+ICAgKiAgIEhpbnRzIGZv
ciBtZW1vcnkgYWNjZXNzLg0KPiA+ID4gICAqICAgQW55IG9mIHRoZSBSVEVfTUVNT1BTX0ZfTEVO
bkEsIFJURV9NRU1PUFNfRl9EU1RuQSwNCj4gPiBSVEVfTUVNT1BTX0ZfU1JDbkEgZmxhZ3MuDQo+
ID4gPiAgICovDQo+ID4gPiBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+IHN0YXRpYyBfX3J0ZV9h
bHdheXNfaW5saW5lDQo+ID4gPiBfX2F0dHJpYnV0ZV9fKChfX25vbm51bGxfXygxLCAyKSwgX19h
Y2Nlc3NfXyh3cml0ZV9vbmx5LCAxLCAzKSwNCj4gPiBfX2FjY2Vzc19fKHJlYWRfb25seSwgMiwg
MykpKQ0KPiA+ID4gdm9pZCBydGVfbWVtY3B5X250KHZvaWQgKiBfX3J0ZV9yZXN0cmljdCBkc3Qs
IGNvbnN0IHZvaWQgKg0KPiA+IF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbiwNCj4gPiA+
ICAgICAgICAgIGNvbnN0IHVpbnQ2NF90IGZsYWdzKQ0KPiA+ID4gew0KPiA+ID4gICAgICBpZiAo
X19idWlsdGluX2NvbnN0YW50X3AoZmxhZ3MpID8NCj4gPiA+ICAgICAgICAgICAgICAoKGZsYWdz
ICYgUlRFX01FTU9QU19GX0xFTkFfTUFTSykgPj0gUlRFX01FTU9QU19GX0xFTjE2QQ0KPiA+ICYm
DQo+ID4gPiAgICAgICAgICAgICAgKGZsYWdzICYgUlRFX01FTU9QU19GX0RTVEFfTUFTSykgPj0g
UlRFX01FTU9QU19GX0RTVDE2QSkNCj4gPiA6DQo+ID4gPiAgICAgICAgICAgICAgISgoKHVpbnRw
dHJfdClkc3QgfCBsZW4pICYgKDE2IC0gMSkpKSB7DQo+ID4gPiAgICAgICAgICBpZiAoX19idWls
dGluX2NvbnN0YW50X3AoZmxhZ3MpID8NCj4gPiA+ICAgICAgICAgICAgICAgICAgKGZsYWdzICYg
UlRFX01FTU9QU19GX1NSQ0FfTUFTSykgPj0NCj4gPiBSVEVfTUVNT1BTX0ZfU1JDMTZBIDoNCj4g
PiA+ICAgICAgICAgICAgICAgICAgISgodWludHB0cl90KXNyYyAmICgxNiAtIDEpKSkNCj4gPiA+
ICAgICAgICAgICAgICBydGVfbWVtY3B5X250MTZhKGRzdCwgc3JjLCBsZW4vKiwgZmxhZ3MqLyk7
DQo+ID4gPiAgICAgICAgICBlbHNlDQo+ID4gPiAgICAgICAgICAgICAgcnRlX21lbWNweV9udDE2
ZGxhKGRzdCwgc3JjLCBsZW4vKiwgZmxhZ3MqLyk7DQo+ID4gPiAgICAgIH0NCj4gPiA+ICAgICAg
ZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZmxhZ3MpID8gKA0KPiA+ID4gICAgICAgICAg
ICAgIChmbGFncyAmIFJURV9NRU1PUFNfRl9MRU5BX01BU0spID49IFJURV9NRU1PUFNfRl9MRU40
QQ0KPiA+ICYmDQo+ID4gPiAgICAgICAgICAgICAgKGZsYWdzICYgUlRFX01FTU9QU19GX0RTVEFf
TUFTSykgPj0gUlRFX01FTU9QU19GX0RTVDRBDQo+ID4gJiYNCj4gPiA+ICAgICAgICAgICAgICAo
ZmxhZ3MgJiBSVEVfTUVNT1BTX0ZfU1JDQV9NQVNLKSA+PSBSVEVfTUVNT1BTX0ZfU1JDNEEpDQo+
ID4gOg0KPiA+ID4gICAgICAgICAgICAgICEoKCh1aW50cHRyX3QpZHN0IHwgKHVpbnRwdHJfdClz
cmMgfCBsZW4pICYgKDQgLSAxKSkpIHsNCj4gPiA+ICAgICAgICAgIHJ0ZV9tZW1jcHlfbnQ0YShk
c3QsIHNyYywgbGVuLyosIGZsYWdzKi8pOw0KPiA+ID4gICAgICB9DQo+ID4gPiAgICAgIGVsc2UN
Cj4gPiA+ICAgICAgICAgIHJ0ZV9tZW1jcHlfbnRfdW5hbGlnbmVkKGRzdCwgc3JjLCBsZW4vKiwg
ZmxhZ3MqLyk7DQo+ID4gPiB9DQo+ID4NCj4gPg0KPiA+IERvIHdlIHJlYWxseSBuZWVkIHRvIGV4
cG9zZSBhbGwgdGhlc2UgZG96ZW4gZmxhZ3M/DQo+ID4gTXkgdGhvdWdodCBhdCBsZWFzdCBhYm91
dCB4ODYgaW1wbGVtZW50YWlvbiB3YXMgYWJvdXQgc29tZXRoaW5nIG1vcmUNCj4gPiBzaW1wbGUg
bGlrZToNCj4gPiB2b2lkIHJ0ZV9tZW1jcHlfbnQodm9pZCAqIF9fcnRlX3Jlc3RyaWN0IGRzdCwN
Cj4gPiAJY29uc3Qgdm9pZCAqIF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbiwNCj4gPiAJ
Y29uc3QgdWludDY0X3QgZmxhZ3MpDQo+ID4gew0KPiA+DQo+ID4gCWlmIChmbGFncyA9PSAoU1JD
X05UIHwgRFNUX05UKSAmJiAoKGRzdCB8IHNyYykgJiAweGYpID09IDApIHsNCj4gPiAJCV9kb19u
dF9zcmNfbnRfZHN0X250KC4uLik7DQo+ID4gCX0gZWxzZSBpZiAoZmxhZ3MgPT0gRFNUX05UICYm
IChkc3QgJiAweGYpID09IDApIHsNCj4gPiAJCV9kb19zcmNfbmFfZHN0X250KC4uLik7DQo+ID4g
CX0gZWxzZSBpZiAoZmxhZ3MgPT0gU1JDX05UICYmIChzcmMgJiAweGYpID09IDApIHsNCj4gPiAJ
CV9kb19zcmNfbnRfZHN0X25hKC4uLik7DQo+ID4gCX0gZWxzZQ0KPiA+IAkJbWVtY3B5KGRzdCwg
c3JjLCBsZW4pOw0KPiA+IH0NCj4gDQo+IFRoZSBjb21iaW5hdGlvbiBvZiBmbGFncywgaW5saW5l
IGFuZCBfX2J1aWx0aW5fY29uc3RhbnRfcCgpIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gcHJvZHVj
ZSB6ZXJvLW92ZXJoZWFkIGNvZGUuIFdpdGhvdXQgaXQsIHRoZQ0KPiByZXN1bHRpbmcgY29kZSB3
aWxsIGNvbnRhaW4gYSBidW5jaCBvZiBydW4tdGltZSBiaXRtYXNrIGNvbXBhcmlzb25zIGFuZCBi
cmFuY2hlcyB0byBkZXRlcm1pbmUgdGhlIHVsdGltYXRlIGNvcHkgZnVuY3Rpb24uDQoNCkkgdGhp
bmsgaXQgaXMgdW5hdm9pZGFibGUsIHVubGVzcyB5b3VyIGludGVudGlvbiBmb3IgdGhpcyBmdW5j
dGlvbiB0byB0cnVzdCBmbGFncyB3aXRob3V0IGNoZWNraW5nIGFjdHVhbCBhZGRyZXNzZXMuDQoN
CiBPbiB4ODYNCj4gdGhlcmUgYXJlIG5vdCBvbmx5IDE2IGJ5dGUsIGJ1dCBhbHNvIDQgYnl0ZSBh
bGlnbm1lbnQgdmFyaWFudHMgb2Ygbm9uLXRlbXBvcmFsIHN0b3JlLiBUaGUgYmVhdXR5IG9mIGl0
IHdpbGwgYmUgbW9yZSBvYnZpb3VzIHdoZW4gdGhlDQo+IHBhdGNoIGlzIHJlYWR5Lg0KDQpPaywg
SSB3aWxsIGp1c3Qgd2FpdCBmb3IgZmluYWwgdmVyc2lvbiB0aGVuIDopDQogDQo+IA0KPiBBbmQg
aW4gbXkgY3VycmVudCB3b3JraW5nIHZlcnNpb24gKG5vdCB0aGUgY29kZSBwcm92aWRlZCBoZXJl
KSwgdGhlIGZsYWdzIGFyZSBoaW50cywgc28gdXNpbmcgdGhlbSB3aWxsIGJlIG9wdGlvbmFsLiBU
aGUgZnVuY3Rpb24NCj4gaGVhZGVycyB3aWxsIGxvb2sgcm91Z2hseSBsaWtlIHRoaXM6DQo+IA0K
PiBzdGF0aWMgaW5saW5lIHZvaWQgcnRlX21lbWNweV9udF9leCgNCj4gCQl2b2lkICogZHN0LCBj
b25zdCB2b2lkICogc3JjLA0KPiAJCXNpemVfdCBsZW4sIHVpbnQ2NF90IGZsYWdzKTsNCj4gDQo+
IHN0YXRpYyBpbmxpbmUgdm9pZCBydGVfbWVtY3B5X250KA0KPiAJCXZvaWQgKiBkc3QsIGNvbnN0
IHZvaWQgKiBzcmMsDQo+IAkJc2l6ZV90IGxlbikNCj4gew0KPiAJcnRlX21lbWNweV9udF9leChk
c3QsIHNyYywgbGVuLCAwKTsNCj4gfQ0KPiANCj4gSSBtaWdodCBhZGQgYW4gX2V4IHBvc3RmaXgg
dmFyaWFudCBvZiB0aGUgbWJ1ZiBwYWNrZXQgbm9uLXRlbXBvcmFsIGNvcHkgZnVuY3Rpb24gdG9v
LCBidXQgSSdtIG5vdCB3b3JraW5nIG9uIHRoYXQgZnVuY3Rpb24geWV0LCBzbyBJDQo+IGRvbid0
IHlldCBrbm93IGlmIGl0IG1ha2VzIHNlbnNlIG9yIG5vdC4NCj4gDQo+IE15IGNvbmNlcHQgZm9y
IGJ1aWxkIHRpbWUgYWxpZ25tZW50IGhpbnRzIGNhbiBhbHNvIGJlIGNvcGllZCBpbnRvIGFuIHJ0
ZV9tZW1jcHlfZXgoKSBmdW5jdGlvbiBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UuIEJ1dCBJDQo+
IGRvbid0IHdhbnQgbXkgcGF0Y2ggdG8gZXhwYW5kIHRvbyBtdWNoIG91dHNpZGUgaXRzIGluaXRp
YWwgc2NvcGUsIHNvIEkgd2lsbCBub3QgbW9kaWZ5IHJ0ZV9tZW1jcHkoKSB3aXRoIHRoaXMgcGF0
Y2guDQo+IA0KPiBBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIHByb3ZpZGUgcnRlX21lbWNweV9leChk
LHMsbCxmbGFncykgaW5zdGVhZCBvZiBydGVfbWVtY3B5X250W19leF0oKSwgYW5kIHVzZSB0aGUg
ZmxhZ3MgdG8gaW5kaWNhdGUgbm9uLQ0KPiB0ZW1wb3JhbCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u
Lg0KPiANCj4gVGhpcyBpcyBvbmx5IGEgcXVlc3Rpb24gYWJvdXQgd2hpY2ggQVBJIHRoZSBjb21t
dW5pdHkgcHJlZmVycy4gSSB3aWxsIG5vdCBjaGFuZ2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIHJ0
ZV9tZW1jcHkoKSB3aXRoIHRoaXMgcGF0Y2ggLQ0KPiBpdCdzIGFub3RoZXIgam9iIHRvIGRvIHRo
YXQuDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4NCj4gPiA+Pg0KPiA+ID4+DQo+ID4gPj4+IFdoaWxl
IHdvcmtpbmcgb24gdGhlc2UgZnVudGlvbnMsIEkgZXhwZXJpbWVudGVkIHdpdGggYW4NCj4gPiA+
PiBydGVfbWVtY3B5X250KCkgdGFraW5nIGZsYWdzLCB3aGljaCBpcyBhbHNvIG15IHBlcnNvbmFs
IHByZWZlcmVuY2UsDQo+ID4gYnV0DQo+ID4gPj4gaGF2ZW4ndCBzdWNjZWVkIHlldC4gRXNwZWNp
YWxseSB3aGVuIGNvcHlpbmcgYSAxNiBieXRlIGFsaWduZWQNCj4gPiA+PiBzdHJ1Y3R1cmUgb2Yg
b25seSAxNiBieXRlLCB0aGUgb3ZlcmhlYWQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgKw0KPiA+ID4+
IGNvbXBhcmluZyB0aGUgZmxhZ3MgKyB0aGUgY29weSBsb29wIG92ZXJoZWFkIGlzIHNpZ25pZmlj
YW50LA0KPiA+IGNvbXBhcmVkDQo+ID4gPj4gdG8gaW5saW5lIGNvZGUgY29uc2lzdGluZyBvZiBv
bmx5IG9uZSBwYWlyIG9mICJtb3ZudGRxYQ0KPiA+ICglcnNpKSwleG1tMDsNCj4gPiA+PiBtb3Zu
dGRxICV4bW0wLCglcmRpKSIgaW5zdHJ1Y3Rpb25zLg0KPiA+ID4+Pg0KPiA+ID4+PiBSZW1lbWJl
ciB0aGF0IGEgbm9uLWlubGluZWQgcnRlX21lbWNweV9udCgpIHdpbGwgYmUgY2FsbGVkIHdpdGgN
Cj4gPiB2ZXJ5DQo+ID4gPj4gdmFyeWluZyBzaXplLCBkdWUgdG8gdGhlIHR5cGljYWwgbWl4IG9m
IHNtYWxsIGFuZCBiaWcgcGFja2V0cywgc28NCj4gPiA+PiBicmFuY2ggcHJlZGljdGlvbiB3aWxs
IG5vdCBoZWxwLg0KPiA+ID4+Pg0KPiA+ID4+PiBUaGlzIFJGQyBkb2VzIG5vdCB5ZXQgc2hvdyB0
aGUgcnRlX21lbWNweV9udCgpIGZ1bmN0aW9uIGhhbmRsaW5nDQo+ID4gPj4gdW5hbGlnbmVkIGxv
YWQvc3RvcmUsIGJ1dCBpdCBpcyBtb3JlIGNvbXBsZXggdGhhbiB0aGUgYWxpZ25lZA0KPiA+ID4+
IGZ1bmN0aW9ucy4gU28gSSB0aGluayB0aGUgYWxpZ25lZCB2YXJpYW50cyBhcmUgd2FycmFudGVk
IC0gZm9yDQo+ID4gPj4gcGVyZm9ybWFuY2UgcmVhc29ucy4NCj4gPiA+Pj4NCj4gPiA+Pj4gU29t
ZSBvZiB0aGUgbmVlZCBmb3IgZXhwb3NpbmcgaW5kaXZpZHVhbCBmdW5jdGlvbnMgZm9yIGRpZmZl
cmVudA0KPiA+ID4+IGFsaWdubWVudCBzdGVtcyBmcm9tIHRoZSBjb21waWxlciBiZWluZyB1bmFi
bGUgdG8gZGV0ZXJtaW5lIHRoZQ0KPiA+ID4+IGFsaWdubWVudCBvZiB0aGUgc291cmNlIGFuZCBk
ZXN0aW5hdGlvbiBwb2ludGVycyBhdCBidWlsZCB0aW1lLiBTbw0KPiA+IHdlDQo+ID4gPj4gbmVl
ZCB0byBoZWxwIHRoZSBjb21waWxlciB3aXRoIHRoaXMgYXQgYnVpbGQgdGltZSwgYW5kIHRodXMg
dGhlIG5lZWQNCj4gPiA+PiBmb3IgaW5saW5pbmcgdGhlIGZ1bmN0aW9uLiBJZiB3ZSBleHBvc2Ug
YSBidW5jaCBvZiBzbWFsbCBpbmxpbmUNCj4gPiA+PiBmdW5jdGlvbnMgb3IgYSBiaWcgaW5saW5l
IGZ1bmN0aW9uIHdpdGggZmxhZ3Mgc2VlbXMgdG8gYmUgYSBtYXR0ZXINCj4gPiBvZg0KPiA+ID4+
IHRhc3RlLg0KPiA+ID4+Pg0KPiA+ID4+PiBUaGlua2luZyBhYm91dCBpdCwgeW91IGFyZSBwcm9i
YWJseSByaWdodCB0aGF0IGV4cG9zaW5nIGEgc2luZ2xlDQo+ID4gPj4gZnVuY3Rpb24gd2l0aCBm
bGFncyBpcyBiZXR0ZXIgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMgYW5kIGVhc2llcg0KPiA+
IGZvcg0KPiA+ID4+IG90aGVyIGFyY2hpdGVjdHVyZXMgdG8gaW1wbGVtZW50LiBCdXQgaXQgc3Rp
bGwgbmVlZHMgdG8gYmUgaW5saW5lLA0KPiA+IGZvcg0KPiA+ID4+IHRoZSByZWFzb25zIGRlc2Ny
aWJlZCBhYm92ZS4NCj4gPiA+Pg0KPiA+ID4+DQo+ID4gPj4gT2ssIG15IGluaXRpYWwgdGhvdWdo
dCB3YXMgdGhhdCBtYWluIHVzZS1jYXNlIGZvciBpdCB3b3VsZCBiZQ0KPiA+IGNvcHlpbmcNCj4g
PiA+PiBvZg0KPiA+ID4+IGJpZyBjaHVua3Mgb2YgZGF0YSwgYnV0IGZyb20geW91ciBkZXNjcmlw
dGlvbiBpdCBtaWdodCBub3QgYmUgdGhlDQo+ID4gY2FzZS4NCj4gPiA+DQo+ID4gPiBUaGlzIGlz
IGZvciBxdWlja2x5IGNvcHlpbmcgcmVsYXRpdmVseSBzbWFsbCBwaWVjZXMgb2YgZGF0YQ0KPiA+
IHN5bmNocm9ub3VzbHkgd2l0aG91dCBwb2xsdXRpbmcgdGhlIENQVXMgZGF0YSBjYWNoZSwgZS5n
LiBqdXN0IGJlZm9yZQ0KPiA+IHBhc3Npbmcgb24gYSBwYWNrZXQgdG8gYW4gRXRoZXJuZXQgUE1E
IGZvciB0cmFuc21pc3Npb24uDQo+ID4gPg0KPiA+ID4gQmlnIGNodW5rcyBvZiBkYXRhIHNob3Vs
ZCBiZSBjb3BpZWQgYXN5bmNocm9ub3VzbHkgYnkgRE1BLg0KPiA+ID4NCj4gPiA+PiBZZXMsIGZv
ciBqdXN0IDE2LzMyQiBjb3B5IGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQgbWlnaHQgYmUgd2F5IHRv
bw0KPiA+ID4+IGhpZ2guLi4NCj4gPiA+PiBBcyBhbm90aGVyIGFsdGVybmF0aXZlIC0gd291bGQg
bWVtY3B5X250X2J1bGsoKSBoZWxwIHNvbWVob3c/DQo+ID4gPj4gSXQgY2FuIGRvIGNvcHlpbmcg
Zm9yIHRoZSBzZXZlcmFsIHNyYy9kc3QgcGFpcnMgYXQgb25jZSBhbmQNCj4gPiA+PiB0aGF0IG1p
Z2h0IGhlbHAgdG8gYW1vcnRpemUgY29zdCBvZiBmdW5jdGlvbiBjYWxsLg0KPiA+ID4NCj4gPiA+
IEluIG1hbnkgY2FzZXMsIG1lbWNweV9udCgpIHdpbGwgcmVwbGFjZSBtZW1jcHkoKSBpbnNpZGUg
bG9vcHMsIHNvIGl0DQo+ID4gc2hvdWxkIGJlIGp1c3QgYXMgZWFzeSB0byB1c2UgYXMgbWVtY3B5
KCkuIEUuZy4gbG9vayBhdA0KPiA+IHJ0ZV9wa3RtYnVmX2NvcHkoKS4uLiBCdWlsZGluZyBhIG1l
bWNvcHkgYXJyYXkgdG8gcGFzcyB0bw0KPiA+IG1lbWNweV9udF9idWxrKCkgZnJvbSBydGVfcGt0
bWJ1Zl9jb3B5KCkgd291bGQgcmVxdWlyZSBhIHNpZ25pZmljYW50DQo+ID4gcmV3cml0ZSBvZiBy
dGVfcGt0bWJ1Zl9jb3B5KCksIGNvbXBhcmVkIHRvIGp1c3QgcmVwbGFjaW5nIHJ0ZV9tZW1jcHko
KQ0KPiA+IHdpdGggcnRlX21lbWNweV9udCgpLiBBbmQgdGhpcyBpcyBqdXN0IG9uZSBmdW5jdGlv
biB1c2luZyBtZW1jcHkoKS4NCj4gPg0KPiA+IEFjdHVhbGx5LCBvbmUgcXVlc3Rpb24gSSBoYXZl
IGZvciBzdWNoIHNtYWxsIGRhdGEtdHJhbnNmZXINCj4gPiAoMTZCIHBlciBwYWNrZXQpIC0gZG8g
eW91IHN0aWxsIHNlZSBzb21lIG5vdGljYWJsZSBwZXJmb21hbmNlDQo+ID4gaW1wcm92ZW1lbnQg
Zm9yIHN1Y2ggc2NlbmFyaW8/DQo+IA0KPiBDb3B5aW5nIDE2IGJ5dGUgZnJvbSBlYWNoIHBhY2tl
dCBpbiBhIGJ1cnN0IG9mIDMyIHBhY2tldHMgd291bGQgb3RoZXJ3aXNlIHBvbGx1dGUgNjQgY2Fj
aGUgbGluZXMgPSA0IEtCIGNhY2hlLiBXaXRoIHR5cGljYWxseSA2NCBLQiBMMQ0KPiBjYWNoZSwg
SSB0aGluayBpdCBtYWtlcyBhIGRpZmZlcmVuY2UuDQoNCkkgdW5kZXJzdGFuZCB0aGUgaW50ZW50
aW9uIGJlaGluZCwgbXkgcXVlc3Rpb24gd2FzIC0gaXQgaXMgcmVhbGx5IG1lYXN1cmFibGU/DQpT
b21ldGhpbmcgbGlrZTogdXNpbmcgcGt0bWJ1Zl9jb3B5X250KGxlbj0xNikgb3ZlciB1c2luZyBw
a3RtYnVmX2NvcHkobGVuPTE2KQ0Kb24gd29ya2xvYWQgWCBnaXZlcyBZJSB0aG91Z2h0cHV0IGlt
cHJvdmVtZW50Pw0KDQo+IA0KPiA+IEFub3RoZXIgcXVlc3Rpb24gLSB3aG8gd2lsbCBkbyAnc2Zl
bmNlJyBhZnRlciB0aGUgY29weWluZz8NCj4gPiBXb3VsZCBpdCBiZSBpbnNpZGUgbWVtY3B5X250
IChzZWVtcyBxdWl0ZSBjb3N0bHkpLCBvciB3b3VsZA0KPiA+IGl0IGJlIGFub3RoZXIgQVBJIGZ1
bmN0aW9uIGZvciB0aGF0OiBtZW1jcHlfbnRfZmx1c2goKSBvciBzbz8NCj4gDQo+IE91dHNpZGUu
IE9ubHkgdGhlIGRldmVsb3BlciBrbm93cyB3aGVuIGl0IGlzIHJlcXVpcmVkLCBzbyBpdCB3b3Vs
ZG4ndCBtYWtlIGFueSBzZW5zZSB0byBhZGQgdGhlIGNvc3QgaW5zaWRlIG1lbWNweV9udCgpLg0K
PiANCj4gSSBkb24ndCB0aGluayB3ZSBzaG91bGQgYWRkIGEgZmx1c2ggZnVuY3Rpb247IGl0IHdv
dWxkIGp1c3QgYmUgYW5vdGhlciBuYW1lIGZvciBhbiBhbHJlYWR5IGV4aXN0aW5nIGZ1bmN0aW9u
LiBSZWZlcnJpbmcgdG8gdGhlIHJlcXVpcmVkDQo+IG9wZXJhdGlvbiBpbiB0aGUgbWVtY3B5X250
KCkgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbiBzaG91bGQgc3VmZmljZS4NCj4gDQo+ID4NCj4gPiA+
Pg0KPiA+ID4+DQo+ID4gPj4+DQo+ID4gPj4+Pg0KPiA+ID4+Pj4NCj4gPiA+Pj4+PiBbMV0gaHR0
cHM6Ly93d3cuaW50ZWwuY29tL2NvbnRlbnQvd3d3L3VzL2VuL2RvY3MvaW50cmluc2ljcy0NCj4g
PiA+Pj4+IGd1aWRlL2luZGV4Lmh0bWwjdGV4dD1fbW1fc3RyZWFtX2xvYWQNCj4gPiA+Pj4+PiBb
Ml0gaHR0cHM6Ly9kZXZlbG9wZXIuYXJtLmNvbS9kb2N1bWVudGF0aW9uLzEwMDA3Ni8wMTAwL0E2
NC0NCj4gPiA+Pj4+IEluc3RydWN0aW9uLVNldC1SZWZlcmVuY2UvQTY0LUZsb2F0aW5nLXBvaW50
LUluc3RydWN0aW9ucy9MRE5QLS0NCj4gPiA+PiBTSU1ELQ0KPiA+ID4+Pj4gYW5kLUZQLQ0KPiA+
ID4+Pj4+DQo+ID4gPj4+Pj4gVjI6DQo+ID4gPj4+Pj4gLSBPbmx5IGNvcHkgZnJvbSBub24tdGVt
cG9yYWwgc291cmNlIHRvIG5vbi10ZW1wb3JhbCBkZXN0aW5hdGlvbi4NCj4gPiA+Pj4+PiAgICAg
IEkuZS4gcmVtb3ZlIHRoZSB0d28gdmFyaWFudHMgd2l0aCBvbmx5IHNvdXJjZSBhbmQvb3INCj4g
PiA+PiBkZXN0aW5hdGlvbg0KPiA+ID4+Pj4gYmVpbmcNCj4gPiA+Pj4+PiAgICAgIG5vbi10ZW1w
b3JhbC4NCj4gPiA+Pj4+PiAtIERvIG5vdCByZXF1aXJlIGFsaWdubWVudC4NCj4gPiA+Pj4+PiAg
ICAgIEluc3RlYWQsIG9mZmVyIGFkZGl0aW9uYWwgNCBhbmQgMTYgYnl0ZSBhbGlnbmVkIGZ1bmN0
aW9ucw0KPiA+IGZvcg0KPiA+ID4+Pj4gcGVyZm9ybWFuY2UNCj4gPiA+Pj4+PiAgICAgIHB1cnBv
c2VzLg0KPiA+ID4+Pj4+IC0gSW1wbGVtZW50ZWQgdHdvIG9mIHRoZSBmdW5jdGlvbnMgZm9yIHg4
Ni4NCj4gPiA+Pj4+PiAtIFJlbW92ZSBtZW1zZXQgZnVuY3Rpb24uDQo+ID4gPj4+Pj4NCj4gPiA+
Pj4+PiBTaWduZWQtb2ZmLWJ5OiBNb3J0ZW4gQnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3RlbXMu
Y29tPg0KPiA+ID4+Pj4+IC0tLQ0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gLyoqDQo+ID4gPj4+Pj4g
ICAgICogQHdhcm5pbmcNCj4gPiA+Pj4+PiAgICAgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJ
IG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4gPj4+Pj4gICAgICoNCj4gPiA+
Pj4+PiAgICAgKiBDb3B5IGRhdGEgZnJvbSBub24tdGVtcG9yYWwgc291cmNlIHRvIG5vbi10ZW1w
b3JhbA0KPiA+ID4+IGRlc3RpbmF0aW9uLg0KPiA+ID4+Pj4+ICAgICAqDQo+ID4gPj4+Pj4gICAg
ICogQHBhcmFtIGRzdA0KPiA+ID4+Pj4+ICAgICAqICAgUG9pbnRlciB0byB0aGUgbm9uLXRlbXBv
cmFsIGRlc3RpbmF0aW9uIG9mIHRoZSBkYXRhLg0KPiA+ID4+Pj4+ICAgICAqICAgU2hvdWxkIGJl
IDQgYnl0ZSBhbGlnbmVkLCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS4NCj4gPiA+Pj4+PiAgICAg
KiBAcGFyYW0gc3JjDQo+ID4gPj4+Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9y
YWwgc291cmNlIGRhdGEuDQo+ID4gPj4+Pj4gICAgICogICBObyBhbGlnbm1lbnQgcmVxdWlyZW1l
bnRzLg0KPiA+ID4+Pj4+ICAgICAqIEBwYXJhbSBsZW4NCj4gPiA+Pj4+PiAgICAgKiAgIE51bWJl
ciBvZiBieXRlcyB0byBjb3B5Lg0KPiA+ID4+Pj4+ICAgICAqICAgU2hvdWxkIGJlIGJlIGRpdmlz
aWJsZSBieSA0LCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS4NCj4gPiA+Pj4+PiAgICAgKi8NCj4g
PiA+Pj4+PiBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+Pj4+PiBzdGF0aWMgX19ydGVfYWx3YXlz
X2lubGluZQ0KPiA+ID4+Pj4+IF9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fKDEsIDIpLCBfX2Fj
Y2Vzc19fKHdyaXRlX29ubHksIDEsIDMpLA0KPiA+ID4+Pj4gX19hY2Nlc3NfXyhyZWFkX29ubHks
IDIsIDMpKSkNCj4gPiA+Pj4+PiB2b2lkIHJ0ZV9tZW1jcHlfbnQodm9pZCAqIF9fcnRlX3Jlc3Ry
aWN0IGRzdCwgY29uc3Qgdm9pZCAqDQo+ID4gPj4+PiBfX3J0ZV9yZXN0cmljdCBzcmMsIHNpemVf
dCBsZW4pDQo+ID4gPj4+Pj4gLyogSW1wbGVtZW50YXRpb24gVC5CLkQuICovDQo+ID4gPj4+Pj4N
Cj4gPiA+Pj4+PiAvKioNCj4gPiA+Pj4+PiAgICAgKiBAd2FybmluZw0KPiA+ID4+Pj4+ICAgICAq
IEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGlj
ZS4NCj4gPiA+Pj4+PiAgICAgKg0KPiA+ID4+Pj4+ICAgICAqIENvcHkgZGF0YSBpbiBibG9ja3Mg
b2YgMTYgYnl0ZSBmcm9tIGFsaWduZWQgbm9uLXRlbXBvcmFsDQo+ID4gPj4gc291cmNlDQo+ID4g
Pj4+Pj4gICAgICogdG8gYWxpZ25lZCBub24tdGVtcG9yYWwgZGVzdGluYXRpb24uDQo+ID4gPj4+
Pj4gICAgICoNCj4gPiA+Pj4+PiAgICAgKiBAcGFyYW0gZHN0DQo+ID4gPj4+Pj4gICAgICogICBQ
b2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgZGVzdGluYXRpb24gb2YgdGhlIGRhdGEuDQo+ID4g
Pj4+Pj4gICAgICogICBNdXN0IGJlIDE2IGJ5dGUgYWxpZ25lZC4NCj4gPiA+Pj4+PiAgICAgKiBA
cGFyYW0gc3JjDQo+ID4gPj4+Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwg
c291cmNlIGRhdGEuDQo+ID4gPj4+Pj4gICAgICogICBNdXN0IGJlIDE2IGJ5dGUgYWxpZ25lZC4N
Cj4gPiA+Pj4+PiAgICAgKiBAcGFyYW0gbGVuDQo+ID4gPj4+Pj4gICAgICogICBOdW1iZXIgb2Yg
Ynl0ZXMgdG8gY29weS4NCj4gPiA+Pj4+PiAgICAgKiAgIE11c3QgYmUgZGl2aXNpYmxlIGJ5IDE2
Lg0KPiA+ID4+Pj4+ICAgICAqLw0KPiA+ID4+Pj4+IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ID4+
Pj4+IHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lDQo+ID4gPj4+Pj4gX19hdHRyaWJ1dGVfXygo
X19ub25udWxsX18oMSwgMiksIF9fYWNjZXNzX18od3JpdGVfb25seSwgMSwgMyksDQo+ID4gPj4+
PiBfX2FjY2Vzc19fKHJlYWRfb25seSwgMiwgMykpKQ0KPiA+ID4+Pj4+IHZvaWQgcnRlX21lbWNw
eV9udDE2YSh2b2lkICogX19ydGVfcmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkICoNCj4gPiA+Pj4+
IF9fcnRlX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbikNCj4gPiA+Pj4+PiB7DQo+ID4gPj4+Pj4g
ICAgICAgIGNvbnN0IHZvaWQgKiBjb25zdCAgZW5kID0gUlRFX1BUUl9BREQoc3JjLCBsZW4pOw0K
PiA+ID4+Pj4+DQo+ID4gPj4+Pj4gICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWduZWQoZHN0
LCBzaXplb2YoX19tMTI4aSkpKTsNCj4gPiA+Pj4+PiAgICAgICAgUlRFX0FTU0VSVChydGVfaXNf
YWxpZ25lZChzcmMsIHNpemVvZihfX20xMjhpKSkpOw0KPiA+ID4+Pj4+ICAgICAgICBSVEVfQVNT
RVJUKHJ0ZV9pc19hbGlnbmVkKGxlbiwgc2l6ZW9mKF9fbTEyOGkpKSk7DQo+ID4gPj4+Pj4NCj4g
PiA+Pj4+PiAgICAgICAgLyogQ29weSBsYXJnZSBwb3J0aW9uIG9mIGRhdGEuICovDQo+ID4gPj4+
Pj4gICAgICAgIHdoaWxlIChSVEVfUFRSX0RJRkYoZW5kLCBzcmMpID49IDQgKiBzaXplb2YoX19t
MTI4aSkpIHsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHJlZ2lzdGVyIF9fbTEyOGkgICAgeG1tMCwg
eG1tMSwgeG1tMiwgeG1tMzsNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+IC8qIE5vdGU6IFdvcmthcm91
bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtpbmcgYQ0KPiA+IGNvbnN0DQo+
ID4gPj4+PiBwb2ludGVyIGFzIHBhcmFtZXRlci4gKi8NCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBk
aWFnbm9zdGljIHB1c2gNCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XZGlzY2FyZGVkLXF1YWxpZmllcnMiDQo+ID4gPj4+Pj4gICAgICAgICAgICB4bW0wID0gX21t
X3N0cmVhbV9sb2FkX3NpMTI4KFJURV9QVFJfQUREKHNyYywgMCAqDQo+ID4gPj4+PiBzaXplb2Yo
X19tMTI4aSkpKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHhtbTEgPSBfbW1fc3RyZWFtX2xvYWRf
c2kxMjgoUlRFX1BUUl9BREQoc3JjLCAxICoNCj4gPiA+Pj4+IHNpemVvZihfX20xMjhpKSkpOw0K
PiA+ID4+Pj4+ICAgICAgICAgICAgeG1tMiA9IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChSVEVfUFRS
X0FERChzcmMsIDIgKg0KPiA+ID4+Pj4gc2l6ZW9mKF9fbTEyOGkpKSk7DQo+ID4gPj4+Pj4gICAg
ICAgICAgICB4bW0zID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KFJURV9QVFJfQUREKHNyYywgMyAq
DQo+ID4gPj4+PiBzaXplb2YoX19tMTI4aSkpKTsNCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFn
bm9zdGljIHBvcA0KPiA+ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTEyOChSVEVfUFRS
X0FERChkc3QsIDAgKg0KPiA+IHNpemVvZihfX20xMjhpKSksDQo+ID4gPj4+PiB4bW0wKTsNCj4g
PiA+Pj4+PiAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kxMjgoUlRFX1BUUl9BREQoZHN0LCAxICoN
Cj4gPiBzaXplb2YoX19tMTI4aSkpLA0KPiA+ID4+Pj4geG1tMSk7DQo+ID4gPj4+Pj4gICAgICAg
ICAgICBfbW1fc3RyZWFtX3NpMTI4KFJURV9QVFJfQUREKGRzdCwgMiAqDQo+ID4gc2l6ZW9mKF9f
bTEyOGkpKSwNCj4gPiA+Pj4+IHhtbTIpOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVh
bV9zaTEyOChSVEVfUFRSX0FERChkc3QsIDMgKg0KPiA+IHNpemVvZihfX20xMjhpKSksDQo+ID4g
Pj4+PiB4bW0zKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHNyYyA9IFJURV9QVFJfQUREKHNyYywg
NCAqIHNpemVvZihfX20xMjhpKSk7DQo+ID4gPj4+Pj4gICAgICAgICAgICBkc3QgPSBSVEVfUFRS
X0FERChkc3QsIDQgKiBzaXplb2YoX19tMTI4aSkpOw0KPiA+ID4+Pj4+ICAgICAgICB9DQo+ID4g
Pj4+Pj4NCj4gPiA+Pj4+PiAgICAgICAgLyogQ29weSByZW1haW5pbmcgZGF0YS4gKi8NCj4gPiA+
Pj4+PiAgICAgICAgd2hpbGUgKHNyYyAhPSBlbmQpIHsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHJl
Z2lzdGVyIF9fbTEyOGkgICAgeG1tOw0KPiA+ID4+Pj4+DQo+ID4gPj4+Pj4gLyogTm90ZTogV29y
a2Fyb3VuZCBmb3IgX21tX3N0cmVhbV9sb2FkX3NpMTI4KCkgbm90IHRha2luZyBhDQo+ID4gY29u
c3QNCj4gPiA+Pj4+IHBvaW50ZXIgYXMgcGFyYW1ldGVyLiAqLw0KPiA+ID4+Pj4+ICNwcmFnbWEg
R0NDIGRpYWdub3N0aWMgcHVzaA0KPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdkaXNjYXJkZWQtcXVhbGlmaWVycyINCj4gPiA+Pj4+PiAgICAgICAgICAgIHhtbSA9
IF9tbV9zdHJlYW1fbG9hZF9zaTEyOChzcmMpOw0KPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgcG9wDQo+ID4gPj4+Pj4gICAgICAgICAgICBfbW1fc3RyZWFtX3NpMTI4KGRzdCwgeG1t
KTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIHNyYyA9IFJURV9QVFJfQUREKHNyYywgc2l6ZW9mKF9f
bTEyOGkpKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIGRzdCA9IFJURV9QVFJfQUREKGRzdCwgc2l6
ZW9mKF9fbTEyOGkpKTsNCj4gPiA+Pj4+PiAgICAgICAgfQ0KPiA+ID4+Pj4+IH0NCj4gPiA+Pj4+
Pg0KPiA+ID4+Pj4+IC8qKg0KPiA+ID4+Pj4+ICAgICAqIEB3YXJuaW5nDQo+ID4gPj4+Pj4gICAg
ICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90
aWNlLg0KPiA+ID4+Pj4+ICAgICAqDQo+ID4gPj4+Pj4gICAgICogQ29weSBkYXRhIGluIGJsb2Nr
cyBvZiA0IGJ5dGUgZnJvbSBhbGlnbmVkIG5vbi10ZW1wb3JhbA0KPiA+IHNvdXJjZQ0KPiA+ID4+
Pj4+ICAgICAqIHRvIGFsaWduZWQgbm9uLXRlbXBvcmFsIGRlc3RpbmF0aW9uLg0KPiA+ID4+Pj4+
ICAgICAqDQo+ID4gPj4+Pj4gICAgICogQHBhcmFtIGRzdA0KPiA+ID4+Pj4+ICAgICAqICAgUG9p
bnRlciB0byB0aGUgbm9uLXRlbXBvcmFsIGRlc3RpbmF0aW9uIG9mIHRoZSBkYXRhLg0KPiA+ID4+
Pj4+ICAgICAqICAgTXVzdCBiZSA0IGJ5dGUgYWxpZ25lZC4NCj4gPiA+Pj4+PiAgICAgKiBAcGFy
YW0gc3JjDQo+ID4gPj4+Pj4gICAgICogICBQb2ludGVyIHRvIHRoZSBub24tdGVtcG9yYWwgc291
cmNlIGRhdGEuDQo+ID4gPj4+Pj4gICAgICogICBNdXN0IGJlIDQgYnl0ZSBhbGlnbmVkLg0KPiA+
ID4+Pj4+ICAgICAqIEBwYXJhbSBsZW4NCj4gPiA+Pj4+PiAgICAgKiAgIE51bWJlciBvZiBieXRl
cyB0byBjb3B5Lg0KPiA+ID4+Pj4+ICAgICAqICAgTXVzdCBiZSBkaXZpc2libGUgYnkgNC4NCj4g
PiA+Pj4+PiAgICAgKi8NCj4gPiA+Pj4+PiBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+Pj4+PiBz
dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZQ0KPiA+ID4+Pj4+IF9fYXR0cmlidXRlX18oKF9fbm9u
bnVsbF9fKDEsIDIpLCBfX2FjY2Vzc19fKHdyaXRlX29ubHksIDEsIDMpLA0KPiA+ID4+Pj4gX19h
Y2Nlc3NfXyhyZWFkX29ubHksIDIsIDMpKSkNCj4gPiA+Pj4+PiB2b2lkIHJ0ZV9tZW1jcHlfbnQ0
YSh2b2lkICogX19ydGVfcmVzdHJpY3QgZHN0LCBjb25zdCB2b2lkICoNCj4gPiA+Pj4+IF9fcnRl
X3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbikNCj4gPiA+Pj4+PiB7DQo+ID4gPj4+Pj4gICAgICAg
IGludDMyX3QgICAgICAgICAgICAgYnVmW3NpemVvZihfX20xMjhpKSAvIHNpemVvZihpbnQzMl90
KV0NCj4gPiA+Pj4+IF9fcnRlX2FsaWduZWQoc2l6ZW9mKF9fbTEyOGkpKTsNCj4gPiA+Pj4+PiAg
ICAgICAgLyoqIEFkZHJlc3Mgb2Ygc291cmNlIGRhdGEsIHJvdW5kZWQgZG93biB0byBhY2hpZXZl
DQo+ID4gPj4gYWxpZ25tZW50Lg0KPiA+ID4+Pj4gKi8NCj4gPiA+Pj4+PiAgICAgICAgY29uc3Qg
dm9pZCAqICAgICAgICBzcmNhID0gUlRFX1BUUl9BTElHTl9GTE9PUihzcmMsDQo+ID4gPj4+PiBz
aXplb2YoX19tMTI4aSkpOw0KPiA+ID4+Pj4+ICAgICAgICAvKiogQWRkcmVzcyBvZiBlbmQgb2Yg
c291cmNlIGRhdGEsIHJvdW5kZWQgZG93biB0byBhY2hpZXZlDQo+ID4gPj4+PiBhbGlnbm1lbnQu
ICovDQo+ID4gPj4+Pj4gICAgICAgIGNvbnN0IHZvaWQgKiBjb25zdCAgc3JjZW5kYSA9DQo+ID4g
Pj4+PiBSVEVfUFRSX0FMSUdOX0ZMT09SKFJURV9QVFJfQUREKHNyYywgbGVuKSwgc2l6ZW9mKF9f
bTEyOGkpKTsNCj4gPiA+Pj4+PiAgICAgICAgY29uc3QgaW50ICAgICAgICAgICBvZmZzZXQgPSAg
UlRFX1BUUl9ESUZGKHNyYywgc3JjYSkgLw0KPiA+ID4+Pj4gc2l6ZW9mKGludDMyX3QpOw0KPiA+
ID4+Pj4+ICAgICAgICByZWdpc3RlciBfX20xMjhpICAgIHhtbTA7DQo+ID4gPj4+Pj4NCj4gPiA+
Pj4+PiAgICAgICAgUlRFX0FTU0VSVChydGVfaXNfYWxpZ25lZChkc3QsIHNpemVvZihpbnQzMl90
KSkpOw0KPiA+ID4+Pj4+ICAgICAgICBSVEVfQVNTRVJUKHJ0ZV9pc19hbGlnbmVkKHNyYywgc2l6
ZW9mKGludDMyX3QpKSk7DQo+ID4gPj4+Pj4gICAgICAgIFJURV9BU1NFUlQocnRlX2lzX2FsaWdu
ZWQobGVuLCBzaXplb2YoaW50MzJfdCkpKTsNCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4+ICAgICAgICBp
ZiAodW5saWtlbHkobGVuID09IDApKSByZXR1cm47DQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiAgICAg
ICAgLyogQ29weSBmaXJzdCwgbm9uLV9fbTEyOGkgYWxpZ25lZCwgcGFydCBvZiBzb3VyY2UgZGF0
YS4NCj4gPiAqLw0KPiA+ID4+Pj4+ICAgICAgICBpZiAob2Zmc2V0KSB7DQo+ID4gPj4+Pj4gLyog
Tm90ZTogV29ya2Fyb3VuZCBmb3IgX21tX3N0cmVhbV9sb2FkX3NpMTI4KCkgbm90IHRha2luZyBh
DQo+ID4gY29uc3QNCj4gPiA+Pj4+IHBvaW50ZXIgYXMgcGFyYW1ldGVyLiAqLw0KPiA+ID4+Pj4+
ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaA0KPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdkaXNjYXJkZWQtcXVhbGlmaWVycyINCj4gPiA+Pj4+PiAgICAgICAg
ICAgIHhtbTAgPSBfbW1fc3RyZWFtX2xvYWRfc2kxMjgoc3JjYSk7DQo+ID4gPj4+Pj4gICAgICAg
ICAgICBfbW1fc3RvcmVfc2kxMjgoKHZvaWQgKilidWYsIHhtbTApOw0KPiA+ID4+Pj4+ICNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4gPj4+Pj4gICAgICAgICAgICBzd2l0Y2ggKG9mZnNl
dCkgew0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgIGNhc2UgMToNCj4gPiA+Pj4+PiAgICAgICAg
ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqDQo+ID4gPj4+
PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMV0pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAg
ICBpZiAodW5saWtlbHkobGVuID09IDEgKiBzaXplb2YoaW50MzJfdCkpKQ0KPiA+IHJldHVybjsN
Cj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQURE
KGRzdCwgMSAqDQo+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMl0pOw0KPiA+ID4+Pj4+
ICAgICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHkobGVuID09IDIgKiBzaXplb2YoaW50MzJf
dCkpKQ0KPiA+IHJldHVybjsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0cmVh
bV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMiAqDQo+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBi
dWZbM10pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+Pj4+PiAg
ICAgICAgICAgICAgICBjYXNlIDI6DQo+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIF9tbV9z
dHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDAgKg0KPiA+ID4+Pj4gc2l6ZW9mKGludDMyX3Qp
KSwgYnVmWzJdKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KGxl
biA9PSAxICogc2l6ZW9mKGludDMyX3QpKSkNCj4gPiByZXR1cm47DQo+ID4gPj4+Pj4gICAgICAg
ICAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDEgKg0KPiA+ID4+
Pj4gc2l6ZW9mKGludDMyX3QpKSwgYnVmWzNdKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQo+ID4gPj4+Pj4gICAgICAgICAgICAgICAgY2FzZSAzOg0KPiA+ID4+Pj4+ICAg
ICAgICAgICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAwICoNCj4g
PiA+Pj4+IHNpemVvZihpbnQzMl90KSksIGJ1ZlszXSk7DQo+ID4gPj4+Pj4gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgfQ0KPiA+ID4+Pj4+ICAgICAgICAg
ICAgc3JjYSA9IFJURV9QVFJfQUREKHNyY2EsICg0IC0gb2Zmc2V0KSAqDQo+ID4gc2l6ZW9mKGlu
dDMyX3QpKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgIGRzdCA9IFJURV9QVFJfQUREKGRzdCwgKDQg
LSBvZmZzZXQpICoNCj4gPiBzaXplb2YoaW50MzJfdCkpOw0KPiA+ID4+Pj4+ICAgICAgICB9DQo+
ID4gPj4+Pj4NCj4gPiA+Pj4+PiAgICAgICAgLyogQ29weSBtaWRkbGUsIF9fbTEyOGkgYWxpZ25l
ZCwgcGFydCBvZiBzb3VyY2UgZGF0YS4gKi8NCj4gPiA+Pj4+PiAgICAgICAgd2hpbGUgKHNyY2Eg
IT0gc3JjZW5kYSkgew0KPiA+ID4+Pj4+IC8qIE5vdGU6IFdvcmthcm91bmQgZm9yIF9tbV9zdHJl
YW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtpbmcgYQ0KPiA+IGNvbnN0DQo+ID4gPj4+PiBwb2ludGVy
IGFzIHBhcmFtZXRlci4gKi8NCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gN
Cj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGlzY2FyZGVkLXF1
YWxpZmllcnMiDQo+ID4gPj4+Pj4gICAgICAgICAgICB4bW0wID0gX21tX3N0cmVhbV9sb2FkX3Np
MTI4KHNyY2EpOw0KPiA+ID4+Pj4+ICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wDQo+ID4gPj4+
Pj4gICAgICAgICAgICBfbW1fc3RvcmVfc2kxMjgoKHZvaWQgKilidWYsIHhtbTApOw0KPiA+ID4+
Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMCAqIHNpemVv
ZihpbnQzMl90KSksDQo+ID4gPj4+PiBidWZbMF0pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgX21t
X3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqIHNpemVvZihpbnQzMl90KSksDQo+ID4g
Pj4+PiBidWZbMV0pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9Q
VFJfQUREKGRzdCwgMiAqIHNpemVvZihpbnQzMl90KSksDQo+ID4gPj4+PiBidWZbMl0pOw0KPiA+
ID4+Pj4+ICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMyAqIHNp
emVvZihpbnQzMl90KSksDQo+ID4gPj4+PiBidWZbM10pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAg
c3JjYSA9IFJURV9QVFJfQUREKHNyY2EsIHNpemVvZihfX20xMjhpKSk7DQo+ID4gPj4+Pj4gICAg
ICAgICAgICBkc3QgPSBSVEVfUFRSX0FERChkc3QsIDQgKiBzaXplb2YoaW50MzJfdCkpOw0KPiA+
ID4+Pj4+ICAgICAgICB9DQo+ID4gPj4+Pj4NCj4gPiA+Pj4+PiAgICAgICAgLyogQ29weSBsYXN0
LCBub24tX19tMTI4aSBhbGlnbmVkLCBwYXJ0IG9mIHNvdXJjZSBkYXRhLiAqLw0KPiA+ID4+Pj4+
ICAgICAgICBpZiAoUlRFX1BUUl9ESUZGKHNyY2EsIHNyYykgIT0gNCkgew0KPiA+ID4+Pj4+IC8q
IE5vdGU6IFdvcmthcm91bmQgZm9yIF9tbV9zdHJlYW1fbG9hZF9zaTEyOCgpIG5vdCB0YWtpbmcg
YQ0KPiA+IGNvbnN0DQo+ID4gPj4+PiBwb2ludGVyIGFzIHBhcmFtZXRlci4gKi8NCj4gPiA+Pj4+
PiAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gNCj4gPiA+Pj4+PiAjcHJhZ21hIEdDQyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XZGlzY2FyZGVkLXF1YWxpZmllcnMiDQo+ID4gPj4+Pj4gICAgICAg
ICAgICB4bW0wID0gX21tX3N0cmVhbV9sb2FkX3NpMTI4KHNyY2EpOw0KPiA+ID4+Pj4+ICAgICAg
ICAgICAgX21tX3N0b3JlX3NpMTI4KCh2b2lkICopYnVmLCB4bW0wKTsNCj4gPiA+Pj4+PiAjcHJh
Z21hIEdDQyBkaWFnbm9zdGljIHBvcA0KPiA+ID4+Pj4+ICAgICAgICAgICAgc3dpdGNoIChvZmZz
ZXQpIHsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDE6DQo+ID4gPj4+Pj4gICAgICAg
ICAgICAgICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDAgKg0KPiA+ID4+
Pj4gc2l6ZW9mKGludDMyX3QpKSwgYnVmWzBdKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQo+ID4gPj4+Pj4gICAgICAgICAgICAgICAgY2FzZSAyOg0KPiA+ID4+Pj4+ICAg
ICAgICAgICAgICAgICAgICBfbW1fc3RyZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAwICoNCj4g
PiA+Pj4+IHNpemVvZihpbnQzMl90KSksIGJ1ZlswXSk7DQo+ID4gPj4+Pj4gICAgICAgICAgICAg
ICAgICAgIGlmICh1bmxpa2VseShSVEVfUFRSX0RJRkYoc3JjYSwgc3JjKSA9PSAxICoNCj4gPiA+
Pj4+IHNpemVvZihpbnQzMl90KSkpIHJldHVybjsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAg
ICAgX21tX3N0cmVhbV9zaTMyKFJURV9QVFJfQUREKGRzdCwgMSAqDQo+ID4gPj4+PiBzaXplb2Yo
aW50MzJfdCkpLCBidWZbMV0pOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBicmVhazsN
Cj4gPiA+Pj4+PiAgICAgICAgICAgICAgICBjYXNlIDM6DQo+ID4gPj4+Pj4gICAgICAgICAgICAg
ICAgICAgIF9tbV9zdHJlYW1fc2kzMihSVEVfUFRSX0FERChkc3QsIDAgKg0KPiA+ID4+Pj4gc2l6
ZW9mKGludDMyX3QpKSwgYnVmWzBdKTsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgaWYg
KHVubGlrZWx5KFJURV9QVFJfRElGRihzcmNhLCBzcmMpID09IDEgKg0KPiA+ID4+Pj4gc2l6ZW9m
KGludDMyX3QpKSkgcmV0dXJuOw0KPiA+ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBfbW1fc3Ry
ZWFtX3NpMzIoUlRFX1BUUl9BREQoZHN0LCAxICoNCj4gPiA+Pj4+IHNpemVvZihpbnQzMl90KSks
IGJ1ZlsxXSk7DQo+ID4gPj4+Pj4gICAgICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShSVEVf
UFRSX0RJRkYoc3JjYSwgc3JjKSA9PSAyICoNCj4gPiA+Pj4+IHNpemVvZihpbnQzMl90KSkpIHJl
dHVybjsNCj4gPiA+Pj4+PiAgICAgICAgICAgICAgICAgICAgX21tX3N0cmVhbV9zaTMyKFJURV9Q
VFJfQUREKGRzdCwgMiAqDQo+ID4gPj4+PiBzaXplb2YoaW50MzJfdCkpLCBidWZbMl0pOw0KPiA+
ID4+Pj4+ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+Pj4+PiAgICAgICAgICAgIH0N
Cj4gPiA+Pj4+PiAgICAgICAgfQ0KPiA+ID4+Pj4+IH0NCj4gPiA+Pj4+Pg0KPiA+ID4+Pj4NCj4g
PiA+Pj4NCj4gPiA+Pg0KPiA+ID4NCj4gPg0KDQo=