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=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, 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 A8804C43603 for ; Fri, 6 Dec 2019 10:02:08 +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 842A120707 for ; Fri, 6 Dec 2019 10:02:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 842A120707 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B5E876F9A2; Fri, 6 Dec 2019 10:02:07 +0000 (UTC) Received: from inva020.nxp.com (inva020.nxp.com [92.121.34.13]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3EB716F9A2 for ; Fri, 6 Dec 2019 10:02:06 +0000 (UTC) Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id D51F01A089F; Fri, 6 Dec 2019 10:53:22 +0100 (CET) Received: from inva024.eu-rdc02.nxp.com (inva024.eu-rdc02.nxp.com [134.27.226.22]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id BC63F1A07CE; Fri, 6 Dec 2019 10:53:22 +0100 (CET) Received: from fsr-ub1664-121.ea.freescale.net (fsr-ub1664-121.ea.freescale.net [10.171.82.171]) by inva024.eu-rdc02.nxp.com (Postfix) with ESMTP id EB28C20395; Fri, 6 Dec 2019 10:53:21 +0100 (CET) From: Laurentiu Palcu To: Philipp Zabel , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team Subject: [PATCH v3 2/4] drm/imx: Add initial support for DCSS on iMX8MQ Date: Fri, 6 Dec 2019 11:52:39 +0200 Message-Id: <1575625964-27102-3-git-send-email-laurentiu.palcu@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1575625964-27102-1-git-send-email-laurentiu.palcu@nxp.com> References: <1575625964-27102-1-git-send-email-laurentiu.palcu@nxp.com> MIME-Version: 1.0 X-Virus-Scanned: ClamAV using ClamSMTP X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: agx@sigxcpu.org, lukas@mntmn.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Laurentiu Palcu , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" VGhpcyBhZGRzIGluaXRpYWwgc3VwcG9ydCBmb3IgaU1YOE1RJ3MgRGlzcGxheSBDb250cm9sbGVy IFN1YnN5c3RlbSAoRENTUykuClNvbWUgb2YgaXRzIGNhcGFiaWxpdGllcyBpbmNsdWRlOgogKiA0 S0A2MGZwczsKICogSERSMTA7CiAqIG9uZSBncmFwaGljcyBhbmQgMiB2aWRlbyBwaXBlbGluZXM7 CiAqIG9uLXRoZS1mbHkgZGVjb21wcmVzc2lvbiBvZiBjb21wcmVzc2VkIHZpZGVvIGFuZCBncmFw aGljczsKClRoZSByZWZlcmVuY2UgbWFudWFsIGNhbiBiZSBmb3VuZCBoZXJlOgpodHRwczovL3d3 dy5ueHAuY29tL3dlYmFwcC9Eb3dubG9hZD9jb2xDb2RlPUlNWDhNRFFMUVJNCgpUaGUgY3VycmVu dCBwYXRjaCBhZGRzIG9ubHkgYmFzaWMgZnVuY3Rpb25hbGl0eTogb25lIHByaW1hcnkgcGxhbmUg Zm9yCmdyYXBoaWNzLCBsaW5lYXIsIHRpbGVkIGFuZCBzdXBlci10aWxlZCBidWZmZXJzIHN1cHBv cnQgKG5vIGdyYXBoaWNzCmRlY29tcHJlc3Npb24geWV0KSwgbm8gSERSMTAgYW5kIG5vIHZpZGVv IHBsYW5lcy4KClZpZGVvIHBsYW5lcyBzdXBwb3J0IGFuZCBIRFIxMCB3aWxsIGJlIGFkZGVkIGlu IHN1YnNlcXVlbnQgcGF0Y2hlcyBvbmNlCnBlci1wbGFuZSBkZS1nYW1tYS9DU0MvZ2FtbWEgc3Vw cG9ydCBpcyBpbi4KClNpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBh bGN1QG54cC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2lteC9LY29uZmlnICAgICAgICAgICAg fCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2lteC9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL0tjb25maWcgICAgICAgfCAgIDggKwogZHJpdmVycy9n cHUvZHJtL2lteC9kY3NzL01ha2VmaWxlICAgICAgfCAgIDYgKwogZHJpdmVycy9ncHUvZHJtL2lt eC9kY3NzL2Rjc3MtYmxrY3RsLmMgfCAgNzUgKysrCiBkcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3Mv ZGNzcy1jcnRjLmMgICB8IDIyNCArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9k Y3NzLWN0eGxkLmMgIHwgNDQ3ICsrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lt eC9kY3NzL2Rjc3MtZGV2LmMgICAgfCAyODYgKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v aW14L2Rjc3MvZGNzcy1kZXYuaCAgICB8IDE5NSArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lt eC9kY3NzL2Rjc3MtZHByLmMgICAgfCA1NTAgKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtZHJ2LmMgICAgfCAxODEgKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9pbXgvZGNzcy9kY3NzLWR0Zy5jICAgIHwgNDQyICsrKysrKysrKysrKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3Mta21zLmMgICAgfCAzMjIgKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3Mta21zLmggICAgfCAgNTIgKysrCiBkcml2 ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1wbGFuZS5jICB8IDQxOCArKysrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3Mtc2NhbGVyLmMgfCA4MjYgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1z cy5jICAgICB8IDE3OSArKysrKysrCiAxNyBmaWxlcyBjaGFuZ2VkLCA0MjE0IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvS2NvbmZpZwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9kY3NzLWJsa2N0bC5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtY3J0Yy5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtY3R4bGQuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9kY3NzLWRldi5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtZGV2LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1kcHIuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9kY3NzLWRydi5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtZHRnLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1rbXMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9kY3NzLWttcy5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtcGxhbmUuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9kY3NzLXNjYWxlci5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3Mtc3MuYwoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgv S2NvbmZpZwppbmRleCAyMDdiZjc0Li42MjMxMDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaW14L0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9LY29uZmlnCkBAIC0zOSwz ICszOSw1IEBAIGNvbmZpZyBEUk1fSU1YX0hETUkKIAlkZXBlbmRzIG9uIERSTV9JTVgKIAloZWxw CiAJICBDaG9vc2UgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgSERNSSBvbiBpLk1YNi4KKworc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pbXgvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaW14L01ha2VmaWxlCmlu ZGV4IDIxY2RjYzIuLmI2NDRkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvTWFr ZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9NYWtlZmlsZQpAQCAtOSwzICs5LDQgQEAg b2JqLSQoQ09ORklHX0RSTV9JTVhfVFZFKSArPSBpbXgtdHZlLm8KIG9iai0kKENPTkZJR19EUk1f SU1YX0xEQikgKz0gaW14LWxkYi5vCiAKIG9iai0kKENPTkZJR19EUk1fSU1YX0hETUkpICs9IGR3 X2hkbWktaW14Lm8KK29iai0kKENPTkZJR19EUk1fSU1YX0RDU1MpICs9IGRjc3MvCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9p bXgvZGNzcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5hMTg5 ZGFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL0tjb25maWcK QEAgLTAsMCArMSw4IEBACitjb25maWcgRFJNX0lNWF9EQ1NTCisJdHJpc3RhdGUgImkuTVg4TVEg RENTUyIKKwlzZWxlY3QgUkVTRVRfQ09OVFJPTExFUgorCXNlbGVjdCBJTVhfSVJRU1RFRVIKKwlk ZXBlbmRzIG9uIERSTSAmJiBBUkNIX01YQworCWhlbHAKKwkgIENob29zZSB0aGlzIGlmIHlvdSBo YXZlIGEgTlhQIGkuTVg4TVEgYmFzZWQgc3lzdGVtIGFuZCB3YW50IHRvIHVzZSB0aGUKKwkgIERp c3BsYXkgQ29udHJvbGxlciBTdWJzeXN0ZW0uIFRoaXMgb3B0aW9uIGVuYWJsZXMgRENTUyBzdXBw b3J0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2lteC9kY3NzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi44YzdjOGRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lt eC9kY3NzL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAoraW14LWRjc3Mtb2JqcyA6PSBkY3NzLWRy di5vIGRjc3MtZGV2Lm8gZGNzcy1ibGtjdGwubyBkY3NzLWN0eGxkLm8gZGNzcy1kdGcubyBcCisJ CQkJIGRjc3Mtc3MubyBkY3NzLWRwci5vIGRjc3Mtc2NhbGVyLm8gZGNzcy1rbXMubyBkY3NzLWNy dGMubyBcCisJCQkJIGRjc3MtcGxhbmUubworCitvYmotJChDT05GSUdfRFJNX0lNWF9EQ1NTKSAr PSBpbXgtZGNzcy5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9kY3Nz LWJsa2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtYmxrY3RsLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmVlN2ZmYTEKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1ibGtjdGwuYwpAQCAtMCwwICsxLDc1IEBA CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAy MDE5IE5YUC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvb2YuaD4KKworI2luY2x1ZGUgImRjc3MtZGV2LmgiCisKKyNkZWZpbmUgRENTU19CTEtDVExf UkVTRVRfQ1RSTAkJMHgwMAorI2RlZmluZSAgIEJfQ0xLX1JFU0VUTgkJCUJJVCgwKQorI2RlZmlu ZSAgIEFQQl9DTEtfUkVTRVROCQlCSVQoMSkKKyNkZWZpbmUgICBQX0NMS19SRVNFVE4JCQlCSVQo MikKKyNkZWZpbmUgICBSVFJfQ0xLX1JFU0VUTgkJQklUKDMpCisjZGVmaW5lIERDU1NfQkxLQ1RM X0NPTlRST0wwCQkweDEwCisjZGVmaW5lICAgSERNSV9NSVBJX0NMS19TRUwJCUJJVCgwKQorI2Rl ZmluZSAgIERJU1BNSVhfUkVGQ0xLX1NFTF9QT1MJNAorI2RlZmluZSAgIERJU1BNSVhfUkVGQ0xL X1NFTF9NQVNLCUdFTk1BU0soNSwgNCkKKyNkZWZpbmUgICBESVNQTUlYX1BJWENMS19TRUwJCUJJ VCg4KQorI2RlZmluZSAgIEhETUlfU1JDX1NFQ1VSRV9FTgkJQklUKDE2KQorCitzdHJ1Y3QgZGNz c19ibGtjdGwgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9faW9tZW0gKmJhc2VfcmVn OworCisJYm9vbCBoZG1pX291dHB1dDsKK307CisKK3ZvaWQgZGNzc19ibGtjdGxfY2ZnKHN0cnVj dCBkY3NzX2Jsa2N0bCAqYmxrY3RsKQoreworCWlmIChibGtjdGwtPmhkbWlfb3V0cHV0KQorCQlk Y3NzX3dyaXRlbCgwLCBibGtjdGwtPmJhc2VfcmVnICsgRENTU19CTEtDVExfQ09OVFJPTDApOwor CWVsc2UKKwkJZGNzc193cml0ZWwoRElTUE1JWF9QSVhDTEtfU0VMLAorCQkJICAgIGJsa2N0bC0+ YmFzZV9yZWcgKyBEQ1NTX0JMS0NUTF9DT05UUk9MMCk7CisKKwlkY3NzX3NldChCX0NMS19SRVNF VE4gfCBBUEJfQ0xLX1JFU0VUTiB8IFBfQ0xLX1JFU0VUTiB8IFJUUl9DTEtfUkVTRVROLAorCQkg YmxrY3RsLT5iYXNlX3JlZyArIERDU1NfQkxLQ1RMX1JFU0VUX0NUUkwpOworfQorCitpbnQgZGNz c19ibGtjdGxfaW5pdChzdHJ1Y3QgZGNzc19kZXYgKmRjc3MsIHVuc2lnbmVkIGxvbmcgYmxrY3Rs X2Jhc2UpCit7CisJc3RydWN0IGRjc3NfYmxrY3RsICpibGtjdGw7CisKKwlibGtjdGwgPSBkZXZt X2t6YWxsb2MoZGNzcy0+ZGV2LCBzaXplb2YoKmJsa2N0bCksIEdGUF9LRVJORUwpOworCWlmICgh YmxrY3RsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJsa2N0bC0+YmFzZV9yZWcgPSBkZXZtX2lv cmVtYXAoZGNzcy0+ZGV2LCBibGtjdGxfYmFzZSwgU1pfNEspOworCWlmICghYmxrY3RsLT5iYXNl X3JlZykgeworCQlkZXZfZXJyKGRjc3MtPmRldiwgInVuYWJsZSB0byByZW1hcCBCTEsgQ1RSTCBi YXNlXG4iKTsKKwkJZGV2bV9rZnJlZShkY3NzLT5kZXYsIGJsa2N0bCk7CisJCXJldHVybiAtRU5P TUVNOworCX0KKworCWRjc3MtPmJsa2N0bCA9IGJsa2N0bDsKKwlibGtjdGwtPmRldiA9IGRjc3Mt PmRldjsKKwlibGtjdGwtPmhkbWlfb3V0cHV0ID0gZGNzcy0+aGRtaV9vdXRwdXQ7CisKKwlkY3Nz X2Jsa2N0bF9jZmcoYmxrY3RsKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGRjc3NfYmxrY3Rs X2V4aXQoc3RydWN0IGRjc3NfYmxrY3RsICpibGtjdGwpCit7CisJZGNzc19jbHIoUF9DTEtfUkVT RVROIHwgUlRSX0NMS19SRVNFVE4sCisJCSBibGtjdGwtPmJhc2VfcmVnICsgRENTU19CTEtDVExf UkVTRVRfQ1RSTCk7CisKKwlpZiAoYmxrY3RsLT5iYXNlX3JlZykKKwkJZGV2bV9pb3VubWFwKGJs a2N0bC0+ZGV2LCBibGtjdGwtPmJhc2VfcmVnKTsKKworCWRldm1fa2ZyZWUoYmxrY3RsLT5kZXYs IGJsa2N0bCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1j cnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1jcnRjLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjU2N2JmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1jcnRjLmMKQEAgLTAsMCArMSwyMjQgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IDIwMTkgTlhQ LgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX3ZibGFuay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgImRjc3MtZGV2LmgiCisjaW5j bHVkZSAiZGNzcy1rbXMuaCIKKworc3RhdGljIGludCBkY3NzX2VuYWJsZV92Ymxhbmsoc3RydWN0 IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkY3NzX2NydGMgKmRjc3NfY3J0YyA9IGNvbnRh aW5lcl9vZihjcnRjLCBzdHJ1Y3QgZGNzc19jcnRjLAorCQkJCQkJICAgYmFzZSk7CisJc3RydWN0 IGRjc3NfZGV2ICpkY3NzID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkY3NzX2Ny dGMtPmlycV9lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWRjc3NfY3J0Yy0+aXJxX2VuYWJsZWQg PSB0cnVlOworCisJZGNzc19kdGdfdmJsYW5rX2lycV9lbmFibGUoZGNzcy0+ZHRnLCB0cnVlKTsK KworCWRjc3NfZHRnX2N0eGxkX2tpY2tfaXJxX2VuYWJsZShkY3NzLT5kdGcsIHRydWUpOworCisJ ZW5hYmxlX2lycShkY3NzX2NydGMtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgZGNzc19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0 IGRjc3NfY3J0YyAqZGNzc19jcnRjID0gY29udGFpbmVyX29mKGNydGMsIHN0cnVjdCBkY3NzX2Ny dGMsCisJCQkJCQkgICBiYXNlKTsKKwlzdHJ1Y3QgZGNzc19kZXYgKmRjc3MgPSBkY3NzX2NydGMt PmJhc2UuZGV2LT5kZXZfcHJpdmF0ZTsKKworCWRpc2FibGVfaXJxX25vc3luYyhkY3NzX2NydGMt PmlycSk7CisKKwlkY3NzX2R0Z192YmxhbmtfaXJxX2VuYWJsZShkY3NzLT5kdGcsIGZhbHNlKTsK KworCWRjc3NfZHRnX2N0eGxkX2tpY2tfaXJxX2VuYWJsZShkY3NzLT5kdGcsIGZhbHNlKTsKKwor CWRjc3NfY3J0Yy0+aXJxX2VuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fY3J0Y19mdW5jcyBkY3NzX2NydGNfZnVuY3MgPSB7CisJLnNldF9jb25maWcgPSBkcm1f YXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAorCS5kZXN0cm95ID0gZHJtX2NydGNfY2xlYW51cCwK KwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAorCS5yZXNldCA9IGRy bV9hdG9taWNfaGVscGVyX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lf c3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCisJLmVuYWJsZV92 YmxhbmsgPSBkY3NzX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gZGNzc19kaXNh YmxlX3ZibGFuaywKK307CisKK3N0YXRpYyB2b2lkIGRjc3NfY3J0Y19hdG9taWNfYmVnaW4oc3Ry dWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2Ny dGNfc3RhdGUpCit7CisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOworCisJc3Bpbl9sb2NrX2ly cSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwlpZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7CisJ CVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSk7CisJCWRybV9jcnRjX2FybV92Ymxh bmtfZXZlbnQoY3J0YywgY3J0Yy0+c3RhdGUtPmV2ZW50KTsKKwkJY3J0Yy0+c3RhdGUtPmV2ZW50 ID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOwor fQorCitzdGF0aWMgdm9pZCBkY3NzX2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQorewor CXN0cnVjdCBkY3NzX2NydGMgKmRjc3NfY3J0YyA9IGNvbnRhaW5lcl9vZihjcnRjLCBzdHJ1Y3Qg ZGNzc19jcnRjLAorCQkJCQkJICAgYmFzZSk7CisJc3RydWN0IGRjc3NfZGV2ICpkY3NzID0gZGNz c19jcnRjLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoZGNzc19kdGdfaXNfZW5hYmxl ZChkY3NzLT5kdGcpKQorCQlkY3NzX2N0eGxkX2VuYWJsZShkY3NzLT5jdHhsZCk7Cit9CisKK3N0 YXRpYyB2b2lkIGRjc3NfY3J0Y19hdG9taWNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK KwkJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1 Y3QgZGNzc19jcnRjICpkY3NzX2NydGMgPSBjb250YWluZXJfb2YoY3J0Yywgc3RydWN0IGRjc3Nf Y3J0YywKKwkJCQkJCSAgIGJhc2UpOworCXN0cnVjdCBkY3NzX2RldiAqZGNzcyA9IGRjc3NfY3J0 Yy0+YmFzZS5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl ID0gJmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCXN0cnVjdCB2aWRlb21vZGUgdm07CisK Kwlkcm1fZGlzcGxheV9tb2RlX3RvX3ZpZGVvbW9kZShtb2RlLCAmdm0pOworCisJcG1fcnVudGlt ZV9nZXRfc3luYyhkY3NzLT5kZXYpOworCisJdm0ucGl4ZWxjbG9jayA9IG1vZGUtPmNydGNfY2xv Y2sgKiAxMDAwOworCisJZGNzc19kdGdfc3luY19zZXQoZGNzcy0+ZHRnLCAmdm0pOworCisJZGNz c19zc19zdWJzYW1fc2V0KGRjc3MtPnNzKTsKKwlkY3NzX3NzX3N5bmNfc2V0KGRjc3MtPnNzLCAm dm0sIG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMsCisJCQkgbW9kZS0+ZmxhZ3Mg JiBEUk1fTU9ERV9GTEFHX1BWU1lOQyk7CisKKwlkY3NzX2R0Z19jc3Nfc2V0KGRjc3MtPmR0Zyk7 CisKKwlkY3NzX3NzX2VuYWJsZShkY3NzLT5zcyk7CisJZGNzc19kdGdfZW5hYmxlKGRjc3MtPmR0 ZywgdHJ1ZSwgTlVMTCk7CisJZGNzc19jdHhsZF9lbmFibGUoZGNzcy0+Y3R4bGQpOworCisJZGNz c19lbmFibGVfdmJsYW5rKGNydGMpOworCisJcmVpbml0X2NvbXBsZXRpb24oJmRjc3NfY3J0Yy0+ ZW5fY29tcGxldGlvbik7CisJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkY3NzX2NydGMt PmVuX2NvbXBsZXRpb24sCisJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7Cit9CisKK3N0 YXRpYyB2b2lkIGRjc3NfY3J0Y19hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CisJCQkJICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0 cnVjdCBkY3NzX2NydGMgKmRjc3NfY3J0YyA9IGNvbnRhaW5lcl9vZihjcnRjLCBzdHJ1Y3QgZGNz c19jcnRjLAorCQkJCQkJICAgYmFzZSk7CisJc3RydWN0IGRjc3NfZGV2ICpkY3NzID0gZGNzc19j cnRjLT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxl X3BsYW5lc19vbl9jcnRjKG9sZF9jcnRjX3N0YXRlLCBmYWxzZSk7CisKKwlzcGluX2xvY2tfaXJx KCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOworCWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQpIHsKKwkJ ZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoY3J0YywgY3J0Yy0+c3RhdGUtPmV2ZW50KTsKKwkJ Y3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5k ZXYtPmV2ZW50X2xvY2spOworCisJZGNzc19kdGdfY3R4bGRfa2lja19pcnFfZW5hYmxlKGRjc3Mt PmR0ZywgdHJ1ZSk7CisKKwlkY3NzX3NzX2Rpc2FibGUoZGNzcy0+c3MpOworCWRjc3NfZHRnX2Vu YWJsZShkY3NzLT5kdGcsIGZhbHNlLCAmZGNzc19jcnRjLT5kaXNfY29tcGxldGlvbik7CisJZGNz c19jdHhsZF9lbmFibGUoZGNzcy0+Y3R4bGQpOworCisJcmVpbml0X2NvbXBsZXRpb24oJmRjc3Nf Y3J0Yy0+ZGlzX2NvbXBsZXRpb24pOworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZGNz c19jcnRjLT5kaXNfY29tcGxldGlvbiwKKwkJCQkgICAgbXNlY3NfdG9famlmZmllcygxMDApKTsK KworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisKKwlkY3NzX2R0Z19jdHhsZF9raWNrX2ly cV9lbmFibGUoZGNzcy0+ZHRnLCBmYWxzZSk7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRjc3Mt PmRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGRj c3NfaGVscGVyX2Z1bmNzID0geworCS5hdG9taWNfYmVnaW4gPSBkY3NzX2NydGNfYXRvbWljX2Jl Z2luLAorCS5hdG9taWNfZmx1c2ggPSBkY3NzX2NydGNfYXRvbWljX2ZsdXNoLAorCS5hdG9taWNf ZW5hYmxlID0gZGNzc19jcnRjX2F0b21pY19lbmFibGUsCisJLmF0b21pY19kaXNhYmxlID0gZGNz c19jcnRjX2F0b21pY19kaXNhYmxlLAorfTsKKworc3RhdGljIGlycXJldHVybl90IGRjc3NfY3J0 Y19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGRjc3NfY3J0 YyAqZGNzc19jcnRjID0gZGV2X2lkOworCXN0cnVjdCBkY3NzX2RldiAqZGNzcyA9IGRjc3NfY3J0 Yy0+YmFzZS5kZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFkY3NzX2R0Z192YmxhbmtfaXJxX3Zh bGlkKGRjc3MtPmR0ZykpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCWNvbXBsZXRlKCZkY3Nz X2NydGMtPmVuX2NvbXBsZXRpb24pOworCisJaWYgKGRjc3NfY3R4bGRfaXNfZmx1c2hlZChkY3Nz LT5jdHhsZCkpCisJCWRybV9jcnRjX2hhbmRsZV92YmxhbmsoJmRjc3NfY3J0Yy0+YmFzZSk7CisK KwlkY3NzX2R0Z192YmxhbmtfaXJxX2NsZWFyKGRjc3MtPmR0Zyk7CisKKwlyZXR1cm4gSVJRX0hB TkRMRUQ7Cit9CisKK2ludCBkY3NzX2NydGNfaW5pdChzdHJ1Y3QgZGNzc19jcnRjICpjcnRjLCBz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBkY3NzX2RldiAqZGNzcyA9IGRybS0+ ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3Jt X2RldmljZShkY3NzLT5kZXYpOworCWludCByZXQ7CisKKwljcnRjLT5wbGFuZVswXSA9IGRjc3Nf cGxhbmVfaW5pdChkcm0sIGRybV9jcnRjX21hc2soJmNydGMtPmJhc2UpLAorCQkJCQkgRFJNX1BM QU5FX1RZUEVfUFJJTUFSWSwgMCk7CisJaWYgKElTX0VSUihjcnRjLT5wbGFuZVswXSkpCisJCXJl dHVybiBQVFJfRVJSKGNydGMtPnBsYW5lWzBdKTsKKworCWNydGMtPmJhc2UucG9ydCA9IGRjc3Mt Pm9mX3BvcnQ7CisKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZjcnRjLT5iYXNlLCAmZGNzc19oZWxw ZXJfZnVuY3MpOworCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmY3J0Yy0+ YmFzZSwgJmNydGMtPnBsYW5lWzBdLT5iYXNlLAorCQkJCQlOVUxMLCAmZGNzc19jcnRjX2Z1bmNz LCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGNzcy0+ZGV2LCAiZmFpbGVkIHRvIGlu aXQgY3J0Y1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJY3J0Yy0+aXJxID0gcGxhdGZvcm1f Z2V0X2lycV9ieW5hbWUocGRldiwgInZibGFuayIpOworCWlmIChjcnRjLT5pcnEgPCAwKSB7CisJ CWRldl9lcnIoZGNzcy0+ZGV2LCAidW5hYmxlIHRvIGdldCB2YmxhbmsgaW50ZXJydXB0XG4iKTsK KwkJcmV0dXJuIGNydGMtPmlycTsKKwl9CisKKwlpbml0X2NvbXBsZXRpb24oJmNydGMtPmVuX2Nv bXBsZXRpb24pOworCWluaXRfY29tcGxldGlvbigmY3J0Yy0+ZGlzX2NvbXBsZXRpb24pOworCisJ cmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkY3NzLT5kZXYsIGNydGMtPmlycSwgZGNzc19jcnRjX2ly cV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfVFJJR0dFUl9SSVNJTkcsICJkY3NzX2RybSIsIGNy dGMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkY3NzLT5kZXYsICJpcnEgcmVxdWVzdCBmYWls ZWQgd2l0aCAlZC5cbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGlzYWJsZV9pcnEo Y3J0Yy0+aXJxKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGRjc3NfY3J0Y19kZWluaXQoc3Ry dWN0IGRjc3NfY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3Qg ZGNzc19kZXYgKmRjc3MgPSBkcm0tPmRldl9wcml2YXRlOworCisJZGV2bV9mcmVlX2lycShkY3Nz LT5kZXYsIGNydGMtPmlycSwgY3J0Yyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aW14L2Rjc3MvZGNzcy1jdHhsZC5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtY3R4 bGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGZlMzViMmIKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1jdHhsZC5jCkBAIC0w LDAgKzEsNDQ3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAq IENvcHlyaWdodCAyMDE5IE5YUC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNp bmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o PgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAiZGNzcy1k ZXYuaCIKKworI2RlZmluZSBEQ1NTX0NUWExEX0RFVk5BTUUJCSJkY3NzX2N0eGxkIgorCisjZGVm aW5lIERDU1NfQ1RYTERfQ09OVFJPTF9TVEFUVVMJMHgwCisjZGVmaW5lICAgQ1RYTERfRU5BQkxF CQkJQklUKDApCisjZGVmaW5lICAgQVJCX1NFTAkJCUJJVCgxKQorI2RlZmluZSAgIFJEX0VSUl9F TgkJCUJJVCgyKQorI2RlZmluZSAgIERCX0NPTVBfRU4JCQlCSVQoMykKKyNkZWZpbmUgICBTQl9I UF9DT01QX0VOCQkJQklUKDQpCisjZGVmaW5lICAgU0JfTFBfQ09NUF9FTgkJCUJJVCg1KQorI2Rl ZmluZSAgIERCX1BFTkRfU0JfUkVDX0VOCQlCSVQoNikKKyNkZWZpbmUgICBTQl9QRU5EX0RJU1Bf QUNUSVZFX0VOCUJJVCg3KQorI2RlZmluZSAgIEFIQl9FUlJfRU4JCQlCSVQoOCkKKyNkZWZpbmUg ICBSRF9FUlIJCQlCSVQoMTYpCisjZGVmaW5lICAgREJfQ09NUAkJCUJJVCgxNykKKyNkZWZpbmUg ICBTQl9IUF9DT01QCQkJQklUKDE4KQorI2RlZmluZSAgIFNCX0xQX0NPTVAJCQlCSVQoMTkpCisj ZGVmaW5lICAgREJfUEVORF9TQl9SRUMJCUJJVCgyMCkKKyNkZWZpbmUgICBTQl9QRU5EX0RJU1Bf QUNUSVZFCQlCSVQoMjEpCisjZGVmaW5lICAgQUhCX0VSUgkJCUJJVCgyMikKKyNkZWZpbmUgRENT U19DVFhMRF9EQl9CQVNFX0FERFIJCTB4MTAKKyNkZWZpbmUgRENTU19DVFhMRF9EQl9DT1VOVAkJ MHgxNAorI2RlZmluZSBEQ1NTX0NUWExEX1NCX0JBU0VfQUREUgkJMHgxOAorI2RlZmluZSBEQ1NT X0NUWExEX1NCX0NPVU5UCQkweDFDCisjZGVmaW5lICAgU0JfSFBfQ09VTlRfUE9TCQkwCisjZGVm aW5lICAgU0JfSFBfQ09VTlRfTUFTSwkJMHhmZmZmCisjZGVmaW5lICAgU0JfTFBfQ09VTlRfUE9T CQkxNgorI2RlZmluZSAgIFNCX0xQX0NPVU5UX01BU0sJCTB4ZmZmZjAwMDAKKyNkZWZpbmUgRENT U19BSEJfRVJSX0FERFIJCTB4MjAKKworI2RlZmluZSBDVFhMRF9JUlFfTkFNRQkJCSJjdHhfbGQi CisjZGVmaW5lIENUWExEX0lSUV9DT01QTEVUSU9OCQkoREJfQ09NUCB8IFNCX0hQX0NPTVAgfCBT Ql9MUF9DT01QKQorI2RlZmluZSBDVFhMRF9JUlFfRVJST1IJCQkoUkRfRVJSIHwgREJfUEVORF9T Ql9SRUMgfCBBSEJfRVJSKQorCisvKiBUaGUgZm9sbG93aW5nIHNpemVzIGFyZSBpbiBjb250ZXh0 IGxvYWRlciBlbnRyaWVzLCA4IGJ5dGVzIGVhY2guICovCisjZGVmaW5lIENUWExEX0RCX0NUWF9F TlRSSUVTCQkxMDI0CS8qIG1heCA2NTUzNiAqLworI2RlZmluZSBDVFhMRF9TQl9MUF9DVFhfRU5U UklFUwkJMTAyNDAJLyogbWF4IDY1NTM2ICovCisjZGVmaW5lIENUWExEX1NCX0hQX0NUWF9FTlRS SUVTCQkyMDAwMAkvKiBtYXggNjU1MzYgKi8KKyNkZWZpbmUgQ1RYTERfU0JfQ1RYX0VOVFJJRVMJ CShDVFhMRF9TQl9MUF9DVFhfRU5UUklFUyArIFwKKwkJCQkJIENUWExEX1NCX0hQX0NUWF9FTlRS SUVTKQorCisvKiBTaXplcywgaW4gZW50cmllcywgb2YgdGhlIERCLCBTQl9IUCBhbmQgU0JfTFAg Y29udGV4dCByZWdpb25zLiAqLworc3RhdGljIHUxNiBkY3NzX2N0eGxkX2N0eF9zaXplWzNdID0g eworCUNUWExEX0RCX0NUWF9FTlRSSUVTLAorCUNUWExEX1NCX0hQX0NUWF9FTlRSSUVTLAorCUNU WExEX1NCX0xQX0NUWF9FTlRSSUVTCit9OworCisvKiB0aGlzIHJlcHJlc2VudHMgYW4gZW50cnkg aW4gdGhlIGNvbnRleHQgbG9hZGVyIG1hcCAqLworc3RydWN0IGRjc3NfY3R4bGRfaXRlbSB7CisJ dTMyIHZhbDsKKwl1MzIgb2ZzOworfTsKKworI2RlZmluZSBDVFhfSVRFTV9TSVpFCQkJc2l6ZW9m KHN0cnVjdCBkY3NzX2N0eGxkX2l0ZW0pCisKK3N0cnVjdCBkY3NzX2N0eGxkIHsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpjdHhsZF9yZWc7CisJaW50IGlycTsKKwlib29s IGlycV9lbjsKKworCXN0cnVjdCBkY3NzX2N0eGxkX2l0ZW0gKmRiWzJdOworCXN0cnVjdCBkY3Nz X2N0eGxkX2l0ZW0gKnNiX2hwWzJdOworCXN0cnVjdCBkY3NzX2N0eGxkX2l0ZW0gKnNiX2xwWzJd OworCisJZG1hX2FkZHJfdCBkYl9wYWRkclsyXTsKKwlkbWFfYWRkcl90IHNiX3BhZGRyWzJdOwor CisJdTE2IGN0eF9zaXplWzJdWzNdOyAvKiBob2xkcyB0aGUgc2l6ZXMgb2YgREIsIFNCX0hQIGFu ZCBTQl9MUCBjdHggKi8KKwl1OCBjdXJyZW50X2N0eDsKKworCWJvb2wgaW5fdXNlOworCWJvb2wg YXJtZWQ7CisKKwlzcGlubG9ja190IGxvY2s7IC8qIHByb3RlY3RzIGNvbmN1cmVudCBhY2Nlc3Mg dG8gcHJpdmF0ZSBkYXRhICovCisKKwl2b2lkICgqZHRnX2Rpc2FibGVfY2IpKHZvaWQgKmRhdGEp OworCXZvaWQgKmR0Z19kaXNhYmxlX2RhdGE7Cit9OworCitzdGF0aWMgaW50IF9fZGNzc19jdHhs ZF9lbmFibGUoc3RydWN0IGRjc3NfY3R4bGQgKmN0eGxkKTsKKworc3RhdGljIGlycXJldHVybl90 IGRjc3NfY3R4bGRfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg ZGNzc19jdHhsZCAqY3R4bGQgPSBkYXRhOworCXUzMiBpcnFfc3RhdHVzOworCisJaXJxX3N0YXR1 cyA9IGRjc3NfcmVhZGwoY3R4bGQtPmN0eGxkX3JlZyArIERDU1NfQ1RYTERfQ09OVFJPTF9TVEFU VVMpOworCisJaWYgKGlycV9zdGF0dXMgJiBDVFhMRF9JUlFfQ09NUExFVElPTiAmJgorCSAgICAh KGlycV9zdGF0dXMgJiBDVFhMRF9FTkFCTEUpICYmIGN0eGxkLT5pbl91c2UpIHsKKwkJY3R4bGQt PmluX3VzZSA9IGZhbHNlOworCisJCWlmIChjdHhsZC0+ZHRnX2Rpc2FibGVfY2IpIHsKKwkJCWN0 eGxkLT5kdGdfZGlzYWJsZV9jYihjdHhsZC0+ZHRnX2Rpc2FibGVfZGF0YSk7CisJCQljdHhsZC0+ ZHRnX2Rpc2FibGVfY2IgPSBOVUxMOworCQkJY3R4bGQtPmR0Z19kaXNhYmxlX2RhdGEgPSBOVUxM OworCQl9CisJfSBlbHNlIGlmIChpcnFfc3RhdHVzICYgQ1RYTERfSVJRX0VSUk9SKSB7CisJCS8q CisJCSAqIEV4Y2VwdCBmb3IgdGhyb3dpbmcgYW4gZXJyb3IgbWVzc2FnZSBhbmQgY2xlYXJpbmcg dGhlIHN0YXR1cworCQkgKiByZWdpc3RlciwgdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gaGVy ZS4KKwkJICovCisJCWRldl9lcnIoY3R4bGQtPmRldiwgImN0eGxkOiBlcnJvciBlbmNvdW50ZXJl ZDogJTA4eFxuIiwKKwkJCWlycV9zdGF0dXMpOworCQlkZXZfZXJyKGN0eGxkLT5kZXYsICJjdHhs ZDogZGI9JWQsIHNiX2hwPSVkLCBzYl9scD0lZFxuIiwKKwkJCWN0eGxkLT5jdHhfc2l6ZVtjdHhs ZC0+Y3VycmVudF9jdHggXiAxXVtDVFhfREJdLAorCQkJY3R4bGQtPmN0eF9zaXplW2N0eGxkLT5j dXJyZW50X2N0eCBeIDFdW0NUWF9TQl9IUF0sCisJCQljdHhsZC0+Y3R4X3NpemVbY3R4bGQtPmN1 cnJlbnRfY3R4IF4gMV1bQ1RYX1NCX0xQXSk7CisJfQorCisJZGNzc19jbHIoaXJxX3N0YXR1cyAm IChDVFhMRF9JUlFfRVJST1IgfCBDVFhMRF9JUlFfQ09NUExFVElPTiksCisJCSBjdHhsZC0+Y3R4 bGRfcmVnICsgRENTU19DVFhMRF9DT05UUk9MX1NUQVRVUyk7CisKKwlyZXR1cm4gSVJRX0hBTkRM RUQ7Cit9CisKK3N0YXRpYyBpbnQgZGNzc19jdHhsZF9pcnFfY29uZmlnKHN0cnVjdCBkY3NzX2N0 eGxkICpjdHhsZCwKKwkJCQkgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQg cmV0OworCisJY3R4bGQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsIENUWExE X0lSUV9OQU1FKTsKKwlpZiAoY3R4bGQtPmlycSA8IDApIHsKKwkJZGV2X2VycihjdHhsZC0+ZGV2 LCAiY3R4bGQ6IGNhbid0IGdldCBpcnEgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIGN0eGxkLT5pcnE7 CisJfQorCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShjdHhsZC0+ZGV2LCBjdHhsZC0+aXJxLAor CQkJICAgICAgIGRjc3NfY3R4bGRfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9PTkVTSE9U IHwgSVJRRl9UUklHR0VSX0hJR0gsCisJCQkgICAgICAgRENTU19DVFhMRF9ERVZOQU1FLCBjdHhs ZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGN0eGxkLT5kZXYsICJjdHhsZDogaXJxIHJlcXVl c3QgZmFpbGVkLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJY3R4bGQtPmlycV9lbiA9IHRy dWU7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkY3NzX2N0eGxkX2h3X2NmZyhzdHJ1Y3QgZGNz c19jdHhsZCAqY3R4bGQpCit7CisJZGNzc193cml0ZWwoUkRfRVJSX0VOIHwgU0JfSFBfQ09NUF9F TiB8CisJCSAgICBEQl9QRU5EX1NCX1JFQ19FTiB8IEFIQl9FUlJfRU4gfCBSRF9FUlIgfCBBSEJf RVJSLAorCQkgICAgY3R4bGQtPmN0eGxkX3JlZyArIERDU1NfQ1RYTERfQ09OVFJPTF9TVEFUVVMp OworfQorCitzdGF0aWMgdm9pZCBkY3NzX2N0eGxkX2ZyZWVfY3R4KHN0cnVjdCBkY3NzX2N0eGxk ICpjdHhsZCkKK3sKKwlzdHJ1Y3QgZGNzc19jdHhsZF9pdGVtICpjdHg7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmIChjdHhsZC0+ZGJbaV0pIHsKKwkJCWRtYW1f ZnJlZV9jb2hlcmVudChjdHhsZC0+ZGV2LAorCQkJCQkgICBDVFhMRF9EQl9DVFhfRU5UUklFUyAq IHNpemVvZigqY3R4KSwKKwkJCQkJICAgY3R4bGQtPmRiW2ldLCBjdHhsZC0+ZGJfcGFkZHJbaV0p OworCQkJY3R4bGQtPmRiW2ldID0gTlVMTDsKKwkJCWN0eGxkLT5kYl9wYWRkcltpXSA9IDA7CisJ CX0KKworCQlpZiAoY3R4bGQtPnNiX2hwW2ldKSB7CisJCQlkbWFtX2ZyZWVfY29oZXJlbnQoY3R4 bGQtPmRldiwKKwkJCQkJICAgQ1RYTERfU0JfQ1RYX0VOVFJJRVMgKiBzaXplb2YoKmN0eCksCisJ CQkJCSAgIGN0eGxkLT5zYl9ocFtpXSwgY3R4bGQtPnNiX3BhZGRyW2ldKTsKKwkJCWN0eGxkLT5z Yl9ocFtpXSA9IE5VTEw7CisJCQljdHhsZC0+c2JfcGFkZHJbaV0gPSAwOworCQl9CisJfQorfQor CitzdGF0aWMgaW50IGRjc3NfY3R4bGRfYWxsb2NfY3R4KHN0cnVjdCBkY3NzX2N0eGxkICpjdHhs ZCkKK3sKKwlzdHJ1Y3QgZGNzc19jdHhsZF9pdGVtICpjdHg7CisJaW50IGk7CisJZG1hX2FkZHJf dCBkbWFfaGFuZGxlOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQljdHggPSBkbWFt X2FsbG9jX2NvaGVyZW50KGN0eGxkLT5kZXYsCisJCQkJCSAgQ1RYTERfREJfQ1RYX0VOVFJJRVMg KiBzaXplb2YoKmN0eCksCisJCQkJCSAgJmRtYV9oYW5kbGUsIEdGUF9LRVJORUwpOworCQlpZiAo IWN0eCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWN0eGxkLT5kYltpXSA9IGN0eDsKKwkJY3R4 bGQtPmRiX3BhZGRyW2ldID0gZG1hX2hhbmRsZTsKKworCQljdHggPSBkbWFtX2FsbG9jX2NvaGVy ZW50KGN0eGxkLT5kZXYsCisJCQkJCSAgQ1RYTERfU0JfQ1RYX0VOVFJJRVMgKiBzaXplb2YoKmN0 eCksCisJCQkJCSAgJmRtYV9oYW5kbGUsIEdGUF9LRVJORUwpOworCQlpZiAoIWN0eCkKKwkJCXJl dHVybiAtRU5PTUVNOworCisJCWN0eGxkLT5zYl9ocFtpXSA9IGN0eDsKKwkJY3R4bGQtPnNiX2xw W2ldID0gY3R4ICsgQ1RYTERfU0JfSFBfQ1RYX0VOVFJJRVM7CisKKwkJY3R4bGQtPnNiX3BhZGRy W2ldID0gZG1hX2hhbmRsZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRjc3NfY3R4bGRf aW5pdChzdHJ1Y3QgZGNzc19kZXYgKmRjc3MsIHVuc2lnbmVkIGxvbmcgY3R4bGRfYmFzZSkKK3sK KwlzdHJ1Y3QgZGNzc19jdHhsZCAqY3R4bGQ7CisJaW50IHJldDsKKworCWN0eGxkID0gZGV2bV9r emFsbG9jKGRjc3MtPmRldiwgc2l6ZW9mKHN0cnVjdCBkY3NzX2N0eGxkKSwKKwkJCSAgICAgR0ZQ X0tFUk5FTCk7CisJaWYgKCFjdHhsZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkY3NzLT5jdHhs ZCA9IGN0eGxkOworCWN0eGxkLT5kZXYgPSBkY3NzLT5kZXY7CisKKwlzcGluX2xvY2tfaW5pdCgm Y3R4bGQtPmxvY2spOworCisJcmV0ID0gZGNzc19jdHhsZF9hbGxvY19jdHgoY3R4bGQpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihkY3NzLT5kZXYsICJjdHhsZDogY2Fubm90IGFsbG9jYXRlIGNv bnRleHQgbWVtb3J5LlxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWN0eGxkLT5jdHhsZF9yZWcg PSBkZXZtX2lvcmVtYXAoZGNzcy0+ZGV2LCBjdHhsZF9iYXNlLCBTWl80Syk7CisJaWYgKCFjdHhs ZC0+Y3R4bGRfcmVnKSB7CisJCWRldl9lcnIoZGNzcy0+ZGV2LCAiY3R4bGQ6IHVuYWJsZSB0byBy ZW1hcCBjdHhsZCBiYXNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQor CisJcmV0ID0gZGNzc19jdHhsZF9pcnFfY29uZmlnKGN0eGxkLCB0b19wbGF0Zm9ybV9kZXZpY2Uo ZGNzcy0+ZGV2KSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfaXJxOworCisJZGNzc19jdHhsZF9o d19jZmcoY3R4bGQpOworCisJcmV0dXJuIDA7CisKK2Vycl9pcnE6CisJZGV2bV9pb3VubWFwKGN0 eGxkLT5kZXYsIGN0eGxkLT5jdHhsZF9yZWcpOworCitlcnI6CisJZGNzc19jdHhsZF9mcmVlX2N0 eChjdHhsZCk7CisJZGV2bV9rZnJlZShjdHhsZC0+ZGV2LCBjdHhsZCk7CisKKwlyZXR1cm4gcmV0 OworfQorCit2b2lkIGRjc3NfY3R4bGRfZXhpdChzdHJ1Y3QgZGNzc19jdHhsZCAqY3R4bGQpCit7 CisJZGV2bV9mcmVlX2lycShjdHhsZC0+ZGV2LCBjdHhsZC0+aXJxLCBjdHhsZCk7CisKKwlpZiAo Y3R4bGQtPmN0eGxkX3JlZykKKwkJZGV2bV9pb3VubWFwKGN0eGxkLT5kZXYsIGN0eGxkLT5jdHhs ZF9yZWcpOworCisJZGNzc19jdHhsZF9mcmVlX2N0eChjdHhsZCk7CisJZGV2bV9rZnJlZShjdHhs ZC0+ZGV2LCBjdHhsZCk7Cit9CisKK3N0YXRpYyBpbnQgX19kY3NzX2N0eGxkX2VuYWJsZShzdHJ1 Y3QgZGNzc19jdHhsZCAqY3R4bGQpCit7CisJaW50IGN1cnJfY3R4ID0gY3R4bGQtPmN1cnJlbnRf Y3R4OworCXUzMiBkYl9iYXNlLCBzYl9iYXNlLCBzYl9jb3VudDsKKwl1MzIgc2JfaHBfY250LCBz Yl9scF9jbnQsIGRiX2NudDsKKwlzdHJ1Y3QgZGNzc19kZXYgKmRjc3MgPSBkY3NzX2Rydl9kZXZf dG9fZGNzcyhjdHhsZC0+ZGV2KTsKKworCWRjc3NfZHByX3dyaXRlX3N5c2N0cmwoZGNzcy0+ZHBy KTsKKworCWRjc3Nfc2NhbGVyX3dyaXRlX3NjbGN0cmwoZGNzcy0+c2NhbGVyKTsKKworCXNiX2hw X2NudCA9IGN0eGxkLT5jdHhfc2l6ZVtjdXJyX2N0eF1bQ1RYX1NCX0hQXTsKKwlzYl9scF9jbnQg PSBjdHhsZC0+Y3R4X3NpemVbY3Vycl9jdHhdW0NUWF9TQl9MUF07CisJZGJfY250ID0gY3R4bGQt PmN0eF9zaXplW2N1cnJfY3R4XVtDVFhfREJdOworCisJLyogbWFrZSBzdXJlIFNCX0xQIGNvbnRl eHQgYXJlYSBjb21lcyBhZnRlciBTQl9IUCAqLworCWlmIChzYl9scF9jbnQgJiYKKwkgICAgY3R4 bGQtPnNiX2xwW2N1cnJfY3R4XSAhPSBjdHhsZC0+c2JfaHBbY3Vycl9jdHhdICsgc2JfaHBfY250 KSB7CisJCXN0cnVjdCBkY3NzX2N0eGxkX2l0ZW0gKnNiX2xwX2FkanVzdGVkOworCisJCXNiX2xw X2FkanVzdGVkID0gY3R4bGQtPnNiX2hwW2N1cnJfY3R4XSArIHNiX2hwX2NudDsKKworCQltZW1j cHkoc2JfbHBfYWRqdXN0ZWQsIGN0eGxkLT5zYl9scFtjdXJyX2N0eF0sCisJCSAgICAgICBzYl9s cF9jbnQgKiBDVFhfSVRFTV9TSVpFKTsKKwl9CisKKwlkYl9iYXNlID0gZGJfY250ID8gY3R4bGQt PmRiX3BhZGRyW2N1cnJfY3R4XSA6IDA7CisKKwlkY3NzX3dyaXRlbChkYl9iYXNlLCBjdHhsZC0+ Y3R4bGRfcmVnICsgRENTU19DVFhMRF9EQl9CQVNFX0FERFIpOworCWRjc3Nfd3JpdGVsKGRiX2Nu dCwgY3R4bGQtPmN0eGxkX3JlZyArIERDU1NfQ1RYTERfREJfQ09VTlQpOworCisJaWYgKHNiX2hw X2NudCkKKwkJc2JfY291bnQgPSAoKHNiX2hwX2NudCA8PCBTQl9IUF9DT1VOVF9QT1MpICYgU0Jf SFBfQ09VTlRfTUFTSykgfAorCQkJICAgKChzYl9scF9jbnQgPDwgU0JfTFBfQ09VTlRfUE9TKSAm IFNCX0xQX0NPVU5UX01BU0spOworCWVsc2UKKwkJc2JfY291bnQgPSAoc2JfbHBfY250IDw8IFNC X0hQX0NPVU5UX1BPUykgJiBTQl9IUF9DT1VOVF9NQVNLOworCisJc2JfYmFzZSA9IHNiX2NvdW50 ID8gY3R4bGQtPnNiX3BhZGRyW2N1cnJfY3R4XSA6IDA7CisKKwlkY3NzX3dyaXRlbChzYl9iYXNl LCBjdHhsZC0+Y3R4bGRfcmVnICsgRENTU19DVFhMRF9TQl9CQVNFX0FERFIpOworCWRjc3Nfd3Jp dGVsKHNiX2NvdW50LCBjdHhsZC0+Y3R4bGRfcmVnICsgRENTU19DVFhMRF9TQl9DT1VOVCk7CisK KwkvKiBlbmFibGUgdGhlIGNvbnRleHQgbG9hZGVyICovCisJZGNzc19zZXQoQ1RYTERfRU5BQkxF LCBjdHhsZC0+Y3R4bGRfcmVnICsgRENTU19DVFhMRF9DT05UUk9MX1NUQVRVUyk7CisKKwljdHhs ZC0+aW5fdXNlID0gdHJ1ZTsKKworCS8qCisJICogVG9nZ2xlIHRoZSBjdXJyZW50IGNvbnRleHQg dG8gdGhlIGFsdGVybmF0ZSBvbmUgc28gdGhhdCBhbnkgdXBkYXRlcworCSAqIGluIHRoZSBtb2R1 bGVzJyBzZXR0aW5ncyB0YWtlIHBsYWNlIHRoZXJlLgorCSAqLworCWN0eGxkLT5jdXJyZW50X2N0 eCBePSAxOworCisJY3R4bGQtPmN0eF9zaXplW2N0eGxkLT5jdXJyZW50X2N0eF1bQ1RYX0RCXSA9 IDA7CisJY3R4bGQtPmN0eF9zaXplW2N0eGxkLT5jdXJyZW50X2N0eF1bQ1RYX1NCX0hQXSA9IDA7 CisJY3R4bGQtPmN0eF9zaXplW2N0eGxkLT5jdXJyZW50X2N0eF1bQ1RYX1NCX0xQXSA9IDA7CisK KwlyZXR1cm4gMDsKK30KKworaW50IGRjc3NfY3R4bGRfZW5hYmxlKHN0cnVjdCBkY3NzX2N0eGxk ICpjdHhsZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUo JmN0eGxkLT5sb2NrLCBmbGFncyk7CisJY3R4bGQtPmFybWVkID0gdHJ1ZTsKKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZjdHhsZC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3Zv aWQgZGNzc19jdHhsZF9raWNrKHN0cnVjdCBkY3NzX2N0eGxkICpjdHhsZCkKK3sKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eGxkLT5sb2NrLCBmbGFncyk7 CisJaWYgKGN0eGxkLT5hcm1lZCAmJiAhY3R4bGQtPmluX3VzZSkgeworCQljdHhsZC0+YXJtZWQg PSBmYWxzZTsKKwkJX19kY3NzX2N0eGxkX2VuYWJsZShjdHhsZCk7CisJfQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmN0eGxkLT5sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgZGNzc19jdHhsZF93 cml0ZV9pcnFzYWZlKHN0cnVjdCBkY3NzX2N0eGxkICpjdHhsZCwgdTMyIGN0eF9pZCwgdTMyIHZh bCwKKwkJCSAgICAgIHUzMiByZWdfb2ZzKQoreworCWludCBjdXJyX2N0eCA9IGN0eGxkLT5jdXJy ZW50X2N0eDsKKwlzdHJ1Y3QgZGNzc19jdHhsZF9pdGVtICpjdHhbXSA9IHsKKwkJW0NUWF9EQl0g PSBjdHhsZC0+ZGJbY3Vycl9jdHhdLAorCQlbQ1RYX1NCX0hQXSA9IGN0eGxkLT5zYl9ocFtjdXJy X2N0eF0sCisJCVtDVFhfU0JfTFBdID0gY3R4bGQtPnNiX2xwW2N1cnJfY3R4XQorCX07CisJaW50 IGl0ZW1faWR4ID0gY3R4bGQtPmN0eF9zaXplW2N1cnJfY3R4XVtjdHhfaWRdOworCisJaWYgKGl0 ZW1faWR4ICsgMSA+IGRjc3NfY3R4bGRfY3R4X3NpemVbY3R4X2lkXSkgeworCQlXQVJOX09OKDEp OworCQlyZXR1cm47CisJfQorCisJY3R4W2N0eF9pZF1baXRlbV9pZHhdLnZhbCA9IHZhbDsKKwlj dHhbY3R4X2lkXVtpdGVtX2lkeF0ub2ZzID0gcmVnX29mczsKKwljdHhsZC0+Y3R4X3NpemVbY3Vy cl9jdHhdW2N0eF9pZF0gKz0gMTsKK30KKwordm9pZCBkY3NzX2N0eGxkX3dyaXRlKHN0cnVjdCBk Y3NzX2N0eGxkICpjdHhsZCwgdTMyIGN0eF9pZCwKKwkJICAgICAgdTMyIHZhbCwgdTMyIHJlZ19v ZnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjdHhs ZC0+bG9jaywgZmxhZ3MpOworCWRjc3NfY3R4bGRfd3JpdGVfaXJxc2FmZShjdHhsZCwgY3R4X2lk LCB2YWwsIHJlZ19vZnMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eGxkLT5sb2NrLCBm bGFncyk7Cit9CisKK2Jvb2wgZGNzc19jdHhsZF9pc19mbHVzaGVkKHN0cnVjdCBkY3NzX2N0eGxk ICpjdHhsZCkKK3sKKwlyZXR1cm4gY3R4bGQtPmN0eF9zaXplW2N0eGxkLT5jdXJyZW50X2N0eF1b Q1RYX0RCXSA9PSAwICYmCisJCWN0eGxkLT5jdHhfc2l6ZVtjdHhsZC0+Y3VycmVudF9jdHhdW0NU WF9TQl9IUF0gPT0gMCAmJgorCQljdHhsZC0+Y3R4X3NpemVbY3R4bGQtPmN1cnJlbnRfY3R4XVtD VFhfU0JfTFBdID09IDA7Cit9CisKK2ludCBkY3NzX2N0eGxkX3Jlc3VtZShzdHJ1Y3QgZGNzc19j dHhsZCAqY3R4bGQpCit7CisJZGNzc19jdHhsZF9od19jZmcoY3R4bGQpOworCisJaWYgKCFjdHhs ZC0+aXJxX2VuKSB7CisJCWVuYWJsZV9pcnEoY3R4bGQtPmlycSk7CisJCWN0eGxkLT5pcnFfZW4g PSB0cnVlOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZGNzc19jdHhsZF9zdXNwZW5kKHN0 cnVjdCBkY3NzX2N0eGxkICpjdHhsZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgd2FpdF90aW1l X21zID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGNzc19jdHhsZF9raWNrKGN0eGxk KTsKKworCXdoaWxlIChjdHhsZC0+aW5fdXNlICYmIHdhaXRfdGltZV9tcyA8IDUwMCkgeworCQlt c2xlZXAoMjApOworCQl3YWl0X3RpbWVfbXMgKz0gMjA7CisJfQorCisJaWYgKHdhaXRfdGltZV9t cyA+IDUwMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4 bGQtPmxvY2ssIGZsYWdzKTsKKworCWlmIChjdHhsZC0+aXJxX2VuKSB7CisJCWRpc2FibGVfaXJx X25vc3luYyhjdHhsZC0+aXJxKTsKKwkJY3R4bGQtPmlycV9lbiA9IGZhbHNlOworCX0KKworCS8q IHJlc2V0IGNvbnRleHQgcmVnaW9uIGFuZCBzaXplcyAqLworCWN0eGxkLT5jdXJyZW50X2N0eCA9 IDA7CisJY3R4bGQtPmN0eF9zaXplWzBdW0NUWF9EQl0gPSAwOworCWN0eGxkLT5jdHhfc2l6ZVsw XVtDVFhfU0JfSFBdID0gMDsKKwljdHhsZC0+Y3R4X3NpemVbMF1bQ1RYX1NCX0xQXSA9IDA7CisK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHhsZC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJu IHJldDsKK30KKwordm9pZCBkY3NzX2N0eGxkX3JlZ2lzdGVyX2R0Z19kaXNhYmxlX2NiKHN0cnVj dCBkY3NzX2N0eGxkICpjdHhsZCwKKwkJCQkJdm9pZCAoKmNiKSh2b2lkICopLAorCQkJCQl2b2lk ICpkYXRhKQoreworCWN0eGxkLT5kdGdfZGlzYWJsZV9jYiA9IGNiOworCWN0eGxkLT5kdGdfZGlz YWJsZV9kYXRhID0gZGF0YTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvZGNz cy9kY3NzLWRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtZGV2LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjI2NWJmM2MKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1kZXYuYwpAQCAtMCwwICsxLDI4NiBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgMjAx OSBOWFAuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L29m X2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgv cG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fbW9kZXNldF9oZWxwZXIuaD4KKworI2lu Y2x1ZGUgImRjc3MtZGV2LmgiCisKK3N0YXRpYyB2b2lkIGRjc3NfY2xvY2tzX2VuYWJsZShzdHJ1 Y3QgZGNzc19kZXYgKmRjc3MpCit7CisJaWYgKGRjc3MtPmNsa3Nfb24pCisJCXJldHVybjsKKwor CWNsa19wcmVwYXJlX2VuYWJsZShkY3NzLT5heGlfY2xrKTsKKwljbGtfcHJlcGFyZV9lbmFibGUo ZGNzcy0+YXBiX2Nsayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGRjc3MtPnJ0cm1fY2xrKTsKKwlj bGtfcHJlcGFyZV9lbmFibGUoZGNzcy0+ZHRyY19jbGspOworCWNsa19wcmVwYXJlX2VuYWJsZShk Y3NzLT5waXhfY2xrKTsKKworCWRjc3MtPmNsa3Nfb24gPSB0cnVlOworfQorCitzdGF0aWMgdm9p ZCBkY3NzX2Nsb2Nrc19kaXNhYmxlKHN0cnVjdCBkY3NzX2RldiAqZGNzcykKK3sKKwlpZiAoIWRj c3MtPmNsa3Nfb24pCisJCXJldHVybjsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkY3NzLT5w aXhfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGNzcy0+ZHRyY19jbGspOworCWNsa19k aXNhYmxlX3VucHJlcGFyZShkY3NzLT5ydHJtX2Nsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KGRjc3MtPmFwYl9jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkY3NzLT5heGlfY2xrKTsK KworCWRjc3MtPmNsa3Nfb24gPSBmYWxzZTsKK30KKworc3RhdGljIGludCBkY3NzX3N1Ym1vZHVs ZXNfaW5pdChzdHJ1Y3QgZGNzc19kZXYgKmRjc3MpCit7CisJaW50IHJldCA9IDA7CisJdTMyIGJh c2VfYWRkciA9IGRjc3MtPnN0YXJ0X2FkZHI7CisJY29uc3Qgc3RydWN0IGRjc3NfdHlwZV9kYXRh ICpkZXZ0eXBlID0gZGNzcy0+ZGV2dHlwZTsKKworCWRjc3NfY2xvY2tzX2VuYWJsZShkY3NzKTsK KworCXJldCA9IGRjc3NfYmxrY3RsX2luaXQoZGNzcywgYmFzZV9hZGRyICsgZGV2dHlwZS0+Ymxr Y3RsX29mcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRjc3NfY3R4bGRf aW5pdChkY3NzLCBiYXNlX2FkZHIgKyBkZXZ0eXBlLT5jdHhsZF9vZnMpOworCWlmIChyZXQpCisJ CWdvdG8gY3R4bGRfZXJyOworCisJcmV0ID0gZGNzc19kdGdfaW5pdChkY3NzLCBiYXNlX2FkZHIg KyBkZXZ0eXBlLT5kdGdfb2ZzKTsKKwlpZiAocmV0KQorCQlnb3RvIGR0Z19lcnI7CisKKwlyZXQg PSBkY3NzX3NzX2luaXQoZGNzcywgYmFzZV9hZGRyICsgZGV2dHlwZS0+c3Nfb2ZzKTsKKwlpZiAo cmV0KQorCQlnb3RvIHNzX2VycjsKKworCXJldCA9IGRjc3NfZHByX2luaXQoZGNzcywgYmFzZV9h ZGRyICsgZGV2dHlwZS0+ZHByX29mcyk7CisJaWYgKHJldCkKKwkJZ290byBkcHJfZXJyOworCisJ cmV0ID0gZGNzc19zY2FsZXJfaW5pdChkY3NzLCBiYXNlX2FkZHIgKyBkZXZ0eXBlLT5zY2FsZXJf b2ZzKTsKKwlpZiAocmV0KQorCQlnb3RvIHNjYWxlcl9lcnI7CisKKwlyZXR1cm4gMDsKKworc2Nh bGVyX2VycjoKKwlkY3NzX2Rwcl9leGl0KGRjc3MtPmRwcik7CisKK2Rwcl9lcnI6CisJZGNzc19z c19leGl0KGRjc3MtPnNzKTsKKworc3NfZXJyOgorCWRjc3NfZHRnX2V4aXQoZGNzcy0+ZHRnKTsK KworZHRnX2VycjoKKwlkY3NzX2N0eGxkX2V4aXQoZGNzcy0+Y3R4bGQpOworCitjdHhsZF9lcnI6 CisJZGNzc19ibGtjdGxfZXhpdChkY3NzLT5ibGtjdGwpOworCisJZGNzc19jbG9ja3NfZGlzYWJs ZShkY3NzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRjc3Nfc3VibW9kdWxl c19zdG9wKHN0cnVjdCBkY3NzX2RldiAqZGNzcykKK3sKKwlkY3NzX2Nsb2Nrc19lbmFibGUoZGNz cyk7CisJZGNzc19zY2FsZXJfZXhpdChkY3NzLT5zY2FsZXIpOworCWRjc3NfZHByX2V4aXQoZGNz cy0+ZHByKTsKKwlkY3NzX3NzX2V4aXQoZGNzcy0+c3MpOworCWRjc3NfZHRnX2V4aXQoZGNzcy0+ ZHRnKTsKKwlkY3NzX2N0eGxkX2V4aXQoZGNzcy0+Y3R4bGQpOworCWRjc3NfYmxrY3RsX2V4aXQo ZGNzcy0+YmxrY3RsKTsKKwlkY3NzX2Nsb2Nrc19kaXNhYmxlKGRjc3MpOworfQorCitzdGF0aWMg aW50IGRjc3NfY2xrc19pbml0KHN0cnVjdCBkY3NzX2RldiAqZGNzcykKK3sKKwlpbnQgaTsKKwlz dHJ1Y3QgeworCQljb25zdCBjaGFyICppZDsKKwkJc3RydWN0IGNsayAqKmNsazsKKwl9IGNsa3Nb XSA9IHsKKwkJeyJhcGIiLCAgICZkY3NzLT5hcGJfY2xrfSwKKwkJeyJheGkiLCAgICZkY3NzLT5h eGlfY2xrfSwKKwkJeyJwaXgiLCAgICZkY3NzLT5waXhfY2xrfSwKKwkJeyJydHJtIiwgICZkY3Nz LT5ydHJtX2Nsa30sCisJCXsiZHRyYyIsICAmZGNzcy0+ZHRyY19jbGt9LAorCX07CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGtzKTsgaSsrKSB7CisJCSpjbGtzW2ldLmNsayA9IGRl dm1fY2xrX2dldChkY3NzLT5kZXYsIGNsa3NbaV0uaWQpOworCQlpZiAoSVNfRVJSKCpjbGtzW2ld LmNsaykpIHsKKwkJCWRldl9lcnIoZGNzcy0+ZGV2LCAiZmFpbGVkIHRvIGdldCAlcyBjbG9ja1xu IiwKKwkJCQljbGtzW2ldLmlkKTsKKwkJCXJldHVybiBQVFJfRVJSKCpjbGtzW2ldLmNsayk7CisJ CX0KKwl9CisKKwlkY3NzLT5jbGtzX29uID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgZGNzc19jbGtzX3JlbGVhc2Uoc3RydWN0IGRjc3NfZGV2ICpkY3NzKQoreworCWRl dm1fY2xrX3B1dChkY3NzLT5kZXYsIGRjc3MtPmR0cmNfY2xrKTsKKwlkZXZtX2Nsa19wdXQoZGNz cy0+ZGV2LCBkY3NzLT5ydHJtX2Nsayk7CisJZGV2bV9jbGtfcHV0KGRjc3MtPmRldiwgZGNzcy0+ cGl4X2Nsayk7CisJZGV2bV9jbGtfcHV0KGRjc3MtPmRldiwgZGNzcy0+YXhpX2Nsayk7CisJZGV2 bV9jbGtfcHV0KGRjc3MtPmRldiwgZGNzcy0+YXBiX2Nsayk7Cit9CisKK3N0cnVjdCBkY3NzX2Rl diAqZGNzc19kZXZfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBoZG1pX291dHB1dCkK K3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRl dik7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgZGNzc19kZXYg KmRjc3M7CisJY29uc3Qgc3RydWN0IGRjc3NfdHlwZV9kYXRhICpkZXZ0eXBlOworCisJZGV2dHlw ZSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOworCWlmICghZGV2dHlwZSkgeworCQlk ZXZfZXJyKGRldiwgIm5vIGRldmljZSBtYXRjaCBmb3VuZFxuIik7CisJCXJldHVybiBFUlJfUFRS KC1FTk9ERVYpOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JF U09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0 IG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwor CWRjc3MgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGRjc3NfZGV2KSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFkY3NzKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRjc3Mt PmRldiA9IGRldjsKKwlkY3NzLT5kZXZ0eXBlID0gZGV2dHlwZTsKKwlkY3NzLT5oZG1pX291dHB1 dCA9IGhkbWlfb3V0cHV0OworCisJcmV0ID0gZGNzc19jbGtzX2luaXQoZGNzcyk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKGRldiwgImNsb2NrcyBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwor CQlnb3RvIGVycjsKKwl9CisKKwlkY3NzLT5vZl9wb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlf aWQoZGV2LT5vZl9ub2RlLCAwKTsKKwlpZiAoIWRjc3MtPm9mX3BvcnQpIHsKKwkJZGV2X2Vycihk ZXYsICJubyBwb3J0QDAgbm9kZSBpbiAlc1xuIiwgZGV2LT5vZl9ub2RlLT5mdWxsX25hbWUpOwor CQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGNsa3NfZXJyOworCX0KKworCWRjc3MtPnN0YXJ0X2Fk ZHIgPSByZXMtPnN0YXJ0OworCisJcmV0ID0gZGNzc19zdWJtb2R1bGVzX2luaXQoZGNzcyk7CisJ aWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgInN1Ym1vZHVsZXMgaW5pdGlhbGl6YXRpb24gZmFp bGVkXG4iKTsKKwkJZ290byBjbGtzX2VycjsKKwl9CisKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYp OworCisJcmV0dXJuIGRjc3M7CisKK2Nsa3NfZXJyOgorCWRjc3NfY2xrc19yZWxlYXNlKGRjc3Mp OworCitlcnI6CisJZGV2bV9rZnJlZShkY3NzLT5kZXYsIGRjc3MpOworCisJcmV0dXJuIEVSUl9Q VFIocmV0KTsKK30KKwordm9pZCBkY3NzX2Rldl9kZXN0cm95KHN0cnVjdCBkY3NzX2RldiAqZGNz cykKK3sKKwlwbV9ydW50aW1lX2Rpc2FibGUoZGNzcy0+ZGV2KTsKKworCWRjc3Nfc3VibW9kdWxl c19zdG9wKGRjc3MpOworCisJZGNzc19jbGtzX3JlbGVhc2UoZGNzcyk7CisKKwlkZXZtX2tmcmVl KGRjc3MtPmRldiwgZGNzcyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK2ludCBkY3Nz X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGNzc19kZXYgKmRj c3MgPSBkY3NzX2Rydl9kZXZfdG9fZGNzcyhkZXYpOworCWludCByZXQ7CisKKwlkcm1fbW9kZV9j b25maWdfaGVscGVyX3N1c3BlbmQoZGNzc19kcnZfZGV2X3RvX2RybShkZXYpKTsKKworCWlmIChw bV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGRjc3NfY3R4 bGRfc3VzcGVuZChkY3NzLT5jdHhsZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRj c3NfY2xvY2tzX2Rpc2FibGUoZGNzcyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRjc3NfZGV2 X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRjc3NfZGV2ICpkY3NzID0g ZGNzc19kcnZfZGV2X3RvX2Rjc3MoZGV2KTsKKworCWlmIChwbV9ydW50aW1lX3N1c3BlbmRlZChk ZXYpKSB7CisJCWRybV9tb2RlX2NvbmZpZ19oZWxwZXJfcmVzdW1lKGRjc3NfZHJ2X2Rldl90b19k cm0oZGV2KSk7CisJCXJldHVybiAwOworCX0KKworCWRjc3NfY2xvY2tzX2VuYWJsZShkY3NzKTsK KworCWRjc3NfYmxrY3RsX2NmZyhkY3NzLT5ibGtjdGwpOworCisJZGNzc19jdHhsZF9yZXN1bWUo ZGNzcy0+Y3R4bGQpOworCisJZHJtX21vZGVfY29uZmlnX2hlbHBlcl9yZXN1bWUoZGNzc19kcnZf ZGV2X3RvX2RybShkZXYpKTsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QTV9T TEVFUCAqLworCisjaWZkZWYgQ09ORklHX1BNCitpbnQgZGNzc19kZXZfcnVudGltZV9zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGNzc19kZXYgKmRjc3MgPSBkY3NzX2Ry dl9kZXZfdG9fZGNzcyhkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBkY3NzX2N0eGxkX3N1c3Bl bmQoZGNzcy0+Y3R4bGQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkY3NzX2Nsb2Nr c19kaXNhYmxlKGRjc3MpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkY3NzX2Rldl9ydW50aW1l X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRjc3NfZGV2ICpkY3NzID0g ZGNzc19kcnZfZGV2X3RvX2Rjc3MoZGV2KTsKKworCWRjc3NfY2xvY2tzX2VuYWJsZShkY3NzKTsK KworCWRjc3NfYmxrY3RsX2NmZyhkY3NzLT5ibGtjdGwpOworCisJZGNzc19jdHhsZF9yZXN1bWUo ZGNzcy0+Y3R4bGQpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNICovCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1kZXYuaCBiL2RyaXZlcnMv Z3B1L2RybS9pbXgvZGNzcy9kY3NzLWRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwLi4xNWM1ZGUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9k Y3NzL2Rjc3MtZGV2LmgKQEAgLTAsMCArMSwxOTUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wICovCisvKgorICogQ29weXJpZ2h0IDIwMTkgTlhQLgorICovCisKKyNpZm5k ZWYgX19EQ1NTX1BSVl9IX18KKyNkZWZpbmUgX19EQ1NTX1BSVl9IX18KKworI2luY2x1ZGUgPGRy bS9kcm1fZm91cmNjLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDx2aWRlby92 aWRlb21vZGUuaD4KKworI2RlZmluZSBTRVQJCQkweDA0CisjZGVmaW5lIENMUgkJCTB4MDgKKyNk ZWZpbmUgVEdMCQkJMHgwQworCisjZGVmaW5lIGRjc3Nfd3JpdGVsKHYsIGMpCXdyaXRlbCgodiks IChjKSkKKyNkZWZpbmUgZGNzc19yZWFkbChjKQkJcmVhZGwoYykKKyNkZWZpbmUgZGNzc19zZXQo diwgYykJCXdyaXRlbCgodiksIChjKSArIFNFVCkKKyNkZWZpbmUgZGNzc19jbHIodiwgYykJCXdy aXRlbCgodiksIChjKSArIENMUikKKyNkZWZpbmUgZGNzc190b2dnbGUodiwgYykJd3JpdGVsKCh2 KSwgKGMpICsgVEdMKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGNzc191cGRhdGUodTMyIHYsIHUz MiBtLCB2b2lkIF9faW9tZW0gKmMpCit7CisJd3JpdGVsKChyZWFkbChjKSAmIH4obSkpIHwgKHYp LCAoYykpOworfQorCisjZGVmaW5lIERDU1NfREJHX1JFRyhyZWcpCXsubmFtZSA9ICNyZWcsIC5v ZnMgPSByZWd9CisKK2VudW0geworCURDU1NfSU1YOE1RID0gMCwKK307CisKK3N0cnVjdCBkY3Nz X3R5cGVfZGF0YSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1MzIgYmxrY3RsX29mczsKKwl1MzIg Y3R4bGRfb2ZzOworCXUzMiByZHNyY19vZnM7CisJdTMyIHdyc2NsX29mczsKKwl1MzIgZHRnX29m czsKKwl1MzIgc2NhbGVyX29mczsKKwl1MzIgc3Nfb2ZzOworCXUzMiBkcHJfb2ZzOworCXUzMiBk dHJjX29mczsKKwl1MzIgZGVjNDAwZF9vZnM7CisJdTMyIGhkcjEwX29mczsKK307CisKK3N0cnVj dCBkY3NzX2RlYnVnX3JlZyB7CisJY2hhciAqbmFtZTsKKwl1MzIgb2ZzOworfTsKKworZW51bSBk Y3NzX2N0eGxkX2N0eF90eXBlIHsKKwlDVFhfREIsCisJQ1RYX1NCX0hQLCAvKiBoaWdoLXByaW9y aXR5ICovCisJQ1RYX1NCX0xQLCAvKiBsb3ctcHJpb3JpdHkgICovCit9OworCitzdHJ1Y3QgZGNz c19kZXYgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwljb25zdCBzdHJ1Y3QgZGNzc190eXBlX2Rh dGEgKmRldnR5cGU7CisJc3RydWN0IGRldmljZV9ub2RlICpvZl9wb3J0OworCisJdTMyIHN0YXJ0 X2FkZHI7CisKKwlzdHJ1Y3QgZGNzc19ibGtjdGwgKmJsa2N0bDsKKwlzdHJ1Y3QgZGNzc19jdHhs ZCAqY3R4bGQ7CisJc3RydWN0IGRjc3NfZHByICpkcHI7CisJc3RydWN0IGRjc3NfZHRnICpkdGc7 CisJc3RydWN0IGRjc3Nfc3MgKnNzOworCXN0cnVjdCBkY3NzX2hkcjEwICpoZHIxMDsKKwlzdHJ1 Y3QgZGNzc19zY2FsZXIgKnNjYWxlcjsKKwlzdHJ1Y3QgZGNzc19kdHJjICpkdHJjOworCXN0cnVj dCBkY3NzX2RlYzQwMGQgKmRlYzQwMGQ7CisJc3RydWN0IGRjc3Nfd3JzY2wgKndyc2NsOworCXN0 cnVjdCBkY3NzX3Jkc3JjICpyZHNyYzsKKworCXN0cnVjdCBjbGsgKmFwYl9jbGs7CisJc3RydWN0 IGNsayAqYXhpX2NsazsKKwlzdHJ1Y3QgY2xrICpwaXhfY2xrOworCXN0cnVjdCBjbGsgKnJ0cm1f Y2xrOworCXN0cnVjdCBjbGsgKmR0cmNfY2xrOworCXN0cnVjdCBjbGsgKnBsbF9zcmNfY2xrOwor CXN0cnVjdCBjbGsgKnBsbF9waHlfcmVmX2NsazsKKworCXZvaWQgKCpkY3NzX2Rpc2FibGVfY2Fs bGJhY2spKHZvaWQgKmRhdGEpOworCisJYm9vbCBjbGtzX29uOworCWJvb2wgaGRtaV9vdXRwdXQ7 Cit9OworCitlbnVtIGRjc3NfY29sb3Jfc3BhY2UgeworCURDU1NfQ09MT1JTUEFDRV9SR0IsCisJ RENTU19DT0xPUlNQQUNFX1lVViwKKwlEQ1NTX0NPTE9SU1BBQ0VfVU5LTk9XTiwKK307CisKK3N0 cnVjdCBkY3NzX2RldiAqZGNzc19kcnZfZGV2X3RvX2Rjc3Moc3RydWN0IGRldmljZSAqZGV2KTsK K3N0cnVjdCBkcm1fZGV2aWNlICpkY3NzX2Rydl9kZXZfdG9fZHJtKHN0cnVjdCBkZXZpY2UgKmRl dik7CitzdHJ1Y3QgZGNzc19kZXYgKmRjc3NfZGV2X2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYs IGJvb2wgbWlwaV9vdXRwdXQpOwordm9pZCBkY3NzX2Rldl9kZXN0cm95KHN0cnVjdCBkY3NzX2Rl diAqZGNzcyk7CitpbnQgZGNzc19kZXZfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dik7CitpbnQgZGNzc19kZXZfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK2lu dCBkY3NzX2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgZGNzc19kZXZfcmVz dW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKy8qIEJMS0NUTCAqLworaW50IGRjc3NfYmxrY3Rs X2luaXQoc3RydWN0IGRjc3NfZGV2ICpkY3NzLCB1bnNpZ25lZCBsb25nIGJsa2N0bF9iYXNlKTsK K3ZvaWQgZGNzc19ibGtjdGxfY2ZnKHN0cnVjdCBkY3NzX2Jsa2N0bCAqYmxrY3RsKTsKK3ZvaWQg ZGNzc19ibGtjdGxfZXhpdChzdHJ1Y3QgZGNzc19ibGtjdGwgKmJsa2N0bCk7CisKKy8qIENUWExE ICovCitpbnQgZGNzc19jdHhsZF9pbml0KHN0cnVjdCBkY3NzX2RldiAqZGNzcywgdW5zaWduZWQg bG9uZyBjdHhsZF9iYXNlKTsKK3ZvaWQgZGNzc19jdHhsZF9leGl0KHN0cnVjdCBkY3NzX2N0eGxk ICpjdHhsZCk7Cit2b2lkIGRjc3NfY3R4bGRfd3JpdGUoc3RydWN0IGRjc3NfY3R4bGQgKmN0eGxk LCB1MzIgY3R4X2lkLAorCQkgICAgICB1MzIgdmFsLCB1MzIgcmVnX2lkeCk7CitpbnQgZGNzc19j dHhsZF9yZXN1bWUoc3RydWN0IGRjc3NfY3R4bGQgKmRjc3NfY3R4bGQpOworaW50IGRjc3NfY3R4 bGRfc3VzcGVuZChzdHJ1Y3QgZGNzc19jdHhsZCAqZGNzc19jdHhsZCk7Cit2b2lkIGRjc3NfY3R4 bGRfd3JpdGVfaXJxc2FmZShzdHJ1Y3QgZGNzc19jdHhsZCAqY3RseGQsIHUzMiBjdHhfaWQsIHUz MiB2YWwsCisJCQkgICAgICB1MzIgcmVnX29mcyk7Cit2b2lkIGRjc3NfY3R4bGRfa2ljayhzdHJ1 Y3QgZGNzc19jdHhsZCAqY3R4bGQpOworYm9vbCBkY3NzX2N0eGxkX2lzX2ZsdXNoZWQoc3RydWN0 IGRjc3NfY3R4bGQgKmN0eGxkKTsKK2ludCBkY3NzX2N0eGxkX2VuYWJsZShzdHJ1Y3QgZGNzc19j dHhsZCAqY3R4bGQpOwordm9pZCBkY3NzX2N0eGxkX3JlZ2lzdGVyX2R0Z19kaXNhYmxlX2NiKHN0 cnVjdCBkY3NzX2N0eGxkICpjdHhsZCwKKwkJCQkJdm9pZCAoKmNiKSh2b2lkICopLAorCQkJCQl2 b2lkICpkYXRhKTsKKworLyogRFBSICovCitlbnVtIGRjc3NfdGlsZV90eXBlIHsKKwlUSUxFX0xJ TkVBUiA9IDAsCisJVElMRV9HUFVfU1RBTkRBUkQsCisJVElMRV9HUFVfU1VQRVIsCisJVElMRV9W UFVfWVVWNDIwLAorCVRJTEVfVlBVX1ZQOSwKK307CisKK2VudW0gZGNzc19waXhfc2l6ZSB7CisJ UElYX1NJWkVfOCwKKwlQSVhfU0laRV8xNiwKKwlQSVhfU0laRV8zMiwKK307CisKK2ludCBkY3Nz X2Rwcl9pbml0KHN0cnVjdCBkY3NzX2RldiAqZGNzcywgdW5zaWduZWQgbG9uZyBkcHJfYmFzZSk7 Cit2b2lkIGRjc3NfZHByX2V4aXQoc3RydWN0IGRjc3NfZHByICpkcHIpOwordm9pZCBkY3NzX2Rw cl93cml0ZV9zeXNjdHJsKHN0cnVjdCBkY3NzX2RwciAqZHByKTsKK3ZvaWQgZGNzc19kcHJfc2V0 X3JlcyhzdHJ1Y3QgZGNzc19kcHIgKmRwciwgaW50IGNoX251bSwgdTMyIHhyZXMsIHUzMiB5cmVz KTsKK3ZvaWQgZGNzc19kcHJfYWRkcl9zZXQoc3RydWN0IGRjc3NfZHByICpkcHIsIGludCBjaF9u dW0sIHUzMiBsdW1hX2Jhc2VfYWRkciwKKwkJICAgICAgIHUzMiBjaHJvbWFfYmFzZV9hZGRyLCB1 MTYgcGl0Y2gpOwordm9pZCBkY3NzX2Rwcl9lbmFibGUoc3RydWN0IGRjc3NfZHByICpkcHIsIGlu dCBjaF9udW0sIGJvb2wgZW4pOwordm9pZCBkY3NzX2Rwcl9mb3JtYXRfc2V0KHN0cnVjdCBkY3Nz X2RwciAqZHByLCBpbnQgY2hfbnVtLAorCQkJIGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8g KmZvcm1hdCwgdTY0IG1vZGlmaWVyKTsKK3ZvaWQgZGNzc19kcHJfc2V0X3JvdGF0aW9uKHN0cnVj dCBkY3NzX2RwciAqZHByLCBpbnQgY2hfbnVtLCB1MzIgcm90YXRpb24pOworCisvKiBEVEcgKi8K K2ludCBkY3NzX2R0Z19pbml0KHN0cnVjdCBkY3NzX2RldiAqZGNzcywgdW5zaWduZWQgbG9uZyBk dGdfYmFzZSk7Cit2b2lkIGRjc3NfZHRnX2V4aXQoc3RydWN0IGRjc3NfZHRnICpkdGcpOworYm9v bCBkY3NzX2R0Z192YmxhbmtfaXJxX3ZhbGlkKHN0cnVjdCBkY3NzX2R0ZyAqZHRnKTsKK3ZvaWQg ZGNzc19kdGdfdmJsYW5rX2lycV9lbmFibGUoc3RydWN0IGRjc3NfZHRnICpkdGcsIGJvb2wgZW4p Owordm9pZCBkY3NzX2R0Z192YmxhbmtfaXJxX2NsZWFyKHN0cnVjdCBkY3NzX2R0ZyAqZHRnKTsK K3ZvaWQgZGNzc19kdGdfc3luY19zZXQoc3RydWN0IGRjc3NfZHRnICpkdGcsIHN0cnVjdCB2aWRl b21vZGUgKnZtKTsKK3ZvaWQgZGNzc19kdGdfY3NzX3NldChzdHJ1Y3QgZGNzc19kdGcgKmR0Zyk7 Cit2b2lkIGRjc3NfZHRnX2VuYWJsZShzdHJ1Y3QgZGNzc19kdGcgKmR0ZywgYm9vbCBlbiwKKwkJ ICAgICBzdHJ1Y3QgY29tcGxldGlvbiAqZGlzX2NvbXBsZXRpb24pOworYm9vbCBkY3NzX2R0Z19p c19lbmFibGVkKHN0cnVjdCBkY3NzX2R0ZyAqZHRnKTsKK3ZvaWQgZGNzc19kdGdfY3R4bGRfa2lj a19pcnFfZW5hYmxlKHN0cnVjdCBkY3NzX2R0ZyAqZHRnLCBib29sIGVuKTsKK2Jvb2wgZGNzc19k dGdfZ2xvYmFsX2FscGhhX2NoYW5nZWQoc3RydWN0IGRjc3NfZHRnICpkdGcsIGludCBjaF9udW0s IGludCBhbHBoYSk7Cit2b2lkIGRjc3NfZHRnX3BsYW5lX2FscGhhX3NldChzdHJ1Y3QgZGNzc19k dGcgKmR0ZywgaW50IGNoX251bSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2lu Zm8gKmZvcm1hdCwgaW50IGFscGhhKTsKK3ZvaWQgZGNzc19kdGdfcGxhbmVfcG9zX3NldChzdHJ1 Y3QgZGNzc19kdGcgKmR0ZywgaW50IGNoX251bSwKKwkJCSAgICBpbnQgcHgsIGludCBweSwgaW50 IHB3LCBpbnQgcGgpOwordm9pZCBkY3NzX2R0Z19jaF9lbmFibGUoc3RydWN0IGRjc3NfZHRnICpk dGcsIGludCBjaF9udW0sIGJvb2wgZW4pOworCisvKiBTVUJTQU0gKi8KK2ludCBkY3NzX3NzX2lu aXQoc3RydWN0IGRjc3NfZGV2ICpkY3NzLCB1bnNpZ25lZCBsb25nIHN1YnNhbV9iYXNlKTsKK3Zv aWQgZGNzc19zc19leGl0KHN0cnVjdCBkY3NzX3NzICpzcyk7Cit2b2lkIGRjc3Nfc3NfZW5hYmxl KHN0cnVjdCBkY3NzX3NzICpzcyk7Cit2b2lkIGRjc3Nfc3NfZGlzYWJsZShzdHJ1Y3QgZGNzc19z cyAqc3MpOwordm9pZCBkY3NzX3NzX3N1YnNhbV9zZXQoc3RydWN0IGRjc3Nfc3MgKnNzKTsKK3Zv aWQgZGNzc19zc19zeW5jX3NldChzdHJ1Y3QgZGNzc19zcyAqc3MsIHN0cnVjdCB2aWRlb21vZGUg KnZtLAorCQkgICAgICBib29sIHBoc3luYywgYm9vbCBwdnN5bmMpOworCisvKiBTQ0FMRVIgKi8K K2ludCBkY3NzX3NjYWxlcl9pbml0KHN0cnVjdCBkY3NzX2RldiAqZGNzcywgdW5zaWduZWQgbG9u ZyBzY2FsZXJfYmFzZSk7Cit2b2lkIGRjc3Nfc2NhbGVyX2V4aXQoc3RydWN0IGRjc3Nfc2NhbGVy ICpzY2wpOwordm9pZCBkY3NzX3NjYWxlcl9zZXR1cChzdHJ1Y3QgZGNzc19zY2FsZXIgKnNjbCwg aW50IGNoX251bSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZvcm1h dCwKKwkJICAgICAgIGludCBzcmNfeHJlcywgaW50IHNyY195cmVzLCBpbnQgZHN0X3hyZXMsIGlu dCBkc3RfeXJlcywKKwkJICAgICAgIHUzMiB2cmVmcmVzaF9oeik7Cit2b2lkIGRjc3Nfc2NhbGVy X2NoX2VuYWJsZShzdHJ1Y3QgZGNzc19zY2FsZXIgKnNjbCwgaW50IGNoX251bSwgYm9vbCBlbik7 CitpbnQgZGNzc19zY2FsZXJfZ2V0X21pbl9tYXhfcmF0aW9zKHN0cnVjdCBkY3NzX3NjYWxlciAq c2NsLCBpbnQgY2hfbnVtLAorCQkJCSAgIGludCAqbWluLCBpbnQgKm1heCk7Cit2b2lkIGRjc3Nf c2NhbGVyX3dyaXRlX3NjbGN0cmwoc3RydWN0IGRjc3Nfc2NhbGVyICpzY2wpOworCisjZW5kaWYg LyogX19EQ1NTX1BSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pbXgvZGNz cy9kY3NzLWRwci5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtZHByLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjE1YWE2ZDgKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1kcHIuYwpAQCAtMCwwICsxLDU1MCBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgMjAx OSBOWFAuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSAiZGNz cy1kZXYuaCIKKworI2RlZmluZSBEQ1NTX0RQUl9TWVNURU1fQ1RSTDAJCQkweDAwMAorI2RlZmlu ZSAgIFJVTl9FTgkJCQlCSVQoMCkKKyNkZWZpbmUgICBTT0ZUX1JFU0VUCQkJCUJJVCgxKQorI2Rl ZmluZSAgIFJFUEVBVF9FTgkJCQlCSVQoMikKKyNkZWZpbmUgICBTSEFET1dfTE9BRF9FTgkJCUJJ VCgzKQorI2RlZmluZSAgIFNXX1NIQURPV19MT0FEX1NFTAkJCUJJVCg0KQorI2RlZmluZSAgIEJD TUQyQVhJX01TVFJfSURfQ1RSTAkJCUJJVCgxNikKKyNkZWZpbmUgRENTU19EUFJfSVJRX01BU0sJ CQkweDAyMAorI2RlZmluZSBEQ1NTX0RQUl9JUlFfTUFTS19TVEFUVVMJCTB4MDMwCisjZGVmaW5l IERDU1NfRFBSX0lSUV9OT05NQVNLX1NUQVRVUwkJMHgwNDAKKyNkZWZpbmUgICBJUlFfRFBSX0NU UkxfRE9ORQkJCUJJVCgwKQorI2RlZmluZSAgIElSUV9EUFJfUlVOCQkJCUJJVCgxKQorI2RlZmlu ZSAgIElSUV9EUFJfU0hBRE9XX0xPQURFRAkJCUJJVCgyKQorI2RlZmluZSAgIElSUV9BWElfUkVB RF9FUlIJCQlCSVQoMykKKyNkZWZpbmUgICBEUFIyUlRSX1lSR0JfRklGT19PVkZMCQlCSVQoNCkK KyNkZWZpbmUgICBEUFIyUlRSX1VWX0ZJRk9fT1ZGTAkJCUJJVCg1KQorI2RlZmluZSAgIERQUjJS VFJfRklGT19MRF9CVUZfUkRZX1lSR0JfRVJSCUJJVCg2KQorI2RlZmluZSAgIERQUjJSVFJfRklG T19MRF9CVUZfUkRZX1VWX0VSUglCSVQoNykKKyNkZWZpbmUgRENTU19EUFJfTU9ERV9DVFJMMAkJ CTB4MDUwCisjZGVmaW5lICAgUlRSXzNCVUZfRU4JCQkJQklUKDApCisjZGVmaW5lICAgUlRSXzRM SU5FX0JVRl9FTgkJCUJJVCgxKQorI2RlZmluZSAgIFRJTEVfVFlQRV9QT1MJCQkJMgorI2RlZmlu ZSAgIFRJTEVfVFlQRV9NQVNLCQkJR0VOTUFTSyg0LCAyKQorI2RlZmluZSAgIFlVVl9FTgkJCQlC SVQoNikKKyNkZWZpbmUgICBDT01QXzJQTEFORV9FTgkJCUJJVCg3KQorI2RlZmluZSAgIFBJWF9T SVpFX1BPUwkJCQk4CisjZGVmaW5lICAgUElYX1NJWkVfTUFTSwkJCQlHRU5NQVNLKDksIDgpCisj ZGVmaW5lICAgUElYX0xVTUFfVVZfU1dBUAkJCUJJVCgxMCkKKyNkZWZpbmUgICBQSVhfVVZfU1dB UAkJCQlCSVQoMTEpCisjZGVmaW5lICAgQl9DT01QX1NFTF9QT1MJCQkxMgorI2RlZmluZSAgIEJf Q09NUF9TRUxfTUFTSwkJCUdFTk1BU0soMTMsIDEyKQorI2RlZmluZSAgIEdfQ09NUF9TRUxfUE9T CQkJMTQKKyNkZWZpbmUgICBHX0NPTVBfU0VMX01BU0sJCQlHRU5NQVNLKDE1LCAxNCkKKyNkZWZp bmUgICBSX0NPTVBfU0VMX1BPUwkJCTE2CisjZGVmaW5lICAgUl9DT01QX1NFTF9NQVNLCQkJR0VO TUFTSygxNywgMTYpCisjZGVmaW5lICAgQV9DT01QX1NFTF9QT1MJCQkxOAorI2RlZmluZSAgIEFf Q09NUF9TRUxfTUFTSwkJCUdFTk1BU0soMTksIDE4KQorI2RlZmluZSBEQ1NTX0RQUl9GUkFNRV9D VFJMMAkJCTB4MDcwCisjZGVmaW5lICAgSEZMSVBfRU4JCQkJQklUKDApCisjZGVmaW5lICAgVkZM SVBfRU4JCQkJQklUKDEpCisjZGVmaW5lICAgUk9UX0VOQ19QT1MJCQkJMgorI2RlZmluZSAgIFJP VF9FTkNfTUFTSwkJCQlHRU5NQVNLKDMsIDIpCisjZGVmaW5lICAgUk9UX0ZMSVBfT1JERVJfRU4J CQlCSVQoNCkKKyNkZWZpbmUgICBQSVRDSF9QT1MJCQkJMTYKKyNkZWZpbmUgICBQSVRDSF9NQVNL CQkJCUdFTk1BU0soMzEsIDE2KQorI2RlZmluZSBEQ1NTX0RQUl9GUkFNRV8xUF9DVFJMMAkJCTB4 MDkwCisjZGVmaW5lIERDU1NfRFBSX0ZSQU1FXzFQX1BJWF9YX0NUUkwJCTB4MEEwCisjZGVmaW5l IERDU1NfRFBSX0ZSQU1FXzFQX1BJWF9ZX0NUUkwJCTB4MEIwCisjZGVmaW5lIERDU1NfRFBSX0ZS QU1FXzFQX0JBU0VfQUREUgkJMHgwQzAKKyNkZWZpbmUgRENTU19EUFJfRlJBTUVfMlBfQ1RSTDAJ CQkweDBFMAorI2RlZmluZSBEQ1NTX0RQUl9GUkFNRV8yUF9QSVhfWF9DVFJMCQkweDBGMAorI2Rl ZmluZSBEQ1NTX0RQUl9GUkFNRV8yUF9QSVhfWV9DVFJMCQkweDEwMAorI2RlZmluZSBEQ1NTX0RQ Ul9GUkFNRV8yUF9CQVNFX0FERFIJCTB4MTEwCisjZGVmaW5lIERDU1NfRFBSX1NUQVRVU19DVFJM MAkJCTB4MTMwCisjZGVmaW5lICAgU1RBVFVTX01VWF9TRUxfTUFTSwkJCUdFTk1BU0soMiwgMCkK KyNkZWZpbmUgICBTVEFUVVNfU1JDX1NFTF9QT1MJCQkxNgorI2RlZmluZSAgIFNUQVRVU19TUkNf U0VMX01BU0sJCQlHRU5NQVNLKDE4LCAxNikKKyNkZWZpbmUgRENTU19EUFJfU1RBVFVTX0NUUkwx CQkJMHgxNDAKKyNkZWZpbmUgRENTU19EUFJfUlRSQU1fQ1RSTDAJCQkweDIwMAorI2RlZmluZSAg IE5VTV9ST1dTX0FDVElWRQkJCUJJVCgwKQorI2RlZmluZSAgIFRIUkVTX0hJR0hfUE9TCQkJMQor I2RlZmluZSAgIFRIUkVTX0hJR0hfTUFTSwkJCUdFTk1BU0soMywgMSkKKyNkZWZpbmUgICBUSFJF U19MT1dfUE9TCQkJCTQKKyNkZWZpbmUgICBUSFJFU19MT1dfTUFTSwkJCUdFTk1BU0soNiwgNCkK KyNkZWZpbmUgICBBQk9SVF9TRUwJCQkJQklUKDcpCisKK3N0cnVjdCBkY3NzX2Rwcl9jaCB7CisJ c3RydWN0IGRjc3NfZHByICpkcHI7CisJdm9pZCBfX2lvbWVtICpiYXNlX3JlZzsKKwl1MzIgYmFz ZV9vZnM7CisKKwlzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvIGZvcm1hdDsKKwllbnVtIGRjc3NfcGl4 X3NpemUgcGl4X3NpemU7CisJZW51bSBkY3NzX3RpbGVfdHlwZSB0aWxlOworCWJvb2wgcnRyYW1f NGxpbmVfZW47CisJYm9vbCBydHJhbV8zYnVmX2VuOworCisJdTMyIGZyYW1lX2N0cmw7CisJdTMy IG1vZGVfY3RybDsKKwl1MzIgc3lzX2N0cmw7CisJdTMyIHJ0cmFtX2N0cmw7CisKKwlib29sIHN5 c19jdHJsX2NoZ2Q7CisKKwl1MzIgcGl0Y2g7CisKKwlpbnQgY2hfbnVtOworCWludCBpcnE7Cit9 OworCitzdHJ1Y3QgZGNzc19kcHIgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZGNz c19jdHhsZCAqY3R4bGQ7CisJdTMyICBjdHhfaWQ7CisKKwlzdHJ1Y3QgZGNzc19kcHJfY2ggY2hb M107Cit9OworCitzdGF0aWMgdm9pZCBkY3NzX2Rwcl93cml0ZShzdHJ1Y3QgZGNzc19kcHJfY2gg KmNoLCB1MzIgdmFsLCB1MzIgb2ZzKQoreworCXN0cnVjdCBkY3NzX2RwciAqZHByID0gY2gtPmRw cjsKKworCWRjc3NfY3R4bGRfd3JpdGUoZHByLT5jdHhsZCwgZHByLT5jdHhfaWQsIHZhbCwgY2gt PmJhc2Vfb2ZzICsgb2ZzKTsKK30KKworc3RhdGljIGludCBkY3NzX2Rwcl9jaF9pbml0X2FsbChz dHJ1Y3QgZGNzc19kcHIgKmRwciwgdW5zaWduZWQgbG9uZyBkcHJfYmFzZSkKK3sKKwlzdHJ1Y3Qg ZGNzc19kcHJfY2ggKmNoOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewor CQljaCA9ICZkcHItPmNoW2ldOworCisJCWNoLT5iYXNlX29mcyA9IGRwcl9iYXNlICsgaSAqIDB4 MTAwMDsKKworCQljaC0+YmFzZV9yZWcgPSBkZXZtX2lvcmVtYXAoZHByLT5kZXYsIGNoLT5iYXNl X29mcywgU1pfNEspOworCQlpZiAoIWNoLT5iYXNlX3JlZykgeworCQkJZGV2X2VycihkcHItPmRl diwgImRwcjogdW5hYmxlIHRvIHJlbWFwIGNoICVkIGJhc2VcbiIsCisJCQkJaSk7CisJCQlyZXR1 cm4gLUVOT01FTTsKKwkJfQorCisJCWNoLT5kcHIgPSBkcHI7CisJCWNoLT5jaF9udW0gPSBpOwor CisJCWRjc3Nfd3JpdGVsKDB4ZmYsIGNoLT5iYXNlX3JlZyArIERDU1NfRFBSX0lSUV9NQVNLKTsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRjc3NfZHByX2luaXQoc3RydWN0IGRjc3NfZGV2 ICpkY3NzLCB1bnNpZ25lZCBsb25nIGRwcl9iYXNlKQoreworCXN0cnVjdCBkY3NzX2RwciAqZHBy OworCisJZHByID0gZGV2bV9remFsbG9jKGRjc3MtPmRldiwgc2l6ZW9mKHN0cnVjdCBkY3NzX2Rw ciksIEdGUF9LRVJORUwpOworCWlmICghZHByKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRjc3Mt PmRwciA9IGRwcjsKKwlkcHItPmRldiA9IGRjc3MtPmRldjsKKwlkcHItPmN0eGxkID0gZGNzcy0+ Y3R4bGQ7CisJZHByLT5jdHhfaWQgPSBDVFhfU0JfSFA7CisKKwlpZiAoZGNzc19kcHJfY2hfaW5p dF9hbGwoZHByLCBkcHJfYmFzZSkpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDM7 IGkrKykgeworCQkJaWYgKGRwci0+Y2hbaV0uYmFzZV9yZWcpCisJCQkJZGV2bV9pb3VubWFwKGRw ci0+ZGV2LCBkcHItPmNoW2ldLmJhc2VfcmVnKTsKKwkJfQorCisJCWRldm1fa2ZyZWUoZHByLT5k ZXYsIGRwcik7CisKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3Zv aWQgZGNzc19kcHJfZXhpdChzdHJ1Y3QgZGNzc19kcHIgKmRwcikKK3sKKwlpbnQgY2hfbm87CisK KwkvKiBzdG9wIERQUiBvbiBhbGwgY2hhbm5lbHMgKi8KKwlmb3IgKGNoX25vID0gMDsgY2hfbm8g PCAzOyBjaF9ubysrKSB7CisJCXN0cnVjdCBkY3NzX2Rwcl9jaCAqY2ggPSAmZHByLT5jaFtjaF9u b107CisKKwkJZGNzc193cml0ZWwoMCwgY2gtPmJhc2VfcmVnICsgRENTU19EUFJfU1lTVEVNX0NU UkwwKTsKKworCQlpZiAoY2gtPmJhc2VfcmVnKQorCQkJZGV2bV9pb3VubWFwKGRwci0+ZGV2LCBj aC0+YmFzZV9yZWcpOworCX0KKworCWRldm1fa2ZyZWUoZHByLT5kZXYsIGRwcik7Cit9CisKK3N0 YXRpYyB1MzIgZGNzc19kcHJfeF9waXhfd2lkZV9hZGp1c3Qoc3RydWN0IGRjc3NfZHByX2NoICpj aCwgdTMyIHBpeF93aWRlLAorCQkJCSAgICAgIHUzMiBwaXhfZm9ybWF0KQoreworCXU4IHBpeF9p bl82NGJ5dGVfbWFwWzNdWzVdID0geworCQkvKiBMSU4sIEdQVV9TVEQsIEdQVV9TVVAsIFZQVV9Z VVY0MjAsIFZQVV9WUDkgKi8KKwkJeyAgIDY0LCAgICAgICA4LCAgICAgICA4LCAgICAgICAgICA4 LCAgICAgMTZ9LCAvKiBQSVhfU0laRV84ICAqLworCQl7ICAgMzIsICAgICAgIDgsICAgICAgIDgs ICAgICAgICAgIDgsICAgICAgOH0sIC8qIFBJWF9TSVpFXzE2ICovCisJCXsgICAxNiwgICAgICAg NCwgICAgICAgNCwgICAgICAgICAgOCwgICAgICA4fSwgLyogUElYX1NJWkVfMzIgKi8KKwl9Owor CXUzMiBvZmZzZXQ7CisJdTMyIGRpdl82NGJ5dGVfbW9kLCBwaXhfaW5fNjRieXRlOworCisJcGl4 X2luXzY0Ynl0ZSA9IHBpeF9pbl82NGJ5dGVfbWFwW2NoLT5waXhfc2l6ZV1bY2gtPnRpbGVdOwor CisJZGl2XzY0Ynl0ZV9tb2QgPSBwaXhfd2lkZSAlIHBpeF9pbl82NGJ5dGU7CisJb2Zmc2V0ID0g KGRpdl82NGJ5dGVfbW9kID09IDApID8gMCA6IChwaXhfaW5fNjRieXRlIC0gZGl2XzY0Ynl0ZV9t b2QpOworCisJcmV0dXJuIHBpeF93aWRlICsgb2Zmc2V0OworfQorCitzdGF0aWMgdTMyIGRjc3Nf ZHByX3lfcGl4X2hpZ2hfYWRqdXN0KHN0cnVjdCBkY3NzX2Rwcl9jaCAqY2gsIHUzMiBwaXhfaGln aCwKKwkJCQkgICAgICB1MzIgcGl4X2Zvcm1hdCkKK3sKKwl1OCBudW1fcm93c19idWYgPSBjaC0+ cnRyYW1fNGxpbmVfZW4gPyA0IDogODsKKwl1MzIgb2Zmc2V0LCBwaXhfeV9tb2Q7CisKKwlwaXhf eV9tb2QgPSBwaXhfaGlnaCAlIG51bV9yb3dzX2J1ZjsKKwlvZmZzZXQgPSBwaXhfeV9tb2QgPyAo bnVtX3Jvd3NfYnVmIC0gcGl4X3lfbW9kKSA6IDA7CisKKwlyZXR1cm4gcGl4X2hpZ2ggKyBvZmZz ZXQ7Cit9CisKK3ZvaWQgZGNzc19kcHJfc2V0X3JlcyhzdHJ1Y3QgZGNzc19kcHIgKmRwciwgaW50 IGNoX251bSwgdTMyIHhyZXMsIHUzMiB5cmVzKQoreworCXN0cnVjdCBkY3NzX2Rwcl9jaCAqY2gg PSAmZHByLT5jaFtjaF9udW1dOworCXUzMiBwaXhfZm9ybWF0ID0gY2gtPmZvcm1hdC5mb3JtYXQ7 CisJdTMyIGdhcCA9IERDU1NfRFBSX0ZSQU1FXzJQX0JBU0VfQUREUiAtIERDU1NfRFBSX0ZSQU1F XzFQX0JBU0VfQUREUjsKKwlpbnQgcGxhbmUsIG1heF9wbGFuZXMgPSAxOworCXUzMiBwaXhfeF93 aWRlLCBwaXhfeV9oaWdoOworCisJaWYgKHBpeF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyIHx8 CisJICAgIHBpeF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjIxKQorCQltYXhfcGxhbmVzID0gMjsK KworCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IG1heF9wbGFuZXM7IHBsYW5lKyspIHsKKwkJeXJl cyA9IHBsYW5lID09IDEgPyB5cmVzID4+IDEgOiB5cmVzOworCisJCXBpeF94X3dpZGUgPSBkY3Nz X2Rwcl94X3BpeF93aWRlX2FkanVzdChjaCwgeHJlcywgcGl4X2Zvcm1hdCk7CisJCXBpeF95X2hp Z2ggPSBkY3NzX2Rwcl95X3BpeF9oaWdoX2FkanVzdChjaCwgeXJlcywgcGl4X2Zvcm1hdCk7CisK KwkJaWYgKHBsYW5lID09IDApCisJCQljaC0+cGl0Y2ggPSBwaXhfeF93aWRlOworCisJCWRjc3Nf ZHByX3dyaXRlKGNoLCBwaXhfeF93aWRlLAorCQkJICAgICAgIERDU1NfRFBSX0ZSQU1FXzFQX1BJ WF9YX0NUUkwgKyBwbGFuZSAqIGdhcCk7CisJCWRjc3NfZHByX3dyaXRlKGNoLCBwaXhfeV9oaWdo LAorCQkJICAgICAgIERDU1NfRFBSX0ZSQU1FXzFQX1BJWF9ZX0NUUkwgKyBwbGFuZSAqIGdhcCk7 CisKKwkJZGNzc19kcHJfd3JpdGUoY2gsIDIsIERDU1NfRFBSX0ZSQU1FXzFQX0NUUkwwICsgcGxh bmUgKiBnYXApOworCX0KK30KKwordm9pZCBkY3NzX2Rwcl9hZGRyX3NldChzdHJ1Y3QgZGNzc19k cHIgKmRwciwgaW50IGNoX251bSwgdTMyIGx1bWFfYmFzZV9hZGRyLAorCQkgICAgICAgdTMyIGNo cm9tYV9iYXNlX2FkZHIsIHUxNiBwaXRjaCkKK3sKKwlzdHJ1Y3QgZGNzc19kcHJfY2ggKmNoID0g JmRwci0+Y2hbY2hfbnVtXTsKKworCWRjc3NfZHByX3dyaXRlKGNoLCBsdW1hX2Jhc2VfYWRkciwg RENTU19EUFJfRlJBTUVfMVBfQkFTRV9BRERSKTsKKworCWRjc3NfZHByX3dyaXRlKGNoLCBjaHJv bWFfYmFzZV9hZGRyLCBEQ1NTX0RQUl9GUkFNRV8yUF9CQVNFX0FERFIpOworCisJY2gtPmZyYW1l X2N0cmwgJj0gflBJVENIX01BU0s7CisJY2gtPmZyYW1lX2N0cmwgfD0gKCgodTMyKXBpdGNoIDw8 IFBJVENIX1BPUykgJiBQSVRDSF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgZGNzc19kcHJfYXJn Yl9jb21wX3NlbChzdHJ1Y3QgZGNzc19kcHJfY2ggKmNoLCBpbnQgYV9zZWwsIGludCByX3NlbCwK KwkJCQkgICBpbnQgZ19zZWwsIGludCBiX3NlbCkKK3sKKwl1MzIgc2VsOworCisJc2VsID0gKChh X3NlbCA8PCBBX0NPTVBfU0VMX1BPUykgJiBBX0NPTVBfU0VMX01BU0spIHwKKwkgICAgICAoKHJf c2VsIDw8IFJfQ09NUF9TRUxfUE9TKSAmIFJfQ09NUF9TRUxfTUFTSykgfAorCSAgICAgICgoZ19z ZWwgPDwgR19DT01QX1NFTF9QT1MpICYgR19DT01QX1NFTF9NQVNLKSB8CisJICAgICAgKChiX3Nl bCA8PCBCX0NPTVBfU0VMX1BPUykgJiBCX0NPTVBfU0VMX01BU0spOworCisJY2gtPm1vZGVfY3Ry bCAmPSB+KEFfQ09NUF9TRUxfTUFTSyB8IFJfQ09NUF9TRUxfTUFTSyB8CisJCQkgICBHX0NPTVBf U0VMX01BU0sgfCBCX0NPTVBfU0VMX01BU0spOworCWNoLT5tb2RlX2N0cmwgfD0gc2VsOworfQor CitzdGF0aWMgdm9pZCBkY3NzX2Rwcl9waXhfc2l6ZV9zZXQoc3RydWN0IGRjc3NfZHByX2NoICpj aCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZvcm1hdCkKK3sKKwl1MzIg dmFsOworCisJc3dpdGNoIChmb3JtYXQtPmZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9OVjEy OgorCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgorCQl2YWwgPSAwOworCQlicmVhazsKKworCWNhc2Ug RFJNX0ZPUk1BVF9VWVZZOgorCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgorCWNhc2UgRFJNX0ZPUk1B VF9ZVVlWOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgorCQl2YWwgPSAxOworCQlicmVhazsKKwor CWRlZmF1bHQ6CisJCXZhbCA9IDI7CisJCWJyZWFrOworCX0KKworCWNoLT5waXhfc2l6ZSA9IHZh bDsKKworCWNoLT5tb2RlX2N0cmwgJj0gflBJWF9TSVpFX01BU0s7CisJY2gtPm1vZGVfY3RybCB8 PSAoKHZhbCA8PCBQSVhfU0laRV9QT1MpICYgUElYX1NJWkVfTUFTSyk7Cit9CisKK3N0YXRpYyB2 b2lkIGRjc3NfZHByX3V2X3N3YXAoc3RydWN0IGRjc3NfZHByX2NoICpjaCwgYm9vbCBzd2FwKQor eworCWNoLT5tb2RlX2N0cmwgJj0gflBJWF9VVl9TV0FQOworCWNoLT5tb2RlX2N0cmwgfD0gKHN3 YXAgPyBQSVhfVVZfU1dBUCA6IDApOworfQorCitzdGF0aWMgdm9pZCBkY3NzX2Rwcl95X3V2X3N3 YXAoc3RydWN0IGRjc3NfZHByX2NoICpjaCwgYm9vbCBzd2FwKQoreworCWNoLT5tb2RlX2N0cmwg Jj0gflBJWF9MVU1BX1VWX1NXQVA7CisJY2gtPm1vZGVfY3RybCB8PSAoc3dhcCA/IFBJWF9MVU1B X1VWX1NXQVAgOiAwKTsKK30KKworc3RhdGljIHZvaWQgZGNzc19kcHJfMnBsYW5lX2VuKHN0cnVj dCBkY3NzX2Rwcl9jaCAqY2gsIGJvb2wgZW4pCit7CisJY2gtPm1vZGVfY3RybCAmPSB+Q09NUF8y UExBTkVfRU47CisJY2gtPm1vZGVfY3RybCB8PSAoZW4gPyBDT01QXzJQTEFORV9FTiA6IDApOwor fQorCitzdGF0aWMgdm9pZCBkY3NzX2Rwcl95dXZfZW4oc3RydWN0IGRjc3NfZHByX2NoICpjaCwg Ym9vbCBlbikKK3sKKwljaC0+bW9kZV9jdHJsICY9IH5ZVVZfRU47CisJY2gtPm1vZGVfY3RybCB8 PSAoZW4gPyBZVVZfRU4gOiAwKTsKK30KKwordm9pZCBkY3NzX2Rwcl9lbmFibGUoc3RydWN0IGRj c3NfZHByICpkcHIsIGludCBjaF9udW0sIGJvb2wgZW4pCit7CisJc3RydWN0IGRjc3NfZHByX2No ICpjaCA9ICZkcHItPmNoW2NoX251bV07CisJdTMyIHN5c19jdHJsOworCisJc3lzX2N0cmwgPSAo ZW4gPyBSRVBFQVRfRU4gfCBSVU5fRU4gOiAwKTsKKworCWlmIChlbikgeworCQlkY3NzX2Rwcl93 cml0ZShjaCwgY2gtPm1vZGVfY3RybCwgRENTU19EUFJfTU9ERV9DVFJMMCk7CisJCWRjc3NfZHBy X3dyaXRlKGNoLCBjaC0+ZnJhbWVfY3RybCwgRENTU19EUFJfRlJBTUVfQ1RSTDApOworCQlkY3Nz X2Rwcl93cml0ZShjaCwgY2gtPnJ0cmFtX2N0cmwsIERDU1NfRFBSX1JUUkFNX0NUUkwwKTsKKwl9 CisKKwlpZiAoY2gtPnN5c19jdHJsICE9IHN5c19jdHJsKQorCQljaC0+c3lzX2N0cmxfY2hnZCA9 IHRydWU7CisKKwljaC0+c3lzX2N0cmwgPSBzeXNfY3RybDsKK30KKworc3RydWN0IHJnYl9jb21w X3NlbCB7CisJdTMyIGRybV9mb3JtYXQ7CisJaW50IGFfc2VsOworCWludCByX3NlbDsKKwlpbnQg Z19zZWw7CisJaW50IGJfc2VsOworfTsKKworc3RhdGljIHN0cnVjdCByZ2JfY29tcF9zZWwgY29t cF9zZWxfbWFwW10gPSB7CisJe0RSTV9GT1JNQVRfQVJHQjg4ODgsIDMsIDIsIDEsIDB9LAorCXtE Uk1fRk9STUFUX1hSR0I4ODg4LCAzLCAyLCAxLCAwfSwKKwl7RFJNX0ZPUk1BVF9BQkdSODg4OCwg MywgMCwgMSwgMn0sCisJe0RSTV9GT1JNQVRfWEJHUjg4ODgsIDMsIDAsIDEsIDJ9LAorCXtEUk1f Rk9STUFUX1JHQkE4ODg4LCAwLCAzLCAyLCAxfSwKKwl7RFJNX0ZPUk1BVF9SR0JYODg4OCwgMCwg MywgMiwgMX0sCisJe0RSTV9GT1JNQVRfQkdSQTg4ODgsIDAsIDEsIDIsIDN9LAorCXtEUk1fRk9S TUFUX0JHUlg4ODg4LCAwLCAxLCAyLCAzfSwKK307CisKK3N0YXRpYyBpbnQgdG9fY29tcF9zZWwo dTMyIHBpeF9mbXQsIGludCAqYV9zZWwsIGludCAqcl9zZWwsIGludCAqZ19zZWwsCisJCSAgICAg ICBpbnQgKmJfc2VsKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Y29tcF9zZWxfbWFwKTsgaSsrKSB7CisJCWlmIChjb21wX3NlbF9tYXBbaV0uZHJtX2Zvcm1hdCA9 PSBwaXhfZm10KSB7CisJCQkqYV9zZWwgPSBjb21wX3NlbF9tYXBbaV0uYV9zZWw7CisJCQkqcl9z ZWwgPSBjb21wX3NlbF9tYXBbaV0ucl9zZWw7CisJCQkqZ19zZWwgPSBjb21wX3NlbF9tYXBbaV0u Z19zZWw7CisJCQkqYl9zZWwgPSBjb21wX3NlbF9tYXBbaV0uYl9zZWw7CisKKwkJCXJldHVybiAw OworCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBkY3NzX2Rwcl9ydHJh bV9zZXQoc3RydWN0IGRjc3NfZHByX2NoICpjaCwgdTMyIHBpeF9mb3JtYXQpCit7CisJdTMyIHZh bCwgbWFzazsKKworCXN3aXRjaCAocGl4X2Zvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9OVjIx OgorCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCQljaC0+cnRyYW1fM2J1Zl9lbiA9IHRydWU7CisJ CWNoLT5ydHJhbV80bGluZV9lbiA9IGZhbHNlOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWNo LT5ydHJhbV8zYnVmX2VuID0gdHJ1ZTsKKwkJY2gtPnJ0cmFtXzRsaW5lX2VuID0gdHJ1ZTsKKwkJ YnJlYWs7CisJfQorCisJdmFsID0gKGNoLT5ydHJhbV80bGluZV9lbiA/IFJUUl80TElORV9CVUZf RU4gOiAwKTsKKwl2YWwgfD0gKGNoLT5ydHJhbV8zYnVmX2VuID8gUlRSXzNCVUZfRU4gOiAwKTsK KwltYXNrID0gUlRSXzRMSU5FX0JVRl9FTiB8IFJUUl8zQlVGX0VOOworCisJY2gtPm1vZGVfY3Ry bCAmPSB+bWFzazsKKwljaC0+bW9kZV9jdHJsIHw9ICh2YWwgJiBtYXNrKTsKKworCXZhbCA9IChj aC0+cnRyYW1fNGxpbmVfZW4gPyAwIDogTlVNX1JPV1NfQUNUSVZFKTsKKwl2YWwgfD0gKDMgPDwg VEhSRVNfTE9XX1BPUykgJiBUSFJFU19MT1dfTUFTSzsKKwl2YWwgfD0gKDQgPDwgVEhSRVNfSElH SF9QT1MpICYgVEhSRVNfSElHSF9NQVNLOworCW1hc2sgPSBUSFJFU19MT1dfTUFTSyB8IFRIUkVT X0hJR0hfTUFTSyB8IE5VTV9ST1dTX0FDVElWRTsKKworCWNoLT5ydHJhbV9jdHJsICY9IH5tYXNr OworCWNoLT5ydHJhbV9jdHJsIHw9ICh2YWwgJiBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgZGNz c19kcHJfc2V0dXBfY29tcG9uZW50cyhzdHJ1Y3QgZGNzc19kcHJfY2ggKmNoLAorCQkJCSAgICAg IGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZvcm1hdCkKK3sKKwlpbnQgYV9zZWwsIHJf c2VsLCBnX3NlbCwgYl9zZWw7CisJYm9vbCB1dl9zd2FwLCB5X3V2X3N3YXA7CisKKwlzd2l0Y2gg KGZvcm1hdC0+Zm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX1lWWVU6CisJCXV2X3N3YXAgPSB0 cnVlOworCQl5X3V2X3N3YXAgPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgRFJNX0ZPUk1BVF9W WVVZOgorCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgorCQl1dl9zd2FwID0gdHJ1ZTsKKwkJeV91dl9z d2FwID0gZmFsc2U7CisJCWJyZWFrOworCisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJCXV2X3N3 YXAgPSBmYWxzZTsKKwkJeV91dl9zd2FwID0gdHJ1ZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0Ogor CQl1dl9zd2FwID0gZmFsc2U7CisJCXlfdXZfc3dhcCA9IGZhbHNlOworCQlicmVhazsKKwl9CisK KwlkY3NzX2Rwcl91dl9zd2FwKGNoLCB1dl9zd2FwKTsKKworCWRjc3NfZHByX3lfdXZfc3dhcChj aCwgeV91dl9zd2FwKTsKKworCWlmICghZm9ybWF0LT5pc195dXYpIHsKKwkJaWYgKCF0b19jb21w X3NlbChmb3JtYXQtPmZvcm1hdCwgJmFfc2VsLCAmcl9zZWwsCisJCQkJICZnX3NlbCwgJmJfc2Vs KSkgeworCQkJZGNzc19kcHJfYXJnYl9jb21wX3NlbChjaCwgYV9zZWwsIHJfc2VsLCBnX3NlbCwg Yl9zZWwpOworCQl9IGVsc2UgeworCQkJZGNzc19kcHJfYXJnYl9jb21wX3NlbChjaCwgMywgMiwg MSwgMCk7CisJCX0KKwl9IGVsc2UgeworCQlkY3NzX2Rwcl9hcmdiX2NvbXBfc2VsKGNoLCAwLCAw LCAwLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRjc3NfZHByX3RpbGVfc2V0KHN0cnVjdCBk Y3NzX2Rwcl9jaCAqY2gsIHVpbnQ2NF90IG1vZGlmaWVyKQoreworCXN3aXRjaCAoY2gtPmNoX251 bSkgeworCWNhc2UgMDoKKwkJc3dpdGNoIChtb2RpZmllcikgeworCQljYXNlIERSTV9GT1JNQVRf TU9EX0xJTkVBUjoKKwkJCWNoLT50aWxlID0gVElMRV9MSU5FQVI7CisJCQlicmVhazsKKwkJY2Fz ZSBEUk1fRk9STUFUX01PRF9WSVZBTlRFX1RJTEVEOgorCQkJY2gtPnRpbGUgPSBUSUxFX0dQVV9T VEFOREFSRDsKKwkJCWJyZWFrOworCQljYXNlIERSTV9GT1JNQVRfTU9EX1ZJVkFOVEVfU1VQRVJf VElMRUQ6CisJCQljaC0+dGlsZSA9IFRJTEVfR1BVX1NVUEVSOworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQlXQVJOX09OKDEpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgor CWNhc2UgMjoKKwkJY2gtPnRpbGUgPSBUSUxFX0xJTkVBUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCWNoLT5tb2RlX2N0cmwgJj0gflRJTEVf VFlQRV9NQVNLOworCWNoLT5tb2RlX2N0cmwgfD0gKChjaC0+dGlsZSA8PCBUSUxFX1RZUEVfUE9T KSAmIFRJTEVfVFlQRV9NQVNLKTsKK30KKwordm9pZCBkY3NzX2Rwcl9mb3JtYXRfc2V0KHN0cnVj dCBkY3NzX2RwciAqZHByLCBpbnQgY2hfbnVtLAorCQkJIGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0 X2luZm8gKmZvcm1hdCwgdTY0IG1vZGlmaWVyKQoreworCXN0cnVjdCBkY3NzX2Rwcl9jaCAqY2gg PSAmZHByLT5jaFtjaF9udW1dOworCisJY2gtPmZvcm1hdCA9ICpmb3JtYXQ7CisKKwlkY3NzX2Rw cl95dXZfZW4oY2gsIGZvcm1hdC0+aXNfeXV2KTsKKworCWRjc3NfZHByX3BpeF9zaXplX3NldChj aCwgZm9ybWF0KTsKKworCWRjc3NfZHByX3NldHVwX2NvbXBvbmVudHMoY2gsIGZvcm1hdCk7CisK KwlkY3NzX2Rwcl8ycGxhbmVfZW4oY2gsIGZvcm1hdC0+bnVtX3BsYW5lcyA9PSAyKTsKKworCWRj c3NfZHByX3J0cmFtX3NldChjaCwgZm9ybWF0LT5mb3JtYXQpOworCisJZGNzc19kcHJfdGlsZV9z ZXQoY2gsIG1vZGlmaWVyKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBm cm9tIGludGVycnVwdCBjb250ZXh0LiAqLwordm9pZCBkY3NzX2Rwcl93cml0ZV9zeXNjdHJsKHN0 cnVjdCBkY3NzX2RwciAqZHByKQoreworCWludCBjaG51bTsKKworCWZvciAoY2hudW0gPSAwOyBj aG51bSA8IDM7IGNobnVtKyspIHsKKwkJc3RydWN0IGRjc3NfZHByX2NoICpjaCA9ICZkcHItPmNo W2NobnVtXTsKKworCQlpZiAoY2gtPnN5c19jdHJsX2NoZ2QpIHsKKwkJCWRjc3NfY3R4bGRfd3Jp dGVfaXJxc2FmZShkcHItPmN0eGxkLCBkcHItPmN0eF9pZCwKKwkJCQkJCSBjaC0+c3lzX2N0cmws CisJCQkJCQkgY2gtPmJhc2Vfb2ZzICsKKwkJCQkJCSBEQ1NTX0RQUl9TWVNURU1fQ1RSTDApOwor CQkJY2gtPnN5c19jdHJsX2NoZ2QgPSBmYWxzZTsKKwkJfQorCX0KK30KKwordm9pZCBkY3NzX2Rw cl9zZXRfcm90YXRpb24oc3RydWN0IGRjc3NfZHByICpkcHIsIGludCBjaF9udW0sIHUzMiByb3Rh dGlvbikKK3sKKwlzdHJ1Y3QgZGNzc19kcHJfY2ggKmNoID0gJmRwci0+Y2hbY2hfbnVtXTsKKwor CWNoLT5mcmFtZV9jdHJsICY9IH4oSEZMSVBfRU4gfCBWRkxJUF9FTiB8IFJPVF9FTkNfTUFTSyk7 CisKKwljaC0+ZnJhbWVfY3RybCB8PSByb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCA/IEhG TElQX0VOIDogMDsKKwljaC0+ZnJhbWVfY3RybCB8PSByb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxF Q1RfWSA/IFZGTElQX0VOIDogMDsKKworCWlmIChyb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV85 MCkKKwkJY2gtPmZyYW1lX2N0cmwgfD0gMSA8PCBST1RfRU5DX1BPUzsKKwllbHNlIGlmIChyb3Rh dGlvbiAmIERSTV9NT0RFX1JPVEFURV8xODApCisJCWNoLT5mcmFtZV9jdHJsIHw9IDIgPDwgUk9U X0VOQ19QT1M7CisJZWxzZSBpZiAocm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVfMjcwKQorCQlj aC0+ZnJhbWVfY3RybCB8PSAzIDw8IFJPVF9FTkNfUE9TOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3Mv ZGNzcy1kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMTA5ZmIzOAot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9kY3NzLWRydi5jCkBA IC0wLDAgKzEsMTgxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoK KyAqIENvcHlyaWdodCAyMDE5IE5YUC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9v Zi5oPgorCisjaW5jbHVkZSAiZGNzcy1kZXYuaCIKKyNpbmNsdWRlICJkY3NzLWttcy5oIgorCitz dHJ1Y3QgZGNzc19kcnYgeworCXN0cnVjdCBkY3NzX2RldiAqZGNzczsKKwlzdHJ1Y3QgZGNzc19r bXNfZGV2ICprbXM7CisKKwlib29sIGlzX2NvbXBvbmVudGl6ZWQ7Cit9OworCitzdHJ1Y3QgZGNz c19kZXYgKmRjc3NfZHJ2X2Rldl90b19kY3NzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgZGNzc19kcnYgKm1kcnYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBtZHJ2 ID8gbWRydi0+ZGNzcyA6IE5VTEw7Cit9CisKK3N0cnVjdCBkcm1fZGV2aWNlICpkY3NzX2Rydl9k ZXZfdG9fZHJtKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGNzc19kcnYgKm1kcnYg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBtZHJ2ID8gJm1kcnYtPmttcy0+YmFz ZSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGNzc19kcnZfaW5pdChzdHJ1Y3QgZGV2aWNlICpk ZXYsIGJvb2wgY29tcG9uZW50aXplZCkKK3sKKwlzdHJ1Y3QgZGNzc19kcnYgKm1kcnY7CisJaW50 IGVyciA9IDA7CisKKwltZHJ2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZHJ2KSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFtZHJ2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1kcnYtPmlzX2Nv bXBvbmVudGl6ZWQgPSBjb21wb25lbnRpemVkOworCisJbWRydi0+ZGNzcyA9IGRjc3NfZGV2X2Ny ZWF0ZShkZXYsIGNvbXBvbmVudGl6ZWQpOworCWlmIChJU19FUlIobWRydi0+ZGNzcykpIHsKKwkJ ZXJyID0gUFRSX0VSUihtZHJ2LT5kY3NzKTsKKwkJZ290byBlcnI7CisJfQorCisJZGV2X3NldF9k cnZkYXRhKGRldiwgbWRydik7CisKKwltZHJ2LT5rbXMgPSBkY3NzX2ttc19hdHRhY2gobWRydi0+ ZGNzcywgY29tcG9uZW50aXplZCk7CisJaWYgKElTX0VSUihtZHJ2LT5rbXMpKSB7CisJCWVyciA9 IFBUUl9FUlIobWRydi0+a21zKTsKKwkJZ290byBkY3NzX3NodXRvZmY7CisJfQorCisJcmV0dXJu IDA7CisKK2Rjc3Nfc2h1dG9mZjoKKwlkY3NzX2Rldl9kZXN0cm95KG1kcnYtPmRjc3MpOworCisJ ZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKK2VycjoKKwlkZXZtX2tmcmVlKGRldiwgbWRy dik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZGNzc19kcnZfZGVpbml0KHN0cnVj dCBkZXZpY2UgKmRldiwgYm9vbCBjb21wb25lbnRpemVkKQoreworCXN0cnVjdCBkY3NzX2RydiAq bWRydiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFtZHJ2KQorCQlyZXR1cm47CisK KwlkY3NzX2ttc19kZXRhY2gobWRydi0+a21zLCBjb21wb25lbnRpemVkKTsKKwlkY3NzX2Rldl9k ZXN0cm95KG1kcnYtPmRjc3MpOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Cit9CisK K3N0YXRpYyBpbnQgZGNzc19kcnZfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJu IGRjc3NfZHJ2X2luaXQoZGV2LCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgZGNzc19kcnZfdW5i aW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGNzc19kcnZfZGVpbml0KGRldiwg dHJ1ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgZGNz c19tYXN0ZXJfb3BzID0geworCS5iaW5kCT0gZGNzc19kcnZfYmluZCwKKwkudW5iaW5kCT0gZGNz c19kcnZfdW5iaW5kLAorfTsKKworc3RhdGljIGludCBjb21wYXJlX29mKHN0cnVjdCBkZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IGRhdGE7Cit9CisK K3N0YXRpYyBpbnQgZGNzc19kcnZfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBj b21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlbW90 ZTsKKworCWlmICghZGV2LT5vZl9ub2RlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJlbW90ZSA9 IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkZXYtPm9mX25vZGUsIDAsIDApOworCWlmICghcmVt b3RlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShy ZW1vdGUsICJmc2wsaW14OG1xLW53bC1kc2kiKSkgeworCQlvZl9ub2RlX3B1dChyZW1vdGUpOwor CQlyZXR1cm4gZGNzc19kcnZfaW5pdChkZXYsIGZhbHNlKTsKKwl9CisKKwlkcm1fb2ZfY29tcG9u ZW50X21hdGNoX2FkZChkZXYsICZtYXRjaCwgY29tcGFyZV9vZiwgcmVtb3RlKTsKKwlvZl9ub2Rl X3B1dChyZW1vdGUpOworCisJcmV0dXJuIGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2go ZGV2LCAmZGNzc19tYXN0ZXJfb3BzLCBtYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgZGNzc19kcnZf cGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IGRjc3NfZHJ2ICptZHJ2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJaWYgKG1k cnYtPmlzX2NvbXBvbmVudGl6ZWQpCisJCWNvbXBvbmVudF9tYXN0ZXJfZGVsKCZwZGV2LT5kZXYs ICZkY3NzX21hc3Rlcl9vcHMpOworCWVsc2UKKwkJZGNzc19kcnZfZGVpbml0KCZwZGV2LT5kZXYs IGZhbHNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRjc3NfdHlwZV9kYXRh IGRjc3NfdHlwZXNbXSA9IHsKKwlbRENTU19JTVg4TVFdID0geworCQkubmFtZSA9ICJEQ1NTX0lN WDhNUSIsCisJCS5ibGtjdGxfb2ZzID0gMHgyRjAwMCwKKwkJLmN0eGxkX29mcyA9IDB4MjMwMDAs CisJCS5kdGdfb2ZzID0gMHgyMDAwMCwKKwkJLnNjYWxlcl9vZnMgPSAweDFDMDAwLAorCQkuc3Nf b2ZzID0gMHgxQjAwMCwKKwkJLmRwcl9vZnMgPSAweDE4MDAwLAorCX0sCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkY3NzX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0 aWJsZSA9ICJueHAsaW14OG1xLWRjc3MiLCAuZGF0YSA9ICZkY3NzX3R5cGVzW0RDU1NfSU1YOE1R XSwgfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGRjc3Nfb2ZfbWF0Y2gp OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZGNzc19kZXZfcG0gPSB7CisJU0VU X1NZU1RFTV9TTEVFUF9QTV9PUFMoZGNzc19kZXZfc3VzcGVuZCwgZGNzc19kZXZfcmVzdW1lKQor CVNFVF9SVU5USU1FX1BNX09QUyhkY3NzX2Rldl9ydW50aW1lX3N1c3BlbmQsCisJCQkgICBkY3Nz X2Rldl9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGRjc3NfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQk9IGRjc3NfZHJ2X3BsYXRm b3JtX3Byb2JlLAorCS5yZW1vdmUJPSBkY3NzX2Rydl9wbGF0Zm9ybV9yZW1vdmUsCisJLmRyaXZl cgk9IHsKKwkJLm5hbWUgPSAiaW14LWRjc3MiLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBkY3NzX29m X21hdGNoLAorCQkucG0gPSAmZGNzc19kZXZfcG0sCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9y bV9kcml2ZXIoZGNzc19wbGF0Zm9ybV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJMYXVyZW50 aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBueHAuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9O KCJEQ1NTIGRyaXZlciBmb3IgaS5NWDhNUSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtZHRnLmMgYi9kcml2ZXJz L2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1kdGcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMC4uNmFiNGM2NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgv ZGNzcy9kY3NzLWR0Zy5jCkBAIC0wLDAgKzEsNDQyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAyMDE5IE5YUC4KKyAqLworCisjaW5jbHVk ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51 eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAiZGNzcy1kZXYuaCIKKworI2RlZmluZSBEQ1NT X0RUR19UQ19DT05UUk9MX1NUQVRVUwkJCTB4MDAKKyNkZWZpbmUgICBDSDNfRU4JCQkJCUJJVCgw KQorI2RlZmluZSAgIENIMl9FTgkJCQkJQklUKDEpCisjZGVmaW5lICAgQ0gxX0VOCQkJCQlCSVQo MikKKyNkZWZpbmUgICBPVkxfREFUQV9NT0RFCQkJCQlCSVQoMykKKyNkZWZpbmUgICBCTEVOREVS X1ZJREVPX0FMUEhBX1NFTAkJCUJJVCg3KQorI2RlZmluZSAgIERUR19TVEFSVAkJCQkJQklUKDgp CisjZGVmaW5lICAgREJZX01PREVfRU4JCQkJCUJJVCg5KQorI2RlZmluZSAgIENIMV9BTFBIQV9T RUwJCQkJCUJJVCgxMCkKKyNkZWZpbmUgICBDU1NfUElYX0NPTVBfU1dBUF9QT1MJCQkJMTIKKyNk ZWZpbmUgICBDU1NfUElYX0NPTVBfU1dBUF9NQVNLCQkJR0VOTUFTSygxNCwgMTIpCisjZGVmaW5l ICAgREVGQVVMVF9GR19BTFBIQV9QT1MJCQkJMjQKKyNkZWZpbmUgICBERUZBVUxUX0ZHX0FMUEhB X01BU0sJCQkJR0VOTUFTSygzMSwgMjQpCisjZGVmaW5lIERDU1NfRFRHX1RDX0RURwkJCQkJMHgw NAorI2RlZmluZSBEQ1NTX0RUR19UQ19ESVNQX1RPUAkJCQkweDA4CisjZGVmaW5lIERDU1NfRFRH X1RDX0RJU1BfQk9UCQkJCTB4MEMKKyNkZWZpbmUgRENTU19EVEdfVENfQ0gxX1RPUAkJCQkweDEw CisjZGVmaW5lIERDU1NfRFRHX1RDX0NIMV9CT1QJCQkJMHgxNAorI2RlZmluZSBEQ1NTX0RUR19U Q19DSDJfVE9QCQkJCTB4MTgKKyNkZWZpbmUgRENTU19EVEdfVENfQ0gyX0JPVAkJCQkweDFDCisj ZGVmaW5lIERDU1NfRFRHX1RDX0NIM19UT1AJCQkJMHgyMAorI2RlZmluZSBEQ1NTX0RUR19UQ19D SDNfQk9UCQkJCTB4MjQKKyNkZWZpbmUgICBUQ19YX1BPUwkJCQkJMAorI2RlZmluZSAgIFRDX1hf TUFTSwkJCQkJR0VOTUFTSygxMiwgMCkKKyNkZWZpbmUgICBUQ19ZX1BPUwkJCQkJMTYKKyNkZWZp bmUgICBUQ19ZX01BU0sJCQkJCUdFTk1BU0soMjgsIDE2KQorI2RlZmluZSBEQ1NTX0RUR19UQ19D VFhMRAkJCQkweDI4CisjZGVmaW5lICAgVENfQ1RYTERfREJfWV9QT1MJCQkJMAorI2RlZmluZSAg IFRDX0NUWExEX0RCX1lfTUFTSwkJCQlHRU5NQVNLKDEyLCAwKQorI2RlZmluZSAgIFRDX0NUWExE X1NCX1lfUE9TCQkJCTE2CisjZGVmaW5lICAgVENfQ1RYTERfU0JfWV9NQVNLCQkJCUdFTk1BU0so MjgsIDE2KQorI2RlZmluZSBEQ1NTX0RUR19UQ19DSDFfQktSTkQJCQkJMHgyQworI2RlZmluZSBE Q1NTX0RUR19UQ19DSDJfQktSTkQJCQkJMHgzMAorI2RlZmluZSAgIEJLUk5EX1JfWV9DT01QX1BP UwkJCQkyMAorI2RlZmluZSAgIEJLUk5EX1JfWV9DT01QX01BU0sJCQkJR0VOTUFTSygyOSwgMjAp CisjZGVmaW5lICAgQktSTkRfR19VX0NPTVBfUE9TCQkJCTEwCisjZGVmaW5lICAgQktSTkRfR19V X0NPTVBfTUFTSwkJCQlHRU5NQVNLKDE5LCAxMCkKKyNkZWZpbmUgICBCS1JORF9CX1ZfQ09NUF9Q T1MJCQkJMAorI2RlZmluZSAgIEJLUk5EX0JfVl9DT01QX01BU0sJCQkJR0VOTUFTSyg5LCAwKQor I2RlZmluZSBEQ1NTX0RUR19CTEVOREVSX0RCWV9SQU5HRUlOVgkJCTB4MzgKKyNkZWZpbmUgRENT U19EVEdfQkxFTkRFUl9EQllfUkFOR0VNSU4JCQkweDNDCisjZGVmaW5lIERDU1NfRFRHX0JMRU5E RVJfREJZX0JEUAkJCTB4NDAKKyNkZWZpbmUgRENTU19EVEdfQkxFTkRFUl9CS1JORF9JCQkJMHg0 NAorI2RlZmluZSBEQ1NTX0RUR19CTEVOREVSX0JLUk5EX1AJCQkweDQ4CisjZGVmaW5lIERDU1Nf RFRHX0JMRU5ERVJfQktSTkRfVAkJCTB4NEMKKyNkZWZpbmUgRENTU19EVEdfTElORTBfSU5UCQkJ CTB4NTAKKyNkZWZpbmUgRENTU19EVEdfTElORTFfSU5UCQkJCTB4NTQKKyNkZWZpbmUgRENTU19E VEdfQkdfQUxQSEFfREVGQVVMVAkJCTB4NTgKKyNkZWZpbmUgRENTU19EVEdfSU5UX1NUQVRVUwkJ CQkweDVDCisjZGVmaW5lIERDU1NfRFRHX0lOVF9DT05UUk9MCQkJCTB4NjAKKyNkZWZpbmUgRENT U19EVEdfVENfQ0gzX0JLUk5ECQkJCTB4NjQKKyNkZWZpbmUgRENTU19EVEdfSU5UX01BU0sJCQkJ MHg2OAorI2RlZmluZSAgIExJTkUwX0lSUQkJCQkJQklUKDApCisjZGVmaW5lICAgTElORTFfSVJR CQkJCQlCSVQoMSkKKyNkZWZpbmUgICBMSU5FMl9JUlEJCQkJCUJJVCgyKQorI2RlZmluZSAgIExJ TkUzX0lSUQkJCQkJQklUKDMpCisjZGVmaW5lIERDU1NfRFRHX0xJTkUyX0lOVAkJCQkweDZDCisj ZGVmaW5lIERDU1NfRFRHX0xJTkUzX0lOVAkJCQkweDcwCisjZGVmaW5lIERDU1NfRFRHX0RCWV9P TAkJCQkJMHg3NAorI2RlZmluZSBEQ1NTX0RUR19EQllfQkwJCQkJCTB4NzgKKyNkZWZpbmUgRENT U19EVEdfREJZX0VMCQkJCQkweDdDCisKK3N0cnVjdCBkY3NzX2R0ZyB7CisJc3RydWN0IGRldmlj ZSAqZGV2OworCXN0cnVjdCBkY3NzX2N0eGxkICpjdHhsZDsKKwl2b2lkIF9faW9tZW0gKmJhc2Vf cmVnOworCXUzMiBiYXNlX29mczsKKworCXUzMiBjdHhfaWQ7CisKKwlib29sIGluX3VzZTsKKwor CXUzMiBkaXNfdWxjX3g7CisJdTMyIGRpc191bGNfeTsKKworCXUzMiBjb250cm9sX3N0YXR1czsK Kwl1MzIgYWxwaGE7CisKKwlpbnQgY3R4bGRfa2lja19pcnE7CisJYm9vbCBjdHhsZF9raWNrX2ly cV9lbjsKKworCXN0cnVjdCBjbGsgKnBpeF9jbGs7CisJc3RydWN0IGNsayAqcGxsX3NyY19jbGs7 CisJc3RydWN0IGNsayAqcGxsX3BoeV9yZWZfY2xrOworCisJLyoKKwkgKiBUaGlzIHdpbGwgYmUg cGFzc2VkIG9uIGJ5IERSTSBDUlRDIHNvIHRoYXQgd2UgY2FuIHNpZ25hbCB3aGVuIERURyBoYXMK KwkgKiBiZWVuIHN1Y2Nlc3NmdWxseSBzdG9wcGVkLiBPdGhlcndpc2UsIGFueSBtb2Rlc2V0dGlu ZyB3aGlsZSBEVEcgaXMKKwkgKiBzdGlsbCBPTiBtYXkgcmVzdWx0IGluIHVucHJlZGljdGFibGUg YmVoYXZpb3IuCisJICovCisJc3RydWN0IGNvbXBsZXRpb24gKmRpc19jb21wbGV0aW9uOworfTsK Kworc3RhdGljIHZvaWQgZGNzc19kdGdfd3JpdGUoc3RydWN0IGRjc3NfZHRnICpkdGcsIHUzMiB2 YWwsIHUzMiBvZnMpCit7CisJaWYgKCFkdGctPmluX3VzZSkKKwkJZGNzc193cml0ZWwodmFsLCBk dGctPmJhc2VfcmVnICsgb2ZzKTsKKworCWRjc3NfY3R4bGRfd3JpdGUoZHRnLT5jdHhsZCwgZHRn LT5jdHhfaWQsIHZhbCwgZHRnLT5iYXNlX29mcyArIG9mcyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1 cm5fdCBkY3NzX2R0Z19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVj dCBkY3NzX2R0ZyAqZHRnID0gZGF0YTsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gZGNzc19y ZWFkbChkdGctPmJhc2VfcmVnICsgRENTU19EVEdfSU5UX1NUQVRVUyk7CisKKwlpZiAoIShzdGF0 dXMgJiBMSU5FMF9JUlEpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlkY3NzX2N0eGxkX2tp Y2soZHRnLT5jdHhsZCk7CisKKwlkY3NzX3dyaXRlbChzdGF0dXMgJiBMSU5FMF9JUlEsIGR0Zy0+ YmFzZV9yZWcgKyBEQ1NTX0RUR19JTlRfQ09OVFJPTCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 Cit9CisKK3N0YXRpYyBpbnQgZGNzc19kdGdfaXJxX2NvbmZpZyhzdHJ1Y3QgZGNzc19kdGcgKmR0 ZywKKwkJCSAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7 CisKKwlkdGctPmN0eGxkX2tpY2tfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwg ImN0eGxkX2tpY2siKTsKKwlpZiAoZHRnLT5jdHhsZF9raWNrX2lycSA8IDApIHsKKwkJZGV2X2Vy cihkdGctPmRldiwgImR0ZzogY2FuJ3QgZ2V0IGxpbmUyIGlycSBudW1iZXJcbiIpOworCQlyZXR1 cm4gZHRnLT5jdHhsZF9raWNrX2lycTsKKwl9CisKKwlkY3NzX3VwZGF0ZSgwLCBMSU5FMF9JUlEg fCBMSU5FMV9JUlEsCisJCSAgICBkdGctPmJhc2VfcmVnICsgRENTU19EVEdfSU5UX01BU0spOwor CisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkdGctPmRldiwgZHRnLT5jdHhsZF9raWNrX2lycSwK KwkJCSAgICAgICBkY3NzX2R0Z19pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1RSSUdHRVJf SElHSCwKKwkJCSAgICAgICAiZGNzc19jdHhsZF9raWNrIiwgZHRnKTsKKwlpZiAocmV0KSB7CisJ CWRldl9lcnIoZHRnLT5kZXYsICJkdGc6IGlycSByZXF1ZXN0IGZhaWxlZC5cbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWRpc2FibGVfaXJxKGR0Zy0+Y3R4bGRfa2lja19pcnEpOworCisJZHRn LT5jdHhsZF9raWNrX2lycV9lbiA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkY3Nz X2R0Z19pbml0KHN0cnVjdCBkY3NzX2RldiAqZGNzcywgdW5zaWduZWQgbG9uZyBkdGdfYmFzZSkK K3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZGNzc19kdGcgKmR0ZzsKKworCWR0ZyA9IGRldm1f a3phbGxvYyhkY3NzLT5kZXYsIHNpemVvZigqZHRnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkdGcp CisJCXJldHVybiAtRU5PTUVNOworCisJZGNzcy0+ZHRnID0gZHRnOworCWR0Zy0+ZGV2ID0gZGNz cy0+ZGV2OworCWR0Zy0+Y3R4bGQgPSBkY3NzLT5jdHhsZDsKKworCWR0Zy0+YmFzZV9yZWcgPSBk ZXZtX2lvcmVtYXAoZGNzcy0+ZGV2LCBkdGdfYmFzZSwgU1pfNEspOworCWlmICghZHRnLT5iYXNl X3JlZykgeworCQlkZXZfZXJyKGRjc3MtPmRldiwgImR0ZzogdW5hYmxlIHRvIHJlbWFwIGR0ZyBi YXNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwlk dGctPmJhc2Vfb2ZzID0gZHRnX2Jhc2U7CisJZHRnLT5jdHhfaWQgPSBDVFhfREI7CisKKwlkdGct PnBpeF9jbGsgPSBkY3NzLT5waXhfY2xrOworCWR0Zy0+cGxsX3NyY19jbGsgPSBkY3NzLT5wbGxf c3JjX2NsazsKKwlkdGctPnBsbF9waHlfcmVmX2NsayA9IGRjc3MtPnBsbF9waHlfcmVmX2NsazsK KworCWR0Zy0+YWxwaGEgPSAyNTU7CisKKwlkdGctPmNvbnRyb2xfc3RhdHVzIHw9IE9WTF9EQVRB X01PREUgfCBCTEVOREVSX1ZJREVPX0FMUEhBX1NFTCB8CisJCSgoZHRnLT5hbHBoYSA8PCBERUZB VUxUX0ZHX0FMUEhBX1BPUykgJiBERUZBVUxUX0ZHX0FMUEhBX01BU0spOworCisJcmV0ID0gZGNz c19kdGdfaXJxX2NvbmZpZyhkdGcsIHRvX3BsYXRmb3JtX2RldmljZShkY3NzLT5kZXYpKTsKKwlp ZiAocmV0KQorCQlnb3RvIGVycl9pcnE7CisKKwlyZXR1cm4gMDsKKworZXJyX2lycToKKwlkZXZt X2lvdW5tYXAoZHRnLT5kZXYsIGR0Zy0+YmFzZV9yZWcpOworCitlcnJfaW9yZW1hcDoKKwlkZXZt X2tmcmVlKGR0Zy0+ZGV2LCBkdGcpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBkY3NzX2R0 Z19leGl0KHN0cnVjdCBkY3NzX2R0ZyAqZHRnKQoreworCS8qIHN0b3AgRFRHICovCisJZGNzc193 cml0ZWwoRFRHX1NUQVJULCBkdGctPmJhc2VfcmVnICsgRENTU19EVEdfVENfQ09OVFJPTF9TVEFU VVMpOworCisJZGV2bV9mcmVlX2lycShkdGctPmRldiwgZHRnLT5jdHhsZF9raWNrX2lycSwgZHRn KTsKKworCWlmIChkdGctPmJhc2VfcmVnKQorCQlkZXZtX2lvdW5tYXAoZHRnLT5kZXYsIGR0Zy0+ YmFzZV9yZWcpOworCisJZGV2bV9rZnJlZShkdGctPmRldiwgZHRnKTsKK30KKwordm9pZCBkY3Nz X2R0Z19zeW5jX3NldChzdHJ1Y3QgZGNzc19kdGcgKmR0Zywgc3RydWN0IHZpZGVvbW9kZSAqdm0p Cit7CisJdTE2IGR0Z19scmNfeCwgZHRnX2xyY195OworCXUxNiBkaXNfdWxjX3gsIGRpc191bGNf eTsKKwl1MTYgZGlzX2xyY194LCBkaXNfbHJjX3k7CisJdTMyIHNiX2N0eGxkX3RyaWcsIGRiX2N0 eGxkX3RyaWc7CisJdTMyIHBpeGNsb2NrID0gdm0tPnBpeGVsY2xvY2s7CisJdTMyIGFjdHVhbF9j bGs7CisKKwlkdGdfbHJjX3ggPSB2bS0+aGZyb250X3BvcmNoICsgdm0tPmhiYWNrX3BvcmNoICsg dm0tPmhzeW5jX2xlbiArCisJCSAgICB2bS0+aGFjdGl2ZSAtIDE7CisJZHRnX2xyY195ID0gdm0t PnZmcm9udF9wb3JjaCArIHZtLT52YmFja19wb3JjaCArIHZtLT52c3luY19sZW4gKworCQkgICAg dm0tPnZhY3RpdmUgLSAxOworCWRpc191bGNfeCA9IHZtLT5oc3luY19sZW4gKyB2bS0+aGJhY2tf cG9yY2ggLSAxOworCWRpc191bGNfeSA9IHZtLT52c3luY19sZW4gKyB2bS0+dmZyb250X3BvcmNo ICsgdm0tPnZiYWNrX3BvcmNoIC0gMTsKKwlkaXNfbHJjX3ggPSB2bS0+aHN5bmNfbGVuICsgdm0t PmhiYWNrX3BvcmNoICsgdm0tPmhhY3RpdmUgLSAxOworCWRpc19scmNfeSA9IHZtLT52c3luY19s ZW4gKyB2bS0+dmZyb250X3BvcmNoICsgdm0tPnZiYWNrX3BvcmNoICsKKwkJICAgIHZtLT52YWN0 aXZlIC0gMTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkdGctPnBpeF9jbGspOworCWNsa19z ZXRfcmF0ZShkdGctPnBpeF9jbGssIHZtLT5waXhlbGNsb2NrKTsKKwljbGtfcHJlcGFyZV9lbmFi bGUoZHRnLT5waXhfY2xrKTsKKworCWFjdHVhbF9jbGsgPSBjbGtfZ2V0X3JhdGUoZHRnLT5waXhf Y2xrKTsKKwlpZiAocGl4Y2xvY2sgIT0gYWN0dWFsX2NsaykgeworCQlkZXZfaW5mbyhkdGctPmRl diwKKwkJCSAiUGl4ZWwgY2xvY2sgc2V0IHRvICV1IGtIeiBpbnN0ZWFkIG9mICV1IGtIei5cbiIs CisJCQkgKGFjdHVhbF9jbGsgLyAxMDAwKSwgKHBpeGNsb2NrIC8gMTAwMCkpOworCX0KKworCWRj c3NfZHRnX3dyaXRlKGR0ZywgKChkdGdfbHJjX3kgPDwgVENfWV9QT1MpIHwgZHRnX2xyY194KSwK KwkJICAgICAgIERDU1NfRFRHX1RDX0RURyk7CisJZGNzc19kdGdfd3JpdGUoZHRnLCAoKGRpc191 bGNfeSA8PCBUQ19ZX1BPUykgfCBkaXNfdWxjX3gpLAorCQkgICAgICAgRENTU19EVEdfVENfRElT UF9UT1ApOworCWRjc3NfZHRnX3dyaXRlKGR0ZywgKChkaXNfbHJjX3kgPDwgVENfWV9QT1MpIHwg ZGlzX2xyY194KSwKKwkJICAgICAgIERDU1NfRFRHX1RDX0RJU1BfQk9UKTsKKworCWR0Zy0+ZGlz X3VsY194ID0gZGlzX3VsY194OworCWR0Zy0+ZGlzX3VsY195ID0gZGlzX3VsY195OworCisJc2Jf Y3R4bGRfdHJpZyA9ICgoMCAqIGRpc19scmNfeSAvIDEwMCkgPDwgVENfQ1RYTERfU0JfWV9QT1Mp ICYKKwkJCQkJCQlUQ19DVFhMRF9TQl9ZX01BU0s7CisJZGJfY3R4bGRfdHJpZyA9ICgoOTkgKiBk aXNfbHJjX3kgLyAxMDApIDw8IFRDX0NUWExEX0RCX1lfUE9TKSAmCisJCQkJCQkJVENfQ1RYTERf REJfWV9NQVNLOworCisJZGNzc19kdGdfd3JpdGUoZHRnLCBzYl9jdHhsZF90cmlnIHwgZGJfY3R4 bGRfdHJpZywgRENTU19EVEdfVENfQ1RYTEQpOworCisJLyogdmJsYW5rIHRyaWdnZXIgKi8KKwlk Y3NzX2R0Z193cml0ZShkdGcsIDAsIERDU1NfRFRHX0xJTkUxX0lOVCk7CisKKwkvKiBDVFhMRCB0 cmlnZ2VyICovCisJZGNzc19kdGdfd3JpdGUoZHRnLCAoKDkwICogZGlzX2xyY195KSAvIDEwMCkg PDwgMTYsIERDU1NfRFRHX0xJTkUwX0lOVCk7Cit9CisKK3ZvaWQgZGNzc19kdGdfcGxhbmVfcG9z X3NldChzdHJ1Y3QgZGNzc19kdGcgKmR0ZywgaW50IGNoX251bSwKKwkJCSAgICBpbnQgcHgsIGlu dCBweSwgaW50IHB3LCBpbnQgcGgpCit7CisJdTE2IHBfdWxjX3gsIHBfdWxjX3k7CisJdTE2IHBf bHJjX3gsIHBfbHJjX3k7CisKKwlwX3VsY194ID0gZHRnLT5kaXNfdWxjX3ggKyBweDsKKwlwX3Vs Y195ID0gZHRnLT5kaXNfdWxjX3kgKyBweTsKKwlwX2xyY194ID0gcF91bGNfeCArIHB3OworCXBf bHJjX3kgPSBwX3VsY195ICsgcGg7CisKKwlpZiAoIXB4ICYmICFweSAmJiAhcHcgJiYgIXBoKSB7 CisJCWRjc3NfZHRnX3dyaXRlKGR0ZywgMCwgRENTU19EVEdfVENfQ0gxX1RPUCArIDB4OCAqIGNo X251bSk7CisJCWRjc3NfZHRnX3dyaXRlKGR0ZywgMCwgRENTU19EVEdfVENfQ0gxX0JPVCArIDB4 OCAqIGNoX251bSk7CisJfSBlbHNlIHsKKwkJZGNzc19kdGdfd3JpdGUoZHRnLCAoKHBfdWxjX3kg PDwgVENfWV9QT1MpIHwgcF91bGNfeCksCisJCQkgICAgICAgRENTU19EVEdfVENfQ0gxX1RPUCAr IDB4OCAqIGNoX251bSk7CisJCWRjc3NfZHRnX3dyaXRlKGR0ZywgKChwX2xyY195IDw8IFRDX1lf UE9TKSB8IHBfbHJjX3gpLAorCQkJICAgICAgIERDU1NfRFRHX1RDX0NIMV9CT1QgKyAweDggKiBj aF9udW0pOworCX0KK30KKworYm9vbCBkY3NzX2R0Z19nbG9iYWxfYWxwaGFfY2hhbmdlZChzdHJ1 Y3QgZGNzc19kdGcgKmR0ZywgaW50IGNoX251bSwgaW50IGFscGhhKQoreworCWlmIChjaF9udW0p CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBhbHBoYSAhPSBkdGctPmFscGhhOworfQorCit2 b2lkIGRjc3NfZHRnX3BsYW5lX2FscGhhX3NldChzdHJ1Y3QgZGNzc19kdGcgKmR0ZywgaW50IGNo X251bSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZvcm1hdCwgaW50 IGFscGhhKQoreworCXUzMiBhbHBoYV92YWw7CisKKwkvKiB3ZSBjYXJlIGFib3V0IGFscGhhIG9u bHkgd2hlbiBjaGFubmVsIDAgaXMgY29uY2VybmVkICovCisJaWYgKGNoX251bSkKKwkJcmV0dXJu OworCisJYWxwaGFfdmFsID0gKGFscGhhIDw8IERFRkFVTFRfRkdfQUxQSEFfUE9TKSAmIERFRkFV TFRfRkdfQUxQSEFfTUFTSzsKKworCS8qCisJICogVXNlIGdsb2JhbCBhbHBoYSBpZiBwaXhlbCBm b3JtYXQgZG9lcyBub3QgaGF2ZSBhbHBoYSBjaGFubmVsIG9yIHRoZQorCSAqIHVzZXIgZXhwbGlj aXRseSBjaG9zZSB0byB1c2UgZ2xvYmFsIGFscGhhIChpLmUuIGFscGhhIGlzIG5vdCBPUEFRVUUp LgorCSAqLworCWlmICghZm9ybWF0LT5oYXNfYWxwaGEgfHwgYWxwaGEgIT0gMjU1KSB7CisJCWR0 Zy0+Y29udHJvbF9zdGF0dXMgJj0gfihDSDFfQUxQSEFfU0VMIHwgREVGQVVMVF9GR19BTFBIQV9N QVNLKTsKKwkJZHRnLT5jb250cm9sX3N0YXR1cyB8PSBhbHBoYV92YWw7CisJfSBlbHNlIHsgLyog dXNlIHBlci1waXhlbCBhbHBoYSBvdGhlcndpc2UgKi8KKwkJZHRnLT5jb250cm9sX3N0YXR1cyB8 PSBDSDFfQUxQSEFfU0VMOworCX0KKworCWR0Zy0+YWxwaGEgPSBhbHBoYTsKK30KKwordm9pZCBk Y3NzX2R0Z19jc3Nfc2V0KHN0cnVjdCBkY3NzX2R0ZyAqZHRnKQoreworCWR0Zy0+Y29udHJvbF9z dGF0dXMgfD0KKwkJCSgweDUgPDwgQ1NTX1BJWF9DT01QX1NXQVBfUE9TKSAmIENTU19QSVhfQ09N UF9TV0FQX01BU0s7Cit9CisKK3N0YXRpYyB2b2lkIGRjc3NfZHRnX2Rpc2FibGVfY2FsbGJhY2so dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGNzc19kdGcgKmR0ZyA9IGRhdGE7CisKKwlkdGctPmNv bnRyb2xfc3RhdHVzICY9IH5EVEdfU1RBUlQ7CisKKwlkY3NzX3dyaXRlbChkdGctPmNvbnRyb2xf c3RhdHVzLAorCQkgICAgZHRnLT5iYXNlX3JlZyArIERDU1NfRFRHX1RDX0NPTlRST0xfU1RBVFVT KTsKKworCWR0Zy0+aW5fdXNlID0gZmFsc2U7CisKKwljb21wbGV0ZShkdGctPmRpc19jb21wbGV0 aW9uKTsKK30KKwordm9pZCBkY3NzX2R0Z19lbmFibGUoc3RydWN0IGRjc3NfZHRnICpkdGcsIGJv b2wgZW4sCisJCSAgICAgc3RydWN0IGNvbXBsZXRpb24gKmRpc19jb21wbGV0aW9uKQoreworCWlm ICghZW4pIHsKKwkJZHRnLT5kaXNfY29tcGxldGlvbiA9IGRpc19jb21wbGV0aW9uOworCQlkY3Nz X2N0eGxkX3JlZ2lzdGVyX2R0Z19kaXNhYmxlX2NiKGR0Zy0+Y3R4bGQsCisJCQkJCQkgICBkY3Nz X2R0Z19kaXNhYmxlX2NhbGxiYWNrLAorCQkJCQkJICAgZHRnKTsKKwkJcmV0dXJuOworCX0KKwor CWR0Zy0+ZGlzX2NvbXBsZXRpb24gPSBOVUxMOworCisJZHRnLT5jb250cm9sX3N0YXR1cyB8PSBE VEdfU1RBUlQ7CisKKwlkY3NzX2R0Z193cml0ZShkdGcsIGR0Zy0+Y29udHJvbF9zdGF0dXMsIERD U1NfRFRHX1RDX0NPTlRST0xfU1RBVFVTKTsKKworCWR0Zy0+aW5fdXNlID0gdHJ1ZTsKK30KKwor Ym9vbCBkY3NzX2R0Z19pc19lbmFibGVkKHN0cnVjdCBkY3NzX2R0ZyAqZHRnKQoreworCXJldHVy biBkdGctPmluX3VzZTsKK30KKwordm9pZCBkY3NzX2R0Z19jaF9lbmFibGUoc3RydWN0IGRjc3Nf ZHRnICpkdGcsIGludCBjaF9udW0sIGJvb2wgZW4pCit7CisJdTMyIGNoX2VuX21hcFtdID0ge0NI MV9FTiwgQ0gyX0VOLCBDSDNfRU59OworCXUzMiBjb250cm9sX3N0YXR1czsKKworCWNvbnRyb2xf c3RhdHVzID0gZHRnLT5jb250cm9sX3N0YXR1cyAmIH5jaF9lbl9tYXBbY2hfbnVtXTsKKwljb250 cm9sX3N0YXR1cyB8PSBlbiA/IGNoX2VuX21hcFtjaF9udW1dIDogMDsKKworCWlmIChkdGctPmNv bnRyb2xfc3RhdHVzICE9IGNvbnRyb2xfc3RhdHVzKQorCQlkY3NzX2R0Z193cml0ZShkdGcsIGNv bnRyb2xfc3RhdHVzLCBEQ1NTX0RUR19UQ19DT05UUk9MX1NUQVRVUyk7CisKKwlkdGctPmNvbnRy b2xfc3RhdHVzID0gY29udHJvbF9zdGF0dXM7Cit9CisKK3ZvaWQgZGNzc19kdGdfdmJsYW5rX2ly cV9lbmFibGUoc3RydWN0IGRjc3NfZHRnICpkdGcsIGJvb2wgZW4pCit7CisJdTMyIHN0YXR1czsK Kwl1MzIgbWFzayA9IGVuID8gTElORTFfSVJRIDogMDsKKworCWlmIChlbikgeworCQlzdGF0dXMg PSBkY3NzX3JlYWRsKGR0Zy0+YmFzZV9yZWcgKyBEQ1NTX0RUR19JTlRfU1RBVFVTKTsKKwkJZGNz c193cml0ZWwoc3RhdHVzICYgTElORTFfSVJRLAorCQkJICAgIGR0Zy0+YmFzZV9yZWcgKyBEQ1NT X0RUR19JTlRfQ09OVFJPTCk7CisJfQorCisJZGNzc191cGRhdGUobWFzaywgTElORTFfSVJRLCBk dGctPmJhc2VfcmVnICsgRENTU19EVEdfSU5UX01BU0spOworfQorCit2b2lkIGRjc3NfZHRnX2N0 eGxkX2tpY2tfaXJxX2VuYWJsZShzdHJ1Y3QgZGNzc19kdGcgKmR0ZywgYm9vbCBlbikKK3sKKwl1 MzIgc3RhdHVzOworCXUzMiBtYXNrID0gZW4gPyBMSU5FMF9JUlEgOiAwOworCisJaWYgKGVuKSB7 CisJCXN0YXR1cyA9IGRjc3NfcmVhZGwoZHRnLT5iYXNlX3JlZyArIERDU1NfRFRHX0lOVF9TVEFU VVMpOworCisJCWlmICghZHRnLT5jdHhsZF9raWNrX2lycV9lbikgeworCQkJZGNzc193cml0ZWwo c3RhdHVzICYgTElORTBfSVJRLAorCQkJCSAgICBkdGctPmJhc2VfcmVnICsgRENTU19EVEdfSU5U X0NPTlRST0wpOworCQkJZW5hYmxlX2lycShkdGctPmN0eGxkX2tpY2tfaXJxKTsKKwkJCWR0Zy0+ Y3R4bGRfa2lja19pcnFfZW4gPSB0cnVlOworCQkJZ290byBtYXNrX3VubWFzazsKKwkJfQorCisJ CXJldHVybjsKKwl9CisKKwlpZiAoIWR0Zy0+Y3R4bGRfa2lja19pcnFfZW4pCisJCXJldHVybjsK KworCWRpc2FibGVfaXJxX25vc3luYyhkdGctPmN0eGxkX2tpY2tfaXJxKTsKKwlkdGctPmN0eGxk X2tpY2tfaXJxX2VuID0gZmFsc2U7CisKK21hc2tfdW5tYXNrOgorCWRjc3NfdXBkYXRlKG1hc2ss IExJTkUwX0lSUSwgZHRnLT5iYXNlX3JlZyArIERDU1NfRFRHX0lOVF9NQVNLKTsKK30KKwordm9p ZCBkY3NzX2R0Z192YmxhbmtfaXJxX2NsZWFyKHN0cnVjdCBkY3NzX2R0ZyAqZHRnKQoreworCWRj c3NfdXBkYXRlKExJTkUxX0lSUSwgTElORTFfSVJRLCBkdGctPmJhc2VfcmVnICsgRENTU19EVEdf SU5UX0NPTlRST0wpOworfQorCitib29sIGRjc3NfZHRnX3ZibGFua19pcnFfdmFsaWQoc3RydWN0 IGRjc3NfZHRnICpkdGcpCit7CisJcmV0dXJuICEhKGRjc3NfcmVhZGwoZHRnLT5iYXNlX3JlZyAr IERDU1NfRFRHX0lOVF9TVEFUVVMpICYgTElORTFfSVJRKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3Mta21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2Rj c3MvZGNzcy1rbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYTMzYjNl NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9kY3NzLWttcy5j CkBAIC0wLDAgKzEsMzIyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAor LyoKKyAqIENvcHlyaWdodCAyMDE5IE5YUC4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2Rydi5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVy X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3By b2JlX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fdmJsYW5rLmg+CisjaW5jbHVkZSA8bGlu dXgvY29tcG9uZW50Lmg+CisKKyNpbmNsdWRlICJkY3NzLWRldi5oIgorI2luY2x1ZGUgImRjc3Mt a21zLmgiCisKK0RFRklORV9EUk1fR0VNX0NNQV9GT1BTKGRjc3NfY21hX2ZvcHMpOworCitzdHJ1 Y3QgZGNzc19kcm1fY29tbWl0IHsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtOworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKK307CisK K3N0YXRpYyB2b2lkIGRjc3NfZHJtX2F0b21pY19jb21taXRfdGFpbChzdHJ1Y3QgZGNzc19kcm1f Y29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gY29t bWl0LT5zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gY29tbWl0LT5kcm07CisJc3Ry dWN0IGRjc3Nfa21zX2RldiAqa21zID0gY29udGFpbmVyX29mKGRybSwgc3RydWN0IGRjc3Nfa21z X2RldiwgYmFzZSk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9mZW5jZXMoZHJtLCBz dGF0ZSwgZmFsc2UpOworCisJZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfZGVwZW5kZW5jaWVz KHN0YXRlKTsKKworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2Rpc2FibGVzKGRy bSwgc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhk cm0sIHN0YXRlKTsKKworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZHJtLCBzdGF0 ZSwKKwkJCQkJRFJNX1BMQU5FX0NPTU1JVF9BQ1RJVkVfT05MWSk7CisKKwlkcm1fYXRvbWljX2hl bHBlcl9jb21taXRfaHdfZG9uZShzdGF0ZSk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zv cl92YmxhbmtzKGRybSwgc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFu ZXMoZHJtLCBzdGF0ZSk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfY2xlYW51cF9kb25l KHN0YXRlKTsKKworCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKKworCXNwaW5fbG9jaygm a21zLT5jb21taXQud2FpdC5sb2NrKTsKKwlrbXMtPmNvbW1pdC5wZW5kaW5nID0gZmFsc2U7CisJ d2FrZV91cF9hbGxfbG9ja2VkKCZrbXMtPmNvbW1pdC53YWl0KTsKKwlzcGluX3VubG9jaygma21z LT5jb21taXQud2FpdC5sb2NrKTsKKworCWtmcmVlKGNvbW1pdCk7Cit9CisKK3N0YXRpYyB2b2lk IGRjc3NfY29tbWl0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBk Y3NzX2RybV9jb21taXQgKmNvbW1pdCA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCQkJICAgICAg c3RydWN0IGRjc3NfZHJtX2NvbW1pdCwKKwkJCQkJCSAgICAgIHdvcmspOworCisJZGNzc19kcm1f YXRvbWljX2NvbW1pdF90YWlsKGNvbW1pdCk7Cit9CisKK3N0YXRpYyBpbnQgZGNzc19kcm1fYXRv bWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJCSAgc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlLAorCQkJCSAgYm9vbCBub25ibG9jaykKK3sKKwlpbnQgcmV0OworCXN0 cnVjdCBkY3NzX2ttc19kZXYgKmttcyA9IGNvbnRhaW5lcl9vZihkcm0sIHN0cnVjdCBkY3NzX2tt c19kZXYsIGJhc2UpOworCXN0cnVjdCBkY3NzX2RybV9jb21taXQgKmNvbW1pdDsKKworCWlmIChz dGF0ZS0+YXN5bmNfdXBkYXRlKSB7CisJCXJldCA9IGRybV9hdG9taWNfaGVscGVyX3ByZXBhcmVf cGxhbmVzKGRybSwgc3RhdGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlkcm1f YXRvbWljX2hlbHBlcl9hc3luY19jb21taXQoZHJtLCBzdGF0ZSk7CisJCWRybV9hdG9taWNfaGVs cGVyX2NsZWFudXBfcGxhbmVzKGRybSwgc3RhdGUpOworCisJCXJldHVybiAwOworCX0KKworCWNv bW1pdCA9IGt6YWxsb2Moc2l6ZW9mKCpjb21taXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbW1p dCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb21taXQtPmRybSA9IGRybTsKKwljb21taXQtPnN0 YXRlID0gc3RhdGU7CisKKwlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXR1cF9jb21taXQoc3Rh dGUsIG5vbmJsb2NrKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCisJSU5JVF9XT1JL KCZjb21taXQtPndvcmssIGRjc3NfY29tbWl0X3dvcmspOworCisJcmV0ID0gZHJtX2F0b21pY19o ZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf ZnJlZTsKKworCWlmICghbm9uYmxvY2spIHsKKwkJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfd2Fp dF9mb3JfZmVuY2VzKGRybSwgc3RhdGUsIHRydWUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7 CisJfQorCisJc3Bpbl9sb2NrKCZrbXMtPmNvbW1pdC53YWl0LmxvY2spOworCXJldCA9IHdhaXRf ZXZlbnRfaW50ZXJydXB0aWJsZV9sb2NrZWQoa21zLT5jb21taXQud2FpdCwKKwkJCQkJICAgICAg IWttcy0+Y29tbWl0LnBlbmRpbmcpOworCWlmIChyZXQgPT0gMCkKKwkJa21zLT5jb21taXQucGVu ZGluZyA9IHRydWU7CisJc3Bpbl91bmxvY2soJmttcy0+Y29tbWl0LndhaXQubG9jayk7CisKKwlp ZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IGRybV9hdG9taWNfaGVscGVyX3N3YXBfc3Rh dGUoc3RhdGUsIHRydWUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJZHJtX2F0b21pY19z dGF0ZV9nZXQoc3RhdGUpOworCWlmIChub25ibG9jaykKKwkJcXVldWVfd29yayhrbXMtPmNvbW1p dF93cSwgJmNvbW1pdC0+d29yayk7CisJZWxzZQorCQlkY3NzX2RybV9hdG9taWNfY29tbWl0X3Rh aWwoY29tbWl0KTsKKworCXJldHVybiAwOworCitlcnI6CisJZHJtX2F0b21pY19oZWxwZXJfY2xl YW51cF9wbGFuZXMoZHJtLCBzdGF0ZSk7CisKK2Vycl9mcmVlOgorCWtmcmVlKGNvbW1pdCk7CisJ cmV0dXJuIHJldDsKK30KKworY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBkY3Nz X2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gZHJtX2dlbV9mYl9jcmVh dGUsCisJLm91dHB1dF9wb2xsX2NoYW5nZWQgPSBkcm1fZmJfaGVscGVyX291dHB1dF9wb2xsX2No YW5nZWQsCisJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5hdG9t aWNfY29tbWl0ID0gZGNzc19kcm1fYXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2RyaXZlciBkY3NzX2ttc19kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZF Ul9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8IERSSVZFUl9BVE9NSUMsCisJLmdlbV9mcmVlX29iamVj dF91bmxvY2tlZCA9IGRybV9nZW1fY21hX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3BzCQk9ICZk cm1fZ2VtX2NtYV92bV9vcHMsCisJLmR1bWJfY3JlYXRlCQk9IGRybV9nZW1fY21hX2R1bWJfY3Jl YXRlLAorCisJLnByaW1lX2hhbmRsZV90b19mZAk9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2Zk LAorCS5wcmltZV9mZF90b19oYW5kbGUJPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwKKwku Z2VtX3ByaW1lX2ltcG9ydAk9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAorCS5nZW1fcHJpbWVfZXhw b3J0CT0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUJPSBk cm1fZ2VtX2NtYV9wcmltZV9nZXRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFi bGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLmdlbV9wcmltZV92bWFw CQk9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCisJLmdlbV9wcmltZV92dW5tYXAJPSBkcm1fZ2Vt X2NtYV9wcmltZV92dW5tYXAsCisJLmdlbV9wcmltZV9tbWFwCQk9IGRybV9nZW1fY21hX3ByaW1l X21tYXAsCisJLmZvcHMJCQk9ICZkY3NzX2NtYV9mb3BzLAorCS5uYW1lCQkJPSAiaW14LWRjc3Mi LAorCS5kZXNjCQkJPSAiaS5NWDhNUSBEaXNwbGF5IFN1YnN5c3RlbSIsCisJLmRhdGUJCQk9ICIy MDE5MDkxNyIsCisJLm1ham9yCQkJPSAxLAorCS5taW5vcgkJCT0gMCwKKwkucGF0Y2hsZXZlbAkJ PSAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1 bmNzIGRjc3NfbW9kZV9jb25maWdfaGVscGVycyA9IHsKKwkuYXRvbWljX2NvbW1pdF90YWlsID0g ZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3RhaWxfcnBtLAorfTsKKworc3RhdGljIHZvaWQgZGNz c19rbXNfbW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgZGNzc19rbXNfZGV2ICprbXMpCit7CisJc3Ry dWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmttcy0+YmFzZS5tb2RlX2NvbmZpZzsKKwor CWRybV9tb2RlX2NvbmZpZ19pbml0KCZrbXMtPmJhc2UpOworCisJY29uZmlnLT5taW5fd2lkdGgg PSAxOworCWNvbmZpZy0+bWluX2hlaWdodCA9IDE7CisJY29uZmlnLT5tYXhfd2lkdGggPSA0MDk2 OworCWNvbmZpZy0+bWF4X2hlaWdodCA9IDQwOTY7CisJY29uZmlnLT5hbGxvd19mYl9tb2RpZmll cnMgPSB0cnVlOworCWNvbmZpZy0+bm9ybWFsaXplX3pwb3MgPSB0cnVlOworCisJY29uZmlnLT5m dW5jcyA9ICZkY3NzX2RybV9tb2RlX2NvbmZpZ19mdW5jczsKKwljb25maWctPmhlbHBlcl9wcml2 YXRlID0gJmRjc3NfbW9kZV9jb25maWdfaGVscGVyczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fZW5jb2Rlcl9mdW5jcyBkY3NzX2ttc19zaW1wbGVfZW5jb2Rlcl9mdW5jcyA9IHsKKwku ZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitzdGF0aWMgaW50IGRjc3Nfa21z X3NldHVwX2VuY29kZXIoc3RydWN0IGRjc3Nfa21zX2RldiAqa21zKQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZGV2ID0gJmttcy0+YmFzZTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIg PSAma21zLT5lbmNvZGVyOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IChzdHJ1Y3QgZHJtX2Ny dGMgKikma21zLT5jcnRjOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2U7CisJaW50IHJldDsKKworCXJldCA9IGRybV9vZl9maW5kX3BhbmVsX29y X2JyaWRnZShkZGV2LT5kZXYtPm9mX25vZGUsIDAsIDAsCisJCQkJCSAgJnBhbmVsLCAmYnJpZGdl KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFicmlkZ2UpIHsKKwkJZGV2X2Vy cihkZGV2LT5kZXYsICJObyBicmlkZ2UgZm91bmQgJWQuXG4iLCByZXQpOworCQlyZXR1cm4gLUVO T0RFVjsKKwl9CisKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGRybV9jcnRjX21hc2soY3J0 Yyk7CisKKwlyZXQgPSBkcm1fZW5jb2Rlcl9pbml0KCZrbXMtPmJhc2UsIGVuY29kZXIsCisJCQkg ICAgICAgJmRjc3Nfa21zX3NpbXBsZV9lbmNvZGVyX2Z1bmNzLAorCQkJICAgICAgIERSTV9NT0RF X0VOQ09ERVJfTk9ORSwgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRkZXYtPmRldiwg IkZhaWxlZCBpbml0aWFsaXppbmcgZW5jb2RlciAlZC5cbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0dXJuIGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsIGJyaWRnZSwgTlVMTCk7 Cit9CisKK3N0cnVjdCBkY3NzX2ttc19kZXYgKmRjc3Nfa21zX2F0dGFjaChzdHJ1Y3QgZGNzc19k ZXYgKmRjc3MsIGJvb2wgY29tcG9uZW50aXplZCkKK3sKKwlzdHJ1Y3QgZGNzc19rbXNfZGV2ICpr bXMgPSBremFsbG9jKHNpemVvZigqa21zKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRybTsKKwlzdHJ1Y3QgZGNzc19jcnRjICpjcnRjOworCWludCByZXQ7CisKKwlpZiAoIWtt cykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlkcm0gPSAma21zLT5iYXNlOworCWNy dGMgPSAma21zLT5jcnRjOworCXJldCA9IGRybV9kZXZfaW5pdChkcm0sICZkY3NzX2ttc19kcml2 ZXIsIGRjc3MtPmRldik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2ttczsKKworCWRybS0+ZGV2 X3ByaXZhdGUgPSBkY3NzOworCisJZGNzc19rbXNfbW9kZV9jb25maWdfaW5pdChrbXMpOworCisJ cmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgMSk7CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVw X21vZGVfY29uZmlnOworCisJZHJtLT5pcnFfZW5hYmxlZCA9IHRydWU7CisKKwlyZXQgPSBkY3Nz X2NydGNfaW5pdChjcnRjLCBkcm0pOworCWlmIChyZXQpCisJCWdvdG8gY2xlYW51cF9tb2RlX2Nv bmZpZzsKKworCWttcy0+Y29tbWl0X3dxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoImRjc3Nf bm9uYmxvY2tfY29tbWl0X3dxIiwgMCk7CisJaWYgKCFrbXMtPmNvbW1pdF93cSkgeworCQlyZXQg PSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXBfY3J0YzsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9o ZWFkKCZrbXMtPmNvbW1pdC53YWl0KTsKKworCWlmIChjb21wb25lbnRpemVkKQorCQlyZXQgPSBj b21wb25lbnRfYmluZF9hbGwoZGNzcy0+ZGV2LCBrbXMpOworCWVsc2UKKwkJcmV0ID0gZGNzc19r bXNfc2V0dXBfZW5jb2RlcihrbXMpOworCisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwX3dxOwor CisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2lu aXQoZHJtKTsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsKKwlpZiAocmV0KQor CQlnb3RvIGNsZWFudXBfd3E7CisKKwlkcm1fZmJkZXZfZ2VuZXJpY19zZXR1cChkcm0sIDMyKTsK KworCXJldHVybiBrbXM7CisKK2NsZWFudXBfd3E6CisJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5p KGRybSk7CisJZGVzdHJveV93b3JrcXVldWUoa21zLT5jb21taXRfd3EpOworCitjbGVhbnVwX2Ny dGM6CisJZGNzc19jcnRjX2RlaW5pdChjcnRjLCBkcm0pOworCitjbGVhbnVwX21vZGVfY29uZmln OgorCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisKK2ZyZWVfa21zOgorCWtmcmVlKGtt cyk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBkY3NzX2ttc19kZXRhY2goc3Ry dWN0IGRjc3Nfa21zX2RldiAqa21zLCBib29sIGNvbXBvbmVudGl6ZWQpCit7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRybSA9ICZrbXMtPmJhc2U7CisJc3RydWN0IGRjc3NfZGV2ICpkY3NzID0gZHJt LT5kZXZfcHJpdmF0ZTsKKworCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworCWRybV9rbXNfaGVs cGVyX3BvbGxfZmluaShkcm0pOworCWRybV9hdG9taWNfaGVscGVyX3NodXRkb3duKGRybSk7CisJ ZHJtX2NydGNfdmJsYW5rX29mZigma21zLT5jcnRjLmJhc2UpOworCWRybS0+aXJxX2VuYWJsZWQg PSBmYWxzZTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworCWRlc3Ryb3lfd29ya3F1 ZXVlKGttcy0+Y29tbWl0X3dxKTsKKwlkY3NzX2NydGNfZGVpbml0KCZrbXMtPmNydGMsIGRybSk7 CisJaWYgKGNvbXBvbmVudGl6ZWQpCisJCWNvbXBvbmVudF91bmJpbmRfYWxsKGRjc3MtPmRldiwg ZHJtKTsKKwlkcm0tPmRldl9wcml2YXRlID0gTlVMTDsKKwlkcm1fZGV2X3B1dChkcm0pOworfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rjc3Mta21zLmggYi9kcml2ZXJz L2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1rbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMC4uNjI5NzAwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgv ZGNzcy9kY3NzLWttcy5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wICovCisvKgorICogQ29weXJpZ2h0IDIwMTkgTlhQLgorICovCisKKyNpZm5k ZWYgX0RDU1NfS01TX0hfCisjZGVmaW5lIF9EQ1NTX0tNU19IXworCisjaW5jbHVkZSA8ZHJtL2Ry bV9lbmNvZGVyLmg+CisKK3N0cnVjdCBkY3NzX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lIGJh c2U7CisKKwlpbnQgY2hfbnVtOworfTsKKworc3RydWN0IGRjc3NfY3J0YyB7CisJc3RydWN0IGRy bV9jcnRjCQliYXNlOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZQkqc3RhdGU7CisKKwlzdHJ1Y3Qg ZGNzc19wbGFuZQkqcGxhbmVbM107CisKKwlpbnQJCQlpcnE7CisJYm9vbAkJCWlycV9lbmFibGVk OworCisJc3RydWN0IGNvbXBsZXRpb24gZW5fY29tcGxldGlvbjsKKwlzdHJ1Y3QgY29tcGxldGlv biBkaXNfY29tcGxldGlvbjsKK307CisKK3N0cnVjdCBjb21taXQgeworCXdhaXRfcXVldWVfaGVh ZF90IHdhaXQ7CisJYm9vbCBwZW5kaW5nOworfTsKKworc3RydWN0IGRjc3Nfa21zX2RldiB7CisJ c3RydWN0IGRybV9kZXZpY2UgYmFzZTsKKwlzdHJ1Y3QgZGNzc19jcnRjIGNydGM7CisJc3RydWN0 IGRybV9lbmNvZGVyIGVuY29kZXI7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNvbW1pdF93 cTsKKwlzdHJ1Y3QgY29tbWl0IGNvbW1pdDsKK307CisKK3N0cnVjdCBkY3NzX2ttc19kZXYgKmRj c3Nfa21zX2F0dGFjaChzdHJ1Y3QgZGNzc19kZXYgKmRjc3MsIGJvb2wgY29tcG9uZW50aXplZCk7 Cit2b2lkIGRjc3Nfa21zX2RldGFjaChzdHJ1Y3QgZGNzc19rbXNfZGV2ICprbXMsIGJvb2wgY29t cG9uZW50aXplZCk7CitpbnQgZGNzc19jcnRjX2luaXQoc3RydWN0IGRjc3NfY3J0YyAqY3J0Yywg c3RydWN0IGRybV9kZXZpY2UgKmRybSk7Cit2b2lkIGRjc3NfY3J0Y19kZWluaXQoc3RydWN0IGRj c3NfY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kZXZpY2UgKmRybSk7CitzdHJ1Y3QgZGNzc19wbGFu ZSAqZGNzc19wbGFuZV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkJICAgdW5zaWdu ZWQgaW50IHBvc3NpYmxlX2NydGNzLAorCQkJCSAgIGVudW0gZHJtX3BsYW5lX3R5cGUgdHlwZSwK KwkJCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2lteC9kY3NzL2Rjc3MtcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvZGNz cy9kY3NzLXBsYW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmNiMThj M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1wbGFu ZS5jCkBAIC0wLDAgKzEsNDE4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAorLyoKKyAqIENvcHlyaWdodCAyMDE5IE5YUC4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9mcmFtZWJ1ZmZl cl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisKKyNpbmNs dWRlICJkY3NzLWRldi5oIgorI2luY2x1ZGUgImRjc3Mta21zLmgiCisKK3N0YXRpYyBjb25zdCB1 MzIgZGNzc19jb21tb25fZm9ybWF0c1tdID0geworCS8qIFJHQiAqLworCURSTV9GT1JNQVRfQVJH Qjg4ODgsCisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX0FCR1I4ODg4LAorCURS TV9GT1JNQVRfWEJHUjg4ODgsCisJRFJNX0ZPUk1BVF9SR0JBODg4OCwKKwlEUk1fRk9STUFUX1JH Qlg4ODg4LAorCURSTV9GT1JNQVRfQkdSQTg4ODgsCisJRFJNX0ZPUk1BVF9CR1JYODg4OCwKKwlE Uk1fRk9STUFUX1hSR0IyMTAxMDEwLAorCURSTV9GT1JNQVRfWEJHUjIxMDEwMTAsCisJRFJNX0ZP Uk1BVF9SR0JYMTAxMDEwMiwKKwlEUk1fRk9STUFUX0JHUlgxMDEwMTAyLAorCURSTV9GT1JNQVRf QVJHQjIxMDEwMTAsCisJRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCwKKwlEUk1fRk9STUFUX1JHQkEx MDEwMTAyLAorCURSTV9GT1JNQVRfQkdSQTEwMTAxMDIsCisKKwkvKiBZVVY0NDQgKi8KKwlEUk1f Rk9STUFUX0FZVVYsCisKKwkvKiBZVVY0MjIgKi8KKwlEUk1fRk9STUFUX1VZVlksCisJRFJNX0ZP Uk1BVF9WWVVZLAorCURSTV9GT1JNQVRfWVVZViwKKwlEUk1fRk9STUFUX1lWWVUsCisKKwkvKiBZ VVY0MjAgKi8KKwlEUk1fRk9STUFUX05WMTIsCisJRFJNX0ZPUk1BVF9OVjIxLAorfTsKKworc3Rh dGljIGNvbnN0IHU2NCBkY3NzX3ZpZGVvX2Zvcm1hdF9tb2RpZmllcnNbXSA9IHsKKwlEUk1fRk9S TUFUX01PRF9MSU5FQVIsCisJRFJNX0ZPUk1BVF9NT0RfSU5WQUxJRCwKK307CisKK3N0YXRpYyBj b25zdCB1NjQgZGNzc19ncmFwaGljc19mb3JtYXRfbW9kaWZpZXJzW10gPSB7CisJRFJNX0ZPUk1B VF9NT0RfVklWQU5URV9USUxFRCwKKwlEUk1fRk9STUFUX01PRF9WSVZBTlRFX1NVUEVSX1RJTEVE LAorCURSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwlEUk1fRk9STUFUX01PRF9JTlZBTElELAorfTsK Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNzc19wbGFuZSAqdG9fZGNzc19wbGFuZShzdHJ1Y3Qg ZHJtX3BsYW5lICpwKQoreworCXJldHVybiBjb250YWluZXJfb2YocCwgc3RydWN0IGRjc3NfcGxh bmUsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZGNzc19wbGFuZV9mYl9pc19saW5l YXIoY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJcmV0dXJuICgoZmItPmZs YWdzICYgRFJNX01PREVfRkJfTU9ESUZJRVJTKSA9PSAwKSB8fAorCSAgICAgICAoKGZiLT5mbGFn cyAmIERSTV9NT0RFX0ZCX01PRElGSUVSUykgIT0gMCAmJgorCQlmYi0+bW9kaWZpZXIgPT0gRFJN X0ZPUk1BVF9NT0RfTElORUFSKTsKK30KKworc3RhdGljIHZvaWQgZGNzc19wbGFuZV9kZXN0cm95 KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCBkY3NzX3BsYW5lICpkY3NzX3Bs YW5lID0gY29udGFpbmVyX29mKHBsYW5lLCBzdHJ1Y3QgZGNzc19wbGFuZSwKKwkJCQkJCSAgICAg YmFzZSk7CisKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7CisJa2ZyZWUoZGNzc19wbGFuZSk7 Cit9CisKK3N0YXRpYyBib29sIGRjc3NfcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJCSAgICB1MzIgZm9ybWF0LAorCQkJCQkgICAgdTY0IG1v ZGlmaWVyKQoreworCXN3aXRjaCAocGxhbmUtPnR5cGUpIHsKKwljYXNlIERSTV9QTEFORV9UWVBF X1BSSU1BUlk6CisJCXN3aXRjaCAoZm9ybWF0KSB7CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4 ODoKKwkJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQljYXNlIERSTV9GT1JNQVRfQVJHQjIx MDEwMTA6CisJCQlyZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSIHx8CisJ CQkgICAgICAgbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfVklWQU5URV9USUxFRCB8fAorCQkJ ICAgICAgIG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX1ZJVkFOVEVfU1VQRVJfVElMRUQ7CisJ CWRlZmF1bHQ6CisJCQlyZXR1cm4gbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfTElORUFSOwor CQl9CisJCWJyZWFrOworCWNhc2UgRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWToKKwkJcmV0dXJuIG1v ZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0xJTkVBUjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFs c2U7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBkY3NzX3Bs YW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRl X3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lCQk9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxh bmUsCisJLmRlc3Ryb3kJCT0gZGNzc19wbGFuZV9kZXN0cm95LAorCS5yZXNldAkJCT0gZHJtX2F0 b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBkcm1f YXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0 YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJveV9zdGF0ZSwKKwkuZm9ybWF0X21v ZF9zdXBwb3J0ZWQJPSBkY3NzX3BsYW5lX2Zvcm1hdF9tb2Rfc3VwcG9ydGVkLAorfTsKKworc3Rh dGljIGJvb2wgZGNzc19wbGFuZV9jYW5fcm90YXRlKGNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2lu Zm8gKmZvcm1hdCwKKwkJCQkgIGJvb2wgbW9kX3ByZXNlbnQsIHU2NCBtb2RpZmllciwKKwkJCQkg IHVuc2lnbmVkIGludCByb3RhdGlvbikKK3sKKwlib29sIGxpbmVhcl9mb3JtYXQgPSAhbW9kX3By ZXNlbnQgfHwKKwkJCSAgICAgKG1vZF9wcmVzZW50ICYmIG1vZGlmaWVyID09IERSTV9GT1JNQVRf TU9EX0xJTkVBUik7CisJdTMyIHN1cHBvcnRlZF9yb3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8w OworCisJaWYgKCFmb3JtYXQtPmlzX3l1diAmJiBsaW5lYXJfZm9ybWF0KQorCQlzdXBwb3J0ZWRf cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RFX1JPVEFURV8xODAgfAorCQkJ CSAgICAgRFJNX01PREVfUkVGTEVDVF9NQVNLOworCWVsc2UgaWYgKCFmb3JtYXQtPmlzX3l1diAm JgorCQkgbW9kaWZpZXIgPT0gRFJNX0ZPUk1BVF9NT0RfVklWQU5URV9USUxFRCkKKwkJc3VwcG9y dGVkX3JvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFX01BU0sgfAorCQkJCSAgICAgRFJNX01PREVf UkVGTEVDVF9NQVNLOworCWVsc2UgaWYgKGZvcm1hdC0+aXNfeXV2ICYmIGxpbmVhcl9mb3JtYXQg JiYKKwkJIChmb3JtYXQtPmZvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIgfHwKKwkJICBmb3JtYXQt PmZvcm1hdCA9PSBEUk1fRk9STUFUX05WMjEpKQorCQlzdXBwb3J0ZWRfcm90YXRpb24gPSBEUk1f TU9ERV9ST1RBVEVfMCB8IERSTV9NT0RFX1JPVEFURV8xODAgfAorCQkJCSAgICAgRFJNX01PREVf UkVGTEVDVF9NQVNLOworCisJcmV0dXJuICEhKHJvdGF0aW9uICYgc3VwcG9ydGVkX3JvdGF0aW9u KTsKK30KKworc3RhdGljIGJvb2wgZGNzc19wbGFuZV9pc19zb3VyY2Vfc2l6ZV9hbGxvd2VkKHUx NiBzcmNfdywgdTE2IHNyY19oLCB1MzIgcGl4X2ZtdCkKK3sKKwlpZiAoc3JjX3cgPCA2NCAmJgor CSAgICAocGl4X2ZtdCA9PSBEUk1fRk9STUFUX05WMTIgfHwgcGl4X2ZtdCA9PSBEUk1fRk9STUFU X05WMjEpKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZSBpZiAoc3JjX3cgPCAzMiAmJgorCQkgKHBp eF9mbXQgPT0gRFJNX0ZPUk1BVF9VWVZZIHx8IHBpeF9mbXQgPT0gRFJNX0ZPUk1BVF9WWVVZIHx8 CisJCSAgcGl4X2ZtdCA9PSBEUk1fRk9STUFUX1lVWVYgfHwgcGl4X2ZtdCA9PSBEUk1fRk9STUFU X1lWWVUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gc3JjX3cgPj0gMTYgJiYgc3JjX2gg Pj0gODsKK30KKworc3RhdGljIGludCBkY3NzX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKKwkJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sK KwlzdHJ1Y3QgZGNzc19wbGFuZSAqZGNzc19wbGFuZSA9IHRvX2Rjc3NfcGxhbmUocGxhbmUpOwor CXN0cnVjdCBkY3NzX2RldiAqZGNzcyA9IHBsYW5lLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOworCWJvb2wgaXNfcHJpbWFyeV9wbGFu ZSA9IHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlk7CisJc3RydWN0IGRybV9n ZW1fY21hX29iamVjdCAqY21hX29iajsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3Rh dGU7CisJaW50IGhkaXNwbGF5LCB2ZGlzcGxheTsKKwlpbnQgbWluLCBtYXg7CisJaW50IHJldDsK KworCWlmICghZmIgfHwgIXN0YXRlLT5jcnRjKQorCQlyZXR1cm4gMDsKKworCWNtYV9vYmogPSBk cm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAwKTsKKwlXQVJOX09OKCFjbWFfb2JqKTsKKworCWNy dGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9leGlzdGluZ19jcnRjX3N0YXRlKHN0YXRlLT5zdGF0 ZSwKKwkJCQkJCQlzdGF0ZS0+Y3J0Yyk7CisKKwloZGlzcGxheSA9IGNydGNfc3RhdGUtPmFkanVz dGVkX21vZGUuaGRpc3BsYXk7CisJdmRpc3BsYXkgPSBjcnRjX3N0YXRlLT5hZGp1c3RlZF9tb2Rl LnZkaXNwbGF5OworCisJaWYgKCFkY3NzX3BsYW5lX2lzX3NvdXJjZV9zaXplX2FsbG93ZWQoc3Rh dGUtPnNyY193ID4+IDE2LAorCQkJCQkgICAgICAgc3RhdGUtPnNyY19oID4+IDE2LAorCQkJCQkg ICAgICAgZmItPmZvcm1hdC0+Zm9ybWF0KSkgeworCQlEUk1fREVCVUdfS01TKCJTb3VyY2UgcGxh bmUgc2l6ZSBpcyBub3QgYWxsb3dlZCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlk Y3NzX3NjYWxlcl9nZXRfbWluX21heF9yYXRpb3MoZGNzcy0+c2NhbGVyLCBkY3NzX3BsYW5lLT5j aF9udW0sCisJCQkJICAgICAgICZtaW4sICZtYXgpOworCisJcmV0ID0gZHJtX2F0b21pY19oZWxw ZXJfY2hlY2tfcGxhbmVfc3RhdGUoc3RhdGUsIGNydGNfc3RhdGUsCisJCQkJCQkgIG1pbiwgbWF4 LCAhaXNfcHJpbWFyeV9wbGFuZSwKKwkJCQkJCSAgZmFsc2UpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlpZiAoIXN0YXRlLT52aXNpYmxlKQorCQlyZXR1cm4gMDsKKworCWlmICghZGNz c19wbGFuZV9jYW5fcm90YXRlKGZiLT5mb3JtYXQsCisJCQkJICAgISEoZmItPmZsYWdzICYgRFJN X01PREVfRkJfTU9ESUZJRVJTKSwKKwkJCQkgICBmYi0+bW9kaWZpZXIsCisJCQkJICAgc3RhdGUt PnJvdGF0aW9uKSkgeworCQlEUk1fREVCVUdfS01TKCJyZXF1ZXN0ZWQgcm90YXRpb24gaXMgbm90 IGFsbG93ZWQhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChzdGF0ZS0+Y3J0 Y194IDwgMCB8fCBzdGF0ZS0+Y3J0Y195IDwgMCB8fAorCSAgICAgc3RhdGUtPmNydGNfeCArIHN0 YXRlLT5jcnRjX3cgPiBoZGlzcGxheSB8fAorCSAgICAgc3RhdGUtPmNydGNfeSArIHN0YXRlLT5j cnRjX2ggPiB2ZGlzcGxheSkgJiYKKwkgICAgIWRjc3NfcGxhbmVfZmJfaXNfbGluZWFyKGZiKSkg eworCQlEUk1fREVCVUdfS01TKCJyZXF1ZXN0ZWQgY3JvcHBpbmcgb3BlcmF0aW9uIGlzIG5vdCBh bGxvd2VkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoZmItPmZsYWdzICYg RFJNX01PREVfRkJfTU9ESUZJRVJTKSAmJgorCSAgICAhcGxhbmUtPmZ1bmNzLT5mb3JtYXRfbW9k X3N1cHBvcnRlZChwbGFuZSwKKwkJCQlmYi0+Zm9ybWF0LT5mb3JtYXQsCisJCQkJZmItPm1vZGlm aWVyKSkgeworCQlEUk1fREVCVUdfS01TKCJJbnZhbGlkIG1vZGlmaWVyOiAlbGx4IiwgZmItPm1v ZGlmaWVyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIGRjc3NfcGxhbmVfYXRvbWljX3NldF9iYXNlKHN0cnVjdCBkY3NzX3BsYW5lICpkY3Nz X3BsYW5lKQoreworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJmRjc3NfcGxhbmUtPmJhc2U7 CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+c3RhdGU7CisJc3RydWN0 IGRjc3NfZGV2ICpkY3NzID0gcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5m byAqZm9ybWF0ID0gZmItPmZvcm1hdDsKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFf b2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7CisJdW5zaWduZWQgbG9uZyBwMV9i YSA9IDAsIHAyX2JhID0gMDsKKworCWlmICghZm9ybWF0LT5pc195dXYgfHwKKwkgICAgZm9ybWF0 LT5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyIHx8CisJICAgIGZvcm1hdC0+Zm9ybWF0ID09IERS TV9GT1JNQVRfTlYyMSkKKwkJcDFfYmEgPSBjbWFfb2JqLT5wYWRkciArIGZiLT5vZmZzZXRzWzBd ICsKKwkJCWZiLT5waXRjaGVzWzBdICogKHN0YXRlLT5zcmMueTEgPj4gMTYpICsKKwkJCWZvcm1h dC0+Y2hhcl9wZXJfYmxvY2tbMF0gKiAoc3RhdGUtPnNyYy54MSA+PiAxNik7CisJZWxzZSBpZiAo Zm9ybWF0LT5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9VWVZZIHx8CisJCSBmb3JtYXQtPmZvcm1hdCA9 PSBEUk1fRk9STUFUX1ZZVVkgfHwKKwkJIGZvcm1hdC0+Zm9ybWF0ID09IERSTV9GT1JNQVRfWVVZ ViB8fAorCQkgZm9ybWF0LT5mb3JtYXQgPT0gRFJNX0ZPUk1BVF9ZVllVKQorCQlwMV9iYSA9IGNt YV9vYmotPnBhZGRyICsgZmItPm9mZnNldHNbMF0gKworCQkJZmItPnBpdGNoZXNbMF0gKiAoc3Rh dGUtPnNyYy55MSA+PiAxNikgKworCQkJMiAqIGZvcm1hdC0+Y2hhcl9wZXJfYmxvY2tbMF0gKiAo c3RhdGUtPnNyYy54MSA+PiAxNyk7CisKKwlpZiAoZm9ybWF0LT5mb3JtYXQgPT0gRFJNX0ZPUk1B VF9OVjEyIHx8CisJICAgIGZvcm1hdC0+Zm9ybWF0ID09IERSTV9GT1JNQVRfTlYyMSkKKwkJcDJf YmEgPSBjbWFfb2JqLT5wYWRkciArIGZiLT5vZmZzZXRzWzFdICsKKwkJCSgoKGZiLT5waXRjaGVz WzFdID4+IDEpICogKHN0YXRlLT5zcmMueTEgPj4gMTcpICsKKwkJCShzdGF0ZS0+c3JjLngxID4+ IDE3KSkgPDwgMSk7CisKKwlkY3NzX2Rwcl9hZGRyX3NldChkY3NzLT5kcHIsIGRjc3NfcGxhbmUt PmNoX251bSwgcDFfYmEsIHAyX2JhLAorCQkJICBmYi0+cGl0Y2hlc1swXSk7Cit9CisKK3N0YXRp YyBib29sIGRjc3NfcGxhbmVfbmVlZHNfc2V0dXAoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh dGUsCisJCQkJICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiID0gc3RhdGUtPmZiOworCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKm9sZF9mYiA9IG9sZF9zdGF0ZS0+ZmI7CisKKwlyZXR1cm4gc3RhdGUtPmNydGNfeCAhPSBv bGRfc3RhdGUtPmNydGNfeCB8fAorCSAgICAgICBzdGF0ZS0+Y3J0Y195ICE9IG9sZF9zdGF0ZS0+ Y3J0Y195IHx8CisJICAgICAgIHN0YXRlLT5jcnRjX3cgIT0gb2xkX3N0YXRlLT5jcnRjX3cgfHwK KwkgICAgICAgc3RhdGUtPmNydGNfaCAhPSBvbGRfc3RhdGUtPmNydGNfaCB8fAorCSAgICAgICBz dGF0ZS0+c3JjX3ggICE9IG9sZF9zdGF0ZS0+c3JjX3ggIHx8CisJICAgICAgIHN0YXRlLT5zcmNf eSAgIT0gb2xkX3N0YXRlLT5zcmNfeSAgfHwKKwkgICAgICAgc3RhdGUtPnNyY193ICAhPSBvbGRf c3RhdGUtPnNyY193ICB8fAorCSAgICAgICBzdGF0ZS0+c3JjX2ggICE9IG9sZF9zdGF0ZS0+c3Jj X2ggIHx8CisJICAgICAgIGZiLT5mb3JtYXQtPmZvcm1hdCAhPSBvbGRfZmItPmZvcm1hdC0+Zm9y bWF0IHx8CisJICAgICAgIGZiLT5tb2RpZmllciAgIT0gb2xkX2ZiLT5tb2RpZmllciB8fAorCSAg ICAgICBzdGF0ZS0+cm90YXRpb24gIT0gb2xkX3N0YXRlLT5yb3RhdGlvbjsKK30KKworc3RhdGlj IHZvaWQgZGNzc19wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAor CQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKnN0YXRlID0gcGxhbmUtPnN0YXRlOworCXN0cnVjdCBkY3NzX3BsYW5l ICpkY3NzX3BsYW5lID0gdG9fZGNzc19wbGFuZShwbGFuZSk7CisJc3RydWN0IGRjc3NfZGV2ICpk Y3NzID0gcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIgPSBzdGF0ZS0+ZmI7CisJdTMyIHBpeGVsX2Zvcm1hdDsKKwlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKmNydGNfc3RhdGU7CisJYm9vbCBtb2RpZmllcnNfcHJlc2VudDsKKwl1MzIgc3JjX3csIHNy Y19oLCBkc3RfdywgZHN0X2g7CisJc3RydWN0IGRybV9yZWN0IHNyYywgZHN0OworCWJvb2wgZW5h YmxlID0gdHJ1ZTsKKworCWlmICghZmIgfHwgIXN0YXRlLT5jcnRjIHx8ICFzdGF0ZS0+dmlzaWJs ZSkKKwkJcmV0dXJuOworCisJcGl4ZWxfZm9ybWF0ID0gc3RhdGUtPmZiLT5mb3JtYXQtPmZvcm1h dDsKKwljcnRjX3N0YXRlID0gc3RhdGUtPmNydGMtPnN0YXRlOworCW1vZGlmaWVyc19wcmVzZW50 ID0gISEoZmItPmZsYWdzICYgRFJNX01PREVfRkJfTU9ESUZJRVJTKTsKKworCWlmIChvbGRfc3Rh dGUtPmZiICYmICFkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSAmJgor CSAgICAhZGNzc19wbGFuZV9uZWVkc19zZXR1cChzdGF0ZSwgb2xkX3N0YXRlKSkgeworCQlkY3Nz X3BsYW5lX2F0b21pY19zZXRfYmFzZShkY3NzX3BsYW5lKTsKKwkJcmV0dXJuOworCX0KKworCXNy YyA9IHBsYW5lLT5zdGF0ZS0+c3JjOworCWRzdCA9IHBsYW5lLT5zdGF0ZS0+ZHN0OworCisJLyoK KwkgKiBUaGUgd2lkdGggYW5kIGhlaWdodCBhZnRlciBjbGlwcGluZy4KKwkgKi8KKwlzcmNfdyA9 IGRybV9yZWN0X3dpZHRoKCZzcmMpID4+IDE2OworCXNyY19oID0gZHJtX3JlY3RfaGVpZ2h0KCZz cmMpID4+IDE2OworCWRzdF93ID0gZHJtX3JlY3Rfd2lkdGgoJmRzdCk7CisJZHN0X2ggPSBkcm1f cmVjdF9oZWlnaHQoJmRzdCk7CisKKwlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVf T1ZFUkxBWSAmJgorCSAgICBtb2RpZmllcnNfcHJlc2VudCAmJiBmYi0+bW9kaWZpZXIgPT0gRFJN X0ZPUk1BVF9NT0RfTElORUFSKQorCQltb2RpZmllcnNfcHJlc2VudCA9IGZhbHNlOworCisJZGNz c19kcHJfZm9ybWF0X3NldChkY3NzLT5kcHIsIGRjc3NfcGxhbmUtPmNoX251bSwgc3RhdGUtPmZi LT5mb3JtYXQsCisJCQkgICAgbW9kaWZpZXJzX3ByZXNlbnQgPyBmYi0+bW9kaWZpZXIgOgorCQkJ CQkJRFJNX0ZPUk1BVF9NT0RfTElORUFSKTsKKwlkY3NzX2Rwcl9zZXRfcmVzKGRjc3MtPmRwciwg ZGNzc19wbGFuZS0+Y2hfbnVtLCBzcmNfdywgc3JjX2gpOworCWRjc3NfZHByX3NldF9yb3RhdGlv bihkY3NzLT5kcHIsIGRjc3NfcGxhbmUtPmNoX251bSwKKwkJCSAgICAgIHN0YXRlLT5yb3RhdGlv bik7CisKKwlkY3NzX3BsYW5lX2F0b21pY19zZXRfYmFzZShkY3NzX3BsYW5lKTsKKworCWRjc3Nf c2NhbGVyX3NldHVwKGRjc3MtPnNjYWxlciwgZGNzc19wbGFuZS0+Y2hfbnVtLAorCQkJICBzdGF0 ZS0+ZmItPmZvcm1hdCwgc3JjX3csIHNyY19oLAorCQkJICBkc3RfdywgZHN0X2gsCisJCQkgIGRy bV9tb2RlX3ZyZWZyZXNoKCZjcnRjX3N0YXRlLT5tb2RlKSk7CisKKwlkY3NzX2R0Z19wbGFuZV9w b3Nfc2V0KGRjc3MtPmR0ZywgZGNzc19wbGFuZS0+Y2hfbnVtLAorCQkJICAgICAgIGRzdC54MSwg ZHN0LnkxLCBkc3RfdywgZHN0X2gpOworCWRjc3NfZHRnX3BsYW5lX2FscGhhX3NldChkY3NzLT5k dGcsIGRjc3NfcGxhbmUtPmNoX251bSwKKwkJCQkgZmItPmZvcm1hdCwgc3RhdGUtPmFscGhhID4+ IDgpOworCisJaWYgKCFkY3NzX3BsYW5lLT5jaF9udW0gJiYgKHN0YXRlLT5hbHBoYSA+PiA4KSA9 PSAwKQorCQllbmFibGUgPSBmYWxzZTsKKworCWRjc3NfZHByX2VuYWJsZShkY3NzLT5kcHIsIGRj c3NfcGxhbmUtPmNoX251bSwgZW5hYmxlKTsKKwlkY3NzX3NjYWxlcl9jaF9lbmFibGUoZGNzcy0+ c2NhbGVyLCBkY3NzX3BsYW5lLT5jaF9udW0sIGVuYWJsZSk7CisKKwlpZiAoIWVuYWJsZSkKKwkJ ZGNzc19kdGdfcGxhbmVfcG9zX3NldChkY3NzLT5kdGcsIGRjc3NfcGxhbmUtPmNoX251bSwKKwkJ CQkgICAgICAgMCwgMCwgMCwgMCk7CisKKwlkY3NzX2R0Z19jaF9lbmFibGUoZGNzcy0+ZHRnLCBk Y3NzX3BsYW5lLT5jaF9udW0sIGVuYWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRjc3NfcGxhbmVf YXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0cnVjdCBkY3NzX3BsYW5lICpkY3Nz X3BsYW5lID0gdG9fZGNzc19wbGFuZShwbGFuZSk7CisJc3RydWN0IGRjc3NfZGV2ICpkY3NzID0g cGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7CisKKwlkY3NzX2Rwcl9lbmFibGUoZGNzcy0+ZHByLCBk Y3NzX3BsYW5lLT5jaF9udW0sIGZhbHNlKTsKKwlkY3NzX3NjYWxlcl9jaF9lbmFibGUoZGNzcy0+ c2NhbGVyLCBkY3NzX3BsYW5lLT5jaF9udW0sIGZhbHNlKTsKKwlkY3NzX2R0Z19wbGFuZV9wb3Nf c2V0KGRjc3MtPmR0ZywgZGNzc19wbGFuZS0+Y2hfbnVtLCAwLCAwLCAwLCAwKTsKKwlkY3NzX2R0 Z19jaF9lbmFibGUoZGNzcy0+ZHRnLCBkY3NzX3BsYW5lLT5jaF9udW0sIGZhbHNlKTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIGRjc3NfcGxhbmVfaGVs cGVyX2Z1bmNzID0geworCS5wcmVwYXJlX2ZiID0gZHJtX2dlbV9mYl9wcmVwYXJlX2ZiLAorCS5h dG9taWNfY2hlY2sgPSBkY3NzX3BsYW5lX2F0b21pY19jaGVjaywKKwkuYXRvbWljX3VwZGF0ZSA9 IGRjc3NfcGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBkY3NzX3BsYW5l X2F0b21pY19kaXNhYmxlLAorfTsKKworc3RydWN0IGRjc3NfcGxhbmUgKmRjc3NfcGxhbmVfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJCSAgIHVuc2lnbmVkIGludCBwb3NzaWJsZV9j cnRjcywKKwkJCQkgICBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGUsCisJCQkJICAgdW5zaWduZWQg aW50IHpwb3MpCit7CisJc3RydWN0IGRjc3NfcGxhbmUgKmRjc3NfcGxhbmU7CisJY29uc3QgdTY0 ICpmb3JtYXRfbW9kaWZpZXJzID0gZGNzc192aWRlb19mb3JtYXRfbW9kaWZpZXJzOworCWludCBy ZXQ7CisKKwlpZiAoenBvcyA+IDIpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJZGNz c19wbGFuZSA9IGt6YWxsb2Moc2l6ZW9mKCpkY3NzX3BsYW5lKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFkY3NzX3BsYW5lKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHBsYW5lXG4i KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJaWYgKHR5cGUgPT0gRFJNX1BM QU5FX1RZUEVfUFJJTUFSWSkKKwkJZm9ybWF0X21vZGlmaWVycyA9IGRjc3NfZ3JhcGhpY3NfZm9y bWF0X21vZGlmaWVyczsKKworCXJldCA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkcm0sICZk Y3NzX3BsYW5lLT5iYXNlLCBwb3NzaWJsZV9jcnRjcywKKwkJCQkgICAgICAgJmRjc3NfcGxhbmVf ZnVuY3MsIGRjc3NfY29tbW9uX2Zvcm1hdHMsCisJCQkJICAgICAgIEFSUkFZX1NJWkUoZGNzc19j b21tb25fZm9ybWF0cyksCisJCQkJICAgICAgIGZvcm1hdF9tb2RpZmllcnMsIHR5cGUsIE5VTEwp OworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxu Iik7CisJCWtmcmVlKGRjc3NfcGxhbmUpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKwor CWRybV9wbGFuZV9oZWxwZXJfYWRkKCZkY3NzX3BsYW5lLT5iYXNlLCAmZGNzc19wbGFuZV9oZWxw ZXJfZnVuY3MpOworCisJcmV0ID0gZHJtX3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJsZV9wcm9w ZXJ0eSgmZGNzc19wbGFuZS0+YmFzZSwgenBvcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9Q VFIocmV0KTsKKworCWRybV9wbGFuZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoJmRjc3NfcGxh bmUtPmJhc2UsCisJCQkJCSAgIERSTV9NT0RFX1JPVEFURV8wLAorCQkJCQkgICBEUk1fTU9ERV9S T1RBVEVfMCAgIHwKKwkJCQkJICAgRFJNX01PREVfUk9UQVRFXzkwICB8CisJCQkJCSAgIERSTV9N T0RFX1JPVEFURV8xODAgfAorCQkJCQkgICBEUk1fTU9ERV9ST1RBVEVfMjcwIHwKKwkJCQkJICAg RFJNX01PREVfUkVGTEVDVF9YICB8CisJCQkJCSAgIERSTV9NT0RFX1JFRkxFQ1RfWSk7CisKKwlk Y3NzX3BsYW5lLT5jaF9udW0gPSB6cG9zOworCisJcmV0dXJuIGRjc3NfcGxhbmU7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1zY2FsZXIuYyBiL2RyaXZlcnMv Z3B1L2RybS9pbXgvZGNzcy9kY3NzLXNjYWxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi41NmZjODcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lt eC9kY3NzL2Rjc3Mtc2NhbGVyLmMKQEAgLTAsMCArMSw4MjYgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IDIwMTkgTlhQLgorICoKKyAqIFNj YWxpbmcgYWxnb3JpdGhtcyB3ZXJlIGNvbnRyaWJ1dGVkIGJ5IER6dW5nIEhvYW5nIDxkenVuZy5o b2FuZ0BueHAuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1 ZGUgImRjc3MtZGV2LmgiCisKKyNkZWZpbmUgRENTU19TQ0FMRVJfQ1RSTAkJCTB4MDAKKyNkZWZp bmUgICBTQ0FMRVJfRU4JCQkJQklUKDApCisjZGVmaW5lICAgUkVQRUFUX0VOCQkJCUJJVCg0KQor I2RlZmluZSAgIFNDQUxFMk1FTV9FTgkJCQlCSVQoOCkKKyNkZWZpbmUgICBNRU0yT0ZJRk9fRU4J CQkJQklUKDEyKQorI2RlZmluZSBEQ1NTX1NDQUxFUl9PRklGT19DVFJMCQkJMHgwNAorI2RlZmlu ZSAgIE9GSUZPX0xPV19USFJFU19QT1MJCQkwCisjZGVmaW5lICAgT0ZJRk9fTE9XX1RIUkVTX01B U0sJCQlHRU5NQVNLKDksIDApCisjZGVmaW5lICAgT0ZJRk9fSElHSF9USFJFU19QT1MJCQkxNgor I2RlZmluZSAgIE9GSUZPX0hJR0hfVEhSRVNfTUFTSwkJCUdFTk1BU0soMjUsIDE2KQorI2RlZmlu ZSAgIFVOREVSUlVOX0RFVEVDVF9DTFIJCQlCSVQoMjYpCisjZGVmaW5lICAgTE9XX1RIUkVTX0RF VEVDVF9DTFIJCQlCSVQoMjcpCisjZGVmaW5lICAgSElHSF9USFJFU19ERVRFQ1RfQ0xSCQkJQklU KDI4KQorI2RlZmluZSAgIFVOREVSUlVOX0RFVEVDVF9FTgkJCUJJVCgyOSkKKyNkZWZpbmUgICBM T1dfVEhSRVNfREVURUNUX0VOCQkJQklUKDMwKQorI2RlZmluZSAgIEhJR0hfVEhSRVNfREVURUNU X0VOCQkJQklUKDMxKQorI2RlZmluZSBEQ1NTX1NDQUxFUl9TREFUQV9DVFJMCQkJMHgwOAorI2Rl ZmluZSAgIFlVVl9FTgkJCQlCSVQoMCkKKyNkZWZpbmUgICBSVFJBTV84TElORVMJCQkJQklUKDEp CisjZGVmaW5lICAgWV9VVl9CWVRFX1NXQVAJCQlCSVQoNCkKKyNkZWZpbmUgICBBMlIxMEcxMEIx MF9GT1JNQVRfUE9TCQk4CisjZGVmaW5lICAgQTJSMTBHMTBCMTBfRk9STUFUX01BU0sJCUdFTk1B U0soMTEsIDgpCisjZGVmaW5lIERDU1NfU0NBTEVSX0JJVF9ERVBUSAkJCTB4MEMKKyNkZWZpbmUg ICBMVU1fQklUX0RFUFRIX1BPUwkJCTAKKyNkZWZpbmUgICBMVU1fQklUX0RFUFRIX01BU0sJCQlH RU5NQVNLKDEsIDApCisjZGVmaW5lICAgQ0hSX0JJVF9ERVBUSF9QT1MJCQk0CisjZGVmaW5lICAg Q0hSX0JJVF9ERVBUSF9NQVNLCQkJR0VOTUFTSyg1LCA0KQorI2RlZmluZSBEQ1NTX1NDQUxFUl9T UkNfRk9STUFUCQkJMHgxMAorI2RlZmluZSBEQ1NTX1NDQUxFUl9EU1RfRk9STUFUCQkJMHgxNAor I2RlZmluZSAgIEZPUk1BVF9NQVNLCQkJCUdFTk1BU0soMSwgMCkKKyNkZWZpbmUgRENTU19TQ0FM RVJfU1JDX0xVTV9SRVMJCQkweDE4CisjZGVmaW5lIERDU1NfU0NBTEVSX1NSQ19DSFJfUkVTCQkJ MHgxQworI2RlZmluZSBEQ1NTX1NDQUxFUl9EU1RfTFVNX1JFUwkJCTB4MjAKKyNkZWZpbmUgRENT U19TQ0FMRVJfRFNUX0NIUl9SRVMJCQkweDI0CisjZGVmaW5lICAgV0lEVEhfUE9TCQkJCTAKKyNk ZWZpbmUgICBXSURUSF9NQVNLCQkJCUdFTk1BU0soMTEsIDApCisjZGVmaW5lICAgSEVJR0hUX1BP UwkJCQkxNgorI2RlZmluZSAgIEhFSUdIVF9NQVNLCQkJCUdFTk1BU0soMjcsIDE2KQorI2RlZmlu ZSBEQ1NTX1NDQUxFUl9WX0xVTV9TVEFSVAkJCTB4NDgKKyNkZWZpbmUgICBWX1NUQVJUX01BU0sJ CQkJR0VOTUFTSygxNSwgMCkKKyNkZWZpbmUgRENTU19TQ0FMRVJfVl9MVU1fSU5DCQkJMHg0Qwor I2RlZmluZSAgIFZfSU5DX01BU0sJCQkJR0VOTUFTSygxNSwgMCkKKyNkZWZpbmUgRENTU19TQ0FM RVJfSF9MVU1fU1RBUlQJCQkweDUwCisjZGVmaW5lICAgSF9TVEFSVF9NQVNLCQkJCUdFTk1BU0so MTgsIDApCisjZGVmaW5lIERDU1NfU0NBTEVSX0hfTFVNX0lOQwkJCTB4NTQKKyNkZWZpbmUgICBI X0lOQ19NQVNLCQkJCUdFTk1BU0soMTUsIDApCisjZGVmaW5lIERDU1NfU0NBTEVSX1ZfQ0hSX1NU QVJUCQkJMHg1OAorI2RlZmluZSBEQ1NTX1NDQUxFUl9WX0NIUl9JTkMJCQkweDVDCisjZGVmaW5l IERDU1NfU0NBTEVSX0hfQ0hSX1NUQVJUCQkJMHg2MAorI2RlZmluZSBEQ1NTX1NDQUxFUl9IX0NI Ul9JTkMJCQkweDY0CisjZGVmaW5lIERDU1NfU0NBTEVSX0NPRUZfVkxVTQkJCTB4ODAKKyNkZWZp bmUgRENTU19TQ0FMRVJfQ09FRl9ITFVNCQkJMHgxNDAKKyNkZWZpbmUgRENTU19TQ0FMRVJfQ09F Rl9WQ0hSCQkJMHgyMDAKKyNkZWZpbmUgRENTU19TQ0FMRVJfQ09FRl9IQ0hSCQkJMHgzMDAKKwor c3RydWN0IGRjc3Nfc2NhbGVyX2NoIHsKKwl2b2lkIF9faW9tZW0gKmJhc2VfcmVnOworCXUzMiBi YXNlX29mczsKKwlzdHJ1Y3QgZGNzc19zY2FsZXIgKnNjbDsKKworCXUzMiBzZGF0YV9jdHJsOwor CXUzMiBzY2FsZXJfY3RybDsKKworCWJvb2wgc2NhbGVyX2N0cmxfY2hnZDsKKworCXUzMiBjX3Zz dGFydDsKKwl1MzIgY19oc3RhcnQ7Cit9OworCitzdHJ1Y3QgZGNzc19zY2FsZXIgeworCXN0cnVj dCBkZXZpY2UgKmRldjsKKworCXN0cnVjdCBkY3NzX2N0eGxkICpjdHhsZDsKKwl1MzIgY3R4X2lk OworCisJc3RydWN0IGRjc3Nfc2NhbGVyX2NoIGNoWzNdOworfTsKKworLyogc2NhbGVyIGNvZWZm aWNpZW50cyBnZW5lcmF0b3IgKi8KKyNkZWZpbmUgUFNDX0ZSQUNfQklUUyAzMAorI2RlZmluZSBQ U0NfRlJBQ19TQ0FMRSBCSVQoUFNDX0ZSQUNfQklUUykKKyNkZWZpbmUgUFNDX0JJVFNfRk9SX1BI QVNFIDQKKyNkZWZpbmUgUFNDX05VTV9QSEFTRVMgMTYKKyNkZWZpbmUgUFNDX1NUT1JFRF9QSEFT RVMgKFBTQ19OVU1fUEhBU0VTIC8gMiArIDEpCisjZGVmaW5lIFBTQ19OVU1fVEFQUyA3CisjZGVm aW5lIFBTQ19OVU1fVEFQU19SR0JBIDUKKyNkZWZpbmUgUFNDX0NPRUZGX1BSRUNJU0lPTiAxMAor I2RlZmluZSBQU0NfUEhBU0VfRlJBQ1RJT05fQklUUyAxMworI2RlZmluZSBQU0NfUEhBU0VfTUFT SyAoUFNDX05VTV9QSEFTRVMgLSAxKQorI2RlZmluZSBQU0NfUV9GUkFDVElPTiAxOQorI2RlZmlu ZSBQU0NfUV9ST1VORF9PRkZTRVQgKDEgPDwgKFBTQ19RX0ZSQUNUSU9OIC0gMSkpCisKKy8qKgor ICogbXVsdF9xKCkgLSBQZXJmb3JtcyBmaXhlZC1wb2ludCBtdWx0aXBsaWNhdGlvbi4KKyAqIEBB OiBtdWx0aXBsaWVyCisgKiBAQjogbXVsdGlwbGljYW5kCisgKi8KK3N0YXRpYyBpbnQgbXVsdF9x KGludCBBLCBpbnQgQikKK3sKKwlpbnQgcmVzdWx0OworCXM2NCB0ZW1wOworCisJdGVtcCA9IChp bnQ2NF90KUEgKiAoaW50NjRfdClCOworCXRlbXAgKz0gUFNDX1FfUk9VTkRfT0ZGU0VUOworCXJl c3VsdCA9IChpbnQpKHRlbXAgPj4gUFNDX1FfRlJBQ1RJT04pOworCXJldHVybiByZXN1bHQ7Cit9 CisKKy8qKgorICogZGl2X3EoKSAtIFBlcmZvcm1zIGZpeGVkLXBvaW50IGRpdmlzaW9uLgorICog QEE6IGRpdmlkZW5kCisgKiBAQjogZGl2aXNvcgorICovCitzdGF0aWMgaW50IGRpdl9xKGludCBB LCBpbnQgQikKK3sKKwlpbnQgcmVzdWx0OworCXM2NCB0ZW1wOworCisJdGVtcCA9IChpbnQ2NF90 KUEgPDwgUFNDX1FfRlJBQ1RJT047CisJaWYgKCh0ZW1wID49IDAgJiYgQiA+PSAwKSB8fCAodGVt cCA8IDAgJiYgQiA8IDApKQorCQl0ZW1wICs9IEIgLyAyOworCWVsc2UKKwkJdGVtcCAtPSBCIC8g MjsKKworCXJlc3VsdCA9IChpbnQpKHRlbXAgLyBCKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisv KioKKyAqIGV4cF9hcHByb3hfcSgpIC0gQ29tcHV0ZSBhcHByb3hpbWF0aW9uIHRvIGV4cCh4KSBm dW5jdGlvbiB1c2luZyBUYXlsb3IKKyAqCQkgICAgc2VyaWVzLgorICogQHg6IGZpeGVkLXBvaW50 IGFyZ3VtZW50IG9mIGV4cCBmdW5jdGlvbgorICovCitzdGF0aWMgaW50IGV4cF9hcHByb3hfcShp bnQgeCkKK3sKKwlpbnQgc3VtID0gMSA8PCBQU0NfUV9GUkFDVElPTjsKKwlpbnQgdGVybSA9IDEg PDwgUFNDX1FfRlJBQ1RJT047CisKKwl0ZXJtID0gbXVsdF9xKHRlcm0sIGRpdl9xKHgsIDEgPDwg UFNDX1FfRlJBQ1RJT04pKTsKKwlzdW0gKz0gdGVybTsKKwl0ZXJtID0gbXVsdF9xKHRlcm0sIGRp dl9xKHgsIDIgPDwgUFNDX1FfRlJBQ1RJT04pKTsKKwlzdW0gKz0gdGVybTsKKwl0ZXJtID0gbXVs dF9xKHRlcm0sIGRpdl9xKHgsIDMgPDwgUFNDX1FfRlJBQ1RJT04pKTsKKwlzdW0gKz0gdGVybTsK Kwl0ZXJtID0gbXVsdF9xKHRlcm0sIGRpdl9xKHgsIDQgPDwgUFNDX1FfRlJBQ1RJT04pKTsKKwlz dW0gKz0gdGVybTsKKworCXJldHVybiBzdW07Cit9CisKKy8qKgorICogZGNzc19zY2FsZXJfZ2F1 c3NpYW5fZmlsdGVyKCkgLSBHZW5lcmF0ZSBnYXVzc2lhbiBwcm90b3R5cGUgZmlsdGVyLgorICog QGZjX3E6IGZpeGVkLXBvaW50IGN1dG9mZiBmcmVxdWVuY3kgbm9ybWFsaXplZCB0byByYW5nZSBb MCwgMV0KKyAqIEB1c2VfNV90YXBzOiBpbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgNSB0YXBzIG9y IDcgdGFwcworICogQGNvZWY6IG91dHB1dCBmaWx0ZXIgY29lZmZpY2llbnRzCisgKi8KK3N0YXRp YyB2b2lkIGRjc3Nfc2NhbGVyX2dhdXNzaWFuX2ZpbHRlcihpbnQgZmNfcSwgYm9vbCB1c2VfNV90 YXBzLAorCQkJCQlib29sIHBoYXNlMF9pZGVudGl0eSwKKwkJCQkJaW50IGNvZWZbXVtQU0NfTlVN X1RBUFNdKQoreworCWludCBzaWdtYV9xLCBnMF9xLCBnMV9xLCBnMl9xOworCWludCB0YXBfY250 MSwgdGFwX2NudDIsIHRhcF9pZHgsIHBoYXNlX2NudDsKKwlpbnQgbWlkOworCWludCBwaGFzZTsK KwlpbnQgaTsKKwlpbnQgdGFwczsKKworCWlmICh1c2VfNV90YXBzKQorCQlmb3IgKHBoYXNlID0g MDsgcGhhc2UgPCBQU0NfU1RPUkVEX1BIQVNFUzsgcGhhc2UrKykgeworCQkJY29lZltwaGFzZV1b MF0gPSAwOworCQkJY29lZltwaGFzZV1bUFNDX05VTV9UQVBTIC0gMV0gPSAwOworCQl9CisKKwkv KiBzZWVkIGNvZWZmaWNpZW50IHNjYW5uZXIgKi8KKwl0YXBzID0gdXNlXzVfdGFwcyA/IFBTQ19O VU1fVEFQU19SR0JBIDogUFNDX05VTV9UQVBTOworCW1pZCA9IChQU0NfTlVNX1BIQVNFUyAqIHRh cHMpIC8gMiAtIDE7CisJcGhhc2VfY250ID0gKFBTQ19OVU1fUEhBU0VTICogKFBTQ19OVU1fVEFQ UyArIDEpKSAvIDI7CisJdGFwX2NudDEgPSAoUFNDX05VTV9QSEFTRVMgKiBQU0NfTlVNX1RBUFMp IC8gMjsKKwl0YXBfY250MiA9IChQU0NfTlVNX1BIQVNFUyAqIFBTQ19OVU1fVEFQUykgLyAyOwor CisJLyogc2VlZCBnYXVzc2lhbiBmaWx0ZXIgZ2VuZXJhdG9yICovCisJc2lnbWFfcSA9IGRpdl9x KFBTQ19RX1JPVU5EX09GRlNFVCwgZmNfcSk7CisJZzBfcSA9IDEgPDwgUFNDX1FfRlJBQ1RJT047 CisJZzFfcSA9IGV4cF9hcHByb3hfcShkaXZfcSgtUFNDX1FfUk9VTkRfT0ZGU0VULAorCQkJCSAg bXVsdF9xKHNpZ21hX3EsIHNpZ21hX3EpKSk7CisJZzJfcSA9IG11bHRfcShnMV9xLCBnMV9xKTsK Kwljb2VmW3BoYXNlX2NudCAmIFBTQ19QSEFTRV9NQVNLXVt0YXBfY250MSA+PiBQU0NfQklUU19G T1JfUEhBU0VdID0gZzBfcTsKKworCWZvciAoaSA9IDA7IGkgPCBtaWQ7IGkrKykgeworCQlwaGFz ZV9jbnQrKzsKKwkJdGFwX2NudDEtLTsKKwkJdGFwX2NudDIrKzsKKworCQlnMF9xID0gbXVsdF9x KGcwX3EsIGcxX3EpOworCQlnMV9xID0gbXVsdF9xKGcxX3EsIGcyX3EpOworCisJCWlmICgocGhh c2VfY250ICYgUFNDX1BIQVNFX01BU0spIDw9IDgpIHsKKwkJCXRhcF9pZHggPSB0YXBfY250MSA+ PiBQU0NfQklUU19GT1JfUEhBU0U7CisJCQljb2VmW3BoYXNlX2NudCAmIFBTQ19QSEFTRV9NQVNL XVt0YXBfaWR4XSA9IGcwX3E7CisJCX0KKwkJaWYgKCgoLXBoYXNlX2NudCkgJiBQU0NfUEhBU0Vf TUFTSykgPD0gOCkgeworCQkJdGFwX2lkeCA9IHRhcF9jbnQyID4+IFBTQ19CSVRTX0ZPUl9QSEFT RTsKKwkJCWNvZWZbKC1waGFzZV9jbnQpICYgUFNDX1BIQVNFX01BU0tdW3RhcF9pZHhdID0gZzBf cTsKKwkJfQorCX0KKworCXBoYXNlX2NudCsrOworCXRhcF9jbnQxLS07CisJY29lZltwaGFzZV9j bnQgJiBQU0NfUEhBU0VfTUFTS11bdGFwX2NudDEgPj4gUFNDX0JJVFNfRk9SX1BIQVNFXSA9IDA7 CisKKwkvKiBvdmVycmlkZSBwaGFzZSAwIHdpdGggaWRlbnRpdHkgZmlsdGVyIGlmIHNwZWNpZmll ZCAqLworCWlmIChwaGFzZTBfaWRlbnRpdHkpCisJCWZvciAoaSA9IDA7IGkgPCBQU0NfTlVNX1RB UFM7IGkrKykKKwkJCWNvZWZbMF1baV0gPSBpID09IChQU0NfTlVNX1RBUFMgPj4gMSkgPworCQkJ CQkJKDEgPDwgUFNDX0NPRUZGX1BSRUNJU0lPTikgOiAwOworCisJLyogbm9ybWFsaXplIGNvZWYg Ki8KKwlmb3IgKHBoYXNlID0gMDsgcGhhc2UgPCBQU0NfU1RPUkVEX1BIQVNFUzsgcGhhc2UrKykg eworCQlpbnQgc3VtID0gMDsKKwkJczY0IGxsX3RlbXA7CisKKwkJZm9yIChpID0gMDsgaSA8IFBT Q19OVU1fVEFQUzsgaSsrKQorCQkJc3VtICs9IGNvZWZbcGhhc2VdW2ldOworCQlmb3IgKGkgPSAw OyBpIDwgUFNDX05VTV9UQVBTOyBpKyspIHsKKwkJCWxsX3RlbXAgPSBjb2VmW3BoYXNlXVtpXTsK KwkJCWxsX3RlbXAgPDw9IFBTQ19DT0VGRl9QUkVDSVNJT047CisJCQlsbF90ZW1wICs9IHN1bSA+ PiAxOworCQkJbGxfdGVtcCAvPSBzdW07CisJCQljb2VmW3BoYXNlXVtpXSA9IChpbnQpbGxfdGVt cDsKKwkJfQorCX0KK30KKworLyoqCisgKiBkY3NzX3NjYWxlcl9maWx0ZXJfZGVzaWduKCkgLSBD b21wdXRlIGZpbHRlciBjb2VmZmljaWVudHMgdXNpbmcKKyAqCQkJCSBHYXVzc2lhbiBmaWx0ZXIu CisgKiBAc3JjX2xlbmd0aDogbGVuZ3RoIG9mIGlucHV0CisgKiBAZHN0X2xlbmd0aDogbGVuZ3Ro IG9mIG91dHB1dAorICogQHVzZV81X3RhcHM6IDAgZm9yIDcgdGFwcyBwZXIgcGhhc2UsIDEgZm9y IDUgdGFwcworICogQGNvZWY6IG91dHB1dCBjb2VmZmljaWVudHMKKyAqLworc3RhdGljIHZvaWQg ZGNzc19zY2FsZXJfZmlsdGVyX2Rlc2lnbihpbnQgc3JjX2xlbmd0aCwgaW50IGRzdF9sZW5ndGgs CisJCQkJICAgICAgYm9vbCB1c2VfNV90YXBzLCBib29sIHBoYXNlMF9pZGVudGl0eSwKKwkJCQkg ICAgICBpbnQgY29lZltdW1BTQ19OVU1fVEFQU10pCit7CisJaW50IGZjX3E7CisKKwkvKiBjb21w dXRlIGN1dG9mZiBmcmVxdWVuY3kgKi8KKwlpZiAoZHN0X2xlbmd0aCA+PSBzcmNfbGVuZ3RoKQor CQlmY19xID0gZGl2X3EoMSwgUFNDX05VTV9QSEFTRVMpOworCWVsc2UKKwkJZmNfcSA9IGRpdl9x KGRzdF9sZW5ndGgsIHNyY19sZW5ndGggKiBQU0NfTlVNX1BIQVNFUyk7CisKKwkvKiBjb21wdXRl IGdhdXNzaWFuIGZpbHRlciBjb2VmZmljaWVudHMgKi8KKwlkY3NzX3NjYWxlcl9nYXVzc2lhbl9m aWx0ZXIoZmNfcSwgdXNlXzVfdGFwcywgcGhhc2UwX2lkZW50aXR5LCBjb2VmKTsKK30KKworc3Rh dGljIHZvaWQgZGNzc19zY2FsZXJfd3JpdGUoc3RydWN0IGRjc3Nfc2NhbGVyX2NoICpjaCwgdTMy IHZhbCwgdTMyIG9mcykKK3sKKwlzdHJ1Y3QgZGNzc19zY2FsZXIgKnNjbCA9IGNoLT5zY2w7CisK KwlkY3NzX2N0eGxkX3dyaXRlKHNjbC0+Y3R4bGQsIHNjbC0+Y3R4X2lkLCB2YWwsIGNoLT5iYXNl X29mcyArIG9mcyk7Cit9CisKK3N0YXRpYyBpbnQgZGNzc19zY2FsZXJfY2hfaW5pdF9hbGwoc3Ry dWN0IGRjc3Nfc2NhbGVyICpzY2wsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzY2FsZXJfYmFzZSkK K3sKKwlzdHJ1Y3QgZGNzc19zY2FsZXJfY2ggKmNoOworCWludCBpOworCisJZm9yIChpID0gMDsg aSA8IDM7IGkrKykgeworCQljaCA9ICZzY2wtPmNoW2ldOworCisJCWNoLT5iYXNlX29mcyA9IHNj YWxlcl9iYXNlICsgaSAqIDB4NDAwOworCisJCWNoLT5iYXNlX3JlZyA9IGRldm1faW9yZW1hcChz Y2wtPmRldiwgY2gtPmJhc2Vfb2ZzLCBTWl80Syk7CisJCWlmICghY2gtPmJhc2VfcmVnKSB7CisJ CQlkZXZfZXJyKHNjbC0+ZGV2LCAic2NhbGVyOiB1bmFibGUgdG8gcmVtYXAgY2ggYmFzZVxuIik7 CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWNoLT5zY2wgPSBzY2w7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK2ludCBkY3NzX3NjYWxlcl9pbml0KHN0cnVjdCBkY3NzX2RldiAqZGNzcywg dW5zaWduZWQgbG9uZyBzY2FsZXJfYmFzZSkKK3sKKwlzdHJ1Y3QgZGNzc19zY2FsZXIgKnNjYWxl cjsKKworCXNjYWxlciA9IGRldm1fa3phbGxvYyhkY3NzLT5kZXYsIHNpemVvZigqc2NhbGVyKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFzY2FsZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJZGNzcy0+ c2NhbGVyID0gc2NhbGVyOworCXNjYWxlci0+ZGV2ID0gZGNzcy0+ZGV2OworCXNjYWxlci0+Y3R4 bGQgPSBkY3NzLT5jdHhsZDsKKwlzY2FsZXItPmN0eF9pZCA9IENUWF9TQl9IUDsKKworCWlmIChk Y3NzX3NjYWxlcl9jaF9pbml0X2FsbChzY2FsZXIsIHNjYWxlcl9iYXNlKSkgeworCQlpbnQgaTsK KworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlpZiAoc2NhbGVyLT5jaFtpXS5iYXNl X3JlZykKKwkJCQlkZXZtX2lvdW5tYXAoc2NhbGVyLT5kZXYsCisJCQkJCSAgICAgc2NhbGVyLT5j aFtpXS5iYXNlX3JlZyk7CisJCX0KKworCQlkZXZtX2tmcmVlKHNjYWxlci0+ZGV2LCBzY2FsZXIp OworCisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGRjc3Nf c2NhbGVyX2V4aXQoc3RydWN0IGRjc3Nfc2NhbGVyICpzY2wpCit7CisJaW50IGNoX25vOworCisJ Zm9yIChjaF9ubyA9IDA7IGNoX25vIDwgMzsgY2hfbm8rKykgeworCQlzdHJ1Y3QgZGNzc19zY2Fs ZXJfY2ggKmNoID0gJnNjbC0+Y2hbY2hfbm9dOworCisJCWRjc3Nfd3JpdGVsKDAsIGNoLT5iYXNl X3JlZyArIERDU1NfU0NBTEVSX0NUUkwpOworCisJCWlmIChjaC0+YmFzZV9yZWcpCisJCQlkZXZt X2lvdW5tYXAoc2NsLT5kZXYsIGNoLT5iYXNlX3JlZyk7CisJfQorCisJZGV2bV9rZnJlZShzY2wt PmRldiwgc2NsKTsKK30KKwordm9pZCBkY3NzX3NjYWxlcl9jaF9lbmFibGUoc3RydWN0IGRjc3Nf c2NhbGVyICpzY2wsIGludCBjaF9udW0sIGJvb2wgZW4pCit7CisJc3RydWN0IGRjc3Nfc2NhbGVy X2NoICpjaCA9ICZzY2wtPmNoW2NoX251bV07CisJdTMyIHNjYWxlcl9jdHJsOworCisJc2NhbGVy X2N0cmwgPSBlbiA/IFNDQUxFUl9FTiB8IFJFUEVBVF9FTiA6IDA7CisKKwlpZiAoZW4pCisJCWRj c3Nfc2NhbGVyX3dyaXRlKGNoLCBjaC0+c2RhdGFfY3RybCwgRENTU19TQ0FMRVJfU0RBVEFfQ1RS TCk7CisKKwlpZiAoY2gtPnNjYWxlcl9jdHJsICE9IHNjYWxlcl9jdHJsKQorCQljaC0+c2NhbGVy X2N0cmxfY2hnZCA9IHRydWU7CisKKwljaC0+c2NhbGVyX2N0cmwgPSBzY2FsZXJfY3RybDsKK30K Kworc3RhdGljIHZvaWQgZGNzc19zY2FsZXJfeXV2X2VuYWJsZShzdHJ1Y3QgZGNzc19zY2FsZXJf Y2ggKmNoLCBib29sIGVuKQoreworCWNoLT5zZGF0YV9jdHJsICY9IH5ZVVZfRU47CisJY2gtPnNk YXRhX2N0cmwgfD0gZW4gPyBZVVZfRU4gOiAwOworfQorCitzdGF0aWMgdm9pZCBkY3NzX3NjYWxl cl9ydHJfOGxpbmVzX2VuYWJsZShzdHJ1Y3QgZGNzc19zY2FsZXJfY2ggKmNoLCBib29sIGVuKQor eworCWNoLT5zZGF0YV9jdHJsICY9IH5SVFJBTV84TElORVM7CisJY2gtPnNkYXRhX2N0cmwgfD0g ZW4gPyBSVFJBTV84TElORVMgOiAwOworfQorCitzdGF0aWMgdm9pZCBkY3NzX3NjYWxlcl9iaXRf ZGVwdGhfc2V0KHN0cnVjdCBkY3NzX3NjYWxlcl9jaCAqY2gsIGludCBkZXB0aCkKK3sKKwl1MzIg dmFsOworCisJdmFsID0gZGVwdGggPT0gMzAgPyAyIDogMDsKKworCWRjc3Nfc2NhbGVyX3dyaXRl KGNoLAorCQkJICAoKHZhbCA8PCBDSFJfQklUX0RFUFRIX1BPUykgJiBDSFJfQklUX0RFUFRIX01B U0spIHwKKwkJCSAgKCh2YWwgPDwgTFVNX0JJVF9ERVBUSF9QT1MpICYgTFVNX0JJVF9ERVBUSF9N QVNLKSwKKwkJCSAgRENTU19TQ0FMRVJfQklUX0RFUFRIKTsKK30KKworZW51bSBidWZmZXJfZm9y bWF0IHsKKwlCVUZfRk1UX1lVVjQyMCwKKwlCVUZfRk1UX1lVVjQyMiwKKwlCVUZfRk1UX0FSR0I4 ODg4X1lVVjQ0NCwKK307CisKK2VudW0gY2hyb21hX2xvY2F0aW9uIHsKKwlQU0NfTE9DX0hPUlpf MF9WRVJUXzFfT1ZFUl80ID0gMCwKKwlQU0NfTE9DX0hPUlpfMV9PVkVSXzRfVkVSVF8xX09WRVJf NCA9IDEsCisJUFNDX0xPQ19IT1JaXzBfVkVSVF8wID0gMiwKKwlQU0NfTE9DX0hPUlpfMV9PVkVS XzRfVkVSVF8wID0gMywKKwlQU0NfTE9DX0hPUlpfMF9WRVJUXzFfT1ZFUl8yID0gNCwKKwlQU0Nf TE9DX0hPUlpfMV9PVkVSXzRfVkVSVF8xX09WRVJfMiA9IDUKK307CisKK3N0YXRpYyB2b2lkIGRj c3Nfc2NhbGVyX2Zvcm1hdF9zZXQoc3RydWN0IGRjc3Nfc2NhbGVyX2NoICpjaCwKKwkJCQkgICBl bnVtIGJ1ZmZlcl9mb3JtYXQgc3JjX2ZtdCwKKwkJCQkgICBlbnVtIGJ1ZmZlcl9mb3JtYXQgZHN0 X2ZtdCkKK3sKKwlkY3NzX3NjYWxlcl93cml0ZShjaCwgc3JjX2ZtdCwgRENTU19TQ0FMRVJfU1JD X0ZPUk1BVCk7CisJZGNzc19zY2FsZXJfd3JpdGUoY2gsIGRzdF9mbXQsIERDU1NfU0NBTEVSX0RT VF9GT1JNQVQpOworfQorCitzdGF0aWMgdm9pZCBkY3NzX3NjYWxlcl9yZXNfc2V0KHN0cnVjdCBk Y3NzX3NjYWxlcl9jaCAqY2gsCisJCQkJaW50IHNyY194cmVzLCBpbnQgc3JjX3lyZXMsCisJCQkJ aW50IGRzdF94cmVzLCBpbnQgZHN0X3lyZXMsCisJCQkJdTMyIHBpeF9mb3JtYXQsIGVudW0gYnVm ZmVyX2Zvcm1hdCBkc3RfZm9ybWF0KQoreworCXUzMiBsc3JjX3hyZXMsIGxzcmNfeXJlcywgY3Ny Y194cmVzLCBjc3JjX3lyZXM7CisJdTMyIGxkc3RfeHJlcywgbGRzdF95cmVzLCBjZHN0X3hyZXMs IGNkc3RfeXJlczsKKwlib29sIHNyY19pc180NDQgPSB0cnVlOworCisJbHNyY194cmVzID0gc3Jj X3hyZXM7CisJY3NyY194cmVzID0gc3JjX3hyZXM7CisJbHNyY195cmVzID0gc3JjX3lyZXM7CisJ Y3NyY195cmVzID0gc3JjX3lyZXM7CisJbGRzdF94cmVzID0gZHN0X3hyZXM7CisJY2RzdF94cmVz ID0gZHN0X3hyZXM7CisJbGRzdF95cmVzID0gZHN0X3lyZXM7CisJY2RzdF95cmVzID0gZHN0X3ly ZXM7CisKKwlpZiAocGl4X2Zvcm1hdCA9PSBEUk1fRk9STUFUX1VZVlkgfHwgcGl4X2Zvcm1hdCA9 PSBEUk1fRk9STUFUX1ZZVVkgfHwKKwkgICAgcGl4X2Zvcm1hdCA9PSBEUk1fRk9STUFUX1lVWVYg fHwgcGl4X2Zvcm1hdCA9PSBEUk1fRk9STUFUX1lWWVUpIHsKKwkJY3NyY194cmVzID4+PSAxOwor CQlzcmNfaXNfNDQ0ID0gZmFsc2U7CisJfSBlbHNlIGlmIChwaXhfZm9ybWF0ID09IERSTV9GT1JN QVRfTlYxMiB8fAorCQkgICBwaXhfZm9ybWF0ID09IERSTV9GT1JNQVRfTlYyMSkgeworCQljc3Jj X3hyZXMgPj49IDE7CisJCWNzcmNfeXJlcyA+Pj0gMTsKKwkJc3JjX2lzXzQ0NCA9IGZhbHNlOwor CX0KKworCWlmIChkc3RfZm9ybWF0ID09IEJVRl9GTVRfWVVWNDIyKQorCQljZHN0X3hyZXMgPj49 IDE7CisKKwkvKiBmb3IgNDo0OjQgdG8gNDoyOjIgY29udmVyc2lvbiwgc291cmNlIGhlaWdodCBz aG91bGQgYmUgMSBsZXNzICovCisJaWYgKHNyY19pc180NDQgJiYgZHN0X2Zvcm1hdCA9PSBCVUZf Rk1UX1lVVjQyMikgeworCQlsc3JjX3lyZXMtLTsKKwkJY3NyY195cmVzLS07CisJfQorCisJZGNz c19zY2FsZXJfd3JpdGUoY2gsICgoKGxzcmNfeXJlcyAtIDEpIDw8IEhFSUdIVF9QT1MpICYgSEVJ R0hUX01BU0spIHwKKwkJCSAgICAgICAoKChsc3JjX3hyZXMgLSAxKSA8PCBXSURUSF9QT1MpICYg V0lEVEhfTUFTSyksCisJCQkgIERDU1NfU0NBTEVSX1NSQ19MVU1fUkVTKTsKKwlkY3NzX3NjYWxl cl93cml0ZShjaCwgKCgoY3NyY195cmVzIC0gMSkgPDwgSEVJR0hUX1BPUykgJiBIRUlHSFRfTUFT SykgfAorCQkJICAgICAgICgoKGNzcmNfeHJlcyAtIDEpIDw8IFdJRFRIX1BPUykgJiBXSURUSF9N QVNLKSwKKwkJCSAgRENTU19TQ0FMRVJfU1JDX0NIUl9SRVMpOworCWRjc3Nfc2NhbGVyX3dyaXRl KGNoLCAoKChsZHN0X3lyZXMgLSAxKSA8PCBIRUlHSFRfUE9TKSAmIEhFSUdIVF9NQVNLKSB8CisJ CQkgICAgICAgKCgobGRzdF94cmVzIC0gMSkgPDwgV0lEVEhfUE9TKSAmIFdJRFRIX01BU0spLAor CQkJICBEQ1NTX1NDQUxFUl9EU1RfTFVNX1JFUyk7CisJZGNzc19zY2FsZXJfd3JpdGUoY2gsICgo KGNkc3RfeXJlcyAtIDEpIDw8IEhFSUdIVF9QT1MpICYgSEVJR0hUX01BU0spIHwKKwkJCSAgICAg ICAoKChjZHN0X3hyZXMgLSAxKSA8PCBXSURUSF9QT1MpICYgV0lEVEhfTUFTSyksCisJCQkgIERD U1NfU0NBTEVSX0RTVF9DSFJfUkVTKTsKK30KKworI2RlZmluZSBtYXhfZG93bnNjYWxlKHJhdGlv KQkJKChyYXRpbykgPDwgMTYpCisjZGVmaW5lIG1heF91cHNjYWxlKHJhdGlvKQkJKCgxIDw8IDE2 KSAvIChyYXRpbykpCisKK3N0cnVjdCBkY3NzX3NjYWxlcl9yYXRpb3MgeworCWludCBkb3duc2Nh bGU7CisJaW50IHVwc2NhbGU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRjc3Nfc2NhbGVy X3JhdGlvcyBkY3NzX3NjYWxlcl9yYXRpb3NbXSA9IHsKKwl7bWF4X2Rvd25zY2FsZSgzKSwgbWF4 X3Vwc2NhbGUoOCl9LAorCXttYXhfZG93bnNjYWxlKDUpLCBtYXhfdXBzY2FsZSg4KX0sCisJe21h eF9kb3duc2NhbGUoNSksIG1heF91cHNjYWxlKDgpfSwKK307CisKK3N0YXRpYyB2b2lkIGRjc3Nf c2NhbGVyX2ZyYWN0aW9uc19zZXQoc3RydWN0IGRjc3Nfc2NhbGVyX2NoICpjaCwKKwkJCQkgICAg ICBpbnQgc3JjX3hyZXMsIGludCBzcmNfeXJlcywKKwkJCQkgICAgICBpbnQgZHN0X3hyZXMsIGlu dCBkc3RfeXJlcywKKwkJCQkgICAgICB1MzIgc3JjX2Zvcm1hdCwgdTMyIGRzdF9mb3JtYXQsCisJ CQkJICAgICAgZW51bSBjaHJvbWFfbG9jYXRpb24gc3JjX2Nocm9tYV9sb2MpCit7CisJaW50IHNy Y19jX3hyZXMsIHNyY19jX3lyZXMsIGRzdF9jX3hyZXMsIGRzdF9jX3lyZXM7CisJdTMyIGxfdmlu YywgbF9oaW5jLCBjX3ZpbmMsIGNfaGluYzsKKwl1MzIgY192c3RhcnQsIGNfaHN0YXJ0OworCisJ c3JjX2NfeHJlcyA9IHNyY194cmVzOworCXNyY19jX3lyZXMgPSBzcmNfeXJlczsKKwlkc3RfY194 cmVzID0gZHN0X3hyZXM7CisJZHN0X2NfeXJlcyA9IGRzdF95cmVzOworCisJY192c3RhcnQgPSAw OworCWNfaHN0YXJ0ID0gMDsKKworCS8qIGFkanVzdG1lbnRzIGZvciBzb3VyY2UgY2hyb21hIGxv Y2F0aW9uICovCisJaWYgKHNyY19mb3JtYXQgPT0gQlVGX0ZNVF9ZVVY0MjApIHsKKwkJLyogdmVy dGljYWwgaW5wdXQgY2hyb21hIHBvc2l0aW9uIGFkanVzdG1lbnQgKi8KKwkJc3dpdGNoIChzcmNf Y2hyb21hX2xvYykgeworCQljYXNlIFBTQ19MT0NfSE9SWl8wX1ZFUlRfMV9PVkVSXzQ6CisJCWNh c2UgUFNDX0xPQ19IT1JaXzFfT1ZFUl80X1ZFUlRfMV9PVkVSXzQ6CisJCQkvKgorCQkJICogbW92 ZSBjaHJvbWEgdXAgdG8gZmlyc3QgbHVtYSBsaW5lCisJCQkgKiAoMS80IGNocm9tYSBpbnB1dCBs aW5lIHNwYWNpbmcpCisJCQkgKi8KKwkJCWNfdnN0YXJ0IC09ICgxIDw8IChQU0NfUEhBU0VfRlJB Q1RJT05fQklUUyAtIDIpKTsKKwkJCWJyZWFrOworCQljYXNlIFBTQ19MT0NfSE9SWl8wX1ZFUlRf MV9PVkVSXzI6CisJCWNhc2UgUFNDX0xPQ19IT1JaXzFfT1ZFUl80X1ZFUlRfMV9PVkVSXzI6CisJ CQkvKgorCQkJICogbW92ZSBjaHJvbWEgdXAgdG8gZmlyc3QgbHVtYSBsaW5lCisJCQkgKiAoMS8y IGNocm9tYSBpbnB1dCBsaW5lIHNwYWNpbmcpCisJCQkgKi8KKwkJCWNfdnN0YXJ0IC09ICgxIDw8 IChQU0NfUEhBU0VfRlJBQ1RJT05fQklUUyAtIDEpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJYnJlYWs7CisJCX0KKwkJLyogaG9yaXpvbnRhbCBpbnB1dCBjaHJvbWEgcG9zaXRpb24gYWRq dXN0bWVudCAqLworCQlzd2l0Y2ggKHNyY19jaHJvbWFfbG9jKSB7CisJCWNhc2UgUFNDX0xPQ19I T1JaXzFfT1ZFUl80X1ZFUlRfMV9PVkVSXzQ6CisJCWNhc2UgUFNDX0xPQ19IT1JaXzFfT1ZFUl80 X1ZFUlRfMDoKKwkJY2FzZSBQU0NfTE9DX0hPUlpfMV9PVkVSXzRfVkVSVF8xX09WRVJfMjoKKwkJ CS8qIG1vdmUgY2hyb21hIGxlZnQgMS80IGNocm9tYSBpbnB1dCBzYW1wbGUgc3BhY2luZyAqLwor CQkJY19oc3RhcnQgLT0gKDEgPDwgKFBTQ19QSEFTRV9GUkFDVElPTl9CSVRTIC0gMikpOworCQkJ YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGFkanVzdG1lbnRz IHRvIGNocm9tYSByZXNvbHV0aW9uICovCisJaWYgKHNyY19mb3JtYXQgPT0gQlVGX0ZNVF9ZVVY0 MjApIHsKKwkJc3JjX2NfeHJlcyA+Pj0gMTsKKwkJc3JjX2NfeXJlcyA+Pj0gMTsKKwl9IGVsc2Ug aWYgKHNyY19mb3JtYXQgPT0gQlVGX0ZNVF9ZVVY0MjIpIHsKKwkJc3JjX2NfeHJlcyA+Pj0gMTsK Kwl9CisKKwlpZiAoZHN0X2Zvcm1hdCA9PSBCVUZfRk1UX1lVVjQyMikKKwkJZHN0X2NfeHJlcyA+ Pj0gMTsKKworCWxfdmluYyA9ICgoc3JjX3lyZXMgPDwgMTMpICsgKGRzdF95cmVzID4+IDEpKSAv IGRzdF95cmVzOworCWNfdmluYyA9ICgoc3JjX2NfeXJlcyA8PCAxMykgKyAoZHN0X2NfeXJlcyA+ PiAxKSkgLyBkc3RfY195cmVzOworCWxfaGluYyA9ICgoc3JjX3hyZXMgPDwgMTMpICsgKGRzdF94 cmVzID4+IDEpKSAvIGRzdF94cmVzOworCWNfaGluYyA9ICgoc3JjX2NfeHJlcyA8PCAxMykgKyAo ZHN0X2NfeHJlcyA+PiAxKSkgLyBkc3RfY194cmVzOworCisJLyogc2F2ZSBjaHJvbWEgc3RhcnQg cGhhc2UgKi8KKwljaC0+Y192c3RhcnQgPSBjX3ZzdGFydDsKKwljaC0+Y19oc3RhcnQgPSBjX2hz dGFydDsKKworCWRjc3Nfc2NhbGVyX3dyaXRlKGNoLCAwLCBEQ1NTX1NDQUxFUl9WX0xVTV9TVEFS VCk7CisJZGNzc19zY2FsZXJfd3JpdGUoY2gsIGxfdmluYywgRENTU19TQ0FMRVJfVl9MVU1fSU5D KTsKKworCWRjc3Nfc2NhbGVyX3dyaXRlKGNoLCAwLCBEQ1NTX1NDQUxFUl9IX0xVTV9TVEFSVCk7 CisJZGNzc19zY2FsZXJfd3JpdGUoY2gsIGxfaGluYywgRENTU19TQ0FMRVJfSF9MVU1fSU5DKTsK KworCWRjc3Nfc2NhbGVyX3dyaXRlKGNoLCBjX3ZzdGFydCwgRENTU19TQ0FMRVJfVl9DSFJfU1RB UlQpOworCWRjc3Nfc2NhbGVyX3dyaXRlKGNoLCBjX3ZpbmMsIERDU1NfU0NBTEVSX1ZfQ0hSX0lO Qyk7CisKKwlkY3NzX3NjYWxlcl93cml0ZShjaCwgY19oc3RhcnQsIERDU1NfU0NBTEVSX0hfQ0hS X1NUQVJUKTsKKwlkY3NzX3NjYWxlcl93cml0ZShjaCwgY19oaW5jLCBEQ1NTX1NDQUxFUl9IX0NI Ul9JTkMpOworfQorCitpbnQgZGNzc19zY2FsZXJfZ2V0X21pbl9tYXhfcmF0aW9zKHN0cnVjdCBk Y3NzX3NjYWxlciAqc2NsLCBpbnQgY2hfbnVtLAorCQkJCSAgIGludCAqbWluLCBpbnQgKm1heCkK K3sKKwkqbWluID0gZGNzc19zY2FsZXJfcmF0aW9zW2NoX251bV0udXBzY2FsZTsKKwkqbWF4ID0g ZGNzc19zY2FsZXJfcmF0aW9zW2NoX251bV0uZG93bnNjYWxlOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIGRjc3Nfc2NhbGVyX3Byb2dyYW1fNV9jb2VmX3NldChzdHJ1Y3QgZGNzc19z Y2FsZXJfY2ggKmNoLAorCQkJCQkgICBpbnQgYmFzZV9hZGRyLAorCQkJCQkgICBpbnQgY29lZltd W1BTQ19OVU1fVEFQU10pCit7CisJaW50IGksIHBoYXNlOworCisJZm9yIChpID0gMDsgaSA8IFBT Q19TVE9SRURfUEhBU0VTOyBpKyspIHsKKwkJZGNzc19zY2FsZXJfd3JpdGUoY2gsICgoY29lZltp XVsxXSAmIDB4ZmZmKSA8PCAxNiB8CisJCQkJICAgICAgIChjb2VmW2ldWzJdICYgMHhmZmYpIDw8 IDQgIHwKKwkJCQkgICAgICAgKGNvZWZbaV1bM10gJiAweGYwMCkgPj4gOCksCisJCQkJICBiYXNl X2FkZHIgKyBpICogc2l6ZW9mKHUzMikpOworCQlkY3NzX3NjYWxlcl93cml0ZShjaCwgKChjb2Vm W2ldWzNdICYgMHgwZmYpIDw8IDIwIHwKKwkJCQkgICAgICAgKGNvZWZbaV1bNF0gJiAweGZmZikg PDwgOCAgfAorCQkJCSAgICAgICAoY29lZltpXVs1XSAmIDB4ZmYwKSA+PiA0KSwKKwkJCQkgIGJh c2VfYWRkciArIDB4NDAgKyBpICogc2l6ZW9mKHUzMikpOworCQlkY3NzX3NjYWxlcl93cml0ZShj aCwgKChjb2VmW2ldWzVdICYgMHgwMGYpIDw8IDI0KSwKKwkJCQkgIGJhc2VfYWRkciArIDB4ODAg KyBpICogc2l6ZW9mKHUzMikpOworCX0KKworCS8qIHJldmVyc2UgYm90aCBwaGFzZSBhbmQgdGFw IG9yZGVyaW5ncyAqLworCWZvciAocGhhc2UgPSAoUFNDX05VTV9QSEFTRVMgPj4gMSkgLSAxOwor CQkJaSA8IFBTQ19OVU1fUEhBU0VTOyBpKyssIHBoYXNlLS0pIHsKKwkJZGNzc19zY2FsZXJfd3Jp dGUoY2gsICgoY29lZltwaGFzZV1bNV0gJiAweGZmZikgPDwgMTYgfAorCQkJCSAgICAgICAoY29l ZltwaGFzZV1bNF0gJiAweGZmZikgPDwgNCAgfAorCQkJCSAgICAgICAoY29lZltwaGFzZV1bM10g JiAweGYwMCkgPj4gOCksCisJCQkJICBiYXNlX2FkZHIgKyBpICogc2l6ZW9mKHUzMikpOworCQlk Y3NzX3NjYWxlcl93cml0ZShjaCwgKChjb2VmW3BoYXNlXVszXSAmIDB4MGZmKSA8PCAyMCB8CisJ CQkJICAgICAgIChjb2VmW3BoYXNlXVsyXSAmIDB4ZmZmKSA8PCA4ICB8CisJCQkJICAgICAgIChj b2VmW3BoYXNlXVsxXSAmIDB4ZmYwKSA+PiA0KSwKKwkJCQkgIGJhc2VfYWRkciArIDB4NDAgKyBp ICogc2l6ZW9mKHUzMikpOworCQlkY3NzX3NjYWxlcl93cml0ZShjaCwgKChjb2VmW3BoYXNlXVsx XSAmIDB4MDBmKSA8PCAyNCksCisJCQkJICBiYXNlX2FkZHIgKyAweDgwICsgaSAqIHNpemVvZih1 MzIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRjc3Nfc2NhbGVyX3Byb2dyYW1fN19jb2VmX3Nl dChzdHJ1Y3QgZGNzc19zY2FsZXJfY2ggKmNoLAorCQkJCQkgICBpbnQgYmFzZV9hZGRyLAorCQkJ CQkgICBpbnQgY29lZltdW1BTQ19OVU1fVEFQU10pCit7CisJaW50IGksIHBoYXNlOworCisJZm9y IChpID0gMDsgaSA8IFBTQ19TVE9SRURfUEhBU0VTOyBpKyspIHsKKwkJZGNzc19zY2FsZXJfd3Jp dGUoY2gsICgoY29lZltpXVswXSAmIDB4ZmZmKSA8PCAxNiB8CisJCQkJICAgICAgIChjb2VmW2ld WzFdICYgMHhmZmYpIDw8IDQgIHwKKwkJCQkgICAgICAgKGNvZWZbaV1bMl0gJiAweGYwMCkgPj4g OCksCisJCQkJICBiYXNlX2FkZHIgKyBpICogc2l6ZW9mKHUzMikpOworCQlkY3NzX3NjYWxlcl93 cml0ZShjaCwgKChjb2VmW2ldWzJdICYgMHgwZmYpIDw8IDIwIHwKKwkJCQkgICAgICAgKGNvZWZb aV1bM10gJiAweGZmZikgPDwgOCAgfAorCQkJCSAgICAgICAoY29lZltpXVs0XSAmIDB4ZmYwKSA+ PiA0KSwKKwkJCQkgIGJhc2VfYWRkciArIDB4NDAgKyBpICogc2l6ZW9mKHUzMikpOworCQlkY3Nz X3NjYWxlcl93cml0ZShjaCwgKChjb2VmW2ldWzRdICYgMHgwMGYpIDw8IDI0IHwKKwkJCQkgICAg ICAgKGNvZWZbaV1bNV0gJiAweGZmZikgPDwgMTIgfAorCQkJCSAgICAgICAoY29lZltpXVs2XSAm IDB4ZmZmKSksCisJCQkJICBiYXNlX2FkZHIgKyAweDgwICsgaSAqIHNpemVvZih1MzIpKTsKKwl9 CisKKwkvKiByZXZlcnNlIGJvdGggcGhhc2UgYW5kIHRhcCBvcmRlcmluZ3MgKi8KKwlmb3IgKHBo YXNlID0gKFBTQ19OVU1fUEhBU0VTID4+IDEpIC0gMTsKKwkJCWkgPCBQU0NfTlVNX1BIQVNFUzsg aSsrLCBwaGFzZS0tKSB7CisJCWRjc3Nfc2NhbGVyX3dyaXRlKGNoLCAoKGNvZWZbcGhhc2VdWzZd ICYgMHhmZmYpIDw8IDE2IHwKKwkJCQkgICAgICAgKGNvZWZbcGhhc2VdWzVdICYgMHhmZmYpIDw8 IDQgIHwKKwkJCQkgICAgICAgKGNvZWZbcGhhc2VdWzRdICYgMHhmMDApID4+IDgpLAorCQkJCSAg YmFzZV9hZGRyICsgaSAqIHNpemVvZih1MzIpKTsKKwkJZGNzc19zY2FsZXJfd3JpdGUoY2gsICgo Y29lZltwaGFzZV1bNF0gJiAweDBmZikgPDwgMjAgfAorCQkJCSAgICAgICAoY29lZltwaGFzZV1b M10gJiAweGZmZikgPDwgOCAgfAorCQkJCSAgICAgICAoY29lZltwaGFzZV1bMl0gJiAweGZmMCkg Pj4gNCksCisJCQkJICBiYXNlX2FkZHIgKyAweDQwICsgaSAqIHNpemVvZih1MzIpKTsKKwkJZGNz c19zY2FsZXJfd3JpdGUoY2gsICgoY29lZltwaGFzZV1bMl0gJiAweDAwZikgPDwgMjQgfAorCQkJ CSAgICAgICAoY29lZltwaGFzZV1bMV0gJiAweGZmZikgPDwgMTIgfAorCQkJCSAgICAgICAoY29l ZltwaGFzZV1bMF0gJiAweGZmZikpLAorCQkJCSAgYmFzZV9hZGRyICsgMHg4MCArIGkgKiBzaXpl b2YodTMyKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBkY3NzX3NjYWxlcl95dXZfY29lZl9zZXQo c3RydWN0IGRjc3Nfc2NhbGVyX2NoICpjaCwKKwkJCQkgICAgIGVudW0gYnVmZmVyX2Zvcm1hdCBz cmNfZm9ybWF0LAorCQkJCSAgICAgZW51bSBidWZmZXJfZm9ybWF0IGRzdF9mb3JtYXQsCisJCQkJ ICAgICBib29sIHVzZV81X3RhcHMsCisJCQkJICAgICBpbnQgc3JjX3hyZXMsIGludCBzcmNfeXJl cywgaW50IGRzdF94cmVzLAorCQkJCSAgICAgaW50IGRzdF95cmVzKQoreworCWludCBjb2VmW1BT Q19TVE9SRURfUEhBU0VTXVtQU0NfTlVNX1RBUFNdOworCWJvb2wgcHJvZ3JhbV81X3RhcHMgPSB1 c2VfNV90YXBzIHx8CisJCQkgICAgICAoZHN0X2Zvcm1hdCA9PSBCVUZfRk1UX1lVVjQyMiAmJgor CQkJICAgICAgIHNyY19mb3JtYXQgPT0gQlVGX0ZNVF9BUkdCODg4OF9ZVVY0NDQpOworCisJLyog aG9yaXpvbnRhbCBsdW1hICovCisJZGNzc19zY2FsZXJfZmlsdGVyX2Rlc2lnbihzcmNfeHJlcywg ZHN0X3hyZXMsIGZhbHNlLAorCQkJCSAgc3JjX3hyZXMgPT0gZHN0X3hyZXMsIGNvZWYpOworCWRj c3Nfc2NhbGVyX3Byb2dyYW1fN19jb2VmX3NldChjaCwgRENTU19TQ0FMRVJfQ09FRl9ITFVNLCBj b2VmKTsKKworCS8qIHZlcnRpY2FsIGx1bWEgKi8KKwlkY3NzX3NjYWxlcl9maWx0ZXJfZGVzaWdu KHNyY195cmVzLCBkc3RfeXJlcywgcHJvZ3JhbV81X3RhcHMsCisJCQkJICBzcmNfeXJlcyA9PSBk c3RfeXJlcywgY29lZik7CisKKwlpZiAocHJvZ3JhbV81X3RhcHMpCisJCWRjc3Nfc2NhbGVyX3By b2dyYW1fNV9jb2VmX3NldChjaCwgRENTU19TQ0FMRVJfQ09FRl9WTFVNLCBjb2VmKTsKKwllbHNl CisJCWRjc3Nfc2NhbGVyX3Byb2dyYW1fN19jb2VmX3NldChjaCwgRENTU19TQ0FMRVJfQ09FRl9W TFVNLCBjb2VmKTsKKworCS8qIGFkanVzdCBjaHJvbWEgcmVzb2x1dGlvbiAqLworCWlmIChzcmNf Zm9ybWF0ICE9IEJVRl9GTVRfQVJHQjg4ODhfWVVWNDQ0KQorCQlzcmNfeHJlcyA+Pj0gMTsKKwlp ZiAoc3JjX2Zvcm1hdCA9PSBCVUZfRk1UX1lVVjQyMCkKKwkJc3JjX3lyZXMgPj49IDE7CisJaWYg KGRzdF9mb3JtYXQgIT0gQlVGX0ZNVF9BUkdCODg4OF9ZVVY0NDQpCisJCWRzdF94cmVzID4+PSAx OworCWlmIChkc3RfZm9ybWF0ID09IEJVRl9GTVRfWVVWNDIwKSAvKiBzaG91bGQgbm90IGhhcHBl biAqLworCQlkc3RfeXJlcyA+Pj0gMTsKKworCS8qIGhvcml6b250YWwgY2hyb21hICovCisJZGNz c19zY2FsZXJfZmlsdGVyX2Rlc2lnbihzcmNfeHJlcywgZHN0X3hyZXMsIGZhbHNlLAorCQkJCSAg KHNyY194cmVzID09IGRzdF94cmVzKSAmJiAoY2gtPmNfaHN0YXJ0ID09IDApLAorCQkJCSAgY29l Zik7CisKKwlkY3NzX3NjYWxlcl9wcm9ncmFtXzdfY29lZl9zZXQoY2gsIERDU1NfU0NBTEVSX0NP RUZfSENIUiwgY29lZik7CisKKwkvKiB2ZXJ0aWNhbCBjaHJvbWEgKi8KKwlkY3NzX3NjYWxlcl9m aWx0ZXJfZGVzaWduKHNyY195cmVzLCBkc3RfeXJlcywgcHJvZ3JhbV81X3RhcHMsCisJCQkJICAo c3JjX3lyZXMgPT0gZHN0X3lyZXMpICYmIChjaC0+Y192c3RhcnQgPT0gMCksCisJCQkJICBjb2Vm KTsKKwlpZiAocHJvZ3JhbV81X3RhcHMpCisJCWRjc3Nfc2NhbGVyX3Byb2dyYW1fNV9jb2VmX3Nl dChjaCwgRENTU19TQ0FMRVJfQ09FRl9WQ0hSLCBjb2VmKTsKKwllbHNlCisJCWRjc3Nfc2NhbGVy X3Byb2dyYW1fN19jb2VmX3NldChjaCwgRENTU19TQ0FMRVJfQ09FRl9WQ0hSLCBjb2VmKTsKK30K Kworc3RhdGljIHZvaWQgZGNzc19zY2FsZXJfcmdiX2NvZWZfc2V0KHN0cnVjdCBkY3NzX3NjYWxl cl9jaCAqY2gsCisJCQkJICAgICBpbnQgc3JjX3hyZXMsIGludCBzcmNfeXJlcywgaW50IGRzdF94 cmVzLAorCQkJCSAgICAgaW50IGRzdF95cmVzKQoreworCWludCBjb2VmW1BTQ19TVE9SRURfUEhB U0VTXVtQU0NfTlVNX1RBUFNdOworCisJLyogaG9yaXpvbnRhbCBSR0IgKi8KKwlkY3NzX3NjYWxl cl9maWx0ZXJfZGVzaWduKHNyY194cmVzLCBkc3RfeHJlcywgZmFsc2UsCisJCQkJICBzcmNfeHJl cyA9PSBkc3RfeHJlcywgY29lZik7CisJZGNzc19zY2FsZXJfcHJvZ3JhbV83X2NvZWZfc2V0KGNo LCBEQ1NTX1NDQUxFUl9DT0VGX0hMVU0sIGNvZWYpOworCisJLyogdmVydGljYWwgUkdCICovCisJ ZGNzc19zY2FsZXJfZmlsdGVyX2Rlc2lnbihzcmNfeXJlcywgZHN0X3lyZXMsIGZhbHNlLAorCQkJ CSAgc3JjX3lyZXMgPT0gZHN0X3lyZXMsIGNvZWYpOworCWRjc3Nfc2NhbGVyX3Byb2dyYW1fN19j b2VmX3NldChjaCwgRENTU19TQ0FMRVJfQ09FRl9WTFVNLCBjb2VmKTsKK30KKworc3RhdGljIHZv aWQgZGNzc19zY2FsZXJfc2V0X3JnYjEwX29yZGVyKHN0cnVjdCBkY3NzX3NjYWxlcl9jaCAqY2gs CisJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZm9ybWF0X2luZm8gKmZvcm1hdCkKK3sKKwl1MzIgYTJy MTBnMTBiMTBfZm9ybWF0OworCisJaWYgKGZvcm1hdC0+aXNfeXV2KQorCQlyZXR1cm47CisKKwlj aC0+c2RhdGFfY3RybCAmPSB+QTJSMTBHMTBCMTBfRk9STUFUX01BU0s7CisKKwlpZiAoZm9ybWF0 LT5kZXB0aCAhPSAzMCkKKwkJcmV0dXJuOworCisJc3dpdGNoIChmb3JtYXQtPmZvcm1hdCkgewor CWNhc2UgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEw MTA6CisJCWEycjEwZzEwYjEwX2Zvcm1hdCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBEUk1fRk9S TUFUX0FCR1IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMDoKKwkJYTJyMTBn MTBiMTBfZm9ybWF0ID0gNTsKKwkJYnJlYWs7CisKKwljYXNlIERSTV9GT1JNQVRfUkdCQTEwMTAx MDI6CisJY2FzZSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOgorCQlhMnIxMGcxMGIxMF9mb3JtYXQg PSA2OworCQlicmVhazsKKworCWNhc2UgRFJNX0ZPUk1BVF9CR1JBMTAxMDEwMjoKKwljYXNlIERS TV9GT1JNQVRfQkdSWDEwMTAxMDI6CisJCWEycjEwZzEwYjEwX2Zvcm1hdCA9IDExOworCQlicmVh azsKKworCWRlZmF1bHQ6CisJCWEycjEwZzEwYjEwX2Zvcm1hdCA9IDA7CisJCWJyZWFrOworCX0K KworCWNoLT5zZGF0YV9jdHJsIHw9IGEycjEwZzEwYjEwX2Zvcm1hdCA8PCBBMlIxMEcxMEIxMF9G T1JNQVRfUE9TOworfQorCit2b2lkIGRjc3Nfc2NhbGVyX3NldHVwKHN0cnVjdCBkY3NzX3NjYWxl ciAqc2NsLCBpbnQgY2hfbnVtLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5m byAqZm9ybWF0LAorCQkgICAgICAgaW50IHNyY194cmVzLCBpbnQgc3JjX3lyZXMsIGludCBkc3Rf eHJlcywgaW50IGRzdF95cmVzLAorCQkgICAgICAgdTMyIHZyZWZyZXNoX2h6KQoreworCXN0cnVj dCBkY3NzX3NjYWxlcl9jaCAqY2ggPSAmc2NsLT5jaFtjaF9udW1dOworCXVuc2lnbmVkIGludCBw aXhlbF9kZXB0aCA9IDA7CisJYm9vbCBydHJfOGxpbmVfZW4gPSBmYWxzZTsKKwlib29sIHVzZV81 X3RhcHMgPSBmYWxzZTsKKwllbnVtIGJ1ZmZlcl9mb3JtYXQgc3JjX2Zvcm1hdCA9IEJVRl9GTVRf QVJHQjg4ODhfWVVWNDQ0OworCWVudW0gYnVmZmVyX2Zvcm1hdCBkc3RfZm9ybWF0ID0gQlVGX0ZN VF9BUkdCODg4OF9ZVVY0NDQ7CisJdTMyIHBpeF9mb3JtYXQgPSBmb3JtYXQtPmZvcm1hdDsKKwor CWlmIChmb3JtYXQtPmlzX3l1dikgeworCQlkY3NzX3NjYWxlcl95dXZfZW5hYmxlKGNoLCB0cnVl KTsKKworCQlpZiAocGl4X2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIgfHwKKwkJICAgIHBpeF9m b3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjIxKSB7CisJCQlydHJfOGxpbmVfZW4gPSB0cnVlOworCQkJ c3JjX2Zvcm1hdCA9IEJVRl9GTVRfWVVWNDIwOworCQl9IGVsc2UgaWYgKHBpeF9mb3JtYXQgPT0g RFJNX0ZPUk1BVF9VWVZZIHx8CisJCQkgICBwaXhfZm9ybWF0ID09IERSTV9GT1JNQVRfVllVWSB8 fAorCQkJICAgcGl4X2Zvcm1hdCA9PSBEUk1fRk9STUFUX1lVWVYgfHwKKwkJCSAgIHBpeF9mb3Jt YXQgPT0gRFJNX0ZPUk1BVF9ZVllVKSB7CisJCQlzcmNfZm9ybWF0ID0gQlVGX0ZNVF9ZVVY0MjI7 CisJCX0KKworCQl1c2VfNV90YXBzID0gIXJ0cl84bGluZV9lbjsKKwl9IGVsc2UgeworCQlkY3Nz X3NjYWxlcl95dXZfZW5hYmxlKGNoLCBmYWxzZSk7CisKKwkJcGl4ZWxfZGVwdGggPSBmb3JtYXQt PmRlcHRoOworCX0KKworCWRjc3Nfc2NhbGVyX2ZyYWN0aW9uc19zZXQoY2gsIHNyY194cmVzLCBz cmNfeXJlcywgZHN0X3hyZXMsCisJCQkJICBkc3RfeXJlcywgc3JjX2Zvcm1hdCwgZHN0X2Zvcm1h dCwKKwkJCQkgIFBTQ19MT0NfSE9SWl8wX1ZFUlRfMV9PVkVSXzQpOworCisJaWYgKGZvcm1hdC0+ aXNfeXV2KQorCQlkY3NzX3NjYWxlcl95dXZfY29lZl9zZXQoY2gsIHNyY19mb3JtYXQsIGRzdF9m b3JtYXQsCisJCQkJCSB1c2VfNV90YXBzLCBzcmNfeHJlcywgc3JjX3lyZXMsCisJCQkJCSBkc3Rf eHJlcywgZHN0X3lyZXMpOworCWVsc2UKKwkJZGNzc19zY2FsZXJfcmdiX2NvZWZfc2V0KGNoLCBz cmNfeHJlcywgc3JjX3lyZXMsCisJCQkJCSBkc3RfeHJlcywgZHN0X3lyZXMpOworCisJZGNzc19z Y2FsZXJfcnRyXzhsaW5lc19lbmFibGUoY2gsIHJ0cl84bGluZV9lbik7CisJZGNzc19zY2FsZXJf Yml0X2RlcHRoX3NldChjaCwgcGl4ZWxfZGVwdGgpOworCWRjc3Nfc2NhbGVyX3NldF9yZ2IxMF9v cmRlcihjaCwgZm9ybWF0KTsKKwlkY3NzX3NjYWxlcl9mb3JtYXRfc2V0KGNoLCBzcmNfZm9ybWF0 LCBkc3RfZm9ybWF0KTsKKwlkY3NzX3NjYWxlcl9yZXNfc2V0KGNoLCBzcmNfeHJlcywgc3JjX3ly ZXMsIGRzdF94cmVzLCBkc3RfeXJlcywKKwkJCSAgICBwaXhfZm9ybWF0LCBkc3RfZm9ybWF0KTsK K30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250 ZXh0LiAqLwordm9pZCBkY3NzX3NjYWxlcl93cml0ZV9zY2xjdHJsKHN0cnVjdCBkY3NzX3NjYWxl ciAqc2NsKQoreworCWludCBjaG51bTsKKworCWZvciAoY2hudW0gPSAwOyBjaG51bSA8IDM7IGNo bnVtKyspIHsKKwkJc3RydWN0IGRjc3Nfc2NhbGVyX2NoICpjaCA9ICZzY2wtPmNoW2NobnVtXTsK KworCQlpZiAoY2gtPnNjYWxlcl9jdHJsX2NoZ2QpIHsKKwkJCWRjc3NfY3R4bGRfd3JpdGVfaXJx c2FmZShzY2wtPmN0eGxkLCBzY2wtPmN0eF9pZCwKKwkJCQkJCSBjaC0+c2NhbGVyX2N0cmwsCisJ CQkJCQkgY2gtPmJhc2Vfb2ZzICsKKwkJCQkJCSBEQ1NTX1NDQUxFUl9DVFJMKTsKKwkJCWNoLT5z Y2FsZXJfY3RybF9jaGdkID0gZmFsc2U7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaW14L2Rjc3MvZGNzcy1zcy5jIGIvZHJpdmVycy9ncHUvZHJtL2lteC9kY3NzL2Rj c3Mtc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNjVhMDVjMgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pbXgvZGNzcy9kY3NzLXNzLmMKQEAgLTAs MCArMSwxNzkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICog Q29weXJpZ2h0IDIwMTkgTlhQLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKwor I2luY2x1ZGUgImRjc3MtZGV2LmgiCisKKyNkZWZpbmUgRENTU19TU19TWVNfQ1RSTAkJCTB4MDAK KyNkZWZpbmUgICBSVU5fRU4JCQkJQklUKDApCisjZGVmaW5lIERDU1NfU1NfRElTUExBWQkJCQkw eDEwCisjZGVmaW5lICAgTFJDX1hfUE9TCQkJCTAKKyNkZWZpbmUgICBMUkNfWF9NQVNLCQkJCUdF Tk1BU0soMTIsIDApCisjZGVmaW5lICAgTFJDX1lfUE9TCQkJCTE2CisjZGVmaW5lICAgTFJDX1lf TUFTSwkJCQlHRU5NQVNLKDI4LCAxNikKKyNkZWZpbmUgRENTU19TU19IU1lOQwkJCQkweDIwCisj ZGVmaW5lIERDU1NfU1NfVlNZTkMJCQkJMHgzMAorI2RlZmluZSAgIFNZTkNfU1RBUlRfUE9TCQkJ MAorI2RlZmluZSAgIFNZTkNfU1RBUlRfTUFTSwkJCUdFTk1BU0soMTIsIDApCisjZGVmaW5lICAg U1lOQ19FTkRfUE9TCQkJCTE2CisjZGVmaW5lICAgU1lOQ19FTkRfTUFTSwkJCQlHRU5NQVNLKDI4 LCAxNikKKyNkZWZpbmUgICBTWU5DX1BPTAkJCQlCSVQoMzEpCisjZGVmaW5lIERDU1NfU1NfREVf VUxDCQkJCTB4NDAKKyNkZWZpbmUgICBVTENfWF9QT1MJCQkJMAorI2RlZmluZSAgIFVMQ19YX01B U0sJCQkJR0VOTUFTSygxMiwgMCkKKyNkZWZpbmUgICBVTENfWV9QT1MJCQkJMTYKKyNkZWZpbmUg ICBVTENfWV9NQVNLCQkJCUdFTk1BU0soMjgsIDE2KQorI2RlZmluZSAgIFVMQ19QT0wJCQkJQklU KDMxKQorI2RlZmluZSBEQ1NTX1NTX0RFX0xSQwkJCQkweDUwCisjZGVmaW5lIERDU1NfU1NfTU9E RQkJCQkweDYwCisjZGVmaW5lICAgUElQRV9NT0RFX1BPUwkJCQkwCisjZGVmaW5lICAgUElQRV9N T0RFX01BU0sJCQlHRU5NQVNLKDEsIDApCisjZGVmaW5lIERDU1NfU1NfQ09FRkYJCQkJMHg3MAor I2RlZmluZSAgIEhPUklaX0FfUE9TCQkJCTAKKyNkZWZpbmUgICBIT1JJWl9BX01BU0sJCQkJR0VO TUFTSygzLCAwKQorI2RlZmluZSAgIEhPUklaX0JfUE9TCQkJCTQKKyNkZWZpbmUgICBIT1JJWl9C X01BU0sJCQkJR0VOTUFTSyg3LCA0KQorI2RlZmluZSAgIEhPUklaX0NfUE9TCQkJCTgKKyNkZWZp bmUgICBIT1JJWl9DX01BU0sJCQkJR0VOTUFTSygxMSwgOCkKKyNkZWZpbmUgICBIT1JJWl9IX05P Uk1fUE9TCQkJMTIKKyNkZWZpbmUgICBIT1JJWl9IX05PUk1fTUFTSwkJCUdFTk1BU0soMTQsIDEy KQorI2RlZmluZSAgIFZFUlRfQV9QT1MJCQkJMTYKKyNkZWZpbmUgICBWRVJUX0FfTUFTSwkJCQlH RU5NQVNLKDE5LCAxNikKKyNkZWZpbmUgICBWRVJUX0JfUE9TCQkJCTIwCisjZGVmaW5lICAgVkVS VF9CX01BU0sJCQkJR0VOTUFTSygyMywgMjApCisjZGVmaW5lICAgVkVSVF9DX1BPUwkJCQkyNAor I2RlZmluZSAgIFZFUlRfQ19NQVNLCQkJCUdFTk1BU0soMjcsIDI0KQorI2RlZmluZSAgIFZFUlRf SF9OT1JNX1BPUwkJCTI4CisjZGVmaW5lICAgVkVSVF9IX05PUk1fTUFTSwkJCUdFTk1BU0soMzAs IDI4KQorI2RlZmluZSBEQ1NTX1NTX0NMSVBfQ0IJCQkJMHg4MAorI2RlZmluZSBEQ1NTX1NTX0NM SVBfQ1IJCQkJMHg5MAorI2RlZmluZSAgIENMSVBfTUlOX1BPUwkJCQkwCisjZGVmaW5lICAgQ0xJ UF9NSU5fTUFTSwkJCQlHRU5NQVNLKDksIDApCisjZGVmaW5lICAgQ0xJUF9NQVhfUE9TCQkJCTAK KyNkZWZpbmUgICBDTElQX01BWF9NQVNLCQkJCUdFTk1BU0soMjMsIDE2KQorI2RlZmluZSBEQ1NT X1NTX0lOVEVSX01PREUJCQkweEEwCisjZGVmaW5lICAgSU5UX0VOCQkJCUJJVCgwKQorI2RlZmlu ZSAgIFZTWU5DX1NISUZUCQkJCUJJVCgxKQorCitzdHJ1Y3QgZGNzc19zcyB7CisJc3RydWN0IGRl dmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqYmFzZV9yZWc7CisJdTMyIGJhc2Vfb2ZzOworCisJ c3RydWN0IGRjc3NfY3R4bGQgKmN0eGxkOworCXUzMiBjdHhfaWQ7CisKKwlib29sIGluX3VzZTsK K307CisKK3N0YXRpYyB2b2lkIGRjc3Nfc3Nfd3JpdGUoc3RydWN0IGRjc3Nfc3MgKnNzLCB1MzIg dmFsLCB1MzIgb2ZzKQoreworCWlmICghc3MtPmluX3VzZSkKKwkJZGNzc193cml0ZWwodmFsLCBz cy0+YmFzZV9yZWcgKyBvZnMpOworCisJZGNzc19jdHhsZF93cml0ZShzcy0+Y3R4bGQsIHNzLT5j dHhfaWQsIHZhbCwKKwkJCSBzcy0+YmFzZV9vZnMgKyBvZnMpOworfQorCitpbnQgZGNzc19zc19p bml0KHN0cnVjdCBkY3NzX2RldiAqZGNzcywgdW5zaWduZWQgbG9uZyBzc19iYXNlKQoreworCXN0 cnVjdCBkY3NzX3NzICpzczsKKworCXNzID0gZGV2bV9remFsbG9jKGRjc3MtPmRldiwgc2l6ZW9m KCpzcyksIEdGUF9LRVJORUwpOworCWlmICghc3MpCisJCXJldHVybiAtRU5PTUVNOworCisJZGNz cy0+c3MgPSBzczsKKwlzcy0+ZGV2ID0gZGNzcy0+ZGV2OworCXNzLT5jdHhsZCA9IGRjc3MtPmN0 eGxkOworCisJc3MtPmJhc2VfcmVnID0gZGV2bV9pb3JlbWFwKGRjc3MtPmRldiwgc3NfYmFzZSwg U1pfNEspOworCWlmICghc3MtPmJhc2VfcmVnKSB7CisJCWRldl9lcnIoZGNzcy0+ZGV2LCAic3M6 IHVuYWJsZSB0byByZW1hcCBzcyBiYXNlXG4iKTsKKwkJZGV2bV9rZnJlZShzcy0+ZGV2LCBzcyk7 CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNzLT5iYXNlX29mcyA9IHNzX2Jhc2U7CisJc3Mt PmN0eF9pZCA9IENUWF9TQl9IUDsKKworCXJldHVybiAwOworfQorCit2b2lkIGRjc3Nfc3NfZXhp dChzdHJ1Y3QgZGNzc19zcyAqc3MpCit7CisJLyogc3RvcCBTUyAqLworCWRjc3Nfd3JpdGVsKDAs IHNzLT5iYXNlX3JlZyArIERDU1NfU1NfU1lTX0NUUkwpOworCisJaWYgKHNzLT5iYXNlX3JlZykK KwkJZGV2bV9pb3VubWFwKHNzLT5kZXYsIHNzLT5iYXNlX3JlZyk7CisKKwlkZXZtX2tmcmVlKHNz LT5kZXYsIHNzKTsKK30KKwordm9pZCBkY3NzX3NzX3N1YnNhbV9zZXQoc3RydWN0IGRjc3Nfc3Mg KnNzKQoreworCWRjc3Nfc3Nfd3JpdGUoc3MsIDB4NDE2MTQxNjEsIERDU1NfU1NfQ09FRkYpOwor CWRjc3Nfc3Nfd3JpdGUoc3MsIDAsIERDU1NfU1NfTU9ERSk7CisJZGNzc19zc193cml0ZShzcywg MHgwM2ZmMDAwMCwgRENTU19TU19DTElQX0NCKTsKKwlkY3NzX3NzX3dyaXRlKHNzLCAweDAzZmYw MDAwLCBEQ1NTX1NTX0NMSVBfQ1IpOworfQorCit2b2lkIGRjc3Nfc3Nfc3luY19zZXQoc3RydWN0 IGRjc3Nfc3MgKnNzLCBzdHJ1Y3QgdmlkZW9tb2RlICp2bSwKKwkJICAgICAgYm9vbCBwaHN5bmMs IGJvb2wgcHZzeW5jKQoreworCXUxNiBscmNfeCwgbHJjX3k7CisJdTE2IGhzeW5jX3N0YXJ0LCBo c3luY19lbmQ7CisJdTE2IHZzeW5jX3N0YXJ0LCB2c3luY19lbmQ7CisJdTE2IGRlX3VsY194LCBk ZV91bGNfeTsKKwl1MTYgZGVfbHJjX3gsIGRlX2xyY195OworCisJbHJjX3ggPSB2bS0+aGZyb250 X3BvcmNoICsgdm0tPmhiYWNrX3BvcmNoICsgdm0tPmhzeW5jX2xlbiArCisJCXZtLT5oYWN0aXZl IC0gMTsKKwlscmNfeSA9IHZtLT52ZnJvbnRfcG9yY2ggKyB2bS0+dmJhY2tfcG9yY2ggKyB2bS0+ dnN5bmNfbGVuICsKKwkJdm0tPnZhY3RpdmUgLSAxOworCisJZGNzc19zc193cml0ZShzcywgKGxy Y195IDw8IExSQ19ZX1BPUykgfCBscmNfeCwgRENTU19TU19ESVNQTEFZKTsKKworCWhzeW5jX3N0 YXJ0ID0gdm0tPmhmcm9udF9wb3JjaCArIHZtLT5oYmFja19wb3JjaCArIHZtLT5oc3luY19sZW4g KworCQkgICAgICB2bS0+aGFjdGl2ZSAtIDE7CisJaHN5bmNfZW5kID0gdm0tPmhzeW5jX2xlbiAt IDE7CisKKwlkY3NzX3NzX3dyaXRlKHNzLCAocGhzeW5jID8gU1lOQ19QT0wgOiAwKSB8CisJCSAg ICAgICgodTMyKWhzeW5jX2VuZCA8PCBTWU5DX0VORF9QT1MpIHwgaHN5bmNfc3RhcnQsCisJCSAg ICAgIERDU1NfU1NfSFNZTkMpOworCisJdnN5bmNfc3RhcnQgPSB2bS0+dmZyb250X3BvcmNoIC0g MTsKKwl2c3luY19lbmQgPSB2bS0+dmZyb250X3BvcmNoICsgdm0tPnZzeW5jX2xlbiAtIDE7CisK KwlkY3NzX3NzX3dyaXRlKHNzLCAocHZzeW5jID8gU1lOQ19QT0wgOiAwKSB8CisJCSAgICAgICgo dTMyKXZzeW5jX2VuZCA8PCBTWU5DX0VORF9QT1MpIHwgdnN5bmNfc3RhcnQsCisJCSAgICAgIERD U1NfU1NfVlNZTkMpOworCisJZGVfdWxjX3ggPSB2bS0+aHN5bmNfbGVuICsgdm0tPmhiYWNrX3Bv cmNoIC0gMTsKKwlkZV91bGNfeSA9IHZtLT52c3luY19sZW4gKyB2bS0+dmZyb250X3BvcmNoICsg dm0tPnZiYWNrX3BvcmNoOworCisJZGNzc19zc193cml0ZShzcywgU1lOQ19QT0wgfCAoKHUzMilk ZV91bGNfeSA8PCBVTENfWV9QT1MpIHwgZGVfdWxjX3gsCisJCSAgICAgIERDU1NfU1NfREVfVUxD KTsKKworCWRlX2xyY194ID0gdm0tPmhzeW5jX2xlbiArIHZtLT5oYmFja19wb3JjaCArIHZtLT5o YWN0aXZlIC0gMTsKKwlkZV9scmNfeSA9IHZtLT52c3luY19sZW4gKyB2bS0+dmZyb250X3BvcmNo ICsgdm0tPnZiYWNrX3BvcmNoICsKKwkJICAgdm0tPnZhY3RpdmUgLSAxOworCisJZGNzc19zc193 cml0ZShzcywgKGRlX2xyY195IDw8IExSQ19ZX1BPUykgfCBkZV9scmNfeCwgRENTU19TU19ERV9M UkMpOworfQorCit2b2lkIGRjc3Nfc3NfZW5hYmxlKHN0cnVjdCBkY3NzX3NzICpzcykKK3sKKwlk Y3NzX3NzX3dyaXRlKHNzLCBSVU5fRU4sIERDU1NfU1NfU1lTX0NUUkwpOworCXNzLT5pbl91c2Ug PSB0cnVlOworfQorCit2b2lkIGRjc3Nfc3NfZGlzYWJsZShzdHJ1Y3QgZGNzc19zcyAqc3MpCit7 CisJZGNzc19zc193cml0ZShzcywgMCwgRENTU19TU19TWVNfQ1RSTCk7CisJc3MtPmluX3VzZSA9 IGZhbHNlOworfQotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbA==