Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp2756304rdg; Mon, 16 Oct 2023 14:01:13 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEDo1n8RKIClJaY9H2Sw8x8ShxbGNQhasmGlb/2LKBoml/wIklIqLJmxG9Si+sVlfQezzH+ X-Received: by 2002:a05:6a00:248f:b0:6bc:f819:fcf0 with SMTP id c15-20020a056a00248f00b006bcf819fcf0mr376396pfv.1.1697490072500; Mon, 16 Oct 2023 14:01:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697490072; cv=none; d=google.com; s=arc-20160816; b=oPubiYTRzzHWOZLDIkhNl2qgUBc3LRxzYRzmxLrRcKJOzt7lE6LL6qMTOLgzFPq3nH vDe6ur3RGe/GuoEK7MmD04ONbmGVp/7kY2DdGYsRVOA8KAZB3/xAW2zS1IpZb4dLTdig /QMHGeSfrjzrlzA4zPhfAZQU9YGBE/M4gzUJfnifBpqTJwwE5vb4EEsf5hoWb56sODaV WFCdL3K2N6bnzVvnAiksaVoTiisJqcaMvh+B9jO70uD7xZygU/ZQdyTUq6yM+L+jzKXz LrOXjELr37dRG6V7C92i1Nq+14FXg/8WoLjSsm5fQrTD6FpjqnRGg6dJjK+23WVzda6d XuUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:organization:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :dkim-signature:dkim-filter; bh=Tr5CmceYNsTUy1OXo5HESzGxYS7P+SP5EC5ff6n2AnU=; fh=bXxaZRfLL7aFbA5wYO6a7Z0qwCJYebbR7m+N6a3Bymk=; b=hvQ9BSZqiuIQ0bFVoU952VA/IzSV+k3CaMUncCMJqe8dyrEQjiM2F4R+cUzcTQxJCb Ag8wVltgTC0QR/edoq5AXngZRVSq5atZw9LT/tfhslOSsXQVm8xKo97luGhp/eZWjIan agCs3e5yEgcPNSxHwiQuF6uddKTOwSIwMssGnugUhlMNVHfED8kUdtfVLX5ZMNMyz1Vv EJ8zJK5lv2tAPKZNtNvOqEI7ZE0N3rnX36Mjurlr28T6XYrZ7clYtAZcSCRvYJ4ucyrA 7ezFPJ9hYgvGHZcPYpIxv4SQ5h1pWw8ip5/J/rsbkkK1OlpcQQLdqwD+fSXJSTYs8riV mTTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@candelatech.com header.s=default header.b=D8b4j397; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=candelatech.com Return-Path: Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id p40-20020a056a000a2800b006bbe72a826asi18337pfh.180.2023.10.16.14.01.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Oct 2023 14:01:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=pass header.i=@candelatech.com header.s=default header.b=D8b4j397; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=candelatech.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 3F94C807CF49; Mon, 16 Oct 2023 14:00:28 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233952AbjJPVA1 (ORCPT + 99 others); Mon, 16 Oct 2023 17:00:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233771AbjJPVA0 (ORCPT ); Mon, 16 Oct 2023 17:00:26 -0400 X-Greylist: delayed 610 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Mon, 16 Oct 2023 14:00:20 PDT Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A75EDED for ; Mon, 16 Oct 2023 14:00:20 -0700 (PDT) Received: from dispatch1-us1.ppe-hosted.com (ip6-localhost [127.0.0.1]) by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 6FBC9284154 for ; Mon, 16 Oct 2023 20:50:10 +0000 (UTC) X-Virus-Scanned: Proofpoint Essentials engine Received: from mail3.candelatech.com (unknown [208.74.158.173]) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 7EADCC40067; Mon, 16 Oct 2023 20:50:06 +0000 (UTC) Received: from [192.168.100.159] (50-251-239-81-static.hfc.comcastbusiness.net [50.251.239.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail3.candelatech.com (Postfix) with ESMTPSA id 2DD1013C2B0; Mon, 16 Oct 2023 13:50:06 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 mail3.candelatech.com 2DD1013C2B0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=candelatech.com; s=default; t=1697489406; bh=H61ogmK7JZ1yRL5bbD5KWgDp5z0/9Rbb6jbcThdCEH8=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=D8b4j39726DUntuuHn4pzfV0xym+5ln6o67IgX5ciOsw1+unCcvScA2ZivfrAAdER srw9gX/ALeRsXIrHwzXJ9+OD/QB3A/oks2AKWAzmlaY+ptKu4kuNG04myYe37TMzTG KV2xVNUjZ7bW2H5D497O8gVS7CBqhFJHyGGq3Gsw= Content-Type: multipart/mixed; boundary="------------v1l2RPN76mH2ZXN1qBvJ0KvN" Message-ID: <32a44a29-c5f4-f5fa-496f-a9dc98d8209d@candelatech.com> Date: Mon, 16 Oct 2023 13:50:05 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH v2] crypto: aesni - add ccm(aes) algorithm implementation Content-Language: en-US To: Ard Biesheuvel Cc: Herbert Xu , Linux Crypto Mailing List , Eric Biggers References: <20201210024342.GA26428@gondor.apana.org.au> <20201210111427.GA28014@gondor.apana.org.au> <20201210121627.GB28441@gondor.apana.org.au> <20201215091902.GA21455@gondor.apana.org.au> <062a2258-fad4-2c6f-0054-b0f41786ff85@candelatech.com> <6e20b593-393c-9fa1-76aa-b78951b1f2f3@candelatech.com> From: Ben Greear Organization: Candela Technologies In-Reply-To: X-MDID: 1697489408-1yfZqfYEGcHY X-MDID-O: us5;ut7;1697489408;1yfZqfYEGcHY;;832a1144d614286663515f3072fbe0d8 X-Spam-Status: No, score=-4.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Mon, 16 Oct 2023 14:00:28 -0700 (PDT) This is a multi-part message in MIME format. --------------v1l2RPN76mH2ZXN1qBvJ0KvN Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 11/12/22 06:59, Ard Biesheuvel wrote: > On Fri, 11 Nov 2022 at 23:29, Ben Greear wrote: >> >> On 11/9/22 2:05 AM, Ard Biesheuvel wrote: >>> On Wed, 9 Nov 2022 at 04:52, Herbert Xu wrote: >>>> >>>> On Tue, Nov 08, 2022 at 10:50:48AM -0800, Ben Greear wrote: >>>>> >>>>> While rebasing my patches onto 6.1-rc4, I noticed my aesni for ccm(aes) patch didn't apply cleanly, >>>>> and I found this patch described below is applied now. Does this upstream patch mean that aesni is already >>>>> supported upstream now? Or is it specific to whatever xctr is? If so, >>>>> any chance the patch is wanted upstream now? >>>> >>>> AFAICS the xctr patch has nothing to do with what you were trying >>>> to achieve with wireless. My objection still stands with regards >>>> to wireless, we should patch wireless to use the async crypto >>>> interface and not hack around it in the Crypto API. >>>> >>> >>> Indeed. Those are just add/add conflicts because both patches >>> introduce new code into the same set of files. The resolution is >>> generally to keep both sides. >>> >>> As for Herbert's objection: I will note here that in the meantime, >>> arm64 now has gotten rid of the scalar fallbacks entirely in AEAD and >>> skipcher implementations, because those are only callable in task or >>> softirq context, and the arm64 SIMD wrappers now disable softirq >>> processing. This means that the condition that results in the fallback >>> being needed can no longer occur, making the SIMD helper dead code on >>> arm64. >>> >>> I suppose we might do the same thing on x86, but since the kernel mode >>> SIMD handling is highly arch specific, you'd really need to raise this >>> with the x86 maintainers. >>> >> >> Hello Ard, >> >> Could you please review the attached patch to make sure I merged it properly? My concern >> is the cleanup section and/or some problems I might have introduced related to the similarly >> named code that was added upstream. >> > > I don't think the logic is quite right, although it rarely matter. > > I've pushed my version here - it invokes the static call for CTR so it > will use the faster AVX version if the CPU supports it. > > https://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git/log/?h=aesni-ccm-v6.1 Hello Ard, It looks like something changed again in the intel-aesni logic for 6.6 kernel. I was able to do a small change to the patch to get it to compile, but the kernel crashes when I bring up a wlan port in 6.6. When I remove the aesni patch, the station comes up without crashing. The aesni patch worked fine in 6.5 as far as I can tell. I'm attaching my slightly modified version of the patch you sent previous. If you have time to investigate this it would be much appreciated. Thanks, Ben -- Ben Greear Candela Technologies Inc http://www.candelatech.com --------------v1l2RPN76mH2ZXN1qBvJ0KvN Content-Type: text/x-patch; charset=UTF-8; name="aesni_6.6_broken.patch" Content-Disposition: attachment; filename="aesni_6.6_broken.patch" Content-Transfer-Encoding: base64 Y29tbWl0IDQ3OWY3NmQwNGI0ZjEyMThiNTNkOTY1ZTZjZWI1OGQzN2VmYmY3MjkKQXV0aG9y OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgpEYXRlOiAgIFR1ZSBEZWMgMSAy MDo0NTo1NiAyMDIwICswMTAwCgogICAgY3J5cHRvOiBhZXNuaSAtIGFkZCBjY20oYWVzKSBh bGdvcml0aG0gaW1wbGVtZW50YXRpb24KICAgIAogICAgQWRkIGNjbShhZXMpIGltcGxlbWVu dGF0aW9uIGZyb20gbGludXgtd2lyZWxlc3MgbWFpbGluZyBsaXN0IChzZWUKICAgIGh0dHA6 Ly9wZXJtYWxpbmsuZ21hbmUub3JnL2dtYW5lLmxpbnV4Lmtlcm5lbC53aXJlbGVzcy5nZW5l cmFsLzEyNjY3OSkuCiAgICAKICAgIFRoaXMgZWxpbWluYXRlcyBGUFUgY29udGV4dCBzdG9y ZS9yZXN0b3JlIG92ZXJoZWFkIGV4aXN0aW5nIGluIG1vcmUKICAgIGdlbmVyYWwgY2NtX2Jh c2UoY3RyKGFlcy1hZXNuaSksYWVzLWFlc25pKSBjYXNlIGluIE1BQyBjYWxjdWxhdGlvbi4K ICAgIAogICAgU3VnZ2VzdGVkLWJ5OiBCZW4gR3JlZWFyIDxncmVlYXJiQGNhbmRlbGF0ZWNo LmNvbT4KICAgIENvLWRldmVsb3BlZC1ieTogU3RldmUgZGVSb3NpZXIgPGRlcm9zaWVyQGNh bC1zaWVycmEuY29tPgogICAgU2lnbmVkLW9mZi1ieTogU3RldmUgZGVSb3NpZXIgPGRlcm9z aWVyQGNhbC1zaWVycmEuY29tPgogICAgU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwg PGFyZGJAa2VybmVsLm9yZz4KCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmkt aW50ZWxfZ2x1ZS5jIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwppbmRl eCAzOWQ2YTYyYWM2MjcuLjYxNmUyNzA1ZGIxNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5 cHRvL2Flc25pLWludGVsX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50 ZWxfZ2x1ZS5jCkBAIC0xMDYsMTIgKzEwNiwxMiBAQCBhc21saW5rYWdlIHZvaWQgYWVzbmlf eHRzX2VuY3J5cHQoY29uc3Qgc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQs CiBhc21saW5rYWdlIHZvaWQgYWVzbmlfeHRzX2RlY3J5cHQoY29uc3Qgc3RydWN0IGNyeXB0 b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCiAJCQkJICBjb25zdCB1OCAqaW4sIHVuc2lnbmVk IGludCBsZW4sIHU4ICppdik7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0KIGFzbWxpbmth Z2Ugdm9pZCBhZXNuaV9jdHJfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAq b3V0LAogCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYp OwogREVGSU5FX1NUQVRJQ19DQUxMKGFlc25pX2N0cl9lbmNfdGZtLCBhZXNuaV9jdHJfZW5j KTsKIAorI2lmZGVmIENPTkZJR19YODZfNjQKKwogLyogU2NhdHRlciAvIEdhdGhlciByb3V0 aW5lcywgd2l0aCBhcmdzIHNpbWlsYXIgdG8gYWJvdmUgKi8KIGFzbWxpbmthZ2Ugdm9pZCBh ZXNuaV9nY21faW5pdCh2b2lkICpjdHgsCiAJCQkgICAgICAgc3RydWN0IGdjbV9jb250ZXh0 X2RhdGEgKmdkYXRhLApAQCAtMzc2LDYgKzM3NiwzNzkgQEAgc3RhdGljIGludCBjYmNfZGVj cnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQogCXJldHVybiBlcnI7CiB9CiAK K3N0YXRpYyBpbnQgYWVzbmlfY2NtX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwg Y29uc3QgdTggKmluX2tleSwKKwkJCSAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlz dHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGNyeXB0b19hZWFkX2N0eCh0Zm0pOworCisJ cmV0dXJuIGFlc19zZXRfa2V5X2NvbW1vbihjdHgsIGluX2tleSwga2V5X2xlbik7Cit9CisK K3N0YXRpYyBpbnQgYWVzbmlfY2NtX3NldGF1dGhzaXplKHN0cnVjdCBjcnlwdG9fYWVhZCAq dGZtLCB1bnNpZ25lZCBpbnQgYXV0aHNpemUpCit7CisJaWYgKChhdXRoc2l6ZSAmIDEpIHx8 IGF1dGhzaXplIDwgNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgY2NtX3NldF9tc2dfbGVuKHU4ICpibG9jaywgdW5zaWduZWQgaW50IG1zZ2xl biwgaW50IGNzaXplKQoreworCV9fYmUzMiBkYXRhOworCisJbWVtc2V0KGJsb2NrLCAwLCBj c2l6ZSk7CisJYmxvY2sgKz0gY3NpemU7CisKKwlpZiAoY3NpemUgPj0gNCkKKwkJY3NpemUg PSA0OworCWVsc2UgaWYgKG1zZ2xlbiA+ICgxIDw8ICg4ICogY3NpemUpKSkKKwkJcmV0dXJu IC1FT1ZFUkZMT1c7CisKKwlkYXRhID0gY3B1X3RvX2JlMzIobXNnbGVuKTsKKwltZW1jcHko YmxvY2sgLSBjc2l6ZSwgKHU4ICopJmRhdGEgKyA0IC0gY3NpemUsIGNzaXplKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGNjbV9pbml0X21hYyhzdHJ1Y3QgYWVhZF9yZXF1 ZXN0ICpyZXEsIHU4IG1hY2l2W10sIHUzMiBtc2dsZW4pCit7CisJc3RydWN0IGNyeXB0b19h ZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJX19iZTMyICpuID0gKF9f YmUzMiAqKSZtYWNpdltBRVNfQkxPQ0tfU0laRSAtIDhdOworCXUzMiBsID0gcmVxLT5pdlsw XSArIDE7CisKKwkvKiB2ZXJpZnkgdGhhdCBDQ00gZGltZW5zaW9uICdMJyBpcyBzZXQgY29y cmVjdGx5IGluIHRoZSBJViAqLworCWlmIChsIDwgMiB8fCBsID4gOCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwkvKiB2ZXJpZnkgdGhhdCBtc2dsZW4gY2FuIGluIGZhY3QgYmUgcmVwcmVz ZW50ZWQgaW4gTCBieXRlcyAqLworCWlmIChsIDwgNCAmJiBtc2dsZW4gPj4gKDggKiBsKSkK KwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisKKwkvKgorCSAqIEV2ZW4gaWYgdGhlIENDTSBzcGVj IGFsbG93cyBMIHZhbHVlcyBvZiB1cCB0byA4LCB0aGUgTGludXggY3J5cHRvYXBpCisJICog dXNlcyBhIHUzMiB0eXBlIHRvIHJlcHJlc2VudCBtc2dsZW4gc28gdGhlIHRvcCA0IGJ5dGVz IGFyZSBhbHdheXMgMC4KKwkgKi8KKwluWzBdID0gMDsKKwluWzFdID0gY3B1X3RvX2JlMzIo bXNnbGVuKTsKKworCW1lbWNweShtYWNpdiwgcmVxLT5pdiwgQUVTX0JMT0NLX1NJWkUgLSBs KTsKKworCS8qCisJICogTWVhbmluZyBvZiBieXRlIDAgYWNjb3JkaW5nIHRvIENDTSBzcGVj IChSRkMgMzYxMC9OSVNUIDgwMC0zOEMpCisJICogLSBiaXRzIDAuLjIJOiBtYXggIyBvZiBi eXRlcyByZXF1aXJlZCB0byByZXByZXNlbnQgbXNnbGVuLCBtaW51cyAxCisJICogICAgICAg ICAgICAgICAgKGFscmVhZHkgc2V0IGJ5IGNhbGxlcikKKwkgKiAtIGJpdHMgMy4uNQk6IHNp emUgb2YgYXV0aCB0YWcgKDEgPT4gNCBieXRlcywgMiA9PiA2IGJ5dGVzLCBldGMpCisJICog LSBiaXQgNgk6IGluZGljYXRlcyBwcmVzZW5jZSBvZiBhdXRoZW50aWNhdGUtb25seSBkYXRh CisJICovCisJbWFjaXZbMF0gfD0gKGNyeXB0b19hZWFkX2F1dGhzaXplKGFlYWQpIC0gMikg PDwgMjsKKwlpZiAocmVxLT5hc3NvY2xlbikKKwkJbWFjaXZbMF0gfD0gMHg0MDsKKworCW1l bXNldCgmcmVxLT5pdltBRVNfQkxPQ0tfU0laRSAtIGxdLCAwLCBsKTsKKwlyZXR1cm4gY2Nt X3NldF9tc2dfbGVuKG1hY2l2ICsgQUVTX0JMT0NLX1NJWkUgLSBsLCBtc2dsZW4sIGwpOwor fQorCitzdGF0aWMgaW50IGNvbXB1dGVfbWFjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4 LCB1OCBtYWNbXSwgdTggKmRhdGEsIGludCBuLAorCQkgICAgICAgdW5zaWduZWQgaW50IGls ZW4sIHU4ICppZGF0YSwgYm9vbCBkb19zaW1kKQoreworCXVuc2lnbmVkIGludCBicyA9IEFF U19CTE9DS19TSVpFOworCXU4ICpvZGF0YSA9IG1hYzsKKwlpbnQgZGF0YWxlbiwgZ2V0bGVu OworCisJZGF0YWxlbiA9IG47CisKKwkvKiBmaXJzdCB0aW1lIGluIGhlcmUsIGJsb2NrIG1h eSBiZSBwYXJ0aWFsbHkgZmlsbGVkLiAqLworCWdldGxlbiA9IGJzIC0gaWxlbjsKKwlpZiAo ZGF0YWxlbiA+PSBnZXRsZW4pIHsKKwkJbWVtY3B5KGlkYXRhICsgaWxlbiwgZGF0YSwgZ2V0 bGVuKTsKKworCQlpZiAobGlrZWx5KGRvX3NpbWQpKSB7CisJCQlhZXNuaV9jYmNfZW5jKGN0 eCwgb2RhdGEsIGlkYXRhLCBBRVNfQkxPQ0tfU0laRSwgb2RhdGEpOworCQl9IGVsc2Ugewor CQkJY3J5cHRvX3hvcihvZGF0YSwgaWRhdGEsIEFFU19CTE9DS19TSVpFKTsKKwkJCWFlc19l bmNyeXB0KGN0eCwgb2RhdGEsIG9kYXRhKTsKKwkJfQorCisJCWRhdGFsZW4gLT0gZ2V0bGVu OworCQlkYXRhICs9IGdldGxlbjsKKwkJaWxlbiA9IDA7CisJfQorCisJLyogbm93IGVuY3J5 cHQgcmVzdCBvZiBkYXRhICovCisJd2hpbGUgKGRhdGFsZW4gPj0gYnMpIHsKKwkJaWYgKGxp a2VseShkb19zaW1kKSkgeworCQkJYWVzbmlfY2JjX2VuYyhjdHgsIG9kYXRhLCBkYXRhLCBB RVNfQkxPQ0tfU0laRSwgb2RhdGEpOworCQl9IGVsc2UgeworCQkJY3J5cHRvX3hvcihvZGF0 YSwgZGF0YSwgQUVTX0JMT0NLX1NJWkUpOworCQkJYWVzX2VuY3J5cHQoY3R4LCBvZGF0YSwg b2RhdGEpOworCQl9CisKKwkJZGF0YWxlbiAtPSBiczsKKwkJZGF0YSArPSBiczsKKwl9CisK KwkvKiBjaGVjayBhbmQgc2VlIGlmIHRoZXJlJ3MgbGVmdG92ZXIgZGF0YSB0aGF0IHdhc24n dAorCSAqIGVub3VnaCB0byBmaWxsIGEgYmxvY2suCisJICovCisJaWYgKGRhdGFsZW4pIHsK KwkJbWVtY3B5KGlkYXRhICsgaWxlbiwgZGF0YSwgZGF0YWxlbik7CisJCWlsZW4gKz0gZGF0 YWxlbjsKKwl9CisJcmV0dXJuIGlsZW47Cit9CisKK3N0YXRpYyB2b2lkIGNjbV9jYWxjdWxh dGVfYXV0aF9tYWMoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLAorCQkJCSAgIHN0cnVjdCBj cnlwdG9fYWVzX2N0eCAqY3R4LCB1OCBtYWNbXSwKKwkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNyYywKKwkJCQkgICBib29sIGRvX3NpbWQpCit7CisJdW5zaWduZWQgaW50IGxlbiA9 IHJlcS0+YXNzb2NsZW47CisJc3RydWN0IHNjYXR0ZXJfd2FsayB3YWxrOworCXU4IGlkYXRh W0FFU19CTE9DS19TSVpFXTsKKwl1bnNpZ25lZCBpbnQgaWxlbjsKKwlzdHJ1Y3QgeworCQlf X2JlMTYgbDsKKwkJX19iZTMyIGg7CisJfSBfX3BhY2tlZCAqbHRhZyA9ICh2b2lkICopaWRh dGE7CisKKwkvKiBwcmVwZW5kIHRoZSBBQUQgd2l0aCBhIGxlbmd0aCB0YWcgKi8KKwlpZiAo bGVuIDwgMHhmZjAwKSB7CisJCWx0YWctPmwgPSBjcHVfdG9fYmUxNihsZW4pOworCQlpbGVu ID0gMjsKKwl9IGVsc2UgIHsKKwkJbHRhZy0+bCA9IGNwdV90b19iZTE2KDB4ZmZmZSk7CisJ CWx0YWctPmggPSBjcHVfdG9fYmUzMihsZW4pOworCQlpbGVuID0gNjsKKwl9CisKKwlzY2F0 dGVyd2Fsa19zdGFydCgmd2Fsaywgc3JjKTsKKworCXdoaWxlIChsZW4pIHsKKwkJdTggKnNy YzsKKwkJaW50IG47CisKKwkJbiA9IHNjYXR0ZXJ3YWxrX2NsYW1wKCZ3YWxrLCBsZW4pOwor CQlpZiAoIW4pIHsKKwkJCXNjYXR0ZXJ3YWxrX3N0YXJ0KCZ3YWxrLCBzZ19uZXh0KHdhbGsu c2cpKTsKKwkJCW4gPSBzY2F0dGVyd2Fsa19jbGFtcCgmd2FsaywgbGVuKTsKKwkJfQorCQlz cmMgPSBzY2F0dGVyd2Fsa19tYXAoJndhbGspOworCisJCWlsZW4gPSBjb21wdXRlX21hYyhj dHgsIG1hYywgc3JjLCBuLCBpbGVuLCBpZGF0YSwgZG9fc2ltZCk7CisJCWxlbiAtPSBuOwor CisJCXNjYXR0ZXJ3YWxrX3VubWFwKHNyYyk7CisJCXNjYXR0ZXJ3YWxrX2FkdmFuY2UoJndh bGssIG4pOworCQlzY2F0dGVyd2Fsa19kb25lKCZ3YWxrLCAwLCBsZW4pOworCX0KKworCS8q IGFueSBsZWZ0b3ZlciBuZWVkcyBwYWRkaW5nIGFuZCB0aGVuIGVuY3J5cHRlZCAqLworCWlm IChpbGVuKSB7CisJCWNyeXB0b194b3IobWFjLCBpZGF0YSwgaWxlbik7CisJCWlmIChsaWtl bHkoZG9fc2ltZCkpCisJCQlhZXNuaV9lbmMoY3R4LCBtYWMsIG1hYyk7CisJCWVsc2UKKwkJ CWFlc19lbmNyeXB0KGN0eCwgbWFjLCBtYWMpOworCX0KK30KKworc3RhdGljIGludCBhZXNu aV9jY21fZW5jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNy eXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7CisJc3RydWN0IGNy eXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19hZWFkX2N0eChhZWFkKSk7CisJ Ym9vbCBjb25zdCBkb19zaW1kID0gY3J5cHRvX3NpbWRfdXNhYmxlKCk7CisJdTggX19hbGln bmVkKDgpIG1hY1tBRVNfQkxPQ0tfU0laRV07CisJdTggX19hbGlnbmVkKDgpIGJ1ZltBRVNf QkxPQ0tfU0laRV07CisJc3RydWN0IHNrY2lwaGVyX3dhbGsgd2FsazsKKwl1MzIgbCA9IHJl cS0+aXZbMF0gKyAxOworCWludCBlcnI7CisKKwllcnIgPSBjY21faW5pdF9tYWMocmVxLCBt YWMsIHJlcS0+Y3J5cHRsZW4pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAo bGlrZWx5KGRvX3NpbWQpKSB7CisJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwkJYWVzbmlfZW5j KGN0eCwgbWFjLCBtYWMpOworCX0gZWxzZSB7CisJCWFlc19lbmNyeXB0KGN0eCwgbWFjLCBt YWMpOworCX0KKworCWlmIChyZXEtPmFzc29jbGVuKQorCQljY21fY2FsY3VsYXRlX2F1dGhf bWFjKHJlcSwgY3R4LCBtYWMsIHJlcS0+c3JjLCBkb19zaW1kKTsKKworCXJlcS0+aXZbQUVT X0JMT0NLX1NJWkUgLSAxXSA9IDB4MTsKKwllcnIgPSBza2NpcGhlcl93YWxrX2FlYWRfZW5j cnlwdCgmd2FsaywgcmVxLCB0cnVlKTsKKworCXdoaWxlICh3YWxrLm5ieXRlcyA+PSBBRVNf QkxPQ0tfU0laRSkgeworCQlpbnQgbGVuID0gd2Fsay5uYnl0ZXMgJiBBRVNfQkxPQ0tfTUFT SzsKKwkJaW50IG47CisKKwkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSBBRVNfQkxPQ0tf U0laRSkgeworCQkJaWYgKGxpa2VseShkb19zaW1kKSkgeworCQkJCWFlc25pX2NiY19lbmMo Y3R4LCBtYWMsIHdhbGsuc3JjLnZpcnQuYWRkciArIG4sCisJCQkJCSAgICAgIEFFU19CTE9D S19TSVpFLCBtYWMpOworCQkJfSBlbHNlIHsKKwkJCQljcnlwdG9feG9yKG1hYywgd2Fsay5z cmMudmlydC5hZGRyICsgbiwKKwkJCQkJICAgQUVTX0JMT0NLX1NJWkUpOworCQkJCWFlc19l bmNyeXB0KGN0eCwgbWFjLCBtYWMpOworCisJCQkJYWVzX2VuY3J5cHQoY3R4LCBidWYsIHdh bGsuaXYpOworCQkJCWNyeXB0b19pbmMod2Fsay5pdiwgQUVTX0JMT0NLX1NJWkUpOworCQkJ CWNyeXB0b194b3JfY3B5KHdhbGsuZHN0LnZpcnQuYWRkciArIG4sCisJCQkJCSAgICAgICB3 YWxrLnNyYy52aXJ0LmFkZHIgKyBuLAorCQkJCQkgICAgICAgYnVmLCBBRVNfQkxPQ0tfU0la RSk7CisJCQl9CisJCX0KKwkJaWYgKGxpa2VseShkb19zaW1kKSkKKwkJCXN0YXRpY19jYWxs KGFlc25pX2N0cl9lbmNfdGZtKShjdHgsIHdhbGsuZHN0LnZpcnQuYWRkciwKKwkJCQkJCSAg ICAgICB3YWxrLnNyYy52aXJ0LmFkZHIsIGxlbiwKKwkJCQkJCSAgICAgICB3YWxrLml2KTsK KworCQllcnIgPSBza2NpcGhlcl93YWxrX2RvbmUoJndhbGssIHdhbGsubmJ5dGVzICYgfkFF U19CTE9DS19NQVNLKTsKKwl9CisJaWYgKHdhbGsubmJ5dGVzKSB7CisJCWlmIChsaWtlbHko ZG9fc2ltZCkpCisJCQlhZXNuaV9lbmMoY3R4LCBidWYsIHdhbGsuaXYpOworCQllbHNlCisJ CQlhZXNfZW5jcnlwdChjdHgsIGJ1Ziwgd2Fsay5pdik7CisKKwkJY3J5cHRvX3hvcihtYWMs IHdhbGsuc3JjLnZpcnQuYWRkciwgd2Fsay5uYnl0ZXMpOworCQljcnlwdG9feG9yX2NweSh3 YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKwkJCSAgICAgICBidWYs IHdhbGsubmJ5dGVzKTsKKworCQlpZiAobGlrZWx5KGRvX3NpbWQpKQorCQkJYWVzbmlfZW5j KGN0eCwgbWFjLCBtYWMpOworCQllbHNlCisJCQlhZXNfZW5jcnlwdChjdHgsIG1hYywgbWFj KTsKKworCQllcnIgPSBza2NpcGhlcl93YWxrX2RvbmUoJndhbGssIDApOworCX0KKworCWlm IChlcnIpCisJCWdvdG8gZmFpbDsKKworCW1lbXNldCh3YWxrLml2ICsgQUVTX0JMT0NLX1NJ WkUgLSBsLCAwLCBsKTsKKworCWlmIChsaWtlbHkoZG9fc2ltZCkpIHsKKwkJc3RhdGljX2Nh bGwoYWVzbmlfY3RyX2VuY190Zm0pKGN0eCwgbWFjLCBtYWMsIEFFU19CTE9DS19TSVpFLCB3 YWxrLml2KTsKKwl9IGVsc2UgeworCQlhZXNfZW5jcnlwdChjdHgsIGJ1Ziwgd2Fsay5pdik7 CisJCWNyeXB0b194b3IobWFjLCBidWYsIEFFU19CTE9DS19TSVpFKTsKKwl9CisKKwkvKiBj b3B5IGF1dGh0YWcgdG8gZW5kIG9mIGRzdCAqLworCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29w eShtYWMsIHJlcS0+ZHN0LCByZXEtPmFzc29jbGVuICsgcmVxLT5jcnlwdGxlbiwKKwkJCQkg Y3J5cHRvX2FlYWRfYXV0aHNpemUoYWVhZCksIDEpOworCitmYWlsOgorCWlmIChsaWtlbHko ZG9fc2ltZCkpCisJCWtlcm5lbF9mcHVfZW5kKCk7CisJcmV0dXJuIGVycjsKK30KKworc3Rh dGljIGludCBhZXNuaV9jY21fZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCit7 CisJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gY3J5cHRvX2FlYWRfcmVxdGZtKHJlcSk7 CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19hZWFkX2N0 eChhZWFkKSk7CisJdW5zaWduZWQgaW50IGF1dGhzaXplID0gY3J5cHRvX2FlYWRfYXV0aHNp emUoYWVhZCk7CisJYm9vbCBjb25zdCBkb19zaW1kID0gY3J5cHRvX3NpbWRfdXNhYmxlKCk7 CisJdTggX19hbGlnbmVkKDgpIG1hY1tBRVNfQkxPQ0tfU0laRV07CisJdTggX19hbGlnbmVk KDgpIHRhZ1tBRVNfQkxPQ0tfU0laRV07CisJdTggX19hbGlnbmVkKDgpIGJ1ZltBRVNfQkxP Q0tfU0laRV07CisJc3RydWN0IHNrY2lwaGVyX3dhbGsgd2FsazsKKwl1MzIgbCA9IHJlcS0+ aXZbMF0gKyAxOworCWludCBlcnI7CisKKwllcnIgPSBjY21faW5pdF9tYWMocmVxLCBtYWMs IHJlcS0+Y3J5cHRsZW4gLSBhdXRoc2l6ZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsK KworCS8qIGNvcHkgYXV0aHRhZyBmcm9tIGVuZCBvZiBzcmMgKi8KKwlzY2F0dGVyd2Fsa19t YXBfYW5kX2NvcHkodGFnLCByZXEtPnNyYywKKwkJCQkgcmVxLT5hc3NvY2xlbiArIHJlcS0+ Y3J5cHRsZW4gLSBhdXRoc2l6ZSwKKwkJCQkgYXV0aHNpemUsIDApOworCisJaWYgKGxpa2Vs eShkb19zaW1kKSkgeworCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisJCWFlc25pX2VuYyhjdHgs IG1hYywgbWFjKTsKKwl9IGVsc2UgeworCQlhZXNfZW5jcnlwdChjdHgsIG1hYywgbWFjKTsK Kwl9CisKKwlpZiAocmVxLT5hc3NvY2xlbikKKwkJY2NtX2NhbGN1bGF0ZV9hdXRoX21hYyhy ZXEsIGN0eCwgbWFjLCByZXEtPnNyYywgZG9fc2ltZCk7CisKKwlyZXEtPml2W0FFU19CTE9D S19TSVpFIC0gMV0gPSAweDE7CisJZXJyID0gc2tjaXBoZXJfd2Fsa19hZWFkX2RlY3J5cHQo JndhbGssIHJlcSwgdHJ1ZSk7CisKKwl3aGlsZSAod2Fsay5uYnl0ZXMgPj0gQUVTX0JMT0NL X1NJWkUpIHsKKwkJaW50IGxlbiA9IHdhbGsubmJ5dGVzICYgQUVTX0JMT0NLX01BU0s7CisJ CWludCBuOworCisJCWlmIChsaWtlbHkoZG9fc2ltZCkpCisJCQlzdGF0aWNfY2FsbChhZXNu aV9jdHJfZW5jX3RmbSkoY3R4LCB3YWxrLmRzdC52aXJ0LmFkZHIsCisJCQkJCQkgICAgICAg d2Fsay5zcmMudmlydC5hZGRyLCBsZW4sCisJCQkJCQkgICAgICAgd2Fsay5pdik7CisKKwkJ Zm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSBBRVNfQkxPQ0tfU0laRSkgeworCQkJaWYgKGxp a2VseShkb19zaW1kKSkgeworCQkJCWFlc25pX2NiY19lbmMoY3R4LCBtYWMsIHdhbGsuZHN0 LnZpcnQuYWRkciArIG4sCisJCQkJCSAgICAgIEFFU19CTE9DS19TSVpFLCBtYWMpOworCQkJ fSBlbHNlIHsKKwkJCQlhZXNfZW5jcnlwdChjdHgsIGJ1Ziwgd2Fsay5pdik7CisJCQkJY3J5 cHRvX2luYyh3YWxrLml2LCBBRVNfQkxPQ0tfU0laRSk7CisJCQkJY3J5cHRvX3hvcl9jcHko d2Fsay5kc3QudmlydC5hZGRyICsgbiwKKwkJCQkJICAgICAgIHdhbGsuc3JjLnZpcnQuYWRk ciArIG4sCisJCQkJCSAgICAgICBidWYsIEFFU19CTE9DS19TSVpFKTsKKworCQkJCWNyeXB0 b194b3IobWFjLCB3YWxrLmRzdC52aXJ0LmFkZHIgKyBuLAorCQkJCQkgICBBRVNfQkxPQ0tf U0laRSk7CisJCQkJYWVzX2VuY3J5cHQoY3R4LCBtYWMsIG1hYyk7CisJCQl9CisJCX0KKwor CQllcnIgPSBza2NpcGhlcl93YWxrX2RvbmUoJndhbGssIHdhbGsubmJ5dGVzICYgfkFFU19C TE9DS19NQVNLKTsKKwl9CisJaWYgKHdhbGsubmJ5dGVzKSB7CisJCWlmIChsaWtlbHkoZG9f c2ltZCkpCisJCQlhZXNuaV9lbmMoY3R4LCBidWYsIHdhbGsuaXYpOworCQllbHNlCisJCQlh ZXNfZW5jcnlwdChjdHgsIGJ1Ziwgd2Fsay5pdik7CisKKwkJY3J5cHRvX3hvcl9jcHkod2Fs ay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisJCQkgICAgICAgYnVmLCB3 YWxrLm5ieXRlcyk7CisJCWNyeXB0b194b3IobWFjLCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdh bGsubmJ5dGVzKTsKKworCQlpZiAobGlrZWx5KGRvX3NpbWQpKQorCQkJYWVzbmlfZW5jKGN0 eCwgbWFjLCBtYWMpOworCQllbHNlCisJCQlhZXNfZW5jcnlwdChjdHgsIG1hYywgbWFjKTsK KworCQllcnIgPSBza2NpcGhlcl93YWxrX2RvbmUoJndhbGssIDApOworCX0KKworCWlmIChl cnIpCisJCWdvdG8gZmFpbDsKKworCW1lbXNldCh3YWxrLml2ICsgQUVTX0JMT0NLX1NJWkUg LSBsLCAwLCBsKTsKKworCWlmIChsaWtlbHkoZG9fc2ltZCkpIHsKKwkJc3RhdGljX2NhbGwo YWVzbmlfY3RyX2VuY190Zm0pKGN0eCwgbWFjLCBtYWMsIEFFU19CTE9DS19TSVpFLCB3YWxr Lml2KTsKKwl9IGVsc2UgeworCQlhZXNfZW5jcnlwdChjdHgsIGJ1Ziwgd2Fsay5pdik7CisJ CWNyeXB0b194b3IobWFjLCBidWYsIEFFU19CTE9DS19TSVpFKTsKKwl9CisKKwkvKiBjb21w YXJlIGNhbGN1bGF0ZWQgYXV0aCB0YWcgd2l0aCB0aGUgc3RvcmVkIG9uZSAqLworCWlmIChj cnlwdG9fbWVtbmVxKG1hYywgdGFnLCBhdXRoc2l6ZSkpCisJCWVyciA9IC1FQkFETVNHOwor CitmYWlsOgorCWlmIChsaWtlbHkoZG9fc2ltZCkpCisJCWtlcm5lbF9mcHVfZW5kKCk7CisJ cmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBjdHNfY2JjX2VuY3J5cHQoc3RydWN0IHNr Y2lwaGVyX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0g PSBjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSk7CkBAIC0xMjE4LDEwICsxNTkxLDI4IEBA IHN0YXRpYyBzdHJ1Y3QgYWVhZF9hbGcgYWVzbmlfYWVhZHNbXSA9IHsgewogCQkuY3JhX21v ZHVsZQkJPSBUSElTX01PRFVMRSwKIAl9LAogfSB9OworCiAjZWxzZQogc3RhdGljIHN0cnVj dCBhZWFkX2FsZyBhZXNuaV9hZWFkc1swXTsKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IGFl YWRfYWxnIGFlc25pX2NjbV9hZWFkID0geworCS5iYXNlLmNyYV9uYW1lCQk9ICJjY20oYWVz KSIsCisJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gImNjbS1hZXNuaSIsCisJLmJhc2UuY3Jh X3ByaW9yaXR5CT0gNDAwLAorCS5iYXNlLmNyYV9ibG9ja3NpemUJPSAxLAorCS5iYXNlLmNy YV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCksCisJLmJhc2UuY3Jh X21vZHVsZQk9IFRISVNfTU9EVUxFLAorCisJLnNldGtleQkJCT0gYWVzbmlfY2NtX3NldGtl eSwKKwkuc2V0YXV0aHNpemUJCT0gYWVzbmlfY2NtX3NldGF1dGhzaXplLAorCS5lbmNyeXB0 CQk9IGFlc25pX2NjbV9lbmNyeXB0LAorCS5kZWNyeXB0CQk9IGFlc25pX2NjbV9kZWNyeXB0 LAorCS5pdnNpemUJCQk9IEFFU19CTE9DS19TSVpFLAorCS5jaHVua3NpemUJCT0gQUVTX0JM T0NLX1NJWkUsCisJLm1heGF1dGhzaXplCQk9IEFFU19CTE9DS19TSVpFLAorfTsKKwogc3Rh dGljIHN0cnVjdCBzaW1kX2FlYWRfYWxnICphZXNuaV9zaW1kX2FlYWRzW0FSUkFZX1NJWkUo YWVzbmlfYWVhZHMpXTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB4ODZfY3B1X2lkIGFlc25p X2NwdV9pZFtdID0gewpAQCAtMTI3OCw4ICsxNjY5LDE1IEBAIHN0YXRpYyBpbnQgX19pbml0 IGFlc25pX2luaXQodm9pZCkKIAkJZ290byB1bnJlZ2lzdGVyX2FlYWRzOwogI2VuZGlmIC8q IENPTkZJR19YODZfNjQgKi8KIAorCWlmIChJU19FTkFCTEVEKENPTkZJR19YODZfNjQpKSB7 CisJCWVyciA9IGNyeXB0b19yZWdpc3Rlcl9hZWFkKCZhZXNuaV9jY21fYWVhZCk7CisJCWlm IChlcnIpCisJCQlnb3RvIHVucmVnaXN0ZXJfeGN0cjsKKwl9CisKIAlyZXR1cm4gMDsKIAor dW5yZWdpc3Rlcl94Y3RyOgogI2lmZGVmIENPTkZJR19YODZfNjQKIHVucmVnaXN0ZXJfYWVh ZHM6CiAJc2ltZF91bnJlZ2lzdGVyX2FlYWRzKGFlc25pX2FlYWRzLCBBUlJBWV9TSVpFKGFl c25pX2FlYWRzKSwKQEAgLTEyOTYsNiArMTY5NCw5IEBAIHN0YXRpYyBpbnQgX19pbml0IGFl c25pX2luaXQodm9pZCkKIAogc3RhdGljIHZvaWQgX19leGl0IGFlc25pX2V4aXQodm9pZCkK IHsKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSkKKwkJY3J5cHRvX3VucmVnaXN0 ZXJfYWVhZCgmYWVzbmlfY2NtX2FlYWQpOworCiAJc2ltZF91bnJlZ2lzdGVyX2FlYWRzKGFl c25pX2FlYWRzLCBBUlJBWV9TSVpFKGFlc25pX2FlYWRzKSwKIAkJCSAgICAgIGFlc25pX3Np bWRfYWVhZHMpOwogCXNpbWRfdW5yZWdpc3Rlcl9za2NpcGhlcnMoYWVzbmlfc2tjaXBoZXJz LCBBUlJBWV9TSVpFKGFlc25pX3NrY2lwaGVycyksCg== --------------v1l2RPN76mH2ZXN1qBvJ0KvN--