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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2989BC433FE for ; Tue, 11 Jan 2022 17:17:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344390AbiAKRRA (ORCPT ); Tue, 11 Jan 2022 12:17:00 -0500 Received: from mail-dm6nam08on2088.outbound.protection.outlook.com ([40.107.102.88]:54880 "EHLO NAM04-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1344053AbiAKRQD (ORCPT ); Tue, 11 Jan 2022 12:16:03 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n16e/8nAQv2z7C6vHZLAJyXmLEXmyKqXEY+NUlM4NgA6doLOLBgDiNV/NaLoPgfXcMdyTS+5vdiLrL4KKJPhyazUMrhMIZE5gcUaLAJbEskg6Eh4A9GN57xSYyYe/FbPd5jop16vFT3n9NqHqvkq3CsRq/T7bTNmka6Mqo+STpFbmrMqT3UufLl7bm4kECZpU61PuN//GsqzIssyLcEjaDOvp6OTrz3Pj6CxCVpDoOvqiXzBCQTeQAXJhQJC/5RPZkudexI0B6LkmgqSiFlW+DdroYTF1zBX5HV6vWaCz/c4K6D5s3PiFtfUfLCB/JxvQh4wFBX17z2BgP3A39jsSQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qiqfnV+Gz+SvdB+J4vIzfcT8pn8/6GgqLgkW0pMuH5M=; b=MBKQk71AjfhfaXPOOQKjBwasRfgibQf0ZT3FrntCqxR2BKtjnP5Tm0/dtttShta3na1HFAeNuy4N0dDloKIKnFCOokewb7ygYZcwq73a4G/lHnZ+lA0ytHYvDCGmNKFWR3b8jGBIV5iL1o7yDsfj0mwhE7R3c1SRjxQSnb+EaoxXQNwNDYOnyW3ukuQyzJIy9IG/oMbktwkAte57eH3gYJxFY4UAg8xkg1Ec3x3hcE376VVcJEQyDIj9C8UgFL9Q9vyXSt8J6tuCBlpgglVCPaQ0VIj+TQLZz34aFs0vyqHnID+whxqBb99DNDlK7qNPJ/fS7A3AKY8UUt54wHa9JA== 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=qiqfnV+Gz+SvdB+J4vIzfcT8pn8/6GgqLgkW0pMuH5M=; b=l5EetzhU7jRJwsgbWWYh12fMntW+KePtLYwQTJRnDL2cVT44rxLdALy13VIscwZLnUP0QbcWieRj1b4hGt4rkCXV8SlpILbo5ElFetjyDHNV+D1lpH8vKput6ZV0h3cEjYfHB3Njs9I8SmSuOxGpApmvxZHf0W02TXTyq7jWv+o= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=silabs.com; Received: from PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) by PH0PR11MB5626.namprd11.prod.outlook.com (2603:10b6:510:ee::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.9; Tue, 11 Jan 2022 17:15:36 +0000 Received: from PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::d031:da9e:71a:73e4]) by PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::d031:da9e:71a:73e4%6]) with mapi id 15.20.4867.012; Tue, 11 Jan 2022 17:15:36 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, Kalle Valo Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , "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 v9 19/24] wfx: add sta.c/sta.h Date: Tue, 11 Jan 2022 18:14:19 +0100 Message-Id: <20220111171424.862764-20-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220111171424.862764-1-Jerome.Pouiller@silabs.com> References: <20220111171424.862764-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-ClientProxiedBy: SN1PR12CA0099.namprd12.prod.outlook.com (2603:10b6:802:21::34) To PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 462fc392-812d-4523-8993-08d9d525fb64 X-MS-TrafficTypeDiagnostic: PH0PR11MB5626:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sSt3NhINpWieUQ8yLoJYs59GkhXQOj6G9IDz7BIOnSeDQJyKm5USl3Ak0rDYHLxU+KiqJdGmStjEzk114ZrCleQWyO4i77HM2zU5/oq83Hx+h51N3D8Ulp3NuptaqwmnH3WNNNFXrkUy1YbMtyxjIOUIibBitvBbIE50H7Sy4qda5Q5d0Oh/khI1KAfeHJhSkv0DSThz16XDXxTlyBwc6Dj2szGB5EucS272rFjJX+YB0ePJtL7oGsdbzfGqQoNv+prIxxFsyS33zldQFDXdagpZW6TYo5reHXSPpg2RMELwGMImJRpMlNbjcA5SYLva+7MrpIujYDUrtqico7qP2iyfmSUOqn8swqMB0CBxUIfpmFIE/FDaX3jzkxV27KLiAiO06cI4vEZLNzaMJWBfl7w0O4YlzQJ0iFf8VFDGk96VBazJZj2eAjWPZhxjyqUhFQ/uk0CkoxeEcTQxstsGVC+AzQ6/aIvPtvON88gRy9n8lej5oKGiqtP23v5SOErZPeLIssnjGdyLhKGFMbC0MKVWBvdEEPQdB8H2r2dCldgbVyj14OWFHRps2i+zaRQczam5W7iT4lMG9TAxsDxiVIJL3hHRu0Cjigjg7uAju350jpDG34ID8+te+lo5mdUIJ1aNGUumDw0By3tCmqEZ6Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR11MB5657.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(1076003)(83380400001)(38100700002)(54906003)(30864003)(86362001)(8676002)(186003)(508600001)(66574015)(6512007)(6666004)(8936002)(6916009)(6506007)(36756003)(2616005)(6486002)(52116002)(2906002)(107886003)(4326008)(316002)(5660300002)(7416002)(66556008)(66946007)(66476007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R2Y2QmNvYlM5dFNtb2FZMjZXY0UzbWxFYjF4T2srY0dwMU4rVjZzYmw3L1VI?= =?utf-8?B?L1Yxc3pZOUwzdmtST09aZ2Y1M3kyNFNQVWhObTZTNnU3UklTUHdOblg1aUtt?= =?utf-8?B?K00wNngzb3hwdlVJMXhZZUxOVkJkUkxKTzgrNXQ1aFhkNTNNRlArN2U2eGQv?= =?utf-8?B?cnJUc1RlTmEwQjAzbzBDTkJ0K2l4RTM0WDdCWU5BMWhYa0JWTHR0cFNVQW9D?= =?utf-8?B?WXNESm5NMFZvRWZNUVNmMHhGdThmaDZVYUNWOHZxYzUrNFZldlhubUFvbzNE?= =?utf-8?B?WG94QnhJZUdXVXAveVdEL2dzcG5Jb213RVJrN2lqZ3VkcGI5a2R1S05GeVlF?= =?utf-8?B?cDRabndvNUR1cEV6ZVBOalU3NVNWNUh1QThETjRUNUZjT045TzlHaS85T3dC?= =?utf-8?B?RCsyVG9zSndydXF6VmFHdHp0NjUySmNnLy9GQTlrc3VFdndWYmorZmRsR2JF?= =?utf-8?B?OTVLNXpNaHRjRktjWlVuRzdmVWVMOEZxY3ZCMFp3dldRNzFOUEE0OFBWd1VC?= =?utf-8?B?eW5Qd0lpaDBiRUhqdkFobHVCVFd2MkdqcUQ5UXQ5cGh5dUZZbXREL2sxV1Vl?= =?utf-8?B?bUhPRWswTVJXR3RaUi93enBYaUdCZ1F4RTBqUGNlR2FYZ1JBdDJINWwzdnlo?= =?utf-8?B?bjZWdkFWMVg4RlM5MlpWVHRwdjhJay9oQThvQWV6VXRPd2dWdjBDNG1CTGN6?= =?utf-8?B?YVdiOEc5b05yanRaOS9ldnJSSnJCSzVLYU5mVXN0ZDkrS2hHYjdIN1BhZ1Y0?= =?utf-8?B?aGI0TmFUbkUrMDFYK3lETlRJdjhjMVZkVVNFY0RXTWd1N1ZVU3N1MktoWC9p?= =?utf-8?B?SmRvMVMzSWZFUjRiZTBtanE2QXY3cDdZdXFsL2EzWFY0WmRHc3FOR0JDY2NH?= =?utf-8?B?bTlONTg3WDZOZFdLeWkwZFpDUXlFb3V0Q2FNbyswSk1kSkh2eDZnQUk5Rmkr?= =?utf-8?B?dUcva1lKWjVVaVhoVm9SUFJ4a3JkWGI0cUhOcWN6V1RMb1pzekV5b3RSY1lN?= =?utf-8?B?c1NWVE45R2lhWUFSQW1UcjVRVGtRMnVhNmRxanQ0UVJFTkZTVk9Rd0FXbTF3?= =?utf-8?B?M3l3MVM3SUxqK2QzOXRwdS9QS084d0lFWUV3SnJzNzlZS1FBblNrcklBWW1L?= =?utf-8?B?L3BPSDBxOXAvYVZDT0ZPZUc1a0VxeG45c0haQzdSOVU1eU5Yay94RnlsQnNw?= =?utf-8?B?aWZBdmZ1ZXZxUzZKV2NLOWV4djNOR0d6T0dKSldjeVVvY1J3T3BSckVMamEx?= =?utf-8?B?Qk1MZDdaSEZPMDVkUk1tZFJFZlFDbWVZREpGNytrSGhzcE04QUhtalpEbDh3?= =?utf-8?B?Z3pwV2g0eEV2MjVKMnQyY0hNd3hYSlQwdThTUEtyaFd3SVRIZmgxR0Y1aDJK?= =?utf-8?B?TVQzYk4vSU5td0gxOVNHYk9PWlZoSndsV1NrUGJybDR5cWVBOW5OV0dUMFhE?= =?utf-8?B?NnlHRDhQSHNBMFhPV3NIOGM1dEo1Rks2ajV4TGtYZTc1K0pNQnJSNXdjVEhZ?= =?utf-8?B?SHNPMWJ1Skcza09DMjJvRDZ3enVHL2ZCc1VDUjh6b1NuRk9HUWFOZzFObXNa?= =?utf-8?B?SXp1MEVkUHFrRjNkaVd4eVFqTGtNa2xuNHVjR3NMWTVZWlZySzNrWGdnUXlr?= =?utf-8?B?cFYwWElOOUl1UThSUE9uUEplUE95UzBiQ29vOEVROGd4ZVg4MlBOWjdVNlds?= =?utf-8?B?MmJQUmp3YTV0WE1sTll4U3NURUs0ZFZ4azRaNVA4emgwbXBLWFR3ZkV5Z1dT?= =?utf-8?B?UWN3UHFrdWU4NUp2SVJmY3JBVmpwbVArWnp5dmtqZmk4MXpPVDd3bEtrUVhG?= =?utf-8?B?OHRSVDcxUEsxWklYQ0JFUFZ5S0Y0NjExZXAyajIwVXIyQkI5Y09ZaEZaQzFG?= =?utf-8?B?Z2lTaTVVMklRLy9nbGZkeW5sY095dU1lQ25WVFJGVGFiVlhGNkJhR0VEZ0R2?= =?utf-8?B?Wnk3Unp0SWk2bzQwSDJSZ1RnQTlMUDUyWnJqbkRYaXBNOEZWaXhLOGF5OHZM?= =?utf-8?B?ZnUwWDY0N1ZZaXZWM29hRXN2MEh1YVgwRmY1ZWhkb1pWaWdrMjlCTkYvOElG?= =?utf-8?B?VzJQT2NuWUNPZ2JVRzlhalN0Qm9ycWtKSzV6M1k0cnNabnBraGJGMTVIQTQ2?= =?utf-8?B?TGhrYWpRaTVRVXM2Szc0YkVWck5uL0FyTFBqbkF3dzVTZEdVd0R6WlBDUDR0?= =?utf-8?B?Q2RMTnVrSnNYdnZIa2dXQ3A0UDZpRDV6NlNRdG5mcjNWTk9pZjVkOVhUeEVB?= =?utf-8?Q?C182mzeyaloazjxBYH8QBpYngc5K168M1fjgXI2W6s=3D?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 462fc392-812d-4523-8993-08d9d525fb64 X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5657.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jan 2022 17:15:36.1561 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sZvosCobD7Nxm790QJS7XyfBkOBYXauzO5rGzDR2HnQ2kRQME8bzxDUJE6QF/zA2M1zDK1Tz+MJZnaPYqWs4VQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5626 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMgfCA3OTggKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3Rh LmggfCAgNjcgKysrCiAyIGZpbGVzIGNoYW5nZWQsIDg2NSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgKCmRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jIGIvZHJpdmVycy9u ZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjk1MTNlNDA2YTg2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMKQEAgLTAsMCArMSw3OTggQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBt YWM4MDIxMSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8K KyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5o PgorCisjaW5jbHVkZSAic3RhLmgiCisjaW5jbHVkZSAid2Z4LmgiCisjaW5jbHVkZSAiZndpby5o IgorI2luY2x1ZGUgImJoLmgiCisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAic2Nhbi5oIgor I2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaGlmX3R4LmgiCisjaW5jbHVkZSAiaGlmX3R4 X21pYi5oIgorCisjZGVmaW5lIEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTIDIKKwor dTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcykK K3sKKwlpbnQgaTsKKwl1MzIgcmV0ID0gMDsKKwkvKiBUaGUgZGV2aWNlIG9ubHkgc3VwcG9ydHMg MkdIeiAqLworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gd2Rldi0+ aHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl07CisKKwlmb3IgKGkgPSAwOyBpIDwg c2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlpZiAocmF0ZXMgJiBCSVQoaSkpIHsKKwkJCWlm IChpID49IHNiYW5kLT5uX2JpdHJhdGVzKQorCQkJCWRldl93YXJuKHdkZXYtPmRldiwgInVuc3Vw cG9ydGVkIGJhc2ljIHJhdGVcbiIpOworCQkJZWxzZQorCQkJCXJldCB8PSBCSVQoc2JhbmQtPmJp dHJhdGVzW2ldLmh3X3ZhbHVlKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdm eF9jb29saW5nX3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3Ry dWN0IHdmeF9kZXYgKndkZXYgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBz dHJ1Y3Qgd2Z4X2RldiwKKwkJCQkJICAgIGNvb2xpbmdfdGltZW91dF93b3JrKTsKKworCXdkZXYt PmNoaXBfZnJvemVuID0gdHJ1ZTsKKwl3ZnhfdHhfdW5sb2NrKHdkZXYpOworfQorCit2b2lkIHdm eF9zdXNwZW5kX2hvdF9kZXYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGVudW0gc3RhX25vdGlmeV9j bWQgY21kKQoreworCWlmIChjbWQgPT0gU1RBX05PVElGWV9BV0FLRSkgeworCQkvKiBEZXZpY2Ug cmVjb3ZlciBub3JtYWwgdGVtcGVyYXR1cmUgKi8KKwkJaWYgKGNhbmNlbF9kZWxheWVkX3dvcmso JndkZXYtPmNvb2xpbmdfdGltZW91dF93b3JrKSkKKwkJCXdmeF90eF91bmxvY2sod2Rldik7CisJ fSBlbHNlIHsKKwkJLyogRGV2aWNlIGlzIHRvbyBob3QgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93 b3JrKCZ3ZGV2LT5jb29saW5nX3RpbWVvdXRfd29yaywgMTAgKiBIWik7CisJCXdmeF90eF9sb2Nr KHdkZXYpOworCX0KK30KKworc3RhdGljIHZvaWQgd2Z4X2ZpbHRlcl9iZWFjb24oc3RydWN0IHdm eF92aWYgKnd2aWYsIGJvb2wgZmlsdGVyX2JlYWNvbikKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0 IHdmeF9oaWZfaWVfdGFibGVfZW50cnkgZmlsdGVyX2llc1tdID0geworCQl7CisJCQkuaWVfaWQg ICAgICAgID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLAorCQkJLmhhc19jaGFuZ2VkICA9IDEs CisJCQkubm9fbG9uZ2VyICAgID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQkJLm91aSAg ICAgICAgICA9IHsgMHg1MCwgMHg2RiwgMHg5QSB9LAorCQl9LCB7CisJCQkuaWVfaWQgICAgICAg ID0gV0xBTl9FSURfSFRfT1BFUkFUSU9OLAorCQkJLmhhc19jaGFuZ2VkICA9IDEsCisJCQkubm9f bG9uZ2VyICAgID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQl9LCB7CisJCQkuaWVfaWQg ICAgICAgID0gV0xBTl9FSURfRVJQX0lORk8sCisJCQkuaGFzX2NoYW5nZWQgID0gMSwKKwkJCS5u b19sb25nZXIgICAgPSAxLAorCQkJLmhhc19hcHBlYXJlZCA9IDEsCisJCX0sIHsKKwkJCS5pZV9p ZCAgICAgICAgPSBXTEFOX0VJRF9DSEFOTkVMX1NXSVRDSCwKKwkJCS5oYXNfY2hhbmdlZCAgPSAx LAorCQkJLm5vX2xvbmdlciAgICA9IDEsCisJCQkuaGFzX2FwcGVhcmVkID0gMSwKKwkJfQorCX07 CisKKwlpZiAoIWZpbHRlcl9iZWFjb24pIHsKKwkJd2Z4X2hpZl9iZWFjb25fZmlsdGVyX2NvbnRy b2wod3ZpZiwgMCwgMSk7CisJfSBlbHNlIHsKKwkJd2Z4X2hpZl9zZXRfYmVhY29uX2ZpbHRlcl90 YWJsZSh3dmlmLCBBUlJBWV9TSVpFKGZpbHRlcl9pZXMpLCBmaWx0ZXJfaWVzKTsKKwkJd2Z4X2hp Zl9iZWFjb25fZmlsdGVyX2NvbnRyb2wod3ZpZiwgSElGX0JFQUNPTl9GSUxURVJfRU5BQkxFLCAw KTsKKwl9Cit9CisKK3ZvaWQgd2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgKnRv dGFsX2ZsYWdzLCB1NjQgdW51c2VkKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gTlVMTDsK KwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCWJvb2wgZmlsdGVyX2Jzc2lkLCBm aWx0ZXJfcHJicmVxLCBmaWx0ZXJfYmVhY29uOworCisJLyogTm90ZXM6CisJICogICAtIFByb2Jl IHJlc3BvbnNlcyAoRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIGFyZSBuZXZlciBmaWx0ZXJlZAor CSAqICAgLSBQUy1Qb2xsIChGSUZfUFNQT0xMKSBhcmUgbmV2ZXIgZmlsdGVyZWQKKwkgKiAgIC0g UlRTLCBDVFMgYW5kIEFjayAoRklGX0NPTlRST0wpIGFyZSBhbHdheXMgZmlsdGVyZWQKKwkgKiAg IC0gQnJva2VuIGZyYW1lcyAoRklGX0ZDU0ZBSUwgYW5kIEZJRl9QTENQRkFJTCkgYXJlIGFsd2F5 cyBmaWx0ZXJlZAorCSAqICAgLSBGaXJtd2FyZSBkb2VzICh5ZXQpIGFsbG93IHRvIGZvcndhcmQg dW5pY2FzdCB0cmFmZmljIHNlbnQgdG8gb3RoZXIgc3RhdGlvbnMgKGFrYS4KKwkgKiAgICAgcHJv bWlzY3VvdXMgbW9kZSkKKwkgKi8KKwkqdG90YWxfZmxhZ3MgJj0gRklGX0JDTl9QUkJSRVNQX1BS T01JU0MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfT1RIRVJfQlNTIHwKKwkJCUZJRl9QUk9CRV9SRVEg fCBGSUZfUFNQT0xMOworCisJbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7CisJd2hpbGUg KCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7CisJCW11dGV4X2xv Y2soJnd2aWYtPnNjYW5fbG9jayk7CisKKwkJLyogTm90ZTogRklGX0JDTl9QUkJSRVNQX1BST01J U0MgY292ZXJzIHByb2JlIHJlc3BvbnNlIGFuZAorCQkgKiBiZWFjb25zIGZyb20gb3RoZXIgQlNT CisJCSAqLworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCisJ CQlmaWx0ZXJfYmVhY29uID0gZmFsc2U7CisJCWVsc2UKKwkJCWZpbHRlcl9iZWFjb24gPSB0cnVl OworCQl3ZnhfZmlsdGVyX2JlYWNvbih3dmlmLCBmaWx0ZXJfYmVhY29uKTsKKworCQlpZiAoKnRv dGFsX2ZsYWdzICYgRklGX09USEVSX0JTUykKKwkJCWZpbHRlcl9ic3NpZCA9IGZhbHNlOworCQll bHNlCisJCQlmaWx0ZXJfYnNzaWQgPSB0cnVlOworCisJCS8qIEluIEFQIG1vZGUsIGNoaXAgY2Fu IHJlcGx5IHRvIHByb2JlIHJlcXVlc3QgaXRzZWxmICovCisJCWlmICgqdG90YWxfZmxhZ3MgJiBG SUZfUFJPQkVfUkVRICYmIHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewor CQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJkbyBub3QgZm9yd2FyZCBwcm9iZSByZXF1ZXN0IGluIEFQ IG1vZGVcbiIpOworCQkJKnRvdGFsX2ZsYWdzICY9IH5GSUZfUFJPQkVfUkVROworCQl9CisKKwkJ aWYgKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9CRV9SRVEpCisJCQlmaWx0ZXJfcHJicmVxID0gZmFs c2U7CisJCWVsc2UKKwkJCWZpbHRlcl9wcmJyZXEgPSB0cnVlOworCQl3ZnhfaGlmX3NldF9yeF9m aWx0ZXIod3ZpZiwgZmlsdGVyX2Jzc2lkLCBmaWx0ZXJfcHJicmVxKTsKKworCQltdXRleF91bmxv Y2soJnd2aWYtPnNjYW5fbG9jayk7CisJfQorCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRl eCk7Cit9CisKK3N0YXRpYyBpbnQgd2Z4X2dldF9wc190aW1lb3V0KHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBib29sICplbmFibGVfcHMpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFu MCA9IE5VTEwsICpjaGFuMSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0g Jnd2aWYtPndkZXYtPmh3LT5jb25mOworCisJV0FSTighd3ZpZi0+dmlmLT5ic3NfY29uZi5hc3Nv YyAmJiBlbmFibGVfcHMsCisJICAgICAiZW5hYmxlX3BzIGlzIHJlbGlhYmxlIG9ubHkgaWYgYXNz b2NpYXRlZCIpOworCWlmICh3ZGV2X3RvX3d2aWYod3ZpZi0+d2RldiwgMCkpCisJCWNoYW4wID0g d2Rldl90b193dmlmKHd2aWYtPndkZXYsIDApLT52aWYtPmJzc19jb25mLmNoYW5kZWYuY2hhbjsK KwlpZiAod2Rldl90b193dmlmKHd2aWYtPndkZXYsIDEpKQorCQljaGFuMSA9IHdkZXZfdG9fd3Zp Zih3dmlmLT53ZGV2LCAxKS0+dmlmLT5ic3NfY29uZi5jaGFuZGVmLmNoYW47CisJaWYgKGNoYW4w ICYmIGNoYW4xICYmIHd2aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlp ZiAoY2hhbjAtPmh3X3ZhbHVlID09IGNoYW4xLT5od192YWx1ZSkgeworCQkJLyogSXQgaXMgdXNl bGVzcyB0byBlbmFibGUgUFMgaWYgY2hhbm5lbHMgYXJlIHRoZSBzYW1lLiAqLworCQkJaWYgKGVu YWJsZV9wcykKKwkJCQkqZW5hYmxlX3BzID0gZmFsc2U7CisJCQlpZiAod3ZpZi0+dmlmLT5ic3Nf Y29uZi5hc3NvYyAmJiB3dmlmLT52aWYtPmJzc19jb25mLnBzKQorCQkJCWRldl9pbmZvKHd2aWYt PndkZXYtPmRldiwgImlnbm9yaW5nIHJlcXVlc3RlZCBQUyBtb2RlIik7CisJCQlyZXR1cm4gLTE7 CisJCX0gZWxzZSB7CisJCQkvKiBJdCBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIFBTIGlmIGNoYW5u ZWxzCisJCQkgKiBhcmUgZGlmZmVyZW50LgorCQkJICovCisJCQlpZiAoZW5hYmxlX3BzKQorCQkJ CSplbmFibGVfcHMgPSB0cnVlOworCQkJaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2 LCAzLCAyKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gMzA7CisJCX0KKwl9 CisJaWYgKGVuYWJsZV9wcykKKwkJKmVuYWJsZV9wcyA9IHd2aWYtPnZpZi0+YnNzX2NvbmYucHM7 CisJaWYgKHd2aWYtPnZpZi0+YnNzX2NvbmYuYXNzb2MgJiYgd3ZpZi0+dmlmLT5ic3NfY29uZi5w cykKKwkJcmV0dXJuIGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dDsKKwllbHNlCisJCXJldHVybiAt MTsKK30KKworaW50IHdmeF91cGRhdGVfcG0oc3RydWN0IHdmeF92aWYgKnd2aWYpCit7CisJaW50 IHBzX3RpbWVvdXQ7CisJYm9vbCBwczsKKworCWlmICghd3ZpZi0+dmlmLT5ic3NfY29uZi5hc3Nv YykKKwkJcmV0dXJuIDA7CisJcHNfdGltZW91dCA9IHdmeF9nZXRfcHNfdGltZW91dCh3dmlmLCAm cHMpOworCWlmICghcHMpCisJCXBzX3RpbWVvdXQgPSAwOworCVdBUk5fT04ocHNfdGltZW91dCA8 IDApOworCWlmICh3dmlmLT51YXBzZF9tYXNrKQorCQlwc190aW1lb3V0ID0gMDsKKworCWlmICgh d2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSwg VFVfVE9fSklGRklFUyg1MTIpKSkKKwkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAidGltZW91 dCB3aGlsZSB3YWl0aW5nIG9mIHNldF9wbV9tb2RlX2NvbXBsZXRlXG4iKTsKKwlyZXR1cm4gd2Z4 X2hpZl9zZXRfcG0od3ZpZiwgcHMsIHBzX3RpbWVvdXQpOworfQorCitpbnQgd2Z4X2NvbmZfdHgo c3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCXUx NiBxdWV1ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykK K3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3ZnhfdmlmICp3 dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlpbnQgb2xkX3VhcHNkID0g d3ZpZi0+dWFwc2RfbWFzazsKKworCVdBUk5fT04ocXVldWUgPj0gaHctPnF1ZXVlcyk7CisKKwlt dXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKwlhc3NpZ25fYml0KHF1ZXVlLCAmd3ZpZi0+ dWFwc2RfbWFzaywgcGFyYW1zLT51YXBzZCk7CisJd2Z4X2hpZl9zZXRfZWRjYV9xdWV1ZV9wYXJh bXMod3ZpZiwgcXVldWUsIHBhcmFtcyk7CisJaWYgKHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjEx X0lGVFlQRV9TVEFUSU9OICYmIG9sZF91YXBzZCAhPSB3dmlmLT51YXBzZF9tYXNrKSB7CisJCXdm eF9oaWZfc2V0X3VhcHNkX2luZm8od3ZpZiwgd3ZpZi0+dWFwc2RfbWFzayk7CisJCXdmeF91cGRh dGVfcG0od3ZpZik7CisJfQorCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7CisJcmV0 dXJuIDA7Cit9CisKK2ludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Owor CXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gTlVMTDsKKworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRl cmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKKwkJd2Z4X2hpZl9ydHNfdGhyZXNob2xkKHd2aWYs IHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3ZnhfZXZlbnRfcmVwb3J0X3Jzc2koc3Ry dWN0IHdmeF92aWYgKnd2aWYsIHU4IHJhd19yY3BpX3Jzc2kpCit7CisJLyogUlNTSTogc2lnbmVk IFE4LjAsIFJDUEk6IHVuc2lnbmVkIFE3LjEKKwkgKiBSU1NJID0gUkNQSSAvIDIgLSAxMTAKKwkg Ki8KKwlpbnQgcmNwaV9yc3NpOworCWludCBjcW1fZXZ0OworCisJcmNwaV9yc3NpID0gcmF3X3Jj cGlfcnNzaSAvIDIgLSAxMTA7CisJaWYgKHJjcGlfcnNzaSA8PSB3dmlmLT52aWYtPmJzc19jb25m LmNxbV9yc3NpX3Rob2xkKQorCQljcW1fZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERf RVZFTlRfTE9XOworCWVsc2UKKwkJY3FtX2V2dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xE X0VWRU5UX0hJR0g7CisJaWVlZTgwMjExX2NxbV9yc3NpX25vdGlmeSh3dmlmLT52aWYsIGNxbV9l dnQsIHJjcGlfcnNzaSwgR0ZQX0tFUk5FTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9iZWFjb25f bG9zc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCB3Znhfdmlm LAorCQkJCQkgICAgYmVhY29uX2xvc3Nfd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29u ZiAqYnNzX2NvbmYgPSAmd3ZpZi0+dmlmLT5ic3NfY29uZjsKKworCWllZWU4MDIxMV9iZWFjb25f bG9zcyh3dmlmLT52aWYpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yayh0b19kZWxheWVkX3dvcmso d29yayksIG1zZWNzX3RvX2ppZmZpZXMoYnNzX2NvbmYtPmJlYWNvbl9pbnQpKTsKK30KKwordm9p ZCB3Znhfc2V0X2RlZmF1bHRfdW5pY2FzdF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGludCBpZHgpCit7CisJc3RydWN0IHdmeF92aWYgKnd2 aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCisJd2Z4X2hpZl93ZXBfZGVm YXVsdF9rZXlfaWQod3ZpZiwgaWR4KTsKK30KKwordm9pZCB3ZnhfcmVzZXQoc3RydWN0IHdmeF92 aWYgKnd2aWYpCit7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSB3dmlmLT53ZGV2OworCisJd2Z4 X3R4X2xvY2tfZmx1c2god2Rldik7CisJd2Z4X2hpZl9yZXNldCh3dmlmLCBmYWxzZSk7CisJd2Z4 X3R4X3BvbGljeV9pbml0KHd2aWYpOworCWlmICh3dmlmX2NvdW50KHdkZXYpIDw9IDEpCisJCXdm eF9oaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7CisJd2Z4X3R4X3Vu bG9jayh3ZGV2KTsKKwl3dmlmLT5qb2luX2luX3Byb2dyZXNzID0gZmFsc2U7CisJY2FuY2VsX2Rl bGF5ZWRfd29ya19zeW5jKCZ3dmlmLT5iZWFjb25fbG9zc193b3JrKTsKKwl3dmlmID0gIE5VTEw7 CisJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKQorCQl3 ZnhfdXBkYXRlX3BtKHd2aWYpOworfQorCitpbnQgd2Z4X3N0YV9hZGQoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3Rh ICpzdGEpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYt PmRydl9wcml2OworCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCB3Znhf c3RhX3ByaXYgKikmc3RhLT5kcnZfcHJpdjsKKworCXN0YV9wcml2LT52aWZfaWQgPSB3dmlmLT5p ZDsKKworCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJd2Z4X2hp Zl9zZXRfbWZwKHd2aWYsIHN0YS0+bWZwLCBzdGEtPm1mcCk7CisKKwkvKiBJbiBzdGF0aW9uIG1v ZGUsIHRoZSBmaXJtd2FyZSBpbnRlcnByZXRzIG5ldyBsaW5rLWlkIGFzIGEgVERMUyBwZWVyICov CisJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmICFzdGEtPnRkbHMp CisJCXJldHVybiAwOworCXN0YV9wcml2LT5saW5rX2lkID0gZmZ6KHd2aWYtPmxpbmtfaWRfbWFw KTsKKwl3dmlmLT5saW5rX2lkX21hcCB8PSBCSVQoc3RhX3ByaXYtPmxpbmtfaWQpOworCVdBUk5f T04oIXN0YV9wcml2LT5saW5rX2lkKTsKKwlXQVJOX09OKHN0YV9wcml2LT5saW5rX2lkID49IEhJ Rl9MSU5LX0lEX01BWCk7CisJd2Z4X2hpZl9tYXBfbGluayh3dmlmLCBmYWxzZSwgc3RhLT5hZGRy LCBzdGFfcHJpdi0+bGlua19pZCwgc3RhLT5tZnApOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3 Znhfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IHdmeF9zdGFf cHJpdiAqc3RhX3ByaXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRydl9wcml2Owor CisJLyogU2VlIG5vdGUgaW4gd2Z4X3N0YV9hZGQoKSAqLworCWlmICghc3RhX3ByaXYtPmxpbmtf aWQpCisJCXJldHVybiAwOworCS8qIEZJWE1FIGFkZCBhIG11dGV4PyAqLworCXdmeF9oaWZfbWFw X2xpbmsod3ZpZiwgdHJ1ZSwgc3RhLT5hZGRyLCBzdGFfcHJpdi0+bGlua19pZCwgZmFsc2UpOwor CXd2aWYtPmxpbmtfaWRfbWFwICY9IH5CSVQoc3RhX3ByaXYtPmxpbmtfaWQpOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHdmeF91cGxvYWRfYXBfdGVtcGxhdGVzKHN0cnVjdCB3Znhfdmlm ICp3dmlmKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBpZWVlODAyMTFfYmVh Y29uX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJu IC1FTk9NRU07CisJd2Z4X2hpZl9zZXRfdGVtcGxhdGVfZnJhbWUod3ZpZiwgc2tiLCBISUZfVE1Q TFRfQkNOLCBBUElfUkFURV9JTkRFWF9CXzFNQlBTKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisK Kwlza2IgPSBpZWVlODAyMTFfcHJvYmVyZXNwX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlm KTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisJd2Z4X2hpZl9zZXRfdGVtcGxhdGVf ZnJhbWUod3ZpZiwgc2tiLCBISUZfVE1QTFRfUFJCUkVTLCBBUElfUkFURV9JTkRFWF9CXzFNQlBT KTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdm eF9zZXRfbWZwX2FwKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCBza19idWZmICpz a2IgPSBpZWVlODAyMTFfYmVhY29uX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmKTsKKwlj b25zdCBpbnQgaWVvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVh Y29uLnZhcmlhYmxlKTsKKwljb25zdCB1MTYgKnB0ciA9ICh1MTYgKiljZmc4MDIxMV9maW5kX2ll KFdMQU5fRUlEX1JTTiwgc2tiLT5kYXRhICsgaWVvZmZzZXQsCisJCQkJCQkgc2tiLT5sZW4gLSBp ZW9mZnNldCk7CisJY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudF9vZmZzZXQg PSA4IC8gc2l6ZW9mKHUxNik7CisJY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9zaXpl ID0gNCAvIHNpemVvZih1MTYpOworCWNvbnN0IGludCBha21fc3VpdGVfc2l6ZSA9IDQgLyBzaXpl b2YodTE2KTsKKworCWlmIChwdHIpIHsKKwkJcHRyICs9IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9j b3VudF9vZmZzZXQ7CisJCWlmIChXQVJOX09OKHB0ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVy KHNrYikpKQorCQkJcmV0dXJuOworCQlwdHIgKz0gMSArIHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9z aXplICogKnB0cjsKKwkJaWYgKFdBUk5fT04ocHRyID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIo c2tiKSkpCisJCQlyZXR1cm47CisJCXB0ciArPSAxICsgYWttX3N1aXRlX3NpemUgKiAqcHRyOwor CQlpZiAoV0FSTl9PTihwdHIgPiAodTE2ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKSkKKwkJCXJl dHVybjsKKwkJd2Z4X2hpZl9zZXRfbWZwKHd2aWYsICpwdHIgJiBCSVQoNyksICpwdHIgJiBCSVQo NikpOworCX0KK30KKworaW50IHdmeF9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChz dHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSB3 dmlmLT53ZGV2OworCWludCByZXQ7CisKKwl3dmlmID0gIE5VTEw7CisJd2hpbGUgKCh3dmlmID0g d3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKQorCQl3ZnhfdXBkYXRlX3BtKHd2aWYp OworCXd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCXdmeF91cGxvYWRf YXBfdGVtcGxhdGVzKHd2aWYpOworCXJldCA9IHdmeF9oaWZfc3RhcnQod3ZpZiwgJnZpZi0+YnNz X2NvbmYsIHd2aWYtPmNoYW5uZWwpOworCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gLUVJTzsKKwl3 Znhfc2V0X21mcF9hcCh3dmlmKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdmeF9zdG9wX2Fw KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQorewor CXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsK KworCXdmeF9yZXNldCh3dmlmKTsKK30KKworc3RhdGljIHZvaWQgd2Z4X2pvaW4oc3RydWN0IHdm eF92aWYgKnd2aWYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpj b25mID0gJnd2aWYtPnZpZi0+YnNzX2NvbmY7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0g TlVMTDsKKwl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCWNvbnN0IHU4ICpzc2lk aWUgPSBOVUxMOworCWludCBzc2lkbGVuID0gMDsKKworCXdmeF90eF9sb2NrX2ZsdXNoKHd2aWYt PndkZXYpOworCisJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHks IHd2aWYtPmNoYW5uZWwsIGNvbmYtPmJzc2lkLCBOVUxMLCAwLAorCQkJICAgICAgIElFRUU4MDIx MV9CU1NfVFlQRV9BTlksIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7CisJaWYgKCFic3MgJiYgIWNv bmYtPmlic3Nfam9pbmVkKSB7CisJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7CisJCXJldHVy bjsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7IC8qIHByb3RlY3Qgc3NpZGllICovCisJaWYgKGJz cykKKwkJc3NpZGllID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9TU0lEKTsK KwlpZiAoc3NpZGllKSB7CisJCXNzaWRsZW4gPSBzc2lkaWVbMV07CisJCWlmIChzc2lkbGVuID4g SUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwkJCXNzaWRsZW4gPSBJRUVFODAyMTFfTUFYX1NTSURf TEVOOworCQltZW1jcHkoc3NpZCwgJnNzaWRpZVsyXSwgc3NpZGxlbik7CisJfQorCXJjdV9yZWFk X3VubG9jaygpOworCisJY2ZnODAyMTFfcHV0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIGJz cyk7CisKKwl3dmlmLT5qb2luX2luX3Byb2dyZXNzID0gdHJ1ZTsKKwlyZXQgPSB3ZnhfaGlmX2pv aW4od3ZpZiwgY29uZiwgd3ZpZi0+Y2hhbm5lbCwgc3NpZCwgc3NpZGxlbik7CisJaWYgKHJldCkg eworCQlpZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzKHd2aWYtPnZpZik7CisJCXdmeF9yZXNldCh3 dmlmKTsKKwl9IGVsc2UgeworCQkvKiBEdWUgdG8gYmVhY29uIGZpbHRlcmluZyBpdCBpcyBwb3Nz aWJsZSB0aGF0IHRoZSBBUCdzIGJlYWNvbiBpcyBub3Qga25vd24gZm9yIHRoZQorCQkgKiBtYWM4 MDIxMSBzdGFjay4gIERpc2FibGUgZmlsdGVyaW5nIHRlbXBvcmFyeSB0byBtYWtlIHN1cmUgdGhl IHN0YWNrIHJlY2VpdmVzIGF0CisJCSAqIGxlYXN0IG9uZQorCQkgKi8KKwkJd2Z4X2ZpbHRlcl9i ZWFjb24od3ZpZiwgZmFsc2UpOworCX0KKwl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOworfQor CitzdGF0aWMgdm9pZCB3Znhfam9pbl9maW5hbGl6ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJ CSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pCit7CisJc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YSA9IE5VTEw7CisJaW50IGFtcGR1X2RlbnNpdHkgPSAwOworCWJvb2wgZ3Jl ZW5maWVsZCA9IGZhbHNlOworCisJcmN1X3JlYWRfbG9jaygpOyAvKiBwcm90ZWN0IHN0YSAqLwor CWlmIChpbmZvLT5ic3NpZCAmJiAhaW5mby0+aWJzc19qb2luZWQpCisJCXN0YSA9IGllZWU4MDIx MV9maW5kX3N0YSh3dmlmLT52aWYsIGluZm8tPmJzc2lkKTsKKwlpZiAoc3RhICYmIHN0YS0+aHRf Y2FwLmh0X3N1cHBvcnRlZCkKKwkJYW1wZHVfZGVuc2l0eSA9IHN0YS0+aHRfY2FwLmFtcGR1X2Rl bnNpdHk7CisJaWYgKHN0YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQgJiYKKwkgICAgIShp bmZvLT5odF9vcGVyYXRpb25fbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9TVEFf UFJTTlQpKQorCQlncmVlbmZpZWxkID0gISEoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hU X0NBUF9HUk5fRkxEKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXd2aWYtPmpvaW5faW5fcHJv Z3Jlc3MgPSBmYWxzZTsKKwl3ZnhfaGlmX3NldF9hc3NvY2lhdGlvbl9tb2RlKHd2aWYsIGFtcGR1 X2RlbnNpdHksIGdyZWVuZmllbGQsIGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSk7CisJd2Z4X2hp Zl9rZWVwX2FsaXZlX3BlcmlvZCh3dmlmLCAwKTsKKwkvKiBiZWFjb25fbG9zc19jb3VudCBpcyBk ZWZpbmVkIHRvIDcgaW4gbmV0L21hYzgwMjExL21sbWUuYy4gTGV0J3MgdXNlIHRoZSBzYW1lIHZh bHVlLiAqLworCXdmeF9oaWZfc2V0X2Jzc19wYXJhbXMod3ZpZiwgaW5mby0+YWlkLCA3KTsKKwl3 ZnhfaGlmX3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZCh3dmlmLCAxLCAxKTsKKwl3ZnhfdXBkYXRl X3BtKHd2aWYpOworfQorCitpbnQgd2Z4X2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9 IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisKKwl3ZnhfdXBsb2FkX2FwX3RlbXBs YXRlcyh3dmlmKTsKKwl3Znhfam9pbih3dmlmKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3Znhf bGVhdmVfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZikKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ ZHJ2X3ByaXY7CisKKwl3ZnhfcmVzZXQod3ZpZik7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9lbmFi bGVfYmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSkKK3sKKwkvKiBEcml2 ZXIgaGFzIENvbnRlbnQgQWZ0ZXIgRFRJTSBCZWFjb24gaW4gcXVldWUuIERyaXZlciBpcyB3YWl0 aW5nIGZvciBhIHNpZ25hbCBmcm9tIHRoZQorCSAqIGZpcm13YXJlLiBTaW5jZSB3ZSBhcmUgZ29p bmcgdG8gc3RvcCB0byBzZW5kIGJlYWNvbnMsIHRoaXMgc2lnbmFsIHdpbGwgbmV2ZXIgaGFwcGVu cy4gU2VlCisJICogYWxzbyB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoKQorCSAqLworCWlmICghZW5h YmxlICYmIHdmeF90eF9xdWV1ZXNfaGFzX2NhYih3dmlmKSkgeworCQl3dmlmLT5hZnRlcl9kdGlt X3R4X2FsbG93ZWQgPSB0cnVlOworCQl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2KTsKKwl9 CisJd2Z4X2hpZl9iZWFjb25fdHJhbnNtaXQod3ZpZiwgZW5hYmxlKTsKK30KKwordm9pZCB3Znhf YnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNo YW5nZWQpCit7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJaW50IGk7CisK KwltdXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NI QU5HRURfQkFTSUNfUkFURVMgfHwKKwkgICAgY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9J TlQgfHwKKwkgICAgY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7CisJCWlmICh2aWYtPnR5 cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCXdmeF9qb2luKHd2aWYpOworCX0KKwor CWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJaWYgKGluZm8tPmFzc29jIHx8 IGluZm8tPmlic3Nfam9pbmVkKQorCQkJd2Z4X2pvaW5fZmluYWxpemUod3ZpZiwgaW5mbyk7CisJ CWVsc2UgaWYgKCFpbmZvLT5hc3NvYyAmJiB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RB VElPTikKKwkJCXdmeF9yZXNldCh3dmlmKTsKKwkJZWxzZQorCQkJZGV2X3dhcm4od2Rldi0+ZGV2 LCAibWlzdW5kZXJzdG9vZCBjaGFuZ2U6IEFTU09DXG4iKTsKKwl9CisKKwlpZiAoY2hhbmdlZCAm IEJTU19DSEFOR0VEX0JFQUNPTl9JTkZPKSB7CisJCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9J RlRZUEVfU1RBVElPTikKKwkJCWRldl93YXJuKHdkZXYtPmRldiwgIm1pc3VuZGVyc3Rvb2QgY2hh bmdlOiBCRUFDT05fSU5GT1xuIik7CisJCXdmeF9oaWZfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9k KHd2aWYsIGluZm8tPmR0aW1fcGVyaW9kLCBpbmZvLT5kdGltX3BlcmlvZCk7CisJCS8qIFdlIHRl bXBvcmFyeSBmb3J3YXJkZWQgYmVhY29uIGZvciBqb2luIHByb2Nlc3MuIEl0IGlzIG5vdyBubyBt b3JlIG5lY2Vzc2FyeS4gKi8KKwkJd2Z4X2ZpbHRlcl9iZWFjb24od3ZpZiwgdHJ1ZSk7CisJfQor CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BUlBfRklMVEVSKSB7CisJCWZvciAoaSA9IDA7 IGkgPCBISUZfTUFYX0FSUF9JUF9BRERSVEFCTEVfRU5UUklFUzsgaSsrKSB7CisJCQlfX2JlMzIg KmFycF9hZGRyID0gJmluZm8tPmFycF9hZGRyX2xpc3RbaV07CisKKwkJCWlmIChpbmZvLT5hcnBf YWRkcl9jbnQgPiBISUZfTUFYX0FSUF9JUF9BRERSVEFCTEVfRU5UUklFUykKKwkJCQlhcnBfYWRk ciA9IE5VTEw7CisJCQlpZiAoaSA+PSBpbmZvLT5hcnBfYWRkcl9jbnQpCisJCQkJYXJwX2FkZHIg PSBOVUxMOworCQkJd2Z4X2hpZl9zZXRfYXJwX2lwdjRfZmlsdGVyKHd2aWYsIGksIGFycF9hZGRy KTsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVBfUFJPQkVfUkVTUCB8 fCBjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OKQorCQl3ZnhfdXBsb2FkX2FwX3RlbXBsYXRl cyh3dmlmKTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpCisJ CXdmeF9lbmFibGVfYmVhY29uKHd2aWYsIGluZm8tPmVuYWJsZV9iZWFjb24pOworCisJaWYgKGNo YW5nZWQgJiBCU1NfQ0hBTkdFRF9LRUVQX0FMSVZFKQorCQl3ZnhfaGlmX2tlZXBfYWxpdmVfcGVy aW9kKHd2aWYsIGluZm8tPm1heF9pZGxlX3BlcmlvZCAqCisJCQkJCQlVU0VDX1BFUl9UVSAvIFVT RUNfUEVSX01TRUMpOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1Qp CisJCXdmeF9oaWZfZXJwX3VzZV9wcm90ZWN0aW9uKHd2aWYsIGluZm8tPnVzZV9jdHNfcHJvdCk7 CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9UKQorCQl3ZnhfaGlmX3Nsb3Rf dGltZSh3dmlmLCBpbmZvLT51c2Vfc2hvcnRfc2xvdCA/IDkgOiAyMCk7CisKKwlpZiAoY2hhbmdl ZCAmIEJTU19DSEFOR0VEX0NRTSkKKwkJd2Z4X2hpZl9zZXRfcmNwaV9yc3NpX3RocmVzaG9sZCh3 dmlmLCBpbmZvLT5jcW1fcnNzaV90aG9sZCwgaW5mby0+Y3FtX3Jzc2lfaHlzdCk7CisKKwlpZiAo Y2hhbmdlZCAmIEJTU19DSEFOR0VEX1RYUE9XRVIpCisJCXdmeF9oaWZfc2V0X291dHB1dF9wb3dl cih3dmlmLCBpbmZvLT50eHBvd2VyKTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfUFMp CisJCXdmeF91cGRhdGVfcG0od3ZpZik7CisKKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0 ZXgpOworfQorCitzdGF0aWMgaW50IHdmeF91cGRhdGVfdGltKHN0cnVjdCB3ZnhfdmlmICp3dmlm KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdTE2IHRpbV9vZmZzZXQsIHRpbV9sZW5ndGg7 CisJdTggKnRpbV9wdHI7CisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0od3ZpZi0+ d2Rldi0+aHcsIHd2aWYtPnZpZiwgJnRpbV9vZmZzZXQsICZ0aW1fbGVuZ3RoKTsKKwlpZiAoIXNr YikKKwkJcmV0dXJuIC1FTk9FTlQ7CisJdGltX3B0ciA9IHNrYi0+ZGF0YSArIHRpbV9vZmZzZXQ7 CisKKwlpZiAodGltX29mZnNldCAmJiB0aW1fbGVuZ3RoID49IDYpIHsKKwkJLyogRmlybXdhcmUg aGFuZGxlcyBEVElNIGNvdW50ZXIgaW50ZXJuYWxseSAqLworCQl0aW1fcHRyWzJdID0gMDsKKwor CQkvKiBTZXQvcmVzZXQgYWlkMCBiaXQgKi8KKwkJaWYgKHdmeF90eF9xdWV1ZXNfaGFzX2NhYih3 dmlmKSkKKwkJCXRpbV9wdHJbNF0gfD0gMTsKKwkJZWxzZQorCQkJdGltX3B0cls0XSAmPSB+MTsK Kwl9CisKKwl3ZnhfaGlmX3VwZGF0ZV9pZV9iZWFjb24od3ZpZiwgdGltX3B0ciwgdGltX2xlbmd0 aCk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IHdmeF91cGRhdGVfdGltX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVj dCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCB1cGRh dGVfdGltX3dvcmspOworCisJd2Z4X3VwZGF0ZV90aW0od3ZpZik7Cit9CisKK2ludCB3Znhfc2V0 X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwg Ym9vbCBzZXQpCit7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qg d2Z4X3N0YV9wcml2ICpzdGFfZGV2ID0gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikmc3RhLT5kcnZf cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBzdGFfZGV2 LT52aWZfaWQpOworCisJaWYgKCF3dmlmKSB7CisJCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiBy ZWNlaXZlZCBldmVudCBmb3Igbm9uLWV4aXN0ZW50IHZpZlxuIiwgX19mdW5jX18pOworCQlyZXR1 cm4gLUVJTzsKKwl9CisJc2NoZWR1bGVfd29yaygmd3ZpZi0+dXBkYXRlX3RpbV93b3JrKTsKKwly ZXR1cm4gMDsKK30KKwordm9pZCB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoc3RydWN0IHdmeF92aWYg Knd2aWYsIGVudW0gc3RhX25vdGlmeV9jbWQgbm90aWZ5X2NtZCkKK3sKKwlzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZl9pdDsKKworCWlmIChub3RpZnlfY21kICE9IFNUQV9OT1RJRllfQVdBS0UpCisJCXJl dHVybjsKKworCS8qIERldmljZSB3b24ndCBiZSBhYmxlIHRvIGhvbm9yIENBQiBpZiBhIHNjYW4g aXMgaW4gcHJvZ3Jlc3Mgb24gYW55IGludGVyZmFjZS4gUHJlZmVyIHRvCisJICogc2tpcCB0aGlz IERUSU0gYW5kIHdhaXQgZm9yIHRoZSBuZXh0IG9uZS4KKwkgKi8KKwl3dmlmX2l0ID0gTlVMTDsK Kwl3aGlsZSAoKHd2aWZfaXQgPSB3dmlmX2l0ZXJhdGUod3ZpZi0+d2Rldiwgd3ZpZl9pdCkpICE9 IE5VTEwpCisJCWlmIChtdXRleF9pc19sb2NrZWQoJnd2aWZfaXQtPnNjYW5fbG9jaykpCisJCQly ZXR1cm47CisKKwlpZiAoIXdmeF90eF9xdWV1ZXNfaGFzX2NhYih3dmlmKSB8fCB3dmlmLT5hZnRl cl9kdGltX3R4X2FsbG93ZWQpCisJCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwgImluY29ycmVj dCBzZXF1ZW5jZSAoJWQgQ0FCIGluIHF1ZXVlKSIsCisJCQkgd2Z4X3R4X3F1ZXVlc19oYXNfY2Fi KHd2aWYpKTsKKwl3dmlmLT5hZnRlcl9kdGltX3R4X2FsbG93ZWQgPSB0cnVlOworCXdmeF9iaF9y ZXF1ZXN0X3R4KHd2aWYtPndkZXYpOworfQorCitpbnQgd2Z4X2FtcGR1X2FjdGlvbihzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgICBzdHJ1 Y3QgaWVlZTgwMjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zKQoreworCS8qIEFnZ3JlZ2F0aW9uIGlz IGltcGxlbWVudGVkIGZ1bGx5IGluIGZpcm13YXJlICovCisJc3dpdGNoIChwYXJhbXMtPmFjdGlv bikgeworCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJUOgorCWNhc2UgSUVFRTgwMjExX0FN UERVX1JYX1NUT1A6CisJCS8qIEp1c3QgYWNrbm93bGVkZ2UgaXQgdG8gZW5hYmxlIGZyYW1lIHJl LW9yZGVyaW5nICovCisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCS8qIExlYXZlIHRoZSBmaXJt d2FyZSBkb2luZyBpdHMgYnVzaW5lc3MgZm9yIHR4IGFnZ3JlZ2F0aW9uICovCisJCXJldHVybiAt RU9QTk9UU1VQUDsKKwl9Cit9CisKK2ludCB3ZnhfYWRkX2NoYW5jdHgoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKQoreworCXJldHVy biAwOworfQorCit2b2lkIHdmeF9yZW1vdmVfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7Cit9CisKK3ZvaWQgd2Z4 X2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjEx X2NoYW5jdHhfY29uZiAqY29uZiwgdTMyIGNoYW5nZWQpCit7Cit9CisKK2ludCB3ZnhfYXNzaWdu X3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7CisJ c3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2Owor CXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ggPSBjb25mLT5kZWYuY2hhbjsKKworCVdBUk4o d3ZpZi0+Y2hhbm5lbCwgImNoYW5uZWwgb3ZlcndyaXRlIik7CisJd3ZpZi0+Y2hhbm5lbCA9IGNo OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAg c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHdmeF92aWYg Knd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBpZWVlODAy MTFfY2hhbm5lbCAqY2ggPSBjb25mLT5kZWYuY2hhbjsKKworCVdBUk4od3ZpZi0+Y2hhbm5lbCAh PSBjaCwgImNoYW5uZWwgbWlzbWF0Y2giKTsKKwl3dmlmLT5jaGFubmVsID0gTlVMTDsKK30KKwor aW50IHdmeF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQorewor CXJldHVybiAwOworfQorCitpbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJaW50IGksIHJldCA9IDA7CisJ c3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9 IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisKKwl2aWYtPmRyaXZlcl9mbGFncyB8 PSBJRUVFODAyMTFfVklGX0JFQUNPTl9GSUxURVIgfAorCQkJICAgICBJRUVFODAyMTFfVklGX1NV UFBPUlRTX1VBUFNEIHwKKwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19DUU1fUlNTSTsK KworCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCisJc3dpdGNoICh2aWYtPnR5cGUp IHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJY2FzZSBOTDgwMjExX0lGVFlQRV9B REhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlt dXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJ fQorCisJLyogRklYTUU6IHByZWZlciB1c2Ugb2YgY29udGFpbmVyX29mKCkgdG8gZ2V0IHZpZiAq LworCXd2aWYtPnZpZiA9IHZpZjsKKwl3dmlmLT53ZGV2ID0gd2RldjsKKworCXd2aWYtPmxpbmtf aWRfbWFwID0gMTsgLyogbGluay1pZCAwIGlzIHJlc2VydmVkIGZvciBtdWx0aWNhc3QgKi8KKwlJ TklUX1dPUksoJnd2aWYtPnVwZGF0ZV90aW1fd29yaywgd2Z4X3VwZGF0ZV90aW1fd29yayk7CisJ SU5JVF9ERUxBWUVEX1dPUksoJnd2aWYtPmJlYWNvbl9sb3NzX3dvcmssIHdmeF9iZWFjb25fbG9z c193b3JrKTsKKworCWluaXRfY29tcGxldGlvbigmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUp OworCWNvbXBsZXRlKCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSk7CisJSU5JVF9XT1JLKCZ3 dmlmLT50eF9wb2xpY3lfdXBsb2FkX3dvcmssIHdmeF90eF9wb2xpY3lfdXBsb2FkX3dvcmspOwor CisJbXV0ZXhfaW5pdCgmd3ZpZi0+c2Nhbl9sb2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJnd2aWYt PnNjYW5fY29tcGxldGUpOworCUlOSVRfV09SSygmd3ZpZi0+c2Nhbl93b3JrLCB3ZnhfaHdfc2Nh bl93b3JrKTsKKworCXdmeF90eF9xdWV1ZXNfaW5pdCh3dmlmKTsKKwl3ZnhfdHhfcG9saWN5X2lu aXQod3ZpZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2LT52aWYpOyBpKysp IHsKKwkJaWYgKCF3ZGV2LT52aWZbaV0pIHsKKwkJCXdkZXYtPnZpZltpXSA9IHZpZjsKKwkJCXd2 aWYtPmlkID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCVdBUk4oaSA9PSBBUlJBWV9TSVpFKHdk ZXYtPnZpZiksICJ0cnkgdG8gaW5zdGFudGlhdGUgbW9yZSB2aWYgdGhhbiBzdXBwb3J0ZWQiKTsK KworCXdmeF9oaWZfc2V0X21hY2FkZHIod3ZpZiwgdmlmLT5hZGRyKTsKKworCW11dGV4X3VubG9j aygmd2Rldi0+Y29uZl9tdXRleCk7CisKKwl3dmlmID0gTlVMTDsKKwl3aGlsZSAoKHd2aWYgPSB3 dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpIHsKKwkJLyogQ29tYm8gbW9kZSBkb2Vz IG5vdCBzdXBwb3J0IEJsb2NrIEFja3MuIFdlIGNhbiByZS1lbmFibGUgdGhlbSAqLworCQlpZiAo d3ZpZl9jb3VudCh3ZGV2KSA9PSAxKQorCQkJd2Z4X2hpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3 dmlmLCAweEZGLCAweEZGKTsKKwkJZWxzZQorCQkJd2Z4X2hpZl9zZXRfYmxvY2tfYWNrX3BvbGlj eSh3dmlmLCAweDAwLCAweDAwKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3ZnhfcmVt b3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZikKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXdhaXRf Zm9yX2NvbXBsZXRpb25fdGltZW91dCgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUsIG1zZWNz X3RvX2ppZmZpZXMoMzAwKSk7CisJd2Z4X3R4X3F1ZXVlc19jaGVja19lbXB0eSh3dmlmKTsKKwor CW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCVdBUk4od3ZpZi0+bGlua19pZF9tYXAg IT0gMSwgImNvcnJ1cHRlZCBzdGF0ZSIpOworCisJd2Z4X2hpZl9yZXNldCh3dmlmLCBmYWxzZSk7 CisJd2Z4X2hpZl9zZXRfbWFjYWRkcih3dmlmLCBOVUxMKTsKKwl3ZnhfdHhfcG9saWN5X2luaXQo d3ZpZik7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYtPmJlYWNvbl9sb3NzX3dv cmspOworCXdkZXYtPnZpZlt3dmlmLT5pZF0gPSBOVUxMOworCXd2aWYtPnZpZiA9IE5VTEw7CisK KwltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCisJd3ZpZiA9IE5VTEw7CisJd2hp bGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7CisJCS8qIENv bWJvIG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBCbG9jayBBY2tzLiBXZSBjYW4gcmUtZW5hYmxlIHRo ZW0gKi8KKwkJaWYgKHd2aWZfY291bnQod2RldikgPT0gMSkKKwkJCXdmeF9oaWZfc2V0X2Jsb2Nr X2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7CisJCWVsc2UKKwkJCXdmeF9oaWZfc2V0X2Js b2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7CisJfQorfQorCitpbnQgd2Z4X3N0YXJ0 KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVybiAwOworfQorCit2b2lkIHdmeF9z dG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0g aHctPnByaXY7CisKKwlXQVJOX09OKCFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJndkZXYtPnR4 X3BlbmRpbmcpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93 Zngvc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDgyMzI5ZDdiYmNkCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuaApAQCAtMCwwICsx LDY3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgor ICogSW1wbGVtZW50YXRpb24gb2YgbWFjODAyMTEgQVBJLgorICoKKyAqIENvcHlyaWdodCAoYykg MjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAy MDEwLCBTVC1Fcmljc3NvbgorICovCisjaWZuZGVmIFdGWF9TVEFfSAorI2RlZmluZSBXRlhfU1RB X0gKKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCitzdHJ1Y3Qgd2Z4X2RldjsKK3N0cnVj dCB3ZnhfdmlmOworCitzdHJ1Y3Qgd2Z4X3N0YV9wcml2IHsKKwlpbnQgbGlua19pZDsKKwlpbnQg dmlmX2lkOworfTsKKworLyogbWFjODAyMTEgaW50ZXJmYWNlICovCitpbnQgd2Z4X3N0YXJ0KHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgd2Z4X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcpOworaW50IHdmeF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFu Z2VkKTsKK2ludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHUzMiB2YWx1ZSk7Cit2b2lkIHdmeF9zZXRfZGVmYXVsdF91bmljYXN0X2tleShzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgaW50IGlkeCk7Cit2b2lk IHdmeF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBp bnQgY2hhbmdlZF9mbGFncywKKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IHVu dXNlZCk7CisKK2ludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNlKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK2ludCB3 Znhfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYpOwordm9pZCB3Znhfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZik7CitpbnQgd2Z4X2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIHdmeF9sZWF2ZV9pYnNz KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK2lu dCB3ZnhfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwKKwkJdTE2IHF1ZXVlLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3Bh cmFtcyAqcGFyYW1zKTsKK3ZvaWQgd2Z4X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgIHN0cnVjdCBpZWVlODAy MTFfYnNzX2NvbmYgKmluZm8sIHUzMiBjaGFuZ2VkKTsKK2ludCB3Znhfc3RhX2FkZChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YSk7CitpbnQgd2Z4X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEp Owordm9pZCB3Znhfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGll ZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLCBzdHJ1Y3Qg aWVlZTgwMjExX3N0YSAqc3RhKTsKK2ludCB3Znhfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBzZXQpOworaW50IHdmeF9hbXBk dV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcyk7CitpbnQg d2Z4X2FkZF9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjEx X2NoYW5jdHhfY29uZiAqY29uZik7Cit2b2lkIHdmeF9yZW1vdmVfY2hhbmN0eChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOwordm9p ZCB3ZnhfY2hhbmdlX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVl ODAyMTFfY2hhbmN0eF9jb25mICpjb25mLAorCQkJdTMyIGNoYW5nZWQpOworaW50IHdmeF9hc3Np Z25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7Cit2 b2lkIHdmeF91bmFzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0 eF9jb25mICpjb25mKTsKKworLyogSGFyZHdhcmUgQVBJIENhbGxiYWNrcyAqLwordm9pZCB3Znhf Y29vbGluZ190aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgd2Z4 X3N1c3BlbmRfaG90X2RldihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBzdGFfbm90aWZ5X2Nt ZCBjbWQpOwordm9pZCB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoc3RydWN0IHdmeF92aWYgKnd2aWYs IGVudW0gc3RhX25vdGlmeV9jbWQgY21kKTsKK3ZvaWQgd2Z4X2V2ZW50X3JlcG9ydF9yc3NpKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCByYXdfcmNwaV9yc3NpKTsKK2ludCB3ZnhfdXBkYXRlX3Bt KHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKKworLyogT3RoZXIgSGVscGVycyAqLwordm9pZCB3Znhf cmVzZXQoc3RydWN0IHdmeF92aWYgKnd2aWYpOwordTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3Ry dWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcyk7CisKKyNlbmRpZgotLSAKMi4zNC4xCgo=