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 011CFCCF9F8 for ; Wed, 5 Nov 2025 08:29:27 +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=Rumt0l75iwUBYJKr0EtBHTxfh58nlSfNTPrUAizlhy0=; b=AKwuQOqr9Yar4R L1IYFX1kPP9EM4FWcknJM7hnS9WFz1oRYP6gxJY6Q8Nz8GAzT15jRMP94SLQlvl/9ZkrZcEHRHBpN lcP+/f4zSgpIuxTmP03fLM9TEd39VPkVeDeIjCGGYErVf/5ZHvpMQLGwbiaGt8kRVAMdvaZ4zWDm3 XFmUDaZICcLb02ICZbHf7Pd1UJOukMIW4IFyLyPwT1RVJdF2uUMYDKDWbGqTWIqwEKViF19BNLNBB jqkpUiQWb+9FB4r7uWmsw18PgdtD8RYMlUQSEzzpOF8EOfPQfDVdPlCtQ9XRYAqVO8FgCV7osjT49 xhewXfXthJf47gfnYRHg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vGYtH-0000000DHVV-0mBx; Wed, 05 Nov 2025 08:29:15 +0000 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vGYtE-0000000DHTN-3G8m for linux-riscv@lists.infradead.org; Wed, 05 Nov 2025 08:29:14 +0000 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-294fe7c2e69so61163055ad.0 for ; Wed, 05 Nov 2025 00:29:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc.com; s=google; t=1762331352; x=1762936152; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mf41sNUeGzW5wXaLxNujZAvPXMLpV6g78NpsX8NDBNI=; b=bQsmYQ5Eq/ck4+6FKf8CRx2RZRggKC3kUSH+Z9aUR9jhfkXTxMRQu2u+To830iR+pC ZjpuO5q+nyr5ew0pl8Ah7wlFv9XHeA4gO2JrygyvN989go8FYcJzlfaILsjSObQZidbR QXG+ati5Yndd/aY1Rdv7HI8EugLmBrB6+tRnhj1FogN1Vg3s97JASjfWbPNvDLzpa/LJ KZeHeIv/TrANfL201XEj7YZyoqp18CjvcZb5HKSeWc/hL1ApnWS7Qxqj8I1se9xhl3oP 5UqcHLcIK72cwPNsx7SxNp3t9pBGIFM3K6WXJxR5A056GMwQFgPlwsNJXHG7anbpSXkX 4ChA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762331352; x=1762936152; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mf41sNUeGzW5wXaLxNujZAvPXMLpV6g78NpsX8NDBNI=; b=BMsLladN1Cdk61tHjDuFZy0LLr0XYC2Xrpn/XMS8SCEtrt7MPFHHm3OQzVkF1K+2IR KjWfDULJIBGgJ1ABcQxLVHxW+y0E36UhZ8Ns2tGLo3I7m5jg/YNCWrWFRXICDi/JnH1/ 8LinkdMcFiyGbAe7v3mwaylnIihJNczCjMJjtdYO0csH7byuPrgHuRXuEFK/HDYwleeS 29ErT3AtatXQveu8ARRUovTr21HHeyPJJWdZrWA5vda6au7sKZhV6EGMe7dd+fmbu6mg jd6UhVnX3t5rqITDXF04O0ap4Q+MLgq8v+cOkPPDeF0DjfUx48llvQhX893e5BJ/eHr3 xVJw== X-Forwarded-Encrypted: i=1; AJvYcCVdm5emNUnJiCI7AMV3MdjLlSZMEjC1j0mXYhHncMf1HH+K+/ciEk8/SUUSTs1o3S6kdaCMhqCZ0sQ7DA==@lists.infradead.org X-Gm-Message-State: AOJu0YwktOLlikXpjthvBhxUXDTxv0HsXRP8Ao1xctD1T0LVNShkKuY0 FDRGzxFEzvP/adxe8D9hE5zIkTO4yyBzW1T1g07ZN34lYL6zRMo8pMteIsfrlzxzYPc= X-Gm-Gg: ASbGncsV/UjkdzIKtw78kr05GeLYvd1gVYwL3xpyb+LFbB7PIUj6S9rDIPoAD2W1Xn4 xGKQ7v8EBJd19Qv6VjvXFlT2HUgsPZcqqLoHURZQdvgDKUhpTXDq5pRO3Sa/HbGBS+NMNrSlU3T qjP1G0E2H/uNAPn44NBJEyqZxpXKoGFwxVgqmfYV9SNs0EFnSxU9NaZTk1udaF/S9HnVSEjZfs3 IMeVTFHZGVCZYQp8HhWJMPILm9/EHmeqHlBuiD0BM5ctTO6Un0uzMV1ii7mh0zhkxR1JSOgEsAo prW/GagqrQwZLcTq1Gkn4wXV0lrBXRlhndtn4F3s9grTKVlIt2/YZ2vH8BmZVlFGarBXHFVk1an hbI3gh29xGTVIZC+xJ6V0xWAZ1JL6q/5YMo4zkeTwAhNdbmkw8atEoZby X-Google-Smtp-Source: AGHT+IGaa9rkx0tEgDIGzvQq5Gbb3WmX8d59GIZdj0I5KA2BYoFxV6YfJVLJ2Oa0cCGOHw+LbSavnw== X-Received: by 2002:a17:902:ef09:b0:295:5d0b:e119 with SMTP id d9443c01a7336-2962adf02f0mr35769345ad.26.1762331351888; Wed, 05 Nov 2025 00:29:11 -0800 (PST) Received: from cleger.eu.int ([2001:41d0:420:f300::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29601a741e3sm51870875ad.98.2025.11.05.00.29.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Nov 2025 00:29:11 -0800 (PST) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Himanshu Chauhan , Anup Patel , Xu Lu , Atish Patra , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , Yunhui Cui , Conor Dooley Subject: [PATCH v8 3/5] drivers: firmware: add riscv SSE support Date: Wed, 5 Nov 2025 08:26:35 +0000 Message-ID: <20251105082639.342973-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251105082639.342973-1-cleger@rivosinc.com> References: <20251105082639.342973-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251105_002912_852546_55D7E8A0 X-CRM114-Status: GOOD ( 22.00 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org QWRkIGRyaXZlciBsZXZlbCBpbnRlcmZhY2UgdG8gdXNlIFJJU0MtViBTU0UgYXJjaCBzdXBwb3J0 LiBUaGlzIGludGVyZmFjZQphbGxvd3MgcmVnaXN0ZXJpbmcgU1NFIGhhbmRsZXJzLCBhbmQgcmVj ZWl2ZSB0aGVtLiBUaGlzIHdpbGwgYmUgdXNlZCBieQpQTVUgYW5kIEdIRVMgZHJpdmVyLgoKQ28t ZGV2ZWxvcGVkLWJ5OiBIaW1hbnNodSBDaGF1aGFuIDxoY2hhdWhhbkB2ZW50YW5hbWljcm8uY29t PgpTaWduZWQtb2ZmLWJ5OiBIaW1hbnNodSBDaGF1aGFuIDxoY2hhdWhhbkB2ZW50YW5hbWljcm8u Y29tPgpTaWduZWQtb2ZmLWJ5OiBDbMOpbWVudCBMw6lnZXIgPGNsZWdlckByaXZvc2luYy5jb20+ CkFja2VkLWJ5OiBDb25vciBEb29sZXkgPGNvbm9yLmRvb2xleUBtaWNyb2NoaXAuY29tPgotLS0K IE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1ICsKIGRyaXZlcnMv ZmlybXdhcmUvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZmlybXdhcmUv TWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZmlybXdhcmUvcmlzY3YvS2Nv bmZpZyAgICAgICAgIHwgIDE1ICsKIGRyaXZlcnMvZmlybXdhcmUvcmlzY3YvTWFrZWZpbGUgICAg ICAgIHwgICAzICsKIGRyaXZlcnMvZmlybXdhcmUvcmlzY3YvcmlzY3Zfc2JpX3NzZS5jIHwgNjk0 ICsrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvcmlzY3Zfc2JpX3NzZS5o ICAgICAgICAgIHwgIDU3ICsrCiA3IGZpbGVzIGNoYW5nZWQsIDc4NiBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9maXJtd2FyZS9yaXNjdi9LY29uZmlnCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9maXJtd2FyZS9yaXNjdi9NYWtlZmlsZQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZmlybXdhcmUvcmlzY3YvcmlzY3Zfc2JpX3NzZS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgaW5jbHVkZS9saW51eC9yaXNjdl9zYmlfc3NlLmgKCmRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDQ2YmQ4ZTAzMzA0Mi4uZjY2NGZjYTZjOWRmIDEw MDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjIxMDUsNiArMjIx MDUsMTMgQEAgVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVs L2dpdC9pb21tdS9saW51eC5naXQKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n cy9pb21tdS9yaXNjdixpb21tdS55YW1sCiBGOglkcml2ZXJzL2lvbW11L3Jpc2N2LwogCitSSVND LVYgRklSTVdBUkUgRFJJVkVSUworTToJQ29ub3IgRG9vbGV5IDxjb25vckBrZXJuZWwub3JnPgor TDoJbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZworUzoJTWFpbnRhaW5lZAorVDoJZ2l0 IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9jb25vci9saW51 eC5naXQKK0Y6CWRyaXZlcnMvZmlybXdhcmUvcmlzY3YvKgorCiBSSVNDLVYgTUlDUk9DSElQIEZQ R0EgU1VQUE9SVAogTToJQ29ub3IgRG9vbGV5IDxjb25vci5kb29sZXlAbWljcm9jaGlwLmNvbT4K IE06CURhaXJlIE1jTmFtYXJhIDxkYWlyZS5tY25hbWFyYUBtaWNyb2NoaXAuY29tPgpAQCAtMjIx ODQsNiArMjIxOTEsMTQgQEAgRjoJYXJjaC9yaXNjdi9ib290L2R0cy9zcGFjZW1pdC8KIE46CXNw YWNlbWl0CiBLOglzcGFjZW1pdAogCitSSVNDLVYgU1NFIERSSVZFUgorTToJQ2zDqW1lbnQgTMOp Z2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgorUjoJSGltYW5zaHUgQ2hhdWhhbiA8aGltYW5zaHVA dGhlY2hhdWhhbi5kZXY+CitMOglsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCitTOglN YWludGFpbmVkCitGOglkcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L3Jpc2N2X3NzZS5jCitGOglpbmNs dWRlL2xpbnV4L3Jpc2N2X3NzZS5oCisKIFJJU0MtViBUSEVBRCBTb0MgU1VQUE9SVAogTToJRHJl dyBGdXN0aW5pIDxmdXN0aW5pQGtlcm5lbC5vcmc+CiBNOglHdW8gUmVuIDxndW9yZW5Aa2VybmVs Lm9yZz4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZyBiL2RyaXZlcnMvZmly bXdhcmUvS2NvbmZpZwppbmRleCBiYmQyMTU1ZDg0ODMuLjE4OTRkZjg3YjA4ZSAxMDA2NDQKLS0t IGEvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZp ZwpAQCAtMjk0LDYgKzI5NCw3IEBAIHNvdXJjZSAiZHJpdmVycy9maXJtd2FyZS9tZXNvbi9LY29u ZmlnIgogc291cmNlICJkcml2ZXJzL2Zpcm13YXJlL21pY3JvY2hpcC9LY29uZmlnIgogc291cmNl ICJkcml2ZXJzL2Zpcm13YXJlL3BzY2kvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9maXJtd2Fy ZS9xY29tL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvZmlybXdhcmUvcmlzY3YvS2NvbmZpZyIK IHNvdXJjZSAiZHJpdmVycy9maXJtd2FyZS9zYW1zdW5nL0tjb25maWciCiBzb3VyY2UgImRyaXZl cnMvZmlybXdhcmUvc21jY2MvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9maXJtd2FyZS90ZWdy YS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZSBiL2RyaXZl cnMvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggNGRkZWMyODIwYzk2Li42Y2RkODQ1NzBlYTcgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9maXJtd2Fy ZS9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQCBvYmoteQkJCQkrPSBlZmkvCiBvYmoteQkJCQkr PSBpbXgvCiBvYmoteQkJCQkrPSBwc2NpLwogb2JqLXkJCQkJKz0gcWNvbS8KK29iai15CQkJCSs9 IHJpc2N2Lwogb2JqLXkJCQkJKz0gc2Ftc3VuZy8KIG9iai15CQkJCSs9IHNtY2NjLwogb2JqLXkJ CQkJKz0gdGVncmEvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L0tjb25maWcg Yi9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi5lZDViNjYzYWM1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2Zpcm13YXJlL3Jpc2N2L0tjb25maWcKQEAgLTAsMCArMSwxNSBAQAorIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CittZW51ICJSaXNjLVYgU3BlY2lmaWMgZmlybXdhcmUg ZHJpdmVycyIKK2RlcGVuZHMgb24gUklTQ1YKKworY29uZmlnIFJJU0NWX1NCSV9TU0UKKwlib29s ICJFbmFibGUgU0JJIFN1cGVydmlzb3IgU29mdHdhcmUgRXZlbnRzIHN1cHBvcnQiCisJZGVwZW5k cyBvbiBSSVNDVl9TQkkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGUgU3VwZXJ2aXNvciBTb2Z0 d2FyZSBFdmVudHMgc3VwcG9ydCBhbGxvd3MgdGhlIFNCSSB0byBkZWxpdmVyCisJICBOTUktbGlr ZSBub3RpZmljYXRpb25zIHRvIHRoZSBzdXBlcnZpc29yIG1vZGUgc29mdHdhcmUuIFdoZW4gZW5h YmxlZCwKKwkgIHRoaXMgb3B0aW9uIHByb3ZpZGVzIHN1cHBvcnQgdG8gcmVnaXN0ZXIgY2FsbGJh Y2tzIG9uIHNwZWNpZmljIFNTRQorCSAgZXZlbnRzLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9k cml2ZXJzL2Zpcm13YXJlL3Jpc2N2L01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9yaXNjdi9N YWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM4Nzk1ZDRi YmIyZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvcmlzY3YvTWFrZWZpbGUK QEAgLTAsMCArMSwzIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK29i ai0kKENPTkZJR19SSVNDVl9TQklfU1NFKQkJKz0gcmlzY3Zfc2JpX3NzZS5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L3Jpc2N2X3NiaV9zc2UuYyBiL2RyaXZlcnMvZmlybXdh cmUvcmlzY3YvcmlzY3Zfc2JpX3NzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uYzdmMjliMTBjZGZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJtd2Fy ZS9yaXNjdi9yaXNjdl9zYmlfc3NlLmMKQEAgLTAsMCArMSw2OTQgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisvKgorICogQ29weXJpZ2h0IChDKSAyMDI1 IFJpdm9zIEluYy4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJzc2U6ICIgZm10CisKKyNp bmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVob3RwbHVnLmg+CisjaW5j bHVkZSA8bGludXgvY3B1X3BtLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1 ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUtZGVmcy5oPgorI2luY2x1 ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jpc2N2X3NiaV9zc2UuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vc2JpLmg+CisjaW5jbHVkZSA8 YXNtL3NzZS5oPgorCitzdHJ1Y3Qgc3NlX2V2ZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7 CisJdTMyIGV2dF9pZDsKKwl1MzIgcHJpb3JpdHk7CisJc3NlX2V2ZW50X2hhbmRsZXJfZm4gKmhh bmRsZXI7CisJdm9pZCAqaGFuZGxlcl9hcmc7CisJLyogT25seSB2YWxpZCBmb3IgZ2xvYmFsIGV2 ZW50cyAqLworCXVuc2lnbmVkIGludCBjcHU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCBzc2VfcmVn aXN0ZXJlZF9ldmVudCAqZ2xvYmFsOworCQlzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgX19w ZXJjcHUgKmxvY2FsOworCX07Cit9OworCitzdGF0aWMgaW50IHNzZV9ocF9zdGF0ZTsKK3N0YXRp YyBib29sIHNzZV9hdmFpbGFibGUgX19yb19hZnRlcl9pbml0Oworc3RhdGljIERFRklORV9TUElO TE9DSyhldmVudHNfbGlzdF9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoZXZlbnRzKTsKK3N0YXRp YyBERUZJTkVfTVVURVgoc3NlX211dGV4KTsKKworc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50 IHsKKwlzdHJ1Y3Qgc3NlX2V2ZW50X2FyY2hfZGF0YSBhcmNoOworCXN0cnVjdCBzc2VfZXZlbnQg KmV2ZW50OworCXVuc2lnbmVkIGxvbmcgYXR0cjsKKwlib29sIGlzX2VuYWJsZWQ7Cit9OworCit2 b2lkIHNzZV9oYW5kbGVfZXZlbnQoc3RydWN0IHNzZV9ldmVudF9hcmNoX2RhdGEgKmFyY2hfZXZl bnQsCisJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCByZXQ7CisJc3RydWN0 IHNzZV9yZWdpc3RlcmVkX2V2ZW50ICpyZWdfZXZ0ID0KKwkJY29udGFpbmVyX29mKGFyY2hfZXZl bnQsIHN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVudCwgYXJjaCk7CisJc3RydWN0IHNzZV9ldmVu dCAqZXZ0ID0gcmVnX2V2dC0+ZXZlbnQ7CisKKwlyZXQgPSBldnQtPmhhbmRsZXIoZXZ0LT5ldnRf aWQsIGV2dC0+aGFuZGxlcl9hcmcsIHJlZ3MpOworCWlmIChyZXQpCisJCXByX3dhcm4oImV2ZW50 ICV4IGhhbmRsZXIgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIGV2dC0+ZXZ0X2lkLCByZXQpOwor fQorCitzdGF0aWMgc3RydWN0IHNzZV9ldmVudCAqc3NlX2V2ZW50X2dldCh1MzIgZXZ0KQorewor CXN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50ID0gTlVMTDsKKworCXNjb3BlZF9ndWFyZChzcGlubG9j aywgJmV2ZW50c19saXN0X2xvY2spIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmV2 ZW50cywgbGlzdCkgeworCQkJaWYgKGV2ZW50LT5ldnRfaWQgPT0gZXZ0KQorCQkJCXJldHVybiBl dmVudDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgcGh5c19hZGRyX3Qg c3NlX2V2ZW50X2dldF9hdHRyX3BoeXMoc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50ICpyZWdf ZXZ0KQoreworCXBoeXNfYWRkcl90IHBoeXM7CisJdm9pZCAqYWRkciA9ICZyZWdfZXZ0LT5hdHRy OworCisJaWYgKHNzZV9ldmVudF9pc19nbG9iYWwocmVnX2V2dC0+ZXZlbnQtPmV2dF9pZCkpCisJ CXBoeXMgPSB2aXJ0X3RvX3BoeXMoYWRkcik7CisJZWxzZQorCQlwaHlzID0gcGVyX2NwdV9wdHJf dG9fcGh5cyhhZGRyKTsKKworCXJldHVybiBwaHlzOworfQorCitzdGF0aWMgc3RydWN0IHNzZV9y ZWdpc3RlcmVkX2V2ZW50ICpzc2VfZ2V0X3JlZ19ldnQoc3RydWN0IHNzZV9ldmVudCAqZXZlbnQp Cit7CisJaWYgKHNzZV9ldmVudF9pc19nbG9iYWwoZXZlbnQtPmV2dF9pZCkpCisJCXJldHVybiBl dmVudC0+Z2xvYmFsOworCWVsc2UKKwkJcmV0dXJuIHBlcl9jcHVfcHRyKGV2ZW50LT5sb2NhbCwg c21wX3Byb2Nlc3Nvcl9pZCgpKTsKK30KKworc3RhdGljIGludCBzc2Vfc2JpX2V2ZW50X2Z1bmMo c3RydWN0IHNzZV9ldmVudCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcgZnVuYykKK3sKKwlzdHJ1Y3Qg c2JpcmV0IHJldDsKKwl1MzIgZXZ0ID0gZXZlbnQtPmV2dF9pZDsKKwlzdHJ1Y3Qgc3NlX3JlZ2lz dGVyZWRfZXZlbnQgKnJlZ19ldnQgPSBzc2VfZ2V0X3JlZ19ldnQoZXZlbnQpOworCisJcmV0ID0g c2JpX2VjYWxsKFNCSV9FWFRfU1NFLCBmdW5jLCBldnQsIDAsIDAsIDAsIDAsIDApOworCWlmIChy ZXQuZXJyb3IpIHsKKwkJcHJfd2FybigiRmFpbGVkIHRvIGV4ZWN1dGUgZnVuYyAlbHgsIGV2ZW50 ICV4LCBlcnJvciAlbGRcbiIsCisJCQlmdW5jLCBldnQsIHJldC5lcnJvcik7CisJCXJldHVybiBz YmlfZXJyX21hcF9saW51eF9lcnJubyhyZXQuZXJyb3IpOworCX0KKworCWlmIChmdW5jID09IFNC SV9TU0VfRVZFTlRfRElTQUJMRSkKKwkJcmVnX2V2dC0+aXNfZW5hYmxlZCA9IGZhbHNlOworCWVs c2UgaWYgKGZ1bmMgPT0gU0JJX1NTRV9FVkVOVF9FTkFCTEUpCisJCXJlZ19ldnQtPmlzX2VuYWJs ZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzc2VfZXZlbnRfZGlzYWJsZV9sb2Nh bChzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gc3NlX3NiaV9ldmVudF9mdW5j KGV2ZW50LCBTQklfU1NFX0VWRU5UX0RJU0FCTEUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3Nl X2V2ZW50X2Rpc2FibGVfbG9jYWwpOworCitpbnQgc3NlX2V2ZW50X2VuYWJsZV9sb2NhbChzdHJ1 Y3Qgc3NlX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gc3NlX3NiaV9ldmVudF9mdW5jKGV2ZW50 LCBTQklfU1NFX0VWRU5UX0VOQUJMRSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzc2VfZXZlbnRf ZW5hYmxlX2xvY2FsKTsKKworc3RhdGljIGludCBzc2VfZXZlbnRfYXR0cl9nZXRfbm9fbG9jayhz dHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgKnJlZ19ldnQsCisJCQkJICAgICAgdW5zaWduZWQg bG9uZyBhdHRyX2lkLCB1bnNpZ25lZCBsb25nICp2YWwpCit7CisJc3RydWN0IHNiaXJldCBzcmV0 OworCXUzMiBldnQgPSByZWdfZXZ0LT5ldmVudC0+ZXZ0X2lkOworCXVuc2lnbmVkIGxvbmcgcGh5 czsKKworCXBoeXMgPSBzc2VfZXZlbnRfZ2V0X2F0dHJfcGh5cyhyZWdfZXZ0KTsKKworCXNyZXQg PSBzYmlfZWNhbGwoU0JJX0VYVF9TU0UsIFNCSV9TU0VfRVZFTlRfQVRUUl9SRUFELCBldnQsIGF0 dHJfaWQsIDEsCisJCQkgcGh5cywgMCwgMCk7CisJaWYgKHNyZXQuZXJyb3IpIHsKKwkJcHJfZGVi dWcoIkZhaWxlZCB0byBnZXQgZXZlbnQgJXggYXR0ciAlbHgsIGVycm9yICVsZFxuIiwgZXZ0LAor CQkJIGF0dHJfaWQsIHNyZXQuZXJyb3IpOworCQlyZXR1cm4gc2JpX2Vycl9tYXBfbGludXhfZXJy bm8oc3JldC5lcnJvcik7CisJfQorCisJKnZhbCA9IHJlZ19ldnQtPmF0dHI7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBzc2VfZXZlbnRfYXR0cl9zZXRfbm9sb2NrKHN0cnVjdCBzc2Vf cmVnaXN0ZXJlZF9ldmVudCAqcmVnX2V2dCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXR0cl9p ZCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJc3RydWN0IHNiaXJldCBzcmV0OworCXUzMiBldnQg PSByZWdfZXZ0LT5ldmVudC0+ZXZ0X2lkOworCXVuc2lnbmVkIGxvbmcgcGh5czsKKworCXJlZ19l dnQtPmF0dHIgPSB2YWw7CisJcGh5cyA9IHNzZV9ldmVudF9nZXRfYXR0cl9waHlzKHJlZ19ldnQp OworCisJc3JldCA9IHNiaV9lY2FsbChTQklfRVhUX1NTRSwgU0JJX1NTRV9FVkVOVF9BVFRSX1dS SVRFLCBldnQsIGF0dHJfaWQsIDEsCisJCQkgcGh5cywgMCwgMCk7CisJaWYgKHNyZXQuZXJyb3Ip CisJCXByX2RlYnVnKCJGYWlsZWQgdG8gc2V0IGV2ZW50ICV4IGF0dHIgJWx4LCBlcnJvciAlbGRc biIsIGV2dCwKKwkJCSBhdHRyX2lkLCBzcmV0LmVycm9yKTsKKworCXJldHVybiBzYmlfZXJyX21h cF9saW51eF9lcnJubyhzcmV0LmVycm9yKTsKK30KKworc3RhdGljIHZvaWQgc3NlX2dsb2JhbF9l dmVudF91cGRhdGVfY3B1KHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50LAorCQkJCQl1bnNpZ25lZCBp bnQgY3B1KQoreworCXN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVudCAqcmVnX2V2dCA9IGV2ZW50 LT5nbG9iYWw7CisKKwlldmVudC0+Y3B1ID0gY3B1OworCWFyY2hfc3NlX2V2ZW50X3VwZGF0ZV9j cHUoJnJlZ19ldnQtPmFyY2gsIGNwdSk7Cit9CisKK3N0YXRpYyBpbnQgc3NlX2V2ZW50X3NldF90 YXJnZXRfY3B1X25vbG9jayhzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCwKKwkJCQkJICAgdW5zaWdu ZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGhhcnRfaWQgPSBjcHVpZF90b19oYXJ0aWRf bWFwKGNwdSk7CisJc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50ICpyZWdfZXZ0ID0gZXZlbnQt Pmdsb2JhbDsKKwl1MzIgZXZ0ID0gZXZlbnQtPmV2dF9pZDsKKwlib29sIHdhc19lbmFibGVkOwor CWludCByZXQ7CisKKwlpZiAoIXNzZV9ldmVudF9pc19nbG9iYWwoZXZ0KSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwl3YXNfZW5hYmxlZCA9IHJlZ19ldnQtPmlzX2VuYWJsZWQ7CisJaWYgKHdhc19l bmFibGVkKQorCQlzc2VfZXZlbnRfZGlzYWJsZV9sb2NhbChldmVudCk7CisKKwlyZXQgPSBzc2Vf ZXZlbnRfYXR0cl9zZXRfbm9sb2NrKHJlZ19ldnQsIFNCSV9TU0VfQVRUUl9QUkVGRVJSRURfSEFS VCwKKwkJCQkJaGFydF9pZCk7CisJaWYgKHJldCA9PSAwKQorCQlzc2VfZ2xvYmFsX2V2ZW50X3Vw ZGF0ZV9jcHUoZXZlbnQsIGNwdSk7CisKKwlpZiAod2FzX2VuYWJsZWQpCisJCXNzZV9ldmVudF9l bmFibGVfbG9jYWwoZXZlbnQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzc2VfZXZlbnRfc2V0 X3RhcmdldF9jcHUoc3RydWN0IHNzZV9ldmVudCAqZXZlbnQsIHVuc2lnbmVkIGludCBjcHUpCit7 CisJaW50IHJldDsKKworCXNjb3BlZF9ndWFyZChtdXRleCwgJnNzZV9tdXRleCkgeworCQlzY29w ZWRfZ3VhcmQoY3B1c19yZWFkX2xvY2spIHsKKwkJCWlmICghY3B1X29ubGluZShjcHUpKQorCQkJ CXJldHVybiAtRUlOVkFMOworCisJCQlyZXQgPSBzc2VfZXZlbnRfc2V0X3RhcmdldF9jcHVfbm9s b2NrKGV2ZW50LCBjcHUpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKHNzZV9ldmVudF9zZXRfdGFyZ2V0X2NwdSk7CisKK3N0YXRpYyBpbnQgc3NlX2V2ZW50 X2luaXRfcmVnaXN0ZXJlZCh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCSAgICAgc3RydWN0IHNzZV9y ZWdpc3RlcmVkX2V2ZW50ICpyZWdfZXZ0LAorCQkJCSAgICAgc3RydWN0IHNzZV9ldmVudCAqZXZl bnQpCit7CisJcmVnX2V2dC0+ZXZlbnQgPSBldmVudDsKKworCXJldHVybiBhcmNoX3NzZV9pbml0 X2V2ZW50KCZyZWdfZXZ0LT5hcmNoLCBldmVudC0+ZXZ0X2lkLCBjcHUpOworfQorCitzdGF0aWMg dm9pZCBzc2VfZXZlbnRfZnJlZV9yZWdpc3RlcmVkKHN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVu dCAqcmVnX2V2dCkKK3sKKwlhcmNoX3NzZV9mcmVlX2V2ZW50KCZyZWdfZXZ0LT5hcmNoKTsKK30K Kworc3RhdGljIGludCBzc2VfZXZlbnRfYWxsb2NfZ2xvYmFsKHN0cnVjdCBzc2VfZXZlbnQgKmV2 ZW50KQoreworCWludCBlcnI7CisJc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50ICpyZWdfZXZ0 OworCisJcmVnX2V2dCA9IGt6YWxsb2Moc2l6ZW9mKCpyZWdfZXZ0KSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFyZWdfZXZ0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWV2ZW50LT5nbG9iYWwgPSByZWdf ZXZ0OworCWVyciA9IHNzZV9ldmVudF9pbml0X3JlZ2lzdGVyZWQoc21wX3Byb2Nlc3Nvcl9pZCgp LCByZWdfZXZ0LCBldmVudCk7CisJaWYgKGVycikKKwkJa2ZyZWUocmVnX2V2dCk7CisKKwlyZXR1 cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNzZV9ldmVudF9hbGxvY19sb2NhbChzdHJ1Y3Qgc3Nl X2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBjcHUsIGVycl9jcHU7 CisJc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50ICpyZWdfZXZ0OworCXN0cnVjdCBzc2VfcmVn aXN0ZXJlZF9ldmVudCBfX3BlcmNwdSAqcmVnX2V2dHM7CisKKwlyZWdfZXZ0cyA9IGFsbG9jX3Bl cmNwdShzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQpOworCWlmICghcmVnX2V2dHMpCisJCXJl dHVybiAtRU5PTUVNOworCisJZXZlbnQtPmxvY2FsID0gcmVnX2V2dHM7CisKKwlmb3JfZWFjaF9w b3NzaWJsZV9jcHUoY3B1KSB7CisJCXJlZ19ldnQgPSBwZXJfY3B1X3B0cihyZWdfZXZ0cywgY3B1 KTsKKwkJZXJyID0gc3NlX2V2ZW50X2luaXRfcmVnaXN0ZXJlZChjcHUsIHJlZ19ldnQsIGV2ZW50 KTsKKwkJaWYgKGVycikgeworCQkJZXJyX2NwdSA9IGNwdTsKKwkJCWdvdG8gZXJyX2ZyZWVfcGVy X2NwdTsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9wZXJfY3B1OgorCWZvcl9l YWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJaWYgKGNwdSA9PSBlcnJfY3B1KQorCQkJYnJlYWs7 CisJCXJlZ19ldnQgPSBwZXJfY3B1X3B0cihyZWdfZXZ0cywgY3B1KTsKKwkJc3NlX2V2ZW50X2Zy ZWVfcmVnaXN0ZXJlZChyZWdfZXZ0KTsKKwl9CisKKwlmcmVlX3BlcmNwdShyZWdfZXZ0cyk7CisK KwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHNzZV9ldmVudCAqc3NlX2V2ZW50X2Fs bG9jKHUzMiBldnQsIHUzMiBwcmlvcml0eSwKKwkJCQkJIHNzZV9ldmVudF9oYW5kbGVyX2ZuICpo YW5kbGVyLAorCQkJCQkgdm9pZCAqYXJnKQoreworCWludCBlcnI7CisJc3RydWN0IHNzZV9ldmVu dCAqZXZlbnQ7CisKKwlldmVudCA9IGt6YWxsb2Moc2l6ZW9mKCpldmVudCksIEdGUF9LRVJORUwp OworCWlmICghZXZlbnQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZXZlbnQtPmV2 dF9pZCA9IGV2dDsKKwlldmVudC0+cHJpb3JpdHkgPSBwcmlvcml0eTsKKwlldmVudC0+aGFuZGxl cl9hcmcgPSBhcmc7CisJZXZlbnQtPmhhbmRsZXIgPSBoYW5kbGVyOworCisJaWYgKHNzZV9ldmVu dF9pc19nbG9iYWwoZXZ0KSkKKwkJZXJyID0gc3NlX2V2ZW50X2FsbG9jX2dsb2JhbChldmVudCk7 CisJZWxzZQorCQllcnIgPSBzc2VfZXZlbnRfYWxsb2NfbG9jYWwoZXZlbnQpOworCisJaWYgKGVy cikgeworCQlrZnJlZShldmVudCk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJcmV0 dXJuIGV2ZW50OworfQorCitzdGF0aWMgaW50IHNzZV9zYmlfcmVnaXN0ZXJfZXZlbnQoc3RydWN0 IHNzZV9ldmVudCAqZXZlbnQsCisJCQkJICBzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgKnJl Z19ldnQpCit7CisJaW50IHJldDsKKworCXJldCA9IHNzZV9ldmVudF9hdHRyX3NldF9ub2xvY2so cmVnX2V2dCwgU0JJX1NTRV9BVFRSX1BSSU8sCisJCQkJCWV2ZW50LT5wcmlvcml0eSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBhcmNoX3NzZV9yZWdpc3Rlcl9ldmVudCgm cmVnX2V2dC0+YXJjaCk7Cit9CisKK3N0YXRpYyBpbnQgc3NlX2V2ZW50X3JlZ2lzdGVyX2xvY2Fs KHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50KQoreworCWludCByZXQ7CisJc3RydWN0IHNzZV9yZWdp c3RlcmVkX2V2ZW50ICpyZWdfZXZ0OworCisJcmVnX2V2dCA9IHBlcl9jcHVfcHRyKGV2ZW50LT5s b2NhbCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXQgPSBzc2Vfc2JpX3JlZ2lzdGVyX2V2ZW50 KGV2ZW50LCByZWdfZXZ0KTsKKwlpZiAocmV0KQorCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHJlZ2lz dGVyIGV2ZW50ICV4OiBlcnIgJWRcbiIsIGV2ZW50LT5ldnRfaWQsCisJCQkgcmV0KTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3NlX3NiaV91bnJlZ2lzdGVyX2V2ZW50KHN0cnVj dCBzc2VfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBzc2Vfc2JpX2V2ZW50X2Z1bmMoZXZlbnQs IFNCSV9TU0VfRVZFTlRfVU5SRUdJU1RFUik7Cit9CisKK3N0cnVjdCBzc2VfcGVyX2NwdV9ldnQg eworCXN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50OworCXVuc2lnbmVkIGxvbmcgZnVuYzsKKwljcHVt YXNrX3QgZXJyb3I7Cit9OworCitzdGF0aWMgdm9pZCBzc2VfZXZlbnRfcGVyX2NwdV9mdW5jKHZv aWQgKmluZm8pCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3NlX3Blcl9jcHVfZXZ0ICpjcHVfZXZ0 ID0gaW5mbzsKKworCWlmIChjcHVfZXZ0LT5mdW5jID09IFNCSV9TU0VfRVZFTlRfUkVHSVNURVIp CisJCXJldCA9IHNzZV9ldmVudF9yZWdpc3Rlcl9sb2NhbChjcHVfZXZ0LT5ldmVudCk7CisJZWxz ZQorCQlyZXQgPSBzc2Vfc2JpX2V2ZW50X2Z1bmMoY3B1X2V2dC0+ZXZlbnQsIGNwdV9ldnQtPmZ1 bmMpOworCisJaWYgKHJldCkKKwkJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwg JmNwdV9ldnQtPmVycm9yKTsKK30KKworc3RhdGljIHZvaWQgc3NlX2V2ZW50X2ZyZWUoc3RydWN0 IHNzZV9ldmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwlzdHJ1Y3Qgc3NlX3Jl Z2lzdGVyZWRfZXZlbnQgKnJlZ19ldnQ7CisKKwlpZiAoc3NlX2V2ZW50X2lzX2dsb2JhbChldmVu dC0+ZXZ0X2lkKSkgeworCQlzc2VfZXZlbnRfZnJlZV9yZWdpc3RlcmVkKGV2ZW50LT5nbG9iYWwp OworCQlrZnJlZShldmVudC0+Z2xvYmFsKTsKKwl9IGVsc2UgeworCQlmb3JfZWFjaF9wb3NzaWJs ZV9jcHUoY3B1KSB7CisJCQlyZWdfZXZ0ID0gcGVyX2NwdV9wdHIoZXZlbnQtPmxvY2FsLCBjcHUp OworCQkJc3NlX2V2ZW50X2ZyZWVfcmVnaXN0ZXJlZChyZWdfZXZ0KTsKKwkJfQorCQlmcmVlX3Bl cmNwdShldmVudC0+bG9jYWwpOworCX0KKworCWtmcmVlKGV2ZW50KTsKK30KKworc3RhdGljIGlu dCBzc2Vfb25fZWFjaF9jcHUoc3RydWN0IHNzZV9ldmVudCAqZXZlbnQsIHVuc2lnbmVkIGxvbmcg ZnVuYywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgcmV2ZXJ0X2Z1bmMpCit7CisJc3RydWN0IHNzZV9w ZXJfY3B1X2V2dCBjcHVfZXZ0OworCisJY3B1X2V2dC5ldmVudCA9IGV2ZW50OworCWNwdW1hc2tf Y2xlYXIoJmNwdV9ldnQuZXJyb3IpOworCWNwdV9ldnQuZnVuYyA9IGZ1bmM7CisJb25fZWFjaF9j cHUoc3NlX2V2ZW50X3Blcl9jcHVfZnVuYywgJmNwdV9ldnQsIDEpOworCS8qCisJICogSWYgdGhl cmUgYXJlIHNvbWUgZXJyb3IgcmVwb3J0ZWQgYnkgQ1BVcywgcmV2ZXJ0IGV2ZW50IHN0YXRlIG9u IHRoZQorCSAqIG90aGVyIG9uZXMKKwkgKi8KKwlpZiAoIWNwdW1hc2tfZW1wdHkoJmNwdV9ldnQu ZXJyb3IpKSB7CisJCWNwdW1hc2tfdCByZXZlcnQ7CisKKwkJY3B1bWFza19hbmRub3QoJnJldmVy dCwgY3B1X29ubGluZV9tYXNrLCAmY3B1X2V2dC5lcnJvcik7CisJCWNwdV9ldnQuZnVuYyA9IHJl dmVydF9mdW5jOworCQlvbl9lYWNoX2NwdV9tYXNrKCZyZXZlcnQsIHNzZV9ldmVudF9wZXJfY3B1 X2Z1bmMsICZjcHVfZXZ0LCAxKTsKKworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworaW50IHNzZV9ldmVudF9lbmFibGUoc3RydWN0IHNzZV9ldmVudCAqZXZlbnQpCit7CisJ aW50IHJldCA9IDA7CisKKwlzY29wZWRfZ3VhcmQobXV0ZXgsICZzc2VfbXV0ZXgpIHsKKwkJc2Nv cGVkX2d1YXJkKGNwdXNfcmVhZF9sb2NrKSB7CisJCQlpZiAoc3NlX2V2ZW50X2lzX2dsb2JhbChl dmVudC0+ZXZ0X2lkKSkgeworCQkJCXJldCA9IHNzZV9ldmVudF9lbmFibGVfbG9jYWwoZXZlbnQp OworCQkJfSBlbHNlIHsKKwkJCQlyZXQgPSBzc2Vfb25fZWFjaF9jcHUoZXZlbnQsCisJCQkJCQkg ICAgICBTQklfU1NFX0VWRU5UX0VOQUJMRSwKKwkJCQkJCSAgICAgIFNCSV9TU0VfRVZFTlRfRElT QUJMRSk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KHNzZV9ldmVudF9lbmFibGUpOworCitzdGF0aWMgaW50IHNzZV9ldmVudHNfbWFzayh2b2lkKQor eworCXN0cnVjdCBzYmlyZXQgcmV0OworCisJcmV0ID0gc2JpX2VjYWxsKFNCSV9FWFRfU1NFLCBT QklfU1NFX0hBUlRfTUFTSywgMCwgMCwgMCwgMCwgMCwgMCk7CisKKwlyZXR1cm4gc2JpX2Vycl9t YXBfbGludXhfZXJybm8ocmV0LmVycm9yKTsKK30KKworc3RhdGljIGludCBzc2VfZXZlbnRzX3Vu bWFzayh2b2lkKQoreworCXN0cnVjdCBzYmlyZXQgcmV0OworCisJcmV0ID0gc2JpX2VjYWxsKFNC SV9FWFRfU1NFLCBTQklfU1NFX0hBUlRfVU5NQVNLLCAwLCAwLCAwLCAwLCAwLCAwKTsKKworCXJl dHVybiBzYmlfZXJyX21hcF9saW51eF9lcnJubyhyZXQuZXJyb3IpOworfQorCitzdGF0aWMgdm9p ZCBzc2VfZXZlbnRfZGlzYWJsZV9ub2xvY2soc3RydWN0IHNzZV9ldmVudCAqZXZlbnQpCit7CisJ c3RydWN0IHNzZV9wZXJfY3B1X2V2dCBjcHVfZXZ0OworCisJaWYgKHNzZV9ldmVudF9pc19nbG9i YWwoZXZlbnQtPmV2dF9pZCkpIHsKKwkJc3NlX2V2ZW50X2Rpc2FibGVfbG9jYWwoZXZlbnQpOwor CX0gZWxzZSB7CisJCWNwdV9ldnQuZXZlbnQgPSBldmVudDsKKwkJY3B1X2V2dC5mdW5jID0gU0JJ X1NTRV9FVkVOVF9ESVNBQkxFOworCQlvbl9lYWNoX2NwdShzc2VfZXZlbnRfcGVyX2NwdV9mdW5j LCAmY3B1X2V2dCwgMSk7CisJfQorfQorCit2b2lkIHNzZV9ldmVudF9kaXNhYmxlKHN0cnVjdCBz c2VfZXZlbnQgKmV2ZW50KQoreworCXNjb3BlZF9ndWFyZChtdXRleCwgJnNzZV9tdXRleCkgewor CQlzY29wZWRfZ3VhcmQoY3B1c19yZWFkX2xvY2spIHsKKwkJCXNzZV9ldmVudF9kaXNhYmxlX25v bG9jayhldmVudCk7CisJCX0KKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzc2VfZXZlbnRfZGlz YWJsZSk7CisKK3N0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldmVudF9yZWdpc3Rlcih1MzIgZXZ0LCB1 MzIgcHJpb3JpdHksCisJCQkJICAgICBzc2VfZXZlbnRfaGFuZGxlcl9mbiAqaGFuZGxlciwgdm9p ZCAqYXJnKQoreworCXN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50OworCWludCBjcHU7CisJaW50IHJl dCA9IDA7CisKKwlpZiAoIXNzZV9hdmFpbGFibGUpCisJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RT VVBQKTsKKworCWd1YXJkKG11dGV4KSgmc3NlX211dGV4KTsKKwlpZiAoc3NlX2V2ZW50X2dldChl dnQpKQorCQlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsKKworCWV2ZW50ID0gc3NlX2V2ZW50X2Fs bG9jKGV2dCwgcHJpb3JpdHksIGhhbmRsZXIsIGFyZyk7CisJaWYgKElTX0VSUihldmVudCkpCisJ CXJldHVybiBldmVudDsKKworCXNjb3BlZF9ndWFyZChjcHVzX3JlYWRfbG9jaykgeworCQlpZiAo c3NlX2V2ZW50X2lzX2dsb2JhbChldnQpKSB7CisJCQl1bnNpZ25lZCBsb25nIHByZWZlcnJlZF9o YXJ0OworCisJCQlyZXQgPSBzc2VfZXZlbnRfYXR0cl9nZXRfbm9fbG9jayhldmVudC0+Z2xvYmFs LAorCQkJCQkJCSBTQklfU1NFX0FUVFJfUFJFRkVSUkVEX0hBUlQsCisJCQkJCQkJICZwcmVmZXJy ZWRfaGFydCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX2V2ZW50X2ZyZWU7CisKKwkJCWNw dSA9IHJpc2N2X2hhcnRpZF90b19jcHVpZChwcmVmZXJyZWRfaGFydCk7CisJCQlzc2VfZ2xvYmFs X2V2ZW50X3VwZGF0ZV9jcHUoZXZlbnQsIGNwdSk7CisKKwkJCXJldCA9IHNzZV9zYmlfcmVnaXN0 ZXJfZXZlbnQoZXZlbnQsIGV2ZW50LT5nbG9iYWwpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVy cl9ldmVudF9mcmVlOworCisJCX0gZWxzZSB7CisJCQlyZXQgPSBzc2Vfb25fZWFjaF9jcHUoZXZl bnQsIFNCSV9TU0VfRVZFTlRfUkVHSVNURVIsCisJCQkJCSAgICAgIFNCSV9TU0VfRVZFTlRfRElT QUJMRSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX2V2ZW50X2ZyZWU7CisJCX0KKwl9CisK KwlzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZldmVudHNfbGlzdF9sb2NrKQorCQlsaXN0X2FkZCgm ZXZlbnQtPmxpc3QsICZldmVudHMpOworCisJcmV0dXJuIGV2ZW50OworCitlcnJfZXZlbnRfZnJl ZToKKwlzc2VfZXZlbnRfZnJlZShldmVudCk7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQor RVhQT1JUX1NZTUJPTF9HUEwoc3NlX2V2ZW50X3JlZ2lzdGVyKTsKKworc3RhdGljIHZvaWQgc3Nl X2V2ZW50X3VucmVnaXN0ZXJfbm9sb2NrKHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50KQoreworCXN0 cnVjdCBzc2VfcGVyX2NwdV9ldnQgY3B1X2V2dDsKKworCWlmIChzc2VfZXZlbnRfaXNfZ2xvYmFs KGV2ZW50LT5ldnRfaWQpKSB7CisJCXNzZV9zYmlfdW5yZWdpc3Rlcl9ldmVudChldmVudCk7CisJ fSBlbHNlIHsKKwkJY3B1X2V2dC5ldmVudCA9IGV2ZW50OworCQljcHVfZXZ0LmZ1bmMgPSBTQklf U1NFX0VWRU5UX1VOUkVHSVNURVI7CisJCW9uX2VhY2hfY3B1KHNzZV9ldmVudF9wZXJfY3B1X2Z1 bmMsICZjcHVfZXZ0LCAxKTsKKwl9Cit9CisKK3ZvaWQgc3NlX2V2ZW50X3VucmVnaXN0ZXIoc3Ry dWN0IHNzZV9ldmVudCAqZXZlbnQpCit7CisJc2NvcGVkX2d1YXJkKG11dGV4LCAmc3NlX211dGV4 KSB7CisJCXNjb3BlZF9ndWFyZChjcHVzX3JlYWRfbG9jaykKKwkJCXNzZV9ldmVudF91bnJlZ2lz dGVyX25vbG9jayhldmVudCk7CisKKwkJc2NvcGVkX2d1YXJkKHNwaW5sb2NrLCAmZXZlbnRzX2xp c3RfbG9jaykKKwkJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7CisKKwkJc3NlX2V2ZW50X2ZyZWUo ZXZlbnQpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNzZV9ldmVudF91bnJlZ2lzdGVyKTsK Kworc3RhdGljIGludCBzc2VfY3B1X29ubGluZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVj dCBzc2VfZXZlbnQgKmV2ZW50OworCisJc2NvcGVkX2d1YXJkKHNwaW5sb2NrLCAmZXZlbnRzX2xp c3RfbG9jaykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZXZlbnRzLCBsaXN0KSB7 CisJCQlpZiAoc3NlX2V2ZW50X2lzX2dsb2JhbChldmVudC0+ZXZ0X2lkKSkKKwkJCQljb250aW51 ZTsKKworCQkJc3NlX2V2ZW50X3JlZ2lzdGVyX2xvY2FsKGV2ZW50KTsKKwkJCWlmIChzc2VfZ2V0 X3JlZ19ldnQoZXZlbnQpKQorCQkJCXNzZV9ldmVudF9lbmFibGVfbG9jYWwoZXZlbnQpOworCQl9 CisJfQorCisJLyogUmVhZHkgdG8gaGFuZGxlIGV2ZW50cy4gVW5tYXNrIFNTRS4gKi8KKwlyZXR1 cm4gc3NlX2V2ZW50c191bm1hc2soKTsKK30KKworc3RhdGljIGludCBzc2VfY3B1X3RlYXJkb3du KHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IG5leHRf Y3B1OworCXN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9l dmVudCAqcmVnX2V2dDsKKworCS8qIE1hc2sgdGhlIHNzZSBldmVudHMgKi8KKwlyZXQgPSBzc2Vf ZXZlbnRzX21hc2soKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2NvcGVkX2d1YXJk KHNwaW5sb2NrLCAmZXZlbnRzX2xpc3RfbG9jaykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2 ZW50LCAmZXZlbnRzLCBsaXN0KSB7CisJCQkvKiBEaXNhYmxlIGxvY2FsIGV2ZW50IG9uIGN1cnJl bnQgY3B1ICovCisJCQlpZiAoIXNzZV9ldmVudF9pc19nbG9iYWwoZXZlbnQtPmV2dF9pZCkpIHsK KwkJCQlyZWdfZXZ0ID0gc3NlX2dldF9yZWdfZXZ0KGV2ZW50KTsKKwkJCQlpZiAocmVnX2V2dC0+ aXNfZW5hYmxlZCkKKwkJCQkJc3NlX2V2ZW50X2Rpc2FibGVfbG9jYWwoZXZlbnQpOworCisJCQkJ c3NlX3NiaV91bnJlZ2lzdGVyX2V2ZW50KGV2ZW50KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwor CQkJaWYgKGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCWNvbnRpbnVlOwor CisJCQkvKiBVcGRhdGUgZGVzdGluYXRpb24gaGFydCBmb3IgZ2xvYmFsIGV2ZW50ICovCisJCQlu ZXh0X2NwdSA9IGNwdW1hc2tfYW55X2J1dChjcHVfb25saW5lX21hc2ssIGNwdSk7CisJCQlyZXQg PSBzc2VfZXZlbnRfc2V0X3RhcmdldF9jcHVfbm9sb2NrKGV2ZW50LCBuZXh0X2NwdSk7CisJCX0K Kwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNzZV9wbV9ub3RpZmllcihzdHJ1 Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCSAgIHZvaWQg KmRhdGEpCit7CisJV0FSTl9PTl9PTkNFKHByZWVtcHRpYmxlKCkpOworCisJc3dpdGNoIChhY3Rp b24pIHsKKwljYXNlIENQVV9QTV9FTlRFUjoKKwkJc3NlX2V2ZW50c19tYXNrKCk7CisJCWJyZWFr OworCWNhc2UgQ1BVX1BNX0VYSVQ6CisJY2FzZSBDUFVfUE1fRU5URVJfRkFJTEVEOgorCQlzc2Vf ZXZlbnRzX3VubWFzaygpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTk9USUZZX0RP TkU7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmll cl9ibG9jayBzc2VfcG1fbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBzc2VfcG1fbm90aWZpZXIs Cit9OworCisvKgorICogTWFzayBhbGwgQ1BVcyBhbmQgdW5yZWdpc3RlciBhbGwgZXZlbnRzIG9u IHBhbmljLCByZWJvb3Qgb3Iga2V4ZWMuCisgKi8KK3N0YXRpYyBpbnQgc3NlX3JlYm9vdF9ub3Rp ZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJ CSAgICAgICB2b2lkICpkYXRhKQoreworCWNwdWhwX3JlbW92ZV9zdGF0ZShzc2VfaHBfc3RhdGUp OworCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9j ayBzc2VfcmVib290X25iID0geworCS5ub3RpZmllcl9jYWxsID0gc3NlX3JlYm9vdF9ub3RpZmll ciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNzZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsK KworCWlmIChzYmlfcHJvYmVfZXh0ZW5zaW9uKFNCSV9FWFRfU1NFKSA8PSAwKSB7CisJCXByX2lu Zm8oIk1pc3NpbmcgU0JJIFNTRSBleHRlbnNpb25cbiIpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7 CisJfQorCXByX2luZm8oIlNCSSBTU0UgZXh0ZW5zaW9uIGRldGVjdGVkXG4iKTsKKworCXJldCA9 IGNwdV9wbV9yZWdpc3Rlcl9ub3RpZmllcigmc3NlX3BtX25iKTsKKwlpZiAocmV0KSB7CisJCXBy X3dhcm4oIkZhaWxlZCB0byByZWdpc3RlciBDUFUgUE0gbm90aWZpZXIuLi5cbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldCA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmc3NlX3JlYm9v dF9uYik7CisJaWYgKHJldCkgeworCQlwcl93YXJuKCJGYWlsZWQgdG8gcmVnaXN0ZXIgcmVib290 IG5vdGlmaWVyLi4uXG4iKTsKKwkJZ290byByZW1vdmVfY3B1cG07CisJfQorCisJcmV0ID0gY3B1 aHBfc2V0dXBfc3RhdGUoQ1BVSFBfQVBfT05MSU5FX0RZTiwgInJpc2N2L3NzZTpvbmxpbmUiLAor CQkJCXNzZV9jcHVfb25saW5lLCBzc2VfY3B1X3RlYXJkb3duKTsKKwlpZiAocmV0IDwgMCkKKwkJ Z290byByZW1vdmVfcmVib290OworCisJc3NlX2hwX3N0YXRlID0gcmV0OworCXNzZV9hdmFpbGFi bGUgPSB0cnVlOworCisJcmV0dXJuIDA7CisKK3JlbW92ZV9yZWJvb3Q6CisJdW5yZWdpc3Rlcl9y ZWJvb3Rfbm90aWZpZXIoJnNzZV9yZWJvb3RfbmIpOworCityZW1vdmVfY3B1cG06CisJY3B1X3Bt X3VucmVnaXN0ZXJfbm90aWZpZXIoJnNzZV9wbV9uYik7CisKKwlyZXR1cm4gcmV0OworfQorYXJj aF9pbml0Y2FsbChzc2VfaW5pdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jpc2N2X3Ni aV9zc2UuaCBiL2luY2x1ZGUvbGludXgvcmlzY3Zfc2JpX3NzZS5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODQxNjVjYjVmMmQwCi0tLSAvZGV2L251bGwKKysrIGIv aW5jbHVkZS9saW51eC9yaXNjdl9zYmlfc3NlLmgKQEAgLTAsMCArMSw1NyBAQAorLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KKy8qCisgKiBDb3B5cmlnaHQg KEMpIDIwMjUgUml2b3MgSW5jLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9SSVNDVl9TQklfU1NF X0gKKyNkZWZpbmUgX19MSU5VWF9SSVNDVl9TQklfU1NFX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCitzdHJ1Y3Qgc3NlX2V2ZW50Owor c3RydWN0IHB0X3JlZ3M7CisKK3R5cGVkZWYgaW50IChzc2VfZXZlbnRfaGFuZGxlcl9mbikodTMy IGV2ZW50X251bSwgdm9pZCAqYXJnLAorCQkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKwor I2lmZGVmIENPTkZJR19SSVNDVl9TQklfU1NFCisKK3N0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldmVu dF9yZWdpc3Rlcih1MzIgZXZlbnRfbnVtLCB1MzIgcHJpb3JpdHksCisJCQkJICAgICBzc2VfZXZl bnRfaGFuZGxlcl9mbiAqaGFuZGxlciwgdm9pZCAqYXJnKTsKKwordm9pZCBzc2VfZXZlbnRfdW5y ZWdpc3RlcihzdHJ1Y3Qgc3NlX2V2ZW50ICpldnQpOworCitpbnQgc3NlX2V2ZW50X3NldF90YXJn ZXRfY3B1KHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldnQsIHVuc2lnbmVkIGludCBjcHUpOworCitp bnQgc3NlX2V2ZW50X2VuYWJsZShzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZ0KTsKKwordm9pZCBz c2VfZXZlbnRfZGlzYWJsZShzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZ0KTsKKworaW50IHNzZV9l dmVudF9lbmFibGVfbG9jYWwoc3RydWN0IHNzZV9ldmVudCAqc3NlX2V2dCk7CitpbnQgc3NlX2V2 ZW50X2Rpc2FibGVfbG9jYWwoc3RydWN0IHNzZV9ldmVudCAqc3NlX2V2dCk7CisKKyNlbHNlCitz dGF0aWMgaW5saW5lIHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldmVudF9yZWdpc3Rlcih1MzIgZXZl bnRfbnVtLCB1MzIgcHJpb3JpdHksCisJCQkJCQkgICBzc2VfZXZlbnRfaGFuZGxlcl9mbiAqaGFu ZGxlciwKKwkJCQkJCSAgIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQ UCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzc2VfZXZlbnRfdW5yZWdpc3RlcihzdHJ1Y3Qg c3NlX2V2ZW50ICpldnQpIHt9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNzZV9ldmVudF9zZXRfdGFy Z2V0X2NwdShzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZ0LAorCQkJCQkgICB1bnNpZ25lZCBpbnQg Y3B1KQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3Nl X2V2ZW50X2VuYWJsZShzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZ0KQoreworCXJldHVybiAtRU9Q Tk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNzZV9ldmVudF9kaXNhYmxlKHN0cnVj dCBzc2VfZXZlbnQgKnNzZV9ldnQpIHt9CisjZW5kaWYKKyNlbmRpZiAvKiBfX0xJTlVYX1JJU0NW X1NCSV9TU0VfSCAqLwotLSAKMi40My4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1yaXNjdgo=