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.0 required=3.0 tests=BAYES_00,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 6EE75C43331 for ; Wed, 20 Jan 2021 22:12:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 464B2206ED for ; Wed, 20 Jan 2021 22:12:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730506AbhATVpm convert rfc822-to-8bit (ORCPT ); Wed, 20 Jan 2021 16:45:42 -0500 Received: from mail-ed1-f46.google.com ([209.85.208.46]:35327 "EHLO mail-ed1-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725268AbhATVSH (ORCPT ); Wed, 20 Jan 2021 16:18:07 -0500 Received: by mail-ed1-f46.google.com with SMTP id j13so31600edp.2; Wed, 20 Jan 2021 13:17:48 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=rfPZS+QeQ97OySN6yB+WvqXIkd4qMySlsw3yCmUzIn0=; b=nXC7JZWh9VRNMN43bViAsXPidqT6uW7CY8X10+ki6bbPwAoZR+Pvid3LT4mkvWjs8E fklymveCkYMOfsnu1xN85jgh2POqcZ1/MvsrWn469y5/D9y2gULzf8u51xAKn9AGaS5h NelkNSoSo6d1m/3MkJ9aVg43O+kIcAChryM51j5luT7+eoBg2hzCSWR04ZP/rdehQbNb T8bnNJwWknRoBL9/RkJkWfyHG17jRZMoAXajeqSl+uQQy1sayQsQHGS8L0pBFZyy6Aq0 ewcGWGAkALnLr9usSprr+xsVvMATMAeYfZzlLl0V1aaWS8wOdA5vIpvMHkhc8PdQOD2S Yi1A== X-Gm-Message-State: AOAM5322SirJ7mZOY1Fy4L/ysrOSpQvSqIvK7Tkeqt+h1xx3pj5Vjfhn Xpt3t1Gt+3S7E9Bee3HUDN28qW+ZeP5MeICBSTI= X-Google-Smtp-Source: ABdhPJxch6iulCnj74aXczbUuSVjxYnWRQqaSoZztFIQsQiEW9mnWjnGdTzPgkR3ue34ns5Q6vxS4Y10HnmlUMGkrTs= X-Received: by 2002:a50:fa86:: with SMTP id w6mr5419029edr.98.1611177443062; Wed, 20 Jan 2021 13:17:23 -0800 (PST) MIME-Version: 1.0 References: <20210120162745.61268-1-arnd@kernel.org> <20210120162745.61268-3-arnd@kernel.org> In-Reply-To: <20210120162745.61268-3-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:17:11 +1300 Message-ID: Subject: Re: [PATCH 2/5] watchdog: remove sirf atlas driver To: Arnd Bergmann Cc: linux-arm-kernel@lists.infradead.org, LKML , linux-watchdog@vger.kernel.org, Guenter Roeck , Wim Van Sebroeck , Arnd Bergmann Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Arnd Bergmann 于2021年1月21日周四 上午5:27写道: > > From: Arnd Bergmann > > The CSR SiRF prima2/atlas platforms are getting removed, so this driver > is no longer needed. > > Cc: Barry Song > Signed-off-by: Arnd Bergmann Acked-by: Barry Song > --- > drivers/watchdog/Kconfig | 10 -- > drivers/watchdog/Makefile | 1 - > drivers/watchdog/atlas7_wdt.c | 221 ---------------------------------- > 3 files changed, 232 deletions(-) > delete mode 100644 drivers/watchdog/atlas7_wdt.c > > diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig > index 88f4827849e4..5559e4325f6a 100644 > --- a/drivers/watchdog/Kconfig > +++ b/drivers/watchdog/Kconfig > @@ -890,16 +890,6 @@ config LPC18XX_WATCHDOG > To compile this driver as a module, choose M here: the > module will be called lpc18xx_wdt. > > -config ATLAS7_WATCHDOG > - tristate "CSRatlas7 watchdog" > - depends on ARCH_ATLAS7 || COMPILE_TEST > - help > - Say Y here to include Watchdog timer support for the watchdog > - existing on the CSRatlas7 series platforms. > - > - To compile this driver as a module, choose M here: the > - module will be called atlas7_wdt. > - > config RENESAS_WDT > tristate "Renesas WDT Watchdog" > depends on ARCH_RENESAS || COMPILE_TEST > diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile > index 1741ed3c6ce6..40b94403c487 100644 > --- a/drivers/watchdog/Makefile > +++ b/drivers/watchdog/Makefile > @@ -83,7 +83,6 @@ obj-$(CONFIG_MEDIATEK_WATCHDOG) += mtk_wdt.o > obj-$(CONFIG_DIGICOLOR_WATCHDOG) += digicolor_wdt.o > obj-$(CONFIG_LPC18XX_WATCHDOG) += lpc18xx_wdt.o > obj-$(CONFIG_BCM7038_WDT) += bcm7038_wdt.o > -obj-$(CONFIG_ATLAS7_WATCHDOG) += atlas7_wdt.o > obj-$(CONFIG_RENESAS_WDT) += renesas_wdt.o > obj-$(CONFIG_RENESAS_RZAWDT) += rza_wdt.o > obj-$(CONFIG_ASPEED_WATCHDOG) += aspeed_wdt.o > diff --git a/drivers/watchdog/atlas7_wdt.c b/drivers/watchdog/atlas7_wdt.c > deleted file mode 100644 > index 9bfe650d802f..000000000000 > --- a/drivers/watchdog/atlas7_wdt.c > +++ /dev/null > @@ -1,221 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-only > -/* > - * Watchdog driver for CSR Atlas7 > - * > - * Copyright (c) 2015 Cambridge Silicon Radio Limited, a CSR plc group company. > - */ > - > -#include > -#include > -#include > -#include > -#include > -#include > -#include > - > -#define ATLAS7_TIMER_WDT_INDEX 5 > -#define ATLAS7_WDT_DEFAULT_TIMEOUT 20 > - > -#define ATLAS7_WDT_CNT_CTRL (0 + 4 * ATLAS7_TIMER_WDT_INDEX) > -#define ATLAS7_WDT_CNT_MATCH (0x18 + 4 * ATLAS7_TIMER_WDT_INDEX) > -#define ATLAS7_WDT_CNT (0x48 + 4 * ATLAS7_TIMER_WDT_INDEX) > -#define ATLAS7_WDT_CNT_EN (BIT(0) | BIT(1)) > -#define ATLAS7_WDT_EN 0x64 > - > -static unsigned int timeout = ATLAS7_WDT_DEFAULT_TIMEOUT; > -static bool nowayout = WATCHDOG_NOWAYOUT; > - > -module_param(timeout, uint, 0); > -module_param(nowayout, bool, 0); > - > -MODULE_PARM_DESC(timeout, "Default watchdog timeout (in seconds)"); > -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" > - __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); > - > -struct atlas7_wdog { > - struct device *dev; > - void __iomem *base; > - unsigned long tick_rate; > - struct clk *clk; > -}; > - > -static unsigned int atlas7_wdt_gettimeleft(struct watchdog_device *wdd) > -{ > - struct atlas7_wdog *wdt = watchdog_get_drvdata(wdd); > - u32 counter, match, delta; > - > - counter = readl(wdt->base + ATLAS7_WDT_CNT); > - match = readl(wdt->base + ATLAS7_WDT_CNT_MATCH); > - delta = match - counter; > - > - return delta / wdt->tick_rate; > -} > - > -static int atlas7_wdt_ping(struct watchdog_device *wdd) > -{ > - struct atlas7_wdog *wdt = watchdog_get_drvdata(wdd); > - u32 counter, match, delta; > - > - counter = readl(wdt->base + ATLAS7_WDT_CNT); > - delta = wdd->timeout * wdt->tick_rate; > - match = counter + delta; > - > - writel(match, wdt->base + ATLAS7_WDT_CNT_MATCH); > - > - return 0; > -} > - > -static int atlas7_wdt_enable(struct watchdog_device *wdd) > -{ > - struct atlas7_wdog *wdt = watchdog_get_drvdata(wdd); > - > - atlas7_wdt_ping(wdd); > - > - writel(readl(wdt->base + ATLAS7_WDT_CNT_CTRL) | ATLAS7_WDT_CNT_EN, > - wdt->base + ATLAS7_WDT_CNT_CTRL); > - writel(1, wdt->base + ATLAS7_WDT_EN); > - > - return 0; > -} > - > -static int atlas7_wdt_disable(struct watchdog_device *wdd) > -{ > - struct atlas7_wdog *wdt = watchdog_get_drvdata(wdd); > - > - writel(0, wdt->base + ATLAS7_WDT_EN); > - writel(readl(wdt->base + ATLAS7_WDT_CNT_CTRL) & ~ATLAS7_WDT_CNT_EN, > - wdt->base + ATLAS7_WDT_CNT_CTRL); > - > - return 0; > -} > - > -static int atlas7_wdt_settimeout(struct watchdog_device *wdd, unsigned int to) > -{ > - wdd->timeout = to; > - > - return 0; > -} > - > -#define OPTIONS (WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE) > - > -static const struct watchdog_info atlas7_wdt_ident = { > - .options = OPTIONS, > - .firmware_version = 0, > - .identity = "atlas7 Watchdog", > -}; > - > -static const struct watchdog_ops atlas7_wdt_ops = { > - .owner = THIS_MODULE, > - .start = atlas7_wdt_enable, > - .stop = atlas7_wdt_disable, > - .get_timeleft = atlas7_wdt_gettimeleft, > - .ping = atlas7_wdt_ping, > - .set_timeout = atlas7_wdt_settimeout, > -}; > - > -static struct watchdog_device atlas7_wdd = { > - .info = &atlas7_wdt_ident, > - .ops = &atlas7_wdt_ops, > - .timeout = ATLAS7_WDT_DEFAULT_TIMEOUT, > -}; > - > -static const struct of_device_id atlas7_wdt_ids[] = { > - { .compatible = "sirf,atlas7-tick"}, > - {} > -}; > - > -static void atlas7_clk_disable_unprepare(void *data) > -{ > - clk_disable_unprepare(data); > -} > - > -static int atlas7_wdt_probe(struct platform_device *pdev) > -{ > - struct device *dev = &pdev->dev; > - struct atlas7_wdog *wdt; > - struct clk *clk; > - int ret; > - > - wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL); > - if (!wdt) > - return -ENOMEM; > - wdt->base = devm_platform_ioremap_resource(pdev, 0); > - if (IS_ERR(wdt->base)) > - return PTR_ERR(wdt->base); > - > - clk = devm_clk_get(dev, NULL); > - if (IS_ERR(clk)) > - return PTR_ERR(clk); > - ret = clk_prepare_enable(clk); > - if (ret) { > - dev_err(dev, "clk enable failed\n"); > - return ret; > - } > - ret = devm_add_action_or_reset(dev, atlas7_clk_disable_unprepare, clk); > - if (ret) > - return ret; > - > - /* disable watchdog hardware */ > - writel(0, wdt->base + ATLAS7_WDT_CNT_CTRL); > - > - wdt->tick_rate = clk_get_rate(clk); > - if (!wdt->tick_rate) > - return -EINVAL; > - > - wdt->clk = clk; > - atlas7_wdd.min_timeout = 1; > - atlas7_wdd.max_timeout = UINT_MAX / wdt->tick_rate; > - > - watchdog_init_timeout(&atlas7_wdd, 0, dev); > - watchdog_set_nowayout(&atlas7_wdd, nowayout); > - > - watchdog_set_drvdata(&atlas7_wdd, wdt); > - platform_set_drvdata(pdev, &atlas7_wdd); > - > - watchdog_stop_on_reboot(&atlas7_wdd); > - watchdog_stop_on_unregister(&atlas7_wdd); > - return devm_watchdog_register_device(dev, &atlas7_wdd); > -} > - > -static int __maybe_unused atlas7_wdt_suspend(struct device *dev) > -{ > - /* > - * NOTE:timer controller registers settings are saved > - * and restored back by the timer-atlas7.c > - */ > - return 0; > -} > - > -static int __maybe_unused atlas7_wdt_resume(struct device *dev) > -{ > - struct watchdog_device *wdd = dev_get_drvdata(dev); > - > - /* > - * NOTE: Since timer controller registers settings are saved > - * and restored back by the timer-atlas7.c, so we need not > - * update WD settings except refreshing timeout. > - */ > - atlas7_wdt_ping(wdd); > - > - return 0; > -} > - > -static SIMPLE_DEV_PM_OPS(atlas7_wdt_pm_ops, > - atlas7_wdt_suspend, atlas7_wdt_resume); > - > -MODULE_DEVICE_TABLE(of, atlas7_wdt_ids); > - > -static struct platform_driver atlas7_wdt_driver = { > - .driver = { > - .name = "atlas7-wdt", > - .pm = &atlas7_wdt_pm_ops, > - .of_match_table = atlas7_wdt_ids, > - }, > - .probe = atlas7_wdt_probe, > -}; > -module_platform_driver(atlas7_wdt_driver); > - > -MODULE_DESCRIPTION("CSRatlas7 watchdog driver"); > -MODULE_AUTHOR("Guo Zeng "); > -MODULE_LICENSE("GPL v2"); > -MODULE_ALIAS("platform:atlas7-wdt"); > -- > 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=-14.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,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 2238DC433E0 for ; Wed, 20 Jan 2021 21:23: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 BAD0823444 for ; Wed, 20 Jan 2021 21:22:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BAD0823444 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: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=cg3+aHo0nkzM5OaG8Z77m6Bp/w3e0zz45yXJ3RIZ6ak=; b=cFvhBdqnSXWUyRW+wwWFa4F7k mBRjfOrDgjrjeoUSLXeNYeHcCaVGI3548DqAROuMkeLVX7BkLGKfWY3qgenhw22DC9CwIylD+HP/f T2A/EXaUjDScrRr+c31YLWbpmc6OeQXGNVZlRas//fk5QAIZyRLOv2NEhxoxo96OSnoH8upJZuE0I JJ44VnJ4y8pE/+82OpQ9PomIRZ+9Cb8+D7O81bftxxDNI+7R9NpCmcdOfJU0eXq3WXzIyXRumuxkd VbX+wrPywTnQaRr4zWtVCwqwC7Dl4rsHDifPa89mxY45aCAXR4O47CTXrHl51872n63Qq7kPYiAjQ iGUiacflw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2KtT-0005Dn-7B; Wed, 20 Jan 2021 21:19:59 +0000 Received: from mail-ed1-f50.google.com ([209.85.208.50]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l2Kqy-00045z-Jv for linux-arm-kernel@lists.infradead.org; Wed, 20 Jan 2021 21:17:26 +0000 Received: by mail-ed1-f50.google.com with SMTP id s11so14261edd.5 for ; Wed, 20 Jan 2021 13:17:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=rfPZS+QeQ97OySN6yB+WvqXIkd4qMySlsw3yCmUzIn0=; b=PLTgeAgxnmi6RRJC3GXQ5fgiIOWfIMNoA6Gi+kUmlpnVSdqD1xXlBbNh55oo8AW/BV qeRiW9IK5lT0MJldXuVlQnFcOWMU4NSw+mMNqEAxIjggABAgJuKG+1e/m7zkxf9iIe9F /5JbdK3hhUEMwsYeKcmLGcr/TGykKGEQQTgROwHTHDCuFJuLpHmTq3jLwhAaOixc9iv4 asrSZp2nb5Fn9yzulCenOHbgPZVApCWnGpA56ciGsf0KvhiLn0iPQZer1a3QYJhRej5v JaWqRRig50X3YGh7YctIGWvpJFNiyLQ0/fq0Ur83FsoEdguh1ryTw0fNKGb8gS1eXeD6 35cw== X-Gm-Message-State: AOAM532lw14kuSzAfX0KYBNFLAzrnkncnWFCwjx/TJekSwg9TLgs28Ie NnDIS5wpS/UCUXjBczOsdBxgLGmQZZwKn6wL92E= X-Google-Smtp-Source: ABdhPJxch6iulCnj74aXczbUuSVjxYnWRQqaSoZztFIQsQiEW9mnWjnGdTzPgkR3ue34ns5Q6vxS4Y10HnmlUMGkrTs= X-Received: by 2002:a50:fa86:: with SMTP id w6mr5419029edr.98.1611177443062; Wed, 20 Jan 2021 13:17:23 -0800 (PST) MIME-Version: 1.0 References: <20210120162745.61268-1-arnd@kernel.org> <20210120162745.61268-3-arnd@kernel.org> In-Reply-To: <20210120162745.61268-3-arnd@kernel.org> From: Barry Song Date: Thu, 21 Jan 2021 10:17:11 +1300 Message-ID: Subject: Re: [PATCH 2/5] watchdog: remove sirf atlas driver To: Arnd Bergmann X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210120_161724_776041_42F9CD95 X-CRM114-Status: GOOD ( 25.37 ) 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-watchdog@vger.kernel.org, Arnd Bergmann , LKML , linux-arm-kernel@lists.infradead.org, Wim Van Sebroeck , Guenter Roeck 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 QXJuZCBCZXJnbWFubiA8YXJuZEBrZXJuZWwub3JnPiDkuo4yMDIx5bm0MeaciDIx5pel5ZGo5Zub IOS4iuWNiDU6MjflhpnpgZPvvJoKPgo+IEZyb206IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIu ZGU+Cj4KPiBUaGUgQ1NSIFNpUkYgcHJpbWEyL2F0bGFzIHBsYXRmb3JtcyBhcmUgZ2V0dGluZyBy ZW1vdmVkLCBzbyB0aGlzIGRyaXZlcgo+IGlzIG5vIGxvbmdlciBuZWVkZWQuCj4KPiBDYzogQmFy cnkgU29uZyA8YmFvaHVhQGtlcm5lbC5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQXJuZCBCZXJnbWFu biA8YXJuZEBhcm5kYi5kZT4KCkFja2VkLWJ5OiBCYXJyeSBTb25nIDxiYW9odWFAa2VybmVsLm9y Zz4KCj4gLS0tCj4gIGRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyAgICAgIHwgIDEwIC0tCj4gIGRy aXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUgICAgIHwgICAxIC0KPiAgZHJpdmVycy93YXRjaGRvZy9h dGxhczdfd2R0LmMgfCAyMjEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAz IGZpbGVzIGNoYW5nZWQsIDIzMiBkZWxldGlvbnMoLSkKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvd2F0Y2hkb2cvYXRsYXM3X3dkdC5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRj aGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCj4gaW5kZXggODhmNDgyNzg0 OWU0Li41NTU5ZTQzMjVmNmEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmln Cj4gKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCj4gQEAgLTg5MCwxNiArODkwLDYgQEAg Y29uZmlnIExQQzE4WFhfV0FUQ0hET0cKPiAgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZl ciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCj4gICAgICAgICAgIG1vZHVsZSB3aWxs IGJlIGNhbGxlZCBscGMxOHh4X3dkdC4KPgo+IC1jb25maWcgQVRMQVM3X1dBVENIRE9HCj4gLSAg ICAgICB0cmlzdGF0ZSAiQ1NSYXRsYXM3IHdhdGNoZG9nIgo+IC0gICAgICAgZGVwZW5kcyBvbiBB UkNIX0FUTEFTNyB8fCBDT01QSUxFX1RFU1QKPiAtICAgICAgIGhlbHAKPiAtICAgICAgICAgU2F5 IFkgaGVyZSB0byBpbmNsdWRlIFdhdGNoZG9nIHRpbWVyIHN1cHBvcnQgZm9yIHRoZSB3YXRjaGRv Zwo+IC0gICAgICAgICBleGlzdGluZyBvbiB0aGUgQ1NSYXRsYXM3IHNlcmllcyBwbGF0Zm9ybXMu Cj4gLQo+IC0gICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9v c2UgTSBoZXJlOiB0aGUKPiAtICAgICAgICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGF0bGFzN193 ZHQuCj4gLQo+ICBjb25maWcgUkVORVNBU19XRFQKPiAgICAgICAgIHRyaXN0YXRlICJSZW5lc2Fz IFdEVCBXYXRjaGRvZyIKPiAgICAgICAgIGRlcGVuZHMgb24gQVJDSF9SRU5FU0FTIHx8IENPTVBJ TEVfVEVTVAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlIGIvZHJpdmVy cy93YXRjaGRvZy9NYWtlZmlsZQo+IGluZGV4IDE3NDFlZDNjNmNlNi4uNDBiOTQ0MDNjNDg3IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3dh dGNoZG9nL01ha2VmaWxlCj4gQEAgLTgzLDcgKzgzLDYgQEAgb2JqLSQoQ09ORklHX01FRElBVEVL X1dBVENIRE9HKSArPSBtdGtfd2R0Lm8KPiAgb2JqLSQoQ09ORklHX0RJR0lDT0xPUl9XQVRDSERP RykgKz0gZGlnaWNvbG9yX3dkdC5vCj4gIG9iai0kKENPTkZJR19MUEMxOFhYX1dBVENIRE9HKSAr PSBscGMxOHh4X3dkdC5vCj4gIG9iai0kKENPTkZJR19CQ003MDM4X1dEVCkgKz0gYmNtNzAzOF93 ZHQubwo+IC1vYmotJChDT05GSUdfQVRMQVM3X1dBVENIRE9HKSArPSBhdGxhczdfd2R0Lm8KPiAg b2JqLSQoQ09ORklHX1JFTkVTQVNfV0RUKSArPSByZW5lc2FzX3dkdC5vCj4gIG9iai0kKENPTkZJ R19SRU5FU0FTX1JaQVdEVCkgKz0gcnphX3dkdC5vCj4gIG9iai0kKENPTkZJR19BU1BFRURfV0FU Q0hET0cpICs9IGFzcGVlZF93ZHQubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2F0 bGFzN193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXRsYXM3X3dkdC5jCj4gZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggOWJmZTY1MGQ4MDJmLi4wMDAwMDAwMDAwMDAKPiAtLS0gYS9k cml2ZXJzL3dhdGNoZG9nL2F0bGFzN193ZHQuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwyMjEg KzAsMCBAQAo+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gLS8q Cj4gLSAqIFdhdGNoZG9nIGRyaXZlciBmb3IgQ1NSIEF0bGFzNwo+IC0gKgo+IC0gKiBDb3B5cmln aHQgKGMpIDIwMTUgQ2FtYnJpZGdlIFNpbGljb24gUmFkaW8gTGltaXRlZCwgYSBDU1IgcGxjIGdy b3VwIGNvbXBhbnkuCj4gLSAqLwo+IC0KPiAtI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+IC0jaW5j bHVkZSA8bGludXgvaW8uaD4KPiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+IC0jaW5jbHVk ZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KPiAtI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gLSNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9n Lmg+Cj4gLQo+IC0jZGVmaW5lIEFUTEFTN19USU1FUl9XRFRfSU5ERVggICAgICAgICA1Cj4gLSNk ZWZpbmUgQVRMQVM3X1dEVF9ERUZBVUxUX1RJTUVPVVQgICAgIDIwCj4gLQo+IC0jZGVmaW5lIEFU TEFTN19XRFRfQ05UX0NUUkwgICAgKDAgKyA0ICogQVRMQVM3X1RJTUVSX1dEVF9JTkRFWCkKPiAt I2RlZmluZSBBVExBUzdfV0RUX0NOVF9NQVRDSCAgICgweDE4ICsgNCAqIEFUTEFTN19USU1FUl9X RFRfSU5ERVgpCj4gLSNkZWZpbmUgQVRMQVM3X1dEVF9DTlQgICAgICAgICAoMHg0OCArICA0ICog QVRMQVM3X1RJTUVSX1dEVF9JTkRFWCkKPiAtI2RlZmluZSBBVExBUzdfV0RUX0NOVF9FTiAgICAg IChCSVQoMCkgfCBCSVQoMSkpCj4gLSNkZWZpbmUgQVRMQVM3X1dEVF9FTiAgICAgICAgICAweDY0 Cj4gLQo+IC1zdGF0aWMgdW5zaWduZWQgaW50IHRpbWVvdXQgPSBBVExBUzdfV0RUX0RFRkFVTFRf VElNRU9VVDsKPiAtc3RhdGljIGJvb2wgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKPiAt Cj4gLW1vZHVsZV9wYXJhbSh0aW1lb3V0LCB1aW50LCAwKTsKPiAtbW9kdWxlX3BhcmFtKG5vd2F5 b3V0LCBib29sLCAwKTsKPiAtCj4gLU1PRFVMRV9QQVJNX0RFU0ModGltZW91dCwgIkRlZmF1bHQg d2F0Y2hkb2cgdGltZW91dCAoaW4gc2Vjb25kcykiKTsKPiAtTU9EVUxFX1BBUk1fREVTQyhub3dh eW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0i Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZ T1VUKSAiKSIpOwo+IC0KPiAtc3RydWN0IGF0bGFzN193ZG9nIHsKPiAtICAgICAgIHN0cnVjdCBk ZXZpY2UgKmRldjsKPiAtICAgICAgIHZvaWQgX19pb21lbSAqYmFzZTsKPiAtICAgICAgIHVuc2ln bmVkIGxvbmcgdGlja19yYXRlOwo+IC0gICAgICAgc3RydWN0IGNsayAqY2xrOwo+IC19Owo+IC0K PiAtc3RhdGljIHVuc2lnbmVkIGludCBhdGxhczdfd2R0X2dldHRpbWVsZWZ0KHN0cnVjdCB3YXRj aGRvZ19kZXZpY2UgKndkZCkKPiAtewo+IC0gICAgICAgc3RydWN0IGF0bGFzN193ZG9nICp3ZHQg PSB3YXRjaGRvZ19nZXRfZHJ2ZGF0YSh3ZGQpOwo+IC0gICAgICAgdTMyIGNvdW50ZXIsIG1hdGNo LCBkZWx0YTsKPiAtCj4gLSAgICAgICBjb3VudGVyID0gcmVhZGwod2R0LT5iYXNlICsgQVRMQVM3 X1dEVF9DTlQpOwo+IC0gICAgICAgbWF0Y2ggPSByZWFkbCh3ZHQtPmJhc2UgKyBBVExBUzdfV0RU X0NOVF9NQVRDSCk7Cj4gLSAgICAgICBkZWx0YSA9IG1hdGNoIC0gY291bnRlcjsKPiAtCj4gLSAg ICAgICByZXR1cm4gIGRlbHRhIC8gd2R0LT50aWNrX3JhdGU7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bnQgYXRsYXM3X3dkdF9waW5nKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkZCkKPiAtewo+IC0g ICAgICAgc3RydWN0IGF0bGFzN193ZG9nICp3ZHQgPSB3YXRjaGRvZ19nZXRfZHJ2ZGF0YSh3ZGQp Owo+IC0gICAgICAgdTMyIGNvdW50ZXIsIG1hdGNoLCBkZWx0YTsKPiAtCj4gLSAgICAgICBjb3Vu dGVyID0gcmVhZGwod2R0LT5iYXNlICsgQVRMQVM3X1dEVF9DTlQpOwo+IC0gICAgICAgZGVsdGEg PSB3ZGQtPnRpbWVvdXQgKiB3ZHQtPnRpY2tfcmF0ZTsKPiAtICAgICAgIG1hdGNoID0gY291bnRl ciArIGRlbHRhOwo+IC0KPiAtICAgICAgIHdyaXRlbChtYXRjaCwgd2R0LT5iYXNlICsgQVRMQVM3 X1dEVF9DTlRfTUFUQ0gpOwo+IC0KPiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW50IGF0bGFzN193ZHRfZW5hYmxlKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkZCkKPiAt ewo+IC0gICAgICAgc3RydWN0IGF0bGFzN193ZG9nICp3ZHQgPSB3YXRjaGRvZ19nZXRfZHJ2ZGF0 YSh3ZGQpOwo+IC0KPiAtICAgICAgIGF0bGFzN193ZHRfcGluZyh3ZGQpOwo+IC0KPiAtICAgICAg IHdyaXRlbChyZWFkbCh3ZHQtPmJhc2UgKyBBVExBUzdfV0RUX0NOVF9DVFJMKSB8IEFUTEFTN19X RFRfQ05UX0VOLAo+IC0gICAgICAgICAgICAgd2R0LT5iYXNlICsgQVRMQVM3X1dEVF9DTlRfQ1RS TCk7Cj4gLSAgICAgICB3cml0ZWwoMSwgd2R0LT5iYXNlICsgQVRMQVM3X1dEVF9FTik7Cj4gLQo+ IC0gICAgICAgcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgYXRsYXM3X3dkdF9kaXNh YmxlKHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkZCkKPiAtewo+IC0gICAgICAgc3RydWN0IGF0 bGFzN193ZG9nICp3ZHQgPSB3YXRjaGRvZ19nZXRfZHJ2ZGF0YSh3ZGQpOwo+IC0KPiAtICAgICAg IHdyaXRlbCgwLCB3ZHQtPmJhc2UgKyBBVExBUzdfV0RUX0VOKTsKPiAtICAgICAgIHdyaXRlbChy ZWFkbCh3ZHQtPmJhc2UgKyBBVExBUzdfV0RUX0NOVF9DVFJMKSAmIH5BVExBUzdfV0RUX0NOVF9F TiwKPiAtICAgICAgICAgICAgIHdkdC0+YmFzZSArIEFUTEFTN19XRFRfQ05UX0NUUkwpOwo+IC0K PiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGF0bGFzN193ZHRfc2V0 dGltZW91dChzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICp3ZGQsIHVuc2lnbmVkIGludCB0bykKPiAt ewo+IC0gICAgICAgd2RkLT50aW1lb3V0ID0gdG87Cj4gLQo+IC0gICAgICAgcmV0dXJuIDA7Cj4g LX0KPiAtCj4gLSNkZWZpbmUgT1BUSU9OUyAoV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBB TElWRVBJTkcgfCBXRElPRl9NQUdJQ0NMT1NFKQo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCB3 YXRjaGRvZ19pbmZvIGF0bGFzN193ZHRfaWRlbnQgPSB7Cj4gLSAgICAgICAub3B0aW9ucyA9IE9Q VElPTlMsCj4gLSAgICAgICAuZmlybXdhcmVfdmVyc2lvbiA9IDAsCj4gLSAgICAgICAuaWRlbnRp dHkgPSAiYXRsYXM3IFdhdGNoZG9nIiwKPiAtfTsKPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg d2F0Y2hkb2dfb3BzIGF0bGFzN193ZHRfb3BzID0gewo+IC0gICAgICAgLm93bmVyID0gVEhJU19N T0RVTEUsCj4gLSAgICAgICAuc3RhcnQgPSBhdGxhczdfd2R0X2VuYWJsZSwKPiAtICAgICAgIC5z dG9wID0gYXRsYXM3X3dkdF9kaXNhYmxlLAo+IC0gICAgICAgLmdldF90aW1lbGVmdCA9IGF0bGFz N193ZHRfZ2V0dGltZWxlZnQsCj4gLSAgICAgICAucGluZyA9IGF0bGFzN193ZHRfcGluZywKPiAt ICAgICAgIC5zZXRfdGltZW91dCA9IGF0bGFzN193ZHRfc2V0dGltZW91dCwKPiAtfTsKPiAtCj4g LXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlIGF0bGFzN193ZGQgPSB7Cj4gLSAgICAgICAu aW5mbyA9ICZhdGxhczdfd2R0X2lkZW50LAo+IC0gICAgICAgLm9wcyA9ICZhdGxhczdfd2R0X29w cywKPiAtICAgICAgIC50aW1lb3V0ID0gQVRMQVM3X1dEVF9ERUZBVUxUX1RJTUVPVVQsCj4gLX07 Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdGxhczdfd2R0X2lkc1td ID0gewo+IC0gICAgICAgeyAuY29tcGF0aWJsZSA9ICJzaXJmLGF0bGFzNy10aWNrIn0sCj4gLSAg ICAgICB7fQo+IC19Owo+IC0KPiAtc3RhdGljIHZvaWQgYXRsYXM3X2Nsa19kaXNhYmxlX3VucHJl cGFyZSh2b2lkICpkYXRhKQo+IC17Cj4gLSAgICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoZGF0 YSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgYXRsYXM3X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+IC17Cj4gLSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRl di0+ZGV2Owo+IC0gICAgICAgc3RydWN0IGF0bGFzN193ZG9nICp3ZHQ7Cj4gLSAgICAgICBzdHJ1 Y3QgY2xrICpjbGs7Cj4gLSAgICAgICBpbnQgcmV0Owo+IC0KPiAtICAgICAgIHdkdCA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqd2R0KSwgR0ZQX0tFUk5FTCk7Cj4gLSAgICAgICBpZiAoIXdk dCkKPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gLSAgICAgICB3ZHQtPmJhc2Ug PSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7Cj4gLSAgICAgICBpZiAo SVNfRVJSKHdkdC0+YmFzZSkpCj4gLSAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHdkdC0+ YmFzZSk7Cj4gLQo+IC0gICAgICAgY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7Cj4gLSAg ICAgICBpZiAoSVNfRVJSKGNsaykpCj4gLSAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGNs ayk7Cj4gLSAgICAgICByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKPiAtICAgICAgIGlm IChyZXQpIHsKPiAtICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJjbGsgZW5hYmxlIGZhaWxl ZFxuIik7Cj4gLSAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLSAgICAgICB9Cj4gLSAgICAg ICByZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhdGxhczdfY2xrX2Rpc2FibGVf dW5wcmVwYXJlLCBjbGspOwo+IC0gICAgICAgaWYgKHJldCkKPiAtICAgICAgICAgICAgICAgcmV0 dXJuIHJldDsKPiAtCj4gLSAgICAgICAvKiBkaXNhYmxlIHdhdGNoZG9nIGhhcmR3YXJlICovCj4g LSAgICAgICB3cml0ZWwoMCwgd2R0LT5iYXNlICsgQVRMQVM3X1dEVF9DTlRfQ1RSTCk7Cj4gLQo+ IC0gICAgICAgd2R0LT50aWNrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKPiAtICAgICAgIGlm ICghd2R0LT50aWNrX3JhdGUpCj4gLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+IC0K PiAtICAgICAgIHdkdC0+Y2xrID0gY2xrOwo+IC0gICAgICAgYXRsYXM3X3dkZC5taW5fdGltZW91 dCA9IDE7Cj4gLSAgICAgICBhdGxhczdfd2RkLm1heF90aW1lb3V0ID0gVUlOVF9NQVggLyB3ZHQt PnRpY2tfcmF0ZTsKPiAtCj4gLSAgICAgICB3YXRjaGRvZ19pbml0X3RpbWVvdXQoJmF0bGFzN193 ZGQsIDAsIGRldik7Cj4gLSAgICAgICB3YXRjaGRvZ19zZXRfbm93YXlvdXQoJmF0bGFzN193ZGQs IG5vd2F5b3V0KTsKPiAtCj4gLSAgICAgICB3YXRjaGRvZ19zZXRfZHJ2ZGF0YSgmYXRsYXM3X3dk ZCwgd2R0KTsKPiAtICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsICZhdGxhczdfd2Rk KTsKPiAtCj4gLSAgICAgICB3YXRjaGRvZ19zdG9wX29uX3JlYm9vdCgmYXRsYXM3X3dkZCk7Cj4g LSAgICAgICB3YXRjaGRvZ19zdG9wX29uX3VucmVnaXN0ZXIoJmF0bGFzN193ZGQpOwo+IC0gICAg ICAgcmV0dXJuIGRldm1fd2F0Y2hkb2dfcmVnaXN0ZXJfZGV2aWNlKGRldiwgJmF0bGFzN193ZGQp Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGF0bGFzN193ZHRfc3VzcGVu ZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gLXsKPiAtICAgICAgIC8qCj4gLSAgICAgICAgKiBOT1RF OnRpbWVyIGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHNldHRpbmdzIGFyZSBzYXZlZAo+IC0gICAgICAg ICogYW5kIHJlc3RvcmVkIGJhY2sgYnkgdGhlIHRpbWVyLWF0bGFzNy5jCj4gLSAgICAgICAgKi8K PiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2Vk IGF0bGFzN193ZHRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiAtewo+IC0gICAgICAgc3Ry dWN0IHdhdGNoZG9nX2RldmljZSAqd2RkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gLQo+IC0g ICAgICAgLyoKPiAtICAgICAgICAqIE5PVEU6IFNpbmNlIHRpbWVyIGNvbnRyb2xsZXIgcmVnaXN0 ZXJzIHNldHRpbmdzIGFyZSBzYXZlZAo+IC0gICAgICAgICogYW5kIHJlc3RvcmVkIGJhY2sgYnkg dGhlIHRpbWVyLWF0bGFzNy5jLCBzbyB3ZSBuZWVkIG5vdAo+IC0gICAgICAgICogdXBkYXRlIFdE IHNldHRpbmdzIGV4Y2VwdCByZWZyZXNoaW5nIHRpbWVvdXQuCj4gLSAgICAgICAgKi8KPiAtICAg ICAgIGF0bGFzN193ZHRfcGluZyh3ZGQpOwo+IC0KPiAtICAgICAgIHJldHVybiAwOwo+IC19Cj4g LQo+IC1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYXRsYXM3X3dkdF9wbV9vcHMsCj4gLSAgICAg ICAgICAgICAgIGF0bGFzN193ZHRfc3VzcGVuZCwgYXRsYXM3X3dkdF9yZXN1bWUpOwo+IC0KPiAt TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXRsYXM3X3dkdF9pZHMpOwo+IC0KPiAtc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRsYXM3X3dkdF9kcml2ZXIgPSB7Cj4gLSAgICAgICAuZHJp dmVyID0gewo+IC0gICAgICAgICAgICAgICAubmFtZSA9ICJhdGxhczctd2R0IiwKPiAtICAgICAg ICAgICAgICAgLnBtID0gJmF0bGFzN193ZHRfcG1fb3BzLAo+IC0gICAgICAgICAgICAgICAub2Zf bWF0Y2hfdGFibGUgPSBhdGxhczdfd2R0X2lkcywKPiAtICAgICAgIH0sCj4gLSAgICAgICAucHJv YmUgPSBhdGxhczdfd2R0X3Byb2JlLAo+IC19Owo+IC1tb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF0 bGFzN193ZHRfZHJpdmVyKTsKPiAtCj4gLU1PRFVMRV9ERVNDUklQVElPTigiQ1NSYXRsYXM3IHdh dGNoZG9nIGRyaXZlciIpOwo+IC1NT0RVTEVfQVVUSE9SKCJHdW8gWmVuZyA8R3VvLlplbmdAY3Ny LmNvbT4iKTsKPiAtTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IC1NT0RVTEVfQUxJQVMoInBs YXRmb3JtOmF0bGFzNy13ZHQiKTsKPiAtLQo+IDIuMjkuMgo+CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==