From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH 4/4] drm/msm/dpu: use private obj to track hw resources Date: Tue, 12 Jun 2018 18:17:47 -0700 Message-ID: <1528852667-14833-5-git-send-email-jsanka@codeaurora.org> References: <1528852667-14833-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1528852667-14833-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org U3dpdGNoIHRvIHN0YXRlIGJhc2VkIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoaXMgcGF0Y2gKb3Zl cmhhdWxzIHRoZSByZXNvdXJjZSBtYW5hZ2VyIGFuZCBIVyBhbGxvY2F0aW9uIG1ldGhvZHMgYnkK bWFpbnRhaW5pbmcgdGhlIGdsb2JhbCByZXNvdXJjZSBwb29sIGFuZCBhbGxvY2F0ZWQgaHcKYmxv Y2tzIGluIHJlc3BlY3RpdmUgZHJtIGNvbXBvbmVudCBzdGF0ZXMuCgpHbG9iYWwgcmVzb3VyY2Ug bWFuYWdlcihSTSkgaXMgdHJhY2tlZCBpbiBwcml2YXRlIG9iamVjdC4KQWxsb2NhdGlvbiBzdHJh dGVneSBpcyBzd2l0Y2hlZCBmcm9tIHNpbmdsZSBwb2ludCBhbGxvY2F0aW9uCm9mIEhXIHJlc291 cmNlcyBmb3IgdGhlIGRpc3BsYXkgcGlwZWxpbmUgdG8gcGVyIGNvbXBvbmVudApiYXNlZCBhbGxv Y2F0aW9uLCB3aGVyZSBlYWNoIGRybSBjb21wb25lbnQgYWxsb2NhdGVzIEhXCmJsb2NrcyBtYXBw ZWQgdG8gaXQncyBkb21haW4gYW5kIHRyYWNrcyB0aGVtIGluIHRoZWlyIHJlc3BlY3RpdmUKc3Rh dGUgb2JqZWN0cy4KCkZpeGVzIHJlc291cmNlIGNvbnRlbnRpb24gZHVlIHRvIHJhY2UgY29uZGl0 aW9ucyBiZXR3ZWVuCnVzZXIgc3BhY2UgYW5kIGRpc3BsYXkgdGhyZWFkIGJ5IHJlc2VydmluZyBy ZXNvdXJjZXMKb25seSBpbiBhdG9taWMgY2hlY2suCgpTaWduZWQtb2ZmLWJ5OiBKZXlrdW1hciBT YW5rYXJhbiA8anNhbmthQGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9jcnRjLmMgICAgICAgICAgIHwgMjEwICsrKy0tLQogZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCAgICAgICAgICAgfCAgNTkgKy0KIGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgICAgICAgIHwgMjIzICsrLS0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaCAgICAgICAgfCAgIDQg LQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oICAgfCAg IDkgKy0KIC4uLi9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c19jbWQuYyAg IHwgIDMyICstCiAuLi4vZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlk LmMgICB8ICA4NiArLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYyAg ICAgICAgICAgIHwgIDE5ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21z LmggICAgICAgICAgICB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X3JtLmMgICAgICAgICAgICAgfCA4MDUgKysrKysrLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uaCAgICAgICAgICAgICB8IDE0OSArKy0tCiAxMSBm aWxlcyBjaGFuZ2VkLCA1MzQgaW5zZXJ0aW9ucygrKSwgMTA3MCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwppbmRleCA0MjZlMmFkLi5hNDg0YzA2 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKQEAgLTQ3LDYgKzQ3 LDggQEAKICNkZWZpbmUgUklHSFRfTUlYRVIgMQogCiAjZGVmaW5lIE1JU1JfQlVGRl9TSVpFCQkJ MjU2CisjZGVmaW5lIE1BWF9WRElTUExBWV9TUExJVAkJMTA4MAorCiAKIHN0YXRpYyBpbmxpbmUg c3RydWN0IGRwdV9rbXMgKl9kcHVfY3J0Y19nZXRfa21zKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK IHsKQEAgLTE0Miw5ICsxNDQsOSBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfcHJvZ3JhbV9sbV9v dXRwdXRfcm9pKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAljcnRjX3N0YXRlID0gdG9fZHB1X2Ny dGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwogCiAJbG1faG9yaXpfcG9zaXRpb24gPSAwOwotCWZvciAo bG1faWR4ID0gMDsgbG1faWR4IDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGxtX2lkeCsrKSB7CisJ Zm9yIChsbV9pZHggPSAwOyBsbV9pZHggPCBjcnRjX3N0YXRlLT5udW1fbWl4ZXJzOyBsbV9pZHgr KykgewogCQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKmxtX3JvaSA9ICZjcnRjX3N0YXRlLT5sbV9i b3VuZHNbbG1faWR4XTsKLQkJc3RydWN0IGRwdV9od19taXhlciAqaHdfbG0gPSBkcHVfY3J0Yy0+ bWl4ZXJzW2xtX2lkeF0uaHdfbG07CisJCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtID0gY3J0 Y19zdGF0ZS0+bWl4ZXJzW2xtX2lkeF0uaHdfbG07CiAJCXN0cnVjdCBkcHVfaHdfbWl4ZXJfY2Zn IGNmZzsKIAogCQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwobG1fcm9pKSkKQEAgLTE4Miw3ICsx ODQsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0dXBfbWl4ZXIoc3RydWN0IGRy bV9jcnRjICpjcnRjLAogCQlyZXR1cm47CiAJfQogCi0JY3RsID0gbWl4ZXItPmh3X2N0bDsKKwlj dGwgPSBtaXhlci0+bG1fY3RsOwogCWxtID0gbWl4ZXItPmh3X2xtOwogCXN0YWdlX2NmZyA9ICZk cHVfY3J0Yy0+c3RhZ2VfY2ZnOwogCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0 YXRlKTsKQEAgLTIzNyw3ICsyMzksNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0 dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJZm9ybWF0LT5iYXNlLnBpeGVsX2Zv cm1hdCwgZmIgPyBmYi0+bW9kaWZpZXIgOiAwKTsKIAogCQkvKiBibGVuZCBjb25maWcgdXBkYXRl ICovCi0JCWZvciAobG1faWR4ID0gMDsgbG1faWR4IDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGxt X2lkeCsrKSB7CisJCWZvciAobG1faWR4ID0gMDsgbG1faWR4IDwgY3N0YXRlLT5udW1fbWl4ZXJz OyBsbV9pZHgrKykgewogCQkJX2RwdV9jcnRjX3NldHVwX2JsZW5kX2NmZyhtaXhlciArIGxtX2lk eCwgcHN0YXRlKTsKIAogCQkJbWl4ZXJbbG1faWR4XS5mbHVzaF9tYXNrIHw9IGZsdXNoX21hc2s7 CkBAIC0yNjAsNyArMjYyLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwX21p eGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9z ZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0 YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmRwdV9jcnRjX3N0YXRlOworCXN0cnVjdCBkcHVf Y3J0Y19zdGF0ZSAqY3N0YXRlOwogCXN0cnVjdCBkcHVfY3J0Y19taXhlciAqbWl4ZXI7CiAJc3Ry dWN0IGRwdV9od19jdGwgKmN0bDsKIAlzdHJ1Y3QgZHB1X2h3X21peGVyICpsbTsKQEAgLTI3MSwy NiArMjczLDI2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiAJCXJldHVybjsKIAogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7 Ci0JZHB1X2NydGNfc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Ci0JbWl4 ZXIgPSBkcHVfY3J0Yy0+bWl4ZXJzOworCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMt PnN0YXRlKTsKKwltaXhlciA9IGNzdGF0ZS0+bWl4ZXJzOwogCiAJRFBVX0RFQlVHKCIlc1xuIiwg ZHB1X2NydGMtPm5hbWUpOwogCi0JaWYgKGRwdV9jcnRjLT5udW1fbWl4ZXJzID4gQ1JUQ19EVUFM X01JWEVSUykgewotCQlEUFVfRVJST1IoImludmFsaWQgbnVtYmVyIG1peGVyczogJWRcbiIsIGRw dV9jcnRjLT5udW1fbWl4ZXJzKTsKKwlpZiAoY3N0YXRlLT5udW1fbWl4ZXJzID4gQ1JUQ19EVUFM X01JWEVSUykgeworCQlEUFVfRVJST1IoImludmFsaWQgbnVtYmVyIG1peGVyczogJWRcbiIsIGNz dGF0ZS0+bnVtX21peGVycyk7CiAJCXJldHVybjsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZHB1 X2NydGMtPm51bV9taXhlcnM7IGkrKykgewotCQlpZiAoIW1peGVyW2ldLmh3X2xtIHx8ICFtaXhl cltpXS5od19jdGwpIHsKKwlmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5udW1fbWl4ZXJzOyBpKysp IHsKKwkJaWYgKCFtaXhlcltpXS5od19sbSB8fCAhbWl4ZXJbaV0ubG1fY3RsKSB7CiAJCQlEUFVf RVJST1IoImludmFsaWQgbG0gb3IgY3RsIGFzc2lnbmVkIHRvIG1peGVyXG4iKTsKIAkJCXJldHVy bjsKIAkJfQogCQltaXhlcltpXS5taXhlcl9vcF9tb2RlID0gMDsKIAkJbWl4ZXJbaV0uZmx1c2hf bWFzayA9IDA7Ci0JCWlmIChtaXhlcltpXS5od19jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFn ZXMpCi0JCQltaXhlcltpXS5od19jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFnZXMoCi0JCQkJ CW1peGVyW2ldLmh3X2N0bCk7CisJCWlmIChtaXhlcltpXS5sbV9jdGwtPm9wcy5jbGVhcl9hbGxf YmxlbmRzdGFnZXMpCisJCQltaXhlcltpXS5sbV9jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFn ZXMoCisJCQkJCW1peGVyW2ldLmxtX2N0bCk7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSBzdGFnZSBj ZmcgKi8KQEAgLTI5OCw4ICszMDAsOCBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0 dXAoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCiAJX2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVy KGNydGMsIGRwdV9jcnRjLCBtaXhlcik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51 bV9taXhlcnM7IGkrKykgewotCQljdGwgPSBtaXhlcltpXS5od19jdGw7CisJZm9yIChpID0gMDsg aSA8IGNzdGF0ZS0+bnVtX21peGVyczsgaSsrKSB7CisJCWN0bCA9IG1peGVyW2ldLmxtX2N0bDsK IAkJbG0gPSBtaXhlcltpXS5od19sbTsKIAogCQlsbS0+b3BzLnNldHVwX2FscGhhX291dChsbSwg bWl4ZXJbaV0ubWl4ZXJfb3BfbW9kZSk7CkBAIC01NzksNzcgKzU4MSwzNSBAQCB2b2lkIGRwdV9j cnRjX2NvbXBsZXRlX2NvbW1pdChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJRFBVX0VWVDMyX1ZF UkJPU0UoRFJNSUQoY3J0YykpOwogfQogCi1zdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4 ZXJfZm9yX2VuY29kZXIoCi0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9l bmNvZGVyICplbmMpCitzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJzKHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIHsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRj ID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0Jc3RydWN0IGRwdV9rbXMgKmRwdV9rbXMgPSBfZHB1X2Ny dGNfZ2V0X2ttcyhjcnRjKTsKLQlzdHJ1Y3QgZHB1X3JtICpybSA9ICZkcHVfa21zLT5ybTsKKwlz dHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGNfc3Rh dGUpOwogCXN0cnVjdCBkcHVfY3J0Y19taXhlciAqbWl4ZXI7Ci0Jc3RydWN0IGRwdV9od19jdGwg Kmxhc3RfdmFsaWRfY3RsID0gTlVMTDsKIAlpbnQgaTsKLQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIg bG1faXRlciwgY3RsX2l0ZXI7CiAKLQlkcHVfcm1faW5pdF9od19pdGVyKCZsbV9pdGVyLCBlbmMt PmJhc2UuaWQsIERQVV9IV19CTEtfTE0pOwotCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmN0bF9pdGVy LCBlbmMtPmJhc2UuaWQsIERQVV9IV19CTEtfQ1RMKTsKKwlpZiAoIWNzdGF0ZS0+bnVtX21peGVy cyB8fCAhY3N0YXRlLT5udW1fY3RscykgeworCQlEUFVfRVJST1IoImludmFsaWQgaHcgY291bnQt bG0nczolZCBjdGwnczolZFxuIiwKKwkJCWNzdGF0ZS0+bnVtX21peGVycywgY3N0YXRlLT5udW1f Y3Rscyk7CisJCXJldHVybjsKKwl9CiAKIAkvKiBTZXQgdXAgYWxsIHRoZSBtaXhlcnMgYW5kIGN0 bHMgcmVzZXJ2ZWQgYnkgdGhpcyBlbmNvZGVyICovCi0JZm9yIChpID0gZHB1X2NydGMtPm51bV9t aXhlcnM7IGkgPCBBUlJBWV9TSVpFKGRwdV9jcnRjLT5taXhlcnMpOyBpKyspIHsKLQkJbWl4ZXIg PSAmZHB1X2NydGMtPm1peGVyc1tpXTsKLQotCQlpZiAoIWRwdV9ybV9nZXRfaHcocm0sICZsbV9p dGVyKSkKLQkJCWJyZWFrOwotCQltaXhlci0+aHdfbG0gPSAoc3RydWN0IGRwdV9od19taXhlciAq KWxtX2l0ZXIuaHc7CisJZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX21peGVyczsgaSsrKSB7 CisJCW1peGVyID0gJmNzdGF0ZS0+bWl4ZXJzW2ldOwogCiAJCS8qIENUTCBtYXkgYmUgPD0gTE1z LCBpZiA8LCBtdWx0aXBsZSBMTXMgY29udHJvbGxlZCBieSAxIENUTCAqLwotCQlpZiAoIWRwdV9y bV9nZXRfaHcocm0sICZjdGxfaXRlcikpIHsKLQkJCURQVV9ERUJVRygibm8gY3RsIGFzc2lnbmVk IHRvIGxtICVkLCB1c2luZyBwcmV2aW91c1xuIiwKLQkJCQkJbWl4ZXItPmh3X2xtLT5pZHggLSBM TV8wKTsKLQkJCW1peGVyLT5od19jdGwgPSBsYXN0X3ZhbGlkX2N0bDsKLQkJfSBlbHNlIHsKLQkJ CW1peGVyLT5od19jdGwgPSAoc3RydWN0IGRwdV9od19jdGwgKiljdGxfaXRlci5odzsKLQkJCWxh c3RfdmFsaWRfY3RsID0gbWl4ZXItPmh3X2N0bDsKLQkJfQotCi0JCS8qIFNob3VsZG4ndCBoYXBw ZW4sIG1peGVycyBhcmUgYWx3YXlzID49IGN0bHMgKi8KLQkJaWYgKCFtaXhlci0+aHdfY3RsKSB7 Ci0JCQlEUFVfRVJST1IoIm5vIHZhbGlkIGN0bHMgZm91bmQgZm9yIGxtICVkXG4iLAotCQkJCQlt aXhlci0+aHdfbG0tPmlkeCAtIExNXzApOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJbWl4ZXItPmVu Y29kZXIgPSBlbmM7CisJCWlmIChpIDwgY3N0YXRlLT5udW1fY3RscykKKwkJCW1peGVyLT5sbV9j dGwgPSBjc3RhdGUtPmh3X2N0bHNbaV07CisJCWVsc2UKKwkJCW1peGVyLT5sbV9jdGwgPSBjc3Rh dGUtPm1peGVyc1tpLTFdLmxtX2N0bDsKIAotCQlkcHVfY3J0Yy0+bnVtX21peGVycysrOwogCQlE UFVfREVCVUcoInNldHVwIG1peGVyICVkOiBsbSAlZFxuIiwKIAkJCQlpLCBtaXhlci0+aHdfbG0t PmlkeCAtIExNXzApOwogCQlEUFVfREVCVUcoInNldHVwIG1peGVyICVkOiBjdGwgJWRcbiIsCi0J CQkJaSwgbWl4ZXItPmh3X2N0bC0+aWR4IC0gQ1RMXzApOworCQkJCWksIG1peGVyLT5sbV9jdGwt PmlkeCAtIENUTF8wKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19zZXR1cF9taXhl cnMoc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMg PSB0b19kcHVfY3J0YyhjcnRjKTsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYzsKLQotCWRwdV9j cnRjLT5udW1fbWl4ZXJzID0gMDsKLQlkcHVfY3J0Yy0+bWl4ZXJzX3N3YXBwZWQgPSBmYWxzZTsK LQltZW1zZXQoZHB1X2NydGMtPm1peGVycywgMCwgc2l6ZW9mKGRwdV9jcnRjLT5taXhlcnMpKTsK LQotCW11dGV4X2xvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOwotCS8qIENoZWNrIGZvciBtaXhl cnMgb24gYWxsIGVuY29kZXJzIGF0dGFjaGVkIHRvIHRoaXMgY3J0YyAqLwotCWxpc3RfZm9yX2Vh Y2hfZW50cnkoZW5jLCAmY3J0Yy0+ZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQp IHsKLQkJaWYgKGVuYy0+Y3J0YyAhPSBjcnRjKQotCQkJY29udGludWU7Ci0KLQkJX2RwdV9jcnRj X3NldHVwX21peGVyX2Zvcl9lbmNvZGVyKGNydGMsIGVuYyk7Ci0JfQotCi0JbXV0ZXhfdW5sb2Nr KCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKLX0KLQogc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVw X2xtX2JvdW5kcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqc3RhdGUpCiB7CkBAIC02NzAsNyArNjMwLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX3Nl dHVwX2xtX2JvdW5kcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJYWRqX21vZGUgPSAmc3RhdGUt PmFkanVzdGVkX21vZGU7CiAJY3J0Y19zcGxpdF93aWR0aCA9IGRwdV9jcnRjX2dldF9taXhlcl93 aWR0aChkcHVfY3J0YywgY3N0YXRlLCBhZGpfbW9kZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZHB1 X2NydGMtPm51bV9taXhlcnM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51bV9t aXhlcnM7IGkrKykgewogCQljc3RhdGUtPmxtX2JvdW5kc1tpXS54ID0gY3J0Y19zcGxpdF93aWR0 aCAqIGk7CiAJCWNzdGF0ZS0+bG1fYm91bmRzW2ldLnkgPSAwOwogCQljc3RhdGUtPmxtX2JvdW5k c1tpXS53ID0gY3J0Y19zcGxpdF93aWR0aDsKQEAgLTY4OCw2ICs2NDgsNyBAQCBzdGF0aWMgdm9p ZCBkcHVfY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQlzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSkKIHsKIAlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRj OworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqbmV3X2NzdGF0ZTsKIAlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXI7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBsb25nIGZs YWdzOwpAQCAtNzA3LDEzICs2NjgsMTEgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfYXRvbWljX2Jl Z2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlEUFVfREVCVUcoImNydGMlZFxuIiwgY3J0Yy0+ YmFzZS5pZCk7CiAKIAlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOworCW5ld19jc3RhdGUg PSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CiAJZGV2ID0gY3J0Yy0+ZGV2OwogCXNt bXVfc3RhdGUgPSAmZHB1X2NydGMtPnNtbXVfc3RhdGU7CiAKLQlpZiAoIWRwdV9jcnRjLT5udW1f bWl4ZXJzKSB7Ci0JCV9kcHVfY3J0Y19zZXR1cF9taXhlcnMoY3J0Yyk7Ci0JCV9kcHVfY3J0Y19z ZXR1cF9sbV9ib3VuZHMoY3J0YywgY3J0Yy0+c3RhdGUpOwotCX0KKwlfZHB1X2NydGNfc2V0dXBf bG1fYm91bmRzKGNydGMsIGNydGMtPnN0YXRlKTsKIAogCWlmIChkcHVfY3J0Yy0+ZXZlbnQpIHsK IAkJV0FSTl9PTihkcHVfY3J0Yy0+ZXZlbnQpOwpAQCAtNzM3LDcgKzY5Niw3IEBAIHN0YXRpYyB2 b2lkIGRwdV9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJICogaXQg bWVhbnMgd2UgYXJlIHRyeWluZyB0byBmbHVzaCBhIENSVEMgd2hvc2Ugc3RhdGUgaXMgZGlzYWJs ZWQ6CiAJICogbm90aGluZyBlbHNlIG5lZWRzIHRvIGJlIGRvbmUuCiAJICovCi0JaWYgKHVubGlr ZWx5KCFkcHVfY3J0Yy0+bnVtX21peGVycykpCisJaWYgKHVubGlrZWx5KCFuZXdfY3N0YXRlLT5u dW1fbWl4ZXJzKSkKIAkJcmV0dXJuOwogCiAJX2RwdV9jcnRjX2JsZW5kX3NldHVwKGNydGMpOwpA QCAtODAxLDcgKzc2MCw3IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2F0b21pY19mbHVzaChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCiAJICogaXQgbWVhbnMgd2UgYXJlIHRyeWluZyB0byBmbHVzaCBh IENSVEMgd2hvc2Ugc3RhdGUgaXMgZGlzYWJsZWQ6CiAJICogbm90aGluZyBlbHNlIG5lZWRzIHRv IGJlIGRvbmUuCiAJICovCi0JaWYgKHVubGlrZWx5KCFkcHVfY3J0Yy0+bnVtX21peGVycykpCisJ aWYgKHVubGlrZWx5KCFjc3RhdGUtPm51bV9taXhlcnMpKQogCQlyZXR1cm47CiAKIAkvKgpAQCAt OTE4LDcgKzg3Nyw3IEBAIHZvaWQgZHB1X2NydGNfY29tbWl0X2tpY2tvZmYoc3RydWN0IGRybV9j cnRjICpjcnRjKQogCSAqIGl0IG1lYW5zIHdlIGFyZSB0cnlpbmcgdG8gc3RhcnQgYSBDUlRDIHdo b3NlIHN0YXRlIGlzIGRpc2FibGVkOgogCSAqIG5vdGhpbmcgZWxzZSBuZWVkcyB0byBiZSBkb25l LgogCSAqLwotCWlmICh1bmxpa2VseSghZHB1X2NydGMtPm51bV9taXhlcnMpKQorCWlmICh1bmxp a2VseSghY3N0YXRlLT5udW1fbWl4ZXJzKSkKIAkJcmV0dXJuOwogCiAJRFBVX0FUUkFDRV9CRUdJ TigiY3J0Y19jb21taXQiKTsKQEAgLTExNTUsNiArMTExNCw3IEBAIHN0YXRpYyB2b2lkIGRwdV9j cnRjX2hhbmRsZV9wb3dlcl9ldmVudCh1MzIgZXZlbnRfdHlwZSwgdm9pZCAqYXJnKQogewogCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGFyZzsKIAlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwor CXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlcjsKIAlzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm07CiAJdTMyIGksIG1pc3Jfc3RhdHVzOwpA QCAtMTE2Myw3ICsxMTIzLDkgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfaGFuZGxlX3Bvd2VyX2V2 ZW50KHUzMiBldmVudF90eXBlLCB2b2lkICphcmcpCiAJCURQVV9FUlJPUigiaW52YWxpZCBjcnRj XG4iKTsKIAkJcmV0dXJuOwogCX0KKwogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CisJ Y3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwogCiAJbXV0ZXhfbG9jaygm ZHB1X2NydGMtPmNydGNfbG9jayk7CiAKQEAgLTExNzksOCArMTE0MSw4IEBAIHN0YXRpYyB2b2lk IGRwdV9jcnRjX2hhbmRsZV9wb3dlcl9ldmVudCh1MzIgZXZlbnRfdHlwZSwgdm9pZCAqYXJnKQog CQkJZHB1X2VuY29kZXJfdmlydF9yZXN0b3JlKGVuY29kZXIpOwogCQl9CiAKLQkJZm9yIChpID0g MDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyArK2kpIHsKLQkJCW0gPSAmZHB1X2NydGMtPm1p eGVyc1tpXTsKKwkJZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX21peGVyczsgKytpKSB7CisJ CQltID0gJmNzdGF0ZS0+bWl4ZXJzW2ldOwogCQkJaWYgKCFtLT5od19sbSB8fCAhbS0+aHdfbG0t Pm9wcy5zZXR1cF9taXNyIHx8CiAJCQkJCSFkcHVfY3J0Yy0+bWlzcl9lbmFibGUpCiAJCQkJY29u dGludWU7CkBAIC0xMTkwLDggKzExNTIsOCBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19oYW5kbGVf cG93ZXJfZXZlbnQodTMyIGV2ZW50X3R5cGUsIHZvaWQgKmFyZykKIAkJfQogCQlicmVhazsKIAlj YXNlIERQVV9QT1dFUl9FVkVOVF9QUkVfRElTQUJMRToKLQkJZm9yIChpID0gMDsgaSA8IGRwdV9j cnRjLT5udW1fbWl4ZXJzOyArK2kpIHsKLQkJCW0gPSAmZHB1X2NydGMtPm1peGVyc1tpXTsKKwkJ Zm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX21peGVyczsgKytpKSB7CisJCQltID0gJmNzdGF0 ZS0+bWl4ZXJzW2ldOwogCQkJaWYgKCFtLT5od19sbSB8fCAhbS0+aHdfbG0tPm9wcy5jb2xsZWN0 X21pc3IgfHwKIAkJCQkJIWRwdV9jcnRjLT5taXNyX2VuYWJsZSkKIAkJCQljb250aW51ZTsKQEAg LTEyMjMsNiArMTE4NSw4IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rpc2FibGUoc3RydWN0IGRy bV9jcnRjICpjcnRjKQogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgbXNt X2RybV9wcml2YXRlICpwcml2OwogCXN0cnVjdCBkcm1fZXZlbnQgZXZlbnQ7CisJc3RydWN0IGRw dV9wcml2YXRlX3N0YXRlICpkcHVfcHJpdl9zdGF0ZTsKKwlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2tt czsKIAl1MzIgcG93ZXJfb247CiAJaW50IHJldDsKIApAQCAtMTIzMCwxMCArMTE5NCwxNSBAQCBz dGF0aWMgdm9pZCBkcHVfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJRFBV X0VSUk9SKCJpbnZhbGlkIGNydGNcbiIpOwogCQlyZXR1cm47CiAJfQorCiAJZHB1X2NydGMgPSB0 b19kcHVfY3J0YyhjcnRjKTsKIAljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0 ZSk7CiAJbW9kZSA9ICZjc3RhdGUtPmJhc2UuYWRqdXN0ZWRfbW9kZTsKIAlwcml2ID0gY3J0Yy0+ ZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcHVfa21zID0gdG9fZHB1X2ttcyhwcml2LT5rbXMpOworCisJ LyogYWNjZXNzaW5nIGFmdGVyIHN3YXAgc3RhdGUuIHBpdl9vYmouc3RhdGUgaXMgdGhlIGN1cnJl bnQgc3RhdGUgKi8KKwlkcHVfcHJpdl9zdGF0ZSA9IHRvX2RwdV9wcml2YXRlX3N0YXRlKGRwdV9r bXMtPnByaXZfb2JqLnN0YXRlKTsKIAogCURQVV9ERUJVRygiY3J0YyVkXG4iLCBjcnRjLT5iYXNl LmlkKTsKIApAQCAtMTI4NiwxNSArMTI1NSwxNCBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19kaXNh YmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJZHB1X3Bvd2VyX2hhbmRsZV91bnJlZ2lzdGVy X2V2ZW50KGRwdV9jcnRjLT5waGFuZGxlLAogCQkJCWRwdV9jcnRjLT5wb3dlcl9ldmVudCk7CiAK LQotCW1lbXNldChkcHVfY3J0Yy0+bWl4ZXJzLCAwLCBzaXplb2YoZHB1X2NydGMtPm1peGVycykp OwotCWRwdV9jcnRjLT5udW1fbWl4ZXJzID0gMDsKLQlkcHVfY3J0Yy0+bWl4ZXJzX3N3YXBwZWQg PSBmYWxzZTsKLQogCS8qIGRpc2FibGUgY2xrICYgYncgY29udHJvbCB1bnRpbCBjbGsgJiBidyBw cm9wZXJ0aWVzIGFyZSBzZXQgKi8KIAljc3RhdGUtPmJ3X2NvbnRyb2wgPSBmYWxzZTsKIAljc3Rh dGUtPmJ3X3NwbGl0X3ZvdGUgPSBmYWxzZTsKIAorCXJldCA9IGRwdV9ybV9yZWxlYXNlX2NydGNf cmVzKCZkcHVfcHJpdl9zdGF0ZS0+cm0sIGNzdGF0ZSk7CisJaWYgKHJldCkKKwkJRFBVX0VSUk9S KCJlcnJvciBpbiByZWxlYXNpbmcgY3J0YyByZXNvdXJjZXNcbiIpOworCiAJbXV0ZXhfdW5sb2Nr KCZkcHVfY3J0Yy0+Y3J0Y19sb2NrKTsKIH0KIApAQCAtMTM1NCw2ICsxMzIyLDMxIEBAIHN0YXRp YyB2b2lkIGRwdV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAKIH0KIAorc3Rh dGljIHN0cnVjdCBkcHVfY3J0Y190b3BvbG9neQorZHB1X2NydGNfZ2V0X3RvcG9sb2d5KHN0cnVj dCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlLAorCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSkKK3sKKwlzdHJ1Y3QgZHB1X2NydGNfdG9wb2xvZ3kgdG9wb2xvZ3k7CisKKwltZW1zZXQoJnRv cG9sb2d5LCAwLCBzaXplb2YodG9wb2xvZ3kpKTsKKworCS8qIFVzZSBzcGxpdCB0b3BvbG9neSBm b3Igd2lkdGggPiAxMDgwICovCisJdG9wb2xvZ3kubnVtX2xtcyA9IChtb2RlLT52ZGlzcGxheSA+ IE1BWF9WRElTUExBWV9TUExJVCkgPyAyIDogMTsKKwl0b3BvbG9neS5udW1fY3RscyA9IHRvcG9s b2d5Lm51bV9sbXM7CisKKwl0b3BvbG9neS5uZWVkc19yZWFsbG9jID0gKHRvcG9sb2d5Lm51bV9s bXMgIT0gY3N0YXRlLT5udW1fbWl4ZXJzKSB8fAorCQkodG9wb2xvZ3kubnVtX2N0bHMgIT0gY3N0 YXRlLT5udW1fY3Rscyk7CisKKwlpZiAodG9wb2xvZ3kubmVlZHNfcmVhbGxvYykKKwkJRFBVX0RF QlVHKAorCQkiY3J0YyAlZCBuZWVkcyBodyByZWFsbG9jYXRpb24uIGxtICglZCAtICVkKSBjdGwo JWQgLSAlZClcbiIsCisJCQlnZXRfY3J0Y19pZChjc3RhdGUpLAorCQkJY3N0YXRlLT5udW1fbWl4 ZXJzLCB0b3BvbG9neS5udW1fbG1zLAorCQkJY3N0YXRlLT5udW1fY3RscywgdG9wb2xvZ3kubnVt X2N0bHMpOworCisJcmV0dXJuIHRvcG9sb2d5OworfQorCiBzdHJ1Y3QgcGxhbmVfc3RhdGUgewog CXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKmRwdV9wc3RhdGU7CiAJY29uc3Qgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqZHJtX3BzdGF0ZTsKQEAgLTEzNzEsNiArMTM2NCw4IEBAIHN0YXRpYyBpbnQg ZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAljb25zdCBzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7CiAJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CiAJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJc3RydWN0IGRwdV9jcnRjX3RvcG9sb2d5 IHRvcG9sb2d5OworCXN0cnVjdCBkcHVfcHJpdmF0ZV9zdGF0ZSAqZHB1X3ByaXZfc3RhdGU7CiAK IAlpbnQgY250ID0gMCwgcmMgPSAwLCBtaXhlcl93aWR0aCwgaSwgel9wb3M7CiAKQEAgLTE1ODQs NiArMTU3OSwyMyBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCiAJCX0KIAl9CiAKKwkvKiBSZXNvdXJjZSBhbGxvY2F0aW9uICovCisJZHB1 X3ByaXZfc3RhdGUgPSBkcHVfZ2V0X3ByaXZhdGVfc3RhdGUoc3RhdGUtPnN0YXRlKTsKKworCXRv cG9sb2d5ID0gZHB1X2NydGNfZ2V0X3RvcG9sb2d5KGNzdGF0ZSwgJnN0YXRlLT5hZGp1c3RlZF9t b2RlKTsKKwlpZiAoIXRvcG9sb2d5Lm5lZWRzX3JlYWxsb2MpCisJCWdvdG8gZW5kOworCisJZHB1 X3JtX3JlbGVhc2VfY3J0Y19yZXMoJmRwdV9wcml2X3N0YXRlLT5ybSwgY3N0YXRlKTsKKwlyYyA9 IGRwdV9ybV9yZXNlcnZlX2NydGNfcmVzKCZkcHVfcHJpdl9zdGF0ZS0+cm0sIGNzdGF0ZSwgJnRv cG9sb2d5KTsKKwlpZiAocmMpIHsKKwkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgcmVz b3VyY2VzIGZvciBjcnRjOiAlZFxuIiwKKwkJCQljcnRjLT5iYXNlLmlkKTsKKwkJZ290byBlbmQ7 CisJfQorCisJX2RwdV9jcnRjX3NldHVwX21peGVycyhzdGF0ZSk7CisKIGVuZDoKIAlyZXR1cm4g cmM7CiB9CkBAIC0xNjU0LDE1ICsxNjY2LDE1IEBAIHN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2ZzX3N0 YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKIAogCXNlcV9wdXRzKHMs ICJcbiIpOwogCi0JZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyArK2kpIHsK LQkJbSA9ICZkcHVfY3J0Yy0+bWl4ZXJzW2ldOworCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51 bV9taXhlcnM7ICsraSkgeworCQltID0gJmNzdGF0ZS0+bWl4ZXJzW2ldOwogCQlpZiAoIW0tPmh3 X2xtKQogCQkJc2VxX3ByaW50ZihzLCAiXHRtaXhlclslZF0gaGFzIG5vIGxtXG4iLCBpKTsKLQkJ ZWxzZSBpZiAoIW0tPmh3X2N0bCkKKwkJZWxzZSBpZiAoIW0tPmxtX2N0bCkKIAkJCXNlcV9wcmlu dGYocywgIlx0bWl4ZXJbJWRdIGhhcyBubyBjdGxcbiIsIGkpOwogCQllbHNlCiAJCQlzZXFfcHJp bnRmKHMsICJcdG1peGVyOiVkIGN0bDolZCB3aWR0aDolZCBoZWlnaHQ6JWRcbiIsCi0JCQkJbS0+ aHdfbG0tPmlkeCAtIExNXzAsIG0tPmh3X2N0bC0+aWR4IC0gQ1RMXzAsCisJCQkJbS0+aHdfbG0t PmlkeCAtIExNXzAsIG0tPmxtX2N0bC0+aWR4IC0gQ1RMXzAsCiAJCQkJb3V0X3dpZHRoLCBtb2Rl LT52ZGlzcGxheSk7CiAJfQogCkBAIC0xNzQ4LDYgKzE3NjAsNyBAQCBzdGF0aWMgc3NpemVfdCBf ZHB1X2NydGNfbWlzcl9zZXR1cChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJY29uc3QgY2hhciBfX3Vz ZXIgKnVzZXJfYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgZHB1 X2NydGMgKmRwdV9jcnRjOworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwogCXN0cnVj dCBkcHVfY3J0Y19taXhlciAqbTsKIAlpbnQgaSA9IDAsIHJjOwogCWNoYXIgYnVmW01JU1JfQlVG Rl9TSVpFICsgMV07CkBAIC0xNzU4LDYgKzE3NzEsNyBAQCBzdGF0aWMgc3NpemVfdCBfZHB1X2Ny dGNfbWlzcl9zZXR1cChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlk cHVfY3J0YyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0 ZShkcHVfY3J0Yy0+YmFzZS5zdGF0ZSk7CiAJYnVmZl9jb3B5ID0gbWluX3Qoc2l6ZV90LCBjb3Vu dCwgTUlTUl9CVUZGX1NJWkUpOwogCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBi dWZmX2NvcHkpKSB7CiAJCURQVV9FUlJPUigiYnVmZmVyIGNvcHkgZmFpbGVkXG4iKTsKQEAgLTE3 NzYsOSArMTc5MCw5IEBAIHN0YXRpYyBzc2l6ZV90IF9kcHVfY3J0Y19taXNyX3NldHVwKHN0cnVj dCBmaWxlICpmaWxlLAogCW11dGV4X2xvY2soJmRwdV9jcnRjLT5jcnRjX2xvY2spOwogCWRwdV9j cnRjLT5taXNyX2VuYWJsZSA9IGVuYWJsZTsKIAlkcHVfY3J0Yy0+bWlzcl9mcmFtZV9jb3VudCA9 IGZyYW1lX2NvdW50OwotCWZvciAoaSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgKytp KSB7CisJZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX21peGVyczsgKytpKSB7CiAJCWRwdV9j cnRjLT5taXNyX2RhdGFbaV0gPSAwOwotCQltID0gJmRwdV9jcnRjLT5taXhlcnNbaV07CisJCW0g PSAmY3N0YXRlLT5taXhlcnNbaV07CiAJCWlmICghbS0+aHdfbG0gfHwgIW0tPmh3X2xtLT5vcHMu c2V0dXBfbWlzcikKIAkJCWNvbnRpbnVlOwogCkBAIC0xNzk0LDYgKzE4MDgsNyBAQCBzdGF0aWMg c3NpemVfdCBfZHB1X2NydGNfbWlzcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAogCQljaGFyIF9f dXNlciAqdXNlcl9idWZmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3Qg ZHB1X2NydGMgKmRwdV9jcnRjOworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwogCXN0 cnVjdCBkcHVfY3J0Y19taXhlciAqbTsKIAlpbnQgaSA9IDAsIHJjOwogCXUzMiBtaXNyX3N0YXR1 czsKQEAgLTE4MDcsNiArMTgyMiw3IEBAIHN0YXRpYyBzc2l6ZV90IF9kcHVfY3J0Y19taXNyX3Jl YWQoc3RydWN0IGZpbGUgKmZpbGUsCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZHB1X2NydGMgPSBm aWxlLT5wcml2YXRlX2RhdGE7CisJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoZHB1X2NydGMt PmJhc2Uuc3RhdGUpOwogCXJjID0gX2RwdV9jcnRjX3Bvd2VyX2VuYWJsZShkcHVfY3J0YywgdHJ1 ZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC0xODE4LDggKzE4MzQsOCBAQCBzdGF0aWMg c3NpemVfdCBfZHB1X2NydGNfbWlzcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAogCQlnb3RvIGJ1 ZmZfY2hlY2s7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyAr K2kpIHsKLQkJbSA9ICZkcHVfY3J0Yy0+bWl4ZXJzW2ldOworCWZvciAoaSA9IDA7IGkgPCBjc3Rh dGUtPm51bV9taXhlcnM7ICsraSkgeworCQltID0gJmNzdGF0ZS0+bWl4ZXJzW2ldOwogCQlpZiAo IW0tPmh3X2xtIHx8ICFtLT5od19sbS0+b3BzLmNvbGxlY3RfbWlzcikKIAkJCWNvbnRpbnVlOwog CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAppbmRleCA5ODg5YjU5Li5i MGRkYzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0 Yy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKQEAgLTMw LDYgKzMwLDggQEAKIC8qIGRlZmluZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IGZy YW1lIGV2ZW50cyAqLwogI2RlZmluZSBEUFVfQ1JUQ19GUkFNRV9FVkVOVF9TSVpFCTQKIAorc3Ry dWN0IGRwdV9rbXM7CisKIC8qKgogICogZW51bSBkcHVfY3J0Y19jbGllbnRfdHlwZTogY3J0YyBj bGllbnQgdHlwZQogICogQFJUX0NMSUVOVDoJUmVhbFRpbWUgY2xpZW50IGxpa2UgdmlkZW8vY21k IG1vZGUgZGlzcGxheQpAQCAtODMsMTUgKzg1LDE1IEBAIHN0cnVjdCBkcHVfY3J0Y19zbW11X3N0 YXRlX2RhdGEgewogLyoqCiAgKiBzdHJ1Y3QgZHB1X2NydGNfbWl4ZXI6IHN0b3JlcyB0aGUgbWFw IGZvciBlYWNoIHZpcnR1YWwgcGlwZWxpbmUgaW4gdGhlIENSVEMKICAqIEBod19sbToJTE0gSFcg RHJpdmVyIGNvbnRleHQKLSAqIEBod19jdGw6CUNUTCBQYXRoIEhXIGRyaXZlciBjb250ZXh0Ci0g KiBAZW5jb2RlcjoJRW5jb2RlciBhdHRhY2hlZCB0byB0aGlzIGxtICYgY3RsCisgKiBAbG1fY3Rs OglDVEwgcGF0aCBmb3IgYXNzb2NpYXRlZCBMTSBIVworICogQGh3X3BwOglQaW5ncG9uZyBIVyBk cml2ZXIgY29udGV4dAogICogQG1peGVyX29wX21vZGU6CW1peGVyIGJsZW5kaW5nIG9wZXJhdGlv biBtb2RlCiAgKiBAZmx1c2hfbWFzazoJbWl4ZXIgZmx1c2ggbWFzayBmb3IgY3RsLCBtaXhlciBh bmQgcGlwZQogICovCiBzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgewogCXN0cnVjdCBkcHVfaHdfbWl4 ZXIgKmh3X2xtOwotCXN0cnVjdCBkcHVfaHdfY3RsICpod19jdGw7Ci0Jc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyOworCXN0cnVjdCBkcHVfaHdfY3RsICpsbV9jdGw7CisJc3RydWN0IGRwdV9o d19waW5ncG9uZyAqaHdfcHA7CiAJdTMyIG1peGVyX29wX21vZGU7CiAJdTMyIGZsdXNoX21hc2s7 CiB9OwpAQCAtMTM0LDE1ICsxMzYsMTcgQEAgc3RydWN0IGRwdV9jcnRjX2V2ZW50IHsKICAqLwog I2RlZmluZSBEUFVfQ1JUQ19NQVhfRVZFTlRfQ09VTlQJMTYKIAorc3RydWN0IGRwdV9jcnRjX3Rv cG9sb2d5IHsKKwlib29sIG5lZWRzX3JlYWxsb2M7CisJaW50IG51bV9jdGxzOworCWludCBudW1f bG1zOworCWludCBudW1faW50ZnM7Cit9OworCiAvKioKICAqIHN0cnVjdCBkcHVfY3J0YyAtIHZp cnR1YWxpemVkIENSVEMgZGF0YSBzdHJ1Y3R1cmUKICAqIEBiYXNlICAgICAgICAgIDogQmFzZSBk cm0gY3J0YyBzdHJ1Y3R1cmUKICAqIEBuYW1lICAgICAgICAgIDogQVNDSUkgZGVzY3JpcHRpb24g b2YgdGhpcyBjcnRjCi0gKiBAbnVtX2N0bHMgICAgICA6IE51bWJlciBvZiBjdGwgcGF0aHMgaW4g dXNlCi0gKiBAbnVtX21peGVycyAgICA6IE51bWJlciBvZiBtaXhlcnMgaW4gdXNlCi0gKiBAbWl4 ZXJzX3N3YXBwZWQ6IFdoZXRoZXIgdGhlIG1peGVycyBoYXZlIGJlZW4gc3dhcHBlZCBmb3IgbGVm dC9yaWdodCB1cGRhdGUKLSAqICAgICAgICAgICAgICAgICAgZXNwZWNpYWxseSBpbiB0aGUgY2Fz ZSBvZiBEU0MgTWVyZ2UuCi0gKiBAbWl4ZXJzICAgICAgICA6IExpc3Qgb2YgYWN0aXZlIG1peGVy cwogICogQGV2ZW50ICAgICAgICAgOiBQb2ludGVyIHRvIGxhc3QgcmVjZWl2ZWQgZHJtIHZibGFu ayBldmVudC4gSWYgdGhlcmUgaXMgYQogICogICAgICAgICAgICAgICAgICBwZW5kaW5nIHZibGFu ayBldmVudCwgdGhpcyB3aWxsIGJlIG5vbi1udWxsLgogICogQHZzeW5jX2NvdW50ICAgOiBSdW5u aW5nIGNvdW50IG9mIHJlY2VpdmVkIHZzeW5jIGV2ZW50cwpAQCAtMTgxLDkgKzE4NSw2IEBAIHN0 cnVjdCBkcHVfY3J0Y19ldmVudCB7CiAgKiBAcGhhbmRsZTogUG9pbnRlciB0byBwb3dlciBoYW5k bGVyCiAgKiBAcG93ZXJfZXZlbnQgICA6IHJlZ2lzdGVyZWQgcG93ZXIgZXZlbnQgaGFuZGxlCiAg KiBAY3VyX3BlcmYgICAgICA6IGN1cnJlbnQgcGVyZm9ybWFuY2UgY29tbWl0dGVkIHRvIGNsb2Nr L2JhbmR3aWR0aCBkcml2ZXIKLSAqIEBycF9sb2NrICAgICAgIDogc2VyaWFsaXphdGlvbiBsb2Nr IGZvciByZXNvdXJjZSBwb29sCi0gKiBAcnBfaGVhZCAgICAgICA6IGxpc3Qgb2YgYWN0aXZlIHJl c291cmNlIHBvb2wKLSAqIEBzY2wzX2NmZ19sdXQgIDogcXNlZWQzIGx1dCBjb25maWcKICAqLwog c3RydWN0IGRwdV9jcnRjIHsKIAlzdHJ1Y3QgZHJtX2NydGMgYmFzZTsKQEAgLTI0NSw3ICsyNDYs NiBAQCBzdHJ1Y3QgZHB1X2NydGMgewogICogQGJhc2U6IEJhc2UgZHJtIGNydGMgc3RhdGUgc3Ry dWN0dXJlCiAgKiBAY29ubmVjdG9ycyAgICA6IEN1cnJlbnRseSBhc3NvY2lhdGVkIGRybSBjb25u ZWN0b3JzCiAgKiBAbnVtX2Nvbm5lY3RvcnM6IE51bWJlciBvZiBhc3NvY2lhdGVkIGRybSBjb25u ZWN0b3JzCi0gKiBAaXNfcHBzcGxpdCAgICA6IFdoZXRoZXIgY3VycmVudCB0b3BvbG9neSByZXF1 aXJlcyBQUFNwbGl0IHNwZWNpYWwgaGFuZGxpbmcKICAqIEBid19jb250cm9sICAgIDogdHJ1ZSBp ZiBidy9jbGsgY29udHJvbGxlZCBieSBjb3JlIGJ3L2NsayBwcm9wZXJ0aWVzCiAgKiBAYndfc3Bs aXRfdm90ZSA6IHRydWUgaWYgYncgY29udHJvbGxlZCBieSBsbGNjL2RyYW0gYncgcHJvcGVydGll cwogICogQGxtX2JvdW5kcyAgICAgOiBMTSBib3VuZGFyaWVzIGJhc2VkIG9uIGN1cnJlbnQgbW9k ZSBmdWxsIHJlc29sdXRpb24sIG5vIFJPSS4KQEAgLTI1NCw2ICsyNTQsMTIgQEAgc3RydWN0IGRw dV9jcnRjIHsKICAqIEBwcm9wZXJ0eV92YWx1ZXM6IEN1cnJlbnQgY3J0YyBwcm9wZXJ0eSB2YWx1 ZXMKICAqIEBpbnB1dF9mZW5jZV90aW1lb3V0X25zIDogQ2FjaGVkIGlucHV0IGZlbmNlIHRpbWVv dXQsIGluIG5zCiAgKiBAbmV3X3BlcmY6IG5ldyBwZXJmb3JtYW5jZSBzdGF0ZSBiZWluZyByZXF1 ZXN0ZWQKKyAqIEBudW1fbWl4ZXJzICAgIDogTnVtYmVyIG9mIG1peGVycyBpbiB1c2UKKyAqIEBt aXhlcnMgICAgICAgIDogTGlzdCBvZiBhY3RpdmUgbWl4ZXJzCisgKiBAbnVtX2N0bHMgICAgICA6 IE51bWJlciBvZiBjdGwgcGF0aHMgaW4gdXNlCisgKiBAaHdfY3RscyAgICAgICA6IExpc3Qgb2Yg YWN0aXZlbCBjdGwgcGF0aHMKKyAqIEBudW1faW50ZiAgICAgIDogTnVtZWVyIG9mIGludGVyZmFj ZXMgaW4gdXNlcworICogQGh3X2ludGZzICAgICAgOiBMaXN0IG9mIGludGVyZmFjZXMgaW4gdXNl CiAgKi8KIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7CiAJc3RydWN0IGRybV9jcnRjX3N0YXRlIGJh c2U7CkBAIC0yNjIsMTggKzI2OCwzNyBAQCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgewogCWludCBu dW1fY29ubmVjdG9yczsKIAlib29sIGJ3X2NvbnRyb2w7CiAJYm9vbCBid19zcGxpdF92b3RlOwot Ci0JYm9vbCBpc19wcHNwbGl0OwogCXN0cnVjdCBkcHVfcmVjdCBsbV9ib3VuZHNbQ1JUQ19EVUFM X01JWEVSU107CiAKIAl1aW50NjRfdCBpbnB1dF9mZW5jZV90aW1lb3V0X25zOwotCiAJc3RydWN0 IGRwdV9jb3JlX3BlcmZfcGFyYW1zIG5ld19wZXJmOworCisJLyogSFcgUmVzb3VyY2VzIHJlc2Vy dmVkIGZvciB0aGUgY3J0YyAqLworCXUzMiBudW1fbWl4ZXJzOworCXN0cnVjdCBkcHVfY3J0Y19t aXhlciBtaXhlcnNbQ1JUQ19EVUFMX01JWEVSU107CisKKwl1MzIgbnVtX2N0bHM7CisJc3RydWN0 IGRwdV9od19jdGwgKmh3X2N0bHNbQ1JUQ19EVUFMX01JWEVSU107CisKKwkvKioKKwkgKiBhcyBk cm0gZW5jb2RlcnMgZG9lc24ndCBoYXZlIGRlZGljYXRlcyBzdGF0ZSBvYmplY3RzCisJICogYW5k IGRybSBjb25uZWN0b3JzIGFyZSBub3Qgb3duZWQgYnkgRFBVLCBtYWludGFpbgorCSAqIEhXIGlu dGVyZmFjZSBhbmQgb3RoZXIgaW50ZXJmYWNlIHJlbGF0ZWQgYmxvY2tzCisJICogaW4gY3J0YyBz dGF0ZQorCSAqCisJICogVE9ETzogTm8gc3VwcG9ydCBmb3IgY2xvbmUgbW9kZSB5ZXQgd2hlcmUg YSBjcnRjCisJICogY2FuIGJlIGF0dGFjaGVkIHdpdGggbW9yZSB0aGFuIG9uZSBlbmNvZGVyL2Nv bm5lY3Rvci4KKwkgKi8KKwl1MzIgbnVtX2ludGZzOworCXN0cnVjdCBkcHVfaHdfaW50ZiAqaHdf aW50ZnNbQ1JUQ19EVUFMX01JWEVSU107CiB9OwogCiAjZGVmaW5lIHRvX2RwdV9jcnRjX3N0YXRl KHgpIFwKIAljb250YWluZXJfb2YoeCwgc3RydWN0IGRwdV9jcnRjX3N0YXRlLCBiYXNlKQogCisv KiBnZXQgY3J0YyBpZCBmcm9tIGRwdSBjcnRjIHN0YXRlKi8KKyNkZWZpbmUgZ2V0X2NydGNfaWQo eCkgKCh4LT5iYXNlLmNydGMpLT5iYXNlLmlkKQorCiAvKioKICAqIGRwdV9jcnRjX2dldF9taXhl cl93aWR0aCAtIGdldCB0aGUgbWl4ZXIgd2lkdGgKICAqIE1peGVyIHdpZHRoIHdpbGwgYmUgc2Ft ZSBhcyBwYW5lbCB3aWR0aCgvMiBmb3Igc3BsaXQpCkBAIC0yODYsNyArMzExLDcgQEAgc3RhdGlj IGlubGluZSBpbnQgZHB1X2NydGNfZ2V0X21peGVyX3dpZHRoKHN0cnVjdCBkcHVfY3J0YyAqZHB1 X2NydGMsCiAJaWYgKCFkcHVfY3J0YyB8fCAhY3N0YXRlIHx8ICFtb2RlKQogCQlyZXR1cm4gMDsK IAotCW1peGVyX3dpZHRoID0gKGRwdV9jcnRjLT5udW1fbWl4ZXJzID09IENSVENfRFVBTF9NSVhF UlMgPworCW1peGVyX3dpZHRoID0gKGNzdGF0ZS0+bnVtX21peGVycyA9PSBDUlRDX0RVQUxfTUlY RVJTID8KIAkJCW1vZGUtPmhkaXNwbGF5IC8gQ1JUQ19EVUFMX01JWEVSUyA6IG1vZGUtPmhkaXNw bGF5KTsKIAogCXJldHVybiBtaXhlcl93aWR0aDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfZW5jb2Rlci5jCmluZGV4IDExYTEwNDUuLmE5OThjMjUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwpAQCAtNjksOCArNjksNiBAQAogCiAj ZGVmaW5lIElETEVfU0hPUlRfVElNRU9VVAkxCiAKLSNkZWZpbmUgTUFYX1ZESVNQTEFZX1NQTElU IDEwODAKLQogLyoqCiAgKiBlbnVtIGRwdV9lbmNfcmNfZXZlbnRzIC0gZXZlbnRzIGZvciByZXNv dXJjZSBjb250cm9sIHN0YXRlIG1hY2hpbmUKICAqIEBEUFVfRU5DX1JDX0VWRU5UX0tJQ0tPRkY6 CkBAIC0xODQsNiArMTgyLDcgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewogCXVuc2lnbmVk IGludCBudW1fcGh5c19lbmNzOwogCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuY3Nb TUFYX1BIWVNfRU5DT0RFUlNfUEVSX1ZJUlRVQUxdOwogCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz ICpjdXJfbWFzdGVyOworCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpjdXJfc2xhdmU7CiAJc3Ry dWN0IGRwdV9od19waW5ncG9uZyAqaHdfcHBbTUFYX0NIQU5ORUxTX1BFUl9FTkNdOwogCiAJYm9v bCBpbnRmc19zd2FwcGVkOwpAQCAtNDY4LDcgKzQ2Nyw2IEBAIHZvaWQgZHB1X2VuY29kZXJfZ2V0 X2h3X3Jlc291cmNlcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAKIAkvKiBRdWVyeSBy ZXNvdXJjZXMgdXNlZCBieSBwaHlzIGVuY3MsIGV4cGVjdGVkIHRvIGJlIHdpdGhvdXQgb3Zlcmxh cCAqLwogCW1lbXNldChod19yZXMsIDAsIHNpemVvZigqaHdfcmVzKSk7Ci0JaHdfcmVzLT5kaXNw bGF5X251bV9vZl9oX3RpbGVzID0gZHB1X2VuYy0+ZGlzcGxheV9udW1fb2ZfaF90aWxlczsKIAog CWZvciAoaSA9IDA7IGkgPCBkcHVfZW5jLT5udW1fcGh5c19lbmNzOyBpKyspIHsKIAkJc3RydWN0 IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07CkBAIC01ODIs MjUgKzU4MCwzMiBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfYWRqdXN0X21vZGUoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbXNtX2Rp c3BsYXlfdG9wb2xvZ3kgZHB1X2VuY29kZXJfZ2V0X3RvcG9sb2d5KAorc3RhdGljIHN0cnVjdCBk cHVfY3J0Y190b3BvbG9neSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koCiAJCQlzdHJ1Y3QgZHB1 X2VuY29kZXJfdmlydCAqZHB1X2VuYywKLQkJCXN0cnVjdCBkcHVfa21zICpkcHVfa21zLAotCQkJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCisJCQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUg KmNzdGF0ZSkKIHsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3k7CisJc3Ry dWN0IGRwdV9jcnRjX3RvcG9sb2d5IHRvcG9sb2d5OwogCWludCBpLCBpbnRmX2NvdW50ID0gMDsK IAorCW1lbXNldCgmdG9wb2xvZ3ksIDAsIHNpemVvZih0b3BvbG9neSkpOworCiAJZm9yIChpID0g MDsgaSA8IE1BWF9QSFlTX0VOQ09ERVJTX1BFUl9WSVJUVUFMOyBpKyspCiAJCWlmIChkcHVfZW5j LT5waHlzX2VuY3NbaV0pCiAJCQlpbnRmX2NvdW50Kys7CiAKLQkvKiBVc2VyIHNwbGl0IHRvcG9s b2d5IGZvciB3aWR0aCA+IDEwODAgKi8KLQl0b3BvbG9neS5udW1fbG0gPSAobW9kZS0+dmRpc3Bs YXkgPiBNQVhfVkRJU1BMQVlfU1BMSVQpID8gMiA6IDE7Ci0JdG9wb2xvZ3kubnVtX2VuYyA9IDA7 Ci0JdG9wb2xvZ3kubnVtX2ludGYgPSBpbnRmX2NvdW50OworCXRvcG9sb2d5Lm51bV9pbnRmcyA9 IGludGZfY291bnQ7CisKKwl0b3BvbG9neS5uZWVkc19yZWFsbG9jID0gKGNzdGF0ZS0+bnVtX2lu dGZzICE9IHRvcG9sb2d5Lm51bV9pbnRmcyk7CisKKwlpZiAodG9wb2xvZ3kubmVlZHNfcmVhbGxv YykKKwkJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLAorCQkJImNydGMgJWQgbmVlZHMgaHcgcmVhbGxv Y2F0aW9uLiBpbnRmICglZCAtICVkKVxuIiwKKwkJCWdldF9jcnRjX2lkKGNzdGF0ZSksCisJCQlj c3RhdGUtPm51bV9pbnRmcywgdG9wb2xvZ3kubnVtX2ludGZzKTsKIAogCXJldHVybiB0b3BvbG9n eTsKIH0KKwogc3RhdGljIGludCBkcHVfZW5jb2Rlcl92aXJ0X2F0b21pY19jaGVjaygKIAkJc3Ry dWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCkBAIC02MTEsNyArNjE2LDEwIEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9h dG9taWNfY2hlY2soCiAJc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7CiAJY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGU7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2Rl OwotCXN0cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neTsKKwlzdHJ1Y3QgZHB1X2Ny dGNfdG9wb2xvZ3kgdG9wb2xvZ3k7CisJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpkcHVfY3N0YXRl OworCXN0cnVjdCBkcHVfcHJpdmF0ZV9zdGF0ZSAqZHB1X3ByaXZfc3RhdGU7CisJc3RydWN0IGRw dV9lbmNvZGVyX2h3X3Jlc291cmNlcyBlbmNfaHdfcmVzOwogCWludCBpID0gMDsKIAlpbnQgcmV0 ID0gMDsKIApAQCAtNjI4LDYgKzYzNiw3IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfdmlydF9h dG9taWNfY2hlY2soCiAJZHB1X2ttcyA9IHRvX2RwdV9rbXMocHJpdi0+a21zKTsKIAltb2RlID0g JmNydGNfc3RhdGUtPm1vZGU7CiAJYWRqX21vZGUgPSAmY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9k ZTsKKwlkcHVfY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Y19zdGF0ZSk7CiAJRFBVX0VW VDMyKERSTUlEKGRybV9lbmMpKTsKIAogCS8qCkBAIC02NTcsMjcgKzY2NiwzMSBAQCBzdGF0aWMg aW50IGRwdV9lbmNvZGVyX3ZpcnRfYXRvbWljX2NoZWNrKAogCQl9CiAJfQogCi0JdG9wb2xvZ3kg PSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koZHB1X2VuYywgZHB1X2ttcywgYWRqX21vZGUpOwor CWlmIChyZXQpCisJCWdvdG8gZW5kOwogCi0JLyogUmVzZXJ2ZSBkeW5hbWljIHJlc291cmNlcyBu b3cuIEluZGljYXRpbmcgQXRvbWljVGVzdCBwaGFzZSAqLwotCWlmICghcmV0KSB7Ci0JCS8qCi0J CSAqIEF2b2lkIHJlc2VydmluZyByZXNvdXJjZXMgd2hlbiBtb2RlIHNldCBpcyBwZW5kaW5nLiBU b3BvbG9neQotCQkgKiBpbmZvIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIGNvbXBsZXRlIHJlc2Vy dmF0aW9uLgotCQkgKi8KLQkJaWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNf c3RhdGUpCi0JCQkJJiYgZHB1X2VuYy0+bW9kZV9zZXRfY29tcGxldGUpIHsKLQkJCXJldCA9IGRw dV9ybV9yZXNlcnZlKCZkcHVfa21zLT5ybSwgZHJtX2VuYywgY3J0Y19zdGF0ZSwKLQkJCQljb25u X3N0YXRlLCB0b3BvbG9neSwgdHJ1ZSk7Ci0JCQlkcHVfZW5jLT5tb2RlX3NldF9jb21wbGV0ZSA9 IGZhbHNlOwotCQl9CisJLyogaHcgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLworCWRwdV9lbmNvZGVy X2dldF9od19yZXNvdXJjZXMoZHJtX2VuYywgJmVuY19od19yZXMsIGNvbm5fc3RhdGUpOworCisJ ZHB1X3ByaXZfc3RhdGUgPSBkcHVfZ2V0X3ByaXZhdGVfc3RhdGUoY3J0Y19zdGF0ZS0+c3RhdGUp OworCisJdG9wb2xvZ3kgPSBkcHVfZW5jb2Rlcl9nZXRfdG9wb2xvZ3koZHB1X2VuYywgZHB1X2Nz dGF0ZSk7CisJaWYgKCF0b3BvbG9neS5uZWVkc19yZWFsbG9jKQorCQlnb3RvIGVuZDsKKworCWRw dV9ybV9yZWxlYXNlX2VuY29kZXJfcmVzKCZkcHVfcHJpdl9zdGF0ZS0+cm0sIGRwdV9jc3RhdGUp OworCXJldCA9IGRwdV9ybV9yZXNlcnZlX2VuY29kZXJfcmVzKCZkcHVfcHJpdl9zdGF0ZS0+cm0s CisJCQkJCQkgICAgIGRwdV9jc3RhdGUsICZlbmNfaHdfcmVzKTsKKwlpZiAocmV0KSB7CisJCURQ VV9FUlJPUl9FTkMoZHB1X2VuYywKKwkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIGh3IHJlc291cmNl c1xuIik7CisJCWdvdG8gZW5kOwogCX0KIAotCWlmICghcmV0KQotCQlkcm1fbW9kZV9zZXRfY3J0 Y2luZm8oYWRqX21vZGUsIDApOworCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGpfbW9kZSwgMCk7 CiAKIAlEUFVfRVZUMzIoRFJNSUQoZHJtX2VuYyksIGFkal9tb2RlLT5mbGFncywgYWRqX21vZGUt PnByaXZhdGVfZmxhZ3MpOwotCitlbmQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTAzMywxMCAr MTA0Niw4IEBAIHN0YXRpYyB2b2lkIGRwdV9lbmNvZGVyX3ZpcnRfbW9kZV9zZXQoc3RydWN0IGRy bV9lbmNvZGVyICpkcm1fZW5jLAogCXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwogCXN0cnVjdCBs aXN0X2hlYWQgKmNvbm5lY3Rvcl9saXN0OwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uID0g TlVMTCwgKmNvbm5faXRlcjsKLQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgcHBfaXRlcjsKLQlzdHJ1 Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3k7Ci0JZW51bSBkcHVfcm1fdG9wb2xvZ3lf bmFtZSB0b3BvbG9neV9uYW1lOwotCWludCBpID0gMCwgcmV0OworCXN0cnVjdCBkcHVfY3J0Y19z dGF0ZSAqZHB1X2NzdGF0ZTsKKwlpbnQgaSA9IDA7CiAKIAlpZiAoIWRybV9lbmMpIHsKIAkJRFBV X0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOwpAQCAtMTA2NCwzOCArMTA3NSwxNiBAQCBzdGF0 aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJt X2VuYywKIAkJcmV0dXJuOwogCX0KIAotCXRvcG9sb2d5ID0gZHB1X2VuY29kZXJfZ2V0X3RvcG9s b2d5KGRwdV9lbmMsIGRwdV9rbXMsIGFkal9tb2RlKTsKLQotCS8qIFJlc2VydmUgZHluYW1pYyBy ZXNvdXJjZXMgbm93LiBJbmRpY2F0aW5nIG5vbi1BdG9taWNUZXN0IHBoYXNlICovCi0JcmV0ID0g ZHB1X3JtX3Jlc2VydmUoJmRwdV9rbXMtPnJtLCBkcm1fZW5jLCBkcm1fZW5jLT5jcnRjLT5zdGF0 ZSwKLQkJCWNvbm4tPnN0YXRlLCB0b3BvbG9neSwgZmFsc2UpOwotCWlmIChyZXQpIHsKLQkJRFBV X0VSUk9SX0VOQyhkcHVfZW5jLAotCQkJCSJmYWlsZWQgdG8gcmVzZXJ2ZSBodyByZXNvdXJjZXMs ICVkXG4iLCByZXQpOwotCQlyZXR1cm47Ci0JfQorCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19z dGF0ZShkcm1fZW5jLT5jcnRjLT5zdGF0ZSk7CiAKLQlkcHVfcm1faW5pdF9od19pdGVyKCZwcF9p dGVyLCBkcm1fZW5jLT5iYXNlLmlkLCBEUFVfSFdfQkxLX1BJTkdQT05HKTsKLQlmb3IgKGkgPSAw OyBpIDwgTUFYX0NIQU5ORUxTX1BFUl9FTkM7IGkrKykgewotCQlkcHVfZW5jLT5od19wcFtpXSA9 IE5VTEw7Ci0JCWlmICghZHB1X3JtX2dldF9odygmZHB1X2ttcy0+cm0sICZwcF9pdGVyKSkKLQkJ CWJyZWFrOwotCQlkcHVfZW5jLT5od19wcFtpXSA9IChzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICop IHBwX2l0ZXIuaHc7Ci0JfQotCi0JdG9wb2xvZ3lfbmFtZSA9IGRwdV9ybV9nZXRfdG9wb2xvZ3lf bmFtZSh0b3BvbG9neSk7CiAJZm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7 IGkrKykgewogCQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cyA9IGRwdV9lbmMtPnBoeXNf ZW5jc1tpXTsKIAogCQlpZiAocGh5cykgewotCQkJaWYgKCFkcHVfZW5jLT5od19wcFtpXSkgewot CQkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywKLQkJCQkgICAgImludmFsaWQgcGluZ3BvbmcgYmxv Y2sgZm9yIHRoZSBlbmNvZGVyXG4iKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlwaHlzLT5od19w cCA9IGRwdV9lbmMtPmh3X3BwW2ldOworCQkJZHB1X2VuYy0+aHdfcHBbaV0gPSBkcHVfY3N0YXRl LT5taXhlcnNbaV0uaHdfcHA7CisJCQlwaHlzLT5od19wcCA9IGRwdV9jc3RhdGUtPm1peGVyc1tp XS5od19wcDsKIAkJCXBoeXMtPmNvbm5lY3RvciA9IGNvbm4tPnN0YXRlLT5jb25uZWN0b3I7Ci0J CQlwaHlzLT50b3BvbG9neV9uYW1lID0gdG9wb2xvZ3lfbmFtZTsKKwkJCXBoeXMtPmh3X2N0bCA9 IGRwdV9jc3RhdGUtPm1peGVyc1tpXS5sbV9jdGw7CiAJCQlpZiAocGh5cy0+b3BzLm1vZGVfc2V0 KQogCQkJCXBoeXMtPm9wcy5tb2RlX3NldChwaHlzLCBtb2RlLCBhZGpfbW9kZSk7CiAJCX0KQEAg LTExNzAsMzUgKzExNTksNDggQEAgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X3Jlc3RvcmUoc3RydWN0 IGRybV9lbmNvZGVyICpkcm1fZW5jKQogc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9lbmFi bGUoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQogewogCXN0cnVjdCBkcHVfZW5jb2Rlcl92 aXJ0ICpkcHVfZW5jID0gTlVMTDsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5cyAgPSBO VUxMOwogCWludCBpLCByZXQgPSAwOwotCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpjdXJfbW9k ZSA9IE5VTEw7CiAKIAlpZiAoIWRybV9lbmMpIHsKIAkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29k ZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRy bV9lbmMpOwotCWN1cl9tb2RlID0gJmRwdV9lbmMtPmJhc2UuY3J0Yy0+c3RhdGUtPmFkanVzdGVk X21vZGU7CiAKIAlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJcbiIpOwotCURQVV9FVlQzMihEUk1J RChkcm1fZW5jKSwgY3VyX21vZGUtPmhkaXNwbGF5LCBjdXJfbW9kZS0+dmRpc3BsYXkpOwogCiAJ ZHB1X2VuYy0+Y3VyX21hc3RlciA9IE5VTEw7CisJZHB1X2VuYy0+Y3VyX3NsYXZlID0gTlVMTDsK IAlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7Ci0JCXN0cnVj dCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzID0gZHB1X2VuYy0+cGh5c19lbmNzW2ldOworCQlwaHlz ID0gZHB1X2VuYy0+cGh5c19lbmNzW2ldOwogCi0JCWlmIChwaHlzICYmIHBoeXMtPm9wcy5pc19t YXN0ZXIgJiYgcGh5cy0+b3BzLmlzX21hc3RlcihwaHlzKSkgewotCQkJRFBVX0RFQlVHX0VOQyhk cHVfZW5jLCAibWFzdGVyIGlzIG5vdyBpZHggJWRcbiIsIGkpOworCQlpZiAoIXBoeXMgfHwgIXBo eXMtPm9wcy5pc19tYXN0ZXIpCisJCQljb250aW51ZTsKKworCQlpZiAocGh5cy0+b3BzLmlzX21h c3RlcihwaHlzKSkgeworCQkJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAibWFzdGVyIGlzIGF0IGlk eCAlZFxuIiwgaSk7CiAJCQlkcHVfZW5jLT5jdXJfbWFzdGVyID0gcGh5czsKLQkJCWJyZWFrOwor CQl9IGVsc2UgeworCQkJRFBVX0RFQlVHX0VOQyhkcHVfZW5jLCAic2xhdmUgaXMgYXQgaWR4ICVk XG4iLCBpKTsKKwkJCWRwdV9lbmMtPmN1cl9zbGF2ZSA9IHBoeXM7CiAJCX0KIAl9CiAKIAlpZiAo IWRwdV9lbmMtPmN1cl9tYXN0ZXIpIHsKLQkJRFBVX0VSUk9SKCJ2aXJ0IGVuY29kZXIgaGFzIG5v IG1hc3RlciEgbnVtX3BoeXMgJWRcbiIsIGkpOworCQlEUFVfRVJST1IoInZpcnQgZW5jb2RlciBo YXMgbm8gbWFzdGVyIVxuIik7CiAJCXJldHVybjsKIAl9CiAKKwkvKiBhbHdheXMgZW5hYmxlIHNs YXZlIGVuY29kZXIgYmVmb3JlIG1hc3RlciAqLworCXBoeXMgPSBkcHVfZW5jLT5jdXJfc2xhdmU7 CisJaWYgKHBoeXMgJiYgcGh5cy0+b3BzLmVuYWJsZSkKKwkJcGh5cy0+b3BzLmVuYWJsZShwaHlz KTsKKworCXBoeXMgPSBkcHVfZW5jLT5jdXJfbWFzdGVyOworCWlmIChwaHlzICYmIHBoeXMtPm9w cy5lbmFibGUpCisJCXBoeXMtPm9wcy5lbmFibGUocGh5cyk7CisKIAlyZXQgPSBkcHVfZW5jb2Rl cl9yZXNvdXJjZV9jb250cm9sKGRybV9lbmMsIERQVV9FTkNfUkNfRVZFTlRfS0lDS09GRik7CiAJ aWYgKHJldCkgewogCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJkcHUgcmVzb3VyY2UgY29udHJv bCBmYWlsZWQ6ICVkXG4iLApAQCAtMTIwNywyNSArMTIwOSwxNiBAQCBzdGF0aWMgdm9pZCBkcHVf ZW5jb2Rlcl92aXJ0X2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMpCiAJfQogCiAJ Zm9yIChpID0gMDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgewotCQlzdHJ1Y3Qg ZHB1X2VuY29kZXJfcGh5cyAqcGh5cyA9IGRwdV9lbmMtPnBoeXNfZW5jc1tpXTsKLQorCQlwaHlz ID0gZHB1X2VuYy0+cGh5c19lbmNzW2ldOwogCQlpZiAoIXBoeXMpCiAJCQljb250aW51ZTsKIAot CQlpZiAocGh5cyAhPSBkcHVfZW5jLT5jdXJfbWFzdGVyKSB7Ci0JCQlpZiAocGh5cy0+b3BzLmVu YWJsZSkKLQkJCQlwaHlzLT5vcHMuZW5hYmxlKHBoeXMpOwotCQl9Ci0KIAkJaWYgKGRwdV9lbmMt Pm1pc3JfZW5hYmxlICYmIChkcHVfZW5jLT5kaXNwX2luZm8uY2FwYWJpbGl0aWVzICYKIAkJICAg ICBNU01fRElTUExBWV9DQVBfVklEX01PREUpICYmIHBoeXMtPm9wcy5zZXR1cF9taXNyKQogCQkJ cGh5cy0+b3BzLnNldHVwX21pc3IocGh5cywgdHJ1ZSwKIAkJCQkJCWRwdV9lbmMtPm1pc3JfZnJh bWVfY291bnQpOwogCX0KIAotCWlmIChkcHVfZW5jLT5jdXJfbWFzdGVyLT5vcHMuZW5hYmxlKQot CQlkcHVfZW5jLT5jdXJfbWFzdGVyLT5vcHMuZW5hYmxlKGRwdV9lbmMtPmN1cl9tYXN0ZXIpOwot CiAJX2RwdV9lbmNvZGVyX3ZpcnRfZW5hYmxlX2hlbHBlcihkcm1fZW5jKTsKIH0KIApAQCAtMTIz NSw3ICsxMjI4LDkgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9kaXNhYmxlKHN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2Owog CXN0cnVjdCBkcHVfa21zICpkcHVfa21zOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl OwotCWludCBpID0gMDsKKwlzdHJ1Y3QgZHB1X3ByaXZhdGVfc3RhdGUgKmRwdV9wcml2X3N0YXRl OworCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOworCWludCByYywgaSA9IDA7CiAKIAlp ZiAoIWRybV9lbmMpIHsKIAkJRFBVX0VSUk9SKCJpbnZhbGlkIGVuY29kZXJcbiIpOwpAQCAtMTI0 OSw2ICsxMjQ0LDcgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdmlydF9kaXNhYmxlKHN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAl9CiAKIAltb2RlID0gJmRybV9lbmMtPmNydGMtPnN0 YXRlLT5hZGp1c3RlZF9tb2RlOworCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGRybV9lbmMt PmNydGMtPnN0YXRlKTsKIAogCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRybV9lbmMp OwogCURQVV9ERUJVR19FTkMoZHB1X2VuYywgIlxuIik7CkBAIC0xMjU2LDYgKzEyNTIsOSBAQCBz dGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X2Rpc2FibGUoc3RydWN0IGRybV9lbmNvZGVyICpk cm1fZW5jKQogCXByaXYgPSBkcm1fZW5jLT5kZXYtPmRldl9wcml2YXRlOwogCWRwdV9rbXMgPSB0 b19kcHVfa21zKHByaXYtPmttcyk7CiAKKwkvKiBhY2Nlc3NpbmcgYWZ0ZXIgc3dhcCBzdGF0ZS4g cGl2X29iai5zdGF0ZSBpcyB0aGUgY3VycmVudCBzdGF0ZSAqLworCWRwdV9wcml2X3N0YXRlID0g dG9fZHB1X3ByaXZhdGVfc3RhdGUoZHB1X2ttcy0+cHJpdl9vYmouc3RhdGUpOworCiAJRFBVX0VW VDMyKERSTUlEKGRybV9lbmMpKTsKIAogCS8qIHdhaXQgZm9yIGlkbGUgKi8KQEAgLTEyODUsOSAr MTI4NCwxMSBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl92aXJ0X2Rpc2FibGUoc3RydWN0IGRy bV9lbmNvZGVyICpkcm1fZW5jKQogCiAJZHB1X2VuYy0+Y3VyX21hc3RlciA9IE5VTEw7CiAKLQlE UFVfREVCVUdfRU5DKGRwdV9lbmMsICJlbmNvZGVyIGRpc2FibGVkXG4iKTsKKwlyYyA9IGRwdV9y bV9yZWxlYXNlX2VuY29kZXJfcmVzKCZkcHVfcHJpdl9zdGF0ZS0+cm0sIGNzdGF0ZSk7CisJaWYg KHJjKQorCQlEUFVfRVJST1IoImVycm9yIGluIHJlbGVhc2luZyBlbmNvZGVyIHJlc291cmNlc1xu Iik7CiAKLQlkcHVfcm1fcmVsZWFzZSgmZHB1X2ttcy0+cm0sIGRybV9lbmMpOworCURQVV9ERUJV R19FTkMoZHB1X2VuYywgImVuY29kZXIgZGlzYWJsZWRcbiIpOwogfQogCiBzdGF0aWMgZW51bSBk cHVfaW50ZiBkcHVfZW5jb2Rlcl9nZXRfaW50ZihzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9n LApAQCAtMTkyMiw3MCArMTkyMyw2IEBAIHZvaWQgZHB1X2VuY29kZXJfa2lja29mZihzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmRybV9lbmMpCiAJRFBVX0FUUkFDRV9FTkQoImVuY29kZXJfa2lja29mZiIp OwogfQogCi1pbnQgZHB1X2VuY29kZXJfaGVscGVyX2h3X3JlbGVhc2Uoc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXMgKnBoeXNfZW5jLAotCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKLXsKLQlz dHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmM7Ci0Jc3RydWN0IGRwdV9od19taXhlcl9jZmcgbWl4 ZXI7Ci0Jc3RydWN0IGRwdV9ybV9od19pdGVyIGxtX2l0ZXI7Ci0JYm9vbCBsbV92YWxpZCA9IGZh bHNlOwotCi0JaWYgKCFwaHlzX2VuYyB8fCAhcGh5c19lbmMtPnBhcmVudCkgewotCQlEUFVfRVJS T1IoImludmFsaWQgZW5jb2RlclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRybV9l bmMgPSBwaHlzX2VuYy0+cGFyZW50OwotCW1lbXNldCgmbWl4ZXIsIDAsIHNpemVvZihtaXhlcikp OwotCi0JLyogcmVzZXQgYXNzb2NpYXRlZCBDVEwvTE1zICovCi0JaWYgKHBoeXNfZW5jLT5od19j dGwtPm9wcy5jbGVhcl9wZW5kaW5nX2ZsdXNoKQotCQlwaHlzX2VuYy0+aHdfY3RsLT5vcHMuY2xl YXJfcGVuZGluZ19mbHVzaChwaHlzX2VuYy0+aHdfY3RsKTsKLQlpZiAocGh5c19lbmMtPmh3X2N0 bC0+b3BzLmNsZWFyX2FsbF9ibGVuZHN0YWdlcykKLQkJcGh5c19lbmMtPmh3X2N0bC0+b3BzLmNs ZWFyX2FsbF9ibGVuZHN0YWdlcyhwaHlzX2VuYy0+aHdfY3RsKTsKLQotCWRwdV9ybV9pbml0X2h3 X2l0ZXIoJmxtX2l0ZXIsIGRybV9lbmMtPmJhc2UuaWQsIERQVV9IV19CTEtfTE0pOwotCXdoaWxl IChkcHVfcm1fZ2V0X2h3KCZwaHlzX2VuYy0+ZHB1X2ttcy0+cm0sICZsbV9pdGVyKSkgewotCQlz dHJ1Y3QgZHB1X2h3X21peGVyICpod19sbSA9IChzdHJ1Y3QgZHB1X2h3X21peGVyICopbG1faXRl ci5odzsKLQotCQlpZiAoIWh3X2xtKQotCQkJY29udGludWU7Ci0KLQkJLyogbmVlZCB0byBmbHVz aCBMTSB0byByZW1vdmUgaXQgKi8KLQkJaWYgKHBoeXNfZW5jLT5od19jdGwtPm9wcy5nZXRfYml0 bWFza19taXhlciAmJgotCQkJCXBoeXNfZW5jLT5od19jdGwtPm9wcy51cGRhdGVfcGVuZGluZ19m bHVzaCkKLQkJCXBoeXNfZW5jLT5od19jdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaCgKLQkJ CQkJcGh5c19lbmMtPmh3X2N0bCwKLQkJCQkJcGh5c19lbmMtPmh3X2N0bC0+b3BzLmdldF9iaXRt YXNrX21peGVyKAotCQkJCQlwaHlzX2VuYy0+aHdfY3RsLCBod19sbS0+aWR4KSk7Ci0KLQkJaWYg KGZiKSB7Ci0JCQkvKiBhc3N1bWUgYSBzaW5nbGUgTE0gaWYgdGFyZ2V0aW5nIGEgZnJhbWUgYnVm ZmVyICovCi0JCQlpZiAobG1fdmFsaWQpCi0JCQkJY29udGludWU7Ci0KLQkJCW1peGVyLm91dF9o ZWlnaHQgPSBmYi0+aGVpZ2h0OwotCQkJbWl4ZXIub3V0X3dpZHRoID0gZmItPndpZHRoOwotCi0J CQlpZiAoaHdfbG0tPm9wcy5zZXR1cF9taXhlcl9vdXQpCi0JCQkJaHdfbG0tPm9wcy5zZXR1cF9t aXhlcl9vdXQoaHdfbG0sICZtaXhlcik7Ci0JCX0KLQotCQlsbV92YWxpZCA9IHRydWU7Ci0KLQkJ Lyogb25seSBlbmFibGUgYm9yZGVyIGNvbG9yIG9uIExNICovCi0JCWlmIChwaHlzX2VuYy0+aHdf Y3RsLT5vcHMuc2V0dXBfYmxlbmRzdGFnZSkKLQkJCXBoeXNfZW5jLT5od19jdGwtPm9wcy5zZXR1 cF9ibGVuZHN0YWdlKAotCQkJCQlwaHlzX2VuYy0+aHdfY3RsLCBod19sbS0+aWR4LCBOVUxMKTsK LQl9Ci0KLQlpZiAoIWxtX3ZhbGlkKSB7Ci0JCURQVV9ERUJVR19FTkModG9fZHB1X2VuY29kZXJf dmlydChkcm1fZW5jKSwgImxtIG5vdCBmb3VuZFxuIik7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0K LQlyZXR1cm4gMDsKLX0KLQogdm9pZCBkcHVfZW5jb2Rlcl9wcmVwYXJlX2NvbW1pdChzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmRybV9lbmMpCiB7CiAJc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9l bmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl ci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaAppbmRleCBj ZTkyOTAxLi5hOWY0OWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfZW5jb2Rlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9l bmNvZGVyLmgKQEAgLTMzLDE0ICszMywxMCBAQAogICogRW5jb2RlciBmdW5jdGlvbnMgYW5kIGRh dGEgdHlwZXMKICAqIEBpbnRmczoJSW50ZXJmYWNlcyB0aGlzIGVuY29kZXIgaXMgdXNpbmcsIElO VEZfTU9ERV9OT05FIGlmIHVudXNlZAogICogQG5lZWRzX2NkbToJRW5jb2RlciByZXF1ZXN0cyBh IENETSBiYXNlZCBvbiBwaXhlbCBmb3JtYXQgY29udmVyc2lvbiBuZWVkcwotICogQGRpc3BsYXlf bnVtX29mX2hfdGlsZXM6IE51bWJlciBvZiBob3Jpem9udGFsIHRpbGVzIGluIGNhc2Ugb2Ygc3Bs aXQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UKLSAqIEB0b3BvbG9neTog ICBUb3BvbG9neSBvZiB0aGUgZGlzcGxheQogICovCiBzdHJ1Y3QgZHB1X2VuY29kZXJfaHdfcmVz b3VyY2VzIHsKIAllbnVtIGRwdV9pbnRmX21vZGUgaW50ZnNbSU5URl9NQVhdOwogCWJvb2wgbmVl ZHNfY2RtOwotCXUzMiBkaXNwbGF5X251bV9vZl9oX3RpbGVzOwogfTsKIAogLyoqCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmggYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmgKaW5kZXggMTU0 NTliZS4uZTZiYzI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXJfcGh5cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyX3BoeXMuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImRwdV9od190b3Au aCIKICNpbmNsdWRlICJkcHVfaHdfY2RtLmgiCiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKKyNp bmNsdWRlICJkcHVfY3J0Yy5oIgogCiAjZGVmaW5lIERQVV9FTkNPREVSX05BTUVfTUFYCTE2CiAK QEAgLTIxOSw3ICsyMjAsNiBAQCBzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxIHsKICAqIEBzcGxpdF9y b2xlOgkJUm9sZSB0byBwbGF5IGluIGEgc3BsaXQtcGFuZWwgY29uZmlndXJhdGlvbgogICogQGlu dGZfbW9kZToJCUludGVyZmFjZSBtb2RlCiAgKiBAaW50Zl9pZHg6CQlJbnRlcmZhY2UgaW5kZXgg b24gZHB1IGhhcmR3YXJlCi0gKiBAdG9wb2xvZ3lfbmFtZToJdG9wb2xvZ3kgc2VsZWN0ZWQgZm9y IHRoZSBkaXNwbGF5CiAgKiBAZW5jX3NwaW5sb2NrOglWaXJ0dWFsLUVuY29kZXItV2lkZSBTcGlu IExvY2sgZm9yIElSUSBwdXJwb3NlcwogICogQGVuYWJsZV9zdGF0ZToJRW5hYmxlIHN0YXRlIHRy YWNraW5nCiAgKiBAdmJsYW5rX3JlZmNvdW50OglSZWZlcmVuY2UgY291bnQgb2YgdmJsYW5rIHJl cXVlc3QKQEAgLTI0OSw3ICsyNDksNiBAQCBzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyB7CiAJZW51 bSBkcHVfZW5jX3NwbGl0X3JvbGUgc3BsaXRfcm9sZTsKIAllbnVtIGRwdV9pbnRmX21vZGUgaW50 Zl9tb2RlOwogCWVudW0gZHB1X2ludGYgaW50Zl9pZHg7Ci0JZW51bSBkcHVfcm1fdG9wb2xvZ3lf bmFtZSB0b3BvbG9neV9uYW1lOwogCXNwaW5sb2NrX3QgKmVuY19zcGlubG9jazsKIAllbnVtIGRw dV9lbmNfZW5hYmxlX3N0YXRlIGVuYWJsZV9zdGF0ZTsKIAlhdG9taWNfdCB2YmxhbmtfcmVmY291 bnQ7CkBAIC0zODEsMTEgKzM4MCwxNSBAQCBpbnQgZHB1X2VuY29kZXJfaGVscGVyX3dhaXRfZXZl bnRfdGltZW91dCgKIHN0YXRpYyBpbmxpbmUgZW51bSBkcHVfM2RfYmxlbmRfbW9kZSBkcHVfZW5j b2Rlcl9oZWxwZXJfZ2V0XzNkX2JsZW5kX21vZGUoCiAJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz ICpwaHlzX2VuYykKIHsKKwlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmRwdV9jc3RhdGU7CisKIAlp ZiAoIXBoeXNfZW5jIHx8IHBoeXNfZW5jLT5lbmFibGVfc3RhdGUgPT0gRFBVX0VOQ19ESVNBQkxJ TkcpCiAJCXJldHVybiBCTEVORF8zRF9OT05FOwogCisJZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRj X3N0YXRlKHBoeXNfZW5jLT5wYXJlbnQtPmNydGMtPnN0YXRlKTsKKwogCWlmIChwaHlzX2VuYy0+ c3BsaXRfcm9sZSA9PSBFTkNfUk9MRV9TT0xPICYmCi0JICAgIHBoeXNfZW5jLT50b3BvbG9neV9u YW1lID09IERQVV9STV9UT1BPTE9HWV9EVUFMUElQRV8zRE1FUkdFKQorCQkoZHB1X2NzdGF0ZS0+ bnVtX21peGVycyA9PSAyKSkKIAkJcmV0dXJuIEJMRU5EXzNEX0hfUk9XX0lOVDsKIAogCXJldHVy biBCTEVORF8zRF9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2VuY29kZXJfcGh5c19jbWQuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9lbmNvZGVyX3BoeXNfY21kLmMKaW5kZXggMzg4ZGUzOC4uZmU2ZTkxMSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c19jbWQuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX2NtZC5j CkBAIC0xOTUsOSArMTk1LDYgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c19jbWRfbW9k ZV9zZXQoCiB7CiAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfY21kICpjbWRfZW5jID0KIAkJdG9f ZHB1X2VuY29kZXJfcGh5c19jbWQocGh5c19lbmMpOwotCXN0cnVjdCBkcHVfcm0gKnJtID0gJnBo eXNfZW5jLT5kcHVfa21zLT5ybTsKLQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKLQlpbnQg aSwgaW5zdGFuY2U7CiAKIAlpZiAoIXBoeXNfZW5jIHx8ICFtb2RlIHx8ICFhZGpfbW9kZSkgewog CQlEUFVfRVJST1IoImludmFsaWQgYXJnc1xuIik7CkBAIC0yMDUsMjMgKzIwMiw4IEBAIHN0YXRp YyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfY21kX21vZGVfc2V0KAogCX0KIAlwaHlzX2VuYy0+Y2Fj aGVkX21vZGUgPSAqYWRqX21vZGU7CiAJRFBVX0RFQlVHX0NNREVOQyhjbWRfZW5jLCAiY2FjaGlu ZyBtb2RlOlxuIik7Ci0JZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShhZGpfbW9kZSk7Ci0K LQlpbnN0YW5jZSA9IHBoeXNfZW5jLT5zcGxpdF9yb2xlID09IEVOQ19ST0xFX1NMQVZFID8gMSA6 IDA7CiAKLQkvKiBSZXRyaWV2ZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBIVyBSZXNvdXJjZXMuIFNo b3VsZG4ndCBmYWlsICovCi0JZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgcGh5c19lbmMtPnBh cmVudC0+YmFzZS5pZCwgRFBVX0hXX0JMS19DVEwpOwotCWZvciAoaSA9IDA7IGkgPD0gaW5zdGFu Y2U7IGkrKykgewotCQlpZiAoZHB1X3JtX2dldF9odyhybSwgJml0ZXIpKQotCQkJcGh5c19lbmMt Pmh3X2N0bCA9IChzdHJ1Y3QgZHB1X2h3X2N0bCAqKWl0ZXIuaHc7Ci0JfQotCi0JaWYgKElTX0VS Ul9PUl9OVUxMKHBoeXNfZW5jLT5od19jdGwpKSB7Ci0JCURQVV9FUlJPUl9DTURFTkMoY21kX2Vu YywgImZhaWxlZCB0byBpbml0IGN0bDogJWxkXG4iLAotCQkJCVBUUl9FUlIocGh5c19lbmMtPmh3 X2N0bCkpOwotCQlwaHlzX2VuYy0+aHdfY3RsID0gTlVMTDsKLQkJcmV0dXJuOwotCX0KKwlkcm1f bW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKGFkal9tb2RlKTsKIAogCV9kcHVfZW5jb2Rlcl9waHlz X2NtZF9zZXR1cF9pcnFfaHdfaWR4KHBoeXNfZW5jKTsKIH0KQEAgLTgzMCw3ICs4MTIsNiBAQCBz dHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqZHB1X2VuY29kZXJfcGh5c19jbWRfaW5pdCgKIHsKIAlz dHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMgPSBOVUxMOwogCXN0cnVjdCBkcHVfZW5j b2Rlcl9waHlzX2NtZCAqY21kX2VuYyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9od19tZHAgKmh3X21k cDsKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxICppcnE7CiAJaW50IGksIHJldCA9IDA7CiAKQEAg LTg0MywxNCArODI0LDcgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmRwdV9lbmNvZGVyX3Bo eXNfY21kX2luaXQoCiAJCWdvdG8gZmFpbDsKIAl9CiAJcGh5c19lbmMgPSAmY21kX2VuYy0+YmFz ZTsKLQotCWh3X21kcCA9IGRwdV9ybV9nZXRfbWRwKCZwLT5kcHVfa21zLT5ybSk7Ci0JaWYgKElT X0VSUl9PUl9OVUxMKGh3X21kcCkpIHsKLQkJcmV0ID0gUFRSX0VSUihod19tZHApOwotCQlEUFVf RVJST1IoImZhaWxlZCB0byBnZXQgbWRwdG9wXG4iKTsKLQkJZ290byBmYWlsX21kcF9pbml0Owot CX0KLQlwaHlzX2VuYy0+aHdfbWRwdG9wID0gaHdfbWRwOworCXBoeXNfZW5jLT5od19tZHB0b3Ag PSBwLT5kcHVfa21zLT5od19tZHA7CiAJcGh5c19lbmMtPmludGZfaWR4ID0gcC0+aW50Zl9pZHg7 CiAKIAlkcHVfZW5jb2Rlcl9waHlzX2NtZF9pbml0X29wcygmcGh5c19lbmMtPm9wcyk7CkBAIC05 MDUsOCArODc5LDYgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmRwdV9lbmNvZGVyX3BoeXNf Y21kX2luaXQoCiAKIAlyZXR1cm4gcGh5c19lbmM7CiAKLWZhaWxfbWRwX2luaXQ6Ci0Ja2ZyZWUo Y21kX2VuYyk7CiBmYWlsOgogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYwppbmRleCA3 M2U1OTM4Li5mMWVkNDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMKQEAgLTM1NSwxMyArMzU1LDE0IEBAIHN0YXRpYyB2 b2lkIGRwdV9lbmNvZGVyX3BoeXNfdmlkX3VuZGVycnVuX2lycSh2b2lkICphcmcsIGludCBpcnFf aWR4KQogCiBzdGF0aWMgYm9vbCBfZHB1X2VuY29kZXJfcGh5c19pc19kdWFsX2N0bChzdHJ1Y3Qg ZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMpCiB7CisJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpk cHVfY3N0YXRlOworCiAJaWYgKCFwaHlzX2VuYykKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKHBo eXNfZW5jLT50b3BvbG9neV9uYW1lID09IERQVV9STV9UT1BPTE9HWV9EVUFMUElQRSkKLQkJcmV0 dXJuIHRydWU7CisJZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHBoeXNfZW5jLT5wYXJl bnQtPmNydGMtPnN0YXRlKTsKIAotCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gKGRwdV9jc3RhdGUt Pm51bV9jdGxzID4gMSk7CiB9CiAKIHN0YXRpYyBib29sIGRwdV9lbmNvZGVyX3BoeXNfdmlkX25l ZWRzX3NpbmdsZV9mbHVzaCgKQEAgLTM5NSw5ICszOTYsNiBAQCBzdGF0aWMgdm9pZCBkcHVfZW5j b2Rlcl9waHlzX3ZpZF9tb2RlX3NldCgKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUs CiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGpfbW9kZSkKIHsKLQlzdHJ1Y3QgZHB1X3Jt ICpybTsKLQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKLQlpbnQgaSwgaW5zdGFuY2U7CiAJ c3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfdmlkICp2aWRfZW5jOwogCiAJaWYgKCFwaHlzX2VuYyB8 fCAhcGh5c19lbmMtPmRwdV9rbXMpIHsKQEAgLTQwNSw3ICs0MDMsNiBAQCBzdGF0aWMgdm9pZCBk cHVfZW5jb2Rlcl9waHlzX3ZpZF9tb2RlX3NldCgKIAkJcmV0dXJuOwogCX0KIAotCXJtID0gJnBo eXNfZW5jLT5kcHVfa21zLT5ybTsKIAl2aWRfZW5jID0gdG9fZHB1X2VuY29kZXJfcGh5c192aWQo cGh5c19lbmMpOwogCiAJaWYgKGFkal9tb2RlKSB7CkBAIC00MTQsMjEgKzQxMSw2IEBAIHN0YXRp YyB2b2lkIGRwdV9lbmNvZGVyX3BoeXNfdmlkX21vZGVfc2V0KAogCQlEUFVfREVCVUdfVklERU5D KHZpZF9lbmMsICJjYWNoaW5nIG1vZGU6XG4iKTsKIAl9CiAKLQlpbnN0YW5jZSA9IHBoeXNfZW5j LT5zcGxpdF9yb2xlID09IEVOQ19ST0xFX1NMQVZFID8gMSA6IDA7Ci0KLQkvKiBSZXRyaWV2ZSBw cmV2aW91c2x5IGFsbG9jYXRlZCBIVyBSZXNvdXJjZXMuIFNob3VsZG4ndCBmYWlsICovCi0JZHB1 X3JtX2luaXRfaHdfaXRlcigmaXRlciwgcGh5c19lbmMtPnBhcmVudC0+YmFzZS5pZCwgRFBVX0hX X0JMS19DVEwpOwotCWZvciAoaSA9IDA7IGkgPD0gaW5zdGFuY2U7IGkrKykgewotCQlpZiAoZHB1 X3JtX2dldF9odyhybSwgJml0ZXIpKQotCQkJcGh5c19lbmMtPmh3X2N0bCA9IChzdHJ1Y3QgZHB1 X2h3X2N0bCAqKWl0ZXIuaHc7Ci0JfQotCWlmIChJU19FUlJfT1JfTlVMTChwaHlzX2VuYy0+aHdf Y3RsKSkgewotCQlEUFVfRVJST1JfVklERU5DKHZpZF9lbmMsICJmYWlsZWQgdG8gaW5pdCBjdGws ICVsZFxuIiwKLQkJCQlQVFJfRVJSKHBoeXNfZW5jLT5od19jdGwpKTsKLQkJcGh5c19lbmMtPmh3 X2N0bCA9IE5VTEw7Ci0JCXJldHVybjsKLQl9Ci0KIAlfZHB1X2VuY29kZXJfcGh5c192aWRfc2V0 dXBfaXJxX2h3X2lkeChwaHlzX2VuYyk7CiB9CiAKQEAgLTQ4NSwyMiArNDY3LDI3IEBAIHN0YXRp YyBpbnQgZHB1X2VuY29kZXJfcGh5c192aWRfY29udHJvbF92YmxhbmtfaXJxKAogCiBzdGF0aWMg dm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9lbmFibGUoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMg KnBoeXNfZW5jKQogewotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IGRw dV9lbmNvZGVyX3BoeXNfdmlkICp2aWRfZW5jOwotCXN0cnVjdCBkcHVfaHdfaW50ZiAqaW50ZjsK IAlzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsOwotCXUzMiBmbHVzaF9tYXNrID0gMDsKKwlzdHJ1Y3Qg ZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKKwl1MzIgaSwgZmx1c2hfbWFzayA9IDA7CiAKIAlpZiAo IXBoeXNfZW5jIHx8ICFwaHlzX2VuYy0+cGFyZW50IHx8ICFwaHlzX2VuYy0+cGFyZW50LT5kZXYg fHwKIAkJCSFwaHlzX2VuYy0+cGFyZW50LT5kZXYtPmRldl9wcml2YXRlKSB7CiAJCURQVV9FUlJP UigiaW52YWxpZCBlbmNvZGVyL2RldmljZVxuIik7CiAJCXJldHVybjsKIAl9Ci0JcHJpdiA9IHBo eXNfZW5jLT5wYXJlbnQtPmRldi0+ZGV2X3ByaXZhdGU7Ci0KIAl2aWRfZW5jID0gdG9fZHB1X2Vu Y29kZXJfcGh5c192aWQocGh5c19lbmMpOwotCWludGYgPSB2aWRfZW5jLT5od19pbnRmOwogCWN0 bCA9IHBoeXNfZW5jLT5od19jdGw7CisKKwljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShwaHlz X2VuYy0+cGFyZW50LT5jcnRjLT5zdGF0ZSk7CisJZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVt X2ludGZzOyBpKyspCXsKKwkJc3RydWN0IGRwdV9od19pbnRmICpod19pbnRmID0gY3N0YXRlLT5o d19pbnRmc1tpXTsKKworCQlpZiAoaHdfaW50ZiAmJiAoaHdfaW50Zi0+aWR4ID09IHBoeXNfZW5j LT5pbnRmX2lkeCkpCisJCQl2aWRfZW5jLT5od19pbnRmID0gaHdfaW50ZjsKKwl9CisKIAlpZiAo IXZpZF9lbmMtPmh3X2ludGYgfHwgIXBoeXNfZW5jLT5od19jdGwpIHsKIAkJRFBVX0VSUk9SKCJp bnZhbGlkIGh3X2ludGYgJWQgaHdfY3RsICVkXG4iLAogCQkJCXZpZF9lbmMtPmh3X2ludGYgIT0g MCwgcGh5c19lbmMtPmh3X2N0bCAhPSAwKTsKQEAgLTUyNSw3ICs1MTIsNyBAQCBzdGF0aWMgdm9p ZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9lbmFibGUoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBo eXNfZW5jKQogCQkhZHB1X2VuY29kZXJfcGh5c192aWRfaXNfbWFzdGVyKHBoeXNfZW5jKSkKIAkJ Z290byBza2lwX2ZsdXNoOwogCi0JY3RsLT5vcHMuZ2V0X2JpdG1hc2tfaW50ZihjdGwsICZmbHVz aF9tYXNrLCBpbnRmLT5pZHgpOworCWN0bC0+b3BzLmdldF9iaXRtYXNrX2ludGYoY3RsLCAmZmx1 c2hfbWFzaywgdmlkX2VuYy0+aHdfaW50Zi0+aWR4KTsKIAljdGwtPm9wcy51cGRhdGVfcGVuZGlu Z19mbHVzaChjdGwsIGZsdXNoX21hc2spOwogCiBza2lwX2ZsdXNoOgpAQCAtNTU2LDIyICs1NDMs MTMgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRfZ2V0X2h3X3Jlc291cmNlcygK IAkJc3RydWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyAqaHdfcmVzLAogCQlzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKIHsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5 c192aWQgKnZpZF9lbmM7Ci0KIAlpZiAoIXBoeXNfZW5jIHx8ICFod19yZXMpIHsKIAkJRFBVX0VS Uk9SKCJpbnZhbGlkIGFyZyhzKSwgZW5jICVkIGh3X3JlcyAlZCBjb25uX3N0YXRlICVkXG4iLAog CQkJCXBoeXNfZW5jICE9IDAsIGh3X3JlcyAhPSAwLCBjb25uX3N0YXRlICE9IDApOwogCQlyZXR1 cm47CiAJfQogCi0JdmlkX2VuYyA9IHRvX2RwdV9lbmNvZGVyX3BoeXNfdmlkKHBoeXNfZW5jKTsK LQlpZiAoIXZpZF9lbmMtPmh3X2ludGYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZyhzKSwg aHdfaW50ZlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlEUFVfREVCVUdfVklERU5DKHZpZF9lbmMs ICJcbiIpOwotCWh3X3Jlcy0+aW50ZnNbdmlkX2VuYy0+aHdfaW50Zi0+aWR4IC0gSU5URl8wXSA9 IElOVEZfTU9ERV9WSURFTzsKKwlod19yZXMtPmludGZzW3BoeXNfZW5jLT5pbnRmX2lkeCAtIElO VEZfMF0gPSBJTlRGX01PREVfVklERU87CiB9CiAKIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX3Bo eXNfdmlkX3dhaXRfZm9yX3ZibGFuaygKQEAgLTgzNCw4ICs4MTIsNiBAQCBzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5cyAqZHB1X2VuY29kZXJfcGh5c192aWRfaW5pdCgKIHsKIAlzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5cyAqcGh5c19lbmMgPSBOVUxMOwogCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX3Zp ZCAqdmlkX2VuYyA9IE5VTEw7Ci0Jc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXI7Ci0Jc3RydWN0 IGRwdV9od19tZHAgKmh3X21kcDsKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfaXJxICppcnE7CiAJaW50 IGksIHJldCA9IDA7CiAKQEAgLTg1MiwzNSArODI4LDkgQEAgc3RydWN0IGRwdV9lbmNvZGVyX3Bo eXMgKmRwdV9lbmNvZGVyX3BoeXNfdmlkX2luaXQoCiAKIAlwaHlzX2VuYyA9ICZ2aWRfZW5jLT5i YXNlOwogCi0JaHdfbWRwID0gZHB1X3JtX2dldF9tZHAoJnAtPmRwdV9rbXMtPnJtKTsKLQlpZiAo SVNfRVJSX09SX05VTEwoaHdfbWRwKSkgewotCQlyZXQgPSBQVFJfRVJSKGh3X21kcCk7Ci0JCURQ VV9FUlJPUigiZmFpbGVkIHRvIGdldCBtZHB0b3BcbiIpOwotCQlnb3RvIGZhaWw7Ci0JfQotCXBo eXNfZW5jLT5od19tZHB0b3AgPSBod19tZHA7CisJcGh5c19lbmMtPmh3X21kcHRvcCA9IHAtPmRw dV9rbXMtPmh3X21kcDsKIAlwaHlzX2VuYy0+aW50Zl9pZHggPSBwLT5pbnRmX2lkeDsKIAotCS8q KgotCSAqIGh3X2ludGYgcmVzb3VyY2UgcGVybWFuZW50bHkgYXNzaWduZWQgdG8gdGhpcyBlbmNv ZGVyCi0JICogT3RoZXIgcmVzb3VyY2VzIGFsbG9jYXRlZCBhdCBhdG9taWMgY29tbWl0IHRpbWUg YnkgdXNlIGNhc2UKLQkgKi8KLQlkcHVfcm1faW5pdF9od19pdGVyKCZpdGVyLCAwLCBEUFVfSFdf QkxLX0lOVEYpOwotCXdoaWxlIChkcHVfcm1fZ2V0X2h3KCZwLT5kcHVfa21zLT5ybSwgJml0ZXIp KSB7Ci0JCXN0cnVjdCBkcHVfaHdfaW50ZiAqaHdfaW50ZiA9IChzdHJ1Y3QgZHB1X2h3X2ludGYg KilpdGVyLmh3OwotCi0JCWlmIChod19pbnRmLT5pZHggPT0gcC0+aW50Zl9pZHgpIHsKLQkJCXZp ZF9lbmMtPmh3X2ludGYgPSBod19pbnRmOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIXZp ZF9lbmMtPmh3X2ludGYpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJRFBVX0VSUk9SKCJmYWlsZWQg dG8gZ2V0IGh3X2ludGZcbiIpOwotCQlnb3RvIGZhaWw7Ci0JfQotCiAJRFBVX0RFQlVHX1ZJREVO Qyh2aWRfZW5jLCAiXG4iKTsKIAogCWRwdV9lbmNvZGVyX3BoeXNfdmlkX2luaXRfb3BzKCZwaHlz X2VuYy0+b3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYwppbmRleCBh NGFiNzgzLi5kNjcwZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5j CkBAIC0xMDA1LDYgKzEwMDUsNyBAQCBzdGF0aWMgbG9uZyBkcHVfa21zX3JvdW5kX3BpeGNsayhz dHJ1Y3QgbXNtX2ttcyAqa21zLCB1bnNpZ25lZCBsb25nIHJhdGUsCiBzdGF0aWMgdm9pZCBfZHB1 X2ttc19od19kZXN0cm95KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQogewogCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXY7CisJc3RydWN0IGRwdV9wcml2YXRlX3N0YXRlICpkcHVfcHJpdl9zdGF0ZTsK IAlpbnQgaTsKIAogCWRldiA9IGRwdV9rbXMtPmRldjsKQEAgLTEwMzksOSArMTA0MCwxMiBAQCBz dGF0aWMgdm9pZCBfZHB1X2ttc19od19kZXN0cm95KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQog CQl9CiAJfQogCi0JaWYgKGRwdV9rbXMtPnJtX2luaXQpCi0JCWRwdV9ybV9kZXN0cm95KCZkcHVf a21zLT5ybSk7Ci0JZHB1X2ttcy0+cm1faW5pdCA9IGZhbHNlOworCWRwdV9wcml2X3N0YXRlID0g dG9fZHB1X3ByaXZhdGVfc3RhdGUoZHB1X2ttcy0+cHJpdl9vYmouc3RhdGUpOworCWlmIChkcHVf cHJpdl9zdGF0ZSkgeworCQlpZiAoZHB1X3ByaXZfc3RhdGUtPnJtX2luaXQpCisJCQlkcHVfcm1f ZGVzdHJveSgmZHB1X3ByaXZfc3RhdGUtPnJtKTsKKwkJZHB1X3ByaXZfc3RhdGUtPnJtX2luaXQg PSBmYWxzZTsKKwl9CiAKIAlpZiAoZHB1X2ttcy0+Y2F0YWxvZykKIAkJZHB1X2h3X2NhdGFsb2df ZGVpbml0KGRwdV9rbXMtPmNhdGFsb2cpOwpAQCAtMTM5MSw2ICsxMzk1LDcgQEAgc3RhdGljIGlu dCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAlzdHJ1Y3QgZHB1X2ttcyAq ZHB1X2ttczsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwogCXN0cnVjdCBtc21fZHJtX3ByaXZh dGUgKnByaXY7CisJc3RydWN0IGRwdV9wcml2YXRlX3N0YXRlICpkcHVfcHJpdl9zdGF0ZTsKIAlp bnQgaSwgcmMgPSAtRUlOVkFMOwogCiAJaWYgKCFrbXMpIHsKQEAgLTE1MTIsMTYgKzE1MTcsMTYg QEAgc3RhdGljIGludCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAkJZ290 byBwb3dlcl9lcnJvcjsKIAl9CiAKLQlyYyA9IGRwdV9ybV9pbml0KCZkcHVfa21zLT5ybSwgZHB1 X2ttcy0+Y2F0YWxvZywgZHB1X2ttcy0+bW1pbywKLQkJCWRwdV9rbXMtPmRldik7CisJZHB1X3By aXZfc3RhdGUgPSB0b19kcHVfcHJpdmF0ZV9zdGF0ZShkcHVfa21zLT5wcml2X29iai5zdGF0ZSk7 CisJcmMgPSBkcHVfcm1faW5pdCgmZHB1X3ByaXZfc3RhdGUtPnJtLCBkcHVfa21zLT5jYXRhbG9n LCBkcHVfa21zLT5tbWlvKTsKIAlpZiAocmMpIHsKIAkJRFBVX0VSUk9SKCJybSBpbml0IGZhaWxl ZDogJWRcbiIsIHJjKTsKIAkJZ290byBwb3dlcl9lcnJvcjsKIAl9CiAKLQlkcHVfa21zLT5ybV9p bml0ID0gdHJ1ZTsKKwlkcHVfcHJpdl9zdGF0ZS0+cm1faW5pdCA9IHRydWU7CiAKLQlkcHVfa21z LT5od19tZHAgPSBkcHVfcm1fZ2V0X21kcCgmZHB1X2ttcy0+cm0pOworCWRwdV9rbXMtPmh3X21k cCA9IGRwdV9ybV9nZXRfbWRwKCZkcHVfcHJpdl9zdGF0ZS0+cm0pOwogCWlmIChJU19FUlJfT1Jf TlVMTChkcHVfa21zLT5od19tZHApKSB7CiAJCXJjID0gUFRSX0VSUihkcHVfa21zLT5od19tZHAp OwogCQlpZiAoIWRwdV9rbXMtPmh3X21kcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9rbXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9rbXMuaAppbmRleCA5MjRkODk2Ny4uMWU0YjViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9rbXMuaApAQCAtMzIsMTAgKzMyLDEwIEBACiAjaW5jbHVkZSAiZHB1X2h3X2xt LmgiCiAjaW5jbHVkZSAiZHB1X2h3X2ludGVycnVwdHMuaCIKICNpbmNsdWRlICJkcHVfaHdfdG9w LmgiCi0jaW5jbHVkZSAiZHB1X3JtLmgiCiAjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgog I2luY2x1ZGUgImRwdV9pcnEuaCIKICNpbmNsdWRlICJkcHVfY29yZV9wZXJmLmgiCisjaW5jbHVk ZSAiZHB1X3JtLmgiCiAKICNkZWZpbmUgRFJNSUQoeCkgKCh4KSA/ICh4KS0+YmFzZS5pZCA6IC0x KQogCkBAIC0xODQsOSArMTg0LDYgQEAgc3RydWN0IGRwdV9rbXMgewogCXN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdXNwZW5kX3N0YXRlOwogCWJvb2wgc3VzcGVuZF9ibG9jazsKIAotCXN0cnVj dCBkcHVfcm0gcm07Ci0JYm9vbCBybV9pbml0OwotCiAJc3RydWN0IGRwdV9od192YmlmICpod192 YmlmW1ZCSUZfTUFYXTsKIAlzdHJ1Y3QgZHB1X2h3X21kcCAqaHdfbWRwOwogCkBAIC0yMDIsNiAr MTk5LDkgQEAgc3RydWN0IGRwdV9rbXMgewogCiBzdHJ1Y3QgZHB1X3ByaXZhdGVfc3RhdGUgewog CXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOworCisJc3RydWN0IGRwdV9ybSBybTsKKwli b29sIHJtX2luaXQ7CiB9OwogCiBzdHJ1Y3QgdnN5bmNfaW5mbyB7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9ybS5jCmluZGV4IGVmZjMxNmIuLjAxOGQwMWEgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCkBAIC0yMCwxMzIgKzIwLDU5IEBACiAjaW5jbHVkZSAi ZHB1X2h3X3Bpbmdwb25nLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2ludGYuaCIKICNpbmNsdWRlICJk cHVfZW5jb2Rlci5oIgotCi0jZGVmaW5lIFJFU0VSVkVEX0JZX09USEVSKGgsIHIpIFwKLQkoKGgp LT5yc3ZwICYmICgoaCktPnJzdnAtPmVuY19pZCAhPSAociktPmVuY19pZCkpCi0KLSNkZWZpbmUg Uk1fUlFfTE9DSyhyKSAoKHIpLT50b3BfY3RybCAmIEJJVChEUFVfUk1fVE9QQ1RMX1JFU0VSVkVf TE9DSykpCi0jZGVmaW5lIFJNX1JRX0NMRUFSKHIpICgociktPnRvcF9jdHJsICYgQklUKERQVV9S TV9UT1BDVExfUkVTRVJWRV9DTEVBUikpCi0jZGVmaW5lIFJNX1JRX0RTKHIpICgociktPnRvcF9j dHJsICYgQklUKERQVV9STV9UT1BDVExfRFMpKQotI2RlZmluZSBSTV9JU19UT1BPTE9HWV9NQVRD SCh0LCByKSAoKHQpLm51bV9sbSA9PSAocikubnVtX2xtICYmIFwKLQkJCQkodCkubnVtX2NvbXBf ZW5jID09IChyKS5udW1fZW5jICYmIFwKLQkJCQkodCkubnVtX2ludGYgPT0gKHIpLm51bV9pbnRm KQotCi1zdHJ1Y3QgZHB1X3JtX3RvcG9sb2d5X2RlZiB7Ci0JZW51bSBkcHVfcm1fdG9wb2xvZ3lf bmFtZSB0b3BfbmFtZTsKLQlpbnQgbnVtX2xtOwotCWludCBudW1fY29tcF9lbmM7Ci0JaW50IG51 bV9pbnRmOwotCWludCBudW1fY3RsOwotCWludCBuZWVkc19zcGxpdF9kaXNwbGF5OwotfTsKLQot c3RhdGljIGNvbnN0IHN0cnVjdCBkcHVfcm1fdG9wb2xvZ3lfZGVmIGdfdG9wX3RhYmxlW10gPSB7 Ci0JeyAgIERQVV9STV9UT1BPTE9HWV9OT05FLCAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwg ZmFsc2UgfSwKLQl7ICAgRFBVX1JNX1RPUE9MT0dZX1NJTkdMRVBJUEUsICAgICAgICAgICAxLCAw LCAxLCAxLCBmYWxzZSB9LAotCXsgICBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEUsICAgICAgICAg ICAgIDIsIDAsIDIsIDIsIHRydWUgIH0sCi0JeyAgIERQVV9STV9UT1BPTE9HWV9EVUFMUElQRV8z RE1FUkdFLCAgICAgMiwgMCwgMSwgMSwgZmFsc2UgfSwKLX07Ci0KLS8qKgotICogc3RydWN0IGRw dV9ybV9yZXF1aXJlbWVudHMgLSBSZXNlcnZhdGlvbiByZXF1aXJlbWVudHMgcGFyYW1ldGVyIGJ1 bmRsZQotICogQHRvcF9jdHJsOiAgdG9wb2xvZ3kgY29udHJvbCBwcmVmZXJlbmNlIGZyb20ga2Vy bmVsIGNsaWVudAotICogQHRvcDogICAgICAgc2VsZWN0ZWQgdG9wb2xvZ3kgZm9yIHRoZSBkaXNw bGF5Ci0gKiBAaHdfcmVzOgkgICBIYXJkd2FyZSByZXNvdXJjZXMgcmVxdWlyZWQgYXMgcmVwb3J0 ZWQgYnkgdGhlIGVuY29kZXJzCi0gKi8KLXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzIHsKLQl1 aW50NjRfdCB0b3BfY3RybDsKLQljb25zdCBzdHJ1Y3QgZHB1X3JtX3RvcG9sb2d5X2RlZiAqdG9w b2xvZ3k7Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyBod19yZXM7Ci19OwotCi0v KioKLSAqIHN0cnVjdCBkcHVfcm1fcnN2cCAtIFVzZSBDYXNlIFJlc2VydmF0aW9uIHRhZ2dpbmcg c3RydWN0dXJlCi0gKglVc2VkIHRvIHRhZyBIVyBibG9ja3MgYXMgcmVzZXJ2ZWQgYnkgYSBDUlRD LT5FbmNvZGVyLT5Db25uZWN0b3IgY2hhaW4KLSAqCUJ5IHVzaW5nIGFzIGEgdGFnLCByYXRoZXIg dGhhbiBsaXN0cyBvZiBwb2ludGVycyB0byBIVyBibG9ja3MgdXNlZAotICoJd2UgY2FuIGF2b2lk IHNvbWUgbGlzdCBtYW5hZ2VtZW50IHNpbmNlIHdlIGRvbid0IGtub3cgaG93IG1hbnkgYmxvY2tz Ci0gKglvZiBlYWNoIHR5cGUgYSBnaXZlbiB1c2UgY2FzZSBtYXkgcmVxdWlyZS4KLSAqIEBsaXN0 OglMaXN0IGhlYWQgZm9yIGxpc3Qgb2YgYWxsIHJlc2VydmF0aW9ucwotICogQHNlcToJR2xvYmFs IFJTVlAgc2VxdWVuY2UgbnVtYmVyIGZvciBkZWJ1Z2dpbmcsIGVzcGVjaWFsbHkgZm9yCi0gKgkJ ZGlmZmVyZW50aWF0aW5nIGRpZmZlcmVuY3QgYWxsb2NhdGlvbnMgZm9yIHNhbWUgZW5jb2Rlci4K LSAqIEBlbmNfaWQ6CVJlc2VydmF0aW9ucyBhcmUgdHJhY2tlZCBieSBFbmNvZGVyIERSTSBvYmpl Y3QgSUQuCi0gKgkJQ1JUQ3MgbWF5IGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBFbmNvZGVycy4K LSAqCQlBbiBlbmNvZGVyIG9yIGNvbm5lY3RvciBpZCBpZGVudGlmaWVzIHRoZSBkaXNwbGF5IHBh dGguCi0gKiBAdG9wb2xvZ3kJRFJNPC0+SFcgdG9wb2xvZ3kgdXNlIGNhc2UKLSAqLwotc3RydWN0 IGRwdV9ybV9yc3ZwIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JdWludDMyX3Qgc2VxOwot CXVpbnQzMl90IGVuY19pZDsKLQllbnVtIGRwdV9ybV90b3BvbG9neV9uYW1lIHRvcG9sb2d5Owot fTsKKyNpbmNsdWRlICJkcHVfcm0uaCIKIAogLyoqCiAgKiBzdHJ1Y3QgZHB1X3JtX2h3X2JsayAt IGhhcmR3YXJlIGJsb2NrIHRyYWNraW5nIGxpc3QgbWVtYmVyCi0gKiBAbGlzdDoJTGlzdCBoZWFk IGZvciBsaXN0IG9mIGFsbCBoYXJkd2FyZSBibG9ja3MgdHJhY2tpbmcgaXRlbXMKLSAqIEByc3Zw OglQb2ludGVyIHRvIHVzZSBjYXNlIHJlc2VydmF0aW9uIGlmIHJlc2VydmVkIGJ5IGEgY2xpZW50 Ci0gKiBAcnN2cF9ueHQ6CVRlbXBvcmFyeSBwb2ludGVyIHVzZWQgZHVyaW5nIHJlc2VydmF0aW9u IHRvIHRoZSBpbmNvbWluZwotICoJCXJlcXVlc3QuIFdpbGwgYmUgc3dhcHBlZCBpbnRvIHJzdnAg aWYgcHJvcG9zYWwgaXMgYWNjZXB0ZWQKICAqIEB0eXBlOglUeXBlIG9mIGhhcmR3YXJlIGJsb2Nr IHRoaXMgc3RydWN0dXJlIHRyYWNrcworICogQGRybV9pZDoJRFJNIGNvbXBvbmVudCBJRCBhc3Nv Y2lhdGVkIHdpdGggdGhlIEhXIGJsb2NrCiAgKiBAaWQ6CQlIYXJkd2FyZSBJRCBudW1iZXIsIHdp dGhpbiBpdCdzIG93biBzcGFjZSwgaWUuIExNX1gKLSAqIEBjYXRhbG9nOglQb2ludGVyIHRvIHRo ZSBoYXJkd2FyZSBjYXRhbG9nIGVudHJ5IGZvciB0aGlzIGJsb2NrCiAgKiBAaHc6CQlQb2ludGVy IHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlciBhY2Nlc3Mgb2JqZWN0IGZvciB0aGlzIGJsb2NrCiAg Ki8KIHN0cnVjdCBkcHVfcm1faHdfYmxrIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3Ry dWN0IGRwdV9ybV9yc3ZwICpyc3ZwOwotCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cF9ueHQ7CiAJ ZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZTsKIAl1aW50MzJfdCBpZDsKKwl1aW50MzJfdCBybV9p ZDsKIAlzdHJ1Y3QgZHB1X2h3X2JsayAqaHc7CiB9OwogCi0vKioKLSAqIGRwdV9ybV9kYmdfcnN2 cF9zdGFnZSAtIGVudW0gb2Ygc3RlcHMgaW4gbWFraW5nIHJlc2VydmF0aW9uIGZvciBldmVudCBs b2dnaW5nCi0gKi8KLWVudW0gZHB1X3JtX2RiZ19yc3ZwX3N0YWdlIHsKLQlEUFVfUk1fU1RBR0Vf QkVHSU4sCi0JRFBVX1JNX1NUQUdFX0FGVEVSX0NMRUFSLAotCURQVV9STV9TVEFHRV9BRlRFUl9S U1ZQTkVYVCwKLQlEUFVfUk1fU1RBR0VfRklOQUwKK3N0YXRpYyBjaGFyICpibGtfbmFtZVtEUFVf SFdfQkxLX01BWF0gPSB7CisJIkhXX1RPUCIsCisJIkhXX1NTUFAiLAorCSJIV19MTSIsCisJIkhX X0NUTCIsCisJIkhXX0NETSIsCisJIkhXX1BJTkdQT05HIiwKKwkiSFdfSU5URiIsCisJIkhXX1dC IgogfTsKIAotc3RhdGljIHZvaWQgX2RwdV9ybV9wcmludF9yc3ZwcygKLQkJc3RydWN0IGRwdV9y bSAqcm0sCi0JCWVudW0gZHB1X3JtX2RiZ19yc3ZwX3N0YWdlIHN0YWdlKQordm9pZCBkcHVfcm1f cHJpbnRfc3RhdGUoc3RydWN0IGRwdV9ybSAqcm0pCiB7Ci0Jc3RydWN0IGRwdV9ybV9yc3ZwICpy c3ZwOwotCXN0cnVjdCBkcHVfcm1faHdfYmxrICpibGs7Ci0JZW51bSBkcHVfaHdfYmxrX3R5cGUg dHlwZTsKKwlpbnQgaTsKIAotCURQVV9ERUJVRygiJWRcbiIsIHN0YWdlKTsKKwltdXRleF9sb2Nr KCZybS0+cm1fbG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJzdnAsICZybS0+cnN2cHMs IGxpc3QpIHsKLQkJRFBVX0RFQlVHKCIlZCByc3ZwW3MldWUldV0gdG9wb2xvZ3kgJWRcbiIsIHN0 YWdlLCByc3ZwLT5zZXEsCi0JCQkJcnN2cC0+ZW5jX2lkLCByc3ZwLT50b3BvbG9neSk7Ci0JCURQ VV9FVlQzMihzdGFnZSwgcnN2cC0+c2VxLCByc3ZwLT5lbmNfaWQsIHJzdnAtPnRvcG9sb2d5KTsK LQl9CisJRFBVX0VSUk9SKCJEUFUgUk0gc3RhdGU6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgRFBV X0hXX0JMS19NQVg7IGkrKykgeworCQlpbnQgYmxrX2xlbiA9IHJtLT5od19ibGtzX2xlbltpXTsK KwkJaW50ICpkcm1fbWFwID0gcm0tPmh3X2RybV9tYXBbaV07CisJCWludCBqOwogCi0JZm9yICh0 eXBlID0gMDsgdHlwZSA8IERQVV9IV19CTEtfTUFYOyB0eXBlKyspIHsKLQkJbGlzdF9mb3JfZWFj aF9lbnRyeShibGssICZybS0+aHdfYmxrc1t0eXBlXSwgbGlzdCkgewotCQkJaWYgKCFibGstPnJz dnAgJiYgIWJsay0+cnN2cF9ueHQpCisJCWlmICghYmxrX2xlbikKKwkJCWNvbnRpbnVlOworCisJ CURQVV9FUlJPUigiJXNcdHRvdGFsOiAlZFxuIiwgYmxrX25hbWVbaV0sIGJsa19sZW4pOworCisJ CWZvciAoaiA9IDA7IGogPCBibGtfbGVuOyBqKyspIHsKKwkJCWlmICghZHJtX21hcFtqXSkKIAkJ CQljb250aW51ZTsKIAotCQkJRFBVX0RFQlVHKCIlZCByc3ZwW3MldWUldS0+cyV1ZSV1XSAlZCAl ZFxuIiwgc3RhZ2UsCi0JCQkJKGJsay0+cnN2cCkgPyBibGstPnJzdnAtPnNlcSA6IDAsCi0JCQkJ KGJsay0+cnN2cCkgPyBibGstPnJzdnAtPmVuY19pZCA6IDAsCi0JCQkJKGJsay0+cnN2cF9ueHQp ID8gYmxrLT5yc3ZwX254dC0+c2VxIDogMCwKLQkJCQkoYmxrLT5yc3ZwX254dCkgPyBibGstPnJz dnBfbnh0LT5lbmNfaWQgOiAwLAotCQkJCWJsay0+dHlwZSwgYmxrLT5pZCk7Ci0KLQkJCURQVV9F VlQzMihzdGFnZSwKLQkJCQkoYmxrLT5yc3ZwKSA/IGJsay0+cnN2cC0+c2VxIDogMCwKLQkJCQko YmxrLT5yc3ZwKSA/IGJsay0+cnN2cC0+ZW5jX2lkIDogMCwKLQkJCQkoYmxrLT5yc3ZwX254dCkg PyBibGstPnJzdnBfbnh0LT5zZXEgOiAwLAotCQkJCShibGstPnJzdnBfbnh0KSA/IGJsay0+cnN2 cF9ueHQtPmVuY19pZCA6IDAsCi0JCQkJYmxrLT50eXBlLCBibGstPmlkKTsKKwkJCURQVV9FUlJP UigiXHRpZHg6JWQgZHJtX2lkOiAlZFxuIiwgaiwgZHJtX21hcFtqXSk7CiAJCX0KIAl9CisKKwlt dXRleF91bmxvY2soJnJtLT5ybV9sb2NrKTsKIH0KIAogc3RydWN0IGRwdV9od19tZHAgKmRwdV9y bV9nZXRfbWRwKHN0cnVjdCBkcHVfcm0gKnJtKQpAQCAtMTUzLDMxICs4MCwyMSBAQCBzdHJ1Y3Qg ZHB1X2h3X21kcCAqZHB1X3JtX2dldF9tZHAoc3RydWN0IGRwdV9ybSAqcm0pCiAJcmV0dXJuIHJt LT5od19tZHA7CiB9CiAKLWVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUKLWRwdV9ybV9nZXRfdG9w b2xvZ3lfbmFtZShzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3kpCi17Ci0JaW50 IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRFBVX1JNX1RPUE9MT0dZX01BWDsgaSsrKQotCQlpZiAo Uk1fSVNfVE9QT0xPR1lfTUFUQ0goZ190b3BfdGFibGVbaV0sIHRvcG9sb2d5KSkKLQkJCXJldHVy biBnX3RvcF90YWJsZVtpXS50b3BfbmFtZTsKLQotCXJldHVybiBEUFVfUk1fVE9QT0xPR1lfTk9O RTsKLX0KLQogdm9pZCBkcHVfcm1faW5pdF9od19pdGVyKAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2l0 ZXIgKml0ZXIsCi0JCXVpbnQzMl90IGVuY19pZCwKKwkJdWludDMyX3QgZHJtX2lkLAogCQllbnVt IGRwdV9od19ibGtfdHlwZSB0eXBlKQogewogCW1lbXNldChpdGVyLCAwLCBzaXplb2YoKml0ZXIp KTsKLQlpdGVyLT5lbmNfaWQgPSBlbmNfaWQ7CisJaXRlci0+ZHJtX2lkID0gZHJtX2lkOwogCWl0 ZXItPnR5cGUgPSB0eXBlOwogfQogCiBzdGF0aWMgYm9vbCBfZHB1X3JtX2dldF9od19sb2NrZWQo c3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfcm1faHdfaXRlciAqaSkKIHsKLQlzdHJ1Y3Qg bGlzdF9oZWFkICpibGtfbGlzdDsKKwlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqKmJsa19saXN0Owor CXVpbnQzMl90IGJsa19sZW4sIGluZGV4OworCXVpbnQzMl90ICpkcm1fbWFwOwogCiAJaWYgKCFy bSB8fCAhaSB8fCBpLT50eXBlID49IERQVV9IV19CTEtfTUFYKSB7CiAJCURQVV9FUlJPUigiaW52 YWxpZCBybVxuIik7CkBAIC0xODUsMzMgKzEwMiwzMCBAQCBzdGF0aWMgYm9vbCBfZHB1X3JtX2dl dF9od19sb2NrZWQoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfcm1faHdfaXRlciAqaSkK IAl9CiAKIAlpLT5odyA9IE5VTEw7Ci0JYmxrX2xpc3QgPSAmcm0tPmh3X2Jsa3NbaS0+dHlwZV07 CisJYmxrX2xpc3QgPSBybS0+aHdfYmxrc1tpLT50eXBlXTsKKwlibGtfbGVuID0gcm0tPmh3X2Js a3NfbGVuW2ktPnR5cGVdOworCWRybV9tYXAgPSBybS0+aHdfZHJtX21hcFtpLT50eXBlXTsKIAot CWlmIChpLT5ibGsgJiYgKCZpLT5ibGstPmxpc3QgPT0gYmxrX2xpc3QpKSB7Ci0JCURQVV9ERUJV RygiYXR0ZW1wdCByZXN1bWUgaXRlcmF0aW9uIHBhc3QgbGFzdFxuIik7Ci0JCXJldHVybiBmYWxz ZTsKLQl9Ci0KLQlpLT5ibGsgPSBsaXN0X3ByZXBhcmVfZW50cnkoaS0+YmxrLCBibGtfbGlzdCwg bGlzdCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGktPmJsaywgYmxrX2xpc3Qs IGxpc3QpIHsKLQkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwID0gaS0+YmxrLT5yc3ZwOworCWZv ciAoaW5kZXggPSBpLT5pbmRleDsgaW5kZXggPCBibGtfbGVuOyBpbmRleCsrKSB7CisJCXN0cnVj dCBkcHVfcm1faHdfYmxrICpibGsgPSBibGtfbGlzdFtpbmRleF07CiAKLQkJaWYgKGktPmJsay0+ dHlwZSAhPSBpLT50eXBlKSB7Ci0JCQlEUFVfRVJST1IoImZvdW5kIGluY29ycmVjdCBibG9jayB0 eXBlICVkIG9uICVkIGxpc3RcbiIsCi0JCQkJCWktPmJsay0+dHlwZSwgaS0+dHlwZSk7CisJCWlm ICghYmxrKSB7CisJCQlEUFVfRVJST1IoImludmFsaWQgYmxvY2suIGluZGV4OiAlZCB0eXBlOiAl ZFxuIiwKKwkJCQkJaW5kZXgsIGktPnR5cGUpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKLQkJ aWYgKChpLT5lbmNfaWQgPT0gMCkgfHwgKHJzdnAgJiYgcnN2cC0+ZW5jX2lkID09IGktPmVuY19p ZCkpIHsKLQkJCWktPmh3ID0gaS0+YmxrLT5odzsKKwkJaWYgKGRybV9tYXBbaW5kZXhdID09IGkt PmRybV9pZCkgeworCQkJaS0+aHcgPSBibGstPmh3OworCQkJaS0+aW5kZXggPSBpbmRleCArIDE7 CisJCQlpLT5ibGsgPSBibGs7CiAJCQlEUFVfREVCVUcoImZvdW5kIHR5cGUgJWQgaWQgJWQgZm9y IGVuYyAlZFxuIiwKLQkJCQkJaS0+dHlwZSwgaS0+YmxrLT5pZCwgaS0+ZW5jX2lkKTsKKwkJCQkJ aS0+dHlwZSwgYmxrLT5pZCwgaS0+ZHJtX2lkKTsKIAkJCXJldHVybiB0cnVlOwogCQl9CiAJfQog Ci0JRFBVX0RFQlVHKCJubyBtYXRjaCwgdHlwZSAlZCBmb3IgZW5jICVkXG4iLCBpLT50eXBlLCBp LT5lbmNfaWQpOworCURQVV9ERUJVRygibm8gbWF0Y2gsIHR5cGUgJWQgZm9yIGVuYyAlZFxuIiwg aS0+dHlwZSwgaS0+ZHJtX2lkKTsKIAogCXJldHVybiBmYWxzZTsKIH0KQEAgLTIzNiw5ICsxNTAs NiBAQCBzdGF0aWMgdm9pZCBfZHB1X3JtX2h3X2Rlc3Ryb3koZW51bSBkcHVfaHdfYmxrX3R5cGUg dHlwZSwgdm9pZCAqaHcpCiAJY2FzZSBEUFVfSFdfQkxLX0NUTDoKIAkJZHB1X2h3X2N0bF9kZXN0 cm95KGh3KTsKIAkJYnJlYWs7Ci0JY2FzZSBEUFVfSFdfQkxLX0NETToKLQkJZHB1X2h3X2NkbV9k ZXN0cm95KGh3KTsKLQkJYnJlYWs7CiAJY2FzZSBEUFVfSFdfQkxLX1BJTkdQT05HOgogCQlkcHVf aHdfcGluZ3BvbmdfZGVzdHJveShodyk7CiAJCWJyZWFrOwpAQCAtMjU4LDI2ICsxNjksMjUgQEAg c3RhdGljIHZvaWQgX2RwdV9ybV9od19kZXN0cm95KGVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGUs IHZvaWQgKmh3KQogCiBpbnQgZHB1X3JtX2Rlc3Ryb3koc3RydWN0IGRwdV9ybSAqcm0pCiB7Ci0K LQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnBfY3VyLCAqcnN2cF9ueHQ7Ci0Jc3RydWN0IGRwdV9y bV9od19ibGsgKmh3X2N1ciwgKmh3X254dDsKIAllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlOwor CXVpbnQzMl90IGk7CiAKIAlpZiAoIXJtKSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBybVxuIik7 CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyc3Zw X2N1ciwgcnN2cF9ueHQsICZybS0+cnN2cHMsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJnJzdnBfY3Vy LT5saXN0KTsKLQkJa2ZyZWUocnN2cF9jdXIpOwotCX0KKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwg RFBVX0hXX0JMS19NQVg7IHR5cGUrKykgeworCQl1aW50MzJfdCBod19ibGtfbGVuID0gcm0tPmh3 X2Jsa3NfbGVuW3R5cGVdOwogCisJCWZvciAoaSA9IDA7IGkgPCBod19ibGtfbGVuOyBpKyspIHsK KwkJCXN0cnVjdCBkcHVfcm1faHdfYmxrICpod19jdXIgPSBybS0+aHdfYmxrc1t0eXBlXVtpXTsK IAotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBEUFVfSFdfQkxLX01BWDsgdHlwZSsrKSB7Ci0JCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShod19jdXIsIGh3X254dCwgJnJtLT5od19ibGtzW3R5cGVd LAotCQkJCWxpc3QpIHsKLQkJCWxpc3RfZGVsKCZod19jdXItPmxpc3QpOworCQkJaWYgKCFod19j dXIpIHsKKwkJCQlEUFVfRVJST1IoIkludmFsaWQgaHcgYmxvY2suIHR5cGU6JWQgaTogJWRcbiIs CisJCQkJCXR5cGUsIGkpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogCQkJX2RwdV9ybV9o d19kZXN0cm95KGh3X2N1ci0+dHlwZSwgaHdfY3VyLT5odyk7CiAJCQlrZnJlZShod19jdXIpOwog CQl9CkBAIC0zMTIsOSArMjIyLDYgQEAgc3RhdGljIGludCBfZHB1X3JtX2h3X2Jsa19jcmVhdGUo CiAJY2FzZSBEUFVfSFdfQkxLX0NUTDoKIAkJaHcgPSBkcHVfaHdfY3RsX2luaXQoaWQsIG1taW8s IGNhdCk7CiAJCWJyZWFrOwotCWNhc2UgRFBVX0hXX0JMS19DRE06Ci0JCWh3ID0gZHB1X2h3X2Nk bV9pbml0KGlkLCBtbWlvLCBjYXQsIGh3X21kcCk7Ci0JCWJyZWFrOwogCWNhc2UgRFBVX0hXX0JM S19QSU5HUE9ORzoKIAkJaHcgPSBkcHVfaHdfcGluZ3BvbmdfaW5pdChpZCwgbW1pbywgY2F0KTsK IAkJYnJlYWs7CkBAIC0zNDYsMzUgKzI1MywyNCBAQCBzdGF0aWMgaW50IF9kcHVfcm1faHdfYmxr X2NyZWF0ZSgKIAlibGstPnR5cGUgPSB0eXBlOwogCWJsay0+aWQgPSBpZDsKIAlibGstPmh3ID0g aHc7Ci0JbGlzdF9hZGRfdGFpbCgmYmxrLT5saXN0LCAmcm0tPmh3X2Jsa3NbdHlwZV0pOworCWJs ay0+cm1faWQgPSBybS0+aHdfYmxrc19sZW5bdHlwZV07CisKKwlybS0+aHdfYmxrc1t0eXBlXVty bS0+aHdfYmxrc19sZW5bdHlwZV0rK10gPSBibGs7CiAKIAlyZXR1cm4gMDsKIH0KIAogaW50IGRw dV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAogCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXQs Ci0JCXZvaWQgX19pb21lbSAqbW1pbywKLQkJc3RydWN0IGRybV9kZXZpY2UgKmRldikKKwkJdm9p ZCBfX2lvbWVtICptbWlvKQogewogCWludCByYywgaTsKLQllbnVtIGRwdV9od19ibGtfdHlwZSB0 eXBlOwotCi0JaWYgKCFybSB8fCAhY2F0IHx8ICFtbWlvIHx8ICFkZXYpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGttc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCS8qIENsZWFyLCBz ZXR1cCBsaXN0cyAqLwogCW1lbXNldChybSwgMCwgc2l6ZW9mKCpybSkpOwogCiAJbXV0ZXhfaW5p dCgmcm0tPnJtX2xvY2spOwogCi0JSU5JVF9MSVNUX0hFQUQoJnJtLT5yc3Zwcyk7Ci0JZm9yICh0 eXBlID0gMDsgdHlwZSA8IERQVV9IV19CTEtfTUFYOyB0eXBlKyspCi0JCUlOSVRfTElTVF9IRUFE KCZybS0+aHdfYmxrc1t0eXBlXSk7Ci0KLQlybS0+ZGV2ID0gZGV2OwotCiAJLyogU29tZSBvZiB0 aGUgc3ViLWJsb2NrcyByZXF1aXJlIGFuIG1kcHRvcCB0byBiZSBjcmVhdGVkICovCiAJcm0tPmh3 X21kcCA9IGRwdV9od19tZHB0b3BfaW5pdChNRFBfVE9QLCBtbWlvLCBjYXQpOwogCWlmIChJU19F UlJfT1JfTlVMTChybS0+aHdfbWRwKSkgewpAQCAtMzk5LDE4ICsyOTUsNiBAQCBpbnQgZHB1X3Jt X2luaXQoc3RydWN0IGRwdV9ybSAqcm0sCiAJCQlEUFVfRVJST1IoImZhaWxlZDogbG0gaHcgbm90 IGF2YWlsYWJsZVxuIik7CiAJCQlnb3RvIGZhaWw7CiAJCX0KLQotCQlpZiAoIXJtLT5sbV9tYXhf d2lkdGgpIHsKLQkJCXJtLT5sbV9tYXhfd2lkdGggPSBsbS0+c2Jsay0+bWF4d2lkdGg7Ci0JCX0g ZWxzZSBpZiAocm0tPmxtX21heF93aWR0aCAhPSBsbS0+c2Jsay0+bWF4d2lkdGgpIHsKLQkJCS8q Ci0JCQkgKiBEb24ndCBleHBlY3QgdG8gaGF2ZSBodyB3aGVyZSBsbSBtYXggd2lkdGhzIGRpZmZl ci4KLQkJCSAqIElmIGZvdW5kLCB0YWtlIHRoZSBtaW4uCi0JCQkgKi8KLQkJCURQVV9FUlJPUigi dW5zdXBwb3J0ZWQ6IGxtIG1heHdpZHRoIGRpZmZlcnNcbiIpOwotCQkJaWYgKHJtLT5sbV9tYXhf d2lkdGggPiBsbS0+c2Jsay0+bWF4d2lkdGgpCi0JCQkJcm0tPmxtX21heF93aWR0aCA9IGxtLT5z YmxrLT5tYXh3aWR0aDsKLQkJfQogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjYXQtPnBpbmdwb25n X2NvdW50OyBpKyspIHsKQEAgLTQ0NSwxNSArMzI5LDYgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVj dCBkcHVfcm0gKnJtLAogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGNhdC0+Y2RtX2NvdW50 OyBpKyspIHsKLQkJcmMgPSBfZHB1X3JtX2h3X2Jsa19jcmVhdGUocm0sIGNhdCwgbW1pbywgRFBV X0hXX0JMS19DRE0sCi0JCQkJY2F0LT5jZG1baV0uaWQsICZjYXQtPmNkbVtpXSk7Ci0JCWlmIChy YykgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQ6IGNkbSBodyBub3QgYXZhaWxhYmxlXG4iKTsKLQkJ CWdvdG8gZmFpbDsKLQkJfQotCX0KLQogCXJldHVybiAwOwogCiBmYWlsOgpAQCAtNDY3LDggKzM0 Miw3IEBAIGludCBkcHVfcm1faW5pdChzdHJ1Y3QgZHB1X3JtICpybSwKICAqCXByb3Bvc2VkIHVz ZSBjYXNlIHJlcXVpcmVtZW50cywgaW5jbC4gaGFyZHdpcmVkIGRlcGVuZGVudCBibG9ja3MgbGlr ZQogICoJcGluZ3BvbmcKICAqIEBybTogZHB1IHJlc291cmNlIG1hbmFnZXIgaGFuZGxlCi0gKiBA cnN2cDogcmVzZXJ2YXRpb24gY3VycmVudGx5IGJlaW5nIGNyZWF0ZWQKLSAqIEByZXFzOiBwcm9w b3NlZCB1c2UgY2FzZSByZXF1aXJlbWVudHMKKyAqIEBzdGF0ZTogZHB1IGNydGMgc3RhdGUgaGFu ZGxlCiAgKiBAbG06IHByb3Bvc2VkIGxheWVyIG1peGVyLCBmdW5jdGlvbiBjaGVja3MgaWYgbG0s IGFuZCBhbGwgb3RoZXIgaGFyZHdpcmVkCiAgKiAgICAgIGJsb2NrcyBjb25uZWN0ZWQgdG8gdGhl IGxtIChwcCkgaXMgYXZhaWxhYmxlIGFuZCBhcHByb3ByaWF0ZQogICogQHBwOiBvdXRwdXQgcGFy YW1ldGVyLCBwaW5ncG9uZyBibG9jayBhdHRhY2hlZCB0byB0aGUgbGF5ZXIgbWl4ZXIuCkBAIC00 NzksOCArMzUzLDcgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAogICovCiBz dGF0aWMgYm9vbCBfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3MoCiAJCXN0 cnVjdCBkcHVfcm0gKnJtLAotCQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCi0JCXN0cnVjdCBk cHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzLAorCQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKnN0YXRl LAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqbG0sCiAJCXN0cnVjdCBkcHVfcm1faHdfYmxrICoq cHAsCiAJCXN0cnVjdCBkcHVfcm1faHdfYmxrICpwcmltYXJ5X2xtKQpAQCAtNTA1LDEyICszNzgs NiBAQCBzdGF0aWMgYm9vbCBfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3Mo CiAJCX0KIAl9CiAKLQkvKiBBbHJlYWR5IHJlc2VydmVkPyAqLwotCWlmIChSRVNFUlZFRF9CWV9P VEhFUihsbSwgcnN2cCkpIHsKLQkJRFBVX0RFQlVHKCJsbSAlZCBhbHJlYWR5IHJlc2VydmVkXG4i LCBsbV9jZmctPmlkKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQogCWRwdV9ybV9pbml0X2h3X2l0 ZXIoJml0ZXIsIDAsIERQVV9IV19CTEtfUElOR1BPTkcpOwogCXdoaWxlIChfZHB1X3JtX2dldF9o d19sb2NrZWQocm0sICZpdGVyKSkgewogCQlpZiAoaXRlci5ibGstPmlkID09IGxtX2NmZy0+cGlu Z3BvbmcpIHsKQEAgLTUyNCwzNSArMzkxLDI0IEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tf bG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWlmIChS RVNFUlZFRF9CWV9PVEhFUigqcHAsIHJzdnApKSB7Ci0JCURQVV9ERUJVRygibG0gJWQgcHAgJWQg YWxyZWFkeSByZXNlcnZlZFxuIiwgbG0tPmlkLAotCQkJCSgqcHApLT5pZCk7Ci0JCXJldHVybiBm YWxzZTsKLQl9Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGludCBfZHB1X3JtX3Jlc2Vy dmVfbG1zKAotCQlzdHJ1Y3QgZHB1X3JtICpybSwKLQkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3Zw LAotCQlzdHJ1Y3QgZHB1X3JtX3JlcXVpcmVtZW50cyAqcmVxcykKLQorCXN0cnVjdCBkcHVfcm0g KnJtLCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKnN0YXRlLAorCXN0cnVjdCBkcHVfY3J0Y190b3Bv bG9neSAqdG9wb2xvZ3kpCiB7CiAJc3RydWN0IGRwdV9ybV9od19ibGsgKmxtW01BWF9CTE9DS1Nd OwogCXN0cnVjdCBkcHVfcm1faHdfYmxrICpwcFtNQVhfQkxPQ0tTXTsKIAlzdHJ1Y3QgZHB1X3Jt X2h3X2l0ZXIgaXRlcl9pLCBpdGVyX2o7CiAJaW50IGxtX2NvdW50ID0gMDsKLQlpbnQgaSwgcmMg PSAwOwotCi0JaWYgKCFyZXFzLT50b3BvbG9neS0+bnVtX2xtKSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBudW1iZXIgb2YgbG06ICVkXG4iLCByZXFzLT50b3BvbG9neS0+bnVtX2xtKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQorCWludCBpLCBkcm1faWQgPSBnZXRfY3J0Y19pZChzdGF0ZSk7CisJ aW50ICpsbV9kcm1fbWFwID0gcm0tPmh3X2RybV9tYXBbRFBVX0hXX0JMS19MTV07CisJaW50ICpw cF9kcm1fbWFwID0gcm0tPmh3X2RybV9tYXBbRFBVX0hXX0JMS19QSU5HUE9OR107CiAKIAkvKiBG aW5kIGEgcHJpbWFyeSBtaXhlciAqLwogCWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXJfaSwgMCwg RFBVX0hXX0JMS19MTSk7Ci0Jd2hpbGUgKGxtX2NvdW50ICE9IHJlcXMtPnRvcG9sb2d5LT5udW1f bG0gJiYKKwl3aGlsZSAobG1fY291bnQgIT0gdG9wb2xvZ3ktPm51bV9sbXMgJiYKIAkJCV9kcHVf cm1fZ2V0X2h3X2xvY2tlZChybSwgJml0ZXJfaSkpIHsKIAkJbWVtc2V0KCZsbSwgMCwgc2l6ZW9m KGxtKSk7CiAJCW1lbXNldCgmcHAsIDAsIHNpemVvZihwcCkpOwpAQCAtNTYxLDggKzQxNyw3IEBA IHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygKIAkJbG1bbG1fY291bnRdID0gaXRlcl9p LmJsazsKIAogCQlpZiAoIV9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygK LQkJCQlybSwgcnN2cCwgcmVxcywgbG1bbG1fY291bnRdLAotCQkJCSZwcFtsbV9jb3VudF0sIE5V TEwpKQorCQkJCXJtLCBzdGF0ZSwgbG1bbG1fY291bnRdLCAmcHBbbG1fY291bnRdLCBOVUxMKSkK IAkJCWNvbnRpbnVlOwogCiAJCSsrbG1fY291bnQ7CkBAIC01NzAsMTQgKzQyNSwxNCBAQCBzdGF0 aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoCiAJCS8qIFZhbGlkIHByaW1hcnkgbWl4ZXIgZm91 bmQsIGZpbmQgbWF0Y2hpbmcgcGVlcnMgKi8KIAkJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlcl9q LCAwLCBEUFVfSFdfQkxLX0xNKTsKIAotCQl3aGlsZSAobG1fY291bnQgIT0gcmVxcy0+dG9wb2xv Z3ktPm51bV9sbSAmJgorCQl3aGlsZSAobG1fY291bnQgIT0gdG9wb2xvZ3ktPm51bV9sbXMgJiYK IAkJCQlfZHB1X3JtX2dldF9od19sb2NrZWQocm0sICZpdGVyX2opKSB7CiAJCQlpZiAoaXRlcl9p LmJsayA9PSBpdGVyX2ouYmxrKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoIV9kcHVfcm1fY2hl Y2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKLQkJCQkJcm0sIHJzdnAsIHJlcXMsIGl0ZXJf ai5ibGssCi0JCQkJCSZwcFtsbV9jb3VudF0sIGl0ZXJfaS5ibGspKQorCQkJCXJtLCBzdGF0ZSwg aXRlcl9qLmJsaywKKwkJCQkmcHBbbG1fY291bnRdLCBpdGVyX2kuYmxrKSkKIAkJCQljb250aW51 ZTsKIAogCQkJbG1bbG1fY291bnRdID0gaXRlcl9qLmJsazsKQEAgLTU4NSw3ICs0NDAsNyBAQCBz dGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9sbXMoCiAJCX0KIAl9CiAKLQlpZiAobG1fY291bnQg IT0gcmVxcy0+dG9wb2xvZ3ktPm51bV9sbSkgeworCWlmIChsbV9jb3VudCAhPSB0b3BvbG9neS0+ bnVtX2xtcykgewogCQlEUFVfREVCVUcoInVuYWJsZSB0byBmaW5kIGFwcHJvcHJpYXRlIG1peGVy c1xuIik7CiAJCXJldHVybiAtRU5BVkFJTDsKIAl9CkBAIC01OTQsNDkzICs0NDksMjY1IEBAIHN0 YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2xtcygKIAkJaWYgKCFsbVtpXSkKIAkJCWJyZWFrOwog Ci0JCWxtW2ldLT5yc3ZwX254dCA9IHJzdnA7Ci0JCXBwW2ldLT5yc3ZwX254dCA9IHJzdnA7CisJ CWxtX2RybV9tYXBbbG1baV0tPnJtX2lkXSA9IGRybV9pZDsKKwkJcHBfZHJtX21hcFtwcFtpXS0+ cm1faWRdID0gZHJtX2lkOwogCi0JCURQVV9FVlQzMihsbVtpXS0+dHlwZSwgcnN2cC0+ZW5jX2lk LCBsbVtpXS0+aWQsIHBwW2ldLT5pZCk7CisJCXN0YXRlLT5taXhlcnNbaV0uaHdfbG0gPSAoc3Ry dWN0IGRwdV9od19taXhlciAqKWxtW2ldLT5odzsKKwkJc3RhdGUtPm1peGVyc1tpXS5od19wcCA9 IChzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICopcHBbaV0tPmh3OwogCX0KIAotCXJldHVybiByYzsK KwlzdGF0ZS0+bnVtX21peGVycyA9IHRvcG9sb2d5LT5udW1fbG1zOworCisJcmV0dXJuIDA7CiB9 CiAKIHN0YXRpYyBpbnQgX2RwdV9ybV9yZXNlcnZlX2N0bHMoCi0JCXN0cnVjdCBkcHVfcm0gKnJt LAotCQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCi0JCWNvbnN0IHN0cnVjdCBkcHVfcm1fdG9w b2xvZ3lfZGVmICp0b3ApCisJCXN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHB1X2NydGNfc3Rh dGUgKnN0YXRlLAorCQlzdHJ1Y3QgZHB1X2NydGNfdG9wb2xvZ3kgKnRvcG9sb2d5KQogewogCXN0 cnVjdCBkcHVfcm1faHdfYmxrICpjdGxzW01BWF9CTE9DS1NdOwogCXN0cnVjdCBkcHVfcm1faHdf aXRlciBpdGVyOwotCWludCBpID0gMDsKKwlib29sIG5lZWRzX3NwbGl0X2Rpc3BsYXk7CisJaW50 IGkgPSAwLCBkcm1faWQgPSBnZXRfY3J0Y19pZChzdGF0ZSk7CisJaW50ICpjdGxfZHJtX21hcCA9 IHJtLT5od19kcm1fbWFwW0RQVV9IV19CTEtfQ1RMXTsKIAogCW1lbXNldCgmY3RscywgMCwgc2l6 ZW9mKGN0bHMpKTsKIAorCW5lZWRzX3NwbGl0X2Rpc3BsYXkgPSAodG9wb2xvZ3ktPm51bV9jdGxz ID09IDIpOworCiAJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgMCwgRFBVX0hXX0JMS19DVEwp OwogCXdoaWxlIChfZHB1X3JtX2dldF9od19sb2NrZWQocm0sICZpdGVyKSkgewogCQljb25zdCBz dHJ1Y3QgZHB1X2h3X2N0bCAqY3RsID0gdG9fZHB1X2h3X2N0bChpdGVyLmJsay0+aHcpOwogCQl1 bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gY3RsLT5jYXBzLT5mZWF0dXJlczsKIAkJYm9vbCBoYXNf c3BsaXRfZGlzcGxheTsKIAotCQlpZiAoUkVTRVJWRURfQllfT1RIRVIoaXRlci5ibGssIHJzdnAp KQotCQkJY29udGludWU7Ci0KIAkJaGFzX3NwbGl0X2Rpc3BsYXkgPSBCSVQoRFBVX0NUTF9TUExJ VF9ESVNQTEFZKSAmIGZlYXR1cmVzOwogCiAJCURQVV9ERUJVRygiY3RsICVkIGNhcHMgMHglbFhc biIsIGl0ZXIuYmxrLT5pZCwgZmVhdHVyZXMpOwogCi0JCWlmICh0b3AtPm5lZWRzX3NwbGl0X2Rp c3BsYXkgIT0gaGFzX3NwbGl0X2Rpc3BsYXkpCisJCWlmIChuZWVkc19zcGxpdF9kaXNwbGF5ICE9 IGhhc19zcGxpdF9kaXNwbGF5KQogCQkJY29udGludWU7CiAKIAkJY3Rsc1tpXSA9IGl0ZXIuYmxr OwogCQlEUFVfREVCVUcoImN0bCAlZCBtYXRjaFxuIiwgaXRlci5ibGstPmlkKTsKIAotCQlpZiAo KytpID09IHRvcC0+bnVtX2N0bCkKKwkJaWYgKCsraSA9PSB0b3BvbG9neS0+bnVtX2N0bHMpCiAJ CQlicmVhazsKIAl9CiAKLQlpZiAoaSAhPSB0b3AtPm51bV9jdGwpCi0JCXJldHVybiAtRU5BVkFJ TDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0bHMpICYmIGkgPCB0b3AtPm51bV9j dGw7IGkrKykgewotCQljdGxzW2ldLT5yc3ZwX254dCA9IHJzdnA7Ci0JCURQVV9FVlQzMihjdGxz W2ldLT50eXBlLCByc3ZwLT5lbmNfaWQsIGN0bHNbaV0tPmlkKTsKLQl9Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfY2RtKAotCQlzdHJ1Y3QgZHB1X3JtICpy bSwKLQkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAotCQl1aW50MzJfdCBpZCwKLQkJZW51bSBk cHVfaHdfYmxrX3R5cGUgdHlwZSkKLXsKLQlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKLQot CWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXIsIDAsIERQVV9IV19CTEtfQ0RNKTsKLQl3aGlsZSAo X2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcikpIHsKLQkJY29uc3Qgc3RydWN0IGRwdV9o d19jZG0gKmNkbSA9IHRvX2RwdV9od19jZG0oaXRlci5ibGstPmh3KTsKLQkJY29uc3Qgc3RydWN0 IGRwdV9jZG1fY2ZnICpjYXBzID0gY2RtLT5jYXBzOwotCQlib29sIG1hdGNoID0gZmFsc2U7Ci0K LQkJaWYgKFJFU0VSVkVEX0JZX09USEVSKGl0ZXIuYmxrLCByc3ZwKSkKLQkJCWNvbnRpbnVlOwot Ci0JCWlmICh0eXBlID09IERQVV9IV19CTEtfSU5URiAmJiBpZCAhPSBJTlRGX01BWCkKLQkJCW1h dGNoID0gdGVzdF9iaXQoaWQsICZjYXBzLT5pbnRmX2Nvbm5lY3QpOwotCi0JCURQVV9ERUJVRygi dHlwZSAlZCBpZCAlZCwgY2RtIGludGZzICVsdSBtYXRjaCAlZFxuIiwKLQkJCQl0eXBlLCBpZCwg Y2Fwcy0+aW50Zl9jb25uZWN0LCBtYXRjaCk7CisJaWYgKGkgIT0gdG9wb2xvZ3ktPm51bV9jdGxz KQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoIW1hdGNoKQotCQkJY29udGludWU7CisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3RscykgJiYgaSA8IHRvcG9sb2d5LT5udW1fY3Rsczsg aSsrKSB7CisJCWN0bF9kcm1fbWFwW2N0bHNbaV0tPnJtX2lkXSA9IGRybV9pZDsKKwkJc3RhdGUt Pmh3X2N0bHNbaV0gPSAoc3RydWN0IGRwdV9od19jdGwgKiljdGxzW2ldLT5odzsKIAotCQlpdGVy LmJsay0+cnN2cF9ueHQgPSByc3ZwOwotCQlEUFVfRVZUMzIoaXRlci5ibGstPnR5cGUsIHJzdnAt PmVuY19pZCwgaXRlci5ibGstPmlkKTsKLQkJYnJlYWs7CisJCURQVV9FVlQzMihjdGxzW2ldLT50 eXBlLCBnZXRfY3J0Y19pZChzdGF0ZSksIGN0bHNbaV0tPmlkKTsKIAl9CiAKLQlpZiAoIWl0ZXIu aHcpIHsKLQkJRFBVX0VSUk9SKCJjb3VsZG4ndCByZXNlcnZlIGNkbSBmb3IgdHlwZSAlZCBpZCAl ZFxuIiwgdHlwZSwgaWQpOwotCQlyZXR1cm4gLUVOQVZBSUw7Ci0JfQorCXN0YXRlLT5udW1fY3Rs cyA9IHRvcG9sb2d5LT5udW1fY3RsczsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9k cHVfcm1fcmVzZXJ2ZV9pbnRmKAorc3RhdGljIHN0cnVjdCBkcHVfcm1faHdfYmxrICpfZHB1X3Jt X2dldF9od19pZCgKIAkJc3RydWN0IGRwdV9ybSAqcm0sCi0JCXN0cnVjdCBkcHVfcm1fcnN2cCAq cnN2cCwKIAkJdWludDMyX3QgaWQsCi0JCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGUsCi0JCWJv b2wgbmVlZHNfY2RtKQorCQllbnVtIGRwdV9od19ibGtfdHlwZSB0eXBlKQogewogCXN0cnVjdCBk cHVfcm1faHdfaXRlciBpdGVyOwotCWludCByZXQgPSAwOwogCiAJLyogRmluZCB0aGUgYmxvY2sg ZW50cnkgaW4gdGhlIHJtLCBhbmQgbm90ZSB0aGUgcmVzZXJ2YXRpb24gKi8KIAlkcHVfcm1faW5p dF9od19pdGVyKCZpdGVyLCAwLCB0eXBlKTsKIAl3aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2Vk KHJtLCAmaXRlcikpIHsKIAkJaWYgKGl0ZXIuYmxrLT5pZCAhPSBpZCkKIAkJCWNvbnRpbnVlOwot Ci0JCWlmIChSRVNFUlZFRF9CWV9PVEhFUihpdGVyLmJsaywgcnN2cCkpIHsKLQkJCURQVV9FUlJP UigidHlwZSAlZCBpZCAlZCBhbHJlYWR5IHJlc2VydmVkXG4iLCB0eXBlLCBpZCk7Ci0JCQlyZXR1 cm4gLUVOQVZBSUw7Ci0JCX0KLQotCQlpdGVyLmJsay0+cnN2cF9ueHQgPSByc3ZwOwotCQlEUFVf RVZUMzIoaXRlci5ibGstPnR5cGUsIHJzdnAtPmVuY19pZCwgaXRlci5ibGstPmlkKTsKIAkJYnJl YWs7CiAJfQogCi0JLyogU2hvdWxkbid0IGhhcHBlbiBzaW5jZSBpbnRmcyBhcmUgZml4ZWQgYXQg cHJvYmUgKi8KIAlpZiAoIWl0ZXIuaHcpIHsKIAkJRFBVX0VSUk9SKCJjb3VsZG4ndCBmaW5kIHR5 cGUgJWQgaWQgJWRcbiIsIHR5cGUsIGlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBO VUxMOwogCX0KIAotCWlmIChuZWVkc19jZG0pCi0JCXJldCA9IF9kcHVfcm1fcmVzZXJ2ZV9jZG0o cm0sIHJzdnAsIGlkLCB0eXBlKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGl0ZXIuYmxrOwog fQogCiBzdGF0aWMgaW50IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX3JlbGF0ZWRfaHcoCiAJCXN0cnVj dCBkcHVfcm0gKnJtLAotCQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCisJCXN0cnVjdCBkcHVf Y3J0Y19zdGF0ZSAqc3RhdGUsCiAJCXN0cnVjdCBkcHVfZW5jb2Rlcl9od19yZXNvdXJjZXMgKmh3 X3JlcykKIHsKLQlpbnQgaSwgcmV0ID0gMDsKLQl1MzIgaWQ7CisJc3RydWN0IGRwdV9ybV9od19i bGsgKmludGZbSU5URl9NQVhdID0ge307CisJdTMyIGksIGlkLCBpbnRmX2NvdW50ID0gMDsKKwl1 MzIgZHJtX2lkID0gZ2V0X2NydGNfaWQoc3RhdGUpOworCWludCAqaW50Zl9kcm1fbWFwID0gcm0t Pmh3X2RybV9tYXBbRFBVX0hXX0JMS19JTlRGXTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGh3X3Jlcy0+aW50ZnMpOyBpKyspIHsKIAkJaWYgKGh3X3Jlcy0+aW50ZnNbaV0gPT0gSU5U Rl9NT0RFX05PTkUpCiAJCQljb250aW51ZTsKLQkJaWQgPSBpICsgSU5URl8wOwotCQlyZXQgPSBf ZHB1X3JtX3Jlc2VydmVfaW50ZihybSwgcnN2cCwgaWQsCi0JCQkJRFBVX0hXX0JMS19JTlRGLCBo d19yZXMtPm5lZWRzX2NkbSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJl dHVybiByZXQ7Ci19CiAKLXN0YXRpYyBpbnQgX2RwdV9ybV9tYWtlX25leHRfcnN2cCgKLQkJc3Ry dWN0IGRwdV9ybSAqcm0sCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jLAotCQlzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpj b25uX3N0YXRlLAotCQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCi0JCXN0cnVjdCBkcHVfcm1f cmVxdWlyZW1lbnRzICpyZXFzKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGRwdV9ybV90b3BvbG9n eV9kZWYgdG9wb2xvZ3k7Ci0KLQkvKiBDcmVhdGUgcmVzZXJ2YXRpb24gaW5mbywgdGFnIHJlc2Vy dmVkIGJsb2NrcyB3aXRoIGl0IGFzIHdlIGdvICovCi0JcnN2cC0+c2VxID0gKytybS0+cnN2cF9u ZXh0X3NlcTsKLQlyc3ZwLT5lbmNfaWQgPSBlbmMtPmJhc2UuaWQ7Ci0JcnN2cC0+dG9wb2xvZ3kg PSByZXFzLT50b3BvbG9neS0+dG9wX25hbWU7Ci0JbGlzdF9hZGRfdGFpbCgmcnN2cC0+bGlzdCwg JnJtLT5yc3Zwcyk7Ci0KLQlyZXQgPSBfZHB1X3JtX3Jlc2VydmVfbG1zKHJtLCByc3ZwLCByZXFz KTsKLQlpZiAocmV0KSB7Ci0JCURQVV9FUlJPUigidW5hYmxlIHRvIGZpbmQgYXBwcm9wcmlhdGUg bWl4ZXJzXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJCWlkID0gaSArIElOVEZfMDsKKwkJaW50 ZltpXSA9IF9kcHVfcm1fZ2V0X2h3X2lkKHJtLCBpZCwgRFBVX0hXX0JMS19JTlRGKTsKKwkJaWYg KCFpbnRmW2ldKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIERvIGFzc2lnbm1lbnQg cHJlZmVycmluZyB0byBnaXZlIGF3YXkgbG93LXJlc291cmNlIENUTHMgZmlyc3Q6Ci0JICogLSBD aGVjayBtaXhlcnMgd2l0aG91dCBTcGxpdCBEaXNwbGF5Ci0JICogLSBPbmx5IHRoZW4gYWxsb3cg dG8gZ3JhYiBmcm9tIENUTHMgd2l0aCBzcGxpdCBkaXNwbGF5IGNhcGFiaWxpdHkKLQkgKi8KLQlf ZHB1X3JtX3Jlc2VydmVfY3RscyhybSwgcnN2cCwgcmVxcy0+dG9wb2xvZ3kpOwotCWlmIChyZXQg JiYgIXJlcXMtPnRvcG9sb2d5LT5uZWVkc19zcGxpdF9kaXNwbGF5KSB7Ci0JCW1lbWNweSgmdG9w b2xvZ3ksIHJlcXMtPnRvcG9sb2d5LCBzaXplb2YodG9wb2xvZ3kpKTsKLQkJdG9wb2xvZ3kubmVl ZHNfc3BsaXRfZGlzcGxheSA9IHRydWU7Ci0JCV9kcHVfcm1fcmVzZXJ2ZV9jdGxzKHJtLCByc3Zw LCAmdG9wb2xvZ3kpOwotCX0KLQlpZiAocmV0KSB7Ci0JCURQVV9FUlJPUigidW5hYmxlIHRvIGZp bmQgYXBwcm9wcmlhdGUgQ1RMXG4iKTsKLQkJcmV0dXJuIHJldDsKKwkJLyogUmVzZXJ2ZSBvdGhl ciBJTlRGIHJlbGF0ZWQgYmxvY2tzIGlmIG5lZWRlZCAqLwogCX0KIAotCS8qIEFzc2lnbiBJTlRG cyBhbmQgYmxrcyB3aG9zZSB1c2FnZSBpcyB0aWVkIHRvIHRoZW06IENUTCAmIENETSAqLwotCXJl dCA9IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX3JlbGF0ZWRfaHcocm0sIHJzdnAsICZyZXFzLT5od19y ZXMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0 aWMgaW50IF9kcHVfcm1fcG9wdWxhdGVfcmVxdWlyZW1lbnRzKAotCQlzdHJ1Y3QgZHB1X3JtICpy bSwKLQkJc3RydWN0IGRybV9lbmNvZGVyICplbmMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZSwKLQkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCi0J CXN0cnVjdCBkcHVfcm1fcmVxdWlyZW1lbnRzICpyZXFzLAotCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlf dG9wb2xvZ3kgcmVxX3RvcG9sb2d5KQotewotCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlID0gJmNydGNfc3RhdGUtPm1vZGU7Ci0JaW50IGk7Ci0KLQltZW1zZXQocmVxcywgMCwg c2l6ZW9mKCpyZXFzKSk7Ci0KLQlkcHVfZW5jb2Rlcl9nZXRfaHdfcmVzb3VyY2VzKGVuYywgJnJl cXMtPmh3X3JlcywgY29ubl9zdGF0ZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRFBVX1JNX1RPUE9M T0dZX01BWDsgaSsrKSB7Ci0JCWlmIChSTV9JU19UT1BPTE9HWV9NQVRDSChnX3RvcF90YWJsZVtp XSwKLQkJCQkJcmVxX3RvcG9sb2d5KSkgewotCQkJcmVxcy0+dG9wb2xvZ3kgPSAmZ190b3BfdGFi bGVbaV07Ci0JCQlicmVhazsKLQkJfQotCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSho d19yZXMtPmludGZzKTsgaSsrKSB7CisJCWlmICghaW50ZltpXSkKKwkJCWNvbnRpbnVlOwogCi0J aWYgKCFyZXFzLT50b3BvbG9neSkgewotCQlEUFVfRVJST1IoImludmFsaWQgdG9wb2xvZ3kgZm9y IHRoZSBkaXNwbGF5XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWludGZfZHJtX21hcFtpbnRm W2ldLT5ybV9pZF0gPSBkcm1faWQ7CisJCXN0YXRlLT5od19pbnRmc1tpbnRmX2NvdW50KytdID0K KwkJCShzdHJ1Y3QgZHB1X2h3X2ludGYgKilpbnRmW2ldLT5odzsKIAl9CiAKLQkvKioKLQkgKiBT ZXQgdGhlIHJlcXVpcmVtZW50IGJhc2VkIG9uIGNhcHMgaWYgbm90IHNldCBmcm9tIHVzZXIgc3Bh Y2UKLQkgKiBUaGlzIHdpbGwgZW5zdXJlIHRvIHNlbGVjdCBMTSB0aWVkIHdpdGggRFMgYmxvY2tz Ci0JICogQ3VycmVudGx5LCBEUyBibG9ja3MgYXJlIHRpZWQgd2l0aCBMTSAwIGFuZCBMTSAxIChw cmltYXJ5IGRpc3BsYXkpCi0JICovCi0JaWYgKCFSTV9SUV9EUyhyZXFzKSAmJiBybS0+aHdfbWRw LT5jYXBzLT5oYXNfZGVzdF9zY2FsZXIgJiYKLQkJY29ubl9zdGF0ZS0+Y29ubmVjdG9yLT5jb25u ZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJKQotCQlyZXFzLT50b3BfY3RybCB8 PSBCSVQoRFBVX1JNX1RPUENUTF9EUyk7Ci0KLQlEUFVfREVCVUcoInRvcF9jdHJsOiAweCVsbFgg bnVtX2hfdGlsZXM6ICVkXG4iLCByZXFzLT50b3BfY3RybCwKLQkJCXJlcXMtPmh3X3Jlcy5kaXNw bGF5X251bV9vZl9oX3RpbGVzKTsKLQlEUFVfREVCVUcoIm51bV9sbTogJWQgbnVtX2N0bDogJWQg dG9wb2xvZ3k6ICVkIHNwbGl0X2Rpc3BsYXk6ICVkXG4iLAotCQkJcmVxcy0+dG9wb2xvZ3ktPm51 bV9sbSwgcmVxcy0+dG9wb2xvZ3ktPm51bV9jdGwsCi0JCQlyZXFzLT50b3BvbG9neS0+dG9wX25h bWUsCi0JCQlyZXFzLT50b3BvbG9neS0+bmVlZHNfc3BsaXRfZGlzcGxheSk7Ci0JRFBVX0VWVDMy KG1vZGUtPmhkaXNwbGF5LCBybS0+bG1fbWF4X3dpZHRoLCByZXFzLT50b3BvbG9neS0+bnVtX2xt LAotCQkJcmVxcy0+dG9wX2N0cmwsIHJlcXMtPnRvcG9sb2d5LT50b3BfbmFtZSwKLQkJCXJlcXMt PnRvcG9sb2d5LT5udW1fY3RsKTsKKwlzdGF0ZS0+bnVtX2ludGZzID0gaW50Zl9jb3VudDsKIAog CXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRwdV9ybV9yc3ZwICpfZHB1X3JtX2dldF9y c3ZwKAorc3RhdGljIGludCBfZHB1X3JtX3JlbGVhc2VfaHdfYmxrKAogCQlzdHJ1Y3QgZHB1X3Jt ICpybSwKLQkJc3RydWN0IGRybV9lbmNvZGVyICplbmMpCisJCXN0cnVjdCBkcHVfY3J0Y19zdGF0 ZSAqc3RhdGUsCisJCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGUpCiB7Ci0Jc3RydWN0IGRwdV9y bV9yc3ZwICppOwotCi0JaWYgKCFybSB8fCAhZW5jKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBw YXJhbXNcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmcm0tPnJz dnBzKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZybS0+cnN2 cHMsIGxpc3QpCi0JCWlmIChpLT5lbmNfaWQgPT0gZW5jLT5iYXNlLmlkKQotCQkJcmV0dXJuIGk7 Ci0KLQlyZXR1cm4gTlVMTDsKLX0KKwlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgaXRlcjsKKwlpbnQg ZHJtX2lkID0gZ2V0X2NydGNfaWQoc3RhdGUpOworCWludCBudW1fcmVsZWFzZWQgPSAwOworCWlu dCAqZHJtX21hcCA9IHJtLT5od19kcm1fbWFwW3R5cGVdOwogCi1zdGF0aWMgc3RydWN0IGRybV9j b25uZWN0b3IgKl9kcHVfcm1fZ2V0X2Nvbm5lY3RvcigKLQkJc3RydWN0IGRybV9lbmNvZGVyICpl bmMpCi17Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4gPSBOVUxMOwotCXN0cnVjdCBsaXN0 X2hlYWQgKmNvbm5lY3Rvcl9saXN0ID0KLQkJCSZlbmMtPmRldi0+bW9kZV9jb25maWcuY29ubmVj dG9yX2xpc3Q7CisJZHB1X3JtX2luaXRfaHdfaXRlcigmaXRlciwgZHJtX2lkLCB0eXBlKTsKKwl3 aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcikpIHsKKwkJZHJtX21hcFtpdGVy LmJsay0+cm1faWRdID0gMDsKKwkJbnVtX3JlbGVhc2VkKys7CiAKLQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGNvbm4sIGNvbm5lY3Rvcl9saXN0LCBoZWFkKQotCQlpZiAoY29ubi0+ZW5jb2RlciA9PSBl bmMpCi0JCQlyZXR1cm4gY29ubjsKKwkJRFBVX0VWVDMyKGl0ZXIuYmxrLT50eXBlLCBkcm1faWQs IGl0ZXIuYmxrLT5pZCk7CisJfQogCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIG51bV9yZWxlYXNl ZDsKIH0KIAotLyoqCi0gKiBfZHB1X3JtX3JlbGVhc2VfcnN2cCAtIHJlbGVhc2UgcmVzb3VyY2Vz IGFuZCByZWxlYXNlIGEgcmVzZXJ2YXRpb24KLSAqIEBybToJS01TIGhhbmRsZQotICogQHJzdnA6 CVJTVlAgcG9pbnRlciB0byByZWxlYXNlIGFuZCByZWxlYXNlIHJlc291cmNlcyBmb3IKLSAqLwot c3RhdGljIHZvaWQgX2RwdV9ybV9yZWxlYXNlX3JzdnAoCi0JCXN0cnVjdCBkcHVfcm0gKnJtLAot CQlzdHJ1Y3QgZHB1X3JtX3JzdnAgKnJzdnAsCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u KQorc3RhdGljIGludCBfZHB1X3JtX3JlbGVhc2VfbG1zKHN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1 Y3QgZHB1X2NydGNfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cF9j LCAqcnN2cF9uOwotCXN0cnVjdCBkcHVfcm1faHdfYmxrICpibGs7Ci0JZW51bSBkcHVfaHdfYmxr X3R5cGUgdHlwZTsKLQotCWlmICghcnN2cCkKLQkJcmV0dXJuOwotCi0JRFBVX0RFQlVHKCJyZWwg cnN2cCAlZCBlbmMgJWRcbiIsIHJzdnAtPnNlcSwgcnN2cC0+ZW5jX2lkKTsKKwlpbnQgbnVtX2xt LCBudW1fcHA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnN2cF9jLCByc3ZwX24sICZy bS0+cnN2cHMsIGxpc3QpIHsKLQkJaWYgKHJzdnAgPT0gcnN2cF9jKSB7Ci0JCQlsaXN0X2RlbCgm cnN2cF9jLT5saXN0KTsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCS8qIFJlbGVhc2UgTE0gYmxvY2tz ICovCisJbnVtX2xtID0gX2RwdV9ybV9yZWxlYXNlX2h3X2JsayhybSwgc3RhdGUsIERQVV9IV19C TEtfTE0pOwogCi0JZm9yICh0eXBlID0gMDsgdHlwZSA8IERQVV9IV19CTEtfTUFYOyB0eXBlKysp IHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShibGssICZybS0+aHdfYmxrc1t0eXBlXSwgbGlzdCkg ewotCQkJaWYgKGJsay0+cnN2cCA9PSByc3ZwKSB7Ci0JCQkJYmxrLT5yc3ZwID0gTlVMTDsKLQkJ CQlEUFVfREVCVUcoInJlbCByc3ZwICVkIGVuYyAlZCAlZCAlZFxuIiwKLQkJCQkJCXJzdnAtPnNl cSwgcnN2cC0+ZW5jX2lkLAotCQkJCQkJYmxrLT50eXBlLCBibGstPmlkKTsKLQkJCX0KLQkJCWlm IChibGstPnJzdnBfbnh0ID09IHJzdnApIHsKLQkJCQlibGstPnJzdnBfbnh0ID0gTlVMTDsKLQkJ CQlEUFVfREVCVUcoInJlbCByc3ZwX254dCAlZCBlbmMgJWQgJWQgJWRcbiIsCi0JCQkJCQlyc3Zw LT5zZXEsIHJzdnAtPmVuY19pZCwKLQkJCQkJCWJsay0+dHlwZSwgYmxrLT5pZCk7Ci0JCQl9Ci0J CX0KKwkvKiBSbGVhc2UgcGluZyBwb25nIGJsb2NrcyAqLworCW51bV9wcCA9IF9kcHVfcm1fcmVs ZWFzZV9od19ibGsocm0sIHN0YXRlLCBEUFVfSFdfQkxLX1BJTkdQT05HKTsKKwlpZiAobnVtX3Bw ICE9IG51bV9sbSkgeworCQlEUFVfRVJST1IoImxtIGNoYWluIGNvdW50IG1pc21hdGNoIGxtOiAl ZCBwcDolZFxuIiwKKwkJCQludW1fbG0sIG51bV9wcCk7CisJCXJldHVybiAwOwogCX0KIAotCWtm cmVlKHJzdnApOworCXJldHVybiBudW1fbG07CiB9CiAKLXZvaWQgZHB1X3JtX3JlbGVhc2Uoc3Ry dWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQoraW50IGRwdV9ybV9yZXNl cnZlX2NydGNfcmVzKHN0cnVjdCBkcHVfcm0gKnJtLCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKnN0 YXRlLAorCXN0cnVjdCBkcHVfY3J0Y190b3BvbG9neSAqdG9wb2xvZ3kpCiB7Ci0Jc3RydWN0IGRw dV9ybV9yc3ZwICpyc3ZwOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOwotCi0JaWYgKCFy bSB8fCAhZW5jKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbXNcbiIpOwotCQlyZXR1cm47 Ci0JfQorCWludCByYyA9IDA7CiAKIAltdXRleF9sb2NrKCZybS0+cm1fbG9jayk7CiAKLQlyc3Zw ID0gX2RwdV9ybV9nZXRfcnN2cChybSwgZW5jKTsKLQlpZiAoIXJzdnApIHsKLQkJRFBVX0VSUk9S KCJmYWlsZWQgdG8gZmluZCByc3ZwIGZvciBlbmMgJWRcbiIsIGVuYy0+YmFzZS5pZCk7Ci0JCWdv dG8gZW5kOworCXJjID0gX2RwdV9ybV9yZXNlcnZlX2xtcyhybSwgc3RhdGUsIHRvcG9sb2d5KTsK KwlpZiAocmMpICB7CisJCURQVV9FUlJPUigidW5hYmxlIHRvIGFsbG9jYXRlIGxtIGZvciBjcnRj OiAlZFxuIiwKKwkJCQlnZXRfY3J0Y19pZChzdGF0ZSkpOworCQlnb3RvIHJlc2VydmVfZG9uZTsK IAl9CiAKLQljb25uID0gX2RwdV9ybV9nZXRfY29ubmVjdG9yKGVuYyk7Ci0JaWYgKCFjb25uKSB7 Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGdldCBjb25uZWN0b3IgZm9yIGVuYyAlZFxuIiwgZW5j LT5iYXNlLmlkKTsKLQkJZ290byBlbmQ7CisJcmMgPSBfZHB1X3JtX3Jlc2VydmVfY3RscyhybSwg c3RhdGUsIHRvcG9sb2d5KTsKKwlpZiAocmMpICB7CisJCURQVV9FUlJPUigidW5hYmxlIHRvIGFs bG9jYXRlIGN0bCBmb3IgY3J0YzogJWRcbiIsCisJCQkJZ2V0X2NydGNfaWQoc3RhdGUpKTsKKwkJ Z290byByZXNlcnZlX2RvbmU7CiAJfQogCi0JX2RwdV9ybV9yZWxlYXNlX3JzdnAocm0sIHJzdnAs IGNvbm4pOwotZW5kOgorcmVzZXJ2ZV9kb25lOgogCW11dGV4X3VubG9jaygmcm0tPnJtX2xvY2sp OworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2RwdV9ybV9jb21taXRfcnN2cCgKLQkJ c3RydWN0IGRwdV9ybSAqcm0sCi0JCXN0cnVjdCBkcHVfcm1fcnN2cCAqcnN2cCwKLQkJc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCisKK2ludCBkcHVfcm1fcmVsZWFzZV9j cnRjX3JlcyhzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSkK IHsKLQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqYmxrOwotCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5 cGU7Ci0JaW50IHJldCA9IDA7CisJaW50IHJjID0gMCwgbnVtX3JlbGVhc2VkOwogCi0JLyogU3dh cCBuZXh0IHJzdnAgdG8gYmUgdGhlIGFjdGl2ZSAqLwotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBE UFVfSFdfQkxLX01BWDsgdHlwZSsrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxrLCAmcm0t Pmh3X2Jsa3NbdHlwZV0sIGxpc3QpIHsKLQkJCWlmIChibGstPnJzdnBfbnh0KSB7Ci0JCQkJYmxr LT5yc3ZwID0gYmxrLT5yc3ZwX254dDsKLQkJCQlibGstPnJzdnBfbnh0ID0gTlVMTDsKLQkJCX0K LQkJfQorCW11dGV4X2xvY2soJnJtLT5ybV9sb2NrKTsKKworCW51bV9yZWxlYXNlZCA9IF9kcHVf cm1fcmVsZWFzZV9sbXMocm0sIHN0YXRlKTsKKwlpZiAobnVtX3JlbGVhc2VkICE9IHN0YXRlLT5u dW1fbWl4ZXJzKSB7CisJCURQVV9FUlJPUigKKwkJImxtIHJlbGVhc2UgY291bnQgZG9lc24ndCBt YXRjaCBmb3IgY3J0YzogJWQgKCVkICE9ICVkKVxuIiwKKwkJCWdldF9jcnRjX2lkKHN0YXRlKSwg bnVtX3JlbGVhc2VkLCBzdGF0ZS0+bnVtX21peGVycyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290 byByZWxlYXNlX2RvbmU7CiAJfQogCi0JaWYgKCFyZXQpIHsKLQkJRFBVX0RFQlVHKCJyc3J2IGVu YyAlZCB0b3BvbG9neSAlZFxuIiwgcnN2cC0+ZW5jX2lkLAotCQkJCXJzdnAtPnRvcG9sb2d5KTsK LQkJRFBVX0VWVDMyKHJzdnAtPmVuY19pZCwgcnN2cC0+dG9wb2xvZ3kpOworCW51bV9yZWxlYXNl ZCA9IF9kcHVfcm1fcmVsZWFzZV9od19ibGsocm0sIHN0YXRlLCBEUFVfSFdfQkxLX0NUTCk7CisJ aWYgKG51bV9yZWxlYXNlZCAhPSBzdGF0ZS0+bnVtX2N0bHMpIHsKKwkJRFBVX0VSUk9SKAorCQki bG0gcmVsZWFzZSBjb3VudCBkb2Vzbid0IG1hdGNoIGZvciBjcnRjOiAlZCAoJWQgIT0gJWQpXG4i LAorCQkJZ2V0X2NydGNfaWQoc3RhdGUpLCBudW1fcmVsZWFzZWQsIHN0YXRlLT5udW1fY3Rscyk7 CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byByZWxlYXNlX2RvbmU7CiAJfQorIHJlbGVhc2VfZG9u ZToKKwltdXRleF91bmxvY2soJnJtLT5ybV9sb2NrKTsKIAotCXJldHVybiByZXQ7CisJc3RhdGUt Pm51bV9taXhlcnMgPSAwOworCXN0YXRlLT5udW1fY3RscyA9IDA7CisJbWVtc2V0KCZzdGF0ZS0+ bWl4ZXJzLCAwLCBzaXplb2Yoc3RhdGUtPm1peGVycykpOworCW1lbXNldCgmc3RhdGUtPmh3X2N0 bHMsIDAsIHNpemVvZihzdGF0ZS0+aHdfY3RscykpOworCisJcmV0dXJuIHJjOwogfQogCi1pbnQg ZHB1X3JtX3Jlc2VydmUoCi0JCXN0cnVjdCBkcHVfcm0gKnJtLAotCQlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuYywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQlzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKLQkJc3RydWN0IG1zbV9kaXNwbGF5X3Rv cG9sb2d5IHRvcG9sb2d5LAotCQlib29sIHRlc3Rfb25seSkKK2ludCBkcHVfcm1fcmVzZXJ2ZV9l bmNvZGVyX3JlcygKKwlzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9jcnRjX3N0YXRlICpz dGF0ZSwKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfaHdfcmVzb3VyY2VzICpod19yZXMpCiB7Ci0Jc3Ry dWN0IGRwdV9ybV9yc3ZwICpyc3ZwX2N1ciwgKnJzdnBfbnh0OwotCXN0cnVjdCBkcHVfcm1fcmVx dWlyZW1lbnRzIHJlcXM7Ci0JaW50IHJldDsKLQotCWlmICghcm0gfHwgIWVuYyB8fCAhY3J0Y19z dGF0ZSB8fCAhY29ubl9zdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRzXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogQ2hlY2sgaWYgdGhpcyBpcyBqdXN0IGEg cGFnZS1mbGlwICovCi0JaWYgKCFkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0 YXRlKSkKLQkJcmV0dXJuIDA7Ci0KLQlEUFVfREVCVUcoInJlc2VydmluZyBodyBmb3IgY29ubiAl ZCBlbmMgJWQgY3J0YyAlZCB0ZXN0X29ubHkgJWRcbiIsCi0JCQljb25uX3N0YXRlLT5jb25uZWN0 b3ItPmJhc2UuaWQsIGVuYy0+YmFzZS5pZCwKLQkJCWNydGNfc3RhdGUtPmNydGMtPmJhc2UuaWQs IHRlc3Rfb25seSk7Ci0JRFBVX0VWVDMyKGVuYy0+YmFzZS5pZCwgY29ubl9zdGF0ZS0+Y29ubmVj dG9yLT5iYXNlLmlkKTsKKwlpbnQgcmMgPSAwOwogCiAJbXV0ZXhfbG9jaygmcm0tPnJtX2xvY2sp OwogCi0JX2RwdV9ybV9wcmludF9yc3ZwcyhybSwgRFBVX1JNX1NUQUdFX0JFR0lOKTsKKwlyYyA9 IF9kcHVfcm1fcmVzZXJ2ZV9pbnRmX3JlbGF0ZWRfaHcocm0sIHN0YXRlLCBod19yZXMpOworCWlm IChyYykKKwkJRFBVX0VSUk9SKCJ1bmFibGUgdG8gYWxsb2NhdGUgaW50ZiBmb3IgY3J0YzogJWRc biIsCisJCQkJZ2V0X2NydGNfaWQoc3RhdGUpKTsKIAotCXJldCA9IF9kcHVfcm1fcG9wdWxhdGVf cmVxdWlyZW1lbnRzKHJtLCBlbmMsIGNydGNfc3RhdGUsCi0JCQljb25uX3N0YXRlLCAmcmVxcywg dG9wb2xvZ3kpOwotCWlmIChyZXQpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gcG9wdWxhdGUg aHcgcmVxdWlyZW1lbnRzXG4iKTsKLQkJZ290byBlbmQ7Ci0JfQorCW11dGV4X3VubG9jaygmcm0t PnJtX2xvY2spOwogCi0JLyoKLQkgKiBXZSBvbmx5IHN1cHBvcnQgb25lIGFjdGl2ZSByZXNlcnZh dGlvbiBwZXItaHctYmxvY2suIEJ1dCB0byBpbXBsZW1lbnQKLQkgKiB0cmFuc2FjdGlvbmFsIHNl bWFudGljcyBmb3IgdGVzdC1vbmx5LCBhbmQgZm9yIGFsbG93aW5nIGZhaWx1cmUgd2hpbGUKLQkg KiBtb2RpZnlpbmcgeW91ciBleGlzdGluZyByZXNlcnZhdGlvbiwgb3ZlciB0aGUgY291cnNlIG9m IHRoaXMKLQkgKiBmdW5jdGlvbiB3ZSBjYW4gaGF2ZSB0d28gcmVzZXJ2YXRpb25zOgotCSAqIEN1 cnJlbnQ6IEV4aXN0aW5nIHJlc2VydmF0aW9uCi0JICogTmV4dDogUHJvcG9zZWQgcmVzZXJ2YXRp b24uIFRoZSBwcm9wb3NlZCByZXNlcnZhdGlvbiBtYXkgZmFpbCwgb3IgbWF5Ci0JICogICAgICAg YmUgZGlzY2FyZGVkIGlmIGluIHRlc3Qtb25seSBtb2RlLgotCSAqIElmIHJlc2VydmF0aW9uIGlz IHN1Y2Nlc3NmdWwsIGFuZCB3ZSdyZSBub3QgaW4gdGVzdC1vbmx5LCB0aGVuIHdlCi0JICogcmVw bGFjZSB0aGUgY3VycmVudCB3aXRoIHRoZSBuZXh0LgotCSAqLwotCXJzdnBfbnh0ID0ga3phbGxv YyhzaXplb2YoKnJzdnBfbnh0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyc3ZwX254dCkgewotCQly ZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVuZDsKLQl9CisJcmV0dXJuIHJjOworfQogCi0JcnN2cF9j dXIgPSBfZHB1X3JtX2dldF9yc3ZwKHJtLCBlbmMpOwotCi0JLyoKLQkgKiBVc2VyIGNhbiByZXF1 ZXN0IHRoYXQgd2UgY2xlYXIgb3V0IGFueSByZXNlcnZhdGlvbiBkdXJpbmcgdGhlCi0JICogYXRv bWljX2NoZWNrIHBoYXNlIGJ5IHVzaW5nIHRoaXMgQ0xFQVIgYml0Ci0JICovCi0JaWYgKHJzdnBf Y3VyICYmIHRlc3Rfb25seSAmJiBSTV9SUV9DTEVBUigmcmVxcykpIHsKLQkJRFBVX0RFQlVHKCJ0 ZXN0X29ubHkgJiBDTEVBUjogY2xlYXIgcnN2cFtzJWRlJWRdXG4iLAotCQkJCXJzdnBfY3VyLT5z ZXEsIHJzdnBfY3VyLT5lbmNfaWQpOwotCQlfZHB1X3JtX3JlbGVhc2VfcnN2cChybSwgcnN2cF9j dXIsIGNvbm5fc3RhdGUtPmNvbm5lY3Rvcik7Ci0JCXJzdnBfY3VyID0gTlVMTDsKLQkJX2RwdV9y bV9wcmludF9yc3ZwcyhybSwgRFBVX1JNX1NUQUdFX0FGVEVSX0NMRUFSKTsKLQl9CitpbnQgZHB1 X3JtX3JlbGVhc2VfZW5jb2Rlcl9yZXMoc3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfY3J0 Y19zdGF0ZSAqc3RhdGUpCit7CisJaW50IG51bV9yZWxlYXNlZDsKKwlpbnQgcmMgPSAwOwogCi0J LyogQ2hlY2sgdGhlIHByb3Bvc2VkIHJlc2VydmF0aW9uLCBzdG9yZSBpdCBpbiBodydzICJuZXh0 IiBmaWVsZCAqLwotCXJldCA9IF9kcHVfcm1fbWFrZV9uZXh0X3JzdnAocm0sIGVuYywgY3J0Y19z dGF0ZSwgY29ubl9zdGF0ZSwKLQkJCXJzdnBfbnh0LCAmcmVxcyk7Ci0KLQlfZHB1X3JtX3ByaW50 X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfQUZURVJfUlNWUE5FWFQpOwotCi0JaWYgKHJldCkgewot CQlEUFVfRVJST1IoImZhaWxlZCB0byByZXNlcnZlIGh3IHJlc291cmNlczogJWRcbiIsIHJldCk7 Ci0JCV9kcHVfcm1fcmVsZWFzZV9yc3ZwKHJtLCByc3ZwX254dCwgY29ubl9zdGF0ZS0+Y29ubmVj dG9yKTsKLQl9IGVsc2UgaWYgKHRlc3Rfb25seSAmJiAhUk1fUlFfTE9DSygmcmVxcykpIHsKLQkJ LyoKLQkJICogTm9ybWFsbHksIGlmIHRlc3Rfb25seSwgdGVzdCB0aGUgcmVzZXJ2YXRpb24gYW5k IHRoZW4gdW5kbwotCQkgKiBIb3dldmVyLCBpZiB0aGUgdXNlciByZXF1ZXN0cyBMT0NLLCB0aGVu IGtlZXAgdGhlIHJlc2VydmF0aW9uCi0JCSAqIG1hZGUgZHVyaW5nIHRoZSBhdG9taWNfY2hlY2sg cGhhc2UuCi0JCSAqLwotCQlEUFVfREVCVUcoInRlc3Rfb25seTogZGlzY2FyZCB0ZXN0IHJzdnBb cyVkZSVkXVxuIiwKLQkJCQlyc3ZwX254dC0+c2VxLCByc3ZwX254dC0+ZW5jX2lkKTsKLQkJX2Rw dV9ybV9yZWxlYXNlX3JzdnAocm0sIHJzdnBfbnh0LCBjb25uX3N0YXRlLT5jb25uZWN0b3IpOwot CX0gZWxzZSB7Ci0JCWlmICh0ZXN0X29ubHkgJiYgUk1fUlFfTE9DSygmcmVxcykpCi0JCQlEUFVf REVCVUcoInRlc3Rfb25seSAmIExPQ0s6IGxvY2sgcnN2cFtzJWRlJWRdXG4iLAotCQkJCQlyc3Zw X254dC0+c2VxLCByc3ZwX254dC0+ZW5jX2lkKTsKLQotCQlfZHB1X3JtX3JlbGVhc2VfcnN2cChy bSwgcnN2cF9jdXIsIGNvbm5fc3RhdGUtPmNvbm5lY3Rvcik7Ci0KLQkJcmV0ID0gX2RwdV9ybV9j b21taXRfcnN2cChybSwgcnN2cF9ueHQsIGNvbm5fc3RhdGUpOwotCX0KKwltdXRleF9sb2NrKCZy bS0+cm1fbG9jayk7CiAKLQlfZHB1X3JtX3ByaW50X3JzdnBzKHJtLCBEUFVfUk1fU1RBR0VfRklO QUwpOworCW51bV9yZWxlYXNlZCA9IF9kcHVfcm1fcmVsZWFzZV9od19ibGsocm0sIHN0YXRlLCBE UFVfSFdfQkxLX0lOVEYpOworCWlmIChudW1fcmVsZWFzZWQgIT0gc3RhdGUtPm51bV9pbnRmcykg eworCQlEUFVfRVJST1IoCisJCSJpbnRmIHJlbGVhc2UgY291bnQgZG9lc24ndCBtYXRjaCBmb3Ig Y3J0YzogJWQgKCVkICE9ICVkKVxuIiwKKwkJCWdldF9jcnRjX2lkKHN0YXRlKSwgbnVtX3JlbGVh c2VkLCBzdGF0ZS0+bnVtX2ludGZzKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KIAotZW5kOgogCW11 dGV4X3VubG9jaygmcm0tPnJtX2xvY2spOwogCi0JcmV0dXJuIHJldDsKKwlzdGF0ZS0+bnVtX2lu dGZzID0gMDsKKwltZW1zZXQoJnN0YXRlLT5od19pbnRmcywgMCwgc2l6ZW9mKHN0YXRlLT5od19p bnRmcykpOworCisJcmV0dXJuIHJjOwogfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcm0uaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9ybS5oCmluZGV4IGVmM2Y2N2IuLmZhMmNkNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9ybS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9ybS5oCkBAIC0xNiw2MSArMTYsMjYgQEAKICNkZWZpbmUgX19EUFVfUk1fSF9fCiAK ICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0KICNpbmNsdWRlICJtc21fa21zLmgiCiAjaW5jbHVk ZSAiZHB1X2h3X3RvcC5oIgotCi0vKioKLSAqIGVudW0gZHB1X3JtX3RvcG9sb2d5X25hbWUgLSBI VyByZXNvdXJjZSB1c2UgY2FzZSBpbiB1c2UgYnkgY29ubmVjdG9yCi0gKiBARFBVX1JNX1RPUE9M T0dZX05PTkU6ICAgICAgICAgICAgICAgICBObyB0b3BvbG9neSBpbiB1c2UgY3VycmVudGx5Ci0g KiBARFBVX1JNX1RPUE9MT0dZX1NJTkdMRVBJUEU6ICAgICAgICAgICAxIExNLCAxIFBQLCAxIElO VEYvV0IKLSAqIEBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEU6ICAgICAgICAgICAgIDIgTE0sIDIg UFAsIDIgSU5URi9XQgotICogQERQVV9STV9UT1BPTE9HWV9EVUFMUElQRV8zRE1FUkdFOiAgICAg MiBMTSwgMiBQUCwgM0RNdXgsIDEgSU5URi9XQgotICovCi1lbnVtIGRwdV9ybV90b3BvbG9neV9u YW1lIHsKLQlEUFVfUk1fVE9QT0xPR1lfTk9ORSA9IDAsCi0JRFBVX1JNX1RPUE9MT0dZX1NJTkdM RVBJUEUsCi0JRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFLAotCURQVV9STV9UT1BPTE9HWV9EVUFM UElQRV8zRE1FUkdFLAotCURQVV9STV9UT1BPTE9HWV9NQVgsCi19OwotCi0vKioKLSAqIGVudW0g ZHB1X3JtX3RvcG9sb2d5X2NvbnRyb2wgLSBIVyByZXNvdXJjZSB1c2UgY2FzZSBpbiB1c2UgYnkg Y29ubmVjdG9yCi0gKiBARFBVX1JNX1RPUENUTF9SRVNFUlZFX0xPQ0s6IElmIHNldCwgaW4gQXRv bWljVGVzdCBwaGFzZSwgYWZ0ZXIgYSBzdWNjZXNzZnVsCi0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRlc3QsIHJlc2VydmUgdGhlIHJlc291cmNlcyBmb3IgdGhpcyBkaXNwbGF5Lgot ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3JtYWwgYmVoYXZpb3Igd291bGQgbm90 IGltcGFjdCB0aGUgcmVzZXJ2YXRpb24KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlzdCBkdXJpbmcgdGhlIEF0b21pY1Rlc3QgcGhhc2UuCi0gKiBARFBVX1JNX1RPUENUTF9SRVNF UlZFX0NMRUFSOiBJZiBzZXQsIGluIEF0b21pY1Rlc3QgcGhhc2UsIGJlZm9yZSB0ZXN0aW5nLAot ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSBhbnkgcmVzZXJ2YXRpb24g aGVsZCBieSB0aGlzIGRpc3BsYXkuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO b3JtYWwgYmVoYXZpb3Igd291bGQgbm90IGltcGFjdCB0aGUKLSAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlc2VydmF0aW9uIGxpc3QgZHVyaW5nIHRoZSBBdG9taWNUZXN0IHBoYXNl LgotICogQERQVV9STV9UT1BDVExfRFMgIDogUmVxdWlyZSBsYXllciBtaXhlcnMgd2l0aCBEUyBj YXBhYmlsaXRpZXMKLSAqLwotZW51bSBkcHVfcm1fdG9wb2xvZ3lfY29udHJvbCB7Ci0JRFBVX1JN X1RPUENUTF9SRVNFUlZFX0xPQ0ssCi0JRFBVX1JNX1RPUENUTF9SRVNFUlZFX0NMRUFSLAotCURQ VV9STV9UT1BDVExfRFMsCi19OworI2luY2x1ZGUgImRwdV9jcnRjLmgiCisjaW5jbHVkZSAiZHB1 X2VuY29kZXIuaCIKIAogLyoqCiAgKiBzdHJ1Y3QgZHB1X3JtIC0gRFBVIGR5bmFtaWMgaGFyZHdh cmUgcmVzb3VyY2UgbWFuYWdlcgotICogQGRldjogZGV2aWNlIGhhbmRsZSBmb3IgZXZlbnQgbG9n Z2luZyBwdXJwb3NlcwotICogQHJzdnBzOiBsaXN0IG9mIGhhcmR3YXJlIHJlc2VydmF0aW9ucyBi eSBlYWNoIGNydGMtPmVuY29kZXItPmNvbm5lY3RvcgorICogQGh3X2Jsa3NfbGVuIC0gbnVtYmVy IG9mIGh3IGJsb2NrcyBwZXIgdHlwZQogICogQGh3X2Jsa3M6IGFycmF5IG9mIGxpc3RzIG9mIGhh cmR3YXJlIHJlc291cmNlcyBwcmVzZW50IGluIHRoZSBzeXN0ZW0sIG9uZQogICoJbGlzdCBwZXIg dHlwZSBvZiBoYXJkd2FyZSBibG9jaworICogQGh3X2RybV9tYXAgLSBhcnJheSB0byB0cmFjayBl YWNoIGh3IGJsb2NrIHR5cGUgYXNzaWdubWVudHMKICAqIEBod19tZHA6IGhhcmR3YXJlIG9iamVj dCBmb3IgbWRwX3RvcAogICogQGxtX21heF93aWR0aDogY2FjaGVkIGxheWVyIG1peGVyIG1heGlt dW0gd2lkdGgKLSAqIEByc3ZwX25leHRfc2VxOiBzZXF1ZW5jZSBudW1iZXIgZm9yIG5leHQgcmVz ZXJ2YXRpb24gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcwogICogQHJtX2xvY2s6IHJlc291cmNlIG1h bmFnZXIgbXV0ZXgKICAqLwogc3RydWN0IGRwdV9ybSB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRl djsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJzdnBzOwotCXN0cnVjdCBsaXN0X2hlYWQgaHdfYmxrc1tE UFVfSFdfQkxLX01BWF07CisJdWludDMyX3QgaHdfYmxrc19sZW5bRFBVX0hXX0JMS19NQVhdOwor CXN0cnVjdCBkcHVfcm1faHdfYmxrICpod19ibGtzW0RQVV9IV19CTEtfTUFYXVtNQVhfQkxPQ0tT XTsKKwlpbnQgaHdfZHJtX21hcFtEUFVfSFdfQkxLX01BWF1bTUFYX0JMT0NLU107CiAJc3RydWN0 IGRwdV9od19tZHAgKmh3X21kcDsKLQl1aW50MzJfdCBsbV9tYXhfd2lkdGg7Ci0JdWludDMyX3Qg cnN2cF9uZXh0X3NlcTsKIAlzdHJ1Y3QgbXV0ZXggcm1fbG9jazsKIH07CiAKQEAgLTkwLDIzICs1 NSwyOCBAQCBzdHJ1Y3QgZHB1X3JtIHsKIHN0cnVjdCBkcHVfcm1faHdfaXRlciB7CiAJdm9pZCAq aHc7CiAJc3RydWN0IGRwdV9ybV9od19ibGsgKmJsazsKLQl1aW50MzJfdCBlbmNfaWQ7CisJdWlu dDMyX3QgZHJtX2lkOwogCWVudW0gZHB1X2h3X2Jsa190eXBlIHR5cGU7CisJdWludDMyX3QgaW5k ZXg7CiB9OwogCiAvKioKKyAqIGRwdV9ybV9wcmludF9zdGF0ZSAtIHByaW50cyBjdXJyZW50IFJN IHN0YXRlIG9uIHJlc291cmNlIHBvb2wKKyAqIEBybTogRFBVIFJlc291cmNlIE1hbmFnZXIgaGFu ZGxlCisgKi8KK3ZvaWQgZHB1X3JtX3ByaW50X3N0YXRlKHN0cnVjdCBkcHVfcm0gKnJtKTsKKwor LyoqCiAgKiBkcHVfcm1faW5pdCAtIFJlYWQgaGFyZHdhcmUgY2F0YWxvZyBhbmQgY3JlYXRlIHJl c2VydmF0aW9uIHRyYWNraW5nIG9iamVjdHMKICAqCWZvciBhbGwgSFcgYmxvY2tzLgogICogQHJt OiBEUFUgUmVzb3VyY2UgTWFuYWdlciBoYW5kbGUKICAqIEBjYXQ6IFBvaW50ZXIgdG8gaGFyZHdh cmUgY2F0YWxvZwogICogQG1taW86IG1hcHBlZCByZWdpc3RlciBpbyBhZGRyZXNzIG9mIE1EUAot ICogQGRldjogZGV2aWNlIGhhbmRsZSBmb3IgZXZlbnQgbG9nZ2luZyBwdXJwb3NlcwogICogQFJl dHVybjogMCBvbiBTdWNjZXNzIG90aGVyd2lzZSAtRVJST1IKICAqLwogaW50IGRwdV9ybV9pbml0 KHN0cnVjdCBkcHVfcm0gKnJtLAogCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXQsCi0JCXZvaWQg Km1taW8sCi0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCQl2b2lkICptbWlvKTsKIAogLyoq CiAgKiBkcHVfcm1fZGVzdHJveSAtIEZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgZHB1X3Jt X2luaXQKQEAgLTExNiw4NCArODYsNDcgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0g KnJtLAogaW50IGRwdV9ybV9kZXN0cm95KHN0cnVjdCBkcHVfcm0gKnJtKTsKIAogLyoqCi0gKiBk cHVfcm1fcmVzZXJ2ZSAtIEdpdmVuIGEgQ1JUQy0+RW5jb2Rlci0+Q29ubmVjdG9yIGRpc3BsYXkg Y2hhaW4sIGFuYWx5emUKLSAqCXRoZSB1c2UgY29ubmVjdGlvbnMgYW5kIHVzZXIgcmVxdWlyZW1l bnRzLCBzcGVjaWZpZWQgdGhyb3VnaCByZWxhdGVkCi0gKgl0b3BvbG9neSBjb250cm9sIHByb3Bl cnRpZXMsIGFuZCByZXNlcnZlIGhhcmR3YXJlIGJsb2NrcyB0byB0aGF0Ci0gKglkaXNwbGF5IGNo YWluLgotICoJSFcgYmxvY2tzIGNhbiB0aGVuIGJlIGFjY2Vzc2VkIHRocm91Z2ggZHB1X3JtX2dl dF8qIGZ1bmN0aW9ucy4KLSAqCUhXIFJlc2VydmF0aW9ucyBzaG91bGQgYmUgcmVsZWFzZWQgdmlh IGRwdV9ybV9yZWxlYXNlX2h3LgorICogZHB1X3JtX3Jlc2VydmVfY3J0Y19yZXMgLSBSZXNlcnZl IEhXIGJsb2NrcyBmb3IgQ1JUQwogICogQHJtOiBEUFUgUmVzb3VyY2UgTWFuYWdlciBoYW5kbGUK LSAqIEBkcm1fZW5jOiBEUk0gRW5jb2RlciBoYW5kbGUKLSAqIEBjcnRjX3N0YXRlOiBQcm9wb3Nl ZCBBdG9taWMgRFJNIENSVEMgU3RhdGUgaGFuZGxlCi0gKiBAY29ubl9zdGF0ZTogUHJvcG9zZWQg QXRvbWljIERSTSBDb25uZWN0b3IgU3RhdGUgaGFuZGxlCi0gKiBAdG9wb2xvZ3k6IFBvaW50ZXIg dG8gdG9wb2xvZ3kgaW5mbyBmb3IgdGhlIGRpc3BsYXkKLSAqIEB0ZXN0X29ubHk6IEF0b21pYy1U ZXN0IHBoYXNlLCBkaXNjYXJkIHJlc3VsdHMgKHVubGVzcyBwcm9wZXJ0eSBvdmVycmlkZXMpCi0g KiBAUmV0dXJuOiAwIG9uIFN1Y2Nlc3Mgb3RoZXJ3aXNlIC1FUlJPUgorICogQHN0YXRlOiBEUFUg Q1JUQyBzdGF0ZSB0byBjYWNoZSBIVyBibG9jayBoYW5kbGVzCisgKiBAdG9wb2xvZ3k6IHRvcG9s b2d5IHJlcXVpcmVtZW50IGZvciB0aGUgZGlzcGxheQorICogQFJldHVybjogMCBvbiBTdWNjZXNz IG90aGVyd2lzZSAtIEVSUk9SCiAgKi8KLWludCBkcHVfcm1fcmVzZXJ2ZShzdHJ1Y3QgZHB1X3Jt ICpybSwKLQkJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAotCQlzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCi0JCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0 YXRlLAotCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xvZ3kgdG9wb2xvZ3ksCi0JCWJvb2wgdGVz dF9vbmx5KTsKK2ludCBkcHVfcm1fcmVzZXJ2ZV9jcnRjX3JlcyhzdHJ1Y3QgZHB1X3JtICpybSwg c3RydWN0IGRwdV9jcnRjX3N0YXRlICpzdGF0ZSwKKwkJc3RydWN0IGRwdV9jcnRjX3RvcG9sb2d5 ICp0b3BvbG9neSk7CiAKIC8qKgotICogZHB1X3JtX3Jlc2VydmUgLSBHaXZlbiB0aGUgZW5jb2Rl ciBmb3IgdGhlIGRpc3BsYXkgY2hhaW4sIHJlbGVhc2UgYW55Ci0gKglIVyBibG9ja3MgcHJldmlv dXNseSByZXNlcnZlZCBmb3IgdGhhdCB1c2UgY2FzZS4KKyAqIGRwdV9ybV9yZWxlYXNlX2NydGNf cmVzIC0gUmVsZWFzZSBIVyBibG9ja3Mgb2YgdGhlIENSVEMKICAqIEBybTogRFBVIFJlc291cmNl IE1hbmFnZXIgaGFuZGxlCi0gKiBAZW5jOiBEUk0gRW5jb2RlciBoYW5kbGUKLSAqIEBSZXR1cm46 IDAgb24gU3VjY2VzcyBvdGhlcndpc2UgLUVSUk9SCisgKiBAc3RhdGU6IERQVSBDUlRDIHN0YXRl IHRvIGNhY2hlIEhXIGJsb2NrIGhhbmRsZXMKKyAqIEBSZXR1cm46IDAgb24gU3VjY2VzcyBvdGhl cndpc2UgLSBFUlJPUgogICovCi12b2lkIGRwdV9ybV9yZWxlYXNlKHN0cnVjdCBkcHVfcm0gKnJt LCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYyk7CitpbnQgZHB1X3JtX3JlbGVhc2VfY3J0Y19yZXMo c3RydWN0IGRwdV9ybSAqcm0sIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3RhdGUpOwogCiAvKioK LSAqIGRwdV9ybV9nZXRfbWRwIC0gUmV0cmlldmUgSFcgYmxvY2sgZm9yIE1EUCBUT1AuCi0gKglU aGlzIGlzIG5ldmVyIHJlc2VydmVkLCBhbmQgaXMgdXNhYmxlIGJ5IGFueSBkaXNwbGF5LgorICog ZHB1X3JtX3Jlc2VydmVfZW5jb2Rlcl9yZXMgLSBSZXNlcnZlIEhXIGJsb2NrcyBmb3IgRW5jb2Rl ci9Db25uZWN0b3IKICAqIEBybTogRFBVIFJlc291cmNlIE1hbmFnZXIgaGFuZGxlCi0gKiBAUmV0 dXJuOiBQb2ludGVyIHRvIGh3IGJsb2NrIG9yIE5VTEwKKyAqIEBzdGF0ZTogRFBVIENSVEMgc3Rh dGUgdG8gY2FjaGUgSFcgYmxvY2sgaGFuZGxlcworICogQGh3X3JlczogaW50ZXJmYWNlIGJsb2Nr IHJlbGF0ZWQgaW5mbworICogQFJldHVybjogMCBvbiBTdWNjZXNzIG90aGVyd2lzZSAtIEVSUk9S CiAgKi8KLXN0cnVjdCBkcHVfaHdfbWRwICpkcHVfcm1fZ2V0X21kcChzdHJ1Y3QgZHB1X3JtICpy bSk7CitpbnQgZHB1X3JtX3Jlc2VydmVfZW5jb2Rlcl9yZXMoc3RydWN0IGRwdV9ybSAqcm0sIHN0 cnVjdCBkcHVfY3J0Y19zdGF0ZSAqc3RhdGUsCisJCXN0cnVjdCBkcHVfZW5jb2Rlcl9od19yZXNv dXJjZXMgKmh3X3Jlcyk7CiAKIC8qKgotICogZHB1X3JtX2luaXRfaHdfaXRlciAtIHNldHVwIGdp dmVuIGl0ZXJhdG9yIGZvciBuZXcgaXRlcmF0aW9uIG92ZXIgaHcgbGlzdAotICoJdXNpbmcgZHB1 X3JtX2dldF9odwotICogQGl0ZXI6IGl0ZXIgb2JqZWN0IHRvIGluaXRpYWxpemUKLSAqIEBlbmNf aWQ6IERSTSBJRCBvZiBFbmNvZGVyIGNsaWVudCB3aXNoZXMgdG8gc2VhcmNoIGZvciwgb3IgMCBm b3IgQW55IEVuY29kZXIKLSAqIEB0eXBlOiBIYXJkd2FyZSBCbG9jayBUeXBlIGNsaWVudCB3aXNo ZXMgdG8gc2VhcmNoIGZvci4KLSAqLwotdm9pZCBkcHVfcm1faW5pdF9od19pdGVyKAotCQlzdHJ1 Y3QgZHB1X3JtX2h3X2l0ZXIgKml0ZXIsCi0JCXVpbnQzMl90IGVuY19pZCwKLQkJZW51bSBkcHVf aHdfYmxrX3R5cGUgdHlwZSk7Ci0vKioKLSAqIGRwdV9ybV9nZXRfaHcgLSByZXRyaWV2ZSByZXNl cnZlZCBodyBvYmplY3QgZ2l2ZW4gZW5jb2RlciBhbmQgaHcgdHlwZQotICoJTWVhbnQgdG8gZG8g YSBzaW5nbGUgcGFzcyB0aHJvdWdoIHRoZSBoYXJkd2FyZSBsaXN0IHRvIGl0ZXJhdGl2ZWx5Ci0g KglyZXRyaWV2ZSBoYXJkd2FyZSBibG9ja3Mgb2YgYSBnaXZlbiB0eXBlIGZvciBhIGdpdmVuIGVu Y29kZXIuCi0gKglJbml0aWFsaXplIGFuIGl0ZXJhdG9yIG9iamVjdC4KLSAqCVNldCBodyBibG9j ayB0eXBlIG9mIGludGVyZXN0LiBTZXQgZW5jb2RlciBpZCBvZiBpbnRlcmVzdCwgMCBmb3IgYW55 LgotICoJRnVuY3Rpb24gcmV0dXJucyBmaXJzdCBodyBvZiB0eXBlIGZvciB0aGF0IGVuY29kZXIu Ci0gKglTdWJzZXF1ZW50IGNhbGxzIHdpbGwgcmV0dXJuIHRoZSBuZXh0IHJlc2VydmVkIGh3IG9m IHRoYXQgdHlwZSBpbi1vcmRlci4KLSAqCUl0ZXJhdG9yIEhXIHBvaW50ZXIgd2lsbCBiZSBudWxs IG9uIGZhaWx1cmUgdG8gZmluZCBody4KKyAqIGRwdV9ybV9yZWxlYXNlX2VuY29kZXJfcmVzIC0g UmVsZWFzZSBIVyBibG9ja3Mgb2YgdGhlIEVuY29kZXIvQ29ubmVjdG9yCiAgKiBAcm06IERQVSBS ZXNvdXJjZSBNYW5hZ2VyIGhhbmRsZQotICogQGl0ZXI6IGl0ZXJhdG9yIG9iamVjdAotICogQFJl dHVybjogdHJ1ZSBvbiBtYXRjaCBmb3VuZCwgZmFsc2Ugb24gbm8gbWF0Y2ggZm91bmQKKyAqIEBz dGF0ZTogRFBVIENSVEMgc3RhdGUgdG8gY2FjaGUgSFcgYmxvY2sgaGFuZGxlcworICogQFJldHVy bjogMCBvbiBTdWNjZXNzIG90aGVyd2lzZSAtIEVSUk9SCiAgKi8KLWJvb2wgZHB1X3JtX2dldF9o dyhzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9ybV9od19pdGVyICppdGVyKTsKK2ludCBk cHVfcm1fcmVsZWFzZV9lbmNvZGVyX3JlcyhzdHJ1Y3QgZHB1X3JtICpybSwgc3RydWN0IGRwdV9j cnRjX3N0YXRlICpzdGF0ZSk7CiAKIC8qKgotICogZHB1X3JtX2NoZWNrX3Byb3BlcnR5X3RvcGN0 bCAtIHZhbGlkYXRlIHByb3BlcnR5IGJpdG1hc2sgYmVmb3JlIGl0IGlzIHNldAotICogQHZhbDog dXNlcidzIHByb3Bvc2VkIHRvcG9sb2d5IGNvbnRyb2wgYml0bWFzawotICogQFJldHVybjogMCBv biBzdWNjZXNzIG9yIGVycm9yCi0gKi8KLWludCBkcHVfcm1fY2hlY2tfcHJvcGVydHlfdG9wY3Rs KHVpbnQ2NF90IHZhbCk7Ci0KLS8qKgotICogZHB1X3JtX2dldF90b3BvbG9neV9uYW1lIC0gcmV0 dXJucyB0aGUgbmFtZSBvZiB0aGUgdGhlIGdpdmVuIHRvcG9sb2d5Ci0gKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZWZpbml0aW9uCi0gKiBAdG9wb2xvZ3k6IHRvcG9sb2d5IGRlZmluaXRp b24KLSAqIEBSZXR1cm46IG5hbWUgb2YgdGhlIHRvcG9sb2d5CisgKiBkcHVfcm1fZ2V0X21kcCAt IFJldHJpZXZlIEhXIGJsb2NrIGZvciBNRFAgVE9QLgorICoJVGhpcyBpcyBuZXZlciByZXNlcnZl ZCwgYW5kIGlzIHVzYWJsZSBieSBhbnkgZGlzcGxheS4KKyAqIEBybTogRFBVIFJlc291cmNlIE1h bmFnZXIgaGFuZGxlCisgKiBAUmV0dXJuOiBQb2ludGVyIHRvIGh3IGJsb2NrIG9yIE5VTEwKICAq LwotZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZQotZHB1X3JtX2dldF90b3BvbG9neV9uYW1lKHN0 cnVjdCBtc21fZGlzcGxheV90b3BvbG9neSB0b3BvbG9neSk7CitzdHJ1Y3QgZHB1X2h3X21kcCAq ZHB1X3JtX2dldF9tZHAoc3RydWN0IGRwdV9ybSAqcm0pOwogCiAjZW5kaWYgLyogX19EUFVfUk1f SF9fICovCi0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1i ZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3Jh dGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJl bm8K