From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 24EE5C43217 for ; Tue, 5 Oct 2021 13:57:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0B3E261502 for ; Tue, 5 Oct 2021 13:57:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236355AbhJEN7N (ORCPT ); Tue, 5 Oct 2021 09:59:13 -0400 Received: from mail-co1nam11on2059.outbound.protection.outlook.com ([40.107.220.59]:61872 "EHLO NAM11-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235483AbhJEN5w (ORCPT ); Tue, 5 Oct 2021 09:57:52 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gT7NzWA5/QxA7aX3oy5LfubBV24sgqpbPusMFqbWUaqU86y7IatzzklmAV4T8iouCMcJGb+NLQmi1klewF5x4jiHkVuW3dECzJzSh//tFQHjgu2GN6trveX0SjNe4yWkX5r7y/XQqVZza1olvO6GufmZ8azU8YHdGfu7ms5DgVKlPXkbhhTJSM1woknGKjkpZ/1VkWAnjxEHj7lB7cDVV9/9fuZGrJd3k+8yfx6R/j9oS+OUpjmU240HWGiH+c0nYZMgYWOJ2JUwXFDeO4UQAgqHpCMG3TI+d6P7DrzufU/L9eYl3xwVigMgcBWUzU94SfUA4geJ+Vl5n1GLV9O29A== 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=EKSq/wki1MXTjOfTfFC/p4hQdO4/bxBhpB0ClQSq7Hw=; b=dHLbGyco3enI/RTqRbS0KMrupoUZ3v6d8M7cRrdWVkyJ2Jr0lTeKFT4TYqSueljiqFwt1gAuHXgqxvdlKXtbq56RBY1f6rgbDeU2QnULeNfpIAozgjkZ7LKILb5994hHbW331jgH6mj1R6nqqAdloFrHHlFDWnIcZ818bBY+3pQAd2JxVtgX2ehiSMqdJ/hhSBht49BT7OHoTIvX84oL/b4ZixiyMcihbn3MSs/bu0hgCheZJU5j8vTkI2eJKpzPiS+tDXR6WyKqr+UHvNIZv62XGKyGhE90xOkox+cuJMBlGAYTb/UUtMxKSHxEiznPqhC7L9jMuJbO+rSg59C+Xw== 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=EKSq/wki1MXTjOfTfFC/p4hQdO4/bxBhpB0ClQSq7Hw=; b=Zs9u53FCadWs+ckB4C8yej8bYCTw2j4LPrLsJJWoZRUb+zfexkrpVtCZ6KaSmFIeYBXvRoO9jc6FNOtwOZxunQtUpyCFfuU2kgkT3BguShN8+uvux3lhfHSlbp/BXwzq52jtGdF5A4GNA0zNfkBfr/neIjU5IlNCv0IyGycHGU0= 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 PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) by PH0PR11MB5642.namprd11.prod.outlook.com (2603:10b6:510:e5::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14; Tue, 5 Oct 2021 13:55:16 +0000 Received: from PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::31cb:3b13:b0e8:d8f4]) by PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::31cb:3b13:b0e8:d8f4%9]) with mapi id 15.20.4566.022; Tue, 5 Oct 2021 13:55:16 +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 v8 19/24] wfx: add sta.c/sta.h Date: Tue, 5 Oct 2021 15:53:55 +0200 Message-Id: <20211005135400.788058-20-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211005135400.788058-1-Jerome.Pouiller@silabs.com> References: <20211005135400.788058-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-ClientProxiedBy: PR3P189CA0084.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::29) To PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) MIME-Version: 1.0 Received: from pc-42.silabs.com (37.71.187.125) by PR3P189CA0084.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14 via Frontend Transport; Tue, 5 Oct 2021 13:55:13 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ed6e2f31-e1d0-49cc-a8a4-08d98807c2a8 X-MS-TrafficTypeDiagnostic: PH0PR11MB5642: X-MS-Exchange-Transport-Forked: True 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: BWqCMqAcxFAVWO11aJ7C+Kv7ghfTcrJYmtdgjI1tp4olGcZgQxwi6aYf94oBiOGvbLgiFhc/lRcc/mTTEmNRW/goS3gazWAqCxmZY50DiLs+6SS14kEbBidOQ6iT6b1AehwFJK++Rsg718XmaJeP0GiPuwqlUk+9xpY+V4dt5RG8Mo/6hyey8CW9g/OQptOxNlUY72hV17S6zeWyCkc12liijLx+QhZPc0o4FSQJ6asj8KZvjJliCtgCKyQ+EPpOyUlC0uvcf/dPur/HV6UDoI2cQdgph7NTjxAzIc823IT0Qe6YEQjP2+ny3jkqulPHC4SK3qnyvmH6k9BZEjsusDEXyIQFqay2Aj1fgD7cZ+zw/t0tSNXpnqDQkwKZ83tq+8KdUBQ5JQzExtSqGGMITDVBkwFh0ZTQiVj0YoICroPa2KtPZ+LcSk+8Bem38mj7QJPx3o95slK+6diduPpFeclyWycXgV1jkJSggpf2ajEXp6DqRdEKa+43wZKxnsgjASHs32o7cdmdtlDwEuzAJjEchz9o1+lzCSIAEuMxqhusTxzK63jnApnFU5iQKwOPVzjBRNJxvYpZUd6zcj3O6oQwGNtXFCGvH9iu46MhYzrPVTZFGB4QbWo9YfTkU7/7DCwFTtUkyTwEf48kvXW3r5GOqSYA2p6YXS1pZy0TYLhMwRePpb1NJZWZYwoaUYef6Pj8i1CaWcCyhABlpliRKg== 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)(86362001)(5660300002)(26005)(30864003)(52116002)(7696005)(956004)(8676002)(2616005)(38100700002)(8936002)(38350700002)(4326008)(6666004)(186003)(7416002)(6916009)(66574015)(107886003)(83380400001)(36756003)(66476007)(66556008)(508600001)(2906002)(316002)(6486002)(1076003)(66946007)(54906003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WTQ0Zm1PN3hLWVNMbldRR3hOdGx2YlJiM3hoQWhBK1VyaTdGWnpvYm95UTZ4?= =?utf-8?B?SmtrM082UDhtYU4yY1Q1eWtwaTlSRG5xNVVzdTFYVE93U29LajN6NEppN2ht?= =?utf-8?B?NmtmbUlWaml2cXVESUttS0hodTJTRE05WVBRb3VUbWt6QVU4SFNjZzZuNmdY?= =?utf-8?B?cTNzZEZNUWp3ellVMTFKeDB0by94KzBnR0Fjb2pGbkF2NEhLa01iMUVYZ096?= =?utf-8?B?WExFaDk5OU5NcWJiQnhCVlE0b2NKd01VTFNOQm4vMVJ5NS90eC9tbW83d3Ja?= =?utf-8?B?aGFzTmNES2pPaGJydjR5b0RlR29qZVRMSjRJdUtWWXdsRlY5cHBibkhVYkpk?= =?utf-8?B?ZFV6L2NudjFZS2c2eGtLL1F1SE9kVG9kalg0SFFhejNIcWk1ZFduQnM3bEJC?= =?utf-8?B?ZE1nRW5qdTh4WU5Ya3U2WDlQRmFFK1hLYUdSWThnRE96Sk1Jayt3V0NxaDVT?= =?utf-8?B?RGdMMDNHcmVEVmsxZlRDV2M5Q3FqVlpGYkRWaGZXeDRFOUFJQ21MaWgvUjZU?= =?utf-8?B?QWEwbzlUUGNOSGMvSEdtUFRINWlIb3VLclAyTVZZOU1DNkxEVW1DQ24wQjNO?= =?utf-8?B?YXBKaEQ2czM4eFZJWVJXcWlVQWJmaGhKcndTRDNKRGc5d1FxTGc5K2xua2Fw?= =?utf-8?B?ZVpkc1hOSDdYK3g4Yzh4NW9LTXlxL3d2Rmt5bEtSakpSbk03TFJQOXNPMmcz?= =?utf-8?B?U1ZWa3FNM21SY0UyZjBmVzg3cDRzQ3FDeGo0NDg2M1NRYkZodnluaEJMdGZZ?= =?utf-8?B?U3EzcWtqazk2ck1OUzdjMU1qd0NSd0dZVkwvWWFTeGM3TUZVb0NjQVRSL1JC?= =?utf-8?B?b09WS2x3TDVnRzNiM1l6WHRpOWpaYWtUNGtqVUhxZ3NUaHkrLzVjcjlOeEFx?= =?utf-8?B?dnpFNUxjL016T0RqV1NKdG44a2ZrT3Bya0c4ZjdOZTVUb3IvNjk0VUFnaC9h?= =?utf-8?B?RnZPYzRqVG9XQ1hVMUlSYThVaWJXcitUNm1XRCtjMHlwRTM5YkdDR2hPN1Rn?= =?utf-8?B?U2EzMG1ySEVoaWZMcks1QjYwQ2o0YjRUcU81UE42SDV3WEdBallKQ25EbFpY?= =?utf-8?B?Z2crTGVjdy8wWUJyZjFFNFUzblZmbkFVenB0c2V6Q21Ebkk4YXFkbUhNSy9r?= =?utf-8?B?Vnc0MkdzQmR2M0ptUnZJM0xvTitCM2syOVRRVTFST004K0hyVkN4QnNacFNq?= =?utf-8?B?cjc1RlBPOTFRN3NQdG5pZjQ3NDNtSWxvblpXSDlJcml5QmFuVmZXcnpsNGRL?= =?utf-8?B?cjdpNngwRkxYRTRUY1JLM0RUalNEd1lIZTlBa1A2VEcwdGhjaXFJVkpUQldx?= =?utf-8?B?S0xLb085cUhoYm5FaTVGa2FhVmlueEdhWGsrMkl0SERUWW43V21qZlUwQXFO?= =?utf-8?B?bjE5SE9qUlM3VHVYM1lha2dsSGpSTkp0SEdpOEI1Y21Wd09sNk1OK0JtZHI0?= =?utf-8?B?UGdiK1o3MG8yN1E1TWdiU0NNTnJFeGs3WW5adWZIdk9MYnR4QzBkS29ieklE?= =?utf-8?B?K0UwUVVzSXJMN09lOHNKTXJ3eVdZaFBHZno2RHlyTGtxU2FORVdMZThCR0pv?= =?utf-8?B?RFRnNmFVWEVuZDJpSklxbHNaZnZpSmtNTDQ3alZnb0tFaGp0anpEUWxTMWRG?= =?utf-8?B?K0NxMFFRdFZnRG9McGswa0w2dVI0VmdhMWtTL2ZrcVBINzYxaExxcGd1ak5J?= =?utf-8?B?NWQzZkgwc29POWkySFd0bytSdjdtZk5BVWQ5MURvcnc2UzVJUHo4aDFSZlh0?= =?utf-8?Q?/Kf94Vy4IEvSN1pPTemGtofqiLy0c1n6iaTOPB9?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed6e2f31-e1d0-49cc-a8a4-08d98807c2a8 X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5657.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Oct 2021 13:55:16.4455 (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: JJGY7Cn8pJp0LQFfsQ9Cr0f/g3cgxHE19nZvPFPHcRH634kz/i3DvcYjkmzc8SYNjv6IPTIJ+xfM6NT8thh6uA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5642 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMgfCA4MzEgKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3Rh LmggfCAgNzMgKysrCiAyIGZpbGVzIGNoYW5nZWQsIDkwNCBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgKCmRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jIGIvZHJpdmVycy9u ZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmI3YmJkYTA0NTQzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMKQEAgLTAsMCArMSw4MzEgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBt YWM4MDIxMSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8K KyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5o PgorCisjaW5jbHVkZSAic3RhLmgiCisjaW5jbHVkZSAid2Z4LmgiCisjaW5jbHVkZSAiZndpby5o IgorI2luY2x1ZGUgImJoLmgiCisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAic2Nhbi5oIgor I2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaGlmX3R4LmgiCisjaW5jbHVkZSAiaGlmX3R4 X21pYi5oIgorCisjZGVmaW5lIEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTIDIKKwor dTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcykK K3sKKwlpbnQgaTsKKwl1MzIgcmV0ID0gMDsKKwkvKiBUaGUgZGV2aWNlIG9ubHkgc3VwcG9ydHMg MkdIeiAqLworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0KKwkJd2Rl di0+aHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl07CisKKwlmb3IgKGkgPSAwOyBp IDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlpZiAocmF0ZXMgJiBCSVQoaSkpIHsKKwkJ CWlmIChpID49IHNiYW5kLT5uX2JpdHJhdGVzKQorCQkJCWRldl93YXJuKHdkZXYtPmRldiwgInVu c3VwcG9ydGVkIGJhc2ljIHJhdGVcbiIpOworCQkJZWxzZQorCQkJCXJldCB8PSBCSVQoc2JhbmQt PmJpdHJhdGVzW2ldLmh3X3ZhbHVlKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lk IHdmeF9jb29saW5nX3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJ c3RydWN0IHdmeF9kZXYgKndkZXYgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmsp LAorCQkJCQkgICAgc3RydWN0IHdmeF9kZXYsCisJCQkJCSAgICBjb29saW5nX3RpbWVvdXRfd29y ayk7CisKKwl3ZGV2LT5jaGlwX2Zyb3plbiA9IHRydWU7CisJd2Z4X3R4X3VubG9jayh3ZGV2KTsK K30KKwordm9pZCB3Znhfc3VzcGVuZF9ob3RfZGV2KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVt IHN0YV9ub3RpZnlfY21kIGNtZCkKK3sKKwlpZiAoY21kID09IFNUQV9OT1RJRllfQVdBS0UpIHsK KwkJLyogRGV2aWNlIHJlY292ZXIgbm9ybWFsIHRlbXBlcmF0dXJlICovCisJCWlmIChjYW5jZWxf ZGVsYXllZF93b3JrKCZ3ZGV2LT5jb29saW5nX3RpbWVvdXRfd29yaykpCisJCQl3ZnhfdHhfdW5s b2NrKHdkZXYpOworCX0gZWxzZSB7CisJCS8qIERldmljZSBpcyB0b28gaG90ICovCisJCXNjaGVk dWxlX2RlbGF5ZWRfd29yaygmd2Rldi0+Y29vbGluZ190aW1lb3V0X3dvcmssIDEwICogSFopOwor CQl3ZnhfdHhfbG9jayh3ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9maWx0ZXJfYmVh Y29uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGZpbHRlcl9iZWFjb24pCit7CisJc3RhdGlj IGNvbnN0IHN0cnVjdCB3ZnhfaGlmX2llX3RhYmxlX2VudHJ5IGZpbHRlcl9pZXNbXSA9IHsKKwkJ eworCQkJLmllX2lkICAgICAgICA9IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQywKKwkJCS5oYXNf Y2hhbmdlZCAgPSAxLAorCQkJLm5vX2xvbmdlciAgICA9IDEsCisJCQkuaGFzX2FwcGVhcmVkID0g MSwKKwkJCS5vdWkgICAgICAgICAgPSB7IDB4NTAsIDB4NkYsIDB4OUEgfSwKKwkJfSwgeworCQkJ LmllX2lkICAgICAgICA9IFdMQU5fRUlEX0hUX09QRVJBVElPTiwKKwkJCS5oYXNfY2hhbmdlZCAg PSAxLAorCQkJLm5vX2xvbmdlciAgICA9IDEsCisJCQkuaGFzX2FwcGVhcmVkID0gMSwKKwkJfSwg eworCQkJLmllX2lkICAgICAgICA9IFdMQU5fRUlEX0VSUF9JTkZPLAorCQkJLmhhc19jaGFuZ2Vk ICA9IDEsCisJCQkubm9fbG9uZ2VyICAgID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQl9 LCB7CisJCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfQ0hBTk5FTF9TV0lUQ0gsCisJCQkuaGFz X2NoYW5nZWQgID0gMSwKKwkJCS5ub19sb25nZXIgICAgPSAxLAorCQkJLmhhc19hcHBlYXJlZCA9 IDEsCisJCX0KKwl9OworCisJaWYgKCFmaWx0ZXJfYmVhY29uKSB7CisJCXdmeF9oaWZfYmVhY29u X2ZpbHRlcl9jb250cm9sKHd2aWYsIDAsIDEpOworCX0gZWxzZSB7CisJCXdmeF9oaWZfc2V0X2Jl YWNvbl9maWx0ZXJfdGFibGUod3ZpZiwgQVJSQVlfU0laRShmaWx0ZXJfaWVzKSwKKwkJCQkJCWZp bHRlcl9pZXMpOworCQl3ZnhfaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbCh3dmlmLAorCQkJCQkg ICAgICBISUZfQkVBQ09OX0ZJTFRFUl9FTkFCTEUsIDApOworCX0KK30KKwordm9pZCB3ZnhfY29u ZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdW5zaWduZWQgaW50IGNoYW5n ZWRfZmxhZ3MsCisJCQkgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsIHU2NCB1bnVzZWQpCit7 CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBOVUxMOworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0g aHctPnByaXY7CisJYm9vbCBmaWx0ZXJfYnNzaWQsIGZpbHRlcl9wcmJyZXEsIGZpbHRlcl9iZWFj b247CisKKwkvKiBOb3RlczoKKwkgKiAgIC0gUHJvYmUgcmVzcG9uc2VzIChGSUZfQkNOX1BSQlJF U1BfUFJPTUlTQykgYXJlIG5ldmVyIGZpbHRlcmVkCisJICogICAtIFBTLVBvbGwgKEZJRl9QU1BP TEwpIGFyZSBuZXZlciBmaWx0ZXJlZAorCSAqICAgLSBSVFMsIENUUyBhbmQgQWNrIChGSUZfQ09O VFJPTCkgYXJlIGFsd2F5cyBmaWx0ZXJlZAorCSAqICAgLSBCcm9rZW4gZnJhbWVzIChGSUZfRkNT RkFJTCBhbmQgRklGX1BMQ1BGQUlMKSBhcmUgYWx3YXlzIGZpbHRlcmVkCisJICogICAtIEZpcm13 YXJlIGRvZXMgKHlldCkgYWxsb3cgdG8gZm9yd2FyZCB1bmljYXN0IHRyYWZmaWMgc2VudCB0bwor CSAqICAgICBvdGhlciBzdGF0aW9ucyAoYWthLiBwcm9taXNjdW91cyBtb2RlKQorCSAqLworCSp0 b3RhbF9mbGFncyAmPSBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyB8IEZJRl9BTExNVUxUSSB8IEZJ Rl9PVEhFUl9CU1MgfAorCQkJRklGX1BST0JFX1JFUSB8IEZJRl9QU1BPTEw7CisKKwltdXRleF9s b2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rl diwgd3ZpZikpICE9IE5VTEwpIHsKKwkJbXV0ZXhfbG9jaygmd3ZpZi0+c2Nhbl9sb2NrKTsKKwor CQkvKiBOb3RlOiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyBjb3ZlcnMgcHJvYmUgcmVzcG9uc2Ug YW5kCisJCSAqIGJlYWNvbnMgZnJvbSBvdGhlciBCU1MKKwkJICovCisJCWlmICgqdG90YWxfZmxh Z3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCWZpbHRlcl9iZWFjb24gPSBmYWxzZTsK KwkJZWxzZQorCQkJZmlsdGVyX2JlYWNvbiA9IHRydWU7CisJCXdmeF9maWx0ZXJfYmVhY29uKHd2 aWYsIGZpbHRlcl9iZWFjb24pOworCisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfT1RIRVJfQlNT KQorCQkJZmlsdGVyX2Jzc2lkID0gZmFsc2U7CisJCWVsc2UKKwkJCWZpbHRlcl9ic3NpZCA9IHRy dWU7CisKKwkJLyogSW4gQVAgbW9kZSwgY2hpcCBjYW4gcmVwbHkgdG8gcHJvYmUgcmVxdWVzdCBp dHNlbGYgKi8KKwkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9CRV9SRVEgJiYKKwkJICAgIHd2 aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQkJZGV2X2RiZyh3ZGV2LT5k ZXYsICJkbyBub3QgZm9yd2FyZCBwcm9iZSByZXF1ZXN0IGluIEFQIG1vZGVcbiIpOworCQkJKnRv dGFsX2ZsYWdzICY9IH5GSUZfUFJPQkVfUkVROworCQl9CisKKwkJaWYgKCp0b3RhbF9mbGFncyAm IEZJRl9QUk9CRV9SRVEpCisJCQlmaWx0ZXJfcHJicmVxID0gZmFsc2U7CisJCWVsc2UKKwkJCWZp bHRlcl9wcmJyZXEgPSB0cnVlOworCQl3ZnhfaGlmX3NldF9yeF9maWx0ZXIod3ZpZiwgZmlsdGVy X2Jzc2lkLCBmaWx0ZXJfcHJicmVxKTsKKworCQltdXRleF91bmxvY2soJnd2aWYtPnNjYW5fbG9j ayk7CisJfQorCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Cit9CisKK3N0YXRpYyBp bnQgd2Z4X2dldF9wc190aW1lb3V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sICplbmFibGVf cHMpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuMCA9IE5VTEwsICpjaGFuMSA9 IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJnd2aWYtPndkZXYtPmh3LT5j b25mOworCisJV0FSTighd3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYyAmJiBlbmFibGVfcHMsCisJ ICAgICAiZW5hYmxlX3BzIGlzIHJlbGlhYmxlIG9ubHkgaWYgYXNzb2NpYXRlZCIpOworCWlmICh3 ZGV2X3RvX3d2aWYod3ZpZi0+d2RldiwgMCkpCisJCWNoYW4wID0gd2Rldl90b193dmlmKHd2aWYt PndkZXYsIDApLT52aWYtPmJzc19jb25mLmNoYW5kZWYuY2hhbjsKKwlpZiAod2Rldl90b193dmlm KHd2aWYtPndkZXYsIDEpKQorCQljaGFuMSA9IHdkZXZfdG9fd3ZpZih3dmlmLT53ZGV2LCAxKS0+ dmlmLT5ic3NfY29uZi5jaGFuZGVmLmNoYW47CisJaWYgKGNoYW4wICYmIGNoYW4xICYmIHd2aWYt PnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlpZiAoY2hhbjAtPmh3X3ZhbHVl ID09IGNoYW4xLT5od192YWx1ZSkgeworCQkJLyogSXQgaXMgdXNlbGVzcyB0byBlbmFibGUgUFMg aWYgY2hhbm5lbHMgYXJlIHRoZSBzYW1lLiAqLworCQkJaWYgKGVuYWJsZV9wcykKKwkJCQkqZW5h YmxlX3BzID0gZmFsc2U7CisJCQlpZiAod3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYyAmJiB3dmlm LT52aWYtPmJzc19jb25mLnBzKQorCQkJCWRldl9pbmZvKHd2aWYtPndkZXYtPmRldiwgImlnbm9y aW5nIHJlcXVlc3RlZCBQUyBtb2RlIik7CisJCQlyZXR1cm4gLTE7CisJCX0gZWxzZSB7CisJCQkv KiBJdCBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIFBTIGlmIGNoYW5uZWxzCisJCQkgKiBhcmUgZGlm ZmVyZW50LgorCQkJICovCisJCQlpZiAoZW5hYmxlX3BzKQorCQkJCSplbmFibGVfcHMgPSB0cnVl OworCQkJaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2LCAzLCAyKSkKKwkJCQlyZXR1 cm4gMDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gMzA7CisJCX0KKwl9CisJaWYgKGVuYWJsZV9wcykK KwkJKmVuYWJsZV9wcyA9IHd2aWYtPnZpZi0+YnNzX2NvbmYucHM7CisJaWYgKHd2aWYtPnZpZi0+ YnNzX2NvbmYuYXNzb2MgJiYgd3ZpZi0+dmlmLT5ic3NfY29uZi5wcykKKwkJcmV0dXJuIGNvbmYt PmR5bmFtaWNfcHNfdGltZW91dDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworaW50IHdmeF91 cGRhdGVfcG0oc3RydWN0IHdmeF92aWYgKnd2aWYpCit7CisJaW50IHBzX3RpbWVvdXQ7CisJYm9v bCBwczsKKworCWlmICghd3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYykKKwkJcmV0dXJuIDA7CisJ cHNfdGltZW91dCA9IHdmeF9nZXRfcHNfdGltZW91dCh3dmlmLCAmcHMpOworCWlmICghcHMpCisJ CXBzX3RpbWVvdXQgPSAwOworCVdBUk5fT04ocHNfdGltZW91dCA8IDApOworCWlmICh3dmlmLT51 YXBzZF9tYXNrKQorCQlwc190aW1lb3V0ID0gMDsKKworCWlmICghd2FpdF9mb3JfY29tcGxldGlv bl90aW1lb3V0KCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSwKKwkJCQkJIFRVX1RPX0pJRkZJ RVMoNTEyKSkpCisJCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwKKwkJCSAidGltZW91dCB3aGls ZSB3YWl0aW5nIG9mIHNldF9wbV9tb2RlX2NvbXBsZXRlXG4iKTsKKwlyZXR1cm4gd2Z4X2hpZl9z ZXRfcG0od3ZpZiwgcHMsIHBzX3RpbWVvdXQpOworfQorCitpbnQgd2Z4X2NvbmZfdHgoc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCXUxNiBxdWV1 ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKK3sKKwlz dHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0g KHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlpbnQgb2xkX3VhcHNkID0gd3ZpZi0+ dWFwc2RfbWFzazsKKworCVdBUk5fT04ocXVldWUgPj0gaHctPnF1ZXVlcyk7CisKKwltdXRleF9s b2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKwlhc3NpZ25fYml0KHF1ZXVlLCAmd3ZpZi0+dWFwc2Rf bWFzaywgcGFyYW1zLT51YXBzZCk7CisJd2Z4X2hpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMod3Zp ZiwgcXVldWUsIHBhcmFtcyk7CisJaWYgKHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQ RV9TVEFUSU9OICYmCisJICAgIG9sZF91YXBzZCAhPSB3dmlmLT51YXBzZF9tYXNrKSB7CisJCXdm eF9oaWZfc2V0X3VhcHNkX2luZm8od3ZpZiwgd3ZpZi0+dWFwc2RfbWFzayk7CisJCXdmeF91cGRh dGVfcG0od3ZpZik7CisJfQorCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7CisJcmV0 dXJuIDA7Cit9CisKK2ludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Owor CXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gTlVMTDsKKworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRl cmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKKwkJd2Z4X2hpZl9ydHNfdGhyZXNob2xkKHd2aWYs IHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3ZnhfZXZlbnRfcmVwb3J0X3Jzc2koc3Ry dWN0IHdmeF92aWYgKnd2aWYsIHU4IHJhd19yY3BpX3Jzc2kpCit7CisJLyogUlNTSTogc2lnbmVk IFE4LjAsIFJDUEk6IHVuc2lnbmVkIFE3LjEKKwkgKiBSU1NJID0gUkNQSSAvIDIgLSAxMTAKKwkg Ki8KKwlpbnQgcmNwaV9yc3NpOworCWludCBjcW1fZXZ0OworCisJcmNwaV9yc3NpID0gcmF3X3Jj cGlfcnNzaSAvIDIgLSAxMTA7CisJaWYgKHJjcGlfcnNzaSA8PSB3dmlmLT52aWYtPmJzc19jb25m LmNxbV9yc3NpX3Rob2xkKQorCQljcW1fZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERf RVZFTlRfTE9XOworCWVsc2UKKwkJY3FtX2V2dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xE X0VWRU5UX0hJR0g7CisJaWVlZTgwMjExX2NxbV9yc3NpX25vdGlmeSh3dmlmLT52aWYsIGNxbV9l dnQsIHJjcGlfcnNzaSwgR0ZQX0tFUk5FTCk7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9iZWFjb25f bG9zc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCisJCQkJCSAgICBzdHJ1 Y3Qgd2Z4X3ZpZiwgYmVhY29uX2xvc3Nfd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29u ZiAqYnNzX2NvbmYgPSAmd3ZpZi0+dmlmLT5ic3NfY29uZjsKKworCWllZWU4MDIxMV9iZWFjb25f bG9zcyh3dmlmLT52aWYpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yayh0b19kZWxheWVkX3dvcmso d29yayksCisJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKGJzc19jb25mLT5iZWFjb25faW50KSk7 Cit9CisKK3ZvaWQgd2Z4X3NldF9kZWZhdWx0X3VuaWNhc3Rfa2V5KHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBpbnQgaWR4KQoreworCXN0 cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwor CXdmeF9oaWZfd2VwX2RlZmF1bHRfa2V5X2lkKHd2aWYsIGlkeCk7Cit9CisKK3ZvaWQgd2Z4X3Jl c2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3Zp Zi0+d2RldjsKKworCXdmeF90eF9sb2NrX2ZsdXNoKHdkZXYpOworCXdmeF9oaWZfcmVzZXQod3Zp ZiwgZmFsc2UpOworCXdmeF90eF9wb2xpY3lfaW5pdCh3dmlmKTsKKwlpZiAod3ZpZl9jb3VudCh3 ZGV2KSA8PSAxKQorCQl3ZnhfaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4 RkYpOworCXdmeF90eF91bmxvY2sod2Rldik7CisJd3ZpZi0+am9pbl9pbl9wcm9ncmVzcyA9IGZh bHNlOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmd3ZpZi0+YmVhY29uX2xvc3Nfd29yayk7 CisJd3ZpZiA9ICBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlm KSkgIT0gTlVMTCkKKwkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKK30KKworaW50IHdmeF9zdGFfYWRk KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQlz dHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0 cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFf cHJpdiA9IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3ByaXY7CisKKwlzdGFfcHJp di0+dmlmX2lkID0gd3ZpZi0+aWQ7CisKKwlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBF X1NUQVRJT04pCisJCXdmeF9oaWZfc2V0X21mcCh3dmlmLCBzdGEtPm1mcCwgc3RhLT5tZnApOwor CisJLyogSW4gc3RhdGlvbiBtb2RlLCB0aGUgZmlybXdhcmUgaW50ZXJwcmV0cyBuZXcgbGluay1p ZCBhcyBhIFRETFMgcGVlciAqLworCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RB VElPTiAmJiAhc3RhLT50ZGxzKQorCQlyZXR1cm4gMDsKKwlzdGFfcHJpdi0+bGlua19pZCA9IGZm eih3dmlmLT5saW5rX2lkX21hcCk7CisJd3ZpZi0+bGlua19pZF9tYXAgfD0gQklUKHN0YV9wcml2 LT5saW5rX2lkKTsKKwlXQVJOX09OKCFzdGFfcHJpdi0+bGlua19pZCk7CisJV0FSTl9PTihzdGFf cHJpdi0+bGlua19pZCA+PSBISUZfTElOS19JRF9NQVgpOworCXdmeF9oaWZfbWFwX2xpbmsod3Zp ZiwgZmFsc2UsIHN0YS0+YWRkciwgc3RhX3ByaXYtPmxpbmtfaWQsIHN0YS0+bWZwKTsKKworCXJl dHVybiAwOworfQorCitpbnQgd2Z4X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpz dGEpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRy dl9wcml2OworCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCB3Znhfc3Rh X3ByaXYgKikmc3RhLT5kcnZfcHJpdjsKKworCS8qIFNlZSBub3RlIGluIHdmeF9zdGFfYWRkKCkg Ki8KKwlpZiAoIXN0YV9wcml2LT5saW5rX2lkKQorCQlyZXR1cm4gMDsKKwkvKiBGSVhNRSBhZGQg YSBtdXRleD8gKi8KKwl3ZnhfaGlmX21hcF9saW5rKHd2aWYsIHRydWUsIHN0YS0+YWRkciwgc3Rh X3ByaXYtPmxpbmtfaWQsIGZhbHNlKTsKKwl3dmlmLT5saW5rX2lkX21hcCAmPSB+QklUKHN0YV9w cml2LT5saW5rX2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3ZnhfdXBsb2FkX2Fw X3RlbXBsYXRlcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2ti OworCisJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZp Zik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCXdmeF9oaWZfc2V0X3RlbXBsYXRl X2ZyYW1lKHd2aWYsIHNrYiwgSElGX1RNUExUX0JDTiwKKwkJCQkgICBBUElfUkFURV9JTkRFWF9C XzFNQlBTKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlza2IgPSBpZWVlODAyMTFfcHJvYmVy ZXNwX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJu IC1FTk9NRU07CisJd2Z4X2hpZl9zZXRfdGVtcGxhdGVfZnJhbWUod3ZpZiwgc2tiLCBISUZfVE1Q TFRfUFJCUkVTLAorCQkJCSAgIEFQSV9SQVRFX0lOREVYX0JfMU1CUFMpOworCWRldl9rZnJlZV9z a2Ioc2tiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2Z4X3NldF9tZnBfYXAoc3Ry dWN0IHdmeF92aWYgKnd2aWYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9i ZWFjb25fZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlmLT52aWYpOworCWNvbnN0IGludCBpZW9mZnNl dCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpOwor CWNvbnN0IHUxNiAqcHRyID0gKHUxNiAqKWNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfUlNOLAor CQkJCQkJIHNrYi0+ZGF0YSArIGllb2Zmc2V0LAorCQkJCQkJIHNrYi0+bGVuIC0gaWVvZmZzZXQp OworCWNvbnN0IGludCBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfY291bnRfb2Zmc2V0ID0gOCAvIHNp emVvZih1MTYpOworCWNvbnN0IGludCBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfc2l6ZSA9IDQgLyBz aXplb2YodTE2KTsKKwljb25zdCBpbnQgYWttX3N1aXRlX3NpemUgPSA0IC8gc2l6ZW9mKHUxNik7 CisKKwlpZiAocHRyKSB7CisJCXB0ciArPSBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfY291bnRfb2Zm c2V0OworCQlpZiAoV0FSTl9PTihwdHIgPiAodTE2ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKSkK KwkJCXJldHVybjsKKwkJcHRyICs9IDEgKyBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfc2l6ZSAqICpw dHI7CisJCWlmIChXQVJOX09OKHB0ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVyKHNrYikpKQor CQkJcmV0dXJuOworCQlwdHIgKz0gMSArIGFrbV9zdWl0ZV9zaXplICogKnB0cjsKKwkJaWYgKFdB Uk5fT04ocHRyID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSkpCisJCQlyZXR1cm47CisJ CXdmeF9oaWZfc2V0X21mcCh3dmlmLCAqcHRyICYgQklUKDcpLCAqcHRyICYgQklUKDYpKTsKKwl9 Cit9CisKK2ludCB3Znhfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBp ZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdm eF92aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+d2Rl djsKKwlpbnQgcmV0OworCisJd3ZpZiA9ICBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRl cmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKKwkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKKwl3dmlm ID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwl3ZnhfdXBsb2FkX2FwX3RlbXBs YXRlcyh3dmlmKTsKKwlyZXQgPSB3ZnhfaGlmX3N0YXJ0KHd2aWYsICZ2aWYtPmJzc19jb25mLCB3 dmlmLT5jaGFubmVsKTsKKwlpZiAocmV0ID4gMCkKKwkJcmV0dXJuIC1FSU87CisJd2Z4X3NldF9t ZnBfYXAod3ZpZik7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3Znhfc3RvcF9hcChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisKKwl3Znhf cmVzZXQod3ZpZik7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9qb2luKHN0cnVjdCB3ZnhfdmlmICp3 dmlmKQoreworCWludCByZXQ7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9ICZ3 dmlmLT52aWYtPmJzc19jb25mOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7CisJ dTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwljb25zdCB1OCAqc3NpZGllID0gTlVM TDsKKwlpbnQgc3NpZGxlbiA9IDA7CisKKwl3ZnhfdHhfbG9ja19mbHVzaCh3dmlmLT53ZGV2KTsK KworCWJzcyA9IGNmZzgwMjExX2dldF9ic3Mod3ZpZi0+d2Rldi0+aHctPndpcGh5LCB3dmlmLT5j aGFubmVsLAorCQkJICAgICAgIGNvbmYtPmJzc2lkLCBOVUxMLCAwLAorCQkJICAgICAgIElFRUU4 MDIxMV9CU1NfVFlQRV9BTlksIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7CisJaWYgKCFic3MgJiYg IWNvbmYtPmlic3Nfam9pbmVkKSB7CisJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7CisJCXJl dHVybjsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7IC8qIHByb3RlY3Qgc3NpZGllICovCisJaWYg KGJzcykKKwkJc3NpZGllID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9TU0lE KTsKKwlpZiAoc3NpZGllKSB7CisJCXNzaWRsZW4gPSBzc2lkaWVbMV07CisJCWlmIChzc2lkbGVu ID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKKwkJCXNzaWRsZW4gPSBJRUVFODAyMTFfTUFYX1NT SURfTEVOOworCQltZW1jcHkoc3NpZCwgJnNzaWRpZVsyXSwgc3NpZGxlbik7CisJfQorCXJjdV9y ZWFkX3VubG9jaygpOworCisJY2ZnODAyMTFfcHV0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHks IGJzcyk7CisKKwl3dmlmLT5qb2luX2luX3Byb2dyZXNzID0gdHJ1ZTsKKwlyZXQgPSB3ZnhfaGlm X2pvaW4od3ZpZiwgY29uZiwgd3ZpZi0+Y2hhbm5lbCwgc3NpZCwgc3NpZGxlbik7CisJaWYgKHJl dCkgeworCQlpZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzKHd2aWYtPnZpZik7CisJCXdmeF9yZXNl dCh3dmlmKTsKKwl9IGVsc2UgeworCQkvKiBEdWUgdG8gYmVhY29uIGZpbHRlcmluZyBpdCBpcyBw b3NzaWJsZSB0aGF0IHRoZQorCQkgKiBBUCdzIGJlYWNvbiBpcyBub3Qga25vd24gZm9yIHRoZSBt YWM4MDIxMSBzdGFjay4KKwkJICogRGlzYWJsZSBmaWx0ZXJpbmcgdGVtcG9yYXJ5IHRvIG1ha2Ug c3VyZSB0aGUgc3RhY2sKKwkJICogcmVjZWl2ZXMgYXQgbGVhc3Qgb25lCisJCSAqLworCQl3Znhf ZmlsdGVyX2JlYWNvbih3dmlmLCBmYWxzZSk7CisJfQorCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rl dik7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9qb2luX2ZpbmFsaXplKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbykKK3sKKwlzdHJ1 Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gTlVMTDsKKwlpbnQgYW1wZHVfZGVuc2l0eSA9IDA7CisJ Ym9vbCBncmVlbmZpZWxkID0gZmFsc2U7CisKKwlyY3VfcmVhZF9sb2NrKCk7IC8qIHByb3RlY3Qg c3RhICovCisJaWYgKGluZm8tPmJzc2lkICYmICFpbmZvLT5pYnNzX2pvaW5lZCkKKwkJc3RhID0g aWVlZTgwMjExX2ZpbmRfc3RhKHd2aWYtPnZpZiwgaW5mby0+YnNzaWQpOworCWlmIChzdGEgJiYg c3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCQlhbXBkdV9kZW5zaXR5ID0gc3RhLT5odF9jYXAu YW1wZHVfZGVuc2l0eTsKKwlpZiAoc3RhICYmIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJgor CSAgICAhKGluZm8tPmh0X29wZXJhdGlvbl9tb2RlICYgSUVFRTgwMjExX0hUX09QX01PREVfTk9O X0dGX1NUQV9QUlNOVCkpCisJCWdyZWVuZmllbGQgPSAhIShzdGEtPmh0X2NhcC5jYXAgJiBJRUVF ODAyMTFfSFRfQ0FQX0dSTl9GTEQpOworCXJjdV9yZWFkX3VubG9jaygpOworCisJd3ZpZi0+am9p bl9pbl9wcm9ncmVzcyA9IGZhbHNlOworCXdmeF9oaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUod3Zp ZiwgYW1wZHVfZGVuc2l0eSwgZ3JlZW5maWVsZCwKKwkJCQkgICAgIGluZm8tPnVzZV9zaG9ydF9w cmVhbWJsZSk7CisJd2Z4X2hpZl9rZWVwX2FsaXZlX3BlcmlvZCh3dmlmLCAwKTsKKwkvKiBiZWFj b25fbG9zc19jb3VudCBpcyBkZWZpbmVkIHRvIDcgaW4gbmV0L21hYzgwMjExL21sbWUuYy4gTGV0 J3MgdXNlCisJICogdGhlIHNhbWUgdmFsdWUuCisJICovCisJd2Z4X2hpZl9zZXRfYnNzX3BhcmFt cyh3dmlmLCBpbmZvLT5haWQsIDcpOworCXdmeF9oaWZfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9k KHd2aWYsIDEsIDEpOworCXdmeF91cGRhdGVfcG0od3ZpZik7Cit9CisKK2ludCB3Znhfam9pbl9p YnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQor eworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJp djsKKworCXdmeF91cGxvYWRfYXBfdGVtcGxhdGVzKHd2aWYpOworCXdmeF9qb2luKHd2aWYpOwor CXJldHVybiAwOworfQorCit2b2lkIHdmeF9sZWF2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlm ID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXdmeF9yZXNldCh3dmlmKTsK K30KKworc3RhdGljIHZvaWQgd2Z4X2VuYWJsZV9iZWFjb24oc3RydWN0IHdmeF92aWYgKnd2aWYs IGJvb2wgZW5hYmxlKQoreworCS8qIERyaXZlciBoYXMgQ29udGVudCBBZnRlciBEVElNIEJlYWNv biBpbiBxdWV1ZS4gRHJpdmVyIGlzIHdhaXRpbmcgZm9yCisJICogYSBzaWduYWwgZnJvbSB0aGUg ZmlybXdhcmUuIFNpbmNlIHdlIGFyZSBnb2luZyB0byBzdG9wIHRvIHNlbmQKKwkgKiBiZWFjb25z LCB0aGlzIHNpZ25hbCB3aWxsIG5ldmVyIGhhcHBlbnMuIFNlZSBhbHNvCisJICogd2Z4X3N1c3Bl bmRfcmVzdW1lX21jKCkKKwkgKi8KKwlpZiAoIWVuYWJsZSAmJiB3ZnhfdHhfcXVldWVzX2hhc19j YWIod3ZpZikpIHsKKwkJd3ZpZi0+YWZ0ZXJfZHRpbV90eF9hbGxvd2VkID0gdHJ1ZTsKKwkJd2Z4 X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7CisJfQorCXdmeF9oaWZfYmVhY29uX3RyYW5zbWl0 KHd2aWYsIGVuYWJsZSk7Cit9CisKK3ZvaWQgd2Z4X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgIHN0cnVjdCBp ZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCB3ZnhfZGV2 ICp3ZGV2ID0gaHctPnByaXY7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92 aWYgKil2aWYtPmRydl9wcml2OworCWludCBpOworCisJbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9t dXRleCk7CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTIHx8CisJICAg IGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UIHx8CisJICAgIGNoYW5nZWQgJiBCU1Nf Q0hBTkdFRF9CU1NJRCkgeworCQlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJ T04pCisJCQl3Znhfam9pbih3dmlmKTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VE X0FTU09DKSB7CisJCWlmIChpbmZvLT5hc3NvYyB8fCBpbmZvLT5pYnNzX2pvaW5lZCkKKwkJCXdm eF9qb2luX2ZpbmFsaXplKHd2aWYsIGluZm8pOworCQllbHNlIGlmICghaW5mby0+YXNzb2MgJiYg dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQl3ZnhfcmVzZXQod3ZpZik7 CisJCWVsc2UKKwkJCWRldl93YXJuKHdkZXYtPmRldiwgIm1pc3VuZGVyc3Rvb2QgY2hhbmdlOiBB U1NPQ1xuIik7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5GTykg eworCQlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlkZXZfd2Fy bih3ZGV2LT5kZXYsICJtaXN1bmRlcnN0b29kIGNoYW5nZTogQkVBQ09OX0lORk9cbiIpOworCQl3 ZnhfaGlmX3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZCh3dmlmLCBpbmZvLT5kdGltX3BlcmlvZCwK KwkJCQkJCSBpbmZvLT5kdGltX3BlcmlvZCk7CisJCS8qIFdlIHRlbXBvcmFyeSBmb3J3YXJkZWQg YmVhY29uIGZvciBqb2luIHByb2Nlc3MuIEl0IGlzIG5vdyBubworCQkgKiBtb3JlIG5lY2Vzc2Fy eS4KKwkJICovCisJCXdmeF9maWx0ZXJfYmVhY29uKHd2aWYsIHRydWUpOworCX0KKworCWlmIChj aGFuZ2VkICYgQlNTX0NIQU5HRURfQVJQX0ZJTFRFUikgeworCQlmb3IgKGkgPSAwOyBpIDwgSElG X01BWF9BUlBfSVBfQUREUlRBQkxFX0VOVFJJRVM7IGkrKykgeworCQkJX19iZTMyICphcnBfYWRk ciA9ICZpbmZvLT5hcnBfYWRkcl9saXN0W2ldOworCisJCQlpZiAoaW5mby0+YXJwX2FkZHJfY250 ID4gSElGX01BWF9BUlBfSVBfQUREUlRBQkxFX0VOVFJJRVMpCisJCQkJYXJwX2FkZHIgPSBOVUxM OworCQkJaWYgKGkgPj0gaW5mby0+YXJwX2FkZHJfY250KQorCQkJCWFycF9hZGRyID0gTlVMTDsK KwkJCXdmeF9oaWZfc2V0X2FycF9pcHY0X2ZpbHRlcih3dmlmLCBpLCBhcnBfYWRkcik7CisJCX0K Kwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FQX1BST0JFX1JFU1AgfHwKKwkgICAg Y2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikKKwkJd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMo d3ZpZik7CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKQorCQl3 ZnhfZW5hYmxlX2JlYWNvbih3dmlmLCBpbmZvLT5lbmFibGVfYmVhY29uKTsKKworCWlmIChjaGFu Z2VkICYgQlNTX0NIQU5HRURfS0VFUF9BTElWRSkKKwkJd2Z4X2hpZl9rZWVwX2FsaXZlX3Blcmlv ZCh3dmlmLCBpbmZvLT5tYXhfaWRsZV9wZXJpb2QgKgorCQkJCQkJVVNFQ19QRVJfVFUgLyBVU0VD X1BFUl9NU0VDKTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKQor CQl3ZnhfaGlmX2VycF91c2VfcHJvdGVjdGlvbih3dmlmLCBpbmZvLT51c2VfY3RzX3Byb3QpOwor CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkKKwkJd2Z4X2hpZl9zbG90X3Rp bWUod3ZpZiwgaW5mby0+dXNlX3Nob3J0X3Nsb3QgPyA5IDogMjApOworCisJaWYgKGNoYW5nZWQg JiBCU1NfQ0hBTkdFRF9DUU0pCisJCXdmeF9oaWZfc2V0X3JjcGlfcnNzaV90aHJlc2hvbGQod3Zp ZiwgaW5mby0+Y3FtX3Jzc2lfdGhvbGQsCisJCQkJCQlpbmZvLT5jcW1fcnNzaV9oeXN0KTsKKwor CWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfVFhQT1dFUikKKwkJd2Z4X2hpZl9zZXRfb3V0cHV0 X3Bvd2VyKHd2aWYsIGluZm8tPnR4cG93ZXIpOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdF RF9QUykKKwkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKKworCW11dGV4X3VubG9jaygmd2Rldi0+Y29u Zl9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgd2Z4X3VwZGF0ZV90aW0oc3RydWN0IHdmeF92aWYg Knd2aWYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgdGltX29mZnNldCwgdGltX2xl bmd0aDsKKwl1OCAqdGltX3B0cjsKKworCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbSh3 dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmLAorCQkJCSAgICAgICAmdGltX29mZnNldCwgJnRpbV9s ZW5ndGgpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT0VOVDsKKwl0aW1fcHRyID0gc2tiLT5k YXRhICsgdGltX29mZnNldDsKKworCWlmICh0aW1fb2Zmc2V0ICYmIHRpbV9sZW5ndGggPj0gNikg eworCQkvKiBGaXJtd2FyZSBoYW5kbGVzIERUSU0gY291bnRlciBpbnRlcm5hbGx5ICovCisJCXRp bV9wdHJbMl0gPSAwOworCisJCS8qIFNldC9yZXNldCBhaWQwIGJpdCAqLworCQlpZiAod2Z4X3R4 X3F1ZXVlc19oYXNfY2FiKHd2aWYpKQorCQkJdGltX3B0cls0XSB8PSAxOworCQllbHNlCisJCQl0 aW1fcHRyWzRdICY9IH4xOworCX0KKworCXdmeF9oaWZfdXBkYXRlX2llX2JlYWNvbih3dmlmLCB0 aW1fcHRyLCB0aW1fbGVuZ3RoKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgd2Z4X3VwZGF0ZV90aW1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KndvcmspCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3Ry dWN0IHdmeF92aWYsIHVwZGF0ZV90aW1fd29yayk7CisKKwl3ZnhfdXBkYXRlX3RpbSh3dmlmKTsK K30KKworaW50IHdmeF9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVl ZTgwMjExX3N0YSAqc3RhLCBib29sIHNldCkKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3 LT5wcml2OworCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0YV9kZXYgPSAoc3RydWN0IHdmeF9zdGFf cHJpdiAqKSZzdGEtPmRydl9wcml2OworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gd2Rldl90b193 dmlmKHdkZXYsIHN0YV9kZXYtPnZpZl9pZCk7CisKKwlpZiAoIXd2aWYpIHsKKwkJZGV2X3dhcm4o d2Rldi0+ZGV2LCAiJXM6IHJlY2VpdmVkIGV2ZW50IGZvciBub24tZXhpc3RlbnQgdmlmXG4iLCBf X2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOworCX0KKwlzY2hlZHVsZV93b3JrKCZ3dmlmLT51cGRh dGVfdGltX3dvcmspOworCXJldHVybiAwOworfQorCit2b2lkIHdmeF9zdXNwZW5kX3Jlc3VtZV9t YyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgZW51bSBzdGFfbm90aWZ5X2NtZCBub3RpZnlfY21kKQor eworCXN0cnVjdCB3ZnhfdmlmICp3dmlmX2l0OworCisJaWYgKG5vdGlmeV9jbWQgIT0gU1RBX05P VElGWV9BV0FLRSkKKwkJcmV0dXJuOworCisJLyogRGV2aWNlIHdvbid0IGJlIGFibGUgdG8gaG9u b3IgQ0FCIGlmIGEgc2NhbiBpcyBpbiBwcm9ncmVzcyBvbiBhbnkKKwkgKiBpbnRlcmZhY2UuIFBy ZWZlciB0byBza2lwIHRoaXMgRFRJTSBhbmQgd2FpdCBmb3IgdGhlIG5leHQgb25lLgorCSAqLwor CXd2aWZfaXQgPSBOVUxMOworCXdoaWxlICgod3ZpZl9pdCA9IHd2aWZfaXRlcmF0ZSh3dmlmLT53 ZGV2LCB3dmlmX2l0KSkgIT0gTlVMTCkKKwkJaWYgKG11dGV4X2lzX2xvY2tlZCgmd3ZpZl9pdC0+ c2Nhbl9sb2NrKSkKKwkJCXJldHVybjsKKworCWlmICghd2Z4X3R4X3F1ZXVlc19oYXNfY2FiKHd2 aWYpIHx8IHd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCkKKwkJZGV2X3dhcm4od3ZpZi0+d2Rl di0+ZGV2LCAiaW5jb3JyZWN0IHNlcXVlbmNlICglZCBDQUIgaW4gcXVldWUpIiwKKwkJCSB3Znhf dHhfcXVldWVzX2hhc19jYWIod3ZpZikpOworCXd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCA9 IHRydWU7CisJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7Cit9CisKK2ludCB3ZnhfYW1w ZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFt cykKK3sKKwkvKiBBZ2dyZWdhdGlvbiBpcyBpbXBsZW1lbnRlZCBmdWxseSBpbiBmaXJtd2FyZSAq LworCXN3aXRjaCAocGFyYW1zLT5hY3Rpb24pIHsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9T VEFSVDoKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgorCQkvKiBKdXN0IGFja25vd2xl ZGdlIGl0IHRvIGVuYWJsZSBmcmFtZSByZS1vcmRlcmluZyAqLworCQlyZXR1cm4gMDsKKwlkZWZh dWx0OgorCQkvKiBMZWF2ZSB0aGUgZmlybXdhcmUgZG9pbmcgaXRzIGJ1c2luZXNzIGZvciB0eCBh Z2dyZWdhdGlvbiAqLworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCitpbnQgd2Z4X2Fk ZF9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgc3RydWN0IGllZWU4MDIx MV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4X3JlbW92 ZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGllZWU4MDIxMV9j aGFuY3R4X2NvbmYgKmNvbmYpCit7Cit9CisKK3ZvaWQgd2Z4X2NoYW5nZV9jaGFuY3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNv bmYsCisJCQl1MzIgY2hhbmdlZCkKK3sKK30KKworaW50IHdmeF9hc3NpZ25fdmlmX2NoYW5jdHgo c3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkg ICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGllZWU4 MDIxMV9jaGFubmVsICpjaCA9IGNvbmYtPmRlZi5jaGFuOworCisJV0FSTih3dmlmLT5jaGFubmVs LCAiY2hhbm5lbCBvdmVyd3JpdGUiKTsKKwl3dmlmLT5jaGFubmVsID0gY2g7CisKKwlyZXR1cm4g MDsKK30KKwordm9pZCB3ZnhfdW5hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgc3Ry dWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2 aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBpZWVlODAyMTFf Y2hhbm5lbCAqY2ggPSBjb25mLT5kZWYuY2hhbjsKKworCVdBUk4od3ZpZi0+Y2hhbm5lbCAhPSBj aCwgImNoYW5uZWwgbWlzbWF0Y2giKTsKKwl3dmlmLT5jaGFubmVsID0gTlVMTDsKK30KKworaW50 IHdmeF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCXJl dHVybiAwOworfQorCitpbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJaW50IGksIHJldCA9IDA7CisJc3Ry dWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChz dHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisKKwl2aWYtPmRyaXZlcl9mbGFncyB8PSBJ RUVFODAyMTFfVklGX0JFQUNPTl9GSUxURVIgfAorCQkJICAgICBJRUVFODAyMTFfVklGX1NVUFBP UlRTX1VBUFNEIHwKKwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19DUU1fUlNTSTsKKwor CW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCisJc3dpdGNoICh2aWYtPnR5cGUpIHsK KwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhP QzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQltdXRl eF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQor CisJLyogRklYTUU6IHByZWZlciB1c2Ugb2YgY29udGFpbmVyX29mKCkgdG8gZ2V0IHZpZiAqLwor CXd2aWYtPnZpZiA9IHZpZjsKKwl3dmlmLT53ZGV2ID0gd2RldjsKKworCXd2aWYtPmxpbmtfaWRf bWFwID0gMTsgLyogbGluay1pZCAwIGlzIHJlc2VydmVkIGZvciBtdWx0aWNhc3QgKi8KKwlJTklU X1dPUksoJnd2aWYtPnVwZGF0ZV90aW1fd29yaywgd2Z4X3VwZGF0ZV90aW1fd29yayk7CisJSU5J VF9ERUxBWUVEX1dPUksoJnd2aWYtPmJlYWNvbl9sb3NzX3dvcmssIHdmeF9iZWFjb25fbG9zc193 b3JrKTsKKworCWluaXRfY29tcGxldGlvbigmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOwor CWNvbXBsZXRlKCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSk7CisJSU5JVF9XT1JLKCZ3dmlm LT50eF9wb2xpY3lfdXBsb2FkX3dvcmssIHdmeF90eF9wb2xpY3lfdXBsb2FkX3dvcmspOworCisJ bXV0ZXhfaW5pdCgmd3ZpZi0+c2Nhbl9sb2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJnd2aWYtPnNj YW5fY29tcGxldGUpOworCUlOSVRfV09SSygmd3ZpZi0+c2Nhbl93b3JrLCB3ZnhfaHdfc2Nhbl93 b3JrKTsKKworCXdmeF90eF9xdWV1ZXNfaW5pdCh3dmlmKTsKKwl3ZnhfdHhfcG9saWN5X2luaXQo d3ZpZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2LT52aWYpOyBpKyspIHsK KwkJaWYgKCF3ZGV2LT52aWZbaV0pIHsKKwkJCXdkZXYtPnZpZltpXSA9IHZpZjsKKwkJCXd2aWYt PmlkID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCVdBUk4oaSA9PSBBUlJBWV9TSVpFKHdkZXYt PnZpZiksICJ0cnkgdG8gaW5zdGFudGlhdGUgbW9yZSB2aWYgdGhhbiBzdXBwb3J0ZWQiKTsKKwor CXdmeF9oaWZfc2V0X21hY2FkZHIod3ZpZiwgdmlmLT5hZGRyKTsKKworCW11dGV4X3VubG9jaygm d2Rldi0+Y29uZl9tdXRleCk7CisKKwl3dmlmID0gTlVMTDsKKwl3aGlsZSAoKHd2aWYgPSB3dmlm X2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpIHsKKwkJLyogQ29tYm8gbW9kZSBkb2VzIG5v dCBzdXBwb3J0IEJsb2NrIEFja3MuIFdlIGNhbiByZS1lbmFibGUgdGhlbSAqLworCQlpZiAod3Zp Zl9jb3VudCh3ZGV2KSA9PSAxKQorCQkJd2Z4X2hpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlm LCAweEZGLCAweEZGKTsKKwkJZWxzZQorCQkJd2Z4X2hpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3 dmlmLCAweDAwLCAweDAwKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3ZnhfcmVtb3Zl X2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZikKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3Znhf dmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXdhaXRfZm9y X2NvbXBsZXRpb25fdGltZW91dCgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUsIG1zZWNzX3Rv X2ppZmZpZXMoMzAwKSk7CisJd2Z4X3R4X3F1ZXVlc19jaGVja19lbXB0eSh3dmlmKTsKKworCW11 dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCVdBUk4od3ZpZi0+bGlua19pZF9tYXAgIT0g MSwgImNvcnJ1cHRlZCBzdGF0ZSIpOworCisJd2Z4X2hpZl9yZXNldCh3dmlmLCBmYWxzZSk7CisJ d2Z4X2hpZl9zZXRfbWFjYWRkcih3dmlmLCBOVUxMKTsKKwl3ZnhfdHhfcG9saWN5X2luaXQod3Zp Zik7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYtPmJlYWNvbl9sb3NzX3dvcmsp OworCXdkZXYtPnZpZlt3dmlmLT5pZF0gPSBOVUxMOworCXd2aWYtPnZpZiA9IE5VTEw7CisKKwlt dXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCisJd3ZpZiA9IE5VTEw7CisJd2hpbGUg KCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7CisJCS8qIENvbWJv IG1vZGUgZG9lcyBub3Qgc3VwcG9ydCBCbG9jayBBY2tzLiBXZSBjYW4gcmUtZW5hYmxlIHRoZW0g Ki8KKwkJaWYgKHd2aWZfY291bnQod2RldikgPT0gMSkKKwkJCXdmeF9oaWZfc2V0X2Jsb2NrX2Fj a19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7CisJCWVsc2UKKwkJCXdmeF9oaWZfc2V0X2Jsb2Nr X2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7CisJfQorfQorCitpbnQgd2Z4X3N0YXJ0KHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVybiAwOworfQorCit2b2lkIHdmeF9zdG9w KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHct PnByaXY7CisKKwlXQVJOX09OKCFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJndkZXYtPnR4X3Bl bmRpbmcpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngv c3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNGQ3ZTM4YmU0MjM1Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuaApAQCAtMCwwICsxLDcz IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICog SW1wbGVtZW50YXRpb24gb2YgbWFjODAyMTEgQVBJLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAx Ny0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEw LCBTVC1Fcmljc3NvbgorICovCisjaWZuZGVmIFdGWF9TVEFfSAorI2RlZmluZSBXRlhfU1RBX0gK KworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCitzdHJ1Y3Qgd2Z4X2RldjsKK3N0cnVjdCB3 ZnhfdmlmOworCitzdHJ1Y3Qgd2Z4X3N0YV9wcml2IHsKKwlpbnQgbGlua19pZDsKKwlpbnQgdmlm X2lkOworfTsKKworLyogbWFjODAyMTEgaW50ZXJmYWNlICovCitpbnQgd2Z4X3N0YXJ0KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgd2Z4X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAq aHcpOworaW50IHdmeF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2Vk KTsKK2ludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUz MiB2YWx1ZSk7Cit2b2lkIHdmeF9zZXRfZGVmYXVsdF91bmljYXN0X2tleShzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgaW50IGlkeCk7Cit2 b2lkIHdmeF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25l ZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0 IHVudXNlZCk7CisKK2ludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNl KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK2lu dCB3Znhfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYpOwordm9pZCB3Znhfc3RvcF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZik7CitpbnQgd2Z4X2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIHdmeF9sZWF2ZV9p YnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsK K2ludCB3ZnhfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwKKwkJdTE2IHF1ZXVlLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVl X3BhcmFtcyAqcGFyYW1zKTsKK3ZvaWQgd2Z4X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgIHN0cnVjdCBpZWVl ODAyMTFfYnNzX2NvbmYgKmluZm8sIHUzMiBjaGFuZ2VkKTsKK2ludCB3Znhfc3RhX2FkZChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJc3RydWN0 IGllZWU4MDIxMV9zdGEgKnN0YSk7CitpbnQgd2Z4X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgIHN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEpOwordm9pZCB3Znhfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgIGVudW0gc3RhX25vdGlmeV9jbWQg Y21kLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKK2ludCB3Znhfc2V0X3RpbShzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBzZXQpOwor aW50IHdmeF9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVl ODAyMTFfdmlmICp2aWYsCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBh cmFtcyk7CitpbnQgd2Z4X2FkZF9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkg ICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOwordm9pZCB3ZnhfcmVtb3Zl X2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2No YW5jdHhfY29uZiAqY29uZik7Cit2b2lkIHdmeF9jaGFuZ2VfY2hhbmN0eChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mLCB1MzIg Y2hhbmdlZCk7CitpbnQgd2Z4X2Fzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFf Y2hhbmN0eF9jb25mICpjb25mKTsKK3ZvaWQgd2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwK KwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKTsKKworLyogSGFy ZHdhcmUgQVBJIENhbGxiYWNrcyAqLwordm9pZCB3ZnhfY29vbGluZ190aW1lb3V0X3dvcmsoc3Ry dWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgd2Z4X3N1c3BlbmRfaG90X2RldihzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQpOwordm9pZCB3Znhfc3VzcGVu ZF9yZXN1bWVfbWMoc3RydWN0IHdmeF92aWYgKnd2aWYsIGVudW0gc3RhX25vdGlmeV9jbWQgY21k KTsKK3ZvaWQgd2Z4X2V2ZW50X3JlcG9ydF9yc3NpKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCBy YXdfcmNwaV9yc3NpKTsKK2ludCB3ZnhfdXBkYXRlX3BtKHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsK KworLyogT3RoZXIgSGVscGVycyAqLwordm9pZCB3ZnhfcmVzZXQoc3RydWN0IHdmeF92aWYgKnd2 aWYpOwordTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBy YXRlcyk7CisKKyNlbmRpZgotLSAKMi4zMy4wCgo=