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=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 4C97FC433B4 for ; Tue, 11 May 2021 08:19:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0E9EA616EA for ; Tue, 11 May 2021 08:19:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230347AbhEKIUJ (ORCPT ); Tue, 11 May 2021 04:20:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49382 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230157AbhEKIUG (ORCPT ); Tue, 11 May 2021 04:20:06 -0400 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 BD207C061574 for ; Tue, 11 May 2021 01:19:00 -0700 (PDT) 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 1lgNbR-0002sT-6E; Tue, 11 May 2021 10:18:53 +0200 Message-ID: <8b7ab5139fea41caf15b398ec975ed71229dfd5d.camel@pengutronix.de> Subject: Re: [PATCH v2 2/3] mmc: sdhci-esdhc-imx: advertise HS400 mode through MMC caps From: Lucas Stach To: Bough Chen , Ulf Hansson , Adrian Hunter Cc: Rob Herring , dl-linux-imx , "kernel@pengutronix.de" , "linux-mmc@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Date: Tue, 11 May 2021 10:18:47 +0200 In-Reply-To: References: <20210510190400.105162-1-l.stach@pengutronix.de> <20210510190400.105162-2-l.stach@pengutronix.de> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.40.1 (3.40.1-1.fc34) 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: devicetree@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Am Dienstag, dem 11.05.2021 um 03:00 +0000 schrieb Bough Chen: > > -----Original Message----- > > From: Lucas Stach [mailto:l.stach@pengutronix.de] > > Sent: 2021年5月11日 3:04 > > To: Ulf Hansson ; Adrian Hunter > > ; Bough Chen > > Cc: Rob Herring ; dl-linux-imx ; > > kernel@pengutronix.de; linux-mmc@vger.kernel.org; > > devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org > > Subject: [PATCH v2 2/3] mmc: sdhci-esdhc-imx: advertise HS400 mode through > > MMC caps > > > > Instead of having an indirection through the SDHCI layer and emulating a > > capability bit, that isn't there in hardware, do the same same thing as > with > > HS400_ES and advertise the support for HS400 directly through the MMC > caps. > > > > Signed-off-by: Lucas Stach > > --- > >  drivers/mmc/host/sdhci-esdhc-imx.c | 5 +---- > >  1 file changed, 1 insertion(+), 4 deletions(-) > > > > diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c > > b/drivers/mmc/host/sdhci-esdhc-imx.c > > index a20459744d21..65a52586db36 100644 > > --- a/drivers/mmc/host/sdhci-esdhc-imx.c > > +++ b/drivers/mmc/host/sdhci-esdhc-imx.c > > @@ -427,9 +427,6 @@ static u32 esdhc_readl_le(struct sdhci_host *host, int > > reg) > >   | > FIELD_PREP(SDHCI_RETUNING_MODE_MASK, > >   SDHCI_TUNING_MODE_3); > > > > - if (imx_data->socdata->flags & ESDHC_FLAG_HS400) > > - val |= SDHCI_SUPPORT_HS400; > > - > >   /* > >   * Do not advertise faster UHS modes if there are no > >   * pinctrl states for 100MHz/200MHz. > > @@ -1603,7 +1600,7 @@ static int sdhci_esdhc_imx_probe(struct > > platform_device *pdev) > >   host->quirks |= SDHCI_QUIRK_BROKEN_ADMA; > > > >   if (imx_data->socdata->flags & ESDHC_FLAG_HS400) > > - host->quirks2 |= SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400; > > + host->mmc->caps2 |= MMC_CAP2_HS400; > > Hi Lucas, > > I think patch1 and patch 2 are enough to cover your requirement. > For this patch, I think it's unnecessary, sdhci-esdhc-imx.c need to reuse > sdhci.c as much as possible. > In sdhci.c, already contain the following logic. > >          if (host->quirks2 & SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 && >              (host->caps1 & SDHCI_SUPPORT_HS400)) >                  mmc->caps2 |= MMC_CAP2_HS400; > > The reason why we directly use host->mmc->caps2 for HS400ES mode is that > sdhci.c do not contain the similar logic. No, it's not enough. We call mmc_of_parse(), which clears the HS400 flags, before sdhci_setup_host() is called, which will then add the HS400 flags again. So either I still need to evaluate the DT property in the esdhc driver to make it return the right emulated SDHCI caps bit for the HS400 case, or do it like in this patch. While the way it is done here is a bit of a layering violation between SDHCI and MMC, it still feels like the cleaner and more straight forward solution. 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=-14.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, 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 C1738C433B4 for ; Tue, 11 May 2021 12:11:52 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 18DE760C3D for ; Tue, 11 May 2021 12:11:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 18DE760C3D 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=desiato.20200630; 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:Date:Cc: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=ELGvQnK2vu8M3augkQXFNIT61WOSnyEARGiQ3/to42s=; b=V1LDFtE/gIaPJci5i6Co29E0f hvMJKA0rRAnDvL4D9xJgVbznVG2CALoHtqb6hMuE1MZDXe6XpGNSTfPknyOUo/zhvM2x9h9LboUKf f+4mOYKsX73z3l+QQEL6m6glfMdxJo3aXhdcCwzIsDESsd2/5jq+xoMjcmMEkRG8fYWXj5XrFtsBx 6K7tKeo61p5XUODoDEZ9IYdYNzOVmuEEkIbIy7x0CgFvPFKgyI5EXa7gmkjgEGyCw8LKiBEVku+yM sPbDaWMe0lcicW0nNc0ZRrPw4EWGOl1z9MT2pvMQRZQGNhXhtVgw+tQo7KPoaskChka+TQ0ehe3qm KS8RvRl2w==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lgRDd-00HIyq-SG; Tue, 11 May 2021 12:10:34 +0000 Received: from [2607:7c80:54:e::133] (helo=bombadil.infradead.org) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lgNbc-00Ga6A-FQ for linux-arm-kernel@desiato.infradead.org; Tue, 11 May 2021 08:19:06 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:Content-Type:References:In-Reply-To:Date:Cc:To:From:Subject: Message-ID:Sender:Reply-To:Content-ID:Content-Description; bh=kNIniUeqqb7SO6ERb1rVbgcHi+jVs2r/8qVDwZ/9wDo=; b=TI/s0UsS9OD9gTya5pC+KIVc7V LBx/oibHrnW4XKzkMutmsfDzYwmLlthIgeG5owejDJ6zq43k6wiFpmjxUoMqaMR9hRfGX4Wh0lSAz T7+4EJ6AtE6lslMb4nXYdP0Fs/x7WEbLX2HHLwkNDQh9wNqWtFM2k2P7uHcWHLse+UrNNSm3TZDpo lD44s1wAWaICUJtm5UD8pbMrNtYZfXJvIf2+4X10ZMWuDAExGb8/62xB37SKFviph7ADxA0TQ84Jk 4Oim9t6c2Bl19lpcJfOwR7anHC0fJ5T7AvnPCgTkWVvOoPBOhXUEi+ScvQiFuZlOnrL3+bIIX5/4D fGe7/F/A==; Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lgNbZ-009OHI-St for linux-arm-kernel@lists.infradead.org; Tue, 11 May 2021 08:19:03 +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 1lgNbR-0002sT-6E; Tue, 11 May 2021 10:18:53 +0200 Message-ID: <8b7ab5139fea41caf15b398ec975ed71229dfd5d.camel@pengutronix.de> Subject: Re: [PATCH v2 2/3] mmc: sdhci-esdhc-imx: advertise HS400 mode through MMC caps From: Lucas Stach To: Bough Chen , Ulf Hansson , Adrian Hunter Cc: Rob Herring , dl-linux-imx , "kernel@pengutronix.de" , "linux-mmc@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Date: Tue, 11 May 2021 10:18:47 +0200 In-Reply-To: References: <20210510190400.105162-1-l.stach@pengutronix.de> <20210510190400.105162-2-l.stach@pengutronix.de> User-Agent: Evolution 3.40.1 (3.40.1-1.fc34) 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-20210511_011901_952742_3C2F0457 X-CRM114-Status: GOOD ( 27.17 ) /bin/ln: failed to access 'reaver_cache/texts/20210511_011901_952742_3C2F0457': No such file or directory X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210511_011901_952742_3C2F0457 X-CRM114-Status: GOOD ( 23.99 ) 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 QW0gRGllbnN0YWcsIGRlbSAxMS4wNS4yMDIxIHVtIDAzOjAwICswMDAwIHNjaHJpZWIgQm91Z2gg Q2hlbjoKPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiBGcm9tOiBMdWNhcyBTdGFj aCBbbWFpbHRvOmwuc3RhY2hAcGVuZ3V0cm9uaXguZGVdCj4gPiBTZW50OiAyMDIx5bm0NeaciDEx 5pelIDM6MDQKPiA+IFRvOiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz47IEFk cmlhbiBIdW50ZXIKPiA+IDxhZHJpYW4uaHVudGVyQGludGVsLmNvbT47IEJvdWdoIENoZW4gPGhh aWJvLmNoZW5AbnhwLmNvbT4KPiA+IENjOiBSb2IgSGVycmluZyA8cm9iaCtkdEBrZXJuZWwub3Jn PjsgZGwtbGludXgtaW14IDxsaW51eC1pbXhAbnhwLmNvbT47Cj4gPiBrZXJuZWxAcGVuZ3V0cm9u aXguZGU7IGxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmc7Cj4gPiBkZXZpY2V0cmVlQHZnZXIua2Vy bmVsLm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gPiBTdWJqZWN0 OiBbUEFUQ0ggdjIgMi8zXSBtbWM6IHNkaGNpLWVzZGhjLWlteDogYWR2ZXJ0aXNlIEhTNDAwIG1v ZGUgdGhyb3VnaAo+ID4gTU1DIGNhcHMKPiA+IAo+ID4gSW5zdGVhZCBvZiBoYXZpbmcgYW4gaW5k aXJlY3Rpb24gdGhyb3VnaCB0aGUgU0RIQ0kgbGF5ZXIgYW5kIGVtdWxhdGluZyBhCj4gPiBjYXBh YmlsaXR5IGJpdCwgdGhhdCBpc24ndCB0aGVyZSBpbiBoYXJkd2FyZSwgZG8gdGhlIHNhbWUgc2Ft ZSB0aGluZyBhcwo+IHdpdGgKPiA+IEhTNDAwX0VTIGFuZCBhZHZlcnRpc2UgdGhlIHN1cHBvcnQg Zm9yIEhTNDAwIGRpcmVjdGx5IHRocm91Z2ggdGhlIE1NQwo+IGNhcHMuCj4gPiAKPiA+IFNpZ25l ZC1vZmYtYnk6IEx1Y2FzIFN0YWNoIDxsLnN0YWNoQHBlbmd1dHJvbml4LmRlPgo+ID4gLS0tCj4g PiDCoGRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMgfCA1ICstLS0tCj4gPiDCoDEg ZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNCBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMKPiA+IGIvZHJpdmVy cy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYwo+ID4gaW5kZXggYTIwNDU5NzQ0ZDIxLi42NWE1 MjU4NmRiMzYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLWlt eC5jCj4gPiArKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLWlteC5jCj4gPiBAQCAt NDI3LDkgKzQyNyw2IEBAIHN0YXRpYyB1MzIgZXNkaGNfcmVhZGxfbGUoc3RydWN0IHNkaGNpX2hv c3QgKmhvc3QsIGludAo+ID4gcmVnKQo+ID4gwqAJCQkJCXwKPiBGSUVMRF9QUkVQKFNESENJX1JF VFVOSU5HX01PREVfTUFTSywKPiA+IMKgCQkJCQkJICAgICBTREhDSV9UVU5JTkdfTU9ERV8zKTsK PiA+IAo+ID4gLQkJCWlmIChpbXhfZGF0YS0+c29jZGF0YS0+ZmxhZ3MgJiBFU0RIQ19GTEFHX0hT NDAwKQo+ID4gLQkJCQl2YWwgfD0gU0RIQ0lfU1VQUE9SVF9IUzQwMDsKPiA+IC0KPiA+IMKgCQkJ LyoKPiA+IMKgCQkJICogRG8gbm90IGFkdmVydGlzZSBmYXN0ZXIgVUhTIG1vZGVzIGlmIHRoZXJl IGFyZSBubwo+ID4gwqAJCQkgKiBwaW5jdHJsIHN0YXRlcyBmb3IgMTAwTUh6LzIwME1Iei4KPiA+ IEBAIC0xNjAzLDcgKzE2MDAsNyBAQCBzdGF0aWMgaW50IHNkaGNpX2VzZGhjX2lteF9wcm9iZShz dHJ1Y3QKPiA+IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+IMKgCQlob3N0LT5xdWlya3MgfD0g U0RIQ0lfUVVJUktfQlJPS0VOX0FETUE7Cj4gPiAKPiA+IMKgCWlmIChpbXhfZGF0YS0+c29jZGF0 YS0+ZmxhZ3MgJiBFU0RIQ19GTEFHX0hTNDAwKQo+ID4gLQkJaG9zdC0+cXVpcmtzMiB8PSBTREhD SV9RVUlSSzJfQ0FQU19CSVQ2M19GT1JfSFM0MDA7Cj4gPiArCQlob3N0LT5tbWMtPmNhcHMyIHw9 IE1NQ19DQVAyX0hTNDAwOwo+IAo+IEhpIEx1Y2FzLAo+IAo+IEkgdGhpbmsgcGF0Y2gxIGFuZCBw YXRjaCAyIGFyZSBlbm91Z2ggdG8gY292ZXIgeW91ciByZXF1aXJlbWVudC4KPiBGb3IgdGhpcyBw YXRjaCwgSSB0aGluayBpdCdzIHVubmVjZXNzYXJ5LCBzZGhjaS1lc2RoYy1pbXguYyBuZWVkIHRv IHJldXNlCj4gc2RoY2kuYyBhcyBtdWNoIGFzIHBvc3NpYmxlLgo+IEluIHNkaGNpLmMsIGFscmVh ZHkgY29udGFpbiB0aGUgZm9sbG93aW5nIGxvZ2ljLiAKPiAKPiDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoaG9zdC0+cXVpcmtzMiAmIFNESENJX1FVSVJLMl9DQVBTX0JJVDYzX0ZPUl9IUzQwMCAmJgo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKGhvc3QtPmNhcHMxICYgU0RIQ0lfU1VQUE9SVF9I UzQwMCkpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1tYy0+Y2FwczIgfD0g TU1DX0NBUDJfSFM0MDA7Cj4gCj4gVGhlIHJlYXNvbiB3aHkgd2UgZGlyZWN0bHkgdXNlIGhvc3Qt Pm1tYy0+Y2FwczIgZm9yIEhTNDAwRVMgbW9kZSBpcyB0aGF0Cj4gc2RoY2kuYyBkbyBub3QgY29u dGFpbiB0aGUgc2ltaWxhciBsb2dpYy4KCk5vLCBpdCdzIG5vdCBlbm91Z2guIFdlIGNhbGwgbW1j X29mX3BhcnNlKCksIHdoaWNoIGNsZWFycyB0aGUgSFM0MDAKZmxhZ3MsIGJlZm9yZSBzZGhjaV9z ZXR1cF9ob3N0KCkgaXMgY2FsbGVkLCB3aGljaCB3aWxsIHRoZW4gYWRkIHRoZQpIUzQwMCBmbGFn cyBhZ2Fpbi4gU28gZWl0aGVyIEkgc3RpbGwgbmVlZCB0byBldmFsdWF0ZSB0aGUgRFQgcHJvcGVy dHkKaW4gdGhlIGVzZGhjIGRyaXZlciB0byBtYWtlIGl0IHJldHVybiB0aGUgcmlnaHQgZW11bGF0 ZWQgU0RIQ0kgY2FwcyBiaXQKZm9yIHRoZSBIUzQwMCBjYXNlLCBvciBkbyBpdCBsaWtlIGluIHRo aXMgcGF0Y2guCgpXaGlsZSB0aGUgd2F5IGl0IGlzIGRvbmUgaGVyZSBpcyBhIGJpdCBvZiBhIGxh eWVyaW5nIHZpb2xhdGlvbiBiZXR3ZWVuClNESENJIGFuZCBNTUMsIGl0IHN0aWxsIGZlZWxzIGxp a2UgdGhlIGNsZWFuZXIgYW5kIG1vcmUgc3RyYWlnaHQKZm9yd2FyZCBzb2x1dGlvbi4KClJlZ2Fy ZHMsCkx1Y2FzCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=