From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chandan Uddaraju Subject: [DPU PATCH v2 3/3] drm/msm/dp: add support for DP PLL driver Date: Mon, 7 Jan 2019 12:51:11 -0800 Message-ID: <1546894271-25870-4-git-send-email-chandanu@codeaurora.org> References: <1546894271-25870-1-git-send-email-chandanu@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1546894271-25870-1-git-send-email-chandanu@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, seanpaul@chromium.org Cc: abhinavk@codeaurora.org, hoegsberg@google.com, dri-devel@lists.freedesktop.org, Chandan Uddaraju List-Id: devicetree@vger.kernel.org QWRkIHRoZSBuZWVkZWQgRFAgUExMIHNwZWNpZmljIGZpbGVzIHRvIHN1cHBvcnQKZGlzcGxheSBw b3J0IGludGVyZmFjZSBvbiBtc20gdGFyZ2V0cy4KClRoZSBEUCBkcml2ZXIgY2FsbHMgdGhlIERQ IFBMTCBkcml2ZXIgcmVnaXN0cmF0aW9uLgpUaGUgRFAgZHJpdmVyIHNldHMgdGhlIGxpbmsgYW5k IHBpeGVsIGNsb2NrIHNvdXJjZXMuCgpDaGFuZ2VzIGluIHYyOgotLSBVcGRhdGUgY29weXJpZ2h0 IG1hcmtpbmdzIG9uIGFsbCByZWxldmFudCBmaWxlcy4KLS0gVXNlIERSTV9ERUJVR19EUCBmb3Ig ZGVidWcgbXNncy4KClNpZ25lZC1vZmYtYnk6IENoYW5kYW4gVWRkYXJhanUgPGNoYW5kYW51QGNv ZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZyAgICAgICAgICAg ICAgICAgICB8ICAxNSArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAg ICAgICAgfCAgIDYgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMgICAgICAg ICAgIHwgIDUwICsrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmggICAgICAg ICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmggICAgICAgICAg ICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmggICAgICAgICAgICAg fCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsLmMgICAgICAgICAgIHwg MTQ1ICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbC5oICAgICAgICAg ICB8ICA1NiArKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbF8xMG5tLmMgICAg ICB8IDM5MyArKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9k cF9wbGxfMTBubS5oICAgICAgfCAgODYgKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxs L2RwX3BsbF8xMG5tX3V0aWwuYyB8IDUyMiArKysrKysrKysrKysrKysrKysrKysrKysrKwogMTEg ZmlsZXMgY2hhbmdlZCwgMTI4MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbF8xMG5tLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubS5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsXzEwbm1fdXRpbC5jCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL21zbS9L Y29uZmlnCmluZGV4IGM2YjJlMDcuLjIxNjg0MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKQEAgLTU4LDYg KzU4LDIxIEBAIGNvbmZpZyBEUk1fTVNNX0RQCiAJICBkaXNwbGF5IHN1cHBvcnQgaXMgZW5hYmxl ZCB0aHJvdWdoIHRoaXMgY29uZmlnIG9wdGlvbi4gSXQgY2FuCiAJICBiZSBwcmltYXJ5IG9yIHNl Y29uZGFyeSBkaXNwbGF5IG9uIGRldmljZS4KIAorY29uZmlnIERSTV9NU01fRFBfUExMCisJYm9v bCAiRW5hYmxlIERQIFBMTCBkcml2ZXIgaW4gTVNNIERSTSIKKwlkZXBlbmRzIG9uIERSTV9NU01f RFAgJiYgQ09NTU9OX0NMSworCWRlZmF1bHQgeQorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlv biB0byBlbmFibGUgRFAgUExMIGRyaXZlciB3aGljaCBwcm92aWRlcyBEUAorCSAgc291cmNlIGNs b2NrcyB1bmRlciBjb21tb24gY2xvY2sgZnJhbWV3b3JrLgorCitjb25maWcgRFJNX01TTV9EUF8x ME5NX1BMTAorCWJvb2wgIkVuYWJsZSBEUCAxMG5tIFBMTCBkcml2ZXIgaW4gTVNNIERSTSAodXNl ZCBieSBTRE04NDUpIgorCWRlcGVuZHMgb24gRFJNX01TTV9EUAorCWRlZmF1bHQgeQorCWhlbHAK KwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiBEUCBQTEwgb24gU0RNODQ1IGlzIHVzZWQgb24gdGhl IHBsYXRmb3JtLgorCiBjb25maWcgRFJNX01TTV9EU0kKIAlib29sICJFbmFibGUgRFNJIHN1cHBv cnQgaW4gTVNNIERSTSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBEUk1fTVNNCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmls ZQppbmRleCA0NTE2NmVmLi43N2Y0NWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKQEAgLTEzNyw0ICsx MzcsMTAgQEAgbXNtLSQoQ09ORklHX0RSTV9NU01fRFNJXzE0Tk1fUEhZKSArPSBkc2kvcGxsL2Rz aV9wbGxfMTRubS5vCiBtc20tJChDT05GSUdfRFJNX01TTV9EU0lfMTBOTV9QSFkpICs9IGRzaS9w bGwvZHNpX3BsbF8xMG5tLm8KIGVuZGlmCiAKK2lmZXEgKCQoQ09ORklHX0RSTV9NU01fRFBfUExM KSx5KQorbXNtLXkgKz0gZHAvcGxsL2RwX3BsbC5vCittc20teSArPSBkcC9wbGwvZHBfcGxsXzEw bm0ubworbXNtLXkgKz0gZHAvcGxsL2RwX3BsbF8xMG5tX3V0aWwubworZW5kaWYKKwogb2JqLSQo Q09ORklHX0RSTV9NU00pCSs9IG1zbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCmlu ZGV4IDFiMDY4MmEuLjIxMmUyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAv ZHBfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCkBA IC02MSw2ICs2MSw0OCBAQCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlIHsKIAl7fQogfTsKIAor c3RhdGljIGludCBkcF9nZXRfcGxsKHN0cnVjdCBkcF9kaXNwbGF5X3ByaXZhdGUgKmRwX3ByaXYp Cit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IE5VTEw7CisJc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGxsX3BkZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpwbGxfbm9kZTsKKwlz dHJ1Y3QgZHBfcGFyc2VyICpkcF9wYXJzZXIgPSBOVUxMOworCisJaWYgKCFkcF9wcml2KSB7CisJ CURSTV9FUlJPUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwlwZGV2ID0gZHBfcHJpdi0+cGRldjsKKwlkcF9wYXJzZXIgPSBkcF9wcml2LT5wYXJzZXI7 CisKKwlpZiAoIWRwX3BhcnNlcikgeworCQlEUk1fRVJST1IoIlBhcnNlciBub3QgaW5pdGlhbGl6 ZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGxsX25vZGUgPSBvZl9wYXJzZV9w aGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLCAicGxsLW5vZGUiLCAwKTsKKwlpZiAoIXBsbF9ub2Rl KSB7CisJCURSTV9ERVZfRVJST1IoJnBkZXYtPmRldiwgImNhbm5vdCBmaW5kIHBsbCBkZXZpY2Vc biIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXBsbF9wZGV2ID0gb2ZfZmluZF9kZXZpY2Vf Ynlfbm9kZShwbGxfbm9kZSk7CisJaWYgKHBsbF9wZGV2KQorCQlkcF9wYXJzZXItPnBsbCA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBsbF9wZGV2KTsKKworCW9mX25vZGVfcHV0KHBsbF9ub2RlKTsK KworCWlmICghcGxsX3BkZXYgfHwgIWRwX3BhcnNlci0+cGxsKSB7CisJCURSTV9ERVZfRVJST1Io JnBkZXYtPmRldiwgIiVzOiBwbGwgZHJpdmVyIGlzIG5vdCByZWFkeVxuIiwgX19mdW5jX18pOwor CQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwlkcF9wYXJzZXItPnBsbF9kZXYgPSBnZXRf ZGV2aWNlKCZwbGxfcGRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0 dXJuX3QgZHBfZGlzcGxheV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBk cF9kaXNwbGF5X3ByaXZhdGUgKmRwID0gZGV2X2lkOwpAQCAtMTE0LDYgKzE1NiwxMiBAQCBzdGF0 aWMgaW50IGRwX2Rpc3BsYXlfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Ug Km1hc3RlciwKIAkJZ290byBlbmQ7CiAJfQogCisJcmMgPSBkcF9nZXRfcGxsKGRwKTsKKwlpZiAo cmMpIHsKKwkJRFJNX0VSUk9SKCIgRFAgZ2V0IFBMTCBpbnN0YW5jZSBmYWlsZWRcbiIpOworCQln b3RvIGVuZDsKKwl9CisKIAlyYyA9IGRwX2F1eF9yZWdpc3RlcihkcC0+YXV4KTsKIAlpZiAocmMp IHsKIAkJRFJNX0VSUk9SKCJEUk0gRFAgQVVYIHJlZ2lzdGVyIGZhaWxlZFxuIik7CkBAIC04MDQs NiArODUyLDcgQEAgaW50IF9faW5pdCBtc21fZHBfcmVnaXN0ZXIodm9pZCkKIHsKIAlpbnQgcmV0 OwogCisJbXNtX2RwX3BsbF9kcml2ZXJfcmVnaXN0ZXIoKTsKIAlyZXQgPSBwbGF0Zm9ybV9kcml2 ZXJfcmVnaXN0ZXIoJmRwX2Rpc3BsYXlfZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJP UigiZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCIpOwpAQCAtODE1LDYgKzg2NCw3IEBAIGludCBfX2lu aXQgbXNtX2RwX3JlZ2lzdGVyKHZvaWQpCiAKIHZvaWQgX19leGl0IG1zbV9kcF91bnJlZ2lzdGVy KHZvaWQpCiB7CisJbXNtX2RwX3BsbF9kcml2ZXJfdW5yZWdpc3RlcigpOwogCXBsYXRmb3JtX2Ry aXZlcl91bnJlZ2lzdGVyKCZkcF9kaXNwbGF5X2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9kaXNwbGF5LmgKaW5kZXggY2UwOWJiNi4uM2FhNmJmNyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k cC9kcF9kaXNwbGF5LmgKQEAgLTI1LDQgKzI1LDcgQEAgaW50IGRwX2Rpc3BsYXlfZ2V0X21vZGVz KHN0cnVjdCBtc21fZHAgKmRwX2Rpc3BsYXksCiBib29sIGRwX2Rpc3BsYXlfY2hlY2tfdmlkZW9f dGVzdChzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKIGludCBkcF9kaXNwbGF5X2dldF90ZXN0 X2JwcChzdHJ1Y3QgbXNtX2RwICpkcF9kaXNwbGF5KTsKIAordm9pZCBfX2luaXQgbXNtX2RwX3Bs bF9kcml2ZXJfcmVnaXN0ZXIodm9pZCk7Cit2b2lkIF9fZXhpdCBtc21fZHBfcGxsX2RyaXZlcl91 bnJlZ2lzdGVyKHZvaWQpOworCiAjZW5kaWYgLyogX0RQX0RJU1BMQVlfSF8gKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmggYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2RwL2RwX3BhcnNlci5oCmluZGV4IGUzNWE1MGIuLjE2NmY0MWUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wYXJzZXIuaApAQCAtNyw2ICs3LDcgQEAKICNkZWZpbmUgX0RQX1BBUlNFUl9IXwog CiAjaW5jbHVkZSAiZHB1X2lvX3V0aWwuaCIKKyNpbmNsdWRlICJwbGwvZHBfcGxsLmgiCiAKICNk ZWZpbmUgRFBfTEFCRUwgIk1EU1MgRFAgRElTUExBWSIKICNkZWZpbmUgQVVYX0NGR19MRU4JMTAK QEAgLTE2Niw2ICsxNjcsOCBAQCBzdHJ1Y3QgZHBfcGFyc2VyIHsKIAlzdHJ1Y3QgZHBfcGluY3Ry bCBwaW5jdHJsOwogCXN0cnVjdCBkcF9pbyBpbzsKIAlzdHJ1Y3QgZHBfZGlzcGxheV9kYXRhIGRp c3BfZGF0YTsKKwlzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsOworCXN0cnVjdCBkZXZpY2UgKnBsbF9k ZXY7CiAKIAl1OCBsX21hcFs0XTsKIAlzdHJ1Y3QgZHBfYXV4X2NmZyBhdXhfY2ZnW0FVWF9DRkdf TEVOXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuaAppbmRleCA3NmUyZDNiLi40MGQ3ZTczIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oCkBAIC0xNCw2ICsxNCw3IEBACiAgKiBAaW5pdDog aW5pdGlhbGl6ZXMgdGhlIHJlZ3VsYXRvcnMvY29yZSBjbG9ja3MvR1BJT3MvcGluY3RybAogICog QGRlaW5pdDogdHVybnMgb2ZmIHRoZSByZWd1bGF0b3JzL2NvcmUgY2xvY2tzL0dQSU9zL3BpbmN0 cmwKICAqIEBjbGtfZW5hYmxlOiBlbmFibGUvZGlzYWJsZSB0aGUgRFAgY2xvY2tzCisgKiBAc2V0 X2xpbmtfY2xrX3BhcmVudDogc2V0IHRoZSBwYXJlbnQgb2YgRFAgbGluayBjbG9jawogICogQHNl dF9waXhlbF9jbGtfcGFyZW50OiBzZXQgdGhlIHBhcmVudCBvZiBEUCBwaXhlbCBjbG9jawogICov CiBzdHJ1Y3QgZHBfcG93ZXIgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9w bGwvZHBfcGxsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGwuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGYwZTkyCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAxOSwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisgKi8KKworI2luY2x1ZGUgImRwX3BsbC5oIgorCitpbnQgbXNtX2RwX3BsbF91dGlsX3BhcnNl X2R0X2Nsb2NrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCXN0cnVjdCBtc21f ZHBfcGxsICpwbGwpCit7CisJdTMyIGkgPSAwLCByYyA9IDA7CisJc3RydWN0IGRzc19tb2R1bGVf cG93ZXIgKm1wID0gJnBsbC0+bXA7CisJY29uc3QgY2hhciAqY2xvY2tfbmFtZTsKKwl1MzIgY2xv Y2tfcmF0ZTsKKworCW1wLT5udW1fY2xrID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhwZGV2 LT5kZXYub2Zfbm9kZSwKKwkJCQkJCQkiY2xvY2stbmFtZXMiKTsKKwlpZiAobXAtPm51bV9jbGsg PD0gMCkgeworCQlEUk1fRVJST1IoImNsb2NrcyBhcmUgbm90IGRlZmluZWRcbiIpOworCQlnb3Rv IGNsa19lcnI7CisJfQorCisJbXAtPmNsa19jb25maWcgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRl diwKKwkJCXNpemVvZihzdHJ1Y3QgZHNzX2NsaykgKiBtcC0+bnVtX2NsaywgR0ZQX0tFUk5FTCk7 CisJaWYgKCFtcC0+Y2xrX2NvbmZpZykgeworCQlyYyA9IC1FTk9NRU07CisJCW1wLT5udW1fY2xr ID0gMDsKKwkJZ290byBjbGtfZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtcC0+bnVtX2Ns azsgaSsrKSB7CisJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KHBkZXYtPmRldi5vZl9u b2RlLCAiY2xvY2stbmFtZXMiLAorCQkJCQkJCWksICZjbG9ja19uYW1lKTsKKwkJc3RybGNweSht cC0+Y2xrX2NvbmZpZ1tpXS5jbGtfbmFtZSwgY2xvY2tfbmFtZSwKKwkJCQlzaXplb2YobXAtPmNs a19jb25maWdbaV0uY2xrX25hbWUpKTsKKworCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChw ZGV2LT5kZXYub2Zfbm9kZSwgImNsb2NrLXJhdGUiLAorCQkJCQkJCWksICZjbG9ja19yYXRlKTsK KwkJbXAtPmNsa19jb25maWdbaV0ucmF0ZSA9IGNsb2NrX3JhdGU7CisKKwkJaWYgKCFjbG9ja19y YXRlKQorCQkJbXAtPmNsa19jb25maWdbaV0udHlwZSA9IERTU19DTEtfQUhCOworCQllbHNlCisJ CQltcC0+Y2xrX2NvbmZpZ1tpXS50eXBlID0gRFNTX0NMS19QQ0xLOworCX0KKworY2xrX2VycjoK KwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtc21fZHBfcGxsICptc21fZHBfcGxsX2luaXQoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCWVudW0gbXNtX2RwX3BsbF90eXBlIHR5cGUs IGludCBpZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBt c21fZHBfcGxsICpwbGw7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1TTV9EUF9QTExfMTBO TToKKwkJcGxsID0gbXNtX2RwX3BsbF8xMG5tX2luaXQocGRldiwgaWQpOworCQlicmVhazsKKwlk ZWZhdWx0OgorCQlwbGwgPSBFUlJfUFRSKC1FTlhJTyk7CisJCWJyZWFrOworCX0KKworCWlmIChJ U19FUlIocGxsKSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIiVzOiBmYWlsZWQgdG8gaW5pdCBE UCBQTExcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHBsbDsKKwl9CisKKwlwbGwtPnR5cGUgPSB0 eXBlOworCisJREJHKCJEUDolZCBQTEwgcmVnaXN0ZXJlZCIsIGlkKTsKKworCXJldHVybiBwbGw7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRwX3BsbF9kdF9tYXRjaFtd ID0geworI2lmZGVmIENPTkZJR19EUk1fTVNNX0RQXzEwTk1fUExMCisJeyAuY29tcGF0aWJsZSA9 ICJxY29tLGRwLXBsbC0xMG5tIiB9LAorI2VuZGlmCisJe30KK307CisKK3N0YXRpYyBpbnQgZHBf cGxsX2RyaXZlcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj dCBtc21fZHBfcGxsICpwbGw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwllbnVtIG1zbV9kcF9wbGxfdHlwZSB0 eXBlOworCisJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKGRwX3BsbF9kdF9tYXRjaCwgZGV2LT5vZl9u b2RlKTsKKwlpZiAoIW1hdGNoKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghc3RyY21wKG1h dGNoLT5jb21wYXRpYmxlLCAicWNvbSxkcC1wbGwtMTBubSIpKQorCQl0eXBlID0gTVNNX0RQX1BM TF8xME5NOworCWVsc2UKKwkJdHlwZSA9IE1TTV9EUF9QTExfTUFYOworCisJcGxsID0gbXNtX2Rw X3BsbF9pbml0KHBkZXYsIHR5cGUsIDApOworCWlmIChJU19FUlJfT1JfTlVMTChwbGwpKSB7CisJ CWRldl9pbmZvKGRldiwKKwkJCSIlczogcGxsIGluaXQgZmFpbGVkOiAlbGQsIG5lZWQgc2VwYXJh dGUgcGxsIGNsayBkcml2ZXJcbiIsCisJCQlfX2Z1bmNfXywgUFRSX0VSUihwbGwpKTsKKwkJcmV0 dXJuIC1FTk9ERVY7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGxsKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRwX3BsbF9kcml2ZXJfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1zbV9kcF9wbGwgKnBsbCA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHBsbCkgeworCQkvL21zbV9kc2lfcGxsX2Rl c3Ryb3kocGxsKTsKKwkJcGxsID0gTlVMTDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBkcF9wbGxfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZSAgICAgID0gZHBfcGxsX2Ry aXZlcl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGRwX3BsbF9kcml2ZXJfcmVtb3ZlLAorCS5kcml2 ZXIgICAgID0geworCQkubmFtZSAgID0gIm1zbV9kcF9wbGwiLAorCQkub2ZfbWF0Y2hfdGFibGUg PSBkcF9wbGxfZHRfbWF0Y2gsCisJfSwKK307CisKK3ZvaWQgX19pbml0IG1zbV9kcF9wbGxfZHJp dmVyX3JlZ2lzdGVyKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkcF9wbGxf cGxhdGZvcm1fZHJpdmVyKTsKK30KKwordm9pZCBfX2V4aXQgbXNtX2RwX3BsbF9kcml2ZXJfdW5y ZWdpc3Rlcih2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkcF9wbGxfcGxh dGZvcm1fZHJpdmVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxs L2RwX3BsbC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyNmIwZAotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAxOSwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisgKi8KKworI2lmbmRlZiBfX0RQX1BMTF9ICisjZGVmaW5lIF9fRFBfUExMX0gKKworI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAiZHB1X2lvX3V0aWwuaCIK KyNpbmNsdWRlICJtc21fZHJ2LmgiCisKKyNkZWZpbmUgUExMX1JFR19XKGJhc2UsIG9mZnNldCwg ZGF0YSkJXAorCQkJCXdyaXRlbF9yZWxheGVkKChkYXRhKSwgKGJhc2UpICsgKG9mZnNldCkpCisj ZGVmaW5lIFBMTF9SRUdfUihiYXNlLCBvZmZzZXQpCXJlYWRsX3JlbGF4ZWQoKGJhc2UpICsgKG9m ZnNldCkpCisKK2VudW0gbXNtX2RwX3BsbF90eXBlIHsKKwlNU01fRFBfUExMXzEwTk0sCisJTVNN X0RQX1BMTF9NQVgKK307CisKK3N0cnVjdCBtc21fZHBfcGxsIHsKKwllbnVtIG1zbV9kcF9wbGxf dHlwZSB0eXBlOworCXN0cnVjdCBjbGtfaHcgY2xrX2h3OworCXVuc2lnbmVkIGxvbmcJcmF0ZTsJ CS8qIGN1cnJlbnQgdmNvIHJhdGUgKi8KKwl1NjQJCW1pbl9yYXRlOwkvKiBtaW4gdmNvIHJhdGUg Ki8KKwl1NjQJCW1heF9yYXRlOwkvKiBtYXggdmNvIHJhdGUgKi8KKwlib29sCQlwbGxfb247CisJ dm9pZAkJKnByaXY7CisJLyogUGxsIHNwZWNpZmljIHJlc291cmNlcyBsaWtlIEdQSU8sIHBvd2Vy IHN1cHBseSwgY2xvY2tzLCBldGMqLworCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyIG1wOworCWlu dCAoKmdldF9wcm92aWRlcikoc3RydWN0IG1zbV9kcF9wbGwgKnBsbCwKKwkJCXN0cnVjdCBjbGsg KipsaW5rX2Nsa19wcm92aWRlciwKKwkJCXN0cnVjdCBjbGsgKipwaXhlbF9jbGtfcHJvdmlkZXIp OworfTsKKworI2RlZmluZSBod19jbGtfdG9fcGxsKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qg bXNtX2RwX3BsbCwgY2xrX2h3KQorCitzdHJ1Y3QgbXNtX2RwX3BsbCAqbXNtX2RwX3BsbF9pbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQllbnVtIG1zbV9kcF9wbGxfdHlwZSB0 eXBlLCBpbnQgaWQpOworCitpbnQgbXNtX2RwX3BsbF91dGlsX3BhcnNlX2R0X2Nsb2NrKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCXN0cnVjdCBtc21fZHBfcGxsICpwbGwpOwor CisjaWZkZWYgQ09ORklHX0RSTV9NU01fRFBfMTBOTV9QTEwKK3N0cnVjdCBtc21fZHBfcGxsICpt c21fZHBfcGxsXzEwbm1faW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaWQp OworI2Vsc2UKK3N0cnVjdCBtc21fZHBfcGxsICptc21fZHBfcGxsXzEwbm1faW5pdChzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaWQpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RF Vik7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBfX0RQX1BMTF9IICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubS5jIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9wbGwvZHBfcGxsXzEwbm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li44OGJiNTBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwv ZHBfcGxsXzEwbm0uYwpAQCAtMCwwICsxLDM5MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE5LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisvKgorICogRGlzcGxh eSBQb3J0IFBMTCBkcml2ZXIgYmxvY2sgZGlhZ3JhbSBmb3IgYnJhbmNoIGNsb2NrcworICoKKyAq CQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoJCXwgICAgICAgICBEUF9WQ09f Q0xLICAgICAgICAgICB8CisgKgkJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAq CQl8ICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgfAorICoJCXwgICAgfCAgIChEUCBQTEwv VkNPKSAgICB8ICAgICB8CisgKgkJfCAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgIHwKKyAq CQl8ICAgICAgICAgICAgICB2ICAgICAgICAgICAgICAgfAorICoJCXwgICArLS0tLS0tLS0tLSst LS0tLS0tLS0tLSsgICB8CisgKgkJfCAgIHwgaHNjbGtfZGl2c2VsX2Nsa19zcmMgfCAgIHwKKyAq CQl8ICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rICAgfAorICoJCSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rCisgKgkJCQl8CisgKgkgKy0tLS0tLS0tLS0tLTwtLS0tLS0tLS12LS0t LS0tLS0tLS0tPi0tLS0tLS0tLS0rCisgKgkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8CisgKiArLS0tLS12LS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgZHBfbGlua19jbGtfc3JjICB8ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICBkaXZzZWxfdGVuICAgIHwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8CisgKiArLS0tLS0tLS0tKy0tLS0tLS0tKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqCXwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKyAqCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKyAqCXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHYKKyAqIElucHV0IHRvIERJU1BDQyBibG9jayAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfAorICogZm9yIGxpbmsgY2xrLCBjcnlwdG8gY2xrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8CisgKiBhbmQgaW50ZXJmYWNlIGNsb2NrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKyAqCQkJCQkJCXwKKyAqCQkJCQkJCXwKKyAqCSstLS0t LS0tLTwtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tPC0tLSsKKyAqCXwgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CisgKiArLS0tLS0tLXYtLS0tLS0rICAr LS0tLS0tLS12LS0tLS0rICArLS0tLS0tLS12LS0tLS0tKworICogfCB2Y29fZGl2aWRlZCAgfCAg fCB2Y29fZGl2aWRlZCAgfCAgfCB2Y29fZGl2aWRlZCAgIHwKKyAqIHwgICAgX2Nsa19zcmMgIHwg IHwgICAgX2Nsa19zcmMgIHwgIHwgICAgX2Nsa19zcmMgICB8CisgKiB8ICAgICAgICAgICAgICB8 ICB8ICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgfAorICogfGRpdnNlbF9zaXggICAg fCAgfCAgZGl2c2VsX3R3byAgfCAgfCAgZGl2c2VsX2ZvdXIgIHwKKyAqICstLS0tLS0tKy0tLS0t LSsgICstLS0tLSstLS0tLS0tLSsgICstLS0tLS0tLSstLS0tLS0rCisgKiAgICAgICAgIHwJICAg ICAgICAgICB8CQkgICAgICAgIHwKKyAqCXYtLS0tLS0tPi0tLS0tLS0tLS12LS0tLS0tLS0tLS0t LTwtLS0tLS12CisgKiAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKgkJKy0tLS0tLS0tLS0r LS0tLS0tLS0tKworICoJCXwgICB2Y29fZGl2aWRlZF9jbGsgIHwKKyAqCQl8ICAgICAgIF9zcmNf bXV4ICAgICB8CisgKgkJKy0tLS0tLS0tLSstLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAg ICAgICAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAqICAgICAgICAgICAgICBJ bnB1dCB0byBESVNQQ0MgYmxvY2sKKyAqICAgICAgICAgICAgICBmb3IgRFAgcGl4ZWwgY2xvY2sK KyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vy ci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+ CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlICJkcF9wbGxfMTBubS5oIgorCisj ZGVmaW5lIE5VTV9QUk9WSURFRF9DTEtTCQkyCisKKyNkZWZpbmUgRFBfTElOS19DTEtfU1JDCQkJ MAorI2RlZmluZSBEUF9QSVhFTF9DTEtfU1JDCQkxCisKK3N0YXRpYyBzdHJ1Y3QgZHBfcGxsXzEw bm0gKmRwX3BkYjsKKworLyogT3Agc3RydWN0dXJlcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBj bGtfb3BzIGRwXzEwbm1fdmNvX2Nsa19vcHMgPSB7CisJLnJlY2FsY19yYXRlID0gZHBfdmNvX3Jl Y2FsY19yYXRlXzEwbm0sCisJLnNldF9yYXRlID0gZHBfdmNvX3NldF9yYXRlXzEwbm0sCisJLnJv dW5kX3JhdGUgPSBkcF92Y29fcm91bmRfcmF0ZV8xMG5tLAorCS5wcmVwYXJlID0gZHBfdmNvX3By ZXBhcmVfMTBubSwKKwkudW5wcmVwYXJlID0gZHBfdmNvX3VucHJlcGFyZV8xMG5tLAorfTsKKwor c3RydWN0IGRwX3BsbF8xMG5tX3BjbGtzZWwgeworCXN0cnVjdCBjbGtfaHcgaHc7CisKKwkvKiBk aXZpZGVyIHBhcmFtcyAqLworCXU4IHNoaWZ0OworCXU4IHdpZHRoOworCXU4IGZsYWdzOyAvKiBz YW1lIGZsYWdzIGFzIHVzZWQgYnkgY2xrX2RpdmlkZXIgc3RydWN0ICovCisKKwlzdHJ1Y3QgZHBf cGxsXzEwbm0gKnBsbDsKK307CisjZGVmaW5lIHRvX3BsbF8xMG5tX3BjbGtzZWwoX2h3KSBjb250 YWluZXJfb2YoX2h3LCBzdHJ1Y3QgZHBfcGxsXzEwbm1fcGNsa3NlbCwgaHcpCisKK3N0YXRpYyBp bnQgZHBfbXV4X3NldF9wYXJlbnRfMTBubShzdHJ1Y3QgY2xrX2h3ICpodywgdTggdmFsKQorewor CXN0cnVjdCBkcF9wbGxfMTBubV9wY2xrc2VsICpwY2xrc2VsID0gdG9fcGxsXzEwbm1fcGNsa3Nl bChodyk7CisJc3RydWN0IGRwX3BsbF8xMG5tICpkcF9yZXMgPSBwY2xrc2VsLT5wbGw7CisJdTMy IGF1eGNsa19kaXY7CisKKwlhdXhjbGtfZGl2ID0gUExMX1JFR19SKGRwX3Jlcy0+cGh5X2Jhc2Us IFJFR19EUF9QSFlfVkNPX0RJVik7CisJYXV4Y2xrX2RpdiAmPSB+MHgwMzsJLyogYml0cyAwIHRv IDEgKi8KKworCWlmICh2YWwgPT0gMCkgLyogbXV4IHBhcmVudCBpbmRleCA9IDAgKi8KKwkJYXV4 Y2xrX2RpdiB8PSAxOworCWVsc2UgaWYgKHZhbCA9PSAxKSAvKiBtdXggcGFyZW50IGluZGV4ID0g MSAqLworCQlhdXhjbGtfZGl2IHw9IDI7CisJZWxzZSBpZiAodmFsID09IDIpIC8qIG11eCBwYXJl bnQgaW5kZXggPSAyICovCisJCWF1eGNsa19kaXYgfD0gMDsKKworCVBMTF9SRUdfVyhkcF9yZXMt PnBoeV9iYXNlLAorCQkJUkVHX0RQX1BIWV9WQ09fRElWLCBhdXhjbGtfZGl2KTsKKwkvKiBNYWtl IHN1cmUgdGhlIFBIWSByZWdpc3RlcnMgd3JpdGVzIGFyZSBkb25lICovCisJd21iKCk7CisJRFJN X0RFQlVHX0RQKCIlczogbXV4PSVkIGF1eGNsa19kaXY9JXhcbiIsIF9fZnVuY19fLCB2YWwsIGF1 eGNsa19kaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1OCBkcF9tdXhfZ2V0X3BhcmVu dF8xMG5tKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXUzMiBhdXhjbGtfZGl2ID0gMDsKKwlzdHJ1 Y3QgZHBfcGxsXzEwbm1fcGNsa3NlbCAqcGNsa3NlbCA9IHRvX3BsbF8xMG5tX3BjbGtzZWwoaHcp OworCXN0cnVjdCBkcF9wbGxfMTBubSAqZHBfcmVzID0gcGNsa3NlbC0+cGxsOworCXU4IHZhbCA9 IDA7CisKKwlEUk1fRVJST1IoImNsa19ody0+aW5pdC0+bmFtZSA9ICVzXG4iLCBody0+aW5pdC0+ bmFtZSk7CisJYXV4Y2xrX2RpdiA9IFBMTF9SRUdfUihkcF9yZXMtPnBoeV9iYXNlLCBSRUdfRFBf UEhZX1ZDT19ESVYpOworCWF1eGNsa19kaXYgJj0gMHgwMzsKKworCWlmIChhdXhjbGtfZGl2ID09 IDEpIC8qIERlZmF1bHQgZGl2aWRlciAqLworCQl2YWwgPSAwOworCWVsc2UgaWYgKGF1eGNsa19k aXYgPT0gMikKKwkJdmFsID0gMTsKKwllbHNlIGlmIChhdXhjbGtfZGl2ID09IDApCisJCXZhbCA9 IDI7CisKKwlEUk1fREVCVUdfRFAoIiVzOiBhdXhjbGtfZGl2PSVkLCB2YWw9JWRcbiIsIF9fZnVu Y19fLCBhdXhjbGtfZGl2LCB2YWwpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBj bGtfbXV4X2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCSAgICAgc3RydWN0 IGNsa19yYXRlX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IF9fY2xr X211eF9kZXRlcm1pbmVfcmF0ZV9jbG9zZXN0KGh3LCByZXEpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwkvKiBTZXQgdGhlIG5ldyBwYXJlbnQgb2YgbXV4IGlmIHRoZXJlIGlzIGEgbmV3 IHZhbGlkIHBhcmVudCAqLworCWlmIChody0+Y2xrICYmIHJlcS0+YmVzdF9wYXJlbnRfaHctPmNs aykKKwkJY2xrX3NldF9wYXJlbnQoaHctPmNsaywgcmVxLT5iZXN0X3BhcmVudF9ody0+Y2xrKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtdXhfcmVjYWxjX3JhdGUo c3RydWN0IGNsa19odyAqaHcsCisJCQkJCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJ c3RydWN0IGNsayAqZGl2X2NsayA9IE5VTEwsICp2Y29fY2xrID0gTlVMTDsKKwlzdHJ1Y3QgbXNt X2RwX3BsbCAqdmNvID0gTlVMTDsKKworCWRpdl9jbGsgPSBjbGtfZ2V0X3BhcmVudChody0+Y2xr KTsKKwlpZiAoIWRpdl9jbGspCisJCXJldHVybiAwOworCisJdmNvX2NsayA9IGNsa19nZXRfcGFy ZW50KGRpdl9jbGspOworCWlmICghdmNvX2NsaykKKwkJcmV0dXJuIDA7CisKKwl2Y28gPSBod19j bGtfdG9fcGxsKF9fY2xrX2dldF9odyh2Y29fY2xrKSk7CisJaWYgKCF2Y28pCisJCXJldHVybiAw OworCisJaWYgKHZjby0+cmF0ZSA9PSBEUF9WQ09fSFNDTEtfUkFURV84MTAwTUhaRElWMTAwMCkK KwkJcmV0dXJuICh2Y28tPnJhdGUgLyA2KTsKKwllbHNlIGlmICh2Y28tPnJhdGUgPT0gRFBfVkNP X0hTQ0xLX1JBVEVfNTQwME1IWkRJVjEwMDApCisJCXJldHVybiAodmNvLT5yYXRlIC8gNCk7CisJ ZWxzZQorCQlyZXR1cm4gKHZjby0+cmF0ZSAvIDIpOworfQorCitzdGF0aWMgaW50IGRwX3BsbF8x MG5tX2dldF9wcm92aWRlcihzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsLAorCQkJCSAgICAgc3RydWN0 IGNsayAqKmxpbmtfY2xrX3Byb3ZpZGVyLAorCQkJCSAgICAgc3RydWN0IGNsayAqKnBpeGVsX2Ns a19wcm92aWRlcikKK3sKKwlzdHJ1Y3QgZHBfcGxsXzEwbm0gKnBsbF8xMG5tID0gdG9fZHBfcGxs XzEwbm0ocGxsKTsKKwlzdHJ1Y3QgY2xrX2h3X29uZWNlbGxfZGF0YSAqaHdfZGF0YSA9IHBsbF8x MG5tLT5od19kYXRhOworCisJaWYgKGxpbmtfY2xrX3Byb3ZpZGVyKQorCQkqbGlua19jbGtfcHJv dmlkZXIgPSBod19kYXRhLT5od3NbRFBfTElOS19DTEtfU1JDXS0+Y2xrOworCWlmIChwaXhlbF9j bGtfcHJvdmlkZXIpCisJCSpwaXhlbF9jbGtfcHJvdmlkZXIgPSBod19kYXRhLT5od3NbRFBfUElY RUxfQ0xLX1NSQ10tPmNsazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IGNsa19vcHMgZHBfMTBubV9wY2xrc2VsX2Nsa19vcHMgPSB7CisJLmdldF9wYXJlbnQgPSBkcF9t dXhfZ2V0X3BhcmVudF8xMG5tLAorCS5zZXRfcGFyZW50ID0gZHBfbXV4X3NldF9wYXJlbnRfMTBu bSwKKwkucmVjYWxjX3JhdGUgPSBtdXhfcmVjYWxjX3JhdGUsCisJLmRldGVybWluZV9yYXRlID0g Y2xrX211eF9kZXRlcm1pbmVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2h3ICpkcF9w bGxfMTBubV9waXhlbF9jbGtfc2VsKHN0cnVjdCBkcF9wbGxfMTBubSAqcGxsXzEwbm0pCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBsbF8xMG5tLT5wZGV2LT5kZXY7CisJc3RydWN0IGRwX3Bs bF8xMG5tX3BjbGtzZWwgKnBsbF9wY2xrc2VsOworCXN0cnVjdCBjbGtfaW5pdF9kYXRhIHBjbGtz ZWxfaW5pdCA9IHsKKwkJLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFyICpbXSl7CisJCQkJImRw X3Zjb19kaXZzZWxfdHdvX2Nsa19zcmMiLAorCQkJCSJkcF92Y29fZGl2c2VsX2ZvdXJfY2xrX3Ny YyIsCisJCQkJImRwX3Zjb19kaXZzZWxfc2l4X2Nsa19zcmMiIH0sCisJCS5udW1fcGFyZW50cyA9 IDMsCisJCS5uYW1lID0gImRwX3Zjb19kaXZpZGVkX2Nsa19zcmNfbXV4IiwKKwkJLmZsYWdzID0g Q0xLX0lHTk9SRV9VTlVTRUQsCisJCS5vcHMgPSAmZHBfMTBubV9wY2xrc2VsX2Nsa19vcHMsCisJ fTsKKwlpbnQgcmV0OworCisJcGxsX3BjbGtzZWwgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo KnBsbF9wY2xrc2VsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbGxfcGNsa3NlbCkKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7CisKKwlwbGxfcGNsa3NlbC0+cGxsID0gcGxsXzEwbm07CisJcGxs X3BjbGtzZWwtPnNoaWZ0ID0gMDsKKwlwbGxfcGNsa3NlbC0+d2lkdGggPSA0OworCXBsbF9wY2xr c2VsLT5mbGFncyA9IENMS19ESVZJREVSX09ORV9CQVNFRDsKKwlwbGxfcGNsa3NlbC0+aHcuaW5p dCA9ICZwY2xrc2VsX2luaXQ7CisKKwlyZXQgPSBjbGtfaHdfcmVnaXN0ZXIoZGV2LCAmcGxsX3Bj bGtzZWwtPmh3KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJcmV0dXJu ICZwbGxfcGNsa3NlbC0+aHc7Cit9CisKK3N0YXRpYyBpbnQgZHBfcGxsXzEwbm1fcmVnaXN0ZXIo c3RydWN0IGRwX3BsbF8xMG5tICpwbGxfMTBubSkKK3sKKwljaGFyIGNsa19uYW1lWzMyXSwgcGFy ZW50WzMyXSwgdmNvX25hbWVbMzJdOworCXN0cnVjdCBjbGtfaW5pdF9kYXRhIHZjb19pbml0ID0g eworCQkucGFyZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKltdKXsgImJpX3RjeG8iIH0sCisJCS5u dW1fcGFyZW50cyA9IDEsCisJCS5uYW1lID0gdmNvX25hbWUsCisJCS5mbGFncyA9IENMS19JR05P UkVfVU5VU0VELAorCQkub3BzID0gJmRwXzEwbm1fdmNvX2Nsa19vcHMsCisJfTsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGxsXzEwbm0tPnBkZXYtPmRldjsKKwlzdHJ1Y3QgY2xrX2h3ICoqaHdz ID0gcGxsXzEwbm0tPmh3czsKKwlzdHJ1Y3QgY2xrX2h3X29uZWNlbGxfZGF0YSAqaHdfZGF0YTsK KwlzdHJ1Y3QgY2xrX2h3ICpodzsKKwlpbnQgbnVtID0gMDsKKwlpbnQgcmV0OworCisJREJHKCJE UC0+aWQgPSAlZCIsIHBsbF8xMG5tLT5pZCk7CisKKwlod19kYXRhID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpod19kYXRhKSArCisJCQkgICAgICAgTlVNX1BST1ZJREVEX0NMS1MgKiBzaXpl b2Yoc3RydWN0IGNsa19odyAqKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWh3X2Rh dGEpCisJCXJldHVybiAtRU5PTUVNOworCisJc25wcmludGYodmNvX25hbWUsIDMyLCAiZHBfdmNv X2NsayIpOworCXBsbF8xMG5tLT5iYXNlLmNsa19ody5pbml0ID0gJnZjb19pbml0OworCXJldCA9 IGNsa19od19yZWdpc3RlcihkZXYsICZwbGxfMTBubS0+YmFzZS5jbGtfaHcpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisJaHdzW251bSsrXSA9ICZwbGxfMTBubS0+YmFzZS5jbGtfaHc7CisK KwlzbnByaW50ZihjbGtfbmFtZSwgMzIsICJkcF9saW5rX2Nsa19kaXZzZWxfdGVuIik7CisJc25w cmludGYocGFyZW50LCAzMiwgImRwX3Zjb19jbGsiKTsKKwlodyA9IGNsa19od19yZWdpc3Rlcl9m aXhlZF9mYWN0b3IoZGV2LCBjbGtfbmFtZSwgcGFyZW50LAorCQkJCQkgIENMS19TRVRfUkFURV9Q QVJFTlQsIDEsIDEwKTsKKwlpZiAoSVNfRVJSKGh3KSkKKwkJcmV0dXJuIFBUUl9FUlIoaHcpOwor CWh3c1tudW0rK10gPSBodzsKKwlod19kYXRhLT5od3NbRFBfTElOS19DTEtfU1JDXSA9IGh3Owor CisJc25wcmludGYoY2xrX25hbWUsIDMyLCAiZHBfdmNvX2RpdnNlbF90d29fY2xrX3NyYyIpOwor CXNucHJpbnRmKHBhcmVudCwgMzIsICJkcF92Y29fY2xrIik7CisJaHcgPSBjbGtfaHdfcmVnaXN0 ZXJfZml4ZWRfZmFjdG9yKGRldiwgY2xrX25hbWUsIHBhcmVudCwKKwkJCQkJICAwLCAxLCAyKTsK KwlpZiAoSVNfRVJSKGh3KSkKKwkJcmV0dXJuIFBUUl9FUlIoaHcpOworCWh3c1tudW0rK10gPSBo dzsKKworCXNucHJpbnRmKGNsa19uYW1lLCAzMiwgImRwX3Zjb19kaXZzZWxfZm91cl9jbGtfc3Jj Iik7CisJc25wcmludGYocGFyZW50LCAzMiwgImRwX3Zjb19jbGsiKTsKKwlodyA9IGNsa19od19y ZWdpc3Rlcl9maXhlZF9mYWN0b3IoZGV2LCBjbGtfbmFtZSwgcGFyZW50LAorCQkJCQkgIDAsIDEs IDQpOworCWlmIChJU19FUlIoaHcpKQorCQlyZXR1cm4gUFRSX0VSUihodyk7CisJaHdzW251bSsr XSA9IGh3OworCisJc25wcmludGYoY2xrX25hbWUsIDMyLCAiZHBfdmNvX2RpdnNlbF9zaXhfY2xr X3NyYyIpOworCXNucHJpbnRmKHBhcmVudCwgMzIsICJkcF92Y29fY2xrIik7CisJaHcgPSBjbGtf aHdfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKGRldiwgY2xrX25hbWUsIHBhcmVudCwKKwkJCQkJICAw LCAxLCA2KTsKKwlpZiAoSVNfRVJSKGh3KSkKKwkJcmV0dXJuIFBUUl9FUlIoaHcpOworCWh3c1tu dW0rK10gPSBodzsKKworCWh3ID0gZHBfcGxsXzEwbm1fcGl4ZWxfY2xrX3NlbChwbGxfMTBubSk7 CisJaWYgKElTX0VSUihodykpCisJCXJldHVybiBQVFJfRVJSKGh3KTsKKworCWh3c1tudW0rK10g PSBodzsKKwlod19kYXRhLT5od3NbRFBfUElYRUxfQ0xLX1NSQ10gPSBodzsKKworCXBsbF8xMG5t LT5udW1faHdzID0gbnVtOworCisJaHdfZGF0YS0+bnVtID0gTlVNX1BST1ZJREVEX0NMS1M7CisJ cGxsXzEwbm0tPmh3X2RhdGEgPSBod19kYXRhOworCisJcmV0ID0gb2ZfY2xrX2FkZF9od19wcm92 aWRlcihkZXYtPm9mX25vZGUsIG9mX2Nsa19od19vbmVjZWxsX2dldCwKKwkJCQkgICAgIHBsbF8x MG5tLT5od19kYXRhKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVk IHRvIHJlZ2lzdGVyIGNsayBwcm92aWRlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IG1zbV9kcF9wbGwgKm1zbV9kcF9wbGxfMTBu bV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpZCkKK3sKKwlzdHJ1Y3Qg ZHBfcGxsXzEwbm0gKmRwXzEwbm1fcGxsOworCXN0cnVjdCBtc21fZHBfcGxsICpwbGw7CisJaW50 IHJldDsKKworCWlmICghcGRldikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisKKwlkcF8x MG5tX3BsbCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRwXzEwbm1fcGxsKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFkcF8xMG5tX3BsbCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisKKwlEQkcoIkRQIFBMTCVkIiwgaWQpOworCisJZHBfMTBubV9wbGwtPnBkZXYgPSBwZGV2 OworCWRwXzEwbm1fcGxsLT5pZCA9IGlkOworCWRwX3BkYiA9IGRwXzEwbm1fcGxsOworCisJZHBf MTBubV9wbGwtPnBsbF9iYXNlID0gbXNtX2lvcmVtYXAocGRldiwgInBsbF9iYXNlIiwgIkRQX1BM TCIpOworCWlmIChJU19FUlJfT1JfTlVMTChkcF8xMG5tX3BsbC0+cGxsX2Jhc2UpKSB7CisJCURS TV9ERVZfRVJST1IoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgQ01OIFBMTCBiYXNlXG4iKTsK KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJZHBfMTBubV9wbGwtPnBoeV9iYXNl ID0gbXNtX2lvcmVtYXAocGRldiwgInBoeV9iYXNlIiwgIkRQX1BIWSIpOworCWlmIChJU19FUlJf T1JfTlVMTChkcF8xMG5tX3BsbC0+cGh5X2Jhc2UpKSB7CisJCURSTV9ERVZfRVJST1IoJnBkZXYt PmRldiwgImZhaWxlZCB0byBtYXAgQ01OIFBIWSBiYXNlXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7CisJfQorCisJZHBfMTBubV9wbGwtPmxuX3R4MF9iYXNlID0gbXNtX2lvcmVtYXAo cGRldiwgImxuX3R4MF9iYXNlIiwgIkRQX0xOX1RYMCIpOworCWlmIChJU19FUlJfT1JfTlVMTChk cF8xMG5tX3BsbC0+bG5fdHgwX2Jhc2UpKSB7CisJCURSTV9ERVZfRVJST1IoJnBkZXYtPmRldiwg ImZhaWxlZCB0byBtYXAgQ01OIExOX1RYMCBiYXNlXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisJfQorCisJZHBfMTBubV9wbGwtPmxuX3R4MV9iYXNlID0gbXNtX2lvcmVtYXAocGRl diwgImxuX3R4MV9iYXNlIiwgIkRQX0xOX1RYMSIpOworCWlmIChJU19FUlJfT1JfTlVMTChkcF8x MG5tX3BsbC0+bG5fdHgxX2Jhc2UpKSB7CisJCURSTV9ERVZfRVJST1IoJnBkZXYtPmRldiwgImZh aWxlZCB0byBtYXAgQ01OIExOX1RYMSBiYXNlXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUs ICJjZWxsLWluZGV4IiwKKwkJCQkmZHBfMTBubV9wbGwtPmluZGV4KTsKKwlpZiAocmV0KSB7CisJ CURSTV9FUlJPUigiVW5hYmxlIHRvIGdldCB0aGUgY2VsbC1pbmRleCByZXQ9JWRcbiIsIHJldCk7 CisJCWRwXzEwbm1fcGxsLT5pbmRleCA9IDA7CisJfQorCisJcmV0ID0gbXNtX2RwX3BsbF91dGls X3BhcnNlX2R0X2Nsb2NrKHBkZXYsICZkcF8xMG5tX3BsbC0+YmFzZSk7CisJaWYgKHJldCkgewor CQlEUk1fRVJST1IoIlVuYWJsZSB0byBwYXJzZSBkdCBjbG9ja3MgcmV0PSVkXG4iLCByZXQpOwor CQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldCA9IGRwX3BsbF8xMG5tX3JlZ2lzdGVy KGRwXzEwbm1fcGxsKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoJnBkZXYtPmRldiwg ImZhaWxlZCB0byByZWdpc3RlciBQTEw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gRVJSX1BUUihy ZXQpOworCX0KKworCXBsbCA9ICZkcF8xMG5tX3BsbC0+YmFzZTsKKwlwbGwtPm1pbl9yYXRlID0g RFBfVkNPX0hTQ0xLX1JBVEVfMTYyME1IWkRJVjEwMDA7CisJcGxsLT5tYXhfcmF0ZSA9IERQX1ZD T19IU0NMS19SQVRFXzgxMDBNSFpESVYxMDAwOworCXBsbC0+Z2V0X3Byb3ZpZGVyID0gZHBfcGxs XzEwbm1fZ2V0X3Byb3ZpZGVyOworCisJcmV0dXJuIHBsbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbF8xMG5tLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL3BsbC9kcF9wbGxfMTBubS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmUyYTUzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9k cF9wbGxfMTBubS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOSwgVGhlIExp bnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBfX0RQ X1BMTF8xME5NX0gKKyNkZWZpbmUgX19EUF9QTExfMTBOTV9ICisKKyNpbmNsdWRlICJkcF9wbGwu aCIKKyNpbmNsdWRlICJkcF9yZWcuaCIKKworI2RlZmluZSBEUF9WQ09fSFNDTEtfUkFURV8xNjIw TUhaRElWMTAwMAkxNjIwMDAwVUwKKyNkZWZpbmUgRFBfVkNPX0hTQ0xLX1JBVEVfMjcwME1IWkRJ VjEwMDAJMjcwMDAwMFVMCisjZGVmaW5lIERQX1ZDT19IU0NMS19SQVRFXzU0MDBNSFpESVYxMDAw CTU0MDAwMDBVTAorI2RlZmluZSBEUF9WQ09fSFNDTEtfUkFURV84MTAwTUhaRElWMTAwMAk4MTAw MDAwVUwKKworI2RlZmluZSBOVU1fRFBfQ0xPQ0tTX01BWAkJCTYKKworI2RlZmluZSBEUF9QSFlf UExMX1BPTExfU0xFRVBfVVMJCTUwMAorI2RlZmluZSBEUF9QSFlfUExMX1BPTExfVElNRU9VVF9V UwkJMTAwMDAKKworI2RlZmluZSBEUF9WQ09fUkFURV84MTAwTUhaRElWMTAwMAkJODEwMDAwMFVM CisjZGVmaW5lIERQX1ZDT19SQVRFXzk3MjBNSFpESVYxMDAwCQk5NzIwMDAwVUwKKyNkZWZpbmUg RFBfVkNPX1JBVEVfMTA4MDBNSFpESVYxMDAwCQkxMDgwMDAwMFVMCisKK3N0cnVjdCBkcF9wbGxf MTBubSB7CisJc3RydWN0IG1zbV9kcF9wbGwgYmFzZTsKKworCWludCBpZDsKKwlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2OworCisJdm9pZCBfX2lvbWVtICpwbGxfYmFzZTsKKwl2b2lkIF9f aW9tZW0gKnBoeV9iYXNlOworCXZvaWQgX19pb21lbSAqbG5fdHgwX2Jhc2U7CisJdm9pZCBfX2lv bWVtICpsbl90eDFfYmFzZTsKKworCS8qIHByaXZhdGUgY2xvY2tzOiAqLworCXN0cnVjdCBjbGtf aHcgKmh3c1tOVU1fRFBfQ0xPQ0tTX01BWF07CisJdTMyIG51bV9od3M7CisKKwkvKiBjbG9jay1w cm92aWRlcjogKi8KKwlzdHJ1Y3QgY2xrX2h3X29uZWNlbGxfZGF0YSAqaHdfZGF0YTsKKworCS8q IGxhbmUgYW5kIG9yaWVudGF0aW9uIHNldHRpbmdzICovCisJdTggbGFuZV9jbnQ7CisJdTggb3Jp ZW50YXRpb247CisKKwkvKiBDT00gUEhZIHNldHRpbmdzICovCisJdTMyIGhzY2xrX3NlbDsKKwl1 MzIgZGVjX3N0YXJ0X21vZGUwOworCXUzMiBkaXZfZnJhY19zdGFydDFfbW9kZTA7CisJdTMyIGRp dl9mcmFjX3N0YXJ0Ml9tb2RlMDsKKwl1MzIgZGl2X2ZyYWNfc3RhcnQzX21vZGUwOworCXUzMiBp bnRlZ2xvb3BfZ2FpbjBfbW9kZTA7CisJdTMyIGludGVnbG9vcF9nYWluMV9tb2RlMDsKKwl1MzIg dmNvX3R1bmVfbWFwOworCXUzMiBsb2NrX2NtcDFfbW9kZTA7CisJdTMyIGxvY2tfY21wMl9tb2Rl MDsKKwl1MzIgbG9ja19jbXAzX21vZGUwOworCXUzMiBsb2NrX2NtcF9lbjsKKworCS8qIFBIWSB2 Y28gZGl2aWRlciAqLworCXUzMiBwaHlfdmNvX2RpdjsKKwkvKgorCSAqIENlcnRhaW4gcGxsJ3Mg bmVlZHMgdG8gdXBkYXRlIHRoZSBzYW1lIHZjbyByYXRlIGFmdGVyIHJlc3VtZSBpbgorCSAqIHN1 c3BlbmQvcmVzdW1lIHNjZW5hcmlvLiBDYWNoZWQgdGhlIHZjbyByYXRlIGZvciBzdWNoIHBsbHMu CisJICovCisJdW5zaWduZWQgbG9uZwl2Y29fY2FjaGVkX3JhdGU7CisJdTMyCQljYWNoZWRfY2Zn MDsKKwl1MzIJCWNhY2hlZF9jZmcxOworCXUzMgkJY2FjaGVkX291dGRpdjsKKworCXVpbnQzMl90 IGluZGV4OworfTsKKworI2RlZmluZSB0b19kcF9wbGxfMTBubSh4KQljb250YWluZXJfb2YoeCwg c3RydWN0IGRwX3BsbF8xMG5tLCBiYXNlKQorCitpbnQgZHBfdmNvX3NldF9yYXRlXzEwbm0oc3Ry dWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQl1bnNpZ25lZCBsb25nIHBh cmVudF9yYXRlKTsKK3Vuc2lnbmVkIGxvbmcgZHBfdmNvX3JlY2FsY19yYXRlXzEwbm0oc3RydWN0 IGNsa19odyAqaHcsCisJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7Citsb25nIGRwX3Zj b19yb3VuZF9yYXRlXzEwbm0oc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwK KwkJCQl1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSk7CitpbnQgZHBfdmNvX3ByZXBhcmVfMTBu bShzdHJ1Y3QgY2xrX2h3ICpodyk7Cit2b2lkIGRwX3Zjb191bnByZXBhcmVfMTBubShzdHJ1Y3Qg Y2xrX2h3ICpodyk7CisjZW5kaWYgLyogX19EUF9QTExfMTBOTV9IICovCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubV91dGlsLmMgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubV91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNzAyNmU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZHAvcGxsL2RwX3BsbF8xMG5tX3V0aWwuYwpAQCAtMCwwICsxLDUyMiBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoYykg MjAxNi0yMDE5LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq LworCisjZGVmaW5lIHByX2ZtdChmbXQpCSIlczogIiBmbXQsIF9fZnVuY19fCisKKyNpbmNsdWRl IDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51 eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiZHBfcGxs LmgiCisjaW5jbHVkZSAiZHBfcGxsXzEwbm0uaCIKKyNpbmNsdWRlICJkcF9leHRjb24uaCIKKwor c3RhdGljIGludCBkcF92Y29fcGxsX2luaXRfZGJfMTBubShzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxs LAorCQl1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IGRwX3BsbF8xMG5tICpkcF9yZXMg PSB0b19kcF9wbGxfMTBubShwbGwpOworCXUzMiBzcGFyZV92YWx1ZSA9IDA7CisKKwlzcGFyZV92 YWx1ZSA9IFBMTF9SRUdfUihkcF9yZXMtPnBoeV9iYXNlLCBSRUdfRFBfUEhZX1NQQVJFMCk7CisJ ZHBfcmVzLT5sYW5lX2NudCA9IHNwYXJlX3ZhbHVlICYgMHgwRjsKKwlkcF9yZXMtPm9yaWVudGF0 aW9uID0gKHNwYXJlX3ZhbHVlICYgMHhGMCkgPj4gNDsKKworCURSTV9ERUJVR19EUCgiJXM6IHNw YXJlX3ZhbHVlPTB4JXgsIGxuX2NudD0weCV4LCBvcmllbnRhdGlvbj0weCV4XG4iLAorCQkJX19m dW5jX18sIHNwYXJlX3ZhbHVlLCBkcF9yZXMtPmxhbmVfY250LCBkcF9yZXMtPm9yaWVudGF0aW9u KTsKKworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgRFBfVkNPX0hTQ0xLX1JBVEVfMTYyME1IWkRJ VjEwMDA6CisJCURSTV9ERUJVR19EUCgiJXM6IFZDTyByYXRlOiAlbGRcbiIsIF9fZnVuY19fLAor CQkJCURQX1ZDT19SQVRFXzk3MjBNSFpESVYxMDAwKTsKKwkJZHBfcmVzLT5oc2Nsa19zZWwgPSAw eDBjOworCQlkcF9yZXMtPmRlY19zdGFydF9tb2RlMCA9IDB4Njk7CisJCWRwX3Jlcy0+ZGl2X2Zy YWNfc3RhcnQxX21vZGUwID0gMHgwMDsKKwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDJfbW9kZTAg PSAweDgwOworCQlkcF9yZXMtPmRpdl9mcmFjX3N0YXJ0M19tb2RlMCA9IDB4MDc7CisJCWRwX3Jl cy0+aW50ZWdsb29wX2dhaW4wX21vZGUwID0gMHgzZjsKKwkJZHBfcmVzLT5pbnRlZ2xvb3BfZ2Fp bjFfbW9kZTAgPSAweDAwOworCQlkcF9yZXMtPnZjb190dW5lX21hcCA9IDB4MDA7CisJCWRwX3Jl cy0+bG9ja19jbXAxX21vZGUwID0gMHg2ZjsKKwkJZHBfcmVzLT5sb2NrX2NtcDJfbW9kZTAgPSAw eDA4OworCQlkcF9yZXMtPmxvY2tfY21wM19tb2RlMCA9IDB4MDA7CisJCWRwX3Jlcy0+cGh5X3Zj b19kaXYgPSAweDE7CisJCWRwX3Jlcy0+bG9ja19jbXBfZW4gPSAweDAwOworCQlicmVhazsKKwlj YXNlIERQX1ZDT19IU0NMS19SQVRFXzI3MDBNSFpESVYxMDAwOgorCQlEUk1fREVCVUdfRFAoIiVz OiBWQ08gcmF0ZTogJWxkXG4iLCBfX2Z1bmNfXywKKwkJCQlEUF9WQ09fUkFURV8xMDgwME1IWkRJ VjEwMDApOworCQlkcF9yZXMtPmhzY2xrX3NlbCA9IDB4MDQ7CisJCWRwX3Jlcy0+ZGVjX3N0YXJ0 X21vZGUwID0gMHg2OTsKKwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDFfbW9kZTAgPSAweDAwOwor CQlkcF9yZXMtPmRpdl9mcmFjX3N0YXJ0Ml9tb2RlMCA9IDB4ODA7CisJCWRwX3Jlcy0+ZGl2X2Zy YWNfc3RhcnQzX21vZGUwID0gMHgwNzsKKwkJZHBfcmVzLT5pbnRlZ2xvb3BfZ2FpbjBfbW9kZTAg PSAweDNmOworCQlkcF9yZXMtPmludGVnbG9vcF9nYWluMV9tb2RlMCA9IDB4MDA7CisJCWRwX3Jl cy0+dmNvX3R1bmVfbWFwID0gMHgwMDsKKwkJZHBfcmVzLT5sb2NrX2NtcDFfbW9kZTAgPSAweDBm OworCQlkcF9yZXMtPmxvY2tfY21wMl9tb2RlMCA9IDB4MGU7CisJCWRwX3Jlcy0+bG9ja19jbXAz X21vZGUwID0gMHgwMDsKKwkJZHBfcmVzLT5waHlfdmNvX2RpdiA9IDB4MTsKKwkJZHBfcmVzLT5s b2NrX2NtcF9lbiA9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgRFBfVkNPX0hTQ0xLX1JBVEVfNTQw ME1IWkRJVjEwMDA6CisJCURSTV9ERUJVR19EUCgiJXM6IFZDTyByYXRlOiAlbGRcbiIsIF9fZnVu Y19fLAorCQkJCURQX1ZDT19SQVRFXzEwODAwTUhaRElWMTAwMCk7CisJCWRwX3Jlcy0+aHNjbGtf c2VsID0gMHgwMDsKKwkJZHBfcmVzLT5kZWNfc3RhcnRfbW9kZTAgPSAweDhjOworCQlkcF9yZXMt PmRpdl9mcmFjX3N0YXJ0MV9tb2RlMCA9IDB4MDA7CisJCWRwX3Jlcy0+ZGl2X2ZyYWNfc3RhcnQy X21vZGUwID0gMHgwMDsKKwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDNfbW9kZTAgPSAweDBhOwor CQlkcF9yZXMtPmludGVnbG9vcF9nYWluMF9tb2RlMCA9IDB4M2Y7CisJCWRwX3Jlcy0+aW50ZWds b29wX2dhaW4xX21vZGUwID0gMHgwMDsKKwkJZHBfcmVzLT52Y29fdHVuZV9tYXAgPSAweDAwOwor CQlkcF9yZXMtPmxvY2tfY21wMV9tb2RlMCA9IDB4MWY7CisJCWRwX3Jlcy0+bG9ja19jbXAyX21v ZGUwID0gMHgxYzsKKwkJZHBfcmVzLT5sb2NrX2NtcDNfbW9kZTAgPSAweDAwOworCQlkcF9yZXMt PnBoeV92Y29fZGl2ID0gMHgyOworCQlkcF9yZXMtPmxvY2tfY21wX2VuID0gMHgwMDsKKwkJYnJl YWs7CisJY2FzZSBEUF9WQ09fSFNDTEtfUkFURV84MTAwTUhaRElWMTAwMDoKKwkJRFJNX0RFQlVH X0RQKCIlczogVkNPIHJhdGU6ICVsZFxuIiwgX19mdW5jX18sCisJCQkJRFBfVkNPX1JBVEVfODEw ME1IWkRJVjEwMDApOworCQlkcF9yZXMtPmhzY2xrX3NlbCA9IDB4MDM7CisJCWRwX3Jlcy0+ZGVj X3N0YXJ0X21vZGUwID0gMHg2OTsKKwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDFfbW9kZTAgPSAw eDAwOworCQlkcF9yZXMtPmRpdl9mcmFjX3N0YXJ0Ml9tb2RlMCA9IDB4ODA7CisJCWRwX3Jlcy0+ ZGl2X2ZyYWNfc3RhcnQzX21vZGUwID0gMHgwNzsKKwkJZHBfcmVzLT5pbnRlZ2xvb3BfZ2FpbjBf bW9kZTAgPSAweDNmOworCQlkcF9yZXMtPmludGVnbG9vcF9nYWluMV9tb2RlMCA9IDB4MDA7CisJ CWRwX3Jlcy0+dmNvX3R1bmVfbWFwID0gMHgwMDsKKwkJZHBfcmVzLT5sb2NrX2NtcDFfbW9kZTAg PSAweDJmOworCQlkcF9yZXMtPmxvY2tfY21wMl9tb2RlMCA9IDB4MmE7CisJCWRwX3Jlcy0+bG9j a19jbXAzX21vZGUwID0gMHgwMDsKKwkJZHBfcmVzLT5waHlfdmNvX2RpdiA9IDB4MDsKKwkJZHBf cmVzLT5sb2NrX2NtcF9lbiA9IDB4MDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAt RUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcF9jb25maWdfdmNvX3Jh dGVfMTBubShzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsLAorCQl1bnNpZ25lZCBsb25nIHJhdGUpCit7 CisJdTMyIHJlcyA9IDA7CisJc3RydWN0IGRwX3BsbF8xMG5tICpkcF9yZXMgPSB0b19kcF9wbGxf MTBubShwbGwpOworCisJcmVzID0gZHBfdmNvX3BsbF9pbml0X2RiXzEwbm0ocGxsLCByYXRlKTsK KwlpZiAocmVzKSB7CisJCURSTV9FUlJPUigiVkNPIEluaXQgREIgZmFpbGVkXG4iKTsKKwkJcmV0 dXJuIHJlczsKKwl9CisKKwlpZiAoZHBfcmVzLT5sYW5lX2NudCAhPSA0KSB7CisJCWlmIChkcF9y ZXMtPm9yaWVudGF0aW9uID09IE9SSUVOVEFUSU9OX0NDMikKKwkJCVBMTF9SRUdfVyhkcF9yZXMt PnBoeV9iYXNlLCBSRUdfRFBfUEhZX1BEX0NUTCwgMHg2ZCk7CisJCWVsc2UKKwkJCVBMTF9SRUdf VyhkcF9yZXMtPnBoeV9iYXNlLCBSRUdfRFBfUEhZX1BEX0NUTCwgMHg3NSk7CisJfSBlbHNlIHsK KwkJUExMX1JFR19XKGRwX3Jlcy0+cGh5X2Jhc2UsIFJFR19EUF9QSFlfUERfQ1RMLCAweDdkKTsK Kwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIFBIWSByZWdpc3RlciB3cml0ZXMgYXJlIGRvbmUgKi8K Kwl3bWIoKTsKKworCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9TVlNf TU9ERV9DTEtfU0VMLCAweDAxKTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRF U19DT01fU1lTQ0xLX0VOX1NFTCwgMHgzNyk7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2Us IFFTRVJERVNfQ09NX1NZU19DTEtfQ1RSTCwgMHgwMik7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxs X2Jhc2UsIFFTRVJERVNfQ09NX0NMS19FTkFCTEUxLCAweDBlKTsKKwlQTExfUkVHX1coZHBfcmVz LT5wbGxfYmFzZSwgUVNFUkRFU19DT01fU1lTQ0xLX0JVRl9FTkFCTEUsIDB4MDYpOworCVBMTF9S RUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9DTEtfU0VMLCAweDMwKTsKKwlQTExf UkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fQ01OX0NPTkZJRywgMHgwMik7CisK KwkvKiBEaWZmZXJlbnQgZm9yIGVhY2ggY2xvY2sgcmF0ZXMgKi8KKwlQTExfUkVHX1coZHBfcmVz LT5wbGxfYmFzZSwKKwkJUVNFUkRFU19DT01fSFNDTEtfU0VMLCBkcF9yZXMtPmhzY2xrX3NlbCk7 CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsCisJCVFTRVJERVNfQ09NX0RFQ19TVEFSVF9N T0RFMCwgZHBfcmVzLT5kZWNfc3RhcnRfbW9kZTApOworCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9i YXNlLAorCQlRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDFfTU9ERTAsIGRwX3Jlcy0+ZGl2X2Zy YWNfc3RhcnQxX21vZGUwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwKKwkJUVNFUkRF U19DT01fRElWX0ZSQUNfU1RBUlQyX01PREUwLCBkcF9yZXMtPmRpdl9mcmFjX3N0YXJ0Ml9tb2Rl MCk7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsCisJCVFTRVJERVNfQ09NX0RJVl9GUkFD X1NUQVJUM19NT0RFMCwgZHBfcmVzLT5kaXZfZnJhY19zdGFydDNfbW9kZTApOworCVBMTF9SRUdf VyhkcF9yZXMtPnBsbF9iYXNlLAorCQlRU0VSREVTX0NPTV9JTlRFR0xPT1BfR0FJTjBfTU9ERTAs IGRwX3Jlcy0+aW50ZWdsb29wX2dhaW4wX21vZGUwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxf YmFzZSwKKwkJUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4xX01PREUwLCBkcF9yZXMtPmludGVn bG9vcF9nYWluMV9tb2RlMCk7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsCisJCVFTRVJE RVNfQ09NX1ZDT19UVU5FX01BUCwgZHBfcmVzLT52Y29fdHVuZV9tYXApOworCVBMTF9SRUdfVyhk cF9yZXMtPnBsbF9iYXNlLAorCQlRU0VSREVTX0NPTV9MT0NLX0NNUDFfTU9ERTAsIGRwX3Jlcy0+ bG9ja19jbXAxX21vZGUwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwKKwkJUVNFUkRF U19DT01fTE9DS19DTVAyX01PREUwLCBkcF9yZXMtPmxvY2tfY21wMl9tb2RlMCk7CisJUExMX1JF R19XKGRwX3Jlcy0+cGxsX2Jhc2UsCisJCVFTRVJERVNfQ09NX0xPQ0tfQ01QM19NT0RFMCwgZHBf cmVzLT5sb2NrX2NtcDNfbW9kZTApOworCS8qIE1ha2Ugc3VyZSB0aGUgUExMIHJlZ2lzdGVyIHdy aXRlcyBhcmUgZG9uZSAqLworCXdtYigpOworCisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2Us IFFTRVJERVNfQ09NX0JHX1RJTUVSLCAweDBhKTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFz ZSwgUVNFUkRFU19DT01fQ09SRUNMS19ESVZfTU9ERTAsIDB4MGEpOworCVBMTF9SRUdfVyhkcF9y ZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9WQ09fVFVORV9DVFJMLCAweDAwKTsKKwlQTExfUkVH X1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fQklBU19FTl9DTEtCVUZMUl9FTiwgMHgz Zik7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX0NPUkVfQ0xLX0VO LCAweDFmKTsKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fUExMX0lW Q08sIDB4MDcpOworCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLAorCQlRU0VSREVTX0NPTV9M T0NLX0NNUF9FTiwgZHBfcmVzLT5sb2NrX2NtcF9lbik7CisJUExMX1JFR19XKGRwX3Jlcy0+cGxs X2Jhc2UsIFFTRVJERVNfQ09NX1BMTF9DQ1RSTF9NT0RFMCwgMHgzNik7CisJUExMX1JFR19XKGRw X3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX1BMTF9SQ1RSTF9NT0RFMCwgMHgxNik7CisJUExM X1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX0NQX0NUUkxfTU9ERTAsIDB4MDYp OworCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJlZ2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAqLworCXdt YigpOworCisJaWYgKGRwX3Jlcy0+b3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05fQ0MyKQorCQlQ TExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwgUkVHX0RQX1BIWV9NT0RFLCAweDRjKTsKKwllbHNl CisJCVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBSRUdfRFBfUEhZX01PREUsIDB4NWMpOwor CS8qIE1ha2Ugc3VyZSB0aGUgUExMIHJlZ2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAqLworCXdtYigp OworCisJLyogVFggTGFuZSBjb25maWd1cmF0aW9uICovCisJUExMX1JFR19XKGRwX3Jlcy0+cGh5 X2Jhc2UsCisJCQlSRUdfRFBfUEhZX1RYMF9UWDFfTEFORV9DVEwsIDB4MDUpOworCVBMTF9SRUdf VyhkcF9yZXMtPnBoeV9iYXNlLAorCQkJUkVHX0RQX1BIWV9UWDJfVFgzX0xBTkVfQ1RMLCAweDA1 KTsKKworCS8qIFRYLTAgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiAqLworCVBMTF9SRUdfVyhkcF9y ZXMtPmxuX3R4MF9iYXNlLCBUWG5fVFJBTlNDRUlWRVJfQklBU19FTiwgMHgxYSk7CisJUExMX1JF R19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9WTU9ERV9DVFJMMSwgMHg0MCk7CisJUExMX1JF R19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9QUkVfU1RBTExfTERPX0JPT1NUX0VOLCAweDMw KTsKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX0lOVEVSRkFDRV9TRUxFQ1Qs IDB4M2QpOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLCBUWG5fQ0xLQlVGX0VOQUJM RSwgMHgwZik7CisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9SRVNFVF9UU1lO Q19FTiwgMHgwMyk7CisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9UUkFOX0RS VlJfRU1QX0VOLCAweDAzKTsKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwKKwkJVFhu X1BBUlJBVEVfUkVDX0RFVEVDVF9JRExFX0VOLCAweDAwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5s bl90eDBfYmFzZSwgVFhuX1RYX0lOVEVSRkFDRV9NT0RFLCAweDAwKTsKKwlQTExfUkVHX1coZHBf cmVzLT5sbl90eDBfYmFzZSwgVFhuX1RYX0JBTkQsIDB4NCk7CisKKwkvKiBUWC0xIHJlZ2lzdGVy IGNvbmZpZ3VyYXRpb24gKi8KKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwgVFhuX1RS QU5TQ0VJVkVSX0JJQVNfRU4sIDB4MWEpOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNl LCBUWG5fVk1PREVfQ1RSTDEsIDB4NDApOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNl LCBUWG5fUFJFX1NUQUxMX0xET19CT09TVF9FTiwgMHgzMCk7CisJUExMX1JFR19XKGRwX3Jlcy0+ bG5fdHgxX2Jhc2UsIFRYbl9JTlRFUkZBQ0VfU0VMRUNULCAweDNkKTsKKwlQTExfUkVHX1coZHBf cmVzLT5sbl90eDFfYmFzZSwgVFhuX0NMS0JVRl9FTkFCTEUsIDB4MGYpOworCVBMTF9SRUdfVyhk cF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fUkVTRVRfVFNZTkNfRU4sIDB4MDMpOworCVBMTF9SRUdf VyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fVFJBTl9EUlZSX0VNUF9FTiwgMHgwMyk7CisJUExM X1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsCisJCVRYbl9QQVJSQVRFX1JFQ19ERVRFQ1RfSURM RV9FTiwgMHgwMCk7CisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRYbl9UWF9JTlRF UkZBQ0VfTU9ERSwgMHgwMCk7CisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRYbl9U WF9CQU5ELCAweDQpOworCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJlZ2lzdGVyIHdyaXRlcyBhcmUg ZG9uZSAqLworCXdtYigpOworCisJLyogZGVwZW5kZW50IG9uIHRoZSB2Y28gZnJlcXVlbmN5ICov CisJUExMX1JFR19XKGRwX3Jlcy0+cGh5X2Jhc2UsIFJFR19EUF9QSFlfVkNPX0RJViwgZHBfcmVz LT5waHlfdmNvX2Rpdik7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgYm9vbCBkcF8xMG5t X3BsbF9sb2NrX3N0YXR1cyhzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcykKK3sKKwl1MzIgc3Rh dHVzOworCWJvb2wgcGxsX2xvY2tlZDsKKworCS8qIHBvbGwgZm9yIFBMTCBsb2NrIHN0YXR1cyAq LworCWlmIChyZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKChkcF9yZXMtPnBsbF9iYXNlICsKKwkJ CVFTRVJERVNfQ09NX0NfUkVBRFlfU1RBVFVTKSwKKwkJCXN0YXR1cywKKwkJCSgoc3RhdHVzICYg QklUKDApKSA+IDApLAorCQkJRFBfUEhZX1BMTF9QT0xMX1NMRUVQX1VTLAorCQkJRFBfUEhZX1BM TF9QT0xMX1RJTUVPVVRfVVMpKSB7CisJCURSTV9FUlJPUigiJXM6IENfUkVBRFkgc3RhdHVzIGlz IG5vdCBoaWdoLiBTdGF0dXM9JXhcbiIsCisJCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCXBsbF9s b2NrZWQgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlwbGxfbG9ja2VkID0gdHJ1ZTsKKwl9CisKKwly ZXR1cm4gcGxsX2xvY2tlZDsKK30KKworc3RhdGljIGJvb2wgZHBfMTBubV9waHlfcmR5X3N0YXR1 cyhzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcykKK3sKKwl1MzIgc3RhdHVzOworCWJvb2wgcGh5 X3JlYWR5ID0gdHJ1ZTsKKworCS8qIHBvbGwgZm9yIFBIWSByZWFkeSBzdGF0dXMgKi8KKwlpZiAo cmVhZGxfcG9sbF90aW1lb3V0X2F0b21pYygoZHBfcmVzLT5waHlfYmFzZSArCisJCQlSRUdfRFBf UEhZX1NUQVRVUyksCisJCQlzdGF0dXMsCisJCQkoKHN0YXR1cyAmIChCSVQoMSkpKSA+IDApLAor CQkJRFBfUEhZX1BMTF9QT0xMX1NMRUVQX1VTLAorCQkJRFBfUEhZX1BMTF9QT0xMX1RJTUVPVVRf VVMpKSB7CisJCURSTV9FUlJPUigiJXM6IFBoeV9yZWFkeSBpcyBub3QgaGlnaC4gU3RhdHVzPSV4 XG4iLAorCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQlwaHlfcmVhZHkgPSBmYWxzZTsKKwl9CisK KwlyZXR1cm4gcGh5X3JlYWR5OworfQorCitzdGF0aWMgaW50IGRwX3BsbF9lbmFibGVfMTBubShz dHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBtc21fZHBfcGxsICpw bGwgPSBod19jbGtfdG9fcGxsKGh3KTsKKwlzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRv X2RwX3BsbF8xMG5tKHBsbCk7CisJdTMyIGJpYXNfZW4sIGRydnJfZW47CisKKwlQTExfUkVHX1co ZHBfcmVzLT5waHlfYmFzZSwgUkVHX0RQX1BIWV9BVVhfQ0ZHMiwgMHgwNCk7CisJUExMX1JFR19X KGRwX3Jlcy0+cGh5X2Jhc2UsIFJFR19EUF9QSFlfQ0ZHLCAweDAxKTsKKwlQTExfUkVHX1coZHBf cmVzLT5waHlfYmFzZSwgUkVHX0RQX1BIWV9DRkcsIDB4MDUpOworCVBMTF9SRUdfVyhkcF9yZXMt PnBoeV9iYXNlLCBSRUdfRFBfUEhZX0NGRywgMHgwMSk7CisJUExMX1JFR19XKGRwX3Jlcy0+cGh5 X2Jhc2UsIFJFR19EUF9QSFlfQ0ZHLCAweDA5KTsKKwl3bWIoKTsgLyogTWFrZSBzdXJlIHRoZSBQ SFkgcmVnaXN0ZXIgd3JpdGVzIGFyZSBkb25lICovCisKKwlQTExfUkVHX1coZHBfcmVzLT5wbGxf YmFzZSwgUVNFUkRFU19DT01fUkVTRVRTTV9DTlRSTCwgMHgyMCk7CisJd21iKCk7CS8qIE1ha2Ug c3VyZSB0aGUgUExMIHJlZ2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAqLworCisJaWYgKCFkcF8xMG5t X3BsbF9sb2NrX3N0YXR1cyhkcF9yZXMpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBsb2Nr X2VycjsKKwl9CisKKwlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwgUkVHX0RQX1BIWV9DRkcs IDB4MTkpOworCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJlZ2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAq LworCXdtYigpOworCS8qIHBvbGwgZm9yIFBIWSByZWFkeSBzdGF0dXMgKi8KKwlpZiAoIWRwXzEw bm1fcGh5X3JkeV9zdGF0dXMoZHBfcmVzKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gbG9j a19lcnI7CisJfQorCisJRFJNX0RFQlVHX0RQKCIlczogUExMIGlzIGxvY2tlZFxuIiwgX19mdW5j X18pOworCisJaWYgKGRwX3Jlcy0+bGFuZV9jbnQgPT0gMSkgeworCQliaWFzX2VuID0gMHgzZTsK KwkJZHJ2cl9lbiA9IDB4MTM7CisJfSBlbHNlIHsKKwkJYmlhc19lbiA9IDB4M2Y7CisJCWRydnJf ZW4gPSAweDEwOworCX0KKworCWlmIChkcF9yZXMtPmxhbmVfY250ICE9IDQpIHsKKwkJaWYgKGRw X3Jlcy0+b3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05fQ0MxKSB7CisJCQlQTExfUkVHX1coZHBf cmVzLT5sbl90eDFfYmFzZSwKKwkJCQlUWG5fSElHSFpfRFJWUl9FTiwgZHJ2cl9lbik7CisJCQlQ TExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwKKwkJCQlUWG5fVFJBTlNDRUlWRVJfQklBU19F TiwgYmlhc19lbik7CisJCX0gZWxzZSB7CisJCQlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFz ZSwKKwkJCQlUWG5fSElHSFpfRFJWUl9FTiwgZHJ2cl9lbik7CisJCQlQTExfUkVHX1coZHBfcmVz LT5sbl90eDBfYmFzZSwKKwkJCQlUWG5fVFJBTlNDRUlWRVJfQklBU19FTiwgYmlhc19lbik7CisJ CX0KKwl9IGVsc2UgeworCQlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX0hJR0ha X0RSVlJfRU4sIGRydnJfZW4pOworCQlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwKKwkJ CVRYbl9UUkFOU0NFSVZFUl9CSUFTX0VOLCBiaWFzX2VuKTsKKwkJUExMX1JFR19XKGRwX3Jlcy0+ bG5fdHgxX2Jhc2UsIFRYbl9ISUdIWl9EUlZSX0VOLCBkcnZyX2VuKTsKKwkJUExMX1JFR19XKGRw X3Jlcy0+bG5fdHgxX2Jhc2UsCisJCQlUWG5fVFJBTlNDRUlWRVJfQklBU19FTiwgYmlhc19lbik7 CisJfQorCisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9UWF9QT0xfSU5WLCAw eDBhKTsKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwgVFhuX1RYX1BPTF9JTlYsIDB4 MGEpOworCVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBSRUdfRFBfUEhZX0NGRywgMHgxOCk7 CisJdWRlbGF5KDIwMDApOworCisJUExMX1JFR19XKGRwX3Jlcy0+cGh5X2Jhc2UsIFJFR19EUF9Q SFlfQ0ZHLCAweDE5KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFsbCB0aGUgcmVnaXN0ZXIgd3Jp dGVzIGFyZSBjb21wbGV0ZWQgYmVmb3JlCisJICogZG9pbmcgYW55IG90aGVyIG9wZXJhdGlvbgor CSAqLworCXdtYigpOworCisJLyogcG9sbCBmb3IgUEhZIHJlYWR5IHN0YXR1cyAqLworCWlmICgh ZHBfMTBubV9waHlfcmR5X3N0YXR1cyhkcF9yZXMpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290 byBsb2NrX2VycjsKKwl9CisKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX1RY X0RSVl9MVkwsIDB4MzgpOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fVFhf RFJWX0xWTCwgMHgzOCk7CisJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9UWF9F TVBfUE9TVDFfTFZMLCAweDIwKTsKKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwgVFhu X1RYX0VNUF9QT1NUMV9MVkwsIDB4MjApOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNl LCBUWG5fUkVTX0NPREVfTEFORV9PRkZTRVRfVFgsIDB4MDYpOworCVBMTF9SRUdfVyhkcF9yZXMt PmxuX3R4MV9iYXNlLCBUWG5fUkVTX0NPREVfTEFORV9PRkZTRVRfVFgsIDB4MDYpOworCVBMTF9S RUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLCBUWG5fUkVTX0NPREVfTEFORV9PRkZTRVRfUlgsIDB4 MDcpOworCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fUkVTX0NPREVfTEFORV9P RkZTRVRfUlgsIDB4MDcpOworCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJlZ2lzdGVyIHdyaXRlcyBh cmUgZG9uZSAqLworCXdtYigpOworCitsb2NrX2VycjoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRp YyBpbnQgZHBfcGxsX2Rpc2FibGVfMTBubShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlpbnQgcmMg PSAwOworCXN0cnVjdCBtc21fZHBfcGxsICpwbGwgPSBod19jbGtfdG9fcGxsKGh3KTsKKwlzdHJ1 Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRvX2RwX3BsbF8xMG5tKHBsbCk7CisKKwkvKiBBc3Nl cnQgRFAgUEhZIHBvd2VyIGRvd24gKi8KKwlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwgUkVH X0RQX1BIWV9QRF9DVEwsIDB4Mik7CisJLyoKKwkgKiBNYWtlIHN1cmUgYWxsIHRoZSByZWdpc3Rl ciB3cml0ZXMgdG8gZGlzYWJsZSBQTEwgYXJlCisJICogY29tcGxldGVkIGJlZm9yZSBkb2luZyBh bnkgb3RoZXIgb3BlcmF0aW9uCisJICovCisJd21iKCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKwor aW50IGRwX3Zjb19wcmVwYXJlXzEwbm0oc3RydWN0IGNsa19odyAqaHcpCit7CisJaW50IHJjID0g MDsKKwlzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7CisJc3RydWN0 IGRwX3BsbF8xMG5tICpkcF9yZXMgPSB0b19kcF9wbGxfMTBubShwbGwpOworCisJRFJNX0RFQlVH X0RQKCIlczogcmF0ZSA9ICVsZFxuIiwgX19mdW5jX18sIHBsbC0+cmF0ZSk7CisJaWYgKChkcF9y ZXMtPnZjb19jYWNoZWRfcmF0ZSAhPSAwKQorCQkmJiAoZHBfcmVzLT52Y29fY2FjaGVkX3JhdGUg PT0gcGxsLT5yYXRlKSkgeworCQlyYyA9IGRwX3Zjb19zZXRfcmF0ZV8xMG5tKGh3LAorCQkJZHBf cmVzLT52Y29fY2FjaGVkX3JhdGUsIGRwX3Jlcy0+dmNvX2NhY2hlZF9yYXRlKTsKKwkJaWYgKHJj KSB7CisJCQlEUk1fRVJST1IoImluZGV4PSVkIHZjb19zZXRfcmF0ZSBmYWlsZWQuIHJjPSVkXG4i LAorCQkJCXJjLCBkcF9yZXMtPmluZGV4KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwly YyA9IGRwX3BsbF9lbmFibGVfMTBubShodyk7CisJaWYgKHJjKSB7CisJCURSTV9FUlJPUigibmR4 PSVkIGZhaWxlZCB0byBlbmFibGUgZHAgcGxsXG4iLAorCQkJCQlkcF9yZXMtPmluZGV4KTsKKwkJ Z290byBlcnJvcjsKKwl9CisKKwlwbGwtPnBsbF9vbiA9IHRydWU7CitlcnJvcjoKKwlyZXR1cm4g cmM7Cit9CisKK3ZvaWQgZHBfdmNvX3VucHJlcGFyZV8xMG5tKHN0cnVjdCBjbGtfaHcgKmh3KQor eworCXN0cnVjdCBtc21fZHBfcGxsICpwbGwgPSBod19jbGtfdG9fcGxsKGh3KTsKKwlzdHJ1Y3Qg ZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRvX2RwX3BsbF8xMG5tKHBsbCk7CisKKwlpZiAoIWRwX3Jl cykgeworCQlEUk1fRVJST1IoIkludmFsaWQgaW5wdXQgcGFyYW1ldGVyXG4iKTsKKwkJcmV0dXJu OworCX0KKworCWlmICghcGxsLT5wbGxfb24pIHsKKwkJRFJNX0VSUk9SKCJwbGwgcmVzb3VyY2Ug Y2FuJ3QgYmUgZW5hYmxlZFxuIik7CisJCXJldHVybjsKKwl9CisJZHBfcmVzLT52Y29fY2FjaGVk X3JhdGUgPSBwbGwtPnJhdGU7CisJZHBfcGxsX2Rpc2FibGVfMTBubShodyk7CisKKwlwbGwtPnBs bF9vbiA9IGZhbHNlOworfQorCitpbnQgZHBfdmNvX3NldF9yYXRlXzEwbm0oc3RydWN0IGNsa19o dyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0 ZSkKK3sKKwlzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7CisJaW50 IHJjOworCisJRFJNX0RFQlVHX0RQKCJEUCBsYW5lIENMSyByYXRlPSVsZFxuIiwgcmF0ZSk7CisK KwlyYyA9IGRwX2NvbmZpZ192Y29fcmF0ZV8xMG5tKHBsbCwgcmF0ZSk7CisJaWYgKHJjKQorCQlE Uk1fRVJST1IoIiVzOiBGYWlsZWQgdG8gc2V0IGNsayByYXRlXG4iLCBfX2Z1bmNfXyk7CisKKwlw bGwtPnJhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZHBfdmNv X3JlY2FsY19yYXRlXzEwbm0oc3RydWN0IGNsa19odyAqaHcsCisJCQkJCXVuc2lnbmVkIGxvbmcg cGFyZW50X3JhdGUpCit7CisJc3RydWN0IG1zbV9kcF9wbGwgKnBsbCA9IGh3X2Nsa190b19wbGwo aHcpOworCXN0cnVjdCBkcF9wbGxfMTBubSAqZHBfcmVzID0gdG9fZHBfcGxsXzEwbm0ocGxsKTsK Kwl1MzIgZGl2LCBoc2Nsa19kaXYsIGxpbmtfY2xrX2RpdiA9IDA7CisJdTY0IHZjb19yYXRlOwor CisJZGl2ID0gUExMX1JFR19SKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX0hTQ0xLX1NF TCk7CisJZGl2ICY9IDB4MGY7CisKKwlpZiAoZGl2ID09IDEyKQorCQloc2Nsa19kaXYgPSA2OyAv KiBEZWZhdWx0ICovCisJZWxzZSBpZiAoZGl2ID09IDQpCisJCWhzY2xrX2RpdiA9IDQ7CisJZWxz ZSBpZiAoZGl2ID09IDApCisJCWhzY2xrX2RpdiA9IDI7CisJZWxzZSBpZiAoZGl2ID09IDMpCisJ CWhzY2xrX2RpdiA9IDE7CisJZWxzZSB7CisJCURSTV9ERUJVR19EUCgidW5rbm93biBkaXZpZGVy LiBmb3JjaW5nIHRvIGRlZmF1bHRcbiIpOworCQloc2Nsa19kaXYgPSA1OworCX0KKworCWRpdiA9 IFBMTF9SRUdfUihkcF9yZXMtPnBoeV9iYXNlLCBSRUdfRFBfUEhZX0FVWF9DRkcyKTsKKwlkaXYg Pj49IDI7CisKKwlpZiAoKGRpdiAmIDB4MykgPT0gMCkKKwkJbGlua19jbGtfZGl2ID0gNTsKKwll bHNlIGlmICgoZGl2ICYgMHgzKSA9PSAxKQorCQlsaW5rX2Nsa19kaXYgPSAxMDsKKwllbHNlIGlm ICgoZGl2ICYgMHgzKSA9PSAyKQorCQlsaW5rX2Nsa19kaXYgPSAyMDsKKwllbHNlCisJCURSTV9F UlJPUigiJXM6IHVuc3VwcG9ydGVkIGRpdi4gUGh5X21vZGU6ICVkXG4iLCBfX2Z1bmNfXywgZGl2 KTsKKworCWlmIChsaW5rX2Nsa19kaXYgPT0gMjApIHsKKwkJdmNvX3JhdGUgPSBEUF9WQ09fSFND TEtfUkFURV8yNzAwTUhaRElWMTAwMDsKKwl9IGVsc2UgeworCQlpZiAoaHNjbGtfZGl2ID09IDYp CisJCQl2Y29fcmF0ZSA9IERQX1ZDT19IU0NMS19SQVRFXzE2MjBNSFpESVYxMDAwOworCQllbHNl IGlmIChoc2Nsa19kaXYgPT0gNCkKKwkJCXZjb19yYXRlID0gRFBfVkNPX0hTQ0xLX1JBVEVfMjcw ME1IWkRJVjEwMDA7CisJCWVsc2UgaWYgKGhzY2xrX2RpdiA9PSAyKQorCQkJdmNvX3JhdGUgPSBE UF9WQ09fSFNDTEtfUkFURV81NDAwTUhaRElWMTAwMDsKKwkJZWxzZQorCQkJdmNvX3JhdGUgPSBE UF9WQ09fSFNDTEtfUkFURV84MTAwTUhaRElWMTAwMDsKKwl9CisKKwlEUk1fREVCVUdfRFAoInJl dHVybmluZyB2Y28gcmF0ZSA9ICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpdmNvX3JhdGUpOworCisJ ZHBfcmVzLT52Y29fY2FjaGVkX3JhdGUgPSBwbGwtPnJhdGUgPSB2Y29fcmF0ZTsKKwlyZXR1cm4g KHVuc2lnbmVkIGxvbmcpdmNvX3JhdGU7Cit9CisKK2xvbmcgZHBfdmNvX3JvdW5kX3JhdGVfMTBu bShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAorCQkJdW5zaWduZWQgbG9u ZyAqcGFyZW50X3JhdGUpCit7CisJdW5zaWduZWQgbG9uZyBycmF0ZSA9IHJhdGU7CisJc3RydWN0 IG1zbV9kcF9wbGwgKnBsbCA9IGh3X2Nsa190b19wbGwoaHcpOworCisJaWYgKHJhdGUgPD0gcGxs LT5taW5fcmF0ZSkKKwkJcnJhdGUgPSBwbGwtPm1pbl9yYXRlOworCWVsc2UgaWYgKHJhdGUgPD0g RFBfVkNPX0hTQ0xLX1JBVEVfMjcwME1IWkRJVjEwMDApCisJCXJyYXRlID0gRFBfVkNPX0hTQ0xL X1JBVEVfMjcwME1IWkRJVjEwMDA7CisJZWxzZSBpZiAocmF0ZSA8PSBEUF9WQ09fSFNDTEtfUkFU RV81NDAwTUhaRElWMTAwMCkKKwkJcnJhdGUgPSBEUF9WQ09fSFNDTEtfUkFURV81NDAwTUhaRElW MTAwMDsKKwllbHNlCisJCXJyYXRlID0gcGxsLT5tYXhfcmF0ZTsKKworCURSTV9ERUJVR19EUCgi JXM6IHJyYXRlPSVsZFxuIiwgX19mdW5jX18sIHJyYXRlKTsKKworCSpwYXJlbnRfcmF0ZSA9IHJy YXRlOworCXJldHVybiBycmF0ZTsKK30KKwotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBG b3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZHJpLWRldmVsCg==