From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BC2DEA034E; Mon, 21 Feb 2022 13:53:36 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4CD544068C; Mon, 21 Feb 2022 13:53:36 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2046.outbound.protection.outlook.com [40.107.244.46]) by mails.dpdk.org (Postfix) with ESMTP id DF9F64013F for ; Mon, 21 Feb 2022 13:53:33 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E6scYoX+K4CG+EtjPq0CITPk9ONg0dIq732aOjePUIlGIrHCb9JLhnicy6hY5CuJ8GdZrXWJoIMSEzz9cYpsCJe86+Devn5lKPR8gdk2r/3C2qaegGavoapXKsSw7F6OI8uWEZunpvggNoAGamKe/crl4y9U5FSzt1z+Rtni8+0QOdUs8k0E94lGzJRselqrxCNfBSkG3b2LfaVyydzKUvNogVCYTkWWNMcrMhjBh8rjoq26ym70a1aJsmhaq+ey8Mc5NC/k15ixF4adi3LDMy8JH8A3A/KdKHQjkj1X+Y3EkIxiw1YCdBw7JmgF0jkQdv2qfPhRXRCrCD6yVD1qRw== 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=tkumBpRP9A+lGsQ5kmxdhcRpgKeg/Dy121kh9eacC1c=; b=QbmI3AtEhgobKHlsD+NaXHtEuZmDMFJBeBedptl5W4iAJCAxKPRXRZtRUnxgIOt6cG7i4ln+8usD++v8FFy8NNDF2FMRbqicuEA9qkOXuISvJ7vL1QI249lhdksdaq0+jTbtzC7jnBFi5wRqY1Z6Ci9p00HkKOPhRvkdiCaeJQKaboi5RBp7v9il9sNoarnqQBUeKbNjocqQByxoQxyJyobC1OES5fEXlRxO5/dCR3SmAqo+kgaxw5Fp75+vUY35C00+Xc+3dbJDnka/SG+Ri0bjlERXc75OyzbWX3nSbG4ASyq+J8IAFlpRsKUJ+MVSuz4Nqt58XI6rYYSzzninCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tkumBpRP9A+lGsQ5kmxdhcRpgKeg/Dy121kh9eacC1c=; b=gNeZLFow0nOZ/i0W1ke8sLoJegvg/Ua4S5vferZU5glao9VRnSSfdvWdRp5nK4e+h3eZv2GOkE/DgT77ZSL0SGq2h7dPjsAVLr7/gYY+Zeb91P23TmGDRtqsz5blu1AzBH5j4FRWSzLPIttxSFAuSyHX4WPtVjVpfzVMbqQy2iBjbkPiqTkA2RLc3aZmlAGGR5deWrLIs4Gl/+IRprGdaRlQnR+6eSzD8WxlQ+8/QmuowiZAgCCIqlbr4EWCysaFBPxC6nCJnHAMl8mjp/2FXaGnUsfgBgRr17IhKZCN/9FY57IpIq/WGyKSBJyAqLR944hCT3UFCoxFr71Jn2tJUQ== Received: from DM6PR12MB4862.namprd12.prod.outlook.com (2603:10b6:5:1b7::13) by BN6PR12MB1219.namprd12.prod.outlook.com (2603:10b6:404:1c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4995.15; Mon, 21 Feb 2022 12:53:31 +0000 Received: from MW2PR12MB4666.namprd12.prod.outlook.com (2603:10b6:302:13::22) by DM6PR12MB4862.namprd12.prod.outlook.com (2603:10b6:5:1b7::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4995.24; Mon, 21 Feb 2022 12:53:30 +0000 Received: from MW2PR12MB4666.namprd12.prod.outlook.com ([fe80::9d4e:649c:c6b8:b353]) by MW2PR12MB4666.namprd12.prod.outlook.com ([fe80::9d4e:649c:c6b8:b353%5]) with mapi id 15.20.4995.027; Mon, 21 Feb 2022 12:53:30 +0000 From: Ori Kam To: Andrew Rybchenko , Alexander Kozyrev , "dev@dpdk.org" CC: "NBU-Contact-Thomas Monjalon (EXTERNAL)" , "ivan.malov@oktetlabs.ru" , "ferruh.yigit@intel.com" , "mohammad.abdul.awal@intel.com" , "qi.z.zhang@intel.com" , "jerinj@marvell.com" , "ajit.khaparde@broadcom.com" , "bruce.richardson@intel.com" Subject: RE: [PATCH v8 01/11] ethdev: introduce flow engine configuration Thread-Topic: [PATCH v8 01/11] ethdev: introduce flow engine configuration Thread-Index: AQHYJgwwS7jmOG75zEO33SekJrcO46ydxBiAgAABbYCAAC4T4A== Date: Mon, 21 Feb 2022 12:53:30 +0000 Message-ID: References: <20220219041144.2145380-1-akozyrev@nvidia.com> <20220220034409.2226860-1-akozyrev@nvidia.com> <20220220034409.2226860-2-akozyrev@nvidia.com> <5ab364fc-8ba0-bad8-3aed-5810cce4bde7@oktetlabs.ru> In-Reply-To: <5ab364fc-8ba0-bad8-3aed-5810cce4bde7@oktetlabs.ru> 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=nvidia.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a5769171-c1f5-4ded-4edc-08d9f5392980 x-ms-traffictypediagnostic: DM6PR12MB4862:EE_|BN6PR12MB1219:EE_ x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: UsXOT2iVzQ76aiwhQTAwuNQxhLSxnn8KZArtH5RerFlHQx+ZBlsiofnEJEZR/nfc2UwzfCKm/SS29rknoTDlXlNNsrFmEx85TsSfjq2zlJgS9uuyVSvH+/pITEPGTL1TEIaDTVRYz/oVlEw0YyabexbUZcJZsMCvHQseMP0foYbyOeNLVSfnmFCWEhUsqvPLbu58Bs1MX9t+eO4D7jYx1exL1r+6ZCGlFspHPPGjrichPapZ25ydOOcxpJxQRm4rjHhEeE8smf5mU5DS1k2eLZgCHwhBIdMffmMIQF3mLrzA5LR1414XhHq5PgufFvhEl6mQn1kHxzvL9+dVfqtVrCjszKREyYZs2Vgwf6WQR6/esfd+JHMoImsjzAaRLXK61L0U9qtKZjbvtEDIqoWbid0qxbESdo+Mu9OkKzI7sYyyxB6hr0PXZoLh/imZXRdPDVt3BKiAgw3oM65LPAyRnCABI0JGYy9bQcmeN6iW5e0RYtpNeU3sMtr4EDWV+c6CqvnIxcRhbA8loFR7KkCeARhjPv/NorhMt91tpR6zMtdhBLr9+B8B2tesfMItUBmyMb/6wk0e5VLf75jwe3iidWmhck7pr2b/KPHcISgJEqbxtXyfEyJjf9Ln8IPWIyvP0qwJ85NhP8nDiLWS9slomqyQgClX0abktTP+dQ04MT/A8SJtZ9xtNepyrigzBBvs6KG1sOAk9VSZ0Gfn5v/atQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR12MB4862.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(38070700005)(5660300002)(52536014)(2906002)(8936002)(122000001)(9686003)(38100700002)(86362001)(186003)(26005)(7416002)(316002)(66476007)(64756008)(66556008)(76116006)(83380400001)(71200400001)(55016003)(110136005)(54906003)(53546011)(7696005)(6506007)(33656002)(8676002)(508600001)(4326008)(66446008)(66946007); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?YUZGMDRkM1hpaGNFYWtJVHVvemF2YXNkTnF5ZThUWFV0L1FTalBEVUxVOFdD?= =?utf-8?B?YWhWZlRmZDZCUmxJSkxsRXE4aEVJdm1jZDd3VzQ4WHAyaDY0WmpydWtOZ1BK?= =?utf-8?B?ajVGTzdDZHRXQzdJeUdoRzc0bDdoSGFQc2xSekp0dnpJbVZjU3dzaVdNRndC?= =?utf-8?B?LzZZa1ZPY1ZoOFdTM0M4WVVUdXRIclVOZEhUUlV3U1NFM2ZERzMyaDE3TTZW?= =?utf-8?B?ZlZJM05ub0xIenoyM3lUMkFMR1ZZY0NFM2xFdWhMck1zS1h6RlBGS2JvN0Z4?= =?utf-8?B?OHhNc05EdGQxYmpTVzkxd2QxTlRpZXRSaUtQNWN3SDFLZTIxclEvWWNwVnhH?= =?utf-8?B?dm9GaFJsYTBSazVMbHpaMjA2MzdPOVRPWmtRd1BhVk5Da0dlYWVTS3V6OU8z?= =?utf-8?B?VVlKbGFBTWRCbEQ1U1RidnhsUHhZakV1T2tlM1M2SnBRY3pERHJuRDQybTJG?= =?utf-8?B?MXJiYTBVMUVWdEN4QWpnTDYvZ3JWTjRnUWc5WmM4VVd5dm4zeHovUnNwL3Vv?= =?utf-8?B?MERnV2NmUmRLL0JPMldLYWt4UEQ2ZlRsNnVPOGZwejdLNnZZNXBNL2pVLzFs?= =?utf-8?B?MktnVXdoTWQwaHg0bVdxcGNMSHVJalRDUVBycHMvRE5MNGdwS1FBSnpCVTZR?= =?utf-8?B?aSt3cXRnV1Fva0l4c2FLY0p4NkxGNlNOUDh2cnpZNmlBTjVFZnZSUy9JUWx4?= =?utf-8?B?S2hFa2dlMTNBcjFPZCtNdzlEWk0yYURlZ2NKZk1jNWtGU3RLY3h0Mis4VEVr?= =?utf-8?B?MlgxbmxobUlUYWtLVGVVN054djJvMVFsek5rQkVrUVlZc09XTUk4aFZJSFdv?= =?utf-8?B?UXp4d3R1SEFUd0xaMVUvS21aRUJEODZXNDhQTFVWRVdaNU40MlVlczFJOGox?= =?utf-8?B?RVFNOWtZZTJyNnFxb0NOMDZrTTBGckFJbUwyTVh1c2ordlROMGMyQXlxQ1Rl?= =?utf-8?B?RUtkN0dGSDBuVU1ySGdaZ21TdGxWeVBaUGlPUHlzdkMxaFdXUE90b2lNakFm?= =?utf-8?B?NVRSdnV2RFhUbG5LYWRTcDd2S2NpTENqNnlCM29PdWRwSEhySE9BM0VTUzN3?= =?utf-8?B?WkI5ZjhrYzdhUS9JY3dTNXdqd3VucXArZlVmUWQvdi85cW1XOHl4T0Rtby9l?= =?utf-8?B?VmswMkJvUHg5OHNOeFpXbC9NOE5PNlhYRU1SeU1HWjJlMlo1UWtPdXY4NTds?= =?utf-8?B?V25oRFpRZWxZNVFqQjhodWx2cFQ0MnF6Tkt0RGs4Rjk5ZGhQU0FPYjlKZlQ2?= =?utf-8?B?VGRTWGlPRmt5MmFINEdqUzNDdGNYRWtPdkRTZmF5ZkJMTTFEOGxYQnl3ZUE0?= =?utf-8?B?allCTVBST0VEZzRUVnBLZnRtZFhpWFJWK1hNSytLdWxIY3Rvblg0OXMzWG0y?= =?utf-8?B?dndzNE8wR1ZoSHVCSGRsdjQ5WTBJNnNyR0ZmaG9MQ0kwaWkwSUpWSnpvNGcy?= =?utf-8?B?TG1FRzROVS91a2NqaG9mWVR5TEo1bFlQRHdTUy9CUzZuU2lyZlhaTmhnLzBQ?= =?utf-8?B?aXFGZWF4SGRwb1RmRmsyUXJyc0FFMVIrdGJ6OHZrZTJveThSNmkzbGxkR0Rp?= =?utf-8?B?bTJDL0JscEpwenVBemwrcTZxTWoxT285a1JPS01Ndk02WTQwTnUyOXFtTktn?= =?utf-8?B?WmNBVlU4VDhKWnc1Ky84aEErc2VTejJJU0lPT0pPSVRwbVNFWUl0eFRuMWxu?= =?utf-8?B?T3NQWHJwaW9MWlR1aEVMTG9zelpURmNnTHU1Ymx5NVBLdE1BN2UvMnVEbzhk?= =?utf-8?B?U2RXUDI3ek5sdTRjanoxMzRYV2tNMXRKQlpYM0xGMjZqdXIwckhzc2tPSDQ2?= =?utf-8?B?b1JpZHhQVCt6dEFTSWNFcEUweTZQZWU5eDFYUzdLWGY2NHBlWXdHU2Q2eGMv?= =?utf-8?B?RGJUbzh0eTluVWM0MSt6b1ZYOHpMZkxKaWZ5TmpTMVdkTVhLU2JRa0hDRngy?= =?utf-8?B?QU5ER2ZFTkxvaFFvM0N3R21mVW5IQlZHUTBJMlJsd3d6Rlh0WVBnV3Z6TmQy?= =?utf-8?B?RXU3Q3AxS3hZcVNkbGtPV0ZCV1RkMG45MTZKOE5yN3JnQVFEdFRrbjlNdHR3?= =?utf-8?B?Ym9yM0EyS3kxb1hPNlBVWlFoMy9lQW9rUDNFMC9NWEZJZy9YUXNlb3dFcDZ1?= =?utf-8?B?Ymx5M3pUZGdaTElyOGp0RlRZWG5MekkwQ3V4ZDNzaDhPUlpWY1N1VUpTV2xu?= =?utf-8?B?aVE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW2PR12MB4666.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a5769171-c1f5-4ded-4edc-08d9f5392980 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Feb 2022 12:53:30.6914 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: sDDthgEJZJMWnWYQFo9z05f+nd4k8CHrP4xByLzBqONk6Ksf6Ds9lks/dsFm8o5np5eOC9K8ZgXwjwMfGdz+Kg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1219 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgQW5kcmV3IGFuZCBBbGV4YW5kZXIsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gRnJvbTogQW5kcmV3IFJ5YmNoZW5rbyA8YW5kcmV3LnJ5YmNoZW5rb0Bva3RldGxhYnMucnU+ DQo+IFNlbnQ6IE1vbmRheSwgRmVicnVhcnkgMjEsIDIwMjIgMTE6NTMgQU0NCj4gU3ViamVjdDog UmU6IFtQQVRDSCB2OCAwMS8xMV0gZXRoZGV2OiBpbnRyb2R1Y2UgZmxvdyBlbmdpbmUgY29uZmln dXJhdGlvbg0KPiANCj4gT24gMi8yMS8yMiAxMjo0NywgQW5kcmV3IFJ5YmNoZW5rbyB3cm90ZToN Cj4gPiBPbiAyLzIwLzIyIDA2OjQzLCBBbGV4YW5kZXIgS296eXJldiB3cm90ZToNCj4gPj4gVGhl IGZsb3cgcnVsZXMgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gYXQgYSBsYXJnZSBzY2FsZSBpbmN1cnMg YSBwZXJmb3JtYW5jZQ0KPiA+PiBwZW5hbHR5IGFuZCBtYXkgbmVnYXRpdmVseSBpbXBhY3QgdGhl IHBhY2tldCBwcm9jZXNzaW5nIHdoZW4gdXNlZA0KPiA+PiBhcyBwYXJ0IG9mIHRoZSBkYXRhcGF0 aCBsb2dpYy4gVGhpcyBpcyBtYWlubHkgYmVjYXVzZSBzb2Z0d2FyZS9oYXJkd2FyZQ0KPiA+PiBy ZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhbmQgcHJlcGFyZWQgZHVyaW5nIHRoZSBmbG93IHJ1bGUg Y3JlYXRpb24uDQo+ID4+DQo+ID4+IEluIG9yZGVyIHRvIG9wdGltaXplIHRoZSBpbnNlcnRpb24g cmF0ZSwgUE1EIG1heSB1c2Ugc29tZSBoaW50cyBwcm92aWRlZA0KPiA+PiBieSB0aGUgYXBwbGlj YXRpb24gYXQgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlLiBUaGUgcnRlX2Zsb3dfY29uZmlndXJl KCkNCj4gPj4gZnVuY3Rpb24gYWxsb3dzIHRvIHByZS1hbGxvY2F0ZSBhbGwgdGhlIG5lZWRlZCBy ZXNvdXJjZXMgYmVmb3JlaGFuZC4NCj4gPj4gVGhlc2UgcmVzb3VyY2VzIGNhbiBiZSB1c2VkIGF0 IGEgbGF0ZXIgc3RhZ2Ugd2l0aG91dCBjb3N0bHkgYWxsb2NhdGlvbnMuDQo+ID4+IEV2ZXJ5IFBN RCBtYXkgdXNlIG9ubHkgdGhlIHN1YnNldCBvZiBoaW50cyBhbmQgaWdub3JlIHVudXNlZCBvbmVz IG9yDQo+ID4+IGZhaWwgaW4gY2FzZSB0aGUgcmVxdWVzdGVkIGNvbmZpZ3VyYXRpb24gaXMgbm90 IHN1cHBvcnRlZC4NCj4gPj4NCj4gPj4gVGhlIHJ0ZV9mbG93X2luZm9fZ2V0KCkgaXMgYXZhaWxh YmxlIHRvIHJldHJpZXZlIHRoZSBpbmZvcm1hdGlvbiBhYm91dA0KPiA+PiBzdXBwb3J0ZWQgcHJl LWNvbmZpZ3VyYWJsZSByZXNvdXJjZXMuIEJvdGggdGhlc2UgZnVuY3Rpb25zIG11c3QgYmUgY2Fs bGVkDQo+ID4+IGJlZm9yZSBhbnkgb3RoZXIgdXNhZ2Ugb2YgdGhlIGZsb3cgQVBJIGVuZ2luZS4N Cj4gPj4NCj4gPj4gU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEtvenlyZXYgPGFrb3p5cmV2QG52 aWRpYS5jb20+DQo+ID4+IEFja2VkLWJ5OiBPcmkgS2FtIDxvcmlrYUBudmlkaWEuY29tPg0KPiA+ DQo+ID4gW3NuaXBdDQo+ID4NCj4gPj4gZGlmZiAtLWdpdCBhL2xpYi9ldGhkZXYvZXRoZGV2X2Ry aXZlci5oIGIvbGliL2V0aGRldi9ldGhkZXZfZHJpdmVyLmgNCj4gPj4gaW5kZXggNmQ2OTdhODc5 YS4uMDZmMDg5NmUxZSAxMDA2NDQNCj4gPj4gLS0tIGEvbGliL2V0aGRldi9ldGhkZXZfZHJpdmVy LmgNCj4gPj4gKysrIGIvbGliL2V0aGRldi9ldGhkZXZfZHJpdmVyLmgNCj4gPj4gQEAgLTEzOCw3 ICsxMzgsMTIgQEAgc3RydWN0IHJ0ZV9ldGhfZGV2X2RhdGEgew0KPiA+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZDoNCj4g Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBDT05GSUdVUkVEKDEpIC8gTk9UIENPTkZJR1VSRUQo MCkNCj4gPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gPj4gLcKgwqDCoMKgwqDCoMKgIGRl dl9jb25maWd1cmVkIDogMTsNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9jb25maWd1cmVkOjEs DQo+ID4NCj4gPiBBYm92ZSBpcyB1bnJlbGF0ZWQgdG8gdGhlIHBhdGNoLiBNb3Jlb3ZlciwgaXQg YnJlYWtzIHN0eWxlIHVzZWQNCj4gPiBmZXcgbGluZXMgYWJvdmUuDQo+ID4NCisxDQo+ID4+ICvC oMKgwqDCoMKgwqDCoCAvKioNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBJbmRpY2F0ZXMgd2hl dGhlciB0aGUgZmxvdyBlbmdpbmUgaXMgY29uZmlndXJlZDoNCj4gPj4gK8KgwqDCoMKgwqDCoMKg wqAgKiBDT05GSUdVUkVEKDEpIC8gTk9UIENPTkZJR1VSRUQoMCkNCj4gPj4gK8KgwqDCoMKgwqDC oMKgwqAgKi8NCj4gPj4gK8KgwqDCoMKgwqDCoMKgIGZsb3dfY29uZmlndXJlZDoxOw0KPiA+DQo+ ID4gSSdkIGxpa2UgdG8gdW5kZXJzdGFuZCB3aHkgd2UgbmVlZCB0aGUgaW5mb3JtYXRpb24uIEl0 IGlzDQo+ID4gdW5jbGVhciBmcm9tIHRoZSBwYXRjaC4gUmlnaHQgbm93IGl0IGlzIHdyaXRlLW9u bHkuIE5vYm9keQ0KPiA+IGNoZWNrcyBpdC4gSXMgZmxvdyBlbmdpbmUgY29uZmlndXJhdGlvbiBi ZWNvbWUgYSBtYW5kYXRvcnkNCj4gPiBzdGVwPyBBbHdheXM/IEp1c3QgaW4gc29tZSBjYXNlcz8N Cj4gPg0KDQpTZWUgbXkgY29tbWV0cyBiZWxvdywNCkkgY2FuIHNlZSB0d28gd2F5cyBvciByZW1v dmUgdGhpcyBtZW1iZXIgb3IgY2hlY2sgaW4gZWFjaCBjb250cm9sIGZ1bmN0aW9uDQp0aGF0IHRo ZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIHdhcyBkb25lLg0KDQo+ID4+IMKgwqDCoMKgwqAgLyoq IFF1ZXVlcyBzdGF0ZTogSEFJUlBJTigyKSAvIFNUQVJURUQoMSkgLyBTVE9QUEVEKDApICovDQo+ ID4+IMKgwqDCoMKgwqAgdWludDhfdCByeF9xdWV1ZV9zdGF0ZVtSVEVfTUFYX1FVRVVFU19QRVJf UE9SVF07DQo+ID4+IGRpZmYgLS1naXQgYS9saWIvZXRoZGV2L3J0ZV9mbG93LmMgYi9saWIvZXRo ZGV2L3J0ZV9mbG93LmMNCj4gPj4gaW5kZXggN2Y5MzkwMGJjOC4uZmZkNDhlNDBkNSAxMDA2NDQN Cj4gPj4gLS0tIGEvbGliL2V0aGRldi9ydGVfZmxvdy5jDQo+ID4+ICsrKyBiL2xpYi9ldGhkZXYv cnRlX2Zsb3cuYw0KPiA+PiBAQCAtMTM5MiwzICsxMzkyLDcyIEBAIHJ0ZV9mbG93X2ZsZXhfaXRl bV9yZWxlYXNlKHVpbnQxNl90IHBvcnRfaWQsDQo+ID4+IMKgwqDCoMKgwqAgcmV0ID0gb3BzLT5m bGV4X2l0ZW1fcmVsZWFzZShkZXYsIGhhbmRsZSwgZXJyb3IpOw0KPiA+PiDCoMKgwqDCoMKgIHJl dHVybiBmbG93X2Vycihwb3J0X2lkLCByZXQsIGVycm9yKTsNCj4gPj4gwqAgfQ0KPiA+PiArDQo+ ID4+ICtpbnQNCj4gPj4gK3J0ZV9mbG93X2luZm9fZ2V0KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4+ ICvCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHJ0ZV9mbG93X3BvcnRfaW5mbyAqcG9ydF9pbmZv LA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3Ip DQo+ID4+ICt7DQo+ID4+ICvCoMKgwqAgc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYgPSAmcnRlX2V0 aF9kZXZpY2VzW3BvcnRfaWRdOw0KPiA+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19v cHMgKm9wcyA9IHJ0ZV9mbG93X29wc19nZXQocG9ydF9pZCwgZXJyb3IpOw0KPiA+PiArDQo+ID4+ ICvCoMKgwqAgaWYgKHBvcnRfaW5mbyA9PSBOVUxMKSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBS VEVfRkxPV19MT0coRVJSLCAiUG9ydCAlIlBSSXUxNiIgaW5mbyBpcyBOVUxMLlxuIiwgcG9ydF9p ZCk7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsNCj4gPj4gK8KgwqDCoCB9 DQo+ID4+ICvCoMKgwqAgaWYgKGRldi0+ZGF0YS0+ZGV2X2NvbmZpZ3VyZWQgPT0gMCkgew0KPiA+ PiArwqDCoMKgwqDCoMKgwqAgUlRFX0ZMT1dfTE9HKElORk8sDQo+ID4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICJEZXZpY2Ugd2l0aCBwb3J0X2lkPSUiUFJJdTE2IiBpcyBub3QgY29uZmlndXJl ZC5cbiIsDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBvcnRfaWQpOw0KPiA+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7DQo+ID4+ICvCoMKgwqAgfQ0KPiA+PiArwqDCoMKg IGlmICh1bmxpa2VseSghb3BzKSkNCj4gPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtcnRlX2Vy cm5vOw0KPiA+DQo+ID4gT3JkZXIgb2YgY2hlY2tzIGlzIG5vdCBhbHdheXMgb2J2aW91cywgYnV0 IHJlcXVpcmVzIGF0DQo+ID4gbGVhc3Qgc29tZSBydWxlcyB0byBmb2xsb3cuIFdoZW4gdGhlcmUg aXMgbm8gYW55IGdvb2QNCj4gPiByZWFzb24gdG8gZG8gb3RoZXJ3aXNlLCBJJ2Qgc3VnZ2VzdCB0 byBjaGVjayBhcmd1bWVudHMNCj4gPiBpbiB0aGVyZSBvcmRlci4gSS5lLiBjaGVjayBwb3J0X2lk IGFuZCBpdHMgZGlyZWN0DQo+ID4gZGVyaXZhdGl2ZXMgZmlyc3Q6DQo+ID4gMS4gb3BzIChzaW5j ZSBpdCBpcyBOVUxMIGlmIHBvcnRfaWQgaXMgaW52YWxpZCkNCj4gPiAyLiBkZXZfY29uZmlndXJl ZCAoc2luY2Ugb25seSBwb3J0X2lkIGlzIHJlcXVpcmVkIHRvIGNoZWNrIGl0KQ0KPiA+IDMuIHBv cnRfaW5mbyAoc2luY2UgaXQgZ29lcyBhZnRlciBwb3J0X2lkKQ0KPiA+DQoNCkFncmVlLA0KDQo+ ID4+ICvCoMKgwqAgaWYgKGxpa2VseSghIW9wcy0+aW5mb19nZXQpKSB7DQo+ID4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gZmxvd19lcnIocG9ydF9pZCwNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBvcHMtPmluZm9fZ2V0KGRldiwgcG9ydF9pbmZvLCBlcnJvciksDQo+ID4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJyb3IpOw0KPiA+PiArwqDCoMKgIH0N Cj4gPj4gK8KgwqDCoCByZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0KGVycm9yLCBFTk9UU1VQLA0K PiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSVEVfRkxPV19FUlJPUl9U WVBFX1VOU1BFQ0lGSUVELA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBOVUxMLCBydGVfc3RyZXJyb3IoRU5PVFNVUCkpOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtp bnQNCj4gPj4gK3J0ZV9mbG93X2NvbmZpZ3VyZSh1aW50MTZfdCBwb3J0X2lkLA0KPiA+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X3BvcnRfYXR0ciAqcG9ydF9h dHRyLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICpl cnJvcikNCj4gPj4gK3sNCj4gPj4gK8KgwqDCoCBzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiA9ICZy dGVfZXRoX2RldmljZXNbcG9ydF9pZF07DQo+ID4+ICvCoMKgwqAgY29uc3Qgc3RydWN0IHJ0ZV9m bG93X29wcyAqb3BzID0gcnRlX2Zsb3dfb3BzX2dldChwb3J0X2lkLCBlcnJvcik7DQo+ID4+ICvC oMKgwqAgaW50IHJldDsNCj4gPj4gKw0KPiA+PiArwqDCoMKgIGRldi0+ZGF0YS0+Zmxvd19jb25m aWd1cmVkID0gMDsNCg0KSSBkb24ndCB0aGluayB0aGVyZSBpcyBtZWFuaW5nIHRvIGFkZCB0aGlz IHNldCBoZXJlLg0KSSB3b3VsZCByZW1vdmUgdGhpcyBmaWVsZC4NClVubGVzcyB5b3Ugd2FudCB0 byBjaGVjayBpdCBmb3IgYWxsIGNvbnRyb2wgZnVuY3Rpb25zLg0KDQo+ID4+ICvCoMKgwqAgaWYg KHBvcnRfYXR0ciA9PSBOVUxMKSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBSVEVfRkxPV19MT0co RVJSLCAiUG9ydCAlIlBSSXUxNiIgaW5mbyBpcyBOVUxMLlxuIiwgcG9ydF9pZCk7DQo+ID4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsNCj4gPj4gK8KgwqDCoCB9DQo+ID4+ICvCoMKg wqAgaWYgKGRldi0+ZGF0YS0+ZGV2X2NvbmZpZ3VyZWQgPT0gMCkgew0KPiA+PiArwqDCoMKgwqDC oMKgwqAgUlRFX0ZMT1dfTE9HKElORk8sDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJE ZXZpY2Ugd2l0aCBwb3J0X2lkPSUiUFJJdTE2IiBpcyBub3QgY29uZmlndXJlZC5cbiIsDQo+ID4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBvcnRfaWQpOw0KPiA+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FSU5WQUw7DQo+ID4+ICvCoMKgwqAgfQ0KPiANCj4gSW4gZmFjdCB0aGVyZSBpcyBv bmUgbW9yZSBpbnRlcmVzdGluZyBxdWVzdGlvbiByZWxhdGVkDQo+IHRvIGRldmljZSBzdGF0ZXMu IE5lY2Vzc2l0eSB0byBjYWxsIGZsb3cgaW5mbyBhbmQgZmxvdw0KPiBjb25maWd1cmUgaW4gY29u ZmlndXJlZCBzdGF0ZSBhbGxvd3MgY29uZmlndXJlIHRvIHJlbHkNCj4gb24gZGV2aWNlIGNvbmZp Z3VyYXRpb24uIFRoZSBxdWVzdGlvbiBpczogd2hhdCBzaG91bGQNCj4gaGFwcGVuIHdpdGggdGhl IGRldmljZSBmbG93IGVuZ2luZSBjb25maWd1cmF0aW9uIGlmDQo+IHRoZSBkZXZpY2UgaXMgcmVj b25maWd1cmVkPw0KPiANCg0KVGhhdOKAmXMgZGVwZW5kZXMgb24gUE1ELg0KUE1EIG1heSBzdXBw b3J0IHJlY29uZmlndXJpbmcsIHBhcnRpYWwgcmVjb25maWd1cmUgKGZvciBleGFtcGxlIG9ubHkg bnVtYmVyIG9mIG9iamVjdHMNCmJ1dCBub3QgY2hhbmdpbmcgdGhlIG51bWJlciBvZiBxdWV1ZXMp IG9yIGl0IHdpbGwgbm90IHN1cHBvcnQgYW55IHJlY29uZmlndXJlLg0KSXQgbWF5IGFsc28gYmUg ZGVwZW5kZW50IGlmIHRoZSBwb3J0IGlzIHN0YXJ0ZWQgb3Igbm90Lg0KQ3VycmVudGx5IHdlIGRv bid0IHBsYW4gdG8gc3VwcG9ydCByZWNvbmZpZ3VyZSBidXQgaW4gZnV0dXJlIHdlIG1heSBzdXBw b3J0IGNoYW5naW5nIHRoZQ0KbnVtYmVyIG9mIG9iamVjdHMuDQoNCj4gPj4gK8KgwqDCoCBpZiAo ZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCAhPSAwKSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCBSVEVf RkxPV19MT0coSU5GTywNCj4gPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkRldmljZSB3aXRo IHBvcnRfaWQ9JSJQUkl1MTYiIGFscmVhZHkgc3RhcnRlZC5cbiIsDQo+ID4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHBvcnRfaWQpOw0KPiA+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5W QUw7DQo+ID4+ICvCoMKgwqAgfQ0KPiA+PiArwqDCoMKgIGlmICh1bmxpa2VseSghb3BzKSkNCj4g Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtcnRlX2Vycm5vOw0KPiA+DQo+ID4gU2FtZSBsb2dp YyBoZXJlOg0KPiA+IDEuIG9wcw0KPiA+IDIuIGRldl9jb25maWd1cmVkDQo+ID4gMy4gZGV2X3N0 YXJ0ZWQNCj4gPiA0LiBwb3J0X2F0dHINCj4gPiA1LiBvcHMtPmNvbmZpZ3VyZSBzaW5jZSB3ZSB3 YW50IHRvIGJlIHN1cmUgdGhhdCBzdGF0ZSBhbmQgaW5wdXQNCj4gPiAgwqDCoCBhcmd1bWVudHMg YXJlIHZhbGlkIGJlZm9yZSBjYWxsaW5nIGl0DQo+ID4NCj4gPj4gK8KgwqDCoCBpZiAobGlrZWx5 KCEhb3BzLT5jb25maWd1cmUpKSB7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBvcHMtPmNv bmZpZ3VyZShkZXYsIHBvcnRfYXR0ciwgZXJyb3IpOw0KPiA+PiArwqDCoMKgwqDCoMKgwqAgaWYg KHJldCA9PSAwKQ0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXYtPmRhdGEtPmZsb3df Y29uZmlndXJlZCA9IDE7DQo+ID4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmxvd19lcnIocG9y dF9pZCwgcmV0LCBlcnJvcik7DQo+ID4+ICvCoMKgwqAgfQ0KPiA+PiArwqDCoMKgIHJldHVybiBy dGVfZmxvd19lcnJvcl9zZXQoZXJyb3IsIEVOT1RTVVAsDQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFJURV9GTE9XX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsDQo+ID4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5VTEwsIHJ0ZV9zdHJlcnJvcihF Tk9UU1VQKSk7DQo+ID4+ICt9DQo+ID4NCj4gPiBbc25pcF0NCj4gPg0KPiA+PiArLyoqDQo+ID4+ ICsgKiBAd2FybmluZw0KPiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hh bmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+PiArICoNCj4gPj4gKyAqIEdldCBpbmZvcm1h dGlvbiBhYm91dCBmbG93IGVuZ2luZSByZXNvdXJjZXMuDQo+ID4+ICsgKg0KPiA+PiArICogQHBh cmFtIHBvcnRfaWQNCj4gPj4gKyAqwqDCoCBQb3J0IGlkZW50aWZpZXIgb2YgRXRoZXJuZXQgZGV2 aWNlLg0KPiA+PiArICogQHBhcmFtW291dF0gcG9ydF9pbmZvDQo+ID4+ICsgKsKgwqAgQSBwb2lu dGVyIHRvIGEgc3RydWN0dXJlIG9mIHR5cGUgKnJ0ZV9mbG93X3BvcnRfaW5mbyoNCj4gPj4gKyAq wqDCoCB0byBiZSBmaWxsZWQgd2l0aCB0aGUgcmVzb3VyY2VzIGluZm9ybWF0aW9uIG9mIHRoZSBw b3J0Lg0KPiA+PiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPj4gKyAqwqDCoCBQZXJmb3JtIHZl cmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLg0KPiA+PiArICrCoMKgIFBNRHMgaW5p dGlhbGl6ZSB0aGlzIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4+ICsgKg0K PiA+PiArICogQHJldHVybg0KPiA+PiArICrCoMKgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBl cnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcw0KPiA+PiBzZXQuDQo+ID4NCj4g PiBJZiBJJ20gbm90IG1pc3Rha2VzIHdlIHNob3VsZCBiZSBleHBsaWNpdCB3aXRoDQo+ID4gbmVn YXRpdmUgcmVzdWx0IHZhbHVlcyBtZW50aW5nDQo+ID4NCkknbSBub3Qgc3VyZSwgdW50aWwgbm93 IHdlIGRpZG4ndCBoYXZlIGFueSBlcnJvcnMgdmFsdWVzIGRlZmluZWQgaW4gUlRFIGZsb3cuDQpJ IGRvbid0IHdhbnQgdG8gZW5mb3JjZSBQTUQgd2l0aCB0aGUgZXJyb3IgdHlwZXMuDQpJZiBQTUQg Y2FuIHNheSB0aGF0IGl0IGNhbiBnaXZlIGJldHRlciBlcnJvciBjb2RlIG9yIGFkZCBhIGNhc2Ug dGhhdCBtYXkgcmVzdWx0IGluDQplcnJvciwgSSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgQVBJ Lg0KU28gSSB0aGluayB3ZSBiZXR0ZXIgbGVhdmUgdGhlIGVycm9yIGNvZGVzIG91dCBvZiBkb2N1 bWVudGF0aW9uIHVubGVzcyB0aGV5IGFyZSBmaW5hbCBhbmQgY2FuIG9ubHkgDQpiZSByZXN1bHRl ZCBmcm9tIHRoZSBydGVfbGV2ZWwuDQoNCj4gPj4gKyAqLw0KPiA+PiArX19ydGVfZXhwZXJpbWVu dGFsDQo+ID4+ICtpbnQNCj4gPj4gK3J0ZV9mbG93X2luZm9fZ2V0KHVpbnQxNl90IHBvcnRfaWQs DQo+ID4+ICvCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHJ0ZV9mbG93X3BvcnRfaW5mbyAqcG9y dF9pbmZvLA0KPiA+PiArwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBydGVfZmxvd19lcnJvciAq ZXJyb3IpOw0KPiA+DQo+ID4gW3NuaXBdDQo+ID4NCj4gPj4gKy8qKg0KPiA+PiArICogQHdhcm5p bmcNCj4gPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0 IHByaW9yIG5vdGljZS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBDb25maWd1cmUgdGhlIHBvcnQncyBm bG93IEFQSSBlbmdpbmUuDQo+ID4+ICsgKg0KPiA+PiArICogVGhpcyBBUEkgY2FuIG9ubHkgYmUg aW52b2tlZCBiZWZvcmUgdGhlIGFwcGxpY2F0aW9uDQo+ID4+ICsgKiBzdGFydHMgdXNpbmcgdGhl IHJlc3Qgb2YgdGhlIGZsb3cgbGlicmFyeSBmdW5jdGlvbnMuDQo+ID4+ICsgKg0KPiA+PiArICog VGhlIEFQSSBjYW4gYmUgaW52b2tlZCBtdWx0aXBsZSB0aW1lcyB0byBjaGFuZ2UgdGhlDQo+ID4+ ICsgKiBzZXR0aW5ncy4gVGhlIHBvcnQsIGhvd2V2ZXIsIG1heSByZWplY3QgdGhlIGNoYW5nZXMu DQo+ID4+ICsgKg0KPiA+PiArICogUGFyYW1ldGVycyBpbiBjb25maWd1cmF0aW9uIGF0dHJpYnV0 ZXMgbXVzdCBub3QgZXhjZWVkDQo+ID4+ICsgKiBudW1iZXJzIG9mIHJlc291cmNlcyByZXR1cm5l ZCBieSB0aGUgcnRlX2Zsb3dfaW5mb19nZXQgQVBJLg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJh bSBwb3J0X2lkDQo+ID4+ICsgKsKgwqAgUG9ydCBpZGVudGlmaWVyIG9mIEV0aGVybmV0IGRldmlj ZS4NCj4gPj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9hdHRyDQo+ID4+ICsgKsKgwqAgUG9ydCBjb25m aWd1cmF0aW9uIGF0dHJpYnV0ZXMuDQo+ID4+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+PiAr ICrCoMKgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuDQo+ID4+ ICsgKsKgwqAgUE1EcyBpbml0aWFsaXplIHRoaXMgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Ig b25seS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcmV0dXJuDQo+ID4+ICsgKsKgwqAgMCBvbiBzdWNj ZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzDQo+ ID4+IHNldC4NCj4gPg0KPiA+IFNhbWUgaGVyZS4NCj4gPg0KU2FtZSBhcyBhYm92ZS4NCg0KPiA+ IFtzbmlwXQ0KDQpCZXN0LA0KT1JpDQo=