From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v2] drm/msm: remove hw rotation support Date: Fri, 2 Mar 2018 10:51:16 -0800 Message-ID: <1520016676-8306-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Jeykumar Sankaran List-Id: linux-arm-msm@vger.kernel.org UmVtb3ZlIEhXIGlubGluZSByb3RhdGlvbiBzdXBwb3J0IGZyb20gRFBVIGRyaXZlci4KCmNoYW5n ZXMgc2luY2UgdjE6CiAgICAtIHJlYmFzZWQgb24gZm9yLW5leHQtc3RhZ2luZwoKU2lnbmVkLW9m Zi1ieTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5rYUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jICAgICAgICAgICB8ICAxMjYgKy0K IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggICAgICAgICAgIHwgICAz MyAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jICAgICAgICB8 ICAgMTcgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmggICAg ICAgIHwgICAxMCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9w aHlzLmggICB8ICAgIDQgLQogLi4uL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9w aHlzX3ZpZC5jICAgfCAgIDcyIC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19jYXRhbG9nLmMgICAgIHwgIDE4OCAtLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19jYXRhbG9nLmggICAgIHwgICA1OSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfY3RsLmMgICAgICAgICB8ICAgNTEgLQogZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2N0bC5oICAgICAgICAgfCAgIDM2IC0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19pbnRmLmMgICAgICAgIHwgICAyMSAtCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5oICAgICAgICB8ICAgIDQgLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaCAgICAgICAgfCAgIDEzIC0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yb3QuYyAgICAgICAgIHwgIDk2MSAtLS0t LS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90LmggICAg ICAgICB8ICAxOTAgLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3Nw cC5jICAgICAgICB8ICAgNDkgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3NzcHAuaCAgICAgICAgfCAgIDY2IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9wbGFuZS5jICAgICAgICAgIHwgMTQxNiArLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmggICAgICAgICAgfCAgIDc3ICstCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyAgICAgICAgICAgICB8ICAgMjIgLQog ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAgICAgICAgICAgICAgICAgICAgfCAgIDEx ICstCiAyMSBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCspLCAzMzg5IGRlbGV0aW9ucygt KQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9o d19yb3QuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19yb3QuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCmlu ZGV4IDg1NjhjMjkuLmJmNDZjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2NydGMuYwpAQCAtODExLDEyICs4MTEsMTEgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5k X3NldHVwX21peGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlzdHJ1Y3QgZHB1X2h3X3N0YWdl X2NmZyAqc3RhZ2VfY2ZnOwogCXN0cnVjdCBkcHVfcmVjdCBwbGFuZV9jcnRjX3JvaTsKIAotCXUz MiBmbHVzaF9tYXNrLCBmbHVzaF9zYnVmOworCXUzMiBmbHVzaF9tYXNrOwogCXVpbnQzMl90IHN0 YWdlX2lkeCwgbG1faWR4OwogCWludCB6cG9zX2NudFtEUFVfU1RBR0VfTUFYICsgMV0gPSB7IDAg fTsKIAlpbnQgaTsKIAlib29sIGJnX2FscGhhX2VuYWJsZSA9IGZhbHNlOwotCXUzMiBwcmVmaWxs ID0gMDsKIAogCWlmICghZHB1X2NydGMgfHwgIW1peGVyKSB7CiAJCURQVV9FUlJPUigiaW52YWxp ZCBkcHVfY3J0YyBvciBtaXhlclxuIik7CkBAIC04MjgsOSArODI3LDYgQEAgc3RhdGljIHZvaWQg X2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlzdGFn ZV9jZmcgPSAmZHB1X2NydGMtPnN0YWdlX2NmZzsKIAljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0 ZShjcnRjLT5zdGF0ZSk7CiAKLQljc3RhdGUtPnNidWZfcHJlZmlsbF9saW5lID0gMDsKLQlkcHVf Y3J0Yy0+c2J1Zl9mbHVzaF9tYXNrID0gMHgwOwotCiAJZHJtX2F0b21pY19jcnRjX2Zvcl9lYWNo X3BsYW5lKHBsYW5lLCBjcnRjKSB7CiAJCXN0YXRlID0gcGxhbmUtPnN0YXRlOwogCQlpZiAoIXN0 YXRlKQpAQCAtODQ0LDE0ICs4NDAsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0 dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQlwc3RhdGUgPSB0b19kcHVfcGxhbmVf c3RhdGUoc3RhdGUpOwogCQlmYiA9IHN0YXRlLT5mYjsKIAotCQlwcmVmaWxsID0gZHB1X3BsYW5l X3JvdF9jYWxjX3ByZWZpbGwocGxhbmUpOwotCQlpZiAocHJlZmlsbCA+IGNzdGF0ZS0+c2J1Zl9w cmVmaWxsX2xpbmUpCi0JCQljc3RhdGUtPnNidWZfcHJlZmlsbF9saW5lID0gcHJlZmlsbDsKLQot CQlkcHVfcGxhbmVfZ2V0X2N0bF9mbHVzaChwbGFuZSwgY3RsLCAmZmx1c2hfbWFzaywgJmZsdXNo X3NidWYpOwotCi0JCS8qIHNhdmUgc2J1ZiBmbHVzaCB2YWx1ZSBmb3IgbGF0ZXIgKi8KLQkJZHB1 X2NydGMtPnNidWZfZmx1c2hfbWFzayB8PSBmbHVzaF9zYnVmOworCQlkcHVfcGxhbmVfZ2V0X2N0 bF9mbHVzaChwbGFuZSwgY3RsLCAmZmx1c2hfbWFzayk7CiAKIAkJRFBVX0RFQlVHKCJjcnRjICVk IHN0YWdlOiVkIC0gcGxhbmUgJWQgc3NwcCAlZCBmYiAlZFxuIiwKIAkJCQljcnRjLT5iYXNlLmlk LApAQCAtODc0LDggKzg2Myw3IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cF9t aXhlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJc3RhdGUtPnNyY194ID4+IDE2LCBzdGF0 ZS0+c3JjX3kgPj4gMTYsCiAJCQkJc3RhdGUtPnNyY193ID4+IDE2LCBzdGF0ZS0+c3JjX2ggPj4g MTYsCiAJCQkJc3RhdGUtPmNydGNfeCwgc3RhdGUtPmNydGNfeSwKLQkJCQlzdGF0ZS0+Y3J0Y193 LCBzdGF0ZS0+Y3J0Y19oLAotCQkJCWZsdXNoX3NidWYgIT0gMCk7CisJCQkJc3RhdGUtPmNydGNf dywgc3RhdGUtPmNydGNfaCk7CiAKIAkJc3RhZ2VfaWR4ID0genBvc19jbnRbcHN0YXRlLT5zdGFn ZV0rKzsKIAkJc3RhZ2VfY2ZnLT5zdGFnZVtwc3RhdGUtPnN0YWdlXVtzdGFnZV9pZHhdID0KQEAg LTIyMDksNjQgKzIxOTcsNiBAQCBzdGF0aWMgaW50IF9kcHVfY3J0Y193YWl0X2Zvcl9mcmFtZV9k b25lKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lk IF9kcHVfY3J0Y19jb21taXRfa2lja29mZl9yb3Qoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQlz dHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZTsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwotCXN0cnVjdCBkcHVfaHdfY3RsICpjdGws ICptYXN0ZXJfY3RsOwotCXUzMiBmbHVzaF9tYXNrOwotCWludCBpOwotCi0JaWYgKCFjcnRjIHx8 ICFjc3RhdGUpCi0JCXJldHVybjsKLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0K LQkvKgotCSAqIFVwZGF0ZSBzYnVmIGNvbmZpZ3VyYXRpb24gYW5kIGZsdXNoIGJpdHMgaWYgYSBm bHVzaAotCSAqIG1hc2sgaGFzIGJlZW4gZGVmaW5lZCBmb3IgZWl0aGVyIHRoZSBjdXJyZW50IG9y Ci0JICogcHJldmlvdXMgY29tbWl0LgotCSAqCi0JICogVXBkYXRlcyBhcmUgYWxzbyByZXF1aXJl ZCBmb3IgdGhlIGZpcnN0IGNvbW1pdCBhZnRlcgotCSAqIHNidWZfZmx1c2hfbWFzayBiZWNvbWVz IDB4MCwgdG8gcHJvcGVybHkgdHJhbnNpdGlvbgotCSAqIHRoZSBoYXJkd2FyZSBvdXQgb2Ygc2J1 ZiBtb2RlLgotCSAqLwotCWlmICghZHB1X2NydGMtPnNidWZfZmx1c2hfbWFza19vbGQgJiYgIWRw dV9jcnRjLT5zYnVmX2ZsdXNoX21hc2spCi0JCXJldHVybjsKLQotCWZsdXNoX21hc2sgPSBkcHVf Y3J0Yy0+c2J1Zl9mbHVzaF9tYXNrX29sZCB8IGRwdV9jcnRjLT5zYnVmX2ZsdXNoX21hc2s7Ci0J ZHB1X2NydGMtPnNidWZfZmx1c2hfbWFza19vbGQgPSBkcHVfY3J0Yy0+c2J1Zl9mbHVzaF9tYXNr OwotCi0JRFBVX0FUUkFDRV9CRUdJTigiY3J0Y19raWNrb2ZmX3JvdCIpOwotCi0JaWYgKGNzdGF0 ZS0+c2J1Zl9jZmcucm90X29wX21vZGUgIT0gRFBVX0NUTF9ST1RfT1BfTU9ERV9PRkZMSU5FKSB7 Ci0JCWRybV9hdG9taWNfY3J0Y19mb3JfZWFjaF9wbGFuZShwbGFuZSwgY3J0YykgewotCQkJZHB1 X3BsYW5lX2tpY2tvZmYocGxhbmUpOwotCQl9Ci0JfQotCi0JbWFzdGVyX2N0bCA9IE5VTEw7Ci0J Zm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsKLQkJY3RsID0gZHB1 X2NydGMtPm1peGVyc1tpXS5od19jdGw7Ci0JCWlmICghY3RsIHx8ICFjdGwtPm9wcy5zZXR1cF9z YnVmX2NmZyB8fAotCQkJCSFjdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaCkKLQkJCWNvbnRp bnVlOwotCi0JCWlmICghbWFzdGVyX2N0bCB8fCBtYXN0ZXJfY3RsLT5pZHggPiBjdGwtPmlkeCkK LQkJCW1hc3Rlcl9jdGwgPSBjdGw7Ci0KLQkJY3RsLT5vcHMuc2V0dXBfc2J1Zl9jZmcoY3RsLCAm Y3N0YXRlLT5zYnVmX2NmZyk7Ci0JCWN0bC0+b3BzLnVwZGF0ZV9wZW5kaW5nX2ZsdXNoKGN0bCwg Zmx1c2hfbWFzayk7Ci0JfQotCi0JaWYgKGNzdGF0ZS0+c2J1Zl9jZmcucm90X29wX21vZGUgPT0g RFBVX0NUTF9ST1RfT1BfTU9ERV9JTkxJTkVfQVNZTkMgJiYKLQkJCW1hc3Rlcl9jdGwgJiYgbWFz dGVyX2N0bC0+b3BzLnRyaWdnZXJfcm90X3N0YXJ0KQotCQltYXN0ZXJfY3RsLT5vcHMudHJpZ2dl cl9yb3Rfc3RhcnQobWFzdGVyX2N0bCk7Ci0KLQlEUFVfQVRSQUNFX0VORCgiY3J0Y19raWNrb2Zm X3JvdCIpOwotfQotCiB2b2lkIGRwdV9jcnRjX2NvbW1pdF9raWNrb2ZmKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CkBAIC0yMzAzLDEwICsy MjMzLDYgQEAgdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCiAKIAlEUFVfQVRSQUNFX0JFR0lOKCJjcnRjX2NvbW1pdCIpOwogCi0JLyogZGVmYXVsdCB0 byBBU1lOQyBtb2RlIGZvciBpbmxpbmUgcm90YXRpb24gKi8KLQljc3RhdGUtPnNidWZfY2ZnLnJv dF9vcF9tb2RlID0gZHB1X2NydGMtPnNidWZfZmx1c2hfbWFzayA/Ci0JCURQVV9DVExfUk9UX09Q X01PREVfSU5MSU5FX0FTWU5DIDogRFBVX0NUTF9ST1RfT1BfTU9ERV9PRkZMSU5FOwotCiAJbGlz dF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3Qs IGhlYWQpIHsKIAkJc3RydWN0IGRwdV9lbmNvZGVyX2tpY2tvZmZfcGFyYW1zIHBhcmFtcyA9IHsg MCB9OwogCkBAIC0yMzE3LDI5ICsyMjQzLDkgQEAgdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29m ZihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCSAqIEVuY29kZXIgd2lsbCBmbHVzaC9zdGFydCBu b3csIHVubGVzcyBpdCBoYXMgYSB0eCBwZW5kaW5nLgogCQkgKiBJZiBzbywgaXQgbWF5IGRlbGF5 IGFuZCBmbHVzaCBhdCBhbiBpcnEgZXZlbnQgKGUuZy4gcHBkb25lKQogCQkgKi8KLQkJcGFyYW1z LmlubGluZV9yb3RhdGVfcHJlZmlsbCA9IGNzdGF0ZS0+c2J1Zl9wcmVmaWxsX2xpbmU7CiAJCWRw dV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoZW5jb2RlciwgJnBhcmFtcyk7Ci0KLQkJLyoK LQkJICogRm9yIGlubGluZSBBU1lOQyBtb2RlcywgdGhlIGZsdXNoIGJpdHMgYXJlIG5vdCB3cml0 dGVuCi0JCSAqIHRvIGhhcmR3YXJlIGF0b21pY2FsbHksIHNvIGF2b2lkIHVzaW5nIGl0IGlmIGEg dmlkZW8KLQkJICogbW9kZSBlbmNvZGVyIGlzIGFjdGl2ZSBvbiB0aGlzIENSVEMuCi0JCSAqLwot CQlpZiAoY3N0YXRlLT5zYnVmX2NmZy5yb3Rfb3BfbW9kZSA9PQotCQkJCURQVV9DVExfUk9UX09Q X01PREVfSU5MSU5FX0FTWU5DICYmCi0JCQkJZHB1X2VuY29kZXJfZ2V0X2ludGZfbW9kZShlbmNv ZGVyKSA9PQotCQkJCUlOVEZfTU9ERV9WSURFTykKLQkJCWNzdGF0ZS0+c2J1Zl9jZmcucm90X29w X21vZGUgPQotCQkJCURQVV9DVExfUk9UX09QX01PREVfSU5MSU5FX1NZTkM7CiAJfQogCi0JLyoK LQkgKiBGb3IgQVNZTkMgaW5saW5lIG1vZGVzLCBraWNrIG9mZiB0aGUgcm90YXRvciBub3cgc28g dGhhdCB0aGUgSC9XCi0JICogY2FuIHN0YXJ0IGFzIHNvb24gYXMgaXQncyByZWFkeS4KLQkgKi8K LQlpZiAoY3N0YXRlLT5zYnVmX2NmZy5yb3Rfb3BfbW9kZSA9PSBEUFVfQ1RMX1JPVF9PUF9NT0RF X0lOTElORV9BU1lOQykKLQkJX2RwdV9jcnRjX2NvbW1pdF9raWNrb2ZmX3JvdChjcnRjLCBjc3Rh dGUpOwotCiAJLyogd2FpdCBmb3IgZnJhbWVfZXZlbnRfZG9uZSBjb21wbGV0aW9uICovCiAJRFBV X0FUUkFDRV9CRUdJTigid2FpdF9mb3JfZnJhbWVfZG9uZV9ldmVudCIpOwogCXJldCA9IF9kcHVf Y3J0Y193YWl0X2Zvcl9mcmFtZV9kb25lKGNydGMpOwpAQCAtMjM1NCwyNCArMjI2MCwxMCBAQCB2 b2lkIGRwdV9jcnRjX2NvbW1pdF9raWNrb2ZmKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlpZiAo YXRvbWljX2luY19yZXR1cm4oJmRwdV9jcnRjLT5mcmFtZV9wZW5kaW5nKSA9PSAxKSB7CiAJCS8q IGFjcXVpcmUgYmFuZHdpZHRoIGFuZCBvdGhlciByZXNvdXJjZXMgKi8KIAkJRFBVX0RFQlVHKCJj cnRjJWQgZmlyc3QgY29tbWl0XG4iLCBjcnRjLT5iYXNlLmlkKTsKLQkJRFBVX0VWVDMyKERSTUlE KGNydGMpLCBjc3RhdGUtPnNidWZfY2ZnLnJvdF9vcF9tb2RlLAotCQkJCURQVV9FVlRMT0dfRlVO Q19DQVNFMSk7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJRFBVX0RFQlVHKCJjcnRjJWQgY29tbWl0 XG4iLCBjcnRjLT5iYXNlLmlkKTsKLQkJRFBVX0VWVDMyKERSTUlEKGNydGMpLCBjc3RhdGUtPnNi dWZfY2ZnLnJvdF9vcF9tb2RlLAotCQkJCURQVV9FVlRMT0dfRlVOQ19DQVNFMik7Ci0JfQotCWRw dV9jcnRjLT5wbGF5X2NvdW50Kys7CiAKLQkvKgotCSAqIEZvciBTWU5DIGlubGluZSBtb2Rlcywg ZGVsYXkgdGhlIGtpY2sgb2ZmIHVudGlsIGFmdGVyIHRoZQotCSAqIHdhaXQgZm9yIGZyYW1lIGRv bmUgaW4gY2FzZSB0aGUgd2FpdCB0aW1lcyBvdXQuCi0JICoKLQkgKiBBbHNvIHBlcmZvcm0gYSBm aW5hbCBraWNrb2ZmIHdoZW4gdHJhbnNpdGlvbmluZyBiYWNrIHRvCi0JICogb2ZmbGluZSBtb2Rl LgotCSAqLwotCWlmIChjc3RhdGUtPnNidWZfY2ZnLnJvdF9vcF9tb2RlICE9IERQVV9DVExfUk9U X09QX01PREVfSU5MSU5FX0FTWU5DKQotCQlfZHB1X2NydGNfY29tbWl0X2tpY2tvZmZfcm90KGNy dGMsIGNzdGF0ZSk7CisJZHB1X2NydGMtPnBsYXlfY291bnQrKzsKIAogCWRwdV92YmlmX2NsZWFy X2Vycm9ycyhkcHVfa21zKTsKIApAQCAtMzM0OSwxNCArMzI0MSw2IEBAIHN0YXRpYyB2b2lkIGRw dV9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkiZHJh bV9pYiIsIDB4MCwgMCwgVTY0X01BWCwKIAkJCWNhdGFsb2ctPnBlcmYubWF4X2J3X2hpZ2ggKiAx MDAwVUxMLAogCQkJQ1JUQ19QUk9QX0RSQU1fSUIpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3Jh bmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJCSJyb3RfcHJlZmlsbF9idyIsIDAsIDAs IFU2NF9NQVgsCi0JCQljYXRhbG9nLT5wZXJmLm1heF9id19oaWdoICogMTAwMFVMTCwKLQkJCUNS VENfUFJPUF9ST1RfUFJFRklMTF9CVyk7Ci0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRw dV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJInJvdF9jbGsiLCAwLCAwLCBVNjRfTUFYLAotCQkJ ZHB1X2ttcy0+cGVyZi5tYXhfY29yZV9jbGtfcmF0ZSwKLQkJCUNSVENfUFJPUF9ST1RfQ0xLKTsK IAogCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywK IAkJImlkbGVfdGltZW91dCIsIElETEVfVElNRU9VVCwgMCwgVTY0X01BWCwgMCwKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCmluZGV4IDVjNzNlZjAuLmRmMGRjZTMgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaApAQCAtMTg2LDggKzE4Niw2 IEBAIHN0cnVjdCBkcHVfY3J0Y19ldmVudCB7CiAgKiBAbWlzcl9lbmFibGUgICA6IGJvb2xlYW4g ZW50cnkgaW5kaWNhdGVzIG1pc3IgZW5hYmxlL2Rpc2FibGUgc3RhdHVzLgogICogQG1pc3JfZnJh bWVfY291bnQgIDogbWlzciBmcmFtZSBjb3VudCBwcm92aWRlZCBieSBjbGllbnQKICAqIEBtaXNy X2RhdGEgICAgIDogc3RvcmUgbWlzciBkYXRhIGJlZm9yZSB0dXJuaW5nIG9mZiB0aGUgY2xvY2tz LgotICogQHNidWZfZmx1c2hfbWFzazogZmx1c2ggbWFzayBmb3IgaW5saW5lIHJvdGF0b3IKLSAq IEBzYnVmX2ZsdXNoX21hc2tfb2xkOiBpbmxpbmUgcm90YXRvciBmbHVzaCBtYXNrIGZvciBwcmV2 aW91cyBjb21taXQKICAqIEBwb3dlcl9ldmVudCAgIDogcmVnaXN0ZXJlZCBwb3dlciBldmVudCBo YW5kbGUKICAqIEBjdXJfcGVyZiAgICAgIDogY3VycmVudCBwZXJmb3JtYW5jZSBjb21taXR0ZWQg dG8gY2xvY2svYmFuZHdpZHRoIGRyaXZlcgogICogQHJwX2xvY2sgICAgICAgOiBzZXJpYWxpemF0 aW9uIGxvY2sgZm9yIHJlc291cmNlIHBvb2wKQEAgLTI0NSw5ICsyNDMsNiBAQCBzdHJ1Y3QgZHB1 X2NydGMgewogCXUzMiBtaXNyX2ZyYW1lX2NvdW50OwogCXUzMiBtaXNyX2RhdGFbQ1JUQ19EVUFM X01JWEVSU107CiAKLQl1MzIgc2J1Zl9mbHVzaF9tYXNrOwotCXUzMiBzYnVmX2ZsdXNoX21hc2tf b2xkOwotCiAJc3RydWN0IGRwdV9wb3dlcl9ldmVudCAqcG93ZXJfZXZlbnQ7CiAKIAlzdHJ1Y3Qg ZHB1X2NvcmVfcGVyZl9wYXJhbXMgY3VyX3BlcmY7CkBAIC0yNzAsMTIgKzI2NSw2IEBAIHN0cnVj dCBkcHVfY3J0Y19yZXNfb3BzIHsKIAl2b2lkICgqcHV0KSh2b2lkICp2YWwpOwogfTsKIAotLyog Y3J0YyByZXNvdXJjZSB0eXBlICgweDAtMHhmZmZmIHJlc2VydmVkIGZvciBodyBibG9jayB0eXBl ICovCi0jZGVmaW5lIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCTwkweDEwMDAwCi0jZGVmaW5lIERQ VV9DUlRDX1JFU19ST1RfT1VUX0ZCCQkweDEwMDAxCi0jZGVmaW5lIERQVV9DUlRDX1JFU19ST1Rf UExBTkUJCTB4MTAwMDIKLSNkZWZpbmUgRFBVX0NSVENfUkVTX1JPVF9JTl9GQgkJMHgxMDAwMwot CiAjZGVmaW5lIERQVV9DUlRDX1JFU19GTEFHX0ZSRUUJCUJJVCgwKQogCiAvKioKQEAgLTMzNyw4 ICszMjYsNiBAQCBzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCB7CiAgKiBAZHNfZGlydHk6IEJvb2xl YW4gdG8gaW5kaWNhdGUgaWYgZGlydHkgb3Igbm90CiAgKiBAZHNfY2ZnOiBEZXN0aW5hdGlvbiBz Y2FsZXIgY29uZmlnCiAgKiBAbmV3X3BlcmY6IG5ldyBwZXJmb3JtYW5jZSBzdGF0ZSBiZWluZyBy ZXF1ZXN0ZWQKLSAqIEBzYnVmX2NmZzogc3RyZWFtIGJ1ZmZlciBjb25maWd1cmF0aW9uCi0gKiBA c2J1Zl9wcmVmaWxsX2xpbmU6IG51bWJlciBvZiBsaW5lIGZvciBpbmxpbmUgcm90YXRvciBwcmVm ZXRjaAogICovCiBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgewogCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSBiYXNlOwpAQCAtMzY0LDkgKzM1MSw2IEBAIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7CiAJc3Ry dWN0IGRwdV9od19kc19jZmcgZHNfY2ZnW0RQVV9NQVhfRFNfQ09VTlRdOwogCiAJc3RydWN0IGRw dV9jb3JlX3BlcmZfcGFyYW1zIG5ld19wZXJmOwotCXN0cnVjdCBkcHVfY3RsX3NidWZfY2ZnIHNi dWZfY2ZnOwotCXUzMiBzYnVmX3ByZWZpbGxfbGluZTsKLQogCXN0cnVjdCBkcHVfY3J0Y19yZXNw b29sIHJwOwogfTsKIApAQCAtNTEzLDIzICs0OTcsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZHB1 X2NydGNfaXNfZW5hYmxlZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB9CiAKIC8qKgotICogZHB1 X2NydGNfZ2V0X2lubGluZV9wcmVmaWxsIC0gZ2V0IGN1cnJlbnQgaW5saW5lIHJvdGF0aW9uIHBy ZWZpbGwKLSAqIEBjcnRjOiBQb2ludGVyIHRvIGNydGMKLSAqIHJldHVybjogbnVtYmVyIG9mIHBy ZWZpbGwgbGluZXMKLSAqLwotc3RhdGljIGlubGluZSB1MzIgZHB1X2NydGNfZ2V0X2lubGluZV9w cmVmaWxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUg KmNzdGF0ZTsKLQotCWlmICghY3J0YyB8fCAhY3J0Yy0+c3RhdGUpCi0JCXJldHVybiAwOwotCi0J Y3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwotCXJldHVybiBjc3RhdGUt PnNidWZfY2ZnLnJvdF9vcF9tb2RlICE9IERQVV9DVExfUk9UX09QX01PREVfT0ZGTElORSA/Ci0J CWNzdGF0ZS0+c2J1Zl9wcmVmaWxsX2xpbmUgOiAwOwotfQotCi0vKioKICAqIGRwdV9jcnRjX2V2 ZW50X3F1ZXVlIC0gcmVxdWVzdCBldmVudCBjYWxsYmFjawogICogQGNydGM6IFBvaW50ZXIgdG8g ZHJtIGNydGMgc3RydWN0dXJlCiAgKiBAZnVuYzogUG9pbnRlciB0byBjYWxsYmFjayBmdW5jdGlv bgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKaW5kZXggYzAx ZWE4NS4uNzg4NmFlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5j b2Rlci5jCkBAIC0xMjI1LDggKzEyMjUsNyBAQCBzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2Nf ZGlzYWJsZShzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKIH0KIAogc3RhdGljIGlu dCBfZHB1X2VuY29kZXJfdXBkYXRlX3JzY19jbGllbnQoCi0JCXN0cnVjdCBkcm1fZW5jb2RlciAq ZHJtX2VuYywKLQkJc3RydWN0IGRwdV9lbmNvZGVyX3JzY19jb25maWcgKmNvbmZpZywgYm9vbCBl bmFibGUpCisJCXN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywgYm9vbCBlbmFibGUpCiB7CiAJ c3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7CiAJc3RydWN0IGRybV9jcnRjICpjcnRj OwpAQCAtMTI2NSwxMyArMTI2NCwxMSBAQCBzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl91cGRhdGVf cnNjX2NsaWVudCgKIAkJKCgoZGlzcF9pbmZvLT5jYXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9D QVBfQ01EX01PREUpICYmCiAJCSAgZGlzcF9pbmZvLT5pc19wcmltYXJ5KSA/IERQVV9SU0NfQ01E X1NUQVRFIDoKIAkJRFBVX1JTQ19WSURfU1RBVEUpIDogRFBVX1JTQ19JRExFX1NUQVRFOwotCXBy ZWZpbGxfbGluZXMgPSBjb25maWcgPyBtb2RlX2luZm8tPnByZWZpbGxfbGluZXMgKwotCQljb25m aWctPmlubGluZV9yb3RhdGVfcHJlZmlsbCA6IG1vZGVfaW5mby0+cHJlZmlsbF9saW5lczsKIAog CS8qIGNvbXBhcmUgc3BlY2lmaWMgaXRlbXMgYW5kIHJlY29uZmlndXJlIHRoZSByc2MgKi8KIAlp ZiAoKHJzY19jb25maWctPmZwcyAhPSBtb2RlX2luZm8tPmZyYW1lX3JhdGUpIHx8CiAJICAgIChy c2NfY29uZmlnLT52dG90YWwgIT0gbW9kZV9pbmZvLT52dG90YWwpIHx8Ci0JICAgIChyc2NfY29u ZmlnLT5wcmVmaWxsX2xpbmVzICE9IHByZWZpbGxfbGluZXMpIHx8CisJICAgIChyc2NfY29uZmln LT5wcmVmaWxsX2xpbmVzICE9IG1vZGVfaW5mby0+cHJlZmlsbF9saW5lcykgfHwKIAkgICAgKHJz Y19jb25maWctPmppdHRlcl9udW1lciAhPSBtb2RlX2luZm8tPmppdHRlcl9udW1lcikgfHwKIAkg ICAgKHJzY19jb25maWctPmppdHRlcl9kZW5vbSAhPSBtb2RlX2luZm8tPmppdHRlcl9kZW5vbSkp IHsKIAkJcnNjX2NvbmZpZy0+ZnBzID0gbW9kZV9pbmZvLT5mcmFtZV9yYXRlOwpAQCAtMTM5Mywx NiArMTM5MCwxMiBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9y c2NfdXBkYXRlKAogCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsIGJvb2wgZW5hYmxlKQog ewogCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmly dChkcm1fZW5jKTsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcnNjX2NvbmZpZyByc2NfY2ZnID0geyAw IH07CiAJaW50IGk7CiAKIAlpZiAoZW5hYmxlKSB7Ci0JCXJzY19jZmcuaW5saW5lX3JvdGF0ZV9w cmVmaWxsID0KLQkJCQlkcHVfY3J0Y19nZXRfaW5saW5lX3ByZWZpbGwoZHJtX2VuYy0+Y3J0Yyk7 Ci0KLQkJX2RwdV9lbmNvZGVyX3VwZGF0ZV9yc2NfY2xpZW50KGRybV9lbmMsICZyc2NfY2ZnLCB0 cnVlKTsKKwkJX2RwdV9lbmNvZGVyX3VwZGF0ZV9yc2NfY2xpZW50KGRybV9lbmMsIHRydWUpOwog CX0gZWxzZSB7Ci0JCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5jLCBOVUxM LCBmYWxzZSk7CisJCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5jLCBmYWxz ZSk7CiAKIAkJLyoqCiAJCSAqIGRpc2FibGUgdGhlIHZzeW5jIHNvdXJjZSBhZnRlciB1cGRhdGlu ZyB0aGUgcnNjIHN0YXRlLiByc2MKQEAgLTE3NDQsNyArMTczNyw3IEBAIHN0YXRpYyBpbnQgZHB1 X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAK IAkJX2RwdV9lbmNvZGVyX2lycV9jb250cm9sKGRybV9lbmMsIHRydWUpOwogCi0JCV9kcHVfZW5j b2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5jLCBOVUxMLCB0cnVlKTsKKwkJX2RwdV9lbmNv ZGVyX3VwZGF0ZV9yc2NfY2xpZW50KGRybV9lbmMsIHRydWUpOwogCiAJCURQVV9FVlQzMihEUk1J RChkcm1fZW5jKSwgc3dfZXZlbnQsIGRwdV9lbmMtPnJjX3N0YXRlLAogCQkJCURQVV9FTkNfUkNf U1RBVEVfT04sIERQVV9FVlRMT0dfRlVOQ19DQVNFNik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2VuY29kZXIuaAppbmRleCA4NmEzODAwLi40YzU1NjBiIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKQEAgLTUwLDI0ICs1MCwxNCBA QCBzdHJ1Y3QgZHB1X2VuY29kZXJfaHdfcmVzb3VyY2VzIHsKIAogLyoqCiAgKiBkcHVfZW5jb2Rl cl9raWNrb2ZmX3BhcmFtcyAtIGluZm8gZW5jb2RlciByZXF1aXJlcyBhdCBraWNrb2ZmCi0gKiBA aW5saW5lX3JvdGF0ZV9wcmVmaWxsOiBudW1iZXIgb2YgbGluZXMgdG8gcHJlZmlsbCBmb3IgaW5s aW5lIHJvdGF0aW9uCiAgKiBAYWZmZWN0ZWRfZGlzcGxheXM6ICBiaXRtYXNrLCBiaXQgc2V0IG1l YW5zIHRoZSBST0kgb2YgdGhlIGNvbW1pdCBsaWVzIHdpdGhpbgogICogICAgICAgICAgICAgICAg ICAgICAgdGhlIGJvdW5kcyBvZiB0aGUgcGh5c2ljYWwgZGlzcGxheSBhdCB0aGUgYml0IGluZGV4 CiAgKi8KIHN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3BhcmFtcyB7Ci0JdTMyIGlubGluZV9y b3RhdGVfcHJlZmlsbDsKIAl1bnNpZ25lZCBsb25nIGFmZmVjdGVkX2Rpc3BsYXlzOwogfTsKIAog LyoqCi0gKiBkcHVfZW5jb2Rlcl9yc2NfY29uZmlnIC0gcnNjIGNvbmZpZ3VyYXRpb24gZm9yIGVu Y29kZXIKLSAqIEBpbmxpbmVfcm90YXRlX3ByZWZpbGw6IG51bWJlciBvZiBsaW5lcyB0byBwcmVm aWxsIGZvciBpbmxpbmUgcm90YXRpb24KLSAqLwotc3RydWN0IGRwdV9lbmNvZGVyX3JzY19jb25m aWcgewotCXUzMiBpbmxpbmVfcm90YXRlX3ByZWZpbGw7Ci19OwotCi0vKioKICAqIGRwdV9lbmNv ZGVyX2dldF9od19yZXNvdXJjZXMgLSBQb3B1bGF0ZSB0YWJsZSBvZiByZXF1aXJlZCBoYXJkd2Fy ZSByZXNvdXJjZXMKICAqIEBlbmNvZGVyOgllbmNvZGVyIHBvaW50ZXIKICAqIEBod19yZXM6CXJl c291cmNlIHRhYmxlIHRvIHBvcHVsYXRlIHdpdGggZW5jb2RlciByZXF1aXJlZCByZXNvdXJjZXMK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3Bo eXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaApp bmRleCA3MWNkMmYyLi5lOTQ4NGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCkBAIC0yODcsMTUgKzI4NywxMSBAQCBzdGF0aWMgaW5s aW5lIGludCBkcHVfZW5jb2Rlcl9waHlzX2luY19wZW5kaW5nKHN0cnVjdCBkcHVfZW5jb2Rlcl9w aHlzICpwaHlzKQogICogQGJhc2U6CUJhc2VjbGFzcyBwaHlzaWNhbCBlbmNvZGVyIHN0cnVjdHVy ZQogICogQGh3X2ludGY6CUhhcmR3YXJlIGludGVyZmFjZSB0byB0aGUgaW50ZiByZWdpc3RlcnMK ICAqIEB0aW1pbmdfcGFyYW1zOiBDdXJyZW50IHRpbWluZyBwYXJhbWV0ZXIKLSAqIEByb3RfZmV0 Y2g6CVByZWZpbGwgZm9yIGlubGluZSByb3RhdGlvbgotICogQHJvdF9mZXRjaF92YWxpZDogdHJ1 ZSBpZiByb3RfZmV0Y2ggaXMgdXBkYXRlZCAocmVzZXQgaW4gZW5jIGVuYWJsZSkKICAqLwogc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXNfdmlkIHsKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyBiYXNl OwogCXN0cnVjdCBkcHVfaHdfaW50ZiAqaHdfaW50ZjsKIAlzdHJ1Y3QgaW50Zl90aW1pbmdfcGFy YW1zIHRpbWluZ19wYXJhbXM7Ci0Jc3RydWN0IGludGZfcHJvZ19mZXRjaCByb3RfZmV0Y2g7Ci0J Ym9vbCByb3RfZmV0Y2hfdmFsaWQ7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXNfdmlkLmMgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jCmluZGV4IGVkYWFkMDQuLjI3 ZWEyYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyX3BoeXNfdmlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXJfcGh5c192aWQuYwpAQCAtMjI5LDczICsyMjksNiBAQCBzdGF0aWMgdm9pZCBwcm9ncmFt bWFibGVfZmV0Y2hfY29uZmlnKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKIAlz cGluX3VubG9ja19pcnFyZXN0b3JlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3Mp OwogfQogCi0vKgotICogcHJvZ3JhbW1hYmxlX3JvdF9mZXRjaF9jb25maWc6IFByb2dyYW1zIFJP VCB0byBwcmVmZXRjaCBsaW5lcyBieSBvZmZzZXR0aW5nCi0gKgl0aGUgc3RhcnQgb2YgZmV0Y2gg aW50byB0aGUgdmVydGljYWwgZnJvbnQgcG9yY2ggZm9yIGNhc2VzIHdoZXJlIHRoZQotICoJdnN5 bmMgcHVsc2Ugd2lkdGggYW5kIHZlcnRpY2FsIGJhY2sgcG9yY2ggdGltZSBpcyBpbnN1ZmZpY2ll bnQKLSAqCi0gKglHZXRzICMgb2YgbGluZXMgdG8gcHJlLWZldGNoLCB0aGVuIGNhbGN1bGF0ZSBW U1lOQyBjb3VudGVyIHZhbHVlLgotICoJSFcgbGF5ZXIgcmVxdWlyZXMgVlNZTkMgY291bnRlciBv ZiBmaXJzdCBwaXhlbCBvZiB0Z3QgVkZQIGxpbmUuCi0gKiBAcGh5c19lbmM6IFBvaW50ZXIgdG8g cGh5c2ljYWwgZW5jb2RlcgotICogQHJvdF9mZXRjaF9saW5lczogbnVtYmVyIG9mIGxpbmUgdG8g cHJlZmlsbCwgb3IgMCB0byBkaXNhYmxlCi0gKi8KLXN0YXRpYyB2b2lkIHByb2dyYW1tYWJsZV9y b3RfZmV0Y2hfY29uZmlnKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKLQkJdTMy IHJvdF9mZXRjaF9saW5lcykKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5c192aWQgKnZpZF9l bmMgPQotCQl0b19kcHVfZW5jb2Rlcl9waHlzX3ZpZChwaHlzX2VuYyk7Ci0Jc3RydWN0IGludGZf cHJvZ19mZXRjaCBmID0geyAwIH07Ci0Jc3RydWN0IGludGZfdGltaW5nX3BhcmFtcyAqdGltaW5n OwotCXUzMiB2ZnBfZmV0Y2hfbGluZXMgPSAwOwotCXUzMiBob3Jpel90b3RhbCA9IDA7Ci0JdTMy IHZlcnRfdG90YWwgPSAwOwotCXUzMiByb3RfZmV0Y2hfc3RhcnRfdnN5bmNfY291bnRlciA9IDA7 Ci0JdTMyIGZsdXNoX21hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKLQotCWlm ICghcGh5c19lbmMgfHwgIXZpZF9lbmMtPmh3X2ludGYgfHwgIXBoeXNfZW5jLT5od19jdGwgfHwK LQkJCSFwaHlzX2VuYy0+aHdfY3RsLT5vcHMuZ2V0X2JpdG1hc2tfaW50ZiB8fAotCQkJIXBoeXNf ZW5jLT5od19jdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaCB8fAotCQkJIXZpZF9lbmMtPmh3 X2ludGYtPm9wcy5zZXR1cF9yb3Rfc3RhcnQpCi0JCXJldHVybjsKLQotCXRpbWluZyA9ICZ2aWRf ZW5jLT50aW1pbmdfcGFyYW1zOwotCXZmcF9mZXRjaF9saW5lcyA9IHByb2dyYW1tYWJsZV9mZXRj aF9nZXRfbnVtX2xpbmVzKHZpZF9lbmMsIHRpbWluZyk7Ci0JaWYgKHZmcF9mZXRjaF9saW5lcyAm JiByb3RfZmV0Y2hfbGluZXMpIHsKLQkJdmVydF90b3RhbCA9IGdldF92ZXJ0aWNhbF90b3RhbCh0 aW1pbmcpOwotCQlob3Jpel90b3RhbCA9IGdldF9ob3Jpem9udGFsX3RvdGFsKHRpbWluZyk7Ci0J CWlmICh2ZXJ0X3RvdGFsID49ICh2ZnBfZmV0Y2hfbGluZXMgKyByb3RfZmV0Y2hfbGluZXMpKSB7 Ci0JCQlyb3RfZmV0Y2hfc3RhcnRfdnN5bmNfY291bnRlciA9Ci0JCQkgICAgKHZlcnRfdG90YWwg LSB2ZnBfZmV0Y2hfbGluZXMgLSByb3RfZmV0Y2hfbGluZXMpICoKLQkJCSAgICBob3Jpel90b3Rh bCArIDE7Ci0JCQlmLmVuYWJsZSA9IDE7Ci0JCQlmLmZldGNoX3N0YXJ0ID0gcm90X2ZldGNoX3N0 YXJ0X3ZzeW5jX2NvdW50ZXI7Ci0JCX0KLQl9Ci0KLQkvKiByZXR1cm4gaWYgcm90X2ZldGNoIGRv ZXMgbm90IGNoYW5nZSBzaW5jZSBsYXN0IHVwZGF0ZSAqLwotCWlmICh2aWRfZW5jLT5yb3RfZmV0 Y2hfdmFsaWQgJiYKLQkJCSFtZW1jbXAoJnZpZF9lbmMtPnJvdF9mZXRjaCwgJmYsIHNpemVvZihm KSkpCi0JCXJldHVybjsKLQotCURQVV9ERUJVR19WSURFTkModmlkX2VuYywKLQkJInJvdF9mZXRj aF9saW5lcyAldSB2ZnBfZmV0Y2hfbGluZXMgJXUgcm90X2ZldGNoX3N0YXJ0X3ZzeW5jX2NvdW50 ZXIgJXVcbiIsCi0JCXJvdF9mZXRjaF9saW5lcywgdmZwX2ZldGNoX2xpbmVzLAotCQlyb3RfZmV0 Y2hfc3RhcnRfdnN5bmNfY291bnRlcik7Ci0KLQlwaHlzX2VuYy0+aHdfY3RsLT5vcHMuZ2V0X2Jp dG1hc2tfaW50ZigKLQkJCXBoeXNfZW5jLT5od19jdGwsICZmbHVzaF9tYXNrLCB2aWRfZW5jLT5o d19pbnRmLT5pZHgpOwotCXBoeXNfZW5jLT5od19jdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVz aCgKLQkJCXBoeXNfZW5jLT5od19jdGwsIGZsdXNoX21hc2spOwotCi0Jc3Bpbl9sb2NrX2lycXNh dmUocGh5c19lbmMtPmVuY19zcGlubG9jaywgbG9ja19mbGFncyk7Ci0JdmlkX2VuYy0+aHdfaW50 Zi0+b3BzLnNldHVwX3JvdF9zdGFydCh2aWRfZW5jLT5od19pbnRmLCAmZik7Ci0Jc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZShwaHlzX2VuYy0+ZW5jX3NwaW5sb2NrLCBsb2NrX2ZsYWdzKTsKLQotCXZp ZF9lbmMtPnJvdF9mZXRjaCA9IGY7Ci0JdmlkX2VuYy0+cm90X2ZldGNoX3ZhbGlkID0gdHJ1ZTsK LX0KLQogc3RhdGljIGJvb2wgZHB1X2VuY29kZXJfcGh5c192aWRfbW9kZV9maXh1cCgKIAkJc3Ry dWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jLAogCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwKQEAgLTYwMiw5ICs1MzUsNiBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rl cl9waHlzX3ZpZF9lbmFibGUoc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKnBoeXNfZW5jKQogCWlm IChXQVJOX09OKCF2aWRfZW5jLT5od19pbnRmLT5vcHMuZW5hYmxlX3RpbWluZykpCiAJCXJldHVy bjsKIAotCS8qIHJlc2V0IHN0YXRlIHZhcmlhYmxlcyB1bnRpbCBhZnRlciBmaXJzdCB1cGRhdGUg Ki8KLQl2aWRfZW5jLT5yb3RfZmV0Y2hfdmFsaWQgPSBmYWxzZTsKLQogCWRwdV9lbmNvZGVyX2hl bHBlcl9zcGxpdF9jb25maWcocGh5c19lbmMsIHZpZF9lbmMtPmh3X2ludGYtPmlkeCk7CiAKIAlk cHVfZW5jb2Rlcl9waHlzX3ZpZF9zZXR1cF90aW1pbmdfZW5naW5lKHBoeXNfZW5jKTsKQEAgLTc0 MSw4ICs2NzEsNiBAQCBzdGF0aWMgdm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9wcmVwYXJlX2Zv cl9raWNrb2ZmKAogCQlkcHVfZW5jb2Rlcl9oZWxwZXJfdW5yZWdpc3Rlcl9pcnEocGh5c19lbmMs IElOVFJfSURYX1ZTWU5DKTsKIAkJRFBVX0RCR19EVU1QKCJhbGwiLCAiZGJnX2J1cyIsICJ2Ymlm X2RiZ19idXMiLCAicGFuaWMiKTsKIAl9Ci0KLQlwcm9ncmFtbWFibGVfcm90X2ZldGNoX2NvbmZp ZyhwaHlzX2VuYywgcGFyYW1zLT5pbmxpbmVfcm90YXRlX3ByZWZpbGwpOwogfQogCiBzdGF0aWMg dm9pZCBkcHVfZW5jb2Rlcl9waHlzX3ZpZF9kaXNhYmxlKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlz ICpwaHlzX2VuYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19jYXRhbG9nLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0 YWxvZy5jCmluZGV4IDI4OWI5ZmYuLjcwMTk2MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFsb2cuYwpAQCAtMTQsOSArMTQsNiBAQAogI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX01TTV9S T1RBVE9SKQotI2luY2x1ZGUgPGxpbnV4L3NvYy9xY29tL2xsY2MtcWNvbS5oPgotI2VuZGlmCiAj aW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKICNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgogI2lu Y2x1ZGUgImRwdV9od19jYXRhbG9nX2Zvcm1hdC5oIgpAQCAtOTQsOCArOTEsNiBAQAogICovCiAj ZGVmaW5lIFBST1BfQklUVkFMVUVfQUNDRVNTKHAsIGksIGosIGspCSgocCArIGkpLT5iaXRfdmFs dWVbal1ba10pCiAKLSNkZWZpbmUgREVGQVVMVF9TQlVGX0hFQURST09NCQkoMjApCi0KIC8qCiAg KiBEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMKICAqLwpAQCAtMzMzLDEzICszMjgsNiBAQCBlbnVt IHsKIAlSRUdfRE1BX1BST1BfTUFYCiB9OwogCi1lbnVtIHsKLQlJTkxJTkVfUk9UX1hJTiwKLQlJ TkxJTkVfUk9UX1hJTl9UWVBFLAotCUlOTElORV9ST1RfQ0xLX0NUUkwsCi0JSU5MSU5FX1JPVF9Q Uk9QX01BWAotfTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKICAqIGR0cyBwcm9wZXJ0eSBkZWZpbml0aW9uCiAgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K QEAgLTkyMyw5ICs5MTEsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3NzcHBfc2V0dXBfdmlnKHN0cnVj dCBkcHVfbWRzc19jZmcgKmRwdV9jZmcsCiAJCQkic3NwcF9zY2FsZXIldSIsIHNzcHAtPmlkIC0g U1NQUF9WSUcwKTsKIAl9CiAKLQlpZiAoZHB1X2NmZy0+aGFzX3NidWYpCi0JCXNldF9iaXQoRFBV X1NTUFBfU0JVRiwgJnNzcHAtPmZlYXR1cmVzKTsKLQogCXNibGstPmNzY19ibGsuaWQgPSBEUFVf U1NQUF9DU0M7CiAJc25wcmludGYoc2Jsay0+Y3NjX2Jsay5uYW1lLCBEUFVfSFdfQkxLX05BTUVf TEVOLAogCQkJInNzcHBfY3NjJXUiLCBzc3BwLT5pZCAtIFNTUFBfVklHMCk7CkBAIC0xMjk1LDgg KzEyODAsNiBAQCBzdGF0aWMgaW50IGRwdV9jdGxfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2Rl ICpucCwKIAkJCXNldF9iaXQoRFBVX0NUTF9TUExJVF9ESVNQTEFZLCAmY3RsLT5mZWF0dXJlcyk7 CiAJCWlmIChpIDwgTUFYX1BQX1NQTElUX0RJU1BMQVlfQ1RMKQogCQkJc2V0X2JpdChEUFVfQ1RM X1BJTkdQT05HX1NQTElULCAmY3RsLT5mZWF0dXJlcyk7Ci0JCWlmIChkcHVfY2ZnLT5oYXNfc2J1 ZikKLQkJCXNldF9iaXQoRFBVX0NUTF9TQlVGLCAmY3RsLT5mZWF0dXJlcyk7CiAJfQogCiBlbmQ6 CkBAIC0xNTM0LDkgKzE1MTcsNiBAQCBzdGF0aWMgaW50IGRwdV9pbnRmX3BhcnNlX2R0KHN0cnVj dCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQlpbnRmLT5jb250cm9sbGVyX2lkID0gbm9uZV9jb3VudDsK IAkJCW5vbmVfY291bnQrKzsKIAkJfQotCi0JCWlmIChkcHVfY2ZnLT5oYXNfc2J1ZikKLQkJCXNl dF9iaXQoRFBVX0lOVEZfUk9UX1NUQVJULCAmaW50Zi0+ZmVhdHVyZXMpOwogCX0KIAogZW5kOgpA QCAtMTc2MSwxNzAgKzE3NDEsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2RzcHBfc2V0dXBfYmxvY2tz KHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9jZmcsCiAJfQogfQogCi0jaWYgSVNfRU5BQkxFRChD T05GSUdfRFJNX01TTV9ST1RBVE9SKQotc3RhdGljIHN0cnVjdCBkcHVfcHJvcF90eXBlIGlubGlu ZV9yb3RfcHJvcFtJTkxJTkVfUk9UX1BST1BfTUFYXSA9IHsKLQl7SU5MSU5FX1JPVF9YSU4sICJx Y29tLGRwdS1pbmxpbmUtcm90LXhpbiIsIGZhbHNlLAotCQkJCQkJCVBST1BfVFlQRV9VMzJfQVJS QVl9LAotCXtJTkxJTkVfUk9UX1hJTl9UWVBFLCAicWNvbSxkcHUtaW5saW5lLXJvdC14aW4tdHlw ZSIsIGZhbHNlLAotCQkJCQkJCVBST1BfVFlQRV9TVFJJTkdfQVJSQVl9LAotCXtJTkxJTkVfUk9U X0NMS19DVFJMLCAicWNvbSxkcHUtaW5saW5lLXJvdC1jbGstY3RybCIsIGZhbHNlLAotCQkJCQkJ UFJPUF9UWVBFX0JJVF9PRkZTRVRfQVJSQVl9LAotfTsKLQotc3RhdGljIHZvaWQgX2RwdV9pbmxp bmVfcm90X3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCi0JCXN0cnVjdCBkcHVfbWRz c19jZmcgKmRwdV9jZmcsIHN0cnVjdCBkcHVfcm90X2NmZyAqcm90KQotewotCWludCByYywgcHJv cF9jb3VudFtJTkxJTkVfUk9UX1BST1BfTUFYXSwgaSwgaiwgaW5kZXg7Ci0Jc3RydWN0IGRwdV9w cm9wX3ZhbHVlICpwcm9wX3ZhbHVlID0gTlVMTDsKLQlib29sIHByb3BfZXhpc3RzW0lOTElORV9S T1RfUFJPUF9NQVhdOwotCXUzMiBvZmZfY291bnQsIHNzcHBfY291bnQgPSAwLCB3Yl9jb3VudCA9 IDA7Ci0JY29uc3QgY2hhciAqdHlwZTsKLQotCXByb3BfdmFsdWUgPSBrY2FsbG9jKElOTElORV9S T1RfUFJPUF9NQVgsCi0JCQlzaXplb2Yoc3RydWN0IGRwdV9wcm9wX3ZhbHVlKSwgR0ZQX0tFUk5F TCk7Ci0JaWYgKCFwcm9wX3ZhbHVlKQotCQlyZXR1cm47Ci0KLQlyYyA9IF92YWxpZGF0ZV9kdF9l bnRyeShucCwgaW5saW5lX3JvdF9wcm9wLAotCQkJQVJSQVlfU0laRShpbmxpbmVfcm90X3Byb3Ap LCBwcm9wX2NvdW50LCAmb2ZmX2NvdW50KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JcmMg PSBfcmVhZF9kdF9lbnRyeShucCwgaW5saW5lX3JvdF9wcm9wLCBBUlJBWV9TSVpFKGlubGluZV9y b3RfcHJvcCksCi0JCQlwcm9wX2NvdW50LCBwcm9wX2V4aXN0cywgcHJvcF92YWx1ZSk7Ci0JaWYg KHJjKQotCQlnb3RvIGVuZDsKLQotCWZvciAoaSA9IDA7IGkgPCBvZmZfY291bnQ7IGkrKykgewot CQlyb3QtPnZiaWZfY2ZnW2ldLnhpbl9pZCA9IFBST1BfVkFMVUVfQUNDRVNTKHByb3BfdmFsdWUs Ci0JCQkJCQkJSU5MSU5FX1JPVF9YSU4sIGkpOwotCQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19p bmRleChucCwKLQkJCQlpbmxpbmVfcm90X3Byb3BbSU5MSU5FX1JPVF9YSU5fVFlQRV0ucHJvcF9u YW1lLAotCQkJCWksICZ0eXBlKTsKLQotCQlpZiAoIXN0cmNtcCh0eXBlLCAic3NwcCIpKSB7Ci0J CQlyb3QtPnZiaWZfY2ZnW2ldLm51bSA9IElOTElORV9ST1QwX1NTUFAgKyBzc3BwX2NvdW50Owot CQkJcm90LT52YmlmX2NmZ1tpXS5pc19yZWFkID0gdHJ1ZTsKLQkJCXJvdC0+dmJpZl9jZmdbaV0u Y2xrX2N0cmwgPQotCQkJCQlEUFVfQ0xLX0NUUkxfSU5MSU5FX1JPVDBfU1NQUAotCQkJCQkrIHNz cHBfY291bnQ7Ci0JCQlzc3BwX2NvdW50Kys7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0eXBlLCAi d2IiKSkgewotCQkJcm90LT52YmlmX2NmZ1tpXS5udW0gPSBJTkxJTkVfUk9UMF9XQiArIHdiX2Nv dW50OwotCQkJcm90LT52YmlmX2NmZ1tpXS5pc19yZWFkID0gZmFsc2U7Ci0JCQlyb3QtPnZiaWZf Y2ZnW2ldLmNsa19jdHJsID0KLQkJCQkJRFBVX0NMS19DVFJMX0lOTElORV9ST1QwX1dCCi0JCQkJ CSsgd2JfY291bnQ7Ci0JCQl3Yl9jb3VudCsrOwotCQl9IGVsc2UgewotCQkJRFBVX0VSUk9SKCJp bnZhbGlkIHJvdGF0b3IgdmJpZiB0eXBlOiVzXG4iLCB0eXBlKTsKLQkJCWdvdG8gZW5kOwotCQl9 Ci0KLQkJaW5kZXggPSByb3QtPnZiaWZfY2ZnW2ldLmNsa19jdHJsOwotCQlpZiAoaW5kZXggPCAw IHx8IGluZGV4ID49IERQVV9DTEtfQ1RSTF9NQVgpIHsKLQkJCURQVV9FUlJPUigiaW52YWxpZCBj bGtfY3RybCBlbnVtOiVkXG4iLCBpbmRleCk7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCi0JCWZvciAo aiA9IDA7IGogPCBkcHVfY2ZnLT5tZHBfY291bnQ7IGorKykgewotCQkJZHB1X2NmZy0+bWRwW2pd LmNsa19jdHJsc1tpbmRleF0ucmVnX29mZiA9Ci0JCQkJUFJPUF9CSVRWQUxVRV9BQ0NFU1MocHJv cF92YWx1ZSwKLQkJCQkJCUlOTElORV9ST1RfQ0xLX0NUUkwsIGksIDApOwotCQkJZHB1X2NmZy0+ bWRwW2pdLmNsa19jdHJsc1tpbmRleF0uYml0X29mZiA9Ci0JCQkJUFJPUF9CSVRWQUxVRV9BQ0NF U1MocHJvcF92YWx1ZSwKLQkJCQkJCUlOTElORV9ST1RfQ0xLX0NUUkwsIGksIDEpOwotCQl9Ci0K LQkJRFBVX0RFQlVHKCJyb3QtIHhpbjolZCwgbnVtOiVkLCByZDolZCwgY2xrOiVkOjB4JXgvJWRc biIsCi0JCQkJcm90LT52YmlmX2NmZ1tpXS54aW5faWQsCi0JCQkJcm90LT52YmlmX2NmZ1tpXS5u dW0sCi0JCQkJcm90LT52YmlmX2NmZ1tpXS5pc19yZWFkLAotCQkJCXJvdC0+dmJpZl9jZmdbaV0u Y2xrX2N0cmwsCi0JCQkJZHB1X2NmZy0+bWRwWzBdLmNsa19jdHJsc1tpbmRleF0ucmVnX29mZiwK LQkJCQlkcHVfY2ZnLT5tZHBbMF0uY2xrX2N0cmxzW2luZGV4XS5iaXRfb2ZmKTsKLQl9Ci0KLQly b3QtPnZiaWZfaWR4ID0gVkJJRl9SVDsKLQlyb3QtPnhpbl9jb3VudCA9IG9mZl9jb3VudDsKLQot ZW5kOgotCWtmcmVlKHByb3BfdmFsdWUpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgZHB1X3Jv dF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQlzdHJ1Y3QgZHB1X21kc3NfY2Zn ICpkcHVfY2ZnKQotewotI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9NU01fUk9UQVRPUikKLQlz dHJ1Y3QgZHB1X3JvdF9jZmcgKnJvdDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owot CXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgcGhhcmdzOwotCXN0cnVjdCBsbGNjX3NsaWNlX2Rlc2Mg KnNsaWNlOwotCWludCByYyA9IDAsIGk7Ci0KLQlpZiAoIWRwdV9jZmcpIHsKLQkJRFBVX0VSUk9S KCJpbnZhbGlkIGFyZ3VtZW50XG4iKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUk9UX01BWDsgaSsrKSB7Ci0JCXJvdCA9IGRwdV9jZmctPnJv dCArIGRwdV9jZmctPnJvdF9jb3VudDsKLQkJcm90LT5iYXNlID0gMDsKLQkJcm90LT5sZW4gPSAw OwotCi0JCXJjID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MobnAsCi0JCQkJInFjb20sZHB1 LWlubGluZS1yb3RhdG9yIiwgIiNsaXN0LWNlbGxzIiwKLQkJCQlpLCAmcGhhcmdzKTsKLQkJaWYg KHJjKSB7Ci0JCQlyYyA9IDA7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmICghcGhhcmdzLm5wIHx8 ICFwaGFyZ3MuYXJnc19jb3VudCkgewotCQkJcmMgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0K LQotCQlyb3QtPmlkID0gUk9UXzAgKyBwaGFyZ3MuYXJnc1swXTsKLQotCQlwZGV2ID0gb2ZfZmlu ZF9kZXZpY2VfYnlfbm9kZShwaGFyZ3MubnApOwotCQlpZiAocGRldikgewotCQkJc2xpY2UgPSBs bGNjX3NsaWNlX2dldGQoJnBkZXYtPmRldiwgInJvdGF0b3IiKTsKLQkJCWlmIChJU19FUlJfT1Jf TlVMTChzbGljZSkpIHsKLQkJCQlyb3QtPnBkZXYgPSBOVUxMOwotCQkJCURQVV9FUlJPUigiZmFp bGVkIHRvIGdldCBzeXN0ZW0gY2FjaGUgJWxkXG4iLAotCQkJCQkJUFRSX0VSUihzbGljZSkpOwot CQkJfSBlbHNlIHsKLQkJCQlyb3QtPnNjaWQgPSBsbGNjX2dldF9zbGljZV9pZChzbGljZSk7Ci0J CQkJcm90LT5zbGljZV9zaXplID0gbGxjY19nZXRfc2xpY2Vfc2l6ZShzbGljZSk7Ci0JCQkJcm90 LT5wZGV2ID0gcGRldjsKLQkJCQlsbGNjX3NsaWNlX3B1dGQoc2xpY2UpOwotCQkJCURQVV9ERUJV Rygicm90OiVkIHNjaWQ6JWQgc2xpY2Vfc2l6ZTolenVrYlxuIiwKLQkJCQkJCXJvdC0+aWQsIHJv dC0+c2NpZCwKLQkJCQkJCXJvdC0+c2xpY2Vfc2l6ZSk7Ci0JCQkJX2RwdV9pbmxpbmVfcm90X3Bh cnNlX2R0KG5wLCBkcHVfY2ZnLCByb3QpOwotCQkJCWRwdV9jZmctPnJvdF9jb3VudCsrOwotCQkJ fQotCQl9IGVsc2UgewotCQkJcm90LT5wZGV2ID0gTlVMTDsKLQkJCURQVV9FUlJPUigiaW52YWxp ZCBkcHUgcm90YXRvciBub2RlXG4iKTsKLQkJfQotCi0JCW9mX25vZGVfcHV0KHBoYXJncy5ucCk7 Ci0JfQotCi0JaWYgKGRwdV9jZmctPnJvdF9jb3VudCkgewotCQlkcHVfY2ZnLT5oYXNfc2J1ZiA9 IHRydWU7Ci0JCWRwdV9jZmctPnNidWZfaGVhZHJvb20gPSBERUZBVUxUX1NCVUZfSEVBRFJPT007 Ci0JfQotCi1lbmQ6Ci0JcmV0dXJuIHJjOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQot CiBzdGF0aWMgaW50IGRwdV9kc3BwX3RvcF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w LAogCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnKQogewpAQCAtMzIxOSwxMCArMzAzNSw2 IEBAIHN0cnVjdCBkcHVfbWRzc19jZmcgKmRwdV9od19jYXRhbG9nX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdTMyIGh3X3JldikKIAlpZiAocmMpCiAJCWdvdG8gZW5kOwogCi0JcmMgPSBk cHVfcm90X3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCiAJ cmMgPSBkcHVfY3RsX3BhcnNlX2R0KG5wLCBkcHVfY2ZnKTsKIAlpZiAocmMpCiAJCWdvdG8gZW5k OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2NhdGFs b2cuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmgKaW5k ZXggYWE1YjI1Ni4uNDAyZTkyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2NhdGFsb2cuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY2F0YWxvZy5oCkBAIC0xMTksNyArMTE5LDYgQEAgZW51bSB7CiAgKiBARFBVX1NT UFBfRVhDTF9SRUNULCAgICAgIFNTUFAgc3VwcG9ydHMgZXhjbHVzaW9uIHJlY3QKICAqIEBEUFVf U1NQUF9TTUFSVF9ETUFfVjEsICAgU21hcnRETUEgMS4wIHN1cHBvcnQKICAqIEBEUFVfU1NQUF9T TUFSVF9ETUFfVjIsICAgU21hcnRETUEgMi4wIHN1cHBvcnQKLSAqIEBEUFVfU1NQUF9TQlVGLCAg ICAgICAgICAgU1NQUCBzdXBwb3J0IGlubGluZSBzdHJlYW0gYnVmZmVyCiAgKiBARFBVX1NTUFBf VFNfUFJFRklMTCAgICAgIFN1cHBvcnRzIHByZWZpbGwgd2l0aCB0cmFmZmljIHNoYXBlcgogICog QERQVV9TU1BQX1RTX1BSRUZJTExfUkVDMSBTdXBwb3J0cyBwcmVmaWxsIHdpdGggdHJhZmZpYyBz aGFwZXIgbXVsdGlyZWMKICAqIEBEUFVfU1NQUF9DRFAgICAgICAgICAgICAgU3VwcG9ydHMgY2xp ZW50IGRyaXZlbiBwcmVmZXRjaApAQCAtMTQyLDcgKzE0MSw2IEBAIGVudW0gewogCURQVV9TU1BQ X0VYQ0xfUkVDVCwKIAlEUFVfU1NQUF9TTUFSVF9ETUFfVjEsCiAJRFBVX1NTUFBfU01BUlRfRE1B X1YyLAotCURQVV9TU1BQX1NCVUYsCiAJRFBVX1NTUFBfVFNfUFJFRklMTCwKIAlEUFVfU1NQUF9U U19QUkVGSUxMX1JFQzEsCiAJRFBVX1NTUFBfQ0RQLApAQCAtMjE5LDI3ICsyMTcsMTUgQEAgZW51 bSB7CiAgKiBDVEwgc3ViLWJsb2NrcwogICogQERQVV9DVExfU1BMSVRfRElTUExBWSAgICAgICBD VEwgc3VwcG9ydHMgdmlkZW8gbW9kZSBzcGxpdCBkaXNwbGF5CiAgKiBARFBVX0NUTF9QSU5HUE9O R19TUExJVCAgICAgIENUTCBzdXBwb3J0cyBwaW5ncG9uZyBzcGxpdAotICogQERQVV9DVExfU0JV RiAgICAgICAgICAgICAgICBDVEwgc3VwcG9ydHMgaW5saW5lIHN0cmVhbSBidWZmZXIKICAqIEBE UFVfQ1RMX01BWAogICovCiBlbnVtIHsKIAlEUFVfQ1RMX1NQTElUX0RJU1BMQVkgPSAweDEsCiAJ RFBVX0NUTF9QSU5HUE9OR19TUExJVCwKLQlEUFVfQ1RMX1NCVUYsCiAJRFBVX0NUTF9NQVgKIH07 CiAKIC8qKgotICogSU5URiBzdWItYmxvY2tzCi0gKiBARFBVX0lOVEZfUk9UX1NUQVJUICAgICAg ICAgIElOVEYgc3VwcG9ydHMgcm90YXRvciBzdGFydCB0cmlnZ2VyCi0gKiBARFBVX0lOVEZfTUFY Ci0gKi8KLWVudW0gewotCURQVV9JTlRGX1JPVF9TVEFSVCA9IDB4MSwKLQlEUFVfSU5URl9NQVgK LX07Ci0KLS8qKgogICogV0Igc3ViLWJsb2NrcyBhbmQgZmVhdHVyZXMKICAqIEBEUFVfV0JfTElO RV9NT0RFICAgICAgICBXcml0ZWJhY2sgbW9kdWxlIHN1cHBvcnRzIGxpbmUvbGluZWFyIG1vZGUK ICAqIEBEUFVfV0JfQkxPQ0tfTU9ERSAgICAgICBXcml0ZWJhY2sgbW9kdWxlIHN1cHBvcnRzIGJs b2NrIG1vZGUgcmVhZApAQCAtNzEwLDQ0ICs2OTYsNiBAQCBzdHJ1Y3QgZHB1X3diX2NmZyB7CiB9 OwogCiAvKioKLSAqIHN0cnVjdCBkcHVfcm90X3ZiaWZfY2ZnIC0gaW5saW5lIHJvdGF0b3IgdmJp ZiBjb25maWdzCi0gKiBAeGluX2lkICAgICAgICAgICAgIHhpbiBjbGllbnQgaWQKLSAqIEBudW0g ICAgICAgICAgICAgICAgZW51bSBpZGVudGlmeWluZyB0aGlzIGJsb2NrCi0gKiBAaXNfcmVhZCAg ICAgICAgICAgIGluZGljYXRlcyByZWFkL3dyaXRlIGNsaWVudAotICogQGNsa19jdHJsICAgICAg ICAgICBpbmRleCB0byBjbGsgY29udHJvbAotICovCi1zdHJ1Y3QgZHB1X3JvdF92YmlmX2NmZyB7 Ci0JdTMyIHhpbl9pZDsKLQl1MzIgbnVtOwotCWJvb2wgaXNfcmVhZDsKLQllbnVtIGRwdV9jbGtf Y3RybF90eXBlIGNsa19jdHJsOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X3JvdF9jZmcgLSBp bmZvcm1hdGlvbiBvZiByb3RhdG9yIGJsb2NrcwotICogQGlkICAgICAgICAgICAgICAgICBlbnVt IGlkZW50aWZ5aW5nIHRoaXMgYmxvY2sKLSAqIEBiYXNlICAgICAgICAgICAgICAgcmVnaXN0ZXIg b2Zmc2V0IG9mIHRoaXMgYmxvY2sKLSAqIEBsZW4gICAgICAgICAgICAgICAgbGVuZ3RoIG9mIGhh cmR3YXJlIGJsb2NrCi0gKiBAZmVhdHVyZXMgICAgICAgICAgIGJpdCBtYXNrIGlkZW50aWZ5aW5n IHN1Yi1ibG9ja3MvZmVhdHVyZXMKLSAqIEBwZGV2ICAgICAgICAgICAgICAgcHJpdmF0ZSBkZXZp Y2UgaGFuZGxlCi0gKiBAc2NpZCAgICAgICAgICAgICAgIHN1YmNhY2hlIGlkZW50aWZpZXIKLSAq IEBzbGljZV9zaXplICAgICAgICAgc3ViY2FjaGUgc2xpY2Ugc2l6ZQotICogQHZiaWZfaWR4ICAg ICAgICAgICB2YmlmIGlkZW50aWZpZXIKLSAqIEB4aW5fY291bnQgICAgICAgICAgbnVtYmVyIG9m IHhpbiBjbGllbnRzCi0gKiBAdmJpZl9jZmcgICAgICAgICAgIHZiaWYgc2V0dGluZ3MgcmVsYXRl ZCB0byByb3RhdG9yCi0gKi8KLXN0cnVjdCBkcHVfcm90X2NmZyB7Ci0JRFBVX0hXX0JMS19JTkZP OwotCXZvaWQgKnBkZXY7Ci0JaW50IHNjaWQ7Ci0Jc2l6ZV90IHNsaWNlX3NpemU7Ci0JdTMyIHZi aWZfaWR4OwotCi0JdTMyIHhpbl9jb3VudDsKLQlzdHJ1Y3QgZHB1X3JvdF92YmlmX2NmZyB2Ymlm X2NmZ1tNQVhfQkxPQ0tTXTsKLX07Ci0KLS8qKgogICogc3RydWN0IGRwdV92YmlmX2R5bmFtaWNf b3RfY2ZnIC0gZHluYW1pYyBPVCBzZXR0aW5nCiAgKiBAcHBzICAgICAgICAgICAgICAgIHBpeGVs IHBlciBzZWNvbmRzCiAgKiBAb3RfbGltaXQgICAgICAgICAgIE9UIGxpbWl0IHRvIHVzZSB1cCB0 byBzcGVjaWZpZWQgcGl4ZWwgcGVyIHNlY29uZApAQCAtOTA5LDggKzg1Nyw2IEBAIHN0cnVjdCBk cHVfcGVyZl9jZmcgewogICogQGhhc19jZHAgICAgICAgICAgICBDbGllbnQgZHJpdmVuIHByZWZl dGNoIGZlYXR1cmUgc3RhdHVzCiAgKiBAaGFzX3diX3Vid2MgICAgICAgIFVCV0MgZmVhdHVyZSBz dXBwb3J0ZWQgb24gV0IKICAqIEB1YndjX3ZlcnNpb24gICAgICAgVUJXQyBmZWF0dXJlIHZlcnNp b24gKDB4MCBmb3Igbm90IHN1cHBvcnRlZCkKLSAqIEBoYXNfc2J1ZiAgICAgICAgICAgaW5kaWNh dGUgaWYgc3RyZWFtIGJ1ZmZlciBpcyBhdmFpbGFibGUKLSAqIEBzYnVmX2hlYWRyb29tICAgICAg c3RyZWFtIGJ1ZmZlciBoZWFkcm9vbSBpbiBsaW5lcwogICogQGhhc19pZGxlX3BjICAgICAgICBp bmRpY2F0ZSBpZiBpZGxlIHBvd2VyIGNvbGxhcHNlIGZlYXR1cmUgaXMgc3VwcG9ydGVkCiAgKiBA ZG1hX2Zvcm1hdHMgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzIGZvciBkbWEgcGlwZQogICogQGN1 cnNvcl9mb3JtYXRzICAgICBTdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY3Vyc29yIHBpcGUKQEAgLTkz NCw4ICs4ODAsNiBAQCBzdHJ1Y3QgZHB1X21kc3NfY2ZnIHsKIAlib29sIGhhc19kaW1fbGF5ZXI7 CiAJYm9vbCBoYXNfd2JfdWJ3YzsKIAl1MzIgdWJ3Y192ZXJzaW9uOwotCWJvb2wgaGFzX3NidWY7 Ci0JdTMyIHNidWZfaGVhZHJvb207CiAJYm9vbCBoYXNfaWRsZV9wYzsKIAl1MzIgdmJpZl9xb3Nf bmx2bDsKIAl1MzIgdHNfcHJlZmlsbF9yZXY7CkBAIC05NzgsOSArOTIyLDYgQEAgc3RydWN0IGRw dV9tZHNzX2NmZyB7CiAJdTMyIHdiX2NvdW50OwogCXN0cnVjdCBkcHVfd2JfY2ZnIHdiW01BWF9C TE9DS1NdOwogCi0JdTMyIHJvdF9jb3VudDsKLQlzdHJ1Y3QgZHB1X3JvdF9jZmcgcm90W01BWF9C TE9DS1NdOwotCiAJdTMyIHZiaWZfY291bnQ7CiAJc3RydWN0IGRwdV92YmlmX2NmZyB2YmlmW01B WF9CTE9DS1NdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfY3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmMK aW5kZXggNDRlZjczNy4uNjkyMmQ4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2N0bC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19jdGwuYwpAQCAtMzEsMTIgKzMxLDggQEAKICNkZWZpbmUgICBDVExfUFJFUEFSRSAg ICAgICAgICAgICAgICAgICAweDBkMAogI2RlZmluZSAgIENUTF9TV19SRVNFVCAgICAgICAgICAg ICAgICAgIDB4MDMwCiAjZGVmaW5lICAgQ1RMX0xBWUVSX0VYVE5fT0ZGU0VUICAgICAgICAgMHg0 MAotI2RlZmluZSAgIENUTF9ST1RfVE9QICAgICAgICAgICAgICAgICAgIDB4MEMwCi0jZGVmaW5l ICAgQ1RMX1JPVF9GTFVTSCAgICAgICAgICAgICAgICAgMHgwQzQKLSNkZWZpbmUgICBDVExfUk9U X1NUQVJUICAgICAgICAgICAgICAgICAweDBDQwogCiAjZGVmaW5lIENUTF9NSVhFUl9CT1JERVJf T1VUICAgICAgICAgICAgQklUKDI0KQotI2RlZmluZSBDVExfRkxVU0hfTUFTS19ST1QgICAgICAg ICAgICAgIEJJVCgyNykKICNkZWZpbmUgQ1RMX0ZMVVNIX01BU0tfQ1RMICAgICAgICAgICAgICBC SVQoMTcpCiAKICNkZWZpbmUgRFBVX1JFR19SRVNFVF9USU1FT1VUX1VTICAgICAgICAyMDAwCkBA IC04NywxNiArODMsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHB1X2h3X2N0bF90cmlnZ2VyX3Bl bmRpbmcoc3RydWN0IGRwdV9od19jdGwgKmN0eCkKIAlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBD VExfUFJFUEFSRSwgMHgxKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRwdV9od19jdGxfdHJp Z2dlcl9yb3Rfc3RhcnQoc3RydWN0IGRwdV9od19jdGwgKmN0eCkKLXsKLQkvKiBST1QgZmx1c2gg Yml0IGlzIGxhdGNoZWQgZHVyaW5nIFJPVCBzdGFydCwgc28gc2V0IGl0IGZpcnN0ICovCi0JaWYg KENUTF9GTFVTSF9NQVNLX1JPVCAmIGN0eC0+cGVuZGluZ19mbHVzaF9tYXNrKSB7Ci0JCWN0eC0+ cGVuZGluZ19mbHVzaF9tYXNrICY9IH5DVExfRkxVU0hfTUFTS19ST1Q7Ci0JCURQVV9SRUdfV1JJ VEUoJmN0eC0+aHcsIENUTF9GTFVTSCwgQ1RMX0ZMVVNIX01BU0tfUk9UKTsKLQl9Ci0JRFBVX1JF R19XUklURSgmY3R4LT5odywgQ1RMX1JPVF9TVEFSVCwgQklUKDApKTsKLX0KLQogc3RhdGljIGlu bGluZSB2b2lkIGRwdV9od19jdGxfY2xlYXJfcGVuZGluZ19mbHVzaChzdHJ1Y3QgZHB1X2h3X2N0 bCAqY3R4KQogewogCWN0eC0+cGVuZGluZ19mbHVzaF9tYXNrID0gMHgwOwpAQCAtMTI1LDEzICsx MTEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHB1X2h3X2N0bF90cmlnZ2VyX2ZsdXNoKHN0cnVj dCBkcHVfaHdfY3RsICpjdHgpCiBzdGF0aWMgaW5saW5lIHUzMiBkcHVfaHdfY3RsX2dldF9mbHVz aF9yZWdpc3RlcihzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KQogewogCXN0cnVjdCBkcHVfaHdfYmxr X3JlZ19tYXAgKmMgPSAmY3R4LT5odzsKLQl1MzIgcm90X29wX21vZGU7Ci0KLQlyb3Rfb3BfbW9k ZSA9IERQVV9SRUdfUkVBRChjLCBDVExfUk9UX1RPUCkgJiAweDM7Ci0KLQkvKiByb3RhdGUgZmx1 c2ggYml0IGlzIHVuZGVmaW5lZCBpZiBvZmZsaW5lIG1vZGUsIHNvIGlnbm9yZSBpdCAqLwotCWlm IChyb3Rfb3BfbW9kZSA9PSBEUFVfQ1RMX1JPVF9PUF9NT0RFX09GRkxJTkUpCi0JCXJldHVybiBE UFVfUkVHX1JFQUQoYywgQ1RMX0ZMVVNIKSAmIH5DVExfRkxVU0hfTUFTS19ST1Q7CiAKIAlyZXR1 cm4gRFBVX1JFR19SRUFEKGMsIENUTF9GTFVTSCk7CiB9CkBAIC0yOTMsMTkgKzI3Miw2IEBAIHN0 YXRpYyBpbmxpbmUgaW50IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tfd2Ioc3RydWN0IGRwdV9od19j dGwgKmN0eCwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZHB1X2h3X2N0bF9n ZXRfYml0bWFza19yb3Qoc3RydWN0IGRwdV9od19jdGwgKmN0eCwKLQkJdTMyICpmbHVzaGJpdHMs IGVudW0gZHB1X3JvdCByb3QpCi17Ci0Jc3dpdGNoIChyb3QpIHsKLQljYXNlIFJPVF8wOgotCQkq Zmx1c2hiaXRzIHw9IENUTF9GTFVTSF9NQVNLX1JPVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBk cHVfaHdfY3RsX2dldF9iaXRtYXNrX2NkbShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCQl1MzIg KmZsdXNoYml0cywgZW51bSBkcHVfY2RtIGNkbSkKIHsKQEAgLTU1MiwxNyArNTE4LDYgQEAgc3Rh dGljIHZvaWQgZHB1X2h3X2N0bF9pbnRmX2NmZyhzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCURQ VV9SRUdfV1JJVEUoYywgQ1RMX1RPUCwgaW50Zl9jZmcpOwogfQogCi1zdGF0aWMgdm9pZCBkcHVf aHdfY3RsX3NldHVwX3NidWZfY2ZnKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCi0Jc3RydWN0IGRw dV9jdGxfc2J1Zl9jZmcgKmNmZykKLXsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjID0g JmN0eC0+aHc7Ci0JdTMyIHZhbDsKLQotCXZhbCA9IGNmZy0+cm90X29wX21vZGUgJiAweDM7Ci0K LQlEUFVfUkVHX1dSSVRFKGMsIENUTF9ST1RfVE9QLCB2YWwpOwotfQotCiBzdGF0aWMgdm9pZCBk cHVfaHdfcmVnX2RtYV9mbHVzaChzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KQogewogCXN0cnVjdCBk cHVfaHdfcmVnX2RtYV9vcHMgKm9wcyA9IGRwdV9yZWdfZG1hX2dldF9vcHMoKTsKQEAgLTU5NCwx MiArNTQ5LDYgQEAgc3RhdGljIHZvaWQgX3NldHVwX2N0bF9vcHMoc3RydWN0IGRwdV9od19jdGxf b3BzICpvcHMsCiAJb3BzLT5nZXRfYml0bWFza19jZG0gPSBkcHVfaHdfY3RsX2dldF9iaXRtYXNr X2NkbTsKIAlvcHMtPmdldF9iaXRtYXNrX3diID0gZHB1X2h3X2N0bF9nZXRfYml0bWFza193YjsK IAlvcHMtPnJlZ19kbWFfZmx1c2ggPSBkcHVfaHdfcmVnX2RtYV9mbHVzaDsKLQotCWlmIChjYXAg JiBCSVQoRFBVX0NUTF9TQlVGKSkgewotCQlvcHMtPmdldF9iaXRtYXNrX3JvdCA9IGRwdV9od19j dGxfZ2V0X2JpdG1hc2tfcm90OwotCQlvcHMtPnNldHVwX3NidWZfY2ZnID0gZHB1X2h3X2N0bF9z ZXR1cF9zYnVmX2NmZzsKLQkJb3BzLT50cmlnZ2VyX3JvdF9zdGFydCA9IGRwdV9od19jdGxfdHJp Z2dlcl9yb3Rfc3RhcnQ7Ci0JfQogfTsKIAogc3RhdGljIHN0cnVjdCBkcHVfaHdfYmxrX29wcyBk cHVfaHdfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2h3X2N0bC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0bC5o CmluZGV4IDQ3YTZhMGIuLmQzNDM1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19jdGwuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY3RsLmgKQEAgLTI5LDIwICsyOSw2IEBAIGVudW0gZHB1X2N0bF9tb2RlX3NlbCB7 CiAJRFBVX0NUTF9NT0RFX1NFTF9DTUQKIH07CiAKLS8qKgotICogZHB1X2N0bF9yb3Rfb3BfbW9k ZSAtIGlubGluZSByb3RhdGlvbiBtb2RlCi0gKiBEUFVfQ1RMX1JPVF9PUF9NT0RFX09GRkxJTkU6 IG9mZmxpbmUgcm90YXRpb24KLSAqIERQVV9DVExfUk9UX09QX01PREVfUkVTRVJWRUQ6IHJlc2Vy dmVkCi0gKiBEUFVfQ1RMX1JPVF9PUF9NT0RFX0lOTElORV9TWU5DOiBpbmxpbmUgcm90YXRpb24g c3luY2hyb25vdXMgbW9kZQotICogRFBVX0NUTF9ST1RfT1BfTU9ERV9JTkxJTkVfQVNZTkM6IGlu bGluZSByb3RhdGlvbiBhc3luY2hyb25vdXMgbW9kZQotICovCi1lbnVtIGRwdV9jdGxfcm90X29w X21vZGUgewotCURQVV9DVExfUk9UX09QX01PREVfT0ZGTElORSwKLQlEUFVfQ1RMX1JPVF9PUF9N T0RFX1JFU0VSVkVELAotCURQVV9DVExfUk9UX09QX01PREVfSU5MSU5FX1NZTkMsCi0JRFBVX0NU TF9ST1RfT1BfTU9ERV9JTkxJTkVfQVNZTkMsCi19OwotCiBzdHJ1Y3QgZHB1X2h3X2N0bDsKIC8q KgogICogc3RydWN0IGRwdV9od19zdGFnZV9jZmcgLSBibGVuZGluZyBzdGFnZSBjZmcKQEAgLTcy LDE0ICs1OCw2IEBAIHN0cnVjdCBkcHVfaHdfaW50Zl9jZmcgewogfTsKIAogLyoqCi0gKiBzdHJ1 Y3QgZHB1X2N0bF9zYnVmX2NmZyAtIGNvbnRyb2wgZm9yIHN0cmVhbSBidWZmZXIgY29uZmlndXJh dGlvbgotICogQHJvdF9vcF9tb2RlOiByb3RhdG9yIG9wZXJhdGlvbiBtb2RlCi0gKi8KLXN0cnVj dCBkcHVfY3RsX3NidWZfY2ZnIHsKLQllbnVtIGRwdV9jdGxfcm90X29wX21vZGUgcm90X29wX21v ZGU7Ci19OwotCi0vKioKICAqIHN0cnVjdCBkcHVfaHdfY3RsX29wcyAtIEludGVyZmFjZSB0byB0 aGUgd2IgSHcgZHJpdmVyIGZ1bmN0aW9ucwogICogQXNzdW1wdGlvbiBpcyB0aGVzZSBmdW5jdGlv bnMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVkCiAgKi8KQEAgLTEwMCwx MyArNzgsNiBAQCBzdHJ1Y3QgZHB1X2h3X2N0bF9vcHMgewogCXZvaWQgKCp0cmlnZ2VyX3BlbmRp bmcpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgpOwogCiAJLyoqCi0JICoga2lja29mZiByb3RhdG9y IG9wZXJhdGlvbiBmb3IgU3cgY29udHJvbGxlZCBpbnRlcmZhY2VzCi0JICogRFNJIGNtZCBtb2Rl IGFuZCBXQiBpbnRlcmZhY2UgYXJlIFNXIGNvbnRyb2xsZWQKLQkgKiBAY3R4ICAgICAgIDogY3Rs IHBhdGggY3R4IHBvaW50ZXIKLQkgKi8KLQl2b2lkICgqdHJpZ2dlcl9yb3Rfc3RhcnQpKHN0cnVj dCBkcHVfaHdfY3RsICpjdHgpOwotCi0JLyoqCiAJICogQ2xlYXIgdGhlIHZhbHVlIG9mIHRoZSBj YWNoZWQgcGVuZGluZ19mbHVzaF9tYXNrCiAJICogTm8gZWZmZWN0IG9uIGhhcmR3YXJlCiAJICog QGN0eCAgICAgICA6IGN0bCBwYXRoIGN0eCBwb2ludGVyCkBAIC0xODksMTAgKzE2MCw2IEBAIHN0 cnVjdCBkcHVfaHdfY3RsX29wcyB7CiAJCXUzMiAqZmx1c2hiaXRzLAogCQllbnVtIGRwdV93YiBi bGspOwogCi0JaW50ICgqZ2V0X2JpdG1hc2tfcm90KShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAot CQl1MzIgKmZsdXNoYml0cywKLQkJZW51bSBkcHVfcm90IGJsayk7Ci0KIAkvKioKIAkgKiBTZXQg YWxsIGJsZW5kIHN0YWdlcyB0byBkaXNhYmxlZAogCSAqIEBjdHggICAgICAgOiBjdGwgcGF0aCBj dHggcG9pbnRlcgpAQCAtMjA4LDkgKzE3NSw2IEBAIHN0cnVjdCBkcHVfaHdfY3RsX29wcyB7CiAJ dm9pZCAoKnNldHVwX2JsZW5kc3RhZ2UpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCiAJCWVudW0g ZHB1X2xtIGxtLCBzdHJ1Y3QgZHB1X2h3X3N0YWdlX2NmZyAqY2ZnKTsKIAotCXZvaWQgKCpzZXR1 cF9zYnVmX2NmZykoc3RydWN0IGRwdV9od19jdGwgKmN0eCwKLQkJc3RydWN0IGRwdV9jdGxfc2J1 Zl9jZmcgKmNmZyk7Ci0KIAkvKioKIAkgKiBGbHVzaCB0aGUgcmVnIGRtYSBieSBzZW5kaW5nIGxh c3QgY29tbWFuZC4KIAkgKiBAY3R4ICAgICAgIDogY3RsIHBhdGggY3R4IHBvaW50ZXIKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRmLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5jCmluZGV4IDgzMDIzNjAuLjcz ODZkNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19p bnRmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuYwpA QCAtMjMwLDI1ICsyMzAsNiBAQCBzdGF0aWMgdm9pZCBkcHVfaHdfaW50Zl9zZXR1cF9wcmdfZmV0 Y2goCiAJRFBVX1JFR19XUklURShjLCBJTlRGX0NPTkZJRywgZmV0Y2hfZW5hYmxlKTsKIH0KIAot c3RhdGljIHZvaWQgZHB1X2h3X2ludGZfc2V0dXBfcm90X3N0YXJ0KAotCQlzdHJ1Y3QgZHB1X2h3 X2ludGYgKmludGYsCi0JCWNvbnN0IHN0cnVjdCBpbnRmX3Byb2dfZmV0Y2ggKmZldGNoKQotewot CXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmMgPSAmaW50Zi0+aHc7Ci0JaW50IGZldGNoX2Vu YWJsZTsKLQotCWZldGNoX2VuYWJsZSA9IERQVV9SRUdfUkVBRChjLCBJTlRGX0NPTkZJRyk7Ci0J aWYgKGZldGNoLT5lbmFibGUpIHsKLQkJZmV0Y2hfZW5hYmxlIHw9IEJJVCgxOSk7Ci0JCURQVV9S RUdfV1JJVEUoYywgSU5URl9QUk9HX1JPVF9TVEFSVCwKLQkJCQlmZXRjaC0+ZmV0Y2hfc3RhcnQp OwotCX0gZWxzZSB7Ci0JCWZldGNoX2VuYWJsZSAmPSB+QklUKDE5KTsKLQl9Ci0KLQlEUFVfUkVH X1dSSVRFKGMsIElOVEZfQ09ORklHLCBmZXRjaF9lbmFibGUpOwotfQotCiBzdGF0aWMgdm9pZCBk cHVfaHdfaW50Zl9nZXRfc3RhdHVzKAogCQlzdHJ1Y3QgZHB1X2h3X2ludGYgKmludGYsCiAJCXN0 cnVjdCBpbnRmX3N0YXR1cyAqcykKQEAgLTMxMSw4ICsyOTIsNiBAQCBzdGF0aWMgdm9pZCBfc2V0 dXBfaW50Zl9vcHMoc3RydWN0IGRwdV9od19pbnRmX29wcyAqb3BzLAogCW9wcy0+c2V0dXBfbWlz ciA9IGRwdV9od19pbnRmX3NldHVwX21pc3I7CiAJb3BzLT5jb2xsZWN0X21pc3IgPSBkcHVfaHdf aW50Zl9jb2xsZWN0X21pc3I7CiAJb3BzLT5nZXRfbGluZV9jb3VudCA9IGRwdV9od19pbnRmX2dl dF9saW5lX2NvdW50OwotCWlmIChjYXAgJiBCSVQoRFBVX0lOVEZfUk9UX1NUQVJUKSkKLQkJb3Bz LT5zZXR1cF9yb3Rfc3RhcnQgPSBkcHVfaHdfaW50Zl9zZXR1cF9yb3Rfc3RhcnQ7CiB9CiAKIHN0 YXRpYyBzdHJ1Y3QgZHB1X2h3X2Jsa19vcHMgZHB1X2h3X29wcyA9IHsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRmLmggYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5oCmluZGV4IDljNTRhMTkuLmE3OWQ3MzUgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRmLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuaApAQCAtNTcsNyAr NTcsNiBAQCBzdHJ1Y3QgaW50Zl9zdGF0dXMgewogICogIEFzc3VtcHRpb24gaXMgdGhlc2UgZnVu Y3Rpb25zIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNsb2NrcyBhcmUgZW5hYmxlZAogICogQCBzZXR1 cF90aW1pbmdfZ2VuIDogcHJvZ3JhbXMgdGhlIHRpbWluZyBlbmdpbmUKICAqIEAgc2V0dXBfcHJv Z19mZXRjaCA6IGVuYWJsZXMvZGlzYWJsZXMgdGhlIHByb2dyYW1tYWJsZSBmZXRjaCBsb2dpYwot ICogQCBzZXR1cF9yb3Rfc3RhcnQgIDogZW5hYmxlcy9kaXNhYmxlcyB0aGUgcm90YXRvciBzdGFy dCB0cmlnZ2VyCiAgKiBAIGVuYWJsZV90aW1pbmc6IGVuYWJsZS9kaXNhYmxlIHRpbWluZyBlbmdp bmUKICAqIEAgZ2V0X3N0YXR1czogcmV0dXJucyBpZiB0aW1pbmcgZW5naW5lIGlzIGVuYWJsZWQg b3Igbm90CiAgKiBAIHNldHVwX21pc3I6IGVuYWJsZXMvZGlzYWJsZXMgTUlTUiBpbiBIVyByZWdp c3RlcgpAQCAtNzIsOSArNzEsNiBAQCBzdHJ1Y3QgZHB1X2h3X2ludGZfb3BzIHsKIAl2b2lkICgq c2V0dXBfcHJnX2ZldGNoKShzdHJ1Y3QgZHB1X2h3X2ludGYgKmludGYsCiAJCQljb25zdCBzdHJ1 Y3QgaW50Zl9wcm9nX2ZldGNoICpmZXRjaCk7CiAKLQl2b2lkICgqc2V0dXBfcm90X3N0YXJ0KShz dHJ1Y3QgZHB1X2h3X2ludGYgKmludGYsCi0JCQljb25zdCBzdHJ1Y3QgaW50Zl9wcm9nX2ZldGNo ICpmZXRjaCk7Ci0KIAl2b2lkICgqZW5hYmxlX3RpbWluZykoc3RydWN0IGRwdV9od19pbnRmICpp bnRmLAogCQkJdTggZW5hYmxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X21kc3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19tZHNzLmgKaW5kZXggMDk0YTQxOC4uNWVkZTJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oCkBAIC0xMDcsNyArMTA3LDYgQEAgZW51bSBkcHVf aHdfYmxrX3R5cGUgewogCURQVV9IV19CTEtfSU5URiwKIAlEUFVfSFdfQkxLX1dCLAogCURQVV9I V19CTEtfRFNDLAotCURQVV9IV19CTEtfUk9ULAogCURQVV9IV19CTEtfTUFYLAogfTsKIApAQCAt Mjk5LDE4ICsyOTgsNiBAQCBlbnVtIGRwdV9pb21tdV9kb21haW4gewogCURQVV9JT01NVV9ET01B SU5fTUFYCiB9OwogCi1lbnVtIGRwdV9yb3QgewotCVJPVF8wID0gMSwKLQlST1RfTUFYCi19Owot Ci1lbnVtIGRwdV9pbmxpbmVfcm90IHsKLQlJTkxJTkVfUk9UX05PTkUsCi0JSU5MSU5FX1JPVDBf U1NQUCwKLQlJTkxJTkVfUk9UMF9XQiwKLQlJTkxJTkVfUk9UX01BWAotfTsKLQogLyoqCiAgKiBE UFUgSFcsQ29tcG9uZW50IG9yZGVyIGNvbG9yIG1hcAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfaHdfcm90LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIy MGE2NDAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3JvdC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYxICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykg MjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq Ci0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotICovCi0KLSNkZWZpbmUgcHJfZm10KGZtdCkJIltkcm06JXM6JWRdICIgZm10LCBf X2Z1bmNfXywgX19MSU5FX18KLQotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJkcHVfa21zLmgiCi0jaW5jbHVk ZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdpby5oIgotI2luY2x1ZGUgImRwdV9o d19jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2h3X3JvdC5oIgotI2luY2x1ZGUgImRwdV9mb3Jt YXRzLmgiCi0jaW5jbHVkZSAiZHB1X3JvdGF0b3JfaW5saW5lLmgiCi0KLSNkZWZpbmUgRFBVX01P RElGTEVSKF9tb2RpZmllcl8pICgoX21vZGlmaWVyXykgJiAweDAwZmZmZmZmZmZmZmZmZmZVTEwp Ci0jZGVmaW5lIERQVV9NT0RJRklFUl9JU19USUxFKF9tb2RpZmllcl8pIFwKLQlEUFVfTU9ESUZM RVIoKF9tb2RpZmllcl8pICYgRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFKQotI2RlZmluZSBEUFVf TU9ESUZJRVJfSVNfVUJXQyhfbW9kaWZpZXJfKSBcCi0JRFBVX01PRElGTEVSKChfbW9kaWZpZXJf KSAmIERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRCkKLSNkZWZpbmUgRFBVX01PRElGSUVS X0lTXzEwQihfbW9kaWZpZXJfKSBcCi0JRFBVX01PRElGTEVSKChfbW9kaWZpZXJfKSAmIERSTV9G T1JNQVRfTU9EX1FDT01fRFgpCi0jZGVmaW5lIERQVV9NT0RJRklFUl9JU19USUdIVChfbW9kaWZp ZXJfKSBcCi0JRFBVX01PRElGTEVSKChfbW9kaWZpZXJfKSAmIERSTV9GT1JNQVRfTU9EX1FDT01f VElHSFQpCi0KLS8qKgotICogX3JvdF9vZmZzZXQgLSB1cGRhdGUgcmVnaXN0ZXIgbWFwIG9mIHRo ZSBnaXZlbiByb3RhdG9yIGluc3RhbmNlCi0gKiBAcm90OiByb3RhdG9yIGlkZW50aWZpZXIKLSAq IEBtOiBQb2ludGVyIHRvIG1kc3MgY2F0YWxvZwotICogQGFkZHI6IGkvbyBhZGRyZXNzIG1hcHBp bmcKLSAqIEBiOiBQb2ludGVyIHRvIHJlZ2lzdGVyIGJsb2NrIG1hcHBpbmcgc3RydWN0dXJlCi0g KiByZXR1cm46IFBvaW50ZXIgdG8gcm90YXRvciBjb25maWd1cmF0aW9uIG9mIHRoZSBnaXZlbiBp bnN0YW5jZQotICovCi1zdGF0aWMgc3RydWN0IGRwdV9yb3RfY2ZnICpfcm90X29mZnNldChlbnVt IGRwdV9yb3Qgcm90LAotCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptLAotCQl2b2lkIF9faW9tZW0g KmFkZHIsCi0JCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAgKmIpCi17Ci0JaW50IGk7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgbS0+cm90X2NvdW50OyBpKyspIHsKLQkJaWYgKHJvdCA9PSBtLT5yb3Rb aV0uaWQpIHsKLQkJCWItPmJhc2Vfb2ZmID0gYWRkcjsKLQkJCWItPmJsa19vZmYgPSBtLT5yb3Rb aV0uYmFzZTsKLQkJCWItPmh3dmVyc2lvbiA9IG0tPmh3dmVyc2lvbjsKLQkJCWItPmxvZ19tYXNr ID0gRFBVX0RCR19NQVNLX1JPVDsKLQkJCXJldHVybiAmbS0+cm90W2ldOwotCQl9Ci0JfQotCi0J cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci19Ci0KLS8qKgotICogX2RwdV9od19yb3RfcmVnX2R1 bXAgLSBwZXJmb3JtIHJlZ2lzdGVyIGR1bXAKLSAqIEBwdHI6IHByaXZhdGUgcG9pbnRlciB0byBy b3RhdG9yIHBsYXRmb3JtIGRldmljZQotICogcmV0dXJuOiBOb25lCi0gKi8KLXN0YXRpYyB2b2lk IF9kcHVfaHdfcm90X3JlZ19kdW1wKHZvaWQgKnB0cikKLXsKLQlkcHVfcm90YXRvcl9pbmxpbmVf cmVnX2R1bXAoKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKikgcHRyKTsKLX0KLQotLyoqCi0gKiBk cHVfaHdfcm90X3N0YXJ0IC0gc3RhcnQgcm90YXRvciBiZWZvcmUgYW55IGNvbW1pdAotICogQGh3 OiBQb2ludGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVyCi0gKiByZXR1cm46IDAgaWYgc3Vj Y2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKLSAqLwotc3RhdGljIGludCBkcHVfaHdfcm90X3N0 YXJ0KHN0cnVjdCBkcHVfaHdfcm90ICpodykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2OwotCWludCByYzsKLQotCWlmICghaHcgfHwgIWh3LT5jYXBzIHx8ICFody0+Y2Fwcy0+cGRl dikgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7Ci0JCXJldHVybiAtRUlO VkFMOwotCX0KLQotCXBkZXYgPSBody0+Y2Fwcy0+cGRldjsKLQotCXJjID0gZHB1X2RiZ19yZWdf cmVnaXN0ZXJfY2IoaHctPm5hbWUsIF9kcHVfaHdfcm90X3JlZ19kdW1wLCBwZGV2KTsKLQlpZiAo cmMpCi0JCURQVV9FUlJPUigiZmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnIGR1bXAgJWRcbiIsIHJj KTsKLQotCWh3LT5yb3RfY3R4ID0gZHB1X3JvdGF0b3JfaW5saW5lX29wZW4ocGRldik7Ci0JaWYg KElTX0VSUl9PUl9OVUxMKGh3LT5yb3RfY3R4KSkgewotCQlyYyA9IFBUUl9FUlIoaHctPnJvdF9j dHgpOwotCQlody0+cm90X2N0eCA9IE5VTEw7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyZXR1cm4g MDsKLX0KLQotLyoqCi0gKiBkcHVfaHdfcm90X3N0b3AgLSBzdG9wIHJvdGF0b3IgYWZ0ZXIgZmlu YWwgY29tbWl0Ci0gKiBAaHc6IFBvaW50ZXIgdG8gcm90YXRvciBoYXJkd2FyZSBkcml2ZXIKLSAq IHJldHVybjogbm9uZQotICovCi1zdGF0aWMgdm9pZCBkcHVfaHdfcm90X3N0b3Aoc3RydWN0IGRw dV9od19yb3QgKmh3KQotewotCWlmICghaHcgfHwgIWh3LT5jYXBzIHx8ICFody0+Y2Fwcy0+cGRl dikgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyXG4iKTsKLQkJcmV0dXJuOwotCX0K LQotCWRwdV9yb3RhdG9yX2lubGluZV9yZWxlYXNlKGh3LT5yb3RfY3R4KTsKLQlody0+cm90X2N0 eCA9IE5VTEw7Ci0KLQlkcHVfZGJnX3JlZ191bnJlZ2lzdGVyX2NiKGh3LT5uYW1lLCBfZHB1X2h3 X3JvdF9yZWdfZHVtcCwKLQkJCWh3LT5jYXBzLT5wZGV2KTsKLX0KLQotLyoqCi0gKiBkcHVfaHdf cm90X3RvX3Y0bDJfcGl4Zm10IC0gY29udmVydCBkcm0gcGl4ZWwgZm9ybWF0IHRvIHY0bDIgcGl4 ZWwgZm9ybWF0Ci0gKiBAZHJtX3BpeGZtdDogZHJtIGZvdXJjYyBwaXhlbCBmb3JtYXQKLSAqIEBk cm1fbW9kaWZpZXI6IGRybSBwaXhlbCBmb3JtYXQgbW9kaWZpZXIKLSAqIEBwaXhmbXQ6IFBvaW50 ZXIgdG8gdjRsMiBmb3VyY2MgcGl4ZWwgZm9ybWF0IChvdXRwdXQpCi0gKiByZXR1cm46IDAgaWYg c3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKLSAqLwotc3RhdGljIGludCBkcHVfaHdfcm90 X3RvX3Y0bDJfcGl4Zm10KHUzMiBkcm1fcGl4Zm10LCB1NjQgZHJtX21vZGlmaWVyLAotCQl1MzIg KnBpeGZtdCkKLXsKLQl1MzIgcmMgPSAwOwotCi0JaWYgKCFwaXhmbXQpCi0JCXJldHVybiAtRUlO VkFMOwotCi0Jc3dpdGNoIChkcm1fcGl4Zm10KSB7Ci0JY2FzZSBEUk1fRk9STUFUX0JHUjU2NToK LQkJaWYgKERQVV9NT0RJRklFUl9JU19VQldDKGRybV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0g RFBVX1BJWF9GTVRfUkdCXzU2NV9VQldDOwotCQllbHNlCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9G TVRfUkdCXzU2NTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4OgotCQlpZiAo RFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElY X0ZNVF9BUkdCXzg4ODhfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FS R0JfODg4ODsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4OgotCQlpZiAoRFBV X01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZN VF9YUkdCXzg4ODhfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1hSR0Jf ODg4ODsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4OgotCQlpZiAoRFBVX01P RElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9B QkdSXzg4ODhfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FCR1JfODg4 ODsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQlg4ODg4OgotCQlpZiAoRFBVX01PRElG SUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YQkdS Xzg4ODhfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1hCR1JfODg4ODsK LQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgotCQlpZiAoRFBVX01PRElGSUVS X0lTX1VCV0MoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JBXzg4 ODhfVUJXQzsKLQkJZWxzZSBpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkK LQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JBXzg4ODhfVElMRTsKLQkJZWxzZQotCQkJKnBp eGZtdCA9IERQVV9QSVhfRk1UX1JHQkFfODg4ODsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFU X1hCR1I4ODg4OgotCQlpZiAoRFBVX01PRElGSUVSX0lTX1VCV0MoZHJtX21vZGlmaWVyKSkKLQkJ CSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JYXzg4ODhfVUJXQzsKLQkJZWxzZSBpZiAoRFBVX01P RElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9S R0JYXzg4ODhfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1JHQlhfODg4 ODsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCQlpZiAoRFBVX01PRElG SUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9CR1JB Xzg4ODhfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0JHUkFfODg4ODsK LQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgotCQlpZiAoRFBVX01PRElGSUVS X0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9CR1JYXzg4 ODhfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0JHUlhfODg4ODsKLQkJ YnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX05WMTI6Ci0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVUJX Qyhkcm1fbW9kaWZpZXIpKSB7Ci0JCQlpZiAoRFBVX01PRElGSUVSX0lTXzEwQihkcm1fbW9kaWZp ZXIpKSB7Ci0JCQkJaWYgKERQVV9NT0RJRklFUl9JU19USUdIVChkcm1fbW9kaWZpZXIpKQotCQkJ CQkqcGl4Zm10ID0KLQkJCQkJRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfVFAxMF9VQldDOwotCQkJ CWVsc2UKLQkJCQkJKnBpeGZtdCA9Ci0JCQkJCURQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1AwMTBf VUJXQzsKLQkJCX0gZWxzZSB7Ci0JCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYy X1VCV0M7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlm aWVyKSkgewotCQkJaWYgKERQVV9NT0RJRklFUl9JU18xMEIoZHJtX21vZGlmaWVyKSkgewotCQkJ CWlmIChEUFVfTU9ESUZJRVJfSVNfVElHSFQoZHJtX21vZGlmaWVyKSkKLQkJCQkJKnBpeGZtdCA9 Ci0JCQkJCURQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1RQMTA7Ci0JCQkJZWxzZQotCQkJCQkqcGl4 Zm10ID0KLQkJCQkJRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfUDAxMF9USUxFOwotCQkJfSBlbHNl IHsKLQkJCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfVElMRTsKLQkJCX0KLQkJ fSBlbHNlIHsKLQkJCWlmIChEUFVfTU9ESUZJRVJfSVNfMTBCKGRybV9tb2RpZmllcikpIHsKLQkJ CQlpZiAoRFBVX01PRElGSUVSX0lTX1RJR0hUKGRybV9tb2RpZmllcikpCi0JCQkJCSpwaXhmbXQg PQotCQkJCQlEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9UUDEwOwotCQkJCWVsc2UKLQkJCQkJKnBp eGZtdCA9Ci0JCQkJCURQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1AwMTA7Ci0JCQl9IGVsc2Ugewot CQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMjsKLQkJCX0KLQkJfQotCQlicmVh azsKLQljYXNlIERSTV9GT1JNQVRfTlYyMToKLQkJaWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRy bV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfWV9DUkNCX0gyVjJfVElMRTsK LQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1lfQ1JDQl9IMlYyOwotCQlicmVhazsK LQljYXNlIERSTV9GT1JNQVRfQkdSQTEwMTAxMDI6Ci0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVElM RShkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FSR0JfMjEwMTAxMF9U SUxFOwotCQllbHNlCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQVJHQl8yMTAxMDEwOwotCQli cmVhazsKLQljYXNlIERSTV9GT1JNQVRfQkdSWDEwMTAxMDI6Ci0JCWlmIChEUFVfTU9ESUZJRVJf SVNfVElMRShkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1hSR0JfMjEw MTAxMF9USUxFOwotCQllbHNlCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfWFJHQl8yMTAxMDEw OwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfUkdCQTEwMTAxMDI6Ci0JCWlmIChEUFVfTU9E SUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FC R1JfMjEwMTAxMF9USUxFOwotCQllbHNlCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQUJHUl8y MTAxMDEwOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfUkdCWDEwMTAxMDI6Ci0JCWlmIChE UFVfTU9ESUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZtdCA9IERQVV9QSVhf Rk1UX1hCR1JfMjEwMTAxMF9USUxFOwotCQllbHNlCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRf WEJHUl8yMTAxMDEwOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfQVJHQjIxMDEwMTA6Ci0J CWlmIChEUFVfTU9ESUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZtdCA9IERQ VV9QSVhfRk1UX0JHUkFfMTAxMDEwMl9USUxFOwotCQllbHNlCi0JCQkqcGl4Zm10ID0gRFBVX1BJ WF9GTVRfQkdSQV8xMDEwMTAyOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEw MTA6Ci0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZt dCA9IERQVV9QSVhfRk1UX0JHUlhfMTAxMDEwMl9USUxFOwotCQllbHNlCi0JCQkqcGl4Zm10ID0g RFBVX1BJWF9GTVRfQkdSWF8xMDEwMTAyOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfQUJH UjIxMDEwMTA6Ci0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVUJXQyhkcm1fbW9kaWZpZXIpKQotCQkJ KnBpeGZtdCA9IERQVV9QSVhfRk1UX1JHQkFfMTAxMDEwMl9VQldDOwotCQllbHNlIGlmIChEUFVf TU9ESUZJRVJfSVNfVElMRShkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1U X1JHQkFfMTAxMDEwMl9USUxFOwotCQllbHNlCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdC QV8xMDEwMTAyOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6Ci0JCWlm IChEUFVfTU9ESUZJRVJfSVNfVUJXQyhkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZtdCA9IERQVV9Q SVhfRk1UX1JHQlhfMTAxMDEwMl9VQldDOwotCQllbHNlIGlmIChEUFVfTU9ESUZJRVJfSVNfVElM RShkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1JHQlhfMTAxMDEwMl9U SUxFOwotCQllbHNlCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCWF8xMDEwMTAyOwotCQli cmVhazsKLQlkZWZhdWx0OgotCQlEUFVfRVJST1IoImludmFsaWQgZHJtIHBpeGVsIGZvcm1hdCAl YyVjJWMlYy8lbGx4XG4iLAotCQkJCWRybV9waXhmbXQgPj4gMCwgZHJtX3BpeGZtdCA+PiA4LAot CQkJCWRybV9waXhmbXQgPj4gMTYsIGRybV9waXhmbXQgPj4gMjQsCi0JCQkJZHJtX21vZGlmaWVy KTsKLQkJcmMgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8q KgotICogZHB1X2h3X3JvdF90b19kcm1fcGl4Zm10IC0gY29udmVydCB2NGwyIHBpeGVsIGZvcm1h dCB0byBkcm0gcGl4ZWwgZm9ybWF0Ci0gKiBAcGl4Zm10OiB2NGwyIGZvdXJjYyBwaXhlbCBmb3Jt YXQKLSAqIEBkcm1fcGl4Zm10OiBQb2ludGVyIHRvIGRybSBmb3J1Y2MgcGl4ZWwgZm9ybWF0IChv dXRwdXQpCi0gKiBAZHJtX21vZGlmaWVyOiBQb2ludGVyIHRvIGRybSBwaXhlbCBmb3JtYXQgbW9k aWZpZXIgKG91dHB1dCkKLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVy d2lzZQotICovCi1zdGF0aWMgaW50IGRwdV9od19yb3RfdG9fZHJtX3BpeGZtdCh1MzIgcGl4Zm10 LCB1MzIgKmRybV9waXhmbXQsCi0JCXU2NCAqZHJtX21vZGlmaWVyKQotewotCXUzMiByYyA9IDA7 Ci0KLQlzd2l0Y2ggKHBpeGZtdCkgewotCWNhc2UgRFBVX1BJWF9GTVRfUkdCXzU2NToKLQkJKmRy bV9waXhmbXQgPSBEUk1fRk9STUFUX0JHUjU2NTsKLQkJKmRybV9tb2RpZmllciA9IDA7Ci0JCWJy ZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfUkdCXzU2NV9VQldDOgotCQkqZHJtX3BpeGZtdCA9IERS TV9GT1JNQVRfQkdSNTY1OwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9D T01QUkVTU0VEIHwKLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNh c2UgRFBVX1BJWF9GTVRfUkdCQV84ODg4OgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQUJH Ujg4ODg7Ci0JCSpkcm1fbW9kaWZpZXIgPSAwOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1U X1JHQlhfODg4ODoKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1hCR1I4ODg4OwotCQkqZHJt X21vZGlmaWVyID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9CR1JBXzg4ODg6Ci0J CSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9BUkdCODg4ODsKLQkJKmRybV9tb2RpZmllciA9IDA7 Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfQkdSWF84ODg4OgotCQkqZHJtX3BpeGZtdCA9 IERSTV9GT1JNQVRfWFJHQjg4ODg7Ci0JCSpkcm1fbW9kaWZpZXIgPSAwOwotCQlicmVhazsKLQlj YXNlIERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1VCV0M6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZP Uk1BVF9OVjEyOwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVT U0VEIHwKLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBV X1BJWF9GTVRfWV9DUkNCX0gyVjI6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9OVjIxOwot CQkqZHJtX21vZGlmaWVyID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9SR0JBXzg4 ODhfVUJXQzoKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0FCR1I4ODg4OwotCQkqZHJtX21v ZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEIHwKLQkJCQlEUk1fRk9STUFU X01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfUkdCWF84ODg4X1VC V0M6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9YQkdSODg4ODsKLQkJKmRybV9tb2RpZmll ciA9IERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRCB8Ci0JCQkJRFJNX0ZPUk1BVF9NT0Rf UUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyOgotCQkq ZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfTlYxMjsKLQkJKmRybV9tb2RpZmllciA9IDA7Ci0JCWJy ZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfQVJHQl84ODg4OgotCQkqZHJtX3BpeGZtdCA9IERSTV9G T1JNQVRfQkdSQTg4ODg7Ci0JCSpkcm1fbW9kaWZpZXIgPSAwOwotCQlicmVhazsKLQljYXNlIERQ VV9QSVhfRk1UX1hSR0JfODg4ODoKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0JHUlg4ODg4 OwotCQkqZHJtX21vZGlmaWVyID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9BQkdS Xzg4ODg6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9SR0JBODg4ODsKLQkJKmRybV9tb2Rp ZmllciA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfWEJHUl84ODg4OgotCQkqZHJt X3BpeGZtdCA9IERSTV9GT1JNQVRfUkdCWDg4ODg7Ci0JCSpkcm1fbW9kaWZpZXIgPSAwOwotCQli cmVhazsKLQljYXNlIERQVV9QSVhfRk1UX0FSR0JfMjEwMTAxMDoKLQkJKmRybV9waXhmbXQgPSBE Uk1fRk9STUFUX0JHUkExMDEwMTAyOwotCQkqZHJtX21vZGlmaWVyID0gMDsKLQkJYnJlYWs7Ci0J Y2FzZSBEUFVfUElYX0ZNVF9YUkdCXzIxMDEwMTA6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1B VF9CR1JYMTAxMDEwMjsKLQkJKmRybV9tb2RpZmllciA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRFBV X1BJWF9GTVRfQUJHUl8yMTAxMDEwOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfUkdCQTEw MTAxMDI7Ci0JCSpkcm1fbW9kaWZpZXIgPSAwOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1U X1hCR1JfMjEwMTAxMDoKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOwot CQkqZHJtX21vZGlmaWVyID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9CR1JBXzEw MTAxMDI6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDsKLQkJKmRybV9t b2RpZmllciA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfQkdSWF8xMDEwMTAyOgot CQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfWFJHQjIxMDEwMTA7Ci0JCSpkcm1fbW9kaWZpZXIg PSAwOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX1JHQkFfODg4OF9USUxFOgotCQkqZHJt X3BpeGZtdCA9IERSTV9GT1JNQVRfQUJHUjg4ODg7Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9S TUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfUkdCWF84ODg4 X1RJTEU6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9YQkdSODg4ODsKLQkJKmRybV9tb2Rp ZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElY X0ZNVF9CR1JBXzg4ODhfVElMRToKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0FSR0I4ODg4 OwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsK LQljYXNlIERQVV9QSVhfRk1UX0JHUlhfODg4OF9USUxFOgotCQkqZHJtX3BpeGZtdCA9IERSTV9G T1JNQVRfWFJHQjg4ODg7Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJ TEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfWV9DUkNCX0gyVjJfVElMRToKLQkJKmRy bV9waXhmbXQgPSBEUk1fRk9STUFUX05WMjE7Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFU X01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJf VElMRToKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX05WMTI7Ci0JCSpkcm1fbW9kaWZpZXIg PSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRf QVJHQl84ODg4X1RJTEU6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9CR1JBODg4ODsKLQkJ KmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKLQkJYnJlYWs7Ci0JY2Fz ZSBEUFVfUElYX0ZNVF9YUkdCXzg4ODhfVElMRToKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFU X0JHUlg4ODg4OwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwot CQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX0FCR1JfODg4OF9USUxFOgotCQkqZHJtX3BpeGZt dCA9IERSTV9GT1JNQVRfUkdCQTg4ODg7Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01P RF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfWEJHUl84ODg4X1RJTEU6 Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9SR0JYODg4ODsKLQkJKmRybV9tb2RpZmllciA9 IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9B UkdCXzIxMDEwMTBfVElMRToKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0JHUkExMDEwMTAy OwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsK LQljYXNlIERQVV9QSVhfRk1UX1hSR0JfMjEwMTAxMF9USUxFOgotCQkqZHJtX3BpeGZtdCA9IERS TV9GT1JNQVRfQkdSWDEwMTAxMDI7Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9R Q09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfQUJHUl8yMTAxMDEwX1RJTEU6 Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMjsKLQkJKmRybV9tb2RpZmll ciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZN VF9YQkdSXzIxMDEwMTBfVElMRToKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JHQlgxMDEw MTAyOwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVh azsKLQljYXNlIERQVV9QSVhfRk1UX0JHUkFfMTAxMDEwMl9USUxFOgotCQkqZHJtX3BpeGZtdCA9 IERSTV9GT1JNQVRfQVJHQjIxMDEwMTA7Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01P RF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfQkdSWF8xMDEwMTAyX1RJ TEU6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9YUkdCMjEwMTAxMDsKLQkJKmRybV9tb2Rp ZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElY X0ZNVF9SR0JBXzEwMTAxMDJfVUJXQzoKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0FCR1Iy MTAxMDEwOwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VE IHwKLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJ WF9GTVRfUkdCWF8xMDEwMTAyX1VCV0M6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9YQkdS MjEwMTAxMDsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NF RCB8Ci0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9Q SVhfRk1UX1lfQ0JDUl9IMlYyX1AwMTA6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9OVjEy OwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9EWDsKLQkJYnJlYWs7Ci0J Y2FzZSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwX1RJTEU6Ci0JCSpkcm1fcGl4Zm10ID0g RFJNX0ZPUk1BVF9OVjEyOwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9U SUxFIHwKLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX0RYOwotCQlicmVhazsKLQljYXNlIERQVV9Q SVhfRk1UX1lfQ0JDUl9IMlYyX1AwMTBfVUJXQzoKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFU X05WMTI7Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUQg fAotCQkJCURSTV9GT1JNQVRfTU9EX1FDT01fVElMRSB8Ci0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNP TV9EWDsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9UUDEwOgotCQkq ZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfTlYxMjsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JN QVRfTU9EX1FDT01fVElMRSB8Ci0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9EWCB8Ci0JCQkJRFJN X0ZPUk1BVF9NT0RfUUNPTV9USUdIVDsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NC Q1JfSDJWMl9UUDEwX1VCV0M6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9OVjEyOwotCQkq ZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VEIHwKLQkJCQlEUk1f Rk9STUFUX01PRF9RQ09NX1RJTEUgfAotCQkJCURSTV9GT1JNQVRfTU9EX1FDT01fRFggfAotCQkJ CURSTV9GT1JNQVRfTU9EX1FDT01fVElHSFQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURQVV9E RUJVRygiaW52YWxpZCB2NGwyIHBpeGVsIGZvcm1hdCAlYyVjJWMlY1xuIiwKLQkJCQlwaXhmbXQg Pj4gMCwgcGl4Zm10ID4+IDgsCi0JCQkJcGl4Zm10ID4+IDE2LCBwaXhmbXQgPj4gMjQpOwotCQly YyA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBk cHVfaHdfcm90X3RvX3Y0bDJfYnVmZmVyIC0gY29udmVydCBkcm0gYnVmZmVyIHRvIHY0bDIgYnVm ZmVyCi0gKiBAZHJtX3BpeGZtdDogcGl4ZWwgZm9ybWF0IGluIGRybSBmb3VyY2MKLSAqIEBkcm1f bW9kaWZpZXI6IHBpeGVsIGZvcm1hdCBtb2RpZmllcgotICogQGRybV9hZGRyOiBkcm0gYnVmZmVy IGFkZHJlc3MgcGVyIHBsYW5lCi0gKiBAZHJtX2xlbjogZHJtIGJ1ZmZlciBsZW5ndGggcGVyIHBs YW5lCi0gKiBAZHJtX3BsYW5lczogZHJtIGJ1ZmZlciBudW1iZXIgb2YgcGxhbmVzCi0gKiBAdjRs X2FkZHI6IHY0bDIgYnVmZmVyIGFkZHJlc3MgcGVyIHBsYW5lCi0gKiBAdjRsX2xlbjogdjRsMiBi dWZmZXIgbGVuZ3RoIHBlciBwbGFuZQotICogQHY0bF9wbGFuZXM6IHY0bDIgYnVmZmVyIG51bWJl ciBvZiBwbGFuZXMKLSAqLwotc3RhdGljIHZvaWQgZHB1X2h3X3JvdF90b192NGwyX2J1ZmZlcih1 MzIgZHJtX3BpeGZtdCwgdTY0IGRybV9tb2RpZmllciwKLQkJZG1hX2FkZHJfdCAqZHJtX2FkZHIs IHUzMiAqZHJtX2xlbiwgdTMyICpkcm1fcGxhbmVzLAotCQlkbWFfYWRkcl90ICp2NGxfYWRkciwg dTMyICp2NGxfbGVuLCB1MzIgKnY0bF9wbGFuZXMpCi17Ci0JaW50IGksIHRvdGFsX3NpemUgPSAw OwotCi0JZm9yIChpID0gMDsgaSA8IERQVV9ST1RBVE9SX0lOTElORV9QTEFORV9NQVg7IGkrKykg ewotCQl2NGxfYWRkcltpXSA9IGRybV9hZGRyW2ldOwotCQl2NGxfbGVuW2ldID0gZHJtX2xlbltp XTsKLQkJdG90YWxfc2l6ZSArPSBkcm1fbGVuW2ldOwotCQlEUFVfREVCVUcoImRybVslZF06JXBh ZC8leFxuIiwgaSwgJmRybV9hZGRyW2ldLCBkcm1fbGVuW2ldKTsKLQl9Ci0KLQlpZiAoRFBVX01P RElGSUVSX0lTX1VCV0MoZHJtX21vZGlmaWVyKSkgewotCQkvKiB2NGwyIGRyaXZlciB1c2VzIHBs YW5lWzBdIGFzIHNpbmdsZSB1YndjIGJ1ZmZlciBwbGFuZSAqLwotCQl2NGxfYWRkclswXSA9IGRy bV9hZGRyWzJdOwotCQl2NGxfbGVuWzBdID0gdG90YWxfc2l6ZTsKLQkJKnY0bF9wbGFuZXMgPSAx OwotCQlEUFVfREVCVUcoInY0bDJbMF06JXBhZC8leC8lZFxuIiwgJnY0bF9hZGRyWzBdLCB2NGxf bGVuWzBdLAotCQkJCSp2NGxfcGxhbmVzKTsKLQl9IGVsc2UgewotCQkqdjRsX3BsYW5lcyA9ICpk cm1fcGxhbmVzOwotCX0KLX0KLQotLyoqCi0gKiBkcHVfaHdfcm90X2NvbW1pdCAtIGNvbW1pdC9l eGVjdXRlIGdpdmVuIHJvdGF0b3IgY29tbWFuZAotICogQGh3OiBQb2ludGVyIHRvIHJvdGF0b3Ig aGFyZHdhcmUgZHJpdmVyCi0gKiBAZGF0YTogUG9pbnRlciB0byBjb21tYW5kIGRlc2NyaXB0b3IK LSAqIEBod19jbWQ6IHR5cGUgb2YgY29tbWFuZCB0byBiZSBleGVjdXRlZAotICogcmV0dXJuOiAw IGlmIHN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2h3 X3JvdF9jb21taXQoc3RydWN0IGRwdV9od19yb3QgKmh3LCBzdHJ1Y3QgZHB1X2h3X3JvdF9jbWQg KmRhdGEsCi0JCWVudW0gZHB1X2h3X3JvdF9jbWRfdHlwZSBod19jbWQpCi17Ci0Jc3RydWN0IGRw dV9yb3RhdG9yX2lubGluZV9jbWQgcm90X2NtZDsKLQllbnVtIGRwdV9yb3RhdG9yX2lubGluZV9j bWRfdHlwZSBjbWRfdHlwZTsKLQl2b2lkICpwcml2X2hhbmRsZSA9IE5VTEw7Ci0JaW50IHJjOwot Ci0JaWYgKCFodyB8fCAhZGF0YSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyXG4i KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbWVtc2V0KCZyb3RfY21kLCAwLCBzaXplb2Yo c3RydWN0IGRwdV9yb3RhdG9yX2lubGluZV9jbWQpKTsKLQotCXN3aXRjaCAoaHdfY21kKSB7Ci0J Y2FzZSBEUFVfSFdfUk9UX0NNRF9WQUxJREFURToKLQkJY21kX3R5cGUgPSBEUFVfUk9UQVRPUl9J TkxJTkVfQ01EX1ZBTElEQVRFOwotCQlicmVhazsKLQljYXNlIERQVV9IV19ST1RfQ01EX0NPTU1J VDoKLQkJY21kX3R5cGUgPSBEUFVfUk9UQVRPUl9JTkxJTkVfQ01EX0NPTU1JVDsKLQkJYnJlYWs7 Ci0JY2FzZSBEUFVfSFdfUk9UX0NNRF9TVEFSVDoKLQkJY21kX3R5cGUgPSBEUFVfUk9UQVRPUl9J TkxJTkVfQ01EX1NUQVJUOwotCQlwcml2X2hhbmRsZSA9IGRhdGEtPnByaXZfaGFuZGxlOwotCQli cmVhazsKLQljYXNlIERQVV9IV19ST1RfQ01EX0NMRUFOVVA6Ci0JCWNtZF90eXBlID0gRFBVX1JP VEFUT1JfSU5MSU5FX0NNRF9DTEVBTlVQOwotCQlwcml2X2hhbmRsZSA9IGRhdGEtPnByaXZfaGFu ZGxlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFVfRVJST1IoImludmFsaWQgaHcgcm90YXRv ciBjb21tYW5kICVkXG4iLCBod19jbWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyb3Rf Y21kLnNlcXVlbmNlX2lkID0gZGF0YS0+c2VxdWVuY2VfaWQ7Ci0Jcm90X2NtZC52aWRlb19tb2Rl ID0gZGF0YS0+dmlkZW9fbW9kZTsKLQlyb3RfY21kLmZwcyA9IGRhdGEtPmZwczsKLQotCS8qCi0J ICogRFJNIHJvdGF0aW9uIHByb3BlcnR5IGlzIHNwZWNpZmllZCBpbiBjb3VudGVyIGNsb2Nrd2lz ZSBkaXJlY3Rpb24KLQkgKiB3aGVyZWFzIHJvdGF0b3IgaC93IHJvdGF0ZXMgaW4gY2xvY2t3aXNl IGRpcmVjdGlvbi4KLQkgKiBDb252ZXJ0IHJvdGF0aW9uIHByb3BlcnR5IHRvIGNsb2Nrd2lzZSA5 MCBieSB0b2dnbGluZyBoL3YgZmxpcAotCSAqLwotCXJvdF9jbWQucm90OTAgPSBkYXRhLT5yb3Q5 MDsKLQlyb3RfY21kLmhmbGlwID0gZGF0YS0+cm90OTAgPyAhZGF0YS0+aGZsaXAgOiBkYXRhLT5o ZmxpcDsKLQlyb3RfY21kLnZmbGlwID0gZGF0YS0+cm90OTAgPyAhZGF0YS0+dmZsaXAgOiBkYXRh LT52ZmxpcDsKLQotCXJvdF9jbWQuY2xrcmF0ZSA9IGRhdGEtPmNsa3JhdGU7Ci0Jcm90X2NtZC5k YXRhX2J3ID0gMDsKLQlyb3RfY21kLnByZWZpbGxfYncgPSBkYXRhLT5wcmVmaWxsX2J3OwotCXJv dF9jbWQuc3JjX3dpZHRoID0gZGF0YS0+c3JjX3dpZHRoOwotCXJvdF9jbWQuc3JjX2hlaWdodCA9 IGRhdGEtPnNyY19oZWlnaHQ7Ci0Jcm90X2NtZC5zcmNfcmVjdF94ID0gZGF0YS0+c3JjX3JlY3Rf eDsKLQlyb3RfY21kLnNyY19yZWN0X3kgPSBkYXRhLT5zcmNfcmVjdF95OwotCXJvdF9jbWQuc3Jj X3JlY3RfdyA9IGRhdGEtPnNyY19yZWN0X3c7Ci0Jcm90X2NtZC5zcmNfcmVjdF9oID0gZGF0YS0+ c3JjX3JlY3RfaDsKLQlyb3RfY21kLmRzdF93cml0ZWJhY2sgPSBkYXRhLT5kc3Rfd3JpdGViYWNr OwotCXJvdF9jbWQuZHN0X3JlY3RfeCA9IGRhdGEtPmRzdF9yZWN0X3g7Ci0Jcm90X2NtZC5kc3Rf cmVjdF95ID0gZGF0YS0+ZHN0X3JlY3RfeTsKLQlyb3RfY21kLmRzdF9yZWN0X3cgPSBkYXRhLT5k c3RfcmVjdF93OwotCXJvdF9jbWQuZHN0X3JlY3RfaCA9IGRhdGEtPmRzdF9yZWN0X2g7Ci0Jcm90 X2NtZC5wcml2X2hhbmRsZSA9IHByaXZfaGFuZGxlOwotCi0JcmMgPSBkcHVfaHdfcm90X3RvX3Y0 bDJfcGl4Zm10KGRhdGEtPnNyY19waXhlbF9mb3JtYXQsCi0JCQlkYXRhLT5zcmNfbW9kaWZpZXIs ICZyb3RfY21kLnNyY19waXhmbXQpOwotCWlmIChyYykgewotCQlEUFVfRVJST1IoImludmFsaWQg c3JjIGZvcm1hdCAlZFxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogY2FsY3VsYXRl IHByZWZlcnJlZCBvdXRwdXQgZm9ybWF0IGR1cmluZyB2YWxpZGF0aW9uICovCi0JaWYgKGh3X2Nt ZCA9PSBEUFVfSFdfUk9UX0NNRF9WQUxJREFURSkgewotCQlyYyA9IGRwdV9yb3RhdG9yX2lubGlu ZV9nZXRfZHN0X3BpeGZtdChody0+Y2Fwcy0+cGRldiwKLQkJCQlyb3RfY21kLnNyY19waXhmbXQs ICZyb3RfY21kLmRzdF9waXhmbXQpOwotCQlpZiAocmMpIHsKLQkJCURQVV9FUlJPUigiaW52YWxp ZCBzcmMgZm9ybWF0ICVkXG4iLCByYyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQlyYyA9IGRw dV9od19yb3RfdG9fZHJtX3BpeGZtdChyb3RfY21kLmRzdF9waXhmbXQsCi0JCQkJJmRhdGEtPmRz dF9waXhlbF9mb3JtYXQsICZkYXRhLT5kc3RfbW9kaWZpZXIpOwotCQlpZiAocmMpIHsKLQkJCURQ VV9FUlJPUigiaW52YWxpZCBkc3QgZm9ybWF0ICVjJWMlYyVjXG4iLAotCQkJCQlyb3RfY21kLmRz dF9waXhmbXQgPj4gMCwKLQkJCQkJcm90X2NtZC5kc3RfcGl4Zm10ID4+IDgsCi0JCQkJCXJvdF9j bWQuZHN0X3BpeGZtdCA+PiAxNiwKLQkJCQkJcm90X2NtZC5kc3RfcGl4Zm10ID4+IDI0KTsKLQkJ CXJldHVybiByYzsKLQkJfQotCi0JCWRhdGEtPmRzdF9mb3JtYXQgPSBkcHVfZ2V0X2RwdV9mb3Jt YXRfZXh0KAotCQkJCWRhdGEtPmRzdF9waXhlbF9mb3JtYXQsIGRhdGEtPmRzdF9tb2RpZmllcik7 Ci0JCWlmICghZGF0YS0+ZHN0X2Zvcm1hdCkgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0 IGRzdCBmb3JtYXRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9IGVsc2UgewotCQly YyA9IGRwdV9od19yb3RfdG9fdjRsMl9waXhmbXQoZGF0YS0+ZHN0X3BpeGVsX2Zvcm1hdCwKLQkJ CQlkYXRhLT5kc3RfbW9kaWZpZXIsICZyb3RfY21kLmRzdF9waXhmbXQpOwotCQlpZiAocmMpIHsK LQkJCURQVV9FUlJPUigiaW52YWxpZCBkc3QgZm9ybWF0ICVkXG4iLCByYyk7Ci0JCQlyZXR1cm4g cmM7Ci0JCX0KLQotCQlkcHVfaHdfcm90X3RvX3Y0bDJfYnVmZmVyKGRhdGEtPnNyY19waXhlbF9m b3JtYXQsCi0JCQkJZGF0YS0+c3JjX21vZGlmaWVyLAotCQkJCWRhdGEtPnNyY19pb3ZhLCBkYXRh LT5zcmNfbGVuLAotCQkJCSZkYXRhLT5zcmNfcGxhbmVzLAotCQkJCXJvdF9jbWQuc3JjX2FkZHIs IHJvdF9jbWQuc3JjX2xlbiwKLQkJCQkmcm90X2NtZC5zcmNfcGxhbmVzKTsKLQotCQlkcHVfaHdf cm90X3RvX3Y0bDJfYnVmZmVyKGRhdGEtPmRzdF9waXhlbF9mb3JtYXQsCi0JCQkJZGF0YS0+ZHN0 X21vZGlmaWVyLAotCQkJCWRhdGEtPmRzdF9pb3ZhLCBkYXRhLT5kc3RfbGVuLAotCQkJCSZkYXRh LT5kc3RfcGxhbmVzLAotCQkJCXJvdF9jbWQuZHN0X2FkZHIsIHJvdF9jbWQuZHN0X2xlbiwKLQkJ CQkmcm90X2NtZC5kc3RfcGxhbmVzKTsKLQl9Ci0KLQkvKiBvbmx5IHByb2Nlc3MgYW55IGNvbW1h bmQgaWYgY2xpZW50IGlzIG1hc3RlciBvciBmb3IgdmFsaWRhdGlvbiAqLwotCWlmIChkYXRhLT5t YXN0ZXIgfHwgaHdfY21kID09IERQVV9IV19ST1RfQ01EX1ZBTElEQVRFKSB7Ci0JCURQVV9ERUJV RygiZGlzcGF0Y2ggc2VxOiVkIGNtZDolZFxuIiwgZGF0YS0+c2VxdWVuY2VfaWQsCi0JCQkJaHdf Y21kKTsKLQotCQlyYyA9IGRwdV9yb3RhdG9yX2lubGluZV9jb21taXQoaHctPnJvdF9jdHgsICZy b3RfY21kLCBjbWRfdHlwZSk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQotCQkvKiByZXR1 cm4gdG8gY2FsbGVyICovCi0JCWRhdGEtPnByaXZfaGFuZGxlID0gcm90X2NtZC5wcml2X2hhbmRs ZTsKLQl9IGVsc2UgewotCQlEUFVfREVCVUcoImJ5cGFzcyBzZXE6JWQgY21kOiVkXG4iLCBkYXRh LT5zZXF1ZW5jZV9pZCwgaHdfY21kKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBk cHVfaHdfcm90X2dldF9mb3JtYXRfY2FwcyAtIGdldCBwaXhlbCBmb3JtYXQgY2FwYWJpbGl0eQot ICogQGh3OiBQb2ludGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVyCi0gKiByZXR1cm46IFBv aW50ZXIgdG8gcGl4ZWwgZm9ybWF0IGNhcGFiaWxpdHkgYXJyYXk6IE5VTEwgb3RoZXJ3aXNlCi0g Ki8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCAqZHB1X2h3X3JvdF9n ZXRfZm9ybWF0X2NhcHMoCi0JCXN0cnVjdCBkcHVfaHdfcm90ICpodykKLXsKLQlpbnQgcmMsIGks IGosIGxlbjsKLQl1MzIgKnY0bF9waXhmbXRzOwotCXN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVk ICpkcm1fcGl4Zm10czsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JaWYgKCFo dyB8fCAhaHctPmNhcHMgfHwgIWh3LT5jYXBzLT5wZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxp ZCByb3RhdG9yIGh3XG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcGRldiA9IGh3LT5jYXBz LT5wZGV2OwotCi0JaWYgKGh3LT5mb3JtYXRfY2FwcykKLQkJcmV0dXJuIGh3LT5mb3JtYXRfY2Fw czsKLQotCWxlbiA9IGRwdV9yb3RhdG9yX2lubGluZV9nZXRfcGl4Zm10X2NhcHMocGRldiwgdHJ1 ZSwgTlVMTCwgMCk7Ci0JaWYgKGxlbiA8IDApIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBpeGZt dCBjYXBzICVkXG4iLCBsZW4pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQl2NGxfcGl4Zm10cyA9 IGtjYWxsb2MobGVuLCBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2NGxfcGl4Zm10 cykKLQkJZ290byBkb25lOwotCi0JZHB1X3JvdGF0b3JfaW5saW5lX2dldF9waXhmbXRfY2Fwcyhw ZGV2LCB0cnVlLCB2NGxfcGl4Zm10cywgbGVuKTsKLQotCS8qIGFsbG9jYXRlIG9uZSBtb3JlIHRv IGluZGljYXRlIHRlcm1pbmF0aW9uICovCi0JZHJtX3BpeGZtdHMgPSBremFsbG9jKChsZW4gKyAx KSAqIHNpemVvZihzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCksCi0JCQlHRlBfS0VSTkVMKTsK LQlpZiAoIWRybV9waXhmbXRzKQotCQlnb3RvIGRvbmU7Ci0KLQlmb3IgKGkgPSAwLCBqID0gMDsg aSA8IGxlbjsgaSsrKSB7Ci0JCXJjID0gZHB1X2h3X3JvdF90b19kcm1fcGl4Zm10KHY0bF9waXhm bXRzW2ldLAotCQkJCSZkcm1fcGl4Zm10c1tqXS5mb3VyY2NfZm9ybWF0LAotCQkJCSZkcm1fcGl4 Zm10c1tqXS5tb2RpZmllcik7Ci0JCWlmICghcmMpIHsKLQkJCURQVV9ERUJVRygiJWQ6IHZsNDI6 JWMlYyVjJWMgPT4gZHJtOiVjJWMlYyVjLzB4JWxseFxuIiwKLQkJCQlpLCB2NGxfcGl4Zm10c1tp XSA+PiAwLCB2NGxfcGl4Zm10c1tpXSA+PiA4LAotCQkJCXY0bF9waXhmbXRzW2ldID4+IDE2LCB2 NGxfcGl4Zm10c1tpXSA+PiAyNCwKLQkJCQlkcm1fcGl4Zm10c1tqXS5mb3VyY2NfZm9ybWF0ID4+ IDAsCi0JCQkJZHJtX3BpeGZtdHNbal0uZm91cmNjX2Zvcm1hdCA+PiA4LAotCQkJCWRybV9waXhm bXRzW2pdLmZvdXJjY19mb3JtYXQgPj4gMTYsCi0JCQkJZHJtX3BpeGZtdHNbal0uZm91cmNjX2Zv cm1hdCA+PiAyNCwKLQkJCQlkcm1fcGl4Zm10c1tqXS5tb2RpZmllcik7Ci0JCQlqKys7Ci0JCX0g ZWxzZSB7Ci0JCQlEUFVfREVCVUcoIiVkOiB2bDQyOiVjJWMlYyVjIG5vdCBtYXBwZWRcbiIsCi0J CQkJaSwgdjRsX3BpeGZtdHNbaV0gPj4gMCwgdjRsX3BpeGZtdHNbaV0gPj4gOCwKLQkJCQl2NGxf cGl4Zm10c1tpXSA+PiAxNiwgdjRsX3BpeGZtdHNbaV0gPj4gMjQpOwotCQl9Ci0JfQotCi0JaHct PmZvcm1hdF9jYXBzID0gZHJtX3BpeGZtdHM7Ci1kb25lOgotCWtmcmVlKHY0bF9waXhmbXRzKTsK LQotCXJldHVybiBody0+Zm9ybWF0X2NhcHM7Ci19Ci0KLS8qKgotICogZHB1X2h3X3JvdF9nZXRf ZG93bnNjYWxlX2NhcHMgLSBnZXQgc2NhbGluZyBjYXBhYmlsaXR5IHN0cmluZwotICogQGh3OiBQ b2ludGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVyCi0gKiByZXR1cm46IFBvaW50ZXIgdG8g Y2FwYWJpbGl0eSBzdHJpbmc6IE5VTEwgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBjb25zdCBjaGFy ICpkcHVfaHdfcm90X2dldF9kb3duc2NhbGVfY2FwcyhzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpCi17 Ci0JaW50IGxlbjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JaWYgKCFodyB8 fCAhaHctPmNhcHMgfHwgIWh3LT5jYXBzLT5wZGV2KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBy b3RhdG9yIGh3XG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcGRldiA9IGh3LT5jYXBzLT5w ZGV2OwotCi0JaWYgKGh3LT5kb3duc2NhbGVfY2FwcykKLQkJcmV0dXJuIGh3LT5kb3duc2NhbGVf Y2FwczsKLQotCWxlbiA9IGRwdV9yb3RhdG9yX2lubGluZV9nZXRfZG93bnNjYWxlX2NhcHMocGRl diwgTlVMTCwgMCk7Ci0JaWYgKGxlbiA8IDApIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHNjYWxp bmcgY2FwcyAlZFxuIiwgbGVuKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JLyogYWRkIG9uZSBm b3IgZW5kaW5nIHplcm8gKi8KLQlsZW4gKz0gMTsKLQlody0+ZG93bnNjYWxlX2NhcHMgPSBremFs bG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JZHB1X3JvdGF0b3JfaW5saW5lX2dldF9kb3duc2NhbGVf Y2FwcyhwZGV2LCBody0+ZG93bnNjYWxlX2NhcHMsIGxlbik7Ci0KLQlyZXR1cm4gaHctPmRvd25z Y2FsZV9jYXBzOwotfQotCi0vKioKLSAqIGRwdV9od19yb3RfZ2V0X2NhY2hlX3NpemUgLSBnZXQg Y2FjaGUgc2l6ZQotICogQGh3OiBQb2ludGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVyCi0g KiByZXR1cm46IHNpemUgb2YgY2FjaGUKLSAqLwotc3RhdGljIHNpemVfdCBkcHVfaHdfcm90X2dl dF9jYWNoZV9zaXplKHN0cnVjdCBkcHVfaHdfcm90ICpodykKLXsKLQlpZiAoIWh3IHx8ICFody0+ Y2FwcykgewotCQlEUFVfRVJST1IoImludmFsaWQgcm90YXRvciBod1xuIik7Ci0JCXJldHVybiAw OwotCX0KLQotCXJldHVybiBody0+Y2Fwcy0+c2xpY2Vfc2l6ZTsKLX0KLQotLyoqCi0gKiBkcHVf aHdfcm90X2dldF9tYXhsaW5ld2lkdGggLSBnZXQgbWF4aW11bSBsaW5lIHdpZHRoIG9mIHJvdGF0 b3IKLSAqIEBodzogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZlcgotICogcmV0dXJu OiBtYXhpbXVtIGxpbmUgd2lkdGgKLSAqLwotc3RhdGljIGludCBkcHVfaHdfcm90X2dldF9tYXhs aW5ld2lkdGgoc3RydWN0IGRwdV9od19yb3QgKmh3KQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXY7Ci0KLQlpZiAoIWh3IHx8ICFody0+Y2FwcyB8fCAhaHctPmNhcHMtPnBkZXYpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIHJvdGF0b3IgaHdcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0K LQlwZGV2ID0gaHctPmNhcHMtPnBkZXY7Ci0KLQlyZXR1cm4gZHB1X3JvdGF0b3JfaW5saW5lX2dl dF9tYXhsaW5ld2lkdGgocGRldik7Ci19Ci0KLS8qKgotICogX3NldHVwX3JvdF9vcHMgLSBzZXR1 cCByb3RhdG9yIG9wZXJhdGlvbnMKLSAqIEBvcHM6IFBvaW50ZXIgdG8gb3BlcmF0aW9uIHRhYmxl Ci0gKiBAZmVhdHVyZXM6IGF2YWlsYWJsZSBmZWF0dXJlIGJpdG1hc2sKLSAqIHJldHVybjogbm9u ZQotICovCi1zdGF0aWMgdm9pZCBfc2V0dXBfcm90X29wcyhzdHJ1Y3QgZHB1X2h3X3JvdF9vcHMg Km9wcywgdW5zaWduZWQgbG9uZyBmZWF0dXJlcykKLXsKLQlvcHMtPmNvbW1pdCA9IGRwdV9od19y b3RfY29tbWl0OwotCW9wcy0+Z2V0X2Zvcm1hdF9jYXBzID0gZHB1X2h3X3JvdF9nZXRfZm9ybWF0 X2NhcHM7Ci0Jb3BzLT5nZXRfZG93bnNjYWxlX2NhcHMgPSBkcHVfaHdfcm90X2dldF9kb3duc2Nh bGVfY2FwczsKLQlvcHMtPmdldF9jYWNoZV9zaXplID0gZHB1X2h3X3JvdF9nZXRfY2FjaGVfc2l6 ZTsKLQlvcHMtPmdldF9tYXhsaW5ld2lkdGggPSBkcHVfaHdfcm90X2dldF9tYXhsaW5ld2lkdGg7 Ci19Ci0KLS8qKgotICogZHB1X2h3X3JvdF9ibGtfc3RvcCAtIHN0b3Agcm90YXRvciBibG9jawot ICogQGh3X2JsazogUG9pbnRlciB0byBiYXNlIGhhcmR3YXJlIGJsb2NrCi0gKiByZXR1cm46IG5v bmUKLSAqLwotc3RhdGljIHZvaWQgZHB1X2h3X3JvdF9ibGtfc3RvcChzdHJ1Y3QgZHB1X2h3X2Js ayAqaHdfYmxrKQotewotCXN0cnVjdCBkcHVfaHdfcm90ICpod19yb3QgPSB0b19kcHVfaHdfcm90 KGh3X2Jsayk7Ci0KLQlEUFVfREVCVUcoInR5cGU6JWQgaWQ6JWRcbiIsIGh3X2Jsay0+dHlwZSwg aHdfYmxrLT5pZCk7Ci0KLQlkcHVfaHdfcm90X3N0b3AoaHdfcm90KTsKLX0KLQotLyoqCi0gKiBk cHVfaHdfcm90X2Jsa19zdGFydCAtIGFydCByb3RhdG9yIGJsb2NrCi0gKiBAaHdfYmxrOiBQb2lu dGVyIHRvIGJhc2UgaGFyZHdhcmUgYmxvY2sKLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJv ciBjb2RlIG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50IGRwdV9od19yb3RfYmxrX3N0YXJ0KHN0 cnVjdCBkcHVfaHdfYmxrICpod19ibGspCi17Ci0Jc3RydWN0IGRwdV9od19yb3QgKmh3X3JvdCA9 IHRvX2RwdV9od19yb3QoaHdfYmxrKTsKLQlpbnQgcmMgPSAwOwotCi0JRFBVX0RFQlVHKCJ0eXBl OiVkIGlkOiVkXG4iLCBod19ibGstPnR5cGUsIGh3X2Jsay0+aWQpOwotCi0JcmMgPSBkcHVfaHdf cm90X3N0YXJ0KGh3X3JvdCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZHB1 X2h3X2Jsa19vcHMgZHB1X2h3X3JvdF9vcHMgPSB7Ci0JLnN0YXJ0ID0gZHB1X2h3X3JvdF9ibGtf c3RhcnQsCi0JLnN0b3AgPSBkcHVfaHdfcm90X2Jsa19zdG9wLAotfTsKLQotLyoqCi0gKiBkcHVf aHdfcm90X2luaXQgLSBjcmVhdGUvaW5pdGlhbGl6ZSBnaXZlbiByb3RhdG9yIGluc3RhbmNlCi0g KiBAaWR4OiBpbmRleCBvZiBnaXZlbiByb3RhdG9yCi0gKiBAYWRkcjogaS9vIGFkZHJlc3MgbWFw cGluZwotICogQG06IFBvaW50ZXIgdG8gbWRzcyBjYXRhbG9nCi0gKiByZXR1cm46IFBvaW50ZXIg dG8gaGFyZHdhcmUgcm90YXRvciBkcml2ZXIgb2YgdGhlIGdpdmVuIGluc3RhbmNlCi0gKi8KLXN0 cnVjdCBkcHVfaHdfcm90ICpkcHVfaHdfcm90X2luaXQoZW51bSBkcHVfcm90IGlkeCwKLQkJdm9p ZCBfX2lvbWVtICphZGRyLAotCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKQotewotCXN0cnVjdCBk cHVfaHdfcm90ICpjOwotCXN0cnVjdCBkcHVfcm90X2NmZyAqY2ZnOwotCWludCByYzsKLQotCWMg PSBremFsbG9jKHNpemVvZigqYyksIEdGUF9LRVJORUwpOwotCWlmICghYykKLQkJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7Ci0KLQljZmcgPSBfcm90X29mZnNldChpZHgsIG0sIGFkZHIsICZjLT5o dyk7Ci0JaWYgKElTX0VSUihjZmcpKSB7Ci0JCVdBUk4oMSwgIlVuYWJsZSB0byBmaW5kIHJvdCBp ZHg9JWRcbiIsIGlkeCk7Ci0JCWtmcmVlKGMpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsK LQl9Ci0KLQkvKiBBc3NpZ24gb3BzICovCi0JYy0+aWR4ID0gaWR4OwotCWMtPmNhcHMgPSBjZmc7 Ci0JX3NldHVwX3JvdF9vcHMoJmMtPm9wcywgYy0+Y2Fwcy0+ZmVhdHVyZXMpOwotCXNucHJpbnRm KGMtPm5hbWUsIEFSUkFZX1NJWkUoYy0+bmFtZSksICJkcHVfcm90XyVkIiwgaWR4IC0gUk9UXzAp OwotCi0JcmMgPSBkcHVfaHdfYmxrX2luaXQoJmMtPmJhc2UsIERQVV9IV19CTEtfUk9ULCBpZHgs ICZkcHVfaHdfcm90X29wcyk7Ci0JaWYgKHJjKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIGlu aXQgaHcgYmxrICVkXG4iLCByYyk7Ci0JCWdvdG8gYmxrX2luaXRfZXJyb3I7Ci0JfQotCi0JcmV0 dXJuIGM7Ci0KLWJsa19pbml0X2Vycm9yOgotCWt6ZnJlZShjKTsKLQotCXJldHVybiBFUlJfUFRS KHJjKTsKLX0KLQotLyoqCi0gKiBkcHVfaHdfcm90X2Rlc3Ryb3kgLSBkZXN0cm95IGdpdmVuIGhh cmR3YXJlIHJvdGF0b3IgZHJpdmVyCi0gKiBAaHdfcm90OiBQb2ludGVyIHRvIGhhcmR3YXJlIHJv dGF0b3IgZHJpdmVyCi0gKiByZXR1cm46IG5vbmUKLSAqLwotdm9pZCBkcHVfaHdfcm90X2Rlc3Ry b3koc3RydWN0IGRwdV9od19yb3QgKmh3X3JvdCkKLXsKLQlpZiAoaHdfcm90KSB7Ci0JCWRwdV9o d19ibGtfZGVzdHJveSgmaHdfcm90LT5iYXNlKTsKLQkJa2ZyZWUoaHdfcm90LT5kb3duc2NhbGVf Y2Fwcyk7Ci0JCWtmcmVlKGh3X3JvdC0+Zm9ybWF0X2NhcHMpOwotCX0KLQlrZnJlZShod19yb3Qp OwotfQotCi1zdHJ1Y3QgZHB1X2h3X3JvdCAqZHB1X2h3X3JvdF9nZXQoc3RydWN0IGRwdV9od19y b3QgKmh3X3JvdCkKLXsKLQlzdHJ1Y3QgZHB1X2h3X2JsayAqaHdfYmxrID0gZHB1X2h3X2Jsa19n ZXQoaHdfcm90ID8gJmh3X3JvdC0+YmFzZSA6Ci0JCQlOVUxMLCBEUFVfSFdfQkxLX1JPVCwgLTEp OwotCi0JcmV0dXJuIElTX0VSUl9PUl9OVUxMKGh3X2JsaykgPyBOVUxMIDogdG9fZHB1X2h3X3Jv dChod19ibGspOwotfQotCi12b2lkIGRwdV9od19yb3RfcHV0KHN0cnVjdCBkcHVfaHdfcm90ICpo d19yb3QpCi17Ci0Jc3RydWN0IGRwdV9od19ibGsgKmh3X2JsayA9IGh3X3JvdCA/ICZod19yb3Qt PmJhc2UgOiBOVUxMOwotCi0JZHB1X2h3X2Jsa19wdXQoaHdfYmxrKTsKLX0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yb3QuaCBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19yb3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggZGYxNWVkNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfcm90LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyogQ29weXJp Z2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBfRFBVX0hXX1JPVF9ICi0jZGVmaW5lIF9E UFVfSFdfUk9UX0gKLQotI2luY2x1ZGUgImRwdV9od19jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1 X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdfdXRpbC5oIgotI2luY2x1ZGUgImRwdV9od19i bGsuaCIKLQotI2RlZmluZSBEUFVfSFdfUk9UX05BTUVfU0laRQk4MAotCi1zdHJ1Y3QgZHB1X2h3 X3JvdDsKLQotLyoqCi0gKiBlbnVtIGRwdV9od19yb3RfY21kX3R5cGUgLSB0eXBlIG9mIHJvdGF0 b3IgaGFyZHdhcmUgY29tbWFuZAotICogQERQVV9IV19ST1RfQ01EX1ZBTERJQVRFOiB2YWxpZGF0 ZSByb3RhdG9yIGNvbW1hbmQ7IGRvIG5vdCBjb21taXQKLSAqIEBEUFVfSFdfUk9UX0NNRF9DT01N SVQ6IGNvbW1pdC9leGVjdXRlIHJvdGF0b3IgY29tbWFuZAotICogQERQVV9IV19ST1RfQ01EX1NU QVJUOiBtZHAgaXMgcmVhZHkgdG8gc3RhcnQKLSAqIEBEUFVfSFdfUk9UX0NNRF9DTEVBTlVQOiBj bGVhbnVwIHJvdGF0b3IgY29tbWFuZCBhZnRlciBpdCBpcyBkb25lCi0gKi8KLWVudW0gZHB1X2h3 X3JvdF9jbWRfdHlwZSB7Ci0JRFBVX0hXX1JPVF9DTURfVkFMSURBVEUsCi0JRFBVX0hXX1JPVF9D TURfQ09NTUlULAotCURQVV9IV19ST1RfQ01EX1NUQVJULAotCURQVV9IV19ST1RfQ01EX0NMRUFO VVAsCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfaHdfcm90X2NtZCAtIGRlZmluaXRpb24gb2Yg aGFyZHdhcmUgcm90YXRpb24gY29tbWFuZAotICogQG1hc3RlcjogdHJ1ZSBpZiBjbGllbnQgaXMg dGhlIG1hc3RlciBpbiBzb3VyY2Ugc3BsaXQgaW5saW5lIHJvdGF0aW9uCi0gKiBAc2VxdWVuY2Vf aWQ6IGNvbW1hbmQgc2VxdWVuY2UgaWRlbnRpZmllcgotICogQGZwczogZnJhbWUgcmF0ZSBvZiB0 aGUgc3RyZWFtIGluIGZyYW1lIHBlciBzZWNvbmQKLSAqIEByb3Q5MDogdHJ1ZSBpZiByb3RhdGlv biA5MCBpbiBjb3VudGVyIGNsb2Nrd2lzZSBpcyByZXF1aXJlZAotICogQGhmbGlwOiB0cnVlIGlm IGhvcml6b250YWwgZmxpcCBpcyByZXF1aXJlZCBwcmlvciB0byByb3RhdGlvbgotICogQHZmbGlw OiB0cnVlIGlmIHZlcnRpY2FsIGZsaXAgaXMgcmVxdWlyZWQgcHJpb3IgdG8gcm90YXRpb24KLSAq IEB2aWRlb19tb2RlOiB0cnVlIGlmIHJvdGF0b3IgaXMgZmVlZGluZyBpbnRvIHZpZGVvIGludGVy ZmFjZQotICogQGNsa3JhdGUgOiBjbG9jayByYXRlIGluIEh6Ci0gKiBAcHJlZmlsbF9idzogcHJl ZmlsbCBiYW5kd2lkdGggaW4gQnBzICh2aWRlbyBtb2RlIG9ubHkpCi0gKiBAc3JjX2lvdmE6IHNv dXJjZSBpL28gdmlydHVhbCBhZGRyZXNzCi0gKiBAc3JjX2xlbjogc291cmNlIGkvbyBidWZmZXIg bGVuZ3RoCi0gKiBAc3JjX3BsYW5lczogc291cmNlIHBsYW5lIG51bWJlcgotICogQHNyY19mb3Jt YXQ6IHBvaW50ZXIgdG8gc291cmNlIGRwdSBwaXhlbCBmb3JtYXQKLSAqIEBzcmNfcGl4ZWxfZm9y bWF0OiBzb3VyY2UgcGl4ZWwgZm9ybWF0IGluIGRybSBmb3VyY2MKLSAqIEBzcmNfbW9kaWZpZXI6 IHNvdXJjZSBwaXhlbCBmb3JtYXQgbW9kaWZpZXIKLSAqIEBzcmNfd2lkdGg6IHNvdXJjZSB3aWR0 aCBpbiBwaXhlbAotICogQHNyY19oZWlnaHQ6IHNvdXJjZSBoZWlnaHQgaW4gcGl4ZWwKLSAqIEBz cmNfcmVjdF94OiBzb3VyY2UgcmVjdGFuZ2xlIHggY29vcmRpbmF0ZQotICogQHNyY19yZWN0X3k6 IHNvdXJjZSByZWN0YW5nbGUgeSBjb29yZGluYXRlCi0gKiBAc3JjX3JlY3Rfdzogc291cmNlIHJl Y3RhbmdsZSB3aWR0aAotICogQHNyY19yZWN0X2g6IHNvdXJjZSByZWN0YW5nbGUgaGVpZ2h0Ci0g KiBAZHN0X3dyaXRlYmFjazogdHJ1ZSBpZiB3cml0ZWJhY2sgb2Ygcm90YXRlZCBvdXRwdXQgaXMg cmVxdWlyZWQKLSAqIEBkc3RfaW92YTogZGVzdGluYXRpb24gaS9vIHZpcnR1YWwgYWRkcmVzcwot ICogQGRzdF9sZW46IGRlc3RpbmF0aW9uIGkvbyBidWZmZXIgbGVuZ3RoCi0gKiBAZHN0X3BsYW5l czogZGVzdGluYXRpb24gcGxhbmUgbnVtYmVyCi0gKiBAZHN0X2Zvcm1hdDogcG9pbnRlciB0byBk ZXN0aW5hdGlvbiBkcHUgcGl4ZWwgZm9ybWF0IChpbnB1dC9vdXRwdXQpCi0gKiBAZHN0X3BpeGVs X2Zvcm1hdDogZGVzdGluYXRpb24gcGl4ZWwgZm9ybWF0IGluIGRybSBmb3VyY2MgKGlucHV0L291 dHB1dCkKLSAqIEBkc3RfbW9kaWZpZXI6IGRlc3RpbmF0aW9uIHBpeGVsIGZvcm1hdCBtb2RpZmll ciAoaW5wdXQvb3V0cHV0KQotICogQGRzdF9yZWN0X3g6IGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB4 IGNvb3JkaW5hdGUKLSAqIEBkc3RfcmVjdF95OiBkZXN0aW5hdGlvbiByZWN0YW5nbGUgeSBjb29y ZGluYXRlCi0gKiBAZHN0X3JlY3RfdzogZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpZHRoCi0gKiBA ZHN0X3JlY3RfaDogZGVzdGluYXRpb24gcmVjdGFuZ2xlIGhlaWdodAotICogQHByaXZfaGFuZGxl OiBwcml2YXRlIGhhbmRsZSBvZiByb3RhdG9yIGRyaXZlciAob3V0cHV0KQotICovCi1zdHJ1Y3Qg ZHB1X2h3X3JvdF9jbWQgewotCWJvb2wgbWFzdGVyOwotCXUzMiBzZXF1ZW5jZV9pZDsKLQl1MzIg ZnBzOwotCWJvb2wgcm90OTA7Ci0JYm9vbCBoZmxpcDsKLQlib29sIHZmbGlwOwotCWJvb2wgdmlk ZW9fbW9kZTsKLQl1NjQgY2xrcmF0ZTsKLQl1NjQgcHJlZmlsbF9idzsKLQlkbWFfYWRkcl90IHNy Y19pb3ZhWzRdOwotCXUzMiBzcmNfbGVuWzRdOwotCXUzMiBzcmNfcGxhbmVzOwotCWNvbnN0IHN0 cnVjdCBkcHVfZm9ybWF0ICpzcmNfZm9ybWF0OwotCXUzMiBzcmNfcGl4ZWxfZm9ybWF0OwotCXU2 NCBzcmNfbW9kaWZpZXI7Ci0JdTMyIHNyY193aWR0aDsKLQl1MzIgc3JjX2hlaWdodDsKLQl1MzIg c3JjX3N0cmlkZTsKLQl1MzIgc3JjX3JlY3RfeDsKLQl1MzIgc3JjX3JlY3RfeTsKLQl1MzIgc3Jj X3JlY3RfdzsKLQl1MzIgc3JjX3JlY3RfaDsKLQlib29sIGRzdF93cml0ZWJhY2s7Ci0JZG1hX2Fk ZHJfdCBkc3RfaW92YVs0XTsKLQl1MzIgZHN0X2xlbls0XTsKLQl1MzIgZHN0X3BsYW5lczsKLQlj b25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqZHN0X2Zvcm1hdDsKLQl1MzIgZHN0X3BpeGVsX2Zvcm1h dDsKLQl1NjQgZHN0X21vZGlmaWVyOwotCXUzMiBkc3RfcmVjdF94OwotCXUzMiBkc3RfcmVjdF95 OwotCXUzMiBkc3RfcmVjdF93OwotCXUzMiBkc3RfcmVjdF9oOwotCXZvaWQgKnByaXZfaGFuZGxl OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X3JvdF9vcHMgLSBpbnRlcmZhY2UgdG8gdGhl IHJvdGF0b3IgaHcgZHJpdmVyIGZ1bmN0aW9ucwotICogQXNzdW1wdGlvbiBpcyB0aGVzZSBmdW5j dGlvbnMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY2xvY2tzIGFyZSBlbmFibGVkCi0gKi8KLXN0cnVj dCBkcHVfaHdfcm90X29wcyB7Ci0JaW50ICgqY29tbWl0KShzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcs IHN0cnVjdCBkcHVfaHdfcm90X2NtZCAqZGF0YSwKLQkJCWVudW0gZHB1X2h3X3JvdF9jbWRfdHlw ZSBjbWQpOwotCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0X2V4dGVuZGVkICooKmdldF9mb3JtYXRf Y2FwcykoCi0JCQlzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpOwotCWNvbnN0IGNoYXIgKigqZ2V0X2Rv d25zY2FsZV9jYXBzKShzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpOwotCXNpemVfdCAoKmdldF9jYWNo ZV9zaXplKShzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpOwotCWludCAoKmdldF9tYXhsaW5ld2lkdGgp KHN0cnVjdCBkcHVfaHdfcm90ICpodyk7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfaHdfcm90 IDogUk9UIGRyaXZlciBvYmplY3QKLSAqIEBiYXNlOiBodyBibG9jayBiYXNlIG9iamVjdAotICog QGh3OiBoYXJkd2FyZSBhZGRyZXNzIG1hcAotICogQGlkeDogaW5zdGFuY2UgaW5kZXgKLSAqIEBj YXBzOiBjYXBhYmlsaXRpZXMgYml0bWFzawotICogQG9wczogb3BlcmF0aW9uIHRhYmxlCi0gKiBA cm90X2N0eDogcG9pbnRlciB0byBwcml2YXRlIHJvdGF0b3IgY29udGV4dAotICogQGZvcm1hdF9j YXBzOiBwb2ludGVyIHRvIHBpeGVsIGZvcm1hdCBjYXBhYmlsaXR5ICBhcnJheQotICogQGRvd25z Y2FsZV9jYXBzOiBwb2ludGVyIHRvIHNjYWxpbmcgY2FwYWJpbGl0eSBzdHJpbmcKLSAqLwotc3Ry dWN0IGRwdV9od19yb3QgewotCXN0cnVjdCBkcHVfaHdfYmxrIGJhc2U7Ci0Jc3RydWN0IGRwdV9o d19ibGtfcmVnX21hcCBodzsKLQljaGFyIG5hbWVbRFBVX0hXX1JPVF9OQU1FX1NJWkVdOwotCWlu dCBpZHg7Ci0JY29uc3Qgc3RydWN0IGRwdV9yb3RfY2ZnICpjYXBzOwotCXN0cnVjdCBkcHVfaHdf cm90X29wcyBvcHM7Ci0Jdm9pZCAqcm90X2N0eDsKLQlzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRl ZCAqZm9ybWF0X2NhcHM7Ci0JY2hhciAqZG93bnNjYWxlX2NhcHM7Ci19OwotCi0vKioKLSAqIGRw dV9od19yb3RfaW5pdCAtIGluaXRpYWxpemUgYW5kIHJldHVybiByb3RhdG9yIGh3IGRyaXZlciBv YmplY3QuCi0gKiBAaWR4OiAgd2JfcGF0aCBpbmRleCBmb3Igd2hpY2ggZHJpdmVyIG9iamVjdCBp cyByZXF1aXJlZAotICogQGFkZHI6IG1hcHBlZCByZWdpc3RlciBpbyBhZGRyZXNzIG9mIE1EUAot ICogQG0gOiAgIHBvaW50ZXIgdG8gbWRzcyBjYXRhbG9nIGRhdGEKLSAqLwotc3RydWN0IGRwdV9o d19yb3QgKmRwdV9od19yb3RfaW5pdChlbnVtIGRwdV9yb3QgaWR4LAotCQl2b2lkIF9faW9tZW0g KmFkZHIsCi0JCXN0cnVjdCBkcHVfbWRzc19jZmcgKm0pOwotCi0vKioKLSAqIGRwdV9od19yb3Rf ZGVzdHJveSAtIGRlc3Ryb3kgcm90YXRvciBodyBkcml2ZXIgb2JqZWN0LgotICogQGh3X3JvdDog IFBvaW50ZXIgdG8gcm90YXRvciBodyBkcml2ZXIgb2JqZWN0Ci0gKi8KLXZvaWQgZHB1X2h3X3Jv dF9kZXN0cm95KHN0cnVjdCBkcHVfaHdfcm90ICpod19yb3QpOwotCi0vKioKLSAqIHRvX2RwdV9o d19yb3QgLSBjb252ZXJ0IGJhc2Ugb2JqZWN0IGRwdV9od19iYXNlIHRvIHJvdGF0b3Igb2JqZWN0 Ci0gKiBAaHc6IFBvaW50ZXIgdG8gYmFzZSBoYXJkd2FyZSBibG9jawotICogcmV0dXJuOiBQb2lu dGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgYmxvY2sKLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qg ZHB1X2h3X3JvdCAqdG9fZHB1X2h3X3JvdChzdHJ1Y3QgZHB1X2h3X2JsayAqaHcpCi17Ci0JcmV0 dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IGRwdV9od19yb3QsIGJhc2UpOwotfQotCi0vKioK LSAqIGRwdV9od19yb3RfZ2V0IC0gZ2V0IG5leHQgYXZhaWxhYmxlIGhhcmR3YXJlIHJvdGF0b3Is IG9yIGluY3JlbWVudCByZWZlcmVuY2UKLSAqCWNvdW50IGlmIGhhcmR3YXJlIHJvdGF0b3IgcHJv dmlkZWQKLSAqIEBod19yb3Q6IFBvaW50ZXIgdG8gaGFyZHdhcmUgcm90YXRvcgotICogcmV0dXJu OiBQb2ludGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgYmxvY2sgaWYgc3VjY2VzczsgTlVMTCBvdGhl cndpc2UKLSAqLwotc3RydWN0IGRwdV9od19yb3QgKmRwdV9od19yb3RfZ2V0KHN0cnVjdCBkcHVf aHdfcm90ICpod19yb3QpOwotCi0vKioKLSAqIGRwdV9od19yb3RfcHV0IC0gcHV0IHRoZSBnaXZl biBoYXJkd2FyZSByb3RhdG9yCi0gKiBAaHdfcm90OiBQb2ludGVyIHRvIGhhcmR3YXJlIHJvdGF0 b3IKLSAqIHJldHVybjogbm9uZQotICovCi12b2lkIGRwdV9od19yb3RfcHV0KHN0cnVjdCBkcHVf aHdfcm90ICpod19yb3QpOwotCi0jZW5kaWYgLypfRFBVX0hXX1JPVF9IICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuYwppbmRleCAzZmVjZjMzLi41MzQzMTg0 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMKQEAgLTEw MiwxMSArMTAyLDYgQEAKICNkZWZpbmUgU1NQUF9RT1NfQ1RSTF9DUkVRX1ZCTEFOS19NQVNLICAg ICAweDMKICNkZWZpbmUgU1NQUF9RT1NfQ1RSTF9DUkVRX1ZCTEFOS19PRkYgICAgICAyMAogCi0j ZGVmaW5lIFNTUFBfU1lTX0NBQ0hFX01PREUgICAgICAgICAgICAgICAgMHgxQkMKLSNkZWZpbmUg U1NQUF9TQlVGX1NUQVRVU19QTEFORTAgICAgICAgICAgICAweDFDMAotI2RlZmluZSBTU1BQX1NC VUZfU1RBVFVTX1BMQU5FMSAgICAgICAgICAgIDB4MUM0Ci0jZGVmaW5lIFNTUFBfU0JVRl9TVEFU VVNfUExBTkVfRU1QVFkgICAgICAgQklUKDE2KQotCiAvKiBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQy ICovCiAjZGVmaW5lIFNDQUxFX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgMHgwNAogI2Rl ZmluZSBDT01QMF8zX1BIQVNFX1NURVBfWCAgICAgICAgICAgICAgIDB4MTAKQEAgLTc1OSw0NSAr NzU0LDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBfcW9zX2N0cmwoc3RydWN0IGRw dV9od19waXBlICpjdHgsCiAJRFBVX1JFR19XUklURSgmY3R4LT5odywgU1NQUF9RT1NfQ1RSTCAr IGlkeCwgcW9zX2N0cmwpOwogfQogCi1zdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9zZXR1cF9zeXNf Y2FjaGUoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCXN0cnVjdCBkcHVfaHdfcGlwZV9zY19j ZmcgKmNmZykKLXsKLQl1MzIgaWR4LCB2YWw7Ci0KLQlpZiAoX3NzcHBfc3ViYmxrX29mZnNldChj dHgsIERQVV9TU1BQX1NSQywgJmlkeCkpCi0JCXJldHVybjsKLQotCWlmICghY2ZnKQotCQlyZXR1 cm47Ci0KLQl2YWwgPSAoKGNmZy0+b3BfbW9kZSAmIDB4MykgPDwgMTgpIHwKLQkJCSgoY2ZnLT5y ZF9lbiAmIDB4MSkgPDwgMTUpIHwKLQkJCSgoY2ZnLT5yZF9zY2lkICYgMHgxZikgPDwgOCkgfAot CQkJKChjZmctPnJkX25vYWxsb2NhdGUgJiAweDEpIDw8IDQpIHwKLQkJCSgoY2ZnLT5yZF9vcF90 eXBlICYgMHhmKSA8PCAwKTsKLQotCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIFNTUFBfU1lTX0NB Q0hFX01PREUgKyBpZHgsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9od19zc3BwX2dldF9z YnVmX3N0YXR1cyhzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJc3RydWN0IGRwdV9od19waXBl X3NidWZfc3RhdHVzICpzdGF0dXMpCi17Ci0JdTMyIGlkeCwgdmFsOwotCi0JaWYgKF9zc3BwX3N1 YmJsa19vZmZzZXQoY3R4LCBEUFVfU1NQUF9TUkMsICZpZHgpKQotCQlyZXR1cm47Ci0KLQlpZiAo IXN0YXR1cykKLQkJcmV0dXJuOwotCi0JdmFsID0gRFBVX1JFR19SRUFEKCZjdHgtPmh3LCBTU1BQ X1NCVUZfU1RBVFVTX1BMQU5FMCArIGlkeCk7Ci0Jc3RhdHVzLT5lbXB0eVswXSA9IHZhbCAmIFNT UFBfU0JVRl9TVEFUVVNfUExBTkVfRU1QVFkgPyB0cnVlIDogZmFsc2U7Ci0Jc3RhdHVzLT5yZF9w dHJbMF0gPSB2YWwgJiAweGZmZmY7Ci0JdmFsID0gRFBVX1JFR19SRUFEKCZjdHgtPmh3LCBTU1BQ X1NCVUZfU1RBVFVTX1BMQU5FMSArIGlkeCk7Ci0Jc3RhdHVzLT5lbXB0eVsxXSA9IHZhbCAmIFNT UFBfU0JVRl9TVEFUVVNfUExBTkVfRU1QVFkgPyB0cnVlIDogZmFsc2U7Ci0Jc3RhdHVzLT5yZF9w dHJbMV0gPSB2YWwgJiAweGZmZmY7Ci19Ci0KIHN0YXRpYyB2b2lkIGRwdV9od19zc3BwX3NldHVw X3RzX3ByZWZpbGwoc3RydWN0IGRwdV9od19waXBlICpjdHgsCiAJCXN0cnVjdCBkcHVfaHdfcGlw ZV90c19jZmcgKmNmZywKIAkJZW51bSBkcHVfc3NwcF9tdWx0aXJlY3RfaW5kZXggaW5kZXgpCkBA IC05MzEsMTEgKzg4Nyw2IEBAIHN0YXRpYyB2b2lkIF9zZXR1cF9sYXllcl9vcHMoc3RydWN0IGRw dV9od19waXBlICpjLAogCQkJCWRwdV9zZXR1cF9waXBlX3BhX21lbWNvbF92MV83OwogCX0KIAot CWlmICh0ZXN0X2JpdChEUFVfU1NQUF9TQlVGLCAmZmVhdHVyZXMpKSB7Ci0JCWMtPm9wcy5zZXR1 cF9zeXNfY2FjaGUgPSBkcHVfaHdfc3NwcF9zZXR1cF9zeXNfY2FjaGU7Ci0JCWMtPm9wcy5nZXRf c2J1Zl9zdGF0dXMgPSBkcHVfaHdfc3NwcF9nZXRfc2J1Zl9zdGF0dXM7Ci0JfQotCiAJaWYgKHRl c3RfYml0KERQVV9TU1BQX0NEUCwgJmZlYXR1cmVzKSkKIAkJYy0+b3BzLnNldHVwX2NkcCA9IGRw dV9od19zc3BwX3NldHVwX2NkcDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19zc3BwLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfc3NwcC5oCmluZGV4IGRlOTcxZjEuLmEzMmVjYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuaApAQCAtMjI0LDQxICsyMjQsNiBAQCBzdHJ1Y3Qg ZHB1X2h3X3BpcGVfY2RwX2NmZyB7CiB9OwogCiAvKioKLSAqIGVudW0gc3lzdGVtIGNhY2hlIHJv dGF0aW9uIG9wZXJhdGlvbiBtb2RlCi0gKi8KLWVudW0gewotCURQVV9QSVBFX1NDX09QX01PREVf T0ZGTElORSwKLQlEUFVfUElQRV9TQ19PUF9NT0RFX0lOTElORV9TSU5HTEUsCi0JRFBVX1BJUEVf U0NfT1BfTU9ERV9JTkxJTkVfTEVGVCwKLQlEUFVfUElQRV9TQ19PUF9NT0RFX0lOTElORV9SSUdI VCwKLX07Ci0KLS8qKgotICogZW51bSBzeXN0ZW0gY2FjaGUgcmVhZCBvcGVyYXRpb24gdHlwZQot ICovCi1lbnVtIHsKLQlEUFVfUElQRV9TQ19SRF9PUF9UWVBFX0NBQ0hFQUJMRSwKLQlEUFVfUElQ RV9TQ19SRF9PUF9UWVBFX0lOVkFMSURBVEUsCi0JRFBVX1BJUEVfU0NfUkRfT1BfVFlQRV9FVklD VElPTiwKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9od19waXBlX3NjX2NmZyAtIHN5c3RlbSBj YWNoZSBjb25maWd1cmF0aW9uCi0gKiBAb3BfbW9kZTogcm90YXRpb24gb3BlcmF0aW5nIG1vZGUK LSAqIEByZF9lbjogc3lzdGVtIGNhY2hlIHJlYWQgZW5hYmxlCi0gKiBAcmRfc2NpZDogc3lzdGVt IGNhY2hlIHJlYWQgYmxvY2sgaWQKLSAqIEByZF9ub2FsbG9jYXRlOiBzeXN0ZW0gY2FjaGUgcmVh ZCBubyBhbGxvY2F0ZSBhdHRyaWJ1dGUKLSAqIEByZF9vcF90eXBlOiBzeXN0ZW0gY2FjaGUgcmVh ZCBvcGVyYXRpb24gdHlwZQotICovCi1zdHJ1Y3QgZHB1X2h3X3BpcGVfc2NfY2ZnIHsKLQl1MzIg b3BfbW9kZTsKLQlib29sIHJkX2VuOwotCXUzMiByZF9zY2lkOwotCWJvb2wgcmRfbm9hbGxvY2F0 ZTsKLQl1MzIgcmRfb3BfdHlwZTsKLX07Ci0KLS8qKgogICogc3RydWN0IGRwdV9od19waXBlX3Rz X2NmZyAtIHRyYWZmaWMgc2hhcGVyIGNvbmZpZ3VyYXRpb24KICAqIEBzaXplOiBzaXplIHRvIHBy ZWZpbGwgaW4gYnl0ZXMsIG9yIHplcm8gdG8gZGlzYWJsZQogICogQHRpbWU6IHRpbWUgdG8gcHJl ZmlsbCBpbiB1c2VjLCBvciB6ZXJvIHRvIGRpc2FibGUKQEAgLTI2OSwyMSArMjM0LDYgQEAgc3Ry dWN0IGRwdV9od19waXBlX3RzX2NmZyB7CiB9OwogCiAvKioKLSAqIE1heGltdW0gbnVtYmVyIG9m IHN0cmVhbSBidWZmZXIgcGxhbmUKLSAqLwotI2RlZmluZSBEUFVfUElQRV9TQlVGX1BMQU5FX05V TQkyCi0KLS8qKgotICogc3RydWN0IGRwdV9od19waXBlX3NidWZfc3RhdHVzIC0gc3RyZWFtIGJ1 ZmZlciBzdGF0dXMKLSAqIEBlbXB0eTogaW5kaWNhdGUgaWYgc3RyZWFtIGJ1ZmZlciBpcyBlbXB0 eSBvZiBub3QKLSAqIEByZF9wdHI6IGN1cnJlbnQgcmVhZCBwb2ludGVyIG9mIHN0cmVhbSBidWZm ZXIKLSAqLwotc3RydWN0IGRwdV9od19waXBlX3NidWZfc3RhdHVzIHsKLQlib29sIGVtcHR5W0RQ VV9QSVBFX1NCVUZfUExBTkVfTlVNXTsKLQl1MzIgcmRfcHRyW0RQVV9QSVBFX1NCVUZfUExBTkVf TlVNXTsKLX07Ci0KLS8qKgogICogc3RydWN0IGRwdV9od19zc3BwX29wcyAtIGludGVyZmFjZSB0 byB0aGUgU1NQUCBIdyBkcml2ZXIgZnVuY3Rpb25zCiAgKiBDYWxsZXIgbXVzdCBjYWxsIHRoZSBp bml0IGZ1bmN0aW9uIHRvIGdldCB0aGUgcGlwZSBjb250ZXh0IGZvciBlYWNoIHBpcGUKICAqIEFz c3VtcHRpb24gaXMgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNsb2NrcyBh cmUgZW5hYmxlZApAQCAtNDcyLDIyICs0MjIsNiBAQCBzdHJ1Y3QgZHB1X2h3X3NzcHBfb3BzIHsK IAl1MzIgKCpnZXRfc2NhbGVyX3Zlcikoc3RydWN0IGRwdV9od19waXBlICpjdHgpOwogCiAJLyoq Ci0JICogc2V0dXBfc3lzX2NhY2hlIC0gc2V0dXAgc3lzdGVtIGNhY2hlIGNvbmZpZ3VyYXRpb24K LQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBjZmc6IFBvaW50ZXIgdG8g c3lzdGVtIGNhY2hlIGNvbmZpZ3VyYXRpb24KLQkgKi8KLQl2b2lkICgqc2V0dXBfc3lzX2NhY2hl KShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJCXN0cnVjdCBkcHVfaHdfcGlwZV9zY19jZmcg KmNmZyk7Ci0KLQkvKioKLQkgKiBnZXRfc2J1Zl9zdGF0dXMgLSBnZXQgc3RyZWFtIGJ1ZmZlciBz dGF0dXMKLQkgKiBAY3R4OiBQb2ludGVyIHRvIHBpcGUgY29udGV4dAotCSAqIEBzdGF0dXM6IFBv aW50ZXIgdG8gc3RyZWFtIGJ1ZmZlciBzdGF0dXMKLQkgKi8KLQl2b2lkICgqZ2V0X3NidWZfc3Rh dHVzKShzdHJ1Y3QgZHB1X2h3X3BpcGUgKmN0eCwKLQkJCXN0cnVjdCBkcHVfaHdfcGlwZV9zYnVm X3N0YXR1cyAqc3RhdHVzKTsKLQotCS8qKgogCSAqIHNldHVwX3RzX3ByZWZpbGwgLSBzZXR1cCBw cmVmaWxsIHRyYWZmaWMgc2hhcGVyCiAJICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQK IAkgKiBAY2ZnOiBQb2ludGVyIHRvIHRyYWZmaWMgc2hhcGVyIGNvbmZpZ3VyYXRpb24KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKaW5kZXggNzc5ZDM1ZC4uYzY1N2U2 YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKQEAgLTM1LDcg KzM1LDYgQEAKICNpbmNsdWRlICJkcHVfdmJpZi5oIgogI2luY2x1ZGUgImRwdV9wbGFuZS5oIgog I2luY2x1ZGUgImRwdV9jb2xvcl9wcm9jZXNzaW5nLmgiCi0jaW5jbHVkZSAiZHB1X2h3X3JvdC5o IgogCiBzdGF0aWMgYm9vbCBzdXNwZW5kX2JsYW5rID0gdHJ1ZTsKIG1vZHVsZV9wYXJhbShzdXNw ZW5kX2JsYW5rLCBib29sLCAwNDAwKTsKQEAgLTk5LDEwICs5OCw3IEBAIGVudW0gZHB1X3BsYW5l X3FvcyB7CiAgKiBAY3NjX3B0cjogUG9pbnRzIHRvIGRwdV9jc2NfY2ZnIHN0cnVjdHVyZSB0byB1 c2UgZm9yIGN1cnJlbnQKICAqIEBtcGxhbmVfbGlzdDogTGlzdCBvZiBtdWx0aXJlY3QgcGxhbmVz IG9mIHRoZSBzYW1lIHBpcGUKICAqIEBjYXRhbG9nOiBQb2ludHMgdG8gZHB1IGNhdGFsb2cgc3Ry dWN0dXJlCi0gKiBAc2J1Zl9tb2RlOiBmb3JjZSBzdHJlYW0gYnVmZmVyIG1vZGUgaWYgc2V0Ci0g KiBAc2J1Zl93cml0ZWJhY2s6IGZvcmNlIHN0cmVhbSBidWZmZXIgd3JpdGViYWNrIGlmIHNldAog ICogQHJldmFsaWRhdGU6IGZvcmNlIHJldmFsaWRhdGlvbiBvZiBhbGwgdGhlIHBsYW5lIHByb3Bl cnRpZXMKLSAqIEBibG9iX3JvdF9jYXBzOiBQb2ludGVyIHRvIHJvdGF0b3IgY2FwYWJpbGl0eSBi bG9iCiAgKi8KIHN0cnVjdCBkcHVfcGxhbmUgewogCXN0cnVjdCBkcm1fcGxhbmUgYmFzZTsKQEAg LTEyNCw4ICsxMjAsNiBAQCBzdHJ1Y3QgZHB1X3BsYW5lIHsKIAlib29sIGlzX3ZpcnR1YWw7CiAJ c3RydWN0IGxpc3RfaGVhZCBtcGxhbmVfbGlzdDsKIAlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRh bG9nOwotCXUzMiBzYnVmX21vZGU7Ci0JdTMyIHNidWZfd3JpdGViYWNrOwogCWJvb2wgcmV2YWxp ZGF0ZTsKIAogCXN0cnVjdCBkcHVfY3NjX2NmZyBjc2NfY2ZnOwpAQCAtMTM5LDcgKzEzMyw2IEBA IHN0cnVjdCBkcHVfcGxhbmUgewogCXN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyBwcm9wZXJ0eV9p bmZvOwogCXN0cnVjdCBtc21fcHJvcGVydHlfZGF0YSBwcm9wZXJ0eV9kYXRhW1BMQU5FX1BST1Bf Q09VTlRdOwogCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9pbmZvOwotCXN0cnVjdCBk cm1fcHJvcGVydHlfYmxvYiAqYmxvYl9yb3RfY2FwczsKIAogCS8qIGRlYnVnZnMgcmVsYXRlZCBz dHVmZiAqLwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKQEAgLTE2MywyNyArMTU2LDYg QEAgc3RhdGljIHN0cnVjdCBkcHVfa21zICpfZHB1X3BsYW5lX2dldF9rbXMoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpCiAJcmV0dXJuIHRvX2RwdV9rbXMocHJpdi0+a21zKTsKIH0KIAotLyoqCi0g KiBfZHB1X3BsYW5lX2dldF9jcnRjX3N0YXRlIC0gb2J0YWluIGNydGMgc3RhdGUgYXR0YWNoZWQg dG8gZ2l2ZW4gcGxhbmUgc3RhdGUKLSAqIEBwc3RhdGU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lIHN0 YXRlCi0gKiByZXR1cm46IFBvaW50ZXIgdG8gY3J0YyBzdGF0ZSBpZiBzdWNjZXNzOyBwb2ludGVy IGVycm9yLCBvdGhlcndpc2UKLSAqLwotc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqX2Rw dV9wbGFuZV9nZXRfY3J0Y19zdGF0ZSgKLQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRl KQotewotCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlOwotCi0JaWYgKCFwc3RhdGUgfHwg IXBzdGF0ZS0+Y3J0YykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAocHN0YXRlLT5zdGF0ZSkKLQkJ Y3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShwc3RhdGUtPnN0YXRlLCBwc3RhdGUt PmNydGMpOwotCWVsc2UKLQkJY3N0YXRlID0gcHN0YXRlLT5jcnRjLT5zdGF0ZTsKLQotCXJldHVy biBjc3RhdGU7Ci19Ci0KIHN0YXRpYyBib29sIGRwdV9wbGFuZV9lbmFibGVkKHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlKQogewogCXJldHVybiBzdGF0ZSAmJiBzdGF0ZS0+ZmIgJiYgc3Rh dGUtPmNydGM7CkBAIC0xOTEsMTkgKzE2Myw3IEBAIHN0YXRpYyBib29sIGRwdV9wbGFuZV9lbmFi bGVkKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQogCiBzdGF0aWMgYm9vbCBkcHVfcGxh bmVfc3NwcF9lbmFibGVkKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQogewotCXJldHVy biBzdGF0ZSAmJiB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpLT5yb3Qub3V0X2ZiICYmIHN0YXRl LT5jcnRjOwotfQotCi0vKioKLSAqIGRwdV9wbGFuZV9jcnRjX2VuYWJsZWQgLSBkZXRlcm1pbmUg aWYgY3J0YyBvZiBnaXZlbiBwbGFuZSBzdGF0ZSBpcyBlbmFibGVkCi0gKiBAc3RhdGU6IFBvaW50 ZXIgdG8gZHJtIHBsYW5lIHN0YXRlCi0gKiByZXR1cm46IHRydWUgaWYgcGxhbmUgYW5kIHRoZSBh c3NvY2lhdGVkIGNydGMgYXJlIGJvdGggZW5hYmxlZAotICovCi1zdGF0aWMgYm9vbCBkcHVfcGxh bmVfY3J0Y19lbmFibGVkKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQotewotCXJldHVy biBkcHVfcGxhbmVfZW5hYmxlZChzdGF0ZSkgJiYgc3RhdGUtPmNydGMtPnN0YXRlICYmCi0JCQlz dGF0ZS0+Y3J0Yy0+c3RhdGUtPmFjdGl2ZSAmJgotCQkJc3RhdGUtPmNydGMtPnN0YXRlLT5lbmFi bGU7CisJcmV0dXJuIHN0YXRlICYmIHN0YXRlLT5jcnRjOwogfQogCiAvKioKQEAgLTIxOCwxMCAr MTc4LDggQEAgc3RhdGljIGlubGluZSBpbnQgX2RwdV9wbGFuZV9jYWxjX2ZpbGxfbGV2ZWwoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCiB7CiAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwgKnRtcDsK IAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rf c3RhdGUgKnJzdGF0ZTsKIAl1MzIgZml4ZWRfYnVmZl9zaXplOwogCXUzMiB0b3RhbF9mbDsKLQl1 MzIgaGZsaXBfYnl0ZXM7CiAKIAlpZiAoIXBsYW5lIHx8ICFmbXQgfHwgIXBsYW5lLT5zdGF0ZSB8 fCAhc3JjX3dpZHRoIHx8ICFmbXQtPmJwcCkgewogCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1l bnRzXG4iKTsKQEAgLTIzMCw3ICsxODgsNiBAQCBzdGF0aWMgaW5saW5lIGludCBfZHB1X3BsYW5l X2NhbGNfZmlsbF9sZXZlbChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAogCXBkcHUgPSB0b19k cHVfcGxhbmUocGxhbmUpOwogCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh dGUpOwotCXJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKIAlmaXhlZF9idWZmX3NpemUgPSBwZHB1LT5w aXBlX3NibGstPnBpeGVsX3JhbV9zaXplOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZw ZHB1LT5tcGxhbmVfbGlzdCwgbXBsYW5lX2xpc3QpIHsKQEAgLTI0MiwzNiArMTk5LDMwIEBAIHN0 YXRpYyBpbmxpbmUgaW50IF9kcHVfcGxhbmVfY2FsY19maWxsX2xldmVsKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAogCQlzcmNfd2lkdGggPSBtYXhfdCh1MzIsIHNyY193aWR0aCwgdG1wLT5waXBl X2NmZy5zcmNfcmVjdC53KTsKIAl9CiAKLQlpZiAoKHJzdGF0ZS0+b3V0X3JvdGF0aW9uICYgRFJN X01PREVfUkVGTEVDVF9YKSAmJgotCQkJRFBVX0ZPUk1BVF9JU19MSU5FQVIoZm10KSkKLQkJaGZs aXBfYnl0ZXMgPSAoc3JjX3dpZHRoICsgMzIpICogZm10LT5icHA7Ci0JZWxzZQotCQloZmxpcF9i eXRlcyA9IDA7Ci0KIAlpZiAoZm10LT5mZXRjaF9wbGFuZXMgPT0gRFBVX1BMQU5FX1BTRVVET19Q TEFOQVIpIHsKIAkJaWYgKGZtdC0+Y2hyb21hX3NhbXBsZSA9PSBEUFVfQ0hST01BXzQyMCkgewog CQkJLyogTlYxMiAqLwotCQkJdG90YWxfZmwgPSAoZml4ZWRfYnVmZl9zaXplIC8gMiAtIGhmbGlw X2J5dGVzKSAvCisJCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyKSAvCiAJCQkJKChz cmNfd2lkdGggKyAzMikgKiBmbXQtPmJwcCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBub24gTlYxMiAq LwotCQkJdG90YWxfZmwgPSAoZml4ZWRfYnVmZl9zaXplIC8gMiAtIGhmbGlwX2J5dGVzKSAqIDIg LworCQkJdG90YWxfZmwgPSAoZml4ZWRfYnVmZl9zaXplIC8gMikgKiAyIC8KIAkJCQkoKHNyY193 aWR0aCArIDMyKSAqIGZtdC0+YnBwKTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChwc3RhdGUtPm11 bHRpcmVjdF9tb2RlID09IERQVV9TU1BQX01VTFRJUkVDVF9QQVJBTExFTCkgewotCQkJdG90YWxf ZmwgPSAoZml4ZWRfYnVmZl9zaXplIC8gMiAtIGhmbGlwX2J5dGVzKSAqIDIgLworCQkJdG90YWxf ZmwgPSAoZml4ZWRfYnVmZl9zaXplIC8gMikgKiAyIC8KIAkJCQkoKHNyY193aWR0aCArIDMyKSAq IGZtdC0+YnBwKTsKIAkJfSBlbHNlIHsKLQkJCXRvdGFsX2ZsID0gKGZpeGVkX2J1ZmZfc2l6ZSAt IGhmbGlwX2J5dGVzKSAqIDIgLworCQkJdG90YWxfZmwgPSAoZml4ZWRfYnVmZl9zaXplKSAqIDIg LwogCQkJCSgoc3JjX3dpZHRoICsgMzIpICogZm10LT5icHApOwogCQl9CiAJfQogCi0JRFBVX0RF QlVHKCJwbGFuZSV1OiBwbnVtOiVkIGZtdDogJTQuNHMgdzoldSBoZjolZCBmbDoldVxuIiwKKwlE UFVfREVCVUcoInBsYW5lJXU6IHBudW06JWQgZm10OiAlNC40cyB3OiV1IGZsOiV1XG4iLAogCQkJ cGxhbmUtPmJhc2UuaWQsIHBkcHUtPnBpcGUgLSBTU1BQX1ZJRzAsCiAJCQkoY2hhciAqKSZmbXQt PmJhc2UucGl4ZWxfZm9ybWF0LAotCQkJc3JjX3dpZHRoLCBoZmxpcF9ieXRlcywgdG90YWxfZmwp OworCQkJc3JjX3dpZHRoLCB0b3RhbF9mbCk7CiAKIAlyZXR1cm4gdG90YWxfZmw7CiB9CkBAIC02 NzYsOTAgKzYyNyw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfc2V0X3RzX3ByZWZpbGwoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCiB9CiAKIC8qKgotICogX2RwdV9wbGFuZV9pbmxpbmVfcm90 X3NldF9vdF9saW1pdCAtIHNldCBPVCBsaW1pdCBmb3IgdGhlIGdpdmVuIGlubGluZQotICogcm90 YXRpb24geGluIGNsaWVudAotICogQHBsYW5lOiBwb2ludGVyIHRvIGRybSBwbGFuZQotICogQGNy dGM6IHBvaW50ZXIgdG8gZHJtIGNydGMKLSAqIEBjZmc6IHBvaW50ZXIgdG8gcm90YXRvciB2Ymlm IGNvbmZpZwotICogQHJlY3Rfdzogcm90YXRvciBmcmFtZSB3aWR0aAotICogQHJlY3RfaDogcm90 YXRvciBmcmFtZSBoZWlnaHQKLSAqLwotc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9pbmxpbmVfcm90 X3NldF9vdF9saW1pdChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJc3RydWN0IGRybV9jcnRj ICpjcnRjLCBjb25zdCBzdHJ1Y3QgZHB1X3JvdF92YmlmX2NmZyAqY2ZnLAotCQl1MzIgcmVjdF93 LCB1MzIgcmVjdF9oKQotewotCXN0cnVjdCBkcHVfdmJpZl9zZXRfb3RfcGFyYW1zIG90X3BhcmFt czsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwotCXN0cnVjdCBkcHVfa21zICpkcHVf a21zOwotCi0JaWYgKCFwbGFuZSB8fCAhcGxhbmUtPmRldikgewotCQlEUFVfRVJST1IoImludmFs aWQgYXJndW1lbnRzXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYgPSBwbGFuZS0+ZGV2LT5k ZXZfcHJpdmF0ZTsKLQlpZiAoIXByaXYgfHwgIXByaXYtPmttcykgewotCQlEUFVfRVJST1IoImlu dmFsaWQgS01TIHJlZmVyZW5jZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfa21zID0gdG9f ZHB1X2ttcyhwcml2LT5rbXMpOwotCi0JbWVtc2V0KCZvdF9wYXJhbXMsIDAsIHNpemVvZihvdF9w YXJhbXMpKTsKLQlvdF9wYXJhbXMueGluX2lkID0gY2ZnLT54aW5faWQ7Ci0Jb3RfcGFyYW1zLm51 bSA9IGNmZy0+bnVtOwotCW90X3BhcmFtcy53aWR0aCA9IHJlY3RfdzsKLQlvdF9wYXJhbXMuaGVp Z2h0ID0gcmVjdF9oOwotCW90X3BhcmFtcy5pc193ZmQgPSBmYWxzZTsKLQlvdF9wYXJhbXMuZnJh bWVfcmF0ZSA9IGNydGMtPm1vZGUudnJlZnJlc2g7Ci0Jb3RfcGFyYW1zLnZiaWZfaWR4ID0gVkJJ Rl9SVDsKLQlvdF9wYXJhbXMuY2xrX2N0cmwgPSBjZmctPmNsa19jdHJsOwotCW90X3BhcmFtcy5y ZCA9IGNmZy0+aXNfcmVhZDsKLQotCWRwdV92YmlmX3NldF9vdF9saW1pdChkcHVfa21zLCAmb3Rf cGFyYW1zKTsKLX0KLQotLyoqCi0gKiBfZHB1X3BsYW5lX2lubGluZV9yb3Rfc2V0X3Fvc19yZW1h cCAtIHNldCB2YmlmIFFvUyBmb3IgdGhlIGdpdmVuIGlubGluZQotICogcm90YXRpb24geGluIGNs aWVudAotICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQotICogQGNmZzogUG9pbnRlciB0 byByb3RhdG9yIHZiaWYgY2ZnCi0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfaW5saW5lX3Jv dF9zZXRfcW9zX3JlbWFwKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQljb25zdCBzdHJ1Y3Qg ZHB1X3JvdF92YmlmX2NmZyAqY2ZnKQotewotCXN0cnVjdCBkcHVfdmJpZl9zZXRfcW9zX3BhcmFt cyBxb3NfcGFyYW1zOwotCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7Ci0Jc3RydWN0IGRw dV9rbXMgKmRwdV9rbXM7Ci0KLQlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+ZGV2KSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBhcmd1bWVudHNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdiA9IHBs YW5lLT5kZXYtPmRldl9wcml2YXRlOwotCWlmICghcHJpdiB8fCAhcHJpdi0+a21zKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBLTVMgcmVmZXJlbmNlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRw dV9rbXMgPSB0b19kcHVfa21zKHByaXYtPmttcyk7Ci0KLQltZW1zZXQoJnFvc19wYXJhbXMsIDAs IHNpemVvZihxb3NfcGFyYW1zKSk7Ci0JcW9zX3BhcmFtcy52YmlmX2lkeCA9IFZCSUZfUlQ7Ci0J cW9zX3BhcmFtcy54aW5faWQgPSBjZmctPnhpbl9pZDsKLQlxb3NfcGFyYW1zLmNsa19jdHJsID0g Y2ZnLT5jbGtfY3RybDsKLQlxb3NfcGFyYW1zLm51bSA9IGNmZy0+bnVtOwotCXFvc19wYXJhbXMu aXNfcnQgPSB0cnVlOwotCi0JRFBVX0RFQlVHKCJ2YmlmOiVkIHhpbjolZCBudW06JWQgcnQ6JWQg Y2xrX2N0cmw6JWRcbiIsCi0JCQlxb3NfcGFyYW1zLnZiaWZfaWR4LCBxb3NfcGFyYW1zLnhpbl9p ZCwKLQkJCXFvc19wYXJhbXMubnVtLCBxb3NfcGFyYW1zLmlzX3J0LCBxb3NfcGFyYW1zLmNsa19j dHJsKTsKLQotCWRwdV92YmlmX3NldF9xb3NfcmVtYXAoZHB1X2ttcywgJnFvc19wYXJhbXMpOwot fQotCi0vKioKICAqIF9kcHVfcGxhbmVfZ2V0X2FzcGFjZTogZ2V0cyB0aGUgYWRkcmVzcyBzcGFj ZQogICovCiBzdGF0aWMgaW50IF9kcHVfcGxhbmVfZ2V0X2FzcGFjZSgKQEAgLTc2OCw3ICs2MzUs NiBAQCBzdGF0aWMgaW50IF9kcHVfcGxhbmVfZ2V0X2FzcGFjZSgKIAkJc3RydWN0IG1zbV9nZW1f YWRkcmVzc19zcGFjZSAqKmFzcGFjZSkKIHsKIAlzdHJ1Y3QgZHB1X2ttcyAqa21zOwotCWludCBt b2RlOwogCiAJaWYgKCFwZHB1IHx8ICFwc3RhdGUgfHwgIWFzcGFjZSkgewogCQlEUFVfRVJST1Io ImludmFsaWQgcGFyYW1ldGVyc1xuIik7CkBAIC0xMzc3LDExMDIgKzEyNDMsNiBAQCBzdGF0aWMg aW50IF9kcHVfcGxhbmVfY29sb3JfZmlsbChzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAogCXJldHVy biAwOwogfQogCi0vKioKLSAqIF9kcHVfcGxhbmVfZmJfZ2V0L3B1dCAtIGZyYW1lYnVmZmVyIGNh bGxiYWNrIGZvciBjcnRjIHJlcyBvcHMKLSAqLwotc3RhdGljIHZvaWQgKl9kcHVfcGxhbmVfZmJf Z2V0KHZvaWQgKmZiLCB1MzIgdHlwZSwgdTY0IHRhZykKLXsKLQlkcm1fZnJhbWVidWZmZXJfZ2V0 KGZiKTsKLQlyZXR1cm4gZmI7Ci19Ci1zdGF0aWMgdm9pZCBfZHB1X3BsYW5lX2ZiX3B1dCh2b2lk ICpmYikKLXsKLQlkcm1fZnJhbWVidWZmZXJfcHV0KGZiKTsKLX0KLXN0YXRpYyBzdHJ1Y3QgZHB1 X2NydGNfcmVzX29wcyBmYl9yZXNfb3BzID0gewotCS5wdXQgPSBfZHB1X3BsYW5lX2ZiX3B1dCwK LQkuZ2V0ID0gX2RwdV9wbGFuZV9mYl9nZXQsCi19OwotCi0vKioKLSAqIF9kcHVfcGxhbmVfZmJv X2dldC9wdXQgLSBmcmFtZWJ1ZmZlciBvYmplY3QgY2FsbGJhY2sgZm9yIGNydGMgcmVzIG9wcwot ICovCi1zdGF0aWMgdm9pZCAqX2RwdV9wbGFuZV9mYm9fZ2V0KHZvaWQgKmZibywgdTMyIHR5cGUs IHU2NCB0YWcpCi17Ci0JZHB1X2ttc19mYm9fcmVmZXJlbmNlKGZibyk7Ci0JcmV0dXJuIGZibzsK LX0KLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfZmJvX3B1dCh2b2lkICpmYm8pCi17Ci0JZHB1X2tt c19mYm9fdW5yZWZlcmVuY2UoZmJvKTsKLX0KLXN0YXRpYyBzdHJ1Y3QgZHB1X2NydGNfcmVzX29w cyBmYm9fcmVzX29wcyA9IHsKLQkucHV0ID0gX2RwdV9wbGFuZV9mYm9fcHV0LAotCS5nZXQgPSBf ZHB1X3BsYW5lX2Zib19nZXQsCi19OwotCi0vKioKLSAqIGRwdV9wbGFuZV9yb3RfY2FsY19wcmVm aWxsIC0gY2FsY3VsYXRlIHJvdGF0b3Igc3RhcnQgcHJlZmlsbAotICogQHBsYW5lOiBQb2ludGVy IHRvIGRybSBwbGFuZQotICogcmV0dXJuOiBwcmVmaWxsIHRpbWUgaW4gbGluZQotICovCi11MzIg ZHB1X3BsYW5lX3JvdF9jYWxjX3ByZWZpbGwoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCi17Ci0J c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGU7Ci0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAq cHN0YXRlOwotCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpyc3RhdGU7Ci0Jc3RydWN0IGRw dV9rbXMgKmRwdV9rbXM7Ci0JdTMyIGJsb2Nrc2l6ZSA9IDEyODsKLQl1MzIgcHJlZmlsbF9saW5l ID0gMDsKLQotCWlmICghcGxhbmUgfHwgIXBsYW5lLT5zdGF0ZSB8fCAhcGxhbmUtPnN0YXRlLT5m YikgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7Ci0JCXJldHVybiAwOwot CX0KLQotCWRwdV9rbXMgPSBfZHB1X3BsYW5lX2dldF9rbXMocGxhbmUpOwotCXN0YXRlID0gcGxh bmUtPnN0YXRlOwotCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Ci0JcnN0YXRl ID0gJnBzdGF0ZS0+cm90OwotCi0JaWYgKCFkcHVfa21zIHx8ICFkcHVfa21zLT5jYXRhbG9nKSB7 Ci0JCURQVV9FUlJPUigiaW52YWxpZCBrbXNcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAo cnN0YXRlLT5vdXRfZmJfZm9ybWF0KQotCQlkcHVfZm9ybWF0X2dldF9ibG9ja19zaXplKHJzdGF0 ZS0+b3V0X2ZiX2Zvcm1hdCwKLQkJCQkmYmxvY2tzaXplLCAmYmxvY2tzaXplKTsKLQotCXByZWZp bGxfbGluZSA9IGJsb2Nrc2l6ZSArIGRwdV9rbXMtPmNhdGFsb2ctPnNidWZfaGVhZHJvb207Ci0J cHJlZmlsbF9saW5lID0gbXVsdF9mcmFjKHByZWZpbGxfbGluZSwgcnN0YXRlLT5vdXRfc3JjX2gg Pj4gMTYsCi0JCQlzdGF0ZS0+Y3J0Y19oKTsKLQlEUFVfREVCVUcoCi0JCSJwbGFuZSVkLiVkIGJs azoldSBoZWFkOiV1IHZkc3QvdnNyYzoldS8ldSBwcmVmaWxsOiV1XG4iLAotCQkJcGxhbmUtPmJh c2UuaWQsIHJzdGF0ZS0+c2VxdWVuY2VfaWQsCi0JCQlibG9ja3NpemUsIGRwdV9rbXMtPmNhdGFs b2ctPnNidWZfaGVhZHJvb20sCi0JCQlzdGF0ZS0+Y3J0Y19oLCByc3RhdGUtPm91dF9zcmNfaCA+ PiAxNiwKLQkJCXByZWZpbGxfbGluZSk7Ci0KLQlyZXR1cm4gcHJlZmlsbF9saW5lOwotfQotCi0v KioKLSAqIGRwdV9wbGFuZV9yb3RfY2FsY19jZmcgLSBjYWxjdWxhdGUgcm90YXRvci9zc3BwIGNv bmZpZ3VyYXRpb24gYnkKLSAqCWVudW1lcmF0aW5nIG92ZXIgYWxsIHBsYW5lcyBhdHRhY2hlZCB0 byB0aGUgc2FtZSByb3RhdG9yCi0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCi0gKiBA c3RhdGU6IFBvaW50ZXIgdG8gZHJtIHN0YXRlIHRvIGJlIHVwZGF0ZWQKLSAqIHJldHVybjogMCBp ZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50IGRwdV9wbGFu ZV9yb3RfY2FsY19jZmcoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCXN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQlz dHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlOwotCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqY3N0YXRlOwotCXN0cnVjdCBkcm1fcmVjdCAqaW5fcm90LCAqb3V0X3JvdDsKLQlzdHJ1Y3Qg ZHJtX3BsYW5lICphdHRhY2hlZF9wbGFuZTsKLQl1MzIgZHN0X3gsIGRzdF95LCBkc3RfdywgZHN0 X2g7Ci0JaW50IGZvdW5kID0gMDsKLQlpbnQgeHBvcyA9IDA7Ci0JaW50IHJldDsKLQotCWlmICgh cGxhbmUgfHwgIXN0YXRlIHx8ICFzdGF0ZS0+c3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IHBhcmFtZXRlcnNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljc3RhdGUgPSBfZHB1 X3BsYW5lX2dldF9jcnRjX3N0YXRlKHN0YXRlKTsKLQlpZiAoSVNfRVJSX09SX05VTEwoY3N0YXRl KSkgewotCQlyZXQgPSBQVFJfRVJSKGNzdGF0ZSk7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjcnRj IHN0YXRlICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXBzdGF0ZSA9IHRvX2Rw dV9wbGFuZV9zdGF0ZShzdGF0ZSk7Ci0JcnN0YXRlID0gJnBzdGF0ZS0+cm90OwotCi0JaW5fcm90 ID0gJnJzdGF0ZS0+aW5fcm90X3JlY3Q7Ci0JKmluX3JvdCA9IGRybV9wbGFuZV9zdGF0ZV9zcmMo c3RhdGUpOwotCi0Jb3V0X3JvdCA9ICZyc3RhdGUtPm91dF9yb3RfcmVjdDsKLQlkc3RfeCA9IGRw dV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFORV9QUk9QX1JPVF9EU1RfWCk7Ci0JZHN0 X3kgPSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9ST1RfRFNUX1kp OwotCWRzdF93ID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1BfUk9U X0RTVF9XKTsKLQlkc3RfaCA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFORV9Q Uk9QX1JPVF9EU1RfSCk7Ci0KLQlpZiAoIWRzdF93ICYmICFkc3RfaCkgewotCQlyc3RhdGUtPm91 dF9yb3RfcmVjdCA9IHJzdGF0ZS0+aW5fcm90X3JlY3Q7Ci0JCWRybV9yZWN0X3JvdGF0ZSgmcnN0 YXRlLT5vdXRfcm90X3JlY3QsIHN0YXRlLT5mYi0+d2lkdGggPDwgMTYsCi0JCQkJc3RhdGUtPmZi LT5oZWlnaHQgPDwgMTYsIHJzdGF0ZS0+aW5fcm90YXRpb24pOwotCX0gZWxzZSB7Ci0JCW91dF9y b3QtPngxID0gZHN0X3g7Ci0JCW91dF9yb3QtPnkxID0gZHN0X3k7Ci0JCW91dF9yb3QtPngyID0g ZHN0X3ggKyBkc3RfdzsKLQkJb3V0X3JvdC0+eTIgPSBkc3RfeSArIGRzdF9oOwotCX0KLQotCXJz dGF0ZS0+b3V0X3NyY19yZWN0ID0gcnN0YXRlLT5vdXRfcm90X3JlY3Q7Ci0KLQkvKiBlbnVtZXJh dGluZyBvdmVyIGFsbCBwbGFuZXMgYXR0YWNoZWQgdG8gdGhlIHNhbWUgcm90YXRvciAqLwotCWRy bV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9wbGFuZShhdHRhY2hlZF9wbGFuZSwgY3N0YXRl KSB7Ci0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKmF0dGFjaGVkX3N0YXRlOwotCQlzdHJ1Y3Qg ZHB1X3BsYW5lX3N0YXRlICphdHRhY2hlZF9wc3RhdGU7Ci0JCXN0cnVjdCBkcHVfcGxhbmVfcm90 X3N0YXRlICphdHRhY2hlZF9yc3RhdGU7Ci0JCXN0cnVjdCBkcm1fcmVjdCBhdHRhY2hlZF9vdXRf cmVjdDsKLQotCQlhdHRhY2hlZF9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2V4aXN0aW5nX3BsYW5l X3N0YXRlKAotCQkJCXN0YXRlLT5zdGF0ZSwgYXR0YWNoZWRfcGxhbmUpOwotCi0JCWlmICghYXR0 YWNoZWRfc3RhdGUpCi0JCQljb250aW51ZTsKLQotCQlhdHRhY2hlZF9wc3RhdGUgPSB0b19kcHVf cGxhbmVfc3RhdGUoYXR0YWNoZWRfc3RhdGUpOwotCQlhdHRhY2hlZF9yc3RhdGUgPSAmYXR0YWNo ZWRfcHN0YXRlLT5yb3Q7Ci0KLQkJaWYgKGF0dGFjaGVkX3N0YXRlLT5mYiAhPSBzdGF0ZS0+ZmIp Ci0JCQljb250aW51ZTsKLQotCQlpZiAoZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBM QU5FX1BST1BfUk9UQVRJT04pICE9Ci0JCQlkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KGF0dGFjaGVk X3BzdGF0ZSwKLQkJCQlQTEFORV9QUk9QX1JPVEFUSU9OKSkKLQkJCWNvbnRpbnVlOwotCi0JCWZv dW5kKys7Ci0KLQkJLyogc2tpcCBpdHNlbGYgKi8KLQkJaWYgKGF0dGFjaGVkX3BsYW5lID09IHBs YW5lKQotCQkJY29udGludWU7Ci0KLQkJLyogZmluZCBib3VuZGluZyByb3RhdG9yIHNvdXJjZSBy b2kgKi8KLQkJaWYgKGF0dGFjaGVkX3N0YXRlLT5zcmNfeCA8IGluX3JvdC0+eDEpCi0JCQlpbl9y b3QtPngxID0gYXR0YWNoZWRfc3RhdGUtPnNyY194OwotCi0JCWlmIChhdHRhY2hlZF9zdGF0ZS0+ c3JjX3kgPCBpbl9yb3QtPnkxKQotCQkJaW5fcm90LT55MSA9IGF0dGFjaGVkX3N0YXRlLT5zcmNf eTsKLQotCQlpZiAoYXR0YWNoZWRfc3RhdGUtPnNyY194ICsgYXR0YWNoZWRfc3RhdGUtPnNyY193 ID4gaW5fcm90LT54MikKLQkJCWluX3JvdC0+eDIgPSBhdHRhY2hlZF9zdGF0ZS0+c3JjX3ggKwot CQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfdzsKLQotCQlpZiAoYXR0YWNoZWRfc3RhdGUtPnNyY195 ICsgYXR0YWNoZWRfc3RhdGUtPnNyY19oID4gaW5fcm90LT55MikKLQkJCWluX3JvdC0+eTIgPSBh dHRhY2hlZF9zdGF0ZS0+c3JjX3kgKwotCQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfaDsKLQotCQkv KiBmaW5kIGJvdW5kaW5nIHJvdGF0b3IgZGVzdGluYXRpb24gcm9pICovCi0JCWRzdF94ID0gZHB1 X3BsYW5lX2dldF9wcm9wZXJ0eShhdHRhY2hlZF9wc3RhdGUsCi0JCQkJUExBTkVfUFJPUF9ST1Rf RFNUX1gpOwotCQlkc3RfeSA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkoYXR0YWNoZWRfcHN0YXRl LAotCQkJCVBMQU5FX1BST1BfUk9UX0RTVF9ZKTsKLQkJZHN0X3cgPSBkcHVfcGxhbmVfZ2V0X3By b3BlcnR5KGF0dGFjaGVkX3BzdGF0ZSwKLQkJCQlQTEFORV9QUk9QX1JPVF9EU1RfVyk7Ci0JCWRz dF9oID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShhdHRhY2hlZF9wc3RhdGUsCi0JCQkJUExBTkVf UFJPUF9ST1RfRFNUX0gpOwotCQlpZiAoIWRzdF93ICYmICFkc3RfaCkgewotCQkJYXR0YWNoZWRf b3V0X3JlY3QgPSBkcm1fcGxhbmVfc3RhdGVfc3JjKGF0dGFjaGVkX3N0YXRlKTsKLQkJCWRybV9y ZWN0X3JvdGF0ZSgmYXR0YWNoZWRfb3V0X3JlY3QsCi0JCQkJCXN0YXRlLT5mYi0+d2lkdGggPDwg MTYsCi0JCQkJCXN0YXRlLT5mYi0+aGVpZ2h0IDw8IDE2LAotCQkJCQlyc3RhdGUtPmluX3JvdGF0 aW9uKTsKLQkJfSBlbHNlIHsKLQkJCWF0dGFjaGVkX291dF9yZWN0LngxID0gZHN0X3g7Ci0JCQlh dHRhY2hlZF9vdXRfcmVjdC55MSA9IGRzdF95OwotCQkJYXR0YWNoZWRfb3V0X3JlY3QueDIgPSBk c3RfeCArIGRzdF93OwotCQkJYXR0YWNoZWRfb3V0X3JlY3QueTIgPSBkc3RfeSArIGRzdF9oOwot CQl9Ci0KLQkJLyogY2hlY2sgc291cmNlIHNwbGl0IGxlZnQvcmlnaHQgbWlzbWF0Y2ggKi8KLQkJ aWYgKGF0dGFjaGVkX291dF9yZWN0LnkxICE9IHJzdGF0ZS0+b3V0X3NyY19yZWN0LnkxIHx8Ci0J CQlhdHRhY2hlZF9vdXRfcmVjdC55MiAhPSByc3RhdGUtPm91dF9zcmNfcmVjdC55MikgewotCQkJ RFBVX0VSUk9SKAotCQkJCSJwbGFuZSVkLiV1IHNyYzolZHglZCslZCslZCByb3Q6MHglbGx4IGZi OiVkIHBsYW5lJWQuJXUgc3JjOiVkeCVkKyVkKyVkIHJvdDoweCVsbHggZmI6JWQgbWlzbWF0Y2hc biIsCi0JCQkJCXBsYW5lLT5iYXNlLmlkLAotCQkJCQlyc3RhdGUtPnNlcXVlbmNlX2lkLAotCQkJ CQlzdGF0ZS0+c3JjX3cgPj4gMTYsCi0JCQkJCXN0YXRlLT5zcmNfaCA+PiAxNiwKLQkJCQkJc3Rh dGUtPnNyY194ID4+IDE2LAotCQkJCQlzdGF0ZS0+c3JjX3kgPj4gMTYsCi0JCQkJCWRwdV9wbGFu ZV9nZXRfcHJvcGVydHkocHN0YXRlLAotCQkJCQkJCVBMQU5FX1BST1BfUk9UQVRJT04pLAotCQkJ CQlzdGF0ZS0+ZmIgPwotCQkJCQkJc3RhdGUtPmZiLT5iYXNlLmlkIDoKLQkJCQkJCS0xLAotCQkJ CQlhdHRhY2hlZF9wbGFuZS0+YmFzZS5pZCwKLQkJCQkJYXR0YWNoZWRfcnN0YXRlLT5zZXF1ZW5j ZV9pZCwKLQkJCQkJYXR0YWNoZWRfc3RhdGUtPnNyY193ID4+IDE2LAotCQkJCQlhdHRhY2hlZF9z dGF0ZS0+c3JjX2ggPj4gMTYsCi0JCQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfeCA+PiAxNiwKLQkJ CQkJYXR0YWNoZWRfc3RhdGUtPnNyY195ID4+IDE2LAotCQkJCQlkcHVfcGxhbmVfZ2V0X3Byb3Bl cnR5KGF0dGFjaGVkX3BzdGF0ZSwKLQkJCQkJCQlQTEFORV9QUk9QX1JPVEFUSU9OKSwKLQkJCQkJ YXR0YWNoZWRfc3RhdGUtPmZiID8KLQkJCQkJCWF0dGFjaGVkX3N0YXRlLT5mYi0+YmFzZS5pZCA6 Ci0JCQkJCQktMSk7Ci0JCQlEUFVfRVJST1IoCi0JCQkJInBsYW5lJWQuJXUgc3NwcDolZHglZCsl ZCslZCBwbGFuZSVkLiV1IHNzcHA6JWR4JWQrJWQrJWRcbiIsCi0JCQkJCXBsYW5lLT5iYXNlLmlk LAotCQkJCQlyc3RhdGUtPnNlcXVlbmNlX2lkLAotCQkJCQkocnN0YXRlLT5vdXRfc3JjX3JlY3Qu eDIgLQotCQkJCQkJcnN0YXRlLT5vdXRfc3JjX3JlY3QueDEpID4+IDE2LAotCQkJCQkocnN0YXRl LT5vdXRfc3JjX3JlY3QueTIgLQotCQkJCQkJcnN0YXRlLT5vdXRfc3JjX3JlY3QueTEpID4+IDE2 LAotCQkJCQlyc3RhdGUtPm91dF9zcmNfcmVjdC54MSA+PiAxNiwKLQkJCQkJcnN0YXRlLT5vdXRf c3JjX3JlY3QueTEgPj4gMTYsCi0JCQkJCWF0dGFjaGVkX3BsYW5lLT5iYXNlLmlkLAotCQkJCQlh dHRhY2hlZF9yc3RhdGUtPnNlcXVlbmNlX2lkLAotCQkJCQkoYXR0YWNoZWRfb3V0X3JlY3QueDIg LQotCQkJCQkJYXR0YWNoZWRfb3V0X3JlY3QueDEpID4+IDE2LAotCQkJCQkoYXR0YWNoZWRfb3V0 X3JlY3QueTIgLQotCQkJCQkJYXR0YWNoZWRfb3V0X3JlY3QueTEpID4+IDE2LAotCQkJCQlhdHRh Y2hlZF9vdXRfcmVjdC54MSA+PiAxNiwKLQkJCQkJYXR0YWNoZWRfb3V0X3JlY3QueTEgPj4gMTYp OwotCQkJRFBVX0VWVDMyKERSTUlEKHBsYW5lKSwKLQkJCQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCwK LQkJCQkJcnN0YXRlLT5vdXRfc3JjX3JlY3QueDEgPj4gMTYsCi0JCQkJCXJzdGF0ZS0+b3V0X3Ny Y19yZWN0LnkxID4+IDE2LAotCQkJCQkocnN0YXRlLT5vdXRfc3JjX3JlY3QueDIgLQotCQkJCQkJ cnN0YXRlLT5vdXRfc3JjX3JlY3QueDEpID4+IDE2LAotCQkJCQkocnN0YXRlLT5vdXRfc3JjX3Jl Y3QueTIgLQotCQkJCQkJcnN0YXRlLT5vdXRfc3JjX3JlY3QueTEpID4+IDE2LAotCQkJCQlhdHRh Y2hlZF9wbGFuZS0+YmFzZS5pZCwKLQkJCQkJYXR0YWNoZWRfcnN0YXRlLT5zZXF1ZW5jZV9pZCwK LQkJCQkJYXR0YWNoZWRfb3V0X3JlY3QueDEgPj4gMTYsCi0JCQkJCWF0dGFjaGVkX291dF9yZWN0 LnkxID4+IDE2LAotCQkJCQkoYXR0YWNoZWRfb3V0X3JlY3QueDIgLQotCQkJCQkJYXR0YWNoZWRf b3V0X3JlY3QueDEpID4+IDE2LAotCQkJCQkoYXR0YWNoZWRfb3V0X3JlY3QueTIgLQotCQkJCQkJ YXR0YWNoZWRfb3V0X3JlY3QueTEpID4+IDE2LAotCQkJCQlEUFVfRVZUTE9HX0VSUk9SKTsKLQkJ CXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyogZmluZCByZWxhdGl2ZSBzc3BwIHBvc2l0aW9u ICovCi0JCWlmIChhdHRhY2hlZF9vdXRfcmVjdC54MSA8IHJzdGF0ZS0+b3V0X3NyY19yZWN0Lngx KQotCQkJeHBvcysrOwotCi0JCWlmIChhdHRhY2hlZF9vdXRfcmVjdC54MSA8IG91dF9yb3QtPngx KQotCQkJb3V0X3JvdC0+eDEgPSBhdHRhY2hlZF9vdXRfcmVjdC54MTsKLQotCQlpZiAoYXR0YWNo ZWRfb3V0X3JlY3QueTEgPCBvdXRfcm90LT55MSkKLQkJCW91dF9yb3QtPnkxID0gYXR0YWNoZWRf b3V0X3JlY3QueTE7Ci0KLQkJaWYgKGF0dGFjaGVkX291dF9yZWN0LngyID4gb3V0X3JvdC0+eDIp Ci0JCQlvdXRfcm90LT54MiA9IGF0dGFjaGVkX291dF9yZWN0LngyOwotCi0JCWlmIChhdHRhY2hl ZF9vdXRfcmVjdC55MiA+IG91dF9yb3QtPnkyKQotCQkJb3V0X3JvdC0+eTIgPSBhdHRhY2hlZF9v dXRfcmVjdC55MjsKLQotCQlEUFVfREVCVUcoInBsYW5lJWQuJXUgc3JjX3g6JWQgc3NwcDolZHgl ZCslZCslZC8lZHglZCslZCslZFxuIiwKLQkJCWF0dGFjaGVkX3BsYW5lLT5iYXNlLmlkLAotCQkJ YXR0YWNoZWRfcnN0YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCWF0dGFjaGVkX3JzdGF0ZS0+b3V0X3Ny Y19yZWN0LngxID4+IDE2LAotCQkJYXR0YWNoZWRfc3RhdGUtPnNyY193ID4+IDE2LAotCQkJYXR0 YWNoZWRfc3RhdGUtPnNyY19oID4+IDE2LAotCQkJYXR0YWNoZWRfc3RhdGUtPnNyY194ID4+IDE2 LAotCQkJYXR0YWNoZWRfc3RhdGUtPnNyY195ID4+IDE2LAotCQkJZHJtX3JlY3Rfd2lkdGgoJmF0 dGFjaGVkX3JzdGF0ZS0+b3V0X3NyY19yZWN0KSA+PiAxNiwKLQkJCWRybV9yZWN0X2hlaWdodCgm YXR0YWNoZWRfcnN0YXRlLT5vdXRfc3JjX3JlY3QpID4+IDE2LAotCQkJYXR0YWNoZWRfcnN0YXRl LT5vdXRfc3JjX3JlY3QueDEgPj4gMTYsCi0JCQlhdHRhY2hlZF9yc3RhdGUtPm91dF9zcmNfcmVj dC55MSA+PiAxNik7Ci0JfQotCi0JcnN0YXRlLT5vdXRfeHBvcyA9IHhwb3M7Ci0JcnN0YXRlLT5u cGxhbmUgPSBmb3VuZDsKLQotCURQVV9ERUJVRygicGxhbmUlZC4ldSB4cG9zOiVkLyVkIHJvdDol ZHglZCslZCslZC8lZHglZCslZCslZFxuIiwKLQkJCXBsYW5lLT5iYXNlLmlkLCByc3RhdGUtPnNl cXVlbmNlX2lkLAotCQkJcnN0YXRlLT5vdXRfeHBvcywgcnN0YXRlLT5ucGxhbmUsCi0JCQlkcm1f cmVjdF93aWR0aChpbl9yb3QpID4+IDE2LAotCQkJZHJtX3JlY3RfaGVpZ2h0KGluX3JvdCkgPj4g MTYsCi0JCQlpbl9yb3QtPngxID4+IDE2LCBpbl9yb3QtPnkxID4+IDE2LAotCQkJZHJtX3JlY3Rf d2lkdGgoJnJzdGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNiwKLQkJCWRybV9yZWN0X2hlaWdodCgm cnN0YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2LAotCQkJcnN0YXRlLT5vdXRfcm90X3JlY3QueDEg Pj4gMTYsCi0JCQlyc3RhdGUtPm91dF9yb3RfcmVjdC55MSA+PiAxNik7Ci0JRFBVX0VWVDMyKERS TUlEKHBsYW5lKSwgcnN0YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCXJzdGF0ZS0+b3V0X3hwb3MsIHJz dGF0ZS0+bnBsYW5lLAotCQkJaW5fcm90LT54MSA+PiAxNiwgaW5fcm90LT55MSA+PiAxNiwKLQkJ CWRybV9yZWN0X3dpZHRoKGluX3JvdCkgPj4gMTYsCi0JCQlkcm1fcmVjdF9oZWlnaHQoaW5fcm90 KSA+PiAxNiwKLQkJCXJzdGF0ZS0+b3V0X3JvdF9yZWN0LngxID4+IDE2LAotCQkJcnN0YXRlLT5v dXRfcm90X3JlY3QueTEgPj4gMTYsCi0JCQlkcm1fcmVjdF93aWR0aCgmcnN0YXRlLT5vdXRfcm90 X3JlY3QpID4+IDE2LAotCQkJZHJtX3JlY3RfaGVpZ2h0KCZyc3RhdGUtPm91dF9yb3RfcmVjdCkg Pj4gMTYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHB1X3BsYW5lX3JvdF9zdWJtaXRf Y29tbWFuZCAtIGNvbW1pdCBnaXZlbiBzdGF0ZSBmb3IgdGhlIHJvdGF0b3Igc3RhZ2UKLSAqIEBw bGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUKLSAqIEBzdGF0ZTogUG9pbnRlciB0byB0aGUgc3Rh dGUgdG8gYmUgY29tbWl0dGVkCi0gKiBAaHdfY21kOiByb3RhdG9yIGNvbW1hbmQgdHlwZQotICog cmV0dXJuOiAwIGlmIHN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBp bnQgZHB1X3BsYW5lX3JvdF9zdWJtaXRfY29tbWFuZChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK LQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsIGVudW0gZHB1X2h3X3JvdF9jbWRfdHlw ZSBod19jbWQpCi17Ci0Jc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFu ZSk7Ci0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRl KHN0YXRlKTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlID0gJnBzdGF0ZS0+ cm90OwotCXN0cnVjdCBkcHVfaHdfcm90X2NtZCAqcm90X2NtZDsKLQlzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKmNzdGF0ZTsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmRwdV9jc3RhdGU7Ci0JaW50 IHJldCwgaTsKLQlpbnQgZmJfbW9kZTsKLQotCWlmICghcGxhbmUgfHwgIXN0YXRlIHx8ICFzdGF0 ZS0+ZmIgfHwgIXJzdGF0ZS0+cm90X2h3KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBwYXJhbWV0 ZXJzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY3N0YXRlID0gX2RwdV9wbGFuZV9n ZXRfY3J0Y19zdGF0ZShzdGF0ZSk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGNzdGF0ZSkpIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGNydGMgc3RhdGUgJWxkXG4iLCBQVFJfRVJSKGNzdGF0ZSkpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNz dGF0ZSk7Ci0KLQlyb3RfY21kID0gJnJzdGF0ZS0+cm90X2NtZDsKLQotCXJvdF9jbWQtPm1hc3Rl ciA9IChyc3RhdGUtPm91dF94cG9zID09IDApOwotCXJvdF9jbWQtPnNlcXVlbmNlX2lkID0gcnN0 YXRlLT5zZXF1ZW5jZV9pZDsKLQlyb3RfY21kLT5mcHMgPSBwc3RhdGUtPmJhc2UuY3J0YyAmJiBw c3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUgPwotCQlkcm1fbW9kZV92cmVmcmVzaCgmcHN0YXRlLT5i YXNlLmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlKSA6Ci0JCURFRkFVTFRfUkVGUkVTSF9SQVRF OwotCXJvdF9jbWQtPnJvdDkwID0gcnN0YXRlLT5yb3Q5MDsKLQlyb3RfY21kLT5oZmxpcCA9IHJz dGF0ZS0+aGZsaXA7Ci0Jcm90X2NtZC0+dmZsaXAgPSByc3RhdGUtPnZmbGlwOwotCi0Jcm90X2Nt ZC0+cHJlZmlsbF9idyA9IGRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLAotCQkJQ1JU Q19QUk9QX1JPVF9QUkVGSUxMX0JXKTsKLQlyb3RfY21kLT5jbGtyYXRlID0gZHB1X2NydGNfZ2V0 X3Byb3BlcnR5KGRwdV9jc3RhdGUsCi0JCQlDUlRDX1BST1BfUk9UX0NMSyk7Ci0Jcm90X2NtZC0+ ZHN0X3dyaXRlYmFjayA9IHBkcHUtPnNidWZfd3JpdGViYWNrOwotCi0JaWYgKGRwdV9jcnRjX2dl dF9pbnRmX21vZGUoc3RhdGUtPmNydGMpID09IElOVEZfTU9ERV9WSURFTykKLQkJcm90X2NtZC0+ dmlkZW9fbW9kZSA9IHRydWU7Ci0JZWxzZQotCQlyb3RfY21kLT52aWRlb19tb2RlID0gZmFsc2U7 Ci0KLQlyb3RfY21kLT5zcmNfcGl4ZWxfZm9ybWF0ID0gc3RhdGUtPmZiLT5mb3JtYXQtPmZvcm1h dDsKLQlyb3RfY21kLT5zcmNfbW9kaWZpZXIgPSBzdGF0ZS0+ZmItPm1vZGlmaWVyOwotCXJvdF9j bWQtPnNyY19zdHJpZGUgPSBzdGF0ZS0+ZmItPnBpdGNoZXNbMF07Ci0KLQlyb3RfY21kLT5zcmNf Zm9ybWF0ID0gdG9fZHB1X2Zvcm1hdChtc21fZnJhbWVidWZmZXJfZm9ybWF0KHN0YXRlLT5mYikp OwotCWlmICghcm90X2NtZC0+c3JjX2Zvcm1hdCkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBn ZXQgc3JjIGZvcm1hdFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJvdF9jbWQtPnNy Y193aWR0aCA9IHN0YXRlLT5mYi0+d2lkdGg7Ci0Jcm90X2NtZC0+c3JjX2hlaWdodCA9IHN0YXRl LT5mYi0+aGVpZ2h0OwotCXJvdF9jbWQtPnNyY19yZWN0X3ggPSByc3RhdGUtPmluX3JvdF9yZWN0 LngxID4+IDE2OwotCXJvdF9jbWQtPnNyY19yZWN0X3kgPSByc3RhdGUtPmluX3JvdF9yZWN0Lnkx ID4+IDE2OwotCXJvdF9jbWQtPnNyY19yZWN0X3cgPSBkcm1fcmVjdF93aWR0aCgmcnN0YXRlLT5p bl9yb3RfcmVjdCkgPj4gMTY7Ci0Jcm90X2NtZC0+c3JjX3JlY3RfaCA9IGRybV9yZWN0X2hlaWdo dCgmcnN0YXRlLT5pbl9yb3RfcmVjdCkgPj4gMTY7Ci0Jcm90X2NtZC0+ZHN0X3JlY3RfeCA9IDA7 Ci0Jcm90X2NtZC0+ZHN0X3JlY3RfeSA9IDA7Ci0Jcm90X2NtZC0+ZHN0X3JlY3RfdyA9IGRybV9y ZWN0X3dpZHRoKCZyc3RhdGUtPm91dF9yb3RfcmVjdCkgPj4gMTY7Ci0Jcm90X2NtZC0+ZHN0X3Jl Y3RfaCA9IGRybV9yZWN0X2hlaWdodCgmcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2OwotCi0J aWYgKGh3X2NtZCA9PSBEUFVfSFdfUk9UX0NNRF9DT01NSVQpIHsKLQkJc3RydWN0IGRwdV9od19m bXRfbGF5b3V0IGxheW91dDsKLQotCQltZW1zZXQoJmxheW91dCwgMCwgc2l6ZW9mKHN0cnVjdCBk cHVfaHdfZm10X2xheW91dCkpOwotCQlkcHVfZm9ybWF0X3BvcHVsYXRlX2xheW91dChwc3RhdGUt PmFzcGFjZSwgc3RhdGUtPmZiLAotCQkJCSZsYXlvdXQpOwotCQlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShyb3RfY21kLT5zcmNfaW92YSk7IGkrKykgewotCQkJcm90X2NtZC0+c3JjX2lvdmFb aV0gPSBsYXlvdXQucGxhbmVfYWRkcltpXTsKLQkJCXJvdF9jbWQtPnNyY19sZW5baV0gPSBsYXlv dXQucGxhbmVfc2l6ZVtpXTsKLQkJfQotCQlyb3RfY21kLT5zcmNfcGxhbmVzID0gbGF5b3V0Lm51 bV9wbGFuZXM7Ci0KLQkJbWVtc2V0KCZsYXlvdXQsIDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X2Zt dF9sYXlvdXQpKTsKLQkJZHB1X2Zvcm1hdF9wb3B1bGF0ZV9sYXlvdXQocHN0YXRlLT5hc3BhY2Us IHJzdGF0ZS0+b3V0X2ZiLAotCQkJCSZsYXlvdXQpOwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShyb3RfY21kLT5kc3RfaW92YSk7IGkrKykgewotCQkJcm90X2NtZC0+ZHN0X2lvdmFbaV0g PSBsYXlvdXQucGxhbmVfYWRkcltpXTsKLQkJCXJvdF9jbWQtPmRzdF9sZW5baV0gPSBsYXlvdXQu cGxhbmVfc2l6ZVtpXTsKLQkJfQotCQlyb3RfY21kLT5kc3RfcGxhbmVzID0gbGF5b3V0Lm51bV9w bGFuZXM7Ci0KLQkJLyogVkJJRiByZW1hcHBlciBzZXR0aW5ncyAqLwotCQlmb3IgKGkgPSAwOyBp IDwgcnN0YXRlLT5yb3RfaHctPmNhcHMtPnhpbl9jb3VudDsgaSsrKSB7Ci0JCQljb25zdCBzdHJ1 Y3QgZHB1X3JvdF92YmlmX2NmZyAqY2ZnID0KLQkJCQkJJnJzdGF0ZS0+cm90X2h3LT5jYXBzLT52 YmlmX2NmZ1tpXTsKLQotCQkJX2RwdV9wbGFuZV9pbmxpbmVfcm90X3NldF9xb3NfcmVtYXAocGxh bmUsIGNmZyk7Ci0KLQkJCWlmIChjZmctPmlzX3JlYWQpIHsKLQkJCQlfZHB1X3BsYW5lX2lubGlu ZV9yb3Rfc2V0X290X2xpbWl0KHBsYW5lLAotCQkJCQlzdGF0ZS0+Y3J0YywgY2ZnLCByb3RfY21k LT5zcmNfcmVjdF93LAotCQkJCQlyb3RfY21kLT5zcmNfcmVjdF9oKTsKLQkJCX0gZWxzZSB7Ci0J CQkJX2RwdV9wbGFuZV9pbmxpbmVfcm90X3NldF9vdF9saW1pdChwbGFuZSwKLQkJCQkJc3RhdGUt PmNydGMsIGNmZywgcm90X2NtZC0+ZHN0X3JlY3RfdywKLQkJCQkJcm90X2NtZC0+ZHN0X3JlY3Rf aCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXQgPSByc3RhdGUtPnJvdF9ody0+b3BzLmNvbW1pdChy c3RhdGUtPnJvdF9odywgcm90X2NtZCwgaHdfY21kKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0 OwotCi0JcnN0YXRlLT5vdXRfcm90YXRpb24gPSByc3RhdGUtPmluX3JvdGF0aW9uOwotCXJzdGF0 ZS0+b3V0X2ZiX2ZsYWdzID0gcm90X2NtZC0+ZHN0X21vZGlmaWVyID8KLQkJCURSTV9NT0RFX0ZC X01PRElGSUVSUyA6IDA7Ci0JcnN0YXRlLT5vdXRfZmJfZm9ybWF0ID0gcm90X2NtZC0+ZHN0X2Zv cm1hdDsKLQlyc3RhdGUtPm91dF9mYl9waXhlbF9mb3JtYXQgPSByb3RfY21kLT5kc3RfcGl4ZWxf Zm9ybWF0OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnN0YXRlLT5vdXRfZmJfbW9k aWZpZXIpOyBpKyspCi0JCXJzdGF0ZS0+b3V0X2ZiX21vZGlmaWVyW2ldID0gcm90X2NtZC0+ZHN0 X21vZGlmaWVyOwotCi0JcnN0YXRlLT5vdXRfZmJfd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcnN0 YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2OwotCXJzdGF0ZS0+b3V0X2ZiX2hlaWdodCA9IGRybV9y ZWN0X2hlaWdodCgmcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2OwotCXJzdGF0ZS0+b3V0X3Ny Y194ID0gcnN0YXRlLT5vdXRfc3JjX3JlY3QueDEgLSByc3RhdGUtPm91dF9yb3RfcmVjdC54MTsK LQlyc3RhdGUtPm91dF9zcmNfeSA9IHJzdGF0ZS0+b3V0X3NyY19yZWN0LnkxIC0gcnN0YXRlLT5v dXRfcm90X3JlY3QueTE7Ci0JcnN0YXRlLT5vdXRfc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcnN0 YXRlLT5vdXRfc3JjX3JlY3QpOwotCXJzdGF0ZS0+b3V0X3NyY19oID0gZHJtX3JlY3RfaGVpZ2h0 KCZyc3RhdGUtPm91dF9zcmNfcmVjdCk7Ci0KLQlpZiAocm90X2NtZC0+cm90OTApCi0JCXJzdGF0 ZS0+b3V0X3JvdGF0aW9uICY9IH5EUk1fTU9ERV9ST1RBVEVfOTA7Ci0KLQlpZiAocm90X2NtZC0+ aGZsaXApCi0JCXJzdGF0ZS0+b3V0X3JvdGF0aW9uICY9IH5EUk1fTU9ERV9SRUZMRUNUX1g7Ci0K LQlpZiAocm90X2NtZC0+dmZsaXApCi0JCXJzdGF0ZS0+b3V0X3JvdGF0aW9uICY9IH5EUk1fTU9E RV9SRUZMRUNUX1k7Ci0KLQlEUFVfREVCVUcoCi0JCSJwbGFuZSVkLiVkIHJvdDolZC8lYyVjJWMl Yy8lZHglZC8lNC40cy8lbGx4LyVkeCVkKyVkKyVkXG4iLAotCQkJcGxhbmUtPmJhc2UuaWQsIHJz dGF0ZS0+c2VxdWVuY2VfaWQsIGh3X2NtZCwKLQkJCXJvdF9jbWQtPnJvdDkwID8gJ3InIDogJ18n LAotCQkJcm90X2NtZC0+aGZsaXAgPyAnaCcgOiAnXycsCi0JCQlyb3RfY21kLT52ZmxpcCA/ICd2 JyA6ICdfJywKLQkJCXJvdF9jbWQtPnZpZGVvX21vZGUgPyAnVicgOiAnQycsCi0JCQlzdGF0ZS0+ ZmItPndpZHRoLCBzdGF0ZS0+ZmItPmhlaWdodCwKLQkJCShjaGFyICopICZzdGF0ZS0+ZmItPmZv cm1hdC0+Zm9ybWF0LAotCQkJc3RhdGUtPmZiLT5tb2RpZmllciwKLQkJCWRybV9yZWN0X3dpZHRo KCZyc3RhdGUtPmluX3JvdF9yZWN0KSA+PiAxNiwKLQkJCWRybV9yZWN0X2hlaWdodCgmcnN0YXRl LT5pbl9yb3RfcmVjdCkgPj4gMTYsCi0JCQlyc3RhdGUtPmluX3JvdF9yZWN0LngxID4+IDE2LAot CQkJcnN0YXRlLT5pbl9yb3RfcmVjdC55MSA+PiAxNik7Ci0KLQlEUFVfREVCVUcoInBsYW5lJWQu JWQgc3NwcDolZC8leC8lZHglZC8lNC40cy8lbGx4LyVkeCVkKyVkKyVkXG4iLAotCQkJcGxhbmUt PmJhc2UuaWQsIHJzdGF0ZS0+c2VxdWVuY2VfaWQsIGh3X2NtZCwKLQkJCXJzdGF0ZS0+b3V0X3Jv dGF0aW9uLAotCQkJcnN0YXRlLT5vdXRfZmJfd2lkdGgsIHJzdGF0ZS0+b3V0X2ZiX2hlaWdodCwK LQkJCShjaGFyICopICZyc3RhdGUtPm91dF9mYl9waXhlbF9mb3JtYXQsCi0JCQlyc3RhdGUtPm91 dF9mYl9tb2RpZmllclswXSwKLQkJCXJzdGF0ZS0+b3V0X3NyY193ID4+IDE2LCByc3RhdGUtPm91 dF9zcmNfaCA+PiAxNiwKLQkJCXJzdGF0ZS0+b3V0X3NyY194ID4+IDE2LCByc3RhdGUtPm91dF9z cmNfeSA+PiAxNik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIF9kcHVfcGxhbmVfcm90 X2dldF9mYiAtIGF0dGVtcHQgdG8gZ2V0IHByZXZpb3VzbHkgYWxsb2NhdGVkIGZiL2ZibwotICoJ SWYgYW4gZmIvZmJvIHdhcyBhbHJlYWR5IGNyZWF0ZWQsIGVpdGhlciBmcm9tIGEgcHJldmlvdXMg ZnJhbWUgb3IKLSAqCWZyb20gYW5vdGhlciBwbGFuZSBpbiB0aGUgY3VycmVudCBjb21taXQgY3lj bGUsIGF0dGVtcHQgdG8gcmV1c2UKLSAqCWl0IGZvciB0aGlzIGNvbW1pdCBjeWNsZSBhcyB3ZWxs LgotICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQotICogQGNzdGF0ZTogUG9pbnRlciB0 byBjcnRjIHN0YXRlCi0gKiBAcnN0YXRlOiBQb2ludGVyIHRvIHJvdGF0b3IgcGxhbmUgc3RhdGUK LSAqLwotc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9yb3RfZ2V0X2ZiKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAotCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNzdGF0ZSwKLQkJc3RydWN0IGRwdV9w bGFuZV9yb3Rfc3RhdGUgKnJzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X2ttc19mYm8gKmZibzsKLQlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKLQotCWlmICghcGxhbmUgfHwgIWNzdGF0ZSB8fCAh cnN0YXRlIHx8ICFyc3RhdGUtPnJvdF9odykKLQkJcmV0dXJuOwotCi0JZmJvID0gZHB1X2NydGNf cmVzX2dldChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCTywKLQkJCSh1NjQpICZyc3Rh dGUtPnJvdF9ody0+YmFzZSk7Ci0JZmIgPSBkcHVfY3J0Y19yZXNfZ2V0KGNzdGF0ZSwgRFBVX0NS VENfUkVTX1JPVF9PVVRfRkIsCi0JCQkodTY0KSAmcnN0YXRlLT5yb3RfaHctPmJhc2UpOwotCWlm IChmYiAmJiBmYm8pIHsKLQkJRFBVX0RFQlVHKCJwbGFuZSVkLiVkIGdldCBmYi9mYm9cbiIsIHBs YW5lLT5iYXNlLmlkLAotCQkJCXJzdGF0ZS0+c2VxdWVuY2VfaWQpOwotCX0gZWxzZSBpZiAoZmJv KSB7Ci0JCWRwdV9jcnRjX3Jlc19wdXQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQk8s Ci0JCQkJKHU2NCkgJnJzdGF0ZS0+cm90X2h3LT5iYXNlKTsKLQkJZmJvID0gTlVMTDsKLQl9IGVs c2UgaWYgKGZiKSB7Ci0JCWRwdV9jcnRjX3Jlc19wdXQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNfUk9U X09VVF9GQiwKLQkJCQkodTY0KSAmcnN0YXRlLT5yb3RfaHctPmJhc2UpOwotCQlmYiA9IE5VTEw7 Ci0JfQotCi0JcnN0YXRlLT5vdXRfZmJvID0gZmJvOwotCXJzdGF0ZS0+b3V0X2ZiID0gZmI7Ci19 Ci0KLS8qKgotICogZHB1X3BsYW5lX3JvdF9wcmVwYXJlX2ZiIC0gcHJlcGFyZSBmcmFtZWJ1ZmZl ciBvZiB0aGUgbmV3IHN0YXRlCi0gKglmb3Igcm90YXRvciAocHJlLXNzcHApIHN0YWdlCi0gKiBA cGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCi0gKiBAbmV3X3N0YXRlOiBQb2ludGVyIHRvIG5l dyBkcm0gcGxhbmUgc3RhdGUKLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90 aGVyd2lzZQotICovCi1zdGF0aWMgaW50IGRwdV9wbGFuZV9yb3RfcHJlcGFyZV9mYihzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKLQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQot ewotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gbmV3X3N0YXRlLT5mYjsKLQlzdHJ1Y3Qg ZHB1X3BsYW5lX3N0YXRlICpuZXdfcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKG5ld19zdGF0 ZSk7Ci0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKm5ld19yc3RhdGUgPSAmbmV3X3BzdGF0 ZS0+cm90OwotCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlOwotCWludCByZXQ7Ci0KLQlE UFVfREVCVUcoInBsYW5lJWQuJWQgRkJbJXVdIHNidWY6JWQgcm90OiVkIGNydGM6JWRcbiIsCi0J CQlwbGFuZS0+YmFzZS5pZCwKLQkJCW5ld19yc3RhdGUtPnNlcXVlbmNlX2lkLCBmYiA/IGZiLT5i YXNlLmlkIDogMCwKLQkJCSEhbmV3X3JzdGF0ZS0+b3V0X3NidWYsICEhbmV3X3JzdGF0ZS0+cm90 X2h3LAotCQkJZHB1X3BsYW5lX2NydGNfZW5hYmxlZChuZXdfc3RhdGUpKTsKLQotCWlmICghbmV3 X3JzdGF0ZS0+b3V0X3NidWYgfHwgIW5ld19yc3RhdGUtPnJvdF9odykKLQkJcmV0dXJuIDA7Ci0K LQljc3RhdGUgPSBfZHB1X3BsYW5lX2dldF9jcnRjX3N0YXRlKG5ld19zdGF0ZSk7Ci0JaWYgKElT X0VSUihjc3RhdGUpKSB7Ci0JCXJldCA9IFBUUl9FUlIoY3N0YXRlKTsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIGNydGMgc3RhdGUgJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyog bmVlZCB0byByZS1jYWxjIGJhc2VkIG9uIGFsbCBuZXdseSB2YWxpZGF0ZWQgcGxhbmUgc3RhdGVz ICovCi0JcmV0ID0gZHB1X3BsYW5lX3JvdF9jYWxjX2NmZyhwbGFuZSwgbmV3X3N0YXRlKTsKLQlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogY2hlY2sgaWYgc3RyZWFtIGJ1ZmZlciBpcyBh bHJlYWR5IGF0dGFjaGVkIHRvIHJvdGF0b3IgKi8KLQlpZiAoZHB1X3BsYW5lX2VuYWJsZWQobmV3 X3N0YXRlKSAmJiAhbmV3X3JzdGF0ZS0+b3V0X2ZiKQotCQlfZHB1X3BsYW5lX3JvdF9nZXRfZmIo cGxhbmUsIGNzdGF0ZSwgbmV3X3JzdGF0ZSk7Ci0KLQkvKiBjcmVhdGUgbmV3IHN0cmVhbSBidWZm ZXIgaWYgaXQgaXMgbm90IGF2YWlsYWJsZSAqLwotCWlmIChkcHVfcGxhbmVfZW5hYmxlZChuZXdf c3RhdGUpICYmICFuZXdfcnN0YXRlLT5vdXRfZmIpIHsKLQkJdTMyIGZiX3cgPSBkcm1fcmVjdF93 aWR0aCgmbmV3X3JzdGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNjsKLQkJdTMyIGZiX2ggPSBkcm1f cmVjdF9oZWlnaHQoJm5ld19yc3RhdGUtPm91dF9yb3RfcmVjdCkgPj4gMTY7Ci0KLQkJRFBVX0RF QlVHKCJwbGFuZSVkLiVkIGFsbG9jYXRlIGZiL2Zib1xuIiwgcGxhbmUtPmJhc2UuaWQsCi0JCQkJ bmV3X3JzdGF0ZS0+c2VxdWVuY2VfaWQpOwotCi0JCS8qIGNoZWNrIGlmIG91dF9mYiBpcyBhbHJl YWR5IGF0dGFjaGVkIHRvIHJvdGF0b3IgKi8KLQkJbmV3X3JzdGF0ZS0+b3V0X2ZibyA9IGRwdV9r bXNfZmJvX2FsbG9jKHBsYW5lLT5kZXYsIGZiX3csIGZiX2gsCi0JCQkJbmV3X3JzdGF0ZS0+b3V0 X2ZiX3BpeGVsX2Zvcm1hdCwKLQkJCQluZXdfcnN0YXRlLT5vdXRfZmJfbW9kaWZpZXIsCi0JCQkJ bmV3X3JzdGF0ZS0+b3V0X2ZiX2ZsYWdzKTsKLQkJaWYgKCFuZXdfcnN0YXRlLT5vdXRfZmJvKSB7 Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBpbmxpbmUgYnVmZmVyIG9iamVjdFxu Iik7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBlcnJvcl9jcmVhdGVfZmJvOwotCQl9Ci0K LQkJcmV0ID0gZHB1X2NydGNfcmVzX2FkZChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZC TywKLQkJCQkodTY0KSAmbmV3X3JzdGF0ZS0+cm90X2h3LT5iYXNlLAotCQkJCW5ld19yc3RhdGUt Pm91dF9mYm8sICZmYm9fcmVzX29wcyk7Ci0JCWlmIChyZXQpIHsKLQkJCURQVV9FUlJPUigiZmFp bGVkIHRvIGFkZCBjcnRjIHJlc291cmNlXG4iKTsKLQkJCWdvdG8gZXJyb3JfY3JlYXRlX2Zib19y ZXM7Ci0JCX0KLQotCQluZXdfcnN0YXRlLT5vdXRfZmIgPSBkcHVfa21zX2Zib19jcmVhdGVfZmIo cGxhbmUtPmRldiwKLQkJCQluZXdfcnN0YXRlLT5vdXRfZmJvKTsKLQkJaWYgKCFuZXdfcnN0YXRl LT5vdXRfZmIpIHsKLQkJCURQVV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBpbmxpbmUgZnJhbWVi dWZmZXJcbiIpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3JfY3JlYXRlX2ZiOwot CQl9Ci0JCURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKHBsYW5lKSwgbmV3X3JzdGF0ZS0+c2VxdWVu Y2VfaWQsCi0JCQkJbmV3X3JzdGF0ZS0+b3V0X2ZiLT5iYXNlLmlkKTsKLQotCQlyZXQgPSBkcHVf Y3J0Y19yZXNfYWRkKGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9PVVRfRkIsCi0JCQkJKHU2NCkg Jm5ld19yc3RhdGUtPnJvdF9ody0+YmFzZSwKLQkJCQluZXdfcnN0YXRlLT5vdXRfZmIsICZmYl9y ZXNfb3BzKTsKLQkJaWYgKHJldCkgewotCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWRkIGNydGMg cmVzb3VyY2UgJWRcbiIsIHJldCk7Ci0JCQlnb3RvIGVycm9yX2NyZWF0ZV9mYl9yZXM7Ci0JCX0K LQl9Ci0KLQkvKiBwcmVwYXJlIHJvdGF0b3IgaW5wdXQgYnVmZmVyICovCi0JcmV0ID0gbXNtX2Zy YW1lYnVmZmVyX3ByZXBhcmUobmV3X3N0YXRlLT5mYiwgbmV3X3BzdGF0ZS0+YXNwYWNlKTsKLQlp ZiAocmV0KSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIHByZXBhcmUgaW5wdXQgZnJhbWVidWZm ZXIsICVkXG4iLCByZXQpOwotCQlnb3RvIGVycm9yX3ByZXBhcmVfaW5wdXRfYnVmZmVyOwotCX0K LQotCS8qIHByZXBhcmUgcm90YXRvciBvdXRwdXQgYnVmZmVyICovCi0JaWYgKGRwdV9wbGFuZV9l bmFibGVkKG5ld19zdGF0ZSkgJiYgbmV3X3JzdGF0ZS0+b3V0X2ZiKSB7Ci0JCURQVV9ERUJVRygi cGxhbmUlZC4lZCBwcmVwYXJlIGZiL2Zib1xuIiwgcGxhbmUtPmJhc2UuaWQsCi0JCQkJbmV3X3Jz dGF0ZS0+c2VxdWVuY2VfaWQpOwotCi0JCXJldCA9IG1zbV9mcmFtZWJ1ZmZlcl9wcmVwYXJlKG5l d19yc3RhdGUtPm91dF9mYiwKLQkJCQluZXdfcHN0YXRlLT5hc3BhY2UpOwotCQlpZiAocmV0KSB7 Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBwcmVwYXJlIGlubGluZSBmcmFtZWJ1ZmZlciwgJWRc biIsCi0JCQkJCXJldCk7Ci0JCQlnb3RvIGVycm9yX3ByZXBhcmVfb3V0cHV0X2J1ZmZlcjsKLQkJ fQotCX0KLQotCXJldHVybiAwOwotCi1lcnJvcl9wcmVwYXJlX291dHB1dF9idWZmZXI6Ci0JbXNt X2ZyYW1lYnVmZmVyX2NsZWFudXAobmV3X3N0YXRlLT5mYiwgbmV3X3BzdGF0ZS0+YXNwYWNlKTsK LWVycm9yX3ByZXBhcmVfaW5wdXRfYnVmZmVyOgotCWRwdV9jcnRjX3Jlc19wdXQoY3N0YXRlLCBE UFVfQ1JUQ19SRVNfUk9UX09VVF9GQiwKLQkJCSh1NjQpICZuZXdfcnN0YXRlLT5yb3RfaHctPmJh c2UpOwotZXJyb3JfY3JlYXRlX2ZiX3JlczoKLQluZXdfcnN0YXRlLT5vdXRfZmIgPSBOVUxMOwot ZXJyb3JfY3JlYXRlX2ZiOgotCWRwdV9jcnRjX3Jlc19wdXQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNf Uk9UX09VVF9GQk8sCi0JCQkodTY0KSAmbmV3X3JzdGF0ZS0+cm90X2h3LT5iYXNlKTsKLWVycm9y X2NyZWF0ZV9mYm9fcmVzOgotCW5ld19yc3RhdGUtPm91dF9mYm8gPSBOVUxMOwotZXJyb3JfY3Jl YXRlX2ZibzoKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGRwdV9wbGFuZV9yb3RfY2xlYW51 cF9mYiAtIGNsZWFudXAgZnJhbWVidWZmZXIgb2YgcHJldmlvdXMgc3RhdGUgZm9yIHRoZQotICoJ cm90YXRvciAocHJlLXNzcHApIHN0YWdlCi0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5l Ci0gKiBAb2xkX3N0YXRlOiBQb2ludGVyIHRvIHByZXZpb3VzIGRybSBwbGFuZSBzdGF0ZQotICog cmV0dXJuOiBub25lCi0gKi8KLXN0YXRpYyB2b2lkIGRwdV9wbGFuZV9yb3RfY2xlYW51cF9mYihz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0 YXRlKQotewotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKm9sZF9wc3RhdGUgPSB0b19kcHVfcGxh bmVfc3RhdGUob2xkX3N0YXRlKTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqb2xkX3Jz dGF0ZSA9ICZvbGRfcHN0YXRlLT5yb3Q7Ci0Jc3RydWN0IGRwdV9od19yb3RfY21kICpjbWQgPSAm b2xkX3JzdGF0ZS0+cm90X2NtZDsKLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNzdGF0ZTsKLQlp bnQgcmV0OwotCi0JRFBVX0RFQlVHKCJwbGFuZSVkLiVkIEZCWyV1XSBzYnVmOiVkIHJvdDolZCBj cnRjOiVkXG4iLCBwbGFuZS0+YmFzZS5pZCwKLQkJCW9sZF9yc3RhdGUtPnNlcXVlbmNlX2lkLCBv bGRfc3RhdGUtPmZiLT5iYXNlLmlkLAotCQkJISFvbGRfcnN0YXRlLT5vdXRfc2J1ZiwgISFvbGRf cnN0YXRlLT5yb3RfaHcsCi0JCQlkcHVfcGxhbmVfY3J0Y19lbmFibGVkKG9sZF9zdGF0ZSkpOwot Ci0JaWYgKCFvbGRfcnN0YXRlLT5vdXRfc2J1ZiB8fCAhb2xkX3JzdGF0ZS0+cm90X2h3KQotCQly ZXR1cm47Ci0KLQljc3RhdGUgPSBfZHB1X3BsYW5lX2dldF9jcnRjX3N0YXRlKG9sZF9zdGF0ZSk7 Ci0JaWYgKElTX0VSUihjc3RhdGUpKSB7Ci0JCXJldCA9IFBUUl9FUlIoY3N0YXRlKTsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGNydGMgc3RhdGUgJWRcbiIsIHJldCk7Ci0JCXJldHVybjsKLQl9Ci0K LQlpZiAoZHB1X3BsYW5lX2NydGNfZW5hYmxlZChvbGRfc3RhdGUpKSB7Ci0JCXJldCA9IG9sZF9y c3RhdGUtPnJvdF9ody0+b3BzLmNvbW1pdChvbGRfcnN0YXRlLT5yb3RfaHcsIGNtZCwKLQkJCQlE UFVfSFdfUk9UX0NNRF9DTEVBTlVQKTsKLQkJaWYgKHJldCkKLQkJCURQVV9FUlJPUigiZmFpbGVk IHRvIGNsZWFudXAgcm90YXRvciBidWZmZXJzXG4iKTsKLQl9Ci0KLQlpZiAoZHB1X3BsYW5lX2Vu YWJsZWQob2xkX3N0YXRlKSkgewotCQlpZiAob2xkX3JzdGF0ZS0+b3V0X2ZiKSB7Ci0JCQltc21f ZnJhbWVidWZmZXJfY2xlYW51cChvbGRfcnN0YXRlLT5vdXRfZmIsCi0JCQkJCW9sZF9wc3RhdGUt PmFzcGFjZSk7Ci0JCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9P VVRfRkIsCi0JCQkJCSh1NjQpICZvbGRfcnN0YXRlLT5yb3RfaHctPmJhc2UpOwotCQkJb2xkX3Jz dGF0ZS0+b3V0X2ZiID0gTlVMTDsKLQkJCWRwdV9jcnRjX3Jlc19wdXQoY3N0YXRlLCBEUFVfQ1JU Q19SRVNfUk9UX09VVF9GQk8sCi0JCQkJCSh1NjQpICZvbGRfcnN0YXRlLT5yb3RfaHctPmJhc2Up OwotCQkJb2xkX3JzdGF0ZS0+b3V0X2ZibyA9IE5VTEw7Ci0JCX0KLQotCQltc21fZnJhbWVidWZm ZXJfY2xlYW51cChvbGRfc3RhdGUtPmZiLCBvbGRfcHN0YXRlLT5hc3BhY2UpOwotCX0KLX0KLQot LyoqCi0gKiBkcHVfcGxhbmVfcm90X2F0b21pY19jaGVjayAtIHZlcmlmeSByb3RhdG9yIHVwZGF0 ZSBvZiB0aGUgZ2l2ZW4gc3RhdGUKLSAqIEBwbGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUKLSAq IEBzdGF0ZTogUG9pbnRlciB0byBkcm0gcGxhbmUgc3RhdGUgdG8gYmUgdmFsaWRhdGVkCi0gKiBy ZXR1cm46IDAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKLSAqLwotc3RhdGljIGlu dCBkcHVfcGxhbmVfcm90X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJ c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9wbGFuZSAqcGRw dTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUsICpvbGRfcHN0YXRlOwotCXN0cnVj dCBkcHVfcGxhbmVfcm90X3N0YXRlICpyc3RhdGUsICpvbGRfcnN0YXRlOwotCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3N0YXRlOwotCXN0cnVjdCBkcHVfaHdfYmxrICpod19ibGs7Ci0JaW50IGks IHJldCA9IDA7Ci0KLQlpZiAoIXBsYW5lIHx8ICFzdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFs aWQgcGxhbmUvc3RhdGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwZHB1ID0gdG9f ZHB1X3BsYW5lKHBsYW5lKTsKLQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwot CW9sZF9wc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKLQlyc3RhdGUg PSAmcHN0YXRlLT5yb3Q7Ci0Jb2xkX3JzdGF0ZSA9ICZvbGRfcHN0YXRlLT5yb3Q7Ci0KLQkvKiBj c3RhdGUgd2lsbCBiZSBudWxsIGlmIGNydGMgaXMgZGlzY29ubmVjdGVkIGZyb20gcGxhbmUgKi8K LQljc3RhdGUgPSBfZHB1X3BsYW5lX2dldF9jcnRjX3N0YXRlKHN0YXRlKTsKLQlpZiAoSVNfRVJS KGNzdGF0ZSkpIHsKLQkJcmV0ID0gUFRSX0VSUihjc3RhdGUpOwotCQlEUFVfRVJST1IoImludmFs aWQgY3J0YyBzdGF0ZSAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlEUFVfREVC VUcoInBsYW5lJWQuJWQgRkJbJXVdIHNidWY6JWQgcm90OiVkIGNydGM6JWRcbiIsIHBsYW5lLT5i YXNlLmlkLAotCQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCwgc3RhdGUtPmZiID8gc3RhdGUtPmZiLT5i YXNlLmlkIDogMCwKLQkJCSEhcnN0YXRlLT5vdXRfc2J1ZiwgISFyc3RhdGUtPnJvdF9odywKLQkJ CWRwdV9wbGFuZV9jcnRjX2VuYWJsZWQoc3RhdGUpKTsKLQotCXJzdGF0ZS0+aW5fcm90YXRpb24g PSBkcm1fcm90YXRpb25fc2ltcGxpZnkoCi0JCQlkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0 ZSwgUExBTkVfUFJPUF9ST1RBVElPTiksCi0JCQlEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RF X1JPVEFURV85MCB8Ci0JCQlEUk1fTU9ERV9SRUZMRUNUX1ggfCBEUk1fTU9ERV9SRUZMRUNUX1kp OwotCXJzdGF0ZS0+cm90OTAgPSByc3RhdGUtPmluX3JvdGF0aW9uICYgRFJNX01PREVfUk9UQVRF XzkwID8gdHJ1ZSA6IGZhbHNlOwotCXJzdGF0ZS0+aGZsaXAgPSByc3RhdGUtPmluX3JvdGF0aW9u ICYgRFJNX01PREVfUkVGTEVDVF9YID8gdHJ1ZSA6IGZhbHNlOwotCXJzdGF0ZS0+dmZsaXAgPSBy c3RhdGUtPmluX3JvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9ZID8gdHJ1ZSA6IGZhbHNlOwot CXJzdGF0ZS0+b3V0X3NidWYgPSBwZHB1LT5zYnVmX21vZGUgfHwgcnN0YXRlLT5yb3Q5MDsKLQot CWlmIChkcHVfcGxhbmVfZW5hYmxlZChzdGF0ZSkgJiYgcnN0YXRlLT5vdXRfc2J1ZikgewotCQlE UFVfREVCVUcoInBsYW5lJWQuJWQgYWNxdWlyZSByb3RhdG9yLCBmYiAlZFxuIiwKLQkJCQlwbGFu ZS0+YmFzZS5pZCwgcnN0YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCQlzdGF0ZS0+ZmIgPyBzdGF0ZS0+ ZmItPmJhc2UuaWQgOiAtMSk7Ci0KLQkJaHdfYmxrID0gZHB1X2NydGNfcmVzX2dldChjc3RhdGUs IERQVV9IV19CTEtfUk9ULAotCQkJCSh1NjQpIHN0YXRlLT5mYik7Ci0JCWlmICghaHdfYmxrKSB7 Ci0JCQlEUFVfRVJST1IoInBsYW5lJWQuJWQgbm8gYXZhaWxhYmxlIHJvdGF0b3IsIGZiICVkXG4i LAotCQkJCQlwbGFuZS0+YmFzZS5pZCwgcnN0YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCQkJc3RhdGUt PmZiID8gc3RhdGUtPmZiLT5iYXNlLmlkIDogLTEpOwotCQkJRFBVX0VWVDMyKERSTUlEKHBsYW5l KSwgcnN0YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCQkJRFBVX0VWVExPR19FUlJPUik7Ci0JCQlyZXR1 cm4gLUVJTlZBTDsKLQkJfQotCi0JCXJzdGF0ZS0+cm90X2h3ID0gdG9fZHB1X2h3X3JvdChod19i bGspOwotCi0JCWlmICghcnN0YXRlLT5yb3RfaHctPm9wcy5jb21taXQpIHsKLQkJCURQVV9FUlJP UigicGxhbmUlZC4lZCBpbnZhbGlkIHJvdGF0b3Igb3BzXG4iLAotCQkJCQlwbGFuZS0+YmFzZS5p ZCwgcnN0YXRlLT5zZXF1ZW5jZV9pZCk7Ci0JCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwKLQkJ CQkJRFBVX0hXX0JMS19ST1QsICh1NjQpIHN0YXRlLT5mYik7Ci0JCQlyc3RhdGUtPnJvdF9odyA9 IE5VTEw7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXJzdGF0ZS0+aW5fZmIgPSBzdGF0 ZS0+ZmI7Ci0JfSBlbHNlIHsKLQkJcnN0YXRlLT5pbl9mYiA9IE5VTEw7Ci0JCXJzdGF0ZS0+cm90 X2h3ID0gTlVMTDsKLQl9Ci0KLQlpZiAoZHB1X3BsYW5lX2VuYWJsZWQoc3RhdGUpICYmIHJzdGF0 ZS0+b3V0X3NidWYgJiYgcnN0YXRlLT5yb3RfaHcpIHsKLQkJdWludDMyX3QgZmJfaWQ7Ci0KLQkJ ZmJfaWQgPSBzdGF0ZS0+ZmIgPyBzdGF0ZS0+ZmItPmJhc2UuaWQgOiAtMTsKLQkJRFBVX0RFQlVH KCJwbGFuZSVkLiVkIHVzZSByb3RhdG9yLCBmYiAlZFxuIiwKLQkJCQlwbGFuZS0+YmFzZS5pZCwg cnN0YXRlLT5zZXF1ZW5jZV9pZCwgZmJfaWQpOwotCi0JCXJldCA9IGRwdV9wbGFuZV9yb3RfY2Fs Y19jZmcocGxhbmUsIHN0YXRlKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0 ID0gZHB1X3BsYW5lX3JvdF9zdWJtaXRfY29tbWFuZChwbGFuZSwgc3RhdGUsCi0JCQkJRFBVX0hX X1JPVF9DTURfVkFMSURBVEUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlpZiAo cnN0YXRlLT5ucGxhbmUgIT0gb2xkX3JzdGF0ZS0+bnBsYW5lIHx8Ci0JCQkJcnN0YXRlLT5vdXRf eHBvcyAhPSBvbGRfcnN0YXRlLT5vdXRfeHBvcykKLQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BM QU5FX0RJUlRZX0ZPUk1BVCB8Ci0JCQkJRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwotCi0JCS8qIGNo ZWNrIGlmIHN0cmVhbSBidWZmZXIgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byByb3RhdG9yICovCi0J CV9kcHVfcGxhbmVfcm90X2dldF9mYihwbGFuZSwgY3N0YXRlLCByc3RhdGUpOwotCi0JCS8qIHJl bGVhc2UgYnVmZmVyIGlmIG91dHB1dCBmb3JtYXQgY29uZmlndXJhdGlvbiBjaGFuZ2VzICovCi0J CWlmIChyc3RhdGUtPm91dF9mYiAmJgotCQkJKChyc3RhdGUtPm91dF9mYl9oZWlnaHQgIT0gcnN0 YXRlLT5vdXRfZmItPmhlaWdodCkgfHwKLQkJCShyc3RhdGUtPm91dF9mYl93aWR0aCAhPSByc3Rh dGUtPm91dF9mYi0+d2lkdGgpIHx8Ci0JCQkocnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9ybWF0ICE9 Ci0JCQkJCXJzdGF0ZS0+b3V0X2ZiLT5mb3JtYXQtPmZvcm1hdCkgfHwKLQkJCShyc3RhdGUtPm91 dF9mYl9tb2RpZmllclswXSAhPQotCQkJCQlyc3RhdGUtPm91dF9mYi0+bW9kaWZpZXIpIHx8Ci0J CQkocnN0YXRlLT5vdXRfZmJfZmxhZ3MgIT0gcnN0YXRlLT5vdXRfZmItPmZsYWdzKSkpIHsKLQot CQkJRFBVX0RFQlVHKCJwbGFuZSVkLiVkIHJlbGVhc2UgZmIvZmJvXG4iLCBwbGFuZS0+YmFzZS5p ZCwKLQkJCQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCk7Ci0JCQlEUFVfRVZUMzJfVkVSQk9TRShEUk1J RChwbGFuZSksCi0JCQkJCXJzdGF0ZS0+c2VxdWVuY2VfaWQsIGZiX2lkKTsKLQotCQkJZHB1X2Ny dGNfcmVzX3B1dChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCLAotCQkJCQkodTY0KSAm cnN0YXRlLT5yb3RfaHctPmJhc2UpOwotCQkJcnN0YXRlLT5vdXRfZmIgPSBOVUxMOwotCQkJZHB1 X2NydGNfcmVzX3B1dChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCTywKLQkJCQkJKHU2 NCkgJnJzdGF0ZS0+cm90X2h3LT5iYXNlKTsKLQkJCXJzdGF0ZS0+b3V0X2ZibyA9IE5VTEw7Ci0J CX0KLQl9IGVsc2UgewotCi0JCURQVV9ERUJVRygicGxhbmUlZC4lZCBieXBhc3Mgcm90YXRvclxu IiwgcGxhbmUtPmJhc2UuaWQsCi0JCQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCk7Ci0KLQkJLyogYnlw YXNzIHJvdGF0b3IgLSBpbml0aWFsaXplIG91dHB1dCBzZXR0aW5nIGFzIGlucHV0ICovCi0JCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJzdGF0ZS0+b3V0X2ZiX21vZGlmaWVyKTsgaSsrKQot CQkJcnN0YXRlLT5vdXRfZmJfbW9kaWZpZXJbaV0gPSBzdGF0ZS0+ZmIgPwotCQkJCXN0YXRlLT5m Yi0+bW9kaWZpZXIgOiAweDA7Ci0KLQkJaWYgKHN0YXRlLT5mYikgewotCQkJcnN0YXRlLT5vdXRf ZmJfcGl4ZWxfZm9ybWF0ID0gc3RhdGUtPmZiLT5mb3JtYXQtPmZvcm1hdDsKLQkJCXJzdGF0ZS0+ b3V0X2ZiX2ZsYWdzID0gc3RhdGUtPmZiLT5mbGFnczsKLQkJCXJzdGF0ZS0+b3V0X2ZiX3dpZHRo ID0gc3RhdGUtPmZiLT53aWR0aDsKLQkJCXJzdGF0ZS0+b3V0X2ZiX2hlaWdodCA9IHN0YXRlLT5m Yi0+aGVpZ2h0OwotCQl9IGVsc2UgewotCQkJcnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9ybWF0ID0g MHgwOwotCQkJcnN0YXRlLT5vdXRfZmJfZmxhZ3MgPSAweDA7Ci0JCQlyc3RhdGUtPm91dF9mYl93 aWR0aCA9IDA7Ci0JCQlyc3RhdGUtPm91dF9mYl9oZWlnaHQgPSAwOwotCQl9Ci0KLQkJcnN0YXRl LT5vdXRfcm90YXRpb24gPSByc3RhdGUtPmluX3JvdGF0aW9uOwotCQlyc3RhdGUtPm91dF9zcmNf eCA9IHN0YXRlLT5zcmNfeDsKLQkJcnN0YXRlLT5vdXRfc3JjX3kgPSBzdGF0ZS0+c3JjX3k7Ci0J CXJzdGF0ZS0+b3V0X3NyY193ID0gc3RhdGUtPnNyY193OwotCQlyc3RhdGUtPm91dF9zcmNfaCA9 IHN0YXRlLT5zcmNfaDsKLQotCQlyc3RhdGUtPm91dF9mYl9mb3JtYXQgPSBOVUxMOwotCQlyc3Rh dGUtPm91dF9zYnVmID0gZmFsc2U7Ci0JCXJzdGF0ZS0+b3V0X2ZiID0gc3RhdGUtPmZiOwotCX0K LQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZHB1X3BsYW5lX3JvdF9hdG9taWNfdXBkYXRl IC0gcGVyZm9ybSBhdG9taWMgdXBkYXRlIGZvciByb3RhdG9yIHN0YWdlCi0gKiBAcGxhbmU6IFBv aW50ZXIgdG8gZHJtIHBsYW5lCi0gKiBAb2xkX3N0YXRlOiBQb2ludGVyIHRvIHByZXZpb3VzIHN0 YXRlCi0gKiByZXR1cm46IG5vbmUKLSAqLwotc3RhdGljIHZvaWQgZHB1X3BsYW5lX3JvdF9hdG9t aWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQkJCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKm9sZF9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZTsKLQlz dHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3Rh dGUgKnJzdGF0ZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghcGxhbmUgfHwgIXBsYW5lLT5zdGF0 ZSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmUvc3RhdGVcbiIpOwotCQlyZXR1cm47Ci0J fQotCi0Jc3RhdGUgPSBwbGFuZS0+c3RhdGU7Ci0JcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRl KHN0YXRlKTsKLQlyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Ci0KLQlEUFVfREVCVUcoInBsYW5lJWQu JWQgc2J1ZjolZCByb3Q6JWQgY3J0YzolZFxuIiwgcGxhbmUtPmJhc2UuaWQsCi0JCQlyc3RhdGUt PnNlcXVlbmNlX2lkLAotCQkJISFyc3RhdGUtPm91dF9zYnVmLCAhIXJzdGF0ZS0+cm90X2h3LAot CQkJZHB1X3BsYW5lX2NydGNfZW5hYmxlZChwbGFuZS0+c3RhdGUpKTsKLQotCWlmICghZHB1X3Bs YW5lX2NydGNfZW5hYmxlZChzdGF0ZSkpCi0JCXJldHVybjsKLQotCWlmICghcnN0YXRlLT5vdXRf c2J1ZiB8fCAhcnN0YXRlLT5yb3RfaHcpCi0JCXJldHVybjsKLQotCWRwdV9wbGFuZV9yb3Rfc3Vi bWl0X2NvbW1hbmQocGxhbmUsIHN0YXRlLCBEUFVfSFdfUk9UX0NNRF9DT01NSVQpOwotCi0JcmV0 dXJuOwotCi1lcnJvcl9wcmVwYXJlX291dHB1dF9idWZmZXI6Ci0JbXNtX2ZyYW1lYnVmZmVyX2Ns ZWFudXAoc3RhdGUtPmZiLCBwc3RhdGUtPmFzcGFjZSk7Ci19Ci0KLXZvaWQgZHB1X3BsYW5lX2tp Y2tvZmYoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCi17Ci0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0 ZSAqcHN0YXRlOwotCi0JaWYgKCFwbGFuZSB8fCAhcGxhbmUtPnN0YXRlKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBwbGFuZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwc3RhdGUgPSB0b19kcHVf cGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKLQotCWlmICghcHN0YXRlLT5yb3Qucm90X2h3IHx8 ICFwc3RhdGUtPnJvdC5yb3RfaHctPm9wcy5jb21taXQpCi0JCXJldHVybjsKLQotCXBzdGF0ZS0+ cm90LnJvdF9ody0+b3BzLmNvbW1pdChwc3RhdGUtPnJvdC5yb3RfaHcsCi0JCQkmcHN0YXRlLT5y b3Qucm90X2NtZCwKLQkJCURQVV9IV19ST1RfQ01EX1NUQVJUKTsKLX0KLQotLyoqCi0gKiBkcHVf cGxhbmVfcm90X2Rlc3Ryb3lfc3RhdGUgLSBkZXN0cm95IHN0YXRlIGZvciByb3RhdG9yIHN0YWdl Ci0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCi0gKiBAc3RhdGU6IFBvaW50ZXIgdG8g c3RhdGUgdG8gYmUgZGVzdHJveWVkCi0gKiByZXR1cm46IG5vbmUKLSAqLwotc3RhdGljIHZvaWQg ZHB1X3BsYW5lX3JvdF9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQlz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRl ICpwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwotCXN0cnVjdCBkcHVfcGxhbmVf cm90X3N0YXRlICpyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7Ci0KLQlEUFVfREVCVUcoInBsYW5lJWQu JWQgc2J1ZjolZCByb3Q6JWQgY3J0YzolZFxuIiwgcGxhbmUtPmJhc2UuaWQsCi0JCQlyc3RhdGUt PnNlcXVlbmNlX2lkLAotCQkJISFyc3RhdGUtPm91dF9zYnVmLCAhIXJzdGF0ZS0+cm90X2h3LAot CQkJZHB1X3BsYW5lX2NydGNfZW5hYmxlZChzdGF0ZSkpOwotfQotCi0vKioKLSAqIGRwdV9wbGFu ZV9yb3RfZHVwbGljYXRlX3N0YXRlIC0gZHVwbGljYXRlIHN0YXRlIGZvciByb3RhdG9yIHN0YWdl Ci0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCi0gKiBAbmV3X3N0YXRlOiBQb2ludGVy IHRvIGR1cGxpY2F0ZWQgc3RhdGUKLSAqIHJldHVybjogMCBpZiBzdWNjZXNzOyBlcnJvciBjb2Rl IG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50IGRwdV9wbGFuZV9yb3RfZHVwbGljYXRlX3N0YXRl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpuZXdf c3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlICA9IHRvX2RwdV9wbGFu ZV9zdGF0ZShuZXdfc3RhdGUpOwotCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpyc3RhdGUg PSAmcHN0YXRlLT5yb3Q7Ci0KLQlyc3RhdGUtPnNlcXVlbmNlX2lkKys7Ci0KLQlEUFVfREVCVUco InBsYW5lJWQuJWQgc2J1ZjolZCByb3Q6JWRcbiIsIHBsYW5lLT5iYXNlLmlkLAotCQkJcnN0YXRl LT5zZXF1ZW5jZV9pZCwKLQkJCSEhcnN0YXRlLT5vdXRfc2J1ZiwgISFyc3RhdGUtPnJvdF9odyk7 Ci0KLQlyc3RhdGUtPnJvdF9odyA9IE5VTEw7Ci0JcnN0YXRlLT5vdXRfZmIgPSBOVUxMOwotCXJz dGF0ZS0+b3V0X2ZibyA9IE5VTEw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBkcHVfcGxh bmVfcm90X2luc3RhbGxfY2FwcyAtIGluc3RhbGwgcGxhbmUgcm90YXRvciBjYXBhYmlsaXRpZXMK LSAqIEBwbGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUKLSAqIHJldHVybjogbm9uZQotICovCi1z dGF0aWMgdm9pZCBkcHVfcGxhbmVfcm90X2luc3RhbGxfY2FwcyhzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsK LQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCAqZm9ybWF0X2xpc3Q7Ci0Jc3RydWN0 IGRwdV9rbXNfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgZHB1X2h3X3JvdCAqcm90X2h3OwotCWNvbnN0 IGNoYXIgKmRvd25zY2FsZV9jYXBzOwotCi0JaWYgKCFwZHB1LT5jYXRhbG9nIHx8ICEocGRwdS0+ ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfU0JVRikpIHx8Ci0JCQkhcGRwdS0+Y2F0YWxvZy0+cm90 X2NvdW50KQotCQlyZXR1cm47Ci0KLQlpZiAocGRwdS0+YmxvYl9yb3RfY2FwcykKLQkJcmV0dXJu OwotCi0JaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfa21zX2luZm8pLCBHRlBfS0VS TkVMKTsKLQlpZiAoIWluZm8pCi0JCXJldHVybjsKLQotCXJvdF9odyA9IGRwdV9od19yb3RfZ2V0 KE5VTEwpOwotCWlmICghcm90X2h3IHx8ICFyb3RfaHctPm9wcy5nZXRfZm9ybWF0X2NhcHMgfHwK LQkJCSFyb3RfaHctPm9wcy5nZXRfZG93bnNjYWxlX2NhcHMpIHsKLQkJRFBVX0VSUk9SKCJpbnZh bGlkIHJvdGF0b3IgaHdcbiIpOwotCQlnb3RvIGVycm9yX3JvdDsKLQl9Ci0KLQlkcHVfa21zX2lu Zm9fcmVzZXQoaW5mbyk7Ci0KLQlmb3JtYXRfbGlzdCA9IHJvdF9ody0+b3BzLmdldF9mb3JtYXRf Y2Fwcyhyb3RfaHcpOwotCWlmIChmb3JtYXRfbGlzdCkgewotCQlkcHVfa21zX2luZm9fc3RhcnQo aW5mbywgInBpeGVsX2Zvcm1hdHMiKTsKLQkJd2hpbGUgKGZvcm1hdF9saXN0LT5mb3VyY2NfZm9y bWF0KSB7Ci0JCQlkcHVfa21zX2luZm9fYXBwZW5kX2Zvcm1hdChpbmZvLAotCQkJCQlmb3JtYXRf bGlzdC0+Zm91cmNjX2Zvcm1hdCwKLQkJCQkJZm9ybWF0X2xpc3QtPm1vZGlmaWVyKTsKLQkJCSsr Zm9ybWF0X2xpc3Q7Ci0JCX0KLQkJZHB1X2ttc19pbmZvX3N0b3AoaW5mbyk7Ci0JfQotCi0JZG93 bnNjYWxlX2NhcHMgPSByb3RfaHctPm9wcy5nZXRfZG93bnNjYWxlX2NhcHMocm90X2h3KTsKLQlp ZiAoZG93bnNjYWxlX2NhcHMpIHsKLQkJZHB1X2ttc19pbmZvX3N0YXJ0KGluZm8sICJkb3duc2Nh bGVfcmF0aW9zIik7Ci0JCWRwdV9rbXNfaW5mb19hcHBlbmQoaW5mbywgZG93bnNjYWxlX2NhcHMp OwotCQlkcHVfa21zX2luZm9fc3RvcChpbmZvKTsKLQl9Ci0KLQlpZiAocm90X2h3LT5vcHMuZ2V0 X2NhY2hlX3NpemUpCi0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJjYWNoZV9zaXpl IiwKLQkJCQlyb3RfaHctPm9wcy5nZXRfY2FjaGVfc2l6ZShyb3RfaHcpKTsKLQotCWlmIChyb3Rf aHctPm9wcy5nZXRfbWF4bGluZXdpZHRoKQotCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZv LCAibWF4X2xpbmV3aWR0aCIsCi0JCQkJcm90X2h3LT5vcHMuZ2V0X21heGxpbmV3aWR0aChyb3Rf aHcpKTsKLQotCW1zbV9wcm9wZXJ0eV9zZXRfYmxvYigmcGRwdS0+cHJvcGVydHlfaW5mbywgJnBk cHUtPmJsb2Jfcm90X2NhcHMsCi0JCQlpbmZvLT5kYXRhLCBEUFVfS01TX0lORk9fREFUQUxFTihp bmZvKSwKLQkJCVBMQU5FX1BST1BfUk9UX0NBUFNfVjEpOwotCi0JZHB1X2h3X3JvdF9wdXQocm90 X2h3KTsKLWVycm9yX3JvdDoKLQlrZnJlZShpbmZvKTsKLX0KLQotLyoqCi0gKiBkcHVfcGxhbmVf cm90X2luc3RhbGxfcHJvcGVydGllcyAtIGluc3RhbGwgcGxhbmUgcm90YXRvciBwcm9wZXJ0aWVz Ci0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCi0gKiBAY2F0YWxvZzogUG9pbnRlciB0 byBtZHNzIGNvbmZpZ3VyYXRpb24KLSAqIHJldHVybjogbm9uZQotICovCi1zdGF0aWMgdm9pZCBk cHVfcGxhbmVfcm90X2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK LQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nKQotewotCXN0cnVjdCBkcHVfcGxhbmUgKnBk cHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOwotCXVuc2lnbmVkIGxvbmcgc3VwcG9ydGVkX3JvdGF0 aW9ucyA9IERSTV9NT0RFX1JPVEFURV8wIHwKLQkJCURSTV9NT0RFX1JFRkxFQ1RfWCB8IERSTV9N T0RFX1JFRkxFQ1RfWTsKLQotCWlmICghcGxhbmUgfHwgIXBkcHUpIHsKLQkJRFBVX0VSUk9SKCJp bnZhbGlkIHBsYW5lXG4iKTsKLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAoIWNhdGFsb2cpIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGNhdGFsb2dcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKChw ZHB1LT5mZWF0dXJlcyAmIEJJVChEUFVfU1NQUF9TQlVGKSkgJiYgY2F0YWxvZy0+cm90X2NvdW50 KQotCQlzdXBwb3J0ZWRfcm90YXRpb25zIHw9IERSTV9NT0RFX1JPVEFURV8wIHwgRFJNX01PREVf Uk9UQVRFXzkwIHwKLQkJCQlEUk1fTU9ERV9ST1RBVEVfMTgwIHwgRFJNX01PREVfUk9UQVRFXzI3 MDsKLQotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JvdGF0aW9uKCZwZHB1LT5wcm9wZXJ0eV9pbmZv LCBwbGFuZSwKLQkJCURSTV9NT0RFX1JPVEFURV8wLCBzdXBwb3J0ZWRfcm90YXRpb25zLAotCQkJ UExBTkVfUFJPUF9ST1RBVElPTik7Ci0KLQlpZiAoIShwZHB1LT5mZWF0dXJlcyAmIEJJVChEUFVf U1NQUF9TQlVGKSkgfHwgIWNhdGFsb2ctPnJvdF9jb3VudCkKLQkJcmV0dXJuOwotCi0JbXNtX3By b3BlcnR5X2luc3RhbGxfcmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sICJyb3RfZHN0X3giLAot CQkJMCwgMCwgVTY0X01BWCwgMCwgUExBTkVfUFJPUF9ST1RfRFNUX1gpOwotCW1zbV9wcm9wZXJ0 eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAicm90X2RzdF95IiwKLQkJCTAs IDAsIFU2NF9NQVgsIDAsIFBMQU5FX1BST1BfUk9UX0RTVF9ZKTsKLQltc21fcHJvcGVydHlfaW5z dGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywgInJvdF9kc3RfdyIsCi0JCQkwLCAwLCBV NjRfTUFYLCAwLCBQTEFORV9QUk9QX1JPVF9EU1RfVyk7Ci0JbXNtX3Byb3BlcnR5X2luc3RhbGxf cmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sICJyb3RfZHN0X2giLAotCQkJMCwgMCwgVTY0X01B WCwgMCwgUExBTkVfUFJPUF9ST1RfRFNUX0gpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2Io JnBkcHUtPnByb3BlcnR5X2luZm8sICJyb3RfY2Fwc192MSIsCi0JCURSTV9NT0RFX1BST1BfSU1N VVRBQkxFLCBQTEFORV9QUk9QX1JPVF9DQVBTX1YxKTsKLX0KLQogdm9pZCBkcHVfcGxhbmVfY2xl YXJfbXVsdGlyZWN0KGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKmRybV9zdGF0ZSkKIHsK IAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CkBAIC0yNjA1LDEzICsxMzc1LDExIEBA IGludCBkcHVfcGxhbmVfdmFsaWRhdGVfbXVsdGlyZWN0X3YyKHN0cnVjdCBkcHVfbXVsdGlyZWN0 X3BsYW5lX3N0YXRlcyAqcGxhbmUpCiAgKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lIHN0 cnVjdHVyZQogICogQGN0bDogUG9pbnRlciB0byBoYXJkd2FyZSBjb250cm9sIGRyaXZlcgogICog QGZsdXNoX3NzcHA6IFBvaW50ZXIgdG8gc3NwcCBmbHVzaCBjb250cm9sIHdvcmQKLSAqIEBmbHVz aF9yb3Q6IFBvaW50ZXIgdG8gcm90YXRvciBmbHVzaCBjb250cm9sIHdvcmQKICAqLwogdm9pZCBk cHVfcGxhbmVfZ2V0X2N0bF9mbHVzaChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRw dV9od19jdGwgKmN0bCwKLQkJdTMyICpmbHVzaF9zc3BwLCB1MzIgKmZsdXNoX3JvdCkKKwkJdTMy ICpmbHVzaF9zc3BwKQogewogCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQlzdHJ1 Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlOwogCiAJaWYgKCFwbGFuZSB8fCAhZmx1c2hf c3NwcCkgewogCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7CkBAIC0yNjE5LDE3 ICsxMzg3LDggQEAgdm9pZCBkcHVfcGxhbmVfZ2V0X2N0bF9mbHVzaChzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwgc3RydWN0IGRwdV9od19jdGwgKmN0bCwKIAl9CiAKIAlwc3RhdGUgPSB0b19kcHVf cGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKLQlyc3RhdGUgPSAmcHN0YXRlLT5yb3Q7CiAKIAkq Zmx1c2hfc3NwcCA9IGN0bC0+b3BzLmdldF9iaXRtYXNrX3NzcHAoY3RsLCBkcHVfcGxhbmVfcGlw ZShwbGFuZSkpOwotCi0JaWYgKCFmbHVzaF9yb3QpCi0JCXJldHVybjsKLQotCSpmbHVzaF9yb3Qg PSAweDA7Ci0JaWYgKHJzdGF0ZSAmJiByc3RhdGUtPm91dF9zYnVmICYmIHJzdGF0ZS0+cm90X2h3 ICYmCi0JCQljdGwtPm9wcy5nZXRfYml0bWFza19yb3QpCi0JCWN0bC0+b3BzLmdldF9iaXRtYXNr X3JvdChjdGwsIGZsdXNoX3JvdCwgcnN0YXRlLT5yb3RfaHctPmlkeCk7CiB9CiAKIHN0YXRpYyBp bnQgZHB1X3BsYW5lX3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCkBAIC0yNjM4 LDcgKzEzOTcsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gbmV3X3N0YXRlLT5m YjsKIAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKIAlzdHJ1 Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUobmV3X3N0YXRl KTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqbmV3X3JzdGF0ZTsKIAlzdHJ1Y3QgZHB1 X2h3X2ZtdF9sYXlvdXQgbGF5b3V0OwogCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFz cGFjZTsKIAlzdHJ1Y3QgbXNtX2dlbV9vYmplY3QgKm1zbV9vYmo7CkBAIC0yNjU5LDE2ICsxNDE3 LDggQEAgc3RhdGljIGludCBkcHVfcGxhbmVfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKIAkvKiBjYWNoZSBhc3BhY2UgKi8KIAlwc3RhdGUtPmFzcGFjZSA9IGFzcGFjZTsKIAot CXJldCA9IGRwdV9wbGFuZV9yb3RfcHJlcGFyZV9mYihwbGFuZSwgbmV3X3N0YXRlKTsKLQlpZiAo cmV0KSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRvIHByZXBhcmUgcm90IGZyYW1lYnVmZmVyXG4i KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQluZXdfcnN0YXRlID0gJnRvX2RwdV9wbGFuZV9zdGF0 ZShuZXdfc3RhdGUpLT5yb3Q7Ci0KIAlpZiAocHN0YXRlLT5hc3BhY2UpIHsKLQkJcmV0ID0gbXNt X2ZyYW1lYnVmZmVyX3ByZXBhcmUobmV3X3JzdGF0ZS0+b3V0X2ZiLAorCQlyZXQgPSBtc21fZnJh bWVidWZmZXJfcHJlcGFyZShuZXdfc3RhdGUtPmZiLAogCQkJCXBzdGF0ZS0+YXNwYWNlKTsKIAkJ aWYgKHJldCkgewogCQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gcHJlcGFyZSBmcmFtZWJ1ZmZlclxu Iik7CkBAIC0yNjc4LDcgKzE0MjgsNyBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9wcmVwYXJlX2Zi KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCiAJLyogdmFsaWRhdGUgZnJhbWVidWZmZXIgbGF5 b3V0IGJlZm9yZSBjb21taXQgKi8KIAlyZXQgPSBkcHVfZm9ybWF0X3BvcHVsYXRlX2xheW91dChw c3RhdGUtPmFzcGFjZSwKLQkJCW5ld19yc3RhdGUtPm91dF9mYiwgJmxheW91dCk7CisJCQluZXdf c3RhdGUtPmZiLCAmbGF5b3V0KTsKIAlpZiAocmV0KSB7CiAJCURQVV9FUlJPUl9QTEFORShwZHB1 LCAiZmFpbGVkIHRvIGdldCBmb3JtYXQgbGF5b3V0LCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJl dDsKQEAgLTI2OTgsNyArMTQ0OCw2IEBAIHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9jbGVhbnVwX2Zi KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogewogCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSB0 b19kcHVfcGxhbmUocGxhbmUpOwogCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKm9sZF9wc3RhdGU7 Ci0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKm9sZF9yc3RhdGU7CiAKIAlpZiAoIW9sZF9z dGF0ZSB8fCAhb2xkX3N0YXRlLT5mYikKIAkJcmV0dXJuOwpAQCAtMjcwNywxMSArMTQ1Niw3IEBA IHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9jbGVhbnVwX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAogCiAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJGQlsldV1cbiIsIG9sZF9zdGF0ZS0+ZmItPmJh c2UuaWQpOwogCi0Jb2xkX3JzdGF0ZSA9ICZvbGRfcHN0YXRlLT5yb3Q7Ci0KLQltc21fZnJhbWVi dWZmZXJfY2xlYW51cChvbGRfcnN0YXRlLT5vdXRfZmIsIG9sZF9wc3RhdGUtPmFzcGFjZSk7Ci0K LQlkcHVfcGxhbmVfcm90X2NsZWFudXBfZmIocGxhbmUsIG9sZF9zdGF0ZSk7CisJbXNtX2ZyYW1l YnVmZmVyX2NsZWFudXAob2xkX3N0YXRlLT5mYiwgb2xkX3BzdGF0ZS0+YXNwYWNlKTsKIH0KIAog c3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVja19tb2RlX2NoYW5nZWQoc3Ry dWN0IGRwdV9wbGFuZSAqcGRwdSwKQEAgLTI3MjAsOCArMTQ2NSw2IEBAIHN0YXRpYyB2b2lkIF9k cHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2tfbW9kZV9jaGFuZ2VkKHN0cnVjdCBkcHVfcGxhbmUg KnBkcHUsCiB7CiAJc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlID0gdG9fZHB1X3BsYW5l X3N0YXRlKHN0YXRlKTsKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfcHN0YXRlID0gdG9f ZHB1X3BsYW5lX3N0YXRlKG9sZF9zdGF0ZSk7Ci0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUg KnJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqb2xk X3JzdGF0ZSA9ICZvbGRfcHN0YXRlLT5yb3Q7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIs ICpvbGRfZmI7CiAKIAkvKiBubyBuZWVkIHRvIGNoZWNrIGl0IGFnYWluICovCkBAIC0yNzQwLDEy ICsxNDgzLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVja19tb2Rl X2NoYW5nZWQoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAkJCXBzdGF0ZS0+bXVsdGlyZWN0X21v ZGUgIT0gb2xkX3BzdGF0ZS0+bXVsdGlyZWN0X21vZGUpIHsKIAkJRFBVX0RFQlVHX1BMQU5FKHBk cHUsICJtdWx0aXJlY3QgY29uZmlnIHVwZGF0ZWRcbiIpOwogCQlwc3RhdGUtPmRpcnR5IHw9IERQ VV9QTEFORV9ESVJUWV9BTEw7Ci0JfSBlbHNlIGlmIChyc3RhdGUtPm91dF9zcmNfdyAhPSBvbGRf cnN0YXRlLT5vdXRfc3JjX3cgfHwKLQkJICAgcnN0YXRlLT5vdXRfc3JjX2ggIT0gb2xkX3JzdGF0 ZS0+b3V0X3NyY19oIHx8Ci0JCSAgIHJzdGF0ZS0+b3V0X3NyY194ICE9IG9sZF9yc3RhdGUtPm91 dF9zcmNfeCB8fAotCQkgICByc3RhdGUtPm91dF9zcmNfeSAhPSBvbGRfcnN0YXRlLT5vdXRfc3Jj X3kpIHsKLQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJzcmMgcmVjdCB1cGRhdGVkXG4iKTsKLQkJ cHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7CiAJfSBlbHNlIGlmIChzdGF0 ZS0+Y3J0Y193ICE9IG9sZF9zdGF0ZS0+Y3J0Y193IHx8CiAJCSAgIHN0YXRlLT5jcnRjX2ggIT0g b2xkX3N0YXRlLT5jcnRjX2ggfHwKIAkJICAgc3RhdGUtPmNydGNfeCAhPSBvbGRfc3RhdGUtPmNy dGNfeCB8fApAQCAtMjc2MCw4ICsxNDk3LDggQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zc3Bw X2F0b21pY19jaGVja19tb2RlX2NoYW5nZWQoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAkJcHN0 YXRlLT5kaXJ0eSB8PSBEUFVfUExBTkVfRElSVFlfUkVDVFM7CiAJfQogCi0JZmIgPSByc3RhdGUt Pm91dF9mYjsKLQlvbGRfZmIgPSBvbGRfcnN0YXRlLT5vdXRfZmI7CisJZmIgPSBzdGF0ZS0+ZmI7 CisJb2xkX2ZiID0gb2xkX3N0YXRlLT5mYjsKIAogCWlmICghZmIgfHwgIW9sZF9mYikgewogCQlE UFVfREVCVUdfUExBTkUocGRwdSwgImNhbid0IGNvbXBhcmUgZmIgaGFuZGxlc1xuIik7CkBAIC0y OTExLDcgKzE2NDgsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZHB1X3BsYW5l ICpwZHB1OwogCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQlzdHJ1Y3QgZHB1X3Bs YW5lX3JvdF9zdGF0ZSAqcnN0YXRlOwogCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQ7CiAJ c3RydWN0IGRwdV9yZWN0IHNyYywgZHN0OwogCXVpbnQzMl90IGRlY2lfdywgZGVjaV9oLCBzcmNf ZGVjaV93LCBzcmNfZGVjaV9oOwpAQCAtMjkyNyw3ICsxNjYzLDYgQEAgc3RhdGljIGludCBkcHVf cGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIAlwZHB1 ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKIAlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3Rh dGUpOwotCXJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKIAogCWlmICghcGRwdS0+cGlwZV9zYmxrKSB7 CiAJCURQVV9FUlJPUl9QTEFORShwZHB1LCAiaW52YWxpZCBjYXRhbG9nXG4iKTsKQEAgLTI5Mzks OCArMTY3NCw4IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAogCWRlY2lfaCA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0 YXRlLCBQTEFORV9QUk9QX1ZfREVDSU1BVEUpOwogCiAJLyogc3JjIHZhbHVlcyBhcmUgaW4gUTE2 IGZpeGVkIHBvaW50LCBjb252ZXJ0IHRvIGludGVnZXIgKi8KLQlQT1BVTEFURV9SRUNUKCZzcmMs IHJzdGF0ZS0+b3V0X3NyY194LCByc3RhdGUtPm91dF9zcmNfeSwKLQkJCXJzdGF0ZS0+b3V0X3Ny Y193LCByc3RhdGUtPm91dF9zcmNfaCwgcTE2X2RhdGEpOworCVBPUFVMQVRFX1JFQ1QoJnNyYywg c3RhdGUtPnNyY194LCBzdGF0ZS0+c3JjX3ksIHN0YXRlLT5zcmNfdywKKwkJc3RhdGUtPnNyY19o LCBxMTZfZGF0YSk7CiAJUE9QVUxBVEVfUkVDVCgmZHN0LCBzdGF0ZS0+Y3J0Y194LCBzdGF0ZS0+ Y3J0Y195LCBzdGF0ZS0+Y3J0Y193LAogCQlzdGF0ZS0+Y3J0Y19oLCAhcTE2X2RhdGEpOwogCkBA IC0yOTU3LDE4ICsxNjkyLDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hl Y2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJaWYgKCFkcHVfcGxhbmVfZW5hYmxlZChzdGF0 ZSkpCiAJCWdvdG8gbW9kZXNldF91cGRhdGU7CiAKLQlEUFVfREVCVUcoCi0JCSJwbGFuZSVkLiV1 IHNzcHA6JXgvJWR4JWQvJTQuNHMvJWxseC8lZHglZCslZCslZCBjcnRjOiVkeCVkKyVkKyVkXG4i LAotCQkJcGxhbmUtPmJhc2UuaWQsIHJzdGF0ZS0+c2VxdWVuY2VfaWQsCi0JCQlyc3RhdGUtPm91 dF9yb3RhdGlvbiwKLQkJCXJzdGF0ZS0+b3V0X2ZiX3dpZHRoLCByc3RhdGUtPm91dF9mYl9oZWln aHQsCi0JCQkoY2hhciAqKSAmcnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9ybWF0LAotCQkJcnN0YXRl LT5vdXRfZmJfbW9kaWZpZXJbMF0sCi0JCQlyc3RhdGUtPm91dF9zcmNfdyA+PiAxNiwgcnN0YXRl LT5vdXRfc3JjX2ggPj4gMTYsCi0JCQlyc3RhdGUtPm91dF9zcmNfeCA+PiAxNiwgcnN0YXRlLT5v dXRfc3JjX3kgPj4gMTYsCi0JCQlzdGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0Y19oLAotCQkJc3Rh dGUtPmNydGNfeCwgc3RhdGUtPmNydGNfeSk7Ci0KIAlmbXQgPSB0b19kcHVfZm9ybWF0KG1zbV9m cmFtZWJ1ZmZlcl9mb3JtYXQoc3RhdGUtPmZiKSk7CiAKIAltaW5fc3JjX3NpemUgPSBEUFVfRk9S TUFUX0lTX1lVVihmbXQpID8gMiA6IDE7CkBAIC0yOTgyLDExICsxNzA1LDExIEBAIHN0YXRpYyBp bnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAog CQlyZXQgPSAtRUlOVkFMOwogCiAJLyogY2hlY2sgc3JjIGJvdW5kcyAqLwotCX0gZWxzZSBpZiAo cnN0YXRlLT5vdXRfZmJfd2lkdGggPiBNQVhfSU1HX1dJRFRIIHx8Ci0JCXJzdGF0ZS0+b3V0X2Zi X2hlaWdodCA+IE1BWF9JTUdfSEVJR0hUIHx8CisJfSBlbHNlIGlmIChzdGF0ZS0+ZmItPndpZHRo ID4gTUFYX0lNR19XSURUSCB8fAorCQlzdGF0ZS0+ZmItPmhlaWdodCA+IE1BWF9JTUdfSEVJR0hU IHx8CiAJCXNyYy53IDwgbWluX3NyY19zaXplIHx8IHNyYy5oIDwgbWluX3NyY19zaXplIHx8Ci0J CUNIRUNLX0xBWUVSX0JPVU5EUyhzcmMueCwgc3JjLncsIHJzdGF0ZS0+b3V0X2ZiX3dpZHRoKSB8 fAotCQlDSEVDS19MQVlFUl9CT1VORFMoc3JjLnksIHNyYy5oLCByc3RhdGUtPm91dF9mYl9oZWln aHQpKSB7CisJCUNIRUNLX0xBWUVSX0JPVU5EUyhzcmMueCwgc3JjLncsIHN0YXRlLT5mYi0+d2lk dGgpIHx8CisJCUNIRUNLX0xBWUVSX0JPVU5EUyhzcmMueSwgc3JjLmgsIHN0YXRlLT5mYi0+aGVp Z2h0KSkgewogCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImludmFsaWQgc291cmNlICV1LCAldSwg JXV4JXVcbiIsCiAJCQlzcmMueCwgc3JjLnksIHNyYy53LCBzcmMuaCk7CiAJCXJldCA9IC1FMkJJ RzsKQEAgLTMwNDEsOCArMTc2NCw4IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWlj X2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJc3JjX2RlY2lfdywgc3JjX2RlY2lf aCwgZHN0LncsIGRzdC5oKTsKIAkJcmV0ID0gLUUyQklHOwogCX0gZWxzZSBpZiAoX2RwdV9wbGFu ZV92YWxpZGF0ZV9zY2FsZXJfdjIocGRwdSwgcHN0YXRlLCBmbXQsCi0JCQkJcnN0YXRlLT5vdXRf ZmJfd2lkdGgsCi0JCQkJcnN0YXRlLT5vdXRfZmJfaGVpZ2h0LAorCQkJCXN0YXRlLT5mYi0+d2lk dGgsCisJCQkJc3RhdGUtPmZiLT5oZWlnaHQsCiAJCQkJc3JjLncsIHNyYy5oLCBkZWNpX3csIGRl Y2lfaCkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CkBAIC0zMDk5LDEwICsxODIyLDYgQEAgc3Rh dGljIGludCBkcHVfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAog CiAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwogCi0JcmV0ID0gZHB1X3BsYW5lX3JvdF9h dG9taWNfY2hlY2socGxhbmUsIHN0YXRlKTsKLQlpZiAocmV0KQotCQlnb3RvIGV4aXQ7Ci0KIAly ZXQgPSBkcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2socGxhbmUsIHN0YXRlKTsKIAogZXhpdDoK QEAgLTMxNjcsNyArMTg4Niw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3Vw ZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpz dGF0ZTsKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7CiAJc3RydWN0IGRwdV9wbGFu ZV9zdGF0ZSAqb2xkX3BzdGF0ZTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRl OwogCWNvbnN0IHN0cnVjdCBkcHVfZm9ybWF0ICpmbXQ7CiAJc3RydWN0IGRybV9jcnRjICpjcnRj OwogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwpAQCAtMzE5MCwxMiArMTkwOCwxMSBAQCBz dGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCiAJc3RhdGUgPSBwbGFuZS0+c3RhdGU7CiAKIAlwc3RhdGUgPSB0b19kcHVfcGxhbmVf c3RhdGUoc3RhdGUpOwotCXJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKIAogCW9sZF9wc3RhdGUgPSB0 b19kcHVfcGxhbmVfc3RhdGUob2xkX3N0YXRlKTsKIAogCWNydGMgPSBzdGF0ZS0+Y3J0YzsKLQlm YiA9IHJzdGF0ZS0+b3V0X2ZiOworCWZiID0gc3RhdGUtPmZiOwogCWlmICghY3J0YyB8fCAhZmIp IHsKIAkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICJpbnZhbGlkIGNydGMgJWQgb3IgZmIgJWRcbiIs CiAJCQkJY3J0YyAhPSAwLCBmYiAhPSAwKTsKQEAgLTMyMDQsMTggKzE5MjEsNiBAQCBzdGF0aWMg aW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CiAJZm10ID0gdG9fZHB1X2Zvcm1hdChtc21fZnJhbWVidWZmZXJfZm9ybWF0KGZiKSk7CiAJbnBs YW5lcyA9IGZtdC0+bnVtX3BsYW5lczsKIAotCURQVV9ERUJVRygKLQkJInBsYW5lJWQuJWQgc3Nw cDolZHglZC8lNC40cy8lbGx4LyVkeCVkKyVkKyVkLyV4IGNydGM6JWR4JWQrJWQrJWRcbiIsCi0J CQlwbGFuZS0+YmFzZS5pZCwgcnN0YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCXJzdGF0ZS0+b3V0X2Zi X3dpZHRoLCByc3RhdGUtPm91dF9mYl9oZWlnaHQsCi0JCQkoY2hhciAqKSAmcnN0YXRlLT5vdXRf ZmJfcGl4ZWxfZm9ybWF0LAotCQkJcnN0YXRlLT5vdXRfZmJfbW9kaWZpZXJbMF0sCi0JCQlyc3Rh dGUtPm91dF9zcmNfdyA+PiAxNiwgcnN0YXRlLT5vdXRfc3JjX2ggPj4gMTYsCi0JCQlyc3RhdGUt Pm91dF9zcmNfeCA+PiAxNiwgcnN0YXRlLT5vdXRfc3JjX3kgPj4gMTYsCi0JCQlyc3RhdGUtPm91 dF9yb3RhdGlvbiwKLQkJCXN0YXRlLT5jcnRjX3csIHN0YXRlLT5jcnRjX2gsCi0JCQlzdGF0ZS0+ Y3J0Y194LCBzdGF0ZS0+Y3J0Y195KTsKLQogCS8qIGZvcmNlIHJlcHJvZ3JhbW1pbmcgb2YgYWxs IHRoZSBwYXJhbWV0ZXJzLCBpZiB0aGUgZmxhZyBpcyBzZXQgKi8KIAlpZiAocGRwdS0+cmV2YWxp ZGF0ZSkgewogCQlEUFVfREVCVUcoInBsYW5lOiVkIC0gcmVjb25maWd1cmUgYWxsIHRoZSBwYXJh bWV0ZXJzXG4iLApAQCAtMzI0Nyw5ICsxOTUyLDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3Nw cF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJLyogcG90ZW50aWFs bHkgbmVlZCB0byByZWZyZXNoIGV2ZXJ5dGhpbmcgKi8KIAkJCXBzdGF0ZS0+ZGlydHkgPSBEUFVf UExBTkVfRElSVFlfQUxMOwogCQkJYnJlYWs7Ci0JCWNhc2UgUExBTkVfUFJPUF9ST1RBVElPTjoK LQkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0ZPUk1BVDsKLQkJCWJyZWFrOwog CQljYXNlIFBMQU5FX1BST1BfSU5GTzoKIAkJY2FzZSBQTEFORV9QUk9QX0FMUEhBOgogCQljYXNl IFBMQU5FX1BST1BfQkxFTkRfT1A6CkBAIC0zMjU5LDEyICsxOTYxLDYgQEAgc3RhdGljIGludCBk cHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQlj YXNlIFBMQU5FX1BST1BfUFJFRklMTF9USU1FOgogCQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVfUExB TkVfRElSVFlfUEVSRjsKIAkJCWJyZWFrOwotCQljYXNlIFBMQU5FX1BST1BfUk9UX0RTVF9YOgot CQljYXNlIFBMQU5FX1BST1BfUk9UX0RTVF9ZOgotCQljYXNlIFBMQU5FX1BST1BfUk9UX0RTVF9X OgotCQljYXNlIFBMQU5FX1BST1BfUk9UX0RTVF9IOgotCQkJLyogaGFuZGxlZCBieSByb3RhdG9y IGF0b21pYyB1cGRhdGUgKi8KLQkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogdW5rbm93biBw cm9wZXJ0eSwgcmVmcmVzaCBldmVyeXRoaW5nICovCiAJCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9Q TEFORV9ESVJUWV9BTEw7CkBAIC0zMjk5LDggKzE5OTUsOCBAQCBzdGF0aWMgaW50IGRwdV9wbGFu ZV9zc3BwX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIAkvKiB1cGRh dGUgcm9pIGNvbmZpZyAqLwogCWlmIChwc3RhdGUtPmRpcnR5ICYgRFBVX1BMQU5FX0RJUlRZX1JF Q1RTKSB7Ci0JCVBPUFVMQVRFX1JFQ1QoJnNyYywgcnN0YXRlLT5vdXRfc3JjX3gsIHJzdGF0ZS0+ b3V0X3NyY195LAotCQkJcnN0YXRlLT5vdXRfc3JjX3csIHJzdGF0ZS0+b3V0X3NyY19oLCBxMTZf ZGF0YSk7CisJCVBPUFVMQVRFX1JFQ1QoJnNyYywgc3RhdGUtPnNyY194LCBzdGF0ZS0+c3JjX3ks CisJCQlzdGF0ZS0+c3JjX3csIHN0YXRlLT5zcmNfaCwgcTE2X2RhdGEpOwogCQlQT1BVTEFURV9S RUNUKCZkc3QsIHN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3ksCiAJCQlzdGF0ZS0+Y3J0Y193 LCBzdGF0ZS0+Y3J0Y19oLCAhcTE2X2RhdGEpOwogCkBAIC0zMzcwLDExICsyMDY2LDYgQEAgc3Rh dGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAogCWlmICgocHN0YXRlLT5kaXJ0eSAmIERQVV9QTEFORV9ESVJUWV9GT1JNQVQpICYmCiAJ CQlwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfZm9ybWF0KSB7CiAJCXNyY19mbGFncyA9IDB4MDsK LQkJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJyb3RhdGlvbiAweCVYXG4iLCByc3RhdGUtPm91dF9y b3RhdGlvbik7Ci0JCWlmIChyc3RhdGUtPm91dF9yb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1Rf WCkKLQkJCXNyY19mbGFncyB8PSBEUFVfU1NQUF9GTElQX0xSOwotCQlpZiAocnN0YXRlLT5vdXRf cm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1kpCi0JCQlzcmNfZmxhZ3MgfD0gRFBVX1NTUFBf RkxJUF9VRDsKIAogCQkvKiB1cGRhdGUgZm9ybWF0ICovCiAJCXBkcHUtPnBpcGVfaHctPm9wcy5z ZXR1cF9mb3JtYXQocGRwdS0+cGlwZV9odywgZm10LCBzcmNfZmxhZ3MsCkBAIC0zMzk3LDM4ICsy MDg4LDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAogCQkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX2NkcChwZHB1LT5w aXBlX2h3LCBjZHBfY2ZnKTsKIAkJfQogCi0JCWlmIChwZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBf c3lzX2NhY2hlKSB7Ci0JCQlpZiAocnN0YXRlLT5vdXRfc2J1ZiAmJiByc3RhdGUtPnJvdF9odykg ewotCQkJCWlmIChyc3RhdGUtPm5wbGFuZSA8IDIpCi0JCQkJCXBzdGF0ZS0+c2NfY2ZnLm9wX21v ZGUgPQotCQkJCQlEUFVfUElQRV9TQ19PUF9NT0RFX0lOTElORV9TSU5HTEU7Ci0JCQkJZWxzZSBp ZiAocnN0YXRlLT5vdXRfeHBvcyA9PSAwKQotCQkJCQlwc3RhdGUtPnNjX2NmZy5vcF9tb2RlID0K LQkJCQkJCURQVV9QSVBFX1NDX09QX01PREVfSU5MSU5FX0xFRlQ7Ci0JCQkJZWxzZQotCQkJCQlw c3RhdGUtPnNjX2NmZy5vcF9tb2RlID0KLQkJCQkJRFBVX1BJUEVfU0NfT1BfTU9ERV9JTkxJTkVf UklHSFQ7Ci0KLQkJCQlwc3RhdGUtPnNjX2NmZy5yZF9lbiA9IHRydWU7Ci0JCQkJcHN0YXRlLT5z Y19jZmcucmRfc2NpZCA9Ci0JCQkJCQlyc3RhdGUtPnJvdF9ody0+Y2Fwcy0+c2NpZDsKLQkJCQlw c3RhdGUtPnNjX2NmZy5yZF9ub2FsbG9jYXRlID0gdHJ1ZTsKLQkJCQlwc3RhdGUtPnNjX2NmZy5y ZF9vcF90eXBlID0KLQkJCQkJRFBVX1BJUEVfU0NfUkRfT1BfVFlQRV9DQUNIRUFCTEU7Ci0JCQl9 IGVsc2UgewotCQkJCXBzdGF0ZS0+c2NfY2ZnLm9wX21vZGUgPQotCQkJCQkJRFBVX1BJUEVfU0Nf T1BfTU9ERV9PRkZMSU5FOwotCQkJCXBzdGF0ZS0+c2NfY2ZnLnJkX2VuID0gZmFsc2U7Ci0JCQkJ cHN0YXRlLT5zY19jZmcucmRfc2NpZCA9IDA7Ci0JCQkJcHN0YXRlLT5zY19jZmcucmRfbm9hbGxv Y2F0ZSA9IHRydWU7Ci0JCQkJcHN0YXRlLT5zY19jZmcucmRfb3BfdHlwZSA9Ci0JCQkJCURQVV9Q SVBFX1NDX1JEX09QX1RZUEVfQ0FDSEVBQkxFOwotCQkJfQotCi0JCQlwZHB1LT5waXBlX2h3LT5v cHMuc2V0dXBfc3lzX2NhY2hlKAotCQkJCQlwZHB1LT5waXBlX2h3LCAmcHN0YXRlLT5zY19jZmcp OwotCQl9Ci0KIAkJLyogdXBkYXRlIGNzYyAqLwogCQlpZiAoRFBVX0ZPUk1BVF9JU19ZVVYoZm10 KSkKIAkJCV9kcHVfcGxhbmVfc2V0dXBfY3NjKHBkcHUpOwpAQCAtMzUyMSw4ICsyMTgwLDYgQEAg c3RhdGljIHZvaWQgZHB1X3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCiAKIAlEUFVfREVCVUdfUExBTkUocGRwdSwgIlxuIik7CiAKLQlkcHVfcGxhbmVfcm90X2F0 b21pY191cGRhdGUocGxhbmUsIG9sZF9zdGF0ZSk7Ci0KIAlpZiAoIWRwdV9wbGFuZV9zc3BwX2Vu YWJsZWQoc3RhdGUpKSB7CiAJCV9kcHVfcGxhbmVfYXRvbWljX2Rpc2FibGUocGxhbmUsIG9sZF9z dGF0ZSk7CiAJfSBlbHNlIHsKQEAgLTM2ODEsOCArMjMzOCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVf cGxhbmVfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQltc21f cHJvcGVydHlfaW5zdGFsbF92b2xhdGlsZV9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywKIAkJ CSJleGNsX3JlY3RfdjEiLCAweDAsIDAsIH4wLCAwLCBQTEFORV9QUk9QX0VYQ0xfUkVDVF9WMSk7 CiAKLQlkcHVfcGxhbmVfcm90X2luc3RhbGxfcHJvcGVydGllcyhwbGFuZSwgY2F0YWxvZyk7Ci0K IAltc21fcHJvcGVydHlfaW5zdGFsbF9lbnVtKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAiYmxlbmRf b3AiLCAweDAsIDAsCiAJCWVfYmxlbmRfb3AsIEFSUkFZX1NJWkUoZV9ibGVuZF9vcCksIFBMQU5F X1BST1BfQkxFTkRfT1ApOwogCkBAIC00MDA3LDE1ICsyNjYyLDYgQEAgc3RhdGljIGludCBkcHVf cGxhbmVfYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlyZXR1 cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRwdV9wbGFuZV9zZXRfcHJvcGVydHkoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRf dCB2YWwpCi17Ci0JRFBVX0RFQlVHKCJcbiIpOwotCi0JcmV0dXJuIGRwdV9wbGFuZV9hdG9taWNf c2V0X3Byb3BlcnR5KHBsYW5lLAotCQkJcGxhbmUtPnN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLX0K LQogc3RhdGljIGludCBkcHVfcGxhbmVfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKIAkJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCiAJCXN0 cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFsKQpAQCAtNDAzMSw5ICsy Njc3LDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfYXRvbWljX2dldF9wcm9wZXJ0eShzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKIAl9IGVsc2UgewogCQlEUFVfREVCVUdfUExBTkUocGRwdSwgIlxu Iik7CiAJCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Ci0jaWZkZWYgQ09ORklH X1FDT01fRFBVX1JPVAotCQlkcHVfcGxhbmVfcm90X2luc3RhbGxfY2FwcyhwbGFuZSk7Ci0jZW5k aWYKIAkJcmV0ID0gbXNtX3Byb3BlcnR5X2F0b21pY19nZXQoJnBkcHUtPnByb3BlcnR5X2luZm8s CiAJCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwogCX0KQEAgLTQw ODQsOCArMjcyNyw2IEBAIHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAogCiAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwogCi0J ZHB1X3BsYW5lX3JvdF9kZXN0cm95X3N0YXRlKHBsYW5lLCAmcHN0YXRlLT5iYXNlKTsKLQogCS8q IHJlbW92ZSByZWYgY291bnQgZm9yIGZyYW1lIGJ1ZmZlcnMgKi8KIAlpZiAoc3RhdGUtPmZiKQog CQlkcm1fZnJhbWVidWZmZXJfcHV0KHN0YXRlLT5mYik7CkBAIC00MTMwLDggKzI3NzEsNiBAQCBz dGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIAogCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAm cHN0YXRlLT5iYXNlKTsKIAotCWRwdV9wbGFuZV9yb3RfZHVwbGljYXRlX3N0YXRlKHBsYW5lLCAm cHN0YXRlLT5iYXNlKTsKLQogCXJldHVybiAmcHN0YXRlLT5iYXNlOwogfQogCkBAIC00MzU5LDEz ICsyOTk4LDYgQEAgc3RhdGljIGludCBfZHB1X3BsYW5lX2luaXRfZGVidWdmcyhzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSkKIAkJCTA2MDAsCiAJCQlwZHB1LT5kZWJ1Z2ZzX3Jvb3QsCiAJCQlrbXMs ICZkcHVfcGxhbmVfZGFuZ2VyX2VuYWJsZSk7Ci0JZGVidWdmc19jcmVhdGVfdTMyKCJzYnVmX21v ZGUiLAotCQkJMDYwMCwKLQkJCXBkcHUtPmRlYnVnZnNfcm9vdCwgJnBkcHUtPnNidWZfbW9kZSk7 Ci0JZGVidWdmc19jcmVhdGVfdTMyKCJzYnVmX3dyaXRlYmFjayIsCi0JCQkwNjAwLAotCQkJcGRw dS0+ZGVidWdmc19yb290LAotCQkJJnBkcHUtPnNidWZfd3JpdGViYWNrKTsKIAogCXJldHVybiAw OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5l LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaAppbmRleCBhZDlk NWNmLi4yNWI2YjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfcGxhbmUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUu aApAQCAtMjQsNzEgKzI0LDggQEAKICNpbmNsdWRlICJtc21fcHJvcC5oIgogI2luY2x1ZGUgImRw dV9rbXMuaCIKICNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgotI2luY2x1ZGUgImRwdV9od19yb3Qu aCIKICNpbmNsdWRlICJkcHVfaHdfc3NwcC5oIgogCi0vKioKLSAqIHN0cnVjdCBkcHVfcGxhbmVf cm90X3N0YXRlIC0gc3RhdGUgb2YgcHJlLXNzcHAgcm90YXRvciBzdGFnZQotICogQHNlcXVlbmNl X2lkOiBzZXF1ZW5jZSBpZGVudGlmaWVyLCBpbmNyZW1lbnRlZCBwZXIgc3RhdGUgZHVwbGljYXRp b24KLSAqIEByb3RfaHc6IFBvaW50ZXIgdG8gcm90YXRvciBoYXJkd2FyZSBkcml2ZXIKLSAqIEBy b3Q5MDogdHJ1ZSBpZiByb3RhdGlvbiBvZiA5MCBkZWdyZWUgaXMgcmVxdWlyZWQKLSAqIEBoZmxp cDogdHJ1ZSBpZiBob3Jpem9udGFsIGZsaXAgaXMgcmVxdWlyZWQKLSAqIEB2ZmxpcDogdHJ1ZSBp ZiB2ZXJ0aWNhbCBmbGlwIGlzIHJlcXVpcmVkCi0gKiBAcm90X2NtZDogcm90YXRvciBjb25maWd1 cmF0aW9uIGNvbW1hbmQKLSAqIEBucGxhbmU6IHRvdGFsIG51bWJlciBvZiBkcm0gcGxhbmUgYXR0 YWNoZWQgdG8gcm90YXRvcgotICogQGluX2ZiOiBpbnB1dCBmYiBhdHRhY2hlZCB0byByb3RhdG9y Ci0gKiBAaW5fcm90YXRpb246IGlucHV0IHJvdGF0aW9uIHByb3BlcnR5IG9mIHJvdGF0b3Igc3Rh Z2UKLSAqIEBpbl9yb3RfcmVjdDogaW5wdXQgcmVjdGFuZ2xlIG9mIHRoZSByb3RhdG9yIGluIHBs YW5lIGZiIGNvb3JkaW5hdGUKLSAqIEBvdXRfcm90YXRpb246IG91dHB1dCByb3RhdGlvbiBwcm9w ZXJ0eSBvZiByb3RhdG9yIHN0YWdlCi0gKiBAb3V0X3JvdF9yZWN0OiBvdXRwdXQgcmVjdGFuZ2xl IG9mIHRoZSByb3RhdG9yIGluIHBsYW5lIGZiIGNvb3JkaW5hdGUKLSAqIEBvdXRfc3JjX3JlY3Q6 IG91dHB1dCByZWN0YW5nbGUgb2YgdGhlIHBsYW5lIHNvdXJjZSBpbiBwbGFuZSBmYiBjb29yZGlu YXRlCi0gKiBAb3V0X3NyY194OiBvdXRwdXQgc3JjX3ggb2Ygcm90YXRvciBzdGFnZSBpbiByb3Rh dG9yIG91dHB1dCBmYiBjb29yZGluYXRlCi0gKiBAb3V0X3NyY195OiBvdXRwdXQgc3JjIHkgb2Yg cm90YXRvciBzdGFnZSBpbiByb3RhdG9yIG91dHB1dCBmYiBjb29yZGluYXRlCi0gKiBAb3V0X3Ny Y193OiBvdXRwdXQgc3JjIHcgb2Ygcm90YXRvciBzdGFnZSBpbiByb3RhdG9yIG91dHB1dCBmYiBv b29yZGluYXRlCi0gKiBAb3V0X3NyY19oOiBvdXRwdXQgc3JjIGggb2Ygcm90YXRvciBzdGFnZSBp biByb3RhdG9yIG91dHB1dCBmYiBjb29yZGluYXRlCi0gKiBAb3V0X2ZiX3dpZHRoOiBvdXRwdXQg ZnJhbWVidWZmZXIgd2lkdGggb2Ygcm90YXRvciBzdGFnZQotICogQG91dF9mYl9oZWlnaHQ6IG91 dHB1dCBmcmFtZWJ1ZmZlciBoZWlnaHQgb2Ygcm90YXRvciBzdGFnZQotICogQG91dF9mYl9waXhl bF9mb3JtYXQ6IG91dHB1dCBmcmFtZWJ1ZmZlciBwaXhlbCBmb3JtYXQgb2Ygcm90YXRvciBzdGFn ZQotICogQG91dF9mYl9tb2RpZmllcjogb3V0cHV0IGZyYW1lYnVmZmVyIG1vZGlmaWVyIG9mIHJv dGF0b3Igc3RhZ2UKLSAqIEBvdXRfZmJfZmxhZ3M6IG91dHB1dCBmcmFtZWJ1ZmZlciBmbGFncyBv ZiByb3RhdG9yIHN0YWdlCi0gKiBAb3V0X3NidWY6IHRydWUgaWYgb3V0cHV0IHN0cmVhbWluZyBi dWZmZXIgaXMgcmVxdWlyZWQKLSAqIEBvdXRfZmJfZm9ybWF0OiBQb2ludGVyIHRvIG91dHB1dCBm cmFtZWJ1ZmZlciBmb3JtYXQgb2Ygcm90YXRvciBzdGFnZQotICogQG91dF9mYjogUG9pbnRlciB0 byBvdXRwdXQgZHJtIGZyYW1lYnVmZmVyIG9mIHJvdGF0b3Igc3RhZ2UKLSAqIEBvdXRfZmJvOiBm cmFtZWJ1ZmZlciBvYmplY3Qgb2Ygb3V0cHV0IHN0cmVhbWluZyBidWZmZXIKLSAqIEBvdXRfeHBv czogcmVsYXRpdmUgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcGxhbmUgKDAgLSBsZWZ0bW9z dCkKLSAqLwotc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgewotCXUzMiBzZXF1ZW5jZV9pZDsK LQlzdHJ1Y3QgZHB1X2h3X3JvdCAqcm90X2h3OwotCWJvb2wgcm90OTA7Ci0JYm9vbCBoZmxpcDsK LQlib29sIHZmbGlwOwotCXN0cnVjdCBkcHVfaHdfcm90X2NtZCByb3RfY21kOwotCWludCBucGxh bmU7Ci0JLyogaW5wdXQgKi8KLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICppbl9mYjsKLQlzdHJ1 Y3QgZHJtX3JlY3QgaW5fcm90X3JlY3Q7Ci0JdTMyIGluX3JvdGF0aW9uOwotCS8qIG91dHB1dCAq LwotCXN0cnVjdCBkcm1fcmVjdCBvdXRfcm90X3JlY3Q7Ci0Jc3RydWN0IGRybV9yZWN0IG91dF9z cmNfcmVjdDsKLQl1MzIgb3V0X3JvdGF0aW9uOwotCXUzMiBvdXRfc3JjX3g7Ci0JdTMyIG91dF9z cmNfeTsKLQl1MzIgb3V0X3NyY193OwotCXUzMiBvdXRfc3JjX2g7Ci0JdTMyIG91dF9mYl93aWR0 aDsKLQl1MzIgb3V0X2ZiX2hlaWdodDsKLQl1MzIgb3V0X2ZiX3BpeGVsX2Zvcm1hdDsKLQl1NjQg b3V0X2ZiX21vZGlmaWVyWzRdOwotCXUzMiBvdXRfZmJfZmxhZ3M7Ci0JYm9vbCBvdXRfc2J1ZjsK LQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqb3V0X2ZiX2Zvcm1hdDsKLQlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpvdXRfZmI7Ci0Jc3RydWN0IGRwdV9rbXNfZmJvICpvdXRfZmJvOwotCWludCBv dXRfeHBvczsKLX07Ci0KIC8qIGRpcnR5IGJpdHMgZm9yIHVwZGF0ZSBmdW5jdGlvbiAqLwogI2Rl ZmluZSBEUFVfUExBTkVfRElSVFlfUkVDVFMJMHgxCiAjZGVmaW5lIERQVV9QTEFORV9ESVJUWV9G T1JNQVQJMHgyCkBAIC0xNTEsMTAgKzg4LDYgQEAgc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSB7CiAJ c3RydWN0IGRwdV9od19waXhlbF9leHQgcGl4ZWxfZXh0OwogCWVudW0gZHB1X3BsYW5lX3NjbGNo ZWNrX3N0YXRlIHNjYWxlcl9jaGVja19zdGF0ZTsKIAotCS8qIEBzY19jZmc6IHN5c3RlbV9jYWNo ZSBjb25maWd1cmF0aW9uICovCi0Jc3RydWN0IGRwdV9od19waXBlX3NjX2NmZyBzY19jZmc7Ci0J c3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgcm90OwotCiAJc3RydWN0IGRwdV9od19waXBlX2Nk cF9jZmcgY2RwX2NmZzsKIH07CiAKQEAgLTIwMCwxNyArMTMzLDkgQEAgc3RydWN0IGRwdV9tdWx0 aXJlY3RfcGxhbmVfc3RhdGVzIHsKICAqIEBwbGFuZTogICBQb2ludGVyIHRvIERSTSBwbGFuZSBv YmplY3QKICAqIEBjdGw6IFBvaW50ZXIgdG8gY29udHJvbCBoYXJkd2FyZQogICogQGZsdXNoX3Nz cHA6IFBvaW50ZXIgdG8gc3NwcCBmbHVzaCBjb250cm9sIHdvcmQKLSAqIEBmbHVzaF9yb3Q6IFBv aW50ZXIgdG8gcm90YXRvciBmbHVzaCBjb250cm9sIHdvcmQKICAqLwogdm9pZCBkcHVfcGxhbmVf Z2V0X2N0bF9mbHVzaChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRwdV9od19jdGwg KmN0bCwKLQkJdTMyICpmbHVzaF9zc3BwLCB1MzIgKmZsdXNoX3JvdCk7Ci0KLS8qKgotICogZHB1 X3BsYW5lX3JvdF9jYWxjX3ByZWZpbGwgLSBjYWxjdWxhdGUgcm90YXRvciBzdGFydCBwcmVmaWxs Ci0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCi0gKiByZXR1cm46IHByZWZpbGwgdGlt ZSBpbiBsaW5lCi0gKi8KLXUzMiBkcHVfcGxhbmVfcm90X2NhbGNfcHJlZmlsbChzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSk7CisJCXUzMiAqZmx1c2hfc3NwcCk7CiAKIC8qKgogICogZHB1X3BsYW5l X3Jlc3RvcmUgLSByZXN0b3JlIGh3IHN0YXRlIGlmIHByZXZpb3VzbHkgcG93ZXIgY29sbGFwc2Vk CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcm0uYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCmluZGV4IDNhMjYxMmEuLjFkODFi MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jCkBAIC0yNSw5ICsyNSw2 IEBACiAjaW5jbHVkZSAiZHB1X2VuY29kZXIuaCIKICNpbmNsdWRlICJkcHVfY29ubmVjdG9yLmgi CiAjaW5jbHVkZSAiZHB1X2h3X2RzYy5oIgotI2lmZGVmIENPTkZJR19EUk1fTVNNX1JPVEFUT1IK LSNpbmNsdWRlICJkcHVfaHdfcm90LmgiCi0jZW5kaWYKIAogI2RlZmluZSBSRVNFUlZFRF9CWV9P VEhFUihoLCByKSBcCiAJKChoKS0+cnN2cCAmJiAoKGgpLT5yc3ZwLT5lbmNfaWQgIT0gKHIpLT5l bmNfaWQpKQpAQCAtMjU5LDExICsyNTYsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X3JtX2h3X2Rlc3Ry b3koZW51bSBkcHVfaHdfYmxrX3R5cGUgdHlwZSwgdm9pZCAqaHcpCiAJY2FzZSBEUFVfSFdfQkxL X0RTQzoKIAkJZHB1X2h3X2RzY19kZXN0cm95KGh3KTsKIAkJYnJlYWs7Ci0jaWZkZWYgQ09ORklH X0RSTV9NU01fUk9UQVRPUgotCWNhc2UgRFBVX0hXX0JMS19ST1Q6Ci0JCWRwdV9od19yb3RfZGVz dHJveShodyk7Ci0JCWJyZWFrOwotI2VuZGlmCiAJY2FzZSBEUFVfSFdfQkxLX1NTUFA6CiAJCS8q IFNTUFBzIGFyZSBub3QgbWFuYWdlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciAqLwogCWNhc2Ug RFBVX0hXX0JMS19UT1A6CkBAIC0zNTIsMTEgKzM0NCw2IEBAIHN0YXRpYyBpbnQgX2RwdV9ybV9o d19ibGtfY3JlYXRlKAogCWNhc2UgRFBVX0hXX0JMS19EU0M6CiAJCWh3ID0gZHB1X2h3X2RzY19p bml0KGlkLCBtbWlvLCBjYXQpOwogCQlicmVhazsKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9ST1RB VE9SCi0JY2FzZSBEUFVfSFdfQkxLX1JPVDoKLQkJaHcgPSBkcHVfaHdfcm90X2luaXQoaWQsIG1t aW8sIGNhdCk7Ci0JCWJyZWFrOwotI2VuZGlmCiAJY2FzZSBEUFVfSFdfQkxLX1NTUFA6CiAJCS8q IFNTUFBzIGFyZSBub3QgbWFuYWdlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciAqLwogCWNhc2Ug RFBVX0hXX0JMS19UT1A6CkBAIC01MTAsMTUgKzQ5Nyw2IEBAIGludCBkcHVfcm1faW5pdChzdHJ1 Y3QgZHB1X3JtICpybSwKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBjYXQtPnJvdF9jb3Vu dDsgaSsrKSB7Ci0JCXJjID0gX2RwdV9ybV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1taW8sIERQ VV9IV19CTEtfUk9ULAotCQkJCWNhdC0+cm90W2ldLmlkLCAmY2F0LT5yb3RbaV0pOwotCQlpZiAo cmMpIHsKLQkJCURQVV9FUlJPUigiZmFpbGVkOiByb3QgaHcgbm90IGF2YWlsYWJsZVxuIik7Ci0J CQlnb3RvIGZhaWw7Ci0JCX0KLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY2F0LT5jdGxfY291bnQ7 IGkrKykgewogCQlyYyA9IF9kcHVfcm1faHdfYmxrX2NyZWF0ZShybSwgY2F0LCBtbWlvLCBEUFVf SFdfQkxLX0NUTCwKIAkJCQljYXQtPmN0bFtpXS5pZCwgJmNhdC0+Y3RsW2ldKTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZHJ2LmgKaW5kZXggNjg1YzcyOC4uNTkxZWQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAg LTEwNCwxNSArMTA0LDEwIEBAIGVudW0gbXNtX21kcF9wbGFuZV9wcm9wZXJ0eSB7CiAJUExBTkVf UFJPUF9WQUxVRV9BREpVU1QsCiAJUExBTkVfUFJPUF9DT05UUkFTVF9BREpVU1QsCiAJUExBTkVf UFJPUF9FWENMX1JFQ1RfVjEsCi0JUExBTkVfUFJPUF9ST1RfRFNUX1gsCi0JUExBTkVfUFJPUF9S T1RfRFNUX1ksCi0JUExBTkVfUFJPUF9ST1RfRFNUX1csCi0JUExBTkVfUFJPUF9ST1RfRFNUX0gs CiAJUExBTkVfUFJPUF9QUkVGSUxMX1NJWkUsCiAJUExBTkVfUFJPUF9QUkVGSUxMX1RJTUUsCiAK IAkvKiBlbnVtL2JpdG1hc2sgcHJvcGVydGllcyAqLwotCVBMQU5FX1BST1BfUk9UQVRJT04sCiAJ UExBTkVfUFJPUF9CTEVORF9PUCwKIAlQTEFORV9QUk9QX1NSQ19DT05GSUcsCiAKQEAgLTEzOCw4 ICsxMzMsNiBAQCBlbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7CiAJQ1JUQ19QUk9QX0xMQ0Nf SUIsCiAJQ1JUQ19QUk9QX0RSQU1fQUIsCiAJQ1JUQ19QUk9QX0RSQU1fSUIsCi0JQ1JUQ19QUk9Q X1JPVF9QUkVGSUxMX0JXLAotCUNSVENfUFJPUF9ST1RfQ0xLLAogCUNSVENfUFJPUF9JRExFX1RJ TUVPVVQsCiAJQ1JUQ19QUk9QX0RFU1RfU0NBTEVSLAogCkBAIC01ODksNyArNTgyLDcgQEAgc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICptc21fZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAogdm9pZCAqbXNtX2dlbV9nZXRfdmFkZHIoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmopOwogdm9pZCAqbXNtX2dlbV9nZXRfdmFkZHJfYWN0aXZlKHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqb2JqKTsKIHZvaWQgbXNtX2dlbV9wdXRfdmFkZHIoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmopOwotaW50IG1zbV9nZW1fbWFkdmlzZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwgdW5zaWduZWQgbWFkdik7CitpbnQgbXNtX2dlbV9tYWR2aXNlKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqLCB1bnNpZ25lZCBpbnQgbWFkdik7CiBpbnQgbXNtX2dlbV9zeW5jX29iamVj dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKIAkJc3RydWN0IG1zbV9mZW5jZV9jb250ZXh0 ICpmY3R4LCBib29sIGV4Y2x1c2l2ZSk7CiB2b2lkIG1zbV9nZW1fbW92ZV90b19hY3RpdmUoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCkBAIC02MjgsNyArNjIxLDcgQEAgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqbXNtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK IAkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zKTsKIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg Km1zbV9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJc3RydWN0 IGRybV9maWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQp Owotc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqIG1zbV9hbGxvY19zdG9sZW5fZmIoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm1zbV9hbGxvY19zdG9sZW5f ZmIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJaW50IHcsIGludCBoLCBpbnQgcCwgdWludDMy X3QgZm9ybWF0KTsKIAogc3RydWN0IGRybV9mYl9oZWxwZXIgKm1zbV9mYmRldl9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJ bmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0 aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZnJlZWRyZW5vCg==