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 B13C4C4361B for ; Wed, 9 Dec 2020 04:21:57 +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 6CB7823B5F for ; Wed, 9 Dec 2020 04:21:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6CB7823B5F 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 E3FCC6E0E6; Wed, 9 Dec 2020 04:21:56 +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 7911E89BF5 for ; Wed, 9 Dec 2020 04:21:55 +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-146-dJbhG4yFOGWB2N3VUaWX3w-1; Tue, 08 Dec 2020 23:21:50 -0500 X-MC-Unique: dJbhG4yFOGWB2N3VUaWX3w-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E9762800D55 for ; Wed, 9 Dec 2020 04:21:49 +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 C7FA06E521 for ; Wed, 9 Dec 2020 04:21:48 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Wed, 9 Dec 2020 14:21:41 +1000 Message-Id: <20201209042144.2281-2-airlied@gmail.com> In-Reply-To: <20201209042144.2281-1-airlied@gmail.com> References: <20201209042144.2281-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 1/4] drm/i915: refactor cursor code out of i915_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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KClRoaXMgZmlsZSBpcyBhIG1v bnN0ZXIsIGxldCdzIHN0YXJ0IHNpbXBsZSwgdGhlIGN1cnNvciBwbGFuZSBjb2RlCnNlZW1zIHBy ZXR0eSBzdGFuZGFsb25lLCBhbmQgc3BsaXRzIG91dCBlYXNpbHkgZW5vdWdoLgoKU2lnbmVkLW9m Zi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5jICB8IDgxNyArKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyB8IDc5NiArLS0tLS0t LS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5o IHwgIDEyICsKIDQgZmlsZXMgY2hhbmdlZCwgODM2IGluc2VydGlvbnMoKyksIDc5MCBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu dGVsX2N1cnNvci5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBlNTU3NGU1MDZhNWMuLjk4YTM1 YjkzOTA1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTE5Nyw2ICsxOTcsNyBAQCBpOTE1LXkg Kz0gXAogCWRpc3BsYXkvaW50ZWxfY29tYm9fcGh5Lm8gXAogCWRpc3BsYXkvaW50ZWxfY29ubmVj dG9yLm8gXAogCWRpc3BsYXkvaW50ZWxfY3NyLm8gXAorCWRpc3BsYXkvaW50ZWxfY3Vyc29yLm8g XAogCWRpc3BsYXkvaW50ZWxfZGlzcGxheS5vIFwKIAlkaXNwbGF5L2ludGVsX2Rpc3BsYXlfcG93 ZXIubyBcCiAJZGlzcGxheS9pbnRlbF9kcGlvX3BoeS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3Vyc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2N1cnNvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uZDY5ZWFjMDY3MjU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuYwpAQCAtMCwwICsxLDgxNyBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENv cnBvcmF0aW9uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2RhbWFnZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3Bs YW5lX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisKKyNpbmNsdWRlICJp bnRlbF9hdG9taWMuaCIKKyNpbmNsdWRlICJpbnRlbF9hdG9taWNfcGxhbmUuaCIKKyNpbmNsdWRl ICJpbnRlbF9kaXNwbGF5X3R5cGVzLmgiCisjaW5jbHVkZSAiaW50ZWxfZGlzcGxheS5oIgorCisj aW5jbHVkZSAiaW50ZWxfZnJvbnRidWZmZXIuaCIKKyNpbmNsdWRlICJpbnRlbF9wbS5oIgorI2lu Y2x1ZGUgImludGVsX3Bzci5oIgorI2luY2x1ZGUgImludGVsX3Nwcml0ZS5oIgorCisvKiBDdXJz b3IgZm9ybWF0cyAqLworc3RhdGljIGNvbnN0IHUzMiBpbnRlbF9jdXJzb3JfZm9ybWF0c1tdID0g eworCURSTV9GT1JNQVRfQVJHQjg4ODgsCit9OworCitzdGF0aWMgY29uc3QgdTY0IGN1cnNvcl9m b3JtYXRfbW9kaWZpZXJzW10gPSB7CisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JN QVRfTU9EX0lOVkFMSUQKK307CisKK3N0YXRpYyBib29sCituZWVkc19tb2Rlc2V0KGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gZHJtX2F0b21pY19jcnRj X25lZWRzX21vZGVzZXQoJnN0YXRlLT51YXBpKTsKK30KKworc3RhdGljIHN0cnVjdCBpbnRlbF9m cm9udGJ1ZmZlciAqCit0b19pbnRlbF9mcm9udGJ1ZmZlcihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYikKK3sKKwlyZXR1cm4gZmIgPyB0b19pbnRlbF9mcmFtZWJ1ZmZlcihmYiktPmZyb250YnVm ZmVyIDogTlVMTDsKK30KKworc3RhdGljIHUzMiBpbnRlbF9jdXJzb3JfYmFzZShjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRl dik7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcu ZmI7CisJY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29i aihmYik7CisJdTMyIGJhc2U7CisKKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmRpc3BsYXku Y3Vyc29yX25lZWRzX3BoeXNpY2FsKQorCQliYXNlID0gc2dfZG1hX2FkZHJlc3Mob2JqLT5tbS5w YWdlcy0+c2dsKTsKKwllbHNlCisJCWJhc2UgPSBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFu ZV9zdGF0ZSk7CisKKwlyZXR1cm4gYmFzZSArIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5v ZmZzZXQ7Cit9CisKK3N0YXRpYyB1MzIgaW50ZWxfY3Vyc29yX3Bvc2l0aW9uKGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJaW50IHggPSBwbGFuZV9zdGF0 ZS0+dWFwaS5kc3QueDE7CisJaW50IHkgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7CisJdTMy IHBvcyA9IDA7CisKKwlpZiAoeCA8IDApIHsKKwkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBD VVJTT1JfWF9TSElGVDsKKwkJeCA9IC14OworCX0KKwlwb3MgfD0geCA8PCBDVVJTT1JfWF9TSElG VDsKKworCWlmICh5IDwgMCkgeworCQlwb3MgfD0gQ1VSU09SX1BPU19TSUdOIDw8IENVUlNPUl9Z X1NISUZUOworCQl5ID0gLXk7CisJfQorCXBvcyB8PSB5IDw8IENVUlNPUl9ZX1NISUZUOworCisJ cmV0dXJuIHBvczsKK30KKworc3RhdGljIGJvb2wgaW50ZWxfY3Vyc29yX3NpemVfb2soY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3Qg ZHJtX21vZGVfY29uZmlnICpjb25maWcgPQorCQkmcGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRl di0+bW9kZV9jb25maWc7CisJaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRl LT51YXBpLmRzdCk7CisJaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUt PnVhcGkuZHN0KTsKKworCXJldHVybiB3aWR0aCA+IDAgJiYgd2lkdGggPD0gY29uZmlnLT5jdXJz b3Jfd2lkdGggJiYKKwkJaGVpZ2h0ID4gMCAmJiBoZWlnaHQgPD0gY29uZmlnLT5jdXJzb3JfaGVp Z2h0OworfQorCitzdGF0aWMgaW50IGludGVsX2N1cnNvcl9jaGVja19zdXJmYWNlKHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0KKwkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsK Kwl1bnNpZ25lZCBpbnQgcm90YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJaW50 IHNyY194LCBzcmNfeTsKKwl1MzIgb2Zmc2V0OworCWludCByZXQ7CisKKwlyZXQgPSBpbnRlbF9w bGFuZV9jb21wdXRlX2d0dChwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCWlmICghcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKKwkJcmV0dXJuIDA7CisKKwlzcmNf eCA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy54MSA+PiAxNjsKKwlzcmNfeSA9IHBsYW5lX3N0YXRl LT51YXBpLnNyYy55MSA+PiAxNjsKKworCWludGVsX2FkZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNy Y195LCBwbGFuZV9zdGF0ZSwgMCk7CisJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGln bmVkX29mZnNldCgmc3JjX3gsICZzcmNfeSwKKwkJCQkJCSAgICBwbGFuZV9zdGF0ZSwgMCk7CisK KwlpZiAoc3JjX3ggIT0gMCB8fCBzcmNfeSAhPSAwKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJp di0+ZHJtLAorCQkJICAgICJBcmJpdHJhcnkgY3Vyc29yIHBhbm5pbmcgbm90IHN1cHBvcnRlZFxu Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogUHV0IHRoZSBmaW5hbCBjb29y ZGluYXRlcyBiYWNrIHNvIHRoYXQgdGhlIHNyYworCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdpbGwg c2VlIHRoZSByaWdodCB2YWx1ZXMuCisJICovCisJZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZwbGFu ZV9zdGF0ZS0+dWFwaS5zcmMsCisJCQkgICAgICBzcmNfeCA8PCAxNiwgc3JjX3kgPDwgMTYpOwor CisJLyogSUxLKyBkbyB0aGlzIGF1dG9tYWdpY2FsbHkgaW4gaGFyZHdhcmUgKi8KKwlpZiAoSEFT X0dNQ0goZGV2X3ByaXYpICYmIHJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkgeworCQlj b25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwkJ aW50IHNyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7 CisJCWludCBzcmNfaCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+ PiAxNjsKKworCQlvZmZzZXQgKz0gKHNyY19oICogc3JjX3cgLSAxKSAqIGZiLT5mb3JtYXQtPmNw cFswXTsKKwl9CisKKwlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0ID0gb2Zmc2V0 OworCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS54ID0gc3JjX3g7CisJcGxhbmVfc3RhdGUt PmNvbG9yX3BsYW5lWzBdLnkgPSBzcmNfeTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGludGVsX2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwK KwkJCSAgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJY29u c3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBs YW5lLT5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fcmVjdCBzcmMgPSBwbGFuZV9zdGF0ZS0+dWFw aS5zcmM7CisJY29uc3Qgc3RydWN0IGRybV9yZWN0IGRzdCA9IHBsYW5lX3N0YXRlLT51YXBpLmRz dDsKKwlpbnQgcmV0OworCisJaWYgKGZiICYmIGZiLT5tb2RpZmllciAhPSBEUk1fRk9STUFUX01P RF9MSU5FQVIpIHsKKwkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgImN1cnNvciBjYW5ub3QgYmUg dGlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBpbnRlbF9hdG9taWNf cGxhbmVfY2hlY2tfY2xpcHBpbmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUsCisJCQkJCQlEUk1f UExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJ TkcsCisJCQkJCQl0cnVlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVXNlIHRo ZSB1bmNsaXBwZWQgc3JjL2RzdCByZWN0YW5nbGVzLCB3aGljaCB3ZSBwcm9ncmFtIHRvIGh3ICov CisJcGxhbmVfc3RhdGUtPnVhcGkuc3JjID0gc3JjOworCXBsYW5lX3N0YXRlLT51YXBpLmRzdCA9 IGRzdDsKKworCXJldCA9IGludGVsX2N1cnNvcl9jaGVja19zdXJmYWNlKHBsYW5lX3N0YXRlKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNp YmxlKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGlu YXRlcyhwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitpODQ1X2N1cnNvcl9tYXhfc3RyaWRlKHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCSAgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9k aWZpZXIsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJcmV0dXJuIDIwNDg7 Cit9CisKK3N0YXRpYyB1MzIgaTg0NV9jdXJzb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJdTMyIGNudGwgPSAwOworCisJaWYgKGNydGNf c3RhdGUtPmdhbW1hX2VuYWJsZSkKKwkJY250bCB8PSBDVVJTT1JfR0FNTUFfRU5BQkxFOworCisJ cmV0dXJuIGNudGw7Cit9CisKK3N0YXRpYyB1MzIgaTg0NV9jdXJzb3JfY3RsKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlyZXR1cm4gQ1VSU09SX0VOQUJMRSB8CisJ CUNVUlNPUl9GT1JNQVRfQVJHQiB8CisJCUNVUlNPUl9TVFJJREUocGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lWzBdLnN0cmlkZSk7Cit9CisKK3N0YXRpYyBib29sIGk4NDVfY3Vyc29yX3NpemVfb2so Y29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlpbnQgd2lk dGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKKworCS8qCisJICog ODQ1Zy84NjVnIGFyZSBvbmx5IGxpbWl0ZWQgYnkgdGhlIHdpZHRoIG9mIHRoZWlyIGN1cnNvcnMs CisJICogdGhlIGhlaWdodCBpcyBhcmJpdHJhcnkgdXAgdG8gdGhlIHByZWNpc2lvbiBvZiB0aGUg cmVnaXN0ZXIuCisJICovCisJcmV0dXJuIGludGVsX2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRl KSAmJiBJU19BTElHTkVEKHdpZHRoLCA2NCk7Cit9CisKK3N0YXRpYyBpbnQgaTg0NV9jaGVja19j dXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgIHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCWlu dCByZXQ7CisKKwlyZXQgPSBpbnRlbF9jaGVja19jdXJzb3IoY3J0Y19zdGF0ZSwgcGxhbmVfc3Rh dGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBpZiB3ZSB3YW50IHRvIHR1cm4g b2ZmIHRoZSBjdXJzb3IgaWdub3JlIHdpZHRoIGFuZCBoZWlnaHQgKi8KKwlpZiAoIWZiKQorCQly ZXR1cm4gMDsKKworCS8qIENoZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAq LworCWlmICghaTg0NV9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsKKwkJZHJtX2RiZ19r bXMoJmk5MTUtPmRybSwKKwkJCSAgICAiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBub3Qgc3VwcG9y dGVkXG4iLAorCQkJICAgIGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpLAor CQkJICAgIGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWRybV9XQVJOX09OKCZpOTE1LT5kcm0sIHBsYW5lX3N0YXRlLT51 YXBpLnZpc2libGUgJiYKKwkJICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUg IT0gZmItPnBpdGNoZXNbMF0pOworCisJc3dpdGNoIChmYi0+cGl0Y2hlc1swXSkgeworCWNhc2Ug MjU2OgorCWNhc2UgNTEyOgorCWNhc2UgMTAyNDoKKwljYXNlIDIwNDg6CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCSBkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiSW52YWxpZCBjdXJzb3Igc3RyaWRl ICgldSlcbiIsCisJCQkgICAgIGZiLT5waXRjaGVzWzBdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJcGxhbmVfc3RhdGUtPmN0bCA9IGk4NDVfY3Vyc29yX2N0bChjcnRjX3N0YXRlLCBwbGFu ZV9zdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTg0NV91cGRhdGVfY3Vy c29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJdTMyIGNudGwgPSAwLCBiYXNl ID0gMCwgcG9zID0gMCwgc2l6ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlm IChwbGFuZV9zdGF0ZSAmJiBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKSB7CisJCXVuc2lnbmVk IGludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOworCQl1 bnNpZ25lZCBpbnQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpOworCisJCWNudGwgPSBwbGFuZV9zdGF0ZS0+Y3RsIHwKKwkJCWk4NDVfY3Vyc29yX2N0bF9j cnRjKGNydGNfc3RhdGUpOworCisJCXNpemUgPSAoaGVpZ2h0IDw8IDEyKSB8IHdpZHRoOworCisJ CWJhc2UgPSBpbnRlbF9jdXJzb3JfYmFzZShwbGFuZV9zdGF0ZSk7CisJCXBvcyA9IGludGVsX2N1 cnNvcl9wb3NpdGlvbihwbGFuZV9zdGF0ZSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRl dl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJLyogT24gdGhlc2UgY2hpcHNldHMg d2UgY2FuIG9ubHkgbW9kaWZ5IHRoZSBiYXNlL3NpemUvc3RyaWRlCisJICogd2hpbHN0IHRoZSBj dXJzb3IgaXMgZGlzYWJsZWQuCisJICovCisJaWYgKHBsYW5lLT5jdXJzb3IuYmFzZSAhPSBiYXNl IHx8CisJICAgIHBsYW5lLT5jdXJzb3Iuc2l6ZSAhPSBzaXplIHx8CisJICAgIHBsYW5lLT5jdXJz b3IuY250bCAhPSBjbnRsKSB7CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJDTlRS KFBJUEVfQSksIDApOworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShQSVBF X0EpLCBiYXNlKTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlNJWkUsIHNpemUp OworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKFBJUEVfQSksIHBvcyk7CisJ CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSksIGNudGwpOworCisJ CXBsYW5lLT5jdXJzb3IuYmFzZSA9IGJhc2U7CisJCXBsYW5lLT5jdXJzb3Iuc2l6ZSA9IHNpemU7 CisJCXBsYW5lLT5jdXJzb3IuY250bCA9IGNudGw7CisJfSBlbHNlIHsKKwkJaW50ZWxfZGVfd3Jp dGVfZncoZGV2X3ByaXYsIENVUlBPUyhQSVBFX0EpLCBwb3MpOworCX0KKworCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0 aWMgdm9pZCBpODQ1X2Rpc2FibGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJ CQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJaTg0NV91 cGRhdGVfY3Vyc29yKHBsYW5lLCBjcnRjX3N0YXRlLCBOVUxMKTsKK30KKworc3RhdGljIGJvb2wg aTg0NV9jdXJzb3JfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJ ICAgICBlbnVtIHBpcGUgKnBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0gaW50ZWxfZGlzcGxheV9wb3dl cl9kb21haW4gcG93ZXJfZG9tYWluOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCWJvb2wg cmV0OworCisJcG93ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlOX1BJUEUoUElQRV9BKTsKKwl3YWtl cmVmID0gaW50ZWxfZGlzcGxheV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJf ZG9tYWluKTsKKwlpZiAoIXdha2VyZWYpCisJCXJldHVybiBmYWxzZTsKKworCXJldCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSkgJiBDVVJTT1JfRU5BQkxFOworCisJ KnBpcGUgPSBQSVBFX0E7CisKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93 ZXJfZG9tYWluLCB3YWtlcmVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25l ZCBpbnQKK2k5eHhfY3Vyc29yX21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwK KwkJICAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwKKwkJICAgICAgIHVuc2ln bmVkIGludCByb3RhdGlvbikKK3sKKwlyZXR1cm4gcGxhbmUtPmJhc2UuZGV2LT5tb2RlX2NvbmZp Zy5jdXJzb3Jfd2lkdGggKiA0OworfQorCitzdGF0aWMgdTMyIGk5eHhfY3Vyc29yX2N0bF9jcnRj KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBp bnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOwor CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5k ZXYpOworCXUzMiBjbnRsID0gMDsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQor CQlyZXR1cm4gY250bDsKKworCWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCisJCWNudGwg PSBNQ1VSU09SX0dBTU1BX0VOQUJMRTsKKworCWlmIChjcnRjX3N0YXRlLT5jc2NfZW5hYmxlKQor CQljbnRsIHw9IE1DVVJTT1JfUElQRV9DU0NfRU5BQkxFOworCisJaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPCA1ICYmICFJU19HNFgoZGV2X3ByaXYpKQorCQljbnRsIHw9IE1DVVJTT1JfUElQRV9T RUxFQ1QoY3J0Yy0+cGlwZSk7CisKKwlyZXR1cm4gY250bDsKK30KKworc3RhdGljIHUzMiBpOXh4 X2N1cnNvcl9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJ CQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUt PnVhcGkucGxhbmUtPmRldik7CisJdTMyIGNudGwgPSAwOworCisJaWYgKElTX0dFTihkZXZfcHJp diwgNikgfHwgSVNfSVZZQlJJREdFKGRldl9wcml2KSkKKwkJY250bCB8PSBNQ1VSU09SX1RSSUNL TEVfRkVFRF9ESVNBQkxFOworCisJc3dpdGNoIChkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUt PnVhcGkuZHN0KSkgeworCWNhc2UgNjQ6CisJCWNudGwgfD0gTUNVUlNPUl9NT0RFXzY0X0FSR0Jf QVg7CisJCWJyZWFrOworCWNhc2UgMTI4OgorCQljbnRsIHw9IE1DVVJTT1JfTU9ERV8xMjhfQVJH Ql9BWDsKKwkJYnJlYWs7CisJY2FzZSAyNTY6CisJCWNudGwgfD0gTUNVUlNPUl9NT0RFXzI1Nl9B UkdCX0FYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UoZHJtX3JlY3Rfd2lk dGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocGxh bmVfc3RhdGUtPmh3LnJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkKKwkJY250bCB8PSBN Q1VSU09SX1JPVEFURV8xODA7CisKKwlyZXR1cm4gY250bDsKK30KKworc3RhdGljIGJvb2wgaTl4 eF9jdXJzb3Jfc2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUo cGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lk dGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7CisJaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdo dCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKKworCWlmICghaW50ZWxfY3Vyc29yX3NpemVfb2so cGxhbmVfc3RhdGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDdXJzb3Igd2lkdGggaXMgbGlt aXRlZCB0byBhIGZldyBwb3dlci1vZi10d28gc2l6ZXMgKi8KKwlzd2l0Y2ggKHdpZHRoKSB7CisJ Y2FzZSAyNTY6CisJY2FzZSAxMjg6CisJY2FzZSA2NDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogSVZCKyBoYXZlIENVUl9GQkNfQ1RMIHdoaWNo IGFsbG93cyBhbiBhcmJpdHJhcnkgY3Vyc29yCisJICogaGVpZ2h0IGZyb20gOCBsaW5lcyB1cCB0 byB0aGUgY3Vyc29yIHdpZHRoLCB3aGVuIHRoZQorCSAqIGN1cnNvciBpcyBub3Qgcm90YXRlZC4g RXZlcnl0aGluZyBlbHNlIHJlcXVpcmVzIHNxdWFyZQorCSAqIGN1cnNvcnMuCisJICovCisJaWYg KEhBU19DVVJfRkJDKGRldl9wcml2KSAmJgorCSAgICBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb24g JiBEUk1fTU9ERV9ST1RBVEVfMCkgeworCQlpZiAoaGVpZ2h0IDwgOCB8fCBoZWlnaHQgPiB3aWR0 aCkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgeworCQlpZiAoaGVpZ2h0ICE9IHdpZHRoKQor CQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IGk5 eHhfY2hlY2tfY3Vyc29yKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJ ICAgICBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBp bnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFu ZSk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ YmFzZS5kZXYpOworCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3Rh dGUtPmh3LmZiOworCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJaW50IHJldDsKKwor CXJldCA9IGludGVsX2NoZWNrX2N1cnNvcihjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIGlmIHdlIHdhbnQgdG8gdHVybiBvZmYgdGhlIGN1 cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAqLworCWlmICghZmIpCisJCXJldHVybiAwOwor CisJLyogQ2hlY2sgZm9yIHdoaWNoIGN1cnNvciB0eXBlcyB3ZSBzdXBwb3J0ICovCisJaWYgKCFp OXh4X2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSkgeworCQlkcm1fZGJnKCZkZXZfcHJpdi0+ ZHJtLAorCQkJIkN1cnNvciBkaW1lbnNpb24gJWR4JWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJCWRy bV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpLAorCQkJZHJtX3JlY3RfaGVpZ2h0 KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJt X1dBUk5fT04oJmRldl9wcml2LT5kcm0sIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgJiYKKwkJ ICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUgIT0gZmItPnBpdGNoZXNbMF0p OworCisJaWYgKGZiLT5waXRjaGVzWzBdICE9CisJICAgIGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+dWFwaS5kc3QpICogZmItPmZvcm1hdC0+Y3BwWzBdKSB7CisJCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLAorCQkJICAgICJJbnZhbGlkIGN1cnNvciBzdHJpZGUgKCV1KSAoY3Vyc29y IHdpZHRoICVkKVxuIiwKKwkJCSAgICBmYi0+cGl0Y2hlc1swXSwKKwkJCSAgICBkcm1fcmVjdF93 aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CS8qCisJICogVGhlcmUncyBzb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgY3Vyc29yIG9uIENIViBw aXBlIEMuCisJICogSWYgaXQgc3RyYWRkbGVzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHNjcmVlbiB0 aGVuCisJICogbW92aW5nIGl0IGF3YXkgZnJvbSB0aGUgZWRnZSBvciBkaXNhYmxpbmcgaXQgb2Z0 ZW4KKwkgKiByZXN1bHRzIGluIGEgcGlwZSB1bmRlcnJ1biwgYW5kIG9mdGVuIHRoYXQgY2FuIGxl YWQgdG8KKwkgKiBkZWFkIHBpcGUgKGNvbnN0YW50IHVuZGVycnVuIHJlcG9ydGVkLCBhbmQgaXQg c2NhbnMKKwkgKiBvdXQganVzdCBhIHNvbGlkIGNvbG9yKS4gVG8gcmVjb3ZlciBmcm9tIHRoYXQs IHRoZQorCSAqIGRpc3BsYXkgcG93ZXIgd2VsbCBtdXN0IGJlIHR1cm5lZCBvZmYgYW5kIG9uIGFn YWluLgorCSAqIFJlZnVzZSB0aGUgcHV0IHRoZSBjdXJzb3IgaW50byB0aGF0IGNvbXByb21pc2Vk IHBvc2l0aW9uLgorCSAqLworCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwaXBlID09 IFBJUEVfQyAmJgorCSAgICBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlICYmIHBsYW5lX3N0YXRl LT51YXBpLmRzdC54MSA8IDApIHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkg ICAgIkNIViBjdXJzb3IgQyBub3QgYWxsb3dlZCB0byBzdHJhZGRsZSB0aGUgbGVmdCBzY3JlZW4g ZWRnZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBsYW5lX3N0YXRlLT5jdGwgPSBp OXh4X2N1cnNvcl9jdGwoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp Cit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+ YmFzZS5kZXYpOworCWVudW0gcGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJdTMyIGNudGwgPSAw LCBiYXNlID0gMCwgcG9zID0gMCwgZmJjX2N0bCA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFn czsKKworCWlmIChwbGFuZV9zdGF0ZSAmJiBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKSB7CisJ CXVuc2lnbmVkIHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7 CisJCXVuc2lnbmVkIGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KTsKKworCQljbnRsID0gcGxhbmVfc3RhdGUtPmN0bCB8CisJCQlpOXh4X2N1cnNvcl9jdGxf Y3J0YyhjcnRjX3N0YXRlKTsKKworCQlpZiAod2lkdGggIT0gaGVpZ2h0KQorCQkJZmJjX2N0bCA9 IENVUl9GQkNfQ1RMX0VOIHwgKGhlaWdodCAtIDEpOworCisJCWJhc2UgPSBpbnRlbF9jdXJzb3Jf YmFzZShwbGFuZV9zdGF0ZSk7CisJCXBvcyA9IGludGVsX2N1cnNvcl9wb3NpdGlvbihwbGFuZV9z dGF0ZSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywg aXJxZmxhZ3MpOworCisJLyoKKwkgKiBPbiBzb21lIHBsYXRmb3JtcyB3cml0aW5nIENVUkNOVFIg Zmlyc3Qgd2lsbCBhbHNvCisJICogY2F1c2UgQ1VSUE9TIHRvIGJlIGFybWVkIGJ5IHRoZSBDVVJC QVNFIHdyaXRlLgorCSAqIFdpdGhvdXQgdGhlIENVUkNOVFIgd3JpdGUgdGhlIENVUlBPUyB3cml0 ZSB3b3VsZAorCSAqIGFybSBpdHNlbGYuIFRodXMgd2UgYWx3YXlzIHVwZGF0ZSBDVVJDTlRSIGJl Zm9yZQorCSAqIENVUlBPUy4KKwkgKgorCSAqIE9uIG90aGVyIHBsYXRmb3JtcyBDVVJQT1MgYWx3 YXlzIHJlcXVpcmVzIHRoZQorCSAqIENVUkJBU0Ugd3JpdGUgdG8gYXJtIHRoZSB1cGRhdGUuIEFk ZGl0b25hbGx5CisJICogYSB3cml0ZSB0byBhbnkgb2YgdGhlIGN1cnNvciByZWdpc3RlciB3aWxs IGNhbmNlbAorCSAqIGFuIGFscmVhZHkgYXJtZWQgY3Vyc29yIHVwZGF0ZS4gVGh1cyBsZWF2aW5n IG91dAorCSAqIHRoZSBDVVJCQVNFIHdyaXRlIGFmdGVyIENVUlBPUyBjb3VsZCBsZWFkIHRvIGEK KwkgKiBjdXJzb3IgdGhhdCBkb2Vzbid0IGFwcGVhciB0byBtb3ZlLCBvciBldmVuIGNoYW5nZQor CSAqIHNoYXBlLiBUaHVzIHdlIGFsd2F5cyB3cml0ZSBDVVJCQVNFLgorCSAqCisJICogVGhlIG90 aGVyIHJlZ2lzdGVycyBhcmUgYXJtZWQgYnkgYnkgdGhlIENVUkJBU0Ugd3JpdGUKKwkgKiBleGNl cHQgd2hlbiB0aGUgcGxhbmUgaXMgZ2V0dGluZyBlbmFibGVkIGF0IHdoaWNoIHRpbWUKKwkgKiB0 aGUgQ1VSQ05UUiB3cml0ZSBhcm1zIHRoZSB1cGRhdGUuCisJICovCisKKwlpZiAoSU5URUxfR0VO KGRldl9wcml2KSA+PSA5KQorCQlza2xfd3JpdGVfY3Vyc29yX3dtKHBsYW5lLCBjcnRjX3N0YXRl KTsKKworCWlmICghbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKKwkJaW50ZWxfcHNyMl9wcm9n cmFtX3BsYW5lX3NlbF9mZXRjaChwbGFuZSwgY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsIDApOwor CisJaWYgKHBsYW5lLT5jdXJzb3IuYmFzZSAhPSBiYXNlIHx8CisJICAgIHBsYW5lLT5jdXJzb3Iu c2l6ZSAhPSBmYmNfY3RsIHx8CisJICAgIHBsYW5lLT5jdXJzb3IuY250bCAhPSBjbnRsKSB7CisJ CWlmIChIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCisJCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgQ1VSX0ZCQ19DVEwocGlwZSksCisJCQkJCSAgZmJjX2N0bCk7CisJCWludGVsX2RlX3dyaXRl X2Z3KGRldl9wcml2LCBDVVJDTlRSKHBpcGUpLCBjbnRsKTsKKwkJaW50ZWxfZGVfd3JpdGVfZnco ZGV2X3ByaXYsIENVUlBPUyhwaXBlKSwgcG9zKTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3By aXYsIENVUkJBU0UocGlwZSksIGJhc2UpOworCisJCXBsYW5lLT5jdXJzb3IuYmFzZSA9IGJhc2U7 CisJCXBsYW5lLT5jdXJzb3Iuc2l6ZSA9IGZiY19jdGw7CisJCXBsYW5lLT5jdXJzb3IuY250bCA9 IGNudGw7CisJfSBlbHNlIHsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlBPUyhw aXBlKSwgcG9zKTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkJBU0UocGlwZSks IGJhc2UpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUu bG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpOXh4X2Rpc2FibGVfY3Vyc29yKHN0 cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKmNydGNfc3RhdGUpCit7CisJaTl4eF91cGRhdGVfY3Vyc29yKHBsYW5lLCBjcnRjX3N0YXRl LCBOVUxMKTsKK30KKworc3RhdGljIGJvb2wgaTl4eF9jdXJzb3JfZ2V0X2h3X3N0YXRlKHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBlbnVtIHBpcGUgKnBpcGUpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYp OworCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9tYWluOworCWludGVs X3dha2VyZWZfdCB3YWtlcmVmOworCWJvb2wgcmV0OworCXUzMiB2YWw7CisKKwkvKgorCSAqIE5v dCAxMDAlIGNvcnJlY3QgZm9yIHBsYW5lcyB0aGF0IGNhbiBtb3ZlIGJldHdlZW4gcGlwZXMsCisJ ICogYnV0IHRoYXQncyBvbmx5IHRoZSBjYXNlIGZvciBnZW4yLTMgd2hpY2ggZG9uJ3QgaGF2ZSBh bnkKKwkgKiBkaXNwbGF5IHBvd2VyIHdlbGxzLgorCSAqLworCXBvd2VyX2RvbWFpbiA9IFBPV0VS X0RPTUFJTl9QSVBFKHBsYW5lLT5waXBlKTsKKwl3YWtlcmVmID0gaW50ZWxfZGlzcGxheV9wb3dl cl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKKwlpZiAoIXdha2VyZWYp CisJCXJldHVybiBmYWxzZTsKKworCXZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIENVUkNO VFIocGxhbmUtPnBpcGUpKTsKKworCXJldCA9IHZhbCAmIE1DVVJTT1JfTU9ERTsKKworCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDUgfHwgSVNfRzRYKGRldl9wcml2KSkKKwkJKnBpcGUgPSBw bGFuZS0+cGlwZTsKKwllbHNlCisJCSpwaXBlID0gKHZhbCAmIE1DVVJTT1JfUElQRV9TRUxFQ1Rf TUFTSykgPj4KKwkJCU1DVVJTT1JfUElQRV9TRUxFQ1RfU0hJRlQ7CisKKwlpbnRlbF9kaXNwbGF5 X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVmKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBib29sIGludGVsX2N1cnNvcl9mb3JtYXRfbW9kX3N1cHBvcnRlZChz dHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCisJCQkJCSAgICAgIHUzMiBmb3JtYXQsIHU2NCBtb2Rp ZmllcikKK3sKKwlyZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSICYmCisJ CWZvcm1hdCA9PSBEUk1fRk9STUFUX0FSR0I4ODg4OworfQorCitzdGF0aWMgaW50CitpbnRlbF9s ZWdhY3lfY3Vyc29yX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCisJCQkgICBzdHJ1 Y3QgZHJtX2NydGMgKl9jcnRjLAorCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJ CQkgICBpbnQgY3J0Y194LCBpbnQgY3J0Y195LAorCQkJICAgdW5zaWduZWQgaW50IGNydGNfdywg dW5zaWduZWQgaW50IGNydGNfaCwKKwkJCSAgIHUzMiBzcmNfeCwgdTMyIHNyY195LAorCQkJICAg dTMyIHNyY193LCB1MzIgc3JjX2gsCisJCQkgICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9j dHggKmN0eCkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lID0gdG9faW50ZWxfcGxhbmUo X3BsYW5lKTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoX2NydGMp OworCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlID0KKwkJdG9faW50 ZWxfcGxhbmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOworCXN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqbmV3X3BsYW5lX3N0YXRlOworCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlID0KKwkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsKKwlzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGU7CisJaW50IHJldDsKKworCS8qCisJICog V2hlbiBjcnRjIGlzIGluYWN0aXZlIG9yIHRoZXJlIGlzIGEgbW9kZXNldCBwZW5kaW5nLAorCSAq IHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlIGluIHRoZSBzbG93cGF0aAorCSAqCisJICogRklYTUUg Ymlnam9pbmVyIGZhc3RwYXRoIHdvdWxkIGJlIGdvb2QKKwkgKi8KKwlpZiAoIWNydGNfc3RhdGUt Pmh3LmFjdGl2ZSB8fCBuZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpIHx8CisJICAgIGNydGNfc3Rh dGUtPnVwZGF0ZV9waXBlIHx8IGNydGNfc3RhdGUtPmJpZ2pvaW5lcikKKwkJZ290byBzbG93Owor CisJLyoKKwkgKiBEb24ndCBkbyBhbiBhc3luYyB1cGRhdGUgaWYgdGhlcmUgaXMgYW4gb3V0c3Rh bmRpbmcgY29tbWl0IG1vZGlmeWluZworCSAqIHRoZSBwbGFuZS4gIFRoaXMgcHJldmVudHMgb3Vy IGFzeW5jIHVwZGF0ZSdzIGNoYW5nZXMgZnJvbSBnZXR0aW5nCisJICogb3ZlcnJpZGRlbiBieSBh IHByZXZpb3VzIHN5bmNocm9ub3VzIHVwZGF0ZSdzIHN0YXRlLgorCSAqLworCWlmIChvbGRfcGxh bmVfc3RhdGUtPnVhcGkuY29tbWl0ICYmCisJICAgICF0cnlfd2FpdF9mb3JfY29tcGxldGlvbigm b2xkX3BsYW5lX3N0YXRlLT51YXBpLmNvbW1pdC0+aHdfZG9uZSkpCisJCWdvdG8gc2xvdzsKKwor CS8qCisJICogSWYgYW55IHBhcmFtZXRlcnMgY2hhbmdlIHRoYXQgbWF5IGFmZmVjdCB3YXRlcm1h cmtzLAorCSAqIHRha2UgdGhlIHNsb3dwYXRoLiBPbmx5IGNoYW5naW5nIGZiIG9yIHBvc2l0aW9u IHNob3VsZCBiZQorCSAqIGluIHRoZSBmYXN0cGF0aC4KKwkgKi8KKwlpZiAob2xkX3BsYW5lX3N0 YXRlLT51YXBpLmNydGMgIT0gJmNydGMtPmJhc2UgfHwKKwkgICAgb2xkX3BsYW5lX3N0YXRlLT51 YXBpLnNyY193ICE9IHNyY193IHx8CisJICAgIG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfaCAh PSBzcmNfaCB8fAorCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y193ICE9IGNydGNfdyB8 fAorCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y19oICE9IGNydGNfaCB8fAorCSAgICAh b2xkX3BsYW5lX3N0YXRlLT51YXBpLmZiICE9ICFmYikKKwkJZ290byBzbG93OworCisJbmV3X3Bs YW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUoaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0 YXRlKCZwbGFuZS0+YmFzZSkpOworCWlmICghbmV3X3BsYW5lX3N0YXRlKQorCQlyZXR1cm4gLUVO T01FTTsKKworCW5ld19jcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShpbnRlbF9jcnRj X2R1cGxpY2F0ZV9zdGF0ZSgmY3J0Yy0+YmFzZSkpOworCWlmICghbmV3X2NydGNfc3RhdGUpIHsK KwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlkcm1fYXRvbWljX3Nl dF9mYl9mb3JfcGxhbmUoJm5ld19wbGFuZV9zdGF0ZS0+dWFwaSwgZmIpOworCisJbmV3X3BsYW5l X3N0YXRlLT51YXBpLnNyY194ID0gc3JjX3g7CisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY195 ID0gc3JjX3k7CisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY193ID0gc3JjX3c7CisJbmV3X3Bs YW5lX3N0YXRlLT51YXBpLnNyY19oID0gc3JjX2g7CisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNy dGNfeCA9IGNydGNfeDsKKwluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y195ID0gY3J0Y195Owor CW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3cgPSBjcnRjX3c7CisJbmV3X3BsYW5lX3N0YXRl LT51YXBpLmNydGNfaCA9IGNydGNfaDsKKworCWludGVsX3BsYW5lX2NvcHlfdWFwaV90b19od19z dGF0ZShuZXdfcGxhbmVfc3RhdGUsIG5ld19wbGFuZV9zdGF0ZSwgY3J0Yyk7CisKKwlyZXQgPSBp bnRlbF9wbGFuZV9hdG9taWNfY2hlY2tfd2l0aF9zdGF0ZShjcnRjX3N0YXRlLCBuZXdfY3J0Y19z dGF0ZSwKKwkJCQkJCSAgb2xkX3BsYW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUpOworCWlmIChy ZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9waW5fZmIobmV3X3Bs YW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCisJaW50ZWxfZnJvbnRi dWZmZXJfZmx1c2godG9faW50ZWxfZnJvbnRidWZmZXIobmV3X3BsYW5lX3N0YXRlLT5ody5mYiks CisJCQkJT1JJR0lOX0ZMSVApOworCWludGVsX2Zyb250YnVmZmVyX3RyYWNrKHRvX2ludGVsX2Zy b250YnVmZmVyKG9sZF9wbGFuZV9zdGF0ZS0+aHcuZmIpLAorCQkJCXRvX2ludGVsX2Zyb250YnVm ZmVyKG5ld19wbGFuZV9zdGF0ZS0+aHcuZmIpLAorCQkJCXBsYW5lLT5mcm9udGJ1ZmZlcl9iaXQp OworCisJLyogU3dhcCBwbGFuZSBzdGF0ZSAqLworCXBsYW5lLT5iYXNlLnN0YXRlID0gJm5ld19w bGFuZV9zdGF0ZS0+dWFwaTsKKworCS8qCisJICogV2UgY2Fubm90IHN3YXAgY3J0Y19zdGF0ZSBh cyBpdCBtYXkgYmUgaW4gdXNlIGJ5IGFuIGF0b21pYyBjb21taXQgb3IKKwkgKiBwYWdlIGZsaXAg dGhhdCdzIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHkuIElmIHdlIHN3YXAgY3J0Y19zdGF0ZSBhbmQK KwkgKiBkZXN0cm95IHRoZSBvbGQgc3RhdGUsIHdlIHdpbGwgY2F1c2UgYSB1c2UtYWZ0ZXItZnJl ZSB0aGVyZS4KKwkgKgorCSAqIE9ubHkgdXBkYXRlIGFjdGl2ZV9wbGFuZXMsIHdoaWNoIGlzIG5l ZWRlZCBmb3Igb3VyIGludGVybmFsCisJICogYm9va2tlZXBpbmcuIEVpdGhlciB2YWx1ZSB3aWxs IGRvIHRoZSByaWdodCB0aGluZyB3aGVuIHVwZGF0aW5nCisJICogcGxhbmVzIGF0b21pY2FsbHku IElmIHRoZSBjdXJzb3Igd2FzIHBhcnQgb2YgdGhlIGF0b21pYyB1cGRhdGUgdGhlbgorCSAqIHdl IHdvdWxkIGhhdmUgdGFrZW4gdGhlIHNsb3dwYXRoLgorCSAqLworCWNydGNfc3RhdGUtPmFjdGl2 ZV9wbGFuZXMgPSBuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5lczsKKworCWlmIChuZXdfcGxh bmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKKwkJaW50ZWxfdXBkYXRlX3BsYW5lKHBsYW5lLCBjcnRj X3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUpOworCWVsc2UKKwkJaW50ZWxfZGlzYWJsZV9wbGFuZShw bGFuZSwgY3J0Y19zdGF0ZSk7CisKKwlpbnRlbF9wbGFuZV91bnBpbl9mYihvbGRfcGxhbmVfc3Rh dGUpOworCitvdXRfZnJlZToKKwlpZiAobmV3X2NydGNfc3RhdGUpCisJCWludGVsX2NydGNfZGVz dHJveV9zdGF0ZSgmY3J0Yy0+YmFzZSwgJm5ld19jcnRjX3N0YXRlLT51YXBpKTsKKwlpZiAocmV0 KQorCQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlKCZwbGFuZS0+YmFzZSwgJm5ld19wbGFuZV9z dGF0ZS0+dWFwaSk7CisJZWxzZQorCQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlKCZwbGFuZS0+ YmFzZSwgJm9sZF9wbGFuZV9zdGF0ZS0+dWFwaSk7CisJcmV0dXJuIHJldDsKKworc2xvdzoKKwly ZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lKCZwbGFuZS0+YmFzZSwgJmNydGMt PmJhc2UsIGZiLAorCQkJCQkgICAgICBjcnRjX3gsIGNydGNfeSwgY3J0Y193LCBjcnRjX2gsCisJ CQkJCSAgICAgIHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oLCBjdHgpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRlbF9jdXJzb3JfcGxhbmVfZnVuY3MgPSB7 CisJLnVwZGF0ZV9wbGFuZSA9IGludGVsX2xlZ2FjeV9jdXJzb3JfdXBkYXRlLAorCS5kaXNhYmxl X3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGlu dGVsX3BsYW5lX2Rlc3Ryb3ksCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBpbnRlbF9wbGFu ZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gaW50ZWxfcGxhbmVf ZGVzdHJveV9zdGF0ZSwKKwkuZm9ybWF0X21vZF9zdXBwb3J0ZWQgPSBpbnRlbF9jdXJzb3JfZm9y bWF0X21vZF9zdXBwb3J0ZWQsCit9OworCitzdHJ1Y3QgaW50ZWxfcGxhbmUgKgoraW50ZWxfY3Vy c29yX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkg IGVudW0gcGlwZSBwaXBlKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqY3Vyc29yOworCWludCBy ZXQsIHpwb3M7CisKKwljdXJzb3IgPSBpbnRlbF9wbGFuZV9hbGxvYygpOworCWlmIChJU19FUlIo Y3Vyc29yKSkKKwkJcmV0dXJuIGN1cnNvcjsKKworCWN1cnNvci0+cGlwZSA9IHBpcGU7CisJY3Vy c29yLT5pOXh4X3BsYW5lID0gKGVudW0gaTl4eF9wbGFuZV9pZCkgcGlwZTsKKwljdXJzb3ItPmlk ID0gUExBTkVfQ1VSU09SOworCWN1cnNvci0+ZnJvbnRidWZmZXJfYml0ID0gSU5URUxfRlJPTlRC VUZGRVIocGlwZSwgY3Vyc29yLT5pZCk7CisKKwlpZiAoSVNfSTg0NUcoZGV2X3ByaXYpIHx8IElT X0k4NjVHKGRldl9wcml2KSkgeworCQljdXJzb3ItPm1heF9zdHJpZGUgPSBpODQ1X2N1cnNvcl9t YXhfc3RyaWRlOworCQljdXJzb3ItPnVwZGF0ZV9wbGFuZSA9IGk4NDVfdXBkYXRlX2N1cnNvcjsK KwkJY3Vyc29yLT5kaXNhYmxlX3BsYW5lID0gaTg0NV9kaXNhYmxlX2N1cnNvcjsKKwkJY3Vyc29y LT5nZXRfaHdfc3RhdGUgPSBpODQ1X2N1cnNvcl9nZXRfaHdfc3RhdGU7CisJCWN1cnNvci0+Y2hl Y2tfcGxhbmUgPSBpODQ1X2NoZWNrX2N1cnNvcjsKKwl9IGVsc2UgeworCQljdXJzb3ItPm1heF9z dHJpZGUgPSBpOXh4X2N1cnNvcl9tYXhfc3RyaWRlOworCQljdXJzb3ItPnVwZGF0ZV9wbGFuZSA9 IGk5eHhfdXBkYXRlX2N1cnNvcjsKKwkJY3Vyc29yLT5kaXNhYmxlX3BsYW5lID0gaTl4eF9kaXNh YmxlX2N1cnNvcjsKKwkJY3Vyc29yLT5nZXRfaHdfc3RhdGUgPSBpOXh4X2N1cnNvcl9nZXRfaHdf c3RhdGU7CisJCWN1cnNvci0+Y2hlY2tfcGxhbmUgPSBpOXh4X2NoZWNrX2N1cnNvcjsKKwl9CisK KwljdXJzb3ItPmN1cnNvci5iYXNlID0gfjA7CisJY3Vyc29yLT5jdXJzb3IuY250bCA9IH4wOwor CisJaWYgKElTX0k4NDVHKGRldl9wcml2KSB8fCBJU19JODY1RyhkZXZfcHJpdikgfHwgSEFTX0NV Ul9GQkMoZGV2X3ByaXYpKQorCQljdXJzb3ItPmN1cnNvci5zaXplID0gfjA7CisKKwlyZXQgPSBk cm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoJmRldl9wcml2LT5kcm0sICZjdXJzb3ItPmJhc2UsCisJ CQkJICAgICAgIDAsICZpbnRlbF9jdXJzb3JfcGxhbmVfZnVuY3MsCisJCQkJICAgICAgIGludGVs X2N1cnNvcl9mb3JtYXRzLAorCQkJCSAgICAgICBBUlJBWV9TSVpFKGludGVsX2N1cnNvcl9mb3Jt YXRzKSwKKwkJCQkgICAgICAgY3Vyc29yX2Zvcm1hdF9tb2RpZmllcnMsCisJCQkJICAgICAgIERS TV9QTEFORV9UWVBFX0NVUlNPUiwKKwkJCQkgICAgICAgImN1cnNvciAlYyIsIHBpcGVfbmFtZShw aXBlKSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJp dikgPj0gNCkKKwkJZHJtX3BsYW5lX2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eSgmY3Vyc29yLT5i YXNlLAorCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAsCisJCQkJCQkgICBEUk1fTU9ERV9ST1RB VEVfMCB8CisJCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVfMTgwKTsKKworCXpwb3MgPSBSVU5USU1F X0lORk8oZGV2X3ByaXYpLT5udW1fc3ByaXRlc1twaXBlXSArIDE7CisJZHJtX3BsYW5lX2NyZWF0 ZV96cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eSgmY3Vyc29yLT5iYXNlLCB6cG9zKTsKKworCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKQorCQlkcm1fcGxhbmVfZW5hYmxlX2ZiX2RhbWFnZV9j bGlwcygmY3Vyc29yLT5iYXNlKTsKKworCWRybV9wbGFuZV9oZWxwZXJfYWRkKCZjdXJzb3ItPmJh c2UsICZpbnRlbF9wbGFuZV9oZWxwZXJfZnVuY3MpOworCisJcmV0dXJuIGN1cnNvcjsKKworZmFp bDoKKwlpbnRlbF9wbGFuZV9mcmVlKGN1cnNvcik7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQpOwor fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwppbmRleCBj NTY3YzBjYWRhN2UuLjBhM2I5Nzg4OTI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmMKQEAgLTEzNywxNiArMTM3LDYgQEAgc3RhdGljIGNvbnN0IHU2 NCBpOXh4X2Zvcm1hdF9tb2RpZmllcnNbXSA9IHsKIAlEUk1fRk9STUFUX01PRF9JTlZBTElECiB9 OwogCi0vKiBDdXJzb3IgZm9ybWF0cyAqLwotc3RhdGljIGNvbnN0IHUzMiBpbnRlbF9jdXJzb3Jf Zm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRfQVJHQjg4ODgsCi19OwotCi1zdGF0aWMgY29uc3Qg dTY0IGN1cnNvcl9mb3JtYXRfbW9kaWZpZXJzW10gPSB7Ci0JRFJNX0ZPUk1BVF9NT0RfTElORUFS LAotCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQKLX07Ci0KIHN0YXRpYyB2b2lkIGk5eHhfY3J0Y19j bG9ja19nZXQoc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkJc3RydWN0IGludGVsX2NydGNf c3RhdGUgKnBpcGVfY29uZmlnKTsKIHN0YXRpYyB2b2lkIGlsa19wY2hfY2xvY2tfZ2V0KHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjLApAQCAtMjUzMyw5ICsyNTIzLDkgQEAgc3RhdGljIHUzMiBpbnRl bF9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKIAlyZXR1cm4gb2Zmc2V0X2FsaWduZWQ7CiB9CiAKLXN0YXRpYyB1MzIgaW50ZWxfcGxhbmVf Y29tcHV0ZV9hbGlnbmVkX29mZnNldChpbnQgKngsIGludCAqeSwKLQkJCQkJICAgICAgY29uc3Qg c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSwKLQkJCQkJICAgICAgaW50IGNvbG9yX3Bs YW5lKQordTMyIGludGVsX3BsYW5lX2NvbXB1dGVfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQg KnksCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJ CQkJICAgICAgIGludCBjb2xvcl9wbGFuZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVs X3BsYW5lID0gdG9faW50ZWxfcGxhbmUoc3RhdGUtPnVhcGkucGxhbmUpOwogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoaW50ZWxfcGxhbmUtPmJhc2UuZGV2KTsK QEAgLTMyNzIsNyArMzI2Miw3IEBAIGludGVsX3BsYW5lX3JlbWFwX2d0dChzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogCX0KIH0KIAotc3RhdGljIGludAoraW50CiBpbnRl bF9wbGFuZV9jb21wdXRlX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl KQogewogCWNvbnN0IHN0cnVjdCBpbnRlbF9mcmFtZWJ1ZmZlciAqZmIgPQpAQCAtMTE1NDcsNTY5 ICsxMTUzNyw2IEBAIHN0YXRpYyBib29sIGludGVsX2NydGNfZ2V0X3BpcGVfY29uZmlnKHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0 aWMgdTMyIGludGVsX2N1cnNvcl9iYXNlKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJ dG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQljb25zdCBzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50ZWxfZmJfb2JqKGZiKTsKLQl1MzIgYmFzZTsKLQot CWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+ZGlzcGxheS5jdXJzb3JfbmVlZHNfcGh5c2ljYWwp Ci0JCWJhc2UgPSBzZ19kbWFfYWRkcmVzcyhvYmotPm1tLnBhZ2VzLT5zZ2wpOwotCWVsc2UKLQkJ YmFzZSA9IGludGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5lX3N0YXRlKTsKLQotCXJldHVybiBi YXNlICsgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLm9mZnNldDsKLX0KLQotc3RhdGljIHUz MiBpbnRlbF9jdXJzb3JfcG9zaXRpb24oY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKLXsKLQlpbnQgeCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MTsKLQlpbnQg eSA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC55MTsKLQl1MzIgcG9zID0gMDsKLQotCWlmICh4IDwg MCkgewotCQlwb3MgfD0gQ1VSU09SX1BPU19TSUdOIDw8IENVUlNPUl9YX1NISUZUOwotCQl4ID0g LXg7Ci0JfQotCXBvcyB8PSB4IDw8IENVUlNPUl9YX1NISUZUOwotCi0JaWYgKHkgPCAwKSB7Ci0J CXBvcyB8PSBDVVJTT1JfUE9TX1NJR04gPDwgQ1VSU09SX1lfU0hJRlQ7Ci0JCXkgPSAteTsKLQl9 Ci0JcG9zIHw9IHkgPDwgQ1VSU09SX1lfU0hJRlQ7Ci0KLQlyZXR1cm4gcG9zOwotfQotCi1zdGF0 aWMgYm9vbCBpbnRlbF9jdXJzb3Jfc2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZp ZyA9Ci0JCSZwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2LT5tb2RlX2NvbmZpZzsKLQlpbnQg d2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKLQlpbnQgaGVp Z2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCi0JcmV0dXJu IHdpZHRoID4gMCAmJiB3aWR0aCA8PSBjb25maWctPmN1cnNvcl93aWR0aCAmJgotCQloZWlnaHQg PiAwICYmIGhlaWdodCA8PSBjb25maWctPmN1cnNvcl9oZWlnaHQ7Ci19Ci0KLXN0YXRpYyBpbnQg aW50ZWxfY3Vyc29yX2NoZWNrX3N1cmZhY2Uoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19p OTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOwotCXVuc2lnbmVkIGludCByb3RhdGlv biA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbjsKLQlpbnQgc3JjX3gsIHNyY195OwotCXUzMiBv ZmZzZXQ7Ci0JaW50IHJldDsKLQotCXJldCA9IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5l X3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9zdGF0ZS0+ dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsKLQotCXNyY194ID0gcGxhbmVfc3RhdGUtPnVhcGku c3JjLngxID4+IDE2OwotCXNyY195ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2Owot Ci0JaW50ZWxfYWRkX2ZiX29mZnNldHMoJnNyY194LCAmc3JjX3ksIHBsYW5lX3N0YXRlLCAwKTsK LQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KCZzcmNfeCwgJnNy Y195LAotCQkJCQkJICAgIHBsYW5lX3N0YXRlLCAwKTsKLQotCWlmIChzcmNfeCAhPSAwIHx8IHNy Y195ICE9IDApIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgIkFyYml0 cmFyeSBjdXJzb3IgcGFubmluZyBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JLyoKLQkgKiBQdXQgdGhlIGZpbmFsIGNvb3JkaW5hdGVzIGJhY2sgc28gdGhhdCB0 aGUgc3JjCi0JICogY29vcmRpbmF0ZSBjaGVja3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4K LQkgKi8KLQlkcm1fcmVjdF90cmFuc2xhdGVfdG8oJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKLQkJ CSAgICAgIHNyY194IDw8IDE2LCBzcmNfeSA8PCAxNik7Ci0KLQkvKiBJTEsrIGRvIHRoaXMgYXV0 b21hZ2ljYWxseSBpbiBoYXJkd2FyZSAqLwotCWlmIChIQVNfR01DSChkZXZfcHJpdikgJiYgcm90 YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMTgwKSB7Ci0JCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOwotCQlpbnQgc3JjX3cgPSBkcm1fcmVjdF93 aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKLQkJaW50IHNyY19oID0gZHJtX3Jl Y3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMpID4+IDE2OwotCi0JCW9mZnNldCArPSAo c3JjX2ggKiBzcmNfdyAtIDEpICogZmItPmZvcm1hdC0+Y3BwWzBdOwotCX0KLQotCXBsYW5lX3N0 YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQgPSBvZmZzZXQ7Ci0JcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lWzBdLnggPSBzcmNfeDsKLQlwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9IHNy Y195OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfY2hlY2tfY3Vyc29yKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAotCQkJICAgICAgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JY29uc3Qgc3Ry dWN0IGRybV9yZWN0IHNyYyA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYzsKLQljb25zdCBzdHJ1Y3Qg ZHJtX3JlY3QgZHN0ID0gcGxhbmVfc3RhdGUtPnVhcGkuZHN0OwotCWludCByZXQ7Ci0KLQlpZiAo ZmIgJiYgZmItPm1vZGlmaWVyICE9IERSTV9GT1JNQVRfTU9EX0xJTkVBUikgewotCQlkcm1fZGJn X2ttcygmaTkxNS0+ZHJtLCAiY3Vyc29yIGNhbm5vdCBiZSB0aWxlZFxuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCXJldCA9IGludGVsX2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhw bGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSwKLQkJCQkJCURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElO RywKLQkJCQkJCURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKLQkJCQkJCXRydWUpOwotCWlm IChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBVc2UgdGhlIHVuY2xpcHBlZCBzcmMvZHN0IHJl Y3RhbmdsZXMsIHdoaWNoIHdlIHByb2dyYW0gdG8gaHcgKi8KLQlwbGFuZV9zdGF0ZS0+dWFwaS5z cmMgPSBzcmM7Ci0JcGxhbmVfc3RhdGUtPnVhcGkuZHN0ID0gZHN0OwotCi0JcmV0ID0gaW50ZWxf Y3Vyc29yX2NoZWNrX3N1cmZhY2UocGxhbmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiBy ZXQ7Ci0KLQlpZiAoIXBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCi0JCXJldHVybiAwOwotCi0J cmV0ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3JjX2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKLQlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25l ZCBpbnQKLWk4NDVfY3Vyc29yX21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwK LQkJICAgICAgIHUzMiBwaXhlbF9mb3JtYXQsIHU2NCBtb2RpZmllciwKLQkJICAgICAgIHVuc2ln bmVkIGludCByb3RhdGlvbikKLXsKLQlyZXR1cm4gMjA0ODsKLX0KLQotc3RhdGljIHUzMiBpODQ1 X2N1cnNvcl9jdGxfY3J0Yyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKLXsKLQl1MzIgY250bCA9IDA7Ci0KLQlpZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQot CQljbnRsIHw9IENVUlNPUl9HQU1NQV9FTkFCTEU7Ci0KLQlyZXR1cm4gY250bDsKLX0KLQotc3Rh dGljIHUzMiBpODQ1X2N1cnNvcl9jdGwoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCi0JCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQotewotCXJldHVybiBDVVJTT1JfRU5BQkxFIHwKLQkJQ1VSU09SX0ZPUk1BVF9BUkdCIHwK LQkJQ1VSU09SX1NUUklERShwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlKTsKLX0K LQotc3RhdGljIGJvb2wgaTg0NV9jdXJzb3Jfc2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxh bmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZw bGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCi0JLyoKLQkgKiA4NDVnLzg2NWcgYXJlIG9ubHkgbGlt aXRlZCBieSB0aGUgd2lkdGggb2YgdGhlaXIgY3Vyc29ycywKLQkgKiB0aGUgaGVpZ2h0IGlzIGFy Yml0cmFyeSB1cCB0byB0aGUgcHJlY2lzaW9uIG9mIHRoZSByZWdpc3Rlci4KLQkgKi8KLQlyZXR1 cm4gaW50ZWxfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpICYmIElTX0FMSUdORUQod2lkdGgs IDY0KTsKLX0KLQotc3RhdGljIGludCBpODQ1X2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpw bGFuZV9zdGF0ZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5l X3N0YXRlLT5ody5mYjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUo cGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7Ci0JaW50IHJldDsKLQotCXJldCA9IGludGVs X2NoZWNrX2N1cnNvcihjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKLQotCS8qIGlmIHdlIHdhbnQgdG8gdHVybiBvZmYgdGhlIGN1cnNvciBpZ25vcmUg d2lkdGggYW5kIGhlaWdodCAqLwotCWlmICghZmIpCi0JCXJldHVybiAwOwotCi0JLyogQ2hlY2sg Zm9yIHdoaWNoIGN1cnNvciB0eXBlcyB3ZSBzdXBwb3J0ICovCi0JaWYgKCFpODQ1X2N1cnNvcl9z aXplX29rKHBsYW5lX3N0YXRlKSkgewotCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLAotCQkJICAg ICJDdXJzb3IgZGltZW5zaW9uICVkeCVkIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkgICAgZHJtX3Jl Y3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCksCi0JCQkgICAgZHJtX3JlY3RfaGVpZ2h0 KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHJt X1dBUk5fT04oJmk5MTUtPmRybSwgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJgotCQkgICAg cGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSAhPSBmYi0+cGl0Y2hlc1swXSk7Ci0K LQlzd2l0Y2ggKGZiLT5waXRjaGVzWzBdKSB7Ci0JY2FzZSAyNTY6Ci0JY2FzZSA1MTI6Ci0JY2Fz ZSAxMDI0OgotCWNhc2UgMjA0ODoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJIGRybV9kYmdfa21z KCZpOTE1LT5kcm0sICJJbnZhbGlkIGN1cnNvciBzdHJpZGUgKCV1KVxuIiwKLQkJCSAgICAgZmIt PnBpdGNoZXNbMF0pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwbGFuZV9zdGF0ZS0+Y3Rs ID0gaTg0NV9jdXJzb3JfY3RsKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQotCXJldHVybiAw OwotfQotCi1zdGF0aWMgdm9pZCBpODQ1X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5l ICpwbGFuZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0 YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxh bmUtPmJhc2UuZGV2KTsKLQl1MzIgY250bCA9IDAsIGJhc2UgPSAwLCBwb3MgPSAwLCBzaXplID0g MDsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwotCi0JaWYgKHBsYW5lX3N0YXRlICYmIHBsYW5l X3N0YXRlLT51YXBpLnZpc2libGUpIHsKLQkJdW5zaWduZWQgaW50IHdpZHRoID0gZHJtX3JlY3Rf d2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0JCXVuc2lnbmVkIGludCBoZWlnaHQgPSBk cm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7Ci0KLQkJY250bCA9IHBsYW5l X3N0YXRlLT5jdGwgfAotCQkJaTg0NV9jdXJzb3JfY3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0KLQkJ c2l6ZSA9IChoZWlnaHQgPDwgMTIpIHwgd2lkdGg7Ci0KLQkJYmFzZSA9IGludGVsX2N1cnNvcl9i YXNlKHBsYW5lX3N0YXRlKTsKLQkJcG9zID0gaW50ZWxfY3Vyc29yX3Bvc2l0aW9uKHBsYW5lX3N0 YXRlKTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBp cnFmbGFncyk7Ci0KLQkvKiBPbiB0aGVzZSBjaGlwc2V0cyB3ZSBjYW4gb25seSBtb2RpZnkgdGhl IGJhc2Uvc2l6ZS9zdHJpZGUKLQkgKiB3aGlsc3QgdGhlIGN1cnNvciBpcyBkaXNhYmxlZC4KLQkg Ki8KLQlpZiAocGxhbmUtPmN1cnNvci5iYXNlICE9IGJhc2UgfHwKLQkgICAgcGxhbmUtPmN1cnNv ci5zaXplICE9IHNpemUgfHwKLQkgICAgcGxhbmUtPmN1cnNvci5jbnRsICE9IGNudGwpIHsKLQkJ aW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSwgMCk7Ci0JCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJCQVNFKFBJUEVfQSksIGJhc2UpOwotCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSU0laRSwgc2l6ZSk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBDVVJQT1MoUElQRV9BKSwgcG9zKTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIENVUkNOVFIoUElQRV9BKSwgY250bCk7Ci0KLQkJcGxhbmUtPmN1cnNvci5iYXNlID0g YmFzZTsKLQkJcGxhbmUtPmN1cnNvci5zaXplID0gc2l6ZTsKLQkJcGxhbmUtPmN1cnNvci5jbnRs ID0gY250bDsKLQl9IGVsc2UgewotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9T KFBJUEVfQSksIHBvcyk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYt PnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk4NDVfZGlzYWJsZV9j dXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlpODQ1X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNy dGNfc3RhdGUsIE5VTEwpOwotfQotCi1zdGF0aWMgYm9vbCBpODQ1X2N1cnNvcl9nZXRfaHdfc3Rh dGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCQkgICAgIGVudW0gcGlwZSAqcGlwZSkK LXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5i YXNlLmRldik7Ci0JZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47 Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0JYm9vbCByZXQ7Ci0KLQlwb3dlcl9kb21haW4g PSBQT1dFUl9ET01BSU5fUElQRShQSVBFX0EpOwotCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bv d2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21haW4pOwotCWlmICghd2FrZXJl ZikKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VS Q05UUihQSVBFX0EpKSAmIENVUlNPUl9FTkFCTEU7Ci0KLQkqcGlwZSA9IFBJUEVfQTsKLQotCWlu dGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOwot Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotaTl4eF9jdXJzb3JfbWF4 X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkgICAgICAgdTMyIHBpeGVsX2Zv cm1hdCwgdTY0IG1vZGlmaWVyLAotCQkgICAgICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQotewot CXJldHVybiBwbGFuZS0+YmFzZS5kZXYtPm1vZGVfY29uZmlnLmN1cnNvcl93aWR0aCAqIDQ7Ci19 Ci0KLXN0YXRpYyB1MzIgaTl4eF9jdXJzb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19p bnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGkuY3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Ci0JdTMyIGNudGwgPSAwOwot Ci0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTEpCi0JCXJldHVybiBjbnRsOwotCi0JaWYg KGNydGNfc3RhdGUtPmdhbW1hX2VuYWJsZSkKLQkJY250bCA9IE1DVVJTT1JfR0FNTUFfRU5BQkxF OwotCi0JaWYgKGNydGNfc3RhdGUtPmNzY19lbmFibGUpCi0JCWNudGwgfD0gTUNVUlNPUl9QSVBF X0NTQ19FTkFCTEU7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDUgJiYgIUlTX0c0WChk ZXZfcHJpdikpCi0JCWNudGwgfD0gTUNVUlNPUl9QSVBFX1NFTEVDVChjcnRjLT5waXBlKTsKLQot CXJldHVybiBjbnRsOwotfQotCi1zdGF0aWMgdTMyIGk5eHhfY3Vyc29yX2N0bChjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRl bF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0KLQkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQl1 MzIgY250bCA9IDA7Ci0KLQlpZiAoSVNfR0VOKGRldl9wcml2LCA2KSB8fCBJU19JVllCUklER0Uo ZGV2X3ByaXYpKQotCQljbnRsIHw9IE1DVVJTT1JfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7Ci0KLQlz d2l0Y2ggKGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKSB7Ci0JY2FzZSA2 NDoKLQkJY250bCB8PSBNQ1VSU09SX01PREVfNjRfQVJHQl9BWDsKLQkJYnJlYWs7Ci0JY2FzZSAx Mjg6Ci0JCWNudGwgfD0gTUNVUlNPUl9NT0RFXzEyOF9BUkdCX0FYOwotCQlicmVhazsKLQljYXNl IDI1NjoKLQkJY250bCB8PSBNQ1VSU09SX01PREVfMjU2X0FSR0JfQVg7Ci0JCWJyZWFrOwotCWRl ZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChwbGFuZV9zdGF0ZS0+aHcucm90YXRpb24g JiBEUk1fTU9ERV9ST1RBVEVfMTgwKQotCQljbnRsIHw9IE1DVVJTT1JfUk9UQVRFXzE4MDsKLQot CXJldHVybiBjbnRsOwotfQotCi1zdGF0aWMgYm9vbCBpOXh4X2N1cnNvcl9zaXplX29rKGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFu ZS0+ZGV2KTsKLQlpbnQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGku ZHN0KTsKLQlpbnQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5k c3QpOwotCi0JaWYgKCFpbnRlbF9jdXJzb3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpCi0JCXJldHVy biBmYWxzZTsKLQotCS8qIEN1cnNvciB3aWR0aCBpcyBsaW1pdGVkIHRvIGEgZmV3IHBvd2VyLW9m LXR3byBzaXplcyAqLwotCXN3aXRjaCAod2lkdGgpIHsKLQljYXNlIDI1NjoKLQljYXNlIDEyODoK LQljYXNlIDY0OgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0J LyoKLQkgKiBJVkIrIGhhdmUgQ1VSX0ZCQ19DVEwgd2hpY2ggYWxsb3dzIGFuIGFyYml0cmFyeSBj dXJzb3IKLQkgKiBoZWlnaHQgZnJvbSA4IGxpbmVzIHVwIHRvIHRoZSBjdXJzb3Igd2lkdGgsIHdo ZW4gdGhlCi0JICogY3Vyc29yIGlzIG5vdCByb3RhdGVkLiBFdmVyeXRoaW5nIGVsc2UgcmVxdWly ZXMgc3F1YXJlCi0JICogY3Vyc29ycy4KLQkgKi8KLQlpZiAoSEFTX0NVUl9GQkMoZGV2X3ByaXYp ICYmCi0JICAgIHBsYW5lX3N0YXRlLT5ody5yb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8wKSB7 Ci0JCWlmIChoZWlnaHQgPCA4IHx8IGhlaWdodCA+IHdpZHRoKQotCQkJcmV0dXJuIGZhbHNlOwot CX0gZWxzZSB7Ci0JCWlmIChoZWlnaHQgIT0gd2lkdGgpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQot Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbnQgaTl4eF9jaGVja19jdXJzb3Ioc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkgICAgIHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRv X2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7Ci0JZW51bSBwaXBl IHBpcGUgPSBwbGFuZS0+cGlwZTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaW50ZWxfY2hlY2tfY3Vy c29yKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0Owot Ci0JLyogaWYgd2Ugd2FudCB0byB0dXJuIG9mZiB0aGUgY3Vyc29yIGlnbm9yZSB3aWR0aCBhbmQg aGVpZ2h0ICovCi0JaWYgKCFmYikKLQkJcmV0dXJuIDA7Ci0KLQkvKiBDaGVjayBmb3Igd2hpY2gg Y3Vyc29yIHR5cGVzIHdlIHN1cHBvcnQgKi8KLQlpZiAoIWk5eHhfY3Vyc29yX3NpemVfb2socGxh bmVfc3RhdGUpKSB7Ci0JCWRybV9kYmcoJmRldl9wcml2LT5kcm0sCi0JCQkiQ3Vyc29yIGRpbWVu c2lvbiAlZHglZCBub3Qgc3VwcG9ydGVkXG4iLAotCQkJZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0 YXRlLT51YXBpLmRzdCksCi0JCQlkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRz dCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRy bSwgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSAmJgotCQkgICAgcGxhbmVfc3RhdGUtPmNvbG9y X3BsYW5lWzBdLnN0cmlkZSAhPSBmYi0+cGl0Y2hlc1swXSk7Ci0KLQlpZiAoZmItPnBpdGNoZXNb MF0gIT0KLQkgICAgZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkgKiBmYi0+ Zm9ybWF0LT5jcHBbMF0pIHsKLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAg IkludmFsaWQgY3Vyc29yIHN0cmlkZSAoJXUpIChjdXJzb3Igd2lkdGggJWQpXG4iLAotCQkJICAg IGZiLT5waXRjaGVzWzBdLAotCQkJICAgIGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFw aS5kc3QpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBUaGVyZSdzIHNvbWV0 aGluZyB3cm9uZyB3aXRoIHRoZSBjdXJzb3Igb24gQ0hWIHBpcGUgQy4KLQkgKiBJZiBpdCBzdHJh ZGRsZXMgdGhlIGxlZnQgZWRnZSBvZiB0aGUgc2NyZWVuIHRoZW4KLQkgKiBtb3ZpbmcgaXQgYXdh eSBmcm9tIHRoZSBlZGdlIG9yIGRpc2FibGluZyBpdCBvZnRlbgotCSAqIHJlc3VsdHMgaW4gYSBw aXBlIHVuZGVycnVuLCBhbmQgb2Z0ZW4gdGhhdCBjYW4gbGVhZCB0bwotCSAqIGRlYWQgcGlwZSAo Y29uc3RhbnQgdW5kZXJydW4gcmVwb3J0ZWQsIGFuZCBpdCBzY2FucwotCSAqIG91dCBqdXN0IGEg c29saWQgY29sb3IpLiBUbyByZWNvdmVyIGZyb20gdGhhdCwgdGhlCi0JICogZGlzcGxheSBwb3dl ciB3ZWxsIG11c3QgYmUgdHVybmVkIG9mZiBhbmQgb24gYWdhaW4uCi0JICogUmVmdXNlIHRoZSBw dXQgdGhlIGN1cnNvciBpbnRvIHRoYXQgY29tcHJvbWlzZWQgcG9zaXRpb24uCi0JICovCi0JaWYg KElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmIHBpcGUgPT0gUElQRV9DICYmCi0JICAgIHBsYW5l X3N0YXRlLT51YXBpLnZpc2libGUgJiYgcGxhbmVfc3RhdGUtPnVhcGkuZHN0LngxIDwgMCkgewot CQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwKLQkJCSAgICAiQ0hWIGN1cnNvciBDIG5vdCBh bGxvd2VkIHRvIHN0cmFkZGxlIHRoZSBsZWZ0IHNjcmVlbiBlZGdlXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JcGxhbmVfc3RhdGUtPmN0bCA9IGk5eHhfY3Vyc29yX2N0bChjcnRjX3N0 YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaTl4eF91 cGRhdGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCi0JCQkgICAgICAgY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkgICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBwaXBl IHBpcGUgPSBwbGFuZS0+cGlwZTsKLQl1MzIgY250bCA9IDAsIGJhc2UgPSAwLCBwb3MgPSAwLCBm YmNfY3RsID0gMDsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwotCi0JaWYgKHBsYW5lX3N0YXRl ICYmIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpIHsKLQkJdW5zaWduZWQgd2lkdGggPSBkcm1f cmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKLQkJdW5zaWduZWQgaGVpZ2h0ID0g ZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCi0JCWNudGwgPSBwbGFu ZV9zdGF0ZS0+Y3RsIHwKLQkJCWk5eHhfY3Vyc29yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwotCi0J CWlmICh3aWR0aCAhPSBoZWlnaHQpCi0JCQlmYmNfY3RsID0gQ1VSX0ZCQ19DVExfRU4gfCAoaGVp Z2h0IC0gMSk7Ci0KLQkJYmFzZSA9IGludGVsX2N1cnNvcl9iYXNlKHBsYW5lX3N0YXRlKTsKLQkJ cG9zID0gaW50ZWxfY3Vyc29yX3Bvc2l0aW9uKHBsYW5lX3N0YXRlKTsKLQl9Ci0KLQlzcGluX2xv Y2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci0KLQkvKgotCSAq IE9uIHNvbWUgcGxhdGZvcm1zIHdyaXRpbmcgQ1VSQ05UUiBmaXJzdCB3aWxsIGFsc28KLQkgKiBj YXVzZSBDVVJQT1MgdG8gYmUgYXJtZWQgYnkgdGhlIENVUkJBU0Ugd3JpdGUuCi0JICogV2l0aG91 dCB0aGUgQ1VSQ05UUiB3cml0ZSB0aGUgQ1VSUE9TIHdyaXRlIHdvdWxkCi0JICogYXJtIGl0c2Vs Zi4gVGh1cyB3ZSBhbHdheXMgdXBkYXRlIENVUkNOVFIgYmVmb3JlCi0JICogQ1VSUE9TLgotCSAq Ci0JICogT24gb3RoZXIgcGxhdGZvcm1zIENVUlBPUyBhbHdheXMgcmVxdWlyZXMgdGhlCi0JICog Q1VSQkFTRSB3cml0ZSB0byBhcm0gdGhlIHVwZGF0ZS4gQWRkaXRvbmFsbHkKLQkgKiBhIHdyaXRl IHRvIGFueSBvZiB0aGUgY3Vyc29yIHJlZ2lzdGVyIHdpbGwgY2FuY2VsCi0JICogYW4gYWxyZWFk eSBhcm1lZCBjdXJzb3IgdXBkYXRlLiBUaHVzIGxlYXZpbmcgb3V0Ci0JICogdGhlIENVUkJBU0Ug d3JpdGUgYWZ0ZXIgQ1VSUE9TIGNvdWxkIGxlYWQgdG8gYQotCSAqIGN1cnNvciB0aGF0IGRvZXNu J3QgYXBwZWFyIHRvIG1vdmUsIG9yIGV2ZW4gY2hhbmdlCi0JICogc2hhcGUuIFRodXMgd2UgYWx3 YXlzIHdyaXRlIENVUkJBU0UuCi0JICoKLQkgKiBUaGUgb3RoZXIgcmVnaXN0ZXJzIGFyZSBhcm1l ZCBieSBieSB0aGUgQ1VSQkFTRSB3cml0ZQotCSAqIGV4Y2VwdCB3aGVuIHRoZSBwbGFuZSBpcyBn ZXR0aW5nIGVuYWJsZWQgYXQgd2hpY2ggdGltZQotCSAqIHRoZSBDVVJDTlRSIHdyaXRlIGFybXMg dGhlIHVwZGF0ZS4KLQkgKi8KLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCXNr bF93cml0ZV9jdXJzb3Jfd20ocGxhbmUsIGNydGNfc3RhdGUpOwotCi0JaWYgKCFuZWVkc19tb2Rl c2V0KGNydGNfc3RhdGUpKQotCQlpbnRlbF9wc3IyX3Byb2dyYW1fcGxhbmVfc2VsX2ZldGNoKHBs YW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgMCk7Ci0KLQlpZiAocGxhbmUtPmN1cnNvci5i YXNlICE9IGJhc2UgfHwKLQkgICAgcGxhbmUtPmN1cnNvci5zaXplICE9IGZiY19jdGwgfHwKLQkg ICAgcGxhbmUtPmN1cnNvci5jbnRsICE9IGNudGwpIHsKLQkJaWYgKEhBU19DVVJfRkJDKGRldl9w cml2KSkKLQkJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJfRkJDX0NUTChwaXBlKSwK LQkJCQkJICBmYmNfY3RsKTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkNOVFIo cGlwZSksIGNudGwpOwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKHBpcGUp LCBwb3MpOwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShwaXBlKSwgYmFz ZSk7Ci0KLQkJcGxhbmUtPmN1cnNvci5iYXNlID0gYmFzZTsKLQkJcGxhbmUtPmN1cnNvci5zaXpl ID0gZmJjX2N0bDsKLQkJcGxhbmUtPmN1cnNvci5jbnRsID0gY250bDsKLQl9IGVsc2UgewotCQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKHBpcGUpLCBwb3MpOwotCQlpbnRlbF9k ZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShwaXBlKSwgYmFzZSk7Ci0JfQotCi0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci19Ci0K LXN0YXRpYyB2b2lkIGk5eHhfZGlzYWJsZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSwKLQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlp OXh4X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNydGNfc3RhdGUsIE5VTEwpOwotfQotCi1zdGF0aWMg Ym9vbCBpOXh4X2N1cnNvcl9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwK LQkJCQkgICAgIGVudW0gcGlwZSAqcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBpbnRlbF9kaXNwbGF5 X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0J Ym9vbCByZXQ7Ci0JdTMyIHZhbDsKLQotCS8qCi0JICogTm90IDEwMCUgY29ycmVjdCBmb3IgcGxh bmVzIHRoYXQgY2FuIG1vdmUgYmV0d2VlbiBwaXBlcywKLQkgKiBidXQgdGhhdCdzIG9ubHkgdGhl IGNhc2UgZm9yIGdlbjItMyB3aGljaCBkb24ndCBoYXZlIGFueQotCSAqIGRpc3BsYXkgcG93ZXIg d2VsbHMuCi0JICovCi0JcG93ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlOX1BJUEUocGxhbmUtPnBp cGUpOwotCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9w cml2LCBwb3dlcl9kb21haW4pOwotCWlmICghd2FrZXJlZikKLQkJcmV0dXJuIGZhbHNlOwotCi0J dmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VSQ05UUihwbGFuZS0+cGlwZSkpOwotCi0J cmV0ID0gdmFsICYgTUNVUlNPUl9NT0RFOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g NSB8fCBJU19HNFgoZGV2X3ByaXYpKQotCQkqcGlwZSA9IHBsYW5lLT5waXBlOwotCWVsc2UKLQkJ KnBpcGUgPSAodmFsICYgTUNVUlNPUl9QSVBFX1NFTEVDVF9NQVNLKSA+PgotCQkJTUNVUlNPUl9Q SVBFX1NFTEVDVF9TSElGVDsKLQotCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9wcml2LCBw b3dlcl9kb21haW4sIHdha2VyZWYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogLyogVkVTQSA2NDB4 NDgweDcySHogbW9kZSB0byBzZXQgb24gdGhlIHBpcGUgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSBsb2FkX2RldGVjdF9tb2RlID0gewogCURSTV9NT0RFKCI2NDB4NDgw IiwgRFJNX01PREVfVFlQRV9ERUZBVUxULCAzMTUwMCwgNjQwLCA2NjQsCkBAIC0xNjYyMCw3ICsx NjA0Nyw3IEBAIHN0YXRpYyB2b2lkIGFkZF9ycHNfYm9vc3RfYWZ0ZXJfdmJsYW5rKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKIAlhZGRfd2FpdF9xdWV1ZShkcm1fY3J0Y192Ymxhbmtfd2FpdHF1ZXVl KGNydGMpLCAmd2FpdC0+d2FpdCk7CiB9CiAKLXN0YXRpYyBpbnQgaW50ZWxfcGxhbmVfcGluX2Zi KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCitpbnQgaW50ZWxfcGxhbmVf cGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiB7CiAJc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51YXBpLnBs YW5lKTsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5l LT5iYXNlLmRldik7CkBAIC0xNjY1MCw3ICsxNjA3Nyw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfcGxh bmVfcGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCiAJcmV0dXJu IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX3BsYW5lX3VucGluX2ZiKHN0cnVjdCBpbnRlbF9w bGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlKQordm9pZCBpbnRlbF9wbGFuZV91bnBpbl9mYihz dHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSkKIHsKIAlzdHJ1Y3QgaTkx NV92bWEgKnZtYTsKIApAQCAtMTY4ODYsMTMgKzE2MzEzLDYgQEAgc3RhdGljIGJvb2wgaTk2NV9w bGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxhbmUsCiAJfQog fQogCi1zdGF0aWMgYm9vbCBpbnRlbF9jdXJzb3JfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0 IGRybV9wbGFuZSAqX3BsYW5lLAotCQkJCQkgICAgICB1MzIgZm9ybWF0LCB1NjQgbW9kaWZpZXIp Ci17Ci0JcmV0dXJuIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUiAmJgotCQlmb3Jt YXQgPT0gRFJNX0ZPUk1BVF9BUkdCODg4ODsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f cGxhbmVfZnVuY3MgaTk2NV9wbGFuZV9mdW5jcyA9IHsKIAkudXBkYXRlX3BsYW5lID0gZHJtX2F0 b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAogCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19o ZWxwZXJfZGlzYWJsZV9wbGFuZSwKQEAgLTE2OTExLDE0MiArMTYzMzEsNiBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpOHh4X3BsYW5lX2Z1bmNzID0gewogCS5mb3JtYXRf bW9kX3N1cHBvcnRlZCA9IGk4eHhfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQsCiB9OwogCi1z dGF0aWMgaW50Ci1pbnRlbF9sZWdhY3lfY3Vyc29yX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpf cGxhbmUsCi0JCQkgICBzdHJ1Y3QgZHJtX2NydGMgKl9jcnRjLAotCQkJICAgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsCi0JCQkgICBpbnQgY3J0Y194LCBpbnQgY3J0Y195LAotCQkJICAgdW5z aWduZWQgaW50IGNydGNfdywgdW5zaWduZWQgaW50IGNydGNfaCwKLQkJCSAgIHUzMiBzcmNfeCwg dTMyIHNyY195LAotCQkJICAgdTMyIHNyY193LCB1MzIgc3JjX2gsCi0JCQkgICBzdHJ1Y3QgZHJt X21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKLXsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5l ID0gdG9faW50ZWxfcGxhbmUoX3BsYW5lKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRv X2ludGVsX2NydGMoX2NydGMpOwotCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5l X3N0YXRlID0KLQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOwotCXN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqbmV3X3BsYW5lX3N0YXRlOwotCXN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlID0KLQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNl LnN0YXRlKTsKLQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGU7Ci0JaW50 IHJldDsKLQotCS8qCi0JICogV2hlbiBjcnRjIGlzIGluYWN0aXZlIG9yIHRoZXJlIGlzIGEgbW9k ZXNldCBwZW5kaW5nLAotCSAqIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlIGluIHRoZSBzbG93cGF0 aAotCSAqCi0JICogRklYTUUgYmlnam9pbmVyIGZhc3RwYXRoIHdvdWxkIGJlIGdvb2QKLQkgKi8K LQlpZiAoIWNydGNfc3RhdGUtPmh3LmFjdGl2ZSB8fCBuZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUp IHx8Ci0JICAgIGNydGNfc3RhdGUtPnVwZGF0ZV9waXBlIHx8IGNydGNfc3RhdGUtPmJpZ2pvaW5l cikKLQkJZ290byBzbG93OwotCi0JLyoKLQkgKiBEb24ndCBkbyBhbiBhc3luYyB1cGRhdGUgaWYg dGhlcmUgaXMgYW4gb3V0c3RhbmRpbmcgY29tbWl0IG1vZGlmeWluZwotCSAqIHRoZSBwbGFuZS4g IFRoaXMgcHJldmVudHMgb3VyIGFzeW5jIHVwZGF0ZSdzIGNoYW5nZXMgZnJvbSBnZXR0aW5nCi0J ICogb3ZlcnJpZGRlbiBieSBhIHByZXZpb3VzIHN5bmNocm9ub3VzIHVwZGF0ZSdzIHN0YXRlLgot CSAqLwotCWlmIChvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY29tbWl0ICYmCi0JICAgICF0cnlfd2Fp dF9mb3JfY29tcGxldGlvbigmb2xkX3BsYW5lX3N0YXRlLT51YXBpLmNvbW1pdC0+aHdfZG9uZSkp Ci0JCWdvdG8gc2xvdzsKLQotCS8qCi0JICogSWYgYW55IHBhcmFtZXRlcnMgY2hhbmdlIHRoYXQg bWF5IGFmZmVjdCB3YXRlcm1hcmtzLAotCSAqIHRha2UgdGhlIHNsb3dwYXRoLiBPbmx5IGNoYW5n aW5nIGZiIG9yIHBvc2l0aW9uIHNob3VsZCBiZQotCSAqIGluIHRoZSBmYXN0cGF0aC4KLQkgKi8K LQlpZiAob2xkX3BsYW5lX3N0YXRlLT51YXBpLmNydGMgIT0gJmNydGMtPmJhc2UgfHwKLQkgICAg b2xkX3BsYW5lX3N0YXRlLT51YXBpLnNyY193ICE9IHNyY193IHx8Ci0JICAgIG9sZF9wbGFuZV9z dGF0ZS0+dWFwaS5zcmNfaCAhPSBzcmNfaCB8fAotCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGku Y3J0Y193ICE9IGNydGNfdyB8fAotCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y19oICE9 IGNydGNfaCB8fAotCSAgICAhb2xkX3BsYW5lX3N0YXRlLT51YXBpLmZiICE9ICFmYikKLQkJZ290 byBzbG93OwotCi0JbmV3X3BsYW5lX3N0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUoaW50ZWxf cGxhbmVfZHVwbGljYXRlX3N0YXRlKCZwbGFuZS0+YmFzZSkpOwotCWlmICghbmV3X3BsYW5lX3N0 YXRlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW5ld19jcnRjX3N0YXRlID0gdG9faW50ZWxfY3J0 Y19zdGF0ZShpbnRlbF9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSgmY3J0Yy0+YmFzZSkpOwotCWlmICgh bmV3X2NydGNfc3RhdGUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZTsKLQl9 Ci0KLQlkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoJm5ld19wbGFuZV9zdGF0ZS0+dWFwaSwg ZmIpOwotCi0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY194ID0gc3JjX3g7Ci0JbmV3X3BsYW5l X3N0YXRlLT51YXBpLnNyY195ID0gc3JjX3k7Ci0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY193 ID0gc3JjX3c7Ci0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLnNyY19oID0gc3JjX2g7Ci0JbmV3X3Bs YW5lX3N0YXRlLT51YXBpLmNydGNfeCA9IGNydGNfeDsKLQluZXdfcGxhbmVfc3RhdGUtPnVhcGku Y3J0Y195ID0gY3J0Y195OwotCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX3cgPSBjcnRjX3c7 Ci0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfaCA9IGNydGNfaDsKLQotCWludGVsX3BsYW5l X2NvcHlfdWFwaV90b19od19zdGF0ZShuZXdfcGxhbmVfc3RhdGUsIG5ld19wbGFuZV9zdGF0ZSwg Y3J0Yyk7Ci0KLQlyZXQgPSBpbnRlbF9wbGFuZV9hdG9taWNfY2hlY2tfd2l0aF9zdGF0ZShjcnRj X3N0YXRlLCBuZXdfY3J0Y19zdGF0ZSwKLQkJCQkJCSAgb2xkX3BsYW5lX3N0YXRlLCBuZXdfcGxh bmVfc3RhdGUpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlyZXQgPSBpbnRlbF9w bGFuZV9waW5fZmIobmV3X3BsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVl OwotCi0JaW50ZWxfZnJvbnRidWZmZXJfZmx1c2godG9faW50ZWxfZnJvbnRidWZmZXIobmV3X3Bs YW5lX3N0YXRlLT5ody5mYiksCi0JCQkJT1JJR0lOX0ZMSVApOwotCWludGVsX2Zyb250YnVmZmVy X3RyYWNrKHRvX2ludGVsX2Zyb250YnVmZmVyKG9sZF9wbGFuZV9zdGF0ZS0+aHcuZmIpLAotCQkJ CXRvX2ludGVsX2Zyb250YnVmZmVyKG5ld19wbGFuZV9zdGF0ZS0+aHcuZmIpLAotCQkJCXBsYW5l LT5mcm9udGJ1ZmZlcl9iaXQpOwotCi0JLyogU3dhcCBwbGFuZSBzdGF0ZSAqLwotCXBsYW5lLT5i YXNlLnN0YXRlID0gJm5ld19wbGFuZV9zdGF0ZS0+dWFwaTsKLQotCS8qCi0JICogV2UgY2Fubm90 IHN3YXAgY3J0Y19zdGF0ZSBhcyBpdCBtYXkgYmUgaW4gdXNlIGJ5IGFuIGF0b21pYyBjb21taXQg b3IKLQkgKiBwYWdlIGZsaXAgdGhhdCdzIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHkuIElmIHdlIHN3 YXAgY3J0Y19zdGF0ZSBhbmQKLQkgKiBkZXN0cm95IHRoZSBvbGQgc3RhdGUsIHdlIHdpbGwgY2F1 c2UgYSB1c2UtYWZ0ZXItZnJlZSB0aGVyZS4KLQkgKgotCSAqIE9ubHkgdXBkYXRlIGFjdGl2ZV9w bGFuZXMsIHdoaWNoIGlzIG5lZWRlZCBmb3Igb3VyIGludGVybmFsCi0JICogYm9va2tlZXBpbmcu IEVpdGhlciB2YWx1ZSB3aWxsIGRvIHRoZSByaWdodCB0aGluZyB3aGVuIHVwZGF0aW5nCi0JICog cGxhbmVzIGF0b21pY2FsbHkuIElmIHRoZSBjdXJzb3Igd2FzIHBhcnQgb2YgdGhlIGF0b21pYyB1 cGRhdGUgdGhlbgotCSAqIHdlIHdvdWxkIGhhdmUgdGFrZW4gdGhlIHNsb3dwYXRoLgotCSAqLwot CWNydGNfc3RhdGUtPmFjdGl2ZV9wbGFuZXMgPSBuZXdfY3J0Y19zdGF0ZS0+YWN0aXZlX3BsYW5l czsKLQotCWlmIChuZXdfcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJsZSkKLQkJaW50ZWxfdXBkYXRl X3BsYW5lKHBsYW5lLCBjcnRjX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUpOwotCWVsc2UKLQkJaW50 ZWxfZGlzYWJsZV9wbGFuZShwbGFuZSwgY3J0Y19zdGF0ZSk7Ci0KLQlpbnRlbF9wbGFuZV91bnBp bl9mYihvbGRfcGxhbmVfc3RhdGUpOwotCi1vdXRfZnJlZToKLQlpZiAobmV3X2NydGNfc3RhdGUp Ci0JCWludGVsX2NydGNfZGVzdHJveV9zdGF0ZSgmY3J0Yy0+YmFzZSwgJm5ld19jcnRjX3N0YXRl LT51YXBpKTsKLQlpZiAocmV0KQotCQlpbnRlbF9wbGFuZV9kZXN0cm95X3N0YXRlKCZwbGFuZS0+ YmFzZSwgJm5ld19wbGFuZV9zdGF0ZS0+dWFwaSk7Ci0JZWxzZQotCQlpbnRlbF9wbGFuZV9kZXN0 cm95X3N0YXRlKCZwbGFuZS0+YmFzZSwgJm9sZF9wbGFuZV9zdGF0ZS0+dWFwaSk7Ci0JcmV0dXJu IHJldDsKLQotc2xvdzoKLQlyZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lKCZw bGFuZS0+YmFzZSwgJmNydGMtPmJhc2UsIGZiLAotCQkJCQkgICAgICBjcnRjX3gsIGNydGNfeSwg Y3J0Y193LCBjcnRjX2gsCi0JCQkJCSAgICAgIHNyY194LCBzcmNfeSwgc3JjX3csIHNyY19oLCBj dHgpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpbnRlbF9jdXJz b3JfcGxhbmVfZnVuY3MgPSB7Ci0JLnVwZGF0ZV9wbGFuZSA9IGludGVsX2xlZ2FjeV9jdXJzb3Jf dXBkYXRlLAotCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFu ZSwKLQkuZGVzdHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCi0JLmF0b21pY19kdXBsaWNhdGVf c3RhdGUgPSBpbnRlbF9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19kZXN0cm95X3N0 YXRlID0gaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSwKLQkuZm9ybWF0X21vZF9zdXBwb3J0ZWQg PSBpbnRlbF9jdXJzb3JfZm9ybWF0X21vZF9zdXBwb3J0ZWQsCi19OwotCiBzdGF0aWMgYm9vbCBp OXh4X3BsYW5lX2hhc19mYmMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQkJ ICAgICAgIGVudW0gaTl4eF9wbGFuZV9pZCBpOXh4X3BsYW5lKQogewpAQCAtMTcxOTgsNzQgKzE2 NDgyLDYgQEAgaW50ZWxfcHJpbWFyeV9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LCBlbnVtIHBpcGUgcGlwZSkKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQog Ci1zdGF0aWMgc3RydWN0IGludGVsX3BsYW5lICoKLWludGVsX2N1cnNvcl9wbGFuZV9jcmVhdGUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJICBlbnVtIHBpcGUgcGlwZSkK LXsKLQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmN1cnNvcjsKLQlpbnQgcmV0LCB6cG9zOwotCi0JY3Vy c29yID0gaW50ZWxfcGxhbmVfYWxsb2MoKTsKLQlpZiAoSVNfRVJSKGN1cnNvcikpCi0JCXJldHVy biBjdXJzb3I7Ci0KLQljdXJzb3ItPnBpcGUgPSBwaXBlOwotCWN1cnNvci0+aTl4eF9wbGFuZSA9 IChlbnVtIGk5eHhfcGxhbmVfaWQpIHBpcGU7Ci0JY3Vyc29yLT5pZCA9IFBMQU5FX0NVUlNPUjsK LQljdXJzb3ItPmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZST05UQlVGRkVSKHBpcGUsIGN1cnNv ci0+aWQpOwotCi0JaWYgKElTX0k4NDVHKGRldl9wcml2KSB8fCBJU19JODY1RyhkZXZfcHJpdikp IHsKLQkJY3Vyc29yLT5tYXhfc3RyaWRlID0gaTg0NV9jdXJzb3JfbWF4X3N0cmlkZTsKLQkJY3Vy c29yLT51cGRhdGVfcGxhbmUgPSBpODQ1X3VwZGF0ZV9jdXJzb3I7Ci0JCWN1cnNvci0+ZGlzYWJs ZV9wbGFuZSA9IGk4NDVfZGlzYWJsZV9jdXJzb3I7Ci0JCWN1cnNvci0+Z2V0X2h3X3N0YXRlID0g aTg0NV9jdXJzb3JfZ2V0X2h3X3N0YXRlOwotCQljdXJzb3ItPmNoZWNrX3BsYW5lID0gaTg0NV9j aGVja19jdXJzb3I7Ci0JfSBlbHNlIHsKLQkJY3Vyc29yLT5tYXhfc3RyaWRlID0gaTl4eF9jdXJz b3JfbWF4X3N0cmlkZTsKLQkJY3Vyc29yLT51cGRhdGVfcGxhbmUgPSBpOXh4X3VwZGF0ZV9jdXJz b3I7Ci0JCWN1cnNvci0+ZGlzYWJsZV9wbGFuZSA9IGk5eHhfZGlzYWJsZV9jdXJzb3I7Ci0JCWN1 cnNvci0+Z2V0X2h3X3N0YXRlID0gaTl4eF9jdXJzb3JfZ2V0X2h3X3N0YXRlOwotCQljdXJzb3It PmNoZWNrX3BsYW5lID0gaTl4eF9jaGVja19jdXJzb3I7Ci0JfQotCi0JY3Vyc29yLT5jdXJzb3Iu YmFzZSA9IH4wOwotCWN1cnNvci0+Y3Vyc29yLmNudGwgPSB+MDsKLQotCWlmIChJU19JODQ1Ryhk ZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3ByaXYpIHx8IEhBU19DVVJfRkJDKGRldl9wcml2KSkK LQkJY3Vyc29yLT5jdXJzb3Iuc2l6ZSA9IH4wOwotCi0JcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFu ZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmY3Vyc29yLT5iYXNlLAotCQkJCSAgICAgICAwLCAmaW50 ZWxfY3Vyc29yX3BsYW5lX2Z1bmNzLAotCQkJCSAgICAgICBpbnRlbF9jdXJzb3JfZm9ybWF0cywK LQkJCQkgICAgICAgQVJSQVlfU0laRShpbnRlbF9jdXJzb3JfZm9ybWF0cyksCi0JCQkJICAgICAg IGN1cnNvcl9mb3JtYXRfbW9kaWZpZXJzLAotCQkJCSAgICAgICBEUk1fUExBTkVfVFlQRV9DVVJT T1IsCi0JCQkJICAgICAgICJjdXJzb3IgJWMiLCBwaXBlX25hbWUocGlwZSkpOwotCWlmIChyZXQp Ci0JCWdvdG8gZmFpbDsKLQotCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDQpCi0JCWRybV9w bGFuZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoJmN1cnNvci0+YmFzZSwKLQkJCQkJCSAgIERS TV9NT0RFX1JPVEFURV8wLAotCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzAgfAotCQkJCQkJICAg RFJNX01PREVfUk9UQVRFXzE4MCk7Ci0KLQl6cG9zID0gUlVOVElNRV9JTkZPKGRldl9wcml2KS0+ bnVtX3Nwcml0ZXNbcGlwZV0gKyAxOwotCWRybV9wbGFuZV9jcmVhdGVfenBvc19pbW11dGFibGVf cHJvcGVydHkoJmN1cnNvci0+YmFzZSwgenBvcyk7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMikKLQkJZHJtX3BsYW5lX2VuYWJsZV9mYl9kYW1hZ2VfY2xpcHMoJmN1cnNvci0+YmFz ZSk7Ci0KLQlkcm1fcGxhbmVfaGVscGVyX2FkZCgmY3Vyc29yLT5iYXNlLCAmaW50ZWxfcGxhbmVf aGVscGVyX2Z1bmNzKTsKLQotCXJldHVybiBjdXJzb3I7Ci0KLWZhaWw6Ci0JaW50ZWxfcGxhbmVf ZnJlZShjdXJzb3IpOwotCi0JcmV0dXJuIEVSUl9QVFIocmV0KTsKLX0KLQogc3RhdGljIGludCBp bnRlbF9jcnRjX2xhdGVfcmVnaXN0ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCWludGVs X2NydGNfZGVidWdmc19hZGQoY3J0Yyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5oCmluZGV4IGE1NzcxYmZlY2JhNi4uZjBhNWJmNjk2NTZmIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuaApAQCAtNjQ3LDYgKzY0 NywxOCBAQCBib29sCiBpbnRlbF9mb3JtYXRfaW5mb19pc195dXZfc2VtaXBsYW5hcihjb25zdCBz dHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvLAogCQkJCSAgICB1aW50NjRfdCBtb2RpZmllcik7 CiAKK2ludCBpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlKTsKK3UzMiBpbnRlbF9wbGFuZV9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KGlu dCAqeCwgaW50ICp5LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUg KnN0YXRlLAorCQkJCSAgICAgICBpbnQgY29sb3JfcGxhbmUpOworaW50IGludGVsX3BsYW5lX3Bp bl9mYihzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsKK3ZvaWQgaW50ZWxf cGxhbmVfdW5waW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUp OworCisvKiBjdXJzb3IgKi8KK3N0cnVjdCBpbnRlbF9wbGFuZSAqCitpbnRlbF9jdXJzb3JfcGxh bmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgZW51bSBw aXBlIHBpcGUpOworCiAvKiBtb2Rlc2V0dGluZyAqLwogdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXRf aHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogaW50IGludGVsX21vZGVzZXRfaW5p dF9ub2lycShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Ci0tIAoyLjI3LjAKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=