From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [DPU PATCH v2 11/12] drm/msm/dpu: move dpu_power_handle to dpu folder Date: Fri, 11 May 2018 20:19:37 +0530 Message-ID: <1526050178-31893-12-git-send-email-ryadav@codeaurora.org> References: <1526050178-31893-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1526050178-31893-1-git-send-email-ryadav-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: robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Rajesh Yadav , hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org Tm93LCBzaW5jZSBkcHVfcG93ZXJfaGFuZGxlIG1hbmFnZXMgb25seSBidXMgc2NhbGluZwphbmQg cG93ZXIgZW5hYmxlL2Rpc2FibGUgbm90aWZpY2F0aW9ucyB3aGljaCBhcmUgcmVzdHJpY3RlZAp0 byBkcHUgZHJpdmVyLCBtb3ZlIGRwdV9wb3dlcl9oYW5kbGUgdG8gZHB1IGZvbGRlci4KCkNoYW5n ZXMgaW4gdjI6CgktIHJlc29sdmVkIGNvbmZsaWN0IGluIGRwdV91bmJpbmQKCS0gZHJvcHBlZCAo UmV2aWV3ZWQtYnk6IFNlYW4gUGF1bCkgZHVlIHRvIGFib3ZlIGNoYW5nZQoKU2lnbmVkLW9mZi1i eTogUmFqZXNoIFlhZGF2IDxyeWFkYXZAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUv ZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9pcnEuYyAgICAgfCAgIDEgLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jICAgIHwgICA1ICstCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jICAgICAgICAgfCAgIDcgKy0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggICAgICAgICB8ICAgMiArCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jICAgICAgfCAgIDEgLQogZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jICAgICAgICAgIHwgIDM5ICstCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmggICAgICAgICAgfCAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5jIHwgNjkzICsr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf cG93ZXJfaGFuZGxlLmggfCAyODggKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9kcHVf cG93ZXJfaGFuZGxlLmMgICAgICAgICAgIHwgNjkzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuaCAgICAgICAgICAgfCAyODggLS0t LS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMgICAgICAgICAgICAgICAgICAg IHwgICA5IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICAg ICB8ICAgNCAtCiAxNCBmaWxlcyBjaGFuZ2VkLCAxMDEzIGluc2VydGlvbnMoKyksIDEwMjAgZGVs ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X3Bvd2VyX2hhbmRsZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuaAoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCmlu ZGV4IGQ5ODI2YzEuLmY1NzhkNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQpAQCAtODIsMTAgKzgyLDEw IEBAIG1zbS15IDo9IFwKIAlkaXNwL2RwdTEvZHB1X3JtLm8gXAogCWRpc3AvZHB1MS9kcHVfdmJp Zi5vIFwKIAlkaXNwL2RwdTEvZHB1X21kc3MubyBcCisJZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5k bGUubyBcCiAJZHB1X2RiZy5vIFwKIAlkcHVfaW9fdXRpbC5vIFwKIAlkcHVfZGJnX2V2dGxvZy5v IFwKLQlkcHVfcG93ZXJfaGFuZGxlLm8gXAogCW1zbV9wcm9wLm8gXAogCW1zbV9hdG9taWMubyBc CiAJbXNtX2RlYnVnZnMubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY29yZV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j b3JlX2lycS5jCmluZGV4IDVjNWNjNTYuLjMzYWIyYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9jb3JlX2lycS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8 bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSAiZHB1X2NvcmVfaXJxLmgiCi0jaW5jbHVkZSAi ZHB1X3Bvd2VyX2hhbmRsZS5oIgogCiAvKioKICAqIGRwdV9jb3JlX2lycV9jYWxsYmFja19oYW5k bGVyIC0gZGlzcGF0Y2ggY29yZSBpbnRlcnJ1cHRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKaW5kZXggMmNmM2ZjYS4uZDNhMWVkOSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYwpAQCAtMjU3LDcgKzI1 Nyw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlX2J1cyhzdHJ1Y3Qg ZHB1X2ttcyAqa21zLAogCQkJCQk9IGRwdV9jcnRjX2dldF9jbGllbnRfdHlwZShjcnRjKTsKIAlz dHJ1Y3QgZHJtX2NydGMgKnRtcF9jcnRjOwogCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqZHB1X2Nz dGF0ZTsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0ga21zLT5kZXYtPmRldl9wcml2 YXRlOwogCiAJZHJtX2Zvcl9lYWNoX2NydGModG1wX2NydGMsIGNydGMtPmRldikgewogCQlpZiAo X2RwdV9jb3JlX3BlcmZfY3J0Y19pc19wb3dlcl9vbih0bXBfY3J0YykgJiYKQEAgLTI4Nyw3ICsy ODYsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZV9idXMoc3RydWN0 IGRwdV9rbXMgKmttcywKIAogCXN3aXRjaCAoY3Vycl9jbGllbnRfdHlwZSkgewogCWNhc2UgTlJU X0NMSUVOVDoKLQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgmcHJpdi0+cGhhbmRsZSwg a21zLT5jb3JlX2NsaWVudCwKKwkJZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgma21zLT5w aGFuZGxlLCBrbXMtPmNvcmVfY2xpZW50LAogCQkJCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNf Q0xJRU5UX05SVCwKIAkJCQlidXNfaWQsIGJ1c19hYl9xdW90YSwgYnVzX2liX3F1b3RhKTsKIAkJ RFBVX0RFQlVHKCJjbGllbnQ6JXMgYnVzX2lkPSVkIGFiPSVsbHUgaWI9JWxsdVxuIiwgIm5ydCIs CkBAIC0yOTUsNyArMjk0LDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jb3JlX3BlcmZfY3J0Y191cGRh dGVfYnVzKHN0cnVjdCBkcHVfa21zICprbXMsCiAJCWJyZWFrOwogCiAJY2FzZSBSVF9DTElFTlQ6 Ci0JCWRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoJnByaXYtPnBoYW5kbGUsIGttcy0+Y29y ZV9jbGllbnQsCisJCWRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoJmttcy0+cGhhbmRsZSwg a21zLT5jb3JlX2NsaWVudCwKIAkJCQlEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9S VCwKIAkJCQlidXNfaWQsIGJ1c19hYl9xdW90YSwgYnVzX2liX3F1b3RhKTsKIAkJRFBVX0RFQlVH KCJjbGllbnQ6JXMgYnVzX2lkPSVkIGFiPSVsbHUgaWI9JWxsdVxuIiwgInJ0IiwKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCmluZGV4IGUyZDJlMzIuLjk5YzVlNzUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwpAQCAtNTk4LDYgKzU5OCw3 IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQog CV9kcHVfY3J0Y19kZXN0cm95X2Rlc3Rfc2NhbGVyKGRwdV9jcnRjKTsKIAogCV9kcHVfY3J0Y19k ZWluaXRfZXZlbnRzKGRwdV9jcnRjKTsKKwlkcHVfY3J0Yy0+cGhhbmRsZSA9IE5VTEw7CiAKIAlk cm1fY3J0Y19jbGVhbnVwKGNydGMpOwogCW11dGV4X2Rlc3Ryb3koJmRwdV9jcnRjLT5jcnRjX2xv Y2spOwpAQCAtMjU3Miw3ICsyNTczLDcgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGlzYWJsZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJfQogCiAJaWYgKGRwdV9jcnRjLT5wb3dlcl9ldmVudCkK LQkJZHB1X3Bvd2VyX2hhbmRsZV91bnJlZ2lzdGVyX2V2ZW50KCZwcml2LT5waGFuZGxlLAorCQlk cHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoZHB1X2NydGMtPnBoYW5kbGUsCiAJCQkJ ZHB1X2NydGMtPnBvd2VyX2V2ZW50KTsKIAogCkBAIC0yNjQzLDcgKzI2NDQsNyBAQCBzdGF0aWMg dm9pZCBkcHVfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCW11dGV4X3VubG9j aygmZHB1X2NydGMtPmNydGNfbG9jayk7CiAKIAlkcHVfY3J0Yy0+cG93ZXJfZXZlbnQgPSBkcHVf cG93ZXJfaGFuZGxlX3JlZ2lzdGVyX2V2ZW50KAotCQkmcHJpdi0+cGhhbmRsZSwKKwkJZHB1X2Ny dGMtPnBoYW5kbGUsCiAJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJMRSB8IERQVV9QT1dFUl9F VkVOVF9QT1NUX0RJU0FCTEUgfAogCQlEUFVfUE9XRVJfRVZFTlRfUFJFX0RJU0FCTEUsCiAJCWRw dV9jcnRjX2hhbmRsZV9wb3dlcl9ldmVudCwgY3J0YywgZHB1X2NydGMtPm5hbWUpOwpAQCAtMzkz OCw2ICszOTM5LDggQEAgc3RydWN0IGRybV9jcnRjICpkcHVfY3J0Y19pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCWRwdV9jcF9jcnRjX2luaXQo Y3J0Yyk7CiAJZHB1X2NwX2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKGNydGMpOwogCisJZHB1X2Ny dGMtPnBoYW5kbGUgPSAma21zLT5waGFuZGxlOworCiAJRFBVX0RFQlVHKCIlczogc3VjY2Vzc2Z1 bGx5IGluaXRpYWxpemVkIGNydGNcbiIsIGRwdV9jcnRjLT5uYW1lKTsKIAlyZXR1cm4gY3J0YzsK IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCmluZGV4IDkzMDQwNTgu LjY3MWQ5MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j cnRjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaApAQCAt MTg0LDYgKzE4NCw3IEBAIHN0cnVjdCBkcHVfY3J0Y19ldmVudCB7CiAgKiBAbWlzcl9lbmFibGUg ICA6IGJvb2xlYW4gZW50cnkgaW5kaWNhdGVzIG1pc3IgZW5hYmxlL2Rpc2FibGUgc3RhdHVzLgog ICogQG1pc3JfZnJhbWVfY291bnQgIDogbWlzciBmcmFtZSBjb3VudCBwcm92aWRlZCBieSBjbGll bnQKICAqIEBtaXNyX2RhdGEgICAgIDogc3RvcmUgbWlzciBkYXRhIGJlZm9yZSB0dXJuaW5nIG9m ZiB0aGUgY2xvY2tzLgorICogQHBoYW5kbGU6IFBvaW50ZXIgdG8gcG93ZXIgaGFuZGxlcgogICog QHBvd2VyX2V2ZW50ICAgOiByZWdpc3RlcmVkIHBvd2VyIGV2ZW50IGhhbmRsZQogICogQGN1cl9w ZXJmICAgICAgOiBjdXJyZW50IHBlcmZvcm1hbmNlIGNvbW1pdHRlZCB0byBjbG9jay9iYW5kd2lk dGggZHJpdmVyCiAgKiBAcnBfbG9jayAgICAgICA6IHNlcmlhbGl6YXRpb24gbG9jayBmb3IgcmVz b3VyY2UgcG9vbApAQCAtMjQwLDYgKzI0MSw3IEBAIHN0cnVjdCBkcHVfY3J0YyB7CiAJdTMyIG1p c3JfZnJhbWVfY291bnQ7CiAJdTMyIG1pc3JfZGF0YVtDUlRDX0RVQUxfTUlYRVJTXTsKIAorCXN0 cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlOwogCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQg KnBvd2VyX2V2ZW50OwogCiAJc3RydWN0IGRwdV9jb3JlX3BlcmZfcGFyYW1zIGN1cl9wZXJmOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKaW5kZXggMjk4YTZl Zi4uMTFhZTZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl ci5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiZHB1X2h3X2N0bC5oIgogI2luY2x1ZGUg ImRwdV9mb3JtYXRzLmgiCiAjaW5jbHVkZSAiZHB1X2VuY29kZXJfcGh5cy5oIgotI2luY2x1ZGUg ImRwdV9wb3dlcl9oYW5kbGUuaCIKICNpbmNsdWRlICJkcHVfY3J0Yy5oIgogI2luY2x1ZGUgImRw dV90cmFjZS5oIgogI2luY2x1ZGUgImRwdV9jb3JlX2lycS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2ttcy5jCmluZGV4IDljM2IyMjAuLjA1OThjZmIgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmMKQEAgLTEwMTcsMjQgKzEwMTcsMTkgQEAgc3RhdGlj IGxvbmcgZHB1X2ttc19yb3VuZF9waXhjbGsoc3RydWN0IG1zbV9rbXMgKmttcywgdW5zaWduZWQg bG9uZyByYXRlLAogc3RhdGljIHZvaWQgX2RwdV9rbXNfaHdfZGVzdHJveShzdHJ1Y3QgZHB1X2tt cyAqZHB1X2ttcykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXN0cnVjdCBtc21fZHJt X3ByaXZhdGUgKnByaXY7CiAJaW50IGk7CiAKIAlkZXYgPSBkcHVfa21zLT5kZXY7CiAJaWYgKCFk ZXYpCiAJCXJldHVybjsKIAotCXByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWlmICghcHJpdikK LQkJcmV0dXJuOwotCiAJaWYgKGRwdV9rbXMtPmh3X2ludHIpCiAJCWRwdV9od19pbnRyX2Rlc3Ry b3koZHB1X2ttcy0+aHdfaW50cik7CiAJZHB1X2ttcy0+aHdfaW50ciA9IE5VTEw7CiAKIAlpZiAo ZHB1X2ttcy0+cG93ZXJfZXZlbnQpCiAJCWRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9ldmVu dCgKLQkJCQkmcHJpdi0+cGhhbmRsZSwgZHB1X2ttcy0+cG93ZXJfZXZlbnQpOworCQkJCSZkcHVf a21zLT5waGFuZGxlLCBkcHVfa21zLT5wb3dlcl9ldmVudCk7CiAKIAkvKiBzYWZlIHRvIGNhbGwg dGhlc2UgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHNodXRkb3duICovCiAJX2RwdV9kZWJ1Z2ZzX2Rl c3Ryb3koZHB1X2ttcyk7CkBAIC0xMDY3LDcgKzEwNjIsOCBAQCBzdGF0aWMgdm9pZCBfZHB1X2tt c19od19kZXN0cm95KHN0cnVjdCBkcHVfa21zICpkcHVfa21zKQogCWRwdV9rbXMtPmNhdGFsb2cg PSBOVUxMOwogCiAJaWYgKGRwdV9rbXMtPmNvcmVfY2xpZW50KQotCQlkcHVfcG93ZXJfY2xpZW50 X2Rlc3Ryb3koJnByaXYtPnBoYW5kbGUsIGRwdV9rbXMtPmNvcmVfY2xpZW50KTsKKwkJZHB1X3Bv d2VyX2NsaWVudF9kZXN0cm95KCZkcHVfa21zLT5waGFuZGxlLAorCQkJZHB1X2ttcy0+Y29yZV9j bGllbnQpOwogCWRwdV9rbXMtPmNvcmVfY2xpZW50ID0gTlVMTDsKIAogCWlmIChkcHVfa21zLT52 YmlmW1ZCSUZfTlJUXSkKQEAgLTE2MjQsNyArMTYyMCw4IEBAIHN0YXRpYyBpbnQgZHB1X2ttc19o d19pbml0KHN0cnVjdCBtc21fa21zICprbXMpCiAJfQogI2VuZGlmCiAKLQlkcHVfa21zLT5jb3Jl X2NsaWVudCA9IGRwdV9wb3dlcl9jbGllbnRfY3JlYXRlKCZwcml2LT5waGFuZGxlLCAiY29yZSIp OworCWRwdV9rbXMtPmNvcmVfY2xpZW50ID0gZHB1X3Bvd2VyX2NsaWVudF9jcmVhdGUoJmRwdV9r bXMtPnBoYW5kbGUsCisJCQkJCSJjb3JlIik7CiAJaWYgKElTX0VSUl9PUl9OVUxMKGRwdV9rbXMt PmNvcmVfY2xpZW50KSkgewogCQlyYyA9IFBUUl9FUlIoZHB1X2ttcy0+Y29yZV9jbGllbnQpOwog CQlpZiAoIWRwdV9rbXMtPmNvcmVfY2xpZW50KQpAQCAtMTcyMSw3ICsxNzE4LDggQEAgc3RhdGlj IGludCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKICNlbmRpZgogCiAJcmMg PSBkcHVfY29yZV9wZXJmX2luaXQoJmRwdV9rbXMtPnBlcmYsIGRldiwgZHB1X2ttcy0+Y2F0YWxv ZywKLQkJCSZwcml2LT5waGFuZGxlLCBfZHB1X2ttc19nZXRfY2xrKGRwdV9rbXMsICJjb3JlX2Ns ayIpKTsKKwkJCSZkcHVfa21zLT5waGFuZGxlLAorCQkJX2RwdV9rbXNfZ2V0X2NsayhkcHVfa21z LCAiY29yZV9jbGsiKSk7CiAJaWYgKHJjKSB7CiAJCURQVV9FUlJPUigiZmFpbGVkIHRvIGluaXQg cGVyZiAlZFxuIiwgcmMpOwogCQlnb3RvIHBlcmZfZXJyOwpAQCAtMTc2NSw3ICsxNzYzLDggQEAg c3RhdGljIGludCBkcHVfa21zX2h3X2luaXQoc3RydWN0IG1zbV9rbXMgKmttcykKIAkgKiBIYW5k bGUgKHJlKWluaXRpYWxpemF0aW9ucyBkdXJpbmcgcG93ZXIgZW5hYmxlCiAJICovCiAJZHB1X2tt c19oYW5kbGVfcG93ZXJfZXZlbnQoRFBVX1BPV0VSX0VWRU5UX1BPU1RfRU5BQkxFLCBkcHVfa21z KTsKLQlkcHVfa21zLT5wb3dlcl9ldmVudCA9IGRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZl bnQoJnByaXYtPnBoYW5kbGUsCisJZHB1X2ttcy0+cG93ZXJfZXZlbnQgPSBkcHVfcG93ZXJfaGFu ZGxlX3JlZ2lzdGVyX2V2ZW50KAorCQkJJmRwdV9rbXMtPnBoYW5kbGUsCiAJCQlEUFVfUE9XRVJf RVZFTlRfUE9TVF9FTkFCTEUsCiAJCQlkcHVfa21zX2hhbmRsZV9wb3dlcl9ldmVudCwgZHB1X2tt cywgImttcyIpOwogCkBAIC0xODQxLDYgKzE4NDAsMTIgQEAgc3RhdGljIGludCBkcHVfYmluZChz dHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKIAkJ Z290byBjbGtfcmF0ZV9lcnJvcjsKIAl9CiAKKwlyZXQgPSBkcHVfcG93ZXJfcmVzb3VyY2VfaW5p dChwZGV2LCAmZHB1X2ttcy0+cGhhbmRsZSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImRwdSBw b3dlciByZXNvdXJjZSBpbml0IGZhaWxlZFxuIik7CisJCWdvdG8gcG93ZXJfaW5pdF9mYWlsOwor CX0KKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRwdV9rbXMpOwogCiAJbXNtX2ttc19p bml0KCZkcHVfa21zLT5iYXNlLCAma21zX2Z1bmNzKTsKQEAgLTE4NTMsNiArMTg1OCw3IEBAIHN0 YXRpYyBpbnQgZHB1X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0 ZXIsIHZvaWQgKmRhdGEpCiAJcHJpdi0+a21zID0gJmRwdV9rbXMtPmJhc2U7CiAJcmV0dXJuIHJl dDsKIAorcG93ZXJfaW5pdF9mYWlsOgogY2xrX3JhdGVfZXJyb3I6CiAJbXNtX2Rzc19wdXRfY2xr KG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2Nsayk7CiBjbGtfZ2V0X2Vycm9yOgpAQCAtMTg2Nyw2 ICsxODczLDcgQEAgc3RhdGljIHZvaWQgZHB1X3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKIAlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2tt cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2Vy ICptcCA9ICZkcHVfa21zLT5tcDsKIAorCWRwdV9wb3dlcl9yZXNvdXJjZV9kZWluaXQocGRldiwg JmRwdV9rbXMtPnBoYW5kbGUpOwogCW1zbV9kc3NfcHV0X2NsayhtcC0+Y2xrX2NvbmZpZywgbXAt Pm51bV9jbGspOwogCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgbXAtPmNsa19jb25maWcpOwogCW1w LT5udW1fY2xrID0gMDsKQEAgLTE4OTcsNyArMTkwNCw2IEBAIHN0YXRpYyBpbnQgZHB1X3J1bnRp bWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBkcHVfa21zICpkcHVfa21z ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRkZXY7 Ci0Jc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dl ciAqbXAgPSAmZHB1X2ttcy0+bXA7CiAKIAlkZGV2ID0gZHB1X2ttcy0+ZGV2OwpAQCAtMTkwNSwx MCArMTkxMSw5IEBAIHN0YXRpYyBpbnQgZHB1X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNl ICpkZXYpCiAJCURQVV9FUlJPUigiaW52YWxpZCBkcm1fZGV2aWNlXG4iKTsKIAkJZ290byBleGl0 OwogCX0KLQlwcml2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlyYyA9IGRwdV9wb3dlcl9yZXNv dXJjZV9lbmFibGUoJnByaXYtPnBoYW5kbGUsCi0JCWRwdV9rbXMtPmNvcmVfY2xpZW50LCBmYWxz ZSk7CisJcmMgPSBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKCZkcHVfa21zLT5waGFuZGxlLAor CQkJZHB1X2ttcy0+Y29yZV9jbGllbnQsIGZhbHNlKTsKIAlpZiAocmMpCiAJCURQVV9FUlJPUigi cmVzb3VyY2UgZGlzYWJsZSBmYWlsZWQ6ICVkXG4iLCByYyk7CiAKQEAgLTE5MjYsNyArMTkzMSw2 IEBAIHN0YXRpYyBpbnQgZHB1X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAlz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJ c3RydWN0IGRwdV9rbXMgKmRwdV9rbXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2Owog CXN0cnVjdCBkc3NfbW9kdWxlX3Bvd2VyICptcCA9ICZkcHVfa21zLT5tcDsKIAogCWRkZXYgPSBk cHVfa21zLT5kZXY7CkBAIC0xOTM0LDcgKzE5MzgsNiBAQCBzdGF0aWMgaW50IGRwdV9ydW50aW1l X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCURQVV9FUlJPUigiaW52YWxpZCBkcm1fZGV2 aWNlXG4iKTsKIAkJZ290byBleGl0OwogCX0KLQlwcml2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CiAK IAlyYyA9IG1zbV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGssIHRy dWUpOwogCWlmIChyYykgewpAQCAtMTk0Miw4ICsxOTQ1LDggQEAgc3RhdGljIGludCBkcHVfcnVu dGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogCQlnb3RvIGV4aXQ7CiAJfQogCi0JcmMg PSBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKCZwcml2LT5waGFuZGxlLCBkcHVfa21zLT5jb3Jl X2NsaWVudCwKLQkJdHJ1ZSk7CisJcmMgPSBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKCZkcHVf a21zLT5waGFuZGxlLAorCQkJZHB1X2ttcy0+Y29yZV9jbGllbnQsIHRydWUpOwogCWlmIChyYykK IAkJRFBVX0VSUk9SKCJyZXNvdXJjZSBlbmFibGUgZmFpbGVkOiAlZFxuIiwgcmMpOwogCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmgKaW5kZXggYTgyNTVmZS4uYzQ4ZWQ0ZSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaApAQCAtMTY0LDYgKzE2NCw3 IEBAIHN0cnVjdCBkcHVfa21zIHsKIAlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nOwogCiAJ c3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlW01TTV9TTU1VX0RPTUFJTl9NQVhd OworCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlIHBoYW5kbGU7CiAJc3RydWN0IGRwdV9wb3dlcl9j bGllbnQgKmNvcmVfY2xpZW50OwogI2lmZGVmIENPTkZJR19JT04KIAlzdHJ1Y3QgaW9uX2NsaWVu dCAqaWNsaWVudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9wb3dlcl9oYW5kbGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wb3dl cl9oYW5kbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2JlMTA2Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3Bvd2Vy X2hhbmRsZS5jCkBAIC0wLDAgKzEsNjkzIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTolczolZF06ICIgZm10LCBfX2Z1bmNf XywgX19MSU5FX18KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4 L29mLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRk cmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5o PgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaWZkZWYgQ09ORklHX1FDT01fQlVT X1NDQUxJTkcKKyNpbmNsdWRlIDxsaW51eC9tc20tYnVzLmg+CisjaW5jbHVkZSA8bGludXgvbXNt LWJ1cy1ib2FyZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGludXgvZHB1X2lvX3V0aWwuaD4KKwor I2luY2x1ZGUgImRwdV9wb3dlcl9oYW5kbGUuaCIKKyNpbmNsdWRlICJkcHVfdHJhY2UuaCIKKwor c3RhdGljIGNvbnN0IGNoYXIgKmRhdGFfYnVzX25hbWVbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lE X01BWF0gPSB7CisJW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NTk9DXSA9ICJxY29tLGRwdS1k YXRhLWJ1cyIsCisJW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9MTENDXSA9ICJxY29tLGRwdS1s bGNjLWJ1cyIsCisJW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9FQkldID0gInFjb20sZHB1LWVi aS1idXMiLAorfTsKKworY29uc3QgY2hhciAqZHB1X3Bvd2VyX2hhbmRsZV9nZXRfZGJ1c19uYW1l KHUzMiBidXNfaWQpCit7CisJaWYgKGJ1c19pZCA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9N QVgpCisJCXJldHVybiBkYXRhX2J1c19uYW1lW2J1c19pZF07CisKKwlyZXR1cm4gTlVMTDsKK30K Kworc3RhdGljIHZvaWQgZHB1X3Bvd2VyX2V2ZW50X3RyaWdnZXJfbG9ja2VkKHN0cnVjdCBkcHVf cG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQl1MzIgZXZlbnRfdHlwZSkKK3sKKwlzdHJ1Y3QgZHB1 X3Bvd2VyX2V2ZW50ICpldmVudDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZwaGFu ZGxlLT5ldmVudF9saXN0LCBsaXN0KSB7CisJCWlmIChldmVudC0+ZXZlbnRfdHlwZSAmIGV2ZW50 X3R5cGUpCisJCQlldmVudC0+Y2JfZm5jKGV2ZW50X3R5cGUsIGV2ZW50LT51c3IpOworCX0KK30K Kworc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmRwdV9wb3dlcl9jbGllbnRfY3JlYXRlKAorCXN0 cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLCBjaGFyICpjbGllbnRfbmFtZSkKK3sKKwlz dHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50OworCXN0YXRpYyB1MzIgaWQ7CisKKwlpZiAo IWNsaWVudF9uYW1lIHx8ICFwaGFuZGxlKSB7CisJCXByX2VycigiY2xpZW50IG5hbWUgaXMgbnVs bCBvciBpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK Kwl9CisKKwljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCks IEdGUF9LRVJORUwpOworCWlmICghY2xpZW50KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK KworCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CisJc3RybGNweShjbGllbnQt Pm5hbWUsIGNsaWVudF9uYW1lLCBNQVhfQ0xJRU5UX05BTUVfTEVOKTsKKwljbGllbnQtPnVzZWNh c2VfbmR4ID0gVk9URV9JTkRFWF9ESVNBQkxFOworCWNsaWVudC0+aWQgPSBpZDsKKwljbGllbnQt PmFjdGl2ZSA9IHRydWU7CisJcHJfZGVidWcoImNsaWVudCAlcyBjcmVhdGVkOiVwSyBpZCA6JWRc biIsIGNsaWVudF9uYW1lLAorCQljbGllbnQsIGlkKTsKKwlpZCsrOworCWxpc3RfYWRkKCZjbGll bnQtPmxpc3QsICZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QpOworCW11dGV4X3VubG9jaygm cGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKworCXJldHVybiBjbGllbnQ7Cit9CisKK3ZvaWQgZHB1 X3Bvd2VyX2NsaWVudF9kZXN0cm95KHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAor CXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQpCit7CisJaWYgKCFjbGllbnQgIHx8ICFw aGFuZGxlKSB7CisJCXByX2VycigicmVnIGJ1cyB2b3RlOiBpbnZhbGlkIGNsaWVudCBoYW5kbGVc biIpOworCX0gZWxzZSBpZiAoIWNsaWVudC0+YWN0aXZlKSB7CisJCXByX2VycigiZHB1IHBvd2Vy IGRlaW5pdCBhbHJlYWR5IGRvbmVcbiIpOworCQlrZnJlZShjbGllbnQpOworCX0gZWxzZSB7CisJ CXByX2RlYnVnKCJidXMgdm90ZSBjbGllbnQgJXMgZGVzdHJveWVkOiVwSyBpZDoldVxuIiwKKwkJ CWNsaWVudC0+bmFtZSwgY2xpZW50LCBjbGllbnQtPmlkKTsKKwkJbXV0ZXhfbG9jaygmcGhhbmRs ZS0+cGhhbmRsZV9sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmY2xpZW50LT5saXN0KTsKKwkJbXV0 ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCQlrZnJlZShjbGllbnQpOworCX0K K30KKworI2lmZGVmIENPTkZJR19RQ09NX0JVU19TQ0FMSU5HCisKKyNkZWZpbmUgTUFYX0FYSV9Q T1JUX0NPVU5UIDMKKworc3RhdGljIGludCBfZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgK KwkJc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUgKnBkYnVzLAorCQl1NjQgYWJfcXVv dGFfcnQsIHU2NCBhYl9xdW90YV9ucnQsCisJCXU2NCBpYl9xdW90YV9ydCwgdTY0IGliX3F1b3Rh X25ydCkKK3sKKwlpbnQgbmV3X3VjX2lkeDsKKwl1NjQgYWJfcXVvdGFbTUFYX0FYSV9QT1JUX0NP VU5UXSA9IHswLCAwfTsKKwl1NjQgaWJfcXVvdGFbTUFYX0FYSV9QT1JUX0NPVU5UXSA9IHswLCAw fTsKKwlpbnQgcmM7CisKKwlpZiAocGRidXMtPmRhdGFfYnVzX2hkbCA8IDEpIHsKKwkJcHJfZXJy KCJpbnZhbGlkIGJ1cyBoYW5kbGUgJWRcbiIsIHBkYnVzLT5kYXRhX2J1c19oZGwpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlwZGJ1cy0+YWJfcnQgPSBhYl9xdW90YV9ydDsKKwlwZGJ1cy0+ aWJfcnQgPSBpYl9xdW90YV9ydDsKKwlwZGJ1cy0+YWJfbnJ0ID0gYWJfcXVvdGFfbnJ0OworCXBk YnVzLT5pYl9ucnQgPSBpYl9xdW90YV9ucnQ7CisKKwlpZiAocGRidXMtPmVuYWJsZSkgeworCQlh Yl9xdW90YV9ydCA9IG1heF90KHU2NCwgYWJfcXVvdGFfcnQsCisJCQkJRFBVX1BPV0VSX0hBTkRM RV9FTkFCTEVfQlVTX0FCX1FVT1RBKTsKKwkJaWJfcXVvdGFfcnQgPSBtYXhfdCh1NjQsIGliX3F1 b3RhX3J0LAorCQkJCURQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19JQl9RVU9UQSk7CisJCWFi X3F1b3RhX25ydCA9IG1heF90KHU2NCwgYWJfcXVvdGFfbnJ0LAorCQkJCURQVV9QT1dFUl9IQU5E TEVfRU5BQkxFX0JVU19BQl9RVU9UQSk7CisJCWliX3F1b3RhX25ydCA9IG1heF90KHU2NCwgaWJf cXVvdGFfbnJ0LAorCQkJCURQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19JQl9RVU9UQSk7CisJ fSBlbHNlIHsKKwkJYWJfcXVvdGFfcnQgPSBtaW5fdCh1NjQsIGFiX3F1b3RhX3J0LAorCQkJCURQ VV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfQUJfUVVPVEEpOworCQlpYl9xdW90YV9ydCA9IG1p bl90KHU2NCwgaWJfcXVvdGFfcnQsCisJCQkJRFBVX1BPV0VSX0hBTkRMRV9ESVNBQkxFX0JVU19J Ql9RVU9UQSk7CisJCWFiX3F1b3RhX25ydCA9IG1pbl90KHU2NCwgYWJfcXVvdGFfbnJ0LAorCQkJ CURQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfQUJfUVVPVEEpOworCQlpYl9xdW90YV9ucnQg PSBtaW5fdCh1NjQsIGliX3F1b3RhX25ydCwKKwkJCQlEUFVfUE9XRVJfSEFORExFX0RJU0FCTEVf QlVTX0lCX1FVT1RBKTsKKwl9CisKKwlpZiAoIWFiX3F1b3RhX3J0ICYmICFhYl9xdW90YV9ucnQg JiYgIWliX3F1b3RhX3J0ICYmICFpYl9xdW90YV9ucnQpICB7CisJCW5ld191Y19pZHggPSAwOwor CX0gZWxzZSB7CisJCWludCBpOworCQlzdHJ1Y3QgbXNtX2J1c192ZWN0b3JzICp2ZWN0ID0gTlVM TDsKKwkJc3RydWN0IG1zbV9idXNfc2NhbGVfcGRhdGEgKmJ3X3RhYmxlID0KKwkJCXBkYnVzLT5k YXRhX2J1c19zY2FsZV90YWJsZTsKKwkJdTMyIG5ydF9heGlfcG9ydF9jbnQgPSBwZGJ1cy0+bnJ0 X2F4aV9wb3J0X2NudDsKKwkJdTMyIHRvdGFsX2F4aV9wb3J0X2NudCA9IHBkYnVzLT5heGlfcG9y dF9jbnQ7CisJCXUzMiBydF9heGlfcG9ydF9jbnQgPSB0b3RhbF9heGlfcG9ydF9jbnQgLSBucnRf YXhpX3BvcnRfY250OworCisJCWlmICghYndfdGFibGUgfHwgIXRvdGFsX2F4aV9wb3J0X2NudCB8 fAorCQkgICAgdG90YWxfYXhpX3BvcnRfY250ID4gTUFYX0FYSV9QT1JUX0NPVU5UKSB7CisJCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlp ZiAocGRidXMtPmJ1c19jaGFubmVscykgeworCQkJaWJfcXVvdGFfcnQgPSBkaXZfdTY0KGliX3F1 b3RhX3J0LAorCQkJCQkJcGRidXMtPmJ1c19jaGFubmVscyk7CisJCQlpYl9xdW90YV9ucnQgPSBk aXZfdTY0KGliX3F1b3RhX25ydCwKKwkJCQkJCXBkYnVzLT5idXNfY2hhbm5lbHMpOworCQl9CisK KwkJaWYgKG5ydF9heGlfcG9ydF9jbnQpIHsKKworCQkJYWJfcXVvdGFfcnQgPSBkaXZfdTY0KGFi X3F1b3RhX3J0LCBydF9heGlfcG9ydF9jbnQpOworCQkJYWJfcXVvdGFfbnJ0ID0gZGl2X3U2NChh Yl9xdW90YV9ucnQsIG5ydF9heGlfcG9ydF9jbnQpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgdG90 YWxfYXhpX3BvcnRfY250OyBpKyspIHsKKwkJCQlpZiAoaSA8IHJ0X2F4aV9wb3J0X2NudCkgewor CQkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhX3J0OworCQkJCQlpYl9xdW90YVtpXSA9IGliX3F1 b3RhX3J0OworCQkJCX0gZWxzZSB7CisJCQkJCWFiX3F1b3RhW2ldID0gYWJfcXVvdGFfbnJ0Owor CQkJCQlpYl9xdW90YVtpXSA9IGliX3F1b3RhX25ydDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7 CisJCQlhYl9xdW90YVswXSA9IGRpdl91NjQoYWJfcXVvdGFfcnQgKyBhYl9xdW90YV9ucnQsCisJ CQkJCXRvdGFsX2F4aV9wb3J0X2NudCk7CisJCQlpYl9xdW90YVswXSA9IGliX3F1b3RhX3J0ICsg aWJfcXVvdGFfbnJ0OworCisJCQlmb3IgKGkgPSAxOyBpIDwgdG90YWxfYXhpX3BvcnRfY250OyBp KyspIHsKKwkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhWzBdOworCQkJCWliX3F1b3RhW2ldID0g aWJfcXVvdGFbMF07CisJCQl9CisJCX0KKworCQluZXdfdWNfaWR4ID0gKHBkYnVzLT5jdXJyX2J3 X3VjX2lkeCAlCisJCQkoYndfdGFibGUtPm51bV91c2VjYXNlcyAtIDEpKSArIDE7CisKKwkJZm9y IChpID0gMDsgaSA8IHRvdGFsX2F4aV9wb3J0X2NudDsgaSsrKSB7CisJCQl2ZWN0ID0gJmJ3X3Rh YmxlLT51c2VjYXNlW25ld191Y19pZHhdLnZlY3RvcnNbaV07CisJCQl2ZWN0LT5hYiA9IGFiX3F1 b3RhW2ldOworCQkJdmVjdC0+aWIgPSBpYl9xdW90YVtpXTsKKworCQkJcHJfZGVidWcoCisJCQkJ IiVzIHVjX2lkeD0lZCAlcyBwYXRoIGlkeD0lZCBhYj0lbGx1IGliPSVsbHVcbiIsCisJCQkJYndf dGFibGUtPm5hbWUsCisJCQkJbmV3X3VjX2lkeCwgKGkgPCBydF9heGlfcG9ydF9jbnQpID8gInJ0 IiA6ICJucnQiCisJCQkJLCBpLCB2ZWN0LT5hYiwgdmVjdC0+aWIpOworCQl9CisJfQorCXBkYnVz LT5jdXJyX2J3X3VjX2lkeCA9IG5ld191Y19pZHg7CisJcGRidXMtPmFvX2J3X3VjX2lkeCA9IG5l d191Y19pZHg7CisKKwlEUFVfQVRSQUNFX0JFR0lOKCJtc21fYnVzX3NjYWxlX3JlcSIpOworCXJj ID0gbXNtX2J1c19zY2FsZV9jbGllbnRfdXBkYXRlX3JlcXVlc3QocGRidXMtPmRhdGFfYnVzX2hk bCwKKwkJCW5ld191Y19pZHgpOworCURQVV9BVFJBQ0VfRU5EKCJtc21fYnVzX3NjYWxlX3JlcSIp OworCisJcmV0dXJuIHJjOworfQorCitpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YShz dHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwkJc3RydWN0IGRwdV9wb3dlcl9jbGll bnQgKnBjbGllbnQsCisJCWludCBidXNfY2xpZW50LCB1MzIgYnVzX2lkLAorCQl1NjQgYWJfcXVv dGEsIHU2NCBpYl9xdW90YSkKK3sKKwlpbnQgcmMgPSAwOworCWludCBpOworCXU2NCB0b3RhbF9h Yl9ydCA9IDAsIHRvdGFsX2liX3J0ID0gMDsKKwl1NjQgdG90YWxfYWJfbnJ0ID0gMCwgdG90YWxf aWJfbnJ0ID0gMDsKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50OworCisJaWYgKCFw aGFuZGxlIHx8ICFwY2xpZW50IHx8CisJCQlidXNfY2xpZW50ID49IERQVV9QT1dFUl9IQU5ETEVf REFUQV9CVVNfQ0xJRU5UX01BWCB8fAorCQkJYnVzX2lkID49IERQVV9QT1dFUl9IQU5ETEVfREJV U19JRF9NQVgpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCisJ cGNsaWVudC0+YWJbYnVzX2NsaWVudF0gPSBhYl9xdW90YTsKKwlwY2xpZW50LT5pYltidXNfY2xp ZW50XSA9IGliX3F1b3RhOworCXRyYWNlX2RwdV9wZXJmX3VwZGF0ZV9idXMoYnVzX2NsaWVudCwg YWJfcXVvdGEsIGliX3F1b3RhKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xpZW50LCAmcGhh bmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBEUFVf UE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9NQVg7IGkrKykgeworCQkJaWYgKGkgPT0gRFBV X1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTlJUKSB7CisJCQkJdG90YWxfYWJfbnJ0ICs9 IGNsaWVudC0+YWJbaV07CisJCQkJdG90YWxfaWJfbnJ0ICs9IGNsaWVudC0+aWJbaV07CisJCQl9 IGVsc2UgeworCQkJCXRvdGFsX2FiX3J0ICs9IGNsaWVudC0+YWJbaV07CisJCQkJdG90YWxfaWJf cnQgPSBtYXgodG90YWxfaWJfcnQsIGNsaWVudC0+aWJbaV0pOworCQkJfQorCQl9CisJfQorCisJ aWYgKHBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtidXNfaWRdLmRhdGFfYnVzX2hkbCkKKwkJcmMg PSBfZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgKKwkJCSZwaGFuZGxlLT5kYXRhX2J1c19o YW5kbGVbYnVzX2lkXSwKKwkJCXRvdGFsX2FiX3J0LCB0b3RhbF9hYl9ucnQsCisJCQl0b3RhbF9p Yl9ydCwgdG90YWxfaWJfbnJ0KTsKKworCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9s b2NrKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZHB1X3Bvd2VyX2RhdGFfYnVz X3VucmVnaXN0ZXIoCisJCXN0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1cykK K3sKKwlpZiAocGRidXMtPmRhdGFfYnVzX2hkbCkgeworCQltc21fYnVzX3NjYWxlX3VucmVnaXN0 ZXJfY2xpZW50KHBkYnVzLT5kYXRhX2J1c19oZGwpOworCQlwZGJ1cy0+ZGF0YV9idXNfaGRsID0g MDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3BhcnNlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUg KnBkYnVzLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsK KwlpbnQgcmMgPSAwOworCWludCBwYXRoczsKKworCXBkYnVzLT5idXNfY2hhbm5lbHMgPSAxOwor CXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUsCisJCSJxY29tLGRw dS1kcmFtLWNoYW5uZWxzIiwgJnBkYnVzLT5idXNfY2hhbm5lbHMpOworCWlmIChyYykgeworCQlw cl9kZWJ1ZygibnVtYmVyIG9mIGNoYW5uZWxzIHByb3BlcnR5IG5vdCBzcGVjaWZpZWRcbiIpOwor CQlyYyA9IDA7CisJfQorCisJcGRidXMtPm5ydF9heGlfcG9ydF9jbnQgPSAwOworCXJjID0gb2Zf cHJvcGVydHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkicWNvbSxkcHUtbnVtLW5y dC1wYXRocyIsCisJCQkmcGRidXMtPm5ydF9heGlfcG9ydF9jbnQpOworCWlmIChyYykgeworCQlw cl9kZWJ1ZygibnVtYmVyIG9mIGF4aSBwb3J0IHByb3BlcnR5IG5vdCBzcGVjaWZpZWRcbiIpOwor CQlyYyA9IDA7CisJfQorCisJbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBkZXYtPmRldi5v Zl9ub2RlLCBuYW1lKTsKKwlpZiAobm9kZSkgeworCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMy KG5vZGUsCisJCQkJInFjb20sbXNtLWJ1cyxudW0tcGF0aHMiLCAmcGF0aHMpOworCQlpZiAocmMp IHsKKwkJCXByX2VycigiRXJyb3IuIHFjb20sbXNtLWJ1cyxudW0tcGF0aHMgbm90IGZvdW5kXG4i KTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlwZGJ1cy0+YXhpX3BvcnRfY250ID0gcGF0aHM7CisK KwkJcGRidXMtPmRhdGFfYnVzX3NjYWxlX3RhYmxlID0KKwkJCQltc21fYnVzX3BkYXRhX2Zyb21f bm9kZShwZGV2LCBub2RlKTsKKwkJaWYgKElTX0VSUl9PUl9OVUxMKHBkYnVzLT5kYXRhX2J1c19z Y2FsZV90YWJsZSkpIHsKKwkJCXByX2VycigicmVnIGJ1cyBoYW5kbGUgcGFyc2luZyBmYWlsZWRc biIpOworCQkJcmMgPSBQVFJfRVJSKHBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSk7CisJCQlp ZiAoIXBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSkKKwkJCQlyYyA9IC1FSU5WQUw7CisJCQln b3RvIGVuZDsKKwkJfQorCQlwZGJ1cy0+ZGF0YV9idXNfaGRsID0gbXNtX2J1c19zY2FsZV9yZWdp c3Rlcl9jbGllbnQoCisJCQkJcGRidXMtPmRhdGFfYnVzX3NjYWxlX3RhYmxlKTsKKwkJaWYgKCFw ZGJ1cy0+ZGF0YV9idXNfaGRsKSB7CisJCQlwcl9lcnIoImRhdGFfYnVzX2NsaWVudCByZWdpc3Rl ciBmYWlsZWRcbiIpOworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBlbmQ7CisJCX0KKwkJcHJf ZGVidWcoInJlZ2lzdGVyICVzIGRhdGFfYnVzX2hkbD0leFxuIiwgbmFtZSwKKwkJCQlwZGJ1cy0+ ZGF0YV9idXNfaGRsKTsKKwl9CisKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQg ZHB1X3Bvd2VyX3JlZ19idXNfcGFyc2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwlz dHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUg Km5vZGU7CisJc3RydWN0IG1zbV9idXNfc2NhbGVfcGRhdGEgKmJ1c19zY2FsZV90YWJsZTsKKwlp bnQgcmMgPSAwOworCisJbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBkZXYtPmRldi5vZl9u b2RlLCAicWNvbSxkcHUtcmVnLWJ1cyIpOworCWlmIChub2RlKSB7CisJCWJ1c19zY2FsZV90YWJs ZSA9IG1zbV9idXNfcGRhdGFfZnJvbV9ub2RlKHBkZXYsIG5vZGUpOworCQlpZiAoSVNfRVJSX09S X05VTEwoYnVzX3NjYWxlX3RhYmxlKSkgeworCQkJcHJfZXJyKCJyZWcgYnVzIGhhbmRsZSBwYXJz aW5nIGZhaWxlZFxuIik7CisJCQlyYyA9IFBUUl9FUlIoYnVzX3NjYWxlX3RhYmxlKTsKKwkJCWlm ICghYnVzX3NjYWxlX3RhYmxlKQorCQkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZW5kOworCQl9 CisJCXBoYW5kbGUtPnJlZ19idXNfaGRsID0gbXNtX2J1c19zY2FsZV9yZWdpc3Rlcl9jbGllbnQo CisJCQkgICAgICBidXNfc2NhbGVfdGFibGUpOworCQlpZiAoIXBoYW5kbGUtPnJlZ19idXNfaGRs KSB7CisJCQlwcl9lcnIoInJlZ19idXNfY2xpZW50IHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCQly YyA9IC1FSU5WQUw7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlwcl9kZWJ1ZygicmVnaXN0ZXIgcmVn X2J1c19oZGw9JXhcbiIsIHBoYW5kbGUtPnJlZ19idXNfaGRsKTsKKwl9CisKK2VuZDoKKwlyZXR1 cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGRwdV9wb3dlcl9yZWdfYnVzX3VucmVnaXN0ZXIodTMy IHJlZ19idXNfaGRsKQoreworCWlmIChyZWdfYnVzX2hkbCkKKwkJbXNtX2J1c19zY2FsZV91bnJl Z2lzdGVyX2NsaWVudChyZWdfYnVzX2hkbCk7Cit9CisKK2ludCBkcHVfcG93ZXJfZGF0YV9idXNf c3RhdGVfdXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQkJCQkJCWJv b2wgZW5hYmxlKQoreworCWludCBpOworCisJaWYgKCFwaGFuZGxlKSB7CisJCXByX2VycigiaW52 YWxpZCBwYXJhbVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvciAoaSA9IERQVV9Q T1dFUl9IQU5ETEVfREJVU19JRF9NTk9DOworCQkJaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9NQVg7IGkrKykKKwkJcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLmVuYWJsZSA9IGVuYWJs ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRwdV9wb3dlcl9kYXRhX2J1c191cGRh dGUoc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUgKnBkYnVzLAorCQkJCQkJCWJvb2wg ZW5hYmxlKQoreworCWludCByYyA9IDA7CisKKwlwZGJ1cy0+ZW5hYmxlID0gZW5hYmxlOworCisJ aWYgKHBkYnVzLT5kYXRhX2J1c19oZGwpCisJCXJjID0gX2RwdV9wb3dlcl9kYXRhX2J1c19zZXRf cXVvdGEocGRidXMsIHBkYnVzLT5hYl9ydCwKKwkJCQlwZGJ1cy0+YWJfbnJ0LCBwZGJ1cy0+aWJf cnQsIHBkYnVzLT5pYl9ucnQpOworCisJaWYgKHJjKQorCQlwcl9lcnIoImZhaWxlZCB0byBzZXQg ZGF0YSBidXMgdm90ZSByYz0lZCBlbmFibGU6JWRcbiIsCisJCQkJCQkJcmMsIGVuYWJsZSk7CisK KwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZHB1X3Bvd2VyX3JlZ19idXNfdXBkYXRlKHUz MiByZWdfYnVzX2hkbCwgdTMyIHVzZWNhc2VfbmR4KQoreworCWludCByYyA9IDA7CisKKwlpZiAo cmVnX2J1c19oZGwpCisJCXJjID0gbXNtX2J1c19zY2FsZV9jbGllbnRfdXBkYXRlX3JlcXVlc3Qo cmVnX2J1c19oZGwsCisJCQkJCQkJCXVzZWNhc2VfbmR4KTsKKwlpZiAocmMpCisJCXByX2Vycigi ZmFpbGVkIHRvIHNldCByZWcgYnVzIHZvdGUgcmM9JWRcbiIsIHJjKTsKKworCXJldHVybiByYzsK K30KKyNlbHNlCitzdGF0aWMgaW50IGRwdV9wb3dlcl9kYXRhX2J1c19wYXJzZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAq cGRidXMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IGRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFf YnVzX2hhbmRsZSAqcGRidXMpCit7Cit9CisKK2ludCBkcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1 b3RhKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQlzdHJ1Y3QgZHB1X3Bvd2Vy X2NsaWVudCAqcGNsaWVudCwKKwkJaW50IGJ1c19jbGllbnQsIHUzMiBidXNfaWQsCisJCXU2NCBh Yl9xdW90YSwgdTY0IGliX3F1b3RhKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRw dV9wb3dlcl9yZWdfYnVzX3BhcnNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJc3Ry dWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIGRwdV9wb3dlcl9yZWdfYnVzX3VucmVnaXN0ZXIodTMyIHJlZ19idXNfaGRsKQorewor fQorCitzdGF0aWMgaW50IGRwdV9wb3dlcl9yZWdfYnVzX3VwZGF0ZSh1MzIgcmVnX2J1c19oZGws IHUzMiB1c2VjYXNlX25keCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcHVfcG93 ZXJfZGF0YV9idXNfdXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlICpwZGJ1 cywKKwkJCQkJCQlib29sIGVuYWJsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGRwdV9wb3dl cl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUs CisJCQkJCQkJYm9vbCBlbmFibGUpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworaW50IGRw dV9wb3dlcl9yZXNvdXJjZV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJc3Ry dWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCit7CisJaW50IHJjID0gMCwgaTsKKworCWlm ICghcGhhbmRsZSB8fCAhcGRldikgeworCQlwcl9lcnIoImludmFsaWQgaW5wdXQgcGFyYW1cbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwaGFuZGxlLT5kZXYgPSAmcGRldi0+ZGV2Owor CisJcmMgPSBkcHVfcG93ZXJfcmVnX2J1c19wYXJzZShwZGV2LCBwaGFuZGxlKTsKKwlpZiAocmMp IHsKKwkJcHJfZXJyKCJyZWdpc3RlciBidXMgcGFyc2UgZmFpbGVkIHJjPSVkXG4iLCByYyk7CisJ CXJldHVybiByYzsKKwl9CisKKwlmb3IgKGkgPSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5P QzsKKwkJCWkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspIHsKKwkJcmMgPSBk cHVfcG93ZXJfZGF0YV9idXNfcGFyc2UocGRldiwKKwkJCQkmcGhhbmRsZS0+ZGF0YV9idXNfaGFu ZGxlW2ldLAorCQkJCWRhdGFfYnVzX25hbWVbaV0pOworCQlpZiAocmMpIHsKKwkJCXByX2Vycigi cmVnaXN0ZXIgZGF0YSBidXMgcGFyc2UgZmFpbGVkIGlkPSVkIHJjPSVkXG4iLAorCQkJCQlpLCBy Yyk7CisJCQlnb3RvIGRhdGFfYnVzX2VycjsKKwkJfQorCX0KKworCUlOSVRfTElTVF9IRUFEKCZw aGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwaGFuZGxlLT5l dmVudF9saXN0KTsKKworCW11dGV4X2luaXQoJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7CisKKwly ZXR1cm4gcmM7CisKK2RhdGFfYnVzX2VycjoKKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCisJCWRw dV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKCZwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbaV0p OworCWRwdV9wb3dlcl9yZWdfYnVzX3VucmVnaXN0ZXIocGhhbmRsZS0+cmVnX2J1c19oZGwpOwor CXJldHVybiByYzsKK30KKwordm9pZCBkcHVfcG93ZXJfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUp Cit7CisJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmN1cnJfY2xpZW50LCAqbmV4dF9jbGllbnQ7 CisJc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqY3Vycl9ldmVudCwgKm5leHRfZXZlbnQ7CisJaW50 IGk7CisKKwlpZiAoIXBoYW5kbGUgfHwgIXBkZXYpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIGlucHV0 IHBhcmFtXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5k bGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1cnJfY2xpZW50LCBuZXh0X2Ns aWVudCwKKwkJCSZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QsIGxpc3QpIHsKKwkJcHJfZXJy KCJjbGllbmQ6JXMtJWQgc3RpbGwgcmVnaXN0ZXJlZCB3aXRoIHJlZmNvdW50OiVkXG4iLAorCQkJ CWN1cnJfY2xpZW50LT5uYW1lLCBjdXJyX2NsaWVudC0+aWQsCisJCQkJY3Vycl9jbGllbnQtPnJl ZmNvdW50KTsKKwkJY3Vycl9jbGllbnQtPmFjdGl2ZSA9IGZhbHNlOworCQlsaXN0X2RlbCgmY3Vy cl9jbGllbnQtPmxpc3QpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJyX2V2 ZW50LCBuZXh0X2V2ZW50LAorCQkJJnBoYW5kbGUtPmV2ZW50X2xpc3QsIGxpc3QpIHsKKwkJcHJf ZXJyKCJldmVudDolZCwgY2xpZW50OiVzIHN0aWxsIHJlZ2lzdGVyZWRcbiIsCisJCQkJY3Vycl9l dmVudC0+ZXZlbnRfdHlwZSwKKwkJCQljdXJyX2V2ZW50LT5jbGllbnRfbmFtZSk7CisJCWN1cnJf ZXZlbnQtPmFjdGl2ZSA9IGZhbHNlOworCQlsaXN0X2RlbCgmY3Vycl9ldmVudC0+bGlzdCk7CisJ fQorCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7 IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBpKyspCisJCWRwdV9wb3dlcl9kYXRh X2J1c191bnJlZ2lzdGVyKCZwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbaV0pOworCisJZHB1X3Bv d2VyX3JlZ19idXNfdW5yZWdpc3RlcihwaGFuZGxlLT5yZWdfYnVzX2hkbCk7Cit9CisKK2ludCBk cHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxl LAorCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50LCBib29sIGVuYWJsZSkKK3sKKwlp bnQgcmMgPSAwLCBpOworCWJvb2wgY2hhbmdlZCA9IGZhbHNlOworCXUzMiBtYXhfdXNlY2FzZV9u ZHggPSBWT1RFX0lOREVYX0RJU0FCTEUsIHByZXZfdXNlY2FzZV9uZHg7CisJc3RydWN0IGRwdV9w b3dlcl9jbGllbnQgKmNsaWVudDsKKworCWlmICghcGhhbmRsZSB8fCAhcGNsaWVudCkgeworCQlw cl9lcnIoImludmFsaWQgaW5wdXQgYXJndW1lbnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCWlmIChlbmFibGUpCisJ CXBjbGllbnQtPnJlZmNvdW50Kys7CisJZWxzZSBpZiAocGNsaWVudC0+cmVmY291bnQpCisJCXBj bGllbnQtPnJlZmNvdW50LS07CisKKwlpZiAocGNsaWVudC0+cmVmY291bnQpCisJCXBjbGllbnQt PnVzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9MT1c7CisJZWxzZQorCQlwY2xpZW50LT51c2VjYXNl X25keCA9IFZPVEVfSU5ERVhfRElTQUJMRTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xpZW50 LCAmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0KSB7CisJCWlmIChjbGllbnQtPnVz ZWNhc2VfbmR4IDwgVk9URV9JTkRFWF9NQVggJiYKKwkJICAgIGNsaWVudC0+dXNlY2FzZV9uZHgg PiBtYXhfdXNlY2FzZV9uZHgpCisJCQltYXhfdXNlY2FzZV9uZHggPSBjbGllbnQtPnVzZWNhc2Vf bmR4OworCX0KKworCWlmIChwaGFuZGxlLT5jdXJyZW50X3VzZWNhc2VfbmR4ICE9IG1heF91c2Vj YXNlX25keCkgeworCQljaGFuZ2VkID0gdHJ1ZTsKKwkJcHJldl91c2VjYXNlX25keCA9IHBoYW5k bGUtPmN1cnJlbnRfdXNlY2FzZV9uZHg7CisJCXBoYW5kbGUtPmN1cnJlbnRfdXNlY2FzZV9uZHgg PSBtYXhfdXNlY2FzZV9uZHg7CisJfQorCisJcHJfZGVidWcoIiVwUzogY2hhbmdlZD0lZCBjdXJy ZW50IGlkeD0lZCByZXF1ZXN0IGNsaWVudCAlcyBpZDoldSBlbmFibGU6JWQgcmVmY291bnQ6JWRc biIsCisJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgY2hhbmdlZCwgbWF4X3VzZWNhc2Vf bmR4LAorCQlwY2xpZW50LT5uYW1lLCBwY2xpZW50LT5pZCwgZW5hYmxlLCBwY2xpZW50LT5yZWZj b3VudCk7CisKKwlpZiAoIWNoYW5nZWQpCisJCWdvdG8gZW5kOworCisJaWYgKGVuYWJsZSkgewor CQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRsZSwKKwkJCQlEUFVfUE9XRVJf RVZFTlRfUFJFX0VOQUJMRSk7CisKKwkJZm9yIChpID0gMDsgaSA8IERQVV9QT1dFUl9IQU5ETEVf REJVU19JRF9NQVg7IGkrKykgeworCQkJcmMgPSBkcHVfcG93ZXJfZGF0YV9idXNfdXBkYXRlKAor CQkJCQkmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLCBlbmFibGUpOworCQkJaWYgKHJjKSB7 CisJCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IGRhdGEgYnVzIHZvdGUgaWQ9JWQgcmM9JWRcbiIs CisJCQkJCQlpLCByYyk7CisJCQkJZ290byBkYXRhX2J1c19oZGxfZXJyOworCQkJfQorCQl9CisK KwkJcmMgPSBkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUocGhhbmRsZS0+cmVnX2J1c19oZGwsCisJ CQkJCQkJbWF4X3VzZWNhc2VfbmR4KTsKKwkJaWYgKHJjKSB7CisJCQlwcl9lcnIoImZhaWxlZCB0 byBzZXQgcmVnIGJ1cyB2b3RlIHJjPSVkXG4iLCByYyk7CisJCQlnb3RvIHJlZ19idXNfaGRsX2Vy cjsKKwkJfQorCisJCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChwaGFuZGxlLAorCQkJ CURQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJMRSk7CisKKwl9IGVsc2UgeworCQlkcHVfcG93ZXJf ZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRsZSwKKwkJCQlEUFVfUE9XRVJfRVZFTlRfUFJFX0RJ U0FCTEUpOworCisJCWRwdV9wb3dlcl9yZWdfYnVzX3VwZGF0ZShwaGFuZGxlLT5yZWdfYnVzX2hk bCwKKwkJCQkJCQltYXhfdXNlY2FzZV9uZHgpOworCisJCWZvciAoaSA9IDAgOyBpIDwgRFBVX1BP V0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKQorCQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0 ZSgmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLAorCQkJCQllbmFibGUpOworCisJCWRwdV9w b3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChwaGFuZGxlLAorCQkJCURQVV9QT1dFUl9FVkVOVF9Q T1NUX0RJU0FCTEUpOworCX0KKworZW5kOgorCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRs ZV9sb2NrKTsKKwlyZXR1cm4gcmM7CisKK3JlZ19idXNfaGRsX2VycjoKKwlmb3IgKGkgPSAwIDsg aSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykKKwkJZHB1X3Bvd2VyX2RhdGFf YnVzX3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLCAwKTsKK2RhdGFfYnVzX2hk bF9lcnI6CisJcGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25keCA9IHByZXZfdXNlY2FzZV9uZHg7 CisJbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCXJldHVybiByYzsKK30K Kworc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqZHB1X3Bvd2VyX2hhbmRsZV9yZWdpc3Rlcl9ldmVu dCgKKwkJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCisJCXUzMiBldmVudF90eXBl LCB2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRfdHlwZSwgdm9pZCAqdXNyKSwKKwkJdm9pZCAqdXNy LCBjaGFyICpjbGllbnRfbmFtZSkKK3sKKwlzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpldmVudDsK KworCWlmICghcGhhbmRsZSkgeworCQlwcl9lcnIoImludmFsaWQgcG93ZXIgaGFuZGxlXG4iKTsK KwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfSBlbHNlIGlmICghY2JfZm5jIHx8ICFldmVu dF90eXBlKSB7CisJCXByX2Vycigibm8gY2FsbGJhY2sgZm5jIG9yIGV2ZW50IHR5cGVcbiIpOwor CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlldmVudCA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBkcHVfcG93ZXJfZXZlbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV2ZW50KQorCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWV2ZW50LT5ldmVudF90eXBlID0gZXZlbnRfdHlw ZTsKKwlldmVudC0+Y2JfZm5jID0gY2JfZm5jOworCWV2ZW50LT51c3IgPSB1c3I7CisJc3RybGNw eShldmVudC0+Y2xpZW50X25hbWUsIGNsaWVudF9uYW1lLCBNQVhfQ0xJRU5UX05BTUVfTEVOKTsK KwlldmVudC0+YWN0aXZlID0gdHJ1ZTsKKworCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVf bG9jayk7CisJbGlzdF9hZGQoJmV2ZW50LT5saXN0LCAmcGhhbmRsZS0+ZXZlbnRfbGlzdCk7CisJ bXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCisJcmV0dXJuIGV2ZW50Owor fQorCit2b2lkIGRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9ldmVudCgKKwkJc3RydWN0IGRw dV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCisJCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2ZW50 KQoreworCWlmICghcGhhbmRsZSB8fCAhZXZlbnQpIHsKKwkJcHJfZXJyKCJpbnZhbGlkIHBoYW5k bGUgb3IgZXZlbnRcbiIpOworCX0gZWxzZSBpZiAoIWV2ZW50LT5hY3RpdmUpIHsKKwkJcHJfZXJy KCJwb3dlciBoYW5kbGUgZGVpbml0IGFscmVhZHkgZG9uZVxuIik7CisJCWtmcmVlKGV2ZW50KTsK Kwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOworCQlsaXN0 X2RlbF9pbml0KCZldmVudC0+bGlzdCk7CisJCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRs ZV9sb2NrKTsKKwkJa2ZyZWUoZXZlbnQpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9wb3dlcl9oYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi45YTZkNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3Bvd2VyX2hhbmRsZS5oCkBAIC0wLDAgKzEsMjg4IEBACisvKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfRFBVX1BPV0VSX0hBTkRMRV9I XworI2RlZmluZSBfRFBVX1BPV0VSX0hBTkRMRV9IXworCisjZGVmaW5lIE1BWF9DTElFTlRfTkFN RV9MRU4gMTI4CisKKyNkZWZpbmUgRFBVX1BPV0VSX0hBTkRMRV9FTkFCTEVfQlVTX0FCX1FVT1RB CTAKKyNkZWZpbmUgRFBVX1BPV0VSX0hBTkRMRV9ESVNBQkxFX0JVU19BQl9RVU9UQQkwCisjZGVm aW5lIERQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19JQl9RVU9UQQkxNjAwMDAwMDAwCisjZGVm aW5lIERQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfSUJfUVVPVEEJMAorCisjaW5jbHVkZSA8 bGludXgvZHB1X2lvX3V0aWwuaD4KKworLyogZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3Jl IHBvd2VyIGhhbmRsZXIgZGlzYWJsZSAqLworI2RlZmluZSBEUFVfUE9XRVJfRVZFTlRfUFJFX0RJ U0FCTEUJMHgxCisKKy8qIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGFmdGVyIHBvd2VyIGhhbmRs ZXIgZGlzYWJsZSAqLworI2RlZmluZSBEUFVfUE9XRVJfRVZFTlRfUE9TVF9ESVNBQkxFCTB4Mgor CisvKiBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBiZWZvcmUgcG93ZXIgaGFuZGxlciBlbmFibGUg Ki8KKyNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BSRV9FTkFCTEUJMHg0CisKKy8qIGV2ZW50IHdp bGwgYmUgdHJpZ2dlcmVkIGFmdGVyIHBvd2VyIGhhbmRsZXIgZW5hYmxlICovCisjZGVmaW5lIERQ VV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJMRQkweDgKKworLyoqCisgKiBtZHNzX2J1c192b3RlX3R5 cGU6IHJlZ2lzdGVyIGJ1cyB2b3RlIHR5cGUKKyAqIFZPVEVfSU5ERVhfRElTQUJMRTogcmVtb3Zl cyB0aGUgY2xpZW50IHZvdGUKKyAqIFZPVEVfSU5ERVhfTE9XOiBrZWVwcyB0aGUgbG93ZXN0IHZv dGUgZm9yIHJlZ2lzdGVyIGJ1cworICogVk9URV9JTkRFWF9NQVg6IGludmFsaWQKKyAqLworZW51 bSBtZHNzX2J1c192b3RlX3R5cGUgeworCVZPVEVfSU5ERVhfRElTQUJMRSwKKwlWT1RFX0lOREVY X0xPVywKKwlWT1RFX0lOREVYX01BWCwKK307CisKKy8qKgorICogZW51bSBkcHVfcG93ZXJfaGFu ZGxlX2RhdGFfYnVzX2NsaWVudCAtIHR5cGUgb2YgYXhpIGJ1cyBjbGllbnRzCisgKiBARFBVX1BP V0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfUlQ6IGNvcmUgcmVhbC10aW1lIGJ1cyBjbGllbnQK KyAqIEBEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9OUlQ6IGNvcmUgbm9uLXJlYWwt dGltZSBidXMgY2xpZW50CisgKiBARFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTUFY OiBtYXhpbXVtIG51bWJlciBvZiBidXMgY2xpZW50IHR5cGUKKyAqLworZW51bSBkcHVfcG93ZXJf aGFuZGxlX2RhdGFfYnVzX2NsaWVudCB7CisJRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElF TlRfUlQsCisJRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTlJULAorCURQVV9QT1dF Ul9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWAorfTsKKworLyoqCisgKiBlbnVtIERQVV9QT1dF Ul9IQU5ETEVfREJVU19JRCAtIGRhdGEgYnVzIGlkZW50aWZpZXIKKyAqIEBEUFVfUE9XRVJfSEFO RExFX0RCVVNfSURfTU5PQzogRFBVL01OT0MgZGF0YSBidXMKKyAqIEBEUFVfUE9XRVJfSEFORExF X0RCVVNfSURfTExDQzogTU5PQy9MTENDIGRhdGEgYnVzCisgKiBARFBVX1BPV0VSX0hBTkRMRV9E QlVTX0lEX0VCSTogTExDQy9FQkkgZGF0YSBidXMKKyAqLworZW51bSBEUFVfUE9XRVJfSEFORExF X0RCVVNfSUQgeworCURQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NTk9DLAorCURQVV9QT1dFUl9I QU5ETEVfREJVU19JRF9MTENDLAorCURQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9FQkksCisJRFBV X1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWCwKK307CisKKy8qKgorICogc3RydWN0IGRwdV9wb3dl cl9jbGllbnQ6IHN0b3JlcyB0aGUgcG93ZXIgY2xpZW50IGZvciBkcHUgZHJpdmVyCisgKiBAbmFt ZToJbmFtZSBvZiB0aGUgY2xpZW50CisgKiBAdXNlY2FzZV9uZHg6IGN1cnJlbnQgcmVncyBidXMg dm90ZSB0eXBlCisgKiBAcmVmY291bnQ6CWN1cnJlbnQgcmVmY291bnQgaWYgbXVsdGlwbGUgbW9k dWxlcyBhcmUgdXNpbmcgc2FtZQorICogICAgICAgICAgICAgIHNhbWUgY2xpZW50IGZvciBlbmFi bGUvZGlzYWJsZS4gUG93ZXIgbW9kdWxlIHdpbGwKKyAqICAgICAgICAgICAgICBhZ2dyZWdhdGUg dGhlIHJlZmNvdW50IGFuZCB2b3RlIGFjY29yZGluZ2x5IGZvciB0aGlzCisgKiAgICAgICAgICAg ICAgY2xpZW50LgorICogQGlkOgkJYXNzaWduZWQgZHVyaW5nIGNyZWF0ZS4gaGVscHMgZm9yIGRl YnVnZ2luZy4KKyAqIEBsaXN0OglsaXN0IHRvIGF0dGFjaCBwb3dlciBoYW5kbGUgbWFzdGVyIGxp c3QKKyAqIEBhYjogICAgICAgICBhcmJpdHJhdGVkIGJhbmR3aWR0aCBmb3IgZWFjaCBidXMgY2xp ZW50CisgKiBAaWI6ICAgICAgICAgaW5zdGFudGFuZW91cyBiYW5kd2lkdGggZm9yIGVhY2ggYnVz IGNsaWVudAorICogQGFjdGl2ZToJaW5pZGNhdGVzIHRoZSBzdGF0ZSBvZiBkcHUgcG93ZXIgaGFu ZGxlCisgKi8KK3N0cnVjdCBkcHVfcG93ZXJfY2xpZW50IHsKKwljaGFyIG5hbWVbTUFYX0NMSUVO VF9OQU1FX0xFTl07CisJc2hvcnQgdXNlY2FzZV9uZHg7CisJc2hvcnQgcmVmY291bnQ7CisJdTMy IGlkOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1NjQgYWJbRFBVX1BPV0VSX0hBTkRMRV9E QVRBX0JVU19DTElFTlRfTUFYXTsKKwl1NjQgaWJbRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19D TElFTlRfTUFYXTsKKwlib29sIGFjdGl2ZTsKK307CisKKy8qKgorICogc3RydWN0IGRwdV9wb3dl cl9kYXRhX2hhbmRsZTogcG93ZXIgaGFuZGxlIHN0cnVjdCBmb3IgZGF0YSBidXMKKyAqIEBkYXRh X2J1c19zY2FsZV90YWJsZTogcG9pbnRlciB0byBidXMgc2NhbGluZyB0YWJsZQorICogQGRhdGFf YnVzX2hkbDogY3VycmVudCBkYXRhIGJ1cyBoYW5kbGUKKyAqIEBheGlfcG9ydF9jbnQ6IG51bWJl ciBvZiBydCBheGkgcG9ydHMKKyAqIEBucnRfYXhpX3BvcnRfY250OiBudW1iZXIgb2YgbnJ0IGF4 aSBwb3J0cworICogQGJ1c19jaGFubmVsczogbnVtYmVyIG9mIG1lbW9yeSBidXMgY2hhbm5lbHMK KyAqIEBjdXJyX2J3X3VjX2lkeDogY3VycmVudCB1c2UgY2FzZSBpbmRleCBvZiBkYXRhIGJ1cwor ICogQGFvX2J3X3VjX2lkeDogYWN0aXZlIG9ubHkgdXNlIGNhc2UgaW5kZXggb2YgZGF0YSBidXMK KyAqIEBhYl9ydDogcmVhbHRpbWUgYWIgcXVvdGEKKyAqIEBpYl9ydDogcmVhbHRpbWUgaWIgcXVv dGEKKyAqIEBhYl9ucnQ6IG5vbi1yZWFsdGltZSBhYiBxdW90YQorICogQGliX25ydDogbm9uLXJl YWx0aW1lIGliIHF1b3RhCisgKiBAZW5hYmxlOiB0cnVlIGlmIGJ1cyBpcyBlbmFibGVkCisgKi8K K3N0cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlIHsKKwlzdHJ1Y3QgbXNtX2J1c19zY2Fs ZV9wZGF0YSAqZGF0YV9idXNfc2NhbGVfdGFibGU7CisJdTMyIGRhdGFfYnVzX2hkbDsKKwl1MzIg YXhpX3BvcnRfY250OworCXUzMiBucnRfYXhpX3BvcnRfY250OworCXUzMiBidXNfY2hhbm5lbHM7 CisJdTMyIGN1cnJfYndfdWNfaWR4OworCXUzMiBhb19id191Y19pZHg7CisJdTY0IGFiX3J0Owor CXU2NCBpYl9ydDsKKwl1NjQgYWJfbnJ0OworCXU2NCBpYl9ucnQ7CisJYm9vbCBlbmFibGU7Cit9 OworCisvKgorICogc3RydWN0IGRwdV9wb3dlcl9ldmVudCAtIGxvY2FsIGV2ZW50IHJlZ2lzdHJh dGlvbiBzdHJ1Y3R1cmUKKyAqIEBjbGllbnRfbmFtZTogbmFtZSBvZiB0aGUgY2xpZW50IHJlZ2lz dGVyaW5nCisgKiBAY2JfZm5jOiBwb2ludGVyIHRvIGRlc2lyZWQgY2FsbGJhY2sgZnVuY3Rpb24K KyAqIEB1c3I6IHVzZXIgcG9pbnRlciB0byBwYXNzIHRvIGNhbGxiYWNrIGV2ZW50IHRyaWdnZXIK KyAqIEBldmVudDogcmVmZXIgdG8gRFBVX1BPV0VSX0hBTkRMRV9FVkVOVF8qCisgKiBAbGlzdDog bGlzdCB0byBhdHRhY2ggZXZlbnQgbWFzdGVyIGxpc3QKKyAqIEBhY3RpdmU6IGluZGljYXRlcyB0 aGUgc3RhdGUgb2YgZHB1IHBvd2VyIGhhbmRsZQorICovCitzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50 IHsKKwljaGFyIGNsaWVudF9uYW1lW01BWF9DTElFTlRfTkFNRV9MRU5dOworCXZvaWQgKCpjYl9m bmMpKHUzMiBldmVudF90eXBlLCB2b2lkICp1c3IpOworCXZvaWQgKnVzcjsKKwl1MzIgZXZlbnRf dHlwZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJYm9vbCBhY3RpdmU7Cit9OworCisvKioK KyAqIHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlOiBwb3dlciBoYW5kbGUgbWFpbiBzdHJ1Y3QKKyAq IEBjbGllbnRfY2xpc3Q6IG1hc3RlciBsaXN0IHRvIHN0b3JlIGFsbCBjbGllbnRzCisgKiBAcGhh bmRsZV9sb2NrOiBsb2NrIHRvIHN5bmNocm9uaXplIHRoZSBlbmFibGUvZGlzYWJsZQorICogQGRl djogcG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlCisgKiBAdXNlY2FzZV9uZHg6IGN1cnJlbnQg dXNlY2FzZSBpbmRleAorICogQHJlZ19idXNfaGRsOiBjdXJyZW50IHJlZ2lzdGVyIGJ1cyBoYW5k bGUKKyAqIEBkYXRhX2J1c19oYW5kbGU6IGNvbnRleHQgc3RydWN0dXJlIGZvciBkYXRhIGJ1cyBj b250cm9sCisgKiBAZXZlbnRfbGlzdDogY3VycmVudCBwb3dlciBoYW5kbGUgZXZlbnQgbGlzdAor ICovCitzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSB7CisJc3RydWN0IGxpc3RfaGVhZCBwb3dlcl9j bGllbnRfY2xpc3Q7CisJc3RydWN0IG11dGV4IHBoYW5kbGVfbG9jazsKKwlzdHJ1Y3QgZGV2aWNl ICpkZXY7CisJdTMyIGN1cnJlbnRfdXNlY2FzZV9uZHg7CisJdTMyIHJlZ19idXNfaGRsOworCXN0 cnVjdCBkcHVfcG93ZXJfZGF0YV9idXNfaGFuZGxlIGRhdGFfYnVzX2hhbmRsZQorCQlbRFBVX1BP V0VSX0hBTkRMRV9EQlVTX0lEX01BWF07CisJc3RydWN0IGxpc3RfaGVhZCBldmVudF9saXN0Owor fTsKKworLyoqCisgKiBkcHVfcG93ZXJfcmVzb3VyY2VfaW5pdCgpIC0gaW5pdGlhbGl6ZXMgdGhl IGRwdSBwb3dlciBoYW5kbGUKKyAqIEBwZGV2OiAgIHBsYXRmb3JtIGRldmljZSB0byBzZWFyY2gg dGhlIHBvd2VyIHJlc291cmNlcworICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIHRvIHN0b3JlIHRo ZSBwb3dlciByZXNvdXJjZXMKKyAqCisgKiBSZXR1cm46IGVycm9yIGNvZGUuCisgKi8KK2ludCBk cHVfcG93ZXJfcmVzb3VyY2VfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCXN0 cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwZGF0YSk7CisKKy8qKgorICogZHB1X3Bvd2VyX3Jlc291 cmNlX2RlaW5pdCgpIC0gcmVsZWFzZSB0aGUgZHB1IHBvd2VyIGhhbmRsZQorICogQHBkZXY6ICAg cGxhdGZvcm0gZGV2aWNlIGZvciBwb3dlciByZXNvdXJjZXMKKyAqIEBwZGF0YTogIHBvd2VyIGhh bmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKKyAqCisgKiBSZXR1cm46IGVycm9yIGNvZGUu CisgKi8KK3ZvaWQgZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2LAorCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwZGF0YSk7CisKKy8qKgorICog ZHB1X3Bvd2VyX2NsaWVudF9jcmVhdGUoKSAtIGNyZWF0ZSB0aGUgY2xpZW50IG9uIHBvd2VyIGhh bmRsZQorICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwor ICogQGNsaWVudF9uYW1lOiBuZXcgY2xpZW50IG5hbWUgZm9yIHJlZ2lzdHJhdGlvbgorICoKKyAq IFJldHVybjogZXJyb3IgY29kZS4KKyAqLworc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmRwdV9w b3dlcl9jbGllbnRfY3JlYXRlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwZGF0YSwKKwljaGFy ICpjbGllbnRfbmFtZSk7CisKKy8qKgorICogZHB1X3Bvd2VyX2NsaWVudF9kZXN0cm95KCkgLSBk ZXN0cm95IHRoZSBjbGllbnQgb24gcG93ZXIgaGFuZGxlCisgKiBAcGRhdGE6ICBwb3dlciBoYW5k bGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCisgKiBAY2xpZW50X25hbWU6IG5ldyBjbGllbnQg bmFtZSBmb3IgcmVnaXN0cmF0aW9uCisgKgorICogUmV0dXJuOiBub25lCisgKi8KK3ZvaWQgZHB1 X3Bvd2VyX2NsaWVudF9kZXN0cm95KHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAor CXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQpOworCisvKioKKyAqIGRwdV9wb3dlcl9y ZXNvdXJjZV9lbmFibGUoKSAtIGVuYWJsZS9kaXNhYmxlIHRoZSBwb3dlciByZXNvdXJjZXMKKyAq IEBwZGF0YTogIHBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKKyAqIEBjbGll bnQ6IGNsaWVudCBpbmZvcm1hdGlvbiB0byBlbmFibGUvZGlzYWJsZSBpdHMgdm90ZQorICogQGVu YWJsZTogYm9vbGVhbiByZXF1ZXN0IGZvciBlbmFibGUvZGlzYWJsZQorICoKKyAqIFJldHVybjog ZXJyb3IgY29kZS4KKyAqLworaW50IGRwdV9wb3dlcl9yZXNvdXJjZV9lbmFibGUoc3RydWN0IGRw dV9wb3dlcl9oYW5kbGUgKnBkYXRhLAorCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50 LCBib29sIGVuYWJsZSk7CisKKy8qKgorICogZHB1X3Bvd2VyX2RhdGFfYnVzX3N0YXRlX3VwZGF0 ZSgpIC0gdXBkYXRlIGRhdGEgYnVzIHN0YXRlCisgKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUgY29u dGFpbmluZyB0aGUgcmVzb3VyY2VzCisgKiBAZW5hYmxlOiB0YWtlIGVuYWJsZSB2cyBkaXNhYmxl IHBhdGgKKyAqCisgKiBSZXR1cm46IGVycm9yIGNvZGUuCisgKi8KK2ludCBkcHVfcG93ZXJfZGF0 YV9idXNfc3RhdGVfdXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAorCQkJ CQkJCWJvb2wgZW5hYmxlKTsKKworLyoqCisgKiBkcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3Rh KCkgLSBzZXQgZGF0YSBidXMgcXVvdGEgZm9yIHBvd2VyIGNsaWVudAorICogQHBoYW5kbGU6ICBw b3dlciBoYW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCisgKiBAY2xpZW50OiBjbGllbnQg aW5mb3JtYXRpb24gdG8gc2V0IHF1b3RhCisgKiBAYnVzX2NsaWVudDogcmVhbC10aW1lIG9yIG5v bi1yZWFsLXRpbWUgYnVzIGNsaWVudAorICogQGJ1c19pZDogaWRlbnRpZmllciBvZiBkYXRhIGJ1 cywgc2VlIERQVV9QT1dFUl9IQU5ETEVfREJVU19JRAorICogQGFiX3F1b3RhOiBhcmJpdHJhdGVk IGJ1cyBiYW5kd2lkdGgKKyAqIEBpYl9xdW90YTogaW5zdGFudGFuZW91cyBidXMgYmFuZHdpZHRo CisgKgorICogUmV0dXJuOiB6ZXJvIGlmIHN1Y2Nlc3MsIG9yIGVycm9yIGNvZGUgb3RoZXJ3aXNl CisgKi8KK2ludCBkcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKHN0cnVjdCBkcHVfcG93ZXJf aGFuZGxlICpwaGFuZGxlLAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwKKwkJ aW50IGJ1c19jbGllbnQsIHUzMiBidXNfaWQsCisJCXU2NCBhYl9xdW90YSwgdTY0IGliX3F1b3Rh KTsKKworLyoqCisgKiBkcHVfcG93ZXJfZGF0YV9idXNfYmFuZHdpZHRoX2N0cmwoKSAtIGNvbnRy b2wgZGF0YSBidXMgYmFuZHdpZHRoIGVuYWJsZQorICogQHBoYW5kbGU6ICBwb3dlciBoYW5kbGUg Y29udGFpbmluZyB0aGUgcmVzb3VyY2VzCisgKiBAY2xpZW50OiBjbGllbnQgaW5mb3JtYXRpb24g dG8gYmFuZHdpZHRoIGNvbnRyb2wKKyAqIEBlbmFibGU6IHRydWUgdG8gZW5hYmxlIGJhbmR3aWR0 aCBmb3IgZGF0YSBiYXNlCisgKgorICogUmV0dXJuOiBub25lCisgKi8KK3ZvaWQgZHB1X3Bvd2Vy X2RhdGFfYnVzX2JhbmR3aWR0aF9jdHJsKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxl LAorCQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwgaW50IGVuYWJsZSk7CisKKy8q KgorICogZHB1X3Bvd2VyX2hhbmRsZV9yZWdpc3Rlcl9ldmVudCAtIHJlZ2lzdGVyIGEgY2FsbGJh Y2sgZnVuY3Rpb24gZm9yIGFuIGV2ZW50LgorICoJQ2xpZW50cyBjYW4gcmVnaXN0ZXIgZm9yIG11 bHRpcGxlIGV2ZW50cyB3aXRoIGEgc2luZ2xlIHJlZ2lzdGVyLgorICoJQW55IGJsb2NrIHdpdGgg YWNjZXNzIHRvIHBoYW5kbGUgY2FuIHJlZ2lzdGVyIGZvciB0aGUgZXZlbnQKKyAqCW5vdGlmaWNh dGlvbi4KKyAqIEBwaGFuZGxlOglwb3dlciBoYW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2Vz CisgKiBAZXZlbnRfdHlwZToJZXZlbnQgdHlwZSB0byByZWdpc3RlcjsgcmVmZXIgRFBVX1BPV0VS X0hBTkRMRV9FVkVOVF8qCisgKiBAY2JfZm5jOglwb2ludGVyIHRvIGRlc2lyZWQgY2FsbGJhY2sg ZnVuY3Rpb24KKyAqIEB1c3I6CXVzZXIgcG9pbnRlciB0byBwYXNzIHRvIGNhbGxiYWNrIG9uIGV2 ZW50IHRyaWdnZXIKKyAqCisgKiBSZXR1cm46CWV2ZW50IHBvaW50ZXIgaWYgc3VjY2Vzcywgb3Ig ZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqZHB1X3Bv d2VyX2hhbmRsZV9yZWdpc3Rlcl9ldmVudCgKKwkJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBo YW5kbGUsCisJCXUzMiBldmVudF90eXBlLCB2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRfdHlwZSwg dm9pZCAqdXNyKSwKKwkJdm9pZCAqdXNyLCBjaGFyICpjbGllbnRfbmFtZSk7CisvKioKKyAqIGRw dV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9ldmVudCAtIHVucmVnaXN0ZXIgY2FsbGJhY2sgZm9y IGV2ZW50KHMpCisgKiBAcGhhbmRsZToJcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291 cmNlcworICogQGV2ZW50OglldmVudCBwb2ludGVyIHJldHVybmVkIGFmdGVyIHBvd2VyIGhhbmRs ZSByZWdpc3RlcgorICovCit2b2lkIGRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rlcl9ldmVudChz dHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKKwkJc3RydWN0IGRwdV9wb3dlcl9ldmVu dCAqZXZlbnQpOworCisvKioKKyAqIGRwdV9wb3dlcl9oYW5kbGVfZ2V0X2RidXNfbmFtZSAtIGdl dCBuYW1lIG9mIGdpdmVuIGRhdGEgYnVzIGlkZW50aWZpZXIKKyAqIEBidXNfaWQ6CWRhdGEgYnVz IGlkZW50aWZpZXIKKyAqIFJldHVybjoJUG9pbnRlciB0byBuYW1lIHN0cmluZyBpZiBzdWNjZXNz OyBOVUxMIG90aGVyd2lzZQorICovCitjb25zdCBjaGFyICpkcHVfcG93ZXJfaGFuZGxlX2dldF9k YnVzX25hbWUodTMyIGJ1c19pZCk7CisKKyNlbmRpZiAvKiBfRFBVX1BPV0VSX0hBTkRMRV9IXyAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggNzdiZTEwNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw dV9wb3dlcl9oYW5kbGUuYworKysgL2Rldi9udWxsCkBAIC0xLDY5MyArMCwwIEBACi0vKiBDb3B5 cmlnaHQgKGMpIDIwMTQtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBwcl9mbXQoZm10KQkiW2RybTol czolZF06ICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5l bC5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0j aW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNp bmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0j aWZkZWYgQ09ORklHX1FDT01fQlVTX1NDQUxJTkcKLSNpbmNsdWRlIDxsaW51eC9tc20tYnVzLmg+ Ci0jaW5jbHVkZSA8bGludXgvbXNtLWJ1cy1ib2FyZC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bGlu dXgvZHB1X2lvX3V0aWwuaD4KLQotI2luY2x1ZGUgImRwdV9wb3dlcl9oYW5kbGUuaCIKLSNpbmNs dWRlICJkcHVfdHJhY2UuaCIKLQotc3RhdGljIGNvbnN0IGNoYXIgKmRhdGFfYnVzX25hbWVbRFBV X1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWF0gPSB7Ci0JW0RQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9NTk9DXSA9ICJxY29tLGRwdS1kYXRhLWJ1cyIsCi0JW0RQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9MTENDXSA9ICJxY29tLGRwdS1sbGNjLWJ1cyIsCi0JW0RQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9FQkldID0gInFjb20sZHB1LWViaS1idXMiLAotfTsKLQotY29uc3QgY2hhciAqZHB1X3Bvd2Vy X2hhbmRsZV9nZXRfZGJ1c19uYW1lKHUzMiBidXNfaWQpCi17Ci0JaWYgKGJ1c19pZCA8IERQVV9Q T1dFUl9IQU5ETEVfREJVU19JRF9NQVgpCi0JCXJldHVybiBkYXRhX2J1c19uYW1lW2J1c19pZF07 Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgZHB1X3Bvd2VyX2V2ZW50X3RyaWdn ZXJfbG9ja2VkKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAotCQl1MzIgZXZlbnRf dHlwZSkKLXsKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50ICpldmVudDsKLQotCWxpc3RfZm9yX2Vh Y2hfZW50cnkoZXZlbnQsICZwaGFuZGxlLT5ldmVudF9saXN0LCBsaXN0KSB7Ci0JCWlmIChldmVu dC0+ZXZlbnRfdHlwZSAmIGV2ZW50X3R5cGUpCi0JCQlldmVudC0+Y2JfZm5jKGV2ZW50X3R5cGUs IGV2ZW50LT51c3IpOwotCX0KLX0KLQotc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmRwdV9wb3dl cl9jbGllbnRfY3JlYXRlKAotCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLCBjaGFy ICpjbGllbnRfbmFtZSkKLXsKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50OwotCXN0 YXRpYyB1MzIgaWQ7Ci0KLQlpZiAoIWNsaWVudF9uYW1lIHx8ICFwaGFuZGxlKSB7Ci0JCXByX2Vy cigiY2xpZW50IG5hbWUgaXMgbnVsbCBvciBpbnZhbGlkIHBvd2VyIGRhdGFcbiIpOwotCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgZHB1X3Bvd2VyX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCW11dGV4X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9j ayk7Ci0Jc3RybGNweShjbGllbnQtPm5hbWUsIGNsaWVudF9uYW1lLCBNQVhfQ0xJRU5UX05BTUVf TEVOKTsKLQljbGllbnQtPnVzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9ESVNBQkxFOwotCWNsaWVu dC0+aWQgPSBpZDsKLQljbGllbnQtPmFjdGl2ZSA9IHRydWU7Ci0JcHJfZGVidWcoImNsaWVudCAl cyBjcmVhdGVkOiVwSyBpZCA6JWRcbiIsIGNsaWVudF9uYW1lLAotCQljbGllbnQsIGlkKTsKLQlp ZCsrOwotCWxpc3RfYWRkKCZjbGllbnQtPmxpc3QsICZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xp c3QpOwotCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQotCXJldHVybiBj bGllbnQ7Ci19Ci0KLXZvaWQgZHB1X3Bvd2VyX2NsaWVudF9kZXN0cm95KHN0cnVjdCBkcHVfcG93 ZXJfaGFuZGxlICpwaGFuZGxlLAotCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpjbGllbnQpCi17 Ci0JaWYgKCFjbGllbnQgIHx8ICFwaGFuZGxlKSB7Ci0JCXByX2VycigicmVnIGJ1cyB2b3RlOiBp bnZhbGlkIGNsaWVudCBoYW5kbGVcbiIpOwotCX0gZWxzZSBpZiAoIWNsaWVudC0+YWN0aXZlKSB7 Ci0JCXByX2VycigiZHB1IHBvd2VyIGRlaW5pdCBhbHJlYWR5IGRvbmVcbiIpOwotCQlrZnJlZShj bGllbnQpOwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJidXMgdm90ZSBjbGllbnQgJXMgZGVzdHJv eWVkOiVwSyBpZDoldVxuIiwKLQkJCWNsaWVudC0+bmFtZSwgY2xpZW50LCBjbGllbnQtPmlkKTsK LQkJbXV0ZXhfbG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQkJbGlzdF9kZWxfaW5pdCgm Y2xpZW50LT5saXN0KTsKLQkJbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2spOwot CQlrZnJlZShjbGllbnQpOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR19RQ09NX0JVU19TQ0FMSU5H Ci0KLSNkZWZpbmUgTUFYX0FYSV9QT1JUX0NPVU5UIDMKLQotc3RhdGljIGludCBfZHB1X3Bvd2Vy X2RhdGFfYnVzX3NldF9xdW90YSgKLQkJc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUg KnBkYnVzLAotCQl1NjQgYWJfcXVvdGFfcnQsIHU2NCBhYl9xdW90YV9ucnQsCi0JCXU2NCBpYl9x dW90YV9ydCwgdTY0IGliX3F1b3RhX25ydCkKLXsKLQlpbnQgbmV3X3VjX2lkeDsKLQl1NjQgYWJf cXVvdGFbTUFYX0FYSV9QT1JUX0NPVU5UXSA9IHswLCAwfTsKLQl1NjQgaWJfcXVvdGFbTUFYX0FY SV9QT1JUX0NPVU5UXSA9IHswLCAwfTsKLQlpbnQgcmM7Ci0KLQlpZiAocGRidXMtPmRhdGFfYnVz X2hkbCA8IDEpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGJ1cyBoYW5kbGUgJWRcbiIsIHBkYnVzLT5k YXRhX2J1c19oZGwpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwZGJ1cy0+YWJfcnQgPSBh Yl9xdW90YV9ydDsKLQlwZGJ1cy0+aWJfcnQgPSBpYl9xdW90YV9ydDsKLQlwZGJ1cy0+YWJfbnJ0 ID0gYWJfcXVvdGFfbnJ0OwotCXBkYnVzLT5pYl9ucnQgPSBpYl9xdW90YV9ucnQ7Ci0KLQlpZiAo cGRidXMtPmVuYWJsZSkgewotCQlhYl9xdW90YV9ydCA9IG1heF90KHU2NCwgYWJfcXVvdGFfcnQs Ci0JCQkJRFBVX1BPV0VSX0hBTkRMRV9FTkFCTEVfQlVTX0FCX1FVT1RBKTsKLQkJaWJfcXVvdGFf cnQgPSBtYXhfdCh1NjQsIGliX3F1b3RhX3J0LAotCQkJCURQVV9QT1dFUl9IQU5ETEVfRU5BQkxF X0JVU19JQl9RVU9UQSk7Ci0JCWFiX3F1b3RhX25ydCA9IG1heF90KHU2NCwgYWJfcXVvdGFfbnJ0 LAotCQkJCURQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19BQl9RVU9UQSk7Ci0JCWliX3F1b3Rh X25ydCA9IG1heF90KHU2NCwgaWJfcXVvdGFfbnJ0LAotCQkJCURQVV9QT1dFUl9IQU5ETEVfRU5B QkxFX0JVU19JQl9RVU9UQSk7Ci0JfSBlbHNlIHsKLQkJYWJfcXVvdGFfcnQgPSBtaW5fdCh1NjQs IGFiX3F1b3RhX3J0LAotCQkJCURQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfQUJfUVVPVEEp OwotCQlpYl9xdW90YV9ydCA9IG1pbl90KHU2NCwgaWJfcXVvdGFfcnQsCi0JCQkJRFBVX1BPV0VS X0hBTkRMRV9ESVNBQkxFX0JVU19JQl9RVU9UQSk7Ci0JCWFiX3F1b3RhX25ydCA9IG1pbl90KHU2 NCwgYWJfcXVvdGFfbnJ0LAotCQkJCURQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfQUJfUVVP VEEpOwotCQlpYl9xdW90YV9ucnQgPSBtaW5fdCh1NjQsIGliX3F1b3RhX25ydCwKLQkJCQlEUFVf UE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0lCX1FVT1RBKTsKLQl9Ci0KLQlpZiAoIWFiX3F1b3Rh X3J0ICYmICFhYl9xdW90YV9ucnQgJiYgIWliX3F1b3RhX3J0ICYmICFpYl9xdW90YV9ucnQpICB7 Ci0JCW5ld191Y19pZHggPSAwOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgbXNtX2J1 c192ZWN0b3JzICp2ZWN0ID0gTlVMTDsKLQkJc3RydWN0IG1zbV9idXNfc2NhbGVfcGRhdGEgKmJ3 X3RhYmxlID0KLQkJCXBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZTsKLQkJdTMyIG5ydF9heGlf cG9ydF9jbnQgPSBwZGJ1cy0+bnJ0X2F4aV9wb3J0X2NudDsKLQkJdTMyIHRvdGFsX2F4aV9wb3J0 X2NudCA9IHBkYnVzLT5heGlfcG9ydF9jbnQ7Ci0JCXUzMiBydF9heGlfcG9ydF9jbnQgPSB0b3Rh bF9heGlfcG9ydF9jbnQgLSBucnRfYXhpX3BvcnRfY250OwotCi0JCWlmICghYndfdGFibGUgfHwg IXRvdGFsX2F4aV9wb3J0X2NudCB8fAotCQkgICAgdG90YWxfYXhpX3BvcnRfY250ID4gTUFYX0FY SV9QT1JUX0NPVU5UKSB7Ci0JCQlwcl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQkJcmV0dXJu IC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAocGRidXMtPmJ1c19jaGFubmVscykgewotCQkJaWJfcXVv dGFfcnQgPSBkaXZfdTY0KGliX3F1b3RhX3J0LAotCQkJCQkJcGRidXMtPmJ1c19jaGFubmVscyk7 Ci0JCQlpYl9xdW90YV9ucnQgPSBkaXZfdTY0KGliX3F1b3RhX25ydCwKLQkJCQkJCXBkYnVzLT5i dXNfY2hhbm5lbHMpOwotCQl9Ci0KLQkJaWYgKG5ydF9heGlfcG9ydF9jbnQpIHsKLQotCQkJYWJf cXVvdGFfcnQgPSBkaXZfdTY0KGFiX3F1b3RhX3J0LCBydF9heGlfcG9ydF9jbnQpOwotCQkJYWJf cXVvdGFfbnJ0ID0gZGl2X3U2NChhYl9xdW90YV9ucnQsIG5ydF9heGlfcG9ydF9jbnQpOwotCi0J CQlmb3IgKGkgPSAwOyBpIDwgdG90YWxfYXhpX3BvcnRfY250OyBpKyspIHsKLQkJCQlpZiAoaSA8 IHJ0X2F4aV9wb3J0X2NudCkgewotCQkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhX3J0OwotCQkJ CQlpYl9xdW90YVtpXSA9IGliX3F1b3RhX3J0OwotCQkJCX0gZWxzZSB7Ci0JCQkJCWFiX3F1b3Rh W2ldID0gYWJfcXVvdGFfbnJ0OwotCQkJCQlpYl9xdW90YVtpXSA9IGliX3F1b3RhX25ydDsKLQkJ CQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlhYl9xdW90YVswXSA9IGRpdl91NjQoYWJfcXVvdGFf cnQgKyBhYl9xdW90YV9ucnQsCi0JCQkJCXRvdGFsX2F4aV9wb3J0X2NudCk7Ci0JCQlpYl9xdW90 YVswXSA9IGliX3F1b3RhX3J0ICsgaWJfcXVvdGFfbnJ0OwotCi0JCQlmb3IgKGkgPSAxOyBpIDwg dG90YWxfYXhpX3BvcnRfY250OyBpKyspIHsKLQkJCQlhYl9xdW90YVtpXSA9IGFiX3F1b3RhWzBd OwotCQkJCWliX3F1b3RhW2ldID0gaWJfcXVvdGFbMF07Ci0JCQl9Ci0JCX0KLQotCQluZXdfdWNf aWR4ID0gKHBkYnVzLT5jdXJyX2J3X3VjX2lkeCAlCi0JCQkoYndfdGFibGUtPm51bV91c2VjYXNl cyAtIDEpKSArIDE7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHRvdGFsX2F4aV9wb3J0X2NudDsgaSsr KSB7Ci0JCQl2ZWN0ID0gJmJ3X3RhYmxlLT51c2VjYXNlW25ld191Y19pZHhdLnZlY3RvcnNbaV07 Ci0JCQl2ZWN0LT5hYiA9IGFiX3F1b3RhW2ldOwotCQkJdmVjdC0+aWIgPSBpYl9xdW90YVtpXTsK LQotCQkJcHJfZGVidWcoCi0JCQkJIiVzIHVjX2lkeD0lZCAlcyBwYXRoIGlkeD0lZCBhYj0lbGx1 IGliPSVsbHVcbiIsCi0JCQkJYndfdGFibGUtPm5hbWUsCi0JCQkJbmV3X3VjX2lkeCwgKGkgPCBy dF9heGlfcG9ydF9jbnQpID8gInJ0IiA6ICJucnQiCi0JCQkJLCBpLCB2ZWN0LT5hYiwgdmVjdC0+ aWIpOwotCQl9Ci0JfQotCXBkYnVzLT5jdXJyX2J3X3VjX2lkeCA9IG5ld191Y19pZHg7Ci0JcGRi dXMtPmFvX2J3X3VjX2lkeCA9IG5ld191Y19pZHg7Ci0KLQlEUFVfQVRSQUNFX0JFR0lOKCJtc21f YnVzX3NjYWxlX3JlcSIpOwotCXJjID0gbXNtX2J1c19zY2FsZV9jbGllbnRfdXBkYXRlX3JlcXVl c3QocGRidXMtPmRhdGFfYnVzX2hkbCwKLQkJCW5ld191Y19pZHgpOwotCURQVV9BVFJBQ0VfRU5E KCJtc21fYnVzX3NjYWxlX3JlcSIpOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgZHB1X3Bvd2Vy X2RhdGFfYnVzX3NldF9xdW90YShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJ c3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsCi0JCWludCBidXNfY2xpZW50LCB1MzIg YnVzX2lkLAotCQl1NjQgYWJfcXVvdGEsIHU2NCBpYl9xdW90YSkKLXsKLQlpbnQgcmMgPSAwOwot CWludCBpOwotCXU2NCB0b3RhbF9hYl9ydCA9IDAsIHRvdGFsX2liX3J0ID0gMDsKLQl1NjQgdG90 YWxfYWJfbnJ0ID0gMCwgdG90YWxfaWJfbnJ0ID0gMDsKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVu dCAqY2xpZW50OwotCi0JaWYgKCFwaGFuZGxlIHx8ICFwY2xpZW50IHx8Ci0JCQlidXNfY2xpZW50 ID49IERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWCB8fAotCQkJYnVzX2lkID49 IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVgpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIHBhcmFt ZXRlcnNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaGFuZGxl LT5waGFuZGxlX2xvY2spOwotCi0JcGNsaWVudC0+YWJbYnVzX2NsaWVudF0gPSBhYl9xdW90YTsK LQlwY2xpZW50LT5pYltidXNfY2xpZW50XSA9IGliX3F1b3RhOwotCXRyYWNlX2RwdV9wZXJmX3Vw ZGF0ZV9idXMoYnVzX2NsaWVudCwgYWJfcXVvdGEsIGliX3F1b3RhKTsKLQotCWxpc3RfZm9yX2Vh Y2hfZW50cnkoY2xpZW50LCAmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0KSB7Ci0J CWZvciAoaSA9IDA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9NQVg7IGkr KykgewotCQkJaWYgKGkgPT0gRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTlJUKSB7 Ci0JCQkJdG90YWxfYWJfbnJ0ICs9IGNsaWVudC0+YWJbaV07Ci0JCQkJdG90YWxfaWJfbnJ0ICs9 IGNsaWVudC0+aWJbaV07Ci0JCQl9IGVsc2UgewotCQkJCXRvdGFsX2FiX3J0ICs9IGNsaWVudC0+ YWJbaV07Ci0JCQkJdG90YWxfaWJfcnQgPSBtYXgodG90YWxfaWJfcnQsIGNsaWVudC0+aWJbaV0p OwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKHBoYW5kbGUtPmRhdGFfYnVzX2hhbmRsZVtidXNfaWRd LmRhdGFfYnVzX2hkbCkKLQkJcmMgPSBfZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgKLQkJ CSZwaGFuZGxlLT5kYXRhX2J1c19oYW5kbGVbYnVzX2lkXSwKLQkJCXRvdGFsX2FiX3J0LCB0b3Rh bF9hYl9ucnQsCi0JCQl0b3RhbF9pYl9ydCwgdG90YWxfaWJfbnJ0KTsKLQotCW11dGV4X3VubG9j aygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZv aWQgZHB1X3Bvd2VyX2RhdGFfYnVzX3VucmVnaXN0ZXIoCi0JCXN0cnVjdCBkcHVfcG93ZXJfZGF0 YV9idXNfaGFuZGxlICpwZGJ1cykKLXsKLQlpZiAocGRidXMtPmRhdGFfYnVzX2hkbCkgewotCQlt c21fYnVzX3NjYWxlX3VucmVnaXN0ZXJfY2xpZW50KHBkYnVzLT5kYXRhX2J1c19oZGwpOwotCQlw ZGJ1cy0+ZGF0YV9idXNfaGRsID0gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3Bvd2VyX2Rh dGFfYnVzX3BhcnNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0Jc3RydWN0IGRwdV9w b3dlcl9kYXRhX2J1c19oYW5kbGUgKnBkYnVzLCBjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQlpbnQgcmMgPSAwOwotCWludCBwYXRoczsKLQotCXBkYnVz LT5idXNfY2hhbm5lbHMgPSAxOwotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGRldi0+ZGV2 Lm9mX25vZGUsCi0JCSJxY29tLGRwdS1kcmFtLWNoYW5uZWxzIiwgJnBkYnVzLT5idXNfY2hhbm5l bHMpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygibnVtYmVyIG9mIGNoYW5uZWxzIHByb3BlcnR5 IG5vdCBzcGVjaWZpZWRcbiIpOwotCQlyYyA9IDA7Ci0JfQotCi0JcGRidXMtPm5ydF9heGlfcG9y dF9jbnQgPSAwOwotCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUs Ci0JCQkicWNvbSxkcHUtbnVtLW5ydC1wYXRocyIsCi0JCQkmcGRidXMtPm5ydF9heGlfcG9ydF9j bnQpOwotCWlmIChyYykgewotCQlwcl9kZWJ1ZygibnVtYmVyIG9mIGF4aSBwb3J0IHByb3BlcnR5 IG5vdCBzcGVjaWZpZWRcbiIpOwotCQlyYyA9IDA7Ci0JfQotCi0Jbm9kZSA9IG9mX2dldF9jaGls ZF9ieV9uYW1lKHBkZXYtPmRldi5vZl9ub2RlLCBuYW1lKTsKLQlpZiAobm9kZSkgewotCQlyYyA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsCi0JCQkJInFjb20sbXNtLWJ1cyxudW0tcGF0aHMi LCAmcGF0aHMpOwotCQlpZiAocmMpIHsKLQkJCXByX2VycigiRXJyb3IuIHFjb20sbXNtLWJ1cyxu dW0tcGF0aHMgbm90IGZvdW5kXG4iKTsKLQkJCXJldHVybiByYzsKLQkJfQotCQlwZGJ1cy0+YXhp X3BvcnRfY250ID0gcGF0aHM7Ci0KLQkJcGRidXMtPmRhdGFfYnVzX3NjYWxlX3RhYmxlID0KLQkJ CQltc21fYnVzX3BkYXRhX2Zyb21fbm9kZShwZGV2LCBub2RlKTsKLQkJaWYgKElTX0VSUl9PUl9O VUxMKHBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSkpIHsKLQkJCXByX2VycigicmVnIGJ1cyBo YW5kbGUgcGFyc2luZyBmYWlsZWRcbiIpOwotCQkJcmMgPSBQVFJfRVJSKHBkYnVzLT5kYXRhX2J1 c19zY2FsZV90YWJsZSk7Ci0JCQlpZiAoIXBkYnVzLT5kYXRhX2J1c19zY2FsZV90YWJsZSkKLQkJ CQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCQlwZGJ1cy0+ZGF0YV9idXNfaGRs ID0gbXNtX2J1c19zY2FsZV9yZWdpc3Rlcl9jbGllbnQoCi0JCQkJcGRidXMtPmRhdGFfYnVzX3Nj YWxlX3RhYmxlKTsKLQkJaWYgKCFwZGJ1cy0+ZGF0YV9idXNfaGRsKSB7Ci0JCQlwcl9lcnIoImRh dGFfYnVzX2NsaWVudCByZWdpc3RlciBmYWlsZWRcbiIpOwotCQkJcmMgPSAtRUlOVkFMOwotCQkJ Z290byBlbmQ7Ci0JCX0KLQkJcHJfZGVidWcoInJlZ2lzdGVyICVzIGRhdGFfYnVzX2hkbD0leFxu IiwgbmFtZSwKLQkJCQlwZGJ1cy0+ZGF0YV9idXNfaGRsKTsKLQl9Ci0KLWVuZDoKLQlyZXR1cm4g cmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3Bvd2VyX3JlZ19idXNfcGFyc2Uoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSkKLXsK LQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7Ci0Jc3RydWN0IG1zbV9idXNfc2NhbGVfcGRhdGEg KmJ1c19zY2FsZV90YWJsZTsKLQlpbnQgcmMgPSAwOwotCi0Jbm9kZSA9IG9mX2dldF9jaGlsZF9i eV9uYW1lKHBkZXYtPmRldi5vZl9ub2RlLCAicWNvbSxkcHUtcmVnLWJ1cyIpOwotCWlmIChub2Rl KSB7Ci0JCWJ1c19zY2FsZV90YWJsZSA9IG1zbV9idXNfcGRhdGFfZnJvbV9ub2RlKHBkZXYsIG5v ZGUpOwotCQlpZiAoSVNfRVJSX09SX05VTEwoYnVzX3NjYWxlX3RhYmxlKSkgewotCQkJcHJfZXJy KCJyZWcgYnVzIGhhbmRsZSBwYXJzaW5nIGZhaWxlZFxuIik7Ci0JCQlyYyA9IFBUUl9FUlIoYnVz X3NjYWxlX3RhYmxlKTsKLQkJCWlmICghYnVzX3NjYWxlX3RhYmxlKQotCQkJCXJjID0gLUVJTlZB TDsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JCXBoYW5kbGUtPnJlZ19idXNfaGRsID0gbXNtX2J1c19z Y2FsZV9yZWdpc3Rlcl9jbGllbnQoCi0JCQkgICAgICBidXNfc2NhbGVfdGFibGUpOwotCQlpZiAo IXBoYW5kbGUtPnJlZ19idXNfaGRsKSB7Ci0JCQlwcl9lcnIoInJlZ19idXNfY2xpZW50IHJlZ2lz dGVyIGZhaWxlZFxuIik7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCQlw cl9kZWJ1ZygicmVnaXN0ZXIgcmVnX2J1c19oZGw9JXhcbiIsIHBoYW5kbGUtPnJlZ19idXNfaGRs KTsKLQl9Ci0KLWVuZDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9wb3dlcl9y ZWdfYnVzX3VucmVnaXN0ZXIodTMyIHJlZ19idXNfaGRsKQotewotCWlmIChyZWdfYnVzX2hkbCkK LQkJbXNtX2J1c19zY2FsZV91bnJlZ2lzdGVyX2NsaWVudChyZWdfYnVzX2hkbCk7Ci19Ci0KLWlu dCBkcHVfcG93ZXJfZGF0YV9idXNfc3RhdGVfdXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxl ICpwaGFuZGxlLAotCQkJCQkJCWJvb2wgZW5hYmxlKQotewotCWludCBpOwotCi0JaWYgKCFwaGFu ZGxlKSB7Ci0JCXByX2VycigiaW52YWxpZCBwYXJhbVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwot CX0KLQotCWZvciAoaSA9IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NTk9DOwotCQkJaSA8IERQ VV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykKLQkJcGhhbmRsZS0+ZGF0YV9idXNfaGFu ZGxlW2ldLmVuYWJsZSA9IGVuYWJsZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRw dV9wb3dlcl9kYXRhX2J1c191cGRhdGUoc3RydWN0IGRwdV9wb3dlcl9kYXRhX2J1c19oYW5kbGUg KnBkYnVzLAotCQkJCQkJCWJvb2wgZW5hYmxlKQotewotCWludCByYyA9IDA7Ci0KLQlwZGJ1cy0+ ZW5hYmxlID0gZW5hYmxlOwotCi0JaWYgKHBkYnVzLT5kYXRhX2J1c19oZGwpCi0JCXJjID0gX2Rw dV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEocGRidXMsIHBkYnVzLT5hYl9ydCwKLQkJCQlwZGJ1 cy0+YWJfbnJ0LCBwZGJ1cy0+aWJfcnQsIHBkYnVzLT5pYl9ucnQpOwotCi0JaWYgKHJjKQotCQlw cl9lcnIoImZhaWxlZCB0byBzZXQgZGF0YSBidXMgdm90ZSByYz0lZCBlbmFibGU6JWRcbiIsCi0J CQkJCQkJcmMsIGVuYWJsZSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3Bv d2VyX3JlZ19idXNfdXBkYXRlKHUzMiByZWdfYnVzX2hkbCwgdTMyIHVzZWNhc2VfbmR4KQotewot CWludCByYyA9IDA7Ci0KLQlpZiAocmVnX2J1c19oZGwpCi0JCXJjID0gbXNtX2J1c19zY2FsZV9j bGllbnRfdXBkYXRlX3JlcXVlc3QocmVnX2J1c19oZGwsCi0JCQkJCQkJCXVzZWNhc2VfbmR4KTsK LQlpZiAocmMpCi0JCXByX2VycigiZmFpbGVkIHRvIHNldCByZWcgYnVzIHZvdGUgcmM9JWRcbiIs IHJjKTsKLQotCXJldHVybiByYzsKLX0KLSNlbHNlCi1zdGF0aWMgaW50IGRwdV9wb3dlcl9kYXRh X2J1c19wYXJzZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQlzdHJ1Y3QgZHB1X3Bv d2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKAotCQlz dHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSAqcGRidXMpCi17Ci19Ci0KLWludCBkcHVf cG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxl LAotCQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwKLQkJaW50IGJ1c19jbGllbnQs IHUzMiBidXNfaWQsCi0JCXU2NCBhYl9xdW90YSwgdTY0IGliX3F1b3RhKQotewotCXJldHVybiAw OwotfQotCi1zdGF0aWMgaW50IGRwdV9wb3dlcl9yZWdfYnVzX3BhcnNlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsCi0Jc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCi17Ci0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9wb3dlcl9yZWdfYnVzX3VucmVnaXN0ZXIo dTMyIHJlZ19idXNfaGRsKQotewotfQotCi1zdGF0aWMgaW50IGRwdV9wb3dlcl9yZWdfYnVzX3Vw ZGF0ZSh1MzIgcmVnX2J1c19oZGwsIHUzMiB1c2VjYXNlX25keCkKLXsKLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCBkcHVfcG93ZXJfZGF0YV9idXNfdXBkYXRlKHN0cnVjdCBkcHVfcG93ZXJf ZGF0YV9idXNfaGFuZGxlICpwZGJ1cywKLQkJCQkJCQlib29sIGVuYWJsZSkKLXsKLQlyZXR1cm4g MDsKLX0KLQotaW50IGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoc3RydWN0IGRwdV9w b3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0JCQkJCQkJYm9vbCBlbmFibGUpCi17Ci0JcmV0dXJuIDA7 Ci19Ci0jZW5kaWYKLQotaW50IGRwdV9wb3dlcl9yZXNvdXJjZV9pbml0KHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsCi0Jc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUpCi17Ci0J aW50IHJjID0gMCwgaTsKLQotCWlmICghcGhhbmRsZSB8fCAhcGRldikgewotCQlwcl9lcnIoImlu dmFsaWQgaW5wdXQgcGFyYW1cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwaGFuZGxl LT5kZXYgPSAmcGRldi0+ZGV2OwotCi0JcmMgPSBkcHVfcG93ZXJfcmVnX2J1c19wYXJzZShwZGV2 LCBwaGFuZGxlKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJyZWdpc3RlciBidXMgcGFyc2UgZmFp bGVkIHJjPSVkXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlmb3IgKGkgPSBEUFVfUE9X RVJfSEFORExFX0RCVVNfSURfTU5PQzsKLQkJCWkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURf TUFYOyBpKyspIHsKLQkJcmMgPSBkcHVfcG93ZXJfZGF0YV9idXNfcGFyc2UocGRldiwKLQkJCQkm cGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLAotCQkJCWRhdGFfYnVzX25hbWVbaV0pOwotCQlp ZiAocmMpIHsKLQkJCXByX2VycigicmVnaXN0ZXIgZGF0YSBidXMgcGFyc2UgZmFpbGVkIGlkPSVk IHJjPSVkXG4iLAotCQkJCQlpLCByYyk7Ci0JCQlnb3RvIGRhdGFfYnVzX2VycjsKLQkJfQotCX0K LQotCUlOSVRfTElTVF9IRUFEKCZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xpc3QpOwotCUlOSVRf TElTVF9IRUFEKCZwaGFuZGxlLT5ldmVudF9saXN0KTsKLQotCW11dGV4X2luaXQoJnBoYW5kbGUt PnBoYW5kbGVfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci0KLWRhdGFfYnVzX2VycjoKLQlmb3IgKGkt LTsgaSA+PSAwOyBpLS0pCi0JCWRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKCZwaGFuZGxl LT5kYXRhX2J1c19oYW5kbGVbaV0pOwotCWRwdV9wb3dlcl9yZWdfYnVzX3VucmVnaXN0ZXIocGhh bmRsZS0+cmVnX2J1c19oZGwpOwotCXJldHVybiByYzsKLX0KLQotdm9pZCBkcHVfcG93ZXJfcmVz b3VyY2VfZGVpbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0Jc3RydWN0IGRwdV9w b3dlcl9oYW5kbGUgKnBoYW5kbGUpCi17Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmN1cnJf Y2xpZW50LCAqbmV4dF9jbGllbnQ7Ci0Jc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqY3Vycl9ldmVu dCwgKm5leHRfZXZlbnQ7Ci0JaW50IGk7Ci0KLQlpZiAoIXBoYW5kbGUgfHwgIXBkZXYpIHsKLQkJ cHJfZXJyKCJpbnZhbGlkIGlucHV0IHBhcmFtXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCW11dGV4 X2xvY2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KGN1cnJfY2xpZW50LCBuZXh0X2NsaWVudCwKLQkJCSZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xp c3QsIGxpc3QpIHsKLQkJcHJfZXJyKCJjbGllbmQ6JXMtJWQgc3RpbGwgcmVnaXN0ZXJlZCB3aXRo IHJlZmNvdW50OiVkXG4iLAotCQkJCWN1cnJfY2xpZW50LT5uYW1lLCBjdXJyX2NsaWVudC0+aWQs Ci0JCQkJY3Vycl9jbGllbnQtPnJlZmNvdW50KTsKLQkJY3Vycl9jbGllbnQtPmFjdGl2ZSA9IGZh bHNlOwotCQlsaXN0X2RlbCgmY3Vycl9jbGllbnQtPmxpc3QpOwotCX0KLQotCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShjdXJyX2V2ZW50LCBuZXh0X2V2ZW50LAotCQkJJnBoYW5kbGUtPmV2ZW50 X2xpc3QsIGxpc3QpIHsKLQkJcHJfZXJyKCJldmVudDolZCwgY2xpZW50OiVzIHN0aWxsIHJlZ2lz dGVyZWRcbiIsCi0JCQkJY3Vycl9ldmVudC0+ZXZlbnRfdHlwZSwKLQkJCQljdXJyX2V2ZW50LT5j bGllbnRfbmFtZSk7Ci0JCWN1cnJfZXZlbnQtPmFjdGl2ZSA9IGZhbHNlOwotCQlsaXN0X2RlbCgm Y3Vycl9ldmVudC0+bGlzdCk7Ci0JfQotCW11dGV4X3VubG9jaygmcGhhbmRsZS0+cGhhbmRsZV9s b2NrKTsKLQotCWZvciAoaSA9IDA7IGkgPCBEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTUFYOyBp KyspCi0JCWRwdV9wb3dlcl9kYXRhX2J1c191bnJlZ2lzdGVyKCZwaGFuZGxlLT5kYXRhX2J1c19o YW5kbGVbaV0pOwotCi0JZHB1X3Bvd2VyX3JlZ19idXNfdW5yZWdpc3RlcihwaGFuZGxlLT5yZWdf YnVzX2hkbCk7Ci19Ci0KLWludCBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVf cG93ZXJfaGFuZGxlICpwaGFuZGxlLAotCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50 LCBib29sIGVuYWJsZSkKLXsKLQlpbnQgcmMgPSAwLCBpOwotCWJvb2wgY2hhbmdlZCA9IGZhbHNl OwotCXUzMiBtYXhfdXNlY2FzZV9uZHggPSBWT1RFX0lOREVYX0RJU0FCTEUsIHByZXZfdXNlY2Fz ZV9uZHg7Ci0Jc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKmNsaWVudDsKLQotCWlmICghcGhhbmRs ZSB8fCAhcGNsaWVudCkgewotCQlwcl9lcnIoImludmFsaWQgaW5wdXQgYXJndW1lbnRcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xv Y2spOwotCWlmIChlbmFibGUpCi0JCXBjbGllbnQtPnJlZmNvdW50Kys7Ci0JZWxzZSBpZiAocGNs aWVudC0+cmVmY291bnQpCi0JCXBjbGllbnQtPnJlZmNvdW50LS07Ci0KLQlpZiAocGNsaWVudC0+ cmVmY291bnQpCi0JCXBjbGllbnQtPnVzZWNhc2VfbmR4ID0gVk9URV9JTkRFWF9MT1c7Ci0JZWxz ZQotCQlwY2xpZW50LT51c2VjYXNlX25keCA9IFZPVEVfSU5ERVhfRElTQUJMRTsKLQotCWxpc3Rf Zm9yX2VhY2hfZW50cnkoY2xpZW50LCAmcGhhbmRsZS0+cG93ZXJfY2xpZW50X2NsaXN0LCBsaXN0 KSB7Ci0JCWlmIChjbGllbnQtPnVzZWNhc2VfbmR4IDwgVk9URV9JTkRFWF9NQVggJiYKLQkJICAg IGNsaWVudC0+dXNlY2FzZV9uZHggPiBtYXhfdXNlY2FzZV9uZHgpCi0JCQltYXhfdXNlY2FzZV9u ZHggPSBjbGllbnQtPnVzZWNhc2VfbmR4OwotCX0KLQotCWlmIChwaGFuZGxlLT5jdXJyZW50X3Vz ZWNhc2VfbmR4ICE9IG1heF91c2VjYXNlX25keCkgewotCQljaGFuZ2VkID0gdHJ1ZTsKLQkJcHJl dl91c2VjYXNlX25keCA9IHBoYW5kbGUtPmN1cnJlbnRfdXNlY2FzZV9uZHg7Ci0JCXBoYW5kbGUt PmN1cnJlbnRfdXNlY2FzZV9uZHggPSBtYXhfdXNlY2FzZV9uZHg7Ci0JfQotCi0JcHJfZGVidWco IiVwUzogY2hhbmdlZD0lZCBjdXJyZW50IGlkeD0lZCByZXF1ZXN0IGNsaWVudCAlcyBpZDoldSBl bmFibGU6JWQgcmVmY291bnQ6JWRcbiIsCi0JCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwg Y2hhbmdlZCwgbWF4X3VzZWNhc2VfbmR4LAotCQlwY2xpZW50LT5uYW1lLCBwY2xpZW50LT5pZCwg ZW5hYmxlLCBwY2xpZW50LT5yZWZjb3VudCk7Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCWdvdG8gZW5k OwotCi0JaWYgKGVuYWJsZSkgewotCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhh bmRsZSwKLQkJCQlEUFVfUE9XRVJfRVZFTlRfUFJFX0VOQUJMRSk7Ci0KLQkJZm9yIChpID0gMDsg aSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkrKykgewotCQkJcmMgPSBkcHVfcG93 ZXJfZGF0YV9idXNfdXBkYXRlKAotCQkJCQkmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLCBl bmFibGUpOwotCQkJaWYgKHJjKSB7Ci0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IGRhdGEgYnVz IHZvdGUgaWQ9JWQgcmM9JWRcbiIsCi0JCQkJCQlpLCByYyk7Ci0JCQkJZ290byBkYXRhX2J1c19o ZGxfZXJyOwotCQkJfQotCQl9Ci0KLQkJcmMgPSBkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUocGhh bmRsZS0+cmVnX2J1c19oZGwsCi0JCQkJCQkJbWF4X3VzZWNhc2VfbmR4KTsKLQkJaWYgKHJjKSB7 Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBzZXQgcmVnIGJ1cyB2b3RlIHJjPSVkXG4iLCByYyk7Ci0J CQlnb3RvIHJlZ19idXNfaGRsX2VycjsKLQkJfQotCi0JCWRwdV9wb3dlcl9ldmVudF90cmlnZ2Vy X2xvY2tlZChwaGFuZGxlLAotCQkJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0VOQUJMRSk7Ci0KLQl9 IGVsc2UgewotCQlkcHVfcG93ZXJfZXZlbnRfdHJpZ2dlcl9sb2NrZWQocGhhbmRsZSwKLQkJCQlE UFVfUE9XRVJfRVZFTlRfUFJFX0RJU0FCTEUpOwotCi0JCWRwdV9wb3dlcl9yZWdfYnVzX3VwZGF0 ZShwaGFuZGxlLT5yZWdfYnVzX2hkbCwKLQkJCQkJCQltYXhfdXNlY2FzZV9uZHgpOwotCi0JCWZv ciAoaSA9IDAgOyBpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01BWDsgaSsrKQotCQkJZHB1 X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxlW2ldLAotCQkJ CQllbmFibGUpOwotCi0JCWRwdV9wb3dlcl9ldmVudF90cmlnZ2VyX2xvY2tlZChwaGFuZGxlLAot CQkJCURQVV9QT1dFUl9FVkVOVF9QT1NUX0RJU0FCTEUpOwotCX0KLQotZW5kOgotCW11dGV4X3Vu bG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci0KLXJlZ19idXNfaGRs X2VycjoKLQlmb3IgKGkgPSAwIDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVg7IGkr KykKLQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9idXNfaGFuZGxl W2ldLCAwKTsKLWRhdGFfYnVzX2hkbF9lcnI6Ci0JcGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25k eCA9IHByZXZfdXNlY2FzZV9uZHg7Ci0JbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xv Y2spOwotCXJldHVybiByYzsKLX0KLQotc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqZHB1X3Bvd2Vy X2hhbmRsZV9yZWdpc3Rlcl9ldmVudCgKLQkJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5k bGUsCi0JCXUzMiBldmVudF90eXBlLCB2b2lkICgqY2JfZm5jKSh1MzIgZXZlbnRfdHlwZSwgdm9p ZCAqdXNyKSwKLQkJdm9pZCAqdXNyLCBjaGFyICpjbGllbnRfbmFtZSkKLXsKLQlzdHJ1Y3QgZHB1 X3Bvd2VyX2V2ZW50ICpldmVudDsKLQotCWlmICghcGhhbmRsZSkgewotCQlwcl9lcnIoImludmFs aWQgcG93ZXIgaGFuZGxlXG4iKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfSBlbHNl IGlmICghY2JfZm5jIHx8ICFldmVudF90eXBlKSB7Ci0JCXByX2Vycigibm8gY2FsbGJhY2sgZm5j IG9yIGV2ZW50IHR5cGVcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KLQll dmVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfcG93ZXJfZXZlbnQpLCBHRlBfS0VSTkVM KTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWV2ZW50LT5l dmVudF90eXBlID0gZXZlbnRfdHlwZTsKLQlldmVudC0+Y2JfZm5jID0gY2JfZm5jOwotCWV2ZW50 LT51c3IgPSB1c3I7Ci0Jc3RybGNweShldmVudC0+Y2xpZW50X25hbWUsIGNsaWVudF9uYW1lLCBN QVhfQ0xJRU5UX05BTUVfTEVOKTsKLQlldmVudC0+YWN0aXZlID0gdHJ1ZTsKLQotCW11dGV4X2xv Y2soJnBoYW5kbGUtPnBoYW5kbGVfbG9jayk7Ci0JbGlzdF9hZGQoJmV2ZW50LT5saXN0LCAmcGhh bmRsZS0+ZXZlbnRfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZwaGFuZGxlLT5waGFuZGxlX2xvY2sp OwotCi0JcmV0dXJuIGV2ZW50OwotfQotCi12b2lkIGRwdV9wb3dlcl9oYW5kbGVfdW5yZWdpc3Rl cl9ldmVudCgKLQkJc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0JCXN0cnVjdCBk cHVfcG93ZXJfZXZlbnQgKmV2ZW50KQotewotCWlmICghcGhhbmRsZSB8fCAhZXZlbnQpIHsKLQkJ cHJfZXJyKCJpbnZhbGlkIHBoYW5kbGUgb3IgZXZlbnRcbiIpOwotCX0gZWxzZSBpZiAoIWV2ZW50 LT5hY3RpdmUpIHsKLQkJcHJfZXJyKCJwb3dlciBoYW5kbGUgZGVpbml0IGFscmVhZHkgZG9uZVxu Iik7Ci0JCWtmcmVlKGV2ZW50KTsKLQl9IGVsc2UgewotCQltdXRleF9sb2NrKCZwaGFuZGxlLT5w aGFuZGxlX2xvY2spOwotCQlsaXN0X2RlbF9pbml0KCZldmVudC0+bGlzdCk7Ci0JCW11dGV4X3Vu bG9jaygmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKLQkJa2ZyZWUoZXZlbnQpOwotCX0KLX0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2VyX2hhbmRsZS5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDlhNmQ0YjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93 ZXJfaGFuZGxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0RQVV9QT1dFUl9IQU5ETEVfSF8KLSNk ZWZpbmUgX0RQVV9QT1dFUl9IQU5ETEVfSF8KLQotI2RlZmluZSBNQVhfQ0xJRU5UX05BTUVfTEVO IDEyOAotCi0jZGVmaW5lIERQVV9QT1dFUl9IQU5ETEVfRU5BQkxFX0JVU19BQl9RVU9UQQkwCi0j ZGVmaW5lIERQVV9QT1dFUl9IQU5ETEVfRElTQUJMRV9CVVNfQUJfUVVPVEEJMAotI2RlZmluZSBE UFVfUE9XRVJfSEFORExFX0VOQUJMRV9CVVNfSUJfUVVPVEEJMTYwMDAwMDAwMAotI2RlZmluZSBE UFVfUE9XRVJfSEFORExFX0RJU0FCTEVfQlVTX0lCX1FVT1RBCTAKLQotI2luY2x1ZGUgPGxpbnV4 L2RwdV9pb191dGlsLmg+Ci0KLS8qIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSBwb3dl ciBoYW5kbGVyIGRpc2FibGUgKi8KLSNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BSRV9ESVNBQkxF CTB4MQotCi0vKiBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciBwb3dlciBoYW5kbGVyIGRp c2FibGUgKi8KLSNkZWZpbmUgRFBVX1BPV0VSX0VWRU5UX1BPU1RfRElTQUJMRQkweDIKLQotLyog ZXZlbnQgd2lsbCBiZSB0cmlnZ2VyZWQgYmVmb3JlIHBvd2VyIGhhbmRsZXIgZW5hYmxlICovCi0j ZGVmaW5lIERQVV9QT1dFUl9FVkVOVF9QUkVfRU5BQkxFCTB4NAotCi0vKiBldmVudCB3aWxsIGJl IHRyaWdnZXJlZCBhZnRlciBwb3dlciBoYW5kbGVyIGVuYWJsZSAqLwotI2RlZmluZSBEUFVfUE9X RVJfRVZFTlRfUE9TVF9FTkFCTEUJMHg4Ci0KLS8qKgotICogbWRzc19idXNfdm90ZV90eXBlOiBy ZWdpc3RlciBidXMgdm90ZSB0eXBlCi0gKiBWT1RFX0lOREVYX0RJU0FCTEU6IHJlbW92ZXMgdGhl IGNsaWVudCB2b3RlCi0gKiBWT1RFX0lOREVYX0xPVzoga2VlcHMgdGhlIGxvd2VzdCB2b3RlIGZv ciByZWdpc3RlciBidXMKLSAqIFZPVEVfSU5ERVhfTUFYOiBpbnZhbGlkCi0gKi8KLWVudW0gbWRz c19idXNfdm90ZV90eXBlIHsKLQlWT1RFX0lOREVYX0RJU0FCTEUsCi0JVk9URV9JTkRFWF9MT1cs Ci0JVk9URV9JTkRFWF9NQVgsCi19OwotCi0vKioKLSAqIGVudW0gZHB1X3Bvd2VyX2hhbmRsZV9k YXRhX2J1c19jbGllbnQgLSB0eXBlIG9mIGF4aSBidXMgY2xpZW50cwotICogQERQVV9QT1dFUl9I QU5ETEVfREFUQV9CVVNfQ0xJRU5UX1JUOiBjb3JlIHJlYWwtdGltZSBidXMgY2xpZW50Ci0gKiBA RFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfTlJUOiBjb3JlIG5vbi1yZWFsLXRpbWUg YnVzIGNsaWVudAotICogQERQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX01BWDogbWF4 aW11bSBudW1iZXIgb2YgYnVzIGNsaWVudCB0eXBlCi0gKi8KLWVudW0gZHB1X3Bvd2VyX2hhbmRs ZV9kYXRhX2J1c19jbGllbnQgewotCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX1JU LAotCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX05SVCwKLQlEUFVfUE9XRVJfSEFO RExFX0RBVEFfQlVTX0NMSUVOVF9NQVgKLX07Ci0KLS8qKgotICogZW51bSBEUFVfUE9XRVJfSEFO RExFX0RCVVNfSUQgLSBkYXRhIGJ1cyBpZGVudGlmaWVyCi0gKiBARFBVX1BPV0VSX0hBTkRMRV9E QlVTX0lEX01OT0M6IERQVS9NTk9DIGRhdGEgYnVzCi0gKiBARFBVX1BPV0VSX0hBTkRMRV9EQlVT X0lEX0xMQ0M6IE1OT0MvTExDQyBkYXRhIGJ1cwotICogQERQVV9QT1dFUl9IQU5ETEVfREJVU19J RF9FQkk6IExMQ0MvRUJJIGRhdGEgYnVzCi0gKi8KLWVudW0gRFBVX1BPV0VSX0hBTkRMRV9EQlVT X0lEIHsKLQlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTU5PQywKLQlEUFVfUE9XRVJfSEFORExF X0RCVVNfSURfTExDQywKLQlEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJLAotCURQVV9QT1dF Ul9IQU5ETEVfREJVU19JRF9NQVgsCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcG93ZXJfY2xp ZW50OiBzdG9yZXMgdGhlIHBvd2VyIGNsaWVudCBmb3IgZHB1IGRyaXZlcgotICogQG5hbWU6CW5h bWUgb2YgdGhlIGNsaWVudAotICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHJlZ3MgYnVzIHZvdGUg dHlwZQotICogQHJlZmNvdW50OgljdXJyZW50IHJlZmNvdW50IGlmIG11bHRpcGxlIG1vZHVsZXMg YXJlIHVzaW5nIHNhbWUKLSAqICAgICAgICAgICAgICBzYW1lIGNsaWVudCBmb3IgZW5hYmxlL2Rp c2FibGUuIFBvd2VyIG1vZHVsZSB3aWxsCi0gKiAgICAgICAgICAgICAgYWdncmVnYXRlIHRoZSBy ZWZjb3VudCBhbmQgdm90ZSBhY2NvcmRpbmdseSBmb3IgdGhpcwotICogICAgICAgICAgICAgIGNs aWVudC4KLSAqIEBpZDoJCWFzc2lnbmVkIGR1cmluZyBjcmVhdGUuIGhlbHBzIGZvciBkZWJ1Z2dp bmcuCi0gKiBAbGlzdDoJbGlzdCB0byBhdHRhY2ggcG93ZXIgaGFuZGxlIG1hc3RlciBsaXN0Ci0g KiBAYWI6ICAgICAgICAgYXJiaXRyYXRlZCBiYW5kd2lkdGggZm9yIGVhY2ggYnVzIGNsaWVudAot ICogQGliOiAgICAgICAgIGluc3RhbnRhbmVvdXMgYmFuZHdpZHRoIGZvciBlYWNoIGJ1cyBjbGll bnQKLSAqIEBhY3RpdmU6CWluaWRjYXRlcyB0aGUgc3RhdGUgb2YgZHB1IHBvd2VyIGhhbmRsZQot ICovCi1zdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCB7Ci0JY2hhciBuYW1lW01BWF9DTElFTlRfTkFN RV9MRU5dOwotCXNob3J0IHVzZWNhc2VfbmR4OwotCXNob3J0IHJlZmNvdW50OwotCXUzMiBpZDsK LQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JdTY0IGFiW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9C VVNfQ0xJRU5UX01BWF07Ci0JdTY0IGliW0RQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5U X01BWF07Ci0JYm9vbCBhY3RpdmU7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcG93ZXJfZGF0 YV9oYW5kbGU6IHBvd2VyIGhhbmRsZSBzdHJ1Y3QgZm9yIGRhdGEgYnVzCi0gKiBAZGF0YV9idXNf c2NhbGVfdGFibGU6IHBvaW50ZXIgdG8gYnVzIHNjYWxpbmcgdGFibGUKLSAqIEBkYXRhX2J1c19o ZGw6IGN1cnJlbnQgZGF0YSBidXMgaGFuZGxlCi0gKiBAYXhpX3BvcnRfY250OiBudW1iZXIgb2Yg cnQgYXhpIHBvcnRzCi0gKiBAbnJ0X2F4aV9wb3J0X2NudDogbnVtYmVyIG9mIG5ydCBheGkgcG9y dHMKLSAqIEBidXNfY2hhbm5lbHM6IG51bWJlciBvZiBtZW1vcnkgYnVzIGNoYW5uZWxzCi0gKiBA Y3Vycl9id191Y19pZHg6IGN1cnJlbnQgdXNlIGNhc2UgaW5kZXggb2YgZGF0YSBidXMKLSAqIEBh b19id191Y19pZHg6IGFjdGl2ZSBvbmx5IHVzZSBjYXNlIGluZGV4IG9mIGRhdGEgYnVzCi0gKiBA YWJfcnQ6IHJlYWx0aW1lIGFiIHF1b3RhCi0gKiBAaWJfcnQ6IHJlYWx0aW1lIGliIHF1b3RhCi0g KiBAYWJfbnJ0OiBub24tcmVhbHRpbWUgYWIgcXVvdGEKLSAqIEBpYl9ucnQ6IG5vbi1yZWFsdGlt ZSBpYiBxdW90YQotICogQGVuYWJsZTogdHJ1ZSBpZiBidXMgaXMgZW5hYmxlZAotICovCi1zdHJ1 Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSB7Ci0Jc3RydWN0IG1zbV9idXNfc2NhbGVfcGRh dGEgKmRhdGFfYnVzX3NjYWxlX3RhYmxlOwotCXUzMiBkYXRhX2J1c19oZGw7Ci0JdTMyIGF4aV9w b3J0X2NudDsKLQl1MzIgbnJ0X2F4aV9wb3J0X2NudDsKLQl1MzIgYnVzX2NoYW5uZWxzOwotCXUz MiBjdXJyX2J3X3VjX2lkeDsKLQl1MzIgYW9fYndfdWNfaWR4OwotCXU2NCBhYl9ydDsKLQl1NjQg aWJfcnQ7Ci0JdTY0IGFiX25ydDsKLQl1NjQgaWJfbnJ0OwotCWJvb2wgZW5hYmxlOwotfTsKLQot LyoKLSAqIHN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgLSBsb2NhbCBldmVudCByZWdpc3RyYXRpb24g c3RydWN0dXJlCi0gKiBAY2xpZW50X25hbWU6IG5hbWUgb2YgdGhlIGNsaWVudCByZWdpc3Rlcmlu ZwotICogQGNiX2ZuYzogcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBA dXNyOiB1c2VyIHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBldmVudCB0cmlnZ2VyCi0gKiBA ZXZlbnQ6IHJlZmVyIHRvIERQVV9QT1dFUl9IQU5ETEVfRVZFTlRfKgotICogQGxpc3Q6IGxpc3Qg dG8gYXR0YWNoIGV2ZW50IG1hc3RlciBsaXN0Ci0gKiBAYWN0aXZlOiBpbmRpY2F0ZXMgdGhlIHN0 YXRlIG9mIGRwdSBwb3dlciBoYW5kbGUKLSAqLwotc3RydWN0IGRwdV9wb3dlcl9ldmVudCB7Ci0J Y2hhciBjbGllbnRfbmFtZVtNQVhfQ0xJRU5UX05BTUVfTEVOXTsKLQl2b2lkICgqY2JfZm5jKSh1 MzIgZXZlbnRfdHlwZSwgdm9pZCAqdXNyKTsKLQl2b2lkICp1c3I7Ci0JdTMyIGV2ZW50X3R5cGU7 Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWJvb2wgYWN0aXZlOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZTogcG93ZXIgaGFuZGxlIG1haW4gc3RydWN0Ci0gKiBAY2xp ZW50X2NsaXN0OiBtYXN0ZXIgbGlzdCB0byBzdG9yZSBhbGwgY2xpZW50cwotICogQHBoYW5kbGVf bG9jazogbG9jayB0byBzeW5jaHJvbml6ZSB0aGUgZW5hYmxlL2Rpc2FibGUKLSAqIEBkZXY6IHBv aW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQotICogQHVzZWNhc2VfbmR4OiBjdXJyZW50IHVzZWNh c2UgaW5kZXgKLSAqIEByZWdfYnVzX2hkbDogY3VycmVudCByZWdpc3RlciBidXMgaGFuZGxlCi0g KiBAZGF0YV9idXNfaGFuZGxlOiBjb250ZXh0IHN0cnVjdHVyZSBmb3IgZGF0YSBidXMgY29udHJv bAotICogQGV2ZW50X2xpc3Q6IGN1cnJlbnQgcG93ZXIgaGFuZGxlIGV2ZW50IGxpc3QKLSAqLwot c3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgewotCXN0cnVjdCBsaXN0X2hlYWQgcG93ZXJfY2xpZW50 X2NsaXN0OwotCXN0cnVjdCBtdXRleCBwaGFuZGxlX2xvY2s7Ci0Jc3RydWN0IGRldmljZSAqZGV2 OwotCXUzMiBjdXJyZW50X3VzZWNhc2VfbmR4OwotCXUzMiByZWdfYnVzX2hkbDsKLQlzdHJ1Y3Qg ZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSBkYXRhX2J1c19oYW5kbGUKLQkJW0RQVV9QT1dFUl9I QU5ETEVfREJVU19JRF9NQVhdOwotCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKLX07Ci0K LS8qKgotICogZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQoKSAtIGluaXRpYWxpemVzIHRoZSBkcHUg cG93ZXIgaGFuZGxlCi0gKiBAcGRldjogICBwbGF0Zm9ybSBkZXZpY2UgdG8gc2VhcmNoIHRoZSBw b3dlciByZXNvdXJjZXMKLSAqIEBwZGF0YTogIHBvd2VyIGhhbmRsZSB0byBzdG9yZSB0aGUgcG93 ZXIgcmVzb3VyY2VzCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3Bv d2VyX3Jlc291cmNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQlzdHJ1Y3Qg ZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEpOwotCi0vKioKLSAqIGRwdV9wb3dlcl9yZXNvdXJjZV9k ZWluaXQoKSAtIHJlbGVhc2UgdGhlIGRwdSBwb3dlciBoYW5kbGUKLSAqIEBwZGV2OiAgIHBsYXRm b3JtIGRldmljZSBmb3IgcG93ZXIgcmVzb3VyY2VzCi0gKiBAcGRhdGE6ICBwb3dlciBoYW5kbGUg Y29udGFpbmluZyB0aGUgcmVzb3VyY2VzCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICov Ci12b2lkIGRwdV9wb3dlcl9yZXNvdXJjZV9kZWluaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEpOwotCi0vKioKLSAqIGRwdV9w b3dlcl9jbGllbnRfY3JlYXRlKCkgLSBjcmVhdGUgdGhlIGNsaWVudCBvbiBwb3dlciBoYW5kbGUK LSAqIEBwZGF0YTogIHBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMKLSAqIEBj bGllbnRfbmFtZTogbmV3IGNsaWVudCBuYW1lIGZvciByZWdpc3RyYXRpb24KLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpkcHVfcG93ZXJf Y2xpZW50X2NyZWF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGRhdGEsCi0JY2hhciAqY2xp ZW50X25hbWUpOwotCi0vKioKLSAqIGRwdV9wb3dlcl9jbGllbnRfZGVzdHJveSgpIC0gZGVzdHJv eSB0aGUgY2xpZW50IG9uIHBvd2VyIGhhbmRsZQotICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNv bnRhaW5pbmcgdGhlIHJlc291cmNlcwotICogQGNsaWVudF9uYW1lOiBuZXcgY2xpZW50IG5hbWUg Zm9yIHJlZ2lzdHJhdGlvbgotICoKLSAqIFJldHVybjogbm9uZQotICovCi12b2lkIGRwdV9wb3dl cl9jbGllbnRfZGVzdHJveShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQlzdHJ1 Y3QgZHB1X3Bvd2VyX2NsaWVudCAqY2xpZW50KTsKLQotLyoqCi0gKiBkcHVfcG93ZXJfcmVzb3Vy Y2VfZW5hYmxlKCkgLSBlbmFibGUvZGlzYWJsZSB0aGUgcG93ZXIgcmVzb3VyY2VzCi0gKiBAcGRh dGE6ICBwb3dlciBoYW5kbGUgY29udGFpbmluZyB0aGUgcmVzb3VyY2VzCi0gKiBAY2xpZW50OiBj bGllbnQgaW5mb3JtYXRpb24gdG8gZW5hYmxlL2Rpc2FibGUgaXRzIHZvdGUKLSAqIEBlbmFibGU6 IGJvb2xlYW4gcmVxdWVzdCBmb3IgZW5hYmxlL2Rpc2FibGUKLSAqCi0gKiBSZXR1cm46IGVycm9y IGNvZGUuCi0gKi8KLWludCBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVfcG93 ZXJfaGFuZGxlICpwZGF0YSwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqcGNsaWVudCwgYm9v bCBlbmFibGUpOwotCi0vKioKLSAqIGRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoKSAt IHVwZGF0ZSBkYXRhIGJ1cyBzdGF0ZQotICogQHBkYXRhOiAgcG93ZXIgaGFuZGxlIGNvbnRhaW5p bmcgdGhlIHJlc291cmNlcwotICogQGVuYWJsZTogdGFrZSBlbmFibGUgdnMgZGlzYWJsZSBwYXRo Ci0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgZHB1X3Bvd2VyX2RhdGFfYnVz X3N0YXRlX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJCQkJCQli b29sIGVuYWJsZSk7Ci0KLS8qKgotICogZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YSgpIC0g c2V0IGRhdGEgYnVzIHF1b3RhIGZvciBwb3dlciBjbGllbnQKLSAqIEBwaGFuZGxlOiAgcG93ZXIg aGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwotICogQGNsaWVudDogY2xpZW50IGluZm9y bWF0aW9uIHRvIHNldCBxdW90YQotICogQGJ1c19jbGllbnQ6IHJlYWwtdGltZSBvciBub24tcmVh bC10aW1lIGJ1cyBjbGllbnQKLSAqIEBidXNfaWQ6IGlkZW50aWZpZXIgb2YgZGF0YSBidXMsIHNl ZSBEUFVfUE9XRVJfSEFORExFX0RCVVNfSUQKLSAqIEBhYl9xdW90YTogYXJiaXRyYXRlZCBidXMg YmFuZHdpZHRoCi0gKiBAaWJfcXVvdGE6IGluc3RhbnRhbmVvdXMgYnVzIGJhbmR3aWR0aAotICoK LSAqIFJldHVybjogemVybyBpZiBzdWNjZXNzLCBvciBlcnJvciBjb2RlIG90aGVyd2lzZQotICov Ci1pbnQgZHB1X3Bvd2VyX2RhdGFfYnVzX3NldF9xdW90YShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRs ZSAqcGhhbmRsZSwKLQkJc3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsCi0JCWludCBi dXNfY2xpZW50LCB1MzIgYnVzX2lkLAotCQl1NjQgYWJfcXVvdGEsIHU2NCBpYl9xdW90YSk7Ci0K LS8qKgotICogZHB1X3Bvd2VyX2RhdGFfYnVzX2JhbmR3aWR0aF9jdHJsKCkgLSBjb250cm9sIGRh dGEgYnVzIGJhbmR3aWR0aCBlbmFibGUKLSAqIEBwaGFuZGxlOiAgcG93ZXIgaGFuZGxlIGNvbnRh aW5pbmcgdGhlIHJlc291cmNlcwotICogQGNsaWVudDogY2xpZW50IGluZm9ybWF0aW9uIHRvIGJh bmR3aWR0aCBjb250cm9sCi0gKiBAZW5hYmxlOiB0cnVlIHRvIGVuYWJsZSBiYW5kd2lkdGggZm9y IGRhdGEgYmFzZQotICoKLSAqIFJldHVybjogbm9uZQotICovCi12b2lkIGRwdV9wb3dlcl9kYXRh X2J1c19iYW5kd2lkdGhfY3RybChzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQkJ c3RydWN0IGRwdV9wb3dlcl9jbGllbnQgKnBjbGllbnQsIGludCBlbmFibGUpOwotCi0vKioKLSAq IGRwdV9wb3dlcl9oYW5kbGVfcmVnaXN0ZXJfZXZlbnQgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1 bmN0aW9uIGZvciBhbiBldmVudC4KLSAqCUNsaWVudHMgY2FuIHJlZ2lzdGVyIGZvciBtdWx0aXBs ZSBldmVudHMgd2l0aCBhIHNpbmdsZSByZWdpc3Rlci4KLSAqCUFueSBibG9jayB3aXRoIGFjY2Vz cyB0byBwaGFuZGxlIGNhbiByZWdpc3RlciBmb3IgdGhlIGV2ZW50Ci0gKglub3RpZmljYXRpb24u Ci0gKiBAcGhhbmRsZToJcG93ZXIgaGFuZGxlIGNvbnRhaW5pbmcgdGhlIHJlc291cmNlcwotICog QGV2ZW50X3R5cGU6CWV2ZW50IHR5cGUgdG8gcmVnaXN0ZXI7IHJlZmVyIERQVV9QT1dFUl9IQU5E TEVfRVZFTlRfKgotICogQGNiX2ZuYzoJcG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0 aW9uCi0gKiBAdXNyOgl1c2VyIHBvaW50ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBvbiBldmVudCB0 cmlnZ2VyCi0gKgotICogUmV0dXJuOglldmVudCBwb2ludGVyIGlmIHN1Y2Nlc3MsIG9yIGVycm9y IGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmRwdV9wb3dlcl9o YW5kbGVfcmVnaXN0ZXJfZXZlbnQoCi0JCXN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxl LAotCQl1MzIgZXZlbnRfdHlwZSwgdm9pZCAoKmNiX2ZuYykodTMyIGV2ZW50X3R5cGUsIHZvaWQg KnVzciksCi0JCXZvaWQgKnVzciwgY2hhciAqY2xpZW50X25hbWUpOwotLyoqCi0gKiBkcHVfcG93 ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQgLSB1bnJlZ2lzdGVyIGNhbGxiYWNrIGZvciBldmVu dChzKQotICogQHBoYW5kbGU6CXBvd2VyIGhhbmRsZSBjb250YWluaW5nIHRoZSByZXNvdXJjZXMK LSAqIEBldmVudDoJZXZlbnQgcG9pbnRlciByZXR1cm5lZCBhZnRlciBwb3dlciBoYW5kbGUgcmVn aXN0ZXIKLSAqLwotdm9pZCBkcHVfcG93ZXJfaGFuZGxlX3VucmVnaXN0ZXJfZXZlbnQoc3RydWN0 IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCi0JCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKmV2 ZW50KTsKLQotLyoqCi0gKiBkcHVfcG93ZXJfaGFuZGxlX2dldF9kYnVzX25hbWUgLSBnZXQgbmFt ZSBvZiBnaXZlbiBkYXRhIGJ1cyBpZGVudGlmaWVyCi0gKiBAYnVzX2lkOglkYXRhIGJ1cyBpZGVu dGlmaWVyCi0gKiBSZXR1cm46CVBvaW50ZXIgdG8gbmFtZSBzdHJpbmcgaWYgc3VjY2VzczsgTlVM TCBvdGhlcndpc2UKLSAqLwotY29uc3QgY2hhciAqZHB1X3Bvd2VyX2hhbmRsZV9nZXRfZGJ1c19u YW1lKHUzMiBidXNfaWQpOwotCi0jZW5kaWYgLyogX0RQVV9QT1dFUl9IQU5ETEVfSF8gKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZHJ2LmMKaW5kZXggNWMyNjdjZC4uNjBiNjkxOSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9tc21fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2 LmMKQEAgLTM0MCw3ICszNDAsNiBAQCBzdGF0aWMgaW50IG1zbV9kcm1fdW5pbml0KHN0cnVjdCBk ZXZpY2UgKmRldikKIAljb21wb25lbnRfdW5iaW5kX2FsbChkZXYsIGRkZXYpOwogCiAjaWZkZWYg Q09ORklHX0RSTV9NU01fRFBVCi0JZHB1X3Bvd2VyX3Jlc291cmNlX2RlaW5pdChwZGV2LCAmcHJp di0+cGhhbmRsZSk7CiAJZHB1X2RiZ19kZXN0cm95KCk7CiAjZW5kaWYKIApAQCAtNTE5LDEyICs1 MTgsNiBAQCBzdGF0aWMgaW50IG1zbV9kcm1faW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkcm1fZHJpdmVyICpkcnYpCiAJZHJtX21vZGVfY29uZmlnX2luaXQoZGRldik7CiAKICNpZmRl ZiBDT05GSUdfRFJNX01TTV9EUFUKLQlyZXQgPSBkcHVfcG93ZXJfcmVzb3VyY2VfaW5pdChwZGV2 LCAmcHJpdi0+cGhhbmRsZSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImRwdSBwb3dlciByZXNv dXJjZSBpbml0IGZhaWxlZFxuIik7Ci0JCWdvdG8gcG93ZXJfaW5pdF9mYWlsOwotCX0KLQogCXJl dCA9IGRwdV9kYmdfaW5pdCgmcGRldi0+ZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGluaXQgZHB1IGRiZzogJWRcbiIsIHJldCk7CkBAIC03MzMsOCArNzI2LDYg QEAgc3RhdGljIGludCBtc21fZHJtX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHJt X2RyaXZlciAqZHJ2KQogI2lmZGVmIENPTkZJR19EUk1fTVNNX0RQVQogCWRwdV9kYmdfZGVzdHJv eSgpOwogZGJnX2luaXRfZmFpbDoKLQlkcHVfcG93ZXJfcmVzb3VyY2VfZGVpbml0KHBkZXYsICZw cml2LT5waGFuZGxlKTsKLXBvd2VyX2luaXRfZmFpbDoKICNlbmRpZgogCWlmIChtZHNzICYmIG1k c3MtPmZ1bmNzKQogCQltZHNzLT5mdW5jcy0+ZGVzdHJveShkZGV2KTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2 LmgKaW5kZXggZjlhZTk2Zi4uMjdhNzNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTQ2LDgg KzQ2LDYgQEAKICNpbmNsdWRlIDxkcm0vbXNtX2RybS5oPgogI2luY2x1ZGUgPGRybS9kcm1fZ2Vt Lmg+CiAKLSNpbmNsdWRlICJkcHVfcG93ZXJfaGFuZGxlLmgiCi0KICNkZWZpbmUgR0VUX01BSk9S X1JFVihyZXYpCQkoKHJldikgPj4gMjgpCiAjZGVmaW5lIEdFVF9NSU5PUl9SRVYocmV2KQkJKCgo cmV2KSA+PiAxNikgJiAweEZGRikKICNkZWZpbmUgR0VUX1NURVBfUkVWKHJldikJCSgocmV2KSAm IDB4RkZGRikKQEAgLTM3NSw4ICszNzMsNiBAQCBzdHJ1Y3QgbXNtX2RybV9wcml2YXRlIHsKIAog CXN0cnVjdCBtc21fa21zICprbXM7CiAKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSBwaGFuZGxl OwotCiAJLyogc3Vib3JkaW5hdGUgZGV2aWNlcywgaWYgcHJlc2VudDogKi8KIAlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpncHVfcGRldjsKIAotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBG b3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9A bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZnJlZWRyZW5vCg==