Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp5977917imb; Fri, 8 Mar 2019 06:45:18 -0800 (PST) X-Google-Smtp-Source: APXvYqxkQO75O0zrmHZst4xRyORFf3PGhjFIKXfrtwRIreJwzZgP52mAns5lR1tY62x/xZ+SkDOJ X-Received: by 2002:a17:902:e68e:: with SMTP id cn14mr18995169plb.67.1552056318594; Fri, 08 Mar 2019 06:45:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1552056318; cv=none; d=google.com; s=arc-20160816; b=T6KLJkvo9eJ+mH+vblmHnnFsfuNHnPWTzdKJnW6JWkJkn8BRqVsmcdXQkESO4OJ/hA xFhdkITTNO2HjnK20Demtn8WEdTKMwkOv05tRGR3H2X9/VNzNVTQqHKYINitr3mJTsk+ 48s70tbqbvCuw/AaRhHHqNuyyISmItzKzHuh+HPFog/D/kL+3stHC1B95FFFrHWnH7zW +e+tAEWJhNTvilx7i/Kb9OV15zNusJtJ6WEcGZmEvpisefNGD3Dp8aCn1Lj1YqMWp8Ql i6SYgnQWt3OtEFH+nDaqDHIfTHHjvpirYzZ0BTLzE3DxAU6+nwCNT2Ry+nbLdVgF+qKI i/fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=iwGqGA5kytTmmGf6HRysEXGI4pjqHnBV7opJre2V+4g=; b=brkYJNGuNVEZVXEY5GVUTGYkfuF151r2/1UChR8R8CnXWyIR3dOKNSI6G/slkWgJ1+ M8kugeB/89Zr0hLUS7lOsm+m206WmZc4fz6e2isB6U3kNYrsrgz4siEz8ZTMSO49bJHW DJLmBtJQ+Cdvxm1Q4VDFGlxhhFGrrGdB8nRbR0vyqMe2y7u+1I/X58cY5pKY2jPlwXqn i/fE73lFCiPZCNEUsqdmrM2IacJn37iQudofla9ZronnDmgAFvMhWO0Fs3UE05MEwVhq QfFTvloVv1LdoYaQMPa2wYCDT7py/QyNKHqvTHKL9lb79IAnkcqNpuF6iTtXjE2OHW29 aoCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@Mellanox.com header.s=selector1 header.b=KLV6Zhqt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mellanox.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p87si7250983pfa.48.2019.03.08.06.45.02; Fri, 08 Mar 2019 06:45:18 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@Mellanox.com header.s=selector1 header.b=KLV6Zhqt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mellanox.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726734AbfCHOom (ORCPT + 99 others); Fri, 8 Mar 2019 09:44:42 -0500 Received: from mail-eopbgr00076.outbound.protection.outlook.com ([40.107.0.76]:36356 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726171AbfCHOol (ORCPT ); Fri, 8 Mar 2019 09:44:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iwGqGA5kytTmmGf6HRysEXGI4pjqHnBV7opJre2V+4g=; b=KLV6ZhqtSlq3lR6z28Z3yRoczCsh7oOGHIqhXGuElDEopT2pgiVH666zadNgGp/RP3GdtGcclildDq3qKbVrmjsgcVhr6/bv8Ri03h/HGgPRAiyiahofGwdG80jWQJsA4GLHAdQrodrNUg89vIvrL6g2WaQs5146phUf+/IBxsA= Received: from AM4PR05MB3220.eurprd05.prod.outlook.com (10.171.188.142) by AM4PR05MB3186.eurprd05.prod.outlook.com (10.171.191.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1686.18; Fri, 8 Mar 2019 14:44:31 +0000 Received: from AM4PR05MB3220.eurprd05.prod.outlook.com ([fe80::7073:c417:4dc0:b7b3]) by AM4PR05MB3220.eurprd05.prod.outlook.com ([fe80::7073:c417:4dc0:b7b3%4]) with mapi id 15.20.1686.016; Fri, 8 Mar 2019 14:44:31 +0000 From: Liming Sun To: Andy Shevchenko CC: David Woods , Andy Shevchenko , Darren Hart , Vadim Pasternak , Linux Kernel Mailing List , Platform Driver Subject: RE: [PATCH v10] platform/mellanox: Add TmFifo driver for Mellanox BlueField Soc Thread-Topic: [PATCH v10] platform/mellanox: Add TmFifo driver for Mellanox BlueField Soc Thread-Index: AQHUz32MYsaubm4NZ0Cxf1vyWTPgKKX9Ms0AgAAg1KCABIgAAA== Date: Fri, 8 Mar 2019 14:44:31 +0000 Message-ID: References: <1551369083-31122-1-git-send-email-lsun@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [216.156.69.42] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d0349c9a-3e8f-41f0-4bb4-08d6a3d492d8 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM4PR05MB3186; x-ms-traffictypediagnostic: AM4PR05MB3186: x-microsoft-exchange-diagnostics: =?utf-8?B?MTtBTTRQUjA1TUIzMTg2OzIzOkc1TkRtRDRFTWthL3NvRXF2Wm1sK2VZSXVk?= =?utf-8?B?SEsvY2hQMzBSeTEyWnZ0TFhDd1VLQlYxSlEvc1NDaDBpTkR1bm5UWDM1OFdy?= =?utf-8?B?dytOdHRWdXg1VEFBU0xXcEkwaW9oNWpBNTdDUTFpbG1TcGdwdlNzMEFYQVNE?= =?utf-8?B?VVpxY3ZxN2hvOTdGWnFzMWdXM1lUOURkbUY4RE9MbkpPSERlOVc5N01YS0xS?= =?utf-8?B?cHJGSFRVMmU1WkIra2J3SXF4MDZMZkJXY2ZYWE93d2EySWhzQllObldDWXA0?= =?utf-8?B?TmlNLzRqM0JsVTFFVjdjUk5qVU1mdWFBTXlZUFZmM2dReU9Yc3RWUlJyKzAv?= =?utf-8?B?YW9rM1QzYVZid0dSRDV2N0l1YWszb01UVng3clNnOG5ZQnZ4R1I3VWJwSEdq?= =?utf-8?B?TFg4eU5mZ3RjWUlNNFFZdzJyYkJHRllKa3dyRExNbTBXbmxmWWxQa2xHSnRy?= =?utf-8?B?K084c1NlTHhFdnpoQzFjcFZYQ1gwOWZOck0xcUNSa1crc1g4YVREU2NyVkZI?= =?utf-8?B?WlRtTFFkV2pGVVBhS0lIYnFVRVdMNW5lRmh5N211ZWJjdVF0S05DTnF0SElQ?= =?utf-8?B?YkZsMHJ5eG1OVXNGNGQwTWVRNFdxWUVnRDBrS3hzYVNSemc1SFo1em1MYmNt?= =?utf-8?B?WU1UWEJGbVBwNUNTT2tDbi9zRUZtemJoeSt6cmwrR3JScURRcWQ3Sm1MUVVS?= =?utf-8?B?VmNQczRrSkVUWWJGRFFZWVVHRGxUK3Zjc05za1I4MUZTbVJCOVRkSDBxd1FC?= =?utf-8?B?czNoUDJrV0VFd0RJYWsxblltU1BHYy9qRVRLNm9lbmZiVi8zOTdHdWNtcEtG?= =?utf-8?B?WlIwVG9WMlZJUVo5cVFTY3ZGYjM3M1pmUWlxTjF6cHJTL1ZuRU85cTcwdE5w?= =?utf-8?B?VERhVS9pM3FqSnZFM1hTTlczR3duV0M0QVNNMFpPblUzMTdmU2FOZkViRkF2?= =?utf-8?B?Qm5DZjYwUnhJUWx5YzFtNVVDbTRJYUtDeVh2VkpHak5FYXpCY0JIZFBQL0ph?= =?utf-8?B?c25xYTk2ZC9INDFIZzRXcmpyVWJPZnYyTGJXZUdnRFF3V3h5U1V6VUpCZ045?= =?utf-8?B?NzlyZno1RDZ0RzRPa05qR291NWZpRERYakJxeVB6VlE3UGI0L0pVeWJBZ0Nw?= =?utf-8?B?dzVHZ2FPVlUrUGpvZTlIaXpyY01Md2VPSGVpdlRocUxleUVqcWNtRWpPaVFa?= =?utf-8?B?MzlxcVBmL1R6UmpWMnIzYjg1SGVuV1pOdXpHZHladFNaTld6eWNNNk1TdzFa?= =?utf-8?B?SjBxS29zRU1uMjN6NmhNK0VYL25rQkJlYjhXQ3cxMTJmVkFHOWR5RmVaazZl?= =?utf-8?B?U0pqVzZhQTU1R2lCWEFvWVhSQi9nNFZOTUZxdGxOdGxJbTFUeGdyRVFrWVZ1?= =?utf-8?B?azlyb3g2Wm91dlNNOW9LTHAwV1Y2ZjZMSnA3Z2kzSUlsRlN4WG02M0g1RGt0?= =?utf-8?B?QnQ3YUtlRllYbnpIeTNZS29ONWpFWkV0WUcrQmlTTVFwdE80UHBnaFByVUlZ?= =?utf-8?B?c2FWUzVuRDdhcUpiYk9RYnd5Rkgrc3E3L3BjL3kyRHJSS3hySzdvK0VNTFFq?= =?utf-8?B?QWNub3l5UUZ2M3dHQ3h5SWNwRURQQitYcWY5M0FZUTVCMHVDYm9tdnM1TU9k?= =?utf-8?B?aEU1SzQzZVh4bExOeTN4c01kV2FDekpYZ2pPUzVZdlNqdWxJaEx1ZHpBaDFp?= =?utf-8?B?eHBvQmJRM1ZITFA5ME9pNmNFZzVOdUZnOGdwK2duT3NaTzEwRWREVnFCVU4w?= =?utf-8?B?N1NKNlRLZnBoNDRoR2l3THJ3bklEbXQrcGVKRUNrUjBUTmlkUU1CTlhpZmEy?= =?utf-8?B?RlR4QWNib3lKeFQ5MGo3SFBiNmtLMzFMbEJBeU4xYVNpNFJ4MzZDaEpJOW5I?= =?utf-8?B?RFBCQ1ZvTFFWa25TMndSbnZTUXk0YUI1VzgzWDEzc05TdkdXL1cxSDZpL2pz?= =?utf-8?B?bEdzOG9Ub01Wb0trSXE5YitJeVgrSUNjbUZmalVoQXZNR3phL3JCWUg3U29i?= =?utf-8?Q?Rxiw8G?= x-microsoft-antispam-prvs: x-forefront-prvs: 0970508454 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(979002)(6029001)(39860400002)(376002)(136003)(366004)(346002)(396003)(51914003)(13464003)(189003)(199004)(4326008)(2906002)(6246003)(86362001)(186003)(102836004)(6506007)(3846002)(6116002)(76176011)(7696005)(14454004)(26005)(478600001)(486006)(52536013)(316002)(6346003)(105586002)(106356001)(446003)(11346002)(14444005)(256004)(476003)(93886005)(25786009)(53936002)(68736007)(6916009)(6436002)(55016002)(54906003)(81166006)(305945005)(9686003)(74316002)(99286004)(33656002)(71190400001)(229853002)(71200400001)(8936002)(53546011)(7736002)(97736004)(30864003)(8676002)(81156014)(5660300002)(66066001)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1101;SCL:1;SRVR:AM4PR05MB3186;H:AM4PR05MB3220.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) authentication-results: spf=none (sender IP is ) smtp.mailfrom=lsun@mellanox.com; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: IM07513HLI2u8qeyEDtx5YaYv99scs37BXp8+KwzQsKaqZyDIimopnNNh+ENedZ+W6ui7J7RlWmqaJ82Pxc0TLsdOz/QHi/I/3aPeRtlKV82roTYHGNLq2TJwzBb3XGilFnEoLWqv0dn0GVPGPxe+O8ljFyjIWvQzxfP7F2DKvjRDXIe2o0SMaINWg/tDdmEVvhRbQSkgYg6hhxPbA1oXDsnrC251sWzYmYjZj3KYUe1Ca0JLKGfCGS+dWVFCEvwBJMAbKs9d5M2V0twfyLPDsqTYHkUAAkVrLJYR6Obpn7zf3lHpVDxPIsfdNXVGdh0WmDFX1OHGqCOyZ1VKPfqSMsuWEtUqpomSbiVtP/D46+n1OtfSIAWduT6LhdAoh1u6bLhbqqeD3QgNG8skCGVgH0tVo6lb6n12A8dRAWZuTY= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0349c9a-3e8f-41f0-4bb4-08d6a3d492d8 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Mar 2019 14:44:31.0666 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3186 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org QW5keSwNCg0KVGhlIHYxMSBoYXMgYmVlbiBwb3N0ZWQuDQoNClRoYW5rcyENCkxpbWluZw0KDQo+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExpbWluZyBTdW4NCj4gU2VudDog V2VkbmVzZGF5LCBNYXJjaCA2LCAyMDE5IDM6MDEgUE0NCj4gVG86ICdBbmR5IFNoZXZjaGVua28n IDxhbmR5LnNoZXZjaGVua29AZ21haWwuY29tPg0KPiBDYzogRGF2aWQgV29vZHMgPGR3b29kc0Bt ZWxsYW5veC5jb20+OyBBbmR5IFNoZXZjaGVua28gPGFuZHlAaW5mcmFkZWFkLm9yZz47IERhcnJl biBIYXJ0IDxkdmhhcnRAaW5mcmFkZWFkLm9yZz47IFZhZGltDQo+IFBhc3Rlcm5hayA8dmFkaW1w QG1lbGxhbm94LmNvbT47IExpbnV4IEtlcm5lbCBNYWlsaW5nIExpc3QgPGxpbnV4LWtlcm5lbEB2 Z2VyLmtlcm5lbC5vcmc+OyBQbGF0Zm9ybSBEcml2ZXIgPHBsYXRmb3JtLWRyaXZlci0NCj4geDg2 QHZnZXIua2VybmVsLm9yZz4NCj4gU3ViamVjdDogUkU6IFtQQVRDSCB2MTBdIHBsYXRmb3JtL21l bGxhbm94OiBBZGQgVG1GaWZvIGRyaXZlciBmb3IgTWVsbGFub3ggQmx1ZUZpZWxkIFNvYw0KPiAN Cj4gVGhhbmtzIEFuZHkhIFBsZWFzZSBzZWUgbXkgcmVzcG9uc2UgYmVsb3cuIElmIG5vIGZ1cnRo ZXIgY29tbWVudHMsIEknbGwgdHJ5IHRvIHBvc3QgdjExIGFmdGVyIG1vcmUgdGVzdGluZy4NCj4g DQo+IFJlZ2FyZHMsDQo+IExpbWluZw0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiA+IEZyb206IEFuZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4N Cj4gPiBTZW50OiBUdWVzZGF5LCBNYXJjaCA1LCAyMDE5IDEwOjM0IEFNDQo+ID4gVG86IExpbWlu ZyBTdW4gPGxzdW5AbWVsbGFub3guY29tPg0KPiA+IENjOiBEYXZpZCBXb29kcyA8ZHdvb2RzQG1l bGxhbm94LmNvbT47IEFuZHkgU2hldmNoZW5rbyA8YW5keUBpbmZyYWRlYWQub3JnPjsgRGFycmVu IEhhcnQgPGR2aGFydEBpbmZyYWRlYWQub3JnPjsgVmFkaW0NCj4gPiBQYXN0ZXJuYWsgPHZhZGlt cEBtZWxsYW5veC5jb20+OyBMaW51eCBLZXJuZWwgTWFpbGluZyBMaXN0IDxsaW51eC1rZXJuZWxA dmdlci5rZXJuZWwub3JnPjsgUGxhdGZvcm0gRHJpdmVyIDxwbGF0Zm9ybS1kcml2ZXItDQo+ID4g eDg2QHZnZXIua2VybmVsLm9yZz4NCj4gPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMF0gcGxhdGZv cm0vbWVsbGFub3g6IEFkZCBUbUZpZm8gZHJpdmVyIGZvciBNZWxsYW5veCBCbHVlRmllbGQgU29j DQo+ID4NCj4gPiBPbiBUaHUsIEZlYiAyOCwgMjAxOSBhdCA1OjUxIFBNIExpbWluZyBTdW4gPGxz dW5AbWVsbGFub3guY29tPiB3cm90ZToNCj4gPiA+DQo+ID4gPiBUaGlzIGNvbW1pdCBhZGRzIHRo ZSBUbUZpZm8gcGxhdGZvcm0gZHJpdmVyIGZvciBNZWxsYW5veCBCbHVlRmllbGQNCj4gPiA+IFNv Yy4gVG1GaWZvIGlzIGEgc2hhcmVkIEZJRk8gd2hpY2ggZW5hYmxlcyBleHRlcm5hbCBob3N0IG1h Y2hpbmUNCj4gPiA+IHRvIGV4Y2hhbmdlIGRhdGEgd2l0aCB0aGUgU29DIHZpYSBVU0Igb3IgUENJ ZS4gVGhlIGRyaXZlciBpcyBiYXNlZA0KPiA+ID4gb24gdmlydGlvIGZyYW1ld29yayBhbmQgaGFz IGNvbnNvbGUgYW5kIG5ldHdvcmsgYWNjZXNzIGVuYWJsZWQuDQo+ID4NCj4gPiBUaGFuayB5b3Ug Zm9yIGFuIHVwZGF0ZS4NCj4gPg0KPiA+IFVuZm9ydHVuYXRlbHkgbW9yZSB3b3JrIGlzIG5lZWRl ZC4gTXkgY29tbWVudHMgYmVsb3cuDQo+ID4NCj4gPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19U WF9TVFNfX0NPVU5UX1JNQVNLICAgICAgICAgICAgICAgR0VOTUFTSyg4LCAwKQ0KPiA+ID4gKyNk ZWZpbmUgTUxYQkZfVE1GSUZPX1RYX1NUU19fQ09VTlRfTUFTSyAgICAgICAgICAgICAgICAgICAg ICAgIEdFTk1BU0soOCwgMCkNCj4gPg0KPiA+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RYX0NU TF9fTFdNX1JNQVNLICAgICAgICAgICAgICAgICBHRU5NQVNLKDcsIDApDQo+ID4gPiArI2RlZmlu ZSBNTFhCRl9UTUZJRk9fVFhfQ1RMX19MV01fTUFTSyAgICAgICAgICAgICAgICAgIEdFTk1BU0so NywgMCkNCj4gPg0KPiA+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RYX0NUTF9fSFdNX1JNQVNL ICAgICAgICAgICAgICAgICBHRU5NQVNLKDcsIDApDQo+ID4gPiArI2RlZmluZSBNTFhCRl9UTUZJ Rk9fVFhfQ1RMX19IV01fTUFTSyAgICAgICAgICAgICAgICAgIEdFTk1BU0soMTUsIDgpDQo+ID4N Cj4gPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19UWF9DVExfX01BWF9FTlRSSUVTX1JNQVNLICAg ICAgICAgR0VOTUFTSyg4LCAwKQ0KPiA+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1RYX0NUTF9f TUFYX0VOVFJJRVNfTUFTSyAgICAgICAgICBHRU5NQVNLX1VMTCg0MCwgMzIpDQo+ID4NCj4gPiA+ ICsjZGVmaW5lIE1MWEJGX1RNRklGT19SWF9TVFNfX0NPVU5UX1JNQVNLICAgICAgICAgICAgICAg R0VOTUFTSyg4LCAwKQ0KPiA+ID4gKyNkZWZpbmUgTUxYQkZfVE1GSUZPX1JYX1NUU19fQ09VTlRf TUFTSyAgICAgICAgICAgICAgICAgICAgICAgIEdFTk1BU0soOCwgMCkNCj4gPg0KPiA+ID4gKyNk ZWZpbmUgTUxYQkZfVE1GSUZPX1JYX0NUTF9fTFdNX1JNQVNLICAgICAgICAgICAgICAgICBHRU5N QVNLKDcsIDApDQo+ID4gPiArI2RlZmluZSBNTFhCRl9UTUZJRk9fUlhfQ1RMX19MV01fTUFTSyAg ICAgICAgICAgICAgICAgIEdFTk1BU0soNywgMCkNCj4gPg0KPiA+ID4gKyNkZWZpbmUgTUxYQkZf VE1GSUZPX1JYX0NUTF9fSFdNX1JNQVNLICAgICAgICAgICAgICAgICBHRU5NQVNLKDcsIDApDQo+ ID4gPiArI2RlZmluZSBNTFhCRl9UTUZJRk9fUlhfQ1RMX19IV01fTUFTSyAgICAgICAgICAgICAg ICAgIEdFTk1BU0soMTUsIDgpDQo+ID4NCj4gPiA+ICsjZGVmaW5lIE1MWEJGX1RNRklGT19SWF9D VExfX01BWF9FTlRSSUVTX1JNQVNLICAgICAgICAgR0VOTUFTSyg4LCAwKQ0KPiA+ID4gKyNkZWZp bmUgTUxYQkZfVE1GSUZPX1JYX0NUTF9fTUFYX0VOVFJJRVNfTUFTSyAgICAgICAgICBHRU5NQVNL X1VMTCg0MCwgMzIpDQo+ID4NCj4gPiBTaW5jZSB0d28gb2YgdGhlbSBoYXZlIF9VTEwgc3VmZml4 IEknbSB3b25kZXJpbmcgaWYgeW91IGhhdmUgY2hlY2tlZA0KPiA+IGZvciBzaWRlIGVmZmVjdHMg b24gdGhlIHJlc3QsIGkuZS4gaWYgeW91IG9wZXJhdGUgd2l0aCA2NC1iaXQgdmFyaWFibGUNCj4g PiBhbmQgdXNlIHNvbWV0aGluZyBsaWtlIH5NTFhCRl9UTUZJRk9fUlhfQ1RMX19NQVhfRU5UUklF U19STUFTSywgaXQgbWF5DQo+ID4gZ2l2ZSB5b3UgaW50ZXJlc3RpbmcgcmVzdWx0cy4NCj4gDQo+ IFRoZSBydW5uaW5nIHN5c3RlbSBvbiB0aGUgU29DIGlzIGFybTY0IHdoZXJlIEJJVFNfUEVSX0xP TkcgYW5kDQo+IEJJVFNfUEVSX0xPTkdfTE9ORyBoYXZlIHRoZSBzYW1lIHZhbHVlLiBJbiBzdWNo IGNhc2UsIHRoZSB0d28gbWFjcm9zIGFwcGVhcnMNCj4gdG8gYmUgdGhlIHNhbWUuIEJ1dCB5b3Un cmUgcmlnaHQsIEkgc2hvdWxkIHVzZSBHRU5NQVNLX1VMTCgpIHRvIGJlIGNvbnNpc3RlbnQNCj4g YW5kIG1vcmUgY29ycmVjdGx5LCBqdXN0IGluIGNhc2UgdGhlICJDT05GSUdfNjRCSVQiIGlzIG5v dCBkZWZpbmVkIHNvbWVob3cuDQo+IA0KPiBXaWxsIHVwZGF0ZSBpdCBpbiB2MTEuDQo+IA0KPiA+ DQo+ID4gPiArI2RlZmluZSBNTFhCRl9UTUZJRk9fVElNRVJfSU5URVJWQUwgICAgICAgICAgICAo SFogLyAxMCkNCj4gPg0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIG1seGJmX3RtZmlmb191NjQgLSBV bmlvbiBvZiA2NC1iaXQgZGF0YQ0KPiA+ID4gKyAqIEBkYXRhIC0gNjQtYml0IGRhdGEgaW4gaG9z dCBieXRlIG9yZGVyDQo+ID4gPiArICogQGRhdGFfbGUgLSA2NC1iaXQgZGF0YSBpbiBsaXR0bGUt ZW5kaWFuIGJ5dGUgb3JkZXINCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEl0J3MgZXhwZWN0ZWQgdG8g c2VuZCA2NC1iaXQgbGl0dGxlLWVuZGlhbiB2YWx1ZSAoX19sZTY0KSBpbnRvIHRoZSBUbUZpZm8u DQo+ID4gPiArICogcmVhZHEoKSBhbmQgd3JpdGVxKCkgZXhwZWN0IHU2NCBpbnN0ZWFkLiBBIHVu aW9uIHN0cnVjdHVyZSBpcyB1c2VkIGhlcmUNCj4gPiA+ICsgKiB0byB3b3JrYXJvdW5kIHRoZSBl eHBsaWNpdCBjYXN0aW5nIHVzYWdlIGxpa2Ugd3JpdGVxKCoodTY0ICopJmRhdGFfbGUpLg0KPiA+ ID4gKyAqLw0KPiA+DQo+ID4gSG93IGRvIHlvdSBrbm93IHdoYXQgcmVhZHEoKS93cml0ZXEoKSBk b2VzIHdpdGggdGhlIGRhdGE/IElzIGl0IG9uIGFsbA0KPiA+IGFyY2hpdGVjdHVyZXM/DQo+ID4g SG93IHRoZSBlbmRpYW5lc3MgY29udmVyc2lvbiBhZmZlY3RzIHRoZSBhY3R1YWwgZGF0YT8NCj4g DQo+IFRoZSBTb0MgcnVucyBhcm02NCBhbmQgc3VwcG9ydHMgbGl0dGxlIGVuZGlhbiBmb3Igbm93 LiBUaGUgRklGTyBoYXMgdHdvIHNpZGVzLA0KPiBvbmUgc2lkZSBpcyB0aGUgU29DLCB0aGUgb3Ro ZXIgc2lkZSBpcyBleHRlcm4gaG9zdCBtYWNoaW5lIHdoaWNoIGNvdWxkDQo+IGFjY2VzcyB0aGUg RklGTyB2aWEgVVNCIG9yIFBDSWUuIFRoZSBydWxlIGlzIHRoYXQgdGhlICdieXRlIHN0cmVhbScg d2lsbA0KPiBrZWVwIHRoZSBzYW1lIHdoZW4gb25lIHNpZGUgd3JpdGUgOCBieXRlcyBhbmQgdGhl IG90aGVyIHNpZGUgcmVhZHMNCj4gdGhlIDggYnl0ZXMuIFNvIGFzIGxvbmcgYXMgYm90aCBzaWRl cyBoYXZlIGFncmVlbWVudCBvbiB0aGUgYnl0ZS1vcmRlcg0KPiBpdCBzaG91bGQgYmUgZmluZS4N Cj4gDQo+IEFmdGVyIGRvdWJsZSBjaGVjayB0aGUgYXJtNjQgcmVhZHEoKS93cml0ZXEoKSBpbXBs ZW1lbnRhdGlvbiwgaXQgYXBwZWFycw0KPiB0aGF0IHRoZXNlIEFQSXMgYWxyZWFkeSBkb2VzIGNw dV90b19sZTY0KCkgYW5kIGxlNjRfdG9fY3B1KCkNCj4gY29udmVyc2lvbi4gVGhlcmUncyBhY3R1 YWxseSBubyBuZWVkIHRvIG1ha2UgYW5vdGhlciBjb252ZXJzaW9uDQo+IChhbmQgc2hvdWxkbid0 IGRvIGl0KS4gSSdsbCByZW1vdmUgdGhlc2UgY29udmVyc2lvbnMgaW4gdjExLiBUaGUgY29kZSB3 aWxsDQo+IGxvb2sgbXVjaCBjbGVhbmVyLg0KPiANCj4gPg0KPiA+ID4gK3VuaW9uIG1seGJmX3Rt Zmlmb191NjQgew0KPiA+ID4gKyAgICAgICB1NjQgZGF0YTsNCj4gPiA+ICsgICAgICAgX19sZTY0 IGRhdGFfbGU7DQo+ID4gPiArfTsNCj4gPg0KPiA+ID4gKy8qDQo+ID4gPiArICogRGVmYXVsdCBN QUMuDQo+ID4gPiArICogVGhpcyBNQUMgYWRkcmVzcyB3aWxsIGJlIHJlYWQgZnJvbSBFRkkgcGVy c2lzdGVudCB2YXJpYWJsZSBpZiBjb25maWd1cmVkLg0KPiA+ID4gKyAqIEl0IGNhbiBhbHNvIGJl IHJlY29uZmlndXJlZCB3aXRoIHN0YW5kYXJkIExpbnV4IHRvb2xzLg0KPiA+ID4gKyAqLw0KPiA+ ID4gK3N0YXRpYyB1OCBtbHhiZl90bWZpZm9fbmV0X2RlZmF1bHRfbWFjWzZdID0gew0KPiA+ID4g KyAgICAgICAweDAwLCAweDFBLCAweENBLCAweEZGLCAweEZGLCAweDAxfTsNCj4gPg0KPiA+ID4g KyNkZWZpbmUgbWx4YmZfdmRldl90b190bWZpZm8oZGV2KSAgICAgIFwNCj4gPiA+ICsgICAgICAg Y29udGFpbmVyX29mKGRldiwgc3RydWN0IG1seGJmX3RtZmlmb192ZGV2LCB2ZGV2KQ0KPiA+DQo+ ID4gT25lIGxpbmU/DQo+IA0KPiBDb3VsZG4ndCBmaXQgaXQgaW50byBvbmUgbGluZSB3aXRoaW4g ODAgY2hhcmFjdGVycy4NCj4gKFBsZWFzZSBjb3JyZWN0IG1lIGlmIHlvdSBtZWFudCBzaW5nbGUg bGluZSBldmVuIGV4Y2VlZGluZyA4MCBjaHJhY3RlcnMpLg0KPiANCj4gPg0KPiA+ID4gKy8qIFJl dHVybiB0aGUgY29uc3VtZWQgVHggYnVmZmVyIHNwYWNlLiAqLw0KPiA+ID4gK3N0YXRpYyBpbnQg bWx4YmZfdG1maWZvX3ZkZXZfdHhfYnVmX2xlbihzdHJ1Y3QgbWx4YmZfdG1maWZvX3ZkZXYgKnRt X3ZkZXYpDQo+ID4gPiArew0KPiA+ID4gKyAgICAgICBpbnQgbGVuOw0KPiA+ID4gKw0KPiA+ID4g KyAgICAgICBpZiAodG1fdmRldi0+dHhfdGFpbCA+PSB0bV92ZGV2LT50eF9oZWFkKQ0KPiA+ID4g KyAgICAgICAgICAgICAgIGxlbiA9IHRtX3ZkZXYtPnR4X3RhaWwgLSB0bV92ZGV2LT50eF9oZWFk Ow0KPiA+ID4gKyAgICAgICBlbHNlDQo+ID4gPiArICAgICAgICAgICAgICAgbGVuID0gTUxYQkZf VE1GSUZPX0NPTlNfVFhfQlVGX1NJWkUgLSB0bV92ZGV2LT50eF9oZWFkICsNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHRtX3ZkZXYtPnR4X3RhaWw7DQo+ID4gPiArICAgICAgIHJldHVy biBsZW47DQo+ID4gPiArfQ0KPiA+DQo+ID4gSXMgdGhpcyBjdXN0b20gaW1wbGVtZW50YXRpb24g b2Ygc29tZSBraW5kIG9mIGNpcmNfYnVmPw0KPiANCj4gWWVzLiBJJ2xsIHRyeSBpZiBJIGNvdWxk IHJlLXVzZSB0aGUgY2lyY19idWYgc3RydWN0dXJlIGFuZCB1cGRhdGUgaXQgaW4gdjExLg0KPiAN Cj4gPg0KPiA+ID4gKy8qIEFsbG9jYXRlIHZyaW5ncyBmb3IgdGhlIGZpZm8uICovDQo+ID4gPiAr c3RhdGljIGludCBtbHhiZl90bWZpZm9fYWxsb2NfdnJpbmdzKHN0cnVjdCBtbHhiZl90bWZpZm8g KmZpZm8sDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG1seGJmX3RtZmlmb192ZGV2ICp0bV92ZGV2KQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAgc3Ry dWN0IG1seGJmX3RtZmlmb192cmluZyAqdnJpbmc7DQo+ID4gPiArICAgICAgIHN0cnVjdCBkZXZp Y2UgKmRldjsNCj4gPiA+ICsgICAgICAgZG1hX2FkZHJfdCBkbWE7DQo+ID4gPiArICAgICAgIGlu dCBpLCBzaXplOw0KPiA+ID4gKyAgICAgICB2b2lkICp2YTsNCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodG1fdmRldi0+dnJpbmdzKTsgaSsrKSB7DQo+ ID4gPiArICAgICAgICAgICAgICAgdnJpbmcgPSAmdG1fdmRldi0+dnJpbmdzW2ldOw0KPiA+ID4g KyAgICAgICAgICAgICAgIHZyaW5nLT5maWZvID0gZmlmbzsNCj4gPiA+ICsgICAgICAgICAgICAg ICB2cmluZy0+bnVtID0gTUxYQkZfVE1GSUZPX1ZSSU5HX1NJWkU7DQo+ID4gPiArICAgICAgICAg ICAgICAgdnJpbmctPmFsaWduID0gU01QX0NBQ0hFX0JZVEVTOw0KPiA+ID4gKyAgICAgICAgICAg ICAgIHZyaW5nLT5pbmRleCA9IGk7DQo+ID4gPiArICAgICAgICAgICAgICAgdnJpbmctPnZkZXZf aWQgPSB0bV92ZGV2LT52ZGV2LmlkLmRldmljZTsNCj4gPiA+ICsgICAgICAgICAgICAgICBkZXYg PSAmdG1fdmRldi0+dmRldi5kZXY7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgc2l6 ZSA9IHZyaW5nX3NpemUodnJpbmctPm51bSwgdnJpbmctPmFsaWduKTsNCj4gPiA+ICsgICAgICAg ICAgICAgICB2YSA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPnBhcmVudCwgc2l6ZSwgJmRtYSwg R0ZQX0tFUk5FTCk7DQo+ID4gPiArICAgICAgICAgICAgICAgaWYgKCF2YSkgew0KPiA+DQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGRldi0+cGFyZW50LCAiZG1hX2FsbG9j X2NvaGVyZW50IGZhaWxlZFxuIik7DQo+ID4NCj4gPiBBbmQgaG93IGRvIHlvdSBjbGVhbiBwcmV2 aW91c2x5IGFsbG9jYXRlZCBpdGVtcz8NCj4gDQo+IEZpeGVkLiBDaGVjayB0aGUgcmV0dXJuIHZh bHVlIG9mIG1seGJmX3RtZmlmb19hbGxvY192cmluZ3MoKSBhbmQgZ290bw0KPiAncmVnaXN0ZXJf ZmFpbCcgKHByb2JhYmx5IGNoYW5nZSB0byBhIGJldHRlciBuYW1lKSBpbnN0ZWFkIG9mICdmYWls Jy4NCj4gSW4gc3VjaCBjYXNlIHRoZSBtbHhiZl90bWZpZm9fZnJlZV92cmluZ3MoKSB3aWxsIGJl IGNhbGxlZCB0byBjbGVhbiB1cA0KPiBhbGwgYWxsb2NhdGVkIHZyaW5ncy4NCj4gDQo+ID4NCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+ID4gKyAgICAg ICAgICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICB2cmluZy0+dmEgPSB2 YTsNCj4gPiA+ICsgICAgICAgICAgICAgICB2cmluZy0+ZG1hID0gZG1hOw0KPiA+ID4gKyAgICAg ICB9DQo+ID4gPiArDQo+ID4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ID4gK30NCj4gPg0KPiA+ ID4gKy8qIERpc2FibGUgaW50ZXJydXB0cyBvZiB0aGUgZmlmbyBkZXZpY2UuICovDQo+ID4gPiAr c3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX2Rpc2FibGVfaXJxcyhzdHJ1Y3QgbWx4YmZfdG1maWZv ICpmaWZvKQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgICAgaW50IGksIGlycTsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IE1MWEJGX1RNX01BWF9JUlE7IGkrKykgew0KPiA+ ID4gKyAgICAgICAgICAgICAgIGlycSA9IGZpZm8tPmlycV9pbmZvW2ldLmlycTsNCj4gPg0KPiA+ ID4gKyAgICAgICAgICAgICAgIGlmIChpcnEpIHsNCj4gPg0KPiA+IEkgZG9uJ3QgdGhpbmsgdGhp cyBjaGVjayBpcyBuZWVkZWQgaWYgeW91IGNhbiBndWFyYW50ZWUgdGhhdCBpdCBoYXMgbm8NCj4g PiBzdGFsZWQgcmVjb3Jkcy4NCj4gDQo+IFllcywgaXQncyBub3QgbmVlZGVkIGFueSBtb3JlIGFj Y29yZGluZyB0byB0aGUgY3VycmVudCBjb2RlLg0KPiBXaWxsIHJlbW92ZSBpdCBpbiB2MTEuDQo+ IA0KPiA+DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBmaWZvLT5pcnFfaW5mb1tpXS5p cnEgPSAwOw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZV9pcnEoaXJxKTsN Cj4gPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gPiArICAgICAgIH0NCj4gPiA+ICt9DQo+ID4N Cj4gPiA+ICsvKiBHZXQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgd29yZHMgaW4gdGhlIFRtRmlm byBmb3Igc2VuZGluZy4gKi8NCj4gPiA+ICtzdGF0aWMgaW50IG1seGJmX3RtZmlmb19nZXRfdHhf YXZhaWwoc3RydWN0IG1seGJmX3RtZmlmbyAqZmlmbywgaW50IHZkZXZfaWQpDQo+ID4gPiArew0K PiA+ID4gKyAgICAgICBpbnQgdHhfcmVzZXJ2ZTsNCj4gPiA+ICsgICAgICAgdTY0IHN0czsNCj4g PiA+ICsNCj4gPiA+ICsgICAgICAgLyogUmVzZXJ2ZSBzb21lIHJvb20gaW4gRklGTyBmb3IgY29u c29sZSBtZXNzYWdlcy4gKi8NCj4gPiA+ICsgICAgICAgaWYgKHZkZXZfaWQgPT0gVklSVElPX0lE X05FVCkNCj4gPiA+ICsgICAgICAgICAgICAgICB0eF9yZXNlcnZlID0gZmlmby0+dHhfZmlmb19z aXplIC8gTUxYQkZfVE1GSUZPX1JFU0VSVkVfUkFUSU87DQo+ID4gPiArICAgICAgIGVsc2UNCj4g PiA+ICsgICAgICAgICAgICAgICB0eF9yZXNlcnZlID0gMTsNCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgc3RzID0gcmVhZHEoZmlmby0+dHhfYmFzZSArIE1MWEJGX1RNRklGT19UWF9TVFMpOw0KPiA+ DQo+ID4gPiArICAgICAgIHJldHVybiAoZmlmby0+dHhfZmlmb19zaXplIC0gdHhfcmVzZXJ2ZSAt DQo+ID4gPiArICAgICAgICAgICAgICAgRklFTERfR0VUKE1MWEJGX1RNRklGT19UWF9TVFNfX0NP VU5UX01BU0ssIHN0cykpOw0KPiA+DQo+ID4gUmVkdW5kYW50IHBhcmVucy4NCj4gPiBNb3Jlb3Zl ciwgY29uc2lkZXINCj4gPg0KPiA+IHUzMiBjb3VudDsgLy8gb3Igd2hhdGV2ZXIgc3VpdHMgZm9y IEZJRUxEX0dFVCgpLg0KPiA+IC4uLg0KPiA+DQo+ID4gc3RzID0gcmVhZHEoLi4uKTsNCj4gPiBj b3VudCA9IEZJRUxEX0dFVCguLi4pOw0KPiA+IHJldHVybiAuLi47DQo+IA0KPiBXaWxsIHVwZGF0 ZSBpbiB2MTEuDQo+IA0KPiA+DQo+ID4gPiArfQ0KPiA+DQo+ID4gPiArICAgICAgIHdoaWxlIChz aXplID4gMCkgew0KPiA+ID4gKyAgICAgICAgICAgICAgIGFkZHIgPSBjb25zLT50eF9idWYgKyBj b25zLT50eF9oZWFkOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChjb25zLT50 eF9oZWFkICsgc2l6ZW9mKHU2NCkgPD0NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgTUxYQkZf VE1GSUZPX0NPTlNfVFhfQlVGX1NJWkUpIHsNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IG1lbWNweSgmZGF0YSwgYWRkciwgc2l6ZW9mKHU2NCkpOw0KPiA+ID4gKyAgICAgICAgICAgICAg IH0gZWxzZSB7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsID0gTUxYQkZf VE1GSUZPX0NPTlNfVFhfQlVGX1NJWkUgLSBjb25zLT50eF9oZWFkOw0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgbWVtY3B5KCZkYXRhLCBhZGRyLCBwYXJ0aWFsKTsNCj4gPg0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCh1OCAqKSZkYXRhICsgcGFydGlhbCwgY29u cy0+dHhfYnVmLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1 NjQpIC0gcGFydGlhbCk7DQo+ID4NCj4gPiBVbmFsaWduZWQgYWNjZXNzPyENCj4gDQo+IFRoZSBj b2RlIGhlcmUgaXMgdG8gYnVpbGQgYW5kIGNvcHkgOCBieXRlcyBmcm9tIHRoZSBidWZmZXIgaW50 byB0aGUgJ2RhdGEnDQo+IHZhcmlhYmxlLiBUaGUgc291cmNlIGNvdWxkIGJlIHVuYWxpZ25lZC4g Rm9yIGV4YW1wbGUsIDMgYnl0ZXMgYXJlIGF0IHRoZQ0KPiBlbmQgb2YgdGhlIGJ1ZmZlciBhbmQg NSBieXRlcyBhcmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiBtZW1jcHkoKQ0KPiBp cyB1c2VkIHRvIGRvIGJ5dGUtc3RyZWFtIGNvcHkgd2hpY2ggc2VlbXMgb2suIFBsZWFzZSBjb3Jy ZWN0IG1lIGlmDQo+IEkgbWlzdW5kZXJzdGFuZCB0aGUgY29tbWVudC4NCj4gDQo+ID4NCj4gPiA+ ICsgICAgICAgICAgICAgICB9DQo+ID4NCj4gPiA+ICsgICAgICAgICAgICAgICBidWYuZGF0YSA9 IHJlYWRxKGZpZm8tPnJ4X2Jhc2UgKyBNTFhCRl9UTUZJRk9fUlhfREFUQSk7DQo+ID4gPiArICAg ICAgICAgICAgICAgYnVmLmRhdGEgPSBsZTY0X3RvX2NwdShidWYuZGF0YV9sZSk7DQo+ID4NCj4g PiBBcmUgeW91IHN1cmUgdGhpcyBpcyBjb3JyZWN0Pw0KPiA+IEhvdyBkaWQgeW91IHRlc3QgdGhp cyBvbiBCRSBhcmNoaXRlY3R1cmVzPw0KPiANCj4gVGhhbmtzIGZvciB0aGUgY29tbWVudCEgU2Ft ZSBhcyBhYm92ZSwgdGhlIGNvbnZlcnNpb24gaXMgbm90IHJlYWxseSBuZWVkZWQuDQo+IEknbGwg cmVtb3ZlIHRoZW0gaW4gdjExLiBBcyBmb3IgdGVzdGluZywgd2Ugb25seSBoYXZlIGFybTY0IGxp dHRsZS1lbmRpYW4gTGludXgNCj4gcnVubmluZyBvbiB0aGUgU29DLiBUaGlzIGNvbnZlcnNpb24g ZG9lc24ndCBtYWtlIG11Y2ggZGlmZmVyZW5jZSBmb3IgdGhlIFNvQy4NCj4gQXMgZm9yIEJFIGFy Y2hpdGVjdHVyZSwgd2UgbWFpbmx5IHZlcmlmeSB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgRklGTywg d2hpY2ggaXMgdGhlDQo+IGV4dGVybmFsIGhvc3QgbGlrZSB1c2luZyBwcGM2NC4NCj4gDQo+ID4N Cj4gPiA+ICsgICAgICAgdG1fdmRldiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqdG1fdmRl diksIEdGUF9LRVJORUwpOw0KPiA+DQo+ID4gSXMgaXQgYXBwcm9wcmlhdGUgdXNlIG9mIGRldm1f KiA/DQo+IA0KPiBUaGlzIGlzIFNvQywgdGhlIGRldmljZSB3b24ndCBiZSBjbG9zZWQgb3IgZGV0 YWNoZWQuIFRoZSBvbmx5IGNhc2UgaXMgd2hlbg0KPiB0aGUgZHJpdmVyIGlzIHVubG9hZGVkLiBT byBpdCBhcHBlYXJzIG9rIHRvIHVzZSBkZXZtX2t6YWxsb2MoKSBzaW5jZSBpdCdzDQo+IGFsbG9j YXRlZCBkdXJpbmcgcHJvYmUoKSBhbmQgcmVsZWFzZWQgZHVyaW5nIG1vZHVsZSB1bmxvYWQgLiBQ bGVhc2UNCj4gY29ycmVjdCBtZSBpZiBJIG1pc3VuZGVyc3RhbmQgaXQuDQo+IA0KPiA+DQo+ID4g PiArICAgICAgIGlmICghdG1fdmRldikgew0KPiA+ID4gKyAgICAgICAgICAgICAgIHJldCA9IC1F Tk9NRU07DQo+ID4gPiArICAgICAgICAgICAgICAgZ290byBmYWlsOw0KPiA+ID4gKyAgICAgICB9 DQo+ID4NCj4gPiA+ICsvKiBSZWFkIHRoZSBjb25maWd1cmVkIG5ldHdvcmsgTUFDIGFkZHJlc3Mg ZnJvbSBlZmkgdmFyaWFibGUuICovDQo+ID4gPiArc3RhdGljIHZvaWQgbWx4YmZfdG1maWZvX2dl dF9jZmdfbWFjKHU4ICptYWMpDQo+ID4gPiArew0KPiA+ID4gKyAgICAgICBlZmlfZ3VpZF90IGd1 aWQgPSBFRklfR0xPQkFMX1ZBUklBQkxFX0dVSUQ7DQo+ID4gPiArICAgICAgIGVmaV9zdGF0dXNf dCBzdGF0dXM7DQo+ID4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsNCj4gPg0KPiA+ID4g KyAgICAgICB1OCBidWZbNl07DQo+ID4NCj4gPiBFVEhfQUxFTiA/DQo+IA0KPiBXaWxsIHVwZGF0 ZSBpdCBpbiB2MTENCj4gDQo+ID4NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgc2l6ZSA9IHNpemVv ZihidWYpOw0KPiA+DQo+ID4gRGl0dG8uDQo+IA0KPiBXaWxsIHVwZGF0ZSBpdCBpbiB2MTENCj4g DQo+ID4NCj4gPiA+ICsgICAgICAgc3RhdHVzID0gZWZpLmdldF92YXJpYWJsZShtbHhiZl90bWZp Zm9fZWZpX25hbWUsICZndWlkLCBOVUxMLCAmc2l6ZSwNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBidWYpOw0KPiA+DQo+ID4gPiArICAgICAgIGlmIChzdGF0dXMgPT0g RUZJX1NVQ0NFU1MgJiYgc2l6ZSA9PSBzaXplb2YoYnVmKSkNCj4gPg0KPiA+IERpdHRvLg0KPiAN Cj4gV2lsbCB1cGRhdGUgaXQgaW4gdjExDQo+IA0KPiA+DQo+ID4gPiArICAgICAgICAgICAgICAg bWVtY3B5KG1hYywgYnVmLCBzaXplb2YoYnVmKSk7DQo+ID4NCj4gPiBldGhlcl9hZGRyX2NvcHko KS4NCj4gDQo+IFdpbGwgdXBkYXRlIGl0IGluIHYxMQ0KPiANCj4gPg0KPiA+ID4gK30NCj4gPg0K PiA+ID4gKyAgICAgICBtZW1jcHkobmV0X2NvbmZpZy5tYWMsIG1seGJmX3RtZmlmb19uZXRfZGVm YXVsdF9tYWMsIDYpOw0KPiA+DQo+ID4gZXRoZXJfYWRkcl9jb3B5KCkuLi4NCj4gPg0KPiA+ID4g KyAgICAgICBtbHhiZl90bWZpZm9fZ2V0X2NmZ19tYWMobmV0X2NvbmZpZy5tYWMpOw0KPiA+DQo+ ID4gLi4uIGJ1dCBhY3R1YWxseSBhYm92ZSBzaG91bGQgYmUgcGFydCBvZiB0aGlzIGZ1bmN0aW9u Lg0KPiANCj4gV2lsbCB1cGRhdGUgaXQgaW4gdjExDQo+IA0KPiA+DQo+ID4gLS0NCj4gPiBXaXRo IEJlc3QgUmVnYXJkcywNCj4gPiBBbmR5IFNoZXZjaGVua28NCg==