From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 51C1617DD for ; Mon, 4 Jul 2022 20:53:42 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C404C23A; Mon, 4 Jul 2022 13:53:41 -0700 (PDT) Received: from slackpad.lan (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D8D683F70D; Mon, 4 Jul 2022 13:53:37 -0700 (PDT) Date: Mon, 4 Jul 2022 21:52:14 +0100 From: Andre Przywara To: Samuel Holland Cc: Jernej =?UTF-8?B?xaBrcmFiZWM=?= , Chen-Yu Tsai , Rob Herring , Krzysztof Kozlowski , Icenowy Zheng , linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v11 3/6] arm64: dts: allwinner: Add Allwinner H616 .dtsi file Message-ID: <20220704215214.52d1816f@slackpad.lan> In-Reply-To: <3063662c-8d1c-e767-b30b-83d1c4820108@sholland.org> References: <20220428230933.15262-1-andre.przywara@arm.com> <3165164.aeNJFYEL58@kista> <20220630010410.38fc117f@slackpad.lan> <2985997.CbtlEUcBR6@jernej-laptop> <20220704143057.76163208@donnerap.cambridge.arm.com> <3063662c-8d1c-e767-b30b-83d1c4820108@sholland.org> Organization: Arm Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.31; x86_64-slackware-linux-gnu) Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Mon, 4 Jul 2022 13:44:18 -0500 Samuel Holland wrote: Hi Samuel, > On 7/4/22 8:30 AM, Andre Przywara wrote: > > On Sat, 02 Jul 2022 23:16:53 +0200 > > Jernej =C5=A0krabec wrote: =20 > >> Dne =C4=8Detrtek, 30. junij 2022 ob 02:04:10 CEST je Andre Przywara na= pisal(a): =20 > >>> On Tue, 03 May 2022 21:05:11 +0200 > >>> Jernej =C5=A0krabec wrote: =20 > >>>> Dne petek, 29. april 2022 ob 01:09:30 CEST je Andre Przywara napisal= (a): =20 > >>>>> This (relatively) new SoC is similar to the H6, but drops the (brok= en) > >>>>> PCIe support and the USB 3.0 controller. It also gets the management > >>>>> controller removed, which in turn removes *some*, but not all of the > >>>>> devices formerly dedicated to the ARISC (CPUS). > >>>>> And while there is still the extra sunxi interrupt controller, the > >>>>> package lacks the corresponding NMI pin, so no interrupts for the P= MIC. > >>>>> > >>>>> The reserved memory node is actually handled by Trusted Firmware no= w, > >>>>> but U-Boot fails to propagate this to a separately loaded DTB, so we > >>>>> keep it in here for now, until U-Boot learns to do this properly. > >>>>> > >>>>> Signed-off-by: Andre Przywara > >>>>> --- > >>>>> > >>>>> .../arm64/boot/dts/allwinner/sun50i-h616.dtsi | 574 ++++++++++++++= ++++ > >>>>> 1 file changed, 574 insertions(+) > >>>>> create mode 100644 arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi > >>>>> > >>>>> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi > >>>>> b/arch/arm64/ =20 > >>>> > >>>> boot/dts/allwinner/sun50i-h616.dtsi > >>>> =20 > >>>>> new file mode 100644 > >>>>> index 000000000000..cc06cdd15ba5 > >>>>> --- /dev/null > >>>>> +++ b/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi > >>>>> @@ -0,0 +1,574 @@ > >>>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) > >>>>> +// Copyright (C) 2020 Arm Ltd. > >>>>> +// based on the H6 dtsi, which is: > >>>>> +// Copyright (C) 2017 Icenowy Zheng > >>>>> + > >>>>> +#include > >>>>> +#include > >>>>> +#include > >>>>> +#include > >>>>> +#include > >>>>> + > >>>>> +/ { > >>>>> + interrupt-parent =3D <&gic>; > >>>>> + #address-cells =3D <2>; > >>>>> + #size-cells =3D <2>; > >>>>> + > >>>>> + cpus { > >>>>> + #address-cells =3D <1>; > >>>>> + #size-cells =3D <0>; > >>>>> + > >>>>> + cpu0: cpu@0 { > >>>>> + compatible =3D "arm,cortex-a53"; > >>>>> + device_type =3D "cpu"; > >>>>> + reg =3D <0>; > >>>>> + enable-method =3D "psci"; > >>>>> + clocks =3D <&ccu CLK_CPUX>; > >>>>> + }; > >>>>> + > >>>>> + cpu1: cpu@1 { > >>>>> + compatible =3D "arm,cortex-a53"; > >>>>> + device_type =3D "cpu"; > >>>>> + reg =3D <1>; > >>>>> + enable-method =3D "psci"; > >>>>> + clocks =3D <&ccu CLK_CPUX>; > >>>>> + }; > >>>>> + > >>>>> + cpu2: cpu@2 { > >>>>> + compatible =3D "arm,cortex-a53"; > >>>>> + device_type =3D "cpu"; > >>>>> + reg =3D <2>; > >>>>> + enable-method =3D "psci"; > >>>>> + clocks =3D <&ccu CLK_CPUX>; > >>>>> + }; > >>>>> + > >>>>> + cpu3: cpu@3 { > >>>>> + compatible =3D "arm,cortex-a53"; > >>>>> + device_type =3D "cpu"; > >>>>> + reg =3D <3>; > >>>>> + enable-method =3D "psci"; > >>>>> + clocks =3D <&ccu CLK_CPUX>; > >>>>> + }; > >>>>> + }; > >>>>> + > >>>>> + reserved-memory { > >>>>> + #address-cells =3D <2>; > >>>>> + #size-cells =3D <2>; > >>>>> + ranges; > >>>>> + > >>>>> + /* 512KiB reserved for ARM Trusted Firmware (BL31) */ > >>>>> + secmon_reserved: secmon@40000000 { > >>>>> + reg =3D <0x0 0x40000000 0x0 0x80000>; > >>>>> + no-map; > >>>>> + }; > >>>>> + }; =20 > >>>> > >>>> I'm not a fan of above. If anything changes in future in BL31, U-Boot > >>>> would > >>>> need to reconfigure it anyway. Can we just skip it? =20 > >>> > >>> I am not a fan neither, but last time I checked this is needed to boo= t. > >>> Indeed TF-A inserts this node, with the right values, into U-Boot's D= T. > >>> And that's nicely preserved if you use that DT ($fdtcontroladdr) for > >>> the kernel as well. > >>> But if someone *loads* a DTB into U-Boot (to $fdt_addr_r), then > >>> U-Boot fails to propagate the /reserved-memory node into that copy. > >>> There does not seem to be a global notion of reserved memory in U-Boo= t. > >>> Some commands (like tftp) explicitly parse the control DT to find and > >>> respect reserved memory regions. bootm does that also, but only to > >>> avoid placing the ramdisk or DTB into reserved memory. The information > >>> ends up in images->lmb, but is not used to generate or amend nodes in > >>> the target DT. > >>> So the bits and pieces are there, but it will require some code to be > >>> added to the generic U-Boot code. > >>> > >>> So what do you think? Leaving this out will prevent loading DTBs into > >>> U-Boot, at the moment, which sounds bad. I suggest we keep it in, for > >>> now, it should not really hurt. U-Boot will hopefully start to do the > >>> right thing soon, then we can either phase it out here (maybe when we > >>> actually change something in TF-A), or let U-Boot fix it. =20 > >> > >> TBH, if "soon" is really soon, I would rather wait with H616 DT until = U-Boot=20 > >> supports carrying over reserved memory nodes. =20 > >=20 > > But this also carries compatibility issues. U-Boot support the H616 for > > more than a year now, and the earliest possible U-Boot release having t= hat > > propagation code would be the one released in October. And then people > > would still need to update first, so that's quite some months out. > > And I was actually hoping to get at least the H616 DT patches off my > > plate, and get them into the tree to have a stable and agreed upon base > > (before this series turns into a teenager ;-) > > Then we could for instance update the U-Boot H616 support. =20 >=20 > There is no compatibility issue here if people are using $fdtcontroladdr. >=20 > >> Whatever we do now, it will have=20 > >> compatibility issues. If we introduce reserved memory node now, we can= 't=20 > >> easily drop it later. Bootloaders are not very often updated, but kern= els and=20 > >> DTB files are, at least in my experience. So when we decide to drop th= e node? =20 > >=20 > > I think of the three possibilities: > > - Drop the node now, and ask people to not load DTBs explicitly =20 >=20 > This is my preferred solution. My position has always been that the devic= etree > is provided by platform firmware, not the OS. The only reason for even > submitting the devicetree to Linux is because that is the location of the > bindings and validation tooling. Well, you are barking at the wrong tree here ;-) I am 100% behind the $fdtcontroladdr and "firmware ships DT" idea. However this relies on one thing: that there will never be an incompatible change to the DT. So at any point in time there must be exactly one best DT for that board, and that DT must be able to boot every kernel: older ones, current ones, FreeBSD ones, you name it. Because otherwise you cannot update your DT, or you lose the ability to boot a stable distro, or the stable fallback kernel that your distro installed, for instance. And this is not theoretical: Debian 11 ships with v5.10, which does not boot with a DT from >=3D v5.13 (r_intc binding change for most AW SoCs). And yes, this means we have to live with decisions we once made, and have to make compromises, so cannot get the DT "exactly right by the book", since we need to maintain compatibility. I strongly believe there are solutions that allow this, even if we spot mistakes later or need to amend something to make a new feature work. At the cost of being potentially somewhat "hacky". Some years ago I have been explicitly told that mainline sunxi Linux does not have the resources to pull this off, and we don't guarantee forward compatibility, which in my view renders this $fdtcontroladdr approach moot. And the r_intc binding change, also the upcoming A23 clock change tell me that this is still the position among the maintainers? Or has this position changed for new SoCs? So do we promise to never break compatibility for D1 and H616, and other new SoCs? Or even for older SoCs, from now on? > I have been using this approach for D1, and so far there have been no uns= olvable > problems. Yes, most image builders assume you want to load a DTB from dis= k, but > teaching them not to do that is fairly simple. And yes, it means we have = to do > better about keeping the U-Boot DTSs in sync, but I think we can manage t= hat. Yes, I am very happy to update them much more regularly, and even have some prototype tool to update the DTB directly in the FIT image on SPI flash/eMMC boot/SD card/etc. Or I guess we rather explore the EFI capsule update path more. However this is all rather pointless (and actually counterproductive) if that new DT does not boot all kernels. > > - Drop the node when U-Boot learned to propagate the reservation > > - Keep the node > > the last one is the least painful: having this node in does not really > > hurt, so we can be very relaxed with this removal decision: =20 >=20 > Supporting explicitly-loaded DTBs is the most painful option going forwar= d, > because that means U-Boot has to know about and propagate _every_ runtime= change > made by any firmware component (not just changes made by it) to the contr= ol FDT. Yes, you have some point there. > For example, consider TF-A patching in information about idle states, or = SID > contents in secure mode, or marking nodes as "reserved" because it delega= tes > those devices to a secure enclave. This problem is solved if we say "we s= upport > $fdtcontroladdr, and we support overlays; but you are on your own if you = load a > DTB from disk." >=20 > Distros will continue loading DTBs from disk as long as it sorta-kinda-mo= stly > works, and then years later users will complain that their phone uses 4 w= atts at > idle, because their explicitly-loaded DTB contained idle states that their > firmware did not support (this is a true story). >=20 > "Don't load DTBs" is a much easier story to tell if doing so is obviously= broken > out of the box from day 1. I mostly agree, from a developer's point of view. My suggestion was just trying to embrace the (current) reality, and giving the user the ability to load a new DTB. But yes, they should not do this. And I actually believe distros don't really like this approach either, it's just how mainline Linux worked for most platforms: you better run with the latest DTB, and the one matching the kernel (whatever that means). So I think they will be quite happy to use U-Boot's DTB, though this needs to be the universal one. So I think the whole discussion boils down to the question of how we are going to deal with upcoming DT fixes? Do we allow them only in a compatible way? And this could be a simple thing, like adding a previously unknown regulator to a device: older kernels might not support that regulator, so the device now fails probing. This is a prominent problem for initial (minimal) DTs, where we only get PMIC support later. Sure, we could demand having PMIC support in from day one, but there might be other things we miss (like a clock gated by the RTC). Cheers, Andre =20 >=20 > Regards, > Samuel >=20 > > - If U-Boot does not add the reserved node, we are covered. > > - If U-Boot adds the node, it will do so in a way where it deals with > > existing reservations. So either it doesn't actually change anything, or > > it extends the reservation. > > - Should the TF-A location actually move (and we have no plans or needs= to > > do that), people would only get this by updating the firmware, at which > > point the U-Boot part would surely be in place already. We don't really > > support updating just BL31 in an existing binary firmware image, so you > > would get an updated U-Boot as well. > >=20 > > I think the worst case scenario is that users end up with an unneeded 5= 12K > > reservation. If they care, a firmware update should solve this problem. > >=20 > > As for the time to remove that node: we could do that at the time when > > (or rather: if) we actually change the TF-A reservation. At the moment > > there are no plans to do this, and the size reservation is more than > > generous (the current debug build is actually 77 KB or so only). If the= re > > is no change, and the node stays in the .dtsi, it doesn't really hurt, = see > > above. > > =20 > >> After 10 years? Alternatively, reserved memory node can be just droppe= d and=20 > >> anyone loading DTB file from outside would need to make sure it's patc= hed. But=20 > >> that's unexpected from user perspective, although patching DT files is= done by=20 > >> some distros. =20 > >=20 > > Yeah, let's not go there. As you know, I already dislike the idea of > > explicitly loading DTBs at all, but I understand this is what people, a= nd > > distributions, do, so I'd rather have them covered. Hence the node to > > work with existing firmware. > >=20 > > Does that make sense? > >=20 > > Cheers, > > Andre > > =20 >=20 >=20 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BEBC7C433EF for ; Mon, 4 Jul 2022 20:54:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=i5Kkjh5i7VDcx+cTLHGpbon9q2ga80qm7aUW2BSWizs=; b=oN9lk0vzQ5WnKw jE1jvquBjFy0L5WYG6qp+AdIVzHSPekpAS6piHgttMxy2TXSdTr38xUwIwgvnwih/X3LZ27NXcLdY W4kzpP9OYBOWUXg0rgO4yWVdT6Ux9PkvfSJFHryelg0xsFZkMqo/mBVCJgsP5e8XQQ78sqVDIAflM 4HRJIFKybLNnzpY2OuaqHxss2tZVVD+K94xgm4LweAmOnsiChISwyT6MqFY+jM76xQJtaWG2w5gxW RmLe/6lR2vEh7RvY7IY0o516Ghe+M+6lnACyhY6p6w1YdRuBBy4gw0lx9W8zLQA0IBJf+/dWN0Kyk tjGjRsU+TKAC586+YhyQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8T4m-00CKMe-OR; Mon, 04 Jul 2022 20:53:48 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o8T4i-00CKLE-LH for linux-arm-kernel@lists.infradead.org; Mon, 04 Jul 2022 20:53:47 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C404C23A; Mon, 4 Jul 2022 13:53:41 -0700 (PDT) Received: from slackpad.lan (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D8D683F70D; Mon, 4 Jul 2022 13:53:37 -0700 (PDT) Date: Mon, 4 Jul 2022 21:52:14 +0100 From: Andre Przywara To: Samuel Holland Cc: Jernej =?UTF-8?B?xaBrcmFiZWM=?= , Chen-Yu Tsai , Rob Herring , Krzysztof Kozlowski , Icenowy Zheng , linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v11 3/6] arm64: dts: allwinner: Add Allwinner H616 .dtsi file Message-ID: <20220704215214.52d1816f@slackpad.lan> In-Reply-To: <3063662c-8d1c-e767-b30b-83d1c4820108@sholland.org> References: <20220428230933.15262-1-andre.przywara@arm.com> <3165164.aeNJFYEL58@kista> <20220630010410.38fc117f@slackpad.lan> <2985997.CbtlEUcBR6@jernej-laptop> <20220704143057.76163208@donnerap.cambridge.arm.com> <3063662c-8d1c-e767-b30b-83d1c4820108@sholland.org> Organization: Arm Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.31; x86_64-slackware-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220704_135344_842534_5F9205E4 X-CRM114-Status: GOOD ( 86.98 ) 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 T24gTW9uLCA0IEp1bCAyMDIyIDEzOjQ0OjE4IC0wNTAwClNhbXVlbCBIb2xsYW5kIDxzYW11ZWxA c2hvbGxhbmQub3JnPiB3cm90ZToKCkhpIFNhbXVlbCwKCj4gT24gNy80LzIyIDg6MzAgQU0sIEFu ZHJlIFByenl3YXJhIHdyb3RlOgo+ID4gT24gU2F0LCAwMiBKdWwgMjAyMiAyMzoxNjo1MyArMDIw MAo+ID4gSmVybmVqIMWga3JhYmVjIDxqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20+IHdyb3RlOiAg Cj4gPj4gRG5lIMSNZXRydGVrLCAzMC4ganVuaWogMjAyMiBvYiAwMjowNDoxMCBDRVNUIGplIEFu ZHJlIFByenl3YXJhIG5hcGlzYWwoYSk6ICAKPiA+Pj4gT24gVHVlLCAwMyBNYXkgMjAyMiAyMTow NToxMSArMDIwMAo+ID4+PiBKZXJuZWogxaBrcmFiZWMgPGplcm5lai5za3JhYmVjQGdtYWlsLmNv bT4gd3JvdGU6ICAKPiA+Pj4+IERuZSBwZXRlaywgMjkuIGFwcmlsIDIwMjIgb2IgMDE6MDk6MzAg Q0VTVCBqZSBBbmRyZSBQcnp5d2FyYSBuYXBpc2FsKGEpOiAgICAKPiA+Pj4+PiBUaGlzIChyZWxh dGl2ZWx5KSBuZXcgU29DIGlzIHNpbWlsYXIgdG8gdGhlIEg2LCBidXQgZHJvcHMgdGhlIChicm9r ZW4pCj4gPj4+Pj4gUENJZSBzdXBwb3J0IGFuZCB0aGUgVVNCIDMuMCBjb250cm9sbGVyLiBJdCBh bHNvIGdldHMgdGhlIG1hbmFnZW1lbnQKPiA+Pj4+PiBjb250cm9sbGVyIHJlbW92ZWQsIHdoaWNo IGluIHR1cm4gcmVtb3ZlcyAqc29tZSosIGJ1dCBub3QgYWxsIG9mIHRoZQo+ID4+Pj4+IGRldmlj ZXMgZm9ybWVybHkgZGVkaWNhdGVkIHRvIHRoZSBBUklTQyAoQ1BVUykuCj4gPj4+Pj4gQW5kIHdo aWxlIHRoZXJlIGlzIHN0aWxsIHRoZSBleHRyYSBzdW54aSBpbnRlcnJ1cHQgY29udHJvbGxlciwg dGhlCj4gPj4+Pj4gcGFja2FnZSBsYWNrcyB0aGUgY29ycmVzcG9uZGluZyBOTUkgcGluLCBzbyBu byBpbnRlcnJ1cHRzIGZvciB0aGUgUE1JQy4KPiA+Pj4+Pgo+ID4+Pj4+IFRoZSByZXNlcnZlZCBt ZW1vcnkgbm9kZSBpcyBhY3R1YWxseSBoYW5kbGVkIGJ5IFRydXN0ZWQgRmlybXdhcmUgbm93LAo+ ID4+Pj4+IGJ1dCBVLUJvb3QgZmFpbHMgdG8gcHJvcGFnYXRlIHRoaXMgdG8gYSBzZXBhcmF0ZWx5 IGxvYWRlZCBEVEIsIHNvIHdlCj4gPj4+Pj4ga2VlcCBpdCBpbiBoZXJlIGZvciBub3csIHVudGls IFUtQm9vdCBsZWFybnMgdG8gZG8gdGhpcyBwcm9wZXJseS4KPiA+Pj4+Pgo+ID4+Pj4+IFNpZ25l ZC1vZmYtYnk6IEFuZHJlIFByenl3YXJhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPgo+ID4+Pj4+ IC0tLQo+ID4+Pj4+Cj4gPj4+Pj4gIC4uLi9hcm02NC9ib290L2R0cy9hbGx3aW5uZXIvc3VuNTBp LWg2MTYuZHRzaSB8IDU3NCArKysrKysrKysrKysrKysrKysKPiA+Pj4+PiAgMSBmaWxlIGNoYW5n ZWQsIDU3NCBpbnNlcnRpb25zKCspCj4gPj4+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2Fy bTY0L2Jvb3QvZHRzL2FsbHdpbm5lci9zdW41MGktaDYxNi5kdHNpCj4gPj4+Pj4KPiA+Pj4+PiBk aWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9ib290L2R0cy9hbGx3aW5uZXIvc3VuNTBpLWg2MTYuZHRz aQo+ID4+Pj4+IGIvYXJjaC9hcm02NC8gICAgCj4gPj4+Pgo+ID4+Pj4gYm9vdC9kdHMvYWxsd2lu bmVyL3N1bjUwaS1oNjE2LmR0c2kKPiA+Pj4+ICAgICAKPiA+Pj4+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+ID4+Pj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uY2MwNmNkZDE1YmE1Cj4gPj4+Pj4gLS0t IC9kZXYvbnVsbAo+ID4+Pj4+ICsrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvYWxsd2lubmVyL3N1 bjUwaS1oNjE2LmR0c2kKPiA+Pj4+PiBAQCAtMCwwICsxLDU3NCBAQAo+ID4+Pj4+ICsvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkKPiA+Pj4+PiArLy8gQ29weXJp Z2h0IChDKSAyMDIwIEFybSBMdGQuCj4gPj4+Pj4gKy8vIGJhc2VkIG9uIHRoZSBINiBkdHNpLCB3 aGljaCBpczoKPiA+Pj4+PiArLy8gICBDb3B5cmlnaHQgKEMpIDIwMTcgSWNlbm93eSBaaGVuZyA8 aWNlbm93eUBhb3NjLmlvPgo+ID4+Pj4+ICsKPiA+Pj4+PiArI2luY2x1ZGUgPGR0LWJpbmRpbmdz L2ludGVycnVwdC1jb250cm9sbGVyL2FybS1naWMuaD4KPiA+Pj4+PiArI2luY2x1ZGUgPGR0LWJp bmRpbmdzL2Nsb2NrL3N1bjUwaS1oNjE2LWNjdS5oPgo+ID4+Pj4+ICsjaW5jbHVkZSA8ZHQtYmlu ZGluZ3MvY2xvY2svc3VuNTBpLWg2LXItY2N1Lmg+Cj4gPj4+Pj4gKyNpbmNsdWRlIDxkdC1iaW5k aW5ncy9yZXNldC9zdW41MGktaDYxNi1jY3UuaD4KPiA+Pj4+PiArI2luY2x1ZGUgPGR0LWJpbmRp bmdzL3Jlc2V0L3N1bjUwaS1oNi1yLWNjdS5oPgo+ID4+Pj4+ICsKPiA+Pj4+PiArLyB7Cj4gPj4+ Pj4gKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+Owo+ID4+Pj4+ICsJI2FkZHJlc3MtY2VsbHMg PSA8Mj47Cj4gPj4+Pj4gKwkjc2l6ZS1jZWxscyA9IDwyPjsKPiA+Pj4+PiArCj4gPj4+Pj4gKwlj cHVzIHsKPiA+Pj4+PiArCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKPiA+Pj4+PiArCQkjc2l6ZS1j ZWxscyA9IDwwPjsKPiA+Pj4+PiArCj4gPj4+Pj4gKwkJY3B1MDogY3B1QDAgewo+ID4+Pj4+ICsJ CQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKPiA+Pj4+PiArCQkJZGV2aWNlX3R5cGUg PSAiY3B1IjsKPiA+Pj4+PiArCQkJcmVnID0gPDA+Owo+ID4+Pj4+ICsJCQllbmFibGUtbWV0aG9k ID0gInBzY2kiOwo+ID4+Pj4+ICsJCQljbG9ja3MgPSA8JmNjdSBDTEtfQ1BVWD47Cj4gPj4+Pj4g KwkJfTsKPiA+Pj4+PiArCj4gPj4+Pj4gKwkJY3B1MTogY3B1QDEgewo+ID4+Pj4+ICsJCQljb21w YXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKPiA+Pj4+PiArCQkJZGV2aWNlX3R5cGUgPSAiY3B1 IjsKPiA+Pj4+PiArCQkJcmVnID0gPDE+Owo+ID4+Pj4+ICsJCQllbmFibGUtbWV0aG9kID0gInBz Y2kiOwo+ID4+Pj4+ICsJCQljbG9ja3MgPSA8JmNjdSBDTEtfQ1BVWD47Cj4gPj4+Pj4gKwkJfTsK PiA+Pj4+PiArCj4gPj4+Pj4gKwkJY3B1MjogY3B1QDIgewo+ID4+Pj4+ICsJCQljb21wYXRpYmxl ID0gImFybSxjb3J0ZXgtYTUzIjsKPiA+Pj4+PiArCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKPiA+ Pj4+PiArCQkJcmVnID0gPDI+Owo+ID4+Pj4+ICsJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOwo+ ID4+Pj4+ICsJCQljbG9ja3MgPSA8JmNjdSBDTEtfQ1BVWD47Cj4gPj4+Pj4gKwkJfTsKPiA+Pj4+ PiArCj4gPj4+Pj4gKwkJY3B1MzogY3B1QDMgewo+ID4+Pj4+ICsJCQljb21wYXRpYmxlID0gImFy bSxjb3J0ZXgtYTUzIjsKPiA+Pj4+PiArCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKPiA+Pj4+PiAr CQkJcmVnID0gPDM+Owo+ID4+Pj4+ICsJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOwo+ID4+Pj4+ ICsJCQljbG9ja3MgPSA8JmNjdSBDTEtfQ1BVWD47Cj4gPj4+Pj4gKwkJfTsKPiA+Pj4+PiArCX07 Cj4gPj4+Pj4gKwo+ID4+Pj4+ICsJcmVzZXJ2ZWQtbWVtb3J5IHsKPiA+Pj4+PiArCQkjYWRkcmVz cy1jZWxscyA9IDwyPjsKPiA+Pj4+PiArCQkjc2l6ZS1jZWxscyA9IDwyPjsKPiA+Pj4+PiArCQly YW5nZXM7Cj4gPj4+Pj4gKwo+ID4+Pj4+ICsJCS8qIDUxMktpQiByZXNlcnZlZCBmb3IgQVJNIFRy dXN0ZWQgRmlybXdhcmUgKEJMMzEpICovCj4gPj4+Pj4gKwkJc2VjbW9uX3Jlc2VydmVkOiBzZWNt b25ANDAwMDAwMDAgewo+ID4+Pj4+ICsJCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDAgMHgwIDB4ODAw MDA+Owo+ID4+Pj4+ICsJCQluby1tYXA7Cj4gPj4+Pj4gKwkJfTsKPiA+Pj4+PiArCX07ICAgIAo+ ID4+Pj4KPiA+Pj4+IEknbSBub3QgYSBmYW4gb2YgYWJvdmUuIElmIGFueXRoaW5nIGNoYW5nZXMg aW4gZnV0dXJlIGluIEJMMzEsIFUtQm9vdAo+ID4+Pj4gd291bGQKPiA+Pj4+IG5lZWQgdG8gcmVj b25maWd1cmUgaXQgYW55d2F5LiBDYW4gd2UganVzdCBza2lwIGl0PyAgICAKPiA+Pj4KPiA+Pj4g SSBhbSBub3QgYSBmYW4gbmVpdGhlciwgYnV0IGxhc3QgdGltZSBJIGNoZWNrZWQgdGhpcyBpcyBu ZWVkZWQgdG8gYm9vdC4KPiA+Pj4gSW5kZWVkIFRGLUEgaW5zZXJ0cyB0aGlzIG5vZGUsIHdpdGgg dGhlIHJpZ2h0IHZhbHVlcywgaW50byBVLUJvb3QncyBEVC4KPiA+Pj4gQW5kIHRoYXQncyBuaWNl bHkgcHJlc2VydmVkIGlmIHlvdSB1c2UgdGhhdCBEVCAoJGZkdGNvbnRyb2xhZGRyKSBmb3IKPiA+ Pj4gdGhlIGtlcm5lbCBhcyB3ZWxsLgo+ID4+PiBCdXQgaWYgc29tZW9uZSAqbG9hZHMqIGEgRFRC IGludG8gVS1Cb290ICh0byAkZmR0X2FkZHJfciksIHRoZW4KPiA+Pj4gVS1Cb290IGZhaWxzIHRv IHByb3BhZ2F0ZSB0aGUgL3Jlc2VydmVkLW1lbW9yeSBub2RlIGludG8gdGhhdCBjb3B5Lgo+ID4+ PiBUaGVyZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgZ2xvYmFsIG5vdGlvbiBvZiByZXNlcnZlZCBt ZW1vcnkgaW4gVS1Cb290Lgo+ID4+PiBTb21lIGNvbW1hbmRzIChsaWtlIHRmdHApIGV4cGxpY2l0 bHkgcGFyc2UgdGhlIGNvbnRyb2wgRFQgdG8gZmluZCBhbmQKPiA+Pj4gcmVzcGVjdCByZXNlcnZl ZCBtZW1vcnkgcmVnaW9ucy4gYm9vdG0gZG9lcyB0aGF0IGFsc28sIGJ1dCBvbmx5IHRvCj4gPj4+ IGF2b2lkIHBsYWNpbmcgdGhlIHJhbWRpc2sgb3IgRFRCIGludG8gcmVzZXJ2ZWQgbWVtb3J5LiBU aGUgaW5mb3JtYXRpb24KPiA+Pj4gZW5kcyB1cCBpbiBpbWFnZXMtPmxtYiwgYnV0IGlzIG5vdCB1 c2VkIHRvIGdlbmVyYXRlIG9yIGFtZW5kIG5vZGVzIGluCj4gPj4+IHRoZSB0YXJnZXQgRFQuCj4g Pj4+IFNvIHRoZSBiaXRzIGFuZCBwaWVjZXMgYXJlIHRoZXJlLCBidXQgaXQgd2lsbCByZXF1aXJl IHNvbWUgY29kZSB0byBiZQo+ID4+PiBhZGRlZCB0byB0aGUgZ2VuZXJpYyBVLUJvb3QgY29kZS4K PiA+Pj4KPiA+Pj4gU28gd2hhdCBkbyB5b3UgdGhpbms/IExlYXZpbmcgdGhpcyBvdXQgd2lsbCBw cmV2ZW50IGxvYWRpbmcgRFRCcyBpbnRvCj4gPj4+IFUtQm9vdCwgYXQgdGhlIG1vbWVudCwgd2hp Y2ggc291bmRzIGJhZC4gSSBzdWdnZXN0IHdlIGtlZXAgaXQgaW4sIGZvcgo+ID4+PiBub3csIGl0 IHNob3VsZCBub3QgcmVhbGx5IGh1cnQuIFUtQm9vdCB3aWxsIGhvcGVmdWxseSBzdGFydCB0byBk byB0aGUKPiA+Pj4gcmlnaHQgdGhpbmcgc29vbiwgdGhlbiB3ZSBjYW4gZWl0aGVyIHBoYXNlIGl0 IG91dCBoZXJlIChtYXliZSB3aGVuIHdlCj4gPj4+IGFjdHVhbGx5IGNoYW5nZSBzb21ldGhpbmcg aW4gVEYtQSksIG9yIGxldCBVLUJvb3QgZml4IGl0LiAgICAKPiA+Pgo+ID4+IFRCSCwgaWYgInNv b24iIGlzIHJlYWxseSBzb29uLCBJIHdvdWxkIHJhdGhlciB3YWl0IHdpdGggSDYxNiBEVCB1bnRp bCBVLUJvb3QgCj4gPj4gc3VwcG9ydHMgY2Fycnlpbmcgb3ZlciByZXNlcnZlZCBtZW1vcnkgbm9k ZXMuICAKPiA+IAo+ID4gQnV0IHRoaXMgYWxzbyBjYXJyaWVzIGNvbXBhdGliaWxpdHkgaXNzdWVz LiBVLUJvb3Qgc3VwcG9ydCB0aGUgSDYxNiBmb3IKPiA+IG1vcmUgdGhhbiBhIHllYXIgbm93LCBh bmQgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIFUtQm9vdCByZWxlYXNlIGhhdmluZyB0aGF0Cj4gPiBw cm9wYWdhdGlvbiBjb2RlIHdvdWxkIGJlIHRoZSBvbmUgcmVsZWFzZWQgaW4gT2N0b2Jlci4gQW5k IHRoZW4gcGVvcGxlCj4gPiB3b3VsZCBzdGlsbCBuZWVkIHRvIHVwZGF0ZSBmaXJzdCwgc28gdGhh dCdzIHF1aXRlIHNvbWUgbW9udGhzIG91dC4KPiA+IEFuZCBJIHdhcyBhY3R1YWxseSBob3Bpbmcg dG8gZ2V0IGF0IGxlYXN0IHRoZSBINjE2IERUIHBhdGNoZXMgb2ZmIG15Cj4gPiBwbGF0ZSwgYW5k IGdldCB0aGVtIGludG8gdGhlIHRyZWUgdG8gaGF2ZSBhIHN0YWJsZSBhbmQgYWdyZWVkIHVwb24g YmFzZQo+ID4gKGJlZm9yZSB0aGlzIHNlcmllcyB0dXJucyBpbnRvIGEgdGVlbmFnZXIgOy0pCj4g PiBUaGVuIHdlIGNvdWxkIGZvciBpbnN0YW5jZSB1cGRhdGUgdGhlIFUtQm9vdCBINjE2IHN1cHBv cnQuICAKPiAKPiBUaGVyZSBpcyBubyBjb21wYXRpYmlsaXR5IGlzc3VlIGhlcmUgaWYgcGVvcGxl IGFyZSB1c2luZyAkZmR0Y29udHJvbGFkZHIuCj4gCj4gPj4gV2hhdGV2ZXIgd2UgZG8gbm93LCBp dCB3aWxsIGhhdmUgCj4gPj4gY29tcGF0aWJpbGl0eSBpc3N1ZXMuIElmIHdlIGludHJvZHVjZSBy ZXNlcnZlZCBtZW1vcnkgbm9kZSBub3csIHdlIGNhbid0IAo+ID4+IGVhc2lseSBkcm9wIGl0IGxh dGVyLiBCb290bG9hZGVycyBhcmUgbm90IHZlcnkgb2Z0ZW4gdXBkYXRlZCwgYnV0IGtlcm5lbHMg YW5kIAo+ID4+IERUQiBmaWxlcyBhcmUsIGF0IGxlYXN0IGluIG15IGV4cGVyaWVuY2UuIFNvIHdo ZW4gd2UgZGVjaWRlIHRvIGRyb3AgdGhlIG5vZGU/ICAKPiA+IAo+ID4gSSB0aGluayBvZiB0aGUg dGhyZWUgcG9zc2liaWxpdGllczoKPiA+IC0gRHJvcCB0aGUgbm9kZSBub3csIGFuZCBhc2sgcGVv cGxlIHRvIG5vdCBsb2FkIERUQnMgZXhwbGljaXRseSAgCj4gCj4gVGhpcyBpcyBteSBwcmVmZXJy ZWQgc29sdXRpb24uIE15IHBvc2l0aW9uIGhhcyBhbHdheXMgYmVlbiB0aGF0IHRoZSBkZXZpY2V0 cmVlCj4gaXMgcHJvdmlkZWQgYnkgcGxhdGZvcm0gZmlybXdhcmUsIG5vdCB0aGUgT1MuIFRoZSBv bmx5IHJlYXNvbiBmb3IgZXZlbgo+IHN1Ym1pdHRpbmcgdGhlIGRldmljZXRyZWUgdG8gTGludXgg aXMgYmVjYXVzZSB0aGF0IGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUKPiBiaW5kaW5ncyBhbmQgdmFs aWRhdGlvbiB0b29saW5nLgoKV2VsbCwgeW91IGFyZSBiYXJraW5nIGF0IHRoZSB3cm9uZyB0cmVl IGhlcmUgOy0pCkkgYW0gMTAwJSBiZWhpbmQgdGhlICRmZHRjb250cm9sYWRkciBhbmQgImZpcm13 YXJlIHNoaXBzIERUIiBpZGVhLgpIb3dldmVyIHRoaXMgcmVsaWVzIG9uIG9uZSB0aGluZzogdGhh dCB0aGVyZSB3aWxsIG5ldmVyIGJlIGFuCmluY29tcGF0aWJsZSBjaGFuZ2UgdG8gdGhlIERULiBT byBhdCBhbnkgcG9pbnQgaW4gdGltZSB0aGVyZSBtdXN0IGJlCmV4YWN0bHkgb25lIGJlc3QgRFQg Zm9yIHRoYXQgYm9hcmQsIGFuZCB0aGF0IERUIG11c3QgYmUgYWJsZSB0byBib290CmV2ZXJ5IGtl cm5lbDogb2xkZXIgb25lcywgY3VycmVudCBvbmVzLCBGcmVlQlNEIG9uZXMsIHlvdSBuYW1lIGl0 LgpCZWNhdXNlIG90aGVyd2lzZSB5b3UgY2Fubm90IHVwZGF0ZSB5b3VyIERULCBvciB5b3UgbG9z ZSB0aGUgYWJpbGl0eSB0bwpib290IGEgc3RhYmxlIGRpc3Rybywgb3IgdGhlIHN0YWJsZSBmYWxs YmFjayBrZXJuZWwgdGhhdCB5b3VyIGRpc3RybwppbnN0YWxsZWQsIGZvciBpbnN0YW5jZS4KQW5k IHRoaXMgaXMgbm90IHRoZW9yZXRpY2FsOiBEZWJpYW4gMTEgc2hpcHMgd2l0aCB2NS4xMCwgd2hp Y2ggZG9lcyBub3QKYm9vdCB3aXRoIGEgRFQgZnJvbSA+PSB2NS4xMyAocl9pbnRjIGJpbmRpbmcg Y2hhbmdlIGZvciBtb3N0IEFXIFNvQ3MpLgoKQW5kIHllcywgdGhpcyBtZWFucyB3ZSBoYXZlIHRv IGxpdmUgd2l0aCBkZWNpc2lvbnMgd2Ugb25jZSBtYWRlLCBhbmQKaGF2ZSB0byBtYWtlIGNvbXBy b21pc2VzLCBzbyBjYW5ub3QgZ2V0IHRoZSBEVCAiZXhhY3RseSByaWdodCBieSB0aGUKYm9vayIs IHNpbmNlIHdlIG5lZWQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eS4gSSBzdHJvbmdseSBiZWxp ZXZlCnRoZXJlIGFyZSBzb2x1dGlvbnMgdGhhdCBhbGxvdyB0aGlzLCBldmVuIGlmIHdlIHNwb3Qg bWlzdGFrZXMgbGF0ZXIgb3IKbmVlZCB0byBhbWVuZCBzb21ldGhpbmcgdG8gbWFrZSBhIG5ldyBm ZWF0dXJlIHdvcmsuIEF0IHRoZSBjb3N0IG9mCmJlaW5nIHBvdGVudGlhbGx5IHNvbWV3aGF0ICJo YWNreSIuCgpTb21lIHllYXJzIGFnbyBJIGhhdmUgYmVlbiBleHBsaWNpdGx5IHRvbGQgdGhhdCBt YWlubGluZSBzdW54aSBMaW51eApkb2VzIG5vdCBoYXZlIHRoZSByZXNvdXJjZXMgdG8gcHVsbCB0 aGlzIG9mZiwgYW5kIHdlIGRvbid0IGd1YXJhbnRlZQpmb3J3YXJkIGNvbXBhdGliaWxpdHksIHdo aWNoIGluIG15IHZpZXcgcmVuZGVycyB0aGlzICRmZHRjb250cm9sYWRkcgphcHByb2FjaCBtb290 LiBBbmQgdGhlIHJfaW50YyBiaW5kaW5nIGNoYW5nZSwgYWxzbyB0aGUgdXBjb21pbmcgQTIzCmNs b2NrIGNoYW5nZSB0ZWxsIG1lIHRoYXQgdGhpcyBpcyBzdGlsbCB0aGUgcG9zaXRpb24gYW1vbmcg dGhlCm1haW50YWluZXJzPwoKT3IgaGFzIHRoaXMgcG9zaXRpb24gY2hhbmdlZCBmb3IgbmV3IFNv Q3M/IFNvIGRvIHdlIHByb21pc2UgdG8gbmV2ZXIKYnJlYWsgY29tcGF0aWJpbGl0eSBmb3IgRDEg YW5kIEg2MTYsIGFuZCBvdGhlciBuZXcgU29Dcz8gT3IgZXZlbiBmb3IKb2xkZXIgU29DcywgZnJv bSBub3cgb24/Cgo+IEkgaGF2ZSBiZWVuIHVzaW5nIHRoaXMgYXBwcm9hY2ggZm9yIEQxLCBhbmQg c28gZmFyIHRoZXJlIGhhdmUgYmVlbiBubyB1bnNvbHZhYmxlCj4gcHJvYmxlbXMuIFllcywgbW9z dCBpbWFnZSBidWlsZGVycyBhc3N1bWUgeW91IHdhbnQgdG8gbG9hZCBhIERUQiBmcm9tIGRpc2ss IGJ1dAo+IHRlYWNoaW5nIHRoZW0gbm90IHRvIGRvIHRoYXQgaXMgZmFpcmx5IHNpbXBsZS4gQW5k IHllcywgaXQgbWVhbnMgd2UgaGF2ZSB0byBkbwo+IGJldHRlciBhYm91dCBrZWVwaW5nIHRoZSBV LUJvb3QgRFRTcyBpbiBzeW5jLCBidXQgSSB0aGluayB3ZSBjYW4gbWFuYWdlIHRoYXQuCgpZZXMs IEkgYW0gdmVyeSBoYXBweSB0byB1cGRhdGUgdGhlbSBtdWNoIG1vcmUgcmVndWxhcmx5LCBhbmQg ZXZlbiBoYXZlCnNvbWUgcHJvdG90eXBlIHRvb2wgdG8gdXBkYXRlIHRoZSBEVEIgZGlyZWN0bHkg aW4gdGhlIEZJVCBpbWFnZSBvbiBTUEkKZmxhc2gvZU1NQyBib290L1NEIGNhcmQvZXRjLiBPciBJ IGd1ZXNzIHdlIHJhdGhlciBleHBsb3JlIHRoZSBFRkkKY2Fwc3VsZSB1cGRhdGUgcGF0aCBtb3Jl LgpIb3dldmVyIHRoaXMgaXMgYWxsIHJhdGhlciBwb2ludGxlc3MgKGFuZCBhY3R1YWxseSBjb3Vu dGVycHJvZHVjdGl2ZSkgaWYKdGhhdCBuZXcgRFQgZG9lcyBub3QgYm9vdCBhbGwga2VybmVscy4K Cj4gPiAtIERyb3AgdGhlIG5vZGUgd2hlbiBVLUJvb3QgbGVhcm5lZCB0byBwcm9wYWdhdGUgdGhl IHJlc2VydmF0aW9uCj4gPiAtIEtlZXAgdGhlIG5vZGUKPiA+IHRoZSBsYXN0IG9uZSBpcyB0aGUg bGVhc3QgcGFpbmZ1bDogaGF2aW5nIHRoaXMgbm9kZSBpbiBkb2VzIG5vdCByZWFsbHkKPiA+IGh1 cnQsIHNvIHdlIGNhbiBiZSB2ZXJ5IHJlbGF4ZWQgd2l0aCB0aGlzIHJlbW92YWwgZGVjaXNpb246 ICAKPiAKPiBTdXBwb3J0aW5nIGV4cGxpY2l0bHktbG9hZGVkIERUQnMgaXMgdGhlIG1vc3QgcGFp bmZ1bCBvcHRpb24gZ29pbmcgZm9yd2FyZCwKPiBiZWNhdXNlIHRoYXQgbWVhbnMgVS1Cb290IGhh cyB0byBrbm93IGFib3V0IGFuZCBwcm9wYWdhdGUgX2V2ZXJ5XyBydW50aW1lIGNoYW5nZQo+IG1h ZGUgYnkgYW55IGZpcm13YXJlIGNvbXBvbmVudCAobm90IGp1c3QgY2hhbmdlcyBtYWRlIGJ5IGl0 KSB0byB0aGUgY29udHJvbCBGRFQuCgpZZXMsIHlvdSBoYXZlIHNvbWUgcG9pbnQgdGhlcmUuCgo+ IEZvciBleGFtcGxlLCBjb25zaWRlciBURi1BIHBhdGNoaW5nIGluIGluZm9ybWF0aW9uIGFib3V0 IGlkbGUgc3RhdGVzLCBvciBTSUQKPiBjb250ZW50cyBpbiBzZWN1cmUgbW9kZSwgb3IgbWFya2lu ZyBub2RlcyBhcyAicmVzZXJ2ZWQiIGJlY2F1c2UgaXQgZGVsZWdhdGVzCj4gdGhvc2UgZGV2aWNl cyB0byBhIHNlY3VyZSBlbmNsYXZlLiBUaGlzIHByb2JsZW0gaXMgc29sdmVkIGlmIHdlIHNheSAi d2Ugc3VwcG9ydAo+ICRmZHRjb250cm9sYWRkciwgYW5kIHdlIHN1cHBvcnQgb3ZlcmxheXM7IGJ1 dCB5b3UgYXJlIG9uIHlvdXIgb3duIGlmIHlvdSBsb2FkIGEKPiBEVEIgZnJvbSBkaXNrLiIKPiAK PiBEaXN0cm9zIHdpbGwgY29udGludWUgbG9hZGluZyBEVEJzIGZyb20gZGlzayBhcyBsb25nIGFz IGl0IHNvcnRhLWtpbmRhLW1vc3RseQo+IHdvcmtzLCBhbmQgdGhlbiB5ZWFycyBsYXRlciB1c2Vy cyB3aWxsIGNvbXBsYWluIHRoYXQgdGhlaXIgcGhvbmUgdXNlcyA0IHdhdHRzIGF0Cj4gaWRsZSwg YmVjYXVzZSB0aGVpciBleHBsaWNpdGx5LWxvYWRlZCBEVEIgY29udGFpbmVkIGlkbGUgc3RhdGVz IHRoYXQgdGhlaXIKPiBmaXJtd2FyZSBkaWQgbm90IHN1cHBvcnQgKHRoaXMgaXMgYSB0cnVlIHN0 b3J5KS4KPiAKPiAiRG9uJ3QgbG9hZCBEVEJzIiBpcyBhIG11Y2ggZWFzaWVyIHN0b3J5IHRvIHRl bGwgaWYgZG9pbmcgc28gaXMgb2J2aW91c2x5IGJyb2tlbgo+IG91dCBvZiB0aGUgYm94IGZyb20g ZGF5IDEuCgpJIG1vc3RseSBhZ3JlZSwgZnJvbSBhIGRldmVsb3BlcidzIHBvaW50IG9mIHZpZXcu IE15IHN1Z2dlc3Rpb24gd2FzCmp1c3QgdHJ5aW5nIHRvIGVtYnJhY2UgdGhlIChjdXJyZW50KSBy ZWFsaXR5LCBhbmQgZ2l2aW5nIHRoZSB1c2VyIHRoZQphYmlsaXR5IHRvIGxvYWQgYSBuZXcgRFRC LiBCdXQgeWVzLCB0aGV5IHNob3VsZCBub3QgZG8gdGhpcy4KCkFuZCBJIGFjdHVhbGx5IGJlbGll dmUgZGlzdHJvcyBkb24ndCByZWFsbHkgbGlrZSB0aGlzIGFwcHJvYWNoIGVpdGhlciwKaXQncyBq dXN0IGhvdyBtYWlubGluZSBMaW51eCB3b3JrZWQgZm9yIG1vc3QgcGxhdGZvcm1zOiB5b3UgYmV0 dGVyIHJ1bgp3aXRoIHRoZSBsYXRlc3QgRFRCLCBhbmQgdGhlIG9uZSBtYXRjaGluZyB0aGUga2Vy bmVsICh3aGF0ZXZlciB0aGF0Cm1lYW5zKS4gU28gSSB0aGluayB0aGV5IHdpbGwgYmUgcXVpdGUg aGFwcHkgdG8gdXNlIFUtQm9vdCdzIERUQiwgdGhvdWdoCnRoaXMgbmVlZHMgdG8gYmUgdGhlIHVu aXZlcnNhbCBvbmUuCgpTbyBJIHRoaW5rIHRoZSB3aG9sZSBkaXNjdXNzaW9uIGJvaWxzIGRvd24g dG8gdGhlIHF1ZXN0aW9uIG9mIGhvdyB3ZQphcmUgZ29pbmcgdG8gZGVhbCB3aXRoIHVwY29taW5n IERUIGZpeGVzPyBEbyB3ZSBhbGxvdyB0aGVtIG9ubHkgaW4gYQpjb21wYXRpYmxlIHdheT8KQW5k IHRoaXMgY291bGQgYmUgYSBzaW1wbGUgdGhpbmcsIGxpa2UgYWRkaW5nIGEgcHJldmlvdXNseSB1 bmtub3duCnJlZ3VsYXRvciB0byBhIGRldmljZTogb2xkZXIga2VybmVscyBtaWdodCBub3Qgc3Vw cG9ydCB0aGF0IHJlZ3VsYXRvciwKc28gdGhlIGRldmljZSBub3cgZmFpbHMgcHJvYmluZy4gVGhp cyBpcyBhIHByb21pbmVudCBwcm9ibGVtIGZvcgppbml0aWFsIChtaW5pbWFsKSBEVHMsIHdoZXJl IHdlIG9ubHkgZ2V0IFBNSUMgc3VwcG9ydCBsYXRlci4gU3VyZSwgd2UKY291bGQgZGVtYW5kIGhh dmluZyBQTUlDIHN1cHBvcnQgaW4gZnJvbSBkYXkgb25lLCBidXQgdGhlcmUgbWlnaHQgYmUKb3Ro ZXIgdGhpbmdzIHdlIG1pc3MgKGxpa2UgYSBjbG9jayBnYXRlZCBieSB0aGUgUlRDKS4KCkNoZWVy cywKQW5kcmUKCgogIAoKPiAKPiBSZWdhcmRzLAo+IFNhbXVlbAo+IAo+ID4gLSBJZiBVLUJvb3Qg ZG9lcyBub3QgYWRkIHRoZSByZXNlcnZlZCBub2RlLCB3ZSBhcmUgY292ZXJlZC4KPiA+IC0gSWYg VS1Cb290IGFkZHMgdGhlIG5vZGUsIGl0IHdpbGwgZG8gc28gaW4gYSB3YXkgd2hlcmUgaXQgZGVh bHMgd2l0aAo+ID4gZXhpc3RpbmcgcmVzZXJ2YXRpb25zLiBTbyBlaXRoZXIgaXQgZG9lc24ndCBh Y3R1YWxseSBjaGFuZ2UgYW55dGhpbmcsIG9yCj4gPiBpdCBleHRlbmRzIHRoZSByZXNlcnZhdGlv bi4KPiA+IC0gU2hvdWxkIHRoZSBURi1BIGxvY2F0aW9uIGFjdHVhbGx5IG1vdmUgKGFuZCB3ZSBo YXZlIG5vIHBsYW5zIG9yIG5lZWRzIHRvCj4gPiBkbyB0aGF0KSwgcGVvcGxlIHdvdWxkIG9ubHkg Z2V0IHRoaXMgYnkgdXBkYXRpbmcgdGhlIGZpcm13YXJlLCBhdCB3aGljaAo+ID4gcG9pbnQgdGhl IFUtQm9vdCBwYXJ0IHdvdWxkIHN1cmVseSBiZSBpbiBwbGFjZSBhbHJlYWR5LiBXZSBkb24ndCBy ZWFsbHkKPiA+IHN1cHBvcnQgdXBkYXRpbmcganVzdCBCTDMxIGluIGFuIGV4aXN0aW5nIGJpbmFy eSBmaXJtd2FyZSBpbWFnZSwgc28geW91Cj4gPiB3b3VsZCBnZXQgYW4gdXBkYXRlZCBVLUJvb3Qg YXMgd2VsbC4KPiA+IAo+ID4gSSB0aGluayB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbyBpcyB0aGF0 IHVzZXJzIGVuZCB1cCB3aXRoIGFuIHVubmVlZGVkIDUxMksKPiA+IHJlc2VydmF0aW9uLiBJZiB0 aGV5IGNhcmUsIGEgZmlybXdhcmUgdXBkYXRlIHNob3VsZCBzb2x2ZSB0aGlzIHByb2JsZW0uCj4g PiAKPiA+IEFzIGZvciB0aGUgdGltZSB0byByZW1vdmUgdGhhdCBub2RlOiB3ZSBjb3VsZCBkbyB0 aGF0IGF0IHRoZSB0aW1lIHdoZW4KPiA+IChvciByYXRoZXI6IGlmKSB3ZSBhY3R1YWxseSBjaGFu Z2UgdGhlIFRGLUEgcmVzZXJ2YXRpb24uIEF0IHRoZSBtb21lbnQKPiA+IHRoZXJlIGFyZSBubyBw bGFucyB0byBkbyB0aGlzLCBhbmQgdGhlIHNpemUgcmVzZXJ2YXRpb24gaXMgbW9yZSB0aGFuCj4g PiBnZW5lcm91cyAodGhlIGN1cnJlbnQgZGVidWcgYnVpbGQgaXMgYWN0dWFsbHkgNzcgS0Igb3Ig c28gb25seSkuIElmIHRoZXJlCj4gPiBpcyBubyBjaGFuZ2UsIGFuZCB0aGUgbm9kZSBzdGF5cyBp biB0aGUgLmR0c2ksIGl0IGRvZXNuJ3QgcmVhbGx5IGh1cnQsIHNlZQo+ID4gYWJvdmUuCj4gPiAg IAo+ID4+IEFmdGVyIDEwIHllYXJzPyBBbHRlcm5hdGl2ZWx5LCByZXNlcnZlZCBtZW1vcnkgbm9k ZSBjYW4gYmUganVzdCBkcm9wcGVkIGFuZCAKPiA+PiBhbnlvbmUgbG9hZGluZyBEVEIgZmlsZSBm cm9tIG91dHNpZGUgd291bGQgbmVlZCB0byBtYWtlIHN1cmUgaXQncyBwYXRjaGVkLiBCdXQgCj4g Pj4gdGhhdCdzIHVuZXhwZWN0ZWQgZnJvbSB1c2VyIHBlcnNwZWN0aXZlLCBhbHRob3VnaCBwYXRj aGluZyBEVCBmaWxlcyBpcyBkb25lIGJ5IAo+ID4+IHNvbWUgZGlzdHJvcy4gIAo+ID4gCj4gPiBZ ZWFoLCBsZXQncyBub3QgZ28gdGhlcmUuIEFzIHlvdSBrbm93LCBJIGFscmVhZHkgZGlzbGlrZSB0 aGUgaWRlYSBvZgo+ID4gZXhwbGljaXRseSBsb2FkaW5nIERUQnMgYXQgYWxsLCBidXQgSSB1bmRl cnN0YW5kIHRoaXMgaXMgd2hhdCBwZW9wbGUsIGFuZAo+ID4gZGlzdHJpYnV0aW9ucywgZG8sIHNv IEknZCByYXRoZXIgaGF2ZSB0aGVtIGNvdmVyZWQuIEhlbmNlIHRoZSBub2RlIHRvCj4gPiB3b3Jr IHdpdGggZXhpc3RpbmcgZmlybXdhcmUuCj4gPiAKPiA+IERvZXMgdGhhdCBtYWtlIHNlbnNlPwo+ ID4gCj4gPiBDaGVlcnMsCj4gPiBBbmRyZQo+ID4gICAKPiAKPiAKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==