RE: [PATCH i-g-t v2] tests/intel/kms_dp_linktrain_fallback: Add UHBR-to-HBR fallback subtest

"S, Sowmiya" <[email protected]> Tue, 4 Aug 2026 08:24:00 +0000
Newsgroups org.freedesktop.lists.igt-dev
Message-ID <PH7PR11MB679624DA0487DEF92A029FEFE5D42@PH7PR11MB6796.namprd11.prod.outlook.com>
SGkgQEpvc2hpLCBLdW5hbDEsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJv
bTogSm9zaGksIEt1bmFsMSA8a3VuYWwxLmpvc2hpQGludGVsLmNvbT4NCj4gU2VudDogMDMgQXVn
dXN0IDIwMjYgMTc6MzENCj4gVG86IFMsIFNvd21peWEgPHNvd21peWEuc0BpbnRlbC5jb20+OyBp
Z3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBDYzogU2hhcm1hLCBTd2F0aTIgPHN3YXRp
Mi5zaGFybWFAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIGktZy10IHYyXSB0ZXN0
cy9pbnRlbC9rbXNfZHBfbGlua3RyYWluX2ZhbGxiYWNrOiBBZGQgVUhCUi0NCj4gdG8tSEJSIGZh
bGxiYWNrIHN1YnRlc3QNCj4gDQo+IFJlLXNlbmRpbmcgcmV2aWV3IGNvbW1lbnRzLCBhcyBhYm92
ZSB2ZXJzaW9uIGRpZG4ndCBjb21lIHVwIGFzIGFudGljaXBhdGVkLg0KPiANCj4gT24gMDMtMDgt
MjAyNiAxNzoyNCwgSm9zaGksIEt1bmFsMSB3cm90ZToNCj4gPiBIZWxsbyBTb3dtaXlhLA0KPiA+
DQo+ID4gUGxlYXNlIGZpbmQgcmV2aWV3IGNvbW1lbnRzIGlubGluZSwNCj4gPiBJIHNlZSBjaGVj
a3BhdGNoIGZsYWcgYmVsb3cgaXNzdWVzIHBsZWFzZSBmaXggdGhvc2UsDQo+ID4NCj4gPiAzMjog
RVJST1I6RVhFQ1VURV9QRVJNSVNTSU9OUzogZG8gbm90IHNldCBleGVjdXRlIHBlcm1pc3Npb25z
IGZvcg0KPiA+IHNvdXJjZSBmaWxlcw0KPiA+ICMzMjogRklMRTogdGVzdHMvaW50ZWwva21zX2Rw
X2xpbmt0cmFpbl9mYWxsYmFjay5jDQo+ID4NCj4gPiAyMjM6IEVSUk9SOlNQQUNJTkc6IHNwYWNl
IHJlcXVpcmVkIGFmdGVyIHRoYXQgJywnIChjdHg6VnhWKQ0KPiA+ICMyMjM6IEZJTEU6IHRlc3Rz
L2ludGVsL2ttc19kcF9saW5rdHJhaW5fZmFsbGJhY2suYzo1NDA6DQo+ID4gKyBpZ3Rfb3V0cHV0
X25hbWUoZGF0YS0+b3V0cHV0KSxwcmV2X2xpbmtfcmF0ZSk7DQo+ID4gwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgXg0KPiA+IHRvdGFsOiAyIGVycm9ycywgMCB3YXJuaW5ncywgMCBjaGVja3MsIDI4
MyBsaW5lcyBjaGVja2VkDQo+ID4NCkkgd2lsbCBmaXggdGhpcy4NCj4gPiBPbiAwMy0wOC0yMDI2
IDEzOjM1LCBTb3dtaXlhIFMgd3JvdGU6DQo+ID4NCj4gPj4gQ292ZXIgdGhlIFVIQlIgKDEyOGIv
MTMyYikgdG8gSEJSMyAoOGIvMTBiKSBlbmNvZGluZyBib3VuZGFyeSBtaXNzZWQNCj4gPj4gYnkg
ZHAtZmFsbGJhY2suIEFkZCB1aGJyLXRvLWhici1mYWxsYmFjayB0byBwaW4gdGhlIGxpbmsgYXQg
dGhlDQo+ID4+IGhpZ2hlc3Qgc3VzdGFpbmFibGUgVUhCUiByYXRlLCBmb3JjZSByZXBlYXRlZCBs
aW5rIHRyYWluaW5nIGZhaWx1cmVzLA0KPiA+PiBhbmQgdmVyaWZ5IHRoZSByYXRlIGRyb3BzIGJl
bG93IFVIQlIxMCAoMSwwMDAsMDAwIGticHMpLiBTdG9wIGF0IHRoYXQNCj4gPj4gdGhyZXNob2xk
IGFuZCBsZWF2ZSB0aGUgSEJSIHN0ZXAtZG93biB0byBkcC1mYWxsYmFjay4gRXhlcmNpc2UgYm90
aA0KPiA+PiBTU1QgYW5kIE1TVCBvdXRwdXRzIHNpbmNlIE1TVCBzaWJsaW5ncyBzaGFyZSB0aGUg
cGh5c2ljYWwgbGluay4NCj4gPiBOSVQ6IEZpeCBVbml0cyBpbiBzdWJqZWN0IG1lc3NhZ2UsIGNv
ZGUgYW5kIHRoZSBsb2dzIERQIGxpbmsgcmF0ZXMgaW4NCj4gPiBpOTE1L0RSTSBhcmUgaW4gMTAg
a2JpdC9zIHVuaXRzLCBzZWUgZHJtX2RwX2lzX3VoYnJfcmF0ZQ0KWWVhaCwgd2lsbCByZXdyaXRl
Lg0KPiA+Pg0KPiA+PiB2MjogSW1wcm92ZSBVSEJSIGZhbGxiYWNrIHN1YnRlc3QNCj4gPiBOSVQ6
IFBsZWFzZSBzcGVsbCBvdXQgd2hhdCBhY3R1YWxseSBjaGFuZ2VkIGluIHYyICJJbXByb3ZlIFVI
QlINCj4gPiBmYWxsYmFjayBzdWJ0ZXN0IiBpcyB0b28gZ2VuZXJpYw0KSSB1cGRhdGVkIHRoZSAg
dHJhdmVyc2VkX21zdF9vdXRwdXRfY291bnQgYXMgaXQgaXMgc3RhdGljLCBJIHJlc2V0IGl0IHRv
IHplcm8gZHVyaW5nIGVhY2ggc3VidGVzdC4NCj4gPj4NCj4gPj4gU2lnbmVkLW9mZi1ieTogU293
bWl5YSBTIDxzb3dtaXlhLnNAaW50ZWwuY29tPg0KPiA+PiAtLS0NCj4gPj4gwqAgdGVzdHMvaW50
ZWwva21zX2RwX2xpbmt0cmFpbl9mYWxsYmFjay5jIHwgMjA1DQo+ID4+ICsrKysrKysrKysrKysr
KysrKysrKystLQ0KPiA+PiDCoCAxIGZpbGUgY2hhbmdlZCwgMTkxIGluc2VydGlvbnMoKyksIDE0
IGRlbGV0aW9ucygtKQ0KPiA+PiDCoCBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1DQo+ID4+
IHRlc3RzL2ludGVsL2ttc19kcF9saW5rdHJhaW5fZmFsbGJhY2suYw0KPiA+Pg0KPiA+PiBkaWZm
IC0tZ2l0IGEvdGVzdHMvaW50ZWwva21zX2RwX2xpbmt0cmFpbl9mYWxsYmFjay5jDQo+ID4+IGIv
dGVzdHMvaW50ZWwva21zX2RwX2xpbmt0cmFpbl9mYWxsYmFjay5jDQo+ID4+IG9sZCBtb2RlIDEw
MDY0NA0KPiA+PiBuZXcgbW9kZSAxMDA3NTUNCj4gPj4gaW5kZXggMTE1MTgzZDJkYy4uYzY5MTQ0
M2FhOA0KPiA+PiAtLS0gYS90ZXN0cy9pbnRlbC9rbXNfZHBfbGlua3RyYWluX2ZhbGxiYWNrLmMN
Cj4gPj4gKysrIGIvdGVzdHMvaW50ZWwva21zX2RwX2xpbmt0cmFpbl9mYWxsYmFjay5jDQo+ID4+
IEBAIC0yNCw2ICsyNCwxNCBAQA0KPiA+PiDCoMKgICoNCj4gPj4gwqDCoCAqIFNVQlRFU1Q6IGRz
Yy1mYWxsYmFjaw0KPiA+PiDCoMKgICogRGVzY3JpcHRpb246IFRlc3QgZmFsbGJhY2sgdG8gRFND
IHdoZW4gQlcgaXNuJ3Qgc3VmZmljaWVudA0KPiA+PiArICoNCj4gPj4gKyAqIFNVQlRFU1Q6IHVo
YnItdG8taGJyLWZhbGxiYWNrDQo+ID4+ICsgKiBEZXNjcmlwdGlvbjogVmVyaWZ5IGZhbGxiYWNr
IGZyb20gVUhCUiAoPj0gMTAgR2JwcywgMTI4Yi8xMzJiKSB0bw0KPiA+PiBIQlIzIG9yDQo+ID4+
ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxvd2VyICg4Yi8xMGIpIG9uIGEgVUhCUi1j
YXBhYmxlIERQIGNvbm5lY3RvciBieQ0KPiA+PiBmb3JjaW5nDQo+ID4+ICsgKsKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgIHJlcGVhdGVkIGxpbmsgdHJhaW5pbmcgZmFpbHVyZXMsIGV4ZXJjaXNp
bmcgdGhlIHBvcnQNCj4gPj4gc2xpY2UNCj4gPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqAgcmVzZXQgcGF0aCBvbiB0aGUgdHJhbnNpdGlvbi4gU3VwcG9ydHMgYm90aCBTU1QgYW5kDQo+
ID4+ICsgTVNUDQo+ID4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh0b3BvbG9neS13
aWRlKSBvdXRwdXRzOyBNU1Qgc2libGluZ3Mgc2hhcmUgdGhlDQo+ID4+IHBoeXNpY2FsDQo+ID4+
ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpbmsgc28gZmFsbGJhY2sgYXBwbGllcyB0
byB0aGUgd2hvbGUgdG9wb2xvZ3kuDQo+ID4+IMKgwqAgKi8NCj4gPiAiZXhlcmNpc2luZyB0aGUg
cG9ydCBzbGljZSByZXNldCBwYXRoIG9uIHRoZSB0cmFuc2l0aW9uIiAtIG5vdGhpbmcgaW4NCj4g
PiB0aGUgdGVzdCBvYnNlcnZlcyB0aGF0LiBUaGUgc3VidGVzdCBvbmx5IHJlYWRzIGJhY2sgdGhl
IGxpbmsgcmF0ZSBmcm9tDQo+ID4gZGVidWdmcywgc28gaXQgY2Fubm90IHRlbGwgYSBwb3J0LXNs
aWNlIHJlc2V0IGZyb20gYW55IG90aGVyIHJldHJhaW4uDQo+ID4gUGxlYXNlIGRyb3AgdGhhdCBj
bGF1c2UgKG9yIG1vdmUgaXQgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIGFzDQo+ID4gbW90aXZhdGlv
biksIG90aGVyd2lzZSB0aGUgZG9jdW1lbnRlZCBzY29wZSBvZiB0aGUgc3VidGVzdCBkb2VzIG5v
dA0KPiA+IG1hdGNoIHdoYXQgaXQgdmVyaWZpZXMuDQo+ID4NCkkgd2lsbCBkcm9wIHBvcnQgc2xp
Y2UgcmVsYXRlZCBzYXlpbmcgZnJvbSBkZXNjcmlwdGlvbi4NCj4gPj4gwqAgwqAgI2RlZmluZSBS
RVRSQUlOX0NPVU5UIDENCj4gPj4gQEAgLTMzLDYgKzQxLDEyIEBADQo+ID4+IMKgwqAgKi8NCj4g
Pj4gwqAgI2RlZmluZSBMVF9GQUlMVVJFX1JFRFVDRURfQ0FQUyAyDQo+ID4+IMKgICNkZWZpbmUg
U1BVUklPVVNfSFBEX1JFVFJZIDMNCj4gPj4gKy8qDQo+ID4+ICsgKiBVSEJSMTAgbGluayByYXRl
IHRocmVzaG9sZCBpbiBLYnBzLg0KPiA+PiArICogUmF0ZXMgYXQgb3IgYWJvdmUgdGhpcyB2YWx1
ZSB1c2UgMTI4Yi8xMzJiIGVuY29kaW5nDQo+ID4+IChVSEJSMTAvMTMuNS8yMCkuDQo+ID4+ICsg
KiBSYXRlcyBiZWxvdyB0aGlzIHZhbHVlIHVzZSA4Yi8xMGIgZW5jb2RpbmcgKEhCUjMgYW5kIGxv
d2VyKS4NCj4gPj4gKyAqLw0KPiA+PiArI2RlZmluZSBVSEJSMTBfTElOS19SQVRFIDEwMDAwMDAN
Cj4gPiBOSVQ6IEluc3RlYWQgb2YgaGF2aW5nIGEgZGVmaW5pdGlvbiB3ZSBjYW4gaGF2ZSBhIHJl
dXNhYmxlIGhlbHBlciB0aGF0DQo+ID4gY2FuIGJlIHVzZWQgYnkgb3RoZXIgdGVzdHMgdG8gY2hl
Y2sgZ2l2ZW4gcmF0ZSBpcyB1aGJyIG9yIG5vdC4NCj4gPj4gwqAgwqAgc3RhdGljIGludCB0cmF2
ZXJzZWRfbXN0X291dHB1dHNbSUdUX01BWF9QSVBFU107DQo+ID4+IMKgIHN0YXRpYyBpbnQgdHJh
dmVyc2VkX21zdF9vdXRwdXRfY291bnQ7IEBAIC03Myw5ICs4NywxMCBAQCBzdGF0aWMNCj4gPj4g
Ym9vbCBzZXR1cF9tc3Rfb3V0cHV0cyhkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqbXN0X291
dHB1dFtdLA0KPiA+PiDCoMKgwqDCoMKgwqDCoMKgwqAgb3V0cHV0ID0gbXN0X291dHB1dFtpXTsN
Cj4gPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh0cmF2ZXJzZWRfbXN0X291dHB1dF9jb3VudCA8
IElHVF9NQVhfUElQRVMpIHsNCj4gPj4gdHJhdmVyc2VkX21zdF9vdXRwdXRzW3RyYXZlcnNlZF9t
c3Rfb3V0cHV0X2NvdW50KytdID0NCj4gPj4gb3V0cHV0LT5jb25maWcuY29ubmVjdG9yLT5jb25u
ZWN0b3JfaWQ7DQo+ID4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJPdXRwdXQg
JXMgaXMgaW4gc2FtZSB0b3BvbG9neSBhcyAlc1xuIiwNCj4gPj4gLcKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgIGlndF9vdXRwdXRfbmFtZShvdXRwdXQpLA0KPiA+PiAtwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X291dHB1dF9uYW1lKGRhdGEtPm91dHB1dCkpOw0K
PiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAob3V0cHV0LT5pZCAhPSBkYXRhLT5vdXRw
dXQtPmlkKQ0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJP
dXRwdXQgJXMgaXMgaW4gc2FtZSBNU1QgdG9wb2xvZ3kgYXMNCj4gPj4gKyVzXG4iLA0KPiA+PiAr
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfb3V0cHV0X25hbWUo
b3V0cHV0KSwNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg
aWd0X291dHB1dF9uYW1lKGRhdGEtPm91dHB1dCkpOw0KPiA+IFRoaXMgaHVuayBpcyBhbiB1bnJl
bGF0ZWQgY29zbWV0aWMgY2hhbmdlIC0gaXQgc3VwcHJlc3NlcyB0aGUNCj4gPiBzZWxmLXJlZmVy
ZW50aWFsIGxvZyBsaW5lIGFuZCByZXdvcmRzIGFuIGV4aXN0aW5nIG1lc3NhZ2UuIEl0IGhhcw0K
PiA+IG5vdGhpbmcgdG8gZG8gd2l0aCBVSEJSIGZhbGxiYWNrLCBhbmQgcmV3b3JkaW5nIGFuIGV4
aXN0aW5nIGlndF9pbmZvKCkNCj4gPiBjYW4gYnJlYWsgd2hhdGV2ZXIgcGVvcGxlIGdyZXAgZm9y
IGluIENJIGxvZ3MuIFBsZWFzZSBzcGxpdCBpdCBpbnRvDQo+ID4gaXRzIG93biBwYXRjaCAob3Ig
ZHJvcCBpdCkuDQo+ID4NClRoZSBsb2cgaXMgY29taW5nIGxpa2UNCiIgT3V0cHV0IERQLTQgaXMg
aW4gc2FtZSB0b3BvbG9neSBhcyBEUC00IiAoc2hvdWxkIGJlIG1vcmUgY2xlYXIsIEkgZmVlbC4g
VGhpcyBsb2cgaXMgY29uZnVzaW5nKQ0KQWdyZWVkLCBJIHdpbGwgZHJvcCBmcm9tIHRoaXMgcGF0
Y2ggYW5kIGlmIG5lZWRlZCwgd2lsbCBjcmVhdGUgYSBzZXBhcmF0ZSBvbmUuIA0KPiA+PiDCoMKg
wqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsNCj4gPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg
aWd0X2Fzc2VydF9mKGZhbHNlLCAiVW5hYmxlIHRvIHNhdmUgdHJhdmVyc2VkDQo+ID4+IG91dHB1
dFxuIik7DQo+ID4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsNCj4g
Pj4gQEAgLTM0Nyw3ICszNjIsNyBAQCBzdGF0aWMgYm9vbCBmaXhfbGlua19zdGF0dXNfYW5kX3Jl
Y29tbWl0KGRhdGFfdA0KPiA+PiAqZGF0YSwNCj4gPj4gwqDCoMKgwqDCoCByZXR1cm4gdHJ1ZTsN
Cj4gPj4gwqAgfQ0KPiA+PiDCoCAtc3RhdGljIHZvaWQgdGVzdF9mYWxsYmFjayhkYXRhX3QgKmRh
dGEsIGJvb2wgaXNfbXN0KQ0KPiA+PiArc3RhdGljIGJvb2wgdGVzdF9mYWxsYmFjayhkYXRhX3Qg
KmRhdGEsIGJvb2wgaXNfbXN0LCBib29sDQo+ID4+ICtmb3JjZV91aGJyKQ0KPiA+IFdvcnRoIGRv
Y3VtZW50aW5nIHdoYXQgdGhlIGJvb2wgbWVhbnMsIGJlY2F1c2UgaXQgaXMgZG9pbmcgZG91Ymxl
IGR1dHkNCj4gPiBiZWxvdzoNCj4gPiBmb3IgdGhlICFmb3JjZV91aGJyIGNhbGxlcnMgaXQgaXMg
aWdub3JlZCBlbnRpcmVseSwgYW5kIGZvciBmb3JjZV91aGJyDQo+ID4gaXQgZmVlZHMgaWd0X3Jl
cXVpcmVfZigpLCBpLmUuIGZhbHNlID09ICJza2lwIg0KPiA+PiDCoCB7DQo+ID4+IMKgwqDCoMKg
wqAgaW50IG91dHB1dF9jb3VudCwgcmV0cmllczsNCj4gPj4gwqDCoMKgwqDCoCBpbnQgbWF4X2xp
bmtfcmF0ZSwgY3Vycl9saW5rX3JhdGUsIHByZXZfbGlua19yYXRlOyBAQCAtMzYxLDE0DQo+ID4+
ICszNzYsOTQgQEAgc3RhdGljIHZvaWQgdGVzdF9mYWxsYmFjayhkYXRhX3QgKmRhdGEsIGJvb2wN
Cj4gPj4gaXNfbXN0KQ0KPiA+PiDCoMKgwqDCoMKgIHJldHJpZXMgPSBTUFVSSU9VU19IUERfUkVU
Ulk7DQo+ID4+IMKgIMKgwqDCoMKgwqAgaWd0X2Rpc3BsYXlfcmVzZXQoJmRhdGEtPmRpc3BsYXkp
Ow0KPiA+PiAtwqDCoMKgIGk5MTVfZHBfcmVzZXRfbGlua19wYXJhbXMoZGF0YS0+ZHJtX2ZkLCBk
YXRhLT5vdXRwdXQpOw0KPiA+PiAtwqDCoMKgIGlmICghc2V0dXBfb3V0cHV0cyhkYXRhLCBpc19t
c3QsIG91dHB1dHMsDQo+ID4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZvdXRwdXRf
Y291bnQsIG1vZGVzLCBmYnMsDQo+ID4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBy
aW1hcmllcykpDQo+ID4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm47DQo+ID4+IMKgIC3CoMKgwqAg
aWd0X2luZm8oIlRlc3RpbmcgbGluayB0cmFpbmluZyBmYWxsYmFjayBvbiAlc1xuIiwNCj4gPj4g
LcKgwqDCoMKgwqDCoMKgwqAgaWd0X291dHB1dF9uYW1lKGRhdGEtPm91dHB1dCkpOw0KPiA+PiAr
wqDCoMKgIC8qDQo+ID4+ICvCoMKgwqDCoCAqIEZvciB0aGUgVUhCUi10by1IQlIgZmFsbGJhY2sg
Y2FzZSwgcGluIHRoZSBsaW5rIHRvIHRoZSBzaW5rJ3MNCj4gPj4gK8KgwqDCoMKgICogbmVnb3Rp
YXRlZCBtYXggcmF0ZSAoaTkxNV9kcF9nZXRfbWF4X2xpbmtfcmF0ZSgpIOKAlCB0aGUgY29tbW9u
DQo+ID4gc3RpY2sgdG8gQVNDSUkgcHVuY3R1YXRpb24gKCItIikNCj4gPj4gK8KgwqDCoMKgICog
c291cmNlL3NpbmsgcmF0ZSwgbm90IGk5MTVfZHBfZ2V0X21heF9zdXBwb3J0ZWRfcmF0ZSgpIHdo
aWNoDQo+ID4+IGxpc3RzDQo+ID4+ICvCoMKgwqDCoCAqIGV2ZXJ5IHJhdGUgdGhlICpzb3VyY2Uq
IGNhbiBnZW5lcmF0ZSwgaW5jbHVkaW5nIG9uZXMgdGhlIHNpbmsNCj4gPj4gK8KgwqDCoMKgICog
ZG9lc24ndCBhZHZlcnRpc2UgaW4gaXRzIERQQ0QpLiBJZiB0aGUgcGh5c2ljYWwgbGluayBzdGls
bA0KPiA+PiArY2FuJ3QNCj4gPj4gK8KgwqDCoMKgICogc3VzdGFpbiB0aGF0IHJhdGUgKGNhYmxl
IGxpbWl0KSwgZmFsbCBiYWNrIHRvIHRoZSBuZXh0LWxvd2VyDQo+ID4+IFVIQlINCj4gPj4gK8Kg
wqDCoMKgICogcmF0ZSBhZHZlcnRpc2VkIGluIHRoZSBkZWJ1Z2ZzIGxpc3QgYW5kIHJldHJ5LiBT
a2lwIHRoZSB0ZXN0DQo+ID4+IGlmIG5vDQo+ID4+ICvCoMKgwqDCoCAqIFVIQlIgcmF0ZSBpcyBh
Y2hpZXZhYmxlLg0KPiA+PiArwqDCoMKgwqAgKi8NCj4gPiBbWF0NCj4gPiBDaGFuZ2UgZHJvcHBl
ZCB0aGUgdW5jb25kaXRpb25hbCBpOTE1X2RwX3Jlc2V0X2xpbmtfcGFyYW1zKCkgKHJlbW92ZWQN
Cj4gPiBhIGZldyBsaW5lcyB1cCkgYW5kIG9ubHkga2VwdCBpdCBpbiB0aGUgIWZvcmNlX3VoYnIg
YnJhbmNoLiBTbyBvbiB0aGlzDQo+ID4gcGF0aA0KPiA+IGk5MTVfZHBfZ2V0X21heF9saW5rX3Jh
dGUoKSBpcyBub3cgcmVhZCBiZWZvcmUgYW55dGhpbmcgaXMgcmVzZXQuIFRoYXQNCj4gPiBkZWJ1
Z2ZzIGZpbGUgaXMgbm90IHRoZSBzaW5rJ3Mgc3RhdGljIG1heGltdW0gLSBpdCBpcyB0aGUgY3Vy
cmVudGx5DQo+ID4gYWxsb3dlZCBtYXhpbXVtLg0KPiA+DQo+ID4gVGhvc2UgbGltaXRzIHNocmlu
ayBvbiBldmVyeSBmYWxsYmFjay4gQ29uY3JldGVseTogdGhlIHNlY29uZCBhbmQNCj4gPiBsYXRl
ciBvdXRwdXRzIHNoYXJpbmcgYW4gaW50ZWxfZHAgKE1TVCBzaWJsaW5ncyksIG9yIGEgZnVsbC1i
aW5hcnkgcnVuDQo+ID4gd2hlcmUgZHAtZmFsbGJhY2sgYWxyZWFkeSB3YWxrZWQgdGhpcyBjb25u
ZWN0b3IgZG93biB0byAyLjcgR2Jwcywgd2lsbA0KPiA+IHJlYWQNCj4gPiBtYXg9MjcwMDAwIGhl
cmUgYW5kIHByaW50ICJkb2VzIG5vdCBzdXBwb3J0IFVIQlIgKG1heD0yNzAwMDAga2JwcyksDQo+
ID4gc2tpcHBpbmciIG9uIGEgcGFuZWwgdGhhdCB2ZXJ5IG11Y2ggZG9lcyBzdXBwb3J0IFVIQlIu
DQoNCkkgd2lsbCBtb3ZlIHRoZSByZXNldCB0byBiZWZvcmUgdGhlIFVIQlIgY2FwYWJpbGl0eSBn
YXRlIHJlYWQgaW4gcnVuX2x0X2ZhbGxiYWNrX3Rlc3QoKQ0KPiA+PiArwqDCoMKgIGlmIChmb3Jj
ZV91aGJyKSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBjaGFyIGJ1Zls1MTJdLCByYXRlX3N0clsx
Nl0sIGxhbmVfYXV0b1tdID0gImF1dG8iOw0KPiA+PiArwqDCoMKgwqDCoMKgwqAgaW50IHRyeV9y
YXRlID0gaTkxNV9kcF9nZXRfbWF4X2xpbmtfcmF0ZShkYXRhLT5kcm1fZmQsDQo+ID4+ICvCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRh
LT5vdXRwdXQpOw0KPiA+PiArwqDCoMKgwqDCoMKgwqAgLyogUHJlc2VydmUgTVNUIHN0YXRlIGZv
ciBmYWxsYmFjayByZXRyaWVzOyBrZWVwIGZpbmFsDQo+ID4+IGRpc2NvdmVyeSBjYWNoZWQuKi8N
Cj4gPj4gK8KgwqDCoMKgwqDCoMKgIGludCBzYXZlZF9tc3RfY291bnQgPSB0cmF2ZXJzZWRfbXN0
X291dHB1dF9jb3VudDsNCj4gPj4gKw0KPiA+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHRyeV9yYXRl
IDwgVUhCUjEwX0xJTktfUkFURSkgew0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rf
aW5mbygiT3V0cHV0ICVzIGRvZXMgbm90IHN1cHBvcnQgVUhCUiAobWF4PSVkIGticHMpLA0KPiA+
PiBza2lwcGluZ1xuIiwNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGln
dF9vdXRwdXRfbmFtZShkYXRhLT5vdXRwdXQpLCB0cnlfcmF0ZSk7DQo+ID4+ICvCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4gPiBU
aGlzIGlzIG9uZSBvZiB0d28gZGlmZmVyZW50ICJkb2VzIG5vdCBzdXBwb3J0IFVIQlIiIHNraXBz
LCB0aGUgb3RoZXINCj4gPiBiZWluZyB0aGUNCj4gPiBpOTE1X2RwX2dldF9tYXhfc3VwcG9ydGVk
X3JhdGUoKSBnYXRlIGluDQo+ID4gcnVuX3VoYnJfdG9faGJyX2ZhbGxiYWNrX3Rlc3QoKS4gQW4g
b3V0cHV0IHRoYXQgcGFzc2VzIHRoZSBvdXRlciBnYXRlDQo+ID4gKHNvdXJjZSBjYW4gZG8gVUhC
UikgYW5kIGZhaWxzIGhlcmUgKHNpbmsNCj4gPiBjYW5ub3QpIHByaW50cyBib3RoIG1lc3NhZ2Vz
LCB3aGljaCByZWFkcyBsaWtlIGEgYnVnIGluIHRoZSB0ZXN0Lg0KPiA+IFBsZWFzZSBnYXRlDQo+
ID4gb25jZSwgaW4gb25lIHBsYWNlLCBvbiB0aGUgc2FtZSBoZWxwZXIuDQpJIHdpbGwgY29uc29s
aWRhdGUgaW50byBhIHNpbmdsZSBnYXRlIGluIHRoZSBuZXh0IHJldmlzaW9uLg0KPiA+PiArDQo+
ID4+ICvCoMKgwqDCoMKgwqDCoCBjdXJyX2xpbmtfcmF0ZSA9IDA7DQo+ID4+ICvCoMKgwqDCoMKg
wqDCoCB3aGlsZSAodHJ5X3JhdGUgPj0gVUhCUjEwX0xJTktfUkFURSkgew0KPiA+PiArwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoCBjaGFyICp0b2tlbjsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg
wqAgaW50IG5leHQgPSAwOw0KPiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8q
IEFsbG93IE1TVCByZS1kaXNjb3Zlcnkgb24gZXZlcnkgVUhCUi1yYXRlIGF0dGVtcHQuICovDQo+
ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRyYXZlcnNlZF9tc3Rfb3V0cHV0X2NvdW50ID0g
c2F2ZWRfbXN0X2NvdW50Ow0KPiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNu
cHJpbnRmKHJhdGVfc3RyLCBzaXplb2YocmF0ZV9zdHIpLCAiJWQiLCB0cnlfcmF0ZSk7DQo+ID4+
ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGk5MTVfZHBfc2V0X2xpbmtfcGFyYW1zKGRhdGEtPmRy
bV9mZCwgZGF0YS0+b3V0cHV0LA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoCByYXRlX3N0ciwgbGFuZV9hdXRvKTsNCj4gPiBsYW5lX2F1dG9bXSBv
bmx5IGV4aXN0cyBiZWNhdXNlIGk5MTVfZHBfc2V0X2xpbmtfcGFyYW1zKCkgdGFrZXMgImNoYXIN
Cj4gPiAqIiByYXRoZXIgdGhhbiAiY29uc3QgY2hhciAqIiwgc28gYSBzdHJpbmcgbGl0ZXJhbCB3
b3VsZCB3YXJuLiBSYXRoZXINCj4gPiB0aGFuIHdvcmtpbmcgYXJvdW5kIGl0IGF0IGV2ZXJ5IGNh
bGwgc2l0ZSwgcGxlYXNlIGZpeCB0aGUgaGVscGVyIGluIGENCj4gPiBzbWFsbCBwcmVwIHBhdGNo
Lg0KSSB3aWxsIGZsb2F0IGEgc2VwYXJhdGUgcGF0Y2ggZm9yIHRoaXMuDQo+ID4+ICsNCj4gPj4g
K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFzZXR1cF9vdXRwdXRzKGRhdGEsIGlzX21zdCwg
b3V0cHV0cywNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgICZvdXRwdXRfY291bnQsIG1vZGVzLCBmYnMsIHByaW1hcmllcykpIHsNCj4gPj4gK8KgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpOTE1X2RwX3Jlc2V0X2xpbmtfcGFyYW1zKGRhdGEt
PmRybV9mZCwNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqAgZGF0YS0+b3V0cHV0KTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
IH0NCj4gPj4gKw0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdXJyX2xpbmtfcmF0ZSA9
DQo+ID4+IGk5MTVfZHBfZ2V0X2N1cnJlbnRfbGlua19yYXRlKGRhdGEtPmRybV9mZCwNCj4gPj4g
K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YS0+b3V0cHV0KTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKg
wqDCoMKgwqAgaWYgKGN1cnJfbGlua19yYXRlID49IFVIQlIxMF9MSU5LX1JBVEUpIHsNCj4gPj4g
K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfaW5mbygiTGluayB0cmFpbmVkIGF0
IFVIQlIgJWQga2JwcyBvbiAlc1xuIiwNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqAgY3Vycl9saW5rX3JhdGUsDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9vdXRwdXRfbmFtZShkYXRhLT5vdXRwdXQpKTsNCj4g
Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4gPj4gK8KgwqDCoMKg
wqDCoMKgwqDCoMKgwqAgfQ0KPiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGln
dF9pbmZvKCJSYXRlICVkIG5vdCBzdXN0YWluZWQgKGdvdCAlZCBrYnBzKSBvbiAlcywNCj4gPj4g
dHJ5aW5nIG5leHQtbG93ZXIgVUhCUlxuIiwNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgIHRyeV9yYXRlLCBjdXJyX2xpbmtfcmF0ZSwNCj4gPj4gK8KgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgIGlndF9vdXRwdXRfbmFtZShkYXRhLT5vdXRwdXQpKTsNCj4gPj4g
K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2Rpc3BsYXlfcmVzZXQoJmRhdGEtPmRpc3BsYXkp
Ow0KPiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9kZWJ1Z2ZzX3JlYWRf
Y29ubmVjdG9yX2ZpbGUoZGF0YS0+ZHJtX2ZkLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9vdXRwdXRfbmFtZShkYXRhLT5v
dXRwdXQpLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgICJpOTE1X2RwX2ZvcmNlX2xpbmtfcmF0ZSIsDQo+ID4+ICvCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmLCBzaXplb2Yo
YnVmKSk7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciAodG9rZW4gPSBzdHJ0b2so
YnVmLCAiIFx0XG4iKTsgdG9rZW47DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoCB0b2tlbiA9IHN0cnRvayhOVUxMLCAiIFx0XG4iKSkgew0KPiA+PiArwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgIGludCByID0gKGludClzdHJ0b2wodG9rZW4sIE5VTEwsIDApOw0K
PiA+PiArDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIgPj0gVUhC
UjEwX0xJTktfUkFURSAmJiByIDwgdHJ5X3JhdGUgJiYgciA+DQo+ID4+ICtuZXh0KQ0KPiA+PiAr
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmV4dCA9IHI7DQo+ID4+ICvC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4gPiBBIGZldyB0aGluZ3MgYWJvdXQgdGhpcyBibG9j
azoNCj4gPg0KPiA+IChhKSBUaGUgcmV0dXJuIHZhbHVlIG9mIGlndF9kZWJ1Z2ZzX3JlYWRfY29u
bmVjdG9yX2ZpbGUoKSBpcyBkcm9wcGVkDQo+ID4gYW5kIGJ1ZltdDQo+ID4gwqAgwqAgaXMgdW5p
bml0aWFsaXNlZCwgc28gaWYgdGhlIHJlYWQgZmFpbHMgeW91IHN0cnRvaygpIG92ZXINCj4gPiB1
bmluaXRpYWxpc2VkDQo+ID4gwqAgwqAgc3RhY2suIEV2ZXJ5IG90aGVyIGNhbGxlciBpbiBsaWIv
aTkxNS9pOTE1X2RwLmMgYXNzZXJ0cyBvbiB0aGUNCj4gPiByZXN1bHQ6DQo+ID4NCj4gPiDCoCDC
oCDCoCDCoCByZXMgPSBpZ3RfZGVidWdmc19yZWFkX2Nvbm5lY3Rvcl9maWxlKC4uLik7DQo+ID4g
wqAgwqAgwqAgwqAgaWd0X2Fzc2VydF9mKHJlcyA9PSAwLCAiVW5hYmxlIHRvIHJlYWQNCj4gPiAl
cy9pOTE1X2RwX2ZvcmNlX2xpbmtfcmF0ZVxuIiwgLi4uKTsNCj4gPg0KPiA+IMKgIMKgIFBsZWFz
ZSBkbyB0aGUgc2FtZSAob3IgYmV0dGVyLCBzZWUgKGMpKS4NCj4gPg0KPiA+IChiKSBUaGUgbGlz
dCB5b3UgYXJlIHBhcnNpbmcgaXMgaW50ZWxfZHAtPnNvdXJjZV9yYXRlcyAtIHRoZSBzaG93DQo+
ID4gaGFuZGxlciBpczoNCj4gPg0KPiA+IMKgIMKgIMKgIMKgIHNlcV9wcmludGYobSwgIiVzYXV0
byVzIiwgLi4uKTsNCj4gPiDCoCDCoCDCoCDCoCBmb3IgKGkgPSAwOyBpIDwgaW50ZWxfZHAtPm51
bV9zb3VyY2VfcmF0ZXM7IGkrKykNCj4gPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZXFfcHJp
bnRmKG0sICIgJXMlZCVzJXMiLA0KPiA+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgaW50ZWxfZHAtPnNvdXJjZV9yYXRlc1tpXSA9PSBmb3JjZV9yYXRlID8NCj4gPiAi
WyIgOiAiIiwNCj4gPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlu
dGVsX2RwLT5zb3VyY2VfcmF0ZXNbaV0sDQo+ID4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqBpbnRlbF9kcC0+c291cmNlX3JhdGVzW2ldID09IGN1cnJlbnRfcmF0ZSA/
DQo+ID4gIioiIDogIiIsDQo+ID4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqBpbnRlbF9kcC0+c291cmNlX3JhdGVzW2ldID09IGZvcmNlX3JhdGUgPw0KPiA+ICJdIiA6
ICIiKTsNCj4gPg0KPiA+IMKgIMKgIGkuZS4gIlthdXRvXSAxNjIwMDAgMjE2MDAwIC4uLiA4MTAw
MDAqIDEwMDAwMDAgMTM1MDAwMCAyMDAwMDAwIiwNCj4gPiBhbmQgdGhlDQo+ID4gwqAgwqAgd3Jp
dGUgaGFuZGxlciB2YWxpZGF0ZXMgb25seSBhZ2FpbnN0IHNvdXJjZV9yYXRlcyB0b28uDQo+ID4g
VUhCUjEwLzEzLjUvMjAgYXJlDQo+ID4gwqAgwqAgYWR2ZXJ0aXNlZCBpbmRlcGVuZGVudGx5IGJ5
IHRoZSBzaW5rLCBzbyBhIHNpbmsgdGhhdCBkb2VzIFVIQlIyMA0KPiA+IGJ1dCBub3QNCj4gPiDC
oCDCoCBVSEJSMTMuNSB3aWxsIHNlbmQgeW91IHRvIDEzNTAwMDAsIHRoZSB3cml0ZSB3aWxsIHN1
Y2NlZWQsIGFuZCB5b3UNCj4gPiB3aWxsDQo+ID4gwqAgwqAgdGhlbiBxdWlldGx5IHRyYWluIGF0
IHdoYXRldmVyIHRoZSBkcml2ZXIgZmFsbHMgYmFjayB0by4gVGhlDQo+ID4gwqAgwqAgaW50ZWxf
ZHBfYWxsb3dlZF9saW5rX2NvbmZpZ3MgZGVidWdmcyBmaWxlIChzb3VyY2UgQU5EIHNpbmsgQU5E
DQo+ID4gY3VycmVudA0KPiA+IMKgIMKgIGxpbWl0cywgcHJpbnRlZCBhcyAiPGxhbmVzPng8cmF0
ZT4iKSBpcyB0aGUgcmlnaHQgc291cmNlIGZvciB0aGlzDQo+ID4gaWYgeW91DQo+ID4gwqAgwqAg
bmVlZCB0byBlbnVtZXJhdGUuDQo+ID4NCj4gPiAoYykgVGhlIHRva2VuaXNpbmcgb25seSB3b3Jr
cyBieSBhY2NpZGVudC4gImF1dG8iIC0+IHN0cnRvbCgpIHJldHVybnMNCj4gPiAwLCBhbmQgdGhl
DQo+ID4gwqAgwqAgZm9yY2VkIGVudHJ5IGlzIGJyYWNrZXRlZCAtICJbMTAwMDAwMCpdIiAtPiBz
dHJ0b2woKSBhbHNvIHJldHVybnMNCj4gPiAwLiBJdA0KPiA+IMKgIMKgIGhhcHBlbnMgbm90IHRv
IG1hdHRlciBiZWNhdXNlIGNhbmRpZGF0ZXMgbXVzdCBiZSA8IHRyeV9yYXRlLCBidXQNCj4gPiBw
bGVhc2UNCj4gPiDCoCDCoCBwYXJzZSBleHBsaWNpdGx5IChza2lwICJhdXRvIiwgc3RyaXAgJ1sn
LCAnKicsICddJykgaW5zdGVhZCBvZg0KPiA+IHJlbHlpbmcgb24NCj4gPiDCoCDCoCBzdHJ0b2wo
KSBiYWlsaW5nIG91dC4gV2hpbGUgdGhlcmU6IHVzZSBzdHJ0b2tfcigpLCBiYXNlIDEwIHJhdGhl
cg0KPiA+IHRoYW4gMCwNCj4gPiDCoCDCoCBhbmQgY2hlY2sgZW5kcHRyL2Vycm5vLg0KPiA+DQo+
ID4gwqAgwqAgR2l2ZW4gdGhlIGFtb3VudCBvZiBwYXJzaW5nLCB0aGlzIHJlYWxseSB3YW50cyB0
byBsaXZlIGluDQo+ID4gbGliL2k5MTUvaTkxNV9kcC5jDQo+ID4gwqAgwqAgbmV4dCB0byBpOTE1
X2RwX2dldF9tYXhfc3VwcG9ydGVkX3JhdGUoKSAtIHNvbWV0aGluZyBsaWtlDQo+ID4gwqAgwqAg
aTkxNV9kcF9nZXRfbmV4dF9sb3dlcl9yYXRlKGZkLCBvdXRwdXQsIHJhdGUpIC0gcmF0aGVyIHRo
YW4NCj4gPiBvcGVuLWNvZGVkIGluDQo+ID4gwqAgwqAgdGhlIHRlc3QuDQo+ID4NCihhKSBhbmQg
KGMpOiBXaWxsIGJlIGZpeGVkIGluIHRoZSBuZXh0IHJldmlzaW9uDQooYikgQWdyZWVkIOKAlCB0
aGlzIGFmZmVjdHMgZHAtZmFsbGJhY2sgYXMgd2VsbC4gV2lsbCBzd2l0Y2ggdG8gaW50ZWxfZHBf
YWxsb3dlZF9saW5rX2NvbmZpZ3MgZm9yIHJhdGUgZW51bWVyYXRpb24gaW4gYSBzZXBhcmF0ZSBm
b2xsb3ctdXAgcGF0Y2ggY292ZXJpbmcgYm90aCBzdWJ0ZXN0cy4NCg0KPiA+PiArwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoCB0cnlfcmF0ZSA9IG5leHQ7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+
ID4+ICsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChjdXJyX2xpbmtfcmF0ZSA8IFVIQlIxMF9M
SU5LX1JBVEUpIHsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2luZm8oIk91dHB1
dCAlcyBjYW5ub3Qgc3VzdGFpbiBhbnkgVUhCUiByYXRlLA0KPiA+PiBza2lwcGluZ1xuIiwNCj4g
Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9vdXRwdXRfbmFtZShkYXRh
LT5vdXRwdXQpKTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9kcF9yZXNldF9s
aW5rX3BhcmFtcyhkYXRhLT5kcm1fZmQsIGRhdGEtPm91dHB1dCk7DQo+ID4+ICvCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4gPj4g
Kw0KPiA+PiArwqDCoMKgwqDCoMKgwqAgLyogQ2xlYXIgdGhlIHBpbiBzbyB0aGUgZmFsbGJhY2sg
bG9vcCBiZWxvdyBjYW4gcmVkdWNlIHJhdGUuDQo+ID4+ICsqLw0KPiA+PiArwqDCoMKgwqDCoMKg
wqAgaTkxNV9kcF9yZXNldF9saW5rX3BhcmFtcyhkYXRhLT5kcm1fZmQsIGRhdGEtPm91dHB1dCk7
DQo+ID4gVGhpcyBkb2VzIGNvbnNpZGVyYWJseSBtb3JlIHRoYW4gImNsZWFyIHRoZSBwaW4iLiBU
aGUgd3JpdGUgaGFuZGxlciBpczoNCj4gPg0KPiA+IMKgIMKgIMKgIMKgIGludGVsX2RwX3Jlc2V0
X2xpbmtfcGFyYW1zKGludGVsX2RwKTsNCj4gPiDCoCDCoCDCoCDCoCBsaW5rX2NhcHMtPmZvcmNl
ZF9wYXJhbXMucmF0ZSA9IHJhdGU7DQo+ID4NCj4gPiBhbmQgaW50ZWxfZHBfcmVzZXRfbGlua19w
YXJhbXMoKSAtPiBpbnRlbF9kcF9saW5rX2NhcHNfcmVzZXQoKSAtPg0KPiA+IHJlc2V0X21heF9s
aW5rX2xpbWl0c19yZWVuYWJsZV9hbGwoKSwgaS5lLiBpdCByZS1lbmFibGVzICphbGwqIGxpbmsN
Cj4gPiBjb25maWdzIGFuZCB0aHJvd3MgYXdheSBhY2N1bXVsYXRlZCBmYWxsYmFjayBzdGF0ZSwg
cmlnaHQgYmVmb3JlIHlvdQ0KPiA+IHN0YXJ0IGZvcmNpbmcgZmFpbHVyZXMuDQo+ID4NCj4gPiBP
biB0aGUgaW50ZXJlc3RpbmcgcGF0aCAtIHRoZSBvbmUgd2hlcmUgdGhlIGxvb3AgYWJvdmUgaGFk
IHRvIHdhbGsNCj4gPiBkb3duIGJlY2F1c2UgdGhlIGNhYmxlIGNvdWxkIG5vdCBzdXN0YWluIHRo
ZSBzaW5rJ3MgbWF4IC0gdGhpcyBoYW5kcw0KPiA+IHRoZSBkcml2ZXIgYmFjayBleGFjdGx5IHRo
ZSByYXRlIHlvdSBqdXN0IHByb3ZlZCB1bnVzYWJsZS4gSGF2ZSB5b3UNCj4gPiBjb25maXJtZWQg
b24gcmVhbCBoYXJkd2FyZSB0aGF0IHRoZSBmaXJzdCBwb3N0LXVucGluIHJldHJhaW4gc3RlcHMN
Cj4gPiBkb3duIGZyb20gdGhlIHBpbm5lZCByYXRlIHJhdGhlciB0aGFuIHJlLXNlbGVjdGluZyB0
aGUgbWF4PyBJZiBpdA0KPiA+IHJlLXNlbGVjdHMsIGN1cnJfbGlua19yYXRlIGNhbiBjb21lIGJh
Y2sNCj4gPiAqaGlnaGVyKg0KPiA+IHRoYW4gcHJldl9saW5rX3JhdGUgYW5kIHRoZSBleGlzdGlu
ZyBpZ3RfYXNzZXJ0X2YoIkZhbGxiYWNrDQo+ID4gdW5zdWNjZXNzZnVsIikNCj4gPiBiZWxvdyB3
aWxsIGZpcmUuDQo+ID4NCj4gPiBSZWxhdGVkOiBtYXhfbGlua19yYXRlIGlzIG5vdyByZWFkIGFm
dGVyIHRoaXMgcmVzZXQsIHNvIGl0IGlzIHRoZSBmdWxsDQo+ID4gc291cmNlL3NpbmsgbWF4IHJh
dGhlciB0aGFuIHRoZSByYXRlIHlvdSBwaW5uZWQuIFRoZSAiY3Vycl9saW5rX3JhdGUNCj4gPiA9
PSBtYXhfbGlua19yYXRlICYmIC4uLiAmJiAtLXJldHJpZXMiIHNwdXJpb3VzLUhQRCBlc2NhcGUg
dGhlcmVmb3JlDQo+ID4gY2FuIG5ldmVyIHRyaWdnZXIgb24gdGhpcyBwYXRoLiBOb3QgbmVjZXNz
YXJpbHkgd3JvbmcsIGJ1dCBpdCBpcyBhDQo+ID4gYmVoYXZpb3VyYWwgZGlmZmVyZW5jZSBmcm9t
IGRwLWZhbGxiYWNrIHRoYXQgaXMgd29ydGggYSBjb21tZW50Lg0KPiA+DQpDb25maXJtZWQgb24g
cmVhbCBoYXJkd2FyZSAoVUhCUjEwIHBhbmVsKTogdGhlIGZpcnN0IHBvc3QtdW5waW4gcmV0cmFp
biBzdGVwcyBkb3duIGNvcnJlY3RseSB0byBIQlIzLiBUaGUgcmUtZW5hYmxlcy1hbGwgYmVoYXZp
b3IgYW5kIHRoZSBzcHVyaW91cy1IUEQgDQplc2NhcGUgZGlmZmVyZW5jZSBhcmUgbm93IGRvY3Vt
ZW50ZWQgaW4gYSBjb21tZW50LiBUaGUgY2FzZSB3aGVyZSB0aGUgcGluLWRvd24gbG9vcCBhY3R1
YWxseSB3YWxrZWQgKFVIQlIxMy41LzIwIHBhbmVsLCBjYWJsZSBvbmx5IHN1c3RhaW5zIFVIQlIx
MCkgaXMgdGhlb3JldGljYWxseSBhIHJpc2sgDQpJIHdpbGwgcmV2aXNpdCBvbmNlIHN1Y2ggaGFy
ZHdhcmUgaXMgYXZhaWxhYmxlLCBwb3NzaWJseSBieSBkb2luZyBhIHNldHVwX291dHB1dHMoKSBh
ZnRlciB0aGUgY2xlYXItdGhlLXBpbiByZXNldCB0byBsZXQgdGhlIGRyaXZlciBzZXR0bGUgYmVm
b3JlIHJlYWRpbmcgcHJldl9saW5rX3JhdGUuDQoNCj4gPj4gK8KgwqDCoCB9IGVsc2Ugew0KPiA+
PiArwqDCoMKgwqDCoMKgwqAgaTkxNV9kcF9yZXNldF9saW5rX3BhcmFtcyhkYXRhLT5kcm1fZmQs
IGRhdGEtPm91dHB1dCk7DQo+ID4+ICsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghc2V0dXBf
b3V0cHV0cyhkYXRhLCBpc19tc3QsIG91dHB1dHMsDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqAgJm91dHB1dF9jb3VudCwgbW9kZXMsIGZicywNCj4gPj4gK8KgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcmltYXJpZXMpKQ0KPiA+PiArwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7DQo+ID4+ICvCoMKgwqAgfQ0KPiA+PiDCoMKg
wqDCoMKgIG1heF9saW5rX3JhdGUgPSBpOTE1X2RwX2dldF9tYXhfbGlua19yYXRlKGRhdGEtPmRy
bV9mZCwNCj4gPj4gZGF0YS0+b3V0cHV0KTsNCj4gPj4gwqDCoMKgwqDCoCBtYXhfbGFuZV9jb3Vu
dCA9IGk5MTVfZHBfZ2V0X21heF9sYW5lX2NvdW50KGRhdGEtPmRybV9mZCwNCj4gPj4gZGF0YS0+
b3V0cHV0KTsNCj4gPj4gwqDCoMKgwqDCoCBwcmV2X2xpbmtfcmF0ZSA9IGk5MTVfZHBfZ2V0X2N1
cnJlbnRfbGlua19yYXRlKGRhdGEtPmRybV9mZCwNCj4gPj4gZGF0YS0+b3V0cHV0KTsNCj4gPj4g
QEAgLTM5MCw3ICs0ODUsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2ZhbGxiYWNrKGRhdGFfdCAqZGF0
YSwgYm9vbA0KPiA+PiBpc19tc3QpDQo+ID4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaTkxNV9k
cF9nZXRfbGlua19yZXRyYWluX2Rpc2FibGVkKGRhdGEtPmRybV9mZCwNCj4gPj4gwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0
YS0+b3V0cHV0KSkgew0KPiA+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfcmVzZXRf
Y29ubmVjdG9ycygpOw0KPiA+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm47DQo+ID4+
ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsNCj4gPj4gwqDCoMKgwqDCoMKg
wqDCoMKgIH0NCj4gPj4gaWd0X2Fzc2VydF9mKHdhaXRfZm9yX2hvdHBsdWdfYW5kX2NoZWNrX2Jh
ZChkYXRhLT5kcm1fZmQsDQo+ID4+IEBAIC00MjEsOSArNTE2LDMyIEBAIHN0YXRpYyB2b2lkIHRl
c3RfZmFsbGJhY2soZGF0YV90ICpkYXRhLCBib29sDQo+ID4+IGlzX21zdCkNCj4gPj4gwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgoY3Vycl9saW5rX3JhdGUgPT0gbWF4X2xp
bmtfcmF0ZSAmJg0KPiA+PiBjdXJyX2xhbmVfY291bnQgPT0gbWF4X2xhbmVfY291bnQpICYmIC0t
cmV0cmllcyksDQo+ID4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRmFs
bGJhY2sgdW5zdWNjZXNzZnVsXG4iKTsNCj4gPj4gwqAgK8KgwqDCoMKgwqDCoMKgIC8qDQo+ID4+
ICvCoMKgwqDCoMKgwqDCoMKgICogVGhpcyBzdWJ0ZXN0IG9ubHkgY2FyZXMgYWJvdXQgdGhlIHNp
bmdsZSBVSEJSIC0+IEhCUg0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHRyYW5zaXRpb24gKDEy
OGIvMTMyYiB0byA4Yi8xMGIgZW5jb2RpbmcpLiBTdG9wIGFzIHNvb24NCj4gPj4gK2FzDQo+ID4+
ICvCoMKgwqDCoMKgwqDCoMKgICogd2UndmUgZHJvcHBlZCBiZWxvdyBVSEJSMTAsIGluc3RlYWQg
b2YgY2FzY2FkaW5nIGFsbCB0aGUNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiB3YXkgZG93biB0
aHJvdWdoIHRoZSBsZWdhY3kgSEJSL0hCUjIvSEJSMyByYXRlcywgd2hpY2ggaXMNCj4gPj4gK8Kg
wqDCoMKgwqDCoMKgwqAgKiBhbHJlYWR5IGNvdmVyZWQgYnkgZHAtZmFsbGJhY2suDQo+ID4+ICvC
oMKgwqDCoMKgwqDCoMKgICovDQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZm9yY2VfdWhiciAm
JiBjdXJyX2xpbmtfcmF0ZSA8IFVIQlIxMF9MSU5LX1JBVEUpIHsNCj4gPj4gK8KgwqDCoMKgwqDC
oMKgwqDCoMKgwqAgaWd0X2luZm8oIlVIQlIgdG8gSEJSIGZhbGxiYWNrIGNvbmZpcm1lZCBvbiAl
czogJWQga2Jwcw0KPiA+PiAtPiAlZCBrYnBzXG4iLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqAgaWd0X291dHB1dF9uYW1lKGRhdGEtPm91dHB1dCksDQo+ID4+ICvCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcmV2X2xpbmtfcmF0ZSwgY3Vycl9saW5rX3Jh
dGUpOw0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHJ1ZTsNCj4gPj4gK8Kg
wqDCoMKgwqDCoMKgIH0NCj4gPiBUaGlzIGVhcmx5IHJldHVybiBsZWF2ZXMgdGhlIGxpbmsgaW4g
dGhlIHJlZHVjZWQgc3RhdGUgYW5kIHNraXBzIHRoZQ0KPiA+IGlndF9yZXNldF9jb25uZWN0b3Jz
KCkgdGhhdCB0aGUgcmV0cmFpbi1kaXNhYmxlZCBwYXRoIGRvZXMuIENvbWJpbmVkDQo+ID4gd2l0
aCBbWF0gaW4gbXkgY29tbWVudCBvbiB0aGUgbWF4X2xpbmtfcmF0ZSByZWFkLCB0aGF0IGlzIHdo
YXQgbWFrZXMNCj4gPiB0aGUgbmV4dCBvdXRwdXQgb24gdGhlIHNhbWUgaW50ZWxfZHAgbWlzLWRl
dGVjdCBpdHMgVUhCUiBjYXBhYmlsaXR5Lg0KPiA+IFJlc2V0dGluZyB0aGUgbGluayBwYXJhbXMg
YmVmb3JlIHJldHVybmluZyB3b3VsZCBtYWtlIGVhY2ggb3V0cHV0J3MNCj4gPiBydW4gc2VsZi1j
b250YWluZWQuDQpGaXhlZCBpbiB0aGUgbmV4dCByZXZpc2lvbiDigJQgaTkxNV9kcF9yZXNldF9s
aW5rX3BhcmFtcygpIGFuZCBpZ3RfcmVzZXRfY29ubmVjdG9ycygpIGFyZSBub3cgY2FsbGVkIG9u
IGFsbCBlYXJseS1yZXR1cm4gcGF0aHMgaW4gdGhlIHBpbiBsb29wLCBtYWtpbmcgZWFjaCBvdXRw
dXQncyBydW4gc2VsZi1jb250YWluZWQuDQo+ID4+ICsNCj4gPj4gwqDCoMKgwqDCoMKgwqDCoMKg
IHByZXZfbGlua19yYXRlID0gY3Vycl9saW5rX3JhdGU7DQo+ID4+IMKgwqDCoMKgwqDCoMKgwqDC
oCBwcmV2X2xhbmVfY291bnQgPSBjdXJyX2xhbmVfY291bnQ7DQo+ID4+IMKgwqDCoMKgwqAgfQ0K
PiA+PiArDQo+ID4+ICvCoMKgwqAgLyogZm9yY2VfdWhicjogZmFsbGJhY2sgbm90IGNvbmZpcm1l
ZCwgZG9uJ3QgY291bnQgdGhpcyBydW4uICovDQo+ID4+ICvCoMKgwqAgaWYgKGZvcmNlX3VoYnIp
IHsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJVSEJSIHRvIEhCUiBmYWxsYmFjayBu
b3QgcmVhY2hlZCBvbiAlcyhsYXN0IGxpbmsNCj4gPj4gcmF0ZSAlZCBrYnBzKVxuIiwNCj4gPj4g
K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfb3V0cHV0X25hbWUoZGF0YS0+b3V0cHV0KSxw
cmV2X2xpbmtfcmF0ZSk7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7DQo+ID4+
ICvCoMKgwqAgfQ0KPiA+ICJjYXBhYmxlIG91dHB1dCwgdHJhaW5lZCBhdCBVSEJSLA0KPiA+IGZv
cmNlZCBmYWlsdXJlcyB1bnRpbCByZXRyYWluIHdhcyBkaXNhYmxlZCwgYW5kIGl0IG5ldmVyIGRy
b3BwZWQgYmVsb3cNCj4gPiBVSEJSMTAiDQo+ID4gaXMgYSBmYWlsdXJlLCBub3QgYSBza2lwLiBB
cyB3cml0dGVuIGl0IHJldHVybnMgZmFsc2UsIHJ1bl8qKCkgbGVhdmVzDQo+ID4gcmFuID09IGZh
bHNlLCBhbmQgaWd0X3JlcXVpcmVfZigpIHR1cm5zIHRoZSB3aG9sZSB0aGluZyBpbnRvIFNLSVAu
DQo+ID4NCj4gPiBQbGVhc2Ugc2VwYXJhdGUgdGhlIHR3byB2ZXJkaWN0cy4gS2VlcCAicmV0dXJu
IGZhbHNlIiBmb3IgdGhlDQo+ID4gZ2VudWluZWx5IHNraXBwYWJsZSBjYXNlcyAobm8gVUhCUiBz
dXBwb3J0LCBvdXRwdXQgYWxyZWFkeSBjb3ZlcmVkIGFzDQo+ID4gYW4gTVNUIHNpYmxpbmcsDQo+
ID4gc2V0dXBfb3V0cHV0cygpIGJhaWxlZCksIGFuZCBtYWtlIHRoaXMgb25lIGZhaWwuIFJlcGxh
Y2luZyB0aGUgd2hvbGUNCj4gPiBpZi1ibG9jayB3aXRoIGFuIHVuY29uZGl0aW9uYWwgYXNzZXJ0
IG9uIHRoZSB3YXkgb3V0IG9mIHRoZSBsb29wIHJlYWRzDQo+ID4gd2VsbDoNCldpbGwgYmUgRml4
ZWQgaW4gdGhlIG5leHQgcmV2aXNpb24g4oCUIHRoZSAiZmFsbGJhY2sgbm90IHJlYWNoZWQiIHBh
dGggbm93IHVzZXMgaWd0X2Fzc2VydF9mKCFmb3JjZV91aGJyLCAuLi4pIHNvIGl0IGhhcmQtZmFp
bHMgZm9yIHVoYnItdG8taGJyLWZhbGxiYWNrIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlIGFu
ZCBzaWxlbnRseSBiZWNvbWluZyBhIFNLSVAuDQogVGhlIGdlbnVpbmVseSBza2lwcGFibGUgY2Fz
ZXMgKG5vIFVIQlIgc3VwcG9ydCwgTVNUIHNpYmxpbmcgYWxyZWFkeSBjb3ZlcmVkLCBzZXR1cF9v
dXRwdXRzKCkgZmFpbGVkKSBzdGlsbCByZXR1cm4gZmFsc2UuDQo+ID4+ICsNCj4gPj4gK8KgwqDC
oCByZXR1cm4gdHJ1ZTsNCj4gPj4gwqAgfQ0KPiA+PiDCoCDCoCBzdGF0aWMgYm9vbCBydW5fbHRf
ZmFsbGJhY2tfdGVzdChkYXRhX3QgKmRhdGEpIEBAIC00MzEsNiArNTQ5LDgNCj4gPj4gQEAgc3Rh
dGljIGJvb2wgcnVuX2x0X2ZhbGxiYWNrX3Rlc3QoZGF0YV90ICpkYXRhKQ0KPiA+PiDCoMKgwqDC
oMKgIGJvb2wgcmFuID0gZmFsc2U7DQo+ID4+IMKgwqDCoMKgwqAgaWd0X291dHB1dF90ICpvdXRw
dXQ7DQo+ID4+IMKgICvCoMKgwqAgdHJhdmVyc2VkX21zdF9vdXRwdXRfY291bnQgPSAwOw0KPiA+
PiArDQo+ID4gdHJhdmVyc2VkX21zdF9vdXRwdXRfY291bnQgaXMgZmlsZS1zdGF0aWMgYW5kIG5l
dmVyIHJlc2V0LCBzbyBhDQo+ID4gZnVsbC1iaW5hcnkgcnVuIGxlYWtzIE1TVCB0cmF2ZXJzYWwg
c3RhdGUgYmV0d2VlbiBzdWJ0ZXN0cyAtIGJ1dCBpdCBpcw0KPiA+IGluZGVwZW5kZW50IG9mIHRo
ZSBuZXcgc3VidGVzdC4gUGxlYXNlIHNwbGl0IGl0IG91dCBhcyBhIHByZXAgcGF0Y2gNCj4gPiB3
aXRoIGl0cyBvd24ganVzdGlmaWNhdGlvbi4NCldpbGwgc3BsaXQgdGhpcyBpbnRvIGEgc2VwYXJh
dGUgcHJlcCBwYXRjaC4gVGhlIGZpeCB3aWxsIHJlc2V0IHRyYXZlcnNlZF9tc3Rfb3V0cHV0X2Nv
dW50IGF0IHRoZSB0b3Agb2YgZWFjaCBydW5fKiBlbnRyeSBwb2ludCANCnNvIE1TVCB0cmF2ZXJz
YWwgc3RhdGUgbmV2ZXIgbGVha3MgYmV0d2VlbiBzdWJ0ZXN0cyBpbiBhIGZ1bGwtYmluYXJ5IHJ1
bi4NCg0KPiA+PiBmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRw
dXQpIHsNCj4gPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGEtPm91dHB1dCA9IG91dHB1dDsNCj4g
Pj4gwqAgQEAgLTQ1NCwxMSArNTc0LDExIEBAIHN0YXRpYyBib29sIHJ1bl9sdF9mYWxsYmFja190
ZXN0KGRhdGFfdA0KPiA+PiAqZGF0YSkNCj4gPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChpZ3Rf
Y2hlY2tfb3V0cHV0X2lzX2RwX21zdChkYXRhLT5vdXRwdXQpKSB7DQo+ID4+IMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJUZXN0aW5nIE1TVCBvdXRwdXQgJXNcbiIsDQo+ID4+
IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfb3V0cHV0X25hbWUoZGF0
YS0+b3V0cHV0KSk7DQo+ID4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRlc3RfZmFsbGJhY2so
ZGF0YSwgdHJ1ZSk7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRlc3RfZmFsbGJhY2so
ZGF0YSwgdHJ1ZSwgZmFsc2UpOw0KPiA+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsNCj4g
Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2luZm8oIlRlc3RpbmcgRFAgb3V0cHV0
ICVzXG4iLA0KPiA+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X291
dHB1dF9uYW1lKGRhdGEtPm91dHB1dCkpOw0KPiA+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0
ZXN0X2ZhbGxiYWNrKGRhdGEsIGZhbHNlKTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg
dGVzdF9mYWxsYmFjayhkYXRhLCBmYWxzZSwgZmFsc2UpOw0KPiA+PiDCoMKgwqDCoMKgwqDCoMKg
wqAgfQ0KPiA+PiDCoMKgwqDCoMKgIH0NCj4gPj4gwqDCoMKgwqDCoCByZXR1cm4gcmFuOw0KPiA+
PiBAQCAtNTc0LDExICs2OTQsNjMgQEAgc3RhdGljIHZvaWQgdGVzdF9kc2Nfc3N0X2ZhbGxiYWNr
KGRhdGFfdCAqZGF0YSkNCj4gPj4gwqDCoMKgwqDCoCBpZ3RfYXNzZXJ0X2YoZHNjX2ZhbGxiYWNr
X3N1Y2Nlc3NmdWwsICJEU0MgZmFsbGJhY2sNCj4gPj4gdW5zdWNjZXNzZnVsXG4iKTsNCj4gPj4g
wqAgfQ0KPiA+PiDCoCArc3RhdGljIGJvb2wgcnVuX3VoYnJfdG9faGJyX2ZhbGxiYWNrX3Rlc3Qo
ZGF0YV90ICpkYXRhKQ0KPiA+PiArew0KPiA+PiArwqDCoMKgIGJvb2wgcmFuID0gZmFsc2U7DQo+
ID4+ICvCoMKgwqAgaWd0X291dHB1dF90ICpvdXRwdXQ7DQo+ID4+ICsNCj4gPj4gK8KgwqDCoCB0
cmF2ZXJzZWRfbXN0X291dHB1dF9jb3VudCA9IDA7DQo+ID4+ICsNCj4gPj4gK8KgwqDCoCBmb3Jf
ZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsNCj4gPj4gK8Kg
wqDCoMKgwqDCoMKgIGRhdGEtPm91dHB1dCA9IG91dHB1dDsNCj4gPj4gKw0KPiA+PiArwqDCoMKg
wqDCoMKgwqAgaWYNCj4gPj4gKCFpOTE1X2RwX2hhc19mb3JjZV9saW5rX3RyYWluaW5nX2ZhaWx1
cmVfZGVidWdmcyhkYXRhLT5kcm1fZmQsDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YS0+b3V0
cHV0KSkgew0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfaW5mbygiT3V0cHV0ICVz
IGRvZXNuJ3Qgc3VwcG9ydCBmb3JjaW5nIGxpbmsNCj4gPj4gdHJhaW5pbmcgZmFpbHVyZVxuIiwN
Cj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9vdXRwdXRfbmFtZShk
YXRhLT5vdXRwdXQpKTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7DQo+
ID4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+ID4+ICsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChv
dXRwdXQtPmNvbmZpZy5jb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9DQo+ID4+IERSTV9NT0RF
X0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgew0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp
Z3RfaW5mbygiU2tpcHBpbmcgb3V0cHV0ICVzIGFzIGl0J3Mgbm90IERQXG4iLA0KPiA+PiBvdXRw
dXQtPm5hbWUpOw0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsNCj4gPj4g
K8KgwqDCoMKgwqDCoMKgIH0NCj4gPj4gKw0KPiA+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGk5MTVf
ZHBfZ2V0X21heF9zdXBwb3J0ZWRfcmF0ZShkYXRhLT5kcm1fZmQsDQo+ID4+IGRhdGEtPm91dHB1
dCkgPCBVSEJSMTBfTElOS19SQVRFKSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGln
dF9pbmZvKCJTa2lwcGluZyBvdXRwdXQgJXM6IGRvZXMgbm90IHN1cHBvcnQgVUhCUlxuIiwNCj4g
Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9vdXRwdXRfbmFtZShkYXRh
LT5vdXRwdXQpKTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7DQo+ID4+
ICvCoMKgwqDCoMKgwqDCoCB9DQo+ID4gVGhpcyBnYXRlIHVzZXMgaTkxNV9kcF9nZXRfbWF4X3N1
cHBvcnRlZF9yYXRlKCkgKHNvdXJjZSByYXRlcykgd2hpbGUNCj4gPiB0ZXN0X2ZhbGxiYWNrKCkg
Z2F0ZXMgb24gaTkxNV9kcF9nZXRfbWF4X2xpbmtfcmF0ZSgpIChjdXJyZW50bHkNCj4gPiBhbGxv
d2VkIG1heCksIHNvIHRoZSB0d28gZGlzYWdyZWUgYW5kIGFuIG91dHB1dCBjYW4gYmUgIlVIQlIg
Y2FwYWJsZSINCj4gPiBoZXJlIGFuZCAibm90IFVIQlIgY2FwYWJsZSIgZmlmdGVlbiBsaW5lcyBs
YXRlci4gUGljayBvbmUgLSBJIHdvdWxkDQo+ID4gZ2F0ZSBoZXJlIG9uDQo+ID4gaTkxNV9kcF9n
ZXRfbWF4X2xpbmtfcmF0ZSgpIGFmdGVyIGEgcmVzZXQsIGFuZCBkcm9wIHRoZSBkdXBsaWNhdGUN
Cj4gPiBjaGVjayBpbnNpZGUgdGVzdF9mYWxsYmFjaygpLCBzbyB0aGVyZSBpcyBleGFjdGx5IG9u
ZSBza2lwIHJlYXNvbiBhbmQNCj4gPiBvbmUgbWVzc2FnZS4NCj4gPg0KV2lsbCBjb25zb2xpZGF0
ZSBpbnRvIGEgc2luZ2xlIGdhdGUgaW4gdGhlIG5leHQgcmV2aXNpb24NCj4gPj4gKw0KPiA+PiAr
wqDCoMKgwqDCoMKgwqAgLyoNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBNU1Qgc2libGluZ3Mg
c2hhcmUgdGhlIHNhbWUgcGh5c2ljYWwgRFAgbGluaywgc28NCj4gPj4gK1VIQlItPkhCUg0KPiA+
PiArwqDCoMKgwqDCoMKgwqDCoCAqIGZhbGxiYWNrIGFwcGxpZXMgdG8gTVNUIHRvby4gUmV1c2Ug
dGhlIHNhbWUgaXNfbXN0DQo+ID4+ICticmFuY2hpbmcNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqAg
KiBhcyBkcC1mYWxsYmFjayBzbyB0aGUgd2hvbGUgdG9wb2xvZ3kgaXMgZHJpdmVuIHdoaWxlIHRo
ZQ0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHNoYXJlZCBsaW5rIGlzIHJldHJhaW5lZC4NCj4g
Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8NCj4gPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChpZ3RfY2hl
Y2tfb3V0cHV0X2lzX2RwX21zdChkYXRhLT5vdXRwdXQpKSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgIGlndF9pbmZvKCJUZXN0aW5nIFVIQlItdG8tSEJSIGZhbGxiYWNrIG9uIE1TVCBv
dXRwdXQNCj4gPj4gKyVzXG4iLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqAgaWd0X291dHB1dF9uYW1lKGRhdGEtPm91dHB1dCkpOw0KPiA+PiArwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoCBpZiAodGVzdF9mYWxsYmFjayhkYXRhLCB0cnVlLCB0cnVlKSkNCj4gPj4gK8KgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYW4gPSB0cnVlOw0KPiA+PiArwqDCoMKgwqDCoMKg
wqAgfSBlbHNlIHsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2luZm8oIlRlc3Rp
bmcgVUhCUi10by1IQlIgZmFsbGJhY2sgb24gRFAgb3V0cHV0DQo+ID4+ICslc1xuIiwNCj4gPj4g
K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9vdXRwdXRfbmFtZShkYXRhLT5v
dXRwdXQpKTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHRlc3RfZmFsbGJhY2so
ZGF0YSwgZmFsc2UsIHRydWUpKQ0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
IHJhbiA9IHRydWU7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+ID4+ICvCoMKgwqAgfQ0KPiA+
PiArDQo+ID4+ICvCoMKgwqAgcmV0dXJuIHJhbjsNCj4gPj4gK30NCj4gPiBUaGlzIGZ1bmN0aW9u
IGlzIHJ1bl9sdF9mYWxsYmFja190ZXN0KCkgd2l0aCBvbmUgZXh0cmEgZ2F0ZSBhbmQgYQ0KPiA+
IHJldHVybiB2YWx1ZS4NCj4gPiB+NDUgZHVwbGljYXRlZCBsaW5lcyBpcyBhIGxvdCB0byBtYWlu
dGFpbiBpbiBwYXJhbGxlbCAtIHRoZSBuZXh0DQo+ID4gcGVyc29uIHRvIGZpeCB0aGUgb3V0cHV0
LWl0ZXJhdGlvbiBsb2dpYyB3aWxsIGZpeCBvbmUgY29weSBhbmQgbm90IHRoZQ0KPiA+IG90aGVy
LiBTaW5jZSB5b3UgYWxyZWFkeSB0aHJlYWRlZCBmb3JjZV91aGJyIHRocm91Z2ggdGVzdF9mYWxs
YmFjaygpLA0KPiA+IHBsZWFzZSBkbyB0aGUgc2FtZSBoZXJlLg0KPiA+DQpJIGhhdmUgdGhpcyBp
biBjb25zaWRlcmF0aW9uLCBidXQgSSB0aG91Z2h0IG5vdCB0byBkaXN0dXJiIHRoZSBkcC1mYWxs
YmFjayBzdWJ0ZXN0Lg0KV2lsbCBtZXJnZSBpbiB0aGUgbmV4dCByZXZpc2lvbiDigJQgcnVuX3Vo
YnJfdG9faGJyX2ZhbGxiYWNrX3Rlc3QoKSBpcyByZW1vdmVkIGFuZCANCml0cyBsb2dpYyBmb2xk
ZWQgaW50byBydW5fbHRfZmFsbGJhY2tfdGVzdCgpICB2aWEgYSBib29sIGZvcmNlX3VoYnIgcGFy
YW1ldGVyLCANCnRoZSBzYW1lIHdheSB0ZXN0X2ZhbGxiYWNrKCkgYWxyZWFkeSBoYW5kbGVzIGl0
LiBCb3RoIHN1YnRlc3RzIGNhbGwgdGhlIHNhbWUgZnVuY3Rpb24sDQplbGltaW5hdGluZyB0aGUg
fjQ1IGR1cGxpY2F0ZWQgbGluZXMuDQo+ID4+ICsNCj4gPj4gwqAgc3RhdGljIGJvb2wgcnVuX2Rz
Y19zc3RfZmFsbGFiYWNrX3Rlc3QoZGF0YV90ICpkYXRhKQ0KPiA+PiDCoCB7DQo+ID4+IMKgwqDC
oMKgwqAgYm9vbCByYW4gPSBmYWxzZTsNCj4gPj4gwqDCoMKgwqDCoCBpZ3Rfb3V0cHV0X3QgKm91
dHB1dDsNCj4gPj4gwqAgK8KgwqDCoCB0cmF2ZXJzZWRfbXN0X291dHB1dF9jb3VudCA9IDA7DQo+
ID4+ICsNCj4gPiBVbnJlbGF0ZWQgYW5kIGRlYWQ6IHRoZSBEU0MgcGF0aCBuZXZlciByZWFjaGVz
IHNldHVwX21zdF9vdXRwdXRzKCksIHNvDQo+ID4gdHJhdmVyc2VkX21zdF9vdXRwdXRfY291bnQg
aXMgbm90IGNvbnN1bHRlZCBhbnl3aGVyZSBiZWxvdyB0aGlzIGxpbmUuDQo+ID4gUGxlYXNlIGRy
b3AgaXQsIG9yIGlmIGl0IGlzIGRlZmVuc2l2ZSwgc2F5IHNvIGluIGEgY29tbWVudC4NCj4gPg0K
PiA+IFRoYW5rcyBhbmQgUmVnYXJkcw0KPiA+IEt1bmFsIEpvc2hpDQpXaWxsIGRyb3AgaXQgaW4g
dGhlIG5leHQgcmV2aXNpb24NCg0KVGhhbmtzLA0KU293bWl5YSBTLg0KPiA+PiDCoMKgwqDCoMKg
IGlmICghaXNfZHNjX3N1cHBvcnRlZF9ieV9zb3VyY2UoZGF0YS0+ZHJtX2ZkKSkgew0KPiA+PiDC
oMKgwqDCoMKgwqDCoMKgwqAgaWd0X2luZm8oIkRTQyBub3Qgc3VwcG9ydGVkIGJ5IHNvdXJjZS5c
biIpOw0KPiA+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJhbjsNCj4gPj4gQEAgLTY0Niw2
ICs4MTgsMTEgQEAgaW50IGlndF9tYWluKCkNCj4gPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqAgIlNraXBwaW5nIHRlc3QgYXMgRFNDIGZhbGxiYWNrIGNvbmRpdGlvbnMg
bm90DQo+ID4+IG1ldC5cbiIpOw0KPiA+PiDCoMKgwqDCoMKgIH0NCj4gPj4gwqAgK8KgwqDCoCBp
Z3Rfc3VidGVzdCgidWhici10by1oYnItZmFsbGJhY2siKSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDC
oCBpZ3RfcmVxdWlyZV9mKHJ1bl91aGJyX3RvX2hicl9mYWxsYmFja190ZXN0KCZkYXRhKSwNCj4g
Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlNraXBwaW5nIHRlc3Q6IG5v
IFVIQlItY2FwYWJsZSBEUCBvdXRwdXQgZm91bmQgb3INCj4gPj4gZmFsbGJhY2sgbm90IHJlYWNo
ZWRcbiIpOw0KPiA+PiArwqDCoMKgIH0NCj4gPj4gKw0KPiA+PiDCoMKgwqDCoMKgIGlndF9maXh0
dXJlKCkgew0KPiA+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3JlbW92ZV9mYihkYXRhLmRybV9m
ZCwgJmRhdGEuZmIpOw0KPiA+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X2Rpc3BsYXlfZmluaSgm
ZGF0YS5kaXNwbGF5KTsNCg==