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>