From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 00941C433DB for ; Thu, 14 Jan 2021 09:05:42 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A95F7221EF for ; Thu, 14 Jan 2021 09:05:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A95F7221EF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id DE4C46E0AF; Thu, 14 Jan 2021 09:05:40 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [205.139.111.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id C77B56E0A8 for ; Thu, 14 Jan 2021 09:05:39 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-568-wO25xwOlPMadiiILEgzEVw-1; Thu, 14 Jan 2021 04:05:34 -0500 X-MC-Unique: wO25xwOlPMadiiILEgzEVw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6BE7F107ACFB; Thu, 14 Jan 2021 09:05:33 +0000 (UTC) Received: from dreadlord-bne-redhat-com.bne.redhat.com (unknown [10.64.32.209]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4473810016FE; Thu, 14 Jan 2021 09:05:32 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Thu, 14 Jan 2021 19:05:14 +1000 Message-Id: <20210114090522.22750-4-airlied@gmail.com> In-Reply-To: <20210114090522.22750-1-airlied@gmail.com> References: <20210114090522.22750-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 03/11] drm/i915: split fdi code out from intel_display.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jani Nikula , Dave Airlie Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMganVzdCByZWZhY3Rv cnMgb3V0IHRoZSBmZGkgY29kZSB0byBhIHNlcGFyYXRlIGZpbGUuCgpTaWduZWQtb2ZmLWJ5OiBE YXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgpbSmFuaTogY2xlYW5lZCB1cCBpbnRlbF9m ZGkuaCBhIGJpdC5dClNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRl bC5jb20+ClJldmlld2VkLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXgu aW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAg ICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku YyAgfCA2ODUgKy0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9k aXNwbGF5X3R5cGVzLmggICAgfCAgIDkgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9mZGkuYyAgICAgIHwgNjgzICsrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5oICAgICAgfCAgMjIgKwogNSBmaWxlcyBjaGFuZ2VkLCA3 MTggaW5zZXJ0aW9ucygrKSwgNjgyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5oCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZQppbmRleCAwNDgzZDJjY2Y3MWIuLjMyYTA0MTYwOWRmNiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKQEAgLTIwNiw2ICsyMDYsNyBAQCBpOTE1LXkgKz0gXAogCWRpc3BsYXkvaW50ZWxfZHBsbF9t Z3IubyBcCiAJZGlzcGxheS9pbnRlbF9kc2IubyBcCiAJZGlzcGxheS9pbnRlbF9mYmMubyBcCisJ ZGlzcGxheS9pbnRlbF9mZGkubyBcCiAJZGlzcGxheS9pbnRlbF9maWZvX3VuZGVycnVuLm8gXAog CWRpc3BsYXkvaW50ZWxfZnJvbnRidWZmZXIubyBcCiAJZGlzcGxheS9pbnRlbF9nbG9iYWxfc3Rh dGUubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCmlu ZGV4IDk4NjdmZDdmOTkwZi4uNzQ0NzMyOTBjOWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwpAQCAtNzQsNiArNzQsNyBAQAogI2luY2x1ZGUgImlu dGVsX2Rpc3BsYXlfdHlwZXMuaCIKICNpbmNsdWRlICJpbnRlbF9kcF9saW5rX3RyYWluaW5nLmgi CiAjaW5jbHVkZSAiaW50ZWxfZmJjLmgiCisjaW5jbHVkZSAiaW50ZWxfZmRpLmgiCiAjaW5jbHVk ZSAiaW50ZWxfZmJkZXYuaCIKICNpbmNsdWRlICJpbnRlbF9maWZvX3VuZGVycnVuLmgiCiAjaW5j bHVkZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKQEAgLTE3MywxNiArMTc0LDYgQEAgc3RhdGljIHZv aWQgaW50ZWxfdXBkYXRlX2N6Y2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IAkJZGV2X3ByaXYtPmN6Y2xrX2ZyZXEpOwogfQogCi0vKiB1bml0cyBvZiAxMDBNSHogKi8KLXN0 YXRpYyB1MzIgaW50ZWxfZmRpX2xpbmtfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29u ZmlnKQotewotCWlmIChIQVNfRERJKGRldl9wcml2KSkKLQkJcmV0dXJuIHBpcGVfY29uZmlnLT5w b3J0X2Nsb2NrOyAvKiBTUExMICovCi0JZWxzZQotCQlyZXR1cm4gZGV2X3ByaXYtPmZkaV9wbGxf ZnJlcTsKLX0KLQogLyogV0EgRGlzcGxheSAjMDgyNzogR2VuOTphbGwgKi8KIHN0YXRpYyB2b2lk CiBza2xfd2FfODI3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgZW51bSBwaXBl IHBpcGUsIGJvb2wgZW5hYmxlKQpAQCAtMzcyNyw1MzIgKzM3MTgsNiBAQCBzdGF0aWMgdm9pZCBp Y2xfc2V0X3BpcGVfY2hpY2tlbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKIAlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgUElQRV9DSElDS0VOKHBpcGUpLCB0bXApOwogfQogCi1zdGF0aWMgdm9p ZCBpbnRlbF9mZGlfbm9ybWFsX3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQotewotCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRj LT5waXBlOwotCWk5MTVfcmVnX3QgcmVnOwotCXUzMiB0ZW1wOwotCi0JLyogZW5hYmxlIG5vcm1h bCB0cmFpbiAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIHJlZyk7Ci0JaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikpIHsKLQkJdGVt cCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORV9JVkI7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5f Tk9ORV9JVkIgfCBGRElfVFhfRU5IQU5DRV9GUkFNRV9FTkFCTEU7Ci0JfSBlbHNlIHsKLQkJdGVt cCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT05F IHwgRkRJX1RYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFOwotCX0KLQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wKTsKLQotCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JaWYgKEhBU19QQ0hfQ1BUKGRldl9wcml2KSkg ewotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9QQVRURVJOX01BU0tfQ1BUOwotCQl0ZW1wIHw9 IEZESV9MSU5LX1RSQUlOX05PUk1BTF9DUFQ7Ci0JfSBlbHNlIHsKLQkJdGVtcCAmPSB+RkRJX0xJ TktfVFJBSU5fTk9ORTsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9OT05FOwotCX0KLQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOSEFOQ0VfRlJBTUVfRU5B QkxFKTsKLQotCS8qIHdhaXQgb25lIGlkbGUgcGF0dGVybiB0aW1lICovCi0JaW50ZWxfZGVfcG9z dGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxMDAwKTsKLQotCS8qIElWQiB3YW50 cyBlcnJvciBjb3JyZWN0aW9uIGVuYWJsZWQgKi8KLQlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2 KSkKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywKLQkJICAgICAgICAgICAgICAgaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKSB8IEZESV9GU19FUlJDX0VOQUJMRSB8IEZESV9GRV9F UlJDX0VOQUJMRSk7Ci19Ci0KLS8qIFRoZSBGREkgbGluayB0cmFpbmluZyBmdW5jdGlvbnMgZm9y IElMSy9JYmV4cGVhay4gKi8KLXN0YXRpYyB2b2lkIGlsa19mZGlfbGlua190cmFpbihzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5k ZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOwot CWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKLQlpOTE1X3JlZ190IHJlZzsKLQl1MzIgdGVt cCwgdHJpZXM7Ci0KLQkvKiBGREkgbmVlZHMgYml0cyBmcm9tIHBpcGUgZmlyc3QgKi8KLQlhc3Nl cnRfcGlwZV9lbmFibGVkKGRldl9wcml2LCBjcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2Rlcik7Ci0K LQkvKiBUcmFpbiAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0IHN5bWJvbF9sb2NrIGFuZCBiaXRf bG9jayBiaXQKLQkgICBmb3IgdHJhaW4gcmVzdWx0ICovCi0JcmVnID0gRkRJX1JYX0lNUihwaXBl KTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH5GRElf UlhfU1lNQk9MX0xPQ0s7Ci0JdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOwotCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCWludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Ci0JdWRlbGF5KDE1MCk7Ci0KLQkvKiBlbmFibGUgQ1BVIEZESSBUWCBhbmQgUENIIEZESSBSWCAq LwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3By aXYsIHJlZyk7Ci0JdGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lEVEhfTUFTSzsKLQl0ZW1wIHw9IEZE SV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7Ci0JdGVtcCAmPSB+RkRJX0xJ TktfVFJBSU5fTk9ORTsKLQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKLQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX0VOQUJMRSk7Ci0KLQlyZWcg PSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcp OwotCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0JdGVtcCB8PSBGRElfTElOS19UUkFJ Tl9QQVRURVJOXzE7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9S WF9FTkFCTEUpOwotCi0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCXVk ZWxheSgxNTApOwotCi0JLyogSXJvbmxha2Ugd29ya2Fyb3VuZCwgZW5hYmxlIGNsb2NrIHBvaW50 ZXIgYWZ0ZXIgRkRJIGVuYWJsZSovCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9D SElDS0VOKHBpcGUpLAotCQkgICAgICAgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9PVlIpOwot CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihwaXBlKSwKLQkJICAgICAg IEZESV9SWF9QSEFTRV9TWU5DX1BPSU5URVJfT1ZSIHwgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRF Ul9FTik7Ci0KLQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOwotCWZvciAodHJpZXMgPSAwOyB0cmll cyA8IDU7IHRyaWVzKyspIHsKLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Ci0JCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1w KTsKLQotCQlpZiAoKHRlbXAgJiBGRElfUlhfQklUX0xPQ0spKSB7Ci0JCQlkcm1fZGJnX2ttcygm ZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGRvbmUuXG4iKTsKLQkJCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCByZWcsIHRlbXAgfCBGRElfUlhfQklUX0xPQ0spOwotCQkJYnJlYWs7Ci0JCX0K LQl9Ci0JaWYgKHRyaWVzID09IDUpCi0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJGREkgdHJh aW4gMSBmYWlsIVxuIik7Ci0KLQkvKiBUcmFpbiAyICovCi0JcmVnID0gRkRJX1RYX0NUTChwaXBl KTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH5GRElf TElOS19UUkFJTl9OT05FOwotCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOwotCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JcmVnID0gRkRJX1JYX0NUTChw aXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH5G RElfTElOS19UUkFJTl9OT05FOwotCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOwot CWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxNTApOwotCi0JcmVnID0gRkRJX1JYX0lJ UihwaXBlKTsKLQlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA1OyB0cmllcysrKSB7Ci0JCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwgIkZESV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7Ci0KLQkJaWYgKHRlbXAgJiBGRElfUlhf U1lNQk9MX0xPQ0spIHsKLQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCi0JCQkJICAg ICAgIHRlbXAgfCBGRElfUlhfU1lNQk9MX0xPQ0spOwotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sICJGREkgdHJhaW4gMiBkb25lLlxuIik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAo dHJpZXMgPT0gNSkKLQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAyIGZhaWwh XG4iKTsKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIGRvbmVcbiIp OwotCi19Ci0KLXN0YXRpYyBjb25zdCBpbnQgc25iX2JfZmRpX3RyYWluX3BhcmFtW10gPSB7Ci0J RkRJX0xJTktfVFJBSU5fNDAwTVZfMERCX1NOQl9CLAotCUZESV9MSU5LX1RSQUlOXzQwME1WXzZE Ql9TTkJfQiwKLQlGRElfTElOS19UUkFJTl82MDBNVl8zXzVEQl9TTkJfQiwKLQlGRElfTElOS19U UkFJTl84MDBNVl8wREJfU05CX0IsCi19OwotCi0vKiBUaGUgRkRJIGxpbmsgdHJhaW5pbmcgZnVu Y3Rpb25zIGZvciBTTkIvQ291Z2FycG9pbnQuICovCi1zdGF0aWMgdm9pZCBnZW42X2ZkaV9saW5r X3RyYWluKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRj LT5iYXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KGRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwotCWk5MTVfcmVnX3QgcmVnOwot CXUzMiB0ZW1wLCBpLCByZXRyeTsKLQotCS8qIFRyYWluIDE6IHVtYXNrIEZESSBSWCBJbnRlcnJ1 cHQgc3ltYm9sX2xvY2sgYW5kIGJpdF9sb2NrIGJpdAotCSAgIGZvciB0cmFpbiByZXN1bHQgKi8K LQlyZWcgPSBGRElfUlhfSU1SKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCByZWcpOwotCXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9DSzsKLQl0ZW1wICY9IH5GRElfUlhf QklUX0xPQ0s7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQlpbnRl bF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDE1MCk7Ci0KLQkvKiBl bmFibGUgQ1BVIEZESSBUWCBhbmQgUENIIEZESSBSWCAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlw ZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JdGVtcCAmPSB+RkRJ X0RQX1BPUlRfV0lEVEhfTUFTSzsKLQl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3Rh dGUtPmZkaV9sYW5lcyk7Ci0JdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKLQl0ZW1wIHw9 IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKLQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xf RU1QX01BU0s7Ci0JLyogU05CLUIgKi8KLQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOXzQwME1WXzBE Ql9TTkJfQjsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX0VO QUJMRSk7Ci0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX01JU0MocGlwZSksCi0J CSAgICAgICBGRElfUlhfVFAxX1RPX1RQMl80OCB8IEZESV9SWF9GRElfREVMQVlfOTApOwotCi0J cmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cmVnKTsKLQlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7Ci0JCXRlbXAgJj0gfkZESV9MSU5L X1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVS Tl8xX0NQVDsKLQl9IGVsc2UgewotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwotCQl0 ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKLQl9Ci0JaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOwotCi0JaW50ZWxfZGVfcG9zdGluZ19y ZWFkKGRldl9wcml2LCByZWcpOwotCXVkZWxheSgxNTApOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7 IGkrKykgewotCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCQl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNL OwotCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtpXTsKLQkJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2 LCByZWcpOwotCQl1ZGVsYXkoNTAwKTsKLQotCQlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCA1OyBy ZXRyeSsrKSB7Ci0JCQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOwotCQkJdGVtcCA9IGludGVsX2Rl X3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZE SV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7Ci0JCQlpZiAodGVtcCAmIEZESV9SWF9CSVRfTE9DSykg ewotCQkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCi0JCQkJCSAgICAgICB0ZW1wIHwg RkRJX1JYX0JJVF9MT0NLKTsKLQkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkJ ICAgICJGREkgdHJhaW4gMSBkb25lLlxuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQl1ZGVsYXko NTApOwotCQl9Ci0JCWlmIChyZXRyeSA8IDUpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gNCkK LQkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGZhaWwhXG4iKTsKLQotCS8q IFRyYWluIDIgKi8KLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWcpOwotCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0JdGVt cCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzI7Ci0JaWYgKElTX0dFTihkZXZfcHJpdiwgNikp IHsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOwotCQkvKiBTTkItQiAq LwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOXzQwME1WXzBEQl9TTkJfQjsKLQl9Ci0JaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUp OwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWlmIChIQVNfUENIX0NQ VChkZXZfcHJpdikpIHsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQ VDsKLQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzJfQ1BUOwotCX0gZWxzZSB7Ci0J CXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5f UEFUVEVSTl8yOwotCX0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQot CWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXkoMTUwKTsKLQot CWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQkJ dGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXRlbXAgJj0gfkZESV9MSU5L X1RSQUlOX1ZPTF9FTVBfTUFTSzsKLQkJdGVtcCB8PSBzbmJfYl9mZGlfdHJhaW5fcGFyYW1baV07 Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOwotCi0JCWludGVsX2RlX3Bv c3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJdWRlbGF5KDUwMCk7Ci0KLQkJZm9yIChyZXRy eSA9IDA7IHJldHJ5IDwgNTsgcmV0cnkrKykgewotCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsK LQkJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQkJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOwotCQkJaWYgKHRlbXAg JiBGRElfUlhfU1lNQk9MX0xPQ0spIHsKLQkJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVn LAotCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9TWU1CT0xfTE9DSyk7Ci0JCQkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCi0JCQkJCSAgICAiRkRJIHRyYWluIDIgZG9uZS5cbiIpOwotCQkJ CWJyZWFrOwotCQkJfQotCQkJdWRlbGF5KDUwKTsKLQkJfQotCQlpZiAocmV0cnkgPCA1KQotCQkJ YnJlYWs7Ci0JfQotCWlmIChpID09IDQpCi0JCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJGREkg dHJhaW4gMiBmYWlsIVxuIik7Ci0KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0 cmFpbiBkb25lLlxuIik7Ci19Ci0KLS8qIE1hbnVhbCBsaW5rIHRyYWluaW5nIGZvciBJdnkgQnJp ZGdlIEEwIHBhcnRzICovCi1zdGF0aWMgdm9pZCBpdmJfbWFudWFsX2ZkaV9saW5rX3RyYWluKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5i YXNlLmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRl dik7Ci0JZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOwotCWk5MTVfcmVnX3QgcmVnOwotCXUz MiB0ZW1wLCBpLCBqOwotCi0JLyogVHJhaW4gMTogdW1hc2sgRkRJIFJYIEludGVycnVwdCBzeW1i b2xfbG9jayBhbmQgYml0X2xvY2sgYml0Ci0JICAgZm9yIHRyYWluIHJlc3VsdCAqLwotCXJlZyA9 IEZESV9SWF9JTVIocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Ci0JdGVtcCAmPSB+RkRJX1JYX1NZTUJPTF9MT0NLOwotCXRlbXAgJj0gfkZESV9SWF9CSVRfTE9D SzsKLQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKLQotCWludGVsX2RlX3Bv c3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXkoMTUwKTsKLQotCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiBiZWZvcmUgbGluayB0cmFpbiAweCV4XG4iLAot CQkgICAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRkRJX1JYX0lJUihwaXBlKSkpOwotCi0JLyog VHJ5IGVhY2ggdnN3aW5nIGFuZCBwcmVlbXBoYXNpcyBzZXR0aW5nIHR3aWNlIGJlZm9yZSBtb3Zp bmcgb24gKi8KLQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzbmJfYl9mZGlfdHJhaW5fcGFy YW0pICogMjsgaisrKSB7Ci0JCS8qIGRpc2FibGUgZmlyc3QgaW4gY2FzZSB3ZSBuZWVkIHRvIHJl dHJ5ICovCi0JCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCByZWcpOwotCQl0ZW1wICY9IH4oRkRJX0xJTktfVFJBSU5fQVVUTyB8IEZESV9M SU5LX1RSQUlOX05PTkVfSVZCKTsKLQkJdGVtcCAmPSB+RkRJX1RYX0VOQUJMRTsKLQkJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQkJcmVnID0gRkRJX1JYX0NUTChwaXBl KTsKLQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXRlbXAgJj0gfkZE SV9MSU5LX1RSQUlOX0FVVE87Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFT S19DUFQ7Ci0JCXRlbXAgJj0gfkZESV9SWF9FTkFCTEU7Ci0JCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsIHRlbXApOwotCi0JCS8qIGVuYWJsZSBDUFUgRkRJIFRYIGFuZCBQQ0ggRkRJIFJY ICovCi0JCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRl dl9wcml2LCByZWcpOwotCQl0ZW1wICY9IH5GRElfRFBfUE9SVF9XSURUSF9NQVNLOwotCQl0ZW1w IHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7Ci0JCXRlbXAgfD0g RkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0lWQjsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5f Vk9MX0VNUF9NQVNLOwotCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtqLzJdOwotCQl0 ZW1wIHw9IEZESV9DT01QT1NJVEVfU1lOQzsKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJl ZywgdGVtcCB8IEZESV9UWF9FTkFCTEUpOwotCi0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBG RElfUlhfTUlTQyhwaXBlKSwKLQkJCSAgICAgICBGRElfUlhfVFAxX1RPX1RQMl80OCB8IEZESV9S WF9GRElfREVMQVlfOTApOwotCi0JCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7Ci0JCXRlbXAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BB VFRFUk5fMV9DUFQ7Ci0JCXRlbXAgfD0gRkRJX0NPTVBPU0lURV9TWU5DOwotCQlpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOQUJMRSk7Ci0KLQkJaW50ZWxfZGVf cG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwotCQl1ZGVsYXkoMSk7IC8qIHNob3VsZCBiZSAw LjV1cyAqLwotCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCXJlZyA9IEZESV9SWF9J SVIocGlwZSk7Ci0JCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJCWRy bV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKLQot CQkJaWYgKHRlbXAgJiBGRElfUlhfQklUX0xPQ0sgfHwKLQkJCSAgICAoaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgcmVnKSAmIEZESV9SWF9CSVRfTE9DSykpIHsKLQkJCQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcmVnLAotCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9CSVRfTE9DSyk7Ci0JCQkJ ZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJCSAgICAiRkRJIHRyYWluIDEgZG9uZSwg bGV2ZWwgJWkuXG4iLAotCQkJCQkgICAgaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQl1ZGVsYXko MSk7IC8qIHNob3VsZCBiZSAwLjV1cyAqLwotCQl9Ci0JCWlmIChpID09IDQpIHsKLQkJCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAiRkRJIHRyYWluIDEgZmFpbCBvbiB2c3dp bmcgJWRcbiIsIGogLyAyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogVHJhaW4gMiAqLwot CQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKLQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORV9JVkI7Ci0JCXRlbXAgfD0g RkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yX0lWQjsKLQkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgdGVtcCk7Ci0KLQkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQkJdGVtcCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7Ci0JCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRF Uk5fTUFTS19DUFQ7Ci0JCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yX0NQVDsKLQkJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQkJaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCByZWcpOwotCQl1ZGVsYXkoMik7IC8qIHNob3VsZCBiZSAxLjV1cyAq LwotCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJCXJlZyA9IEZESV9SWF9JSVIocGlw ZSk7Ci0JCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQkJCWRybV9kYmdf a21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKLQotCQkJaWYg KHRlbXAgJiBGRElfUlhfU1lNQk9MX0xPQ0sgfHwKLQkJCSAgICAoaW50ZWxfZGVfcmVhZChkZXZf cHJpdiwgcmVnKSAmIEZESV9SWF9TWU1CT0xfTE9DSykpIHsKLQkJCQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcmVnLAotCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9TWU1CT0xfTE9DSyk7Ci0J CQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJCSAgICAiRkRJIHRyYWluIDIgZG9u ZSwgbGV2ZWwgJWkuXG4iLAotCQkJCQkgICAgaSk7Ci0JCQkJZ290byB0cmFpbl9kb25lOwotCQkJ fQotCQkJdWRlbGF5KDIpOyAvKiBzaG91bGQgYmUgMS41dXMgKi8KLQkJfQotCQlpZiAoaSA9PSA0 KQotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkJICAgICJGREkgdHJhaW4gMiBm YWlsIG9uIHZzd2luZyAlZFxuIiwgaiAvIDIpOwotCX0KLQotdHJhaW5fZG9uZToKLQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7Ci19Ci0KLXN0YXRpYyB2 b2lkIGlsa19mZGlfcGxsX2VuYWJsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2Ny dGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGludGVsX2NydGMtPmJhc2UuZGV2KTsKLQllbnVtIHBpcGUgcGlwZSA9 IGludGVsX2NydGMtPnBpcGU7Ci0JaTkxNV9yZWdfdCByZWc7Ci0JdTMyIHRlbXA7Ci0KLQkvKiBl bmFibGUgUENIIEZESSBSWCBQTEwsIHdhaXQgd2FybXVwIHBsdXMgRE1JIGxhdGVuY3kgKi8KLQly ZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOwotCXRlbXAgJj0gfihGRElfRFBfUE9SVF9XSURUSF9NQVNLIHwgKDB4NyA8PCAxNikpOwot CXRlbXAgfD0gRkRJX0RQX1BPUlRfV0lEVEgoY3J0Y19zdGF0ZS0+ZmRpX2xhbmVzKTsKLQl0ZW1w IHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkgJiBQSVBFQ09ORl9C UENfTUFTSykgPDwgMTE7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZE SV9SWF9QTExfRU5BQkxFKTsKLQotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVn KTsKLQl1ZGVsYXkoMjAwKTsKLQotCS8qIFN3aXRjaCBmcm9tIFJhd2NsayB0byBQQ0RjbGsgKi8K LQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQlpbnRlbF9kZV93cml0ZShk ZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1BDRENMSyk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3Jl YWQoZGV2X3ByaXYsIHJlZyk7Ci0JdWRlbGF5KDIwMCk7Ci0KLQkvKiBFbmFibGUgQ1BVIEZESSBU WCBQTEwsIGFsd2F5cyBvbiBmb3IgSXJvbmxha2UgKi8KLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUp OwotCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWlmICgodGVtcCAmIEZE SV9UWF9QTExfRU5BQkxFKSA9PSAwKSB7Ci0JCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs IHRlbXAgfCBGRElfVFhfUExMX0VOQUJMRSk7Ci0KLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCByZWcpOwotCQl1ZGVsYXkoMTAwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGlsa19m ZGlfcGxsX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMpCi17Ci0Jc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2NydGMtPmJhc2UuZGV2OwotCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQllbnVtIHBpcGUgcGlwZSA9IGlu dGVsX2NydGMtPnBpcGU7Ci0JaTkxNV9yZWdfdCByZWc7Ci0JdTMyIHRlbXA7Ci0KLQkvKiBTd2l0 Y2ggZnJvbSBQQ0RjbGsgdG8gUmF3Y2xrICovCi0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wICYgfkZESV9QQ0RDTEspOwotCi0JLyogRGlzYWJsZSBDUFUgRkRJIFRY IFBMTCAqLwotCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7Ci0JdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5G RElfVFhfUExMX0VOQUJMRSk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJl Zyk7Ci0JdWRlbGF5KDEwMCk7Ci0KLQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOwotCXRlbXAgPSBp bnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBy ZWcsIHRlbXAgJiB+RkRJX1JYX1BMTF9FTkFCTEUpOwotCi0JLyogV2FpdCBmb3IgdGhlIGNsb2Nr cyB0byB0dXJuIG9mZi4gKi8KLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7 Ci0JdWRlbGF5KDEwMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlsa19mZGlfZGlzYWJsZShzdHJ1Y3Qg aW50ZWxfY3J0YyAqY3J0YykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKLQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7 Ci0JaTkxNV9yZWdfdCByZWc7Ci0JdTMyIHRlbXA7Ci0KLQkvKiBkaXNhYmxlIENQVSBGREkgdHgg YW5kIFBDSCBGREkgcnggKi8KLQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOwotCXRlbXAgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs IHRlbXAgJiB+RkRJX1RYX0VOQUJMRSk7Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2 LCByZWcpOwotCi0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH4oMHg3IDw8IDE2KTsKLQl0ZW1wIHw9IChpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkgJiBQSVBFQ09ORl9CUENfTUFTSykg PDwgMTE7Ci0JaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElfUlhfRU5B QkxFKTsKLQotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKLQl1ZGVsYXko MTAwKTsKLQotCS8qIElyb25sYWtlIHdvcmthcm91bmQsIGRpc2FibGUgY2xvY2sgcG9pbnRlciBh ZnRlciBkb3duaW5nIEZESSAqLwotCWlmIChIQVNfUENIX0lCWChkZXZfcHJpdikpCi0JCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihwaXBlKSwKLQkJCSAgICAgICBGRElf UlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUik7Ci0KLQkvKiBzdGlsbCBzZXQgdHJhaW4gcGF0dGVy biAxICovCi0JcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVhZChk ZXZfcHJpdiwgcmVnKTsKLQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOwotCXRlbXAgfD0g RkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs IHRlbXApOwotCi0JcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKLQl0ZW1wID0gaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKTsKLQlpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7Ci0JCXRlbXAg Jj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7Ci0JCXRlbXAgfD0gRkRJX0xJTktf VFJBSU5fUEFUVEVSTl8xX0NQVDsKLQl9IGVsc2UgewotCQl0ZW1wICY9IH5GRElfTElOS19UUkFJ Tl9OT05FOwotCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKLQl9Ci0JLyogQlBD IGluIEZESSByeCBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCBpbiBQSVBFQ09ORiAqLwotCXRlbXAg Jj0gfigweDA3IDw8IDE2KTsKLQl0ZW1wIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBF Q09ORihwaXBlKSkgJiBQSVBFQ09ORl9CUENfTUFTSykgPDwgMTE7Ci0JaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCk7Ci0KLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYs IHJlZyk7Ci0JdWRlbGF5KDEwMCk7Ci19Ci0KIGJvb2wgaW50ZWxfaGFzX3BlbmRpbmdfZmJfdW5w aW4oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YzsKQEAgLTY2NTksMTQzICs2MTI0LDYgQEAgc3RhdGljIHZvaWQgaW50ZWxfY29ubmVj dG9yX3ZlcmlmeV9zdGF0ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAl9 CiB9CiAKLXN0YXRpYyBpbnQgcGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMoc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0JaWYgKGNydGNfc3RhdGUtPmh3LmVuYWJsZSAmJiBj cnRjX3N0YXRlLT5oYXNfcGNoX2VuY29kZXIpCi0JCXJldHVybiBjcnRjX3N0YXRlLT5mZGlfbGFu ZXM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbGtfY2hlY2tfZmRpX2xhbmVzKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcGlwZSBwaXBlLAotCQkJICAgICAgIHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0Jc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlID0gcGlwZV9jb25maWctPnVhcGkuc3RhdGU7Ci0Jc3RydWN0IGludGVsX2NydGMgKm90aGVy X2NydGM7Ci0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm90aGVyX2NydGNfc3RhdGU7Ci0KLQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJICAgICJjaGVja2luZyBmZGkgY29uZmlnIG9u IHBpcGUgJWMsIGxhbmVzICVpXG4iLAotCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBlX2NvbmZp Zy0+ZmRpX2xhbmVzKTsKLQlpZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA+IDQpIHsKLQkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgImludmFsaWQgZmRpIGxhbmUgY29uZmln IG9uIHBpcGUgJWM6ICVpIGxhbmVzXG4iLAotCQkJICAgIHBpcGVfbmFtZShwaXBlKSwgcGlwZV9j b25maWctPmZkaV9sYW5lcyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChJU19IQVNX RUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Ci0JCWlmIChwaXBlX2Nv bmZpZy0+ZmRpX2xhbmVzID4gMikgewotCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0J CQkJICAgICJvbmx5IDIgbGFuZXMgb24gaGFzd2VsbCwgcmVxdWlyZWQ6ICVpIGxhbmVzXG4iLAot CQkJCSAgICBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9 IGVsc2UgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlpZiAoSU5URUxfTlVNX1BJUEVTKGRl dl9wcml2KSA9PSAyKQotCQlyZXR1cm4gMDsKLQotCS8qIEl2eWJyaWRnZSAzIHBpcGUgaXMgcmVh bGx5IGNvbXBsaWNhdGVkICovCi0Jc3dpdGNoIChwaXBlKSB7Ci0JY2FzZSBQSVBFX0E6Ci0JCXJl dHVybiAwOwotCWNhc2UgUElQRV9COgotCQlpZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA8PSAy KQotCQkJcmV0dXJuIDA7Ci0KLQkJb3RoZXJfY3J0YyA9IGludGVsX2dldF9jcnRjX2Zvcl9waXBl KGRldl9wcml2LCBQSVBFX0MpOwotCQlvdGhlcl9jcnRjX3N0YXRlID0KLQkJCWludGVsX2F0b21p Y19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgb3RoZXJfY3J0Yyk7Ci0JCWlmIChJU19FUlIob3RoZXJf Y3J0Y19zdGF0ZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihvdGhlcl9jcnRjX3N0YXRlKTsKLQotCQlp ZiAocGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMob3RoZXJfY3J0Y19zdGF0ZSkgPiAwKSB7Ci0JCQlk cm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCQkgICAgImludmFsaWQgc2hhcmVkIGZkaSBs YW5lIGNvbmZpZyBvbiBwaXBlICVjOiAlaSBsYW5lc1xuIiwKLQkJCQkgICAgcGlwZV9uYW1lKHBp cGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0J CXJldHVybiAwOwotCWNhc2UgUElQRV9DOgotCQlpZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA+ IDIpIHsKLQkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAotCQkJCSAgICAib25seSAyIGxh bmVzIG9uIHBpcGUgJWM6IHJlcXVpcmVkICVpIGxhbmVzXG4iLAotCQkJCSAgICBwaXBlX25hbWUo cGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0K LQotCQlvdGhlcl9jcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIFBJUEVf Qik7Ci0JCW90aGVyX2NydGNfc3RhdGUgPQotCQkJaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRl KHN0YXRlLCBvdGhlcl9jcnRjKTsKLQkJaWYgKElTX0VSUihvdGhlcl9jcnRjX3N0YXRlKSkKLQkJ CXJldHVybiBQVFJfRVJSKG90aGVyX2NydGNfc3RhdGUpOwotCi0JCWlmIChwaXBlX3JlcXVpcmVk X2ZkaV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+IDIpIHsKLQkJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLAotCQkJCSAgICAiZmRpIGxpbmsgQiB1c2VzIHRvbyBtYW55IGxhbmVzIHRvIGVu YWJsZSBsaW5rIENcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0J ZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotfQotCi0jZGVmaW5lIFJFVFJZIDEKLXN0YXRpYyBpbnQg aWxrX2ZkaV9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKLQkJ CQkgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKLXsKLQlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7Ci0Jc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSB0b19pOTE1KGRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmFkanVzdGVkX21vZGUgPSAmcGlwZV9jb25maWctPmh3LmFkanVzdGVkX21vZGU7Ci0JaW50 IGxhbmUsIGxpbmtfYncsIGZkaV9kb3RjbG9jaywgcmV0OwotCWJvb2wgbmVlZHNfcmVjb21wdXRl ID0gZmFsc2U7Ci0KLXJldHJ5OgotCS8qIEZESSBpcyBhIGJpbmFyeSBzaWduYWwgcnVubmluZyBh dCB+Mi43R0h6LCBlbmNvZGluZwotCSAqIGVhY2ggb3V0cHV0IG9jdGV0IGFzIDEwIGJpdHMuIFRo ZSBhY3R1YWwgZnJlcXVlbmN5Ci0JICogaXMgc3RvcmVkIGFzIGEgZGl2aWRlciBpbnRvIGEgMTAw TUh6IGNsb2NrLCBhbmQgdGhlCi0JICogbW9kZSBwaXhlbCBjbG9jayBpcyBzdG9yZWQgaW4gdW5p dHMgb2YgMUtIei4KLQkgKiBIZW5jZSB0aGUgYncgb2YgZWFjaCBsYW5lIGluIHRlcm1zIG9mIHRo ZSBtb2RlIHNpZ25hbAotCSAqIGlzOgotCSAqLwotCWxpbmtfYncgPSBpbnRlbF9mZGlfbGlua19m cmVxKGk5MTUsIHBpcGVfY29uZmlnKTsKLQotCWZkaV9kb3RjbG9jayA9IGFkanVzdGVkX21vZGUt PmNydGNfY2xvY2s7Ci0KLQlsYW5lID0gaWxrX2dldF9sYW5lc19yZXF1aXJlZChmZGlfZG90Y2xv Y2ssIGxpbmtfYncsCi0JCQkJICAgICAgcGlwZV9jb25maWctPnBpcGVfYnBwKTsKLQotCXBpcGVf Y29uZmlnLT5mZGlfbGFuZXMgPSBsYW5lOwotCi0JaW50ZWxfbGlua19jb21wdXRlX21fbihwaXBl X2NvbmZpZy0+cGlwZV9icHAsIGxhbmUsIGZkaV9kb3RjbG9jaywKLQkJCSAgICAgICBsaW5rX2J3 LCAmcGlwZV9jb25maWctPmZkaV9tX24sIGZhbHNlLCBmYWxzZSk7Ci0KLQlyZXQgPSBpbGtfY2hl Y2tfZmRpX2xhbmVzKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgcGlwZV9jb25maWcpOwotCWlmIChy ZXQgPT0gLUVERUFETEspCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAocmV0ID09IC1FSU5WQUwgJiYg cGlwZV9jb25maWctPnBpcGVfYnBwID4gNiozKSB7Ci0JCXBpcGVfY29uZmlnLT5waXBlX2JwcCAt PSAyKjM7Ci0JCWRybV9kYmdfa21zKCZpOTE1LT5kcm0sCi0JCQkgICAgImZkaSBsaW5rIGJ3IGNv bnN0cmFpbnQsIHJlZHVjaW5nIHBpcGUgYnBwIHRvICVpXG4iLAotCQkJICAgIHBpcGVfY29uZmln LT5waXBlX2JwcCk7Ci0JCW5lZWRzX3JlY29tcHV0ZSA9IHRydWU7Ci0JCXBpcGVfY29uZmlnLT5i d19jb25zdHJhaW5lZCA9IHRydWU7Ci0KLQkJZ290byByZXRyeTsKLQl9Ci0KLQlpZiAobmVlZHNf cmVjb21wdXRlKQotCQlyZXR1cm4gUkVUUlk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBib29sIGhz d19jcnRjX3N0YXRlX2lwc19jYXBhYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0Yyhj cnRjX3N0YXRlLT51YXBpLmNydGMpOwpAQCAtMTEzMjIsNyArMTA2NTAsNyBAQCBpbnRlbF9tb2Rl c2V0X3BpcGVfY29uZmlnKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQlyZXR1 cm4gcmV0OwogCX0KIAotCWlmIChyZXQgPT0gUkVUUlkpIHsKKwlpZiAocmV0ID09IEk5MTVfRElT UExBWV9DT05GSUdfUkVUUlkpIHsKIAkJaWYgKGRybV9XQVJOKCZpOTE1LT5kcm0sICFyZXRyeSwK IAkJCSAgICAgImxvb3AgaW4gcGlwZSBjb25maWd1cmF0aW9uIGNvbXB1dGF0aW9uXG4iKSkKIAkJ CXJldHVybiAtRUlOVkFMOwpAQCAtMTUxMjEsMTQgKzE0NDQ5LDcgQEAgdm9pZCBpbnRlbF9pbml0 X2Rpc3BsYXlfaG9va3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlkZXZf cHJpdi0+ZGlzcGxheS5jcnRjX2Rpc2FibGUgPSBpOXh4X2NydGNfZGlzYWJsZTsKIAl9CiAKLQlp ZiAoSVNfR0VOKGRldl9wcml2LCA1KSkgewotCQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190 cmFpbiA9IGlsa19mZGlfbGlua190cmFpbjsKLQl9IGVsc2UgaWYgKElTX0dFTihkZXZfcHJpdiwg NikpIHsKLQkJZGV2X3ByaXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBnZW42X2ZkaV9saW5r X3RyYWluOwotCX0gZWxzZSBpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkgewotCQkvKiBGSVhN RTogZGV0ZWN0IEIwKyBzdGVwcGluZyBhbmQgdXNlIGF1dG8gdHJhaW5pbmcgKi8KLQkJZGV2X3By aXYtPmRpc3BsYXkuZmRpX2xpbmtfdHJhaW4gPSBpdmJfbWFudWFsX2ZkaV9saW5rX3RyYWluOwot CX0KKwlpbnRlbF9mZGlfaW5pdF9ob29rKGRldl9wcml2KTsKIAogCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDkpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY29tbWl0X21vZGVzZXRfZW5hYmxl cyA9IHNrbF9jb21taXRfbW9kZXNldF9lbmFibGVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaAppbmRleCA4ZTE0NWY5YTMyZTUuLmY5 NTFhMDlkNmIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5X3R5cGVzLmgKQEAgLTE4NTIsNCArMTg1MiwxMyBAQCBzdGF0aWMgaW5saW5lIHUz MiBpOXh4X2RwbGxfY29tcHV0ZV9mcChzdHJ1Y3QgZHBsbCAqZHBsbCkKIAlyZXR1cm4gZHBsbC0+ biA8PCAxNiB8IGRwbGwtPm0xIDw8IDggfCBkcGxsLT5tMjsKIH0KIAorc3RhdGljIGlubGluZSB1 MzIgaW50ZWxfZmRpX2xpbmtfZnJlcShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQor eworCWlmIChIQVNfRERJKGRldl9wcml2KSkKKwkJcmV0dXJuIHBpcGVfY29uZmlnLT5wb3J0X2Ns b2NrOyAvKiBTUExMICovCisJZWxzZQorCQlyZXR1cm4gZGV2X3ByaXYtPmZkaV9wbGxfZnJlcTsK K30KKwogI2VuZGlmIC8qICBfX0lOVEVMX0RJU1BMQVlfVFlQRVNfSF9fICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9mZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmIyZWI5NmFlMTBhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmMKQEAgLTAsMCArMSw2ODMgQEAKKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBD b3Jwb3JhdGlvbgorICovCisjaW5jbHVkZSAiaW50ZWxfYXRvbWljLmgiCisjaW5jbHVkZSAiaW50 ZWxfZGlzcGxheV90eXBlcy5oIgorI2luY2x1ZGUgImludGVsX2ZkaS5oIgorCisvKiB1bml0cyBv ZiAxMDBNSHogKi8KK3N0YXRpYyBpbnQgcGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMoc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJaWYgKGNydGNfc3RhdGUtPmh3LmVuYWJs ZSAmJiBjcnRjX3N0YXRlLT5oYXNfcGNoX2VuY29kZXIpCisJCXJldHVybiBjcnRjX3N0YXRlLT5m ZGlfbGFuZXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbGtfY2hlY2tfZmRpX2xh bmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcGlwZSBwaXBlLAorCQkJICAgICAgIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlID0gcGlwZV9jb25maWctPnVhcGkuc3RhdGU7CisJc3RydWN0IGludGVsX2NydGMg Km90aGVyX2NydGM7CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm90aGVyX2NydGNfc3RhdGU7 CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJICAgICJjaGVja2luZyBmZGkgY29u ZmlnIG9uIHBpcGUgJWMsIGxhbmVzICVpXG4iLAorCQkgICAgcGlwZV9uYW1lKHBpcGUpLCBwaXBl X2NvbmZpZy0+ZmRpX2xhbmVzKTsKKwlpZiAocGlwZV9jb25maWctPmZkaV9sYW5lcyA+IDQpIHsK KwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgImludmFsaWQgZmRpIGxhbmUg Y29uZmlnIG9uIHBpcGUgJWM6ICVpIGxhbmVzXG4iLAorCQkJICAgIHBpcGVfbmFtZShwaXBlKSwg cGlwZV9jb25maWctPmZkaV9sYW5lcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChJ U19IQVNXRUxMKGRldl9wcml2KSB8fCBJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7CisJCWlmIChw aXBlX2NvbmZpZy0+ZmRpX2xhbmVzID4gMikgeworCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5k cm0sCisJCQkJICAgICJvbmx5IDIgbGFuZXMgb24gaGFzd2VsbCwgcmVxdWlyZWQ6ICVpIGxhbmVz XG4iLAorCQkJCSAgICBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKKwkJCXJldHVybiAtRUlOVkFM OworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoSU5URUxfTlVNX1BJ UEVTKGRldl9wcml2KSA9PSAyKQorCQlyZXR1cm4gMDsKKworCS8qIEl2eWJyaWRnZSAzIHBpcGUg aXMgcmVhbGx5IGNvbXBsaWNhdGVkICovCisJc3dpdGNoIChwaXBlKSB7CisJY2FzZSBQSVBFX0E6 CisJCXJldHVybiAwOworCWNhc2UgUElQRV9COgorCQlpZiAocGlwZV9jb25maWctPmZkaV9sYW5l cyA8PSAyKQorCQkJcmV0dXJuIDA7CisKKwkJb3RoZXJfY3J0YyA9IGludGVsX2dldF9jcnRjX2Zv cl9waXBlKGRldl9wcml2LCBQSVBFX0MpOworCQlvdGhlcl9jcnRjX3N0YXRlID0KKwkJCWludGVs X2F0b21pY19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgb3RoZXJfY3J0Yyk7CisJCWlmIChJU19FUlIo b3RoZXJfY3J0Y19zdGF0ZSkpCisJCQlyZXR1cm4gUFRSX0VSUihvdGhlcl9jcnRjX3N0YXRlKTsK KworCQlpZiAocGlwZV9yZXF1aXJlZF9mZGlfbGFuZXMob3RoZXJfY3J0Y19zdGF0ZSkgPiAwKSB7 CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkgICAgImludmFsaWQgc2hhcmVk IGZkaSBsYW5lIGNvbmZpZyBvbiBwaXBlICVjOiAlaSBsYW5lc1xuIiwKKwkJCQkgICAgcGlwZV9u YW1lKHBpcGUpLCBwaXBlX2NvbmZpZy0+ZmRpX2xhbmVzKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisJCXJldHVybiAwOworCWNhc2UgUElQRV9DOgorCQlpZiAocGlwZV9jb25maWctPmZkaV9s YW5lcyA+IDIpIHsKKwkJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAib25s eSAyIGxhbmVzIG9uIHBpcGUgJWM6IHJlcXVpcmVkICVpIGxhbmVzXG4iLAorCQkJCSAgICBwaXBl X25hbWUocGlwZSksIHBpcGVfY29uZmlnLT5mZGlfbGFuZXMpOworCQkJcmV0dXJuIC1FSU5WQUw7 CisJCX0KKworCQlvdGhlcl9jcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYs IFBJUEVfQik7CisJCW90aGVyX2NydGNfc3RhdGUgPQorCQkJaW50ZWxfYXRvbWljX2dldF9jcnRj X3N0YXRlKHN0YXRlLCBvdGhlcl9jcnRjKTsKKwkJaWYgKElTX0VSUihvdGhlcl9jcnRjX3N0YXRl KSkKKwkJCXJldHVybiBQVFJfRVJSKG90aGVyX2NydGNfc3RhdGUpOworCisJCWlmIChwaXBlX3Jl cXVpcmVkX2ZkaV9sYW5lcyhvdGhlcl9jcnRjX3N0YXRlKSA+IDIpIHsKKwkJCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiZmRpIGxpbmsgQiB1c2VzIHRvbyBtYW55IGxhbmVz IHRvIGVuYWJsZSBsaW5rIENcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcmV0dXJu IDA7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitpbnQgaWxrX2ZkaV9jb21wdXRlX2Nv bmZpZyhzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKKwkJCQkgIHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50 ZWxfY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19p OTE1KGRldik7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUg PSAmcGlwZV9jb25maWctPmh3LmFkanVzdGVkX21vZGU7CisJaW50IGxhbmUsIGxpbmtfYncsIGZk aV9kb3RjbG9jaywgcmV0OworCWJvb2wgbmVlZHNfcmVjb21wdXRlID0gZmFsc2U7CisKK3JldHJ5 OgorCS8qIEZESSBpcyBhIGJpbmFyeSBzaWduYWwgcnVubmluZyBhdCB+Mi43R0h6LCBlbmNvZGlu ZworCSAqIGVhY2ggb3V0cHV0IG9jdGV0IGFzIDEwIGJpdHMuIFRoZSBhY3R1YWwgZnJlcXVlbmN5 CisJICogaXMgc3RvcmVkIGFzIGEgZGl2aWRlciBpbnRvIGEgMTAwTUh6IGNsb2NrLCBhbmQgdGhl CisJICogbW9kZSBwaXhlbCBjbG9jayBpcyBzdG9yZWQgaW4gdW5pdHMgb2YgMUtIei4KKwkgKiBI ZW5jZSB0aGUgYncgb2YgZWFjaCBsYW5lIGluIHRlcm1zIG9mIHRoZSBtb2RlIHNpZ25hbAorCSAq IGlzOgorCSAqLworCWxpbmtfYncgPSBpbnRlbF9mZGlfbGlua19mcmVxKGk5MTUsIHBpcGVfY29u ZmlnKTsKKworCWZkaV9kb3RjbG9jayA9IGFkanVzdGVkX21vZGUtPmNydGNfY2xvY2s7CisKKwls YW5lID0gaWxrX2dldF9sYW5lc19yZXF1aXJlZChmZGlfZG90Y2xvY2ssIGxpbmtfYncsCisJCQkJ ICAgICAgcGlwZV9jb25maWctPnBpcGVfYnBwKTsKKworCXBpcGVfY29uZmlnLT5mZGlfbGFuZXMg PSBsYW5lOworCisJaW50ZWxfbGlua19jb21wdXRlX21fbihwaXBlX2NvbmZpZy0+cGlwZV9icHAs IGxhbmUsIGZkaV9kb3RjbG9jaywKKwkJCSAgICAgICBsaW5rX2J3LCAmcGlwZV9jb25maWctPmZk aV9tX24sIGZhbHNlLCBmYWxzZSk7CisKKwlyZXQgPSBpbGtfY2hlY2tfZmRpX2xhbmVzKGRldiwg aW50ZWxfY3J0Yy0+cGlwZSwgcGlwZV9jb25maWcpOworCWlmIChyZXQgPT0gLUVERUFETEspCisJ CXJldHVybiByZXQ7CisKKwlpZiAocmV0ID09IC1FSU5WQUwgJiYgcGlwZV9jb25maWctPnBpcGVf YnBwID4gNiozKSB7CisJCXBpcGVfY29uZmlnLT5waXBlX2JwcCAtPSAyKjM7CisJCWRybV9kYmdf a21zKCZpOTE1LT5kcm0sCisJCQkgICAgImZkaSBsaW5rIGJ3IGNvbnN0cmFpbnQsIHJlZHVjaW5n IHBpcGUgYnBwIHRvICVpXG4iLAorCQkJICAgIHBpcGVfY29uZmlnLT5waXBlX2JwcCk7CisJCW5l ZWRzX3JlY29tcHV0ZSA9IHRydWU7CisJCXBpcGVfY29uZmlnLT5id19jb25zdHJhaW5lZCA9IHRy dWU7CisKKwkJZ290byByZXRyeTsKKwl9CisKKwlpZiAobmVlZHNfcmVjb21wdXRlKQorCQlyZXR1 cm4gSTkxNV9ESVNQTEFZX0NPTkZJR19SRVRSWTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQg aW50ZWxfZmRpX25vcm1hbF90cmFpbihzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKK3sKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOworCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+ cGlwZTsKKwlpOTE1X3JlZ190IHJlZzsKKwl1MzIgdGVtcDsKKworCS8qIGVuYWJsZSBub3JtYWwg dHJhaW4gKi8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCByZWcpOworCWlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7CisJCXRlbXAg Jj0gfkZESV9MSU5LX1RSQUlOX05PTkVfSVZCOworCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX05P TkVfSVZCIHwgRkRJX1RYX0VOSEFOQ0VfRlJBTUVfRU5BQkxFOworCX0gZWxzZSB7CisJCXRlbXAg Jj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fTk9ORSB8 IEZESV9UWF9FTkhBTkNFX0ZSQU1FX0VOQUJMRTsKKwl9CisJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHJlZywgdGVtcCk7CisKKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRl bF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikpIHsK KwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKKwkJdGVtcCB8PSBG RElfTElOS19UUkFJTl9OT1JNQUxfQ1BUOworCX0gZWxzZSB7CisJCXRlbXAgJj0gfkZESV9MSU5L X1RSQUlOX05PTkU7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fTk9ORTsKKwl9CisJaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkhBTkNFX0ZSQU1FX0VOQUJM RSk7CisKKwkvKiB3YWl0IG9uZSBpZGxlIHBhdHRlcm4gdGltZSAqLworCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTAwMCk7CisKKwkvKiBJVkIgd2FudHMg ZXJyb3IgY29ycmVjdGlvbiBlbmFibGVkICovCisJaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikp CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCisJCQkgICAgICAgaW50ZWxfZGVfcmVh ZChkZXZfcHJpdiwgcmVnKSB8IEZESV9GU19FUlJDX0VOQUJMRSB8IEZESV9GRV9FUlJDX0VOQUJM RSk7Cit9CisKKy8qIFRoZSBGREkgbGluayB0cmFpbmluZyBmdW5jdGlvbnMgZm9yIElMSy9JYmV4 cGVhay4gKi8KK3N0YXRpYyB2b2lkIGlsa19mZGlfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFzZS5kZXY7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkZXYpOworCWVudW0gcGlw ZSBwaXBlID0gY3J0Yy0+cGlwZTsKKwlpOTE1X3JlZ190IHJlZzsKKwl1MzIgdGVtcCwgdHJpZXM7 CisKKwkvKiBGREkgbmVlZHMgYml0cyBmcm9tIHBpcGUgZmlyc3QgKi8KKwlhc3NlcnRfcGlwZV9l bmFibGVkKGRldl9wcml2LCBjcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2Rlcik7CisKKwkvKiBUcmFp biAxOiB1bWFzayBGREkgUlggSW50ZXJydXB0IHN5bWJvbF9sb2NrIGFuZCBiaXRfbG9jayBiaXQK KwkgICBmb3IgdHJhaW4gcmVzdWx0ICovCisJcmVnID0gRkRJX1JYX0lNUihwaXBlKTsKKwl0ZW1w ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0ZW1wICY9IH5GRElfUlhfU1lNQk9M X0xPQ0s7CisJdGVtcCAmPSB+RkRJX1JYX0JJVF9MT0NLOworCWludGVsX2RlX3dyaXRlKGRldl9w cml2LCByZWcsIHRlbXApOworCWludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5 KDE1MCk7CisKKwkvKiBlbmFibGUgQ1BVIEZESSBUWCBhbmQgUENIIEZESSBSWCAqLworCXJlZyA9 IEZESV9UWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7 CisJdGVtcCAmPSB+RkRJX0RQX1BPUlRfV0lEVEhfTUFTSzsKKwl0ZW1wIHw9IEZESV9EUF9QT1JU X1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7CisJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5f Tk9ORTsKKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwlpbnRlbF9kZV93cml0 ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX0VOQUJMRSk7CisKKwlyZWcgPSBGRElfUlhf Q1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCXRlbXAg Jj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJO XzE7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9SWF9FTkFCTEUp OworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgxNTAp OworCisJLyogSXJvbmxha2Ugd29ya2Fyb3VuZCwgZW5hYmxlIGNsb2NrIHBvaW50ZXIgYWZ0ZXIg RkRJIGVuYWJsZSovCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEZESV9SWF9DSElDS0VOKHBp cGUpLAorCQkgICAgICAgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9PVlIpOworCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJQ0tFTihwaXBlKSwKKwkJICAgICAgIEZESV9SWF9Q SEFTRV9TWU5DX1BPSU5URVJfT1ZSIHwgRkRJX1JYX1BIQVNFX1NZTkNfUE9JTlRFUl9FTik7CisK KwlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOworCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IDU7IHRy aWVzKyspIHsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCWRybV9k Ymdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKKworCQlp ZiAoKHRlbXAgJiBGRElfUlhfQklUX0xPQ0spKSB7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwgIkZESSB0cmFpbiAxIGRvbmUuXG4iKTsKKwkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2 LCByZWcsIHRlbXAgfCBGRElfUlhfQklUX0xPQ0spOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYg KHRyaWVzID09IDUpCisJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMSBmYWls IVxuIik7CisKKwkvKiBUcmFpbiAyICovCisJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKKwl0ZW1w ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0ZW1wICY9IH5GRElfTElOS19UUkFJ Tl9OT05FOworCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOworCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0ZW1wICY9IH5GRElfTElOS19U UkFJTl9OT05FOworCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yOworCWludGVsX2Rl X3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsK Kwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA1OyB0cmllcysrKSB7CisJCXRlbXAgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWcpOworCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZE SV9SWF9JSVIgMHgleFxuIiwgdGVtcCk7CisKKwkJaWYgKHRlbXAgJiBGRElfUlhfU1lNQk9MX0xP Q0spIHsKKwkJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCisJCQkJICAgICAgIHRlbXAg fCBGRElfUlhfU1lNQk9MX0xPQ0spOworCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJG REkgdHJhaW4gMiBkb25lLlxuIik7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAodHJpZXMgPT0g NSkKKwkJZHJtX2VycigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAyIGZhaWwhXG4iKTsKKwor CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiRkRJIHRyYWluIGRvbmVcbiIpOworCit9CisK K3N0YXRpYyBjb25zdCBpbnQgc25iX2JfZmRpX3RyYWluX3BhcmFtW10gPSB7CisJRkRJX0xJTktf VFJBSU5fNDAwTVZfMERCX1NOQl9CLAorCUZESV9MSU5LX1RSQUlOXzQwME1WXzZEQl9TTkJfQiwK KwlGRElfTElOS19UUkFJTl82MDBNVl8zXzVEQl9TTkJfQiwKKwlGRElfTElOS19UUkFJTl84MDBN Vl8wREJfU05CX0IsCit9OworCisvKiBUaGUgRkRJIGxpbmsgdHJhaW5pbmcgZnVuY3Rpb25zIGZv ciBTTkIvQ291Z2FycG9pbnQuICovCitzdGF0aWMgdm9pZCBnZW42X2ZkaV9saW5rX3RyYWluKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjLAorCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRl djsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJ ZW51bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCWk5MTVfcmVnX3QgcmVnOworCXUzMiB0ZW1w LCBpLCByZXRyeTsKKworCS8qIFRyYWluIDE6IHVtYXNrIEZESSBSWCBJbnRlcnJ1cHQgc3ltYm9s X2xvY2sgYW5kIGJpdF9sb2NrIGJpdAorCSAgIGZvciB0cmFpbiByZXN1bHQgKi8KKwlyZWcgPSBG RElfUlhfSU1SKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOwor CXRlbXAgJj0gfkZESV9SWF9TWU1CT0xfTE9DSzsKKwl0ZW1wICY9IH5GRElfUlhfQklUX0xPQ0s7 CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlpbnRlbF9kZV9wb3N0 aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5KDE1MCk7CisKKwkvKiBlbmFibGUgQ1BV IEZESSBUWCBhbmQgUENIIEZESSBSWCAqLworCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdGVtcCAmPSB+RkRJX0RQX1BPUlRf V0lEVEhfTUFTSzsKKwl0ZW1wIHw9IEZESV9EUF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9s YW5lcyk7CisJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORTsKKwl0ZW1wIHw9IEZESV9MSU5L X1RSQUlOX1BBVFRFUk5fMTsKKwl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9WT0xfRU1QX01BU0s7 CisJLyogU05CLUIgKi8KKwl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOXzQwME1WXzBEQl9TTkJfQjsK KwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1RYX0VOQUJMRSk7CisK KwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRkRJX1JYX01JU0MocGlwZSksCisJCSAgICAgICBG RElfUlhfVFAxX1RPX1RQMl80OCB8IEZESV9SWF9GRElfREVMQVlfOTApOworCisJcmVnID0gRkRJ X1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwlp ZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpKSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BB VFRFUk5fTUFTS19DUFQ7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0NQVDsK Kwl9IGVsc2UgeworCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCQl0ZW1wIHw9IEZE SV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwl9CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJl ZywgdGVtcCB8IEZESV9SWF9FTkFCTEUpOworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9w cml2LCByZWcpOworCXVkZWxheSgxNTApOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewor CQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgcmVnKTsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOworCQl0ZW1w IHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtpXTsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs IHJlZywgdGVtcCk7CisKKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOwor CQl1ZGVsYXkoNTAwKTsKKworCQlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCA1OyByZXRyeSsrKSB7 CisJCQlyZWcgPSBGRElfUlhfSUlSKHBpcGUpOworCQkJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7CisJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESV9SWF9JSVIg MHgleFxuIiwgdGVtcCk7CisJCQlpZiAodGVtcCAmIEZESV9SWF9CSVRfTE9DSykgeworCQkJCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsCisJCQkJCSAgICAgICB0ZW1wIHwgRkRJX1JYX0JJ VF9MT0NLKTsKKwkJCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKKwkJCQkJICAgICJGREkg dHJhaW4gMSBkb25lLlxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQl1ZGVsYXkoNTApOworCQl9 CisJCWlmIChyZXRyeSA8IDUpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gNCkKKwkJZHJtX2Vy cigmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiAxIGZhaWwhXG4iKTsKKworCS8qIFRyYWluIDIg Ki8KKwlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9w cml2LCByZWcpOworCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJdGVtcCB8PSBGRElf TElOS19UUkFJTl9QQVRURVJOXzI7CisJaWYgKElTX0dFTihkZXZfcHJpdiwgNikpIHsKKwkJdGVt cCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9NQVNLOworCQkvKiBTTkItQiAqLworCQl0ZW1w IHw9IEZESV9MSU5LX1RSQUlOXzQwME1WXzBEQl9TTkJfQjsKKwl9CisJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlmIChIQVNfUENIX0NQVChkZXZfcHJp dikpIHsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKKwkJdGVt cCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzJfQ1BUOworCX0gZWxzZSB7CisJCXRlbXAgJj0g fkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8y OworCX0KKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKKworCWludGVsX2Rl X3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTUwKTsKKworCWZvciAoaSA9 IDA7IGkgPCA0OyBpKyspIHsKKwkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKKwkJdGVtcCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1ZP TF9FTVBfTUFTSzsKKwkJdGVtcCB8PSBzbmJfYl9mZGlfdHJhaW5fcGFyYW1baV07CisJCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJCWludGVsX2RlX3Bvc3RpbmdfcmVh ZChkZXZfcHJpdiwgcmVnKTsKKwkJdWRlbGF5KDUwMCk7CisKKwkJZm9yIChyZXRyeSA9IDA7IHJl dHJ5IDwgNTsgcmV0cnkrKykgeworCQkJcmVnID0gRkRJX1JYX0lJUihwaXBlKTsKKwkJCXRlbXAg PSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCQkJZHJtX2RiZ19rbXMoJmRldl9wcml2 LT5kcm0sICJGRElfUlhfSUlSIDB4JXhcbiIsIHRlbXApOworCQkJaWYgKHRlbXAgJiBGRElfUlhf U1lNQk9MX0xPQ0spIHsKKwkJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLAorCQkJCQkg ICAgICAgdGVtcCB8IEZESV9SWF9TWU1CT0xfTE9DSyk7CisJCQkJZHJtX2RiZ19rbXMoJmRldl9w cml2LT5kcm0sCisJCQkJCSAgICAiRkRJIHRyYWluIDIgZG9uZS5cbiIpOworCQkJCWJyZWFrOwor CQkJfQorCQkJdWRlbGF5KDUwKTsKKwkJfQorCQlpZiAocmV0cnkgPCA1KQorCQkJYnJlYWs7CisJ fQorCWlmIChpID09IDQpCisJCWRybV9lcnIoJmRldl9wcml2LT5kcm0sICJGREkgdHJhaW4gMiBm YWlsIVxuIik7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25l LlxuIik7Cit9CisKKy8qIE1hbnVhbCBsaW5rIHRyYWluaW5nIGZvciBJdnkgQnJpZGdlIEEwIHBh cnRzICovCitzdGF0aWMgdm9pZCBpdmJfbWFudWFsX2ZkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRl bF9jcnRjICpjcnRjLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5iYXNlLmRldjsK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CisJZW51 bSBwaXBlIHBpcGUgPSBjcnRjLT5waXBlOworCWk5MTVfcmVnX3QgcmVnOworCXUzMiB0ZW1wLCBp LCBqOworCisJLyogVHJhaW4gMTogdW1hc2sgRkRJIFJYIEludGVycnVwdCBzeW1ib2xfbG9jayBh bmQgYml0X2xvY2sgYml0CisJICAgZm9yIHRyYWluIHJlc3VsdCAqLworCXJlZyA9IEZESV9SWF9J TVIocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdGVtcCAm PSB+RkRJX1JYX1NZTUJPTF9MT0NLOworCXRlbXAgJj0gfkZESV9SWF9CSVRfTE9DSzsKKwlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wKTsKKworCWludGVsX2RlX3Bvc3RpbmdfcmVh ZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTUwKTsKKworCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLCAiRkRJX1JYX0lJUiBiZWZvcmUgbGluayB0cmFpbiAweCV4XG4iLAorCQkgICAgaW50 ZWxfZGVfcmVhZChkZXZfcHJpdiwgRkRJX1JYX0lJUihwaXBlKSkpOworCisJLyogVHJ5IGVhY2gg dnN3aW5nIGFuZCBwcmVlbXBoYXNpcyBzZXR0aW5nIHR3aWNlIGJlZm9yZSBtb3Zpbmcgb24gKi8K Kwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzbmJfYl9mZGlfdHJhaW5fcGFyYW0pICogMjsg aisrKSB7CisJCS8qIGRpc2FibGUgZmlyc3QgaW4gY2FzZSB3ZSBuZWVkIHRvIHJldHJ5ICovCisJ CXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCByZWcpOworCQl0ZW1wICY9IH4oRkRJX0xJTktfVFJBSU5fQVVUTyB8IEZESV9MSU5LX1RSQUlO X05PTkVfSVZCKTsKKwkJdGVtcCAmPSB+RkRJX1RYX0VOQUJMRTsKKwkJaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwkJdGVt cCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RS QUlOX0FVVE87CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7CisJ CXRlbXAgJj0gfkZESV9SWF9FTkFCTEU7CisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcs IHRlbXApOworCisJCS8qIGVuYWJsZSBDUFUgRkRJIFRYIGFuZCBQQ0ggRkRJIFJYICovCisJCXJl ZyA9IEZESV9UWF9DVEwocGlwZSk7CisJCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBy ZWcpOworCQl0ZW1wICY9IH5GRElfRFBfUE9SVF9XSURUSF9NQVNLOworCQl0ZW1wIHw9IEZESV9E UF9QT1JUX1dJRFRIKGNydGNfc3RhdGUtPmZkaV9sYW5lcyk7CisJCXRlbXAgfD0gRkRJX0xJTktf VFJBSU5fUEFUVEVSTl8xX0lWQjsKKwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fVk9MX0VNUF9N QVNLOworCQl0ZW1wIHw9IHNuYl9iX2ZkaV90cmFpbl9wYXJhbVtqLzJdOworCQl0ZW1wIHw9IEZE SV9DT01QT1NJVEVfU1lOQzsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8 IEZESV9UWF9FTkFCTEUpOworCisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfTUlT QyhwaXBlKSwKKwkJCSAgICAgICBGRElfUlhfVFAxX1RPX1RQMl80OCB8IEZESV9SWF9GRElfREVM QVlfOTApOworCisJCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJCXRlbXAgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCByZWcpOworCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMV9D UFQ7CisJCXRlbXAgfD0gRkRJX0NPTVBPU0lURV9TWU5DOworCQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX0VOQUJMRSk7CisKKwkJaW50ZWxfZGVfcG9zdGluZ19y ZWFkKGRldl9wcml2LCByZWcpOworCQl1ZGVsYXkoMSk7IC8qIHNob3VsZCBiZSAwLjV1cyAqLwor CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXJlZyA9IEZESV9SWF9JSVIocGlwZSk7 CisJCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKKworCQkJaWYgKHRl bXAgJiBGRElfUlhfQklUX0xPQ0sgfHwKKwkJCSAgICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cmVnKSAmIEZESV9SWF9CSVRfTE9DSykpIHsKKwkJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cmVnLAorCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9CSVRfTE9DSyk7CisJCQkJZHJtX2RiZ19r bXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAiRkRJIHRyYWluIDEgZG9uZSwgbGV2ZWwgJWku XG4iLAorCQkJCQkgICAgaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQl1ZGVsYXkoMSk7IC8qIHNo b3VsZCBiZSAwLjV1cyAqLworCQl9CisJCWlmIChpID09IDQpIHsKKwkJCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAorCQkJCSAgICAiRkRJIHRyYWluIDEgZmFpbCBvbiB2c3dpbmcgJWRcbiIs IGogLyAyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogVHJhaW4gMiAqLworCQlyZWcgPSBG RElfVFhfQ1RMKHBpcGUpOworCQl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsK KwkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fTk9ORV9JVkI7CisJCXRlbXAgfD0gRkRJX0xJTktf VFJBSU5fUEFUVEVSTl8yX0lWQjsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVt cCk7CisKKwkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwkJdGVtcCA9IGludGVsX2RlX3JlYWQo ZGV2X3ByaXYsIHJlZyk7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19D UFQ7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8yX0NQVDsKKwkJaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCByZWcpOworCQl1ZGVsYXkoMik7IC8qIHNob3VsZCBiZSAxLjV1cyAqLworCisJCWZv ciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXJlZyA9IEZESV9SWF9JSVIocGlwZSk7CisJCQl0 ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwkJCWRybV9kYmdfa21zKCZkZXZf cHJpdi0+ZHJtLCAiRkRJX1JYX0lJUiAweCV4XG4iLCB0ZW1wKTsKKworCQkJaWYgKHRlbXAgJiBG RElfUlhfU1lNQk9MX0xPQ0sgfHwKKwkJCSAgICAoaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVn KSAmIEZESV9SWF9TWU1CT0xfTE9DSykpIHsKKwkJCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg cmVnLAorCQkJCQkgICAgICAgdGVtcCB8IEZESV9SWF9TWU1CT0xfTE9DSyk7CisJCQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJCSAgICAiRkRJIHRyYWluIDIgZG9uZSwgbGV2ZWwg JWkuXG4iLAorCQkJCQkgICAgaSk7CisJCQkJZ290byB0cmFpbl9kb25lOworCQkJfQorCQkJdWRl bGF5KDIpOyAvKiBzaG91bGQgYmUgMS41dXMgKi8KKwkJfQorCQlpZiAoaSA9PSA0KQorCQkJZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkJICAgICJGREkgdHJhaW4gMiBmYWlsIG9uIHZz d2luZyAlZFxuIiwgaiAvIDIpOworCX0KKwordHJhaW5fZG9uZToKKwlkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwgIkZESSB0cmFpbiBkb25lLlxuIik7Cit9CisKK3ZvaWQgaWxrX2ZkaV9wbGxf ZW5hYmxlKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51 YXBpLmNydGMpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo aW50ZWxfY3J0Yy0+YmFzZS5kZXYpOworCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlw ZTsKKwlpOTE1X3JlZ190IHJlZzsKKwl1MzIgdGVtcDsKKworCS8qIGVuYWJsZSBQQ0ggRkRJIFJY IFBMTCwgd2FpdCB3YXJtdXAgcGx1cyBETUkgbGF0ZW5jeSAqLworCXJlZyA9IEZESV9SWF9DVEwo cGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdGVtcCAmPSB+ KEZESV9EUF9QT1JUX1dJRFRIX01BU0sgfCAoMHg3IDw8IDE2KSk7CisJdGVtcCB8PSBGRElfRFBf UE9SVF9XSURUSChjcnRjX3N0YXRlLT5mZGlfbGFuZXMpOworCXRlbXAgfD0gKGludGVsX2RlX3Jl YWQoZGV2X3ByaXYsIFBJUEVDT05GKHBpcGUpKSAmIFBJUEVDT05GX0JQQ19NQVNLKSA8PCAxMTsK KwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wIHwgRkRJX1JYX1BMTF9FTkFCTEUp OworCisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgyMDAp OworCisJLyogU3dpdGNoIGZyb20gUmF3Y2xrIHRvIFBDRGNsayAqLworCXRlbXAgPSBpbnRlbF9k ZV9yZWFkKGRldl9wcml2LCByZWcpOworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRl bXAgfCBGRElfUENEQ0xLKTsKKworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgcmVn KTsKKwl1ZGVsYXkoMjAwKTsKKworCS8qIEVuYWJsZSBDUFUgRkRJIFRYIFBMTCwgYWx3YXlzIG9u IGZvciBJcm9ubGFrZSAqLworCXJlZyA9IEZESV9UWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJaWYgKCh0ZW1wICYgRkRJX1RYX1BMTF9FTkFCTEUp ID09IDApIHsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCB8IEZESV9UWF9Q TExfRU5BQkxFKTsKKworCQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJ CXVkZWxheSgxMDApOworCX0KK30KKwordm9pZCBpbGtfZmRpX3BsbF9kaXNhYmxlKHN0cnVjdCBp bnRlbF9jcnRjICppbnRlbF9jcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRl bF9jcnRjLT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KGRldik7CisJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCWk5MTVf cmVnX3QgcmVnOworCXUzMiB0ZW1wOworCisJLyogU3dpdGNoIGZyb20gUENEY2xrIHRvIFJhd2Ns ayAqLworCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJdGVtcCA9IGludGVsX2RlX3JlYWQoZGV2 X3ByaXYsIHJlZyk7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCAmIH5GRElf UENEQ0xLKTsKKworCS8qIERpc2FibGUgQ1BVIEZESSBUWCBQTEwgKi8KKwlyZWcgPSBGRElfVFhf Q1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWludGVs X2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+RkRJX1RYX1BMTF9FTkFCTEUpOworCisJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgxMDApOworCisJ cmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg cmVnKTsKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgcmVnLCB0ZW1wICYgfkZESV9SWF9QTExf RU5BQkxFKTsKKworCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gdHVybiBvZmYuICovCisJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCXVkZWxheSgxMDApOworfQorCit2 b2lkIGlsa19mZGlfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwll bnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7CisJaTkxNV9yZWdfdCByZWc7CisJdTMyIHRlbXA7 CisKKwkvKiBkaXNhYmxlIENQVSBGREkgdHggYW5kIFBDSCBGREkgcnggKi8KKwlyZWcgPSBGRElf VFhfQ1RMKHBpcGUpOworCXRlbXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCByZWcpOworCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXAgJiB+RkRJX1RYX0VOQUJMRSk7CisJaW50 ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCByZWcpOworCisJcmVnID0gRkRJX1JYX0NUTChw aXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0ZW1wICY9IH4o MHg3IDw8IDE2KTsKKwl0ZW1wIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihw aXBlKSkgJiBQSVBFQ09ORl9CUENfTUFTSykgPDwgMTE7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIHJlZywgdGVtcCAmIH5GRElfUlhfRU5BQkxFKTsKKworCWludGVsX2RlX3Bvc3RpbmdfcmVh ZChkZXZfcHJpdiwgcmVnKTsKKwl1ZGVsYXkoMTAwKTsKKworCS8qIElyb25sYWtlIHdvcmthcm91 bmQsIGRpc2FibGUgY2xvY2sgcG9pbnRlciBhZnRlciBkb3duaW5nIEZESSAqLworCWlmIChIQVNf UENIX0lCWChkZXZfcHJpdikpCisJCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBGRElfUlhfQ0hJ Q0tFTihwaXBlKSwKKwkJCSAgICAgICBGRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX09WUik7CisK KwkvKiBzdGlsbCBzZXQgdHJhaW4gcGF0dGVybiAxICovCisJcmVnID0gRkRJX1RYX0NUTChwaXBl KTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwl0ZW1wICY9IH5GRElf TElOS19UUkFJTl9OT05FOworCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOworCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCByZWcsIHRlbXApOworCisJcmVnID0gRkRJX1JYX0NUTChw aXBlKTsKKwl0ZW1wID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgcmVnKTsKKwlpZiAoSEFTX1BD SF9DUFQoZGV2X3ByaXYpKSB7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFT S19DUFQ7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0NQVDsKKwl9IGVsc2Ug eworCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCQl0ZW1wIHw9IEZESV9MSU5LX1RS QUlOX1BBVFRFUk5fMTsKKwl9CisJLyogQlBDIGluIEZESSByeCBpcyBjb25zaXN0ZW50IHdpdGgg dGhhdCBpbiBQSVBFQ09ORiAqLworCXRlbXAgJj0gfigweDA3IDw8IDE2KTsKKwl0ZW1wIHw9IChp bnRlbF9kZV9yZWFkKGRldl9wcml2LCBQSVBFQ09ORihwaXBlKSkgJiBQSVBFQ09ORl9CUENfTUFT SykgPDwgMTE7CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIHJlZywgdGVtcCk7CisKKwlpbnRl bF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIHJlZyk7CisJdWRlbGF5KDEwMCk7Cit9CisKK3Zv aWQKK2ludGVsX2ZkaV9pbml0X2hvb2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQoreworCWlmIChJU19HRU4oZGV2X3ByaXYsIDUpKSB7CisJCWRldl9wcml2LT5kaXNwbGF5LmZk aV9saW5rX3RyYWluID0gaWxrX2ZkaV9saW5rX3RyYWluOworCX0gZWxzZSBpZiAoSVNfR0VOKGRl dl9wcml2LCA2KSkgeworCQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGdlbjZf ZmRpX2xpbmtfdHJhaW47CisJfSBlbHNlIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKSB7CisJ CS8qIEZJWE1FOiBkZXRlY3QgQjArIHN0ZXBwaW5nIGFuZCB1c2UgYXV0byB0cmFpbmluZyAqLwor CQlkZXZfcHJpdi0+ZGlzcGxheS5mZGlfbGlua190cmFpbiA9IGl2Yl9tYW51YWxfZmRpX2xpbmtf dHJhaW47CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9mZGkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZmRpLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hOWNkMjE2NjNlYjgKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2ZkaS5oCkBA IC0wLDAgKzEsMjIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisg KiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpZm5kZWYgX0lO VEVMX0ZESV9IXworI2RlZmluZSBfSU5URUxfRkRJX0hfCisKK3N0cnVjdCBkcm1faTkxNV9wcml2 YXRlOworc3RydWN0IGludGVsX2NydGM7CitzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZTsKKworI2Rl ZmluZSBJOTE1X0RJU1BMQVlfQ09ORklHX1JFVFJZIDEKK2ludCBpbGtfZmRpX2NvbXB1dGVfY29u ZmlnKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAorCQkJICAgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKK3ZvaWQgaW50ZWxfZmRpX25vcm1hbF90cmFpbihzdHJ1 Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cit2b2lkIGlsa19mZGlfZGlzYWJsZShzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0Yyk7Cit2b2lkIGlsa19mZGlfcGxsX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGMg KmludGVsX2NydGMpOwordm9pZCBpbGtfZmRpX3BsbF9lbmFibGUoY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwordm9pZCBpbnRlbF9mZGlfaW5pdF9ob29rKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CisKKyNlbmRpZgotLSAKMi4yNy4wCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK