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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 67CF1C433FE for ; Fri, 1 Apr 2022 10:10:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241288AbiDAKLs convert rfc822-to-8bit (ORCPT ); Fri, 1 Apr 2022 06:11:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35974 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230360AbiDAKLq (ORCPT ); Fri, 1 Apr 2022 06:11:46 -0400 Received: from mout.kundenserver.de (mout.kundenserver.de [212.227.126.133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 98EA618EE83; Fri, 1 Apr 2022 03:09:56 -0700 (PDT) Received: from mail-wm1-f44.google.com ([209.85.128.44]) by mrelayeu.kundenserver.de (mreue012 [213.165.67.97]) with ESMTPSA (Nemesis) id 1MeUPU-1o8BXC2q7I-00aWdB; Fri, 01 Apr 2022 12:09:54 +0200 Received: by mail-wm1-f44.google.com with SMTP id i132-20020a1c3b8a000000b0038ce25c870dso3201254wma.1; Fri, 01 Apr 2022 03:09:54 -0700 (PDT) X-Gm-Message-State: AOAM5300FLqhk7MHJ7VpqI0n1lgCekCvKPTQtCjhu8LrWdvuNkUu5jLl /WLcIskzT/+p5X3ECJDLQTTviTYpkxZuaNkMhtk= X-Google-Smtp-Source: ABdhPJyNwn5VW/gR5pIv2np3RCs3K09s4CU+E1aUKrucWrsCjYi+cdzwK6CE+Qjb/zAcZxqYzBm4uCZmD6/ogYdeFHA= X-Received: by 2002:a1c:f219:0:b0:38c:782c:3bb with SMTP id s25-20020a1cf219000000b0038c782c03bbmr8009475wmc.94.1648807794169; Fri, 01 Apr 2022 03:09:54 -0700 (PDT) MIME-Version: 1.0 References: <2fa0ce6048f6449d883e2454ceea9540@cqplus1.com> In-Reply-To: <2fa0ce6048f6449d883e2454ceea9540@cqplus1.com> From: Arnd Bergmann Date: Fri, 1 Apr 2022 12:09:38 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v12 5/9] clk: Add Sunplus SP7021 clock driver To: =?UTF-8?B?cWluamlhblvopoPlgaVd?= Cc: Arnd Bergmann , Krzysztof Kozlowski , Rob Herring , Michael Turquette , Stephen Boyd , Thomas Gleixner , Marc Zyngier , Philipp Zabel , Russell King - ARM Linux , Linux ARM , DTML , Linux Kernel Mailing List , linux-clk Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT X-Provags-ID: V03:K1:TJfhkoT13owuLxX72+XrftpY4mBmHY8SnpJTLmFFbgEiz/zazDE 0+0xUB0SCDaAwD9fKPEAG/CGeUezOvORBimaOpZYgdDUo2bQjh+BoEsL8HZxMbXR9rmMyN+ E+ozx9/Tx/Z7kIQ6DBYE7+CNT/adpH7ygYiL67OP7/vyrDMltZGQQRUrvuT1OW2JWh4b38t 8Flr20KY+4DRj9VI9VKNQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:Qma4p1Kf2C4=:ai9TLjlnItrZs5x9f3JQbr UItuX/jl4qCtpoV8Tq0IfIZjl/sONJ/n4TWDsylw4K7EFoztLJ3gET28E+6hQCkoIncZDfL8o UjVhSu2WH0WG7B3sSt+w88aXq0rGcaSlaax3eN8Aqapz9hEXM4LpDoUpx06yEzFGqvXBXuNZ6 sCFgeBlwoMxeDS8CX3cBnsxgPbEhgY46J/A02mXjVdWndN7ygmPGE3itVERx64ZklYp3jff6+ B3I8xfr2doWFOgBUVb6NRiszLfPkd5RHSrkf/BDINXxGuDVVMmw0bAWTzzUTw/ueLOgP1MOAL +T/n8IOzDSTLQKtI3kn8916AH1vU86P9q/zU8zcmloXzRPk7p8mLpf7yBCvc0sfwTeFxREFay ve9lUksIbU2pbYFhfPA8kErNeegXQYz4zrv58FwKLyDW/sm7iqCkX7fRbGYrzDEJZmu8Niczd 9aw2VB79IsjpJNFlAYMkASH06mrz5UvoIj2b4upFLemnuf5u2ZBgnFjnslFCNQAtO9V101r88 Sfxv7xtah9RODVSI9BReQ1I+jBYRbmrBwplgBLc3nB1imvEsmpCIy8QihtHF0rhuSavZgW1Qt h/UyhI2brQoNnaDBguxiGGsEMYhNuYvW28BF7ONdt2gdvARxSrysMy818GHqbh0SgrjA1Y7Gm laHkjs3i3gpih4PEkjMbOcbzIU602/Bh8V4aBMPYeHKEEaoukdFpIhzrEozjOo4R4dhoDLyTL +uHj6uNnKjmYRa4B6Gkf9HKrbvso+I0HdrYK63WaRNFjnmlxOkP04lXWMsmoTre0oAQo5Whsa spGW+nw5PTTaZd+TQQ1MuPJtHfMpsTQC584JaazZayi0EpspYQ= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Apr 1, 2022 at 11:47 AM qinjian[覃健] wrote: > > > +static int sp_pll_enable(struct clk_hw *hw) > > > +{ > > > + struct sp_pll *clk = to_sp_pll(hw); > > > + unsigned long flags; > > > + > > > + spin_lock_irqsave(clk->lock, flags); > > > + writel(BIT(clk->pd_bit + 16) | BIT(clk->pd_bit), clk->reg); /* power up */ > > > + spin_unlock_irqrestore(clk->lock, flags); > > > + > > > + return 0; > > > +} > > > + > > > +static void sp_pll_disable(struct clk_hw *hw) > > > +{ > > > + struct sp_pll *clk = to_sp_pll(hw); > > > + unsigned long flags; > > > + > > > + spin_lock_irqsave(clk->lock, flags); > > > + writel(BIT(clk->pd_bit + 16), clk->reg); /* power down */ > > > + spin_unlock_irqrestore(clk->lock, flags); > > > +} > > > > What does the spinlock actually protect here? As writel() is posted, it > > can already leak of of the lock, and the inputs would appear to be > > constant. > > > > These code is refered from other clk driver. > But, other driver need read then write, so need lock protected. > Our HW is HIWORD_MASKED_REG, means modify bits no need to read, just 1 write only. > So, the lock is useless. > Did I right? If the read-modify-write is done on a different register, then it is fine to remove the lock. You can also consider having shadow registers to avoid expensive r-m-w cycles and just always write the register directly. > > > + /* This memory region include multi HW regs in discontinuous order. > > > + * clk driver used some discontinuous areas in the memory region. > > > + * Using devm_platform_ioremap_resource() would conflicted with other drivers. > > > + */ > > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > > + sp_clk_base = devm_ioremap(dev, res->start, resource_size(res)); > > > + if (!sp_clk_base) > > > + return -ENXIO; > > > > Can you explain this comment in more detail? Generally, the 'reg' properties > > of drivers should not overlap, so it is supposed to be safe to call > > devm_platform_ioremap_resource() here. > > > > We discussed this in the context of the iop driver that did have overlapping > > registers with this driver, and that was incorrect. Are there any other drivers > > that conflict with the clk driver? > > I means, I must split up the origin reg region into 4 small pieces, > and call devm_platform_ioremap_resource() 4 times. > Did I should follow this way? It depends. What are those other registers, and what drivers use them? Arnd 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 04090C433EF for ; Fri, 1 Apr 2022 10:11:25 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Xp9ebEarXM9OyZtrELZQ2umXyP8BQs9KsDgXuW6dtOU=; b=AN+x8Py+l6jQM5 W5Ese1kpPZEbpdTf1LWgPl7vZhvmHImRoF1pIytIUWsU/QVJ+czjrKJyGtNF+8DPjcXWylgo9M4xK sX64xSmkOX9VT3NzpkPVpPZ0S4sDS/+sbV2eDcH8te3JB8MKfsmr5dcxnyzOrFnrU1l4qbaGO9OuU 6QsGDSiC777DE+tL9/8XWk2OZJRpAkgaIcQ3o5jQ4muy/B1RvUiefFldYRDKDkKg0geK54IH3iqL7 Qwu9AmQMSLg7dhEBKETMHF0OsgDzA2p+HCaHU+BX+AlD0lQUbwm0c+8AmqCBwL9bhPXxrdVsv0UrW DZv52aD9Q5/tRWYc3YgA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1naEEH-0058D3-Pt; Fri, 01 Apr 2022 10:10:05 +0000 Received: from mout.kundenserver.de ([212.227.126.187]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1naEEE-0058B3-MB for linux-arm-kernel@lists.infradead.org; Fri, 01 Apr 2022 10:10:04 +0000 Received: from mail-wm1-f43.google.com ([209.85.128.43]) by mrelayeu.kundenserver.de (mreue009 [213.165.67.97]) with ESMTPSA (Nemesis) id 1MGQaz-1noq8l2iNB-00GtU4 for ; Fri, 01 Apr 2022 12:09:54 +0200 Received: by mail-wm1-f43.google.com with SMTP id v64-20020a1cac43000000b0038cfd1b3a6dso3178699wme.5 for ; Fri, 01 Apr 2022 03:09:54 -0700 (PDT) X-Gm-Message-State: AOAM530gwBCtvq7phNliBc9NXixmZ/M3YzAxUGOPZU8m5JKkf21z9PHs H9P3q5eRwsLB8rQOcJUYPQzvVw9AEfHSDt8PuA4= X-Google-Smtp-Source: ABdhPJyNwn5VW/gR5pIv2np3RCs3K09s4CU+E1aUKrucWrsCjYi+cdzwK6CE+Qjb/zAcZxqYzBm4uCZmD6/ogYdeFHA= X-Received: by 2002:a1c:f219:0:b0:38c:782c:3bb with SMTP id s25-20020a1cf219000000b0038c782c03bbmr8009475wmc.94.1648807794169; Fri, 01 Apr 2022 03:09:54 -0700 (PDT) MIME-Version: 1.0 References: <2fa0ce6048f6449d883e2454ceea9540@cqplus1.com> In-Reply-To: <2fa0ce6048f6449d883e2454ceea9540@cqplus1.com> From: Arnd Bergmann Date: Fri, 1 Apr 2022 12:09:38 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v12 5/9] clk: Add Sunplus SP7021 clock driver To: =?UTF-8?B?cWluamlhblvopoPlgaVd?= Cc: Arnd Bergmann , Krzysztof Kozlowski , Rob Herring , Michael Turquette , Stephen Boyd , Thomas Gleixner , Marc Zyngier , Philipp Zabel , Russell King - ARM Linux , Linux ARM , DTML , Linux Kernel Mailing List , linux-clk X-Provags-ID: V03:K1:m/dsFUUh8h7RHSy3Hf3kuMlJJR6eEaFfDwIgSs4QnOCZpSqBw2D tHiBq+3+Zs5aCO4jBB6kLp9e8X105XR4e5nPHdzh+ffkmnNXoprKz7k+wiya2lOfUvxMczZ 08bmWEAwvsEsccgPWMPGaMuwZEnt7WGTxXkb0CCTxvGmOzxNEO8n74X1LutOZFgWDOBfutc b/n/kJwXtWriGM4cH9lXg== X-UI-Out-Filterresults: notjunk:1;V03:K0:O69xjxOb/sw=:cs+navTTHOx6td7hBnJ2ry xHaGESebH72ureXkwu5KUUBGM5j0p6TwI/CqeJu+IzgxfAfyALmMaENkHC9g4Ch+4ScUED/NY ZszHBVfLJEmwxsIi/sYuRXv9LYpSKwnc5NK13nvD5v3ddqzAjGl0jdmBO55hA9dlqj6qRUTBn BpHVTo/BdN+MDW+XGdNXyXB7nHankorQrl2Cwbg1RGr+TlIwQCBdb3Dyh7zvrKslblHCGhvRd 4fjduiBMXpxNCxp2J7VX7O7Qd3YvbuBuRgnueOzoKvhifTCpLCmvnWTYTwaQA1stzr+jaiX2x yW2Pjn8YZwYAGHeNS2VDq0VXu9PaHGzBhVsQEvmdlGrACJfLSzgzyqr8iXPF+SLBOJ12S4OGe 8ypTAl2Yp53Wq87IAqJa62qJ9X424xshYraMSEZjw/sOsHOlFqdP2ddLYQd4MICRwg3b6rejh 7wdab1+PKGGiZepP322j/iI+gE2QWh6rrbbiTuImOLRDlLg+jZGCLfVgbk9SZIIULA8wOARn3 ATipiP8YqwWZFIMV8sLp+HDBKX7iYmym4zDq7i7XWJBfZpbd/s9YyYY9JEQYY2b6w1rY5Nqzg n3KG+tYCQFa6a3djJaNIER6wHF663kF3xqkFrnXFTW+gGl5gaRWNK1Z0lk0SEAsXUHfvy7TQK RYYw5eI0e8WekgyIysJMXbwjZTKu9NqQ6dkKVoBpD2Ermi6cnZ2xIWqRZneJYcgKtr/YecTyw mCweUSYPkLjK1dBWxgMq0CllTewkaZqFw7+y4PEW6pOQwRqcDHJzrrL5wThsoqBHc9EqZcWsG W0uIgklfBo46SXJZa1vv/A1tES77vVlCwFMthQz9afu5aMc1EA= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220401_031003_046297_BADD23AC X-CRM114-Status: GOOD ( 30.41 ) 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 T24gRnJpLCBBcHIgMSwgMjAyMiBhdCAxMTo0NyBBTSBxaW5qaWFuW+img+WBpV0gPHFpbmppYW5A Y3FwbHVzMS5jb20+IHdyb3RlOgo+ID4gPiArc3RhdGljIGludCBzcF9wbGxfZW5hYmxlKHN0cnVj dCBjbGtfaHcgKmh3KQo+ID4gPiArewo+ID4gPiArICAgICAgIHN0cnVjdCBzcF9wbGwgKmNsayA9 IHRvX3NwX3BsbChodyk7Cj4gPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiA+ID4g Kwo+ID4gPiArICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKGNsay0+bG9jaywgZmxhZ3MpOwo+ID4g PiArICAgICAgIHdyaXRlbChCSVQoY2xrLT5wZF9iaXQgKyAxNikgfCBCSVQoY2xrLT5wZF9iaXQp LCBjbGstPnJlZyk7IC8qIHBvd2VyIHVwICovCj4gPiA+ICsgICAgICAgc3Bpbl91bmxvY2tfaXJx cmVzdG9yZShjbGstPmxvY2ssIGZsYWdzKTsKPiA+ID4gKwo+ID4gPiArICAgICAgIHJldHVybiAw Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBzcF9wbGxfZGlzYWJsZShzdHJ1 Y3QgY2xrX2h3ICpodykKPiA+ID4gK3sKPiA+ID4gKyAgICAgICBzdHJ1Y3Qgc3BfcGxsICpjbGsg PSB0b19zcF9wbGwoaHcpOwo+ID4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiA+ ICsKPiA+ID4gKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZShjbGstPmxvY2ssIGZsYWdzKTsKPiA+ ID4gKyAgICAgICB3cml0ZWwoQklUKGNsay0+cGRfYml0ICsgMTYpLCBjbGstPnJlZyk7IC8qIHBv d2VyIGRvd24gKi8KPiA+ID4gKyAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKGNsay0+bG9j aywgZmxhZ3MpOwo+ID4gPiArfQo+ID4KPiA+IFdoYXQgZG9lcyB0aGUgc3BpbmxvY2sgYWN0dWFs bHkgcHJvdGVjdCBoZXJlPyBBcyB3cml0ZWwoKSBpcyBwb3N0ZWQsIGl0Cj4gPiBjYW4gYWxyZWFk eSBsZWFrIG9mIG9mIHRoZSBsb2NrLCBhbmQgdGhlIGlucHV0cyB3b3VsZCBhcHBlYXIgdG8gYmUK PiA+IGNvbnN0YW50Lgo+ID4KPgo+IFRoZXNlIGNvZGUgaXMgcmVmZXJlZCBmcm9tIG90aGVyIGNs ayBkcml2ZXIuCj4gQnV0LCBvdGhlciBkcml2ZXIgbmVlZCByZWFkIHRoZW4gd3JpdGUsIHNvIG5l ZWQgbG9jayBwcm90ZWN0ZWQuCj4gT3VyICBIVyBpcyBISVdPUkRfTUFTS0VEX1JFRywgbWVhbnMg bW9kaWZ5IGJpdHMgbm8gbmVlZCB0byByZWFkLCBqdXN0IDEgd3JpdGUgb25seS4KPiBTbywgdGhl IGxvY2sgaXMgdXNlbGVzcy4KPiBEaWQgSSByaWdodD8KCklmIHRoZSByZWFkLW1vZGlmeS13cml0 ZSBpcyBkb25lIG9uIGEgZGlmZmVyZW50IHJlZ2lzdGVyLCB0aGVuIGl0IGlzCmZpbmUgdG8gcmVt b3ZlCnRoZSBsb2NrLiBZb3UgY2FuIGFsc28gY29uc2lkZXIgaGF2aW5nIHNoYWRvdyByZWdpc3Rl cnMgdG8gYXZvaWQgZXhwZW5zaXZlCnItbS13IGN5Y2xlcyBhbmQganVzdCBhbHdheXMgd3JpdGUg dGhlIHJlZ2lzdGVyIGRpcmVjdGx5LgoKPiA+ID4gKyAgICAgICAvKiBUaGlzIG1lbW9yeSByZWdp b24gaW5jbHVkZSBtdWx0aSBIVyByZWdzIGluIGRpc2NvbnRpbnVvdXMgb3JkZXIuCj4gPiA+ICsg ICAgICAgICogY2xrIGRyaXZlciB1c2VkIHNvbWUgZGlzY29udGludW91cyBhcmVhcyBpbiB0aGUg bWVtb3J5IHJlZ2lvbi4KPiA+ID4gKyAgICAgICAgKiBVc2luZyBkZXZtX3BsYXRmb3JtX2lvcmVt YXBfcmVzb3VyY2UoKSB3b3VsZCBjb25mbGljdGVkIHdpdGggb3RoZXIgZHJpdmVycy4KPiA+ID4g KyAgICAgICAgKi8KPiA+ID4gKyAgICAgICByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRl diwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ID4gPiArICAgICAgIHNwX2Nsa19iYXNlID0gZGV2bV9p b3JlbWFwKGRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKPiA+ID4gKyAgICAg ICBpZiAoIXNwX2Nsa19iYXNlKQo+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsK PiA+Cj4gPiBDYW4geW91IGV4cGxhaW4gdGhpcyBjb21tZW50IGluIG1vcmUgZGV0YWlsPyBHZW5l cmFsbHksIHRoZSAncmVnJyBwcm9wZXJ0aWVzCj4gPiBvZiBkcml2ZXJzIHNob3VsZCBub3Qgb3Zl cmxhcCwgc28gaXQgaXMgc3VwcG9zZWQgdG8gYmUgc2FmZSB0byBjYWxsCj4gPiBkZXZtX3BsYXRm b3JtX2lvcmVtYXBfcmVzb3VyY2UoKSBoZXJlLgo+ID4KPiA+IFdlIGRpc2N1c3NlZCB0aGlzIGlu IHRoZSBjb250ZXh0IG9mIHRoZSBpb3AgZHJpdmVyIHRoYXQgZGlkIGhhdmUgb3ZlcmxhcHBpbmcK PiA+IHJlZ2lzdGVycyB3aXRoIHRoaXMgZHJpdmVyLCBhbmQgdGhhdCB3YXMgaW5jb3JyZWN0LiBB cmUgdGhlcmUgYW55IG90aGVyIGRyaXZlcnMKPiA+IHRoYXQgY29uZmxpY3Qgd2l0aCB0aGUgY2xr IGRyaXZlcj8KPgo+IEkgbWVhbnMsIEkgbXVzdCBzcGxpdCB1cCB0aGUgb3JpZ2luIHJlZyByZWdp b24gaW50byA0IHNtYWxsIHBpZWNlcywKPiBhbmQgY2FsbCBkZXZtX3BsYXRmb3JtX2lvcmVtYXBf cmVzb3VyY2UoKSA0IHRpbWVzLgo+IERpZCBJIHNob3VsZCBmb2xsb3cgdGhpcyB3YXk/CgpJdCBk ZXBlbmRzLiBXaGF0IGFyZSB0aG9zZSBvdGhlciByZWdpc3RlcnMsIGFuZCB3aGF0IGRyaXZlcnMg dXNlIHRoZW0/CgogICAgICAgIEFybmQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK