Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Sep 2011 12:00:38 +0200
From:      Monthadar Al Jaberi <monthadar@gmail.com>
To:        freebsd-wireless@freebsd.org
Subject:   FreeBSD net80211s HWMP code
Message-ID:  <CA%2BsBSoJwkVMTAbybPbHFdz6CHbjDzF5PRgxpXoWHVESpAfEQKg@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--90e6ba6e82fab75f8804ad0c103b
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I am attaching my first update of the IEEE80211s HWMP code based on Draft 8.0.

It is not complete, some stuff works better, others are broken and
there are more things to todo.

So I would like it if some are interesting in testing the code.

Broken:
For now only use ondemand routing and not proactive (HWMPROOTMODE=disabled).

Works better:
PERR frames: if an MP is removed PERR frames will make sure that all
neighbour mesh nodes tables will be updated correctly.
PREQ/PREP: had some errors in code and did not follow standard correct.

Things todo:
External address support (called Proxy in freebsd code, will change it
to reflect standard naming)
Lifetime of paths don't decrement (but because we have better PERR
frames its not a big problem for now)
And much more!!

Attaching a diff of the code.

In the hope it will be useful for someone.
br,
-- 
//Monthadar Al Jaberi

--90e6ba6e82fab75f8804ad0c103b
Content-Type: text/x-patch; charset=US-ASCII; name="hwmp.diff"
Content-Disposition: attachment; filename="hwmp.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gsmzq8zw0

