Re: XDP CPU maps & shared umem

Yuval El-Hanany <[email protected]> Wed, 29 May 2024 07:51:43 +0000
Newsgroups org.kernel.vger.xdp-newbies
Message-ID <[email protected]>
WWVhaCwNCiAgICAgICAgSSB0b3RhbGx5IGFncmVlLiBJIGRpZG7igJl0IGtub3cgaWYgdGhlcmXi
gJlzIHJvb20gZm9yIHRoZSB4ZHBfZnJhbWUgdG8gYWRkIG1vcmUgc3BhY2UsIHRoYXTigJlzIHdo
eSBJIG9wdGVkIHRvIHNhdmUgc3BhY2UgYW5kIHBpZ2d5YmFjayB0aGVyZSBidXQgSSBkaWRu4oCZ
dCBsaWtlIGl0LiBJIHdhc27igJl0IHRvbyBjb25jZXJuZWQgYWJvdXQgdGhlIGJpdCBmaWVsZHMg
YXMgaXTigJlzIDE2IGJpdCBhbGlnbmVkLiBTdXJlIEkgY2FuIHJld29yayB0aGUgcGF0Y2guIFlv
deKAmXJlIG5vdCBjb25jZXJuZWQgYWJvdXQgaGF2aW5nIGEgc2hhcmVkIHJ4X3F1ZXVlPyBZb3Ug
aGF2ZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBjb2RlLg0KDQogICAgICAgIEkg
ZGlkbuKAmXQga25vdyB0aGUgeGRwX2ZyYW1lIGlzIHN0b3JlZCBpbiB0aGUgaGVhZHJvb20uIElm
IGl04oCZcyBzdG9yZWQgYXQgdGhlIGhlYWQgb2YgdGhlIHBhY2tldCwgdGhpcyBtZWFucyB0aGUg
Y29uc3RydWN0aW9uIG9mIHRoZSB4ZHBfYnVmZiBpbiB0aGUgbG9vcCBjYXVzZXMgbWVtb3J5IGFj
Y2VzcyB0byB0aGUgcGFja2V0cyBtZW1vcnkgd2hpY2ggYXJlIG5vdCBzdG9yZWQgc2VxdWVudGlh
bGx5LiBQZXJoYXBzIGl04oCZcyB3b3J0aCBhZGRpbmcgcHJlZmV0Y2g/IEkgZGlkIHBhY2tldCBw
cmVmZXRjaCBpbiBteSB1c2VyIGNvZGUgYW5kIGl0IGRpZCB3b25kZXJzIHdoZW4gdXNpbmcgeHNr
LiBUaGUgWERQIHByb2dyYW1zIGFyZSBub3QgYW50aWNpcGF0ZWQgdG8gYmUgaHVnZSBkYXRhIHBy
b2Nlc3NpbmcgY29kZSBzbyB0aGUgcHJlZmV0Y2ggaGFzIHBvdGVudGlhbCB0byBtYWtlIGEgZGlm
ZmVyZW5jZS4NCg0KICAgICAgICBDaGVlcnMsDQogICAgICAgICAgICAgICAgWXV2YWwuDQoNCihP
bmNlIGFnYWluIHBsYWluIHRleHQgcmVzZW5k4oCmKQ0KDQo+IE9uIDI5IE1heSAyMDI0LCBhdCA5
OjU3LCBNYWdudXMgS2FybHNzb24gPG1hZ251cy5rYXJsc3NvbkBnbWFpbC5jb20+IHdyb3RlOg0K
Pg0KPiBDQVVUSU9OOkV4dGVybmFsIEVtYWlsLCBEbyBub3QgY2xpY2sgb24gbGlua3Mgb3Igb3Bl
biBhdHRhY2htZW50cyB1bmxlc3MgeW91IHJlY29nbml6ZSB0aGUgc2VuZGVyIGFuZCBrbm93IHRo
ZSBjb250ZW50IGlzIHNhZmUuDQo+DQo+IE9uIFR1ZSwgMjggTWF5IDIwMjQgYXQgMTg6MDMsIFl1
dmFsIEVsLUhhbmFueSA8eXV2YWxlQHJhZHdhcmUuY29tPiB3cm90ZToNCj4+DQo+PiBIaSwNCj4+
ICAgICAgICB0aGlzIGlzIG15IHRlbXBvcmFyeSBwYXRjaCB0byBnZXQgdGhlIHJlY2VpdmUgcXVl
dWUgYWNyb3NzIHRoZSBDUFUtcy4gSeKAmW0gbm90IHN1cmUgSSByZWNvbW1lbmQgaXQuIEkgYXZv
aWRlZCBpbmNyZWFzaW5nIHRoZSBmcmFtZSBzaXplIGJ5IHBpZ2d5IGJhY2tpbmcgb24gdGhlIG1l
bW9yeSBtb2RlbCB0eXBlIHdoaWNoIHBsYWNlcyBkYXRhIGluIG5vbiByZWxldmFudCBzdHJ1Y3R1
cmVzLiBJdCBhbHNvIGxpbWl0cyB0aGUgcmVjZWl2ZSBxdWV1ZSBpbmRleCB0byB1MTYgKDI0IGJp
dHMgd291bGQgYWxzbyBiZSBwb3NzaWJsZSkuIEl0IGRvZXMgd29yayBhbmQgdHJhZmZpYyBpcyBy
dW5uaW5nIChJ4oCZbGwgcHJvYmFibHkgaGF2ZSBhIGZvbGxvd3VwIHF1ZXN0aW9uIG9uIHBlcmZv
cm1hbmNlIEkgZXhwZWN0ZWQgYmV0dGVyIGJ1dCBJJ2xsIGRvIHNvbWUgbW9yZSB0ZXN0aW5nKS4g
QW5vdGhlciBpc3N1ZSAtIGl0IHVwZGF0ZXMgdGhlIHJ4cSBpbiB4ZHBfYnVmZi4gSW4gdGhlIGNv
bnRleHQgb2YgY3B1bWFwIGl04oCZcyBva2F5IGFzIHJ4cSBpcyBvbmx5IHVzZWQgaW1tZWRpYXRl
bHkgaW4gdGhlIGxvb3AgYW5kIGRpc2NhcmRlZCBhZnRlciB0aGUgbG9vcC4gSSBoYXZlbuKAmXQg
Zm91bmQgYW55d2hlcmUgaXTigJlzIHdyb25nLiBCdXQgdGhlb3JldGljYWxseSByeHEgbWF5IGhh
dmUgYSBsb25nZXIgdGltZXNwYW4sIGFuZCBtYXkgYmUgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSBi
dWZmZXJzLiBNb2RpZnlpbmcgaXQsIG1heSBhZmZlY3Qgb3RoZXIgYnVmZmVycyB0aGF0IGJlbG9u
ZyB0byBkaWZmZXJlbnQgcmVjZWl2ZSBxdWV1ZSBpbmRleC4NCj4+DQo+PiAgICAgICAgKFNvcnJ5
IGZvciB0aGUgZG91YmxlIG1lc3NhZ2UsIHByZXZpb3VzIG9uZSB3YXMgbm90IHBsYWludGV4dCBz
byBpdCB3YXMgcmVqZWN0ZWQgYnkgZ3JvdXAgc2VydmVyKQ0KPj4NCj4+ICAgICAgICBDaGVlcnMs
DQo+PiAgICAgICAgICAgICAgICBZdXZhbC4NCj4+DQo+PiBkaWZmIC11ck4gYS9pbmNsdWRlL25l
dC94ZHAuaCBiL2luY2x1ZGUvbmV0L3hkcC5oDQo+PiAtLS0gYS9pbmNsdWRlL25ldC94ZHAuaCAy
MDIzLTA2LTA1IDA3OjIxOjI3LjAwMDAwMDAwMCArMDAwMA0KPj4gKysrIGIvaW5jbHVkZS9uZXQv
eGRwLmggMjAyNC0wNS0yOCAwNzowNDowMC41NDk1MDczMTYgKzAwMDANCj4+IEBAIC00OCw3ICs0
OCw4IEBADQo+PiAjZGVmaW5lIFhEUF9YTUlUX0ZMQUdTX01BU0sgICAgWERQX1hNSVRfRkxVU0gN
Cj4+DQo+PiBzdHJ1Y3QgeGRwX21lbV9pbmZvIHsNCj4+IC0gICAgICAgdTMyIHR5cGU7IC8qIGVu
dW0geGRwX21lbV90eXBlLCBidXQga25vd24gc2l6ZSB0eXBlICovDQo+PiArICAgICAgIHUzMiB0
eXBlIDogMTY7IC8qIGVudW0geGRwX21lbV90eXBlLCBidXQga25vd24gc2l6ZSB0eXBlICovDQo+
PiArICAgIHUzMiByeF9xdWV1ZV9pbmRleCA6IDE2Ow0KPg0KPiBIb3cgYWJvdXQganVzdCBzdGlj
a2luZyBhbiB1MzIgcXVldWVfaW5kZXggaW4gdGhlIHN0cnVjdCB4ZHBfZnJhbWU/DQo+IFRoZSB4
ZHBfZnJhbWUgaXMgc3RvcmVkIGF0IHRoZSBzdGFydCBvZiB0aGUgMjU2IGJ5dGUgWERQIG1ldGFk
YXRhDQo+IHNlY3Rpb24gaW4gZnJvbnQgb2YgdGhlIHBhY2tldC4gSSBiZWxpZXZlIHRoZXJlIGlz
IHJvb20gZm9yIGFuIGV4dHJhIDQNCj4gYnl0ZXMgdGhlcmUgd2l0aG91dCBzcGlsbGluZyBvdmVy
IHRvIGEgbmV3IGNhY2hlIGxpbmUuIFRoZW4gaW4gdGhlDQo+IHhkcF9mcmFtZSBmcm9tIHhkcF9i
dWZmIGNyZWF0aW9uIGZ1bmN0aW9uLCB5b3UgYWx3YXlzIGNvcHkgb3ZlciB0aGUNCj4gcXVldWVf
aW5kZXggdG8gdGhlIHhkcF9mcmFtZS4gQnV0IHdoZW4gY29udmVydGluZyB0aGUgeGRwX2ZyYW1l
IHRvIGFuDQo+IHhkcF9idWZmLCB5b3Ugb25seSBkbyB0aGlzIGZvciB0aGUgIlhEUCBwcm9ncmFt
IG9uIGEgQ1BVTUFQIiBjYXNlIHdoZW4NCj4gdGhlIGFjdGlvbiBpcyBYRFBfUkVESVJFQ1QuIFRo
ZXJlIGlzIGV2ZW4gYSAvKiBUT0RPICovIGluIHRoaXMNCj4gZnVuY3Rpb24gZm9yIGNvcHlpbmcg
b3ZlciB0aGUgcXVldWVfaW5kZXguDQo+DQo+IFdoYXQgZG8geW91IHRoaW5rPyBXYW50IHRvIHRh
a2UgYSBzdGFiIGF0IGl0IGFuZCBzdWJtaXQgYSBwYXRjaD8NCj4NCj4gQlRXLCBiaXRmaWVsZHMg
YXJlIHNsb3cgc28geW91IGRvIG5vdCB3YW50IHRvIHVzZSB0aGF0LiBBbmQNCj4gcXVldWVfaW5k
ZXggaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBtZW1vcnkgdHlwZSBzbyBpcyBub3QgYSBsb2dpY2Fs
DQo+IHBsYWNlIGZvciBpdC4NCj4NCj4+ICAgICAgICB1MzIgaWQ7DQo+PiB9Ow0KPj4NCj4+IEBA
IC0xODAsNiArMTgxLDEwIEBADQo+PiAgICAgICAgeGRwLT5kYXRhX2VuZCA9IGZyYW1lLT5kYXRh
ICsgZnJhbWUtPmxlbjsNCj4+ICAgICAgICB4ZHAtPmRhdGFfbWV0YSA9IGZyYW1lLT5kYXRhIC0g
ZnJhbWUtPm1ldGFzaXplOw0KPj4gICAgICAgIHhkcC0+ZnJhbWVfc3ogPSBmcmFtZS0+ZnJhbWVf
c3o7DQo+PiArICAgICAgIGlmICh4ZHAtPnJ4cSAhPSBOVUxMKQ0KPj4gKyAgICAgICB7DQo+PiAr
ICAgICAgICAgICAgICAgeGRwLT5yeHEtPnF1ZXVlX2luZGV4ID0gZnJhbWUtPm1lbS5yeF9xdWV1
ZV9pbmRleDsNCj4+ICsgICAgICAgfQ0KPj4gfQ0KPj4NCj4+IHN0YXRpYyBpbmxpbmUNCj4+IEBA
IC0yMDYsNiArMjExLDggQEANCj4+ICAgICAgICB4ZHBfZnJhbWUtPmhlYWRyb29tID0gaGVhZHJv
b20gLSBzaXplb2YoKnhkcF9mcmFtZSk7DQo+PiAgICAgICAgeGRwX2ZyYW1lLT5tZXRhc2l6ZSA9
IG1ldGFzaXplOw0KPj4gICAgICAgIHhkcF9mcmFtZS0+ZnJhbWVfc3ogPSB4ZHAtPmZyYW1lX3N6
Ow0KPj4gKyAgICAgICB4ZHBfZnJhbWUtPm1lbS5yeF9xdWV1ZV9pbmRleCA9DQo+PiArICAgICAg
ICAgICAgICAgKHhkcC0+cnhxICE9IE5VTEwpID8geGRwLT5yeHEtPnF1ZXVlX2luZGV4IDogMDsN
Cj4+DQo+PiAgICAgICAgcmV0dXJuIDA7DQo+PiB9DQo+PiBAQCAtMjI2LDYgKzIzMyw3IEBADQo+
Pg0KPj4gICAgICAgIC8qIHJ4cSBvbmx5IHZhbGlkIHVudGlsIG5hcGlfc2NoZWR1bGUgZW5kcywg
Y29udmVydCB0byB4ZHBfbWVtX2luZm8gKi8NCj4+ICAgICAgICB4ZHBfZnJhbWUtPm1lbSA9IHhk
cC0+cnhxLT5tZW07DQo+PiArICAgICAgIHhkcF9mcmFtZS0+bWVtLnJ4X3F1ZXVlX2luZGV4ID0g
eGRwLT5yeHEtPnF1ZXVlX2luZGV4Ow0KPj4NCj4+ICAgICAgICByZXR1cm4geGRwX2ZyYW1lOw0K
Pj4gfQ0KPj4gZGlmZiAtdXJOIGEvbmV0L2NvcmUveGRwLmMgYi9uZXQvY29yZS94ZHAuYw0KPj4g
LS0tIGEvbmV0L2NvcmUveGRwLmMgICAgMjAyMy0wNi0wNSAwNzoyMToyNy4wMDAwMDAwMDAgKzAw
MDANCj4+ICsrKyBiL25ldC9jb3JlL3hkcC5jICAgIDIwMjQtMDUtMjggMTQ6MDU6MjQuNTMxNjE3
Mjc5ICswMDAwDQo+PiBAQCAtNTM2LDYgKzUzNiw3IEBADQo+PiAgICAgICAgeGRwZi0+bWV0YXNp
emUgPSBtZXRhc2l6ZTsNCj4+ICAgICAgICB4ZHBmLT5mcmFtZV9zeiA9IFBBR0VfU0laRTsNCj4+
ICAgICAgICB4ZHBmLT5tZW0udHlwZSA9IE1FTV9UWVBFX1BBR0VfT1JERVIwOw0KPj4gKyAgICB4
ZHBmLT5tZW0ucnhfcXVldWVfaW5kZXggPSAoeGRwLT5yeHEgIT0gTlVMTCkgPyB4ZHAtPnJ4cS0+
cXVldWVfaW5kZXggOiAwOw0KPj4NCj4+ICAgICAgICB4c2tfYnVmZl9mcmVlKHhkcCk7DQo+PiAg
ICAgICAgcmV0dXJuIHhkcGY7DQo+Pg0KPj4+IE9uIDI4IE1heSAyMDI0LCBhdCAxNTozOCwgWXV2
YWwgRWwtSGFuYW55IDx5dXZhbGVAcmFkd2FyZS5jb20+IHdyb3RlOg0KPj4+DQo+Pj4gQ0FVVElP
TjpFeHRlcm5hbCBFbWFpbCwgRG8gbm90IGNsaWNrIG9uIGxpbmtzIG9yIG9wZW4gYXR0YWNobWVu
dHMgdW5sZXNzIHlvdSByZWNvZ25pemUgdGhlIHNlbmRlciBhbmQga25vdyB0aGUgY29udGVudCBp
cyBzYWZlLg0KPj4+DQo+Pj4gU3VyZS4gVGhlIHR3byBwYXRjaGVzICh0aGUgc2Vjb25kIGlzIGp1
c3QgZG9jdW1lbnRhdGlvbikgYXJlIGJlbG93Lg0KPj4+DQo+Pj4gICAgICAgSeKAmW0gdHJ5aW5n
IHRvIGFkZCB0aGUgcnggcXVldWUgZnJvbSB4ZHBfYnVmZiB0byB0aGUgeGRwX2ZyYW1lIGFuZCBl
eHRyYWN0IGl0IGJhY2suIElzIHRoZSBzaXplIG9yIGFsaWdubWVudCBvZiB4ZHBfZnJhbWUgY3Jp
dGljYWw/IElzIGl0IG9rYXkgdG8gYWRkIHRoZSByeCBxdWV1ZSBhcyBhbiBleHRyYSBmaWVsZCwg
b3Igc2hvdWxkIEkgdHJ5IHRvIGFkZCBpdCBhcyBhIGJpdCBmaWVsZCBvbiBhbiBleGlzdGluZyBm
aWVsZCBsaWtlIHRoZSBtZW1vcnkgdHlwZSB0aGF0IHRha2VzIDMyIGJpdHMgYnV0IGhhcyBvbmx5
IDQgdmFsdWVzPw0KPj4+DQo+Pj4gICAgICAgQ2hlZXJzLA0KPj4+ICAgICAgICAgICAgICAgWXV2
YWwuDQo+Pj4NCj4+PiBGcm9tOiBNYWdudXMgS2FybHNzb24gPG1hZ251cy5rYXJsc3NvbkBnbWFp
bC5jb20+DQo+Pj4gU3ViamVjdDogW1BBVENIIGJwZi1uZXh0IDEvMl0geHNrOiBzdXBwb3J0IHJl
ZGlyZWN0IHRvIGFueSBzb2NrZXQgYm91bmQgdG8gdGhlIHNhbWUgdW1lbQ0KPj4+IERhdGU6IDUg
RmVicnVhcnkgMjAyNCBhdCAxNDozNTo1MCBHTVQrMg0KPj4+IFRvOiBtYWdudXMua2FybHNzb25A
aW50ZWwuY29tLCBiam9ybkBrZXJuZWwub3JnLCBhc3RAa2VybmVsLm9yZywgZGFuaWVsQGlvZ2Vh
cmJveC5uZXQsIG5ldGRldkB2Z2VyLmtlcm5lbC5vcmcsIG1hY2llai5maWphbGtvd3NraUBpbnRl
bC5jb20sIHl1dmFsZUByYWR3YXJlLmNvbQ0KPj4+IENjOiBicGZAdmdlci5rZXJuZWwub3JnDQo+
Pj4NCj4+PiBDQVVUSU9OOkV4dGVybmFsIEVtYWlsLCBEbyBub3QgY2xpY2sgb24gbGlua3Mgb3Ig
b3BlbiBhdHRhY2htZW50cyB1bmxlc3MgeW91IHJlY29nbml6ZSB0aGUgc2VuZGVyIGFuZCBrbm93
IHRoZSBjb250ZW50IGlzIHNhZmUuDQo+Pj4NCj4+PiBGcm9tOiBNYWdudXMgS2FybHNzb24gPG1h
Z251cy5rYXJsc3NvbkBpbnRlbC5jb20+DQo+Pj4NCj4+PiBBZGQgc3VwcG9ydCBmb3IgZGlyZWN0
aW5nIGEgcGFja2V0IHRvIGFueSBzb2NrZXQgYm91bmQgdG8gdGhlIHNhbWUNCj4+PiB1bWVtLiBU
aGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSB0aGUgWERQIHByb2dyYW0gdG8gc2VsZWN0IHdo
YXQNCj4+PiBzb2NrZXQgdGhlIHBhY2tldCBzaG91bGQgYmUgcmVjZWl2ZWQgb24uIFRoZSB1c2Vy
IGNhbiBwb3B1bGF0ZSB0aGUNCj4+PiBYU0tNQVAgd2l0aCB2YXJpb3VzIHNvY2tldHMgYW5kIGFz
IGxvbmcgYXMgdGhleSBzaGFyZSB0aGUgc2FtZSB1bWVtLA0KPj4+IHRoZSBYRFAgcHJvZ3JhbSBj
YW4gcGljayBhbnkgb25lIG9mIHRoZW0uDQo+Pj4NCj4+PiBTdWdnZXN0ZWQtYnk6IFl1dmFsIEVs
LUhhbmFueSA8eXV2YWxlQHJhZHdhcmUuY29tPg0KPj4+IFNpZ25lZC1vZmYtYnk6IE1hZ251cyBL
YXJsc3NvbiA8bWFnbnVzLmthcmxzc29uQGludGVsLmNvbT4NCj4+PiAtLS0NCj4+PiBuZXQveGRw
L3hzay5jIHwgNSArKysrLQ0KPj4+IDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEg
ZGVsZXRpb24oLSkNCj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hk
cC94c2suYw0KPj4+IGluZGV4IDFlYWRmYWMwM2NjNC4uYTMzOWU5YTFiNTU3IDEwMDY0NA0KPj4+
IC0tLSBhL25ldC94ZHAveHNrLmMNCj4+PiArKysgYi9uZXQveGRwL3hzay5jDQo+Pj4gQEAgLTMx
MywxMCArMzEzLDEzIEBAIHN0YXRpYyBib29sIHhza19pc19ib3VuZChzdHJ1Y3QgeGRwX3NvY2sg
KnhzKQ0KPj4+DQo+Pj4gc3RhdGljIGludCB4c2tfcmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAq
eHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKQ0KPj4+IHsNCj4+PiArICAgICAgIHN0
cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4ZHAtPnJ4cS0+ZGV2Ow0KPj4+ICsgICAgICAgdTMyIHFp
ZCA9IHhkcC0+cnhxLT5xdWV1ZV9pbmRleDsNCj4+PiArDQo+Pj4gICAgICBpZiAoIXhza19pc19i
b3VuZCh4cykpDQo+Pj4gICAgICAgICAgICAgIHJldHVybiAtRU5YSU87DQo+Pj4NCj4+PiAtICAg
ICAgIGlmICh4cy0+ZGV2ICE9IHhkcC0+cnhxLT5kZXYgfHwgeHMtPnF1ZXVlX2lkICE9IHhkcC0+
cnhxLT5xdWV1ZV9pbmRleCkNCj4+PiArICAgICAgIGlmICghZGV2LT5fcnhbcWlkXS5wb29sIHx8
IHhzLT51bWVtICE9IGRldi0+X3J4W3FpZF0ucG9vbC0+dW1lbSkNCj4+PiAgICAgICAgICAgICAg
cmV0dXJuIC1FSU5WQUw7DQo+Pj4NCj4+PiAgICAgIGlmIChsZW4gPiB4c2tfcG9vbF9nZXRfcnhf
ZnJhbWVfc2l6ZSh4cy0+cG9vbCkgJiYgIXhzLT5zZykgew0KPj4+IC0tDQo+Pj4gMi40Mi4wDQo+
Pj4NCj4+PiBGcm9tOiBNYWdudXMgS2FybHNzb24gPG1hZ251cy5rYXJsc3NvbkBpbnRlbC5jb20+
DQo+Pj4NCj4+PiBEb2N1bWVudCB0aGUgYWJpbGl0eSB0byByZWRpcmVjdCB0byBhbnkgc29ja2V0
IGJvdW5kIHRvIHRoZSBzYW1lIHVtZW0uDQo+Pj4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBNYWdudXMg
S2FybHNzb24gPG1hZ251cy5rYXJsc3NvbkBpbnRlbC5jb20+DQo+Pj4gLS0tDQo+Pj4gRG9jdW1l
bnRhdGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QgfCAzMyArKysrKysrKysrKysrKysrKy0tLS0t
LS0tLS0tLQ0KPj4+IDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlv
bnMoLSkNCj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWZf
eGRwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0DQo+Pj4gaW5kZXgg
ZGNlZWIwZDc2M2FhLi43MmRhNzA1N2U0Y2YgMTAwNjQ0DQo+Pj4gLS0tIGEvRG9jdW1lbnRhdGlv
bi9uZXR3b3JraW5nL2FmX3hkcC5yc3QNCj4+PiArKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtp
bmcvYWZfeGRwLnJzdA0KPj4+IEBAIC0zMjksMjMgKzMyOSwyNCBAQCBYRFBfU0hBUkVEX1VNRU0g
b3B0aW9uIGFuZCBwcm92aWRlIHRoZSBpbml0aWFsIHNvY2tldCdzIGZkIGluIHRoZQ0KPj4+IHN4
ZHBfc2hhcmVkX3VtZW1fZmQgZmllbGQgYXMgeW91IHJlZ2lzdGVyZWQgdGhlIFVNRU0gb24gdGhh
dA0KPj4+IHNvY2tldC4gVGhlc2UgdHdvIHNvY2tldHMgd2lsbCBub3cgc2hhcmUgb25lIGFuZCB0
aGUgc2FtZSBVTUVNLg0KPj4+DQo+Pj4gLVRoZXJlIGlzIG5vIG5lZWQgdG8gc3VwcGx5IGFuIFhE
UCBwcm9ncmFtIGxpa2UgdGhlIG9uZSBpbiB0aGUgcHJldmlvdXMNCj4+PiAtY2FzZSB3aGVyZSBz
b2NrZXRzIHdlcmUgYm91bmQgdG8gdGhlIHNhbWUgcXVldWUgaWQgYW5kDQo+Pj4gLWRldmljZS4g
SW5zdGVhZCwgdXNlIHRoZSBOSUMncyBwYWNrZXQgc3RlZXJpbmcgY2FwYWJpbGl0aWVzIHRvIHN0
ZWVyDQo+Pj4gLXRoZSBwYWNrZXRzIHRvIHRoZSByaWdodCBxdWV1ZS4gSW4gdGhlIHByZXZpb3Vz
IGV4YW1wbGUsIHRoZXJlIGlzIG9ubHkNCj4+PiAtb25lIHF1ZXVlIHNoYXJlZCBhbW9uZyBzb2Nr
ZXRzLCBzbyB0aGUgTklDIGNhbm5vdCBkbyB0aGlzIHN0ZWVyaW5nLiBJdA0KPj4+IC1jYW4gb25s
eSBzdGVlciBiZXR3ZWVuIHF1ZXVlcy4NCj4+PiAtDQo+Pj4gLUluIGxpYmJwZiwgeW91IG5lZWQg
dG8gdXNlIHRoZSB4c2tfc29ja2V0X19jcmVhdGVfc2hhcmVkKCkgQVBJIGFzIGl0DQo+Pj4gLXRh
a2VzIGEgcmVmZXJlbmNlIHRvIGEgRklMTCByaW5nIGFuZCBhIENPTVBMRVRJT04gcmluZyB0aGF0
IHdpbGwgYmUNCj4+PiAtY3JlYXRlZCBmb3IgeW91IGFuZCBib3VuZCB0byB0aGUgc2hhcmVkIFVN
RU0uIFlvdSBjYW4gdXNlIHRoaXMNCj4+PiAtZnVuY3Rpb24gZm9yIGFsbCB0aGUgc29ja2V0cyB5
b3UgY3JlYXRlLCBvciB5b3UgY2FuIHVzZSBpdCBmb3IgdGhlDQo+Pj4gLXNlY29uZCBhbmQgZm9s
bG93aW5nIG9uZXMgYW5kIHVzZSB4c2tfc29ja2V0X19jcmVhdGUoKSBmb3IgdGhlIGZpcnN0DQo+
Pj4gLW9uZS4gQm90aCBtZXRob2RzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC4NCj4+PiArSW4gdGhp
cyBjYXNlLCBpdCBpcyBwb3NzaWJsZSB0byB1c2UgdGhlIE5JQydzIHBhY2tldCBzdGVlcmluZw0K
Pj4+ICtjYXBhYmlsaXRpZXMgdG8gc3RlZXIgdGhlIHBhY2tldHMgdG8gdGhlIHJpZ2h0IHF1ZXVl
LiBUaGlzIGlzIG5vdA0KPj4+ICtwb3NzaWJsZSBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZSBhcyB0
aGVyZSBpcyBvbmx5IG9uZSBxdWV1ZSBzaGFyZWQNCj4+PiArYW1vbmcgc29ja2V0cywgc28gdGhl
IE5JQyBjYW5ub3QgZG8gdGhpcyBzdGVlcmluZyBhcyBpdCBjYW4gb25seSBzdGVlcg0KPj4+ICti
ZXR3ZWVuIHF1ZXVlcy4NCj4+PiArDQo+Pj4gK0luIGxpYnhkcCAob3IgbGliYnBmIHByaW9yIHRv
IHZlcnNpb24gMS4wKSwgeW91IG5lZWQgdG8gdXNlIHRoZQ0KPj4+ICt4c2tfc29ja2V0X19jcmVh
dGVfc2hhcmVkKCkgQVBJIGFzIGl0IHRha2VzIGEgcmVmZXJlbmNlIHRvIGEgRklMTCByaW5nDQo+
Pj4gK2FuZCBhIENPTVBMRVRJT04gcmluZyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBmb3IgeW91IGFu
ZCBib3VuZCB0byB0aGUNCj4+PiArc2hhcmVkIFVNRU0uIFlvdSBjYW4gdXNlIHRoaXMgZnVuY3Rp
b24gZm9yIGFsbCB0aGUgc29ja2V0cyB5b3UgY3JlYXRlLA0KPj4+ICtvciB5b3UgY2FuIHVzZSBp
dCBmb3IgdGhlIHNlY29uZCBhbmQgZm9sbG93aW5nIG9uZXMgYW5kIHVzZQ0KPj4+ICt4c2tfc29j
a2V0X19jcmVhdGUoKSBmb3IgdGhlIGZpcnN0IG9uZS4gQm90aCBtZXRob2RzIHlpZWxkIHRoZSBz
YW1lDQo+Pj4gK3Jlc3VsdC4NCj4+Pg0KPj4+IE5vdGUgdGhhdCBhIFVNRU0gY2FuIGJlIHNoYXJl
ZCBiZXR3ZWVuIHNvY2tldHMgb24gdGhlIHNhbWUgcXVldWUgaWQNCj4+PiBhbmQgZGV2aWNlLCBh
cyB3ZWxsIGFzIGJldHdlZW4gcXVldWVzIG9uIHRoZSBzYW1lIGRldmljZSBhbmQgYmV0d2Vlbg0K
Pj4+IC1kZXZpY2VzIGF0IHRoZSBzYW1lIHRpbWUuDQo+Pj4gK2RldmljZXMgYXQgdGhlIHNhbWUg
dGltZS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byByZWRpcmVjdCB0byBhbnkNCj4+PiArc29ja2V0
IGFzIGxvbmcgYXMgaXQgaXMgYm91bmQgdG8gdGhlIHNhbWUgdW1lbSB3aXRoIFhEUF9TSEFSRURf
VU1FTS4NCj4+Pg0KPj4+IFhEUF9VU0VfTkVFRF9XQUtFVVAgYmluZCBmbGFnDQo+Pj4gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+PiBAQCAtODIyLDYgKzgyMywxMCBAQCBBOiBUaGUg
c2hvcnQgYW5zd2VyIGlzIG5vLCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4g
VGhlDQo+Pj4gIHN3aXRjaCwgb3Igb3RoZXIgZGlzdHJpYnV0aW9uIG1lY2hhbmlzbSwgaW4geW91
ciBOSUMgdG8gZGlyZWN0DQo+Pj4gIHRyYWZmaWMgdG8gdGhlIGNvcnJlY3QgcXVldWUgaWQgYW5k
IHNvY2tldC4NCj4+Pg0KPj4+ICsgICBOb3RlIHRoYXQgaWYgeW91IGFyZSB1c2luZyB0aGUgWERQ
X1NIQVJFRF9VTUVNIG9wdGlvbiwgaXQgaXMNCj4+PiArICAgcG9zc2libGUgdG8gc3dpdGNoIHRy
YWZmaWMgYmV0d2VlbiBhbnkgc29ja2V0IGJvdW5kIHRvIHRoZSBzYW1lDQo+Pj4gKyAgIHVtZW0u
DQo+Pj4gKw0KPj4+IFE6IE15IHBhY2tldHMgYXJlIHNvbWV0aW1lcyBjb3JydXB0ZWQuIFdoYXQg
aXMgd3Jvbmc/DQo+Pj4NCj4+PiBBOiBDYXJlIGhhcyB0byBiZSB0YWtlbiBub3QgdG8gZmVlZCB0
aGUgc2FtZSBidWZmZXIgaW4gdGhlIFVNRU0gaW50bw0KPj4+IC0tDQo+Pj4gMi40Mi4wDQo+Pj4N
Cj4+Pj4gT24gMjggTWF5IDIwMjQsIGF0IDE1OjIxLCBNYWdudXMgS2FybHNzb24gPG1hZ251cy5r
YXJsc3NvbkBnbWFpbC5jb20+IHdyb3RlOg0KPj4+Pg0KPj4+PiBDQVVUSU9OOkV4dGVybmFsIEVt
YWlsLCBEbyBub3QgY2xpY2sgb24gbGlua3Mgb3Igb3BlbiBhdHRhY2htZW50cyB1bmxlc3MgeW91
IHJlY29nbml6ZSB0aGUgc2VuZGVyIGFuZCBrbm93IHRoZSBjb250ZW50IGlzIHNhZmUuDQo+Pj4+
DQo+Pj4+IE9uIE1vbiwgMjcgTWF5IDIwMjQgYXQgMTA6MTEsIE1hZ251cyBLYXJsc3NvbiA8bWFn
bnVzLmthcmxzc29uQGdtYWlsLmNvbT4gd3JvdGU6DQo+Pj4+Pg0KPj4+Pj4gT24gTW9uLCAyNyBN
YXkgMjAyNCBhdCAwOTozNCwgWXV2YWwgRWwtSGFuYW55IDx5dXZhbGVAcmFkd2FyZS5jb20+IHdy
b3RlOg0KPj4+Pj4+DQo+Pj4+Pj4gWWVhaCwNCj4+Pj4+PiAgICAgIGFzIGZhciBkb3duIGFzIEkg
ZHVnIGluIHRoZSBjb2RlLCBpdCBzZWVtcyBpdOKAmXMgdGhlIG9ubHkgb25lIHRoYXTigJlzIHVz
ZWQuIFRoZSBvdGhlciBtZW1iZXJzIGFyZSByZWdfc3RhdGUgJiBuYXBpX2lkLiBJ4oCZbSB1bmZh
bWlsaWFyIHdpdGggdGhlaXIgZXhhY3QgcHVycG9zZXMsIGJ1dCBkb2VzbuKAmXQgc291bmQgbGlr
ZSB0aGV54oCZcmUgbmVjZXNzYXJ5IGRvd24gdGhlIGxpbmUuIE9uZSBvdGhlciBjb25jZXJuIGlz
IHR4cSBJTU8uIEl0IGlzIG5vdCBpbml0aWFsaXNlZCB0byBhbnkgdmFsdWUgaW4geGRwX2J1ZmYu
IFdoaWxlIGl0IG1heSBub3QgYmUgcmVsZXZhbnQgY29uc2lkZXJpbmcgaXTigJlzIGEgcmVjZWl2
ZWQgcGFja2V0LCBpdCBzZWVtcyB3cm9uZyB0byBrZWVwIGEgZGFuZ2xpbmcgcG9pbnRlciBib3Ro
IGluIHRlcm1zIG9mIHNlY3VyaXR5IChsZWFraW5nIHByZXZpb3VzIHZhbHVlcykgYW5kIHJvYnVz
dG5lc3MuIE1heWJlIGp1c3Qgc2V0IGl0IHRvIE5VTEw/DQo+Pj4+Pj4NCj4+Pj4+PiAgICAgIEni
gJl2ZSBiZWVuIHJhY2tpbmcgbXkgYnJhaW4gYXMgdG8gd2hhdCBpcyB0aGUgYWNjZXB0ZWQgbWV0
aG9kIHRvIHBhc3MgdGhlIHJlY2VpdmUgcXVldWUuIFBhc3NpbmcgaXQgb24gdGhlIHBhY2tldCBo
ZWFkcm9vbSBzZWVtZWQgbGlrZSBhIHJlYXNvbmFibGUgc29sdXRpb24sIGJ1dCBpdCB3b3VsZCBt
ZWFuIG1lbW9yeSBhY2Nlc3MgdG8gdGhlIHBhY2tldCBtZW1vcnkgb24gcGFja2V0IGFycml2YWwg
b24gdGhlIHNlY29uZCBDUFUgd2hpY2ggbWF5IGJlIGhhcm1mdWwgdG8gcGVyZm9ybWFuY2UuIFRo
ZSBxdWV1ZSBpdHNlbGYgaXMganVzdCBhIHBvaW50ZXIgcXVldWUgc28gY2Fu4oCZdCBwaWdneWJh
Y2sgb24gaXQgdW5sZXNzIHVzaW5nIGEgZGlmZmVyZW50IGtpbmQgb2YgcXVldWUuIFdvdWxkIGJl
IGdyZWF0IHRvIGhlYXIgaG93IGl0IHNob3VsZCBiZSBkb25lLg0KPj4+Pj4NCj4+Pj4+IExldCBt
ZSBnZXQgaW50byB0aGlzIHBpZWNlIG9mIGNvZGUgYW5kIHNjcmF0Y2ggbXkgaGVhZCBmb3IgYSB3
aGlsZSBhbmQNCj4+Pj4+IEkgd2lsbCBnZXQgYmFjayB0byB5b3UuIERvIG5vdCBoYXZlIGEgc29s
dXRpb24gb24gdG9wIG9mIG15IGhlYWQuIFdpbGwNCj4+Pj4+IGxvb3AgaW4gTWFjaWVqIHRvby4N
Cj4+Pj4NCj4+Pj4gWXV2YWwsDQo+Pj4+DQo+Pj4+IENvdWxkIHlvdSBwbGVhc2Ugc2VuZCBtZSB0
aGUgcGF0Y2ggdGhhdCB5b3UgYXJlIHVzaW5nPyBJIGNhbm5vdA0KPj4+PiByZW1lbWJlciB3aGF0
IEkgc2VudCB5b3UgOi0pLg0KPj4+Pg0KPj4+Pj4gL01hZ251cw0KPj4+Pj4NCj4+Pj4+PiAgICAg
IFRoYW5rcywNCj4+Pj4+PiAgICAgICAgICAgICAgWXV2YWwuDQo+Pj4+Pj4NCj4+Pj4+Pj4gT24g
MjcgTWF5IDIwMjQsIGF0IDg6NDgsIE1hZ251cyBLYXJsc3NvbiA8bWFnbnVzLmthcmxzc29uQGdt
YWlsLmNvbT4gd3JvdGU6DQo+Pj4+Pj4+DQo+Pj4+Pj4+IENBVVRJT046RXh0ZXJuYWwgRW1haWws
IERvIG5vdCBjbGljayBvbiBsaW5rcyBvciBvcGVuIGF0dGFjaG1lbnRzIHVubGVzcyB5b3UgcmVj
b2duaXplIHRoZSBzZW5kZXIgYW5kIGtub3cgdGhlIGNvbnRlbnQgaXMgc2FmZS4NCj4+Pj4+Pj4N
Cj4+Pj4+Pj4gT24gU3VuLCAyNiBNYXkgMjAyNCBhdCAxNDo0OCwgWXV2YWwgRWwtSGFuYW55IDx5
dXZhbGVAcmFkd2FyZS5jb20+IHdyb3RlOg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IENvcnJlY3Rpb24s
DQo+Pj4+Pj4+PiAgICAgdGhlIHJ4cSBwb2ludGVyIGlzIGluaXTigJlkIGdsb2JhbGx5IGZvciBh
bGwgZnJhbWVzIGJlZm9yZSB0aGUgZnJhbWUgbG9vcHMsIGJ1dCBvbmx5IHRoZSBkZXZpY2UgYW5k
IHRoZSBtZW1vcnkgaW5mb3JtYXRpb24gYXJlIHNldCBmcm9tIHRoZSBYRFAgZnJhbWUuIFNvIHN0
aWxsIGFuIGlzc3VlIHdpdGggdGhlIHF1ZXVlX2luZGV4LCBidXQgdGhlIHRlc3RzIG9uIHRoZSBk
ZXZpY2UgYW5kIG1lbW9yeSBpbmZvIGluIHhza19yY3Ygc2hvdWxkIGJlIGZpbmUuDQo+Pj4+Pj4+
Pg0KPj4+Pj4+Pj4gICAgIENoZWVycywNCj4+Pj4+Pj4+ICAgICAgICAgICAgIFl1dmFsLg0KPj4+
Pj4+Pg0KPj4+Pj4+PiBIaSBZdXZhbCwNCj4+Pj4+Pj4NCj4+Pj4+Pj4gTm93IEkgYW0gYmFjay4g
WWVzLCB0aGlzIHNlZW1zIHRvIGJlIGEgYnVnIHNvIHRoYW5rIHlvdSBmb3Igc3BvdHRpbmcNCj4+
Pj4+Pj4gaXQuIFRoaXMgaXMgbm90aGluZyBJIGhhdmUgZXZlciB0ZXN0ZWQgc2luY2UgSSB0aG91
Z2h0IHlvdSB3b3VsZCBkbyBhbg0KPj4+Pj4+PiBYU0tNQVAgcmVkaXJlY3QgdG8gdGhlICJyaWdo
dCIgY29yZSBmaXJzdC4gQnV0IHRoZXJlIGlzIG5vdGhpbmcNCj4+Pj4+Pj4gaGluZGVyaW5nIHRo
YXQgc29tZW9uZSB3b3VsZCBkbyBhIENQVU1BUCByZWRpcmVjdCBmaXJzdCB0aGVuIGFuIFhTS01B
UA0KPj4+Pj4+PiByZWRpcmVjdCwgc28gc2hvdWxkIGJlIHN1cHBvcnRlZC4gU28gaW4geW91ciBh
bmFseXNpcywgaXMgaXQgb25seQ0KPj4+Pj4+PiBxdWV1ZV9pbmRleCB0aGF0IG5lZWRzIHRvIGJl
IHBvcHVsYXRlZCBhdCBDUFVNQVAgcmVkaXJlY3QgdGltZSBmb3INCj4+Pj4+Pj4gdGhpcyB0byB3
b3JrPw0KPj4+Pj4+Pg0KPj4+Pj4+PiBUaGFua3M6IE1hZ251cw0KPj4+Pj4+Pg0KPj4+Pj4+Pj4+
IE9uIDI2IE1heSAyMDI0LCBhdCAxMjowMiwgWXV2YWwgRWwtSGFuYW55IDx5dXZhbGVAcmFkd2Fy
ZS5jb20+IHdyb3RlOg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gSGksDQo+Pj4+Pj4+Pj4gc28gSeKA
mXZlIGR1ZyBhIGJpdCBkZWVwZXIuIEl0IHNlZW1zIHRoZSByZWNlaXZlIHF1ZXVlIGlzIG5vdCBt
YWludGFpbmVkIGFjcm9zcyBDUFVzIGFuZCB0aGlzIG1heSBtYWtlIHRoZSB3aG9sZSBwcmFjdGlj
ZSBvZiByZWRpcmVjdGluZyB0byBYU0sgdW5zYWZlIGlmIEkgcmVhZCB0aGUgY29kZSBjb3JyZWN0
bHkuIEl0IGFsc28gc2VlbXMgdGhpcyBwZXJzaXN0cyB0byBrZXJuZWwgNi42LjguIEFtIEkgbWlz
c2luZyBzb21ldGhpbmc/DQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBUaGUgY29kZSBpbiBjcHVtYXAg
cnVucyBYRFAgcHJvZ3JhbXMgQlVUIGRvZXNu4oCZdCBmaWxsIHRoZSByeHEgKHNlZSBhbHNvIHRo
ZSBUT0RPIGNvbW1lbnQgaW4gdGhlIGNvZGUpLiBUaGUgWERQIGZyYW1lIGlzIGNvbnZlcnRlZCB0
byBYRFAgYnVmZmVyIGJ1dCB0aGUgcnhxIGFuZCB0eHEgYXJlIG5vdCBmaWxsZWQuIEl0IHNlZW1z
IHRoZXkgcmVtYWluIGFzIGRhbmdsaW5nIHBvaW50ZXJzLiBXaGVuIF9feHNrX21hcF9yZWRpcmVj
dCBpcyBjYWxsZWQgYW5kIGluIHR1cm4geHNrX3JjdiB0aGUgcnhxIGlzIGNvbnN1bHRlZCBib3Ro
IHRvIGNoZWNrIGlmIHRoZSB1bWVtIGlzIHNoYXJlZCAoaW4gdGhlIG5ldyBwYXRjaCkgYXMgd2Vs
bCBhcyBkZWNpZGUgd2hldGhlciB6ZXJvIGNvcHkgaXMgdXNlZCBvciBub3QuIFNpbmNlIHJ4cSBp
cyBub3QgdmFsaWQsIEnigJltIG5vdCBjZXJ0YWluIHdoYXQgdGhlIG91dGNvbWUgaXMuIE9uY2Ug
SSBieXBhc3NlZCB1bWVtIGNoZWNrLCBJIG5vIGxvbmdlciBjcmFzaCB0aGUga2VybmVsIGJ1dCBJ
J20gZGVmaW5pdGVseSBub3Qgc2VlaW5nIHRyYWZmaWMgcnVubmluZy4NCj4+Pj4+Pj4+Pg0KPj4+
Pj4+Pj4+IFRoYW5rcywNCj4+Pj4+Pj4+PiBZdXZhbC4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IEhl
cmUgYXJlIHRoZSBleGNlcnB0cyBmcm9tIHRoZSBjb2RlICg1LjE1LjExNyk6DQo+Pj4+Pj4+Pj4N
Cj4+Pj4+Pj4+PiBjcHVtYXAuYzoyMTIgPGNwdV9tYXBfYnBmX3Byb2dfcnVuX3hkcD4gPT09PT0g
Tm90ZSB0aGUgY29tbWVudCBpbiB0aGUgY29kZS4gPT09PT0NCj4+Pj4+Pj4+PiBmb3IgKGkgPSAw
OyBpIDwgbjsgaSsrKSB7DQo+Pj4+Pj4+Pj4gICAgc3RydWN0IHhkcF9mcmFtZSAqeGRwZiA9IGZy
YW1lc1tpXTsNCj4+Pj4+Pj4+PiAgICB1MzIgYWN0Ow0KPj4+Pj4+Pj4+ICAgIGludCBlcnI7DQo+
Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiByeHEuZGV2ID0geGRwZi0+ZGV2X3J4Ow0KPj4+Pj4+Pj4+ICAg
IHJ4cS5tZW0gPSB4ZHBmLT5tZW07DQo+Pj4+Pj4+Pj4gICAgLyogVE9ETzogcmVwb3J0IHF1ZXVl
X2luZGV4IHRvIHhkcF9yeHFfaW5mbyAqLw0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gICAgeGRwX2Nv
bnZlcnRfZnJhbWVfdG9fYnVmZih4ZHBmLCAmeGRwKTsNCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+ICAg
IGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAocmNwdS0+cHJvZywgJnhkcCk7DQo+Pj4+Pj4+Pj4NCj4+
Pj4+Pj4+PiB4ZHAuaDoxNzUgPT09PT0gcnhxICYgdHhxIGluIHRoZSB4ZHBfYnVmZiBhcmUgbm90
IGZpbGxlZCBvciBldmVuIHJlc2V0LiA9PT09PQ0KPj4+Pj4+Pj4+IHN0YXRpYyBpbmxpbmUNCj4+
Pj4+Pj4+PiB2b2lkIHhkcF9jb252ZXJ0X2ZyYW1lX3RvX2J1ZmYoc3RydWN0IHhkcF9mcmFtZSAq
ZnJhbWUsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQ0KPj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+PiB4ZHAt
PmRhdGFfaGFyZF9zdGFydCA9IGZyYW1lLT5kYXRhIC0gZnJhbWUtPmhlYWRyb29tIC0gc2l6ZW9m
KCpmcmFtZSk7DQo+Pj4+Pj4+Pj4geGRwLT5kYXRhID0gZnJhbWUtPmRhdGE7DQo+Pj4+Pj4+Pj4g
eGRwLT5kYXRhX2VuZCA9IGZyYW1lLT5kYXRhICsgZnJhbWUtPmxlbjsNCj4+Pj4+Pj4+PiB4ZHAt
PmRhdGFfbWV0YSA9IGZyYW1lLT5kYXRhIC0gZnJhbWUtPm1ldGFzaXplOw0KPj4+Pj4+Pj4+IHhk
cC0+ZnJhbWVfc3ogPSBmcmFtZS0+ZnJhbWVfc3o7DQo+Pj4+Pj4+Pj4gfQ0KPj4+Pj4+Pj4+DQo+
Pj4+Pj4+Pj4geHNrLmM6MjY5ID09PT09IHhza19yY3YgY29uc3VsdHMgcnhxIGluIHhkcF9idWZm
IHdoaWNoIGlzIG5vdCBmaWxsZWQhID09PT09DQo+Pj4+Pj4+Pj4gc3RhdGljIGludCB4c2tfcmN2
KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKQ0KPj4+Pj4+Pj4+IHsN
Cj4+Pj4+Pj4+PiBpbnQgZXJyOw0KPj4+Pj4+Pj4+IHUzMiBsZW47DQo+Pj4+Pj4+Pj4NCj4+Pj4+
Pj4+PiBlcnIgPSB4c2tfcmN2X2NoZWNrKHhzLCB4ZHApOw0KPj4+Pj4+Pj4+IGlmIChlcnIpDQo+
Pj4+Pj4+Pj4gICAgcmV0dXJuIGVycjsNCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IGlmICh4ZHAtPnJ4
cS0+bWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTCkgew0KPj4+Pj4+Pj4+IGxlbiA9
IHhkcC0+ZGF0YV9lbmQgLSB4ZHAtPmRhdGE7DQo+Pj4+Pj4+Pj4gICAgcmV0dXJuIF9feHNrX3Jj
dl96Yyh4cywgeGRwLCBsZW4pOw0KPj4+Pj4+Pj4+IH0NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IGVy
ciA9IF9feHNrX3Jjdih4cywgeGRwKTsNCj4+Pj4+Pj4+PiBpZiAoIWVycikNCj4+Pj4+Pj4+PiB4
ZHBfcmV0dXJuX2J1ZmYoeGRwKTsNCj4+Pj4+Pj4+PiByZXR1cm4gZXJyOw0KPj4+Pj4+Pj4+IH0N
Cj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IGludCBfX3hza19tYXBfcmVkaXJlY3Qoc3RydWN0IHhkcF9z
b2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApDQo+Pj4+Pj4+Pj4gew0KPj4+Pj4+Pj4+IHN0
cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QgPSB0aGlzX2NwdV9wdHIoJnhza21hcF9mbHVzaF9s
aXN0KTsNCj4+Pj4+Pj4+PiBpbnQgZXJyOw0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gZXJyID0geHNr
X3Jjdih4cywgeGRwKTsNCj4+Pj4+Pj4+PiBpZiAoZXJyKQ0KPj4+Pj4+Pj4+IHJldHVybiBlcnI7
DQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBpZiAoIXhzLT5mbHVzaF9ub2RlLnByZXYpDQo+Pj4+Pj4+
Pj4gICAgbGlzdF9hZGQoJnhzLT5mbHVzaF9ub2RlLCBmbHVzaF9saXN0KTsNCj4+Pj4+Pj4+Pg0K
Pj4+Pj4+Pj4+IHJldHVybiAwOw0KPj4+Pj4+Pj4+IH0NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+PiBP
biAyNCBNYXkgMjAyNCwgYXQgMTg6NDksIFl1dmFsIEVsLUhhbmFueSA8WXV2YWxFQFJhZHdhcmUu
Y29tPiB3cm90ZToNCj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4gQ0FVVElPTjpFeHRlcm5hbCBFbWFp
bCwgRG8gbm90IGNsaWNrIG9uIGxpbmtzIG9yIG9wZW4gYXR0YWNobWVudHMgdW5sZXNzIHlvdSBy
ZWNvZ25pemUgdGhlIHNlbmRlciBhbmQga25vdyB0aGUgY29udGVudCBpcyBzYWZlLg0KPj4+Pj4+
Pj4+Pg0KPj4+Pj4+Pj4+PiBIaSBBbGwsDQo+Pj4+Pj4+Pj4+ICAgSSB3b3VsZCByZWFsbHkgYXBw
cmVjaWF0ZSBzb21lIGd1aWRhbmNlIGhlcmUuIEFzIHRoaXMgaXNzdWUgc3BhbnMgYm90aCBuZXR3
b3JrIFhEUCBhbmQgQ1BVIG1hcCwgaXTigJlzIGEgYml0IG1vcmUgZGlmZmljdWx0IGZvciBtZSB0
byBmb2xsb3cgaW4gdGhlIGtlcm5lbCBjb2RlLiBJIGF0dGVtcHRlZCB0byB0cmFjZSB0aGUgaXNz
dWUgaW4gdGhlIHNvdXJjZSwgYnV0IGl04oCZcyBhIGJpdCBjb21wbGV4IHRvIGVudGVyIGV4aXN0
aW5nIGNvZGUgYmFzZS4NCj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4gICBJdCB3aWxsIGJlIGVhc2ll
ciBpZiB5b3UgY2FuIHRlbGwgbWUgdGhlIGZvbGxvd2luZzoNCj4+Pj4+Pj4+Pj4gMS4gSXMgdGhl
IHJlY2VpdmUgcXVldWUgbWV0YWRhdGEgbWFpbnRhaW5lZCBjb3JyZWN0bHkgdGhyb3VnaCB0aGUg
Q1BVIHN3aXRjaCBpbiBDUFUgbWFwPyBJbiB0aGUgZGVzY3JpcHRpb24gb2YgQ1BVIG1hcCBpbiBY
RFAgKGh0dHBzOi8vZGV2ZWxvcGVycy5yZWRoYXQuY29tL2Jsb2cvMjAyMS8wNS8xMy9yZWNlaXZl
LXNpZGUtc2NhbGluZy1yc3Mtd2l0aC1lYnBmLWFuZC1jcHVtYXApLCBpdCBpcyBtZW50aW9uZWQg
dGhhdCBzb21lIG1ldGFkYXRhIGlzIG5vdCBtYWludGFpbmVkIGFjcm9zcyB0aGUgQ1BVIHN3aXRj
aCwgYnV0IHRoYXQgd291bGQgbWFrZSB0aGUgdW1lbSB0ZXN0IHByb2JsZW1hdGljLiBTaG91bGQg
SSBhc3N1bWUgdGhlIHJlY2VpdmUgcXVldWUgaXMgbWFpbnRhaW5lZD8NCj4+Pj4+Pj4+Pj4gMi4g
RG9lcyBYU0sgdW1lbSB1c2VyIGNvZGUgaGF2ZSBhY2Nlc3MgdG8gdGhlIHJlY2VpdmUgcXVldWUg
bWV0YWRhdGEgbWVtb3J5PyBJdCBzZWVtcyB0byBiZSBpbiBhIGRpZmZlcmVudCBwb2ludGVyLCBi
dXQgaXQgY291bGQgYmUgdGhhdCBpdCBwb2ludHMgdG8gdGhlIHBhY2tldCBoZWFkcm9vbSBpbiB0
aGUgdW1lbSBhY2Nlc3NpYmxlIG1lbW9yeS4NCj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4gICBJZiB0
aGUgcmVjZWl2ZSBxdWV1ZSBpcyBub3QgbWFpbnRhaW5lZCBhY3Jvc3MgQ1BVIHN3aXRjaCB0aGVu
IEkgdGhpbmsgdGhlIHNoYXJlZCB1bWVtIHRlc3Qgc2hvdWxkIHJ1biBhbG9uZyB0aGUgbGluZXMg
b2YgdXNpbmcgc29tZSBkZWZhdWx0IHJlY2VpdmUgcXVldWUgYWZ0ZXIgc3dpdGNoaW5nIENQVXMu
IE90aGVyd2lzZSwgaXQgc2hvdWxkIHByb2JhYmx5IGRyb3AgcGFja2V0cyB3aXRoIGludmFsaWQg
cmVjZWl2ZSBxdWV1ZXMuDQo+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+ICAgVGhhbmtzLA0KPj4+Pj4+
Pj4+PiAgICAgICAgICAgWXV2YWwuDQo+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBPbiAyMCBNYXkg
MjAyNCwgYXQgMTg6MjQsIFl1dmFsIEVsLUhhbmFueSA8WXV2YWxFQFJhZHdhcmUuY29tPiB3cm90
ZToNCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBIaSwNCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+
PiBTaG9ydCBWZXJzaW9uDQo+Pj4+Pj4+Pj4+PiBJ4oCZdmUgZW5jb3VudGVyZWQgYW4gaXNzdWUg
cmVkaXJlY3RpbmcgdHJhZmZpYyB0byBhbm90aGVyIENQVSB3aGlsZSB1c2luZyBzaGFyZWQgVU1F
TS4gVGhlIGZyYW1lIGFycml2ZWQgYXQgdGhlIHJlZGlyZWN0ZWQgQ1BVIHdpdGggaW52YWxpZCBy
ZWNlaXZlIHF1ZXVlLiBUaGlzIGNhdXNlZCBhIGtlcm5lbCBjcmFzaCBvbiB0aGUgcGF0Y2ggdGhh
dCBzdXBwb3J0cyByZWRpcmVjdGluZyB0byBwYWNrZXRzIHRvIGFueSBxdWV1ZSB3aXRoIHRoZSBz
YW1lIHVtZW0gZHVlIHRvIGEgdGVzdCBiYXNlZCBvbiB0aGUgcmVjZWl2ZSBxdWV1ZS4NCj4+Pj4+
Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBMb25nIFZlcnNpb24NCj4+Pj4+Pj4+Pj4+IEnigJl2ZSBjcmVh
dGVkIGEgdGVzdCBwcm9ncmFtIHRoYXQgcmVkaXJlY3RzIHRyYWZmaWMgYmV0d2VlbiB0d28gaW50
ZXJmYWNlcyAocmVwbGFjaW5nIHRoZSBNQUMgYWRkcmVzcykuIFNlZSB0aGUgY29kZSBiZWxvdy4g
SXQgc3RhcnRzIHR3byBzZXBhcmF0ZSBwcm9jZXNzZXMgb24gdHdvIGRpZmZlcmVudCBjb3Jlcy4g
V2hlbiBkaXJlY3RpbmcgdHJhZmZpYyBkaXJlY3RseSB0byBhbiBYU0sgc29ja2V0IGFsbCB3b3Jr
cyB3ZWxsLiBJ4oCZbSBydW5uaW5nIG9uIGtlcm5lbCA1LjE1LjExNyB3aXRoIE1hZ251cyBwYXRj
aCBmb3Igc2hhcmVkIHVtZW0uDQo+Pj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+Pj4gVGhlIG5leHQgc3Rl
cCB3YXMgYW4gWERQIHByb2dyYW0gdGhhdCByZWRpcmVjdHMgZWFjaCBwYWNrZXQgdG8gdGhlIG90
aGVyIENQVSwgYW5kIHRoZSB4ZHAgQ1BVIHByb2dyYW0gcmVkaXJlY3QgdGhlIHBhY2tldHMgdG8g
YW4gWERQIHNvY2tldC4gSW5pdGlhbGx5IHRoaXMgcmVzdWx0ZWQgaW4gYSBrZXJuZWwgY3Jhc2gu
IFRoZSByZWFzb24gaXMgdGhhdCB0aGUgcmVjZWl2ZSBxdWV1ZSBpcyBub3QgcmVjZWl2ZWQgY29y
cmVjdGx5IG9uY2UgdGhlIHBhY2tldCBzd2l0Y2hlcyBDUFUuDQo+Pj4+Pj4+Pj4+Pg0KPj4+Pj4+
Pj4+Pj4gSeKAmXZlIHBhdGNoZWQgdGhlIGtlcm5lbCBzbyBpdCBkb2VzIHNhbml0eSBjaGVjayBh
bmQgZG9lcyBub3QgY3Jhc2ggYnV0IGRlZmF1bHRzIHRvIHF1ZXVlIDAganVzdCBmb3IgdGhlIHVt
ZW0gdGVzdC4NCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBUaGUga2VybmVsIG5vIGxvbmdlciBj
cmFzaGVzIGJ1dCBJIGRvbuKAmXQgZ2V0IHRoZSB0cmFmZmljIHRvIHRoZSBYU0sgc29ja2V0cywg
YW5kIEkgbG9nIHRoZSByZWNlaXZlIHF1ZXVlcyBhbmQgdGhleSBkbyBub3Qgc2VlbSByYW5kb206
DQo+Pj4+Pj4+Pj4+PiBPbiBmaXJzdCBpbnRlcmZhY2U6DQo+Pj4+Pj4+Pj4+PiAweEMxMzIzRDUw
DQo+Pj4+Pj4+Pj4+PiAweEMxMzQzRDE5DQo+Pj4+Pj4+Pj4+PiAweEMxMzQzRDUwDQo+Pj4+Pj4+
Pj4+Pg0KPj4+Pj4+Pj4+Pj4gT24gc2Vjb25kIGludGVyZmFjZToNCj4+Pj4+Pj4+Pj4+IDB4QzEz
NEJENTANCj4+Pj4+Pj4+Pj4+IDB4QzEzNUJENTANCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBW
ZXJ5IGZldyBiaXRzIGRpZmZlcmVuY2VzIGJldHdlZW4gZWFjaCBvZiB0aGUg4oCccmVjZWl2ZSBx
dWV1ZXPigJ0uIEkgY291bGRu4oCZdCByZWFsbHkgZmluZCBzb21ldGhpbmcgaW4gbXkgcHJvZ3Jh
bSB3aXRoIHRob3NlIG9yIHNpbWlsYXIgdmFsdWVzLCBvciBpbiB0aGUgcGFja2V0cyBzbyBpdCBt
YWtlcyBpdCBsZXNzIGxpa2VseSBpdCBjb21lcyBmcm9tIHNvbWV0aGluZyBJIGRvIGluIHVzZXJz
cGFjZS4gU2VlbXMgdG8gc3VnZ2VzdCBzb21lIGZsYWdzIGZpZWxkPyBUaGUgdmFsdWVzIGFyZSBu
b3QgYWx3YXlzIHRoZSBzYW1lIGFjcm9zcyByZWJvb3RzIGJ1dCBwcmV0dHkgY2xvc2UuDQo+Pj4+
Pj4+Pj4+Pg0KPj4+Pj4+Pj4+Pj4gQW0gSSBkb2luZyBzb21ldGhpbmcgd3Jvbmc/IEl0IHNlZW1z
IHByZXR0eSBiYXNpYy4gTW9zdCBvZiB0aGUgY29kZSBpbiB0aGUgWERQIHByb2dyYW0gd2FzIGp1
c3QgYWRkZWQgZm9yIGRlYnVnZ2luZy4gVGhlIG9ubHkgb2RkaXR5IHBlcmhhcHMgaXMgdXNpbmcg
dGhlIHNoYXJlZCB1bWVtLg0KPj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4+IFRoYW5rcywNCj4+Pj4+
Pj4+Pj4+IFl1dmFsLg0KPj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4+IEnigJltIGF0dGFjaGluZyB0
aGUgcHJvZ3JhbSBhbmQgdmFsdWVzIGZyb20gbXkgImRlYnVnIG1hcOKAnS4gSW4gdGhlIGRlYnVn
IG1hcDoNCj4+Pj4+Pj4+Pj4+IDAuIFZhbHVlcyAwLzEgLSBXaGljaCB0eXBlIG9mIHByb2dyYW0g
cmFuICh3aXRoL3dpdGhvdXQgQ1BVIHJlZGlyZWN0aW9uKS4NCj4+Pj4+Pj4+Pj4+IDEuIFZhbHVl
cyAyWFkgLSBwYWNrZXQgcmVkaXJlY3RlZCBmcm9tIGNvcmUgWCB0byBjb3JlIFkgKDFzdCBzdGFn
ZSkuDQo+Pj4+Pj4+Pj4+PiAyLiBWYWx1ZXMgNFhZIC0gcGFja2V0IG9uIGNvcmUgWCByZXR1cm5z
IGFjdGlvbiBZICgxc3Qgc3RhZ2UpLg0KPj4+Pj4+Pj4+Pj4gKFRoZXNlIHN1Z2dlc3QgdGhhdCAx
c3Qgc3RhZ2Ugd29ya2VkIGNvcnJlY3RseSkuDQo+Pj4+Pj4+Pj4+PiAzLiBWYWx1ZXMgMVhYWVkg
LSBwYWNrZXQgcmVjZWl2ZSBxdWV1ZSBYWCBvbiBjb3JlIFlZIChYWCA9IDEwIGlzIGludmFsaWQg
cmVjZWl2ZSBxdWV1ZSBvdXRzaWRlIDIuLjUpLg0KPj4+Pj4+Pj4+Pj4gNC4gMlhYWFggLSBwYWNr
ZXQgcmVjZWl2ZSBxdWV1ZSBvbiBhbnkgY29yZSAoWFhYWCAtIDQ5OTkgaW1lYW5zIHF1ZXVlIGdy
ZWF0ZXIgdGhhbiA1MDAwKS4NCj4+Pj4+Pj4+Pj4+IDUuIFJhbmRvbSBlbnRyeSAtIGEgcmVjZWl2
ZSBxdWV1ZS4NCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBEZWJ1ZyBtYXAgdmFsdWVzIHdpdGhv
dXQgQ1BVIHJlZGlyZWN0aW9uOg0KPj4+Pj4+Pj4+Pj4gKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0t
LS0tLS0rDQo+Pj4+Pj4+Pj4+PiB8IFBvcnQgfCBLZXkgIHwgICAgIFJlY2VpdmVkIHwNCj4+Pj4+
Pj4+Pj4+ICstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tKw0KPj4+Pj4+Pj4+Pj4gfCAgICAw
IHwgMTAzMiB8ICAgICAgICAgIDUwNCB8DQo+Pj4+Pj4+Pj4+PiB8ICAgIDAgfCAxMDI0IHwgICAg
IDM3MDA1OTkyIHwNCj4+Pj4+Pj4+Pj4+IHwgICAgMCB8IDEwMzQgfCAgICAgMzc1NDQwNTIgfA0K
Pj4+Pj4+Pj4+Pj4gfCAgICAwIHwgICAgMCB8ICAgICA3NDU0Njg3NSB8DQo+Pj4+Pj4+Pj4+PiB8
ICAgIDEgfCAxMDM0IHwgICAgIDM1NzY1OTYxIHwNCj4+Pj4+Pj4+Pj4+IHwgICAgMSB8ICAgIDAg
fCAgICAgNzE0OTI3NzMgfA0KPj4+Pj4+Pj4+Pj4gfCAgICAxIHwgMTAyNCB8ICAgICAzNTcyOTEw
NyB8DQo+Pj4+Pj4+Pj4+PiB8ICAgIDEgfCAxMDMyIHwgICAgICAgICAgMjc3IHwNCj4+Pj4+Pj4+
Pj4+ICstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tKw0KPj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+
Pj4+IERlYnVnIG1hcCB2YWx1ZSB3aXRoIENQVSByZWRpcmVjdGlvbiAobm8gb3RoZXIgY2hhbmdl
KToNCj4+Pj4+Pj4+Pj4+ICstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tKw0KPj4+Pj4+Pj4+
Pj4gfCBQb3J0IHwgS2V5ICB8ICAgICBSZWNlaXZlZCB8DQo+Pj4+Pj4+Pj4+PiArLS0tLS0tKy0t
LS0tLSstLS0tLS0tLS0tLS0tLSsNCj4+Pj4+Pj4+Pj4+IHwgICAgMCB8ICAgIDEgfCAgICAgICAg
IDM0MDAgfA0KPj4+Pj4+Pj4+Pj4gfCAgICAwIHwgIDIyMyB8ICAgICAgICAgMjk0NyB8DQo+Pj4+
Pj4+Pj4+PiB8ICAgIDAgfCAgMjMyIHwgICAgICAgICAgNDU0IHwNCj4+Pj4+Pj4+Pj4+IHwgICAg
MCB8ICA0MjQgfCAgICAgICAgICA0NTQgfA0KPj4+Pj4+Pj4+Pj4gfCAgICAwIHwgIDQzNCB8ICAg
ICAgICAgMjk0NyB8DQo+Pj4+Pj4+Pj4+PiB8ICAgIDAgfCAxMTAwMiB8ICAgICAgICAgIDQ1NCB8
DQo+Pj4+Pj4+Pj4+PiB8ICAgIDAgfCAxMTAwMyB8ICAgICAgICAgMjk0NyB8DQo+Pj4+Pj4+Pj4+
PiB8ICAgIDAgfCAyMDAwMCB8ICAgICAgICAgIDEwNiB8DQo+Pj4+Pj4+Pj4+PiB8ICAgIDAgfCAy
MDAxNiB8ICAgICAgICAgICAgNyB8DQo+Pj4+Pj4+Pj4+PiB8ICAgIDAgfCAyMDAyNCB8ICAgICAg
ICAgMTA1OCB8DQo+Pj4+Pj4+Pj4+PiB8ICAgIDAgfCAyMDU4MiB8ICAgICAgICAgICAgMiB8DQo+
Pj4+Pj4+Pj4+PiB8ICAgIDAgfCAyNDk5OSB8ICAgICAgICAgMjIzMSB8DQo+Pj4+Pj4+Pj4+PiB8
ICAgIDAgfCAzMjQxMjk1MTg0IHwgICAgICAgICAgMzM5IHwNCj4+Pj4+Pj4+Pj4+IHwgICAgMCB8
IDMyNDE0MjYyMDEgfCAgICAgICAgICAgIDMgfA0KPj4+Pj4+Pj4+Pj4gfCAgICAwIHwgMzI0MTQy
NjI1NiB8ICAgICAgICAgMTg5MSB8DQo+Pj4+Pj4+Pj4+PiB8ICAgIDEgfCAgICAxIHwgICAgICAg
ICAxMDEzIHwNCj4+Pj4+Pj4+Pj4+IHwgICAgMSB8ICAyMjMgfCAgICAgICAgICA2MTAgfA0KPj4+
Pj4+Pj4+Pj4gfCAgICAxIHwgIDIzMiB8ICAgICAgICAgIDQwNCB8DQo+Pj4+Pj4+Pj4+PiB8ICAg
IDEgfCAgNDI0IHwgICAgICAgICAgNDA0IHwNCj4+Pj4+Pj4+Pj4+IHwgICAgMSB8ICA0MzQgfCAg
ICAgICAgICA2MTAgfA0KPj4+Pj4+Pj4+Pj4gfCAgICAxIHwgMTEwMDIgfCAgICAgICAgICA0MDQg
fA0KPj4+Pj4+Pj4+Pj4gfCAgICAxIHwgMTEwMDMgfCAgICAgICAgICA2MTAgfA0KPj4+Pj4+Pj4+
Pj4gfCAgICAxIHwgMjAwMDAgfCAgICAgICAgICAgMTcgfA0KPj4+Pj4+Pj4+Pj4gfCAgICAxIHwg
MjAwMjQgfCAgICAgICAgICAzMDkgfA0KPj4+Pj4+Pj4+Pj4gfCAgICAxIHwgMjQ5OTkgfCAgICAg
ICAgICA2ODkgfA0KPj4+Pj4+Pj4+Pj4gfCAgICAxIHwgMzI0MTQ1OTAyNCB8ICAgICAgICAgIDMw
OSB8DQo+Pj4+Pj4+Pj4+PiB8ICAgIDEgfCAzMjQxNTI0NTYwIHwgICAgICAgICAgMzgxIHwNCj4+
Pj4+Pj4+Pj4+ICstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tKw0KPj4+Pj4+Pj4+Pj4NCj4+
Pj4+Pj4+Pj4+IFRoZSBYRFAgY29kZSAoI2lmIDAgaXMgZm9yIHRoZSBubyBDUFUgcmVkaXJlY3Rp
b24pOg0KPj4+Pj4+Pj4+Pj4gLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8N
Cj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4NCj4+
Pj4+Pj4+Pj4+ICNpbmNsdWRlIDxsaW51eC9icGYuaD4NCj4+Pj4+Pj4+Pj4+ICNpbmNsdWRlIDxs
aW51eC9pbi5oPg0KPj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4+ICNpbmNsdWRlIDxicGYvYnBmX2hl
bHBlcnMuaD4NCj4+Pj4+Pj4+Pj4+ICNpbmNsdWRlIDxicGYvYnBmX2VuZGlhbi5oPg0KPj4+Pj4+
Pj4+Pj4NCj4+Pj4+Pj4+Pj4+ICNpbmNsdWRlICJ4ZHAvcGFyc2luZ19oZWxwZXJzLmgiDQo+Pj4+
Pj4+Pj4+Pg0KPj4+Pj4+Pj4+Pj4gLyogUmVkaXJlY3QgdG8gU1AgcXVldWVzIG1hcC4gKi8NCj4+
Pj4+Pj4+Pj4+IHN0cnVjdA0KPj4+Pj4+Pj4+Pj4gew0KPj4+Pj4+Pj4+Pj4gX191aW50ICh0eXBl
LCBCUEZfTUFQX1RZUEVfWFNLTUFQKTsNCj4+Pj4+Pj4+Pj4+IF9fdHlwZSAoa2V5LCBfX3UzMik7
DQo+Pj4+Pj4+Pj4+PiBfX3R5cGUgKHZhbHVlLCBfX3UzMik7DQo+Pj4+Pj4+Pj4+PiBfX3VpbnQg
KG1heF9lbnRyaWVzLCAxMjgpOw0KPj4+Pj4+Pj4+Pj4gfSB4c2tzX21hcCBTRUMoIi5tYXBzIik7
DQo+Pj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+Pj4gLyogUmVkaXJlY3QgdG8gQ1BVcyBtYXAuICovDQo+
Pj4+Pj4+Pj4+PiBzdHJ1Y3QNCj4+Pj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+Pj4+IF9fdWludCAodHlw
ZSwgQlBGX01BUF9UWVBFX0NQVU1BUCk7DQo+Pj4+Pj4+Pj4+PiBfX3VpbnQgKGtleV9zaXplLCBz
aXplb2YgKF9fdTMyKSk7DQo+Pj4+Pj4+Pj4+PiBfX3VpbnQgKHZhbHVlX3NpemUsIHNpemVvZiAo
c3RydWN0IGJwZl9jcHVtYXBfdmFsKSk7DQo+Pj4+Pj4+Pj4+PiBfX3VpbnQgKG1heF9lbnRyaWVz
LCAzMik7DQo+Pj4+Pj4+Pj4+PiB9IGNwdV9tYXAgU0VDKCIubWFwcyIpOw0KPj4+Pj4+Pj4+Pj4N
Cj4+Pj4+Pj4+Pj4+IC8qIFN0YXRpc3RpY3MgYW5kIGRlYnVnIG1hcHMuICovDQo+Pj4+Pj4+Pj4+
PiBzdHJ1Y3QNCj4+Pj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+Pj4+IF9fdWludCAodHlwZSwgQlBGX01B
UF9UWVBFX1BFUkNQVV9BUlJBWSk7DQo+Pj4+Pj4+Pj4+PiBfX3R5cGUgKGtleSwgX191MzIpOw0K
Pj4+Pj4+Pj4+Pj4gX190eXBlICh2YWx1ZSwgX191MzIpOw0KPj4+Pj4+Pj4+Pj4gX191aW50ICht
YXhfZW50cmllcywgNjQpOw0KPj4+Pj4+Pj4+Pj4gfSB4ZHBfc3RhdHNfbWFwIFNFQygiLm1hcHMi
KTsNCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBzdHJ1Y3QNCj4+Pj4+Pj4+Pj4+IHsNCj4+Pj4+
Pj4+Pj4+IF9fdWludCAodHlwZSwgQlBGX01BUF9UWVBFX0hBU0gpOw0KPj4+Pj4+Pj4+Pj4gX190
eXBlIChrZXksIF9fdTMyKTsNCj4+Pj4+Pj4+Pj4+IF9fdHlwZSAodmFsdWUsIF9fdTMyKTsNCj4+
Pj4+Pj4+Pj4+IF9fdWludCAobWF4X2VudHJpZXMsIDY0KTsNCj4+Pj4+Pj4+Pj4+IH0geGRwX2Rl
YnVnX3Byb3RvIFNFQygiLm1hcHMiKTsNCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBzdGF0aWMg
X191MzIgb25ldmFsID0gMTsNCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBpbnQgbXlfcGFyc2Vf
ZXRoaGRyIChzdHJ1Y3QgaGRyX2N1cnNvciogbmgsIHZvaWQqIGRhdGFlbmQsIHN0cnVjdCBldGho
ZHIqKiBldGgpDQo+Pj4+Pj4+Pj4+PiB7DQo+Pj4+Pj4+Pj4+PiBfX3UxNiBldGh0eXBlOw0KPj4+
Pj4+Pj4+Pj4gKmV0aCA9IG5oLT5wb3M7DQo+Pj4+Pj4+Pj4+PiBpZiAoKHZvaWQqKSAmKCpldGgp
IFsxXSA+IGRhdGFlbmQpDQo+Pj4+Pj4+Pj4+PiB7DQo+Pj4+Pj4+Pj4+PiByZXR1cm4gKC0xKTsN
Cj4+Pj4+Pj4+Pj4+IH0NCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBldGh0eXBlID0gKCpldGgp
LT5oX3Byb3RvOw0KPj4+Pj4+Pj4+Pj4gbmgtPnBvcyA9ICYoKmV0aCkgWzFdOw0KPj4+Pj4+Pj4+
Pj4gaWYgKGV0aHR5cGUgPT0gYnBmX250b2hzIChFVEhfUF84MDIxUSkpDQo+Pj4+Pj4+Pj4+PiB7
DQo+Pj4+Pj4+Pj4+PiBzdHJ1Y3Qgdmxhbl9oZHIqIHZsYW4gPSAoc3RydWN0IHZsYW5faGRyKikg
JigqZXRoKSBbMV07DQo+Pj4+Pj4+Pj4+PiBpZiAoKHZvaWQqKSAmdmxhbiBbMV0gPiBkYXRhZW5k
KQ0KPj4+Pj4+Pj4+Pj4gew0KPj4+Pj4+Pj4+Pj4gICAgICAgcmV0dXJuICgtMSk7DQo+Pj4+Pj4+
Pj4+PiB9DQo+Pj4+Pj4+Pj4+PiAgIGV0aHR5cGUgPSB2bGFuLT5oX3ZsYW5fZW5jYXBzdWxhdGVk
X3Byb3RvOw0KPj4+Pj4+Pj4+Pj4gLyogaW5jX2RlYnVnX21hcCAoMTAwMDArKGJwZl9udG9ocyAo
dmxhbi0+aF92bGFuX1RDSSkgJiAweDBGRkYpKTsgKi8NCj4+Pj4+Pj4+Pj4+IC8qIGluY19kZWJ1
Z19tYXAgKHZsYW4tPmhfdmxhbl9UQ0kpOyAqLw0KPj4+Pj4+Pj4+Pj4gbmgtPnBvcyA9ICZ2bGFu
IFsxXTsNCj4+Pj4+Pj4+Pj4+IH0NCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiByZXR1cm4gKGV0
aHR5cGUpOw0KPj4+Pj4+Pj4+Pj4gfQ0KPj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4+IHN0YXRpYyB2
b2lkIGluY19kZWJ1Z19tYXAgKF9fdTMyIGtleSkNCj4+Pj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+Pj4+
ICNpZmRlZiBXSVRIX1NUQVRTDQo+Pj4+Pj4+Pj4+PiBicGZfbWFwX3VwZGF0ZV9lbGVtICgmeGRw
X2RlYnVnX3Byb3RvLA0KPj4+Pj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICZrZXksIChfX3Uz
MiopICZvbmV2YWwsIEJQRl9OT0VYSVNUKTsNCj4+Pj4+Pj4+Pj4+IF9fdTMyKiByZWMgPSBicGZf
bWFwX2xvb2t1cF9lbGVtICgmeGRwX2RlYnVnX3Byb3RvLCAoX191MzIqKSAma2V5KTsNCj4+Pj4+
Pj4+Pj4+IGlmIChyZWMgIT0gTlVMTCkNCj4+Pj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+Pj4+ICsrKCpy
ZWMpOw0KPj4+Pj4+Pj4+Pj4gfQ0KPj4+Pj4+Pj4+Pj4gI2VuZGlmDQo+Pj4+Pj4+Pj4+PiB9DQo+
Pj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiBTRUMgKCJ4
ZHAiKQ0KPj4+Pj4+Pj4+Pj4gaW50IHJkd3JfeHNrX3Byb2cgKHN0cnVjdCB4ZHBfbWQgKmN0eCkN
Cj4+Pj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+Pj4+IGVudW0geGRwX2FjdGlvbiBhY3Rpb247DQo+Pj4+
Pj4+Pj4+PiBpbnQgaW5kZXggPSBjdHgtPnJ4X3F1ZXVlX2luZGV4Ow0KPj4+Pj4+Pj4+Pj4gdm9p
ZCogZGF0YWVuZCA9ICh2b2lkICopKGxvbmcpY3R4LT5kYXRhX2VuZDsNCj4+Pj4+Pj4+Pj4+IHZv
aWQqIGRhdGEgPSAodm9pZCAqKShsb25nKWN0eC0+ZGF0YTsNCj4+Pj4+Pj4+Pj4+IGludCBzdGFn
ZSA9IDA7DQo+Pj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+Pj4gc3RydWN0IGhkcl9jdXJzb3Igbmg7DQo+
Pj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+Pj4gX191MzIgKnBrdF9jb3VudDsNCj4+Pj4+Pj4+Pj4+IHN0
cnVjdCBldGhoZHIqIGV0aDsNCj4+Pj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiAjaWZkZWYgV0lUSF9T
VEFUUw0KPj4+Pj4+Pj4+Pj4gcGt0X2NvdW50ID0gYnBmX21hcF9sb29rdXBfZWxlbSgmeGRwX3N0
YXRzX21hcCwgJmluZGV4KTsNCj4+Pj4+Pj4+Pj4+IGlmIChwa3RfY291bnQgIT0gTlVMTCkNCj4+
Pj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+Pj4+ICsrKnBrdF9jb3VudDsNCj4+Pj4+Pj4+Pj4+IH0NCj4+
Pj4+Pj4+Pj4+ICNlbmRpZg0KPj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4+IC8qIFBhcnNlIEV0aGVy
bmV0ICYgVkxBTiAqLw0KPj4+Pj4+Pj4+Pj4gbmgucG9zID0gZGF0YTsNCj4+Pj4+Pj4+Pj4+IGlu
dCBldGh0eXBlID0gbXlfcGFyc2VfZXRoaGRyICgmbmgsIGRhdGFlbmQsICZldGgpOw0KPj4+Pj4+
Pj4+Pj4gaWYgKGV0aHR5cGUgIT0gYnBmX250b2hzICgweDA4MDApKQ0KPj4+Pj4+Pj4+Pj4gew0K
Pj4+Pj4+Pj4+Pj4gcmV0dXJuIChYRFBfUEFTUyk7DQo+Pj4+Pj4+Pj4+PiB9DQo+Pj4+Pj4+Pj4+
Pg0KPj4+Pj4+Pj4+Pj4gLyogRGlyZWN0IFhTSyByZWRpcmVjdC4gKi8NCj4+Pj4+Pj4+Pj4+ICNp
ZiAwDQo+Pj4+Pj4+Pj4+PiBpbmNfZGVidWdfbWFwIChzdGFnZSk7DQo+Pj4+Pj4+Pj4+PiBhY3Rp
b24gPSAgYnBmX3JlZGlyZWN0X21hcCAoJnhza3NfbWFwLCBpbmRleCwgWERQX1BBU1MpOw0KPj4+
Pj4+Pj4+Pj4gaW5jX2RlYnVnX21hcCAoMTAwMCArIGluZGV4KjEwICsgYWN0aW9uKTsNCj4+Pj4+
Pj4+Pj4+ICNlbmRpZg0KPj4+Pj4+Pj4+Pj4gLyogQ1BVIG1hcCByZWRpcmVjdC4gKi8NCj4+Pj4+
Pj4+Pj4+IF9fdTMyIGNwdWlkID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkICgpOw0KPj4+Pj4+
Pj4+Pj4gX191MzIgdGFyZ2V0Y3B1ID0gY3B1aWQgXiAweDAxOw0KPj4+Pj4+Pj4+Pj4gKytzdGFn
ZTsNCj4+Pj4+Pj4+Pj4+IGluY19kZWJ1Z19tYXAgKHN0YWdlKTsNCj4+Pj4+Pj4+Pj4+IGluY19k
ZWJ1Z19tYXAgKDIwMCArIGNwdWlkICogMTAgKyB0YXJnZXRjcHUpOw0KPj4+Pj4+Pj4+Pj4gYWN0
aW9uID0gIGJwZl9yZWRpcmVjdF9tYXAgKCZjcHVfbWFwLCB0YXJnZXRjcHUsIFhEUF9QQVNTKTsN
Cj4+Pj4+Pj4+Pj4+IGluY19kZWJ1Z19tYXAgKDQwMCArIHRhcmdldGNwdSAqIDEwICsgYWN0aW9u
KTsNCj4+Pj4+Pj4+Pj4+IHJldHVybiAoYWN0aW9uKTsNCj4+Pj4+Pj4+Pj4+IH0NCj4+Pj4+Pj4+
Pj4+DQo+Pj4+Pj4+Pj4+PiBTRUMgKCJ4ZHAvY3B1bWFwIikNCj4+Pj4+Pj4+Pj4+IGludCByZHdy
X2NwdV9wcm9nKHN0cnVjdCB4ZHBfbWQgKmN0eCkNCj4+Pj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+Pj4+
IF9fdTY0KiBkYXRhZW5kNjQgPSAoX191NjQqKSAobG9uZykgY3R4LT5kYXRhX2VuZDsNCj4+Pj4+
Pj4+Pj4+IF9fdTY0KiBkYXRhNjQgPSAoX191NjQqKSAobG9uZykgY3R4LT5kYXRhOw0KPj4+Pj4+
Pj4+Pj4gX191MzIgcnhxdWV1ZSA9IGN0eC0+cnhfcXVldWVfaW5kZXg7DQo+Pj4+Pj4+Pj4+PiBp
ZiAocnhxdWV1ZSA8IDUwMDApDQo+Pj4+Pj4+Pj4+PiB7DQo+Pj4+Pj4+Pj4+PiBpbmNfZGVidWdf
bWFwICgyMDAwMCArIHJ4cXVldWUpOw0KPj4+Pj4+Pj4+Pj4gfQ0KPj4+Pj4+Pj4+Pj4gZWxzZQ0K
Pj4+Pj4+Pj4+Pj4gew0KPj4+Pj4+Pj4+Pj4gaW5jX2RlYnVnX21hcCAocnhxdWV1ZSk7DQo+Pj4+
Pj4+Pj4+PiBpbmNfZGVidWdfbWFwICgyNDk5OSk7DQo+Pj4+Pj4+Pj4+PiB9DQo+Pj4+Pj4+Pj4+
Pg0KPj4+Pj4+Pj4+Pj4gcnhxdWV1ZSA9IChyeHF1ZXVlID49IDIgJiYgcnhxdWV1ZSA8IDYpID8g
cnhxdWV1ZSA6IDEwOw0KPj4+Pj4+Pj4+Pj4gX191MzIgY3B1aWQgPSBicGZfZ2V0X3NtcF9wcm9j
ZXNzb3JfaWQgKCk7DQo+Pj4+Pj4+Pj4+PiBjcHVpZCA9IChjcHVpZCA8IDEyKSA/IGNwdWlkIDog
MjA7DQo+Pj4+Pj4+Pj4+PiBpbmNfZGVidWdfbWFwICgxMDAwMCArIDEwMCpyeHF1ZXVlICsgY3B1
aWQpOw0KPj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4+IHJldHVybiBicGZfcmVkaXJlY3RfbWFwICgm
eHNrc19tYXAsIGJwZl9nZXRfc21wX3Byb2Nlc3Nvcl9pZCAoKSwgMCk7DQo+Pj4+Pj4+Pj4+PiB9
DQoNCg0K