Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp5881506pxu; Wed, 23 Dec 2020 07:44:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJyhd4izNHYykfQ2ocubAZON0ykrohg4J9ROkqWzasu6QOfnWv1DSOpru1HXFfBpIZtDomJ2 X-Received: by 2002:a50:f392:: with SMTP id g18mr25411991edm.306.1608738260616; Wed, 23 Dec 2020 07:44:20 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1608738260; cv=pass; d=google.com; s=arc-20160816; b=KY7qOlA1rUR0s5VB+3XbqiEE/33IGTVd6Bo+lzgvC1ROUxXP0w8hE7iDxkhXHCbB4E a6TEgil+cw84RTb/oUELqMTvRDvYAE2U7jddLkRdfpBiw0AEdnnyPDc3EO+6/NSCO8Ha RCNS5k3qvCL2NtBDaihGAiSrAsU99tDsMgJbUpSjxr1al3nVSohGi/twoMT7U9qVQgTY AuvAyNAOMDKdJ9TpAmqj3QMyIb9GDXH4l0lwjOMu8QQa3Ds2VkfB/CgQjjrS/xcw9FrQ ie9tJgKhRwmpHnfWgtu1Gv6gCcBL4BUcsg3j0g9Dj9yRhVlTbqeJ/QO0FJToRxJfuvpP 4vpA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=MjyoohzPcirNmvltpvaH6PjjaCoK5ABVuGs/r3QrbWc=; b=dlrdhbH9x1P13paf+QonKtprrFEAghE5ko+UUtnXxITARz6J2z8rm1iBXg0u4xRfSk pXCdIvS5PqZIlUQy17bCeeMS6LGYJsikqKgsnCRjUILHCLRLGNV7Hj51MXQgVFstke8H /QN5ieIKDMqRPpA7IcLHu2rTqz6HzUP9YZ1IgoPmf61cdX8O5mnH5H4/n69yIK6B1fDJ EghXD1zl0+FISVZQCIaCEyeWZuzTwhK4c40FOYMpTOxtebkfKq7+O+6MkXwy9z0JH48p GHsZuYKS9q4K6mJk/gWyz74pZ2EC5p5NWhHaFblQRFs9fQLlXsQm6haf6lNkcuOAQHFZ boPg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=LUQucogB; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r12si12147897ejs.382.2020.12.23.07.43.57; Wed, 23 Dec 2020 07:44:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=LUQucogB; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729390AbgLWPmS (ORCPT + 99 others); Wed, 23 Dec 2020 10:42:18 -0500 Received: from mail-mw2nam12on2063.outbound.protection.outlook.com ([40.107.244.63]:15105 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726885AbgLWPmJ (ORCPT ); Wed, 23 Dec 2020 10:42:09 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S3mipWVW3h1ZZjelqNVe0hgjMcDlRIHmOiaESfnhAhT/gOFxodty2BEgCxmMzUE9Jnob/Ll8mhzCqFQXVZiPr/56+JGuiOkbZfGNCqk+mx/ncTTA39tf9WKDUr5rmkslj9GF094fif/AuspknocPnQhIxDeRPgA4RUe8vul8bo35Ih5M5rUkq9HZfsfsn3TD9sTEaIBULoK4f+FkZxLB+b1SCf157w9SEIqE9TO3qRV0eshj7Ndm9yJy8DGqX66kWFHUtqHdvq7sD1OJk1OsXPMDB44XFAJB1I18LX6jSPCTJbNloyalk/5mrbl8mppIh86kOAB9CsyGyxYAsuVK9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MjyoohzPcirNmvltpvaH6PjjaCoK5ABVuGs/r3QrbWc=; b=L3bsYTVxP6pkTBFvv+qxQ+3btPVOQyrTwxXnp6TYtxWvnaXGG7JQ9neDyzRbqOmACo0puSGIdyp1vulPrgAO9Zc8tuFbASNru/YmWk3LcWWlNpCBTmBKo29W1tHjrZNVpx29rxaUIX2I+HC4FTbvisaxuPeTPzX6wGoCcGVdeH9Kwl2UsDPRa6z7xyDQiAQS4V3gUpinRbE4W1TOkP2MgJSWEWXRuGSdZaaKjjNFRBJPMTZn+PkzlRKUH+/0GWlLhBbuwXuvIw1t4WX7yzJ7SjciQkTWhhao6KZjHKTjo4ICeMct3sbRm6LAIt8hNorQ6Kyh6FwRKVZHE0gInzC3mw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MjyoohzPcirNmvltpvaH6PjjaCoK5ABVuGs/r3QrbWc=; b=LUQucogBlpQZZVv5Gw56Bbrf8n05cObPBgrw5sa6gycqOT3os0r2uo4KZUL8MB4cChdu76Xs8EQk0kWjTfeh7Hc5ib5/4CQ2yQqm5Za0o2OnuMjuYUMcxG22RFYqddnTeJXmHxzzWaqTzsr5qzJ1HXYbFLZEOLyx6b+B/Id45cM= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SN6PR11MB2815.namprd11.prod.outlook.com (2603:10b6:805:62::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3676.25; Wed, 23 Dec 2020 15:40:25 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::a989:f850:6736:97ca]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::a989:f850:6736:97ca%5]) with mapi id 15.20.3700.026; Wed, 23 Dec 2020 15:40:25 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v4 19/24] wfx: add sta.c/sta.h Date: Wed, 23 Dec 2020 16:39:20 +0100 Message-Id: <20201223153925.73742-20-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201223153925.73742-1-Jerome.Pouiller@silabs.com> References: <20201223153925.73742-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [82.67.86.106] X-ClientProxiedBy: SA0PR12CA0024.namprd12.prod.outlook.com (2603:10b6:806:6f::29) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (82.67.86.106) by SA0PR12CA0024.namprd12.prod.outlook.com (2603:10b6:806:6f::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3700.27 via Frontend Transport; Wed, 23 Dec 2020 15:40:23 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bc6f0ace-51b0-4c99-e188-08d8a7591142 X-MS-TrafficTypeDiagnostic: SN6PR11MB2815: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1388; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TvjMnxxSQnyHWehx8Beyjeh+fcfV7t6oaXp8nNq1lmkWpHOi+dnBzJUkapwlWY5g1/EKQK/FGY9uA9Lu5T+46uqdU10npcqExdfhzmRy3SGZ2wVRquTiSBwfJq00u4CmfYs9Y+bbJ17ZXVxCkgS8oOovaQXjU/PWnQiZgKkRrPmY4m15uL/R70JwmMpIIrsy167COI3SEI7H5jV1CsDx1e3ZUHegC8+J0KP7p1U0YK8tTiQT3/SyekHIxYoVzGImkmU3KOp2HKPQMKEr4W2xDDgSOf4oUYXkAGE1/yz5NXNl7ZHO45pT/SAkASkOszJSvicYrFqjYERObt1ttIRFaEdiidRw2f+HR1PbPMCk3+/gPuesJNnhSguyWj6iEHlt4flYiuniCHQh2zUj659OJQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2718.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(136003)(366004)(376002)(39850400004)(346002)(66574015)(478600001)(83380400001)(8676002)(186003)(2906002)(8936002)(26005)(52116002)(107886003)(16526019)(7696005)(66946007)(7416002)(6486002)(956004)(2616005)(54906003)(66476007)(316002)(4326008)(36756003)(5660300002)(1076003)(86362001)(66556008)(30864003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?SEIzK29PS3VKZVBoQzdzRitpREo5eFFxTXlNYmZvQmxkSGorTmJhWjhDVk1V?= =?utf-8?B?T2dSa2VqdUcxaUdsWDRoVzZ5Y1hRbGlndGlSZVMvbGhnS1Y3K0J2bkE0M1BB?= =?utf-8?B?bUVRdi8yQjduNVB5c0lwZHVQTDdxZ255RWlPbm8xemVIVFAzVGkvUEdZdmpt?= =?utf-8?B?LzBJbmpxZjlJTjQxVVBPUnpwcUZsQ3R6S0RxaTI4cTFsMHNzNFBCOWtHQmJ1?= =?utf-8?B?bGF1Ync0YzlJRWQ1b090V3BNTkhrOFVJSGdKb2lRL3dadEpZbWNUZWVINEJE?= =?utf-8?B?ZmNXK3pVMDA0MGdyUlRNekkxRTZXL2oxQVNBWU9FZDBFVTBQYVFId2d1YWwv?= =?utf-8?B?Z3FUelovMWYxNE5FajhmcmtwWS8xYTBNTm1jODErYzZZeG5WMWR3QytFVnls?= =?utf-8?B?RjFUYzg3d1VYc2c0T0F0bzlXNUxERUpVbDdiYXgyR2JtMDFLK202Vk9QNEtu?= =?utf-8?B?UnR4WlFXNndyWms5T25uTWhGa3lIbUk5dFY1cS9XcG4yUlVlNFdzVXQyTjk2?= =?utf-8?B?VzFVUGRQK1VRcDhIVkdpSjN3em5xMFZBY2xubXMwN21iQ1RCcjR5dnc0dndu?= =?utf-8?B?YUE1Q0NYNzBMYWVSSjgySzQzNkFoQzBnejJpWUw4T2VaZ1d6dThwdE80MWox?= =?utf-8?B?SFR0MzhpSGVnRmVWZ1BEaUNnc09yZmdtcXhRYmdJMTRsdzFRL3V1RlA3Vklp?= =?utf-8?B?QnJzeC9Ca0F0QUFRakJVRGlwVTRFWE4wRTZ3SHZhcFZ4dHpQd04vM0owek1D?= =?utf-8?B?S2NiaXJUV2tJMWU4eEFXY0t0cU1UOHdKazIxUjlSeHRQQnlpaVozamRFeHJw?= =?utf-8?B?Q09LV2hOUmh5dzBqUytFZ2VvM1V4TklEcUErL3p6ZDRRWHhDVDZ1QkRMaG1m?= =?utf-8?B?N1dmcUJpdXFwUEpUOHJicjhyMWVxREJlOENUS1U1MXdjeWdNLzR4OGN2V2Ns?= =?utf-8?B?a25ycmRmSFZVemhXZW1kdldjRms3bUxwNVZlKzB6MUI1dk1seWlnc3FIeXNz?= =?utf-8?B?Sk1tSHJZZWRMQkNwREYvOXl1ZTVCd0hGMnlPMjkvZWl5RXJjVlZOMXh6WDVE?= =?utf-8?B?QllLZGZ2OTcwaFNOTzdxYnMxaVdXeHhjZmR2b2x3bERqUHVlcUhIY2hEYzBS?= =?utf-8?B?d004ZDdVajlTZGdVMkpZSEY4UWMzRUdWSmU2Z2huanU5TVdKYXdoNzFYVHpy?= =?utf-8?B?bmlLdHlTN1p1WFpLcXJsWG5MdTNySHloNHZSbWdrNUhTaW5GeHB2QzVSeUlD?= =?utf-8?B?OSs2Zm1Jcy94R2lyM2FHbXBEelRSblFXT01Xczd5WTlMTWJSWTBsanVoVkh4?= =?utf-8?Q?YbqsCDejJRqtyq4mrSc2kkU3lt2jVA7ySf?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Dec 2020 15:40:25.5689 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-Network-Message-Id: bc6f0ace-51b0-4c99-e188-08d8a7591142 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HtWCVATIUlcYzRB4DB9FJfCPGfuJEjrwg5mvRGf+lEWuW08FUU2YuEIPgr9SNskLMYnmpBps4FKlQrbVQhzXXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB2815 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMgfCA4MDkgKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3Rh LmggfCAgNzMgKysrCiAyIGZpbGVzIGNoYW5nZWQsIDg4MiBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgKCmRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jIGIvZHJpdmVycy9u ZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjgxYmZjYThmYWZmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMKQEAgLTAsMCArMSw4MDkgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBt YWM4MDIxMSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8K KyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5o PgorCisjaW5jbHVkZSAic3RhLmgiCisjaW5jbHVkZSAid2Z4LmgiCisjaW5jbHVkZSAiZndpby5o IgorI2luY2x1ZGUgImJoLmgiCisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAic2Nhbi5oIgor I2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaGlmX3R4LmgiCisjaW5jbHVkZSAiaGlmX3R4 X21pYi5oIgorCisjZGVmaW5lIEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTIDIKKwor dTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcykK K3sKKwlpbnQgaTsKKwl1MzIgcmV0ID0gMDsKKwkvKiBXRjIwMCBvbmx5IHN1cHBvcnQgMkdIeiAq LworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gd2Rldi0+aHctPndp cGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQt Pm5fYml0cmF0ZXM7IGkrKykgeworCQlpZiAocmF0ZXMgJiBCSVQoaSkpIHsKKwkJCWlmIChpID49 IHNiYW5kLT5uX2JpdHJhdGVzKQorCQkJCWRldl93YXJuKHdkZXYtPmRldiwgInVuc3VwcG9ydGVk IGJhc2ljIHJhdGVcbiIpOworCQkJZWxzZQorCQkJCXJldCB8PSBCSVQoc2JhbmQtPmJpdHJhdGVz W2ldLmh3X3ZhbHVlKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdmeF9jb29s aW5nX3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdm eF9kZXYgKndkZXYgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAorCQkJCQkg ICAgc3RydWN0IHdmeF9kZXYsCisJCQkJCSAgICBjb29saW5nX3RpbWVvdXRfd29yayk7CisKKwl3 ZGV2LT5jaGlwX2Zyb3plbiA9IHRydWU7CisJd2Z4X3R4X3VubG9jayh3ZGV2KTsKK30KKwordm9p ZCB3Znhfc3VzcGVuZF9ob3RfZGV2KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVtIHN0YV9ub3Rp ZnlfY21kIGNtZCkKK3sKKwlpZiAoY21kID09IFNUQV9OT1RJRllfQVdBS0UpIHsKKwkJLyogRGV2 aWNlIHJlY292ZXIgbm9ybWFsIHRlbXBlcmF0dXJlICovCisJCWlmIChjYW5jZWxfZGVsYXllZF93 b3JrKCZ3ZGV2LT5jb29saW5nX3RpbWVvdXRfd29yaykpCisJCQl3ZnhfdHhfdW5sb2NrKHdkZXYp OworCX0gZWxzZSB7CisJCS8qIERldmljZSBpcyB0b28gaG90ICovCisJCXNjaGVkdWxlX2RlbGF5 ZWRfd29yaygmd2Rldi0+Y29vbGluZ190aW1lb3V0X3dvcmssIDEwICogSFopOworCQl3ZnhfdHhf bG9jayh3ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9maWx0ZXJfYmVhY29uKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBib29sIGZpbHRlcl9iZWFjb24pCit7CisJc3RhdGljIGNvbnN0IHN0 cnVjdCBoaWZfaWVfdGFibGVfZW50cnkgZmlsdGVyX2llc1tdID0geworCQl7CisJCQkuaWVfaWQg ICAgICAgID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLAorCQkJLmhhc19jaGFuZ2VkICA9IDEs CisJCQkubm9fbG9uZ2VyICAgID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQkJLm91aSAg ICAgICAgICA9IHsgMHg1MCwgMHg2RiwgMHg5QSB9LAorCQl9LCB7CisJCQkuaWVfaWQgICAgICAg ID0gV0xBTl9FSURfSFRfT1BFUkFUSU9OLAorCQkJLmhhc19jaGFuZ2VkICA9IDEsCisJCQkubm9f bG9uZ2VyICAgID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQl9LCB7CisJCQkuaWVfaWQg ICAgICAgID0gV0xBTl9FSURfRVJQX0lORk8sCisJCQkuaGFzX2NoYW5nZWQgID0gMSwKKwkJCS5u b19sb25nZXIgICAgPSAxLAorCQkJLmhhc19hcHBlYXJlZCA9IDEsCisJCX0KKwl9OworCisJaWYg KCFmaWx0ZXJfYmVhY29uKSB7CisJCWhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2wod3ZpZiwgMCwg MSk7CisJfSBlbHNlIHsKKwkJaGlmX3NldF9iZWFjb25fZmlsdGVyX3RhYmxlKHd2aWYsIDMsIGZp bHRlcl9pZXMpOworCQloaWZfYmVhY29uX2ZpbHRlcl9jb250cm9sKHd2aWYsIEhJRl9CRUFDT05f RklMVEVSX0VOQUJMRSwgMCk7CisJfQorfQorCit2b2lkIHdmeF9jb25maWd1cmVfZmlsdGVyKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAg dW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IHVudXNlZCkKK3sKKwlzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiA9IE5VTEw7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlib29s IGZpbHRlcl9ic3NpZCwgZmlsdGVyX3ByYnJlcSwgZmlsdGVyX2JlYWNvbjsKKworCS8qIE5vdGVz OgorCSAqICAgLSBQcm9iZSByZXNwb25zZXMgKEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSBhcmUg bmV2ZXIgZmlsdGVyZWQKKwkgKiAgIC0gUFMtUG9sbCAoRklGX1BTUE9MTCkgYXJlIG5ldmVyIGZp bHRlcmVkCisJICogICAtIFJUUywgQ1RTIGFuZCBBY2sgKEZJRl9DT05UUk9MKSBhcmUgYWx3YXlz IGZpbHRlcmVkCisJICogICAtIEJyb2tlbiBmcmFtZXMgKEZJRl9GQ1NGQUlMIGFuZCBGSUZfUExD UEZBSUwpIGFyZSBhbHdheXMgZmlsdGVyZWQKKwkgKiAgIC0gRmlybXdhcmUgZG9lcyAoeWV0KSBh bGxvdyB0byBmb3J3YXJkIHVuaWNhc3QgdHJhZmZpYyBzZW50IHRvCisJICogICAgIG90aGVyIHN0 YXRpb25zIChha2EuIHByb21pc2N1b3VzIG1vZGUpCisJICovCisJKnRvdGFsX2ZsYWdzICY9IEZJ Rl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgRklGX0FMTE1VTFRJIHwgRklGX09USEVSX0JTUyB8CisJ CQlGSUZfUFJPQkVfUkVRIHwgRklGX1BTUE9MTDsKKworCW11dGV4X2xvY2soJndkZXYtPmNvbmZf bXV0ZXgpOworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVM TCkgeworCQltdXRleF9sb2NrKCZ3dmlmLT5zY2FuX2xvY2spOworCisJCS8qIE5vdGU6IEZJRl9C Q05fUFJCUkVTUF9QUk9NSVNDIGNvdmVycyBwcm9iZSByZXNwb25zZSBhbmQKKwkJICogYmVhY29u cyBmcm9tIG90aGVyIEJTUworCQkgKi8KKwkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJC UkVTUF9QUk9NSVNDKQorCQkJZmlsdGVyX2JlYWNvbiA9IGZhbHNlOworCQllbHNlCisJCQlmaWx0 ZXJfYmVhY29uID0gdHJ1ZTsKKwkJd2Z4X2ZpbHRlcl9iZWFjb24od3ZpZiwgZmlsdGVyX2JlYWNv bik7CisKKwkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9PVEhFUl9CU1MpCisJCQlmaWx0ZXJfYnNz aWQgPSBmYWxzZTsKKwkJZWxzZQorCQkJZmlsdGVyX2Jzc2lkID0gdHJ1ZTsKKworCQkvKiBJbiBB UCBtb2RlLCBjaGlwIGNhbiByZXBseSB0byBwcm9iZSByZXF1ZXN0IGl0c2VsZiAqLworCQlpZiAo KnRvdGFsX2ZsYWdzICYgRklGX1BST0JFX1JFUSAmJgorCQkgICAgd3ZpZi0+dmlmLT50eXBlID09 IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCQlkZXZfZGJnKHdkZXYtPmRldiwgImRvIG5vdCBmb3J3 YXJkIHByb2JlIHJlcXVlc3QgaW4gQVAgbW9kZVxuIik7CisJCQkqdG90YWxfZmxhZ3MgJj0gfkZJ Rl9QUk9CRV9SRVE7CisJCX0KKworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX1BST0JFX1JFUSkK KwkJCWZpbHRlcl9wcmJyZXEgPSBmYWxzZTsKKwkJZWxzZQorCQkJZmlsdGVyX3ByYnJlcSA9IHRy dWU7CisJCWhpZl9zZXRfcnhfZmlsdGVyKHd2aWYsIGZpbHRlcl9ic3NpZCwgZmlsdGVyX3ByYnJl cSk7CisKKwkJbXV0ZXhfdW5sb2NrKCZ3dmlmLT5zY2FuX2xvY2spOworCX0KKwltdXRleF91bmxv Y2soJndkZXYtPmNvbmZfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IHdmeF9nZXRfcHNfdGltZW91 dChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCAqZW5hYmxlX3BzKQoreworCXN0cnVjdCBpZWVl ODAyMTFfY2hhbm5lbCAqY2hhbjAgPSBOVUxMLCAqY2hhbjEgPSBOVUxMOworCXN0cnVjdCBpZWVl ODAyMTFfY29uZiAqY29uZiA9ICZ3dmlmLT53ZGV2LT5ody0+Y29uZjsKKworCVdBUk4oIXd2aWYt PnZpZi0+YnNzX2NvbmYuYXNzb2MgJiYgZW5hYmxlX3BzLAorCSAgICAgImVuYWJsZV9wcyBpcyBy ZWxpYWJsZSBvbmx5IGlmIGFzc29jaWF0ZWQiKTsKKwlpZiAod2Rldl90b193dmlmKHd2aWYtPndk ZXYsIDApKQorCQljaGFuMCA9IHdkZXZfdG9fd3ZpZih3dmlmLT53ZGV2LCAwKS0+dmlmLT5ic3Nf Y29uZi5jaGFuZGVmLmNoYW47CisJaWYgKHdkZXZfdG9fd3ZpZih3dmlmLT53ZGV2LCAxKSkKKwkJ Y2hhbjEgPSB3ZGV2X3RvX3d2aWYod3ZpZi0+d2RldiwgMSktPnZpZi0+YnNzX2NvbmYuY2hhbmRl Zi5jaGFuOworCWlmIChjaGFuMCAmJiBjaGFuMSAmJiBjaGFuMC0+aHdfdmFsdWUgIT0gY2hhbjEt Pmh3X3ZhbHVlICYmCisJICAgIHd2aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkg eworCQkvKiBJdCBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIHBvd2Vyc2F2ZSBpZiBjaGFubmVscyBh cmUgZGlmZmVyZW50ICovCisJCWlmIChlbmFibGVfcHMpCisJCQkqZW5hYmxlX3BzID0gdHJ1ZTsK KwkJaWYgKHd2aWYtPndkZXYtPmZvcmNlX3BzX3RpbWVvdXQgPiAtMSkKKwkJCXJldHVybiB3dmlm LT53ZGV2LT5mb3JjZV9wc190aW1lb3V0OworCQllbHNlIGlmICh3ZnhfYXBpX29sZGVyX3RoYW4o d3ZpZi0+d2RldiwgMywgMikpCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJcmV0dXJuIDMwOwor CX0KKwlpZiAoZW5hYmxlX3BzKQorCQkqZW5hYmxlX3BzID0gd3ZpZi0+dmlmLT5ic3NfY29uZi5w czsKKwlpZiAod3ZpZi0+d2Rldi0+Zm9yY2VfcHNfdGltZW91dCA+IC0xKQorCQlyZXR1cm4gd3Zp Zi0+d2Rldi0+Zm9yY2VfcHNfdGltZW91dDsKKwllbHNlIGlmICh3dmlmLT52aWYtPmJzc19jb25m LmFzc29jICYmIHd2aWYtPnZpZi0+YnNzX2NvbmYucHMpCisJCXJldHVybiBjb25mLT5keW5hbWlj X3BzX3RpbWVvdXQ7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK2ludCB3ZnhfdXBkYXRlX3Bt KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCWludCBwc190aW1lb3V0OworCWJvb2wgcHM7CisK KwlpZiAoIXd2aWYtPnZpZi0+YnNzX2NvbmYuYXNzb2MpCisJCXJldHVybiAwOworCXBzX3RpbWVv dXQgPSB3ZnhfZ2V0X3BzX3RpbWVvdXQod3ZpZiwgJnBzKTsKKwlpZiAoIXBzKQorCQlwc190aW1l b3V0ID0gMDsKKwlXQVJOX09OKHBzX3RpbWVvdXQgPCAwKTsKKwlpZiAod3ZpZi0+dWFwc2RfbWFz aykKKwkJcHNfdGltZW91dCA9IDA7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91 dCgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUsCisJCQkJCSBUVV9UT19KSUZGSUVTKDUxMikp KQorCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsCisJCQkgInRpbWVvdXQgd2hpbGUgd2FpdGlu ZyBvZiBzZXRfcG1fbW9kZV9jb21wbGV0ZVxuIik7CisJcmV0dXJuIGhpZl9zZXRfcG0od3ZpZiwg cHMsIHBzX3RpbWVvdXQpOworfQorCitpbnQgd2Z4X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCXUxNiBxdWV1ZSwgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3Znhf dmlmICopdmlmLT5kcnZfcHJpdjsKKwlpbnQgb2xkX3VhcHNkID0gd3ZpZi0+dWFwc2RfbWFzazsK KworCVdBUk5fT04ocXVldWUgPj0gaHctPnF1ZXVlcyk7CisKKwltdXRleF9sb2NrKCZ3ZGV2LT5j b25mX211dGV4KTsKKwlhc3NpZ25fYml0KHF1ZXVlLCAmd3ZpZi0+dWFwc2RfbWFzaywgcGFyYW1z LT51YXBzZCk7CisJaGlmX3NldF9lZGNhX3F1ZXVlX3BhcmFtcyh3dmlmLCBxdWV1ZSwgcGFyYW1z KTsKKwlpZiAod3ZpZi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkg ICAgb2xkX3VhcHNkICE9IHd2aWYtPnVhcHNkX21hc2spIHsKKwkJaGlmX3NldF91YXBzZF9pbmZv KHd2aWYsIHd2aWYtPnVhcHNkX21hc2spOworCQl3ZnhfdXBkYXRlX3BtKHd2aWYpOworCX0KKwlt dXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCXJldHVybiAwOworfQorCitpbnQgd2Z4 X3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCit7 CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IE5VTEw7CisKKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9 IE5VTEwpCisJCWhpZl9ydHNfdGhyZXNob2xkKHd2aWYsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30K Kwordm9pZCB3ZnhfZXZlbnRfcmVwb3J0X3Jzc2koc3RydWN0IHdmeF92aWYgKnd2aWYsIHU4IHJh d19yY3BpX3Jzc2kpCit7CisJLyogUlNTSTogc2lnbmVkIFE4LjAsIFJDUEk6IHVuc2lnbmVkIFE3 LjEKKwkgKiBSU1NJID0gUkNQSSAvIDIgLSAxMTAKKwkgKi8KKwlpbnQgcmNwaV9yc3NpOworCWlu dCBjcW1fZXZ0OworCisJcmNwaV9yc3NpID0gcmF3X3JjcGlfcnNzaSAvIDIgLSAxMTA7CisJaWYg KHJjcGlfcnNzaSA8PSB3dmlmLT52aWYtPmJzc19jb25mLmNxbV9yc3NpX3Rob2xkKQorCQljcW1f ZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfTE9XOworCWVsc2UKKwkJY3Ft X2V2dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0hJR0g7CisJaWVlZTgwMjEx X2NxbV9yc3NpX25vdGlmeSh3dmlmLT52aWYsIGNxbV9ldnQsIHJjcGlfcnNzaSwgR0ZQX0tFUk5F TCk7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9iZWFjb25fbG9zc193b3JrKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih0b19k ZWxheWVkX3dvcmsod29yayksCisJCQkJCSAgICBzdHJ1Y3Qgd2Z4X3ZpZiwgYmVhY29uX2xvc3Nf d29yayk7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmd3ZpZi0+dmlm LT5ic3NfY29uZjsKKworCWllZWU4MDIxMV9iZWFjb25fbG9zcyh3dmlmLT52aWYpOworCXNjaGVk dWxlX2RlbGF5ZWRfd29yayh0b19kZWxheWVkX3dvcmsod29yayksCisJCQkgICAgICBtc2Vjc190 b19qaWZmaWVzKGJzc19jb25mLT5iZWFjb25faW50KSk7Cit9CisKK3ZvaWQgd2Z4X3NldF9kZWZh dWx0X3VuaWNhc3Rfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLCBpbnQgaWR4KQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0 cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCWhpZl93ZXBfZGVmYXVsdF9rZXlfaWQo d3ZpZiwgaWR4KTsKK30KKwordm9pZCB3ZnhfcmVzZXQoc3RydWN0IHdmeF92aWYgKnd2aWYpCit7 CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSB3dmlmLT53ZGV2OworCisJd2Z4X3R4X2xvY2tfZmx1 c2god2Rldik7CisJaGlmX3Jlc2V0KHd2aWYsIGZhbHNlKTsKKwl3ZnhfdHhfcG9saWN5X2luaXQo d3ZpZik7CisJaWYgKHd2aWZfY291bnQod2RldikgPD0gMSkKKwkJaGlmX3NldF9ibG9ja19hY2tf cG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOworCXdmeF90eF91bmxvY2sod2Rldik7CisJd3ZpZi0+ am9pbl9pbl9wcm9ncmVzcyA9IGZhbHNlOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmd3Zp Zi0+YmVhY29uX2xvc3Nfd29yayk7CisJd3ZpZiA9ICBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2 aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKKwkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsK K30KKworaW50IHdmeF9zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVj dCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1 Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ ZHJ2X3ByaXY7CisKKwlzdGFfcHJpdi0+dmlmX2lkID0gd3ZpZi0+aWQ7CisKKwlpZiAodmlmLT50 eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCWhpZl9zZXRfbWZwKHd2aWYsIHN0YS0+ bWZwLCBzdGEtPm1mcCk7CisKKwkvKiBJbiBzdGF0aW9uIG1vZGUsIHRoZSBmaXJtd2FyZSBpbnRl cnByZXRzIG5ldyBsaW5rLWlkIGFzIGEgVERMUyBwZWVyICovCisJaWYgKHZpZi0+dHlwZSA9PSBO TDgwMjExX0lGVFlQRV9TVEFUSU9OICYmICFzdGEtPnRkbHMpCisJCXJldHVybiAwOworCXN0YV9w cml2LT5saW5rX2lkID0gZmZ6KHd2aWYtPmxpbmtfaWRfbWFwKTsKKwl3dmlmLT5saW5rX2lkX21h cCB8PSBCSVQoc3RhX3ByaXYtPmxpbmtfaWQpOworCVdBUk5fT04oIXN0YV9wcml2LT5saW5rX2lk KTsKKwlXQVJOX09OKHN0YV9wcml2LT5saW5rX2lkID49IEhJRl9MSU5LX0lEX01BWCk7CisJaGlm X21hcF9saW5rKHd2aWYsIGZhbHNlLCBzdGEtPmFkZHIsIHN0YV9wcml2LT5saW5rX2lkLCBzdGEt Pm1mcCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdmeF9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICBzdHJ1Y3QgaWVl ZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3Znhf dmlmICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9IChz dHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3ByaXY7CisKKwkvKiBTZWUgbm90ZSBpbiB3 Znhfc3RhX2FkZCgpICovCisJaWYgKCFzdGFfcHJpdi0+bGlua19pZCkKKwkJcmV0dXJuIDA7CisJ LyogRklYTUUgYWRkIGEgbXV0ZXg/ICovCisJaGlmX21hcF9saW5rKHd2aWYsIHRydWUsIHN0YS0+ YWRkciwgc3RhX3ByaXYtPmxpbmtfaWQsIGZhbHNlKTsKKwl3dmlmLT5saW5rX2lkX21hcCAmPSB+ QklUKHN0YV9wcml2LT5saW5rX2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3Znhf dXBsb2FkX2FwX3RlbXBsYXRlcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKK3sKKwlzdHJ1Y3Qgc2tf YnVmZiAqc2tiOworCisJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod3ZpZi0+d2Rldi0+aHcs IHd2aWYtPnZpZik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCWhpZl9zZXRfdGVt cGxhdGVfZnJhbWUod3ZpZiwgc2tiLCBISUZfVE1QTFRfQkNOLAorCQkJICAgICAgIEFQSV9SQVRF X0lOREVYX0JfMU1CUFMpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXNrYiA9IGllZWU4MDIx MV9wcm9iZXJlc3BfZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlmLT52aWYpOworCWlmICghc2tiKQor CQlyZXR1cm4gLUVOT01FTTsKKwloaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHd2aWYsIHNrYiwgSElG X1RNUExUX1BSQlJFUywKKwkJCSAgICAgICBBUElfUkFURV9JTkRFWF9CXzFNQlBTKTsKKwlkZXZf a2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9zZXRfbWZw X2FwKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBpZWVl ODAyMTFfYmVhY29uX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmKTsKKwljb25zdCBpbnQg aWVvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlh YmxlKTsKKwljb25zdCB1MTYgKnB0ciA9ICh1MTYgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlE X1JTTiwKKwkJCQkJCSBza2ItPmRhdGEgKyBpZW9mZnNldCwKKwkJCQkJCSBza2ItPmxlbiAtIGll b2Zmc2V0KTsKKwljb25zdCBpbnQgcGFpcndpc2VfY2lwaGVyX3N1aXRlX2NvdW50X29mZnNldCA9 IDggLyBzaXplb2YodTE2KTsKKwljb25zdCBpbnQgcGFpcndpc2VfY2lwaGVyX3N1aXRlX3NpemUg PSA0IC8gc2l6ZW9mKHUxNik7CisJY29uc3QgaW50IGFrbV9zdWl0ZV9zaXplID0gNCAvIHNpemVv Zih1MTYpOworCisJaWYgKHB0cikgeworCQlwdHIgKz0gcGFpcndpc2VfY2lwaGVyX3N1aXRlX2Nv dW50X29mZnNldDsKKwkJaWYgKFdBUk5fT04ocHRyID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIo c2tiKSkpCisJCQlyZXR1cm47CisJCXB0ciArPSAxICsgcGFpcndpc2VfY2lwaGVyX3N1aXRlX3Np emUgKiAqcHRyOworCQlpZiAoV0FSTl9PTihwdHIgPiAodTE2ICopc2tiX3RhaWxfcG9pbnRlcihz a2IpKSkKKwkJCXJldHVybjsKKwkJcHRyICs9IDEgKyBha21fc3VpdGVfc2l6ZSAqICpwdHI7CisJ CWlmIChXQVJOX09OKHB0ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVyKHNrYikpKQorCQkJcmV0 dXJuOworCQloaWZfc2V0X21mcCh3dmlmLCAqcHRyICYgQklUKDcpLCAqcHRyICYgQklUKDYpKTsK Kwl9Cit9CisKK2ludCB3Znhfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0 IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+ d2RldjsKKwlpbnQgcmV0OworCisJd3ZpZiA9ICBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2aWZf aXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKKwkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKKwl3 dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwl3ZnhfdXBsb2FkX2FwX3Rl bXBsYXRlcyh3dmlmKTsKKwlyZXQgPSBoaWZfc3RhcnQod3ZpZiwgJnZpZi0+YnNzX2NvbmYsIHd2 aWYtPmNoYW5uZWwpOworCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gLUVJTzsKKwl3Znhfc2V0X21m cF9hcCh3dmlmKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdmeF9zdG9wX2FwKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXdmeF9y ZXNldCh3dmlmKTsKK30KKworc3RhdGljIHZvaWQgd2Z4X2pvaW4oc3RydWN0IHdmeF92aWYgKnd2 aWYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mID0gJnd2 aWYtPnZpZi0+YnNzX2NvbmY7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDsKKwl1 OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCWNvbnN0IHU4ICpzc2lkaWUgPSBOVUxM OworCWludCBzc2lkbGVuID0gMDsKKworCXdmeF90eF9sb2NrX2ZsdXNoKHd2aWYtPndkZXYpOwor CisJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIHd2aWYtPmNo YW5uZWwsCisJCQkgICAgICAgY29uZi0+YnNzaWQsIE5VTEwsIDAsCisJCQkgICAgICAgSUVFRTgw MjExX0JTU19UWVBFX0FOWSwgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKKwlpZiAoIWJzcyAmJiAh Y29uZi0+aWJzc19qb2luZWQpIHsKKwkJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsKKwkJcmV0 dXJuOworCX0KKworCXJjdV9yZWFkX2xvY2soKTsgLyogcHJvdGVjdCBzc2lkaWUgKi8KKwlpZiAo YnNzKQorCQlzc2lkaWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NTSUQp OworCWlmIChzc2lkaWUpIHsKKwkJc3NpZGxlbiA9IHNzaWRpZVsxXTsKKwkJaWYgKHNzaWRsZW4g PiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQkJc3NpZGxlbiA9IElFRUU4MDIxMV9NQVhfU1NJ RF9MRU47CisJCW1lbWNweShzc2lkLCAmc3NpZGllWzJdLCBzc2lkbGVuKTsKKwl9CisJcmN1X3Jl YWRfdW5sb2NrKCk7CisKKwljZmc4MDIxMV9wdXRfYnNzKHd2aWYtPndkZXYtPmh3LT53aXBoeSwg YnNzKTsKKworCXd2aWYtPmpvaW5faW5fcHJvZ3Jlc3MgPSB0cnVlOworCXJldCA9IGhpZl9qb2lu KHd2aWYsIGNvbmYsIHd2aWYtPmNoYW5uZWwsIHNzaWQsIHNzaWRsZW4pOworCWlmIChyZXQpIHsK KwkJaWVlZTgwMjExX2Nvbm5lY3Rpb25fbG9zcyh3dmlmLT52aWYpOworCQl3ZnhfcmVzZXQod3Zp Zik7CisJfSBlbHNlIHsKKwkJLyogRHVlIHRvIGJlYWNvbiBmaWx0ZXJpbmcgaXQgaXMgcG9zc2li bGUgdGhhdCB0aGUKKwkJICogQVAncyBiZWFjb24gaXMgbm90IGtub3duIGZvciB0aGUgbWFjODAy MTEgc3RhY2suCisJCSAqIERpc2FibGUgZmlsdGVyaW5nIHRlbXBvcmFyeSB0byBtYWtlIHN1cmUg dGhlIHN0YWNrCisJCSAqIHJlY2VpdmVzIGF0IGxlYXN0IG9uZQorCQkgKi8KKwkJd2Z4X2ZpbHRl cl9iZWFjb24od3ZpZiwgZmFsc2UpOworCX0KKwl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOwor fQorCitzdGF0aWMgdm9pZCB3Znhfam9pbl9maW5hbGl6ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwK KwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pCit7CisJc3RydWN0IGll ZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7CisJaW50IGFtcGR1X2RlbnNpdHkgPSAwOworCWJvb2wg Z3JlZW5maWVsZCA9IGZhbHNlOworCisJcmN1X3JlYWRfbG9jaygpOyAvKiBwcm90ZWN0IHN0YSAq LworCWlmIChpbmZvLT5ic3NpZCAmJiAhaW5mby0+aWJzc19qb2luZWQpCisJCXN0YSA9IGllZWU4 MDIxMV9maW5kX3N0YSh3dmlmLT52aWYsIGluZm8tPmJzc2lkKTsKKwlpZiAoc3RhICYmIHN0YS0+ aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJYW1wZHVfZGVuc2l0eSA9IHN0YS0+aHRfY2FwLmFtcGR1 X2RlbnNpdHk7CisJaWYgKHN0YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQgJiYKKwkgICAg IShpbmZvLT5odF9vcGVyYXRpb25fbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9T VEFfUFJTTlQpKQorCQlncmVlbmZpZWxkID0gISEoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjEx X0hUX0NBUF9HUk5fRkxEKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXd2aWYtPmpvaW5faW5f cHJvZ3Jlc3MgPSBmYWxzZTsKKwloaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUod3ZpZiwgYW1wZHVf ZGVuc2l0eSwgZ3JlZW5maWVsZCwKKwkJCQkgaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKKwlo aWZfa2VlcF9hbGl2ZV9wZXJpb2Qod3ZpZiwgMCk7CisJLyogYmVhY29uX2xvc3NfY291bnQgaXMg ZGVmaW5lZCB0byA3IGluIG5ldC9tYWM4MDIxMS9tbG1lLmMuIExldCdzIHVzZQorCSAqIHRoZSBz YW1lIHZhbHVlLgorCSAqLworCWhpZl9zZXRfYnNzX3BhcmFtcyh3dmlmLCBpbmZvLT5haWQsIDcp OworCWhpZl9zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Qod3ZpZiwgMSwgMSk7CisJd2Z4X3VwZGF0 ZV9wbSh3dmlmKTsKK30KKworaW50IHdmeF9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYg PSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCisJd2Z4X3VwbG9hZF9hcF90ZW1w bGF0ZXMod3ZpZik7CisJd2Z4X2pvaW4od3ZpZik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4 X2xlYXZlX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYt PmRydl9wcml2OworCisJd2Z4X3Jlc2V0KHd2aWYpOworfQorCitzdGF0aWMgdm9pZCB3ZnhfZW5h YmxlX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpCit7CisJLyogRHJp dmVyIGhhcyBDb250ZW50IEFmdGVyIERUSU0gQmVhY29uIGluIHF1ZXVlLiBEcml2ZXIgaXMgd2Fp dGluZyBmb3IKKwkgKiBhIHNpZ25hbCBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2Ugd2UgYXJlIGdv aW5nIHRvIHN0b3AgdG8gc2VuZAorCSAqIGJlYWNvbnMsIHRoaXMgc2lnbmFsIHdpbGwgbmV2ZXIg aGFwcGVucy4gU2VlIGFsc28KKwkgKiB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoKQorCSAqLworCWlm ICghZW5hYmxlICYmIHdmeF90eF9xdWV1ZXNfaGFzX2NhYih3dmlmKSkgeworCQl3dmlmLT5hZnRl cl9kdGltX3R4X2FsbG93ZWQgPSB0cnVlOworCQl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2 KTsKKwl9CisJaGlmX2JlYWNvbl90cmFuc21pdCh3dmlmLCBlbmFibGUpOworfQorCit2b2lkIHdm eF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLCB1MzIg Y2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlpbnQgaTsK KworCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCisJaWYgKGNoYW5nZWQgJiBCU1Nf Q0hBTkdFRF9CQVNJQ19SQVRFUyB8fAorCSAgICBjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09O X0lOVCB8fAorCSAgICBjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKKwkJaWYgKHZpZi0+ dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJd2Z4X2pvaW4od3ZpZik7CisJfQor CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgeworCQlpZiAoaW5mby0+YXNzb2Mg fHwgaW5mby0+aWJzc19qb2luZWQpCisJCQl3Znhfam9pbl9maW5hbGl6ZSh3dmlmLCBpbmZvKTsK KwkJZWxzZSBpZiAoIWluZm8tPmFzc29jICYmIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9T VEFUSU9OKQorCQkJd2Z4X3Jlc2V0KHd2aWYpOworCQllbHNlCisJCQlkZXZfd2Fybih3ZGV2LT5k ZXYsICIlczogbWlzdW5kZXJzdG9vZCBjaGFuZ2U6IEFTU09DXG4iLAorCQkJCSBfX2Z1bmNfXyk7 CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5GTykgeworCQlpZiAo dmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlkZXZfd2Fybih3ZGV2LT5k ZXYsICIlczogbWlzdW5kZXJzdG9vZCBjaGFuZ2U6IEJFQUNPTl9JTkZPXG4iLAorCQkJCSBfX2Z1 bmNfXyk7CisJCWhpZl9zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Qod3ZpZiwgaW5mby0+ZHRpbV9w ZXJpb2QsCisJCQkJCSAgICAgaW5mby0+ZHRpbV9wZXJpb2QpOworCQkvKiBXZSB0ZW1wb3Jhcnkg Zm9yd2FyZGVkIGJlYWNvbiBmb3Igam9pbiBwcm9jZXNzLiBJdCBpcyBub3cgbm8KKwkJICogbW9y ZSBuZWNlc3NhcnkuCisJCSAqLworCQl3ZnhfZmlsdGVyX2JlYWNvbih3dmlmLCB0cnVlKTsKKwl9 CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FSUF9GSUxURVIpIHsKKwkJZm9yIChpID0g MDsgaSA8IEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTOyBpKyspIHsKKwkJCV9fYmUz MiAqYXJwX2FkZHIgPSAmaW5mby0+YXJwX2FkZHJfbGlzdFtpXTsKKworCQkJaWYgKGluZm8tPmFy cF9hZGRyX2NudCA+IEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTKQorCQkJCWFycF9h ZGRyID0gTlVMTDsKKwkJCWlmIChpID49IGluZm8tPmFycF9hZGRyX2NudCkKKwkJCQlhcnBfYWRk ciA9IE5VTEw7CisJCQloaWZfc2V0X2FycF9pcHY0X2ZpbHRlcih3dmlmLCBpLCBhcnBfYWRkcik7 CisJCX0KKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FQX1BST0JFX1JFU1AgfHwK KwkgICAgY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikKKwkJd2Z4X3VwbG9hZF9hcF90ZW1w bGF0ZXMod3ZpZik7CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVE KQorCQl3ZnhfZW5hYmxlX2JlYWNvbih3dmlmLCBpbmZvLT5lbmFibGVfYmVhY29uKTsKKworCWlm IChjaGFuZ2VkICYgQlNTX0NIQU5HRURfS0VFUF9BTElWRSkKKwkJaGlmX2tlZXBfYWxpdmVfcGVy aW9kKHd2aWYsIGluZm8tPm1heF9pZGxlX3BlcmlvZCAqCisJCQkJCSAgICBVU0VDX1BFUl9UVSAv IFVTRUNfUEVSX01TRUMpOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BS T1QpCisJCWhpZl9lcnBfdXNlX3Byb3RlY3Rpb24od3ZpZiwgaW5mby0+dXNlX2N0c19wcm90KTsK KworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpCisJCWhpZl9zbG90X3RpbWUo d3ZpZiwgaW5mby0+dXNlX3Nob3J0X3Nsb3QgPyA5IDogMjApOworCisJaWYgKGNoYW5nZWQgJiBC U1NfQ0hBTkdFRF9DUU0pCisJCWhpZl9zZXRfcmNwaV9yc3NpX3RocmVzaG9sZCh3dmlmLCBpbmZv LT5jcW1fcnNzaV90aG9sZCwKKwkJCQkJICAgIGluZm8tPmNxbV9yc3NpX2h5c3QpOworCisJaWYg KGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9UWFBPV0VSKQorCQloaWZfc2V0X291dHB1dF9wb3dlcih3 dmlmLCBpbmZvLT50eHBvd2VyKTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfUFMpCisJ CXdmeF91cGRhdGVfcG0od3ZpZik7CisKKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgp OworfQorCitzdGF0aWMgaW50IHdmeF91cGRhdGVfdGltKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQor eworCXN0cnVjdCBza19idWZmICpza2I7CisJdTE2IHRpbV9vZmZzZXQsIHRpbV9sZW5ndGg7CisJ dTggKnRpbV9wdHI7CisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0od3ZpZi0+d2Rl di0+aHcsIHd2aWYtPnZpZiwKKwkJCQkgICAgICAgJnRpbV9vZmZzZXQsICZ0aW1fbGVuZ3RoKTsK KwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9FTlQ7CisJdGltX3B0ciA9IHNrYi0+ZGF0YSArIHRp bV9vZmZzZXQ7CisKKwlpZiAodGltX29mZnNldCAmJiB0aW1fbGVuZ3RoID49IDYpIHsKKwkJLyog SWdub3JlIERUSU0gY291bnQgZnJvbSBtYWM4MDIxMToKKwkJICogZmlybXdhcmUgaGFuZGxlcyBE VElNIGludGVybmFsbHkuCisJCSAqLworCQl0aW1fcHRyWzJdID0gMDsKKworCQkvKiBTZXQvcmVz ZXQgYWlkMCBiaXQgKi8KKwkJaWYgKHdmeF90eF9xdWV1ZXNfaGFzX2NhYih3dmlmKSkKKwkJCXRp bV9wdHJbNF0gfD0gMTsKKwkJZWxzZQorCQkJdGltX3B0cls0XSAmPSB+MTsKKwl9CisKKwloaWZf dXBkYXRlX2llX2JlYWNvbih3dmlmLCB0aW1fcHRyLCB0aW1fbGVuZ3RoKTsKKwlkZXZfa2ZyZWVf c2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2Z4X3VwZGF0ZV90aW1f d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYg PSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIHVwZGF0ZV90aW1fd29yayk7CisK Kwl3ZnhfdXBkYXRlX3RpbSh3dmlmKTsKK30KKworaW50IHdmeF9zZXRfdGltKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIHNldCkKK3sKKwlz dHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0 YV9kZXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRydl9wcml2OworCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIHN0YV9kZXYtPnZpZl9pZCk7CisKKwlp ZiAoIXd2aWYpIHsKKwkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IHJlY2VpdmVkIGV2ZW50IGZv ciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOworCX0KKwlz Y2hlZHVsZV93b3JrKCZ3dmlmLT51cGRhdGVfdGltX3dvcmspOworCXJldHVybiAwOworfQorCit2 b2lkIHdmeF9zdXNwZW5kX3Jlc3VtZV9tYyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgZW51bSBzdGFf bm90aWZ5X2NtZCBub3RpZnlfY21kKQoreworCWlmIChub3RpZnlfY21kICE9IFNUQV9OT1RJRllf QVdBS0UpCisJCXJldHVybjsKKwlXQVJOKCF3ZnhfdHhfcXVldWVzX2hhc19jYWIod3ZpZiksICJp bmNvcnJlY3Qgc2VxdWVuY2UiKTsKKwlXQVJOKHd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCwg ImluY29ycmVjdCBzZXF1ZW5jZSIpOworCXd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCA9IHRy dWU7CisJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7Cit9CisKK2ludCB3ZnhfYW1wZHVf YWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYsCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcykK K3sKKwkvKiBBZ2dyZWdhdGlvbiBpcyBpbXBsZW1lbnRlZCBmdWxseSBpbiBmaXJtd2FyZSAqLwor CXN3aXRjaCAocGFyYW1zLT5hY3Rpb24pIHsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFS VDoKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgorCQkvKiBKdXN0IGFja25vd2xlZGdl IGl0IHRvIGVuYWJsZSBmcmFtZSByZS1vcmRlcmluZyAqLworCQlyZXR1cm4gMDsKKwlkZWZhdWx0 OgorCQkvKiBMZWF2ZSB0aGUgZmlybXdhcmUgZG9pbmcgaXRzIGJ1c2luZXNzIGZvciB0eCBhZ2dy ZWdhdGlvbiAqLworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KK30KKworaW50IHdmeF9hZGRfY2hh bmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hh bmN0eF9jb25mICpjb25mKQoreworCXJldHVybiAwOworfQorCit2b2lkIHdmeF9yZW1vdmVfY2hh bmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0 eF9jb25mICpjb25mKQoreworfQorCit2b2lkIHdmeF9jaGFuZ2VfY2hhbmN0eChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mLAor CQkJdTMyIGNoYW5nZWQpCit7Cit9CisKK2ludCB3ZnhfYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgc3Ry dWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2 aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBpZWVlODAyMTFf Y2hhbm5lbCAqY2ggPSBjb25mLT5kZWYuY2hhbjsKKworCVdBUk4od3ZpZi0+Y2hhbm5lbCwgImNo YW5uZWwgb3ZlcndyaXRlIik7CisJd3ZpZi0+Y2hhbm5lbCA9IGNoOworCisJcmV0dXJuIDA7Cit9 CisKK3ZvaWQgd2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIHN0cnVjdCBp ZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0g KHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5u ZWwgKmNoID0gY29uZi0+ZGVmLmNoYW47CisKKwlXQVJOKHd2aWYtPmNoYW5uZWwgIT0gY2gsICJj aGFubmVsIG1pc21hdGNoIik7CisJd3ZpZi0+Y2hhbm5lbCA9IE5VTEw7Cit9CisKK2ludCB3Znhf Y29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlyZXR1cm4g MDsKK30KKworaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCWludCBpLCByZXQgPSAwOworCXN0cnVjdCB3 ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0 IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCisJdmlmLT5kcml2ZXJfZmxhZ3MgfD0gSUVFRTgw MjExX1ZJRl9CRUFDT05fRklMVEVSIHwKKwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19V QVBTRCB8CisJCQkgICAgIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfQ1FNX1JTU0k7CisKKwltdXRl eF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKworCXN3aXRjaCAodmlmLT50eXBlKSB7CisJY2Fz ZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJ Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXV0ZXhfdW5s b2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8q IEZJWE1FOiBwcmVmZXIgdXNlIG9mIGNvbnRhaW5lcl9vZigpIHRvIGdldCB2aWYgKi8KKwl3dmlm LT52aWYgPSB2aWY7CisJd3ZpZi0+d2RldiA9IHdkZXY7CisKKwl3dmlmLT5saW5rX2lkX21hcCA9 IDE7IC8qIGxpbmstaWQgMCBpcyByZXNlcnZlZCBmb3IgbXVsdGljYXN0ICovCisJSU5JVF9XT1JL KCZ3dmlmLT51cGRhdGVfdGltX3dvcmssIHdmeF91cGRhdGVfdGltX3dvcmspOworCUlOSVRfREVM QVlFRF9XT1JLKCZ3dmlmLT5iZWFjb25fbG9zc193b3JrLCB3ZnhfYmVhY29uX2xvc3Nfd29yayk7 CisKKwlpbml0X2NvbXBsZXRpb24oJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsKKwljb21w bGV0ZSgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOworCUlOSVRfV09SSygmd3ZpZi0+dHhf cG9saWN5X3VwbG9hZF93b3JrLCB3ZnhfdHhfcG9saWN5X3VwbG9hZF93b3JrKTsKKworCW11dGV4 X2luaXQoJnd2aWYtPnNjYW5fbG9jayk7CisJaW5pdF9jb21wbGV0aW9uKCZ3dmlmLT5zY2FuX2Nv bXBsZXRlKTsKKwlJTklUX1dPUksoJnd2aWYtPnNjYW5fd29yaywgd2Z4X2h3X3NjYW5fd29yayk7 CisKKwl3ZnhfdHhfcXVldWVzX2luaXQod3ZpZik7CisJd2Z4X3R4X3BvbGljeV9pbml0KHd2aWYp OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rldi0+dmlmKTsgaSsrKSB7CisJCWlm ICghd2Rldi0+dmlmW2ldKSB7CisJCQl3ZGV2LT52aWZbaV0gPSB2aWY7CisJCQl3dmlmLT5pZCA9 IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlXQVJOKGkgPT0gQVJSQVlfU0laRSh3ZGV2LT52aWYp LCAidHJ5IHRvIGluc3RhbnRpYXRlIG1vcmUgdmlmIHRoYW4gc3VwcG9ydGVkIik7CisKKwloaWZf c2V0X21hY2FkZHIod3ZpZiwgdmlmLT5hZGRyKTsKKworCW11dGV4X3VubG9jaygmd2Rldi0+Y29u Zl9tdXRleCk7CisKKwl3dmlmID0gTlVMTDsKKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUo d2Rldiwgd3ZpZikpICE9IE5VTEwpIHsKKwkJLyogQ29tYm8gbW9kZSBkb2VzIG5vdCBzdXBwb3J0 IEJsb2NrIEFja3MuIFdlIGNhbiByZS1lbmFibGUgdGhlbSAqLworCQlpZiAod3ZpZl9jb3VudCh3 ZGV2KSA9PSAxKQorCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYp OworCQllbHNlCisJCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7 CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgd2Z4X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0 IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1 Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVv dXQoJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlLCBtc2Vjc190b19qaWZmaWVzKDMwMCkpOwor CXdmeF90eF9xdWV1ZXNfY2hlY2tfZW1wdHkod3ZpZik7CisKKwltdXRleF9sb2NrKCZ3ZGV2LT5j b25mX211dGV4KTsKKwlXQVJOKHd2aWYtPmxpbmtfaWRfbWFwICE9IDEsICJjb3JydXB0ZWQgc3Rh dGUiKTsKKworCWhpZl9yZXNldCh3dmlmLCBmYWxzZSk7CisJaGlmX3NldF9tYWNhZGRyKHd2aWYs IE5VTEwpOworCXdmeF90eF9wb2xpY3lfaW5pdCh3dmlmKTsKKworCWNhbmNlbF9kZWxheWVkX3dv cmtfc3luYygmd3ZpZi0+YmVhY29uX2xvc3Nfd29yayk7CisJd2Rldi0+dmlmW3d2aWYtPmlkXSA9 IE5VTEw7CisJd3ZpZi0+dmlmID0gTlVMTDsKKworCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9t dXRleCk7CisKKwl3dmlmID0gTlVMTDsKKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rl diwgd3ZpZikpICE9IE5VTEwpIHsKKwkJLyogQ29tYm8gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IEJs b2NrIEFja3MuIFdlIGNhbiByZS1lbmFibGUgdGhlbSAqLworCQlpZiAod3ZpZl9jb3VudCh3ZGV2 KSA9PSAxKQorCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOwor CQllbHNlCisJCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7CisJ fQorfQorCitpbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVy biAwOworfQorCit2b2lkIHdmeF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0 cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7CisKKwlXQVJOX09OKCFza2JfcXVldWVfZW1w dHlfbG9ja2xlc3MoJndkZXYtPnR4X3BlbmRpbmcpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxh YnMvd2Z4L3N0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTY5 Zjg0MGQ4YzkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJz L3dmeC9zdGEuaApAQCAtMCwwICsxLDczIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5ICovCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgbWFjODAyMTEgQVBJLgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5j LgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgorICovCisjaWZuZGVmIFdGWF9T VEFfSAorI2RlZmluZSBXRlhfU1RBX0gKKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCitz dHJ1Y3Qgd2Z4X2RldjsKK3N0cnVjdCB3ZnhfdmlmOworCitzdHJ1Y3Qgd2Z4X3N0YV9wcml2IHsK KwlpbnQgbGlua19pZDsKKwlpbnQgdmlmX2lkOworfTsKKworLyogbWFjODAyMTEgaW50ZXJmYWNl ICovCitpbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgd2Z4X3N0 b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworaW50IHdmeF9jb25maWcoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKK2ludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSk7Cit2b2lkIHdmeF9zZXRfZGVmYXVsdF91 bmljYXN0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwgaW50IGlkeCk7Cit2b2lkIHdmeF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAgdW5zaWdu ZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IHVudXNlZCk7CisKK2ludCB3ZnhfYWRkX2ludGVyZmFj ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2 b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmKTsKK2ludCB3Znhfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwordm9pZCB3Znhfc3RvcF9hcChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CitpbnQgd2Z4 X2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZik7Cit2b2lkIHdmeF9sZWF2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK2ludCB3ZnhfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJdTE2IHF1ZXVlLCBjb25zdCBz dHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTsKK3ZvaWQgd2Z4X2Jzc19p bmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sIHUzMiBjaGFuZ2Vk KTsKK2ludCB3Znhfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7CitpbnQgd2Z4X3N0 YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsCisJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOwordm9pZCB3Znhfc3RhX25vdGlm eShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJ ICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsK K2ludCB3Znhfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV9zdGEgKnN0YSwgYm9vbCBzZXQpOworaW50IHdmeF9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgICAgc3RydWN0IGll ZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcyk7CitpbnQgd2Z4X2FkZF9jaGFuY3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYg KmNvbmYpOwordm9pZCB3ZnhfcmVtb3ZlX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7Cit2b2lkIHdmeF9jaGFu Z2VfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBpZWVlODAyMTFf Y2hhbmN0eF9jb25mICpjb25mLCB1MzIgY2hhbmdlZCk7CitpbnQgd2Z4X2Fzc2lnbl92aWZfY2hh bmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwK KwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKTsKK3ZvaWQgd2Z4X3Vu YXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0 eF9jb25mICpjb25mKTsKKworLyogV1NNIENhbGxiYWNrcyAqLwordm9pZCB3ZnhfY29vbGluZ190 aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgd2Z4X3N1c3BlbmRf aG90X2RldihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQpOwor dm9pZCB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoc3RydWN0IHdmeF92aWYgKnd2aWYsIGVudW0gc3Rh X25vdGlmeV9jbWQgY21kKTsKK3ZvaWQgd2Z4X2V2ZW50X3JlcG9ydF9yc3NpKHN0cnVjdCB3Znhf dmlmICp3dmlmLCB1OCByYXdfcmNwaV9yc3NpKTsKK2ludCB3ZnhfdXBkYXRlX3BtKHN0cnVjdCB3 ZnhfdmlmICp3dmlmKTsKKworLyogT3RoZXIgSGVscGVycyAqLwordm9pZCB3ZnhfcmVzZXQoc3Ry dWN0IHdmeF92aWYgKnd2aWYpOwordTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9k ZXYgKndkZXYsIHUzMiByYXRlcyk7CisKKyNlbmRpZgotLSAKMi4yOS4yCgo=