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.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,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 BEDCEC433E7 for ; Wed, 2 Sep 2020 14:45:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9595F2083B for ; Wed, 2 Sep 2020 14:45:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1599057903; bh=EcQ+ex7Lr+tapMUpbMG4dyA5GZ37BcgwgwzhLMOf6ZU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=wPSMEExqLZnB4UDzMrMPhOlXOr6jXOZFNK5Tgxcf2zGcnKdZ4SrKy0Odj0GRInsp+ Fpxpe/Ft+oys5k9yKH1VtF+stse8+w0roAicP4cYv0z/ib2fu71e+qNkxBPCp9CHiJ TiEOa4nYCsxknamVQe6cbQ5PU1RkWUfHuyHcIve0= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726762AbgIBOpA (ORCPT ); Wed, 2 Sep 2020 10:45:00 -0400 Received: from mail.kernel.org ([198.145.29.99]:59206 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727943AbgIBOo2 (ORCPT ); Wed, 2 Sep 2020 10:44:28 -0400 Received: from pali.im (pali.im [31.31.79.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id EB9722083B; Wed, 2 Sep 2020 14:44:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1599057848; bh=EcQ+ex7Lr+tapMUpbMG4dyA5GZ37BcgwgwzhLMOf6ZU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CTRZFZrhB6umHi8+1T6wc4Zvg6/zC6Icd5Fapwwh+5PPlSQIeEdQhMrRxc+648Ydr MOo4HYwPdP0694R6iZW1dybxkxnzIRAcglDk2MXL7gRVmYZx/OuUgwTylMR/35RTW6 S3LyKL0mcwF7Hpp3WHmKjVk7rHPiwNQ3ddVNhYpU= Received: by pali.im (Postfix) id 20D8BEF5; Wed, 2 Sep 2020 16:44:06 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Rob Herring , Bjorn Helgaas , Miquel Raynal , Kishon Vijay Abraham I , Vinod Koul , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Tomasz Maciej Nowak Cc: linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] phy: marvell: comphy: Convert internal SMCC firmware return codes to errno Date: Wed, 2 Sep 2020 16:43:43 +0200 Message-Id: <20200902144344.16684-2-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200902144344.16684-1-pali@kernel.org> References: <20200902144344.16684-1-pali@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Driver ->power_on and ->power_off callbacks leaks internal SMCC firmware return codes to phy caller. This patch converts SMCC error codes to standard linux errno codes. Include file linux/arm-smccc.h already provides defines for SMCC error codes, so use them instead of custom driver defines. Note that return value is signed 32bit, but stored in unsigned long type with zero padding. Signed-off-by: Pali Rohár --- drivers/phy/marvell/phy-mvebu-a3700-comphy.c | 14 +++++++++++--- drivers/phy/marvell/phy-mvebu-cp110-comphy.c | 14 +++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/phy/marvell/phy-mvebu-a3700-comphy.c b/drivers/phy/marvell/phy-mvebu-a3700-comphy.c index 1a138be8bd6a..810f25a47632 100644 --- a/drivers/phy/marvell/phy-mvebu-a3700-comphy.c +++ b/drivers/phy/marvell/phy-mvebu-a3700-comphy.c @@ -26,7 +26,6 @@ #define COMPHY_SIP_POWER_ON 0x82000001 #define COMPHY_SIP_POWER_OFF 0x82000002 #define COMPHY_SIP_PLL_LOCK 0x82000003 -#define COMPHY_FW_NOT_SUPPORTED (-1) #define COMPHY_FW_MODE_SATA 0x1 #define COMPHY_FW_MODE_SGMII 0x2 @@ -112,10 +111,19 @@ static int mvebu_a3700_comphy_smc(unsigned long function, unsigned long lane, unsigned long mode) { struct arm_smccc_res res; + s32 ret; arm_smccc_smc(function, lane, mode, 0, 0, 0, 0, 0, &res); + ret = res.a0; - return res.a0; + switch (ret) { + case SMCCC_RET_SUCCESS: + return 0; + case SMCCC_RET_NOT_SUPPORTED: + return -EOPNOTSUPP; + default: + return -EINVAL; + } } static int mvebu_a3700_comphy_get_fw_mode(int lane, int port, @@ -220,7 +228,7 @@ static int mvebu_a3700_comphy_power_on(struct phy *phy) } ret = mvebu_a3700_comphy_smc(COMPHY_SIP_POWER_ON, lane->id, fw_param); - if (ret == COMPHY_FW_NOT_SUPPORTED) + if (ret == -EOPNOTSUPP) dev_err(lane->dev, "unsupported SMC call, try updating your firmware\n"); diff --git a/drivers/phy/marvell/phy-mvebu-cp110-comphy.c b/drivers/phy/marvell/phy-mvebu-cp110-comphy.c index e41367f36ee1..53ad127b100f 100644 --- a/drivers/phy/marvell/phy-mvebu-cp110-comphy.c +++ b/drivers/phy/marvell/phy-mvebu-cp110-comphy.c @@ -123,7 +123,6 @@ #define COMPHY_SIP_POWER_ON 0x82000001 #define COMPHY_SIP_POWER_OFF 0x82000002 -#define COMPHY_FW_NOT_SUPPORTED (-1) /* * A lane is described by the following bitfields: @@ -273,10 +272,19 @@ static int mvebu_comphy_smc(unsigned long function, unsigned long phys, unsigned long lane, unsigned long mode) { struct arm_smccc_res res; + s32 ret; arm_smccc_smc(function, phys, lane, mode, 0, 0, 0, 0, &res); + ret = res.a0; - return res.a0; + switch (ret) { + case SMCCC_RET_SUCCESS: + return 0; + case SMCCC_RET_NOT_SUPPORTED: + return -EOPNOTSUPP; + default: + return -EINVAL; + } } static int mvebu_comphy_get_mode(bool fw_mode, int lane, int port, @@ -819,7 +827,7 @@ static int mvebu_comphy_power_on(struct phy *phy) if (!ret) return ret; - if (ret == COMPHY_FW_NOT_SUPPORTED) + if (ret == -EOPNOTSUPP) dev_err(priv->dev, "unsupported SMC call, try updating your firmware\n"); -- 2.20.1 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.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,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 2A026C433E2 for ; Wed, 2 Sep 2020 14:57:18 +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 EB32F2083B for ; Wed, 2 Sep 2020 14:57:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="J+oGV6Nc"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="CTRZFZrh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EB32F2083B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org 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=nORZT2104yOq6ucm0DP4EUC8DASnVV9ya5lnEHI/kOk=; b=J+oGV6Nc0oGbhv5Iw8J+O7knf 3P11VELICZkCNv9PEPaduOV/fiT9ZDrv7nmdtb374XyKTkVlEp644+l5wVicPzrDKsqjnLVHEjQxl xx/+pjZgtQTK907yfjquvaup9O//SA1IDrAv8NNSg0zAYYUm0cReqa5yUTHG2RU9IjLwdQjlhtcNC FUeXa/LtbxG53Jvil+VNDjFO24if2xaYRN6YKfxHnBHsfzutTPNpWaZS/02WXi5LNw4n8B8SGMcKf 69DPMzCbsURdmg1z6VQeYiBaI7GTMlb+EpFtaylzmw47qC6JpyfYUGhuuUzvHXzXWN71D0Il1O+Hl Wg8/DJDGg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kDTzh-0000Mp-U5; Wed, 02 Sep 2020 14:44:13 +0000 Received: from mail.kernel.org ([198.145.29.99]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kDTzd-0000LZ-8Q for linux-arm-kernel@lists.infradead.org; Wed, 02 Sep 2020 14:44:10 +0000 Received: from pali.im (pali.im [31.31.79.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id EB9722083B; Wed, 2 Sep 2020 14:44:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1599057848; bh=EcQ+ex7Lr+tapMUpbMG4dyA5GZ37BcgwgwzhLMOf6ZU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CTRZFZrhB6umHi8+1T6wc4Zvg6/zC6Icd5Fapwwh+5PPlSQIeEdQhMrRxc+648Ydr MOo4HYwPdP0694R6iZW1dybxkxnzIRAcglDk2MXL7gRVmYZx/OuUgwTylMR/35RTW6 S3LyKL0mcwF7Hpp3WHmKjVk7rHPiwNQ3ddVNhYpU= Received: by pali.im (Postfix) id 20D8BEF5; Wed, 2 Sep 2020 16:44:06 +0200 (CEST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Lorenzo Pieralisi , Rob Herring , Bjorn Helgaas , Miquel Raynal , Kishon Vijay Abraham I , Vinod Koul , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Tomasz Maciej Nowak Subject: [PATCH 1/2] phy: marvell: comphy: Convert internal SMCC firmware return codes to errno Date: Wed, 2 Sep 2020 16:43:43 +0200 Message-Id: <20200902144344.16684-2-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200902144344.16684-1-pali@kernel.org> References: <20200902144344.16684-1-pali@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200902_104409_418465_66488762 X-CRM114-Status: GOOD ( 15.92 ) 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-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org 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 RHJpdmVyIC0+cG93ZXJfb24gYW5kIC0+cG93ZXJfb2ZmIGNhbGxiYWNrcyBsZWFrcyBpbnRlcm5h bCBTTUNDIGZpcm13YXJlCnJldHVybiBjb2RlcyB0byBwaHkgY2FsbGVyLiBUaGlzIHBhdGNoIGNv bnZlcnRzIFNNQ0MgZXJyb3IgY29kZXMgdG8Kc3RhbmRhcmQgbGludXggZXJybm8gY29kZXMuIElu Y2x1ZGUgZmlsZSBsaW51eC9hcm0tc21jY2MuaCBhbHJlYWR5IHByb3ZpZGVzCmRlZmluZXMgZm9y IFNNQ0MgZXJyb3IgY29kZXMsIHNvIHVzZSB0aGVtIGluc3RlYWQgb2YgY3VzdG9tIGRyaXZlciBk ZWZpbmVzLgpOb3RlIHRoYXQgcmV0dXJuIHZhbHVlIGlzIHNpZ25lZCAzMmJpdCwgYnV0IHN0b3Jl ZCBpbiB1bnNpZ25lZCBsb25nIHR5cGUKd2l0aCB6ZXJvIHBhZGRpbmcuCgpTaWduZWQtb2ZmLWJ5 OiBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvcGh5L21hcnZlbGwv cGh5LW12ZWJ1LWEzNzAwLWNvbXBoeS5jIHwgMTQgKysrKysrKysrKystLS0KIGRyaXZlcnMvcGh5 L21hcnZlbGwvcGh5LW12ZWJ1LWNwMTEwLWNvbXBoeS5jIHwgMTQgKysrKysrKysrKystLS0KIDIg ZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVidS1hMzcwMC1jb21waHkuYyBiL2RyaXZl cnMvcGh5L21hcnZlbGwvcGh5LW12ZWJ1LWEzNzAwLWNvbXBoeS5jCmluZGV4IDFhMTM4YmU4YmQ2 YS4uODEwZjI1YTQ3NjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVi dS1hMzcwMC1jb21waHkuYworKysgYi9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVidS1hMzcw MC1jb21waHkuYwpAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBDT01QSFlfU0lQX1BPV0VSX09O CQkJMHg4MjAwMDAwMQogI2RlZmluZSBDT01QSFlfU0lQX1BPV0VSX09GRgkJCTB4ODIwMDAwMDIK ICNkZWZpbmUgQ09NUEhZX1NJUF9QTExfTE9DSwkJCTB4ODIwMDAwMDMKLSNkZWZpbmUgQ09NUEhZ X0ZXX05PVF9TVVBQT1JURUQJCQkoLTEpCiAKICNkZWZpbmUgQ09NUEhZX0ZXX01PREVfU0FUQQkJ CTB4MQogI2RlZmluZSBDT01QSFlfRldfTU9ERV9TR01JSQkJCTB4MgpAQCAtMTEyLDEwICsxMTEs MTkgQEAgc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfc21jKHVuc2lnbmVkIGxvbmcgZnVu Y3Rpb24sIHVuc2lnbmVkIGxvbmcgbGFuZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsK IAlzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7CisJczMyIHJldDsKIAogCWFybV9zbWNjY19zbWMo ZnVuY3Rpb24sIGxhbmUsIG1vZGUsIDAsIDAsIDAsIDAsIDAsICZyZXMpOworCXJldCA9IHJlcy5h MDsKIAotCXJldHVybiByZXMuYTA7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIFNNQ0NDX1JFVF9T VUNDRVNTOgorCQlyZXR1cm4gMDsKKwljYXNlIFNNQ0NDX1JFVF9OT1RfU1VQUE9SVEVEOgorCQly ZXR1cm4gLUVPUE5PVFNVUFA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogfQog CiBzdGF0aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9nZXRfZndfbW9kZShpbnQgbGFuZSwgaW50 IHBvcnQsCkBAIC0yMjAsNyArMjI4LDcgQEAgc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlf cG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQogCX0KIAogCXJldCA9IG12ZWJ1X2EzNzAwX2NvbXBo eV9zbWMoQ09NUEhZX1NJUF9QT1dFUl9PTiwgbGFuZS0+aWQsIGZ3X3BhcmFtKTsKLQlpZiAocmV0 ID09IENPTVBIWV9GV19OT1RfU1VQUE9SVEVEKQorCWlmIChyZXQgPT0gLUVPUE5PVFNVUFApCiAJ CWRldl9lcnIobGFuZS0+ZGV2LAogCQkJInVuc3VwcG9ydGVkIFNNQyBjYWxsLCB0cnkgdXBkYXRp bmcgeW91ciBmaXJtd2FyZVxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21hcnZlbGwv cGh5LW12ZWJ1LWNwMTEwLWNvbXBoeS5jIGIvZHJpdmVycy9waHkvbWFydmVsbC9waHktbXZlYnUt Y3AxMTAtY29tcGh5LmMKaW5kZXggZTQxMzY3ZjM2ZWUxLi41M2FkMTI3YjEwMGYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvcGh5L21hcnZlbGwvcGh5LW12ZWJ1LWNwMTEwLWNvbXBoeS5jCisrKyBiL2Ry aXZlcnMvcGh5L21hcnZlbGwvcGh5LW12ZWJ1LWNwMTEwLWNvbXBoeS5jCkBAIC0xMjMsNyArMTIz LDYgQEAKIAogI2RlZmluZSBDT01QSFlfU0lQX1BPV0VSX09OCTB4ODIwMDAwMDEKICNkZWZpbmUg Q09NUEhZX1NJUF9QT1dFUl9PRkYJMHg4MjAwMDAwMgotI2RlZmluZSBDT01QSFlfRldfTk9UX1NV UFBPUlRFRAkoLTEpCiAKIC8qCiAgKiBBIGxhbmUgaXMgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dp bmcgYml0ZmllbGRzOgpAQCAtMjczLDEwICsyNzIsMTkgQEAgc3RhdGljIGludCBtdmVidV9jb21w aHlfc21jKHVuc2lnbmVkIGxvbmcgZnVuY3Rpb24sIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkJCSAg ICB1bnNpZ25lZCBsb25nIGxhbmUsIHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKIAlzdHJ1Y3QgYXJt X3NtY2NjX3JlcyByZXM7CisJczMyIHJldDsKIAogCWFybV9zbWNjY19zbWMoZnVuY3Rpb24sIHBo eXMsIGxhbmUsIG1vZGUsIDAsIDAsIDAsIDAsICZyZXMpOworCXJldCA9IHJlcy5hMDsKIAotCXJl dHVybiByZXMuYTA7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIFNNQ0NDX1JFVF9TVUNDRVNTOgor CQlyZXR1cm4gMDsKKwljYXNlIFNNQ0NDX1JFVF9OT1RfU1VQUE9SVEVEOgorCQlyZXR1cm4gLUVP UE5PVFNVUFA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogfQogCiBzdGF0aWMg aW50IG12ZWJ1X2NvbXBoeV9nZXRfbW9kZShib29sIGZ3X21vZGUsIGludCBsYW5lLCBpbnQgcG9y dCwKQEAgLTgxOSw3ICs4MjcsNyBAQCBzdGF0aWMgaW50IG12ZWJ1X2NvbXBoeV9wb3dlcl9vbihz dHJ1Y3QgcGh5ICpwaHkpCiAJaWYgKCFyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAocmV0ID09 IENPTVBIWV9GV19OT1RfU1VQUE9SVEVEKQorCWlmIChyZXQgPT0gLUVPUE5PVFNVUFApCiAJCWRl dl9lcnIocHJpdi0+ZGV2LAogCQkJInVuc3VwcG9ydGVkIFNNQyBjYWxsLCB0cnkgdXBkYXRpbmcg eW91ciBmaXJtd2FyZVxuIik7CiAKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK