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=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham 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 60497C10F13 for ; Thu, 11 Apr 2019 22:06:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2A46220693 for ; Thu, 11 Apr 2019 22:06:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726732AbfDKWGN convert rfc822-to-8bit (ORCPT ); Thu, 11 Apr 2019 18:06:13 -0400 Received: from gloria.sntech.de ([185.11.138.130]:33956 "EHLO gloria.sntech.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726730AbfDKWGN (ORCPT ); Thu, 11 Apr 2019 18:06:13 -0400 Received: from ip5f5a6320.dynamic.kabel-deutschland.de ([95.90.99.32] helo=diego.localnet) by gloria.sntech.de with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hEhpW-0001y4-FF; Fri, 12 Apr 2019 00:05:58 +0200 From: Heiko =?ISO-8859-1?Q?St=FCbner?= To: Doug Anderson Cc: "elaine.zhang" , Michael Turquette , Stephen Boyd , Caesar Wang , "open list:ARM/Rockchip SoC..." , Matthias Kaehlcke , Ryan Case , linux-clk , LKML , Linux ARM Subject: Re: [PATCH 1/3] Revert "clk: rockchip: mark noc and some special clk as critical on rk3288" Date: Fri, 12 Apr 2019 00:05:57 +0200 Message-ID: <1820193.6uR021mFLB@diego> In-Reply-To: References: <20190409204707.150347-1-dianders@chromium.org> <1491b5f1-e9f9-5718-76e5-0a49814ed76d@rock-chips.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT Content-Type: text/plain; charset="UTF-8" Sender: linux-clk-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org Hi, Am Donnerstag, 11. April 2019, 17:26:41 CEST schrieb Doug Anderson: > On Wed, Apr 10, 2019 at 8:27 PM elaine.zhang wrote: > > 在 2019/4/10 下午11:34, Doug Anderson 写道: > > On Tue, Apr 9, 2019 at 11:23 PM elaine.zhang wrote: > > 在 2019/4/10 上午4:47, Douglas Anderson 写道: > > > > This reverts commit 55bb6a633c33caf68ab470907ecf945289cb733d. > > > > The clocks that were enabled by that patch are pretty questionable. > > Specifically looking at what has been shipping on rk3288-veyron > > Chromebooks almost all of these clocks are safely turned off and cause > > no apparent problems. If some boards need these clocks turned on for > > some reason then it seems like we should figure out how to do that at > > a board level. > > > > NOTE: turning these clocks off doesn't seem to do a whole lot in terms > > of power savings (checking the power on the logic rail). It appears > > to save maybe 1-2mW. ...but still it seems like we should turn the > > clocks off if they aren't needed. > > > > Digging into the clocks here to describe why they shouldn't need to be > > left on: > > > > atclk: No documentation about this clock other than that it goes to > > the CPU. CPU functions fine without it on. > > > > jtag: Presumably this clock is only needed if you're debugging with > > JTAG. It doesn't seem like it makes sense to waste power for every > > rk3288 user. Perhaps this could be turned on with a CONFIG option? > > > > pclk_dbg, pclk_core_niu: On veyron Chromebooks we turn these two > > clocks on only during kernel panics in order to access some coresight > > registers. Since nothing in the upstream kernel does this we should > > be able to leave them off safely. > > > > hsicphy12m_xin12m: There is no indication of why this clock would need > > to be turned on for boards that don't use HSIC. > > > > pclk_ddrupctl[0-1], pclk_publ0[0-1]: On veyron Chromebooks we turn > > these 4 clocks on only when doing DDR transitions and they are off > > otherwise. I see no reason why they'd need to be on in the upstream > > kernel which doesn't support DDRFreq. > > > > pmu_hclk_otg0: A "chip design defect" is mentioned in the original > > patch but no details. This clock has always been gated in shipping > > veyron Chromebooks so presumably this chip defect doesn't affect all > > boards. > > > > Signed-off-by: Douglas Anderson > > --- > > > > drivers/clk/rockchip/clk-rk3288.c | 14 ++++---------- > > 1 file changed, 4 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c > > index 5a67b7869960..06287810474e 100644 > > --- a/drivers/clk/rockchip/clk-rk3288.c > > +++ b/drivers/clk/rockchip/clk-rk3288.c > > @@ -313,13 +313,13 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { > > COMPOSITE_NOMUX(0, "aclk_core_mp", "armclk", CLK_IGNORE_UNUSED, > > RK3288_CLKSEL_CON(0), 4, 4, DFLAGS | CLK_DIVIDER_READ_ONLY, > > RK3288_CLKGATE_CON(12), 6, GFLAGS), > > - COMPOSITE_NOMUX(0, "atclk", "armclk", CLK_IGNORE_UNUSED, > > + COMPOSITE_NOMUX(0, "atclk", "armclk", 0, > > RK3288_CLKSEL_CON(37), 4, 5, DFLAGS | CLK_DIVIDER_READ_ONLY, > > RK3288_CLKGATE_CON(12), 7, GFLAGS), > > COMPOSITE_NOMUX(0, "pclk_dbg_pre", "armclk", CLK_IGNORE_UNUSED, > > RK3288_CLKSEL_CON(37), 9, 5, DFLAGS | CLK_DIVIDER_READ_ONLY, > > RK3288_CLKGATE_CON(12), 8, GFLAGS), > > - GATE(0, "pclk_dbg", "pclk_dbg_pre", CLK_IGNORE_UNUSED, > > + GATE(0, "pclk_dbg", "pclk_dbg_pre", 0, > > RK3288_CLKGATE_CON(12), 9, GFLAGS), > > GATE(0, "cs_dbg", "pclk_dbg_pre", CLK_IGNORE_UNUSED, > > RK3288_CLKGATE_CON(12), 10, GFLAGS), > > @@ -647,7 +647,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { > > INVERTER(SCLK_HSADC, "sclk_hsadc", "sclk_hsadc_out", > > RK3288_CLKSEL_CON(22), 7, IFLAGS), > > > > - GATE(0, "jtag", "ext_jtag", CLK_IGNORE_UNUSED, > > + GATE(0, "jtag", "ext_jtag", 0, > > RK3288_CLKGATE_CON(4), 14, GFLAGS), > > > > CLK_IGNORE_UNUSED: > > Whether to close the unused clk after clk init complete. not affect > > there own enable/disable. > > JTAG is not have device node, when need jtag to debug, may be the system > > is crashed, there is no way to turn on this clk. > > > > As I mentioned in the commit message this seems like the kind of thing > > that should be controlled by a CONFIG_ option. It's a debug option > > that's fine to have on all the time but consumes resources so some > > people might want to turn it off. > > > > Currently, CONFIG_ option is not implemented. We will refer to this suggestion. > > > > For debug, I don't hope to remove the flag CLK_IGNORE_UNUSED.(The clk static power is very small) > > I'll leave it up to Heiko for what to do here. I agree that it's not > tons of power (this whole patch saved 1-2 mW on the INT rail) but I'd > still prefer for clocks to be off if they can. In general one could > also argue that keeping JTAG off by default could be good for > security. > > ...but I guess I have to wonder how you're doing JTAG on upstream > kernels without any extra patches anyway. Automatic JTAG switching is > turned off in "drivers/soc/rockchip/grf.c". ...and by default the > JTAG signals are muxed as the SD Card. So presumably you've already > got extra patches in order to make JTAG work. > > I assume that the clocks that are important for JTAG are "atclk", > "jtag", "pclk_dbg", and "pclk_core_niu". Isn't JTAG part of the coresight package anyway? The whole coresight stuff, so in an upstream-context I'd somehow expect it to get activated through that. Or is it actually separate and only in the debug-diagram in the TRM mixed into coresight? In any case I'm with Doug here, for jtag you need to modify your kernel anyway for pinctrl settings, so could also enable the clock in that case. > > COMPOSITE_NODIV(SCLK_USBPHY480M_SRC, "usbphy480m_src", mux_usbphy480m_p, 0, > > @@ -656,7 +656,7 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { > > COMPOSITE_NODIV(SCLK_HSICPHY480M, "sclk_hsicphy480m", mux_hsicphy480m_p, 0, > > RK3288_CLKSEL_CON(29), 0, 2, MFLAGS, > > RK3288_CLKGATE_CON(3), 6, GFLAGS), > > - GATE(0, "hsicphy12m_xin12m", "xin12m", CLK_IGNORE_UNUSED, > > + GATE(0, "hsicphy12m_xin12m", "xin12m", 0, > > RK3288_CLKGATE_CON(13), 9, GFLAGS), > > DIV(0, "hsicphy12m_usbphy", "sclk_hsicphy480m", 0, > > RK3288_CLKSEL_CON(11), 8, 6, DFLAGS), > > @@ -837,12 +837,6 @@ static const char *const rk3288_critical_clocks[] __initconst = { > > "pclk_alive_niu", > > "pclk_pd_pmu", > > "pclk_pmu_niu", > > - "pclk_core_niu", > > - "pclk_ddrupctl0", > > - "pclk_publ0", > > - "pclk_ddrupctl1", > > - "pclk_publ1", > > > > These clks needed enable, device node not use this clk, so we mark it as > > critical. > > > > What breaks if you don't enable these clocks? As far as I can tell > > these clocks only need to be enabled while touching memory controller > > registers (deep suspend/resume and DDRFreq transitions). On > > Chromebooks everything works fine with these clocks only turned on > > when needed. > > > > If need to enable these clks, ddrupctl0/ddrupctl1/publ0/publ1 clks no driver to handle them, so mark these clk as critical. > > Perhaps it's just a typo, but you say "If need to enable". I see no > evidence that these clocks need to be enabled unless there is code > touching memory controller registers. Thus we don't need to enable > them so they don't need to be critical. yep ... maybe Elaine can clarify in what other activities these clocks are needed ... I guess any ddr-scaling code would activate them before touching memory-controller-registers. > > - "pmu_hclk_otg0", > > > > It's a soc bug, pmu_hclk_otg0 must always on. > > > > So you said in your previous commit message. However we've shipped > > lots and lots of Chromebooks with this clock off. Can you explain > > what is broken? Is this only needed for gadget mode (which we don't > > use), for instance? > > > > test case: > > > > recovery test, < 1 hour , system crash. > > > > log: > > > > [ 127.569629] I[0: swapper/0: 0] GOTGCTL @0xFFFFFF8000B80000 : 0x00400010 > > [ 127.569644] I[0: swapper/0: 0] GOTGINT @0xFFFFFF8000B80004 : 0x00400010 > > [ 127.569659] I[0: swapper/0: 0] GAHBCFG @0xFFFFFF8000B80008 : 0x00400010 > > [ 127.569673] I[0: swapper/0: 0] GUSBCFG @0xFFFFFF8000B8000C : 0x00400010 > > [ 127.569688] I[0: swapper/0: 0] GRSTCTL @0xFFFFFF8000B80010 : 0x00400010 > > [ 127.569702] I[0: swapper/0: 0] GINTSTS @0xFFFFFF8000B80014 : 0x00400010 > > [ 127.569718] I[0: swapper/0: 0] GINTMSK @0xFFFFFF8000B80018 : 0x00400010 > > [ 127.569733] I[0: swapper/0: 0] GRXSTSR @0xFFFFFF8000B8001C : 0x00400010 > > [ 127.569748] I[0: swapper/0: 0] GRXFSIZ @0xFFFFFF8000B80024 : 0x00400010 > > I don't know what a "recovery test" is and I don't understand your logs. > > Can you explain we do not run into this on Chromebooks? > > > > reason: > > > > USB OTG controller supports turning off most logic power, and then only one PMU module is left. This clock cannot be turned off, which is similar to the always on module in USB OTG. > > Can't you just add a patch to the dwc2 driver to have it grab this > clock? I assume this clock doesn't need to be turned on unless you're > using the OTG contoller in a certain way? So far we don't really know where the clock in question is sitting in the clock hirarchy. For example the kernel got a new interconnect framework recently, so handling non-device clocks in a device may haunt us later on. @Elaine: could you elaborate what pmu_hclk_otg0 actually is for please? > NOTE: nowhere in your responses did you talk about why > "hsicphy12m_xin12m" needed to be marked as IGNORE_UNUSED. I guess > you're OK with removing that? Thanks Heiko 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=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham 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 5B415C10F13 for ; Thu, 11 Apr 2019 22:06:22 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 27A0920693 for ; Thu, 11 Apr 2019 22:06:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ajp7thw7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 27A0920693 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sntech.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=MgTlrnQjViknMTg3FFfiy9Hk82osaQC3Zgo+nwtZhdA=; b=ajp7thw7+L4yGN WNhpOQkoFPct49aCdnw4WJ+RGpZAlyefNyGehppHQHZiCtGjFpVhuLNJ6SveJj70mgcAmmAHmO0Kz wAa2CkHsQwJik3/KXzX5EsLjykJKOUqjibu2aeffEg1dZ9etj4spzKcykwQjE6a9yVmmG5ldKYZKg bCVKW8/u+zt6CMv8QPuHBF9c7qenSs3HqTrjsp3n/uO0gK3vl8P1P5HkHpz7LG0eXo1W5FgA7e9JU XQGzotR72N3d4P2yDVlARFVPpmsFESoa2gYS0wJBolYFA9DZl4t0ej7rOqzhMF12E9jWtiXg169sc vUvJVwuUQXsWQCIzsQEQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hEhpr-0007UD-2U; Thu, 11 Apr 2019 22:06:19 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hEhpm-0007TU-7B; Thu, 11 Apr 2019 22:06:16 +0000 Received: from ip5f5a6320.dynamic.kabel-deutschland.de ([95.90.99.32] helo=diego.localnet) by gloria.sntech.de with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hEhpW-0001y4-FF; Fri, 12 Apr 2019 00:05:58 +0200 From: Heiko =?ISO-8859-1?Q?St=FCbner?= To: Doug Anderson Subject: Re: [PATCH 1/3] Revert "clk: rockchip: mark noc and some special clk as critical on rk3288" Date: Fri, 12 Apr 2019 00:05:57 +0200 Message-ID: <1820193.6uR021mFLB@diego> In-Reply-To: References: <20190409204707.150347-1-dianders@chromium.org> <1491b5f1-e9f9-5718-76e5-0a49814ed76d@rock-chips.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190411_150614_414180_AB969B8D X-CRM114-Status: GOOD ( 46.82 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stephen Boyd , Michael Turquette , "elaine.zhang" , LKML , "open list:ARM/Rockchip SoC..." , Matthias Kaehlcke , Ryan Case , Caesar Wang , linux-clk , Linux ARM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpBbSBEb25uZXJzdGFnLCAxMS4gQXByaWwgMjAxOSwgMTc6MjY6NDEgQ0VTVCBzY2hyaWVi IERvdWcgQW5kZXJzb246Cj4gT24gV2VkLCBBcHIgMTAsIDIwMTkgYXQgODoyNyBQTSBlbGFpbmUu emhhbmcgPHpoYW5ncWluZ0Byb2NrLWNoaXBzLmNvbT4gd3JvdGU6Cj4gPiDlnKggMjAxOS80LzEw IOS4i+WNiDExOjM0LCBEb3VnIEFuZGVyc29uIOWGmemBkzoKPiA+IE9uIFR1ZSwgQXByIDksIDIw MTkgYXQgMTE6MjMgUE0gZWxhaW5lLnpoYW5nIDx6aGFuZ3FpbmdAcm9jay1jaGlwcy5jb20+IHdy b3RlOgo+ID4g5ZyoIDIwMTkvNC8xMCDkuIrljYg0OjQ3LCBEb3VnbGFzIEFuZGVyc29uIOWGmemB kzoKPiA+Cj4gPiBUaGlzIHJldmVydHMgY29tbWl0IDU1YmI2YTYzM2MzM2NhZjY4YWI0NzA5MDdl Y2Y5NDUyODljYjczM2QuCj4gPgo+ID4gVGhlIGNsb2NrcyB0aGF0IHdlcmUgZW5hYmxlZCBieSB0 aGF0IHBhdGNoIGFyZSBwcmV0dHkgcXVlc3Rpb25hYmxlLgo+ID4gU3BlY2lmaWNhbGx5IGxvb2tp bmcgYXQgd2hhdCBoYXMgYmVlbiBzaGlwcGluZyBvbiByazMyODgtdmV5cm9uCj4gPiBDaHJvbWVi b29rcyBhbG1vc3QgYWxsIG9mIHRoZXNlIGNsb2NrcyBhcmUgc2FmZWx5IHR1cm5lZCBvZmYgYW5k IGNhdXNlCj4gPiBubyBhcHBhcmVudCBwcm9ibGVtcy4gIElmIHNvbWUgYm9hcmRzIG5lZWQgdGhl c2UgY2xvY2tzIHR1cm5lZCBvbiBmb3IKPiA+IHNvbWUgcmVhc29uIHRoZW4gaXQgc2VlbXMgbGlr ZSB3ZSBzaG91bGQgZmlndXJlIG91dCBob3cgdG8gZG8gdGhhdCBhdAo+ID4gYSBib2FyZCBsZXZl bC4KPiA+Cj4gPiBOT1RFOiB0dXJuaW5nIHRoZXNlIGNsb2NrcyBvZmYgZG9lc24ndCBzZWVtIHRv IGRvIGEgd2hvbGUgbG90IGluIHRlcm1zCj4gPiBvZiBwb3dlciBzYXZpbmdzIChjaGVja2luZyB0 aGUgcG93ZXIgb24gdGhlIGxvZ2ljIHJhaWwpLiAgSXQgYXBwZWFycwo+ID4gdG8gc2F2ZSBtYXli ZSAxLTJtVy4gIC4uLmJ1dCBzdGlsbCBpdCBzZWVtcyBsaWtlIHdlIHNob3VsZCB0dXJuIHRoZQo+ ID4gY2xvY2tzIG9mZiBpZiB0aGV5IGFyZW4ndCBuZWVkZWQuCj4gPgo+ID4gRGlnZ2luZyBpbnRv IHRoZSBjbG9ja3MgaGVyZSB0byBkZXNjcmliZSB3aHkgdGhleSBzaG91bGRuJ3QgbmVlZCB0byBi ZQo+ID4gbGVmdCBvbjoKPiA+Cj4gPiBhdGNsazogTm8gZG9jdW1lbnRhdGlvbiBhYm91dCB0aGlz IGNsb2NrIG90aGVyIHRoYW4gdGhhdCBpdCBnb2VzIHRvCj4gPiB0aGUgQ1BVLiAgQ1BVIGZ1bmN0 aW9ucyBmaW5lIHdpdGhvdXQgaXQgb24uCj4gPgo+ID4ganRhZzogUHJlc3VtYWJseSB0aGlzIGNs b2NrIGlzIG9ubHkgbmVlZGVkIGlmIHlvdSdyZSBkZWJ1Z2dpbmcgd2l0aAo+ID4gSlRBRy4gIEl0 IGRvZXNuJ3Qgc2VlbSBsaWtlIGl0IG1ha2VzIHNlbnNlIHRvIHdhc3RlIHBvd2VyIGZvciBldmVy eQo+ID4gcmszMjg4IHVzZXIuICBQZXJoYXBzIHRoaXMgY291bGQgYmUgdHVybmVkIG9uIHdpdGgg YSBDT05GSUcgb3B0aW9uPwo+ID4KPiA+IHBjbGtfZGJnLCBwY2xrX2NvcmVfbml1OiBPbiB2ZXly b24gQ2hyb21lYm9va3Mgd2UgdHVybiB0aGVzZSB0d28KPiA+IGNsb2NrcyBvbiBvbmx5IGR1cmlu ZyBrZXJuZWwgcGFuaWNzIGluIG9yZGVyIHRvIGFjY2VzcyBzb21lIGNvcmVzaWdodAo+ID4gcmVn aXN0ZXJzLiAgU2luY2Ugbm90aGluZyBpbiB0aGUgdXBzdHJlYW0ga2VybmVsIGRvZXMgdGhpcyB3 ZSBzaG91bGQKPiA+IGJlIGFibGUgdG8gbGVhdmUgdGhlbSBvZmYgc2FmZWx5Lgo+ID4KPiA+IGhz aWNwaHkxMm1feGluMTJtOiBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIG9mIHdoeSB0aGlzIGNsb2Nr IHdvdWxkIG5lZWQKPiA+IHRvIGJlIHR1cm5lZCBvbiBmb3IgYm9hcmRzIHRoYXQgZG9uJ3QgdXNl IEhTSUMuCj4gPgo+ID4gcGNsa19kZHJ1cGN0bFswLTFdLCBwY2xrX3B1YmwwWzAtMV06IE9uIHZl eXJvbiBDaHJvbWVib29rcyB3ZSB0dXJuCj4gPiB0aGVzZSA0IGNsb2NrcyBvbiBvbmx5IHdoZW4g ZG9pbmcgRERSIHRyYW5zaXRpb25zIGFuZCB0aGV5IGFyZSBvZmYKPiA+IG90aGVyd2lzZS4gIEkg c2VlIG5vIHJlYXNvbiB3aHkgdGhleSdkIG5lZWQgdG8gYmUgb24gaW4gdGhlIHVwc3RyZWFtCj4g PiBrZXJuZWwgd2hpY2ggZG9lc24ndCBzdXBwb3J0IEREUkZyZXEuCj4gPgo+ID4gcG11X2hjbGtf b3RnMDogQSAiY2hpcCBkZXNpZ24gZGVmZWN0IiBpcyBtZW50aW9uZWQgaW4gdGhlIG9yaWdpbmFs Cj4gPiBwYXRjaCBidXQgbm8gZGV0YWlscy4gIFRoaXMgY2xvY2sgaGFzIGFsd2F5cyBiZWVuIGdh dGVkIGluIHNoaXBwaW5nCj4gPiB2ZXlyb24gQ2hyb21lYm9va3Mgc28gcHJlc3VtYWJseSB0aGlz IGNoaXAgZGVmZWN0IGRvZXNuJ3QgYWZmZWN0IGFsbAo+ID4gYm9hcmRzLgo+ID4KPiA+IFNpZ25l ZC1vZmYtYnk6IERvdWdsYXMgQW5kZXJzb24gPGRpYW5kZXJzQGNocm9taXVtLm9yZz4KPiA+IC0t LQo+ID4KPiA+ICAgZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jIHwgMTQgKysrKy0t LS0tLS0tLS0KPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRp b25zKC0pCj4gPgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMy ODguYyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODguYwo+ID4gaW5kZXggNWE2N2I3 ODY5OTYwLi4wNjI4NzgxMDQ3NGUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2Nsay9yb2NrY2hp cC9jbGstcmszMjg4LmMKPiA+ICsrKyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODgu Ywo+ID4gQEAgLTMxMywxMyArMzEzLDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfY2xrX2Jy YW5jaCByazMyODhfY2xrX2JyYW5jaGVzW10gX19pbml0ZGF0YSA9IHsKPiA+ICAgICAgIENPTVBP U0lURV9OT01VWCgwLCAiYWNsa19jb3JlX21wIiwgImFybWNsayIsIENMS19JR05PUkVfVU5VU0VE LAo+ID4gICAgICAgICAgICAgICAgICAgICAgIFJLMzI4OF9DTEtTRUxfQ09OKDApLCA0LCA0LCBE RkxBR1MgfCBDTEtfRElWSURFUl9SRUFEX09OTFksCj4gPiAgICAgICAgICAgICAgICAgICAgICAg UkszMjg4X0NMS0dBVEVfQ09OKDEyKSwgNiwgR0ZMQUdTKSwKPiA+IC0gICAgIENPTVBPU0lURV9O T01VWCgwLCAiYXRjbGsiLCAiYXJtY2xrIiwgQ0xLX0lHTk9SRV9VTlVTRUQsCj4gPiArICAgICBD T01QT1NJVEVfTk9NVVgoMCwgImF0Y2xrIiwgImFybWNsayIsIDAsCj4gPiAgICAgICAgICAgICAg ICAgICAgICAgUkszMjg4X0NMS1NFTF9DT04oMzcpLCA0LCA1LCBERkxBR1MgfCBDTEtfRElWSURF Ul9SRUFEX09OTFksCj4gPiAgICAgICAgICAgICAgICAgICAgICAgUkszMjg4X0NMS0dBVEVfQ09O KDEyKSwgNywgR0ZMQUdTKSwKPiA+ICAgICAgIENPTVBPU0lURV9OT01VWCgwLCAicGNsa19kYmdf cHJlIiwgImFybWNsayIsIENMS19JR05PUkVfVU5VU0VELAo+ID4gICAgICAgICAgICAgICAgICAg ICAgIFJLMzI4OF9DTEtTRUxfQ09OKDM3KSwgOSwgNSwgREZMQUdTIHwgQ0xLX0RJVklERVJfUkVB RF9PTkxZLAo+ID4gICAgICAgICAgICAgICAgICAgICAgIFJLMzI4OF9DTEtHQVRFX0NPTigxMiks IDgsIEdGTEFHUyksCj4gPiAtICAgICBHQVRFKDAsICJwY2xrX2RiZyIsICJwY2xrX2RiZ19wcmUi LCBDTEtfSUdOT1JFX1VOVVNFRCwKPiA+ICsgICAgIEdBVEUoMCwgInBjbGtfZGJnIiwgInBjbGtf ZGJnX3ByZSIsIDAsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgUkszMjg4X0NMS0dBVEVfQ09O KDEyKSwgOSwgR0ZMQUdTKSwKPiA+ICAgICAgIEdBVEUoMCwgImNzX2RiZyIsICJwY2xrX2RiZ19w cmUiLCBDTEtfSUdOT1JFX1VOVVNFRCwKPiA+ICAgICAgICAgICAgICAgICAgICAgICBSSzMyODhf Q0xLR0FURV9DT04oMTIpLCAxMCwgR0ZMQUdTKSwKPiA+IEBAIC02NDcsNyArNjQ3LDcgQEAgc3Rh dGljIHN0cnVjdCByb2NrY2hpcF9jbGtfYnJhbmNoIHJrMzI4OF9jbGtfYnJhbmNoZXNbXSBfX2lu aXRkYXRhID0gewo+ID4gICAgICAgSU5WRVJURVIoU0NMS19IU0FEQywgInNjbGtfaHNhZGMiLCAi c2Nsa19oc2FkY19vdXQiLAo+ID4gICAgICAgICAgICAgICAgICAgICAgIFJLMzI4OF9DTEtTRUxf Q09OKDIyKSwgNywgSUZMQUdTKSwKPiA+Cj4gPiAtICAgICBHQVRFKDAsICJqdGFnIiwgImV4dF9q dGFnIiwgQ0xLX0lHTk9SRV9VTlVTRUQsCj4gPiArICAgICBHQVRFKDAsICJqdGFnIiwgImV4dF9q dGFnIiwgMCwKPiA+ICAgICAgICAgICAgICAgICAgICAgICBSSzMyODhfQ0xLR0FURV9DT04oNCks IDE0LCBHRkxBR1MpLAo+ID4KPiA+IENMS19JR05PUkVfVU5VU0VEOgo+ID4gV2hldGhlciB0byBj bG9zZSB0aGUgdW51c2VkIGNsayBhZnRlciBjbGsgaW5pdCBjb21wbGV0ZS4gbm90IGFmZmVjdAo+ ID4gdGhlcmUgb3duIGVuYWJsZS9kaXNhYmxlLgo+ID4gSlRBRyBpcyBub3QgaGF2ZSBkZXZpY2Ug bm9kZSwgd2hlbiBuZWVkIGp0YWcgdG8gZGVidWcsIG1heSBiZSB0aGUgc3lzdGVtCj4gPiBpcyBj cmFzaGVkLCB0aGVyZSBpcyBubyB3YXkgdG8gdHVybiBvbiB0aGlzIGNsay4KPiA+Cj4gPiBBcyBJ IG1lbnRpb25lZCBpbiB0aGUgY29tbWl0IG1lc3NhZ2UgdGhpcyBzZWVtcyBsaWtlIHRoZSBraW5k IG9mIHRoaW5nCj4gPiB0aGF0IHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IGEgQ09ORklHXyBvcHRp b24uICBJdCdzIGEgZGVidWcgb3B0aW9uCj4gPiB0aGF0J3MgZmluZSB0byBoYXZlIG9uIGFsbCB0 aGUgdGltZSBidXQgY29uc3VtZXMgcmVzb3VyY2VzIHNvIHNvbWUKPiA+IHBlb3BsZSBtaWdodCB3 YW50IHRvIHR1cm4gaXQgb2ZmLgo+ID4KPiA+IEN1cnJlbnRseSwgIENPTkZJR18gb3B0aW9uIGlz IG5vdCBpbXBsZW1lbnRlZC4gV2Ugd2lsbCByZWZlciB0byB0aGlzIHN1Z2dlc3Rpb24uCj4gPgo+ ID4gRm9yIGRlYnVnLCAgSSBkb24ndCBob3BlIHRvIHJlbW92ZSB0aGUgZmxhZyBDTEtfSUdOT1JF X1VOVVNFRC4oVGhlIGNsayBzdGF0aWMgcG93ZXIgaXMgdmVyeSBzbWFsbCkKPiAKPiBJJ2xsIGxl YXZlIGl0IHVwIHRvIEhlaWtvIGZvciB3aGF0IHRvIGRvIGhlcmUuICBJIGFncmVlIHRoYXQgaXQn cyBub3QKPiB0b25zIG9mIHBvd2VyICh0aGlzIHdob2xlIHBhdGNoIHNhdmVkIDEtMiBtVyBvbiB0 aGUgSU5UIHJhaWwpIGJ1dCBJJ2QKPiBzdGlsbCBwcmVmZXIgZm9yIGNsb2NrcyB0byBiZSBvZmYg aWYgdGhleSBjYW4uICBJbiBnZW5lcmFsIG9uZSBjb3VsZAo+IGFsc28gYXJndWUgdGhhdCBrZWVw aW5nIEpUQUcgb2ZmIGJ5IGRlZmF1bHQgY291bGQgYmUgZ29vZCBmb3IKPiBzZWN1cml0eS4KPiAK PiAuLi5idXQgSSBndWVzcyBJIGhhdmUgdG8gd29uZGVyIGhvdyB5b3UncmUgZG9pbmcgSlRBRyBv biB1cHN0cmVhbQo+IGtlcm5lbHMgd2l0aG91dCBhbnkgZXh0cmEgcGF0Y2hlcyBhbnl3YXkuICBB dXRvbWF0aWMgSlRBRyBzd2l0Y2hpbmcgaXMKPiB0dXJuZWQgb2ZmIGluICJkcml2ZXJzL3NvYy9y b2NrY2hpcC9ncmYuYyIuICAuLi5hbmQgYnkgZGVmYXVsdCB0aGUKPiBKVEFHIHNpZ25hbHMgYXJl IG11eGVkIGFzIHRoZSBTRCBDYXJkLiAgU28gcHJlc3VtYWJseSB5b3UndmUgYWxyZWFkeQo+IGdv dCBleHRyYSBwYXRjaGVzIGluIG9yZGVyIHRvIG1ha2UgSlRBRyB3b3JrLgo+IAo+IEkgYXNzdW1l IHRoYXQgdGhlIGNsb2NrcyB0aGF0IGFyZSBpbXBvcnRhbnQgZm9yIEpUQUcgYXJlICJhdGNsayIs Cj4gImp0YWciLCAicGNsa19kYmciLCBhbmQgInBjbGtfY29yZV9uaXUiLgoKSXNuJ3QgSlRBRyBw YXJ0IG9mIHRoZSBjb3Jlc2lnaHQgcGFja2FnZSBhbnl3YXk/IFRoZSB3aG9sZSBjb3Jlc2lnaHQK c3R1ZmYsIHNvIGluIGFuIHVwc3RyZWFtLWNvbnRleHQgSSdkIHNvbWVob3cgZXhwZWN0IGl0IHRv IGdldCBhY3RpdmF0ZWQKdGhyb3VnaCB0aGF0LiBPciBpcyBpdCBhY3R1YWxseSBzZXBhcmF0ZSBh bmQgb25seSBpbiB0aGUgZGVidWctZGlhZ3JhbQppbiB0aGUgVFJNIG1peGVkIGludG8gY29yZXNp Z2h0PwoKSW4gYW55IGNhc2UgSSdtIHdpdGggRG91ZyBoZXJlLCBmb3IganRhZyB5b3UgbmVlZCB0 byBtb2RpZnkgeW91ciBrZXJuZWwKYW55d2F5IGZvciBwaW5jdHJsIHNldHRpbmdzLCBzbyBjb3Vs ZCBhbHNvIGVuYWJsZSB0aGUgY2xvY2sgaW4gdGhhdCBjYXNlLgoKCj4gPiAgICAgICBDT01QT1NJ VEVfTk9ESVYoU0NMS19VU0JQSFk0ODBNX1NSQywgInVzYnBoeTQ4MG1fc3JjIiwgbXV4X3VzYnBo eTQ4MG1fcCwgMCwKPiA+IEBAIC02NTYsNyArNjU2LDcgQEAgc3RhdGljIHN0cnVjdCByb2NrY2hp cF9jbGtfYnJhbmNoIHJrMzI4OF9jbGtfYnJhbmNoZXNbXSBfX2luaXRkYXRhID0gewo+ID4gICAg ICAgQ09NUE9TSVRFX05PRElWKFNDTEtfSFNJQ1BIWTQ4ME0sICJzY2xrX2hzaWNwaHk0ODBtIiwg bXV4X2hzaWNwaHk0ODBtX3AsIDAsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgUkszMjg4X0NM S1NFTF9DT04oMjkpLCAwLCAyLCBNRkxBR1MsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgUksz Mjg4X0NMS0dBVEVfQ09OKDMpLCA2LCBHRkxBR1MpLAo+ID4gLSAgICAgR0FURSgwLCAiaHNpY3Bo eTEybV94aW4xMm0iLCAieGluMTJtIiwgQ0xLX0lHTk9SRV9VTlVTRUQsCj4gPiArICAgICBHQVRF KDAsICJoc2ljcGh5MTJtX3hpbjEybSIsICJ4aW4xMm0iLCAwLAo+ID4gICAgICAgICAgICAgICAg ICAgICAgIFJLMzI4OF9DTEtHQVRFX0NPTigxMyksIDksIEdGTEFHUyksCj4gPiAgICAgICBESVYo MCwgImhzaWNwaHkxMm1fdXNicGh5IiwgInNjbGtfaHNpY3BoeTQ4MG0iLCAwLAo+ID4gICAgICAg ICAgICAgICAgICAgICAgIFJLMzI4OF9DTEtTRUxfQ09OKDExKSwgOCwgNiwgREZMQUdTKSwKPiA+ IEBAIC04MzcsMTIgKzgzNyw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCByazMyODhfY3Jp dGljYWxfY2xvY2tzW10gX19pbml0Y29uc3QgPSB7Cj4gPiAgICAgICAicGNsa19hbGl2ZV9uaXUi LAo+ID4gICAgICAgInBjbGtfcGRfcG11IiwKPiA+ICAgICAgICJwY2xrX3BtdV9uaXUiLAo+ID4g LSAgICAgInBjbGtfY29yZV9uaXUiLAo+ID4gLSAgICAgInBjbGtfZGRydXBjdGwwIiwKPiA+IC0g ICAgICJwY2xrX3B1YmwwIiwKPiA+IC0gICAgICJwY2xrX2RkcnVwY3RsMSIsCj4gPiAtICAgICAi cGNsa19wdWJsMSIsCj4gPgo+ID4gVGhlc2UgY2xrcyBuZWVkZWQgZW5hYmxlLCBkZXZpY2Ugbm9k ZSBub3QgdXNlIHRoaXMgY2xrLCBzbyB3ZSBtYXJrIGl0IGFzCj4gPiBjcml0aWNhbC4KPiA+Cj4g PiBXaGF0IGJyZWFrcyBpZiB5b3UgZG9uJ3QgZW5hYmxlIHRoZXNlIGNsb2Nrcz8gIEFzIGZhciBh cyBJIGNhbiB0ZWxsCj4gPiB0aGVzZSBjbG9ja3Mgb25seSBuZWVkIHRvIGJlIGVuYWJsZWQgd2hp bGUgdG91Y2hpbmcgbWVtb3J5IGNvbnRyb2xsZXIKPiA+IHJlZ2lzdGVycyAoZGVlcCBzdXNwZW5k L3Jlc3VtZSBhbmQgRERSRnJlcSB0cmFuc2l0aW9ucykuICBPbgo+ID4gQ2hyb21lYm9va3MgZXZl cnl0aGluZyB3b3JrcyBmaW5lIHdpdGggdGhlc2UgY2xvY2tzIG9ubHkgdHVybmVkIG9uCj4gPiB3 aGVuIG5lZWRlZC4KPiA+Cj4gPiBJZiBuZWVkIHRvIGVuYWJsZSB0aGVzZSBjbGtzLCBkZHJ1cGN0 bDAvZGRydXBjdGwxL3B1YmwwL3B1YmwxIGNsa3Mgbm8gZHJpdmVyIHRvIGhhbmRsZSB0aGVtLCBz byBtYXJrIHRoZXNlIGNsayBhcyAgY3JpdGljYWwuCj4gCj4gUGVyaGFwcyBpdCdzIGp1c3QgYSB0 eXBvLCBidXQgeW91IHNheSAiSWYgbmVlZCB0byBlbmFibGUiLiAgSSBzZWUgbm8KPiBldmlkZW5j ZSB0aGF0IHRoZXNlIGNsb2NrcyBuZWVkIHRvIGJlIGVuYWJsZWQgdW5sZXNzIHRoZXJlIGlzIGNv ZGUKPiB0b3VjaGluZyBtZW1vcnkgY29udHJvbGxlciByZWdpc3RlcnMuICBUaHVzIHdlIGRvbid0 IG5lZWQgdG8gZW5hYmxlCj4gdGhlbSBzbyB0aGV5IGRvbid0IG5lZWQgdG8gYmUgY3JpdGljYWwu Cgp5ZXAgLi4uIG1heWJlIEVsYWluZSBjYW4gY2xhcmlmeSBpbiB3aGF0IG90aGVyIGFjdGl2aXRp ZXMgdGhlc2UgY2xvY2tzCmFyZSBuZWVkZWQgLi4uIEkgZ3Vlc3MgYW55IGRkci1zY2FsaW5nIGNv ZGUgd291bGQgYWN0aXZhdGUgdGhlbQpiZWZvcmUgdG91Y2hpbmcgbWVtb3J5LWNvbnRyb2xsZXIt cmVnaXN0ZXJzLgoKCj4gPiAtICAgICAicG11X2hjbGtfb3RnMCIsCj4gPgo+ID4gSXQncyBhIHNv YyBidWcsIHBtdV9oY2xrX290ZzAgbXVzdCBhbHdheXMgb24uCj4gPgo+ID4gU28geW91IHNhaWQg aW4geW91ciBwcmV2aW91cyBjb21taXQgbWVzc2FnZS4gIEhvd2V2ZXIgd2UndmUgc2hpcHBlZAo+ ID4gbG90cyBhbmQgbG90cyBvZiBDaHJvbWVib29rcyB3aXRoIHRoaXMgY2xvY2sgb2ZmLiAgQ2Fu IHlvdSBleHBsYWluCj4gPiB3aGF0IGlzIGJyb2tlbj8gIElzIHRoaXMgb25seSBuZWVkZWQgZm9y IGdhZGdldCBtb2RlICh3aGljaCB3ZSBkb24ndAo+ID4gdXNlKSwgZm9yIGluc3RhbmNlPwo+ID4K PiA+IHRlc3QgY2FzZToKPiA+Cj4gPiByZWNvdmVyeSB0ZXN0LCAgPCAxIGhvdXIgLCBzeXN0ZW0g Y3Jhc2guCj4gPgo+ID4gbG9nOgo+ID4KPiA+IFsgIDEyNy41Njk2MjldIElbMDogICAgICBzd2Fw cGVyLzA6ICAgIDBdIEdPVEdDVEwgICAgICAgIEAweEZGRkZGRjgwMDBCODAwMDAgOiAweDAwNDAw MDEwCj4gPiBbICAxMjcuNTY5NjQ0XSBJWzA6ICAgICAgc3dhcHBlci8wOiAgICAwXSBHT1RHSU5U ICAgICAgICBAMHhGRkZGRkY4MDAwQjgwMDA0IDogMHgwMDQwMDAxMAo+ID4gWyAgMTI3LjU2OTY1 OV0gSVswOiAgICAgIHN3YXBwZXIvMDogICAgMF0gR0FIQkNGRyAgICAgICAgQDB4RkZGRkZGODAw MEI4MDAwOCA6IDB4MDA0MDAwMTAKPiA+IFsgIDEyNy41Njk2NzNdIElbMDogICAgICBzd2FwcGVy LzA6ICAgIDBdIEdVU0JDRkcgICAgICAgIEAweEZGRkZGRjgwMDBCODAwMEMgOiAweDAwNDAwMDEw Cj4gPiBbICAxMjcuNTY5Njg4XSBJWzA6ICAgICAgc3dhcHBlci8wOiAgICAwXSBHUlNUQ1RMICAg ICAgICBAMHhGRkZGRkY4MDAwQjgwMDEwIDogMHgwMDQwMDAxMAo+ID4gWyAgMTI3LjU2OTcwMl0g SVswOiAgICAgIHN3YXBwZXIvMDogICAgMF0gR0lOVFNUUyAgICAgICAgQDB4RkZGRkZGODAwMEI4 MDAxNCA6IDB4MDA0MDAwMTAKPiA+IFsgIDEyNy41Njk3MThdIElbMDogICAgICBzd2FwcGVyLzA6 ICAgIDBdIEdJTlRNU0sgICAgICAgIEAweEZGRkZGRjgwMDBCODAwMTggOiAweDAwNDAwMDEwCj4g PiBbICAxMjcuNTY5NzMzXSBJWzA6ICAgICAgc3dhcHBlci8wOiAgICAwXSBHUlhTVFNSICAgICAg ICBAMHhGRkZGRkY4MDAwQjgwMDFDIDogMHgwMDQwMDAxMAo+ID4gWyAgMTI3LjU2OTc0OF0gSVsw OiAgICAgIHN3YXBwZXIvMDogICAgMF0gR1JYRlNJWiAgICAgICAgQDB4RkZGRkZGODAwMEI4MDAy NCA6IDB4MDA0MDAwMTAKPiAKPiBJIGRvbid0IGtub3cgd2hhdCBhICJyZWNvdmVyeSB0ZXN0IiBp cyBhbmQgSSBkb24ndCB1bmRlcnN0YW5kIHlvdXIgbG9ncy4KPiAKPiBDYW4geW91IGV4cGxhaW4g d2UgZG8gbm90IHJ1biBpbnRvIHRoaXMgb24gQ2hyb21lYm9va3M/Cj4gCj4gCj4gPiByZWFzb246 Cj4gPgo+ID4gVVNCIE9URyBjb250cm9sbGVyIHN1cHBvcnRzIHR1cm5pbmcgb2ZmIG1vc3QgbG9n aWMgcG93ZXIsIGFuZCB0aGVuIG9ubHkgb25lIFBNVSBtb2R1bGUgaXMgbGVmdC4gVGhpcyBjbG9j ayBjYW5ub3QgYmUgdHVybmVkIG9mZiwgd2hpY2ggaXMgc2ltaWxhciB0byB0aGUgYWx3YXlzIG9u IG1vZHVsZSBpbiBVU0IgT1RHLgo+IAo+IENhbid0IHlvdSBqdXN0IGFkZCBhIHBhdGNoIHRvIHRo ZSBkd2MyIGRyaXZlciB0byBoYXZlIGl0IGdyYWIgdGhpcwo+IGNsb2NrPyAgSSBhc3N1bWUgdGhp cyBjbG9jayBkb2Vzbid0IG5lZWQgdG8gYmUgdHVybmVkIG9uIHVubGVzcyB5b3UncmUKPiB1c2lu ZyB0aGUgT1RHIGNvbnRvbGxlciBpbiBhIGNlcnRhaW4gd2F5PwoKU28gZmFyIHdlIGRvbid0IHJl YWxseSBrbm93IHdoZXJlIHRoZSBjbG9jayBpbiBxdWVzdGlvbiBpcyBzaXR0aW5nCmluIHRoZSBj bG9jayBoaXJhcmNoeS4gRm9yIGV4YW1wbGUgdGhlIGtlcm5lbCBnb3QgYSBuZXcgaW50ZXJjb25u ZWN0CmZyYW1ld29yayByZWNlbnRseSwgc28gaGFuZGxpbmcgbm9uLWRldmljZSBjbG9ja3MgaW4g YSBkZXZpY2UgbWF5IGhhdW50CnVzIGxhdGVyIG9uLgoKQEVsYWluZTogY291bGQgeW91IGVsYWJv cmF0ZSB3aGF0IHBtdV9oY2xrX290ZzAgYWN0dWFsbHkgaXMgZm9yIHBsZWFzZT8KCgo+IE5PVEU6 IG5vd2hlcmUgaW4geW91ciByZXNwb25zZXMgZGlkIHlvdSB0YWxrIGFib3V0IHdoeQo+ICJoc2lj cGh5MTJtX3hpbjEybSIgbmVlZGVkIHRvIGJlIG1hcmtlZCBhcyBJR05PUkVfVU5VU0VELiAgSSBn dWVzcwo+IHlvdSdyZSBPSyB3aXRoIHJlbW92aW5nIHRoYXQ/CgoKVGhhbmtzCkhlaWtvCgoKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0t a2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2Vy bmVsCg==