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 X-Spam-Level: X-Spam-Status: No, score=-5.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7AAB9C433B4 for ; Mon, 17 May 2021 14:59:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 581EC601FC for ; Mon, 17 May 2021 14:59:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241720AbhEQPBO (ORCPT ); Mon, 17 May 2021 11:01:14 -0400 Received: from mail-mw2nam12on2054.outbound.protection.outlook.com ([40.107.244.54]:11624 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S241178AbhEQOvM (ORCPT ); Mon, 17 May 2021 10:51:12 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WQZaZRXjVPjemgRGoanYcPZ4L9GiJgmyguH5GWpD6k9DS0uhYHEnQxfVmkzOROsSfy+GcTX1UQLwP1A54XnbyO3dHlpoyraRWdWrgB5kD6hWNDqNmZaFj9Ve770abzjW+roq9cAaQ67X0ATgA3zRQQMc3ylei7N9kQwr44UzV0f3UYtuD/nBTpSxLFUsf6rK4c0EcMIfX9tdjs6N1eKwG7GKKkJoe4LZHHITyZj1aF0v0nJ5MY7NNCCdcztTMgw1lmUTV+rECwyoSM7gC62WeqZFkxYo0Qs2PT4++Fuj1J3ABYheLH9+7JLXdvt5+wH17ebjx6QEomvZTTvoyZm4ug== 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-SenderADCheck; bh=DZAEWNNR0JULK0bV1dYi/UR2RMJsDrgpA7M1tuGe6pQ=; b=ZrCfF/Et9PlDHOlDc017S3gqJYM4rRkL5VfvfIGNF/yvU7i8gerqUIpPAR52H8cylRR1mb0jdtVXByfzEWBKQU6G+fxdR0njk2XYrDxqMSSTFPxEHBOSmUVKkEF4XsB2xKdAaaGK2v43UykWZYx3IGiLdpt2jC/rvBGAkbbjainKrZaJMdGBJSd6H9Hz+XCCsizV7XmaMWnKNtg0Zfum0VViYK3kQEwepscybRKFBM7raMQtDf8FQCdlthFbjIbTMArGBW9EZ7K+NuKe12i57BaYahL5CjBvdh1Rx5tD97oGJcHuDusziwNftv6hmPT+E2zDQu97ksTT7eN+6JdygQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.62.198) smtp.rcpttodomain=lists.infradead.org smtp.mailfrom=xilinx.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=xilinx.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DZAEWNNR0JULK0bV1dYi/UR2RMJsDrgpA7M1tuGe6pQ=; b=ZE9Czvi4a59/j4pR9dBcUEqVz3PAI98F+nAg5fQhuIiazBqe9zT3ng2/35Gaqj6KTmNkO2q1AU5jumeycnYzzy3mN9asBR8lIN4L/8lw6UAufuAEi3jLPqz7hfka3NdeNyuLqaURMR6yjyJlyFD2Hp9IPMEcgawDFE6NfFhNS/s= Received: from BN6PR22CA0029.namprd22.prod.outlook.com (2603:10b6:404:37::15) by BY5PR02MB7089.namprd02.prod.outlook.com (2603:10b6:a03:238::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.26; Mon, 17 May 2021 14:49:54 +0000 Received: from BN1NAM02FT038.eop-nam02.prod.protection.outlook.com (2603:10b6:404:37:cafe::22) by BN6PR22CA0029.outlook.office365.com (2603:10b6:404:37::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.25 via Frontend Transport; Mon, 17 May 2021 14:49:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.62.198) smtp.mailfrom=xilinx.com; lists.infradead.org; dkim=none (message not signed) header.d=none;lists.infradead.org; dmarc=pass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.62.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.62.198; helo=xsj-pvapexch02.xlnx.xilinx.com; Received: from xsj-pvapexch02.xlnx.xilinx.com (149.199.62.198) by BN1NAM02FT038.mail.protection.outlook.com (10.13.2.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.4129.27 via Frontend Transport; Mon, 17 May 2021 14:49:53 +0000 Received: from xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) by xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Mon, 17 May 2021 07:49:52 -0700 Received: from smtp.xilinx.com (172.19.127.96) by xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) with Microsoft SMTP Server id 15.1.2176.2 via Frontend Transport; Mon, 17 May 2021 07:49:52 -0700 Envelope-to: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, alvaro.gamez@hazent.com, devicetree@vger.kernel.org, linux-pwm@vger.kernel.org, robh@kernel.org, sean.anderson@seco.com Received: from [172.30.17.109] (port=54636) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1lieZ5-0003pg-Jb; Mon, 17 May 2021 07:49:52 -0700 To: Sean Anderson , Michal Simek , Rob Herring CC: Linux PWM List , , Alvaro Gamez , "linux-kernel@vger.kernel.org" , linux-arm-kernel References: <20210511191239.774570-1-sean.anderson@seco.com> <20210513021631.GA878860@robh.at.kernel.org> <70176596-2250-8ae1-912a-9f9c30694e7d@seco.com> <9cf3a580-e4d3-07fc-956f-dc5c84802d93@xilinx.com> <87b31b06-9b81-5743-e3a8-50c255c0a83c@seco.com> <141399b7-db9c-45e1-f743-9e3bc5e6f9fd@xilinx.com> <5b038a5a-9aed-7810-66d0-128e586283e4@seco.com> From: Michal Simek Subject: Re: [PATCH v3 1/2] dt-bindings: pwm: Add Xilinx AXI Timer Message-ID: <170a62b1-c56f-d393-adfd-7064cb0ec9d5@xilinx.com> Date: Mon, 17 May 2021 16:49:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <5b038a5a-9aed-7810-66d0-128e586283e4@seco.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 51c803a6-4fac-445d-89de-08d919430825 X-MS-TrafficTypeDiagnostic: BY5PR02MB7089: X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zfUc0wkMrcLuT9qSgrKDELMjGlvKrsdaiijJAWbtPKSoyTaE7C2FWuFuAQucTM5qI8N8MlNOLuVyhVOJvj+ry2nYxrkXyYvDSiI7rN0wsjWVgd0HlzHvaDMS/WIzaWXSM9cy54XoMq9sdYAJbTHNbhFBcn+LEZzXpqkwheIV72qZeDHTM9GmM10ZV8f2dqcCO6xN0B/S8RdkvzQl7pn6JZCOZO6uGxY7QVFJr3sM95v6uMPOmgBiMsYea3t8Yrgoq1mDLgwTL+vBBjc5EQ6dM3xwc59ZVHPd2t1uV+iQMp8LF4iBIKJh3NGGZju3aD2Lat9PWx072OLBBk4VNdr5FrUclj95Ze+tQ/svsv2QPbGctgqCSv5GoWhKaRiZjqeYh1Fxbi/DfhDCZ3wsufACuDn13FOmr26HpCbr4tqlQp7qpKOR6PyNHXB6BRwtN3sXD91Aj+V0DYYY5GAW6UNEGwpOhW5WEE7iwOfdDHFVrIHGuye4AagY9RdhRwqiUYB2/CBxwhyXCC1bcu4ptG12YsU0DsTbM2AMak5rP85Zi0ptrh+owG71/CD6mFu3E0+T//sMg39LlDHLskq2ljtK+FTb2iMzp/hSu6YFIWQpp0a2zqauVJr6omEZznnZpJAtkh8pLMz47pUUP5e1Hpqh2iD6XZNEDOivOwzUpDu6nxYZt4+b130o8d6KRUruIypV8etjHBCB1198bSoe1VrBhQ== X-Forefront-Antispam-Report: CIP:149.199.62.198;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:xsj-pvapexch02.xlnx.xilinx.com;PTR:unknown-62-198.xilinx.com;CAT:NONE;SFS:(4636009)(396003)(376002)(39840400004)(346002)(136003)(36840700001)(46966006)(8936002)(83380400001)(356005)(70586007)(8676002)(31696002)(9786002)(54906003)(4326008)(70206006)(7636003)(186003)(110136005)(426003)(2906002)(478600001)(2616005)(36860700001)(316002)(26005)(36906005)(6666004)(44832011)(30864003)(82310400003)(36756003)(5660300002)(47076005)(53546011)(336012)(31686004)(50156003)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 May 2021 14:49:53.8337 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 51c803a6-4fac-445d-89de-08d919430825 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.62.198];Helo=[xsj-pvapexch02.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: BN1NAM02FT038.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR02MB7089 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 5/17/21 4:40 PM, Sean Anderson wrote: > > > On 5/17/21 4:28 AM, Michal Simek wrote: >> >> >> On 5/14/21 7:13 PM, Sean Anderson wrote: >>> >>> >>> On 5/14/21 4:50 AM, Michal Simek wrote: >>>> >>>> >>>> On 5/13/21 10:43 PM, Rob Herring wrote: >>>>> On Thu, May 13, 2021 at 10:28 AM Sean Anderson >>> wrote: >>>>>> >>>>>> >>>>>> >>>>>> On 5/13/21 10:33 AM, Sean Anderson wrote: >>>>>>     > >>>>>>     > >>>>>>     > On 5/12/21 10:16 PM, Rob Herring wrote: >>>>>>     >  > On Tue, May 11, 2021 at 03:12:37PM -0400, Sean Anderson > wrote: >>>>>>     >  >> This adds a binding for the Xilinx LogiCORE IP AXI Timer. >>> This device is >>>>>>     >  >> a "soft" block, so it has many parameters which would > not be >>>>>>     >  >> configurable in most hardware. This binding is usually >>> automatically >>>>>>     >  >> generated by Xilinx's tools, so the names and values of > some >>> properties >>>>>>     >  >> must be kept as they are. Replacement properties have been >>> provided for >>>>>>     >  >> new device trees. >>>>>>     >  > >>>>>>     >  > Because you have some tool generating properties is not a >>> reason we have >>>>>>     >  > to accept them upstream. >>>>>>     > >>>>>>     > These properties are already in >>> arch/microblaze/boot/dts/system.dts and >>>>>>     > in the devicetree supplied to Linux by qemu. Removing these >>> properties >>>>>>     > will break existing setups, which I would like to avoid. >>>>> >>>>> Already in use in upstream dts files is different than just >>>>> 'automatically generated' by vendor tools. >>>>> >>>>>>     > >>>>>>     >  > 'deprecated' is for what *we* have deprecated. >>>>>>     > >>>>>>     > Ok. I will remove that then. >>>>>>     > >>>>>>     >  > >>>>>>     >  > In this case, I don't really see the point in defining new >>> properties >>>>>>     >  > just to have bool. >>>>>>     > >>>>>>     > I don't either, but it was requested, by Michal... >>>>>> >>>>>> Err, your comment on the original bindings was >>>>>> >>>>>>     > Can't all these be boolean? >>>>> >>>>> With no other context, yes that's what I would ask. Now you've given >>>>> me some context, between using the existing ones and 2 sets of >>>>> properties to maintain, I choose the former. >>>>> >>>>>> And Michal commented >>>>>> >>>>>>     > I think in this case you should described what it is used by >>> current >>>>>>     > driver in Microblaze and these options are required. The rest >>> are by >>>>>>     > design optional. >>>>>>     > If you want to change them to different value then current > binding >>>>>>     > should be deprecated and have any transition time with code >>> alignment. >>>>>> >>>>>> So that is what I tried to accomplish with this revision. I also > tried >>>>>> allowing something like >>>>>> >>>>>>            xlnx,one-timer-only = <0>; /* two timers */ >>>>>>            xlnx,one-timer-only = <1>; /* one timer  */ >>>>>>            xlnx,one-timer-only; /* one timer */ >>>>>>            /* property absent means two timers */ >>>>>> >>>>>> but I was unable to figure out how to express this with > json-schema. I >>>>>> don't think it's the best design either... >>>>> >>>>> json-schema would certainly let you, but generally we don't want >>>>> properties to have more than 1 type. >>>> >>>> One thing is what it is in system.dts file which was committed in 2009 >>>> and there are just small alignments there. But none is really using it. >>>> Maybe I should just delete it. >>>> And this version was generated by Xilinx ancient tools at that time. > All >>>> parameters there are fully describing HW and they are not changing. > Only >>>> new one can be added. >>>> >>>>    From the current microblaze code you can see which properties are > really >>>> used. >>>> >>>> reg >>>> interrupts >>>> xlnx,one-timer-only >>>> clocks >>>> clock-frequency >>> >>> There is also an implicit dependency on xlnx,count-width. Several times >>> the existing driver assumes the counter width is 32, but this should >>> instead be discovered from the devicetree. >> >> For me it is important what it is used now. Which is not >> xlnx,count-width. That's why if you want to add it you can as optional >> property. > > At the very least we should sanity check it. E.g. check that it is 32 > and return -EINVAL if it is not. I have not a problem with it but make sure that the check is there only when property is present not to break all current users. >> >>> >>>> It means from my point of view these should be listed in the binding. >>>> clock-frequency is optional by code when clock is defined. >>>> >>>> All other properties listed in system.dts are from my perspective >>>> optional and that's how it should be. >>> >>> Here is the situation as I understand it >>> >>> * This device has existed for around 15 years (since 2006) >>> * Because it is a soft device, there are several configurable parameters >>> * Although all of these parameters must be known for a complete >>>    implementation of this device, some are unnecessary if onlu reduced >>>    functionality is needed. >>> * A de facto devicetree binding for this device has existed for at least >>>    12 years (since 2009), but likely for as long as the device itself > has >>>    existed. This binding has not changed substantially during this time. >> >> note: IP itself is even much older. >> >>> * This binding is present in devicetrees from the Linux kernel, from >>>    qemu, in other existing systems, and in devicetrees generated by >>>    Xilinx's toolset. >> >> Only from Linux. Qemu is trying to reuse the same properties but it can >> also add own one. They are trying to be aligned as much as possible but >> there are a lot of cases where Qemu requires much more information. (I >> am not saying in this timer case but in general). >> >> >>> * Because the existing driver for this device does not implement all >>>    functionality for this device, not all properties in the devicetree >>>    binding are used. In fact, there is (as noted above) one property >>>    which should be in use but is not because the current driver >>>    (implicitly) does not support some hardware configurations. >>> * To support additional functionality, it is necessary to >>>    use hardware parameters which were not previously necessary. >>> >>> Based on the above, we can classify the properties of this binding into >>> several categories. >>> >>> * Those which are currently read by the driver. >>>    * compatible >>>    * reg >>>    * clocks >>>    * clock-frequency >>>    * interrupts >>>    * xlnx,one-timer-only >>> >>> * Those which reflect hardware parameters which are currently explicitly >>>    or implicitly relied upon by the driver. >>>    * reg >>>    * clocks >>>    * clock-frequency >>>    * interrupts >>>    * xlnx,counter-width >>>    * xlnx,one-timer-only >>> >>> * Those which are currently present in device trees. >>>    * compatible >>>    * reg >>>    * interrupts >>>    * clocks >>>    * clock-frequency >>>    * xlnx,count-width >>>    * xlnx,one-timer-only >>>    * xlnx,trig0-assert >>>    * xlnx,trig1-assert >>>    * xlnx,gen0-assert >>>    * xlnx,gen1-assert >>> >>> When choosing what properties to use, we must consider what the impact >>> of our changes will be on not just the kernel but also on existing users >>> of this binding: >> >> I don't think that this is valid. Rob is asking for adding #pwm-cells >> which is purely Linux binding. We also don't know what properties are >> used by others projects not just Linux or Qemu. Also required properties >> in Linux doesn't need to be required in U-Boot for example even we are >> trying to aligned all of them. Another case are others RTOSes, etc. > > Here I do not see a way around this. Any way we do it we will need to > have some new binding. However, as noted below, adding a new binding for > configuration is easier than exposing properties in new ways. please look below. >>> * To use properties currently present in device trees, we just need to >>>    modify the kernel driver. >>> * To add additional properties (such as e.g. '#pwm-cells'), we must >>>    modify the kernel driver. In addition, users who would like to use >>>    these new properties must add them to their device trees. This may be >>>    done in a mechanical way using e.g. overlays. >>> * To deprecate existing properties and introduce new properties to >>>    expose the same underlying hardware parameters, we must modify the >>>    kernel driver. However, this has a large impact on existing users. >>>    They must modify their tools to generate this information in a >>>    different format. When this information is generated by upstream > tools >>>    this may require updating a core part of their build system. For many >>>    projects, this may happen very infrequently because of the risk that >>>    such an upgrade will break things. Even if you suggest that Xilinx > can >>>    easily modify its tools to generate any sort of output, the time for >>>    this upgrade to be deployed/adopted may be significantly longer. >> >>  From Xilinx perspective it would be ideal to use only properties which >> fully describe HW in the form how they are generated today. They are >> stable for a lot of years and as I said only new one are added. >> But this alignment wasn't accepted long time ago and we have been asked >> to start to align these properties with similar HW done by others. >> And truth is that in a lot of cases there is clear 1:1 mapping and >> generic properties can be simply use. This mapping ends in Xilinx device >> tree generator. >> Back to your point. Required properties are required by Linux driver >> only. This driver is around for quite a long time where certain policies >> haven't been setup/used/enforced (Microblaze is 2nd architecture which >> started to use device tree). >> We should create DT binding doc at that time but in 2009 it wasn't >> standard practice. In 2007 Grant was adding support for Xilinx PPC >> platform also without any DT binding document too. >> >> That's why we need to review current unwritten DT binding based on code >> requirements and look at it how to fix it (if needed) and then add PWM >> support on the top of it. >> If something needs to be deprecated, let's deprecate it and have >> transition time for a year or so to adapt to it. >> >> Rob knows much better than I how this should be handled. >> >> Based on your list: >>    * compatible >>    * reg >>    * clocks >>    * clock-frequency >>    * interrupts >>    * xlnx,one-timer-only >> >> all of these are required property in new DT binding. >> >> xlnx,counter-width is optional if you want to use. > > Again, for the existing driver this should at least be sanity-checked so > we fail noisily instead of buggily. Till now for 10+ years none reported any issue with it that's why I don't think this is a big problem. > This is the situation for the generate polarity as well. The driver will > work fine, but you will not have PWM output and there will be no > indication why. This is why I think we should start with supporting the > existing output. This is used to ensure the device will work as > configured. We can also add support for different properties exposing > the same information, but to support only new properties is not very > useful. Binding can enforce properties to be required for PWM only and that's totally okay. And because this is new feature and Rob don't need to like that new properties they can be aligned. I also have preference to be as much aligned with HW parameters but if they have to change then let's change it and I will ensure that Xilinx DTG will generate them as they were described to be aligned. Thanks, Michal 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 X-Spam-Level: X-Spam-Status: No, score=-5.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6966FC433ED for ; Mon, 17 May 2021 14:52:03 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CB33E610CB for ; Mon, 17 May 2021 14:52:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CB33E610CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=xilinx.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:Subject: From:References:CC:To:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=qWBidsyTlOCx2MUn1Ro+rMIdgWqZZ82EaJtt+QSe+Ms=; b=TTt8DO9R8uCI38AZv/8FFF7N9 5n5iNGbGYKIHiznS6cP8iqNe6mHgZTCBn5BLse7zbS056Q7BTG0FVagZwuXvJTTCr96fcaRw86Pvt xzX1sZ8/MRyaJATms1K/UoJqV1A3fAgwc0wOqFbcrkVXic3MWXyLGVF2aIoXK15ENAQ1Zmz2PSpNo wn1oNC+y+EX/wi585H6lWDjAtr2GT5n7TrqIgKws3bi79wGrE6bd/NgKMNGOEGM0FBjTG4HAFrUWX utFjweZd2hBRwTAVQDmFeIQFcs28yRNcs/l1Sgg/LX34qLvgyyimMXq/elJWaMZqe51tgkNnziH1F 6VWlr2ujQ==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lieZM-00FJTF-Pg; Mon, 17 May 2021 14:50:09 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lieZG-00FJRR-Ga for linux-arm-kernel@desiato.infradead.org; Mon, 17 May 2021 14:50:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:In-Reply-To:MIME-Version:Date:Message-ID:Subject:From:References :CC:To:Sender:Reply-To:Content-ID:Content-Description; bh=DZAEWNNR0JULK0bV1dYi/UR2RMJsDrgpA7M1tuGe6pQ=; b=In4IQPntmblur5wImpelUok7mG kzwGaPjt+hGkL9QY/MaJNCwIsth12A86GF1qe5cKC5lZ4e5t8FJm+PLnh2JwAploeUHQboAI6nu1X UxHbU5oDUPX+Aa6tP39FjADjO4m/0OVgvgirrIREfQkvgNYVa67xNZh8GO0dp+ky0CktRGgPUF5xv acfAIAtsk0BRKvDm/JFEUeTGfKe9SPFIzC4KGZ+zSs+qw/+X5L4pFTMBLzwbn2B+KPnnGAeKQJ5wk ZrfqDwrsoAIGCfI3iQ+9sSNpYH6YzInwFSVpBw5Qr8Zfcin9YmOScF3X0d3KEgK6wKyV0eOuTYjLK jzqlKsrQ==; Received: from mail-mw2nam12on2072.outbound.protection.outlook.com ([40.107.244.72] helo=NAM12-MW2-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lieZB-00DspE-Dz for linux-arm-kernel@lists.infradead.org; Mon, 17 May 2021 14:50:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WQZaZRXjVPjemgRGoanYcPZ4L9GiJgmyguH5GWpD6k9DS0uhYHEnQxfVmkzOROsSfy+GcTX1UQLwP1A54XnbyO3dHlpoyraRWdWrgB5kD6hWNDqNmZaFj9Ve770abzjW+roq9cAaQ67X0ATgA3zRQQMc3ylei7N9kQwr44UzV0f3UYtuD/nBTpSxLFUsf6rK4c0EcMIfX9tdjs6N1eKwG7GKKkJoe4LZHHITyZj1aF0v0nJ5MY7NNCCdcztTMgw1lmUTV+rECwyoSM7gC62WeqZFkxYo0Qs2PT4++Fuj1J3ABYheLH9+7JLXdvt5+wH17ebjx6QEomvZTTvoyZm4ug== 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-SenderADCheck; bh=DZAEWNNR0JULK0bV1dYi/UR2RMJsDrgpA7M1tuGe6pQ=; b=ZrCfF/Et9PlDHOlDc017S3gqJYM4rRkL5VfvfIGNF/yvU7i8gerqUIpPAR52H8cylRR1mb0jdtVXByfzEWBKQU6G+fxdR0njk2XYrDxqMSSTFPxEHBOSmUVKkEF4XsB2xKdAaaGK2v43UykWZYx3IGiLdpt2jC/rvBGAkbbjainKrZaJMdGBJSd6H9Hz+XCCsizV7XmaMWnKNtg0Zfum0VViYK3kQEwepscybRKFBM7raMQtDf8FQCdlthFbjIbTMArGBW9EZ7K+NuKe12i57BaYahL5CjBvdh1Rx5tD97oGJcHuDusziwNftv6hmPT+E2zDQu97ksTT7eN+6JdygQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.62.198) smtp.rcpttodomain=lists.infradead.org smtp.mailfrom=xilinx.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=xilinx.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DZAEWNNR0JULK0bV1dYi/UR2RMJsDrgpA7M1tuGe6pQ=; b=ZE9Czvi4a59/j4pR9dBcUEqVz3PAI98F+nAg5fQhuIiazBqe9zT3ng2/35Gaqj6KTmNkO2q1AU5jumeycnYzzy3mN9asBR8lIN4L/8lw6UAufuAEi3jLPqz7hfka3NdeNyuLqaURMR6yjyJlyFD2Hp9IPMEcgawDFE6NfFhNS/s= Received: from BN6PR22CA0029.namprd22.prod.outlook.com (2603:10b6:404:37::15) by BY5PR02MB7089.namprd02.prod.outlook.com (2603:10b6:a03:238::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.26; Mon, 17 May 2021 14:49:54 +0000 Received: from BN1NAM02FT038.eop-nam02.prod.protection.outlook.com (2603:10b6:404:37:cafe::22) by BN6PR22CA0029.outlook.office365.com (2603:10b6:404:37::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.25 via Frontend Transport; Mon, 17 May 2021 14:49:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.62.198) smtp.mailfrom=xilinx.com; lists.infradead.org; dkim=none (message not signed) header.d=none;lists.infradead.org; dmarc=pass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.62.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.62.198; helo=xsj-pvapexch02.xlnx.xilinx.com; Received: from xsj-pvapexch02.xlnx.xilinx.com (149.199.62.198) by BN1NAM02FT038.mail.protection.outlook.com (10.13.2.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.4129.27 via Frontend Transport; Mon, 17 May 2021 14:49:53 +0000 Received: from xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) by xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Mon, 17 May 2021 07:49:52 -0700 Received: from smtp.xilinx.com (172.19.127.96) by xsj-pvapexch02.xlnx.xilinx.com (172.19.86.41) with Microsoft SMTP Server id 15.1.2176.2 via Frontend Transport; Mon, 17 May 2021 07:49:52 -0700 Received: from [172.30.17.109] (port=54636) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1lieZ5-0003pg-Jb; Mon, 17 May 2021 07:49:52 -0700 To: Sean Anderson , Michal Simek , Rob Herring CC: Linux PWM List , , Alvaro Gamez , "linux-kernel@vger.kernel.org" , linux-arm-kernel References: <20210511191239.774570-1-sean.anderson@seco.com> <20210513021631.GA878860@robh.at.kernel.org> <70176596-2250-8ae1-912a-9f9c30694e7d@seco.com> <9cf3a580-e4d3-07fc-956f-dc5c84802d93@xilinx.com> <87b31b06-9b81-5743-e3a8-50c255c0a83c@seco.com> <141399b7-db9c-45e1-f743-9e3bc5e6f9fd@xilinx.com> <5b038a5a-9aed-7810-66d0-128e586283e4@seco.com> From: Michal Simek Subject: Re: [PATCH v3 1/2] dt-bindings: pwm: Add Xilinx AXI Timer Message-ID: <170a62b1-c56f-d393-adfd-7064cb0ec9d5@xilinx.com> Date: Mon, 17 May 2021 16:49:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <5b038a5a-9aed-7810-66d0-128e586283e4@seco.com> Content-Language: en-US X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 51c803a6-4fac-445d-89de-08d919430825 X-MS-TrafficTypeDiagnostic: BY5PR02MB7089: X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zfUc0wkMrcLuT9qSgrKDELMjGlvKrsdaiijJAWbtPKSoyTaE7C2FWuFuAQucTM5qI8N8MlNOLuVyhVOJvj+ry2nYxrkXyYvDSiI7rN0wsjWVgd0HlzHvaDMS/WIzaWXSM9cy54XoMq9sdYAJbTHNbhFBcn+LEZzXpqkwheIV72qZeDHTM9GmM10ZV8f2dqcCO6xN0B/S8RdkvzQl7pn6JZCOZO6uGxY7QVFJr3sM95v6uMPOmgBiMsYea3t8Yrgoq1mDLgwTL+vBBjc5EQ6dM3xwc59ZVHPd2t1uV+iQMp8LF4iBIKJh3NGGZju3aD2Lat9PWx072OLBBk4VNdr5FrUclj95Ze+tQ/svsv2QPbGctgqCSv5GoWhKaRiZjqeYh1Fxbi/DfhDCZ3wsufACuDn13FOmr26HpCbr4tqlQp7qpKOR6PyNHXB6BRwtN3sXD91Aj+V0DYYY5GAW6UNEGwpOhW5WEE7iwOfdDHFVrIHGuye4AagY9RdhRwqiUYB2/CBxwhyXCC1bcu4ptG12YsU0DsTbM2AMak5rP85Zi0ptrh+owG71/CD6mFu3E0+T//sMg39LlDHLskq2ljtK+FTb2iMzp/hSu6YFIWQpp0a2zqauVJr6omEZznnZpJAtkh8pLMz47pUUP5e1Hpqh2iD6XZNEDOivOwzUpDu6nxYZt4+b130o8d6KRUruIypV8etjHBCB1198bSoe1VrBhQ== X-Forefront-Antispam-Report: CIP:149.199.62.198; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:xsj-pvapexch02.xlnx.xilinx.com; PTR:unknown-62-198.xilinx.com; CAT:NONE; SFS:(4636009)(396003)(376002)(39840400004)(346002)(136003)(36840700001)(46966006)(8936002)(83380400001)(356005)(70586007)(8676002)(31696002)(9786002)(54906003)(4326008)(70206006)(7636003)(186003)(110136005)(426003)(2906002)(478600001)(2616005)(36860700001)(316002)(26005)(36906005)(6666004)(44832011)(30864003)(82310400003)(36756003)(5660300002)(47076005)(53546011)(336012)(31686004)(50156003)(43740500002); DIR:OUT; SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 May 2021 14:49:53.8337 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 51c803a6-4fac-445d-89de-08d919430825 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.62.198]; Helo=[xsj-pvapexch02.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: BN1NAM02FT038.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR02MB7089 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210517_074957_532835_154ED23B X-CRM114-Status: GOOD ( 49.78 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiA1LzE3LzIxIDQ6NDAgUE0sIFNlYW4gQW5kZXJzb24gd3JvdGU6Cj4gCj4gCj4gT24gNS8x Ny8yMSA0OjI4IEFNLCBNaWNoYWwgU2ltZWsgd3JvdGU6Cj4+Cj4+Cj4+IE9uIDUvMTQvMjEgNzox MyBQTSwgU2VhbiBBbmRlcnNvbiB3cm90ZToKPj4+Cj4+Pgo+Pj4gT24gNS8xNC8yMSA0OjUwIEFN LCBNaWNoYWwgU2ltZWsgd3JvdGU6Cj4+Pj4KPj4+Pgo+Pj4+IE9uIDUvMTMvMjEgMTA6NDMgUE0s IFJvYiBIZXJyaW5nIHdyb3RlOgo+Pj4+PiBPbiBUaHUsIE1heSAxMywgMjAyMSBhdCAxMDoyOCBB TSBTZWFuIEFuZGVyc29uCj4+PiA8c2Vhbi5hbmRlcnNvbkBzZWNvLmNvbT4gd3JvdGU6Cj4+Pj4+ Pgo+Pj4+Pj4KPj4+Pj4+Cj4+Pj4+PiBPbiA1LzEzLzIxIDEwOjMzIEFNLCBTZWFuIEFuZGVyc29u IHdyb3RlOgo+Pj4+Pj7CoMKgwqDCoCA+Cj4+Pj4+PsKgwqDCoMKgID4KPj4+Pj4+wqDCoMKgwqAg PiBPbiA1LzEyLzIxIDEwOjE2IFBNLCBSb2IgSGVycmluZyB3cm90ZToKPj4+Pj4+wqDCoMKgwqAg PsKgID4gT24gVHVlLCBNYXkgMTEsIDIwMjEgYXQgMDM6MTI6MzdQTSAtMDQwMCwgU2VhbiBBbmRl cnNvbgo+IHdyb3RlOgo+Pj4+Pj7CoMKgwqDCoCA+wqAgPj4gVGhpcyBhZGRzIGEgYmluZGluZyBm b3IgdGhlIFhpbGlueCBMb2dpQ09SRSBJUCBBWEkgVGltZXIuCj4+PiBUaGlzIGRldmljZSBpcwo+ Pj4+Pj7CoMKgwqDCoCA+wqAgPj4gYSAic29mdCIgYmxvY2ssIHNvIGl0IGhhcyBtYW55IHBhcmFt ZXRlcnMgd2hpY2ggd291bGQKPiBub3QgYmUKPj4+Pj4+wqDCoMKgwqAgPsKgID4+IGNvbmZpZ3Vy YWJsZSBpbiBtb3N0IGhhcmR3YXJlLiBUaGlzIGJpbmRpbmcgaXMgdXN1YWxseQo+Pj4gYXV0b21h dGljYWxseQo+Pj4+Pj7CoMKgwqDCoCA+wqAgPj4gZ2VuZXJhdGVkIGJ5IFhpbGlueCdzIHRvb2xz LCBzbyB0aGUgbmFtZXMgYW5kIHZhbHVlcyBvZgo+IHNvbWUKPj4+IHByb3BlcnRpZXMKPj4+Pj4+ wqDCoMKgwqAgPsKgID4+IG11c3QgYmUga2VwdCBhcyB0aGV5IGFyZS4gUmVwbGFjZW1lbnQgcHJv cGVydGllcyBoYXZlIGJlZW4KPj4+IHByb3ZpZGVkIGZvcgo+Pj4+Pj7CoMKgwqDCoCA+wqAgPj4g bmV3IGRldmljZSB0cmVlcy4KPj4+Pj4+wqDCoMKgwqAgPsKgID4KPj4+Pj4+wqDCoMKgwqAgPsKg ID4gQmVjYXVzZSB5b3UgaGF2ZSBzb21lIHRvb2wgZ2VuZXJhdGluZyBwcm9wZXJ0aWVzIGlzIG5v dCBhCj4+PiByZWFzb24gd2UgaGF2ZQo+Pj4+Pj7CoMKgwqDCoCA+wqAgPiB0byBhY2NlcHQgdGhl bSB1cHN0cmVhbS4KPj4+Pj4+wqDCoMKgwqAgPgo+Pj4+Pj7CoMKgwqDCoCA+IFRoZXNlIHByb3Bl cnRpZXMgYXJlIGFscmVhZHkgaW4KPj4+IGFyY2gvbWljcm9ibGF6ZS9ib290L2R0cy9zeXN0ZW0u ZHRzIGFuZAo+Pj4+Pj7CoMKgwqDCoCA+IGluIHRoZSBkZXZpY2V0cmVlIHN1cHBsaWVkIHRvIExp bnV4IGJ5IHFlbXUuIFJlbW92aW5nIHRoZXNlCj4+PiBwcm9wZXJ0aWVzCj4+Pj4+PsKgwqDCoMKg ID4gd2lsbCBicmVhayBleGlzdGluZyBzZXR1cHMsIHdoaWNoIEkgd291bGQgbGlrZSB0byBhdm9p ZC4KPj4+Pj4KPj4+Pj4gQWxyZWFkeSBpbiB1c2UgaW4gdXBzdHJlYW0gZHRzIGZpbGVzIGlzIGRp ZmZlcmVudCB0aGFuIGp1c3QKPj4+Pj4gJ2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkJyBieSB2ZW5k b3IgdG9vbHMuCj4+Pj4+Cj4+Pj4+PsKgwqDCoMKgID4KPj4+Pj4+wqDCoMKgwqAgPsKgID4gJ2Rl cHJlY2F0ZWQnIGlzIGZvciB3aGF0ICp3ZSogaGF2ZSBkZXByZWNhdGVkLgo+Pj4+Pj7CoMKgwqDC oCA+Cj4+Pj4+PsKgwqDCoMKgID4gT2suIEkgd2lsbCByZW1vdmUgdGhhdCB0aGVuLgo+Pj4+Pj7C oMKgwqDCoCA+Cj4+Pj4+PsKgwqDCoMKgID7CoCA+Cj4+Pj4+PsKgwqDCoMKgID7CoCA+IEluIHRo aXMgY2FzZSwgSSBkb24ndCByZWFsbHkgc2VlIHRoZSBwb2ludCBpbiBkZWZpbmluZyBuZXcKPj4+ IHByb3BlcnRpZXMKPj4+Pj4+wqDCoMKgwqAgPsKgID4ganVzdCB0byBoYXZlIGJvb2wuCj4+Pj4+ PsKgwqDCoMKgID4KPj4+Pj4+wqDCoMKgwqAgPiBJIGRvbid0IGVpdGhlciwgYnV0IGl0IHdhcyBy ZXF1ZXN0ZWQsIGJ5IE1pY2hhbC4uLgo+Pj4+Pj4KPj4+Pj4+IEVyciwgeW91ciBjb21tZW50IG9u IHRoZSBvcmlnaW5hbCBiaW5kaW5ncyB3YXMKPj4+Pj4+Cj4+Pj4+PsKgwqDCoMKgID4gQ2FuJ3Qg YWxsIHRoZXNlIGJlIGJvb2xlYW4/Cj4+Pj4+Cj4+Pj4+IFdpdGggbm8gb3RoZXIgY29udGV4dCwg eWVzIHRoYXQncyB3aGF0IEkgd291bGQgYXNrLiBOb3cgeW91J3ZlIGdpdmVuCj4+Pj4+IG1lIHNv bWUgY29udGV4dCwgYmV0d2VlbiB1c2luZyB0aGUgZXhpc3Rpbmcgb25lcyBhbmQgMiBzZXRzIG9m Cj4+Pj4+IHByb3BlcnRpZXMgdG8gbWFpbnRhaW4sIEkgY2hvb3NlIHRoZSBmb3JtZXIuCj4+Pj4+ Cj4+Pj4+PiBBbmQgTWljaGFsIGNvbW1lbnRlZAo+Pj4+Pj4KPj4+Pj4+wqDCoMKgwqAgPiBJIHRo aW5rIGluIHRoaXMgY2FzZSB5b3Ugc2hvdWxkIGRlc2NyaWJlZCB3aGF0IGl0IGlzIHVzZWQgYnkK Pj4+IGN1cnJlbnQKPj4+Pj4+wqDCoMKgwqAgPiBkcml2ZXIgaW4gTWljcm9ibGF6ZSBhbmQgdGhl c2Ugb3B0aW9ucyBhcmUgcmVxdWlyZWQuIFRoZSByZXN0Cj4+PiBhcmUgYnkKPj4+Pj4+wqDCoMKg wqAgPiBkZXNpZ24gb3B0aW9uYWwuCj4+Pj4+PsKgwqDCoMKgID4gSWYgeW91IHdhbnQgdG8gY2hh bmdlIHRoZW0gdG8gZGlmZmVyZW50IHZhbHVlIHRoZW4gY3VycmVudAo+IGJpbmRpbmcKPj4+Pj4+ wqDCoMKgwqAgPiBzaG91bGQgYmUgZGVwcmVjYXRlZCBhbmQgaGF2ZSBhbnkgdHJhbnNpdGlvbiB0 aW1lIHdpdGggY29kZQo+Pj4gYWxpZ25tZW50Lgo+Pj4+Pj4KPj4+Pj4+IFNvIHRoYXQgaXMgd2hh dCBJIHRyaWVkIHRvIGFjY29tcGxpc2ggd2l0aCB0aGlzIHJldmlzaW9uLiBJIGFsc28KPiB0cmll ZAo+Pj4+Pj4gYWxsb3dpbmcgc29tZXRoaW5nIGxpa2UKPj4+Pj4+Cj4+Pj4+PsKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgeGxueCxvbmUtdGltZXItb25seSA9IDwwPjsgLyogdHdvIHRpbWVycyAqLwo+ Pj4+Pj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHhsbngsb25lLXRpbWVyLW9ubHkgPSA8MT47IC8q IG9uZSB0aW1lcsKgICovCj4+Pj4+PsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGxueCxvbmUtdGlt ZXItb25seTsgLyogb25lIHRpbWVyICovCj4+Pj4+PsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyog cHJvcGVydHkgYWJzZW50IG1lYW5zIHR3byB0aW1lcnMgKi8KPj4+Pj4+Cj4+Pj4+PiBidXQgSSB3 YXMgdW5hYmxlIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGV4cHJlc3MgdGhpcyB3aXRoCj4ganNvbi1z Y2hlbWEuIEkKPj4+Pj4+IGRvbid0IHRoaW5rIGl0J3MgdGhlIGJlc3QgZGVzaWduIGVpdGhlci4u Lgo+Pj4+Pgo+Pj4+PiBqc29uLXNjaGVtYSB3b3VsZCBjZXJ0YWlubHkgbGV0IHlvdSwgYnV0IGdl bmVyYWxseSB3ZSBkb24ndCB3YW50Cj4+Pj4+IHByb3BlcnRpZXMgdG8gaGF2ZSBtb3JlIHRoYW4g MSB0eXBlLgo+Pj4+Cj4+Pj4gT25lIHRoaW5nIGlzIHdoYXQgaXQgaXMgaW4gc3lzdGVtLmR0cyBm aWxlIHdoaWNoIHdhcyBjb21taXR0ZWQgaW4gMjAwOQo+Pj4+IGFuZCB0aGVyZSBhcmUganVzdCBz bWFsbCBhbGlnbm1lbnRzIHRoZXJlLiBCdXQgbm9uZSBpcyByZWFsbHkgdXNpbmcgaXQuCj4+Pj4g TWF5YmUgSSBzaG91bGQganVzdCBkZWxldGUgaXQuCj4+Pj4gQW5kIHRoaXMgdmVyc2lvbiB3YXMg Z2VuZXJhdGVkIGJ5IFhpbGlueCBhbmNpZW50IHRvb2xzIGF0IHRoYXQgdGltZS4KPiBBbGwKPj4+ PiBwYXJhbWV0ZXJzIHRoZXJlIGFyZSBmdWxseSBkZXNjcmliaW5nIEhXIGFuZCB0aGV5IGFyZSBu b3QgY2hhbmdpbmcuCj4gT25seQo+Pj4+IG5ldyBvbmUgY2FuIGJlIGFkZGVkLgo+Pj4+Cj4+Pj7C oMKgwqAgRnJvbSB0aGUgY3VycmVudCBtaWNyb2JsYXplIGNvZGUgeW91IGNhbiBzZWUgd2hpY2gg cHJvcGVydGllcyBhcmUKPiByZWFsbHkKPj4+PiB1c2VkLgo+Pj4+Cj4+Pj4gcmVnCj4+Pj4gaW50 ZXJydXB0cwo+Pj4+IHhsbngsb25lLXRpbWVyLW9ubHkKPj4+PiBjbG9ja3MKPj4+PiBjbG9jay1m cmVxdWVuY3kKPj4+Cj4+PiBUaGVyZSBpcyBhbHNvIGFuIGltcGxpY2l0IGRlcGVuZGVuY3kgb24g eGxueCxjb3VudC13aWR0aC4gU2V2ZXJhbCB0aW1lcwo+Pj4gdGhlIGV4aXN0aW5nIGRyaXZlciBh c3N1bWVzIHRoZSBjb3VudGVyIHdpZHRoIGlzIDMyLCBidXQgdGhpcyBzaG91bGQKPj4+IGluc3Rl YWQgYmUgZGlzY292ZXJlZCBmcm9tIHRoZSBkZXZpY2V0cmVlLgo+Pgo+PiBGb3IgbWUgaXQgaXMg aW1wb3J0YW50IHdoYXQgaXQgaXMgdXNlZCBub3cuIFdoaWNoIGlzIG5vdAo+PiB4bG54LGNvdW50 LXdpZHRoLiBUaGF0J3Mgd2h5IGlmIHlvdSB3YW50IHRvIGFkZCBpdCB5b3UgY2FuIGFzIG9wdGlv bmFsCj4+IHByb3BlcnR5Lgo+IAo+IEF0IHRoZSB2ZXJ5IGxlYXN0IHdlIHNob3VsZCBzYW5pdHkg Y2hlY2sgaXQuIEUuZy4gY2hlY2sgdGhhdCBpdCBpcyAzMgo+IGFuZCByZXR1cm4gLUVJTlZBTCBp ZiBpdCBpcyBub3QuCgpJIGhhdmUgbm90IGEgcHJvYmxlbSB3aXRoIGl0IGJ1dCBtYWtlIHN1cmUg dGhhdCB0aGUgY2hlY2sgaXMgdGhlcmUgb25seQp3aGVuIHByb3BlcnR5IGlzIHByZXNlbnQgbm90 IHRvIGJyZWFrIGFsbCBjdXJyZW50IHVzZXJzLgoKCj4+Cj4+Pgo+Pj4+IEl0IG1lYW5zIGZyb20g bXkgcG9pbnQgb2YgdmlldyB0aGVzZSBzaG91bGQgYmUgbGlzdGVkIGluIHRoZSBiaW5kaW5nLgo+ Pj4+IGNsb2NrLWZyZXF1ZW5jeSBpcyBvcHRpb25hbCBieSBjb2RlIHdoZW4gY2xvY2sgaXMgZGVm aW5lZC4KPj4+Pgo+Pj4+IEFsbCBvdGhlciBwcm9wZXJ0aWVzIGxpc3RlZCBpbiBzeXN0ZW0uZHRz IGFyZSBmcm9tIG15IHBlcnNwZWN0aXZlCj4+Pj4gb3B0aW9uYWwgYW5kIHRoYXQncyBob3cgaXQg c2hvdWxkIGJlLgo+Pj4KPj4+IEhlcmUgaXMgdGhlIHNpdHVhdGlvbiBhcyBJIHVuZGVyc3RhbmQg aXQKPj4+Cj4+PiAqIFRoaXMgZGV2aWNlIGhhcyBleGlzdGVkIGZvciBhcm91bmQgMTUgeWVhcnMg KHNpbmNlIDIwMDYpCj4+PiAqIEJlY2F1c2UgaXQgaXMgYSBzb2Z0IGRldmljZSwgdGhlcmUgYXJl IHNldmVyYWwgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMKPj4+ICogQWx0aG91Z2ggYWxsIG9mIHRo ZXNlIHBhcmFtZXRlcnMgbXVzdCBiZSBrbm93biBmb3IgYSBjb21wbGV0ZQo+Pj7CoMKgwqAgaW1w bGVtZW50YXRpb24gb2YgdGhpcyBkZXZpY2UsIHNvbWUgYXJlIHVubmVjZXNzYXJ5IGlmIG9ubHUg cmVkdWNlZAo+Pj7CoMKgwqAgZnVuY3Rpb25hbGl0eSBpcyBuZWVkZWQuCj4+PiAqIEEgZGUgZmFj dG8gZGV2aWNldHJlZSBiaW5kaW5nIGZvciB0aGlzIGRldmljZSBoYXMgZXhpc3RlZCBmb3IgYXQg bGVhc3QKPj4+wqDCoMKgIDEyIHllYXJzIChzaW5jZSAyMDA5KSwgYnV0IGxpa2VseSBmb3IgYXMg bG9uZyBhcyB0aGUgZGV2aWNlIGl0c2VsZgo+IGhhcwo+Pj7CoMKgwqAgZXhpc3RlZC4gVGhpcyBi aW5kaW5nIGhhcyBub3QgY2hhbmdlZCBzdWJzdGFudGlhbGx5IGR1cmluZyB0aGlzIHRpbWUuCj4+ Cj4+IG5vdGU6IElQIGl0c2VsZiBpcyBldmVuIG11Y2ggb2xkZXIuCj4+Cj4+PiAqIFRoaXMgYmlu ZGluZyBpcyBwcmVzZW50IGluIGRldmljZXRyZWVzIGZyb20gdGhlIExpbnV4IGtlcm5lbCwgZnJv bQo+Pj7CoMKgwqAgcWVtdSwgaW4gb3RoZXIgZXhpc3Rpbmcgc3lzdGVtcywgYW5kIGluIGRldmlj ZXRyZWVzIGdlbmVyYXRlZCBieQo+Pj7CoMKgwqAgWGlsaW54J3MgdG9vbHNldC4KPj4KPj4gT25s eSBmcm9tIExpbnV4LiBRZW11IGlzIHRyeWluZyB0byByZXVzZSB0aGUgc2FtZSBwcm9wZXJ0aWVz IGJ1dCBpdCBjYW4KPj4gYWxzbyBhZGQgb3duIG9uZS4gVGhleSBhcmUgdHJ5aW5nIHRvIGJlIGFs aWduZWQgYXMgbXVjaCBhcyBwb3NzaWJsZSBidXQKPj4gdGhlcmUgYXJlIGEgbG90IG9mIGNhc2Vz IHdoZXJlIFFlbXUgcmVxdWlyZXMgbXVjaCBtb3JlIGluZm9ybWF0aW9uLiAoSQo+PiBhbSBub3Qg c2F5aW5nIGluIHRoaXMgdGltZXIgY2FzZSBidXQgaW4gZ2VuZXJhbCkuCj4+Cj4+Cj4+PiAqIEJl Y2F1c2UgdGhlIGV4aXN0aW5nIGRyaXZlciBmb3IgdGhpcyBkZXZpY2UgZG9lcyBub3QgaW1wbGVt ZW50IGFsbAo+Pj7CoMKgwqAgZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBkZXZpY2UsIG5vdCBhbGwg cHJvcGVydGllcyBpbiB0aGUgZGV2aWNldHJlZQo+Pj7CoMKgwqAgYmluZGluZyBhcmUgdXNlZC4g SW4gZmFjdCwgdGhlcmUgaXMgKGFzIG5vdGVkIGFib3ZlKSBvbmUgcHJvcGVydHkKPj4+wqDCoMKg IHdoaWNoIHNob3VsZCBiZSBpbiB1c2UgYnV0IGlzIG5vdCBiZWNhdXNlIHRoZSBjdXJyZW50IGRy aXZlcgo+Pj7CoMKgwqAgKGltcGxpY2l0bHkpIGRvZXMgbm90IHN1cHBvcnQgc29tZSBoYXJkd2Fy ZSBjb25maWd1cmF0aW9ucy4KPj4+ICogVG8gc3VwcG9ydCBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxp dHksIGl0IGlzIG5lY2Vzc2FyeSB0bwo+Pj7CoMKgwqAgdXNlIGhhcmR3YXJlIHBhcmFtZXRlcnMg d2hpY2ggd2VyZSBub3QgcHJldmlvdXNseSBuZWNlc3NhcnkuCj4+Pgo+Pj4gQmFzZWQgb24gdGhl IGFib3ZlLCB3ZSBjYW4gY2xhc3NpZnkgdGhlIHByb3BlcnRpZXMgb2YgdGhpcyBiaW5kaW5nIGlu dG8KPj4+IHNldmVyYWwgY2F0ZWdvcmllcy4KPj4+Cj4+PiAqIFRob3NlIHdoaWNoIGFyZSBjdXJy ZW50bHkgcmVhZCBieSB0aGUgZHJpdmVyLgo+Pj7CoMKgwqAgKiBjb21wYXRpYmxlCj4+PsKgwqDC oCAqIHJlZwo+Pj7CoMKgwqAgKiBjbG9ja3MKPj4+wqDCoMKgICogY2xvY2stZnJlcXVlbmN5Cj4+ PsKgwqDCoCAqIGludGVycnVwdHMKPj4+wqDCoMKgICogeGxueCxvbmUtdGltZXItb25seQo+Pj4K Pj4+ICogVGhvc2Ugd2hpY2ggcmVmbGVjdCBoYXJkd2FyZSBwYXJhbWV0ZXJzIHdoaWNoIGFyZSBj dXJyZW50bHkgZXhwbGljaXRseQo+Pj7CoMKgwqAgb3IgaW1wbGljaXRseSByZWxpZWQgdXBvbiBi eSB0aGUgZHJpdmVyLgo+Pj7CoMKgwqAgKiByZWcKPj4+wqDCoMKgICogY2xvY2tzCj4+PsKgwqDC oCAqIGNsb2NrLWZyZXF1ZW5jeQo+Pj7CoMKgwqAgKiBpbnRlcnJ1cHRzCj4+PsKgwqDCoCAqIHhs bngsY291bnRlci13aWR0aAo+Pj7CoMKgwqAgKiB4bG54LG9uZS10aW1lci1vbmx5Cj4+Pgo+Pj4g KiBUaG9zZSB3aGljaCBhcmUgY3VycmVudGx5IHByZXNlbnQgaW4gZGV2aWNlIHRyZWVzLgo+Pj7C oMKgwqAgKiBjb21wYXRpYmxlCj4+PsKgwqDCoCAqIHJlZwo+Pj7CoMKgwqAgKiBpbnRlcnJ1cHRz Cj4+PsKgwqDCoCAqIGNsb2Nrcwo+Pj7CoMKgwqAgKiBjbG9jay1mcmVxdWVuY3kKPj4+wqDCoMKg ICogeGxueCxjb3VudC13aWR0aAo+Pj7CoMKgwqAgKiB4bG54LG9uZS10aW1lci1vbmx5Cj4+PsKg wqDCoCAqIHhsbngsdHJpZzAtYXNzZXJ0Cj4+PsKgwqDCoCAqIHhsbngsdHJpZzEtYXNzZXJ0Cj4+ PsKgwqDCoCAqIHhsbngsZ2VuMC1hc3NlcnQKPj4+wqDCoMKgICogeGxueCxnZW4xLWFzc2VydAo+ Pj4KPj4+IFdoZW4gY2hvb3Npbmcgd2hhdCBwcm9wZXJ0aWVzIHRvIHVzZSwgd2UgbXVzdCBjb25z aWRlciB3aGF0IHRoZSBpbXBhY3QKPj4+IG9mIG91ciBjaGFuZ2VzIHdpbGwgYmUgb24gbm90IGp1 c3QgdGhlIGtlcm5lbCBidXQgYWxzbyBvbiBleGlzdGluZyB1c2Vycwo+Pj4gb2YgdGhpcyBiaW5k aW5nOgo+Pgo+PiBJIGRvbid0IHRoaW5rIHRoYXQgdGhpcyBpcyB2YWxpZC4gUm9iIGlzIGFza2lu ZyBmb3IgYWRkaW5nICNwd20tY2VsbHMKPj4gd2hpY2ggaXMgcHVyZWx5IExpbnV4IGJpbmRpbmcu IFdlIGFsc28gZG9uJ3Qga25vdyB3aGF0IHByb3BlcnRpZXMgYXJlCj4+IHVzZWQgYnkgb3RoZXJz IHByb2plY3RzIG5vdCBqdXN0IExpbnV4IG9yIFFlbXUuIEFsc28gcmVxdWlyZWQgcHJvcGVydGll cwo+PiBpbiBMaW51eCBkb2Vzbid0IG5lZWQgdG8gYmUgcmVxdWlyZWQgaW4gVS1Cb290IGZvciBl eGFtcGxlIGV2ZW4gd2UgYXJlCj4+IHRyeWluZyB0byBhbGlnbmVkIGFsbCBvZiB0aGVtLiBBbm90 aGVyIGNhc2UgYXJlIG90aGVycyBSVE9TZXMsIGV0Yy4KPiAKPiBIZXJlIEkgZG8gbm90IHNlZSBh IHdheSBhcm91bmQgdGhpcy4gQW55IHdheSB3ZSBkbyBpdCB3ZSB3aWxsIG5lZWQgdG8KPiBoYXZl IHNvbWUgbmV3IGJpbmRpbmcuIEhvd2V2ZXIsIGFzIG5vdGVkIGJlbG93LCBhZGRpbmcgYSBuZXcg YmluZGluZyBmb3IKPiBjb25maWd1cmF0aW9uIGlzIGVhc2llciB0aGFuIGV4cG9zaW5nIHByb3Bl cnRpZXMgaW4gbmV3IHdheXMuCgpwbGVhc2UgbG9vayBiZWxvdy4KCgo+Pj4gKiBUbyB1c2UgcHJv cGVydGllcyBjdXJyZW50bHkgcHJlc2VudCBpbiBkZXZpY2UgdHJlZXMsIHdlIGp1c3QgbmVlZCB0 bwo+Pj7CoMKgwqAgbW9kaWZ5IHRoZSBrZXJuZWwgZHJpdmVyLgo+Pj4gKiBUbyBhZGQgYWRkaXRp b25hbCBwcm9wZXJ0aWVzIChzdWNoIGFzIGUuZy4gJyNwd20tY2VsbHMnKSwgd2UgbXVzdAo+Pj7C oMKgwqAgbW9kaWZ5IHRoZSBrZXJuZWwgZHJpdmVyLiBJbiBhZGRpdGlvbiwgdXNlcnMgd2hvIHdv dWxkIGxpa2UgdG8gdXNlCj4+PsKgwqDCoCB0aGVzZSBuZXcgcHJvcGVydGllcyBtdXN0IGFkZCB0 aGVtIHRvIHRoZWlyIGRldmljZSB0cmVlcy4gVGhpcyBtYXkgYmUKPj4+wqDCoMKgIGRvbmUgaW4g YSBtZWNoYW5pY2FsIHdheSB1c2luZyBlLmcuIG92ZXJsYXlzLgo+Pj4gKiBUbyBkZXByZWNhdGUg ZXhpc3RpbmcgcHJvcGVydGllcyBhbmQgaW50cm9kdWNlIG5ldyBwcm9wZXJ0aWVzIHRvCj4+PsKg wqDCoCBleHBvc2UgdGhlIHNhbWUgdW5kZXJseWluZyBoYXJkd2FyZSBwYXJhbWV0ZXJzLCB3ZSBt dXN0IG1vZGlmeSB0aGUKPj4+wqDCoMKgIGtlcm5lbCBkcml2ZXIuIEhvd2V2ZXIsIHRoaXMgaGFz IGEgbGFyZ2UgaW1wYWN0IG9uIGV4aXN0aW5nIHVzZXJzLgo+Pj7CoMKgwqAgVGhleSBtdXN0IG1v ZGlmeSB0aGVpciB0b29scyB0byBnZW5lcmF0ZSB0aGlzIGluZm9ybWF0aW9uIGluIGEKPj4+wqDC oMKgIGRpZmZlcmVudCBmb3JtYXQuIFdoZW4gdGhpcyBpbmZvcm1hdGlvbiBpcyBnZW5lcmF0ZWQg YnkgdXBzdHJlYW0KPiB0b29scwo+Pj7CoMKgwqAgdGhpcyBtYXkgcmVxdWlyZSB1cGRhdGluZyBh IGNvcmUgcGFydCBvZiB0aGVpciBidWlsZCBzeXN0ZW0uIEZvciBtYW55Cj4+PsKgwqDCoCBwcm9q ZWN0cywgdGhpcyBtYXkgaGFwcGVuIHZlcnkgaW5mcmVxdWVudGx5IGJlY2F1c2Ugb2YgdGhlIHJp c2sgdGhhdAo+Pj7CoMKgwqAgc3VjaCBhbiB1cGdyYWRlIHdpbGwgYnJlYWsgdGhpbmdzLiBFdmVu IGlmIHlvdSBzdWdnZXN0IHRoYXQgWGlsaW54Cj4gY2FuCj4+PsKgwqDCoCBlYXNpbHkgbW9kaWZ5 IGl0cyB0b29scyB0byBnZW5lcmF0ZSBhbnkgc29ydCBvZiBvdXRwdXQsIHRoZSB0aW1lIGZvcgo+ Pj7CoMKgwqAgdGhpcyB1cGdyYWRlIHRvIGJlIGRlcGxveWVkL2Fkb3B0ZWQgbWF5IGJlIHNpZ25p ZmljYW50bHkgbG9uZ2VyLgo+Pgo+PsKgIEZyb20gWGlsaW54IHBlcnNwZWN0aXZlIGl0IHdvdWxk IGJlIGlkZWFsIHRvIHVzZSBvbmx5IHByb3BlcnRpZXMgd2hpY2gKPj4gZnVsbHkgZGVzY3JpYmUg SFcgaW4gdGhlIGZvcm0gaG93IHRoZXkgYXJlIGdlbmVyYXRlZCB0b2RheS4gVGhleSBhcmUKPj4g c3RhYmxlIGZvciBhIGxvdCBvZiB5ZWFycyBhbmQgYXMgSSBzYWlkIG9ubHkgbmV3IG9uZSBhcmUg YWRkZWQuCj4+IEJ1dCB0aGlzIGFsaWdubWVudCB3YXNuJ3QgYWNjZXB0ZWQgbG9uZyB0aW1lIGFn byBhbmQgd2UgaGF2ZSBiZWVuIGFza2VkCj4+IHRvIHN0YXJ0IHRvIGFsaWduIHRoZXNlIHByb3Bl cnRpZXMgd2l0aCBzaW1pbGFyIEhXIGRvbmUgYnkgb3RoZXJzLgo+PiBBbmQgdHJ1dGggaXMgdGhh dCBpbiBhIGxvdCBvZiBjYXNlcyB0aGVyZSBpcyBjbGVhciAxOjEgbWFwcGluZyBhbmQKPj4gZ2Vu ZXJpYyBwcm9wZXJ0aWVzIGNhbiBiZSBzaW1wbHkgdXNlLiBUaGlzIG1hcHBpbmcgZW5kcyBpbiBY aWxpbnggZGV2aWNlCj4+IHRyZWUgZ2VuZXJhdG9yLgo+PiBCYWNrIHRvIHlvdXIgcG9pbnQuIFJl cXVpcmVkIHByb3BlcnRpZXMgYXJlIHJlcXVpcmVkIGJ5IExpbnV4IGRyaXZlcgo+PiBvbmx5LiBU aGlzIGRyaXZlciBpcyBhcm91bmQgZm9yIHF1aXRlIGEgbG9uZyB0aW1lIHdoZXJlIGNlcnRhaW4g cG9saWNpZXMKPj4gaGF2ZW4ndCBiZWVuIHNldHVwL3VzZWQvZW5mb3JjZWQgKE1pY3JvYmxhemUg aXMgMm5kIGFyY2hpdGVjdHVyZSB3aGljaAo+PiBzdGFydGVkIHRvIHVzZSBkZXZpY2UgdHJlZSku Cj4+IFdlIHNob3VsZCBjcmVhdGUgRFQgYmluZGluZyBkb2MgYXQgdGhhdCB0aW1lIGJ1dCBpbiAy MDA5IGl0IHdhc24ndAo+PiBzdGFuZGFyZCBwcmFjdGljZS4gSW4gMjAwNyBHcmFudCB3YXMgYWRk aW5nIHN1cHBvcnQgZm9yIFhpbGlueCBQUEMKPj4gcGxhdGZvcm0gYWxzbyB3aXRob3V0IGFueSBE VCBiaW5kaW5nIGRvY3VtZW50IHRvby4KPj4KPj4gVGhhdCdzIHdoeSB3ZSBuZWVkIHRvIHJldmll dyBjdXJyZW50IHVud3JpdHRlbiBEVCBiaW5kaW5nIGJhc2VkIG9uIGNvZGUKPj4gcmVxdWlyZW1l bnRzIGFuZCBsb29rIGF0IGl0IGhvdyB0byBmaXggaXQgKGlmIG5lZWRlZCkgYW5kIHRoZW4gYWRk IFBXTQo+PiBzdXBwb3J0IG9uIHRoZSB0b3Agb2YgaXQuCj4+IElmIHNvbWV0aGluZyBuZWVkcyB0 byBiZSBkZXByZWNhdGVkLCBsZXQncyBkZXByZWNhdGUgaXQgYW5kIGhhdmUKPj4gdHJhbnNpdGlv biB0aW1lIGZvciBhIHllYXIgb3Igc28gdG8gYWRhcHQgdG8gaXQuCj4+Cj4+IFJvYiBrbm93cyBt dWNoIGJldHRlciB0aGFuIEkgaG93IHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQuCj4+Cj4+IEJhc2Vk IG9uIHlvdXIgbGlzdDoKPj7CoMKgwqAgKiBjb21wYXRpYmxlCj4+wqDCoMKgICogcmVnCj4+wqDC oMKgICogY2xvY2tzCj4+wqDCoMKgICogY2xvY2stZnJlcXVlbmN5Cj4+wqDCoMKgICogaW50ZXJy dXB0cwo+PsKgwqDCoCAqIHhsbngsb25lLXRpbWVyLW9ubHkKPj4KPj4gYWxsIG9mIHRoZXNlIGFy ZSByZXF1aXJlZCBwcm9wZXJ0eSBpbiBuZXcgRFQgYmluZGluZy4KPj4KPj4geGxueCxjb3VudGVy LXdpZHRoIGlzIG9wdGlvbmFsIGlmIHlvdSB3YW50IHRvIHVzZS4KPiAKPiBBZ2FpbiwgZm9yIHRo ZSBleGlzdGluZyBkcml2ZXIgdGhpcyBzaG91bGQgYXQgbGVhc3QgYmUgc2FuaXR5LWNoZWNrZWQg c28KPiB3ZSBmYWlsIG5vaXNpbHkgaW5zdGVhZCBvZiBidWdnaWx5LgoKVGlsbCBub3cgZm9yIDEw KyB5ZWFycyBub25lIHJlcG9ydGVkIGFueSBpc3N1ZSB3aXRoIGl0IHRoYXQncyB3aHkgSQpkb24n dCB0aGluayB0aGlzIGlzIGEgYmlnIHByb2JsZW0uCgo+IFRoaXMgaXMgdGhlIHNpdHVhdGlvbiBm b3IgdGhlIGdlbmVyYXRlIHBvbGFyaXR5IGFzIHdlbGwuIFRoZSBkcml2ZXIgd2lsbAo+IHdvcmsg ZmluZSwgYnV0IHlvdSB3aWxsIG5vdCBoYXZlIFBXTSBvdXRwdXQgYW5kIHRoZXJlIHdpbGwgYmUg bm8KPiBpbmRpY2F0aW9uIHdoeS4gVGhpcyBpcyB3aHkgSSB0aGluayB3ZSBzaG91bGQgc3RhcnQg d2l0aCBzdXBwb3J0aW5nIHRoZQo+IGV4aXN0aW5nIG91dHB1dC4gVGhpcyBpcyB1c2VkIHRvIGVu c3VyZSB0aGUgZGV2aWNlIHdpbGwgd29yayBhcwo+IGNvbmZpZ3VyZWQuIFdlIGNhbiBhbHNvIGFk ZCBzdXBwb3J0IGZvciBkaWZmZXJlbnQgcHJvcGVydGllcyBleHBvc2luZwo+IHRoZSBzYW1lIGlu Zm9ybWF0aW9uLCBidXQgdG8gc3VwcG9ydCBvbmx5IG5ldyBwcm9wZXJ0aWVzIGlzIG5vdCB2ZXJ5 Cj4gdXNlZnVsLgoKQmluZGluZyBjYW4gZW5mb3JjZSBwcm9wZXJ0aWVzIHRvIGJlIHJlcXVpcmVk IGZvciBQV00gb25seSBhbmQgdGhhdCdzCnRvdGFsbHkgb2theS4gQW5kIGJlY2F1c2UgdGhpcyBp cyBuZXcgZmVhdHVyZSBhbmQgUm9iIGRvbid0IG5lZWQgdG8gbGlrZQp0aGF0IG5ldyBwcm9wZXJ0 aWVzIHRoZXkgY2FuIGJlIGFsaWduZWQuIEkgYWxzbyBoYXZlIHByZWZlcmVuY2UgdG8gYmUgYXMK bXVjaCBhbGlnbmVkIHdpdGggSFcgcGFyYW1ldGVycyBidXQgaWYgdGhleSBoYXZlIHRvIGNoYW5n ZSB0aGVuIGxldCdzCmNoYW5nZSBpdCBhbmQgSSB3aWxsIGVuc3VyZSB0aGF0IFhpbGlueCBEVEcg d2lsbCBnZW5lcmF0ZSB0aGVtIGFzIHRoZXkKd2VyZSBkZXNjcmliZWQgdG8gYmUgYWxpZ25lZC4K ClRoYW5rcywKTWljaGFsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==