Received: by 2002:ab2:710b:0:b0:1ef:a325:1205 with SMTP id z11csp1389319lql; Tue, 12 Mar 2024 16:17:05 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUt+ntIm4+S0Ia33ufBsAPNXfjB6K4t9wFcJOpG8IU/WFIoqmZGmkb5r3tKmpxKQcsxw7HqYO0nbVUE9F3l8U+TcvcdLaCltr/XDXrYnQ== X-Google-Smtp-Source: AGHT+IGGfvexqF3LgzRpe1KiXbROjtKSx73jWBE2s2anHcf2OhYnxozygIcCCdKdVkkeVhS/6qla X-Received: by 2002:a05:6a20:da9b:b0:1a1:732b:7758 with SMTP id iy27-20020a056a20da9b00b001a1732b7758mr9028671pzb.54.1710285425071; Tue, 12 Mar 2024 16:17:05 -0700 (PDT) Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id i186-20020a636dc3000000b005e0b862f469si7821366pgc.158.2024.03.12.16.17.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Mar 2024 16:17:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-100914-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Z6cMoCFl; arc=fail (signature failed); spf=pass (google.com: domain of linux-kernel+bounces-100914-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-100914-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id B3331B22149 for ; Tue, 12 Mar 2024 23:16:45 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D5DC94EB38; Tue, 12 Mar 2024 23:16:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Z6cMoCFl" Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 86B7E4D9F0; Tue, 12 Mar 2024 23:16:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.17 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710285390; cv=fail; b=gxl5TLp/hVjoXLVwQeBra97v+PYKD2SocS4CGjGFOqmh1c5G8K1LIGSO/z9wIAIkxKWnb4uTQkCTei3Xg539bJwAyH4rk6XpCEcsBhT5OHq1TEfENXx3ROs91uKZoey++kqB03sRAF+XWKeQLFilxx3Os8dTA98JcOoVJBMqQQI= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710285390; c=relaxed/simple; bh=HciUqm5hRge691a7hEioPYQ4rhedXTZT7J/endz0R74=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=CsauCqHY6ut62Fdpca6F5lEQjSNajpNSv9A7N84i/AFxfVEUgB1HgWdw7zsnDUu3ynlgmTsZN0LQo3RwCF+VjxS34WLfIifHU19hWacc9zhoyIoO5tZ6x9tLMpHnfSXgXDR1WbYGJCeS3fUEN2NKSNkiRDFw/IcaHA7/VtYNqGs= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Z6cMoCFl; arc=fail smtp.client-ip=198.175.65.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710285388; x=1741821388; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=HciUqm5hRge691a7hEioPYQ4rhedXTZT7J/endz0R74=; b=Z6cMoCFlkslas1BEAqR2KXJFqRFbIJ90JPtOhbQwjn6QIlGAdJ05GGXe hLyzPR1sncPpdQmvRMK7OxeqiV/hsKMLrZAPVmZ+rZEDA2Oh56rmPteuk oaEowa1vy6PrLib9a63/r+9qI2dN96AwzHneXOo7QxlYBrtCr9agJ9cdE H+5pJUkex0qSSsxRrT6f3FR0RtOMejkvGQoFszdeZA/uFjVzI12MVv8Ty jOECU0GA4tm0Sye2IrWuNZL7Gxq2ha3flgGzucmgFtzNNzBJ7NNGSq5q2 HWiLi/0rGx86P2fpKj25TDtirvk6SEyMEeBMHo2yIZWbFVB7PiLstmjSQ Q==; X-IronPort-AV: E=McAfee;i="6600,9927,11011"; a="5156658" X-IronPort-AV: E=Sophos;i="6.07,119,1708416000"; d="scan'208";a="5156658" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa109.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Mar 2024 16:16:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,119,1708416000"; d="scan'208";a="11771687" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmviesa006.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 12 Mar 2024 16:16:27 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 12 Mar 2024 16:16:26 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Tue, 12 Mar 2024 16:16:26 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Tue, 12 Mar 2024 16:16:25 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eGTeQStulV24qYlFoTHrkZblX1GoTRj5zLBn5cbMYp5rvTIwWWu5S3VLT7ZMJMz42/lXGhPPptWAXIg4InBbKtmhAPaVGbFqm3W12f0klQCijXO22Hh4FUnSYpa5AVL1yCpiPzqBoCU/7JKeupv/Avq24gT7C9+WrVQiyj9DEEKHBI+wbHVzYWJIZNMKMpo7muYRcJ+L7JDEGrK1o8GKPVul2C6aD7yHEUuxNuPQftArY2Sb4YHowepZDXNhDt6k1aZyYuQP9zAN0ZMOW2Xwt2DGO4eRL+WMeYZKN7l63HFTKVoIdV3w20ZMB2U4sCnLhX4xSDpU7qgJIRjnm4rW/A== 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=HciUqm5hRge691a7hEioPYQ4rhedXTZT7J/endz0R74=; b=gt8iNVlN2znPsjYZVri//+Rb+j5PyzNej0gnDYRAM6lpakTbiNrz4H8tzUKkZMrS9LPB67afWNXkIQRfBKfdf4zoL1HQHYz2/P99irZp0hKlGBHQEXRFUHuaBNqXzMCDobXyPBPzVXo7iIgt1A6rQkd0kuoilWOqAOd7sTr0Ta/G93DTn/iTJmuIRnPWtQAAlrdRb8H4YsxV4KAX34kYtELBRMtKx+1Ryq3vVTyj9esGWE8bs87jbcL3cZOLfipgP7K0vNr1f6QhnEj2US5BMsBbmKdAGn94FGjcjEX1xdKEzxNkkKmRcPixQd1oktlxLpak1H7Qsi+o9m+qZ/2iPg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SN7PR11MB7590.namprd11.prod.outlook.com (2603:10b6:806:348::13) by MW5PR11MB5929.namprd11.prod.outlook.com (2603:10b6:303:194::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7386.17; Tue, 12 Mar 2024 23:16:21 +0000 Received: from SN7PR11MB7590.namprd11.prod.outlook.com ([fe80::3f3a:fd7:972e:8ab1]) by SN7PR11MB7590.namprd11.prod.outlook.com ([fe80::3f3a:fd7:972e:8ab1%5]) with mapi id 15.20.7339.009; Tue, 12 Mar 2024 23:16:21 +0000 From: "Colberg, Peter" To: "Wu, Hao" , "mdf@kernel.org" , "linux-fpga@vger.kernel.org" , "Xu, Yilun" , "Rix, Tom" , "matthew.gerlach@linux.intel.com" , "linux-kernel@vger.kernel.org" CC: "Ravuri, Ananda" Subject: Re: [PATCH] fpga: add DFL driver for CXL Cache IP block Thread-Topic: [PATCH] fpga: add DFL driver for CXL Cache IP block Thread-Index: AQHadNNLN/hhSsHBxkyVzoUwM48fTw== Date: Tue, 12 Mar 2024 23:16:21 +0000 Message-ID: <9b7cc086e984ea48fdaa7129f67f8ffe9aab519b.camel@intel.com> References: <20240308172327.1970160-1-matthew.gerlach@linux.intel.com> In-Reply-To: <20240308172327.1970160-1-matthew.gerlach@linux.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN7PR11MB7590:EE_|MW5PR11MB5929:EE_ x-ms-office365-filtering-correlation-id: d1fb94b5-298a-41cd-39e0-08dc42ea6dc3 x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: gOA6rbrKNCX5t1O03IO2NHXVPkMggZWK2H8zHqncIbuypgMVmz18d+HP2PdLChFE5RfyR4nv9Qx9/BTQUN9pzt2NThehTdqIeAfCu2FIHunt5WDJ8KMq/r6pKne8G7S+VjYko9/WXuzi6tUb5mfVskgUfnRngHuKqRQBcRjur890Cj4LF9MB3MH/Q4qqeUDXZtzAlmcE1ARvba3oR5jC1nZYKeTW76nqMamnISDCc32bQKX2WDYXPjXWU+3IhJXlAk/lITxNzMJVuOCpo+h2P6fYp4+nIH4zV/FeiP5kkhudAwPge2XHeBpevuxw842iWYrZDFWwt+HJrfudenuKBy9jvjAWL+nwlZtOYTLEVn92OXhISxsKeIYnPff+u/eATliMggMIIW9/48f2M0RHOvZObsRPeridOgXxZx/qK2z47Os0pa+qRGoMo7PamZTp6uu++yG2Q7SBm+wfq8QVn8Y14BMuO0ukRjkTTe3y1Fxf6xiK2wxSnt1fpE2Po0cn3n2BJvZ+rCw9q0lemMveIEqj5oZSTK1ISUvVCziPSQZ6Un/VBUe17PJQx5A8KYJfojhaJzlv+tF3RTP2VYHykoDx/UvktzUGpeInJzUw1nXogvqxuZXmD7oBf/lCldnuZO4IIt87DvuyqYGuwKrbUkRPa/OWuCJn2zND/zrmSL602vgscMu3Qsga2d2Y2XLj x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR11MB7590.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(376005)(1800799015)(38070700009)(921011);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?K3RNb3RUTG5lR2VxYWFUL2tvdUFLbDdUd2VMakZkcTNRdVNFblNqWTJDd1dJ?= =?utf-8?B?OERRUm8xYWRVQ1luMG1VSWE5eTA4MG4vUmlWVmtmQzY5UGtsYWZnM0kydUxh?= =?utf-8?B?MWtXelZaNUJGeGJ4ZDJhSytMNm1qUFdWeHVGTDVocnFMZUFYc01iWDV2Y1RC?= =?utf-8?B?bkJxOVNwc3RJcFQzSFdtUW9Bb3J0d0l5WVU5ay9FMFVZQWFuaUxUaFFUOE1W?= =?utf-8?B?NUlVc2p4MFBFM2hMeGhnTTdUUjRnRHpIQmJ6UWwyYllmazY1TnhMSDh3MGhP?= =?utf-8?B?aWtHSjQrV0ptc0pxNzZBVFNWRkt4emo1Rk1ONVlTdWFtSWtBWkhPeFA5dWRG?= =?utf-8?B?c0QvVUVKc3JvWU52RGM1bVZQUlhYWk1TVm5pY2NXbDQyL1hPZXVIWFA1WTBT?= =?utf-8?B?QVJWOHNremlXbHY5UlpUTWw3ZVR5Q1RkVEQxNVJtY2lCNzc1WitaRDEvOTVB?= =?utf-8?B?aFk4emNaL3Q0aFZkeE8rckI1clUxNU5veEMzRWVKdnZLNVllZjZUemVTMmk2?= =?utf-8?B?QUxaTGRkaGhkYmtzSHFLbHB5RnBrUlVGRzg2OW00K01Mb25HTWx3K0tZM01v?= =?utf-8?B?Tk44Nmg1SWJYWDN3dEdlZWRSV1EzQzgvLzJPTmhuNCtDWEp4UGc3eEt1NDd2?= =?utf-8?B?dzdRNWFGTk5PakRPbmVybzNZWFdndXpQSEg5RFBCVDU4aWRReDdhRDZJelpn?= =?utf-8?B?NkszYWtvQSsyajdFNGgxN2tmbnVjb0VPTHF1K0k4c21FOGluRFpZTlBvbzYx?= =?utf-8?B?cHFkNjFOY1dWMGRlUkVZbWVjSjFHR3FEQTEwOUhCUTA2ZUJqL3QrNGZ6b2lu?= =?utf-8?B?eWpNTmlkaWgwOUdrVDNjZEVvQm9md0t3c0pjR1dsT0l6Vm5zV0tLUEZ0UTA2?= =?utf-8?B?N0tKQjNxSFJJcEgzRWxvWUhjZTB2NzVTWC9xZzdzTGRFeGpBSzhoMXdpWk45?= =?utf-8?B?RjN3NnpCNE5VbmxsYm9wOXlLR3hCa2piSElZY1ZZWW9KbU40VWpFdm9scXdR?= =?utf-8?B?TmdydzBwTE5VSlhnTXVqRWRjUm4wcmJWTjBUZUR2QjRaZUM1NlFVZ21LbzN3?= =?utf-8?B?cERYZFRhU0xUTHJJVTlpMktSeXh3eWVnTEZrMGx1akF6elIrSUpwamNsNjI4?= =?utf-8?B?cE9VODlsZm1UN1FKWkNmTS8wQ2MwRWdTQ1J0NFhSTUUvR2grdExVYmI2TGFQ?= =?utf-8?B?WVVuSU8wT3J1WG8wRm5zTHVuMmZRMWd3NXpBeDZIckNKT2lLb3ZBOXR3SEYz?= =?utf-8?B?TDJYR2N2dzZtZlVhNEQ3UGxOTG9LdlBIMTlnZzcxNmgzVkVibWx4bmFISzg3?= =?utf-8?B?U2VES3plUjJiMmFwbnNRUmtxeFQ1eUV5ZVNueUdGRUFLSWFPZ1VXQmxUdFRJ?= =?utf-8?B?V1B1a1dlODhiM0pEOFdZdmxlZ1ZuZG14OGgxK0VyZElKVFRrVDJZMjRQWHNW?= =?utf-8?B?UGV0L3pFeTV5Y0cyMjdRdjlDSmdqQTlrNHNIa2NKR3JlUTV5OWpDVFJXQWly?= =?utf-8?B?bUtNbDIyeDIyVHFUdmlCUngxcU5uWXB3dEpRMUpFREpUR2hUbXkxazhOZTQr?= =?utf-8?B?N1RDM21DQjZQV0diN1p1eGZUZmJySktWUzFucy9yOXA3LzdrOGVEKzVuSk8v?= =?utf-8?B?Z2dBSy91eXFJY3VMRU05YnpibWI1ZW16QW5pY0VjYlAwdjhnRFJxeXU3amRN?= =?utf-8?B?ekw0S01vUityVXVvcXd6VVVva24vc084ZStOQlNoYWhCU09EOWxEMlpqK2lK?= =?utf-8?B?NUE2c3BOWVBQenprK0RXcEdQNU8vNlU2QnJ2YVlSMGtCekZqd256NDZuNjJ5?= =?utf-8?B?Y0ZrUWloQU1iZHkvbmR0ZHlyR2ZUOStQb0pJSTg0VlVFcmJROFB4TXllcHB3?= =?utf-8?B?R1ppTFVQUi9wbjVFMERNV0YycFFpVFRTaVc5YnpwRnhuVU5jWWNlYVZTTkMr?= =?utf-8?B?d3hQYS9OV3FFUzlKTWlraEsySVVmYWhVd0RIMXhoaG5lSkY4cWFna2hlSW82?= =?utf-8?B?SUwyVkRqcW9QTnQ0MlFZdG9uak5neHovcFhjRE15dm1ZQ0oxcjNKS0FuS0kz?= =?utf-8?B?dHM5ZXNBd2E3RW9Kc1p4Y1VWTkFiT1pVcXlIdkdOZnd4T2hpOHNKaktFQ0N0?= =?utf-8?B?ZnNhK0UxT1kvSWhRUXJKeDRyTC85YkVWOGd2UllYVHNoc1MwNzM3UkZRaUJ3?= =?utf-8?B?ZlE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN7PR11MB7590.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d1fb94b5-298a-41cd-39e0-08dc42ea6dc3 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Mar 2024 23:16:21.0681 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 1dX+/hIvfXcJbnwgIhE8hDUEdA2rL9VVdFj2wmjWuNAYSuiSq8mK6GcJGynPEE0hhkHzQQiO0EG9RyuKphRU8g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR11MB5929 X-OriginatorOrg: intel.com T24gRnJpLCAyMDI0LTAzLTA4IGF0IDA5OjIzIC0wODAwLCBNYXR0aGV3IEdlcmxhY2ggd3JvdGU6 DQo+IEZyb206IFRpbSBXaGlzb25hbnQgPHRpbS53aGlzb25hbnRAaW50ZWwuY29tPg0KPiANCj4g QWRkIGEgRGV2aWNlIEZlYXR1cmUgTGlzdCAoREZMKSBkcml2ZXIgZm9yIHRoZQ0KPiBJbnRlbCBD WEwgQ2FjaGUgSVAgYmxvY2suIFRoZSBkcml2ZXINCj4gcHJvdmlkZXMgYSBtZWFucyBvZiBhY2Nl c3NpbmcgdGhlIGRldmljZSBNTUlPIGFuZCB0aGUNCj4gY2FwYWJpbGl0eSB0byBwaW4gYnVmZmVy cyBhbmQgcHJvZ3JhbSB0aGVpciBwaHlzaWNhbA0KPiBhZGRyZXNzZXMgaW50byB0aGUgSEUtQ2Fj aGUgcmVnaXN0ZXJzLiBVc2VyIGludGVyZmFjZQ0KPiBpcyBleHBvc2VkIHZpYSAvZGV2L2RmbC1j eGwtY2FjaGUuWCBhcyBkZXNjcmliZWQgaW4NCj4gaW5jbHVkZS91YXBpL2xpbnV4L2ZwZ2EtZGZs LmguDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBUaW0gV2hpc29uYW50IDx0aW0ud2hpc29uYW50QGlu dGVsLmNvbT4NCj4gQ28tZGV2ZWxvcGVkLWJ5OiBBbmFuZGEgUmF2dXJpIDxhbmFuZGEucmF2dXJp QGludGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogQW5hbmRhIFJhdnVyaSA8YW5hbmRhLnJhdnVy aUBpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgR2VybGFjaCA8bWF0dGhldy5n ZXJsYWNoQGxpbnV4LmludGVsLmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJzL2ZwZ2EvS2NvbmZpZyAg ICAgICAgICB8ICAxMSArDQo+ICBkcml2ZXJzL2ZwZ2EvTWFrZWZpbGUgICAgICAgICB8ICAgMSAr DQo+ICBkcml2ZXJzL2ZwZ2EvZGZsLWN4bC1jYWNoZS5jICB8IDY0NSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrDQo+ICBpbmNsdWRlL3VhcGkvbGludXgvZnBnYS1kZmwuaCB8ICA5 OCArKysrKysNCj4gIDQgZmlsZXMgY2hhbmdlZCwgNzU1IGluc2VydGlvbnMoKykNCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2ZwZ2EvZGZsLWN4bC1jYWNoZS5jDQo+IA0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9mcGdhL0tjb25maWcgYi9kcml2ZXJzL2ZwZ2EvS2NvbmZpZw0KPiBpbmRl eCAyZjY4OWFjNGJhM2EuLjAwOTMxYTNkZWViZiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9mcGdh L0tjb25maWcNCj4gKysrIGIvZHJpdmVycy9mcGdhL0tjb25maWcNCj4gQEAgLTI1Nyw2ICsyNTcs MTcgQEAgY29uZmlnIEZQR0FfTTEwX0JNQ19TRUNfVVBEQVRFDQo+ICAJICAoQk1DKSBhbmQgcHJv dmlkZXMgc3VwcG9ydCBmb3Igc2VjdXJlIHVwZGF0ZXMgZm9yIHRoZSBCTUMgaW1hZ2UsDQo+ICAJ ICB0aGUgRlBHQSBpbWFnZSwgdGhlIFJvb3QgRW50cnkgSGFzaGVzLCBldGMuDQo+ICANCj4gK2Nv bmZpZyBGUEdBX0RGTF9DWExfQ0FDSEUNCj4gKwl0cmlzdGF0ZSAiSW50ZWwgQ1hMIGNhY2hlIGRy aXZlciINCj4gKwlkZXBlbmRzIG9uIERSTSAmJiBGUEdBX0RGTA0KPiArCWhlbHANCj4gKwkgIFRo aXMgaXMgdGhlIGRyaXZlciBmb3IgQ1hMIGNhY2hlIEFjY2VsZXJhdGVkIEZ1bmN0aW9uIFVuaXQN Cj4gKwkgIChBRlUpIHdoaWNoIGNvbmZpZ3VyZXMgdGhlIElQIGFuZCBwcm92aWRlcyBETUEgYnVm ZmVyIG1hbmFnZW1lbnQNCj4gKwkgIHRvIHVzZXIgc3BhY2UuDQo+ICsNCj4gKwkgIFRvIGNvbXBp bGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob3NlIE0gaGVyZTogdGhlDQo+ICsJICBtb2R1 bGUgd2lsbCBiZSBjYWxsZWQgZGZsX2N4bF9jYWNoZS4NCj4gKw0KPiAgY29uZmlnIEZQR0FfTUdS X01JQ1JPQ0hJUF9TUEkNCj4gIAl0cmlzdGF0ZSAiTWljcm9jaGlwIFBvbGFyZmlyZSBTUEkgRlBH QSBtYW5hZ2VyIg0KPiAgCWRlcGVuZHMgb24gU1BJDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Zw Z2EvTWFrZWZpbGUgYi9kcml2ZXJzL2ZwZ2EvTWFrZWZpbGUNCj4gaW5kZXggMzUyYTI2MTI2MjNl Li45NzA5MDI4MTA4NDUgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZnBnYS9NYWtlZmlsZQ0KPiAr KysgYi9kcml2ZXJzL2ZwZ2EvTWFrZWZpbGUNCj4gQEAgLTU1LDYgKzU1LDcgQEAgb2JqLSQoQ09O RklHX0ZQR0FfREZMX05JT1NfSU5URUxfUEFDX04zMDAwKQkrPSBkZmwtbjMwMDAtbmlvcy5vDQo+ ICANCj4gICMgRHJpdmVycyBmb3IgRlBHQXMgd2hpY2ggaW1wbGVtZW50IERGTA0KPiAgb2JqLSQo Q09ORklHX0ZQR0FfREZMX1BDSSkJCSs9IGRmbC1wY2kubw0KPiArb2JqLSQoQ09ORklHX0ZQR0Ff REZMX0NYTF9DQUNIRSkJKz0gZGZsLWN4bC1jYWNoZS5vDQo+ICANCj4gICMgS1VuaXQgdGVzdHMN Cj4gIG9iai0kKENPTkZJR19GUEdBX0tVTklUX1RFU1RTKQkJKz0gdGVzdHMvDQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2ZwZ2EvZGZsLWN4bC1jYWNoZS5jIGIvZHJpdmVycy9mcGdhL2RmbC1jeGwt Y2FjaGUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmVl MmFlMDRhYzA1OA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvZnBnYS9kZmwtY3hs LWNhY2hlLmMNCj4gQEAgLTAsMCArMSw2NDUgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9ubHkNCj4gKy8qDQo+ICsgKiBERkwgZGV2aWNlIGRyaXZlciBmb3IgSG9z dCBFeGVyY2lzZXIgQ2FjaGUgcHJpdmF0ZSBmZWF0dXJlLg0KPiArICoNCj4gKyAqIFByb3ZpZGVz IGEgbWVhbnMgb2YgYWNjZXNzaW5nIHRoZSBkZXZpY2UgTU1JTyBhbmQgdGhlDQo+ICsgKiBjYXBh YmlsaXR5IHRvIHBpbiBidWZmZXJzIGFuZCBwcm9ncmFtIHRoZWlyIHBoeXNpY2FsDQo+ICsgKiBh ZGRyZXNzZXMgaW50byB0aGUgSEUtQ2FjaGUgcmVnaXN0ZXJzLiBVc2VyIGludGVyZmFjZQ0KPiAr ICogaXMgZXhwb3NlZCB2aWEgL2Rldi9kZmwtY3hsLWNhY2hlLlggYXMgZGVzY3JpYmVkIGluDQo+ ICsgKiBpbmNsdWRlL3VhcGkvbGludXgvZnBnYS1kZmwuaC4NCj4gKyAqDQo+ICsgKiBDb3B5cmln aHQgKEMpIDIwMjMgSW50ZWwgQ29ycG9yYXRpb24sIEluYy4NCj4gKyAqDQo+ICsgKiBBdXRob3Jz Og0KPiArICogICBUaW0gV2hpc29uYW50IDx0aW0ud2hpc29uYW50QGludGVsLmNvbT4NCj4gKyAq ICAgQW5hbmRhIFJhdnVyaSA8YW5hbmRhLnJhdnVyaUBpbnRlbC5jb20+DQo+ICsgKi8NCj4gKw0K PiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvY2Rldi5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L2NsZWFudXAuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jb250 YWluZXJfb2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZmwuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9lcnJuby5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ZwZ2EtZGZsLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvaGlnaG1lbS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvbW1hcF9sb2NrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvbXV0ZXguaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wZ3RhYmxlLmg+DQo+ICsj aW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gKw0KPiArI2luY2x1ZGUgPGRybS9kcm1fY2Fj aGUuaD4NCj4gKw0KPiArI2RlZmluZSBERkxfQ1hMX0NBQ0hFX0RSSVZFUl9OQU1FCSJkZmwtY3hs LWNhY2hlIg0KPiArI2RlZmluZSBGTUVfRkVBVFVSRV9JRF9DWExfQ0FDSEUJMHgyNQ0KPiArDQo+ ICtzdHJ1Y3QgZGZsX2N4bF9jYWNoZV9idWZmZXJfcmVnaW9uIHsNCj4gKwlzdHJ1Y3QgcmJfbm9k ZSBub2RlOw0KPiArCXUzMiBmbGFnczsNCj4gKwl1NjQgdXNlcl9hZGRyOw0KPiArCXU2NCBsZW5n dGg7DQo+ICsJc3RydWN0IHBhZ2UgKipwYWdlczsNCj4gKwlwaHlzX2FkZHJfdCBwaHlzOw0KPiAr CXU2NCBvZmZzZXRbREZMX0FSUkFZX01BWF9TSVpFXTsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBk ZmxfY3hsX2NhY2hlIHsNCj4gKwlzdHJ1Y3QgY2RldiBjZGV2Ow0KPiArCXN0cnVjdCBkZmxfZGV2 aWNlICpkZGV2Ow0KPiArCWludCBpZDsNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ICsJYXRv bWljX3Qgb3BlbmVkOw0KPiArCXZvaWQgX19pb21lbSAqbW1pb19iYXNlOw0KPiArCWludCBtbWlv X3NpemU7DQo+ICsJc3RydWN0IGRmbF9jeGxfY2FjaGVfcmVnaW9uX2luZm8gcmluZm87DQo+ICsJ c3RydWN0IHJiX3Jvb3QgZG1hX3JlZ2lvbnM7DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgREVGSU5F X01VVEVYKGRmbF9jeGxfY2FjaGVfY2xhc3NfbG9jayk7DQo+ICtzdGF0aWMgc3RydWN0IGNsYXNz ICpkZmxfY3hsX2NhY2hlX2NsYXNzOw0KPiArc3RhdGljIGRldl90IGRmbF9jeGxfY2FjaGVfZGV2 dDsNCj4gK3N0YXRpYyBpbnQgZGZsX2N4bF9jYWNoZV9kZXZpY2VzOw0KPiArDQo+ICtzdGF0aWMg aW50IGRmbF9jeGxfY2FjaGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAq ZmlscCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGZsX2N4bF9jYWNoZSAqY3hsX2NhY2hlID0gY29udGFp bmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBkZmxfY3hsX2NhY2hlLCBjZGV2KTsNCj4gKw0K PiArCWlmIChhdG9taWNfY21weGNoZygmY3hsX2NhY2hlLT5vcGVuZWQsIDAsIDEpKQ0KPiArCQly ZXR1cm4gLUVCVVNZOw0KPiArDQo+ICsJZmlscC0+cHJpdmF0ZV9kYXRhID0gY3hsX2NhY2hlOw0K PiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBsb25nIGN4bF9jYWNoZV9p b2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGRmbF9jeGxfY2FjaGUgKmN4bF9jYWNoZSwgdW5z aWduZWQgbG9uZyBhcmcpDQo+ICt7DQo+ICsJLyogTm8gZXh0ZW5zaW9uIHN1cHBvcnQgZm9yIG5v dyAqLw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgbG9uZyBjeGxfY2FjaGVf aW9jdGxfZ2V0X3JlZ2lvbl9pbmZvKHN0cnVjdCBkZmxfY3hsX2NhY2hlICpjeGxfY2FjaGUsIHZv aWQgX191c2VyICphcmcpDQo+ICt7DQo+ICsJc3RydWN0IGRmbF9jeGxfY2FjaGVfcmVnaW9uX2lu Zm8gcmluZm87DQo+ICsJdW5zaWduZWQgbG9uZyBtaW5zejsNCj4gKw0KPiArCW1pbnN6ID0gb2Zm c2V0b2ZlbmQoc3RydWN0IGRmbF9jeGxfY2FjaGVfcmVnaW9uX2luZm8sIG9mZnNldCk7DQo+ICsJ aWYgKGNvcHlfZnJvbV91c2VyKCZyaW5mbywgYXJnLCBtaW5zeikpDQo+ICsJCXJldHVybiAtRUZB VUxUOw0KPiArDQo+ICsJaWYgKHJpbmZvLmFyZ3N6IDwgbWluc3opDQo+ICsJCXJldHVybiAtRUlO VkFMOw0KPiArDQo+ICsJcmluZm8uZmxhZ3MgPSBjeGxfY2FjaGUtPnJpbmZvLmZsYWdzOw0KPiAr CXJpbmZvLnNpemUgPSBjeGxfY2FjaGUtPnJpbmZvLnNpemU7DQo+ICsJcmluZm8ub2Zmc2V0ID0g Y3hsX2NhY2hlLT5yaW5mby5vZmZzZXQ7DQo+ICsNCj4gKwlpZiAoY29weV90b191c2VyKGFyZywg JnJpbmZvLCBzaXplb2YocmluZm8pKSkNCj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgY3hsX2NhY2hlX3VucGluX3BhZ2Vz KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKioqcGFnZXMsIHVuc2lnbmVkIGxvbmcg bGVuZ3RoKQ0KPiArew0KPiArCWNvbnN0IGxvbmcgbnBhZ2VzID0gUEZOX0RPV04obGVuZ3RoKTsN Cj4gKw0KPiArCWlmICghKnBhZ2VzKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwl1bnBpbl91c2Vy X3BhZ2VzKCpwYWdlcywgbnBhZ2VzKTsNCj4gKwlrZnJlZSgqcGFnZXMpOw0KPiArCSpwYWdlcyA9 IE5VTEw7DQo+ICsJYWNjb3VudF9sb2NrZWRfdm0oY3VycmVudC0+bW0sIG5wYWdlcywgZmFsc2Up Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBjeGxfY2FjaGVfY2hlY2tfY29udGludW91c19w YWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkNCj4gK3sNCj4g KwlpbnQgaTsNCj4gKwljb25zdCBpbnQgbnBhZ2VzID0gUEZOX0RPV04obGVuZ3RoKTsNCj4gKw0K PiArCWZvciAoaSA9IDA7IGkgPCBucGFnZXMgLSAxOyBpKyspDQo+ICsJCWlmIChwYWdlX3RvX3Bm bihwYWdlc1tpXSkgKyAxICE9IHBhZ2VfdG9fcGZuKHBhZ2VzW2kgKyAxXSkpDQo+ICsJCQlyZXR1 cm4gZmFsc2U7DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBjeGxfY2FjaGVfZG1hX3Bpbl9wYWdlcyhzdHJ1Y3QgZGZsX2N4bF9jYWNoZSAqY3hsX2NhY2hl LA0KPiArCQkJCSAgIHN0cnVjdCBkZmxfY3hsX2NhY2hlX2J1ZmZlcl9yZWdpb24gKnJlZ2lvbikN Cj4gK3sNCj4gKwlpbnQgcmV0LCBwaW5uZWQ7DQo+ICsJdW5zaWduZWQgaW50IGZsYWdzID0gRk9M TF9MT05HVEVSTTsNCj4gKwljb25zdCBpbnQgbnBhZ2VzID0gUEZOX0RPV04ocmVnaW9uLT5sZW5n dGgpOw0KPiArDQo+ICsJcmV0ID0gYWNjb3VudF9sb2NrZWRfdm0oY3VycmVudC0+bW0sIG5wYWdl cywgdHJ1ZSk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKGN4bF9jYWNoZS0+ZGV2LCAi YWNjb3VudF9sb2NrZWRfdm0oKSBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KPiArCQlyZXR1cm4gcmV0 Ow0KPiArCX0NCj4gKw0KPiArCXJlZ2lvbi0+cGFnZXMgPSBrY2FsbG9jKG5wYWdlcywgc2l6ZW9m KHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIXJlZ2lvbi0+cGFnZXMpIHsN Cj4gKwkJcmV0ID0gLUVOT01FTTsNCj4gKwkJZ290byB1bmxvY2tfdm07DQo+ICsJfQ0KPiArDQo+ ICsJaWYgKHJlZ2lvbi0+ZmxhZ3MgJiBERkxfQ1hMX0JVRkZFUl9NQVBfV1JJVEFCTEUpDQo+ICsJ CWZsYWdzIHw9IEZPTExfV1JJVEU7DQo+ICsNCj4gKwlwaW5uZWQgPSBwaW5fdXNlcl9wYWdlc19m YXN0KHJlZ2lvbi0+dXNlcl9hZGRyLCBucGFnZXMsIGZsYWdzLCByZWdpb24tPnBhZ2VzKTsNCj4g KwlpZiAocGlubmVkID09IG5wYWdlcykNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwlyZXQgPSAt RUZBVUxUOw0KPiArCWlmIChwaW5uZWQgPiAwKQ0KPiArCQl1bnBpbl91c2VyX3BhZ2VzKHJlZ2lv bi0+cGFnZXMsIHBpbm5lZCk7DQo+ICsNCj4gKwlrZnJlZShyZWdpb24tPnBhZ2VzKTsNCj4gK3Vu bG9ja192bToNCj4gKwlhY2NvdW50X2xvY2tlZF92bShjdXJyZW50LT5tbSwgbnBhZ2VzLCBmYWxz ZSk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgY3hsX2NhY2hl X2RtYV9yZWdpb25fcmVtb3ZlKHN0cnVjdCBkZmxfY3hsX2NhY2hlICpjeGxfY2FjaGUsDQo+ICsJ CQkJCXN0cnVjdCBkZmxfY3hsX2NhY2hlX2J1ZmZlcl9yZWdpb24gKnJlZ2lvbikNCj4gK3sNCj4g KwlyYl9lcmFzZSgmcmVnaW9uLT5ub2RlLCAmY3hsX2NhY2hlLT5kbWFfcmVnaW9ucyk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBib29sIGRtYV9yZWdpb25fY2hlY2tfdXNlcl9hZGRyKHN0cnVjdCBk ZmxfY3hsX2NhY2hlX2J1ZmZlcl9yZWdpb24gKnJlZ2lvbiwgdTY0IHVzZXJfYWRkciwNCj4gKwkJ CQkgICAgICAgdTY0IHNpemUpDQo+ICt7DQo+ICsJaWYgKCFzaXplICYmIHJlZ2lvbi0+dXNlcl9h ZGRyICE9IHVzZXJfYWRkcikNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArDQo+ICsJcmV0dXJuIChy ZWdpb24tPnVzZXJfYWRkciA8PSB1c2VyX2FkZHIpICYmDQo+ICsJCShyZWdpb24tPmxlbmd0aCAr IHJlZ2lvbi0+dXNlcl9hZGRyID49IHVzZXJfYWRkciArIHNpemUpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgc3RydWN0IGRmbF9jeGxfY2FjaGVfYnVmZmVyX3JlZ2lvbioNCj4gK2N4bF9jYWNoZV9k bWFfcmVnaW9uX2ZpbmQoc3RydWN0IGRmbF9jeGxfY2FjaGUgKmN4bF9jYWNoZSwgdTY0IHVzZXJf YWRkciwgdTY0IHNpemUpDQo+ICt7DQo+ICsJc3RydWN0IHJiX25vZGUgKm5vZGUgPSBjeGxfY2Fj aGUtPmRtYV9yZWdpb25zLnJiX25vZGU7DQo+ICsNCj4gKwl3aGlsZSAobm9kZSkgew0KPiArCQlz dHJ1Y3QgZGZsX2N4bF9jYWNoZV9idWZmZXJfcmVnaW9uICpyZWdpb247DQo+ICsNCj4gKwkJcmVn aW9uID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBkZmxfY3hsX2NhY2hlX2J1ZmZlcl9yZWdp b24sIG5vZGUpOw0KPiArDQo+ICsJCWlmIChkbWFfcmVnaW9uX2NoZWNrX3VzZXJfYWRkcihyZWdp b24sIHVzZXJfYWRkciwgc2l6ZSkpDQo+ICsJCQlyZXR1cm4gcmVnaW9uOw0KPiArDQo+ICsJCWlm ICh1c2VyX2FkZHIgPCByZWdpb24tPnVzZXJfYWRkcikNCj4gKwkJCW5vZGUgPSBub2RlLT5yYl9s ZWZ0Ow0KPiArCQllbHNlIGlmICh1c2VyX2FkZHIgPiByZWdpb24tPnVzZXJfYWRkcikNCj4gKwkJ CW5vZGUgPSBub2RlLT5yYl9yaWdodDsNCj4gKwkJZWxzZQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgY3hsX2NhY2hl X2RtYV9yZWdpb25fYWRkKHN0cnVjdCBkZmxfY3hsX2NhY2hlICpjeGxfY2FjaGUsDQo+ICsJCQkJ ICAgIHN0cnVjdCBkZmxfY3hsX2NhY2hlX2J1ZmZlcl9yZWdpb24gKnJlZ2lvbikNCj4gK3sNCj4g KwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldywgKnBhcmVudCA9IE5VTEw7DQo+ICsNCj4gKwluZXcgPSAm Y3hsX2NhY2hlLT5kbWFfcmVnaW9ucy5yYl9ub2RlOw0KPiArDQo+ICsJd2hpbGUgKCpuZXcpIHsN Cj4gKwkJc3RydWN0IGRmbF9jeGxfY2FjaGVfYnVmZmVyX3JlZ2lvbiAqdGhpczsNCj4gKw0KPiAr CQl0aGlzID0gY29udGFpbmVyX29mKCpuZXcsIHN0cnVjdCBkZmxfY3hsX2NhY2hlX2J1ZmZlcl9y ZWdpb24sIG5vZGUpOw0KPiArCQlwYXJlbnQgPSAqbmV3Ow0KPiArDQo+ICsJCWlmIChkbWFfcmVn aW9uX2NoZWNrX3VzZXJfYWRkcih0aGlzLCByZWdpb24tPnVzZXJfYWRkciwgcmVnaW9uLT5sZW5n dGgpKQ0KPiArCQkJcmV0dXJuIC1FRVhJU1Q7DQo+ICsNCj4gKwkJaWYgKHJlZ2lvbi0+dXNlcl9h ZGRyIDwgdGhpcy0+dXNlcl9hZGRyKQ0KPiArCQkJbmV3ID0gJigoKm5ldyktPnJiX2xlZnQpOw0K PiArCQllbHNlIGlmIChyZWdpb24tPnVzZXJfYWRkciA+IHRoaXMtPnVzZXJfYWRkcikNCj4gKwkJ CW5ldyA9ICYoKCpuZXcpLT5yYl9yaWdodCk7DQo+ICsJCWVsc2UNCj4gKwkJCXJldHVybiAtRUVY SVNUOw0KPiArCX0NCj4gKw0KPiArCXJiX2xpbmtfbm9kZSgmcmVnaW9uLT5ub2RlLCBwYXJlbnQs IG5ldyk7DQo+ICsJcmJfaW5zZXJ0X2NvbG9yKCZyZWdpb24tPm5vZGUsICZjeGxfY2FjaGUtPmRt YV9yZWdpb25zKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZCBmaXh1cF9wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1 bnNpZ25lZCBsb25nIGVuZCkNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGFkZHI7DQo+ICsJcGdk X3QgKnBnZDsNCj4gKwlwNGRfdCAqcDRkOw0KPiArCXB1ZF90ICpwdWQ7DQo+ICsJcG1kX3QgKnBt ZDsNCj4gKwlwdGVfdCAqcHRlOw0KPiArDQo+ICsJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBl bmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7DQo+ICsJCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIp Ow0KPiArCQlpZiAocGdkX2JhZCgqcGdkKSB8fCBwZ2Rfbm9uZSgqcGdkKSkNCj4gKwkJCWNvbnRp bnVlOw0KPiArDQo+ICsJCXA0ZCA9IHA0ZF9vZmZzZXQocGdkLCBhZGRyKTsNCj4gKwkJaWYgKHA0 ZF9iYWQoKnA0ZCkgfHwgcDRkX25vbmUoKnA0ZCkpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiAr CQlwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgYWRkcik7DQo+ICsJCWlmIChwdWRfYmFkKCpwdWQpIHx8 IHB1ZF9ub25lKCpwdWQpKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJcG1kID0gcG1kX29m ZnNldChwdWQsIGFkZHIpOw0KPiArCQlpZiAocG1kX2JhZCgqcG1kKSB8fCBwbWRfbm9uZSgqcG1k KSkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBt ZCwgYWRkcik7DQo+ICsJCWlmICghcHRlX25vbmUoKnB0ZSkgJiYgcHRlX3ByZXNlbnQoKnB0ZSkp DQo+ICsJCQkqcHRlID0gcHRlX3dycHJvdGVjdCgqcHRlKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBsb25nIGN4bF9jYWNoZV9zZXRfcmVnaW9uX3JlYWRfb25seShzdHJ1Y3QgZGZsX2N4 bF9jYWNoZSAqY3hsX2NhY2hlLA0KPiArCQkJCQkgICBzdHJ1Y3QgZGZsX2N4bF9jYWNoZV9idWZm ZXJfcmVnaW9uICpyZWdpb24pDQo+ICt7DQo+ICsJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7 DQo+ICsJbG9uZyByZXQgPSAwOw0KPiArDQo+ICsJdm1hID0gdm1hX2xvb2t1cChjdXJyZW50LT5t bSwgcmVnaW9uLT51c2VyX2FkZHIpOw0KPiArCWlmIChJU19FUlIodm1hKSkgew0KPiArCQlyZXQg PSBQVFJfRVJSKHZtYSk7DQoNCkFzIHBvaW50ZWQgb3V0IGJ5IENvdmVyaXR5LCB2bWFfbG9va3Vw KCkgcmV0dXJucyBOVUxMIG9uIGVycm9yLCBub3QgYW4NCmVycm9yIHBvaW50ZXIsIHJlc29sdmVk IGluIGRvd25zdHJlYW0gWzFdIGNvbW1pdCAwZWVjMzVjZGRhMmIyICgiZnBnYToNCmRmbC1jeGwt Y2FjaGU6IGZpeCBjaGVjayBvZiByZXR1cm4gb2Ygdm1hX2xvb2t1cCgpIikuDQoNClsxXSBodHRw czovL2dpdGh1Yi5jb20vT0ZTL2xpbnV4LWRmbC9jb21taXQvMGVlYzM1Y2RkYTJiMjA5OTFiYmQ3 ZmEwMzJmOWNkMTJhMGRlNmY1Yg0KDQo+ICsJCWRldl9lcnIoY3hsX2NhY2hlLT5kZXYsICJ2bWFf bG9va3VwKCkgZmFpbGVkOiAlbGRcbiIsIHJldCk7DQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0K PiArDQo+ICsJbW1hcF93cml0ZV9sb2NrKGN1cnJlbnQtPm1tKTsNCj4gKw0KPiArCS8qIE1hcmsg dGhlIHBhZ2VzIGFzIG5vbi1jYWNoZWQgYW5kIHdyaXRlLXByb3RlY3RlZC4gKi8NCj4gKwl2bWEt PnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOw0KPiAr CXZtX2ZsYWdzX2NsZWFyKHZtYSwgVk1fV1JJVEUpOw0KPiArDQo+ICsJZml4dXBfcHRlcyhjdXJy ZW50LT5tbSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOw0KPiArDQo+ICsJbW1hcF93cml0 ZV91bmxvY2soY3VycmVudC0+bW0pOw0KPiArDQo+ICsJLyogRmx1c2ggYWxsIHJlbWFpbmluZyBj YWNoZSBlbnRyaWVzLiAqLw0KPiArCWRybV9jbGZsdXNoX3ZpcnRfcmFuZ2UocGFnZV9hZGRyZXNz KHJlZ2lvbi0+cGFnZXNbMF0pLCByZWdpb24tPmxlbmd0aCk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0 Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgbG9uZyBjeGxfY2FjaGVfaW9jdGxfbnVtYV9idWZmZXJf bWFwKHN0cnVjdCBkZmxfY3hsX2NhY2hlICpjeGxfY2FjaGUsIHZvaWQgX191c2VyICphcmcpDQo+ ICt7DQo+ICsJaW50IGkgPSAwOw0KPiArCXVuc2lnbmVkIGxvbmcgbWluc3ogPSAwOw0KPiArCWxv bmcgcmV0ID0gMDsNCj4gKwlzdHJ1Y3QgZGZsX2N4bF9jYWNoZV9idWZmZXJfbWFwIGRtYV9tYXA7 DQo+ICsJc3RydWN0IGRmbF9jeGxfY2FjaGVfYnVmZmVyX3JlZ2lvbiAqcmVnaW9uOw0KPiArDQo+ ICsJbWluc3ogPSBvZmZzZXRvZmVuZChzdHJ1Y3QgZGZsX2N4bF9jYWNoZV9idWZmZXJfbWFwLCBj c3JfYXJyYXkpOw0KPiArCWlmIChjb3B5X2Zyb21fdXNlcigmZG1hX21hcCwgYXJnLCBtaW5zeikp IHsNCj4gKwkJZGV2X2VycihjeGxfY2FjaGUtPmRldiwgImZhaWxzIHRvIGNvcHkgZnJvbSB1c2Vy IHNwYWNlIGJ1ZmZlclxuIik7DQo+ICsJCXJldHVybiAtRUZBVUxUOw0KPiArCX0NCj4gKwlpZiAo ZG1hX21hcC5hcmdzeiA8IG1pbnN6KSB7DQo+ICsJCWRldl9lcnIoY3hsX2NhY2hlLT5kZXYsICJp bnZhbGlkIGlvY3RsIGJ1ZmZlciBzaXplXG4iKTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJ fQ0KPiArDQo+ICsJLyogQ2hlY2sgSW5wdXRzLCBvbmx5IGFjY2VwdCBwYWdlLWFsaWduZWQgdXNl ciBtZW1vcnkgcmVnaW9uIHdpdGggdmFsaWQgbGVuZ3RoICovDQo+ICsJaWYgKCFQQUdFX0FMSUdO RUQoZG1hX21hcC51c2VyX2FkZHIpIHx8ICFQQUdFX0FMSUdORUQoZG1hX21hcC5sZW5ndGgpIHx8 DQo+ICsJICAgICEoZG1hX21hcC5sZW5ndGgpKSB7DQo+ICsJCWRldl9lcnIoY3hsX2NhY2hlLT5k ZXYsICJsZW5ndGggaXMgbm90IHBhZ2UtYWxpZ25lZCBvciB0aGUgbGVuZ3RoIGlzIHplcm9cbiIp Ow0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBDaGVjayBvdmVyZmxv dyAqLw0KPiArCWlmIChkbWFfbWFwLnVzZXJfYWRkciArIGRtYV9tYXAubGVuZ3RoIDwgZG1hX21h cC51c2VyX2FkZHIpIHsNCj4gKwkJZGV2X2VycihjeGxfY2FjaGUtPmRldiwgImRtYSBidWZmZXIg Y2hlY2sgb3ZlcmZsb3dcbiIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4g KwlyZWdpb24gPSBremFsbG9jKHNpemVvZigqcmVnaW9uKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYg KCFyZWdpb24pDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJcmVnaW9uLT5mbGFncyA9 IGRtYV9tYXAuZmxhZ3M7DQo+ICsJcmVnaW9uLT51c2VyX2FkZHIgPSBkbWFfbWFwLnVzZXJfYWRk cjsNCj4gKwlyZWdpb24tPmxlbmd0aCA9IGRtYV9tYXAubGVuZ3RoOw0KPiArDQo+ICsJLyogUGlu IHRoZSB1c2VyIG1lbW9yeSByZWdpb24gKi8NCj4gKwlyZXQgPSBjeGxfY2FjaGVfZG1hX3Bpbl9w YWdlcyhjeGxfY2FjaGUsIHJlZ2lvbik7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKGN4 bF9jYWNoZS0+ZGV2LCAiZmFpbGVkIHRvIHBpbiBwYWdlc1xuIik7DQo+ICsJCWdvdG8gZnJlZV9y ZWdpb247DQo+ICsJfQ0KPiArDQo+ICsJLyogT25seSBhY2NlcHQgY29udGludW91cyBwYWdlcywg cmV0dXJuIGVycm9yIGVsc2UgKi8NCj4gKwlpZiAoIWN4bF9jYWNoZV9jaGVja19jb250aW51b3Vz X3BhZ2VzKHJlZ2lvbi0+cGFnZXMsIHJlZ2lvbi0+bGVuZ3RoKSkgew0KPiArCQlkZXZfZXJyKGN4 bF9jYWNoZS0+ZGV2LCAicGFnZXMgYXJlIG5vdCBjb250aW51b3VzXG4iKTsNCj4gKwkJcmV0ID0g LUVJTlZBTDsNCj4gKwkJZ290byBvdXRfdW5waW5fcGFnZXM7DQo+ICsJfQ0KPiArDQo+ICsJaWYg KCEocmVnaW9uLT5mbGFncyAmIERGTF9DWExfQlVGRkVSX01BUF9XUklUQUJMRSkpIHsNCj4gKwkJ cmV0ID0gY3hsX2NhY2hlX3NldF9yZWdpb25fcmVhZF9vbmx5KGN4bF9jYWNoZSwgcmVnaW9uKTsN Cj4gKwkJaWYgKHJldCkNCj4gKwkJCWdvdG8gb3V0X3VucGluX3BhZ2VzOw0KPiArCX0NCj4gKw0K PiArCXJldCA9IGN4bF9jYWNoZV9kbWFfcmVnaW9uX2FkZChjeGxfY2FjaGUsIHJlZ2lvbik7DQo+ ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKGN4bF9jYWNoZS0+ZGV2LCAiZmFpbGVkIHRvIGFk ZCBkbWEgcmVnaW9uXG4iKTsNCj4gKwkJZ290byBvdXRfdW5waW5fcGFnZXM7DQo+ICsJfQ0KPiAr DQo+ICsJcmVnaW9uLT5waHlzID0gcGFnZV90b19waHlzKHJlZ2lvbi0+cGFnZXNbMF0pOw0KPiAr DQo+ICsJZm9yIChpID0gMDsgaSA8IERGTF9BUlJBWV9NQVhfU0laRTsgaSsrKSB7DQo+ICsJCWlm IChkbWFfbWFwLmNzcl9hcnJheVtpXSAmJiBkbWFfbWFwLmNzcl9hcnJheVtpXSA8IGN4bF9jYWNo ZS0+cmluZm8uc2l6ZSkNCj4gKwkJCXdyaXRlcShyZWdpb24tPnBoeXMsIGN4bF9jYWNoZS0+bW1p b19iYXNlICsgZG1hX21hcC5jc3JfYXJyYXlbaV0pOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAw Ow0KPiArDQo+ICtvdXRfdW5waW5fcGFnZXM6DQo+ICsJY3hsX2NhY2hlX3VucGluX3BhZ2VzKGN4 bF9jYWNoZS0+ZGV2LCAmcmVnaW9uLT5wYWdlcywgcmVnaW9uLT5sZW5ndGgpOw0KPiArZnJlZV9y ZWdpb246DQo+ICsJa2ZyZWUocmVnaW9uKTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgbG9uZyBjeGxfY2FjaGVfaW9jdGxfbnVtYV9idWZmZXJfdW5tYXAoc3RydWN0IGRm bF9jeGxfY2FjaGUgKmN4bF9jYWNoZSwgdm9pZCBfX3VzZXIgKmFyZykNCj4gK3sNCj4gKwl1bnNp Z25lZCBsb25nIG1pbnN6ID0gMDsNCj4gKwlsb25nIHJldCA9IDA7DQo+ICsJaW50IGkgPSAwOw0K PiArCXN0cnVjdCBkZmxfY3hsX2NhY2hlX2J1ZmZlcl91bm1hcCBkbWFfdW5tYXA7DQo+ICsJc3Ry dWN0IGRmbF9jeGxfY2FjaGVfYnVmZmVyX3JlZ2lvbiAqcmVnaW9uOw0KPiArDQo+ICsJbWluc3og PSBvZmZzZXRvZmVuZChzdHJ1Y3QgZGZsX2N4bF9jYWNoZV9idWZmZXJfdW5tYXAsIGNzcl9hcnJh eSk7DQo+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZkbWFfdW5tYXAsIGFyZywgbWluc3opKSB7DQo+ ICsJCWRldl9lcnIoY3hsX2NhY2hlLT5kZXYsICJmYWlscyB0byBjb3B5IGZyb20gdXNlciBzcGFj ZSBidWZmZXJcbiIpOw0KPiArCQlyZXR1cm4gLUVGQVVMVDsNCj4gKwl9DQo+ICsJaWYgKGRtYV91 bm1hcC5hcmdzeiA8IG1pbnN6KSB7DQo+ICsJCWRldl9lcnIoY3hsX2NhY2hlLT5kZXYsICJpbnZh bGlkIGlvY3RsIGJ1ZmZlciBzaXplXG4iKTsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0K PiArDQo+ICsJcmVnaW9uID0gY3hsX2NhY2hlX2RtYV9yZWdpb25fZmluZChjeGxfY2FjaGUsIGRt YV91bm1hcC51c2VyX2FkZHIsIGRtYV91bm1hcC5sZW5ndGgpOw0KPiArCWlmICghcmVnaW9uKSB7 DQo+ICsJCWRldl9lcnIoY3hsX2NhY2hlLT5kZXYsICJmYWlscyB0byBmaW5kIGJ1ZmZlclxuIik7 DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCWN4bF9jYWNoZV9kbWFfcmVn aW9uX3JlbW92ZShjeGxfY2FjaGUsIHJlZ2lvbik7DQo+ICsJY3hsX2NhY2hlX3VucGluX3BhZ2Vz KGN4bF9jYWNoZS0+ZGV2LCAmcmVnaW9uLT5wYWdlcywgcmVnaW9uLT5sZW5ndGgpOw0KPiArDQo+ ICsJZm9yIChpID0gMDsgaSA8IERGTF9BUlJBWV9NQVhfU0laRTsgaSsrKSB7DQo+ICsJCWlmIChk bWFfdW5tYXAuY3NyX2FycmF5W2ldICYmIGRtYV91bm1hcC5jc3JfYXJyYXlbaV0gPCBjeGxfY2Fj aGUtPnJpbmZvLnNpemUpDQo+ICsJCQl3cml0ZXEoMCwgY3hsX2NhY2hlLT5tbWlvX2Jhc2UgKyBk bWFfdW5tYXAuY3NyX2FycmF5W2ldKTsNCj4gKwl9DQo+ICsNCj4gKwlrZnJlZShyZWdpb24pOw0K PiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBsb25nIGRmbF9jeGxfY2FjaGVf aW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcg YXJnKQ0KPiArew0KPiArCXN0cnVjdCBkZmxfY3hsX2NhY2hlICpjeGxfY2FjaGUgPSBmaWxwLT5w cml2YXRlX2RhdGE7DQo+ICsNCj4gKwlzd2l0Y2ggKGNtZCkgew0KPiArCWNhc2UgREZMX0ZQR0Ff R0VUX0FQSV9WRVJTSU9OOg0KPiArCQlyZXR1cm4gREZMX0ZQR0FfR0VUX0FQSV9WRVJTSU9OOw0K PiArCWNhc2UgREZMX0ZQR0FfQ0hFQ0tfRVhURU5TSU9OOg0KPiArCQlyZXR1cm4gY3hsX2NhY2hl X2lvY3RsX2NoZWNrX2V4dGVuc2lvbihjeGxfY2FjaGUsIGFyZyk7DQo+ICsJY2FzZSBERkxfQ1hM X0NBQ0hFX0dFVF9SRUdJT05fSU5GTzoNCj4gKwkJcmV0dXJuIGN4bF9jYWNoZV9pb2N0bF9nZXRf cmVnaW9uX2luZm8oY3hsX2NhY2hlLCAodm9pZCBfX3VzZXIgKilhcmcpOw0KPiArCWNhc2UgREZM X0NYTF9DQUNIRV9OVU1BX0JVRkZFUl9NQVA6DQo+ICsJCXJldHVybiBjeGxfY2FjaGVfaW9jdGxf bnVtYV9idWZmZXJfbWFwKGN4bF9jYWNoZSwgKHZvaWQgX191c2VyICopYXJnKTsNCj4gKwljYXNl IERGTF9DWExfQ0FDSEVfTlVNQV9CVUZGRVJfVU5NQVA6DQo+ICsJCXJldHVybiBjeGxfY2FjaGVf aW9jdGxfbnVtYV9idWZmZXJfdW5tYXAoY3hsX2NhY2hlLCAodm9pZCBfX3VzZXIgKilhcmcpOw0K PiArCWRlZmF1bHQ6DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gK30NCj4gKw0KPiAr c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBjeGxfY2FjaGVfdm1hX29w cyA9IHsNCj4gKyNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QNCj4gKwkuYWNjZXNzID0g Z2VuZXJpY19hY2Nlc3NfcGh5cywNCj4gKyNlbmRpZg0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlu dCBkZmxfY3hsX2NhY2hlX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hKQ0KPiArew0KPiArCXN0cnVjdCBkZmxfY3hsX2NhY2hlICpjeGxfY2FjaGUgPSBm aWxwLT5wcml2YXRlX2RhdGE7DQo+ICsJdTY0IHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1f c3RhcnQ7DQo+ICsJdTY0IG9mZnNldDsNCj4gKw0KPiArCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBW TV9TSEFSRUQpKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWlmICghKGN4bF9jYWNo ZS0+cmluZm8uZmxhZ3MgJiBERkxfQ1hMX0NBQ0hFX1JFR0lPTl9NTUFQKSkNCj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSAmJiAhKGN4 bF9jYWNoZS0+cmluZm8uZmxhZ3MgJiBERkxfQ1hMX0NBQ0hFX1JFR0lPTl9SRUFEKSkNCj4gKwkJ cmV0dXJuIC1FUEVSTTsNCj4gKw0KPiArCWlmICgodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSAm JiAhKGN4bF9jYWNoZS0+cmluZm8uZmxhZ3MgJiBERkxfQ1hMX0NBQ0hFX1JFR0lPTl9XUklURSkp DQo+ICsJCXJldHVybiAtRVBFUk07DQo+ICsNCj4gKwlvZmZzZXQgPSBQRk5fUEhZUyh2bWEtPnZt X3Bnb2ZmKTsNCj4gKw0KPiArCS8qIFN1cHBvcnQgZGVidWcgYWNjZXNzIHRvIHRoZSBtYXBwaW5n ICovDQo+ICsJdm1hLT52bV9vcHMgPSAmY3hsX2NhY2hlX3ZtYV9vcHM7DQo+ICsNCj4gKwl2bWEt PnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOw0KPiAr DQo+ICsJcmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsDQo+ICsJCQkg ICAgICAgUEZOX0RPV04oY3hsX2NhY2hlLT5kZGV2LT5tbWlvX3Jlcy5zdGFydCArDQo+ICsJCQkg ICAgICAgKG9mZnNldCAtIGN4bF9jYWNoZS0+cmluZm8ub2Zmc2V0KSksDQo+ICsJCQkgICAgICAg c2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBjeGxf Y2FjaGVfZG1hX3JlZ2lvbl9kZXN0cm95KHN0cnVjdCBkZmxfY3hsX2NhY2hlICpjeGxfY2FjaGUp DQo+ICt7DQo+ICsJc3RydWN0IHJiX25vZGUgKm5vZGUgPSByYl9maXJzdCgmY3hsX2NhY2hlLT5k bWFfcmVnaW9ucyk7DQo+ICsJc3RydWN0IGRmbF9jeGxfY2FjaGVfYnVmZmVyX3JlZ2lvbiAqcmVn aW9uOw0KPiArDQo+ICsJd2hpbGUgKG5vZGUpIHsNCj4gKwkJcmVnaW9uID0gY29udGFpbmVyX29m KG5vZGUsIHN0cnVjdCBkZmxfY3hsX2NhY2hlX2J1ZmZlcl9yZWdpb24sIG5vZGUpOw0KPiArDQo+ ICsJCXJiX2VyYXNlKG5vZGUsICZjeGxfY2FjaGUtPmRtYV9yZWdpb25zKTsNCj4gKw0KPiArCQlp ZiAocmVnaW9uLT5wYWdlcykNCj4gKwkJCWN4bF9jYWNoZV91bnBpbl9wYWdlcyhjeGxfY2FjaGUt PmRldiwgJnJlZ2lvbi0+cGFnZXMsIHJlZ2lvbi0+bGVuZ3RoKTsNCj4gKw0KPiArCQlub2RlID0g cmJfbmV4dChub2RlKTsNCj4gKwkJa2ZyZWUocmVnaW9uKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgZGZsX2N4bF9jYWNoZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0 cnVjdCBmaWxlICpmaWxwKQ0KPiArew0KPiArCXN0cnVjdCBkZmxfY3hsX2NhY2hlICpjeGxfY2Fj aGUgPSBmaWxwLT5wcml2YXRlX2RhdGE7DQo+ICsNCj4gKwljeGxfY2FjaGVfZG1hX3JlZ2lvbl9k ZXN0cm95KGN4bF9jYWNoZSk7DQo+ICsJYXRvbWljX3NldCgmY3hsX2NhY2hlLT5vcGVuZWQsIDAp Ow0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBkZmxfY3hsX2NhY2hlX2ZvcHMgPSB7DQo+ICsJLm93bmVyID0gVEhJU19NT0RV TEUsDQo+ICsJLm9wZW4gPSBkZmxfY3hsX2NhY2hlX29wZW4sDQo+ICsJLnJlbGVhc2UgPSBkZmxf Y3hsX2NhY2hlX3JlbGVhc2UsDQo+ICsJLnVubG9ja2VkX2lvY3RsID0gZGZsX2N4bF9jYWNoZV9p b2N0bCwNCj4gKwkubW1hcCA9IGRmbF9jeGxfY2FjaGVfbW1hcCwNCj4gK307DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIGN4bF9jYWNoZV9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt7 DQo+ICsJc3RydWN0IGRmbF9jeGxfY2FjaGUgKmN4bF9jYWNoZSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOw0KPiArDQo+ICsJY2Rldl9kZWwoJmN4bF9jYWNoZS0+Y2Rldik7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkIGN4bF9jYWNoZV9jaGFyZGV2X3Vpbml0KHN0cnVjdCBkZmxfY3hsX2NhY2hl ICpjeGxfY2FjaGUpDQo+ICt7DQo+ICsJZGV2aWNlX2Rlc3Ryb3koZGZsX2N4bF9jYWNoZV9jbGFz cywNCj4gKwkJICAgICAgIE1LREVWKE1BSk9SKGRmbF9jeGxfY2FjaGVfZGV2dCksIGN4bF9jYWNo ZS0+aWQpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBjeGxfY2FjaGVfY2hhcmRldl9pbml0 KHN0cnVjdCBkZmxfY3hsX2NhY2hlICpjeGxfY2FjaGUsDQo+ICsJCQkJICBzdHJ1Y3QgZGZsX2Rl dmljZSAqZGRldiwNCj4gKwkJCQkgIHZvaWQgX19pb21lbSAqbW1pb19iYXNlKQ0KPiArew0KPiAr CWludCByZXQ7DQo+ICsNCj4gKwlkZXZfc2V0X2RydmRhdGEoJmRkZXYtPmRldiwgY3hsX2NhY2hl KTsNCj4gKwljeGxfY2FjaGUtPmRkZXYgPSBkZGV2Ow0KPiArCWN4bF9jYWNoZS0+bW1pb19iYXNl ID0gbW1pb19iYXNlOw0KPiArCWN4bF9jYWNoZS0+aWQgPSBkZmxfY3hsX2NhY2hlX2RldmljZXMr KzsNCj4gKwljeGxfY2FjaGUtPmRtYV9yZWdpb25zID0gUkJfUk9PVDsNCj4gKw0KPiArCWN4bF9j YWNoZS0+cmluZm8uYXJnc3ogPSBzaXplb2Yoc3RydWN0IGRmbF9jeGxfY2FjaGVfcmVnaW9uX2lu Zm8pOw0KPiArCWN4bF9jYWNoZS0+cmluZm8uZmxhZ3MgPSBERkxfQ1hMX0NBQ0hFX1JFR0lPTl9S RUFEIHwgREZMX0NYTF9DQUNIRV9SRUdJT05fV1JJVEUgfA0KPiArCQkJICAgREZMX0NYTF9DQUNI RV9SRUdJT05fTU1BUDsNCj4gKwljeGxfY2FjaGUtPnJpbmZvLnNpemUgPSByZXNvdXJjZV9zaXpl KCZkZGV2LT5tbWlvX3Jlcyk7DQo+ICsJY3hsX2NhY2hlLT5yaW5mby5vZmZzZXQgPSAwOw0KPiAr DQo+ICsJY3hsX2NhY2hlLT5kZXYgPSBkZXZpY2VfY3JlYXRlKGRmbF9jeGxfY2FjaGVfY2xhc3Ms ICZkZGV2LT5kZXYsDQo+ICsJCQkJICAgICAgIE1LREVWKE1BSk9SKGRmbF9jeGxfY2FjaGVfZGV2 dCksIGN4bF9jYWNoZS0+aWQpLA0KPiArCQkJCSAgICAgICBjeGxfY2FjaGUsIERGTF9DWExfQ0FD SEVfRFJJVkVSX05BTUUgIi4lZCIsDQo+ICsJCQkJICAgICAgIGN4bF9jYWNoZS0+aWQpOw0KPiAr DQo+ICsJaWYgKElTX0VSUihjeGxfY2FjaGUtPmRldikpIHsNCj4gKwkJcmV0ID0gUFRSX0VSUihj eGxfY2FjaGUtPmRldik7DQo+ICsJCWRldl9lcnIoJmRkZXYtPmRldiwgImRldmljZV9jcmVhdGUg ZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4gKwkJY3hsX2NhY2hlLT5kZXYgPSBOVUxMOw0KPiArCQly ZXR1cm4gcmV0Ow0KPiArCX0NCj4gKwljeGxfY2FjaGUtPmRldi0+cmVsZWFzZSA9IGN4bF9jYWNo ZV9kZXZfcmVsZWFzZTsNCj4gKw0KPiArCWNkZXZfaW5pdCgmY3hsX2NhY2hlLT5jZGV2LCAmZGZs X2N4bF9jYWNoZV9mb3BzKTsNCj4gKwljeGxfY2FjaGUtPmNkZXYub3duZXIgPSBUSElTX01PRFVM RTsNCj4gKwljeGxfY2FjaGUtPmNkZXYub3BzID0gJmRmbF9jeGxfY2FjaGVfZm9wczsNCj4gKw0K PiArCXJldCA9IGNkZXZfYWRkKCZjeGxfY2FjaGUtPmNkZXYsIGN4bF9jYWNoZS0+ZGV2LT5kZXZ0 LCAxKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlkZXZfZXJyKGN4bF9jYWNoZS0+ZGV2LCAiY2Rldl9h ZGQgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgZGZsX2N4bF9jYWNoZV9wcm9iZShzdHJ1Y3QgZGZsX2RldmljZSAqZGRl dikNCj4gK3sNCj4gKwlpbnQgcmV0ID0gMDsNCj4gKwl2b2lkIF9faW9tZW0gKm1taW9fYmFzZTsN Cj4gKwlzdHJ1Y3QgZGZsX2N4bF9jYWNoZSAqY3hsX2NhY2hlOw0KPiArDQo+ICsJZ3VhcmQobXV0 ZXgpKCZkZmxfY3hsX2NhY2hlX2NsYXNzX2xvY2spOw0KPiArDQo+ICsJaWYgKCFkZmxfY3hsX2Nh Y2hlX2NsYXNzKSB7DQo+ICsJCWRmbF9jeGxfY2FjaGVfY2xhc3MgPSBjbGFzc19jcmVhdGUoREZM X0NYTF9DQUNIRV9EUklWRVJfTkFNRSk7DQo+ICsJCWlmIChJU19FUlIoZGZsX2N4bF9jYWNoZV9j bGFzcykpIHsNCj4gKwkJCXJldCA9IFBUUl9FUlIoZGZsX2N4bF9jYWNoZV9jbGFzcyk7DQo+ICsJ CQlkZmxfY3hsX2NhY2hlX2NsYXNzID0gTlVMTDsNCj4gKwkJCWRldl9lcnJfcHJvYmUoJmRkZXYt PmRldiwgcmV0LCAiY2xhc3NfY3JlYXRlIGZhaWxlZFxuIik7DQo+ICsJCQlyZXR1cm4gcmV0Ow0K PiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJaWYgKCFNQUpPUihkZmxfY3hsX2NhY2hlX2RldnQpKSB7 DQo+ICsJCXJldCA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRmbF9jeGxfY2FjaGVfZGV2dCwgMCwN Cj4gKwkJCQkJICBNSU5PUk1BU0ssDQo+ICsJCQkJCSAgREZMX0NYTF9DQUNIRV9EUklWRVJfTkFN RSk7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCWRldl9lcnJfcHJvYmUoJmRkZXYtPmRldiwgcmV0 LCAiYWxsb2NfY2hyZGV2X3JlZ2lvbiBmYWlsZWRcbiIpOw0KPiArCQkJZGZsX2N4bF9jYWNoZV9k ZXZ0ID0gTUtERVYoMCwgMCk7DQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArCQl9DQo+ICsJfQ0KPiAr DQo+ICsJbW1pb19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZkZGV2LT5kZXYsICZkZGV2 LT5tbWlvX3Jlcyk7DQo+ICsJaWYgKElTX0VSUihtbWlvX2Jhc2UpKQ0KPiArCQlyZXR1cm4gUFRS X0VSUihtbWlvX2Jhc2UpOw0KPiArDQo+ICsJY3hsX2NhY2hlID0gZGV2bV9remFsbG9jKCZkZGV2 LT5kZXYsIHNpemVvZigqY3hsX2NhY2hlKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFjeGxfY2Fj aGUpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJcmV0ID0gY3hsX2NhY2hlX2NoYXJk ZXZfaW5pdChjeGxfY2FjaGUsIGRkZXYsIG1taW9fYmFzZSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJ ZGV2X2Vycl9wcm9iZSgmZGRldi0+ZGV2LCByZXQsICJjeGxfY2FjaGVfY2hhcmRldl9pbml0IGZh aWxlZFxuIik7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZCBkZmxfY3hsX2NhY2hlX3JlbW92ZShzdHJ1Y3QgZGZsX2RldmljZSAqZGRldikNCj4gK3sNCj4g KwlzdHJ1Y3QgZGZsX2N4bF9jYWNoZSAqY3hsX2NhY2hlID0gZGV2X2dldF9kcnZkYXRhKCZkZGV2 LT5kZXYpOw0KPiArDQo+ICsJZ3VhcmQobXV0ZXgpKCZkZmxfY3hsX2NhY2hlX2NsYXNzX2xvY2sp Ow0KPiArCWN4bF9jYWNoZV9jaGFyZGV2X3Vpbml0KGN4bF9jYWNoZSk7DQo+ICsNCj4gKwlpZiAo ZGZsX2N4bF9jYWNoZV9kZXZpY2VzLS0gPT0gMCkgew0KPiArCQlpZiAoZGZsX2N4bF9jYWNoZV9j bGFzcykgew0KPiArCQkJY2xhc3NfZGVzdHJveShkZmxfY3hsX2NhY2hlX2NsYXNzKTsNCj4gKwkJ CWRmbF9jeGxfY2FjaGVfY2xhc3MgPSBOVUxMOw0KPiArCQl9DQo+ICsNCj4gKwkJaWYgKE1BSk9S KGRmbF9jeGxfY2FjaGVfZGV2dCkpIHsNCj4gKwkJCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihk ZmxfY3hsX2NhY2hlX2RldnQsIE1JTk9STUFTSyk7DQo+ICsJCQlkZmxfY3hsX2NhY2hlX2RldnQg PSBNS0RFVigwLCAwKTsNCj4gKwkJfQ0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkZmxfZGV2aWNlX2lkIGRmbF9jeGxfY2FjaGVfaWRzW10gPSB7DQo+ICsJeyBGTUVf SUQsIEZNRV9GRUFUVVJFX0lEX0NYTF9DQUNIRSB9LA0KPiArCXsgfQ0KPiArfTsNCj4gK01PRFVM RV9ERVZJQ0VfVEFCTEUoZGZsLCBkZmxfY3hsX2NhY2hlX2lkcyk7DQo+ICsNCj4gK3N0YXRpYyBz dHJ1Y3QgZGZsX2RyaXZlciBkZmxfY3hsX2NhY2hlX2RyaXZlciA9IHsNCj4gKwkuZHJ2CT0gew0K PiArCQkubmFtZQk9IERGTF9DWExfQ0FDSEVfRFJJVkVSX05BTUUsDQo+ICsJfSwNCj4gKwkuaWRf dGFibGUgPSBkZmxfY3hsX2NhY2hlX2lkcywNCj4gKwkucHJvYmUgICA9IGRmbF9jeGxfY2FjaGVf cHJvYmUsDQo+ICsJLnJlbW92ZSA9IGRmbF9jeGxfY2FjaGVfcmVtb3ZlLA0KPiArfTsNCj4gK21v ZHVsZV9kZmxfZHJpdmVyKGRmbF9jeGxfY2FjaGVfZHJpdmVyKTsNCj4gKw0KPiArTU9EVUxFX0RF U0NSSVBUSU9OKCJERkwgQ1hMIENhY2hlIGRyaXZlciIpOw0KPiArTU9EVUxFX0FVVEhPUigiSW50 ZWwgQ29ycG9yYXRpb24iKTsNCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvdWFwaS9saW51eC9mcGdhLWRmbC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2Zw Z2EtZGZsLmgNCj4gaW5kZXggMTYyMWIwNzdiZjIxLi44NjZmNTBiOTllYjYgMTAwNjQ0DQo+IC0t LSBhL2luY2x1ZGUvdWFwaS9saW51eC9mcGdhLWRmbC5oDQo+ICsrKyBiL2luY2x1ZGUvdWFwaS9s aW51eC9mcGdhLWRmbC5oDQo+IEBAIC0zMSw2ICszMSw3IEBADQo+ICAjZGVmaW5lIERGTF9GUEdB X0JBU0UgMA0KPiAgI2RlZmluZSBERkxfUE9SVF9CQVNFIDB4NDANCj4gICNkZWZpbmUgREZMX0ZN RV9CQVNFIDB4ODANCj4gKyNkZWZpbmUgREZMX0NYTF9DQUNIRV9CQVNFIDB4QTANCj4gIA0KPiAg LyogQ29tbW9uIElPQ1RMcyBmb3IgYm90aCBGTUUgYW5kIEFGVSBmaWxlIGRlc2NyaXB0b3IgKi8N Cj4gIA0KPiBAQCAtMjc2LDQgKzI3NywxMDEgQEAgc3RydWN0IGRmbF9mcGdhX2ZtZV9wb3J0X3By IHsNCj4gIAkJCQkJICAgICBERkxfRk1FX0JBU0UgKyA0LAlcDQo+ICAJCQkJCSAgICAgc3RydWN0 IGRmbF9mcGdhX2lycV9zZXQpDQo+ICANCj4gKyAvKioNCj4gKyAgKiBERkxfQ1hMX0NBQ0hFX0dF VF9SRUdJT05fSU5GTyAtIF9JT1dSKERGTF9GUEdBX01BR0lDLCBERkxfQ1hMX0NBQ0hFX0JBU0Ug KyAwLA0KPiArICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZGZsX2N4bF9jYWNoZV9yZWdpb25faW5mbykNCj4gKyAgKg0KPiArICAqIFJldHJpZXZlIGluZm9y bWF0aW9uIGFib3V0IGEgZGV2aWNlIG1lbW9yeSByZWdpb24uDQo+ICsgICogQ2FsbGVyIHByb3Zp ZGVzIHN0cnVjdCBkZmxfY3hsX2NhY2hlX3JlZ2lvbl9pbmZvIHdpdGggZmxhZ3MuDQo+ICsgICog RHJpdmVyIHJldHVybnMgdGhlIHJlZ2lvbiBpbmZvIGluIG90aGVyIGZpZWxkcy4NCj4gKyAgKiBS ZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuDQo+ICsgICovDQo+ICsNCg0K Tml0OiBvbmUgc3BhY2Ugb2YgaW5kZW50YXRpb24gY2FuIGJlIHJlbW92ZWQuDQoNCj4gKyNkZWZp bmUgREZMX0NYTF9DQUNIRV9HRVRfUkVHSU9OX0lORk8gX0lPKERGTF9GUEdBX01BR0lDLCBERkxf Q1hMX0NBQ0hFX0JBU0UgKyAwKQ0KPiArDQo+ICsgIC8qKg0KPiArICAgKiBzdHJ1Y3QgZGZsX2N4 bF9jYWNoZV9yZWdpb25faW5mbyAtIENYTCBjYWNoZSByZWdpb24gaW5mb3JtYXRpb24NCj4gKyAg ICogQGFyZ3N6OiBzdHJ1Y3R1cmUgbGVuZ3RoDQo+ICsgICAqIEBmbGFnczogYWNjZXNzIHBlcm1p c3Npb24NCj4gKyAgICogQHNpemU6IHJlZ2lvbiBzaXplIChieXRlcykNCj4gKyAgICogQG9mZnNl dDogcmVnaW9uIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGRldmljZSBmZA0KPiArICAgKg0KPiArICAg KiB0byByZXRyaWV2ZSAgaW5mb3JtYXRpb24gYWJvdXQgYSBkZXZpY2UgbWVtb3J5IHJlZ2lvbg0K PiArICAgKi8NCg0KTml0OiB0d28gc3BhY2VzIG9mIGluZGVudGF0aW9uIGNhbiBiZSByZW1vdmVk Lg0KDQpUaGFua3MsDQpQZXRlcg0KDQo+ICtzdHJ1Y3QgZGZsX2N4bF9jYWNoZV9yZWdpb25faW5m byB7DQo+ICsJX191MzIgYXJnc3o7DQo+ICsJX191MzIgZmxhZ3M7DQo+ICsjZGVmaW5lIERGTF9D WExfQ0FDSEVfUkVHSU9OX1JFQUQJX0JJVFVMKDApDQo+ICsjZGVmaW5lIERGTF9DWExfQ0FDSEVf UkVHSU9OX1dSSVRFCV9CSVRVTCgxKQ0KPiArI2RlZmluZSBERkxfQ1hMX0NBQ0hFX1JFR0lPTl9N TUFQCV9CSVRVTCgyKQ0KPiArCV9fdTY0IHNpemU7DQo+ICsJX191NjQgb2Zmc2V0Ow0KPiArfTsN Cj4gKw0KPiArLyoqDQo+ICsgKiBERkxfQ1hMX0NBQ0hFX05VTUFfQlVGRkVSX01BUCAtIF9JT1dS KERGTF9GUEdBX01BR0lDLCBERkxfQ1hMX0NBQ0hFX0JBU0UgKyAxLA0KPiArICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZmxfY3hsX2NhY2hlX2J1ZmZlcl9t YXApDQo+ICsgKg0KPiArICogTWFwIHRoZSB1c2VyIG1lbW9yeSBwZXIgdXNlcl9hZGRyLCBsZW5n dGggYW5kIG51bWEgbm9kZSB3aGljaCBhcmUNCj4gKyAqIHByb3ZpZGVkIGJ5IGNhbGxlci4gVGhl IGRyaXZlciBhbGxvY2F0ZXMgbWVtb3J5IG9uIHRoZSBudW1hIG5vZGUsDQo+ICsgKiBjb252ZXJ0 cyB0aGUgdXNlcidzIHZpcnR1YWwgYWRkcmVzc3RvIGEgY29udGludW91cyBwaHlzaWNhbCBhZGRy ZXNzLA0KPiArICogYW5kIHdyaXRlcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyB0byB0aGUgY3hsIGNh Y2hlIHJlYWQvd3JpdGUgYWRkcmVzcyB0YWJsZSBDU1IuDQo+ICsgKg0KPiArICogVGhpcyBpbnRl cmZhY2Ugb25seSBhY2NlcHRzIHBhZ2Utc2l6ZSBhbGlnbmVkIHVzZXIgbWVtb3J5IGZvciBtYXBw aW5nLg0KPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLg0KPiAr ICovDQo+ICsNCj4gKyNkZWZpbmUgREZMX0FSUkFZX01BWF9TSVpFICAgMHgxMA0KPiArDQo+ICsj ZGVmaW5lIERGTF9DWExfQ0FDSEVfTlVNQV9CVUZGRVJfTUFQICAgIF9JTyhERkxfRlBHQV9NQUdJ QywgIERGTF9DWExfQ0FDSEVfQkFTRSArIDEpDQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IGRm bF9jeGxfY2FjaGVfYnVmZmVyX21hcCAtIG1hcHMgdXNlciBhZGRyZXNzIHRvIHBoeXNpY2FsIGFk ZHJlc3MuDQo+ICsgKiBAYXJnc3o6IHN0cnVjdHVyZSBsZW5ndGgNCj4gKyAqIEBmbGFnczogZmxh Z3MNCj4gKyAqIEB1c2VyX2FkZHI6IHVzZXIgbW1hcCB2aXJ0dWFsIGFkZHJlc3MNCj4gKyAqIEBs ZW5ndGg6IGxlbmd0aCBvZiBtYXBwaW5nIChieXRlcykNCj4gKyAqIEBjc3JfYXJyYXk6IGFycmF5 IG9mIHJlZ2lvbiBhZGRyZXNzIG9mZnNldA0KPiArICoNCj4gKyAqIG1hcHMgdXNlciBhbGxvY2F0 ZWQgdmlydHVhbCBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MuDQo+ICsgKi8NCj4gK3N0cnVj dCBkZmxfY3hsX2NhY2hlX2J1ZmZlcl9tYXAgew0KPiArCV9fdTMyIGFyZ3N6Ow0KPiArI2RlZmlu ZSBERkxfQ1hMX0JVRkZFUl9NQVBfV1JJVEFCTEUJMQ0KPiArCV9fdTMyIGZsYWdzOw0KPiArCV9f dTY0IHVzZXJfYWRkcjsNCj4gKwlfX3U2NCBsZW5ndGg7DQo+ICsJX191NjQgY3NyX2FycmF5W0RG TF9BUlJBWV9NQVhfU0laRV07DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIERGTF9DWExfQ0FD SEVfTlVNQV9CVUZGRVJfVU5NQVAgLSBfSU9XUihERkxfRlBHQV9NQUdJQywgREZMX0NYTF9DQUNI RV9CQVNFICsgMSwNCj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZGZsX2N4bF9jYWNoZV9idWZmZXJfdW5tYXApDQo+ICsgKg0KPiArICogVW5tYXBzIHRo ZSB1c2VyIG1lbW9yeSBwZXIgdXNlcl9hZGRyIGFuZCBsZW5ndGggd2hpY2ggYXJlIHByb3ZpZGVk IGJ5IGNhbGxlcg0KPiArICogVGhlIGRyaXZlciBkZWxldGVzIHRoZSBwaHlzaWNhbCBwYWdlcyBv ZiB0aGUgdXNlciBhZGRyZXNzIGFuZCB3cml0ZXMgYSB6ZXJvDQo+ICsgKiB0byB0aGUgcmVhZC93 cml0ZSBhZGRyZXNzIHRhYmxlIENTUi4NCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJy bm8gb24gZmFpbHVyZS4NCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIERGTF9DWExfQ0FDSEVfTlVN QV9CVUZGRVJfVU5NQVAgIF9JTyhERkxfRlBHQV9NQUdJQywgIERGTF9DWExfQ0FDSEVfQkFTRSAr IDIpDQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IGRmbF9jeGxfY2FjaGVfYnVmZmVyX3VubWFw IC0gdW5tYXBzIHVzZXIgYWxsb2NhdGVkIG1lbW9yeS4NCj4gKyAqIEBhcmdzejogc3RydWN0dXJl IGxlbmd0aA0KPiArICogQGZsYWdzOiBmbGFncw0KPiArICogQHVzZXJfYWRkcjogdXNlciBtbWFw IHZpcnR1YWwgYWRkcmVzcw0KPiArICogQGxlbmd0aDogbGVuZ3RoIG9mIG1hcHBpbmcgKGJ5dGVz KQ0KPiArICogQGNzcl9hcnJheTogYXJyYXkgb2YgcmVnaW9uIGFkZHJlc3Mgb2Zmc2V0DQo+ICsg Kg0KPiArICogdW5tYXBzIHVzZXIgYWxsb2NhdGVkIG1lbW9yeS4NCj4gKyAqLw0KPiArc3RydWN0 IGRmbF9jeGxfY2FjaGVfYnVmZmVyX3VubWFwIHsNCj4gKwlfX3UzMiBhcmdzejsNCj4gKwlfX3Uz MiBmbGFnczsNCj4gKwlfX3U2NCB1c2VyX2FkZHI7DQo+ICsJX191NjQgbGVuZ3RoOw0KPiArCV9f dTY0IGNzcl9hcnJheVtERkxfQVJSQVlfTUFYX1NJWkVdOw0KPiArfTsNCj4gKw0KPiAgI2VuZGlm IC8qIF9VQVBJX0xJTlVYX0ZQR0FfREZMX0ggKi8NCg0K