RE: [RFC PATCH] NEW: pile stack and mempool driver

Morten Brørup <[email protected]> Sat, 1 Aug 2026 10:10:25 +0200
Newsgroups org.dpdk.dev
Message-ID <[email protected]>
UExFQVNFIElHTk9SRS4NCihSZXNlbnQgZHVlIHRvIGludGVybmFsIG1haWwgcHJvYmxlbXMuKQ0K
DQpWZW5saWcgaGlsc2VuIC8gS2luZCByZWdhcmRzLA0KLU1vcnRlbiBCcsO4cnVwDQoNCg0KPiAt
LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNb3J0ZW4gQnLDuHJ1cCBbbWFpbHRv
Om1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbV0NCj4gU2VudDogRnJpZGF5LCAzMSBKdWx5IDIwMjYg
MjAuMDINCj4gVG86IGRldkBkcGRrLm9yZw0KPiBDYzogTW9ydGVuIEJyw7hydXANCj4gU3ViamVj
dDogW1JGQyBQQVRDSF0gTkVXOiBwaWxlIHN0YWNrIGFuZCBtZW1wb29sIGRyaXZlcg0KPiANCj4g
RWFybHkgc3VibWlzc2lvbiBvZjoNCj4gLSBzb21lIG1lbXBvb2wgb3B0aW1pemF0aW9ucywNCj4g
LSBhIG5ldyBtZW1wb29sICJwaWxlIiBkcml2ZXIsIGFuZA0KPiAtIGl0cyB1bmRlcmx5aW5nICJw
aWxlIiBzdGFjayBpbXBsZW1lbnRhdGlvbi4NCj4gDQo+IEZvciBjb21tdW5pdHkgZmVlZGJhY2sg
YW5kIENJIHRlc3QuDQo+IA0KPiBOZWVkbGVzcyB0byBzYXksIHRoaXMgbXVzdCBiZSBzZXBhcmF0
ZWQgaW50byBhIHNlcmllcyBvZiBwYXRjaGVzLg0KPiBGb3Igbm93LCBJJ20gc3VibWl0dGluZyBh
IHNuYXBzaG90IG9mIHdvcmsgaW4gcHJvZ3Jlc3MuDQo+IA0KPiBTb21lIHBlcmZvcm1hbmNlIG51
bWJlcnMgZnJvbSBtZW1wb29sX3BlcmZfYXV0b3Rlc3RfMmNvcmVzLCBhbGwNCj4gd2l0aCBjYWNo
ZT0xMDI0IGNvcmVzPTIgbl9rZWVwPTMyNzY4Og0KPiANCj4gc3RhcnQgcGVyZm9ybWFuY2UgdGVz
dCAodXNpbmcgcmluZ19tcF9tYywgd2l0aCBjYWNoZSkNCj4gbl9nZXRfYnVsaz0gNjQgbl9wdXRf
YnVsaz0gNjQgY29uc3RhbnRfbj0wIHJhdGVfcGVyc2VjPSA3NTM5ODUzMzgNCj4gbl9nZXRfYnVs
az0yNTYgbl9wdXRfYnVsaz0yNTYgY29uc3RhbnRfbj0wIHJhdGVfcGVyc2VjPSA3NTU4MDU5MTMN
Cj4gDQo+IHN0YXJ0IHBlcmZvcm1hbmNlIHRlc3QgZm9yIGxmX3N0YWNrICh3aXRoIGNhY2hlKQ0K
PiBuX2dldF9idWxrPSA2NCBuX3B1dF9idWxrPSA2NCBjb25zdGFudF9uPTAgcmF0ZV9wZXJzZWM9
ICAyOTEzMjM1Mg0KPiBuX2dldF9idWxrPTI1NiBuX3B1dF9idWxrPTI1NiBjb25zdGFudF9uPTAg
cmF0ZV9wZXJzZWM9ICAyOTI3NjcwOA0KPiANCj4gc3RhcnQgcGVyZm9ybWFuY2UgdGVzdCBmb3Ig
cGlsZSAod2l0aCBjYWNoZSkNCj4gbl9nZXRfYnVsaz0gNjQgbl9wdXRfYnVsaz0gNjQgY29uc3Rh
bnRfbj0wIHJhdGVfcGVyc2VjPSA1NjAxNTk0NzkNCj4gbl9nZXRfYnVsaz0yNTYgbl9wdXRfYnVs
az0yNTYgY29uc3RhbnRfbj0wIHJhdGVfcGVyc2VjPSA1NTc5MTA5MzMNCj4gDQo+IEhhdCB0aXAg
dG8gQnJ1Y2UgZm9yIGJyaW5naW5nIGF0dGVudGlvbiB0byB0aGUgcmluZyBub3QgYmVpbmcgdGhl
DQo+IG9wdGltYWwgbWVtcG9vbCBkcml2ZXIuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBNb3J0ZW4g
QnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3RlbXMuY29tPg0KPiAtLS0NCj4gIGFwcC90ZXN0L3Rl
c3RfbWVtcG9vbC5jICAgICAgICAgICAgICAgICAgIHwgICAzICstDQo+ICBhcHAvdGVzdC90ZXN0
X3N0YWNrLmMgICAgICAgICAgICAgICAgICAgICB8ICA3MCArKysrLQ0KPiAgYXBwL3Rlc3QvdGVz
dF9zdGFja19wZXJmLmMgICAgICAgICAgICAgICAgfCAgMTUgKy0NCj4gIGNvbmZpZy9ydGVfY29u
ZmlnLmggICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstDQo+ICBkb2MvZ3VpZGVzL3Byb2df
Z3VpZGUvc3RhY2tfbGliLnJzdCAgICAgICB8ICA2NyArKysrLQ0KPiAgZHJpdmVycy9tZW1wb29s
L3N0YWNrL3J0ZV9tZW1wb29sX3N0YWNrLmMgfCAgNDAgKysrDQo+ICBkcml2ZXJzL25ldC9ib25k
aW5nL3J0ZV9ldGhfYm9uZF9wbWQuYyAgICB8ICAgMiArLQ0KPiAgZHJpdmVycy9uZXQvaW50ZWwv
Y3BmbC9jcGZsX3J4dHguaCAgICAgICAgfCAgIDIgKy0NCj4gIGRyaXZlcnMvbmV0L3N4ZTIvc3hl
Ml90eHJ4X3ZlY19hdng1MTIuYyAgIHwgICAzICstDQo+ICBkcml2ZXJzL25ldC90YXAvcnRlX2V0
aF90YXAuYyAgICAgICAgICAgICB8ICAgMiArLQ0KPiAgbGliL2VhbC9pbmNsdWRlL3J0ZV9jb21t
b24uaCAgICAgICAgICAgICAgfCAgMTIgKw0KPiAgbGliL2VhbC94ODYvaW5jbHVkZS9ydGVfbWVt
Y3B5LmggICAgICAgICAgfCAgMjkgKysNCj4gIGxpYi9tZW1wb29sL21lbXBvb2xfdHJhY2UuaCAg
ICAgICAgICAgICAgIHwgICAxIC0NCj4gIGxpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmMgICAgICAg
ICAgICAgICAgIHwgIDUxICsrLS0NCj4gIGxpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmggICAgICAg
ICAgICAgICAgIHwgIDc0ICsrKy0tDQo+ICBsaWIvc3RhY2svbWVzb24uYnVpbGQgICAgICAgICAg
ICAgICAgICAgICB8ICAgMyArLQ0KPiAgbGliL3N0YWNrL3J0ZV9zdGFjay5jICAgICAgICAgICAg
ICAgICAgICAgfCAgMTggKy0NCj4gIGxpYi9zdGFjay9ydGVfc3RhY2suaCAgICAgICAgICAgICAg
ICAgICAgIHwgIDc3ICsrKysrLQ0KPiAgbGliL3N0YWNrL3J0ZV9zdGFja19sZi5oICAgICAgICAg
ICAgICAgICAgfCAgIDYgKy0NCj4gIGxpYi9zdGFjay9ydGVfc3RhY2tfbGZfYzExLmggICAgICAg
ICAgICAgIHwgICAyICstDQo+ICBsaWIvc3RhY2svcnRlX3N0YWNrX2xmX2dlbmVyaWMuaCAgICAg
ICAgICB8ICAgMiArLQ0KPiAgbGliL3N0YWNrL3J0ZV9zdGFja19sZl9zdHVicy5oICAgICAgICAg
ICAgfCAgIDIgKy0NCj4gIGxpYi9zdGFjay9ydGVfc3RhY2tfcGlsZS5jICAgICAgICAgICAgICAg
IHwgIDMzICsrKw0KPiAgbGliL3N0YWNrL3J0ZV9zdGFja19waWxlLmggICAgICAgICAgICAgICAg
fCAzMTYgKysrKysrKysrKysrKysrKysrKysrKw0KPiAgbGliL3N0YWNrL3J0ZV9zdGFja19zdGQu
aCAgICAgICAgICAgICAgICAgfCAgNDEgKystDQo+ICAyNSBmaWxlcyBjaGFuZ2VkLCA3NTYgaW5z
ZXJ0aW9ucygrKSwgMTIwIGRlbGV0aW9ucygtKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9z
dGFjay9ydGVfc3RhY2tfcGlsZS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3N0YWNrL3J0
ZV9zdGFja19waWxlLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC90ZXN0X21lbXBvb2wu
YyBiL2FwcC90ZXN0L3Rlc3RfbWVtcG9vbC5jDQo+IGluZGV4IGU1NDI0OWNlNjEuLjc2ZDQ1Y2Vh
MmEgMTAwNjQ0DQo+IC0tLSBhL2FwcC90ZXN0L3Rlc3RfbWVtcG9vbC5jDQo+ICsrKyBiL2FwcC90
ZXN0L3Rlc3RfbWVtcG9vbC5jDQo+IEBAIC0xMTIsOCArMTEyLDcgQEAgdGVzdF9tZW1wb29sX2Jh
c2ljKHN0cnVjdCBydGVfbWVtcG9vbCAqbXAsIGludA0KPiB1c2VfZXh0ZXJuYWxfY2FjaGUpDQo+
ICAJCUdPVE9fRVJSKHJldCwgb3V0KTsNCj4gDQo+ICAJcHJpbnRmKCJnZXQgcHJpdmF0ZSBkYXRh
XG4iKTsNCj4gLQlpZiAocnRlX21lbXBvb2xfZ2V0X3ByaXYobXApICE9IChjaGFyICopbXAgKw0K
PiAtCQkJUlRFX01FTVBPT0xfSEVBREVSX1NJWkUobXAsIG1wLT5jYWNoZV9zaXplKSkNCj4gKwlp
ZiAocnRlX21lbXBvb2xfZ2V0X3ByaXYobXApICE9IChjaGFyICopbXAgKyBzaXplb2Yoc3RydWN0
DQo+IHJ0ZV9tZW1wb29sKSkNCj4gIAkJR09UT19FUlIocmV0LCBvdXQpOw0KPiANCj4gICNpZm5k
ZWYgUlRFX0VYRUNfRU5WX0ZSRUVCU0QgLyogcnRlX21lbV92aXJ0MmlvdmEoKSBub3Qgc3VwcG9y
dGVkIG9uDQo+IGJzZCAqLw0KPiBkaWZmIC0tZ2l0IGEvYXBwL3Rlc3QvdGVzdF9zdGFjay5jIGIv
YXBwL3Rlc3QvdGVzdF9zdGFjay5jDQo+IGluZGV4IDU1MTc5ODI3NzQuLmFjNTJmMWMwNDggMTAw
NjQ0DQo+IC0tLSBhL2FwcC90ZXN0L3Rlc3Rfc3RhY2suYw0KPiArKysgYi9hcHAvdGVzdC90ZXN0
X3N0YWNrLmMNCj4gQEAgLTgxLDEzICs4MSwyOSBAQCB0ZXN0X3N0YWNrX3B1c2hfcG9wKHN0cnVj
dCBydGVfc3RhY2sgKnMsIHZvaWQNCj4gKipvYmpfdGFibGUsIHVuc2lnbmVkIGludCBidWxrX3N6
KQ0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gLQlmb3IgKGkgPSAwOyBpIDwgU1RBQ0tfU0laRTsgaSsr
KSB7DQo+IC0JCWlmIChvYmpfdGFibGVbaV0gIT0gcG9wcGVkX29ianNbU1RBQ0tfU0laRSAtIGkg
LSAxXSkgew0KPiAtCQkJcHJpbnRmKCJbJXMoKToldV0gSW5jb3JyZWN0IHZhbHVlICVwIGF0IGlu
ZGV4DQo+IDB4JXhcbiIsDQo+IC0JCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLA0KPiAtCQkJ
ICAgICAgIHBvcHBlZF9vYmpzW1NUQUNLX1NJWkUgLSBpIC0gMV0sIGkpOw0KPiAtCQkJcnRlX2Zy
ZWUocG9wcGVkX29ianMpOw0KPiAtCQkJcmV0dXJuIC0xOw0KPiArCWlmICghKHMtPmZsYWdzICYg
UlRFX1NUQUNLX0ZfUElMRSkpIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IFNUQUNLX1NJWkU7IGkr
Kykgew0KPiArCQkJaWYgKG9ial90YWJsZVtpXSAhPSBwb3BwZWRfb2Jqc1tTVEFDS19TSVpFIC0g
aSAtIDFdKQ0KPiB7DQo+ICsJCQkJcHJpbnRmKCJbJXMoKToldV0gSW5jb3JyZWN0IHZhbHVlICVw
IGF0IGluZGV4DQo+IDB4JXhcbiIsDQo+ICsJCQkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywN
Cj4gKwkJCQkgICAgICAgcG9wcGVkX29ianNbU1RBQ0tfU0laRSAtIGkgLSAxXSwgaSk7DQo+ICsJ
CQkJcnRlX2ZyZWUocG9wcGVkX29ianMpOw0KPiArCQkJCXJldHVybiAtMTsNCj4gKwkJCX0NCj4g
KwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmICgocy0+ZmxhZ3MgJiBSVEVfU1RBQ0tfRl9QSUxFKSAm
JiAoYnVsa19zeiAmDQo+IChSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUgLSAxKSkgPT0gMCkgew0K
PiArCQlmb3IgKGkgPSAwOyBpIDwgU1RBQ0tfU0laRTsgaSArPSBSVEVfU1RBQ0tfUElMRV9CVUxL
X1NJWkUpDQo+IHsNCj4gKwkJCWlmIChtZW1jbXAoJm9ial90YWJsZVtpXSwNCj4gKwkJCQkJJnBv
cHBlZF9vYmpzW1NUQUNLX1NJWkUgLQ0KPiBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUgLSBpXSwN
Cj4gKwkJCQkJUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFKSAhPSAwKSB7DQo+ICsJCQkJcHJpbnRm
KCJbJXMoKToldV0gSW5jb3JyZWN0IHZhbHVlcyAlcCBhdCBpbmRleA0KPiAweCV4IHdpdGggYnVs
ayBzaXplICV1XG4iLA0KPiArCQkJCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sDQo+ICsJCQkJ
ICAgICAgIHBvcHBlZF9vYmpzW1NUQUNLX1NJWkUgLQ0KPiBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJ
WkUgLSBpXSwgaSwgYnVsa19zeik7DQo+ICsJCQkJcnRlX2ZyZWUocG9wcGVkX29ianMpOw0KPiAr
CQkJCXJldHVybiAtMTsNCj4gKwkJCX0NCj4gIAkJfQ0KPiAgCX0NCj4gDQo+IEBAIC0xNTIsMTIg
KzE2OCwyNiBAQCB0ZXN0X3N0YWNrX2Jhc2ljKHVpbnQzMl90IGZsYWdzKQ0KPiAgCQlnb3RvIGZh
aWxfdGVzdDsNCj4gIAl9DQo+IA0KPiAtCXJldCA9IHJ0ZV9zdGFja19wdXNoKHMsIG9ial90YWJs
ZSwgMiAqIFNUQUNLX1NJWkUpOw0KPiAtCWlmIChyZXQgIT0gMCkgew0KPiAtCQlwcmludGYoIlsl
cygpOiV1XSBFeGNlc3Mgb2JqZWN0cyBwdXNoIHN1Y2NlZWRlZFxuIiwNCj4gLQkJICAgICAgIF9f
ZnVuY19fLCBfX0xJTkVfXyk7DQo+IC0JCWdvdG8gZmFpbF90ZXN0Ow0KPiArX19ydGVfZGlhZ25v
c3RpY19wdXNoDQo+ICsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XYXJyYXktYm91
bmRzIg0KPiArI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N0cmluZ29wLW92ZXJy
ZWFkIg0KPiArCWlmICghKHMtPmZsYWdzICYgUlRFX1NUQUNLX0ZfUElMRSkpIHsNCj4gKwkJcmV0
ID0gcnRlX3N0YWNrX3B1c2gocywgb2JqX3RhYmxlLCAyICogU1RBQ0tfU0laRSk7DQo+ICsJCWlm
IChyZXQgIT0gMCkgew0KPiArCQkJcHJpbnRmKCJbJXMoKToldV0gRXhjZXNzIG9iamVjdHMgcHVz
aCBzdWNjZWVkZWRcbiIsDQo+ICsJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsNCj4gKwkJ
CWdvdG8gZmFpbF90ZXN0Ow0KPiArCQl9DQo+ICAJfQ0KPiArCWlmIChzLT5mbGFncyAmIFJURV9T
VEFDS19GX1BJTEUpIHsNCj4gKwkJcmV0ID0gcnRlX3N0YWNrX3B1c2gocywgb2JqX3RhYmxlLCBT
VEFDS19TSVpFICoNCj4gUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFICsgMSk7DQo+ICsJCWlmIChy
ZXQgIT0gMCkgew0KPiArCQkJcHJpbnRmKCJbJXMoKToldV0gRXhjZXNzIG9iamVjdHMgcHVzaCBz
dWNjZWVkZWRcbiIsDQo+ICsJCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsNCj4gKwkJCWdv
dG8gZmFpbF90ZXN0Ow0KPiArCQl9DQo+ICsJfQ0KPiArX19ydGVfZGlhZ25vc3RpY19wb3ANCj4g
DQo+ICAJcmV0ID0gcnRlX3N0YWNrX3BvcChzLCBvYmpfdGFibGUsIDEpOw0KPiAgCWlmIChyZXQg
IT0gMCkgew0KPiBAQCAtMTgxLDE0ICsyMTEsMTQgQEAgdGVzdF9zdGFja19uYW1lX3JldXNlKHVp
bnQzMl90IGZsYWdzKQ0KPiAgew0KPiAgCXN0cnVjdCBydGVfc3RhY2sgKnNbMl07DQo+IA0KPiAt
CXNbMF0gPSBydGVfc3RhY2tfY3JlYXRlKCJ0ZXN0IiwgU1RBQ0tfU0laRSwgcnRlX3NvY2tldF9p
ZCgpLA0KPiBmbGFncyk7DQo+ICsJc1swXSA9IHJ0ZV9zdGFja19jcmVhdGUoX19mdW5jX18sIFNU
QUNLX1NJWkUsIHJ0ZV9zb2NrZXRfaWQoKSwNCj4gZmxhZ3MpOw0KPiAgCWlmIChzWzBdID09IE5V
TEwpIHsNCj4gIAkJcHJpbnRmKCJbJXMoKToldV0gRmFpbGVkIHRvIGNyZWF0ZSBhIHN0YWNrXG4i
LA0KPiAgCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fKTsNCj4gIAkJcmV0dXJuIC0xOw0KPiAg
CX0NCj4gDQo+IC0Jc1sxXSA9IHJ0ZV9zdGFja19jcmVhdGUoInRlc3QiLCBTVEFDS19TSVpFLCBy
dGVfc29ja2V0X2lkKCksDQo+IGZsYWdzKTsNCj4gKwlzWzFdID0gcnRlX3N0YWNrX2NyZWF0ZShf
X2Z1bmNfXywgU1RBQ0tfU0laRSwgcnRlX3NvY2tldF9pZCgpLA0KPiBmbGFncyk7DQo+ICAJaWYg
KHNbMV0gIT0gTlVMTCkgew0KPiAgCQlwcmludGYoIlslcygpOiV1XSBGYWlsZWQgdG8gZGV0ZWN0
IHJlLXVzZWQgbmFtZVxuIiwNCj4gIAkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXyk7DQo+IEBA
IC0zMDAsNiArMzMwLDcgQEAgc3RhY2tfdGhyZWFkX3B1c2hfcG9wKF9fcnRlX3VudXNlZCB2b2lk
ICphcmdzKQ0KPiAgCQkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgbnVtKTsNCj4gIAkJCXJl
dHVybiAtMTsNCj4gIAkJfQ0KPiArCQlydGVfY29tcGlsZXJfYmFycmllcigpOw0KPiAgCX0NCj4g
DQo+ICAJcmV0dXJuIDA7DQo+IEBAIC0zODQsNSArNDE1LDE2IEBAIHRlc3RfbGZfc3RhY2sodm9p
ZCkNCj4gICNlbmRpZg0KPiAgfQ0KPiANCj4gK3N0YXRpYyBpbnQNCj4gK3Rlc3RfcGlsZSh2b2lk
KQ0KPiArew0KPiArI2lmIGRlZmluZWQoUlRFX1NUQUNLX1BJTEVfU1VQUE9SVEVEKQ0KPiArCXJl
dHVybiBfX3Rlc3Rfc3RhY2soUlRFX1NUQUNLX0ZfUElMRSk7DQo+ICsjZWxzZQ0KPiArCXJldHVy
biBURVNUX1NLSVBQRUQ7DQo+ICsjZW5kaWYNCj4gK30NCj4gKw0KPiAgUkVHSVNURVJfRkFTVF9U
RVNUKHN0YWNrX2F1dG90ZXN0LCBOT0hVR0VfU0tJUCwgQVNBTl9PSywgdGVzdF9zdGFjayk7DQo+
ICBSRUdJU1RFUl9GQVNUX1RFU1Qoc3RhY2tfbGZfYXV0b3Rlc3QsIE5PSFVHRV9TS0lQLCBBU0FO
X09LLA0KPiB0ZXN0X2xmX3N0YWNrKTsNCj4gK1JFR0lTVEVSX0ZBU1RfVEVTVChzdGFja19waWxl
X2F1dG90ZXN0LCBOT0hVR0VfU0tJUCwgQVNBTl9PSywNCj4gdGVzdF9waWxlKTsNCj4gZGlmZiAt
LWdpdCBhL2FwcC90ZXN0L3Rlc3Rfc3RhY2tfcGVyZi5jIGIvYXBwL3Rlc3QvdGVzdF9zdGFja19w
ZXJmLmMNCj4gaW5kZXggM2YxN2EyNjA2Yy4uNTg2NDEwNjcxZiAxMDA2NDQNCj4gLS0tIGEvYXBw
L3Rlc3QvdGVzdF9zdGFja19wZXJmLmMNCj4gKysrIGIvYXBwL3Rlc3QvdGVzdF9zdGFja19wZXJm
LmMNCj4gQEAgLTE0LDE0ICsxNCwxNCBAQA0KPiAgI2luY2x1ZGUgInRlc3QuaCINCj4gDQo+ICAj
ZGVmaW5lIFNUQUNLX05BTUUgIlNUQUNLX1BFUkYiDQo+IC0jZGVmaW5lIE1BWF9CVVJTVCAzMg0K
PiArI2RlZmluZSBNQVhfQlVSU1QgUlRFX01FTVBPT0xfQ0FDSEVfTUFYX1NJWkUgLyAyDQo+ICAj
ZGVmaW5lIFNUQUNLX1NJWkUgKFJURV9NQVhfTENPUkUgKiBNQVhfQlVSU1QpDQo+IA0KPiAgLyoN
Cj4gICAqIFB1c2gvcG9wIGJ1bGsgc2l6ZXMsIG1hcmtlZCB2b2xhdGlsZSBzbyB0aGV5IGFyZW4n
dCB0cmVhdGVkIGFzDQo+IGNvbXBpbGUtdGltZQ0KPiAgICogY29uc3RhbnRzLg0KPiAgICovDQo+
IC1zdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgaW50IGJ1bGtfc2l6ZXNbXSA9IHs4LCBNQVhfQlVS
U1R9Ow0KPiArc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGludCBidWxrX3NpemVzW10gPSB7MSwg
OCwgMzIsIE1BWF9CVVJTVH07DQo+IA0KPiAgc3RhdGljIFJURV9BVE9NSUModWludDMyX3QpIGxj
b3JlX2JhcnJpZXI7DQo+IA0KPiBAQCAtMzU0LDUgKzM1NCwxNiBAQCB0ZXN0X2xmX3N0YWNrX3Bl
cmYodm9pZCkNCj4gICNlbmRpZg0KPiAgfQ0KPiANCj4gK3N0YXRpYyBpbnQNCj4gK3Rlc3RfcGls
ZV9wZXJmKHZvaWQpDQo+ICt7DQo+ICsjaWYgZGVmaW5lZChSVEVfU1RBQ0tfUElMRV9TVVBQT1JU
RUQpDQo+ICsJcmV0dXJuIF9fdGVzdF9zdGFja19wZXJmKFJURV9TVEFDS19GX1BJTEUpOw0KPiAr
I2Vsc2UNCj4gKwlyZXR1cm4gVEVTVF9TS0lQUEVEOw0KPiArI2VuZGlmDQo+ICt9DQo+ICsNCj4g
IFJFR0lTVEVSX1BFUkZfVEVTVChzdGFja19wZXJmX2F1dG90ZXN0LCB0ZXN0X3N0YWNrX3BlcmYp
Ow0KPiAgUkVHSVNURVJfUEVSRl9URVNUKHN0YWNrX2xmX3BlcmZfYXV0b3Rlc3QsIHRlc3RfbGZf
c3RhY2tfcGVyZik7DQo+ICtSRUdJU1RFUl9QRVJGX1RFU1Qoc3RhY2tfcGlsZV9wZXJmX2F1dG90
ZXN0LCB0ZXN0X3BpbGVfcGVyZik7DQo+IGRpZmYgLS1naXQgYS9jb25maWcvcnRlX2NvbmZpZy5o
IGIvY29uZmlnL3J0ZV9jb25maWcuaA0KPiBpbmRleCAwNDQ3Y2RmMmFkLi4wMzM1MDY2MGU0IDEw
MDY0NA0KPiAtLS0gYS9jb25maWcvcnRlX2NvbmZpZy5oDQo+ICsrKyBiL2NvbmZpZy9ydGVfY29u
ZmlnLmgNCj4gQEAgLTU2LDcgKzU2LDcgQEANCj4gICNkZWZpbmUgUlRFX0NPTlRJR01FTV9ERUZB
VUxUX0JVRl9TSVpFICg1MTIqMTAyNCoxMDI0KQ0KPiANCj4gIC8qIG1lbXBvb2wgZGVmaW5lcyAq
Lw0KPiAtI2RlZmluZSBSVEVfTUVNUE9PTF9DQUNIRV9NQVhfU0laRSA1MTINCj4gKyNkZWZpbmUg
UlRFX01FTVBPT0xfQ0FDSEVfTUFYX1NJWkUgMTAyNA0KPiAgLyogUlRFX0xJQlJURV9NRU1QT09M
X1NUQVRTIGlzIG5vdCBzZXQgKi8NCj4gIC8qIFJURV9MSUJSVEVfTUVNUE9PTF9ERUJVRyBpcyBu
b3Qgc2V0ICovDQo+IA0KPiBAQCAtNjQsNiArNjQsOSBAQA0KPiAgI2RlZmluZSBSVEVfTUJVRl9E
RUZBVUxUX01FTVBPT0xfT1BTICJyaW5nX21wX21jIg0KPiAgLyogUlRFX01CVUZfSElTVE9SWV9E
RUJVRyBpcyBub3Qgc2V0ICovDQo+IA0KPiArLyogc3RhY2sgZGVmaW5lcyAqLw0KPiArI2RlZmlu
ZSBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUgMzINCj4gKw0KPiAgLyogZXRoZXIgZGVmaW5lcyAq
Lw0KPiAgI2RlZmluZSBSVEVfTUFYX1FVRVVFU19QRVJfUE9SVCAxMDI0DQo+ICAjZGVmaW5lIFJU
RV9FVEhERVZfUlhUWF9DQUxMQkFDS1MgMQ0KPiBkaWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy9wcm9n
X2d1aWRlL3N0YWNrX2xpYi5yc3QNCj4gYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvc3RhY2tfbGli
LnJzdA0KPiBpbmRleCBmZGYwNTY3MzBjLi45YjQ3MzAzMGQzIDEwMDY0NA0KPiAtLS0gYS9kb2Mv
Z3VpZGVzL3Byb2dfZ3VpZGUvc3RhY2tfbGliLnJzdA0KPiArKysgYi9kb2MvZ3VpZGVzL3Byb2df
Z3VpZGUvc3RhY2tfbGliLnJzdA0KPiBAQCAtMSw1ICsxLDYgQEANCj4gIC4uICBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICAgICAgQ29weXJpZ2h0KGMpIDIwMTkgSW50
ZWwgQ29ycG9yYXRpb24uDQo+ICsgICAgQ29weXJpZ2h0KGMpIDIwMjYgU21hcnRTaGFyZSBTeXN0
ZW1zLg0KPiANCj4gIFN0YWNrIExpYnJhcnkNCj4gID09PT09PT09PT09PT0NCj4gQEAgLTksOSAr
MTAsMTAgQEAgc3RhY2sgb2YgcG9pbnRlcnMuDQo+IA0KPiAgVGhlIHN0YWNrIGxpYnJhcnkgcHJv
dmlkZXMgdGhlIGZvbGxvd2luZyBiYXNpYyBvcGVyYXRpb25zOg0KPiANCj4gLSogIENyZWF0ZSBh
IHVuaXF1ZWx5IG5hbWVkIHN0YWNrIG9mIGEgdXNlci1zcGVjaWZpZWQgc2l6ZSBhbmQgdXNpbmcg
YQ0KPiArKiAgQ3JlYXRlIGEgdW5pcXVlbHkgbmFtZWQgc3RhY2sgKG9yIHBpbGUpIG9mIGEgdXNl
ci1zcGVjaWZpZWQgc2l6ZQ0KPiBhbmQgdXNpbmcgYQ0KPiAgICAgdXNlci1zcGVjaWZpZWQgc29j
a2V0LCB3aXRoIGVpdGhlciBzdGFuZGFyZCAobG9jay1iYXNlZCkgb3IgbG9jay0NCj4gZnJlZQ0K
PiAgICAgYmVoYXZpb3IuDQo+ICsgICBUaGUgcGlsZSByZXNlbWJsZXMgYSBsb2NrLWZyZWUgc3Rh
Y2ssIGJ1dCBpcyBub3Qgc3RyaWN0bHkgTElGTy4NCj4gDQo+ICAqICBQdXNoIGFuZCBwb3AgYSBi
dXJzdCBvZiBvbmUgb3IgbW9yZSBzdGFjayBvYmplY3RzIChwb2ludGVycykuDQo+ICAgICBUaGVz
ZSBmdW5jdGlvbnMgYXJlIG11bHRpLXRocmVhZCBzYWZlLg0KPiBAQCAtMjUsOCArMjcsOSBAQCBU
aGUgc3RhY2sgbGlicmFyeSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGJhc2ljDQo+IG9wZXJhdGlv
bnM6DQo+ICBJbXBsZW1lbnRhdGlvbg0KPiAgLS0tLS0tLS0tLS0tLS0NCj4gDQo+IC1UaGUgbGli
cmFyeSBzdXBwb3J0cyB0d28gdHlwZXMgb2Ygc3RhY2tzOiBzdGFuZGFyZCAobG9jay1iYXNlZCkg
YW5kDQo+IGxvY2stZnJlZS4NCj4gLUJvdGggdHlwZXMgdXNlIHRoZSBzYW1lIHNldCBvZiBpbnRl
cmZhY2VzLCBidXQgdGhlaXIgaW1wbGVtZW50YXRpb25zDQo+IGRpZmZlci4NCj4gK1RoZSBsaWJy
YXJ5IHN1cHBvcnRzIHRocmVlIHR5cGVzIG9mIHN0YWNrczogc3RhbmRhcmQgKGxvY2stYmFzZWQp
LA0KPiBsb2NrLWZyZWUsDQo+ICthbmQgcGlsZSAobG9jay1mcmVlLCBub3Qgc3RyaWN0bHkgTElG
Tywgb3B0aW1pemVkIGZvciBidWxrDQo+IG9wZXJhdGlvbnMpLg0KPiArQWxsIHR5cGVzIHVzZSB0
aGUgc2FtZSBzZXQgb2YgaW50ZXJmYWNlcywgYnV0IHRoZWlyIGltcGxlbWVudGF0aW9ucw0KPiBk
aWZmZXIuDQo+IA0KPiAgLi4gX1N0YWNrX0xpYnJhcnlfU3RkX1N0YWNrOg0KPiANCj4gQEAgLTY0
LDcgKzY3LDcgQEAgVGhlIGxpbmtlZCBsaXN0IGVsZW1lbnRzIHRoZW1zZWx2ZXMgYXJlIG1haW50
YWluZWQgaW4NCj4gYSBsb2NrLWZyZWUgTElGTywgYW5kIGFyZQ0KPiAgYWxsb2NhdGVkIGJlZm9y
ZSBzdGFjayBwdXNoZXMgYW5kIGZyZWVkIGFmdGVyIHN0YWNrIHBvcHMuIFNpbmNlIHRoZQ0KPiBz
dGFjayBoYXMgYQ0KPiAgZml4ZWQgbWF4aW11bSBkZXB0aCwgdGhlc2UgZWxlbWVudHMgZG8gbm90
IG5lZWQgdG8gYmUgZHluYW1pY2FsbHkNCj4gY3JlYXRlZC4NCj4gDQo+IC1UaGUgbG9jay1mcmVl
IGJlaGF2aW9yIGlzIHNlbGVjdGVkIGJ5IHBhc3NpbmcgdGhlICpSVEVfU1RBQ0tfRl9MRioNCj4g
ZmxhZyB0bw0KPiArVGhlIGxvY2stZnJlZSBiZWhhdmlvciBpcyBzZWxlY3RlZCBieSBwYXNzaW5n
IHRoZSBgYFJURV9TVEFDS19GX0xGYGANCj4gZmxhZyB0bw0KPiAgYGBydGVfc3RhY2tfY3JlYXRl
KClgYC4NCj4gDQo+ICBQcmV2ZW50aW5nIHRoZSBBQkEgcHJvYmxlbQ0KPiBAQCAtODYsMyArODks
NTkgQEAgYm90aCBwb3Agc3RhbGUgZGF0YSBhbmQgaW5jb3JyZWN0bHkgY2hhbmdlIHRoZSBoZWFk
DQo+IHBvaW50ZXIuIEJ5IGFkZGluZyBhDQo+ICBtb2RpZmljYXRpb24gY291bnRlciB0aGF0IGlz
IHVwZGF0ZWQgb24gZXZlcnkgcHVzaCBhbmQgcG9wIGFzIHBhcnQgb2YNCj4gdGhlDQo+ICBjb21w
YXJlLWFuZC1zd2FwLCB0aGUgYWxnb3JpdGhtIGNhbiBkZXRlY3Qgd2hlbiB0aGUgbGlzdCBjaGFu
Z2VzIGV2ZW4NCj4gaWYgdGhlDQo+ICBoZWFkIHBvaW50ZXIgcmVtYWlucyB0aGUgc2FtZS4NCj4g
Kw0KPiArLi4gX1N0YWNrX0xpYnJhcnlfUGlsZToNCj4gKw0KPiArUGlsZQ0KPiArfn5+fg0KPiAr
DQo+ICtUaGUgcGlsZSBpcyBhIHN0YWNrLWxpa2UgaW1wbGVtZW50YXRpb24sIG9wdGltaXplZCBm
b3IgYnVsaw0KPiBvcGVyYXRpb25zLg0KPiArSXQgaXMgb25seSBMSUZPIG9uIGJ1bGsgbGV2ZWws
IG5vdCBvbiBvYmplY3QgbGV2ZWw7IGkuZS4gYXJyYXlzIG9mDQo+IGJ1bGtzIGFyZQ0KPiArcHVz
aGVkIGFuZCBwb3BwZWQgaW4gTElGTyBtYW5uZXIsIGJ1dCBvYmplY3RzIHdpdGhpbiBlYWNoIGJ1
bGsgYXJlIG5vdA0KPiBvcmRlcmVkDQo+ICthcyBleHBlY3RlZCBieSBhIHN0YWNrLg0KPiArDQo+
ICtUaGUgcGlsZSBpbXBsZW1lbnRhdGlvbiBnZW5lcmFsbHkgcmVzZW1ibGVzIHRoYXQgb2YgdGhl
IGxvY2stZnJlZQ0KPiBzdGFjay4NCj4gK0luIGFkZGl0aW9uIHRvIHRoZSBsb2NrLWZyZWUgc3Rh
Y2sncyBsaW5rZWQgbGlzdCBvZiBzb2xvIChzaW5nbGUtDQo+IG9iamVjdCkgZWxlbWVudHMsDQo+
ICtpdCBhbHNvIGNvbnRhaW5zIGEgbGlua2VkIGxpc3Qgb2YgYnVsayAobXVsdGktb2JqZWN0KSBl
bGVtZW50cy4NCj4gK0FuZCBzaW1pbGFyIHRvIHRoZSBsaW5rZWQgbGlzdCBvZiBmcmVlIGVsZW1l
bnRzLCBpdCBjb250YWlucyB0d28NCj4gbGlua2VkIGxpc3RzIG9mDQo+ICtmcmVlIGVsZW1lbnRz
LCBvbmUgZm9yIGVhY2ggZWxlbWVudCB0eXBlIChidWxrIGFuZCBzb2xvKS4NCj4gK1RoZSBsb2Nr
LWZyZWUgcHJvcGVydHkgbWVhbnMgdGhhdCBtdWx0aXBsZSB0aHJlYWRzIGNhbiBwdXNoIGFuZCBw
b3ANCj4gc2ltdWx0YW5lb3VzbHkuDQo+ICtPbmUgdGhyZWFkIGJlaW5nIHByZWVtcHRlZC9kZWxh
eWVkIGluIGEgcHVzaCBvciBwb3Agb3BlcmF0aW9uIHdpbGwgbm90DQo+ICtpbXBlZGUgdGhlIGZv
cndhcmQgcHJvZ3Jlc3Mgb2YgYW55IG90aGVyIHRocmVhZC4NCj4gKw0KPiArUHVzaCBvcGVyYXRp
b25zIGFyZSBwZXJmb3JtZWQgYnkgc3BsaXR0aW5nIHRoZSBidXJzdCBpbiB0d286IG9iamVjdHMN
Cj4gZml0dGluZyBpbnRvDQo+ICtidWxrIGVsZW1lbnRzLCBhbmQgYW55IHJlbWFpbmluZyBvYmpl
Y3RzIChhZnRlciBmaWxsaW5nIGJ1bGsgZWxlbWVudHMpDQo+IGludG8NCj4gK3NvbG8gZWxlbWVu
dHMsIGFuZCB0aGVuIHBlcmZvcm1haW5nIHR3byBsb2NrLWZyZWUgcHVzaCBvcGVyYXRpb25zLA0K
PiArb25lIGZvciBlYWNoIGVsZW1lbnQgdHlwZSAoc29sbyBhbmQgYnVsaykuDQo+ICsNCj4gK1Bv
cCBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgYnkgc3BsaXR0aW5nIHRoZSBidXJzdCBpbiB0d286
IG9iamVjdHMNCj4gZml0dGluZyBpbnRvDQo+ICtidWxrIGVsZW1lbnRzLCBhbmQgYW55IHJlbWFp
bmluZyBvYmplY3RzIChub3QgZmlsbGluZyBhIGJ1bGsgZWxlbWVudCkNCj4gaW50bw0KPiArc29s
byBlbGVtZW50cy4gVHdvIGxvY2stZnJlZSBwb3Agb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLA0K
PiArZmlyc3QgZm9yIGJ1bGsgZWxlbWVudHMsIGFuZCB0aGVuIGZvciBzb2xvIGVsZW1lbnRzLg0K
PiArSWYgdGhlIHBvcCBvcGVyYXRpb24gZm9yIGJ1bGsgZWxlbWVudHMgZmFpbHMsIGl0IGtlZXBz
IHJldHJ5aW5nLA0KPiByZXF1ZXN0aW5nIG9uZQ0KPiArbGVzcyBidWxrIGVsZW1lbnQuIFRoZSBu
dW1iZXIgb2Ygc29sbyBlbGVtZW50cyBpbiB0aGUgZm9sbG93aW5nDQo+IHJlcXVlc3QgaXMNCj4g
K2NvcnJlc3BvbmRpbmdseSBpbmNyZWFzZWQuDQo+ICsNCj4gK1RoZSBwaWxlJ3MgbG9jay1mcmVl
IGxpc3QgcHVzaCBhbmQgcG9wIG9wZXJhdGlvbnMgdXNlIHRoZSBsb2NrLWZyZWUNCj4gc3RhY2sn
cw0KPiAraW1wbGVtZW50YXRpb25zIChhbmQgdXNlcyB0eXBlIGNhc3RpbmcgdG8gbWltaWNrIEMr
KyBjbGFzcw0KPiBpbmhlcml0YW5jZSkuDQo+ICsNCj4gK1RoZSBsaW5rZWQgbGlzdCBlbGVtZW50
cyB0aGVtc2VsdmVzIGFyZSBtYWludGFpbmVkIGluIHR3byBsb2NrLWZyZWUNCj4gTElGT3MsDQo+
ICtvbmUgZm9yIGJ1bGsgZWxlbWVudHMgYW5kIG9uZSBmb3Igc29sbyBlbGVtZW50cywgYW5kIGFy
ZQ0KPiArYWxsb2NhdGVkIGJlZm9yZSBwdXNoZXMgYW5kIGZyZWVkIGFmdGVyIHBvcHMuIFNpbmNl
IHRoZSBwaWxlIGhhcyBhDQo+ICtmaXhlZCBtYXhpbXVtIGRlcHRoLCB0aGVzZSBlbGVtZW50cyBk
byBub3QgbmVlZCB0byBiZSBkeW5hbWljYWxseQ0KPiBjcmVhdGVkLg0KPiArDQo+ICtUaGUgcGls
ZSBiZWhhdmlvciBpcyBzZWxlY3RlZCBieSBwYXNzaW5nIHRoZSBgYFJURV9TVEFDS19GX1BJTEVg
YCBmbGFnDQo+IHRvDQo+ICtgYHJ0ZV9zdGFja19jcmVhdGUoKWBgLg0KPiArDQo+ICtUaGUgcGls
ZSBidWxrIHNpemUgY2FuIGJlIGNoYW5nZWQgYnkgbW9kaWZ5aW5nDQo+IGBgUlRFX1NUQUNLX1BJ
TEVfQlVMS19TSVpFYGAgaW4NCj4gK2BgY29uZmlnL3J0ZV9jb25maWcuaGBgLg0KPiArRm9yIG9w
dGltYWwgcGVyZm9ybWFuY2Ugd2hlbiB1c2luZyB0aGUgcGlsZSBtZW1wb29sIGRyaXZlciwgdGhl
DQo+ICttZW1wb29sIGNhY2hlIHNpemUgLyAyIHNob3VsZCBiZSBkaXZpc2libGUgYnkgdGhlIHBp
bGUgYnVsayBzaXplLg0KPiArDQo+ICtOb3RlOg0KPiArVGhlIHBpbGUgaXMgZGVzaWduZWQgYW5k
IG9wdGltaXplZCBmb3IgdXNlIHdpdGggYnVsa3Mgb2Ygb2JqZWN0cy4NCj4gK0J1cnN0cyBub3Qg
YSBtdWx0aXBsZSBvZiB0aGUgYnVsayBzaXplIGFyZSBzdGlsbCBoYW5kbGVkIGluIGEgbG9jay0N
Cj4gZnJlZSwNCj4gK2ZvcndhcmQtcHJvZ3Jlc3MtZ3VhcmFudGVlZCBtYW5uZXIuIEhvd2V2ZXIs
IHBvcCBvcGVyYXRpb25zIG1heQ0KPiBleGhpYml0DQo+ICtzaWduaWZpY2FudGx5IGxvd2VyIHBl
cmZvcm1hbmNlIGluIGluc3RhbmNlcyB3aGVyZSB0aGUgb3B0aW1hbCBudW1iZXINCj4gb2YNCj4g
K2J1bGsgZWxlbWVudHMgaXMgdW5hdmFpbGFibGUsIGFuZCBpdCBpcyBuZWNlc3NhcnkgdG8gcmV0
cnkgKGZldGNoaW5nDQo+ICtpbmNyZWFzaW5nbHkgZmV3ZXIgYnVsayBlbGVtZW50cyBhbmQgY29y
cmVzcG9uZGluZ2x5IG1vcmUgc29sbw0KPiBlbGVtZW50cykuDQo+IGRpZmYgLS1naXQgYS9kcml2
ZXJzL21lbXBvb2wvc3RhY2svcnRlX21lbXBvb2xfc3RhY2suYw0KPiBiL2RyaXZlcnMvbWVtcG9v
bC9zdGFjay9ydGVfbWVtcG9vbF9zdGFjay5jDQo+IGluZGV4IDE0NzY5MDUyMjcuLjc0NjdiOGIz
OWUgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbWVtcG9vbC9zdGFjay9ydGVfbWVtcG9vbF9zdGFj
ay5jDQo+ICsrKyBiL2RyaXZlcnMvbWVtcG9vbC9zdGFjay9ydGVfbWVtcG9vbF9zdGFjay5jDQo+
IEBAIC00MSw2ICs0MSwzNiBAQCBsZl9zdGFja19hbGxvYyhzdHJ1Y3QgcnRlX21lbXBvb2wgKm1w
KQ0KPiAgCXJldHVybiBfX3N0YWNrX2FsbG9jKG1wLCBSVEVfU1RBQ0tfRl9MRik7DQo+ICB9DQo+
IA0KPiArc3RhdGljIGludA0KPiArcGlsZV9hbGxvYyhzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wKQ0K
PiArew0KPiArCXJldHVybiBfX3N0YWNrX2FsbG9jKG1wLCBSVEVfU1RBQ0tfRl9QSUxFKTsNCj4g
K30NCj4gKw0KPiArc3RhdGljIGludA0KPiArcGlsZV9lbnF1ZXVlKHN0cnVjdCBydGVfbWVtcG9v
bCAqbXAsIHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiArCSAgICAgIHVuc2lnbmVkIGludCBu
KQ0KPiArew0KPiArCXN0cnVjdCBydGVfc3RhY2sgKnMgPSBtcC0+cG9vbF9kYXRhOw0KPiArDQo+
ICsJUlRFX0FTU0VSVChzICE9IE5VTEwpOw0KPiArCVJURV9BU1NFUlQob2JqX3RhYmxlICE9IE5V
TEwpOw0KPiArDQo+ICsJcmV0dXJuIF9fcnRlX3N0YWNrX3BpbGVfcHVzaChzLCBvYmpfdGFibGUs
IG4pID09IDAgPyAtRU5PQlVGUyA6DQo+IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4g
K3BpbGVfZGVxdWV1ZShzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wLCB2b2lkICoqb2JqX3RhYmxlLA0K
PiArCSAgICAgIHVuc2lnbmVkIGludCBuKQ0KPiArew0KPiArCXN0cnVjdCBydGVfc3RhY2sgKnMg
PSBtcC0+cG9vbF9kYXRhOw0KPiArDQo+ICsJUlRFX0FTU0VSVChzICE9IE5VTEwpOw0KPiArCVJU
RV9BU1NFUlQob2JqX3RhYmxlICE9IE5VTEwpOw0KPiArDQo+ICsJcmV0dXJuIF9fcnRlX3N0YWNr
X3BpbGVfcG9wKHMsIG9ial90YWJsZSwgbikgPT0gMCA/IC1FTk9CVUZTIDogMDsNCj4gK30NCj4g
Kw0KPiAgc3RhdGljIGludA0KPiAgc3RhY2tfZW5xdWV1ZShzdHJ1Y3QgcnRlX21lbXBvb2wgKm1w
LCB2b2lkICogY29uc3QgKm9ial90YWJsZSwNCj4gIAkgICAgICB1bnNpZ25lZCBpbnQgbikNCj4g
QEAgLTkzLDUgKzEyMywxNSBAQCBzdGF0aWMgc3RydWN0IHJ0ZV9tZW1wb29sX29wcyBvcHNfbGZf
c3RhY2sgPSB7DQo+ICAJLmdldF9jb3VudCA9IHN0YWNrX2dldF9jb3VudA0KPiAgfTsNCj4gDQo+
ICtzdGF0aWMgc3RydWN0IHJ0ZV9tZW1wb29sX29wcyBvcHNfcGlsZSA9IHsNCj4gKwkubmFtZSA9
ICJwaWxlIiwNCj4gKwkuYWxsb2MgPSBwaWxlX2FsbG9jLA0KPiArCS5mcmVlID0gc3RhY2tfZnJl
ZSwNCj4gKwkuZW5xdWV1ZSA9IHBpbGVfZW5xdWV1ZSwNCj4gKwkuZGVxdWV1ZSA9IHBpbGVfZGVx
dWV1ZSwNCj4gKwkuZ2V0X2NvdW50ID0gc3RhY2tfZ2V0X2NvdW50DQo+ICt9Ow0KPiArDQo+ICBS
VEVfTUVNUE9PTF9SRUdJU1RFUl9PUFMob3BzX3N0YWNrKTsNCj4gIFJURV9NRU1QT09MX1JFR0lT
VEVSX09QUyhvcHNfbGZfc3RhY2spOw0KPiArUlRFX01FTVBPT0xfUkVHSVNURVJfT1BTKG9wc19w
aWxlKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvcnRlX2V0aF9ib25kX3Bt
ZC5jDQo+IGIvZHJpdmVycy9uZXQvYm9uZGluZy9ydGVfZXRoX2JvbmRfcG1kLmMNCj4gaW5kZXgg
NmE0Zjk5N2I1YS4uOTJkN2Y0ZjRlZiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvYm9uZGlu
Zy9ydGVfZXRoX2JvbmRfcG1kLmMNCj4gKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ydGVfZXRo
X2JvbmRfcG1kLmMNCj4gQEAgLTE3MDIsNyArMTcwMiw3IEBAIG1lbWJlcl9jb25maWd1cmVfc2xv
d19xdWV1ZShzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gKmJvbmRpbmdfZXRoX2RldiwNCj4gIAkJc25w
cmludGYobWVtX25hbWUsIFJURV9ESU0obWVtX25hbWUpLA0KPiAibWVtYmVyX3BvcnQldV9zbG93
X3Bvb2wiLA0KPiAgCQkJCW1lbWJlcl9pZCk7DQo+ICAJCXBvcnQtPnNsb3dfcG9vbCA9IHJ0ZV9w
a3RtYnVmX3Bvb2xfY3JlYXRlKG1lbV9uYW1lLCA4MTkxLA0KPiAtCQkJMjUwLCAwLCBSVEVfTUJV
Rl9ERUZBVUxUX0JVRl9TSVpFLA0KPiArCQkJMjU2LCAwLCBSVEVfTUJVRl9ERUZBVUxUX0JVRl9T
SVpFLA0KPiAgCQkJbWVtYmVyX2V0aF9kZXYtPmRhdGEtPm51bWFfbm9kZSk7DQo+IA0KPiAgCQkv
KiBBbnkgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbiBpbml0aWFsaXphdGlvbiBpcw0KPiBj
cml0aWNhbCBiZWNhdXNlDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pbnRlbC9jcGZsL2Nw
Zmxfcnh0eC5oDQo+IGIvZHJpdmVycy9uZXQvaW50ZWwvY3BmbC9jcGZsX3J4dHguaA0KPiBpbmRl
eCA1MmNkZWNhYzg4Li5mYWYyOGZkNDg5IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9pbnRl
bC9jcGZsL2NwZmxfcnh0eC5oDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2ludGVsL2NwZmwvY3BmbF9y
eHR4LmgNCj4gQEAgLTI1LDcgKzI1LDcgQEANCj4gICNkZWZpbmUgQ1BGTF9QMlBfUVVFVUVfR1JQ
X0lECTENCj4gICNkZWZpbmUgQ1BGTF9QMlBfREVTQ19MRU4JMTYNCj4gICNkZWZpbmUgQ1BGTF9Q
MlBfTkJfTUJVRgk0MDk2DQo+IC0jZGVmaW5lIENQRkxfUDJQX0NBQ0hFX1NJWkUJMjUwDQo+ICsj
ZGVmaW5lIENQRkxfUDJQX0NBQ0hFX1NJWkUJMjU2DQo+ICAjZGVmaW5lIENQRkxfUDJQX01CVUZf
U0laRQkyMDQ4DQo+ICAjZGVmaW5lIENQRkxfUDJQX1JJTkdfQlVGCTEyOA0KPiANCj4gZGlmZiAt
LWdpdCBhL2RyaXZlcnMvbmV0L3N4ZTIvc3hlMl90eHJ4X3ZlY19hdng1MTIuYw0KPiBiL2RyaXZl
cnMvbmV0L3N4ZTIvc3hlMl90eHJ4X3ZlY19hdng1MTIuYw0KPiBpbmRleCBhODMwYzdhMzNiLi40
ZGVkNWNiNjNlIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9zeGUyL3N4ZTJfdHhyeF92ZWNf
YXZ4NTEyLmMNCj4gKysrIGIvZHJpdmVycy9uZXQvc3hlMi9zeGUyX3R4cnhfdmVjX2F2eDUxMi5j
DQo+IEBAIC02NywxMSArNjcsMTIgQEAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50MzJf
dA0KPiBzeGUyX3R4X2J1ZnNfZnJlZV92ZWNfYXZ4NTEyKHN0cnVjdCBzeGUyX3R4X3ENCj4gIAkJ
fQ0KPiAgCQljYWNoZS0+bGVuICs9IHJzX3RocmVzaDsNCj4gDQo+IC0JCWlmIChjYWNoZS0+bGVu
ID49IGNhY2hlLT5mbHVzaHRocmVzaCkgew0KPiArCQlpZiAoY2FjaGUtPmxlbiA+PSBjYWNoZS0+
c2l6ZSkgew0KPiAgCQkJKHZvaWQpcnRlX21lbXBvb2xfb3BzX2VucXVldWVfYnVsayhtcCwNCj4g
IAkJCQkJJmNhY2hlLT5vYmpzW2NhY2hlLT5zaXplXSwgY2FjaGUtPmxlbiAtDQo+IGNhY2hlLT5z
aXplKTsNCj4gIAkJCWNhY2hlLT5sZW4gPSBjYWNoZS0+c2l6ZTsNCj4gIAkJfQ0KPiArDQo+ICAJ
CWdvdG8gZG9uZTsNCj4gIAl9DQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGFwL3J0
ZV9ldGhfdGFwLmMNCj4gYi9kcml2ZXJzL25ldC90YXAvcnRlX2V0aF90YXAuYw0KPiBpbmRleCBi
OTM0NTJmMTY4Li5iMzE0MjU2MWMyIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC90YXAvcnRl
X2V0aF90YXAuYw0KPiArKysgYi9kcml2ZXJzL25ldC90YXAvcnRlX2V0aF90YXAuYw0KPiBAQCAt
NjEsNyArNjEsNyBAQA0KPiAgI2RlZmluZSBUQVBfTUFYX01BQ19BRERSUwkxNg0KPiAgI2RlZmlu
ZSBUQVBfR1NPX01CVUZTX1BFUl9DT1JFCTEyOA0KPiAgI2RlZmluZSBUQVBfR1NPX01CVUZfU0VH
X1NJWkUJMTI4DQo+IC0jZGVmaW5lIFRBUF9HU09fTUJVRl9DQUNIRV9TSVpFCTQNCj4gKyNkZWZp
bmUgVEFQX0dTT19NQlVGX0NBQ0hFX1NJWkUJMzINCj4gICNkZWZpbmUgVEFQX0dTT19NQlVGU19O
VU0gXA0KPiAgCShUQVBfR1NPX01CVUZTX1BFUl9DT1JFICogVEFQX0dTT19NQlVGX0NBQ0hFX1NJ
WkUpDQo+IA0KPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC9pbmNsdWRlL3J0ZV9jb21tb24uaA0KPiBi
L2xpYi9lYWwvaW5jbHVkZS9ydGVfY29tbW9uLmgNCj4gaW5kZXggNzlkMmEwYWI5My4uMGZkMDkw
NjUwNiAxMDA2NDQNCj4gLS0tIGEvbGliL2VhbC9pbmNsdWRlL3J0ZV9jb21tb24uaA0KPiArKysg
Yi9saWIvZWFsL2luY2x1ZGUvcnRlX2NvbW1vbi5oDQo+IEBAIC01NjcsNiArNTY3LDE1IEBAIHN0
YXRpYyB2b2lkDQo+IF9fYXR0cmlidXRlX18oKGRlc3RydWN0b3IoUlRFX1BSSU8ocHJpbykpLCB1
c2VkKSkgZnVuYyh2b2lkKQ0KPiAgI2RlZmluZSBfX3J0ZV9hc3N1bWUoY29uZGl0aW9uKSBfX2Fz
c3VtZShjb25kaXRpb24pDQo+ICAjZW5kaWYNCj4gDQo+ICsvKioNCj4gKyAqIEFsaWdubWVudCBo
aW50IHByZWNvbmRpdGlvbg0KPiArICovDQo+ICsjaWZkZWYgUlRFX1RPT0xDSEFJTl9NU1ZDDQo+
ICsjZGVmaW5lIF9fcnRlX2Fzc3VtZV9hbGlnbmVkKHB0ciwgYWxpZ25tZW50KSAocHRyKQ0KPiAr
I2Vsc2UNCj4gKyNkZWZpbmUgX19ydGVfYXNzdW1lX2FsaWduZWQocHRyLCBhbGlnbm1lbnQpDQo+
IF9fYnVpbHRpbl9hc3N1bWVfYWxpZ25lZChwdHIsIGFsaWdubWVudCkNCj4gKyNlbmRpZg0KPiAr
DQo+ICAvKioNCj4gICAqIERpc2FibGUgQWRkcmVzc1Nhbml0aXplciBvbiBzb21lIGNvZGUNCj4g
ICAqLw0KPiBAQCAtNzc1LDYgKzc4NCw5IEBAIHJ0ZV9pc19hbGlnbmVkKGNvbnN0IHZvaWQgKiBj
b25zdCBfX3J0ZV9yZXN0cmljdA0KPiBwdHIsIGNvbnN0IHVuc2lnbmVkIGludCBhbGlnbikNCj4g
IC8qKiBGb3JjZSBtaW5pbXVtIGNhY2hlIGxpbmUgYWxpZ25tZW50LiAqLw0KPiAgI2RlZmluZSBf
X3J0ZV9jYWNoZV9taW5fYWxpZ25lZCBfX3J0ZV9hbGlnbmVkKFJURV9DQUNIRV9MSU5FX01JTl9T
SVpFKQ0KPiANCj4gKy8qKiBDYWNoZSBhbGlnbm1lbnQgaGludCBwcmVjb25kaXRpb24gKi8NCj4g
KyNkZWZpbmUgX19ydGVfYXNzdW1lX2NhY2hlX2FsaWduZWQocHRyKSBfX3J0ZV9hc3N1bWVfYWxp
Z25lZChwdHIsDQo+IFJURV9DQUNIRV9MSU5FX1NJWkUpDQo+ICsNCj4gICNkZWZpbmUgX1JURV9D
QUNIRV9HVUFSRF9IRUxQRVIyKHVuaXF1ZSkgXA0KPiAgCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVf
U0laRSkgXA0KPiAgCWNoYXIgY2FjaGVfZ3VhcmRfICMjIHVuaXF1ZVtSVEVfQ0FDSEVfTElORV9T
SVpFICoNCj4gUlRFX0NBQ0hFX0dVQVJEX0xJTkVTXQ0KPiBkaWZmIC0tZ2l0IGEvbGliL2VhbC94
ODYvaW5jbHVkZS9ydGVfbWVtY3B5LmgNCj4gYi9saWIvZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1j
cHkuaA0KPiBpbmRleCA4ZWQ4YzU1MDEwLi4zZmUxZThkMjQ3IDEwMDY0NA0KPiAtLS0gYS9saWIv
ZWFsL3g4Ni9pbmNsdWRlL3J0ZV9tZW1jcHkuaA0KPiArKysgYi9saWIvZWFsL3g4Ni9pbmNsdWRl
L3J0ZV9tZW1jcHkuaA0KPiBAQCAtNzA3LDYgKzcwNywzNSBAQCBydGVfbWVtY3B5KHZvaWQgKl9f
cnRlX3Jlc3RyaWN0IGRzdCwgY29uc3Qgdm9pZA0KPiAqX19ydGVfcmVzdHJpY3Qgc3JjLCBzaXpl
X3QgbikNCj4gICNlbmRpZg0KPiAgCQlyZXR1cm4gZHN0Ow0KPiAgCX0NCj4gKwkvKiBDb21tb24g
d2F5IGZvciBzbWFsbCBjb3B5IHNpemUgb2YgNjQtYnl0ZSBibG9ja3MgKi8NCj4gKyNpZiBkZWZp
bmVkIF9fQVZYNTEyRl9fICYmIGRlZmluZWQgUlRFX01FTUNQWV9BVlg1MTINCj4gKwlpZiAoX19y
dGVfY29uc3RhbnQobikgJiYgKG4gJiA2MykgPT0gMCAmJiBuIDw9IDUxMikgew0KPiArI2VsaWYg
ZGVmaW5lZCBSVEVfTUVNQ1BZX0FWWA0KPiArCWlmIChfX3J0ZV9jb25zdGFudChuKSAmJiAobiAm
IDYzKSA9PSAwICYmIG4gPD0gMjU2KSB7DQo+ICsjZWxzZSAvKiBTU0UgaW1wbGVtZW50YXRpb24g
Ki8NCj4gKwlpZiAoX19ydGVfY29uc3RhbnQobikgJiYgKG4gJiA2MykgPT0gMCAmJiBuIDw9IDUx
Mikgew0KPiArI2VuZGlmDQo+ICsJCXZvaWQgKnJldCA9IGRzdDsNCj4gKw0KPiArCQlpZiAobiAm
IDUxMikgew0KPiArCQkJcnRlX21vdjI1NigodWludDhfdCAqKWRzdCArIDAgKiAyNTYsIChjb25z
dCB1aW50OF90DQo+ICopc3JjICsgMCAqIDI1Nik7DQo+ICsJCQlydGVfbW92MjU2KCh1aW50OF90
ICopZHN0ICsgMSAqIDI1NiwgKGNvbnN0IHVpbnQ4X3QNCj4gKilzcmMgKyAxICogMjU2KTsNCj4g
KwkJfQ0KPiArCQlpZiAobiAmIDI1Nikgew0KPiArCQkJcnRlX21vdjI1NigodWludDhfdCAqKWRz
dCwgKGNvbnN0IHVpbnQ4X3QgKilzcmMpOw0KPiArCQkJc3JjID0gKGNvbnN0IHVpbnQ4X3QgKilz
cmMgKyAyNTY7DQo+ICsJCQlkc3QgPSAodWludDhfdCAqKWRzdCArIDI1NjsNCj4gKwkJfQ0KPiAr
CQlpZiAobiAmIDEyOCkgew0KPiArCQkJcnRlX21vdjEyOCgodWludDhfdCAqKWRzdCwgKGNvbnN0
IHVpbnQ4X3QgKilzcmMpOw0KPiArCQkJc3JjID0gKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyAxMjg7
DQo+ICsJCQlkc3QgPSAodWludDhfdCAqKWRzdCArIDEyODsNCj4gKwkJfQ0KPiArCQlpZiAobiAm
IDY0KQ0KPiArCQkJcnRlX21vdjY0KCh1aW50OF90ICopZHN0LCAoY29uc3QgdWludDhfdCAqKXNy
Yyk7DQo+ICsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+IA0KPiAgCS8qIEltcGxlbWVudGF0
aW9uIGZvciBzaXplID4gNjQgYnl0ZXMgZGVwZW5kcyBvbiBhbGlnbm1lbnQgd2l0aA0KPiB2ZWN0
b3IgcmVnaXN0ZXIgc2l6ZS4gKi8NCj4gIAlpZiAoISgoKHVpbnRwdHJfdClkc3QgfCAodWludHB0
cl90KXNyYykgJiBBTElHTk1FTlRfTUFTSykpDQo+IGRpZmYgLS1naXQgYS9saWIvbWVtcG9vbC9t
ZW1wb29sX3RyYWNlLmggYi9saWIvbWVtcG9vbC9tZW1wb29sX3RyYWNlLmgNCj4gaW5kZXggMjNj
ZGExNDczYy4uNjBlNDdjZjY3YiAxMDA2NDQNCj4gLS0tIGEvbGliL21lbXBvb2wvbWVtcG9vbF90
cmFjZS5oDQo+ICsrKyBiL2xpYi9tZW1wb29sL21lbXBvb2xfdHJhY2UuaA0KPiBAQCAtMTE5LDcg
KzExOSw2IEBAIFJURV9UUkFDRV9QT0lOVCgNCj4gIAlydGVfdHJhY2VfcG9pbnRfZW1pdF9pMzIo
c29ja2V0X2lkKTsNCj4gIAlydGVfdHJhY2VfcG9pbnRfZW1pdF9wdHIoY2FjaGUpOw0KPiAgCXJ0
ZV90cmFjZV9wb2ludF9lbWl0X3UzMihjYWNoZS0+bGVuKTsNCj4gLQlydGVfdHJhY2VfcG9pbnRf
ZW1pdF91MzIoY2FjaGUtPmZsdXNodGhyZXNoKTsNCj4gICkNCj4gDQo+ICBSVEVfVFJBQ0VfUE9J
TlQoDQo+IGRpZmYgLS1naXQgYS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5jIGIvbGliL21lbXBv
b2wvcnRlX21lbXBvb2wuYw0KPiBpbmRleCA4MTdlMmI4ZGMxLi40NTdlZjhmZDFiIDEwMDY0NA0K
PiAtLS0gYS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5jDQo+ICsrKyBiL2xpYi9tZW1wb29sL3J0
ZV9tZW1wb29sLmMNCj4gQEAgLTc1MywxNCArNzUzLDEzIEBAIHN0YXRpYyB2b2lkDQo+ICBtZW1w
b29sX2NhY2hlX2luaXQoc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlICpjYWNoZSwgdWludDMyX3Qg
c2l6ZSkNCj4gIHsNCj4gIAljYWNoZS0+c2l6ZSA9IHNpemU7DQo+IC0JY2FjaGUtPmZsdXNodGhy
ZXNoID0gc2l6ZTsgLyogT2Jzb2xldGU7IGZvciBBUEkvQUJJIGNvbXBhdGliaWxpdHkNCj4gcHVy
cG9zZXMgb25seSAqLw0KPiAgCWNhY2hlLT5sZW4gPSAwOw0KPiAgfQ0KPiANCj4gIC8qDQo+ICAg
KiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBjYWNoZSBmb3Igb2JqZWN0cyB0aGF0IGFyZSByZXRy
aWV2ZWQgZnJvbQ0KPiBhbmQNCj4gICAqIHJldHVybmVkIHRvIGFuIHVuZGVybHlpbmcgbWVtcG9v
bC4gVGhpcyBzdHJ1Y3R1cmUgaXMgaWRlbnRpY2FsIHRvDQo+IHRoZQ0KPiAtICogbG9jYWxfY2Fj
aGVbbGNvcmVfaWRdIHBvaW50ZWQgdG8gYnkgdGhlIG1lbXBvb2wgc3RydWN0dXJlLg0KPiArICog
bG9jYWxfY2FjaGVbbGNvcmVfaWRdIGVudHJ5IGluIHRoZSBtZW1wb29sIHN0cnVjdHVyZS4NCj4g
ICAqLw0KPiAgUlRFX0VYUE9SVF9TWU1CT0wocnRlX21lbXBvb2xfY2FjaGVfY3JlYXRlKQ0KPiAg
c3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlICoNCj4gQEAgLTgzOCw5ICs4MzcsMjEgQEAgcnRlX21l
bXBvb2xfY3JlYXRlX2VtcHR5KGNvbnN0IGNoYXIgKm5hbWUsDQo+IHVuc2lnbmVkIG4sIHVuc2ln
bmVkIGVsdF9zaXplLA0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gIAl9DQo+IA0KPiArCS8qDQo+ICsJ
ICogQWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6ZWQgbW92ZSB3
aXRoaW4NCj4gdGhlIG1lbXBvb2wgY2FjaGUuDQo+ICsJICogQHJlZiBydGVfbWVtcG9vbF9kb19n
ZW5lcmljX3B1dCgpIGltcGxlbWVudGF0aW9uLg0KPiArCSAqLw0KPiArCWlmIChjYWNoZV9zaXpl
ICYgMzEpIHsNCj4gKwkJdW5zaWduZWQgaW50IHJvdW5kZWQgPSBSVEVfQUxJR05fTVVMX0NFSUwo
Y2FjaGVfc2l6ZSwgMzIpOw0KPiArCQlSVEVfTUVNUE9PTF9MT0coV0FSTklORywgIiVzIGNhY2hl
IHNpemUgJXUgbm90IGRpdmlzaWJsZSBieQ0KPiAzMiwgdXNpbmcgJXUgaW5zdGVhZC4iLA0KPiAr
CQkJCW5hbWUsIGNhY2hlX3NpemUsIHJvdW5kZWQpOw0KPiArCQljYWNoZV9zaXplID0gcm91bmRl
ZDsNCj4gKwl9DQo+ICsNCj4gIAkvKiBhc2tlZCBjYWNoZSB0b28gYmlnICovDQo+ICAJaWYgKGNh
Y2hlX3NpemUgPiBSVEVfTUVNUE9PTF9DQUNIRV9NQVhfU0laRSB8fA0KPiAgCSAgICBjYWNoZV9z
aXplID4gbikgew0KPiArCQlSVEVfTUVNUE9PTF9MT0coRVJSLCAiQ2FjaGUgc2l6ZSB0b28gYmln
LiIpOw0KPiAgCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ICAJCXJldHVybiBOVUxMOw0KPiAgCX0N
Cj4gQEAgLTg4NCw3ICs4OTUsNyBAQCBydGVfbWVtcG9vbF9jcmVhdGVfZW1wdHkoY29uc3QgY2hh
ciAqbmFtZSwgdW5zaWduZWQNCj4gbiwgdW5zaWduZWQgZWx0X3NpemUsDQo+ICAJCWdvdG8gZXhp
dF91bmxvY2s7DQo+ICAJfQ0KPiANCj4gLQltZW1wb29sX3NpemUgPSBSVEVfTUVNUE9PTF9IRUFE
RVJfU0laRShtcCwgY2FjaGVfc2l6ZSk7DQo+ICsJbWVtcG9vbF9zaXplID0gc2l6ZW9mKHN0cnVj
dCBydGVfbWVtcG9vbCk7DQo+ICAJbWVtcG9vbF9zaXplICs9IHByaXZhdGVfZGF0YV9zaXplOw0K
PiAgCW1lbXBvb2xfc2l6ZSA9IFJURV9BTElHTl9DRUlMKG1lbXBvb2xfc2l6ZSwgUlRFX01FTVBP
T0xfQUxJR04pOw0KPiANCj4gQEAgLTkwMCw3ICs5MTEsNyBAQCBydGVfbWVtcG9vbF9jcmVhdGVf
ZW1wdHkoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQNCj4gbiwgdW5zaWduZWQgZWx0X3NpemUs
DQo+IA0KPiAgCS8qIGluaXQgdGhlIG1lbXBvb2wgc3RydWN0dXJlICovDQo+ICAJbXAgPSBtei0+
YWRkcjsNCj4gLQltZW1zZXQobXAsIDAsIFJURV9NRU1QT09MX0hFQURFUl9TSVpFKG1wLCBjYWNo
ZV9zaXplKSk7DQo+ICsJbWVtc2V0KG1wLCAwLCBtZW1wb29sX3NpemUpOw0KPiAgCXJldCA9IHN0
cmxjcHkobXAtPm5hbWUsIG5hbWUsIHNpemVvZihtcC0+bmFtZSkpOw0KPiAgCWlmIChyZXQgPCAw
IHx8IHJldCA+PSAoaW50KXNpemVvZihtcC0+bmFtZSkpIHsNCj4gIAkJcnRlX2Vycm5vID0gRU5B
TUVUT09MT05HOw0KPiBAQCAtOTM3LDEzICs5NDgsNiBAQCBydGVfbWVtcG9vbF9jcmVhdGVfZW1w
dHkoY29uc3QgY2hhciAqbmFtZSwNCj4gdW5zaWduZWQgbiwgdW5zaWduZWQgZWx0X3NpemUsDQo+
ICAJCWdvdG8gZXhpdF91bmxvY2s7DQo+ICAJfQ0KPiANCj4gLQkvKg0KPiAtCSAqIGxvY2FsX2Nh
Y2hlIHBvaW50ZXIgaXMgc2V0IGV2ZW4gaWYgY2FjaGVfc2l6ZSBpcyB6ZXJvLg0KPiAtCSAqIFRo
ZSBsb2NhbF9jYWNoZSBwb2ludHMgdG8ganVzdCBwYXN0IHRoZSBlbHRfcGFbXSBhcnJheS4NCj4g
LQkgKi8NCj4gLQltcC0+bG9jYWxfY2FjaGUgPSAoc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlICop
DQo+IC0JCVJURV9QVFJfQUREKG1wLCBSVEVfTUVNUE9PTF9IRUFERVJfU0laRShtcCwgMCkpOw0K
PiAtDQo+ICAJLyogSW5pdCBhbGwgZGVmYXVsdCBjYWNoZXMuICovDQo+ICAJaWYgKGNhY2hlX3Np
emUgIT0gMCkgew0KPiAgCQlmb3IgKGxjb3JlX2lkID0gMDsgbGNvcmVfaWQgPCBSVEVfTUFYX0xD
T1JFOyBsY29yZV9pZCsrKQ0KPiBAQCAtMTE5Nyw2ICsxMjAxLDcgQEAgbWVtcG9vbF9vYmpfYXVk
aXQoc3RydWN0IHJ0ZV9tZW1wb29sICptcCwNCj4gX19ydGVfdW51c2VkIHZvaWQgKm9wYXF1ZSwN
Cj4gIAlSVEVfTUVNUE9PTF9DSEVDS19DT09LSUVTKG1wLCAmb2JqLCAxLCAyKTsNCj4gIH0NCj4g
DQo+ICsvKiBjaGVjayBjb29raWVzIGJlZm9yZSBhbmQgYWZ0ZXIgb2JqZWN0cyAqLw0KPiAgc3Rh
dGljIHZvaWQNCj4gIG1lbXBvb2xfYXVkaXRfY29va2llcyhzdHJ1Y3QgcnRlX21lbXBvb2wgKm1w
KQ0KPiAgew0KPiBAQCAtMTIxMywyMyArMTIxOCwyOCBAQCBtZW1wb29sX2F1ZGl0X2Nvb2tpZXMo
c3RydWN0IHJ0ZV9tZW1wb29sICptcCkNCj4gICNkZWZpbmUgbWVtcG9vbF9hdWRpdF9jb29raWVz
KG1wKSBkbyB7fSB3aGlsZSgwKQ0KPiAgI2VuZGlmDQo+IA0KPiAtLyogY2hlY2sgY29va2llcyBi
ZWZvcmUgYW5kIGFmdGVyIG9iamVjdHMgKi8NCj4gKy8qIGNoZWNrIGNhY2hlIHNpemUgY29uc2lz
dGVuY3kgKi8NCj4gIHN0YXRpYyB2b2lkDQo+ICBtZW1wb29sX2F1ZGl0X2NhY2hlKGNvbnN0IHN0
cnVjdCBydGVfbWVtcG9vbCAqbXApDQo+ICB7DQo+IC0JLyogY2hlY2sgY2FjaGUgc2l6ZSBjb25z
aXN0ZW5jeSAqLw0KPiAgCXVuc2lnbmVkIGxjb3JlX2lkOw0KPiArCWNvbnN0IHVpbnQzMl90IGNh
Y2hlX3NpemUgPSBtcC0+Y2FjaGVfc2l6ZTsNCj4gDQo+IC0JaWYgKG1wLT5jYWNoZV9zaXplID09
IDApDQo+IC0JCXJldHVybjsNCj4gKwlpZiAoY2FjaGVfc2l6ZSA+IFJURV9NRU1QT09MX0NBQ0hF
X01BWF9TSVpFKSB7DQo+ICsJCVJURV9NRU1QT09MX0xPRyhDUklULCAiYmFkbmVzcyBvbiBjYWNo
ZSBzaXplIik7DQo+ICsJCXJ0ZV9wYW5pYygiTUVNUE9PTDogaW52YWxpZCBjYWNoZSBzaXplXG4i
KTsNCj4gKwl9DQo+IA0KPiAgCWZvciAobGNvcmVfaWQgPSAwOyBsY29yZV9pZCA8IFJURV9NQVhf
TENPUkU7IGxjb3JlX2lkKyspIHsNCj4gIAkJY29uc3Qgc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hl
ICpjYWNoZTsNCj4gIAkJY2FjaGUgPSAmbXAtPmxvY2FsX2NhY2hlW2xjb3JlX2lkXTsNCj4gLQkJ
aWYgKGNhY2hlLT5sZW4gPiBSVEVfRElNKGNhY2hlLT5vYmpzKSkgew0KPiAtCQkJUlRFX01FTVBP
T0xfTE9HKENSSVQsICJiYWRuZXNzIG9uIGNhY2hlWyV1XSIsDQo+IC0JCQkJbGNvcmVfaWQpOw0K
PiAtCQkJcnRlX3BhbmljKCJNRU1QT09MOiBpbnZhbGlkIGNhY2hlIGxlblxuIik7DQo+ICsJCWlm
IChjYWNoZS0+c2l6ZSAhPSBjYWNoZV9zaXplKSB7DQo+ICsJCQlSVEVfTUVNUE9PTF9MT0coQ1JJ
VCwgImJhZG5lc3Mgb24gY2FjaGVbJXVdIHNpemUiLA0KPiBsY29yZV9pZCk7DQo+ICsJCQlydGVf
cGFuaWMoIk1FTVBPT0w6IGludmFsaWQgY2FjaGVbJXVdIHNpemVcbiIsDQo+IGxjb3JlX2lkKTsN
Cj4gKwkJfQ0KPiArCQlpZiAoY2FjaGUtPmxlbiA+IGNhY2hlX3NpemUpIHsNCj4gKwkJCVJURV9N
RU1QT09MX0xPRyhDUklULCAiYmFkbmVzcyBvbiBjYWNoZVsldV0gbGVuIiwNCj4gbGNvcmVfaWQp
Ow0KPiArCQkJcnRlX3BhbmljKCJNRU1QT09MOiBpbnZhbGlkIGNhY2hlWyV1XSBsZW5cbiIsDQo+
IGxjb3JlX2lkKTsNCj4gIAkJfQ0KPiAgCX0NCj4gIH0NCj4gQEAgLTEyNDEsOSArMTI1MSw2IEBA
IHJ0ZV9tZW1wb29sX2F1ZGl0KHN0cnVjdCBydGVfbWVtcG9vbCAqbXApDQo+ICB7DQo+ICAJbWVt
cG9vbF9hdWRpdF9jYWNoZShtcCk7DQo+ICAJbWVtcG9vbF9hdWRpdF9jb29raWVzKG1wKTsNCj4g
LQ0KPiAtCS8qIEZvciBjYXNlIHdoZXJlIG1lbXBvb2wgREVCVUcgaXMgbm90IHNldCwgYW5kIGNh
Y2hlIHNpemUgaXMgMA0KPiAqLw0KPiAtCVJURV9TRVRfVVNFRChtcCk7DQo+ICB9DQo+IA0KPiAg
LyogZHVtcCB0aGUgc3RhdHVzIG9mIHRoZSBtZW1wb29sIG9uIHRoZSBjb25zb2xlICovDQo+IGRp
ZmYgLS1naXQgYS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5oIGIvbGliL21lbXBvb2wvcnRlX21l
bXBvb2wuaA0KPiBpbmRleCA1MGQ5NThjN2M2Li40OWU4NDAxMjgwIDEwMDY0NA0KPiAtLS0gYS9s
aWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5oDQo+ICsrKyBiL2xpYi9tZW1wb29sL3J0ZV9tZW1wb29s
LmgNCj4gQEAgLTg5LDE0ICs4OSwxNCBAQCBzdHJ1Y3QgX19ydGVfY2FjaGVfYWxpZ25lZCBydGVf
bWVtcG9vbF9kZWJ1Z19zdGF0cw0KPiB7DQo+ICAgKi8NCj4gIHN0cnVjdCBfX3J0ZV9jYWNoZV9h
bGlnbmVkIHJ0ZV9tZW1wb29sX2NhY2hlIHsNCj4gIAl1aW50MzJfdCBzaXplOwkgICAgICAvKio8
IFNpemUgb2YgdGhlIGNhY2hlICovDQo+IC0JdWludDMyX3QgZmx1c2h0aHJlc2g7IC8qKjwgT2Jz
b2xldGU7IGZvciBBUEkvQUJJIGNvbXBhdGliaWxpdHkNCj4gcHVycG9zZXMgb25seSAqLw0KPiAg
CXVpbnQzMl90IGxlbjsJICAgICAgLyoqPCBDdXJyZW50IGNhY2hlIGNvdW50ICovDQo+ICAjaWZk
ZWYgUlRFX0xJQlJURV9NRU1QT09MX1NUQVRTDQo+IC0JdWludDMyX3QgdW51c2VkOw0KPiAgCS8q
DQo+ICAJICogQWx0ZXJuYXRpdmUgbG9jYXRpb24gZm9yIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXBk
YXRlZCBtZW1wb29sDQo+IHN0YXRpc3RpY3MgKHBlci1sY29yZSksDQo+ICAJICogcHJvdmlkaW5n
IGZhc3RlciB1cGRhdGUgYWNjZXNzIHdoZW4gdXNpbmcgYSBtZW1wb29sIGNhY2hlLg0KPiArCSAq
IE5vdGU6IDE2LWJ5dGUgYWxpZ25lZCBmb3Igb3B0aW1hbCBTSU1EIGFjY2Vzcywgd2hlbiB1cGRh
dGluZw0KPiBwYWlycyBvZiBjb3VudGVycy4NCj4gIAkgKi8NCj4gKwlhbGlnbmFzKDE2KQ0KPiAg
CXN0cnVjdCB7DQo+ICAJCXVpbnQ2NF90IHB1dF9idWxrOyAgICAgICAgICAvKio8IE51bWJlciBv
ZiBwdXRzLiAqLw0KPiAgCQl1aW50NjRfdCBwdXRfb2JqczsgICAgICAgICAgLyoqPCBOdW1iZXIg
b2Ygb2JqZWN0cw0KPiBzdWNjZXNzZnVsbHkgcHV0LiAqLw0KPiBAQCAtMTA0LDE1ICsxMDQsOSBA
QCBzdHJ1Y3QgX19ydGVfY2FjaGVfYWxpZ25lZCBydGVfbWVtcG9vbF9jYWNoZSB7DQo+ICAJCXVp
bnQ2NF90IGdldF9zdWNjZXNzX29ianM7ICAvKio8IE9iamVjdHMgc3VjY2Vzc2Z1bGx5DQo+IGFs
bG9jYXRlZC4gKi8NCj4gIAl9IHN0YXRzOyAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgU3Rh
dGlzdGljcyAqLw0KPiAgI2VuZGlmDQo+IC0JLyoqDQo+IC0JICogQ2FjaGUgb2JqZWN0cw0KPiAt
CSAqDQo+IC0JICogTm90ZToNCj4gLQkgKiBDYWNoZSBpcyBhbGxvY2F0ZWQgYXQgZG91YmxlIHNp
emUgZm9yIEFQSS9BQkkgY29tcGF0aWJpbGl0eQ0KPiBwdXJwb3NlcyBvbmx5Lg0KPiAtCSAqIFdo
ZW4gcmVkdWNpbmcgaXRzIHNpemUgYXQgYW4gQVBJL0FCSSBicmVha2luZyByZWxlYXNlLA0KPiAt
CSAqIHJlbWVtYmVyIHRvIGFkZCBhIGNhY2hlIGd1YXJkIGFmdGVyIGl0Lg0KPiAtCSAqLw0KPiAt
CWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkgdm9pZA0KPiAqb2Jqc1tSVEVfTUVNUE9PTF9D
QUNIRV9NQVhfU0laRSAqIDJdOw0KPiArCS8qKiBDYWNoZSBvYmplY3RzICovDQo+ICsJYWxpZ25h
cyhSVEVfQ0FDSEVfTElORV9TSVpFKSB2b2lkDQo+ICpvYmpzW1JURV9NRU1QT09MX0NBQ0hFX01B
WF9TSVpFXTsNCj4gKwlSVEVfQ0FDSEVfR1VBUkQ7DQo+ICB9Ow0KPiANCj4gIC8qKg0KPiBAQCAt
MjQwLDggKzIzNCw3IEBAIHN0cnVjdCBfX3J0ZV9jYWNoZV9hbGlnbmVkIHJ0ZV9tZW1wb29sIHsN
Cj4gIAl1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgICAgICAgICAgICAvKio8IEZsYWdzIG9mIHRoZSBt
ZW1wb29sLiAqLw0KPiAgCWludCBzb2NrZXRfaWQ7ICAgICAgICAgICAgICAgICAgIC8qKjwgU29j
a2V0IGlkIHBhc3NlZCBhdCBjcmVhdGUuDQo+ICovDQo+ICAJdWludDMyX3Qgc2l6ZTsgICAgICAg
ICAgICAgICAgICAgLyoqPCBNYXggc2l6ZSBvZiB0aGUgbWVtcG9vbC4gKi8NCj4gLQl1aW50MzJf
dCBjYWNoZV9zaXplOw0KPiAtCS8qKjwgU2l6ZSBvZiBwZXItbGNvcmUgZGVmYXVsdCBsb2NhbCBj
YWNoZS4gKi8NCj4gKwl1aW50MzJfdCBjYWNoZV9zaXplOyAgICAgICAgICAgICAvKio8IFNpemUg
b2YgcGVyLWxjb3JlIGRlZmF1bHQNCj4gbG9jYWwgY2FjaGUuICovDQo+IA0KPiAgCXVpbnQzMl90
IGVsdF9zaXplOyAgICAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiBhbiBlbGVtZW50LiAqLw0KPiAg
CXVpbnQzMl90IGhlYWRlcl9zaXplOyAgICAgICAgICAgIC8qKjwgU2l6ZSBvZiBoZWFkZXIgKGJl
Zm9yZQ0KPiBlbHQpLiAqLw0KPiBAQCAtMjU3LDEzICsyNTAsMTMgQEAgc3RydWN0IF9fcnRlX2Nh
Y2hlX2FsaWduZWQgcnRlX21lbXBvb2wgew0KPiAgCSAqLw0KPiAgCWludDMyX3Qgb3BzX2luZGV4
Ow0KPiANCj4gLQlzdHJ1Y3QgcnRlX21lbXBvb2xfY2FjaGUgKmxvY2FsX2NhY2hlOyAvKio8IFBl
ci1sY29yZSBsb2NhbCBjYWNoZQ0KPiAqLw0KPiAtDQo+ICAJdWludDMyX3QgcG9wdWxhdGVkX3Np
emU7ICAgICAgICAgLyoqPCBOdW1iZXIgb2YgcG9wdWxhdGVkDQo+IG9iamVjdHMuICovDQo+ICAJ
c3RydWN0IHJ0ZV9tZW1wb29sX29iamhkcl9saXN0IGVsdF9saXN0OyAvKio8IExpc3Qgb2Ygb2Jq
ZWN0cyBpbg0KPiBwb29sICovDQo+ICAJdWludDMyX3QgbmJfbWVtX2NodW5rczsgICAgICAgICAg
LyoqPCBOdW1iZXIgb2YgbWVtb3J5IGNodW5rcyAqLw0KPiAgCXN0cnVjdCBydGVfbWVtcG9vbF9t
ZW1oZHJfbGlzdCBtZW1fbGlzdDsgLyoqPCBMaXN0IG9mIG1lbW9yeQ0KPiBjaHVua3MgKi8NCj4g
DQo+ICsJc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlIGxvY2FsX2NhY2hlW1JURV9NQVhfTENPUkVd
OyAvKio8IFBlci0NCj4gbGNvcmUgbG9jYWwgY2FjaGUgKi8NCj4gKw0KPiAgI2lmZGVmIFJURV9M
SUJSVEVfTUVNUE9PTF9TVEFUUw0KPiAgCS8qKiBQZXItbGNvcmUgc3RhdGlzdGljcy4NCj4gIAkg
Kg0KPiBAQCAtMjcxLDYgKzI2NCw4IEBAIHN0cnVjdCBfX3J0ZV9jYWNoZV9hbGlnbmVkIHJ0ZV9t
ZW1wb29sIHsNCj4gIAkgKi8NCj4gIAlzdHJ1Y3QgcnRlX21lbXBvb2xfZGVidWdfc3RhdHMgc3Rh
dHNbUlRFX01BWF9MQ09SRSArIDFdOw0KPiAgI2VuZGlmDQo+ICsNCj4gKwkvKiBQcml2YXRlIGRh
dGEgYXJlIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1lbXBvb2wNCj4gc3RydWN0dXJl
LiAqLw0KPiAgfTsNCj4gDQo+ICAvKiogU3ByZWFkaW5nIGFtb25nIG1lbW9yeSBjaGFubmVscyBu
b3QgcmVxdWlyZWQuICovDQo+IEBAIC0zNjIsMTggKzM1Nyw2IEBAIHN0cnVjdCBfX3J0ZV9jYWNo
ZV9hbGlnbmVkIHJ0ZV9tZW1wb29sIHsNCj4gICNkZWZpbmUgUlRFX01FTVBPT0xfQ0FDSEVfU1RB
VF9BREQoY2FjaGUsIG5hbWUsIG4pIGRvIHt9IHdoaWxlICgwKQ0KPiAgI2VuZGlmDQo+IA0KPiAt
LyoqDQo+IC0gKiBAaW50ZXJuYWwgQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSBtZW1wb29sIGhl
YWRlci4NCj4gLSAqDQo+IC0gKiBAcGFyYW0gbXANCj4gLSAqICAgUG9pbnRlciB0byB0aGUgbWVt
b3J5IHBvb2wuDQo+IC0gKiBAcGFyYW0gY3MNCj4gLSAqICAgU2l6ZSBvZiB0aGUgcGVyLWxjb3Jl
IGNhY2hlLg0KPiAtICovDQo+IC0jZGVmaW5lIFJURV9NRU1QT09MX0hFQURFUl9TSVpFKG1wLCBj
cykgXA0KPiAtCShzaXplb2YoKihtcCkpICsgKCgoY3MpID09IDApID8gMCA6IFwNCj4gLQkoc2l6
ZW9mKHN0cnVjdCBydGVfbWVtcG9vbF9jYWNoZSkgKiBSVEVfTUFYX0xDT1JFKSkpDQo+IC0NCj4g
IC8qIHJldHVybiB0aGUgaGVhZGVyIG9mIGEgbWVtcG9vbCBvYmplY3QgKGludGVybmFsKSAqLw0K
PiAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRlX21lbXBvb2xfb2JqaGRyICoNCj4gIHJ0ZV9tZW1w
b29sX2dldF9oZWFkZXIodm9pZCAqb2JqKQ0KPiBAQCAtNzE4LDcgKzcwMSw3IEBAIHN0cnVjdCBf
X3J0ZV9jYWNoZV9hbGlnbmVkIHJ0ZV9tZW1wb29sX29wcyB7DQo+ICAJcnRlX21lbXBvb2xfZGVx
dWV1ZV9jb250aWdfYmxvY2tzX3QgZGVxdWV1ZV9jb250aWdfYmxvY2tzOw0KPiAgfTsNCj4gDQo+
IC0jZGVmaW5lIFJURV9NRU1QT09MX01BWF9PUFNfSURYIDE2ICAvKio8IE1heCByZWdpc3RlcmVk
IG9wcyBzdHJ1Y3RzICovDQo+ICsjZGVmaW5lIFJURV9NRU1QT09MX01BWF9PUFNfSURYIDMyICAv
Kio8IE1heCByZWdpc3RlcmVkIG9wcyBzdHJ1Y3RzICovDQo+IA0KPiAgLyoqDQo+ICAgKiBTdHJ1
Y3R1cmUgc3RvcmluZyB0aGUgdGFibGUgb2YgcmVnaXN0ZXJlZCBvcHMgc3RydWN0cywgZWFjaCBv
Zg0KPiB3aGljaCBjb250YWluDQo+IEBAIC0xMDQ5LDcgKzEwMzIsNyBAQCBydGVfbWVtcG9vbF9m
cmVlKHN0cnVjdCBydGVfbWVtcG9vbCAqbXApOw0KPiAgICogICBJZiBjYWNoZV9zaXplIGlzIG5v
bi16ZXJvLCB0aGUgcnRlX21lbXBvb2wgbGlicmFyeSB3aWxsIHRyeSB0bw0KPiAgICogICBsaW1p
dCB0aGUgYWNjZXNzZXMgdG8gdGhlIGNvbW1vbiBsb2NrbGVzcyBwb29sLCBieSBtYWludGFpbmlu
ZyBhDQo+ICAgKiAgIHBlci1sY29yZSBvYmplY3QgY2FjaGUuIFRoaXMgYXJndW1lbnQgbXVzdCBi
ZSBsb3dlciBvciBlcXVhbCB0bw0KPiAtICogICBSVEVfTUVNUE9PTF9DQUNIRV9NQVhfU0laRSBh
bmQgbi4NCj4gKyAqICAgUlRFX01FTVBPT0xfQ0FDSEVfTUFYX1NJWkUgYW5kIG4sIGFuZCBpdCBt
dXN0IGJlIGRpdmlzaWJsZSBieSAzMi4NCj4gICAqICAgVGhlIGFjY2VzcyB0byB0aGUgcGVyLWxj
b3JlIHRhYmxlIGlzIG9mIGNvdXJzZQ0KPiAgICogICBmYXN0ZXIgdGhhbiB0aGUgbXVsdGktcHJv
ZHVjZXIvY29uc3VtZXIgcG9vbC4gVGhlIGNhY2hlIGNhbiBiZQ0KPiAgICogICBkaXNhYmxlZCBp
ZiB0aGUgY2FjaGVfc2l6ZSBhcmd1bWVudCBpcyBzZXQgdG8gMDsgaXQgY2FuIGJlIHVzZWZ1bA0K
PiB0bw0KPiBAQCAtMTM2OCwxNSArMTM1MSwxNiBAQCBydGVfbWVtcG9vbF9jYWNoZV9mcmVlKHN0
cnVjdCBydGVfbWVtcG9vbF9jYWNoZQ0KPiAqY2FjaGUpOw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5
c19pbmxpbmUgc3RydWN0IHJ0ZV9tZW1wb29sX2NhY2hlICoNCj4gIHJ0ZV9tZW1wb29sX2RlZmF1
bHRfY2FjaGUoc3RydWN0IHJ0ZV9tZW1wb29sICptcCwgdW5zaWduZWQgbGNvcmVfaWQpDQo+ICB7
DQo+IC0JaWYgKHVubGlrZWx5KG1wLT5jYWNoZV9zaXplID09IDApKQ0KPiArCWlmICh1bmxpa2Vs
eShsY29yZV9pZCA9PSBMQ09SRV9JRF9BTlkpKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gDQo+IC0J
aWYgKHVubGlrZWx5KGxjb3JlX2lkID09IExDT1JFX0lEX0FOWSkpDQo+ICsJc3RydWN0IHJ0ZV9t
ZW1wb29sX2NhY2hlICpjYWNoZSA9ICZtcC0+bG9jYWxfY2FjaGVbbGNvcmVfaWRdOw0KPiArDQo+
ICsJaWYgKHVubGlrZWx5KGNhY2hlLT5zaXplID09IDApKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4g
DQo+IC0JcnRlX21lbXBvb2xfdHJhY2VfZGVmYXVsdF9jYWNoZShtcCwgbGNvcmVfaWQsDQo+IC0J
CSZtcC0+bG9jYWxfY2FjaGVbbGNvcmVfaWRdKTsNCj4gLQlyZXR1cm4gJm1wLT5sb2NhbF9jYWNo
ZVtsY29yZV9pZF07DQo+ICsJcnRlX21lbXBvb2xfdHJhY2VfZGVmYXVsdF9jYWNoZShtcCwgbGNv
cmVfaWQsIGNhY2hlKTsNCj4gKwlyZXR1cm4gY2FjaGU7DQo+ICB9DQo+IA0KPiAgLyoqDQo+IEBA
IC0xNDQ1LDkgKzE0MjksMjIgQEAgcnRlX21lbXBvb2xfZG9fZ2VuZXJpY19wdXQoc3RydWN0IHJ0
ZV9tZW1wb29sDQo+ICptcCwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+ICAJCSAqIGFyZSBt
b3JlIGhvdCwgZnJvbSB0aGUgdXBwZXIgaGFsZiBvZiB0aGUgY2FjaGUuDQo+ICAJCSAqLw0KPiAg
CQlfX3J0ZV9hc3N1bWUoY2FjaGUtPmxlbiA+IGNhY2hlLT5zaXplIC8gMik7DQo+IC0JCXJ0ZV9t
ZW1wb29sX29wc19lbnF1ZXVlX2J1bGsobXAsICZjYWNoZS0+b2Jqc1swXSwgY2FjaGUtDQo+ID5z
aXplIC8gMik7DQo+IC0JCXJ0ZV9tZW1jcHkoJmNhY2hlLT5vYmpzWzBdLCAmY2FjaGUtPm9ianNb
Y2FjaGUtPnNpemUgLyAyXSwNCj4gLQkJCQlzaXplb2Yodm9pZCAqKSAqIChjYWNoZS0+bGVuIC0g
Y2FjaGUtPnNpemUgLw0KPiAyKSk7DQo+ICsJCXJ0ZV9tZW1wb29sX29wc19lbnF1ZXVlX2J1bGso
bXAsIGNhY2hlLT5vYmpzLCBjYWNoZS0+c2l6ZSAvDQo+IDIpOw0KPiArCQkvKg0KPiArCQkgKiBG
b3IgaW1wcm92ZWQgcnRlX21lbWNweSgpIHBlcmZvcm1hbmNlLCBtb3ZlIGRvd24gb2JqZWN0cw0K
PiArCQkgKiBmcm9tIENQVSBjYWNoZSBsaW5lIGFsaWduZWQgYWRkcmVzcyBpbiBjaHVua3Mgb2Yg
MzINCj4gYnl0ZXMuDQo+ICsJCSAqIE5vdGU6IEZvciBjYWNoZS0+b2Jqc1tjYWNoZS0+c2l6ZSAv
IDJdIHRvIGJlIGNhY2hlIGxpbmUNCj4gYWxpZ25lZCwgY2FjaGUtPnNpemUNCj4gKwkJICogbXVz
dCBiZSBkaXZpc2libGUgYnkgMzIgb24gMzItYml0IGFyY2hpdGVjdHVyZSB3aXRoIDY0LQ0KPiBi
eXRlIGNhY2hlIGxpbmUsDQo+ICsJCSAqIGRpdmlzaWJsZSBieSAzMiBvbiA2NC1iaXQgYXJjaGl0
ZWN0dXJlIHdpdGggMTI4LWJ5dGUNCj4gY2FjaGUgbGluZSwgYW5kDQo+ICsJCSAqIGJlIGRpdmlz
aWJsZSBieSAxNiBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlIHdpdGggNjQtYnl0ZQ0KPiBjYWNoZSBs
aW5lLg0KPiArCQkgKiBGb3IgQVBJIGNvbnNpc3RlbmN5LCByZXF1aXJlIG1lbXBvb2wgY2FjaGUg
c2l6ZSBpcw0KPiBkaXZpc2libGUgYnkgMzIuDQo+ICsJCSAqLw0KPiArCQljb25zdCBzaXplX3Qg
bW92ZSA9IFJURV9BTElHTl9NVUxfQ0VJTCgNCj4gKwkJCQlzaXplb2Yodm9pZCAqKSAqIChjYWNo
ZS0+bGVuIC0gY2FjaGUtPnNpemUgLw0KPiAyKSwgMzIpOw0KPiArCQlfX3J0ZV9hc3N1bWUobW92
ZSA+PSAzMik7DQo+ICsJCV9fcnRlX2Fzc3VtZSgobW92ZSAmIDMxKSA9PSAwKTsNCj4gKwkJcnRl
X21lbWNweShjYWNoZS0+b2JqcywgX19ydGVfYXNzdW1lX2NhY2hlX2FsaWduZWQoJmNhY2hlLQ0K
PiA+b2Jqc1tjYWNoZS0+c2l6ZSAvIDJdKSwNCj4gKwkJCQltb3ZlKTsNCj4gIAkJY2FjaGVfb2Jq
cyA9ICZjYWNoZS0+b2Jqc1tjYWNoZS0+bGVuIC0gY2FjaGUtPnNpemUgLyAyXTsNCj4gIAkJY2Fj
aGUtPmxlbiA9IGNhY2hlLT5sZW4gLSBjYWNoZS0+c2l6ZSAvIDIgKyBuOw0KPiAgCX0gZWxzZSB7
DQo+IEBAIC0xODkyLDggKzE4ODksNyBAQCB2b2lkIHJ0ZV9tZW1wb29sX2F1ZGl0KHN0cnVjdCBy
dGVfbWVtcG9vbCAqbXApOw0KPiAgICovDQo+ICBzdGF0aWMgaW5saW5lIHZvaWQgKnJ0ZV9tZW1w
b29sX2dldF9wcml2KHN0cnVjdCBydGVfbWVtcG9vbCAqbXApDQo+ICB7DQo+IC0JcmV0dXJuIChj
aGFyICopbXAgKw0KPiAtCQlSVEVfTUVNUE9PTF9IRUFERVJfU0laRShtcCwgbXAtPmNhY2hlX3Np
emUpOw0KPiArCXJldHVybiAoY2hhciAqKW1wICsgc2l6ZW9mKHN0cnVjdCBydGVfbWVtcG9vbCk7
DQo+ICB9DQo+IA0KPiAgLyoqDQo+IGRpZmYgLS1naXQgYS9saWIvc3RhY2svbWVzb24uYnVpbGQg
Yi9saWIvc3RhY2svbWVzb24uYnVpbGQNCj4gaW5kZXggMTgxNzdhNzQyZi4uNTBlNjg4NTIyZSAx
MDA2NDQNCj4gLS0tIGEvbGliL3N0YWNrL21lc29uLmJ1aWxkDQo+ICsrKyBiL2xpYi9zdGFjay9t
ZXNvbi5idWlsZA0KPiBAQCAtMSw3ICsxLDcgQEANCj4gICMgU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEJTRC0zLUNsYXVzZQ0KPiAgIyBDb3B5cmlnaHQoYykgMjAxOSBJbnRlbCBDb3Jwb3JhdGlv
bg0KPiANCj4gLXNvdXJjZXMgPSBmaWxlcygncnRlX3N0YWNrLmMnLCAncnRlX3N0YWNrX3N0ZC5j
JywgJ3J0ZV9zdGFja19sZi5jJykNCj4gK3NvdXJjZXMgPSBmaWxlcygncnRlX3N0YWNrLmMnLCAn
cnRlX3N0YWNrX3N0ZC5jJywgJ3J0ZV9zdGFja19sZi5jJywNCj4gJ3J0ZV9zdGFja19waWxlLmMn
KQ0KPiAgaGVhZGVycyA9IGZpbGVzKCdydGVfc3RhY2suaCcpDQo+ICAjIHN1YmhlYWRlcnMsIG5v
dCBmb3IgZGlyZWN0IGluY2x1c2lvbiBieSBhcHBzDQo+ICBpbmRpcmVjdF9oZWFkZXJzICs9IGZp
bGVzKA0KPiBAQCAtMTAsNCArMTAsNSBAQCBpbmRpcmVjdF9oZWFkZXJzICs9IGZpbGVzKA0KPiAg
ICAgICAgICAncnRlX3N0YWNrX2xmX2dlbmVyaWMuaCcsDQo+ICAgICAgICAgICdydGVfc3RhY2tf
bGZfYzExLmgnLA0KPiAgICAgICAgICAncnRlX3N0YWNrX2xmX3N0dWJzLmgnLA0KPiArICAgICAg
ICAncnRlX3N0YWNrX3BpbGUuaCcsDQo+ICApDQo+IGRpZmYgLS1naXQgYS9saWIvc3RhY2svcnRl
X3N0YWNrLmMgYi9saWIvc3RhY2svcnRlX3N0YWNrLmMNCj4gaW5kZXggNGM3OGZlNGI0Yi4uYTRi
YmY4YTRkNyAxMDA2NDQNCj4gLS0tIGEvbGliL3N0YWNrL3J0ZV9zdGFjay5jDQo+ICsrKyBiL2xp
Yi9zdGFjay9ydGVfc3RhY2suYw0KPiBAQCAtMSw1ICsxLDYgQEANCj4gIC8qIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gICAqIENvcHlyaWdodChjKSAyMDE5IEludGVs
IENvcnBvcmF0aW9uDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyNiBTbWFydFNoYXJlIFN5c3RlbXMN
Cj4gICAqLw0KPiANCj4gICNpbmNsdWRlIDxzdGRhbGlnbi5oPg0KPiBAQCAtMzIsNiArMzMsOCBA
QCBydGVfc3RhY2tfaW5pdChzdHJ1Y3QgcnRlX3N0YWNrICpzLCB1bnNpZ25lZCBpbnQNCj4gY291
bnQsIHVpbnQzMl90IGZsYWdzKQ0KPiANCj4gIAlpZiAoZmxhZ3MgJiBSVEVfU1RBQ0tfRl9MRikN
Cj4gIAkJcnRlX3N0YWNrX2xmX2luaXQocywgY291bnQpOw0KPiArCWVsc2UgaWYgKGZsYWdzICYg
UlRFX1NUQUNLX0ZfUElMRSkNCj4gKwkJcnRlX3N0YWNrX3BpbGVfaW5pdChzLCBjb3VudCk7DQo+
ICAJZWxzZQ0KPiAgCQlydGVfc3RhY2tfc3RkX2luaXQocyk7DQo+ICB9DQo+IEBAIC00MSw2ICs0
NCw4IEBAIHJ0ZV9zdGFja19nZXRfbWVtc2l6ZSh1bnNpZ25lZCBpbnQgY291bnQsIHVpbnQzMl90
DQo+IGZsYWdzKQ0KPiAgew0KPiAgCWlmIChmbGFncyAmIFJURV9TVEFDS19GX0xGKQ0KPiAgCQly
ZXR1cm4gcnRlX3N0YWNrX2xmX2dldF9tZW1zaXplKGNvdW50KTsNCj4gKwllbHNlIGlmIChmbGFn
cyAmIFJURV9TVEFDS19GX1BJTEUpDQo+ICsJCXJldHVybiBydGVfc3RhY2tfcGlsZV9nZXRfbWVt
c2l6ZShjb3VudCk7DQo+ICAJZWxzZQ0KPiAgCQlyZXR1cm4gcnRlX3N0YWNrX3N0ZF9nZXRfbWVt
c2l6ZShjb3VudCk7DQo+ICB9DQo+IEBAIC01OCw3ICs2MywxMSBAQCBydGVfc3RhY2tfY3JlYXRl
KGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludA0KPiBjb3VudCwgaW50IHNvY2tldF9pZCwN
Cj4gIAl1bnNpZ25lZCBpbnQgc3o7DQo+ICAJaW50IHJldDsNCj4gDQo+IC0JaWYgKGZsYWdzICYg
fihSVEVfU1RBQ0tfRl9MRikpIHsNCj4gKwlpZiAoZmxhZ3MgJiB+KFJURV9TVEFDS19GX0xGIHwg
UlRFX1NUQUNLX0ZfUElMRSkpIHsNCj4gKwkJU1RBQ0tfTE9HX0VSUigiVW5zdXBwb3J0ZWQgc3Rh
Y2sgZmxhZ3MgJSN4IiwgZmxhZ3MpOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsJaWYg
KChmbGFncyAmIFJURV9TVEFDS19GX0xGKSAmJiAoZmxhZ3MgJiBSVEVfU1RBQ0tfRl9QSUxFKSkg
ew0KPiAgCQlTVEFDS19MT0dfRVJSKCJVbnN1cHBvcnRlZCBzdGFjayBmbGFncyAlI3giLCBmbGFn
cyk7DQo+ICAJCXJldHVybiBOVUxMOw0KPiAgCX0NCj4gQEAgLTczLDYgKzgyLDEzIEBAIHJ0ZV9z
dGFja19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50DQo+IGNvdW50LCBpbnQg
c29ja2V0X2lkLA0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gIAl9DQo+ICAjZW5kaWYNCj4gKyNpZiAh
ZGVmaW5lZChSVEVfU1RBQ0tfUElMRV9TVVBQT1JURUQpDQo+ICsJaWYgKGZsYWdzICYgUlRFX1NU
QUNLX0ZfUElMRSkgew0KPiArCQlTVEFDS19MT0dfRVJSKCJQaWxlIGlzIG5vdCBzdXBwb3J0ZWQg
b24geW91ciBwbGF0Zm9ybSIpOw0KPiArCQlydGVfZXJybm8gPSBFTk9UU1VQOw0KPiArCQlyZXR1
cm4gTlVMTDsNCj4gKwl9DQo+ICsjZW5kaWYNCj4gDQo+ICAJc3ogPSBydGVfc3RhY2tfZ2V0X21l
bXNpemUoY291bnQsIGZsYWdzKTsNCj4gDQo+IGRpZmYgLS1naXQgYS9saWIvc3RhY2svcnRlX3N0
YWNrLmggYi9saWIvc3RhY2svcnRlX3N0YWNrLmgNCj4gaW5kZXggZmQxN2FjNzkxZC4uYmY2NGRi
YzdiYyAxMDA2NDQNCj4gLS0tIGEvbGliL3N0YWNrL3J0ZV9zdGFjay5oDQo+ICsrKyBiL2xpYi9z
dGFjay9ydGVfc3RhY2suaA0KPiBAQCAtMSw1ICsxLDYgQEANCj4gIC8qIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gICAqIENvcHlyaWdodChjKSAyMDE5IEludGVsIENv
cnBvcmF0aW9uDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyNiBTbWFydFNoYXJlIFN5c3RlbXMNCj4g
ICAqLw0KPiANCj4gIC8qKg0KPiBAQCAtMjgsMTEgKzI5LDQ1IEBADQo+ICAjZGVmaW5lIFJURV9T
VEFDS19OQU1FU0laRSAoUlRFX01FTVpPTkVfTkFNRVNJWkUgLSBcDQo+ICAJCQkgICBzaXplb2Yo
UlRFX1NUQUNLX01aX1BSRUZJWCkgKyAxKQ0KPiANCj4gK3N0YXRpY19hc3NlcnQoKChzaXplb2Yo
dm9pZCAqKSAqIFJURV9TVEFDS19QSUxFX0JVTEtfU0laRSkgJg0KPiBSVEVfQ0FDSEVfTElORV9N
QVNLKSA9PSAwLA0KPiArCQkiUGlsZSBidWxrIHNpemUgbXVzdCBiZSBkaXZpc2libGUgYnkgQ1BV
IGNhY2hlIGxpbmUgc2l6ZSIpOw0KPiArDQo+ICsvKiBOb3RlOiBBbHNvIHVzZWQgYXMgc29sbyAo
c2luZ2xlLW9iamVjdCkgcGlsZSBlbGVtZW50LiAqLw0KPiAgc3RydWN0IHJ0ZV9zdGFja19sZl9l
bGVtIHsNCj4gIAl2b2lkICpkYXRhOwkJCS8qKjwgRGF0YSBwb2ludGVyICovDQo+ICAJc3RydWN0
IHJ0ZV9zdGFja19sZl9lbGVtICpuZXh0OwkvKio8IE5leHQgcG9pbnRlciAqLw0KPiAgfTsNCj4g
DQo+ICsvKg0KPiArICogQnVsayAobXVsdGktb2JqZWN0KSBwaWxlIGVsZW1lbnQuDQo+ICsgKiBJ
bmhlcml0ZWQgZnJvbSB0aGUgcnRlX3N0YWNrX2xmX2VsZW0gKHNpbmdsZS1vYmplY3QpIGNsYXNz
LA0KPiArICogYW5kIGV4dGVuZGVkIHdpdGggYW4gYXJyYXkgZm9yIGhvbGRpbmcgYSBidWxrIG9m
IG9iamVjdCBwb2ludGVycy4NCj4gKyAqLw0KPiArc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtf
ZWxlbSB7DQo+ICsJLyogVGhlIGZpcnN0IHBhcnQgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhl
IHJ0ZV9zdGFja19sZl9lbGVtDQo+IHBhcmVudCBjbGFzcy4gKi8NCj4gKwl2b2lkICpkYXRhOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGF0YSBwb2ludGVyDQo+ICh1bnVz
ZWQpICovDQo+ICsJc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqbmV4dDsgICAgICAv
Kio8IE5leHQgcG9pbnRlciAqLw0KPiArCS8qIFRoZSBzZWNvbmQgcGFydCBkaWZmZXJzLiAqLw0K
PiArCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkNCj4gKwl2b2lkICpvYmpzW1JURV9TVEFD
S19QSUxFX0JVTEtfU0laRV07ICAgICAgIC8qKjwgQnVsayAobXVsdGktDQo+IG9iamVjdCkgcG9p
bnRlcnMgKi8NCj4gK307DQo+ICsNCj4gK3N0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBydGVf
c3RhY2tfbGZfZWxlbSkgPT0NCj4gKwkJc2l6ZW9mKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAq
KSArIHNpemVvZih2b2lkKiksDQo+ICsJCSJQYXJlbnQgdHlwZSBoYXMgY2hhbmdlZCIpOw0KPiAr
c3RhdGljX2Fzc2VydChSVEVfU0laRU9GX0ZJRUxEKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSwg
bmV4dCkgPT0NCj4gKwkJUlRFX1NJWkVPRl9GSUVMRChzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVs
a19lbGVtLCBuZXh0KSwNCj4gKwkJIkluaGVyaXRlZCB0eXBlIG1pc21hdGNoIik7DQo+ICtzdGF0
aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSwgbmV4dCkgPT0NCj4g
KwkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSwgbmV4dCksDQo+ICsJ
CSJJbmhlcml0ZWQgdHlwZSBtaXNtYXRjaCIpOw0KPiArc3RhdGljX2Fzc2VydChSVEVfU0laRU9G
X0ZJRUxEKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSwgZGF0YSkgPT0NCj4gKwkJUlRFX1NJWkVP
Rl9GSUVMRChzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtLCBkYXRhKSwNCj4gKwkJIklu
aGVyaXRlZCB0eXBlIG1pc21hdGNoIik7DQo+ICtzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVj
dCBydGVfc3RhY2tfbGZfZWxlbSwgZGF0YSkgPT0NCj4gKwkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9z
dGFja19waWxlX2J1bGtfZWxlbSwgZGF0YSksDQo+ICsJCSJJbmhlcml0ZWQgdHlwZSBtaXNtYXRj
aCIpOw0KPiArDQo+ICBzdHJ1Y3QgX19ydGVfYWxpZ25lZCgxNikgcnRlX3N0YWNrX2xmX2hlYWQg
ew0KPiAgCXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqdG9wOyAvKio8IFN0YWNrIHRvcCAqLw0K
PiAgCXVpbnQ2NF90IGNudDsgLyoqPCBNb2RpZmljYXRpb24gY291bnRlciBmb3IgYXZvaWRpbmcg
QUJBIHByb2JsZW0NCj4gKi8NCj4gQEAgLTUxLDEyICs4NiwzNSBAQCBzdHJ1Y3QgcnRlX3N0YWNr
X2xmX2xpc3Qgew0KPiAgc3RydWN0IHJ0ZV9zdGFja19sZiB7DQo+ICAJLyoqIExJRk8gbGlzdCBv
ZiBlbGVtZW50cyAqLw0KPiAgCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkgc3RydWN0IHJ0
ZV9zdGFja19sZl9saXN0IHVzZWQ7DQo+ICsJUlRFX0NBQ0hFX0dVQVJEOw0KPiAgCS8qKiBMSUZP
IGxpc3Qgb2YgZnJlZSBlbGVtZW50cyAqLw0KPiAgCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0la
RSkgc3RydWN0IHJ0ZV9zdGFja19sZl9saXN0IGZyZWU7DQo+ICsJUlRFX0NBQ0hFX0dVQVJEOw0K
PiAgCS8qKiBMSUZPIGVsZW1lbnRzICovDQo+ICAJYWxpZ25hcyhSVEVfQ0FDSEVfTElORV9TSVpF
KSBzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gZWxlbXNbXTsNCj4gIH07DQo+IA0KPiArLyogUGls
ZSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aHJlZSBsb2NrLWZyZWUgTElGTy1saWtlIGxpc3RzOg0K
PiArICogIC0gQSBsaXN0IG9mIGVsZW1lbnRzLCBlYWNoIGVsZW1lbnQgaG9sZGluZyBhIGJ1bGsg
b2YgcG9pbnRlcnMgdG8NCj4gb2JqZWN0cy4NCj4gKyAqICAtIEEgbGlzdCBvZiBlbGVtZW50cywg
ZWFjaCBlbGVtZW50IGhvbGRpbmcgb25lIHBvaW50ZXIgdG8gYW4NCj4gb2JqZWN0Lg0KPiArICog
IC0gQSBsaXN0IG9mIGZyZWUgbGlua2VkLWxpc3QgZWxlbWVudHMuDQo+ICsgKi8NCj4gK3N0cnVj
dCBydGVfc3RhY2tfcGlsZSB7DQo+ICsJLyoqIExJRk8gbGlzdCBvZiBidWxrIChtdWx0aS1vYmpl
Y3QpIGVsZW1lbnRzICovDQo+ICsJYWxpZ25hcyhSVEVfQ0FDSEVfTElORV9TSVpFKSBzdHJ1Y3Qg
cnRlX3N0YWNrX2xmX2xpc3QgYnVsazsNCj4gKwlSVEVfQ0FDSEVfR1VBUkQ7DQo+ICsJLyoqIExJ
Rk8gbGlzdCBvZiBzb2xvIChzaW5nbGUtb2JqZWN0KSBlbGVtZW50cyAqLw0KPiArCWFsaWduYXMo
UlRFX0NBQ0hFX0xJTkVfU0laRSkgc3RydWN0IHJ0ZV9zdGFja19sZl9saXN0IHNvbG87DQo+ICsJ
UlRFX0NBQ0hFX0dVQVJEOw0KPiArCS8qKiBMSUZPIGxpc3Qgb2YgZnJlZSBidWxrIGVsZW1lbnRz
ICovDQo+ICsJYWxpZ25hcyhSVEVfQ0FDSEVfTElORV9TSVpFKSBzdHJ1Y3QgcnRlX3N0YWNrX2xm
X2xpc3QgZnJlZV9idWxrOw0KPiArCVJURV9DQUNIRV9HVUFSRDsNCj4gKwkvKiogTElGTyBsaXN0
IG9mIGZyZWUgc29sbyBlbGVtZW50cyAqLw0KPiArCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0la
RSkgc3RydWN0IHJ0ZV9zdGFja19sZl9saXN0IGZyZWVfc29sbzsNCj4gKwlSVEVfQ0FDSEVfR1VB
UkQ7DQo+ICsJLyoqIExJRk8gZWxlbWVudHMgZm9sbG93LCBmaXJzdCBidWxrLCB0aGVuIHNvbG8g
Ki8NCj4gK307DQo+ICsNCj4gIC8qIFN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBMSUZPLCBpdHMg
Y3VycmVudCBsZW5ndGgsIGFuZCBhIGxvY2sgZm9yDQo+IG11dHVhbA0KPiAgICogZXhjbHVzaW9u
Lg0KPiAgICovDQo+IEBAIC03OCw2ICsxMzYsNyBAQCBzdHJ1Y3QgX19ydGVfY2FjaGVfYWxpZ25l
ZCBydGVfc3RhY2sgew0KPiAgCXVpbnQzMl90IGZsYWdzOyAvKio8IEZsYWdzIHN1cHBsaWVkIGF0
IGNyZWF0aW9uLiAqLw0KPiAgCXVuaW9uIHsNCj4gIAkJc3RydWN0IHJ0ZV9zdGFja19sZiBzdGFj
a19sZjsgLyoqPCBMb2NrLWZyZWUgTElGTw0KPiBzdHJ1Y3R1cmUuICovDQo+ICsJCXN0cnVjdCBy
dGVfc3RhY2tfcGlsZSBzdGFja19waWxlOyAvKio8IExvY2stZnJlZSBwaWxlDQo+IChMSUZPLWxp
a2UpIHN0cnVjdHVyZS4gKi8NCj4gIAkJc3RydWN0IHJ0ZV9zdGFja19zdGQgc3RhY2tfc3RkOwkv
Kio8IExJRk8gc3RydWN0dXJlLiAqLw0KPiAgCX07DQo+ICB9Ow0KPiBAQCAtODgsOCArMTQ3LDE2
IEBAIHN0cnVjdCBfX3J0ZV9jYWNoZV9hbGlnbmVkIHJ0ZV9zdGFjayB7DQo+ICAgKi8NCj4gICNk
ZWZpbmUgUlRFX1NUQUNLX0ZfTEYgMHgwMDAxDQo+IA0KPiArLyoqDQo+ICsgKiBUaGUgc3RhY2st
bGlrZSBwaWxlIHVzZXMgbG9jay1mcmVlIHB1c2ggYW5kIHBvcCBmdW5jdGlvbnMuDQo+ICsgKiBJ
dCBpcyBvcHRpbWl6ZWQgZm9yIGJ1bGtzIG9mIG9iamVjdHMsIGFuZCBpcyBub3Qgc3RyaWN0bHkg
TElGTy4NCj4gKyAqIFRoaXMgZmxhZyBpcyBvbmx5IHN1cHBvcnRlZCBvbiB4ODZfNjQgb3IgYXJt
NjQgcGxhdGZvcm1zLA0KPiBjdXJyZW50bHkuDQo+ICsgKi8NCj4gKyNkZWZpbmUgUlRFX1NUQUNL
X0ZfUElMRSAweDAwMDINCj4gKw0KPiAgI2luY2x1ZGUgInJ0ZV9zdGFja19zdGQuaCINCj4gICNp
bmNsdWRlICJydGVfc3RhY2tfbGYuaCINCj4gKyNpbmNsdWRlICJydGVfc3RhY2tfcGlsZS5oIg0K
PiANCj4gICNpZmRlZiBfX2NwbHVzcGx1cw0KPiAgZXh0ZXJuICJDIiB7DQo+IEBAIC0xMDgsMTMg
KzE3NSwxNSBAQCBleHRlcm4gIkMiIHsNCj4gICAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3Rz
IHB1c2hlZCAoZWl0aGVyIDAgb3IgKm4qKS4NCj4gICAqLw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5
c19pbmxpbmUgdW5zaWduZWQgaW50DQo+IC1ydGVfc3RhY2tfcHVzaChzdHJ1Y3QgcnRlX3N0YWNr
ICpzLCB2b2lkICogY29uc3QgKm9ial90YWJsZSwgdW5zaWduZWQNCj4gaW50IG4pDQo+ICtydGVf
c3RhY2tfcHVzaChzdHJ1Y3QgcnRlX3N0YWNrICpzLCB2b2lkICogY29uc3QgKiBfX3J0ZV9yZXN0
cmljdA0KPiBvYmpfdGFibGUsIHVuc2lnbmVkIGludCBuKQ0KPiAgew0KPiAgCVJURV9BU1NFUlQo
cyAhPSBOVUxMKTsNCj4gIAlSVEVfQVNTRVJUKG9ial90YWJsZSAhPSBOVUxMKTsNCj4gDQo+ICAJ
aWYgKHMtPmZsYWdzICYgUlRFX1NUQUNLX0ZfTEYpDQo+ICAJCXJldHVybiBfX3J0ZV9zdGFja19s
Zl9wdXNoKHMsIG9ial90YWJsZSwgbik7DQo+ICsJZWxzZSBpZiAocy0+ZmxhZ3MgJiBSVEVfU1RB
Q0tfRl9QSUxFKQ0KPiArCQlyZXR1cm4gX19ydGVfc3RhY2tfcGlsZV9wdXNoKHMsIG9ial90YWJs
ZSwgbik7DQo+ICAJZWxzZQ0KPiAgCQlyZXR1cm4gX19ydGVfc3RhY2tfc3RkX3B1c2gocywgb2Jq
X3RhYmxlLCBuKTsNCj4gIH0NCj4gQEAgLTEzMiwxMyArMjAxLDE1IEBAIHJ0ZV9zdGFja19wdXNo
KHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKiBjb25zdA0KPiAqb2JqX3RhYmxlLCB1bnNpZ25l
ZCBpbnQgbikNCj4gICAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIHBvcHBlZCAoZWl0aGVy
IDAgb3IgKm4qKS4NCj4gICAqLw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWdu
ZWQgaW50DQo+IC1ydGVfc3RhY2tfcG9wKHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKipvYmpf
dGFibGUsIHVuc2lnbmVkIGludCBuKQ0KPiArcnRlX3N0YWNrX3BvcChzdHJ1Y3QgcnRlX3N0YWNr
ICpzLCB2b2lkICoqIF9fcnRlX3Jlc3RyaWN0IG9ial90YWJsZSwNCj4gdW5zaWduZWQgaW50IG4p
DQo+ICB7DQo+ICAJUlRFX0FTU0VSVChzICE9IE5VTEwpOw0KPiAgCVJURV9BU1NFUlQob2JqX3Rh
YmxlICE9IE5VTEwpOw0KPiANCj4gIAlpZiAocy0+ZmxhZ3MgJiBSVEVfU1RBQ0tfRl9MRikNCj4g
IAkJcmV0dXJuIF9fcnRlX3N0YWNrX2xmX3BvcChzLCBvYmpfdGFibGUsIG4pOw0KPiArCWVsc2Ug
aWYgKHMtPmZsYWdzICYgUlRFX1NUQUNLX0ZfUElMRSkNCj4gKwkJcmV0dXJuIF9fcnRlX3N0YWNr
X3BpbGVfcG9wKHMsIG9ial90YWJsZSwgbik7DQo+ICAJZWxzZQ0KPiAgCQlyZXR1cm4gX19ydGVf
c3RhY2tfc3RkX3BvcChzLCBvYmpfdGFibGUsIG4pOw0KPiAgfQ0KPiBAQCAtMTU4LDYgKzIyOSw4
IEBAIHJ0ZV9zdGFja19jb3VudChzdHJ1Y3QgcnRlX3N0YWNrICpzKQ0KPiANCj4gIAlpZiAocy0+
ZmxhZ3MgJiBSVEVfU1RBQ0tfRl9MRikNCj4gIAkJcmV0dXJuIF9fcnRlX3N0YWNrX2xmX2NvdW50
KHMpOw0KPiArCWVsc2UgaWYgKHMtPmZsYWdzICYgUlRFX1NUQUNLX0ZfUElMRSkNCj4gKwkJcmV0
dXJuIF9fcnRlX3N0YWNrX3BpbGVfY291bnQocyk7DQo+ICAJZWxzZQ0KPiAgCQlyZXR1cm4gX19y
dGVfc3RhY2tfc3RkX2NvdW50KHMpOw0KPiAgfQ0KPiBkaWZmIC0tZ2l0IGEvbGliL3N0YWNrL3J0
ZV9zdGFja19sZi5oIGIvbGliL3N0YWNrL3J0ZV9zdGFja19sZi5oDQo+IGluZGV4IGYyYjAxMmNk
MGUuLjY1NTYyMGFhYTkgMTAwNjQ0DQo+IC0tLSBhL2xpYi9zdGFjay9ydGVfc3RhY2tfbGYuaA0K
PiArKysgYi9saWIvc3RhY2svcnRlX3N0YWNrX2xmLmgNCj4gQEAgLTM0LDcgKzM0LDcgQEANCj4g
ICAqLw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ICBfX3J0
ZV9zdGFja19sZl9wdXNoKHN0cnVjdCBydGVfc3RhY2sgKnMsDQo+IC0JCSAgICB2b2lkICogY29u
c3QgKm9ial90YWJsZSwNCj4gKwkJICAgIHZvaWQgKiBjb25zdCAqIF9fcnRlX3Jlc3RyaWN0IG9i
al90YWJsZSwNCj4gIAkJICAgIHVuc2lnbmVkIGludCBuKQ0KPiAgew0KPiAgCXN0cnVjdCBydGVf
c3RhY2tfbGZfZWxlbSAqdG1wLCAqZmlyc3QsICpsYXN0ID0gTlVMTDsNCj4gQEAgLTcxLDcgKzcx
LDggQEAgX19ydGVfc3RhY2tfbGZfcHVzaChzdHJ1Y3QgcnRlX3N0YWNrICpzLA0KPiAgICogICAt
IEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBwb3BwZWQuDQo+ICAgKi8NCj4gIHN0YXRpYyBfX3J0
ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiAtX19ydGVfc3RhY2tfbGZfcG9wKHN0cnVj
dCBydGVfc3RhY2sgKnMsIHZvaWQgKipvYmpfdGFibGUsIHVuc2lnbmVkIGludA0KPiBuKQ0KPiAr
X19ydGVfc3RhY2tfbGZfcG9wKHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKiogX19ydGVfcmVz
dHJpY3QNCj4gb2JqX3RhYmxlLA0KPiArCQkgICB1bnNpZ25lZCBpbnQgbikNCj4gIHsNCj4gIAlz
dHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKmZpcnN0LCAqbGFzdCA9IE5VTEw7DQo+IA0KPiBAQCAt
NzksNiArODAsNyBAQCBfX3J0ZV9zdGFja19sZl9wb3Aoc3RydWN0IHJ0ZV9zdGFjayAqcywgdm9p
ZA0KPiAqKm9ial90YWJsZSwgdW5zaWduZWQgaW50IG4pDQo+ICAJCXJldHVybiAwOw0KPiANCj4g
IAkvKiBQb3AgbiB1c2VkIGVsZW1lbnRzICovDQo+ICsJX19ydGVfYXNzdW1lKG9ial90YWJsZSAh
PSBOVUxMKTsNCj4gIAlmaXJzdCA9IF9fcnRlX3N0YWNrX2xmX3BvcF9lbGVtcygmcy0+c3RhY2tf
bGYudXNlZCwNCj4gIAkJCQkJIG4sIG9ial90YWJsZSwgJmxhc3QpOw0KPiAgCWlmICh1bmxpa2Vs
eShmaXJzdCA9PSBOVUxMKSkNCj4gZGlmZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3RhY2tfbGZf
YzExLmgNCj4gYi9saWIvc3RhY2svcnRlX3N0YWNrX2xmX2MxMS5oDQo+IGluZGV4IGI5N2UwMmQ2
YTEuLjUwMWU5ODVhNDkgMTAwNjQ0DQo+IC0tLSBhL2xpYi9zdGFjay9ydGVfc3RhY2tfbGZfYzEx
LmgNCj4gKysrIGIvbGliL3N0YWNrL3J0ZV9zdGFja19sZl9jMTEuaA0KPiBAQCAtOTksNyArOTks
NyBAQCBfX3J0ZV9zdGFja19sZl9wdXNoX2VsZW1zKHN0cnVjdCBydGVfc3RhY2tfbGZfbGlzdA0K
PiAqbGlzdCwNCj4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHN0cnVjdCBydGVfc3RhY2tf
bGZfZWxlbSAqDQo+ICBfX3J0ZV9zdGFja19sZl9wb3BfZWxlbXMoc3RydWN0IHJ0ZV9zdGFja19s
Zl9saXN0ICpsaXN0LA0KPiAgCQkJIHVuc2lnbmVkIGludCBudW0sDQo+IC0JCQkgdm9pZCAqKm9i
al90YWJsZSwNCj4gKwkJCSB2b2lkICoqIF9fcnRlX3Jlc3RyaWN0IG9ial90YWJsZSwNCj4gIAkJ
CSBzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKipsYXN0KQ0KPiAgew0KPiAgCXN0cnVjdCBydGVf
c3RhY2tfbGZfaGVhZCBvbGRfaGVhZDsNCj4gZGlmZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3Rh
Y2tfbGZfZ2VuZXJpYy5oDQo+IGIvbGliL3N0YWNrL3J0ZV9zdGFja19sZl9nZW5lcmljLmgNCj4g
aW5kZXggY2M2OWU0ZDE2OC4uYzRjYzRkMmMwMyAxMDA2NDQNCj4gLS0tIGEvbGliL3N0YWNrL3J0
ZV9zdGFja19sZl9nZW5lcmljLmgNCj4gKysrIGIvbGliL3N0YWNrL3J0ZV9zdGFja19sZl9nZW5l
cmljLmgNCj4gQEAgLTc0LDcgKzc0LDcgQEAgX19ydGVfc3RhY2tfbGZfcHVzaF9lbGVtcyhzdHJ1
Y3QgcnRlX3N0YWNrX2xmX2xpc3QNCj4gKmxpc3QsDQo+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lu
bGluZSBzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKg0KPiAgX19ydGVfc3RhY2tfbGZfcG9wX2Vs
ZW1zKHN0cnVjdCBydGVfc3RhY2tfbGZfbGlzdCAqbGlzdCwNCj4gIAkJCSB1bnNpZ25lZCBpbnQg
bnVtLA0KPiAtCQkJIHZvaWQgKipvYmpfdGFibGUsDQo+ICsJCQkgdm9pZCAqKiBfX3J0ZV9yZXN0
cmljdCBvYmpfdGFibGUsDQo+ICAJCQkgc3RydWN0IHJ0ZV9zdGFja19sZl9lbGVtICoqbGFzdCkN
Cj4gIHsNCj4gIAlzdHJ1Y3QgcnRlX3N0YWNrX2xmX2hlYWQgb2xkX2hlYWQ7DQo+IGRpZmYgLS1n
aXQgYS9saWIvc3RhY2svcnRlX3N0YWNrX2xmX3N0dWJzLmgNCj4gYi9saWIvc3RhY2svcnRlX3N0
YWNrX2xmX3N0dWJzLmgNCj4gaW5kZXggYTA1YWJmMWYxYy4uNDU3YTQxNWNjZiAxMDA2NDQNCj4g
LS0tIGEvbGliL3N0YWNrL3J0ZV9zdGFja19sZl9zdHVicy5oDQo+ICsrKyBiL2xpYi9zdGFjay9y
dGVfc3RhY2tfbGZfc3R1YnMuaA0KPiBAQCAtMzAsNyArMzAsNyBAQCBfX3J0ZV9zdGFja19sZl9w
dXNoX2VsZW1zKHN0cnVjdCBydGVfc3RhY2tfbGZfbGlzdA0KPiAqbGlzdCwNCj4gIHN0YXRpYyBf
X3J0ZV9hbHdheXNfaW5saW5lIHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqDQo+ICBfX3J0ZV9z
dGFja19sZl9wb3BfZWxlbXMoc3RydWN0IHJ0ZV9zdGFja19sZl9saXN0ICpsaXN0LA0KPiAgCQkJ
IHVuc2lnbmVkIGludCBudW0sDQo+IC0JCQkgdm9pZCAqKm9ial90YWJsZSwNCj4gKwkJCSB2b2lk
ICoqIF9fcnRlX3Jlc3RyaWN0IG9ial90YWJsZSwNCj4gIAkJCSBzdHJ1Y3QgcnRlX3N0YWNrX2xm
X2VsZW0gKipsYXN0KQ0KPiAgew0KPiAgCVJURV9TRVRfVVNFRChvYmpfdGFibGUpOw0KPiBkaWZm
IC0tZ2l0IGEvbGliL3N0YWNrL3J0ZV9zdGFja19waWxlLmMgYi9saWIvc3RhY2svcnRlX3N0YWNr
X3BpbGUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5lYjQy
YmE3MGE5DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL3N0YWNrL3J0ZV9zdGFja19waWxl
LmMNCj4gQEAgLTAsMCArMSwzMyBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT
RC0zLUNsYXVzZQ0KPiArICogQ29weXJpZ2h0KGMpIDIwMjYgU21hcnRTaGFyZSBTeXN0ZW1zDQo+
ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgInJ0ZV9zdGFjay5oIg0KPiArDQo+ICt2b2lkDQo+ICty
dGVfc3RhY2tfcGlsZV9pbml0KHN0cnVjdCBydGVfc3RhY2sgKnMsIHVuc2lnbmVkIGludCBjb3Vu
dCkNCj4gK3sNCj4gKyAgICB1bnNpZ25lZCBpbnQgYnVsayA9IChjb3VudCArIFJURV9TVEFDS19Q
SUxFX0JVTEtfU0laRSAtIDEpIC8NCj4gUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFOw0KPiArCXN0
cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKiBidWxrX2VsZW1zID0gKHN0cnVjdA0KPiBy
dGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKikoJnMtPnN0YWNrX3BpbGUgKyAxKTsNCj4gKwlzdHJ1
Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKiBzb2xvX2VsZW1zID0gKHN0cnVjdCBydGVfc3RhY2tfbGZf
ZWxlbQ0KPiAqKSZidWxrX2VsZW1zW2J1bGtdOw0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+
ICsJZm9yIChpID0gMDsgaSA8IGJ1bGs7IGkrKykNCj4gKwkJX19ydGVfc3RhY2tfcGlsZV9idWxr
X3B1c2hfZWxlbXMoJnMtPnN0YWNrX3BpbGUuZnJlZV9idWxrLA0KPiArCQkJCQkgICZidWxrX2Vs
ZW1zW2ldLCAmYnVsa19lbGVtc1tpXSwgMSk7DQo+ICsJZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyspDQo+ICsJCV9fcnRlX3N0YWNrX2xmX3B1c2hfZWxlbXMoJnMtPnN0YWNrX3BpbGUuZnJlZV9z
b2xvLA0KPiArCQkJCQkgICZzb2xvX2VsZW1zW2ldLCAmc29sb19lbGVtc1tpXSwgMSk7DQo+ICt9
DQo+ICsNCj4gK3NzaXplX3QNCj4gK3J0ZV9zdGFja19waWxlX2dldF9tZW1zaXplKHVuc2lnbmVk
IGludCBjb3VudCkNCj4gK3sNCj4gKyAgICB1bnNpZ25lZCBpbnQgYnVsayA9IChjb3VudCArIFJU
RV9TVEFDS19QSUxFX0JVTEtfU0laRSAtIDEpIC8NCj4gUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpF
Ow0KPiArCXNzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHJ0ZV9zdGFjayk7IC8qIEFscmVhZHkg
Y2FjaGUgbGluZQ0KPiBhbGlnbmVkLiAqLw0KPiArCXN6ICs9IGJ1bGsgKiBzaXplb2Yoc3RydWN0
IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSk7IC8qIEFscmVhZHkNCj4gY2FjaGUgbGluZSBhbGln
bmVkLiAqLw0KPiArCXN6ICs9IFJURV9DQUNIRV9MSU5FX1JPVU5EVVAoY291bnQgKiBzaXplb2Yo
c3RydWN0DQo+IHJ0ZV9zdGFja19sZl9lbGVtKSk7DQo+ICsJc3ogKz0gUlRFX0NBQ0hFX0dVQVJE
X0xJTkVTICogUlRFX0NBQ0hFX0xJTkVfU0laRTsNCj4gKw0KPiArCXJldHVybiBzejsNCj4gK30N
Cj4gZGlmZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3RhY2tfcGlsZS5oIGIvbGliL3N0YWNrL3J0
ZV9zdGFja19waWxlLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAw
MC4uZDkyODUxNWQxOA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9zdGFjay9ydGVfc3Rh
Y2tfcGlsZS5oDQo+IEBAIC0wLDAgKzEsMzE2IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyNiBTbWFydFNoYXJlIFN5
c3RlbXMNCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9SVEVfU1RBQ0tfUElMRV9IXw0KPiArI2Rl
ZmluZSBfUlRFX1NUQUNLX1BJTEVfSF8NCj4gKw0KPiArI2lmICEoZGVmaW5lZChSVEVfQVJDSF9Y
ODZfNjQpIHx8IGRlZmluZWQoUlRFX0FSQ0hfQVJNNjQpKQ0KPiArI2luY2x1ZGUgInJ0ZV9zdGFj
a19sZl9zdHVicy5oIg0KPiArI2Vsc2UNCj4gKyNpZmRlZiBSVEVfVVNFX0MxMV9NRU1fTU9ERUwN
Cj4gKyNpbmNsdWRlICJydGVfc3RhY2tfbGZfYzExLmgiDQo+ICsjZWxzZQ0KPiArI2luY2x1ZGUg
InJ0ZV9zdGFja19sZl9nZW5lcmljLmgiDQo+ICsjZW5kaWYNCj4gKw0KPiArLyoqDQo+ICsgKiBJ
bmRpY2F0ZXMgdGhhdCBSVEVfU1RBQ0tfRl9QSUxFIGlzIHN1cHBvcnRlZC4NCj4gKyAqLw0KPiAr
I2RlZmluZSBSVEVfU1RBQ0tfUElMRV9TVVBQT1JURUQNCj4gKyNlbmRpZg0KPiArDQo+ICtzdGF0
aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gK19fcnRlX3N0YWNrX3BpbGVf
Y291bnQoc3RydWN0IHJ0ZV9zdGFjayAqcykNCj4gK3sNCj4gKwkvKiBzdGFja19sZl9wdXNoKCkg
YW5kIHN0YWNrX2xmX3BvcCgpIGRvIG5vdCB1cGRhdGUgdGhlIGxpc3Qncw0KPiBjb250ZW50cw0K
PiArCSAqIGFuZCBzdGFja19sZi0+bGVuIGF0b21pY2FsbHksIHdoaWNoIGNhbiBjYXVzZSB0aGUg
bGlzdCB0bw0KPiBhcHBlYXINCj4gKwkgKiBzaG9ydGVyIHRoYW4gaXQgYWN0dWFsbHkgaXMgaWYg
dGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hpbGUNCj4gb3RoZXINCj4gKwkgKiB0aHJlYWRzIGFy
ZSBtb2RpZnlpbmcgdGhlIGxpc3QuDQo+ICsJICoNCj4gKwkgKiBIb3dldmVyLCBnaXZlbiB0aGUg
aW5oZXJlbnRseSBhcHByb3hpbWF0ZSBuYXR1cmUgb2YgdGhlDQo+IGdldF9jb3VudA0KPiArCSAq
IGNhbGxiYWNrIC0tIGV2ZW4gaWYgdGhlIGxpc3QgYW5kIGl0cyBzaXplIHdlcmUgdXBkYXRlZA0K
PiBhdG9taWNhbGx5LA0KPiArCSAqIHRoZSBzaXplIGNvdWxkIGNoYW5nZSBiZXR3ZWVuIHdoZW4g
Z2V0X2NvdW50IGV4ZWN1dGVzIGFuZCB3aGVuDQo+IHRoZQ0KPiArCSAqIHZhbHVlIGlzIHJldHVy
bmVkIHRvIHRoZSBjYWxsZXIgLS0gdGhpcyBpcyBhY2NlcHRhYmxlLg0KPiArCSAqDQo+ICsJICog
VGhlIHN0YWNrX2xmLT5sZW4gdXBkYXRlcyBhcmUgcGxhY2VkIHN1Y2ggdGhhdCB0aGUgbGlzdCBt
YXkNCj4gYXBwZWFyIHRvDQo+ICsJICogaGF2ZSBmZXdlciBlbGVtZW50cyB0aGFuIGl0IGRvZXMs
IGJ1dCB3aWxsIG5ldmVyIGFwcGVhciB0bw0KPiBoYXZlIG1vcmUNCj4gKwkgKiBlbGVtZW50cy4g
SWYgdGhlIG1lbXBvb2wgaXMgbmVhci1lbXB0eSB0byB0aGUgcG9pbnQgdGhhdCB0aGlzDQo+IGlz
IGENCj4gKwkgKiBjb25jZXJuLCB0aGUgdXNlciBzaG91bGQgY29uc2lkZXIgaW5jcmVhc2luZyB0
aGUgbWVtcG9vbCBzaXplLg0KPiArCSAqLw0KPiArI2lmZGVmIFJURV9VU0VfQzExX01FTV9NT0RF
TA0KPiArCXJldHVybiBSVEVfTUlOKCh1bnNpZ25lZCBpbnQpcy0+Y2FwYWNpdHksDQo+ICsJCQko
dW5zaWduZWQgaW50KXJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmcy0NCj4gPnN0YWNrX3BpbGUu
YnVsay5sZW4sDQo+ICsJCQlydGVfbWVtb3J5X29yZGVyX3JlbGF4ZWQpICogUlRFX1NUQUNLX1BJ
TEVfQlVMS19TSVpFDQo+ICsNCj4gKwkJCSh1bnNpZ25lZCBpbnQpcnRlX2F0b21pY19sb2FkX2V4
cGxpY2l0KCZzLQ0KPiA+c3RhY2tfcGlsZS5zb2xvLmxlbiwNCj4gKwkJCXJ0ZV9tZW1vcnlfb3Jk
ZXJfcmVsYXhlZCkpOw0KPiArI2Vsc2UNCj4gKwkvKiBOT1RFOiByZXZpZXcgZm9yIHBvdGVudGlh
bCBvcmRlcmluZyBvcHRpbWl6YXRpb24gKi8NCj4gKwlyZXR1cm4gUlRFX01JTigodW5zaWduZWQg
aW50KXMtPmNhcGFjaXR5LA0KPiArCQkJKHVuc2lnbmVkIGludClydGVfYXRvbWljX2xvYWRfZXhw
bGljaXQoJnMtDQo+ID5zdGFja19waWxlLmJ1bGsubGVuLA0KPiArCQkJcnRlX21lbW9yeV9vcmRl
cl9zZXFfY3N0KSAqIFJURV9TVEFDS19QSUxFX0JVTEtfU0laRQ0KPiArDQo+ICsJCQkodW5zaWdu
ZWQgaW50KXJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmcy0NCj4gPnN0YWNrX3BpbGUuc29sby5s
ZW4sDQo+ICsJCQlydGVfbWVtb3J5X29yZGVyX3NlcV9jc3QpKTsNCj4gKyNlbmRpZg0KPiArfQ0K
PiArDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ICtfX3J0ZV9zdGFja19w
aWxlX2J1bGtfcHVzaF9lbGVtcyhzdHJ1Y3QgcnRlX3N0YWNrX2xmX2xpc3QgKmxpc3QsDQo+ICsJ
CXN0cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKmZpcnN0LA0KPiArCQlzdHJ1Y3QgcnRl
X3N0YWNrX3BpbGVfYnVsa19lbGVtICpsYXN0LA0KPiArCQl1bnNpZ25lZCBpbnQgbnVtKQ0KPiAr
ew0KPiArCV9fcnRlX3N0YWNrX2xmX3B1c2hfZWxlbXMobGlzdCwNCj4gKwkJKHN0cnVjdCBydGVf
c3RhY2tfbGZfZWxlbSAqKWZpcnN0LA0KPiArCQkoc3RydWN0IHJ0ZV9zdGFja19sZl9lbGVtICop
bGFzdCwNCj4gKwkJbnVtKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp
bmUgc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqDQo+ICtfX3J0ZV9zdGFja19waWxl
X2J1bGtfcG9wX2VsZW1zKHN0cnVjdCBydGVfc3RhY2tfbGZfbGlzdCAqbGlzdCwNCj4gKwkJdW5z
aWduZWQgaW50IG51bSwNCj4gKwkJdm9pZCAqKiBfX3J0ZV9yZXN0cmljdCBvYmpfdGFibGUsDQo+
ICsJCXN0cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKipsYXN0KQ0KPiArew0KPiArCXN0
cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKmZpcnN0ID0gKHN0cnVjdA0KPiBydGVfc3Rh
Y2tfcGlsZV9idWxrX2VsZW0gKilfX3J0ZV9zdGFja19sZl9wb3BfZWxlbXMobGlzdCwgbnVtLCBO
VUxMLA0KPiAoc3RydWN0IHJ0ZV9zdGFja19sZl9lbGVtICoqKWxhc3QpOw0KPiArCWlmIChmaXJz
dCA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCWlmIChvYmpfdGFibGUgIT0g
TlVMTCkgew0KPiArCQkvKiBUcmF2ZXJzZSB0aGUgbGlzdCB0byBjb3B5IHRoZSBidWxrcy4gKi8N
Cj4gKwkJc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqdG1wID0gZmlyc3Q7DQo+ICsJ
CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtOyBpKyssIHRtcCA9IHRtcC0+bmV4dCkN
Cj4gKwkJCXJ0ZV9tZW1jcHkoJm9ial90YWJsZVtpICogUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpF
XSwNCj4gdG1wLT5vYmpzLCBzaXplb2Yodm9pZCAqKSAqIFJURV9TVEFDS19QSUxFX0JVTEtfU0la
RSk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGZpcnN0Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4g
KyAqIFB1c2ggc2V2ZXJhbCBvYmplY3RzIG9uIHRoZSBwaWxlIChsb2NrLWZyZWUsIE1ULXNhZmUp
Lg0KPiArICoNCj4gKyAqIEBwYXJhbSBwaWxlDQo+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcGls
ZSBzdHJ1Y3R1cmUuDQo+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ICsgKiAgIEEgcG9pbnRlciB0
byBhIHRhYmxlIG9mIHZvaWQgKiBwb2ludGVycyAob2JqZWN0cykuDQo+ICsgKiBAcGFyYW0gbg0K
PiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gcHVzaCBvbiB0aGUgcGlsZSBmcm9tIHRo
ZSBvYmpfdGFibGUuDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgIEFjdHVhbCBudW1iZXIgb2Ygb2Jq
ZWN0cyBwdXNoZWQgKGVpdGhlciAwIG9yICpuKikuDQo+ICsgKi8NCj4gK3N0YXRpYyBfX3J0ZV9h
bHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiArX19ydGVfc3RhY2tfcGlsZV9wdXNoKHN0cnVj
dCBydGVfc3RhY2sgKnMsDQo+ICsJCXZvaWQgKiBjb25zdCAqIF9fcnRlX3Jlc3RyaWN0IG9ial90
YWJsZSwNCj4gKwkJdW5zaWduZWQgaW50IG4pDQo+ICt7DQo+ICsJUlRFX0FTU0VSVChzICE9IE5V
TEwpOw0KPiArCVJURV9BU1NFUlQob2JqX3RhYmxlICE9IE5VTEwpOw0KPiArDQo+ICsJc3RydWN0
IHJ0ZV9zdGFja19waWxlICpwaWxlID0gJnMtPnN0YWNrX3BpbGU7DQo+ICsJc3RydWN0IHJ0ZV9z
dGFja19waWxlX2J1bGtfZWxlbSAqYnVsa19maXJzdCA9IE5VTEwsICpidWxrX2xhc3QgPQ0KPiBO
VUxMOw0KPiArCXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqc29sb19maXJzdCA9IE5VTEwsICpz
b2xvX2xhc3QgPSBOVUxMOw0KPiArCXVuc2lnbmVkIGludCBuX2J1bGsgPSBuIC8gUlRFX1NUQUNL
X1BJTEVfQlVMS19TSVpFOw0KPiArCXVuc2lnbmVkIGludCBuX3NvbG8gPSBuICYgKFJURV9TVEFD
S19QSUxFX0JVTEtfU0laRSAtIDEpOw0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ICsJaWYg
KHVubGlrZWx5KG5fYnVsayA9PSAwKSkgew0KPiArCQlpZiAodW5saWtlbHkobl9zb2xvID09IDAp
KQ0KPiArCQkJcmV0dXJuIDA7DQo+ICsJCWVsc2UNCj4gKwkJCWdvdG8gc29sbzsNCj4gKwl9DQo+
ICsNCj4gKwkvKiBBbGxvY2F0ZSBuX2J1bGsgZWxlbWVudHMgZnJvbSB0aGUgZnJlZSBsaXN0LiAq
Lw0KPiArCWJ1bGtfZmlyc3QgPSBfX3J0ZV9zdGFja19waWxlX2J1bGtfcG9wX2VsZW1zKCZwaWxl
LT5mcmVlX2J1bGssDQo+IG5fYnVsaywgTlVMTCwgJmJ1bGtfbGFzdCk7DQo+ICsJaWYgKHVubGlr
ZWx5KGJ1bGtfZmlyc3QgPT0gTlVMTCkpDQo+ICsJCXJldHVybiAwOyAvKiBGYWlsZWQuICovDQo+
ICsNCj4gKwlpZiAobGlrZWx5KG5fc29sbyA9PSAwKSkNCj4gKwkJZ290byBidWxrOw0KPiArDQo+
ICtzb2xvOg0KPiArCS8qIEFsbG9jYXRlIG5fc29sbyBlbGVtZW50cyBmcm9tIHRoZSBmcmVlIGxp
c3QuICovDQo+ICsJc29sb19maXJzdCA9IF9fcnRlX3N0YWNrX2xmX3BvcF9lbGVtcygmcGlsZS0+
ZnJlZV9zb2xvLCBuX3NvbG8sDQo+IE5VTEwsICZzb2xvX2xhc3QpOw0KPiArCWlmICh1bmxpa2Vs
eShzb2xvX2ZpcnN0ID09IE5VTEwpKSB7DQo+ICsJCS8qIEZhaWxlZC4gUm9sbCBiYWNrLiAqLw0K
PiArCQlpZiAobl9idWxrID4gMCkNCj4gKwkJCV9fcnRlX3N0YWNrX3BpbGVfYnVsa19wdXNoX2Vs
ZW1zKCZwaWxlLT5mcmVlX2J1bGssDQo+IGJ1bGtfZmlyc3QsIGJ1bGtfbGFzdCwgbl9idWxrKTsN
Cj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJLyoNCj4gKwkgKiBDb25zdHJ1Y3QgdGhl
IHNvbG8gZWxlbWVudHMuDQo+ICsJICogQ29weSB0aGUgb2JqZWN0cywgYnV0IGlnbm9yZSB0aGUg
b2JqZWN0IG9yZGVyLg0KPiArCSAqLw0KPiArCXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqdG1w
X3NvbG8gPSBzb2xvX2ZpcnN0Ow0KPiArCV9fcnRlX2Fzc3VtZShuX3NvbG8gPiAwKTsNCj4gKwlf
X3J0ZV9hc3N1bWUobl9zb2xvIDwgUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFKTsNCj4gKwlmb3Ig
KGkgPSAwOyBpIDwgbl9zb2xvOyBpKyssIHRtcF9zb2xvID0gdG1wX3NvbG8tPm5leHQpDQo+ICsJ
CXRtcF9zb2xvLT5kYXRhID0gb2JqX3RhYmxlW25fYnVsayAqDQo+IFJURV9TVEFDS19QSUxFX0JV
TEtfU0laRSArIGldOw0KPiArDQo+ICsJLyogUHVzaCB0aGVtIHRvIHRoZSBzb2xvIGxpc3QuICov
DQo+ICsJX19ydGVfc3RhY2tfbGZfcHVzaF9lbGVtcygmcGlsZS0+c29sbywgc29sb19maXJzdCwg
c29sb19sYXN0LA0KPiBuX3NvbG8pOw0KPiArDQo+ICsJaWYgKHVubGlrZWx5KG5fYnVsayA9PSAw
KSkNCj4gKwkJcmV0dXJuIG47IC8qIERvbmUuICovDQo+ICsNCj4gK2J1bGs6DQo+ICsJLyoNCj4g
KwkgKiBDb25zdHJ1Y3QgdGhlIGJ1bGsgZWxlbWVudHMuDQo+ICsJICogQ29weSBidWxrcyBpbiBy
ZXZlcnNlIG9yZGVyLCBidXQgaWdub3JlIHRoZSBvYmplY3Qgb3JkZXINCj4gd2l0aGluIGVhY2gg
YnVsay4NCj4gKwkgKi8NCj4gKwlzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtICp0bXBf
YnVsayA9IGJ1bGtfZmlyc3Q7DQo+ICsJX19ydGVfYXNzdW1lKG5fYnVsayA+IDApOw0KPiArCWZv
ciAoaSA9IDA7IGkgPCBuX2J1bGs7IGkrKywgdG1wX2J1bGsgPSB0bXBfYnVsay0+bmV4dCkNCj4g
KwkJcnRlX21lbWNweSh0bXBfYnVsay0+b2JqcywgJm9ial90YWJsZVsobl9idWxrIC0gaSAtIDEp
ICoNCj4gUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFXSwgc2l6ZW9mKHZvaWQgKikgKiBSVEVfU1RB
Q0tfUElMRV9CVUxLX1NJWkUpOw0KPiArDQo+ICsJLyogUHVzaCB0aGVtIHRvIHRoZSBidWxrIGxp
c3QuICovDQo+ICsJX19ydGVfc3RhY2tfcGlsZV9idWxrX3B1c2hfZWxlbXMoJnBpbGUtPmJ1bGss
IGJ1bGtfZmlyc3QsDQo+IGJ1bGtfbGFzdCwgbl9idWxrKTsNCj4gKw0KPiArCXJldHVybiBuOw0K
PiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIFBvcCBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgcGls
ZSAobG9jay1mcmVlLCBNVC1zYWZlKS4NCj4gKyAqDQo+ICsgKiBAcGFyYW0gcGlsZQ0KPiArICog
ICBBIHBvaW50ZXIgdG8gdGhlIHBpbGUgc3RydWN0dXJlLg0KPiArICogQHBhcmFtIG9ial90YWJs
ZQ0KPiArICogICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiB2b2lkICogcG9pbnRlcnMgKG9iamVj
dHMpLg0KPiArICogQHBhcmFtIG4NCj4gKyAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIHB1
bGwgZnJvbSB0aGUgcGlsZS4NCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgQWN0dWFsIG51bWJlciBv
ZiBvYmplY3RzIHBvcHBlZCAoZWl0aGVyIDAgb3IgKm4qKS4NCj4gKyAqLw0KPiArc3RhdGljIF9f
cnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ICtfX3J0ZV9zdGFja19waWxlX3BvcChz
dHJ1Y3QgcnRlX3N0YWNrICpzLA0KPiArCQl2b2lkICoqIF9fcnRlX3Jlc3RyaWN0IG9ial90YWJs
ZSwNCj4gKwkJdW5zaWduZWQgaW50IG4pDQo+ICt7DQo+ICsJUlRFX0FTU0VSVChzICE9IE5VTEwp
Ow0KPiArCVJURV9BU1NFUlQob2JqX3RhYmxlICE9IE5VTEwpOw0KPiArDQo+ICsJc3RydWN0IHJ0
ZV9zdGFja19waWxlICpwaWxlID0gJnMtPnN0YWNrX3BpbGU7DQo+ICsJc3RydWN0IHJ0ZV9zdGFj
a19waWxlX2J1bGtfZWxlbSAqYnVsa19maXJzdCA9IE5VTEwsICpidWxrX2xhc3QgPQ0KPiBOVUxM
Ow0KPiArCXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqc29sb19maXJzdCA9IE5VTEwsICpzb2xv
X2xhc3QgPSBOVUxMOw0KPiArCXVuc2lnbmVkIGludCBuX2J1bGsgPSBuIC8gUlRFX1NUQUNLX1BJ
TEVfQlVMS19TSVpFOw0KPiArCXVuc2lnbmVkIGludCBuX3NvbG8gPSBuICYgKFJURV9TVEFDS19Q
SUxFX0JVTEtfU0laRSAtIDEpOw0KPiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ICsJaWYgKHVu
bGlrZWx5KG5fYnVsayA9PSAwKSkgew0KPiArCQlpZiAodW5saWtlbHkobl9zb2xvID09IDApKQ0K
PiArCQkJcmV0dXJuIDA7DQo+ICsJCWVsc2UNCj4gKwkJCWdvdG8gc29sbzsNCj4gKwl9DQo+ICsN
Cj4gK2J1bGs6DQo+ICsJLyogRmV0Y2ggbl9idWxrICogUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpF
IG9iamVjdHMgYXMgYnVsaw0KPiBlbGVtZW50cy4gKi8NCj4gKwlidWxrX2ZpcnN0ID0gX19ydGVf
c3RhY2tfcGlsZV9idWxrX3BvcF9lbGVtcygmcGlsZS0+YnVsaywgbl9idWxrLA0KPiBvYmpfdGFi
bGUsICZidWxrX2xhc3QpOw0KPiArCWlmICh1bmxpa2VseShidWxrX2ZpcnN0ID09IE5VTEwpKSB7
DQo+ICsJCS8qIE5vdCBhdmFpbGFibGUuIFJldHJ5IHdpdGggZmV3ZXIgYnVsayBlbGVtZW50czsg
b2JqZWN0cw0KPiB0byBiZSBmZXRjaGVkIGFzIHNvbG8gZWxlbWVudHMgaW5zdGVhZC4gKi8NCj4g
KwkJbl9zb2xvICs9IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRTsNCj4gKwkJbl9idWxrLS07DQo+
ICsJCWlmIChuX2J1bGsgPiAwKQ0KPiArCQkJZ290byBidWxrOw0KPiArCQllbHNlDQo+ICsJCQln
b3RvIHNvbG87DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGxpa2VseShuX3NvbG8gPT0gMCkpDQo+ICsJ
CWdvdG8gZG9uZTsNCj4gKw0KPiArc29sbzoNCj4gKwkvKiBGZXRjaCBuX3NvbG8gb2JqZWN0cyBh
cyBzb2xvIGVsZW1lbnRzLiAqLw0KPiArCXNvbG9fZmlyc3QgPSBfX3J0ZV9zdGFja19sZl9wb3Bf
ZWxlbXMoJnBpbGUtPnNvbG8sIG5fc29sbywNCj4gJm9ial90YWJsZVtuX2J1bGsgKiBSVEVfU1RB
Q0tfUElMRV9CVUxLX1NJWkVdLCAmc29sb19sYXN0KTsNCj4gKwlpZiAoc29sb19maXJzdCAhPSBO
VUxMKQ0KPiArCQlnb3RvIGRvbmU7DQo+ICsNCj4gKwkvKiBTb2xvIGVsZW1lbnRzIG5vdCBhdmFp
bGFibGUuIFRyeSBmcmFnbWVudGF0aW9uLiAqLw0KPiArCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVf
U0laRSkgdm9pZCAqDQo+IG9ial9mcmFnW1JURV9TVEFDS19QSUxFX0JVTEtfU0laRV07DQo+ICsJ
c3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqZnJhZzsNCj4gKw0KPiArCS8qIEZldGNo
IGEgZnJhZ21lbnRhdGlvbiBlbGVtZW50IGFzIGEgYnVsayBlbGVtZW50LiAqLw0KPiArCWZyYWcg
PSBfX3J0ZV9zdGFja19waWxlX2J1bGtfcG9wX2VsZW1zKCZwaWxlLT5idWxrLCAxLCBvYmpfZnJh
ZywNCj4gTlVMTCk7DQo+ICsJaWYgKHVubGlrZWx5KGZyYWcgPT0gTlVMTCkpIHsNCj4gKwkJLyog
RmFpbGVkLiBSb2xsIGJhY2suICovDQo+ICsJCWlmIChuX2J1bGsgPiAwKQ0KPiArCQkJX19ydGVf
c3RhY2tfcGlsZV9idWxrX3B1c2hfZWxlbXMoJnBpbGUtPmJ1bGssDQo+IGJ1bGtfZmlyc3QsIGJ1
bGtfbGFzdCwgbl9idWxrKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJLyogR2V0
IG5fc29sbyBvYmplY3RzIGZyb20gdGhlIGZyYWdtZW50YXRpb24gZWxlbWVudC4gKi8NCj4gKwlf
X3J0ZV9hc3N1bWUobl9zb2xvID4gMCk7DQo+ICsJX19ydGVfYXNzdW1lKG5fc29sbyA8IFJURV9T
VEFDS19QSUxFX0JVTEtfU0laRSk7DQo+ICsJZm9yIChpID0gMDsgaSA8IG5fc29sbzsgaSsrKQ0K
PiArCQlvYmpfdGFibGVbbl9idWxrICogUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFICsgaV0gPQ0K
PiBvYmpfZnJhZ1tpXTsNCj4gKw0KPiArCS8qIEZldGNoIGZyZWUgZWxlbWVudHMgZm9yIHRoZSBl
eGNlc3Mgb2JqZWN0cy4gKi8NCj4gKwlfX3J0ZV9hc3N1bWUoUlRFX1NUQUNLX1BJTEVfQlVMS19T
SVpFIC0gbl9zb2xvID4gMCk7DQo+ICsJX19ydGVfYXNzdW1lKFJURV9TVEFDS19QSUxFX0JVTEtf
U0laRSAtIG5fc29sbyA8DQo+IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRSAtIDEpOw0KPiArCXNv
bG9fZmlyc3QgPSBfX3J0ZV9zdGFja19sZl9wb3BfZWxlbXMoJnBpbGUtPmZyZWVfc29sbywNCj4g
UlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFIC0gbl9zb2xvLCBOVUxMLCAmc29sb19sYXN0KTsNCj4g
KwlpZiAodW5saWtlbHkoc29sb19maXJzdCA9PSBOVUxMKSkgew0KPiArCQkvKiBGYWlsZWQuIFJv
bGwgYmFjay4gKi8NCj4gKwkJc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqbGFzdDsN
Cj4gKwkJaWYgKG5fYnVsayA+IDApIHsNCj4gKwkJCS8qIEF0dGFjaCB0aGUgYnVsayBlbGVtZW50
cyBhZnRlciB0aGUgZnJhZ21lbnRhdGlvbg0KPiBlbGVtZW50LiAqLw0KPiArCQkJZnJhZy0+bmV4
dCA9IGJ1bGtfZmlyc3Q7DQo+ICsJCQlsYXN0ID0gYnVsa19sYXN0Ow0KPiArCQl9IGVsc2UNCj4g
KwkJCWxhc3QgPSBmcmFnOw0KPiArCQlfX3J0ZV9zdGFja19waWxlX2J1bGtfcHVzaF9lbGVtcygm
cGlsZS0+YnVsaywgZnJhZywgbGFzdCwgMQ0KPiArIG5fYnVsayk7DQo+ICsJCXJldHVybiAwOw0K
PiArCX0NCj4gKw0KPiArCS8qIENvbnN0cnVjdCB0aGUgc29sbyBlbGVtZW50cyBmcm9tIHRoZSBl
eGNlc3Mgb2JqZWN0cy4gKi8NCj4gKwlzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKnRtcCA9IHNv
bG9fZmlyc3Q7DQo+ICsJX19ydGVfYXNzdW1lKG5fc29sbyA+IDApOw0KPiArCV9fcnRlX2Fzc3Vt
ZShuX3NvbG8gPCBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUpOw0KPiArCWZvciAoaSA9IG5fc29s
bzsgaSA8IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRTsgaSsrLCB0bXAgPSB0bXAtDQo+ID5uZXh0
KQ0KPiArCQl0bXAtPmRhdGEgPSBvYmpfZnJhZ1tpXTsNCj4gKw0KPiArCS8qIFB1c2ggdGhlIGV4
Y2VzcyBvYmplY3RzIGFzIHNvbG8gZWxlbWVudHMuICovDQo+ICsJX19ydGVfc3RhY2tfbGZfcHVz
aF9lbGVtcygmcGlsZS0+c29sbywgc29sb19maXJzdCwgc29sb19sYXN0LA0KPiBSVEVfU1RBQ0tf
UElMRV9CVUxLX1NJWkUgLSBuX3NvbG8pOw0KPiArCW5fc29sbyA9IDA7DQo+ICsNCj4gKwkvKiBB
ZGQgdGhlIGZyYWdtZW50YXRpb24gZWxlbWVudCBpbiBmcm9udCBvZiB0aGUgYnVsayBlbGVtZW50
cywNCj4gc28gaXQgY2FuIGJlIGZyZWVkLiAqLw0KPiArCWlmIChuX2J1bGsgPiAwKQ0KPiArCQlm
cmFnLT5uZXh0ID0gYnVsa19maXJzdDsNCj4gKwllbHNlDQo+ICsJCWJ1bGtfbGFzdCA9IGZyYWc7
DQo+ICsJYnVsa19maXJzdCA9IGZyYWc7DQo+ICsJbl9idWxrKys7DQo+ICsNCj4gK2RvbmU6DQo+
ICsJLyogU3VjY2Vzcy4gRnJlZSB0aGUgZWxlbWVudHMuICovDQo+ICsJaWYgKG5fYnVsayA+IDAp
DQo+ICsJCV9fcnRlX3N0YWNrX3BpbGVfYnVsa19wdXNoX2VsZW1zKCZwaWxlLT5mcmVlX2J1bGss
DQo+IGJ1bGtfZmlyc3QsIGJ1bGtfbGFzdCwgbl9idWxrKTsNCj4gKwlpZiAobl9zb2xvID4gMCkN
Cj4gKwkJX19ydGVfc3RhY2tfbGZfcHVzaF9lbGVtcygmcGlsZS0+ZnJlZV9zb2xvLCBzb2xvX2Zp
cnN0LA0KPiBzb2xvX2xhc3QsIG5fc29sbyk7DQo+ICsNCj4gKwlyZXR1cm4gbjsNCj4gK30NCj4g
Kw0KPiArLyoqDQo+ICsgKiBAaW50ZXJuYWwgSW5pdGlhbGl6ZSBhIHBpbGUgc3RhY2suDQo+ICsg
Kg0KPiArICogQHBhcmFtIHMNCj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBzdGFjayBzdHJ1Y3R1
cmUuDQo+ICsgKiBAcGFyYW0gY291bnQNCj4gKyAqICAgVGhlIHNpemUgb2YgdGhlIHN0YWNrLg0K
PiArICovDQo+ICt2b2lkDQo+ICtydGVfc3RhY2tfcGlsZV9pbml0KHN0cnVjdCBydGVfc3RhY2sg
KnMsIHVuc2lnbmVkIGludCBjb3VudCk7DQo+ICsNCj4gKy8qKg0KPiArICogQGludGVybmFsIFJl
dHVybiB0aGUgbWVtb3J5IHJlcXVpcmVkIGZvciBhIHBpbGUgc3RhY2suDQo+ICsgKg0KPiArICog
QHBhcmFtIGNvdW50DQo+ICsgKiAgIFRoZSBzaXplIG9mIHRoZSBzdGFjay4NCj4gKyAqIEByZXR1
cm4NCj4gKyAqICAgVGhlIGJ5dGVzIHRvIGFsbG9jYXRlIGZvciBhIHBpbGUgc3RhY2suDQo+ICsg
Ki8NCj4gK3NzaXplX3QNCj4gK3J0ZV9zdGFja19waWxlX2dldF9tZW1zaXplKHVuc2lnbmVkIGlu
dCBjb3VudCk7DQo+ICsNCj4gKyNlbmRpZiAvKiBfUlRFX1NUQUNLX1BJTEVfSF8gKi8NCj4gZGlm
ZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3RhY2tfc3RkLmggYi9saWIvc3RhY2svcnRlX3N0YWNr
X3N0ZC5oDQo+IGluZGV4IGFlMjhhZGQ1YzQuLjAwMzA5NWExNDQgMTAwNjQ0DQo+IC0tLSBhL2xp
Yi9zdGFjay9ydGVfc3RhY2tfc3RkLmgNCj4gKysrIGIvbGliL3N0YWNrL3J0ZV9zdGFja19zdGQu
aA0KPiBAQCAtNiw2ICs2LDcgQEANCj4gICNkZWZpbmUgX1JURV9TVEFDS19TVERfSF8NCj4gDQo+
ICAjaW5jbHVkZSA8cnRlX2JyYW5jaF9wcmVkaWN0aW9uLmg+DQo+ICsjaW5jbHVkZSA8cnRlX21l
bWNweS5oPg0KPiANCj4gIC8qKg0KPiAgICogQGludGVybmFsIFB1c2ggc2V2ZXJhbCBvYmplY3Rz
IG9uIHRoZSBzdGFjayAoTVQtc2FmZSkuDQo+IEBAIC0yMCwyNyArMjEsMjQgQEANCj4gICAqICAg
QWN0dWFsIG51bWJlciBvZiBvYmplY3RzIHB1c2hlZCAoZWl0aGVyIDAgb3IgKm4qKS4NCj4gICAq
Lw0KPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+IC1fX3J0ZV9z
dGFja19zdGRfcHVzaChzdHJ1Y3QgcnRlX3N0YWNrICpzLCB2b2lkICogY29uc3QgKm9ial90YWJs
ZSwNCj4gK19fcnRlX3N0YWNrX3N0ZF9wdXNoKHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKiBj
b25zdCAqDQo+IF9fcnRlX3Jlc3RyaWN0IG9ial90YWJsZSwNCj4gIAkJICAgICB1bnNpZ25lZCBp
bnQgbikNCj4gIHsNCj4gLQlzdHJ1Y3QgcnRlX3N0YWNrX3N0ZCAqc3RhY2sgPSAmcy0+c3RhY2tf
c3RkOw0KPiAtCXVuc2lnbmVkIGludCBpbmRleDsNCj4gLQl2b2lkICoqY2FjaGVfb2JqczsNCj4g
KwlzdHJ1Y3QgcnRlX3N0YWNrX3N0ZCAqIF9fcnRlX3Jlc3RyaWN0IHN0YWNrID0gJnMtPnN0YWNr
X3N0ZDsNCj4gKwl2b2lkICoqIF9fcnRlX3Jlc3RyaWN0IHN0YWNrX29ianM7DQo+IA0KPiAgCXJ0
ZV9zcGlubG9ja19sb2NrKCZzdGFjay0+bG9jayk7DQo+IC0JY2FjaGVfb2JqcyA9ICZzdGFjay0+
b2Jqc1tzdGFjay0+bGVuXTsNCj4gDQo+IC0JLyogSXMgdGhlcmUgc3VmZmljaWVudCBzcGFjZSBp
biB0aGUgc3RhY2s/ICovDQo+IC0JaWYgKChzdGFjay0+bGVuICsgbikgPiBzLT5jYXBhY2l0eSkg
ew0KPiArCWlmICh1bmxpa2VseSgoc3RhY2stPmxlbiArIG4pID4gcy0+Y2FwYWNpdHkpKSB7DQo+
ICsJCS8qIEluc3VmZmljaWVudCByb29tIGluIHRoZSBzdGFjay4gKi8NCj4gIAkJcnRlX3NwaW5s
b2NrX3VubG9jaygmc3RhY2stPmxvY2spOw0KPiAgCQlyZXR1cm4gMDsNCj4gIAl9DQo+IA0KPiAt
CS8qIEFkZCBlbGVtZW50cyBiYWNrIGludG8gdGhlIGNhY2hlICovDQo+IC0JZm9yIChpbmRleCA9
IDA7IGluZGV4IDwgbjsgKytpbmRleCwgb2JqX3RhYmxlKyspDQo+IC0JCWNhY2hlX29ianNbaW5k
ZXhdID0gKm9ial90YWJsZTsNCj4gLQ0KPiArCS8qIFB1c2ggb2JqZWN0cyB0byB0aGUgc3RhY2sg
Ki8NCj4gKwlzdGFja19vYmpzID0gJnN0YWNrLT5vYmpzW3N0YWNrLT5sZW5dOw0KPiAgCXN0YWNr
LT5sZW4gKz0gbjsNCj4gKwlydGVfbWVtY3B5KHN0YWNrX29ianMsIG9ial90YWJsZSwgc2l6ZW9m
KHZvaWQgKikgKiBuKTsNCj4gDQo+ICAJcnRlX3NwaW5sb2NrX3VubG9jaygmc3RhY2stPmxvY2sp
Ow0KPiAgCXJldHVybiBuOw0KPiBAQCAtNTksMjggKzU3LDI3IEBAIF9fcnRlX3N0YWNrX3N0ZF9w
dXNoKHN0cnVjdCBydGVfc3RhY2sgKnMsIHZvaWQgKg0KPiBjb25zdCAqb2JqX3RhYmxlLA0KPiAg
ICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgcG9wcGVkIChlaXRoZXIgMCBvciAqbiopLg0K
PiAgICovDQo+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gLV9f
cnRlX3N0YWNrX3N0ZF9wb3Aoc3RydWN0IHJ0ZV9zdGFjayAqcywgdm9pZCAqKm9ial90YWJsZSwg
dW5zaWduZWQNCj4gaW50IG4pDQo+ICtfX3J0ZV9zdGFja19zdGRfcG9wKHN0cnVjdCBydGVfc3Rh
Y2sgKnMsIHZvaWQgKiogX19ydGVfcmVzdHJpY3QNCj4gb2JqX3RhYmxlLCB1bnNpZ25lZCBpbnQg
bikNCj4gIHsNCj4gLQlzdHJ1Y3QgcnRlX3N0YWNrX3N0ZCAqc3RhY2sgPSAmcy0+c3RhY2tfc3Rk
Ow0KPiAtCXVuc2lnbmVkIGludCBpbmRleCwgbGVuOw0KPiAtCXZvaWQgKipjYWNoZV9vYmpzOw0K
PiArCXN0cnVjdCBydGVfc3RhY2tfc3RkICogX19ydGVfcmVzdHJpY3Qgc3RhY2sgPSAmcy0+c3Rh
Y2tfc3RkOw0KPiArCXVuc2lnbmVkIGludCBpbmRleDsNCj4gKwl2b2lkICoqIF9fcnRlX3Jlc3Ry
aWN0IHN0YWNrX29ianM7DQo+IA0KPiAgCXJ0ZV9zcGlubG9ja19sb2NrKCZzdGFjay0+bG9jayk7
DQo+IA0KPiAgCWlmICh1bmxpa2VseShuID4gc3RhY2stPmxlbikpIHsNCj4gKwkJLyogSW5zdWZm
aWNpZW50IG9iamVjdHMgaW4gdGhlIHN0YWNrLiAqLw0KPiAgCQlydGVfc3BpbmxvY2tfdW5sb2Nr
KCZzdGFjay0+bG9jayk7DQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+IC0JY2FjaGVfb2Jq
cyA9IHN0YWNrLT5vYmpzOw0KPiAtDQo+IC0JZm9yIChpbmRleCA9IDAsIGxlbiA9IHN0YWNrLT5s
ZW4gLSAxOyBpbmRleCA8IG47DQo+IC0JCQkrK2luZGV4LCBsZW4tLSwgb2JqX3RhYmxlKyspDQo+
IC0JCSpvYmpfdGFibGUgPSBjYWNoZV9vYmpzW2xlbl07DQo+IC0NCj4gKwkvKiBQb3Agb2JqZWN0
cyBmcm9tIHRoZSBzdGFjayAqLw0KPiArCXN0YWNrX29ianMgPSAmc3RhY2stPm9ianNbc3RhY2st
Pmxlbl07DQo+ICAJc3RhY2stPmxlbiAtPSBuOw0KPiAtCXJ0ZV9zcGlubG9ja191bmxvY2soJnN0
YWNrLT5sb2NrKTsNCj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKQ0KPiAr
CQkqb2JqX3RhYmxlKysgPSAqLS1zdGFja19vYmpzOw0KPiANCj4gKwlydGVfc3BpbmxvY2tfdW5s
b2NrKCZzdGFjay0+bG9jayk7DQo+ICAJcmV0dXJuIG47DQo+ICB9DQo+IA0KPiAtLQ0KPiAyLjQz
LjANCg0K