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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A0507C433F5 for ; Mon, 3 Jan 2022 14:32:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=+64RFzWXqC8ebUQ9hPzZXOE3I4Up+5c+PdFEhgtjSLU=; b=lQGi5mQ4TwQ2jl Qm7frqgo8N6DZba6GKlvG8GhQLO7J2k5AlAf3RQJWrAMYINOi9EY56hoqD+ZpjY3tmWBzj1Z1YQUi FLnCAos4L9di+OzvTnIuhp7m/1PHYnhp1dwd5Q/T27gyja7IhtER++yGEVDFPcVV0TJDtzwekIfWK oeCpDrInfABjT81gx+y5P7r3kSYXr7CmTGEWObPuUd8JENOgNKbIQHHOEcMKY0lQmoBofGEcQmGLO sPBDaAoS7fcXM4Rsvhxo5I7H8vicNOKIfnWvGq1FWxsfC/e9xAtqffalRSUfhivKu6Rm4951dc9C8 LC43yIH0APUzOwb+8cCA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4OO8-009CPN-51; Mon, 03 Jan 2022 14:32:40 +0000 Received: from ams.source.kernel.org ([145.40.68.75]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4OO1-009CMA-5L for linux-phy@lists.infradead.org; Mon, 03 Jan 2022 14:32:38 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 85990B80F3B; Mon, 3 Jan 2022 14:32:31 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8F861C36AED; Mon, 3 Jan 2022 14:32:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1641220350; bh=NypHMP9HQ4o6vINH2E2XSDvJfZhErSo3RamQiHpn7Bk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pdMUFDuKeZvyBEmtdnRB4mOafcJhJsZEMVBc1aR/lCzb+de1XlJNTMOJEc/dXPIw5 8Fq36T6trhCdizaFlBDaAp28GRArmvbet8opCmXtiZ3Gb1UnH9OzRbRFGnqEXTGyRK burXeK3UrqC6TAz0Q5ypDoVtBzACMwtd01B1ysJ21RaOY/qUGLyv1h9HpqR2lEolst 6DicjCbqql6HZNYv/3YR3dzruNFGMjAXEejihcsNMx0jqa4RCQd8MDeiOtJb6Uttej OKxW2ZGTswFMM/ny6TGmkLq5dYIvrUTBDgAm0kKO7HyFf3mWMRqmFditJAaDOBC5yt VMLDv7UjL6kgA== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Vinod Koul Cc: linux-phy@lists.infradead.org, Kishon Vijay Abraham I , pali@kernel.org, Miquel Raynal , Gregory CLEMENT , =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH phy v3 2/5] phy: marvell: phy-mvebu-a3700-comphy: Add native kernel implementation Date: Mon, 3 Jan 2022 15:32:17 +0100 Message-Id: <20220103143220.13070-3-kabel@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220103143220.13070-1-kabel@kernel.org> References: <20220103143220.13070-1-kabel@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220103_063233_712704_53398A71 X-CRM114-Status: GOOD ( 27.31 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KClJlbW92ZSBvbGQgUlBDIGltcGxl bWVudGF0aW9uIGFuZCBhZGQgYSBuZXcgbmF0aXZlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbi4KClRo ZSBvbGQgaW1wbGVtZW50YXRpb24gdXNlcyBBUk0gU01DIEFQSSB0byBpc3N1ZSBSUEMgY2FsbHMg dG8gQVJNIFRydXN0ZWQKRmlybXdhcmUgd2hpY2ggcHJvdmlkZXMgcmVhbCBpbXBsZW1lbnRhdGlv biBvZiBQSFkgY29uZmlndXJhdGlvbi4KCkJ1dCBvbGRlciB2ZXJzaW9ucyBvZiBBUk0gVHJ1c3Rl ZCBGaXJtd2FyZSBkbyBub3QgcHJvdmlkZSB0aGlzIFBIWQpjb25maWd1cmF0aW9uIGZ1bmN0aW9u YWxpdHksIHNpbXBseSByZXR1cm5pbmc6IG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkOyBvcgp3b3Jz ZSwgc29tZSB2ZXJzaW9ucyBwcm92aWRlIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkg aW5jb3JyZWN0bHkuCgpGb3IgZXhhbXBsZSB0aGUgZmlybXdhcmUgc2hpcHBlZCBpbiBFU1BSRVNT T2JpbiBib2FyZCBoYXMgdGhpcyBvbGRlcgp2ZXJzaW9uIG9mIEFSTSBUcnVzdGVkIEZpcm13YXJl IGFuZCB0aGVyZWZvcmUgU0FUQSwgVVNCIDMuMCBhbmQgUENJZQpmdW5jdGlvbmFsaXR5IGRvIG5v dCB3b3JrIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgTGludXgga2VybmVsLgoKRHVlIHRvIHRoZSBh Ym92ZSByZWFzb25zLCB0aGUgZm9sbG93aW5nIGNvbW1pdHMgd2VyZSBpbnRyb2R1Y2VkIGludG8g TGludXgsCnRvIHdvcmthcm91bmQgdGhlc2UgaXNzdWVzIGJ5IGlnbm9yaW5nIC1FT1BOT1RTVVBQ IGVycm9yIGNvZGUgZnJvbQpwaHktbXZlYnUtYTM3MDAtY29tcGh5IGRyaXZlciBmdW5jdGlvbiBw aHlfcG93ZXJfb24oKToKCmNvbW1pdCA0NWFlZmUzZDIyNTEgKCJhdGE6IGFoY2k6IG12ZWJ1OiBN YWtlIFNBVEEgUEhZIG9wdGlvbmFsIGZvciBBcm1hZGEKMzcyMCIpCmNvbW1pdCAzMjQxOTI5YjY3 ZDIgKCJ1c2I6IGhvc3Q6IHhoY2k6IG12ZWJ1OiBtYWtlIFVTQiAzLjAgUEhZIG9wdGlvbmFsIGZv cgpBcm1hZGEgMzcyMCIpCmNvbW1pdCBiMGM2YWUwZjg5NDggKCJQQ0k6IGFhcmR2YXJrOiBGaXgg aW5pdGlhbGl6YXRpb24gd2l0aCBvbGQgTWFydmVsbCdzCkFybSBUcnVzdGVkIEZpcm13YXJlIikK ClJlcGxhY2UgdGhpcyBSUEMgaW1wbGVtZW50YXRpb24gd2l0aCBwcm9wZXIgbmF0aXZlIGtlcm5l bCBpbXBsZW1lbnRhdGlvbiwKd2hpY2ggaXMgaW5kZXBlbmRlbnQgb24gdGhlIGZpcm13YXJlLiBO ZXZlciByZXR1cm4gLUVPUE5PVFNVUFAgZm9yIHByb3Blcgphcmd1bWVudHMuCgpUaGlzIHNob3Vs ZCBzb2x2ZSBtdWx0aXBsZSBpc3N1ZXMgd2l0aCByZWFsLXdvcmxkIGJvYXJkcywgd2hlcmUgaXQg aXMgbm90CnBvc3NpYmxlIG9yIHJlYWxseSBpbmNvbnZlbmllbnQgdG8gY2hhbmdlIHRoZSBmaXJt d2FyZS4gTGV0J3MgZWxpbWluYXRlCnRoZXNlIGlzc3Vlcy4KClRoaXMgaW1wbGVtZW50YXRpb24g aXMgcG9ydGVkIGRpcmVjdGx5IGZyb20gQXJtYWRhIDM3MjAgY29tcGh5IGRyaXZlciBmb3VuZApp biBuZXdlc3QgdmVyc2lvbiBvZiBBUk0gVHJ1c3RlZCBGaXJtd2FyZSBzb3VyY2UgY29kZSwgYnV0 IHdpdGggdmFyaW91cwpmaXhlcyBvZiByZWdpc3RlciBuYW1lcywgc29tZSBhZGRlZCBjb21tZW50 cywgc29tZSByZWZhY3RvcmluZyBkdWUgdG8gdGhlCm9yaWdpbmFsIGNvZGUgbm90IGNvbmZvcm1p bmcgdG8ga2VybmVsIHN0YW5kYXJkcy4gQWxzbyBQQ0llIG1vZGUgcG93ZXJvZmYKc3VwcG9ydCB3 YXMgYWRkZWQgaGVyZSwgYW5kIFBIWSByZXNldCBzdXBwb3J0LiBUaGVzZSBjaGFuZ2VzIGFyZSBh bHNvIGdvaW5nCnRvIGJlIHNlbnQgdG8gQVJNIFRydXN0ZWQgRmlybXdhcmUuCgpTaWduZWQtb2Zm LWJ5OiBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgpBY2tlZC1ieTogTWlxdWVsIFJheW5h bCA8bWlxdWVsLnJheW5hbEBib290bGluLmNvbT4KWyBQYWxpIGRpZCB0aGUgcG9ydGluZyBmcm9t IEFURi4KICBJIChNYXJlaykgdGhlbiBmaXhlZCBzb21lIHJlZ2lzdGVyIG5hbWVzLCBzb21lIHZh cmlvdXMgb3RoZXIgdGhpbmdzLAogIGFkZGVkIHNvbWUgY29tbWVudHMgYW5kIHJlZmFjdG9yZWQg dGhlIGNvZGUgdG8ga2VybmVsIHN0YW5kYXJkcy4gQWxzbwogIGZpeGVkIFBIWSBwb3dlcm9mZiBh bmQgYWRkZWQgUEhZIHJlc2V0LiBdClNpZ25lZC1vZmYtYnk6IE1hcmVrIEJlaMO6biA8a2FiZWxA a2VybmVsLm9yZz4KLS0tCkNoYW5nZXMgc2luY2UgdjI6Ci0gY2hhbmdlZCByYXcgc3BpbiBsb2Nr IHRvIG9yZGluYXJ5IHNwaW4gbG9jawotIGZpeGVkIGluZGVudGF0aW9uIG9mIGdiZV9waHlfaW5p dF9maXgKLSB1c2UgRklFTERfUFJFUCgpIG1hY3JvCkNoYW5nZXMgc2luY2UgdjE6Ci0gcmVmYWN0 b3JlZCB0byB1c2UgR0VOTUFTSygpCi0gZml4ZWQgdmFyaW91cyByZWdpc3RlciBuYW1lcyB0byBj b25mb3JtIHRvIEZ1bmN0aW9uYWwgU3BlY2lmaWNhdGlvbgotIHJlZmFjdG9yZWQgdmFyaW91cyBy ZWdpc3RlciBuYW1lcyB0byBoYXZlIHVuaWZvcm0gbmFtaW5nCi0gcmVmYWN0b3JlZCByZWdpc3Rl ciBhY2Nlc3MgaW50byBvbmUgZnVuY3Rpb24sIHdoaWNoIGRlY2lkZXMgd2hldGhlcgogIHRoZSBh Y2Nlc3Mgc2hvdWxkIGJlIGRpcmVjdCBvciBpbmRpcmVjdCwgc28gYXMgdG8gbm90IGhhdmUgYWxs IHRoZXNlCiAgY2hlY2tzIGRvbmUgZXZlcnl3aGVyZSBpbiB0aGUgY29kZQotIG1vdmVkIGFyb3Vu ZCBvbmUgcmVnaXN0ZXIgZGVmaW5pdGlvbiB0byBoYXZlIHRoZSByZWdpc3RlcnMgc29ydGVkCiAg YWNjb3JkaW5nIHRvIHRoZWlyIG9mZnNldAotIGFkZGVkIGNvbW1lbnRzIHRvIHNvbWUgcmVnaXN0 ZXIgZGVmaW5pdGlvbnMKLSBhZGRlZCBzdXBwb3J0IGZvciBQSFkgcmVzZXQoKSBtZXRob2QKLSB3 aGVuIGNoYW5naW5nIFBIWSBtb2RlLCB0aGUgZHJpdmVyIG5vdyByZXNldHMgdGhlIFBIWSBhbmQg aXRzCiAgcmVnaXN0ZXJzIHRvIHB1dCB0aGUgUEhZIGluIGtub3duIHN0YXRlCi0gZml4ZWQgdGhl IHBvd2VyX29mZigpIG1ldGhvZAotIGFkZGVkIHNwaW5sb2NrIGd1YXJkIHdoZW4gYWNjZXNzaW5n IFBIWSBTZWxlY3RvciByZWdpc3Rlciwgc2luY2UgaXQKICBpcyBzaGFyZWQgYmV0d2VlbiB0aGUg UEhZcyBhbmQgc28gdGhlIFBIWSBtdXRleCBpcyBpbnN1ZmZpY2llbnQKLSB1cG9uIGRyaXZlciBw cm9iZSBjaGFuZ2VkIHRoZSBjYWxscyB0byBwb3dlcl9vZmYoKSB0byByZXNldCgpCi0tLQogZHJp dmVycy9waHkvbWFydmVsbC9waHktbXZlYnUtYTM3MDAtY29tcGh5LmMgfCAxMzUxICsrKysrKysr KysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDEyMzQgaW5zZXJ0aW9ucygrKSwgMTE3IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21hcnZlbGwvcGh5LW12ZWJ1LWEzNzAw LWNvbXBoeS5jIGIvZHJpdmVycy9waHkvbWFydmVsbC9waHktbXZlYnUtYTM3MDAtY29tcGh5LmMK aW5kZXggZGJiMmQ0MzA4ODUxLi5jYmRhNDdjMzNiOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5 L21hcnZlbGwvcGh5LW12ZWJ1LWEzNzAwLWNvbXBoeS5jCisrKyBiL2RyaXZlcnMvcGh5L21hcnZl bGwvcGh5LW12ZWJ1LWEzNzAwLWNvbXBoeS5jCkBAIC01LDEyICs1LDE2IEBACiAgKiBBdXRob3Jz OgogICogICBFdmFuIFdhbmcgPHhzd2FuZ0BtYXJ2ZWxsLmNvbT4KICAqICAgTWlxdcOobCBSYXlu YWwgPG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20+CisgKiAgIFBhbGkgUm9ow6FyIDxwYWxpQGtl cm5lbC5vcmc+CisgKiAgIE1hcmVrIEJlaMO6biA8a2FiZWxAa2VybmVsLm9yZz4KICAqCiAgKiBT dHJ1Y3R1cmUgaW5zcGlyZWQgZnJvbSBwaHktbXZlYnUtY3AxMTAtY29tcGh5LmMgd3JpdHRlbiBi eSBBbnRvaW5lIFRlbmFydC4KLSAqIFNNQyBjYWxsIGluaXRpYWwgc3VwcG9ydCBkb25lIGJ5IEdy emVnb3J6IEphc3pjenlrLgorICogQ29tcGh5IGNvZGUgZnJvbSBBUk0gVHJ1c3RlZCBGaXJtd2Fy ZSBwb3J0ZWQgYnkgUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KKyAqIGFuZCBNYXJlayBC ZWjDum4gPGthYmVsQGtlcm5lbC5vcmc+LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9hcm0tc21j Y2MuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CiAjaW5j bHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgpAQCAtMTgsMTAzICsyMiwxMTQ3IEBACiAjaW5jbHVk ZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgogI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKLSNk ZWZpbmUgTVZFQlVfQTM3MDBfQ09NUEhZX0xBTkVTCQkzCi0KLS8qIENPTVBIWSBGYXN0IFNNQyBm dW5jdGlvbiBpZGVudGlmaWVycyAqLwotI2RlZmluZSBDT01QSFlfU0lQX1BPV0VSX09OCQkJMHg4 MjAwMDAwMQotI2RlZmluZSBDT01QSFlfU0lQX1BPV0VSX09GRgkJCTB4ODIwMDAwMDIKLSNkZWZp bmUgQ09NUEhZX1NJUF9QTExfTE9DSwkJCTB4ODIwMDAwMDMKLQotI2RlZmluZSBDT01QSFlfRldf TU9ERV9TQVRBCQkJMHgxCi0jZGVmaW5lIENPTVBIWV9GV19NT0RFX1NHTUlJCQkJMHgyCi0jZGVm aW5lIENPTVBIWV9GV19NT0RFXzI1MDBCQVNFWAkJMHgzCi0jZGVmaW5lIENPTVBIWV9GV19NT0RF X1VTQjNICQkJMHg0Ci0jZGVmaW5lIENPTVBIWV9GV19NT0RFX1VTQjNECQkJMHg1Ci0jZGVmaW5l IENPTVBIWV9GV19NT0RFX1BDSUUJCQkweDYKLSNkZWZpbmUgQ09NUEhZX0ZXX01PREVfVVNCMwkJ CTB4YQotCi0jZGVmaW5lIENPTVBIWV9GV19TUEVFRF8xXzI1RwkJCTAgLyogU0dNSUkgMUcgKi8K LSNkZWZpbmUgQ09NUEhZX0ZXX1NQRUVEXzJfNUcJCQkxCi0jZGVmaW5lIENPTVBIWV9GV19TUEVF RF8zXzEyNUcJCQkyIC8qIDI1MDBCQVNFLVggKi8KLSNkZWZpbmUgQ09NUEhZX0ZXX1NQRUVEXzVH CQkJMwotI2RlZmluZSBDT01QSFlfRldfU1BFRURfTUFYCQkJMHgzRgotCi0jZGVmaW5lIENPTVBI WV9GV19NT0RFKG1vZGUpCQkJKChtb2RlKSA8PCAxMikKLSNkZWZpbmUgQ09NUEhZX0ZXX05FVCht b2RlLCBpZHgsIHNwZWVkKQkJKENPTVBIWV9GV19NT0RFKG1vZGUpIHwgXAotCQkJCQkJICgoaWR4 KSA8PCA4KSB8CVwKLQkJCQkJCSAoKHNwZWVkKSA8PCAyKSkKLSNkZWZpbmUgQ09NUEhZX0ZXX1BD SUUobW9kZSwgc3BlZWQsIHdpZHRoKQkoQ09NUEhZX0ZXX05FVChtb2RlLCAwLCBzcGVlZCkgfCBc Ci0JCQkJCQkgKCh3aWR0aCkgPDwgMTgpKQorI2RlZmluZSBQTExfU0VUX0RFTEFZX1VTCQk2MDAK KyNkZWZpbmUgQ09NUEhZX1BMTF9TTEVFUAkJMTAwMAorI2RlZmluZSBDT01QSFlfUExMX1RJTUVP VVQJCTE1MDAwMAorCisvKiBDb21waHkgbGFuZTIgaW5kaXJlY3QgYWNjZXNzIHJlZ2lzdGVyIG9m ZnNldCAqLworI2RlZmluZSBDT01QSFlfTEFORTJfSU5ESVJfQUREUgkJMHgwCisjZGVmaW5lIENP TVBIWV9MQU5FMl9JTkRJUl9EQVRBCQkweDQKKworLyogU0FUQSBhbmQgVVNCMyBQSFkgb2Zmc2V0 IGNvbXBhcmVkIHRvIFNBVEEgUEhZICovCisjZGVmaW5lIENPTVBIWV9MQU5FMl9SRUdTX0JBU0UJ CTB4MjAwCisKKy8qCisgKiBXaGVuIGFjY2Vzc2luZyBjb21tb24gUEhZIGxhbmUgcmVnaXN0ZXJz IGRpcmVjdGx5LCB3ZSBuZWVkIHRvIHNoaWZ0IGJ5IDEsCisgKiBzaW5jZSB0aGUgcmVnaXN0ZXJz IGFyZSAxNi1iaXQuCisgKi8KKyNkZWZpbmUgQ09NUEhZX0xBTkVfUkVHX0RJUkVDVChyZWcpCSgo KHJlZykgJiAweDdGRikgPDwgMSkKKworLyogQ09NUEhZIHJlZ2lzdGVycyAqLworI2RlZmluZSBD T01QSFlfUE9XRVJfUExMX0NUUkwJCTB4MDEKKyNkZWZpbmUgUFVfSVZSRUZfQklUCQkJQklUKDE1 KQorI2RlZmluZSBQVV9QTExfQklUCQkJQklUKDE0KQorI2RlZmluZSBQVV9SWF9CSVQJCQlCSVQo MTMpCisjZGVmaW5lIFBVX1RYX0JJVAkJCUJJVCgxMikKKyNkZWZpbmUgUFVfVFhfSU5UUF9CSVQJ CQlCSVQoMTEpCisjZGVmaW5lIFBVX0RGRV9CSVQJCQlCSVQoMTApCisjZGVmaW5lIFJFU0VUX0RU TF9SWF9CSVQJCUJJVCg5KQorI2RlZmluZSBQTExfTE9DS19CSVQJCQlCSVQoOCkKKyNkZWZpbmUg UkVGX0ZSRUZfU0VMX01BU0sJCUdFTk1BU0soNCwgMCkKKyNkZWZpbmUgUkVGX0ZSRUZfU0VMX1NF UkRFU18yNU1IWglGSUVMRF9QUkVQKFJFRl9GUkVGX1NFTF9NQVNLLCAweDEpCisjZGVmaW5lIFJF Rl9GUkVGX1NFTF9TRVJERVNfNDBNSFoJRklFTERfUFJFUChSRUZfRlJFRl9TRUxfTUFTSywgMHgz KQorI2RlZmluZSBSRUZfRlJFRl9TRUxfU0VSREVTXzUwTUhaCUZJRUxEX1BSRVAoUkVGX0ZSRUZf U0VMX01BU0ssIDB4NCkKKyNkZWZpbmUgUkVGX0ZSRUZfU0VMX1BDSUVfVVNCM18yNU1IWglGSUVM RF9QUkVQKFJFRl9GUkVGX1NFTF9NQVNLLCAweDIpCisjZGVmaW5lIFJFRl9GUkVGX1NFTF9QQ0lF X1VTQjNfNDBNSFoJRklFTERfUFJFUChSRUZfRlJFRl9TRUxfTUFTSywgMHgzKQorI2RlZmluZSBD T01QSFlfTU9ERV9NQVNLCQlHRU5NQVNLKDcsIDUpCisjZGVmaW5lIENPTVBIWV9NT0RFX1NBVEEJ CUZJRUxEX1BSRVAoQ09NUEhZX01PREVfTUFTSywgMHgwKQorI2RlZmluZSBDT01QSFlfTU9ERV9Q Q0lFCQlGSUVMRF9QUkVQKENPTVBIWV9NT0RFX01BU0ssIDB4MykKKyNkZWZpbmUgQ09NUEhZX01P REVfU0VSREVTCQlGSUVMRF9QUkVQKENPTVBIWV9NT0RFX01BU0ssIDB4NCkKKyNkZWZpbmUgQ09N UEhZX01PREVfVVNCMwkJRklFTERfUFJFUChDT01QSFlfTU9ERV9NQVNLLCAweDUpCisKKyNkZWZp bmUgQ09NUEhZX0tWQ09fQ0FMX0NUUkwJCTB4MDIKKyNkZWZpbmUgVVNFX01BWF9QTExfUkFURV9C SVQJCUJJVCgxMikKKyNkZWZpbmUgU1BFRURfUExMX01BU0sJCQlHRU5NQVNLKDcsIDIpCisjZGVm aW5lIFNQRUVEX1BMTF9WQUxVRV8xNgkJRklFTERfUFJFUChTUEVFRF9QTExfTUFTSywgMHgxMCkK KworI2RlZmluZSBDT01QSFlfRElHX0xPT1BCQUNLX0VOCQkweDIzCisjZGVmaW5lIFNFTF9EQVRB X1dJRFRIX01BU0sJCUdFTk1BU0soMTEsIDEwKQorI2RlZmluZSBEQVRBX1dJRFRIXzEwQklUCQlG SUVMRF9QUkVQKFNFTF9EQVRBX1dJRFRIX01BU0ssIDB4MCkKKyNkZWZpbmUgREFUQV9XSURUSF8y MEJJVAkJRklFTERfUFJFUChTRUxfREFUQV9XSURUSF9NQVNLLCAweDEpCisjZGVmaW5lIERBVEFf V0lEVEhfNDBCSVQJCUZJRUxEX1BSRVAoU0VMX0RBVEFfV0lEVEhfTUFTSywgMHgyKQorI2RlZmlu ZSBQTExfUkVBRFlfVFhfQklUCQlCSVQoNCkKKworI2RlZmluZSBDT01QSFlfU1lOQ19QQVRURVJO CQkweDI0CisjZGVmaW5lIFRYRF9JTlZFUlRfQklUCQkJQklUKDEwKQorI2RlZmluZSBSWERfSU5W RVJUX0JJVAkJCUJJVCgxMSkKKworI2RlZmluZSBDT01QSFlfU1lOQ19NQVNLX0dFTgkJMHgyNQor I2RlZmluZSBQSFlfR0VOX01BWF9NQVNLCQlHRU5NQVNLKDExLCAxMCkKKyNkZWZpbmUgUEhZX0dF Tl9NQVhfVVNCM181RwkJRklFTERfUFJFUChQSFlfR0VOX01BWF9NQVNLLCAweDEpCisKKyNkZWZp bmUgQ09NUEhZX0lTT0xBVElPTl9DVFJMCQkweDI2CisjZGVmaW5lIFBIWV9JU09MQVRFX01PREUJ CUJJVCgxNSkKKworI2RlZmluZSBDT01QSFlfR0VOMl9TRVQyCQkweDNlCisjZGVmaW5lIEdTMl9U WF9TU0NfQU1QX01BU0sJCUdFTk1BU0soMTUsIDkpCisjZGVmaW5lIEdTMl9UWF9TU0NfQU1QXzQx MjgJCUZJRUxEX1BSRVAoR1MyX1RYX1NTQ19BTVBfTUFTSywgMHgyMCkKKyNkZWZpbmUgR1MyX1ZS RUdfUlhUWF9NQVNfSVNFVF9NQVNLCUdFTk1BU0soOCwgNykKKyNkZWZpbmUgR1MyX1ZSRUdfUlhU WF9NQVNfSVNFVF82MFUJRklFTERfUFJFUChHUzJfVlJFR19SWFRYX01BU19JU0VUX01BU0ssXAor CQkJCQkJICAgMHgwKQorI2RlZmluZSBHUzJfVlJFR19SWFRYX01BU19JU0VUXzgwVQlGSUVMRF9Q UkVQKEdTMl9WUkVHX1JYVFhfTUFTX0lTRVRfTUFTSyxcCisJCQkJCQkgICAweDEpCisjZGVmaW5l IEdTMl9WUkVHX1JYVFhfTUFTX0lTRVRfMTAwVQlGSUVMRF9QUkVQKEdTMl9WUkVHX1JYVFhfTUFT X0lTRVRfTUFTSyxcCisJCQkJCQkgICAweDIpCisjZGVmaW5lIEdTMl9WUkVHX1JYVFhfTUFTX0lT RVRfMTIwVQlGSUVMRF9QUkVQKEdTMl9WUkVHX1JYVFhfTUFTX0lTRVRfTUFTSyxcCisJCQkJCQkg ICAweDMpCisjZGVmaW5lIEdTMl9SU1ZEXzZfMF9NQVNLCQlHRU5NQVNLKDYsIDApCisKKyNkZWZp bmUgQ09NUEhZX0dFTjNfU0VUMgkJMHgzZgorCisjZGVmaW5lIENPTVBIWV9JRExFX1NZTkNfRU4J CTB4NDgKKyNkZWZpbmUgSURMRV9TWU5DX0VOCQkJQklUKDEyKQorCisjZGVmaW5lIENPTVBIWV9N SVNDX0NUUkwwCQkweDRGCisjZGVmaW5lIENMSzEwME1fMTI1TV9FTgkJCUJJVCg0KQorI2RlZmlu ZSBUWERDTEtfMlhfU0VMCQkJQklUKDYpCisjZGVmaW5lIENMSzUwME1fRU4JCQlCSVQoNykKKyNk ZWZpbmUgUEhZX1JFRl9DTEtfU0VMCQkJQklUKDEwKQorCisjZGVmaW5lIENPTVBIWV9TRlRfUkVT RVQJCTB4NTIKKyNkZWZpbmUgU0ZUX1JTVAkJCQlCSVQoOSkKKyNkZWZpbmUgU0ZUX1JTVF9OT19S RUcJCQlCSVQoMTApCisKKyNkZWZpbmUgQ09NUEhZX01JU0NfQ1RSTDEJCTB4NzMKKyNkZWZpbmUg U0VMX0JJVFNfUENJRV9GT1JDRQkJQklUKDE1KQorCisjZGVmaW5lIENPTVBIWV9HRU4yX1NFVDMJ CTB4MTEyCisjZGVmaW5lIEdTM19GRkVfQ0FQX1NFTF9NQVNLCQlHRU5NQVNLKDMsIDApCisjZGVm aW5lIEdTM19GRkVfQ0FQX1NFTF9WQUxVRQkJRklFTERfUFJFUChHUzNfRkZFX0NBUF9TRUxfTUFT SywgMHhGKQorCisvKiBQSVBFIHJlZ2lzdGVycyAqLworI2RlZmluZSBDT01QSFlfUElQRV9MQU5F X0NGRzAJCTB4MTgwCisjZGVmaW5lIFBSRF9UWERFRU1QSDBfTUFTSwkJQklUKDApCisjZGVmaW5l IFBSRF9UWE1BUkdJTl9NQVNLCQlHRU5NQVNLKDMsIDEpCisjZGVmaW5lIFBSRF9UWFNXSU5HX01B U0sJCUJJVCg0KQorI2RlZmluZSBDRkdfVFhfQUxJR05fUE9TX01BU0sJCUdFTk1BU0soOCwgNSkK KworI2RlZmluZSBDT01QSFlfUElQRV9MQU5FX0NGRzEJCTB4MTgxCisjZGVmaW5lIFBSRF9UWERF RU1QSDFfTUFTSwkJQklUKDE1KQorI2RlZmluZSBVU0VfTUFYX1BMTF9SQVRFX0VOCQlCSVQoOSkK KyNkZWZpbmUgVFhfREVUX1JYX01PREUJCQlCSVQoNikKKyNkZWZpbmUgR0VOMl9UWF9EQVRBX0RM WV9NQVNLCQlHRU5NQVNLKDQsIDMpCisjZGVmaW5lIEdFTjJfVFhfREFUQV9ETFlfREVGVAkJRklF TERfUFJFUChHRU4yX1RYX0RBVEFfRExZX01BU0ssIDIpCisjZGVmaW5lIFRYX0VMRUNfSURMRV9N T0RFX0VOCQlCSVQoMCkKKworI2RlZmluZSBDT01QSFlfUElQRV9MQU5FX1NUQVQxCQkweDE4Mwor I2RlZmluZSBUWERDTEtfUENMS19FTgkJCUJJVCgwKQorCisjZGVmaW5lIENPTVBIWV9QSVBFX0xB TkVfQ0ZHNAkJMHgxODgKKyNkZWZpbmUgU1BSRUFEX1NQRUNUUlVNX0NMS19FTgkJQklUKDcpCisK KyNkZWZpbmUgQ09NUEhZX1BJUEVfUlNUX0NMS19DVFJMCTB4MUMxCisjZGVmaW5lIFBJUEVfU09G VF9SRVNFVAkJCUJJVCgwKQorI2RlZmluZSBQSVBFX1JFR19SRVNFVAkJCUJJVCgxKQorI2RlZmlu ZSBNT0RFX0NPUkVfQ0xLX0ZSRVFfU0VMCQlCSVQoOSkKKyNkZWZpbmUgTU9ERV9QSVBFX1dJRFRI XzMyCQlCSVQoMykKKyNkZWZpbmUgTU9ERV9SRUZESVZfTUFTSwkJR0VOTUFTSyg1LCA0KQorI2Rl ZmluZSBNT0RFX1JFRkRJVl9CWV80CQlGSUVMRF9QUkVQKE1PREVfUkVGRElWX01BU0ssIDB4MikK KworI2RlZmluZSBDT01QSFlfUElQRV9URVNUX01PREVfQ1RSTAkweDFDMgorI2RlZmluZSBNT0RF X01BUkdJTl9PVkVSUklERQkJQklUKDIpCisKKyNkZWZpbmUgQ09NUEhZX1BJUEVfQ0xLX1NSQ19M TwkJMHgxQzMKKyNkZWZpbmUgTU9ERV9DTEtfU1JDCQkJQklUKDApCisjZGVmaW5lIEJVTkRMRV9Q RVJJT0RfU0VMCQlCSVQoMSkKKyNkZWZpbmUgQlVORExFX1BFUklPRF9TQ0FMRV9NQVNLCUdFTk1B U0soMywgMikKKyNkZWZpbmUgQlVORExFX1NBTVBMRV9DVFJMCQlCSVQoNCkKKyNkZWZpbmUgUExM X1JFQURZX0RMWV9NQVNLCQlHRU5NQVNLKDcsIDUpCisjZGVmaW5lIENGR19TRUxfMjBCCQkJQklU KDE1KQorCisjZGVmaW5lIENPTVBIWV9QSVBFX1BXUl9NR01fVElNMQkweDFEMAorI2RlZmluZSBD RkdfUE1fT1NDQ0xLX1dBSVRfTUFTSwkJR0VOTUFTSygxNSwgMTIpCisjZGVmaW5lIENGR19QTV9S WERFTl9XQUlUX01BU0sJCUdFTk1BU0soMTEsIDgpCisjZGVmaW5lIENGR19QTV9SWERFTl9XQUlU XzFfVU5JVAlGSUVMRF9QUkVQKENGR19QTV9SWERFTl9XQUlUX01BU0ssIDB4MSkKKyNkZWZpbmUg Q0ZHX1BNX1JYRExPWl9XQUlUX01BU0sJCUdFTk1BU0soNywgMCkKKyNkZWZpbmUgQ0ZHX1BNX1JY RExPWl9XQUlUXzdfVU5JVAlGSUVMRF9QUkVQKENGR19QTV9SWERMT1pfV0FJVF9NQVNLLCAweDcp CisjZGVmaW5lIENGR19QTV9SWERMT1pfV0FJVF8xMl9VTklUCUZJRUxEX1BSRVAoQ0ZHX1BNX1JY RExPWl9XQUlUX01BU0ssIDB4QykKKworLyoKKyAqIFRoaXMgcmVnaXN0ZXIgaXMgbm90IGZyb20g UEhZIGxhbmUgcmVnaXN0ZXIgc3BhY2UuIEl0IG9ubHkgZXhpc3RzIGluIHRoZQorICogaW5kaXJl Y3QgcmVnaXN0ZXIgc3BhY2UsIGJlZm9yZSB0aGUgYWN0dWFsIFBIWSBsYW5lIDIgcmVnaXN0ZXJz LiBTbyB0aGUKKyAqIG9mZnNldCBpcyBhYnNvbHV0ZSwgbm90IHJlbGF0aXZlIHRvIENPTVBIWV9M QU5FMl9SRUdTX0JBU0UuCisgKiBJdCBpcyB1c2VkIG9ubHkgZm9yIFNBVEEgUEhZIGluaXRpYWxp emF0aW9uLgorICovCisjZGVmaW5lIENPTVBIWV9SRVNFUlZFRF9SRUcJCTB4MEUKKyNkZWZpbmUg UEhZQ1RSTF9GUk1fUElOX0JJVAkJQklUKDEzKQorCisvKiBTb3V0aCBCcmlkZ2UgUEhZIENvbmZp Z3VyYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIENPTVBIWV9QSFlfUkVHKGxhbmUsIHJlZykJ KCgoMSAtIChsYW5lKSkgKiAweDI4KSArICgocmVnKSAmIDB4M2YpKQorCisvKgorICogbGFuZTA6 IFVTQjMvR2JFMSBQSFkgQ29uZmlndXJhdGlvbiAxCisgKiBsYW5lMTogUENJZS9HYkUwIFBIWSBD b25maWd1cmF0aW9uIDEKKyAqICh1c2VkIG9ubHkgYnkgU0dNSUkgY29kZSkKKyAqLworI2RlZmlu ZSBDT01QSFlfUEhZX0NGRzEJCQkweDAKKyNkZWZpbmUgUElOX1BVX0lWUkVGX0JJVAkJQklUKDEp CisjZGVmaW5lIFBJTl9SRVNFVF9DT1JFX0JJVAkJQklUKDExKQorI2RlZmluZSBQSU5fUkVTRVRf Q09NUEhZX0JJVAkJQklUKDEyKQorI2RlZmluZSBQSU5fUFVfUExMX0JJVAkJCUJJVCgxNikKKyNk ZWZpbmUgUElOX1BVX1JYX0JJVAkJCUJJVCgxNykKKyNkZWZpbmUgUElOX1BVX1RYX0JJVAkJCUJJ VCgxOCkKKyNkZWZpbmUgUElOX1RYX0lETEVfQklUCQkJQklUKDE5KQorI2RlZmluZSBHRU5fUlhf U0VMX01BU0sJCQlHRU5NQVNLKDI1LCAyMikKKyNkZWZpbmUgR0VOX1JYX1NFTF9WQUxVRSh2YWwp CQlGSUVMRF9QUkVQKEdFTl9SWF9TRUxfTUFTSywgKHZhbCkpCisjZGVmaW5lIEdFTl9UWF9TRUxf TUFTSwkJCUdFTk1BU0soMjksIDI2KQorI2RlZmluZSBHRU5fVFhfU0VMX1ZBTFVFKHZhbCkJCUZJ RUxEX1BSRVAoR0VOX1RYX1NFTF9NQVNLLCAodmFsKSkKKyNkZWZpbmUgU0VSREVTX1NQRUVEXzFf MjVfRwkJMHg2CisjZGVmaW5lIFNFUkRFU19TUEVFRF8zXzEyNV9HCQkweDgKKyNkZWZpbmUgUEhZ X1JYX0lOSVRfQklUCQkJQklUKDMwKQorCisvKgorICogbGFuZTA6IFVTQjMvR2JFMSBQSFkgU3Rh dHVzIDEKKyAqIGxhbmUxOiBQQ0llL0diRTAgUEhZIFN0YXR1cyAxCisgKiAodXNlZCBvbmx5IGJ5 IFNHTUlJIGNvZGUpCisgKi8KKyNkZWZpbmUgQ09NUEhZX1BIWV9TVEFUMQkJMHgxOAorI2RlZmlu ZSBQSFlfUlhfSU5JVF9ET05FX0JJVAkJQklUKDApCisjZGVmaW5lIFBIWV9QTExfUkVBRFlfUlhf QklUCQlCSVQoMikKKyNkZWZpbmUgUEhZX1BMTF9SRUFEWV9UWF9CSVQJCUJJVCgzKQorCisvKiBQ SFkgU2VsZWN0b3IgKi8KKyNkZWZpbmUgQ09NUEhZX1NFTEVDVE9SX1BIWV9SRUcJCQkweEZDCisv KiBiaXQwOiAwOiBMYW5lMSBpcyBHYkUwOyAxOiBMYW5lMSBpcyBQQ0llICovCisjZGVmaW5lIENP TVBIWV9TRUxFQ1RPUl9QQ0lFX0dCRTBfU0VMX0JJVAlCSVQoMCkKKy8qIGJpdDQ6IDA6IExhbmUw IGlzIEdiRTE7IDE6IExhbmUwIGlzIFVTQjMgKi8KKyNkZWZpbmUgQ09NUEhZX1NFTEVDVE9SX1VT QjNfR0JFMV9TRUxfQklUCUJJVCg0KQorLyogYml0ODogMDogTGFuZTAgaXMgVVNCMyBpbnN0ZWFk IG9mIEdiRTEsIExhbmUyIGlzIFNBVEE7IDE6IExhbmUyIGlzIFVTQjMgKi8KKyNkZWZpbmUgQ09N UEhZX1NFTEVDVE9SX1VTQjNfUEhZX1NFTF9CSVQJQklUKDgpCiAKIHN0cnVjdCBtdmVidV9hMzcw MF9jb21waHlfY29uZiB7CiAJdW5zaWduZWQgaW50IGxhbmU7CiAJZW51bSBwaHlfbW9kZSBtb2Rl OwogCWludCBzdWJtb2RlOwotCXUzMiBmd19tb2RlOwogfTsKIAotI2RlZmluZSBNVkVCVV9BMzcw MF9DT01QSFlfQ09ORihfbGFuZSwgX21vZGUsIF9zbW9kZSwgX2Z3KQkJXAorI2RlZmluZSBNVkVC VV9BMzcwMF9DT01QSFlfQ09ORihfbGFuZSwgX21vZGUsIF9zbW9kZSkJCQlcCiAJewkJCQkJCQkJ XAogCQkubGFuZSA9IF9sYW5lLAkJCQkJCVwKIAkJLm1vZGUgPSBfbW9kZSwJCQkJCQlcCiAJCS5z dWJtb2RlID0gX3Ntb2RlLAkJCQkJXAotCQkuZndfbW9kZSA9IF9mdywJCQkJCQlcCiAJfQogCi0j ZGVmaW5lIE1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0dFTihfbGFuZSwgX21vZGUsIF9mdykgXAot CU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GKF9sYW5lLCBfbW9kZSwgUEhZX0lOVEVSRkFDRV9NT0RF X05BLCBfZncpCisjZGVmaW5lIE1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0dFTihfbGFuZSwgX21v ZGUpIFwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORihfbGFuZSwgX21vZGUsIFBIWV9JTlRFUkZB Q0VfTU9ERV9OQSkKIAotI2RlZmluZSBNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoX2xhbmUs IF9zbW9kZSwgX2Z3KSBcCi0JTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkYoX2xhbmUsIFBIWV9NT0RF X0VUSEVSTkVULCBfc21vZGUsIF9mdykKKyNkZWZpbmUgTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZf RVRIKF9sYW5lLCBfc21vZGUpIFwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORihfbGFuZSwgUEhZ X01PREVfRVRIRVJORVQsIF9zbW9kZSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtdmVidV9hMzcw MF9jb21waHlfY29uZiBtdmVidV9hMzcwMF9jb21waHlfbW9kZXNbXSA9IHsKIAkvKiBsYW5lIDAg Ki8KLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4oMCwgUEhZX01PREVfVVNCX0hPU1RfU1Ms Ci0JCQkJICAgIENPTVBIWV9GV19NT0RFX1VTQjNIKSwKLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09O Rl9FVEgoMCwgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLAotCQkJCSAgICBDT01QSFlfRldfTU9E RV9TR01JSSksCi0JTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRIKDAsIFBIWV9JTlRFUkZBQ0Vf TU9ERV8yNTAwQkFTRVgsCi0JCQkJICAgIENPTVBIWV9GV19NT0RFXzI1MDBCQVNFWCksCisJTVZF QlVfQTM3MDBfQ09NUEhZX0NPTkZfR0VOKDAsIFBIWV9NT0RFX1VTQl9IT1NUX1NTKSwKKwlNVkVC VV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMCwgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSwKKwlN VkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMCwgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNF WCksCisJTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRIKDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV8y NTAwQkFTRVgpLAogCS8qIGxhbmUgMSAqLwotCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0dFTigx LCBQSFlfTU9ERV9QQ0lFLCBDT01QSFlfRldfTU9ERV9QQ0lFKSwKLQlNVkVCVV9BMzcwMF9DT01Q SFlfQ09ORl9FVEgoMSwgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLAotCQkJCSAgICBDT01QSFlf RldfTU9ERV9TR01JSSksCi0JTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRIKDEsIFBIWV9JTlRF UkZBQ0VfTU9ERV8yNTAwQkFTRVgsCi0JCQkJICAgIENPTVBIWV9GV19NT0RFXzI1MDBCQVNFWCks CisJTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfR0VOKDEsIFBIWV9NT0RFX1BDSUUpLAorCU1WRUJV X0EzNzAwX0NPTVBIWV9DT05GX0VUSCgxLCBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpLAorCU1W RUJVX0EzNzAwX0NPTVBIWV9DT05GX0VUSCgxLCBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VY KSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMSwgUEhZX0lOVEVSRkFDRV9NT0RFXzI1 MDBCQVNFWCksCiAJLyogbGFuZSAyICovCi0JTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfR0VOKDIs IFBIWV9NT0RFX1NBVEEsIENPTVBIWV9GV19NT0RFX1NBVEEpLAotCU1WRUJVX0EzNzAwX0NPTVBI WV9DT05GX0dFTigyLCBQSFlfTU9ERV9VU0JfSE9TVF9TUywKLQkJCQkgICAgQ09NUEhZX0ZXX01P REVfVVNCM0gpLAorCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0dFTigyLCBQSFlfTU9ERV9TQVRB KSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4oMiwgUEhZX01PREVfVVNCX0hPU1RfU1Mp LAorfTsKKworc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9wcml2IHsKKwl2b2lkIF9faW9tZW0g KmNvbXBoeV9yZWdzOworCXZvaWQgX19pb21lbSAqbGFuZTBfcGh5X3JlZ3M7IC8qIFVTQjMgYW5k IEdiRTEgKi8KKwl2b2lkIF9faW9tZW0gKmxhbmUxX3BoeV9yZWdzOyAvKiBQQ0llIGFuZCBHYkUw ICovCisJdm9pZCBfX2lvbWVtICpsYW5lMl9waHlfaW5kaXJlY3Q7IC8qIFNBVEEgYW5kIFVTQjMg Ki8KKwlzcGlubG9ja190IGxvY2s7IC8qIGZvciBQSFkgc2VsZWN0b3IgYWNjZXNzICovCisJYm9v bCB4dGFsX2lzXzQwbTsKIH07CiAKIHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSB7CisJ c3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9wcml2ICpwcml2OwogCXN0cnVjdCBkZXZpY2UgKmRl djsKIAl1bnNpZ25lZCBpbnQgaWQ7CiAJZW51bSBwaHlfbW9kZSBtb2RlOwogCWludCBzdWJtb2Rl OworCWJvb2wgaW52ZXJ0X3R4OworCWJvb2wgaW52ZXJ0X3J4OworCWJvb2wgbmVlZHNfcmVzZXQ7 CiB9OwogCi1zdGF0aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9zbWModW5zaWduZWQgbG9uZyBm dW5jdGlvbiwgdW5zaWduZWQgbG9uZyBsYW5lLAotCQkJCSAgdW5zaWduZWQgbG9uZyBtb2RlKQor c3RydWN0IGdiZV9waHlfaW5pdF9kYXRhX2ZpeCB7CisJdTE2IGFkZHI7CisJdTE2IHZhbHVlOwor fTsKKworLyogQ2hhbmdlcyB0byA0ME0xRzI1IG1vZGUgZGF0YSByZXF1aXJlZCBmb3IgcnVubmlu ZyA0ME0zRzEyNSBpbml0IG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgZ2JlX3BoeV9pbml0X2RhdGFf Zml4IGdiZV9waHlfaW5pdF9maXhbXSA9IHsKKwl7IDB4MDA1LCAweDA3Q0MgfSwgeyAweDAxNSwg MHgwMDAwIH0sIHsgMHgwMUIsIDB4MDAwMCB9LAorCXsgMHgwMUQsIDB4MDAwMCB9LCB7IDB4MDFF LCAweDAwMDAgfSwgeyAweDAxRiwgMHgwMDAwIH0sCisJeyAweDAyMCwgMHgwMDAwIH0sIHsgMHgw MjEsIDB4MDAzMCB9LCB7IDB4MDI2LCAweDA4ODggfSwKKwl7IDB4MDRELCAweDAxNTIgfSwgeyAw eDA0RiwgMHhBMDIwIH0sIHsgMHgwNTAsIDB4MDdDQyB9LAorCXsgMHgwNTMsIDB4RTlDQSB9LCB7 IDB4MDU1LCAweEJEOTcgfSwgeyAweDA3MSwgMHgzMDE1IH0sCisJeyAweDA3NiwgMHgwM0FBIH0s IHsgMHgwN0MsIDB4MEZERiB9LCB7IDB4MEMyLCAweDMwMzAgfSwKKwl7IDB4MEMzLCAweDgwMDAg fSwgeyAweDBFMiwgMHg1NTUwIH0sIHsgMHgwRTMsIDB4MTJBNCB9LAorCXsgMHgwRTQsIDB4N0Qw MCB9LCB7IDB4MEU2LCAweDBDODMgfSwgeyAweDEwMSwgMHhGQ0MwIH0sCisJeyAweDEwNCwgMHgw QzEwIH0KK307CisKKy8qIDQwTTFHMjUgbW9kZSBpbml0IGRhdGEgKi8KK3N0YXRpYyB1MTYgZ2Jl X3BoeV9pbml0WzUxMl0gPSB7CisJLyogMCAgICAgICAxICAgICAgIDIgICAgICAgMyAgICAgICA0 ICAgICAgIDUgICAgICAgNiAgICAgICA3ICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyogOCAgICAgICA5ICAgICAg IEEgICAgICAgQiAgICAgICBDICAgICAgIEQgICAgICAgRSAgICAgICBGICovCisJMHgzMTEwLCAw eEZEODMsIDB4NjQzMCwgMHg0MTJGLCAweDgyQzAsIDB4MDZGQSwgMHg0NTAwLCAweDZEMjYsCS8q IDAwICovCisJMHhBRkMwLCAweDgwMDAsIDB4QzAwMCwgMHgwMDAwLCAweDIwMDAsIDB4NDlDQywg MHgwQkM5LCAweDJBNTIsCS8qIDA4ICovCisJMHgwQkQyLCAweDBDREUsIDB4MTNEMiwgMHgwQ0U4 LCAweDExNDksIDB4MTBFMCwgMHgwMDAwLCAweDAwMDAsCS8qIDEwICovCisJMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAxLCAweDAwMDAsIDB4NDEzNCwgMHgwRDJELCAweEZGRkYsCS8qIDE4 ICovCisJMHhGRkUwLCAweDQwMzAsIDB4MTAxNiwgMHgwMDMwLCAweDAwMDAsIDB4MDgwMCwgMHgw ODY2LCAweDAwMDAsCS8qIDIwICovCisJMHgwMDAwLCAweDAwMDAsIDB4RkZGRiwgMHhGRkZGLCAw eEZGRkYsIDB4RkZGRiwgMHhGRkZGLCAweEZGRkYsCS8qIDI4ICovCisJMHhGRkZGLCAweEZGRkYs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIDMwICov CisJMHgwMDAwLCAweDAwMDAsIDB4MDAwRiwgMHg2QTYyLCAweDE5ODgsIDB4MzEwMCwgMHgzMTAw LCAweDMxMDAsCS8qIDM4ICovCisJMHgzMTAwLCAweEE3MDgsIDB4MjQzMCwgMHgwODMwLCAweDEw MzAsIDB4NDYxMCwgMHhGRjAwLCAweEZGMDAsCS8qIDQwICovCisJMHgwMDYwLCAweDEwMDAsIDB4 MDQwMCwgMHgwMDQwLCAweDAwRjAsIDB4MDE1NSwgMHgxMTAwLCAweEEwMkEsCS8qIDQ4ICovCisJ MHgwNkZBLCAweDAwODAsIDB4QjAwOCwgMHhFM0VELCAweDUwMDIsIDB4QjU5MiwgMHg3QTgwLCAw eDAwMDEsCS8qIDUwICovCisJMHgwMjBBLCAweDg4MjAsIDB4NjAxNCwgMHg4MDU0LCAweEFDQUEs IDB4RkM4OCwgMHgyQTAyLCAweDQ1Q0YsCS8qIDU4ICovCisJMHgwMDBGLCAweDE4MTcsIDB4Mjg2 MCwgMHgwNjRGLCAweDAwMDAsIDB4MDIwNCwgMHgxODAwLCAweDYwMDAsCS8qIDYwICovCisJMHg4 MTBGLCAweDRGMjMsIDB4NDAwMCwgMHg0NDk4LCAweDA4NTAsIDB4MDAwMCwgMHgwMDBFLCAweDEw MDIsCS8qIDY4ICovCisJMHg5RDNBLCAweDMwMDksIDB4RDA2NiwgMHgwNDkxLCAweDAwMDEsIDB4 NkFCMCwgMHgwMzk5LCAweDM3ODAsCS8qIDcwICovCisJMHgwMDQwLCAweDVBQzAsIDB4NEE4MCwg MHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMHgwMDA3LCAweDAwMDAsCS8qIDc4ICovCisJMHgyRDU0 LCAweDAwQTEsIDB4NDAwMCwgMHgwMTAwLCAweEEyMEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs CS8qIDgwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg3NDAwLCAweDBFODEsIDB4MTAw MCwgMHgxMjQyLCAweDAyMTAsCS8qIDg4ICovCisJMHg4MERGLCAweDBGMUYsIDB4MkYzRiwgMHg0 RjVGLCAweDZGN0YsIDB4MEYxRiwgMHgyRjNGLCAweDRGNUYsCS8qIDkwICovCisJMHg2RjdGLCAw eDRCQUQsIDB4MDAwMCwgMHgwMDAwLCAweDA4MDAsIDB4MDAwMCwgMHgyNDAwLCAweEI2NTEsCS8q IDk4ICovCisJMHhDOUUwLCAweDQyNDcsIDB4MEEyNCwgMHgwMDAwLCAweEFGMTksIDB4MTAwNCwg MHgwMDAwLCAweDAwMDAsCS8qIEEwICovCisJMHgwMDAwLCAweDAwMTMsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIEE4ICovCisJMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIEIw ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDYwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsCS8qIEI4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MzAxMCwgMHhGQTAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDMsCS8qIEMwICovCisJMHgxNjE4LCAweDgyMDAs IDB4ODAwMCwgMHgwNDAwLCAweDA1MEYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIEM4ICov CisJMHg0QzkzLCAweDAwMDAsIDB4MTAwMCwgMHgxMTIwLCAweDAwMTAsIDB4MTI0MiwgMHgxMjQy LCAweDFFMDAsCS8qIEQwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMEY4LCAweDAw MDAsIDB4MDA0MSwgMHgwODAwLCAweDAwMDAsCS8qIEQ4ICovCisJMHg4MkEwLCAweDU3MkUsIDB4 MjQ5MCwgMHgxNEE5LCAweDRFMDAsIDB4MDAwMCwgMHgwODAzLCAweDA1NDEsCS8qIEUwICovCisJ MHgwQzE1LCAweDAwMDAsIDB4MDAwMCwgMHgwNDAwLCAweDI2MjYsIDB4MDAwMCwgMHgwMDAwLCAw eDQyMDAsCS8qIEU4ICovCisJMHgwMDAwLCAweEFBNTUsIDB4MTAyMCwgMHgwMDAwLCAweDAwMDAs IDB4NTAxMCwgMHgwMDAwLCAweDAwMDAsCS8qIEYwICovCisJMHgwMDAwLCAweDAwMDAsIDB4NTAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMkYyLCAweDAwMDAsCS8qIEY4ICovCisJMHgx MDFGLCAweEZEQzAsIDB4NDAwMCwgMHg4MDEwLCAweDAxMTAsIDB4MDAwNiwgMHgwMDAwLCAweDAw MDAsCS8qMTAwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTA4ICovCisJMHgwNENGLCAweDAwMDAsIDB4MDRDRiwg MHgwMDAwLCAweDA0Q0YsIDB4MDAwMCwgMHgwNEM2LCAweDAwMDAsCS8qMTEwICovCisJMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs CS8qMTE4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsCS8qMTIwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTI4ICovCisJMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8q MTMwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsCS8qMTM4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTQwICovCisJMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTQ4 ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsCS8qMTUwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTU4ICovCisJMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTYwICov CisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsCS8qMTY4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTcwICovCisJMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMEYwLCAweDA4QTIsIDB4MzExMiwgMHgwQTE0LCAweDAwMDAsCS8qMTc4ICovCisJ MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsCS8qMTgwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTg4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTkwICovCisJMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsCS8qMTk4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUEwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUE4ICovCisJMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs CS8qMUIwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsCS8qMUI4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUMwICovCisJMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8q MUM4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsCS8qMUQwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUQ4ICovCisJMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUUw ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsCS8qMUU4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUYwICovCisJMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAJLyoxRjggKi8K K307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21waHlfcmVnX3NldCh2b2lkIF9faW9tZW0gKmFk ZHIsIHUzMiBkYXRhLCB1MzIgbWFzaykKK3sKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwoYWRk cik7CisJdmFsID0gKHZhbCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7CisJd3JpdGVsKHZhbCwg YWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21waHlfcmVnX3NldDE2KHZvaWQgX19p b21lbSAqYWRkciwgdTE2IGRhdGEsIHUxNiBtYXNrKQogewotCXN0cnVjdCBhcm1fc21jY2NfcmVz IHJlczsKLQlzMzIgcmV0OworCXUxNiB2YWw7CiAKLQlhcm1fc21jY2Nfc21jKGZ1bmN0aW9uLCBs YW5lLCBtb2RlLCAwLCAwLCAwLCAwLCAwLCAmcmVzKTsKLQlyZXQgPSByZXMuYTA7CisJdmFsID0g cmVhZHcoYWRkcik7CisJdmFsID0gKHZhbCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7CisJd3Jp dGV3KHZhbCwgYWRkcik7Cit9CiAKLQlzd2l0Y2ggKHJldCkgewotCWNhc2UgU01DQ0NfUkVUX1NV Q0NFU1M6Ci0JCXJldHVybiAwOwotCWNhc2UgU01DQ0NfUkVUX05PVF9TVVBQT1JURUQ6Ci0JCXJl dHVybiAtRU9QTk9UU1VQUDsKKy8qIFVzZWQgZm9yIGFjY2Vzc2luZyBsYW5lIDIgcmVnaXN0ZXJz IChTQVRBL1VTQjMgUEhZKSAqLworc3RhdGljIHZvaWQgY29tcGh5X3NldF9pbmRpcmVjdChzdHJ1 Y3QgbXZlYnVfYTM3MDBfY29tcGh5X3ByaXYgKnByaXYsCisJCQkJdTMyIG9mZnNldCwgdTE2IGRh dGEsIHUxNiBtYXNrKQoreworCXdyaXRlbChvZmZzZXQsCisJICAgICAgIHByaXYtPmxhbmUyX3Bo eV9pbmRpcmVjdCArIENPTVBIWV9MQU5FMl9JTkRJUl9BRERSKTsKKwljb21waHlfcmVnX3NldChw cml2LT5sYW5lMl9waHlfaW5kaXJlY3QgKyBDT01QSFlfTEFORTJfSU5ESVJfREFUQSwKKwkJICAg ICAgIGRhdGEsIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBjb21waHlfbGFuZV9yZWdfc2V0KHN0 cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSwKKwkJCQl1MTYgcmVnLCB1MTYgZGF0 YSwgdTE2IG1hc2spCit7CisJaWYgKGxhbmUtPmlkID09IDIpIHsKKwkJLyogbGFuZSAyIFBIWSBy ZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIGluZGlyZWN0bHkgKi8KKwkJY29tcGh5X3NldF9pbmRpcmVj dChsYW5lLT5wcml2LAorCQkJCSAgICByZWcgKyBDT01QSFlfTEFORTJfUkVHU19CQVNFLAorCQkJ CSAgICBkYXRhLCBtYXNrKTsKKwl9IGVsc2UgeworCQl2b2lkIF9faW9tZW0gKmJhc2UgPSBsYW5l LT5pZCA9PSAxID8KKwkJCQkgICAgIGxhbmUtPnByaXYtPmxhbmUxX3BoeV9yZWdzIDoKKwkJCQkg ICAgIGxhbmUtPnByaXYtPmxhbmUwX3BoeV9yZWdzOworCisJCWNvbXBoeV9yZWdfc2V0MTYoYmFz ZSArIENPTVBIWV9MQU5FX1JFR19ESVJFQ1QocmVnKSwKKwkJCQkgZGF0YSwgbWFzayk7CisJfQor fQorCitzdGF0aWMgaW50IGNvbXBoeV9sYW5lX3JlZ19wb2xsKHN0cnVjdCBtdmVidV9hMzcwMF9j b21waHlfbGFuZSAqbGFuZSwKKwkJCQl1MTYgcmVnLCB1MTYgYml0cywKKwkJCQl1bG9uZyBzbGVl cF91cywgdWxvbmcgdGltZW91dF91cykKK3sKKwlpbnQgcmV0OworCisJaWYgKGxhbmUtPmlkID09 IDIpIHsKKwkJdTMyIGRhdGE7CisKKwkJLyogbGFuZSAyIFBIWSByZWdpc3RlcnMgYXJlIGFjY2Vz c2VkIGluZGlyZWN0bHkgKi8KKwkJd3JpdGVsKHJlZyArIENPTVBIWV9MQU5FMl9SRUdTX0JBU0Us CisJCSAgICAgICBsYW5lLT5wcml2LT5sYW5lMl9waHlfaW5kaXJlY3QgKworCQkgICAgICAgQ09N UEhZX0xBTkUyX0lORElSX0FERFIpOworCisJCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChsYW5l LT5wcml2LT5sYW5lMl9waHlfaW5kaXJlY3QgKworCQkJCQkgQ09NUEhZX0xBTkUyX0lORElSX0RB VEEsCisJCQkJCSBkYXRhLCAoZGF0YSAmIGJpdHMpID09IGJpdHMsCisJCQkJCSBzbGVlcF91cywg dGltZW91dF91cyk7CisJfSBlbHNlIHsKKwkJdm9pZCBfX2lvbWVtICpiYXNlID0gbGFuZS0+aWQg PT0gMSA/CisJCQkJICAgICBsYW5lLT5wcml2LT5sYW5lMV9waHlfcmVncyA6CisJCQkJICAgICBs YW5lLT5wcml2LT5sYW5lMF9waHlfcmVnczsKKwkJdTE2IGRhdGE7CisKKwkJcmV0ID0gcmVhZHdf cG9sbF90aW1lb3V0KGJhc2UgKyBDT01QSFlfTEFORV9SRUdfRElSRUNUKHJlZyksCisJCQkJCSBk YXRhLCAoZGF0YSAmIGJpdHMpID09IGJpdHMsCisJCQkJCSBzbGVlcF91cywgdGltZW91dF91cyk7 CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY29tcGh5X3BlcmlwaF9yZWdf c2V0KHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSwKKwkJCQkgIHU4IHJlZywg dTMyIGRhdGEsIHUzMiBtYXNrKQoreworCWNvbXBoeV9yZWdfc2V0KGxhbmUtPnByaXYtPmNvbXBo eV9yZWdzICsgQ09NUEhZX1BIWV9SRUcobGFuZS0+aWQsIHJlZyksCisJCSAgICAgICBkYXRhLCBt YXNrKTsKK30KKworc3RhdGljIGludCBjb21waHlfcGVyaXBoX3JlZ19wb2xsKHN0cnVjdCBtdmVi dV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSwKKwkJCQkgIHU4IHJlZywgdTMyIGJpdHMsCisJCQkJ ICB1bG9uZyBzbGVlcF91cywgdWxvbmcgdGltZW91dF91cykKK3sKKwl1MzIgZGF0YTsKKworCXJl dHVybiByZWFkbF9wb2xsX3RpbWVvdXQobGFuZS0+cHJpdi0+Y29tcGh5X3JlZ3MgKworCQkJCSAg Q09NUEhZX1BIWV9SRUcobGFuZS0+aWQsIHJlZyksCisJCQkJICBkYXRhLCAoZGF0YSAmIGJpdHMp ID09IGJpdHMsCisJCQkJICBzbGVlcF91cywgdGltZW91dF91cyk7Cit9CisKKy8qIFBIWSBzZWxl Y3RvciBjb25maWd1cmVzIHdpdGggY29ycmVzcG9uZGluZyBtb2RlcyAqLworc3RhdGljIGludAor bXZlYnVfYTM3MDBfY29tcGh5X3NldF9waHlfc2VsZWN0b3Ioc3RydWN0IG12ZWJ1X2EzNzAwX2Nv bXBoeV9sYW5lICpsYW5lKQoreworCXUzMiBvbGQsIG5ldywgY2xyID0gMCwgc2V0ID0gMDsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3dpdGNoIChsYW5lLT5tb2RlKSB7CisJY2FzZSBQSFlf TU9ERV9TQVRBOgorCQkvKiBTQVRBIG11c3QgYmUgaW4gTGFuZTIgKi8KKwkJaWYgKGxhbmUtPmlk ID09IDIpCisJCQljbHIgPSBDT01QSFlfU0VMRUNUT1JfVVNCM19QSFlfU0VMX0JJVDsKKwkJZWxz ZQorCQkJZ290byBlcnJvcjsKKwkJYnJlYWs7CisKKwljYXNlIFBIWV9NT0RFX0VUSEVSTkVUOgor CQlpZiAobGFuZS0+aWQgPT0gMCkKKwkJCWNsciA9IENPTVBIWV9TRUxFQ1RPUl9VU0IzX0dCRTFf U0VMX0JJVDsKKwkJZWxzZSBpZiAobGFuZS0+aWQgPT0gMSkKKwkJCWNsciA9IENPTVBIWV9TRUxF Q1RPUl9QQ0lFX0dCRTBfU0VMX0JJVDsKKwkJZWxzZQorCQkJZ290byBlcnJvcjsKKwkJYnJlYWs7 CisKKwljYXNlIFBIWV9NT0RFX1VTQl9IT1NUX1NTOgorCQlpZiAobGFuZS0+aWQgPT0gMikKKwkJ CXNldCA9IENPTVBIWV9TRUxFQ1RPUl9VU0IzX1BIWV9TRUxfQklUOworCQllbHNlIGlmIChsYW5l LT5pZCA9PSAwKQorCQkJc2V0ID0gQ09NUEhZX1NFTEVDVE9SX1VTQjNfR0JFMV9TRUxfQklUOwor CQllbHNlCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKworCWNhc2UgUEhZX01PREVfUENJRToK KwkJLyogUENJRSBtdXN0IGJlIGluIExhbmUxICovCisJCWlmIChsYW5lLT5pZCA9PSAxKQorCQkJ c2V0ID0gQ09NUEhZX1NFTEVDVE9SX1BDSUVfR0JFMF9TRUxfQklUOworCQllbHNlCisJCQlnb3Rv IGVycm9yOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3Bp bl9sb2NrX2lycXNhdmUoJmxhbmUtPnByaXYtPmxvY2ssIGZsYWdzKTsKKworCW9sZCA9IHJlYWRs KGxhbmUtPnByaXYtPmNvbXBoeV9yZWdzICsgQ09NUEhZX1NFTEVDVE9SX1BIWV9SRUcpOworCW5l dyA9IChvbGQgJiB+Y2xyKSB8IHNldDsKKwl3cml0ZWwobmV3LCBsYW5lLT5wcml2LT5jb21waHlf cmVncyArIENPTVBIWV9TRUxFQ1RPUl9QSFlfUkVHKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmxhbmUtPnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWRldl9kYmcobGFuZS0+ZGV2LAorCQki Q09NUEhZWyVkXSBtb2RlWyVkXSBjaGFuZ2VkIFBIWSBzZWxlY3RvciAweCUwOHggLT4gMHglMDh4 XG4iLAorCQlsYW5lLT5pZCwgbGFuZS0+bW9kZSwgb2xkLCBuZXcpOworCisJcmV0dXJuIDA7Citl cnJvcjoKKwlkZXZfZXJyKGxhbmUtPmRldiwgIkNPTVBIWVslZF0gbW9kZVslZF0gaXMgaW52YWxp ZFxuIiwgbGFuZS0+aWQsCisJCWxhbmUtPm1vZGUpOworCXJldHVybiAtRUlOVkFMOworfQorCitz dGF0aWMgaW50CittdmVidV9hMzcwMF9jb21waHlfc2F0YV9wb3dlcl9vbihzdHJ1Y3QgbXZlYnVf YTM3MDBfY29tcGh5X2xhbmUgKmxhbmUpCit7CisJdTMyIG1hc2ssIGRhdGEsIHJlZl9jbGs7CisJ aW50IHJldDsKKworCS8qIENvbmZpZ3VyZSBwaHkgc2VsZWN0b3IgZm9yIFNBVEEgKi8KKwlyZXQg PSBtdmVidV9hMzcwMF9jb21waHlfc2V0X3BoeV9zZWxlY3RvcihsYW5lKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJLyogQ2xlYXIgcGh5IGlzb2xhdGlvbiBtb2RlIHRvIG1ha2UgaXQg d29yayBpbiBub3JtYWwgbW9kZSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZ X0lTT0xBVElPTl9DVFJMLAorCQkJICAgIDB4MCwgUEhZX0lTT0xBVEVfTU9ERSk7CisKKwkvKiAw LiBDaGVjayB0aGUgUG9sYXJpdHkgaW52ZXJ0IGJpdHMgKi8KKwlkYXRhID0gMHgwOworCWlmIChs YW5lLT5pbnZlcnRfdHgpCisJCWRhdGEgfD0gVFhEX0lOVkVSVF9CSVQ7CisJaWYgKGxhbmUtPmlu dmVydF9yeCkKKwkJZGF0YSB8PSBSWERfSU5WRVJUX0JJVDsKKwltYXNrID0gVFhEX0lOVkVSVF9C SVQgfCBSWERfSU5WRVJUX0JJVDsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9T WU5DX1BBVFRFUk4sIGRhdGEsIG1hc2spOworCisJLyogMS4gU2VsZWN0IDQwLWJpdCBkYXRhIHdp ZHRoICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfRElHX0xPT1BCQUNLX0VO LAorCQkJICAgIERBVEFfV0lEVEhfNDBCSVQsIFNFTF9EQVRBX1dJRFRIX01BU0spOworCisJLyog Mi4gU2VsZWN0IHJlZmVyZW5jZSBjbG9jaygyNU0pIGFuZCBQSFkgbW9kZSAoU0FUQSkgKi8KKwlp ZiAobGFuZS0+cHJpdi0+eHRhbF9pc180MG0pCisJCXJlZl9jbGsgPSBSRUZfRlJFRl9TRUxfU0VS REVTXzQwTUhaOworCWVsc2UKKwkJcmVmX2NsayA9IFJFRl9GUkVGX1NFTF9TRVJERVNfMjVNSFo7 CisKKwlkYXRhID0gcmVmX2NsayB8IENPTVBIWV9NT0RFX1NBVEE7CisJbWFzayA9IFJFRl9GUkVG X1NFTF9NQVNLIHwgQ09NUEhZX01PREVfTUFTSzsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUs IENPTVBIWV9QT1dFUl9QTExfQ1RSTCwgZGF0YSwgbWFzayk7CisKKwkvKiAzLiBVc2UgbWF4aW11 bSBQTEwgcmF0ZSAobm8gcG93ZXIgc2F2ZSkgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUs IENPTVBIWV9LVkNPX0NBTF9DVFJMLAorCQkJICAgIFVTRV9NQVhfUExMX1JBVEVfQklULCBVU0Vf TUFYX1BMTF9SQVRFX0JJVCk7CisKKwkvKiA0LiBSZXNldCByZXNlcnZlZCBiaXQgKi8KKwljb21w aHlfc2V0X2luZGlyZWN0KGxhbmUtPnByaXYsIENPTVBIWV9SRVNFUlZFRF9SRUcsCisJCQkgICAg MHgwLCBQSFlDVFJMX0ZSTV9QSU5fQklUKTsKKworCS8qIDUuIFNldCB2ZW5kb3Itc3BlY2lmaWMg Y29uZmlndXJhdGlvbiAoSXQgaXMgZG9uZSBpbiBzYXRhIGRyaXZlcikgKi8KKwkvKiBYWFg6IGlu IFUtQm9vdCBiZWxvdyBzZXF1ZW5jZSB3YXMgZXhlY3V0ZWQgaW4gdGhpcyBwbGFjZSwgaW4gTGlu dXgKKwkgKiBub3QuICBOb3cgaXQgaXMgZG9uZSBvbmx5IGluIFUtQm9vdCBiZWZvcmUgdGhpcyBj b21waHkKKwkgKiBpbml0aWFsaXphdGlvbiAtIHRlc3RzIHNob3dzIHRoYXQgaXQgd29ya3Mgb2ss IGJ1dCBpbiBjYXNlIG9mIGFueQorCSAqIGZ1dHVyZSBwcm9ibGVtIGl0IGlzIGxlZnQgZm9yIHJl ZmVyZW5jZS4KKwkgKiAgIHJlZ19zZXQoTVZFQlVfUkVHU19CQVNFICsgMHhlMDBhMCwgMCwgMHhm ZmZmZmZmZik7CisJICogICByZWdfc2V0KE1WRUJVX1JFR1NfQkFTRSArIDB4ZTAwYTQsIEJJVCg2 KSwgQklUKDYpKTsKKwkgKi8KKworCS8qIFdhaXQgZm9yID4gNTUgdXMgdG8gYWxsb3cgUExMIGJl IGVuYWJsZWQgKi8KKwl1ZGVsYXkoUExMX1NFVF9ERUxBWV9VUyk7CisKKwkvKiBQb2xsaW5nIHN0 YXR1cyAqLworCXJldCA9IGNvbXBoeV9sYW5lX3JlZ19wb2xsKGxhbmUsIENPTVBIWV9ESUdfTE9P UEJBQ0tfRU4sCisJCQkJICAgUExMX1JFQURZX1RYX0JJVCwgQ09NUEhZX1BMTF9TTEVFUCwKKwkJ CQkgICBDT01QSFlfUExMX1RJTUVPVVQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihsYW5lLT5k ZXYsICJGYWlsZWQgdG8gbG9jayBTQVRBIFBMTFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBoeV9nYmVfcGh5X2luaXQoc3RydWN0IG12 ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lLAorCQkJCWJvb2wgaXNfMWdicHMpCit7CisJaW50 IGFkZHIsIGZpeF9pZHg7CisJdTE2IHZhbDsKKworCWZpeF9pZHggPSAwOworCWZvciAoYWRkciA9 IDA7IGFkZHIgPCA1MTI7IGFkZHIrKykgeworCQkvKgorCQkgKiBBbGwgUEhZIHJlZ2lzdGVyIHZh bHVlcyBhcmUgZGVmaW5lZCBpbiBmdWxsIGZvciAzLjEyNUdicHMKKwkJICogU0VSREVTIHNwZWVk LiBUaGUgdmFsdWVzIHJlcXVpcmVkIGZvciAxLjI1IEdicHMgYXJlIGFsbW9zdAorCQkgKiB0aGUg c2FtZSBhbmQgb25seSBmZXcgcmVnaXN0ZXJzIHNob3VsZCBiZSAiZml4ZWQiIGluCisJCSAqIGNv bXBhcmlzb24gdG8gMy4xMjUgR2JwcyB2YWx1ZXMuIFRoZXNlIHJlZ2lzdGVyIHZhbHVlcyBhcmUK KwkJICogc3RvcmVkIGluICJnYmVfcGh5X2luaXRfZml4IiBhcnJheS4KKwkJICovCisJCWlmICgh aXNfMWdicHMgJiYgZ2JlX3BoeV9pbml0X2ZpeFtmaXhfaWR4XS5hZGRyID09IGFkZHIpIHsKKwkJ CS8qIFVzZSBuZXcgdmFsdWUgKi8KKwkJCXZhbCA9IGdiZV9waHlfaW5pdF9maXhbZml4X2lkeF0u dmFsdWU7CisJCQlpZiAoZml4X2lkeCA8IEFSUkFZX1NJWkUoZ2JlX3BoeV9pbml0X2ZpeCkpCisJ CQkJZml4X2lkeCsrOworCQl9IGVsc2UgeworCQkJdmFsID0gZ2JlX3BoeV9pbml0W2FkZHJdOwor CQl9CisKKwkJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBhZGRyLCB2YWwsIDB4RkZGRik7CisJ fQorfQorCitzdGF0aWMgaW50CittdmVidV9hMzcwMF9jb21waHlfZXRoZXJuZXRfcG93ZXJfb24o c3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lKQoreworCXUzMiBtYXNrLCBkYXRh LCBzcGVlZF9zZWw7CisJaW50IHJldDsKKworCS8qIFNldCBzZWxlY3RvciAqLworCXJldCA9IG12 ZWJ1X2EzNzAwX2NvbXBoeV9zZXRfcGh5X3NlbGVjdG9yKGxhbmUpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwkvKgorCSAqIDEuIFJlc2V0IFBIWSBieSBzZXR0aW5nIFBIWSBpbnB1dCBw b3J0IFBJTl9SRVNFVD0xLgorCSAqIDIuIFNldCBQSFkgaW5wdXQgcG9ydCBQSU5fVFhfSURMRT0x LCBQSU5fUFVfSVZSRUY9MSB0byBrZWVwCisJICogICAgUEhZIFRYUC9UWE4gb3V0cHV0IHRvIGlk bGUgc3RhdGUgZHVyaW5nIFBIWSBpbml0aWFsaXphdGlvbgorCSAqIDMuIFNldCBQSFkgaW5wdXQg cG9ydCBQSU5fUFVfUExMPTAsIFBJTl9QVV9SWD0wLCBQSU5fUFVfVFg9MC4KKwkgKi8KKwlkYXRh ID0gUElOX1BVX0lWUkVGX0JJVCB8IFBJTl9UWF9JRExFX0JJVCB8IFBJTl9SRVNFVF9DT01QSFlf QklUOworCW1hc2sgPSBkYXRhIHwgUElOX1JFU0VUX0NPUkVfQklUIHwgUElOX1BVX1BMTF9CSVQg fCBQSU5fUFVfUlhfQklUIHwKKwkgICAgICAgUElOX1BVX1RYX0JJVCB8IFBIWV9SWF9JTklUX0JJ VDsKKwljb21waHlfcGVyaXBoX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BIWV9DRkcxLCBkYXRhLCBt YXNrKTsKKworCS8qIDQuIFJlbGVhc2UgcmVzZXQgdG8gdGhlIFBIWSBieSBzZXR0aW5nIFBJTl9S RVNFVD0wLiAqLworCWRhdGEgPSAweDA7CisJbWFzayA9IFBJTl9SRVNFVF9DT01QSFlfQklUOwor CWNvbXBoeV9wZXJpcGhfcmVnX3NldChsYW5lLCBDT01QSFlfUEhZX0NGRzEsIGRhdGEsIG1hc2sp OworCisJLyoKKwkgKiA1LiBTZXQgUElOX1BIWV9HRU5fVFhbMzowXSBhbmQgUElOX1BIWV9HRU5f UlhbMzowXSB0byBkZWNpZGUgQ09NUEhZCisJICogYml0IHJhdGUKKwkgKi8KKwlzd2l0Y2ggKGxh bmUtPnN1Ym1vZGUpIHsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSToKKwljYXNlIFBI WV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6CisJCS8qIFNHTUlJIDFHLCBTZXJEZXMgc3BlZWQg MS4yNUcgKi8KKwkJc3BlZWRfc2VsID0gU0VSREVTX1NQRUVEXzFfMjVfRzsKKwkJYnJlYWs7CisJ Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOgorCQkvKiAyNTAwQmFzZS1YLCBTZXJE ZXMgc3BlZWQgMy4xMjVHICovCisJCXNwZWVkX3NlbCA9IFNFUkRFU19TUEVFRF8zXzEyNV9HOwor CQlicmVhazsKIAlkZWZhdWx0OgorCQkvKiBPdGhlciByYXRlcyBhcmUgbm90IHN1cHBvcnRlZCAq LworCQlkZXZfZXJyKGxhbmUtPmRldiwKKwkJCSJ1bnN1cHBvcnRlZCBwaHkgc3BlZWQgJWQgb24g Y29tcGh5IGxhbmUlZFxuIiwKKwkJCWxhbmUtPnN1Ym1vZGUsIGxhbmUtPmlkKTsKIAkJcmV0dXJu IC1FSU5WQUw7CiAJfQorCWRhdGEgPSBHRU5fUlhfU0VMX1ZBTFVFKHNwZWVkX3NlbCkgfCBHRU5f VFhfU0VMX1ZBTFVFKHNwZWVkX3NlbCk7CisJbWFzayA9IEdFTl9SWF9TRUxfTUFTSyB8IEdFTl9U WF9TRUxfTUFTSzsKKwljb21waHlfcGVyaXBoX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BIWV9DRkcx LCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogNi4gV2FpdCAxMG1TIGZvciBiYW5kZ2FwIGFuZCBy ZWZlcmVuY2UgY2xvY2tzIHRvIHN0YWJpbGl6ZTsgdGhlbgorCSAqIHN0YXJ0IFNXIHByb2dyYW1t aW5nLgorCSAqLworCW1kZWxheSgxMCk7CisKKwkvKiA3LiBQcm9ncmFtIENPTVBIWSByZWdpc3Rl ciBQSFlfTU9ERSAqLworCWRhdGEgPSBDT01QSFlfTU9ERV9TRVJERVM7CisJbWFzayA9IENPTVBI WV9NT0RFX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUE9XRVJfUExM X0NUUkwsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiA4LiBTZXQgQ09NUEhZIHJlZ2lzdGVyIFJF RkNMS19TRUwgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IFJFRkNMSworCSAqIHNvdXJjZQorCSAqLwor CWRhdGEgPSAweDA7CisJbWFzayA9IFBIWV9SRUZfQ0xLX1NFTDsKKwljb21waHlfbGFuZV9yZWdf c2V0KGxhbmUsIENPTVBIWV9NSVNDX0NUUkwwLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogOS4g U2V0IGNvcnJlY3QgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSBpbiBDT01QSFkgcmVnaXN0ZXIK KwkgKiBSRUZfRlJFRl9TRUwuCisJICovCisJaWYgKGxhbmUtPnByaXYtPnh0YWxfaXNfNDBtKQor CQlkYXRhID0gUkVGX0ZSRUZfU0VMX1NFUkRFU181ME1IWjsKKwllbHNlCisJCWRhdGEgPSBSRUZf RlJFRl9TRUxfU0VSREVTXzI1TUhaOworCisJbWFzayA9IFJFRl9GUkVGX1NFTF9NQVNLOworCWNv bXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BPV0VSX1BMTF9DVFJMLCBkYXRhLCBtYXNr KTsKKworCS8qIDEwLiBQcm9ncmFtIENPTVBIWSByZWdpc3RlciBQSFlfR0VOX01BWFsxOjBdCisJ ICogVGhpcyBzdGVwIGlzIG1lbnRpb25lZCBpbiB0aGUgZmxvdyByZWNlaXZlZCBmcm9tIHZlcmlm aWNhdGlvbiB0ZWFtLgorCSAqIEhvd2V2ZXIgdGhlIFBIWV9HRU5fTUFYIHZhbHVlIGlzIG9ubHkg bWVhbmluZ2Z1bCBmb3Igb3RoZXIgaW50ZXJmYWNlcworCSAqIChub3QgU0VSREVTKS4gRm9yIGlu c3RhbmNlLCBpdCBzZWxlY3RzIFNBVEEgc3BlZWQgMS41LzMvNiBHYnBzIG9yCisJICogUENJZSBz cGVlZCAyLjUvNSBHYnBzCisJICovCisKKwkvKgorCSAqIDExLiBQcm9ncmFtIENPTVBIWSByZWdp c3RlciBTRUxfQklUUyB0byBzZXQgY29ycmVjdCBwYXJhbGxlbCBkYXRhCisJICogYnVzIHdpZHRo CisJICovCisJZGF0YSA9IERBVEFfV0lEVEhfMTBCSVQ7CisJbWFzayA9IFNFTF9EQVRBX1dJRFRI X01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfRElHX0xPT1BCQUNLX0VO LCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogMTIuIEFzIGxvbmcgYXMgREZFIGZ1bmN0aW9uIG5l ZWRzIHRvIGJlIGVuYWJsZWQgaW4gYW55IG1vZGUsCisJICogQ09NUEhZIHJlZ2lzdGVyIERGRV9V UERBVEVfRU5bNTowXSBzaGFsbCBiZSBwcm9ncmFtbWVkIHRvIDB4M0YKKwkgKiBmb3IgcmVhbCBj aGlwIGR1cmluZyBDT01QSFkgcG93ZXIgb24uCisJICogVGhlIHN0ZXAgMTQgZXhpc3RzIChhbmQg ZW1wdHkpIGluIHRoZSBvcmlnaW5hbCBpbml0aWFsaXphdGlvbiBmbG93CisJICogb2J0YWluZWQg ZnJvbSB0aGUgdmVyaWZpY2F0aW9uIHRlYW0uIEFjY29yZGluZyB0byB0aGUgZnVuY3Rpb25hbAor CSAqIHNwZWNpZmljYXRpb24gREZFX1VQREFURV9FTiBhbHJlYWR5IGhhcyB0aGUgZGVmYXVsdCB2 YWx1ZSAweDNGCisJICovCisKKwkvKgorCSAqIDEzLiBQcm9ncmFtIENPTVBIWSBHRU4gcmVnaXN0 ZXJzLgorCSAqIFRoZXNlIHJlZ2lzdGVycyBzaG91bGQgYmUgcHJvZ3JhbW1lZCBiYXNlZCBvbiB0 aGUgbGFiIHRlc3RpbmcgcmVzdWx0CisJICogdG8gYWNoaWV2ZSBvcHRpbWFsIHBlcmZvcm1hbmNl LiBQbGVhc2UgY29udGFjdCB0aGUgQ0VBIGdyb3VwIHRvIGdldAorCSAqIHRoZSByZWxhdGVkIEdF TiB0YWJsZSBkdXJpbmcgcmVhbCBjaGlwIGJyaW5nLXVwLiBXZSBvbmx5IHJlcXVpcmVkIHRvCisJ ICogcnVuIHRob3VnaCB0aGUgZW50aXJlIHJlZ2lzdGVycyBwcm9ncmFtbWluZyBmbG93IGRlZmlu ZWQgYnkKKwkgKiAiY29tcGh5X2diZV9waHlfaW5pdCIgd2hlbiB0aGUgUkVGIGNsb2NrIGlzIDQw IE1Iei4gRm9yIFJFRiBjbG9jaworCSAqIDI1IE1IeiB0aGUgZGVmYXVsdCB2YWx1ZXMgc3RvcmVk IGluIFBIWSByZWdpc3RlcnMgYXJlIE9LLgorCSAqLworCWRldl9kYmcobGFuZS0+ZGV2LCAiUnVu bmluZyBDLURQSSBwaHkgaW5pdCAlcyBtb2RlXG4iLAorCQlsYW5lLT5zdWJtb2RlID09IFBIWV9J TlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVggPyAiMkc1IiA6ICIxRyIpOworCWlmIChsYW5lLT5wcml2 LT54dGFsX2lzXzQwbSkKKwkJY29tcGh5X2diZV9waHlfaW5pdChsYW5lLAorCQkJCSAgICBsYW5l LT5zdWJtb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgpOworCisJLyoKKwkgKiAx NC4gW1NpbXVsYXRpb24gT25seV0gc2hvdWxkIG5vdCBiZSB1c2VkIGZvciByZWFsIGNoaXAuCisJ ICogQnkgcGFzcyBwb3dlciB1cCBjYWxpYnJhdGlvbiBieSBwcm9ncmFtbWluZyBFWFRfRk9SQ0Vf Q0FMX0RPTkUKKwkgKiAoUjAyaFs5XSkgdG8gMSB0byBzaG9ydGVuIENPTVBIWSBzaW11bGF0aW9u IHRpbWUuCisJICovCisKKwkvKgorCSAqIDE1LiBbU2ltdWxhdGlvbiBPbmx5OiBzaG91bGQgbm90 IGJlIHVzZWQgZm9yIHJlYWwgY2hpcF0KKwkgKiBQcm9ncmFtIENPTVBIWSByZWdpc3RlciBGQVNU X0RGRV9USU1FUl9FTj0xIHRvIHNob3J0ZW4gUlggdHJhaW5pbmcKKwkgKiBzaW11bGF0aW9uIHRp bWUuCisJICovCisKKwkvKgorCSAqIDE2LiBDaGVjayB0aGUgUEhZIFBvbGFyaXR5IGludmVydCBi aXQKKwkgKi8KKwlkYXRhID0gMHgwOworCWlmIChsYW5lLT5pbnZlcnRfdHgpCisJCWRhdGEgfD0g VFhEX0lOVkVSVF9CSVQ7CisJaWYgKGxhbmUtPmludmVydF9yeCkKKwkJZGF0YSB8PSBSWERfSU5W RVJUX0JJVDsKKwltYXNrID0gVFhEX0lOVkVSVF9CSVQgfCBSWERfSU5WRVJUX0JJVDsKKwljb21w aHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9TWU5DX1BBVFRFUk4sIGRhdGEsIG1hc2spOwor CisJLyoKKwkgKiAxNy4gU2V0IFBIWSBpbnB1dCBwb3J0cyBQSU5fUFVfUExMLCBQSU5fUFVfVFgg YW5kIFBJTl9QVV9SWCB0byAxIHRvCisJICogc3RhcnQgUEhZIHBvd2VyIHVwIHNlcXVlbmNlLiBB bGwgdGhlIFBIWSByZWdpc3RlciBwcm9ncmFtbWluZyBzaG91bGQKKwkgKiBiZSBkb25lIGJlZm9y ZSBQSU5fUFVfUExMPTEuIFRoZXJlIHNob3VsZCBiZSBubyByZWdpc3RlciBwcm9ncmFtbWluZwor CSAqIGZvciBub3JtYWwgUEhZIG9wZXJhdGlvbiBmcm9tIHRoaXMgcG9pbnQuCisJICovCisJZGF0 YSA9IFBJTl9QVV9QTExfQklUIHwgUElOX1BVX1JYX0JJVCB8IFBJTl9QVV9UWF9CSVQ7CisJbWFz ayA9IGRhdGE7CisJY29tcGh5X3BlcmlwaF9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSFlfQ0ZHMSwg ZGF0YSwgbWFzayk7CisKKwkvKgorCSAqIDE4LiBXYWl0IGZvciBQSFkgcG93ZXIgdXAgc2VxdWVu Y2UgdG8gZmluaXNoIGJ5IGNoZWNraW5nIG91dHB1dCBwb3J0cworCSAqIFBJTl9QTExfUkVBRFlf VFg9MSBhbmQgUElOX1BMTF9SRUFEWV9SWD0xLgorCSAqLworCXJldCA9IGNvbXBoeV9wZXJpcGhf cmVnX3BvbGwobGFuZSwgQ09NUEhZX1BIWV9TVEFUMSwKKwkJCQkgICAgIFBIWV9QTExfUkVBRFlf VFhfQklUIHwKKwkJCQkgICAgIFBIWV9QTExfUkVBRFlfUlhfQklULAorCQkJCSAgICAgQ09NUEhZ X1BMTF9TTEVFUCwgQ09NUEhZX1BMTF9USU1FT1VUKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo bGFuZS0+ZGV2LCAiRmFpbGVkIHRvIGxvY2sgUExMIGZvciBTRVJERVMgUEhZICVkXG4iLAorCQkJ bGFuZS0+aWQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogMTkuIFNldCBDT01QSFkg aW5wdXQgcG9ydCBQSU5fVFhfSURMRT0wCisJICovCisJY29tcGh5X3BlcmlwaF9yZWdfc2V0KGxh bmUsIENPTVBIWV9QSFlfQ0ZHMSwgMHgwLCBQSU5fVFhfSURMRV9CSVQpOworCisJLyoKKwkgKiAy MC4gQWZ0ZXIgdmFsaWQgZGF0YSBhcHBlYXIgb24gUElOX1JYREFUQSBidXMsIHNldCBQSU5fUlhf SU5JVD0xLiBUbworCSAqIHN0YXJ0IFJYIGluaXRpYWxpemF0aW9uLiBQSU5fUlhfSU5JVF9ET05F IHdpbGwgYmUgY2xlYXJlZCB0byAwIGJ5IHRoZQorCSAqIFBIWSBBZnRlciBSWCBpbml0aWFsaXph dGlvbiBpcyBkb25lLCBQSU5fUlhfSU5JVF9ET05FIHdpbGwgYmUgc2V0IHRvCisJICogMSBieSBD T01QSFkgU2V0IFBJTl9SWF9JTklUPTAgYWZ0ZXIgUElOX1JYX0lOSVRfRE9ORT0gMS4gUGxlYXNl CisJICogcmVmZXIgdG8gUlggaW5pdGlhbGl6YXRpb24gcGFydCBmb3IgZGV0YWlscy4KKwkgKi8K Kwljb21waHlfcGVyaXBoX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BIWV9DRkcxLAorCQkJICAgICAg UEhZX1JYX0lOSVRfQklULCBQSFlfUlhfSU5JVF9CSVQpOworCisJcmV0ID0gY29tcGh5X3Blcmlw aF9yZWdfcG9sbChsYW5lLCBDT01QSFlfUEhZX1NUQVQxLAorCQkJCSAgICAgUEhZX1BMTF9SRUFE WV9UWF9CSVQgfAorCQkJCSAgICAgUEhZX1BMTF9SRUFEWV9SWF9CSVQsCisJCQkJICAgICBDT01Q SFlfUExMX1NMRUVQLCBDT01QSFlfUExMX1RJTUVPVVQpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihsYW5lLT5kZXYsICJGYWlsZWQgdG8gbG9jayBQTEwgZm9yIFNFUkRFUyBQSFkgJWRcbiIsCisJ CQlsYW5lLT5pZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY29tcGh5X3BlcmlwaF9y ZWdfcG9sbChsYW5lLCBDT01QSFlfUEhZX1NUQVQxLAorCQkJCSAgICAgUEhZX1JYX0lOSVRfRE9O RV9CSVQsCisJCQkJICAgICBDT01QSFlfUExMX1NMRUVQLCBDT01QSFlfUExMX1RJTUVPVVQpOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycihsYW5lLT5kZXYsICJGYWlsZWQgdG8gaW5pdCBSWCBvZiBT RVJERVMgUEhZICVkXG4iLAorCQkJbGFuZS0+aWQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50CittdmVidV9hMzcwMF9jb21waHlfdXNiM19wb3dlcl9v bihzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmUpCit7CisJdTMyIG1hc2ssIGRh dGEsIGNmZywgcmVmX2NsazsKKwlpbnQgcmV0OworCisJLyogU2V0IHBoeSBzZWNsZWN0b3IgKi8K KwlyZXQgPSBtdmVidV9hMzcwMF9jb21waHlfc2V0X3BoeV9zZWxlY3RvcihsYW5lKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiAwLiBTZXQgUEhZIE9URyBDb250cm9sKDB4 NWQwMzQpLCBiaXQgNCwgUG93ZXIgdXAgT1RHIG1vZHVsZSBUaGUKKwkgKiByZWdpc3RlciBiZWxv bmcgdG8gVVRNSSBtb2R1bGUsIHNvIGl0IGlzIHNldCBpbiBVVE1JIHBoeSBkcml2ZXIuCisJICov CisKKwkvKgorCSAqIDEuIFNldCBQUkRfVFhERUVNUEggKDMuNWRiIGRlLWVtcGgpCisJICovCisJ ZGF0YSA9IFBSRF9UWERFRU1QSDBfTUFTSzsKKwltYXNrID0gUFJEX1RYREVFTVBIMF9NQVNLIHwg UFJEX1RYTUFSR0lOX01BU0sgfCBQUkRfVFhTV0lOR19NQVNLIHwKKwkgICAgICAgQ0ZHX1RYX0FM SUdOX1BPU19NQVNLOworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BJUEVfTEFO RV9DRkcwLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogMi4gU2V0IEJJVDA6IGVuYWJsZSB0cmFu c21pdHRlciBpbiBoaWdoIGltcGVkYW5jZSBtb2RlCisJICogICAgU2V0IEJJVFszOjRdOiBkZWxh eSAyIGNsb2NrIGN5Y2xlcyBmb3IgSGlaIG9mZiBsYXRlbmN5CisJICogICAgU2V0IEJJVDY6IFR4 IGRldGVjdCBSeCBhdCBIaVogbW9kZQorCSAqICAgIFVuc2V0IEJJVDE1OiBzZXQgdG8gMCB0byBz ZXQgVVNCMyBEZS1lbXBoYXNpemUgbGV2ZWwgdG8gLTMuNWRiCisJICogICAgICAgICAgICB0b2dl dGhlciB3aXRoIGJpdCAwIG9mIENPTVBIWV9QSVBFX0xBTkVfQ0ZHMCByZWdpc3RlcgorCSAqLwor CWRhdGEgPSBUWF9ERVRfUlhfTU9ERSB8IEdFTjJfVFhfREFUQV9ETFlfREVGVCB8IFRYX0VMRUNf SURMRV9NT0RFX0VOOworCW1hc2sgPSBQUkRfVFhERUVNUEgxX01BU0sgfCBUWF9ERVRfUlhfTU9E RSB8IEdFTjJfVFhfREFUQV9ETFlfTUFTSyB8CisJICAgICAgIFRYX0VMRUNfSURMRV9NT0RFX0VO OworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BJUEVfTEFORV9DRkcxLCBkYXRh LCBtYXNrKTsKKworCS8qCisJICogMy4gU2V0IFNwcmVhZCBTcGVjdHJ1bSBDbG9jayBFbmFibGVk CisJICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUElQRV9MQU5FX0NGRzQs CisJCQkgICAgU1BSRUFEX1NQRUNUUlVNX0NMS19FTiwgU1BSRUFEX1NQRUNUUlVNX0NMS19FTik7 CisKKwkvKgorCSAqIDQuIFNldCBPdmVycmlkZSBNYXJnaW5pbmcgQ29udHJvbHMgRnJvbSB0aGUg TUFDOgorCSAqICAgIFVzZSBtYXJnaW5pbmcgc2lnbmFscyBmcm9tIGxhbmUgY29uZmlndXJhdGlv bgorCSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BJUEVfVEVTVF9NT0RF X0NUUkwsCisJCQkgICAgTU9ERV9NQVJHSU5fT1ZFUlJJREUsIDB4RkZGRik7CisKKwkvKgorCSAq IDUuIFNldCBMYW5lLXRvLUxhbmUgQnVuZGxlIENsb2NrIFNhbXBsaW5nIFBlcmlvZCA9IHBlciBQ Q0xLIGN5Y2xlcworCSAqICAgIHNldCBNb2RlIENsb2NrIFNvdXJjZSA9IFBDTEsgaXMgZ2VuZXJh dGVkIGZyb20gUkVGQ0xLCisJICovCisJZGF0YSA9IDB4MDsKKwltYXNrID0gTU9ERV9DTEtfU1JD IHwgQlVORExFX1BFUklPRF9TRUwgfCBCVU5ETEVfUEVSSU9EX1NDQUxFX01BU0sgfAorCSAgICAg ICBCVU5ETEVfU0FNUExFX0NUUkwgfCBQTExfUkVBRFlfRExZX01BU0s7CisJY29tcGh5X2xhbmVf cmVnX3NldChsYW5lLCBDT01QSFlfUElQRV9DTEtfU1JDX0xPLCBkYXRhLCBtYXNrKTsKKworCS8q CisJICogNi4gU2V0IEcyIFNwcmVhZCBTcGVjdHJ1bSBDbG9jayBBbXBsaXR1ZGUgYXQgNEsKKwkg Ki8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9HRU4yX1NFVDIsCisJCQkgICAg R1MyX1RYX1NTQ19BTVBfNDEyOCwgR1MyX1RYX1NTQ19BTVBfTUFTSyk7CisKKwkvKgorCSAqIDcu IFVuc2V0IEczIFNwcmVhZCBTcGVjdHJ1bSBDbG9jayBBbXBsaXR1ZGUKKwkgKiAgICBzZXQgRzMg VFggYW5kIFJYIFJlZ2lzdGVyIE1hc3RlciBDdXJyZW50IFNlbGVjdAorCSAqLworCWRhdGEgPSBH UzJfVlJFR19SWFRYX01BU19JU0VUXzYwVTsKKwltYXNrID0gR1MyX1RYX1NTQ19BTVBfTUFTSyB8 IEdTMl9WUkVHX1JYVFhfTUFTX0lTRVRfTUFTSyB8CisJICAgICAgIEdTMl9SU1ZEXzZfMF9NQVNL OworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX0dFTjNfU0VUMiwgZGF0YSwgbWFz ayk7CisKKwkvKgorCSAqIDguIENoZWNrIGNyeXN0YWwganVtcGVyIHNldHRpbmcgYW5kIHByb2dy YW0gdGhlIFBvd2VyIGFuZCBQTEwgQ29udHJvbAorCSAqIGFjY29yZGluZ2x5IENoYW5nZSBSWCB3 YWl0CisJICovCisJaWYgKGxhbmUtPnByaXYtPnh0YWxfaXNfNDBtKSB7CisJCXJlZl9jbGsgPSBS RUZfRlJFRl9TRUxfUENJRV9VU0IzXzQwTUhaOworCQljZmcgPSBDRkdfUE1fUlhETE9aX1dBSVRf MTJfVU5JVDsKKwl9IGVsc2UgeworCQlyZWZfY2xrID0gUkVGX0ZSRUZfU0VMX1BDSUVfVVNCM18y NU1IWjsKKwkJY2ZnID0gQ0ZHX1BNX1JYRExPWl9XQUlUXzdfVU5JVDsKKwl9CisKKwlkYXRhID0g UFVfSVZSRUZfQklUIHwgUFVfUExMX0JJVCB8IFBVX1JYX0JJVCB8IFBVX1RYX0JJVCB8CisJICAg ICAgIFBVX1RYX0lOVFBfQklUIHwgUFVfREZFX0JJVCB8IENPTVBIWV9NT0RFX1VTQjMgfCByZWZf Y2xrOworCW1hc2sgPSBQVV9JVlJFRl9CSVQgfCBQVV9QTExfQklUIHwgUFVfUlhfQklUIHwgUFVf VFhfQklUIHwKKwkgICAgICAgUFVfVFhfSU5UUF9CSVQgfCBQVV9ERkVfQklUIHwgUExMX0xPQ0tf QklUIHwgQ09NUEhZX01PREVfTUFTSyB8CisJICAgICAgIFJFRl9GUkVGX1NFTF9NQVNLOworCWNv bXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BPV0VSX1BMTF9DVFJMLCBkYXRhLCBtYXNr KTsKKworCWRhdGEgPSBDRkdfUE1fUlhERU5fV0FJVF8xX1VOSVQgfCBjZmc7CisJbWFzayA9IENG R19QTV9PU0NDTEtfV0FJVF9NQVNLIHwgQ0ZHX1BNX1JYREVOX1dBSVRfTUFTSyB8CisJICAgICAg IENGR19QTV9SWERMT1pfV0FJVF9NQVNLOworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09N UEhZX1BJUEVfUFdSX01HTV9USU0xLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogOS4gRW5hYmxl IGlkbGUgc3luYworCSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX0lETEVf U1lOQ19FTiwKKwkJCSAgICBJRExFX1NZTkNfRU4sIElETEVfU1lOQ19FTik7CisKKwkvKgorCSAq IDEwLiBFbmFibGUgdGhlIG91dHB1dCBvZiA1MDBNIGNsb2NrCisJICovCisJY29tcGh5X2xhbmVf cmVnX3NldChsYW5lLCBDT01QSFlfTUlTQ19DVFJMMCwgQ0xLNTAwTV9FTiwgQ0xLNTAwTV9FTik7 CisKKwkvKgorCSAqIDExLiBTZXQgMjAtYml0IGRhdGEgd2lkdGgKKwkgKi8KKwljb21waHlfbGFu ZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9ESUdfTE9PUEJBQ0tfRU4sCisJCQkgICAgREFUQV9XSURU SF8yMEJJVCwgMHhGRkZGKTsKKworCS8qCisJICogMTIuIE92ZXJyaWRlIFNwZWVkX1BMTCB2YWx1 ZSBhbmQgdXNlIE1BQyBQTEwKKwkgKi8KKwlkYXRhID0gU1BFRURfUExMX1ZBTFVFXzE2IHwgVVNF X01BWF9QTExfUkFURV9CSVQ7CisJbWFzayA9IDB4RkZGRjsKKwljb21waHlfbGFuZV9yZWdfc2V0 KGxhbmUsIENPTVBIWV9LVkNPX0NBTF9DVFJMLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogMTMu IENoZWNrIHRoZSBQb2xhcml0eSBpbnZlcnQgYml0CisJICovCisJZGF0YSA9IDB4MDsKKwlpZiAo bGFuZS0+aW52ZXJ0X3R4KQorCQlkYXRhIHw9IFRYRF9JTlZFUlRfQklUOworCWlmIChsYW5lLT5p bnZlcnRfcngpCisJCWRhdGEgfD0gUlhEX0lOVkVSVF9CSVQ7CisJbWFzayA9IFRYRF9JTlZFUlRf QklUIHwgUlhEX0lOVkVSVF9CSVQ7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlf U1lOQ19QQVRURVJOLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogMTQuIFNldCBtYXggc3BlZWQg Z2VuZXJhdGlvbiB0byBVU0IzLjAgNUdicHMKKwkgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxh bmUsIENPTVBIWV9TWU5DX01BU0tfR0VOLAorCQkJICAgIFBIWV9HRU5fTUFYX1VTQjNfNUcsIFBI WV9HRU5fTUFYX01BU0spOworCisJLyoKKwkgKiAxNS4gU2V0IGNhcGFjaXRvciB2YWx1ZSBmb3Ig RkZFIGdhaW4gcGVha2luZyB0byAweEYKKwkgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUs IENPTVBIWV9HRU4yX1NFVDMsCisJCQkgICAgR1MzX0ZGRV9DQVBfU0VMX1ZBTFVFLCBHUzNfRkZF X0NBUF9TRUxfTUFTSyk7CisKKwkvKgorCSAqIDE2LiBSZWxlYXNlIFNXIHJlc2V0CisJICovCisJ ZGF0YSA9IE1PREVfQ09SRV9DTEtfRlJFUV9TRUwgfCBNT0RFX1BJUEVfV0lEVEhfMzIgfCBNT0RF X1JFRkRJVl9CWV80OworCW1hc2sgPSAweEZGRkY7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5l LCBDT01QSFlfUElQRV9SU1RfQ0xLX0NUUkwsIGRhdGEsIG1hc2spOworCisJLyogV2FpdCBmb3Ig PiA1NSB1cyB0byBhbGxvdyBQQ0xLIGJlIGVuYWJsZWQgKi8KKwl1ZGVsYXkoUExMX1NFVF9ERUxB WV9VUyk7CisKKwlyZXQgPSBjb21waHlfbGFuZV9yZWdfcG9sbChsYW5lLCBDT01QSFlfUElQRV9M QU5FX1NUQVQxLCBUWERDTEtfUENMS19FTiwKKwkJCQkgICBDT01QSFlfUExMX1NMRUVQLCBDT01Q SFlfUExMX1RJTUVPVVQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihsYW5lLT5kZXYsICJGYWls ZWQgdG8gbG9jayBVU0IzIFBMTFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQKK212ZWJ1X2EzNzAwX2NvbXBoeV9wY2llX3Bvd2VyX29uKHN0cnVj dCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSkKK3sKKwl1MzIgbWFzaywgZGF0YSwgcmVm X2NsazsKKwlpbnQgcmV0OworCisJLyogQ29uZmlndXJlIHBoeSBzZWxlY3RvciBmb3IgUENJZSAq LworCXJldCA9IG12ZWJ1X2EzNzAwX2NvbXBoeV9zZXRfcGh5X3NlbGVjdG9yKGxhbmUpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiAxLiBFbmFibGUgbWF4IFBMTC4gKi8KKwljb21w aHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSVBFX0xBTkVfQ0ZHMSwKKwkJCSAgICBVU0Vf TUFYX1BMTF9SQVRFX0VOLCBVU0VfTUFYX1BMTF9SQVRFX0VOKTsKKworCS8qIDIuIFNlbGVjdCAy MCBiaXQgU0VSREVTIGludGVyZmFjZS4gKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENP TVBIWV9QSVBFX0NMS19TUkNfTE8sCisJCQkgICAgQ0ZHX1NFTF8yMEIsIENGR19TRUxfMjBCKTsK KworCS8qIDMuIEZvcmNlIHRvIHVzZSByZWcgc2V0dGluZyBmb3IgUENJZSBtb2RlICovCisJY29t cGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfTUlTQ19DVFJMMSwKKwkJCSAgICBTRUxfQklU U19QQ0lFX0ZPUkNFLCBTRUxfQklUU19QQ0lFX0ZPUkNFKTsKKworCS8qIDQuIENoYW5nZSBSWCB3 YWl0ICovCisJZGF0YSA9IENGR19QTV9SWERFTl9XQUlUXzFfVU5JVCB8IENGR19QTV9SWERMT1pf V0FJVF8xMl9VTklUOworCW1hc2sgPSBDRkdfUE1fT1NDQ0xLX1dBSVRfTUFTSyB8IENGR19QTV9S WERFTl9XQUlUX01BU0sgfAorCSAgICAgICBDRkdfUE1fUlhETE9aX1dBSVRfTUFTSzsKKwljb21w aHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSVBFX1BXUl9NR01fVElNMSwgZGF0YSwgbWFz ayk7CisKKwkvKiA1LiBFbmFibGUgaWRsZSBzeW5jICovCisJY29tcGh5X2xhbmVfcmVnX3NldChs YW5lLCBDT01QSFlfSURMRV9TWU5DX0VOLAorCQkJICAgIElETEVfU1lOQ19FTiwgSURMRV9TWU5D X0VOKTsKKworCS8qIDYuIEVuYWJsZSB0aGUgb3V0cHV0IG9mIDEwME0vMTI1TS81MDBNIGNsb2Nr ICovCisJZGF0YSA9IENMSzUwME1fRU4gfCBUWERDTEtfMlhfU0VMIHwgQ0xLMTAwTV8xMjVNX0VO OworCW1hc2sgPSBkYXRhOworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX01JU0Nf Q1RSTDAsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiA3LiBFbmFibGUgVFgsIFBDSUUgZ2xvYmFs IHJlZ2lzdGVyLCAweGQwMDc0ODE0LCBpdCBpcyBkb25lIGluCisJICogUENJLUUgZHJpdmVyCisJ ICovCisKKwkvKgorCSAqIDguIENoZWNrIGNyeXN0YWwganVtcGVyIHNldHRpbmcgYW5kIHByb2dy YW0gdGhlIFBvd2VyIGFuZCBQTEwKKwkgKiBDb250cm9sIGFjY29yZGluZ2x5CisJICovCisKKwlp ZiAobGFuZS0+cHJpdi0+eHRhbF9pc180MG0pCisJCXJlZl9jbGsgPSBSRUZfRlJFRl9TRUxfUENJ RV9VU0IzXzQwTUhaOworCWVsc2UKKwkJcmVmX2NsayA9IFJFRl9GUkVGX1NFTF9QQ0lFX1VTQjNf MjVNSFo7CisKKwlkYXRhID0gUFVfSVZSRUZfQklUIHwgUFVfUExMX0JJVCB8IFBVX1JYX0JJVCB8 IFBVX1RYX0JJVCB8CisJICAgICAgIFBVX1RYX0lOVFBfQklUIHwgUFVfREZFX0JJVCB8IENPTVBI WV9NT0RFX1BDSUUgfCByZWZfY2xrOworCW1hc2sgPSAweEZGRkY7CisJY29tcGh5X2xhbmVfcmVn X3NldChsYW5lLCBDT01QSFlfUE9XRVJfUExMX0NUUkwsIGRhdGEsIG1hc2spOworCisJLyogOS4g T3ZlcnJpZGUgU3BlZWRfUExMIHZhbHVlIGFuZCB1c2UgTUFDIFBMTCAqLworCWNvbXBoeV9sYW5l X3JlZ19zZXQobGFuZSwgQ09NUEhZX0tWQ09fQ0FMX0NUUkwsCisJCQkgICAgU1BFRURfUExMX1ZB TFVFXzE2IHwgVVNFX01BWF9QTExfUkFURV9CSVQsCisJCQkgICAgMHhGRkZGKTsKKworCS8qIDEw LiBDaGVjayB0aGUgUG9sYXJpdHkgaW52ZXJ0IGJpdCAqLworCWRhdGEgPSAweDA7CisJaWYgKGxh bmUtPmludmVydF90eCkKKwkJZGF0YSB8PSBUWERfSU5WRVJUX0JJVDsKKwlpZiAobGFuZS0+aW52 ZXJ0X3J4KQorCQlkYXRhIHw9IFJYRF9JTlZFUlRfQklUOworCW1hc2sgPSBUWERfSU5WRVJUX0JJ VCB8IFJYRF9JTlZFUlRfQklUOworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1NZ TkNfUEFUVEVSTiwgZGF0YSwgbWFzayk7CisKKwkvKiAxMS4gUmVsZWFzZSBTVyByZXNldCAqLwor CWRhdGEgPSBNT0RFX0NPUkVfQ0xLX0ZSRVFfU0VMIHwgTU9ERV9QSVBFX1dJRFRIXzMyOworCW1h c2sgPSBkYXRhIHwgUElQRV9TT0ZUX1JFU0VUIHwgTU9ERV9SRUZESVZfTUFTSzsKKwljb21waHlf bGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSVBFX1JTVF9DTEtfQ1RSTCwgZGF0YSwgbWFzayk7 CisKKwkvKiBXYWl0IGZvciA+IDU1IHVzIHRvIGFsbG93IFBDTEsgYmUgZW5hYmxlZCAqLworCXVk ZWxheShQTExfU0VUX0RFTEFZX1VTKTsKKworCXJldCA9IGNvbXBoeV9sYW5lX3JlZ19wb2xsKGxh bmUsIENPTVBIWV9QSVBFX0xBTkVfU1RBVDEsIFRYRENMS19QQ0xLX0VOLAorCQkJCSAgIENPTVBI WV9QTExfU0xFRVAsIENPTVBIWV9QTExfVElNRU9VVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGxhbmUtPmRldiwgIkZhaWxlZCB0byBsb2NrIFBDSUUgUExMXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK212ZWJ1X2EzNzAwX2NvbXBoeV91 c2IzX3Bvd2VyX29mZihzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmUpCit7CisJ LyoKKwkgKiBDdXJyZW50bHkgdGhlIFVTQjMgTUFDIHNldHMgdGhlIFVTQjMgUEhZIHRvIGxvdyBz dGF0ZSwgc28gd2UgZG8gbm90CisJICogbmVlZCB0byBwb3dlciBvZmYgVVNCMyBQSFkgYWdhaW4u CisJICovCit9CisKK3N0YXRpYyB2b2lkCittdmVidV9hMzcwMF9jb21waHlfc2F0YV9wb3dlcl9v ZmYoc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lKQoreworCS8qIFNldCBwaHkg aXNvbGF0aW9uIG1vZGUgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9JU09M QVRJT05fQ1RSTCwKKwkJCSAgICBQSFlfSVNPTEFURV9NT0RFLCBQSFlfSVNPTEFURV9NT0RFKTsK KworCS8qIFBvd2VyIG9mZiBQTEwsIFR4LCBSeCAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFu ZSwgQ09NUEhZX1BPV0VSX1BMTF9DVFJMLAorCQkJICAgIDB4MCwgUFVfUExMX0JJVCB8IFBVX1JY X0JJVCB8IFBVX1RYX0JJVCk7Cit9CisKK3N0YXRpYyB2b2lkCittdmVidV9hMzcwMF9jb21waHlf ZXRoZXJuZXRfcG93ZXJfb2ZmKHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSkK K3sKKwl1MzIgbWFzaywgZGF0YTsKKworCWRhdGEgPSBQSU5fUkVTRVRfQ09SRV9CSVQgfCBQSU5f UkVTRVRfQ09NUEhZX0JJVCB8IFBJTl9QVV9JVlJFRl9CSVQgfAorCSAgICAgICBQSFlfUlhfSU5J VF9CSVQ7CisJbWFzayA9IGRhdGE7CisJY29tcGh5X3BlcmlwaF9yZWdfc2V0KGxhbmUsIENPTVBI WV9QSFlfQ0ZHMSwgZGF0YSwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkCittdmVidV9hMzcwMF9j b21waHlfcGNpZV9wb3dlcl9vZmYoc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5l KQoreworCS8qIFBvd2VyIG9mZiBQTEwsIFR4LCBSeCAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQo bGFuZSwgQ09NUEhZX1BPV0VSX1BMTF9DVFJMLAorCQkJICAgIDB4MCwgUFVfUExMX0JJVCB8IFBV X1JYX0JJVCB8IFBVX1RYX0JJVCk7Cit9CisKK3N0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5 X3Jlc2V0KHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xh bmUgKmxhbmUgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwl1MTYgbWFzaywgZGF0YTsKKworCWRl dl9kYmcobGFuZS0+ZGV2LCAicmVzZXR0aW5nIGxhbmUgJWRcbiIsIGxhbmUtPmlkKTsKKworCS8q IENPTVBIWSByZXNldCBmb3IgaW50ZXJuYWwgbG9naWMgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0 KGxhbmUsIENPTVBIWV9TRlRfUkVTRVQsCisJCQkgICAgU0ZUX1JTVF9OT19SRUcsIFNGVF9SU1Rf Tk9fUkVHKTsKKworCS8qIENPTVBIWSByZWdpc3RlciByZXNldCAoY2xlYXJlZCBhdXRvbWF0aWNh bGx5KSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1NGVF9SRVNFVCwgU0ZU X1JTVCwgU0ZUX1JTVCk7CisKKwkvKiBQSVBFIHNvZnQgYW5kIHJlZ2lzdGVyIHJlc2V0ICovCisJ ZGF0YSA9IFBJUEVfU09GVF9SRVNFVCB8IFBJUEVfUkVHX1JFU0VUOworCW1hc2sgPSBkYXRhOwor CWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BJUEVfUlNUX0NMS19DVFJMLCBkYXRh LCBtYXNrKTsKKworCS8qIFJlbGVhc2UgUElQRSByZWdpc3RlciByZXNldCAqLworCWNvbXBoeV9s YW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BJUEVfUlNUX0NMS19DVFJMLAorCQkJICAgIDB4MCwg UElQRV9SRUdfUkVTRVQpOworCisJLyogUmVzZXQgU0IgY29uZmlndXJhdGlvbiByZWdpc3RlciAo b25seSBmb3IgbGFuZXMgMCBhbmQgMSkgKi8KKwlpZiAobGFuZS0+aWQgPT0gMCB8fCBsYW5lLT5p ZCA9PSAxKSB7CisJCXUzMiBtYXNrLCBkYXRhOworCisJCWRhdGEgPSBQSU5fUkVTRVRfQ09SRV9C SVQgfCBQSU5fUkVTRVRfQ09NUEhZX0JJVCB8CisJCSAgICAgICBQSU5fUFVfUExMX0JJVCB8IFBJ Tl9QVV9SWF9CSVQgfCBQSU5fUFVfVFhfQklUOworCQltYXNrID0gZGF0YSB8IFBJTl9QVV9JVlJF Rl9CSVQgfCBQSU5fVFhfSURMRV9CSVQ7CisJCWNvbXBoeV9wZXJpcGhfcmVnX3NldChsYW5lLCBD T01QSFlfUEhZX0NGRzEsIGRhdGEsIG1hc2spOworCX0KKworCXJldHVybiAwOwogfQogCi1zdGF0 aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9nZXRfZndfbW9kZShpbnQgbGFuZSwKK3N0YXRpYyBi b29sIG12ZWJ1X2EzNzAwX2NvbXBoeV9jaGVja19tb2RlKGludCBsYW5lLAogCQkJCQkgIGVudW0g cGh5X21vZGUgbW9kZSwKIAkJCQkJICBpbnQgc3VibW9kZSkKIHsKQEAgLTEyMiw3ICsxMTcwLDcg QEAgc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfZ2V0X2Z3X21vZGUoaW50IGxhbmUsCiAK IAkvKiBVbnVzZWQgUEhZIG11eCB2YWx1ZSBpcyAweDAgKi8KIAlpZiAobW9kZSA9PSBQSFlfTU9E RV9JTlZBTElEKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChp ID0gMDsgaSA8IG47IGkrKykgewogCQlpZiAobXZlYnVfYTM3MDBfY29tcGh5X21vZGVzW2ldLmxh bmUgPT0gbGFuZSAmJgpAQCAtMTMyLDI3ICsxMTgwLDMwIEBAIHN0YXRpYyBpbnQgbXZlYnVfYTM3 MDBfY29tcGh5X2dldF9md19tb2RlKGludCBsYW5lLAogCX0KIAogCWlmIChpID09IG4pCi0JCXJl dHVybiAtRUlOVkFMOworCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gbXZlYnVfYTM3MDBfY29t cGh5X21vZGVzW2ldLmZ3X21vZGU7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBpbnQgbXZl YnVfYTM3MDBfY29tcGh5X3NldF9tb2RlKHN0cnVjdCBwaHkgKnBoeSwgZW51bSBwaHlfbW9kZSBt b2RlLAogCQkJCSAgICAgICBpbnQgc3VibW9kZSkKIHsKIAlzdHJ1Y3QgbXZlYnVfYTM3MDBfY29t cGh5X2xhbmUgKmxhbmUgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKLQlpbnQgZndfbW9kZTsKLQot CWlmIChzdWJtb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpCi0JCXN1Ym1vZGUg PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk7CiAKLQlmd19tb2RlID0gbXZlYnVfYTM3MDBfY29t cGh5X2dldF9md19tb2RlKGxhbmUtPmlkLCBtb2RlLAotCQkJCQkJIHN1Ym1vZGUpOwotCWlmIChm d19tb2RlIDwgMCkgeworCWlmICghbXZlYnVfYTM3MDBfY29tcGh5X2NoZWNrX21vZGUobGFuZS0+ aWQsIG1vZGUsIHN1Ym1vZGUpKSB7CiAJCWRldl9lcnIobGFuZS0+ZGV2LCAiaW52YWxpZCBDT01Q SFkgbW9kZVxuIik7Ci0JCXJldHVybiBmd19tb2RlOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAK KwkvKiBNb2RlIGNhbm5vdCBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBQSFkgaXMgcG93ZXJlZCBvbiAq LworCWlmIChwaHktPnBvd2VyX2NvdW50ICYmCisJICAgIChsYW5lLT5tb2RlICE9IG1vZGUgfHwg bGFuZS0+c3VibW9kZSAhPSBzdWJtb2RlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIElmIGNo YW5naW5nIG1vZGUsIGVuc3VyZSByZXNldCBpcyBjYWxsZWQgKi8KKwlpZiAobGFuZS0+bW9kZSAh PSBQSFlfTU9ERV9JTlZBTElEICYmIGxhbmUtPm1vZGUgIT0gbW9kZSkKKwkJbGFuZS0+bmVlZHNf cmVzZXQgPSB0cnVlOworCiAJLyogSnVzdCByZW1lbWJlciB0aGUgbW9kZSwgLT5wb3dlcl9vbigp IHdpbGwgZG8gdGhlIHJlYWwgc2V0dXAgKi8KIAlsYW5lLT5tb2RlID0gbW9kZTsKIAlsYW5lLT5z dWJtb2RlID0gc3VibW9kZTsKQEAgLTE2Myw3NiArMTIxNCw2OCBAQCBzdGF0aWMgaW50IG12ZWJ1 X2EzNzAwX2NvbXBoeV9zZXRfbW9kZShzdHJ1Y3QgcGh5ICpwaHksIGVudW0gcGh5X21vZGUgbW9k ZSwKIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBo eSkKIHsKIAlzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmUgPSBwaHlfZ2V0X2Ry dmRhdGEocGh5KTsKLQl1MzIgZndfcGFyYW07Ci0JaW50IGZ3X21vZGU7Ci0JaW50IGZ3X3BvcnQ7 CiAJaW50IHJldDsKIAotCWZ3X21vZGUgPSBtdmVidV9hMzcwMF9jb21waHlfZ2V0X2Z3X21vZGUo bGFuZS0+aWQsCi0JCQkJCQkgbGFuZS0+bW9kZSwgbGFuZS0+c3VibW9kZSk7Ci0JaWYgKGZ3X21v ZGUgPCAwKSB7CisJaWYgKCFtdmVidV9hMzcwMF9jb21waHlfY2hlY2tfbW9kZShsYW5lLT5pZCwg bGFuZS0+bW9kZSwKKwkJCQkJICAgbGFuZS0+c3VibW9kZSkpIHsKIAkJZGV2X2VycihsYW5lLT5k ZXYsICJpbnZhbGlkIENPTVBIWSBtb2RlXG4iKTsKLQkJcmV0dXJuIGZ3X21vZGU7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWlmIChsYW5lLT5uZWVkc19yZXNldCkgeworCQlyZXQgPSBtdmVi dV9hMzcwMF9jb21waHlfcmVzZXQocGh5KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisK KwkJbGFuZS0+bmVlZHNfcmVzZXQgPSBmYWxzZTsKIAl9CiAKIAlzd2l0Y2ggKGxhbmUtPm1vZGUp IHsKIAljYXNlIFBIWV9NT0RFX1VTQl9IT1NUX1NTOgogCQlkZXZfZGJnKGxhbmUtPmRldiwgInNl dCBsYW5lICVkIHRvIFVTQjMgaG9zdCBtb2RlXG4iLCBsYW5lLT5pZCk7Ci0JCWZ3X3BhcmFtID0g Q09NUEhZX0ZXX01PREUoZndfbW9kZSk7Ci0JCWJyZWFrOworCQlyZXR1cm4gbXZlYnVfYTM3MDBf Y29tcGh5X3VzYjNfcG93ZXJfb24obGFuZSk7CiAJY2FzZSBQSFlfTU9ERV9TQVRBOgogCQlkZXZf ZGJnKGxhbmUtPmRldiwgInNldCBsYW5lICVkIHRvIFNBVEEgbW9kZVxuIiwgbGFuZS0+aWQpOwot CQlmd19wYXJhbSA9IENPTVBIWV9GV19NT0RFKGZ3X21vZGUpOwotCQlicmVhazsKKwkJcmV0dXJu IG12ZWJ1X2EzNzAwX2NvbXBoeV9zYXRhX3Bvd2VyX29uKGxhbmUpOwogCWNhc2UgUEhZX01PREVf RVRIRVJORVQ6Ci0JCWZ3X3BvcnQgPSAobGFuZS0+aWQgPT0gMCkgPyAxIDogMDsKLQkJc3dpdGNo IChsYW5lLT5zdWJtb2RlKSB7Ci0JCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgotCQkJ ZGV2X2RiZyhsYW5lLT5kZXYsICJzZXQgbGFuZSAlZCB0byBTR01JSSBtb2RlXG4iLAotCQkJCWxh bmUtPmlkKTsKLQkJCWZ3X3BhcmFtID0gQ09NUEhZX0ZXX05FVChmd19tb2RlLCBmd19wb3J0LAot CQkJCQkJIENPTVBIWV9GV19TUEVFRF8xXzI1Ryk7Ci0JCQlicmVhazsKLQkJY2FzZSBQSFlfSU5U RVJGQUNFX01PREVfMjUwMEJBU0VYOgotCQkJZGV2X2RiZyhsYW5lLT5kZXYsICJzZXQgbGFuZSAl ZCB0byAyNTAwQkFTRVggbW9kZVxuIiwKLQkJCQlsYW5lLT5pZCk7Ci0JCQlmd19wYXJhbSA9IENP TVBIWV9GV19ORVQoZndfbW9kZSwgZndfcG9ydCwKLQkJCQkJCSBDT01QSFlfRldfU1BFRURfM18x MjVHKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZGV2X2VycihsYW5lLT5kZXYsICJ1bnN1 cHBvcnRlZCBQSFkgc3VibW9kZSAoJWQpXG4iLAotCQkJCWxhbmUtPnN1Ym1vZGUpOwotCQkJcmV0 dXJuIC1FTk9UU1VQUDsKLQkJfQotCQlicmVhazsKKwkJZGV2X2RiZyhsYW5lLT5kZXYsICJzZXQg bGFuZSAlZCB0byBFdGhlcm5ldCBtb2RlXG4iLCBsYW5lLT5pZCk7CisJCXJldHVybiBtdmVidV9h MzcwMF9jb21waHlfZXRoZXJuZXRfcG93ZXJfb24obGFuZSk7CiAJY2FzZSBQSFlfTU9ERV9QQ0lF OgogCQlkZXZfZGJnKGxhbmUtPmRldiwgInNldCBsYW5lICVkIHRvIFBDSWUgbW9kZVxuIiwgbGFu ZS0+aWQpOwotCQlmd19wYXJhbSA9IENPTVBIWV9GV19QQ0lFKGZ3X21vZGUsIENPTVBIWV9GV19T UEVFRF81RywKLQkJCQkJICBwaHktPmF0dHJzLmJ1c193aWR0aCk7Ci0JCWJyZWFrOworCQlyZXR1 cm4gbXZlYnVfYTM3MDBfY29tcGh5X3BjaWVfcG93ZXJfb24obGFuZSk7CiAJZGVmYXVsdDoKIAkJ ZGV2X2VycihsYW5lLT5kZXYsICJ1bnN1cHBvcnRlZCBQSFkgbW9kZSAoJWQpXG4iLCBsYW5lLT5t b2RlKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLQot CXJldCA9IG12ZWJ1X2EzNzAwX2NvbXBoeV9zbWMoQ09NUEhZX1NJUF9QT1dFUl9PTiwgbGFuZS0+ aWQsIGZ3X3BhcmFtKTsKLQlpZiAocmV0ID09IC1FT1BOT1RTVVBQKQotCQlkZXZfZXJyKGxhbmUt PmRldiwKLQkJCSJ1bnN1cHBvcnRlZCBTTUMgY2FsbCwgdHJ5IHVwZGF0aW5nIHlvdXIgZmlybXdh cmVcbiIpOwotCi0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21w aHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKnBoeSkKIHsKIAlzdHJ1Y3QgbXZlYnVfYTM3MDBfY29t cGh5X2xhbmUgKmxhbmUgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKIAotCXJldHVybiBtdmVidV9h MzcwMF9jb21waHlfc21jKENPTVBIWV9TSVBfUE9XRVJfT0ZGLCBsYW5lLT5pZCwgMCk7CisJc3dp dGNoIChsYW5lLT5tb2RlKSB7CisJY2FzZSBQSFlfTU9ERV9VU0JfSE9TVF9TUzoKKwkJbXZlYnVf YTM3MDBfY29tcGh5X3VzYjNfcG93ZXJfb2ZmKGxhbmUpOworCQlyZXR1cm4gMDsKKwljYXNlIFBI WV9NT0RFX1NBVEE6CisJCW12ZWJ1X2EzNzAwX2NvbXBoeV9zYXRhX3Bvd2VyX29mZihsYW5lKTsK KwkJcmV0dXJuIDA7CisJY2FzZSBQSFlfTU9ERV9FVEhFUk5FVDoKKwkJbXZlYnVfYTM3MDBfY29t cGh5X2V0aGVybmV0X3Bvd2VyX29mZihsYW5lKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBQSFlfTU9E RV9QQ0lFOgorCQltdmVidV9hMzcwMF9jb21waHlfcGNpZV9wb3dlcl9vZmYobGFuZSk7CisJCXJl dHVybiAwOworCWRlZmF1bHQ6CisJCWRldl9lcnIobGFuZS0+ZGV2LCAiaW52YWxpZCBDT01QSFkg bW9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIH0KIAogc3RhdGljIGNvbnN0IHN0cnVj dCBwaHlfb3BzIG12ZWJ1X2EzNzAwX2NvbXBoeV9vcHMgPSB7CiAJLnBvd2VyX29uCT0gbXZlYnVf YTM3MDBfY29tcGh5X3Bvd2VyX29uLAogCS5wb3dlcl9vZmYJPSBtdmVidV9hMzcwMF9jb21waHlf cG93ZXJfb2ZmLAorCS5yZXNldAkJPSBtdmVidV9hMzcwMF9jb21waHlfcmVzZXQsCiAJLnNldF9t b2RlCT0gbXZlYnVfYTM3MDBfY29tcGh5X3NldF9tb2RlLAogCS5vd25lcgkJPSBUSElTX01PRFVM RSwKIH07CkBAIC0yNTYsMTMgKzEyOTksNzUgQEAgc3RhdGljIHN0cnVjdCBwaHkgKm12ZWJ1X2Ez NzAwX2NvbXBoeV94bGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXJldHVybiBFUlJfUFRSKC1F SU5WQUwpOwogCX0KIAorCWxhbmUtPmludmVydF90eCA9IGFyZ3MtPmFyZ3NbMV0gJiBCSVQoMCk7 CisJbGFuZS0+aW52ZXJ0X3J4ID0gYXJncy0+YXJnc1sxXSAmIEJJVCgxKTsKKwogCXJldHVybiBw aHk7CiB9CiAKIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9wcml2ICpw cml2OwogCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnByb3ZpZGVyOwogCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqY2hpbGQ7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGNsayAqY2xrOworCWlu dCByZXQ7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcHJpdiks IEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xv Y2tfaW5pdCgmcHJpdi0+bG9jayk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnlu YW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiY29tcGh5Iik7CisJcHJpdi0+Y29tcGh5X3JlZ3Mg PSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHBy aXYtPmNvbXBoeV9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+Y29tcGh5X3JlZ3MpOwor CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01F TSwKKwkJCQkJICAgImxhbmUxX3BjaWVfZ2JlIik7CisJcHJpdi0+bGFuZTFfcGh5X3JlZ3MgPSBk ZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHByaXYt PmxhbmUxX3BoeV9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+bGFuZTFfcGh5X3JlZ3Mp OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNF X01FTSwKKwkJCQkJICAgImxhbmUwX3VzYjNfZ2JlIik7CisJcHJpdi0+bGFuZTBfcGh5X3JlZ3Mg PSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHBy aXYtPmxhbmUwX3BoeV9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+bGFuZTBfcGh5X3Jl Z3MpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09V UkNFX01FTSwKKwkJCQkJICAgImxhbmUyX3NhdGFfdXNiMyIpOworCXByaXYtPmxhbmUyX3BoeV9p bmRpcmVjdCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJ U19FUlIocHJpdi0+bGFuZTJfcGh5X2luZGlyZWN0KSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+ bGFuZTJfcGh5X2luZGlyZWN0KTsKKworCS8qCisJICogRHJpdmVyIG5lZWRzIHRvIGtub3cgaWYg cmVmZXJlbmNlIHh0YWwgY2xvY2sgaXMgNDBNSHogb3IgMjVNSHouCisJICogT2xkIERUIGJpbmRp bmdzIGRvIG5vdCBoYXZlIHh0YWwgY2xrIHByZXNlbnQuIFNvIGRvIG5vdCBmYWlsIGhlcmUKKwkg KiBhbmQgZXhwZWN0cyB0aGF0IGRlZmF1bHQgMjVNSHogcmVmZXJlbmNlIGNsb2NrIGlzIHVzZWQu CisJICovCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAieHRhbCIpOworCWlmIChJU19FUlIo Y2xrKSkgeworCQlpZiAoUFRSX0VSUihjbGspID09IC1FUFJPQkVfREVGRVIpCisJCQlyZXR1cm4g LUVQUk9CRV9ERUZFUjsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm1pc3NpbmcgJ3h0YWwnIGNs ayAoJWxkKVxuIiwKKwkJCSBQVFJfRVJSKGNsaykpOworCX0gZWxzZSB7CisJCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShjbGspOworCQlpZiAocmV0KSB7CisJCQlkZXZfd2FybigmcGRldi0+ZGV2 LCAiZW5hYmxpbmcgeHRhbCBjbGsgZmFpbGVkICglZClcbiIsCisJCQkJIHJldCk7CisJCX0gZWxz ZSB7CisJCQlpZiAoY2xrX2dldF9yYXRlKGNsaykgPT0gNDAwMDAwMDApCisJCQkJcHJpdi0+eHRh bF9pc180MG0gPSB0cnVlOworCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7CisJCX0KKwkJ Y2xrX3B1dChjbGspOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBwcml2KTsK IAogCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKHBkZXYtPmRldi5vZl9ub2RlLCBj aGlsZCkgewogCQlzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmU7CkBAIC0yNzcs NyArMTM4Miw3IEBAIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChsYW5lX2lk ID49IE1WRUJVX0EzNzAwX0NPTVBIWV9MQU5FUykgeworCQlpZiAobGFuZV9pZCA+PSAzKSB7CiAJ CQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkICdyZWcnIHByb3BlcnR5XG4iKTsKIAkJCWNv bnRpbnVlOwogCQl9CkBAIC0yOTUsMTEgKzE0MDAsMjEgQEAgc3RhdGljIGludCBtdmVidV9hMzcw MF9jb21waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJCXJldHVybiBQ VFJfRVJSKHBoeSk7CiAJCX0KIAorCQlsYW5lLT5wcml2ID0gcHJpdjsKIAkJbGFuZS0+ZGV2ID0g JnBkZXYtPmRldjsKIAkJbGFuZS0+bW9kZSA9IFBIWV9NT0RFX0lOVkFMSUQ7CiAJCWxhbmUtPnN1 Ym1vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7CiAJCWxhbmUtPmlkID0gbGFuZV9pZDsKKwkJ bGFuZS0+aW52ZXJ0X3R4ID0gZmFsc2U7CisJCWxhbmUtPmludmVydF9yeCA9IGZhbHNlOwogCQlw aHlfc2V0X2RydmRhdGEocGh5LCBsYW5lKTsKKworCQkvKgorCQkgKiBUbyBhdm9pZCByZWx5aW5n IG9uIHRoZSBib290bG9hZGVyL2Zpcm13YXJlIGNvbmZpZ3VyYXRpb24sCisJCSAqIHBvd2VyIG9m ZiBhbGwgY29tcGh5cy4KKwkJICovCisJCW12ZWJ1X2EzNzAwX2NvbXBoeV9yZXNldChwaHkpOwor CQlsYW5lLT5uZWVkc19yZXNldCA9IGZhbHNlOwogCX0KIAogCXByb3ZpZGVyID0gZGV2bV9vZl9w aHlfcHJvdmlkZXJfcmVnaXN0ZXIoJnBkZXYtPmRldiwKQEAgLTMyMyw1ICsxNDM4LDcgQEAgc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZlYnVfYTM3MDBfY29tcGh5X2RyaXZlciA9IHsK IG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXZlYnVfYTM3MDBfY29tcGh5X2RyaXZlcik7CiAKIE1P RFVMRV9BVVRIT1IoIk1pcXXDqGwgUmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tPiIp OworTU9EVUxFX0FVVEhPUigiUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4iKTsKK01PRFVM RV9BVVRIT1IoIk1hcmVrIEJlaMO6biA8a2FiZWxAa2VybmVsLm9yZz4iKTsKIE1PRFVMRV9ERVND UklQVElPTigiQ29tbW9uIFBIWSBkcml2ZXIgZm9yIEEzNzAwIik7CiBNT0RVTEVfTElDRU5TRSgi R1BMIHYyIik7Ci0tIAoyLjM0LjEKCgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1w aHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1waHkK