Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Feb 2013 07:10:09 -0800
From:      Adrian Chadd <adrian@freebsd.org>
To:        Monthadar Al Jaberi <monthadar@gmail.com>
Cc:        PseudoCylon <moonlightakkiy@yahoo.ca>, freebsd-wireless@freebsd.org
Subject:   Re: [RFC] serialising net80211 TX
Message-ID:  <CAJ-Vmon=SdO66j99dEPT1uSqhmJoNPYVexy-PT0__XTX3My%2BTQ@mail.gmail.com>
In-Reply-To: <CAJ-VmomHCz2nEd-GEh2JKoYbfAdsG0xYbAt=j-BqW6D5jHxMeQ@mail.gmail.com>
References:  <CAFZ_MYJjV=5FtEmWkO7rRBtAuvn2R0Ec=O0ojhPxBfcBuLRUJQ@mail.gmail.com> <CAJ-VmonAXBxuD51y-j5PEt4uGHO_EX15C3inj9wTmR%2BJnb21LA@mail.gmail.com> <CAFZ_MYLswF_3OvEg=uc5GXUAi=EipXmqj-cAWjRC9xi93V-R1Q@mail.gmail.com> <CAJ-Vmon%2BuSKwkEkeiUsC=Gh%2Bk=uVpZdXM5kTKtP_cmfBD0nwjg@mail.gmail.com> <CAJ-VmomMnZ7EM=bgS9NpM_pYDaLQxFg5k2vd7vrdEa4oYx3XNw@mail.gmail.com> <CAJ-Vmo=g5F06dY0p9mOYxY_%2Bh1bLNdQ7%2BukQToU5eb4E%2BNuBuA@mail.gmail.com> <CA%2BsBSoJZ0uQm_M_OZ-eOSCVFtvu7DeboE28JNbLrY15BTcRRhA@mail.gmail.com> <CAJ-Vmo=sJ3Qh8VU%2B99bNr-a3wm5E6e9c=O_qy3w-6ERkVGj5MA@mail.gmail.com> <CAJ-VmomHCz2nEd-GEh2JKoYbfAdsG0xYbAt=j-BqW6D5jHxMeQ@mail.gmail.com>

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

Here's my current patch. I've tested it lightly in AP mode.



Adrian

--f46d0438eddbcd315904d6153cbc
Content-Type: application/octet-stream; 
	name="20130218-net80211-tx-lock-3.diff"
Content-Disposition: attachment; filename="20130218-net80211-tx-lock-3.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hdd6w9sq0

SW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaHdtcC5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9u
ZXQ4MDIxMS9pZWVlODAyMTFfaHdtcC5jCShyZXZpc2lvbiAyNDY4MTgpCisrKyBzeXMvbmV0ODAy
MTEvaWVlZTgwMjExX2h3bXAuYwkod29ya2luZyBjb3B5KQpAQCAtNTkyLDYgKzU5Miw3IEBACiAJ
c3RydWN0IGllZWU4MDIxMV9icGZfcGFyYW1zIHBhcmFtczsKIAlzdHJ1Y3QgbWJ1ZiAqbTsKIAl1
aW50OF90ICpmcm07CisJaW50IHJldDsKIAogCWlmIChJRUVFODAyMTFfSVNfTVVMVElDQVNUKGRh
KSkgewogCQluaSA9IGllZWU4MDIxMV9yZWZfbm9kZSh2YXAtPml2X2Jzcyk7CkBAIC02NjksNyAr
NjcwLDEwIEBACiAJZWxzZQogCQlwYXJhbXMuaWJwX3RyeTAgPSBuaS0+bmlfdHhwYXJtcy0+bWF4
cmV0cnk7CiAJcGFyYW1zLmlicF9wb3dlciA9IG5pLT5uaV90eHBvd2VyOwotCXJldHVybiBpYy0+
aWNfcmF3X3htaXQobmksIG0sICZwYXJhbXMpOworCUlFRUU4MDIxMV9WQVBfVFhfTE9DSyh2YXAp
OworCXJldCA9IGljLT5pY19yYXdfeG1pdChuaSwgbSwgJnBhcmFtcyk7CisJSUVFRTgwMjExX1ZB
UF9UWF9VTkxPQ0sodmFwKTsKKwlyZXR1cm4gKHJldCk7CiB9CiAKICNkZWZpbmUgQUREU0hPUlQo
ZnJtLCB2KSBkbyB7CQlcCkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2h0LmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9odC5jCShyZXZpc2lvbiAyNDY4MTgpCisr
KyBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2h0LmMJKHdvcmtpbmcgY29weSkKQEAgLTIzOTIsNyAr
MjM5Miw5IEBACiAJICogaWNfcmF3X3htaXQgd2lsbCBmcmVlIHRoZSBub2RlIHJlZmVyZW5jZQog
CSAqIHJlZ2FyZGxlc3Mgb2YgcXVldWUvVFggc3VjY2VzcyBvciBmYWlsdXJlLgogCSAqLworCUlF
RUU4MDIxMV9WQVBfVFhfTE9DSyh2YXApOwogCXJldCA9IGljLT5pY19yYXdfeG1pdChuaSwgbSwg
TlVMTCk7CisJSUVFRTgwMjExX1ZBUF9UWF9VTkxPQ0sodmFwKTsKIAlpZiAocmV0ICE9IDApIHsK
IAkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX0RFQlVHIHwgSUVFRTgwMjExX01T
R18xMU4sCiAJCSAgICBuaSwgInNlbmQgQkFSOiBmYWlsZWQ6IChyZXQgPSAlZClcbiIsCkluZGV4
OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAy
MTEvaWVlZTgwMjExX21lc2guYwkocmV2aXNpb24gMjQ2ODYxKQorKysgc3lzL25ldDgwMjExL2ll
ZWU4MDIxMV9tZXNoLmMJKHdvcmtpbmcgY29weSkKQEAgLTEwNDYsNiArMTA0Niw4IEBACiAJc3Ry
dWN0IGV0aGVyX2hlYWRlciAqZWg7CiAJaW50IGVycm9yOwogCisJSUVFRTgwMjExX1ZBUF9UWF9V
TkxPQ0tfQVNTRVJUKHZhcCk7CisKIAllaCA9IG10b2QobSwgc3RydWN0IGV0aGVyX2hlYWRlciAq
KTsKIAluaSA9IGllZWU4MDIxMV9tZXNoX2ZpbmRfdHhub2RlKHZhcCwgcnRfZ2F0ZS0+cnRfZGVz
dCk7CiAJaWYgKG5pID09IE5VTEwpIHsKQEAgLTExMzIsNiArMTEzNCw3IEBACiAJCX0KIAl9CiAj
ZW5kaWYgLyogSUVFRTgwMjExX1NVUFBPUlRfU1VQRVJHICovCisJSUVFRTgwMjExX1ZBUF9UWF9M
T0NLKHZhcCk7CiAJaWYgKF9fcHJlZGljdF90cnVlKCh2YXAtPml2X2NhcHMgJiBJRUVFODAyMTFf
Q184MDIzRU5DQVApID09IDApKSB7CiAJCS8qCiAJCSAqIEVuY2Fwc3VsYXRlIHRoZSBwYWNrZXQg
aW4gcHJlcCBmb3IgdHJhbnNtaXNzaW9uLgpAQCAtMTEzOSwxMSArMTE0MiwxMyBAQAogCQltID0g
aWVlZTgwMjExX2VuY2FwKHZhcCwgbmksIG0pOwogCQlpZiAobSA9PSBOVUxMKSB7CiAJCQkvKiBO
Qjogc3RhdCttc2cgaGFuZGxlZCBpbiBpZWVlODAyMTFfZW5jYXAgKi8KKwkJCUlFRUU4MDIxMV9W
QVBfVFhfVU5MT0NLKHZhcCk7CiAJCQlpZWVlODAyMTFfZnJlZV9ub2RlKG5pKTsKIAkJCXJldHVy
bjsKIAkJfQogCX0KIAllcnJvciA9IHBhcmVudC0+aWZfdHJhbnNtaXQocGFyZW50LCBtKTsKKwlJ
RUVFODAyMTFfVkFQX1RYX1VOTE9DSyh2YXApOwogCWlmIChlcnJvciAhPSAwKSB7CiAJCW1fZnJl
ZW0obSk7CiAJCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOwpAQCAtMTE3NCw2ICsxMTc5LDggQEAK
IAlLQVNTRVJUKCBydF9kZXN0LT5ydF9mbGFncyA9PSBJRUVFODAyMTFfTUVTSFJUX0ZMQUdTX0RJ
U0NPVkVSLAogCSAgICAoIlJvdXRlIGlzIG5vdCBtYXJrZWQgd2l0aCBJRUVFODAyMTFfTUVTSFJU
X0ZMQUdTX0RJU0NPVkVSIikpOwogCisJSUVFRTgwMjExX1ZBUF9UWF9VTkxPQ0tfQVNTRVJUKHZh
cCk7CisKIAkvKiBYWFg6IHNlbmQgdG8gbW9yZSB0aGFuIG9uZSB2YWxpZCBtYXNoIGdhdGUgKi8K
IAlNRVNIX1JUX0xPQ0sobXMpOwogCkBAIC0yNzQzLDYgKzI3NTAsNyBAQAogCXN0cnVjdCBpZWVl
ODAyMTFjb20gKmljID0gbmktPm5pX2ljOwogCXN0cnVjdCBpZWVlODAyMTFfYnBmX3BhcmFtcyBw
YXJhbXM7CiAJc3RydWN0IGllZWU4MDIxMV9mcmFtZSAqd2g7CisJaW50IHJldDsKIAogCUtBU1NF
UlQobmkgIT0gTlVMTCwgKCJudWxsIG5vZGUiKSk7CiAKQEAgLTI3NzgsNyArMjc4NiwxMCBAQAog
CiAJSUVFRTgwMjExX05PREVfU1RBVChuaSwgdHhfbWdtdCk7CiAKLQlyZXR1cm4gaWMtPmljX3Jh
d194bWl0KG5pLCBtLCAmcGFyYW1zKTsKKwlJRUVFODAyMTFfVkFQX1RYX0xPQ0sodmFwKTsKKwly
ZXQgPSBpYy0+aWNfcmF3X3htaXQobmksIG0sICZwYXJhbXMpOworCUlFRUU4MDIxMV9WQVBfVFhf
VU5MT0NLKHZhcCk7CisJcmV0dXJuIChyZXQpOwogfQogCiAjZGVmaW5lCUFERFNIT1JUKGZybSwg
dikgZG8gewkJCVwKSW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfd2RzLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV93ZHMuYwkocmV2aXNpb24gMjQ2ODE4KQorKysg
c3lzL25ldDgwMjExL2llZWU4MDIxMV93ZHMuYwkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1
NCwxMCBAQAogCQlpZiAoaWZwID09IG0tPm1fcGt0aGRyLnJjdmlmKQogCQkJY29udGludWU7CiAJ
CS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIHRoZSBWQVAgVFggbG9jayBoZWxkIGhl
cmUuCisJCSAqLworCQlJRUVFODAyMTFfVkFQX1RYX1VOTE9DS19BU1NFUlQodmFwKTsKKwkJLyoK
IAkJICogRHVwbGljYXRlIHRoZSBmcmFtZSBhbmQgc2VuZCBpdC4KIAkJICovCiAJCW1jb3B5ID0g
bV9jb3B5cGFja2V0KG0sIE1fTk9XQUlUKTsKQEAgLTI4NywxNiArMjkxLDIzIEBACiAJCS8qCiAJ
CSAqIEVuY2Fwc3VsYXRlIHRoZSBwYWNrZXQgaW4gcHJlcCBmb3IgdHJhbnNtaXNzaW9uLgogCQkg
Ki8KKwkJSUVFRTgwMjExX1ZBUF9UWF9MT0NLKHZhcCk7CiAJCW1jb3B5ID0gaWVlZTgwMjExX2Vu
Y2FwKHZhcCwgbmksIG1jb3B5KTsKIAkJaWYgKG1jb3B5ID09IE5VTEwpIHsKIAkJCS8qIE5COiBz
dGF0K21zZyBoYW5kbGVkIGluIGllZWU4MDIxMV9lbmNhcCAqLwogCQkJaWVlZTgwMjExX2ZyZWVf
bm9kZShuaSk7CisJCQlJRUVFODAyMTFfVkFQX1RYX1VOTE9DSyh2YXApOwogCQkJY29udGludWU7
CiAJCX0KIAkJbWNvcHktPm1fZmxhZ3MgfD0gTV9NQ0FTVDsKIAkJbWNvcHktPm1fcGt0aGRyLnJj
dmlmID0gKHZvaWQgKikgbmk7CiAKKwkJLyoKKwkJICogU2VyaWFsaXNlIHRoZSBlbmNhcHN1bGF0
aW9uIGFuZCB0cmFuc21pdAorCQkgKiB3aXRoIHRoZSBWQVAgVFggbG9jay4KKwkJICovCiAJCWVy
ciA9IHBhcmVudC0+aWZfdHJhbnNtaXQocGFyZW50LCBtY29weSk7CisJCUlFRUU4MDIxMV9WQVBf
VFhfVU5MT0NLKHZhcCk7CiAJCWlmIChlcnIpIHsKIAkJCS8qIE5COiBJRlFfSEFORE9GRiByZWNs
YWltcyBtYnVmICovCiAJCQlpZnAtPmlmX29lcnJvcnMrKzsKSW5kZXg6IHN5cy9uZXQ4MDIxMS9p
ZWVlODAyMTFfb3V0cHV0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9v
dXRwdXQuYwkocmV2aXNpb24gMjQ2ODE4KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRw
dXQuYwkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCwyNTIgQEAKICNlbmRpZgogCiAvKgor
ICogU2VuZCB0aGUgZ2l2ZW4gbWJ1ZiB0aHJvdWdoIHRoZSBnaXZlbiB2YXAuCisgKgorICogVGhp
cyBjb25zdW1lcyB0aGUgbWJ1ZiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHRyYW5zbWl0Cisg
KiB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuCisgKgorICogVGhpcyBkb2VzIG5vbmUgb2YgdGhlIGlu
aXRpYWwgY2hlY2tzIHRoYXQgaWVlZTgwMjExX3N0YXJ0KCkKKyAqIGRvZXMgKGVnIENBQyB0aW1l
b3V0LCBpbnRlcmZhY2Ugd2FrZXVwKSAtIHRoZSBjYWxsZXIgbXVzdAorICogZG8gdGhpcyBmaXJz
dC4KKyAqLworc3RhdGljIGludAoraWVlZTgwMjExX3N0YXJ0X3BrdChzdHJ1Y3QgaWVlZTgwMjEx
dmFwICp2YXAsIHN0cnVjdCBtYnVmICptKQoreworI2RlZmluZQlJU19EV0RTKHZhcCkgXAorCSh2
YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9XRFMgJiYgXAorCSAodmFwLT5pdl9mbGFnc19l
eHQgJiBJRUVFODAyMTFfRkVYVF9XRFNMRUdBQ1kpID09IDApCisJc3RydWN0IGllZWU4MDIxMWNv
bSAqaWMgPSB2YXAtPml2X2ljOworCXN0cnVjdCBpZm5ldCAqcGFyZW50ID0gaWMtPmljX2lmcDsK
KwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHZhcC0+aXZfaWZwOworCXN0cnVjdCBpZWVlODAyMTFfbm9k
ZSAqbmk7CisJc3RydWN0IGV0aGVyX2hlYWRlciAqZWg7CisJaW50IGVycm9yOworCisJLyoKKwkg
KiBTYW5pdGl6ZSBtYnVmIGZsYWdzIGZvciBuZXQ4MDIxMSB1c2UuICBXZSBjYW5ub3QKKwkgKiBj
bGVhciBNX1BXUl9TQVYgb3IgTV9NT1JFX0RBVEEgYmVjYXVzZSB0aGVzZSBtYXkKKwkgKiBiZSBz
ZXQgZm9yIGZyYW1lcyB0aGF0IGFyZSByZS1zdWJtaXR0ZWQgZnJvbSB0aGUKKwkgKiBwb3dlciBz
YXZlIHF1ZXVlLgorCSAqCisJICogTkI6IFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBpZWVlODAy
MTFfY2xhc3NpZnkgYXMKKwkgKiAgICAgaXQgbWFya3MgRUFQT0wgaW4gZnJhbWVzIHdpdGggTV9F
QVBPTC4KKwkgKi8KKwltLT5tX2ZsYWdzICY9IH4oTV84MDIxMV9UWCAtIE1fUFdSX1NBViAtIE1f
TU9SRV9EQVRBKTsKKwkvKgorCSAqIENhbmNlbCBhbnkgYmFja2dyb3VuZCBzY2FuLgorCSAqLwor
CWlmIChpYy0+aWNfZmxhZ3MgJiBJRUVFODAyMTFfRl9TQ0FOKQorCQlpZWVlODAyMTFfY2FuY2Vs
X2FueXNjYW4odmFwKTsKKwkvKiAKKwkgKiBGaW5kIHRoZSBub2RlIGZvciB0aGUgZGVzdGluYXRp
b24gc28gd2UgY2FuIGRvCisJICogdGhpbmdzIGxpa2UgcG93ZXIgc2F2ZSBhbmQgZmFzdCBmcmFt
ZXMgYWdncmVnYXRpb24uCisJICoKKwkgKiBOQjogcGFzdCB0aGlzIHBvaW50IHZhcmlvdXMgY29k
ZSBhc3N1bWVzIHRoZSBmaXJzdAorCSAqICAgICBtYnVmIGhhcyB0aGUgODAyLjMgaGVhZGVyIHBy
ZXNlbnQgKGFuZCBjb250aWd1b3VzKS4KKwkgKi8KKwluaSA9IE5VTEw7CisJaWYgKG0tPm1fbGVu
IDwgc2l6ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpICYmCisJICAgKG0gPSBtX3B1bGx1cChtLCBz
aXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcikpKSA9PSBOVUxMKSB7CisJCUlFRUU4MDIxMV9EUFJJ
TlRGKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsCisJCSAgICAiZGlzY2FyZCBmcmFtZSwgJXNc
biIsICJtX3B1bGx1cCBmYWlsZWQiKTsKKwkJdmFwLT5pdl9zdGF0cy5pc190eF9ub2J1ZisrOwkv
KiBYWFggKi8KKwkJaWZwLT5pZl9vZXJyb3JzKys7CisJCXJldHVybiAoRU5PQlVGUyk7CisJfQor
CWVoID0gbXRvZChtLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICopOworCWlmIChFVEhFUl9JU19NVUxU
SUNBU1QoZWgtPmV0aGVyX2Rob3N0KSkgeworCQlpZiAoSVNfRFdEUyh2YXApKSB7CisJCQkvKgor
CQkJICogT25seSB1bmljYXN0IGZyYW1lcyBmcm9tIHRoZSBhYm92ZSBnbyBvdXQKKwkJCSAqIERX
RFMgdmFwczsgbXVsdGljYXN0IGZyYW1lcyBhcmUgaGFuZGxlZCBieQorCQkJICogZGlzcGF0Y2hp
bmcgdGhlIGZyYW1lIGFzIGl0IGNvbWVzIHRocm91Z2gKKwkJCSAqIHRoZSBBUCB2YXAgKHNlZSBi
ZWxvdykuCisJCQkgKi8KKwkJCUlFRUU4MDIxMV9ESVNDQVJEX01BQyh2YXAsIElFRUU4MDIxMV9N
U0dfV0RTLAorCQkJICAgIGVoLT5ldGhlcl9kaG9zdCwgIm1jYXN0IiwgIiVzIiwgIm9uIERXRFMi
KTsKKwkJCXZhcC0+aXZfc3RhdHMuaXNfZHdkc19tY2FzdCsrOworCQkJbV9mcmVlbShtKTsKKwkJ
CS8qIFhYWCBiZXR0ZXIgc3RhdHVzPyAqLworCQkJcmV0dXJuIChFTk9CVUZTKTsKKwkJfQorCQlp
ZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fSE9TVEFQKSB7CisJCQkvKgorCQkJICog
U3BhbSBEV0RTIHZhcCdzIHcvIG11bHRpY2FzdCB0cmFmZmljLgorCQkJICovCisJCQkvKiBYWFgg
b25seSBpZiBkd2RzIGluIHVzZT8gKi8KKwkJCWllZWU4MDIxMV9kd2RzX21jYXN0KHZhcCwgbSk7
CisJCX0KKwl9CisjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfTUVTSAorCWlmICh2YXAtPml2X29w
bW9kZSAhPSBJRUVFODAyMTFfTV9NQlNTKSB7CisjZW5kaWYKKwkJbmkgPSBpZWVlODAyMTFfZmlu
ZF90eG5vZGUodmFwLCBlaC0+ZXRoZXJfZGhvc3QpOworCQlpZiAobmkgPT0gTlVMTCkgeworCQkJ
LyogTkI6IGllZWU4MDIxMV9maW5kX3R4bm9kZSBkb2VzIHN0YXQrbXNnICovCisJCQlpZnAtPmlm
X29lcnJvcnMrKzsKKwkJCW1fZnJlZW0obSk7CisJCQkvKiBYWFggYmV0dGVyIHN0YXR1cz8gKi8K
KwkJCXJldHVybiAoRU5PQlVGUyk7CisJCX0KKwkJaWYgKG5pLT5uaV9hc3NvY2lkID09IDAgJiYK
KwkJICAgIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9BU1NPQ0lEKSkgeworCQkJSUVF
RTgwMjExX0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsCisJCQkgICAgZWgt
PmV0aGVyX2Rob3N0LCBOVUxMLAorCQkJICAgICJzdGEgbm90IGFzc29jaWF0ZWQgKHR5cGUgMHgl
MDR4KSIsCisJCQkgICAgaHRvbnMoZWgtPmV0aGVyX3R5cGUpKTsKKwkJCXZhcC0+aXZfc3RhdHMu
aXNfdHhfbm90YXNzb2MrKzsKKwkJCWlmcC0+aWZfb2Vycm9ycysrOworCQkJbV9mcmVlbShtKTsK
KwkJCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOworCQkJLyogWFhYIGJldHRlciBzdGF0dXM/ICov
CisJCQlyZXR1cm4gKEVOT0JVRlMpOworCQl9CisjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfTUVT
SAorCX0gZWxzZSB7CisJCWlmICghSUVFRTgwMjExX0FERFJfRVEoZWgtPmV0aGVyX3Nob3N0LCB2
YXAtPml2X215YWRkcikpIHsKKwkJCS8qCisJCQkgKiBQcm94eSBzdGF0aW9uIG9ubHkgaWYgY29u
ZmlndXJlZC4KKwkJCSAqLworCQkJaWYgKCFpZWVlODAyMTFfbWVzaF9pc3Byb3h5ZW5hKHZhcCkp
IHsKKwkJCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLAorCQkJCSAgICBJRUVFODAyMTFfTVNH
X09VVFBVVCB8CisJCQkJICAgIElFRUU4MDIxMV9NU0dfTUVTSCwKKwkJCQkgICAgZWgtPmV0aGVy
X2Rob3N0LCBOVUxMLAorCQkJCSAgICAiJXMiLCAicHJveHkgbm90IGVuYWJsZWQiKTsKKwkJCQl2
YXAtPml2X3N0YXRzLmlzX21lc2hfbm90cHJveHkrKzsKKwkJCQlpZnAtPmlmX29lcnJvcnMrKzsK
KwkJCQltX2ZyZWVtKG0pOworCQkJCS8qIFhYWCBiZXR0ZXIgc3RhdHVzPyAqLworCQkJCXJldHVy
biAoRU5PQlVGUyk7CisJCQl9CisJCQlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9N
U0dfT1VUUFVULAorCQkJICAgICJmb3J3YXJkIGZyYW1lIGZyb20gRFMgU0EoJTZEKSwgREEoJTZE
KVxuIiwKKwkJCSAgICBlaC0+ZXRoZXJfc2hvc3QsICI6IiwKKwkJCSAgICBlaC0+ZXRoZXJfZGhv
c3QsICI6Iik7CisJCQlpZWVlODAyMTFfbWVzaF9wcm94eV9jaGVjayh2YXAsIGVoLT5ldGhlcl9z
aG9zdCk7CisJCX0KKwkJbmkgPSBpZWVlODAyMTFfbWVzaF9kaXNjb3Zlcih2YXAsIGVoLT5ldGhl
cl9kaG9zdCwgbSk7CisJCWlmIChuaSA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogTkI6IGllZWU4
MDIxMV9tZXNoX2Rpc2NvdmVyIGhvbGRzL2Rpc3Bvc2VzCisJCQkgKiBmcmFtZSAoZS5nLiBxdWV1
ZWluZyBvbiBwYXRoIGRpc2NvdmVyeSkuCisJCQkgKi8KKwkJCWlmcC0+aWZfb2Vycm9ycysrOwor
CQkJLyogWFhYIGJldHRlciBzdGF0dXM/ICovCisJCQlyZXR1cm4gKEVOT0JVRlMpOworCQl9CisJ
fQorI2VuZGlmCisJaWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9QV1JfTUdUKSAm
JgorCSAgICAobS0+bV9mbGFncyAmIE1fUFdSX1NBVikgPT0gMCkgeworCQkvKgorCQkgKiBTdGF0
aW9uIGluIHBvd2VyIHNhdmUgbW9kZTsgcGFzcyB0aGUgZnJhbWUKKwkJICogdG8gdGhlIDgwMi4x
MSBsYXllciBhbmQgY29udGludWUuICBXZSdsbCBnZXQKKwkJICogdGhlIGZyYW1lIGJhY2sgd2hl
biB0aGUgdGltZSBpcyByaWdodC4KKwkJICogWFhYIGxvc2UgV0RTIHZhcCBsaW5rYWdlPworCQkg
Ki8KKwkJKHZvaWQpIGllZWU4MDIxMV9wd3JzYXZlKG5pLCBtKTsKKwkJaWVlZTgwMjExX2ZyZWVf
bm9kZShuaSk7CisJCS8qIFhYWCBiZXR0ZXIgc3RhdHVzPyAqLworCQlyZXR1cm4gKEVOT0JVRlMp
OworCX0KKwkvKiBjYWxjdWxhdGUgcHJpb3JpdHkgc28gZHJpdmVycyBjYW4gZmluZCB0aGUgdHgg
cXVldWUgKi8KKwlpZiAoaWVlZTgwMjExX2NsYXNzaWZ5KG5pLCBtKSkgeworCQlJRUVFODAyMTFf
RElTQ0FSRF9NQUModmFwLCBJRUVFODAyMTFfTVNHX09VVFBVVCwKKwkJICAgIGVoLT5ldGhlcl9k
aG9zdCwgTlVMTCwKKwkJICAgICIlcyIsICJjbGFzc2lmaWNhdGlvbiBmYWlsdXJlIik7CisJCXZh
cC0+aXZfc3RhdHMuaXNfdHhfY2xhc3NpZnkrKzsKKwkJaWZwLT5pZl9vZXJyb3JzKys7CisJCW1f
ZnJlZW0obSk7CisJCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOworCQkvKiBYWFggYmV0dGVyIHN0
YXR1cz8gKi8KKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisJLyoKKwkgKiBTdGFzaCB0aGUgbm9k
ZSBwb2ludGVyLiAgTm90ZSB0aGF0IHdlIGRvIHRoaXMgYWZ0ZXIKKwkgKiBhbnkgY2FsbCB0byBp
ZWVlODAyMTFfZHdkc19tY2FzdCBiZWNhdXNlIHRoYXQgY29kZQorCSAqIHVzZXMgYW55IGV4aXN0
aW5nIHZhbHVlIGZvciByY3ZpZiB0byBpZGVudGlmeSB0aGUKKwkgKiBpbnRlcmZhY2UgaXQgKG1p
Z2h0IGhhdmUgYmVlbikgcmVjZWl2ZWQgb24uCisJICovCisJbS0+bV9wa3RoZHIucmN2aWYgPSAo
dm9pZCAqKW5pOworCisJQlBGX01UQVAoaWZwLCBtKTsJCS8qIDgwMi4zIHR4ICovCisKKwkvKgor
CSAqIENoZWNrIGlmIEEtTVBEVSB0eCBhZ2dyZWdhdGlvbiBpcyBzZXR1cCBvciBpZiB3ZQorCSAq
IHNob3VsZCB0cnkgdG8gZW5hYmxlIGl0LiAgVGhlIHN0YSBtdXN0IGJlIGFzc29jaWF0ZWQKKwkg
KiB3aXRoIEhUIGFuZCBBLU1QRFUgZW5hYmxlZCBmb3IgdXNlLiAgV2hlbiB0aGUgcG9saWN5CisJ
ICogcm91dGluZSBkZWNpZGVzIHdlIHNob3VsZCBlbmFibGUgQS1NUERVIHdlIGlzc3VlIGFuCisJ
ICogQUREQkEgcmVxdWVzdCBhbmQgd2FpdCBmb3IgYSByZXBseS4gIFRoZSBmcmFtZSBiZWluZwor
CSAqIGVuY2Fwc3VsYXRlZCB3aWxsIGdvIG91dCB3L28gdXNpbmcgQS1NUERVLCBvciBwb3NzaWJs
eQorCSAqIGl0IG1pZ2h0IGJlIGNvbGxlY3RlZCBieSB0aGUgZHJpdmVyIGFuZCBoZWxkL3JldHJh
bnNtaXQuCisJICogVGhlIGRlZmF1bHQgaWNfYW1wZHVfZW5hYmxlIHJvdXRpbmUgaGFuZGxlcyBz
dGFnZ2VyaW5nCisJICogQUREQkEgcmVxdWVzdHMgaW4gY2FzZSB0aGUgcmVjZWl2ZXIgTkFLJ3Mg
dXMgb3Igd2UgYXJlCisJICogb3RoZXJ3aXNlIHVuYWJsZSB0byBlc3RhYmxpc2ggYSBCQSBzdHJl
YW0uCisJICovCisJaWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9BTVBEVV9UWCkg
JiYKKwkgICAgKHZhcC0+aXZfZmxhZ3NfaHQgJiBJRUVFODAyMTFfRkhUX0FNUERVX1RYKSAmJgor
CSAgICAobS0+bV9mbGFncyAmIE1fRUFQT0wpID09IDApIHsKKwkJaW50IHRpZCA9IFdNRV9BQ19U
T19USUQoTV9XTUVfR0VUQUMobSkpOworCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2FtcGR1ICp0YXAg
PSAmbmktPm5pX3R4X2FtcGR1W3RpZF07CisKKwkJaWVlZTgwMjExX3R4YW1wZHVfY291bnRfcGFj
a2V0KHRhcCk7CisJCWlmIChJRUVFODAyMTFfQU1QRFVfUlVOTklORyh0YXApKSB7CisJCQkvKgor
CQkJICogT3BlcmF0aW9uYWwsIG1hcmsgZnJhbWUgZm9yIGFnZ3JlZ2F0aW9uLgorCQkJICoKKwkJ
CSAqIFhYWCBkbyB0eCBhZ2dyZWdhdGlvbiBoZXJlCisJCQkgKi8KKwkJCW0tPm1fZmxhZ3MgfD0g
TV9BTVBEVV9NUERVOworCQl9IGVsc2UgaWYgKCFJRUVFODAyMTFfQU1QRFVfUkVRVUVTVEVEKHRh
cCkgJiYKKwkJICAgIGljLT5pY19hbXBkdV9lbmFibGUobmksIHRhcCkpIHsKKwkJCS8qCisJCQkg
KiBOb3QgbmVnb3RpYXRlZCB5ZXQsIHJlcXVlc3Qgc2VydmljZS4KKwkJCSAqLworCQkJaWVlZTgw
MjExX2FtcGR1X3JlcXVlc3QobmksIHRhcCk7CisJCQkvKiBYWFggaG9sZCBmcmFtZSBmb3IgcmVw
bHk/ICovCisJCX0KKwl9CisjaWZkZWYgSUVFRTgwMjExX1NVUFBPUlRfU1VQRVJHCisJZWxzZSBp
ZiAoSUVFRTgwMjExX0FUSF9DQVAodmFwLCBuaSwgSUVFRTgwMjExX05PREVfRkYpKSB7CisJCW0g
PSBpZWVlODAyMTFfZmZfY2hlY2sobmksIG0pOworCQlpZiAobSA9PSBOVUxMKSB7CisJCQkvKiBO
QjogYW55IG5pIHJlZiBoZWxkIG9uIHN0YWdlcSAqLworCQkJLyogWFhYIGJldHRlciBzdGF0dXM/
ICovCisJCQlyZXR1cm4gKEVOT0JVRlMpOworCQl9CisJfQorI2VuZGlmIC8qIElFRUU4MDIxMV9T
VVBQT1JUX1NVUEVSRyAqLworCUlFRUU4MDIxMV9WQVBfVFhfTE9DSyh2YXApOworCWlmIChfX3By
ZWRpY3RfdHJ1ZSgodmFwLT5pdl9jYXBzICYgSUVFRTgwMjExX0NfODAyM0VOQ0FQKSA9PSAwKSkg
eworCQkvKgorCQkgKiBFbmNhcHN1bGF0ZSB0aGUgcGFja2V0IGluIHByZXAgZm9yIHRyYW5zbWlz
c2lvbi4KKwkJICovCisJCW0gPSBpZWVlODAyMTFfZW5jYXAodmFwLCBuaSwgbSk7CisJCWlmICht
ID09IE5VTEwpIHsKKwkJCS8qIE5COiBzdGF0K21zZyBoYW5kbGVkIGluIGllZWU4MDIxMV9lbmNh
cCAqLworCQkJSUVFRTgwMjExX1ZBUF9UWF9VTkxPQ0sodmFwKTsKKwkJCWllZWU4MDIxMV9mcmVl
X25vZGUobmkpOworCQkJLyogWFhYIGJldHRlciBzdGF0dXM/ICovCisJCQlyZXR1cm4gKEVOT0JV
RlMpOworCQl9CisJfQorCWVycm9yID0gcGFyZW50LT5pZl90cmFuc21pdChwYXJlbnQsIG0pOwor
CUlFRUU4MDIxMV9WQVBfVFhfVU5MT0NLKHZhcCk7CisJaWYgKGVycm9yICE9IDApIHsKKwkJLyog
TkI6IElGUV9IQU5ET0ZGIHJlY2xhaW1zIG1idWYgKi8KKwkJaWVlZTgwMjExX2ZyZWVfbm9kZShu
aSk7CisJfSBlbHNlIHsKKwkJaWZwLT5pZl9vcGFja2V0cysrOworCX0KKwlpYy0+aWNfbGFzdGRh
dGEgPSB0aWNrczsKKworCXJldHVybiAoMCk7CisjdW5kZWYJSVNfRFdEUworfQorCisvKgogICog
U3RhcnQgbWV0aG9kIGZvciB2YXAncy4gIEFsbCBwYWNrZXRzIGZyb20gdGhlIHN0YWNrIGNvbWUK
ICAqIHRocm91Z2ggaGVyZS4gIFdlIGhhbmRsZSBjb21tb24gcHJvY2Vzc2luZyBvZiB0aGUgcGFj
a2V0cwogICogYmVmb3JlIGRpc3BhdGNoaW5nIHRoZW0gdG8gdGhlIHVuZGVybHlpbmcgZGV2aWNl
LgpAQCAtMTE3LDE2ICszNjMsMTAgQEAKIHZvaWQKIGllZWU4MDIxMV9zdGFydChzdHJ1Y3QgaWZu
ZXQgKmlmcCkKIHsKLSNkZWZpbmUJSVNfRFdEUyh2YXApIFwKLQkodmFwLT5pdl9vcG1vZGUgPT0g
SUVFRTgwMjExX01fV0RTICYmIFwKLQkgKHZhcC0+aXZfZmxhZ3NfZXh0ICYgSUVFRTgwMjExX0ZF
WFRfV0RTTEVHQUNZKSA9PSAwKQogCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGlmcC0+aWZf
c29mdGM7CiAJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2ljOwogCXN0cnVjdCBp
Zm5ldCAqcGFyZW50ID0gaWMtPmljX2lmcDsKLQlzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pOwog
CXN0cnVjdCBtYnVmICptOwotCXN0cnVjdCBldGhlcl9oZWFkZXIgKmVoOwotCWludCBlcnJvcjsK
IAogCS8qIE5COiBwYXJlbnQgbXVzdCBiZSB1cCBhbmQgcnVubmluZyAqLwogCWlmICghSUZORVRf
SVNfVVBfUlVOTklORyhwYXJlbnQpKSB7CkBAIC0xNjUsMjE4ICs0MDUsMTQgQEAKIAkJfQogCQlJ
RUVFODAyMTFfVU5MT0NLKGljKTsKIAl9CisKIAlmb3IgKDs7KSB7CiAJCUlGUV9ERVFVRVVFKCZp
ZnAtPmlmX3NuZCwgbSk7CiAJCWlmIChtID09IE5VTEwpCiAJCQlicmVhazsKLQkJLyoKLQkJICog
U2FuaXRpemUgbWJ1ZiBmbGFncyBmb3IgbmV0ODAyMTEgdXNlLiAgV2UgY2Fubm90Ci0JCSAqIGNs
ZWFyIE1fUFdSX1NBViBvciBNX01PUkVfREFUQSBiZWNhdXNlIHRoZXNlIG1heQotCQkgKiBiZSBz
ZXQgZm9yIGZyYW1lcyB0aGF0IGFyZSByZS1zdWJtaXR0ZWQgZnJvbSB0aGUKLQkJICogcG93ZXIg
c2F2ZSBxdWV1ZS4KLQkJICoKLQkJICogTkI6IFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBpZWVl
ODAyMTFfY2xhc3NpZnkgYXMKLQkJICogICAgIGl0IG1hcmtzIEVBUE9MIGluIGZyYW1lcyB3aXRo
IE1fRUFQT0wuCi0JCSAqLwotCQltLT5tX2ZsYWdzICY9IH4oTV84MDIxMV9UWCAtIE1fUFdSX1NB
ViAtIE1fTU9SRV9EQVRBKTsKLQkJLyoKLQkJICogQ2FuY2VsIGFueSBiYWNrZ3JvdW5kIHNjYW4u
Ci0JCSAqLwotCQlpZiAoaWMtPmljX2ZsYWdzICYgSUVFRTgwMjExX0ZfU0NBTikKLQkJCWllZWU4
MDIxMV9jYW5jZWxfYW55c2Nhbih2YXApOwotCQkvKiAKLQkJICogRmluZCB0aGUgbm9kZSBmb3Ig
dGhlIGRlc3RpbmF0aW9uIHNvIHdlIGNhbiBkbwotCQkgKiB0aGluZ3MgbGlrZSBwb3dlciBzYXZl
IGFuZCBmYXN0IGZyYW1lcyBhZ2dyZWdhdGlvbi4KLQkJICoKLQkJICogTkI6IHBhc3QgdGhpcyBw
b2ludCB2YXJpb3VzIGNvZGUgYXNzdW1lcyB0aGUgZmlyc3QKLQkJICogICAgIG1idWYgaGFzIHRo
ZSA4MDIuMyBoZWFkZXIgcHJlc2VudCAoYW5kIGNvbnRpZ3VvdXMpLgotCQkgKi8KLQkJbmkgPSBO
VUxMOwotCQlpZiAobS0+bV9sZW4gPCBzaXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcikgJiYKLQkJ
ICAgKG0gPSBtX3B1bGx1cChtLCBzaXplb2Yoc3RydWN0IGV0aGVyX2hlYWRlcikpKSA9PSBOVUxM
KSB7Ci0JCQlJRUVFODAyMTFfRFBSSU5URih2YXAsIElFRUU4MDIxMV9NU0dfT1VUUFVULAotCQkJ
ICAgICJkaXNjYXJkIGZyYW1lLCAlc1xuIiwgIm1fcHVsbHVwIGZhaWxlZCIpOwotCQkJdmFwLT5p
dl9zdGF0cy5pc190eF9ub2J1ZisrOwkvKiBYWFggKi8KLQkJCWlmcC0+aWZfb2Vycm9ycysrOwot
CQkJY29udGludWU7Ci0JCX0KLQkJZWggPSBtdG9kKG0sIHN0cnVjdCBldGhlcl9oZWFkZXIgKik7
Ci0JCWlmIChFVEhFUl9JU19NVUxUSUNBU1QoZWgtPmV0aGVyX2Rob3N0KSkgewotCQkJaWYgKElT
X0RXRFModmFwKSkgewotCQkJCS8qCi0JCQkJICogT25seSB1bmljYXN0IGZyYW1lcyBmcm9tIHRo
ZSBhYm92ZSBnbyBvdXQKLQkJCQkgKiBEV0RTIHZhcHM7IG11bHRpY2FzdCBmcmFtZXMgYXJlIGhh
bmRsZWQgYnkKLQkJCQkgKiBkaXNwYXRjaGluZyB0aGUgZnJhbWUgYXMgaXQgY29tZXMgdGhyb3Vn
aAotCQkJCSAqIHRoZSBBUCB2YXAgKHNlZSBiZWxvdykuCi0JCQkJICovCi0JCQkJSUVFRTgwMjEx
X0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19XRFMsCi0JCQkJICAgIGVoLT5ldGhlcl9k
aG9zdCwgIm1jYXN0IiwgIiVzIiwgIm9uIERXRFMiKTsKLQkJCQl2YXAtPml2X3N0YXRzLmlzX2R3
ZHNfbWNhc3QrKzsKLQkJCQltX2ZyZWVtKG0pOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYg
KHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX0hPU1RBUCkgewotCQkJCS8qCi0JCQkJICog
U3BhbSBEV0RTIHZhcCdzIHcvIG11bHRpY2FzdCB0cmFmZmljLgotCQkJCSAqLwotCQkJCS8qIFhY
WCBvbmx5IGlmIGR3ZHMgaW4gdXNlPyAqLwotCQkJCWllZWU4MDIxMV9kd2RzX21jYXN0KHZhcCwg
bSk7Ci0JCQl9Ci0JCX0KLSNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9NRVNICi0JCWlmICh2YXAt
Pml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9NQlNTKSB7Ci0jZW5kaWYKLQkJCW5pID0gaWVlZTgw
MjExX2ZpbmRfdHhub2RlKHZhcCwgZWgtPmV0aGVyX2Rob3N0KTsKLQkJCWlmIChuaSA9PSBOVUxM
KSB7Ci0JCQkJLyogTkI6IGllZWU4MDIxMV9maW5kX3R4bm9kZSBkb2VzIHN0YXQrbXNnICovCi0J
CQkJaWZwLT5pZl9vZXJyb3JzKys7Ci0JCQkJbV9mcmVlbShtKTsKLQkJCQljb250aW51ZTsKLQkJ
CX0KLQkJCWlmIChuaS0+bmlfYXNzb2NpZCA9PSAwICYmCi0JCQkgICAgKG5pLT5uaV9mbGFncyAm
IElFRUU4MDIxMV9OT0RFX0FTU09DSUQpKSB7Ci0JCQkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZh
cCwgSUVFRTgwMjExX01TR19PVVRQVVQsCi0JCQkJICAgIGVoLT5ldGhlcl9kaG9zdCwgTlVMTCwK
LQkJCQkgICAgInN0YSBub3QgYXNzb2NpYXRlZCAodHlwZSAweCUwNHgpIiwKLQkJCQkgICAgaHRv
bnMoZWgtPmV0aGVyX3R5cGUpKTsKLQkJCQl2YXAtPml2X3N0YXRzLmlzX3R4X25vdGFzc29jKys7
Ci0JCQkJaWZwLT5pZl9vZXJyb3JzKys7Ci0JCQkJbV9mcmVlbShtKTsKLQkJCQlpZWVlODAyMTFf
ZnJlZV9ub2RlKG5pKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNpZmRlZiBJRUVFODAyMTFfU1VQ
UE9SVF9NRVNICi0JCX0gZWxzZSB7Ci0JCQlpZiAoIUlFRUU4MDIxMV9BRERSX0VRKGVoLT5ldGhl
cl9zaG9zdCwgdmFwLT5pdl9teWFkZHIpKSB7Ci0JCQkJLyoKLQkJCQkgKiBQcm94eSBzdGF0aW9u
IG9ubHkgaWYgY29uZmlndXJlZC4KLQkJCQkgKi8KLQkJCQlpZiAoIWllZWU4MDIxMV9tZXNoX2lz
cHJveHllbmEodmFwKSkgewotCQkJCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLAotCQkJCQkg
ICAgSUVFRTgwMjExX01TR19PVVRQVVQgfAotCQkJCQkgICAgSUVFRTgwMjExX01TR19NRVNILAot
CQkJCQkgICAgZWgtPmV0aGVyX2Rob3N0LCBOVUxMLAotCQkJCQkgICAgIiVzIiwgInByb3h5IG5v
dCBlbmFibGVkIik7Ci0JCQkJCXZhcC0+aXZfc3RhdHMuaXNfbWVzaF9ub3Rwcm94eSsrOwotCQkJ
CQlpZnAtPmlmX29lcnJvcnMrKzsKLQkJCQkJbV9mcmVlbShtKTsKLQkJCQkJY29udGludWU7Ci0J
CQkJfQotCQkJCUlFRUU4MDIxMV9EUFJJTlRGKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsCi0J
CQkJICAgICJmb3J3YXJkIGZyYW1lIGZyb20gRFMgU0EoJTZEKSwgREEoJTZEKVxuIiwKLQkJCQkg
ICAgZWgtPmV0aGVyX3Nob3N0LCAiOiIsCi0JCQkJICAgIGVoLT5ldGhlcl9kaG9zdCwgIjoiKTsK
LQkJCQlpZWVlODAyMTFfbWVzaF9wcm94eV9jaGVjayh2YXAsIGVoLT5ldGhlcl9zaG9zdCk7Ci0J
CQl9Ci0JCQluaSA9IGllZWU4MDIxMV9tZXNoX2Rpc2NvdmVyKHZhcCwgZWgtPmV0aGVyX2Rob3N0
LCBtKTsKLQkJCWlmIChuaSA9PSBOVUxMKSB7Ci0JCQkJLyoKLQkJCQkgKiBOQjogaWVlZTgwMjEx
X21lc2hfZGlzY292ZXIgaG9sZHMvZGlzcG9zZXMKLQkJCQkgKiBmcmFtZSAoZS5nLiBxdWV1ZWlu
ZyBvbiBwYXRoIGRpc2NvdmVyeSkuCi0JCQkJICovCi0JCQkJaWZwLT5pZl9vZXJyb3JzKys7Ci0J
CQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlpZiAoKG5pLT5uaV9mbGFncyAmIElF
RUU4MDIxMV9OT0RFX1BXUl9NR1QpICYmCi0JCSAgICAobS0+bV9mbGFncyAmIE1fUFdSX1NBVikg
PT0gMCkgewotCQkJLyoKLQkJCSAqIFN0YXRpb24gaW4gcG93ZXIgc2F2ZSBtb2RlOyBwYXNzIHRo
ZSBmcmFtZQotCQkJICogdG8gdGhlIDgwMi4xMSBsYXllciBhbmQgY29udGludWUuICBXZSdsbCBn
ZXQKLQkJCSAqIHRoZSBmcmFtZSBiYWNrIHdoZW4gdGhlIHRpbWUgaXMgcmlnaHQuCi0JCQkgKiBY
WFggbG9zZSBXRFMgdmFwIGxpbmthZ2U/Ci0JCQkgKi8KLQkJCSh2b2lkKSBpZWVlODAyMTFfcHdy
c2F2ZShuaSwgbSk7Ci0JCQlpZWVlODAyMTFfZnJlZV9ub2RlKG5pKTsKLQkJCWNvbnRpbnVlOwot
CQl9Ci0JCS8qIGNhbGN1bGF0ZSBwcmlvcml0eSBzbyBkcml2ZXJzIGNhbiBmaW5kIHRoZSB0eCBx
dWV1ZSAqLwotCQlpZiAoaWVlZTgwMjExX2NsYXNzaWZ5KG5pLCBtKSkgewotCQkJSUVFRTgwMjEx
X0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsCi0JCQkgICAgZWgtPmV0aGVy
X2Rob3N0LCBOVUxMLAotCQkJICAgICIlcyIsICJjbGFzc2lmaWNhdGlvbiBmYWlsdXJlIik7Ci0J
CQl2YXAtPml2X3N0YXRzLmlzX3R4X2NsYXNzaWZ5Kys7Ci0JCQlpZnAtPmlmX29lcnJvcnMrKzsK
LQkJCW1fZnJlZW0obSk7Ci0JCQlpZWVlODAyMTFfZnJlZV9ub2RlKG5pKTsKLQkJCWNvbnRpbnVl
OwotCQl9Ci0JCS8qCi0JCSAqIFN0YXNoIHRoZSBub2RlIHBvaW50ZXIuICBOb3RlIHRoYXQgd2Ug
ZG8gdGhpcyBhZnRlcgotCQkgKiBhbnkgY2FsbCB0byBpZWVlODAyMTFfZHdkc19tY2FzdCBiZWNh
dXNlIHRoYXQgY29kZQotCQkgKiB1c2VzIGFueSBleGlzdGluZyB2YWx1ZSBmb3IgcmN2aWYgdG8g
aWRlbnRpZnkgdGhlCi0JCSAqIGludGVyZmFjZSBpdCAobWlnaHQgaGF2ZSBiZWVuKSByZWNlaXZl
ZCBvbi4KLQkJICovCi0JCW0tPm1fcGt0aGRyLnJjdmlmID0gKHZvaWQgKiluaTsKLQotCQlCUEZf
TVRBUChpZnAsIG0pOwkJLyogODAyLjMgdHggKi8KLSAKLQkJLyoKLQkJICogQ2hlY2sgaWYgQS1N
UERVIHR4IGFnZ3JlZ2F0aW9uIGlzIHNldHVwIG9yIGlmIHdlCi0JCSAqIHNob3VsZCB0cnkgdG8g
ZW5hYmxlIGl0LiAgVGhlIHN0YSBtdXN0IGJlIGFzc29jaWF0ZWQKLQkJICogd2l0aCBIVCBhbmQg
QS1NUERVIGVuYWJsZWQgZm9yIHVzZS4gIFdoZW4gdGhlIHBvbGljeQotCQkgKiByb3V0aW5lIGRl
Y2lkZXMgd2Ugc2hvdWxkIGVuYWJsZSBBLU1QRFUgd2UgaXNzdWUgYW4KLQkJICogQUREQkEgcmVx
dWVzdCBhbmQgd2FpdCBmb3IgYSByZXBseS4gIFRoZSBmcmFtZSBiZWluZwotCQkgKiBlbmNhcHN1
bGF0ZWQgd2lsbCBnbyBvdXQgdy9vIHVzaW5nIEEtTVBEVSwgb3IgcG9zc2libHkKLQkJICogaXQg
bWlnaHQgYmUgY29sbGVjdGVkIGJ5IHRoZSBkcml2ZXIgYW5kIGhlbGQvcmV0cmFuc21pdC4KLQkJ
ICogVGhlIGRlZmF1bHQgaWNfYW1wZHVfZW5hYmxlIHJvdXRpbmUgaGFuZGxlcyBzdGFnZ2VyaW5n
Ci0JCSAqIEFEREJBIHJlcXVlc3RzIGluIGNhc2UgdGhlIHJlY2VpdmVyIE5BSydzIHVzIG9yIHdl
IGFyZQotCQkgKiBvdGhlcndpc2UgdW5hYmxlIHRvIGVzdGFibGlzaCBhIEJBIHN0cmVhbS4KLQkJ
ICovCi0JCWlmICgobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfQU1QRFVfVFgpICYmCi0J
CSAgICAodmFwLT5pdl9mbGFnc19odCAmIElFRUU4MDIxMV9GSFRfQU1QRFVfVFgpICYmCi0JCSAg
ICAobS0+bV9mbGFncyAmIE1fRUFQT0wpID09IDApIHsKLQkJCWludCB0aWQgPSBXTUVfQUNfVE9f
VElEKE1fV01FX0dFVEFDKG0pKTsKLQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfYW1wZHUgKnRhcCA9
ICZuaS0+bmlfdHhfYW1wZHVbdGlkXTsKLQotCQkJaWVlZTgwMjExX3R4YW1wZHVfY291bnRfcGFj
a2V0KHRhcCk7Ci0JCQlpZiAoSUVFRTgwMjExX0FNUERVX1JVTk5JTkcodGFwKSkgewotCQkJCS8q
Ci0JCQkJICogT3BlcmF0aW9uYWwsIG1hcmsgZnJhbWUgZm9yIGFnZ3JlZ2F0aW9uLgotCQkJCSAq
Ci0JCQkJICogWFhYIGRvIHR4IGFnZ3JlZ2F0aW9uIGhlcmUKLQkJCQkgKi8KLQkJCQltLT5tX2Zs
YWdzIHw9IE1fQU1QRFVfTVBEVTsKLQkJCX0gZWxzZSBpZiAoIUlFRUU4MDIxMV9BTVBEVV9SRVFV
RVNURUQodGFwKSAmJgotCQkJICAgIGljLT5pY19hbXBkdV9lbmFibGUobmksIHRhcCkpIHsKLQkJ
CQkvKgotCQkJCSAqIE5vdCBuZWdvdGlhdGVkIHlldCwgcmVxdWVzdCBzZXJ2aWNlLgotCQkJCSAq
LwotCQkJCWllZWU4MDIxMV9hbXBkdV9yZXF1ZXN0KG5pLCB0YXApOwotCQkJCS8qIFhYWCBob2xk
IGZyYW1lIGZvciByZXBseT8gKi8KLQkJCX0KLQkJfQotI2lmZGVmIElFRUU4MDIxMV9TVVBQT1JU
X1NVUEVSRwotCQllbHNlIGlmIChJRUVFODAyMTFfQVRIX0NBUCh2YXAsIG5pLCBJRUVFODAyMTFf
Tk9ERV9GRikpIHsKLQkJCW0gPSBpZWVlODAyMTFfZmZfY2hlY2sobmksIG0pOwotCQkJaWYgKG0g
PT0gTlVMTCkgewotCQkJCS8qIE5COiBhbnkgbmkgcmVmIGhlbGQgb24gc3RhZ2VxICovCi0JCQkJ
Y29udGludWU7Ci0JCQl9Ci0JCX0KLSNlbmRpZiAvKiBJRUVFODAyMTFfU1VQUE9SVF9TVVBFUkcg
Ki8KLQkJaWYgKF9fcHJlZGljdF90cnVlKCh2YXAtPml2X2NhcHMgJiBJRUVFODAyMTFfQ184MDIz
RU5DQVApID09IDApKSB7Ci0JCQkvKgotCQkJICogRW5jYXBzdWxhdGUgdGhlIHBhY2tldCBpbiBw
cmVwIGZvciB0cmFuc21pc3Npb24uCi0JCQkgKi8KLQkJCW0gPSBpZWVlODAyMTFfZW5jYXAodmFw
LCBuaSwgbSk7Ci0JCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQkJLyogTkI6IHN0YXQrbXNnIGhhbmRs
ZWQgaW4gaWVlZTgwMjExX2VuY2FwICovCi0JCQkJaWVlZTgwMjExX2ZyZWVfbm9kZShuaSk7Ci0J
CQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLQkJZXJyb3IgPSBwYXJlbnQtPmlmX3RyYW5zbWl0KHBh
cmVudCwgbSk7Ci0JCWlmIChlcnJvciAhPSAwKSB7Ci0JCQkvKiBOQjogSUZRX0hBTkRPRkYgcmVj
bGFpbXMgbWJ1ZiAqLwotCQkJaWVlZTgwMjExX2ZyZWVfbm9kZShuaSk7Ci0JCX0gZWxzZSB7Ci0J
CQlpZnAtPmlmX29wYWNrZXRzKys7Ci0JCX0KLQkJaWMtPmljX2xhc3RkYXRhID0gdGlja3M7CisJ
CSh2b2lkKSBpZWVlODAyMTFfc3RhcnRfcGt0KHZhcCwgbSk7CisJCS8qIG1idWYgaXMgY29uc3Vt
ZWQgaGVyZSAqLwogCX0KLSN1bmRlZiBJU19EV0RTCiB9CiAKIC8qCkBAIC0zOTMsNiArNDI5LDcg
QEAKIAlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXA7CiAJc3RydWN0IGllZWU4MDIxMV9mcmFtZSAq
d2g7CiAJaW50IGVycm9yOworCWludCByZXQ7CiAKIAlJRlFfTE9DSygmaWZwLT5pZl9zbmQpOwog
CWlmIChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfT0FDVElWRSkgewpAQCAtNDkwLDE0ICs1
MjcsMjQgQEAKIAlJRUVFODAyMTFfTk9ERV9TVEFUX0FERChuaSwgdHhfYnl0ZXMsIG0tPm1fcGt0
aGRyLmxlbik7CiAKIAkvKgorCSAqIFNlcmlhbGlzZSB0aGUgb3JkZXIgb2YgcmF3IGZyYW1lcyB3
aXRoIHRoZSByZXN0IG9mCisJICogdGhlIG5vcm1hbCBzdGFjaywgc28gdGhpbmdzIHN1Y2ggYXMg
c2VxdWVuY2UgYW5kCisJICogY3J5cHRvIHN0YXRlIGFzc2lnbm1lbnQgYXJlIGRvbmUgaW4gdGhl
IHNhbWUgb3JkZXIKKwkgKiBhcyBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgKGVpdGhlciBieSBp
Zl90cmFuc21pdCgpCisJICogb3IgaWNfcmF3X3htaXQoKSkuCisJICovCisJSUVFRTgwMjExX1ZB
UF9UWF9MT0NLKHZhcCk7CisJLyoKIAkgKiBOQjogRExUX0lFRUU4MDJfMTFfUkFESU8gaWRlbnRp
ZmllcyB0aGUgcGFyYW1ldGVycyBhcmUKIAkgKiBwcmVzZW50IGJ5IHNldHRpbmcgdGhlIHNhX2xl
biBmaWVsZCBvZiB0aGUgc29ja2FkZHIgKHllcywKIAkgKiB0aGlzIGlzIGEgaGFjaykuCiAJICog
TkI6IHdlIGFzc3VtZSBzYV9kYXRhIGlzIHN1aXRhYmx5IGFsaWduZWQgdG8gY2FzdC4KIAkgKi8K
LQlyZXR1cm4gdmFwLT5pdl9pYy0+aWNfcmF3X3htaXQobmksIG0sCisJcmV0ID0gdmFwLT5pdl9p
Yy0+aWNfcmF3X3htaXQobmksIG0sCiAJICAgIChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2JwZl9w
YXJhbXMgKikoZHN0LT5zYV9sZW4gPwogCQlkc3QtPnNhX2RhdGEgOiBOVUxMKSk7CisJSUVFRTgw
MjExX1ZBUF9UWF9VTkxPQ0sodmFwKTsKKwlyZXR1cm4gKHJldCk7CiBiYWQ6CiAJaWYgKG0gIT0g
TlVMTCkKIAkJbV9mcmVlbShtKTsKQEAgLTYyMSw2ICs2NjgsNyBAQAogCXN0cnVjdCBpZWVlODAy
MTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CiAJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBuaS0+
bmlfaWM7CiAJc3RydWN0IGllZWU4MDIxMV9mcmFtZSAqd2g7CisJaW50IHJldDsKIAogCUtBU1NF
UlQobmkgIT0gTlVMTCwgKCJudWxsIG5vZGUiKSk7CiAKQEAgLTY3MCw3ICs3MTgsMTEgQEAKICNl
bmRpZgogCUlFRUU4MDIxMV9OT0RFX1NUQVQobmksIHR4X21nbXQpOwogCi0JcmV0dXJuIGljLT5p
Y19yYXdfeG1pdChuaSwgbSwgcGFyYW1zKTsKKwlJRUVFODAyMTFfVkFQX1RYX0xPQ0sodmFwKTsK
KwlyZXQgPSBpYy0+aWNfcmF3X3htaXQobmksIG0sIHBhcmFtcyk7CisJSUVFRTgwMjExX1ZBUF9U
WF9VTkxPQ0sodmFwKTsKKworCXJldHVybiAocmV0KTsKIH0KIAogLyoKQEAgLTY5NCw2ICs3NDYs
NyBAQAogCXN0cnVjdCBpZWVlODAyMTFfZnJhbWUgKndoOwogCWludCBoZHJsZW47CiAJdWludDhf
dCAqZnJtOworCWludCByZXQ7CiAKIAlpZiAodmFwLT5pdl9zdGF0ZSA9PSBJRUVFODAyMTFfU19D
QUMpIHsKIAkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVFODAyMTFfTVNHX09VVFBVVCB8IElFRUU4
MDIxMV9NU0dfRE9USCwKQEAgLTc3MSw3ICs4MjQsMTAgQEAKIAkgICAgaWVlZTgwMjExX2NoYW4y
aWVlZShpYywgaWMtPmljX2N1cmNoYW4pLAogCSAgICB3aC0+aV9mY1sxXSAmIElFRUU4MDIxMV9G
QzFfUFdSX01HVCA/ICJlbmEiIDogImRpcyIpOwogCi0JcmV0dXJuIGljLT5pY19yYXdfeG1pdChu
aSwgbSwgTlVMTCk7CisJSUVFRTgwMjExX1ZBUF9UWF9MT0NLKHZhcCk7CisJcmV0ID0gaWMtPmlj
X3Jhd194bWl0KG5pLCBtLCBOVUxMKTsKKwlJRUVFODAyMTFfVkFQX1RYX1VOTE9DSyh2YXApOwor
CXJldHVybiAocmV0KTsKIH0KIAogLyogCkBAIC0xMDM1LDYgKzEwOTEsOCBAQAogCWludCBtZXNo
aGRyc2l6ZSwgbWVzaGFlOwogCXVpbnQ4X3QgKnFvczsKIAorCUlFRUU4MDIxMV9WQVBfVFhfTE9D
S19BU1NFUlQodmFwKTsKKwogCS8qCiAJICogQ29weSBleGlzdGluZyBFdGhlcm5ldCBoZWFkZXIg
dG8gYSBzYWZlIHBsYWNlLiAgVGhlCiAJICogcmVzdCBvZiB0aGUgY29kZSBhc3N1bWVzIGl0J3Mg
b2sgdG8gc3RyaXAgaXQgd2hlbgpAQCAtMTgwNiw2ICsxODY0LDcgQEAKIAljb25zdCBzdHJ1Y3Qg
aWVlZTgwMjExX3JhdGVzZXQgKnJzOwogCXN0cnVjdCBtYnVmICptOwogCXVpbnQ4X3QgKmZybTsK
KwlpbnQgcmV0OwogCiAJaWYgKHZhcC0+aXZfc3RhdGUgPT0gSUVFRTgwMjExX1NfQ0FDKSB7CiAJ
CUlFRUU4MDIxMV9OT1RFKHZhcCwgSUVFRTgwMjExX01TR19PVVRQVVQsIG5pLApAQCAtMTkwNSw3
ICsxOTY0LDEwIEBACiAJfSBlbHNlCiAJCXBhcmFtcy5pYnBfdHJ5MCA9IHRwLT5tYXhyZXRyeTsK
IAlwYXJhbXMuaWJwX3Bvd2VyID0gbmktPm5pX3R4cG93ZXI7Ci0JcmV0dXJuIGljLT5pY19yYXdf
eG1pdChuaSwgbSwgJnBhcmFtcyk7CisJSUVFRTgwMjExX1ZBUF9UWF9MT0NLKHZhcCk7CisJcmV0
ID0gaWMtPmljX3Jhd194bWl0KG5pLCBtLCAmcGFyYW1zKTsKKwlJRUVFODAyMTFfVkFQX1RYX1VO
TE9DSyh2YXApOworCXJldHVybiAocmV0KTsKIH0KIAogLyoKQEAgLTI0NzQsNiArMjUzNiw3IEBA
CiAJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2ljOwogCXN0cnVjdCBpZWVlODAy
MTFfZnJhbWUgKndoOwogCXN0cnVjdCBtYnVmICptOworCWludCByZXQ7CiAKIAlpZiAodmFwLT5p
dl9zdGF0ZSA9PSBJRUVFODAyMTFfU19DQUMpIHsKIAkJSUVFRTgwMjExX05PVEUodmFwLCBJRUVF
ODAyMTFfTVNHX09VVFBVVCwgYnNzLApAQCAtMjUxNyw3ICsyNTgwLDEwIEBACiAJICAgIGxlZ2Fj
eSA/ICIgPGxlZ2FjeT4iIDogIiIpOwogCUlFRUU4MDIxMV9OT0RFX1NUQVQoYnNzLCB0eF9tZ210
KTsKIAotCXJldHVybiBpYy0+aWNfcmF3X3htaXQoYnNzLCBtLCBOVUxMKTsKKwlJRUVFODAyMTFf
VkFQX1RYX0xPQ0sodmFwKTsKKwlyZXQgPSBpYy0+aWNfcmF3X3htaXQoYnNzLCBtLCBOVUxMKTsK
KwlJRUVFODAyMTFfVkFQX1RYX1VOTE9DSyh2YXApOworCXJldHVybiAocmV0KTsKIH0KIAogLyoK
SW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz
L25ldDgwMjExL2llZWU4MDIxMV9zdXBlcmcuYwkocmV2aXNpb24gMjQ2ODE4KQorKysgc3lzL25l
dDgwMjExL2llZWU4MDIxMV9zdXBlcmcuYwkod29ya2luZyBjb3B5KQpAQCAtMzgyLDYgKzM4Miwx
MiBAQAogCXN0cnVjdCBtYnVmICptOwogCWludCBwYWQ7CiAKKwkvKgorCSAqIFRoaXMgaXMgY2Fs
bGVkIGZyb20gaWVlZTgwMjExX2VuY2FwKCkgLSBzbyB0aGUgVFggbG9jaworCSAqIGlzIHJlcXVp
cmVkLgorCSAqLworCUlFRUU4MDIxMV9WQVBfVFhfTE9DS19BU1NFUlQodmFwKTsKKwogCW0yID0g
bTEtPm1fbmV4dHBrdDsKIAlpZiAobTIgPT0gTlVMTCkgewogCQlJRUVFODAyMTFfRFBSSU5URih2
YXAsIElFRUU4MDIxMV9NU0dfU1VQRVJHLApAQCAtNTAzLDIxICs1MDksMjcgQEAKIAlzdHJ1Y3Qg
aWVlZTgwMjExdmFwICp2YXAgPSBuaS0+bmlfdmFwOwogCWludCBlcnJvcjsKIAorCUlFRUU4MDIx
MV9WQVBfVFhfVU5MT0NLX0FTU0VSVCh2YXApOworCiAJLyogZW5jYXAgYW5kIHhtaXQgKi8KKwlJ
RUVFODAyMTFfVkFQX1RYX0xPQ0sodmFwKTsKIAltID0gaWVlZTgwMjExX2VuY2FwKHZhcCwgbmks
IG0pOwogCWlmIChtICE9IE5VTEwpIHsKIAkJc3RydWN0IGlmbmV0ICppZnAgPSB2YXAtPml2X2lm
cDsKIAkJc3RydWN0IGlmbmV0ICpwYXJlbnQgPSBuaS0+bmlfaWMtPmljX2lmcDsKIAogCQllcnJv
ciA9IHBhcmVudC0+aWZfdHJhbnNtaXQocGFyZW50LCBtKTsKKwkJSUVFRTgwMjExX1ZBUF9UWF9V
TkxPQ0sodmFwKTsKIAkJaWYgKGVycm9yICE9IDApIHsKIAkJCS8qIE5COiBJRlFfSEFORE9GRiBy
ZWNsYWltcyBtYnVmICovCiAJCQlpZWVlODAyMTFfZnJlZV9ub2RlKG5pKTsKIAkJfSBlbHNlIHsK
IAkJCWlmcC0+aWZfb3BhY2tldHMrKzsKIAkJfQotCX0gZWxzZQorCX0gZWxzZSB7CisJCUlFRUU4
MDIxMV9WQVBfVFhfVU5MT0NLKHZhcCk7CiAJCWllZWU4MDIxMV9mcmVlX25vZGUobmkpOworCX0K
IH0KIAogLyoKQEAgLTY3OSw2ICs2OTEsOCBAQAogCXN0cnVjdCBtYnVmICptc3RhZ2VkOwogCXVp
bnQzMl90IHR4dGltZSwgbGltaXQ7CiAKKwlJRUVFODAyMTFfVkFQX1RYX1VOTE9DS19BU1NFUlQo
dmFwKTsKKwogCS8qCiAJICogQ2hlY2sgaWYgdGhlIHN1cHBsaWVkIGZyYW1lIGNhbiBiZSBhZ2dy
ZWdhdGVkLgogCSAqCkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2ZyZWVic2QuaAkocmV2aXNpb24gMjQ2
ODE4KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9mcmVlYnNkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2MCw2ICsxNjAsMzIgQEAKICNkZWZpbmUJSUVFRTgwMjExX1NDQU5fVEFCTEVfVU5MT0NL
KF9zdCkJbXR4X3VubG9jaygmKF9zdCktPnN0X2xvY2spCiAKIC8qCisgKiBWQVAgdHJhbnNtaXQg
c3RhdGUgbG9jayBkZWZpbml0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhcgkJbmFt
ZVsxNl07CQkvKiBlLmcuICJ3bGFuMF90eF9sb2NrIiAqLworCXN0cnVjdCBtdHgJbXR4OworfSBp
ZWVlODAyMTFfdmFwX3R4X2xvY2tfdDsKKyNkZWZpbmUJSUVFRTgwMjExX1ZBUF9UWF9MT0NLX0lO
SVQoX3ZhcCwgX25hbWUpIGRvIHsJCQlcCisJaWVlZTgwMjExX3ZhcF90eF9sb2NrX3QgKnR4bCA9
ICYoX3ZhcCktPml2X3R4X2xvY2s7CQlcCisJc25wcmludGYodHhsLT5uYW1lLCBzaXplb2YodHhs
LT5uYW1lKSwgIiVzX3R4X2xvY2siLCBfbmFtZSk7CVwKKwltdHhfaW5pdCgmdHhsLT5tdHgsIHR4
bC0+bmFtZSwgTlVMTCwgTVRYX0RFRik7CQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJSUVFRTgw
MjExX1ZBUF9UWF9MT0NLX09CSihfdHhsKQkoJihfdHhsKS0+aXZfdHhfbG9jay5tdHgpCisjZGVm
aW5lCUlFRUU4MDIxMV9WQVBfVFhfTE9DS19ERVNUUk9ZKF90eGwpIFwKKwltdHhfZGVzdHJveShJ
RUVFODAyMTFfVkFQX1RYX0xPQ0tfT0JKKF90eGwpKQorI2RlZmluZQlJRUVFODAyMTFfVkFQX1RY
X0xPQ0soX3R4bCkgXAorCW10eF9sb2NrKElFRUU4MDIxMV9WQVBfVFhfTE9DS19PQkooX3R4bCkp
CisjZGVmaW5lCUlFRUU4MDIxMV9WQVBfVFhfSVNfTE9DS0VEKF90eGwpIFwKKwltdHhfb3duZWQo
SUVFRTgwMjExX1ZBUF9UWF9MT0NLX09CSihfdHhsKSkKKyNkZWZpbmUJSUVFRTgwMjExX1ZBUF9U
WF9VTkxPQ0soX3R4bCkgXAorCW10eF91bmxvY2soSUVFRTgwMjExX1ZBUF9UWF9MT0NLX09CSihf
dHhsKSkKKyNkZWZpbmUJSUVFRTgwMjExX1ZBUF9UWF9MT0NLX0FTU0VSVChfdHhsKQlcCisJbXR4
X2Fzc2VydChJRUVFODAyMTFfVkFQX1RYX0xPQ0tfT0JKKF90eGwpLCBNQV9PV05FRCkKKyNkZWZp
bmUJSUVFRTgwMjExX1ZBUF9UWF9VTkxPQ0tfQVNTRVJUKF90eGwpCVwKKwltdHhfYXNzZXJ0KElF
RUU4MDIxMV9WQVBfVFhfTE9DS19PQkooX3R4bCksIE1BX05PVE9XTkVEKQorCisvKgogICogTm9k
ZSByZWZlcmVuY2UgY291bnRpbmcgZGVmaW5pdGlvbnMuCiAgKgogICogaWVlZTgwMjExX25vZGVf
aW5pdHJlZglpbml0aWFsaXplIHRoZSByZWZlcmVuY2UgY291bnQgdG8gMQpJbmRleDogc3lzL25l
dDgwMjExL2llZWU4MDIxMV9wb3dlci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVl
ODAyMTFfcG93ZXIuYwkocmV2aXNpb24gMjQ2ODE4KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIx
MV9wb3dlci5jCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsMTAgKzQxOCwxMyBAQAogCXN0cnVjdCBp
Zm5ldCAqcGFyZW50LCAqaWZwOwogCXN0cnVjdCBtYnVmICpwYXJlbnRfcSA9IE5VTEwsICppZnBf
cSA9IE5VTEw7CiAJc3RydWN0IG1idWYgKm07CisJaW50IHJldDsKIAogCUlFRUU4MDIxMV9OT1RF
KHZhcCwgSUVFRTgwMjExX01TR19QT1dFUiwgbmksCiAJICAgICJmbHVzaCBwcyBxdWV1ZSwgJXUg
cGFja2V0cyBxdWV1ZWQiLCBwc3EtPnBzcV9sZW4pOwogCisJSUVFRTgwMjExX1ZBUF9UWF9VTkxP
Q0tfQVNTRVJUKHZhcCk7CisKIAlJRUVFODAyMTFfUFNRX0xPQ0socHNxKTsKIAlxaGVhZCA9ICZw
c3EtPnBzcV9oZWFkWzBdOwkvKiA4MDIuMTEgZnJhbWVzICovCiAJaWYgKHFoZWFkLT5oZWFkICE9
IE5VTEwpIHsKQEAgLTQ2Myw3ICs0NjYsMTAgQEAKIAkJCSAqIEZvciBlbmNhcGVkIGZyYW1lcywg
d2UgbmVlZCB0byBmcmVlIHRoZSBub2RlCiAJCQkgKiByZWZlcmVuY2UgdXBvbiBmYWlsdXJlLgog
CQkJICovCi0JCQlpZiAocGFyZW50LT5pZl90cmFuc21pdChwYXJlbnQsIG0pICE9IDApCisJCQlJ
RUVFODAyMTFfVkFQX1RYX0xPQ0sodmFwKTsKKwkJCXJldCA9IHBhcmVudC0+aWZfdHJhbnNtaXQo
cGFyZW50LCBtKTsKKwkJCUlFRUU4MDIxMV9WQVBfVFhfVU5MT0NLKHZhcCk7CisJCQlpZiAocmV0
ICE9IDApCiAJCQkJaWVlZTgwMjExX2ZyZWVfbm9kZShuaSk7CiAJCX0KIAl9CkluZGV4OiBzeXMv
bmV0ODAyMTEvaWVlZTgwMjExX3Zhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVl
ODAyMTFfdmFyLmgJKHJldmlzaW9uIDI0NjgxOCkKKysrIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFf
dmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw2ICszNDIsOCBAQAogCXN0cnVjdCBzeXNjdGxf
Y3R4X2xpc3QJKml2X3N5c2N0bDsJLyogZHluYW1pYyBzeXNjdGwgY29udGV4dCAqLwogCXN0cnVj
dCBzeXNjdGxfb2lkCSppdl9vaWQ7CS8qIG5ldC53bGFuLlggc3lzY3RsIG9pZCAqLwogCisJaWVl
ZTgwMjExX3ZhcF90eF9sb2NrX3QJaXZfdHhfbG9jazsJLyogcGVyLVZBUCBUWCBzZXJpYWxpc2F0
aW9uICovCisKIAlUQUlMUV9FTlRSWShpZWVlODAyMTF2YXApIGl2X25leHQ7CS8qIGxpc3Qgb2Yg
dmFwIGluc3RhbmNlcyAqLwogCXN0cnVjdCBpZWVlODAyMTFjb20JKml2X2ljOwkJLyogYmFjayBw
dHIgdG8gY29tbW9uIHN0YXRlICovCiAJdWludDMyX3QJCWl2X2RlYnVnOwkvKiBkZWJ1ZyBtc2cg
ZmxhZ3MgKi8KQEAgLTQ5Nyw2ICs0OTksNyBAQAogCS8qIDgwMi4zIG91dHB1dCBtZXRob2QgZm9y
IHJhdyBmcmFtZSB4bWl0ICovCiAJaW50CQkJKCppdl9vdXRwdXQpKHN0cnVjdCBpZm5ldCAqLCBz
dHJ1Y3QgbWJ1ZiAqLAogCQkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHJvdXRlICop
OworCiAJdWludDY0X3QJCWl2X3NwYXJlWzZdOwogfTsKIE1BTExPQ19ERUNMQVJFKE1fODAyMTFf
VkFQKTsKSW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfaG9zdGFwLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9ob3N0YXAuYwkocmV2aXNpb24gMjQ2ODE4KQorKysg
c3lzL25ldDgwMjExL2llZWU4MDIxMV9ob3N0YXAuYwkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYg
KzM1NCw4IEBACiAJc3RydWN0IGV0aGVyX2hlYWRlciAqZWggPSBtdG9kKG0sIHN0cnVjdCBldGhl
cl9oZWFkZXIgKik7CiAJc3RydWN0IGlmbmV0ICppZnAgPSB2YXAtPml2X2lmcDsKIAorCUlFRUU4
MDIxMV9WQVBfVFhfVU5MT0NLX0FTU0VSVCh2YXApOworCiAJLyogY2xlYXIgZHJpdmVyL25ldDgw
MjExIGZsYWdzIGJlZm9yZSBwYXNzaW5nIHVwICovCiAJbS0+bV9mbGFncyAmPSB+KE1fODAyMTFf
UlggfCBNX01DQVNUIHwgTV9CQ0FTVCk7CiAKQEAgLTQxMiw2ICs0MTQsNyBAQAogCQlpZiAobWNv
cHkgIT0gTlVMTCkgewogCQkJaW50IGxlbiwgZXJyOwogCQkJbGVuID0gbWNvcHktPm1fcGt0aGRy
LmxlbjsKKwkJCS8qIFZBUCB0cmFuc21pdCAqLwogCQkJZXJyID0gaWZwLT5pZl90cmFuc21pdChp
ZnAsIG1jb3B5KTsKIAkJCWlmIChlcnIpIHsKIAkJCQkvKiBOQjogSUZRX0hBTkRPRkYgcmVjbGFp
bXMgbWNvcHkgKi8KQEAgLTQzNyw2ICs0NDAsNyBAQAogCQkJbS0+bV9wa3RoZHIuZXRoZXJfdnRh
ZyA9IG5pLT5uaV92bGFuOwogCQkJbS0+bV9mbGFncyB8PSBNX1ZMQU5UQUc7CiAJCX0KKwkJLyog
VkFQIHRyYW5zbWl0ICovCiAJCWlmcC0+aWZfaW5wdXQoaWZwLCBtKTsKIAl9CiB9CkluZGV4OiBz
eXMvbmV0ODAyMTEvaWVlZTgwMjExLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4
MDIxMS5jCShyZXZpc2lvbiAyNDY4MTgpCisrKyBzeXMvbmV0ODAyMTEvaWVlZTgwMjExLmMJKHdv
cmtpbmcgY29weSkKQEAgLTUxMSw2ICs1MTEsOCBAQAogCiAJSUVFRTgwMjExX0FERFJfQ09QWSh2
YXAtPml2X215YWRkciwgbWFjYWRkcik7CiAKKwlJRUVFODAyMTFfVkFQX1RYX0xPQ0tfSU5JVCh2
YXAsIGlmX25hbWUodmFwLT5pdl9pZnApKTsKKwogCWllZWU4MDIxMV9zeXNjdGxfdmF0dGFjaCh2
YXApOwogCWllZWU4MDIxMV9jcnlwdG9fdmF0dGFjaCh2YXApOwogCWllZWU4MDIxMV9ub2RlX3Zh
dHRhY2godmFwKTsKQEAgLTY1Nyw2ICs2NTksOCBAQAogCWllZWU4MDIxMV9ub2RlX3ZkZXRhY2go
dmFwKTsKIAlpZWVlODAyMTFfc3lzY3RsX3ZkZXRhY2godmFwKTsKIAorCUlFRUU4MDIxMV9WQVBf
VFhfTE9DS19ERVNUUk9ZKHZhcCk7CisKIAlpZl9mcmVlKGlmcCk7CiAKIAlDVVJWTkVUX1JFU1RP
UkUoKTsK
--f46d0438eddbcd315904d6153cbc--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmon=SdO66j99dEPT1uSqhmJoNPYVexy-PT0__XTX3My%2BTQ>