i386/64656: Bugs with Ethernet driver "bfe"[patch]
Jianqin Qu
jqu at its.brooklyn.cuny.edu
Mon May 10 07:50:18 PDT 2004
The following reply was made to PR i386/64656; it has been noted by GNATS.
From: Jianqin Qu <jqu at its.brooklyn.cuny.edu>
To: freebsd-gnats-submit at freebsd.org
Cc:
Subject: Re: i386/64656: Bugs with Ethernet driver "bfe"[patch]
Date: Mon, 10 May 2004 10:44:16 -0400 (EDT)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime at docserver.cac.washington.edu for more info.
---559023410-851401618-1084200166=:27340
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.GSO.4.58.0405101043181.27383 at atrium67.its.brooklyn.cuny.edu>
Sorry, the wrong files were ataached to last message. The correct
files for patches are attached to this message.
Jianqin
---559023410-851401618-1084200166=:27340
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="bfe521.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.58.0405101042460.27340 at atrium67.its.brooklyn.cuny.edu>
Content-Description:
Content-Disposition: ATTACHMENT; FILENAME="bfe521.patch"
LS0tIC91c3Ivc3JjL3N5cy9kZXYvYmZlL2lmX2JmZS5jCVNhdCBOb3YgMTUg
MDM6MDA6MzAgMjAwMw0KKysrIGlmX2JmZS5jCVR1ZSBNYXkgIDYgMTU6Mjc6
MjcgMjAwMw0KQEAgLTczMyw3ICs3MzMsMTIgQEANCiAJCURFTEFZKDEwMCk7
DQogCX0NCiANCi0JQkZFX09SKHNjLCBCRkVfTUFDX0NUUkwsIEJGRV9DVFJM
X0NSQzMyX0VOQUIpOw0KKwkvKiBFbmFibGUgQ1JDMzIgZ2VuZXJhdGlvbiBh
bmQgc2V0IHByb3BlciBMRUQgbW9kZXMgKi8NCisJQkZFX09SKHNjLCBCRkVf
TUFDX0NUUkwsIEJGRV9DVFJMX0NSQzMyX0VOQUIgfCBCRkVfQ1RSTF9MRUQp
Ow0KKw0KKwkvKiBSZXNldC9DbGVhciBwb3dlcmRvd24gYml0ICAqLw0KKwlC
RkVfQU5EKHNjLCBCRkVfTUFDX0NUUkwsIH5CRkVfQ1RSTF9QRE9XTik7DQor
DQogCUNTUl9XUklURV80KHNjLCBCRkVfUkNWX0xBWlksICgoMSA8PCBCRkVf
TEFaWV9GQ19TSElGVCkgJiANCiAJCQkJQkZFX0xBWllfRkNfTUFTSykpOw0K
IA0KQEAgLTgzNSw3ICs4NDAsNyBAQA0KIAkJCSgoKHVfaW50MzJfdCkgZGF0
YVsxXSkpKTsNCiAJQ1NSX1dSSVRFXzQoc2MsIEJGRV9DQU1fREFUQV9ISSwg
dmFsKTsNCiAJQ1NSX1dSSVRFXzQoc2MsIEJGRV9DQU1fQ1RSTCwgKEJGRV9D
QU1fV1JJVEUgfA0KLQkJCQkoaW5kZXggPDwgQkZFX0NBTV9JTkRFWF9TSElG
VCkpKTsNCisJCQkJKCh1X2ludDMyX3QpIGluZGV4IDw8IEJGRV9DQU1fSU5E
RVhfU0hJRlQpKSk7DQogCWJmZV93YWl0X2JpdChzYywgQkZFX0NBTV9DVFJM
LCBCRkVfQ0FNX0JVU1ksIDEwMDAwLCAxKTsNCiB9DQogDQo=
---559023410-851401618-1084200166=:27340
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="if_bfe.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.58.0405101042461.27340 at atrium67.its.brooklyn.cuny.edu>
Content-Description:
Content-Disposition: ATTACHMENT; FILENAME="if_bfe.c"
LyoNCiAqIENvcHlyaWdodCAoYykgMjAwMyBTdHVhcnQgV2Fsc2g8c3R1QGlw
bmcub3JnLnVrPg0KICogYW5kIER1bmNhbiBCYXJjbGF5PGRtbGJAZG1sYi5v
cmc+DQogKi8NCg0KLyoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zDQogKiBhcmUgbWV0Og0KICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlDQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICoNCiAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTICdBUyBJUycgQU5EDQogKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUNCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQog
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRI
T1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwNCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTDQogKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCiAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUDQogKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZDQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQogKiBT
VUNIIERBTUFHRS4NCiAqLw0KDQoNCiNpbmNsdWRlIDxzeXMvY2RlZnMuaD4N
Cl9fRkJTRElEKCIkRnJlZUJTRDogc3JjL3N5cy9kZXYvYmZlL2lmX2JmZS5j
LHYgMS40IDIwMDMvMTEvMTQgMTk6MDA6MzAgc2FtIEV4cCAkIik7DQoNCiNp
bmNsdWRlIDxzeXMvcGFyYW0uaD4NCiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4N
CiNpbmNsdWRlIDxzeXMvc29ja2lvLmg+DQojaW5jbHVkZSA8c3lzL21idWYu
aD4NCiNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+DQojaW5jbHVkZSA8c3lzL2tl
cm5lbC5oPg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxz
eXMvcXVldWUuaD4NCg0KI2luY2x1ZGUgPG5ldC9pZi5oPg0KI2luY2x1ZGUg
PG5ldC9pZl9hcnAuaD4NCiNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4NCiNp
bmNsdWRlIDxuZXQvaWZfZGwuaD4NCiNpbmNsdWRlIDxuZXQvaWZfbWVkaWEu
aD4NCg0KI2luY2x1ZGUgPG5ldC9icGYuaD4NCg0KI2luY2x1ZGUgPG5ldC9p
Zl90eXBlcy5oPg0KI2luY2x1ZGUgPG5ldC9pZl92bGFuX3Zhci5oPg0KDQoj
aW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPg0KI2luY2x1ZGUgPG5ldGlu
ZXQvaW4uaD4NCiNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+DQoNCiNpbmNsdWRl
IDxtYWNoaW5lL2Nsb2NrLmg+ICAgICAgLyogZm9yIERFTEFZICovDQojaW5j
bHVkZSA8bWFjaGluZS9idXNfbWVtaW8uaD4NCiNpbmNsdWRlIDxtYWNoaW5l
L2J1cy5oPg0KI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4NCiNpbmNs
dWRlIDxzeXMvYnVzLmg+DQojaW5jbHVkZSA8c3lzL3JtYW4uaD4NCg0KI2lu
Y2x1ZGUgPGRldi9taWkvbWlpLmg+DQojaW5jbHVkZSA8ZGV2L21paS9taWl2
YXIuaD4NCiNpbmNsdWRlICJtaWlkZXZzLmgiDQoNCiNpbmNsdWRlIDxkZXYv
cGNpL3BjaXJlZy5oPg0KI2luY2x1ZGUgPGRldi9wY2kvcGNpdmFyLmg+DQoN
CiNpbmNsdWRlIDxkZXYvYmZlL2lmX2JmZXJlZy5oPg0KDQpNT0RVTEVfREVQ
RU5EKGJmZSwgcGNpLCAxLCAxLCAxKTsNCk1PRFVMRV9ERVBFTkQoYmZlLCBl
dGhlciwgMSwgMSwgMSk7DQpNT0RVTEVfREVQRU5EKGJmZSwgbWlpYnVzLCAx
LCAxLCAxKTsNCg0KLyogImNvbnRyb2xsZXIgbWlpYnVzMCIgcmVxdWlyZWQu
ICBTZWUgR0VORVJJQyBpZiB5b3UgZ2V0IGVycm9ycyBoZXJlLiAqLw0KI2lu
Y2x1ZGUgIm1paWJ1c19pZi5oIg0KDQojZGVmaW5lIEJGRV9ERVZERVNDX01B
WAkJNjQJLyogTWF4aW11bSBkZXZpY2UgZGVzY3JpcHRpb24gbGVuZ3RoICov
DQoNCnN0YXRpYyBzdHJ1Y3QgYmZlX3R5cGUgYmZlX2RldnNbXSA9IHsNCgl7
IEJDT01fVkVORE9SSUQsIEJDT01fREVWSUNFSURfQkNNNDQwMSwNCgkJIkJy
b2FkY29tIEJDTTQ0MDEgRmFzdCBFdGhlcm5ldCIgfSwNCgkJeyAwLCAwLCBO
VUxMIH0NCn07DQoNCnN0YXRpYyBpbnQgIGJmZV9wcm9iZQkJCQkoZGV2aWNl
X3QpOw0Kc3RhdGljIGludCAgYmZlX2F0dGFjaAkJCQkoZGV2aWNlX3QpOw0K
c3RhdGljIGludCAgYmZlX2RldGFjaAkJCQkoZGV2aWNlX3QpOw0Kc3RhdGlj
IHZvaWQgYmZlX3JlbGVhc2VfcmVzb3VyY2VzCShzdHJ1Y3QgYmZlX3NvZnRj
ICopOw0Kc3RhdGljIHZvaWQgYmZlX2ludHIJCQkJKHZvaWQgKik7DQpzdGF0
aWMgdm9pZCBiZmVfc3RhcnQJCQkJKHN0cnVjdCBpZm5ldCAqKTsNCnN0YXRp
YyBpbnQgIGJmZV9pb2N0bAkJCQkoc3RydWN0IGlmbmV0ICosIHVfbG9uZywg
Y2FkZHJfdCk7DQpzdGF0aWMgdm9pZCBiZmVfaW5pdAkJCQkodm9pZCAqKTsN
CnN0YXRpYyB2b2lkIGJmZV9zdG9wCQkJCShzdHJ1Y3QgYmZlX3NvZnRjICop
Ow0Kc3RhdGljIHZvaWQgYmZlX3dhdGNoZG9nCQkJKHN0cnVjdCBpZm5ldCAq
KTsNCnN0YXRpYyB2b2lkIGJmZV9zaHV0ZG93bgkJCShkZXZpY2VfdCk7DQpz
dGF0aWMgdm9pZCBiZmVfdGljawkJCQkodm9pZCAqKTsNCnN0YXRpYyB2b2lk
IGJmZV90eGVvZgkJCQkoc3RydWN0IGJmZV9zb2Z0YyAqKTsNCnN0YXRpYyB2
b2lkIGJmZV9yeGVvZgkJCQkoc3RydWN0IGJmZV9zb2Z0YyAqKTsNCnN0YXRp
YyB2b2lkIGJmZV9zZXRfcnhfbW9kZQkJCShzdHJ1Y3QgYmZlX3NvZnRjICop
Ow0Kc3RhdGljIGludCAgYmZlX2xpc3RfcnhfaW5pdAkJKHN0cnVjdCBiZmVf
c29mdGMgKik7DQpzdGF0aWMgaW50ICBiZmVfbGlzdF9uZXdidWYJCQkoc3Ry
dWN0IGJmZV9zb2Z0YyAqLCBpbnQsIHN0cnVjdCBtYnVmKik7DQpzdGF0aWMg
dm9pZCBiZmVfcnhfcmluZ19mcmVlCQkoc3RydWN0IGJmZV9zb2Z0YyAqKTsN
Cg0Kc3RhdGljIHZvaWQgYmZlX3BjaV9zZXR1cAkJCShzdHJ1Y3QgYmZlX3Nv
ZnRjICosIHVfaW50MzJfdCk7DQpzdGF0aWMgaW50ICBiZmVfaWZtZWRpYV91
cGQJCQkoc3RydWN0IGlmbmV0ICopOw0Kc3RhdGljIHZvaWQgYmZlX2lmbWVk
aWFfc3RzCQkJKHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgaWZtZWRpYXJlcSAq
KTsNCnN0YXRpYyBpbnQgIGJmZV9taWlidXNfcmVhZHJlZwkJKGRldmljZV90
LCBpbnQsIGludCk7DQpzdGF0aWMgaW50ICBiZmVfbWlpYnVzX3dyaXRlcmVn
CQkoZGV2aWNlX3QsIGludCwgaW50LCBpbnQpOw0Kc3RhdGljIHZvaWQgYmZl
X21paWJ1c19zdGF0Y2hnCQkoZGV2aWNlX3QpOw0Kc3RhdGljIGludCAgYmZl
X3dhaXRfYml0CQkJKHN0cnVjdCBiZmVfc29mdGMgKiwgdV9pbnQzMl90LCB1
X2ludDMyX3QsIA0KCQl1X2xvbmcsIGNvbnN0IGludCk7DQpzdGF0aWMgdm9p
ZCBiZmVfZ2V0X2NvbmZpZwkJCShzdHJ1Y3QgYmZlX3NvZnRjICpzYyk7DQpz
dGF0aWMgdm9pZCBiZmVfcmVhZF9lZXByb20JCQkoc3RydWN0IGJmZV9zb2Z0
YyAqLCB1X2ludDhfdCAqKTsNCnN0YXRpYyB2b2lkIGJmZV9zdGF0c191cGRh
dGUJCShzdHJ1Y3QgYmZlX3NvZnRjICopOw0Kc3RhdGljIHZvaWQgYmZlX2Ns
ZWFyX3N0YXRzCQkJKHN0cnVjdCBiZmVfc29mdGMgKik7DQpzdGF0aWMgaW50
ICBiZmVfcmVhZHBoeQkJCQkoc3RydWN0IGJmZV9zb2Z0YyAqLCB1X2ludDMy
X3QsIHVfaW50MzJfdCopOw0Kc3RhdGljIGludCAgYmZlX3dyaXRlcGh5CQkJ
KHN0cnVjdCBiZmVfc29mdGMgKiwgdV9pbnQzMl90LCB1X2ludDMyX3QpOw0K
c3RhdGljIGludCAgYmZlX3Jlc2V0cGh5CQkJKHN0cnVjdCBiZmVfc29mdGMg
Kik7DQpzdGF0aWMgaW50ICBiZmVfc2V0dXBwaHkJCQkoc3RydWN0IGJmZV9z
b2Z0YyAqKTsNCnN0YXRpYyB2b2lkIGJmZV9jaGlwX3Jlc2V0CQkJKHN0cnVj
dCBiZmVfc29mdGMgKik7DQpzdGF0aWMgdm9pZCBiZmVfY2hpcF9oYWx0CQkJ
KHN0cnVjdCBiZmVfc29mdGMgKik7DQpzdGF0aWMgdm9pZCBiZmVfY29yZV9y
ZXNldAkJCShzdHJ1Y3QgYmZlX3NvZnRjICopOw0Kc3RhdGljIHZvaWQgYmZl
X2NvcmVfZGlzYWJsZQkJKHN0cnVjdCBiZmVfc29mdGMgKik7DQpzdGF0aWMg
aW50ICBiZmVfZG1hX2FsbG9jCQkJKGRldmljZV90KTsNCnN0YXRpYyB2b2lk
IGJmZV9kbWFfbWFwX2Rlc2MJCSh2b2lkICosIGJ1c19kbWFfc2VnbWVudF90
ICosIGludCwgaW50KTsNCnN0YXRpYyB2b2lkIGJmZV9kbWFfbWFwCQkJCSh2
b2lkICosIGJ1c19kbWFfc2VnbWVudF90ICosIGludCwgaW50KTsNCnN0YXRp
YyB2b2lkIGJmZV9jYW1fd3JpdGUJCQkoc3RydWN0IGJmZV9zb2Z0YyAqLCB1
X2NoYXIgKiwgaW50KTsNCg0Kc3RhdGljIGRldmljZV9tZXRob2RfdCBiZmVf
bWV0aG9kc1tdID0gew0KCS8qIERldmljZSBpbnRlcmZhY2UgKi8NCglERVZN
RVRIT0QoZGV2aWNlX3Byb2JlLAkJYmZlX3Byb2JlKSwNCglERVZNRVRIT0Qo
ZGV2aWNlX2F0dGFjaCwJYmZlX2F0dGFjaCksDQoJREVWTUVUSE9EKGRldmlj
ZV9kZXRhY2gsCWJmZV9kZXRhY2gpLA0KCURFVk1FVEhPRChkZXZpY2Vfc2h1
dGRvd24sCWJmZV9zaHV0ZG93biksDQoNCgkvKiBidXMgaW50ZXJmYWNlICov
DQoJREVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwJYnVzX2dlbmVyaWNfcHJp
bnRfY2hpbGQpLA0KCURFVk1FVEhPRChidXNfZHJpdmVyX2FkZGVkLAlidXNf
Z2VuZXJpY19kcml2ZXJfYWRkZWQpLA0KDQoJLyogTUlJIGludGVyZmFjZSAq
Lw0KCURFVk1FVEhPRChtaWlidXNfcmVhZHJlZywJYmZlX21paWJ1c19yZWFk
cmVnKSwNCglERVZNRVRIT0QobWlpYnVzX3dyaXRlcmVnLAliZmVfbWlpYnVz
X3dyaXRlcmVnKSwNCglERVZNRVRIT0QobWlpYnVzX3N0YXRjaGcsCWJmZV9t
aWlidXNfc3RhdGNoZyksDQoNCgl7IDAsIDAgfQ0KfTsNCg0Kc3RhdGljIGRy
aXZlcl90IGJmZV9kcml2ZXIgPSB7DQoJImJmZSIsDQoJYmZlX21ldGhvZHMs
DQoJc2l6ZW9mKHN0cnVjdCBiZmVfc29mdGMpDQp9Ow0KDQpzdGF0aWMgZGV2
Y2xhc3NfdCBiZmVfZGV2Y2xhc3M7DQoNCkRSSVZFUl9NT0RVTEUoYmZlLCBw
Y2ksIGJmZV9kcml2ZXIsIGJmZV9kZXZjbGFzcywgMCwgMCk7DQpEUklWRVJf
TU9EVUxFKG1paWJ1cywgYmZlLCBtaWlidXNfZHJpdmVyLCBtaWlidXNfZGV2
Y2xhc3MsIDAsIDApOw0KDQovKg0KICogUHJvYmUgZm9yIGEgQnJvYWRjb20g
NDQwMSBjaGlwLiANCiAqLw0Kc3RhdGljIGludA0KYmZlX3Byb2JlKGRldmlj
ZV90IGRldikNCnsNCglzdHJ1Y3QgYmZlX3R5cGUgKnQ7DQoJc3RydWN0IGJm
ZV9zb2Z0YyAqc2M7DQoNCgl0ID0gYmZlX2RldnM7DQoNCglzYyA9IGRldmlj
ZV9nZXRfc29mdGMoZGV2KTsNCgliemVybyhzYywgc2l6ZW9mKHN0cnVjdCBi
ZmVfc29mdGMpKTsNCglzYy0+YmZlX3VuaXQgPSBkZXZpY2VfZ2V0X3VuaXQo
ZGV2KTsNCglzYy0+YmZlX2RldiA9IGRldjsNCg0KCXdoaWxlKHQtPmJmZV9u
YW1lICE9IE5VTEwpIHsNCgkJaWYgKChwY2lfZ2V0X3ZlbmRvcihkZXYpID09
IHQtPmJmZV92aWQpICYmDQoJCQkJKHBjaV9nZXRfZGV2aWNlKGRldikgPT0g
dC0+YmZlX2RpZCkpIHsNCgkJCWRldmljZV9zZXRfZGVzY19jb3B5KGRldiwg
dC0+YmZlX25hbWUpOw0KCQkJcmV0dXJuKDApOw0KCQl9DQoJCXQrKzsNCgl9
DQoNCglyZXR1cm4oRU5YSU8pOw0KfQ0KDQpzdGF0aWMgaW50DQpiZmVfZG1h
X2FsbG9jKGRldmljZV90IGRldikNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpz
YzsNCglpbnQgZXJyb3IsIGk7DQoNCglzYyA9IGRldmljZV9nZXRfc29mdGMo
ZGV2KTsNCg0KCS8qIHBhcmVudCB0YWcgKi8NCgllcnJvciA9IGJ1c19kbWFf
dGFnX2NyZWF0ZShOVUxMLCAgLyogcGFyZW50ICovDQoJCQlQQUdFX1NJWkUs
IDAsICAgICAgICAgICAgIC8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8NCgkJ
CUJVU19TUEFDRV9NQVhBRERSLCAgICAgICAgLyogbG93YWRkciAqLyAgICAg
IA0KCQkJQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsICAvKiBoaWdoYWRkciAq
Lw0KCQkJTlVMTCwgTlVMTCwgICAgICAgICAgICAgICAvKiBmaWx0ZXIsIGZp
bHRlcmFyZyAqLw0KCQkJTUFYQlNJWkUsICAgICAgICAgICAgICAgICAvKiBt
YXhzaXplICovDQoJCQlCVVNfU1BBQ0VfVU5SRVNUUklDVEVELCAgIC8qIG51
bSBvZiBzZWdtZW50cyAqLw0KCQkJQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQs
ICAvKiBtYXggc2VnbWVudCBzaXplICovDQoJCQlCVVNfRE1BX0FMTE9DTk9X
LCAgICAgICAgIC8qIGZsYWdzICovDQoJCQlOVUxMLCBOVUxMLCAgICAgICAg
ICAgICAgIC8qIGxvY2tmdW5jLCBsb2NrYXJnICovDQoJCQkmc2MtPmJmZV9w
YXJlbnRfdGFnKTsNCg0KCS8qIHRhZyBmb3IgVFggcmluZyAqLw0KCWVycm9y
ID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5iZmVfcGFyZW50X3RhZywgQkZF
X1RYX0xJU1RfU0laRSwgDQoJCQlCRkVfVFhfTElTVF9TSVpFLCBCVVNfU1BB
Q0VfTUFYQUREUiwgIEJVU19TUEFDRV9NQVhBRERSLCANCgkJCU5VTEwsIE5V
TEwsIEJGRV9UWF9MSVNUX1NJWkUsIDEsICBCVVNfU1BBQ0VfTUFYU0laRV8z
MkJJVCwNCgkJCTAsIE5VTEwsIE5VTEwsICZzYy0+YmZlX3R4X3RhZyk7DQoN
CglpZiAoZXJyb3IpIHsNCgkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBu
b3QgYWxsb2NhdGUgZG1hIHRhZ1xuIik7DQoJCXJldHVybihFTk9NRU0pOw0K
CX0NCg0KCS8qIHRhZyBmb3IgUlggcmluZyAqLw0KCWVycm9yID0gYnVzX2Rt
YV90YWdfY3JlYXRlKHNjLT5iZmVfcGFyZW50X3RhZywgQkZFX1JYX0xJU1Rf
U0laRSwgDQoJCQlCRkVfUlhfTElTVF9TSVpFLCBCVVNfU1BBQ0VfTUFYQURE
UiwgQlVTX1NQQUNFX01BWEFERFIsIA0KCQkJTlVMTCwgTlVMTCwgQkZFX1JY
X0xJU1RfU0laRSwgMSwgQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQsIA0KCQkJ
MCwgTlVMTCwgTlVMTCwgJnNjLT5iZmVfcnhfdGFnKTsNCg0KCWlmIChlcnJv
cikgew0KCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBhbGxvY2F0
ZSBkbWEgdGFnXG4iKTsNCgkJcmV0dXJuKEVOT01FTSk7DQoJfQ0KDQoJLyog
dGFnIGZvciBtYnVmcyAqLw0KCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRl
KHNjLT5iZmVfcGFyZW50X3RhZywgRVRIRVJfQUxJR04sIDAsDQoJCQlCVVNf
U1BBQ0VfTUFYQUREUiwgQlVTX1NQQUNFX01BWEFERFIsIE5VTEwsIE5VTEws
IE1DTEJZVEVTLCANCgkJCTEsIEJVU19TUEFDRV9NQVhTSVpFXzMyQklULCAw
LCBOVUxMLCBOVUxMLCAmc2MtPmJmZV90YWcpOw0KDQoJaWYgKGVycm9yKSB7
DQoJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIGRt
YSB0YWdcbiIpOw0KCQlyZXR1cm4oRU5PTUVNKTsNCgl9DQoNCgkvKiBwcmUg
YWxsb2NhdGUgZG1hbWFwcyBmb3IgUlggbGlzdCAqLw0KCWZvciAoaSA9IDA7
IGkgPCBCRkVfUlhfTElTVF9DTlQ7IGkrKykgew0KCQllcnJvciA9IGJ1c19k
bWFtYXBfY3JlYXRlKHNjLT5iZmVfdGFnLCAwLCAmc2MtPmJmZV9yeF9yaW5n
W2ldLmJmZV9tYXApOw0KCQlpZiAoZXJyb3IpIHsNCgkJCWRldmljZV9wcmlu
dGYoZGV2LCAiY2Fubm90IGNyZWF0ZSBETUEgbWFwIGZvciBSWFxuIik7DQoJ
CQlyZXR1cm4oRU5PTUVNKTsNCgkJfQ0KCX0NCg0KCS8qIHByZSBhbGxvY2F0
ZSBkbWFtYXBzIGZvciBUWCBsaXN0ICovDQoJZm9yIChpID0gMDsgaSA8IEJG
RV9UWF9MSVNUX0NOVDsgaSsrKSB7DQoJCWVycm9yID0gYnVzX2RtYW1hcF9j
cmVhdGUoc2MtPmJmZV90YWcsIDAsICZzYy0+YmZlX3R4X3JpbmdbaV0uYmZl
X21hcCk7DQoJCWlmIChlcnJvcikgew0KCQkJZGV2aWNlX3ByaW50ZihkZXYs
ICJjYW5ub3QgY3JlYXRlIERNQSBtYXAgZm9yIFRYXG4iKTsNCgkJCXJldHVy
bihFTk9NRU0pOw0KCQl9DQoJfQ0KDQoJLyogQWxsb2MgZG1hIGZvciByeCBy
aW5nICovDQoJZXJyb3IgPSBidXNfZG1hbWVtX2FsbG9jKHNjLT5iZmVfcnhf
dGFnLCAodm9pZCAqKSZzYy0+YmZlX3J4X2xpc3QsDQoJCQlCVVNfRE1BX05P
V0FJVCwgJnNjLT5iZmVfcnhfbWFwKTsNCg0KCWlmKGVycm9yKQ0KCQlyZXR1
cm4oRU5PTUVNKTsNCg0KCWJ6ZXJvKHNjLT5iZmVfcnhfbGlzdCwgQkZFX1JY
X0xJU1RfU0laRSk7DQoJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmJm
ZV9yeF90YWcsIHNjLT5iZmVfcnhfbWFwLA0KCQkJc2MtPmJmZV9yeF9saXN0
LCBzaXplb2Yoc3RydWN0IGJmZV9kZXNjKSwNCgkJCWJmZV9kbWFfbWFwLCAm
c2MtPmJmZV9yeF9kbWEsIDApOw0KDQoJaWYoZXJyb3IpDQoJCXJldHVybihF
Tk9NRU0pOw0KDQoJYnVzX2RtYW1hcF9zeW5jKHNjLT5iZmVfcnhfdGFnLCBz
Yy0+YmZlX3J4X21hcCwgQlVTX0RNQVNZTkNfUFJFUkVBRCk7DQoNCgllcnJv
ciA9IGJ1c19kbWFtZW1fYWxsb2Moc2MtPmJmZV90eF90YWcsICh2b2lkICop
JnNjLT5iZmVfdHhfbGlzdCwgDQoJCQlCVVNfRE1BX05PV0FJVCwgJnNjLT5i
ZmVfdHhfbWFwKTsNCglpZiAoZXJyb3IpIA0KCQlyZXR1cm4oRU5PTUVNKTsN
Cg0KDQoJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmJmZV90eF90YWcs
IHNjLT5iZmVfdHhfbWFwLCANCgkJCXNjLT5iZmVfdHhfbGlzdCwgc2l6ZW9m
KHN0cnVjdCBiZmVfZGVzYyksIA0KCQkJYmZlX2RtYV9tYXAsICZzYy0+YmZl
X3R4X2RtYSwgMCk7DQoJaWYoZXJyb3IpDQoJCXJldHVybihFTk9NRU0pOw0K
DQoJYnplcm8oc2MtPmJmZV90eF9saXN0LCBCRkVfVFhfTElTVF9TSVpFKTsN
CglidXNfZG1hbWFwX3N5bmMoc2MtPmJmZV90eF90YWcsIHNjLT5iZmVfdHhf
bWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsNCg0KCXJldHVybigwKTsNCn0N
Cg0Kc3RhdGljIGludA0KYmZlX2F0dGFjaChkZXZpY2VfdCBkZXYpDQp7DQoJ
c3RydWN0IGlmbmV0ICppZnA7DQoJc3RydWN0IGJmZV9zb2Z0YyAqc2M7DQoJ
aW50IHVuaXQsIGVycm9yID0gMCwgcmlkOw0KDQoJc2MgPSBkZXZpY2VfZ2V0
X3NvZnRjKGRldik7DQoJbXR4X2luaXQoJnNjLT5iZmVfbXR4LCBkZXZpY2Vf
Z2V0X25hbWV1bml0KGRldiksIE1UWF9ORVRXT1JLX0xPQ0ssDQoJCQlNVFhf
REVGIHwgTVRYX1JFQ1VSU0UpOw0KDQoJdW5pdCA9IGRldmljZV9nZXRfdW5p
dChkZXYpOw0KCXNjLT5iZmVfZGV2ID0gZGV2Ow0KCXNjLT5iZmVfdW5pdCA9
IHVuaXQ7DQoNCgkvKg0KCSAqIEhhbmRsZSBwb3dlciBtYW5hZ2VtZW50IG5v
bnNlbnNlLg0KCSAqLw0KCWlmIChwY2lfZ2V0X3Bvd2Vyc3RhdGUoZGV2KSAh
PSBQQ0lfUE9XRVJTVEFURV9EMCkgew0KCQl1X2ludDMyX3QgbWVtYmFzZSwg
aXJxOw0KDQoJCS8qIFNhdmUgaW1wb3J0YW50IFBDSSBjb25maWcgZGF0YS4g
Ki8NCgkJbWVtYmFzZSA9IHBjaV9yZWFkX2NvbmZpZyhkZXYsIEJGRV9QQ0lf
TUVNTE8sIDQpOw0KCQlpcnEgPSBwY2lfcmVhZF9jb25maWcoZGV2LCBCRkVf
UENJX0lOVExJTkUsIDQpOw0KDQoJCS8qIFJlc2V0IHRoZSBwb3dlciBzdGF0
ZS4gKi8NCgkJcHJpbnRmKCJiZmUlZDogY2hpcCBpcyBpcyBpbiBEJWQgcG93
ZXIgbW9kZSAtLSBzZXR0aW5nIHRvIEQwXG4iLCANCgkJCQlzYy0+YmZlX3Vu
aXQsIHBjaV9nZXRfcG93ZXJzdGF0ZShkZXYpKTsNCg0KCQlwY2lfc2V0X3Bv
d2Vyc3RhdGUoZGV2LCBQQ0lfUE9XRVJTVEFURV9EMCk7DQoNCgkJLyogUmVz
dG9yZSBQQ0kgY29uZmlnIGRhdGEuICovDQoJCXBjaV93cml0ZV9jb25maWco
ZGV2LCBCRkVfUENJX01FTUxPLCBtZW1iYXNlLCA0KTsNCgkJcGNpX3dyaXRl
X2NvbmZpZyhkZXYsIEJGRV9QQ0lfSU5UTElORSwgaXJxLCA0KTsNCgl9DQoN
CgkvKg0KCSAqIE1hcCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMuDQoJICov
DQoJcGNpX2VuYWJsZV9idXNtYXN0ZXIoZGV2KTsNCg0KCXJpZCA9IEJGRV9Q
Q0lfTUVNTE87DQoJc2MtPmJmZV9yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2Uo
ZGV2LCBTWVNfUkVTX01FTU9SWSwgJnJpZCwgMCwgfjAsIDEsIA0KCQkJUkZf
QUNUSVZFKTsNCglpZiAoc2MtPmJmZV9yZXMgPT0gTlVMTCkgew0KCQlwcmlu
dGYgKCJiZmUlZDogY291bGRuJ3QgbWFwIG1lbW9yeVxuIiwgdW5pdCk7DQoJ
CWVycm9yID0gRU5YSU87DQoJCWdvdG8gZmFpbDsNCgl9DQoNCglzYy0+YmZl
X2J0YWcgPSBybWFuX2dldF9idXN0YWcoc2MtPmJmZV9yZXMpOw0KCXNjLT5i
ZmVfYmhhbmRsZSA9IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+YmZlX3Jlcyk7
DQoJc2MtPmJmZV92aGFuZGxlID0gKHZtX29mZnNldF90KXJtYW5fZ2V0X3Zp
cnR1YWwoc2MtPmJmZV9yZXMpOw0KDQoJLyogQWxsb2NhdGUgaW50ZXJydXB0
ICovDQoJcmlkID0gMDsNCg0KCXNjLT5iZmVfaXJxID0gYnVzX2FsbG9jX3Jl
c291cmNlKGRldiwgU1lTX1JFU19JUlEsICZyaWQsIDAsIH4wLCAxLA0KCQkJ
UkZfU0hBUkVBQkxFIHwgUkZfQUNUSVZFKTsNCglpZiAoc2MtPmJmZV9pcnEg
PT0gTlVMTCkgew0KCQlwcmludGYoImJmZSVkOiBjb3VsZG4ndCBtYXAgaW50
ZXJydXB0XG4iLCB1bml0KTsNCgkJZXJyb3IgPSBFTlhJTzsNCgkJZ290byBm
YWlsOw0KCX0NCg0KCWlmIChiZmVfZG1hX2FsbG9jKGRldikpIHsNCgkJcHJp
bnRmKCJiZmUlZDogZmFpbGVkIHRvIGFsbG9jYXRlIERNQSByZXNvdXJjZXNc
biIsIHNjLT5iZmVfdW5pdCk7DQoJCWJmZV9yZWxlYXNlX3Jlc291cmNlcyhz
Yyk7DQoJCWVycm9yID0gRU5YSU87DQoJCWdvdG8gZmFpbDsNCgl9DQoNCgkv
KiBTZXQgdXAgaWZuZXQgc3RydWN0dXJlICovDQoJaWZwID0gJnNjLT5hcnBj
b20uYWNfaWY7DQoJaWZwLT5pZl9zb2Z0YyA9IHNjOw0KCWlmX2luaXRuYW1l
KGlmcCwgZGV2aWNlX2dldF9uYW1lKGRldiksIGRldmljZV9nZXRfdW5pdChk
ZXYpKTsNCglpZnAtPmlmX2ZsYWdzID0gSUZGX0JST0FEQ0FTVCB8IElGRl9T
SU1QTEVYIHwgSUZGX01VTFRJQ0FTVDsNCglpZnAtPmlmX2lvY3RsID0gYmZl
X2lvY3RsOw0KCWlmcC0+aWZfb3V0cHV0ID0gZXRoZXJfb3V0cHV0Ow0KCWlm
cC0+aWZfc3RhcnQgPSBiZmVfc3RhcnQ7DQoJaWZwLT5pZl93YXRjaGRvZyA9
IGJmZV93YXRjaGRvZzsNCglpZnAtPmlmX2luaXQgPSBiZmVfaW5pdDsNCglp
ZnAtPmlmX210dSA9IEVUSEVSTVRVOw0KCWlmcC0+aWZfYmF1ZHJhdGUgPSAx
MDAwMDAwMDsNCglpZnAtPmlmX3NuZC5pZnFfbWF4bGVuID0gQkZFX1RYX1FM
RU47DQoNCgliZmVfZ2V0X2NvbmZpZyhzYyk7DQoNCglwcmludGYoImJmZSVk
OiBFdGhlcm5ldCBhZGRyZXNzOiAlNkRcbiIsIHVuaXQsIHNjLT5hcnBjb20u
YWNfZW5hZGRyLCAiOiIpOw0KDQoJLyogUmVzZXQgdGhlIGNoaXAgYW5kIHR1
cm4gb24gdGhlIFBIWSAqLw0KCWJmZV9jaGlwX3Jlc2V0KHNjKTsNCg0KCWlm
IChtaWlfcGh5X3Byb2JlKGRldiwgJnNjLT5iZmVfbWlpYnVzLA0KCQkJCWJm
ZV9pZm1lZGlhX3VwZCwgYmZlX2lmbWVkaWFfc3RzKSkgew0KCQlwcmludGYo
ImJmZSVkOiBNSUkgd2l0aG91dCBhbnkgUEhZIVxuIiwgc2MtPmJmZV91bml0
KTsNCgkJZXJyb3IgPSBFTlhJTzsNCgkJZ290byBmYWlsOw0KCX0NCg0KCWV0
aGVyX2lmYXR0YWNoKGlmcCwgc2MtPmFycGNvbS5hY19lbmFkZHIpOw0KCWNh
bGxvdXRfaGFuZGxlX2luaXQoJnNjLT5iZmVfc3RhdF9jaCk7DQoNCgkvKg0K
CSAqIEhvb2sgaW50ZXJydXB0IGxhc3QgdG8gYXZvaWQgaGF2aW5nIHRvIGxv
Y2sgc29mdGMNCgkgKi8NCgllcnJvciA9IGJ1c19zZXR1cF9pbnRyKGRldiwg
c2MtPmJmZV9pcnEsIElOVFJfVFlQRV9ORVQsDQoJCQliZmVfaW50ciwgc2Ms
ICZzYy0+YmZlX2ludHJoYW5kKTsNCg0KCWlmIChlcnJvcikgew0KCQliZmVf
cmVsZWFzZV9yZXNvdXJjZXMoc2MpOw0KCQlwcmludGYoImJmZSVkOiBjb3Vs
ZG4ndCBzZXQgdXAgaXJxXG4iLCB1bml0KTsNCgkJZ290byBmYWlsOw0KCX0N
CmZhaWw6DQoJaWYoZXJyb3IpDQoJCWJmZV9yZWxlYXNlX3Jlc291cmNlcyhz
Yyk7DQoJcmV0dXJuKGVycm9yKTsNCn0NCg0Kc3RhdGljIGludA0KYmZlX2Rl
dGFjaChkZXZpY2VfdCBkZXYpDQp7DQoJc3RydWN0IGJmZV9zb2Z0YyAqc2M7
DQoJc3RydWN0IGlmbmV0ICppZnA7DQoNCglzYyA9IGRldmljZV9nZXRfc29m
dGMoZGV2KTsNCg0KCUtBU1NFUlQobXR4X2luaXRpYWxpemVkKCZzYy0+YmZl
X210eCksICgiYmZlIG11dGV4IG5vdCBpbml0aWFsaXplZCIpKTsNCglCRkVf
TE9DSyhzY3ApOw0KDQoJaWZwID0gJnNjLT5hcnBjb20uYWNfaWY7DQoNCglp
ZiAoZGV2aWNlX2lzX2F0dGFjaGVkKGRldikpIHsNCgkJYmZlX3N0b3Aoc2Mp
Ow0KCQlldGhlcl9pZmRldGFjaChpZnApOw0KCX0NCg0KCWJmZV9jaGlwX3Jl
c2V0KHNjKTsNCg0KCWJ1c19nZW5lcmljX2RldGFjaChkZXYpOw0KCWlmKHNj
LT5iZmVfbWlpYnVzICE9IE5VTEwpDQoJCWRldmljZV9kZWxldGVfY2hpbGQo
ZGV2LCBzYy0+YmZlX21paWJ1cyk7DQoNCgliZmVfcmVsZWFzZV9yZXNvdXJj
ZXMoc2MpOw0KCUJGRV9VTkxPQ0soc2MpOw0KCW10eF9kZXN0cm95KCZzYy0+
YmZlX210eCk7DQoNCglyZXR1cm4oMCk7DQp9DQoNCi8qDQogKiBTdG9wIGFs
bCBjaGlwIEkvTyBzbyB0aGF0IHRoZSBrZXJuZWwncyBwcm9iZSByb3V0aW5l
cyBkb24ndA0KICogZ2V0IGNvbmZ1c2VkIGJ5IGVycmFudCBETUFzIHdoZW4g
cmVib290aW5nLg0KICovDQpzdGF0aWMgdm9pZA0KYmZlX3NodXRkb3duKGRl
dmljZV90IGRldikNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYzsNCg0KCXNj
ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOw0KCUJGRV9MT0NLKHNjKTsNCgli
ZmVfc3RvcChzYyk7IA0KDQoJQkZFX1VOTE9DSyhzYyk7DQoJcmV0dXJuOw0K
fQ0KDQpzdGF0aWMgaW50DQpiZmVfbWlpYnVzX3JlYWRyZWcoZGV2aWNlX3Qg
ZGV2LCBpbnQgcGh5LCBpbnQgcmVnKQ0Kew0KCXN0cnVjdCBiZmVfc29mdGMg
KnNjOw0KCXVfaW50MzJfdCByZXQ7DQoNCglzYyA9IGRldmljZV9nZXRfc29m
dGMoZGV2KTsNCglpZihwaHkgIT0gc2MtPmJmZV9waHlhZGRyKQ0KCQlyZXR1
cm4oMCk7DQoJYmZlX3JlYWRwaHkoc2MsIHJlZywgJnJldCk7DQoNCglyZXR1
cm4ocmV0KTsNCn0NCg0Kc3RhdGljIGludA0KYmZlX21paWJ1c193cml0ZXJl
ZyhkZXZpY2VfdCBkZXYsIGludCBwaHksIGludCByZWcsIGludCB2YWwpDQp7
DQoJc3RydWN0IGJmZV9zb2Z0YyAqc2M7DQoNCglzYyA9IGRldmljZV9nZXRf
c29mdGMoZGV2KTsNCglpZihwaHkgIT0gc2MtPmJmZV9waHlhZGRyKQ0KCQly
ZXR1cm4oMCk7DQoJYmZlX3dyaXRlcGh5KHNjLCByZWcsIHZhbCk7IA0KDQoJ
cmV0dXJuKDApOw0KfQ0KDQpzdGF0aWMgdm9pZA0KYmZlX21paWJ1c19zdGF0
Y2hnKGRldmljZV90IGRldikNCnsNCglyZXR1cm47DQp9DQoNCnN0YXRpYyB2
b2lkDQpiZmVfdHhfcmluZ19mcmVlKHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0K
ew0KICAgIGludCBpOw0KICAgIA0KICAgIGZvcihpID0gMDsgaSA8IEJGRV9U
WF9MSVNUX0NOVDsgaSsrKSB7DQogICAgICAgIGlmKHNjLT5iZmVfdHhfcmlu
Z1tpXS5iZmVfbWJ1ZiAhPSBOVUxMKSB7DQogICAgICAgICAgICBtX2ZyZWVt
KHNjLT5iZmVfdHhfcmluZ1tpXS5iZmVfbWJ1Zik7DQogICAgICAgICAgICBz
Yy0+YmZlX3R4X3JpbmdbaV0uYmZlX21idWYgPSBOVUxMOw0KICAgICAgICAg
ICAgYnVzX2RtYW1hcF91bmxvYWQoc2MtPmJmZV90YWcsDQogICAgICAgICAg
ICAgICAgICAgIHNjLT5iZmVfdHhfcmluZ1tpXS5iZmVfbWFwKTsNCiAgICAg
ICAgICAgIGJ1c19kbWFtYXBfZGVzdHJveShzYy0+YmZlX3RhZywNCiAgICAg
ICAgICAgICAgICAgICAgc2MtPmJmZV90eF9yaW5nW2ldLmJmZV9tYXApOw0K
ICAgICAgICB9DQogICAgfQ0KICAgIGJ6ZXJvKHNjLT5iZmVfdHhfbGlzdCwg
QkZFX1RYX0xJU1RfU0laRSk7DQogICAgYnVzX2RtYW1hcF9zeW5jKHNjLT5i
ZmVfdHhfdGFnLCBzYy0+YmZlX3R4X21hcCwgQlVTX0RNQVNZTkNfUFJFUkVB
RCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfcnhfcmluZ19mcmVlKHN0cnVj
dCBiZmVfc29mdGMgKnNjKQ0Kew0KCWludCBpOw0KDQoJZm9yIChpID0gMDsg
aSA8IEJGRV9SWF9MSVNUX0NOVDsgaSsrKSB7DQoJCWlmIChzYy0+YmZlX3J4
X3JpbmdbaV0uYmZlX21idWYgIT0gTlVMTCkgew0KCQkJbV9mcmVlbShzYy0+
YmZlX3J4X3JpbmdbaV0uYmZlX21idWYpOw0KCQkJc2MtPmJmZV9yeF9yaW5n
W2ldLmJmZV9tYnVmID0gTlVMTDsNCgkJCWJ1c19kbWFtYXBfdW5sb2FkKHNj
LT5iZmVfdGFnLA0KCQkJCQlzYy0+YmZlX3J4X3JpbmdbaV0uYmZlX21hcCk7
DQoJCQlidXNfZG1hbWFwX2Rlc3Ryb3koc2MtPmJmZV90YWcsDQoJCQkJCXNj
LT5iZmVfcnhfcmluZ1tpXS5iZmVfbWFwKTsNCgkJfQ0KCX0NCgliemVybyhz
Yy0+YmZlX3J4X2xpc3QsIEJGRV9SWF9MSVNUX1NJWkUpOw0KCWJ1c19kbWFt
YXBfc3luYyhzYy0+YmZlX3J4X3RhZywgc2MtPmJmZV9yeF9tYXAsIEJVU19E
TUFTWU5DX1BSRVJFQUQpOw0KfQ0KDQoNCnN0YXRpYyBpbnQgDQpiZmVfbGlz
dF9yeF9pbml0KHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0Kew0KCWludCBpOw0K
DQoJZm9yKGkgPSAwOyBpIDwgQkZFX1JYX0xJU1RfQ05UOyBpKyspIHsNCgkJ
aWYoYmZlX2xpc3RfbmV3YnVmKHNjLCBpLCBOVUxMKSA9PSBFTk9CVUZTKSAN
CgkJCXJldHVybiBFTk9CVUZTOw0KCX0NCg0KCWJ1c19kbWFtYXBfc3luYyhz
Yy0+YmZlX3J4X3RhZywgc2MtPmJmZV9yeF9tYXAsIEJVU19ETUFTWU5DX1BS
RVJFQUQpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfRE1BUlhfUFRSLCAoaSAq
IHNpemVvZihzdHJ1Y3QgYmZlX2Rlc2MpKSk7DQoNCglzYy0+YmZlX3J4X2Nv
bnMgPSAwOw0KDQoJcmV0dXJuKDApOw0KfQ0KDQpzdGF0aWMgaW50DQpiZmVf
bGlzdF9uZXdidWYoc3RydWN0IGJmZV9zb2Z0YyAqc2MsIGludCBjLCBzdHJ1
Y3QgbWJ1ZiAqbSkNCnsNCglzdHJ1Y3QgYmZlX3J4aGVhZGVyICpyeF9oZWFk
ZXI7DQoJc3RydWN0IGJmZV9kZXNjICpkOw0KCXN0cnVjdCBiZmVfZGF0YSAq
cjsNCgl1X2ludDMyX3QgY3RybDsNCg0KCWlmICgoYyA8IDApIHx8IChjID49
IEJGRV9SWF9MSVNUX0NOVCkpDQoJCXJldHVybihFSU5WQUwpOw0KDQoJaWYo
bSA9PSBOVUxMKSB7DQoJCW0gPSBtX2dldGNsKE1fRE9OVFdBSVQsIE1UX0RB
VEEsIE1fUEtUSERSKTsNCgkJaWYobSA9PSBOVUxMKQ0KCQkJcmV0dXJuKEVO
T0JVRlMpOw0KCQltLT5tX2xlbiA9IG0tPm1fcGt0aGRyLmxlbiA9IE1DTEJZ
VEVTOw0KCX0NCgllbHNlDQoJCW0tPm1fZGF0YSA9IG0tPm1fZXh0LmV4dF9i
dWY7DQoNCglyeF9oZWFkZXIgPSBtdG9kKG0sIHN0cnVjdCBiZmVfcnhoZWFk
ZXIgKik7DQoJcnhfaGVhZGVyLT5sZW4gPSAwOw0KCXJ4X2hlYWRlci0+Zmxh
Z3MgPSAwOw0KDQoJLyogTWFwIHRoZSBtYnVmIGludG8gRE1BICovDQoJc2Mt
PmJmZV9yeF9jbnQgPSBjOw0KCWQgPSAmc2MtPmJmZV9yeF9saXN0W2NdOw0K
CXIgPSAmc2MtPmJmZV9yeF9yaW5nW2NdOw0KCWJ1c19kbWFtYXBfbG9hZChz
Yy0+YmZlX3RhZywgci0+YmZlX21hcCwgbXRvZChtLCB2b2lkICopLCANCgkJ
CU1DTEJZVEVTLCBiZmVfZG1hX21hcF9kZXNjLCBkLCAwKTsNCglidXNfZG1h
bWFwX3N5bmMoc2MtPmJmZV90YWcsIHItPmJmZV9tYXAsIEJVU19ETUFTWU5D
X1BSRVdSSVRFKTsNCg0KCWN0cmwgPSBFVEhFUl9NQVhfTEVOICsgMzI7DQoN
CglpZihjID09IEJGRV9SWF9MSVNUX0NOVCAtIDEpDQoJCWN0cmwgfD0gQkZF
X0RFU0NfRU9UOw0KDQoJZC0+YmZlX2N0cmwgPSBjdHJsOw0KCXItPmJmZV9t
YnVmID0gbTsNCglidXNfZG1hbWFwX3N5bmMoc2MtPmJmZV9yeF90YWcsIHNj
LT5iZmVfcnhfbWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsNCglyZXR1cm4o
MCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfZ2V0X2NvbmZpZyhzdHJ1Y3Qg
YmZlX3NvZnRjICpzYykNCnsNCgl1X2ludDhfdCBlZXByb21bMTI4XTsNCg0K
CWJmZV9yZWFkX2VlcHJvbShzYywgZWVwcm9tKTsNCg0KCXNjLT5hcnBjb20u
YWNfZW5hZGRyWzBdID0gZWVwcm9tWzc5XTsNCglzYy0+YXJwY29tLmFjX2Vu
YWRkclsxXSA9IGVlcHJvbVs3OF07DQoJc2MtPmFycGNvbS5hY19lbmFkZHJb
Ml0gPSBlZXByb21bODFdOw0KCXNjLT5hcnBjb20uYWNfZW5hZGRyWzNdID0g
ZWVwcm9tWzgwXTsNCglzYy0+YXJwY29tLmFjX2VuYWRkcls0XSA9IGVlcHJv
bVs4M107DQoJc2MtPmFycGNvbS5hY19lbmFkZHJbNV0gPSBlZXByb21bODJd
Ow0KDQoJc2MtPmJmZV9waHlhZGRyID0gZWVwcm9tWzkwXSAmIDB4MWY7DQoJ
c2MtPmJmZV9tZGNfcG9ydCA9IChlZXByb21bOTBdID4+IDE0KSAmIDB4MTsN
Cg0KCXNjLT5iZmVfY29yZV91bml0ID0gMDsgDQoJc2MtPmJmZV9kbWFfb2Zm
c2V0ID0gQkZFX1BDSV9ETUE7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfcGNp
X3NldHVwKHN0cnVjdCBiZmVfc29mdGMgKnNjLCB1X2ludDMyX3QgY29yZXMp
DQp7DQoJdV9pbnQzMl90IGJhcl9vcmlnLCBwY2lfcmV2LCB2YWw7DQoNCgli
YXJfb3JpZyA9IHBjaV9yZWFkX2NvbmZpZyhzYy0+YmZlX2RldiwgQkZFX0JB
UjBfV0lOLCA0KTsNCglwY2lfd3JpdGVfY29uZmlnKHNjLT5iZmVfZGV2LCBC
RkVfQkFSMF9XSU4sIEJGRV9SRUdfUENJLCA0KTsNCglwY2lfcmV2ID0gQ1NS
X1JFQURfNChzYywgQkZFX1NCSURISUdIKSAmIEJGRV9SQ19NQVNLOw0KDQoJ
dmFsID0gQ1NSX1JFQURfNChzYywgQkZFX1NCSU5UVkVDKTsNCgl2YWwgfD0g
Y29yZXM7DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9TQklOVFZFQywgdmFsKTsN
Cg0KCXZhbCA9IENTUl9SRUFEXzQoc2MsIEJGRV9TU0JfUENJX1RSQU5TXzIp
Ow0KCXZhbCB8PSBCRkVfU1NCX1BDSV9QUkVGIHwgQkZFX1NTQl9QQ0lfQlVS
U1Q7DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9TU0JfUENJX1RSQU5TXzIsIHZh
bCk7DQoNCglwY2lfd3JpdGVfY29uZmlnKHNjLT5iZmVfZGV2LCBCRkVfQkFS
MF9XSU4sIGJhcl9vcmlnLCA0KTsNCn0NCg0Kc3RhdGljIHZvaWQgDQpiZmVf
Y2xlYXJfc3RhdHMoc3RydWN0IGJmZV9zb2Z0YyAqc2MpDQp7DQoJdV9sb25n
IHJlZzsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCUNTUl9XUklURV80KHNjLCBC
RkVfTUlCX0NUUkwsIEJGRV9NSUJfQ0xSX09OX1JFQUQpOw0KCWZvciAocmVn
ID0gQkZFX1RYX0dPT0RfTzsgcmVnIDw9IEJGRV9UWF9QQVVTRTsgcmVnICs9
IDQpDQoJCUNTUl9SRUFEXzQoc2MsIHJlZyk7DQoJZm9yIChyZWcgPSBCRkVf
UlhfR09PRF9POyByZWcgPD0gQkZFX1JYX05QQVVTRTsgcmVnICs9IDQpDQoJ
CUNTUl9SRUFEXzQoc2MsIHJlZyk7DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0N
Cg0Kc3RhdGljIGludCANCmJmZV9yZXNldHBoeShzdHJ1Y3QgYmZlX3NvZnRj
ICpzYykNCnsNCgl1X2ludDMyX3QgdmFsOw0KDQoJQkZFX0xPQ0soc2MpOw0K
CWJmZV93cml0ZXBoeShzYywgMCwgQk1DUl9SRVNFVCk7DQoJREVMQVkoMTAw
KTsNCgliZmVfcmVhZHBoeShzYywgMCwgJnZhbCk7DQoJaWYgKHZhbCAmIEJN
Q1JfUkVTRVQpIHsNCgkJcHJpbnRmKCJiZmUlZDogUEhZIFJlc2V0IHdvdWxk
IG5vdCBjb21wbGV0ZS5cbiIsIHNjLT5iZmVfdW5pdCk7DQoJCUJGRV9VTkxP
Q0soc2MpOw0KCQlyZXR1cm4gRU5YSU87DQoJfQ0KCUJGRV9VTkxPQ0soc2Mp
Ow0KCXJldHVybiAwOw0KfQ0KDQpzdGF0aWMgdm9pZA0KYmZlX2NoaXBfaGFs
dChzdHJ1Y3QgYmZlX3NvZnRjICpzYykNCnsNCglCRkVfTE9DSyhzYyk7DQoJ
LyogZGlzYWJsZSBpbnRlcnJ1cHRzIC0gbm90IHRoYXQgaXQgYWN0dWFsbHkg
ZG9lcy4uKi8NCglDU1JfV1JJVEVfNChzYywgQkZFX0lNQVNLLCAwKTsNCglD
U1JfUkVBRF80KHNjLCBCRkVfSU1BU0spOw0KDQoJQ1NSX1dSSVRFXzQoc2Ms
IEJGRV9FTkVUX0NUUkwsIEJGRV9FTkVUX0RJU0FCTEUpOw0KCWJmZV93YWl0
X2JpdChzYywgQkZFX0VORVRfQ1RSTCwgQkZFX0VORVRfRElTQUJMRSwgMjAw
LCAxKTsNCg0KCUNTUl9XUklURV80KHNjLCBCRkVfRE1BUlhfQ1RSTCwgMCk7
DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9ETUFUWF9DVFJMLCAwKTsNCglERUxB
WSgxMCk7DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0NCg0Kc3RhdGljIHZvaWQN
CmJmZV9jaGlwX3Jlc2V0KHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0Kew0KCXVf
aW50MzJfdCB2YWw7ICAgIA0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJLyogU2V0
IHRoZSBpbnRlcnJ1cHQgdmVjdG9yIGZvciB0aGUgZW5ldCBjb3JlICovDQoJ
YmZlX3BjaV9zZXR1cChzYywgQkZFX0lOVFZFQ19FTkVUMCk7DQoNCgkvKiBp
cyBjb3JlIHVwPyAqLw0KCXZhbCA9IENTUl9SRUFEXzQoc2MsIEJGRV9TQlRN
U0xPVykgJiAoQkZFX1JFU0VUIHwgQkZFX1JFSkVDVCB8IEJGRV9DTE9DSyk7
DQoJaWYgKHZhbCA9PSBCRkVfQ0xPQ0spIHsNCgkJLyogSXQgaXMsIHNvIHNo
dXQgaXQgZG93biAqLw0KCQlDU1JfV1JJVEVfNChzYywgQkZFX1JDVl9MQVpZ
LCAwKTsNCgkJQ1NSX1dSSVRFXzQoc2MsIEJGRV9FTkVUX0NUUkwsIEJGRV9F
TkVUX0RJU0FCTEUpOw0KCQliZmVfd2FpdF9iaXQoc2MsIEJGRV9FTkVUX0NU
UkwsIEJGRV9FTkVUX0RJU0FCTEUsIDEwMCwgMSk7DQoJCUNTUl9XUklURV80
KHNjLCBCRkVfRE1BVFhfQ1RSTCwgMCk7DQoJCXNjLT5iZmVfdHhfY250ID0g
c2MtPmJmZV90eF9wcm9kID0gc2MtPmJmZV90eF9jb25zID0gMDsNCgkJaWYg
KENTUl9SRUFEXzQoc2MsIEJGRV9ETUFSWF9TVEFUKSAmIEJGRV9TVEFUX0VN
QVNLKSANCgkJCWJmZV93YWl0X2JpdChzYywgQkZFX0RNQVJYX1NUQVQsIEJG
RV9TVEFUX1NJRExFLCAxMDAsIDApOw0KCQlDU1JfV1JJVEVfNChzYywgQkZF
X0RNQVJYX0NUUkwsIDApOw0KCQlzYy0+YmZlX3J4X3Byb2QgPSBzYy0+YmZl
X3J4X2NvbnMgPSAwOw0KCX0NCg0KCWJmZV9jb3JlX3Jlc2V0KHNjKTsNCgli
ZmVfY2xlYXJfc3RhdHMoc2MpOw0KDQoJLyoNCgkgKiBXZSB3YW50IHRoZSBw
aHkgcmVnaXN0ZXJzIHRvIGJlIGFjY2Vzc2libGUgZXZlbiB3aGVuDQoJICog
dGhlIGRyaXZlciBpcyAiZG93bmVkIiBzbyBpbml0aWFsaXplIE1EQyBwcmVh
bWJsZSwgZnJlcXVlbmN5LA0KCSAqIGFuZCB3aGV0aGVyIGludGVybmFsIG9y
IGV4dGVybmFsIHBoeSBoZXJlLg0KCSAqLw0KDQoJLyogNDQwMiBoYXMgNjIu
NU1oeiBTQiBjbG9jayBhbmQgaW50ZXJuYWwgcGh5ICovDQoJQ1NSX1dSSVRF
XzQoc2MsIEJGRV9NRElPX0NUUkwsIDB4OGQpOw0KDQoJLyogSW50ZXJuYWwg
b3IgZXh0ZXJuYWwgUEhZPyAqLw0KCXZhbCA9IENTUl9SRUFEXzQoc2MsIEJG
RV9ERVZDVFJMKTsNCglpZighKHZhbCAmIEJGRV9JUFApKSANCgkJQ1NSX1dS
SVRFXzQoc2MsIEJGRV9FTkVUX0NUUkwsIEJGRV9FTkVUX0VQU0VMKTsNCgll
bHNlIGlmKENTUl9SRUFEXzQoc2MsIEJGRV9ERVZDVFJMKSAmIEJGRV9FUFIp
IHsNCgkJQkZFX0FORChzYywgQkZFX0RFVkNUUkwsIH5CRkVfRVBSKTsNCgkJ
REVMQVkoMTAwKTsNCgl9DQoNCgkvKiBFbmFibGUgQ1JDMzIgZ2VuZXJhdGlv
biBhbmQgc2V0IHByb3BlciBMRUQgbW9kZXMgKi8NCglCRkVfT1Ioc2MsIEJG
RV9NQUNfQ1RSTCwgQkZFX0NUUkxfQ1JDMzJfRU5BQiB8IEJGRV9DVFJMX0xF
RCk7DQoNCgkvKiBSZXNldC9DbGVhciBwb3dlcmRvd24gYml0ICAqLw0KCUJG
RV9BTkQoc2MsIEJGRV9NQUNfQ1RSTCwgfkJGRV9DVFJMX1BET1dOKTsNCg0K
CUNTUl9XUklURV80KHNjLCBCRkVfUkNWX0xBWlksICgoMSA8PCBCRkVfTEFa
WV9GQ19TSElGVCkgJiANCgkJCQlCRkVfTEFaWV9GQ19NQVNLKSk7DQoNCgkv
KiANCgkgKiBXZSBkb24ndCB3YW50IGxhenkgaW50ZXJydXB0cywgc28ganVz
dCBzZW5kIHRoZW0gYXQgdGhlIGVuZCBvZiBhIGZyYW1lLA0KCSAqIHBsZWFz
ZSANCgkgKi8NCglCRkVfT1Ioc2MsIEJGRV9SQ1ZfTEFaWSwgMCk7DQoNCgkv
KiBTZXQgbWF4IGxlbmd0aHMsIGFjY291bnRpbmcgZm9yIFZMQU4gdGFncyAq
Lw0KCUNTUl9XUklURV80KHNjLCBCRkVfUlhNQVhMRU4sIEVUSEVSX01BWF9M
RU4rMzIpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfVFhNQVhMRU4sIEVUSEVS
X01BWF9MRU4rMzIpOw0KDQoJLyogU2V0IHdhdGVybWFyayBYWFggLSBtYWdp
YyAqLw0KCUNTUl9XUklURV80KHNjLCBCRkVfVFhfV01BUkssIDU2KTsNCg0K
CS8qIA0KCSAqIEluaXRpYWxpc2UgRE1BIGNoYW5uZWxzIC0gbm90IGZvcmdl
dHRpbmcgZG1hIGFkZHJlc3NlcyBuZWVkIHRvIGJlIGFkZGVkDQoJICogdG8g
QkZFX1BDSV9ETUEgDQoJICovDQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9ETUFU
WF9DVFJMLCBCRkVfVFhfQ1RSTF9FTkFCTEUpOw0KCUNTUl9XUklURV80KHNj
LCBCRkVfRE1BVFhfQUREUiwgc2MtPmJmZV90eF9kbWEgKyBCRkVfUENJX0RN
QSk7DQoNCglDU1JfV1JJVEVfNChzYywgQkZFX0RNQVJYX0NUUkwsIChCRkVf
UlhfT0ZGU0VUIDw8IEJGRV9SWF9DVFJMX1JPU0hJRlQpIHwgDQoJCQlCRkVf
UlhfQ1RSTF9FTkFCTEUpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfRE1BUlhf
QUREUiwgc2MtPmJmZV9yeF9kbWEgKyBCRkVfUENJX0RNQSk7DQoNCgliZmVf
cmVzZXRwaHkoc2MpOw0KCWJmZV9zZXR1cHBoeShzYyk7DQoNCglCRkVfVU5M
T0NLKHNjKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV9jb3JlX2Rpc2FibGUo
c3RydWN0IGJmZV9zb2Z0YyAqc2MpDQp7DQoJaWYoKENTUl9SRUFEXzQoc2Ms
IEJGRV9TQlRNU0xPVykpICYgQkZFX1JFU0VUKQ0KCQlyZXR1cm47DQoNCgkv
KiANCgkgKiBTZXQgcmVqZWN0LCB3YWl0IGZvciBpdCBzZXQsIHRoZW4gd2Fp
dCBmb3IgdGhlIGNvcmUgdG8gc3RvcCBiZWluZyBidXN5DQoJICogVGhlbiBz
ZXQgcmVzZXQgYW5kIHJlamVjdCBhbmQgZW5hYmxlIHRoZSBjbG9ja3MNCgkg
Ki8NCglDU1JfV1JJVEVfNChzYywgQkZFX1NCVE1TTE9XLCAoQkZFX1JFSkVD
VCB8IEJGRV9DTE9DSykpOw0KCWJmZV93YWl0X2JpdChzYywgQkZFX1NCVE1T
TE9XLCBCRkVfUkVKRUNULCAxMDAwLCAwKTsNCgliZmVfd2FpdF9iaXQoc2Ms
IEJGRV9TQlRNU0hJR0gsIEJGRV9CVVNZLCAxMDAwLCAxKTsNCglDU1JfV1JJ
VEVfNChzYywgQkZFX1NCVE1TTE9XLCAoQkZFX0ZHQyB8IEJGRV9DTE9DSyB8
IEJGRV9SRUpFQ1QgfA0KCQkJCUJGRV9SRVNFVCkpOw0KCUNTUl9SRUFEXzQo
c2MsIEJGRV9TQlRNU0xPVyk7DQoJREVMQVkoMTApOw0KCS8qIExlYXZlIHJl
c2V0IGFuZCByZWplY3Qgc2V0ICovDQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9T
QlRNU0xPVywgKEJGRV9SRUpFQ1QgfCBCRkVfUkVTRVQpKTsNCglERUxBWSgx
MCk7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfY29yZV9yZXNldChzdHJ1Y3Qg
YmZlX3NvZnRjICpzYykNCnsNCgl1X2ludDMyX3QgdmFsOw0KDQoJLyogRGlz
YWJsZSB0aGUgY29yZSAqLw0KCWJmZV9jb3JlX2Rpc2FibGUoc2MpOw0KDQoJ
LyogYW5kIGJyaW5nIGl0IGJhY2sgdXAgKi8NCglDU1JfV1JJVEVfNChzYywg
QkZFX1NCVE1TTE9XLCAoQkZFX1JFU0VUIHwgQkZFX0NMT0NLIHwgQkZFX0ZH
QykpOw0KCUNTUl9SRUFEXzQoc2MsIEJGRV9TQlRNU0xPVyk7DQoJREVMQVko
MTApOw0KDQoJLyogQ2hpcCBidWcsIGNsZWFyIFNFUlIsIElCIGFuZCBUTyBp
ZiB0aGV5IGFyZSBzZXQuICovDQoJaWYgKENTUl9SRUFEXzQoc2MsIEJGRV9T
QlRNU0hJR0gpICYgQkZFX1NFUlIpDQoJCUNTUl9XUklURV80KHNjLCBCRkVf
U0JUTVNISUdILCAwKTsNCgl2YWwgPSBDU1JfUkVBRF80KHNjLCBCRkVfU0JJ
TVNUQVRFKTsNCglpZiAodmFsICYgKEJGRV9JQkUgfCBCRkVfVE8pKQ0KCQlD
U1JfV1JJVEVfNChzYywgQkZFX1NCSU1TVEFURSwgdmFsICYgfihCRkVfSUJF
IHwgQkZFX1RPKSk7DQoNCgkvKiBDbGVhciByZXNldCBhbmQgYWxsb3cgaXQg
dG8gbW92ZSB0aHJvdWdoIHRoZSBjb3JlICovDQoJQ1NSX1dSSVRFXzQoc2Ms
IEJGRV9TQlRNU0xPVywgKEJGRV9DTE9DSyB8IEJGRV9GR0MpKTsNCglDU1Jf
UkVBRF80KHNjLCBCRkVfU0JUTVNMT1cpOw0KCURFTEFZKDEwKTsNCg0KCS8q
IExlYXZlIHRoZSBjbG9jayBzZXQgKi8NCglDU1JfV1JJVEVfNChzYywgQkZF
X1NCVE1TTE9XLCBCRkVfQ0xPQ0spOw0KCUNTUl9SRUFEXzQoc2MsIEJGRV9T
QlRNU0xPVyk7DQoJREVMQVkoMTApOw0KfQ0KDQpzdGF0aWMgdm9pZCANCmJm
ZV9jYW1fd3JpdGUoc3RydWN0IGJmZV9zb2Z0YyAqc2MsIHVfY2hhciAqZGF0
YSwgaW50IGluZGV4KQ0Kew0KCXVfaW50MzJfdCB2YWw7DQoNCgl2YWwgID0g
KCh1X2ludDMyX3QpIGRhdGFbMl0pIDw8IDI0Ow0KCXZhbCB8PSAoKHVfaW50
MzJfdCkgZGF0YVszXSkgPDwgMTY7DQoJdmFsIHw9ICgodV9pbnQzMl90KSBk
YXRhWzRdKSA8PCAgODsNCgl2YWwgfD0gKCh1X2ludDMyX3QpIGRhdGFbNV0p
Ow0KCUNTUl9XUklURV80KHNjLCBCRkVfQ0FNX0RBVEFfTE8sIHZhbCk7DQoJ
dmFsID0gKEJGRV9DQU1fSElfVkFMSUQgfA0KCQkJKCgodV9pbnQzMl90KSBk
YXRhWzBdKSA8PCA4KSB8DQoJCQkoKCh1X2ludDMyX3QpIGRhdGFbMV0pKSk7
DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9DQU1fREFUQV9ISSwgdmFsKTsNCglD
U1JfV1JJVEVfNChzYywgQkZFX0NBTV9DVFJMLCAoQkZFX0NBTV9XUklURSB8
DQoJCQkJKCh1X2ludDMyX3QpIGluZGV4IDw8IEJGRV9DQU1fSU5ERVhfU0hJ
RlQpKSk7DQoJYmZlX3dhaXRfYml0KHNjLCBCRkVfQ0FNX0NUUkwsIEJGRV9D
QU1fQlVTWSwgMTAwMDAsIDEpOw0KfQ0KDQpzdGF0aWMgdm9pZCANCmJmZV9z
ZXRfcnhfbW9kZShzdHJ1Y3QgYmZlX3NvZnRjICpzYykNCnsNCglzdHJ1Y3Qg
aWZuZXQgKmlmcCA9ICZzYy0+YXJwY29tLmFjX2lmOw0KCXN0cnVjdCBpZm11
bHRpYWRkciAgKmlmbWE7DQoJdV9pbnQzMl90IHZhbDsNCglpbnQgaSA9IDA7
DQoNCgl2YWwgPSBDU1JfUkVBRF80KHNjLCBCRkVfUlhDT05GKTsNCg0KCWlm
IChpZnAtPmlmX2ZsYWdzICYgSUZGX1BST01JU0MpDQoJCXZhbCB8PSBCRkVf
UlhDT05GX1BST01JU0M7DQoJZWxzZQ0KCQl2YWwgJj0gfkJGRV9SWENPTkZf
UFJPTUlTQzsNCg0KCWlmIChpZnAtPmlmX2ZsYWdzICYgSUZGX0JST0FEQ0FT
VCkNCgkJdmFsICY9IH5CRkVfUlhDT05GX0RCQ0FTVDsNCgllbHNlDQoJCXZh
bCB8PSBCRkVfUlhDT05GX0RCQ0FTVDsNCg0KDQoJQ1NSX1dSSVRFXzQoc2Ms
IEJGRV9DQU1fQ1RSTCwgMCk7DQoJYmZlX2NhbV93cml0ZShzYywgc2MtPmFy
cGNvbS5hY19lbmFkZHIsIGkrKyk7DQoNCglpZiAoaWZwLT5pZl9mbGFncyAm
IElGRl9BTExNVUxUSSkNCgkJdmFsIHw9IEJGRV9SWENPTkZfQUxMTVVMVEk7
DQoJZWxzZSB7DQoJCXZhbCAmPSB+QkZFX1JYQ09ORl9BTExNVUxUSTsNCgkJ
VEFJTFFfRk9SRUFDSChpZm1hLCAmaWZwLT5pZl9tdWx0aWFkZHJzLCBpZm1h
X2xpbmspIHsNCgkJCWlmIChpZm1hLT5pZm1hX2FkZHItPnNhX2ZhbWlseSAh
PSBBRl9MSU5LKQ0KCQkJCWNvbnRpbnVlOw0KCQkJYmZlX2NhbV93cml0ZShz
YywgTExBRERSKChzdHJ1Y3Qgc29ja2FkZHJfZGwgKilpZm1hLT5pZm1hX2Fk
ZHIpLA0KCQkJCQlpKyspOw0KCQl9DQoJfQ0KDQoJQ1NSX1dSSVRFXzQoc2Ms
IEJGRV9SWENPTkYsIHZhbCk7DQoJQkZFX09SKHNjLCBCRkVfQ0FNX0NUUkws
IEJGRV9DQU1fRU5BQkxFKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV9kbWFf
bWFwKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBu
c2VnLCBpbnQgZXJyb3IpDQp7DQoJdV9pbnQzMl90ICpwdHI7DQoNCglwdHIg
PSBhcmc7DQoJKnB0ciA9IHNlZ3MtPmRzX2FkZHI7DQp9DQoNCnN0YXRpYyB2
b2lkDQpiZmVfZG1hX21hcF9kZXNjKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdt
ZW50X3QgKnNlZ3MsIGludCBuc2VnLCBpbnQgZXJyb3IpDQp7DQoJc3RydWN0
IGJmZV9kZXNjICpkOw0KDQoJZCA9IGFyZzsNCgkvKiBUaGUgY2hpcCBuZWVk
cyBhbGwgYWRkcmVzc2VzIHRvIGJlIGFkZGVkIHRvIEJGRV9QQ0lfRE1BICov
DQoJZC0+YmZlX2FkZHIgPSBzZWdzLT5kc19hZGRyICsgQkZFX1BDSV9ETUE7
DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfcmVsZWFzZV9yZXNvdXJjZXMoc3Ry
dWN0IGJmZV9zb2Z0YyAqc2MpDQp7DQoJZGV2aWNlX3QgZGV2Ow0KCWludCBp
Ow0KDQoJZGV2ID0gc2MtPmJmZV9kZXY7DQoNCglpZiAoc2MtPmJmZV92cGRf
cHJvZG5hbWUgIT0gTlVMTCkNCgkJZnJlZShzYy0+YmZlX3ZwZF9wcm9kbmFt
ZSwgTV9ERVZCVUYpOw0KDQoJaWYgKHNjLT5iZmVfdnBkX3JlYWRvbmx5ICE9
IE5VTEwpDQoJCWZyZWUoc2MtPmJmZV92cGRfcmVhZG9ubHksIE1fREVWQlVG
KTsNCg0KCWlmIChzYy0+YmZlX2ludHJoYW5kICE9IE5VTEwpDQoJCWJ1c190
ZWFyZG93bl9pbnRyKGRldiwgc2MtPmJmZV9pcnEsIHNjLT5iZmVfaW50cmhh
bmQpOw0KDQoJaWYgKHNjLT5iZmVfaXJxICE9IE5VTEwpDQoJCWJ1c19yZWxl
YXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JUlEsIDAsIHNjLT5iZmVfaXJx
KTsNCg0KCWlmIChzYy0+YmZlX3JlcyAhPSBOVUxMKQ0KCQlidXNfcmVsZWFz
ZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfTUVNT1JZLCAweDEwLCBzYy0+YmZl
X3Jlcyk7DQoNCglpZihzYy0+YmZlX3R4X3RhZyAhPSBOVUxMKSB7DQoJCWJ1
c19kbWFtYXBfdW5sb2FkKHNjLT5iZmVfdHhfdGFnLCBzYy0+YmZlX3R4X21h
cCk7DQoJCWJ1c19kbWFtZW1fZnJlZShzYy0+YmZlX3R4X3RhZywgc2MtPmJm
ZV90eF9saXN0LCBzYy0+YmZlX3R4X21hcCk7DQoJCWJ1c19kbWFfdGFnX2Rl
c3Ryb3koc2MtPmJmZV90eF90YWcpOw0KCQlzYy0+YmZlX3R4X3RhZyA9IE5V
TEw7DQoJfQ0KDQoJaWYoc2MtPmJmZV9yeF90YWcgIT0gTlVMTCkgew0KCQli
dXNfZG1hbWFwX3VubG9hZChzYy0+YmZlX3J4X3RhZywgc2MtPmJmZV9yeF9t
YXApOw0KCQlidXNfZG1hbWVtX2ZyZWUoc2MtPmJmZV9yeF90YWcsIHNjLT5i
ZmVfcnhfbGlzdCwgc2MtPmJmZV9yeF9tYXApOw0KCQlidXNfZG1hX3RhZ19k
ZXN0cm95KHNjLT5iZmVfcnhfdGFnKTsNCgkJc2MtPmJmZV9yeF90YWcgPSBO
VUxMOw0KCX0NCg0KCWlmKHNjLT5iZmVfdGFnICE9IE5VTEwpIHsNCgkJZm9y
KGkgPSAwOyBpIDwgQkZFX1RYX0xJU1RfQ05UOyBpKyspIHsNCgkJCWJ1c19k
bWFtYXBfZGVzdHJveShzYy0+YmZlX3RhZywgc2MtPmJmZV90eF9yaW5nW2ld
LmJmZV9tYXApOw0KCQl9DQoJCWJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmJm
ZV90YWcpOw0KICAgICAgICBzYy0+YmZlX3RhZyA9IE5VTEw7DQoJfQ0KDQoJ
aWYoc2MtPmJmZV9wYXJlbnRfdGFnICE9IE5VTEwpDQoJCWJ1c19kbWFfdGFn
X2Rlc3Ryb3koc2MtPmJmZV9wYXJlbnRfdGFnKTsNCg0KCXJldHVybjsNCn0N
Cg0Kc3RhdGljIHZvaWQNCmJmZV9yZWFkX2VlcHJvbShzdHJ1Y3QgYmZlX3Nv
ZnRjICpzYywgdV9pbnQ4X3QgKmRhdGEpDQp7DQoJbG9uZyBpOw0KCXVfaW50
MTZfdCAqcHRyID0gKHVfaW50MTZfdCAqKWRhdGE7DQoNCglmb3IoaSA9IDA7
IGkgPCAxMjg7IGkgKz0gMikNCgkJcHRyW2kvMl0gPSBDU1JfUkVBRF80KHNj
LCA0MDk2ICsgaSk7DQp9DQoNCnN0YXRpYyBpbnQNCmJmZV93YWl0X2JpdChz
dHJ1Y3QgYmZlX3NvZnRjICpzYywgdV9pbnQzMl90IHJlZywgdV9pbnQzMl90
IGJpdCwgDQoJCXVfbG9uZyB0aW1lb3V0LCBjb25zdCBpbnQgY2xlYXIpDQp7
DQoJdV9sb25nIGk7DQoNCglmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsr
KSB7DQoJCXVfaW50MzJfdCB2YWwgPSBDU1JfUkVBRF80KHNjLCByZWcpOw0K
DQoJCWlmIChjbGVhciAmJiAhKHZhbCAmIGJpdCkpDQoJCQlicmVhazsNCgkJ
aWYgKCFjbGVhciAmJiAodmFsICYgYml0KSkNCgkJCWJyZWFrOw0KCQlERUxB
WSgxMCk7DQoJfQ0KCWlmIChpID09IHRpbWVvdXQpIHsNCgkJcHJpbnRmKCJi
ZmUlZDogQlVHISAgVGltZW91dCB3YWl0aW5nIGZvciBiaXQgJTA4eCBvZiBy
ZWdpc3RlciAiDQoJCQkJIiV4IHRvICVzLlxuIiwgc2MtPmJmZV91bml0LCBi
aXQsIHJlZywgDQoJCQkJKGNsZWFyID8gImNsZWFyIiA6ICJzZXQiKSk7DQoJ
CXJldHVybiAtMTsNCgl9DQoJcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbnQN
CmJmZV9yZWFkcGh5KHN0cnVjdCBiZmVfc29mdGMgKnNjLCB1X2ludDMyX3Qg
cmVnLCB1X2ludDMyX3QgKnZhbCkNCnsNCglpbnQgZXJyOyANCg0KCUJGRV9M
T0NLKHNjKTsNCgkvKiBDbGVhciBNSUkgSVNSICovDQoJQ1NSX1dSSVRFXzQo
c2MsIEJGRV9FTUFDX0lTVEFULCBCRkVfRU1BQ19JTlRfTUlJKTsNCglDU1Jf
V1JJVEVfNChzYywgQkZFX01ESU9fREFUQSwgKEJGRV9NRElPX1NCX1NUQVJU
IHwNCgkJCQkoQkZFX01ESU9fT1BfUkVBRCA8PCBCRkVfTURJT19PUF9TSElG
VCkgfA0KCQkJCShzYy0+YmZlX3BoeWFkZHIgPDwgQkZFX01ESU9fUE1EX1NI
SUZUKSB8DQoJCQkJKHJlZyA8PCBCRkVfTURJT19SQV9TSElGVCkgfA0KCQkJ
CShCRkVfTURJT19UQV9WQUxJRCA8PCBCRkVfTURJT19UQV9TSElGVCkpKTsN
CgllcnIgPSBiZmVfd2FpdF9iaXQoc2MsIEJGRV9FTUFDX0lTVEFULCBCRkVf
RU1BQ19JTlRfTUlJLCAxMDAsIDApOw0KCSp2YWwgPSBDU1JfUkVBRF80KHNj
LCBCRkVfTURJT19EQVRBKSAmIEJGRV9NRElPX0RBVEFfREFUQTsNCg0KCUJG
RV9VTkxPQ0soc2MpOw0KCXJldHVybiBlcnI7DQp9DQoNCnN0YXRpYyBpbnQN
CmJmZV93cml0ZXBoeShzdHJ1Y3QgYmZlX3NvZnRjICpzYywgdV9pbnQzMl90
IHJlZywgdV9pbnQzMl90IHZhbCkNCnsNCglpbnQgc3RhdHVzOw0KDQoJQkZF
X0xPQ0soc2MpOw0KCUNTUl9XUklURV80KHNjLCBCRkVfRU1BQ19JU1RBVCwg
QkZFX0VNQUNfSU5UX01JSSk7DQoJQ1NSX1dSSVRFXzQoc2MsIEJGRV9NRElP
X0RBVEEsIChCRkVfTURJT19TQl9TVEFSVCB8DQoJCQkJKEJGRV9NRElPX09Q
X1dSSVRFIDw8IEJGRV9NRElPX09QX1NISUZUKSB8DQoJCQkJKHNjLT5iZmVf
cGh5YWRkciA8PCBCRkVfTURJT19QTURfU0hJRlQpIHwNCgkJCQkocmVnIDw8
IEJGRV9NRElPX1JBX1NISUZUKSB8DQoJCQkJKEJGRV9NRElPX1RBX1ZBTElE
IDw8IEJGRV9NRElPX1RBX1NISUZUKSB8DQoJCQkJKHZhbCAmIEJGRV9NRElP
X0RBVEFfREFUQSkpKTsNCglzdGF0dXMgPSBiZmVfd2FpdF9iaXQoc2MsIEJG
RV9FTUFDX0lTVEFULCBCRkVfRU1BQ19JTlRfTUlJLCAxMDAsIDApOw0KCUJG
RV9VTkxPQ0soc2MpOw0KDQoJcmV0dXJuIHN0YXR1czsNCn0NCg0KLyogDQog
KiBYWFggLSBJIHRoaW5rIHRoaXMgaXMgaGFuZGxlZCBieSB0aGUgUEhZIGRy
aXZlciwgYnV0IGl0IGNhbid0IGh1cnQgdG8gZG8gaXQNCiAqIHR3aWNlDQog
Ki8NCnN0YXRpYyBpbnQNCmJmZV9zZXR1cHBoeShzdHJ1Y3QgYmZlX3NvZnRj
ICpzYykNCnsNCgl1X2ludDMyX3QgdmFsOw0KCUJGRV9MT0NLKHNjKTsNCg0K
CS8qIEVuYWJsZSBhY3Rpdml0eSBMRUQgKi8NCgliZmVfcmVhZHBoeShzYywg
MjYsICZ2YWwpOw0KCWJmZV93cml0ZXBoeShzYywgMjYsIHZhbCAmIDB4N2Zm
Zik7IA0KCWJmZV9yZWFkcGh5KHNjLCAyNiwgJnZhbCk7DQoNCgkvKiBFbmFi
bGUgdHJhZmZpYyBtZXRlciBMRUQgbW9kZSAqLw0KCWJmZV9yZWFkcGh5KHNj
LCAyNywgJnZhbCk7DQoJYmZlX3dyaXRlcGh5KHNjLCAyNywgdmFsIHwgKDEg
PDwgNikpOw0KDQoJQkZFX1VOTE9DSyhzYyk7DQoJcmV0dXJuIDA7DQp9DQoN
CnN0YXRpYyB2b2lkIA0KYmZlX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmZlX3Nv
ZnRjICpzYykNCnsNCgl1X2xvbmcgcmVnOw0KCXVfaW50MzJfdCAqdmFsOw0K
DQoJdmFsID0gJnNjLT5iZmVfaHdzdGF0cy50eF9nb29kX29jdGV0czsNCglm
b3IgKHJlZyA9IEJGRV9UWF9HT09EX087IHJlZyA8PSBCRkVfVFhfUEFVU0U7
IHJlZyArPSA0KSB7DQoJCSp2YWwrKyArPSBDU1JfUkVBRF80KHNjLCByZWcp
Ow0KCX0NCgl2YWwgPSAmc2MtPmJmZV9od3N0YXRzLnJ4X2dvb2Rfb2N0ZXRz
Ow0KCWZvciAocmVnID0gQkZFX1JYX0dPT0RfTzsgcmVnIDw9IEJGRV9SWF9O
UEFVU0U7IHJlZyArPSA0KSB7DQoJCSp2YWwrKyArPSBDU1JfUkVBRF80KHNj
LCByZWcpOw0KCX0NCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV90eGVvZihzdHJ1
Y3QgYmZlX3NvZnRjICpzYykNCnsNCglzdHJ1Y3QgaWZuZXQgKmlmcDsNCglp
bnQgaSwgY2hpcGlkeDsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCWlmcCA9ICZz
Yy0+YXJwY29tLmFjX2lmOw0KDQoJY2hpcGlkeCA9IENTUl9SRUFEXzQoc2Ms
IEJGRV9ETUFUWF9TVEFUKSAmIEJGRV9TVEFUX0NETUFTSzsNCgljaGlwaWR4
IC89IHNpemVvZihzdHJ1Y3QgYmZlX2Rlc2MpOw0KDQogICAgaSA9IHNjLT5i
ZmVfdHhfY29uczsNCgkvKiBHbyB0aHJvdWdoIHRoZSBtYnVmcyBhbmQgZnJl
ZSB0aG9zZSB0aGF0IGhhdmUgYmVlbiB0cmFuc21pdHRlZCAqLw0KICAgIHdo
aWxlKGkgIT0gY2hpcGlkeCkgew0KCQlzdHJ1Y3QgYmZlX2RhdGEgKnIgPSAm
c2MtPmJmZV90eF9yaW5nW2ldOw0KCQlpZihyLT5iZmVfbWJ1ZiAhPSBOVUxM
KSB7DQoJCQlpZnAtPmlmX29wYWNrZXRzKys7DQoJCQltX2ZyZWVtKHItPmJm
ZV9tYnVmKTsNCgkJCXItPmJmZV9tYnVmID0gTlVMTDsNCgkJCWJ1c19kbWFt
YXBfdW5sb2FkKHNjLT5iZmVfdGFnLCByLT5iZmVfbWFwKTsNCgkJfQ0KICAg
ICAgICBzYy0+YmZlX3R4X2NudC0tOw0KICAgICAgICBCRkVfSU5DKGksIEJG
RV9UWF9MSVNUX0NOVCk7DQoJfQ0KDQoJaWYoaSAhPSBzYy0+YmZlX3R4X2Nv
bnMpIHsNCgkJLyogd2UgZnJlZWQgdXAgc29tZSBtYnVmcyAqLw0KCQlzYy0+
YmZlX3R4X2NvbnMgPSBpOw0KCQlpZnAtPmlmX2ZsYWdzICY9IH5JRkZfT0FD
VElWRTsNCgl9DQoJaWYoc2MtPmJmZV90eF9jbnQgPT0gMCkNCgkJaWZwLT5p
Zl90aW1lciA9IDA7DQoJZWxzZQ0KCQlpZnAtPmlmX3RpbWVyID0gNTsNCg0K
CUJGRV9VTkxPQ0soc2MpOw0KfQ0KDQovKiBQYXNzIGEgcmVjZWl2ZWQgcGFj
a2V0IHVwIHRoZSBzdGFjayAqLw0Kc3RhdGljIHZvaWQNCmJmZV9yeGVvZihz
dHJ1Y3QgYmZlX3NvZnRjICpzYykNCnsNCglzdHJ1Y3QgbWJ1ZiAqbTsNCglz
dHJ1Y3QgaWZuZXQgKmlmcDsNCglzdHJ1Y3QgYmZlX3J4aGVhZGVyICpyeGhl
YWRlcjsNCglzdHJ1Y3QgYmZlX2RhdGEgKnI7DQoJaW50IGNvbnM7DQoJdV9p
bnQzMl90IHN0YXR1cywgY3VycmVudCwgbGVuLCBmbGFnczsNCg0KCUJGRV9M
T0NLKHNjKTsNCgljb25zID0gc2MtPmJmZV9yeF9jb25zOw0KCXN0YXR1cyA9
IENTUl9SRUFEXzQoc2MsIEJGRV9ETUFSWF9TVEFUKTsNCgljdXJyZW50ID0g
KHN0YXR1cyAmIEJGRV9TVEFUX0NETUFTSykgLyBzaXplb2Yoc3RydWN0IGJm
ZV9kZXNjKTsNCg0KCWlmcCA9ICZzYy0+YXJwY29tLmFjX2lmOw0KDQoJd2hp
bGUoY3VycmVudCAhPSBjb25zKSB7DQoJCXIgPSAmc2MtPmJmZV9yeF9yaW5n
W2NvbnNdOw0KCQltID0gci0+YmZlX21idWY7DQoJCXJ4aGVhZGVyID0gbXRv
ZChtLCBzdHJ1Y3QgYmZlX3J4aGVhZGVyKik7DQoJCWJ1c19kbWFtYXBfc3lu
YyhzYy0+YmZlX3RhZywgci0+YmZlX21hcCwgQlVTX0RNQVNZTkNfUE9TVFdS
SVRFKTsNCgkJbGVuID0gcnhoZWFkZXItPmxlbjsNCgkJci0+YmZlX21idWYg
PSBOVUxMOw0KDQoJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5iZmVfdGFnLCBy
LT5iZmVfbWFwKTsNCgkJZmxhZ3MgPSByeGhlYWRlci0+ZmxhZ3M7DQoNCgkJ
bGVuIC09IEVUSEVSX0NSQ19MRU47DQoNCgkJLyogZmxhZyBhbiBlcnJvciBh
bmQgdHJ5IGFnYWluICovDQoJCWlmICgobGVuID4gRVRIRVJfTUFYX0xFTisz
MikgfHwgKGZsYWdzICYgQkZFX1JYX0ZMQUdfRVJST1JTKSkgew0KCQkJaWZw
LT5pZl9pZXJyb3JzKys7DQoJCQlpZiAoZmxhZ3MgJiBCRkVfUlhfRkxBR19T
RVJSKQ0KCQkJCWlmcC0+aWZfY29sbGlzaW9ucysrOw0KCQkJYmZlX2xpc3Rf
bmV3YnVmKHNjLCBjb25zLCBtKTsNCgkJCWNvbnRpbnVlOw0KCQl9DQoNCgkJ
LyogR28gcGFzdCB0aGUgcnggaGVhZGVyICovDQoJCWlmIChiZmVfbGlzdF9u
ZXdidWYoc2MsIGNvbnMsIE5VTEwpID09IDApIHsNCgkJCW1fYWRqKG0sIEJG
RV9SWF9PRkZTRVQpOw0KCQkJbS0+bV9sZW4gPSBtLT5tX3BrdGhkci5sZW4g
PSBsZW47DQoJCX0gZWxzZSB7DQoJCQliZmVfbGlzdF9uZXdidWYoc2MsIGNv
bnMsIG0pOw0KCQkJaWZwLT5pZl9pZXJyb3JzKys7DQoJCQljb250aW51ZTsN
CgkJfQ0KDQoJCWlmcC0+aWZfaXBhY2tldHMrKzsNCgkJbS0+bV9wa3RoZHIu
cmN2aWYgPSBpZnA7DQoJCUJGRV9VTkxPQ0soc2MpOw0KCQkoKmlmcC0+aWZf
aW5wdXQpKGlmcCwgbSk7DQoJCUJGRV9MT0NLKHNjKTsNCg0KICAgICAgICBC
RkVfSU5DKGNvbnMsIEJGRV9SWF9MSVNUX0NOVCk7DQoJfQ0KCXNjLT5iZmVf
cnhfY29ucyA9IGNvbnM7DQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRp
YyB2b2lkDQpiZmVfaW50cih2b2lkICp4c2MpDQp7DQoJc3RydWN0IGJmZV9z
b2Z0YyAqc2MgPSB4c2M7DQoJc3RydWN0IGlmbmV0ICppZnA7DQoJdV9pbnQz
Ml90IGlzdGF0LCBpbWFzaywgZmxhZzsNCg0KCWlmcCA9ICZzYy0+YXJwY29t
LmFjX2lmOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJaXN0YXQgPSBDU1JfUkVB
RF80KHNjLCBCRkVfSVNUQVQpOw0KCWltYXNrID0gQ1NSX1JFQURfNChzYywg
QkZFX0lNQVNLKTsNCg0KCS8qIA0KCSAqIERlZmVyIHVuc29saWNpdGVkIGlu
dGVycnVwdHMgLSBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNldHRpbmcg
dGhlDQoJICogY2hpcHMgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgdG8gMCBk
b2Vzbid0IGFjdHVhbGx5IHN0b3AgdGhlDQoJICogaW50ZXJydXB0cw0KCSAq
Lw0KCWlzdGF0ICY9IGltYXNrOw0KCUNTUl9XUklURV80KHNjLCBCRkVfSVNU
QVQsIGlzdGF0KTsNCglDU1JfUkVBRF80KHNjLCBCRkVfSVNUQVQpOw0KDQoJ
Lyogbm90IGV4cGVjdGluZyB0aGlzIGludGVycnVwdCwgZGlzcmVnYXJkIGl0
ICovDQoJaWYoaXN0YXQgPT0gMCkgew0KCQlCRkVfVU5MT0NLKHNjKTsNCgkJ
cmV0dXJuOw0KCX0NCg0KCWlmKGlzdGF0ICYgQkZFX0lTVEFUX0VSUk9SUykg
ew0KCQlmbGFnID0gQ1NSX1JFQURfNChzYywgQkZFX0RNQVRYX1NUQVQpOw0K
CQlpZihmbGFnICYgQkZFX1NUQVRfRU1BU0spDQoJCQlpZnAtPmlmX29lcnJv
cnMrKzsNCg0KCQlmbGFnID0gQ1NSX1JFQURfNChzYywgQkZFX0RNQVJYX1NU
QVQpOw0KCQlpZihmbGFnICYgQkZFX1JYX0ZMQUdfRVJST1JTKQ0KCQkJaWZw
LT5pZl9pZXJyb3JzKys7DQoNCgkJaWZwLT5pZl9mbGFncyAmPSB+SUZGX1JV
Tk5JTkc7DQoJCWJmZV9pbml0KHNjKTsNCgl9DQoNCgkvKiBBIHBhY2tldCB3
YXMgcmVjZWl2ZWQgKi8NCglpZihpc3RhdCAmIEJGRV9JU1RBVF9SWCkNCgkJ
YmZlX3J4ZW9mKHNjKTsNCg0KCS8qIEEgcGFja2V0IHdhcyBzZW50ICovDQoJ
aWYoaXN0YXQgJiBCRkVfSVNUQVRfVFgpDQoJCWJmZV90eGVvZihzYyk7DQoN
CgkvKiBXZSBoYXZlIHBhY2tldHMgcGVuZGluZywgZmlyZSB0aGVtIG91dCAq
LyANCglpZiAoaWZwLT5pZl9mbGFncyAmIElGRl9SVU5OSU5HICYmIGlmcC0+
aWZfc25kLmlmcV9oZWFkICE9IE5VTEwpDQoJCWJmZV9zdGFydChpZnApOw0K
DQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRpYyBpbnQNCmJmZV9lbmNh
cChzdHJ1Y3QgYmZlX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm1faGVhZCwg
dV9pbnQzMl90ICp0eGlkeCkNCnsNCglzdHJ1Y3QgYmZlX2Rlc2MgKmQgPSBO
VUxMOw0KCXN0cnVjdCBiZmVfZGF0YSAqciA9IE5VTEw7DQoJc3RydWN0IG1i
dWYgICAgICptOw0KCXVfaW50MzJfdCAgICAgICBmcmFnLCBjdXIsIGNudCA9
IDA7DQoJaW50IGNoYWlubGVuID0gMDsNCg0KCWlmKEJGRV9UWF9MSVNUX0NO
VCAtIHNjLT5iZmVfdHhfY250IDwgMikNCgkJcmV0dXJuKEVOT0JVRlMpOw0K
DQoJLyoNCgkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGZyYWdzIGluIHRoaXMg
Y2hhaW4gdG8gc2VlIGlmDQoJICogd2UgbmVlZCB0byBtX2RlZnJhZy4gIFNp
bmNlIHRoZSBkZXNjcmlwdG9yIGxpc3QgaXMgc2hhcmVkDQoJICogYnkgYWxs
IHBhY2tldHMsIHdlJ2xsIG1fZGVmcmFnIGxvbmcgY2hhaW5zIHNvIHRoYXQg
dGhleQ0KCSAqIGRvIG5vdCB1c2UgdXAgdGhlIGVudGlyZSBsaXN0LCBldmVu
IGlmIHRoZXkgd291bGQgZml0Lg0KCSAqLw0KCWZvcihtID0gbV9oZWFkOyBt
ICE9IE5VTEw7IG0gPSBtLT5tX25leHQpIA0KCQljaGFpbmxlbisrOw0KDQoN
CglpZiAoKGNoYWlubGVuID4gQkZFX1RYX0xJU1RfQ05UIC8gNCkgfHwgDQoJ
CQkoKEJGRV9UWF9MSVNUX0NOVCAtIChjaGFpbmxlbiArIHNjLT5iZmVfdHhf
Y250KSkgPCAyKSkgew0KCQltID0gbV9kZWZyYWcobV9oZWFkLCBNX0RPTlRX
QUlUKTsNCgkJaWYgKG0gPT0gTlVMTCkgDQoJCQlyZXR1cm4oRU5PQlVGUyk7
DQoJCW1faGVhZCA9IG07DQoJfQ0KDQoJLyoNCgkgKiBTdGFydCBwYWNraW5n
IHRoZSBtYnVmcyBpbiB0aGlzIGNoYWluIGludG8NCgkgKiB0aGUgZnJhZ21l
bnQgcG9pbnRlcnMuIFN0b3Agd2hlbiB3ZSBydW4gb3V0DQoJICogb2YgZnJh
Z21lbnRzIG9yIGhpdCB0aGUgZW5kIG9mIHRoZSBtYnVmIGNoYWluLg0KCSAq
Lw0KCW0gPSBtX2hlYWQ7DQoJY3VyID0gZnJhZyA9ICp0eGlkeDsNCgljbnQg
PSAwOw0KDQoJZm9yKG0gPSBtX2hlYWQ7IG0gIT0gTlVMTDsgbSA9IG0tPm1f
bmV4dCkgew0KCQlpZihtLT5tX2xlbiAhPSAwKSB7DQoJCQlpZigoQkZFX1RY
X0xJU1RfQ05UIC0gKHNjLT5iZmVfdHhfY250ICsgY250KSkgPCAyKQ0KCQkJ
CXJldHVybihFTk9CVUZTKTsNCg0KCQkJZCA9ICZzYy0+YmZlX3R4X2xpc3Rb
Y3VyXTsNCgkJCXIgPSAmc2MtPmJmZV90eF9yaW5nW2N1cl07DQoJCQlkLT5i
ZmVfY3RybCA9IEJGRV9ERVNDX0xFTiAmIG0tPm1fbGVuOw0KCQkJLyogYWx3
YXlzIGludHRlcnVwdCBvbiBjb21wbGV0aW9uICovDQoJCQlkLT5iZmVfY3Ry
bCB8PSBCRkVfREVTQ19JT0M7DQoJCQlpZihjbnQgPT0gMCkNCgkJCQkvKiBT
ZXQgc3RhcnQgb2YgZnJhbWUgKi8NCgkJCQlkLT5iZmVfY3RybCB8PSBCRkVf
REVTQ19TT0Y7DQoJCQlpZihjdXIgPT0gQkZFX1RYX0xJU1RfQ05UIC0gMSkN
CgkJCQkvKiBUZWxsIHRoZSBjaGlwIHRvIHdyYXAgdG8gdGhlIHN0YXJ0IG9m
IHRoZSBkZXNjcmlwdG9yIGxpc3QgKi8NCgkJCQlkLT5iZmVfY3RybCB8PSBC
RkVfREVTQ19FT1Q7DQoNCgkJCWJ1c19kbWFtYXBfbG9hZChzYy0+YmZlX3Rh
Zywgci0+YmZlX21hcCwgbXRvZChtLCB2b2lkKiksIG0tPm1fbGVuLCANCgkJ
CQkJYmZlX2RtYV9tYXBfZGVzYywgZCwgMCk7DQoJCQlidXNfZG1hbWFwX3N5
bmMoc2MtPmJmZV90YWcsIHItPmJmZV9tYXAsIEJVU19ETUFTWU5DX1BSRVJF
QUQpOw0KDQoJCQlmcmFnID0gY3VyOw0KICAgICAgICAgICAgQkZFX0lOQyhj
dXIsIEJGRV9UWF9MSVNUX0NOVCk7DQoJCQljbnQrKzsNCgkJfQ0KCX0NCg0K
CWlmIChtICE9IE5VTEwpDQoJCXJldHVybihFTk9CVUZTKTsNCg0KCXNjLT5i
ZmVfdHhfbGlzdFtmcmFnXS5iZmVfY3RybCB8PSBCRkVfREVTQ19FT0Y7DQoJ
c2MtPmJmZV90eF9yaW5nW2ZyYWddLmJmZV9tYnVmID0gbV9oZWFkOw0KCWJ1
c19kbWFtYXBfc3luYyhzYy0+YmZlX3R4X3RhZywgc2MtPmJmZV90eF9tYXAs
IEJVU19ETUFTWU5DX1BSRVJFQUQpOw0KDQoJKnR4aWR4ID0gY3VyOw0KCXNj
LT5iZmVfdHhfY250ICs9IGNudDsNCglyZXR1cm4gKDApOw0KfQ0KDQovKg0K
ICogU2V0IHVwIHRvIHRyYW5zbWl0IGEgcGFja2V0DQogKi8NCnN0YXRpYyB2
b2lkDQpiZmVfc3RhcnQoc3RydWN0IGlmbmV0ICppZnApDQp7DQoJc3RydWN0
IGJmZV9zb2Z0YyAqc2M7DQoJc3RydWN0IG1idWYgKm1faGVhZCA9IE5VTEw7
DQoJaW50IGlkeDsNCg0KCXNjID0gaWZwLT5pZl9zb2Z0YzsNCglpZHggPSBz
Yy0+YmZlX3R4X3Byb2Q7DQoNCglCRkVfTE9DSyhzYyk7DQoNCgkvKiANCgkg
KiBub3QgbXVjaCBwb2ludCB0cnlpbmcgdG8gc2VuZCBpZiB0aGUgbGluayBp
cyBkb3duIG9yIHdlIGhhdmUgbm90aGluZyB0bw0KCSAqIHNlbmQNCgkgKi8N
CglpZiAoIXNjLT5iZmVfbGluayAmJiBpZnAtPmlmX3NuZC5pZnFfbGVuIDwg
MTApIHsNCgkJQkZFX1VOTE9DSyhzYyk7DQoJCXJldHVybjsNCgl9DQoNCglp
ZiAoaWZwLT5pZl9mbGFncyAmIElGRl9PQUNUSVZFKSB7DQoJCUJGRV9VTkxP
Q0soc2MpOw0KCQlyZXR1cm47DQoJfQ0KDQoJd2hpbGUoc2MtPmJmZV90eF9y
aW5nW2lkeF0uYmZlX21idWYgPT0gTlVMTCkgew0KCQlJRl9ERVFVRVVFKCZp
ZnAtPmlmX3NuZCwgbV9oZWFkKTsNCgkJaWYobV9oZWFkID09IE5VTEwpDQoJ
CQlicmVhazsNCg0KCQkvKiANCgkJICogUGFjayB0aGUgZGF0YSBpbnRvIHRo
ZSB0eCByaW5nLiAgSWYgd2UgZG9udCBoYXZlIGVub3VnaCByb29tLCBsZXQN
CgkJICogdGhlIGNoaXAgZHJhaW4gdGhlIHJpbmcNCgkJICovDQoJCWlmKGJm
ZV9lbmNhcChzYywgbV9oZWFkLCAmaWR4KSkgew0KCQkJSUZfUFJFUEVORCgm
aWZwLT5pZl9zbmQsIG1faGVhZCk7DQoJCQlpZnAtPmlmX2ZsYWdzIHw9IElG
Rl9PQUNUSVZFOw0KCQkJYnJlYWs7DQoJCX0NCg0KCQkvKg0KCQkgKiBJZiB0
aGVyZSdzIGEgQlBGIGxpc3RlbmVyLCBib3VuY2UgYSBjb3B5IG9mIHRoaXMg
ZnJhbWUNCgkJICogdG8gaGltLg0KCQkgKi8NCgkJQlBGX01UQVAoaWZwLCBt
X2hlYWQpOw0KCX0NCg0KCXNjLT5iZmVfdHhfcHJvZCA9IGlkeDsNCgkvKiBU
cmFuc21pdCAtIHR3aWNlIGR1ZSB0byBhcHBhcmVudCBoYXJkd2FyZSBidWcg
Ki8NCglDU1JfV1JJVEVfNChzYywgQkZFX0RNQVRYX1BUUiwgaWR4ICogc2l6
ZW9mKHN0cnVjdCBiZmVfZGVzYykpOw0KCUNTUl9XUklURV80KHNjLCBCRkVf
RE1BVFhfUFRSLCBpZHggKiBzaXplb2Yoc3RydWN0IGJmZV9kZXNjKSk7DQoN
CgkvKg0KCSAqIFNldCBhIHRpbWVvdXQgaW4gY2FzZSB0aGUgY2hpcCBnb2Vz
IG91dCB0byBsdW5jaC4NCgkgKi8NCglpZnAtPmlmX3RpbWVyID0gNTsNCglC
RkVfVU5MT0NLKHNjKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmJmZV9pbml0KHZv
aWQgKnhzYykNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYyA9IChzdHJ1Y3Qg
YmZlX3NvZnRjKil4c2M7DQoJc3RydWN0IGlmbmV0ICppZnAgPSAmc2MtPmFy
cGNvbS5hY19pZjsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCWlmIChpZnAtPmlm
X2ZsYWdzICYgSUZGX1JVTk5JTkcpIHsNCgkJQkZFX1VOTE9DSyhzYyk7DQoJ
CXJldHVybjsNCgl9DQoNCgliZmVfc3RvcChzYyk7DQoJYmZlX2NoaXBfcmVz
ZXQoc2MpOw0KDQoJaWYgKGJmZV9saXN0X3J4X2luaXQoc2MpID09IEVOT0JV
RlMpIHsNCgkJcHJpbnRmKCJiZmUlZDogYmZlX2luaXQgZmFpbGVkLiBOb3Qg
ZW5vdWdoIG1lbW9yeSBmb3IgbGlzdCBidWZmZXJzXG4iLA0KCQkJCXNjLT5i
ZmVfdW5pdCk7DQoJCWJmZV9zdG9wKHNjKTsNCgkJcmV0dXJuOw0KCX0NCg0K
CWJmZV9zZXRfcnhfbW9kZShzYyk7DQoNCgkvKiBFbmFibGUgdGhlIGNoaXAg
YW5kIGNvcmUgKi8NCglCRkVfT1Ioc2MsIEJGRV9FTkVUX0NUUkwsIEJGRV9F
TkVUX0VOQUJMRSk7DQoJLyogRW5hYmxlIGludGVycnVwdHMgKi8NCglDU1Jf
V1JJVEVfNChzYywgQkZFX0lNQVNLLCBCRkVfSU1BU0tfREVGKTsNCg0KCWJm
ZV9pZm1lZGlhX3VwZChpZnApOw0KCWlmcC0+aWZfZmxhZ3MgfD0gSUZGX1JV
Tk5JTkc7DQoJaWZwLT5pZl9mbGFncyAmPSB+SUZGX09BQ1RJVkU7DQoNCglz
Yy0+YmZlX3N0YXRfY2ggPSB0aW1lb3V0KGJmZV90aWNrLCBzYywgaHopOw0K
CUJGRV9VTkxPQ0soc2MpOw0KfQ0KDQovKg0KICogU2V0IG1lZGlhIG9wdGlv
bnMuDQogKi8NCnN0YXRpYyBpbnQNCmJmZV9pZm1lZGlhX3VwZChzdHJ1Y3Qg
aWZuZXQgKmlmcCkNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYzsNCglzdHJ1
Y3QgbWlpX2RhdGEgKm1paTsNCg0KCXNjID0gaWZwLT5pZl9zb2Z0YzsNCg0K
CUJGRV9MT0NLKHNjKTsNCg0KCW1paSA9IGRldmljZV9nZXRfc29mdGMoc2Mt
PmJmZV9taWlidXMpOw0KCXNjLT5iZmVfbGluayA9IDA7DQoJaWYgKG1paS0+
bWlpX2luc3RhbmNlKSB7DQoJCXN0cnVjdCBtaWlfc29mdGMgKm1paXNjOw0K
CQlmb3IgKG1paXNjID0gTElTVF9GSVJTVCgmbWlpLT5taWlfcGh5cyk7IG1p
aXNjICE9IE5VTEw7DQoJCQkJbWlpc2MgPSBMSVNUX05FWFQobWlpc2MsIG1p
aV9saXN0KSkNCgkJCW1paV9waHlfcmVzZXQobWlpc2MpOw0KCX0NCgltaWlf
bWVkaWFjaGcobWlpKTsNCg0KCUJGRV9VTkxPQ0soc2MpOw0KCXJldHVybigw
KTsNCn0NCg0KLyoNCiAqIFJlcG9ydCBjdXJyZW50IG1lZGlhIHN0YXR1cy4N
CiAqLw0Kc3RhdGljIHZvaWQNCmJmZV9pZm1lZGlhX3N0cyhzdHJ1Y3QgaWZu
ZXQgKmlmcCwgc3RydWN0IGlmbWVkaWFyZXEgKmlmbXIpDQp7DQoJc3RydWN0
IGJmZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOw0KCXN0cnVjdCBtaWlf
ZGF0YSAqbWlpOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJbWlpID0gZGV2aWNl
X2dldF9zb2Z0YyhzYy0+YmZlX21paWJ1cyk7DQoJbWlpX3BvbGxzdGF0KG1p
aSk7DQoJaWZtci0+aWZtX2FjdGl2ZSA9IG1paS0+bWlpX21lZGlhX2FjdGl2
ZTsNCglpZm1yLT5pZm1fc3RhdHVzID0gbWlpLT5taWlfbWVkaWFfc3RhdHVz
Ow0KDQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRpYyBpbnQNCmJmZV9p
b2N0bChzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9sb25nIGNvbW1hbmQsIGNhZGRy
X3QgZGF0YSkNCnsNCglzdHJ1Y3QgYmZlX3NvZnRjICpzYyA9IGlmcC0+aWZf
c29mdGM7DQoJc3RydWN0IGlmcmVxICppZnIgPSAoc3RydWN0IGlmcmVxICop
IGRhdGE7DQoJc3RydWN0IG1paV9kYXRhICptaWk7DQoJaW50IGVycm9yID0g
MDsNCg0KCUJGRV9MT0NLKHNjKTsNCg0KCXN3aXRjaChjb21tYW5kKSB7DQoJ
CWNhc2UgU0lPQ1NJRkZMQUdTOg0KCQkJaWYoaWZwLT5pZl9mbGFncyAmIElG
Rl9VUCkNCgkJCQlpZihpZnAtPmlmX2ZsYWdzICYgSUZGX1JVTk5JTkcpDQoJ
CQkJCWJmZV9zZXRfcnhfbW9kZShzYyk7DQoJCQkJZWxzZQ0KCQkJCQliZmVf
aW5pdChzYyk7DQoJCQllbHNlIGlmKGlmcC0+aWZfZmxhZ3MgJiBJRkZfUlVO
TklORykNCgkJCQliZmVfc3RvcChzYyk7DQoJCQlicmVhazsNCgkJY2FzZSBT
SU9DQURETVVMVEk6DQoJCWNhc2UgU0lPQ0RFTE1VTFRJOg0KCQkJaWYoaWZw
LT5pZl9mbGFncyAmIElGRl9SVU5OSU5HKQ0KCQkJCWJmZV9zZXRfcnhfbW9k
ZShzYyk7DQoJCQlicmVhazsNCgkJY2FzZSBTSU9DR0lGTUVESUE6DQoJCWNh
c2UgU0lPQ1NJRk1FRElBOg0KCQkJbWlpID0gZGV2aWNlX2dldF9zb2Z0Yyhz
Yy0+YmZlX21paWJ1cyk7DQoJCQllcnJvciA9IGlmbWVkaWFfaW9jdGwoaWZw
LCBpZnIsICZtaWktPm1paV9tZWRpYSwgY29tbWFuZCk7DQoJCQlicmVhazsN
CgkJZGVmYXVsdDoNCgkJCWVycm9yID0gZXRoZXJfaW9jdGwoaWZwLCBjb21t
YW5kLCBkYXRhKTsgDQoJCQlicmVhazsNCgl9DQoNCglCRkVfVU5MT0NLKHNj
KTsNCglyZXR1cm4gZXJyb3I7DQp9DQoNCnN0YXRpYyB2b2lkDQpiZmVfd2F0
Y2hkb2coc3RydWN0IGlmbmV0ICppZnApDQp7DQoJc3RydWN0IGJmZV9zb2Z0
YyAqc2M7DQoNCglzYyA9IGlmcC0+aWZfc29mdGM7DQoNCglCRkVfTE9DSyhz
Yyk7DQoNCglwcmludGYoImJmZSVkOiB3YXRjaGRvZyB0aW1lb3V0IC0tIHJl
c2V0dGluZ1xuIiwgc2MtPmJmZV91bml0KTsNCg0KCWlmcC0+aWZfZmxhZ3Mg
Jj0gfklGRl9SVU5OSU5HOw0KCWJmZV9pbml0KHNjKTsNCg0KCWlmcC0+aWZf
b2Vycm9ycysrOw0KDQoJQkZFX1VOTE9DSyhzYyk7DQp9DQoNCnN0YXRpYyB2
b2lkDQpiZmVfdGljayh2b2lkICp4c2MpDQp7DQoJc3RydWN0IGJmZV9zb2Z0
YyAqc2MgPSB4c2M7DQoJc3RydWN0IG1paV9kYXRhICptaWk7DQoNCglpZiAo
c2MgPT0gTlVMTCkNCgkJcmV0dXJuOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJ
bWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+YmZlX21paWJ1cyk7DQoNCgli
ZmVfc3RhdHNfdXBkYXRlKHNjKTsNCglzYy0+YmZlX3N0YXRfY2ggPSB0aW1l
b3V0KGJmZV90aWNrLCBzYywgaHopOw0KDQoJaWYoc2MtPmJmZV9saW5rKSB7
DQoJCUJGRV9VTkxPQ0soc2MpOw0KCQlyZXR1cm47DQoJfQ0KDQoJbWlpX3Rp
Y2sobWlpKTsNCglpZiAoIXNjLT5iZmVfbGluayAmJiBtaWktPm1paV9tZWRp
YV9zdGF0dXMgJiBJRk1fQUNUSVZFICYmDQoJCQlJRk1fU1VCVFlQRShtaWkt
Pm1paV9tZWRpYV9hY3RpdmUpICE9IElGTV9OT05FKSANCgkJc2MtPmJmZV9s
aW5rKys7DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0NCg0KLyoNCiAqIFN0b3Ag
dGhlIGFkYXB0ZXIgYW5kIGZyZWUgYW55IG1idWZzIGFsbG9jYXRlZCB0byB0
aGUNCiAqIFJYIGFuZCBUWCBsaXN0cy4NCiAqLw0Kc3RhdGljIHZvaWQNCmJm
ZV9zdG9wKHN0cnVjdCBiZmVfc29mdGMgKnNjKQ0Kew0KCXN0cnVjdCBpZm5l
dCAqaWZwOw0KDQoJQkZFX0xPQ0soc2MpOw0KDQoJdW50aW1lb3V0KGJmZV90
aWNrLCBzYywgc2MtPmJmZV9zdGF0X2NoKTsNCg0KCWlmcCA9ICZzYy0+YXJw
Y29tLmFjX2lmOw0KDQoJYmZlX2NoaXBfaGFsdChzYyk7DQogICAgYmZlX3R4
X3JpbmdfZnJlZShzYyk7DQoJYmZlX3J4X3JpbmdfZnJlZShzYyk7DQoNCglp
ZnAtPmlmX2ZsYWdzICY9IH4oSUZGX1JVTk5JTkcgfCBJRkZfT0FDVElWRSk7
DQoNCglCRkVfVU5MT0NLKHNjKTsNCn0NCg==
---559023410-851401618-1084200166=:27340--
More information about the freebsd-i386
mailing list