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=-16.7 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,USER_AGENT_GIT 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 AB588C433E0 for ; Wed, 27 Jan 2021 07:46:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 553292074D for ; Wed, 27 Jan 2021 07:46:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S317140AbhAZXaD (ORCPT ); Tue, 26 Jan 2021 18:30:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49608 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389218AbhAZQ7j (ORCPT ); Tue, 26 Jan 2021 11:59:39 -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 484C9C061D7D for ; Tue, 26 Jan 2021 08:58:58 -0800 (PST) Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l4Rg8-00045r-5B; Tue, 26 Jan 2021 17:58:56 +0100 Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1l4Rg4-0003he-5G; Tue, 26 Jan 2021 17:58:52 +0100 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Russell King , Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, kernel@pengutronix.de, Arnd Bergmann , linux-arm-kernel@lists.infradead.org, Ulf Hansson Subject: [PATCH v3 2/5] amba: reorder functions Date: Tue, 26 Jan 2021 17:58:32 +0100 Message-Id: <20210126165835.687514-3-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210126165835.687514-1-u.kleine-koenig@pengutronix.de> References: <20210126165835.687514-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: ukl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Put helpers (here: amba_get_enable_pclk and amba_put_disable_pclk) at the top of the file and then define callbacks directly before the structs they are used in; in the same order. Reviewed-by: Ulf Hansson Reviewed-by: Arnd Bergmann Signed-off-by: Uwe Kleine-König --- drivers/amba/bus.c | 77 +++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c index b5f5ca4e3f34..8c4a42df47c6 100644 --- a/drivers/amba/bus.c +++ b/drivers/amba/bus.c @@ -56,31 +56,28 @@ amba_lookup(const struct amba_id *table, struct amba_device *dev) return NULL; } -static int amba_match(struct device *dev, struct device_driver *drv) +static int amba_get_enable_pclk(struct amba_device *pcdev) { - struct amba_device *pcdev = to_amba_device(dev); - struct amba_driver *pcdrv = to_amba_driver(drv); + int ret; - /* When driver_override is set, only bind to the matching driver */ - if (pcdev->driver_override) - return !strcmp(pcdev->driver_override, drv->name); + pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk"); + if (IS_ERR(pcdev->pclk)) + return PTR_ERR(pcdev->pclk); - return amba_lookup(pcdrv->id_table, pcdev) != NULL; + ret = clk_prepare_enable(pcdev->pclk); + if (ret) + clk_put(pcdev->pclk); + + return ret; } -static int amba_uevent(struct device *dev, struct kobj_uevent_env *env) +static void amba_put_disable_pclk(struct amba_device *pcdev) { - struct amba_device *pcdev = to_amba_device(dev); - int retval = 0; - - retval = add_uevent_var(env, "AMBA_ID=%08x", pcdev->periphid); - if (retval) - return retval; - - retval = add_uevent_var(env, "MODALIAS=amba:d%08X", pcdev->periphid); - return retval; + clk_disable_unprepare(pcdev->pclk); + clk_put(pcdev->pclk); } + static ssize_t driver_override_show(struct device *_dev, struct device_attribute *attr, char *buf) { @@ -152,6 +149,31 @@ static struct attribute *amba_dev_attrs[] = { }; ATTRIBUTE_GROUPS(amba_dev); +static int amba_match(struct device *dev, struct device_driver *drv) +{ + struct amba_device *pcdev = to_amba_device(dev); + struct amba_driver *pcdrv = to_amba_driver(drv); + + /* When driver_override is set, only bind to the matching driver */ + if (pcdev->driver_override) + return !strcmp(pcdev->driver_override, drv->name); + + return amba_lookup(pcdrv->id_table, pcdev) != NULL; +} + +static int amba_uevent(struct device *dev, struct kobj_uevent_env *env) +{ + struct amba_device *pcdev = to_amba_device(dev); + int retval = 0; + + retval = add_uevent_var(env, "AMBA_ID=%08x", pcdev->periphid); + if (retval) + return retval; + + retval = add_uevent_var(env, "MODALIAS=amba:d%08X", pcdev->periphid); + return retval; +} + #ifdef CONFIG_PM /* * Hooks to provide runtime PM of the pclk (bus clock). It is safe to @@ -229,27 +251,6 @@ static int __init amba_init(void) postcore_initcall(amba_init); -static int amba_get_enable_pclk(struct amba_device *pcdev) -{ - int ret; - - pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk"); - if (IS_ERR(pcdev->pclk)) - return PTR_ERR(pcdev->pclk); - - ret = clk_prepare_enable(pcdev->pclk); - if (ret) - clk_put(pcdev->pclk); - - return ret; -} - -static void amba_put_disable_pclk(struct amba_device *pcdev) -{ - clk_disable_unprepare(pcdev->pclk); - clk_put(pcdev->pclk); -} - /* * These are the device model conversion veneers; they convert the * device model structures to our more specific structures. -- 2.29.2 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=-17.0 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, USER_AGENT_GIT 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 3C9B4C433E6 for ; Tue, 26 Jan 2021 17:03:00 +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 01680229C9 for ; Tue, 26 Jan 2021 17:02:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 01680229C9 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: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=D8fzF3O0B5PXsQ4o6M9XpptiHXqqcaHekyfQL7BvBsI=; b=NJmyBTzrJSX536d4qQABdPYrB rn+aHfDJcMQfBtdblD2fC8RhoTSCyB5oNtZAUJuF5W8mvUddcWwdheRmd3sfJ/WgTMdn4cZpPaQ43 IL66MLrXlmtmmfQn8HEF++12f3z2ngjLGbi7zZeFR9ZGqApp5GNwDa62H7k1/r6JsR5ra7LE0c5sN IAacyFIB2iap7FUfQbutFSEYRLI3D8AmMSTi6fA+lbGkg8pUmmPX2prMUBxvvkfp4eG9eA2xkzcQQ 9nSecpsx3B2avNoafaKbm6JMmS80QwjraxpvoRq4EHtYYhvDVC0uHUW6miq+844sRCLcLKAxQ4Ha9 1+KFCPNJw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4RiQ-0005UI-Q4; Tue, 26 Jan 2021 17:01:18 +0000 Received: from metis.ext.pengutronix.de ([85.220.165.71]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l4RiI-0005R9-JL for linux-arm-kernel@lists.infradead.org; Tue, 26 Jan 2021 17:01:11 +0000 Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l4Rg8-00045r-5B; Tue, 26 Jan 2021 17:58:56 +0100 Received: from ukl by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1l4Rg4-0003he-5G; Tue, 26 Jan 2021 17:58:52 +0100 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Russell King , Greg Kroah-Hartman Subject: [PATCH v3 2/5] amba: reorder functions Date: Tue, 26 Jan 2021 17:58:32 +0100 Message-Id: <20210126165835.687514-3-u.kleine-koenig@pengutronix.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210126165835.687514-1-u.kleine-koenig@pengutronix.de> References: <20210126165835.687514-1-u.kleine-koenig@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: ukl@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-20210126_120110_668902_632F5C7B X-CRM114-Status: GOOD ( 19.95 ) 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: linux-arm-kernel@lists.infradead.org, Ulf Hansson , Arnd Bergmann , linux-kernel@vger.kernel.org, kernel@pengutronix.de 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 UHV0IGhlbHBlcnMgKGhlcmU6IGFtYmFfZ2V0X2VuYWJsZV9wY2xrIGFuZCBhbWJhX3B1dF9kaXNh YmxlX3BjbGspIGF0CnRoZSB0b3Agb2YgdGhlIGZpbGUgYW5kIHRoZW4gZGVmaW5lIGNhbGxiYWNr cyBkaXJlY3RseSBiZWZvcmUgdGhlCnN0cnVjdHMgdGhleSBhcmUgdXNlZCBpbjsgaW4gdGhlIHNh bWUgb3JkZXIuCgpSZXZpZXdlZC1ieTogVWxmIEhhbnNzb24gPHVsZi5oYW5zc29uQGxpbmFyby5v cmc+ClJldmlld2VkLWJ5OiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgpTaWduZWQtb2Zm LWJ5OiBVd2UgS2xlaW5lLUvDtm5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgot LS0KIGRyaXZlcnMvYW1iYS9idXMuYyB8IDc3ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzOSBpbnNlcnRpb25zKCspLCAzOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FtYmEvYnVzLmMgYi9kcml2ZXJzL2Ft YmEvYnVzLmMKaW5kZXggYjVmNWNhNGUzZjM0Li44YzRhNDJkZjQ3YzYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvYW1iYS9idXMuYworKysgYi9kcml2ZXJzL2FtYmEvYnVzLmMKQEAgLTU2LDMxICs1Niwy OCBAQCBhbWJhX2xvb2t1cChjb25zdCBzdHJ1Y3QgYW1iYV9pZCAqdGFibGUsIHN0cnVjdCBhbWJh X2RldmljZSAqZGV2KQogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGFtYmFfbWF0Y2go c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQorc3RhdGljIGlu dCBhbWJhX2dldF9lbmFibGVfcGNsayhzdHJ1Y3QgYW1iYV9kZXZpY2UgKnBjZGV2KQogewotCXN0 cnVjdCBhbWJhX2RldmljZSAqcGNkZXYgPSB0b19hbWJhX2RldmljZShkZXYpOwotCXN0cnVjdCBh bWJhX2RyaXZlciAqcGNkcnYgPSB0b19hbWJhX2RyaXZlcihkcnYpOworCWludCByZXQ7CiAKLQkv KiBXaGVuIGRyaXZlcl9vdmVycmlkZSBpcyBzZXQsIG9ubHkgYmluZCB0byB0aGUgbWF0Y2hpbmcg ZHJpdmVyICovCi0JaWYgKHBjZGV2LT5kcml2ZXJfb3ZlcnJpZGUpCi0JCXJldHVybiAhc3RyY21w KHBjZGV2LT5kcml2ZXJfb3ZlcnJpZGUsIGRydi0+bmFtZSk7CisJcGNkZXYtPnBjbGsgPSBjbGtf Z2V0KCZwY2Rldi0+ZGV2LCAiYXBiX3BjbGsiKTsKKwlpZiAoSVNfRVJSKHBjZGV2LT5wY2xrKSkK KwkJcmV0dXJuIFBUUl9FUlIocGNkZXYtPnBjbGspOwogCi0JcmV0dXJuIGFtYmFfbG9va3VwKHBj ZHJ2LT5pZF90YWJsZSwgcGNkZXYpICE9IE5VTEw7CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KHBjZGV2LT5wY2xrKTsKKwlpZiAocmV0KQorCQljbGtfcHV0KHBjZGV2LT5wY2xrKTsKKworCXJl dHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYW1iYV91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCitzdGF0aWMgdm9pZCBhbWJhX3B1dF9kaXNh YmxlX3BjbGsoc3RydWN0IGFtYmFfZGV2aWNlICpwY2RldikKIHsKLQlzdHJ1Y3QgYW1iYV9kZXZp Y2UgKnBjZGV2ID0gdG9fYW1iYV9kZXZpY2UoZGV2KTsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXJl dHZhbCA9IGFkZF91ZXZlbnRfdmFyKGVudiwgIkFNQkFfSUQ9JTA4eCIsIHBjZGV2LT5wZXJpcGhp ZCk7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCXJldHZhbCA9IGFkZF91ZXZl bnRfdmFyKGVudiwgIk1PREFMSUFTPWFtYmE6ZCUwOFgiLCBwY2Rldi0+cGVyaXBoaWQpOwotCXJl dHVybiByZXR2YWw7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBjZGV2LT5wY2xrKTsKKwljbGtf cHV0KHBjZGV2LT5wY2xrKTsKIH0KIAorCiBzdGF0aWMgc3NpemVfdCBkcml2ZXJfb3ZlcnJpZGVf c2hvdyhzdHJ1Y3QgZGV2aWNlICpfZGV2LAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0 ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMTUyLDYgKzE0OSwzMSBAQCBzdGF0aWMgc3RydWN0 IGF0dHJpYnV0ZSAqYW1iYV9kZXZfYXR0cnNbXSA9IHsKIH07CiBBVFRSSUJVVEVfR1JPVVBTKGFt YmFfZGV2KTsKIAorc3RhdGljIGludCBhbWJhX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgYW1iYV9kZXZpY2UgKnBjZGV2ID0g dG9fYW1iYV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYW1iYV9kcml2ZXIgKnBjZHJ2ID0gdG9fYW1i YV9kcml2ZXIoZHJ2KTsKKworCS8qIFdoZW4gZHJpdmVyX292ZXJyaWRlIGlzIHNldCwgb25seSBi aW5kIHRvIHRoZSBtYXRjaGluZyBkcml2ZXIgKi8KKwlpZiAocGNkZXYtPmRyaXZlcl9vdmVycmlk ZSkKKwkJcmV0dXJuICFzdHJjbXAocGNkZXYtPmRyaXZlcl9vdmVycmlkZSwgZHJ2LT5uYW1lKTsK KworCXJldHVybiBhbWJhX2xvb2t1cChwY2Rydi0+aWRfdGFibGUsIHBjZGV2KSAhPSBOVUxMOwor fQorCitzdGF0aWMgaW50IGFtYmFfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtv YmpfdWV2ZW50X2VudiAqZW52KQoreworCXN0cnVjdCBhbWJhX2RldmljZSAqcGNkZXYgPSB0b19h bWJhX2RldmljZShkZXYpOworCWludCByZXR2YWwgPSAwOworCisJcmV0dmFsID0gYWRkX3VldmVu dF92YXIoZW52LCAiQU1CQV9JRD0lMDh4IiwgcGNkZXYtPnBlcmlwaGlkKTsKKwlpZiAocmV0dmFs KQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gYWRkX3VldmVudF92YXIoZW52LCAiTU9E QUxJQVM9YW1iYTpkJTA4WCIsIHBjZGV2LT5wZXJpcGhpZCk7CisJcmV0dXJuIHJldHZhbDsKK30K KwogI2lmZGVmIENPTkZJR19QTQogLyoKICAqIEhvb2tzIHRvIHByb3ZpZGUgcnVudGltZSBQTSBv ZiB0aGUgcGNsayAoYnVzIGNsb2NrKS4gIEl0IGlzIHNhZmUgdG8KQEAgLTIyOSwyNyArMjUxLDYg QEAgc3RhdGljIGludCBfX2luaXQgYW1iYV9pbml0KHZvaWQpCiAKIHBvc3Rjb3JlX2luaXRjYWxs KGFtYmFfaW5pdCk7CiAKLXN0YXRpYyBpbnQgYW1iYV9nZXRfZW5hYmxlX3BjbGsoc3RydWN0IGFt YmFfZGV2aWNlICpwY2RldikKLXsKLQlpbnQgcmV0OwotCi0JcGNkZXYtPnBjbGsgPSBjbGtfZ2V0 KCZwY2Rldi0+ZGV2LCAiYXBiX3BjbGsiKTsKLQlpZiAoSVNfRVJSKHBjZGV2LT5wY2xrKSkKLQkJ cmV0dXJuIFBUUl9FUlIocGNkZXYtPnBjbGspOwotCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KHBjZGV2LT5wY2xrKTsKLQlpZiAocmV0KQotCQljbGtfcHV0KHBjZGV2LT5wY2xrKTsKLQotCXJl dHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGFtYmFfcHV0X2Rpc2FibGVfcGNsayhzdHJ1Y3Qg YW1iYV9kZXZpY2UgKnBjZGV2KQotewotCWNsa19kaXNhYmxlX3VucHJlcGFyZShwY2Rldi0+cGNs ayk7Ci0JY2xrX3B1dChwY2Rldi0+cGNsayk7Ci19Ci0KIC8qCiAgKiBUaGVzZSBhcmUgdGhlIGRl dmljZSBtb2RlbCBjb252ZXJzaW9uIHZlbmVlcnM7IHRoZXkgY29udmVydCB0aGUKICAqIGRldmlj ZSBtb2RlbCBzdHJ1Y3R1cmVzIHRvIG91ciBtb3JlIHNwZWNpZmljIHN0cnVjdHVyZXMuCi0tIAoy LjI5LjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==