From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6AB09C7619A for ; Mon, 27 Mar 2023 06:47:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232323AbjC0Grk (ORCPT ); Mon, 27 Mar 2023 02:47:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56708 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231891AbjC0Grj (ORCPT ); Mon, 27 Mar 2023 02:47:39 -0400 Received: from DEU01-FR2-obe.outbound.protection.outlook.com (mail-fr2deu01on2098.outbound.protection.outlook.com [40.107.135.98]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C3EF9469F; Sun, 26 Mar 2023 23:47:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=atUXs0cpJtbzZ/GXEMMY5jc5/ugxKen+p2hkF6pM9XBTxNllXDtvTHyld1uJ8y5+WK2k7uuNVqvRDFAJ9e6IhCcu2fUAxg12TxnAvU+rTZayIcGnu1PpI9X54fV7peV1r4z05ksyApsrafnye+gfDRxvZWhSVmiMnZyF3Zdo4meTe5owGnoFzElzK9CVoM01jppoGsb1mf/1vMyTf05pH+gng9FMdEeL+wuUlBK8r4niy82JVl22fUxRKf+Z0wXFuYt2rCA6oZkXgPRprPNVZ/6eOyV3F9OF+egkyefn0zrWxsiRiO06Go0jurRGqS2oktopFzCrcHJp8ZA+lP4Awg== 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=tsoj6hFIjpk7aNmq2/8apmUZdHT/Fl+AdorxHBnD1KQ=; b=bmTIPquNji2qHVCacuBVnetabNyMItloAbQrpCXGG8qGIP8kTOfwRhepuWxm+r3TaI/fJd5zXB13V4fgqrM9iHBUpGBE0m51JzCKh1YLndXpi/Tdp27q0vVBFFmknEHILhbzNJbWYkqqFWC3tCBmbqYHs7LSkNgc8Pe9CDXH0fmAMvQivl1rYrMlkq1odhEEEXRnLneh+OQURpCkA/aRXQLKgec3hOBX4Id3gJ/sTk7DBZYj7INfHoH9Ub2JI8Q+Qd6UVPa/vU8EaC6t+DE6jTb1AzJAk18/kQ0FC+9RjMVT8TLKblmDKNvs+mkVe4J3YD5OCIOjXo47elyN/7SHuw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fi.rohmeurope.com; dmarc=pass action=none header.from=fi.rohmeurope.com; dkim=pass header.d=fi.rohmeurope.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rohmsemiconductor.onmicrosoft.com; s=selector2-rohmsemiconductor-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tsoj6hFIjpk7aNmq2/8apmUZdHT/Fl+AdorxHBnD1KQ=; b=qq4kJ7FHp//4vGn70GoeHs0Hhz6zLmGGJ27BeD2ZzMhj3LbUf6s7Qy1tO3oCBXyb6RL1QfTD2ZKdtHkHAVp8wlZJEMl8BsFhA713mcX0Za1Alb6o0S78DaUlfflm1uOIqVqKC9Gyfdwy//igQ7aF+lx6X5dhq9PANNUMTgMe8QE= Received: from BEZP281MB2454.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:59::10) by FR3P281MB1517.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:7c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6222.30; Mon, 27 Mar 2023 06:47:21 +0000 Received: from BEZP281MB2454.DEUP281.PROD.OUTLOOK.COM ([fe80::3657:656:f6f6:dc8f]) by BEZP281MB2454.DEUP281.PROD.OUTLOOK.COM ([fe80::3657:656:f6f6:dc8f%6]) with mapi id 15.20.6222.028; Mon, 27 Mar 2023 06:47:20 +0000 From: "Vaittinen, Matti" To: Jonathan Cameron , Matti Vaittinen CC: Lars-Peter Clausen , "linux-kernel@vger.kernel.org" , "linux-iio@vger.kernel.org" Subject: Re: [PATCH v4 4/8] iio: light: Add gain-time-scale helpers Thread-Topic: [PATCH v4 4/8] iio: light: Add gain-time-scale helpers Thread-Index: AQHZWN7cDIQaf5szr06aIGRPida4LK8Cad4AgAEr64CACEf7gIACYHIA Date: Mon, 27 Mar 2023 06:47:20 +0000 Message-ID: References: <20230319180828.452a603c@jic23-huawei> <5ba4ab3d-90ab-113e-1b95-86118d3a7392@gmail.com> <20230325182937.3bdc881e@jic23-huawei> In-Reply-To: <20230325182937.3bdc881e@jic23-huawei> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=fi.rohmeurope.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BEZP281MB2454:EE_|FR3P281MB1517:EE_ x-ms-office365-filtering-correlation-id: a284f593-4045-4bed-6b29-08db2e8f1d3b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: HCyCNMmUFIFs9zYPznFUN6XOHL7/HKWCdfExTQYdW5dwqH1+HCyr+n0JX1dhvndFsA/ne5GOMzjjwZ9+SwsvHg9o17nGgH29OAE8BWljXRxZiq0OVK7J7zhg27fpiNuZRr4pWu2ts+V2NfmdR8JC52VLUDztOQsXz4mBcPT/6efUq8DN1afIOwo2KoZsEpco8UJzBaqhfBKZ/iR9sfVoTZoT6tlC3T/OoMoekW0RfOgXFX/DpWD0ZDpWLa3Lx4wcMcRxAN9DGpOhbZ0y5QPRR8iMMe8FuaYVjUhen4PPu34PpEI8F53sG8qpBRFQXIl3QhQ9Nd2bdhnSmmzUjY9mRuFsdvYcmFxWYzgH9vhTu2XnziSE8+hLDHt8aGgbhMDuFhMoiRssJuOMMVRDp0LYEva2ZZsm/YgxN9Z0TI3i8e/Vvq/105dpwmraq6zJ7nUR4IjMi7VTU7DxGV7lBu0Vib300xykijR19GC5VUm+HqniJaqPM/PKXAaau56qKZW0mg1ee6wHAoVTgjoYki968KlhftLLNlfEPWFDXHP1eWIz/xCCp8xdvHonI2+hpbRzmFkqQL1nA9U8Otw4h3qJBvIefwmVG6ANivdpiqNljN80SkoWBoP2YbjidL6urjsuBERD5RryOoEQ9rwovYLg/QZk1KxfI/nHNEnJzXzhmJyC5yyQ7/OqVBGHV3juIvzB x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BEZP281MB2454.DEUP281.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230028)(4636009)(396003)(136003)(346002)(376002)(366004)(39840400004)(451199021)(91956017)(186003)(76116006)(71200400001)(6486002)(110136005)(53546011)(6506007)(6512007)(316002)(4326008)(66446008)(64756008)(66946007)(66556008)(66476007)(8676002)(54906003)(66899021)(2616005)(478600001)(31686004)(41300700001)(5660300002)(8936002)(30864003)(86362001)(31696002)(38070700005)(38100700002)(2906002)(122000001)(83380400001)(45980500001)(43740500002)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WEF2QXc2UlYzUEJVWDBKSlB4ZnNoNlNVTkJHa29tU1RDNDRuQ1VXMEhZR1dt?= =?utf-8?B?ZnFvVkxBbXo4K3BBSm5YMVN5UFppTnpTNEUwRngxQitPWTl6S09YWEtPeDAy?= =?utf-8?B?RVRCZHJpM0JreGlBOWZnQnIxL2xibGdjUTAzTE1FWHBTOWVnQmlRVGw0cDNO?= =?utf-8?B?T1M5WXNCNXplMkhSSFZZWU5CMGd4Uk5maHdLUXpwQk9ZU2JCKzlrWStWblFr?= =?utf-8?B?SVB5RHk5NWY2MXBlV0tMSk5MODdkTU94b2svak1ianNWSEIxQmc0Z3pBdWdL?= =?utf-8?B?R3laK2pkUzZBdTdUV05IZllqRFR1Z2V1amhCOXc2ZjZvOCszbDdYSldtdnBX?= =?utf-8?B?M2x6WEhpVlZmTGZXeDkyakJaV2MxK1prUTBKdE9QczFYWGVzWUpabFljZTZx?= =?utf-8?B?VFJ4bFlub2dyaVhOdldmbDBuQmxsMjZmTExhVlJKRWd6b0NtM2txbjU2Qm41?= =?utf-8?B?cjljS0w3cHR0Vkc2c3JPbU1paFJhNjd1dEgyNFp5emFHcmpFeVZyaXZEdDdL?= =?utf-8?B?WjdaUlhmWFJ5M1RrREtNL3luR3JUdkxhVG1MZm5ocHBvUEJ1WEtUNjE2dWUw?= =?utf-8?B?WTFqTW5Ob1IveitVeWRtL0ZRYzRwc2IxeWNJcFlvbnlHYk5XNnFGMlVFZTd5?= =?utf-8?B?RjdrVm1SYmJNeTB4TlFiUmFLOEZtMXJEdjJwSVhCNzhkNCt4VEFjUlNDWGU0?= =?utf-8?B?Z3dkVnZxL2IwNEVScVlVMkllRnlMSjd4RUE3b24wbUZWSjYvSjFoM2xSLzlp?= =?utf-8?B?UitEK1FrME5OQ0N4SDJ6akhTMW9pTkRYMVloTnpNQzcvN2hONFB4OVROTm5C?= =?utf-8?B?MFlNdUMvNTZ4R1BLbXZPUUtDaVdKZVhYNUwwSThLU0JvOVlUc1c2eHk5dmpr?= =?utf-8?B?S05mVjEwOGpvZng1MnB4RHVGQTd1UWZqeXRNekRXWkVYTVU0ZkxxcDgrRTdn?= =?utf-8?B?NW5TS3AxUzhBd3FZNGN1YUhLdFFzZHBoS25kOG9WYk1CUjVONDFpVDJkVHEw?= =?utf-8?B?SHBBU1BmUjhuK015YkI1RUphZjFMNTIzSklpeldIZVRRb0hTdlE5M1YxVWZZ?= =?utf-8?B?YmhWZW1wYlVwaEErK2VrS2twOTYrMklmQitZVWJuaHNQazFoQkV3dDh6ckZw?= =?utf-8?B?TzdHdXRsOUIvbldDRitBUVN3MU5SWDFrelI0SC9ZTXBjRWptZFo4emJ4QkFR?= =?utf-8?B?M2orVHd1dlZzSzJGVncxeTZ2M0ZsN2dETWR0OGhjeTlPQVZJcG9DYmNrc0Qr?= =?utf-8?B?UVlsc3JmMHFDTjdsazlraktmZndKdTZrMFA0WHp4a2pFT3dReUFmdVpIWjhi?= =?utf-8?B?RUh6VFdGS1Z1OS9ZbDdsWUdHNGtTbmloM1d5M2dqMnN3UFlWV013RkUrcEZt?= =?utf-8?B?WUFIU01TcjJ0eDhWajRHWG5saVdnR1N1WTZWaXFEMnU5OW5obWpuMmZtQnNU?= =?utf-8?B?Y1hMQzRDZDdPckdvQ2JsL0o2WXk1YVpyUWthSG1KcWsrSE44dHdQUGFIWThq?= =?utf-8?B?NWIxd0J4aUxaU21kTlM2d1JyZ05WK0kxRTQ4dVYzMVhKanU2WW5iWEk5V2h4?= =?utf-8?B?YjM3R2d3RXFQNSt1TWthNHdZUmtGdkFFV2h3Y1pNclcwWmoyZG0vbzlDc0l4?= =?utf-8?B?UGtqajA2T1VqSkNSbGlBd1k0bEsweVJkSTdjSjhybW9FTEpmOElpRnU5N0R3?= =?utf-8?B?U2NZazFGNWppWmJaV2dYekgxZ0ZmRTE5YUxhWVZvRVljUGJ3MmRlbVpkaTl0?= =?utf-8?B?Tis4QnJjdkpEblZicG4xRTIyZmovZ0RtUDVoTzl5VFc1UDNlaHc3U3NXQ2NQ?= =?utf-8?B?M1ArUEZtMlBOYjlqNFVTYWd5cVVySVBvTnlGbDlNblBXU0dMY1lEZ0g3ZVVK?= =?utf-8?B?VmZiVXZLN0pEbVh5YzV1NlRmSy9aUW56VitnRXBQU3UyT1FNd0lzaGY3SjRs?= =?utf-8?B?RklRZkorNk8rdUY1WDdKc1Nld1dIeGpVbTBHaG0xQ00zTVFUSUt5S3owMVF5?= =?utf-8?B?OWxieUE2VFF3cEJDOEtyY1QzYnZkN0wzSlZHV3hSQXpoSUd1UmJoMk5pVCs3?= =?utf-8?B?QjQxcHh3ZjV6dEpNOUhlUTRCOEo1MlhIMlkyanhsWURhdmYxYWdtUTJPL3FD?= =?utf-8?B?dUxxUkxsR20wYTR2OEExY3dSUWR2b2FhNVR4TlAwV01NRmVOMTF6OVRuUmdY?= =?utf-8?Q?bxsXOhmBgHwG53UqsEgtv74=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <113BB1E58DE20345A7B4E3079FB05BA0@DEUP281.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: fi.rohmeurope.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BEZP281MB2454.DEUP281.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: a284f593-4045-4bed-6b29-08db2e8f1d3b X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Mar 2023 06:47:20.8143 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b24d4f96-5b40-44b1-ac2e-2ed7fdbde1c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: dAYvz9aK0iok/CH7Qgn68sCeXUbmHiI90N1qMP/wNVQWXfMPYm8hNXLg9gi5cb+uZcpaA9i6rmhEH/iyqlx/zwIal3bWNTqr3S8HHQs2qsCT2Hu0OefovWFqwkBPVZ4r X-MS-Exchange-Transport-CrossTenantHeadersStamped: FR3P281MB1517 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org T24gMy8yNS8yMyAyMDoyOSwgSm9uYXRoYW4gQ2FtZXJvbiB3cm90ZToNCj4gT24gTW9uLCAyMCBN YXIgMjAyMyAxNDowMTo1NSArMDIwMA0KPiBNYXR0aSBWYWl0dGluZW4gPG1henppZXNhY2NvdW50 QGdtYWlsLmNvbT4gd3JvdGU6DQo+IA0KPj4gT24gMy8xOS8yMyAyMDowOCwgSm9uYXRoYW4gQ2Ft ZXJvbiB3cm90ZToNCj4+PiBPbiBGcmksIDE3IE1hciAyMDIzIDE2OjQzOjIzICswMjAwDQo+Pj4g TWF0dGkgVmFpdHRpbmVuIDxtYXp6aWVzYWNjb3VudEBnbWFpbC5jb20+IHdyb3RlOg0KPj4+ICAg IA0KPj4+PiBTb21lIGxpZ2h0IHNlbnNvcnMgY2FuIGFkanVzdCBib3RoIHRoZSBIVy1nYWluIGFu ZCBpbnRlZ3JhdGlvbiB0aW1lLg0KPj4+PiBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgYWRqdXN0aW5n IHRoZSBpbnRlZ3JhdGlvbiB0aW1lIGhhcyBzaW1pbGFyIGltcGFjdA0KPj4+PiB0byB0aGUgc2Nh bGUgb2YgdGhlIHJlcG9ydGVkIHZhbHVlcyBhcyBnYWluIHNldHRpbmcgaGFzLg0KPj4+Pg0KPj4+ PiBJSU8gdXNlcnMgZG8gdHlwaWNhbGx5IGV4cGVjdCB0byBoYW5kbGUgc2NhbGUgYnkgYSBzaW5n bGUgd3JpdGFibGUgJ3NjYWxlJw0KPj4+PiBlbnRyeS4gRHJpdmVyIHNob3VsZCB0aGVuIGFkanVz dCB0aGUgZ2Fpbi90aW1lIGFjY29yZGluZ2x5Lg0KPj4+Pg0KPj4+PiBJdCBob3dldmVyIGlzIGRp ZmZpY3VsdCBmb3IgYSBkcml2ZXIgdG8ga25vdyB3aGV0aGVyIGl0IHNob3VsZCBjaGFuZ2UNCj4+ Pj4gZ2FpbiBvciBpbnRlZ3JhdGlvbiB0aW1lIHRvIG1lZXQgdGhlIHJlcXVlc3RlZCBzY2FsZS4g VXN1YWxseSBpdCBpcw0KPj4+PiBwcmVmZXJyZWQgdG8gaGF2ZSBsb25nZXIgaW50ZWdyYXRpb24g dGltZSB3aGljaCB1c3VhbGx5IGltcHJvdmVzDQo+Pj4+IGFjY3VyYWN5LCBidXQgdGhlcmUgbWF5 IGJlIHVzZS1jYXNlcyB3aGVyZSBsb25nIG1lYXN1cmVtZW50IHRpbWVzIGNhbiBiZQ0KPj4+PiBh biBpc3N1ZS4gVGh1cyBpdCBjYW4gYmUgcHJlZmVyYWJsZSB0byBhbGxvdyBhbHNvIGNoYW5naW5n IHRoZQ0KPj4+PiBpbnRlZ3JhdGlvbiB0aW1lIC0gYnV0IG1pdGlnYXRlIHRoZSBzY2FsZSBpbXBh Y3QgYnkgYWxzbyBjaGFuZ2luZyB0aGUgZ2Fpbg0KPj4+PiB1bmRlcm5lYXRoLiBFZywgaWYgaW50 ZWdyYXRpb24gdGltZSBjaGFuZ2UgZG91YmxlcyB0aGUgbWVhc3VyZWQgdmFsdWVzLA0KPj4+PiB0 aGUgZHJpdmVyIGNhbiByZWR1Y2UgdGhlIEhXLWdhaW4gdG8gaGFsZi4NCj4+Pj4NCj4+Pj4gVGhl IHRoZW9yeSBvZiB0aGUgY29tcHV0YXRpb25zIG9mIGdhaW4tdGltZS1zY2FsZSBpcyBzaW1wbGUu IEhvd2V2ZXIsDQo+Pj4+IHNvbWUgcGVvcGxlICh1bmRlcnNpZ25lZCkgZ290IHRoYXQgaW1wbGVt ZW50ZWQgd3JvbmcgZm9yIG1vcmUgdGhhbiBvbmNlLg0KPj4+Pg0KPj4+PiBBZGQgc29tZSBnYWlu LXRpbWUtc2NhbGUgaGVscGVycyBpbiBvcmRlciB0byBub3QgZHVibGljYXRlIGVycm9ycyBpbiBh bGwNCj4+Pj4gZHJpdmVycyBuZWVkaW5nIHRoZXNlIGNvbXB1dGF0aW9ucy4NCj4+Pj4NCj4+Pj4g U2lnbmVkLW9mZi1ieTogTWF0dGkgVmFpdHRpbmVuIDxtYXp6aWVzYWNjb3VudEBnbWFpbC5jb20+ DQo+Pj4NCj4+PiBXaGlsc3QgeW91IHVzZSBpdCBpbiB0aGUgdGVzdHMgY3VycmVudGx5IEknbSBu b3QgY29udmluY2VkIHRoZXJlIGlzIGEgZ29vZA0KPj4+IHJlYXNvbiB0byBzZXBhcmF0ZSBpaW9f aW5pdF9paW9fZ3RzKCkgZnJvbSBkZXZtX2lpb19ndHNfYnVpbGRfYXZhaWxfdGFibGVzKCkNCj4+ PiBhcyBJJ2QgZXhwZWN0IHRoZW0gdG8gYmUgY2FsbGVkIGFzIGEgcGFpciBpbiBhbGwgZHJpdmVy cyB0aGF0IHVzZSB0aGlzLg0KPj4NCj4+IEkgd2FzIHdvbmRlcmluZyBpZiBJIHNob3VsZCBvbmx5 IHByb3ZpZGUgdGhlOg0KPj4NCj4+IFtkZXZtX11paW9faW5pdF9paW9fZ3RzKCkgYW5kIGFsd2F5 cyB1bmNvbmRpdGlvbmFsbHkgYWxsb2NhdGUgYW5kIGJ1aWxkDQo+PiB0aGUgdGFibGVzIGluc2lk ZSB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZS4NCj4+DQo+PiBJIGRvbid0IHJlYWxseSBjYXJl IHNvIG11Y2ggYWJvdXQgaG93IHRoZSB0ZXN0cyBhcmUgZG9uZS4gSW4gbXkgb3Bpbmlvbg0KPj4g dGhlIHRlc3RhYmlsaXR5IG5lZWRzIHNob3VsZCByYXJlbHkgYmUgZGV0ZXJtaW5pbmcgd2hhdCB0 aGUgcHJvZHVjdGlvbg0KPj4gY29kZSBsb29rcyBsaWtlLiBJbiB0aGlzIGNhc2UgaXQgaXMgYSB3 YXN0ZSBvZiB0aW1lIC8gcmVzb3VyY2VzIGZvcg0KPj4gZHJpdmVycyB3aGljaCBkbyBub3QgdGVs bCB0aGUgYXZhaWxhYmxlIHNjYWxlcy90aW1lcyB0byB1c2VyLXNwYWNlLCBvcg0KPj4gZG8gbmVl ZCBzb21lIHNwZWNpYWwgcm91dGluZSBmb3IgdGhpcy4gVGhpcyBpcyB3aHkgSSBkaWQgbWFrZQ0K Pj4gYnVpbGRfYXZhaWxfdGFibGVzKCkgb3B0aW9uYWwuIFN0aWxsIG5vdCBzdXJlIHdoYXQgd291 bGQgYmUgdGhlIGJlc3QNCj4+IGFwcHJvYWNoIHRob3VnaC4NCj4gDQo+IEdpdmVuIGl0IHNob3Vs ZCBiZSAnZWFzeSB0byBkbycgYWZ0ZXIgeW91IGhhdmUgdGhpcyBpbmZyYXN0cnVjdHVyZSwgd2h5 IHdvdWxkDQo+IGEgZHJpdmVyIG5vdCBwcm92aWRlIHRoZSBfYXZhaWxhYmxlIHRhYmxlcz8NCg0K UHJldHR5IG11Y2ggdGhlIG9ubHkgdGhpbmcgSSBjYW4gdGhpbmsgb2YgaXMgd2hlbiBhIEhXIGhh cyBzb21lICJmdW5ueSIgDQpsaW1pdGF0aW9ucyByZWdhcmRpbmcgYXZhaWxhYmxlIHZhbHVlcy4g RWcsIHdoZW4gdGhlIGRldmljZSBzdXBwb3J0cyANCm9ubHkgY2VydGFpbiB2YWx1ZXMgZGVwZW5k aW5nIG9uIGEgc2VlbWluZ2x5IHVucmVsYXRlZCBjb25maWcgWC4NCg0KSW4gc3VjaCBjYXNlIHRo ZSBkcml2ZXIgbWlnaHQgbm90IHdhbnQgdG8gYWx3YXlzIGFkdmVydGlzZSBhbGwgdGhlIA0KYXZh aWxhYmxlIHZhbHVlcyAtIGFuZCBpbiBzdWNoIGNhc2UgdGhlIGRyaXZlciBjb3VsZCBub3QgdXNl IHRoZSB0YWJsZXMuDQoNCkFuZCBhcyB0aGlzIGlzIHByb2JhYmx5IHJlYWxseSB1bmxpa2VseSBz Y2VuYXJpbyAtIEluIHY1IEkgZGlkIGp1c3QgcHV0IA0KdGhlIHRhYmxlIGJ1aWxkaW5nIHVuY29u ZGl0aW9uYWxseSBpbiBndHMtaW5pdCBhcyB5b3Ugc3VnZ2VzdGVkLg0KDQo+Pj4gUGVyaGFwcyBp dCdzIHdvcnRoIHJld29ya2luZyB0aGUgdGVzdHMgdG8gZG8gdGhhdCBldmVuIGlmIGl0J3Mgbm90 IHN0cmljdGx5DQo+Pj4gbmVjZXNzYXJ5IGZvciBzcGVjaWZpYyB0ZXN0cy4NCj4+Pg0KPj4+IEkg dGhpbmsgYSBiaXQgbW9yZSBjYXJlIGlzIG5lZWQgd2l0aCBzdG9yYWdlIG9mIHRpbWUgKHVuc2ln bmVkKSArIGRlY2lkZQ0KPj4+IHdoZXRoZXIgdG8gYWxsb3cgZm9yIG5lZ2F0aXZlIGdhaW5zLg0K Pj4NCj4+IE15IGFwcHJvYWNoIHdhcyBqdXN0IHByZXR0eSBzaW1wbGUgImludCBpcyBiaWcgZW5v dWdoIGZvciB0aGUgdGltZXMiDQo+PiAoMjAwMCsgc2Vjb25kcyB3aGVuIHVzaW5nIHVzZWMgYXMg dGltZSB1bml0cyBmZWx0IGxpa2UgbW9yZSB0aGFuIGVub3VnaA0KPj4gZm9yIGxpZ2h0IHNlbnNv cnMpIGFuZCAiZ2FpbnMgYXJlIGFsd2F5cyBwb3NpdGl2ZSIuDQo+Pg0KPj4gSSBoYXZlIG5vdCB0 ZXN0ZWQgdGhlIG5lZ2F0aXZlIGdhaW5zIGF0IGFsbCAtIGJ1dCBJIGFncmVlIHRoaXMgc2hvdWxk J3ZlDQo+PiBiZWVuIGRvY3VtZW50ZWQuIEN1cnJlbnRseSB0aGVyZSBpcyBubyBndHMtaGVscGVy IHVzZXJzIHdobyBuZWVkDQo+PiBuZWdhdGl2ZSBnYWluIChvciBsYXJnZSB0aW1lcyBmb3IgdGhh dCBtYXR0ZXIpIC0gc28gSSB3YXMgbm90IGhhbmRsaW5nIHRoZW0uDQo+Pg0KPj4gSSdsbCB0cnkg dG8gY2hlY2sgd2hhdCBpdCB3b3VsZCBtZWFuIGNvZGUtd2lzZSBpZiB3ZSBjb252ZXJ0ZWQgdGlt ZXMgdG8NCj4+IHVuc2lnbmVkLiBOZWdhdGl2ZSB0aW1lcyBtYWtlIG5vIHNlbnNlIGJ1dCBhbGxv d2luZyBuZWdhdGl2ZSBlcnJvcg0KPj4gdmFsdWVzIGlzIGEgc2ltcGxlIHdheSB0byBnby4NCj4+ DQo+PiBBcyBmb3IgdGhlIG5lZ2F0aXZlIGdhaW5zIC0gSSBoYXZlIG5vIHByb2JsZW0gb2Ygc29t ZW9uZSBhZGRpbmcgYQ0KPj4gc3VwcG9ydCBmb3IgdGhvc2UgaWYgbmVlZGVkLCBidXQgSSBkb24n dCBjdXJyZW50bHkgc2VlIG11Y2ggcG9pbnQgaW4NCj4+IGludmVzdGluZyB0aW1lIGluIHRoYXQu Li4NCj4gDQo+IEknbSBmaW5lIHdpdGgga2VlcGluZyB0aGVtIGFsbCBzaWduZWQsIGJ1dCB5b3Ug cHJvYmFibHkgbmVlZCBzb21lIGNoZWNrcw0KPiB0byBlbnN1cmUgdGhlIGRhdGEgcHJvdmlkZWQg aXNuJ3QgbmVnYXRpdmUuDQoNClllcC4gSSBhZ3JlZS4gQWRkZWQgdGhlIGNoZWNrcyB0byBpbml0 IGluIHY1IDopDQoNCj4+PiBXaGlsc3QgdGhleSBoYXBwZW4gSSdtIG5vdCB0aGF0IGJvdGhlcmVk DQo+Pj4gaWYgdGhhdCBzdWJ0bGV0eSBiZWNvbWVzIGEgZGV2aWNlIGRyaXZlciBwcm9ibGVtIHdo ZW4gY2FsbGluZyB0aGlzLiAgSSdtIG5vdA0KPj4+IHN1cmUgSSd2ZSBzZWVuIGEgc2Vuc29yIHRo YXQgZG9lcyBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBnYWlucyBmb3IgYSBzaW5nbGUNCj4+ PiBjaGFubmVsLg0KPj4NCj4+IEkgYWdyZWUuIElmIGRyaXZlciBuZWVkcyBuZWdhdGl2ZSBnYWlu cywgdGhlbiB0aGUgZHJpdmVyIG5lZWRzIHRvIGRlYWwNCj4+IHdpdGggaXQuIEkgaGF2ZSBubyBv YmplY3Rpb25zIGlmIGRyaXZlciBhdXRob3JzIHdhbnQgdG8gaW1wcm92ZSB0aGVzZQ0KPj4gaGVs cGVycyBieSBhZGRpbmcgc3VwcG9ydCBmb3IgbmVnYXRpdmUgZ2FpbnMsIGJ1dCBpZiB0aGV5IGRv bid0LCB0aGVuDQo+PiB0aGV5IGhhdmUgdGhlIGV4YWN0bHkgc2FtZSBwcm9ibGVtIHRoZXkgd291 bGQgaGF2ZSB3aXRob3V0IHRoZXNlIGhlbHBlcnMgOikNCj4+DQo+Pj4+IC0tLQ0KPj4+PiBDdXJy ZW50bHkgaXQgaXMgb25seSBCVTI3MDM0IHVzaW5nIHRoZXNlIGluIHRoaXMgc2VyaWVzLiBJIGFt IGhvd2V2ZXIgd29ya2luZw0KPj4+PiB3aXRoIGRyaXZlcnMgZm9yIFJHQiBzZW5zb3JzIEJVMjcw MDggYW5kIEJVMjcwMTAgd2hpY2ggaGF2ZSBzaW1pbGFyDQo+Pj4+IFtnYWluIC0gaW50ZWdyYXRp b24gdGltZSAtIHNjYWxlXSAtIHJlbGF0aW9uLiBJIGhvcGUgc2VuZGluZyB0aG9zZQ0KPj4+PiBm b2xsb3dzIHNvb24gYWZ0ZXIgdGhlIEJVMjcwMzQgaXMgZG9uZS4NCj4+Pj4NCj4+Pj4gQ2hhbmdl czoNCj4+Pj4gdjMgPT4gdjQ6DQo+Pj4+IC0gZG9jIHN0eWxpbmcNCj4+Pj4gLSB1c2UgbWVtc2V0 IHRvIHplcm8gdGhlIGhlbHBlciBzdHJ1Y3QgYXQgaW5pdA0KPj4+PiAtIGRyb3AgdW5uZWNlc3Nh cnkgbWluIGNhbGN1bGF0aW9uIGF0IGlpb19maW5kX2Nsb3Nlc3RfZ2Fpbl9sb3coKQ0KPj4+PiAt IHVzZSBuYW1lc3BhY2UgdG8gYWxsIGV4cG9ydHMNCj4+Pj4gLSBtYW55IG1pbm9yIHN0eWxpbmdz DQo+Pj4+IC0gbWFrZSBhdmFpbGFibGUgb3V0c2lkZSBpaW8vbGlnaHQgKG1vdmUgY29kZSB0byBk cml2ZXJzL2lpbyBhbmQgbW92ZSB0aGUNCj4+Pj4gICAgIGhlYWRlciB1bmRlciBpbmNsdWRlDQo+ Pj4+IC0gcmVuYW1lIHRvIGxvb2sgbGlrZSBvdGhlciBmaWxlcyB1bmRlciBkcml2ZXJzL2lpbyAo cy9paW8vaW5kdXN0cmlhbGlvKQ0KPj4+DQo+Pj4gQWguIEkndmUgYWx3YXlzIHJlZ3JldHRlZCBu b3QgdXNpbmcgaWlvXyBmb3IgdGhlIHByZWZpeCBvbiB0aG9zZSBzbyBJJ20gZmluZQ0KPj4+IGlm IHlvdSB3b3VsZCBwcmVmZXIgdG8gc3RpY2sgdG8gaWlvXw0KPj4NCj4+IEkgZG8gbGlrZSBpaW8g YmV0dGVyLiBIb3dldmVyLCBJIHRoaW5rIHdlIHNob3VsZCBoYXZlIGNvbW1vbiBwcmVmaXggZm9y DQo+PiB0aGVzZSBmaWxlcy4gSGF2aW5nIGJvdGggaWlvLSBhbmQgaW5kdXN0cmlhbGlvLSB3aWxs IGJlIGNvbmZ1c2luZyBmb3INCj4+IG5ld2NvbWVycy4gSWYgSSBzYXcganVzdCBvbmUgaWlvLSBw cmVmaXhlZCBmaWxlIEkgd291bGQgaGF2ZSBhc3N1bWVkIGl0DQo+PiBpcyBmb3IgYSBzcGVjaWZp YyB1c2UsIG5vdCBmb3IgY29tbW9uIHVzZSBhcyB0aGUgb3RoZXIgIklJTy1jb3JlIiBmaWxlcy4N Cj4+DQo+PiBPbmUgb3B0aW9uIHdvdWxkIGJlIGNvbnZlcnRpbmcgYWxsIHRoZXNlIGluZHVzdHJp YWxpby0qLmMgZmlsZXMgdG8NCj4+IGlpb18qLmMgLSBidXQgSSBhbSBub3Qgc3VyZSBpZiBpdCBp cyB3b3J0aCB0aGUgaGFzc2xlLg0KPiANCj4gSXQgZ2V0cyBtZXNzeSBiZWNhdXNlIHRoZW4geW91 IGhhdmUgdG8gZml4IHVwIHRoZSBtb2R1bGUgbmFtZXMuIFBlb3BsZSBnZXQNCj4gYW5ub3llZCBp ZiB0aG9zZSBjaGFuZ2UuDQoNCkFoLiBWZXJ5IHZhbGlkIHBvaW50LiBJIHNob3VsZCd2ZSBzZWVu IHRoYXQuDQoNClNvLCBJJ2xsIGtlZXAgdGhlIGxvbmcgZmlsZW5hbWUganVzdCBmb3IgdGhlIHNh a2Ugb2YgdGhlIGNvbnNpc3RlbmN5IC0gDQp1bmxlc3MgeW91IG9iamVjdC4NCg0KPiAuLi4NCj4g DQo+Pj4gICAgDQo+Pj4+ICsvKioNCj4+Pj4gKyAqIGlpb19ndHNfcHVyZ2VfYXZhaWxfc2NhbGVf dGFibGUgLSBmcmVlLXVwIHRoZSBhdmFpbGFibGUgc2NhbGUgdGFibGVzDQo+Pj4+ICsgKiBAZ3Rz OglHYWluIHRpbWUgc2NhbGUgZGVzY3JpcHRvcg0KPj4+PiArICoNCj4+Pj4gKyAqIEZyZWUgdGhl IHNwYWNlIHJlc2VydmVkIGJ5IGlpb19ndHNfYnVpbGRfYXZhaWxfc2NhbGVfdGFibGUoKS4gUGxl YXNlIG5vdGUNCj4+Pj4gKyAqIHRoYXQgdGhlIGhlbHBlcnMgZm9yIGdldHRpbmcgYXZhaWxhYmxl IHNjYWxlcyBsaWtlIHRoZQ0KPj4+PiArICogaWlvX2d0c19hbGxfYXZhaWxfc2NhbGVzKCkgYXJl IG5vdCB1c2FibGUgYWZ0ZXIgdGhpcyBjYWxsLiBUaHVzLCB0aGlzIHNob3VsZA0KPj4+PiArICog YmUgb25seSBjYWxsZWQgYWZ0ZXIgdGhlc2UgaGVscGVycyBjYW4gbm8gbG9uZ2VyIGJlIGNhbGxl ZCAoRWcuIGFmdGVyDQo+Pj4+ICsgKiB0aGUgaWlvLWRldmljZSBoYXMgYmVlbiBkZXJlZ2lzdGVy ZWQpLg0KPj4+DQo+Pj4gV2hpbHN0IEknbSBub3QgdGhhdCBrZWVuIG9uIHRoZSBjb21tZW50IGlu IGdlbmVyYWwsIGlmIHlvdSByZWFsbHkgcmVhbGx5IHdhbnQgdG8NCj4+PiBoYXZlIGl0IHdlIG5l ZWQgdG8gZmlndXJlIG91dCBvbmUgcGxhY2UgdG8gcHV0IGl0IHJhdGhlciB0aGFuIGxvdHMgb2Yg ZHVwbGljYXRlcy4NCj4+DQo+PiBJIGhhdmUgc2VlbiB3YXkgdG9vIG1hbnkgYnVncyB3aXRoIHRo ZSB1bndpbmRpbmcgZXJyb3JzLiBVc3VhbGx5IHdpdGgNCj4+IHRoZSBJUlFzIGJ1dCBhbHNvIHdo ZW4gdXNlci1zcGFjZSBoYXMgYWNjZXNzIHRvIGRyaXZlciBzdHVmZi4gSSBwbGFjZWQNCj4+IHRo aXMgY29tbWVudCBoZXJlIGhvcGluZyBpdCB3b3VsZCBwcmV2ZW50IGF0IGxlYXN0IG9uZSBzdWNo IGJ1ZyBhcyB0aG9zZQ0KPj4gdGVuZCB0byBiZSByZWFsbHkgbmFzdHkgdG8gZGVidWcuIElmIHdl IGF2b2lkIG9uZSwgaXQgaXMgd2VsbCB3b3J0aCBvZg0KPj4gZmV3IGxpbmVzIG9mIGNvbW1lbnQg KElNTykuDQo+IA0KPiBJJ2QgYXJndWUgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgZG9lc24ndCBoYXZl IHRoZSBzdWJ0bGV0aWVzIHRoYXQgaXJxcyBhbmQgc3R1ZmYNCj4gZGlyZWN0bHkgYWNjZXNzZWQg ZnJvbSB1c2Vyc3BhY2UgaGFzICh3aGVyZSBzdWNoIGNvbW1lbnRzIHdvdWxkIHNvbWV0aW1lcyBi ZQ0KPiBoZWxwZnVsISkuICBNZWggSSBkb24ndCBjYXJlIHRoYXQgbXVjaC4NCg0KSG0uIEkgZGlk bid0IGNoZWNrIGhvdyBJSU8gaGFuZGxlcyB0aGUgdXNlci1zcGFjZSByZXF1ZXN0IHRvIGF2YWls YWJsZSANCnNjYWxlcy90aW1lcyAtIGJ1dCBJIHRob3VnaHQgdGhhdCB3b3VsZCBnbyBkaXJlY3Rs eSB0byB0aGUgdGFibGVzIGZvciBhcyANCmxvbmcgYXMgdGhlIElJTy1kZXZpY2Ugc3RheXMgcmVn aXN0ZXJlZC4NCg0KSW4gYW55IGNhc2UsIG1vdmluZyB0aGUgdGFibGUgY3JlYXRpb24gaW4gZ3Rz LWluaXQgbWFkZSB0aGVzZSBmdW5jdGlvbnMgDQppbnRlcm5hbCAtIHNvIEkgdGhpbmsgdGhpcyBw aWVjZSBvZiBkb2Mgc2hvdWxkIGdvIG5vdy4NCg0KPiANCj4gDQo+Pj4+ICsNCj4+Pj4gKy8qKg0K Pj4+PiArICogaWlvX2d0c19idWlsZF9hdmFpbF9zY2FsZV90YWJsZSAtIGNyZWF0ZSB0YWJsZXMg b2YgYXZhaWxhYmxlIHNjYWxlcw0KPj4+PiArICogQGd0czoJR2FpbiB0aW1lIHNjYWxlIGRlc2Ny aXB0b3INCj4+Pj4gKyAqDQo+Pj4+ICsgKiBCdWlsZCB0aGUgdGFibGVzIHdoaWNoIGNhbiByZXBy ZXNlbnQgdGhlIGF2YWlsYWJsZSBzY2FsZXMgYmFzZWQgb24gdGhlDQo+Pj4+ICsgKiBvcmlnaW5h bGx5IGdpdmVuIGdhaW4gYW5kIHRpbWUgdGFibGVzLiBXaGVuIGJvdGggdGltZSBhbmQgZ2FpbiB0 YWJsZXMgYXJlDQo+Pj4+ICsgKiBnaXZlbiB0aGlzIHJlc3VsdHM6DQo+Pj4+ICsgKiAxLiBBIHNl dCBvZiB0YWJsZXMgcmVwcmVzZW50aW5nIGF2YWlsYWJsZSBzY2FsZXMgZm9yIGVhY2ggc3VwcG9y dGVkDQo+Pj4+ICsgKiAgICBpbnRlZ3JhdGlvbiB0aW1lLg0KPj4+PiArICogMi4gQSBzaW5nbGUg dGFibGUgbGlzdGluZyBhbGwgdGhlIHVuaXF1ZSBzY2FsZXMgdGhhdCBhbnkgY29tYmluYXRpb24g b2YNCj4+Pj4gKyAqICAgIHN1cHBvcnRlZCBnYWlucyBhbmQgdGltZXMgY2FuIHByb3ZpZGUuDQo+ Pj4+ICsgKg0KPj4+PiArICogTk9URTogU3BhY2UgYWxsb2NhdGVkIGZvciB0aGUgdGFibGVzIG11 c3QgYmUgZnJlZWQgdXNpbmcNCj4+Pj4gKyAqIGlpb19ndHNfcHVyZ2VfYXZhaWxfc2NhbGVfdGFi bGUoKSB3aGVuIHRoZSB0YWJsZXMgYXJlIG5vIGxvbmdlciBuZWVkZWQuDQo+Pj4+ICsgKg0KPj4+ PiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MuDQo+Pj4+ICsgKi8NCj4+Pj4gK3N0YXRpYyBpbnQg aWlvX2d0c19idWlsZF9hdmFpbF9zY2FsZV90YWJsZShzdHJ1Y3QgaWlvX2d0cyAqZ3RzKQ0KPj4+ PiArew0KPj4+PiArCWludCAqKnBlcl90aW1lX2dhaW5zLCAqKnBlcl90aW1lX3NjYWxlcywgaSwg aiwgcmV0ID0gLUVOT01FTTsNCj4+Pj4gKw0KPj4+PiArCXBlcl90aW1lX2dhaW5zID0ga2NhbGxv YyhndHMtPm51bV9pdGltZSwgc2l6ZW9mKGludCAqKSwgR0ZQX0tFUk5FTCk7DQo+Pj4NCj4+PiBB cyBwZXIgb3RoZXIgdGhyZWFkLCBJIG11Y2ggcHJlZmVyIHJldmlld2luZyBjb2RlIHdpdGggc2l6 ZW9mKCpwZXJfdGltZV9nYWlucykNCj4+PiBhcyBpdCByZXF1aXJlcyBmZXdlciBicmFpbiBjZWxs cy4NCj4+DQo+PiBIbS4gSSB0aGluayBpdCBkZXBlbmRzIG9uIHdoZXRoZXIgb25lIHdhbnRzIHRv IHVuZGVyc3RhbmQgaG93IG1hbnkgYnl0ZXMNCj4+IHRoZSBzaXplb2YoKSBpcyBhY3R1YWxseSBy ZWZlcnJpbmcuIFdlbGwsIGFnYWluLCBJIGd1ZXNzIEkgaGF2ZSBubw0KPj4gY2hvaWNlIGhlcmUu DQo+IA0KPiBXaHkgd291bGQgb25lIGNhcmU/ICBZb3UgY2FyZSBhYm91dCB0aGUgbnVtYmVyIG9m IG9iamVjdHMsIGZvciBhIGtjYWxsb2MgY2FsbA0KPiBidXQgdGhlIHNpemUgaXMgcmFyZWx5IHVz ZWZ1bCB0byBoYXZlIGltbWVkaWF0ZWx5IHZpc2libGUuDQoNCkkgdGhpbmsgdGhpcyBpcyBqdXN0 IGhvdyBteSBtaW5kIHdvcmtzLiBJIGRvIGxpa2UgdG8gc2VlIG5vdCBvbmx5IGhvdyANCm1hbnkg Iml0ZW1zIiB0aGVyZSBpcywgYnV0IGFsc28gdGhlIHNpemUgb2YgdGhlICJpdGVtcyIuIEkgZ3Vl c3MgaXQgDQpyYXJlbHkgcGxheXMgYSBiaWcgcm9sZSwgYnV0IHNvbWV0aW1lcyBpdCdzIG5pY2Ug a25vd2luZyBmb3IgZXhhbXBsZSBob3cgDQptdWNoIG1lbW9yeSBhbiBhcnJheSB0YWtlcyAoZXNw ZWNpYWxseSBpbiBjYXNlcyB3aGVyZSB0aGUgYXJyYXkgaXMgZnJvbSANCnRoZSBzdGFjaywgYnV0 IHNvbWV0aW1lcyBhbHNvIGZvciBoZWFwIGFsbG9jYXRpb25zKS4gRnVydGhlcm1vcmUsIA0Kb2Nj YXNpb25hbGx5IHNlZWluZyB0aGUgYWxpZ25tZW50IGlzIG5pY2UgdG9vLg0KDQpZZXMsIHllcyAt IHRoaXMgaXMgbm90IHJlbGV2YW50IGhlcmUgLSBidXQgdGhpcyBpcyBwcm9iYWJseSB3aHkgSSBw cmVmZXIgDQpzZWVpbmcgdGhlIHNpemVvZih0eXBlICopIGluc3RlYWQgb2YgdGhlIHNpemVvZih2 YXJpYWJsZSkgLSB3aGVuIHRoZSANCnZhcmlhYmxlIGlzIGEgcG9pbnRlci4NCg0KSSB0aGluayBJ IGNoYW5nZWQgdGhpcyB0byBzaXplb2YoKnBlcl90aW1lX2dhaW5zKSBmb3IgdjUuDQoNCj4+Pj4g Kw0KPj4+PiArLyoqDQo+Pj4+ICsgKiBpaW9fZ3RzX2J1aWxkX2F2YWlsX3RpbWVfdGFibGUgLSBi dWlsZCB0YWJsZSBvZiBhdmFpbGFibGUgaW50ZWdyYXRpb24gdGltZXMNCj4+Pj4gKyAqIEBndHM6 CUdhaW4gdGltZSBzY2FsZSBkZXNjcmlwdG9yDQo+Pj4+ICsgKg0KPj4+PiArICogQnVpbGQgdGhl IHRhYmxlIHdoaWNoIGNhbiByZXByZXNlbnQgdGhlIGF2YWlsYWJsZSB0aW1lcyB0byBiZSByZXR1 cm5lZA0KPj4+PiArICogdG8gdXNlcnMgdXNpbmcgdGhlIHJlYWRfYXZhaWwtY2FsbGJhY2suDQo+ Pj4+ICsgKg0KPj4+PiArICogTk9URTogU3BhY2UgYWxsb2NhdGVkIGZvciB0aGUgdGFibGVzIG11 c3QgYmUgZnJlZWQgdXNpbmcNCj4+Pj4gKyAqIGlpb19ndHNfcHVyZ2VfYXZhaWxfdGltZV90YWJs ZSgpIHdoZW4gdGhlIHRhYmxlcyBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4NCj4+Pj4gKyAqDQo+Pj4+ ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcy4NCj4+Pj4gKyAqLw0KPj4+PiArc3RhdGljIGludCBp aW9fZ3RzX2J1aWxkX2F2YWlsX3RpbWVfdGFibGUoc3RydWN0IGlpb19ndHMgKmd0cykNCj4+Pj4g K3sNCj4+Pj4gKwlpbnQgKnRpbWVzLCBpLCBqLCBpZHggPSAwOw0KPj4+PiArDQo+Pj4+ICsJaWYg KCFndHMtPm51bV9pdGltZSkNCj4+Pj4gKwkJcmV0dXJuIDA7DQo+Pj4+ICsNCj4+Pj4gKwl0aW1l cyA9IGtjYWxsb2MoZ3RzLT5udW1faXRpbWUsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsNCj4+ Pj4gKwlpZiAoIXRpbWVzKQ0KPj4+PiArCQlyZXR1cm4gLUVOT01FTTsNCj4+Pj4gKw0KPj4+PiAr CWZvciAoaSA9IGd0cy0+bnVtX2l0aW1lIC0gMTsgaSA+PSAwOyBpLS0pIHsNCj4+Pj4gKwkJaW50 IG5ldyA9IGd0cy0+aXRpbWVfdGFibGVbaV0udGltZV91czsNCj4+Pj4gKw0KPj4+DQo+Pj4gVGhp cyBsb29rcyBsaWtlIGEgc29ydCByb3V0aW5lLiAgRG9uJ3Qgd2UgaGF2ZSBzb21ldGhpbmcgZ2Vu ZXJpYyB0aGF0IHdpbGwgd29yaz8NCj4+DQo+PiBJIHRoaW5rIHRoaXMgaXMgImNvbWJpbmUgYW5k IHNvcnQgbWFueSB0YWJsZXMgaW50byBvbmUgd2hpbGUgZHJvcHBpbmcNCj4+IGR1cGxpY2F0ZXMi LiBJIG11c3QgYWRtaXQgSSBkb24ndCBrbm93IHdoYXQgc29ydCByb3V0aW5lcyB3ZSBoYXZlDQo+ PiBpbi1rZXJuZWwuIElmIHdlIGhhdmUgb25lIHdoaWNoIHJlbW92ZXMgZHVwbGljYXRlcywgdGhl biB3ZSBjb3VsZA0KPj4gcHJvYmFibHkgY29weSBhbGwgdGhlIHRhYmxlcyBpbnRvIG9uZSBhcnJh eSBhbmQgcnVuIHN1Y2ggc29ydCBvbiBpdC4NCj4+DQo+PiBPciB0aGVuIHdlIGNhbiBsZWF2ZSB0 aGlzIGFzIGlzIGFuZCBhZGQgYSBjb21tZW50IGFib3V0IHRlbGxpbmcgaXMgZ29pbmcNCj4+IG9u IGhlcmUgOikNCj4gDQo+IFBlcmZlY3QuDQoNCk5vdyBJIHdvbmRlciBpZiBJIHJlbWVtYmVyZWQg dG8gYWN0dWFsbHkgYWRkIHRoZSBjb21tZW50Li4uDQoNCj4gDQo+Pg0KPj4+ICAgIA0KPj4+PiAr CQlpZiAodGltZXNbaWR4XSA8IG5ldykgew0KPj4+PiArCQkJdGltZXNbaWR4KytdID0gbmV3Ow0K Pj4+PiArCQkJY29udGludWU7DQo+Pj4+ICsJCX0NCj4+Pj4gKw0KPj4+PiArCQlmb3IgKGogPSAw OyBqIDw9IGlkeDsgaisrKSB7DQo+Pj4+ICsJCQlpZiAodGltZXNbal0gPiBuZXcpIHsNCj4+Pj4g KwkJCQltZW1tb3ZlKCZ0aW1lc1tqICsgMV0sICZ0aW1lc1tqXSwNCj4+Pj4gKwkJCQkJKGlkeCAt IGopICogc2l6ZW9mKGludCkpOw0KPj4+PiArCQkJCXRpbWVzW2pdID0gbmV3Ow0KPj4+PiArCQkJ CWlkeCsrOw0KPj4+PiArCQkJfQ0KPj4+PiArCQl9DQo+Pj4+ICsJfQ0KPj4+PiArCWd0cy0+YXZh aWxfdGltZV90YWJsZXMgPSB0aW1lczsNCj4+Pj4gKwkvKg0KPj4+PiArCSAqIFRoaXMgaXMganVz dCB0byBzdXJ2aXZlIGEgdW5saWtlbHkgY29ybmVyLWNhc2Ugd2hlcmUgdGltZXMgaW4gdGhlDQo+ Pj4+ICsJICogZ2l2ZW4gdGltZSB0YWJsZSB3ZXJlIG5vdCB1bmlxdWUuIEVsc2Ugd2UgY291bGQg anVzdCB0cnVzdCB0aGUNCj4+Pj4gKwkgKiBndHMtPm51bV9pdGltZS4NCj4+Pg0KPj4+IElmIGlu dGVncmF0aW9uIHRpbWVzIGFyZW4ndCB1bmlxdWUgSSdkIGNvdW50IGl0IGFzIGRyaXZlciBidWcg YW5kIGVycm9yIG91dA0KPj4+IC9zY3JlYW0uICBQYXBlcmluZyBvdmVyIHRoaW5ncyBsaWtlIHRo aXMganVzdCBtYWtlIGNvZGUgaGFyZGVyIHRvIHJldmlldw0KPj4+IHRvIGRlYWwgd2l0aCB3aGF0 IGlzIHByb2JhYmx5IGEgZHJpdmVyIGJ1Zy4NCj4+DQo+PiBJIGFtIG5vdCBlbnRpcmVseSBzdXJl LiBJIGRvbid0IGtub3cgdGhlIHNlbnNvciBJQ3MgaW4gZGV0YWlscywgYnV0IEkndmUNCj4+IHNl ZW4gcGxlbnR5IG9mIG90aGVyIElDcyB3aGVyZSB3ZSBtYXkgaGF2ZSBkaWZmZXJlbnQgcmVnaXN0 ZXIgdmFsdWVzDQo+PiB0aGF0IG1lYW4gc2FtZSBwaHlzaWNhbCBtZWFzdXJlLiBPbmUgc3VjaCBl eGFtcGxlIGlzIGFsbW9zdCBhbGwgUk9ITQ0KPj4gUE1JQ3MsIHdoZXJlIHdlIG9mdGVuIHNlZSB2 b2x0YWdlIHNlbGVjdGlvbiByZWdpc3RlcnMgbGlrZToNCj4gDQo+Pg0KPj4gcmVnaXN0ZXIgdmFs IDAgdG8gPGZvbz46DQo+PiAgICAtIDEuMFYgKyAodmFsICogMTAgbVYpDQo+PiByZWdpc3RlciB2 YWwgPEE+IHRvIDxNQVg+Og0KPj4gICAgLSAzLjMgVg0KPj4NCj4+IElmIHdlIGhhdmUgc2ltaWxh ciByZWdpc3RlcnMgZm9yIHRoZSB0aW1lLCB0aGVuIGl0IG1heSBiZSBnb29kIGlkZWEgdG8NCj4+ IGFjY2VwdCBzZWxlY3RvcnMgQS4uLk1BWCB0byBoYXZlIHRoZSBzYW1lIHRpbWUuIFRoaXMgYWxs b3dzIHRoZQ0KPj4gZ3RzLWhlbHBlcnMgdG8gYmUgdXNlZCB0byBjb252ZXJ0IHRoZSByZWdpc3Rl ciB2YWx1ZXMgdG8gdGltZXMgYWxzbyBmb3INCj4+IHN1Y2ggZGV2aWNlcy4gSWYgd2UgZG9uJ3Qg YWxsb3cgc2FtZSB0aW1lcyB0byBiZSBpbiB0aGUgdGFibGVzLCB0aGVuDQo+PiB0aGVyZSBtYXkg YmUgdW5rbm93biBidXQgdmFsaWQgcmVnaXN0ZXIgdmFsdWVzIHJlYWQgZnJvbSB0aGUgSUMuDQo+ IA0KPiBUaGF0IEkgYWdyZWUgd2l0aC4gIFNob3VsZCB0aGUgZHJpdmVyIHN1cHBvcnQgbW9yZSB0 aGF0IG9uZSBzdWNoIG9wdGlvbi4NCj4gTm8gaXQgc2hvdWxkbid0LiAgIFNuYXJreSBjb21tZW50 cyBhYm91dCByZXBlYXRlZCB2YWx1ZXMgYXJlIGZpbmUgOykNCj4gSSdkIGFyZ3VlIHRoZSBkcml2 ZXIgaGFzIGEgYnVnIGlmIGl0IGhhc24ndCBoYW1tZXJlZCB0aGUgZGV2aWNlIGludG8gYQ0KPiBr bm93biBzdGF0ZSAodHlwaWNhbGx5IHZpYSBhIGRvY3VtZW50ZWQgcmVzZXQgdmFsdWUpLiAgIFdl IGFsd2F5cyBoYXZlDQo+IGZ1biBjb3JuZXJzIHdoZXJlIGRldmljZXMgd2lsbCBhY2NlcHQgcmVz ZXJ2ZWQgdmFsdWVzIGFuZCBkcml2ZXIgdmVyeQ0KPiByYXJlbHkgaGFuZGxlIHJlYWRpbmcgdGhl bSBiYWNrIHJpZ2h0IC0gYmVjYXVzZSB3ZSBhcnJhbmdlIHRoYXQgdGhleSBhcmUNCj4gZGVmaW5p dGVseSBub3Qgc2V0IGJ5IHJlc2V0dGluZyB0aGUgZGV2aWNlLg0KDQpIbS4gSSBndWVzcyB0aGUg ZnVuZGFtZW50YWwgZGlmZmVyZW5jZSBjb21wYXJlZCB0byBQTUlDcyBoZXJlIGlzIHRoZSANCmFi aWxpdHkgdG8gcmVzZXQgdGhlIGRldmljZSBhdCBwcm9iZS4gUE1JQ3MgY2FuJ3QgcmVhbGx5IGJl IHJlc2V0IGFzIA0KYm9vdCBtYXkgaGF2ZSBhbHJlYWR5IGNoYW5nZWQgdGhlIHZhbHVlcy4NCg0K SSBhbSBzdGlsbCBub3Qgc3VyZSBzdXBwb3J0aW5nIGFsbCByZWdpc3RlciB2YWx1ZXMgaHVydHMu IEFnYWluLCBiZWluZyANCndvcmtlZCBhIHdoaWxlIHdpdGggdGhlIFJPSE0gUE1JQ3MgSSBjYW4n dCBoZWxwIG9mIHRoaW5raW5nIHNpdHVhdGlvbiANCndoZXJlICdkZWZhdWx0IHZhbHVlcycgZm9y IGEgZGV2aWNlIGFyZSBsb2FkIGZyb20gT1RQIGF0IGRldmljZSBzdGFydC4gDQooVGhpcyBpcyB1 c3VhbGx5IGhvdyAncG93ZXItb24nIHZvbHRhZ2VzIGFyZSBoYW5kbGVkIGluIFBNSUNzKS4gSSB0 aGluayANCml0IGlzIHF1aXRlIHN0YW5kYXJkIHRoaW5nIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2 b2x0YWdlcyBmb3IgdmFyaWFudHMgDQp0YXJnZXRlZCB0byBkaWZmZXJlbnQgc3lzdGVtcy4gQW5k IHdoZW4gdGhpcyBpcyBkb25lLCBubyBvbmUgZ3VhcmFudGVlcyANCnRoZSBzYW1lIHJlZ2lzdGVy IHZhbHVlIGlzIHVzZWQgZm9yIGRlZmF1bHQgdGhhdCBpcyBzZXQgaW4gZHJpdmVyIHRvIA0KcmVw cmVzZW50IGNlcnRhaW4gdm9sdGFnZS4gVGh1cyBpdCBpcyAoaW4gbXkgb3BpbmlvbikgYmV0dGVy IHRvIHN1cHBvcnQgDQphbGwga25vd24gcmVnaXN0ZXIgdmFsdWVzLiBIZXJlIGEgYmlnIHRoaW5n IGlzIHRoYXQgcmVndWxhdG9ycyBkbyBvZnRlbiANCnVzZSAnbGluZWFyLXJhbmdlcycgLSB3aGlj aCBtZWFucyBzdXBwb3J0aW5nIGFsbCB0aGUgcmVnaXN0ZXIgdmFsdWVzIA0KZG9lcyBub3QgcmVh bGx5IGNvbnN1bWUgbXVjaCBvZiBtZW1vcnkgLSB1bmxpa2Ugd2l0aCB0aGUgdGFibGUgYmFzZWQg DQppbXBsZW1lbnRhdGlvbiB3ZSBoYXZlIHdpdGggdGhlIHRpbWVzIGhlcmUuDQoNCkZ1cnRoZXJt b3JlLCB0aGVyZSBhcmUgdXNlci1zcGFjZSB0b29scyB0byB3cml0ZSByZWdpc3RlciB2YWx1ZXMg cGFzdCANCnRoZSBkcml2ZXIuIEFuZCB5ZXMsIElmIHRoaXMgaXMgZG9uZSB0aGVuIHRoIGV1c2Vy IHNob3VsZCBiZSBwcmVwYXJlZCANCmZvciB0aGUgZHJpdmVyIHRvIGZhaWwuIFN0aWxsLCBpdCBk b2VzIG5vdCBtZWFuIHdlIHNob3VsZG4ndCBoYW5kbGUgdGhpcyANCmdyYWNlZnVsbHkgKGJlc3Qg d2UgY2FuKSBpbiBkcml2ZXIocykgLSB3aGVuIGl0IGRvZXMgbm90IGNvc3QgbXVjaC4NCg0KPj4+ PiArDQo+Pj4+ICtpbnQgaWlvX2d0c19maW5kX2dhaW5fYnlfc2VsKHN0cnVjdCBpaW9fZ3RzICpn dHMsIGludCBzZWwpDQo+Pj4+ICt7DQo+Pj4+ICsJaW50IGk7DQo+Pj4+ICsNCj4+Pj4gKwlmb3Ig KGkgPSAwOyBpIDwgZ3RzLT5udW1faHdnYWluOyBpKyspDQo+Pj4+ICsJCWlmIChndHMtPmh3Z2Fp bl90YWJsZVtpXS5zZWwgPT0gc2VsKQ0KPj4+PiArCQkJcmV0dXJuIGd0cy0+aHdnYWluX3RhYmxl W2ldLmdhaW47DQo+Pj4+ICsNCj4+Pj4gKwlyZXR1cm4gLUVJTlZBTDsNCj4+Pj4gK30NCj4+Pj4g K0VYUE9SVF9TWU1CT0xfR1BMKGlpb19ndHNfZmluZF9nYWluX2J5X3NlbCk7DQo+Pj4+ICsNCj4+ Pj4gK2ludCBpaW9fZ3RzX2dldF9taW5fZ2FpbihzdHJ1Y3QgaWlvX2d0cyAqZ3RzKQ0KPj4+DQo+ Pj4gQ291bGQganVzdCB1c2UgbWluID0gSU5UX01BWDsNCj4+PiAoaW5kaXJlY3RseSBmcm9tIGxp bnV4L2xpbWl0cy5oLCBpdCdzIGFjdHVhbGx5IGluIHZkc28vbGltaXRzLmgNCj4+PiBidXQgc2hv dWxkIG5vdCBpbmNsdWRlIHRoYXQgZGlyZWN0bHkgSSB0aGluaykNCj4+PiB0aGVuIEkgZG9uJ3Qg aGluayB5b3UgbmVlZCB0aGUgc3BlY2lhbCBjYXNpbmcgZm9yIHRoZQ0KPj4+IGZpcnN0IGVudHJ5 Lg0KPj4NCj4+IEhtbS4gSSBndWVzcyB5b3UgdGhpbmsgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUg Y2FzZSBudW1faHdnYWluID09IDAgaGVyZQ0KPj4gYXMgaXQgc2hvdWxkIGJlIGNoZWNrZWQgaW4g dGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUuIE5vdCBzdXJlIHdoYXQgdG8NCj4+IHRoaW5rIGFi b3V0IGl0Lg0KPiANCj4gWXVwLiBVc2luZyB0aGlzIGNvZGUgd2l0aG91dCBoYXZpbmcgbXVsdGlw bGUgaGFyZHdhcmUgZ2FpbnMgd291bGQgYmUgb2RkLg0KPiBFdmVuIGlmIHlvdSBkaWQgSSBzdGls bCBmZWVsIHRoYXQgbnVtX2h3Z2FpbiA9PSAxIHdvdWxkIGJlIGNvcnJlY3Qgc2V0dGluZy4NCg0K VGhlIG9ubHkgY2FzZSBJIGNhbiB0aGluayBvZiB3b3VsZCBiZSBub3QgcHJvdmlkaW5nIGhhcmR3 YXJlLWdhaW5zIGF0IA0KYWxsIGFuZCBvbmx5IHVzaW5nIHRoZSB0aW1lcyB0byBzdXBwb3J0IHRo ZSAncmVnIDw9PiB0aW1lJyBjb252ZXJzaW9ucy4gDQpCdXQgeWVzLCBpbiB0aGF0IGNhc2UgZW5k aW5nIHVwIGluIHRoaXMgcm91dGluZSB3b3VsZCBwcm9iYWJseSBiZSBvZGQgLSANCmFuZCBJIHRo aW5rIHVzaW5nIHRoZXNlIGhlbHBlcnMganVzdCBmb3IgdGhlICdyZWcgPD0+IHRpbWUnIGNvbnZl cnNpb24gDQptaWdodCBiZSBhbiBvdmVya2lsbC4NCg0KPiAuLi4uDQo+IA0KPj4+DQo+Pj4gQ3Vy cmVudGx5IGNhbiBiZSBuZWdhdGl2ZS4gIEV2ZW4gd2hlbiB5b3Ugc3RvcCB0aGF0IGJlaW5nIHRo ZSBjYXNlDQo+Pj4gYnkgbWFraWduIHRpbWUgdW5zaWduZWQsIHlvdSBuZWVkIHRvIGJlIGNhcmVm dWwgd2l0aCByYW5nZXMgaGVyZS4NCj4+PiBZb3UgbWF5IGJlIGJldHRlciBvZmYgc2VwYXJhdGlu ZyB0aGUgZXJyb3IgaGFuZGxpbmcgZnJvbSB0aGUgdmFsdWVzDQo+Pj4gdG8gYXZvaWQgYW55IGlz c3VlcyBldmVuIHRob3VnaCB0aGF0IG1ha2VzIGl0IGEgbGl0dGxlIGhhcmRlciB0byB1c2UuDQo+ Pg0KPj4gWWVzLiBBcyBJIHdyb3RlIGFib3ZlLCBJIHRob3VnaHQgdGhhdCB0aGUgZHJpdmVyIGF1 dGhvciBuZWVkcyB0byBlbnN1cmUNCj4+IHRoZSB2YWxpZCB0aW1lcyB3b3VsZCBhbHdheXMgYmUg cG9zaXRpdmUuIEkgd2FzIGd1ZXNzaW5nIHVzZWMgaXMgZ29pbmcNCj4+IHRvIGJlIHVzZWQgYXMg dW5pdCBmb3IgbW9zdCBjYXNlcyBhbmQgMjAwMCsgc2Vjb25kcyBpcyBwcm9iYWJseQ0KPj4gc3Vm ZmljaWVudC4gQnV0IHllcywgSSBndWVzcyBJIHNob3VsZCBoYXZlIGRvY3VtZW50ZWQgdGhpcy4N Cj4gDQo+IFdoeSBub3QganVzdCBjaGVjayB0aGlzIGF0IGluaXQ/ICBPdGhlcndpc2UgdGhpcyB3 aWxsIGJlIGEgdHJpY2t5IGJ1Zw0KPiB0byB0cmFjayBkb3duLiBEb2N1bWVudGF0aW9uIGlzIGdv b2QsIGJ1dCBjb2RlIHRoYXQgdGVsbHMgeW91IG5vIGlzIGV2ZW4NCj4gYmV0dGVyLg0KPiANCg0K SSBhZ3JlZS4gQW5kIEkgYWRkZWQgdGhlc2UgY2hlY2tzIGluIGluaXQgYXQgdjUgOikNCg0KPj4+ PiArfQ0KPj4+PiArRVhQT1JUX1NZTUJPTF9HUEwoaWlvX2d0c19maW5kX2ludF90aW1lX2J5X3Nl bCk7DQo+Pj4+ICsNCj4+Pj4gK2ludCBpaW9fZ3RzX2ZpbmRfc2VsX2J5X2ludF90aW1lKHN0cnVj dCBpaW9fZ3RzICpndHMsIGludCB0aW1lKQ0KPj4+PiArew0KPj4+PiArCWNvbnN0IHN0cnVjdCBp aW9faXRpbWVfc2VsX211bCAqaXRpbWU7DQo+Pj4+ICsNCj4+Pj4gKwlpdGltZSA9IGlpb19ndHNf ZmluZF9pdGltZV9ieV90aW1lKGd0cywgdGltZSk7DQo+Pj4+ICsJaWYgKCFpdGltZSkNCj4+Pj4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+Pj4+ICsNCj4+Pj4gKwlyZXR1cm4gaXRpbWUtPnNlbDsNCj4+ Pg0KPj4+IGl0aW1lLT5zZWwgY2FuIGJlIG5lZ2F0aXZlLiAgSSB3b25kZXIgaWYgeW91IHNob3Vs ZCBqdXN0IG1ha2UgdGhhdA0KPj4+IHUxNiBzbyB0aGF0IHlvdSBjYW4gYWx3YXlzIHJldHVybiBp dCBhcyBhIHBvc2l0aXZlIGludGVnZXIgYnV0DQo+Pj4gaGF2aW5nIGl0IGFzIHVuc2lnbmVkIGlu IHRoZSBzdHJ1Y3R1cmUuDQo+Pg0KPj4gSGVyZSBJIGRpZCB0aGUgc2FtZSBhc3N1bXB0aW9uIG9m IHNlbCBzaXplcy4gSSBkb24ndCBleHBlY3Qgd2UgdG8gc2VlIDMyDQo+PiBiaXQgc2VsZWN0b3Jz LiBUbyB0ZWxsIHRoZSB0cnV0aCwgSSBqdXN0IGZvbGxvd2VkIHRoZSBsaW5lYXJfcmFuZ2VzDQo+ PiBsb2dpYyB3aGljaCBpcyBoZWF2aWx5IHVzZWQgaW4gdGhlIHJlZ3VsYXRvciBkcml2ZXJzLg0K Pj4NCj4+PiBPdGhlcndpc2UgeW91IG5lZWQgdG8gYWRkIHNvbWUgZG9jcyBvbiB0aG9zZSBsaW1p dHMgYW5kIHByb2JhYmx5DQo+Pj4gc2FuaXR5IGNoZWNrIHRoZW0gZHVyaW5nIHRoZSBfaW5pdCgp DQo+Pg0KPj4gSSBhbSBhbG1vc3QgY2VydGFpbiB0aGUgc2FuaXR5IGNoZWNrIGlzIGdvaW5nIHRv IGJlIGFuIG92ZXJraWxsLCBidXQgaXQNCj4+IHN1cmUgaXMgZG9hYmxlLiBUaGUgb25sdSBjb3Ju ZXIgY2FzZSBJIGNhbiB0aGluayBvZiBpcyBpZiByZWdpc3Rlcg0KPj4gcmVhbGx5IGFjY2VwdHMg dGhlIHRpbWUgaXRzZWxmIGFzIGEgInNlbGVjdG9yIiAtIGJ1dCBldmVuIHRoZW4gaGF2aW5nDQo+ PiBzdWNoIGxhcmdlIHZhbHVlcyB0aGV5IHdvdWxkIHVzZSB0aGUgd2hvbGUgMzJiaXRzIHdvdWxk IGJlIHVubGlrZWx5Lg0KPiANCj4gSSdkIGJlIGZpbmUgd2l0aCBjbGVhciBkb2N1bWVudGF0aW9u IG9mIHRoZSBsaW1pdHMsIGJ1dCBpdCBpdCdzIHRyaXZpYWwNCj4gdG8gY2hlY2sgdGhleSBhcmUg YmVpbmcgb2JleWVkLCB0aGF0IG1ha2VzIGZvciBhbiBlYXNpZXIgdG8gdXNlIGJpdA0KPiBvZiBj b2RlLg0KDQpUcnVlLg0KDQo+IA0KPj4NCj4+Pj4gK30NCj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BM KGlpb19ndHNfZmluZF9zZWxfYnlfaW50X3RpbWUpOw0KPj4+PiArDQo+Pj4+ICtzdGF0aWMgaW50 IGlpb19ndHNfZ2V0X3RvdGFsX2dhaW4oc3RydWN0IGlpb19ndHMgKmd0cywgaW50IGdhaW4sIGlu dCB0aW1lKQ0KPj4+PiArew0KPj4+PiArCWNvbnN0IHN0cnVjdCBpaW9faXRpbWVfc2VsX211bCAq aXRpbWU7DQo+Pj4+ICsNCj4+Pj4gKwlpZiAoIWlpb19ndHNfdmFsaWRfZ2FpbihndHMsIGdhaW4p KQ0KPj4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+Pj4gKw0KPj4+PiArCWlmICghZ3RzLT5udW1f aXRpbWUpDQo+Pj4+ICsJCXJldHVybiBnYWluOw0KPj4+PiArDQo+Pj4+ICsJaXRpbWUgPSBpaW9f Z3RzX2ZpbmRfaXRpbWVfYnlfdGltZShndHMsIHRpbWUpOw0KPj4+PiArCWlmICghaXRpbWUpDQo+ Pj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPj4+PiArDQo+Pj4+ICsJcmV0dXJuIGdhaW4gKiBpdGlt ZS0+bXVsOw0KPj4+DQo+Pj4gQ2hlY2sgZm9yIG92ZXJmbG93IHBlcmhhcHM/DQo+Pg0KPj4gSSB0 aGluayB0aGF0IGlmIHdlIHdhbnQgdG8gYWRkIHRoZSBvdmVyZmxvdyBjaGVja3MsIHdlIHNob3Vs ZCBkbyB0aGF0DQo+PiBhbHJlYWR5IGluIGluaXQuIFRoYXQgd2F5IHdlIGNhbiBjaGVjayBhbGwg dGhlIGNvbWJpbmF0aW9ucyBiZWZvcmUgdGhleQ0KPj4gYXJlIHVzZWQgLSBzbyB0aGF0IHRoZSBk cml2ZXIgYXV0aG9ycyBnZXQgdGhlIGVycm9ycyBldmVuIGlmIHRoZXkgZGlkDQo+PiBub3QgdGVz dCBhbGwgdGhlIHRpbWVzL2dhaW5zIHRoZWlyIEhXIGlzIHN1cHBvcnRpbmcuIEkgYW0gbm90IHJl YWxseQ0KPj4gY29udmluY2VkIGl0J3Mgd29ydGggdGhvdWdoLg0KPiANCj4gR2FpbnMgY2FuIGdl dCB2ZXJ5IHZlcnkgbGFyZ2UsIHNvIGluIHRoaXMgb25lIGNhc2UgSSdkIGNoZWNrIGl0LiBGaW5l DQo+IHRvIGRvIGl0IGF0IGluaXQgdGhvdWdoLiAgTm90ZSB0aGUgbGFyZ2UgZ2FpbnMgc29tZXRp bWVzIGNvbWUgYWJvdXQgYmVjYXVzZQ0KPiBTSSB1bml0cyBzb21ldGltZXMgbWVhbiB0aGUgb2J2 aW91cyBiYXNlIHVuaXQgaXMgdmVyeSBzbWFsbCBvciB2ZXJ5IGJpZy4NCg0KSSB0aGluayBJIGFk ZGVkIHRoZSBjaGVjayB0byBpbml0IGluIHY1IDopDQoNClRoYW5rcyBhZ2FpbiENCg0KWW91cnMs DQoJLS1NYXR0aQ0KDQoNCi0tIA0KTWF0dGkgVmFpdHRpbmVuDQpMaW51eCBrZXJuZWwgZGV2ZWxv cGVyIGF0IFJPSE0gU2VtaWNvbmR1Y3RvcnMNCk91bHUgRmlubGFuZA0KDQp+fiBXaGVuIHRoaW5n cyBnbyB1dHRlcmx5IHdyb25nIHZpbSB1c2VycyBjYW4gYWx3YXlzIHR5cGUgOmhlbHAhIH5+DQoN Cg==