From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4BA2A30325; Fri, 17 Nov 2023 11:51:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KZGdU4Pu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 65A6BC433C7; Fri, 17 Nov 2023 11:51:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700221916; bh=5ZHexz3dAhJlMDGTudHyhTd6kwWzrrePNKd8DrxTuEo=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=KZGdU4Pu42n4aaFkPPt5SUe0neGnHjVCJoi1rFNP07vq5JqEsYQkzXoXTZxO25mfy aX++K93oA2GkRMwgUp71LAhNBP8FSCr554nZDZaMXlPgLBLsb1nOX3LP2x7FXniJ7O XXhIOOLCJcTiQsIuadxtOAMXNejf7T8n19zTVt0JoXqBrI5t0O0+GMgv0dDom+HRDU KMAWxjZRFe81M88eQQEmzqeslO1kcksjuc5JRGjygkMJGFZcgupSPr1vrWgeGmzZTd w8UI+fq7+f0jjSRJMktV559GXqXLP307h2CtIQI7LF3L9fRNvOBK9n7zL6YxTWEVU9 H8/aIIhsTDGTQ== Message-ID: <3e00b2ad-b58f-4b09-9230-683c58d3bb92@kernel.org> Date: Fri, 17 Nov 2023 13:51:49 +0200 Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 3/6] usb: cdns3-ti: add suspend/resume procedures for J7200 Content-Language: en-US To: =?UTF-8?Q?Th=C3=A9o_Lebrun?= , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Chen , Pawel Laszczak , Nishanth Menon , Vignesh Raghavendra , Tero Kristo , "Vardhan, Vibhore" Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?UTF-8?Q?Gr=C3=A9gory_Clement?= , Thomas Petazzoni References: <20231113-j7200-usb-suspend-v1-0-ad1ee714835c@bootlin.com> <20231113-j7200-usb-suspend-v1-3-ad1ee714835c@bootlin.com> <5080372b-1f48-4cbc-a6c4-8689c28983cb@kernel.org> From: Roger Quadros In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 17/11/2023 12:17, Théo Lebrun wrote: > Hello, > > On Thu Nov 16, 2023 at 10:44 PM CET, Roger Quadros wrote: >> On 16/11/2023 20:56, Théo Lebrun wrote: >>> On Thu Nov 16, 2023 at 1:40 PM CET, Roger Quadros wrote: >>>> On 15/11/2023 17:02, Théo Lebrun wrote: >>>>> On Wed Nov 15, 2023 at 12:37 PM CET, Roger Quadros wrote: >>>>>> You might want to check suspend/resume ops in cdns3-plat and >>>>>> do something similar here. >>>>> >>>>> I'm unsure what you are referring to specifically in cdns3-plat? >>>> >>>> What I meant is, calling pm_runtime_get/put() from system suspend/resume >>>> hooks doesn't seem right. >>>> >>>> How about using something like pm_runtime_forbid(dev) on devices which >>>> loose USB context on runtime suspend e.g. J7200. >>>> So at probe we can get rid of the pm_runtime_get_sync() call. >>> >>> What is the goal of enabling PM runtime to then block (ie forbid) it in >>> its enabled state until system suspend? >> >> If USB controller retains context on runtime_suspend on some platforms >> then we don't want to forbid PM runtime. > > What's the point of runtime PM if nothing is done based on it? This is > the current behavior of the driver. Even if driver doesn't have runtime_suspend/resume hooks, wouldn't the USB Power domain turn off if we enable runtime PM and allow runtime autosuspend and all children have runtime suspended? > >>> Thinking some more about it and having read parts of the genpd source, >>> it's unclear to me why there even is some PM runtime calls in this >>> driver. No runtime_suspend/runtime_resume callbacks are registered. >>> Also, power-domains work as expected without any PM runtime calls. >> >> Probably it was required when the driver was introduced. > > I'm not seeing any behavior change in cdns3-ti since its addition in Oct > 2019. > >>> The power domain is turned on when attached to a device >>> (see genpd_dev_pm_attach). It gets turned off automatically at >>> suspend_noirq (taking into account the many things that make genpd >>> complex: multiple devices per PD, subdomains, flags to customise the >>> behavior, etc.). Removing calls to PM runtime at probe keeps the driver >>> working. >>> >>> So my new proposal would be: remove all all PM runtime calls from this >>> driver. Anything wrong with this approach? >> >> Nothing wrong if we don't expect runtime_pm to work with this driver. >> >>> >>> Only possible reason I see for having PM runtime in this wrapper driver >>> would be cut the full power-domain when USB isn't used, with some PM >>> runtime interaction with the children node. But that cannot work >>> currently as we don't register a runtime_resume to init the hardware, >>> so this cannot be the current expected behavior. >>> >>>> e.g. >>>> >>>> pm_runtime_set_active(dev); >>>> pm_runtime_enable(dev); >>>> if (cnds_ti->can_loose_context) >>>> pm_runtime_forbid(dev); >>>> >>>> pm_runtime_set_autosuspend_delay(dev, CNDS_TI_AUTOSUSPEND_DELAY); /* could be 20ms? */ >>> >>> Why mention autosuspend in this driver? This will turn the device off in >>> CNDS_TI_AUTOSUSPEND_DELAY then nothing enables it back using >>> pm_runtime_get. We have nothing to reconfigure the device, ie no >>> runtime_resume, so we must not go into runtime suspend. >> >> It would be enabled/disabled based on when the child "cdns3,usb" >> does runtime_resume/suspend. > > Why care about being enabled or disabled if we don't do anything based > on that? Children does do runtime PM stuff but I don't understand how > that could influence us. > > Regards, > > -- > Théo Lebrun, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com > -- cheers, -roger 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 1B0EFC072A2 for ; Fri, 17 Nov 2023 11:52:22 +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:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=YNAqO+umjzXzAyUAT63SEHcdrPSTVZkmrcGFJg6Zejw=; b=tnxv3IFY79Z8ul 6MvGnr2l2Ed52/6J99LIWBteu5B16stVq6IGFoq8xZnYQQpd2aXSSy4ar1MH5Ptw4M/NOTHjJAw7S 5GG9OxlSeV+NZDOpe1KWM0IawYx6DiQ/777vVi/7pxeKfxEWi/z5O8VXJOXrHJTfIAh94UJsVflwL ZtJGPxqQKwimF5o+qqBeipRUTk0p+bnAU/Et2irTeXuo3I8NroiSpPdaQ/FgW6PMT3g/fil2A1rck q7LeJ1abZRMagefq1zHW26HbxGUxpFd+c5C73Q1IaPXuE85Gzvc9TuIolsQzH0mKn18sj3BKWP3Hw DkAMS4NPMAcl12REX22Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r3xOC-006UUs-25; Fri, 17 Nov 2023 11:52:00 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1r3xO9-006UUU-2K for linux-arm-kernel@lists.infradead.org; Fri, 17 Nov 2023 11:51:59 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 1208161D58; Fri, 17 Nov 2023 11:51:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 65A6BC433C7; Fri, 17 Nov 2023 11:51:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1700221916; bh=5ZHexz3dAhJlMDGTudHyhTd6kwWzrrePNKd8DrxTuEo=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=KZGdU4Pu42n4aaFkPPt5SUe0neGnHjVCJoi1rFNP07vq5JqEsYQkzXoXTZxO25mfy aX++K93oA2GkRMwgUp71LAhNBP8FSCr554nZDZaMXlPgLBLsb1nOX3LP2x7FXniJ7O XXhIOOLCJcTiQsIuadxtOAMXNejf7T8n19zTVt0JoXqBrI5t0O0+GMgv0dDom+HRDU KMAWxjZRFe81M88eQQEmzqeslO1kcksjuc5JRGjygkMJGFZcgupSPr1vrWgeGmzZTd w8UI+fq7+f0jjSRJMktV559GXqXLP307h2CtIQI7LF3L9fRNvOBK9n7zL6YxTWEVU9 H8/aIIhsTDGTQ== Message-ID: <3e00b2ad-b58f-4b09-9230-683c58d3bb92@kernel.org> Date: Fri, 17 Nov 2023 13:51:49 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 3/6] usb: cdns3-ti: add suspend/resume procedures for J7200 Content-Language: en-US To: =?UTF-8?Q?Th=C3=A9o_Lebrun?= , Greg Kroah-Hartman , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peter Chen , Pawel Laszczak , Nishanth Menon , Vignesh Raghavendra , Tero Kristo , "Vardhan, Vibhore" Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, =?UTF-8?Q?Gr=C3=A9gory_Clement?= , Thomas Petazzoni References: <20231113-j7200-usb-suspend-v1-0-ad1ee714835c@bootlin.com> <20231113-j7200-usb-suspend-v1-3-ad1ee714835c@bootlin.com> <5080372b-1f48-4cbc-a6c4-8689c28983cb@kernel.org> From: Roger Quadros In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231117_035157_868919_FA7BA860 X-CRM114-Status: GOOD ( 23.79 ) 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 CgpPbiAxNy8xMS8yMDIzIDEyOjE3LCBUaMOpbyBMZWJydW4gd3JvdGU6Cj4gSGVsbG8sCj4gCj4g T24gVGh1IE5vdiAxNiwgMjAyMyBhdCAxMDo0NCBQTSBDRVQsIFJvZ2VyIFF1YWRyb3Mgd3JvdGU6 Cj4+IE9uIDE2LzExLzIwMjMgMjA6NTYsIFRow6lvIExlYnJ1biB3cm90ZToKPj4+IE9uIFRodSBO b3YgMTYsIDIwMjMgYXQgMTo0MCBQTSBDRVQsIFJvZ2VyIFF1YWRyb3Mgd3JvdGU6Cj4+Pj4gT24g MTUvMTEvMjAyMyAxNzowMiwgVGjDqW8gTGVicnVuIHdyb3RlOgo+Pj4+PiBPbiBXZWQgTm92IDE1 LCAyMDIzIGF0IDEyOjM3IFBNIENFVCwgUm9nZXIgUXVhZHJvcyB3cm90ZToKPj4+Pj4+IFlvdSBt aWdodCB3YW50IHRvIGNoZWNrIHN1c3BlbmQvcmVzdW1lIG9wcyBpbiBjZG5zMy1wbGF0IGFuZAo+ Pj4+Pj4gZG8gc29tZXRoaW5nIHNpbWlsYXIgaGVyZS4KPj4+Pj4KPj4+Pj4gSSdtIHVuc3VyZSB3 aGF0IHlvdSBhcmUgcmVmZXJyaW5nIHRvIHNwZWNpZmljYWxseSBpbiBjZG5zMy1wbGF0Pwo+Pj4+ Cj4+Pj4gV2hhdCBJIG1lYW50IGlzLCBjYWxsaW5nIHBtX3J1bnRpbWVfZ2V0L3B1dCgpIGZyb20g c3lzdGVtIHN1c3BlbmQvcmVzdW1lCj4+Pj4gaG9va3MgZG9lc24ndCBzZWVtIHJpZ2h0Lgo+Pj4+ Cj4+Pj4gSG93IGFib3V0IHVzaW5nIHNvbWV0aGluZyBsaWtlIHBtX3J1bnRpbWVfZm9yYmlkKGRl dikgb24gZGV2aWNlcyB3aGljaAo+Pj4+IGxvb3NlIFVTQiBjb250ZXh0IG9uIHJ1bnRpbWUgc3Vz cGVuZCBlLmcuIEo3MjAwLgo+Pj4+IFNvIGF0IHByb2JlIHdlIGNhbiBnZXQgcmlkIG9mIHRoZSBw bV9ydW50aW1lX2dldF9zeW5jKCkgY2FsbC4KPj4+Cj4+PiBXaGF0IGlzIHRoZSBnb2FsIG9mIGVu YWJsaW5nIFBNIHJ1bnRpbWUgdG8gdGhlbiBibG9jayAoaWUgZm9yYmlkKSBpdCBpbgo+Pj4gaXRz IGVuYWJsZWQgc3RhdGUgdW50aWwgc3lzdGVtIHN1c3BlbmQ/Cj4+Cj4+IElmIFVTQiBjb250cm9s bGVyIHJldGFpbnMgY29udGV4dCBvbiBydW50aW1lX3N1c3BlbmQgb24gc29tZSBwbGF0Zm9ybXMK Pj4gdGhlbiB3ZSBkb24ndCB3YW50IHRvIGZvcmJpZCBQTSBydW50aW1lLgo+IAo+IFdoYXQncyB0 aGUgcG9pbnQgb2YgcnVudGltZSBQTSBpZiBub3RoaW5nIGlzIGRvbmUgYmFzZWQgb24gaXQ/IFRo aXMgaXMKPiB0aGUgY3VycmVudCBiZWhhdmlvciBvZiB0aGUgZHJpdmVyLgoKRXZlbiBpZiBkcml2 ZXIgZG9lc24ndCBoYXZlIHJ1bnRpbWVfc3VzcGVuZC9yZXN1bWUgaG9va3MsIHdvdWxkbid0IAp0 aGUgVVNCIFBvd2VyIGRvbWFpbiB0dXJuIG9mZiBpZiB3ZSBlbmFibGUgcnVudGltZSBQTSBhbmQg YWxsb3cgcnVudGltZQphdXRvc3VzcGVuZCBhbmQgYWxsIGNoaWxkcmVuIGhhdmUgcnVudGltZSBz dXNwZW5kZWQ/Cgo+IAo+Pj4gVGhpbmtpbmcgc29tZSBtb3JlIGFib3V0IGl0IGFuZCBoYXZpbmcg cmVhZCBwYXJ0cyBvZiB0aGUgZ2VucGQgc291cmNlLAo+Pj4gaXQncyB1bmNsZWFyIHRvIG1lIHdo eSB0aGVyZSBldmVuIGlzIHNvbWUgUE0gcnVudGltZSBjYWxscyBpbiB0aGlzCj4+PiBkcml2ZXIu IE5vIHJ1bnRpbWVfc3VzcGVuZC9ydW50aW1lX3Jlc3VtZSBjYWxsYmFja3MgYXJlIHJlZ2lzdGVy ZWQuCj4+PiBBbHNvLCBwb3dlci1kb21haW5zIHdvcmsgYXMgZXhwZWN0ZWQgd2l0aG91dCBhbnkg UE0gcnVudGltZSBjYWxscy4KPj4KPj4gUHJvYmFibHkgaXQgd2FzIHJlcXVpcmVkIHdoZW4gdGhl IGRyaXZlciB3YXMgaW50cm9kdWNlZC4KPiAKPiBJJ20gbm90IHNlZWluZyBhbnkgYmVoYXZpb3Ig Y2hhbmdlIGluIGNkbnMzLXRpIHNpbmNlIGl0cyBhZGRpdGlvbiBpbiBPY3QKPiAyMDE5Lgo+IAo+ Pj4gVGhlIHBvd2VyIGRvbWFpbiBpcyB0dXJuZWQgb24gd2hlbiBhdHRhY2hlZCB0byBhIGRldmlj ZQo+Pj4gKHNlZSBnZW5wZF9kZXZfcG1fYXR0YWNoKS4gSXQgZ2V0cyB0dXJuZWQgb2ZmIGF1dG9t YXRpY2FsbHkgYXQKPj4+IHN1c3BlbmRfbm9pcnEgKHRha2luZyBpbnRvIGFjY291bnQgdGhlIG1h bnkgdGhpbmdzIHRoYXQgbWFrZSBnZW5wZAo+Pj4gY29tcGxleDogbXVsdGlwbGUgZGV2aWNlcyBw ZXIgUEQsIHN1YmRvbWFpbnMsIGZsYWdzIHRvIGN1c3RvbWlzZSB0aGUKPj4+IGJlaGF2aW9yLCBl dGMuKS4gUmVtb3ZpbmcgY2FsbHMgdG8gUE0gcnVudGltZSBhdCBwcm9iZSBrZWVwcyB0aGUgZHJp dmVyCj4+PiB3b3JraW5nLgo+Pj4KPj4+IFNvIG15IG5ldyBwcm9wb3NhbCB3b3VsZCBiZTogcmVt b3ZlIGFsbCBhbGwgUE0gcnVudGltZSBjYWxscyBmcm9tIHRoaXMKPj4+IGRyaXZlci4gQW55dGhp bmcgd3Jvbmcgd2l0aCB0aGlzIGFwcHJvYWNoPwo+Pgo+PiBOb3RoaW5nIHdyb25nIGlmIHdlIGRv bid0IGV4cGVjdCBydW50aW1lX3BtIHRvIHdvcmsgd2l0aCB0aGlzIGRyaXZlci4KPj4KPj4+Cj4+ PiBPbmx5IHBvc3NpYmxlIHJlYXNvbiBJIHNlZSBmb3IgaGF2aW5nIFBNIHJ1bnRpbWUgaW4gdGhp cyB3cmFwcGVyIGRyaXZlcgo+Pj4gd291bGQgYmUgY3V0IHRoZSBmdWxsIHBvd2VyLWRvbWFpbiB3 aGVuIFVTQiBpc24ndCB1c2VkLCB3aXRoIHNvbWUgUE0KPj4+IHJ1bnRpbWUgaW50ZXJhY3Rpb24g d2l0aCB0aGUgY2hpbGRyZW4gbm9kZS4gQnV0IHRoYXQgY2Fubm90IHdvcmsKPj4+IGN1cnJlbnRs eSBhcyB3ZSBkb24ndCByZWdpc3RlciBhIHJ1bnRpbWVfcmVzdW1lIHRvIGluaXQgdGhlIGhhcmR3 YXJlLAo+Pj4gc28gdGhpcyBjYW5ub3QgYmUgdGhlIGN1cnJlbnQgZXhwZWN0ZWQgYmVoYXZpb3Iu Cj4+Pgo+Pj4+IGUuZy4KPj4+Pgo+Pj4+ICAgICAgICAgcG1fcnVudGltZV9zZXRfYWN0aXZlKGRl dik7Cj4+Pj4gICAgICAgICBwbV9ydW50aW1lX2VuYWJsZShkZXYpOwo+Pj4+ICAgICAgICAgaWYg KGNuZHNfdGktPmNhbl9sb29zZV9jb250ZXh0KQo+Pj4+ICAgICAgICAgICAgICAgICBwbV9ydW50 aW1lX2ZvcmJpZChkZXYpOwo+Pj4+Cj4+Pj4gICAgICAgICBwbV9ydW50aW1lX3NldF9hdXRvc3Vz cGVuZF9kZWxheShkZXYsIENORFNfVElfQVVUT1NVU1BFTkRfREVMQVkpOwkvKiBjb3VsZCBiZSAy MG1zPyAqLwo+Pj4KPj4+IFdoeSBtZW50aW9uIGF1dG9zdXNwZW5kIGluIHRoaXMgZHJpdmVyPyBU aGlzIHdpbGwgdHVybiB0aGUgZGV2aWNlIG9mZiBpbgo+Pj4gQ05EU19USV9BVVRPU1VTUEVORF9E RUxBWSB0aGVuIG5vdGhpbmcgZW5hYmxlcyBpdCBiYWNrIHVzaW5nCj4+PiBwbV9ydW50aW1lX2dl dC4gV2UgaGF2ZSBub3RoaW5nIHRvIHJlY29uZmlndXJlIHRoZSBkZXZpY2UsIGllIG5vCj4+PiBy dW50aW1lX3Jlc3VtZSwgc28gd2UgbXVzdCBub3QgZ28gaW50byBydW50aW1lIHN1c3BlbmQuCj4+ Cj4+IEl0IHdvdWxkIGJlIGVuYWJsZWQvZGlzYWJsZWQgYmFzZWQgb24gd2hlbiB0aGUgY2hpbGQg ImNkbnMzLHVzYiIKPj4gZG9lcyBydW50aW1lX3Jlc3VtZS9zdXNwZW5kLgo+IAo+IFdoeSBjYXJl IGFib3V0IGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgaWYgd2UgZG9uJ3QgZG8gYW55dGhpbmcg YmFzZWQKPiBvbiB0aGF0PyBDaGlsZHJlbiBkb2VzIGRvIHJ1bnRpbWUgUE0gc3R1ZmYgYnV0IEkg ZG9uJ3QgdW5kZXJzdGFuZCBob3cKPiB0aGF0IGNvdWxkIGluZmx1ZW5jZSB1cy4KPiAKPiBSZWdh cmRzLAo+IAo+IC0tCj4gVGjDqW8gTGVicnVuLCBCb290bGluCj4gRW1iZWRkZWQgTGludXggYW5k IEtlcm5lbCBlbmdpbmVlcmluZwo+IGh0dHBzOi8vYm9vdGxpbi5jb20KPiAKCi0tIApjaGVlcnMs Ci1yb2dlcgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=