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 EF208C433FE for ; Fri, 11 Dec 2020 07:29:41 +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 A741923B26 for ; Fri, 11 Dec 2020 07:29:41 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A741923B26 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 D66DC6EC77; Fri, 11 Dec 2020 07:29:35 +0000 (UTC) Received: from us-smtp-delivery-44.mimecast.com (us-smtp-delivery-44.mimecast.com [207.211.30.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7576F6EC69 for ; Fri, 11 Dec 2020 07:29:33 +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-319-wHhhx7_rNnWD8LVoGPZrEw-1; Fri, 11 Dec 2020 02:29:30 -0500 X-MC-Unique: wHhhx7_rNnWD8LVoGPZrEw-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 A11306D520 for ; Fri, 11 Dec 2020 07:29:29 +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 AD2026F989 for ; Fri, 11 Dec 2020 07:29:28 +0000 (UTC) From: Dave Airlie To: intel-gfx@lists.freedesktop.org Date: Fri, 11 Dec 2020 17:29:15 +1000 Message-Id: <20201211072922.19101-5-airlied@gmail.com> In-Reply-To: <20201211072922.19101-1-airlied@gmail.com> References: <20201211072922.19101-1-airlied@gmail.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=airlied@gmail.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: gmail.com Subject: [Intel-gfx] [PATCH 04/11] 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 ZXR0eSBzdGFuZGFsb25lLCBhbmQgc3BsaXRzIG91dCBlYXNpbHkgZW5vdWdoLgoKUmV2aWV3ZWQt Ynk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ClNpZ25l ZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuYyAgfCA4MDYgKysrKysrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuaCAgfCAgMTggKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgfCA3OTcgKy0tLS0t LS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXku aCB8ICAgNyArCiA1IGZpbGVzIGNoYW5nZWQsIDgzOSBpbnNlcnRpb25zKCspLCA3OTAgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9jdXJzb3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfY3Vyc29yLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGU1NTc0ZTUwNmE1 Yy4uOThhMzViOTM5MDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMTk3LDYgKzE5Nyw3IEBA IGk5MTUteSArPSBcCiAJZGlzcGxheS9pbnRlbF9jb21ib19waHkubyBcCiAJZGlzcGxheS9pbnRl bF9jb25uZWN0b3IubyBcCiAJZGlzcGxheS9pbnRlbF9jc3IubyBcCisJZGlzcGxheS9pbnRlbF9j dXJzb3IubyBcCiAJZGlzcGxheS9pbnRlbF9kaXNwbGF5Lm8gXAogCWRpc3BsYXkvaW50ZWxfZGlz cGxheV9wb3dlci5vIFwKIAlkaXNwbGF5L2ludGVsX2RwaW9fcGh5Lm8gXApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3Vyc29yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4yNzZkMmJiMGUyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5jCkBAIC0wLDAgKzEsODA2IEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAg SW50ZWwgQ29ycG9yYXRpb24KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf dWFwaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fZGFtYWdlX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KKworI2lu Y2x1ZGUgImludGVsX2F0b21pYy5oIgorI2luY2x1ZGUgImludGVsX2F0b21pY19wbGFuZS5oIgor I2luY2x1ZGUgImludGVsX2N1cnNvci5oIgorI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMu aCIKKyNpbmNsdWRlICJpbnRlbF9kaXNwbGF5LmgiCisKKyNpbmNsdWRlICJpbnRlbF9mcm9udGJ1 ZmZlci5oIgorI2luY2x1ZGUgImludGVsX3BtLmgiCisjaW5jbHVkZSAiaW50ZWxfcHNyLmgiCisj aW5jbHVkZSAiaW50ZWxfc3ByaXRlLmgiCisKKy8qIEN1cnNvciBmb3JtYXRzICovCitzdGF0aWMg Y29uc3QgdTMyIGludGVsX2N1cnNvcl9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9BUkdCODg4 OCwKK307CisKK3N0YXRpYyBjb25zdCB1NjQgY3Vyc29yX2Zvcm1hdF9tb2RpZmllcnNbXSA9IHsK KwlEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRAorfTsKKwor c3RhdGljIHUzMiBpbnRlbF9jdXJzb3JfYmFzZShjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7CisJY29uc3Qgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJY29uc3Qgc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7CisJdTMyIGJhc2U7 CisKKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPmRpc3BsYXkuY3Vyc29yX25lZWRzX3BoeXNp Y2FsKQorCQliYXNlID0gc2dfZG1hX2FkZHJlc3Mob2JqLT5tbS5wYWdlcy0+c2dsKTsKKwllbHNl CisJCWJhc2UgPSBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSk7CisKKwlyZXR1 cm4gYmFzZSArIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQ7Cit9CisKK3N0YXRp YyB1MzIgaW50ZWxfY3Vyc29yX3Bvc2l0aW9uKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCit7CisJaW50IHggPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueDE7CisJ aW50IHkgPSBwbGFuZV9zdGF0ZS0+dWFwaS5kc3QueTE7CisJdTMyIHBvcyA9IDA7CisKKwlpZiAo eCA8IDApIHsKKwkJcG9zIHw9IENVUlNPUl9QT1NfU0lHTiA8PCBDVVJTT1JfWF9TSElGVDsKKwkJ eCA9IC14OworCX0KKwlwb3MgfD0geCA8PCBDVVJTT1JfWF9TSElGVDsKKworCWlmICh5IDwgMCkg eworCQlwb3MgfD0gQ1VSU09SX1BPU19TSUdOIDw8IENVUlNPUl9ZX1NISUZUOworCQl5ID0gLXk7 CisJfQorCXBvcyB8PSB5IDw8IENVUlNPUl9ZX1NISUZUOworCisJcmV0dXJuIHBvczsKK30KKwor c3RhdGljIGJvb2wgaW50ZWxfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpj b25maWcgPQorCQkmcGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldi0+bW9kZV9jb25maWc7CisJ aW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7CisJaW50 IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKKworCXJl dHVybiB3aWR0aCA+IDAgJiYgd2lkdGggPD0gY29uZmlnLT5jdXJzb3Jfd2lkdGggJiYKKwkJaGVp Z2h0ID4gMCAmJiBoZWlnaHQgPD0gY29uZmlnLT5jdXJzb3JfaGVpZ2h0OworfQorCitzdGF0aWMg aW50IGludGVsX2N1cnNvcl9jaGVja19zdXJmYWNlKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KKwkJ dG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKKwl1bnNpZ25lZCBpbnQgcm90 YXRpb24gPSBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb247CisJaW50IHNyY194LCBzcmNfeTsKKwl1 MzIgb2Zmc2V0OworCWludCByZXQ7CisKKwlyZXQgPSBpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChw bGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcGxhbmVfc3Rh dGUtPnVhcGkudmlzaWJsZSkKKwkJcmV0dXJuIDA7CisKKwlzcmNfeCA9IHBsYW5lX3N0YXRlLT51 YXBpLnNyYy54MSA+PiAxNjsKKwlzcmNfeSA9IHBsYW5lX3N0YXRlLT51YXBpLnNyYy55MSA+PiAx NjsKKworCWludGVsX2FkZF9mYl9vZmZzZXRzKCZzcmNfeCwgJnNyY195LCBwbGFuZV9zdGF0ZSwg MCk7CisJb2Zmc2V0ID0gaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldCgmc3JjX3gs ICZzcmNfeSwKKwkJCQkJCSAgICBwbGFuZV9zdGF0ZSwgMCk7CisKKwlpZiAoc3JjX3ggIT0gMCB8 fCBzcmNfeSAhPSAwKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJICAgICJB cmJpdHJhcnkgY3Vyc29yIHBhbm5pbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCS8qCisJICogUHV0IHRoZSBmaW5hbCBjb29yZGluYXRlcyBiYWNrIHNvIHRo YXQgdGhlIHNyYworCSAqIGNvb3JkaW5hdGUgY2hlY2tzIHdpbGwgc2VlIHRoZSByaWdodCB2YWx1 ZXMuCisJICovCisJZHJtX3JlY3RfdHJhbnNsYXRlX3RvKCZwbGFuZV9zdGF0ZS0+dWFwaS5zcmMs CisJCQkgICAgICBzcmNfeCA8PCAxNiwgc3JjX3kgPDwgMTYpOworCisJLyogSUxLKyBkbyB0aGlz IGF1dG9tYWdpY2FsbHkgaW4gaGFyZHdhcmUgKi8KKwlpZiAoSEFTX0dNQ0goZGV2X3ByaXYpICYm IHJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkgeworCQljb25zdCBzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKKwkJaW50IHNyY193ID0gZHJtX3Jl Y3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLnNyYykgPj4gMTY7CisJCWludCBzcmNfaCA9IGRy bV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuc3JjKSA+PiAxNjsKKworCQlvZmZzZXQg Kz0gKHNyY19oICogc3JjX3cgLSAxKSAqIGZiLT5mb3JtYXQtPmNwcFswXTsKKwl9CisKKwlwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ub2Zmc2V0ID0gb2Zmc2V0OworCXBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVswXS54ID0gc3JjX3g7CisJcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnkg PSBzcmNfeTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGludGVsX2NoZWNrX2N1cnNv cihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+aHcuZmI7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSB0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCWNvbnN0 IHN0cnVjdCBkcm1fcmVjdCBzcmMgPSBwbGFuZV9zdGF0ZS0+dWFwaS5zcmM7CisJY29uc3Qgc3Ry dWN0IGRybV9yZWN0IGRzdCA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdDsKKwlpbnQgcmV0OworCisJ aWYgKGZiICYmIGZiLT5tb2RpZmllciAhPSBEUk1fRk9STUFUX01PRF9MSU5FQVIpIHsKKwkJZHJt X2RiZ19rbXMoJmk5MTUtPmRybSwgImN1cnNvciBjYW5ub3QgYmUgdGlsZWRcbiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBpbnRlbF9hdG9taWNfcGxhbmVfY2hlY2tfY2xpcHBp bmcocGxhbmVfc3RhdGUsIGNydGNfc3RhdGUsCisJCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1ND QUxJTkcsCisJCQkJCQlEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCQl0cnVlKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVXNlIHRoZSB1bmNsaXBwZWQgc3JjL2Rz dCByZWN0YW5nbGVzLCB3aGljaCB3ZSBwcm9ncmFtIHRvIGh3ICovCisJcGxhbmVfc3RhdGUtPnVh cGkuc3JjID0gc3JjOworCXBsYW5lX3N0YXRlLT51YXBpLmRzdCA9IGRzdDsKKworCXJldCA9IGlu dGVsX2N1cnNvcl9jaGVja19zdXJmYWNlKHBsYW5lX3N0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQorCQlyZXR1cm4gMDsK KworCXJldCA9IGludGVsX3BsYW5lX2NoZWNrX3NyY19jb29yZGluYXRlcyhwbGFuZV9zdGF0ZSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5z aWduZWQgaW50CitpODQ1X2N1cnNvcl9tYXhfc3RyaWRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxh bmUsCisJCSAgICAgICB1MzIgcGl4ZWxfZm9ybWF0LCB1NjQgbW9kaWZpZXIsCisJCSAgICAgICB1 bnNpZ25lZCBpbnQgcm90YXRpb24pCit7CisJcmV0dXJuIDIwNDg7Cit9CisKK3N0YXRpYyB1MzIg aTg0NV9jdXJzb3JfY3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUpCit7CisJdTMyIGNudGwgPSAwOworCisJaWYgKGNydGNfc3RhdGUtPmdhbW1hX2VuYWJs ZSkKKwkJY250bCB8PSBDVVJTT1JfR0FNTUFfRU5BQkxFOworCisJcmV0dXJuIGNudGw7Cit9CisK K3N0YXRpYyB1MzIgaTg0NV9jdXJzb3JfY3RsKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlLAorCQkJICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKK3sKKwlyZXR1cm4gQ1VSU09SX0VOQUJMRSB8CisJCUNVUlNPUl9GT1JNQVRfQVJH QiB8CisJCUNVUlNPUl9TVFJJREUocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSk7 Cit9CisKK3N0YXRpYyBib29sIGk4NDVfY3Vyc29yX3NpemVfb2soY29uc3Qgc3RydWN0IGludGVs X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK3sKKwlpbnQgd2lkdGggPSBkcm1fcmVjdF93aWR0 aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKKworCS8qCisJICogODQ1Zy84NjVnIGFyZSBvbmx5 IGxpbWl0ZWQgYnkgdGhlIHdpZHRoIG9mIHRoZWlyIGN1cnNvcnMsCisJICogdGhlIGhlaWdodCBp cyBhcmJpdHJhcnkgdXAgdG8gdGhlIHByZWNpc2lvbiBvZiB0aGUgcmVnaXN0ZXIuCisJICovCisJ cmV0dXJuIGludGVsX2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSAmJiBJU19BTElHTkVEKHdp ZHRoLCA2NCk7Cit9CisKK3N0YXRpYyBpbnQgaTg0NV9jaGVja19jdXJzb3Ioc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUpCit7CisJY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBw bGFuZV9zdGF0ZS0+aHcuZmI7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSB0b19p OTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5lLT5kZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBp bnRlbF9jaGVja19jdXJzb3IoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwkvKiBpZiB3ZSB3YW50IHRvIHR1cm4gb2ZmIHRoZSBjdXJzb3IgaWdu b3JlIHdpZHRoIGFuZCBoZWlnaHQgKi8KKwlpZiAoIWZiKQorCQlyZXR1cm4gMDsKKworCS8qIENo ZWNrIGZvciB3aGljaCBjdXJzb3IgdHlwZXMgd2Ugc3VwcG9ydCAqLworCWlmICghaTg0NV9jdXJz b3Jfc2l6ZV9vayhwbGFuZV9zdGF0ZSkpIHsKKwkJZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwKKwkJ CSAgICAiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJICAgIGRy bV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpLAorCQkJICAgIGRybV9yZWN0X2hl aWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWRybV9XQVJOX09OKCZpOTE1LT5kcm0sIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgJiYKKwkJ ICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUgIT0gZmItPnBpdGNoZXNbMF0p OworCisJc3dpdGNoIChmYi0+cGl0Y2hlc1swXSkgeworCWNhc2UgMjU2OgorCWNhc2UgNTEyOgor CWNhc2UgMTAyNDoKKwljYXNlIDIwNDg6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSBkcm1fZGJn X2ttcygmaTkxNS0+ZHJtLCAiSW52YWxpZCBjdXJzb3Igc3RyaWRlICgldSlcbiIsCisJCQkgICAg IGZiLT5waXRjaGVzWzBdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGxhbmVfc3RhdGUt PmN0bCA9IGk4NDVfY3Vyc29yX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTg0NV91cGRhdGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9w bGFuZSAqcGxhbmUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7CisJdTMyIGNudGwgPSAwLCBiYXNlID0gMCwgcG9zID0gMCwgc2l6 ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmIChwbGFuZV9zdGF0ZSAmJiBw bGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKSB7CisJCXVuc2lnbmVkIGludCB3aWR0aCA9IGRybV9y ZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOworCQl1bnNpZ25lZCBpbnQgaGVpZ2h0 ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOworCisJCWNudGwgPSBw bGFuZV9zdGF0ZS0+Y3RsIHwKKwkJCWk4NDVfY3Vyc29yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwor CisJCXNpemUgPSAoaGVpZ2h0IDw8IDEyKSB8IHdpZHRoOworCisJCWJhc2UgPSBpbnRlbF9jdXJz b3JfYmFzZShwbGFuZV9zdGF0ZSk7CisJCXBvcyA9IGludGVsX2N1cnNvcl9wb3NpdGlvbihwbGFu ZV9zdGF0ZSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9j aywgaXJxZmxhZ3MpOworCisJLyogT24gdGhlc2UgY2hpcHNldHMgd2UgY2FuIG9ubHkgbW9kaWZ5 IHRoZSBiYXNlL3NpemUvc3RyaWRlCisJICogd2hpbHN0IHRoZSBjdXJzb3IgaXMgZGlzYWJsZWQu CisJICovCisJaWYgKHBsYW5lLT5jdXJzb3IuYmFzZSAhPSBiYXNlIHx8CisJICAgIHBsYW5lLT5j dXJzb3Iuc2l6ZSAhPSBzaXplIHx8CisJICAgIHBsYW5lLT5jdXJzb3IuY250bCAhPSBjbnRsKSB7 CisJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSksIDApOworCQlp bnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShQSVBFX0EpLCBiYXNlKTsKKwkJaW50 ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUlNJWkUsIHNpemUpOworCQlpbnRlbF9kZV93cml0 ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKFBJUEVfQSksIHBvcyk7CisJCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBDVVJDTlRSKFBJUEVfQSksIGNudGwpOworCisJCXBsYW5lLT5jdXJzb3IuYmFz ZSA9IGJhc2U7CisJCXBsYW5lLT5jdXJzb3Iuc2l6ZSA9IHNpemU7CisJCXBsYW5lLT5jdXJzb3Iu Y250bCA9IGNudGw7CisJfSBlbHNlIHsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENV UlBPUyhQSVBFX0EpLCBwb3MpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9w cml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpODQ1X2Rpc2Fi bGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJaTg0NV91cGRhdGVfY3Vyc29yKHBsYW5l LCBjcnRjX3N0YXRlLCBOVUxMKTsKK30KKworc3RhdGljIGJvb2wgaTg0NV9jdXJzb3JfZ2V0X2h3 X3N0YXRlKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBlbnVtIHBpcGUgKnBp cGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFu ZS0+YmFzZS5kZXYpOworCWVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4gcG93ZXJfZG9t YWluOworCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOworCWJvb2wgcmV0OworCisJcG93ZXJfZG9t YWluID0gUE9XRVJfRE9NQUlOX1BJUEUoUElQRV9BKTsKKwl3YWtlcmVmID0gaW50ZWxfZGlzcGxh eV9wb3dlcl9nZXRfaWZfZW5hYmxlZChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKKwlpZiAoIXdh a2VyZWYpCisJCXJldHVybiBmYWxzZTsKKworCXJldCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IENVUkNOVFIoUElQRV9BKSkgJiBDVVJTT1JfRU5BQkxFOworCisJKnBpcGUgPSBQSVBFX0E7CisK KwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluLCB3YWtlcmVm KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2k5eHhfY3Vyc29y X21heF9zdHJpZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKKwkJICAgICAgIHUzMiBwaXhl bF9mb3JtYXQsIHU2NCBtb2RpZmllciwKKwkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikK K3sKKwlyZXR1cm4gcGxhbmUtPmJhc2UuZGV2LT5tb2RlX2NvbmZpZy5jdXJzb3Jfd2lkdGggKiA0 OworfQorCitzdGF0aWMgdTMyIGk5eHhfY3Vyc29yX2N0bF9jcnRjKGNvbnN0IHN0cnVjdCBpbnRl bF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0g dG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT51YXBpLmNydGMpOworCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCXUzMiBjbnRsID0g MDsKKworCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQorCQlyZXR1cm4gY250bDsKKwor CWlmIChjcnRjX3N0YXRlLT5nYW1tYV9lbmFibGUpCisJCWNudGwgPSBNQ1VSU09SX0dBTU1BX0VO QUJMRTsKKworCWlmIChjcnRjX3N0YXRlLT5jc2NfZW5hYmxlKQorCQljbnRsIHw9IE1DVVJTT1Jf UElQRV9DU0NfRU5BQkxFOworCisJaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPCA1ICYmICFJU19H NFgoZGV2X3ByaXYpKQorCQljbnRsIHw9IE1DVVJTT1JfUElQRV9TRUxFQ1QoY3J0Yy0+cGlwZSk7 CisKKwlyZXR1cm4gY250bDsKK30KKworc3RhdGljIHUzMiBpOXh4X2N1cnNvcl9jdGwoY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRldik7 CisJdTMyIGNudGwgPSAwOworCisJaWYgKElTX0dFTihkZXZfcHJpdiwgNikgfHwgSVNfSVZZQlJJ REdFKGRldl9wcml2KSkKKwkJY250bCB8PSBNQ1VSU09SX1RSSUNLTEVfRkVFRF9ESVNBQkxFOwor CisJc3dpdGNoIChkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSkgeworCWNh c2UgNjQ6CisJCWNudGwgfD0gTUNVUlNPUl9NT0RFXzY0X0FSR0JfQVg7CisJCWJyZWFrOworCWNh c2UgMTI4OgorCQljbnRsIHw9IE1DVVJTT1JfTU9ERV8xMjhfQVJHQl9BWDsKKwkJYnJlYWs7CisJ Y2FzZSAyNTY6CisJCWNudGwgfD0gTUNVUlNPUl9NT0RFXzI1Nl9BUkdCX0FYOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UoZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51 YXBpLmRzdCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocGxhbmVfc3RhdGUtPmh3LnJvdGF0 aW9uICYgRFJNX01PREVfUk9UQVRFXzE4MCkKKwkJY250bCB8PSBNQ1VSU09SX1JPVEFURV8xODA7 CisKKwlyZXR1cm4gY250bDsKK30KKworc3RhdGljIGJvb2wgaTl4eF9jdXJzb3Jfc2l6ZV9vayhj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9CisJCXRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGku cGxhbmUtPmRldik7CisJaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51 YXBpLmRzdCk7CisJaW50IGhlaWdodCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVh cGkuZHN0KTsKKworCWlmICghaW50ZWxfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpKQorCQly ZXR1cm4gZmFsc2U7CisKKwkvKiBDdXJzb3Igd2lkdGggaXMgbGltaXRlZCB0byBhIGZldyBwb3dl ci1vZi10d28gc2l6ZXMgKi8KKwlzd2l0Y2ggKHdpZHRoKSB7CisJY2FzZSAyNTY6CisJY2FzZSAx Mjg6CisJY2FzZSA2NDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0K KworCS8qCisJICogSVZCKyBoYXZlIENVUl9GQkNfQ1RMIHdoaWNoIGFsbG93cyBhbiBhcmJpdHJh cnkgY3Vyc29yCisJICogaGVpZ2h0IGZyb20gOCBsaW5lcyB1cCB0byB0aGUgY3Vyc29yIHdpZHRo LCB3aGVuIHRoZQorCSAqIGN1cnNvciBpcyBub3Qgcm90YXRlZC4gRXZlcnl0aGluZyBlbHNlIHJl cXVpcmVzIHNxdWFyZQorCSAqIGN1cnNvcnMuCisJICovCisJaWYgKEhBU19DVVJfRkJDKGRldl9w cml2KSAmJgorCSAgICBwbGFuZV9zdGF0ZS0+aHcucm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVf MCkgeworCQlpZiAoaGVpZ2h0IDwgOCB8fCBoZWlnaHQgPiB3aWR0aCkKKwkJCXJldHVybiBmYWxz ZTsKKwl9IGVsc2UgeworCQlpZiAoaGVpZ2h0ICE9IHdpZHRoKQorCQkJcmV0dXJuIGZhbHNlOwor CX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IGk5eHhfY2hlY2tfY3Vyc29yKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICBzdHJ1Y3QgaW50ZWxf cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUg PSB0b19pbnRlbF9wbGFuZShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZSk7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWNvbnN0 IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3LmZiOworCWVudW0g cGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJaW50IHJldDsKKworCXJldCA9IGludGVsX2NoZWNr X2N1cnNvcihjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCS8qIGlmIHdlIHdhbnQgdG8gdHVybiBvZmYgdGhlIGN1cnNvciBpZ25vcmUgd2lkdGgg YW5kIGhlaWdodCAqLworCWlmICghZmIpCisJCXJldHVybiAwOworCisJLyogQ2hlY2sgZm9yIHdo aWNoIGN1cnNvciB0eXBlcyB3ZSBzdXBwb3J0ICovCisJaWYgKCFpOXh4X2N1cnNvcl9zaXplX29r KHBsYW5lX3N0YXRlKSkgeworCQlkcm1fZGJnKCZkZXZfcHJpdi0+ZHJtLAorCQkJIkN1cnNvciBk aW1lbnNpb24gJWR4JWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJCWRybV9yZWN0X3dpZHRoKCZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QpLAorCQkJZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFw aS5kc3QpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJtX1dBUk5fT04oJmRldl9wcml2 LT5kcm0sIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgJiYKKwkJICAgIHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVswXS5zdHJpZGUgIT0gZmItPnBpdGNoZXNbMF0pOworCisJaWYgKGZiLT5waXRj aGVzWzBdICE9CisJICAgIGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpICog ZmItPmZvcm1hdC0+Y3BwWzBdKSB7CisJCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLAorCQkJ ICAgICJJbnZhbGlkIGN1cnNvciBzdHJpZGUgKCV1KSAoY3Vyc29yIHdpZHRoICVkKVxuIiwKKwkJ CSAgICBmYi0+cGl0Y2hlc1swXSwKKwkJCSAgICBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUt PnVhcGkuZHN0KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogVGhlcmUncyBz b21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgY3Vyc29yIG9uIENIViBwaXBlIEMuCisJICogSWYgaXQg c3RyYWRkbGVzIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHNjcmVlbiB0aGVuCisJICogbW92aW5nIGl0 IGF3YXkgZnJvbSB0aGUgZWRnZSBvciBkaXNhYmxpbmcgaXQgb2Z0ZW4KKwkgKiByZXN1bHRzIGlu IGEgcGlwZSB1bmRlcnJ1biwgYW5kIG9mdGVuIHRoYXQgY2FuIGxlYWQgdG8KKwkgKiBkZWFkIHBp cGUgKGNvbnN0YW50IHVuZGVycnVuIHJlcG9ydGVkLCBhbmQgaXQgc2NhbnMKKwkgKiBvdXQganVz dCBhIHNvbGlkIGNvbG9yKS4gVG8gcmVjb3ZlciBmcm9tIHRoYXQsIHRoZQorCSAqIGRpc3BsYXkg cG93ZXIgd2VsbCBtdXN0IGJlIHR1cm5lZCBvZmYgYW5kIG9uIGFnYWluLgorCSAqIFJlZnVzZSB0 aGUgcHV0IHRoZSBjdXJzb3IgaW50byB0aGF0IGNvbXByb21pc2VkIHBvc2l0aW9uLgorCSAqLwor CWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwaXBlID09IFBJUEVfQyAmJgorCSAgICBw bGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlICYmIHBsYW5lX3N0YXRlLT51YXBpLmRzdC54MSA8IDAp IHsKKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJCQkgICAgIkNIViBjdXJzb3IgQyBu b3QgYWxsb3dlZCB0byBzdHJhZGRsZSB0aGUgbGVmdCBzY3JlZW4gZWRnZVxuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCXBsYW5lX3N0YXRlLT5jdGwgPSBpOXh4X2N1cnNvcl9jdGwoY3J0 Y19zdGF0ZSwgcGxhbmVfc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGk5 eHhfdXBkYXRlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAorCQkJICAgICAgIGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJICAgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYpOworCWVudW0g cGlwZSBwaXBlID0gcGxhbmUtPnBpcGU7CisJdTMyIGNudGwgPSAwLCBiYXNlID0gMCwgcG9zID0g MCwgZmJjX2N0bCA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmIChwbGFuZV9z dGF0ZSAmJiBwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKSB7CisJCXVuc2lnbmVkIHdpZHRoID0g ZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCk7CisJCXVuc2lnbmVkIGhlaWdo dCA9IGRybV9yZWN0X2hlaWdodCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKKworCQljbnRsID0g cGxhbmVfc3RhdGUtPmN0bCB8CisJCQlpOXh4X2N1cnNvcl9jdGxfY3J0YyhjcnRjX3N0YXRlKTsK KworCQlpZiAod2lkdGggIT0gaGVpZ2h0KQorCQkJZmJjX2N0bCA9IENVUl9GQkNfQ1RMX0VOIHwg KGhlaWdodCAtIDEpOworCisJCWJhc2UgPSBpbnRlbF9jdXJzb3JfYmFzZShwbGFuZV9zdGF0ZSk7 CisJCXBvcyA9IGludGVsX2N1cnNvcl9wb3NpdGlvbihwbGFuZV9zdGF0ZSk7CisJfQorCisJc3Bp bl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOworCisJLyoK KwkgKiBPbiBzb21lIHBsYXRmb3JtcyB3cml0aW5nIENVUkNOVFIgZmlyc3Qgd2lsbCBhbHNvCisJ ICogY2F1c2UgQ1VSUE9TIHRvIGJlIGFybWVkIGJ5IHRoZSBDVVJCQVNFIHdyaXRlLgorCSAqIFdp dGhvdXQgdGhlIENVUkNOVFIgd3JpdGUgdGhlIENVUlBPUyB3cml0ZSB3b3VsZAorCSAqIGFybSBp dHNlbGYuIFRodXMgd2UgYWx3YXlzIHVwZGF0ZSBDVVJDTlRSIGJlZm9yZQorCSAqIENVUlBPUy4K KwkgKgorCSAqIE9uIG90aGVyIHBsYXRmb3JtcyBDVVJQT1MgYWx3YXlzIHJlcXVpcmVzIHRoZQor CSAqIENVUkJBU0Ugd3JpdGUgdG8gYXJtIHRoZSB1cGRhdGUuIEFkZGl0b25hbGx5CisJICogYSB3 cml0ZSB0byBhbnkgb2YgdGhlIGN1cnNvciByZWdpc3RlciB3aWxsIGNhbmNlbAorCSAqIGFuIGFs cmVhZHkgYXJtZWQgY3Vyc29yIHVwZGF0ZS4gVGh1cyBsZWF2aW5nIG91dAorCSAqIHRoZSBDVVJC QVNFIHdyaXRlIGFmdGVyIENVUlBPUyBjb3VsZCBsZWFkIHRvIGEKKwkgKiBjdXJzb3IgdGhhdCBk b2Vzbid0IGFwcGVhciB0byBtb3ZlLCBvciBldmVuIGNoYW5nZQorCSAqIHNoYXBlLiBUaHVzIHdl IGFsd2F5cyB3cml0ZSBDVVJCQVNFLgorCSAqCisJICogVGhlIG90aGVyIHJlZ2lzdGVycyBhcmUg YXJtZWQgYnkgYnkgdGhlIENVUkJBU0Ugd3JpdGUKKwkgKiBleGNlcHQgd2hlbiB0aGUgcGxhbmUg aXMgZ2V0dGluZyBlbmFibGVkIGF0IHdoaWNoIHRpbWUKKwkgKiB0aGUgQ1VSQ05UUiB3cml0ZSBh cm1zIHRoZSB1cGRhdGUuCisJICovCisKKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA5KQor CQlza2xfd3JpdGVfY3Vyc29yX3dtKHBsYW5lLCBjcnRjX3N0YXRlKTsKKworCWlmICghaW50ZWxf Y3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpKQorCQlpbnRlbF9wc3IyX3Byb2dyYW1fcGxh bmVfc2VsX2ZldGNoKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgMCk7CisKKwlpZiAo cGxhbmUtPmN1cnNvci5iYXNlICE9IGJhc2UgfHwKKwkgICAgcGxhbmUtPmN1cnNvci5zaXplICE9 IGZiY19jdGwgfHwKKwkgICAgcGxhbmUtPmN1cnNvci5jbnRsICE9IGNudGwpIHsKKwkJaWYgKEhB U19DVVJfRkJDKGRldl9wcml2KSkKKwkJCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJf RkJDX0NUTChwaXBlKSwKKwkJCQkJICBmYmNfY3RsKTsKKwkJaW50ZWxfZGVfd3JpdGVfZncoZGV2 X3ByaXYsIENVUkNOVFIocGlwZSksIGNudGwpOworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJp diwgQ1VSUE9TKHBpcGUpLCBwb3MpOworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VS QkFTRShwaXBlKSwgYmFzZSk7CisKKwkJcGxhbmUtPmN1cnNvci5iYXNlID0gYmFzZTsKKwkJcGxh bmUtPmN1cnNvci5zaXplID0gZmJjX2N0bDsKKwkJcGxhbmUtPmN1cnNvci5jbnRsID0gY250bDsK Kwl9IGVsc2UgeworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKHBpcGUpLCBw b3MpOworCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQkFTRShwaXBlKSwgYmFzZSk7 CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBp cnFmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGk5eHhfZGlzYWJsZV9jdXJzb3Ioc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSwKKwkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKK3sKKwlpOXh4X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNydGNfc3RhdGUsIE5VTEwp OworfQorCitzdGF0aWMgYm9vbCBpOXh4X2N1cnNvcl9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSwKKwkJCQkgICAgIGVudW0gcGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7CisJZW51 bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47CisJaW50ZWxfd2FrZXJl Zl90IHdha2VyZWY7CisJYm9vbCByZXQ7CisJdTMyIHZhbDsKKworCS8qCisJICogTm90IDEwMCUg Y29ycmVjdCBmb3IgcGxhbmVzIHRoYXQgY2FuIG1vdmUgYmV0d2VlbiBwaXBlcywKKwkgKiBidXQg dGhhdCdzIG9ubHkgdGhlIGNhc2UgZm9yIGdlbjItMyB3aGljaCBkb24ndCBoYXZlIGFueQorCSAq IGRpc3BsYXkgcG93ZXIgd2VsbHMuCisJICovCisJcG93ZXJfZG9tYWluID0gUE9XRVJfRE9NQUlO X1BJUEUocGxhbmUtPnBpcGUpOworCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9p Zl9lbmFibGVkKGRldl9wcml2LCBwb3dlcl9kb21haW4pOworCWlmICghd2FrZXJlZikKKwkJcmV0 dXJuIGZhbHNlOworCisJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VSQ05UUihwbGFu ZS0+cGlwZSkpOworCisJcmV0ID0gdmFsICYgTUNVUlNPUl9NT0RFOworCisJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gNSB8fCBJU19HNFgoZGV2X3ByaXYpKQorCQkqcGlwZSA9IHBsYW5lLT5w aXBlOworCWVsc2UKKwkJKnBpcGUgPSAodmFsICYgTUNVUlNPUl9QSVBFX1NFTEVDVF9NQVNLKSA+ PgorCQkJTUNVUlNPUl9QSVBFX1NFTEVDVF9TSElGVDsKKworCWludGVsX2Rpc3BsYXlfcG93ZXJf cHV0KGRldl9wcml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGJvb2wgaW50ZWxfY3Vyc29yX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkKHN0cnVjdCBk cm1fcGxhbmUgKl9wbGFuZSwKKwkJCQkJICAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVyKQor eworCXJldHVybiBtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIgJiYKKwkJZm9ybWF0 ID09IERSTV9GT1JNQVRfQVJHQjg4ODg7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVsX2xlZ2FjeV9j dXJzb3JfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKKwkJCSAgIHN0cnVjdCBkcm1f Y3J0YyAqX2NydGMsCisJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgIGlu dCBjcnRjX3gsIGludCBjcnRjX3ksCisJCQkgICB1bnNpZ25lZCBpbnQgY3J0Y193LCB1bnNpZ25l ZCBpbnQgY3J0Y19oLAorCQkJICAgdTMyIHNyY194LCB1MzIgc3JjX3ksCisJCQkgICB1MzIgc3Jj X3csIHUzMiBzcmNfaCwKKwkJCSAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4 KQoreworCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFuZShfcGxhbmUp OworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhfY3J0Yyk7CisJc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUgPQorCQl0b19pbnRlbF9wbGFu ZV9zdGF0ZShwbGFuZS0+YmFzZS5zdGF0ZSk7CisJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpu ZXdfcGxhbmVfc3RhdGU7CisJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQor CQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOworCXN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBXaGVuIGNy dGMgaXMgaW5hY3RpdmUgb3IgdGhlcmUgaXMgYSBtb2Rlc2V0IHBlbmRpbmcsCisJICogd2FpdCBm b3IgaXQgdG8gY29tcGxldGUgaW4gdGhlIHNsb3dwYXRoCisJICoKKwkgKiBGSVhNRSBiaWdqb2lu ZXIgZmFzdHBhdGggd291bGQgYmUgZ29vZAorCSAqLworCWlmICghY3J0Y19zdGF0ZS0+aHcuYWN0 aXZlIHx8IGludGVsX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSB8fAorCSAgICBjcnRj X3N0YXRlLT51cGRhdGVfcGlwZSB8fCBjcnRjX3N0YXRlLT5iaWdqb2luZXIpCisJCWdvdG8gc2xv dzsKKworCS8qCisJICogRG9uJ3QgZG8gYW4gYXN5bmMgdXBkYXRlIGlmIHRoZXJlIGlzIGFuIG91 dHN0YW5kaW5nIGNvbW1pdCBtb2RpZnlpbmcKKwkgKiB0aGUgcGxhbmUuICBUaGlzIHByZXZlbnRz IG91ciBhc3luYyB1cGRhdGUncyBjaGFuZ2VzIGZyb20gZ2V0dGluZworCSAqIG92ZXJyaWRkZW4g YnkgYSBwcmV2aW91cyBzeW5jaHJvbm91cyB1cGRhdGUncyBzdGF0ZS4KKwkgKi8KKwlpZiAob2xk X3BsYW5lX3N0YXRlLT51YXBpLmNvbW1pdCAmJgorCSAgICAhdHJ5X3dhaXRfZm9yX2NvbXBsZXRp b24oJm9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jb21taXQtPmh3X2RvbmUpKQorCQlnb3RvIHNsb3c7 CisKKwkvKgorCSAqIElmIGFueSBwYXJhbWV0ZXJzIGNoYW5nZSB0aGF0IG1heSBhZmZlY3Qgd2F0 ZXJtYXJrcywKKwkgKiB0YWtlIHRoZSBzbG93cGF0aC4gT25seSBjaGFuZ2luZyBmYiBvciBwb3Np dGlvbiBzaG91bGQgYmUKKwkgKiBpbiB0aGUgZmFzdHBhdGguCisJICovCisJaWYgKG9sZF9wbGFu ZV9zdGF0ZS0+dWFwaS5jcnRjICE9ICZjcnRjLT5iYXNlIHx8CisJICAgIG9sZF9wbGFuZV9zdGF0 ZS0+dWFwaS5zcmNfdyAhPSBzcmNfdyB8fAorCSAgICBvbGRfcGxhbmVfc3RhdGUtPnVhcGkuc3Jj X2ggIT0gc3JjX2ggfHwKKwkgICAgb2xkX3BsYW5lX3N0YXRlLT51YXBpLmNydGNfdyAhPSBjcnRj X3cgfHwKKwkgICAgb2xkX3BsYW5lX3N0YXRlLT51YXBpLmNydGNfaCAhPSBjcnRjX2ggfHwKKwkg ICAgIW9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5mYiAhPSAhZmIpCisJCWdvdG8gc2xvdzsKKworCW5l d19wbGFuZV9zdGF0ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKGludGVsX3BsYW5lX2R1cGxpY2F0 ZV9zdGF0ZSgmcGxhbmUtPmJhc2UpKTsKKwlpZiAoIW5ld19wbGFuZV9zdGF0ZSkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwluZXdfY3J0Y19zdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoaW50ZWxf Y3J0Y19kdXBsaWNhdGVfc3RhdGUoJmNydGMtPmJhc2UpKTsKKwlpZiAoIW5ld19jcnRjX3N0YXRl KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJZHJtX2F0b21p Y19zZXRfZmJfZm9yX3BsYW5lKCZuZXdfcGxhbmVfc3RhdGUtPnVhcGksIGZiKTsKKworCW5ld19w bGFuZV9zdGF0ZS0+dWFwaS5zcmNfeCA9IHNyY194OworCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5z cmNfeSA9IHNyY195OworCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfdyA9IHNyY193OworCW5l d19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfaCA9IHNyY19oOworCW5ld19wbGFuZV9zdGF0ZS0+dWFw aS5jcnRjX3ggPSBjcnRjX3g7CisJbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNfeSA9IGNydGNf eTsKKwluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y193ID0gY3J0Y193OworCW5ld19wbGFuZV9z dGF0ZS0+dWFwaS5jcnRjX2ggPSBjcnRjX2g7CisKKwlpbnRlbF9wbGFuZV9jb3B5X3VhcGlfdG9f aHdfc3RhdGUobmV3X3BsYW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUsIGNydGMpOworCisJcmV0 ID0gaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrX3dpdGhfc3RhdGUoY3J0Y19zdGF0ZSwgbmV3X2Ny dGNfc3RhdGUsCisJCQkJCQkgIG9sZF9wbGFuZV9zdGF0ZSwgbmV3X3BsYW5lX3N0YXRlKTsKKwlp ZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCisJcmV0ID0gaW50ZWxfcGxhbmVfcGluX2ZiKG5l d19wbGFuZV9zdGF0ZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKworCWludGVsX2Zy b250YnVmZmVyX2ZsdXNoKHRvX2ludGVsX2Zyb250YnVmZmVyKG5ld19wbGFuZV9zdGF0ZS0+aHcu ZmIpLAorCQkJCU9SSUdJTl9GTElQKTsKKwlpbnRlbF9mcm9udGJ1ZmZlcl90cmFjayh0b19pbnRl bF9mcm9udGJ1ZmZlcihvbGRfcGxhbmVfc3RhdGUtPmh3LmZiKSwKKwkJCQl0b19pbnRlbF9mcm9u dGJ1ZmZlcihuZXdfcGxhbmVfc3RhdGUtPmh3LmZiKSwKKwkJCQlwbGFuZS0+ZnJvbnRidWZmZXJf Yml0KTsKKworCS8qIFN3YXAgcGxhbmUgc3RhdGUgKi8KKwlwbGFuZS0+YmFzZS5zdGF0ZSA9ICZu ZXdfcGxhbmVfc3RhdGUtPnVhcGk7CisKKwkvKgorCSAqIFdlIGNhbm5vdCBzd2FwIGNydGNfc3Rh dGUgYXMgaXQgbWF5IGJlIGluIHVzZSBieSBhbiBhdG9taWMgY29tbWl0IG9yCisJICogcGFnZSBm bGlwIHRoYXQncyBydW5uaW5nIHNpbXVsdGFuZW91c2x5LiBJZiB3ZSBzd2FwIGNydGNfc3RhdGUg YW5kCisJICogZGVzdHJveSB0aGUgb2xkIHN0YXRlLCB3ZSB3aWxsIGNhdXNlIGEgdXNlLWFmdGVy LWZyZWUgdGhlcmUuCisJICoKKwkgKiBPbmx5IHVwZGF0ZSBhY3RpdmVfcGxhbmVzLCB3aGljaCBp cyBuZWVkZWQgZm9yIG91ciBpbnRlcm5hbAorCSAqIGJvb2trZWVwaW5nLiBFaXRoZXIgdmFsdWUg d2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgd2hlbiB1cGRhdGluZworCSAqIHBsYW5lcyBhdG9taWNh bGx5LiBJZiB0aGUgY3Vyc29yIHdhcyBwYXJ0IG9mIHRoZSBhdG9taWMgdXBkYXRlIHRoZW4KKwkg KiB3ZSB3b3VsZCBoYXZlIHRha2VuIHRoZSBzbG93cGF0aC4KKwkgKi8KKwljcnRjX3N0YXRlLT5h Y3RpdmVfcGxhbmVzID0gbmV3X2NydGNfc3RhdGUtPmFjdGl2ZV9wbGFuZXM7CisKKwlpZiAobmV3 X3BsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCisJCWludGVsX3VwZGF0ZV9wbGFuZShwbGFuZSwg Y3J0Y19zdGF0ZSwgbmV3X3BsYW5lX3N0YXRlKTsKKwllbHNlCisJCWludGVsX2Rpc2FibGVfcGxh bmUocGxhbmUsIGNydGNfc3RhdGUpOworCisJaW50ZWxfcGxhbmVfdW5waW5fZmIob2xkX3BsYW5l X3N0YXRlKTsKKworb3V0X2ZyZWU6CisJaWYgKG5ld19jcnRjX3N0YXRlKQorCQlpbnRlbF9jcnRj X2Rlc3Ryb3lfc3RhdGUoJmNydGMtPmJhc2UsICZuZXdfY3J0Y19zdGF0ZS0+dWFwaSk7CisJaWYg KHJldCkKKwkJaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSgmcGxhbmUtPmJhc2UsICZuZXdfcGxh bmVfc3RhdGUtPnVhcGkpOworCWVsc2UKKwkJaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSgmcGxh bmUtPmJhc2UsICZvbGRfcGxhbmVfc3RhdGUtPnVhcGkpOworCXJldHVybiByZXQ7CisKK3Nsb3c6 CisJcmV0dXJuIGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSgmcGxhbmUtPmJhc2UsICZj cnRjLT5iYXNlLCBmYiwKKwkJCQkJICAgICAgY3J0Y194LCBjcnRjX3ksIGNydGNfdywgY3J0Y19o LAorCQkJCQkgICAgICBzcmNfeCwgc3JjX3ksIHNyY193LCBzcmNfaCwgY3R4KTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaW50ZWxfY3Vyc29yX3BsYW5lX2Z1bmNz ID0geworCS51cGRhdGVfcGxhbmUgPSBpbnRlbF9sZWdhY3lfY3Vyc29yX3VwZGF0ZSwKKwkuZGlz YWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCisJLmRlc3Ryb3kg PSBpbnRlbF9wbGFuZV9kZXN0cm95LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50ZWxf cGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3Bs YW5lX2Rlc3Ryb3lfc3RhdGUsCisJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaW50ZWxfY3Vyc29y X2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAorfTsKKworc3RydWN0IGludGVsX3BsYW5lICoKK2ludGVs X2N1cnNvcl9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAor CQkJICBlbnVtIHBpcGUgcGlwZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmN1cnNvcjsKKwlp bnQgcmV0LCB6cG9zOworCisJY3Vyc29yID0gaW50ZWxfcGxhbmVfYWxsb2MoKTsKKwlpZiAoSVNf RVJSKGN1cnNvcikpCisJCXJldHVybiBjdXJzb3I7CisKKwljdXJzb3ItPnBpcGUgPSBwaXBlOwor CWN1cnNvci0+aTl4eF9wbGFuZSA9IChlbnVtIGk5eHhfcGxhbmVfaWQpIHBpcGU7CisJY3Vyc29y LT5pZCA9IFBMQU5FX0NVUlNPUjsKKwljdXJzb3ItPmZyb250YnVmZmVyX2JpdCA9IElOVEVMX0ZS T05UQlVGRkVSKHBpcGUsIGN1cnNvci0+aWQpOworCisJaWYgKElTX0k4NDVHKGRldl9wcml2KSB8 fCBJU19JODY1RyhkZXZfcHJpdikpIHsKKwkJY3Vyc29yLT5tYXhfc3RyaWRlID0gaTg0NV9jdXJz b3JfbWF4X3N0cmlkZTsKKwkJY3Vyc29yLT51cGRhdGVfcGxhbmUgPSBpODQ1X3VwZGF0ZV9jdXJz b3I7CisJCWN1cnNvci0+ZGlzYWJsZV9wbGFuZSA9IGk4NDVfZGlzYWJsZV9jdXJzb3I7CisJCWN1 cnNvci0+Z2V0X2h3X3N0YXRlID0gaTg0NV9jdXJzb3JfZ2V0X2h3X3N0YXRlOworCQljdXJzb3It PmNoZWNrX3BsYW5lID0gaTg0NV9jaGVja19jdXJzb3I7CisJfSBlbHNlIHsKKwkJY3Vyc29yLT5t YXhfc3RyaWRlID0gaTl4eF9jdXJzb3JfbWF4X3N0cmlkZTsKKwkJY3Vyc29yLT51cGRhdGVfcGxh bmUgPSBpOXh4X3VwZGF0ZV9jdXJzb3I7CisJCWN1cnNvci0+ZGlzYWJsZV9wbGFuZSA9IGk5eHhf ZGlzYWJsZV9jdXJzb3I7CisJCWN1cnNvci0+Z2V0X2h3X3N0YXRlID0gaTl4eF9jdXJzb3JfZ2V0 X2h3X3N0YXRlOworCQljdXJzb3ItPmNoZWNrX3BsYW5lID0gaTl4eF9jaGVja19jdXJzb3I7CisJ fQorCisJY3Vyc29yLT5jdXJzb3IuYmFzZSA9IH4wOworCWN1cnNvci0+Y3Vyc29yLmNudGwgPSB+ MDsKKworCWlmIChJU19JODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3ByaXYpIHx8IEhB U19DVVJfRkJDKGRldl9wcml2KSkKKwkJY3Vyc29yLT5jdXJzb3Iuc2l6ZSA9IH4wOworCisJcmV0 ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmY3Vyc29yLT5iYXNl LAorCQkJCSAgICAgICAwLCAmaW50ZWxfY3Vyc29yX3BsYW5lX2Z1bmNzLAorCQkJCSAgICAgICBp bnRlbF9jdXJzb3JfZm9ybWF0cywKKwkJCQkgICAgICAgQVJSQVlfU0laRShpbnRlbF9jdXJzb3Jf Zm9ybWF0cyksCisJCQkJICAgICAgIGN1cnNvcl9mb3JtYXRfbW9kaWZpZXJzLAorCQkJCSAgICAg ICBEUk1fUExBTkVfVFlQRV9DVVJTT1IsCisJCQkJICAgICAgICJjdXJzb3IgJWMiLCBwaXBlX25h bWUocGlwZSkpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCWlmIChJTlRFTF9HRU4oZGV2 X3ByaXYpID49IDQpCisJCWRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoJmN1cnNv ci0+YmFzZSwKKwkJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wLAorCQkJCQkJICAgRFJNX01PREVf Uk9UQVRFXzAgfAorCQkJCQkJICAgRFJNX01PREVfUk9UQVRFXzE4MCk7CisKKwl6cG9zID0gUlVO VElNRV9JTkZPKGRldl9wcml2KS0+bnVtX3Nwcml0ZXNbcGlwZV0gKyAxOworCWRybV9wbGFuZV9j cmVhdGVfenBvc19pbW11dGFibGVfcHJvcGVydHkoJmN1cnNvci0+YmFzZSwgenBvcyk7CisKKwlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikKKwkJZHJtX3BsYW5lX2VuYWJsZV9mYl9kYW1h Z2VfY2xpcHMoJmN1cnNvci0+YmFzZSk7CisKKwlkcm1fcGxhbmVfaGVscGVyX2FkZCgmY3Vyc29y LT5iYXNlLCAmaW50ZWxfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKworCXJldHVybiBjdXJzb3I7CisK K2ZhaWw6CisJaW50ZWxfcGxhbmVfZnJlZShjdXJzb3IpOworCisJcmV0dXJuIEVSUl9QVFIocmV0 KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfY3Vy c29yLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2N1cnNvci5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMWM4MzM5ZTU0N2ZiCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9jdXJzb3IuaApA QCAtMCwwICsxLDE4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisvKgor ICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9J TlRFTF9DVVJTT1JfSF8KKyNkZWZpbmUgX0lOVEVMX0NVUlNPUl9IXworCisjaW5jbHVkZSAiaW50 ZWxfZGlzcGxheS5oIgorCitzdHJ1Y3QgaW50ZWxfcGxhbmU7CisKK3N0cnVjdCBpbnRlbF9wbGFu ZSAqCitpbnRlbF9jdXJzb3JfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKKwkJCSAgZW51bSBwaXBlIHBpcGUpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwppbmRleCA3OWQ3NDc5YmVlZDIuLjI4 ODU1ODQ0ZjhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNw bGF5LmMKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJpbnRlbF9jZGNsay5oIgogI2luY2x1 ZGUgImludGVsX2NvbG9yLmgiCiAjaW5jbHVkZSAiaW50ZWxfY3NyLmgiCisjaW5jbHVkZSAiaW50 ZWxfY3Vyc29yLmgiCiAjaW5jbHVkZSAiaW50ZWxfZGlzcGxheV90eXBlcy5oIgogI2luY2x1ZGUg ImludGVsX2RwX2xpbmtfdHJhaW5pbmcuaCIKICNpbmNsdWRlICJpbnRlbF9mYmMuaCIKQEAgLTEz NywxNiArMTM4LDYgQEAgc3RhdGljIGNvbnN0IHU2NCBpOXh4X2Zvcm1hdF9tb2RpZmllcnNbXSA9 IHsKIAlEUk1fRk9STUFUX01PRF9JTlZBTElECiB9OwogCi0vKiBDdXJzb3IgZm9ybWF0cyAqLwot c3RhdGljIGNvbnN0IHUzMiBpbnRlbF9jdXJzb3JfZm9ybWF0c1tdID0gewotCURSTV9GT1JNQVRf QVJHQjg4ODgsCi19OwotCi1zdGF0aWMgY29uc3QgdTY0IGN1cnNvcl9mb3JtYXRfbW9kaWZpZXJz W10gPSB7Ci0JRFJNX0ZPUk1BVF9NT0RfTElORUFSLAotCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQK LX07Ci0KIHN0YXRpYyB2b2lkIGk5eHhfY3J0Y19jbG9ja19nZXQoc3RydWN0IGludGVsX2NydGMg KmNydGMsCiAJCQkJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKIHN0YXRp YyB2b2lkIGlsa19wY2hfY2xvY2tfZ2V0KHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLApAQCAtMjUy OCw5ICsyNTE5LDkgQEAgc3RhdGljIHUzMiBpbnRlbF9jb21wdXRlX2FsaWduZWRfb2Zmc2V0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAlyZXR1cm4gb2Zmc2V0X2FsaWduZWQ7 CiB9CiAKLXN0YXRpYyB1MzIgaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldChpbnQg KngsIGludCAqeSwKLQkJCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpz dGF0ZSwKLQkJCQkJICAgICAgaW50IGNvbG9yX3BsYW5lKQordTMyIGludGVsX3BsYW5lX2NvbXB1 dGVfYWxpZ25lZF9vZmZzZXQoaW50ICp4LCBpbnQgKnksCisJCQkJICAgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgIGludCBjb2xvcl9wbGFuZSkK IHsKIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUoc3Rh dGUtPnVhcGkucGxhbmUpOwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoaW50ZWxfcGxhbmUtPmJhc2UuZGV2KTsKQEAgLTMyNjcsNyArMzI1OCw3IEBAIGludGVs X3BsYW5lX3JlbWFwX2d0dChzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQog CX0KIH0KIAotc3RhdGljIGludAoraW50CiBpbnRlbF9wbGFuZV9jb21wdXRlX2d0dChzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQogewogCWNvbnN0IHN0cnVjdCBpbnRlbF9m cmFtZWJ1ZmZlciAqZmIgPQpAQCAtMTE1MzYsNTY5ICsxMTUyNyw2IEBAIHN0YXRpYyBib29sIGlu dGVsX2NydGNfZ2V0X3BpcGVfY29uZmlnKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0 YXRlKQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdTMyIGludGVsX2N1cnNvcl9iYXNlKGNv bnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJdG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5w bGFuZS0+ZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0 YXRlLT5ody5mYjsKLQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gaW50 ZWxfZmJfb2JqKGZiKTsKLQl1MzIgYmFzZTsKLQotCWlmIChJTlRFTF9JTkZPKGRldl9wcml2KS0+ ZGlzcGxheS5jdXJzb3JfbmVlZHNfcGh5c2ljYWwpCi0JCWJhc2UgPSBzZ19kbWFfYWRkcmVzcyhv YmotPm1tLnBhZ2VzLT5zZ2wpOwotCWVsc2UKLQkJYmFzZSA9IGludGVsX3BsYW5lX2dndHRfb2Zm c2V0KHBsYW5lX3N0YXRlKTsKLQotCXJldHVybiBiYXNlICsgcGxhbmVfc3RhdGUtPmNvbG9yX3Bs YW5lWzBdLm9mZnNldDsKLX0KLQotc3RhdGljIHUzMiBpbnRlbF9jdXJzb3JfcG9zaXRpb24oY29u c3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlpbnQgeCA9IHBs YW5lX3N0YXRlLT51YXBpLmRzdC54MTsKLQlpbnQgeSA9IHBsYW5lX3N0YXRlLT51YXBpLmRzdC55 MTsKLQl1MzIgcG9zID0gMDsKLQotCWlmICh4IDwgMCkgewotCQlwb3MgfD0gQ1VSU09SX1BPU19T SUdOIDw8IENVUlNPUl9YX1NISUZUOwotCQl4ID0gLXg7Ci0JfQotCXBvcyB8PSB4IDw8IENVUlNP Ul9YX1NISUZUOwotCi0JaWYgKHkgPCAwKSB7Ci0JCXBvcyB8PSBDVVJTT1JfUE9TX1NJR04gPDwg Q1VSU09SX1lfU0hJRlQ7Ci0JCXkgPSAteTsKLQl9Ci0JcG9zIHw9IHkgPDwgQ1VSU09SX1lfU0hJ RlQ7Ci0KLQlyZXR1cm4gcG9zOwotfQotCi1zdGF0aWMgYm9vbCBpbnRlbF9jdXJzb3Jfc2l6ZV9v ayhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCWNvbnN0 IHN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9Ci0JCSZwbGFuZV9zdGF0ZS0+dWFwaS5w bGFuZS0+ZGV2LT5tb2RlX2NvbmZpZzsKLQlpbnQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxh bmVfc3RhdGUtPnVhcGkuZHN0KTsKLQlpbnQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QpOwotCi0JcmV0dXJuIHdpZHRoID4gMCAmJiB3aWR0aCA8PSBjb25m aWctPmN1cnNvcl93aWR0aCAmJgotCQloZWlnaHQgPiAwICYmIGhlaWdodCA8PSBjb25maWctPmN1 cnNvcl9oZWlnaHQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfY3Vyc29yX2NoZWNrX3N1cmZhY2Uo c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQotCQl0b19pOTE1KHBsYW5lX3N0YXRlLT51YXBpLnBsYW5l LT5kZXYpOwotCXVuc2lnbmVkIGludCByb3RhdGlvbiA9IHBsYW5lX3N0YXRlLT5ody5yb3RhdGlv bjsKLQlpbnQgc3JjX3gsIHNyY195OwotCXUzMiBvZmZzZXQ7Ci0JaW50IHJldDsKLQotCXJldCA9 IGludGVsX3BsYW5lX2NvbXB1dGVfZ3R0KHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1 cm4gcmV0OwotCi0JaWYgKCFwbGFuZV9zdGF0ZS0+dWFwaS52aXNpYmxlKQotCQlyZXR1cm4gMDsK LQotCXNyY194ID0gcGxhbmVfc3RhdGUtPnVhcGkuc3JjLngxID4+IDE2OwotCXNyY195ID0gcGxh bmVfc3RhdGUtPnVhcGkuc3JjLnkxID4+IDE2OwotCi0JaW50ZWxfYWRkX2ZiX29mZnNldHMoJnNy Y194LCAmc3JjX3ksIHBsYW5lX3N0YXRlLCAwKTsKLQlvZmZzZXQgPSBpbnRlbF9wbGFuZV9jb21w dXRlX2FsaWduZWRfb2Zmc2V0KCZzcmNfeCwgJnNyY195LAotCQkJCQkJICAgIHBsYW5lX3N0YXRl LCAwKTsKLQotCWlmIChzcmNfeCAhPSAwIHx8IHNyY195ICE9IDApIHsKLQkJZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sCi0JCQkgICAgIkFyYml0cmFyeSBjdXJzb3IgcGFubmluZyBub3Qgc3Vw cG9ydGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBQdXQgdGhlIGZp bmFsIGNvb3JkaW5hdGVzIGJhY2sgc28gdGhhdCB0aGUgc3JjCi0JICogY29vcmRpbmF0ZSBjaGVj a3Mgd2lsbCBzZWUgdGhlIHJpZ2h0IHZhbHVlcy4KLQkgKi8KLQlkcm1fcmVjdF90cmFuc2xhdGVf dG8oJnBsYW5lX3N0YXRlLT51YXBpLnNyYywKLQkJCSAgICAgIHNyY194IDw8IDE2LCBzcmNfeSA8 PCAxNik7Ci0KLQkvKiBJTEsrIGRvIHRoaXMgYXV0b21hZ2ljYWxseSBpbiBoYXJkd2FyZSAqLwot CWlmIChIQVNfR01DSChkZXZfcHJpdikgJiYgcm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMTgw KSB7Ci0JCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmh3 LmZiOwotCQlpbnQgc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuc3Jj KSA+PiAxNjsKLQkJaW50IHNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFw aS5zcmMpID4+IDE2OwotCi0JCW9mZnNldCArPSAoc3JjX2ggKiBzcmNfdyAtIDEpICogZmItPmZv cm1hdC0+Y3BwWzBdOwotCX0KLQotCXBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5vZmZzZXQg PSBvZmZzZXQ7Ci0JcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnggPSBzcmNfeDsKLQlwbGFu ZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0ueSA9IHNyY195OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgaW50ZWxfY2hlY2tfY3Vyc29yKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAotCQkJICAgICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkK LXsKLQljb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5m YjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmVfc3RhdGUt PnVhcGkucGxhbmUtPmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9yZWN0IHNyYyA9IHBsYW5lX3N0 YXRlLT51YXBpLnNyYzsKLQljb25zdCBzdHJ1Y3QgZHJtX3JlY3QgZHN0ID0gcGxhbmVfc3RhdGUt PnVhcGkuZHN0OwotCWludCByZXQ7Ci0KLQlpZiAoZmIgJiYgZmItPm1vZGlmaWVyICE9IERSTV9G T1JNQVRfTU9EX0xJTkVBUikgewotCQlkcm1fZGJnX2ttcygmaTkxNS0+ZHJtLCAiY3Vyc29yIGNh bm5vdCBiZSB0aWxlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldCA9IGludGVs X2F0b21pY19wbGFuZV9jaGVja19jbGlwcGluZyhwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSwKLQkJ CQkJCURSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKLQkJCQkJCURSTV9QTEFORV9IRUxQRVJf Tk9fU0NBTElORywKLQkJCQkJCXRydWUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkv KiBVc2UgdGhlIHVuY2xpcHBlZCBzcmMvZHN0IHJlY3RhbmdsZXMsIHdoaWNoIHdlIHByb2dyYW0g dG8gaHcgKi8KLQlwbGFuZV9zdGF0ZS0+dWFwaS5zcmMgPSBzcmM7Ci0JcGxhbmVfc3RhdGUtPnVh cGkuZHN0ID0gZHN0OwotCi0JcmV0ID0gaW50ZWxfY3Vyc29yX2NoZWNrX3N1cmZhY2UocGxhbmVf c3RhdGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoIXBsYW5lX3N0YXRlLT51 YXBpLnZpc2libGUpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gaW50ZWxfcGxhbmVfY2hlY2tfc3Jj X2Nvb3JkaW5hdGVzKHBsYW5lX3N0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWk4NDVfY3Vyc29yX21heF9zdHJp ZGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJICAgICAgIHUzMiBwaXhlbF9mb3JtYXQs IHU2NCBtb2RpZmllciwKLQkJICAgICAgIHVuc2lnbmVkIGludCByb3RhdGlvbikKLXsKLQlyZXR1 cm4gMjA0ODsKLX0KLQotc3RhdGljIHUzMiBpODQ1X2N1cnNvcl9jdGxfY3J0Yyhjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQl1MzIgY250bCA9IDA7Ci0KLQlp ZiAoY3J0Y19zdGF0ZS0+Z2FtbWFfZW5hYmxlKQotCQljbnRsIHw9IENVUlNPUl9HQU1NQV9FTkFC TEU7Ci0KLQlyZXR1cm4gY250bDsKLX0KLQotc3RhdGljIHUzMiBpODQ1X2N1cnNvcl9jdGwoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCQkgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXJldHVybiBDVVJTT1JfRU5B QkxFIHwKLQkJQ1VSU09SX0ZPUk1BVF9BUkdCIHwKLQkJQ1VSU09SX1NUUklERShwbGFuZV9zdGF0 ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlKTsKLX0KLQotc3RhdGljIGJvb2wgaTg0NV9jdXJzb3Jf c2l6ZV9vayhjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewot CWludCB3aWR0aCA9IGRybV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCi0J LyoKLQkgKiA4NDVnLzg2NWcgYXJlIG9ubHkgbGltaXRlZCBieSB0aGUgd2lkdGggb2YgdGhlaXIg Y3Vyc29ycywKLQkgKiB0aGUgaGVpZ2h0IGlzIGFyYml0cmFyeSB1cCB0byB0aGUgcHJlY2lzaW9u IG9mIHRoZSByZWdpc3Rlci4KLQkgKi8KLQlyZXR1cm4gaW50ZWxfY3Vyc29yX3NpemVfb2socGxh bmVfc3RhdGUpICYmIElTX0FMSUdORUQod2lkdGgsIDY0KTsKLX0KLQotc3RhdGljIGludCBpODQ1 X2NoZWNrX2N1cnNvcihzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAg ICAgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKLXsKLQljb25zdCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lX3N0YXRlLT5ody5mYjsKLQlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUtPmRl dik7Ci0JaW50IHJldDsKLQotCXJldCA9IGludGVsX2NoZWNrX2N1cnNvcihjcnRjX3N0YXRlLCBw bGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIGlmIHdlIHdhbnQg dG8gdHVybiBvZmYgdGhlIGN1cnNvciBpZ25vcmUgd2lkdGggYW5kIGhlaWdodCAqLwotCWlmICgh ZmIpCi0JCXJldHVybiAwOwotCi0JLyogQ2hlY2sgZm9yIHdoaWNoIGN1cnNvciB0eXBlcyB3ZSBz dXBwb3J0ICovCi0JaWYgKCFpODQ1X2N1cnNvcl9zaXplX29rKHBsYW5lX3N0YXRlKSkgewotCQlk cm1fZGJnX2ttcygmaTkxNS0+ZHJtLAotCQkJICAgICJDdXJzb3IgZGltZW5zaW9uICVkeCVkIG5v dCBzdXBwb3J0ZWRcbiIsCi0JCQkgICAgZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBp LmRzdCksCi0JCQkgICAgZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHJtX1dBUk5fT04oJmk5MTUtPmRybSwgcGxhbmVf c3RhdGUtPnVhcGkudmlzaWJsZSAmJgotCQkgICAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBd LnN0cmlkZSAhPSBmYi0+cGl0Y2hlc1swXSk7Ci0KLQlzd2l0Y2ggKGZiLT5waXRjaGVzWzBdKSB7 Ci0JY2FzZSAyNTY6Ci0JY2FzZSA1MTI6Ci0JY2FzZSAxMDI0OgotCWNhc2UgMjA0ODoKLQkJYnJl YWs7Ci0JZGVmYXVsdDoKLQkJIGRybV9kYmdfa21zKCZpOTE1LT5kcm0sICJJbnZhbGlkIGN1cnNv ciBzdHJpZGUgKCV1KVxuIiwKLQkJCSAgICAgZmItPnBpdGNoZXNbMF0pOwotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQlwbGFuZV9zdGF0ZS0+Y3RsID0gaTg0NV9jdXJzb3JfY3RsKGNydGNfc3Rh dGUsIHBsYW5lX3N0YXRlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpODQ1X3Vw ZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKLQkJCSAgICAgICBjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKQotewotCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKLQl1MzIgY250bCA9 IDAsIGJhc2UgPSAwLCBwb3MgPSAwLCBzaXplID0gMDsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdz OwotCi0JaWYgKHBsYW5lX3N0YXRlICYmIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpIHsKLQkJ dW5zaWduZWQgaW50IHdpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRz dCk7Ci0JCXVuc2lnbmVkIGludCBoZWlnaHQgPSBkcm1fcmVjdF9oZWlnaHQoJnBsYW5lX3N0YXRl LT51YXBpLmRzdCk7Ci0KLQkJY250bCA9IHBsYW5lX3N0YXRlLT5jdGwgfAotCQkJaTg0NV9jdXJz b3JfY3RsX2NydGMoY3J0Y19zdGF0ZSk7Ci0KLQkJc2l6ZSA9IChoZWlnaHQgPDwgMTIpIHwgd2lk dGg7Ci0KLQkJYmFzZSA9IGludGVsX2N1cnNvcl9iYXNlKHBsYW5lX3N0YXRlKTsKLQkJcG9zID0g aW50ZWxfY3Vyc29yX3Bvc2l0aW9uKHBsYW5lX3N0YXRlKTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci0KLQkvKiBPbiB0aGVzZSBj aGlwc2V0cyB3ZSBjYW4gb25seSBtb2RpZnkgdGhlIGJhc2Uvc2l6ZS9zdHJpZGUKLQkgKiB3aGls c3QgdGhlIGN1cnNvciBpcyBkaXNhYmxlZC4KLQkgKi8KLQlpZiAocGxhbmUtPmN1cnNvci5iYXNl ICE9IGJhc2UgfHwKLQkgICAgcGxhbmUtPmN1cnNvci5zaXplICE9IHNpemUgfHwKLQkgICAgcGxh bmUtPmN1cnNvci5jbnRsICE9IGNudGwpIHsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYs IENVUkNOVFIoUElQRV9BKSwgMCk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJC QVNFKFBJUEVfQSksIGJhc2UpOwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSU0la RSwgc2l6ZSk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MoUElQRV9BKSwg cG9zKTsKLQkJaW50ZWxfZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUkNOVFIoUElQRV9BKSwgY250 bCk7Ci0KLQkJcGxhbmUtPmN1cnNvci5iYXNlID0gYmFzZTsKLQkJcGxhbmUtPmN1cnNvci5zaXpl ID0gc2l6ZTsKLQkJcGxhbmUtPmN1cnNvci5jbnRsID0gY250bDsKLQl9IGVsc2UgewotCQlpbnRl bF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSUE9TKFBJUEVfQSksIHBvcyk7Ci0JfQotCi0Jc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Ci19 Ci0KLXN0YXRpYyB2b2lkIGk4NDVfZGlzYWJsZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSwKLQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKLXsK LQlpODQ1X3VwZGF0ZV9jdXJzb3IocGxhbmUsIGNydGNfc3RhdGUsIE5VTEwpOwotfQotCi1zdGF0 aWMgYm9vbCBpODQ1X2N1cnNvcl9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX3BsYW5lICpwbGFu ZSwKLQkJCQkgICAgIGVudW0gcGlwZSAqcGlwZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBpbnRlbF9kaXNw bGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7 Ci0JYm9vbCByZXQ7Ci0KLQlwb3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShQSVBFX0Ep OwotCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2 LCBwb3dlcl9kb21haW4pOwotCWlmICghd2FrZXJlZikKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0 ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgQ1VSQ05UUihQSVBFX0EpKSAmIENVUlNPUl9FTkFC TEU7Ci0KLQkqcGlwZSA9IFBJUEVfQTsKLQotCWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0KGRldl9w cml2LCBwb3dlcl9kb21haW4sIHdha2VyZWYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IHVuc2lnbmVkIGludAotaTl4eF9jdXJzb3JfbWF4X3N0cmlkZShzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lLAotCQkgICAgICAgdTMyIHBpeGVsX2Zvcm1hdCwgdTY0IG1vZGlmaWVyLAotCQkgICAg ICAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQotewotCXJldHVybiBwbGFuZS0+YmFzZS5kZXYtPm1v ZGVfY29uZmlnLmN1cnNvcl93aWR0aCAqIDQ7Ci19Ci0KLXN0YXRpYyB1MzIgaTl4eF9jdXJzb3Jf Y3RsX2NydGMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0J c3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPnVhcGku Y3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRj LT5iYXNlLmRldik7Ci0JdTMyIGNudGwgPSAwOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gMTEpCi0JCXJldHVybiBjbnRsOwotCi0JaWYgKGNydGNfc3RhdGUtPmdhbW1hX2VuYWJsZSkK LQkJY250bCA9IE1DVVJTT1JfR0FNTUFfRU5BQkxFOwotCi0JaWYgKGNydGNfc3RhdGUtPmNzY19l bmFibGUpCi0JCWNudGwgfD0gTUNVUlNPUl9QSVBFX0NTQ19FTkFCTEU7Ci0KLQlpZiAoSU5URUxf R0VOKGRldl9wcml2KSA8IDUgJiYgIUlTX0c0WChkZXZfcHJpdikpCi0JCWNudGwgfD0gTUNVUlNP Ul9QSVBFX1NFTEVDVChjcnRjLT5waXBlKTsKLQotCXJldHVybiBjbnRsOwotfQotCi1zdGF0aWMg dTMyIGk5eHhfY3Vyc29yX2N0bChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUp Ci17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJdG9faTkxNShwbGFu ZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQl1MzIgY250bCA9IDA7Ci0KLQlpZiAoSVNfR0VO KGRldl9wcml2LCA2KSB8fCBJU19JVllCUklER0UoZGV2X3ByaXYpKQotCQljbnRsIHw9IE1DVVJT T1JfVFJJQ0tMRV9GRUVEX0RJU0FCTEU7Ci0KLQlzd2l0Y2ggKGRybV9yZWN0X3dpZHRoKCZwbGFu ZV9zdGF0ZS0+dWFwaS5kc3QpKSB7Ci0JY2FzZSA2NDoKLQkJY250bCB8PSBNQ1VSU09SX01PREVf NjRfQVJHQl9BWDsKLQkJYnJlYWs7Ci0JY2FzZSAxMjg6Ci0JCWNudGwgfD0gTUNVUlNPUl9NT0RF XzEyOF9BUkdCX0FYOwotCQlicmVhazsKLQljYXNlIDI1NjoKLQkJY250bCB8PSBNQ1VSU09SX01P REVfMjU2X0FSR0JfQVg7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShkcm1f cmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KSk7Ci0JCXJldHVybiAwOwotCX0KLQot CWlmIChwbGFuZV9zdGF0ZS0+aHcucm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMTgwKQotCQlj bnRsIHw9IE1DVVJTT1JfUk9UQVRFXzE4MDsKLQotCXJldHVybiBjbnRsOwotfQotCi1zdGF0aWMg Ym9vbCBpOXh4X2N1cnNvcl9zaXplX29rKGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0KLQkJ dG9faTkxNShwbGFuZV9zdGF0ZS0+dWFwaS5wbGFuZS0+ZGV2KTsKLQlpbnQgd2lkdGggPSBkcm1f cmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVhcGkuZHN0KTsKLQlpbnQgaGVpZ2h0ID0gZHJtX3Jl Y3RfaGVpZ2h0KCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpOwotCi0JaWYgKCFpbnRlbF9jdXJzb3Jf c2l6ZV9vayhwbGFuZV9zdGF0ZSkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIEN1cnNvciB3aWR0 aCBpcyBsaW1pdGVkIHRvIGEgZmV3IHBvd2VyLW9mLXR3byBzaXplcyAqLwotCXN3aXRjaCAod2lk dGgpIHsKLQljYXNlIDI1NjoKLQljYXNlIDEyODoKLQljYXNlIDY0OgotCQlicmVhazsKLQlkZWZh dWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoKLQkgKiBJVkIrIGhhdmUgQ1VSX0ZCQ19D VEwgd2hpY2ggYWxsb3dzIGFuIGFyYml0cmFyeSBjdXJzb3IKLQkgKiBoZWlnaHQgZnJvbSA4IGxp bmVzIHVwIHRvIHRoZSBjdXJzb3Igd2lkdGgsIHdoZW4gdGhlCi0JICogY3Vyc29yIGlzIG5vdCBy b3RhdGVkLiBFdmVyeXRoaW5nIGVsc2UgcmVxdWlyZXMgc3F1YXJlCi0JICogY3Vyc29ycy4KLQkg Ki8KLQlpZiAoSEFTX0NVUl9GQkMoZGV2X3ByaXYpICYmCi0JICAgIHBsYW5lX3N0YXRlLT5ody5y b3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV8wKSB7Ci0JCWlmIChoZWlnaHQgPCA4IHx8IGhlaWdo dCA+IHdpZHRoKQotCQkJcmV0dXJuIGZhbHNlOwotCX0gZWxzZSB7Ci0JCWlmIChoZWlnaHQgIT0g d2lkdGgpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp YyBpbnQgaTl4eF9jaGVja19jdXJzb3Ioc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUsCi0JCQkgICAgIHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17Ci0J c3RydWN0IGludGVsX3BsYW5lICpwbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lX3N0YXRlLT51 YXBpLnBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBw bGFuZV9zdGF0ZS0+aHcuZmI7Ci0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKLQlpbnQg cmV0OwotCi0JcmV0ID0gaW50ZWxfY2hlY2tfY3Vyc29yKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRl KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyogaWYgd2Ugd2FudCB0byB0dXJuIG9m ZiB0aGUgY3Vyc29yIGlnbm9yZSB3aWR0aCBhbmQgaGVpZ2h0ICovCi0JaWYgKCFmYikKLQkJcmV0 dXJuIDA7Ci0KLQkvKiBDaGVjayBmb3Igd2hpY2ggY3Vyc29yIHR5cGVzIHdlIHN1cHBvcnQgKi8K LQlpZiAoIWk5eHhfY3Vyc29yX3NpemVfb2socGxhbmVfc3RhdGUpKSB7Ci0JCWRybV9kYmcoJmRl dl9wcml2LT5kcm0sCi0JCQkiQ3Vyc29yIGRpbWVuc2lvbiAlZHglZCBub3Qgc3VwcG9ydGVkXG4i LAotCQkJZHJtX3JlY3Rfd2lkdGgoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCksCi0JCQlkcm1fcmVj dF9oZWlnaHQoJnBsYW5lX3N0YXRlLT51YXBpLmRzdCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9 Ci0KLQlkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgcGxhbmVfc3RhdGUtPnVhcGkudmlzaWJs ZSAmJgotCQkgICAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSAhPSBmYi0+cGl0 Y2hlc1swXSk7Ci0KLQlpZiAoZmItPnBpdGNoZXNbMF0gIT0KLQkgICAgZHJtX3JlY3Rfd2lkdGgo JnBsYW5lX3N0YXRlLT51YXBpLmRzdCkgKiBmYi0+Zm9ybWF0LT5jcHBbMF0pIHsKLQkJZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgIkludmFsaWQgY3Vyc29yIHN0cmlkZSAoJXUp IChjdXJzb3Igd2lkdGggJWQpXG4iLAotCQkJICAgIGZiLT5waXRjaGVzWzBdLAotCQkJICAgIGRy bV9yZWN0X3dpZHRoKCZwbGFuZV9zdGF0ZS0+dWFwaS5kc3QpKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JLyoKLQkgKiBUaGVyZSdzIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBjdXJzb3Ig b24gQ0hWIHBpcGUgQy4KLQkgKiBJZiBpdCBzdHJhZGRsZXMgdGhlIGxlZnQgZWRnZSBvZiB0aGUg c2NyZWVuIHRoZW4KLQkgKiBtb3ZpbmcgaXQgYXdheSBmcm9tIHRoZSBlZGdlIG9yIGRpc2FibGlu ZyBpdCBvZnRlbgotCSAqIHJlc3VsdHMgaW4gYSBwaXBlIHVuZGVycnVuLCBhbmQgb2Z0ZW4gdGhh dCBjYW4gbGVhZCB0bwotCSAqIGRlYWQgcGlwZSAoY29uc3RhbnQgdW5kZXJydW4gcmVwb3J0ZWQs IGFuZCBpdCBzY2FucwotCSAqIG91dCBqdXN0IGEgc29saWQgY29sb3IpLiBUbyByZWNvdmVyIGZy b20gdGhhdCwgdGhlCi0JICogZGlzcGxheSBwb3dlciB3ZWxsIG11c3QgYmUgdHVybmVkIG9mZiBh bmQgb24gYWdhaW4uCi0JICogUmVmdXNlIHRoZSBwdXQgdGhlIGN1cnNvciBpbnRvIHRoYXQgY29t cHJvbWlzZWQgcG9zaXRpb24uCi0JICovCi0JaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYm IHBpcGUgPT0gUElQRV9DICYmCi0JICAgIHBsYW5lX3N0YXRlLT51YXBpLnZpc2libGUgJiYgcGxh bmVfc3RhdGUtPnVhcGkuZHN0LngxIDwgMCkgewotCQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwKLQkJCSAgICAiQ0hWIGN1cnNvciBDIG5vdCBhbGxvd2VkIHRvIHN0cmFkZGxlIHRoZSBsZWZ0 IHNjcmVlbiBlZGdlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGxhbmVfc3RhdGUt PmN0bCA9IGk5eHhfY3Vyc29yX2N0bChjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfY3Vyc29yKHN0cnVjdCBpbnRlbF9w bGFuZSAqcGxhbmUsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1 KHBsYW5lLT5iYXNlLmRldik7Ci0JZW51bSBwaXBlIHBpcGUgPSBwbGFuZS0+cGlwZTsKLQl1MzIg Y250bCA9IDAsIGJhc2UgPSAwLCBwb3MgPSAwLCBmYmNfY3RsID0gMDsKLQl1bnNpZ25lZCBsb25n IGlycWZsYWdzOwotCi0JaWYgKHBsYW5lX3N0YXRlICYmIHBsYW5lX3N0YXRlLT51YXBpLnZpc2li bGUpIHsKLQkJdW5zaWduZWQgd2lkdGggPSBkcm1fcmVjdF93aWR0aCgmcGxhbmVfc3RhdGUtPnVh cGkuZHN0KTsKLQkJdW5zaWduZWQgaGVpZ2h0ID0gZHJtX3JlY3RfaGVpZ2h0KCZwbGFuZV9zdGF0 ZS0+dWFwaS5kc3QpOwotCi0JCWNudGwgPSBwbGFuZV9zdGF0ZS0+Y3RsIHwKLQkJCWk5eHhfY3Vy c29yX2N0bF9jcnRjKGNydGNfc3RhdGUpOwotCi0JCWlmICh3aWR0aCAhPSBoZWlnaHQpCi0JCQlm YmNfY3RsID0gQ1VSX0ZCQ19DVExfRU4gfCAoaGVpZ2h0IC0gMSk7Ci0KLQkJYmFzZSA9IGludGVs X2N1cnNvcl9iYXNlKHBsYW5lX3N0YXRlKTsKLQkJcG9zID0gaW50ZWxfY3Vyc29yX3Bvc2l0aW9u KHBsYW5lX3N0YXRlKTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVuY29y ZS5sb2NrLCBpcnFmbGFncyk7Ci0KLQkvKgotCSAqIE9uIHNvbWUgcGxhdGZvcm1zIHdyaXRpbmcg Q1VSQ05UUiBmaXJzdCB3aWxsIGFsc28KLQkgKiBjYXVzZSBDVVJQT1MgdG8gYmUgYXJtZWQgYnkg dGhlIENVUkJBU0Ugd3JpdGUuCi0JICogV2l0aG91dCB0aGUgQ1VSQ05UUiB3cml0ZSB0aGUgQ1VS UE9TIHdyaXRlIHdvdWxkCi0JICogYXJtIGl0c2VsZi4gVGh1cyB3ZSBhbHdheXMgdXBkYXRlIENV UkNOVFIgYmVmb3JlCi0JICogQ1VSUE9TLgotCSAqCi0JICogT24gb3RoZXIgcGxhdGZvcm1zIENV UlBPUyBhbHdheXMgcmVxdWlyZXMgdGhlCi0JICogQ1VSQkFTRSB3cml0ZSB0byBhcm0gdGhlIHVw ZGF0ZS4gQWRkaXRvbmFsbHkKLQkgKiBhIHdyaXRlIHRvIGFueSBvZiB0aGUgY3Vyc29yIHJlZ2lz dGVyIHdpbGwgY2FuY2VsCi0JICogYW4gYWxyZWFkeSBhcm1lZCBjdXJzb3IgdXBkYXRlLiBUaHVz IGxlYXZpbmcgb3V0Ci0JICogdGhlIENVUkJBU0Ugd3JpdGUgYWZ0ZXIgQ1VSUE9TIGNvdWxkIGxl YWQgdG8gYQotCSAqIGN1cnNvciB0aGF0IGRvZXNuJ3QgYXBwZWFyIHRvIG1vdmUsIG9yIGV2ZW4g Y2hhbmdlCi0JICogc2hhcGUuIFRodXMgd2UgYWx3YXlzIHdyaXRlIENVUkJBU0UuCi0JICoKLQkg KiBUaGUgb3RoZXIgcmVnaXN0ZXJzIGFyZSBhcm1lZCBieSBieSB0aGUgQ1VSQkFTRSB3cml0ZQot CSAqIGV4Y2VwdCB3aGVuIHRoZSBwbGFuZSBpcyBnZXR0aW5nIGVuYWJsZWQgYXQgd2hpY2ggdGlt ZQotCSAqIHRoZSBDVVJDTlRSIHdyaXRlIGFybXMgdGhlIHVwZGF0ZS4KLQkgKi8KLQotCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDkpCi0JCXNrbF93cml0ZV9jdXJzb3Jfd20ocGxhbmUsIGNy dGNfc3RhdGUpOwotCi0JaWYgKCFpbnRlbF9jcnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkp Ci0JCWludGVsX3BzcjJfcHJvZ3JhbV9wbGFuZV9zZWxfZmV0Y2gocGxhbmUsIGNydGNfc3RhdGUs IHBsYW5lX3N0YXRlLCAwKTsKLQotCWlmIChwbGFuZS0+Y3Vyc29yLmJhc2UgIT0gYmFzZSB8fAot CSAgICBwbGFuZS0+Y3Vyc29yLnNpemUgIT0gZmJjX2N0bCB8fAotCSAgICBwbGFuZS0+Y3Vyc29y LmNudGwgIT0gY250bCkgewotCQlpZiAoSEFTX0NVUl9GQkMoZGV2X3ByaXYpKQotCQkJaW50ZWxf ZGVfd3JpdGVfZncoZGV2X3ByaXYsIENVUl9GQkNfQ1RMKHBpcGUpLAotCQkJCQkgIGZiY19jdGwp OwotCQlpbnRlbF9kZV93cml0ZV9mdyhkZXZfcHJpdiwgQ1VSQ05UUihwaXBlKSwgY250bCk7Ci0J CWludGVsX2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJQT1MocGlwZSksIHBvcyk7Ci0JCWludGVs X2RlX3dyaXRlX2Z3KGRldl9wcml2LCBDVVJCQVNFKHBpcGUpLCBiYXNlKTsKLQotCQlwbGFuZS0+ Y3Vyc29yLmJhc2UgPSBiYXNlOwotCQlwbGFuZS0+Y3Vyc29yLnNpemUgPSBmYmNfY3RsOwotCQlw bGFuZS0+Y3Vyc29yLmNudGwgPSBjbnRsOwotCX0gZWxzZSB7Ci0JCWludGVsX2RlX3dyaXRlX2Z3 KGRldl9wcml2LCBDVVJQT1MocGlwZSksIHBvcyk7Ci0JCWludGVsX2RlX3dyaXRlX2Z3KGRldl9w cml2LCBDVVJCQVNFKHBpcGUpLCBiYXNlKTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgaTl4 eF9kaXNhYmxlX2N1cnNvcihzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJCWNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCWk5eHhfdXBkYXRlX2N1cnNv cihwbGFuZSwgY3J0Y19zdGF0ZSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBib29sIGk5eHhfY3Vyc29y X2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAotCQkJCSAgICAgZW51bSBw aXBlICpwaXBlKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUocGxhbmUtPmJhc2UuZGV2KTsKLQllbnVtIGludGVsX2Rpc3BsYXlfcG93ZXJfZG9tYWluIHBv d2VyX2RvbWFpbjsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQlib29sIHJldDsKLQl1MzIg dmFsOwotCi0JLyoKLQkgKiBOb3QgMTAwJSBjb3JyZWN0IGZvciBwbGFuZXMgdGhhdCBjYW4gbW92 ZSBiZXR3ZWVuIHBpcGVzLAotCSAqIGJ1dCB0aGF0J3Mgb25seSB0aGUgY2FzZSBmb3IgZ2VuMi0z IHdoaWNoIGRvbid0IGhhdmUgYW55Ci0JICogZGlzcGxheSBwb3dlciB3ZWxscy4KLQkgKi8KLQlw b3dlcl9kb21haW4gPSBQT1dFUl9ET01BSU5fUElQRShwbGFuZS0+cGlwZSk7Ci0Jd2FrZXJlZiA9 IGludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0X2lmX2VuYWJsZWQoZGV2X3ByaXYsIHBvd2VyX2RvbWFp bik7Ci0JaWYgKCF3YWtlcmVmKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQl2YWwgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBDVVJDTlRSKHBsYW5lLT5waXBlKSk7Ci0KLQlyZXQgPSB2YWwgJiBNQ1VS U09SX01PREU7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA1IHx8IElTX0c0WChkZXZf cHJpdikpCi0JCSpwaXBlID0gcGxhbmUtPnBpcGU7Ci0JZWxzZQotCQkqcGlwZSA9ICh2YWwgJiBN Q1VSU09SX1BJUEVfU0VMRUNUX01BU0spID4+Ci0JCQlNQ1VSU09SX1BJUEVfU0VMRUNUX1NISUZU OwotCi0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIHBvd2VyX2RvbWFpbiwgd2Fr ZXJlZik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKiBWRVNBIDY0MHg0ODB4NzJIeiBtb2RlIHRv IHNldCBvbiB0aGUgcGlwZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl IGxvYWRfZGV0ZWN0X21vZGUgPSB7CiAJRFJNX01PREUoIjY0MHg0ODAiLCBEUk1fTU9ERV9UWVBF X0RFRkFVTFQsIDMxNTAwLCA2NDAsIDY2NCwKQEAgLTE2NjA5LDcgKzE2MDM3LDcgQEAgc3RhdGlj IHZvaWQgYWRkX3Jwc19ib29zdF9hZnRlcl92Ymxhbmsoc3RydWN0IGRybV9jcnRjICpjcnRjLAog CWFkZF93YWl0X3F1ZXVlKGRybV9jcnRjX3ZibGFua193YWl0cXVldWUoY3J0YyksICZ3YWl0LT53 YWl0KTsKIH0KIAotc3RhdGljIGludCBpbnRlbF9wbGFuZV9waW5fZmIoc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKK2ludCBpbnRlbF9wbGFuZV9waW5fZmIoc3RydWN0IGlu dGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBs YW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmVfc3RhdGUtPnVhcGkucGxhbmUpOwogCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKQEAg LTE2NjM5LDcgKzE2MDY3LDcgQEAgc3RhdGljIGludCBpbnRlbF9wbGFuZV9waW5fZmIoc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGlj IHZvaWQgaW50ZWxfcGxhbmVfdW5waW5fZmIoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRf cGxhbmVfc3RhdGUpCit2b2lkIGludGVsX3BsYW5lX3VucGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlKQogewogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwogCkBA IC0xNjg3NSwxMyArMTYzMDMsNiBAQCBzdGF0aWMgYm9vbCBpOTY1X3BsYW5lX2Zvcm1hdF9tb2Rf c3VwcG9ydGVkKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKIAl9CiB9CiAKLXN0YXRpYyBib29s IGludGVsX2N1cnNvcl9mb3JtYXRfbW9kX3N1cHBvcnRlZChzdHJ1Y3QgZHJtX3BsYW5lICpfcGxh bmUsCi0JCQkJCSAgICAgIHUzMiBmb3JtYXQsIHU2NCBtb2RpZmllcikKLXsKLQlyZXR1cm4gbW9k aWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSICYmCi0JCWZvcm1hdCA9PSBEUk1fRk9STUFU X0FSR0I4ODg4OwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBpOTY1 X3BsYW5lX2Z1bmNzID0gewogCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRh dGVfcGxhbmUsCiAJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3Bs YW5lLApAQCAtMTY5MDAsMTQyICsxNjMyMSw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Bs YW5lX2Z1bmNzIGk4eHhfcGxhbmVfZnVuY3MgPSB7CiAJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0g aTh4eF9wbGFuZV9mb3JtYXRfbW9kX3N1cHBvcnRlZCwKIH07CiAKLXN0YXRpYyBpbnQKLWludGVs X2xlZ2FjeV9jdXJzb3JfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKLQkJCSAgIHN0 cnVjdCBkcm1fY3J0YyAqX2NydGMsCi0JCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK LQkJCSAgIGludCBjcnRjX3gsIGludCBjcnRjX3ksCi0JCQkgICB1bnNpZ25lZCBpbnQgY3J0Y193 LCB1bnNpZ25lZCBpbnQgY3J0Y19oLAotCQkJICAgdTMyIHNyY194LCB1MzIgc3JjX3ksCi0JCQkg ICB1MzIgc3JjX3csIHUzMiBzcmNfaCwKLQkJCSAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJl X2N0eCAqY3R4KQotewotCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUgPSB0b19pbnRlbF9wbGFu ZShfcGxhbmUpOwotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhfY3J0 Yyk7Ci0Jc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUgPQotCQl0b19p bnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+YmFzZS5zdGF0ZSk7Ci0Jc3RydWN0IGludGVsX3BsYW5l X3N0YXRlICpuZXdfcGxhbmVfc3RhdGU7Ci0Jc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUgPQotCQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpOwotCXN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZTsKLQlpbnQgcmV0OwotCi0JLyoKLQkg KiBXaGVuIGNydGMgaXMgaW5hY3RpdmUgb3IgdGhlcmUgaXMgYSBtb2Rlc2V0IHBlbmRpbmcsCi0J ICogd2FpdCBmb3IgaXQgdG8gY29tcGxldGUgaW4gdGhlIHNsb3dwYXRoCi0JICoKLQkgKiBGSVhN RSBiaWdqb2luZXIgZmFzdHBhdGggd291bGQgYmUgZ29vZAotCSAqLwotCWlmICghY3J0Y19zdGF0 ZS0+aHcuYWN0aXZlIHx8IGludGVsX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSB8fAot CSAgICBjcnRjX3N0YXRlLT51cGRhdGVfcGlwZSB8fCBjcnRjX3N0YXRlLT5iaWdqb2luZXIpCi0J CWdvdG8gc2xvdzsKLQotCS8qCi0JICogRG9uJ3QgZG8gYW4gYXN5bmMgdXBkYXRlIGlmIHRoZXJl IGlzIGFuIG91dHN0YW5kaW5nIGNvbW1pdCBtb2RpZnlpbmcKLQkgKiB0aGUgcGxhbmUuICBUaGlz IHByZXZlbnRzIG91ciBhc3luYyB1cGRhdGUncyBjaGFuZ2VzIGZyb20gZ2V0dGluZwotCSAqIG92 ZXJyaWRkZW4gYnkgYSBwcmV2aW91cyBzeW5jaHJvbm91cyB1cGRhdGUncyBzdGF0ZS4KLQkgKi8K LQlpZiAob2xkX3BsYW5lX3N0YXRlLT51YXBpLmNvbW1pdCAmJgotCSAgICAhdHJ5X3dhaXRfZm9y X2NvbXBsZXRpb24oJm9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jb21taXQtPmh3X2RvbmUpKQotCQln b3RvIHNsb3c7Ci0KLQkvKgotCSAqIElmIGFueSBwYXJhbWV0ZXJzIGNoYW5nZSB0aGF0IG1heSBh ZmZlY3Qgd2F0ZXJtYXJrcywKLQkgKiB0YWtlIHRoZSBzbG93cGF0aC4gT25seSBjaGFuZ2luZyBm YiBvciBwb3NpdGlvbiBzaG91bGQgYmUKLQkgKiBpbiB0aGUgZmFzdHBhdGguCi0JICovCi0JaWYg KG9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjICE9ICZjcnRjLT5iYXNlIHx8Ci0JICAgIG9sZF9w bGFuZV9zdGF0ZS0+dWFwaS5zcmNfdyAhPSBzcmNfdyB8fAotCSAgICBvbGRfcGxhbmVfc3RhdGUt PnVhcGkuc3JjX2ggIT0gc3JjX2ggfHwKLQkgICAgb2xkX3BsYW5lX3N0YXRlLT51YXBpLmNydGNf dyAhPSBjcnRjX3cgfHwKLQkgICAgb2xkX3BsYW5lX3N0YXRlLT51YXBpLmNydGNfaCAhPSBjcnRj X2ggfHwKLQkgICAgIW9sZF9wbGFuZV9zdGF0ZS0+dWFwaS5mYiAhPSAhZmIpCi0JCWdvdG8gc2xv dzsKLQotCW5ld19wbGFuZV9zdGF0ZSA9IHRvX2ludGVsX3BsYW5lX3N0YXRlKGludGVsX3BsYW5l X2R1cGxpY2F0ZV9zdGF0ZSgmcGxhbmUtPmJhc2UpKTsKLQlpZiAoIW5ld19wbGFuZV9zdGF0ZSkK LQkJcmV0dXJuIC1FTk9NRU07Ci0KLQluZXdfY3J0Y19zdGF0ZSA9IHRvX2ludGVsX2NydGNfc3Rh dGUoaW50ZWxfY3J0Y19kdXBsaWNhdGVfc3RhdGUoJmNydGMtPmJhc2UpKTsKLQlpZiAoIW5ld19j cnRjX3N0YXRlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCi0J ZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lKCZuZXdfcGxhbmVfc3RhdGUtPnVhcGksIGZiKTsK LQotCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfeCA9IHNyY194OwotCW5ld19wbGFuZV9zdGF0 ZS0+dWFwaS5zcmNfeSA9IHNyY195OwotCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfdyA9IHNy Y193OwotCW5ld19wbGFuZV9zdGF0ZS0+dWFwaS5zcmNfaCA9IHNyY19oOwotCW5ld19wbGFuZV9z dGF0ZS0+dWFwaS5jcnRjX3ggPSBjcnRjX3g7Ci0JbmV3X3BsYW5lX3N0YXRlLT51YXBpLmNydGNf eSA9IGNydGNfeTsKLQluZXdfcGxhbmVfc3RhdGUtPnVhcGkuY3J0Y193ID0gY3J0Y193OwotCW5l d19wbGFuZV9zdGF0ZS0+dWFwaS5jcnRjX2ggPSBjcnRjX2g7Ci0KLQlpbnRlbF9wbGFuZV9jb3B5 X3VhcGlfdG9faHdfc3RhdGUobmV3X3BsYW5lX3N0YXRlLCBuZXdfcGxhbmVfc3RhdGUsIGNydGMp OwotCi0JcmV0ID0gaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrX3dpdGhfc3RhdGUoY3J0Y19zdGF0 ZSwgbmV3X2NydGNfc3RhdGUsCi0JCQkJCQkgIG9sZF9wbGFuZV9zdGF0ZSwgbmV3X3BsYW5lX3N0 YXRlKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlOwotCi0JcmV0ID0gaW50ZWxfcGxhbmVf cGluX2ZiKG5ld19wbGFuZV9zdGF0ZSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZTsKLQot CWludGVsX2Zyb250YnVmZmVyX2ZsdXNoKHRvX2ludGVsX2Zyb250YnVmZmVyKG5ld19wbGFuZV9z dGF0ZS0+aHcuZmIpLAotCQkJCU9SSUdJTl9GTElQKTsKLQlpbnRlbF9mcm9udGJ1ZmZlcl90cmFj ayh0b19pbnRlbF9mcm9udGJ1ZmZlcihvbGRfcGxhbmVfc3RhdGUtPmh3LmZiKSwKLQkJCQl0b19p bnRlbF9mcm9udGJ1ZmZlcihuZXdfcGxhbmVfc3RhdGUtPmh3LmZiKSwKLQkJCQlwbGFuZS0+ZnJv bnRidWZmZXJfYml0KTsKLQotCS8qIFN3YXAgcGxhbmUgc3RhdGUgKi8KLQlwbGFuZS0+YmFzZS5z dGF0ZSA9ICZuZXdfcGxhbmVfc3RhdGUtPnVhcGk7Ci0KLQkvKgotCSAqIFdlIGNhbm5vdCBzd2Fw IGNydGNfc3RhdGUgYXMgaXQgbWF5IGJlIGluIHVzZSBieSBhbiBhdG9taWMgY29tbWl0IG9yCi0J ICogcGFnZSBmbGlwIHRoYXQncyBydW5uaW5nIHNpbXVsdGFuZW91c2x5LiBJZiB3ZSBzd2FwIGNy dGNfc3RhdGUgYW5kCi0JICogZGVzdHJveSB0aGUgb2xkIHN0YXRlLCB3ZSB3aWxsIGNhdXNlIGEg dXNlLWFmdGVyLWZyZWUgdGhlcmUuCi0JICoKLQkgKiBPbmx5IHVwZGF0ZSBhY3RpdmVfcGxhbmVz LCB3aGljaCBpcyBuZWVkZWQgZm9yIG91ciBpbnRlcm5hbAotCSAqIGJvb2trZWVwaW5nLiBFaXRo ZXIgdmFsdWUgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgd2hlbiB1cGRhdGluZwotCSAqIHBsYW5l cyBhdG9taWNhbGx5LiBJZiB0aGUgY3Vyc29yIHdhcyBwYXJ0IG9mIHRoZSBhdG9taWMgdXBkYXRl IHRoZW4KLQkgKiB3ZSB3b3VsZCBoYXZlIHRha2VuIHRoZSBzbG93cGF0aC4KLQkgKi8KLQljcnRj X3N0YXRlLT5hY3RpdmVfcGxhbmVzID0gbmV3X2NydGNfc3RhdGUtPmFjdGl2ZV9wbGFuZXM7Ci0K LQlpZiAobmV3X3BsYW5lX3N0YXRlLT51YXBpLnZpc2libGUpCi0JCWludGVsX3VwZGF0ZV9wbGFu ZShwbGFuZSwgY3J0Y19zdGF0ZSwgbmV3X3BsYW5lX3N0YXRlKTsKLQllbHNlCi0JCWludGVsX2Rp c2FibGVfcGxhbmUocGxhbmUsIGNydGNfc3RhdGUpOwotCi0JaW50ZWxfcGxhbmVfdW5waW5fZmIo b2xkX3BsYW5lX3N0YXRlKTsKLQotb3V0X2ZyZWU6Ci0JaWYgKG5ld19jcnRjX3N0YXRlKQotCQlp bnRlbF9jcnRjX2Rlc3Ryb3lfc3RhdGUoJmNydGMtPmJhc2UsICZuZXdfY3J0Y19zdGF0ZS0+dWFw aSk7Ci0JaWYgKHJldCkKLQkJaW50ZWxfcGxhbmVfZGVzdHJveV9zdGF0ZSgmcGxhbmUtPmJhc2Us ICZuZXdfcGxhbmVfc3RhdGUtPnVhcGkpOwotCWVsc2UKLQkJaW50ZWxfcGxhbmVfZGVzdHJveV9z dGF0ZSgmcGxhbmUtPmJhc2UsICZvbGRfcGxhbmVfc3RhdGUtPnVhcGkpOwotCXJldHVybiByZXQ7 Ci0KLXNsb3c6Ci0JcmV0dXJuIGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSgmcGxhbmUt PmJhc2UsICZjcnRjLT5iYXNlLCBmYiwKLQkJCQkJICAgICAgY3J0Y194LCBjcnRjX3ksIGNydGNf dywgY3J0Y19oLAotCQkJCQkgICAgICBzcmNfeCwgc3JjX3ksIHNyY193LCBzcmNfaCwgY3R4KTsK LX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaW50ZWxfY3Vyc29yX3Bs YW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUgPSBpbnRlbF9sZWdhY3lfY3Vyc29yX3VwZGF0 ZSwKLQkuZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCi0J LmRlc3Ryb3kgPSBpbnRlbF9wbGFuZV9kZXN0cm95LAotCS5hdG9taWNfZHVwbGljYXRlX3N0YXRl ID0gaW50ZWxfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAotCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9 IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCi0JLmZvcm1hdF9tb2Rfc3VwcG9ydGVkID0gaW50 ZWxfY3Vyc29yX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAotfTsKLQogc3RhdGljIGJvb2wgaTl4eF9w bGFuZV9oYXNfZmJjKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICAg ICBlbnVtIGk5eHhfcGxhbmVfaWQgaTl4eF9wbGFuZSkKIHsKQEAgLTE3MTg3LDc0ICsxNjQ3Miw2 IEBAIGludGVsX3ByaW1hcnlfcGxhbmVfY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwgZW51bSBwaXBlIHBpcGUpCiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAotc3Rh dGljIHN0cnVjdCBpbnRlbF9wbGFuZSAqCi1pbnRlbF9jdXJzb3JfcGxhbmVfY3JlYXRlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgZW51bSBwaXBlIHBpcGUpCi17Ci0J c3RydWN0IGludGVsX3BsYW5lICpjdXJzb3I7Ci0JaW50IHJldCwgenBvczsKLQotCWN1cnNvciA9 IGludGVsX3BsYW5lX2FsbG9jKCk7Ci0JaWYgKElTX0VSUihjdXJzb3IpKQotCQlyZXR1cm4gY3Vy c29yOwotCi0JY3Vyc29yLT5waXBlID0gcGlwZTsKLQljdXJzb3ItPmk5eHhfcGxhbmUgPSAoZW51 bSBpOXh4X3BsYW5lX2lkKSBwaXBlOwotCWN1cnNvci0+aWQgPSBQTEFORV9DVVJTT1I7Ci0JY3Vy c29yLT5mcm9udGJ1ZmZlcl9iaXQgPSBJTlRFTF9GUk9OVEJVRkZFUihwaXBlLCBjdXJzb3ItPmlk KTsKLQotCWlmIChJU19JODQ1RyhkZXZfcHJpdikgfHwgSVNfSTg2NUcoZGV2X3ByaXYpKSB7Ci0J CWN1cnNvci0+bWF4X3N0cmlkZSA9IGk4NDVfY3Vyc29yX21heF9zdHJpZGU7Ci0JCWN1cnNvci0+ dXBkYXRlX3BsYW5lID0gaTg0NV91cGRhdGVfY3Vyc29yOwotCQljdXJzb3ItPmRpc2FibGVfcGxh bmUgPSBpODQ1X2Rpc2FibGVfY3Vyc29yOwotCQljdXJzb3ItPmdldF9od19zdGF0ZSA9IGk4NDVf Y3Vyc29yX2dldF9od19zdGF0ZTsKLQkJY3Vyc29yLT5jaGVja19wbGFuZSA9IGk4NDVfY2hlY2tf Y3Vyc29yOwotCX0gZWxzZSB7Ci0JCWN1cnNvci0+bWF4X3N0cmlkZSA9IGk5eHhfY3Vyc29yX21h eF9zdHJpZGU7Ci0JCWN1cnNvci0+dXBkYXRlX3BsYW5lID0gaTl4eF91cGRhdGVfY3Vyc29yOwot CQljdXJzb3ItPmRpc2FibGVfcGxhbmUgPSBpOXh4X2Rpc2FibGVfY3Vyc29yOwotCQljdXJzb3It PmdldF9od19zdGF0ZSA9IGk5eHhfY3Vyc29yX2dldF9od19zdGF0ZTsKLQkJY3Vyc29yLT5jaGVj a19wbGFuZSA9IGk5eHhfY2hlY2tfY3Vyc29yOwotCX0KLQotCWN1cnNvci0+Y3Vyc29yLmJhc2Ug PSB+MDsKLQljdXJzb3ItPmN1cnNvci5jbnRsID0gfjA7Ci0KLQlpZiAoSVNfSTg0NUcoZGV2X3By aXYpIHx8IElTX0k4NjVHKGRldl9wcml2KSB8fCBIQVNfQ1VSX0ZCQyhkZXZfcHJpdikpCi0JCWN1 cnNvci0+Y3Vyc29yLnNpemUgPSB+MDsKLQotCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5p dCgmZGV2X3ByaXYtPmRybSwgJmN1cnNvci0+YmFzZSwKLQkJCQkgICAgICAgMCwgJmludGVsX2N1 cnNvcl9wbGFuZV9mdW5jcywKLQkJCQkgICAgICAgaW50ZWxfY3Vyc29yX2Zvcm1hdHMsCi0JCQkJ ICAgICAgIEFSUkFZX1NJWkUoaW50ZWxfY3Vyc29yX2Zvcm1hdHMpLAotCQkJCSAgICAgICBjdXJz b3JfZm9ybWF0X21vZGlmaWVycywKLQkJCQkgICAgICAgRFJNX1BMQU5FX1RZUEVfQ1VSU09SLAot CQkJCSAgICAgICAiY3Vyc29yICVjIiwgcGlwZV9uYW1lKHBpcGUpKTsKLQlpZiAocmV0KQotCQln b3RvIGZhaWw7Ci0KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSA0KQotCQlkcm1fcGxhbmVf Y3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KCZjdXJzb3ItPmJhc2UsCi0JCQkJCQkgICBEUk1fTU9E RV9ST1RBVEVfMCwKLQkJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wIHwKLQkJCQkJCSAgIERSTV9N T0RFX1JPVEFURV8xODApOwotCi0JenBvcyA9IFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPm51bV9z cHJpdGVzW3BpcGVdICsgMTsKLQlkcm1fcGxhbmVfY3JlYXRlX3pwb3NfaW1tdXRhYmxlX3Byb3Bl cnR5KCZjdXJzb3ItPmJhc2UsIHpwb3MpOwotCi0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTIpCi0JCWRybV9wbGFuZV9lbmFibGVfZmJfZGFtYWdlX2NsaXBzKCZjdXJzb3ItPmJhc2UpOwot Ci0JZHJtX3BsYW5lX2hlbHBlcl9hZGQoJmN1cnNvci0+YmFzZSwgJmludGVsX3BsYW5lX2hlbHBl cl9mdW5jcyk7Ci0KLQlyZXR1cm4gY3Vyc29yOwotCi1mYWlsOgotCWludGVsX3BsYW5lX2ZyZWUo Y3Vyc29yKTsKLQotCXJldHVybiBFUlJfUFRSKHJldCk7Ci19Ci0KIHN0YXRpYyBpbnQgaW50ZWxf Y3J0Y19sYXRlX3JlZ2lzdGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlpbnRlbF9jcnRj X2RlYnVnZnNfYWRkKGNydGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXkuaAppbmRleCBhNTc3MWJmZWNiYTYuLjcxN2IwZTQxNjBlOSAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgKQEAgLTY0Nyw2ICs2NDcsMTMg QEAgYm9vbAogaW50ZWxfZm9ybWF0X2luZm9faXNfeXV2X3NlbWlwbGFuYXIoY29uc3Qgc3RydWN0 IGRybV9mb3JtYXRfaW5mbyAqaW5mbywKIAkJCQkgICAgdWludDY0X3QgbW9kaWZpZXIpOwogCitp bnQgaW50ZWxfcGxhbmVfY29tcHV0ZV9ndHQoc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFu ZV9zdGF0ZSk7Cit1MzIgaW50ZWxfcGxhbmVfY29tcHV0ZV9hbGlnbmVkX29mZnNldChpbnQgKngs IGludCAqeSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0 ZSwKKwkJCQkgICAgICAgaW50IGNvbG9yX3BsYW5lKTsKK2ludCBpbnRlbF9wbGFuZV9waW5fZmIo c3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSk7Cit2b2lkIGludGVsX3BsYW5l X3VucGluX2ZiKHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlKTsKKwog LyogbW9kZXNldHRpbmcgKi8KIHZvaWQgaW50ZWxfbW9kZXNldF9pbml0X2h3KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KTsKIGludCBpbnRlbF9tb2Rlc2V0X2luaXRfbm9pcnEoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwotLSAKMi4yNy4wCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK