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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 BFED7C433E9 for ; Thu, 18 Mar 2021 16:10:39 +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 818C864E81 for ; Thu, 18 Mar 2021 16:10:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 818C864E81 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.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 237D56E90B; Thu, 18 Mar 2021 16:10:39 +0000 (UTC) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 049D86E90B for ; Thu, 18 Mar 2021 16:10:36 +0000 (UTC) IronPort-SDR: W8pHvMA/8qMsaIu/cyU5euZaAd5xvlz2E9uU8YEGH5RrEzThw/a6KqwAZ2k0xQBSdSjiL0lmA6 CJX4GJUvruiw== X-IronPort-AV: E=McAfee;i="6000,8403,9927"; a="189808085" X-IronPort-AV: E=Sophos;i="5.81,259,1610438400"; d="scan'208";a="189808085" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Mar 2021 09:10:36 -0700 IronPort-SDR: wbygrnqzotfe42iCjrKTe7E9bSWDbtI/DzWNPoS0oqCXXK8uyxueddTuWrkLV5TvFiixAPPI4Y iRbN/oNzjZog== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,259,1610438400"; d="scan'208";a="379806353" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.171]) by fmsmga007.fm.intel.com with SMTP; 18 Mar 2021 09:10:33 -0700 Received: by stinkbox (sSMTP sendmail emulation); Thu, 18 Mar 2021 18:10:32 +0200 From: Ville Syrjala To: intel-gfx@lists.freedesktop.org Date: Thu, 18 Mar 2021 18:10:13 +0200 Message-Id: <20210318161015.22070-6-ville.syrjala@linux.intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210318161015.22070-1-ville.syrjala@linux.intel.com> References: <20210318161015.22070-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 5/7] drm/i915: Introduce g4x_dp.c X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Vetter Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCk1v dmUgdGhlIGc0eCsgRFAgY29kZSBpbnRvIGEgbmV3IGZpbGUuIFRoaXMgd2lsbCBsZWF2ZSBtb3N0 bHkKcGxhdGZvcm0gYWdub3N0aWMgY29kZSBpbiBpbnRlbF9kcC5jLiBXZWxsLCB0aGUgbWlzcGxh Y2VkIHBoeQp0ZXN0IHN0dWZmIHByZXR0eSBtdWNoIHJ1aW5zIHRoYXQsIGJ1dCBsZXQncyBzcXVp bnQgcmVhbCBoYXJkCmZvciBub3cuCgp2MjogQWRkIGNvbW1lbnQgZXhsYWluaW5nIHdoaWNoIHBs YXRmb3JtcyBhcmUgY292ZXJlZCAoRGFuaWVsKQogICAgTGVhdmUgaW50ZWxfZHBfdW51c2VkX2xh bmVfbWFzaygpIGJlIHNpbmNlIGl0IGlzIHByZXR0eSBnZW5lcmljCgpBY2tlZC1ieTogRGFuaWVs IFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KU2lnbmVkLW9mZi1ieTogVmlsbGUgU3ly asOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvZGlzcGxheS9nNHhfZHAuYyAgICAgICAgfCAxNDMzICsrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9nNHhfZHAuaCAgICAgICAgfCAgIDMxICsKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIHwgICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgICAgICB8IDE0MTUgKy0tLS0tLS0t LS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaCAgICAgIHwg ICAgNiAtCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5jICAgICB8ICAg IDEgKwogNyBmaWxlcyBjaGFuZ2VkLCAxNDY4IGluc2VydGlvbnMoKyksIDE0MjAgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9nNHhf ZHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvZzR4 X2RwLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGJjNjEzODg4MGM2Ny4uZGM5OTNhYTJiZDE2 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMjQxLDYgKzI0MSw3IEBAIGk5MTUteSArPSBcCiAJ ZGlzcGxheS9kdm9fbnMyNTAxLm8gXAogCWRpc3BsYXkvZHZvX3NpbDE2NC5vIFwKIAlkaXNwbGF5 L2R2b190ZnA0MTAubyBcCisJZGlzcGxheS9nNHhfZHAubyBcCiAJZGlzcGxheS9pY2xfZHNpLm8g XAogCWRpc3BsYXkvaW50ZWxfY3J0Lm8gXAogCWRpc3BsYXkvaW50ZWxfZGRpLm8gXApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9nNHhfZHAuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvZzR4X2RwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5hMzVmMTg4NmYyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2c0eF9kcC5jCkBAIC0wLDAgKzEsMTQzMyBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IE1JVAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDIwIEludGVsIENvcnBv cmF0aW9uCisgKgorICogRGlzcGxheVBvcnQgc3VwcG9ydCBmb3IgRzR4LElMSyxTTkIsSVZCLFZM VixDSFYgKEhTVysgaGFuZGxlZCBieSB0aGUgRERJIGNvZGUpLgorICovCisKKyNpbmNsdWRlICJn NHhfZHAuaCIKKyNpbmNsdWRlICJpbnRlbF9hdWRpby5oIgorI2luY2x1ZGUgImludGVsX2Nvbm5l Y3Rvci5oIgorI2luY2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKKyNpbmNsdWRlICJpbnRl bF9kcC5oIgorI2luY2x1ZGUgImludGVsX2RwX2xpbmtfdHJhaW5pbmcuaCIKKyNpbmNsdWRlICJp bnRlbF9kcGlvX3BoeS5oIgorI2luY2x1ZGUgImludGVsX2ZpZm9fdW5kZXJydW4uaCIKKyNpbmNs dWRlICJpbnRlbF9oZG1pLmgiCisjaW5jbHVkZSAiaW50ZWxfaG90cGx1Zy5oIgorI2luY2x1ZGUg ImludGVsX3BhbmVsLmgiCisjaW5jbHVkZSAiaW50ZWxfcHBzLmgiCisjaW5jbHVkZSAiaW50ZWxf c2lkZWJhbmQuaCIKKworc3RydWN0IGRwX2xpbmtfZHBsbCB7CisJaW50IGNsb2NrOworCXN0cnVj dCBkcGxsIGRwbGw7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwX2xpbmtfZHBsbCBnNHhf ZHBsbFtdID0geworCXsgMTYyMDAwLAorCQl7IC5wMSA9IDIsIC5wMiA9IDEwLCAubiA9IDIsIC5t MSA9IDIzLCAubTIgPSA4IH0gfSwKKwl7IDI3MDAwMCwKKwkJeyAucDEgPSAxLCAucDIgPSAxMCwg Lm4gPSAxLCAubTEgPSAxNCwgLm0yID0gMiB9IH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHBfbGlua19kcGxsIHBjaF9kcGxsW10gPSB7CisJeyAxNjIwMDAsCisJCXsgLnAxID0gMiwgLnAy ID0gMTAsIC5uID0gMSwgLm0xID0gMTIsIC5tMiA9IDkgfSB9LAorCXsgMjcwMDAwLAorCQl7IC5w MSA9IDEsIC5wMiA9IDEwLCAubiA9IDIsIC5tMSA9IDE0LCAubTIgPSA4IH0gfQorfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkcF9saW5rX2RwbGwgdmx2X2RwbGxbXSA9IHsKKwl7IDE2MjAwMCwK KwkJeyAucDEgPSAzLCAucDIgPSAyLCAubiA9IDUsIC5tMSA9IDMsIC5tMiA9IDgxIH0gfSwKKwl7 IDI3MDAwMCwKKwkJeyAucDEgPSAyLCAucDIgPSAyLCAubiA9IDEsIC5tMSA9IDIsIC5tMiA9IDI3 IH0gfQorfTsKKworLyoKKyAqIENIViBzdXBwb3J0cyBlRFAgMS40IHRoYXQgaGF2ZSAgbW9yZSBs aW5rIHJhdGVzLgorICogQmVsb3cgb25seSBwcm92aWRlcyB0aGUgZml4ZWQgcmF0ZSBidXQgZXhj bHVkZSB2YXJpYWJsZSByYXRlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRwX2xpbmtfZHBs bCBjaHZfZHBsbFtdID0geworCS8qCisJICogQ0hWIHJlcXVpcmVzIHRvIHByb2dyYW0gZnJhY3Rp b25hbCBkaXZpc2lvbiBmb3IgbTIuCisJICogbTIgaXMgc3RvcmVkIGluIGZpeGVkIHBvaW50IGZv cm1hdCB1c2luZyBmb3JtdWxhIGJlbG93CisJICogKG0yX2ludCA8PCAyMikgfCBtMl9mcmFjdGlv bgorCSAqLworCXsgMTYyMDAwLAkvKiBtMl9pbnQgPSAzMiwgbTJfZnJhY3Rpb24gPSAxNjc3NzIy ICovCisJCXsgLnAxID0gNCwgLnAyID0gMiwgLm4gPSAxLCAubTEgPSAyLCAubTIgPSAweDgxOTk5 OWEgfSB9LAorCXsgMjcwMDAwLAkvKiBtMl9pbnQgPSAyNywgbTJfZnJhY3Rpb24gPSAwICovCisJ CXsgLnAxID0gNCwgLnAyID0gMSwgLm4gPSAxLCAubTEgPSAyLCAubTIgPSAweDZjMDAwMDAgfSB9 LAorfTsKKworY29uc3Qgc3RydWN0IGRwbGwgKnZsdl9nZXRfZHBsbChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSkKK3sKKwlyZXR1cm4gSVNfQ0hFUlJZVklFVyhpOTE1KSA/ICZjaHZfZHBs bFswXS5kcGxsIDogJnZsdl9kcGxsWzBdLmRwbGw7Cit9CisKK3ZvaWQgaW50ZWxfZHBfc2V0X2Ns b2NrKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJc3RydWN0IGludGVsX2NydGNf c3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOworCWNvbnN0IHN0cnVjdCBkcF9saW5rX2Rw bGwgKmRpdmlzb3IgPSBOVUxMOworCWludCBpLCBjb3VudCA9IDA7CisKKwlpZiAoSVNfRzRYKGRl dl9wcml2KSkgeworCQlkaXZpc29yID0gZzR4X2RwbGw7CisJCWNvdW50ID0gQVJSQVlfU0laRShn NHhfZHBsbCk7CisJfSBlbHNlIGlmIChIQVNfUENIX1NQTElUKGRldl9wcml2KSkgeworCQlkaXZp c29yID0gcGNoX2RwbGw7CisJCWNvdW50ID0gQVJSQVlfU0laRShwY2hfZHBsbCk7CisJfSBlbHNl IGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgeworCQlkaXZpc29yID0gY2h2X2RwbGw7CisJ CWNvdW50ID0gQVJSQVlfU0laRShjaHZfZHBsbCk7CisJfSBlbHNlIGlmIChJU19WQUxMRVlWSUVX KGRldl9wcml2KSkgeworCQlkaXZpc29yID0gdmx2X2RwbGw7CisJCWNvdW50ID0gQVJSQVlfU0la RSh2bHZfZHBsbCk7CisJfQorCisJaWYgKGRpdmlzb3IgJiYgY291bnQpIHsKKwkJZm9yIChpID0g MDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCWlmIChwaXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9PSBk aXZpc29yW2ldLmNsb2NrKSB7CisJCQkJcGlwZV9jb25maWctPmRwbGwgPSBkaXZpc29yW2ldLmRw bGw7CisJCQkJcGlwZV9jb25maWctPmNsb2NrX3NldCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9 CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2RwX3ByZXBhcmUoc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0g ZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOworCWVudW0gcG9ydCBwb3J0ID0gZW5jb2Rlci0+cG9y dDsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25maWct PnVhcGkuY3J0Yyk7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21v ZGUgPSAmcGlwZV9jb25maWctPmh3LmFkanVzdGVkX21vZGU7CisKKwlpbnRlbF9kcF9zZXRfbGlu a19wYXJhbXMoaW50ZWxfZHAsCisJCQkJIHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrLAorCQkJCSBw aXBlX2NvbmZpZy0+bGFuZV9jb3VudCk7CisKKwkvKgorCSAqIFRoZXJlIGFyZSBmb3VyIGtpbmRz IG9mIERQIHJlZ2lzdGVyczoKKwkgKiBJQlggUENICisJICogU05CIENQVQorCSAqIElWQiBDUFUK KwkgKiBDUFQgUENICisJICoKKwkgKiBJQlggUENIIGFuZCBDUFUgYXJlIHRoZSBzYW1lIGZvciBh bG1vc3QgZXZlcnl0aGluZywKKwkgKiBleGNlcHQgdGhhdCB0aGUgQ1BVIERQIFBMTCBpcyBjb25m aWd1cmVkIGluIHRoaXMKKwkgKiByZWdpc3RlcgorCSAqCisJICogQ1BUIFBDSCBpcyBxdWl0ZSBk aWZmZXJlbnQsIGhhdmluZyBtYW55IGJpdHMgbW92ZWQKKwkgKiB0byB0aGUgVFJBTlNfRFBfQ1RM IHJlZ2lzdGVyIGluc3RlYWQuIFRoYXQKKwkgKiBjb25maWd1cmF0aW9uIGhhcHBlbnMgKG9kZGx5 KSBpbiBpbGtfcGNoX2VuYWJsZQorCSAqLworCisJLyogUHJlc2VydmUgdGhlIEJJT1MtY29tcHV0 ZWQgZGV0ZWN0ZWQgYml0LiBUaGlzIGlzCisJICogc3VwcG9zZWQgdG8gYmUgcmVhZC1vbmx5Lgor CSAqLworCWludGVsX2RwLT5EUCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5v dXRwdXRfcmVnKSAmIERQX0RFVEVDVEVEOworCisJLyogSGFuZGxlIERQIGJpdHMgaW4gY29tbW9u IGJldHdlZW4gYWxsIHRocmVlIHJlZ2lzdGVyIGZvcm1hdHMgKi8KKwlpbnRlbF9kcC0+RFAgfD0g RFBfVk9MVEFHRV8wXzQgfCBEUF9QUkVfRU1QSEFTSVNfMDsKKwlpbnRlbF9kcC0+RFAgfD0gRFBf UE9SVF9XSURUSChwaXBlX2NvbmZpZy0+bGFuZV9jb3VudCk7CisKKwkvKiBTcGxpdCBvdXQgdGhl IElCWC9DUFUgdnMgQ1BUIHNldHRpbmdzICovCisKKwlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2 KSAmJiBwb3J0ID09IFBPUlRfQSkgeworCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1f TU9ERV9GTEFHX1BIU1lOQykKKwkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX0hTX0hJR0g7CisJ CWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQorCQkJaW50 ZWxfZHAtPkRQIHw9IERQX1NZTkNfVlNfSElHSDsKKwkJaW50ZWxfZHAtPkRQIHw9IERQX0xJTktf VFJBSU5fT0ZGX0NQVDsKKworCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9k cC0+ZHBjZCkpCisJCQlpbnRlbF9kcC0+RFAgfD0gRFBfRU5IQU5DRURfRlJBTUlORzsKKworCQlp bnRlbF9kcC0+RFAgfD0gRFBfUElQRV9TRUxfSVZCKGNydGMtPnBpcGUpOworCX0gZWxzZSBpZiAo SEFTX1BDSF9DUFQoZGV2X3ByaXYpICYmIHBvcnQgIT0gUE9SVF9BKSB7CisJCXUzMiB0cmFuc19k cDsKKworCQlpbnRlbF9kcC0+RFAgfD0gRFBfTElOS19UUkFJTl9PRkZfQ1BUOworCisJCXRyYW5z X2RwID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVFJBTlNfRFBfQ1RMKGNydGMtPnBpcGUpKTsK KwkJaWYgKGRybV9kcF9lbmhhbmNlZF9mcmFtZV9jYXAoaW50ZWxfZHAtPmRwY2QpKQorCQkJdHJh bnNfZHAgfD0gVFJBTlNfRFBfRU5IX0ZSQU1JTkc7CisJCWVsc2UKKwkJCXRyYW5zX2RwICY9IH5U UkFOU19EUF9FTkhfRlJBTUlORzsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIFRSQU5TX0RQ X0NUTChjcnRjLT5waXBlKSwgdHJhbnNfZHApOworCX0gZWxzZSB7CisJCWlmIChJU19HNFgoZGV2 X3ByaXYpICYmIHBpcGVfY29uZmlnLT5saW1pdGVkX2NvbG9yX3JhbmdlKQorCQkJaW50ZWxfZHAt PkRQIHw9IERQX0NPTE9SX1JBTkdFXzE2XzIzNTsKKworCQlpZiAoYWRqdXN0ZWRfbW9kZS0+Zmxh Z3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKKwkJCWludGVsX2RwLT5EUCB8PSBEUF9TWU5DX0hT X0hJR0g7CisJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5D KQorCQkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNfVlNfSElHSDsKKwkJaW50ZWxfZHAtPkRQIHw9 IERQX0xJTktfVFJBSU5fT0ZGOworCisJCWlmIChkcm1fZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGlu dGVsX2RwLT5kcGNkKSkKKwkJCWludGVsX2RwLT5EUCB8PSBEUF9FTkhBTkNFRF9GUkFNSU5HOwor CisJCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkKKwkJCWludGVsX2RwLT5EUCB8PSBEUF9Q SVBFX1NFTF9DSFYoY3J0Yy0+cGlwZSk7CisJCWVsc2UKKwkJCWludGVsX2RwLT5EUCB8PSBEUF9Q SVBFX1NFTChjcnRjLT5waXBlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF9kcF9wb3J0 KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGJvb2wgc3RhdGUpCit7CisJc3RydWN0IGludGVs X2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShkaWdfcG9ydC0+YmFzZS5i YXNlLmRldik7CisJYm9vbCBjdXJfc3RhdGUgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBpbnRl bF9kcC0+b3V0cHV0X3JlZykgJiBEUF9QT1JUX0VOOworCisJSTkxNV9TVEFURV9XQVJOKGN1cl9z dGF0ZSAhPSBzdGF0ZSwKKwkJCSJbRU5DT0RFUjolZDolc10gc3RhdGUgYXNzZXJ0aW9uIGZhaWx1 cmUgKGV4cGVjdGVkICVzLCBjdXJyZW50ICVzKVxuIiwKKwkJCWRpZ19wb3J0LT5iYXNlLmJhc2Uu YmFzZS5pZCwgZGlnX3BvcnQtPmJhc2UuYmFzZS5uYW1lLAorCQkJb25vZmYoc3RhdGUpLCBvbm9m ZihjdXJfc3RhdGUpKTsKK30KKyNkZWZpbmUgYXNzZXJ0X2RwX3BvcnRfZGlzYWJsZWQoZCkgYXNz ZXJ0X2RwX3BvcnQoKGQpLCBmYWxzZSkKKworc3RhdGljIHZvaWQgYXNzZXJ0X2VkcF9wbGwoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29sIHN0YXRlKQoreworCWJvb2wgY3Vy X3N0YXRlID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRFBfQSkgJiBEUF9QTExfRU5BQkxFOwor CisJSTkxNV9TVEFURV9XQVJOKGN1cl9zdGF0ZSAhPSBzdGF0ZSwKKwkJCSJlRFAgUExMIHN0YXRl IGFzc2VydGlvbiBmYWlsdXJlIChleHBlY3RlZCAlcywgY3VycmVudCAlcylcbiIsCisJCQlvbm9m ZihzdGF0ZSksIG9ub2ZmKGN1cl9zdGF0ZSkpOworfQorI2RlZmluZSBhc3NlcnRfZWRwX3BsbF9l bmFibGVkKGQpIGFzc2VydF9lZHBfcGxsKChkKSwgdHJ1ZSkKKyNkZWZpbmUgYXNzZXJ0X2VkcF9w bGxfZGlzYWJsZWQoZCkgYXNzZXJ0X2VkcF9wbGwoKGQpLCBmYWxzZSkKKworc3RhdGljIHZvaWQg aWxrX2VkcF9wbGxfb24oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJCSAgIGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25maWctPnVhcGkuY3J0Yyk7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisK Kwlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZfcHJpdiwgcGlwZV9jb25maWctPmNwdV90cmFuc2Nv ZGVyKTsKKwlhc3NlcnRfZHBfcG9ydF9kaXNhYmxlZChpbnRlbF9kcCk7CisJYXNzZXJ0X2VkcF9w bGxfZGlzYWJsZWQoZGV2X3ByaXYpOworCisJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJl bmFibGluZyBlRFAgUExMIGZvciBjbG9jayAlZFxuIiwKKwkJICAgIHBpcGVfY29uZmlnLT5wb3J0 X2Nsb2NrKTsKKworCWludGVsX2RwLT5EUCAmPSB+RFBfUExMX0ZSRVFfTUFTSzsKKworCWlmIChw aXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9PSAxNjIwMDApCisJCWludGVsX2RwLT5EUCB8PSBEUF9Q TExfRlJFUV8xNjJNSFo7CisJZWxzZQorCQlpbnRlbF9kcC0+RFAgfD0gRFBfUExMX0ZSRVFfMjcw TUhaOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQX0EsIGludGVsX2RwLT5EUCk7CisJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUF9BKTsKKwl1ZGVsYXkoNTAwKTsKKwor CS8qCisJICogW0RldklMS10gV29yayBhcm91bmQgcmVxdWlyZWQgd2hlbiBlbmFibGluZyBEUCBQ TEwKKwkgKiB3aGlsZSBhIHBpcGUgaXMgZW5hYmxlZCBnb2luZyB0byBGREk6CisJICogMS4gV2Fp dCBmb3IgdGhlIHN0YXJ0IG9mIHZlcnRpY2FsIGJsYW5rIG9uIHRoZSBlbmFibGVkIHBpcGUgZ29p bmcgdG8gRkRJCisJICogMi4gUHJvZ3JhbSBEUCBQTEwgZW5hYmxlCisJICovCisJaWYgKElTX0dF TihkZXZfcHJpdiwgNSkpCisJCWludGVsX3dhaXRfZm9yX3ZibGFua19pZl9hY3RpdmUoZGV2X3By aXYsICFjcnRjLT5waXBlKTsKKworCWludGVsX2RwLT5EUCB8PSBEUF9QTExfRU5BQkxFOworCisJ aW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQX0EsIGludGVsX2RwLT5EUCk7CisJaW50ZWxfZGVf cG9zdGluZ19yZWFkKGRldl9wcml2LCBEUF9BKTsKKwl1ZGVsYXkoMjAwKTsKK30KKworc3RhdGlj IHZvaWQgaWxrX2VkcF9wbGxfb2ZmKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCisJCQkgICAg Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVj dCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhvbGRfY3J0Y19zdGF0ZS0+dWFwaS5j cnRjKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMt PmJhc2UuZGV2KTsKKworCWFzc2VydF9waXBlX2Rpc2FibGVkKGRldl9wcml2LCBvbGRfY3J0Y19z dGF0ZS0+Y3B1X3RyYW5zY29kZXIpOworCWFzc2VydF9kcF9wb3J0X2Rpc2FibGVkKGludGVsX2Rw KTsKKwlhc3NlcnRfZWRwX3BsbF9lbmFibGVkKGRldl9wcml2KTsKKworCWRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLCAiZGlzYWJsaW5nIGVEUCBQTExcbiIpOworCisJaW50ZWxfZHAtPkRQICY9 IH5EUF9QTExfRU5BQkxFOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIERQX0EsIGludGVs X2RwLT5EUCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBEUF9BKTsKKwl1ZGVs YXkoMjAwKTsKK30KKworc3RhdGljIGJvb2wgY3B0X2RwX3BvcnRfc2VsZWN0ZWQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSBlbnVtIHBvcnQgcG9ydCwgZW51bSBwaXBl ICpwaXBlKQoreworCWVudW0gcGlwZSBwOworCisJZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcCkg eworCQl1MzIgdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVFJBTlNfRFBfQ1RMKHApKTsK KworCQlpZiAoKHZhbCAmIFRSQU5TX0RQX1BPUlRfU0VMX01BU0spID09IFRSQU5TX0RQX1BPUlRf U0VMKHBvcnQpKSB7CisJCQkqcGlwZSA9IHA7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwor CWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiTm8gcGlwZSBmb3IgRFAgcG9ydCAlYyBmb3Vu ZFxuIiwKKwkJICAgIHBvcnRfbmFtZShwb3J0KSk7CisKKwkvKiBtdXN0IGluaXRpYWxpemUgcGlw ZSB0byBzb21ldGhpbmcgZm9yIHRoZSBhc3NlcnRzICovCisJKnBpcGUgPSBQSVBFX0E7CisKKwly ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgaW50ZWxfZHBfcG9ydF9lbmFibGVkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCSAgIGk5MTVfcmVnX3QgZHBfcmVnLCBlbnVtIHBv cnQgcG9ydCwKKwkJCSAgIGVudW0gcGlwZSAqcGlwZSkKK3sKKwlib29sIHJldDsKKwl1MzIgdmFs OworCisJdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgZHBfcmVnKTsKKworCXJldCA9IHZh bCAmIERQX1BPUlRfRU47CisKKwkvKiBhc3NlcnRzIHdhbnQgdG8ga25vdyB0aGUgcGlwZSBldmVu IGlmIHRoZSBwb3J0IGlzIGRpc2FibGVkICovCisJaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikg JiYgcG9ydCA9PSBQT1JUX0EpCisJCSpwaXBlID0gKHZhbCAmIERQX1BJUEVfU0VMX01BU0tfSVZC KSA+PiBEUF9QSVBFX1NFTF9TSElGVF9JVkI7CisJZWxzZSBpZiAoSEFTX1BDSF9DUFQoZGV2X3By aXYpICYmIHBvcnQgIT0gUE9SVF9BKQorCQlyZXQgJj0gY3B0X2RwX3BvcnRfc2VsZWN0ZWQoZGV2 X3ByaXYsIHBvcnQsIHBpcGUpOworCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQor CQkqcGlwZSA9ICh2YWwgJiBEUF9QSVBFX1NFTF9NQVNLX0NIVikgPj4gRFBfUElQRV9TRUxfU0hJ RlRfQ0hWOworCWVsc2UKKwkJKnBpcGUgPSAodmFsICYgRFBfUElQRV9TRUxfTUFTSykgPj4gRFBf UElQRV9TRUxfU0hJRlQ7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBpbnRlbF9k cF9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICBlbnVt IHBpcGUgKnBpcGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9f aTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVu Y190b19pbnRlbF9kcChlbmNvZGVyKTsKKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKwlib29s IHJldDsKKworCXdha2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRl dl9wcml2LAorCQkJCQkJICAgICBlbmNvZGVyLT5wb3dlcl9kb21haW4pOworCWlmICghd2FrZXJl ZikKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0ID0gaW50ZWxfZHBfcG9ydF9lbmFibGVkKGRldl9w cml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywKKwkJCQkgICAgZW5jb2Rlci0+cG9ydCwgcGlwZSk7 CisKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgZW5jb2Rlci0+cG93ZXJfZG9t YWluLCB3YWtlcmVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2Rw X2dldF9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkJc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOworCXN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisJdTMyIHRtcCwgZmxhZ3Mg PSAwOworCWVudW0gcG9ydCBwb3J0ID0gZW5jb2Rlci0+cG9ydDsKKwlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25maWctPnVhcGkuY3J0Yyk7CisKKwlpZiAo ZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKQorCQlwaXBlX2NvbmZpZy0+b3V0cHV0 X3R5cGVzIHw9IEJJVChJTlRFTF9PVVRQVVRfRURQKTsKKwllbHNlCisJCXBpcGVfY29uZmlnLT5v dXRwdXRfdHlwZXMgfD0gQklUKElOVEVMX09VVFBVVF9EUCk7CisKKwl0bXAgPSBpbnRlbF9kZV9y ZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisKKwlwaXBlX2NvbmZpZy0+aGFz X2F1ZGlvID0gdG1wICYgRFBfQVVESU9fT1VUUFVUX0VOQUJMRSAmJiBwb3J0ICE9IFBPUlRfQTsK KworCWlmIChIQVNfUENIX0NQVChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpIHsKKwkJdTMy IHRyYW5zX2RwID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwKKwkJCQkJICAgICBUUkFOU19EUF9D VEwoY3J0Yy0+cGlwZSkpOworCisJCWlmICh0cmFuc19kcCAmIFRSQU5TX0RQX0hTWU5DX0FDVElW RV9ISUdIKQorCQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QSFNZTkM7CisJCWVsc2UKKwkJCWZs YWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCisJCWlmICh0cmFuc19kcCAmIFRSQU5TX0RQ X1ZTWU5DX0FDVElWRV9ISUdIKQorCQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QVlNZTkM7CisJ CWVsc2UKKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTlZTWU5DOworCX0gZWxzZSB7CisJCWlm ICh0bXAgJiBEUF9TWU5DX0hTX0hJR0gpCisJCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX1BIU1lO QzsKKwkJZWxzZQorCQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7CisKKwkJaWYgKHRt cCAmIERQX1NZTkNfVlNfSElHSCkKKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUFZTWU5DOwor CQllbHNlCisJCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwl9CisKKwlwaXBlX2Nv bmZpZy0+aHcuYWRqdXN0ZWRfbW9kZS5mbGFncyB8PSBmbGFnczsKKworCWlmIChJU19HNFgoZGV2 X3ByaXYpICYmIHRtcCAmIERQX0NPTE9SX1JBTkdFXzE2XzIzNSkKKwkJcGlwZV9jb25maWctPmxp bWl0ZWRfY29sb3JfcmFuZ2UgPSB0cnVlOworCisJcGlwZV9jb25maWctPmxhbmVfY291bnQgPQor CQkoKHRtcCAmIERQX1BPUlRfV0lEVEhfTUFTSykgPj4gRFBfUE9SVF9XSURUSF9TSElGVCkgKyAx OworCisJaW50ZWxfZHBfZ2V0X21fbihjcnRjLCBwaXBlX2NvbmZpZyk7CisKKwlpZiAocG9ydCA9 PSBQT1JUX0EpIHsKKwkJaWYgKChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEUF9BKSAmIERQX1BM TF9GUkVRX01BU0spID09IERQX1BMTF9GUkVRXzE2Mk1IWikKKwkJCXBpcGVfY29uZmlnLT5wb3J0 X2Nsb2NrID0gMTYyMDAwOworCQllbHNlCisJCQlwaXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9IDI3 MDAwMDsKKwl9CisKKwlwaXBlX2NvbmZpZy0+aHcuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrID0K KwkJaW50ZWxfZG90Y2xvY2tfY2FsY3VsYXRlKHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrLAorCQkJ CQkgJnBpcGVfY29uZmlnLT5kcF9tX24pOworCisJaWYgKGludGVsX2RwX2lzX2VkcChpbnRlbF9k cCkgJiYgZGV2X3ByaXYtPnZidC5lZHAuYnBwICYmCisJICAgIHBpcGVfY29uZmlnLT5waXBlX2Jw cCA+IGRldl9wcml2LT52YnQuZWRwLmJwcCkgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgYmlnIGZh dCB1Z2x5IGhhY2suCisJCSAqCisJCSAqIFNvbWUgbWFjaGluZXMgaW4gVUVGSSBib290IG1vZGUg cHJvdmlkZSB1cyBhIFZCVCB0aGF0IGhhcyAxOAorCQkgKiBicHAgYW5kIDEuNjIgR0h6IGxpbmsg YmFuZHdpZHRoIGZvciBlRFAsIHdoaWNoIGZvciByZWFzb25zCisJCSAqIHVua25vd24gd2UgZmFp bCB0byBsaWdodCB1cC4gWWV0IHRoZSBzYW1lIEJJT1MgYm9vdHMgdXAgd2l0aAorCQkgKiAyNCBi cHAgYW5kIDIuNyBHSHogbGluay4gVXNlIHRoZSBzYW1lIGJwcCBhcyB0aGUgQklPUyB1c2VzIGFz CisJCSAqIG1heCwgbm90IHdoYXQgaXQgdGVsbHMgdXMgdG8gdXNlLgorCQkgKgorCQkgKiBOb3Rl OiBUaGlzIHdpbGwgc3RpbGwgYmUgYnJva2VuIGlmIHRoZSBlRFAgcGFuZWwgaXMgbm90IGxpdAor CQkgKiB1cCBieSB0aGUgQklPUywgYW5kIHRodXMgd2UgY2FuJ3QgZ2V0IHRoZSBtb2RlIGF0IG1v ZHVsZQorCQkgKiBsb2FkLgorCQkgKi8KKwkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCisJ CQkgICAgInBpcGUgaGFzICVkIGJwcCBmb3IgZURQIHBhbmVsLCBvdmVycmlkaW5nIEJJT1MtcHJv dmlkZWQgbWF4ICVkIGJwcFxuIiwKKwkJCSAgICBwaXBlX2NvbmZpZy0+cGlwZV9icHAsIGRldl9w cml2LT52YnQuZWRwLmJwcCk7CisJCWRldl9wcml2LT52YnQuZWRwLmJwcCA9IHBpcGVfY29uZmln LT5waXBlX2JwcDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpbnRlbF9kcF9saW5rX2Rvd24oc3Ry dWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRj X3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOworCXN0cnVjdCBpbnRlbF9jcnRjICpj cnRjID0gdG9faW50ZWxfY3J0YyhvbGRfY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKTsKKwllbnVtIHBv cnQgcG9ydCA9IGVuY29kZXItPnBvcnQ7CisJdTMyIERQID0gaW50ZWxfZHAtPkRQOworCisJaWYg KGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLAorCQkJKGludGVsX2RlX3JlYWQoZGV2X3ByaXYs IGludGVsX2RwLT5vdXRwdXRfcmVnKSAmCisJCQkgRFBfUE9SVF9FTikgPT0gMCkpCisJCXJldHVy bjsKKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiXG4iKTsKKworCWlmICgoSVNfSVZZ QlJJREdFKGRldl9wcml2KSAmJiBwb3J0ID09IFBPUlRfQSkgfHwKKwkgICAgKEhBU19QQ0hfQ1BU KGRldl9wcml2KSAmJiBwb3J0ICE9IFBPUlRfQSkpIHsKKwkJRFAgJj0gfkRQX0xJTktfVFJBSU5f TUFTS19DUFQ7CisJCURQIHw9IERQX0xJTktfVFJBSU5fUEFUX0lETEVfQ1BUOworCX0gZWxzZSB7 CisJCURQICY9IH5EUF9MSU5LX1RSQUlOX01BU0s7CisJCURQIHw9IERQX0xJTktfVFJBSU5fUEFU X0lETEU7CisJfQorCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3Jl ZywgRFApOworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1 dF9yZWcpOworCisJRFAgJj0gfihEUF9QT1JUX0VOIHwgRFBfQVVESU9fT1VUUFVUX0VOQUJMRSk7 CisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBEUCk7CisJ aW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisK KwkvKgorCSAqIEhXIHdvcmthcm91bmQgZm9yIElCWCwgd2UgbmVlZCB0byBtb3ZlIHRoZSBwb3J0 CisJICogdG8gdHJhbnNjb2RlciBBIGFmdGVyIGRpc2FibGluZyBpdCB0byBhbGxvdyB0aGUKKwkg KiBtYXRjaGluZyBIRE1JIHBvcnQgdG8gYmUgZW5hYmxlZCBvbiB0cmFuc2NvZGVyIEEuCisJICov CisJaWYgKEhBU19QQ0hfSUJYKGRldl9wcml2KSAmJiBjcnRjLT5waXBlID09IFBJUEVfQiAmJiBw b3J0ICE9IFBPUlRfQSkgeworCQkvKgorCQkgKiBXZSBnZXQgQ1BVL1BDSCBGSUZPIHVuZGVycnVu cyBvbiB0aGUgb3RoZXIgcGlwZSB3aGVuCisJCSAqIGRvaW5nIHRoZSB3b3JrYXJvdW5kLiBTd2Vl cCB0aGVtIHVuZGVyIHRoZSBydWcuCisJCSAqLworCQlpbnRlbF9zZXRfY3B1X2ZpZm9fdW5kZXJy dW5fcmVwb3J0aW5nKGRldl9wcml2LCBQSVBFX0EsIGZhbHNlKTsKKwkJaW50ZWxfc2V0X3BjaF9m aWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgUElQRV9BLCBmYWxzZSk7CisKKwkJLyog YWx3YXlzIGVuYWJsZSB3aXRoIHBhdHRlcm4gMSAoYXMgcGVyIHNwZWMpICovCisJCURQICY9IH4o RFBfUElQRV9TRUxfTUFTSyB8IERQX0xJTktfVFJBSU5fTUFTSyk7CisJCURQIHw9IERQX1BPUlRf RU4gfCBEUF9QSVBFX1NFTChQSVBFX0EpIHwKKwkJCURQX0xJTktfVFJBSU5fUEFUXzE7CisJCWlu dGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgRFApOworCQlpbnRl bF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKKworCQlE UCAmPSB+RFBfUE9SVF9FTjsKKwkJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGludGVsX2RwLT5v dXRwdXRfcmVnLCBEUCk7CisJCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgaW50ZWxf ZHAtPm91dHB1dF9yZWcpOworCisJCWludGVsX3dhaXRfZm9yX3ZibGFua19pZl9hY3RpdmUoZGV2 X3ByaXYsIFBJUEVfQSk7CisJCWludGVsX3NldF9jcHVfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmco ZGV2X3ByaXYsIFBJUEVfQSwgdHJ1ZSk7CisJCWludGVsX3NldF9wY2hfZmlmb191bmRlcnJ1bl9y ZXBvcnRpbmcoZGV2X3ByaXYsIFBJUEVfQSwgdHJ1ZSk7CisJfQorCisJbXNsZWVwKGludGVsX2Rw LT5wcHMucGFuZWxfcG93ZXJfZG93bl9kZWxheSk7CisKKwlpbnRlbF9kcC0+RFAgPSBEUDsKKwor CWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkg eworCQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKworCQl3aXRoX2ludGVsX3Bwc19sb2NrKGlu dGVsX2RwLCB3YWtlcmVmKQorCQkJaW50ZWxfZHAtPnBwcy5hY3RpdmVfcGlwZSA9IElOVkFMSURf UElQRTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2Rpc2FibGVfZHAoc3RydWN0IGludGVs X2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgICAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3Rh dGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9z dGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVu Y29kZXIpOworCisJaW50ZWxfZHAtPmxpbmtfdHJhaW5lZCA9IGZhbHNlOworCisJaWYgKG9sZF9j cnRjX3N0YXRlLT5oYXNfYXVkaW8pCisJCWludGVsX2F1ZGlvX2NvZGVjX2Rpc2FibGUoZW5jb2Rl ciwKKwkJCQkJICBvbGRfY3J0Y19zdGF0ZSwgb2xkX2Nvbm5fc3RhdGUpOworCisJLyoKKwkgKiBN YWtlIHN1cmUgdGhlIHBhbmVsIGlzIG9mZiBiZWZvcmUgdHJ5aW5nIHRvIGNoYW5nZSB0aGUgbW9k ZS4KKwkgKiBCdXQgYWxzbyBlbnN1cmUgdGhhdCB3ZSBoYXZlIHZkZCB3aGlsZSB3ZSBzd2l0Y2gg b2ZmIHRoZSBwYW5lbC4KKwkgKi8KKwlpbnRlbF9wcHNfdmRkX29uKGludGVsX2RwKTsKKwlpbnRl bF9lZHBfYmFja2xpZ2h0X29mZihvbGRfY29ubl9zdGF0ZSk7CisJaW50ZWxfZHBfc2V0X3Bvd2Vy KGludGVsX2RwLCBEUF9TRVRfUE9XRVJfRDMpOworCWludGVsX3Bwc19vZmYoaW50ZWxfZHApOwor fQorCitzdGF0aWMgdm9pZCBnNHhfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRl ICpzdGF0ZSwKKwkJCSAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLAorCQkJICAgY29uc3Qg c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQoreworCWludGVsX2Rp c2FibGVfZHAoc3RhdGUsIGVuY29kZXIsIG9sZF9jcnRjX3N0YXRlLCBvbGRfY29ubl9zdGF0ZSk7 Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9kaXNhYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3Rh dGUgKnN0YXRlLAorCQkJICAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkgICBj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCisJCQkgICBjb25z dCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUpCit7CisJaW50ZWxf ZGlzYWJsZV9kcChzdGF0ZSwgZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUsIG9sZF9jb25uX3N0YXRl KTsKK30KKworc3RhdGljIHZvaWQgZzR4X3Bvc3RfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRv bWljX3N0YXRlICpzdGF0ZSwKKwkJCQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKKwkJ CQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCisJCQkJY29u c3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQoreworCXN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7CisJZW51bSBw b3J0IHBvcnQgPSBlbmNvZGVyLT5wb3J0OworCisJLyoKKwkgKiBCc3BlYyBkb2VzIG5vdCBsaXN0 IGEgc3BlY2lmaWMgZGlzYWJsZSBzZXF1ZW5jZSBmb3IgZzR4IERQLgorCSAqIEZvbGxvdyB0aGUg aWxrKyBzZXF1ZW5jZSAoZGlzYWJsZSBwaXBlIGJlZm9yZSB0aGUgcG9ydCkgZm9yCisJICogZzR4 IERQIGFzIGl0IGRvZXMgbm90IHN1ZmZlciBmcm9tIHVuZGVycnVucyBsaWtlIHRoZSBub3JtYWwK KwkgKiBnNHggbW9kZXNldCBzZXF1ZW5jZSAoZGlzYWJsZSBwaXBlIGFmdGVyIHRoZSBwb3J0KS4K KwkgKi8KKwlpbnRlbF9kcF9saW5rX2Rvd24oZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUpOworCisJ LyogT25seSBpbGsrIGhhcyBwb3J0IEEgKi8KKwlpZiAocG9ydCA9PSBQT1JUX0EpCisJCWlsa19l ZHBfcGxsX29mZihpbnRlbF9kcCwgb2xkX2NydGNfc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCB2 bHZfcG9zdF9kaXNhYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJ CXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwKKwkJCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUpCit7CisJaW50ZWxfZHBfbGlua19kb3duKGVuY29kZXIs IG9sZF9jcnRjX3N0YXRlKTsKK30KKworc3RhdGljIHZvaWQgY2h2X3Bvc3RfZGlzYWJsZV9kcChz dHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQlzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqZW5jb2RlciwKKwkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNf c3RhdGUsCisJCQkJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0 YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5j b2Rlci0+YmFzZS5kZXYpOworCisJaW50ZWxfZHBfbGlua19kb3duKGVuY29kZXIsIG9sZF9jcnRj X3N0YXRlKTsKKworCXZsdl9kcGlvX2dldChkZXZfcHJpdik7CisKKwkvKiBBc3NlcnQgZGF0YSBs YW5lIHJlc2V0ICovCisJY2h2X2RhdGFfbGFuZV9zb2Z0X3Jlc2V0KGVuY29kZXIsIG9sZF9jcnRj X3N0YXRlLCB0cnVlKTsKKworCXZsdl9kcGlvX3B1dChkZXZfcHJpdik7Cit9CisKK3N0YXRpYyB2 b2lkCitjcHRfc2V0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJICAg Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCSAgIHU4IGRwX3Ry YWluX3BhdCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19p OTE1KGludGVsX2RwKTsKKwl1MzIgKkRQID0gJmludGVsX2RwLT5EUDsKKworCSpEUCAmPSB+RFBf TElOS19UUkFJTl9NQVNLX0NQVDsKKworCXN3aXRjaCAoaW50ZWxfZHBfdHJhaW5pbmdfcGF0dGVy bl9zeW1ib2woZHBfdHJhaW5fcGF0KSkgeworCWNhc2UgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNB QkxFOgorCQkqRFAgfD0gRFBfTElOS19UUkFJTl9PRkZfQ1BUOworCQlicmVhazsKKwljYXNlIERQ X1RSQUlOSU5HX1BBVFRFUk5fMToKKwkJKkRQIHw9IERQX0xJTktfVFJBSU5fUEFUXzFfQ1BUOwor CQlicmVhazsKKwljYXNlIERQX1RSQUlOSU5HX1BBVFRFUk5fMjoKKwkJKkRQIHw9IERQX0xJTktf VFJBSU5fUEFUXzJfQ1BUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UoaW50 ZWxfZHBfdHJhaW5pbmdfcGF0dGVybl9zeW1ib2woZHBfdHJhaW5fcGF0KSk7CisJCXJldHVybjsK Kwl9CisKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIGlu dGVsX2RwLT5EUCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+ b3V0cHV0X3JlZyk7Cit9CisKK3N0YXRpYyB2b2lkCitnNHhfc2V0X2xpbmtfdHJhaW4oc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCwKKwkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNydGNfc3RhdGUsCisJCSAgIHU4IGRwX3RyYWluX3BhdCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsKKwl1MzIgKkRQID0gJmlu dGVsX2RwLT5EUDsKKworCSpEUCAmPSB+RFBfTElOS19UUkFJTl9NQVNLOworCisJc3dpdGNoIChp bnRlbF9kcF90cmFpbmluZ19wYXR0ZXJuX3N5bWJvbChkcF90cmFpbl9wYXQpKSB7CisJY2FzZSBE UF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEU6CisJCSpEUCB8PSBEUF9MSU5LX1RSQUlOX09GRjsK KwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTklOR19QQVRURVJOXzE6CisJCSpEUCB8PSBEUF9MSU5L X1RSQUlOX1BBVF8xOworCQlicmVhazsKKwljYXNlIERQX1RSQUlOSU5HX1BBVFRFUk5fMjoKKwkJ KkRQIHw9IERQX0xJTktfVFJBSU5fUEFUXzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJ TkdfQ0FTRShpbnRlbF9kcF90cmFpbmluZ19wYXR0ZXJuX3N5bWJvbChkcF90cmFpbl9wYXQpKTsK KwkJcmV0dXJuOworCX0KKworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0 cHV0X3JlZywgaW50ZWxfZHAtPkRQKTsKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYs IGludGVsX2RwLT5vdXRwdXRfcmVnKTsKK30KKworc3RhdGljIHZvaWQgaW50ZWxfZHBfZW5hYmxl X3BvcnQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJCQkgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7CisKKwkvKiBlbmFibGUgd2l0aCBwYXR0ZXJu IDEgKGFzIHBlciBzcGVjKSAqLworCisJaW50ZWxfZHBfcHJvZ3JhbV9saW5rX3RyYWluaW5nX3Bh dHRlcm4oaW50ZWxfZHAsIGNydGNfc3RhdGUsCisJCQkJCSAgICAgICBEUF9UUkFJTklOR19QQVRU RVJOXzEpOworCisJLyoKKwkgKiBNYWdpYyBmb3IgVkxWL0NIVi4gV2UgX211c3RfIGZpcnN0IHNl dCB1cCB0aGUgcmVnaXN0ZXIKKwkgKiB3aXRob3V0IGFjdHVhbGx5IGVuYWJsaW5nIHRoZSBwb3J0 LCBhbmQgdGhlbiBkbyBhbm90aGVyCisJICogd3JpdGUgdG8gZW5hYmxlIHRoZSBwb3J0LiBPdGhl cndpc2UgbGluayB0cmFpbmluZyB3aWxsCisJICogZmFpbCB3aGVuIHRoZSBwb3dlciBzZXF1ZW5j ZXIgaXMgZnJlc2hseSB1c2VkIGZvciB0aGlzIHBvcnQuCisJICovCisJaW50ZWxfZHAtPkRQIHw9 IERQX1BPUlRfRU47CisJaWYgKGNydGNfc3RhdGUtPmhhc19hdWRpbykKKwkJaW50ZWxfZHAtPkRQ IHw9IERQX0FVRElPX09VVFBVVF9FTkFCTEU7CisKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwg aW50ZWxfZHAtPm91dHB1dF9yZWcsIGludGVsX2RwLT5EUCk7CisJaW50ZWxfZGVfcG9zdGluZ19y ZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGlu dGVsX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICBz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCisJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisJc3RydWN0IGludGVsX2RwICppbnRl bF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25maWctPnVhcGkuY3J0Yyk7CisJdTMyIGRwX3JlZyA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKKwllbnVtIHBp cGUgcGlwZSA9IGNydGMtPnBpcGU7CisJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7CisKKwlpZiAo ZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGRwX3JlZyAmIERQX1BPUlRfRU4pKQorCQlyZXR1 cm47CisKKwl3aXRoX2ludGVsX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKSB7CisJCWlmIChJ U19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkKKwkJCXZs dl9wcHNfaW5pdChlbmNvZGVyLCBwaXBlX2NvbmZpZyk7CisKKwkJaW50ZWxfZHBfZW5hYmxlX3Bv cnQoaW50ZWxfZHAsIHBpcGVfY29uZmlnKTsKKworCQlpbnRlbF9wcHNfdmRkX29uX3VubG9ja2Vk KGludGVsX2RwKTsKKwkJaW50ZWxfcHBzX29uX3VubG9ja2VkKGludGVsX2RwKTsKKwkJaW50ZWxf cHBzX3ZkZF9vZmZfdW5sb2NrZWQoaW50ZWxfZHAsIHRydWUpOworCX0KKworCWlmIChJU19WQUxM RVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgeworCQl1bnNpZ25l ZCBpbnQgbGFuZV9tYXNrID0gMHgwOworCisJCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkK KwkJCWxhbmVfbWFzayA9IGludGVsX2RwX3VudXNlZF9sYW5lX21hc2socGlwZV9jb25maWctPmxh bmVfY291bnQpOworCisJCXZsdl93YWl0X3BvcnRfcmVhZHkoZGV2X3ByaXYsIGRwX3RvX2RpZ19w b3J0KGludGVsX2RwKSwKKwkJCQkgICAgbGFuZV9tYXNrKTsKKwl9CisKKwlpbnRlbF9kcF9zZXRf cG93ZXIoaW50ZWxfZHAsIERQX1NFVF9QT1dFUl9EMCk7CisJaW50ZWxfZHBfY29uZmlndXJlX3By b3RvY29sX2NvbnZlcnRlcihpbnRlbF9kcCwgcGlwZV9jb25maWcpOworCWludGVsX2RwX2NoZWNr X2ZybF90cmFpbmluZyhpbnRlbF9kcCk7CisJaW50ZWxfZHBfcGNvbl9kc2NfY29uZmlndXJlKGlu dGVsX2RwLCBwaXBlX2NvbmZpZyk7CisJaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9k cCwgcGlwZV9jb25maWcpOworCWludGVsX2RwX3N0b3BfbGlua190cmFpbihpbnRlbF9kcCwgcGlw ZV9jb25maWcpOworCisJaWYgKHBpcGVfY29uZmlnLT5oYXNfYXVkaW8pIHsKKwkJZHJtX2RiZygm ZGV2X3ByaXYtPmRybSwgIkVuYWJsaW5nIERQIGF1ZGlvIG9uIHBpcGUgJWNcbiIsCisJCQlwaXBl X25hbWUocGlwZSkpOworCQlpbnRlbF9hdWRpb19jb2RlY19lbmFibGUoZW5jb2RlciwgcGlwZV9j b25maWcsIGNvbm5fc3RhdGUpOworCX0KK30KKworc3RhdGljIHZvaWQgZzR4X2VuYWJsZV9kcChz dHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIsCisJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2Nv bmZpZywKKwkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUp Cit7CisJaW50ZWxfZW5hYmxlX2RwKHN0YXRlLCBlbmNvZGVyLCBwaXBlX2NvbmZpZywgY29ubl9z dGF0ZSk7CisJaW50ZWxfZWRwX2JhY2tsaWdodF9vbihwaXBlX2NvbmZpZywgY29ubl9zdGF0ZSk7 Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9lbmFibGVfZHAoc3RydWN0IGludGVsX2F0b21pY19zdGF0 ZSAqc3RhdGUsCisJCQkgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCisJCQkgIGNvbnN0IHN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQoreworCWludGVsX2VkcF9iYWNrbGln aHRfb24ocGlwZV9jb25maWcsIGNvbm5fc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBnNHhfcHJl X2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9 IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKKwllbnVtIHBvcnQgcG9ydCA9IGVuY29kZXItPnBv cnQ7CisKKwlpbnRlbF9kcF9wcmVwYXJlKGVuY29kZXIsIHBpcGVfY29uZmlnKTsKKworCS8qIE9u bHkgaWxrKyBoYXMgcG9ydCBBICovCisJaWYgKHBvcnQgPT0gUE9SVF9BKQorCQlpbGtfZWRwX3Bs bF9vbihpbnRlbF9kcCwgcGlwZV9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCB2bHZfcHJlX2Vu YWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIHN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKnBpcGVfY29uZmlnLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJdmx2X3BoeV9wcmVfZW5jb2Rlcl9lbmFibGUoZW5j b2RlciwgcGlwZV9jb25maWcpOworCisJaW50ZWxfZW5hYmxlX2RwKHN0YXRlLCBlbmNvZGVyLCBw aXBlX2NvbmZpZywgY29ubl9zdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHZsdl9kcF9wcmVfcGxs X2VuYWJsZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkgIHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKnBpcGVfY29uZmlnLAorCQkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg KmNvbm5fc3RhdGUpCit7CisJaW50ZWxfZHBfcHJlcGFyZShlbmNvZGVyLCBwaXBlX2NvbmZpZyk7 CisKKwl2bHZfcGh5X3ByZV9wbGxfZW5hYmxlKGVuY29kZXIsIHBpcGVfY29uZmlnKTsKK30KKwor c3RhdGljIHZvaWQgY2h2X3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAq c3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywKKwkJCSAgICAgIGNv bnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQoreworCWNodl9waHlf cHJlX2VuY29kZXJfZW5hYmxlKGVuY29kZXIsIHBpcGVfY29uZmlnKTsKKworCWludGVsX2VuYWJs ZV9kcChzdGF0ZSwgZW5jb2RlciwgcGlwZV9jb25maWcsIGNvbm5fc3RhdGUpOworCisJLyogU2Vj b25kIGNvbW1vbiBsYW5lIHdpbGwgc3RheSBhbGl2ZSBvbiBpdHMgb3duIG5vdyAqLworCWNodl9w aHlfcmVsZWFzZV9jbDJfb3ZlcnJpZGUoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIGNodl9k cF9wcmVfcGxsX2VuYWJsZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkg IHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAorCQkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJaW50ZWxfZHBfcHJlcGFyZShlbmNvZGVyLCBwaXBl X2NvbmZpZyk7CisKKwljaHZfcGh5X3ByZV9wbGxfZW5hYmxlKGVuY29kZXIsIHBpcGVfY29uZmln KTsKK30KKworc3RhdGljIHZvaWQgY2h2X2RwX3Bvc3RfcGxsX2Rpc2FibGUoc3RydWN0IGludGVs X2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJICAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3Rh dGUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9z dGF0ZSkKK3sKKwljaHZfcGh5X3Bvc3RfcGxsX2Rpc2FibGUoZW5jb2Rlciwgb2xkX2NydGNfc3Rh dGUpOworfQorCitzdGF0aWMgdTggaW50ZWxfZHBfdm9sdGFnZV9tYXhfMihzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwLAorCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZSkKK3sKKwlyZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOworfQorCitz dGF0aWMgdTggaW50ZWxfZHBfdm9sdGFnZV9tYXhfMyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw LAorCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwly ZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8zOworfQorCitzdGF0aWMgdTggaW50 ZWxfZHBfcHJlZW1waF9tYXhfMihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXJldHVy biBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOworfQorCitzdGF0aWMgdTggaW50ZWxfZHBfcHJl ZW1waF9tYXhfMyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXJldHVybiBEUF9UUkFJ Tl9QUkVfRU1QSF9MRVZFTF8zOworfQorCitzdGF0aWMgdm9pZCB2bHZfc2V0X3NpZ25hbF9sZXZl bHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy ID0gJmRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGRlbXBo X3JlZ192YWx1ZSwgcHJlZW1waF9yZWdfdmFsdWUsCisJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVl OworCXU4IHRyYWluX3NldCA9IGludGVsX2RwLT50cmFpbl9zZXRbMF07CisKKwlzd2l0Y2ggKHRy YWluX3NldCAmIERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSB7CisJY2FzZSBEUF9UUkFJTl9Q UkVfRU1QSF9MRVZFTF8wOgorCQlwcmVlbXBoX3JlZ192YWx1ZSA9IDB4MDAwNDAwMDsKKwkJc3dp dGNoICh0cmFpbl9zZXQgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKKwkJY2FzZSBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6CisJCQlkZW1waF9yZWdfdmFsdWUgPSAweDJC NDA1NTU1OworCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1MkFCODNBOworCQkJYnJl YWs7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgorCQkJZGVtcGhfcmVn X3ZhbHVlID0gMHgyQjQwNDA0MDsKKwkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlID0gMHg1NTQ4 QjgzQTsKKwkJCWJyZWFrOworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjoK KwkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MkIyNDU1NTU7CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192 YWx1ZSA9IDB4NTU2MEI4M0E7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NX SU5HX0xFVkVMXzM6CisJCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCNDA1NTU1OworCQkJdW5pcXRy YW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1OThEQTNBOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ CQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8x OgorCQlwcmVlbXBoX3JlZ192YWx1ZSA9IDB4MDAwMjAwMDsKKwkJc3dpdGNoICh0cmFpbl9zZXQg JiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzA6CisJCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCNDA0MDQwOworCQkJdW5p cXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1NTJCODNBOworCQkJYnJlYWs7CisJCWNhc2UgRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgorCQkJZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjQw NDg0ODsKKwkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlID0gMHg1NTgwQjgzQTsKKwkJCWJyZWFr OworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjoKKwkJCWRlbXBoX3JlZ192 YWx1ZSA9IDB4MkI0MDQwNDA7CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTVBRERB M0E7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwlj YXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzI6CisJCXByZWVtcGhfcmVnX3ZhbHVlID0gMHgw MDAwMDAwOworCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFT SykgeworCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKKwkJCWRlbXBoX3Jl Z192YWx1ZSA9IDB4MkIzMDU1NTU7CisJCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9IDB4NTU3 MEI4M0E7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6 CisJCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCMkI0MDQwOworCQkJdW5pcXRyYW5zY2FsZV9yZWdf dmFsdWUgPSAweDU1QUREQTNBOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm47CisJ CX0KKwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zOgorCQlwcmVlbXBo X3JlZ192YWx1ZSA9IDB4MDAwNjAwMDsKKwkJc3dpdGNoICh0cmFpbl9zZXQgJiBEUF9UUkFJTl9W T0xUQUdFX1NXSU5HX01BU0spIHsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVM XzA6CisJCQlkZW1waF9yZWdfdmFsdWUgPSAweDFCNDA1NTU1OworCQkJdW5pcXRyYW5zY2FsZV9y ZWdfdmFsdWUgPSAweDU1QUREQTNBOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm47 CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXZsdl9zZXRfcGh5 X3NpZ25hbF9sZXZlbChlbmNvZGVyLCBjcnRjX3N0YXRlLAorCQkJCSBkZW1waF9yZWdfdmFsdWUs IHByZWVtcGhfcmVnX3ZhbHVlLAorCQkJCSB1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSwgMCk7Cit9 CisKK3N0YXRpYyB2b2lkIGNodl9zZXRfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwLAorCQkJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUp Cit7CisJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIgPSAmZHBfdG9fZGlnX3BvcnQoaW50 ZWxfZHApLT5iYXNlOworCXUzMiBkZWVtcGhfcmVnX3ZhbHVlLCBtYXJnaW5fcmVnX3ZhbHVlOwor CWJvb2wgdW5pcV90cmFuc19zY2FsZSA9IGZhbHNlOworCXU4IHRyYWluX3NldCA9IGludGVsX2Rw LT50cmFpbl9zZXRbMF07CisKKwlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1BSRV9FTVBI QVNJU19NQVNLKSB7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgorCQlzd2l0Y2gg KHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgeworCQljYXNlIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKKwkJCWRlZW1waF9yZWdfdmFsdWUgPSAxMjg7CisJ CQltYXJnaW5fcmVnX3ZhbHVlID0gNTI7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xU QUdFX1NXSU5HX0xFVkVMXzE6CisJCQlkZWVtcGhfcmVnX3ZhbHVlID0gMTI4OworCQkJbWFyZ2lu X3JlZ192YWx1ZSA9IDc3OworCQkJYnJlYWs7CisJCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8yOgorCQkJZGVlbXBoX3JlZ192YWx1ZSA9IDEyODsKKwkJCW1hcmdpbl9yZWdfdmFs dWUgPSAxMDI7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVM XzM6CisJCQlkZWVtcGhfcmVnX3ZhbHVlID0gMTI4OworCQkJbWFyZ2luX3JlZ192YWx1ZSA9IDE1 NDsKKwkJCXVuaXFfdHJhbnNfc2NhbGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ CQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8x OgorCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewor CQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKKwkJCWRlZW1waF9yZWdfdmFs dWUgPSA4NTsKKwkJCW1hcmdpbl9yZWdfdmFsdWUgPSA3ODsKKwkJCWJyZWFrOworCQljYXNlIERQ X1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKKwkJCWRlZW1waF9yZWdfdmFsdWUgPSA4NTsK KwkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxMTY7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9W T0xUQUdFX1NXSU5HX0xFVkVMXzI6CisJCQlkZWVtcGhfcmVnX3ZhbHVlID0gODU7CisJCQltYXJn aW5fcmVnX3ZhbHVlID0gMTU0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm47CisJ CX0KKwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOgorCQlzd2l0Y2gg KHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgeworCQljYXNlIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKKwkJCWRlZW1waF9yZWdfdmFsdWUgPSA2NDsKKwkJ CW1hcmdpbl9yZWdfdmFsdWUgPSAxMDQ7CisJCQlicmVhazsKKwkJY2FzZSBEUF9UUkFJTl9WT0xU QUdFX1NXSU5HX0xFVkVMXzE6CisJCQlkZWVtcGhfcmVnX3ZhbHVlID0gNjQ7CisJCQltYXJnaW5f cmVnX3ZhbHVlID0gMTU0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm47CisJCX0K KwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zOgorCQlzd2l0Y2ggKHRy YWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgeworCQljYXNlIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKKwkJCWRlZW1waF9yZWdfdmFsdWUgPSA0MzsKKwkJCW1h cmdpbl9yZWdfdmFsdWUgPSAxNTQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybjsK KwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJY2h2X3NldF9waHlf c2lnbmFsX2xldmVsKGVuY29kZXIsIGNydGNfc3RhdGUsCisJCQkJIGRlZW1waF9yZWdfdmFsdWUs IG1hcmdpbl9yZWdfdmFsdWUsCisJCQkJIHVuaXFfdHJhbnNfc2NhbGUpOworfQorCitzdGF0aWMg dTMyIGc0eF9zaWduYWxfbGV2ZWxzKHU4IHRyYWluX3NldCkKK3sKKwl1MzIgc2lnbmFsX2xldmVs cyA9IDA7CisKKwlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFT SykgeworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgorCWRlZmF1bHQ6CisJ CXNpZ25hbF9sZXZlbHMgfD0gRFBfVk9MVEFHRV8wXzQ7CisJCWJyZWFrOworCWNhc2UgRFBfVFJB SU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgorCQlzaWduYWxfbGV2ZWxzIHw9IERQX1ZPTFRBR0Vf MF82OworCQlicmVhazsKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjoKKwkJ c2lnbmFsX2xldmVscyB8PSBEUF9WT0xUQUdFXzBfODsKKwkJYnJlYWs7CisJY2FzZSBEUF9UUkFJ Tl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6CisJCXNpZ25hbF9sZXZlbHMgfD0gRFBfVk9MVEFHRV8x XzI7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1BSRV9FTVBI QVNJU19NQVNLKSB7CisJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgorCWRlZmF1bHQ6 CisJCXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhBU0lTXzA7CisJCWJyZWFrOworCWNhc2Ug RFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMToKKwkJc2lnbmFsX2xldmVscyB8PSBEUF9QUkVfRU1Q SEFTSVNfM181OworCQlicmVhazsKKwljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzI6CisJ CXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhBU0lTXzY7CisJCWJyZWFrOworCWNhc2UgRFBf VFJBSU5fUFJFX0VNUEhfTEVWRUxfMzoKKwkJc2lnbmFsX2xldmVscyB8PSBEUF9QUkVfRU1QSEFT SVNfOV81OworCQlicmVhazsKKwl9CisJcmV0dXJuIHNpZ25hbF9sZXZlbHM7Cit9CisKK3N0YXRp YyB2b2lkCitnNHhfc2V0X3NpZ25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwK KwkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7CisJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7 CisJdTggdHJhaW5fc2V0ID0gaW50ZWxfZHAtPnRyYWluX3NldFswXTsKKwl1MzIgc2lnbmFsX2xl dmVsczsKKworCXNpZ25hbF9sZXZlbHMgPSBnNHhfc2lnbmFsX2xldmVscyh0cmFpbl9zZXQpOwor CisJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJVc2luZyBzaWduYWwgbGV2ZWxzICUwOHhc biIsCisJCSAgICBzaWduYWxfbGV2ZWxzKTsKKworCWludGVsX2RwLT5EUCAmPSB+KERQX1ZPTFRB R0VfTUFTSyB8IERQX1BSRV9FTVBIQVNJU19NQVNLKTsKKwlpbnRlbF9kcC0+RFAgfD0gc2lnbmFs X2xldmVsczsKKworCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3Jl ZywgaW50ZWxfZHAtPkRQKTsKKwlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVs X2RwLT5vdXRwdXRfcmVnKTsKK30KKworLyogU05CIENQVSBlRFAgdm9sdGFnZSBzd2luZyBhbmQg cHJlLWVtcGhhc2lzIGNvbnRyb2wgKi8KK3N0YXRpYyB1MzIgc25iX2NwdV9lZHBfc2lnbmFsX2xl dmVscyh1OCB0cmFpbl9zZXQpCit7CisJdTggc2lnbmFsX2xldmVscyA9IHRyYWluX3NldCAmIChE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0sgfAorCQkJCQlEUF9UUkFJTl9QUkVfRU1QSEFTSVNf TUFTSyk7CisKKwlzd2l0Y2ggKHNpZ25hbF9sZXZlbHMpIHsKKwljYXNlIERQX1RSQUlOX1ZPTFRB R0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6CisJY2FzZSBEUF9U UkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgor CQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwXzYwME1WXzBEQl9TTkJfQjsKKwljYXNlIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6CisJ CXJldHVybiBFRFBfTElOS19UUkFJTl80MDBNVl8zXzVEQl9TTkJfQjsKKwljYXNlIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzI6CisJY2Fz ZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZF TF8yOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwXzYwME1WXzZEQl9TTkJfQjsKKwljYXNl IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVM XzE6CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzIgfCBEUF9UUkFJTl9QUkVf RU1QSF9MRVZFTF8xOgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNjAwXzgwME1WXzNfNURCX1NO Ql9COworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yIHwgRFBfVFJBSU5fUFJF X0VNUEhfTEVWRUxfMDoKKwljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMyB8IERQ X1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6CisJCXJldHVybiBFRFBfTElOS19UUkFJTl84MDBfMTIw ME1WXzBEQl9TTkJfQjsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0Uoc2lnbmFsX2xldmVscyk7 CisJCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBfNjAwTVZfMERCX1NOQl9COworCX0KK30KKwor c3RhdGljIHZvaWQKK3NuYl9jcHVfZWRwX3NldF9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19p OTE1KGludGVsX2RwKTsKKwl1OCB0cmFpbl9zZXQgPSBpbnRlbF9kcC0+dHJhaW5fc2V0WzBdOwor CXUzMiBzaWduYWxfbGV2ZWxzOworCisJc2lnbmFsX2xldmVscyA9IHNuYl9jcHVfZWRwX3NpZ25h bF9sZXZlbHModHJhaW5fc2V0KTsKKworCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ZHJtLCAiVXNp bmcgc2lnbmFsIGxldmVscyAlMDh4XG4iLAorCQkgICAgc2lnbmFsX2xldmVscyk7CisKKwlpbnRl bF9kcC0+RFAgJj0gfkVEUF9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTS19TTkI7CisJaW50ZWxfZHAt PkRQIHw9IHNpZ25hbF9sZXZlbHM7CisKKwlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxf ZHAtPm91dHB1dF9yZWcsIGludGVsX2RwLT5EUCk7CisJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRl dl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Cit9CisKKy8qIElWQiBDUFUgZURQIHZvbHRh Z2Ugc3dpbmcgYW5kIHByZS1lbXBoYXNpcyBjb250cm9sICovCitzdGF0aWMgdTMyIGl2Yl9jcHVf ZWRwX3NpZ25hbF9sZXZlbHModTggdHJhaW5fc2V0KQoreworCXU4IHNpZ25hbF9sZXZlbHMgPSB0 cmFpbl9zZXQgJiAoRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLIHwKKwkJCQkJRFBfVFJBSU5f UFJFX0VNUEhBU0lTX01BU0spOworCisJc3dpdGNoIChzaWduYWxfbGV2ZWxzKSB7CisJY2FzZSBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8w OgorCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwTVZfMERCX0lWQjsKKwljYXNlIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzE6CisJCXJl dHVybiBFRFBfTElOS19UUkFJTl80MDBNVl8zXzVEQl9JVkI7CisJY2FzZSBEUF9UUkFJTl9WT0xU QUdFX1NXSU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOgorCWNhc2UgRFBf VFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMjoK KwkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwME1WXzZEQl9JVkI7CisKKwljYXNlIERQX1RSQUlO X1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6CisJCXJl dHVybiBFRFBfTElOS19UUkFJTl82MDBNVl8wREJfSVZCOworCWNhc2UgRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMToKKwkJcmV0dXJuIEVE UF9MSU5LX1RSQUlOXzYwME1WXzNfNURCX0lWQjsKKworCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9T V0lOR19MRVZFTF8yIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKKwkJcmV0dXJuIEVEUF9M SU5LX1RSQUlOXzgwME1WXzBEQl9JVkI7CisJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xF VkVMXzIgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgorCQlyZXR1cm4gRURQX0xJTktfVFJB SU5fODAwTVZfM181REJfSVZCOworCisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFKHNpZ25hbF9s ZXZlbHMpOworCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNTAwTVZfMERCX0lWQjsKKwl9Cit9CisK K3N0YXRpYyB2b2lkCitpdmJfY3B1X2VkcF9zZXRfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9f aTkxNShpbnRlbF9kcCk7CisJdTggdHJhaW5fc2V0ID0gaW50ZWxfZHAtPnRyYWluX3NldFswXTsK Kwl1MzIgc2lnbmFsX2xldmVsczsKKworCXNpZ25hbF9sZXZlbHMgPSBpdmJfY3B1X2VkcF9zaWdu YWxfbGV2ZWxzKHRyYWluX3NldCk7CisKKwlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlVz aW5nIHNpZ25hbCBsZXZlbHMgJTA4eFxuIiwKKwkJICAgIHNpZ25hbF9sZXZlbHMpOworCisJaW50 ZWxfZHAtPkRQICY9IH5FRFBfTElOS19UUkFJTl9WT0xfRU1QX01BU0tfSVZCOworCWludGVsX2Rw LT5EUCB8PSBzaWduYWxfbGV2ZWxzOworCisJaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIGludGVs X2RwLT5vdXRwdXRfcmVnLCBpbnRlbF9kcC0+RFApOworCWludGVsX2RlX3Bvc3RpbmdfcmVhZChk ZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOworfQorCisvKgorICogSWYgZGlzcGxheSBp cyBub3cgY29ubmVjdGVkIGNoZWNrIGxpbmtzIHN0YXR1cywKKyAqIHRoZXJlIGhhcyBiZWVuIGtu b3duIGlzc3VlcyBvZiBsaW5rIGxvc3MgdHJpZ2dlcmluZworICogbG9uZyBwdWxzZS4KKyAqCisg KiBTb21lIHNpbmtzIChlZy4gQVNVUyBQQjI4N1EpIHNlZW0gdG8gcGVyZm9ybSBzb21lCisgKiB3 ZWlyZCBIUEQgcGluZyBwb25nIGR1cmluZyBtb2Rlc2V0cy4gU28gd2UgY2FuIGFwcGFyZW50bHkK KyAqIGVuZCB1cCB3aXRoIEhQRCBnb2luZyBsb3cgZHVyaW5nIGEgbW9kZXNldCwgYW5kIHRoZW4K KyAqIGdvaW5nIGJhY2sgdXAgc29vbiBhZnRlci4gQW5kIG9uY2UgdGhhdCBoYXBwZW5zIHdlIG11 c3QKKyAqIHJldHJhaW4gdGhlIGxpbmsgdG8gZ2V0IGEgcGljdHVyZS4gVGhhdCdzIGluIGNhc2Ug bm8KKyAqIHVzZXJzcGFjZSBjb21wb25lbnQgcmVhY3RlZCB0byBpbnRlcm1pdHRlbnQgSFBEIGRp cC4KKyAqLworc3RhdGljIGVudW0gaW50ZWxfaG90cGx1Z19zdGF0ZQoraW50ZWxfZHBfaG90cGx1 ZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKKwkJIHN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2lu dGVsX2RwKGVuY29kZXIpOworCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7CisJ ZW51bSBpbnRlbF9ob3RwbHVnX3N0YXRlIHN0YXRlOworCWludCByZXQ7CisKKwlpZiAoaW50ZWxf ZHAtPmNvbXBsaWFuY2UudGVzdF9hY3RpdmUgJiYKKwkgICAgaW50ZWxfZHAtPmNvbXBsaWFuY2Uu dGVzdF90eXBlID09IERQX1RFU1RfTElOS19QSFlfVEVTVF9QQVRURVJOKSB7CisJCWludGVsX2Rw X3BoeV90ZXN0KGVuY29kZXIpOworCQkvKiBqdXN0IGRvIHRoZSBQSFkgdGVzdCBhbmQgbm90aGlu ZyBlbHNlICovCisJCXJldHVybiBJTlRFTF9IT1RQTFVHX1VOQ0hBTkdFRDsKKwl9CisKKwlzdGF0 ZSA9IGludGVsX2VuY29kZXJfaG90cGx1ZyhlbmNvZGVyLCBjb25uZWN0b3IpOworCisJZHJtX21v ZGVzZXRfYWNxdWlyZV9pbml0KCZjdHgsIDApOworCisJZm9yICg7OykgeworCQlyZXQgPSBpbnRl bF9kcF9yZXRyYWluX2xpbmsoZW5jb2RlciwgJmN0eCk7CisKKwkJaWYgKHJldCA9PSAtRURFQURM SykgeworCQkJZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJYnJlYWs7CisJfQorCisJZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKKwlkcm1fbW9k ZXNldF9hY3F1aXJlX2ZpbmkoJmN0eCk7CisJZHJtX1dBUk4oZW5jb2Rlci0+YmFzZS5kZXYsIHJl dCwKKwkJICJBY3F1aXJpbmcgbW9kZXNldCBsb2NrcyBmYWlsZWQgd2l0aCAlaVxuIiwgcmV0KTsK KworCS8qCisJICogS2VlcGluZyBpdCBjb25zaXN0ZW50IHdpdGggaW50ZWxfZGRpX2hvdHBsdWco KSBhbmQKKwkgKiBpbnRlbF9oZG1pX2hvdHBsdWcoKS4KKwkgKi8KKwlpZiAoc3RhdGUgPT0gSU5U RUxfSE9UUExVR19VTkNIQU5HRUQgJiYgIWNvbm5lY3Rvci0+aG90cGx1Z19yZXRyaWVzKQorCQlz dGF0ZSA9IElOVEVMX0hPVFBMVUdfUkVUUlk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRp YyBib29sIGlieF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo ZW5jb2Rlci0+YmFzZS5kZXYpOworCXUzMiBiaXQgPSBkZXZfcHJpdi0+aG90cGx1Zy5wY2hfaHBk W2VuY29kZXItPmhwZF9waW5dOworCisJcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFNE RUlTUikgJiBiaXQ7Cit9CisKK3N0YXRpYyBib29sIGc0eF9kaWdpdGFsX3BvcnRfY29ubmVjdGVk KHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOworCXUzMiBiaXQ7CisK Kwlzd2l0Y2ggKGVuY29kZXItPmhwZF9waW4pIHsKKwljYXNlIEhQRF9QT1JUX0I6CisJCWJpdCA9 IFBPUlRCX0hPVFBMVUdfTElWRV9TVEFUVVNfRzRYOworCQlicmVhazsKKwljYXNlIEhQRF9QT1JU X0M6CisJCWJpdCA9IFBPUlRDX0hPVFBMVUdfTElWRV9TVEFUVVNfRzRYOworCQlicmVhazsKKwlj YXNlIEhQRF9QT1JUX0Q6CisJCWJpdCA9IFBPUlREX0hPVFBMVUdfTElWRV9TVEFUVVNfRzRYOwor CQlicmVhazsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UoZW5jb2Rlci0+aHBkX3Bpbik7CisJ CXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgUE9S VF9IT1RQTFVHX1NUQVQpICYgYml0OworfQorCitzdGF0aWMgYm9vbCBnbTQ1X2RpZ2l0YWxfcG9y dF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisJ dTMyIGJpdDsKKworCXN3aXRjaCAoZW5jb2Rlci0+aHBkX3BpbikgeworCWNhc2UgSFBEX1BPUlRf QjoKKwkJYml0ID0gUE9SVEJfSE9UUExVR19MSVZFX1NUQVRVU19HTTQ1OworCQlicmVhazsKKwlj YXNlIEhQRF9QT1JUX0M6CisJCWJpdCA9IFBPUlRDX0hPVFBMVUdfTElWRV9TVEFUVVNfR000NTsK KwkJYnJlYWs7CisJY2FzZSBIUERfUE9SVF9EOgorCQliaXQgPSBQT1JURF9IT1RQTFVHX0xJVkVf U1RBVFVTX0dNNDU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRShlbmNvZGVy LT5ocGRfcGluKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCBQT1JUX0hPVFBMVUdfU1RBVCkgJiBiaXQ7Cit9CisKK3N0YXRpYyBib29sIGls a19kaWdpdGFsX3BvcnRfY29ubmVjdGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQor eworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+ YmFzZS5kZXYpOworCXUzMiBiaXQgPSBkZXZfcHJpdi0+aG90cGx1Zy5ocGRbZW5jb2Rlci0+aHBk X3Bpbl07CisKKwlyZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgREVJU1IpICYgYml0Owor fQorCitzdGF0aWMgdm9pZCBpbnRlbF9kcF9lbmNvZGVyX2Rlc3Ryb3koc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyKQoreworCWludGVsX2RwX2VuY29kZXJfZmx1c2hfd29yayhlbmNvZGVyKTsK KworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CisJa2ZyZWUoZW5jX3RvX2RpZ19wb3J0 KHRvX2ludGVsX2VuY29kZXIoZW5jb2RlcikpKTsKK30KKworZW51bSBwaXBlIHZsdl9hY3RpdmVf cGlwZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOworCXN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyID0gJmRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZTsKKwllbnVtIHBp cGUgcGlwZTsKKworCWlmIChpbnRlbF9kcF9wb3J0X2VuYWJsZWQoZGV2X3ByaXYsIGludGVsX2Rw LT5vdXRwdXRfcmVnLAorCQkJCSAgZW5jb2Rlci0+cG9ydCwgJnBpcGUpKQorCQlyZXR1cm4gcGlw ZTsKKworCXJldHVybiBJTlZBTElEX1BJUEU7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2RwX2Vu Y29kZXJfcmVzZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+ZGV2KTsKKwlzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKHRvX2ludGVsX2VuY29kZXIoZW5j b2RlcikpOworCisJaW50ZWxfZHAtPkRQID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgaW50ZWxf ZHAtPm91dHB1dF9yZWcpOworCisJaW50ZWxfZHAtPnJlc2V0X2xpbmtfcGFyYW1zID0gdHJ1ZTsK KworCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2 KSkgeworCQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKKworCQl3aXRoX2ludGVsX3Bwc19sb2Nr KGludGVsX2RwLCB3YWtlcmVmKQorCQkJaW50ZWxfZHAtPnBwcy5hY3RpdmVfcGlwZSA9IHZsdl9h Y3RpdmVfcGlwZShpbnRlbF9kcCk7CisJfQorCisJaW50ZWxfcHBzX2VuY29kZXJfcmVzZXQoaW50 ZWxfZHApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGludGVs X2RwX2VuY19mdW5jcyA9IHsKKwkucmVzZXQgPSBpbnRlbF9kcF9lbmNvZGVyX3Jlc2V0LAorCS5k ZXN0cm95ID0gaW50ZWxfZHBfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworYm9vbCBpbnRlbF9kcF9p bml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJICAgaTkxNV9yZWdfdCBv dXRwdXRfcmVnLAorCQkgICBlbnVtIHBvcnQgcG9ydCkKK3sKKwlzdHJ1Y3QgaW50ZWxfZGlnaXRh bF9wb3J0ICpkaWdfcG9ydDsKKwlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcjsK KwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGludGVsX2Nvbm5lY3RvciAq aW50ZWxfY29ubmVjdG9yOworCisJZGlnX3BvcnQgPSBremFsbG9jKHNpemVvZigqZGlnX3BvcnQp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRpZ19wb3J0KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpbnRl bF9jb25uZWN0b3IgPSBpbnRlbF9jb25uZWN0b3JfYWxsb2MoKTsKKwlpZiAoIWludGVsX2Nvbm5l Y3RvcikKKwkJZ290byBlcnJfY29ubmVjdG9yX2FsbG9jOworCisJaW50ZWxfZW5jb2RlciA9ICZk aWdfcG9ydC0+YmFzZTsKKwllbmNvZGVyID0gJmludGVsX2VuY29kZXItPmJhc2U7CisKKwltdXRl eF9pbml0KCZkaWdfcG9ydC0+aGRjcF9tdXRleCk7CisKKwlpZiAoZHJtX2VuY29kZXJfaW5pdCgm ZGV2X3ByaXYtPmRybSwgJmludGVsX2VuY29kZXItPmJhc2UsCisJCQkgICAgICZpbnRlbF9kcF9l bmNfZnVuY3MsIERSTV9NT0RFX0VOQ09ERVJfVE1EUywKKwkJCSAgICAgIkRQICVjIiwgcG9ydF9u YW1lKHBvcnQpKSkKKwkJZ290byBlcnJfZW5jb2Rlcl9pbml0OworCisJaW50ZWxfZW5jb2Rlci0+ aG90cGx1ZyA9IGludGVsX2RwX2hvdHBsdWc7CisJaW50ZWxfZW5jb2Rlci0+Y29tcHV0ZV9jb25m aWcgPSBpbnRlbF9kcF9jb21wdXRlX2NvbmZpZzsKKwlpbnRlbF9lbmNvZGVyLT5nZXRfaHdfc3Rh dGUgPSBpbnRlbF9kcF9nZXRfaHdfc3RhdGU7CisJaW50ZWxfZW5jb2Rlci0+Z2V0X2NvbmZpZyA9 IGludGVsX2RwX2dldF9jb25maWc7CisJaW50ZWxfZW5jb2Rlci0+c3luY19zdGF0ZSA9IGludGVs X2RwX3N5bmNfc3RhdGU7CisJaW50ZWxfZW5jb2Rlci0+aW5pdGlhbF9mYXN0c2V0X2NoZWNrID0g aW50ZWxfZHBfaW5pdGlhbF9mYXN0c2V0X2NoZWNrOworCWludGVsX2VuY29kZXItPnVwZGF0ZV9w aXBlID0gaW50ZWxfcGFuZWxfdXBkYXRlX2JhY2tsaWdodDsKKwlpbnRlbF9lbmNvZGVyLT5zdXNw ZW5kID0gaW50ZWxfZHBfZW5jb2Rlcl9zdXNwZW5kOworCWludGVsX2VuY29kZXItPnNodXRkb3du ID0gaW50ZWxfZHBfZW5jb2Rlcl9zaHV0ZG93bjsKKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJp dikpIHsKKwkJaW50ZWxfZW5jb2Rlci0+cHJlX3BsbF9lbmFibGUgPSBjaHZfZHBfcHJlX3BsbF9l bmFibGU7CisJCWludGVsX2VuY29kZXItPnByZV9lbmFibGUgPSBjaHZfcHJlX2VuYWJsZV9kcDsK KwkJaW50ZWxfZW5jb2Rlci0+ZW5hYmxlID0gdmx2X2VuYWJsZV9kcDsKKwkJaW50ZWxfZW5jb2Rl ci0+ZGlzYWJsZSA9IHZsdl9kaXNhYmxlX2RwOworCQlpbnRlbF9lbmNvZGVyLT5wb3N0X2Rpc2Fi bGUgPSBjaHZfcG9zdF9kaXNhYmxlX2RwOworCQlpbnRlbF9lbmNvZGVyLT5wb3N0X3BsbF9kaXNh YmxlID0gY2h2X2RwX3Bvc3RfcGxsX2Rpc2FibGU7CisJfSBlbHNlIGlmIChJU19WQUxMRVlWSUVX KGRldl9wcml2KSkgeworCQlpbnRlbF9lbmNvZGVyLT5wcmVfcGxsX2VuYWJsZSA9IHZsdl9kcF9w cmVfcGxsX2VuYWJsZTsKKwkJaW50ZWxfZW5jb2Rlci0+cHJlX2VuYWJsZSA9IHZsdl9wcmVfZW5h YmxlX2RwOworCQlpbnRlbF9lbmNvZGVyLT5lbmFibGUgPSB2bHZfZW5hYmxlX2RwOworCQlpbnRl bF9lbmNvZGVyLT5kaXNhYmxlID0gdmx2X2Rpc2FibGVfZHA7CisJCWludGVsX2VuY29kZXItPnBv c3RfZGlzYWJsZSA9IHZsdl9wb3N0X2Rpc2FibGVfZHA7CisJfSBlbHNlIHsKKwkJaW50ZWxfZW5j b2Rlci0+cHJlX2VuYWJsZSA9IGc0eF9wcmVfZW5hYmxlX2RwOworCQlpbnRlbF9lbmNvZGVyLT5l bmFibGUgPSBnNHhfZW5hYmxlX2RwOworCQlpbnRlbF9lbmNvZGVyLT5kaXNhYmxlID0gZzR4X2Rp c2FibGVfZHA7CisJCWludGVsX2VuY29kZXItPnBvc3RfZGlzYWJsZSA9IGc0eF9wb3N0X2Rpc2Fi bGVfZHA7CisJfQorCisJaWYgKChJU19JVllCUklER0UoZGV2X3ByaXYpICYmIHBvcnQgPT0gUE9S VF9BKSB8fAorCSAgICAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpICYmIHBvcnQgIT0gUE9SVF9BKSkK KwkJZGlnX3BvcnQtPmRwLnNldF9saW5rX3RyYWluID0gY3B0X3NldF9saW5rX3RyYWluOworCWVs c2UKKwkJZGlnX3BvcnQtPmRwLnNldF9saW5rX3RyYWluID0gZzR4X3NldF9saW5rX3RyYWluOwor CisJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQorCQlkaWdfcG9ydC0+ZHAuc2V0X3NpZ25h bF9sZXZlbHMgPSBjaHZfc2V0X3NpZ25hbF9sZXZlbHM7CisJZWxzZSBpZiAoSVNfVkFMTEVZVklF VyhkZXZfcHJpdikpCisJCWRpZ19wb3J0LT5kcC5zZXRfc2lnbmFsX2xldmVscyA9IHZsdl9zZXRf c2lnbmFsX2xldmVsczsKKwllbHNlIGlmIChJU19JVllCUklER0UoZGV2X3ByaXYpICYmIHBvcnQg PT0gUE9SVF9BKQorCQlkaWdfcG9ydC0+ZHAuc2V0X3NpZ25hbF9sZXZlbHMgPSBpdmJfY3B1X2Vk cF9zZXRfc2lnbmFsX2xldmVsczsKKwllbHNlIGlmIChJU19HRU4oZGV2X3ByaXYsIDYpICYmIHBv cnQgPT0gUE9SVF9BKQorCQlkaWdfcG9ydC0+ZHAuc2V0X3NpZ25hbF9sZXZlbHMgPSBzbmJfY3B1 X2VkcF9zZXRfc2lnbmFsX2xldmVsczsKKwllbHNlCisJCWRpZ19wb3J0LT5kcC5zZXRfc2lnbmFs X2xldmVscyA9IGc0eF9zZXRfc2lnbmFsX2xldmVsczsKKworCWlmIChJU19WQUxMRVlWSUVXKGRl dl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSB8fAorCSAgICAoSEFTX1BDSF9TUExJ VChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpKSB7CisJCWRpZ19wb3J0LT5kcC5wcmVlbXBo X21heCA9IGludGVsX2RwX3ByZWVtcGhfbWF4XzM7CisJCWRpZ19wb3J0LT5kcC52b2x0YWdlX21h eCA9IGludGVsX2RwX3ZvbHRhZ2VfbWF4XzM7CisJfSBlbHNlIHsKKwkJZGlnX3BvcnQtPmRwLnBy ZWVtcGhfbWF4ID0gaW50ZWxfZHBfcHJlZW1waF9tYXhfMjsKKwkJZGlnX3BvcnQtPmRwLnZvbHRh Z2VfbWF4ID0gaW50ZWxfZHBfdm9sdGFnZV9tYXhfMjsKKwl9CisKKwlkaWdfcG9ydC0+ZHAub3V0 cHV0X3JlZyA9IG91dHB1dF9yZWc7CisJZGlnX3BvcnQtPm1heF9sYW5lcyA9IDQ7CisKKwlpbnRl bF9lbmNvZGVyLT50eXBlID0gSU5URUxfT1VUUFVUX0RQOworCWludGVsX2VuY29kZXItPnBvd2Vy X2RvbWFpbiA9IGludGVsX3BvcnRfdG9fcG93ZXJfZG9tYWluKHBvcnQpOworCWlmIChJU19DSEVS UllWSUVXKGRldl9wcml2KSkgeworCQlpZiAocG9ydCA9PSBQT1JUX0QpCisJCQlpbnRlbF9lbmNv ZGVyLT5waXBlX21hc2sgPSBCSVQoUElQRV9DKTsKKwkJZWxzZQorCQkJaW50ZWxfZW5jb2Rlci0+ cGlwZV9tYXNrID0gQklUKFBJUEVfQSkgfCBCSVQoUElQRV9CKTsKKwl9IGVsc2UgeworCQlpbnRl bF9lbmNvZGVyLT5waXBlX21hc2sgPSB+MDsKKwl9CisJaW50ZWxfZW5jb2Rlci0+Y2xvbmVhYmxl ID0gMDsKKwlpbnRlbF9lbmNvZGVyLT5wb3J0ID0gcG9ydDsKKwlpbnRlbF9lbmNvZGVyLT5ocGRf cGluID0gaW50ZWxfaHBkX3Bpbl9kZWZhdWx0KGRldl9wcml2LCBwb3J0KTsKKworCWRpZ19wb3J0 LT5ocGRfcHVsc2UgPSBpbnRlbF9kcF9ocGRfcHVsc2U7CisKKwlpZiAoSEFTX0dNQ0goZGV2X3By aXYpKSB7CisJCWlmIChJU19HTTQ1KGRldl9wcml2KSkKKwkJCWRpZ19wb3J0LT5jb25uZWN0ZWQg PSBnbTQ1X2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQ7CisJCWVsc2UKKwkJCWRpZ19wb3J0LT5jb25u ZWN0ZWQgPSBnNHhfZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZDsKKwl9IGVsc2UgeworCQlpZiAocG9y dCA9PSBQT1JUX0EpCisJCQlkaWdfcG9ydC0+Y29ubmVjdGVkID0gaWxrX2RpZ2l0YWxfcG9ydF9j b25uZWN0ZWQ7CisJCWVsc2UKKwkJCWRpZ19wb3J0LT5jb25uZWN0ZWQgPSBpYnhfZGlnaXRhbF9w b3J0X2Nvbm5lY3RlZDsKKwl9CisKKwlpZiAocG9ydCAhPSBQT1JUX0EpCisJCWludGVsX2luZm9m cmFtZV9pbml0KGRpZ19wb3J0KTsKKworCWRpZ19wb3J0LT5hdXhfY2ggPSBpbnRlbF9iaW9zX3Bv cnRfYXV4X2NoKGRldl9wcml2LCBwb3J0KTsKKwlpZiAoIWludGVsX2RwX2luaXRfY29ubmVjdG9y KGRpZ19wb3J0LCBpbnRlbF9jb25uZWN0b3IpKQorCQlnb3RvIGVycl9pbml0X2Nvbm5lY3RvcjsK KworCXJldHVybiB0cnVlOworCitlcnJfaW5pdF9jb25uZWN0b3I6CisJZHJtX2VuY29kZXJfY2xl YW51cChlbmNvZGVyKTsKK2Vycl9lbmNvZGVyX2luaXQ6CisJa2ZyZWUoaW50ZWxfY29ubmVjdG9y KTsKK2Vycl9jb25uZWN0b3JfYWxsb2M6CisJa2ZyZWUoZGlnX3BvcnQpOworCXJldHVybiBmYWxz ZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvZzR4X2RwLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2c0eF9kcC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTMwNzYwZjBkOGEyCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9nNHhfZHAuaApAQCAtMCwwICsxLDMxIEBACisv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCisvKgorICogQ29weXJpZ2h0IMKpIDIw MjAgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaWZuZGVmIF9HNFhfRFBfSF8KKyNkZWZpbmUg X0c0WF9EUF9IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgImk5MTVf cmVnLmgiCisKK2VudW0gcGlwZTsKK2VudW0gcG9ydDsKK3N0cnVjdCBkcm1faTkxNV9wcml2YXRl Oworc3RydWN0IGludGVsX2NydGNfc3RhdGU7CitzdHJ1Y3QgaW50ZWxfZHA7CitzdHJ1Y3QgaW50 ZWxfZW5jb2RlcjsKKworY29uc3Qgc3RydWN0IGRwbGwgKnZsdl9nZXRfZHBsbChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSk7CitlbnVtIHBpcGUgdmx2X2FjdGl2ZV9waXBlKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApOwordm9pZCBpbnRlbF9kcF9zZXRfY2xvY2soc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIsCisJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25m aWcpOworYm9vbCBpbnRlbF9kcF9wb3J0X2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAorCQkJICAgaTkxNV9yZWdfdCBkcF9yZWcsIGVudW0gcG9ydCBwb3J0LAorCQkJ ICAgZW51bSBwaXBlICpwaXBlKTsKK2Jvb2wgaW50ZWxfZHBfaW5pdChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYsCisJCSAgIGk5MTVfcmVnX3Qgb3V0cHV0X3JlZywKKwkJICAgZW51 bSBwb3J0IHBvcnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmMKaW5kZXggYzBhNDAwOTI2ZmM3Li5lNzRiOTI1ODdkN2YgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCkBAIC02Niw2ICs2Niw3 IEBACiAKICNpbmNsdWRlICJndC9pbnRlbF9ycHMuaCIKIAorI2luY2x1ZGUgImc0eF9kcC5oIgog I2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaW50ZWxfYWNwaS5oIgogI2luY2x1ZGUg ImludGVsX2F0b21pYy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCmlu ZGV4IDI0OWZmZDJjN2M1NC4uMTA3YTEwMDA5ZjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kcC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9lZGlk Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4KIAorI2luY2x1ZGUgImc0eF9k cC5oIgogI2luY2x1ZGUgImk5MTVfZGVidWdmcy5oIgogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAj aW5jbHVkZSAiaW50ZWxfYXRvbWljLmgiCkBAIC04Miw1MiArODMsNiBAQAogI2RlZmluZSBJTlRF TF9EUF9SRVNPTFVUSU9OX1NUQU5EQVJECSgyIDw8IElOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRf TUFTSykKICNkZWZpbmUgSU5URUxfRFBfUkVTT0xVVElPTl9GQUlMU0FGRQkoMyA8PCBJTlRFTF9E UF9SRVNPTFVUSU9OX1NISUZUX01BU0spCiAKLXN0cnVjdCBkcF9saW5rX2RwbGwgewotCWludCBj bG9jazsKLQlzdHJ1Y3QgZHBsbCBkcGxsOwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBkcF9s aW5rX2RwbGwgZzR4X2RwbGxbXSA9IHsKLQl7IDE2MjAwMCwKLQkJeyAucDEgPSAyLCAucDIgPSAx MCwgLm4gPSAyLCAubTEgPSAyMywgLm0yID0gOCB9IH0sCi0JeyAyNzAwMDAsCi0JCXsgLnAxID0g MSwgLnAyID0gMTAsIC5uID0gMSwgLm0xID0gMTQsIC5tMiA9IDIgfSB9Ci19OwotCi1zdGF0aWMg Y29uc3Qgc3RydWN0IGRwX2xpbmtfZHBsbCBwY2hfZHBsbFtdID0gewotCXsgMTYyMDAwLAotCQl7 IC5wMSA9IDIsIC5wMiA9IDEwLCAubiA9IDEsIC5tMSA9IDEyLCAubTIgPSA5IH0gfSwKLQl7IDI3 MDAwMCwKLQkJeyAucDEgPSAxLCAucDIgPSAxMCwgLm4gPSAyLCAubTEgPSAxNCwgLm0yID0gOCB9 IH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHBfbGlua19kcGxsIHZsdl9kcGxsW10gPSB7 Ci0JeyAxNjIwMDAsCi0JCXsgLnAxID0gMywgLnAyID0gMiwgLm4gPSA1LCAubTEgPSAzLCAubTIg PSA4MSB9IH0sCi0JeyAyNzAwMDAsCi0JCXsgLnAxID0gMiwgLnAyID0gMiwgLm4gPSAxLCAubTEg PSAyLCAubTIgPSAyNyB9IH0KLX07Ci0KLS8qCi0gKiBDSFYgc3VwcG9ydHMgZURQIDEuNCB0aGF0 IGhhdmUgIG1vcmUgbGluayByYXRlcy4KLSAqIEJlbG93IG9ubHkgcHJvdmlkZXMgdGhlIGZpeGVk IHJhdGUgYnV0IGV4Y2x1ZGUgdmFyaWFibGUgcmF0ZS4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVj dCBkcF9saW5rX2RwbGwgY2h2X2RwbGxbXSA9IHsKLQkvKgotCSAqIENIViByZXF1aXJlcyB0byBw cm9ncmFtIGZyYWN0aW9uYWwgZGl2aXNpb24gZm9yIG0yLgotCSAqIG0yIGlzIHN0b3JlZCBpbiBm aXhlZCBwb2ludCBmb3JtYXQgdXNpbmcgZm9ybXVsYSBiZWxvdwotCSAqIChtMl9pbnQgPDwgMjIp IHwgbTJfZnJhY3Rpb24KLQkgKi8KLQl7IDE2MjAwMCwJLyogbTJfaW50ID0gMzIsIG0yX2ZyYWN0 aW9uID0gMTY3NzcyMiAqLwotCQl7IC5wMSA9IDQsIC5wMiA9IDIsIC5uID0gMSwgLm0xID0gMiwg Lm0yID0gMHg4MTk5OTlhIH0gfSwKLQl7IDI3MDAwMCwJLyogbTJfaW50ID0gMjcsIG0yX2ZyYWN0 aW9uID0gMCAqLwotCQl7IC5wMSA9IDQsIC5wMiA9IDEsIC5uID0gMSwgLm0xID0gMiwgLm0yID0g MHg2YzAwMDAwIH0gfSwKLX07Ci0KLWNvbnN0IHN0cnVjdCBkcGxsICp2bHZfZ2V0X2RwbGwoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCi17Ci0JcmV0dXJuIElTX0NIRVJSWVZJRVcoaTkx NSkgPyAmY2h2X2RwbGxbMF0uZHBsbCA6ICZ2bHZfZHBsbFswXS5kcGxsOwotfQogCiAvKiBDb25z dGFudHMgZm9yIERQIERTQyBjb25maWd1cmF0aW9ucyAqLwogc3RhdGljIGNvbnN0IHU4IHZhbGlk X2RzY19icHBbXSA9IHs2LCA4LCAxMCwgMTIsIDE1fTsKQEAgLTE1MSw4ICsxMDYsNiBAQCBib29s IGludGVsX2RwX2lzX2VkcChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogCXJldHVybiBkaWdf cG9ydC0+YmFzZS50eXBlID09IElOVEVMX09VVFBVVF9FRFA7CiB9CiAKLXN0YXRpYyB2b2lkIGlu dGVsX2RwX2xpbmtfZG93bihzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKLQkJCSAgICAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpOwogc3RhdGlj IHZvaWQgaW50ZWxfZHBfdW5zZXRfZWRpZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsKIAog LyogdXBkYXRlIHNpbmsgcmF0ZXMgZnJvbSBkcGNkICovCkBAIC04NzgsMzkgKzgzMSw2IEBAIGJv b2wgaW50ZWxfZHBfc291cmNlX3N1cHBvcnRzX2hicjMoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKIAlyZXR1cm4gbWF4X3JhdGUgPj0gODEwMDAwOwogfQogCi1zdGF0aWMgdm9pZAotaW50ZWxf ZHBfc2V0X2Nsb2NrKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkgICBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Ci0JY29uc3Qgc3RydWN0 IGRwX2xpbmtfZHBsbCAqZGl2aXNvciA9IE5VTEw7Ci0JaW50IGksIGNvdW50ID0gMDsKLQotCWlm IChJU19HNFgoZGV2X3ByaXYpKSB7Ci0JCWRpdmlzb3IgPSBnNHhfZHBsbDsKLQkJY291bnQgPSBB UlJBWV9TSVpFKGc0eF9kcGxsKTsKLQl9IGVsc2UgaWYgKEhBU19QQ0hfU1BMSVQoZGV2X3ByaXYp KSB7Ci0JCWRpdmlzb3IgPSBwY2hfZHBsbDsKLQkJY291bnQgPSBBUlJBWV9TSVpFKHBjaF9kcGxs KTsKLQl9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWRpdmlzb3IgPSBj aHZfZHBsbDsKLQkJY291bnQgPSBBUlJBWV9TSVpFKGNodl9kcGxsKTsKLQl9IGVsc2UgaWYgKElT X1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWRpdmlzb3IgPSB2bHZfZHBsbDsKLQkJY291bnQg PSBBUlJBWV9TSVpFKHZsdl9kcGxsKTsKLQl9Ci0KLQlpZiAoZGl2aXNvciAmJiBjb3VudCkgewot CQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJaWYgKHBpcGVfY29uZmlnLT5wb3J0 X2Nsb2NrID09IGRpdmlzb3JbaV0uY2xvY2spIHsKLQkJCQlwaXBlX2NvbmZpZy0+ZHBsbCA9IGRp dmlzb3JbaV0uZHBsbDsKLQkJCQlwaXBlX2NvbmZpZy0+Y2xvY2tfc2V0ID0gdHJ1ZTsKLQkJCQli cmVhazsKLQkJCX0KLQkJfQotCX0KLX0KLQogc3RhdGljIHZvaWQgc25wcmludGZfaW50X2FycmF5 KGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwKIAkJCSAgICAgICBjb25zdCBpbnQgKmFycmF5LCBpbnQg bmVsZW0pCiB7CkBAIC0xODgwLDkwICsxODAwLDYgQEAgdm9pZCBpbnRlbF9kcF9zZXRfbGlua19w YXJhbXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKIAlpbnRlbF9kcC0+bGFuZV9jb3VudCA9 IGxhbmVfY291bnQ7CiB9CiAKLXN0YXRpYyB2b2lkIGludGVsX2RwX3ByZXBhcmUoc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpwaXBlX2NvbmZpZykKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKLQlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw ID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwotCWVudW0gcG9ydCBwb3J0ID0gZW5jb2Rlci0+ cG9ydDsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25m aWctPnVhcGkuY3J0Yyk7Ci0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVk X21vZGUgPSAmcGlwZV9jb25maWctPmh3LmFkanVzdGVkX21vZGU7Ci0KLQlpbnRlbF9kcF9zZXRf bGlua19wYXJhbXMoaW50ZWxfZHAsCi0JCQkJIHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrLAotCQkJ CSBwaXBlX2NvbmZpZy0+bGFuZV9jb3VudCk7Ci0KLQkvKgotCSAqIFRoZXJlIGFyZSBmb3VyIGtp bmRzIG9mIERQIHJlZ2lzdGVyczoKLQkgKgotCSAqIAlJQlggUENICi0JICogCVNOQiBDUFUKLQkg KglJVkIgQ1BVCi0JICogCUNQVCBQQ0gKLQkgKgotCSAqIElCWCBQQ0ggYW5kIENQVSBhcmUgdGhl IHNhbWUgZm9yIGFsbW9zdCBldmVyeXRoaW5nLAotCSAqIGV4Y2VwdCB0aGF0IHRoZSBDUFUgRFAg UExMIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcwotCSAqIHJlZ2lzdGVyCi0JICoKLQkgKiBDUFQgUENI IGlzIHF1aXRlIGRpZmZlcmVudCwgaGF2aW5nIG1hbnkgYml0cyBtb3ZlZAotCSAqIHRvIHRoZSBU UkFOU19EUF9DVEwgcmVnaXN0ZXIgaW5zdGVhZC4gVGhhdAotCSAqIGNvbmZpZ3VyYXRpb24gaGFw cGVucyAob2RkbHkpIGluIGlsa19wY2hfZW5hYmxlCi0JICovCi0KLQkvKiBQcmVzZXJ2ZSB0aGUg QklPUy1jb21wdXRlZCBkZXRlY3RlZCBiaXQuIFRoaXMgaXMKLQkgKiBzdXBwb3NlZCB0byBiZSBy ZWFkLW9ubHkuCi0JICovCi0JaW50ZWxfZHAtPkRQID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwg aW50ZWxfZHAtPm91dHB1dF9yZWcpICYgRFBfREVURUNURUQ7Ci0KLQkvKiBIYW5kbGUgRFAgYml0 cyBpbiBjb21tb24gYmV0d2VlbiBhbGwgdGhyZWUgcmVnaXN0ZXIgZm9ybWF0cyAqLwotCWludGVs X2RwLT5EUCB8PSBEUF9WT0xUQUdFXzBfNCB8IERQX1BSRV9FTVBIQVNJU18wOwotCWludGVsX2Rw LT5EUCB8PSBEUF9QT1JUX1dJRFRIKHBpcGVfY29uZmlnLT5sYW5lX2NvdW50KTsKLQotCS8qIFNw bGl0IG91dCB0aGUgSUJYL0NQVSB2cyBDUFQgc2V0dGluZ3MgKi8KLQotCWlmIChJU19JVllCUklE R0UoZGV2X3ByaXYpICYmIHBvcnQgPT0gUE9SVF9BKSB7Ci0JCWlmIChhZGp1c3RlZF9tb2RlLT5m bGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQotCQkJaW50ZWxfZHAtPkRQIHw9IERQX1NZTkNf SFNfSElHSDsKLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZ TkMpCi0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19WU19ISUdIOwotCQlpbnRlbF9kcC0+RFAg fD0gRFBfTElOS19UUkFJTl9PRkZfQ1BUOwotCi0JCWlmIChkcm1fZHBfZW5oYW5jZWRfZnJhbWVf Y2FwKGludGVsX2RwLT5kcGNkKSkKLQkJCWludGVsX2RwLT5EUCB8PSBEUF9FTkhBTkNFRF9GUkFN SU5HOwotCi0JCWludGVsX2RwLT5EUCB8PSBEUF9QSVBFX1NFTF9JVkIoY3J0Yy0+cGlwZSk7Ci0J fSBlbHNlIGlmIChIQVNfUENIX0NQVChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpIHsKLQkJ dTMyIHRyYW5zX2RwOwotCi0JCWludGVsX2RwLT5EUCB8PSBEUF9MSU5LX1RSQUlOX09GRl9DUFQ7 Ci0KLQkJdHJhbnNfZHAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBUUkFOU19EUF9DVEwoY3J0 Yy0+cGlwZSkpOwotCQlpZiAoZHJtX2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBj ZCkpCi0JCQl0cmFuc19kcCB8PSBUUkFOU19EUF9FTkhfRlJBTUlORzsKLQkJZWxzZQotCQkJdHJh bnNfZHAgJj0gflRSQU5TX0RQX0VOSF9GUkFNSU5HOwotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgVFJBTlNfRFBfQ1RMKGNydGMtPnBpcGUpLCB0cmFuc19kcCk7Ci0JfSBlbHNlIHsKLQkJaWYg KElTX0c0WChkZXZfcHJpdikgJiYgcGlwZV9jb25maWctPmxpbWl0ZWRfY29sb3JfcmFuZ2UpCi0J CQlpbnRlbF9kcC0+RFAgfD0gRFBfQ09MT1JfUkFOR0VfMTZfMjM1OwotCi0JCWlmIChhZGp1c3Rl ZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQotCQkJaW50ZWxfZHAtPkRQIHw9 IERQX1NZTkNfSFNfSElHSDsKLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVf RkxBR19QVlNZTkMpCi0JCQlpbnRlbF9kcC0+RFAgfD0gRFBfU1lOQ19WU19ISUdIOwotCQlpbnRl bF9kcC0+RFAgfD0gRFBfTElOS19UUkFJTl9PRkY7Ci0KLQkJaWYgKGRybV9kcF9lbmhhbmNlZF9m cmFtZV9jYXAoaW50ZWxfZHAtPmRwY2QpKQotCQkJaW50ZWxfZHAtPkRQIHw9IERQX0VOSEFOQ0VE X0ZSQU1JTkc7Ci0KLQkJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQkJaW50ZWxfZHAt PkRQIHw9IERQX1BJUEVfU0VMX0NIVihjcnRjLT5waXBlKTsKLQkJZWxzZQotCQkJaW50ZWxfZHAt PkRQIHw9IERQX1BJUEVfU0VMKGNydGMtPnBpcGUpOwotCX0KLX0KLQotCiAvKiBFbmFibGUgYmFj a2xpZ2h0IFBXTSBhbmQgYmFja2xpZ2h0IFBQIGNvbnRyb2wuICovCiB2b2lkIGludGVsX2VkcF9i YWNrbGlnaHRfb24oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJ CQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCkBAIC0x OTk1LDg5ICsxODMxLDYgQEAgdm9pZCBpbnRlbF9lZHBfYmFja2xpZ2h0X29mZihjb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUpCiAJaW50ZWxfcGFuZWxfZGlz YWJsZV9iYWNrbGlnaHQob2xkX2Nvbm5fc3RhdGUpOwogfQogCi1zdGF0aWMgdm9pZCBhc3NlcnRf ZHBfcG9ydChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBib29sIHN0YXRlKQotewotCXN0cnVj dCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHAp OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGlnX3BvcnQt PmJhc2UuYmFzZS5kZXYpOwotCWJvb2wgY3VyX3N0YXRlID0gaW50ZWxfZGVfcmVhZChkZXZfcHJp diwgaW50ZWxfZHAtPm91dHB1dF9yZWcpICYgRFBfUE9SVF9FTjsKLQotCUk5MTVfU1RBVEVfV0FS TihjdXJfc3RhdGUgIT0gc3RhdGUsCi0JCQkiW0VOQ09ERVI6JWQ6JXNdIHN0YXRlIGFzc2VydGlv biBmYWlsdXJlIChleHBlY3RlZCAlcywgY3VycmVudCAlcylcbiIsCi0JCQlkaWdfcG9ydC0+YmFz ZS5iYXNlLmJhc2UuaWQsIGRpZ19wb3J0LT5iYXNlLmJhc2UubmFtZSwKLQkJCW9ub2ZmKHN0YXRl KSwgb25vZmYoY3VyX3N0YXRlKSk7Ci19Ci0jZGVmaW5lIGFzc2VydF9kcF9wb3J0X2Rpc2FibGVk KGQpIGFzc2VydF9kcF9wb3J0KChkKSwgZmFsc2UpCi0KLXN0YXRpYyB2b2lkIGFzc2VydF9lZHBf cGxsKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgYm9vbCBzdGF0ZSkKLXsKLQli b29sIGN1cl9zdGF0ZSA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIERQX0EpICYgRFBfUExMX0VO QUJMRTsKLQotCUk5MTVfU1RBVEVfV0FSTihjdXJfc3RhdGUgIT0gc3RhdGUsCi0JCQkiZURQIFBM TCBzdGF0ZSBhc3NlcnRpb24gZmFpbHVyZSAoZXhwZWN0ZWQgJXMsIGN1cnJlbnQgJXMpXG4iLAot CQkJb25vZmYoc3RhdGUpLCBvbm9mZihjdXJfc3RhdGUpKTsKLX0KLSNkZWZpbmUgYXNzZXJ0X2Vk cF9wbGxfZW5hYmxlZChkKSBhc3NlcnRfZWRwX3BsbCgoZCksIHRydWUpCi0jZGVmaW5lIGFzc2Vy dF9lZHBfcGxsX2Rpc2FibGVkKGQpIGFzc2VydF9lZHBfcGxsKChkKSwgZmFsc2UpCi0KLXN0YXRp YyB2b2lkIGlsa19lZHBfcGxsX29uKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCi0JCQkgICBj b25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCi17Ci0Jc3RydWN0IGlu dGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRjKHBpcGVfY29uZmlnLT51YXBpLmNydGMpOwot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5k ZXYpOwotCi0JYXNzZXJ0X3BpcGVfZGlzYWJsZWQoZGV2X3ByaXYsIHBpcGVfY29uZmlnLT5jcHVf dHJhbnNjb2Rlcik7Ci0JYXNzZXJ0X2RwX3BvcnRfZGlzYWJsZWQoaW50ZWxfZHApOwotCWFzc2Vy dF9lZHBfcGxsX2Rpc2FibGVkKGRldl9wcml2KTsKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLCAiZW5hYmxpbmcgZURQIFBMTCBmb3IgY2xvY2sgJWRcbiIsCi0JCSAgICBwaXBlX2NvbmZp Zy0+cG9ydF9jbG9jayk7Ci0KLQlpbnRlbF9kcC0+RFAgJj0gfkRQX1BMTF9GUkVRX01BU0s7Ci0K LQlpZiAocGlwZV9jb25maWctPnBvcnRfY2xvY2sgPT0gMTYyMDAwKQotCQlpbnRlbF9kcC0+RFAg fD0gRFBfUExMX0ZSRVFfMTYyTUhaOwotCWVsc2UKLQkJaW50ZWxfZHAtPkRQIHw9IERQX1BMTF9G UkVRXzI3ME1IWjsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUF9BLCBpbnRlbF9kcC0+ RFApOwotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRFBfQSk7Ci0JdWRlbGF5KDUw MCk7Ci0KLQkvKgotCSAqIFtEZXZJTEtdIFdvcmsgYXJvdW5kIHJlcXVpcmVkIHdoZW4gZW5hYmxp bmcgRFAgUExMCi0JICogd2hpbGUgYSBwaXBlIGlzIGVuYWJsZWQgZ29pbmcgdG8gRkRJOgotCSAq IDEuIFdhaXQgZm9yIHRoZSBzdGFydCBvZiB2ZXJ0aWNhbCBibGFuayBvbiB0aGUgZW5hYmxlZCBw aXBlIGdvaW5nIHRvIEZESQotCSAqIDIuIFByb2dyYW0gRFAgUExMIGVuYWJsZQotCSAqLwotCWlm IChJU19HRU4oZGV2X3ByaXYsIDUpKQotCQlpbnRlbF93YWl0X2Zvcl92YmxhbmtfaWZfYWN0aXZl KGRldl9wcml2LCAhY3J0Yy0+cGlwZSk7Ci0KLQlpbnRlbF9kcC0+RFAgfD0gRFBfUExMX0VOQUJM RTsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUF9BLCBpbnRlbF9kcC0+RFApOwotCWlu dGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRFBfQSk7Ci0JdWRlbGF5KDIwMCk7Ci19Ci0K LXN0YXRpYyB2b2lkIGlsa19lZHBfcGxsX29mZihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAot CQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKLXsK LQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMob2xkX2NydGNfc3RhdGUt PnVhcGkuY3J0Yyk7Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkx NShjcnRjLT5iYXNlLmRldik7Ci0KLQlhc3NlcnRfcGlwZV9kaXNhYmxlZChkZXZfcHJpdiwgb2xk X2NydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyKTsKLQlhc3NlcnRfZHBfcG9ydF9kaXNhYmxlZChp bnRlbF9kcCk7Ci0JYXNzZXJ0X2VkcF9wbGxfZW5hYmxlZChkZXZfcHJpdik7Ci0KLQlkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwgImRpc2FibGluZyBlRFAgUExMXG4iKTsKLQotCWludGVsX2Rw LT5EUCAmPSB+RFBfUExMX0VOQUJMRTsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBEUF9B LCBpbnRlbF9kcC0+RFApOwotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwgRFBfQSk7 Ci0JdWRlbGF5KDIwMCk7Ci19Ci0KIHN0YXRpYyBib29sIGRvd25zdHJlYW1faHBkX25lZWRzX2Qw KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCiB7CiAJLyoKQEAgLTIxODAsMTYwICsxOTMzLDYg QEAgdm9pZCBpbnRlbF9kcF9zZXRfcG93ZXIoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdTgg bW9kZSkKIAkJCSAgICBtb2RlID09IERQX1NFVF9QT1dFUl9EMCA/ICJEMCIgOiAiRDMiKTsKIH0K IAotc3RhdGljIGJvb2wgY3B0X2RwX3BvcnRfc2VsZWN0ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAotCQkJCSBlbnVtIHBvcnQgcG9ydCwgZW51bSBwaXBlICpwaXBlKQotewot CWVudW0gcGlwZSBwOwotCi0JZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwgcCkgewotCQl1MzIgdmFs ID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgVFJBTlNfRFBfQ1RMKHApKTsKLQotCQlpZiAoKHZh bCAmIFRSQU5TX0RQX1BPUlRfU0VMX01BU0spID09IFRSQU5TX0RQX1BPUlRfU0VMKHBvcnQpKSB7 Ci0JCQkqcGlwZSA9IHA7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCWRybV9kYmdfa21z KCZkZXZfcHJpdi0+ZHJtLCAiTm8gcGlwZSBmb3IgRFAgcG9ydCAlYyBmb3VuZFxuIiwKLQkJICAg IHBvcnRfbmFtZShwb3J0KSk7Ci0KLQkvKiBtdXN0IGluaXRpYWxpemUgcGlwZSB0byBzb21ldGhp bmcgZm9yIHRoZSBhc3NlcnRzICovCi0JKnBpcGUgPSBQSVBFX0E7Ci0KLQlyZXR1cm4gZmFsc2U7 Ci19Ci0KLWJvb2wgaW50ZWxfZHBfcG9ydF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKLQkJCSAgIGk5MTVfcmVnX3QgZHBfcmVnLCBlbnVtIHBvcnQgcG9ydCwKLQkJ CSAgIGVudW0gcGlwZSAqcGlwZSkKLXsKLQlib29sIHJldDsKLQl1MzIgdmFsOwotCi0JdmFsID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgZHBfcmVnKTsKLQotCXJldCA9IHZhbCAmIERQX1BPUlRf RU47Ci0KLQkvKiBhc3NlcnRzIHdhbnQgdG8ga25vdyB0aGUgcGlwZSBldmVuIGlmIHRoZSBwb3J0 IGlzIGRpc2FibGVkICovCi0JaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9PSBQ T1JUX0EpCi0JCSpwaXBlID0gKHZhbCAmIERQX1BJUEVfU0VMX01BU0tfSVZCKSA+PiBEUF9QSVBF X1NFTF9TSElGVF9JVkI7Ci0JZWxzZSBpZiAoSEFTX1BDSF9DUFQoZGV2X3ByaXYpICYmIHBvcnQg IT0gUE9SVF9BKQotCQlyZXQgJj0gY3B0X2RwX3BvcnRfc2VsZWN0ZWQoZGV2X3ByaXYsIHBvcnQs IHBpcGUpOwotCWVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQotCQkqcGlwZSA9ICh2 YWwgJiBEUF9QSVBFX1NFTF9NQVNLX0NIVikgPj4gRFBfUElQRV9TRUxfU0hJRlRfQ0hWOwotCWVs c2UKLQkJKnBpcGUgPSAodmFsICYgRFBfUElQRV9TRUxfTUFTSykgPj4gRFBfUElQRV9TRUxfU0hJ RlQ7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgYm9vbCBpbnRlbF9kcF9nZXRfaHdfc3Rh dGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkJICBlbnVtIHBpcGUgKnBpcGUp Ci17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVy LT5iYXNlLmRldik7Ci0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9k cChlbmNvZGVyKTsKLQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKLQlib29sIHJldDsKLQotCXdh a2VyZWYgPSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldF9pZl9lbmFibGVkKGRldl9wcml2LAotCQkJ CQkJICAgICBlbmNvZGVyLT5wb3dlcl9kb21haW4pOwotCWlmICghd2FrZXJlZikKLQkJcmV0dXJu IGZhbHNlOwotCi0JcmV0ID0gaW50ZWxfZHBfcG9ydF9lbmFibGVkKGRldl9wcml2LCBpbnRlbF9k cC0+b3V0cHV0X3JlZywKLQkJCQkgICAgZW5jb2Rlci0+cG9ydCwgcGlwZSk7Ci0KLQlpbnRlbF9k aXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgZW5jb2Rlci0+cG93ZXJfZG9tYWluLCB3YWtlcmVm KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVsX2RwX2dldF9jb25maWco c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkJc3RydWN0IGludGVsX2NydGNfc3Rh dGUgKnBpcGVfY29uZmlnKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwotCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Ci0JdTMyIHRtcCwgZmxhZ3MgPSAwOwotCWVudW0g cG9ydCBwb3J0ID0gZW5jb2Rlci0+cG9ydDsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRv X2ludGVsX2NydGMocGlwZV9jb25maWctPnVhcGkuY3J0Yyk7Ci0KLQlpZiAoZW5jb2Rlci0+dHlw ZSA9PSBJTlRFTF9PVVRQVVRfRURQKQotCQlwaXBlX2NvbmZpZy0+b3V0cHV0X3R5cGVzIHw9IEJJ VChJTlRFTF9PVVRQVVRfRURQKTsKLQllbHNlCi0JCXBpcGVfY29uZmlnLT5vdXRwdXRfdHlwZXMg fD0gQklUKElOVEVMX09VVFBVVF9EUCk7Ci0KLQl0bXAgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2 LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Ci0KLQlwaXBlX2NvbmZpZy0+aGFzX2F1ZGlvID0gdG1w ICYgRFBfQVVESU9fT1VUUFVUX0VOQUJMRSAmJiBwb3J0ICE9IFBPUlRfQTsKLQotCWlmIChIQVNf UENIX0NQVChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpIHsKLQkJdTMyIHRyYW5zX2RwID0g aW50ZWxfZGVfcmVhZChkZXZfcHJpdiwKLQkJCQkJICAgICBUUkFOU19EUF9DVEwoY3J0Yy0+cGlw ZSkpOwotCi0JCWlmICh0cmFuc19kcCAmIFRSQU5TX0RQX0hTWU5DX0FDVElWRV9ISUdIKQotCQkJ ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QSFNZTkM7Ci0JCWVsc2UKLQkJCWZsYWdzIHw9IERSTV9N T0RFX0ZMQUdfTkhTWU5DOwotCi0JCWlmICh0cmFuc19kcCAmIFRSQU5TX0RQX1ZTWU5DX0FDVElW RV9ISUdIKQotCQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QVlNZTkM7Ci0JCWVsc2UKLQkJCWZs YWdzIHw9IERSTV9NT0RFX0ZMQUdfTlZTWU5DOwotCX0gZWxzZSB7Ci0JCWlmICh0bXAgJiBEUF9T WU5DX0hTX0hJR0gpCi0JCQlmbGFncyB8PSBEUk1fTU9ERV9GTEFHX1BIU1lOQzsKLQkJZWxzZQot CQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7Ci0KLQkJaWYgKHRtcCAmIERQX1NZTkNf VlNfSElHSCkKLQkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUFZTWU5DOwotCQllbHNlCi0JCQlm bGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKLQl9Ci0KLQlwaXBlX2NvbmZpZy0+aHcuYWRq dXN0ZWRfbW9kZS5mbGFncyB8PSBmbGFnczsKLQotCWlmIChJU19HNFgoZGV2X3ByaXYpICYmIHRt cCAmIERQX0NPTE9SX1JBTkdFXzE2XzIzNSkKLQkJcGlwZV9jb25maWctPmxpbWl0ZWRfY29sb3Jf cmFuZ2UgPSB0cnVlOwotCi0JcGlwZV9jb25maWctPmxhbmVfY291bnQgPQotCQkoKHRtcCAmIERQ X1BPUlRfV0lEVEhfTUFTSykgPj4gRFBfUE9SVF9XSURUSF9TSElGVCkgKyAxOwotCi0JaW50ZWxf ZHBfZ2V0X21fbihjcnRjLCBwaXBlX2NvbmZpZyk7Ci0KLQlpZiAocG9ydCA9PSBQT1JUX0EpIHsK LQkJaWYgKChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBEUF9BKSAmIERQX1BMTF9GUkVRX01BU0sp ID09IERQX1BMTF9GUkVRXzE2Mk1IWikKLQkJCXBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrID0gMTYy MDAwOwotCQllbHNlCi0JCQlwaXBlX2NvbmZpZy0+cG9ydF9jbG9jayA9IDI3MDAwMDsKLQl9Ci0K LQlwaXBlX2NvbmZpZy0+aHcuYWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrID0KLQkJaW50ZWxfZG90 Y2xvY2tfY2FsY3VsYXRlKHBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrLAotCQkJCQkgJnBpcGVfY29u ZmlnLT5kcF9tX24pOwotCi0JaWYgKGludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkgJiYgZGV2X3By aXYtPnZidC5lZHAuYnBwICYmCi0JICAgIHBpcGVfY29uZmlnLT5waXBlX2JwcCA+IGRldl9wcml2 LT52YnQuZWRwLmJwcCkgewotCQkvKgotCQkgKiBUaGlzIGlzIGEgYmlnIGZhdCB1Z2x5IGhhY2su Ci0JCSAqCi0JCSAqIFNvbWUgbWFjaGluZXMgaW4gVUVGSSBib290IG1vZGUgcHJvdmlkZSB1cyBh IFZCVCB0aGF0IGhhcyAxOAotCQkgKiBicHAgYW5kIDEuNjIgR0h6IGxpbmsgYmFuZHdpZHRoIGZv ciBlRFAsIHdoaWNoIGZvciByZWFzb25zCi0JCSAqIHVua25vd24gd2UgZmFpbCB0byBsaWdodCB1 cC4gWWV0IHRoZSBzYW1lIEJJT1MgYm9vdHMgdXAgd2l0aAotCQkgKiAyNCBicHAgYW5kIDIuNyBH SHogbGluay4gVXNlIHRoZSBzYW1lIGJwcCBhcyB0aGUgQklPUyB1c2VzIGFzCi0JCSAqIG1heCwg bm90IHdoYXQgaXQgdGVsbHMgdXMgdG8gdXNlLgotCQkgKgotCQkgKiBOb3RlOiBUaGlzIHdpbGwg c3RpbGwgYmUgYnJva2VuIGlmIHRoZSBlRFAgcGFuZWwgaXMgbm90IGxpdAotCQkgKiB1cCBieSB0 aGUgQklPUywgYW5kIHRodXMgd2UgY2FuJ3QgZ2V0IHRoZSBtb2RlIGF0IG1vZHVsZQotCQkgKiBs b2FkLgotCQkgKi8KLQkJZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sCi0JCQkgICAgInBpcGUg aGFzICVkIGJwcCBmb3IgZURQIHBhbmVsLCBvdmVycmlkaW5nIEJJT1MtcHJvdmlkZWQgbWF4ICVk IGJwcFxuIiwKLQkJCSAgICBwaXBlX2NvbmZpZy0+cGlwZV9icHAsIGRldl9wcml2LT52YnQuZWRw LmJwcCk7Ci0JCWRldl9wcml2LT52YnQuZWRwLmJwcCA9IHBpcGVfY29uZmlnLT5waXBlX2JwcDsK LQl9Ci19Ci0KIHN0YXRpYyBib29sCiBpbnRlbF9kcF9nZXRfZHBjZChzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKTsKIApAQCAtMjQwMCwxMTggKzE5OTksNiBAQCBib29sIGludGVsX2RwX2luaXRp YWxfZmFzdHNldF9jaGVjayhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKIAlyZXR1cm4g dHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRv bWljX3N0YXRlICpzdGF0ZSwKLQkJCSAgICAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIs Ci0JCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwK LQkJCSAgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRl KQotewotCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rl cik7Ci0KLQlpbnRlbF9kcC0+bGlua190cmFpbmVkID0gZmFsc2U7Ci0KLQlpZiAob2xkX2NydGNf c3RhdGUtPmhhc19hdWRpbykKLQkJaW50ZWxfYXVkaW9fY29kZWNfZGlzYWJsZShlbmNvZGVyLAot CQkJCQkgIG9sZF9jcnRjX3N0YXRlLCBvbGRfY29ubl9zdGF0ZSk7Ci0KLQkvKiBNYWtlIHN1cmUg dGhlIHBhbmVsIGlzIG9mZiBiZWZvcmUgdHJ5aW5nIHRvIGNoYW5nZSB0aGUgbW9kZS4gQnV0IGFs c28KLQkgKiBlbnN1cmUgdGhhdCB3ZSBoYXZlIHZkZCB3aGlsZSB3ZSBzd2l0Y2ggb2ZmIHRoZSBw YW5lbC4gKi8KLQlpbnRlbF9wcHNfdmRkX29uKGludGVsX2RwKTsKLQlpbnRlbF9lZHBfYmFja2xp Z2h0X29mZihvbGRfY29ubl9zdGF0ZSk7Ci0JaW50ZWxfZHBfc2V0X3Bvd2VyKGludGVsX2RwLCBE UF9TRVRfUE9XRVJfRDMpOwotCWludGVsX3Bwc19vZmYoaW50ZWxfZHApOwotfQotCi1zdGF0aWMg dm9pZCBnNHhfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJ CSAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJICAgY29uc3Qgc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLAotCQkJICAgY29uc3Qgc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQotewotCWludGVsX2Rpc2FibGVfZHAoc3Rh dGUsIGVuY29kZXIsIG9sZF9jcnRjX3N0YXRlLCBvbGRfY29ubl9zdGF0ZSk7Ci19Ci0KLXN0YXRp YyB2b2lkIHZsdl9kaXNhYmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAot CQkJICAgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCi0JCQkgICBjb25zdCBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUpCi17Ci0JaW50ZWxfZGlzYWJsZV9kcChz dGF0ZSwgZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUsIG9sZF9jb25uX3N0YXRlKTsKLX0KLQotc3Rh dGljIHZvaWQgZzR4X3Bvc3RfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpz dGF0ZSwKLQkJCQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKLQkJCQljb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCi0JCQkJY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7Ci0JZW51bSBwb3J0IHBvcnQgPSBl bmNvZGVyLT5wb3J0OwotCi0JLyoKLQkgKiBCc3BlYyBkb2VzIG5vdCBsaXN0IGEgc3BlY2lmaWMg ZGlzYWJsZSBzZXF1ZW5jZSBmb3IgZzR4IERQLgotCSAqIEZvbGxvdyB0aGUgaWxrKyBzZXF1ZW5j ZSAoZGlzYWJsZSBwaXBlIGJlZm9yZSB0aGUgcG9ydCkgZm9yCi0JICogZzR4IERQIGFzIGl0IGRv ZXMgbm90IHN1ZmZlciBmcm9tIHVuZGVycnVucyBsaWtlIHRoZSBub3JtYWwKLQkgKiBnNHggbW9k ZXNldCBzZXF1ZW5jZSAoZGlzYWJsZSBwaXBlIGFmdGVyIHRoZSBwb3J0KS4KLQkgKi8KLQlpbnRl bF9kcF9saW5rX2Rvd24oZW5jb2Rlciwgb2xkX2NydGNfc3RhdGUpOwotCi0JLyogT25seSBpbGsr IGhhcyBwb3J0IEEgKi8KLQlpZiAocG9ydCA9PSBQT1JUX0EpCi0JCWlsa19lZHBfcGxsX29mZihp bnRlbF9kcCwgb2xkX2NydGNfc3RhdGUpOwotfQotCi1zdGF0aWMgdm9pZCB2bHZfcG9zdF9kaXNh YmxlX2RwKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAotCQkJCXN0cnVjdCBpbnRl bF9lbmNvZGVyICplbmNvZGVyLAotCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpv bGRfY3J0Y19zdGF0ZSwKLQkJCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xk X2Nvbm5fc3RhdGUpCi17Ci0JaW50ZWxfZHBfbGlua19kb3duKGVuY29kZXIsIG9sZF9jcnRjX3N0 YXRlKTsKLX0KLQotc3RhdGljIHZvaWQgY2h2X3Bvc3RfZGlzYWJsZV9kcChzdHJ1Y3QgaW50ZWxf YXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwK LQkJCQljb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUsCi0JCQkJ Y29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlKQotewotCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5k ZXYpOwotCi0JaW50ZWxfZHBfbGlua19kb3duKGVuY29kZXIsIG9sZF9jcnRjX3N0YXRlKTsKLQot CXZsdl9kcGlvX2dldChkZXZfcHJpdik7Ci0KLQkvKiBBc3NlcnQgZGF0YSBsYW5lIHJlc2V0ICov Ci0JY2h2X2RhdGFfbGFuZV9zb2Z0X3Jlc2V0KGVuY29kZXIsIG9sZF9jcnRjX3N0YXRlLCB0cnVl KTsKLQotCXZsdl9kcGlvX3B1dChkZXZfcHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jcHRfc2V0 X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgIHU4IGRwX3RyYWluX3BhdCkKLXsK LQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2Rw KTsKLQl1MzIgKkRQID0gJmludGVsX2RwLT5EUDsKLQotCSpEUCAmPSB+RFBfTElOS19UUkFJTl9N QVNLX0NQVDsKLQotCXN3aXRjaCAoaW50ZWxfZHBfdHJhaW5pbmdfcGF0dGVybl9zeW1ib2woZHBf dHJhaW5fcGF0KSkgewotCWNhc2UgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFOgotCQkqRFAg fD0gRFBfTElOS19UUkFJTl9PRkZfQ1BUOwotCQlicmVhazsKLQljYXNlIERQX1RSQUlOSU5HX1BB VFRFUk5fMToKLQkJKkRQIHw9IERQX0xJTktfVFJBSU5fUEFUXzFfQ1BUOwotCQlicmVhazsKLQlj YXNlIERQX1RSQUlOSU5HX1BBVFRFUk5fMjoKLQkJKkRQIHw9IERQX0xJTktfVFJBSU5fUEFUXzJf Q1BUOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0UoaW50ZWxfZHBfdHJhaW5p bmdfcGF0dGVybl9zeW1ib2woZHBfdHJhaW5fcGF0KSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpbnRl bF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIGludGVsX2RwLT5EUCk7 Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7 Ci19Ci0KIHN0YXRpYyB2b2lkIGludGVsX2RwX2dldF9wY29uX2RzY19jYXAoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3Rv X2k5MTUoaW50ZWxfZHApOwpAQCAtMjc4Niw1OSArMjI3Myw2IEBAIGludGVsX2RwX3Bjb25fZHNj X2NvbmZpZ3VyZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAogCQlkcm1fZGJnX2ttcygmaTkx NS0+ZHJtLCAiRmFpbGVkIHRvIHNldCBwY29uIERTQ1xuIik7CiB9CiAKLXN0YXRpYyB2b2lkCi1n NHhfc2V0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJICAgY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCi0JCSAgIHU4IGRwX3RyYWluX3Bh dCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGlu dGVsX2RwKTsKLQl1MzIgKkRQID0gJmludGVsX2RwLT5EUDsKLQotCSpEUCAmPSB+RFBfTElOS19U UkFJTl9NQVNLOwotCi0Jc3dpdGNoIChpbnRlbF9kcF90cmFpbmluZ19wYXR0ZXJuX3N5bWJvbChk cF90cmFpbl9wYXQpKSB7Ci0JY2FzZSBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEU6Ci0JCSpE UCB8PSBEUF9MSU5LX1RSQUlOX09GRjsKLQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTklOR19QQVRU RVJOXzE6Ci0JCSpEUCB8PSBEUF9MSU5LX1RSQUlOX1BBVF8xOwotCQlicmVhazsKLQljYXNlIERQ X1RSQUlOSU5HX1BBVFRFUk5fMjoKLQkJKkRQIHw9IERQX0xJTktfVFJBSU5fUEFUXzI7Ci0JCWJy ZWFrOwotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShpbnRlbF9kcF90cmFpbmluZ19wYXR0ZXJu X3N5bWJvbChkcF90cmFpbl9wYXQpKTsKLQkJcmV0dXJuOwotCX0KLQotCWludGVsX2RlX3dyaXRl KGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgaW50ZWxfZHAtPkRQKTsKLQlpbnRlbF9k ZV9wb3N0aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKLX0KLQotc3Rh dGljIHZvaWQgaW50ZWxfZHBfZW5hYmxlX3BvcnQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwK LQkJCQkgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0K LQkvKiBlbmFibGUgd2l0aCBwYXR0ZXJuIDEgKGFzIHBlciBzcGVjKSAqLwotCi0JaW50ZWxfZHBf cHJvZ3JhbV9saW5rX3RyYWluaW5nX3BhdHRlcm4oaW50ZWxfZHAsIGNydGNfc3RhdGUsCi0JCQkJ CSAgICAgICBEUF9UUkFJTklOR19QQVRURVJOXzEpOwotCi0JLyoKLQkgKiBNYWdpYyBmb3IgVkxW L0NIVi4gV2UgX211c3RfIGZpcnN0IHNldCB1cCB0aGUgcmVnaXN0ZXIKLQkgKiB3aXRob3V0IGFj dHVhbGx5IGVuYWJsaW5nIHRoZSBwb3J0LCBhbmQgdGhlbiBkbyBhbm90aGVyCi0JICogd3JpdGUg dG8gZW5hYmxlIHRoZSBwb3J0LiBPdGhlcndpc2UgbGluayB0cmFpbmluZyB3aWxsCi0JICogZmFp bCB3aGVuIHRoZSBwb3dlciBzZXF1ZW5jZXIgaXMgZnJlc2hseSB1c2VkIGZvciB0aGlzIHBvcnQu Ci0JICovCi0JaW50ZWxfZHAtPkRQIHw9IERQX1BPUlRfRU47Ci0JaWYgKGNydGNfc3RhdGUtPmhh c19hdWRpbykKLQkJaW50ZWxfZHAtPkRQIHw9IERQX0FVRElPX09VVFBVVF9FTkFCTEU7Ci0KLQlp bnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIGludGVsX2RwLT5E UCk7Ci0JaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3Jl Zyk7Ci19Ci0KIHZvaWQgaW50ZWxfZHBfY29uZmlndXJlX3Byb3RvY29sX2NvbnZlcnRlcihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSkKIHsKQEAgLTI5MDcsNTU3ICsyMzQxLDYgQEAgdm9pZCBpbnRlbF9k cF9jb25maWd1cmVfcHJvdG9jb2xfY29udmVydGVyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAs CiAJCQkgICBlbmFibGVkZGlzYWJsZWQodG1wID8gdHJ1ZSA6IGZhbHNlKSk7CiB9CiAKLXN0YXRp YyB2b2lkIGludGVsX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwK LQkJCSAgICBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKLQkJCSAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCi0JCQkgICAgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Ci0Jc3RydWN0IGludGVs X2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKLQlzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMocGlwZV9jb25maWctPnVhcGkuY3J0Yyk7Ci0JdTMy IGRwX3JlZyA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsK LQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Ci0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7 Ci0KLQlpZiAoZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGRwX3JlZyAmIERQX1BPUlRfRU4p KQotCQlyZXR1cm47Ci0KLQl3aXRoX2ludGVsX3Bwc19sb2NrKGludGVsX2RwLCB3YWtlcmVmKSB7 Ci0JCWlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2 KSkKLQkJCXZsdl9wcHNfaW5pdChlbmNvZGVyLCBwaXBlX2NvbmZpZyk7Ci0KLQkJaW50ZWxfZHBf ZW5hYmxlX3BvcnQoaW50ZWxfZHAsIHBpcGVfY29uZmlnKTsKLQotCQlpbnRlbF9wcHNfdmRkX29u X3VubG9ja2VkKGludGVsX2RwKTsKLQkJaW50ZWxfcHBzX29uX3VubG9ja2VkKGludGVsX2RwKTsK LQkJaW50ZWxfcHBzX3ZkZF9vZmZfdW5sb2NrZWQoaW50ZWxfZHAsIHRydWUpOwotCX0KLQotCWlm IChJU19WQUxMRVlWSUVXKGRldl9wcml2KSB8fCBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewot CQl1bnNpZ25lZCBpbnQgbGFuZV9tYXNrID0gMHgwOwotCi0JCWlmIChJU19DSEVSUllWSUVXKGRl dl9wcml2KSkKLQkJCWxhbmVfbWFzayA9IGludGVsX2RwX3VudXNlZF9sYW5lX21hc2socGlwZV9j b25maWctPmxhbmVfY291bnQpOwotCi0JCXZsdl93YWl0X3BvcnRfcmVhZHkoZGV2X3ByaXYsIGRw X3RvX2RpZ19wb3J0KGludGVsX2RwKSwKLQkJCQkgICAgbGFuZV9tYXNrKTsKLQl9Ci0KLQlpbnRl bF9kcF9zZXRfcG93ZXIoaW50ZWxfZHAsIERQX1NFVF9QT1dFUl9EMCk7Ci0JaW50ZWxfZHBfY29u ZmlndXJlX3Byb3RvY29sX2NvbnZlcnRlcihpbnRlbF9kcCwgcGlwZV9jb25maWcpOwotCWludGVs X2RwX2NoZWNrX2ZybF90cmFpbmluZyhpbnRlbF9kcCk7Ci0JaW50ZWxfZHBfcGNvbl9kc2NfY29u ZmlndXJlKGludGVsX2RwLCBwaXBlX2NvbmZpZyk7Ci0JaW50ZWxfZHBfc3RhcnRfbGlua190cmFp bihpbnRlbF9kcCwgcGlwZV9jb25maWcpOwotCWludGVsX2RwX3N0b3BfbGlua190cmFpbihpbnRl bF9kcCwgcGlwZV9jb25maWcpOwotCi0JaWYgKHBpcGVfY29uZmlnLT5oYXNfYXVkaW8pIHsKLQkJ ZHJtX2RiZygmZGV2X3ByaXYtPmRybSwgIkVuYWJsaW5nIERQIGF1ZGlvIG9uIHBpcGUgJWNcbiIs Ci0JCQlwaXBlX25hbWUocGlwZSkpOwotCQlpbnRlbF9hdWRpb19jb2RlY19lbmFibGUoZW5jb2Rl ciwgcGlwZV9jb25maWcsIGNvbm5fc3RhdGUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgZzR4X2Vu YWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCSAgc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXIsCi0JCQkgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpwaXBlX2NvbmZpZywKLQkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGUpCi17Ci0JaW50ZWxfZW5hYmxlX2RwKHN0YXRlLCBlbmNvZGVyLCBwaXBlX2NvbmZp ZywgY29ubl9zdGF0ZSk7Ci0JaW50ZWxfZWRwX2JhY2tsaWdodF9vbihwaXBlX2NvbmZpZywgY29u bl9zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9lbmFibGVfZHAoc3RydWN0IGludGVsX2F0 b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAot CQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcsCi0JCQkgIGNv bnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQotewotCWludGVsX2Vk cF9iYWNrbGlnaHRfb24ocGlwZV9jb25maWcsIGNvbm5fc3RhdGUpOwotfQotCi1zdGF0aWMgdm9p ZCBnNHhfcHJlX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJ CSAgICAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJICAgICAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAotCQkJICAgICAgY29uc3Qgc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsKLQllbnVtIHBvcnQgcG9ydCA9IGVu Y29kZXItPnBvcnQ7Ci0KLQlpbnRlbF9kcF9wcmVwYXJlKGVuY29kZXIsIHBpcGVfY29uZmlnKTsK LQotCS8qIE9ubHkgaWxrKyBoYXMgcG9ydCBBICovCi0JaWYgKHBvcnQgPT0gUE9SVF9BKQotCQlp bGtfZWRwX3BsbF9vbihpbnRlbF9kcCwgcGlwZV9jb25maWcpOwotfQotCi1zdGF0aWMgdm9pZCB2 bHZfcHJlX2VuYWJsZV9kcChzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCSAg ICAgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJICAgICAgY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0Jdmx2X3BoeV9wcmVfZW5jb2Rlcl9l bmFibGUoZW5jb2RlciwgcGlwZV9jb25maWcpOwotCi0JaW50ZWxfZW5hYmxlX2RwKHN0YXRlLCBl bmNvZGVyLCBwaXBlX2NvbmZpZywgY29ubl9zdGF0ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZsdl9k cF9wcmVfcGxsX2VuYWJsZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkJCQkg IHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJCSAgY29uc3Qgc3RydWN0IGludGVs X2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAotCQkJCSAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0JaW50ZWxfZHBfcHJlcGFyZShlbmNvZGVyLCBwaXBl X2NvbmZpZyk7Ci0KLQl2bHZfcGh5X3ByZV9wbGxfZW5hYmxlKGVuY29kZXIsIHBpcGVfY29uZmln KTsKLX0KLQotc3RhdGljIHZvaWQgY2h2X3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVsX2F0b21p Y19zdGF0ZSAqc3RhdGUsCi0JCQkgICAgICBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwK LQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZywKLQkJ CSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQotewot CWNodl9waHlfcHJlX2VuY29kZXJfZW5hYmxlKGVuY29kZXIsIHBpcGVfY29uZmlnKTsKLQotCWlu dGVsX2VuYWJsZV9kcChzdGF0ZSwgZW5jb2RlciwgcGlwZV9jb25maWcsIGNvbm5fc3RhdGUpOwot Ci0JLyogU2Vjb25kIGNvbW1vbiBsYW5lIHdpbGwgc3RheSBhbGl2ZSBvbiBpdHMgb3duIG5vdyAq LwotCWNodl9waHlfcmVsZWFzZV9jbDJfb3ZlcnJpZGUoZW5jb2Rlcik7Ci19Ci0KLXN0YXRpYyB2 b2lkIGNodl9kcF9wcmVfcGxsX2VuYWJsZShzdHJ1Y3QgaW50ZWxfYXRvbWljX3N0YXRlICpzdGF0 ZSwKLQkJCQkgIHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkJCSAgY29uc3Qgc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnLAotCQkJCSAgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0JaW50ZWxfZHBfcHJlcGFyZShlbmNv ZGVyLCBwaXBlX2NvbmZpZyk7Ci0KLQljaHZfcGh5X3ByZV9wbGxfZW5hYmxlKGVuY29kZXIsIHBp cGVfY29uZmlnKTsKLX0KLQotc3RhdGljIHZvaWQgY2h2X2RwX3Bvc3RfcGxsX2Rpc2FibGUoc3Ry dWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkJICAgIHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xk X2NydGNfc3RhdGUsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpv bGRfY29ubl9zdGF0ZSkKLXsKLQljaHZfcGh5X3Bvc3RfcGxsX2Rpc2FibGUoZW5jb2Rlciwgb2xk X2NydGNfc3RhdGUpOwotfQotCi1zdGF0aWMgdTggaW50ZWxfZHBfdm9sdGFnZV9tYXhfMihzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwLAotCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSkKLXsKLQlyZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8y OwotfQotCi1zdGF0aWMgdTggaW50ZWxfZHBfdm9sdGFnZV9tYXhfMyhzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwLAotCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKLXsKLQlyZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8zOwotfQotCi1zdGF0 aWMgdTggaW50ZWxfZHBfcHJlZW1waF9tYXhfMihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQot ewotCXJldHVybiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOwotfQotCi1zdGF0aWMgdTggaW50 ZWxfZHBfcHJlZW1waF9tYXhfMyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQotewotCXJldHVy biBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zOwotfQotCi1zdGF0aWMgdm9pZCB2bHZfc2V0X3Np Z25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKLQkJCQkgIGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQotewotCXN0cnVjdCBpbnRlbF9lbmNvZGVy ICplbmNvZGVyID0gJmRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZTsKLQl1bnNpZ25lZCBs b25nIGRlbXBoX3JlZ192YWx1ZSwgcHJlZW1waF9yZWdfdmFsdWUsCi0JCXVuaXF0cmFuc2NhbGVf cmVnX3ZhbHVlOwotCXU4IHRyYWluX3NldCA9IGludGVsX2RwLT50cmFpbl9zZXRbMF07Ci0KLQlz d2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSB7Ci0JY2FzZSBE UF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgotCQlwcmVlbXBoX3JlZ192YWx1ZSA9IDB4MDAwNDAw MDsKLQkJc3dpdGNoICh0cmFpbl9zZXQgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsK LQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6Ci0JCQlkZW1waF9yZWdfdmFs dWUgPSAweDJCNDA1NTU1OwotCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1MkFCODNB OwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgotCQkJ ZGVtcGhfcmVnX3ZhbHVlID0gMHgyQjQwNDA0MDsKLQkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVl ID0gMHg1NTQ4QjgzQTsKLQkJCWJyZWFrOwotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TEVWRUxfMjoKLQkJCWRlbXBoX3JlZ192YWx1ZSA9IDB4MkIyNDU1NTU7Ci0JCQl1bmlxdHJhbnNj YWxlX3JlZ192YWx1ZSA9IDB4NTU2MEI4M0E7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9UUkFJTl9W T0xUQUdFX1NXSU5HX0xFVkVMXzM6Ci0JCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCNDA1NTU1Owot CQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1OThEQTNBOwotCQkJYnJlYWs7Ci0JCWRl ZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1Q SF9MRVZFTF8xOgotCQlwcmVlbXBoX3JlZ192YWx1ZSA9IDB4MDAwMjAwMDsKLQkJc3dpdGNoICh0 cmFpbl9zZXQgJiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKLQkJY2FzZSBEUF9UUkFJ Tl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA6Ci0JCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCNDA0MDQw OwotCQkJdW5pcXRyYW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1NTJCODNBOwotCQkJYnJlYWs7Ci0J CWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgotCQkJZGVtcGhfcmVnX3ZhbHVl ID0gMHgyQjQwNDg0ODsKLQkJCXVuaXF0cmFuc2NhbGVfcmVnX3ZhbHVlID0gMHg1NTgwQjgzQTsK LQkJCWJyZWFrOwotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMjoKLQkJCWRl bXBoX3JlZ192YWx1ZSA9IDB4MkI0MDQwNDA7Ci0JCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1ZSA9 IDB4NTVBRERBM0E7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQotCQli cmVhazsKLQljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzI6Ci0JCXByZWVtcGhfcmVnX3Zh bHVlID0gMHgwMDAwMDAwOwotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0Vf U1dJTkdfTUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJ CWRlbXBoX3JlZ192YWx1ZSA9IDB4MkIzMDU1NTU7Ci0JCQl1bmlxdHJhbnNjYWxlX3JlZ192YWx1 ZSA9IDB4NTU3MEI4M0E7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5H X0xFVkVMXzE6Ci0JCQlkZW1waF9yZWdfdmFsdWUgPSAweDJCMkI0MDQwOwotCQkJdW5pcXRyYW5z Y2FsZV9yZWdfdmFsdWUgPSAweDU1QUREQTNBOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQly ZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zOgot CQlwcmVlbXBoX3JlZ192YWx1ZSA9IDB4MDAwNjAwMDsKLQkJc3dpdGNoICh0cmFpbl9zZXQgJiBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0spIHsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NX SU5HX0xFVkVMXzA6Ci0JCQlkZW1waF9yZWdfdmFsdWUgPSAweDFCNDA1NTU1OwotCQkJdW5pcXRy YW5zY2FsZV9yZWdfdmFsdWUgPSAweDU1QUREQTNBOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0J CQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQotCXZs dl9zZXRfcGh5X3NpZ25hbF9sZXZlbChlbmNvZGVyLCBjcnRjX3N0YXRlLAotCQkJCSBkZW1waF9y ZWdfdmFsdWUsIHByZWVtcGhfcmVnX3ZhbHVlLAotCQkJCSB1bmlxdHJhbnNjYWxlX3JlZ192YWx1 ZSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNodl9zZXRfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwLAotCQkJCSAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNy dGNfc3RhdGUpCi17Ci0Jc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIgPSAmZHBfdG9fZGln X3BvcnQoaW50ZWxfZHApLT5iYXNlOwotCXUzMiBkZWVtcGhfcmVnX3ZhbHVlLCBtYXJnaW5fcmVn X3ZhbHVlOwotCWJvb2wgdW5pcV90cmFuc19zY2FsZSA9IGZhbHNlOwotCXU4IHRyYWluX3NldCA9 IGludGVsX2RwLT50cmFpbl9zZXRbMF07Ci0KLQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlO X1BSRV9FTVBIQVNJU19NQVNLKSB7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgot CQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQlj YXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRlZW1waF9yZWdfdmFsdWUg PSAxMjg7Ci0JCQltYXJnaW5fcmVnX3ZhbHVlID0gNTI7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9U UkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6Ci0JCQlkZWVtcGhfcmVnX3ZhbHVlID0gMTI4Owot CQkJbWFyZ2luX3JlZ192YWx1ZSA9IDc3OwotCQkJYnJlYWs7Ci0JCWNhc2UgRFBfVFJBSU5fVk9M VEFHRV9TV0lOR19MRVZFTF8yOgotCQkJZGVlbXBoX3JlZ192YWx1ZSA9IDEyODsKLQkJCW1hcmdp bl9yZWdfdmFsdWUgPSAxMDI7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NX SU5HX0xFVkVMXzM6Ci0JCQlkZWVtcGhfcmVnX3ZhbHVlID0gMTI4OwotCQkJbWFyZ2luX3JlZ192 YWx1ZSA9IDE1NDsKLQkJCXVuaXFfdHJhbnNfc2NhbGUgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCWRl ZmF1bHQ6Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1Q SF9MRVZFTF8xOgotCQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TUFTSykgewotCQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRlZW1w aF9yZWdfdmFsdWUgPSA4NTsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSA3ODsKLQkJCWJyZWFrOwot CQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMToKLQkJCWRlZW1waF9yZWdfdmFs dWUgPSA4NTsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxMTY7Ci0JCQlicmVhazsKLQkJY2FzZSBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzI6Ci0JCQlkZWVtcGhfcmVnX3ZhbHVlID0gODU7 Ci0JCQltYXJnaW5fcmVnX3ZhbHVlID0gMTU0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQly ZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOgot CQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQlj YXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRlZW1waF9yZWdfdmFsdWUg PSA2NDsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxMDQ7Ci0JCQlicmVhazsKLQkJY2FzZSBEUF9U UkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzE6Ci0JCQlkZWVtcGhfcmVnX3ZhbHVlID0gNjQ7Ci0J CQltYXJnaW5fcmVnX3ZhbHVlID0gMTU0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1 cm47Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zOgotCQlz d2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykgewotCQljYXNl IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDoKLQkJCWRlZW1waF9yZWdfdmFsdWUgPSA0 MzsKLQkJCW1hcmdpbl9yZWdfdmFsdWUgPSAxNTQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJ CXJldHVybjsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCi0JY2h2 X3NldF9waHlfc2lnbmFsX2xldmVsKGVuY29kZXIsIGNydGNfc3RhdGUsCi0JCQkJIGRlZW1waF9y ZWdfdmFsdWUsIG1hcmdpbl9yZWdfdmFsdWUsCi0JCQkJIHVuaXFfdHJhbnNfc2NhbGUpOwotfQot Ci1zdGF0aWMgdTMyIGc0eF9zaWduYWxfbGV2ZWxzKHU4IHRyYWluX3NldCkKLXsKLQl1MzIgc2ln bmFsX2xldmVscyA9IDA7Ci0KLQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlOX1ZPTFRBR0Vf U1dJTkdfTUFTSykgewotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wOgotCWRl ZmF1bHQ6Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBfVk9MVEFHRV8wXzQ7Ci0JCWJyZWFrOwotCWNh c2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xOgotCQlzaWduYWxfbGV2ZWxzIHw9IERQ X1ZPTFRBR0VfMF82OwotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVW RUxfMjoKLQkJc2lnbmFsX2xldmVscyB8PSBEUF9WT0xUQUdFXzBfODsKLQkJYnJlYWs7Ci0JY2Fz ZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzM6Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBf Vk9MVEFHRV8xXzI7Ci0JCWJyZWFrOwotCX0KLQlzd2l0Y2ggKHRyYWluX3NldCAmIERQX1RSQUlO X1BSRV9FTVBIQVNJU19NQVNLKSB7Ci0JY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wOgot CWRlZmF1bHQ6Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhBU0lTXzA7Ci0JCWJyZWFr OwotCWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMToKLQkJc2lnbmFsX2xldmVscyB8PSBE UF9QUkVfRU1QSEFTSVNfM181OwotCQlicmVhazsKLQljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xF VkVMXzI6Ci0JCXNpZ25hbF9sZXZlbHMgfD0gRFBfUFJFX0VNUEhBU0lTXzY7Ci0JCWJyZWFrOwot CWNhc2UgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMzoKLQkJc2lnbmFsX2xldmVscyB8PSBEUF9Q UkVfRU1QSEFTSVNfOV81OwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHNpZ25hbF9sZXZlbHM7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1nNHhfc2V0X3NpZ25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwKLQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShp bnRlbF9kcCk7Ci0JdTggdHJhaW5fc2V0ID0gaW50ZWxfZHAtPnRyYWluX3NldFswXTsKLQl1MzIg c2lnbmFsX2xldmVsczsKLQotCXNpZ25hbF9sZXZlbHMgPSBnNHhfc2lnbmFsX2xldmVscyh0cmFp bl9zZXQpOwotCi0JZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sICJVc2luZyBzaWduYWwgbGV2 ZWxzICUwOHhcbiIsCi0JCSAgICBzaWduYWxfbGV2ZWxzKTsKLQotCWludGVsX2RwLT5EUCAmPSB+ KERQX1ZPTFRBR0VfTUFTSyB8IERQX1BSRV9FTVBIQVNJU19NQVNLKTsKLQlpbnRlbF9kcC0+RFAg fD0gc2lnbmFsX2xldmVsczsKLQotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRlbF9kcC0+ b3V0cHV0X3JlZywgaW50ZWxfZHAtPkRQKTsKLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQoZGV2X3By aXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKLX0KLQotLyogU05CIENQVSBlRFAgdm9sdGFnZSBz d2luZyBhbmQgcHJlLWVtcGhhc2lzIGNvbnRyb2wgKi8KLXN0YXRpYyB1MzIgc25iX2NwdV9lZHBf c2lnbmFsX2xldmVscyh1OCB0cmFpbl9zZXQpCi17Ci0JdTggc2lnbmFsX2xldmVscyA9IHRyYWlu X3NldCAmIChEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX01BU0sgfAotCQkJCQlEUF9UUkFJTl9QUkVf RU1QSEFTSVNfTUFTSyk7Ci0KLQlzd2l0Y2ggKHNpZ25hbF9sZXZlbHMpIHsKLQljYXNlIERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6Ci0J Y2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEgfCBEUF9UUkFJTl9QUkVfRU1QSF9M RVZFTF8wOgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwXzYwME1WXzBEQl9TTkJfQjsKLQlj YXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9FTVBIX0xF VkVMXzE6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBNVl8zXzVEQl9TTkJfQjsKLQljYXNl IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVM XzI6Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzEgfCBEUF9UUkFJTl9QUkVf RU1QSF9MRVZFTF8yOgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwXzYwME1WXzZEQl9TTkJf QjsKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8IERQX1RSQUlOX1BSRV9F TVBIX0xFVkVMXzE6Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzIgfCBEUF9U UkFJTl9QUkVfRU1QSF9MRVZFTF8xOgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNjAwXzgwME1W XzNfNURCX1NOQl9COwotCWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yIHwgRFBf VFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKLQljYXNlIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVW RUxfMyB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJ Tl84MDBfMTIwME1WXzBEQl9TTkJfQjsKLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0Uoc2lnbmFs X2xldmVscyk7Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBfNjAwTVZfMERCX1NOQl9COwot CX0KLX0KLQotc3RhdGljIHZvaWQKLXNuYl9jcHVfZWRwX3NldF9zaWduYWxfbGV2ZWxzKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHAsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsKLQl1OCB0cmFpbl9zZXQgPSBpbnRlbF9kcC0+dHJhaW5f c2V0WzBdOwotCXUzMiBzaWduYWxfbGV2ZWxzOwotCi0Jc2lnbmFsX2xldmVscyA9IHNuYl9jcHVf ZWRwX3NpZ25hbF9sZXZlbHModHJhaW5fc2V0KTsKLQotCWRybV9kYmdfa21zKCZkZXZfcHJpdi0+ ZHJtLCAiVXNpbmcgc2lnbmFsIGxldmVscyAlMDh4XG4iLAotCQkgICAgc2lnbmFsX2xldmVscyk7 Ci0KLQlpbnRlbF9kcC0+RFAgJj0gfkVEUF9MSU5LX1RSQUlOX1ZPTF9FTVBfTUFTS19TTkI7Ci0J aW50ZWxfZHAtPkRQIHw9IHNpZ25hbF9sZXZlbHM7Ci0KLQlpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIGludGVsX2RwLT5EUCk7Ci0JaW50ZWxfZGVfcG9zdGlu Z19yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZyk7Ci19Ci0KLS8qIElWQiBDUFUg ZURQIHZvbHRhZ2Ugc3dpbmcgYW5kIHByZS1lbXBoYXNpcyBjb250cm9sICovCi1zdGF0aWMgdTMy IGl2Yl9jcHVfZWRwX3NpZ25hbF9sZXZlbHModTggdHJhaW5fc2V0KQotewotCXU4IHNpZ25hbF9s ZXZlbHMgPSB0cmFpbl9zZXQgJiAoRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLIHwKLQkJCQkJ RFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spOwotCi0Jc3dpdGNoIChzaWduYWxfbGV2ZWxzKSB7 Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1Q SF9MRVZFTF8wOgotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNDAwTVZfMERCX0lWQjsKLQljYXNl IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMCB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVM XzE6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl80MDBNVl8zXzVEQl9JVkI7Ci0JY2FzZSBEUF9U UkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzAgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8yOgot CWNhc2UgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5fUFJFX0VNUEhf TEVWRUxfMjoKLQkJcmV0dXJuIEVEUF9MSU5LX1RSQUlOXzQwME1WXzZEQl9JVkI7Ci0KLQljYXNl IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSB8IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVM XzA6Ci0JCXJldHVybiBFRFBfTElOS19UUkFJTl82MDBNVl8wREJfSVZCOwotCWNhc2UgRFBfVFJB SU5fVk9MVEFHRV9TV0lOR19MRVZFTF8xIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMToKLQkJ cmV0dXJuIEVEUF9MSU5LX1RSQUlOXzYwME1WXzNfNURCX0lWQjsKLQotCWNhc2UgRFBfVFJBSU5f Vk9MVEFHRV9TV0lOR19MRVZFTF8yIHwgRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMDoKLQkJcmV0 dXJuIEVEUF9MSU5LX1RSQUlOXzgwME1WXzBEQl9JVkI7Ci0JY2FzZSBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzIgfCBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgotCQlyZXR1cm4gRURQ X0xJTktfVFJBSU5fODAwTVZfM181REJfSVZCOwotCi0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNF KHNpZ25hbF9sZXZlbHMpOwotCQlyZXR1cm4gRURQX0xJTktfVFJBSU5fNTAwTVZfMERCX0lWQjsK LQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1pdmJfY3B1X2VkcF9zZXRfc2lnbmFsX2xldmVscyhzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7Ci0JdTggdHJhaW5fc2V0ID0gaW50ZWxfZHAtPnRyYWlu X3NldFswXTsKLQl1MzIgc2lnbmFsX2xldmVsczsKLQotCXNpZ25hbF9sZXZlbHMgPSBpdmJfY3B1 X2VkcF9zaWduYWxfbGV2ZWxzKHRyYWluX3NldCk7Ci0KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwgIlVzaW5nIHNpZ25hbCBsZXZlbHMgJTA4eFxuIiwKLQkJICAgIHNpZ25hbF9sZXZlbHMp OwotCi0JaW50ZWxfZHAtPkRQICY9IH5FRFBfTElOS19UUkFJTl9WT0xfRU1QX01BU0tfSVZCOwot CWludGVsX2RwLT5EUCB8PSBzaWduYWxfbGV2ZWxzOwotCi0JaW50ZWxfZGVfd3JpdGUoZGV2X3By aXYsIGludGVsX2RwLT5vdXRwdXRfcmVnLCBpbnRlbF9kcC0+RFApOwotCWludGVsX2RlX3Bvc3Rp bmdfcmVhZChkZXZfcHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcpOwotfQotCi1zdGF0aWMgdm9p ZAotaW50ZWxfZHBfbGlua19kb3duKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAotCQkg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCi17Ci0Jc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRl dik7Ci0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVy KTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9IHRvX2ludGVsX2NydGMob2xkX2NydGNfc3Rh dGUtPnVhcGkuY3J0Yyk7Ci0JZW51bSBwb3J0IHBvcnQgPSBlbmNvZGVyLT5wb3J0OwotCXUzMiBE UCA9IGludGVsX2RwLT5EUDsKLQotCWlmIChkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwKLQkJ CShpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZykgJgotCQkJIERQ X1BPUlRfRU4pID09IDApKQotCQlyZXR1cm47Ci0KLQlkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwgIlxuIik7Ci0KLQlpZiAoKElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9PSBQT1JU X0EpIHx8Ci0JICAgIChIQVNfUENIX0NQVChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpKSB7 Ci0JCURQICY9IH5EUF9MSU5LX1RSQUlOX01BU0tfQ1BUOwotCQlEUCB8PSBEUF9MSU5LX1RSQUlO X1BBVF9JRExFX0NQVDsKLQl9IGVsc2UgewotCQlEUCAmPSB+RFBfTElOS19UUkFJTl9NQVNLOwot CQlEUCB8PSBEUF9MSU5LX1RSQUlOX1BBVF9JRExFOwotCX0KLQlpbnRlbF9kZV93cml0ZShkZXZf cHJpdiwgaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQKTsKLQlpbnRlbF9kZV9wb3N0aW5nX3JlYWQo ZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKLQotCURQICY9IH4oRFBfUE9SVF9FTiB8 IERQX0FVRElPX09VVFBVVF9FTkFCTEUpOwotCWludGVsX2RlX3dyaXRlKGRldl9wcml2LCBpbnRl bF9kcC0+b3V0cHV0X3JlZywgRFApOwotCWludGVsX2RlX3Bvc3RpbmdfcmVhZChkZXZfcHJpdiwg aW50ZWxfZHAtPm91dHB1dF9yZWcpOwotCi0JLyoKLQkgKiBIVyB3b3JrYXJvdW5kIGZvciBJQlgs IHdlIG5lZWQgdG8gbW92ZSB0aGUgcG9ydAotCSAqIHRvIHRyYW5zY29kZXIgQSBhZnRlciBkaXNh YmxpbmcgaXQgdG8gYWxsb3cgdGhlCi0JICogbWF0Y2hpbmcgSERNSSBwb3J0IHRvIGJlIGVuYWJs ZWQgb24gdHJhbnNjb2RlciBBLgotCSAqLwotCWlmIChIQVNfUENIX0lCWChkZXZfcHJpdikgJiYg Y3J0Yy0+cGlwZSA9PSBQSVBFX0IgJiYgcG9ydCAhPSBQT1JUX0EpIHsKLQkJLyoKLQkJICogV2Ug Z2V0IENQVS9QQ0ggRklGTyB1bmRlcnJ1bnMgb24gdGhlIG90aGVyIHBpcGUgd2hlbgotCQkgKiBk b2luZyB0aGUgd29ya2Fyb3VuZC4gU3dlZXAgdGhlbSB1bmRlciB0aGUgcnVnLgotCQkgKi8KLQkJ aW50ZWxfc2V0X2NwdV9maWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgUElQRV9BLCBm YWxzZSk7Ci0JCWludGVsX3NldF9wY2hfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmcoZGV2X3ByaXYs IFBJUEVfQSwgZmFsc2UpOwotCi0JCS8qIGFsd2F5cyBlbmFibGUgd2l0aCBwYXR0ZXJuIDEgKGFz IHBlciBzcGVjKSAqLwotCQlEUCAmPSB+KERQX1BJUEVfU0VMX01BU0sgfCBEUF9MSU5LX1RSQUlO X01BU0spOwotCQlEUCB8PSBEUF9QT1JUX0VOIHwgRFBfUElQRV9TRUwoUElQRV9BKSB8Ci0JCQlE UF9MSU5LX1RSQUlOX1BBVF8xOwotCQlpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgaW50ZWxfZHAt Pm91dHB1dF9yZWcsIERQKTsKLQkJaW50ZWxfZGVfcG9zdGluZ19yZWFkKGRldl9wcml2LCBpbnRl bF9kcC0+b3V0cHV0X3JlZyk7Ci0KLQkJRFAgJj0gfkRQX1BPUlRfRU47Ci0JCWludGVsX2RlX3dy aXRlKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywgRFApOwotCQlpbnRlbF9kZV9wb3N0 aW5nX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKLQotCQlpbnRlbF93YWl0 X2Zvcl92YmxhbmtfaWZfYWN0aXZlKGRldl9wcml2LCBQSVBFX0EpOwotCQlpbnRlbF9zZXRfY3B1 X2ZpZm9fdW5kZXJydW5fcmVwb3J0aW5nKGRldl9wcml2LCBQSVBFX0EsIHRydWUpOwotCQlpbnRl bF9zZXRfcGNoX2ZpZm9fdW5kZXJydW5fcmVwb3J0aW5nKGRldl9wcml2LCBQSVBFX0EsIHRydWUp OwotCX0KLQotCW1zbGVlcChpbnRlbF9kcC0+cHBzLnBhbmVsX3Bvd2VyX2Rvd25fZGVsYXkpOwot Ci0JaW50ZWxfZHAtPkRQID0gRFA7Ci0KLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwg SVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKLQkJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Ci0K LQkJd2l0aF9pbnRlbF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikKLQkJCWludGVsX2RwLT5w cHMuYWN0aXZlX3BpcGUgPSBJTlZBTElEX1BJUEU7Ci0JfQotfQogCiBib29sIGludGVsX2RwX2dl dF9jb2xvcmltZXRyeV9zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIHsKQEAgLTQ5 NjEsNjQgKzM4NDQsNiBAQCB2b2lkIGludGVsX2RwX3BoeV90ZXN0KHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyKQogCQkgIkFjcXVpcmluZyBtb2Rlc2V0IGxvY2tzIGZhaWxlZCB3aXRoICVp XG4iLCByZXQpOwogfQogCi0vKgotICogSWYgZGlzcGxheSBpcyBub3cgY29ubmVjdGVkIGNoZWNr IGxpbmtzIHN0YXR1cywKLSAqIHRoZXJlIGhhcyBiZWVuIGtub3duIGlzc3VlcyBvZiBsaW5rIGxv c3MgdHJpZ2dlcmluZwotICogbG9uZyBwdWxzZS4KLSAqCi0gKiBTb21lIHNpbmtzIChlZy4gQVNV UyBQQjI4N1EpIHNlZW0gdG8gcGVyZm9ybSBzb21lCi0gKiB3ZWlyZCBIUEQgcGluZyBwb25nIGR1 cmluZyBtb2Rlc2V0cy4gU28gd2UgY2FuIGFwcGFyZW50bHkKLSAqIGVuZCB1cCB3aXRoIEhQRCBn b2luZyBsb3cgZHVyaW5nIGEgbW9kZXNldCwgYW5kIHRoZW4KLSAqIGdvaW5nIGJhY2sgdXAgc29v biBhZnRlci4gQW5kIG9uY2UgdGhhdCBoYXBwZW5zIHdlIG11c3QKLSAqIHJldHJhaW4gdGhlIGxp bmsgdG8gZ2V0IGEgcGljdHVyZS4gVGhhdCdzIGluIGNhc2Ugbm8KLSAqIHVzZXJzcGFjZSBjb21w b25lbnQgcmVhY3RlZCB0byBpbnRlcm1pdHRlbnQgSFBEIGRpcC4KLSAqLwotc3RhdGljIGVudW0g aW50ZWxfaG90cGx1Z19zdGF0ZQotaW50ZWxfZHBfaG90cGx1ZyhzdHJ1Y3QgaW50ZWxfZW5jb2Rl ciAqZW5jb2RlciwKLQkJIHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZW5jX3RvX2ludGVsX2RwKGVuY29kZXIpOwotCXN0 cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7Ci0JZW51bSBpbnRlbF9ob3RwbHVnX3N0 YXRlIHN0YXRlOwotCWludCByZXQ7Ci0KLQlpZiAoaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF9h Y3RpdmUgJiYKLQkgICAgaW50ZWxfZHAtPmNvbXBsaWFuY2UudGVzdF90eXBlID09IERQX1RFU1Rf TElOS19QSFlfVEVTVF9QQVRURVJOKSB7Ci0JCWludGVsX2RwX3BoeV90ZXN0KGVuY29kZXIpOwot CQkvKiBqdXN0IGRvIHRoZSBQSFkgdGVzdCBhbmQgbm90aGluZyBlbHNlICovCi0JCXJldHVybiBJ TlRFTF9IT1RQTFVHX1VOQ0hBTkdFRDsKLQl9Ci0KLQlzdGF0ZSA9IGludGVsX2VuY29kZXJfaG90 cGx1ZyhlbmNvZGVyLCBjb25uZWN0b3IpOwotCi0JZHJtX21vZGVzZXRfYWNxdWlyZV9pbml0KCZj dHgsIDApOwotCi0JZm9yICg7OykgewotCQlyZXQgPSBpbnRlbF9kcF9yZXRyYWluX2xpbmsoZW5j b2RlciwgJmN0eCk7Ci0KLQkJaWYgKHJldCA9PSAtRURFQURMSykgewotCQkJZHJtX21vZGVzZXRf YmFja29mZigmY3R4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJYnJlYWs7Ci0JfQotCi0JZHJt X21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKLQlkcm1fbW9kZXNldF9hY3F1aXJlX2ZpbmkoJmN0 eCk7Ci0JZHJtX1dBUk4oZW5jb2Rlci0+YmFzZS5kZXYsIHJldCwKLQkJICJBY3F1aXJpbmcgbW9k ZXNldCBsb2NrcyBmYWlsZWQgd2l0aCAlaVxuIiwgcmV0KTsKLQotCS8qCi0JICogS2VlcGluZyBp dCBjb25zaXN0ZW50IHdpdGggaW50ZWxfZGRpX2hvdHBsdWcoKSBhbmQKLQkgKiBpbnRlbF9oZG1p X2hvdHBsdWcoKS4KLQkgKi8KLQlpZiAoc3RhdGUgPT0gSU5URUxfSE9UUExVR19VTkNIQU5HRUQg JiYgIWNvbm5lY3Rvci0+aG90cGx1Z19yZXRyaWVzKQotCQlzdGF0ZSA9IElOVEVMX0hPVFBMVUdf UkVUUlk7Ci0KLQlyZXR1cm4gc3RhdGU7Ci19Ci0KIHN0YXRpYyB2b2lkIGludGVsX2RwX2NoZWNr X2RldmljZV9zZXJ2aWNlX2lycShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogewogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7CkBAIC01MjAw LDY4ICs0MDI1LDYgQEAgZWRwX2RldGVjdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQogCXJl dHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIH0KIAotc3RhdGljIGJvb2wgaWJ4X2Rp Z2l0YWxfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCi17Ci0J c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNl LmRldik7Ci0JdTMyIGJpdCA9IGRldl9wcml2LT5ob3RwbHVnLnBjaF9ocGRbZW5jb2Rlci0+aHBk X3Bpbl07Ci0KLQlyZXR1cm4gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgU0RFSVNSKSAmIGJpdDsK LX0KLQotc3RhdGljIGJvb2wgZzR4X2RpZ2l0YWxfcG9ydF9jb25uZWN0ZWQoc3RydWN0IGludGVs X2VuY29kZXIgKmVuY29kZXIpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Ci0JdTMyIGJpdDsKLQotCXN3aXRjaCAoZW5j b2Rlci0+aHBkX3BpbikgewotCWNhc2UgSFBEX1BPUlRfQjoKLQkJYml0ID0gUE9SVEJfSE9UUExV R19MSVZFX1NUQVRVU19HNFg7Ci0JCWJyZWFrOwotCWNhc2UgSFBEX1BPUlRfQzoKLQkJYml0ID0g UE9SVENfSE9UUExVR19MSVZFX1NUQVRVU19HNFg7Ci0JCWJyZWFrOwotCWNhc2UgSFBEX1BPUlRf RDoKLQkJYml0ID0gUE9SVERfSE9UUExVR19MSVZFX1NUQVRVU19HNFg7Ci0JCWJyZWFrOwotCWRl ZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRShlbmNvZGVyLT5ocGRfcGluKTsKLQkJcmV0dXJuIGZhbHNl OwotCX0KLQotCXJldHVybiBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBQT1JUX0hPVFBMVUdfU1RB VCkgJiBiaXQ7Ci19Ci0KLXN0YXRpYyBib29sIGdtNDVfZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZChz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKLQl1MzIgYml0OwotCi0J c3dpdGNoIChlbmNvZGVyLT5ocGRfcGluKSB7Ci0JY2FzZSBIUERfUE9SVF9COgotCQliaXQgPSBQ T1JUQl9IT1RQTFVHX0xJVkVfU1RBVFVTX0dNNDU7Ci0JCWJyZWFrOwotCWNhc2UgSFBEX1BPUlRf QzoKLQkJYml0ID0gUE9SVENfSE9UUExVR19MSVZFX1NUQVRVU19HTTQ1OwotCQlicmVhazsKLQlj YXNlIEhQRF9QT1JUX0Q6Ci0JCWJpdCA9IFBPUlREX0hPVFBMVUdfTElWRV9TVEFUVVNfR000NTsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFKGVuY29kZXItPmhwZF9waW4pOwot CQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsIFBP UlRfSE9UUExVR19TVEFUKSAmIGJpdDsKLX0KLQotc3RhdGljIGJvb2wgaWxrX2RpZ2l0YWxfcG9y dF9jb25uZWN0ZWQoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCi17Ci0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Ci0J dTMyIGJpdCA9IGRldl9wcml2LT5ob3RwbHVnLmhwZFtlbmNvZGVyLT5ocGRfcGluXTsKLQotCXJl dHVybiBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBERUlTUikgJiBiaXQ7Ci19Ci0KIC8qCiAgKiBp bnRlbF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkIC0gaXMgdGhlIHNwZWNpZmllZCBwb3J0IGNvbm5l Y3RlZD8KICAqIEBlbmNvZGVyOiBpbnRlbF9lbmNvZGVyCkBAIC01NzAzLDE0ICs0NDY2LDYgQEAg dm9pZCBpbnRlbF9kcF9lbmNvZGVyX2ZsdXNoX3dvcmsoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQogCWludGVsX2RwX2F1eF9maW5pKGludGVsX2RwKTsKIH0KIAotc3RhdGljIHZvaWQgaW50 ZWxfZHBfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKLXsKLQlp bnRlbF9kcF9lbmNvZGVyX2ZsdXNoX3dvcmsoZW5jb2Rlcik7Ci0KLQlkcm1fZW5jb2Rlcl9jbGVh bnVwKGVuY29kZXIpOwotCWtmcmVlKGVuY190b19kaWdfcG9ydCh0b19pbnRlbF9lbmNvZGVyKGVu Y29kZXIpKSk7Ci19Ci0KIHZvaWQgaW50ZWxfZHBfZW5jb2Rlcl9zdXNwZW5kKHN0cnVjdCBpbnRl bF9lbmNvZGVyICppbnRlbF9lbmNvZGVyKQogewogCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PSBlbmNfdG9faW50ZWxfZHAoaW50ZWxfZW5jb2Rlcik7CkBAIC01NzI1LDM4ICs0NDgwLDYgQEAg dm9pZCBpbnRlbF9kcF9lbmNvZGVyX3NodXRkb3duKHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRl bF9lbmNvZGVyKQogCWludGVsX3Bwc193YWl0X3Bvd2VyX2N5Y2xlKGludGVsX2RwKTsKIH0KIAot c3RhdGljIGVudW0gcGlwZSB2bHZfYWN0aXZlX3BpcGUoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGlu dGVsX2RwKTsKLQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciA9ICZkcF90b19kaWdfcG9y dChpbnRlbF9kcCktPmJhc2U7Ci0JZW51bSBwaXBlIHBpcGU7Ci0KLQlpZiAoaW50ZWxfZHBfcG9y dF9lbmFibGVkKGRldl9wcml2LCBpbnRlbF9kcC0+b3V0cHV0X3JlZywKLQkJCQkgIGVuY29kZXIt PnBvcnQsICZwaXBlKSkKLQkJcmV0dXJuIHBpcGU7Ci0KLQlyZXR1cm4gSU5WQUxJRF9QSVBFOwot fQotCi1zdGF0aWMgdm9pZCBpbnRlbF9kcF9lbmNvZGVyX3Jlc2V0KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGVuY29kZXItPmRldik7Ci0Jc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19p bnRlbF9kcCh0b19pbnRlbF9lbmNvZGVyKGVuY29kZXIpKTsKLQotCWludGVsX2RwLT5EUCA9IGlu dGVsX2RlX3JlYWQoZGV2X3ByaXYsIGludGVsX2RwLT5vdXRwdXRfcmVnKTsKLQotCWludGVsX2Rw LT5yZXNldF9saW5rX3BhcmFtcyA9IHRydWU7Ci0KLQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJp dikgfHwgSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKLQkJaW50ZWxfd2FrZXJlZl90IHdha2Vy ZWY7Ci0KLQkJd2l0aF9pbnRlbF9wcHNfbG9jayhpbnRlbF9kcCwgd2FrZXJlZikKLQkJCWludGVs X2RwLT5wcHMuYWN0aXZlX3BpcGUgPSB2bHZfYWN0aXZlX3BpcGUoaW50ZWxfZHApOwotCX0KLQot CWludGVsX3Bwc19lbmNvZGVyX3Jlc2V0KGludGVsX2RwKTsKLX0KLQogc3RhdGljIGludCBpbnRl bF9tb2Rlc2V0X3RpbGVfZ3JvdXAoc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJ CQkJICAgIGludCB0aWxlX2dyb3VwX2lkKQogewpAQCAtNTkxNCwxMSArNDYzNyw2IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgaW50ZWxfZHBfY29ubmVj dG9yX2hlbHBlcl9mdW5jcyA9CiAJLmF0b21pY19jaGVjayA9IGludGVsX2RwX2Nvbm5lY3Rvcl9h dG9taWNfY2hlY2ssCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNz IGludGVsX2RwX2VuY19mdW5jcyA9IHsKLQkucmVzZXQgPSBpbnRlbF9kcF9lbmNvZGVyX3Jlc2V0 LAotCS5kZXN0cm95ID0gaW50ZWxfZHBfZW5jb2Rlcl9kZXN0cm95LAotfTsKLQogZW51bSBpcnFy ZXR1cm4KIGludGVsX2RwX2hwZF9wdWxzZShzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCwgYm9vbCBsb25nX2hwZCkKIHsKQEAgLTY3MDcsMTM3ICs1NDI1LDYgQEAgaW50ZWxfZHBf aW5pdF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQsCiAJcmV0 dXJuIGZhbHNlOwogfQogCi1ib29sIGludGVsX2RwX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAotCQkgICBpOTE1X3JlZ190IG91dHB1dF9yZWcsCi0JCSAgIGVudW0gcG9y dCBwb3J0KQotewotCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0OwotCXN0cnVj dCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlcjsKLQlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3I7Ci0KLQlkaWdf cG9ydCA9IGt6YWxsb2Moc2l6ZW9mKCpkaWdfcG9ydCksIEdGUF9LRVJORUwpOwotCWlmICghZGln X3BvcnQpCi0JCXJldHVybiBmYWxzZTsKLQotCWludGVsX2Nvbm5lY3RvciA9IGludGVsX2Nvbm5l Y3Rvcl9hbGxvYygpOwotCWlmICghaW50ZWxfY29ubmVjdG9yKQotCQlnb3RvIGVycl9jb25uZWN0 b3JfYWxsb2M7Ci0KLQlpbnRlbF9lbmNvZGVyID0gJmRpZ19wb3J0LT5iYXNlOwotCWVuY29kZXIg PSAmaW50ZWxfZW5jb2Rlci0+YmFzZTsKLQotCW11dGV4X2luaXQoJmRpZ19wb3J0LT5oZGNwX211 dGV4KTsKLQotCWlmIChkcm1fZW5jb2Rlcl9pbml0KCZkZXZfcHJpdi0+ZHJtLCAmaW50ZWxfZW5j b2Rlci0+YmFzZSwKLQkJCSAgICAgJmludGVsX2RwX2VuY19mdW5jcywgRFJNX01PREVfRU5DT0RF Ul9UTURTLAotCQkJICAgICAiRFAgJWMiLCBwb3J0X25hbWUocG9ydCkpKQotCQlnb3RvIGVycl9l bmNvZGVyX2luaXQ7Ci0KLQlpbnRlbF9lbmNvZGVyLT5ob3RwbHVnID0gaW50ZWxfZHBfaG90cGx1 ZzsKLQlpbnRlbF9lbmNvZGVyLT5jb21wdXRlX2NvbmZpZyA9IGludGVsX2RwX2NvbXB1dGVfY29u ZmlnOwotCWludGVsX2VuY29kZXItPmdldF9od19zdGF0ZSA9IGludGVsX2RwX2dldF9od19zdGF0 ZTsKLQlpbnRlbF9lbmNvZGVyLT5nZXRfY29uZmlnID0gaW50ZWxfZHBfZ2V0X2NvbmZpZzsKLQlp bnRlbF9lbmNvZGVyLT5zeW5jX3N0YXRlID0gaW50ZWxfZHBfc3luY19zdGF0ZTsKLQlpbnRlbF9l bmNvZGVyLT5pbml0aWFsX2Zhc3RzZXRfY2hlY2sgPSBpbnRlbF9kcF9pbml0aWFsX2Zhc3RzZXRf Y2hlY2s7Ci0JaW50ZWxfZW5jb2Rlci0+dXBkYXRlX3BpcGUgPSBpbnRlbF9wYW5lbF91cGRhdGVf YmFja2xpZ2h0OwotCWludGVsX2VuY29kZXItPnN1c3BlbmQgPSBpbnRlbF9kcF9lbmNvZGVyX3N1 c3BlbmQ7Ci0JaW50ZWxfZW5jb2Rlci0+c2h1dGRvd24gPSBpbnRlbF9kcF9lbmNvZGVyX3NodXRk b3duOwotCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewotCQlpbnRlbF9lbmNvZGVyLT5w cmVfcGxsX2VuYWJsZSA9IGNodl9kcF9wcmVfcGxsX2VuYWJsZTsKLQkJaW50ZWxfZW5jb2Rlci0+ cHJlX2VuYWJsZSA9IGNodl9wcmVfZW5hYmxlX2RwOwotCQlpbnRlbF9lbmNvZGVyLT5lbmFibGUg PSB2bHZfZW5hYmxlX2RwOwotCQlpbnRlbF9lbmNvZGVyLT5kaXNhYmxlID0gdmx2X2Rpc2FibGVf ZHA7Ci0JCWludGVsX2VuY29kZXItPnBvc3RfZGlzYWJsZSA9IGNodl9wb3N0X2Rpc2FibGVfZHA7 Ci0JCWludGVsX2VuY29kZXItPnBvc3RfcGxsX2Rpc2FibGUgPSBjaHZfZHBfcG9zdF9wbGxfZGlz YWJsZTsKLQl9IGVsc2UgaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWludGVsX2Vu Y29kZXItPnByZV9wbGxfZW5hYmxlID0gdmx2X2RwX3ByZV9wbGxfZW5hYmxlOwotCQlpbnRlbF9l bmNvZGVyLT5wcmVfZW5hYmxlID0gdmx2X3ByZV9lbmFibGVfZHA7Ci0JCWludGVsX2VuY29kZXIt PmVuYWJsZSA9IHZsdl9lbmFibGVfZHA7Ci0JCWludGVsX2VuY29kZXItPmRpc2FibGUgPSB2bHZf ZGlzYWJsZV9kcDsKLQkJaW50ZWxfZW5jb2Rlci0+cG9zdF9kaXNhYmxlID0gdmx2X3Bvc3RfZGlz YWJsZV9kcDsKLQl9IGVsc2UgewotCQlpbnRlbF9lbmNvZGVyLT5wcmVfZW5hYmxlID0gZzR4X3By ZV9lbmFibGVfZHA7Ci0JCWludGVsX2VuY29kZXItPmVuYWJsZSA9IGc0eF9lbmFibGVfZHA7Ci0J CWludGVsX2VuY29kZXItPmRpc2FibGUgPSBnNHhfZGlzYWJsZV9kcDsKLQkJaW50ZWxfZW5jb2Rl ci0+cG9zdF9kaXNhYmxlID0gZzR4X3Bvc3RfZGlzYWJsZV9kcDsKLQl9Ci0KLQlpZiAoKElTX0lW WUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9PSBQT1JUX0EpIHx8Ci0JICAgIChIQVNfUENIX0NQ VChkZXZfcHJpdikgJiYgcG9ydCAhPSBQT1JUX0EpKQotCQlkaWdfcG9ydC0+ZHAuc2V0X2xpbmtf dHJhaW4gPSBjcHRfc2V0X2xpbmtfdHJhaW47Ci0JZWxzZQotCQlkaWdfcG9ydC0+ZHAuc2V0X2xp bmtfdHJhaW4gPSBnNHhfc2V0X2xpbmtfdHJhaW47Ci0KLQlpZiAoSVNfQ0hFUlJZVklFVyhkZXZf cHJpdikpCi0JCWRpZ19wb3J0LT5kcC5zZXRfc2lnbmFsX2xldmVscyA9IGNodl9zZXRfc2lnbmFs X2xldmVsczsKLQllbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2KSkKLQkJZGlnX3BvcnQt PmRwLnNldF9zaWduYWxfbGV2ZWxzID0gdmx2X3NldF9zaWduYWxfbGV2ZWxzOwotCWVsc2UgaWYg KElTX0lWWUJSSURHRShkZXZfcHJpdikgJiYgcG9ydCA9PSBQT1JUX0EpCi0JCWRpZ19wb3J0LT5k cC5zZXRfc2lnbmFsX2xldmVscyA9IGl2Yl9jcHVfZWRwX3NldF9zaWduYWxfbGV2ZWxzOwotCWVs c2UgaWYgKElTX0dFTihkZXZfcHJpdiwgNikgJiYgcG9ydCA9PSBQT1JUX0EpCi0JCWRpZ19wb3J0 LT5kcC5zZXRfc2lnbmFsX2xldmVscyA9IHNuYl9jcHVfZWRwX3NldF9zaWduYWxfbGV2ZWxzOwot CWVsc2UKLQkJZGlnX3BvcnQtPmRwLnNldF9zaWduYWxfbGV2ZWxzID0gZzR4X3NldF9zaWduYWxf bGV2ZWxzOwotCi0JaWYgKElTX1ZBTExFWVZJRVcoZGV2X3ByaXYpIHx8IElTX0NIRVJSWVZJRVco ZGV2X3ByaXYpIHx8Ci0JICAgIChIQVNfUENIX1NQTElUKGRldl9wcml2KSAmJiBwb3J0ICE9IFBP UlRfQSkpIHsKLQkJZGlnX3BvcnQtPmRwLnByZWVtcGhfbWF4ID0gaW50ZWxfZHBfcHJlZW1waF9t YXhfMzsKLQkJZGlnX3BvcnQtPmRwLnZvbHRhZ2VfbWF4ID0gaW50ZWxfZHBfdm9sdGFnZV9tYXhf MzsKLQl9IGVsc2UgewotCQlkaWdfcG9ydC0+ZHAucHJlZW1waF9tYXggPSBpbnRlbF9kcF9wcmVl bXBoX21heF8yOwotCQlkaWdfcG9ydC0+ZHAudm9sdGFnZV9tYXggPSBpbnRlbF9kcF92b2x0YWdl X21heF8yOwotCX0KLQotCWRpZ19wb3J0LT5kcC5vdXRwdXRfcmVnID0gb3V0cHV0X3JlZzsKLQlk aWdfcG9ydC0+bWF4X2xhbmVzID0gNDsKLQotCWludGVsX2VuY29kZXItPnR5cGUgPSBJTlRFTF9P VVRQVVRfRFA7Ci0JaW50ZWxfZW5jb2Rlci0+cG93ZXJfZG9tYWluID0gaW50ZWxfcG9ydF90b19w b3dlcl9kb21haW4ocG9ydCk7Ci0JaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKSB7Ci0JCWlm IChwb3J0ID09IFBPUlRfRCkKLQkJCWludGVsX2VuY29kZXItPnBpcGVfbWFzayA9IEJJVChQSVBF X0MpOwotCQllbHNlCi0JCQlpbnRlbF9lbmNvZGVyLT5waXBlX21hc2sgPSBCSVQoUElQRV9BKSB8 IEJJVChQSVBFX0IpOwotCX0gZWxzZSB7Ci0JCWludGVsX2VuY29kZXItPnBpcGVfbWFzayA9IH4w OwotCX0KLQlpbnRlbF9lbmNvZGVyLT5jbG9uZWFibGUgPSAwOwotCWludGVsX2VuY29kZXItPnBv cnQgPSBwb3J0OwotCWludGVsX2VuY29kZXItPmhwZF9waW4gPSBpbnRlbF9ocGRfcGluX2RlZmF1 bHQoZGV2X3ByaXYsIHBvcnQpOwotCi0JZGlnX3BvcnQtPmhwZF9wdWxzZSA9IGludGVsX2RwX2hw ZF9wdWxzZTsKLQotCWlmIChIQVNfR01DSChkZXZfcHJpdikpIHsKLQkJaWYgKElTX0dNNDUoZGV2 X3ByaXYpKQotCQkJZGlnX3BvcnQtPmNvbm5lY3RlZCA9IGdtNDVfZGlnaXRhbF9wb3J0X2Nvbm5l Y3RlZDsKLQkJZWxzZQotCQkJZGlnX3BvcnQtPmNvbm5lY3RlZCA9IGc0eF9kaWdpdGFsX3BvcnRf Y29ubmVjdGVkOwotCX0gZWxzZSB7Ci0JCWlmIChwb3J0ID09IFBPUlRfQSkKLQkJCWRpZ19wb3J0 LT5jb25uZWN0ZWQgPSBpbGtfZGlnaXRhbF9wb3J0X2Nvbm5lY3RlZDsKLQkJZWxzZQotCQkJZGln X3BvcnQtPmNvbm5lY3RlZCA9IGlieF9kaWdpdGFsX3BvcnRfY29ubmVjdGVkOwotCX0KLQotCWlm IChwb3J0ICE9IFBPUlRfQSkKLQkJaW50ZWxfaW5mb2ZyYW1lX2luaXQoZGlnX3BvcnQpOwotCi0J ZGlnX3BvcnQtPmF1eF9jaCA9IGludGVsX2Jpb3NfcG9ydF9hdXhfY2goZGV2X3ByaXYsIHBvcnQp OwotCWlmICghaW50ZWxfZHBfaW5pdF9jb25uZWN0b3IoZGlnX3BvcnQsIGludGVsX2Nvbm5lY3Rv cikpCi0JCWdvdG8gZXJyX2luaXRfY29ubmVjdG9yOwotCi0JcmV0dXJuIHRydWU7Ci0KLWVycl9p bml0X2Nvbm5lY3RvcjoKLQlkcm1fZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwotZXJyX2VuY29k ZXJfaW5pdDoKLQlrZnJlZShpbnRlbF9jb25uZWN0b3IpOwotZXJyX2Nvbm5lY3Rvcl9hbGxvYzoK LQlrZnJlZShkaWdfcG9ydCk7Ci0JcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIGludGVsX2RwX21z dF9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlzdHJ1Y3Qg aW50ZWxfZW5jb2RlciAqZW5jb2RlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2Rpc3BsYXkvaW50ZWxfZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf ZHAuaAppbmRleCBlNGE3MWMxOWJkNTEuLjhkYjUwNjJmNmM0YSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2Rpc3BsYXkvaW50ZWxfZHAuaApAQCAtMzcsMTEgKzM3LDYgQEAgdm9pZCBpbnRlbF9kcF9h ZGp1c3RfY29tcGxpYW5jZV9jb25maWcoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKIGJvb2wg aW50ZWxfZHBfbGltaXRlZF9jb2xvcl9yYW5nZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZSwKIAkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpj b25uX3N0YXRlKTsKIGludCBpbnRlbF9kcF9taW5fYnBwKGVudW0gaW50ZWxfb3V0cHV0X2Zvcm1h dCBvdXRwdXRfZm9ybWF0KTsKLWJvb2wgaW50ZWxfZHBfcG9ydF9lbmFibGVkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgIGk5MTVfcmVnX3QgZHBfcmVnLCBlbnVtIHBv cnQgcG9ydCwKLQkJCSAgIGVudW0gcGlwZSAqcGlwZSk7Ci1ib29sIGludGVsX2RwX2luaXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBpOTE1X3JlZ190IG91dHB1dF9yZWcsCi0J CSAgIGVudW0gcG9ydCBwb3J0KTsKIGJvb2wgaW50ZWxfZHBfaW5pdF9jb25uZWN0b3Ioc3RydWN0 IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQsCiAJCQkgICAgIHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmludGVsX2Nvbm5lY3Rvcik7CiB2b2lkIGludGVsX2RwX3NldF9saW5rX3BhcmFtcyhz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLApAQCAtMTMxLDcgKzEyNiw2IEBAIGJvb2wgaW50ZWxf ZHBfaW5pdGlhbF9mYXN0c2V0X2NoZWNrKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAog CQkJCSAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiB2b2lkIGludGVs X2RwX3N5bmNfc3RhdGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCiAJCQkgY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpOwotY29uc3Qgc3RydWN0IGRwbGwg KnZsdl9nZXRfZHBsbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CiAKIHZvaWQgaW50 ZWxfZHBfY2hlY2tfZnJsX3RyYWluaW5nKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwogdm9p ZCBpbnRlbF9kcF9wY29uX2RzY19jb25maWd1cmUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBzLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bwcy5jCmluZGV4IGYyMGJhNzFmNDMw Ny4uOTMyZjU2OTUxOTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX3Bwcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHBz LmMKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlv bgogICovCiAKKyNpbmNsdWRlICJnNHhfZHAuaCIKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogI2lu Y2x1ZGUgImludGVsX2Rpc3BsYXlfdHlwZXMuaCIKICNpbmNsdWRlICJpbnRlbF9kcC5oIgotLSAK Mi4yNi4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK