Re: XDP CPU maps & shared umem

Yuval El-Hanany <[email protected]> Tue, 28 May 2024 16:03:48 +0000
Newsgroups org.kernel.vger.xdp-newbies
Message-ID <[email protected]>
SGksDQogICAgICAgIHRoaXMgaXMgbXkgdGVtcG9yYXJ5IHBhdGNoIHRvIGdldCB0aGUgcmVjZWl2
ZSBxdWV1ZSBhY3Jvc3MgdGhlIENQVS1zLiBJ4oCZbSBub3Qgc3VyZSBJIHJlY29tbWVuZCBpdC4g
SSBhdm9pZGVkIGluY3JlYXNpbmcgdGhlIGZyYW1lIHNpemUgYnkgcGlnZ3kgYmFja2luZyBvbiB0
aGUgbWVtb3J5IG1vZGVsIHR5cGUgd2hpY2ggcGxhY2VzIGRhdGEgaW4gbm9uIHJlbGV2YW50IHN0
cnVjdHVyZXMuIEl0IGFsc28gbGltaXRzIHRoZSByZWNlaXZlIHF1ZXVlIGluZGV4IHRvIHUxNiAo
MjQgYml0cyB3b3VsZCBhbHNvIGJlIHBvc3NpYmxlKS4gSXQgZG9lcyB3b3JrIGFuZCB0cmFmZmlj
IGlzIHJ1bm5pbmcgKEnigJlsbCBwcm9iYWJseSBoYXZlIGEgZm9sbG93dXAgcXVlc3Rpb24gb24g
cGVyZm9ybWFuY2UgSSBleHBlY3RlZCBiZXR0ZXIgYnV0IEknbGwgZG8gc29tZSBtb3JlIHRlc3Rp
bmcpLiBBbm90aGVyIGlzc3VlIC0gaXQgdXBkYXRlcyB0aGUgcnhxIGluIHhkcF9idWZmLiBJbiB0
aGUgY29udGV4dCBvZiBjcHVtYXAgaXTigJlzIG9rYXkgYXMgcnhxIGlzIG9ubHkgdXNlZCBpbW1l
ZGlhdGVseSBpbiB0aGUgbG9vcCBhbmQgZGlzY2FyZGVkIGFmdGVyIHRoZSBsb29wLiBJIGhhdmVu
4oCZdCBmb3VuZCBhbnl3aGVyZSBpdOKAmXMgd3JvbmcuIEJ1dCB0aGVvcmV0aWNhbGx5IHJ4cSBt
YXkgaGF2ZSBhIGxvbmdlciB0aW1lc3BhbiwgYW5kIG1heSBiZSBzaGFyZWQgYWNyb3NzIG11bHRp
cGxlIGJ1ZmZlcnMuIE1vZGlmeWluZyBpdCwgbWF5IGFmZmVjdCBvdGhlciBidWZmZXJzIHRoYXQg
YmVsb25nIHRvIGRpZmZlcmVudCByZWNlaXZlIHF1ZXVlIGluZGV4Lg0KDQogICAgICAgIChTb3Jy
eSBmb3IgdGhlIGRvdWJsZSBtZXNzYWdlLCBwcmV2aW91cyBvbmUgd2FzIG5vdCBwbGFpbnRleHQg
c28gaXQgd2FzIHJlamVjdGVkIGJ5IGdyb3VwIHNlcnZlcikNCg0KICAgICAgICBDaGVlcnMsDQog
ICAgICAgICAgICAgICAgWXV2YWwuDQoNCmRpZmYgLXVyTiBhL2luY2x1ZGUvbmV0L3hkcC5oIGIv
aW5jbHVkZS9uZXQveGRwLmgNCi0tLSBhL2luY2x1ZGUvbmV0L3hkcC5oIDIwMjMtMDYtMDUgMDc6
MjE6MjcuMDAwMDAwMDAwICswMDAwDQorKysgYi9pbmNsdWRlL25ldC94ZHAuaCAyMDI0LTA1LTI4
IDA3OjA0OjAwLjU0OTUwNzMxNiArMDAwMA0KQEAgLTQ4LDcgKzQ4LDggQEANCiAjZGVmaW5lIFhE
UF9YTUlUX0ZMQUdTX01BU0sgICAgWERQX1hNSVRfRkxVU0gNCg0KIHN0cnVjdCB4ZHBfbWVtX2lu
Zm8gew0KLSAgICAgICB1MzIgdHlwZTsgLyogZW51bSB4ZHBfbWVtX3R5cGUsIGJ1dCBrbm93biBz
aXplIHR5cGUgKi8NCisgICAgICAgdTMyIHR5cGUgOiAxNjsgLyogZW51bSB4ZHBfbWVtX3R5cGUs
IGJ1dCBrbm93biBzaXplIHR5cGUgKi8NCisgICAgdTMyIHJ4X3F1ZXVlX2luZGV4IDogMTY7DQog
ICAgICAgIHUzMiBpZDsNCiB9Ow0KDQpAQCAtMTgwLDYgKzE4MSwxMCBAQA0KICAgICAgICB4ZHAt
PmRhdGFfZW5kID0gZnJhbWUtPmRhdGEgKyBmcmFtZS0+bGVuOw0KICAgICAgICB4ZHAtPmRhdGFf
bWV0YSA9IGZyYW1lLT5kYXRhIC0gZnJhbWUtPm1ldGFzaXplOw0KICAgICAgICB4ZHAtPmZyYW1l
X3N6ID0gZnJhbWUtPmZyYW1lX3N6Ow0KKyAgICAgICBpZiAoeGRwLT5yeHEgIT0gTlVMTCkNCisg
ICAgICAgew0KKyAgICAgICAgICAgICAgIHhkcC0+cnhxLT5xdWV1ZV9pbmRleCA9IGZyYW1lLT5t
ZW0ucnhfcXVldWVfaW5kZXg7DQorICAgICAgIH0NCiB9DQoNCiBzdGF0aWMgaW5saW5lDQpAQCAt
MjA2LDYgKzIxMSw4IEBADQogICAgICAgIHhkcF9mcmFtZS0+aGVhZHJvb20gPSBoZWFkcm9vbSAt
IHNpemVvZigqeGRwX2ZyYW1lKTsNCiAgICAgICAgeGRwX2ZyYW1lLT5tZXRhc2l6ZSA9IG1ldGFz
aXplOw0KICAgICAgICB4ZHBfZnJhbWUtPmZyYW1lX3N6ID0geGRwLT5mcmFtZV9zejsNCisgICAg
ICAgeGRwX2ZyYW1lLT5tZW0ucnhfcXVldWVfaW5kZXggPQ0KKyAgICAgICAgICAgICAgICh4ZHAt
PnJ4cSAhPSBOVUxMKSA/IHhkcC0+cnhxLT5xdWV1ZV9pbmRleCA6IDA7DQoNCiAgICAgICAgcmV0
dXJuIDA7DQogfQ0KQEAgLTIyNiw2ICsyMzMsNyBAQA0KDQogICAgICAgIC8qIHJ4cSBvbmx5IHZh
bGlkIHVudGlsIG5hcGlfc2NoZWR1bGUgZW5kcywgY29udmVydCB0byB4ZHBfbWVtX2luZm8gKi8N
CiAgICAgICAgeGRwX2ZyYW1lLT5tZW0gPSB4ZHAtPnJ4cS0+bWVtOw0KKyAgICAgICB4ZHBfZnJh
bWUtPm1lbS5yeF9xdWV1ZV9pbmRleCA9IHhkcC0+cnhxLT5xdWV1ZV9pbmRleDsNCg0KICAgICAg
ICByZXR1cm4geGRwX2ZyYW1lOw0KIH0NCmRpZmYgLXVyTiBhL25ldC9jb3JlL3hkcC5jIGIvbmV0
L2NvcmUveGRwLmMNCi0tLSBhL25ldC9jb3JlL3hkcC5jICAgIDIwMjMtMDYtMDUgMDc6MjE6Mjcu
MDAwMDAwMDAwICswMDAwDQorKysgYi9uZXQvY29yZS94ZHAuYyAgICAyMDI0LTA1LTI4IDE0OjA1
OjI0LjUzMTYxNzI3OSArMDAwMA0KQEAgLTUzNiw2ICs1MzYsNyBAQA0KICAgICAgICB4ZHBmLT5t
ZXRhc2l6ZSA9IG1ldGFzaXplOw0KICAgICAgICB4ZHBmLT5mcmFtZV9zeiA9IFBBR0VfU0laRTsN
CiAgICAgICAgeGRwZi0+bWVtLnR5cGUgPSBNRU1fVFlQRV9QQUdFX09SREVSMDsNCisgICAgeGRw
Zi0+bWVtLnJ4X3F1ZXVlX2luZGV4ID0gKHhkcC0+cnhxICE9IE5VTEwpID8geGRwLT5yeHEtPnF1
ZXVlX2luZGV4IDogMDsNCg0KICAgICAgICB4c2tfYnVmZl9mcmVlKHhkcCk7DQogICAgICAgIHJl
dHVybiB4ZHBmOw0KDQo+IE9uIDI4IE1heSAyMDI0LCBhdCAxNTozOCwgWXV2YWwgRWwtSGFuYW55
IDx5dXZhbGVAcmFkd2FyZS5jb20+IHdyb3RlOg0KPg0KPiBDQVVUSU9OOkV4dGVybmFsIEVtYWls
LCBEbyBub3QgY2xpY2sgb24gbGlua3Mgb3Igb3BlbiBhdHRhY2htZW50cyB1bmxlc3MgeW91IHJl
Y29nbml6ZSB0aGUgc2VuZGVyIGFuZCBrbm93IHRoZSBjb250ZW50IGlzIHNhZmUuDQo+DQo+IFN1
cmUuIFRoZSB0d28gcGF0Y2hlcyAodGhlIHNlY29uZCBpcyBqdXN0IGRvY3VtZW50YXRpb24pIGFy
ZSBiZWxvdy4NCj4NCj4gICAgICAgIEnigJltIHRyeWluZyB0byBhZGQgdGhlIHJ4IHF1ZXVlIGZy
b20geGRwX2J1ZmYgdG8gdGhlIHhkcF9mcmFtZSBhbmQgZXh0cmFjdCBpdCBiYWNrLiBJcyB0aGUg
c2l6ZSBvciBhbGlnbm1lbnQgb2YgeGRwX2ZyYW1lIGNyaXRpY2FsPyBJcyBpdCBva2F5IHRvIGFk
ZCB0aGUgcnggcXVldWUgYXMgYW4gZXh0cmEgZmllbGQsIG9yIHNob3VsZCBJIHRyeSB0byBhZGQg
aXQgYXMgYSBiaXQgZmllbGQgb24gYW4gZXhpc3RpbmcgZmllbGQgbGlrZSB0aGUgbWVtb3J5IHR5
cGUgdGhhdCB0YWtlcyAzMiBiaXRzIGJ1dCBoYXMgb25seSA0IHZhbHVlcz8NCj4NCj4gICAgICAg
IENoZWVycywNCj4gICAgICAgICAgICAgICAgWXV2YWwuDQo+DQo+IEZyb206IE1hZ251cyBLYXJs
c3NvbiA8bWFnbnVzLmthcmxzc29uQGdtYWlsLmNvbT4NCj4gU3ViamVjdDogW1BBVENIIGJwZi1u
ZXh0IDEvMl0geHNrOiBzdXBwb3J0IHJlZGlyZWN0IHRvIGFueSBzb2NrZXQgYm91bmQgdG8gdGhl
IHNhbWUgdW1lbQ0KPiBEYXRlOiA1IEZlYnJ1YXJ5IDIwMjQgYXQgMTQ6MzU6NTAgR01UKzINCj4g
VG86IG1hZ251cy5rYXJsc3NvbkBpbnRlbC5jb20sIGJqb3JuQGtlcm5lbC5vcmcsIGFzdEBrZXJu
ZWwub3JnLCBkYW5pZWxAaW9nZWFyYm94Lm5ldCwgbmV0ZGV2QHZnZXIua2VybmVsLm9yZywgbWFj
aWVqLmZpamFsa293c2tpQGludGVsLmNvbSwgeXV2YWxlQHJhZHdhcmUuY29tDQo+IENjOiBicGZA
dmdlci5rZXJuZWwub3JnDQo+DQo+IENBVVRJT046RXh0ZXJuYWwgRW1haWwsIERvIG5vdCBjbGlj
ayBvbiBsaW5rcyBvciBvcGVuIGF0dGFjaG1lbnRzIHVubGVzcyB5b3UgcmVjb2duaXplIHRoZSBz
ZW5kZXIgYW5kIGtub3cgdGhlIGNvbnRlbnQgaXMgc2FmZS4NCj4NCj4gRnJvbTogTWFnbnVzIEth
cmxzc29uIDxtYWdudXMua2FybHNzb25AaW50ZWwuY29tPg0KPg0KPiBBZGQgc3VwcG9ydCBmb3Ig
ZGlyZWN0aW5nIGEgcGFja2V0IHRvIGFueSBzb2NrZXQgYm91bmQgdG8gdGhlIHNhbWUNCj4gdW1l
bS4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgdGhlIFhEUCBwcm9ncmFtIHRvIHNlbGVj
dCB3aGF0DQo+IHNvY2tldCB0aGUgcGFja2V0IHNob3VsZCBiZSByZWNlaXZlZCBvbi4gVGhlIHVz
ZXIgY2FuIHBvcHVsYXRlIHRoZQ0KPiBYU0tNQVAgd2l0aCB2YXJpb3VzIHNvY2tldHMgYW5kIGFz
IGxvbmcgYXMgdGhleSBzaGFyZSB0aGUgc2FtZSB1bWVtLA0KPiB0aGUgWERQIHByb2dyYW0gY2Fu
IHBpY2sgYW55IG9uZSBvZiB0aGVtLg0KPg0KPiBTdWdnZXN0ZWQtYnk6IFl1dmFsIEVsLUhhbmFu
eSA8eXV2YWxlQHJhZHdhcmUuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBNYWdudXMgS2FybHNzb24g
PG1hZ251cy5rYXJsc3NvbkBpbnRlbC5jb20+DQo+IC0tLQ0KPiBuZXQveGRwL3hzay5jIHwgNSAr
KysrLQ0KPiAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+
DQo+IGRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suYw0KPiBpbmRleCAx
ZWFkZmFjMDNjYzQuLmEzMzllOWExYjU1NyAxMDA2NDQNCj4gLS0tIGEvbmV0L3hkcC94c2suYw0K
PiArKysgYi9uZXQveGRwL3hzay5jDQo+IEBAIC0zMTMsMTAgKzMxMywxMyBAQCBzdGF0aWMgYm9v
bCB4c2tfaXNfYm91bmQoc3RydWN0IHhkcF9zb2NrICp4cykNCj4NCj4gc3RhdGljIGludCB4c2tf
cmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIg
bGVuKQ0KPiB7DQo+ICsgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHhkcC0+cnhxLT5k
ZXY7DQo+ICsgICAgICAgdTMyIHFpZCA9IHhkcC0+cnhxLT5xdWV1ZV9pbmRleDsNCj4gKw0KPiAg
ICAgICBpZiAoIXhza19pc19ib3VuZCh4cykpDQo+ICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJ
TzsNCj4NCj4gLSAgICAgICBpZiAoeHMtPmRldiAhPSB4ZHAtPnJ4cS0+ZGV2IHx8IHhzLT5xdWV1
ZV9pZCAhPSB4ZHAtPnJ4cS0+cXVldWVfaW5kZXgpDQo+ICsgICAgICAgaWYgKCFkZXYtPl9yeFtx
aWRdLnBvb2wgfHwgeHMtPnVtZW0gIT0gZGV2LT5fcnhbcWlkXS5wb29sLT51bWVtKQ0KPiAgICAg
ICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPg0KPiAgICAgICBpZiAobGVuID4geHNrX3Bvb2xf
Z2V0X3J4X2ZyYW1lX3NpemUoeHMtPnBvb2wpICYmICF4cy0+c2cpIHsNCj4gLS0NCj4gMi40Mi4w
DQo+DQo+IEZyb206IE1hZ251cyBLYXJsc3NvbiA8bWFnbnVzLmthcmxzc29uQGludGVsLmNvbT4N
Cj4NCj4gRG9jdW1lbnQgdGhlIGFiaWxpdHkgdG8gcmVkaXJlY3QgdG8gYW55IHNvY2tldCBib3Vu
ZCB0byB0aGUgc2FtZSB1bWVtLg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBNYWdudXMgS2FybHNzb24g
PG1hZ251cy5rYXJsc3NvbkBpbnRlbC5jb20+DQo+IC0tLQ0KPiBEb2N1bWVudGF0aW9uL25ldHdv
cmtpbmcvYWZfeGRwLnJzdCB8IDMzICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tDQo+IDEg
ZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkNCj4NCj4gZGlm
ZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0IGIvRG9jdW1lbnRh
dGlvbi9uZXR3b3JraW5nL2FmX3hkcC5yc3QNCj4gaW5kZXggZGNlZWIwZDc2M2FhLi43MmRhNzA1
N2U0Y2YgMTAwNjQ0DQo+IC0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0
DQo+ICsrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0DQo+IEBAIC0zMjks
MjMgKzMyOSwyNCBAQCBYRFBfU0hBUkVEX1VNRU0gb3B0aW9uIGFuZCBwcm92aWRlIHRoZSBpbml0
aWFsIHNvY2tldCdzIGZkIGluIHRoZQ0KPiBzeGRwX3NoYXJlZF91bWVtX2ZkIGZpZWxkIGFzIHlv
dSByZWdpc3RlcmVkIHRoZSBVTUVNIG9uIHRoYXQNCj4gc29ja2V0LiBUaGVzZSB0d28gc29ja2V0
cyB3aWxsIG5vdyBzaGFyZSBvbmUgYW5kIHRoZSBzYW1lIFVNRU0uDQo+DQo+IC1UaGVyZSBpcyBu
byBuZWVkIHRvIHN1cHBseSBhbiBYRFAgcHJvZ3JhbSBsaWtlIHRoZSBvbmUgaW4gdGhlIHByZXZp
b3VzDQo+IC1jYXNlIHdoZXJlIHNvY2tldHMgd2VyZSBib3VuZCB0byB0aGUgc2FtZSBxdWV1ZSBp
ZCBhbmQNCj4gLWRldmljZS4gSW5zdGVhZCwgdXNlIHRoZSBOSUMncyBwYWNrZXQgc3RlZXJpbmcg
Y2FwYWJpbGl0aWVzIHRvIHN0ZWVyDQo+IC10aGUgcGFja2V0cyB0byB0aGUgcmlnaHQgcXVldWUu
IEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGVyZSBpcyBvbmx5DQo+IC1vbmUgcXVldWUgc2hh
cmVkIGFtb25nIHNvY2tldHMsIHNvIHRoZSBOSUMgY2Fubm90IGRvIHRoaXMgc3RlZXJpbmcuIEl0
DQo+IC1jYW4gb25seSBzdGVlciBiZXR3ZWVuIHF1ZXVlcy4NCj4gLQ0KPiAtSW4gbGliYnBmLCB5
b3UgbmVlZCB0byB1c2UgdGhlIHhza19zb2NrZXRfX2NyZWF0ZV9zaGFyZWQoKSBBUEkgYXMgaXQN
Cj4gLXRha2VzIGEgcmVmZXJlbmNlIHRvIGEgRklMTCByaW5nIGFuZCBhIENPTVBMRVRJT04gcmlu
ZyB0aGF0IHdpbGwgYmUNCj4gLWNyZWF0ZWQgZm9yIHlvdSBhbmQgYm91bmQgdG8gdGhlIHNoYXJl
ZCBVTUVNLiBZb3UgY2FuIHVzZSB0aGlzDQo+IC1mdW5jdGlvbiBmb3IgYWxsIHRoZSBzb2NrZXRz
IHlvdSBjcmVhdGUsIG9yIHlvdSBjYW4gdXNlIGl0IGZvciB0aGUNCj4gLXNlY29uZCBhbmQgZm9s
bG93aW5nIG9uZXMgYW5kIHVzZSB4c2tfc29ja2V0X19jcmVhdGUoKSBmb3IgdGhlIGZpcnN0DQo+
IC1vbmUuIEJvdGggbWV0aG9kcyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuDQo+ICtJbiB0aGlzIGNh
c2UsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGUgTklDJ3MgcGFja2V0IHN0ZWVyaW5nDQo+ICtj
YXBhYmlsaXRpZXMgdG8gc3RlZXIgdGhlIHBhY2tldHMgdG8gdGhlIHJpZ2h0IHF1ZXVlLiBUaGlz
IGlzIG5vdA0KPiArcG9zc2libGUgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUgYXMgdGhlcmUgaXMg
b25seSBvbmUgcXVldWUgc2hhcmVkDQo+ICthbW9uZyBzb2NrZXRzLCBzbyB0aGUgTklDIGNhbm5v
dCBkbyB0aGlzIHN0ZWVyaW5nIGFzIGl0IGNhbiBvbmx5IHN0ZWVyDQo+ICtiZXR3ZWVuIHF1ZXVl
cy4NCj4gKw0KPiArSW4gbGlieGRwIChvciBsaWJicGYgcHJpb3IgdG8gdmVyc2lvbiAxLjApLCB5
b3UgbmVlZCB0byB1c2UgdGhlDQo+ICt4c2tfc29ja2V0X19jcmVhdGVfc2hhcmVkKCkgQVBJIGFz
IGl0IHRha2VzIGEgcmVmZXJlbmNlIHRvIGEgRklMTCByaW5nDQo+ICthbmQgYSBDT01QTEVUSU9O
IHJpbmcgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSBhbmQgYm91bmQgdG8gdGhlDQo+ICtz
aGFyZWQgVU1FTS4gWW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgYWxsIHRoZSBzb2NrZXRz
IHlvdSBjcmVhdGUsDQo+ICtvciB5b3UgY2FuIHVzZSBpdCBmb3IgdGhlIHNlY29uZCBhbmQgZm9s
bG93aW5nIG9uZXMgYW5kIHVzZQ0KPiAreHNrX3NvY2tldF9fY3JlYXRlKCkgZm9yIHRoZSBmaXJz
dCBvbmUuIEJvdGggbWV0aG9kcyB5aWVsZCB0aGUgc2FtZQ0KPiArcmVzdWx0Lg0KPg0KPiBOb3Rl
IHRoYXQgYSBVTUVNIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBzb2NrZXRzIG9uIHRoZSBzYW1lIHF1
ZXVlIGlkDQo+IGFuZCBkZXZpY2UsIGFzIHdlbGwgYXMgYmV0d2VlbiBxdWV1ZXMgb24gdGhlIHNh
bWUgZGV2aWNlIGFuZCBiZXR3ZWVuDQo+IC1kZXZpY2VzIGF0IHRoZSBzYW1lIHRpbWUuDQo+ICtk
ZXZpY2VzIGF0IHRoZSBzYW1lIHRpbWUuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gcmVkaXJlY3Qg
dG8gYW55DQo+ICtzb2NrZXQgYXMgbG9uZyBhcyBpdCBpcyBib3VuZCB0byB0aGUgc2FtZSB1bWVt
IHdpdGggWERQX1NIQVJFRF9VTUVNLg0KPg0KPiBYRFBfVVNFX05FRURfV0FLRVVQIGJpbmQgZmxh
Zw0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiBAQCAtODIyLDYgKzgyMywxMCBA
QCBBOiBUaGUgc2hvcnQgYW5zd2VyIGlzIG5vLCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhl
IG1vbWVudC4gVGhlDQo+ICAgc3dpdGNoLCBvciBvdGhlciBkaXN0cmlidXRpb24gbWVjaGFuaXNt
LCBpbiB5b3VyIE5JQyB0byBkaXJlY3QNCj4gICB0cmFmZmljIHRvIHRoZSBjb3JyZWN0IHF1ZXVl
IGlkIGFuZCBzb2NrZXQuDQo+DQo+ICsgICBOb3RlIHRoYXQgaWYgeW91IGFyZSB1c2luZyB0aGUg
WERQX1NIQVJFRF9VTUVNIG9wdGlvbiwgaXQgaXMNCj4gKyAgIHBvc3NpYmxlIHRvIHN3aXRjaCB0
cmFmZmljIGJldHdlZW4gYW55IHNvY2tldCBib3VuZCB0byB0aGUgc2FtZQ0KPiArICAgdW1lbS4N
Cj4gKw0KPiBROiBNeSBwYWNrZXRzIGFyZSBzb21ldGltZXMgY29ycnVwdGVkLiBXaGF0IGlzIHdy
b25nPw0KPg0KPiBBOiBDYXJlIGhhcyB0byBiZSB0YWtlbiBub3QgdG8gZmVlZCB0aGUgc2FtZSBi
dWZmZXIgaW4gdGhlIFVNRU0gaW50bw0KPiAtLQ0KPiAyLjQyLjANCj4NCj4+IE9uIDI4IE1heSAy
MDI0LCBhdCAxNToyMSwgTWFnbnVzIEthcmxzc29uIDxtYWdudXMua2FybHNzb25AZ21haWwuY29t
PiB3cm90ZToNCj4+DQo+PiBDQVVUSU9OOkV4dGVybmFsIEVtYWlsLCBEbyBub3QgY2xpY2sgb24g
bGlua3Mgb3Igb3BlbiBhdHRhY2htZW50cyB1bmxlc3MgeW91IHJlY29nbml6ZSB0aGUgc2VuZGVy
IGFuZCBrbm93IHRoZSBjb250ZW50IGlzIHNhZmUuDQo+Pg0KPj4gT24gTW9uLCAyNyBNYXkgMjAy
NCBhdCAxMDoxMSwgTWFnbnVzIEthcmxzc29uIDxtYWdudXMua2FybHNzb25AZ21haWwuY29tPiB3
cm90ZToNCj4+Pg0KPj4+IE9uIE1vbiwgMjcgTWF5IDIwMjQgYXQgMDk6MzQsIFl1dmFsIEVsLUhh
bmFueSA8eXV2YWxlQHJhZHdhcmUuY29tPiB3cm90ZToNCj4+Pj4NCj4+Pj4gWWVhaCwNCj4+Pj4g
ICAgICAgYXMgZmFyIGRvd24gYXMgSSBkdWcgaW4gdGhlIGNvZGUsIGl0IHNlZW1zIGl04oCZcyB0
aGUgb25seSBvbmUgdGhhdOKAmXMgdXNlZC4gVGhlIG90aGVyIG1lbWJlcnMgYXJlIHJlZ19zdGF0
ZSAmIG5hcGlfaWQuIEnigJltIHVuZmFtaWxpYXIgd2l0aCB0aGVpciBleGFjdCBwdXJwb3Nlcywg
YnV0IGRvZXNu4oCZdCBzb3VuZCBsaWtlIHRoZXnigJlyZSBuZWNlc3NhcnkgZG93biB0aGUgbGlu
ZS4gT25lIG90aGVyIGNvbmNlcm4gaXMgdHhxIElNTy4gSXQgaXMgbm90IGluaXRpYWxpc2VkIHRv
IGFueSB2YWx1ZSBpbiB4ZHBfYnVmZi4gV2hpbGUgaXQgbWF5IG5vdCBiZSByZWxldmFudCBjb25z
aWRlcmluZyBpdOKAmXMgYSByZWNlaXZlZCBwYWNrZXQsIGl0IHNlZW1zIHdyb25nIHRvIGtlZXAg
YSBkYW5nbGluZyBwb2ludGVyIGJvdGggaW4gdGVybXMgb2Ygc2VjdXJpdHkgKGxlYWtpbmcgcHJl
dmlvdXMgdmFsdWVzKSBhbmQgcm9idXN0bmVzcy4gTWF5YmUganVzdCBzZXQgaXQgdG8gTlVMTD8N
Cj4+Pj4NCj4+Pj4gICAgICAgSeKAmXZlIGJlZW4gcmFja2luZyBteSBicmFpbiBhcyB0byB3aGF0
IGlzIHRoZSBhY2NlcHRlZCBtZXRob2QgdG8gcGFzcyB0aGUgcmVjZWl2ZSBxdWV1ZS4gUGFzc2lu
ZyBpdCBvbiB0aGUgcGFja2V0IGhlYWRyb29tIHNlZW1lZCBsaWtlIGEgcmVhc29uYWJsZSBzb2x1
dGlvbiwgYnV0IGl0IHdvdWxkIG1lYW4gbWVtb3J5IGFjY2VzcyB0byB0aGUgcGFja2V0IG1lbW9y
eSBvbiBwYWNrZXQgYXJyaXZhbCBvbiB0aGUgc2Vjb25kIENQVSB3aGljaCBtYXkgYmUgaGFybWZ1
bCB0byBwZXJmb3JtYW5jZS4gVGhlIHF1ZXVlIGl0c2VsZiBpcyBqdXN0IGEgcG9pbnRlciBxdWV1
ZSBzbyBjYW7igJl0IHBpZ2d5YmFjayBvbiBpdCB1bmxlc3MgdXNpbmcgYSBkaWZmZXJlbnQga2lu
ZCBvZiBxdWV1ZS4gV291bGQgYmUgZ3JlYXQgdG8gaGVhciBob3cgaXQgc2hvdWxkIGJlIGRvbmUu
DQo+Pj4NCj4+PiBMZXQgbWUgZ2V0IGludG8gdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBzY3JhdGNo
IG15IGhlYWQgZm9yIGEgd2hpbGUgYW5kDQo+Pj4gSSB3aWxsIGdldCBiYWNrIHRvIHlvdS4gRG8g
bm90IGhhdmUgYSBzb2x1dGlvbiBvbiB0b3Agb2YgbXkgaGVhZC4gV2lsbA0KPj4+IGxvb3AgaW4g
TWFjaWVqIHRvby4NCj4+DQo+PiBZdXZhbCwNCj4+DQo+PiBDb3VsZCB5b3UgcGxlYXNlIHNlbmQg
bWUgdGhlIHBhdGNoIHRoYXQgeW91IGFyZSB1c2luZz8gSSBjYW5ub3QNCj4+IHJlbWVtYmVyIHdo
YXQgSSBzZW50IHlvdSA6LSkuDQo+Pg0KPj4+IC9NYWdudXMNCj4+Pg0KPj4+PiAgICAgICBUaGFu
a3MsDQo+Pj4+ICAgICAgICAgICAgICAgWXV2YWwuDQo+Pj4+DQo+Pj4+PiBPbiAyNyBNYXkgMjAy
NCwgYXQgODo0OCwgTWFnbnVzIEthcmxzc29uIDxtYWdudXMua2FybHNzb25AZ21haWwuY29tPiB3
cm90ZToNCj4+Pj4+DQo+Pj4+PiBDQVVUSU9OOkV4dGVybmFsIEVtYWlsLCBEbyBub3QgY2xpY2sg
b24gbGlua3Mgb3Igb3BlbiBhdHRhY2htZW50cyB1bmxlc3MgeW91IHJlY29nbml6ZSB0aGUgc2Vu
ZGVyIGFuZCBrbm93IHRoZSBjb250ZW50IGlzIHNhZmUuDQo+Pj4+Pg0KPj4+Pj4gT24gU3VuLCAy
NiBNYXkgMjAyNCBhdCAxNDo0OCwgWXV2YWwgRWwtSGFuYW55IDx5dXZhbGVAcmFkd2FyZS5jb20+
IHdyb3RlOg0KPj4+Pj4+DQo+Pj4+Pj4gQ29ycmVjdGlvbiwNCj4+Pj4+PiAgICAgIHRoZSByeHEg
cG9pbnRlciBpcyBpbml04oCZZCBnbG9iYWxseSBmb3IgYWxsIGZyYW1lcyBiZWZvcmUgdGhlIGZy
YW1lIGxvb3BzLCBidXQgb25seSB0aGUgZGV2aWNlIGFuZCB0aGUgbWVtb3J5IGluZm9ybWF0aW9u
IGFyZSBzZXQgZnJvbSB0aGUgWERQIGZyYW1lLiBTbyBzdGlsbCBhbiBpc3N1ZSB3aXRoIHRoZSBx
dWV1ZV9pbmRleCwgYnV0IHRoZSB0ZXN0cyBvbiB0aGUgZGV2aWNlIGFuZCBtZW1vcnkgaW5mbyBp
biB4c2tfcmN2IHNob3VsZCBiZSBmaW5lLg0KPj4+Pj4+DQo+Pj4+Pj4gICAgICBDaGVlcnMsDQo+
Pj4+Pj4gICAgICAgICAgICAgIFl1dmFsLg0KPj4+Pj4NCj4+Pj4+IEhpIFl1dmFsLA0KPj4+Pj4N
Cj4+Pj4+IE5vdyBJIGFtIGJhY2suIFllcywgdGhpcyBzZWVtcyB0byBiZSBhIGJ1ZyBzbyB0aGFu
ayB5b3UgZm9yIHNwb3R0aW5nDQo+Pj4+PiBpdC4gVGhpcyBpcyBub3RoaW5nIEkgaGF2ZSBldmVy
IHRlc3RlZCBzaW5jZSBJIHRob3VnaHQgeW91IHdvdWxkIGRvIGFuDQo+Pj4+PiBYU0tNQVAgcmVk
aXJlY3QgdG8gdGhlICJyaWdodCIgY29yZSBmaXJzdC4gQnV0IHRoZXJlIGlzIG5vdGhpbmcNCj4+
Pj4+IGhpbmRlcmluZyB0aGF0IHNvbWVvbmUgd291bGQgZG8gYSBDUFVNQVAgcmVkaXJlY3QgZmly
c3QgdGhlbiBhbiBYU0tNQVANCj4+Pj4+IHJlZGlyZWN0LCBzbyBzaG91bGQgYmUgc3VwcG9ydGVk
LiBTbyBpbiB5b3VyIGFuYWx5c2lzLCBpcyBpdCBvbmx5DQo+Pj4+PiBxdWV1ZV9pbmRleCB0aGF0
IG5lZWRzIHRvIGJlIHBvcHVsYXRlZCBhdCBDUFVNQVAgcmVkaXJlY3QgdGltZSBmb3INCj4+Pj4+
IHRoaXMgdG8gd29yaz8NCj4+Pj4+DQo+Pj4+PiBUaGFua3M6IE1hZ251cw0KPj4+Pj4NCj4+Pj4+
Pj4gT24gMjYgTWF5IDIwMjQsIGF0IDEyOjAyLCBZdXZhbCBFbC1IYW5hbnkgPHl1dmFsZUByYWR3
YXJlLmNvbT4gd3JvdGU6DQo+Pj4+Pj4+DQo+Pj4+Pj4+IEhpLA0KPj4+Pj4+PiBzbyBJ4oCZdmUg
ZHVnIGEgYml0IGRlZXBlci4gSXQgc2VlbXMgdGhlIHJlY2VpdmUgcXVldWUgaXMgbm90IG1haW50
YWluZWQgYWNyb3NzIENQVXMgYW5kIHRoaXMgbWF5IG1ha2UgdGhlIHdob2xlIHByYWN0aWNlIG9m
IHJlZGlyZWN0aW5nIHRvIFhTSyB1bnNhZmUgaWYgSSByZWFkIHRoZSBjb2RlIGNvcnJlY3RseS4g
SXQgYWxzbyBzZWVtcyB0aGlzIHBlcnNpc3RzIHRvIGtlcm5lbCA2LjYuOC4gQW0gSSBtaXNzaW5n
IHNvbWV0aGluZz8NCj4+Pj4+Pj4NCj4+Pj4+Pj4gVGhlIGNvZGUgaW4gY3B1bWFwIHJ1bnMgWERQ
IHByb2dyYW1zIEJVVCBkb2VzbuKAmXQgZmlsbCB0aGUgcnhxIChzZWUgYWxzbyB0aGUgVE9ETyBj
b21tZW50IGluIHRoZSBjb2RlKS4gVGhlIFhEUCBmcmFtZSBpcyBjb252ZXJ0ZWQgdG8gWERQIGJ1
ZmZlciBidXQgdGhlIHJ4cSBhbmQgdHhxIGFyZSBub3QgZmlsbGVkLiBJdCBzZWVtcyB0aGV5IHJl
bWFpbiBhcyBkYW5nbGluZyBwb2ludGVycy4gV2hlbiBfX3hza19tYXBfcmVkaXJlY3QgaXMgY2Fs
bGVkIGFuZCBpbiB0dXJuIHhza19yY3YgdGhlIHJ4cSBpcyBjb25zdWx0ZWQgYm90aCB0byBjaGVj
ayBpZiB0aGUgdW1lbSBpcyBzaGFyZWQgKGluIHRoZSBuZXcgcGF0Y2gpIGFzIHdlbGwgYXMgZGVj
aWRlIHdoZXRoZXIgemVybyBjb3B5IGlzIHVzZWQgb3Igbm90LiBTaW5jZSByeHEgaXMgbm90IHZh
bGlkLCBJ4oCZbSBub3QgY2VydGFpbiB3aGF0IHRoZSBvdXRjb21lIGlzLiBPbmNlIEkgYnlwYXNz
ZWQgdW1lbSBjaGVjaywgSSBubyBsb25nZXIgY3Jhc2ggdGhlIGtlcm5lbCBidXQgSSdtIGRlZmlu
aXRlbHkgbm90IHNlZWluZyB0cmFmZmljIHJ1bm5pbmcuDQo+Pj4+Pj4+DQo+Pj4+Pj4+IFRoYW5r
cywNCj4+Pj4+Pj4gWXV2YWwuDQo+Pj4+Pj4+DQo+Pj4+Pj4+IEhlcmUgYXJlIHRoZSBleGNlcnB0
cyBmcm9tIHRoZSBjb2RlICg1LjE1LjExNyk6DQo+Pj4+Pj4+DQo+Pj4+Pj4+IGNwdW1hcC5jOjIx
MiA8Y3B1X21hcF9icGZfcHJvZ19ydW5feGRwPiA9PT09PSBOb3RlIHRoZSBjb21tZW50IGluIHRo
ZSBjb2RlLiA9PT09PQ0KPj4+Pj4+PiBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQo+Pj4+Pj4+
ICAgICBzdHJ1Y3QgeGRwX2ZyYW1lICp4ZHBmID0gZnJhbWVzW2ldOw0KPj4+Pj4+PiAgICAgdTMy
IGFjdDsNCj4+Pj4+Pj4gICAgIGludCBlcnI7DQo+Pj4+Pj4+DQo+Pj4+Pj4+IHJ4cS5kZXYgPSB4
ZHBmLT5kZXZfcng7DQo+Pj4+Pj4+ICAgICByeHEubWVtID0geGRwZi0+bWVtOw0KPj4+Pj4+PiAg
ICAgLyogVE9ETzogcmVwb3J0IHF1ZXVlX2luZGV4IHRvIHhkcF9yeHFfaW5mbyAqLw0KPj4+Pj4+
Pg0KPj4+Pj4+PiAgICAgeGRwX2NvbnZlcnRfZnJhbWVfdG9fYnVmZih4ZHBmLCAmeGRwKTsNCj4+
Pj4+Pj4NCj4+Pj4+Pj4gICAgIGFjdCA9IGJwZl9wcm9nX3J1bl94ZHAocmNwdS0+cHJvZywgJnhk
cCk7DQo+Pj4+Pj4+DQo+Pj4+Pj4+IHhkcC5oOjE3NSA9PT09PSByeHEgJiB0eHEgaW4gdGhlIHhk
cF9idWZmIGFyZSBub3QgZmlsbGVkIG9yIGV2ZW4gcmVzZXQuID09PT09DQo+Pj4+Pj4+IHN0YXRp
YyBpbmxpbmUNCj4+Pj4+Pj4gdm9pZCB4ZHBfY29udmVydF9mcmFtZV90b19idWZmKHN0cnVjdCB4
ZHBfZnJhbWUgKmZyYW1lLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCkNCj4+Pj4+Pj4gew0KPj4+Pj4+
PiB4ZHAtPmRhdGFfaGFyZF9zdGFydCA9IGZyYW1lLT5kYXRhIC0gZnJhbWUtPmhlYWRyb29tIC0g
c2l6ZW9mKCpmcmFtZSk7DQo+Pj4+Pj4+IHhkcC0+ZGF0YSA9IGZyYW1lLT5kYXRhOw0KPj4+Pj4+
PiB4ZHAtPmRhdGFfZW5kID0gZnJhbWUtPmRhdGEgKyBmcmFtZS0+bGVuOw0KPj4+Pj4+PiB4ZHAt
PmRhdGFfbWV0YSA9IGZyYW1lLT5kYXRhIC0gZnJhbWUtPm1ldGFzaXplOw0KPj4+Pj4+PiB4ZHAt
PmZyYW1lX3N6ID0gZnJhbWUtPmZyYW1lX3N6Ow0KPj4+Pj4+PiB9DQo+Pj4+Pj4+DQo+Pj4+Pj4+
IHhzay5jOjI2OSA9PT09PSB4c2tfcmN2IGNvbnN1bHRzIHJ4cSBpbiB4ZHBfYnVmZiB3aGljaCBp
cyBub3QgZmlsbGVkISA9PT09PQ0KPj4+Pj4+PiBzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhk
cF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApDQo+Pj4+Pj4+IHsNCj4+Pj4+Pj4gaW50
IGVycjsNCj4+Pj4+Pj4gdTMyIGxlbjsNCj4+Pj4+Pj4NCj4+Pj4+Pj4gZXJyID0geHNrX3Jjdl9j
aGVjayh4cywgeGRwKTsNCj4+Pj4+Pj4gaWYgKGVycikNCj4+Pj4+Pj4gICAgIHJldHVybiBlcnI7
DQo+Pj4+Pj4+DQo+Pj4+Pj4+IGlmICh4ZHAtPnJ4cS0+bWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNL
X0JVRkZfUE9PTCkgew0KPj4+Pj4+PiBsZW4gPSB4ZHAtPmRhdGFfZW5kIC0geGRwLT5kYXRhOw0K
Pj4+Pj4+PiAgICAgcmV0dXJuIF9feHNrX3Jjdl96Yyh4cywgeGRwLCBsZW4pOw0KPj4+Pj4+PiB9
DQo+Pj4+Pj4+DQo+Pj4+Pj4+IGVyciA9IF9feHNrX3Jjdih4cywgeGRwKTsNCj4+Pj4+Pj4gaWYg
KCFlcnIpDQo+Pj4+Pj4+IHhkcF9yZXR1cm5fYnVmZih4ZHApOw0KPj4+Pj4+PiByZXR1cm4gZXJy
Ow0KPj4+Pj4+PiB9DQo+Pj4+Pj4+DQo+Pj4+Pj4+IGludCBfX3hza19tYXBfcmVkaXJlY3Qoc3Ry
dWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApDQo+Pj4+Pj4+IHsNCj4+Pj4+
Pj4gc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdCA9IHRoaXNfY3B1X3B0cigmeHNrbWFwX2Zs
dXNoX2xpc3QpOw0KPj4+Pj4+PiBpbnQgZXJyOw0KPj4+Pj4+Pg0KPj4+Pj4+PiBlcnIgPSB4c2tf
cmN2KHhzLCB4ZHApOw0KPj4+Pj4+PiBpZiAoZXJyKQ0KPj4+Pj4+PiByZXR1cm4gZXJyOw0KPj4+
Pj4+Pg0KPj4+Pj4+PiBpZiAoIXhzLT5mbHVzaF9ub2RlLnByZXYpDQo+Pj4+Pj4+ICAgICBsaXN0
X2FkZCgmeHMtPmZsdXNoX25vZGUsIGZsdXNoX2xpc3QpOw0KPj4+Pj4+Pg0KPj4+Pj4+PiByZXR1
cm4gMDsNCj4+Pj4+Pj4gfQ0KPj4+Pj4+Pg0KPj4+Pj4+Pj4gT24gMjQgTWF5IDIwMjQsIGF0IDE4
OjQ5LCBZdXZhbCBFbC1IYW5hbnkgPFl1dmFsRUBSYWR3YXJlLmNvbT4gd3JvdGU6DQo+Pj4+Pj4+
Pg0KPj4+Pj4+Pj4gQ0FVVElPTjpFeHRlcm5hbCBFbWFpbCwgRG8gbm90IGNsaWNrIG9uIGxpbmtz
IG9yIG9wZW4gYXR0YWNobWVudHMgdW5sZXNzIHlvdSByZWNvZ25pemUgdGhlIHNlbmRlciBhbmQg
a25vdyB0aGUgY29udGVudCBpcyBzYWZlLg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IEhpIEFsbCwNCj4+
Pj4+Pj4+ICAgIEkgd291bGQgcmVhbGx5IGFwcHJlY2lhdGUgc29tZSBndWlkYW5jZSBoZXJlLiBB
cyB0aGlzIGlzc3VlIHNwYW5zIGJvdGggbmV0d29yayBYRFAgYW5kIENQVSBtYXAsIGl04oCZcyBh
IGJpdCBtb3JlIGRpZmZpY3VsdCBmb3IgbWUgdG8gZm9sbG93IGluIHRoZSBrZXJuZWwgY29kZS4g
SSBhdHRlbXB0ZWQgdG8gdHJhY2UgdGhlIGlzc3VlIGluIHRoZSBzb3VyY2UsIGJ1dCBpdOKAmXMg
YSBiaXQgY29tcGxleCB0byBlbnRlciBleGlzdGluZyBjb2RlIGJhc2UuDQo+Pj4+Pj4+Pg0KPj4+
Pj4+Pj4gICAgSXQgd2lsbCBiZSBlYXNpZXIgaWYgeW91IGNhbiB0ZWxsIG1lIHRoZSBmb2xsb3dp
bmc6DQo+Pj4+Pj4+PiAxLiBJcyB0aGUgcmVjZWl2ZSBxdWV1ZSBtZXRhZGF0YSBtYWludGFpbmVk
IGNvcnJlY3RseSB0aHJvdWdoIHRoZSBDUFUgc3dpdGNoIGluIENQVSBtYXA/IEluIHRoZSBkZXNj
cmlwdGlvbiBvZiBDUFUgbWFwIGluIFhEUCAoaHR0cHM6Ly9kZXZlbG9wZXJzLnJlZGhhdC5jb20v
YmxvZy8yMDIxLzA1LzEzL3JlY2VpdmUtc2lkZS1zY2FsaW5nLXJzcy13aXRoLWVicGYtYW5kLWNw
dW1hcCksIGl0IGlzIG1lbnRpb25lZCB0aGF0IHNvbWUgbWV0YWRhdGEgaXMgbm90IG1haW50YWlu
ZWQgYWNyb3NzIHRoZSBDUFUgc3dpdGNoLCBidXQgdGhhdCB3b3VsZCBtYWtlIHRoZSB1bWVtIHRl
c3QgcHJvYmxlbWF0aWMuIFNob3VsZCBJIGFzc3VtZSB0aGUgcmVjZWl2ZSBxdWV1ZSBpcyBtYWlu
dGFpbmVkPw0KPj4+Pj4+Pj4gMi4gRG9lcyBYU0sgdW1lbSB1c2VyIGNvZGUgaGF2ZSBhY2Nlc3Mg
dG8gdGhlIHJlY2VpdmUgcXVldWUgbWV0YWRhdGEgbWVtb3J5PyBJdCBzZWVtcyB0byBiZSBpbiBh
IGRpZmZlcmVudCBwb2ludGVyLCBidXQgaXQgY291bGQgYmUgdGhhdCBpdCBwb2ludHMgdG8gdGhl
IHBhY2tldCBoZWFkcm9vbSBpbiB0aGUgdW1lbSBhY2Nlc3NpYmxlIG1lbW9yeS4NCj4+Pj4+Pj4+
DQo+Pj4+Pj4+PiAgICBJZiB0aGUgcmVjZWl2ZSBxdWV1ZSBpcyBub3QgbWFpbnRhaW5lZCBhY3Jv
c3MgQ1BVIHN3aXRjaCB0aGVuIEkgdGhpbmsgdGhlIHNoYXJlZCB1bWVtIHRlc3Qgc2hvdWxkIHJ1
biBhbG9uZyB0aGUgbGluZXMgb2YgdXNpbmcgc29tZSBkZWZhdWx0IHJlY2VpdmUgcXVldWUgYWZ0
ZXIgc3dpdGNoaW5nIENQVXMuIE90aGVyd2lzZSwgaXQgc2hvdWxkIHByb2JhYmx5IGRyb3AgcGFj
a2V0cyB3aXRoIGludmFsaWQgcmVjZWl2ZSBxdWV1ZXMuDQo+Pj4+Pj4+Pg0KPj4+Pj4+Pj4gICAg
VGhhbmtzLA0KPj4+Pj4+Pj4gICAgICAgICAgICBZdXZhbC4NCj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4g
T24gMjAgTWF5IDIwMjQsIGF0IDE4OjI0LCBZdXZhbCBFbC1IYW5hbnkgPFl1dmFsRUBSYWR3YXJl
LmNvbT4gd3JvdGU6DQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBIaSwNCj4+Pj4+Pj4+Pg0KPj4+Pj4+
Pj4+IFNob3J0IFZlcnNpb24NCj4+Pj4+Pj4+PiBJ4oCZdmUgZW5jb3VudGVyZWQgYW4gaXNzdWUg
cmVkaXJlY3RpbmcgdHJhZmZpYyB0byBhbm90aGVyIENQVSB3aGlsZSB1c2luZyBzaGFyZWQgVU1F
TS4gVGhlIGZyYW1lIGFycml2ZWQgYXQgdGhlIHJlZGlyZWN0ZWQgQ1BVIHdpdGggaW52YWxpZCBy
ZWNlaXZlIHF1ZXVlLiBUaGlzIGNhdXNlZCBhIGtlcm5lbCBjcmFzaCBvbiB0aGUgcGF0Y2ggdGhh
dCBzdXBwb3J0cyByZWRpcmVjdGluZyB0byBwYWNrZXRzIHRvIGFueSBxdWV1ZSB3aXRoIHRoZSBz
YW1lIHVtZW0gZHVlIHRvIGEgdGVzdCBiYXNlZCBvbiB0aGUgcmVjZWl2ZSBxdWV1ZS4NCj4+Pj4+
Pj4+Pg0KPj4+Pj4+Pj4+IExvbmcgVmVyc2lvbg0KPj4+Pj4+Pj4+IEnigJl2ZSBjcmVhdGVkIGEg
dGVzdCBwcm9ncmFtIHRoYXQgcmVkaXJlY3RzIHRyYWZmaWMgYmV0d2VlbiB0d28gaW50ZXJmYWNl
cyAocmVwbGFjaW5nIHRoZSBNQUMgYWRkcmVzcykuIFNlZSB0aGUgY29kZSBiZWxvdy4gSXQgc3Rh
cnRzIHR3byBzZXBhcmF0ZSBwcm9jZXNzZXMgb24gdHdvIGRpZmZlcmVudCBjb3Jlcy4gV2hlbiBk
aXJlY3RpbmcgdHJhZmZpYyBkaXJlY3RseSB0byBhbiBYU0sgc29ja2V0IGFsbCB3b3JrcyB3ZWxs
LiBJ4oCZbSBydW5uaW5nIG9uIGtlcm5lbCA1LjE1LjExNyB3aXRoIE1hZ251cyBwYXRjaCBmb3Ig
c2hhcmVkIHVtZW0uDQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBUaGUgbmV4dCBzdGVwIHdhcyBhbiBY
RFAgcHJvZ3JhbSB0aGF0IHJlZGlyZWN0cyBlYWNoIHBhY2tldCB0byB0aGUgb3RoZXIgQ1BVLCBh
bmQgdGhlIHhkcCBDUFUgcHJvZ3JhbSByZWRpcmVjdCB0aGUgcGFja2V0cyB0byBhbiBYRFAgc29j
a2V0LiBJbml0aWFsbHkgdGhpcyByZXN1bHRlZCBpbiBhIGtlcm5lbCBjcmFzaC4gVGhlIHJlYXNv
biBpcyB0aGF0IHRoZSByZWNlaXZlIHF1ZXVlIGlzIG5vdCByZWNlaXZlZCBjb3JyZWN0bHkgb25j
ZSB0aGUgcGFja2V0IHN3aXRjaGVzIENQVS4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IEnigJl2ZSBw
YXRjaGVkIHRoZSBrZXJuZWwgc28gaXQgZG9lcyBzYW5pdHkgY2hlY2sgYW5kIGRvZXMgbm90IGNy
YXNoIGJ1dCBkZWZhdWx0cyB0byBxdWV1ZSAwIGp1c3QgZm9yIHRoZSB1bWVtIHRlc3QuDQo+Pj4+
Pj4+Pj4NCj4+Pj4+Pj4+PiBUaGUga2VybmVsIG5vIGxvbmdlciBjcmFzaGVzIGJ1dCBJIGRvbuKA
mXQgZ2V0IHRoZSB0cmFmZmljIHRvIHRoZSBYU0sgc29ja2V0cywgYW5kIEkgbG9nIHRoZSByZWNl
aXZlIHF1ZXVlcyBhbmQgdGhleSBkbyBub3Qgc2VlbSByYW5kb206DQo+Pj4+Pj4+Pj4gT24gZmly
c3QgaW50ZXJmYWNlOg0KPj4+Pj4+Pj4+IDB4QzEzMjNENTANCj4+Pj4+Pj4+PiAweEMxMzQzRDE5
DQo+Pj4+Pj4+Pj4gMHhDMTM0M0Q1MA0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gT24gc2Vjb25kIGlu
dGVyZmFjZToNCj4+Pj4+Pj4+PiAweEMxMzRCRDUwDQo+Pj4+Pj4+Pj4gMHhDMTM1QkQ1MA0KPj4+
Pj4+Pj4+DQo+Pj4+Pj4+Pj4gVmVyeSBmZXcgYml0cyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGVhY2gg
b2YgdGhlIOKAnHJlY2VpdmUgcXVldWVz4oCdLiBJIGNvdWxkbuKAmXQgcmVhbGx5IGZpbmQgc29t
ZXRoaW5nIGluIG15IHByb2dyYW0gd2l0aCB0aG9zZSBvciBzaW1pbGFyIHZhbHVlcywgb3IgaW4g
dGhlIHBhY2tldHMgc28gaXQgbWFrZXMgaXQgbGVzcyBsaWtlbHkgaXQgY29tZXMgZnJvbSBzb21l
dGhpbmcgSSBkbyBpbiB1c2Vyc3BhY2UuIFNlZW1zIHRvIHN1Z2dlc3Qgc29tZSBmbGFncyBmaWVs
ZD8gVGhlIHZhbHVlcyBhcmUgbm90IGFsd2F5cyB0aGUgc2FtZSBhY3Jvc3MgcmVib290cyBidXQg
cHJldHR5IGNsb3NlLg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gQW0gSSBkb2luZyBzb21ldGhpbmcg
d3Jvbmc/IEl0IHNlZW1zIHByZXR0eSBiYXNpYy4gTW9zdCBvZiB0aGUgY29kZSBpbiB0aGUgWERQ
IHByb2dyYW0gd2FzIGp1c3QgYWRkZWQgZm9yIGRlYnVnZ2luZy4gVGhlIG9ubHkgb2RkaXR5IHBl
cmhhcHMgaXMgdXNpbmcgdGhlIHNoYXJlZCB1bWVtLg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gVGhh
bmtzLA0KPj4+Pj4+Pj4+IFl1dmFsLg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gSeKAmW0gYXR0YWNo
aW5nIHRoZSBwcm9ncmFtIGFuZCB2YWx1ZXMgZnJvbSBteSAiZGVidWcgbWFw4oCdLiBJbiB0aGUg
ZGVidWcgbWFwOg0KPj4+Pj4+Pj4+IDAuIFZhbHVlcyAwLzEgLSBXaGljaCB0eXBlIG9mIHByb2dy
YW0gcmFuICh3aXRoL3dpdGhvdXQgQ1BVIHJlZGlyZWN0aW9uKS4NCj4+Pj4+Pj4+PiAxLiBWYWx1
ZXMgMlhZIC0gcGFja2V0IHJlZGlyZWN0ZWQgZnJvbSBjb3JlIFggdG8gY29yZSBZICgxc3Qgc3Rh
Z2UpLg0KPj4+Pj4+Pj4+IDIuIFZhbHVlcyA0WFkgLSBwYWNrZXQgb24gY29yZSBYIHJldHVybnMg
YWN0aW9uIFkgKDFzdCBzdGFnZSkuDQo+Pj4+Pj4+Pj4gKFRoZXNlIHN1Z2dlc3QgdGhhdCAxc3Qg
c3RhZ2Ugd29ya2VkIGNvcnJlY3RseSkuDQo+Pj4+Pj4+Pj4gMy4gVmFsdWVzIDFYWFlZIC0gcGFj
a2V0IHJlY2VpdmUgcXVldWUgWFggb24gY29yZSBZWSAoWFggPSAxMCBpcyBpbnZhbGlkIHJlY2Vp
dmUgcXVldWUgb3V0c2lkZSAyLi41KS4NCj4+Pj4+Pj4+PiA0LiAyWFhYWCAtIHBhY2tldCByZWNl
aXZlIHF1ZXVlIG9uIGFueSBjb3JlIChYWFhYIC0gNDk5OSBpbWVhbnMgcXVldWUgZ3JlYXRlciB0
aGFuIDUwMDApLg0KPj4+Pj4+Pj4+IDUuIFJhbmRvbSBlbnRyeSAtIGEgcmVjZWl2ZSBxdWV1ZS4N
Cj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IERlYnVnIG1hcCB2YWx1ZXMgd2l0aG91dCBDUFUgcmVkaXJl
Y3Rpb246DQo+Pj4+Pj4+Pj4gKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0rDQo+Pj4+Pj4+
Pj4gfCBQb3J0IHwgS2V5ICB8ICAgICBSZWNlaXZlZCB8DQo+Pj4+Pj4+Pj4gKy0tLS0tLSstLS0t
LS0rLS0tLS0tLS0tLS0tLS0rDQo+Pj4+Pj4+Pj4gfCAgICAwIHwgMTAzMiB8ICAgICAgICAgIDUw
NCB8DQo+Pj4+Pj4+Pj4gfCAgICAwIHwgMTAyNCB8ICAgICAzNzAwNTk5MiB8DQo+Pj4+Pj4+Pj4g
fCAgICAwIHwgMTAzNCB8ICAgICAzNzU0NDA1MiB8DQo+Pj4+Pj4+Pj4gfCAgICAwIHwgICAgMCB8
ICAgICA3NDU0Njg3NSB8DQo+Pj4+Pj4+Pj4gfCAgICAxIHwgMTAzNCB8ICAgICAzNTc2NTk2MSB8
DQo+Pj4+Pj4+Pj4gfCAgICAxIHwgICAgMCB8ICAgICA3MTQ5Mjc3MyB8DQo+Pj4+Pj4+Pj4gfCAg
ICAxIHwgMTAyNCB8ICAgICAzNTcyOTEwNyB8DQo+Pj4+Pj4+Pj4gfCAgICAxIHwgMTAzMiB8ICAg
ICAgICAgIDI3NyB8DQo+Pj4+Pj4+Pj4gKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0rDQo+
Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBEZWJ1ZyBtYXAgdmFsdWUgd2l0aCBDUFUgcmVkaXJlY3Rpb24g
KG5vIG90aGVyIGNoYW5nZSk6DQo+Pj4+Pj4+Pj4gKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0t
LS0rDQo+Pj4+Pj4+Pj4gfCBQb3J0IHwgS2V5ICB8ICAgICBSZWNlaXZlZCB8DQo+Pj4+Pj4+Pj4g
Ky0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0rDQo+Pj4+Pj4+Pj4gfCAgICAwIHwgICAgMSB8
ICAgICAgICAgMzQwMCB8DQo+Pj4+Pj4+Pj4gfCAgICAwIHwgIDIyMyB8ICAgICAgICAgMjk0NyB8
DQo+Pj4+Pj4+Pj4gfCAgICAwIHwgIDIzMiB8ICAgICAgICAgIDQ1NCB8DQo+Pj4+Pj4+Pj4gfCAg
ICAwIHwgIDQyNCB8ICAgICAgICAgIDQ1NCB8DQo+Pj4+Pj4+Pj4gfCAgICAwIHwgIDQzNCB8ICAg
ICAgICAgMjk0NyB8DQo+Pj4+Pj4+Pj4gfCAgICAwIHwgMTEwMDIgfCAgICAgICAgICA0NTQgfA0K
Pj4+Pj4+Pj4+IHwgICAgMCB8IDExMDAzIHwgICAgICAgICAyOTQ3IHwNCj4+Pj4+Pj4+PiB8ICAg
IDAgfCAyMDAwMCB8ICAgICAgICAgIDEwNiB8DQo+Pj4+Pj4+Pj4gfCAgICAwIHwgMjAwMTYgfCAg
ICAgICAgICAgIDcgfA0KPj4+Pj4+Pj4+IHwgICAgMCB8IDIwMDI0IHwgICAgICAgICAxMDU4IHwN
Cj4+Pj4+Pj4+PiB8ICAgIDAgfCAyMDU4MiB8ICAgICAgICAgICAgMiB8DQo+Pj4+Pj4+Pj4gfCAg
ICAwIHwgMjQ5OTkgfCAgICAgICAgIDIyMzEgfA0KPj4+Pj4+Pj4+IHwgICAgMCB8IDMyNDEyOTUx
ODQgfCAgICAgICAgICAzMzkgfA0KPj4+Pj4+Pj4+IHwgICAgMCB8IDMyNDE0MjYyMDEgfCAgICAg
ICAgICAgIDMgfA0KPj4+Pj4+Pj4+IHwgICAgMCB8IDMyNDE0MjYyNTYgfCAgICAgICAgIDE4OTEg
fA0KPj4+Pj4+Pj4+IHwgICAgMSB8ICAgIDEgfCAgICAgICAgIDEwMTMgfA0KPj4+Pj4+Pj4+IHwg
ICAgMSB8ICAyMjMgfCAgICAgICAgICA2MTAgfA0KPj4+Pj4+Pj4+IHwgICAgMSB8ICAyMzIgfCAg
ICAgICAgICA0MDQgfA0KPj4+Pj4+Pj4+IHwgICAgMSB8ICA0MjQgfCAgICAgICAgICA0MDQgfA0K
Pj4+Pj4+Pj4+IHwgICAgMSB8ICA0MzQgfCAgICAgICAgICA2MTAgfA0KPj4+Pj4+Pj4+IHwgICAg
MSB8IDExMDAyIHwgICAgICAgICAgNDA0IHwNCj4+Pj4+Pj4+PiB8ICAgIDEgfCAxMTAwMyB8ICAg
ICAgICAgIDYxMCB8DQo+Pj4+Pj4+Pj4gfCAgICAxIHwgMjAwMDAgfCAgICAgICAgICAgMTcgfA0K
Pj4+Pj4+Pj4+IHwgICAgMSB8IDIwMDI0IHwgICAgICAgICAgMzA5IHwNCj4+Pj4+Pj4+PiB8ICAg
IDEgfCAyNDk5OSB8ICAgICAgICAgIDY4OSB8DQo+Pj4+Pj4+Pj4gfCAgICAxIHwgMzI0MTQ1OTAy
NCB8ICAgICAgICAgIDMwOSB8DQo+Pj4+Pj4+Pj4gfCAgICAxIHwgMzI0MTUyNDU2MCB8ICAgICAg
ICAgIDM4MSB8DQo+Pj4+Pj4+Pj4gKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0rDQo+Pj4+
Pj4+Pj4NCj4+Pj4+Pj4+PiBUaGUgWERQIGNvZGUgKCNpZiAwIGlzIGZvciB0aGUgbm8gQ1BVIHJl
ZGlyZWN0aW9uKToNCj4+Pj4+Pj4+PiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu
MCAqLw0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+DQo+
Pj4+Pj4+Pj4gI2luY2x1ZGUgPGxpbnV4L2JwZi5oPg0KPj4+Pj4+Pj4+ICNpbmNsdWRlIDxsaW51
eC9pbi5oPg0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gI2luY2x1ZGUgPGJwZi9icGZfaGVscGVycy5o
Pg0KPj4+Pj4+Pj4+ICNpbmNsdWRlIDxicGYvYnBmX2VuZGlhbi5oPg0KPj4+Pj4+Pj4+DQo+Pj4+
Pj4+Pj4gI2luY2x1ZGUgInhkcC9wYXJzaW5nX2hlbHBlcnMuaCINCj4+Pj4+Pj4+Pg0KPj4+Pj4+
Pj4+IC8qIFJlZGlyZWN0IHRvIFNQIHF1ZXVlcyBtYXAuICovDQo+Pj4+Pj4+Pj4gc3RydWN0DQo+
Pj4+Pj4+Pj4gew0KPj4+Pj4+Pj4+IF9fdWludCAodHlwZSwgQlBGX01BUF9UWVBFX1hTS01BUCk7
DQo+Pj4+Pj4+Pj4gX190eXBlIChrZXksIF9fdTMyKTsNCj4+Pj4+Pj4+PiBfX3R5cGUgKHZhbHVl
LCBfX3UzMik7DQo+Pj4+Pj4+Pj4gX191aW50IChtYXhfZW50cmllcywgMTI4KTsNCj4+Pj4+Pj4+
PiB9IHhza3NfbWFwIFNFQygiLm1hcHMiKTsNCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IC8qIFJlZGly
ZWN0IHRvIENQVXMgbWFwLiAqLw0KPj4+Pj4+Pj4+IHN0cnVjdA0KPj4+Pj4+Pj4+IHsNCj4+Pj4+
Pj4+PiBfX3VpbnQgKHR5cGUsIEJQRl9NQVBfVFlQRV9DUFVNQVApOw0KPj4+Pj4+Pj4+IF9fdWlu
dCAoa2V5X3NpemUsIHNpemVvZiAoX191MzIpKTsNCj4+Pj4+Pj4+PiBfX3VpbnQgKHZhbHVlX3Np
emUsIHNpemVvZiAoc3RydWN0IGJwZl9jcHVtYXBfdmFsKSk7DQo+Pj4+Pj4+Pj4gX191aW50ICht
YXhfZW50cmllcywgMzIpOw0KPj4+Pj4+Pj4+IH0gY3B1X21hcCBTRUMoIi5tYXBzIik7DQo+Pj4+
Pj4+Pj4NCj4+Pj4+Pj4+PiAvKiBTdGF0aXN0aWNzIGFuZCBkZWJ1ZyBtYXBzLiAqLw0KPj4+Pj4+
Pj4+IHN0cnVjdA0KPj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+PiBfX3VpbnQgKHR5cGUsIEJQRl9NQVBf
VFlQRV9QRVJDUFVfQVJSQVkpOw0KPj4+Pj4+Pj4+IF9fdHlwZSAoa2V5LCBfX3UzMik7DQo+Pj4+
Pj4+Pj4gX190eXBlICh2YWx1ZSwgX191MzIpOw0KPj4+Pj4+Pj4+IF9fdWludCAobWF4X2VudHJp
ZXMsIDY0KTsNCj4+Pj4+Pj4+PiB9IHhkcF9zdGF0c19tYXAgU0VDKCIubWFwcyIpOw0KPj4+Pj4+
Pj4+DQo+Pj4+Pj4+Pj4gc3RydWN0DQo+Pj4+Pj4+Pj4gew0KPj4+Pj4+Pj4+IF9fdWludCAodHlw
ZSwgQlBGX01BUF9UWVBFX0hBU0gpOw0KPj4+Pj4+Pj4+IF9fdHlwZSAoa2V5LCBfX3UzMik7DQo+
Pj4+Pj4+Pj4gX190eXBlICh2YWx1ZSwgX191MzIpOw0KPj4+Pj4+Pj4+IF9fdWludCAobWF4X2Vu
dHJpZXMsIDY0KTsNCj4+Pj4+Pj4+PiB9IHhkcF9kZWJ1Z19wcm90byBTRUMoIi5tYXBzIik7DQo+
Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBzdGF0aWMgX191MzIgb25ldmFsID0gMTsNCj4+Pj4+Pj4+Pg0K
Pj4+Pj4+Pj4+IGludCBteV9wYXJzZV9ldGhoZHIgKHN0cnVjdCBoZHJfY3Vyc29yKiBuaCwgdm9p
ZCogZGF0YWVuZCwgc3RydWN0IGV0aGhkcioqIGV0aCkNCj4+Pj4+Pj4+PiB7DQo+Pj4+Pj4+Pj4g
X191MTYgZXRodHlwZTsNCj4+Pj4+Pj4+PiAqZXRoID0gbmgtPnBvczsNCj4+Pj4+Pj4+PiBpZiAo
KHZvaWQqKSAmKCpldGgpIFsxXSA+IGRhdGFlbmQpDQo+Pj4+Pj4+Pj4gew0KPj4+Pj4+Pj4+IHJl
dHVybiAoLTEpOw0KPj4+Pj4+Pj4+IH0NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IGV0aHR5cGUgPSAo
KmV0aCktPmhfcHJvdG87DQo+Pj4+Pj4+Pj4gbmgtPnBvcyA9ICYoKmV0aCkgWzFdOw0KPj4+Pj4+
Pj4+IGlmIChldGh0eXBlID09IGJwZl9udG9ocyAoRVRIX1BfODAyMVEpKQ0KPj4+Pj4+Pj4+IHsN
Cj4+Pj4+Pj4+PiBzdHJ1Y3Qgdmxhbl9oZHIqIHZsYW4gPSAoc3RydWN0IHZsYW5faGRyKikgJigq
ZXRoKSBbMV07DQo+Pj4+Pj4+Pj4gaWYgKCh2b2lkKikgJnZsYW4gWzFdID4gZGF0YWVuZCkNCj4+
Pj4+Pj4+PiB7DQo+Pj4+Pj4+Pj4gICAgICAgIHJldHVybiAoLTEpOw0KPj4+Pj4+Pj4+IH0NCj4+
Pj4+Pj4+PiAgICBldGh0eXBlID0gdmxhbi0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsNCj4+
Pj4+Pj4+PiAvKiBpbmNfZGVidWdfbWFwICgxMDAwMCsoYnBmX250b2hzICh2bGFuLT5oX3ZsYW5f
VENJKSAmIDB4MEZGRikpOyAqLw0KPj4+Pj4+Pj4+IC8qIGluY19kZWJ1Z19tYXAgKHZsYW4tPmhf
dmxhbl9UQ0kpOyAqLw0KPj4+Pj4+Pj4+IG5oLT5wb3MgPSAmdmxhbiBbMV07DQo+Pj4+Pj4+Pj4g
fQ0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gcmV0dXJuIChldGh0eXBlKTsNCj4+Pj4+Pj4+PiB9DQo+
Pj4+Pj4+Pj4NCj4+Pj4+Pj4+PiBzdGF0aWMgdm9pZCBpbmNfZGVidWdfbWFwIChfX3UzMiBrZXkp
DQo+Pj4+Pj4+Pj4gew0KPj4+Pj4+Pj4+ICNpZmRlZiBXSVRIX1NUQVRTDQo+Pj4+Pj4+Pj4gYnBm
X21hcF91cGRhdGVfZWxlbSAoJnhkcF9kZWJ1Z19wcm90bywNCj4+Pj4+Pj4+PiAgICAgICAgICAg
ICAgICAgICAgICZrZXksIChfX3UzMiopICZvbmV2YWwsIEJQRl9OT0VYSVNUKTsNCj4+Pj4+Pj4+
PiBfX3UzMiogcmVjID0gYnBmX21hcF9sb29rdXBfZWxlbSAoJnhkcF9kZWJ1Z19wcm90bywgKF9f
dTMyKikgJmtleSk7DQo+Pj4+Pj4+Pj4gaWYgKHJlYyAhPSBOVUxMKQ0KPj4+Pj4+Pj4+IHsNCj4+
Pj4+Pj4+PiArKygqcmVjKTsNCj4+Pj4+Pj4+PiB9DQo+Pj4+Pj4+Pj4gI2VuZGlmDQo+Pj4+Pj4+
Pj4gfQ0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IFNFQyAoInhk
cCIpDQo+Pj4+Pj4+Pj4gaW50IHJkd3JfeHNrX3Byb2cgKHN0cnVjdCB4ZHBfbWQgKmN0eCkNCj4+
Pj4+Pj4+PiB7DQo+Pj4+Pj4+Pj4gZW51bSB4ZHBfYWN0aW9uIGFjdGlvbjsNCj4+Pj4+Pj4+PiBp
bnQgaW5kZXggPSBjdHgtPnJ4X3F1ZXVlX2luZGV4Ow0KPj4+Pj4+Pj4+IHZvaWQqIGRhdGFlbmQg
PSAodm9pZCAqKShsb25nKWN0eC0+ZGF0YV9lbmQ7DQo+Pj4+Pj4+Pj4gdm9pZCogZGF0YSA9ICh2
b2lkICopKGxvbmcpY3R4LT5kYXRhOw0KPj4+Pj4+Pj4+IGludCBzdGFnZSA9IDA7DQo+Pj4+Pj4+
Pj4NCj4+Pj4+Pj4+PiBzdHJ1Y3QgaGRyX2N1cnNvciBuaDsNCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+
IF9fdTMyICpwa3RfY291bnQ7DQo+Pj4+Pj4+Pj4gc3RydWN0IGV0aGhkciogZXRoOw0KPj4+Pj4+
Pj4+DQo+Pj4+Pj4+Pj4gI2lmZGVmIFdJVEhfU1RBVFMNCj4+Pj4+Pj4+PiBwa3RfY291bnQgPSBi
cGZfbWFwX2xvb2t1cF9lbGVtKCZ4ZHBfc3RhdHNfbWFwLCAmaW5kZXgpOw0KPj4+Pj4+Pj4+IGlm
IChwa3RfY291bnQgIT0gTlVMTCkNCj4+Pj4+Pj4+PiB7DQo+Pj4+Pj4+Pj4gKysqcGt0X2NvdW50
Ow0KPj4+Pj4+Pj4+IH0NCj4+Pj4+Pj4+PiAjZW5kaWYNCj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+IC8q
IFBhcnNlIEV0aGVybmV0ICYgVkxBTiAqLw0KPj4+Pj4+Pj4+IG5oLnBvcyA9IGRhdGE7DQo+Pj4+
Pj4+Pj4gaW50IGV0aHR5cGUgPSBteV9wYXJzZV9ldGhoZHIgKCZuaCwgZGF0YWVuZCwgJmV0aCk7
DQo+Pj4+Pj4+Pj4gaWYgKGV0aHR5cGUgIT0gYnBmX250b2hzICgweDA4MDApKQ0KPj4+Pj4+Pj4+
IHsNCj4+Pj4+Pj4+PiByZXR1cm4gKFhEUF9QQVNTKTsNCj4+Pj4+Pj4+PiB9DQo+Pj4+Pj4+Pj4N
Cj4+Pj4+Pj4+PiAvKiBEaXJlY3QgWFNLIHJlZGlyZWN0LiAqLw0KPj4+Pj4+Pj4+ICNpZiAwDQo+
Pj4+Pj4+Pj4gaW5jX2RlYnVnX21hcCAoc3RhZ2UpOw0KPj4+Pj4+Pj4+IGFjdGlvbiA9ICBicGZf
cmVkaXJlY3RfbWFwICgmeHNrc19tYXAsIGluZGV4LCBYRFBfUEFTUyk7DQo+Pj4+Pj4+Pj4gaW5j
X2RlYnVnX21hcCAoMTAwMCArIGluZGV4KjEwICsgYWN0aW9uKTsNCj4+Pj4+Pj4+PiAjZW5kaWYN
Cj4+Pj4+Pj4+PiAvKiBDUFUgbWFwIHJlZGlyZWN0LiAqLw0KPj4+Pj4+Pj4+IF9fdTMyIGNwdWlk
ID0gYnBmX2dldF9zbXBfcHJvY2Vzc29yX2lkICgpOw0KPj4+Pj4+Pj4+IF9fdTMyIHRhcmdldGNw
dSA9IGNwdWlkIF4gMHgwMTsNCj4+Pj4+Pj4+PiArK3N0YWdlOw0KPj4+Pj4+Pj4+IGluY19kZWJ1
Z19tYXAgKHN0YWdlKTsNCj4+Pj4+Pj4+PiBpbmNfZGVidWdfbWFwICgyMDAgKyBjcHVpZCAqIDEw
ICsgdGFyZ2V0Y3B1KTsNCj4+Pj4+Pj4+PiBhY3Rpb24gPSAgYnBmX3JlZGlyZWN0X21hcCAoJmNw
dV9tYXAsIHRhcmdldGNwdSwgWERQX1BBU1MpOw0KPj4+Pj4+Pj4+IGluY19kZWJ1Z19tYXAgKDQw
MCArIHRhcmdldGNwdSAqIDEwICsgYWN0aW9uKTsNCj4+Pj4+Pj4+PiByZXR1cm4gKGFjdGlvbik7
DQo+Pj4+Pj4+Pj4gfQ0KPj4+Pj4+Pj4+DQo+Pj4+Pj4+Pj4gU0VDICgieGRwL2NwdW1hcCIpDQo+
Pj4+Pj4+Pj4gaW50IHJkd3JfY3B1X3Byb2coc3RydWN0IHhkcF9tZCAqY3R4KQ0KPj4+Pj4+Pj4+
IHsNCj4+Pj4+Pj4+PiBfX3U2NCogZGF0YWVuZDY0ID0gKF9fdTY0KikgKGxvbmcpIGN0eC0+ZGF0
YV9lbmQ7DQo+Pj4+Pj4+Pj4gX191NjQqIGRhdGE2NCA9IChfX3U2NCopIChsb25nKSBjdHgtPmRh
dGE7DQo+Pj4+Pj4+Pj4gX191MzIgcnhxdWV1ZSA9IGN0eC0+cnhfcXVldWVfaW5kZXg7DQo+Pj4+
Pj4+Pj4gaWYgKHJ4cXVldWUgPCA1MDAwKQ0KPj4+Pj4+Pj4+IHsNCj4+Pj4+Pj4+PiBpbmNfZGVi
dWdfbWFwICgyMDAwMCArIHJ4cXVldWUpOw0KPj4+Pj4+Pj4+IH0NCj4+Pj4+Pj4+PiBlbHNlDQo+
Pj4+Pj4+Pj4gew0KPj4+Pj4+Pj4+IGluY19kZWJ1Z19tYXAgKHJ4cXVldWUpOw0KPj4+Pj4+Pj4+
IGluY19kZWJ1Z19tYXAgKDI0OTk5KTsNCj4+Pj4+Pj4+PiB9DQo+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+
PiByeHF1ZXVlID0gKHJ4cXVldWUgPj0gMiAmJiByeHF1ZXVlIDwgNikgPyByeHF1ZXVlIDogMTA7
DQo+Pj4+Pj4+Pj4gX191MzIgY3B1aWQgPSBicGZfZ2V0X3NtcF9wcm9jZXNzb3JfaWQgKCk7DQo+
Pj4+Pj4+Pj4gY3B1aWQgPSAoY3B1aWQgPCAxMikgPyBjcHVpZCA6IDIwOw0KPj4+Pj4+Pj4+IGlu
Y19kZWJ1Z19tYXAgKDEwMDAwICsgMTAwKnJ4cXVldWUgKyBjcHVpZCk7DQo+Pj4+Pj4+Pj4NCj4+
Pj4+Pj4+PiByZXR1cm4gYnBmX3JlZGlyZWN0X21hcCAoJnhza3NfbWFwLCBicGZfZ2V0X3NtcF9w
cm9jZXNzb3JfaWQgKCksIDApOw0KPj4+Pj4+Pj4+IH0NCg0KDQo=