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=-8.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, 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 28A00C433DB for ; Wed, 6 Jan 2021 15:10:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EA0432311A for ; Wed, 6 Jan 2021 15:10:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726298AbhAFPKm (ORCPT ); Wed, 6 Jan 2021 10:10:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35254 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726251AbhAFPKm (ORCPT ); Wed, 6 Jan 2021 10:10:42 -0500 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AAB21C06134C for ; Wed, 6 Jan 2021 07:10:01 -0800 (PST) Received: from gallifrey.ext.pengutronix.de ([2001:67c:670:201:5054:ff:fe8d:eefb] helo=[IPv6:::1]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kxARd-0003oM-Db; Wed, 06 Jan 2021 16:09:53 +0100 Message-ID: <51b607eb7691f2b631f5c809022f4361ec78256e.camel@pengutronix.de> Subject: Re: sdhci timeout on imx8mq From: Lucas Stach To: Bough Chen , Fabio Estevam , Angus Ainslie , Peng Fan , Abel Vesa , Stephen Boyd , Michael Turquette Cc: Ulf Hansson , Guido =?ISO-8859-1?Q?G=FCnther?= , linux-mmc , Adrian Hunter , dl-linux-imx , Sascha Hauer , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" Date: Wed, 06 Jan 2021 16:09:50 +0100 In-Reply-To: References: <20200205092653.GB2737@bogon.m.sigxcpu.org> <5ad361195f2e191484c8a231be0f5a07@akkea.ca> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.38.2 (3.38.2-1.fc33) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:201:5054:ff:fe8d:eefb X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-mmc@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org Hi Bough, Am Mittwoch, dem 06.01.2021 um 09:29 +0000 schrieb Bough Chen: > > -----Original Message----- > > From: Lucas Stach [mailto:l.stach@pengutronix.de] > > Sent: 2021年1月5日 23:07 > > To: Bough Chen ; Fabio Estevam > > ; Angus Ainslie ; Leonard > > Crestez > > ; Peng Fan ; Abel Vesa > > ; Stephen Boyd ; Michael > > Turquette > > > > Cc: Ulf Hansson ; Guido Günther < > > agx@sigxcpu.org>; > > linux-mmc ; Adrian Hunter > > ; dl-linux-imx ; Sascha > > Hauer > > ; moderated list:ARM/FREESCALE IMX / MXC ARM > > ARCHITECTURE > > Subject: Re: sdhci timeout on imx8mq > > > > Hi all, > > > > Am Mittwoch, dem 08.07.2020 um 01:32 +0000 schrieb BOUGH CHEN: > > > > -----Original Message----- > > > > From: Fabio Estevam [mailto:festevam@gmail.com] > > > > Sent: 2020年7月7日 20:45 > > > > To: Angus Ainslie > > > > Cc: BOUGH CHEN ; Ulf Hansson > > > > ; Guido Günther ; > > > > linux- > > > > mmc ; Adrian Hunter > > > > ; dl-linux-imx ; > > > > Sascha > > > > Hauer < kernel@pengutronix.de>; moderated list:ARM/FREESCALE > > > > IMX / > > > > MXC ARM ARCHITECTURE > > > > Subject: Re: sdhci timeout on imx8mq > > > > > > > > Hi Angus, > > > > > > > > On Tue, Jun 30, 2020 at 4:39 PM Angus Ainslie > > > > wrote: > > > > > > > > > Has there been any progress with this. I'm getting this on > > > > > about > > > > > 50% of > > > > > > > > Not from my side, sorry. > > > > > > > > Bough, > > > > > > > > Do you know why this problem affects the imx8mq-evk versions > > > > that > > > > are populated with the Micron eMMC and not the ones with > > > > Sandisk > > > > eMMC? > > > > > > Hi Angus, > > > > > > Can you show me the full fail log? I do not meet this issue on my > > > side, besides, which kind of uboot do you use? > > > > I was finally able to bisect this issue, which wasn't that much fun > > due to the > > issue not being reproducible 100%. :/ Turns out that the issue is > > even more > > interesting than I thought and likely doesn't have anything to do > > with SDHCI or > > used bootloader versions. Here's my current debugging state: > > > > I've bisected the issue down to b04383b6a558 (clk: imx8mq: Define > > gates for > > pll1/2 fixed dividers). The change itself looks fine to me, still > > CC'ed Leonard for > > good measure. > > > > In my testing the following partial revert fixes the issue: > > > > --- a/drivers/clk/imx/clk-imx8mq.c > > +++ b/drivers/clk/imx/clk-imx8mq.c > > @@ -365,7 +365,7 @@ static int imx8mq_clocks_probe(struct > > platform_device *pdev) > >         hws[IMX8MQ_SYS1_PLL_133M_CG] = > > imx_clk_hw_gate("sys1_pll_133m_cg", "sys1_pll_out", base + 0x30, 15); > >         hws[IMX8MQ_SYS1_PLL_160M_CG] = > > imx_clk_hw_gate("sys1_pll_160m_cg", "sys1_pll_out", base + 0x30, 17); > >         hws[IMX8MQ_SYS1_PLL_200M_CG] = > > imx_clk_hw_gate("sys1_pll_200m_cg", "sys1_pll_out", base + 0x30, 19); > > - hws[IMX8MQ_SYS1_PLL_266M_CG] = > > imx_clk_hw_gate("sys1_pll_266m_cg", "sys1_pll_out", base + 0x30, 21); > >         hws[IMX8MQ_SYS1_PLL_400M_CG] = > > imx_clk_hw_gate("sys1_pll_400m_cg", "sys1_pll_out", base + 0x30, 23); > >         hws[IMX8MQ_SYS1_PLL_800M_CG] = > > imx_clk_hw_gate("sys1_pll_800m_cg", "sys1_pll_out", base + 0x30, 25); > > > > @@ -375,7 +375,7 @@ static int imx8mq_clocks_probe(struct > > platform_device *pdev) > >         hws[IMX8MQ_SYS1_PLL_133M] = > > imx_clk_hw_fixed_factor("sys1_pll_133m", "sys1_pll_133m_cg", 1, 6); > >         hws[IMX8MQ_SYS1_PLL_160M] = > > imx_clk_hw_fixed_factor("sys1_pll_160m", "sys1_pll_160m_cg", 1, 5); > >         hws[IMX8MQ_SYS1_PLL_200M] = > > imx_clk_hw_fixed_factor("sys1_pll_200m", "sys1_pll_200m_cg", 1, 4); > > - hws[IMX8MQ_SYS1_PLL_266M] = > > imx_clk_hw_fixed_factor("sys1_pll_266m", "sys1_pll_266m_cg", 1, 3); > > + hws[IMX8MQ_SYS1_PLL_266M] = > > + imx_clk_hw_fixed_factor("sys1_pll_266m", "sys1_pll_out", 1, 3); > >         hws[IMX8MQ_SYS1_PLL_400M] = > > imx_clk_hw_fixed_factor("sys1_pll_400m", "sys1_pll_400m_cg", 1, 2); > >         hws[IMX8MQ_SYS1_PLL_800M] = > > imx_clk_hw_fixed_factor("sys1_pll_800m", "sys1_pll_800m_cg", 1, 1); > > > > The sys1_pll_266m is the parent of nand_usdhc_bus. I've validated > > that the > > SDHCI driver properly enables this bus clock across the problematic > > card access. > > So what I think is happening here is that both nand_usdhc_bus and > > sys1_pll_266m are initially enabled. Sometime during boot > > sys1_pll_266m gets > > disabled due to runtime PM on the enet_axi clock, which is a direct > > child of > > sys1_pll_266m. At this point nand_usdhc_bus is still enabled, but > > no consumer > > has claimed the clock yet, so the parent clock gets disabled while > > this branch of > > the clock tree is still active. > > Hi Lucas, > > According to the clock tree, if nand_usdhc_bus is still enabled, then > sys1_pll_266m has no chance to disable. This statement is only correct after the SDHCI driver is probed an has enabled nand_usdhc_bus. Before the driver probes the refcounts on the clocks are not synchronized, so sys1_pll_266m_cg can be disabled, while nand_usdhc_bus is enabled (from software running before Linux), even though no consumer is using nand_usdhc_bus, yet. >     sys1_pll_266m_cg 1 1 0 800000000 0 0 50000 Y >        sys1_pll_266m 1 1 0 266666666 0 0 50000 Y >           nand_usdhc_bus 0 0 0 266666666 0 0 50000 N >              nand_usdhc_rawnand_clk 0 0 0 266666666 0 0 50000 N >           enet_axi 1 1 0 266666666 0 0 50000 Y >              enet1_root_clk 2 2 0 266666666 0 0 50000 Y > > > This issue seems related with the following errta: > > e11232: USDHC: uSDHC setting requirement for IPG_CLK and AHB_BUS > clocks > Description: uSDHC AHB_BUS and IPG_CLK clocks must be synchronized. > Due to current physical design implementation, AHB_BUS and IPG_CLK > must come from > same clock source to maintain clock sync. > Workaround: Set AHB_BUS and IPG_CLK to clock source from PLL1. > > After sys1_pll_266m gate off/on, seems need to sync the USDHC AHB bus > and USDHC IPG_clk again. (Here usdhc AHB BUS source from > nand_usdhc_bus.) > This sync is handle by hardware, and maybe need some time, during > this sync period, usdhc operation may has issue. Where in HW is this synchronization done? If it's at the uSDHC controller side, I would expect this issue to show up even with the commit reverted, as nand_usdhc_bus gets gated due to runtime PM from the controller side. The only difference with the commit in question is that now the clock branch can be gated _before_ nand_usdhc_bus. If the synchronization is done somewhere in the clock tree than this might be an issue. > > I just double check our local v5.10 branch, already revert the commit > b04383b6a558 (clk: imx8mq: Define gates for pll1/2 fixed dividers). > So to fix this issue, one method is revert this patch, another method > is keep the 'nand_usdhc_bus' always on. Add change like this: > > diff --git a/drivers/clk/imx/clk-imx8mq.c b/drivers/clk/imx/clk-imx8mq.c > index 779ea69e639c..939806b36916 100644 > --- a/drivers/clk/imx/clk-imx8mq.c > +++ b/drivers/clk/imx/clk-imx8mq.c > @@ -433,7 +433,7 @@ static int imx8mq_clocks_probe(struct platform_device *pdev) >         /* BUS */ >         hws[IMX8MQ_CLK_MAIN_AXI] = imx8m_clk_hw_composite_bus_critical("main_axi", imx8mq_main_axi_sels, base + 0x8800); >         hws[IMX8MQ_CLK_ENET_AXI] = imx8m_clk_hw_composite_bus("enet_axi", imx8mq_enet_axi_sels, base + 0x8880); > - hws[IMX8MQ_CLK_NAND_USDHC_BUS] = imx8m_clk_hw_composite_bus("nand_usdhc_bus", imx8mq_nand_usdhc_sels, base + 0x8900); > + hws[IMX8MQ_CLK_NAND_USDHC_BUS] = imx8m_clk_hw_composite_bus_critical("nand_usdhc_bus", imx8mq_nand_usdhc_sels, base + 0x8900); >         hws[IMX8MQ_CLK_VPU_BUS] = imx8m_clk_hw_composite_bus("vpu_bus", imx8mq_vpu_bus_sels, base + 0x8980); >         hws[IMX8MQ_CLK_DISP_AXI] = imx8m_clk_hw_composite_bus("disp_axi", imx8mq_disp_axi_sels, base + 0x8a00); >         hws[IMX8MQ_CLK_DISP_APB] = imx8m_clk_hw_composite_bus("disp_apb", imx8mq_disp_apb_sels, base + 0x8a80); > > > What you think? Or any other suggestion? This is suboptimal, as it will not allow to gate the uSDHC controller AHB clock in runtime suspend. Also my testing shows that it's the gate _before_ the nand_usdhc_bus slice that's causing the issue. So my minimal fix from the previous mail would still be better, as it allows to gate the nand_usdhc_bus clock, while keeping sys1_pll_266m enabled. Regards, Lucas > 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=-9.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,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 3A95AC433E0 for ; Wed, 6 Jan 2021 15:11:26 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 D5D4522BF3 for ; Wed, 6 Jan 2021 15:11:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D5D4522BF3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de 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=merlin.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:Date:To:From: Subject:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=WitN0HXxIzI+7AMJCdnmkzkLM4ZWRM3zgKbSln9Lz/4=; b=HMolsHkVMkelmosx0qxXno429 RrTtcvkAkKr8+CjP1L8cBvRJxvDeDYFqTfYI1ERFrMIVClRy2EfBCyVX4jKvNUN54gA9mtpb8SK/H 2mKSOvp4zSu94PjqdxQQysQshJ/Jb/okwe12PEzcNQUT/dgJt9AvZraFsBHC437QY44/rEeqS1nRR jRI3txbXX+zmlsI+qElFf6zq6nYfjaPOh9A1ubM5l0pyxz2SgUruYGv114whQFnauja5b64wX08C7 ebi1dDdK8YIKBotiiG0byIHRKbBsXvNDb1AhQwyMsLl9bDTQlQDfjPIeJuTiUVPWYgf4hm3wgma1Q M/CRYVYsQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kxARu-0005r7-6j; Wed, 06 Jan 2021 15:10:10 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kxARq-0005oO-L2 for linux-arm-kernel@lists.infradead.org; Wed, 06 Jan 2021 15:10:08 +0000 Received: from gallifrey.ext.pengutronix.de ([2001:67c:670:201:5054:ff:fe8d:eefb] helo=[IPv6:::1]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kxARd-0003oM-Db; Wed, 06 Jan 2021 16:09:53 +0100 Message-ID: <51b607eb7691f2b631f5c809022f4361ec78256e.camel@pengutronix.de> Subject: Re: sdhci timeout on imx8mq From: Lucas Stach To: Bough Chen , Fabio Estevam , Angus Ainslie , Peng Fan , Abel Vesa , Stephen Boyd , Michael Turquette Date: Wed, 06 Jan 2021 16:09:50 +0100 In-Reply-To: References: <20200205092653.GB2737@bogon.m.sigxcpu.org> <5ad361195f2e191484c8a231be0f5a07@akkea.ca> User-Agent: Evolution 3.38.2 (3.38.2-1.fc33) MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:201:5054:ff:fe8d:eefb X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210106_101006_936816_8D27CC14 X-CRM114-Status: GOOD ( 44.26 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ulf Hansson , Guido =?ISO-8859-1?Q?G=FCnther?= , linux-mmc , Adrian Hunter , dl-linux-imx , Sascha Hauer , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" 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 SGkgQm91Z2gsCgpBbSBNaXR0d29jaCwgZGVtIDA2LjAxLjIwMjEgdW0gMDk6MjkgKzAwMDAgc2No cmllYiBCb3VnaCBDaGVuOgo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206 IEx1Y2FzIFN0YWNoIFttYWlsdG86bC5zdGFjaEBwZW5ndXRyb25peC5kZV0KPiA+IFNlbnQ6IDIw MjHlubQx5pyINeaXpSAyMzowNwo+ID4gVG86IEJvdWdoIENoZW4gPGhhaWJvLmNoZW5AbnhwLmNv bT47IEZhYmlvIEVzdGV2YW0KPiA+IDxmZXN0ZXZhbUBnbWFpbC5jb20+OyBBbmd1cyBBaW5zbGll IDxhbmd1c0Bha2tlYS5jYT47IExlb25hcmQKPiA+IENyZXN0ZXoKPiA+IDxsZW9uYXJkLmNyZXN0 ZXpAbnhwLmNvbT47IFBlbmcgRmFuIDxwZW5nLmZhbkBueHAuY29tPjsgQWJlbCBWZXNhCj4gPiA8 YWJlbC52ZXNhQG54cC5jb20+OyBTdGVwaGVuIEJveWQgPHNib3lkQGtlcm5lbC5vcmc+OyBNaWNo YWVsCj4gPiBUdXJxdWV0dGUKPiA+IDxtdHVycXVldHRlQGJheWxpYnJlLmNvbT4KPiA+IENjOiBV bGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz47IEd1aWRvIEfDvG50aGVyIDwKPiA+ IGFneEBzaWd4Y3B1Lm9yZz47Cj4gPiBsaW51eC1tbWMgPGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5v cmc+OyBBZHJpYW4gSHVudGVyCj4gPiA8YWRyaWFuLmh1bnRlckBpbnRlbC5jb20+OyBkbC1saW51 eC1pbXggPGxpbnV4LWlteEBueHAuY29tPjsgU2FzY2hhCj4gPiBIYXVlcgo+ID4gPGtlcm5lbEBw ZW5ndXRyb25peC5kZT47IG1vZGVyYXRlZCBsaXN0OkFSTS9GUkVFU0NBTEUgSU1YIC8gTVhDIEFS TQo+ID4gQVJDSElURUNUVVJFIDxsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc+ Cj4gPiBTdWJqZWN0OiBSZTogc2RoY2kgdGltZW91dCBvbiBpbXg4bXEKPiA+IAo+ID4gSGkgYWxs LAo+ID4gCj4gPiBBbSBNaXR0d29jaCwgZGVtIDA4LjA3LjIwMjAgdW0gMDE6MzIgKzAwMDAgc2No cmllYiBCT1VHSCBDSEVOOgo+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiA+ ID4gRnJvbTogRmFiaW8gRXN0ZXZhbSBbbWFpbHRvOmZlc3RldmFtQGdtYWlsLmNvbV0KPiA+ID4g PiBTZW50OiAyMDIw5bm0N+aciDfml6UgMjA6NDUKPiA+ID4gPiBUbzogQW5ndXMgQWluc2xpZSA8 YW5ndXNAYWtrZWEuY2E+Cj4gPiA+ID4gQ2M6IEJPVUdIIENIRU4gPGhhaWJvLmNoZW5AbnhwLmNv bT47IFVsZiBIYW5zc29uCj4gPiA+ID4gPHVsZi5oYW5zc29uQGxpbmFyby5vcmc+OyBHdWlkbyBH w7xudGhlciA8YWd4QHNpZ3hjcHUub3JnPjsKPiA+ID4gPiBsaW51eC0KPiA+ID4gPiBtbWMgPGxp bnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmc+OyBBZHJpYW4gSHVudGVyCj4gPiA+ID4gPGFkcmlhbi5o dW50ZXJAaW50ZWwuY29tPjsgZGwtbGludXgtaW14IDxsaW51eC1pbXhAbnhwLmNvbT47Cj4gPiA+ ID4gU2FzY2hhCj4gPiA+ID4gSGF1ZXIgPCBrZXJuZWxAcGVuZ3V0cm9uaXguZGU+OyBtb2RlcmF0 ZWQgbGlzdDpBUk0vRlJFRVNDQUxFCj4gPiA+ID4gSU1YIC8KPiA+ID4gPiBNWEMgQVJNIEFSQ0hJ VEVDVFVSRSA8bGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnPgo+ID4gPiA+IFN1 YmplY3Q6IFJlOiBzZGhjaSB0aW1lb3V0IG9uIGlteDhtcQo+ID4gPiA+IAo+ID4gPiA+IEhpIEFu Z3VzLAo+ID4gPiA+IAo+ID4gPiA+IE9uIFR1ZSwgSnVuIDMwLCAyMDIwIGF0IDQ6MzkgUE0gQW5n dXMgQWluc2xpZSA8YW5ndXNAYWtrZWEuY2E+Cj4gPiA+ID4gd3JvdGU6Cj4gPiA+ID4gCj4gPiA+ ID4gPiBIYXMgdGhlcmUgYmVlbiBhbnkgcHJvZ3Jlc3Mgd2l0aCB0aGlzLiBJJ20gZ2V0dGluZyB0 aGlzIG9uCj4gPiA+ID4gPiBhYm91dAo+ID4gPiA+ID4gNTAlIG9mCj4gPiA+ID4gCj4gPiA+ID4g Tm90IGZyb20gbXkgc2lkZSwgc29ycnkuCj4gPiA+ID4gCj4gPiA+ID4gQm91Z2gsCj4gPiA+ID4g Cj4gPiA+ID4gRG8geW91IGtub3cgd2h5IHRoaXMgcHJvYmxlbSBhZmZlY3RzIHRoZSBpbXg4bXEt ZXZrIHZlcnNpb25zCj4gPiA+ID4gdGhhdAo+ID4gPiA+IGFyZSBwb3B1bGF0ZWQgd2l0aCB0aGUg TWljcm9uIGVNTUMgYW5kIG5vdCB0aGUgb25lcyB3aXRoCj4gPiA+ID4gU2FuZGlzawo+ID4gPiA+ IGVNTUM/Cj4gPiA+IAo+ID4gPiBIaSBBbmd1cywKPiA+ID4gCj4gPiA+IENhbiB5b3Ugc2hvdyBt ZSB0aGUgZnVsbCBmYWlsIGxvZz8gSSBkbyBub3QgbWVldCB0aGlzIGlzc3VlIG9uIG15Cj4gPiA+ IHNpZGUsIGJlc2lkZXMsIHdoaWNoIGtpbmQgb2YgdWJvb3QgZG8geW91IHVzZT8KPiA+IAo+ID4g SSB3YXMgZmluYWxseSBhYmxlIHRvIGJpc2VjdCB0aGlzIGlzc3VlLCB3aGljaCB3YXNuJ3QgdGhh dCBtdWNoIGZ1bgo+ID4gZHVlIHRvIHRoZQo+ID4gaXNzdWUgbm90IGJlaW5nIHJlcHJvZHVjaWJs ZSAxMDAlLiA6LyBUdXJucyBvdXQgdGhhdCB0aGUgaXNzdWUgaXMKPiA+IGV2ZW4gbW9yZQo+ID4g aW50ZXJlc3RpbmcgdGhhbiBJIHRob3VnaHQgYW5kIGxpa2VseSBkb2Vzbid0IGhhdmUgYW55dGhp bmcgdG8gZG8KPiA+IHdpdGggU0RIQ0kgb3IKPiA+IHVzZWQgYm9vdGxvYWRlciB2ZXJzaW9ucy4g SGVyZSdzIG15IGN1cnJlbnQgZGVidWdnaW5nIHN0YXRlOgo+ID4gCj4gPiBJJ3ZlIGJpc2VjdGVk IHRoZSBpc3N1ZSBkb3duIHRvIGIwNDM4M2I2YTU1OCAoY2xrOiBpbXg4bXE6IERlZmluZQo+ID4g Z2F0ZXMgZm9yCj4gPiBwbGwxLzIgZml4ZWQgZGl2aWRlcnMpLiBUaGUgY2hhbmdlIGl0c2VsZiBs b29rcyBmaW5lIHRvIG1lLCBzdGlsbAo+ID4gQ0MnZWQgTGVvbmFyZCBmb3IKPiA+IGdvb2QgbWVh c3VyZS4KPiA+IAo+ID4gSW4gbXkgdGVzdGluZyB0aGUgZm9sbG93aW5nIHBhcnRpYWwgcmV2ZXJ0 IGZpeGVzIHRoZSBpc3N1ZToKPiA+IAo+ID4gLS0tIGEvZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4 bXEuYwo+ID4gKysrIGIvZHJpdmVycy9jbGsvaW14L2Nsay1pbXg4bXEuYwo+ID4gQEAgLTM2NSw3 ICszNjUsNyBAQCBzdGF0aWMgaW50IGlteDhtcV9jbG9ja3NfcHJvYmUoc3RydWN0Cj4gPiBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiDCoMKgwqDCoMKgwqDCoMKgaHdzW0lNWDhNUV9TWVMxX1BM TF8xMzNNX0NHXSA9Cj4gPiBpbXhfY2xrX2h3X2dhdGUoInN5czFfcGxsXzEzM21fY2ciLCAic3lz MV9wbGxfb3V0IiwgYmFzZSArIDB4MzAsIDE1KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBod3NbSU1Y OE1RX1NZUzFfUExMXzE2ME1fQ0ddID0KPiA+IGlteF9jbGtfaHdfZ2F0ZSgic3lzMV9wbGxfMTYw bV9jZyIsICJzeXMxX3BsbF9vdXQiLCBiYXNlICsgMHgzMCwgMTcpOwo+ID4gwqDCoMKgwqDCoMKg wqDCoGh3c1tJTVg4TVFfU1lTMV9QTExfMjAwTV9DR10gPQo+ID4gaW14X2Nsa19od19nYXRlKCJz eXMxX3BsbF8yMDBtX2NnIiwgInN5czFfcGxsX291dCIsIGJhc2UgKyAweDMwLCAxOSk7Cj4gPiAt ICAgICAgIGh3c1tJTVg4TVFfU1lTMV9QTExfMjY2TV9DR10gPQo+ID4gaW14X2Nsa19od19nYXRl KCJzeXMxX3BsbF8yNjZtX2NnIiwgInN5czFfcGxsX291dCIsIGJhc2UgKyAweDMwLCAyMSk7Cj4g PiDCoMKgwqDCoMKgwqDCoMKgaHdzW0lNWDhNUV9TWVMxX1BMTF80MDBNX0NHXSA9Cj4gPiBpbXhf Y2xrX2h3X2dhdGUoInN5czFfcGxsXzQwMG1fY2ciLCAic3lzMV9wbGxfb3V0IiwgYmFzZSArIDB4 MzAsIDIzKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBod3NbSU1YOE1RX1NZUzFfUExMXzgwME1fQ0dd ID0KPiA+IGlteF9jbGtfaHdfZ2F0ZSgic3lzMV9wbGxfODAwbV9jZyIsICJzeXMxX3BsbF9vdXQi LCBiYXNlICsgMHgzMCwgMjUpOwo+ID4gCj4gPiBAQCAtMzc1LDcgKzM3NSw3IEBAIHN0YXRpYyBp bnQgaW14OG1xX2Nsb2Nrc19wcm9iZShzdHJ1Y3QKPiA+IHBsYXRmb3JtX2RldmljZSAqcGRldikK PiA+IMKgwqDCoMKgwqDCoMKgwqBod3NbSU1YOE1RX1NZUzFfUExMXzEzM01dID0KPiA+IGlteF9j bGtfaHdfZml4ZWRfZmFjdG9yKCJzeXMxX3BsbF8xMzNtIiwgInN5czFfcGxsXzEzM21fY2ciLCAx LCA2KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBod3NbSU1YOE1RX1NZUzFfUExMXzE2ME1dID0KPiA+ IGlteF9jbGtfaHdfZml4ZWRfZmFjdG9yKCJzeXMxX3BsbF8xNjBtIiwgInN5czFfcGxsXzE2MG1f Y2ciLCAxLCA1KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBod3NbSU1YOE1RX1NZUzFfUExMXzIwME1d ID0KPiA+IGlteF9jbGtfaHdfZml4ZWRfZmFjdG9yKCJzeXMxX3BsbF8yMDBtIiwgInN5czFfcGxs XzIwMG1fY2ciLCAxLCA0KTsKPiA+IC0gICAgICAgaHdzW0lNWDhNUV9TWVMxX1BMTF8yNjZNXSA9 Cj4gPiBpbXhfY2xrX2h3X2ZpeGVkX2ZhY3Rvcigic3lzMV9wbGxfMjY2bSIsICJzeXMxX3BsbF8y NjZtX2NnIiwgMSwgMyk7Cj4gPiArICAgICAgIGh3c1tJTVg4TVFfU1lTMV9QTExfMjY2TV0gPQo+ ID4gKyBpbXhfY2xrX2h3X2ZpeGVkX2ZhY3Rvcigic3lzMV9wbGxfMjY2bSIsICJzeXMxX3BsbF9v dXQiLCAxLCAzKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBod3NbSU1YOE1RX1NZUzFfUExMXzQwME1d ID0KPiA+IGlteF9jbGtfaHdfZml4ZWRfZmFjdG9yKCJzeXMxX3BsbF80MDBtIiwgInN5czFfcGxs XzQwMG1fY2ciLCAxLCAyKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqBod3NbSU1YOE1RX1NZUzFfUExM XzgwME1dID0KPiA+IGlteF9jbGtfaHdfZml4ZWRfZmFjdG9yKCJzeXMxX3BsbF84MDBtIiwgInN5 czFfcGxsXzgwMG1fY2ciLCAxLCAxKTsKPiA+IAo+ID4gVGhlIHN5czFfcGxsXzI2Nm0gaXMgdGhl IHBhcmVudCBvZiBuYW5kX3VzZGhjX2J1cy4gSSd2ZSB2YWxpZGF0ZWQKPiA+IHRoYXQgdGhlCj4g PiBTREhDSSBkcml2ZXIgcHJvcGVybHkgZW5hYmxlcyB0aGlzIGJ1cyBjbG9jayBhY3Jvc3MgdGhl IHByb2JsZW1hdGljCj4gPiBjYXJkIGFjY2Vzcy4KPiA+IFNvIHdoYXQgSSB0aGluayBpcyBoYXBw ZW5pbmcgaGVyZSBpcyB0aGF0IGJvdGggbmFuZF91c2RoY19idXMgYW5kCj4gPiBzeXMxX3BsbF8y NjZtIGFyZSBpbml0aWFsbHkgZW5hYmxlZC4gU29tZXRpbWUgZHVyaW5nIGJvb3QKPiA+IHN5czFf cGxsXzI2Nm0gZ2V0cwo+ID4gZGlzYWJsZWQgZHVlIHRvIHJ1bnRpbWUgUE0gb24gdGhlIGVuZXRf YXhpIGNsb2NrLCB3aGljaCBpcyBhIGRpcmVjdAo+ID4gY2hpbGQgb2YKPiA+IHN5czFfcGxsXzI2 Nm0uIEF0IHRoaXMgcG9pbnQgbmFuZF91c2RoY19idXMgaXMgc3RpbGwgZW5hYmxlZCwgYnV0Cj4g PiBubyBjb25zdW1lcgo+ID4gaGFzIGNsYWltZWQgdGhlIGNsb2NrIHlldCwgc28gdGhlIHBhcmVu dCBjbG9jayBnZXRzIGRpc2FibGVkIHdoaWxlCj4gPiB0aGlzIGJyYW5jaCBvZgo+ID4gdGhlIGNs b2NrIHRyZWUgaXMgc3RpbGwgYWN0aXZlLgo+IAo+IEhpIEx1Y2FzLAo+IAo+IEFjY29yZGluZyB0 byB0aGUgY2xvY2sgdHJlZSwgaWYgbmFuZF91c2RoY19idXMgaXMgc3RpbGwgZW5hYmxlZCwgdGhl bgo+IHN5czFfcGxsXzI2Nm0gaGFzIG5vIGNoYW5jZSB0byBkaXNhYmxlLgoKVGhpcyBzdGF0ZW1l bnQgaXMgb25seSBjb3JyZWN0IGFmdGVyIHRoZSBTREhDSSBkcml2ZXIgaXMgcHJvYmVkIGFuIGhh cwplbmFibGVkIG5hbmRfdXNkaGNfYnVzLiBCZWZvcmUgdGhlIGRyaXZlciBwcm9iZXMgdGhlIHJl ZmNvdW50cyBvbiB0aGUKY2xvY2tzIGFyZSBub3Qgc3luY2hyb25pemVkLCBzbyBzeXMxX3BsbF8y NjZtX2NnIGNhbiBiZSBkaXNhYmxlZCwgd2hpbGUKbmFuZF91c2RoY19idXMgaXMgZW5hYmxlZCAo ZnJvbSBzb2Z0d2FyZSBydW5uaW5nIGJlZm9yZSBMaW51eCksIGV2ZW4KdGhvdWdoIG5vIGNvbnN1 bWVyIGlzIHVzaW5nIG5hbmRfdXNkaGNfYnVzLCB5ZXQuCgo+IMKgwqDCoMKgc3lzMV9wbGxfMjY2 bV9jZyAgICAgICAgICAgICAgICAgIDEgICAgICAgIDEgICAgICAgIDAgICA4MDAwMDAwMDAgICAg ICAgICAgMCAgICAgMCAgNTAwMDAgICAgICAgICBZCj4gwqDCoMKgwqDCoMKgwqBzeXMxX3BsbF8y NjZtICAgICAgICAgICAgICAgICAgMSAgICAgICAgMSAgICAgICAgMCAgIDI2NjY2NjY2NiAgICAg ICAgICAwICAgICAwICA1MDAwMCAgICAgICAgIFkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoG5hbmRf dXNkaGNfYnVzICAgICAgICAgICAgICAwICAgICAgICAwICAgICAgICAwICAgMjY2NjY2NjY2ICAg ICAgICAgIDAgICAgIDAgIDUwMDAwICAgICAgICAgTgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgbmFuZF91c2RoY19yYXduYW5kX2NsayAgICAgICAwICAgICAgICAwICAgICAgICAwICAgMjY2 NjY2NjY2ICAgICAgICAgIDAgICAgIDAgIDUwMDAwICAgICAgICAgTgo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgZW5ldF9heGkgICAgICAgICAgICAgICAgICAgIDEgICAgICAgIDEgICAgICAgIDAgICAy NjY2NjY2NjYgICAgICAgICAgMCAgICAgMCAgNTAwMDAgICAgICAgICBZCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBlbmV0MV9yb290X2NsayAgICAgICAgICAgMiAgICAgICAgMiAgICAgICAg MCAgIDI2NjY2NjY2NiAgICAgICAgICAwICAgICAwICA1MDAwMCAgICAgICAgIFkKPiAKPiAKPiBU aGlzIGlzc3VlIHNlZW1zIHJlbGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGVycnRhOgo+IAo+IGUx MTIzMjogVVNESEM6IHVTREhDIHNldHRpbmcgcmVxdWlyZW1lbnQgZm9yIElQR19DTEsgYW5kIEFI Ql9CVVMKPiBjbG9ja3MKPiBEZXNjcmlwdGlvbjogdVNESEMgQUhCX0JVUyBhbmQgSVBHX0NMSyBj bG9ja3MgbXVzdCBiZSBzeW5jaHJvbml6ZWQuCj4gRHVlIHRvIGN1cnJlbnQgcGh5c2ljYWwgZGVz aWduIGltcGxlbWVudGF0aW9uLCBBSEJfQlVTIGFuZCBJUEdfQ0xLCj4gbXVzdCBjb21lIGZyb20K PiBzYW1lIGNsb2NrIHNvdXJjZSB0byBtYWludGFpbiBjbG9jayBzeW5jLgo+IFdvcmthcm91bmQ6 IFNldCBBSEJfQlVTIGFuZCBJUEdfQ0xLIHRvIGNsb2NrIHNvdXJjZSBmcm9tIFBMTDEuCj4gCj4g QWZ0ZXIgc3lzMV9wbGxfMjY2bSBnYXRlIG9mZi9vbiwgc2VlbXMgbmVlZCB0byBzeW5jIHRoZSBV U0RIQyBBSEIgYnVzCj4gYW5kIFVTREhDIElQR19jbGsgYWdhaW4uIChIZXJlIHVzZGhjIEFIQiBC VVMgc291cmNlIGZyb20KPiBuYW5kX3VzZGhjX2J1cy4pCj4gVGhpcyBzeW5jIGlzIGhhbmRsZSBi eSBoYXJkd2FyZSwgYW5kIG1heWJlIG5lZWQgc29tZSB0aW1lLCBkdXJpbmcKPiB0aGlzIHN5bmMg cGVyaW9kLCB1c2RoYyBvcGVyYXRpb24gbWF5IGhhcyBpc3N1ZS4KCldoZXJlIGluIEhXIGlzIHRo aXMgc3luY2hyb25pemF0aW9uIGRvbmU/IElmIGl0J3MgYXQgdGhlIHVTREhDCmNvbnRyb2xsZXIg c2lkZSwgSSB3b3VsZCBleHBlY3QgdGhpcyBpc3N1ZSB0byBzaG93IHVwIGV2ZW4gd2l0aCB0aGUK Y29tbWl0IHJldmVydGVkLCBhcyBuYW5kX3VzZGhjX2J1cyBnZXRzIGdhdGVkIGR1ZSB0byBydW50 aW1lIFBNIGZyb20KdGhlIGNvbnRyb2xsZXIgc2lkZS4gVGhlIG9ubHkgZGlmZmVyZW5jZSB3aXRo IHRoZSBjb21taXQgaW4gcXVlc3Rpb24gaXMKdGhhdCBub3cgdGhlIGNsb2NrIGJyYW5jaCBjYW4g YmUgZ2F0ZWQgX2JlZm9yZV8gbmFuZF91c2RoY19idXMuIElmIHRoZQpzeW5jaHJvbml6YXRpb24g aXMgZG9uZSBzb21ld2hlcmUgaW4gdGhlIGNsb2NrIHRyZWUgdGhhbiB0aGlzIG1pZ2h0IGJlCmFu IGlzc3VlLgoKPiAKPiBJIGp1c3QgZG91YmxlIGNoZWNrIG91ciBsb2NhbCB2NS4xMCBicmFuY2gs IGFscmVhZHkgcmV2ZXJ0IHRoZSBjb21taXQKPiBiMDQzODNiNmE1NTggKGNsazogaW14OG1xOiBE ZWZpbmUgZ2F0ZXMgZm9yIHBsbDEvMiBmaXhlZCBkaXZpZGVycykuCj4gU28gdG8gZml4IHRoaXMg aXNzdWUsIG9uZSBtZXRob2QgaXMgcmV2ZXJ0IHRoaXMgcGF0Y2gsIGFub3RoZXIgbWV0aG9kCj4g aXMga2VlcCB0aGUgJ25hbmRfdXNkaGNfYnVzJyBhbHdheXMgb24uIEFkZCBjaGFuZ2UgbGlrZSB0 aGlzOgo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9pbXgvY2xrLWlteDhtcS5jIGIvZHJp dmVycy9jbGsvaW14L2Nsay1pbXg4bXEuYwo+IGluZGV4IDc3OWVhNjllNjM5Yy4uOTM5ODA2YjM2 OTE2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvY2xrL2lteC9jbGstaW14OG1xLmMKPiArKysgYi9k cml2ZXJzL2Nsay9pbXgvY2xrLWlteDhtcS5jCj4gQEAgLTQzMyw3ICs0MzMsNyBAQCBzdGF0aWMg aW50IGlteDhtcV9jbG9ja3NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiDC oMKgwqDCoMKgwqDCoMKgLyogQlVTICovCj4gwqDCoMKgwqDCoMKgwqDCoGh3c1tJTVg4TVFfQ0xL X01BSU5fQVhJXSA9IGlteDhtX2Nsa19od19jb21wb3NpdGVfYnVzX2NyaXRpY2FsKCJtYWluX2F4 aSIsIGlteDhtcV9tYWluX2F4aV9zZWxzLCBiYXNlICsgMHg4ODAwKTsKPiDCoMKgwqDCoMKgwqDC oMKgaHdzW0lNWDhNUV9DTEtfRU5FVF9BWEldID0gaW14OG1fY2xrX2h3X2NvbXBvc2l0ZV9idXMo ImVuZXRfYXhpIiwgaW14OG1xX2VuZXRfYXhpX3NlbHMsIGJhc2UgKyAweDg4ODApOwo+IC0gICAg ICAgaHdzW0lNWDhNUV9DTEtfTkFORF9VU0RIQ19CVVNdID0gaW14OG1fY2xrX2h3X2NvbXBvc2l0 ZV9idXMoIm5hbmRfdXNkaGNfYnVzIiwgaW14OG1xX25hbmRfdXNkaGNfc2VscywgYmFzZSArIDB4 ODkwMCk7Cj4gKyAgICAgICBod3NbSU1YOE1RX0NMS19OQU5EX1VTREhDX0JVU10gPSBpbXg4bV9j bGtfaHdfY29tcG9zaXRlX2J1c19jcml0aWNhbCgibmFuZF91c2RoY19idXMiLCBpbXg4bXFfbmFu ZF91c2RoY19zZWxzLCBiYXNlICsgMHg4OTAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgaHdzW0lNWDhN UV9DTEtfVlBVX0JVU10gPSBpbXg4bV9jbGtfaHdfY29tcG9zaXRlX2J1cygidnB1X2J1cyIsIGlt eDhtcV92cHVfYnVzX3NlbHMsIGJhc2UgKyAweDg5ODApOwo+IMKgwqDCoMKgwqDCoMKgwqBod3Nb SU1YOE1RX0NMS19ESVNQX0FYSV0gPSBpbXg4bV9jbGtfaHdfY29tcG9zaXRlX2J1cygiZGlzcF9h eGkiLCBpbXg4bXFfZGlzcF9heGlfc2VscywgYmFzZSArIDB4OGEwMCk7Cj4gwqDCoMKgwqDCoMKg wqDCoGh3c1tJTVg4TVFfQ0xLX0RJU1BfQVBCXSA9IGlteDhtX2Nsa19od19jb21wb3NpdGVfYnVz KCJkaXNwX2FwYiIsIGlteDhtcV9kaXNwX2FwYl9zZWxzLCBiYXNlICsgMHg4YTgwKTsKPiAKPiAK PiBXaGF0IHlvdSB0aGluaz8gT3IgYW55IG90aGVyIHN1Z2dlc3Rpb24/CgpUaGlzIGlzIHN1Ym9w dGltYWwsIGFzIGl0IHdpbGwgbm90IGFsbG93IHRvIGdhdGUgdGhlIHVTREhDIGNvbnRyb2xsZXIK QUhCIGNsb2NrIGluIHJ1bnRpbWUgc3VzcGVuZC4gQWxzbyBteSB0ZXN0aW5nIHNob3dzIHRoYXQg aXQncyB0aGUgZ2F0ZQpfYmVmb3JlXyB0aGUgbmFuZF91c2RoY19idXMgc2xpY2UgdGhhdCdzIGNh dXNpbmcgdGhlIGlzc3VlLiBTbyBteQptaW5pbWFsIGZpeCBmcm9tIHRoZSBwcmV2aW91cyBtYWls IHdvdWxkIHN0aWxsIGJlIGJldHRlciwgYXMgaXQgYWxsb3dzCnRvIGdhdGUgdGhlIG5hbmRfdXNk aGNfYnVzIGNsb2NrLCB3aGlsZSBrZWVwaW5nIHN5czFfcGxsXzI2Nm0gZW5hYmxlZC4KClJlZ2Fy ZHMsCkx1Y2FzCj4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtYXJtLWtlcm5lbAo=