X-Account-Key: account2
X-Mozilla-Keys: 
Return-path: <JosephChan@via.com.tw>
Envelope-to: jeff@garzik.org
Delivery-date: Mon, 21 Jul 2008 07:39:14 +0000
Received: from srv1.dvmed.net ([207.234.209.181])
	by mail.dvmed.net with esmtps (Exim 4.69 #1 (Red Hat Linux))
	id 1KKpzG-00056I-QC
	for jeff@garzik.org; Mon, 21 Jul 2008 07:39:14 +0000
Received: from mailtp.via.com.tw ([61.66.243.2])
	by srv1.dvmed.net with esmtp (Exim 4.69 #1 (Red Hat Linux))
	id 1KKpyi-0005pc-Up
	for jeff@garzik.org; Mon, 21 Jul 2008 07:39:14 +0000
Received: from exchtp03.taipei.via.com.tw ([192.168.254.205]) by mailtp.via.com.tw with Microsoft SMTPSVC(6.0.3790.3959);
	 Mon, 21 Jul 2008 15:38:39 +0800
X-MimeOLE: Produced By Microsoft Exchange V6.5
Content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: text/plain;
	charset="utf-8"
Content-Transfer-Encoding: base64
Subject: [Patch] sata_via.c: add support for VT8251, fix the internal chips issue and 
Date: Mon, 21 Jul 2008 15:38:38 +0800
Message-ID: <C80EF34A3D2E494DBAF9AC29C7AE4EB8076EC3C0@exchtp03.taipei.via.com.tw>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: [Patch] sata_via.c: add support for VT8251, fix the internal chips issue and 
Thread-Index: Acjq/me+2XEcJN2RQFy+LFahhNUPnwAAEesA
From: <JosephChan@via.com.tw>
To: <jeff@garzik.org>
Cc: <alan@lxorguk.ukuu.org.uk>,
	<akpm@osdl.org>
X-OriginalArrivalTime: 21 Jul 2008 07:38:39.0188 (UTC) FILETIME=[CA9F1940:01C8EB04]
X-Spam-Score: -4.0 (----)
X-Spam-Report: SpamAssassin version 3.2.5 on srv1.dvmed.net summary:
	Content analysis details:   (-4.0 points, 5.0 required)

RGVhciBKZWZmLA0KDQpUaGVyZSBhcmUgc29tZSBiaWcgY2hhbmdlcyBmb3Igc2F0YV92aWEuYywg
cGxlYXNlIHJlZmVyIHRvIFtTdW1tYXJ5XSBmb3IgbW9yZSBkZXRhaWwuIA0KQW55IHF1ZXN0aW9u
LCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgbWUuIFRoYW5rcy4NCg0KQlJzLA0KSm9zZXBo
IENoYW4gDQoNCj09PT09PT09PT09PT09PT09PT09DQpTdW1tYXJ5OiANCmEuIEFkZCBib2FyZCBJ
RCBmb3IgVlQ4MjUxLiANCiAgICAtVGhhdCBpcyB0aGUgVlQ4MjUxIGhhcyAyIFNBVEEgY2hhbm5l
bHMgYW5kIGVhY2ggY2hhbm5lbCBzdXBwb3J0cyBNYXN0ZXIvU2xhdmUgc2xvdCwgDQogICAgIHRo
ZSBzdGFuZGFyZCBTQVRBIG9wZXJhdGlvbnMgaW4gbGliYXRhIHN1cHBvdHMgb25seSBNYXN0ZXIg
c2xvdC4gDQpiLiBQYXRjaCA8c3ZpYV9zY3JfcmVhZD4gYW5kIDxzdmlhX3Njcl93cml0ZT4gZnVu
Y3Rpb25zIGZvciBWVDgyNTENCiAgICAtIFRoZSBsb2NhdGlvbiBvZiBTQVRBIHJlZ2lzdGVyIG9u
IFZUODI1MSBpcyBpbiBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgbm90IGluIFBDSSBCQVIuIA0K
Yy4gQWRkIGZ1bmN0aW9uIDx2aWFfYXRhX3RmX2xvYWQ+IA0KICAgIC0gRml4IHRoZSBpbnRlcm5h
bCBidWcgb2YgdmlhIGNoaXBzZXRzLCB3aGljaCB3aWxsIHJlc2V0IHRoZSBkZXZpY2UgcmVnaXN0
ZXIgYWZ0ZXIgY2hhbmdpbmcgdGhlIElFTiBiaXQgaW4gQ1RMIHJlZ2lzdGVyDQpkLiBBZGQgZnVu
Y3Rpb24gPHZpYV9zdGRfc2V0X3Bpb19tb2RlPiwgPHZpYV9zdGRfc2V0X2RtYV9tb2RlPiBhbmQg
PHZpYV9zdGRfY2FibGVfZGV0ZWN0PiANCiAgICAtIFZJQSdzIHNvbWUgUEFUQV9TQVRBIGNvbnRy
b2xsZXJzIChzdWN1IGFzIFZUNjQyMSwgQ1g3MDAgYW5kIFZYODAwKSwgYW5kIHRoZSBjb25maWd1
cmUgc3BhY2VzIGFyZSBkaWZmZXJlbnQgDQogICAgICBmb3IgdGhvc2UgY29udHJvbGxlcnMuIFRv
IGF2b2lkIHdyaXRpbmcgc2V2ZXJhbCBzaW1pbGFyIGZ1bmN0aW9ucyBmb3IgdGhlc2UgY2hpcHMs
IHRoZXNlIDMgZnVuY3Rpb25zIGFyZSB1c2VkLg0KZS4gQWRkIGZ1bmN0aW9uIDx2aWFfc3RkX3Nh
dGFfcHJlcmVzZXQ+IGFuZCA8dmlhX3N0ZF9zYXRhX2NvbXJlc2V0Pg0KICAgIC0gU2luY2Ugc29t
ZSBWSUEgU0FUQSBjb250cm9sbGVycyBzdXBwb3J0IE1hc3Rlci9TbGF2ZSBtb2RlLCBidXQgdGhl
IHN0YW5kYXJkIGhhcmRyZXNldCBpbiBsaWJhdGEgZG9lcyBub3QNCiAgICAgIHN1cHBvcnQgc2xh
dmUgc2xvdCwgc28gd2UgaW1wbGVtZW50IHRoZSBoYXJkcmVzZXQgZHVyaW5nIHByZXJlc2V0IHBy
b2Nlc3MgYW5kIHRoZW4gZG8gc29mdHJlc2V0LiANCmYuIFJlZGVmaW5lIHNhdGFfb3BzDQogICAg
LSBMaWJhdGEgZG9lcyBub3QgZG8gc29mdHJlc2V0IGZvciBTQVRBIGNvbnRyb2xsZXIgaWYgaGFy
ZHJlc2V0IGlzIGF2YWlsYWJsZSwgdG8gZW5zdXJlIHRoZSBzbGF2ZSBzbG90IGNvdWxkIGJlIGRl
dGVjdGVkLA0KICAgICAgd2Ugc2tpcCBzdGFuZGFyZCBoYXJkcmVzdCBpbiBsaWJhdGEuIEFzIGEg
cmVzdWx0LCB3ZSBjb3VsZCBub3QgaW5oZXJpdCB0aGUgb3BzIGZyb20gYXRhX2JtZG1hX3BvcnRf
b3BzLCB3aGljaA0KICAgICAgaGFzIGEgZGVmYXVsdCBoYXJkcmVzZXQuDQoNClNpZ25lZC1vZmYt
Ynk6IEpvc2VwY2ggQ2hhbiA8am9zZXBoY2hhbkB2aWEuY29tLnR3Pg0KDQotLS0gbGludXgtMi42
LjI2L2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMJMjAwOC0wNy0xNCAxNTo0NjoyMi4wMDAwMDAwMDAg
KzA4MDANCisrKyBsaW51eC0yLjYuMjYvZHJpdmVycy9hdGEvc2F0YV92aWEuYwkyMDA4LTA3LTE5
IDAzOjE5OjI5LjAwMDAwMDAwMCArMDgwMA0KQEAgLTQ2LDkgKzQ2LDE1IEBADQogI2RlZmluZSBE
UlZfTkFNRQkic2F0YV92aWEiDQogI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4zIg0KIA0KKy8qDQor
ICogdnQ4MjUxIGlzIGRpZmZlcmVudCBmcm9tIG90aGVyIHNhdGEgY29udHJvbGxlcnMgb2YgVklB
Lg0KKyAqIEl0IGhhcyB0d28gY2hhbm5lbHMsIGVhY2ggY2hhbm5lbCBoYXMgYm90aCBNYXN0ZXIg
YW5kDQorICogU2xhdmUgc2xvdA0KKyAqLw0KIGVudW0gYm9hcmRfaWRzX2VudW0gew0KIAl2dDY0
MjAsDQogCXZ0NjQyMSwNCisJdnQ4MjUxLA0KIH07DQogDQogZW51bSB7DQpAQCAtNzEsMTkgKzc3
LDI1IEBADQogc3RhdGljIGludCBzdmlhX3Njcl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVu
c2lnbmVkIGludCBzY19yZWcsIHUzMiAqdmFsKTsNCiBzdGF0aWMgaW50IHN2aWFfc2NyX3dyaXRl
KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOw0KIHN0
YXRpYyB2b2lkIHN2aWFfbm9vcF9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7DQotc3RhdGlj
IGludCB2dDY0MjBfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25n
IGRlYWRsaW5lKTsNCi1zdGF0aWMgaW50IHZ0NjQyMV9wYXRhX2NhYmxlX2RldGVjdChzdHJ1Y3Qg
YXRhX3BvcnQgKmFwKTsNCi1zdGF0aWMgdm9pZCB2dDY0MjFfc2V0X3Bpb19tb2RlKHN0cnVjdCBh
dGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KTsNCi1zdGF0aWMgdm9pZCB2dDY0
MjFfc2V0X2RtYV9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICph
ZGV2KTsNCisNCitzdGF0aWMgdm9pZCB2aWFfYXRhX3RmX2xvYWQoc3RydWN0IGF0YV9wb3J0ICph
cCwgY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpOw0KKw0KK3N0YXRpYyB2b2lkIHZpYV9z
dGRfc2V0X3Bpb19tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICph
ZGV2KTsNCitzdGF0aWMgdm9pZCB2aWFfc3RkX3NldF9kbWFfbW9kZShzdHJ1Y3QgYXRhX3BvcnQg
KmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqYWRldik7DQorc3RhdGljIGludCB2aWFfc3RkX2NhYmxl
X2RldGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsNCisNCitzdGF0aWMgaW50IHZpYV9zdGRfc2F0
YV9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssDQorCQkJdW5zaWduZWQgbG9uZyBkZWFk
bGluZSk7DQorc3RhdGljIGludCB2aWFfc3RkX3NhdGFfY29tcmVzZXQoc3RydWN0IGF0YV9wb3J0
ICphcCwgaW50IGlzTWFzdGVyKTsNCiANCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2Vf
aWQgc3ZpYV9wY2lfdGJsW10gPSB7DQorCXsgUENJX1ZERVZJQ0UoVklBLCAweDMxNDkpLCB2dDY0
MjAgfSwgLyogVHdvIHNhdGEgY2hhbm5lbHMoTWFzdGVyKSAqLw0KIAl7IFBDSV9WREVWSUNFKFZJ
QSwgMHg1MzM3KSwgdnQ2NDIwIH0sDQotCXsgUENJX1ZERVZJQ0UoVklBLCAweDA1OTEpLCB2dDY0
MjAgfSwNCi0JeyBQQ0lfVkRFVklDRShWSUEsIDB4MzE0OSksIHZ0NjQyMCB9LA0KLQl7IFBDSV9W
REVWSUNFKFZJQSwgMHgzMjQ5KSwgdnQ2NDIxIH0sDQotCXsgUENJX1ZERVZJQ0UoVklBLCAweDUy
ODcpLCB2dDY0MjAgfSwNCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4NTM3MiksIHZ0NjQyMCB9LA0K
Kwl7IFBDSV9WREVWSUNFKFZJQSwgMHgwNTkxKSwgdnQ2NDIwIH0sIC8qIFR3byBzYXRhIGNoYW5u
ZWxzKE1hc3RlcikgKi8NCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4NzM3MiksIHZ0NjQyMCB9LA0K
Kwl7IFBDSV9WREVWSUNFKFZJQSwgMHgzMjQ5KSwgdnQ2NDIxIH0sIC8qIDIgc2F0YSBjaG5scywg
MSBwYXRhIGNobmwqLw0KKwl7IFBDSV9WREVWSUNFKFZJQSwgMHg1Mjg3KSwgdnQ4MjUxIH0sIC8q
IDIgc2F0YSBjaG5scyhNYXN0ZXIvU2xhdmUpICovDQogDQogCXsgfQkvKiB0ZXJtaW5hdGUgbGlz
dCAqLw0KIH07DQpAQCAtMTAzLDMxICsxMTUsNzMgQEANCiAJQVRBX0JNRE1BX1NIVChEUlZfTkFN
RSksDQogfTsNCiANCi1zdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdnQ2NDIwX3Nh
dGFfb3BzID0gew0KLQkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywNCisvKg0KKyAq
IFRoZSBvcGVydGlvbiByZWRlZmluZWQgYnkgVklBIHRvIGltcGxlbWVudCBzYXRhIGZ1bmN0aW9u
cy4NCisgKiBTaW5jZSBzb21lIHZpYSBzYXRhIGNvbnRyb2xsZXJzIHN1cHBvcnQgTWFzdGVyL1Ns
YXZlIG1vZGUsDQorICogYnV0IHRoZSBzdGFuZGFyZCBoYXJkcmVzZXQgaW4gbGliYXRhIGNvdWxk
IG5vdCB3b3JrIHdlbGwNCisgKiBmb3Igc2xhdmUgc2xvdCwgc28gd2UgaW1wbGVtZW50IHRoZSBo
YXJkcmVzZXQgZHVyaW5nDQorICogcHJlcmVzZXQsIGFuZCB0aGVuIGRvIHNvZnRyZXNldC4gSXQg
c2hvdWxkIGJlIG1lbnRpb25lZA0KKyAqIHRoYXQgbGliYXRhIGRvZXMgbm90IGRvIHNvZnRyZXNl
dCBmb3Igc2F0YSBjb250cm9sbGVyIGlmDQorICogaGFyZHJlc2V0IGlzIGF2YWlsdWFibGUsIHRv
IGVuc3VyZSB0aGUgc2xhdmUgc2xvdCBjb3VsZA0KKyAqIGJlIGRldGVjdGVkLCB3ZSBza2lwIHN0
YW5kYXJkIGhhcmRyZXN0IGluIGxpYmF0YS4gVGhhdCBpcw0KKyAqIHdoeSB3ZSBoYXZlIHRvIHJl
ZGVmaW5lIHRoZSBzYXRhIG9wZXJhdGlvbnMgb2Ygc2F0YQ0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3Qg
YXRhX3BvcnRfb3BlcmF0aW9ucyB2aWFfc3RkX3NhdGFfb3BzID0gew0KKwkuaW5oZXJpdHMJCT0g
JmF0YV9iYXNlX3BvcnRfb3BzLA0KKw0KKwkucWNfcHJlcAkJPSBhdGFfc2ZmX3FjX3ByZXAsDQor
CS5xY19pc3N1ZQkJPSBhdGFfc2ZmX3FjX2lzc3VlLA0KKwkucWNfZmlsbF9ydGYJCT0gYXRhX3Nm
Zl9xY19maWxsX3J0ZiwNCisNCisJLnRoYXcJCQk9IGF0YV9zZmZfdGhhdywNCisJLnNvZnRyZXNl
dAkJPSBhdGFfc2ZmX3NvZnRyZXNldCwNCisJLnBvc3RyZXNldAkJPSBhdGFfc2ZmX3Bvc3RyZXNl
dCwNCisJLmVycm9yX2hhbmRsZXIJCT0gYXRhX3NmZl9lcnJvcl9oYW5kbGVyLA0KKwkucG9zdF9p
bnRlcm5hbF9jbWQJPSBhdGFfc2ZmX3Bvc3RfaW50ZXJuYWxfY21kLA0KKw0KKwkuc2ZmX2Rldl9z
ZWxlY3QJCT0gYXRhX3NmZl9kZXZfc2VsZWN0LA0KKwkuc2ZmX2NoZWNrX3N0YXR1cwk9IGF0YV9z
ZmZfY2hlY2tfc3RhdHVzLA0KKwkuc2ZmX3RmX3JlYWQJCT0gYXRhX3NmZl90Zl9yZWFkLA0KKwku
c2ZmX2V4ZWNfY29tbWFuZAk9IGF0YV9zZmZfZXhlY19jb21tYW5kLA0KKwkuc2ZmX2RhdGFfeGZl
cgkJPSBhdGFfc2ZmX2RhdGFfeGZlciwNCisJLnNmZl9pcnFfb24JCQk9IGF0YV9zZmZfaXJxX29u
LA0KKwkuc2ZmX2lycV9jbGVhcgkJPSBhdGFfc2ZmX2lycV9jbGVhciwNCisNCisJLnBvcnRfc3Rh
cnQJCT0gYXRhX3NmZl9wb3J0X3N0YXJ0LA0KKw0KKwkubW9kZV9maWx0ZXIJCT0gYXRhX2JtZG1h
X21vZGVfZmlsdGVyLA0KKw0KKwkuYm1kbWFfc2V0dXAJCT0gYXRhX2JtZG1hX3NldHVwLA0KKwku
Ym1kbWFfc3RhcnQJCT0gYXRhX2JtZG1hX3N0YXJ0LA0KKwkuYm1kbWFfc3RvcAkJCT0gYXRhX2Jt
ZG1hX3N0b3AsDQorCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywNCisNCisJLnNm
Zl90Zl9sb2FkCQk9IHZpYV9hdGFfdGZfbG9hZCwNCisNCisJLnByZXJlc2V0CQk9IHZpYV9zdGRf
c2F0YV9wcmVyZXNldCwNCiAJLmZyZWV6ZQkJCT0gc3ZpYV9ub29wX2ZyZWV6ZSwNCi0JLnByZXJl
c2V0CQk9IHZ0NjQyMF9wcmVyZXNldCwNCi19Ow0KIA0KLXN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRf
b3BlcmF0aW9ucyB2dDY0MjFfcGF0YV9vcHMgPSB7DQotCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1h
X3BvcnRfb3BzLA0KLQkuY2FibGVfZGV0ZWN0CQk9IHZ0NjQyMV9wYXRhX2NhYmxlX2RldGVjdCwN
Ci0JLnNldF9waW9tb2RlCQk9IHZ0NjQyMV9zZXRfcGlvX21vZGUsDQotCS5zZXRfZG1hbW9kZQkJ
PSB2dDY0MjFfc2V0X2RtYV9tb2RlLA0KKwkuc2NyX3JlYWQJCT0gc3ZpYV9zY3JfcmVhZCwNCisJ
LnNjcl93cml0ZQkJPSBzdmlhX3Njcl93cml0ZSwNCiB9Ow0KIA0KLXN0YXRpYyBzdHJ1Y3QgYXRh
X3BvcnRfb3BlcmF0aW9ucyB2dDY0MjFfc2F0YV9vcHMgPSB7DQorc3RhdGljIHN0cnVjdCBhdGFf
cG9ydF9vcGVyYXRpb25zIHZpYV9zdGRfcGF0YV9vcHMgPSB7DQogCS5pbmhlcml0cwkJPSAmYXRh
X2JtZG1hX3BvcnRfb3BzLA0KLQkuc2NyX3JlYWQJCT0gc3ZpYV9zY3JfcmVhZCwNCi0JLnNjcl93
cml0ZQkJPSBzdmlhX3Njcl93cml0ZSwNCisNCisJLmNhYmxlX2RldGVjdAk9IHZpYV9zdGRfY2Fi
bGVfZGV0ZWN0LA0KKwkuc2V0X3Bpb21vZGUJPSB2aWFfc3RkX3NldF9waW9fbW9kZSwNCisJLnNl
dF9kbWFtb2RlCT0gdmlhX3N0ZF9zZXRfZG1hX21vZGUsDQorDQorCS5zZmZfdGZfbG9hZAk9IHZp
YV9hdGFfdGZfbG9hZCwNCiB9Ow0KIA0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5m
byB2dDY0MjBfcG9ydF9pbmZvID0gew0KKw0KK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2
dDY0MjBfcG9ydF9pbmZvID0gew0KIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFH
X05PX0xFR0FDWSwNCiAJLnBpb19tYXNrCT0gMHgxZiwNCiAJLm13ZG1hX21hc2sJPSAweDA3LA0K
IAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LA0KLQkucG9ydF9vcHMJPSAmdnQ2NDIwX3NhdGFfb3Bz
LA0KKwkucG9ydF9vcHMJPSAmdmlhX3N0ZF9zYXRhX29wcywNCiB9Ow0KIA0KIHN0YXRpYyBzdHJ1
Y3QgYXRhX3BvcnRfaW5mbyB2dDY0MjFfc3BvcnRfaW5mbyA9IHsNCkBAIC0xMzUsNyArMTg5LDcg
QEANCiAJLnBpb19tYXNrCT0gMHgxZiwNCiAJLm13ZG1hX21hc2sJPSAweDA3LA0KIAkudWRtYV9t
YXNrCT0gQVRBX1VETUE2LA0KLQkucG9ydF9vcHMJPSAmdnQ2NDIxX3NhdGFfb3BzLA0KKwkucG9y
dF9vcHMJPSAmdmlhX3N0ZF9zYXRhX29wcywNCiB9Ow0KIA0KIHN0YXRpYyBzdHJ1Y3QgYXRhX3Bv
cnRfaW5mbyB2dDY0MjFfcHBvcnRfaW5mbyA9IHsNCkBAIC0xNDMsNyArMTk3LDIwIEBADQogCS5w
aW9fbWFzawk9IDB4MWYsDQogCS5td2RtYV9tYXNrCT0gMCwNCiAJLnVkbWFfbWFzawk9IEFUQV9V
RE1BNiwNCi0JLnBvcnRfb3BzCT0gJnZ0NjQyMV9wYXRhX29wcywNCisJLnBvcnRfb3BzCT0gJnZp
YV9zdGRfcGF0YV9vcHMsDQorfTsNCisNCisvKioNCisgKiBWVDgyNTEgaGFzIHR3byBzYXRhIGNo
YW5uZWxzLCB3aGljaCBhcmUgYm90aCBNYXN0ZXIvU2xhdmUgbW9kZS4gVGhpcyBpcyBkaWZmZXJl
bnQNCisgKiBmcm9tIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBsaWJhdGEsIHdoaWNoIHN1cHBvcnRz
IG9ubHkgbWFzdGVyIG1vZGUNCisgKi8NCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ4
MjUxX3BvcnRfaW5mbyA9IHsNCisJLmZsYWdzCQk9ICBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdf
U0xBVkVfUE9TUyB8DQorCQkJCQlBVEFfRkxBR19OT19MRUdBQ1ksDQorCS5waW9fbWFzawk9IDB4
MWYsDQorCS5td2RtYV9tYXNrCT0gMHgwNywNCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwNCisJ
LnBvcnRfb3BzCT0gJnZpYV9zdGRfc2F0YV9vcHMsDQogfTsNCiANCiBNT0RVTEVfQVVUSE9SKCJK
ZWZmIEdhcnppayIpOw0KQEAgLTE1MiwyMiArMjE5LDIzNSBAQA0KIE1PRFVMRV9ERVZJQ0VfVEFC
TEUocGNpLCBzdmlhX3BjaV90YmwpOw0KIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsNCiAN
CisvKioNCisgKiBGb3IgY29udHJvbGxlciAweDgyNTEgYW5kIG94MDU4MS8weDUzMjQsIHRoZSBz
YXRhIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIGRvIG5vdA0KKyAqIGxvY2F0ZSBpbiB0aGUgUENJIEJB
UnMsIGluc3RlYWQsIHRoZXkgYXJlIGluIHRoZSBQQ0kgY29uZmlndXJlIHNwYWNlLg0KKyAqLw0K
IHN0YXRpYyBpbnQgc3ZpYV9zY3JfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBp
bnQgc2NfcmVnLCB1MzIgKnZhbCkNCiB7DQotCWlmIChzY19yZWcgPiBTQ1JfQ09OVFJPTCkNCisJ
c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOw0KKwl1OCAg
Y29uZmlnX3NwYWNlX3ZhbHVlOw0KKyAgICB1OCAgYnl0ZV90ZW1wOw0KKwl1MzIgc2NyX3ZhbHVl
Ow0KKyAgICB1MzIgZHdvcmRfdGVtcDsNCisgICAgczggIHNoaWZ0Ow0KKyAgICB1OCAgc2xvdDsN
CisNCisgICAgdW5zaWduZWQgaW50IHNjcl9yZWcgPSBzY19yZWc7DQorDQorICAgIGlmIChzY3Jf
cmVnID4gU0NSX0NPTlRST0wpIHsNCisJCVZQUklOVEsoImludmFsaWQgc2NyWyVkXSBhZGRyZXNz
IVxuIiwgc2NyX3JlZyk7DQogCQlyZXR1cm4gLUVJTlZBTDsNCi0JKnZhbCA9IGlvcmVhZDMyKGFw
LT5pb2FkZHIuc2NyX2FkZHIgKyAoNCAqIHNjX3JlZykpOw0KLQlyZXR1cm4gMDsNCisgICAgfQ0K
Kw0KKw0KKyAgICBpZiAoIShwZGV2LT5kZXZpY2UgPT0gMHg1Mjg3IHx8IHBkZXYtPmRldmljZSA9
PSAweDA1ODEgfHwNCisJCXBkZXYtPmRldmljZSA9PSAweDUzMjQpKQ0KKwkJKnZhbCA9IGlvcmVh
ZDMyKGFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoNCAqIHNjcl9yZWcpKTsNCisgICAgZWxzZSB7DQor
CQljb25maWdfc3BhY2VfdmFsdWUgPSAwOw0KKwkJc2NyX3ZhbHVlID0gMDsNCisJCXNoaWZ0ICAg
ICA9IDA7DQorDQorCQkvKioNCisJCSAqIFNpbmNlIHRoZXNlIGNoaXBzIGRvIG5vdCB1c2UgaW9t
YXAgdG8gZ2V0IHRoZSBhZGRyZXNzIG9mIHNjciwNCisJCSAqIHdlIHVzZSB0aGVzZSByZWdpc3Rl
ciB0byBzdG9yZSB0aGUgc2xvdCBpbmRleA0KKwkJICovDQorCQlzbG90ID0gKHUzMilhcC0+aW9h
ZGRyLnNjcl9hZGRyICYgMHgwMzsNCisNCisJCWlmIChzY3JfcmVnID09IFNDUl9TVEFUVVMpIHsN
CisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAoMHhBMCArIChzbG90ICYgMHgwMykpLA0K
KwkJCQkmY29uZmlnX3NwYWNlX3ZhbHVlKTsNCisNCisJCQkvKiBTZXQgdGhlIERFVCBmaWVsZCwg
Yml0MCBhbmQgMSBvZiB0aGUgY29uZmlnIGJ5dGUgKi8NCisJCQlzY3JfdmFsdWUgfD0gKGNvbmZp
Z19zcGFjZV92YWx1ZSAmIDB4MDMpOw0KKw0KKwkJCS8qIFNldCB0aGUgU1BEIGZpZWxkLCBiaXQ0
IG9mIHRoZSBjb25maWd1cmUgYnl0ZSAqLw0KKwkJCWlmIChjb25maWdfc3BhY2VfdmFsdWUgJiAo
MTw8NCkpDQorCQkJCXNjcl92YWx1ZSB8PSAodTgpKDB4MDIgPDwgNCk7DQorCQkJZWxzZQ0KKwkJ
CQlzY3JfdmFsdWUgfD0gKHU4KSgweDAxIDw8IDQpOw0KKw0KKwkJCS8qIFNldCB0aGUgSVBNIGZp
ZWxkLCBiaXQyIGFuZCAzIG9mIHRoZSBjb25maWcgYnl0ZSAqLw0KKwkJCWJ5dGVfdGVtcCA9IChj
b25maWdfc3BhY2VfdmFsdWUgPj4gMikgJiAweDAzOw0KKwkJCXNoaWZ0ID0gYnl0ZV90ZW1wIC0g
MTsNCisJCQlpZiAoc2hpZnQgPCAwKQ0KKwkJCQlzaGlmdCA9IDA7DQorDQorCQkJZHdvcmRfdGVt
cCA9IChieXRlX3RlbXAgKyAweDAxKSA8PCBzaGlmdDsNCisJCQlzY3JfdmFsdWUgIHw9ICgoZHdv
cmRfdGVtcCAmIDB4MGYpIDw8IDgpOw0KKwkJfSBlbHNlIGlmIChzY3JfcmVnID09IFNDUl9FUlJP
Uikgew0KKwkJCWlmIChwZGV2LT5kZXZpY2UgPT0gMHg1Mjg3KQ0KKwkJCQlwY2lfcmVhZF9jb25m
aWdfZHdvcmQocGRldiwNCisJCQkJKDB4QjAgKyAoc2xvdCAmIDB4MDMpICogNCksICZzY3JfdmFs
dWUpOw0KKwkJCWVsc2UNCisJCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsDQorCQkJCSgw
eEE4ICsgKHNsb3QgJiAweDAzKSAqIDQpLCAmc2NyX3ZhbHVlKTsNCisJCX0gZWxzZSBpZiAoc2Ny
X3JlZyA9PSBTQ1JfQ09OVFJPTCkgew0KKwkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsDQor
CQkJCSgweEE0ICsgKHNsb3QgJiAweDAzKSksICZjb25maWdfc3BhY2VfdmFsdWUpOw0KKw0KKwkJ
CSAvKiBSZWFkIHRoZSBERVQgZmllbGQsIGJpdDAgYW5kIGJpdDEgKi8NCisJCQkgYnl0ZV90ZW1w
ID0gY29uZmlnX3NwYWNlX3ZhbHVlICYgMHgwMzsNCisJCQkgc2NyX3ZhbHVlIHw9ICgoKGJ5dGVf
dGVtcCAmIDB4MDIpIDw8IDEpIHwNCisJCQkJIChieXRlX3RlbXAgJiAweDAxKSk7DQorDQorCQkJ
LyogUmVhZCB0aGUgU1BEIGZpZWxkLCBiaXQ0ICovDQorCQkJc2NyX3ZhbHVlICY9IH4odTMyKTB4
RjA7DQorDQorCQkJLyogUmVhZCB0aGUgSVBNIGZpZWxkLCBiaXQyIGFuZCBiaXQzICovDQorCQkJ
ZHdvcmRfdGVtcCA9IChjb25maWdfc3BhY2VfdmFsdWUgPj4gMikgJiAweDAzOw0KKwkJCXNjcl92
YWx1ZSAgfD0gKGR3b3JkX3RlbXAgPDwgOCk7DQorCQl9DQorDQorCQkqdmFsID0gc2NyX3ZhbHVl
Ow0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KIH0NCiANCisNCisNCiBzdGF0aWMgaW50IHN2
aWFfc2NyX3dyaXRlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUz
MiB2YWwpDQogew0KLQlpZiAoc2NfcmVnID4gU0NSX0NPTlRST0wpDQorCXN0cnVjdCBwY2lfZGV2
ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsNCisJdTggIGNvbmZpZ19zcGFjZV92
YWx1ZTsNCisgICAgdTggIGJ5dGVfdGVtcDsNCisgICAgdTggIHNsb3Q7DQorDQorCXVuc2lnbmVk
IGludCBzY3JfcmVnID0gc2NfcmVnOw0KKw0KKyAgICBpZiAoc2NyX3JlZyA+IFNDUl9DT05UUk9M
KSB7DQorCQlWUFJJTlRLKCJpbnZhbGlkIHNjclslZF0gYWRkcmVzcyFcbiIsIHNjcl9yZWcpOw0K
IAkJcmV0dXJuIC1FSU5WQUw7DQotCWlvd3JpdGUzMih2YWwsIGFwLT5pb2FkZHIuc2NyX2FkZHIg
KyAoNCAqIHNjX3JlZykpOw0KKyAgICB9DQorDQorICAgIGlmIChzY3JfcmVnID09IFNDUl9TVEFU
VVMpIHsNCisJCVZQUklOVEsoInNjcl9zdGF0dXMgY2FuIG5vdCBiZSB3cml0ZSFcbiIpOw0KKwkJ
cmV0dXJuIC1FSU5WQUw7DQorICAgIH0NCisNCisgICAgaWYgKCEocGRldi0+ZGV2aWNlID09IDB4
NTI4NyB8fCBwZGV2LT5kZXZpY2UgPT0gMHgwNTgxIHx8DQorCQlwZGV2LT5kZXZpY2UgPT0gMHg1
MzI0KSkNCisJCWlvd3JpdGUzMih2YWwsIGFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoNCAqIHNjcl9y
ZWcpKTsNCisgICAgZWxzZSB7DQorCQlieXRlX3RlbXAgID0gMDsNCisJCWNvbmZpZ19zcGFjZV92
YWx1ZSA9IDA7DQorDQorCQkvKiBUbyBnZXQgdGhlIHNsb3QgaW5kZXggKi8NCisJICAgIHNsb3Qg
PSAodTMyKSBhcC0+aW9hZGRyLnNjcl9hZGRyICYgMHgwMzsNCisNCisJCWlmIChzY3JfcmVnID09
IFNDUl9FUlJPUikgew0KKwkJCWlmIChwZGV2LT5kZXZpY2UgPT0gMHg1Mjg3KQ0KKwkJCQlwY2lf
d3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsDQorCQkJCSgweEIwICsgKHNsb3QgJiAweDAzKSAqIDQp
LCB2YWwpOw0KKwkJCWVsc2UNCisJCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LA0KKwkJ
CQkoMHhBOCArIChzbG90ICYgMHgwMykgKiA0KSwgdmFsKTsNCisJCX0gZWxzZSBpZiAoc2NyX3Jl
ZyA9PSBTQ1JfQ09OVFJPTCkgew0KKwkJCS8qIFNldCB0aGUgREVUIGZpZWxkICovDQorCQkJYnl0
ZV90ZW1wID0gKCgodTgpKHZhbCAmIDB4MDQpKSA+PiAxKSB8DQorCQkJCSgodTgpKHZhbCAmIDB4
MDEpKTsNCisJCQljb25maWdfc3BhY2VfdmFsdWUgfD0gKGJ5dGVfdGVtcCAmIDB4MEYpOw0KKw0K
KwkJCS8qIFNldCB0aGUgSVBNIGZpZWxkICovDQorCQkJYnl0ZV90ZW1wID0gKHZhbCA+PiA4KSAm
IDB4MDM7DQorCQkJY29uZmlnX3NwYWNlX3ZhbHVlIHw9IChieXRlX3RlbXAgPDwgMik7DQorCQkJ
cGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsICgweEE0ICsgKHNsb3QgJiAweDAzKSksDQorCQkJ
CWNvbmZpZ19zcGFjZV92YWx1ZSk7DQorCQl9DQorICAgIH0NCisNCiAJcmV0dXJuIDA7DQogfQ0K
IA0KKy8qKg0KKyAqCXZpYV9hdGFfc2ZmX3RmX2xvYWQgLSBzZW5kIHRhc2tmaWxlIHJlZ2lzdGVy
cyB0byBob3N0IGNvbnRyb2xsZXINCisgKglAYXA6IFBvcnQgdG8gd2hpY2ggb3V0cHV0IGlzIHNl
bnQNCisgKglAdGY6IEFUQSB0YXNrZmlsZSByZWdpc3RlciBzZXQNCisgKg0KKyAqCU91dHB1dHMg
QVRBIHRhc2tmaWxlIHRvIHN0YW5kYXJkIEFUQSBob3N0IGNvbnRyb2xsZXIuDQorICoNCisgKglO
b3RlOiBUaGlzIGlzIHRvIGZpeCB0aGUgaW50ZXJuYWwgYnVnIG9mIHZpYSBjaGlwc2V0cywNCisg
KiAgd2hpY2ggd2lsbCByZXNldCB0aGUgZGV2aWNlIHJlZ2lzdGVyIGFmdGVyIGNoYW5naW5nIHRo
ZSBJRU4gYml0DQorICogIG9uIGN0bCByZWdpc3Rlcg0KKyAqLw0KK3N0YXRpYyB2b2lkIHZpYV9h
dGFfdGZfbG9hZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxl
ICp0ZikNCit7DQorCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7DQor
CXVuc2lnbmVkIGludCBpc19hZGRyID0gdGYtPmZsYWdzICYgQVRBX1RGTEFHX0lTQUREUjsNCisN
CisJaWYgKHRmLT5jdGwgIT0gYXAtPmxhc3RfY3RsKSB7DQorCQlpb3dyaXRlOCh0Zi0+Y3RsLCBp
b2FkZHItPmN0bF9hZGRyKTsNCisJCWlvd3JpdGU4KHRmLT5kZXZpY2UsIGlvYWRkci0+ZGV2aWNl
X2FkZHIpOw0KKwkJYXAtPmxhc3RfY3RsID0gdGYtPmN0bDsNCisJCWF0YV93YWl0X2lkbGUoYXAp
Ow0KKwl9DQorDQorCWlmIChpc19hZGRyICYmICh0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfTEJBNDgp
KSB7DQorCQlpb3dyaXRlOCh0Zi0+aG9iX2ZlYXR1cmUsIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsN
CisJCWlvd3JpdGU4KHRmLT5ob2JfbnNlY3QsIGlvYWRkci0+bnNlY3RfYWRkcik7DQorCQlpb3dy
aXRlOCh0Zi0+aG9iX2xiYWwsIGlvYWRkci0+bGJhbF9hZGRyKTsNCisJCWlvd3JpdGU4KHRmLT5o
b2JfbGJhbSwgaW9hZGRyLT5sYmFtX2FkZHIpOw0KKwkJaW93cml0ZTgodGYtPmhvYl9sYmFoLCBp
b2FkZHItPmxiYWhfYWRkcik7DQorCQlWUFJJTlRLKCJob2I6IGZlYXQgMHglWCBuc2VjdCAweCVY
LCBsYmEgMHglWCAweCVYIDB4JVhcbiIsDQorCQkJdGYtPmhvYl9mZWF0dXJlLA0KKwkJCXRmLT5o
b2JfbnNlY3QsDQorCQkJdGYtPmhvYl9sYmFsLA0KKwkJCXRmLT5ob2JfbGJhbSwNCisJCQl0Zi0+
aG9iX2xiYWgpOw0KKwl9DQorDQorCWlmIChpc19hZGRyKSB7DQorCQlpb3dyaXRlOCh0Zi0+ZmVh
dHVyZSwgaW9hZGRyLT5mZWF0dXJlX2FkZHIpOw0KKwkJaW93cml0ZTgodGYtPm5zZWN0LCBpb2Fk
ZHItPm5zZWN0X2FkZHIpOw0KKwkJaW93cml0ZTgodGYtPmxiYWwsIGlvYWRkci0+bGJhbF9hZGRy
KTsNCisJCWlvd3JpdGU4KHRmLT5sYmFtLCBpb2FkZHItPmxiYW1fYWRkcik7DQorCQlpb3dyaXRl
OCh0Zi0+bGJhaCwgaW9hZGRyLT5sYmFoX2FkZHIpOw0KKwkJVlBSSU5USygiZmVhdCAweCVYIG5z
ZWN0IDB4JVggbGJhIDB4JVggMHglWCAweCVYXG4iLA0KKwkJCXRmLT5mZWF0dXJlLA0KKwkJCXRm
LT5uc2VjdCwNCisJCQl0Zi0+bGJhbCwNCisJCQl0Zi0+bGJhbSwNCisJCQl0Zi0+bGJhaCk7DQor
CX0NCisNCisJaWYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19ERVZJQ0UpIHsNCisJCWlvd3JpdGU4
KHRmLT5kZXZpY2UsIGlvYWRkci0+ZGV2aWNlX2FkZHIpOw0KKwkJVlBSSU5USygiZGV2aWNlIDB4
JVhcbiIsIHRmLT5kZXZpY2UpOw0KKwl9DQorDQorCWF0YV93YWl0X2lkbGUoYXApOw0KK30NCisN
CitzdGF0aWMgaW50IHZpYV9zdGRfY2FibGVfZGV0ZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXApDQor
ew0KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7DQor
CXU4IHRtcDsNCisJaW50IGNmZ19hZGRyOw0KKw0KKwlpZiAoYXAtPnBvcnRfbm8gPT0gMikgew0K
KwkJaWYgKHBkZXYtPmRldmljZSA9PSAweDMyNDkpIHsNCisJCQljZmdfYWRkciA9IDB4QjM7DQor
CQkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgY2ZnX2FkZHIsICZ0bXApOw0KKwkJCWlmICh0
bXAgJiAweDEwKQ0KKwkJCQlyZXR1cm4gQVRBX0NCTF9QQVRBNDA7DQorCQkJcmV0dXJuIEFUQV9D
QkxfUEFUQTgwOw0KKwkJfQ0KKwl9IGVsc2UgaWYgKGFwLT5wb3J0X25vID09IDEpIHsNCisJCWlm
ICgocGRldi0+ZGV2aWNlID09IDB4MDU4MSkgfHwgKHBkZXYtPmRldmljZSA9PSAweDUzMjQpKSB7
DQorCQkJY2ZnX2FkZHIgPSAweDUwOw0KKwkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIGNm
Z19hZGRyLCAmdG1wKTsNCisJCQlpZiAodG1wICYgMHgxMCkgLyogNDBwaW4gY2FibGUgKi8NCisJ
CQkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwOw0KKwkJCWVsc2UgLyogODBwaW4gY2FibGUgKi8NCisJ
CQkJcmV0dXJuIEFUQV9DQkxfUEFUQTgwOw0KKwkJfQ0KKwl9DQorDQorCXJldHVybiBBVEFfQ0JM
X1NBVEE7DQorfQ0KKw0KIHN0YXRpYyB2b2lkIHN2aWFfbm9vcF9mcmVlemUoc3RydWN0IGF0YV9w
b3J0ICphcCkNCiB7DQogCS8qIFNvbWUgVklBIGNvbnRyb2xsZXJzIGNob2tlIGlmIEFUQV9OSUVO
IGlzIG1hbmlwdWxhdGVkIGluDQpAQCAtMTc3LDE5ICs0NTcsMTE4IEBADQogCWF0YV9zZmZfaXJx
X2NsZWFyKGFwKTsNCiB9DQogDQorIC8qKg0KKyAqCXZpYV9zdGRfc2F0YV9jb21yZXNldCAtIGNv
bXJlc2V0IGZvciB2aWEgc2F0YSBjb250cm9sbGVyDQorICoJQGFwOiB0YXJnZXQgQVRBIHBvcnQN
CisgKglAaXNNYXN0ZXI6IHdoZXRoZXIgdGhlIGlucHV0IHBvcnQgaXMgbWFzdGVyIHNsb3QNCisg
Kg0KKyAqCVNvbWUgVklBIGNvbnRyb2xsZXJzIGRvZXMgbm90IHVzZSBQQ0kgQkFSIHRvIG1hcCB0
aGUgc2F0YQ0KKyAqICBjb250cm9sbGVyIHJlZ2lzdGVycywgYmVzaWRlcywgc29tZSB2aWEgZGF0
YSBjb250cm9sbGVycw0KKyAqICBoYXZlIGJvdGggbWFzdGVyIGFuZCBzbGF2ZSBzbG90cy4gQXMg
YSByZXN1bHQsIHN0YW5kYXJkDQorICogIG9wZXJhdGlvbnMgaW4gbGliYXRhIGNvdWxkIG5vdCB3
b3JrIHdlbGwNCisgKg0KKyAqCUxPQ0tJTkc6DQorICoJS2VybmVsIHRocmVhZCBjb250ZXh0ICht
YXkgc2xlZXApDQorICoNCisgKglSRVRVUk5TOg0KKyAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90
aGVyd2lzZS4NCisgKi8NCitzdGF0aWMgaW50IHZpYV9zdGRfc2F0YV9jb21yZXNldChzdHJ1Y3Qg
YXRhX3BvcnQgKmFwLCBpbnQgaXNNYXN0ZXIpDQorew0KKyAgICBzdHJ1Y3QgcGNpX2RldiAqcGRl
diA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7DQorCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9
IGppZmZpZXMgKyAoSFogKiA1KTsNCisJdTMyIHNzdGF0dXMsIHNjb250cm9sLCBzZXJyb3I7DQor
CWludCBvbmxpbmUgPSAwOw0KKw0KKwlpbnQgc2xvdDsNCisgICAgaW50IHNsb3Rfc3RhcnQgPSBh
cC0+cG9ydF9ubzsNCisJdW5zaWduZWQgaW50IGRldiA9IDA7DQorDQorCXVuc2lnbmVkIGludCBj
YmxfdG1wID0gdmlhX3N0ZF9jYWJsZV9kZXRlY3QoYXApOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdf
dG1wID0gYXAtPmZsYWdzOw0KKw0KKwlpZiAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0xBVkVfUE9T
UykNCisJCXNsb3Rfc3RhcnQgPSBzbG90X3N0YXJ0IDw8IDE7DQorDQorCWFwLT5jYmwgPSBBVEFf
Q0JMX1NBVEE7DQorCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TQVRBOw0KKw0KKwl7DQorCQlzbG90
ID0gKGlzTWFzdGVyID8gMCA6IDEpICsgc2xvdF9zdGFydDsNCisJCWlmIChwZGV2LT5kZXZpY2Ug
PT0gMHg1Mjg3IHx8IHBkZXYtPmRldmljZSA9PSAweDA1ODEgfHwNCisJCQlwZGV2LT5kZXZpY2Ug
PT0gMHg1MzI0KQ0KKwkJCWFwLT5pb2FkZHIuc2NyX2FkZHIgPSAodm9pZCBfX2lvbWVtICopc2xv
dDsNCisNCisJCWRldiA9ICAoYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0xBVkVfUE9TUykgPyAoc2xv
dCYweDAxKSA6IDA7DQorCQlhcC0+b3BzLT5zZmZfZGV2X3NlbGVjdChhcCwgZGV2KTsNCisNCisJ
CURQUklOVEsoIkNvbXJlc2V0IFNBVEEgRGV2aWNlICVYIFBPUlQgOiAlZCwgU0xPVCA6ICVzXG4i
LCBcDQorCQkJICAgIHBkZXYtPmRldmljZSwgYXAtPnBvcnRfbm8sIFwNCisJCQkJKGRldiA9PSAw
KSA/ICI8TWFzdGVyPiIgOiAiPFNsYXZlPiIpOw0KKw0KKwkJYXAtPm9wcy0+c2NyX3JlYWQoYXAs
IFNDUl9DT05UUk9MLCAmc2NvbnRyb2wpOw0KKwkJc2NvbnRyb2wgPSAoc2NvbnRyb2wgJiAweDBm
MCkgfCAweDMwMTsNCisJCWFwLT5vcHMtPnNjcl93cml0ZShhcCwgU0NSX0NPTlRST0wsIHNjb250
cm9sKTsNCisJCWFwLT5vcHMtPnNjcl9yZWFkKGFwLCBTQ1JfQ09OVFJPTCwgJnNjb250cm9sKTsN
CisNCisJCW1zbGVlcCgyKTsNCisJCXNjb250cm9sID0gKHNjb250cm9sICYgMHgwZjApIHwgMHgz
MDA7DQorCQlhcC0+b3BzLT5zY3Jfd3JpdGUoYXAsIFNDUl9DT05UUk9MLCBzY29udHJvbCk7DQor
CQlhcC0+b3BzLT5zY3JfcmVhZChhcCwgU0NSX0NPTlRST0wsICZzY29udHJvbCk7IC8qIGZsdXNo
ICovDQorDQorCQkvKiB3YWl0IGZvciBwaHkgdG8gYmVjb21lIHJlYWR5LCBpZiBuZWNlc3Nhcnkg
Ki8NCisJCWRvIHsNCisJCQltc2xlZXAoMjAwKTsNCisJCQlhcC0+b3BzLT5zY3JfcmVhZChhcCwg
U0NSX1NUQVRVUywgJnNzdGF0dXMpOw0KKwkJCWlmICgoc3N0YXR1cyAmIDB4ZikgIT0gMSkNCisJ
CQkJYnJlYWs7DQorCQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7DQor
DQorCQkvKiBvcGVuIGNvZGUgc2F0YV9wcmludF9saW5rX3N0YXR1cygpICovDQorCQlhcC0+b3Bz
LT5zY3JfcmVhZChhcCwgU0NSX1NUQVRVUywgJnNzdGF0dXMpOw0KKwkJYXAtPm9wcy0+c2NyX3Jl
YWQoYXAsIFNDUl9DT05UUk9MLCAmc2NvbnRyb2wpOw0KKwkJYXAtPm9wcy0+c2NyX3JlYWQoYXAs
IFNDUl9FUlJPUiwgJnNlcnJvcik7DQorCQlhcC0+b3BzLT5zY3Jfd3JpdGUoYXAsIFNDUl9FUlJP
Uiwgc2Vycm9yKTsNCisNCisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLA0KKwkJCQki
U0FUQSBsaW5rICVzIChTU3RhdHVzICVYIFNDb250cm9sICVYKVxuIiwNCisJCQkJb25saW5lID8g
InVwIiA6ICJkb3duIiwgc3N0YXR1cywgc2NvbnRyb2wpOw0KKw0KKwkJLyogU1N0YXR1cyBpcyBy
ZWFkIG9uZSBtb3JlIHRpbWUgKi8NCisJCWFwLT5vcHMtPnNjcl9yZWFkKGFwLCBTQ1JfU1RBVFVT
LCAmc3N0YXR1cyk7DQorDQorCQlvbmxpbmUgPSAoc3N0YXR1cyAmIDB4ZikgPT0gMHgzOw0KKwkJ
aWYgKCFvbmxpbmUpIHsNCisJCQkvKiB0ZWxsIEVIIHRvIGJhaWwgKi8NCisJCQlEUFJJTlRLKCJD
b21yZXNldCAlWCBQT1JUIDogJWQsIFNMT1QgOiAlcyAgZmFpbGVkXG4iLCBcDQorCQkJCSAgIHBk
ZXYtPmRldmljZSwgYXAtPnBvcnRfbm8sIFwNCisJCQkJCShkZXYgPT0gMCkgPyAiPE1hc3Rlcj4i
IDogIjxTbGF2ZT4iKTsNCisNCisJCQlhcC0+Y2JsID0gY2JsX3RtcDsNCisJCQlhcC0+ZmxhZ3Mg
PSBmbGFnX3RtcDsNCisJCQlyZXR1cm4gLUVOT0RFVjsNCisJCX0NCisJCURQUklOVEsoIkNvbXJl
c2V0ICVYIFBPUlQgOiAlZCwgU0xPVCA6ICVzIHN1Y2NlZWRlZC5cbiIsIFwNCisJCQkgICAgIHBk
ZXYtPmRldmljZSwgYXAtPnBvcnRfbm8sIFwNCisJCQkJKGRldiA9PSAwKSA/ICI8TWFzdGVyPiIg
OiAiPFNsYXZlPiIpOw0KKw0KKwl9DQorDQorCWFwLT5jYmwgPSBjYmxfdG1wOw0KKwlhcC0+Zmxh
Z3MgPSBmbGFnX3RtcDsNCisNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKw0KIC8qKg0KLSAqCXZ0
NjQyMF9wcmVyZXNldCAtIHByZXJlc2V0IGZvciB2dDY0MjANCisgKgl2aWFfc3RkX3NhdGFfcHJl
cmVzZXQgLSBwcmVyZXNldCBmb3IgdmlhIHNhdGEgY29udHJvbGxlcnMNCiAgKglAbGluazogdGFy
Z2V0IEFUQSBsaW5rDQogICoJQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3Bl
cmF0aW9uDQogICoNCi0gKglTQ1IgcmVnaXN0ZXJzIG9uIHZ0NjQyMCBhcmUgcGllY2VzIG9mIHNo
aXQgYW5kIG1heSBoYW5nIHRoZQ0KLSAqCXdob2xlIG1hY2hpbmUgY29tcGxldGVseSBpZiBhY2Nl
c3NlZCB3aXRoIHRoZSB3cm9uZyB0aW1pbmcuDQotICoJVG8gYXZvaWQgc3VjaCBjYXRhc3Ryb3Bo
ZSwgdnQ2NDIwIGRvZXNuJ3QgcHJvdmlkZSBnZW5lcmljIFNDUg0KLSAqCWFjY2VzcyBvcGVyYXRp
b25zLCBidXQgdXNlcyBTU3RhdHVzIGFuZCBTQ29udHJvbCBvbmx5IGR1cmluZw0KLSAqCWJvb3Qg
cHJvYmluZyBpbiBjb250cm9sbGVkIHdheS4NCi0gKg0KLSAqCUFzIHRoZSBvbGQgKHByZSBFSCB1
cGRhdGUpIHByb2JpbmcgY29kZSBpcyBwcm92ZW4gdG8gd29yaywgd2UNCi0gKglzdHJpY3RseSBm
b2xsb3cgdGhlIGFjY2VzcyBwYXR0ZXJuLg0KKyAqCVN0YW5kYXJkIGVycm9yIGhhbmRsaW5nIHdp
bGwgcmV0cnkgc2V2ZXJhbCB0aW1lcyBpZiByZXNldA0KKyAqICBmYWlscywgdGhpcyBtYWtlcyB1
c2VycyBjYW5ub3QgYmVhciBpdC4NCiAgKg0KICAqCUxPQ0tJTkc6DQogICoJS2VybmVsIHRocmVh
ZCBjb250ZXh0IChtYXkgc2xlZXApDQpAQCAtMTk3LDc5ICs1NzYsMTQ2IEBADQogICoJUkVUVVJO
UzoNCiAgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuDQogICovDQotc3RhdGljIGlu
dCB2dDY0MjBfcHJlcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRl
YWRsaW5lKQ0KK3N0YXRpYyBpbnQgdmlhX3N0ZF9zYXRhX3ByZXJlc2V0KHN0cnVjdCBhdGFfbGlu
ayAqbGluaywgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkNCiB7DQogCXN0cnVjdCBhdGFfcG9ydCAq
YXAgPSBsaW5rLT5hcDsNCi0Jc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmYXAtPmxpbmsu
ZWhfY29udGV4dDsNCi0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIChIWiAqIDUp
Ow0KLQl1MzIgc3N0YXR1cywgc2NvbnRyb2w7DQotCWludCBvbmxpbmU7DQorICAgIHN0cnVjdCBw
Y2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsNCisJaW50IGRldm1hc2sg
PSAwOw0KKwlpbnQgc2xvdF9jbnQgPSAwOw0KKwlpbnQgc2xvdDsNCisJaW50IHJjOw0KKwl1OCBz
dGF0dXM7DQogDQogCS8qIGRvbid0IGRvIGFueSBTQ1Igc3R1ZmYgaWYgd2UncmUgbm90IGxvYWRp
bmcgKi8NCiAJaWYgKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19MT0FESU5HKSkNCiAJCWdvdG8g
c2tpcF9zY3I7DQogDQotCS8qIFJlc3VtZSBwaHkuICBUaGlzIGlzIHRoZSBvbGQgU0FUQSByZXN1
bWUgc2VxdWVuY2UgKi8NCi0Jc3ZpYV9zY3Jfd3JpdGUoYXAsIFNDUl9DT05UUk9MLCAweDMwMCk7
DQotCXN2aWFfc2NyX3JlYWQoYXAsIFNDUl9DT05UUk9MLCAmc2NvbnRyb2wpOyAvKiBmbHVzaCAq
Lw0KLQ0KLQkvKiB3YWl0IGZvciBwaHkgdG8gYmVjb21lIHJlYWR5LCBpZiBuZWNlc3NhcnkgKi8N
Ci0JZG8gew0KLQkJbXNsZWVwKDIwMCk7DQotCQlzdmlhX3Njcl9yZWFkKGFwLCBTQ1JfU1RBVFVT
LCAmc3N0YXR1cyk7DQotCQlpZiAoKHNzdGF0dXMgJiAweGYpICE9IDEpDQotCQkJYnJlYWs7DQot
CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsNCi0NCi0JLyogb3BlbiBj
b2RlIHNhdGFfcHJpbnRfbGlua19zdGF0dXMoKSAqLw0KLQlzdmlhX3Njcl9yZWFkKGFwLCBTQ1Jf
U1RBVFVTLCAmc3N0YXR1cyk7DQotCXN2aWFfc2NyX3JlYWQoYXAsIFNDUl9DT05UUk9MLCAmc2Nv
bnRyb2wpOw0KLQ0KLQlvbmxpbmUgPSAoc3N0YXR1cyAmIDB4ZikgPT0gMHgzOw0KLQ0KLQlhdGFf
cG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywNCi0JCQkiU0FUQSBsaW5rICVzIDEuNSBHYnBzIChT
U3RhdHVzICVYIFNDb250cm9sICVYKVxuIiwNCi0JCQlvbmxpbmUgPyAidXAiIDogImRvd24iLCBz
c3RhdHVzLCBzY29udHJvbCk7DQotDQotCS8qIFNTdGF0dXMgaXMgcmVhZCBvbmUgbW9yZSB0aW1l
ICovDQotCXN2aWFfc2NyX3JlYWQoYXAsIFNDUl9TVEFUVVMsICZzc3RhdHVzKTsNCi0NCi0JaWYg
KCFvbmxpbmUpIHsNCi0JCS8qIHRlbGwgRUggdG8gYmFpbCAqLw0KLQkJZWhjLT5pLmFjdGlvbiAm
PSB+QVRBX0VIX1JFU0VUOw0KLQkJcmV0dXJuIDA7DQorCXNsb3RfY250ID0gKGFwLT5mbGFncyAm
IEFUQV9GTEFHX1NMQVZFX1BPU1MpID8gMiA6IDE7DQorCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBz
bG90X2NudDsgKytzbG90KSB7DQorCQlyYyA9IHZpYV9zdGRfc2F0YV9jb21yZXNldChhcCwgKHNs
b3QlMiA9PSAwKSA/IDEgOiAwKTsNCisJCWlmICghcmMpDQorCQkJZGV2bWFzayB8PSAoMTw8c2xv
dCk7DQorDQorCQlyYyA9IGF0YV9zZmZfd2FpdF9yZWFkeShsaW5rLCBkZWFkbGluZSk7DQorCQlz
dGF0dXMgPSBsaW5rLT5hcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGxpbmstPmFwKTsNCisJCURQ
UklOVEsoIlByZXJlc2V0ICVYIGZvciBQT1JUJWQgc3RhdHVzICV4OiBcbiIsIFwNCisJCQkJcGRl
di0+ZGV2aWNlLCBhcC0+cG9ydF9ubywgc3RhdHVzKTsNCisJCWlmIChyYyAhPSAwKSB7DQorCQkJ
RFBSSU5USygiUHJlcmVzZXQgJVggZm9yIFBPUlQlZCBmYWlsZWRcbiIsIFwNCisJCQkJCQlwZGV2
LT5kZXZpY2UsIGFwLT5wb3J0X25vKTsNCisJCQlkZXZtYXNrICY9IH4oMTw8c2xvdCk7DQorCQl9
DQorCX0NCisNCisJLyoNCisJICogVG8gZml4IHRoZSBvbmxpbmUgY2hlY2sgaW4gbGliYXRhLiBU
aGUgc29mdHJlc2V0IGluIGxpYmF0YSB3aWxsIGNoZWNrDQorCSAqIHdoZXRoZXIgdGhlIE1hc3Rl
ciBzbG90IHdpbGwgYmUgb25saW5lIGZvciBhbiBhdGEgbGluaywgc28gd2Ugc2hvdWxkDQorCSAq
IHJlc2V0IHRoZSBtYXN0ZXIgcG9ydCBhZ2FpbiBpZiB0aGUgc2xhdmUgc2xvdCBkb2VzIG5vdCBo
YXZlIGEgZGV2aWNlDQorCSAqIGF0dGFjaGVkDQorCSAqLw0KKwlpZiAoKHNsb3RfY250ID09IDIp
ICYmIChkZXZtYXNrID09IDB4MDEpKQ0KKwkJdmlhX3N0ZF9zYXRhX2NvbXJlc2V0KGFwLCAxKTsN
CisJZWxzZSBpZiAoZGV2bWFzayA9PSAwKSB7DQorCQkJRFBSSU5USygiUHJlcmVzZXQlWCBmb3Ig
UE9SVCVkIGZhaWxlZDogKE5vIGRldmljZSlcbiIsIFwNCisJCQkJCXBkZXYtPmRldmljZSwgYXAt
PnBvcnRfbm8pOw0KKwkJCXJldHVybiAtRU5PREVWOw0KIAl9DQogDQotIHNraXBfc2NyOg0KK3Nr
aXBfc2NyOg0KIAkvKiB3YWl0IGZvciAhQlNZICovDQotCWF0YV9zZmZfd2FpdF9yZWFkeShsaW5r
LCBkZWFkbGluZSk7DQorCXJjID0gYXRhX3NmZl93YWl0X3JlYWR5KGxpbmssIGRlYWRsaW5lKTsN
CisJaWYgKHJjKQ0KKwkJRFBSSU5USygiUHJlcmVzZXQgJVggZm9yIFBPUlQlZCBmYWlsZWRcbiIs
IFwNCisJCQkJICAgIHBkZXYtPmRldmljZSwgYXAtPnBvcnRfbm8pOw0KIA0KLQlyZXR1cm4gMDsN
CisJcmV0dXJuIHJjOw0KIH0NCiANCi1zdGF0aWMgaW50IHZ0NjQyMV9wYXRhX2NhYmxlX2RldGVj
dChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQ0KKw0KK3N0YXRpYyB2b2lkIHZpYV9zdGRfc2V0X3Bpb19t
b2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQ0KIHsNCiAJ
c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOw0KLQl1OCB0
bXA7DQogDQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBBVEFfVURNQV9USU1JTkcsICZ0
bXApOw0KLQlpZiAodG1wICYgMHgxMCkNCi0JCXJldHVybiBBVEFfQ0JMX1BBVEE0MDsNCi0JcmV0
dXJuIEFUQV9DQkxfUEFUQTgwOw0KLX0NCisJdTggY2ZnX2J5dGU7DQorCWludCBjZmdfYWRkcjsN
CisJdTE2IHRtcDE2Ow0KKw0KKwl0bXAxNiA9IHBkZXYtPmRldmljZTsNCisNCisJaWYgKCh0bXAx
NiA9PSAweDMyNDkpICYmIChhcC0+cG9ydF9ubyA9PSAyKSkvKiBQQVRBIGNoYW5uZWwgaW4gVlQ2
NDIxICovDQorCQljZmdfYWRkciA9IDB4QUI7DQorCWVsc2UgaWYgKCh0bXAxNiA9PSAweDA1ODEg
fHwgdG1wMTYgPT0gMHg1MzI0KSAmJg0KKwkJKGFwLT5wb3J0X25vID09IDEpKS8qIFBBVEEgY2hh
bm5lbCBpbiBWVDgzNTMgKi8NCisJCWNmZ19hZGRyID0gMHg0OTsNCisJZWxzZQ0KKwkJcmV0dXJu
Ow0KIA0KLXN0YXRpYyB2b2lkIHZ0NjQyMV9zZXRfcGlvX21vZGUoc3RydWN0IGF0YV9wb3J0ICph
cCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpDQotew0KLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9
IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7DQotCXN0YXRpYyBjb25zdCB1OCBwaW9fYml0c1td
ID0geyAweEE4LCAweDY1LCAweDY1LCAweDMxLCAweDIwIH07DQotCXBjaV93cml0ZV9jb25maWdf
Ynl0ZShwZGV2LCBQQVRBX1BJT19USU1JTkcsIHBpb19iaXRzW2FkZXYtPnBpb19tb2RlIC0gWEZF
Ul9QSU9fMF0pOw0KKwlzd2l0Y2ggKGFkZXYtPnBpb19tb2RlICYgMHgwNykgew0KKwljYXNlIDA6
DQorCQljZmdfYnl0ZSA9IDB4YTg7DQorCQlicmVhazsNCisJY2FzZSAxOg0KKwkJY2ZnX2J5dGUg
PSAweDY1Ow0KKwkJYnJlYWs7DQorCWNhc2UgMjoNCisJCWNmZ19ieXRlID0gMHg2NTsNCisJCWJy
ZWFrOw0KKwljYXNlIDM6DQorCQljZmdfYnl0ZSA9IDB4MzE7DQorCQlicmVhazsNCisJY2FzZSA0
Og0KKwkJY2ZnX2J5dGUgPSAweDIwOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQljZmdfYnl0
ZSA9IDB4MjA7DQorCX0NCisNCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIGNmZ19hZGRy
LCBjZmdfYnl0ZSk7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIHZ0NjQyMV9zZXRfZG1hX21vZGUoc3Ry
dWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpDQorc3RhdGljIHZvaWQg
dmlhX3N0ZF9zZXRfZG1hX21vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZp
Y2UgKmFkZXYpDQogew0KIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhv
c3QtPmRldik7DQotCXN0YXRpYyBjb25zdCB1OCB1ZG1hX2JpdHNbXSA9IHsgMHhFRSwgMHhFOCwg
MHhFNiwgMHhFNCwgMHhFMiwgMHhFMSwgMHhFMCwgMHhFMCB9Ow0KLQlwY2lfd3JpdGVfY29uZmln
X2J5dGUocGRldiwgUEFUQV9VRE1BX1RJTUlORywgdWRtYV9iaXRzW2FkZXYtPmRtYV9tb2RlIC0g
WEZFUl9VRE1BXzBdKTsNCisJdTggY2ZnX2J5dGU7DQorCWludCBjZmdfYWRkcjsNCisJdTE2IHRt
cDE2Ow0KKw0KKwl0bXAxNiA9IHBkZXYtPmRldmljZTsNCisNCisJaWYgKCh0bXAxNiA9PSAweDMy
NDkpICYmIChhcC0+cG9ydF9ubyA9PSAyKSkNCisJCWNmZ19hZGRyID0gMHhCMzsgLyogUEFUQSBj
aGFubmVsIGluIFZUNjQyMSAqLw0KKwllbHNlIGlmICgodG1wMTYgPT0gMHgwNTgxKSAmJiAoYXAt
PnBvcnRfbm8gPT0gMSkpDQorCQljZmdfYWRkciA9IDB4NTA7IC8qIFBBVEEgY2hhbm5lbCBpbiBW
VDgzNTMgKi8NCisJZWxzZQ0KKwkJcmV0dXJuOw0KKw0KKwlzd2l0Y2ggKGFkZXYtPmRtYV9tb2Rl
ICYgMHgwNykgew0KKwljYXNlIDA6DQorCQljZmdfYnl0ZSA9IDB4ZWU7DQorCQlicmVhazsNCisJ
Y2FzZSAxOg0KKwkJY2ZnX2J5dGUgPSAweGU4Ow0KKwkJYnJlYWs7DQorCWNhc2UgMjoNCisJCWNm
Z19ieXRlID0gMHhlNjsNCisJCWJyZWFrOw0KKwljYXNlIDM6DQorCQljZmdfYnl0ZSA9IDB4ZTQ7
DQorCQlicmVhazsNCisJY2FzZSA0Og0KKwkJY2ZnX2J5dGUgPSAweGUyOw0KKwkJYnJlYWs7DQor
CWNhc2UgNToNCisJCWNmZ19ieXRlID0gMHhlMTsNCisJCWJyZWFrOw0KKwljYXNlIDY6DQorCQlj
ZmdfYnl0ZSA9IDB4ZTA7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCWNmZ19ieXRlID0gMHhl
MDsNCisJfQ0KKw0KKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgY2ZnX2FkZHIsIGNmZ19i
eXRlKTsNCiB9DQogDQogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdmlhX2Jhcl9zaXplc1td
ID0gew0KQEAgLTI5Miw3ICs3MzgsNyBAQA0KIA0KIHN0YXRpYyB2b2lkIHZ0NjQyMV9pbml0X2Fk
ZHJzKHN0cnVjdCBhdGFfcG9ydCAqYXApDQogew0KLQl2b2lkIF9faW9tZW0gKiBjb25zdCAqIGlv
bWFwID0gYXAtPmhvc3QtPmlvbWFwOw0KKwl2b2lkIF9faW9tZW0gKiBjb25zdCAqaW9tYXAgPSBh
cC0+aG9zdC0+aW9tYXA7DQogCXZvaWQgX19pb21lbSAqcmVnX2FkZHIgPSBpb21hcFthcC0+cG9y
dF9ub107DQogCXZvaWQgX19pb21lbSAqYm1kbWFfYWRkciA9IGlvbWFwWzRdICsgKGFwLT5wb3J0
X25vICogOCk7DQogCXN0cnVjdCBhdGFfaW9wb3J0cyAqaW9hZGRyID0gJmFwLT5pb2FkZHI7DQpA
QCAtMzY3LDYgKzgxMywyNiBAQA0KIAlyZXR1cm4gMDsNCiB9DQogDQorc3RhdGljIGludCB2dDgy
NTFfcHJlcGFyZV9ob3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYXRhX2hvc3QgKipy
X2hvc3QpDQorew0KKyAgICBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7JnZ0
ODI1MV9wb3J0X2luZm8sIE5VTEx9Ow0KKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7DQorCWludCBy
YzsNCisNCisJcmMgPSBhdGFfcGNpX3NmZl9wcmVwYXJlX2hvc3QocGRldiwgcHBpLCAmaG9zdCk7
DQorCWlmIChyYykNCisJCXJldHVybiByYzsNCisJKnJfaG9zdCA9IGhvc3Q7DQorDQorCXJjID0g
cGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIDEgPDwgNSwgRFJWX05BTUUpOw0KKwlpZiAocmMpIHsN
CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9tYXAgUENJ
IEJBUiA1XG4iKTsNCisJCXJldHVybiByYzsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQog
c3RhdGljIHZvaWQgc3ZpYV9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQogew0KIAl1
OCB0bXA4Ow0KQEAgLTQyNCw4ICs4OTAsMTEgQEANCiANCiAJaWYgKGJvYXJkX2lkID09IHZ0NjQy
MCkNCiAJCWJhcl9zaXplcyA9ICZzdmlhX2Jhcl9zaXplc1swXTsNCi0JZWxzZQ0KKwllbHNlIGlm
IChib2FyZF9pZCA9PSB2dDY0MjEpDQogCQliYXJfc2l6ZXMgPSAmdnQ2NDIxX2Jhcl9zaXplc1sw
XTsNCisJZWxzZQ0KKwkJYmFyX3NpemVzID0gJnN2aWFfYmFyX3NpemVzWzBdOw0KKw0KIA0KIAlm
b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdmlhX2Jhcl9zaXplcyk7IGkrKykNCiAJCWlmICgo
cGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpID09IDApIHx8DQpAQCAtNDQwLDggKzkwOSwxMSBA
QA0KIA0KIAlpZiAoYm9hcmRfaWQgPT0gdnQ2NDIwKQ0KIAkJcmMgPSB2dDY0MjBfcHJlcGFyZV9o
b3N0KHBkZXYsICZob3N0KTsNCi0JZWxzZQ0KKwllbHNlIGlmIChib2FyZF9pZCA9PSB2dDY0MjEp
DQogCQlyYyA9IHZ0NjQyMV9wcmVwYXJlX2hvc3QocGRldiwgJmhvc3QpOw0KKwllbHNlDQorCQly
YyA9IHZ0ODI1MV9wcmVwYXJlX2hvc3QocGRldiwgJmhvc3QpOw0KKw0KIAlpZiAocmMpDQogCQly
ZXR1cm4gcmM7DQogDQo=