ZGlmZiAtLWdpdCBhL3N5cy9uZXQvaWZfZXRoZXJzdWJyLmMgYi9zeXMvbmV0L2lmX2V0aGVyc3Vi
ci5jCmluZGV4IDFkMTZhZTYuLmU3M2RiNDAgMTAwNjQ0Ci0tLSBhL3N5cy9uZXQvaWZfZXRoZXJz
dWJyLmMKKysrIGIvc3lzL25ldC9pZl9ldGhlcnN1YnIuYwpAQCAtOTY4LDkgKzk2OCwxMyBAQCBk
aXNjYXJkOgogY2hhciAqCiBldGhlcl9zcHJpbnRmKGNvbnN0IHVfY2hhciAqYXApCiB7Ci0Jc3Rh
dGljIGNoYXIgZXRoZXJidWZbMThdOwotCXNucHJpbnRmKGV0aGVyYnVmLCBzaXplb2YgKGV0aGVy
YnVmKSwgIiU2RCIsIGFwLCAiOiIpOwotCXJldHVybiAoZXRoZXJidWYpOworCXN0YXRpYyBjaGFy
IGV0aGVyYnVmWzZdWzE4XTsKKwlzdGF0aWMgaW50IGkgPSAwOworCWNoYXIgKmJ1ZjsKKwlzbnBy
aW50ZihldGhlcmJ1ZltpXSwgc2l6ZW9mIChldGhlcmJ1ZlswXSksICIlNkQiLCBhcCwgIjoiKTsK
KwlidWYgPSBldGhlcmJ1ZltpXTsKKwlpID0gKGkrMSklNjsKKwlyZXR1cm4gKGJ1Zik7CiB9CiAK
IC8qCmRpZmYgLS1naXQgYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX2h3bXAuYyBiL3N5cy9uZXQ4
MDIxMS9pZWVlODAyMTFfaHdtcC5jCmluZGV4IDc4NzI5ZmMuLjg5ODdmZjcgMTAwNjQ0Ci0tLSBh
L3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaHdtcC5jCisrKyBiL3N5cy9uZXQ4MDIxMS9pZWVlODAy
MTFfaHdtcC5jCkBAIC0xLDYgKzEsNyBAQAogLyotIAogICogQ29weXJpZ2h0IChjKSAyMDA5IFRo
ZSBGcmVlQlNEIEZvdW5kYXRpb24gCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKyAqIENvcHly
aWdodCAoYykgMjAxMSBNb250aGFkYXIgQWwgSmFiZXJpLCBUZXJyYU5ldCBBQi4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBS
dWkgUGF1bG8gdW5kZXIgc3BvbnNvcnNoaXAgZnJvbSB0aGUKICAqIEZyZWVCU0QgRm91bmRhdGlv
bi4gCkBAIC0xMTksNiArMTIwLDEwIEBAIHN0YXRpYyB2b2lkCWh3bXBfcGVlcmRvd24oc3RydWN0
IGllZWU4MDIxMV9ub2RlICopOwogc3RhdGljIHN0cnVjdCB0aW1ldmFsIGllZWU4MDIxMV9od21w
X3ByZXFtaW5pbnQgPSB7IDAsIDEwMDAwMCB9Owogc3RhdGljIHN0cnVjdCB0aW1ldmFsIGllZWU4
MDIxMV9od21wX3BlcnJtaW5pbnQgPSB7IDAsIDEwMDAwMCB9OwogCitNQUxMT0NfREVGSU5FKE1f
ODAyMTFfSFdNUF9QUkVRLCAiODAyMTFwcmVxIiwgIjgwMi4xMSBIV01QIFBhdGggUmVxdWVzdCBm
cmFtZSIpOworTUFMTE9DX0RFRklORShNXzgwMjExX0hXTVBfUFJFUCwgIjgwMjExcHJlcCIsICI4
MDIuMTEgSFdNUCBQYXRoIFJlcGx5IGZyYW1lIik7CitNQUxMT0NfREVGSU5FKE1fODAyMTFfSFdN
UF9QRVJSLCAiODAyMTFwZXJyIiwgIjgwMi4xMSBIV01QIFBhdGggRXJyb3IgZnJhbWUiKTsKKwog
LyogdW5hbGxpZ25lZCBsaXR0bGUgZW5kaWFuIGFjY2VzcyAqLwogI2RlZmluZSBMRV9XUklURV8y
KHAsIHYpIGRvIHsJCQkJXAogCSgodWludDhfdCAqKShwKSlbMF0gPSAodikgJiAweGZmOwkJXApA
QCAtMTM5LDkgKzE0NCwxNyBAQCBzdGF0aWMgY29uc3QgdWludDhfdAlicm9hZGNhc3RhZGRyW0lF
RUU4MDIxMV9BRERSX0xFTl0gPQogdHlwZWRlZiB1aW50MzJfdCBpZWVlODAyMTFfaHdtcF9zZXE7
CiAjZGVmaW5lCUhXTVBfU0VRX0xUKGEsIGIpCSgoaW50MzJfdCkoKGEpLShiKSkgPCAwKQogI2Rl
ZmluZQlIV01QX1NFUV9MRVEoYSwgYikJKChpbnQzMl90KSgoYSktKGIpKSA8PSAwKQorI2RlZmlu
ZQlIV01QX1NFUV9FUShhLCBiKQkoKGludDMyX3QpKChhKS0oYikpID09IDApCiAjZGVmaW5lCUhX
TVBfU0VRX0dUKGEsIGIpCSgoaW50MzJfdCkoKGEpLShiKSkgPiAwKQogI2RlZmluZQlIV01QX1NF
UV9HRVEoYSwgYikJKChpbnQzMl90KSgoYSktKGIpKSA+PSAwKQogCisvKiBUaGUgbG9uZ2VyIG9u
ZSBvZiB0aGUgbGlmZXRpbWUgc2hvdWxkIGJlIHN0b3JlZCBhcyBuZXcgbGlmZXRpbWUgKi8KKyNk
ZWZpbmUgTUVTSF9ST1VURV9MSUZFVElNRV9NQVgoYSwgYikJKGEgPiBiID8gYSA6IGIpCisKKyNk
ZWZpbmUJTUVTSF9SVF9MT0NLKG1zKQltdHhfbG9jaygmKG1zKS0+bXNfcnRfbG9jaykKKyNkZWZp
bmUJTUVTSF9SVF9MT0NLX0FTU0VSVChtcykJbXR4X2Fzc2VydCgmKG1zKS0+bXNfcnRfbG9jaywg
TUFfT1dORUQpCisjZGVmaW5lCU1FU0hfUlRfVU5MT0NLKG1zKQltdHhfdW5sb2NrKCYobXMpLT5t
c19ydF9sb2NrKQorCiAvKgogICogUHJpdmF0ZSBleHRlbnNpb24gb2YgaWVlZTgwMjExX21lc2hf
cm91dGUuCiAgKi8KQEAgLTE4Nyw2ICsyMDAsNyBAQCBTWVNDVExfUFJPQyhfbmV0X3dsYW5faHdt
cCwgT0lEX0FVVE8sIHJhbm5pbnQsIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywKICAgICAicm9v
dCBhbm5vdW5jZW1lbnQgaW50ZXJ2YWwgKG1zKSIpOwogCiAjZGVmaW5lCUlFRUU4MDIxMV9IV01Q
X0RFRkFVTFRfTUFYSE9QUwkzMQorI2RlZmluZQlJRUVFODAyMTFfSFdNUF9QRVJSX01BWERFU1QJ
MTAKIAogc3RhdGljCWllZWU4MDIxMV9yZWN2X2FjdGlvbl9mdW5jIGh3bXBfcmVjdl9hY3Rpb25f
bWVzaHBhdGg7CiAKQEAgLTI4MSw5ICsyOTUsOSBAQCBod21wX3JlY3ZfYWN0aW9uX21lc2hwYXRo
KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCiAJY29uc3QgdWludDhfdCAqZnJtLCBjb25zdCB1
aW50OF90ICplZnJtKQogewogCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7
Ci0Jc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcV9pZSBwcmVxOwotCXN0cnVjdCBpZWVlODAyMTFf
bWVzaHByZXBfaWUgcHJlcDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21lc2hwZXJyX2llIHBlcnI7CisJ
c3RydWN0IGllZWU4MDIxMV9tZXNocHJlcV9pZSAqcHJlcTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21l
c2hwcmVwX2llICpwcmVwOworCXN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJfaWUgKnBlcnI7CiAJ
c3RydWN0IGllZWU4MDIxMV9tZXNocmFubl9pZSByYW5uOwogCWNvbnN0IHVpbnQ4X3QgKmllZnJt
ID0gZnJtICsgMjsgLyogYWN0aW9uICsgY29kZSAqLwogCWludCBmb3VuZCA9IDA7CkBAIC0yOTMs
NjYgKzMwNywxMTIgQEAgaHdtcF9yZWN2X2FjdGlvbl9tZXNocGF0aChzdHJ1Y3QgaWVlZTgwMjEx
X25vZGUgKm5pLAogCQlzd2l0Y2ggKCppZWZybSkgewogCQljYXNlIElFRUU4MDIxMV9FTEVNSURf
TUVTSFBSRVE6CiAJCXsKLQkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXFfaWUgKm1w
cmVxID0KLQkJCSAgICAoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcV9pZSAqKSBpZWZy
bTsKLQkJCS8qIFhYWCA+IDEgdGFyZ2V0ICovCi0JCQlpZiAobXByZXEtPnByZXFfbGVuICE9Ci0J
CQkgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXFfaWUpIC0gMikgeworCQkJaW50
IGkgPSAwOworCQkJcHJlcSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNocHJl
cV9pZSkgKworCQkJCQkJKGllZnJtWzI3XS0xKSpzaXplb2YoKnByZXEtPnByZXFfdGFyZ2V0cyks
CisJCQkJCQlNXzgwMjExX0hXTVBfUFJFUSwgTV9OT1dBSVQgfCBNX1pFUk8pOworCQkJS0FTU0VS
VChwcmVxICE9IE5VTEwsICgicHJlcSA9PSBOVUxMIikpOworCQkJCisJCQlwcmVxLT5wcmVxX2ll
ID0gKmllZnJtKys7CisJCQlwcmVxLT5wcmVxX2xlbiA9ICppZWZybSsrOworCQkJcHJlcS0+cHJl
cV9mbGFncyA9ICppZWZybSsrOworCQkJcHJlcS0+cHJlcV9ob3Bjb3VudCA9ICppZWZybSsrOwor
CQkJcHJlcS0+cHJlcV90dGwgPSAqaWVmcm0rKzsKKwkJCXByZXEtPnByZXFfaWQgPSBMRV9SRUFE
XzQoaWVmcm0pOyBpZWZybSArPSA0OworCQkJSUVFRTgwMjExX0FERFJfQ09QWShwcmVxLT5wcmVx
X29yaWdhZGRyLCBpZWZybSk7IGllZnJtICs9IDY7CisJCQlwcmVxLT5wcmVxX29yaWdzZXEgPSBM
RV9SRUFEXzQoaWVmcm0pOyBpZWZybSArPSA0OworCQkJLyogTkI6IG1heSBoYXZlIE9yaWdpbmF0
b3IgUHJveGllZCBBZGRyZXNzICovCisJCQlwcmVxLT5wcmVxX2xpZmV0aW1lID0gTEVfUkVBRF80
KGllZnJtKTsgaWVmcm0gKz0gNDsKKwkJCXByZXEtPnByZXFfbWV0cmljID0gTEVfUkVBRF80KGll
ZnJtKTsgaWVmcm0gKz0gNDsKKwkJCXByZXEtPnByZXFfdGNvdW50ID0gKmllZnJtKys7CisJCQkK
KwkJCWlmIChwcmVxLT5wcmVxX2xlbiAhPSBJRUVFODAyMTFfTUVTSFBSRVFfQkFTRV9TWiArCisJ
CQkJCXByZXEtPnByZXFfdGNvdW50ICogSUVFRTgwMjExX01FU0hQUkVRX1RSR1RfU1opIHsKIAkJ
CQlJRUVFODAyMTFfRElTQ0FSRCh2YXAsCiAJCQkJICAgIElFRUU4MDIxMV9NU0dfQUNUSU9OIHwg
SUVFRTgwMjExX01TR19IV01QLAogCQkJCSAgICB3aCwgTlVMTCwgIiVzIiwgIlBSRVEgd2l0aCB3
cm9uZyBsZW4iKTsKIAkJCQl2YXAtPml2X3N0YXRzLmlzX3J4X21ndGRpc2NhcmQrKzsKKwkJCQlm
cmVlKHByZXEsIE1fODAyMTFfSFdNUF9QUkVRKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCW1lbWNw
eSgmcHJlcSwgbXByZXEsIHNpemVvZihwcmVxKSk7Ci0JCQlwcmVxLnByZXFfaWQgPSBMRV9SRUFE
XzQoJm1wcmVxLT5wcmVxX2lkKTsKLQkJCXByZXEucHJlcV9vcmlnc2VxID0gTEVfUkVBRF80KCZt
cHJlcS0+cHJlcV9vcmlnc2VxKTsKLQkJCXByZXEucHJlcV9saWZldGltZSA9IExFX1JFQURfNCgm
bXByZXEtPnByZXFfbGlmZXRpbWUpOwotCQkJcHJlcS5wcmVxX21ldHJpYyA9IExFX1JFQURfNCgm
bXByZXEtPnByZXFfbWV0cmljKTsKLQkJCXByZXEucHJlcV90YXJnZXRzWzBdLnRhcmdldF9zZXEg
PQotCQkJICAgIExFX1JFQURfNCgmbXByZXEtPnByZXFfdGFyZ2V0c1swXS50YXJnZXRfc2VxKTsK
LQkJCWh3bXBfcmVjdl9wcmVxKHZhcCwgbmksIHdoLCAmcHJlcSk7CisJCQkKKwkJCWZvciAoaSA9
IDA7IGkgPCBwcmVxLT5wcmVxX3Rjb3VudDsgaSsrKSB7CisJCQkJcHJlcS0+cHJlcV90YXJnZXRz
W2ldLnRhcmdldF9mbGFncyA9ICppZWZybSsrOworCQkJCUlFRUU4MDIxMV9BRERSX0NPUFkocHJl
cS0+cHJlcV90YXJnZXRzW2ldLnRhcmdldF9hZGRyLCBpZWZybSk7IGllZnJtICs9IDY7CisJCQkJ
cHJlcS0+cHJlcV90YXJnZXRzW2ldLnRhcmdldF9zZXEgPSBMRV9SRUFEXzQoaWVmcm0pOyBpZWZy
bSArPSA0OworCQkJfQorCisJCQlod21wX3JlY3ZfcHJlcSh2YXAsIG5pLCB3aCwgcHJlcSk7CisJ
CQlmcmVlKHByZXEsIE1fODAyMTFfSFdNUF9QUkVRKTsKIAkJCWZvdW5kKys7CiAJCQlicmVhazsJ
CiAJCX0KIAkJY2FzZSBJRUVFODAyMTFfRUxFTUlEX01FU0hQUkVQOgogCQl7Ci0JCQljb25zdCBz
dHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVwX2llICptcHJlcCA9Ci0JCQkgICAgKGNvbnN0IHN0cnVj
dCBpZWVlODAyMTFfbWVzaHByZXBfaWUgKikgaWVmcm07Ci0JCQlpZiAobXByZXAtPnByZXBfbGVu
ICE9Ci0JCQkgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXBfaWUpIC0gMikgewor
CQkJcHJlcCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcF9pZSksCisJ
CQkJCU1fODAyMTFfSFdNUF9QUkVQLCBNX05PV0FJVCB8IE1fWkVSTyk7CisJCQlLQVNTRVJUKHBy
ZXAgIT0gTlVMTCwgKCJwcmVwID09IE5VTEwiKSk7CisJCQkKKwkJCXByZXAtPnByZXBfaWUgPSAq
aWVmcm0rKzsKKwkJCXByZXAtPnByZXBfbGVuID0gKmllZnJtKys7CisJCQkKKwkJCWlmIChwcmVw
LT5wcmVwX2xlbiAhPSBJRUVFODAyMTFfTUVTSFBSRVBfQkFTRV9TWikgewogCQkJCUlFRUU4MDIx
MV9ESVNDQVJEKHZhcCwKIAkJCQkgICAgSUVFRTgwMjExX01TR19BQ1RJT04gfCBJRUVFODAyMTFf
TVNHX0hXTVAsCiAJCQkJICAgIHdoLCBOVUxMLCAiJXMiLCAiUFJFUCB3aXRoIHdyb25nIGxlbiIp
OwogCQkJCXZhcC0+aXZfc3RhdHMuaXNfcnhfbWd0ZGlzY2FyZCsrOworCQkJCWZyZWUocHJlcCwg
TV84MDIxMV9IV01QX1BSRVApOwogCQkJCWJyZWFrOwogCQkJfQotCQkJbWVtY3B5KCZwcmVwLCBt
cHJlcCwgc2l6ZW9mKHByZXApKTsKLQkJCXByZXAucHJlcF90YXJnZXRzZXEgPSBMRV9SRUFEXzQo
Jm1wcmVwLT5wcmVwX3RhcmdldHNlcSk7Ci0JCQlwcmVwLnByZXBfbGlmZXRpbWUgPSBMRV9SRUFE
XzQoJm1wcmVwLT5wcmVwX2xpZmV0aW1lKTsKLQkJCXByZXAucHJlcF9tZXRyaWMgPSBMRV9SRUFE
XzQoJm1wcmVwLT5wcmVwX21ldHJpYyk7Ci0JCQlwcmVwLnByZXBfb3JpZ3NlcSA9IExFX1JFQURf
NCgmbXByZXAtPnByZXBfb3JpZ3NlcSk7Ci0JCQlod21wX3JlY3ZfcHJlcCh2YXAsIG5pLCB3aCwg
JnByZXApOworCQkJCisJCQlwcmVwLT5wcmVwX2ZsYWdzID0gKmllZnJtKys7CisJCQlwcmVwLT5w
cmVwX2hvcGNvdW50ID0gKmllZnJtKys7CisJCQlwcmVwLT5wcmVwX3R0bCA9ICppZWZybSsrOwor
CQkJSUVFRTgwMjExX0FERFJfQ09QWShwcmVwLT5wcmVwX3RhcmdldGFkZHIsIGllZnJtKTsgaWVm
cm0gKz0gNjsKKwkJCXByZXAtPnByZXBfdGFyZ2V0c2VxID0gTEVfUkVBRF80KGllZnJtKTsgaWVm
cm0gKz0gNDsKKwkJCS8qIE5COiBNYXkgaGF2ZSBUYXJnZXQgUHJveGllZCBBZGRyZXNzICovCisJ
CQlwcmVwLT5wcmVwX2xpZmV0aW1lID0gTEVfUkVBRF80KGllZnJtKTsgaWVmcm0gKz0gNDsKKwkJ
CXByZXAtPnByZXBfbWV0cmljID0gTEVfUkVBRF80KGllZnJtKTsgaWVmcm0gKz0gNDsKKwkJCUlF
RUU4MDIxMV9BRERSX0NPUFkocHJlcC0+cHJlcF9vcmlnYWRkciwgaWVmcm0pOyBpZWZybSArPSA2
OworCQkJcHJlcC0+cHJlcF9vcmlnc2VxID0gTEVfUkVBRF80KGllZnJtKTsgaWVmcm0gKz0gNDsK
KworCQkJaHdtcF9yZWN2X3ByZXAodmFwLCBuaSwgd2gsIHByZXApOworCQkJZnJlZShwcmVwLCBN
XzgwMjExX0hXTVBfUFJFUCk7CiAJCQlmb3VuZCsrOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBJ
RUVFODAyMTFfRUxFTUlEX01FU0hQRVJSOgogCQl7Ci0JCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjEx
X21lc2hwZXJyX2llICptcGVyciA9Ci0JCQkgICAgKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWVz
aHBlcnJfaWUgKikgaWVmcm07Ci0JCQkvKiBYWFggPiAxIHRhcmdldCAqLwotCQkJaWYgKG1wZXJy
LT5wZXJyX2xlbiAhPQotCQkJICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hwZXJyX2ll
KSAtIDIpIHsKKwkJCWludCBpID0gMDsKKwkJCXBlcnIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBp
ZWVlODAyMTFfbWVzaHBlcnJfaWUpICsgCisJCQkJCShpZWZybVszXS0xKSpzaXplb2YoKnBlcnIt
PnBlcnJfZGVzdHMpLAorCQkJCQlNXzgwMjExX0hXTVBfUEVSUiwgTV9OT1dBSVQgfCBNX1pFUk8p
OworCQkJS0FTU0VSVChwZXJyICE9IE5VTEwsICgicGVyciA9PSBOVUxMIikpOworCQkJcGVyci0+
cGVycl9pZSA9ICppZWZybSsrOworCQkJcGVyci0+cGVycl9sZW4gPSAqaWVmcm0rKzsKKwkJCXBl
cnItPnBlcnJfdHRsID0gKmllZnJtKys7CisJCQlwZXJyLT5wZXJyX25kZXN0cyA9ICppZWZybSsr
OworCisJCQlpZiAocGVyci0+cGVycl9sZW4gIT0gKElFRUU4MDIxMV9NRVNIUEVSUl9CQVNFX1Na
ICsKKwkJCQkJCXBlcnItPnBlcnJfbmRlc3RzICogSUVFRTgwMjExX01FU0hQRVJSX0RFU1RfU1op
KSB7CiAJCQkJSUVFRTgwMjExX0RJU0NBUkQodmFwLAogCQkJCSAgICBJRUVFODAyMTFfTVNHX0FD
VElPTiB8IElFRUU4MDIxMV9NU0dfSFdNUCwKLQkJCQkgICAgd2gsIE5VTEwsICIlcyIsICJQRVJS
IHdpdGggd3JvbmcgbGVuIik7CisJCQkJICAgIHdoLCBOVUxMLCAiJXMiLCAiUEVSUiB3aXRoIHdy
b25nIGxlbiwgJXMiLCBwZXJyLT5wZXJyX2xlbik7CiAJCQkJdmFwLT5pdl9zdGF0cy5pc19yeF9t
Z3RkaXNjYXJkKys7CisJCQkJZnJlZShwZXJyLCBNXzgwMjExX0hXTVBfUEVSUik7CiAJCQkJYnJl
YWs7CiAJCQl9Ci0JCQltZW1jcHkoJnBlcnIsIG1wZXJyLCBzaXplb2YocGVycikpOwotCQkJcGVy
ci5wZXJyX2Rlc3RzWzBdLmRlc3Rfc2VxID0KLQkJCSAgICBMRV9SRUFEXzQoJm1wZXJyLT5wZXJy
X2Rlc3RzWzBdLmRlc3Rfc2VxKTsKLQkJCWh3bXBfcmVjdl9wZXJyKHZhcCwgbmksIHdoLCAmcGVy
cik7CisKKwkJCWZvcihpID0gMDsgaTxwZXJyLT5wZXJyX25kZXN0czsgaSsrKSB7CisJCQkJcGVy
ci0+cGVycl9kZXN0c1tpXS5kZXN0X2ZsYWdzID0gKmllZnJtKys7CisJCQkJSUVFRTgwMjExX0FE
RFJfQ09QWShwZXJyLT5wZXJyX2Rlc3RzW2ldLmRlc3RfYWRkciwgaWVmcm0pOyBpZWZybSArPSA2
OworCQkJCXBlcnItPnBlcnJfZGVzdHNbaV0uZGVzdF9zZXEgPSBMRV9SRUFEXzQoaWVmcm0pOyBp
ZWZybSArPSA0OworCQkJCS8qIE5COiBNYXkgaGF2ZSBUYXJnZXQgUHJveGllZCBBZGRyZXNzICov
CisJCQkJcGVyci0+cGVycl9kZXN0c1tpXS5kZXN0X3Jjb2RlID0gTEVfUkVBRF8yKGllZnJtKTsg
aWVmcm0gKz0gMjsKKwkJCX0KKworCQkJaHdtcF9yZWN2X3BlcnIodmFwLCBuaSwgd2gsIHBlcnIp
OworCQkJZnJlZShwZXJyLCBNXzgwMjExX0hXTVBfUEVSUik7CiAJCQlmb3VuZCsrOwogCQkJYnJl
YWs7CiAJCX0KQEAgLTM3Niw3ICs0MzYsNyBAQCBod21wX3JlY3ZfYWN0aW9uX21lc2hwYXRoKHN0
cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCiAJCQlicmVhazsKIAkJfQogCQl9Ci0JCWllZnJtICs9
IGllZnJtWzFdICsgMjsKKy8vIAkJaWVmcm0gKz0gaWVmcm1bMV0gKyAyOwogCX0KIAlpZiAoIWZv
dW5kKSB7CiAJCUlFRUU4MDIxMV9ESVNDQVJEKHZhcCwKQEAgLTQ5Myw5ICs1NTMsOCBAQCBod21w
X2FkZF9tZXNocHJlcSh1aW50OF90ICpmcm0sIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWVzaHBy
ZXFfaWUgKnByZXEpCiB7CiAJaW50IGk7CiAKLQkqZnJtKysgPSBJRUVFODAyMTFfRUxFTUlEX01F
U0hQUkVROwotCSpmcm0rKyA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVxX2llKSAt
IDIgKwotCSAgICAocHJlcS0+cHJlcV90Y291bnQgLSAxKSAqIHNpemVvZigqcHJlcS0+cHJlcV90
YXJnZXRzKTsKKwkqZnJtKysgPSBwcmVxLT5wcmVxX2llOworCSpmcm0rKyA9IHByZXEtPnByZXFf
bGVuOwogCSpmcm0rKyA9IHByZXEtPnByZXFfZmxhZ3M7CiAJKmZybSsrID0gcHJlcS0+cHJlcV9o
b3Bjb3VudDsKIAkqZnJtKysgPSBwcmVxLT5wcmVxX3R0bDsKQEAgLTUyMCw4ICs1NzksOCBAQCBo
d21wX2FkZF9tZXNocHJlcSh1aW50OF90ICpmcm0sIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWVz
aHByZXFfaWUgKnByZXEpCiBzdGF0aWMgdWludDhfdCAqCiBod21wX2FkZF9tZXNocHJlcCh1aW50
OF90ICpmcm0sIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXBfaWUgKnByZXApCiB7Ci0J
KmZybSsrID0gSUVFRTgwMjExX0VMRU1JRF9NRVNIUFJFUDsKLQkqZnJtKysgPSBzaXplb2Yoc3Ry
dWN0IGllZWU4MDIxMV9tZXNocHJlcF9pZSkgLSAyOworCSpmcm0rKyA9IHByZXAtPnByZXBfaWU7
CisJKmZybSsrID0gcHJlcC0+cHJlcF9sZW47CiAJKmZybSsrID0gcHJlcC0+cHJlcF9mbGFnczsK
IAkqZnJtKysgPSBwcmVwLT5wcmVwX2hvcGNvdW50OwogCSpmcm0rKyA9IHByZXAtPnByZXBfdHRs
OwpAQCAtNTQyLDkgKzYwMSw4IEBAIGh3bXBfYWRkX21lc2hwZXJyKHVpbnQ4X3QgKmZybSwgY29u
c3Qgc3RydWN0IGllZWU4MDIxMV9tZXNocGVycl9pZSAqcGVycikKIHsKIAlpbnQgaTsKIAotCSpm
cm0rKyA9IElFRUU4MDIxMV9FTEVNSURfTUVTSFBFUlI7Ci0JKmZybSsrID0gc2l6ZW9mKHN0cnVj
dCBpZWVlODAyMTFfbWVzaHBlcnJfaWUpIC0gMiArCi0JICAgIChwZXJyLT5wZXJyX25kZXN0cyAt
IDEpICogc2l6ZW9mKCpwZXJyLT5wZXJyX2Rlc3RzKTsKKwkqZnJtKysgPSBwZXJyLT5wZXJyX2ll
OworCSpmcm0rKyA9IHBlcnItPnBlcnJfbGVuOwogCSpmcm0rKyA9IHBlcnItPnBlcnJfdHRsOwog
CSpmcm0rKyA9IHBlcnItPnBlcnJfbmRlc3RzOwogCWZvciAoaSA9IDA7IGkgPCBwZXJyLT5wZXJy
X25kZXN0czsgaSsrKSB7CkBAIC02NzUsOSArNzMzLDEwIEBAIGh3bXBfcmVjdl9wcmVxKHN0cnVj
dCBpZWVlODAyMTF2YXAgKnZhcCwgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKICAgICBjb25z
dCBzdHJ1Y3QgaWVlZTgwMjExX2ZyYW1lICp3aCwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9tZXNo
cHJlcV9pZSAqcHJlcSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX21lc2hfc3RhdGUgKm1zID0gdmFw
LT5pdl9tZXNoOwotCXN0cnVjdCBpZWVlODAyMTFfbWVzaF9yb3V0ZSAqcnQgPSBOVUxMOwotCXN0
cnVjdCBpZWVlODAyMTFfbWVzaF9yb3V0ZSAqcnRvcmlnID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgw
MjExX2h3bXBfcm91dGUgKmhyb3JpZzsKKwlzdHJ1Y3QgaWVlZTgwMjExX21lc2hfcm91dGUgKnJ0
ID0gTlVMTDsgLy8gVGFyZ2V0IHJvdXRlCisJc3RydWN0IGllZWU4MDIxMV9tZXNoX3JvdXRlICpy
dG9yaWcgPSBOVUxMOyAvLyBPcmlnaW5hdG9yIHJvdXRlCisJc3RydWN0IGllZWU4MDIxMV9od21w
X3JvdXRlICpocm9yaWcgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfaHdtcF9yb3V0ZSAqaHIg
PSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfaHdtcF9zdGF0ZSAqaHMgPSB2YXAtPml2X2h3bXA7
CiAJc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcF9pZSBwcmVwOwogCkBAIC02OTIsNDYgKzc1MSw4
NiBAQCBod21wX3JlY3ZfcHJlcShzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHN0cnVjdCBpZWVl
ODAyMTFfbm9kZSAqbmksCiAJCXJldHVybjsKIAogCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgw
MjExX01TR19IV01QLCBuaSwKLQkgICAgInJlY2VpdmVkIFBSRVEsIHNvdXJjZSAlcyIsIGV0aGVy
X3NwcmludGYocHJlcS0+cHJlcV9vcmlnYWRkcikpOworCSAgICAicmVjZWl2ZWQgUFJFUSwgb3Jp
Z2luYXRvciAlcywgdGFyZ2V0ICVzIiwgZXRoZXJfc3ByaW50ZihwcmVxLT5wcmVxX29yaWdhZGRy
KSwgZXRoZXJfc3ByaW50ZihQUkVRX1RBRERSKDApKSk7CiAKIAkvKgotCSAqIEFjY2VwdGFuY2Ug
Y3JpdGVyaWE6IGlmIHRoZSBQUkVRIGlzIG5vdCBmb3IgdXMgYW5kCi0JICogZm9yd2FyZGluZyBp
cyBkaXNhYmxlZCwgZGlzY2FyZCB0aGlzIFBSRVEuCisJICogQWNjZXB0YW5jZSBjcml0ZXJpYTog
aWYgdGhlIFBSRVEgaXMgbm90IGZvciB1cyBvciBub3QgYnJvYWRjYXN0CisJICogQU5EIGZvcndh
cmRpbmcgaXMgZGlzYWJsZWQsIGRpc2NhcmQgdGhpcyBQUkVRLgogCSAqLwotCWlmICghSUVFRTgw
MjExX0FERFJfRVEodmFwLT5pdl9teWFkZHIsIFBSRVFfVEFERFIoMCkpICYmCisJaWYgKCghSUVF
RTgwMjExX0FERFJfRVEodmFwLT5pdl9teWFkZHIsIFBSRVFfVEFERFIoMCkpIHx8IC8qIFhYWDog
dGVzdCBmb3IgcHJveHkgYWRkcmVzcyovCisJCSFJRUVFODAyMTFfSVNfTVVMVElDQVNUKFBSRVFf
VEFERFIoMCkpKSAmJgogCSAgICAhKG1zLT5tc19mbGFncyAmIElFRUU4MDIxMV9NRVNIRkxBR1Nf
RldEKSkgewogCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX0hXTVAs
Ci0JCSAgICBwcmVxLT5wcmVxX29yaWdhZGRyLCBOVUxMLCAiJXMiLCAibm90IGFjY2VwdGluZyBQ
UkVRIik7CisJCSAgICBuaS0+bmlfbWFjYWRkciwgTlVMTCwgIm5vdCBhY2NlcHRpbmcgUFJFUSwg
b3JpZ2luYXRvciAlcyIsIGV0aGVyX3NwcmludGYocHJlcS0+cHJlcV9vcmlnYWRkcikpOwogCQly
ZXR1cm47CiAJfQorCS8qCisJICogQWNjZXB0YW5jZSBjcml0ZXJpYTogaWYgdW5pY2FzdCBhZGRy
ZXNzZWQgCisJICogQU5EIG5vIHZhbGlkIGZvcndhcmRpbmcgZm9yIFRhcmdldCBvZiBQUkVRLCBk
aXNjYXJkIHRoaXMgUFJFUS4KKwkgKi8KKwlydCA9IGllZWU4MDIxMV9tZXNoX3J0X2ZpbmQodmFw
LCBQUkVRX1RBRERSKDApKTsKKwlpZihydCAhPSBOVUxMKQorCQlociA9IElFRUU4MDIxMV9NRVNI
X1JPVVRFX1BSSVYocnQsIHN0cnVjdCBpZWVlODAyMTFfaHdtcF9yb3V0ZSk7CisJaWYoKHByZXEt
PnByZXFfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSFBSRVFfRkxBR1NfQU0pID09IDAgJiYgLyogYWRk
cmVzcyBtb2RlOiB1Y2FzdCAqLworCQlydCA9PSBOVUxMICYmCisJCSFJRUVFODAyMTFfQUREUl9F
USh2YXAtPml2X215YWRkciwgUFJFUV9UQUREUigwKSkpIHsKKwkJSUVFRTgwMjExX0RJU0NBUkRf
TUFDKHZhcCwgSUVFRTgwMjExX01TR19IV01QLCBuaS0+bmlfbWFjYWRkciwKKwkJICAgIE5VTEws
ICJ1bmljYXN0IGFkZHJlc3NlZCBQUkVRLCBvcmlnaW5hdG9yICVzLCB1bmtub3duIHRhcmdldCAl
cyIsCisJCQkJICAgICAgZXRoZXJfc3ByaW50ZihwcmVxLT5wcmVxX29yaWdhZGRyKSwKKwkJCQkg
ICAgICBldGhlcl9zcHJpbnRmKFBSRVFfVEFERFIoMCkpKTsKKwkJcmV0dXJuOworCX0KKwkKKwkv
KiBQUkVRIEFDQ0VQVEVEICovCisKIAlydG9yaWcgPSBpZWVlODAyMTFfbWVzaF9ydF9maW5kKHZh
cCwgcHJlcS0+cHJlcV9vcmlnYWRkcik7Ci0JaWYgKHJ0b3JpZyA9PSBOVUxMKQorCWlmIChydG9y
aWcgPT0gTlVMTCl7CiAJCXJ0b3JpZyA9IGllZWU4MDIxMV9tZXNoX3J0X2FkZCh2YXAsIHByZXEt
PnByZXFfb3JpZ2FkZHIpOworCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdN
UCwgbmksCisJCQkiYWRkaW5nIG9yaWdpbmF0b3IgJXMiLCBldGhlcl9zcHJpbnRmKHByZXEtPnBy
ZXFfb3JpZ2FkZHIpKTsKKwl9CiAJaWYgKHJ0b3JpZyA9PSBOVUxMKSB7CiAJCS8qIFhYWCBzdGF0
ICovCiAJCXJldHVybjsKIAl9CiAJaHJvcmlnID0gSUVFRTgwMjExX01FU0hfUk9VVEVfUFJJVihy
dG9yaWcsIHN0cnVjdCBpZWVlODAyMTFfaHdtcF9yb3V0ZSk7Ci0JLyoKLQkgKiBTZXF1ZW5jZSBu
dW1iZXIgdmFsaWRhdGlvbi4KKworCS8qIAorCSAqIERhdGEgY3JlYXRpb24gYW5kIHVwZGF0ZSBv
ZiBmb3J3YXJkaW5nIGluZm9ybWF0aW9uCisJICogYWNjb3JkaW5nIHRvIFRhYmxlIDExQy04IGZv
ciBvcmlnaW5hdG9yIG1lc2ggU1RBLgogCSAqLwotCWlmIChIV01QX1NFUV9MRVEocHJlcS0+cHJl
cV9pZCwgaHJvcmlnLT5ocl9wcmVxaWQpICYmCi0JICAgIEhXTVBfU0VRX0xFUShwcmVxLT5wcmVx
X29yaWdzZXEsIGhyb3JpZy0+aHJfc2VxKSkgeworCWlmKEhXTVBfU0VRX0dUKHByZXEtPnByZXFf
b3JpZ3NlcSwgaHJvcmlnLT5ocl9zZXEpIHx8CisJCShIV01QX1NFUV9FUShwcmVxLT5wcmVxX29y
aWdzZXEsIGhyb3JpZy0+aHJfc2VxKSAmJiBwcmVxLT5wcmVxX21ldHJpYyA8IHJ0b3JpZy0+cnRf
bWV0cmljKSl7CisJCWhyb3JpZy0+aHJfc2VxID0gcHJlcS0+cHJlcV9vcmlnc2VxOworCQlJRUVF
ODAyMTFfQUREUl9DT1BZKHJ0b3JpZy0+cnRfbmV4dGhvcCwgd2gtPmlfYWRkcjIpOworCQlydG9y
aWctPnJ0X21ldHJpYyA9IHByZXEtPnByZXFfbWV0cmljICsKKwkJCW1zLT5tc19wbWV0cmljLT5t
cG1fbWV0cmljKG5pKTsKKwkJcnRvcmlnLT5ydF9uaG9wcyAgPSBwcmVxLT5wcmVxX2hvcGNvdW50
ICsgMTsKKwkJcnRvcmlnLT5ydF9saWZldGltZSAgPSBNRVNIX1JPVVRFX0xJRkVUSU1FX01BWChw
cmVxLT5wcmVxX2xpZmV0aW1lLCBydG9yaWctPnJ0X2xpZmV0aW1lKTsKKwkJcnRvcmlnLT5ydF9m
bGFncyB8PSBJRUVFODAyMTFfTUVTSFJUX0ZMQUdTX1ZBTElEOyAvKiBwYXRoIHRvIG9yaWcgaXMg
dmFsaWQgbm93ICovCisJfWVsc2UgaWYoaHIgIT0gTlVMTCAmJiAKKwkJSFdNUF9TRVFfRVEoaHIt
PmhyX3NlcSwgUFJFUV9UU0VRKDApKSAmJgorCQkocnRvcmlnLT5ydF9mbGFncyAmIElFRUU4MDIx
MV9NRVNIUlRfRkxBR1NfVkFMSUQpID09IDApewogCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4
MDIxMV9NU0dfSFdNUCwgbmksCi0JCSAgICAiZGlzY2FyZCBQUkVRIGZyb20gJXMsIG9sZCBzZXEg
bm8gJXUgPD0gJXUiLAotCQkgICAgZXRoZXJfc3ByaW50ZihwcmVxLT5wcmVxX29yaWdhZGRyKSwK
LQkJICAgIHByZXEtPnByZXFfb3JpZ3NlcSwgaHJvcmlnLT5ocl9zZXEpOworCQkJInJlY2VpdmVk
IFBSRVEsIG9yaWdpbmF0b3IgJXMiLCAidW5rbm93biIpOworCX1lbHNleworCQlJRUVFODAyMTFf
RElTQ0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLT5uaV9tYWNhZGRyLCAKKwkJ
CU5VTEwsICJQUkVRLCBvcmlnaW5hdG9yICVzLCBsYXN0IHNlZW4gb3JpZy5zZXEgJWQsIHByZXEg
b3JpZy5zZXEgJWQiLCAKKwkJCQkgICAgICBldGhlcl9zcHJpbnRmKHByZXEtPnByZXFfb3JpZ2Fk
ZHIpLCBocm9yaWctPmhyX3NlcSwgcHJlcS0+cHJlcV9vcmlnc2VxKTsKIAkJcmV0dXJuOwogCX0K
LQlocm9yaWctPmhyX3ByZXFpZCA9IHByZXEtPnByZXFfaWQ7Ci0JaHJvcmlnLT5ocl9zZXEgPSBw
cmVxLT5wcmVxX29yaWdzZXE7CisJCisJLyogCisJICogRm9yd2FyZGluZyBpbmZvcm1hdGlvbiBm
b3IgdHJhbnNtaXR0ZXIgbWVzaCBTVEEgCisJICogW09QVElPTkFMOiBpZiBtZXRyaWMgaW1wcm92
ZWRdCisJICovCiAKIAkvKgogCSAqIENoZWNrIGlmIHRoZSBQUkVRIGlzIGFkZHJlc3NlZCB0byB1
cy4KIAkgKi8KIAlpZiAoSUVFRTgwMjExX0FERFJfRVEodmFwLT5pdl9teWFkZHIsIFBSRVFfVEFE
RFIoMCkpKSB7CiAJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01QLCBuaSwK
LQkJICAgICJyZXBseSB0byAlcyIsIGV0aGVyX3NwcmludGYocHJlcS0+cHJlcV9vcmlnYWRkcikp
OworCQkgICAgInJlcGx5IFBSRVAsIG9yaWdpbmF0b3IgJXMiLCBldGhlcl9zcHJpbnRmKHByZXEt
PnByZXFfb3JpZ2FkZHIpKTsKIAkJLyoKIAkJICogQnVpbGQgYW5kIHNlbmQgYSBQUkVQIGZyYW1l
LgogCQkgKi8KQEAgLTc1NSw1NCArODU0LDYgQEAgaHdtcF9yZWN2X3ByZXEoc3RydWN0IGllZWU4
MDIxMXZhcCAqdmFwLCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAogCQkJaHdtcF9kaXNjb3Zl
cih2YXAsIHJ0LT5ydF9kZXN0LCBOVUxMKTsKIAkJcmV0dXJuOwogCX0KLQkvKgotCSAqIFByb2Fj
dGl2ZSBQUkVROiByZXBseSB3aXRoIGEgcHJvYWN0aXZlIFBSRVAgdG8gdGhlCi0JICogcm9vdCBT
VEEgaWYgcmVxdWVzdGVkLgotCSAqLwotCWlmIChJRUVFODAyMTFfQUREUl9FUShQUkVRX1RBRERS
KDApLCBicm9hZGNhc3RhZGRyKSAmJgotCSAgICAoUFJFUV9URkxBR1MoMCkgJgotCSAgICAoKElF
RUU4MDIxMV9NRVNIUFJFUV9URkxBR1NfVE98SUVFRTgwMjExX01FU0hQUkVRX1RGTEFHU19SRikg
PT0KLQkgICAgKElFRUU4MDIxMV9NRVNIUFJFUV9URkxBR1NfVE98SUVFRTgwMjExX01FU0hQUkVR
X1RGTEFHU19SRikpKSkgewotCQl1aW50OF90IHJvb3RtYWNbSUVFRTgwMjExX0FERFJfTEVOXTsK
LQotCQlJRUVFODAyMTFfQUREUl9DT1BZKHJvb3RtYWMsIHByZXEtPnByZXFfb3JpZ2FkZHIpOwot
CQlydCA9IGllZWU4MDIxMV9tZXNoX3J0X2ZpbmQodmFwLCByb290bWFjKTsKLQkJaWYgKHJ0ID09
IE5VTEwpIHsKLQkJCXJ0ID0gaWVlZTgwMjExX21lc2hfcnRfYWRkKHZhcCwgcm9vdG1hYyk7Ci0J
CQlpZiAocnQgPT0gTlVMTCkgewotCQkJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01T
R19IV01QLCBuaSwKLQkJCQkgICAgInVuYWJsZSB0byBhZGQgcm9vdCBtZXNoIHBhdGggdG8gJXMi
LAotCQkJCSAgICBldGhlcl9zcHJpbnRmKHJvb3RtYWMpKTsKLQkJCQl2YXAtPml2X3N0YXRzLmlz
X21lc2hfcnRhZGRmYWlsZWQrKzsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJSUVFRTgwMjEx
X05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAotCQkgICAgInJvb3QgbWVzaCBzdGF0
aW9uIEAgJXMiLCBldGhlcl9zcHJpbnRmKHJvb3RtYWMpKTsKLQotCQkvKgotCQkgKiBSZXBseSB3
aXRoIGEgUFJFUCBpZiB3ZSBkb24ndCBoYXZlIGEgcGF0aCB0byB0aGUgcm9vdAotCQkgKiBvciBp
ZiB0aGUgcm9vdCBzZW50IHVzIGEgcHJvYWN0aXZlIFBSRVEuCi0JCSAqLwotCQlpZiAoKHJ0LT5y
dF9mbGFncyAmIElFRUU4MDIxMV9NRVNIUlRfRkxBR1NfVkFMSUQpID09IDAgfHwKLQkJICAgIChw
cmVxLT5wcmVxX2ZsYWdzICYgSUVFRTgwMjExX01FU0hQUkVRX0ZMQUdTX1BQKSkgewotCQkJcHJl
cC5wcmVwX2ZsYWdzID0gMDsKLQkJCXByZXAucHJlcF9ob3Bjb3VudCA9IDA7Ci0JCQlwcmVwLnBy
ZXBfdHRsID0gbXMtPm1zX3R0bDsKLQkJCUlFRUU4MDIxMV9BRERSX0NPUFkocHJlcC5wcmVwX29y
aWdhZGRyLCByb290bWFjKTsKLQkJCXByZXAucHJlcF9vcmlnc2VxID0gcHJlcS0+cHJlcV9vcmln
c2VxOwotCQkJcHJlcC5wcmVwX2xpZmV0aW1lID0gcHJlcS0+cHJlcV9saWZldGltZTsKLQkJCXBy
ZXAucHJlcF9tZXRyaWMgPSBJRUVFODAyMTFfTUVTSExNRVRSSUNfSU5JVElBTFZBTDsKLQkJCUlF
RUU4MDIxMV9BRERSX0NPUFkocHJlcC5wcmVwX3RhcmdldGFkZHIsCi0JCQkgICAgdmFwLT5pdl9t
eWFkZHIpOwotCQkJcHJlcC5wcmVwX3RhcmdldHNlcSA9ICsraHMtPmhzX3NlcTsKLQkJCWh3bXBf
c2VuZF9wcmVwKHZhcC0+aXZfYnNzLCB2YXAtPml2X215YWRkciwKLQkJCSAgICBicm9hZGNhc3Rh
ZGRyLCAmcHJlcCk7Ci0JCX0KLQkJaHdtcF9kaXNjb3Zlcih2YXAsIHJvb3RtYWMsIE5VTEwpOwot
CQlyZXR1cm47Ci0JfQotCXJ0ID0gaWVlZTgwMjExX21lc2hfcnRfZmluZCh2YXAsIFBSRVFfVEFE
RFIoMCkpOwogCiAJLyoKIAkgKiBGb3J3YXJkaW5nIGFuZCBJbnRlcm1lZGlhdGUgcmVwbHkgZm9y
IFBSRVFzIHdpdGggMSB0YXJnZXQuCkBAIC04MTAsNyArODYxLDcgQEAgaHdtcF9yZWN2X3ByZXEo
c3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLAogCWlm
IChwcmVxLT5wcmVxX3Rjb3VudCA9PSAxKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXFf
aWUgcHByZXE7IC8qIHByb3BhZ2F0ZWQgUFJFUSAqLwogCi0JCW1lbWNweSgmcHByZXEsIHByZXEs
IHNpemVvZihwcHJlcSkpOworCQltZW1jcHkoJnBwcmVxLCBwcmVxLCBzaXplb2Yoc3RydWN0IGll
ZWU4MDIxMV9tZXNocHJlcV9pZSkpOwogCQkvKgogCQkgKiBXZSBoYXZlIGEgdmFsaWQgcm91dGUg
dG8gdGhpcyBub2RlLgogCQkgKi8KQEAgLTgxOSwxMSArODcwLDE1IEBAIGh3bXBfcmVjdl9wcmVx
KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKIAkJ
CWlmIChwcmVxLT5wcmVxX3R0bCA+IDEgJiYKIAkJCSAgICBwcmVxLT5wcmVxX2hvcGNvdW50IDwg
aHMtPmhzX21heGhvcHMpIHsKIAkJCQlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0df
SFdNUCwgbmksCi0JCQkJICAgICJmb3J3YXJkIFBSRVEgZnJvbSAlcyIsCi0JCQkJICAgIGV0aGVy
X3NwcmludGYocHJlcS0+cHJlcV9vcmlnYWRkcikpOworCQkJCSAgICAiZm9yd2FyZCBQUkVRLCBv
cmlnaW5hdG9yICVzLCB0YXJnZXQgJXMsIHRvICVzIiwKKwkJCQkJICAgICAgIGV0aGVyX3Nwcmlu
dGYocHJlcS0+cHJlcV9vcmlnYWRkciksCisJCQkJCSAgICAgICBldGhlcl9zcHJpbnRmKFBSRVFf
VEFERFIoMCkpLAorCQkJCQkgICAgICAgZXRoZXJfc3ByaW50ZihydC0+cnRfbmV4dGhvcCkpOwog
CQkJCS8qCiAJCQkJICogUHJvcGFnYXRlIHRoZSBvcmlnaW5hbCBQUkVRLgorCQkJCSAqIFBSRVEg
aXMgdW5pY2FzdCBub3cgdG8gcnQtPnJ0X25leHRob3AKIAkJCQkgKi8KKwkJCQlwcHJlcS5wcmVx
X2ZsYWdzICY9IH5JRUVFODAyMTFfTUVTSFBSRVFfRkxBR1NfQU07CiAJCQkJcHByZXEucHJlcV9o
b3Bjb3VudCArPSAxOwogCQkJCXBwcmVxLnByZXFfdHRsIC09IDE7CiAJCQkJcHByZXEucHJlcV9t
ZXRyaWMgKz0KQEAgLTgzNywyMCArODkyLDIzIEBAIGh3bXBfcmVjdl9wcmVxKHN0cnVjdCBpZWVl
ODAyMTF2YXAgKnZhcCwgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKIAkJCQlwcHJlcS5wcmVx
X3RhcmdldHNbMF0udGFyZ2V0X2ZsYWdzICY9CiAJCQkJICAgIH5JRUVFODAyMTFfTUVTSFBSRVFf
VEZMQUdTX1JGOwogCQkJCWh3bXBfc2VuZF9wcmVxKG5pLCB2YXAtPml2X215YWRkciwKLQkJCQkg
ICAgYnJvYWRjYXN0YWRkciwgJnBwcmVxKTsKKwkJCQkgICAgcnQtPnJ0X25leHRob3AsICZwcHJl
cSk7CiAJCQl9CiAJCQkvKgogCQkJICogQ2hlY2sgaWYgd2UgY2FuIHNlbmQgYW4gaW50ZXJtZWRp
YXRlIFBhdGggUmVwbHksCi0JCQkgKiBpLmUuLCBUYXJnZXQgT25seSBiaXQgaXMgbm90IHNldC4K
KwkJCSAqIGkuZS4sIFRhcmdldCBPbmx5IGJpdCBpcyBub3Qgc2V0IEFORCBIV01QIHNlcXVlbmNl
IG51bWJlciAKKwkJCSAqIGdyZWF0ZXIgb3IgZXF1YWwgdG8gVGFyZ2V0IEhXTVAgc2VxdWVuY2Ug
bnVtYmVyIG9mIFBSRVEuCiAJCQkgKi8KLQkgICAgCQlpZiAoIShQUkVRX1RGTEFHUygwKSAmIElF
RUU4MDIxMV9NRVNIUFJFUV9URkxBR1NfVE8pKSB7CisJICAgIAkJaWYgKCEoUFJFUV9URkxBR1Mo
MCkgJiBJRUVFODAyMTFfTUVTSFBSRVFfVEZMQUdTX1RPKSAmJgorCQkJCUhXTVBfU0VRX0dFUSho
ci0+aHJfc2VxLCBQUkVRX1RTRVEoMCkpKSB7CiAJCQkJc3RydWN0IGllZWU4MDIxMV9tZXNocHJl
cF9pZSBwcmVwOwogCiAJCQkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAs
IG5pLAotCQkJCSAgICAiaW50ZXJtZWRpYXRlIHJlcGx5IGZvciBQUkVRIGZyb20gJXMiLAotCQkJ
CSAgICBldGhlcl9zcHJpbnRmKHByZXEtPnByZXFfb3JpZ2FkZHIpKTsKKwkJCQkgICAgImludGVy
bWVkaWF0ZSBQUkVQLCBvcmlnaW5hdG9yICVzLCB0YXJnZXQgJXMiLAorCQkJCQkgICAgICAgZXRo
ZXJfc3ByaW50ZihwcmVxLT5wcmVxX29yaWdhZGRyKSwKKwkJCQkJICAgICAgIGV0aGVyX3Nwcmlu
dGYoUFJFUV9UQUREUigwKSkpOwogCQkJCXByZXAucHJlcF9mbGFncyA9IDA7Ci0JCQkJcHJlcC5w
cmVwX2hvcGNvdW50ID0gcnQtPnJ0X25ob3BzICsgMTsKKwkJCQlwcmVwLnByZXBfaG9wY291bnQg
PSBydC0+cnRfbmhvcHM7CiAJCQkJcHJlcC5wcmVwX3R0bCA9IG1zLT5tc190dGw7CiAJCQkJSUVF
RTgwMjExX0FERFJfQ09QWSgmcHJlcC5wcmVwX3RhcmdldGFkZHIsCiAJCQkJICAgIFBSRVFfVEFE
RFIoMCkpOwpAQCAtODYyLDcgKzkyMCw3IEBAIGh3bXBfcmVjdl9wcmVxKHN0cnVjdCBpZWVlODAy
MTF2YXAgKnZhcCwgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKIAkJCQkgICAgcHJlcS0+cHJl
cV9vcmlnYWRkcik7CiAJCQkJcHJlcC5wcmVwX29yaWdzZXEgPSBocm9yaWctPmhyX3NlcTsKIAkJ
CQlod21wX3NlbmRfcHJlcChuaSwgdmFwLT5pdl9teWFkZHIsCi0JCQkJICAgIGJyb2FkY2FzdGFk
ZHIsICZwcmVwKTsKKwkJCQkgICAgd2gtPmlfYWRkcjIsICZwcmVwKTsKIAkJCX0KIAkJLyoKIAkJ
ICogV2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhdGgsCkBAIC04NzAsMjYgKzky
OCwxMSBAQCBod21wX3JlY3ZfcHJlcShzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHN0cnVjdCBp
ZWVlODAyMTFfbm9kZSAqbmksCiAJCSAqLwogCQl9IGVsc2UgaWYgKHByZXEtPnByZXFfdHRsID4g
MSAmJgogCQkgICAgcHJlcS0+cHJlcV9ob3Bjb3VudCA8IGhzLT5oc19tYXhob3BzKSB7Ci0JCQlp
ZiAocnQgPT0gTlVMTCkgewotCQkJCXJ0ID0gaWVlZTgwMjExX21lc2hfcnRfYWRkKHZhcCwgUFJF
UV9UQUREUigwKSk7Ci0JCQkJaWYgKHJ0ID09IE5VTEwpIHsKLQkJCQkJSUVFRTgwMjExX05PVEUo
dmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsCi0JCQkJCSAgICBuaSwgInVuYWJsZSB0byBhZGQgUFJF
USBwYXRoIHRvICVzIiwKLQkJCQkJICAgIGV0aGVyX3NwcmludGYoUFJFUV9UQUREUigwKSkpOwot
CQkJCQl2YXAtPml2X3N0YXRzLmlzX21lc2hfcnRhZGRmYWlsZWQrKzsKLQkJCQkJcmV0dXJuOwot
CQkJCX0KLQkJCX0KLQkJCXJ0LT5ydF9tZXRyaWMgPSBwcmVxLT5wcmVxX21ldHJpYzsKLQkJCXJ0
LT5ydF9saWZldGltZSA9IHByZXEtPnByZXFfbGlmZXRpbWU7Ci0JCQlocm9yaWcgPSBJRUVFODAy
MTFfTUVTSF9ST1VURV9QUklWKHJ0LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaHdtcF9yb3V0
ZSk7Ci0JCQlocm9yaWctPmhyX3NlcSA9IHByZXEtPnByZXFfb3JpZ3NlcTsKLQkJCWhyb3JpZy0+
aHJfcHJlcWlkID0gcHJlcS0+cHJlcV9pZDsKLQogCQkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVF
ODAyMTFfTVNHX0hXTVAsIG5pLAotCQkJICAgICJmb3J3YXJkIFBSRVEgZnJvbSAlcyIsCi0JCQkg
ICAgZXRoZXJfc3ByaW50ZihwcmVxLT5wcmVxX29yaWdhZGRyKSk7CisJCQkgICAgImJyb2FkY2Fz
dCBQUkVRLCBvcmlnaW5hdG9yICVzLCB0YXJnZXQgJXMiLAorCQkJICAgIGV0aGVyX3NwcmludGYo
cHJlcS0+cHJlcV9vcmlnYWRkciksCisJCQkgICAgZXRoZXJfc3ByaW50ZihQUkVRX1RBRERSKDAp
KSk7CisJCQlwcHJlcS5wcmVxX2ZsYWdzIHw9IElFRUU4MDIxMV9NRVNIUFJFUV9GTEFHU19BTTsK
IAkJCXBwcmVxLnByZXFfaG9wY291bnQgKz0gMTsKIAkJCXBwcmVxLnByZXFfdHRsIC09IDE7CiAJ
CQlwcHJlcS5wcmVxX21ldHJpYyArPSBtcy0+bXNfcG1ldHJpYy0+bXBtX21ldHJpYyhuaSk7CkBA
IC05MjgsOCArOTcxLDggQEAgaHdtcF9zZW5kX3ByZXEoc3RydWN0IGllZWU4MDIxMV9ub2RlICpu
aSwKIAkgKiAgICAgW3Rsdl0gbWVzaCBwYXRoIHJlcXVlc3QKIAkgKi8KIAlwcmVxLT5wcmVxX2ll
ID0gSUVFRTgwMjExX0VMRU1JRF9NRVNIUFJFUTsKLQlyZXR1cm4gaHdtcF9zZW5kX2FjdGlvbihu
aSwgc2EsIGRhLCAodWludDhfdCAqKXByZXEsCi0JICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjEx
X21lc2hwcmVxX2llKSk7CisJcHJlcS0+cHJlcV9sZW4gPSBJRUVFODAyMTFfTUVTSFBSRVFfQkFT
RV9TWiArIHByZXEtPnByZXFfdGNvdW50ICogSUVFRTgwMjExX01FU0hQUkVRX1RSR1RfU1o7CisJ
cmV0dXJuIGh3bXBfc2VuZF9hY3Rpb24obmksIHNhLCBkYSwgKHVpbnQ4X3QgKilwcmVxLCBwcmVx
LT5wcmVxX2xlbisyKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTkzOSw4MSArOTgyLDEwMiBAQCBo
d21wX3JlY3ZfcHJlcChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHN0cnVjdCBpZWVlODAyMTFf
bm9kZSAqbmksCiAJc3RydWN0IGllZWU4MDIxMV9tZXNoX3N0YXRlICptcyA9IHZhcC0+aXZfbWVz
aDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3bXBfc3RhdGUgKmhzID0gdmFwLT5pdl9od21wOwogCXN0
cnVjdCBpZWVlODAyMTFfbWVzaF9yb3V0ZSAqcnQgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFf
bWVzaF9yb3V0ZSAqcnRvcmlnID0gTlVMTDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3bXBfcm91dGUg
KmhyOwogCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gdmFwLT5pdl9pYzsKIAlzdHJ1Y3QgaWZu
ZXQgKmlmcCA9IHZhcC0+aXZfaWZwOwogCXN0cnVjdCBtYnVmICptLCAqbmV4dDsKKwl1aW50MzJf
dCBtZXRyaWMgPSAwOwogCiAJLyoKLQkgKiBBY2NlcHRhbmNlIGNyaXRlcmlhOiBpZiB0aGUgY29y
cmVzcG9uZGluZyBQUkVRIHdhcyBub3QgZ2VuZXJhdGVkCisJICogQWNjZXB0YW5jZSBjcml0ZXJp
YTogaWYgdGhlIGNvcnJlc3BvbmRpbmcgUFJFUCB3YXMgbm90IGdlbmVyYXRlZAogCSAqIGJ5IHVz
IGFuZCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBkaXNjYXJkIHRoaXMgUFJFUC4KIAkgKi8KIAlp
ZiAobmkgPT0gdmFwLT5pdl9ic3MgfHwKIAkgICAgbmktPm5pX21sc3RhdGUgIT0gSUVFRTgwMjEx
X05PREVfTUVTSF9FU1RBQkxJU0hFRCkKIAkJcmV0dXJuOwotCWlmICghSUVFRTgwMjExX0FERFJf
RVEodmFwLT5pdl9teWFkZHIsIHByZXAtPnByZXBfb3JpZ2FkZHIpICYmCi0JICAgICEobXMtPm1z
X2ZsYWdzICYgSUVFRTgwMjExX01FU0hGTEFHU19GV0QpKQorCWlmICghSUVFRTgwMjExX0FERFJf
RVEodmFwLT5pdl9teWFkZHIsIHByZXAtPnByZXBfb3JpZ2FkZHIpICYmIC8qIFhYWDogdGVzdCBm
b3IgcHJveHkgYWRkcmVzcyAqLworCSAgICAhKG1zLT5tc19mbGFncyAmIElFRUU4MDIxMV9NRVNI
RkxBR1NfRldEKSl7CisJCUlFRUU4MDIxMV9ESVNDQVJEX01BQyh2YXAsIElFRUU4MDIxMV9NU0df
SFdNUCwKKwkJICAgIG5pLT5uaV9tYWNhZGRyLCBOVUxMLCAibm90IGFjY2VwdGluZyBQUkVQLCBv
cmlnaW5hdG9yICVzLCBmb3J3YXJkaW5nIGRpc2FibGVkIiwgZXRoZXJfc3ByaW50ZihwcmVwLT5w
cmVwX29yaWdhZGRyKSk7CiAJCXJldHVybjsKKwl9CisKKwkvKiBQUkVQIEFDQ0VQVEVEICovCiAK
IAlJRUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCi0JICAgICJyZWNl
aXZlZCBQUkVQIGZyb20gJXMiLCBldGhlcl9zcHJpbnRmKHByZXAtPnByZXBfdGFyZ2V0YWRkcikp
OworCSAgICAicmVjZWl2ZWQgUFJFUCwgb3JpZ2luYXRvciAlcywgdGFyZ2V0ICVzIiwgZXRoZXJf
c3ByaW50ZihwcmVwLT5wcmVwX29yaWdhZGRyKSwgZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVwX3Rh
cmdldGFkZHIpKTsKIAogCXJ0ID0gaWVlZTgwMjExX21lc2hfcnRfZmluZCh2YXAsIHByZXAtPnBy
ZXBfdGFyZ2V0YWRkcik7CiAJaWYgKHJ0ID09IE5VTEwpIHsKLQkJLyoKLQkJICogSWYgd2UgaGF2
ZSBubyBlbnRyeSB0aGlzIGNvdWxkIGJlIGEgcmVwbHkgdG8gYSByb290IFBSRVEuCi0JCSAqLwot
CQlpZiAoaHMtPmhzX3Jvb3Rtb2RlICE9IElFRUU4MDIxMV9IV01QX1JPT1RNT0RFX0RJU0FCTEVE
KSB7Ci0JCQlydCA9IGllZWU4MDIxMV9tZXNoX3J0X2FkZCh2YXAsIHByZXAtPnByZXBfdGFyZ2V0
YWRkcik7Ci0JCQlpZiAocnQgPT0gTlVMTCkgewotCQkJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVF
RTgwMjExX01TR19IV01QLAotCQkJCSAgICBuaSwgInVuYWJsZSB0byBhZGQgUFJFUCBwYXRoIHRv
ICVzIiwKLQkJCQkgICAgZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVwX3RhcmdldGFkZHIpKTsKLQkJ
CQl2YXAtPml2X3N0YXRzLmlzX21lc2hfcnRhZGRmYWlsZWQrKzsKLQkJCQlyZXR1cm47Ci0JCQl9
Ci0JCQlJRUVFODAyMTFfQUREUl9DT1BZKHJ0LT5ydF9uZXh0aG9wLCB3aC0+aV9hZGRyMik7Ci0J
CQlydC0+cnRfbmhvcHMgPSBwcmVwLT5wcmVwX2hvcGNvdW50OwotCQkJcnQtPnJ0X2xpZmV0aW1l
ID0gcHJlcC0+cHJlcF9saWZldGltZTsKLQkJCXJ0LT5ydF9tZXRyaWMgPSBwcmVwLT5wcmVwX21l
dHJpYzsKLQkJCXJ0LT5ydF9mbGFncyB8PSBJRUVFODAyMTFfTUVTSFJUX0ZMQUdTX1ZBTElEOwot
CQkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAotCQkJICAgICJh
ZGQgcm9vdCBwYXRoIHRvICVzIG5ob3BzICVkIG1ldHJpYyAlZCAoUFJFUCkiLAotCQkJICAgIGV0
aGVyX3NwcmludGYocHJlcC0+cHJlcF90YXJnZXRhZGRyKSwKLQkJCSAgICBydC0+cnRfbmhvcHMs
IHJ0LT5ydF9tZXRyaWMpOworCQlydCA9IGllZWU4MDIxMV9tZXNoX3J0X2FkZCh2YXAsIHByZXAt
PnByZXBfdGFyZ2V0YWRkcik7CisJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19I
V01QLCBuaSwKKwkJCSJhZGRpbmcgdGFyZ2V0ICVzIiwgZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVw
X3RhcmdldGFkZHIpKTsKKwkJaWYgKHJ0ID09IE5VTEwpIHsKKwkJCUlFRUU4MDIxMV9OT1RFKHZh
cCwgSUVFRTgwMjExX01TR19IV01QLAorCQkJCW5pLCAidW5hYmxlIHRvIGFkZCBQUkVQIHBhdGgg
dG8gJXMiLAorCQkJCWV0aGVyX3NwcmludGYocHJlcC0+cHJlcF90YXJnZXRhZGRyKSk7CisJCQl2
YXAtPml2X3N0YXRzLmlzX21lc2hfcnRhZGRmYWlsZWQrKzsKIAkJCXJldHVybjsKLQkJfSAKLQkJ
cmV0dXJuOworCQl9CiAJfQotCS8qCi0JICogU2VxdWVuY2UgbnVtYmVyIHZhbGlkYXRpb24uCisK
KwkvKiAKKwkgKiBEYXRhIGNyZWF0aW9uIGFuZCB1cGRhdGUgb2YgZm9yd2FyZGluZyBpbmZvcm1h
dGlvbgorCSAqIGFjY29yZGluZyB0byBUYWJsZSAxMUMtOCBmb3Igb3JpZ2luYXRvciBtZXNoIFNU
QS4KIAkgKi8KIAlociA9IElFRUU4MDIxMV9NRVNIX1JPVVRFX1BSSVYocnQsIHN0cnVjdCBpZWVl
ODAyMTFfaHdtcF9yb3V0ZSk7Ci0JaWYgKEhXTVBfU0VRX0xFUShwcmVwLT5wcmVwX3RhcmdldHNl
cSwgaHItPmhyX3NlcSkpIHsKLQkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hX
TVAsIG5pLAotCQkgICAgImRpc2NhcmQgUFJFUCBmcm9tICVzLCBvbGQgc2VxIG5vICV1IDw9ICV1
IiwKLQkJICAgIGV0aGVyX3NwcmludGYocHJlcC0+cHJlcF90YXJnZXRhZGRyKSwKLQkJICAgIHBy
ZXAtPnByZXBfdGFyZ2V0c2VxLCBoci0+aHJfc2VxKTsKKwlpZihIV01QX1NFUV9HVChwcmVwLT5w
cmVwX3RhcmdldHNlcSwgaHItPmhyX3NlcSkgfHwKKwkJKEhXTVBfU0VRX0VRKHByZXAtPnByZXBf
dGFyZ2V0c2VxLCBoci0+aHJfc2VxKSAmJiBwcmVwLT5wcmVwX21ldHJpYyA8IHJ0LT5ydF9tZXRy
aWMpKXsKKwkJbWV0cmljID0gcHJlcC0+cHJlcF9tZXRyaWMgKyBtcy0+bXNfcG1ldHJpYy0+bXBt
X21ldHJpYyhuaSk7CisJCWlmKChydC0+cnRfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSFJUX0ZMQUdT
X1ZBTElEKSA9PSAwKXsKKwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01Q
LCBuaSwKKwkJCSAgICAiY3JlYXRlIHBhdGggdG8gJXMsIGhvcGNvdW50ICVkIG1ldHJpYyAlZCIs
CisJCQkgICAgZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVwX3RhcmdldGFkZHIpLAorCQkJICAgIHBy
ZXAtPnByZXBfaG9wY291bnQgKyAxLAorCQkJICAgIG1ldHJpYyk7CisJCX1lbHNleworCQkJSUVF
RTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCQkJICAgICJwcmVmZXIg
cGF0aCB0byAlcywgaG9wY291bnQgJWQ6WyVkXSBtZXRyaWMgJWQ6WyVkXSIsCisJCQkgICAgZXRo
ZXJfc3ByaW50ZihwcmVwLT5wcmVwX3RhcmdldGFkZHIpLAorCQkJICAgIHByZXAtPnByZXBfaG9w
Y291bnQgKyAxLCBydC0+cnRfbmhvcHMsCisJCQkgICAgbWV0cmljLCBydC0+cnRfbWV0cmljKTsK
KwkJfQorCQloci0+aHJfc2VxID0gcHJlcC0+cHJlcF90YXJnZXRzZXE7CisJCUlFRUU4MDIxMV9B
RERSX0NPUFkocnQtPnJ0X25leHRob3AsIHdoLT5pX2FkZHIyKTsKKwkJcnQtPnJ0X21ldHJpYyA9
IG1ldHJpYzsKKwkJcnQtPnJ0X25ob3BzICA9IHByZXAtPnByZXBfaG9wY291bnQgKyAxOworCQly
dC0+cnRfbGlmZXRpbWUgID0gTUVTSF9ST1VURV9MSUZFVElNRV9NQVgocHJlcC0+cHJlcF9saWZl
dGltZSwgcnQtPnJ0X2xpZmV0aW1lKTsKKwkJcnQtPnJ0X2ZsYWdzIHw9IElFRUU4MDIxMV9NRVNI
UlRfRkxBR1NfVkFMSUQ7IC8qIHBhdGggdG8gdGFyZ2V0IGlzIHZhbGlkIG5vdyAqLworCX1lbHNl
eworCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLT5u
aV9tYWNhZGRyLCAKKwkJCU5VTEwsICJQUkVQLCBvcmlnaW5hdG9yICVzLCBsYXN0IHNlZW4gb3Jp
Zy5zZXEgJWQsIHByZXEgb3JpZy5zZXEgJWQiLCAKKwkJCQkgICAgICBldGhlcl9zcHJpbnRmKHBy
ZXAtPnByZXBfb3JpZ2FkZHIpLCBoci0+aHJfc2VxLCBwcmVwLT5wcmVwX29yaWdzZXEpOwogCQly
ZXR1cm47CiAJfQotCWhyLT5ocl9zZXEgPSBwcmVwLT5wcmVwX3RhcmdldHNlcTsKKwkKKwkKIAkv
KgogCSAqIElmIGl0J3MgTk9UIGZvciB1cywgcHJvcGFnYXRlIHRoZSBQUkVQLgogCSAqLwogCWlm
ICghSUVFRTgwMjExX0FERFJfRVEodmFwLT5pdl9teWFkZHIsIHByZXAtPnByZXBfb3JpZ2FkZHIp
ICYmCiAJICAgIHByZXAtPnByZXBfdHRsID4gMSAmJiBwcmVwLT5wcmVwX2hvcGNvdW50IDwgaHMt
PmhzX21heGhvcHMpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcF9pZSBwcHJlcDsgLyog
cHJvcGFnYXRlZCBQUkVQICovCi0KKwkJcnRvcmlnID0gaWVlZTgwMjExX21lc2hfcnRfZmluZCh2
YXAsIHByZXAtPnByZXBfb3JpZ2FkZHIpOworCQlpZihydG9yaWcgPT0gTlVMTCl7CisJCQlJRUVF
ODAyMTFfRElTQ0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLT5uaV9tYWNhZGRy
LCAKKwkJCQlOVUxMLCAiUFJFUCwgb3JpZ2luYXRvciAlcyB1bmtub3duIiwgZXRoZXJfc3ByaW50
ZihwcmVwLT5wcmVwX29yaWdhZGRyKSk7CisJCQlyZXR1cm47CisJCX0KIAkJSUVFRTgwMjExX05P
VEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLAotCQkgICAgInByb3BhZ2F0ZSBQUkVQIGZy
b20gJXMiLAotCQkgICAgZXRoZXJfc3ByaW50ZihwcmVwLT5wcmVwX3RhcmdldGFkZHIpKTsKKwkJ
ICAgICJwcm9wYWdhdGUgUFJFUCwgb3JpZ2luYXRvciAlcywgdGFyZ2V0ICVzLCB0byAlcyIsCisJ
CSAgICBldGhlcl9zcHJpbnRmKHByZXAtPnByZXBfb3JpZ2FkZHIpLCBldGhlcl9zcHJpbnRmKHBy
ZXAtPnByZXBfdGFyZ2V0YWRkciksIGV0aGVyX3NwcmludGYocnRvcmlnLT5ydF9uZXh0aG9wKSk7
CiAKLQkJbWVtY3B5KCZwcHJlcCwgcHJlcCwgc2l6ZW9mKHBwcmVwKSk7CisJCW1lbWNweSgmcHBy
ZXAsIHByZXAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hwcmVwX2llKSk7CiAJCXBwcmVw
LnByZXBfaG9wY291bnQgKz0gMTsKIAkJcHByZXAucHJlcF90dGwgLT0gMTsKIAkJcHByZXAucHJl
cF9tZXRyaWMgKz0gbXMtPm1zX3BtZXRyaWMtPm1wbV9tZXRyaWMobmkpOwotCQlJRUVFODAyMTFf
QUREUl9DT1BZKHBwcmVwLnByZXBfdGFyZ2V0YWRkciwgdmFwLT5pdl9teWFkZHIpOwotCQlod21w
X3NlbmRfcHJlcChuaSwgdmFwLT5pdl9teWFkZHIsIGJyb2FkY2FzdGFkZHIsICZwcHJlcCk7CisJ
CWh3bXBfc2VuZF9wcmVwKG5pLCB2YXAtPml2X215YWRkciwgcnRvcmlnLT5ydF9uZXh0aG9wLCAm
cHByZXApOwogCX0KIAlociA9IElFRUU4MDIxMV9NRVNIX1JPVVRFX1BSSVYocnQsIHN0cnVjdCBp
ZWVlODAyMTFfaHdtcF9yb3V0ZSk7CiAJaWYgKHJ0LT5ydF9mbGFncyAmIElFRUU4MDIxMV9NRVNI
UlRfRkxBR1NfUFJPWFkpIHsKQEAgLTEwMjIsNDAgKzEwODYsNiBAQCBod21wX3JlY3ZfcHJlcChz
dHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCiAJCSAg
ICAiZGlzY2FyZCBQUkVQIGZvciAlcywgcm91dGUgaXMgbWFya2VkIFBST1hZIiwKIAkJICAgIGV0
aGVyX3NwcmludGYocHJlcC0+cHJlcF90YXJnZXRhZGRyKSk7CiAJCXZhcC0+aXZfc3RhdHMuaXNf
aHdtcF9wcm94eSsrOwotCX0gZWxzZSBpZiAocHJlcC0+cHJlcF9vcmlnc2VxID09IGhyLT5ocl9v
cmlnc2VxKSB7Ci0JCS8qCi0JCSAqIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHBhdGggdG8g
dGhpcyBub2RlLgotCQkgKiBJZiB3ZSBkbywgY2hlY2sgaWYgdGhpcyBwYXRoIHJlcGx5IGNvbnRh
aW5zIGEKLQkJICogYmV0dGVyIHJvdXRlLgotCQkgKi8KLQkJaWYgKChydC0+cnRfZmxhZ3MgJiBJ
RUVFODAyMTFfTUVTSFJUX0ZMQUdTX1ZBTElEKSA9PSAwIHx8Ci0JCSAgICAocHJlcC0+cHJlcF9o
b3Bjb3VudCA8IHJ0LT5ydF9uaG9wcyB8fAotCQkgICAgIHByZXAtPnByZXBfbWV0cmljIDwgcnQt
PnJ0X21ldHJpYykpIHsKLQkJCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01Q
LCBuaSwKLQkJCSAgICAiJXMgcGF0aCB0byAlcywgaG9wY291bnQgJWQ6JWQgbWV0cmljICVkOiVk
IiwKLQkJCSAgICBydC0+cnRfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSFJUX0ZMQUdTX1ZBTElEID8K
LQkJCQkicHJlZmVyIiA6ICJ1cGRhdGUiLAotCQkJICAgIGV0aGVyX3NwcmludGYocHJlcC0+cHJl
cF9vcmlnYWRkciksCi0JCQkgICAgcnQtPnJ0X25ob3BzLCBwcmVwLT5wcmVwX2hvcGNvdW50LAot
CQkJICAgIHJ0LT5ydF9tZXRyaWMsIHByZXAtPnByZXBfbWV0cmljKTsKLQkJCUlFRUU4MDIxMV9B
RERSX0NPUFkocnQtPnJ0X25leHRob3AsIHdoLT5pX2FkZHIyKTsKLQkJCXJ0LT5ydF9uaG9wcyA9
IHByZXAtPnByZXBfaG9wY291bnQ7Ci0JCQlydC0+cnRfbGlmZXRpbWUgPSBwcmVwLT5wcmVwX2xp
ZmV0aW1lOwotCQkJcnQtPnJ0X21ldHJpYyA9IHByZXAtPnByZXBfbWV0cmljOwotCQkJcnQtPnJ0
X2ZsYWdzIHw9IElFRUU4MDIxMV9NRVNIUlRfRkxBR1NfVkFMSUQ7Ci0JCX0gZWxzZSB7Ci0JCQlJ
RUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCi0JCQkgICAgImlnbm9y
ZSBQUkVQIGZvciAlcywgaG9wY291bnQgJWQ6JWQgbWV0cmljICVkOiVkIiwKLQkJCSAgICBldGhl
cl9zcHJpbnRmKHByZXAtPnByZXBfdGFyZ2V0YWRkciksCi0JCQkgICAgcnQtPnJ0X25ob3BzLCBw
cmVwLT5wcmVwX2hvcGNvdW50LAotCQkJICAgIHJ0LT5ydF9tZXRyaWMsIHByZXAtPnByZXBfbWV0
cmljKTsKLQkJfQotCX0gZWxzZSB7Ci0JCUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01T
R19IV01QLCBuaSwKLQkJICAgICJkaXNjYXJkIFBSRVAgZm9yICVzLCB3cm9uZyBzZXFubyAldSAh
PSAldSIsCi0JCSAgICBldGhlcl9zcHJpbnRmKHByZXAtPnByZXBfdGFyZ2V0YWRkciksIHByZXAt
PnByZXBfb3JpZ3NlcSwKLQkJICAgIGhyLT5ocl9zZXEpOwotCQl2YXAtPml2X3N0YXRzLmlzX2h3
bXBfd3JvbmdzZXErKzsKIAl9IAogCS8qCiAJICogQ2hlY2sgZm9yIGZyYW1lcyBxdWV1ZWQgYXdh
aXRpbmcgcGF0aCBkaXNjb3ZlcnkuCkBAIC0xMDk0LDIyICsxMTI0LDI4IEBAIGh3bXBfc2VuZF9w
cmVwKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCiAJICogICAgIFt0bHZdIG1lc2ggcGF0aCBy
ZXBseQogCSAqLwogCXByZXAtPnByZXBfaWUgPSBJRUVFODAyMTFfRUxFTUlEX01FU0hQUkVQOwot
CXJldHVybiBod21wX3NlbmRfYWN0aW9uKG5pLCBzYSwgZGEsICh1aW50OF90ICopcHJlcCwKLQkg
ICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXBfaWUpKTsKKwlwcmVwLT5wcmVwX2xl
biA9IElFRUU4MDIxMV9NRVNIUFJFUF9CQVNFX1NaOworCXJldHVybiBod21wX3NlbmRfYWN0aW9u
KG5pLCBzYSwgZGEsICh1aW50OF90ICopcHJlcCwgcHJlcC0+cHJlcF9sZW4gKyAyKTsKIH0KIAot
I2RlZmluZQlQRVJSX0RGTEFHUyhuKQlwZXJyLnBlcnJfZGVzdHNbbl0uZGVzdF9mbGFncwotI2Rl
ZmluZQlQRVJSX0RBRERSKG4pCXBlcnIucGVycl9kZXN0c1tuXS5kZXN0X2FkZHIKLSNkZWZpbmUJ
UEVSUl9EU0VRKG4pCXBlcnIucGVycl9kZXN0c1tuXS5kZXN0X3NlcQotI2RlZmluZQlQRVJSX0RS
Q09ERShuKQlwZXJyLnBlcnJfZGVzdHNbbl0uZGVzdF9yY29kZQorI2RlZmluZQlQRVJSX0RGTEFH
UyhuKQlwZXJyLT5wZXJyX2Rlc3RzW25dLmRlc3RfZmxhZ3MKKyNkZWZpbmUJUEVSUl9EQUREUihu
KQlwZXJyLT5wZXJyX2Rlc3RzW25dLmRlc3RfYWRkcgorI2RlZmluZQlQRVJSX0RTRVEobikJcGVy
ci0+cGVycl9kZXN0c1tuXS5kZXN0X3NlcQorI2RlZmluZQlQRVJSX0RSQ09ERShuKQlwZXJyLT5w
ZXJyX2Rlc3RzW25dLmRlc3RfcmNvZGUKIHN0YXRpYyB2b2lkCiBod21wX3BlZXJkb3duKHN0cnVj
dCBpZWVlODAyMTFfbm9kZSAqbmkpCiB7CiAJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmkt
Pm5pX3ZhcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX21lc2hfc3RhdGUgKm1zID0gdmFwLT5pdl9tZXNo
OwotCXN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJfaWUgcGVycjsKLQlzdHJ1Y3QgaWVlZTgwMjEx
X21lc2hfcm91dGUgKnJ0OworCXN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJfaWUgKnBlcnI7CisJ
c3RydWN0IGllZWU4MDIxMV9tZXNoX3JvdXRlICpydCwgKm5leHQ7CiAJc3RydWN0IGllZWU4MDIx
MV9od21wX3JvdXRlICpocjsKKwlpbnQgaSA9IDA7CisJCisJcGVyciA9IG1hbGxvYyhzaXplb2Yo
c3RydWN0IGllZWU4MDIxMV9tZXNocGVycl9pZSkgKyAKKwkJCUlFRUU4MDIxMV9IV01QX1BFUlJf
TUFYREVTVCpzaXplb2YoKnBlcnItPnBlcnJfZGVzdHMpLAorCQkJTV84MDIxMV9IV01QX1BFUlIs
IE1fTk9XQUlUIHwgTV9aRVJPKTsKKwlLQVNTRVJUKHBlcnIgIT0gTlVMTCwgKCJlcnJvciBhbGxv
Y2F0aW9uZyBQRVJSIikpOwogCiAJcnQgPSBpZWVlODAyMTFfbWVzaF9ydF9maW5kKHZhcCwgbmkt
Pm5pX21hY2FkZHIpOwogCWlmIChydCA9PSBOVUxMKQpAQCAtMTExNywxOCArMTE1MywzMyBAQCBo
d21wX3BlZXJkb3duKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCiAJaHIgPSBJRUVFODAyMTFf
TUVTSF9ST1VURV9QUklWKHJ0LCBzdHJ1Y3QgaWVlZTgwMjExX2h3bXBfcm91dGUpOwogCUlFRUU4
MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01QLCBuaSwKIAkgICAgIiVzIiwgImRlbGV0
ZSByb3V0ZSBlbnRyeSIpOwotCXBlcnIucGVycl90dGwgPSBtcy0+bXNfdHRsOwotCXBlcnIucGVy
cl9uZGVzdHMgPSAxOwotCVBFUlJfREZMQUdTKDApID0gMDsKLQlpZiAoaHItPmhyX3NlcSA9PSAw
KQotCQlQRVJSX0RGTEFHUygwKSB8PSBJRUVFODAyMTFfTUVTSFBFUlJfREZMQUdTX1VTTjsKLQlQ
RVJSX0RGTEFHUygwKSB8PSBJRUVFODAyMTFfTUVTSFBFUlJfREZMQUdTX1JDOwotCUlFRUU4MDIx
MV9BRERSX0NPUFkoUEVSUl9EQUREUigwKSwgcnQtPnJ0X2Rlc3QpOwotCVBFUlJfRFNFUSgwKSA9
IGhyLT5ocl9zZXE7Ci0JUEVSUl9EUkNPREUoMCkgPSBJRUVFODAyMTFfUkVBU09OX01FU0hfUEVS
Ul9ERVNUX1VOUkVBQ0g7CisJcGVyci0+cGVycl90dGwgPSBtcy0+bXNfdHRsOworCQorCS8qIGZp
bmQgYWxsIGRlc3RpbmF0aW9ucyB0aGF0IGhhdmUgbmktPm5pX21hY2FkZHIgYXMgbmV4dGhvcCBh
bmQgYWRkIHRvIFBFUlIqLworCU1FU0hfUlRfTE9DSyhtcyk7CisJVEFJTFFfRk9SRUFDSF9TQUZF
KHJ0LCAmbXMtPm1zX3JvdXRlcywgcnRfbmV4dCwgbmV4dCkgeworCQlpZiAoKHJ0LT5ydF9mbGFn
cyAmIElFRUU4MDIxMV9NRVNIUlRfRkxBR1NfVkFMSUQpICYmCisJCSAgICBJRUVFODAyMTFfQURE
Ul9FUShydC0+cnRfbmV4dGhvcCwgbmktPm5pX21hY2FkZHIpKXsKKwkJCWhyID0gSUVFRTgwMjEx
X01FU0hfUk9VVEVfUFJJVihydCwgc3RydWN0IGllZWU4MDIxMV9od21wX3JvdXRlKTsKKwkJCUtB
U1NFUlQoaSA8IElFRUU4MDIxMV9IV01QX1BFUlJfTUFYREVTVCwgKCJQRVJSIG1heCBkZXN0aW5h
dGlvbiBvdmVyZmxvdyIpKTsKKwkJCVBFUlJfREZMQUdTKGkpID0gMDsKKwkJCWlmIChoci0+aHJf
c2VxID09IDApCisJCQkJUEVSUl9ERkxBR1MoaSkgfD0gSUVFRTgwMjExX01FU0hQRVJSX0RGTEFH
U19VU047CisJCQlJRUVFODAyMTFfQUREUl9DT1BZKFBFUlJfREFERFIoaSksIHJ0LT5ydF9kZXN0
KTsKKwkJCVBFUlJfRFNFUShpKSA9ICsraHItPmhyX3NlcTsKKwkJCVBFUlJfRFJDT0RFKGkpID0g
SUVFRTgwMjExX1JFQVNPTl9NRVNIX1BFUlJfREVTVF9VTlJFQUNIOworCQkJSUVFRTgwMjExX05P
VEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIG5pLCAiUEVSUjogZm91bmQgdW5yZWNoYWJsZSBk
ZXN0aW5hdGlvbiAlcyIsIGV0aGVyX3NwcmludGYoUEVSUl9EQUREUihpKSkpOworCQkJKytpOwor
CQl9CisJfQorCU1FU0hfUlRfVU5MT0NLKG1zKTsKKwkKKwlwZXJyLT5wZXJyX25kZXN0cyA9IGk7
CisJCiAJLyogTkI6IGZsdXNoIGV2ZXJ5dGhpbmcgcGFzc2luZyB0aHJvdWdoIHBlZXIgKi8KIAlp
ZWVlODAyMTFfbWVzaF9ydF9mbHVzaF9wZWVyKHZhcCwgbmktPm5pX21hY2FkZHIpOwotCWh3bXBf
c2VuZF9wZXJyKHZhcC0+aXZfYnNzLCB2YXAtPml2X215YWRkciwgYnJvYWRjYXN0YWRkciwgJnBl
cnIpOworCWh3bXBfc2VuZF9wZXJyKHZhcC0+aXZfYnNzLCB2YXAtPml2X215YWRkciwgYnJvYWRj
YXN0YWRkciwgcGVycik7CisJZnJlZShwZXJyLCBNXzgwMjExX0hXTVBfUEVSUik7CiB9CiAjdW5k
ZWYJUEVSUl9ERkxBR1MKICN1bmRlZglQRVJSX0RBRERSCkBAIC0xMTQ2LDQ0ICsxMTk3LDg3IEBA
IGh3bXBfcmVjdl9wZXJyKHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgc3RydWN0IGllZWU4MDIx
MV9ub2RlICpuaSwKIAlzdHJ1Y3QgaWVlZTgwMjExX21lc2hfc3RhdGUgKm1zID0gdmFwLT5pdl9t
ZXNoOwogCXN0cnVjdCBpZWVlODAyMTFfbWVzaF9yb3V0ZSAqcnQgPSBOVUxMOwogCXN0cnVjdCBp
ZWVlODAyMTFfaHdtcF9yb3V0ZSAqaHI7Ci0gCXN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJfaWUg
cHBlcnI7Ci0JaW50IGksIGZvcndhcmQgPSAwOworCXN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJf
aWUgKnBwZXJyOworCWludCBpLCBrLCBmb3J3YXJkID0gMDsKKwlpbnQgbnVtX3VucmNoYmxfZGVz
dCA9IDA7IC8vIG51bWJlciBvZiB1bnJlYWNoYWJsZSBkZXN0aW5hdGlvbiByZWxldmFudCB0byB1
cy4gWmVybyBtZWFucyB0byByZWplY3QgUEVSUi4KKwlpbnQgdW5yY2hibF9kZXN0W0lFRUU4MDIx
MV9IV01QX1BFUlJfTUFYREVTVF07CiAKIAkvKgogCSAqIEFjY2VwdGFuY2UgY3JpdGVyaWE6IGNo
ZWNrIGlmIHdlIHJlY2VpdmVkIGEgUEVSUiBmcm9tIGEKLQkgKiBuZWlnaGJvciBhbmQgZm9yd2Fy
ZGluZyBpcyBlbmFibGVkLgorCSAqIG5laWdoYm9yLgogCSAqLwogCWlmIChuaSA9PSB2YXAtPml2
X2JzcyB8fAotCSAgICBuaS0+bmlfbWxzdGF0ZSAhPSBJRUVFODAyMTFfTk9ERV9NRVNIX0VTVEFC
TElTSEVEIHx8Ci0JICAgICEobXMtPm1zX2ZsYWdzICYgSUVFRTgwMjExX01FU0hGTEFHU19GV0Qp
KQorCSAgICBuaS0+bmlfbWxzdGF0ZSAhPSBJRUVFODAyMTFfTk9ERV9NRVNIX0VTVEFCTElTSEVE
KQogCQlyZXR1cm47CisJCQogCS8qCi0JICogRmluZCBhbGwgcm91dGluZyBlbnRyaWVzIHRoYXQg
bWF0Y2ggYW5kIGRlbGV0ZSB0aGVtLgorCSAqIEFjY2VwdGFuY2UgY3JpdGVyaWE6IGNoZWNrIGlm
IG9uZSBvZiB0aGUgZGVzdGluYXRpb24gYWRkcmVzc2VzIGluIFBFUlIKKwkgKiBpcyBpbiBmb3J3
YXJkaW5nIGluZm9ybWF0aW9uIHdpdGggbmV4dCBob3AgZXF1YWxzIHRvIHRyYW5zbWl0dGVyIGFk
ZHJlc3MuCisJICogQWxzbyBidWlsZCBhIGxpc3Qgb2YgdW5yZWFjaGJsZSBkZXN0aW5hdGlvbiBy
ZWxhdmFudCBmb3IgdXMsIGZvciB3aGVuIFBFUlIgZ2V0cyBhY2NlcHRlZC4KIAkgKi8KKwlrID0g
MDsKIAlmb3IgKGkgPSAwOyBpIDwgcGVyci0+cGVycl9uZGVzdHM7IGkrKykgewogCQlydCA9IGll
ZWU4MDIxMV9tZXNoX3J0X2ZpbmQodmFwLCBQRVJSX0RBRERSKGkpKTsKIAkJaWYgKHJ0ID09IE5V
TEwpCiAJCQljb250aW51ZTsKKwkJaWYoKHJ0LT5ydF9mbGFncyAmIElFRUU4MDIxMV9NRVNIUlRf
RkxBR1NfVkFMSUQpICYmCisJCQlJRUVFODAyMTFfQUREUl9FUShydC0+cnRfbmV4dGhvcCwgd2gt
PmlfYWRkcjIpKXsKKwkJCXVucmNoYmxfZGVzdFtrKytdID0gaTsKKwkJCSsrbnVtX3VucmNoYmxf
ZGVzdDsKKwkJfQorCX0KKwlpZighbnVtX3VucmNoYmxfZGVzdCl7CisJCUlFRUU4MDIxMV9ESVND
QVJEX01BQyh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmktPm5pX21hY2FkZHIsIAorCQkJCU5V
TEwsICIlcyIsICJQRVJSIHVucmVsZXZhbnQiKTsKKwkJcmV0dXJuOworCX0KKwkKKwkvKiBQRVJS
IEFDQ0VQVEVEICovCisJCisJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0hXTVAs
IG5pLCAicmVjZWl2ZWQgUEVSUiwgbnVtYmVyIG9mIGRlc3RpbmF0aW9ucyAlZCwgdW5yZWFjaGFi
bGUgJWQiLCBwZXJyLT5wZXJyX25kZXN0cywgbnVtX3VucmNoYmxfZGVzdCk7CisJCisJZm9yKGkg
PSAwOyBpPG51bV91bnJjaGJsX2Rlc3Q7IGkrKykgeworCQlydCA9IGllZWU4MDIxMV9tZXNoX3J0
X2ZpbmQodmFwLCBQRVJSX0RBRERSKGkpKTsKKwkJaWYgKHJ0ID09IE5VTEwpIC8vWFhYOiB3ZSAg
a25vdyBpdCBpcyBub3QgbnVsbCEKKwkJCWNvbnRpbnVlOwogCQlociA9IElFRUU4MDIxMV9NRVNI
X1JPVVRFX1BSSVYocnQsIHN0cnVjdCBpZWVlODAyMTFfaHdtcF9yb3V0ZSk7Ci0JCWlmICghKFBF
UlJfREZMQUdTKDApICYgSUVFRTgwMjExX01FU0hQRVJSX0RGTEFHU19VU04pICYmIAotCQkgICAg
SFdNUF9TRVFfR0VRKFBFUlJfRFNFUShpKSwgaHItPmhyX3NlcSkpIHsKLQkJCWllZWU4MDIxMV9t
ZXNoX3J0X2RlbCh2YXAsIHJ0LT5ydF9kZXN0KTsKLQkJCWllZWU4MDIxMV9tZXNoX3J0X2ZsdXNo
X3BlZXIodmFwLCBydC0+cnRfZGVzdCk7Ci0JCQlydCA9IE5VTEw7Ci0JCQlmb3J3YXJkID0gMTsK
KwkJCisJCWlmKChQRVJSX0RSQ09ERShpKSAmIElFRUU4MDIxMV9SRUFTT05fTUVTSF9QRVJSX05P
X0ZJKSAmJgorCQkJUEVSUl9EU0VRKGkpID09IDApeworCQkJSUVFRTgwMjExX05PVEUodmFwLCBJ
RUVFODAyMTFfTVNHX0hXTVAsIG5pLAorCQkJCSAgICAgICAiUEVSUjogbm8gZm9yd2FyZGluZyBp
bmZvcm1hdGlvbiBmb3IgZGVzdGluYXRpb24gJXMiLAorCQkJCSAgICAgICBldGhlcl9zcHJpbnRm
KFBFUlJfREFERFIodW5yY2hibF9kZXN0W2ldKSkpOworCQkJaHItPmhyX3NlcSsrOyAvLyAxMUMu
OS4xMS40LjMgZWZmZWN0IG9mIHJlY2VpcHQgY2FzZSBiKQorCQl9ZWxzZSBpZihIV01QX1NFUV9H
VChQRVJSX0RTRVEoaSksIGhyLT5ocl9zZXEpKXsgLy9jYXNlIGMpCisJCQlJRUVFODAyMTFfTk9U
RSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCisJCQkJICAgICAgICJQRVJSOiB1bnJlY2hh
YmxlIGRlc3RpbmF0aW9uICVzIHdpdGggcGVyciBzZXEgJWQgPiBzdG9yZWQgc2VxICVkIiwKKwkJ
CQkgICAgICAgZXRoZXJfc3ByaW50ZihQRVJSX0RBRERSKHVucmNoYmxfZGVzdFtpXSkpLCBQRVJS
X0RTRVEoaSksIGhyLT5ocl9zZXEpOworCQkJaHItPmhyX3NlcSA9IFBFUlJfRFNFUShpKTsKKwkJ
CXJ0LT5ydF9mbGFncyAmPSB+SUVFRTgwMjExX01FU0hSVF9GTEFHU19WQUxJRDsgLy9pbnZsaWRh
dGUgZm9yd2FyZGluZyBpbmZvcm1hdGlvbgorCQkJKytmb3J3YXJkOworCQl9ZWxzZXsKKwkJCUlF
RUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19IV01QLCBuaSwKKwkJCQkgICAgICAgIlBF
UlI6IHVucmVjaGFibGUgZGVzdGluYXRpb24gJXMgd2l0aCBwZXJyIHNlcSAlZCA8IHN0b3JlZCBz
ZXEgJWQiLAorCQkJCSAgICAgICBldGhlcl9zcHJpbnRmKFBFUlJfREFERFIodW5yY2hibF9kZXN0
W2ldKSksIFBFUlJfRFNFUShpKSwgaHItPmhyX3NlcSk7CiAJCX0KIAl9CisKIAkvKgogCSAqIFBy
b3BhZ2F0ZSB0aGUgUEVSUiBpZiB3ZSBwcmV2aW91c2x5IGZvdW5kIGl0IG9uIG91ciByb3V0aW5n
IHRhYmxlLgotCSAqIFhYWCBoYW5kbGUgbmRlc3QgPiAxCiAJICovCi0JaWYgKGZvcndhcmQgJiYg
cGVyci0+cGVycl90dGwgPiAxKSB7CisJaWYgKGZvcndhcmQgPiAxMDAgJiYgcGVyci0+cGVycl90
dGwgPiAxICYmCisJICAgIChtcy0+bXNfZmxhZ3MgJiBJRUVFODAyMTFfTUVTSEZMQUdTX0ZXRCkp
IHsKKwkJcHBlcnIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJfaWUp
ICsgCisJCSAgICAocGVyci0+cGVycl9uZGVzdHMtMSkqc2l6ZW9mKCpwZXJyLT5wZXJyX2Rlc3Rz
KSwKKwkJICAgIE1fODAyMTFfSFdNUF9QRVJSLCBNX05PV0FJVCB8IE1fWkVSTyk7CisJCUtBU1NF
UlQocHBlcnIgIT0gTlVMTCwgKCJlcnJvciBhbGxvY2F0aW9uZyBQRVJSIikpOworCQltZW1jcHko
cHBlcnIsIHBlcnIsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hwZXJyX2llKSArIAorCQkg
ICAgKHBlcnItPnBlcnJfbmRlc3RzLTEpKnNpemVvZigqcGVyci0+cGVycl9kZXN0cykpOwogCQlJ
RUVFODAyMTFfTk9URSh2YXAsIElFRUU4MDIxMV9NU0dfSFdNUCwgbmksCiAJCSAgICAicHJvcGFn
YXRlIFBFUlIgZnJvbSAlcyIsIGV0aGVyX3NwcmludGYod2gtPmlfYWRkcjIpKTsKLQkJbWVtY3B5
KCZwcGVyciwgcGVyciwgc2l6ZW9mKCpwZXJyKSk7Ci0JCXBwZXJyLnBlcnJfdHRsLS07Ci0JCWh3
bXBfc2VuZF9wZXJyKHZhcC0+aXZfYnNzLCB2YXAtPml2X215YWRkciwgYnJvYWRjYXN0YWRkciwK
LQkJICAgICZwcGVycik7CisJCXBwZXJyLT5wZXJyX3R0bC0tOworCQlod21wX3NlbmRfcGVycih2
YXAtPml2X2JzcywgdmFwLT5pdl9teWFkZHIsIGJyb2FkY2FzdGFkZHIsIHBwZXJyKTsKKwkJZnJl
ZShwcGVyciwgTV84MDIxMV9IV01QX1BFUlIpOwogCX0KIH0KICN1bmRlZglQRUVSX0RBRERSCkBA
IC0xMjE0LDggKzEzMDgsOCBAQCBod21wX3NlbmRfcGVycihzdHJ1Y3QgaWVlZTgwMjExX25vZGUg
Km5pLAogCSAqICAgICBbdGx2XSBtZXNoIHBhdGggZXJyb3IKIAkgKi8KIAlwZXJyLT5wZXJyX2ll
ID0gSUVFRTgwMjExX0VMRU1JRF9NRVNIUEVSUjsKLQlyZXR1cm4gaHdtcF9zZW5kX2FjdGlvbihu
aSwgc2EsIGRhLCAodWludDhfdCAqKXBlcnIsCi0JICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjEx
X21lc2hwZXJyX2llKSk7CisJcGVyci0+cGVycl9sZW4gPSBJRUVFODAyMTFfTUVTSFBFUlJfQkFT
RV9TWiArIHBlcnItPnBlcnJfbmRlc3RzICogSUVFRTgwMjExX01FU0hQRVJSX0RFU1RfU1o7CisJ
cmV0dXJuIGh3bXBfc2VuZF9hY3Rpb24obmksIHNhLCBkYSwgKHVpbnQ4X3QgKilwZXJyLCBwZXJy
LT5wZXJyX2xlbisyKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEzMjMsMTMgKzE0MTcsMTMgQEAg
aHdtcF9kaXNjb3ZlcihzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCiAJCQkvKiBYWFggY2hlY2sg
cHJlcSByZXRyaWVzICovCiAJCQlzZW5kcHJlcSA9IDE7CiAJCQlJRUVFODAyMTFfTk9URV9NQUMo
dmFwLCBJRUVFODAyMTFfTVNHX0hXTVAsIGRlc3QsCi0JCQkgICAgInN0YXJ0IHBhdGggZGlzY292
ZXJ5IChzcmMgJXMpIiwKKwkJCSAgICAic3RhcnQgcGF0aCBkaXNjb3ZlcnkgKHNyYyAlcyksIHRh
cmdldCBzZXEgJXUiLAogCQkJICAgIG0gPT0gTlVMTCA/ICI8bm9uZT4iIDogZXRoZXJfc3ByaW50
ZigKLQkJCQltdG9kKG0sIHN0cnVjdCBldGhlcl9oZWFkZXIgKiktPmV0aGVyX3Nob3N0KSk7CisJ
CQkJbXRvZChtLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICopLT5ldGhlcl9zaG9zdCksIGhyLT5ocl9z
ZXEpOwogCQkJLyoKIAkJCSAqIFRyeSB0byBkaXNjb3ZlciB0aGUgcGF0aCBmb3IgdGhpcyBub2Rl
LgogCQkJICovCi0JCQlwcmVxLnByZXFfZmxhZ3MgPSAwOworCQkJcHJlcS5wcmVxX2ZsYWdzID0g
SUVFRTgwMjExX01FU0hQUkVRX0ZMQUdTX0FNOyAvKiBHcm91cCBhZGRyZXNzZWQgUFJFUSBDYXNl
IEEgKi8KIAkJCXByZXEucHJlcV9ob3Bjb3VudCA9IDA7CiAJCQlwcmVxLnByZXFfdHRsID0gbXMt
Pm1zX3R0bDsKIAkJCXByZXEucHJlcV9pZCA9ICsraHMtPmhzX3ByZXFpZDsKQEAgLTEzNDUsNyAr
MTQzOSw3IEBAIGh3bXBfZGlzY292ZXIoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAogCQkJaWYg
KGllZWU4MDIxMV9od21wX3JlcGx5Zm9yd2FyZCkKIAkJCQlQUkVRX1RGTEFHUygwKSB8PSBJRUVF
ODAyMTFfTUVTSFBSRVFfVEZMQUdTX1JGOwogCQkJUFJFUV9URkxBR1MoMCkgfD0gSUVFRTgwMjEx
X01FU0hQUkVRX1RGTEFHU19VU047Ci0JCQlQUkVRX1RTRVEoMCkgPSAwOworCQkJUFJFUV9UU0VR
KDApID0gaHItPmhyX3NlcTsKIAkJCS8qIFhYWCBjaGVjayByZXR1cm4gdmFsdWUgKi8KIAkJCWh3
bXBfc2VuZF9wcmVxKHZhcC0+aXZfYnNzLCB2YXAtPml2X215YWRkciwKIAkJCSAgICBicm9hZGNh
c3RhZGRyLCAmcHJlcSk7CmRpZmYgLS1naXQgYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2gu
aCBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfbWVzaC5oCmluZGV4IGFkMWIwMmEuLmE2N2Y5MDAg
MTAwNjQ0Ci0tLSBhL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfbWVzaC5oCisrKyBiL3N5cy9uZXQ4
MDIxMS9pZWVlODAyMTFfbWVzaC5oCkBAIC0xODMsNiArMTgzLDkgQEAgc3RydWN0IGllZWU4MDIx
MV9tZXNocmFubl9pZSB7CiB9IF9fcGFja2VkOwogCiAvKiBNZXNoIFBhdGggUmVxdWVzdCAqLwor
I2RlZmluZSBJRUVFODAyMTFfTUVTSFBSRVFfQkFTRV9TWiAJKDI2KQorI2RlZmluZSBJRUVFODAy
MTFfTUVTSFBSRVFfQkFTRV9TWl9BRSAJKDMyKQorI2RlZmluZSBJRUVFODAyMTFfTUVTSFBSRVFf
VFJHVF9TWiAJKDExKQogc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcV9pZSB7CiAJdWludDhfdAkJ
cHJlcV9pZTsJLyogSUVFRTgwMjExX0VMRU1JRF9NRVNIUFJFUSAqLwogCXVpbnQ4X3QJCXByZXFf
bGVuOwpAQCAtMTk2LDcgKzE5OSw4IEBAIHN0cnVjdCBpZWVlODAyMTFfbWVzaHByZXFfaWUgewog
CXVpbnQzMl90CXByZXFfaWQ7CiAJdWludDhfdAkJcHJlcV9vcmlnYWRkcltJRUVFODAyMTFfQURE
Ul9MRU5dOwogCXVpbnQzMl90CXByZXFfb3JpZ3NlcTsJLyogSFdNUCBTZXF1ZW5jZSBOdW1iZXIg
Ki8KLQkvKiBOQjogbWF5IGhhdmUgT3JpZ2luYXRvciBQcm94aWVkIEFkZHJlc3MgKi8KKwkvKiBO
QjogbWF5IGhhdmUgT3JpZ2luYXRvciBFeHRlcm5hbCBBZGRyZXNzICovCisJdWludDhfdAkJcHJl
cV9vcmlnX2V4dF9hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CiAJdWludDMyX3QJcHJlcV9saWZl
dGltZTsKIAl1aW50MzJfdAlwcmVxX21ldHJpYzsKIAl1aW50OF90CQlwcmVxX3Rjb3VudDsJLyog
dGFyZ2V0IGNvdW50ICovCkBAIC0yMDksOCArMjEzLDExIEBAIHN0cnVjdCBpZWVlODAyMTFfbWVz
aHByZXFfaWUgewogCQl1aW50MzJfdAl0YXJnZXRfc2VxOwkvKiBIV01QIFNlcXVlbmNlIE51bWJl
ciAqLwogCX0gX19wYWNrZWQgcHJlcV90YXJnZXRzWzFdOwkJLyogTkI6IHZhcmlhYmxlIHNpemUg
Ki8KIH0gX19wYWNrZWQ7CitNQUxMT0NfREVDTEFSRShNXzgwMjExX0hXTVBfUFJFUSk7CiAKIC8q
IE1lc2ggUGF0aCBSZXBseSAqLworI2RlZmluZSBJRUVFODAyMTFfTUVTSFBSRVBfQkFTRV9TWiAJ
KDMxKQorI2RlZmluZSBJRUVFODAyMTFfTUVTSFBSRVBfQkFTRV9TWl9BRSAJKDM3KQogc3RydWN0
IGllZWU4MDIxMV9tZXNocHJlcF9pZSB7CiAJdWludDhfdAkJcHJlcF9pZTsJLyogSUVFRTgwMjEx
X0VMRU1JRF9NRVNIUFJFUCAqLwogCXVpbnQ4X3QJCXByZXBfbGVuOwpAQCAtMjE5LDE0ICsyMjYs
MTkgQEAgc3RydWN0IGllZWU4MDIxMV9tZXNocHJlcF9pZSB7CiAJdWludDhfdAkJcHJlcF90dGw7
CiAJdWludDhfdAkJcHJlcF90YXJnZXRhZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CiAJdWludDMy
X3QJcHJlcF90YXJnZXRzZXE7Ci0JLyogTkI6IE1heSBoYXZlIFRhcmdldCBQcm94aWVkIEFkZHJl
c3MgKi8KKwkvKiBOQjogTWF5IGhhdmUgVGFyZ2V0IEV4dGVybmFsIEFkZHJlc3MgKi8KKwl1aW50
OF90CQlwcmVwX3RhcmdldF9leHRfYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOwogCXVpbnQzMl90
CXByZXBfbGlmZXRpbWU7CiAJdWludDMyX3QJcHJlcF9tZXRyaWM7CiAJdWludDhfdAkJcHJlcF9v
cmlnYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOwogCXVpbnQzMl90CXByZXBfb3JpZ3NlcTsJLyog
SFdNUCBTZXF1ZW5jZSBOdW1iZXIgKi8KIH0gX19wYWNrZWQ7CitNQUxMT0NfREVDTEFSRShNXzgw
MjExX0hXTVBfUFJFUCk7CiAKIC8qIE1lc2ggUGF0aCBFcnJvciAqLworI2RlZmluZSBJRUVFODAy
MTFfTUVTSFBFUlJfQkFTRV9TWiAJKDIpCisjZGVmaW5lIElFRUU4MDIxMV9NRVNIUEVSUl9ERVNU
X1NaIAkoMTMpCisjZGVmaW5lIElFRUU4MDIxMV9NRVNIUEVSUl9ERVNUX1NaX0FFIAkoMTkpCiBz
dHJ1Y3QgaWVlZTgwMjExX21lc2hwZXJyX2llIHsKIAl1aW50OF90CQlwZXJyX2llOwkvKiBJRUVF
ODAyMTFfRUxFTUlEX01FU0hQRVJSICovCiAJdWludDhfdAkJcGVycl9sZW47CkBAIC0yMzgsOSAr
MjUwLDEyIEBAIHN0cnVjdCBpZWVlODAyMTFfbWVzaHBlcnJfaWUgewogI2RlZmluZQlJRUVFODAy
MTFfTUVTSFBFUlJfREZMQUdTX1JDCTB4MDIKIAkJdWludDhfdAkJZGVzdF9hZGRyW0lFRUU4MDIx
MV9BRERSX0xFTl07CiAJCXVpbnQzMl90CWRlc3Rfc2VxOwkvKiBIV01QIFNlcXVlbmNlIE51bWJl
ciAqLworCQkvKiBOQjogTWF5IGhhdmUgRGVzdGluYXRpb24gRXh0ZXJuYWwgQWRkcmVzcyAqLwor
CQl1aW50OF90CQlkZXN0X2V4dF9hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CiAJCXVpbnQxNl90
CWRlc3RfcmNvZGU7CiAJfSBfX3BhY2tlZCBwZXJyX2Rlc3RzWzFdOwkJLyogTkI6IHZhcmlhYmxl
IHNpemUgKi8KIH0gX19wYWNrZWQ7CitNQUxMT0NfREVDTEFSRShNXzgwMjExX0hXTVBfUEVSUik7
CiAKICNpZmRlZiBub3R5ZXQKIC8qIE1lc2ggUHJveHkgVXBkYXRlICovCmRpZmYgLS1naXQgYS9z
eXMvbmV0ODAyMTEvaWVlZTgwMjExX25vZGUuaCBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfbm9k
ZS5oCmluZGV4IGMxZmMwMDYuLmRhYWY3NGMgMTAwNjQ0Ci0tLSBhL3N5cy9uZXQ4MDIxMS9pZWVl
ODAyMTFfbm9kZS5oCisrKyBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfbm9kZS5oCkBAIC00Nyw3
ICs0Nyw3IEBACiAjZGVmaW5lCUlFRUU4MDIxMV9JTkFDVF9XQUlUCTE1CQkvKiBpbmFjdGl2aXR5
IGludGVydmFsIChzZWNzKSAqLwogI2RlZmluZQlJRUVFODAyMTFfSU5BQ1RfSU5JVAkoMzAvSUVF
RTgwMjExX0lOQUNUX1dBSVQpCS8qIGluaXRpYWwgKi8KICNkZWZpbmUJSUVFRTgwMjExX0lOQUNU
X0FVVEgJKDE4MC9JRUVFODAyMTFfSU5BQ1RfV0FJVCkJLyogYXNzb2NpYXRlZCBidXQgbm90IGF1
dGhvcml6ZWQgKi8KLSNkZWZpbmUJSUVFRTgwMjExX0lOQUNUX1JVTgkoMzAwL0lFRUU4MDIxMV9J
TkFDVF9XQUlUKQkvKiBhdXRob3JpemVkICovCisjZGVmaW5lCUlFRUU4MDIxMV9JTkFDVF9SVU4J
KDMwL0lFRUU4MDIxMV9JTkFDVF9XQUlUKQkvKiBhdXRob3JpemVkICovCiAjZGVmaW5lCUlFRUU4
MDIxMV9JTkFDVF9QUk9CRQkoMzAvSUVFRTgwMjExX0lOQUNUX1dBSVQpCS8qIHByb2JlICovCiAj
ZGVmaW5lCUlFRUU4MDIxMV9JTkFDVF9TQ0FOCSgzMDAvSUVFRTgwMjExX0lOQUNUX1dBSVQpCS8q
IHNjYW5uZWQgKi8KIAo=
--90e6ba6e82fab75f8804ad0c103b--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CA%2BsBSoJwkVMTAbybPbHFdz6CHbjDzF5PRgxpXoWHVESpAfEQKg>