From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 1D6CB55294B; Tue, 8 Sep 2026 15:29:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788881425; cv=none; b=ZzBgpuVDkechOMkLPrd3XGwGwlNUXzPOGMNp9EyFkifMgc0BWNtWv1Nuig/ZnT3BQPuB8NAJXS341X5TbX3CjWtObnfcJWGfmbjnCvIn/aNUHZTlkYWTdEQgtCQSz4/Cz1gWF/XSyxKzRkjjGDdiitFAyy5ms5y8umC1R1K3Nmc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788881425; c=relaxed/simple; bh=KoIFZdDde6O5KlW5efFV8tNH4h9ANrd5tPglAzhUJoE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ivmZ8lbN6I0TiSjVVnT9AwYMbfR69XyfQvyCb9JwAPfu96BzkWaIfIDE+RPoXVah6jIbiXe9aKLLpuPrpE5Dd3spadSMCvN6AAJFIhVw+uIAOlfevM5n8X32PCHXA5q01egeWKHeQAcjxaBHYjcYxVr2JrfaLOlvHXB92thnOww= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gGHuEScP; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gGHuEScP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B76F01F00AC4; Tue, 8 Sep 2026 15:29:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788881379; bh=++o7uv15rBlvHRr+PxH9dFf+8dDgpY2HsOEbWk0PP6U=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=gGHuEScPnBDQs9oJVPKiK9DUaO5HUElsb7JUD82AWHsL2D1Ww4kijmXdcjc5ZoY64 o45oozwttxaV4UtvcNWBl5qfn6QeeRWO28EfFuF0gnztyzVEsLnWnLJIv3xe/yNI0c u0BCaXUWFICHkGkexo21KjT3bMHKozvCCXkm9chGOlKHnA+MApQjubQgxalbvmb44P 3tCWkUgkR7mwcL8XDLPU+VtheQOFZq94otEGdxHrrTUTW8cGZxFrqGWbfa/VzzKWed N4TLi8Y2RWZ3TAAFEAbZN6XyT1rbdVJaAxT/uPxssLOw2YtvAzIXSb2N1nZ7CRIXf9 B+oY4QTnh248g== From: Arnd Bergmann To: Krzysztof Kozlowski , Alexandre Belloni , Linus Walleij , Russell King Cc: Drew Fustini , Arnd Bergmann , Rob Herring , Conor Dooley , Liviu Dudau , Sudeep Holla , Lorenzo Pieralisi , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Vladimir Zapolskiy , Stefan Agner , Maxime Coquelin , Alexandre Torgue , Aaro Koskinen , Andreas Kemnade , Kevin Hilman , Roger Quadros , Tony Lindgren , Nicolas Ferre , Claudiu Beznea , Andrew Lunn , Sebastian Hesselbarth , Gregory Clement , Robert Jarzmik , Kristoffer Ericson , Ethan Nelson-Moore , Geert Uytterhoeven , Alexander Sverdlin , Shawn Guo , Karl Mehltretter , "David Hildenbrand (Arm)" , Nicolas Pitre , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, imx@lists.linux.dev, linux-stm32@st-md-mailman.stormreply.com, linux-omap@vger.kernel.org, Paul Walmsley , Herbert Xu , "David S. Miller" , Mauro Carvalho Chehab , Kyungmin Park , Helge Deller , Tero Kristo , Stephen Boyd , Thomas Zimmermann , linux-media@vger.kernel.org, linux-mtd@lists.infradead.org, linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-clk@vger.kernel.org Subject: [PATCH 06/13] ARM: omap2: remove omap24xx support Date: Tue, 8 Sep 2026 17:27:56 +0200 Message-ID: <20260908152808.3928630-7-arnd@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260908152808.3928630-1-arnd@kernel.org> References: <20260908152808.3928630-1-arnd@kernel.org> Precedence: bulk X-Mailing-List: linux-fbdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Arnd Bergmann The omap24xx SoC platform was used in the Nokia N800 and N810 tablets released on 2007 and was among the first ARMv6 CPUs in products that made it into products. Unfortunately the early ARM1136r0 CPU cores had a number of quirks that caused a disproportionate amount of work to keep them compatible with later ARMv6K/v7/v8 implementations. Drop the support for this SoC in order to allow removing ARM1136r0. Cc: Aaro Koskinen Cc: Andreas Kemnade Cc: Kevin Hilman Cc: Roger Quadros Cc: Tony Lindgren Cc: Paul Walmsley Cc: Herbert Xu Cc: "David S. Miller" Cc: Mauro Carvalho Chehab Cc: Kyungmin Park Cc: Helge Deller Cc: Tero Kristo Cc: Stephen Boyd Cc: Thomas Zimmermann Cc: linux-kernel@vger.kernel.org Cc: linux-omap@vger.kernel.org Cc: devicetree@vger.kernel.org Cc: linux-media@vger.kernel.org Cc: linux-mtd@lists.infradead.org Cc: linux-fbdev@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linux-clk@vger.kernel.org Signed-off-by: Arnd Bergmann --- MAINTAINERS | 2 - arch/arm/boot/dts/ti/omap/Makefile | 6 - arch/arm/boot/dts/ti/omap/omap2.dtsi | 338 ----- .../arm/boot/dts/ti/omap/omap2420-clocks.dtsi | 267 ---- arch/arm/boot/dts/ti/omap/omap2420-h4.dts | 63 - arch/arm/boot/dts/ti/omap/omap2420-n800.dts | 9 - .../boot/dts/ti/omap/omap2420-n810-wimax.dts | 9 - arch/arm/boot/dts/ti/omap/omap2420-n810.dts | 75 - .../dts/ti/omap/omap2420-n8x0-common.dtsi | 123 -- arch/arm/boot/dts/ti/omap/omap2420.dtsi | 262 ---- .../arm/boot/dts/ti/omap/omap2430-clocks.dtsi | 341 ----- arch/arm/boot/dts/ti/omap/omap2430-sdp.dts | 70 - arch/arm/boot/dts/ti/omap/omap2430.dtsi | 366 ----- .../arm/boot/dts/ti/omap/omap24xx-clocks.dtsi | 1241 ----------------- arch/arm/configs/omap2plus_defconfig | 2 - arch/arm/mach-omap2/Kconfig | 62 +- arch/arm/mach-omap2/Makefile | 63 +- arch/arm/mach-omap2/board-generic.c | 34 - arch/arm/mach-omap2/board-n8x0.c | 512 ------- arch/arm/mach-omap2/clkt2xxx_dpll.c | 56 - arch/arm/mach-omap2/clkt2xxx_dpllcore.c | 194 --- arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c | 259 ---- arch/arm/mach-omap2/clock.c | 12 +- arch/arm/mach-omap2/clock2xxx.h | 17 - arch/arm/mach-omap2/clockdomain.c | 4 +- arch/arm/mach-omap2/clockdomain.h | 5 - arch/arm/mach-omap2/clockdomains2420_data.c | 154 -- arch/arm/mach-omap2/clockdomains2430_data.c | 181 --- .../mach-omap2/clockdomains2xxx_3xxx_data.c | 29 +- arch/arm/mach-omap2/cm-regbits-24xx.h | 51 - arch/arm/mach-omap2/cm2xxx.c | 302 ---- arch/arm/mach-omap2/cm2xxx.h | 60 - arch/arm/mach-omap2/cm_common.c | 12 - arch/arm/mach-omap2/common-board-devices.h | 11 - arch/arm/mach-omap2/common.h | 12 - arch/arm/mach-omap2/control.h | 56 - arch/arm/mach-omap2/display.c | 4 +- arch/arm/mach-omap2/dma.c | 53 +- arch/arm/mach-omap2/fb.c | 14 +- arch/arm/mach-omap2/gpmc.h | 10 - arch/arm/mach-omap2/i2c.c | 2 +- arch/arm/mach-omap2/id.c | 80 +- arch/arm/mach-omap2/io.c | 140 +- arch/arm/mach-omap2/iomap.h | 46 - arch/arm/mach-omap2/l3_2xxx.h | 15 - arch/arm/mach-omap2/l4_2xxx.h | 19 - arch/arm/mach-omap2/mmc.h | 18 - arch/arm/mach-omap2/msdi.c | 75 - arch/arm/mach-omap2/omap2-restart.c | 62 - arch/arm/mach-omap2/omap24xx.h | 73 - arch/arm/mach-omap2/omap_hwmod.c | 18 +- arch/arm/mach-omap2/omap_hwmod.h | 2 - arch/arm/mach-omap2/omap_hwmod_2420_data.c | 402 ------ arch/arm/mach-omap2/omap_hwmod_2430_data.c | 606 -------- .../omap_hwmod_2xxx_interconnect_data.c | 256 ---- .../mach-omap2/omap_hwmod_2xxx_ipblock_data.c | 668 --------- arch/arm/mach-omap2/omap_hwmod_common_data.h | 66 - arch/arm/mach-omap2/opp2420_data.c | 131 -- arch/arm/mach-omap2/opp2430_data.c | 136 -- arch/arm/mach-omap2/opp2xxx.h | 430 ------ arch/arm/mach-omap2/pdata-quirks.c | 35 +- arch/arm/mach-omap2/pm.h | 5 - arch/arm/mach-omap2/powerdomain.h | 3 - arch/arm/mach-omap2/powerdomains2xxx_data.c | 134 -- arch/arm/mach-omap2/prcm-common.h | 147 -- arch/arm/mach-omap2/prm-regbits-24xx.h | 39 - arch/arm/mach-omap2/prm2xxx.c | 229 --- arch/arm/mach-omap2/prm2xxx.h | 128 -- arch/arm/mach-omap2/prm2xxx_3xxx.c | 1 - arch/arm/mach-omap2/prm_common.c | 11 - arch/arm/mach-omap2/sdrc.h | 21 - arch/arm/mach-omap2/sdrc2xxx.c | 164 --- arch/arm/mach-omap2/sleep24xx.S | 91 -- arch/arm/mach-omap2/soc.h | 59 - arch/arm/mach-omap2/sram.c | 159 +-- arch/arm/mach-omap2/sram.h | 32 - arch/arm/mach-omap2/sram242x.S | 317 ----- arch/arm/mach-omap2/sram243x.S | 317 ----- arch/arm/mach-omap2/usb-tusb6010.c | 217 --- arch/arm/mach-omap2/usb-tusb6010.h | 12 - arch/arm/mach-omap2/voltagedomains2xxx_data.c | 29 - drivers/crypto/Kconfig | 2 +- drivers/media/platform/ti/omap/Kconfig | 4 +- drivers/mtd/nand/onenand/Kconfig | 4 +- drivers/video/fbdev/omap2/omapfb/Kconfig | 2 +- include/linux/clk/ti.h | 8 - 86 files changed, 60 insertions(+), 10696 deletions(-) delete mode 100644 arch/arm/boot/dts/ti/omap/omap2.dtsi delete mode 100644 arch/arm/boot/dts/ti/omap/omap2420-clocks.dtsi delete mode 100644 arch/arm/boot/dts/ti/omap/omap2420-h4.dts delete mode 100644 arch/arm/boot/dts/ti/omap/omap2420-n800.dts delete mode 100644 arch/arm/boot/dts/ti/omap/omap2420-n810-wimax.dts delete mode 100644 arch/arm/boot/dts/ti/omap/omap2420-n810.dts delete mode 100644 arch/arm/boot/dts/ti/omap/omap2420-n8x0-common.dtsi delete mode 100644 arch/arm/boot/dts/ti/omap/omap2420.dtsi delete mode 100644 arch/arm/boot/dts/ti/omap/omap2430-clocks.dtsi delete mode 100644 arch/arm/boot/dts/ti/omap/omap2430-sdp.dts delete mode 100644 arch/arm/boot/dts/ti/omap/omap2430.dtsi delete mode 100644 arch/arm/boot/dts/ti/omap/omap24xx-clocks.dtsi delete mode 100644 arch/arm/mach-omap2/board-n8x0.c delete mode 100644 arch/arm/mach-omap2/clkt2xxx_dpll.c delete mode 100644 arch/arm/mach-omap2/clkt2xxx_dpllcore.c delete mode 100644 arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c delete mode 100644 arch/arm/mach-omap2/clock2xxx.h delete mode 100644 arch/arm/mach-omap2/clockdomains2420_data.c delete mode 100644 arch/arm/mach-omap2/clockdomains2430_data.c delete mode 100644 arch/arm/mach-omap2/cm-regbits-24xx.h delete mode 100644 arch/arm/mach-omap2/cm2xxx.c delete mode 100644 arch/arm/mach-omap2/cm2xxx.h delete mode 100644 arch/arm/mach-omap2/common-board-devices.h delete mode 100644 arch/arm/mach-omap2/gpmc.h delete mode 100644 arch/arm/mach-omap2/l3_2xxx.h delete mode 100644 arch/arm/mach-omap2/l4_2xxx.h delete mode 100644 arch/arm/mach-omap2/mmc.h delete mode 100644 arch/arm/mach-omap2/msdi.c delete mode 100644 arch/arm/mach-omap2/omap2-restart.c delete mode 100644 arch/arm/mach-omap2/omap24xx.h delete mode 100644 arch/arm/mach-omap2/omap_hwmod_2420_data.c delete mode 100644 arch/arm/mach-omap2/omap_hwmod_2430_data.c delete mode 100644 arch/arm/mach-omap2/omap_hwmod_2xxx_interconnect_data.c delete mode 100644 arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c delete mode 100644 arch/arm/mach-omap2/opp2420_data.c delete mode 100644 arch/arm/mach-omap2/opp2430_data.c delete mode 100644 arch/arm/mach-omap2/opp2xxx.h delete mode 100644 arch/arm/mach-omap2/powerdomains2xxx_data.c delete mode 100644 arch/arm/mach-omap2/prm-regbits-24xx.h delete mode 100644 arch/arm/mach-omap2/prm2xxx.c delete mode 100644 arch/arm/mach-omap2/prm2xxx.h delete mode 100644 arch/arm/mach-omap2/sdrc2xxx.c delete mode 100644 arch/arm/mach-omap2/sleep24xx.S delete mode 100644 arch/arm/mach-omap2/sram242x.S delete mode 100644 arch/arm/mach-omap2/sram243x.S delete mode 100644 arch/arm/mach-omap2/usb-tusb6010.c delete mode 100644 arch/arm/mach-omap2/usb-tusb6010.h delete mode 100644 arch/arm/mach-omap2/voltagedomains2xxx_data.c diff --git a/MAINTAINERS b/MAINTAINERS index 028db7ad15ad..0d10f778800d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -19874,7 +19874,6 @@ M: Jarkko Nikula L: linux-sound@vger.kernel.org L: linux-omap@vger.kernel.org S: Maintained -F: sound/soc/ti/n810.c F: sound/soc/ti/omap* F: sound/soc/ti/rx51.c F: sound/soc/ti/sdma-pcm.* @@ -20027,7 +20026,6 @@ F: drivers/gpio/gpio-tps65219.c F: drivers/i2c/busses/i2c-omap.c F: drivers/irqchip/irq-omap-intc.c F: drivers/mfd/*omap*.c -F: drivers/mfd/menelaus.c F: drivers/mfd/palmas.c F: drivers/mfd/tps65217.c F: drivers/mfd/tps65218.c diff --git a/arch/arm/boot/dts/ti/omap/Makefile b/arch/arm/boot/dts/ti/omap/Makefile index 498c36ccb5ea..3c5d378df6b9 100644 --- a/arch/arm/boot/dts/ti/omap/Makefile +++ b/arch/arm/boot/dts/ti/omap/Makefile @@ -1,10 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 -dtb-$(CONFIG_ARCH_OMAP2) += \ - omap2420-h4.dtb \ - omap2420-n800.dtb \ - omap2420-n810.dtb \ - omap2420-n810-wimax.dtb \ - omap2430-sdp.dtb dtb-$(CONFIG_ARCH_OMAP3) += \ am3517-craneboard.dtb \ am3517-evm.dtb \ diff --git a/arch/arm/boot/dts/ti/omap/omap2.dtsi b/arch/arm/boot/dts/ti/omap/omap2.dtsi deleted file mode 100644 index fdc1790adf43..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2.dtsi +++ /dev/null @@ -1,338 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Device Tree Source for OMAP2 SoC - * - * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/ - */ - -#include -#include -#include -#include - -/ { - compatible = "ti,omap2430", "ti,omap2420", "ti,omap2"; - interrupt-parent = <&intc>; - #address-cells = <1>; - #size-cells = <1>; - chosen { }; - - aliases { - serial0 = &uart1; - serial1 = &uart2; - serial2 = &uart3; - i2c0 = &i2c1; - i2c1 = &i2c2; - }; - - cpus { - #address-cells = <0>; - #size-cells = <0>; - - cpu { - compatible = "arm,arm1136jf-s"; - device_type = "cpu"; - }; - }; - - pmu { - compatible = "arm,arm1136-pmu"; - interrupts = <3>; - }; - - soc { - compatible = "ti,omap-infra"; - mpu { - compatible = "ti,omap2-mpu"; - ti,hwmods = "mpu"; - }; - }; - - ocp { - compatible = "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges; - ti,hwmods = "l3_main"; - - aes: aes@480a6000 { - compatible = "ti,omap2-aes"; - ti,hwmods = "aes"; - reg = <0x480a6000 0x50>; - dmas = <&sdma 9 &sdma 10>; - dma-names = "tx", "rx"; - }; - - hdq1w: 1w@480b2000 { - compatible = "ti,omap2420-1w"; - ti,hwmods = "hdq1w"; - reg = <0x480b2000 0x1000>; - interrupts = <58>; - }; - - intc: interrupt-controller@1 { - compatible = "ti,omap2-intc"; - interrupt-controller; - #interrupt-cells = <1>; - reg = <0x480FE000 0x1000>; - }; - - target-module@48056000 { - compatible = "ti,sysc-omap2", "ti,sysc"; - reg = <0x48056000 0x4>, - <0x4805602c 0x4>, - <0x48056028 0x4>; - reg-names = "rev", "sysc", "syss"; - ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY | - SYSC_OMAP2_EMUFREE | - SYSC_OMAP2_SOFTRESET | - SYSC_OMAP2_AUTOIDLE)>; - ti,sysc-midle = , - , - ; - ti,syss-mask = <1>; - clocks = <&core_l3_ck>; - clock-names = "fck"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0x48056000 0x1000>; - - sdma: dma-controller@0 { - compatible = "ti,omap2420-sdma", "ti,omap-sdma"; - reg = <0 0x1000>; - interrupts = <12>, - <13>, - <14>, - <15>; - #dma-cells = <1>; - dma-channels = <32>; - dma-requests = <64>; - }; - }; - - i2c1: i2c@48070000 { - compatible = "ti,omap2-i2c"; - ti,hwmods = "i2c1"; - reg = <0x48070000 0x80>; - #address-cells = <1>; - #size-cells = <0>; - interrupts = <56>; - }; - - i2c2: i2c@48072000 { - compatible = "ti,omap2-i2c"; - ti,hwmods = "i2c2"; - reg = <0x48072000 0x80>; - #address-cells = <1>; - #size-cells = <0>; - interrupts = <57>; - }; - - mcspi1: spi@48098000 { - #address-cells = <1>; - #size-cells = <0>; - compatible = "ti,omap2-mcspi"; - ti,hwmods = "mcspi1"; - reg = <0x48098000 0x100>; - interrupts = <65>; - dmas = <&sdma 35 &sdma 36 &sdma 37 &sdma 38 - &sdma 39 &sdma 40 &sdma 41 &sdma 42>; - dma-names = "tx0", "rx0", "tx1", "rx1", - "tx2", "rx2", "tx3", "rx3"; - }; - - mcspi2: spi@4809a000 { - #address-cells = <1>; - #size-cells = <0>; - compatible = "ti,omap2-mcspi"; - ti,hwmods = "mcspi2"; - reg = <0x4809a000 0x100>; - interrupts = <66>; - dmas = <&sdma 43 &sdma 44 &sdma 45 &sdma 46>; - dma-names = "tx0", "rx0", "tx1", "rx1"; - }; - - rng: rng@480a0000 { - compatible = "ti,omap2-rng"; - ti,hwmods = "rng"; - reg = <0x480a0000 0x50>; - interrupts = <52>; - }; - - sham: sham@480a4000 { - compatible = "ti,omap2-sham"; - ti,hwmods = "sham"; - reg = <0x480a4000 0x64>; - interrupts = <51>; - dmas = <&sdma 13>; - dma-names = "rx"; - }; - - uart1: serial@4806a000 { - compatible = "ti,omap2-uart"; - ti,hwmods = "uart1"; - reg = <0x4806a000 0x2000>; - interrupts = <72>; - dmas = <&sdma 49 &sdma 50>; - dma-names = "tx", "rx"; - clock-frequency = <48000000>; - }; - - uart2: serial@4806c000 { - compatible = "ti,omap2-uart"; - ti,hwmods = "uart2"; - reg = <0x4806c000 0x400>; - interrupts = <73>; - dmas = <&sdma 51 &sdma 52>; - dma-names = "tx", "rx"; - clock-frequency = <48000000>; - }; - - uart3: serial@4806e000 { - compatible = "ti,omap2-uart"; - ti,hwmods = "uart3"; - reg = <0x4806e000 0x400>; - interrupts = <74>; - dmas = <&sdma 53 &sdma 54>; - dma-names = "tx", "rx"; - clock-frequency = <48000000>; - }; - - timer2_target: target-module@4802a000 { - compatible = "ti,sysc-omap2-timer", "ti,sysc"; - reg = <0x4802a000 0x4>, - <0x4802a010 0x4>, - <0x4802a014 0x4>; - reg-names = "rev", "sysc", "syss"; - ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY | - SYSC_OMAP2_EMUFREE | - SYSC_OMAP2_ENAWAKEUP | - SYSC_OMAP2_SOFTRESET | - SYSC_OMAP2_AUTOIDLE)>; - ti,sysc-sidle = , - , - ; - ti,syss-mask = <1>; - clocks = <&gpt2_fck>, <&gpt2_ick>; - clock-names = "fck", "ick"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0x0 0x4802a000 0x1000>; - - timer2: timer@0 { - compatible = "ti,omap2420-timer"; - reg = <0 0x400>; - interrupts = <38>; - }; - }; - - timer3: timer@48078000 { - compatible = "ti,omap2420-timer"; - reg = <0x48078000 0x400>; - interrupts = <39>; - ti,hwmods = "timer3"; - }; - - timer4: timer@4807a000 { - compatible = "ti,omap2420-timer"; - reg = <0x4807a000 0x400>; - interrupts = <40>; - ti,hwmods = "timer4"; - }; - - timer5: timer@4807c000 { - compatible = "ti,omap2420-timer"; - reg = <0x4807c000 0x400>; - interrupts = <41>; - ti,hwmods = "timer5"; - ti,timer-dsp; - }; - - timer6: timer@4807e000 { - compatible = "ti,omap2420-timer"; - reg = <0x4807e000 0x400>; - interrupts = <42>; - ti,hwmods = "timer6"; - ti,timer-dsp; - }; - - timer7: timer@48080000 { - compatible = "ti,omap2420-timer"; - reg = <0x48080000 0x400>; - interrupts = <43>; - ti,hwmods = "timer7"; - ti,timer-dsp; - }; - - timer8: timer@48082000 { - compatible = "ti,omap2420-timer"; - reg = <0x48082000 0x400>; - interrupts = <44>; - ti,hwmods = "timer8"; - ti,timer-dsp; - }; - - timer9: timer@48084000 { - compatible = "ti,omap2420-timer"; - reg = <0x48084000 0x400>; - interrupts = <45>; - ti,hwmods = "timer9"; - ti,timer-pwm; - }; - - timer10: timer@48086000 { - compatible = "ti,omap2420-timer"; - reg = <0x48086000 0x400>; - interrupts = <46>; - ti,hwmods = "timer10"; - ti,timer-pwm; - }; - - timer11: timer@48088000 { - compatible = "ti,omap2420-timer"; - reg = <0x48088000 0x400>; - interrupts = <47>; - ti,hwmods = "timer11"; - ti,timer-pwm; - }; - - timer12: timer@4808a000 { - compatible = "ti,omap2420-timer"; - reg = <0x4808a000 0x400>; - interrupts = <48>; - ti,hwmods = "timer12"; - ti,timer-pwm; - }; - - dss: dss@48050000 { - compatible = "ti,omap2-dss"; - reg = <0x48050000 0x400>; - status = "disabled"; - ti,hwmods = "dss_core"; - #address-cells = <1>; - #size-cells = <1>; - ranges; - - dispc@48050400 { - compatible = "ti,omap2-dispc"; - reg = <0x48050400 0x400>; - interrupts = <25>; - ti,hwmods = "dss_dispc"; - }; - - rfbi: encoder@48050800 { - compatible = "ti,omap2-rfbi"; - reg = <0x48050800 0x400>; - status = "disabled"; - ti,hwmods = "dss_rfbi"; - }; - - venc: encoder@48050c00 { - compatible = "ti,omap2-venc"; - reg = <0x48050c00 0x400>; - status = "disabled"; - ti,hwmods = "dss_venc"; - }; - }; - }; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap2420-clocks.dtsi b/arch/arm/boot/dts/ti/omap/omap2420-clocks.dtsi deleted file mode 100644 index 00a7a199a91c..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2420-clocks.dtsi +++ /dev/null @@ -1,267 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Device Tree Source for OMAP2420 clock data - * - * Copyright (C) 2014 Texas Instruments, Inc. - */ - -&prcm_clocks { - sys_clkout2_src_gate: sys_clkout2_src_gate@70 { - #clock-cells = <0>; - compatible = "ti,composite-no-wait-gate-clock"; - clocks = <&core_ck>; - ti,bit-shift = <15>; - reg = <0x0070>; - }; - - sys_clkout2_src_mux: sys_clkout2_src_mux@70 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&core_ck>, <&sys_ck>, <&func_96m_ck>, <&func_54m_ck>; - ti,bit-shift = <8>; - reg = <0x0070>; - }; - - sys_clkout2_src: sys_clkout2_src { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&sys_clkout2_src_gate>, <&sys_clkout2_src_mux>; - }; - - sys_clkout2: sys_clkout2@70 { - #clock-cells = <0>; - compatible = "ti,divider-clock"; - clocks = <&sys_clkout2_src>; - ti,bit-shift = <11>; - ti,max-div = <64>; - reg = <0x0070>; - ti,index-power-of-two; - }; - - dsp_gate_ick: dsp_gate_ick@810 { - #clock-cells = <0>; - compatible = "ti,composite-interface-clock"; - clocks = <&dsp_fck>; - ti,bit-shift = <1>; - reg = <0x0810>; - }; - - dsp_div_ick: dsp_div_ick@840 { - #clock-cells = <0>; - compatible = "ti,composite-divider-clock"; - clocks = <&dsp_fck>; - ti,bit-shift = <5>; - ti,max-div = <3>; - reg = <0x0840>; - ti,index-starts-at-one; - }; - - dsp_ick: dsp_ick { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&dsp_gate_ick>, <&dsp_div_ick>; - }; - - iva1_gate_ifck: iva1_gate_ifck@800 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&core_ck>; - ti,bit-shift = <10>; - reg = <0x0800>; - }; - - iva1_div_ifck: iva1_div_ifck@840 { - #clock-cells = <0>; - compatible = "ti,composite-divider-clock"; - clocks = <&core_ck>; - ti,bit-shift = <8>; - reg = <0x0840>; - ti,dividers = <0>, <1>, <2>, <3>, <4>, <0>, <6>, <0>, <8>, <0>, <0>, <0>, <12>; - }; - - iva1_ifck: iva1_ifck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&iva1_gate_ifck>, <&iva1_div_ifck>; - }; - - iva1_ifck_div: iva1_ifck_div { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&iva1_ifck>; - clock-mult = <1>; - clock-div = <2>; - }; - - iva1_mpu_int_ifck: iva1_mpu_int_ifck@800 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&iva1_ifck_div>; - ti,bit-shift = <8>; - reg = <0x0800>; - }; - - wdt3_ick: wdt3_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <28>; - reg = <0x0210>; - }; - - wdt3_fck: wdt3_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <28>; - reg = <0x0200>; - }; - - mmc_ick: mmc_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <26>; - reg = <0x0210>; - }; - - mmc_fck: mmc_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_96m_ck>; - ti,bit-shift = <26>; - reg = <0x0200>; - }; - - eac_ick: eac_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <24>; - reg = <0x0210>; - }; - - eac_fck: eac_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_96m_ck>; - ti,bit-shift = <24>; - reg = <0x0200>; - }; - - i2c1_fck: i2c1_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_12m_ck>; - ti,bit-shift = <19>; - reg = <0x0200>; - }; - - i2c2_fck: i2c2_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_12m_ck>; - ti,bit-shift = <20>; - reg = <0x0200>; - }; - - vlynq_ick: vlynq_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&core_l3_ck>; - ti,bit-shift = <3>; - reg = <0x0210>; - }; - - vlynq_gate_fck: vlynq_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&core_ck>; - ti,bit-shift = <3>; - reg = <0x0200>; - }; - - core_d18_ck: core_d18_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <18>; - }; - - vlynq_mux_fck: vlynq_mux_fck@240 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_96m_ck>, <&core_ck>, <&core_d2_ck>, <&core_d3_ck>, <&core_d4_ck>, <&dummy_ck>, <&core_d6_ck>, <&dummy_ck>, <&core_d8_ck>, <&core_d9_ck>, <&dummy_ck>, <&dummy_ck>, <&core_d12_ck>, <&dummy_ck>, <&dummy_ck>, <&dummy_ck>, <&core_d16_ck>, <&dummy_ck>, <&core_d18_ck>; - ti,bit-shift = <15>; - reg = <0x0240>; - }; - - vlynq_fck: vlynq_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&vlynq_gate_fck>, <&vlynq_mux_fck>; - }; -}; - -&prcm_clockdomains { - gfx_clkdm: gfx_clkdm { - compatible = "ti,clockdomain"; - clocks = <&gfx_ick>; - }; - - core_l3_clkdm: core_l3_clkdm { - compatible = "ti,clockdomain"; - clocks = <&cam_fck>, <&vlynq_ick>, <&usb_fck>; - }; - - wkup_clkdm: wkup_clkdm { - compatible = "ti,clockdomain"; - clocks = <&dpll_ck>, <&emul_ck>, <&gpt1_ick>, <&gpios_ick>, - <&gpios_fck>, <&mpu_wdt_ick>, <&mpu_wdt_fck>, - <&sync_32k_ick>, <&wdt1_ick>, <&omapctrl_ick>; - }; - - iva1_clkdm: iva1_clkdm { - compatible = "ti,clockdomain"; - clocks = <&iva1_mpu_int_ifck>; - }; - - dss_clkdm: dss_clkdm { - compatible = "ti,clockdomain"; - clocks = <&dss_ick>, <&dss_54m_fck>; - }; - - core_l4_clkdm: core_l4_clkdm { - compatible = "ti,clockdomain"; - clocks = <&ssi_l4_ick>, <&gpt2_ick>, <&gpt3_ick>, <&gpt4_ick>, - <&gpt5_ick>, <&gpt6_ick>, <&gpt7_ick>, <&gpt8_ick>, - <&gpt9_ick>, <&gpt10_ick>, <&gpt11_ick>, <&gpt12_ick>, - <&mcbsp1_ick>, <&mcbsp2_ick>, <&mcspi1_ick>, - <&mcspi1_fck>, <&mcspi2_ick>, <&mcspi2_fck>, - <&uart1_ick>, <&uart1_fck>, <&uart2_ick>, <&uart2_fck>, - <&uart3_ick>, <&uart3_fck>, <&cam_ick>, - <&mailboxes_ick>, <&wdt4_ick>, <&wdt4_fck>, - <&wdt3_ick>, <&wdt3_fck>, <&mspro_ick>, <&mspro_fck>, - <&mmc_ick>, <&mmc_fck>, <&fac_ick>, <&fac_fck>, - <&eac_ick>, <&eac_fck>, <&hdq_ick>, <&hdq_fck>, - <&i2c1_ick>, <&i2c1_fck>, <&i2c2_ick>, <&i2c2_fck>, - <&des_ick>, <&sha_ick>, <&rng_ick>, <&aes_ick>, - <&pka_ick>; - }; -}; - -&func_96m_ck { - compatible = "fixed-factor-clock"; - clocks = <&apll96_ck>; - clock-mult = <1>; - clock-div = <1>; -}; - -&dsp_div_fck { - ti,dividers = <0>, <1>, <2>, <3>, <4>, <0>, <6>, <0>, <8>, <0>, <0>, <0>, <12>; -}; - -&ssi_ssr_sst_div_fck { - ti,dividers = <0>, <1>, <2>, <3>, <4>, <0>, <6>, <0>, <8>; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap2420-h4.dts b/arch/arm/boot/dts/ti/omap/omap2420-h4.dts deleted file mode 100644 index 5acf5dd87c59..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2420-h4.dts +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/ - */ -/dts-v1/; - -#include "omap2420.dtsi" - -/ { - model = "TI OMAP2420 H4 board"; - compatible = "ti,omap2420-h4", "ti,omap2420", "ti,omap2"; - - memory@80000000 { - device_type = "memory"; - reg = <0x80000000 0x4000000>; /* 64 MB */ - }; -}; - -&gpmc { - ranges = <0 0 0x08000000 0x04000000>; - - nor@0,0 { - compatible = "cfi-flash"; - linux,mtd-name = "intel,ge28f256l18b85"; - #address-cells = <1>; - #size-cells = <1>; - reg = <0 0 0x04000000>; - bank-width = <2>; - - gpmc,mux-add-data = <2>; - gpmc,cs-on-ns = <10>; - gpmc,cs-rd-off-ns = <160>; - gpmc,cs-wr-off-ns = <160>; - gpmc,adv-on-ns = <20>; - gpmc,adv-rd-off-ns = <50>; - gpmc,adv-wr-off-ns = <50>; - gpmc,oe-on-ns = <60>; - gpmc,oe-off-ns = <120>; - gpmc,we-on-ns = <60>; - gpmc,we-off-ns = <120>; - gpmc,rd-cycle-ns = <170>; - gpmc,wr-cycle-ns = <170>; - gpmc,access-ns = <150>; - gpmc,page-burst-access-ns = <10>; - - partition@0 { - label = "bootloader"; - reg = <0 0x20000>; - }; - partition@20000 { - label = "params"; - reg = <0x20000 0x20000>; - }; - partition@40000 { - label = "kernel"; - reg = <0x40000 0x200000>; - }; - partition@240000 { - label = "file-system"; - reg = <0x240000 0x3dc0000>; - }; - }; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap2420-n800.dts b/arch/arm/boot/dts/ti/omap/omap2420-n800.dts deleted file mode 100644 index f06d767e818b..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2420-n800.dts +++ /dev/null @@ -1,9 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/dts-v1/; - -#include "omap2420-n8x0-common.dtsi" - -/ { - model = "Nokia N800"; - compatible = "nokia,n800", "nokia,n8x0", "ti,omap2420", "ti,omap2"; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap2420-n810-wimax.dts b/arch/arm/boot/dts/ti/omap/omap2420-n810-wimax.dts deleted file mode 100644 index ac9acbd609b6..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2420-n810-wimax.dts +++ /dev/null @@ -1,9 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/dts-v1/; - -#include "omap2420-n8x0-common.dtsi" - -/ { - model = "Nokia N810 WiMax"; - compatible = "nokia,n810-wimax", "nokia,n8x0", "ti,omap2420", "ti,omap2"; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap2420-n810.dts b/arch/arm/boot/dts/ti/omap/omap2420-n810.dts deleted file mode 100644 index 3bf8175d85a8..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2420-n810.dts +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/dts-v1/; - -#include "omap2420-n8x0-common.dtsi" - -/ { - model = "Nokia N810"; - compatible = "nokia,n810", "nokia,n8x0", "ti,omap2420", "ti,omap2"; - - vio_ape: vio_ape { - compatible = "regulator-fixed"; - regulator-name = "vio_ape"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - }; - - v28_aic: v28_aic { - compatible = "regulator-fixed"; - regulator-name = "v28_aic"; - regulator-min-microvolt = <2800000>; - regulator-max-microvolt = <2800000>; - }; -}; - -&omap2420_pmx { - mcbsp2_pins: mcbsp2-pins { - pinctrl-single,pins = < - OMAP2420_CORE_IOPAD(0x0124, PIN_INPUT | MUX_MODE1) /* eac_ac_sclk.mcbsp2_clkx */ - OMAP2420_CORE_IOPAD(0x0125, PIN_INPUT | MUX_MODE1) /* eac_ac_fs.mcbsp2_fsx */ - OMAP2420_CORE_IOPAD(0x0126, PIN_INPUT | MUX_MODE1) /* eac_ac_din.mcbsp2_dr */ - OMAP2420_CORE_IOPAD(0x0127, PIN_OUTPUT | MUX_MODE1) /* eac_ac_dout.mcbsp2_dx */ - >; - }; - - aic33_pins: aic33-pins { - pinctrl-single,pins = < - OMAP2420_CORE_IOPAD(0x0129, PIN_OUTPUT | MUX_MODE3) /* eac_ac_rst.gpio118 */ - OMAP2420_CORE_IOPAD(0x00e8, PIN_OUTPUT | MUX_MODE2) /* vlynq_tx1.sys_clkout2 */ - >; - }; -}; - -&i2c2 { - aic33@18 { - compatible = "ti,tlv320aic33"; - reg = <0x18>; - - pinctrl-names = "default"; - pinctrl-0 = <&aic33_pins>; - - reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>; /* gpio118 */ - - ai3x-gpio-func = < - 10 /* AIC3X_GPIO1_FUNC_DIGITAL_MIC_MODCLK */ - 5 /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */ - >; - ai3x-micbias-vg = <1>; /* 2V */ - - AVDD-supply = <&v28_aic>; - DRVDD-supply = <&v28_aic>; - IOVDD-supply = <&vio_ape>; - DVDD-supply = <&vio_ape>; - - assigned-clocks = <&sys_clkout2_src>, <&sys_clkout2>; - assigned-clock-parents = <&func_96m_ck>; - assigned-clock-rates = <0>, <12000000>; - }; -}; - -&mcbsp2 { - pinctrl-names = "default"; - pinctrl-0 = <&mcbsp2_pins>; - - status = "okay"; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap2420-n8x0-common.dtsi b/arch/arm/boot/dts/ti/omap/omap2420-n8x0-common.dtsi deleted file mode 100644 index fe9dd8bbfc85..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2420-n8x0-common.dtsi +++ /dev/null @@ -1,123 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -#include "omap2420.dtsi" - -/ { - memory@80000000 { - device_type = "memory"; - reg = <0x80000000 0x8000000>; /* 128 MB */ - }; - - chosen { - stdout-path = &uart3; - }; - - ocp { - i2c0 { - compatible = "i2c-cbus-gpio"; - gpios = <&gpio3 2 GPIO_ACTIVE_HIGH /* gpio66 clk */ - &gpio3 1 GPIO_ACTIVE_HIGH /* gpio65 dat */ - &gpio3 0 GPIO_ACTIVE_HIGH /* gpio64 sel */ - >; - #address-cells = <1>; - #size-cells = <0>; - retu: retu@1 { - compatible = "nokia,retu"; - interrupt-parent = <&gpio4>; - interrupts = <12 IRQ_TYPE_EDGE_RISING>; - reg = <0x1>; - }; - }; - }; -}; - -&i2c1 { - clock-frequency = <400000>; - - pmic@72 { - compatible = "menelaus"; - reg = <0x72>; - interrupts = <7 IRQ_TYPE_EDGE_RISING>; - }; -}; - -&i2c2 { - clock-frequency = <400000>; -}; - -&gpmc { - ranges = <0 0 0x04000000 0x1000000>; /* CS0: 16MB for OneNAND */ - - /* gpio-irq for dma: 26 */ - - onenand@0,0 { - #address-cells = <1>; - #size-cells = <1>; - compatible = "ti,omap2-onenand"; - reg = <0 0 0x20000>; /* CS0, offset 0, IO size 128K */ - - gpmc,sync-read; - gpmc,burst-length = <16>; - gpmc,burst-read; - gpmc,burst-wrap; - gpmc,device-width = <2>; - gpmc,mux-add-data = <2>; - gpmc,cs-on-ns = <0>; - gpmc,cs-rd-off-ns = <127>; - gpmc,cs-wr-off-ns = <109>; - gpmc,adv-on-ns = <0>; - gpmc,adv-rd-off-ns = <18>; - gpmc,adv-wr-off-ns = <18>; - gpmc,oe-on-ns = <27>; - gpmc,oe-off-ns = <127>; - gpmc,we-on-ns = <27>; - gpmc,we-off-ns = <72>; - gpmc,rd-cycle-ns = <145>; - gpmc,wr-cycle-ns = <136>; - gpmc,access-ns = <118>; - gpmc,page-burst-access-ns = <27>; - gpmc,bus-turnaround-ns = <0>; - gpmc,cycle2cycle-delay-ns = <0>; - gpmc,wait-monitoring-ns = <0>; - gpmc,clk-activation-ns = <9>; - gpmc,sync-clk-ps = <27000>; - - /* MTD partition table corresponding to old board-n8x0 file. */ - partition@0 { - label = "bootloader"; - reg = <0x00000000 0x00020000>; - read-only; - }; - partition@1 { - label = "config"; - reg = <0x00020000 0x00060000>; - }; - partition@2 { - label = "kernel"; - reg = <0x00080000 0x00200000>; - }; - partition@3 { - label = "initfs"; - reg = <0x00280000 0x00400000>; - }; - partition@4 { - label = "rootfs"; - reg = <0x00680000 0x0f980000>; - }; - partition@5 { - label = "omap2-onenand"; - reg = <0x00000000 0x10000000>; - }; - }; -}; - -&mcspi2 { - status = "okay"; - - wifi@0 { - reg = <0>; - compatible = "st,stlc4560"; - spi-max-frequency = <48000000>; - interrupts-extended = <&gpio3 23 IRQ_TYPE_EDGE_RISING>; - powerdown-gpios = <&gpio4 1 GPIO_ACTIVE_LOW>; /* gpio 97 */ - }; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap2420.dtsi b/arch/arm/boot/dts/ti/omap/omap2420.dtsi deleted file mode 100644 index 821da51cb870..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2420.dtsi +++ /dev/null @@ -1,262 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Device Tree Source for OMAP2420 SoC - * - * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/ - */ - -#include "omap2.dtsi" - -/ { - compatible = "ti,omap2420", "ti,omap2"; - - ocp { - l4: l4@48000000 { - compatible = "ti,omap2-l4", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0x48000000 0x100000>; - - prcm: prcm@8000 { - compatible = "ti,omap2-prcm"; - reg = <0x8000 0x1000>; - - prcm_clocks: clocks { - #address-cells = <1>; - #size-cells = <0>; - }; - - prcm_clockdomains: clockdomains { - }; - }; - - scm: scm@0 { - compatible = "ti,omap2-scm", "simple-bus"; - reg = <0x0 0x1000>; - #address-cells = <1>; - #size-cells = <1>; - #pinctrl-cells = <1>; - ranges = <0 0x0 0x1000>; - - omap2420_pmx: pinmux@30 { - compatible = "ti,omap2420-padconf", - "pinctrl-single"; - reg = <0x30 0x0113>; - #address-cells = <1>; - #size-cells = <0>; - #pinctrl-cells = <1>; - pinctrl-single,register-width = <8>; - pinctrl-single,function-mask = <0x3f>; - }; - - scm_conf: scm_conf@270 { - compatible = "syscon"; - reg = <0x270 0x100>; - #address-cells = <1>; - #size-cells = <1>; - - scm_clocks: clocks { - #address-cells = <1>; - #size-cells = <0>; - }; - }; - - scm_clockdomains: clockdomains { - }; - }; - - target-module@4000 { - compatible = "ti,sysc-omap2", "ti,sysc"; - reg = <0x4000 0x4>, - <0x4004 0x4>; - reg-names = "rev", "sysc"; - ti,sysc-sidle = , - ; - clocks = <&func_32k_ck>; - clock-names = "fck"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0x0 0x4000 0x1000>; - - counter32k: counter@0 { - compatible = "ti,omap-counter32k"; - reg = <0 0x20>; - }; - }; - }; - - gpio1: gpio@48018000 { - compatible = "ti,omap2-gpio"; - reg = <0x48018000 0x200>; - interrupts = <29>; - ti,hwmods = "gpio1"; - ti,gpio-always-on; - #gpio-cells = <2>; - gpio-controller; - #interrupt-cells = <2>; - interrupt-controller; - }; - - gpio2: gpio@4801a000 { - compatible = "ti,omap2-gpio"; - reg = <0x4801a000 0x200>; - interrupts = <30>; - ti,hwmods = "gpio2"; - ti,gpio-always-on; - #gpio-cells = <2>; - gpio-controller; - #interrupt-cells = <2>; - interrupt-controller; - }; - - gpio3: gpio@4801c000 { - compatible = "ti,omap2-gpio"; - reg = <0x4801c000 0x200>; - interrupts = <31>; - ti,hwmods = "gpio3"; - ti,gpio-always-on; - #gpio-cells = <2>; - gpio-controller; - #interrupt-cells = <2>; - interrupt-controller; - }; - - gpio4: gpio@4801e000 { - compatible = "ti,omap2-gpio"; - reg = <0x4801e000 0x200>; - interrupts = <32>; - ti,hwmods = "gpio4"; - ti,gpio-always-on; - #gpio-cells = <2>; - gpio-controller; - #interrupt-cells = <2>; - interrupt-controller; - }; - - gpmc: gpmc@6800a000 { - compatible = "ti,omap2420-gpmc"; - reg = <0x6800a000 0x1000>; - #address-cells = <2>; - #size-cells = <1>; - interrupts = <20>; - gpmc,num-cs = <8>; - gpmc,num-waitpins = <4>; - ti,hwmods = "gpmc"; - interrupt-controller; - #interrupt-cells = <2>; - gpio-controller; - #gpio-cells = <2>; - }; - - mcbsp1: mcbsp@48074000 { - compatible = "ti,omap2420-mcbsp"; - reg = <0x48074000 0xff>; - reg-names = "mpu"; - interrupts = <59>, /* TX interrupt */ - <60>; /* RX interrupt */ - interrupt-names = "tx", "rx"; - ti,hwmods = "mcbsp1"; - dmas = <&sdma 31>, - <&sdma 32>; - dma-names = "tx", "rx"; - status = "disabled"; - }; - - mcbsp2: mcbsp@48076000 { - compatible = "ti,omap2420-mcbsp"; - reg = <0x48076000 0xff>; - reg-names = "mpu"; - interrupts = <62>, /* TX interrupt */ - <63>; /* RX interrupt */ - interrupt-names = "tx", "rx"; - ti,hwmods = "mcbsp2"; - dmas = <&sdma 33>, - <&sdma 34>; - dma-names = "tx", "rx"; - status = "disabled"; - }; - - msdi1: mmc@4809c000 { - compatible = "ti,omap2420-mmc"; - ti,hwmods = "msdi1"; - reg = <0x4809c000 0x80>; - interrupts = <83>; - dmas = <&sdma 61 &sdma 62>; - dma-names = "tx", "rx"; - }; - - mailbox: mailbox@48094000 { - compatible = "ti,omap2-mailbox"; - reg = <0x48094000 0x200>; - interrupts = <26>, <34>; - ti,hwmods = "mailbox"; - #mbox-cells = <1>; - ti,mbox-num-users = <4>; - ti,mbox-num-fifos = <6>; - mbox_dsp: mbox-dsp { - ti,mbox-tx = <0 0 0>; - ti,mbox-rx = <1 0 0>; - }; - mbox_iva: mbox-iva { - ti,mbox-tx = <2 1 3>; - ti,mbox-rx = <3 1 3>; - }; - }; - - timer1_target: target-module@48028000 { - compatible = "ti,sysc-omap2-timer", "ti,sysc"; - reg = <0x48028000 0x4>, - <0x48028010 0x4>, - <0x48028014 0x4>; - reg-names = "rev", "sysc", "syss"; - ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY | - SYSC_OMAP2_EMUFREE | - SYSC_OMAP2_ENAWAKEUP | - SYSC_OMAP2_SOFTRESET | - SYSC_OMAP2_AUTOIDLE)>; - ti,sysc-sidle = , - , - ; - ti,syss-mask = <1>; - clocks = <&gpt1_fck>, <&gpt1_ick>; - clock-names = "fck", "ick"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0x0 0x48028000 0x1000>; - - timer1: timer@0 { - compatible = "ti,omap2420-timer"; - reg = <0 0x400>; - interrupts = <37>; - ti,timer-alwon; - }; - }; - - wd_timer2: wdt@48022000 { - compatible = "ti,omap2-wdt"; - ti,hwmods = "wd_timer2"; - reg = <0x48022000 0x80>; - }; - }; -}; - -&i2c1 { - compatible = "ti,omap2420-i2c"; -}; - -&i2c2 { - compatible = "ti,omap2420-i2c"; -}; - -#include "omap24xx-clocks.dtsi" -#include "omap2420-clocks.dtsi" - -/* Preferred always-on timer for clockevent */ -&timer1_target { - ti,no-reset-on-init; - ti,no-idle; - timer@0 { - assigned-clocks = <&gpt1_fck>; - assigned-clock-parents = <&func_32k_ck>; - }; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap2430-clocks.dtsi b/arch/arm/boot/dts/ti/omap/omap2430-clocks.dtsi deleted file mode 100644 index 4e5ab5189476..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2430-clocks.dtsi +++ /dev/null @@ -1,341 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Device Tree Source for OMAP2430 clock data - * - * Copyright (C) 2014 Texas Instruments, Inc. - */ - -&scm_clocks { - mcbsp3_mux_fck: mcbsp3_mux_fck@78 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_96m_ck>, <&mcbsp_clks>; - reg = <0x78>; - }; - - mcbsp3_fck: mcbsp3_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&mcbsp3_gate_fck>, <&mcbsp3_mux_fck>; - }; - - mcbsp4_mux_fck: mcbsp4_mux_fck@78 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_96m_ck>, <&mcbsp_clks>; - ti,bit-shift = <2>; - reg = <0x78>; - }; - - mcbsp4_fck: mcbsp4_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&mcbsp4_gate_fck>, <&mcbsp4_mux_fck>; - }; - - mcbsp5_mux_fck: mcbsp5_mux_fck@78 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_96m_ck>, <&mcbsp_clks>; - ti,bit-shift = <4>; - reg = <0x78>; - }; - - mcbsp5_fck: mcbsp5_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&mcbsp5_gate_fck>, <&mcbsp5_mux_fck>; - }; -}; - -&prcm_clocks { - iva2_1_gate_ick: iva2_1_gate_ick@800 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&dsp_fck>; - ti,bit-shift = <0>; - reg = <0x0800>; - }; - - iva2_1_div_ick: iva2_1_div_ick@840 { - #clock-cells = <0>; - compatible = "ti,composite-divider-clock"; - clocks = <&dsp_fck>; - ti,bit-shift = <5>; - ti,max-div = <3>; - reg = <0x0840>; - ti,index-starts-at-one; - }; - - iva2_1_ick: iva2_1_ick { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&iva2_1_gate_ick>, <&iva2_1_div_ick>; - }; - - mdm_gate_ick: mdm_gate_ick@c10 { - #clock-cells = <0>; - compatible = "ti,composite-interface-clock"; - clocks = <&core_ck>; - ti,bit-shift = <0>; - reg = <0x0c10>; - }; - - mdm_div_ick: mdm_div_ick@c40 { - #clock-cells = <0>; - compatible = "ti,composite-divider-clock"; - clocks = <&core_ck>; - reg = <0x0c40>; - ti,dividers = <0>, <1>, <0>, <0>, <4>, <0>, <6>, <0>, <0>, <9>; - }; - - mdm_ick: mdm_ick { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&mdm_gate_ick>, <&mdm_div_ick>; - }; - - mdm_osc_ck: mdm_osc_ck@c00 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&osc_ck>; - ti,bit-shift = <1>; - reg = <0x0c00>; - }; - - mcbsp3_ick: mcbsp3_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <3>; - reg = <0x0214>; - }; - - mcbsp3_gate_fck: mcbsp3_gate_fck@204 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&mcbsp_clks>; - ti,bit-shift = <3>; - reg = <0x0204>; - }; - - mcbsp4_ick: mcbsp4_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <4>; - reg = <0x0214>; - }; - - mcbsp4_gate_fck: mcbsp4_gate_fck@204 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&mcbsp_clks>; - ti,bit-shift = <4>; - reg = <0x0204>; - }; - - mcbsp5_ick: mcbsp5_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <5>; - reg = <0x0214>; - }; - - mcbsp5_gate_fck: mcbsp5_gate_fck@204 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&mcbsp_clks>; - ti,bit-shift = <5>; - reg = <0x0204>; - }; - - mcspi3_ick: mcspi3_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <9>; - reg = <0x0214>; - }; - - mcspi3_fck: mcspi3_fck@204 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_48m_ck>; - ti,bit-shift = <9>; - reg = <0x0204>; - }; - - icr_ick: icr_ick@410 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&sys_ck>; - ti,bit-shift = <6>; - reg = <0x0410>; - }; - - i2chs1_fck: i2chs1_fck@204 { - #clock-cells = <0>; - compatible = "ti,omap2430-interface-clock"; - clocks = <&func_96m_ck>; - ti,bit-shift = <19>; - reg = <0x0204>; - }; - - i2chs2_fck: i2chs2_fck@204 { - #clock-cells = <0>; - compatible = "ti,omap2430-interface-clock"; - clocks = <&func_96m_ck>; - ti,bit-shift = <20>; - reg = <0x0204>; - }; - - usbhs_ick: usbhs_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&core_l3_ck>; - ti,bit-shift = <6>; - reg = <0x0214>; - }; - - mmchs1_ick: mmchs1_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <7>; - reg = <0x0214>; - }; - - mmchs1_fck: mmchs1_fck@204 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_96m_ck>; - ti,bit-shift = <7>; - reg = <0x0204>; - }; - - mmchs2_ick: mmchs2_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <8>; - reg = <0x0214>; - }; - - mmchs2_fck: mmchs2_fck@204 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_96m_ck>; - ti,bit-shift = <8>; - reg = <0x0204>; - }; - - gpio5_ick: gpio5_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <10>; - reg = <0x0214>; - }; - - gpio5_fck: gpio5_fck@204 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <10>; - reg = <0x0204>; - }; - - mdm_intc_ick: mdm_intc_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <11>; - reg = <0x0214>; - }; - - mmchsdb1_fck: mmchsdb1_fck@204 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <16>; - reg = <0x0204>; - }; - - mmchsdb2_fck: mmchsdb2_fck@204 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <17>; - reg = <0x0204>; - }; -}; - -&prcm_clockdomains { - gfx_clkdm: gfx_clkdm { - compatible = "ti,clockdomain"; - clocks = <&gfx_ick>; - }; - - core_l3_clkdm: core_l3_clkdm { - compatible = "ti,clockdomain"; - clocks = <&cam_fck>, <&usb_fck>, <&usbhs_ick>; - }; - - wkup_clkdm: wkup_clkdm { - compatible = "ti,clockdomain"; - clocks = <&dpll_ck>, <&emul_ck>, <&gpt1_ick>, <&gpios_ick>, - <&gpios_fck>, <&mpu_wdt_ick>, <&mpu_wdt_fck>, - <&sync_32k_ick>, <&wdt1_ick>, <&omapctrl_ick>, - <&icr_ick>; - }; - - dss_clkdm: dss_clkdm { - compatible = "ti,clockdomain"; - clocks = <&dss_ick>, <&dss_54m_fck>; - }; - - core_l4_clkdm: core_l4_clkdm { - compatible = "ti,clockdomain"; - clocks = <&ssi_l4_ick>, <&gpt2_ick>, <&gpt3_ick>, <&gpt4_ick>, - <&gpt5_ick>, <&gpt6_ick>, <&gpt7_ick>, <&gpt8_ick>, - <&gpt9_ick>, <&gpt10_ick>, <&gpt11_ick>, <&gpt12_ick>, - <&mcbsp1_ick>, <&mcbsp2_ick>, <&mcbsp3_ick>, - <&mcbsp4_ick>, <&mcbsp5_ick>, <&mcspi1_ick>, - <&mcspi1_fck>, <&mcspi2_ick>, <&mcspi2_fck>, - <&mcspi3_ick>, <&mcspi3_fck>, <&uart1_ick>, - <&uart1_fck>, <&uart2_ick>, <&uart2_fck>, <&uart3_ick>, - <&uart3_fck>, <&cam_ick>, <&mailboxes_ick>, - <&wdt4_ick>, <&wdt4_fck>, <&mspro_ick>, <&mspro_fck>, - <&fac_ick>, <&fac_fck>, <&hdq_ick>, <&hdq_fck>, - <&i2c1_ick>, <&i2chs1_fck>, <&i2c2_ick>, <&i2chs2_fck>, - <&des_ick>, <&sha_ick>, <&rng_ick>, <&aes_ick>, - <&pka_ick>, <&mmchs1_ick>, <&mmchs1_fck>, - <&mmchs2_ick>, <&mmchs2_fck>, <&gpio5_ick>, - <&gpio5_fck>, <&mdm_intc_ick>, <&mmchsdb1_fck>, - <&mmchsdb2_fck>; - }; - - mdm_clkdm: mdm_clkdm { - compatible = "ti,clockdomain"; - clocks = <&mdm_osc_ck>; - }; -}; - -&func_96m_ck { - compatible = "ti,mux-clock"; - clocks = <&apll96_ck>, <&alt_ck>; - ti,bit-shift = <4>; - reg = <0x0540>; -}; - -&dsp_div_fck { - ti,max-div = <4>; - ti,index-starts-at-one; -}; - -&ssi_ssr_sst_div_fck { - ti,max-div = <5>; - ti,index-starts-at-one; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap2430-sdp.dts b/arch/arm/boot/dts/ti/omap/omap2430-sdp.dts deleted file mode 100644 index 207070677e3a..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2430-sdp.dts +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright (C) 2013 Texas Instruments Incorporated - https://www.ti.com/ - */ -/dts-v1/; - -#include "omap2430.dtsi" - -/ { - model = "TI OMAP2430 SDP"; - compatible = "ti,omap2430-sdp", "ti,omap2430", "ti,omap2"; - - memory@80000000 { - device_type = "memory"; - reg = <0x80000000 0x8000000>; /* 128 MB */ - }; -}; - -&i2c2 { - clock-frequency = <100000>; - - twl: twl@48 { - reg = <0x48>; - interrupts = <7>; /* SYS_NIRQ cascaded to intc */ - }; -}; - -#include "twl4030.dtsi" - -&mmc1 { - vmmc-supply = <&vmmc1>; - bus-width = <4>; -}; - -&gpmc { - ranges = <5 0 0x08000000 0x01000000>; - ethernet@gpmc { - compatible = "smsc,lan91c94"; - interrupt-parent = <&gpio5>; - interrupts = <21 IRQ_TYPE_LEVEL_LOW>; /* gpio149 */ - reg = <5 0x300 0xf>; - bank-width = <2>; - gpmc,sync-clk-ps = <0>; - gpmc,mux-add-data = <2>; - gpmc,device-width = <1>; - gpmc,cycle2cycle-samecsen; - gpmc,cycle2cycle-diffcsen; - gpmc,cs-on-ns = <6>; - gpmc,cs-rd-off-ns = <187>; - gpmc,cs-wr-off-ns = <187>; - gpmc,adv-on-ns = <18>; - gpmc,adv-rd-off-ns = <48>; - gpmc,adv-wr-off-ns = <48>; - gpmc,oe-on-ns = <60>; - gpmc,oe-off-ns = <169>; - gpmc,we-on-ns = <66>; - gpmc,we-off-ns = <169>; - gpmc,rd-cycle-ns = <187>; - gpmc,wr-cycle-ns = <187>; - gpmc,access-ns = <187>; - gpmc,page-burst-access-ns = <24>; - gpmc,bus-turnaround-ns = <24>; - gpmc,cycle2cycle-delay-ns = <24>; - gpmc,wait-monitoring-ns = <0>; - gpmc,clk-activation-ns = <0>; - gpmc,wr-data-mux-bus-ns = <0>; - gpmc,wr-access-ns = <0>; - }; -}; - diff --git a/arch/arm/boot/dts/ti/omap/omap2430.dtsi b/arch/arm/boot/dts/ti/omap/omap2430.dtsi deleted file mode 100644 index 01bd471f9223..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap2430.dtsi +++ /dev/null @@ -1,366 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Device Tree Source for OMAP243x SoC - * - * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/ - */ - -#include "omap2.dtsi" - -/ { - compatible = "ti,omap2430", "ti,omap2"; - - ocp { - l4_wkup: l4_wkup@49000000 { - compatible = "ti,omap2-l4-wkup", "simple-bus"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0x49000000 0x31000>; - - prcm: prcm@6000 { - compatible = "ti,omap2-prcm"; - reg = <0x6000 0x1000>; - - prcm_clocks: clocks { - #address-cells = <1>; - #size-cells = <0>; - }; - - prcm_clockdomains: clockdomains { - }; - }; - - scm: scm@2000 { - compatible = "ti,omap2-scm", "simple-bus"; - reg = <0x2000 0x1000>; - #address-cells = <1>; - #size-cells = <1>; - #pinctrl-cells = <1>; - ranges = <0 0x2000 0x1000>; - - omap2430_pmx: pinmux@30 { - compatible = "ti,omap2430-padconf", - "pinctrl-single"; - reg = <0x30 0x0154>; - #address-cells = <1>; - #size-cells = <0>; - #pinctrl-cells = <1>; - pinctrl-single,register-width = <8>; - pinctrl-single,function-mask = <0x3f>; - }; - - scm_conf: scm_conf@270 { - compatible = "ti,omap2-scm-conf", "syscon", - "simple-bus"; - reg = <0x270 0x240>; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0 0x270 0x240>; - - scm_clocks: clocks { - #address-cells = <1>; - #size-cells = <0>; - }; - - pbias_regulator: pbias_regulator@230 { - compatible = "ti,pbias-omap2", "ti,pbias-omap"; - reg = <0x230 0x4>; - syscon = <&scm_conf>; - pbias_mmc_reg: pbias_mmc_omap2430 { - regulator-name = "pbias_mmc_omap2430"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <3000000>; - }; - }; - }; - - scm_clockdomains: clockdomains { - }; - }; - - target-module@20000 { - compatible = "ti,sysc-omap2", "ti,sysc"; - reg = <0x20000 0x4>, - <0x20004 0x4>; - reg-names = "rev", "sysc"; - ti,sysc-sidle = , - ; - clocks = <&func_32k_ck>; - clock-names = "fck"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0x0 0x20000 0x1000>; - - counter32k: counter@0 { - compatible = "ti,omap-counter32k"; - reg = <0 0x20>; - }; - }; - }; - - gpio1: gpio@4900c000 { - compatible = "ti,omap2-gpio"; - reg = <0x4900c000 0x200>; - interrupts = <29>; - ti,hwmods = "gpio1"; - ti,gpio-always-on; - #gpio-cells = <2>; - gpio-controller; - #interrupt-cells = <2>; - interrupt-controller; - }; - - gpio2: gpio@4900e000 { - compatible = "ti,omap2-gpio"; - reg = <0x4900e000 0x200>; - interrupts = <30>; - ti,hwmods = "gpio2"; - ti,gpio-always-on; - #gpio-cells = <2>; - gpio-controller; - #interrupt-cells = <2>; - interrupt-controller; - }; - - gpio3: gpio@49010000 { - compatible = "ti,omap2-gpio"; - reg = <0x49010000 0x200>; - interrupts = <31>; - ti,hwmods = "gpio3"; - ti,gpio-always-on; - #gpio-cells = <2>; - gpio-controller; - #interrupt-cells = <2>; - interrupt-controller; - }; - - gpio4: gpio@49012000 { - compatible = "ti,omap2-gpio"; - reg = <0x49012000 0x200>; - interrupts = <32>; - ti,hwmods = "gpio4"; - ti,gpio-always-on; - #gpio-cells = <2>; - gpio-controller; - #interrupt-cells = <2>; - interrupt-controller; - }; - - gpio5: gpio@480b6000 { - compatible = "ti,omap2-gpio"; - reg = <0x480b6000 0x200>; - interrupts = <33>; - ti,hwmods = "gpio5"; - #gpio-cells = <2>; - gpio-controller; - #interrupt-cells = <2>; - interrupt-controller; - }; - - gpmc: gpmc@6e000000 { - compatible = "ti,omap2430-gpmc"; - reg = <0x6e000000 0x1000>; - #address-cells = <2>; - #size-cells = <1>; - interrupts = <20>; - gpmc,num-cs = <8>; - gpmc,num-waitpins = <4>; - ti,hwmods = "gpmc"; - interrupt-controller; - #interrupt-cells = <2>; - gpio-controller; - #gpio-cells = <2>; - }; - - mcbsp1: mcbsp@48074000 { - compatible = "ti,omap2430-mcbsp"; - reg = <0x48074000 0xff>; - reg-names = "mpu"; - interrupts = <64>, /* OCP compliant interrupt */ - <59>, /* TX interrupt */ - <60>, /* RX interrupt */ - <61>; /* RX overflow interrupt */ - interrupt-names = "common", "tx", "rx", "rx_overflow"; - ti,buffer-size = <128>; - ti,hwmods = "mcbsp1"; - dmas = <&sdma 31>, - <&sdma 32>; - dma-names = "tx", "rx"; - status = "disabled"; - }; - - mcbsp2: mcbsp@48076000 { - compatible = "ti,omap2430-mcbsp"; - reg = <0x48076000 0xff>; - reg-names = "mpu"; - interrupts = <16>, /* OCP compliant interrupt */ - <62>, /* TX interrupt */ - <63>; /* RX interrupt */ - interrupt-names = "common", "tx", "rx"; - ti,buffer-size = <128>; - ti,hwmods = "mcbsp2"; - dmas = <&sdma 33>, - <&sdma 34>; - dma-names = "tx", "rx"; - status = "disabled"; - }; - - mcbsp3: mcbsp@4808c000 { - compatible = "ti,omap2430-mcbsp"; - reg = <0x4808c000 0xff>; - reg-names = "mpu"; - interrupts = <17>, /* OCP compliant interrupt */ - <89>, /* TX interrupt */ - <90>; /* RX interrupt */ - interrupt-names = "common", "tx", "rx"; - ti,buffer-size = <128>; - ti,hwmods = "mcbsp3"; - dmas = <&sdma 17>, - <&sdma 18>; - dma-names = "tx", "rx"; - status = "disabled"; - }; - - mcbsp4: mcbsp@4808e000 { - compatible = "ti,omap2430-mcbsp"; - reg = <0x4808e000 0xff>; - reg-names = "mpu"; - interrupts = <18>, /* OCP compliant interrupt */ - <54>, /* TX interrupt */ - <55>; /* RX interrupt */ - interrupt-names = "common", "tx", "rx"; - ti,buffer-size = <128>; - ti,hwmods = "mcbsp4"; - dmas = <&sdma 19>, - <&sdma 20>; - dma-names = "tx", "rx"; - status = "disabled"; - }; - - mcbsp5: mcbsp@48096000 { - compatible = "ti,omap2430-mcbsp"; - reg = <0x48096000 0xff>; - reg-names = "mpu"; - interrupts = <19>, /* OCP compliant interrupt */ - <81>, /* TX interrupt */ - <82>; /* RX interrupt */ - interrupt-names = "common", "tx", "rx"; - ti,buffer-size = <128>; - ti,hwmods = "mcbsp5"; - dmas = <&sdma 21>, - <&sdma 22>; - dma-names = "tx", "rx"; - status = "disabled"; - }; - - mmc1: mmc@4809c000 { - compatible = "ti,omap2-hsmmc"; - reg = <0x4809c000 0x200>; - interrupts = <83>; - ti,hwmods = "mmc1"; - ti,dual-volt; - dmas = <&sdma 61>, <&sdma 62>; - dma-names = "tx", "rx"; - pbias-supply = <&pbias_mmc_reg>; - }; - - mmc2: mmc@480b4000 { - compatible = "ti,omap2-hsmmc"; - reg = <0x480b4000 0x200>; - interrupts = <86>; - ti,hwmods = "mmc2"; - dmas = <&sdma 47>, <&sdma 48>; - dma-names = "tx", "rx"; - }; - - mailbox: mailbox@48094000 { - compatible = "ti,omap2-mailbox"; - reg = <0x48094000 0x200>; - interrupts = <26>; - ti,hwmods = "mailbox"; - #mbox-cells = <1>; - ti,mbox-num-users = <4>; - ti,mbox-num-fifos = <6>; - mbox_dsp: mbox-dsp { - ti,mbox-tx = <0 0 0>; - ti,mbox-rx = <1 0 0>; - }; - }; - - timer1_target: target-module@49018000 { - compatible = "ti,sysc-omap2-timer", "ti,sysc"; - reg = <0x49018000 0x4>, - <0x49018010 0x4>, - <0x49018014 0x4>; - reg-names = "rev", "sysc", "syss"; - ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY | - SYSC_OMAP2_EMUFREE | - SYSC_OMAP2_ENAWAKEUP | - SYSC_OMAP2_SOFTRESET | - SYSC_OMAP2_AUTOIDLE)>; - ti,sysc-sidle = , - , - ; - ti,syss-mask = <1>; - clocks = <&gpt1_fck>, <&gpt1_ick>; - clock-names = "fck", "ick"; - #address-cells = <1>; - #size-cells = <1>; - ranges = <0x0 0x49018000 0x1000>; - - timer1: timer@0 { - compatible = "ti,omap2420-timer"; - reg = <0 0x400>; - interrupts = <37>; - ti,timer-alwon; - }; - }; - - mcspi3: spi@480b8000 { - compatible = "ti,omap2-mcspi"; - ti,hwmods = "mcspi3"; - reg = <0x480b8000 0x100>; - interrupts = <91>; - dmas = <&sdma 15 &sdma 16 &sdma 23 &sdma 24>; - dma-names = "tx0", "rx0", "tx1", "rx1"; - }; - - usb_otg_hs: usb_otg_hs@480ac000 { - compatible = "ti,omap2-musb"; - ti,hwmods = "usb_otg_hs"; - reg = <0x480ac000 0x1000>; - interrupts = <93>; - }; - - wd_timer2: watchdog@49016000 { - compatible = "ti,omap2-wdt"; - ti,hwmods = "wd_timer2"; - reg = <0x49016000 0x80>; - }; - }; -}; - -&sdma { - compatible = "ti,omap2430-sdma", "ti,omap-sdma"; -}; - -&i2c1 { - compatible = "ti,omap2430-i2c"; -}; - -&i2c2 { - compatible = "ti,omap2430-i2c"; -}; - -#include "omap24xx-clocks.dtsi" -#include "omap2430-clocks.dtsi" - -/* Preferred always-on timer for clockevent */ -&timer1_target { - ti,no-reset-on-init; - ti,no-idle; - timer@0 { - assigned-clocks = <&gpt1_fck>; - assigned-clock-parents = <&func_32k_ck>; - }; -}; diff --git a/arch/arm/boot/dts/ti/omap/omap24xx-clocks.dtsi b/arch/arm/boot/dts/ti/omap/omap24xx-clocks.dtsi deleted file mode 100644 index 07af87edf0e2..000000000000 --- a/arch/arm/boot/dts/ti/omap/omap24xx-clocks.dtsi +++ /dev/null @@ -1,1241 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Device Tree Source for OMAP24xx clock data - * - * Copyright (C) 2014 Texas Instruments, Inc. - */ -&scm_clocks { - mcbsp1_mux_fck: mcbsp1_mux_fck@4 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_96m_ck>, <&mcbsp_clks>; - ti,bit-shift = <2>; - reg = <0x4>; - }; - - mcbsp1_fck: mcbsp1_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&mcbsp1_gate_fck>, <&mcbsp1_mux_fck>; - }; - - mcbsp2_mux_fck: mcbsp2_mux_fck@4 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_96m_ck>, <&mcbsp_clks>; - ti,bit-shift = <6>; - reg = <0x4>; - }; - - mcbsp2_fck: mcbsp2_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&mcbsp2_gate_fck>, <&mcbsp2_mux_fck>; - }; -}; - -&prcm_clocks { - func_32k_ck: func_32k_ck { - #clock-cells = <0>; - compatible = "fixed-clock"; - clock-frequency = <32768>; - }; - - secure_32k_ck: secure_32k_ck { - #clock-cells = <0>; - compatible = "fixed-clock"; - clock-frequency = <32768>; - }; - - virt_12m_ck: virt_12m_ck { - #clock-cells = <0>; - compatible = "fixed-clock"; - clock-frequency = <12000000>; - }; - - virt_13m_ck: virt_13m_ck { - #clock-cells = <0>; - compatible = "fixed-clock"; - clock-frequency = <13000000>; - }; - - virt_19200000_ck: virt_19200000_ck { - #clock-cells = <0>; - compatible = "fixed-clock"; - clock-frequency = <19200000>; - }; - - virt_26m_ck: virt_26m_ck { - #clock-cells = <0>; - compatible = "fixed-clock"; - clock-frequency = <26000000>; - }; - - aplls_clkin_ck: aplls_clkin_ck@540 { - #clock-cells = <0>; - compatible = "ti,mux-clock"; - clocks = <&virt_19200000_ck>, <&virt_26m_ck>, <&virt_13m_ck>, <&virt_12m_ck>; - ti,bit-shift = <23>; - reg = <0x0540>; - }; - - aplls_clkin_x2_ck: aplls_clkin_x2_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&aplls_clkin_ck>; - clock-mult = <2>; - clock-div = <1>; - }; - - osc_ck: osc_ck@60 { - #clock-cells = <0>; - compatible = "ti,mux-clock"; - clocks = <&aplls_clkin_ck>, <&aplls_clkin_x2_ck>; - ti,bit-shift = <6>; - reg = <0x0060>; - ti,index-starts-at-one; - }; - - sys_ck: sys_ck@60 { - #clock-cells = <0>; - compatible = "ti,divider-clock"; - clocks = <&osc_ck>; - ti,bit-shift = <6>; - ti,max-div = <3>; - reg = <0x0060>; - ti,index-starts-at-one; - }; - - alt_ck: alt_ck { - #clock-cells = <0>; - compatible = "fixed-clock"; - clock-frequency = <54000000>; - }; - - mcbsp_clks: mcbsp_clks { - #clock-cells = <0>; - compatible = "fixed-clock"; - clock-frequency = <0x0>; - }; - - dpll_ck: dpll_ck@500 { - #clock-cells = <0>; - compatible = "ti,omap2-dpll-core-clock"; - clocks = <&sys_ck>, <&sys_ck>; - reg = <0x0500>, <0x0540>; - }; - - apll96_ck: apll96_ck@500 { - #clock-cells = <0>; - compatible = "ti,omap2-apll-clock"; - clocks = <&sys_ck>; - ti,bit-shift = <2>; - ti,idlest-shift = <8>; - ti,clock-frequency = <96000000>; - reg = <0x0500>, <0x0530>, <0x0520>; - }; - - apll54_ck: apll54_ck@500 { - #clock-cells = <0>; - compatible = "ti,omap2-apll-clock"; - clocks = <&sys_ck>; - ti,bit-shift = <6>; - ti,idlest-shift = <9>; - ti,clock-frequency = <54000000>; - reg = <0x0500>, <0x0530>, <0x0520>; - }; - - func_54m_ck: func_54m_ck@540 { - #clock-cells = <0>; - compatible = "ti,mux-clock"; - clocks = <&apll54_ck>, <&alt_ck>; - ti,bit-shift = <5>; - reg = <0x0540>; - }; - - core_ck: core_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&dpll_ck>; - clock-mult = <1>; - clock-div = <1>; - }; - - func_96m_ck: func_96m_ck@540 { - #clock-cells = <0>; - }; - - apll96_d2_ck: apll96_d2_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&apll96_ck>; - clock-mult = <1>; - clock-div = <2>; - }; - - func_48m_ck: func_48m_ck@540 { - #clock-cells = <0>; - compatible = "ti,mux-clock"; - clocks = <&apll96_d2_ck>, <&alt_ck>; - ti,bit-shift = <3>; - reg = <0x0540>; - }; - - func_12m_ck: func_12m_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&func_48m_ck>; - clock-mult = <1>; - clock-div = <4>; - }; - - sys_clkout_src_gate: sys_clkout_src_gate@70 { - #clock-cells = <0>; - compatible = "ti,composite-no-wait-gate-clock"; - clocks = <&core_ck>; - ti,bit-shift = <7>; - reg = <0x0070>; - }; - - sys_clkout_src_mux: sys_clkout_src_mux@70 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&core_ck>, <&sys_ck>, <&func_96m_ck>, <&func_54m_ck>; - reg = <0x0070>; - }; - - sys_clkout_src: sys_clkout_src { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&sys_clkout_src_gate>, <&sys_clkout_src_mux>; - }; - - sys_clkout: sys_clkout@70 { - #clock-cells = <0>; - compatible = "ti,divider-clock"; - clocks = <&sys_clkout_src>; - ti,bit-shift = <3>; - ti,max-div = <64>; - reg = <0x0070>; - ti,index-power-of-two; - }; - - emul_ck: emul_ck@78 { - #clock-cells = <0>; - compatible = "ti,gate-clock"; - clocks = <&func_54m_ck>; - ti,bit-shift = <0>; - reg = <0x0078>; - }; - - mpu_ck: mpu_ck@140 { - #clock-cells = <0>; - compatible = "ti,divider-clock"; - clocks = <&core_ck>; - ti,max-div = <31>; - reg = <0x0140>; - ti,index-starts-at-one; - }; - - dsp_gate_fck: dsp_gate_fck@800 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&core_ck>; - ti,bit-shift = <0>; - reg = <0x0800>; - }; - - dsp_div_fck: dsp_div_fck@840 { - #clock-cells = <0>; - compatible = "ti,composite-divider-clock"; - clocks = <&core_ck>; - reg = <0x0840>; - }; - - dsp_fck: dsp_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&dsp_gate_fck>, <&dsp_div_fck>; - }; - - core_l3_ck: core_l3_ck@240 { - #clock-cells = <0>; - compatible = "ti,divider-clock"; - clocks = <&core_ck>; - ti,max-div = <31>; - reg = <0x0240>; - ti,index-starts-at-one; - }; - - gfx_3d_gate_fck: gfx_3d_gate_fck@300 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&core_l3_ck>; - ti,bit-shift = <2>; - reg = <0x0300>; - }; - - gfx_3d_div_fck: gfx_3d_div_fck@340 { - #clock-cells = <0>; - compatible = "ti,composite-divider-clock"; - clocks = <&core_l3_ck>; - ti,max-div = <4>; - reg = <0x0340>; - ti,index-starts-at-one; - }; - - gfx_3d_fck: gfx_3d_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gfx_3d_gate_fck>, <&gfx_3d_div_fck>; - }; - - gfx_2d_gate_fck: gfx_2d_gate_fck@300 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&core_l3_ck>; - ti,bit-shift = <1>; - reg = <0x0300>; - }; - - gfx_2d_div_fck: gfx_2d_div_fck@340 { - #clock-cells = <0>; - compatible = "ti,composite-divider-clock"; - clocks = <&core_l3_ck>; - ti,max-div = <4>; - reg = <0x0340>; - ti,index-starts-at-one; - }; - - gfx_2d_fck: gfx_2d_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gfx_2d_gate_fck>, <&gfx_2d_div_fck>; - }; - - gfx_ick: gfx_ick@310 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&core_l3_ck>; - ti,bit-shift = <0>; - reg = <0x0310>; - }; - - l4_ck: l4_ck@240 { - #clock-cells = <0>; - compatible = "ti,divider-clock"; - clocks = <&core_l3_ck>; - ti,bit-shift = <5>; - ti,max-div = <3>; - reg = <0x0240>; - ti,index-starts-at-one; - }; - - dss_ick: dss_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-no-wait-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <0>; - reg = <0x0210>; - }; - - dss1_gate_fck: dss1_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-no-wait-gate-clock"; - clocks = <&core_ck>; - ti,bit-shift = <0>; - reg = <0x0200>; - }; - - core_d2_ck: core_d2_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <2>; - }; - - core_d3_ck: core_d3_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <3>; - }; - - core_d4_ck: core_d4_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <4>; - }; - - core_d5_ck: core_d5_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <5>; - }; - - core_d6_ck: core_d6_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <6>; - }; - - dummy_ck: dummy_ck { - #clock-cells = <0>; - compatible = "fixed-clock"; - clock-frequency = <0>; - }; - - core_d8_ck: core_d8_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <8>; - }; - - core_d9_ck: core_d9_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <9>; - }; - - core_d12_ck: core_d12_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <12>; - }; - - core_d16_ck: core_d16_ck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_ck>; - clock-mult = <1>; - clock-div = <16>; - }; - - dss1_mux_fck: dss1_mux_fck@240 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&sys_ck>, <&core_ck>, <&core_d2_ck>, <&core_d3_ck>, <&core_d4_ck>, <&core_d5_ck>, <&core_d6_ck>, <&core_d8_ck>, <&core_d9_ck>, <&core_d12_ck>, <&core_d16_ck>; - ti,bit-shift = <8>; - reg = <0x0240>; - }; - - dss1_fck: dss1_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&dss1_gate_fck>, <&dss1_mux_fck>; - }; - - dss2_gate_fck: dss2_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-no-wait-gate-clock"; - clocks = <&func_48m_ck>; - ti,bit-shift = <1>; - reg = <0x0200>; - }; - - dss2_mux_fck: dss2_mux_fck@240 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&sys_ck>, <&func_48m_ck>; - ti,bit-shift = <13>; - reg = <0x0240>; - }; - - dss2_fck: dss2_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&dss2_gate_fck>, <&dss2_mux_fck>; - }; - - dss_54m_fck: dss_54m_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_54m_ck>; - ti,bit-shift = <2>; - reg = <0x0200>; - }; - - ssi_ssr_sst_gate_fck: ssi_ssr_sst_gate_fck@204 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&core_ck>; - ti,bit-shift = <1>; - reg = <0x0204>; - }; - - ssi_ssr_sst_div_fck: ssi_ssr_sst_div_fck@240 { - #clock-cells = <0>; - compatible = "ti,composite-divider-clock"; - clocks = <&core_ck>; - ti,bit-shift = <20>; - reg = <0x0240>; - }; - - ssi_ssr_sst_fck: ssi_ssr_sst_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&ssi_ssr_sst_gate_fck>, <&ssi_ssr_sst_div_fck>; - }; - - usb_l4_gate_ick: usb_l4_gate_ick@214 { - #clock-cells = <0>; - compatible = "ti,composite-interface-clock"; - clocks = <&core_l3_ck>; - ti,bit-shift = <0>; - reg = <0x0214>; - }; - - usb_l4_div_ick: usb_l4_div_ick@240 { - #clock-cells = <0>; - compatible = "ti,composite-divider-clock"; - clocks = <&core_l3_ck>; - ti,bit-shift = <25>; - reg = <0x0240>; - ti,dividers = <0>, <1>, <2>, <0>, <4>; - }; - - usb_l4_ick: usb_l4_ick { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&usb_l4_gate_ick>, <&usb_l4_div_ick>; - }; - - ssi_l4_ick: ssi_l4_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <1>; - reg = <0x0214>; - }; - - gpt1_ick: gpt1_ick@410 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&sys_ck>; - ti,bit-shift = <0>; - reg = <0x0410>; - }; - - gpt1_gate_fck: gpt1_gate_fck@400 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <0>; - reg = <0x0400>; - }; - - gpt1_mux_fck: gpt1_mux_fck@440 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - reg = <0x0440>; - }; - - gpt1_fck: gpt1_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt1_gate_fck>, <&gpt1_mux_fck>; - }; - - gpt2_ick: gpt2_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <4>; - reg = <0x0210>; - }; - - gpt2_gate_fck: gpt2_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <4>; - reg = <0x0200>; - }; - - gpt2_mux_fck: gpt2_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <2>; - reg = <0x0244>; - }; - - gpt2_fck: gpt2_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt2_gate_fck>, <&gpt2_mux_fck>; - }; - - gpt3_ick: gpt3_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <5>; - reg = <0x0210>; - }; - - gpt3_gate_fck: gpt3_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <5>; - reg = <0x0200>; - }; - - gpt3_mux_fck: gpt3_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <4>; - reg = <0x0244>; - }; - - gpt3_fck: gpt3_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt3_gate_fck>, <&gpt3_mux_fck>; - }; - - gpt4_ick: gpt4_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <6>; - reg = <0x0210>; - }; - - gpt4_gate_fck: gpt4_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <6>; - reg = <0x0200>; - }; - - gpt4_mux_fck: gpt4_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <6>; - reg = <0x0244>; - }; - - gpt4_fck: gpt4_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt4_gate_fck>, <&gpt4_mux_fck>; - }; - - gpt5_ick: gpt5_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <7>; - reg = <0x0210>; - }; - - gpt5_gate_fck: gpt5_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <7>; - reg = <0x0200>; - }; - - gpt5_mux_fck: gpt5_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <8>; - reg = <0x0244>; - }; - - gpt5_fck: gpt5_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt5_gate_fck>, <&gpt5_mux_fck>; - }; - - gpt6_ick: gpt6_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <8>; - reg = <0x0210>; - }; - - gpt6_gate_fck: gpt6_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <8>; - reg = <0x0200>; - }; - - gpt6_mux_fck: gpt6_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <10>; - reg = <0x0244>; - }; - - gpt6_fck: gpt6_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt6_gate_fck>, <&gpt6_mux_fck>; - }; - - gpt7_ick: gpt7_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <9>; - reg = <0x0210>; - }; - - gpt7_gate_fck: gpt7_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <9>; - reg = <0x0200>; - }; - - gpt7_mux_fck: gpt7_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <12>; - reg = <0x0244>; - }; - - gpt7_fck: gpt7_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt7_gate_fck>, <&gpt7_mux_fck>; - }; - - gpt8_ick: gpt8_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <10>; - reg = <0x0210>; - }; - - gpt8_gate_fck: gpt8_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <10>; - reg = <0x0200>; - }; - - gpt8_mux_fck: gpt8_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <14>; - reg = <0x0244>; - }; - - gpt8_fck: gpt8_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt8_gate_fck>, <&gpt8_mux_fck>; - }; - - gpt9_ick: gpt9_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <11>; - reg = <0x0210>; - }; - - gpt9_gate_fck: gpt9_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <11>; - reg = <0x0200>; - }; - - gpt9_mux_fck: gpt9_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <16>; - reg = <0x0244>; - }; - - gpt9_fck: gpt9_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt9_gate_fck>, <&gpt9_mux_fck>; - }; - - gpt10_ick: gpt10_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <12>; - reg = <0x0210>; - }; - - gpt10_gate_fck: gpt10_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <12>; - reg = <0x0200>; - }; - - gpt10_mux_fck: gpt10_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <18>; - reg = <0x0244>; - }; - - gpt10_fck: gpt10_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt10_gate_fck>, <&gpt10_mux_fck>; - }; - - gpt11_ick: gpt11_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <13>; - reg = <0x0210>; - }; - - gpt11_gate_fck: gpt11_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <13>; - reg = <0x0200>; - }; - - gpt11_mux_fck: gpt11_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <20>; - reg = <0x0244>; - }; - - gpt11_fck: gpt11_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt11_gate_fck>, <&gpt11_mux_fck>; - }; - - gpt12_ick: gpt12_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <14>; - reg = <0x0210>; - }; - - gpt12_gate_fck: gpt12_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <14>; - reg = <0x0200>; - }; - - gpt12_mux_fck: gpt12_mux_fck@244 { - #clock-cells = <0>; - compatible = "ti,composite-mux-clock"; - clocks = <&func_32k_ck>, <&sys_ck>, <&alt_ck>; - ti,bit-shift = <22>; - reg = <0x0244>; - }; - - gpt12_fck: gpt12_fck { - #clock-cells = <0>; - compatible = "ti,composite-clock"; - clocks = <&gpt12_gate_fck>, <&gpt12_mux_fck>; - }; - - mcbsp1_ick: mcbsp1_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <15>; - reg = <0x0210>; - }; - - mcbsp1_gate_fck: mcbsp1_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&mcbsp_clks>; - ti,bit-shift = <15>; - reg = <0x0200>; - }; - - mcbsp2_ick: mcbsp2_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <16>; - reg = <0x0210>; - }; - - mcbsp2_gate_fck: mcbsp2_gate_fck@200 { - #clock-cells = <0>; - compatible = "ti,composite-gate-clock"; - clocks = <&mcbsp_clks>; - ti,bit-shift = <16>; - reg = <0x0200>; - }; - - mcspi1_ick: mcspi1_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <17>; - reg = <0x0210>; - }; - - mcspi1_fck: mcspi1_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_48m_ck>; - ti,bit-shift = <17>; - reg = <0x0200>; - }; - - mcspi2_ick: mcspi2_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <18>; - reg = <0x0210>; - }; - - mcspi2_fck: mcspi2_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_48m_ck>; - ti,bit-shift = <18>; - reg = <0x0200>; - }; - - uart1_ick: uart1_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <21>; - reg = <0x0210>; - }; - - uart1_fck: uart1_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_48m_ck>; - ti,bit-shift = <21>; - reg = <0x0200>; - }; - - uart2_ick: uart2_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <22>; - reg = <0x0210>; - }; - - uart2_fck: uart2_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_48m_ck>; - ti,bit-shift = <22>; - reg = <0x0200>; - }; - - uart3_ick: uart3_ick@214 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <2>; - reg = <0x0214>; - }; - - uart3_fck: uart3_fck@204 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_48m_ck>; - ti,bit-shift = <2>; - reg = <0x0204>; - }; - - gpios_ick: gpios_ick@410 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&sys_ck>; - ti,bit-shift = <2>; - reg = <0x0410>; - }; - - gpios_fck: gpios_fck@400 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <2>; - reg = <0x0400>; - }; - - mpu_wdt_ick: mpu_wdt_ick@410 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&sys_ck>; - ti,bit-shift = <3>; - reg = <0x0410>; - }; - - mpu_wdt_fck: mpu_wdt_fck@400 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <3>; - reg = <0x0400>; - }; - - sync_32k_ick: sync_32k_ick@410 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&sys_ck>; - ti,bit-shift = <1>; - reg = <0x0410>; - }; - - wdt1_ick: wdt1_ick@410 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&sys_ck>; - ti,bit-shift = <4>; - reg = <0x0410>; - }; - - omapctrl_ick: omapctrl_ick@410 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&sys_ck>; - ti,bit-shift = <5>; - reg = <0x0410>; - }; - - cam_fck: cam_fck@200 { - #clock-cells = <0>; - compatible = "ti,gate-clock"; - clocks = <&func_96m_ck>; - ti,bit-shift = <31>; - reg = <0x0200>; - }; - - cam_ick: cam_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-no-wait-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <31>; - reg = <0x0210>; - }; - - mailboxes_ick: mailboxes_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <30>; - reg = <0x0210>; - }; - - wdt4_ick: wdt4_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <29>; - reg = <0x0210>; - }; - - wdt4_fck: wdt4_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_32k_ck>; - ti,bit-shift = <29>; - reg = <0x0200>; - }; - - mspro_ick: mspro_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <27>; - reg = <0x0210>; - }; - - mspro_fck: mspro_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_96m_ck>; - ti,bit-shift = <27>; - reg = <0x0200>; - }; - - fac_ick: fac_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <25>; - reg = <0x0210>; - }; - - fac_fck: fac_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_12m_ck>; - ti,bit-shift = <25>; - reg = <0x0200>; - }; - - hdq_ick: hdq_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <23>; - reg = <0x0210>; - }; - - hdq_fck: hdq_fck@200 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_12m_ck>; - ti,bit-shift = <23>; - reg = <0x0200>; - }; - - i2c1_ick: i2c1_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <19>; - reg = <0x0210>; - }; - - i2c2_ick: i2c2_ick@210 { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <20>; - reg = <0x0210>; - }; - - gpmc_fck: gpmc_fck@238 { - #clock-cells = <0>; - compatible = "ti,fixed-factor-clock"; - clocks = <&core_l3_ck>; - ti,clock-div = <1>; - ti,autoidle-shift = <1>; - reg = <0x0238>; - ti,clock-mult = <1>; - }; - - sdma_fck: sdma_fck { - #clock-cells = <0>; - compatible = "fixed-factor-clock"; - clocks = <&core_l3_ck>; - clock-mult = <1>; - clock-div = <1>; - }; - - sdma_ick: sdma_ick@238 { - #clock-cells = <0>; - compatible = "ti,fixed-factor-clock"; - clocks = <&core_l3_ck>; - ti,clock-div = <1>; - ti,autoidle-shift = <0>; - reg = <0x0238>; - ti,clock-mult = <1>; - }; - - sdrc_ick: sdrc_ick@238 { - #clock-cells = <0>; - compatible = "ti,fixed-factor-clock"; - clocks = <&core_l3_ck>; - ti,clock-div = <1>; - ti,autoidle-shift = <2>; - reg = <0x0238>; - ti,clock-mult = <1>; - }; - - des_ick: des_ick@21c { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <0>; - reg = <0x021c>; - }; - - sha_ick: sha_ick@21c { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <1>; - reg = <0x021c>; - }; - - rng_ick: rng_ick@21c { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <2>; - reg = <0x021c>; - }; - - aes_ick: aes_ick@21c { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <3>; - reg = <0x021c>; - }; - - pka_ick: pka_ick@21c { - #clock-cells = <0>; - compatible = "ti,omap3-interface-clock"; - clocks = <&l4_ck>; - ti,bit-shift = <4>; - reg = <0x021c>; - }; - - usb_fck: usb_fck@204 { - #clock-cells = <0>; - compatible = "ti,wait-gate-clock"; - clocks = <&func_48m_ck>; - ti,bit-shift = <0>; - reg = <0x0204>; - }; -}; diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index f827f89567fd..2e9597f50c58 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig @@ -22,9 +22,7 @@ CONFIG_NAMESPACES=y CONFIG_BLK_DEV_INITRD=y CONFIG_EXPERT=y CONFIG_PROFILING=y -CONFIG_ARCH_MULTI_V6=y CONFIG_OMAP_RESET_CLOCKS=y -CONFIG_ARCH_OMAP2=y CONFIG_ARCH_OMAP3=y CONFIG_ARCH_OMAP4=y CONFIG_SOC_OMAP5=y diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 79f8afe3a6bf..37ecbfc0a19f 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -5,15 +5,6 @@ menu "TI OMAP/AM/DM/DRA Family" config OMAP_HWMOD bool -config ARCH_OMAP2 - bool "TI OMAP2" - depends on ARCH_MULTI_V6 - depends on !SMP - select ARCH_OMAP2PLUS - select CPU_ARM1136R0 - select OMAP_HWMOD - select SOC_HAS_OMAP2_SDRC - config ARCH_OMAP3 bool "TI OMAP3" depends on ARCH_MULTI_V7 @@ -118,7 +109,7 @@ config ARCH_OMAP2PLUS select OMAP_IRQCHIP select CLKSRC_TI_32K help - Systems based on OMAP2, OMAP3, OMAP4 or OMAP5 + Systems based on OMAP3, OMAP4 or OMAP5 config OMAP_INTERCONNECT_BARRIER bool @@ -129,7 +120,7 @@ config ARCH_OMAP if ARCH_OMAP2PLUS -menu "TI OMAP2/3/4 Specific Features" +menu "TI OMAP3/4 Specific Features" config ARCH_OMAP2PLUS_TYPICAL bool "Typical OMAP configuration" @@ -138,8 +129,7 @@ config ARCH_OMAP2PLUS_TYPICAL select HIGHMEM select I2C select I2C_OMAP - select MENELAUS if ARCH_OMAP2 - select NEON if CPU_V7 + select NEON select REGULATOR select REGULATOR_FIXED_VOLTAGE select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4 @@ -204,27 +194,7 @@ config OMAP3_L2_AUX_SECURE_SERVICE_SET_ID PPA routine service ID for setting L2 auxiliary control register. comment "OMAP Core Type" - depends on ARCH_OMAP2 - -config SOC_OMAP2420 - bool "OMAP2420 support (DEPRECATED)" - depends on ARCH_OMAP2 - default y - select OMAP_DM_SYSTIMER - select OMAP_DM_TIMER - select SOC_HAS_OMAP2_SDRC - help - This SoC is scheduled for removal in early 2027, - since it uses the ARM1136r0 CPU revision. - -config SOC_OMAP2430 - bool "OMAP2430 support (DEPRECATED)" - depends on ARCH_OMAP2 - default y - select SOC_HAS_OMAP2_SDRC - help - This SoC is scheduled for removal in early 2027, - since it uses the ARM1136r0 CPU revision. + depends on ARCH_OMAP3 config SOC_OMAP3430 bool "OMAP3430 support" @@ -237,33 +207,9 @@ config SOC_TI81XX depends on ARCH_OMAP3 default y -comment "OMAP Legacy Platform Data Board Type" - depends on ARCH_OMAP2PLUS - config MACH_OMAP_GENERIC bool -config MACH_OMAP2_TUSB6010 - bool - depends on ARCH_OMAP2 && SOC_OMAP2420 - default y if MACH_NOKIA_N8X0 - -config MACH_NOKIA_N810 - bool - -config MACH_NOKIA_N810_WIMAX - bool - -config MACH_NOKIA_N8X0 - bool "Nokia N800/N810 (DEPRECATED)" - depends on SOC_OMAP2420 - default y - select MACH_NOKIA_N810 - select MACH_NOKIA_N810_WIMAX - help - This machine is scheduled for removal in early 2027, - since it uses the ARM1136r0 CPU revision. - endmenu endif diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index daf21127c82f..6c741442dc0d 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -5,23 +5,17 @@ # Common support obj-y := id.o io.o control.o devices.o fb.o pm.o \ - common.o dma.o omap-headsmp.o sram.o + common.o dma.o omap-headsmp.o -hwmod-common = omap_hwmod.o \ +# OMAP3 hwmod specific +obj-$(CONFIG_ARCH_OMAP3) += sram.o omap_hwmod.o \ omap_hwmod_common_data.o \ omap_hwmod_common_ipblock_data.o \ omap_device.o display.o hdq1w.o \ i2c.o wd_timer.o -clock-common = clock.o -secure-common = omap-smc.o omap-secure.o -obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common) -obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) $(secure-common) -obj-$(CONFIG_ARCH_OMAP4) += $(secure-common) -obj-$(CONFIG_SOC_AM33XX) += $(secure-common) -obj-$(CONFIG_SOC_OMAP5) += $(secure-common) -obj-$(CONFIG_SOC_AM43XX) += $(secure-common) -obj-$(CONFIG_SOC_DRA7XX) += $(secure-common) +# secure world +obj-y += omap-smc.o omap-secure.o ifneq ($(CONFIG_SND_SOC_OMAP_MCBSP),) obj-$(CONFIG_OMAP_HWMOD) += mcbsp.o @@ -49,13 +43,7 @@ omap5-dra7-common-$(CONFIG_SOC_HAS_REALTIME_COUNTER) = timer.o obj-$(CONFIG_SOC_OMAP5) += $(omap5-dra7-common-y) obj-$(CONFIG_SOC_DRA7XX) += $(omap5-dra7-common-y) -# Functions loaded to SRAM -obj-$(CONFIG_SOC_OMAP2420) += sram242x.o -obj-$(CONFIG_SOC_OMAP2430) += sram243x.o - # Restart code (OMAP4/5 currently in omap4-common.c) -obj-$(CONFIG_SOC_OMAP2420) += omap2-restart.o -obj-$(CONFIG_SOC_OMAP2430) += omap2-restart.o obj-$(CONFIG_SOC_TI81XX) += ti81xx-restart.o obj-$(CONFIG_SOC_AM33XX) += am33xx-restart.o obj-$(CONFIG_SOC_AM43XX) += omap4-restart.o @@ -65,7 +53,6 @@ obj-$(CONFIG_SOC_OMAP5) += omap4-restart.o obj-$(CONFIG_SOC_DRA7XX) += omap4-restart.o # SMS/SDRC -obj-$(CONFIG_ARCH_OMAP2) += sdrc2xxx.o # obj-$(CONFIG_ARCH_OMAP3) += sdrc3xxx.o # OPP table initialization @@ -80,7 +67,6 @@ obj-$(CONFIG_ARCH_OMAP4) += $(omap-4-5-pm-common) obj-$(CONFIG_SOC_OMAP5) += $(omap-4-5-pm-common) ifeq ($(CONFIG_PM),y) -obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o omap-4-5-pm-common += pm44xx.o obj-$(CONFIG_ARCH_OMAP4) += $(omap-4-5-pm-common) @@ -105,7 +91,6 @@ endif # PRCM obj-y += prm_common.o cm_common.o -obj-$(CONFIG_ARCH_OMAP2) += prm2xxx_3xxx.o prm2xxx.o cm2xxx.o obj-$(CONFIG_ARCH_OMAP3) += prm2xxx_3xxx.o prm3xxx.o cm3xxx.o obj-$(CONFIG_ARCH_OMAP3) += vc3xxx_data.o vp3xxx_data.o omap-prcm-4-5-common = cminst44xx.o prm44xx.o \ @@ -122,8 +107,6 @@ obj-$(CONFIG_SOC_AM43XX) += $(omap-prcm-4-5-common) \ # OMAP voltage domains voltagedomain-common := voltage.o vc.o vp.o -obj-$(CONFIG_ARCH_OMAP2) += $(voltagedomain-common) -obj-$(CONFIG_ARCH_OMAP2) += voltagedomains2xxx_data.o obj-$(CONFIG_ARCH_OMAP3) += $(voltagedomain-common) obj-$(CONFIG_ARCH_OMAP3) += voltagedomains3xxx_data.o obj-$(CONFIG_ARCH_OMAP4) += $(voltagedomain-common) @@ -136,9 +119,6 @@ obj-$(CONFIG_SOC_DRA7XX) += $(voltagedomain-common) # OMAP powerdomain framework powerdomain-common += powerdomain.o powerdomain-common.o -obj-$(CONFIG_ARCH_OMAP2) += $(powerdomain-common) -obj-$(CONFIG_ARCH_OMAP2) += powerdomains2xxx_data.o -obj-$(CONFIG_ARCH_OMAP2) += powerdomains2xxx_3xxx_data.o obj-$(CONFIG_ARCH_OMAP3) += $(powerdomain-common) obj-$(CONFIG_ARCH_OMAP3) += powerdomains3xxx_data.o obj-$(CONFIG_ARCH_OMAP3) += powerdomains2xxx_3xxx_data.o @@ -155,10 +135,6 @@ obj-$(CONFIG_SOC_DRA7XX) += powerdomains7xx_data.o # PRCM clockdomain control clockdomain-common += clockdomain.o -obj-$(CONFIG_ARCH_OMAP2) += $(clockdomain-common) -obj-$(CONFIG_ARCH_OMAP2) += clockdomains2xxx_3xxx_data.o -obj-$(CONFIG_SOC_OMAP2420) += clockdomains2420_data.o -obj-$(CONFIG_SOC_OMAP2430) += clockdomains2430_data.o obj-$(CONFIG_ARCH_OMAP3) += $(clockdomain-common) obj-$(CONFIG_ARCH_OMAP3) += clockdomains2xxx_3xxx_data.o obj-$(CONFIG_ARCH_OMAP3) += clockdomains3xxx_data.o @@ -176,47 +152,20 @@ obj-$(CONFIG_SOC_DRA7XX) += $(clockdomain-common) obj-$(CONFIG_SOC_DRA7XX) += clockdomains7xx_data.o # Clock framework -obj-$(CONFIG_ARCH_OMAP2) += $(clock-common) -obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpllcore.o -obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_virt_prcm_set.o -obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o -obj-$(CONFIG_ARCH_OMAP3) += $(clock-common) -obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) -obj-$(CONFIG_SOC_AM33XX) += $(clock-common) -obj-$(CONFIG_SOC_OMAP5) += $(clock-common) -obj-$(CONFIG_SOC_DRA7XX) += $(clock-common) -obj-$(CONFIG_SOC_AM43XX) += $(clock-common) - -# OMAP2 clock rate set data (old "OPP" data) -obj-$(CONFIG_SOC_OMAP2420) += opp2420_data.o -obj-$(CONFIG_SOC_OMAP2430) += opp2430_data.o +obj-y += clock.o # hwmod data -obj-$(CONFIG_SOC_OMAP2420) += omap_hwmod_2xxx_ipblock_data.o -obj-$(CONFIG_SOC_OMAP2420) += omap_hwmod_2xxx_3xxx_ipblock_data.o -obj-$(CONFIG_SOC_OMAP2420) += omap_hwmod_2xxx_interconnect_data.o -obj-$(CONFIG_SOC_OMAP2420) += omap_hwmod_2420_data.o -obj-$(CONFIG_SOC_OMAP2430) += omap_hwmod_2xxx_ipblock_data.o -obj-$(CONFIG_SOC_OMAP2430) += omap_hwmod_2xxx_3xxx_ipblock_data.o -obj-$(CONFIG_SOC_OMAP2430) += omap_hwmod_2xxx_interconnect_data.o -obj-$(CONFIG_SOC_OMAP2430) += omap_hwmod_2430_data.o obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_2xxx_3xxx_ipblock_data.o obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o obj-$(CONFIG_SOC_TI81XX) += omap_hwmod_81xx_data.o -# OMAP2420 MSDI controller integration support ("MMC") -obj-$(CONFIG_SOC_OMAP2420) += msdi.o - # Specific board support obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o pdata-quirks.o -obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o # Platform specific device init code obj-y += omap_phy_internal.o -obj-$(CONFIG_MACH_OMAP2_TUSB6010) += usb-tusb6010.o - $(obj)/pm-asm-offsets.h: $(obj)/pm-asm-offsets.s FORCE $(call filechk,offsets,__TI_PM_ASM_OFFSETS_H__) diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index bff673e932fe..972b8cf0547f 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c @@ -45,40 +45,6 @@ void tick_broadcast(const struct cpumask *mask) } #endif -#ifdef CONFIG_SOC_OMAP2420 -static const char *const omap242x_boards_compat[] __initconst = { - "ti,omap2420", - NULL, -}; - -DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)") - .reserve = omap_reserve, - .map_io = omap242x_map_io, - .init_early = omap2420_init_early, - .init_machine = omap_generic_init, - .init_time = omap_init_time_of, - .dt_compat = omap242x_boards_compat, - .restart = omap2xxx_restart, -MACHINE_END -#endif - -#ifdef CONFIG_SOC_OMAP2430 -static const char *const omap243x_boards_compat[] __initconst = { - "ti,omap2430", - NULL, -}; - -DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)") - .reserve = omap_reserve, - .map_io = omap243x_map_io, - .init_early = omap2430_init_early, - .init_machine = omap_generic_init, - .init_time = omap_init_time_of, - .dt_compat = omap243x_boards_compat, - .restart = omap2xxx_restart, -MACHINE_END -#endif - #ifdef CONFIG_ARCH_OMAP3 /* Some boards need board name for legacy userspace in /proc/cpuinfo */ static const char *const n900_boards_compat[] __initconst = { diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c deleted file mode 100644 index d9acd32c5457..000000000000 --- a/arch/arm/mach-omap2/board-n8x0.c +++ /dev/null @@ -1,512 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * linux/arch/arm/mach-omap2/board-n8x0.c - * - * Copyright (C) 2005-2009 Nokia Corporation - * Author: Juha Yrjola - * - * Modified from mach-omap2/board-generic.c - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "common.h" -#include "mmc.h" -#include "usb-tusb6010.h" -#include "soc.h" -#include "common-board-devices.h" - -#define TUSB6010_ASYNC_CS 1 -#define TUSB6010_SYNC_CS 4 -#define TUSB6010_DMACHAN 0x3f - -#define NOKIA_N810_WIMAX (1 << 2) -#define NOKIA_N810 (1 << 1) -#define NOKIA_N800 (1 << 0) - -static u32 board_caps; - -#define board_is_n800() (board_caps & NOKIA_N800) -#define board_is_n810() (board_caps & NOKIA_N810) -#define board_is_n810_wimax() (board_caps & NOKIA_N810_WIMAX) - -static void board_check_revision(void) -{ - if (of_machine_is_compatible("nokia,n800")) - board_caps = NOKIA_N800; - else if (of_machine_is_compatible("nokia,n810")) - board_caps = NOKIA_N810; - else if (of_machine_is_compatible("nokia,n810-wimax")) - board_caps = NOKIA_N810_WIMAX; - - if (!board_caps) - pr_err("Unknown board\n"); -} - -#if IS_ENABLED(CONFIG_USB_MUSB_TUSB6010) - -static struct musb_hdrc_config musb_config = { - .multipoint = 1, - .dyn_fifo = 1, - .num_eps = 16, - .ram_bits = 12, -}; - -static struct musb_hdrc_platform_data tusb_data = { - .mode = MUSB_OTG, - .min_power = 25, /* x2 = 50 mA drawn from VBUS as peripheral */ - .power = 100, /* Max 100 mA VBUS for host mode */ - .config = &musb_config, -}; - -static struct gpiod_lookup_table tusb_gpio_table = { - .dev_id = "musb-tusb", - .table = { - GPIO_LOOKUP("gpio-0-31", 0, "enable", GPIO_ACTIVE_HIGH), - GPIO_LOOKUP("gpio-32-63", 26, "int", GPIO_ACTIVE_HIGH), - { } - }, -}; - -static void __init n8x0_usb_init(void) -{ - int ret = 0; - - gpiod_add_lookup_table(&tusb_gpio_table); - ret = tusb6010_setup_interface(&tusb_data, TUSB6010_REFCLK_19, 2, - TUSB6010_ASYNC_CS, TUSB6010_SYNC_CS, - TUSB6010_DMACHAN); - if (ret != 0) - return; - - pr_info("TUSB 6010\n"); - - return; -} -#else - -static void __init n8x0_usb_init(void) {} - -#endif /*CONFIG_USB_MUSB_TUSB6010 */ - -#if defined(CONFIG_MENELAUS) && IS_ENABLED(CONFIG_MMC_OMAP) - -/* - * On both N800 and N810, only the first of the two MMC controllers is in use. - * The two MMC slots are multiplexed via Menelaus companion chip over I2C. - * On N800, both slots are powered via Menelaus. On N810, only one of the - * slots is powered via Menelaus. The N810 EMMC is powered via GPIO. - * - * VMMC slot 1 on both N800 and N810 - * VDCDC3_APE and VMCS2_APE slot 2 on N800 - * GPIO23 and GPIO9 slot 2 EMMC on N810 - * - */ -static int slot1_cover_open; -static int slot2_cover_open; -static struct device *mmc_device; - -static struct gpiod_lookup_table nokia800_mmc_gpio_table = { - .dev_id = "mmci-omap.0", - .table = { - /* Slot switch, GPIO 96 */ - GPIO_LOOKUP("gpio-96-127", 0, "switch", GPIO_ACTIVE_HIGH), - { } - }, -}; - -static struct gpiod_lookup_table nokia810_mmc_gpio_table = { - .dev_id = "mmci-omap.0", - .table = { - /* Slot switch, GPIO 96 */ - GPIO_LOOKUP("gpio-96-127", 0, "switch", GPIO_ACTIVE_HIGH), - /* Slot index 1, VSD power, GPIO 23 */ - GPIO_LOOKUP_IDX("gpio-0-31", 23, "vsd", 1, GPIO_ACTIVE_HIGH), - /* Slot index 1, VIO power, GPIO 9 */ - GPIO_LOOKUP_IDX("gpio-0-31", 9, "vio", 1, GPIO_ACTIVE_HIGH), - { } - }, -}; - -static int n8x0_mmc_set_power_menelaus(struct device *dev, int slot, - int power_on, int vdd) -{ - int mV; - -#ifdef CONFIG_MMC_DEBUG - dev_dbg(dev, "Set slot %d power: %s (vdd %d)\n", slot + 1, - str_on_off(power_on), vdd); -#endif - if (slot == 0) { - if (!power_on) - return menelaus_set_vmmc(0); - switch (1 << vdd) { - case MMC_VDD_33_34: - case MMC_VDD_32_33: - case MMC_VDD_31_32: - mV = 3100; - break; - case MMC_VDD_30_31: - mV = 3000; - break; - case MMC_VDD_28_29: - mV = 2800; - break; - case MMC_VDD_165_195: - mV = 1850; - break; - default: - BUG(); - } - return menelaus_set_vmmc(mV); - } else { - if (!power_on) - return menelaus_set_vdcdc(3, 0); - switch (1 << vdd) { - case MMC_VDD_33_34: - case MMC_VDD_32_33: - mV = 3300; - break; - case MMC_VDD_30_31: - case MMC_VDD_29_30: - mV = 3000; - break; - case MMC_VDD_28_29: - case MMC_VDD_27_28: - mV = 2800; - break; - case MMC_VDD_24_25: - case MMC_VDD_23_24: - mV = 2400; - break; - case MMC_VDD_22_23: - case MMC_VDD_21_22: - mV = 2200; - break; - case MMC_VDD_20_21: - mV = 2000; - break; - case MMC_VDD_165_195: - mV = 1800; - break; - default: - BUG(); - } - return menelaus_set_vdcdc(3, mV); - } - return 0; -} - -static int n8x0_mmc_set_power(struct device *dev, int slot, int power_on, - int vdd) -{ - if (board_is_n800() || slot == 0) - return n8x0_mmc_set_power_menelaus(dev, slot, power_on, vdd); - - /* The n810 power will be handled by GPIO code in the driver */ - - return 0; -} - -static int n8x0_mmc_set_bus_mode(struct device *dev, int slot, int bus_mode) -{ - int r; - - dev_dbg(dev, "Set slot %d bus mode %s\n", slot + 1, - bus_mode == MMC_BUSMODE_OPENDRAIN ? "open-drain" : "push-pull"); - BUG_ON(slot != 0 && slot != 1); - slot++; - switch (bus_mode) { - case MMC_BUSMODE_OPENDRAIN: - r = menelaus_set_mmc_opendrain(slot, 1); - break; - case MMC_BUSMODE_PUSHPULL: - r = menelaus_set_mmc_opendrain(slot, 0); - break; - default: - BUG(); - } - if (r != 0 && printk_ratelimit()) - dev_err(dev, "MMC: unable to set bus mode for slot %d\n", - slot); - return r; -} - -static int n8x0_mmc_get_cover_state(struct device *dev, int slot) -{ - slot++; - BUG_ON(slot != 1 && slot != 2); - if (slot == 1) - return slot1_cover_open; - else - return slot2_cover_open; -} - -static void n8x0_mmc_callback(void *data, u8 card_mask) -{ -#ifdef CONFIG_MMC_OMAP - int bit, *openp, index; - - if (board_is_n800()) { - bit = 1 << 1; - openp = &slot2_cover_open; - index = 1; - } else { - bit = 1; - openp = &slot1_cover_open; - index = 0; - } - - if (card_mask & bit) - *openp = 1; - else - *openp = 0; - - omap_mmc_notify_cover_event(mmc_device, index, *openp); -#else - pr_warn("MMC: notify cover event not available\n"); -#endif -} - -static int n8x0_mmc_late_init(struct device *dev) -{ - int r, bit, *openp; - int vs2sel; - - mmc_device = dev; - - r = menelaus_set_slot_sel(1); - if (r < 0) - return r; - - if (board_is_n800()) - vs2sel = 0; - else - vs2sel = 2; - - r = menelaus_set_mmc_slot(2, 0, vs2sel, 1); - if (r < 0) - return r; - - n8x0_mmc_set_power(dev, 0, MMC_POWER_ON, 16); /* MMC_VDD_28_29 */ - n8x0_mmc_set_power(dev, 1, MMC_POWER_ON, 16); - - r = menelaus_set_mmc_slot(1, 1, 0, 1); - if (r < 0) - return r; - r = menelaus_set_mmc_slot(2, 1, vs2sel, 1); - if (r < 0) - return r; - - r = menelaus_get_slot_pin_states(); - if (r < 0) - return r; - - if (board_is_n800()) { - bit = 1 << 1; - openp = &slot2_cover_open; - } else { - bit = 1; - openp = &slot1_cover_open; - slot2_cover_open = 0; - } - - /* All slot pin bits seem to be inversed until first switch change */ - if (r == 0xf || r == (0xf & ~bit)) - r = ~r; - - if (r & bit) - *openp = 1; - else - *openp = 0; - - r = menelaus_register_mmc_callback(n8x0_mmc_callback, NULL); - - return r; -} - -static void n8x0_mmc_shutdown(struct device *dev) -{ - int vs2sel; - - if (board_is_n800()) - vs2sel = 0; - else - vs2sel = 2; - - menelaus_set_mmc_slot(1, 0, 0, 0); - menelaus_set_mmc_slot(2, 0, vs2sel, 0); -} - -static void n8x0_mmc_cleanup(struct device *dev) -{ - menelaus_unregister_mmc_callback(); -} - -/* - * MMC controller1 has two slots that are multiplexed via I2C. - * MMC controller2 is not in use. - */ -static struct omap_mmc_platform_data mmc1_data = { - .nr_slots = 0, - .init = n8x0_mmc_late_init, - .cleanup = n8x0_mmc_cleanup, - .shutdown = n8x0_mmc_shutdown, - .max_freq = 24000000, - .slots[0] = { - .wires = 4, - .set_power = n8x0_mmc_set_power, - .set_bus_mode = n8x0_mmc_set_bus_mode, - .get_cover_state = n8x0_mmc_get_cover_state, - .ocr_mask = MMC_VDD_165_195 | MMC_VDD_30_31 | - MMC_VDD_32_33 | MMC_VDD_33_34, - .name = "internal", - }, - .slots[1] = { - .set_power = n8x0_mmc_set_power, - .set_bus_mode = n8x0_mmc_set_bus_mode, - .get_cover_state = n8x0_mmc_get_cover_state, - .ocr_mask = MMC_VDD_165_195 | MMC_VDD_20_21 | - MMC_VDD_21_22 | MMC_VDD_22_23 | - MMC_VDD_23_24 | MMC_VDD_24_25 | - MMC_VDD_27_28 | MMC_VDD_28_29 | - MMC_VDD_29_30 | MMC_VDD_30_31 | - MMC_VDD_32_33 | MMC_VDD_33_34, - .name = "external", - }, -}; - -static struct omap_mmc_platform_data *mmc_data[OMAP24XX_NR_MMC]; - -static void __init n8x0_mmc_init(void) -{ - if (board_is_n810()) { - mmc1_data.slots[0].name = "external"; - - /* - * Some Samsung Movinand chips do not like open-ended - * multi-block reads and fall to braind-dead state - * while doing so. Reducing the number of blocks in - * the transfer or delays in clock disable do not help - */ - mmc1_data.slots[1].name = "internal"; - mmc1_data.slots[1].ban_openended = 1; - gpiod_add_lookup_table(&nokia810_mmc_gpio_table); - } else { - gpiod_add_lookup_table(&nokia800_mmc_gpio_table); - } - - mmc1_data.nr_slots = 2; - mmc_data[0] = &mmc1_data; -} -#else -static struct omap_mmc_platform_data mmc1_data; -static void __init n8x0_mmc_init(void) -{ -} -#endif /* CONFIG_MMC_OMAP */ - -#ifdef CONFIG_MENELAUS - -static int n8x0_auto_sleep_regulators(void) -{ - u32 val; - int ret; - - val = EN_VPLL_SLEEP | EN_VMMC_SLEEP \ - | EN_VAUX_SLEEP | EN_VIO_SLEEP \ - | EN_VMEM_SLEEP | EN_DC3_SLEEP \ - | EN_VC_SLEEP | EN_DC2_SLEEP; - - ret = menelaus_set_regulator_sleep(1, val); - if (ret < 0) { - pr_err("Could not set regulators to sleep on menelaus: %u\n", - ret); - return ret; - } - return 0; -} - -static int n8x0_auto_voltage_scale(void) -{ - int ret; - - ret = menelaus_set_vcore_hw(1400, 1050); - if (ret < 0) { - pr_err("Could not set VCORE voltage on menelaus: %u\n", ret); - return ret; - } - return 0; -} - -static int n8x0_menelaus_late_init(struct device *dev) -{ - int ret; - - ret = n8x0_auto_voltage_scale(); - if (ret < 0) - return ret; - ret = n8x0_auto_sleep_regulators(); - if (ret < 0) - return ret; - return 0; -} - -#else -static int n8x0_menelaus_late_init(struct device *dev) -{ - return 0; -} -#endif - -struct menelaus_platform_data n8x0_menelaus_platform_data = { - .late_init = n8x0_menelaus_late_init, -}; - -static struct gpiod_lookup_table nokia810_asoc_gpio_table = { - .dev_id = "soc-audio", - .table = { - GPIO_LOOKUP("gpio-0-15", 10, "headset", GPIO_ACTIVE_HIGH), - GPIO_LOOKUP("gpio-80-111", 21, "speaker", GPIO_ACTIVE_HIGH), - { } - }, -}; - -static int __init n8x0_late_initcall(void) -{ - if (!board_caps) - return -ENODEV; - - n8x0_mmc_init(); - n8x0_usb_init(); - gpiod_add_lookup_table(&nokia810_asoc_gpio_table); - - return 0; -} -omap_late_initcall(n8x0_late_initcall); - -/* - * Legacy init pdata init for n8x0. Note that we want to follow the - * I2C bus numbering starting at 0 for device tree like other omaps. - */ -void * __init n8x0_legacy_init(void) -{ - board_check_revision(); - return &mmc1_data; -} diff --git a/arch/arm/mach-omap2/clkt2xxx_dpll.c b/arch/arm/mach-omap2/clkt2xxx_dpll.c deleted file mode 100644 index 0edebf3355fa..000000000000 --- a/arch/arm/mach-omap2/clkt2xxx_dpll.c +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * OMAP2-specific DPLL control functions - * - * Copyright (C) 2011 Nokia Corporation - * Paul Walmsley - */ - -#include -#include -#include -#include - -#include "clock.h" -#include "cm2xxx.h" -#include "cm-regbits-24xx.h" - -/* Private functions */ - -/** - * _allow_idle - enable DPLL autoidle bits - * @clk: struct clk * of the DPLL to operate on - * - * Enable DPLL automatic idle control. The DPLL will enter low-power - * stop when its downstream clocks are gated. No return value. - * REVISIT: DPLL can optionally enter low-power bypass by writing 0x1 - * instead. Add some mechanism to optionally enter this mode. - */ -static void _allow_idle(struct clk_hw_omap *clk) -{ - if (!clk || !clk->dpll_data) - return; - - omap2xxx_cm_set_dpll_auto_low_power_stop(); -} - -/** - * _deny_idle - prevent DPLL from automatically idling - * @clk: struct clk * of the DPLL to operate on - * - * Disable DPLL automatic idle control. No return value. - */ -static void _deny_idle(struct clk_hw_omap *clk) -{ - if (!clk || !clk->dpll_data) - return; - - omap2xxx_cm_set_dpll_disable_autoidle(); -} - - -/* Public data */ -const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll = { - .allow_idle = _allow_idle, - .deny_idle = _deny_idle, -}; diff --git a/arch/arm/mach-omap2/clkt2xxx_dpllcore.c b/arch/arm/mach-omap2/clkt2xxx_dpllcore.c deleted file mode 100644 index 93f6d3cd9525..000000000000 --- a/arch/arm/mach-omap2/clkt2xxx_dpllcore.c +++ /dev/null @@ -1,194 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * DPLL + CORE_CLK composite clock functions - * - * Copyright (C) 2005-2008 Texas Instruments, Inc. - * Copyright (C) 2004-2010 Nokia Corporation - * - * Contacts: - * Richard Woodruff - * Paul Walmsley - * - * Based on earlier work by Tuukka Tikkanen, Tony Lindgren, - * Gordon McNutt and RidgeRun, Inc. - * - * XXX The DPLL and CORE clocks should be split into two separate clock - * types. - */ -#undef DEBUG - -#include -#include -#include -#include -#include - -#include "clock.h" -#include "clock2xxx.h" -#include "opp2xxx.h" -#include "cm2xxx.h" -#include "cm-regbits-24xx.h" -#include "sdrc.h" -#include "sram.h" - -/* #define DOWN_VARIABLE_DPLL 1 */ /* Experimental */ - -/* - * dpll_core_ck: pointer to the combined dpll_ck + core_ck on OMAP2xxx - * (currently defined as "dpll_ck" in the OMAP2xxx clock tree). Set - * during dpll_ck init and used later by omap2xxx_clk_get_core_rate(). - */ -static struct clk_hw_omap *dpll_core_ck; - -/** - * omap2xxx_clk_get_core_rate - return the CORE_CLK rate - * - * Returns the CORE_CLK rate. CORE_CLK can have one of three rate - * sources on OMAP2xxx: the DPLL CLKOUT rate, DPLL CLKOUTX2, or 32KHz - * (the latter is unusual). This currently should be called with - * struct clk *dpll_ck, which is a composite clock of dpll_ck and - * core_ck. - */ -unsigned long omap2xxx_clk_get_core_rate(void) -{ - long long core_clk; - u32 v; - - WARN_ON(!dpll_core_ck); - - core_clk = omap2_get_dpll_rate(dpll_core_ck); - - v = omap2xxx_cm_get_core_clk_src(); - - if (v == CORE_CLK_SRC_32K) - core_clk = 32768; - else - core_clk *= v; - - return core_clk; -} - -/* - * Uses the current prcm set to tell if a rate is valid. - * You can go slower, but not faster within a given rate set. - */ -static long omap2_dpllcore_round_rate(unsigned long target_rate) -{ - u32 high, low, core_clk_src; - - core_clk_src = omap2xxx_cm_get_core_clk_src(); - - if (core_clk_src == CORE_CLK_SRC_DPLL) { /* DPLL clockout */ - high = curr_prcm_set->dpll_speed * 2; - low = curr_prcm_set->dpll_speed; - } else { /* DPLL clockout x 2 */ - high = curr_prcm_set->dpll_speed; - low = curr_prcm_set->dpll_speed / 2; - } - -#ifdef DOWN_VARIABLE_DPLL - if (target_rate > high) - return high; - else - return target_rate; -#else - if (target_rate > low) - return high; - else - return low; -#endif - -} - -unsigned long omap2_dpllcore_recalc(struct clk_hw *hw, - unsigned long parent_rate) -{ - return omap2xxx_clk_get_core_rate(); -} - -int omap2_reprogram_dpllcore(struct clk_hw *hw, unsigned long rate, - unsigned long parent_rate) -{ - struct clk_hw_omap *clk = to_clk_hw_omap(hw); - u32 cur_rate, low, mult, div, valid_rate, done_rate; - u32 bypass = 0; - struct prcm_config tmpset; - const struct dpll_data *dd; - - cur_rate = omap2xxx_clk_get_core_rate(); - mult = omap2xxx_cm_get_core_clk_src(); - - if ((rate == (cur_rate / 2)) && (mult == 2)) { - omap2xxx_sdrc_reprogram(CORE_CLK_SRC_DPLL, 1); - } else if ((rate == (cur_rate * 2)) && (mult == 1)) { - omap2xxx_sdrc_reprogram(CORE_CLK_SRC_DPLL_X2, 1); - } else if (rate != cur_rate) { - valid_rate = omap2_dpllcore_round_rate(rate); - if (valid_rate != rate) - return -EINVAL; - - if (mult == 1) - low = curr_prcm_set->dpll_speed; - else - low = curr_prcm_set->dpll_speed / 2; - - dd = clk->dpll_data; - if (!dd) - return -EINVAL; - - tmpset.cm_clksel1_pll = - omap_clk_ll_ops.clk_readl(&dd->mult_div1_reg); - tmpset.cm_clksel1_pll &= ~(dd->mult_mask | - dd->div1_mask); - div = ((curr_prcm_set->xtal_speed / 1000000) - 1); - tmpset.cm_clksel2_pll = omap2xxx_cm_get_core_pll_config(); - tmpset.cm_clksel2_pll &= ~OMAP24XX_CORE_CLK_SRC_MASK; - if (rate > low) { - tmpset.cm_clksel2_pll |= CORE_CLK_SRC_DPLL_X2; - mult = ((rate / 2) / 1000000); - done_rate = CORE_CLK_SRC_DPLL_X2; - } else { - tmpset.cm_clksel2_pll |= CORE_CLK_SRC_DPLL; - mult = (rate / 1000000); - done_rate = CORE_CLK_SRC_DPLL; - } - tmpset.cm_clksel1_pll |= (div << __ffs(dd->mult_mask)); - tmpset.cm_clksel1_pll |= (mult << __ffs(dd->div1_mask)); - - /* Worst case */ - tmpset.base_sdrc_rfr = SDRC_RFR_CTRL_BYPASS; - - if (rate == curr_prcm_set->xtal_speed) /* If asking for 1-1 */ - bypass = 1; - - /* For omap2xxx_sdrc_init_params() */ - omap2xxx_sdrc_reprogram(CORE_CLK_SRC_DPLL_X2, 1); - - /* Force dll lock mode */ - omap2_set_prcm(tmpset.cm_clksel1_pll, tmpset.base_sdrc_rfr, - bypass); - - /* Errata: ret dll entry state */ - omap2xxx_sdrc_init_params(omap2xxx_sdrc_dll_is_unlocked()); - omap2xxx_sdrc_reprogram(done_rate, 0); - } - - return 0; -} - -/** - * omap2xxx_clkt_dpllcore_init - clk init function for dpll_ck - * @clk: struct clk *dpll_ck - * - * Store a local copy of @clk in dpll_core_ck so other code can query - * the core rate without having to clk_get(), which can sleep. Must - * only be called once. No return value. XXX If the clock - * registration process is ever changed such that dpll_ck is no longer - * statically defined, this code may need to change to increment some - * kind of use count on dpll_ck. - */ -void omap2xxx_clkt_dpllcore_init(struct clk_hw *hw) -{ - WARN(dpll_core_ck, "dpll_core_ck already set - should never happen"); - dpll_core_ck = to_clk_hw_omap(hw); -} diff --git a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c deleted file mode 100644 index 2b04e422b46c..000000000000 --- a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c +++ /dev/null @@ -1,259 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * OMAP2xxx DVFS virtual clock functions - * - * Copyright (C) 2005-2008, 2012 Texas Instruments, Inc. - * Copyright (C) 2004-2010 Nokia Corporation - * - * Contacts: - * Richard Woodruff - * Paul Walmsley - * - * Based on earlier work by Tuukka Tikkanen, Tony Lindgren, - * Gordon McNutt and RidgeRun, Inc. - * - * XXX Some of this code should be replaceable by the upcoming OPP layer - * code. However, some notion of "rate set" is probably still necessary - * for OMAP2xxx at least. Rate sets should be generalized so they can be - * used for any OMAP chip, not just OMAP2xxx. In particular, Richard Woodruff - * has in the past expressed a preference to use rate sets for OPP changes, - * rather than dynamically recalculating the clock tree, so if someone wants - * this badly enough to write the code to handle it, we should support it - * as an option. - */ -#undef DEBUG - -#include -#include -#include -#include -#include -#include - -#include "soc.h" -#include "clock.h" -#include "clock2xxx.h" -#include "opp2xxx.h" -#include "cm2xxx.h" -#include "cm-regbits-24xx.h" -#include "sdrc.h" -#include "sram.h" - -static u16 cpu_mask; - -const struct prcm_config *curr_prcm_set; -const struct prcm_config *rate_table; - -/* - * sys_ck_rate: the rate of the external high-frequency clock - * oscillator on the board. Set by the SoC-specific clock init code. - * Once set during a boot, will not change. - */ -static unsigned long sys_ck_rate; - -/** - * omap2_table_mpu_recalc - just return the MPU speed - * @clk: virt_prcm_set struct clk - * - * Set virt_prcm_set's rate to the mpu_speed field of the current PRCM set. - */ -static unsigned long omap2_table_mpu_recalc(struct clk_hw *clk, - unsigned long parent_rate) -{ - return curr_prcm_set->mpu_speed; -} - -/* - * Look for a rate equal or less than the target rate given a configuration set. - * - * What's not entirely clear is "which" field represents the key field. - * Some might argue L3-DDR, others ARM, others IVA. This code is simple and - * just uses the ARM rates. - */ -static int omap2_determine_rate_to_table(struct clk_hw *hw, - struct clk_rate_request *req) -{ - const struct prcm_config *ptr; - long highest_rate; - - highest_rate = -EINVAL; - - for (ptr = rate_table; ptr->mpu_speed; ptr++) { - if (!(ptr->flags & cpu_mask)) - continue; - if (ptr->xtal_speed != sys_ck_rate) - continue; - - highest_rate = ptr->mpu_speed; - - /* Can check only after xtal frequency check */ - if (ptr->mpu_speed <= req->rate) - break; - } - req->rate = highest_rate; - - return 0; -} - -/* Sets basic clocks based on the specified rate */ -static int omap2_select_table_rate(struct clk_hw *hw, unsigned long rate, - unsigned long parent_rate) -{ - u32 cur_rate, done_rate, bypass = 0; - const struct prcm_config *prcm; - unsigned long found_speed = 0; - unsigned long flags; - - for (prcm = rate_table; prcm->mpu_speed; prcm++) { - if (!(prcm->flags & cpu_mask)) - continue; - - if (prcm->xtal_speed != sys_ck_rate) - continue; - - if (prcm->mpu_speed <= rate) { - found_speed = prcm->mpu_speed; - break; - } - } - - if (!found_speed) { - printk(KERN_INFO "Could not set MPU rate to %luMHz\n", - rate / 1000000); - return -EINVAL; - } - - curr_prcm_set = prcm; - cur_rate = omap2xxx_clk_get_core_rate(); - - if (prcm->dpll_speed == cur_rate / 2) { - omap2xxx_sdrc_reprogram(CORE_CLK_SRC_DPLL, 1); - } else if (prcm->dpll_speed == cur_rate * 2) { - omap2xxx_sdrc_reprogram(CORE_CLK_SRC_DPLL_X2, 1); - } else if (prcm->dpll_speed != cur_rate) { - local_irq_save(flags); - - if (prcm->dpll_speed == prcm->xtal_speed) - bypass = 1; - - if ((prcm->cm_clksel2_pll & OMAP24XX_CORE_CLK_SRC_MASK) == - CORE_CLK_SRC_DPLL_X2) - done_rate = CORE_CLK_SRC_DPLL_X2; - else - done_rate = CORE_CLK_SRC_DPLL; - - omap2xxx_cm_set_mod_dividers(prcm->cm_clksel_mpu, - prcm->cm_clksel_dsp, - prcm->cm_clksel_gfx, - prcm->cm_clksel1_core, - prcm->cm_clksel_mdm); - - /* x2 to enter omap2xxx_sdrc_init_params() */ - omap2xxx_sdrc_reprogram(CORE_CLK_SRC_DPLL_X2, 1); - - omap2_set_prcm(prcm->cm_clksel1_pll, prcm->base_sdrc_rfr, - bypass); - - omap2xxx_sdrc_init_params(omap2xxx_sdrc_dll_is_unlocked()); - omap2xxx_sdrc_reprogram(done_rate, 0); - - local_irq_restore(flags); - } - - return 0; -} - -/** - * omap2xxx_clkt_vps_check_bootloader_rates - determine which of the rate - * table sets matches the current CORE DPLL hardware rate - * - * Check the MPU rate set by bootloader. Sets the 'curr_prcm_set' - * global to point to the active rate set when found; otherwise, sets - * it to NULL. No return value; - */ -static void omap2xxx_clkt_vps_check_bootloader_rates(void) -{ - const struct prcm_config *prcm = NULL; - unsigned long rate; - - rate = omap2xxx_clk_get_core_rate(); - for (prcm = rate_table; prcm->mpu_speed; prcm++) { - if (!(prcm->flags & cpu_mask)) - continue; - if (prcm->xtal_speed != sys_ck_rate) - continue; - if (prcm->dpll_speed <= rate) - break; - } - curr_prcm_set = prcm; -} - -/** - * omap2xxx_clkt_vps_late_init - store a copy of the sys_ck rate - * - * Store a copy of the sys_ck rate for later use by the OMAP2xxx DVFS - * code. (The sys_ck rate does not -- or rather, must not -- change - * during kernel runtime.) Must be called after we have a valid - * sys_ck rate, but before the virt_prcm_set clock rate is - * recalculated. No return value. - */ -static void omap2xxx_clkt_vps_late_init(void) -{ - struct clk *c; - - c = clk_get(NULL, "sys_ck"); - if (IS_ERR(c)) { - WARN(1, "could not locate sys_ck\n"); - } else { - sys_ck_rate = clk_get_rate(c); - clk_put(c); - } -} - -#ifdef CONFIG_OF -#include -#include - -static const struct clk_ops virt_prcm_set_ops = { - .recalc_rate = &omap2_table_mpu_recalc, - .set_rate = &omap2_select_table_rate, - .determine_rate = &omap2_determine_rate_to_table, -}; - -/** - * omap2xxx_clkt_vps_init - initialize virt_prcm_set clock - * - * Does a manual init for the virtual prcm DVFS clock for OMAP2. This - * function is called only from omap2 DT clock init, as the virtual - * node is not modelled in the DT clock data. - */ -void omap2xxx_clkt_vps_init(void) -{ - struct clk_init_data init = { NULL }; - struct clk_hw_omap *hw = NULL; - struct clk *clk; - const char *parent_name = "mpu_ck"; - - omap2xxx_clkt_vps_late_init(); - omap2xxx_clkt_vps_check_bootloader_rates(); - - hw = kzalloc_obj(*hw); - if (!hw) - return; - init.name = "virt_prcm_set"; - init.ops = &virt_prcm_set_ops; - init.parent_names = &parent_name; - init.num_parents = 1; - - hw->hw.init = &init; - - clk = clk_register(NULL, &hw->hw); - if (IS_ERR(clk)) { - printk(KERN_ERR "Failed to register clock\n"); - kfree(hw); - return; - } - - clkdev_create(clk, "cpufreq_ck", NULL); -} -#endif diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 83fae51722a9..b73a80503da8 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c @@ -30,9 +30,7 @@ #include "clockdomain.h" #include "clock.h" #include "cm.h" -#include "cm2xxx.h" #include "cm3xxx.h" -#include "cm-regbits-24xx.h" #include "cm-regbits-34xx.h" #include "common.h" @@ -94,11 +92,7 @@ void __init ti_clk_init_features(void) } /* Bypass value setup for DPLLs */ - if (cpu_is_omap24xx()) { - features.dpll_bypass_vals |= - (1 << OMAP2XXX_EN_DPLL_LPBYPASS) | - (1 << OMAP2XXX_EN_DPLL_FRBYPASS); - } else if (cpu_is_omap34xx()) { + if (cpu_is_omap34xx()) { features.dpll_bypass_vals |= (1 << OMAP3XXX_EN_DPLL_LPBYPASS) | (1 << OMAP3XXX_EN_DPLL_FRBYPASS); @@ -122,9 +116,7 @@ void __init ti_clk_init_features(void) * 34xx reverses this, just to keep us on our toes * AM35xx uses both, depending on the module. */ - if (cpu_is_omap24xx()) - features.cm_idlest_val = OMAP24XX_CM_IDLEST_VAL; - else if (cpu_is_omap34xx()) + if (cpu_is_omap34xx()) features.cm_idlest_val = OMAP34XX_CM_IDLEST_VAL; /* On OMAP3430 ES1.0, DPLL4 can't be re-programmed */ diff --git a/arch/arm/mach-omap2/clock2xxx.h b/arch/arm/mach-omap2/clock2xxx.h deleted file mode 100644 index 73c011dadfd2..000000000000 --- a/arch/arm/mach-omap2/clock2xxx.h +++ /dev/null @@ -1,17 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * OMAP2 clock function prototypes and macros - * - * Copyright (C) 2005-2010 Texas Instruments, Inc. - * Copyright (C) 2004-2010 Nokia Corporation - */ - -#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK2XXX_H -#define __ARCH_ARM_MACH_OMAP2_CLOCK2XXX_H - -#include -#include "clock.h" - -unsigned long omap2xxx_clk_get_core_rate(void); - -#endif diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c index 69dc5b839335..4b5ae1f40d50 100644 --- a/arch/arm/mach-omap2/clockdomain.c +++ b/arch/arm/mach-omap2/clockdomain.c @@ -1213,7 +1213,7 @@ int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk) int clkdm_hwmod_enable(struct clockdomain *clkdm, struct omap_hwmod *oh) { /* The clkdm attribute does not exist yet prior OMAP4 */ - if (cpu_is_omap24xx() || cpu_is_omap34xx()) + if (cpu_is_omap34xx()) return 0; /* @@ -1244,7 +1244,7 @@ int clkdm_hwmod_enable(struct clockdomain *clkdm, struct omap_hwmod *oh) int clkdm_hwmod_disable(struct clockdomain *clkdm, struct omap_hwmod *oh) { /* The clkdm attribute does not exist yet prior OMAP4 */ - if (cpu_is_omap24xx() || cpu_is_omap34xx()) + if (cpu_is_omap34xx()) return 0; if (!oh) diff --git a/arch/arm/mach-omap2/clockdomain.h b/arch/arm/mach-omap2/clockdomain.h index 86a2f9e5d0ef..2d422b5f121f 100644 --- a/arch/arm/mach-omap2/clockdomain.h +++ b/arch/arm/mach-omap2/clockdomain.h @@ -216,8 +216,6 @@ int clkdm_hwmod_disable(struct clockdomain *clkdm, struct omap_hwmod *oh); void clkdm_save_context(void); void clkdm_restore_context(void); -extern void __init omap242x_clockdomains_init(void); -extern void __init omap243x_clockdomains_init(void); extern void __init omap3xxx_clockdomains_init(void); extern void __init am33xx_clockdomains_init(void); extern void __init ti814x_clockdomains_init(void); @@ -230,14 +228,11 @@ void am43xx_clockdomains_init(void); extern void clkdm_add_autodeps(struct clockdomain *clkdm); extern void clkdm_del_autodeps(struct clockdomain *clkdm); -extern struct clkdm_ops omap2_clkdm_operations; extern struct clkdm_ops omap3_clkdm_operations; extern struct clkdm_ops omap4_clkdm_operations; extern struct clkdm_ops am33xx_clkdm_operations; extern struct clkdm_ops am43xx_clkdm_operations; -extern struct clkdm_dep gfx_24xx_wkdeps[]; -extern struct clkdm_dep dsp_24xx_wkdeps[]; extern struct clockdomain wkup_common_clkdm; #endif diff --git a/arch/arm/mach-omap2/clockdomains2420_data.c b/arch/arm/mach-omap2/clockdomains2420_data.c deleted file mode 100644 index ac4ffb5d2ffc..000000000000 --- a/arch/arm/mach-omap2/clockdomains2420_data.c +++ /dev/null @@ -1,154 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * OMAP2420 clockdomains - * - * Copyright (C) 2008-2011 Texas Instruments, Inc. - * Copyright (C) 2008-2010 Nokia Corporation - * - * Paul Walmsley, Jouni Högander - * - * This file contains clockdomains and clockdomain wakeup dependencies - * for OMAP2420 chips. Some notes: - * - * A useful validation rule for struct clockdomain: Any clockdomain - * referenced by a wkdep_srcs must have a dep_bit assigned. So - * wkdep_srcs are really just software-controllable dependencies. - * Non-software-controllable dependencies do exist, but they are not - * encoded below (yet). - * - * 24xx does not support programmable sleep dependencies (SLEEPDEP) - * - * The overly-specific dep_bit names are due to a bit name collision - * with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift - * value are the same for all powerdomains: 2 - * - * XXX should dep_bit be a mask, so we can test to see if it is 0 as a - * sanity check? - * XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE - */ - -/* - * To-Do List - * -> Port the Sleep/Wakeup dependencies for the domains - * from the Power domain framework - */ - -#include -#include - -#include "soc.h" -#include "clockdomain.h" -#include "prm2xxx_3xxx.h" -#include "cm2xxx_3xxx.h" -#include "cm-regbits-24xx.h" -#include "prm-regbits-24xx.h" - -/* - * Clockdomain dependencies for wkdeps - * - * XXX Hardware dependencies (e.g., dependencies that cannot be - * changed in software) are not included here yet, but should be. - */ - -/* Wakeup dependency source arrays */ - -/* 2420-specific possible wakeup dependencies */ - -/* 2420 PM_WKDEP_MPU: CORE, DSP, WKUP */ -static struct clkdm_dep mpu_2420_wkdeps[] = { - { .clkdm_name = "core_l3_clkdm" }, - { .clkdm_name = "core_l4_clkdm" }, - { .clkdm_name = "dsp_clkdm" }, - { .clkdm_name = "wkup_clkdm" }, - { NULL }, -}; - -/* 2420 PM_WKDEP_CORE: DSP, GFX, MPU, WKUP */ -static struct clkdm_dep core_2420_wkdeps[] = { - { .clkdm_name = "dsp_clkdm" }, - { .clkdm_name = "gfx_clkdm" }, - { .clkdm_name = "mpu_clkdm" }, - { .clkdm_name = "wkup_clkdm" }, - { NULL }, -}; - -/* - * 2420-only clockdomains - */ - -static struct clockdomain mpu_2420_clkdm = { - .name = "mpu_clkdm", - .pwrdm = { .name = "mpu_pwrdm" }, - .flags = CLKDM_CAN_HWSUP, - .wkdep_srcs = mpu_2420_wkdeps, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK, -}; - -static struct clockdomain iva1_2420_clkdm = { - .name = "iva1_clkdm", - .pwrdm = { .name = "dsp_pwrdm" }, - .flags = CLKDM_CAN_HWSUP_SWSUP, - .dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT, - .wkdep_srcs = dsp_24xx_wkdeps, - .clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK, -}; - -static struct clockdomain dsp_2420_clkdm = { - .name = "dsp_clkdm", - .pwrdm = { .name = "dsp_pwrdm" }, - .flags = CLKDM_CAN_HWSUP_SWSUP, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK, -}; - -static struct clockdomain gfx_2420_clkdm = { - .name = "gfx_clkdm", - .pwrdm = { .name = "gfx_pwrdm" }, - .flags = CLKDM_CAN_HWSUP_SWSUP, - .wkdep_srcs = gfx_24xx_wkdeps, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK, -}; - -static struct clockdomain core_l3_2420_clkdm = { - .name = "core_l3_clkdm", - .pwrdm = { .name = "core_pwrdm" }, - .flags = CLKDM_CAN_HWSUP, - .wkdep_srcs = core_2420_wkdeps, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK, -}; - -static struct clockdomain core_l4_2420_clkdm = { - .name = "core_l4_clkdm", - .pwrdm = { .name = "core_pwrdm" }, - .flags = CLKDM_CAN_HWSUP, - .wkdep_srcs = core_2420_wkdeps, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK, -}; - -static struct clockdomain dss_2420_clkdm = { - .name = "dss_clkdm", - .pwrdm = { .name = "core_pwrdm" }, - .flags = CLKDM_CAN_HWSUP, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK, -}; - -static struct clockdomain *clockdomains_omap242x[] __initdata = { - &wkup_common_clkdm, - &mpu_2420_clkdm, - &iva1_2420_clkdm, - &dsp_2420_clkdm, - &gfx_2420_clkdm, - &core_l3_2420_clkdm, - &core_l4_2420_clkdm, - &dss_2420_clkdm, - NULL, -}; - -void __init omap242x_clockdomains_init(void) -{ - if (!cpu_is_omap242x()) - return; - - clkdm_register_platform_funcs(&omap2_clkdm_operations); - clkdm_register_clkdms(clockdomains_omap242x); - clkdm_complete_init(); -} diff --git a/arch/arm/mach-omap2/clockdomains2430_data.c b/arch/arm/mach-omap2/clockdomains2430_data.c deleted file mode 100644 index 0e97e178abaa..000000000000 --- a/arch/arm/mach-omap2/clockdomains2430_data.c +++ /dev/null @@ -1,181 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * OMAP2xxx clockdomains - * - * Copyright (C) 2008-2009 Texas Instruments, Inc. - * Copyright (C) 2008-2010 Nokia Corporation - * - * Paul Walmsley, Jouni Högander - * - * This file contains clockdomains and clockdomain wakeup dependencies - * for OMAP2xxx chips. Some notes: - * - * A useful validation rule for struct clockdomain: Any clockdomain - * referenced by a wkdep_srcs must have a dep_bit assigned. So - * wkdep_srcs are really just software-controllable dependencies. - * Non-software-controllable dependencies do exist, but they are not - * encoded below (yet). - * - * 24xx does not support programmable sleep dependencies (SLEEPDEP) - * - * The overly-specific dep_bit names are due to a bit name collision - * with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift - * value are the same for all powerdomains: 2 - * - * XXX should dep_bit be a mask, so we can test to see if it is 0 as a - * sanity check? - * XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE - */ - -/* - * To-Do List - * -> Port the Sleep/Wakeup dependencies for the domains - * from the Power domain framework - */ - -#include -#include - -#include "soc.h" -#include "clockdomain.h" -#include "prm2xxx_3xxx.h" -#include "cm2xxx_3xxx.h" -#include "cm-regbits-24xx.h" -#include "prm-regbits-24xx.h" - -/* - * Clockdomain dependencies for wkdeps - * - * XXX Hardware dependencies (e.g., dependencies that cannot be - * changed in software) are not included here yet, but should be. - */ - -/* Wakeup dependency source arrays */ - -/* 2430-specific possible wakeup dependencies */ - -/* 2430 PM_WKDEP_CORE: DSP, GFX, MPU, WKUP, MDM */ -static struct clkdm_dep core_2430_wkdeps[] = { - { .clkdm_name = "dsp_clkdm" }, - { .clkdm_name = "gfx_clkdm" }, - { .clkdm_name = "mpu_clkdm" }, - { .clkdm_name = "wkup_clkdm" }, - { .clkdm_name = "mdm_clkdm" }, - { NULL }, -}; - -/* 2430 PM_WKDEP_MPU: CORE, DSP, WKUP, MDM */ -static struct clkdm_dep mpu_2430_wkdeps[] = { - { .clkdm_name = "core_l3_clkdm" }, - { .clkdm_name = "core_l4_clkdm" }, - { .clkdm_name = "dsp_clkdm" }, - { .clkdm_name = "wkup_clkdm" }, - { .clkdm_name = "mdm_clkdm" }, - { NULL }, -}; - -/* 2430 PM_WKDEP_MDM: CORE, MPU, WKUP */ -static struct clkdm_dep mdm_2430_wkdeps[] = { - { .clkdm_name = "core_l3_clkdm" }, - { .clkdm_name = "core_l4_clkdm" }, - { .clkdm_name = "mpu_clkdm" }, - { .clkdm_name = "wkup_clkdm" }, - { NULL }, -}; - -/* - * 2430-only clockdomains - */ - -static struct clockdomain mpu_2430_clkdm = { - .name = "mpu_clkdm", - .pwrdm = { .name = "mpu_pwrdm" }, - .flags = CLKDM_CAN_HWSUP_SWSUP, - .wkdep_srcs = mpu_2430_wkdeps, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK, -}; - -/* Another case of bit name collisions between several registers: EN_MDM */ -static struct clockdomain mdm_clkdm = { - .name = "mdm_clkdm", - .pwrdm = { .name = "mdm_pwrdm" }, - .flags = CLKDM_CAN_HWSUP_SWSUP, - .dep_bit = OMAP2430_PM_WKDEP_MPU_EN_MDM_SHIFT, - .wkdep_srcs = mdm_2430_wkdeps, - .clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK, -}; - -static struct clockdomain dsp_2430_clkdm = { - .name = "dsp_clkdm", - .pwrdm = { .name = "dsp_pwrdm" }, - .flags = CLKDM_CAN_HWSUP_SWSUP, - .dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT, - .wkdep_srcs = dsp_24xx_wkdeps, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK, -}; - -static struct clockdomain gfx_2430_clkdm = { - .name = "gfx_clkdm", - .pwrdm = { .name = "gfx_pwrdm" }, - .flags = CLKDM_CAN_HWSUP_SWSUP, - .wkdep_srcs = gfx_24xx_wkdeps, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK, -}; - -/* - * XXX add usecounting for clkdm dependencies, otherwise the presence - * of a single dep bit for core_l3_24xx_clkdm and core_l4_24xx_clkdm - * could cause trouble - */ -static struct clockdomain core_l3_2430_clkdm = { - .name = "core_l3_clkdm", - .pwrdm = { .name = "core_pwrdm" }, - .flags = CLKDM_CAN_HWSUP, - .dep_bit = OMAP24XX_EN_CORE_SHIFT, - .wkdep_srcs = core_2430_wkdeps, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK, -}; - -/* - * XXX add usecounting for clkdm dependencies, otherwise the presence - * of a single dep bit for core_l3_24xx_clkdm and core_l4_24xx_clkdm - * could cause trouble - */ -static struct clockdomain core_l4_2430_clkdm = { - .name = "core_l4_clkdm", - .pwrdm = { .name = "core_pwrdm" }, - .flags = CLKDM_CAN_HWSUP, - .dep_bit = OMAP24XX_EN_CORE_SHIFT, - .wkdep_srcs = core_2430_wkdeps, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK, -}; - -static struct clockdomain dss_2430_clkdm = { - .name = "dss_clkdm", - .pwrdm = { .name = "core_pwrdm" }, - .flags = CLKDM_CAN_HWSUP, - .clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK, -}; - -static struct clockdomain *clockdomains_omap243x[] __initdata = { - &wkup_common_clkdm, - &mpu_2430_clkdm, - &mdm_clkdm, - &dsp_2430_clkdm, - &gfx_2430_clkdm, - &core_l3_2430_clkdm, - &core_l4_2430_clkdm, - &dss_2430_clkdm, - NULL, -}; - -void __init omap243x_clockdomains_init(void) -{ - if (!cpu_is_omap243x()) - return; - - clkdm_register_platform_funcs(&omap2_clkdm_operations); - clkdm_register_clkdms(clockdomains_omap243x); - clkdm_complete_init(); -} - diff --git a/arch/arm/mach-omap2/clockdomains2xxx_3xxx_data.c b/arch/arm/mach-omap2/clockdomains2xxx_3xxx_data.c index 220c22f5e0f5..4d20c2720660 100644 --- a/arch/arm/mach-omap2/clockdomains2xxx_3xxx_data.c +++ b/arch/arm/mach-omap2/clockdomains2xxx_3xxx_data.c @@ -8,7 +8,7 @@ * Paul Walmsley, Jouni Högander * * This file contains clockdomains and clockdomain wakeup/sleep - * dependencies for the OMAP2/3 chips. Some notes: + * dependencies for the OMAP3 chips. Some notes: * * A useful validation rule for struct clockdomain: Any clockdomain * referenced by a wkdep_srcs or sleepdep_srcs array must have a @@ -16,8 +16,6 @@ * software-controllable dependencies. Non-software-controllable * dependencies do exist, but they are not encoded below (yet). * - * 24xx does not support programmable sleep dependencies (SLEEPDEP) - * * The overly-specific dep_bit names are due to a bit name collision * with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift * value are the same for all powerdomains: 2 @@ -39,10 +37,8 @@ #include "clockdomain.h" #include "prm2xxx_3xxx.h" #include "cm2xxx_3xxx.h" -#include "cm-regbits-24xx.h" #include "cm-regbits-34xx.h" #include "cm-regbits-44xx.h" -#include "prm-regbits-24xx.h" #include "prm-regbits-34xx.h" /* @@ -54,29 +50,8 @@ /* Wakeup dependency source arrays */ -/* 2xxx-specific possible dependencies */ - -/* 2xxx PM_WKDEP_GFX: CORE, MPU, WKUP */ -struct clkdm_dep gfx_24xx_wkdeps[] = { - { .clkdm_name = "core_l3_clkdm" }, - { .clkdm_name = "core_l4_clkdm" }, - { .clkdm_name = "mpu_clkdm" }, - { .clkdm_name = "wkup_clkdm" }, - { NULL }, -}; - -/* 2xxx PM_WKDEP_DSP: CORE, MPU, WKUP */ -struct clkdm_dep dsp_24xx_wkdeps[] = { - { .clkdm_name = "core_l3_clkdm" }, - { .clkdm_name = "core_l4_clkdm" }, - { .clkdm_name = "mpu_clkdm" }, - { .clkdm_name = "wkup_clkdm" }, - { NULL }, -}; - - /* - * OMAP2/3-common clockdomains + * OMAP3-common clockdomains * * Even though the 2420 has a single PRCM module from the * interconnect's perspective, internally it does appear to have diff --git a/arch/arm/mach-omap2/cm-regbits-24xx.h b/arch/arm/mach-omap2/cm-regbits-24xx.h deleted file mode 100644 index 59c14dbb6f87..000000000000 --- a/arch/arm/mach-omap2/cm-regbits-24xx.h +++ /dev/null @@ -1,51 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -#ifndef __ARCH_ARM_MACH_OMAP2_CM_REGBITS_24XX_H -#define __ARCH_ARM_MACH_OMAP2_CM_REGBITS_24XX_H - -/* - * OMAP24XX Clock Management register bits - * - * Copyright (C) 2007 Texas Instruments, Inc. - * Copyright (C) 2007 Nokia Corporation - * - * Written by Paul Walmsley - */ - -#define OMAP24XX_AUTOSTATE_MPU_MASK (1 << 0) -#define OMAP24XX_EN_DSS1_MASK (1 << 0) -#define OMAP24XX_ST_MAILBOXES_SHIFT 30 -#define OMAP24XX_ST_HDQ_SHIFT 23 -#define OMAP2420_ST_I2C2_SHIFT 20 -#define OMAP2430_ST_I2CHS1_SHIFT 19 -#define OMAP2420_ST_I2C1_SHIFT 19 -#define OMAP2430_ST_I2CHS2_SHIFT 20 -#define OMAP24XX_ST_MCBSP2_SHIFT 16 -#define OMAP24XX_ST_MCBSP1_SHIFT 15 -#define OMAP2430_ST_MCBSP5_SHIFT 5 -#define OMAP2430_ST_MCBSP4_SHIFT 4 -#define OMAP2430_ST_MCBSP3_SHIFT 3 -#define OMAP24XX_ST_AES_SHIFT 3 -#define OMAP24XX_ST_RNG_SHIFT 2 -#define OMAP24XX_ST_SHA_SHIFT 1 -#define OMAP24XX_CLKSEL_DSS2_MASK (0x1 << 13) -#define OMAP24XX_AUTOSTATE_DSS_MASK (1 << 2) -#define OMAP24XX_AUTOSTATE_L4_MASK (1 << 1) -#define OMAP24XX_AUTOSTATE_L3_MASK (1 << 0) -#define OMAP24XX_AUTOSTATE_GFX_MASK (1 << 0) -#define OMAP24XX_ST_MPU_WDT_SHIFT 3 -#define OMAP24XX_ST_32KSYNC_SHIFT 1 -#define OMAP24XX_EN_54M_PLL_SHIFT 6 -#define OMAP24XX_EN_96M_PLL_SHIFT 2 -#define OMAP24XX_ST_54M_APLL_SHIFT 9 -#define OMAP24XX_ST_96M_APLL_SHIFT 8 -#define OMAP24XX_AUTO_54M_MASK (0x3 << 6) -#define OMAP24XX_AUTO_96M_MASK (0x3 << 2) -#define OMAP24XX_AUTO_DPLL_SHIFT 0 -#define OMAP24XX_AUTO_DPLL_MASK (0x3 << 0) -#define OMAP24XX_CORE_CLK_SRC_MASK (0x3 << 0) -#define OMAP2420_AUTOSTATE_IVA_MASK (1 << 8) -#define OMAP24XX_AUTOSTATE_DSP_MASK (1 << 0) -#define OMAP2430_AUTOSTATE_MDM_MASK (1 << 0) -#define OMAP24XX_CLKSTCTRL_DISABLE_AUTO 0x0 -#define OMAP24XX_CLKSTCTRL_ENABLE_AUTO 0x1 -#endif diff --git a/arch/arm/mach-omap2/cm2xxx.c b/arch/arm/mach-omap2/cm2xxx.c deleted file mode 100644 index 1c6d69f4bf49..000000000000 --- a/arch/arm/mach-omap2/cm2xxx.c +++ /dev/null @@ -1,302 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * OMAP2xxx CM module functions - * - * Copyright (C) 2009 Nokia Corporation - * Copyright (C) 2008-2010, 2012 Texas Instruments, Inc. - * Paul Walmsley - * Rajendra Nayak - */ - -#include -#include -#include -#include -#include -#include - -#include "prm2xxx.h" -#include "cm.h" -#include "cm2xxx.h" -#include "cm-regbits-24xx.h" -#include "clockdomain.h" - -/* CM_AUTOIDLE_PLL.AUTO_* bit values for DPLLs */ -#define DPLL_AUTOIDLE_DISABLE 0x0 -#define OMAP2XXX_DPLL_AUTOIDLE_LOW_POWER_STOP 0x3 - -/* CM_AUTOIDLE_PLL.AUTO_* bit values for APLLs (OMAP2xxx only) */ -#define OMAP2XXX_APLL_AUTOIDLE_DISABLE 0x0 -#define OMAP2XXX_APLL_AUTOIDLE_LOW_POWER_STOP 0x3 - -/* CM_IDLEST_PLL bit value offset for APLLs (OMAP2xxx only) */ -#define EN_APLL_LOCKED 3 - -static const u8 omap2xxx_cm_idlest_offs[] = { - CM_IDLEST1, CM_IDLEST2, OMAP2430_CM_IDLEST3, OMAP24XX_CM_IDLEST4 -}; - -/* - * - */ - -static void _write_clktrctrl(u8 c, s16 module, u32 mask) -{ - u32 v; - - v = omap2_cm_read_mod_reg(module, OMAP2_CM_CLKSTCTRL); - v &= ~mask; - v |= c << __ffs(mask); - omap2_cm_write_mod_reg(v, module, OMAP2_CM_CLKSTCTRL); -} - -static bool omap2xxx_cm_is_clkdm_in_hwsup(s16 module, u32 mask) -{ - u32 v; - - v = omap2_cm_read_mod_reg(module, OMAP2_CM_CLKSTCTRL); - v &= mask; - v >>= __ffs(mask); - - return (v == OMAP24XX_CLKSTCTRL_ENABLE_AUTO) ? 1 : 0; -} - -static void omap2xxx_cm_clkdm_enable_hwsup(s16 module, u32 mask) -{ - _write_clktrctrl(OMAP24XX_CLKSTCTRL_ENABLE_AUTO, module, mask); -} - -static void omap2xxx_cm_clkdm_disable_hwsup(s16 module, u32 mask) -{ - _write_clktrctrl(OMAP24XX_CLKSTCTRL_DISABLE_AUTO, module, mask); -} - -/* - * DPLL autoidle control - */ - -static void _omap2xxx_set_dpll_autoidle(u8 m) -{ - u32 v; - - v = omap2_cm_read_mod_reg(PLL_MOD, CM_AUTOIDLE); - v &= ~OMAP24XX_AUTO_DPLL_MASK; - v |= m << OMAP24XX_AUTO_DPLL_SHIFT; - omap2_cm_write_mod_reg(v, PLL_MOD, CM_AUTOIDLE); -} - -void omap2xxx_cm_set_dpll_disable_autoidle(void) -{ - _omap2xxx_set_dpll_autoidle(OMAP2XXX_DPLL_AUTOIDLE_LOW_POWER_STOP); -} - -void omap2xxx_cm_set_dpll_auto_low_power_stop(void) -{ - _omap2xxx_set_dpll_autoidle(DPLL_AUTOIDLE_DISABLE); -} - -/** - * omap2xxx_cm_split_idlest_reg - split CM_IDLEST reg addr into its components - * @idlest_reg: CM_IDLEST* virtual address - * @prcm_inst: pointer to an s16 to return the PRCM instance offset - * @idlest_reg_id: pointer to a u8 to return the CM_IDLESTx register ID - * - * XXX This function is only needed until absolute register addresses are - * removed from the OMAP struct clk records. - */ -static int omap2xxx_cm_split_idlest_reg(struct clk_omap_reg *idlest_reg, - s16 *prcm_inst, - u8 *idlest_reg_id) -{ - unsigned long offs; - u8 idlest_offs; - int i; - - idlest_offs = idlest_reg->offset & 0xff; - for (i = 0; i < ARRAY_SIZE(omap2xxx_cm_idlest_offs); i++) { - if (idlest_offs == omap2xxx_cm_idlest_offs[i]) { - *idlest_reg_id = i + 1; - break; - } - } - - if (i == ARRAY_SIZE(omap2xxx_cm_idlest_offs)) - return -EINVAL; - - offs = idlest_reg->offset; - offs &= 0xff00; - *prcm_inst = offs; - - return 0; -} - -/* - * - */ - -/** - * omap2xxx_cm_wait_module_ready - wait for a module to leave idle or standby - * @part: PRCM partition, ignored for OMAP2 - * @prcm_mod: PRCM module offset - * @idlest_id: CM_IDLESTx register ID (i.e., x = 1, 2, 3) - * @idlest_shift: shift of the bit in the CM_IDLEST* register to check - * - * Wait for the PRCM to indicate that the module identified by - * (@prcm_mod, @idlest_id, @idlest_shift) is clocked. Return 0 upon - * success or -EBUSY if the module doesn't enable in time. - */ -static int omap2xxx_cm_wait_module_ready(u8 part, s16 prcm_mod, u16 idlest_id, - u8 idlest_shift) -{ - int ena = 0, i = 0; - u8 cm_idlest_reg; - u32 mask; - - if (!idlest_id || (idlest_id > ARRAY_SIZE(omap2xxx_cm_idlest_offs))) - return -EINVAL; - - cm_idlest_reg = omap2xxx_cm_idlest_offs[idlest_id - 1]; - - mask = 1 << idlest_shift; - ena = mask; - - omap_test_timeout(((omap2_cm_read_mod_reg(prcm_mod, cm_idlest_reg) & - mask) == ena), MAX_MODULE_READY_TIME, i); - - return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY; -} - -/* Clockdomain low-level functions */ - -static void omap2xxx_clkdm_allow_idle(struct clockdomain *clkdm) -{ - omap2xxx_cm_clkdm_enable_hwsup(clkdm->pwrdm.ptr->prcm_offs, - clkdm->clktrctrl_mask); -} - -static void omap2xxx_clkdm_deny_idle(struct clockdomain *clkdm) -{ - omap2xxx_cm_clkdm_disable_hwsup(clkdm->pwrdm.ptr->prcm_offs, - clkdm->clktrctrl_mask); -} - -static int omap2xxx_clkdm_clk_enable(struct clockdomain *clkdm) -{ - bool hwsup = false; - - if (!clkdm->clktrctrl_mask) - return 0; - - hwsup = omap2xxx_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs, - clkdm->clktrctrl_mask); - if (!hwsup && clkdm->flags & CLKDM_CAN_FORCE_WAKEUP) - omap2xxx_clkdm_wakeup(clkdm); - - return 0; -} - -static int omap2xxx_clkdm_clk_disable(struct clockdomain *clkdm) -{ - bool hwsup = false; - - if (!clkdm->clktrctrl_mask) - return 0; - - hwsup = omap2xxx_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs, - clkdm->clktrctrl_mask); - - if (!hwsup && clkdm->flags & CLKDM_CAN_FORCE_SLEEP) - omap2xxx_clkdm_sleep(clkdm); - - return 0; -} - -struct clkdm_ops omap2_clkdm_operations = { - .clkdm_add_wkdep = omap2_clkdm_add_wkdep, - .clkdm_del_wkdep = omap2_clkdm_del_wkdep, - .clkdm_read_wkdep = omap2_clkdm_read_wkdep, - .clkdm_clear_all_wkdeps = omap2_clkdm_clear_all_wkdeps, - .clkdm_sleep = omap2xxx_clkdm_sleep, - .clkdm_wakeup = omap2xxx_clkdm_wakeup, - .clkdm_allow_idle = omap2xxx_clkdm_allow_idle, - .clkdm_deny_idle = omap2xxx_clkdm_deny_idle, - .clkdm_clk_enable = omap2xxx_clkdm_clk_enable, - .clkdm_clk_disable = omap2xxx_clkdm_clk_disable, -}; - -int omap2xxx_cm_fclks_active(void) -{ - u32 f1, f2; - - f1 = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1); - f2 = omap2_cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2); - - return (f1 | f2) ? 1 : 0; -} - -int omap2xxx_cm_mpu_retention_allowed(void) -{ - u32 l; - - /* Check for MMC, UART2, UART1, McSPI2, McSPI1 and DSS1. */ - l = omap2_cm_read_mod_reg(CORE_MOD, CM_FCLKEN1); - if (l & (OMAP2420_EN_MMC_MASK | OMAP24XX_EN_UART2_MASK | - OMAP24XX_EN_UART1_MASK | OMAP24XX_EN_MCSPI2_MASK | - OMAP24XX_EN_MCSPI1_MASK | OMAP24XX_EN_DSS1_MASK)) - return 0; - /* Check for UART3. */ - l = omap2_cm_read_mod_reg(CORE_MOD, OMAP24XX_CM_FCLKEN2); - if (l & OMAP24XX_EN_UART3_MASK) - return 0; - - return 1; -} - -u32 omap2xxx_cm_get_core_clk_src(void) -{ - u32 v; - - v = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2); - v &= OMAP24XX_CORE_CLK_SRC_MASK; - - return v; -} - -u32 omap2xxx_cm_get_core_pll_config(void) -{ - return omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2); -} - -void omap2xxx_cm_set_mod_dividers(u32 mpu, u32 dsp, u32 gfx, u32 core, u32 mdm) -{ - u32 tmp; - - omap2_cm_write_mod_reg(mpu, MPU_MOD, CM_CLKSEL); - omap2_cm_write_mod_reg(dsp, OMAP24XX_DSP_MOD, CM_CLKSEL); - omap2_cm_write_mod_reg(gfx, GFX_MOD, CM_CLKSEL); - tmp = omap2_cm_read_mod_reg(CORE_MOD, CM_CLKSEL1) & - OMAP24XX_CLKSEL_DSS2_MASK; - omap2_cm_write_mod_reg(core | tmp, CORE_MOD, CM_CLKSEL1); - if (mdm) - omap2_cm_write_mod_reg(mdm, OMAP2430_MDM_MOD, CM_CLKSEL); -} - -/* - * - */ - -static const struct cm_ll_data omap2xxx_cm_ll_data = { - .split_idlest_reg = &omap2xxx_cm_split_idlest_reg, - .wait_module_ready = &omap2xxx_cm_wait_module_ready, -}; - -int __init omap2xxx_cm_init(const struct omap_prcm_init_data *data) -{ - return cm_register(&omap2xxx_cm_ll_data); -} - -static void __exit omap2xxx_cm_exit(void) -{ - cm_unregister(&omap2xxx_cm_ll_data); -} -__exitcall(omap2xxx_cm_exit); diff --git a/arch/arm/mach-omap2/cm2xxx.h b/arch/arm/mach-omap2/cm2xxx.h deleted file mode 100644 index 7cbeff15ffb0..000000000000 --- a/arch/arm/mach-omap2/cm2xxx.h +++ /dev/null @@ -1,60 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * OMAP2xxx Clock Management (CM) register definitions - * - * Copyright (C) 2007-2009, 2012 Texas Instruments, Inc. - * Copyright (C) 2007-2010 Nokia Corporation - * Paul Walmsley - * - * The CM hardware modules on the OMAP2/3 are quite similar to each - * other. The CM modules/instances on OMAP4 are quite different, so - * they are handled in a separate file. - */ -#ifndef __ARCH_ASM_MACH_OMAP2_CM2XXX_H -#define __ARCH_ASM_MACH_OMAP2_CM2XXX_H - -#include "prcm-common.h" -#include "cm2xxx_3xxx.h" - -#define OMAP2420_CM_REGADDR(module, reg) \ - OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE + (module) + (reg)) -#define OMAP2430_CM_REGADDR(module, reg) \ - OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE + (module) + (reg)) - -/* - * Module specific CM register offsets from CM_BASE + domain offset - * Use cm_{read,write}_mod_reg() with these registers. - * These register offsets generally appear in more than one PRCM submodule. - */ - -/* OMAP2-specific register offsets */ - -#define OMAP24XX_CM_FCLKEN2 0x0004 -#define OMAP24XX_CM_ICLKEN4 0x001c -#define OMAP24XX_CM_AUTOIDLE4 0x003c -#define OMAP24XX_CM_IDLEST4 0x002c - -/* CM_IDLEST bit field values to indicate deasserted IdleReq */ - -#define OMAP24XX_CM_IDLEST_VAL 0 - - -/* Clock management domain register get/set */ - -#ifndef __ASSEMBLER__ - -extern void omap2xxx_cm_set_dpll_disable_autoidle(void); -extern void omap2xxx_cm_set_dpll_auto_low_power_stop(void); - -extern int omap2xxx_cm_fclks_active(void); -extern int omap2xxx_cm_mpu_retention_allowed(void); -extern u32 omap2xxx_cm_get_core_clk_src(void); -extern u32 omap2xxx_cm_get_core_pll_config(void); -extern void omap2xxx_cm_set_mod_dividers(u32 mpu, u32 dsp, u32 gfx, u32 core, - u32 mdm); - -int __init omap2xxx_cm_init(const struct omap_prcm_init_data *data); - -#endif - -#endif diff --git a/arch/arm/mach-omap2/cm_common.c b/arch/arm/mach-omap2/cm_common.c index 87f2c2d2d754..fc16cd1fd2d5 100644 --- a/arch/arm/mach-omap2/cm_common.c +++ b/arch/arm/mach-omap2/cm_common.c @@ -15,7 +15,6 @@ #include #include -#include "cm2xxx.h" #include "cm3xxx.h" #include "cm33xx.h" #include "cm44xx.h" @@ -230,14 +229,6 @@ static struct omap_prcm_init_data cm2_data __initdata = { }; #endif -#ifdef CONFIG_ARCH_OMAP2 -static struct omap_prcm_init_data omap2_prcm_data __initdata = { - .index = TI_CLKM_CM, - .init = omap2xxx_cm_init, - .flags = CM_NO_CLOCKS | CM_SINGLE_INSTANCE, -}; -#endif - #ifdef CONFIG_ARCH_OMAP3 static struct omap_prcm_init_data omap3_cm_data __initdata = { .index = TI_CLKM_CM, @@ -269,9 +260,6 @@ static struct omap_prcm_init_data am4_prcm_data __initdata = { #endif static const struct of_device_id omap_cm_dt_match_table[] __initconst = { -#ifdef CONFIG_ARCH_OMAP2 - { .compatible = "ti,omap2-prcm", .data = &omap2_prcm_data }, -#endif #ifdef CONFIG_ARCH_OMAP3 { .compatible = "ti,omap3-cm", .data = &omap3_cm_data }, #endif diff --git a/arch/arm/mach-omap2/common-board-devices.h b/arch/arm/mach-omap2/common-board-devices.h deleted file mode 100644 index 69694af71475..000000000000 --- a/arch/arm/mach-omap2/common-board-devices.h +++ /dev/null @@ -1,11 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __OMAP_COMMON_BOARD_DEVICES__ -#define __OMAP_COMMON_BOARD_DEVICES__ - -#include - -void *n8x0_legacy_init(void); - -extern struct menelaus_platform_data n8x0_menelaus_platform_data; - -#endif /* __OMAP_COMMON_BOARD_DEVICES__ */ diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 9d60799e9752..f8ed97044ade 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h @@ -102,8 +102,6 @@ static inline void omap5_realtime_timer_init(void) } #endif -void omap2420_init_early(void); -void omap2430_init_early(void); void omap3430_init_early(void); void omap3630_init_early(void); void am33xx_init_early(void); @@ -130,14 +128,6 @@ static inline void omap_soc_device_init(void) } #endif -#if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430) -void omap2xxx_restart(enum reboot_mode mode, const char *cmd); -#else -static inline void omap2xxx_restart(enum reboot_mode mode, const char *cmd) -{ -} -#endif - #ifdef CONFIG_SOC_AM33XX void am33xx_restart(enum reboot_mode mode, const char *cmd); #else @@ -183,8 +173,6 @@ static inline void omap_barrier_reserve_memblock(void) /* This gets called from mach-omap2/io.c, do not call this */ void __init omap2_set_globals_tap(u32 class, void __iomem *tap); -void __init omap242x_map_io(void); -void __init omap243x_map_io(void); void __init omap3_map_io(void); void __init am33xx_map_io(void); void __init omap4_map_io(void); diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h index 7e7440533bf9..3ab1c6e6dde6 100644 --- a/arch/arm/mach-omap2/control.h +++ b/arch/arm/mach-omap2/control.h @@ -19,19 +19,11 @@ #include "am33xx.h" #ifndef __ASSEMBLY__ -#define OMAP242X_CTRL_REGADDR(reg) \ - OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg)) -#define OMAP243X_CTRL_REGADDR(reg) \ - OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg)) #define OMAP343X_CTRL_REGADDR(reg) \ OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg)) #define AM33XX_CTRL_REGADDR(reg) \ AM33XX_L4_WK_IO_ADDRESS(AM33XX_SCM_BASE + (reg)) #else -#define OMAP242X_CTRL_REGADDR(reg) \ - OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE + (reg)) -#define OMAP243X_CTRL_REGADDR(reg) \ - OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE + (reg)) #define OMAP343X_CTRL_REGADDR(reg) \ OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE + (reg)) #define AM33XX_CTRL_REGADDR(reg) \ @@ -74,52 +66,6 @@ #define OMAP2_CONTROL_RPUB_KEY_H_2 (OMAP2_CONTROL_GENERAL + 0x0098) #define OMAP2_CONTROL_RPUB_KEY_H_3 (OMAP2_CONTROL_GENERAL + 0x009c) -/* 242x-only CONTROL_GENERAL register offsets */ -#define OMAP242X_CONTROL_DEVCONF OMAP2_CONTROL_DEVCONF0 /* match TRM */ -#define OMAP242X_CONTROL_OCM_RAM_PERM (OMAP2_CONTROL_GENERAL + 0x0068) - -/* 243x-only CONTROL_GENERAL register offsets */ -/* CONTROL_IVA2_BOOT{ADDR,MOD} are at the same place on 343x - noted below */ -#define OMAP243X_CONTROL_DEVCONF1 (OMAP2_CONTROL_GENERAL + 0x0078) -#define OMAP243X_CONTROL_CSIRXFE (OMAP2_CONTROL_GENERAL + 0x007c) -#define OMAP243X_CONTROL_IVA2_BOOTADDR (OMAP2_CONTROL_GENERAL + 0x0190) -#define OMAP243X_CONTROL_IVA2_BOOTMOD (OMAP2_CONTROL_GENERAL + 0x0194) -#define OMAP243X_CONTROL_IVA2_GEMCFG (OMAP2_CONTROL_GENERAL + 0x0198) -#define OMAP243X_CONTROL_PBIAS_LITE (OMAP2_CONTROL_GENERAL + 0x0230) - -/* 24xx-only CONTROL_GENERAL register offsets */ -#define OMAP24XX_CONTROL_DEBOBS (OMAP2_CONTROL_GENERAL + 0x0000) -#define OMAP24XX_CONTROL_EMU_SUPPORT (OMAP2_CONTROL_GENERAL + 0x0008) -#define OMAP24XX_CONTROL_SEC_TEST (OMAP2_CONTROL_GENERAL + 0x0044) -#define OMAP24XX_CONTROL_PSA_CTRL (OMAP2_CONTROL_GENERAL + 0x0048) -#define OMAP24XX_CONTROL_PSA_CMD (OMAP2_CONTROL_GENERAL + 0x004c) -#define OMAP24XX_CONTROL_PSA_VALUE (OMAP2_CONTROL_GENERAL + 0x0050) -#define OMAP24XX_CONTROL_SEC_EMU (OMAP2_CONTROL_GENERAL + 0x0060) -#define OMAP24XX_CONTROL_SEC_TAP (OMAP2_CONTROL_GENERAL + 0x0064) -#define OMAP24XX_CONTROL_OCM_PUB_RAM_ADD (OMAP2_CONTROL_GENERAL + 0x006c) -#define OMAP24XX_CONTROL_EXT_SEC_RAM_START_ADD (OMAP2_CONTROL_GENERAL + 0x0070) -#define OMAP24XX_CONTROL_EXT_SEC_RAM_STOP_ADD (OMAP2_CONTROL_GENERAL + 0x0074) -#define OMAP24XX_CONTROL_SEC_STATUS (OMAP2_CONTROL_GENERAL + 0x0080) -#define OMAP24XX_CONTROL_SEC_ERR_STATUS (OMAP2_CONTROL_GENERAL + 0x0084) -#define OMAP24XX_CONTROL_STATUS (OMAP2_CONTROL_GENERAL + 0x0088) -#define OMAP24XX_CONTROL_GENERAL_PURPOSE_STATUS (OMAP2_CONTROL_GENERAL + 0x008c) -#define OMAP24XX_CONTROL_RAND_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00a0) -#define OMAP24XX_CONTROL_RAND_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00a4) -#define OMAP24XX_CONTROL_RAND_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00a8) -#define OMAP24XX_CONTROL_RAND_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00ac) -#define OMAP24XX_CONTROL_CUST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00b0) -#define OMAP24XX_CONTROL_CUST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00b4) -#define OMAP24XX_CONTROL_TEST_KEY_0 (OMAP2_CONTROL_GENERAL + 0x00c0) -#define OMAP24XX_CONTROL_TEST_KEY_1 (OMAP2_CONTROL_GENERAL + 0x00c4) -#define OMAP24XX_CONTROL_TEST_KEY_2 (OMAP2_CONTROL_GENERAL + 0x00c8) -#define OMAP24XX_CONTROL_TEST_KEY_3 (OMAP2_CONTROL_GENERAL + 0x00cc) -#define OMAP24XX_CONTROL_TEST_KEY_4 (OMAP2_CONTROL_GENERAL + 0x00d0) -#define OMAP24XX_CONTROL_TEST_KEY_5 (OMAP2_CONTROL_GENERAL + 0x00d4) -#define OMAP24XX_CONTROL_TEST_KEY_6 (OMAP2_CONTROL_GENERAL + 0x00d8) -#define OMAP24XX_CONTROL_TEST_KEY_7 (OMAP2_CONTROL_GENERAL + 0x00dc) -#define OMAP24XX_CONTROL_TEST_KEY_8 (OMAP2_CONTROL_GENERAL + 0x00e0) -#define OMAP24XX_CONTROL_TEST_KEY_9 (OMAP2_CONTROL_GENERAL + 0x00e4) - #define OMAP343X_CONTROL_PADCONF_SYSNIRQ (OMAP2_CONTROL_INTERFACE + 0x01b0) /* 34xx-only CONTROL_GENERAL register offsets */ @@ -311,14 +257,12 @@ */ /* CONTROL_DEVCONF0 bits */ #define OMAP2_MMCSDIO1ADPCLKISEL (1 << 24) /* MMC1 loop back clock */ -#define OMAP24XX_USBSTANDBYCTRL (1 << 15) #define OMAP2_MCBSP2_CLKS_MASK (1 << 6) #define OMAP2_MCBSP1_FSR_MASK (1 << 4) #define OMAP2_MCBSP1_CLKR_MASK (1 << 3) #define OMAP2_MCBSP1_CLKS_MASK (1 << 2) /* CONTROL_DEVCONF1 bits */ -#define OMAP243X_MMC1_ACTIVE_OVERWRITE (1 << 31) #define OMAP2_MMCSDIO2ADPCLKISEL (1 << 6) /* MMC2 loop back clock */ #define OMAP2_MCBSP5_CLKS_MASK (1 << 4) /* > 242x */ #define OMAP2_MCBSP4_CLKS_MASK (1 << 2) /* > 242x */ diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index dbec3bb9fbf4..addc14898bd5 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c @@ -124,9 +124,7 @@ static void omap_dsi_disable_pads(int dsi_id, unsigned lane_mask) static enum omapdss_version __init omap_display_get_version(void) { - if (cpu_is_omap24xx()) - return OMAPDSS_VER_OMAP24xx; - else if (cpu_is_omap3630()) + if (cpu_is_omap3630()) return OMAPDSS_VER_OMAP3630; else if (cpu_is_omap34xx()) { if (soc_is_am35xx()) { diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c index 830cd4e7eb44..3a6b7b4620ca 100644 --- a/arch/arm/mach-omap2/dma.c +++ b/arch/arm/mach-omap2/dma.c @@ -82,39 +82,6 @@ static unsigned configure_dma_errata(void) { unsigned errata = 0; - /* - * Errata applicable for OMAP2430ES1.0 and all omap2420 - * - * I. - * Erratum ID: Not Available - * Inter Frame DMA buffering issue DMA will wrongly - * buffer elements if packing and bursting is enabled. This might - * result in data gets stalled in FIFO at the end of the block. - * Workaround: DMA channels must have BUFFERING_DISABLED bit set to - * guarantee no data will stay in the DMA FIFO in case inter frame - * buffering occurs - * - * II. - * Erratum ID: Not Available - * DMA may hang when several channels are used in parallel - * In the following configuration, DMA channel hanging can occur: - * a. Channel i, hardware synchronized, is enabled - * b. Another channel (Channel x), software synchronized, is enabled. - * c. Channel i is disabled before end of transfer - * d. Channel i is reenabled. - * e. Steps 1 to 4 are repeated a certain number of times. - * f. A third channel (Channel y), software synchronized, is enabled. - * Channel x and Channel y may hang immediately after step 'f'. - * Workaround: - * For any channel used - make sure NextLCH_ID is set to the value j. - */ - if (cpu_is_omap2420() || (cpu_is_omap2430() && - (omap_type() == OMAP2430_REV_ES1_0))) { - - SET_DMA_ERRATA(DMA_ERRATA_IFRAME_BUFFERING); - SET_DMA_ERRATA(DMA_ERRATA_PARALLEL_CHANNELS); - } - /* * Erratum ID: i378: OMAP2+: sDMA Channel is not disabled * after a transaction error. @@ -162,16 +129,6 @@ static unsigned configure_dma_errata(void) return errata; } -static const struct dma_slave_map omap24xx_sdma_dt_map[] = { - /* external DMA requests when tusb6010 is used */ - { "musb-hdrc.1.auto", "dmareq0", SDMA_FILTER_PARAM(2) }, - { "musb-hdrc.1.auto", "dmareq1", SDMA_FILTER_PARAM(3) }, - { "musb-hdrc.1.auto", "dmareq2", SDMA_FILTER_PARAM(14) }, /* OMAP2420 only */ - { "musb-hdrc.1.auto", "dmareq3", SDMA_FILTER_PARAM(15) }, /* OMAP2420 only */ - { "musb-hdrc.1.auto", "dmareq4", SDMA_FILTER_PARAM(16) }, /* OMAP2420 only */ - { "musb-hdrc.1.auto", "dmareq5", SDMA_FILTER_PARAM(64) }, /* OMAP2420 only */ -}; - static struct omap_dma_dev_attr dma_attr = { .dev_caps = RESERVE_CHANNEL | DMA_LINKED_LCH | GLOBAL_PRIORITY | IS_CSSA_32 | IS_CDSA_32, @@ -188,15 +145,7 @@ struct omap_system_dma_plat_info dma_plat_info = { static int __init omap2_system_dma_init(void) { dma_plat_info.errata = configure_dma_errata(); - - if (soc_is_omap24xx()) { - /* DMA slave map for drivers not yet converted to DT */ - dma_plat_info.slave_map = omap24xx_sdma_dt_map; - dma_plat_info.slavecnt = ARRAY_SIZE(omap24xx_sdma_dt_map); - } - - if (!soc_is_omap242x()) - dma_attr.dev_caps |= IS_RW_PRIORITY; + dma_attr.dev_caps |= IS_RW_PRIORITY; if (soc_is_omap34xx() && (omap_type() != OMAP2_DEVICE_TYPE_GP)) dma_attr.dev_caps |= HS_CHANNELS_RESERVED; diff --git a/arch/arm/mach-omap2/fb.c b/arch/arm/mach-omap2/fb.c index 0f8c8efe3ae8..9a425c36f996 100644 --- a/arch/arm/mach-omap2/fb.c +++ b/arch/arm/mach-omap2/fb.c @@ -27,15 +27,6 @@ * The first memory resource is the register region for VRFB, * the rest are VRFB virtual memory areas for each VRFB context. */ - -static const struct resource omap2_vrfb_resources[] = { - DEFINE_RES_MEM_NAMED(0x68008000u, 0x40, "vrfb-regs"), - DEFINE_RES_MEM_NAMED(0x70000000u, 0x4000000, "vrfb-area-0"), - DEFINE_RES_MEM_NAMED(0x74000000u, 0x4000000, "vrfb-area-1"), - DEFINE_RES_MEM_NAMED(0x78000000u, 0x4000000, "vrfb-area-2"), - DEFINE_RES_MEM_NAMED(0x7c000000u, 0x4000000, "vrfb-area-3"), -}; - static const struct resource omap3_vrfb_resources[] = { DEFINE_RES_MEM_NAMED(0x6C000180u, 0xc0, "vrfb-regs"), DEFINE_RES_MEM_NAMED(0x70000000u, 0x4000000, "vrfb-area-0"), @@ -58,10 +49,7 @@ int __init omap_init_vrfb(void) const struct resource *res; unsigned int num_res; - if (cpu_is_omap24xx()) { - res = omap2_vrfb_resources; - num_res = ARRAY_SIZE(omap2_vrfb_resources); - } else if (cpu_is_omap34xx()) { + if (cpu_is_omap34xx()) { res = omap3_vrfb_resources; num_res = ARRAY_SIZE(omap3_vrfb_resources); } else { diff --git a/arch/arm/mach-omap2/gpmc.h b/arch/arm/mach-omap2/gpmc.h deleted file mode 100644 index e060f1b5c27d..000000000000 --- a/arch/arm/mach-omap2/gpmc.h +++ /dev/null @@ -1,10 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * General-Purpose Memory Controller for OMAP2 - * - * Copyright (C) 2005-2006 Nokia Corporation - * - * Do not include this file in any new code, this will get removed - * once omap3 boots in device tree only mode. - */ -#include diff --git a/arch/arm/mach-omap2/i2c.c b/arch/arm/mach-omap2/i2c.c index 3b4b9514f4fa..d956c70f8899 100644 --- a/arch/arm/mach-omap2/i2c.c +++ b/arch/arm/mach-omap2/i2c.c @@ -39,7 +39,7 @@ int omap_i2c_reset(struct omap_hwmod *oh) u16 i2c_con; int c = 0; - if (soc_is_omap24xx() || soc_is_omap34xx() || soc_is_am35xx()) + if (soc_is_omap34xx() || soc_is_am35xx()) i2c_con = OMAP2_I2C_CON_OFFSET; else i2c_con = OMAP4_I2C_CON_OFFSET; diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index cf2bfb447ee2..3e731dd21311 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c @@ -55,9 +55,7 @@ int omap_type(void) if (val < OMAP2_DEVICETYPE_MASK) return val; - if (soc_is_omap24xx()) { - val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS); - } else if (soc_is_ti81xx()) { + if (soc_is_ti81xx()) { val = omap_ctrl_readl(TI81XX_CONTROL_STATUS); } else if (soc_is_am33xx() || soc_is_am43xx()) { val = omap_ctrl_readl(AM33XX_CONTROL_STATUS); @@ -99,22 +97,6 @@ EXPORT_SYMBOL(omap_type); #define read_tap_reg(reg) readl_relaxed(tap_base + (reg)) -struct omap_id { - u16 hawkeye; /* Silicon type (Hawkeye id) */ - u8 dev; /* Device type from production_id reg */ - u32 type; /* Combined type id copied to omap_revision */ -}; - -/* Register values to detect the OMAP version */ -static struct omap_id omap_ids[] __initdata = { - { .hawkeye = 0xb5d9, .dev = 0x0, .type = 0x24200024 }, - { .hawkeye = 0xb5d9, .dev = 0x1, .type = 0x24201024 }, - { .hawkeye = 0xb5d9, .dev = 0x2, .type = 0x24202024 }, - { .hawkeye = 0xb5d9, .dev = 0x4, .type = 0x24220024 }, - { .hawkeye = 0xb5d9, .dev = 0x8, .type = 0x24230024 }, - { .hawkeye = 0xb68a, .dev = 0x0, .type = 0x24300024 }, -}; - static void __iomem *tap_base; static u16 tap_prod_id; @@ -145,62 +127,6 @@ static int __init omap_feed_randpool(void) } omap_device_initcall(omap_feed_randpool); -void __init omap2xxx_check_revision(void) -{ - int i, j; - u32 idcode, prod_id; - u16 hawkeye; - u8 dev_type, rev; - struct omap_die_id odi; - - idcode = read_tap_reg(OMAP_TAP_IDCODE); - prod_id = read_tap_reg(tap_prod_id); - hawkeye = (idcode >> 12) & 0xffff; - rev = (idcode >> 28) & 0x0f; - dev_type = (prod_id >> 16) & 0x0f; - omap_get_die_id(&odi); - - pr_debug("OMAP_TAP_IDCODE 0x%08x REV %i HAWKEYE 0x%04x MANF %03x\n", - idcode, rev, hawkeye, (idcode >> 1) & 0x7ff); - pr_debug("OMAP_TAP_DIE_ID_0: 0x%08x\n", odi.id_0); - pr_debug("OMAP_TAP_DIE_ID_1: 0x%08x DEV_REV: %i\n", - odi.id_1, (odi.id_1 >> 28) & 0xf); - pr_debug("OMAP_TAP_DIE_ID_2: 0x%08x\n", odi.id_2); - pr_debug("OMAP_TAP_DIE_ID_3: 0x%08x\n", odi.id_3); - pr_debug("OMAP_TAP_PROD_ID_0: 0x%08x DEV_TYPE: %i\n", - prod_id, dev_type); - - /* Check hawkeye ids */ - for (i = 0; i < ARRAY_SIZE(omap_ids); i++) { - if (hawkeye == omap_ids[i].hawkeye) - break; - } - - if (i == ARRAY_SIZE(omap_ids)) { - printk(KERN_ERR "Unknown OMAP CPU id\n"); - return; - } - - for (j = i; j < ARRAY_SIZE(omap_ids); j++) { - if (dev_type == omap_ids[j].dev) - break; - } - - if (j == ARRAY_SIZE(omap_ids)) { - pr_err("Unknown OMAP device type. Handling it as OMAP%04x\n", - omap_ids[i].type >> 16); - j = i; - } - - sprintf(soc_name, "OMAP%04x", omap_rev() >> 16); - sprintf(soc_rev, "ES%x", (omap_rev() >> 12) & 0xf); - - pr_info("%s", soc_name); - if ((omap_rev() >> 8) & 0x0f) - pr_cont("%s", soc_rev); - pr_cont("\n"); -} - #define OMAP3_SHOW_FEATURE(feat) \ if (omap3_has_ ##feat()) \ n += scnprintf(buf + n, sizeof(buf) - n, #feat " "); @@ -750,9 +676,7 @@ static const char * const omap_types[] = { static const char * __init omap_get_family(void) { - if (soc_is_omap24xx()) - return kasprintf(GFP_KERNEL, "OMAP2"); - else if (soc_is_omap34xx()) + if (soc_is_omap34xx()) return kasprintf(GFP_KERNEL, "OMAP3"); else if (soc_is_omap44xx()) return kasprintf(GFP_KERNEL, "OMAP4"); diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index 14ec3f78000b..1c945be5e7cc 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c @@ -35,7 +35,6 @@ #include "sdrc.h" #include "control.h" #include "sram.h" -#include "cm2xxx.h" #include "cm3xxx.h" #include "cm33xx.h" #include "cm44xx.h" @@ -43,11 +42,9 @@ #include "cm.h" #include "prcm_mpu44xx.h" #include "prminst44xx.h" -#include "prm2xxx.h" #include "prm3xxx.h" #include "prm33xx.h" #include "prm44xx.h" -#include "opp2xxx.h" #include "omap-secure.h" /* @@ -61,76 +58,6 @@ static int (*omap_clk_soc_init)(void); * default mapping provided here. */ -#if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430) -static struct map_desc omap24xx_io_desc[] __initdata = { - { - .virtual = L3_24XX_VIRT, - .pfn = __phys_to_pfn(L3_24XX_PHYS), - .length = L3_24XX_SIZE, - .type = MT_DEVICE - }, - { - .virtual = L4_24XX_VIRT, - .pfn = __phys_to_pfn(L4_24XX_PHYS), - .length = L4_24XX_SIZE, - .type = MT_DEVICE - }, -}; - -#ifdef CONFIG_SOC_OMAP2420 -static struct map_desc omap242x_io_desc[] __initdata = { - { - .virtual = DSP_MEM_2420_VIRT, - .pfn = __phys_to_pfn(DSP_MEM_2420_PHYS), - .length = DSP_MEM_2420_SIZE, - .type = MT_DEVICE - }, - { - .virtual = DSP_IPI_2420_VIRT, - .pfn = __phys_to_pfn(DSP_IPI_2420_PHYS), - .length = DSP_IPI_2420_SIZE, - .type = MT_DEVICE - }, - { - .virtual = DSP_MMU_2420_VIRT, - .pfn = __phys_to_pfn(DSP_MMU_2420_PHYS), - .length = DSP_MMU_2420_SIZE, - .type = MT_DEVICE - }, -}; - -#endif - -#ifdef CONFIG_SOC_OMAP2430 -static struct map_desc omap243x_io_desc[] __initdata = { - { - .virtual = L4_WK_243X_VIRT, - .pfn = __phys_to_pfn(L4_WK_243X_PHYS), - .length = L4_WK_243X_SIZE, - .type = MT_DEVICE - }, - { - .virtual = OMAP243X_GPMC_VIRT, - .pfn = __phys_to_pfn(OMAP243X_GPMC_PHYS), - .length = OMAP243X_GPMC_SIZE, - .type = MT_DEVICE - }, - { - .virtual = OMAP243X_SDRC_VIRT, - .pfn = __phys_to_pfn(OMAP243X_SDRC_PHYS), - .length = OMAP243X_SDRC_SIZE, - .type = MT_DEVICE - }, - { - .virtual = OMAP243X_SMS_VIRT, - .pfn = __phys_to_pfn(OMAP243X_SMS_PHYS), - .length = OMAP243X_SMS_SIZE, - .type = MT_DEVICE - }, -}; -#endif -#endif - #ifdef CONFIG_ARCH_OMAP3 static struct map_desc omap34xx_io_desc[] __initdata = { { @@ -305,22 +232,6 @@ static struct map_desc dra7xx_io_desc[] __initdata = { }; #endif -#ifdef CONFIG_SOC_OMAP2420 -void __init omap242x_map_io(void) -{ - iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc)); - iotable_init(omap242x_io_desc, ARRAY_SIZE(omap242x_io_desc)); -} -#endif - -#ifdef CONFIG_SOC_OMAP2430 -void __init omap243x_map_io(void) -{ - iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc)); - iotable_init(omap243x_io_desc, ARRAY_SIZE(omap243x_io_desc)); -} -#endif - #ifdef CONFIG_ARCH_OMAP3 void __init omap3_map_io(void) { @@ -365,6 +276,8 @@ void __init dra7xx_map_io(void) omap_barriers_init(); } #endif + +#ifdef CONFIG_ARCH_OMAP3 /* * omap2_init_reprogram_sdrc - reprogram SDRC timing parameters * @@ -399,7 +312,6 @@ static int __init _omap2_init_reprogram_sdrc(void) return v; } -#ifdef CONFIG_OMAP_HWMOD static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data) { return omap_hwmod_set_postsetup_state(oh, *(u8 *)data); @@ -412,55 +324,11 @@ static void __init __maybe_unused omap_hwmod_init_postsetup(void) /* Set the default postsetup state for all hwmods */ omap_hwmod_for_each(_set_hwmod_postsetup_state, &postsetup_state); } -#else -static inline void omap_hwmod_init_postsetup(void) -{ -} -#endif - -#ifdef CONFIG_SOC_OMAP2420 -void __init omap2420_init_early(void) -{ - omap2_set_globals_tap(OMAP242X_CLASS, OMAP2_L4_IO_ADDRESS(0x48014000)); - omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE), - OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE)); - omap2_control_base_init(); - omap2xxx_check_revision(); - omap2_prcm_base_init(); - omap2xxx_voltagedomains_init(); - omap242x_powerdomains_init(); - omap242x_clockdomains_init(); - omap2420_hwmod_init(); - omap_hwmod_init_postsetup(); - omap_clk_soc_init = omap2420_dt_clk_init; - rate_table = omap2420_rate_table; -} -#endif - -#ifdef CONFIG_SOC_OMAP2430 -void __init omap2430_init_early(void) -{ - omap2_set_globals_tap(OMAP243X_CLASS, OMAP2_L4_IO_ADDRESS(0x4900a000)); - omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE), - OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE)); - omap2_control_base_init(); - omap2xxx_check_revision(); - omap2_prcm_base_init(); - omap2xxx_voltagedomains_init(); - omap243x_powerdomains_init(); - omap243x_clockdomains_init(); - omap2430_hwmod_init(); - omap_hwmod_init_postsetup(); - omap_clk_soc_init = omap2430_dt_clk_init; - rate_table = omap2430_rate_table; -} -#endif /* * Currently only board-omap3beagle.c should call this because of the * same machine_id for 34xx and 36xx beagle.. Will get fixed with DT. */ -#ifdef CONFIG_ARCH_OMAP3 static void __init omap3_init_early(void) { omap2_set_globals_tap(OMAP343X_CLASS, OMAP2_L4_IO_ADDRESS(0x4830A000)); @@ -661,16 +529,18 @@ void __init dra7xx_init_late(void) #endif +#ifdef CONFIG_ARCH_OMAP3 void __init omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, struct omap_sdrc_params *sdrc_cs1) { omap_sram_init(); - if (cpu_is_omap24xx() || omap3_has_sdrc()) { + if (omap3_has_sdrc()) { omap2_sdrc_init(sdrc_cs0, sdrc_cs1); _omap2_init_reprogram_sdrc(); } } +#endif int __init omap_clk_init(void) { diff --git a/arch/arm/mach-omap2/iomap.h b/arch/arm/mach-omap2/iomap.h index 6191d244438a..403444bb6924 100644 --- a/arch/arm/mach-omap2/iomap.h +++ b/arch/arm/mach-omap2/iomap.h @@ -48,52 +48,6 @@ #define OMAP2_EMU_IO_OFFSET 0xaa800000 /* Emulation */ #define OMAP2_EMU_IO_ADDRESS(pa) IOMEM((pa) + OMAP2_EMU_IO_OFFSET) -/* - * ---------------------------------------------------------------------------- - * Omap2 specific IO mapping - * ---------------------------------------------------------------------------- - */ - -/* We map both L3 and L4 on OMAP2 */ -#define L3_24XX_PHYS L3_24XX_BASE /* 0x68000000 --> 0xf8000000*/ -#define L3_24XX_VIRT (L3_24XX_PHYS + OMAP2_L3_IO_OFFSET) -#define L3_24XX_SIZE SZ_1M /* 44kB of 128MB used, want 1MB sect */ -#define L4_24XX_PHYS L4_24XX_BASE /* 0x48000000 --> 0xfa000000 */ -#define L4_24XX_VIRT (L4_24XX_PHYS + OMAP2_L4_IO_OFFSET) -#define L4_24XX_SIZE SZ_1M /* 1MB of 128MB used, want 1MB sect */ - -#define L4_WK_243X_PHYS L4_WK_243X_BASE /* 0x49000000 --> 0xfb000000 */ -#define L4_WK_243X_VIRT (L4_WK_243X_PHYS + OMAP2_L4_IO_OFFSET) -#define L4_WK_243X_SIZE SZ_1M -#define OMAP243X_GPMC_PHYS OMAP243X_GPMC_BASE -#define OMAP243X_GPMC_VIRT (OMAP243X_GPMC_PHYS + OMAP2_L3_IO_OFFSET) - /* 0x6e000000 --> 0xfe000000 */ -#define OMAP243X_GPMC_SIZE SZ_1M -#define OMAP243X_SDRC_PHYS OMAP243X_SDRC_BASE - /* 0x6D000000 --> 0xfd000000 */ -#define OMAP243X_SDRC_VIRT (OMAP243X_SDRC_PHYS + OMAP2_L3_IO_OFFSET) -#define OMAP243X_SDRC_SIZE SZ_1M -#define OMAP243X_SMS_PHYS OMAP243X_SMS_BASE - /* 0x6c000000 --> 0xfc000000 */ -#define OMAP243X_SMS_VIRT (OMAP243X_SMS_PHYS + OMAP2_L3_IO_OFFSET) -#define OMAP243X_SMS_SIZE SZ_1M - -/* 2420 IVA */ -#define DSP_MEM_2420_PHYS OMAP2420_DSP_MEM_BASE - /* 0x58000000 --> 0xfc100000 */ -#define DSP_MEM_2420_VIRT 0xfc100000 -#define DSP_MEM_2420_SIZE 0x28000 -#define DSP_IPI_2420_PHYS OMAP2420_DSP_IPI_BASE - /* 0x59000000 --> 0xfc128000 */ -#define DSP_IPI_2420_VIRT 0xfc128000 -#define DSP_IPI_2420_SIZE SZ_4K -#define DSP_MMU_2420_PHYS OMAP2420_DSP_MMU_BASE - /* 0x5a000000 --> 0xfc129000 */ -#define DSP_MMU_2420_VIRT 0xfc129000 -#define DSP_MMU_2420_SIZE SZ_4K - -/* 2430 IVA2.1 - currently unmapped */ - /* * ---------------------------------------------------------------------------- * Omap3 specific IO mapping diff --git a/arch/arm/mach-omap2/l3_2xxx.h b/arch/arm/mach-omap2/l3_2xxx.h deleted file mode 100644 index 6297c62428ac..000000000000 --- a/arch/arm/mach-omap2/l3_2xxx.h +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * arch/arm/plat-omap/include/plat/l3_2xxx.h - L3 firewall definitions - * - * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com/ - * Sumit Semwal - */ -#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_L3_2XXX_H -#define __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_L3_2XXX_H - -/* L3 CONNIDs */ -/* Display Sub system (DSS) */ -#define OMAP2_L3_CORE_FW_CONNID_DSS 8 - -#endif diff --git a/arch/arm/mach-omap2/l4_2xxx.h b/arch/arm/mach-omap2/l4_2xxx.h deleted file mode 100644 index 418e1072d730..000000000000 --- a/arch/arm/mach-omap2/l4_2xxx.h +++ /dev/null @@ -1,19 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * arch/arm/plat-omap/include/plat/l4_2xxx.h - L4 firewall definitions - * - * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com/ - * Sumit Semwal - */ -#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_L4_2XXX_H -#define __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_L4_2XXX_H - -/* L4 CORE */ -/* Display Sub system (DSS) */ -#define OMAP2420_L4_CORE_FW_DSS_CORE_REGION 28 -#define OMAP2420_L4_CORE_FW_DSS_DISPC_REGION 29 -#define OMAP2420_L4_CORE_FW_DSS_RFBI_REGION 30 -#define OMAP2420_L4_CORE_FW_DSS_VENC_REGION 31 -#define OMAP2420_L4_CORE_FW_DSS_TA_REGION 32 - -#endif diff --git a/arch/arm/mach-omap2/mmc.h b/arch/arm/mach-omap2/mmc.h deleted file mode 100644 index b5533e93cb63..000000000000 --- a/arch/arm/mach-omap2/mmc.h +++ /dev/null @@ -1,18 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ - -#define OMAP24XX_NR_MMC 2 -#define OMAP2420_MMC_SIZE OMAP1_MMC_SIZE -#define OMAP2_MMC1_BASE 0x4809c000 - -#define OMAP4_MMC_REG_OFFSET 0x100 - -struct omap_hwmod; - -#ifdef CONFIG_SOC_OMAP2420 -int omap_msdi_reset(struct omap_hwmod *oh); -#else -static inline int omap_msdi_reset(struct omap_hwmod *oh) -{ - return 0; -} -#endif diff --git a/arch/arm/mach-omap2/msdi.c b/arch/arm/mach-omap2/msdi.c deleted file mode 100644 index 552b2fa4e4f1..000000000000 --- a/arch/arm/mach-omap2/msdi.c +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * MSDI IP block reset - * - * Copyright (C) 2012 Texas Instruments, Inc. - * Paul Walmsley - * - * XXX What about pad muxing? - */ - -#include -#include - -#include "prm.h" -#include "common.h" -#include "control.h" -#include "omap_hwmod.h" -#include "omap_device.h" -#include "mmc.h" - -/* - * MSDI_CON_OFFSET: offset in bytes of the MSDI IP block's CON register - * from the IP block's base address - */ -#define MSDI_CON_OFFSET 0x0c - -/* Register bitfields in the CON register */ -#define MSDI_CON_POW_MASK BIT(11) -#define MSDI_CON_CLKD_MASK (0x3f << 0) -#define MSDI_CON_CLKD_SHIFT 0 - -/* MSDI_TARGET_RESET_CLKD: clock divisor to use throughout the reset */ -#define MSDI_TARGET_RESET_CLKD 0x3ff - -/** - * omap_msdi_reset - reset the MSDI IP block - * @oh: struct omap_hwmod * - * - * The MSDI IP block on OMAP2420 has to have both the POW and CLKD - * fields set inside its CON register for a reset to complete - * successfully. This is not documented in the TRM. For CLKD, we use - * the value that results in the lowest possible clock rate, to attempt - * to avoid disturbing any cards. - */ -int omap_msdi_reset(struct omap_hwmod *oh) -{ - u16 v = 0; - int c = 0; - - /* Write to the SOFTRESET bit */ - omap_hwmod_softreset(oh); - - /* Enable the MSDI core and internal clock */ - v |= MSDI_CON_POW_MASK; - v |= MSDI_TARGET_RESET_CLKD << MSDI_CON_CLKD_SHIFT; - omap_hwmod_write(v, oh, MSDI_CON_OFFSET); - - /* Poll on RESETDONE bit */ - omap_test_timeout((omap_hwmod_read(oh, oh->class->sysc->syss_offs) - & SYSS_RESETDONE_MASK), - MAX_MODULE_SOFTRESET_WAIT, c); - - if (c == MAX_MODULE_SOFTRESET_WAIT) - pr_warn("%s: %s: softreset failed (waited %d usec)\n", - __func__, oh->name, MAX_MODULE_SOFTRESET_WAIT); - else - pr_debug("%s: %s: softreset in %d usec\n", __func__, - oh->name, c); - - /* Disable the MSDI internal clock */ - v &= ~MSDI_CON_CLKD_MASK; - omap_hwmod_write(v, oh, MSDI_CON_OFFSET); - - return 0; -} diff --git a/arch/arm/mach-omap2/omap2-restart.c b/arch/arm/mach-omap2/omap2-restart.c deleted file mode 100644 index fdcc75c97d70..000000000000 --- a/arch/arm/mach-omap2/omap2-restart.c +++ /dev/null @@ -1,62 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * omap2-restart.c - code common to all OMAP2xxx machines. - * - * Copyright (C) 2012 Texas Instruments - * Paul Walmsley - */ -#include -#include -#include -#include - -#include "soc.h" -#include "common.h" -#include "prm.h" - -/* - * reset_virt_prcm_set_ck, reset_sys_ck: pointers to the virt_prcm_set - * clock and the sys_ck. Used during the reset process - */ -static struct clk *reset_virt_prcm_set_ck, *reset_sys_ck; - -/* Reboot handling */ - -/** - * omap2xxx_restart - Set DPLL to bypass mode for reboot to work - * - * Set the DPLL to bypass so that reboot completes successfully. No - * return value. - */ -void omap2xxx_restart(enum reboot_mode mode, const char *cmd) -{ - u32 rate; - - rate = clk_get_rate(reset_sys_ck); - clk_set_rate(reset_virt_prcm_set_ck, rate); - - /* XXX Should save the cmd argument for use after the reboot */ - - omap_prm_reset_system(); -} - -/** - * omap2xxx_common_look_up_clks_for_reset - look up clocks needed for restart - * - * Some clocks need to be looked up in advance for the SoC restart - * operation to work - see omap2xxx_restart(). Returns -EINVAL upon - * error or 0 upon success. - */ -static int __init omap2xxx_common_look_up_clks_for_reset(void) -{ - reset_virt_prcm_set_ck = clk_get(NULL, "virt_prcm_set"); - if (IS_ERR(reset_virt_prcm_set_ck)) - return -EINVAL; - - reset_sys_ck = clk_get(NULL, "sys_ck"); - if (IS_ERR(reset_sys_ck)) - return -EINVAL; - - return 0; -} -omap_postcore_initcall(omap2xxx_common_look_up_clks_for_reset); diff --git a/arch/arm/mach-omap2/omap24xx.h b/arch/arm/mach-omap2/omap24xx.h deleted file mode 100644 index d9ecc0578292..000000000000 --- a/arch/arm/mach-omap2/omap24xx.h +++ /dev/null @@ -1,73 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * This file contains the processor specific definitions - * of the TI OMAP24XX. - * - * Copyright (C) 2007 Texas Instruments. - * Copyright (C) 2007 Nokia Corporation. - */ - -#ifndef __ASM_ARCH_OMAP2_H -#define __ASM_ARCH_OMAP2_H - -/* - * Please place only base defines here and put the rest in device - * specific headers. Note also that some of these defines are needed - * for omap1 to compile without adding ifdefs. - */ - -#define L4_24XX_BASE 0x48000000 -#define L4_WK_243X_BASE 0x49000000 -#define L3_24XX_BASE 0x68000000 - -/* interrupt controller */ -#define OMAP24XX_IC_BASE (L4_24XX_BASE + 0xfe000) -#define OMAP24XX_IVA_INTC_BASE 0x40000000 - -#define OMAP242X_CTRL_BASE L4_24XX_BASE -#define OMAP2420_32KSYNCT_BASE (L4_24XX_BASE + 0x4000) -#define OMAP2420_PRCM_BASE (L4_24XX_BASE + 0x8000) -#define OMAP2420_CM_BASE (L4_24XX_BASE + 0x8000) -#define OMAP2420_PRM_BASE OMAP2420_CM_BASE -#define OMAP2420_SDRC_BASE (L3_24XX_BASE + 0x9000) -#define OMAP2420_SMS_BASE 0x68008000 -#define OMAP2420_GPMC_BASE 0x6800a000 - -#define OMAP2430_32KSYNCT_BASE (L4_WK_243X_BASE + 0x20000) -#define OMAP2430_PRCM_BASE (L4_WK_243X_BASE + 0x6000) -#define OMAP2430_CM_BASE (L4_WK_243X_BASE + 0x6000) -#define OMAP2430_PRM_BASE OMAP2430_CM_BASE - -#define OMAP243X_SMS_BASE 0x6C000000 -#define OMAP243X_SDRC_BASE 0x6D000000 -#define OMAP243X_GPMC_BASE 0x6E000000 -#define OMAP243X_SCM_BASE (L4_WK_243X_BASE + 0x2000) -#define OMAP243X_CTRL_BASE OMAP243X_SCM_BASE -#define OMAP243X_HS_BASE (L4_24XX_BASE + 0x000ac000) - -/* DSP SS */ -#define OMAP2420_DSP_BASE 0x58000000 -#define OMAP2420_DSP_MEM_BASE (OMAP2420_DSP_BASE + 0x0) -#define OMAP2420_DSP_IPI_BASE (OMAP2420_DSP_BASE + 0x1000000) -#define OMAP2420_DSP_MMU_BASE (OMAP2420_DSP_BASE + 0x2000000) - -#define OMAP243X_DSP_BASE 0x5C000000 -#define OMAP243X_DSP_MEM_BASE (OMAP243X_DSP_BASE + 0x0) -#define OMAP243X_DSP_MMU_BASE (OMAP243X_DSP_BASE + 0x1000000) - -/* Mailbox */ -#define OMAP24XX_MAILBOX_BASE (L4_24XX_BASE + 0x94000) - -/* Camera */ -#define OMAP24XX_CAMERA_BASE (L4_24XX_BASE + 0x52000) - -/* Security */ -#define OMAP24XX_SEC_BASE (L4_24XX_BASE + 0xA0000) -#define OMAP24XX_SEC_RNG_BASE (OMAP24XX_SEC_BASE + 0x0000) -#define OMAP24XX_SEC_DES_BASE (OMAP24XX_SEC_BASE + 0x2000) -#define OMAP24XX_SEC_SHA1MD5_BASE (OMAP24XX_SEC_BASE + 0x4000) -#define OMAP24XX_SEC_AES_BASE (OMAP24XX_SEC_BASE + 0x6000) -#define OMAP24XX_SEC_PKA_BASE (OMAP24XX_SEC_BASE + 0x8000) - -#endif /* __ASM_ARCH_OMAP2_H */ - diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 03cd523dff87..c918399ea735 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -153,9 +153,7 @@ #include "common.h" #include "clockdomain.h" #include "hdq1w.h" -#include "mmc.h" #include "powerdomain.h" -#include "cm2xxx.h" #include "cm3xxx.h" #include "cm33xx.h" #include "prm.h" @@ -3469,10 +3467,6 @@ static int omap_hwmod_allocate_module(struct device *dev, struct omap_hwmod *oh, return -ENOMEM; } -static const struct omap_hwmod_reset omap24xx_reset_quirks[] = { - { .match = "msdi", .len = 4, .reset = omap_msdi_reset, }, -}; - static const struct omap_hwmod_reset omap_reset_quirks[] = { { .match = "dss_core", .len = 8, .reset = omap_dss_reset, }, { .match = "hdq1w", .len = 5, .reset = omap_hdq1w_reset, }, @@ -3503,11 +3497,6 @@ static void omap_hwmod_init_reset_quirks(struct device *dev, struct omap_hwmod *oh, const struct ti_sysc_module_data *data) { - if (soc_is_omap24xx()) - omap_hwmod_init_reset_quirk(dev, oh, data, - omap24xx_reset_quirks, - ARRAY_SIZE(omap24xx_reset_quirks)); - omap_hwmod_init_reset_quirk(dev, oh, data, omap_reset_quirks, ARRAY_SIZE(omap_reset_quirks)); } @@ -3914,12 +3903,7 @@ int omap_hwmod_set_postsetup_state(struct omap_hwmod *oh, u8 state) */ void __init omap_hwmod_init(void) { - if (cpu_is_omap24xx()) { - soc_ops.wait_target_ready = _omap2xxx_3xxx_wait_target_ready; - soc_ops.assert_hardreset = _omap2_assert_hardreset; - soc_ops.deassert_hardreset = _omap2_deassert_hardreset; - soc_ops.is_hardreset_asserted = _omap2_is_hardreset_asserted; - } else if (cpu_is_omap34xx()) { + if (cpu_is_omap34xx()) { soc_ops.wait_target_ready = _omap2xxx_3xxx_wait_target_ready; soc_ops.assert_hardreset = _omap2_assert_hardreset; soc_ops.deassert_hardreset = _omap2_deassert_hardreset; diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index dcab7a01c10e..b60cd09c1997 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h @@ -663,8 +663,6 @@ omap_hwmod_for_each_by_class(const char *classname, * Chip variant-specific hwmod init routines - XXX should be converted * to use initcalls once the initial boot ordering is straightened out */ -extern int omap2420_hwmod_init(void); -extern int omap2430_hwmod_init(void); extern int omap3xxx_hwmod_init(void); extern int dm814x_hwmod_init(void); extern int dm816x_hwmod_init(void); diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c deleted file mode 100644 index dbd9dc9f0962..000000000000 --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c +++ /dev/null @@ -1,402 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * omap_hwmod_2420_data.c - hardware modules present on the OMAP2420 chips - * - * Copyright (C) 2009-2011 Nokia Corporation - * Copyright (C) 2012 Texas Instruments, Inc. - * Paul Walmsley - * - * XXX handle crossbar/shared link difference for L3? - * XXX these should be marked initdata for multi-OMAP kernels - */ - -#include - -#include "omap_hwmod.h" -#include "l3_2xxx.h" -#include "l4_2xxx.h" - -#include "omap_hwmod_common_data.h" - -#include "cm-regbits-24xx.h" -#include "prm-regbits-24xx.h" -#include "i2c.h" -#include "mmc.h" -#include "wd_timer.h" - -/* - * OMAP2420 hardware module integration data - * - * All of the data in this section should be autogeneratable from the - * TI hardware database or other technical documentation. Data that - * is driver-specific or driver-kernel integration-specific belongs - * elsewhere. - */ - -/* - * IP blocks - */ - -/* IVA1 (IVA1) */ -static struct omap_hwmod_class iva1_hwmod_class = { - .name = "iva1", -}; - -static struct omap_hwmod_rst_info omap2420_iva_resets[] = { - { .name = "iva", .rst_shift = 8 }, -}; - -static struct omap_hwmod omap2420_iva_hwmod = { - .name = "iva", - .class = &iva1_hwmod_class, - .clkdm_name = "iva1_clkdm", - .rst_lines = omap2420_iva_resets, - .rst_lines_cnt = ARRAY_SIZE(omap2420_iva_resets), - .main_clk = "iva1_ifck", -}; - -/* DSP */ -static struct omap_hwmod_class dsp_hwmod_class = { - .name = "dsp", -}; - -static struct omap_hwmod_rst_info omap2420_dsp_resets[] = { - { .name = "logic", .rst_shift = 0 }, - { .name = "mmu", .rst_shift = 1 }, -}; - -static struct omap_hwmod omap2420_dsp_hwmod = { - .name = "dsp", - .class = &dsp_hwmod_class, - .clkdm_name = "dsp_clkdm", - .rst_lines = omap2420_dsp_resets, - .rst_lines_cnt = ARRAY_SIZE(omap2420_dsp_resets), - .main_clk = "dsp_fck", -}; - -/* I2C common */ -static struct omap_hwmod_class_sysconfig i2c_sysc = { - .rev_offs = 0x00, - .sysc_offs = 0x20, - .syss_offs = 0x10, - .sysc_flags = (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class i2c_class = { - .name = "i2c", - .sysc = &i2c_sysc, - .reset = &omap_i2c_reset, -}; - -/* I2C1 */ -static struct omap_hwmod omap2420_i2c1_hwmod = { - .name = "i2c1", - .main_clk = "i2c1_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP2420_ST_I2C1_SHIFT, - }, - }, - .class = &i2c_class, - /* - * From mach-omap2/pm24xx.c: "Putting MPU into the WFI state - * while a transfer is active seems to cause the I2C block to - * timeout. Why? Good question." - */ - .flags = (HWMOD_16BIT_REG | HWMOD_BLOCK_WFI), -}; - -/* I2C2 */ -static struct omap_hwmod omap2420_i2c2_hwmod = { - .name = "i2c2", - .main_clk = "i2c2_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP2420_ST_I2C2_SHIFT, - }, - }, - .class = &i2c_class, - .flags = HWMOD_16BIT_REG, -}; - -/* mailbox */ -static struct omap_hwmod omap2420_mailbox_hwmod = { - .name = "mailbox", - .class = &omap2xxx_mailbox_hwmod_class, - .main_clk = "mailboxes_ick", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT, - }, - }, -}; - -/* - * 'mcbsp' class - * multi channel buffered serial port controller - */ - -static struct omap_hwmod_class omap2420_mcbsp_hwmod_class = { - .name = "mcbsp", -}; - -static struct omap_hwmod_opt_clk mcbsp_opt_clks[] = { - { .role = "pad_fck", .clk = "mcbsp_clks" }, - { .role = "prcm_fck", .clk = "func_96m_ck" }, -}; - -/* mcbsp1 */ -static struct omap_hwmod omap2420_mcbsp1_hwmod = { - .name = "mcbsp1", - .class = &omap2420_mcbsp_hwmod_class, - .main_clk = "mcbsp1_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT, - }, - }, - .opt_clks = mcbsp_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks), -}; - -/* mcbsp2 */ -static struct omap_hwmod omap2420_mcbsp2_hwmod = { - .name = "mcbsp2", - .class = &omap2420_mcbsp_hwmod_class, - .main_clk = "mcbsp2_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT, - }, - }, - .opt_clks = mcbsp_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks), -}; - -static struct omap_hwmod_class_sysconfig omap2420_msdi_sysc = { - .rev_offs = 0x3c, - .sysc_offs = 0x64, - .syss_offs = 0x68, - .sysc_flags = (SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2420_msdi_hwmod_class = { - .name = "msdi", - .sysc = &omap2420_msdi_sysc, - .reset = &omap_msdi_reset, -}; - -/* msdi1 */ -static struct omap_hwmod omap2420_msdi1_hwmod = { - .name = "msdi1", - .class = &omap2420_msdi_hwmod_class, - .main_clk = "mmc_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP2420_ST_MMC_SHIFT, - }, - }, - .flags = HWMOD_16BIT_REG, -}; - -/* HDQ1W/1-wire */ -static struct omap_hwmod omap2420_hdq1w_hwmod = { - .name = "hdq1w", - .main_clk = "hdq_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_HDQ_SHIFT, - }, - }, - .class = &omap2_hdq1w_class, -}; - -/* - * interfaces - */ - -/* L4 CORE -> I2C1 interface */ -static struct omap_hwmod_ocp_if omap2420_l4_core__i2c1 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2420_i2c1_hwmod, - .clk = "i2c1_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* L4 CORE -> I2C2 interface */ -static struct omap_hwmod_ocp_if omap2420_l4_core__i2c2 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2420_i2c2_hwmod, - .clk = "i2c2_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* IVA <- L3 interface */ -static struct omap_hwmod_ocp_if omap2420_l3__iva = { - .master = &omap2xxx_l3_main_hwmod, - .slave = &omap2420_iva_hwmod, - .clk = "core_l3_ck", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* DSP <- L3 interface */ -static struct omap_hwmod_ocp_if omap2420_l3__dsp = { - .master = &omap2xxx_l3_main_hwmod, - .slave = &omap2420_dsp_hwmod, - .clk = "dsp_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> wd_timer2 */ -static struct omap_hwmod_ocp_if omap2420_l4_wkup__wd_timer2 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_wd_timer2_hwmod, - .clk = "mpu_wdt_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> gpio1 */ -static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_gpio1_hwmod, - .clk = "gpios_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> gpio2 */ -static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_gpio2_hwmod, - .clk = "gpios_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> gpio3 */ -static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_gpio3_hwmod, - .clk = "gpios_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> gpio4 */ -static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_gpio4_hwmod, - .clk = "gpios_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> mailbox */ -static struct omap_hwmod_ocp_if omap2420_l4_core__mailbox = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2420_mailbox_hwmod, - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> mcbsp1 */ -static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp1 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2420_mcbsp1_hwmod, - .clk = "mcbsp1_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> mcbsp2 */ -static struct omap_hwmod_ocp_if omap2420_l4_core__mcbsp2 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2420_mcbsp2_hwmod, - .clk = "mcbsp2_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> msdi1 */ -static struct omap_hwmod_ocp_if omap2420_l4_core__msdi1 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2420_msdi1_hwmod, - .clk = "mmc_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> hdq1w interface */ -static struct omap_hwmod_ocp_if omap2420_l4_core__hdq1w = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2420_hdq1w_hwmod, - .clk = "hdq_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, - .flags = OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE, -}; - -static struct omap_hwmod_ocp_if omap2420_l3__gpmc = { - .master = &omap2xxx_l3_main_hwmod, - .slave = &omap2xxx_gpmc_hwmod, - .clk = "core_l3_ck", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -static struct omap_hwmod_ocp_if *omap2420_hwmod_ocp_ifs[] __initdata = { - &omap2xxx_l3_main__l4_core, - &omap2xxx_mpu__l3_main, - &omap2xxx_dss__l3, - &omap2xxx_l4_core__mcspi1, - &omap2xxx_l4_core__mcspi2, - &omap2xxx_l4_core__l4_wkup, - &omap2_l4_core__uart1, - &omap2_l4_core__uart2, - &omap2_l4_core__uart3, - &omap2420_l4_core__i2c1, - &omap2420_l4_core__i2c2, - &omap2420_l3__iva, - &omap2420_l3__dsp, - &omap2xxx_l4_core__timer3, - &omap2xxx_l4_core__timer4, - &omap2xxx_l4_core__timer5, - &omap2xxx_l4_core__timer6, - &omap2xxx_l4_core__timer7, - &omap2xxx_l4_core__timer8, - &omap2xxx_l4_core__timer9, - &omap2xxx_l4_core__timer10, - &omap2xxx_l4_core__timer11, - &omap2xxx_l4_core__timer12, - &omap2420_l4_wkup__wd_timer2, - &omap2xxx_l4_core__dss, - &omap2xxx_l4_core__dss_dispc, - &omap2xxx_l4_core__dss_rfbi, - &omap2xxx_l4_core__dss_venc, - &omap2420_l4_wkup__gpio1, - &omap2420_l4_wkup__gpio2, - &omap2420_l4_wkup__gpio3, - &omap2420_l4_wkup__gpio4, - &omap2420_l4_core__mailbox, - &omap2420_l4_core__mcbsp1, - &omap2420_l4_core__mcbsp2, - &omap2420_l4_core__msdi1, - &omap2xxx_l4_core__rng, - &omap2xxx_l4_core__sham, - &omap2xxx_l4_core__aes, - &omap2420_l4_core__hdq1w, - &omap2420_l3__gpmc, - NULL, -}; - -int __init omap2420_hwmod_init(void) -{ - omap_hwmod_init(); - return omap_hwmod_register_links(omap2420_hwmod_ocp_ifs); -} diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c deleted file mode 100644 index c93200801b34..000000000000 --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c +++ /dev/null @@ -1,606 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * omap_hwmod_2430_data.c - hardware modules present on the OMAP2430 chips - * - * Copyright (C) 2009-2011 Nokia Corporation - * Copyright (C) 2012 Texas Instruments, Inc. - * Paul Walmsley - * - * XXX handle crossbar/shared link difference for L3? - * XXX these should be marked initdata for multi-OMAP kernels - */ - -#include -#include - -#include "omap_hwmod.h" -#include "l3_2xxx.h" - -#include "soc.h" -#include "omap_hwmod_common_data.h" -#include "prm-regbits-24xx.h" -#include "cm-regbits-24xx.h" -#include "i2c.h" -#include "wd_timer.h" - -/* - * OMAP2430 hardware module integration data - * - * All of the data in this section should be autogeneratable from the - * TI hardware database or other technical documentation. Data that - * is driver-specific or driver-kernel integration-specific belongs - * elsewhere. - */ - -/* - * IP blocks - */ - -/* IVA2 (IVA2) */ -static struct omap_hwmod_rst_info omap2430_iva_resets[] = { - { .name = "logic", .rst_shift = 0 }, - { .name = "mmu", .rst_shift = 1 }, -}; - -static struct omap_hwmod omap2430_iva_hwmod = { - .name = "iva", - .class = &iva_hwmod_class, - .clkdm_name = "dsp_clkdm", - .rst_lines = omap2430_iva_resets, - .rst_lines_cnt = ARRAY_SIZE(omap2430_iva_resets), - .main_clk = "dsp_fck", -}; - -/* I2C common */ -static struct omap_hwmod_class_sysconfig i2c_sysc = { - .rev_offs = 0x00, - .sysc_offs = 0x20, - .syss_offs = 0x10, - .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | - SYSS_HAS_RESET_STATUS), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class i2c_class = { - .name = "i2c", - .sysc = &i2c_sysc, - .reset = &omap_i2c_reset, -}; - -/* I2C1 */ -static struct omap_hwmod omap2430_i2c1_hwmod = { - .name = "i2c1", - .flags = HWMOD_16BIT_REG, - .main_clk = "i2chs1_fck", - .prcm = { - .omap2 = { - /* - * NOTE: The CM_FCLKEN* and CM_ICLKEN* for - * I2CHS IP's do not follow the usual pattern. - * prcm_reg_id alone cannot be used to program - * the iclk and fclk. Needs to be handled using - * additional flags when clk handling is moved - * to hwmod framework. - */ - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP2430_ST_I2CHS1_SHIFT, - }, - }, - .class = &i2c_class, -}; - -/* I2C2 */ -static struct omap_hwmod omap2430_i2c2_hwmod = { - .name = "i2c2", - .flags = HWMOD_16BIT_REG, - .main_clk = "i2chs2_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP2430_ST_I2CHS2_SHIFT, - }, - }, - .class = &i2c_class, -}; - -/* gpio5 */ -static struct omap_hwmod omap2430_gpio5_hwmod = { - .name = "gpio5", - .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .main_clk = "gpio5_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 2, - .idlest_idle_bit = OMAP2430_ST_GPIO5_SHIFT, - }, - }, - .class = &omap2xxx_gpio_hwmod_class, -}; - -/* mailbox */ -static struct omap_hwmod omap2430_mailbox_hwmod = { - .name = "mailbox", - .class = &omap2xxx_mailbox_hwmod_class, - .main_clk = "mailboxes_ick", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_MAILBOXES_SHIFT, - }, - }, -}; - -/* mcspi3 */ -static struct omap_hwmod omap2430_mcspi3_hwmod = { - .name = "mcspi3", - .main_clk = "mcspi3_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 2, - .idlest_idle_bit = OMAP2430_ST_MCSPI3_SHIFT, - }, - }, - .class = &omap2xxx_mcspi_class, -}; - -/* usbhsotg */ -static struct omap_hwmod_class_sysconfig omap2430_usbhsotg_sysc = { - .rev_offs = 0x0400, - .sysc_offs = 0x0404, - .syss_offs = 0x0408, - .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE| - SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | - SYSC_HAS_AUTOIDLE), - .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | - MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class usbotg_class = { - .name = "usbotg", - .sysc = &omap2430_usbhsotg_sysc, -}; - -/* usb_otg_hs */ -static struct omap_hwmod omap2430_usbhsotg_hwmod = { - .name = "usb_otg_hs", - .main_clk = "usbhs_ick", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP2430_ST_USBHS_SHIFT, - }, - }, - .class = &usbotg_class, - /* - * Erratum ID: i479 idle_req / idle_ack mechanism potentially - * broken when autoidle is enabled - * workaround is to disable the autoidle bit at module level. - */ - .flags = HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE - | HWMOD_SWSUP_MSTANDBY, -}; - -/* - * 'mcbsp' class - * multi channel buffered serial port controller - */ - -static struct omap_hwmod_class_sysconfig omap2430_mcbsp_sysc = { - .rev_offs = 0x007C, - .sysc_offs = 0x008C, - .sysc_flags = (SYSC_HAS_SOFTRESET), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2430_mcbsp_hwmod_class = { - .name = "mcbsp", - .sysc = &omap2430_mcbsp_sysc, -}; - -static struct omap_hwmod_opt_clk mcbsp_opt_clks[] = { - { .role = "pad_fck", .clk = "mcbsp_clks" }, - { .role = "prcm_fck", .clk = "func_96m_ck" }, -}; - -/* mcbsp1 */ -static struct omap_hwmod omap2430_mcbsp1_hwmod = { - .name = "mcbsp1", - .class = &omap2430_mcbsp_hwmod_class, - .main_clk = "mcbsp1_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT, - }, - }, - .opt_clks = mcbsp_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks), -}; - -/* mcbsp2 */ -static struct omap_hwmod omap2430_mcbsp2_hwmod = { - .name = "mcbsp2", - .class = &omap2430_mcbsp_hwmod_class, - .main_clk = "mcbsp2_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT, - }, - }, - .opt_clks = mcbsp_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks), -}; - -/* mcbsp3 */ -static struct omap_hwmod omap2430_mcbsp3_hwmod = { - .name = "mcbsp3", - .class = &omap2430_mcbsp_hwmod_class, - .main_clk = "mcbsp3_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 2, - .idlest_idle_bit = OMAP2430_ST_MCBSP3_SHIFT, - }, - }, - .opt_clks = mcbsp_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks), -}; - -/* mcbsp4 */ -static struct omap_hwmod omap2430_mcbsp4_hwmod = { - .name = "mcbsp4", - .class = &omap2430_mcbsp_hwmod_class, - .main_clk = "mcbsp4_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 2, - .idlest_idle_bit = OMAP2430_ST_MCBSP4_SHIFT, - }, - }, - .opt_clks = mcbsp_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks), -}; - -/* mcbsp5 */ -static struct omap_hwmod omap2430_mcbsp5_hwmod = { - .name = "mcbsp5", - .class = &omap2430_mcbsp_hwmod_class, - .main_clk = "mcbsp5_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 2, - .idlest_idle_bit = OMAP2430_ST_MCBSP5_SHIFT, - }, - }, - .opt_clks = mcbsp_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(mcbsp_opt_clks), -}; - -/* MMC/SD/SDIO common */ -static struct omap_hwmod_class_sysconfig omap2430_mmc_sysc = { - .rev_offs = 0x1fc, - .sysc_offs = 0x10, - .syss_offs = 0x14, - .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | - SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | - SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), - .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2430_mmc_class = { - .name = "mmc", - .sysc = &omap2430_mmc_sysc, -}; - -/* MMC/SD/SDIO1 */ -static struct omap_hwmod_opt_clk omap2430_mmc1_opt_clks[] = { - { .role = "dbck", .clk = "mmchsdb1_fck" }, -}; - -static struct omap_hsmmc_dev_attr mmc1_dev_attr = { - .flags = OMAP_HSMMC_SUPPORTS_DUAL_VOLT, -}; - -static struct omap_hwmod omap2430_mmc1_hwmod = { - .name = "mmc1", - .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .opt_clks = omap2430_mmc1_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(omap2430_mmc1_opt_clks), - .main_clk = "mmchs1_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 2, - .idlest_idle_bit = OMAP2430_ST_MMCHS1_SHIFT, - }, - }, - .dev_attr = &mmc1_dev_attr, - .class = &omap2430_mmc_class, -}; - -/* MMC/SD/SDIO2 */ -static struct omap_hwmod_opt_clk omap2430_mmc2_opt_clks[] = { - { .role = "dbck", .clk = "mmchsdb2_fck" }, -}; - -static struct omap_hwmod omap2430_mmc2_hwmod = { - .name = "mmc2", - .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .opt_clks = omap2430_mmc2_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(omap2430_mmc2_opt_clks), - .main_clk = "mmchs2_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 2, - .idlest_idle_bit = OMAP2430_ST_MMCHS2_SHIFT, - }, - }, - .class = &omap2430_mmc_class, -}; - -/* HDQ1W/1-wire */ -static struct omap_hwmod omap2430_hdq1w_hwmod = { - .name = "hdq1w", - .main_clk = "hdq_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_HDQ_SHIFT, - }, - }, - .class = &omap2_hdq1w_class, -}; - -/* - * interfaces - */ - -/* L3 -> L4_CORE interface */ -/* l3_core -> usbhsotg interface */ -static struct omap_hwmod_ocp_if omap2430_usbhsotg__l3 = { - .master = &omap2430_usbhsotg_hwmod, - .slave = &omap2xxx_l3_main_hwmod, - .clk = "core_l3_ck", - .user = OCP_USER_MPU, -}; - -/* L4 CORE -> I2C1 interface */ -static struct omap_hwmod_ocp_if omap2430_l4_core__i2c1 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_i2c1_hwmod, - .clk = "i2c1_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* L4 CORE -> I2C2 interface */ -static struct omap_hwmod_ocp_if omap2430_l4_core__i2c2 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_i2c2_hwmod, - .clk = "i2c2_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core ->usbhsotg interface */ -static struct omap_hwmod_ocp_if omap2430_l4_core__usbhsotg = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_usbhsotg_hwmod, - .clk = "usb_l4_ick", - .user = OCP_USER_MPU, -}; - -/* L4 CORE -> MMC1 interface */ -static struct omap_hwmod_ocp_if omap2430_l4_core__mmc1 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_mmc1_hwmod, - .clk = "mmchs1_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* L4 CORE -> MMC2 interface */ -static struct omap_hwmod_ocp_if omap2430_l4_core__mmc2 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_mmc2_hwmod, - .clk = "mmchs2_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4 core -> mcspi3 interface */ -static struct omap_hwmod_ocp_if omap2430_l4_core__mcspi3 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_mcspi3_hwmod, - .clk = "mcspi3_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* IVA2 <- L3 interface */ -static struct omap_hwmod_ocp_if omap2430_l3__iva = { - .master = &omap2xxx_l3_main_hwmod, - .slave = &omap2430_iva_hwmod, - .clk = "core_l3_ck", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> wd_timer2 */ -static struct omap_hwmod_ocp_if omap2430_l4_wkup__wd_timer2 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_wd_timer2_hwmod, - .clk = "mpu_wdt_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> gpio1 */ -static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio1 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_gpio1_hwmod, - .clk = "gpios_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> gpio2 */ -static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio2 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_gpio2_hwmod, - .clk = "gpios_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> gpio3 */ -static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio3 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_gpio3_hwmod, - .clk = "gpios_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_wkup -> gpio4 */ -static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio4 = { - .master = &omap2xxx_l4_wkup_hwmod, - .slave = &omap2xxx_gpio4_hwmod, - .clk = "gpios_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> gpio5 */ -static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_gpio5_hwmod, - .clk = "gpio5_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> mailbox */ -static struct omap_hwmod_ocp_if omap2430_l4_core__mailbox = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_mailbox_hwmod, - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> mcbsp1 */ -static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp1 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_mcbsp1_hwmod, - .clk = "mcbsp1_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> mcbsp2 */ -static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp2 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_mcbsp2_hwmod, - .clk = "mcbsp2_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> mcbsp3 */ -static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp3 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_mcbsp3_hwmod, - .clk = "mcbsp3_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> mcbsp4 */ -static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp4 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_mcbsp4_hwmod, - .clk = "mcbsp4_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> mcbsp5 */ -static struct omap_hwmod_ocp_if omap2430_l4_core__mcbsp5 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_mcbsp5_hwmod, - .clk = "mcbsp5_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> hdq1w */ -static struct omap_hwmod_ocp_if omap2430_l4_core__hdq1w = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2430_hdq1w_hwmod, - .clk = "hdq_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, - .flags = OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE, -}; - -static struct omap_hwmod_ocp_if omap2430_l3__gpmc = { - .master = &omap2xxx_l3_main_hwmod, - .slave = &omap2xxx_gpmc_hwmod, - .clk = "core_l3_ck", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -static struct omap_hwmod_ocp_if *omap2430_hwmod_ocp_ifs[] __initdata = { - &omap2xxx_l3_main__l4_core, - &omap2xxx_mpu__l3_main, - &omap2xxx_dss__l3, - &omap2430_usbhsotg__l3, - &omap2430_l4_core__i2c1, - &omap2430_l4_core__i2c2, - &omap2xxx_l4_core__l4_wkup, - &omap2_l4_core__uart1, - &omap2_l4_core__uart2, - &omap2_l4_core__uart3, - &omap2430_l4_core__usbhsotg, - &omap2430_l4_core__mmc1, - &omap2430_l4_core__mmc2, - &omap2xxx_l4_core__mcspi1, - &omap2xxx_l4_core__mcspi2, - &omap2430_l4_core__mcspi3, - &omap2430_l3__iva, - &omap2xxx_l4_core__timer3, - &omap2xxx_l4_core__timer4, - &omap2xxx_l4_core__timer5, - &omap2xxx_l4_core__timer6, - &omap2xxx_l4_core__timer7, - &omap2xxx_l4_core__timer8, - &omap2xxx_l4_core__timer9, - &omap2xxx_l4_core__timer10, - &omap2xxx_l4_core__timer11, - &omap2xxx_l4_core__timer12, - &omap2430_l4_wkup__wd_timer2, - &omap2xxx_l4_core__dss, - &omap2xxx_l4_core__dss_dispc, - &omap2xxx_l4_core__dss_rfbi, - &omap2xxx_l4_core__dss_venc, - &omap2430_l4_wkup__gpio1, - &omap2430_l4_wkup__gpio2, - &omap2430_l4_wkup__gpio3, - &omap2430_l4_wkup__gpio4, - &omap2430_l4_core__gpio5, - &omap2430_l4_core__mailbox, - &omap2430_l4_core__mcbsp1, - &omap2430_l4_core__mcbsp2, - &omap2430_l4_core__mcbsp3, - &omap2430_l4_core__mcbsp4, - &omap2430_l4_core__mcbsp5, - &omap2430_l4_core__hdq1w, - &omap2xxx_l4_core__rng, - &omap2xxx_l4_core__sham, - &omap2xxx_l4_core__aes, - &omap2430_l3__gpmc, - NULL, -}; - -int __init omap2430_hwmod_init(void) -{ - omap_hwmod_init(); - return omap_hwmod_register_links(omap2430_hwmod_ocp_ifs); -} diff --git a/arch/arm/mach-omap2/omap_hwmod_2xxx_interconnect_data.c b/arch/arm/mach-omap2/omap_hwmod_2xxx_interconnect_data.c deleted file mode 100644 index 761d34914ed9..000000000000 --- a/arch/arm/mach-omap2/omap_hwmod_2xxx_interconnect_data.c +++ /dev/null @@ -1,256 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * omap_hwmod_2xxx_interconnect_data.c - common interconnect data for OMAP2xxx - * - * Copyright (C) 2009-2011 Nokia Corporation - * Paul Walmsley - * - * XXX handle crossbar/shared link difference for L3? - * XXX these should be marked initdata for multi-OMAP kernels - */ -#include - -#include "omap_hwmod.h" -#include "l3_2xxx.h" -#include "l4_2xxx.h" - -#include "omap_hwmod_common_data.h" - -/* - * Common interconnect data - */ - -/* L3 -> L4_CORE interface */ -struct omap_hwmod_ocp_if omap2xxx_l3_main__l4_core = { - .master = &omap2xxx_l3_main_hwmod, - .slave = &omap2xxx_l4_core_hwmod, - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* MPU -> L3 interface */ -struct omap_hwmod_ocp_if omap2xxx_mpu__l3_main = { - .master = &omap2xxx_mpu_hwmod, - .slave = &omap2xxx_l3_main_hwmod, - .user = OCP_USER_MPU, -}; - -/* DSS -> l3 */ -struct omap_hwmod_ocp_if omap2xxx_dss__l3 = { - .master = &omap2xxx_dss_core_hwmod, - .slave = &omap2xxx_l3_main_hwmod, - .fw = { - .omap2 = { - .l3_perm_bit = OMAP2_L3_CORE_FW_CONNID_DSS, - .flags = OMAP_FIREWALL_L3, - }, - }, - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* L4_CORE -> L4_WKUP interface */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__l4_wkup = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_l4_wkup_hwmod, - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* L4 CORE -> UART1 interface */ -struct omap_hwmod_ocp_if omap2_l4_core__uart1 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_uart1_hwmod, - .clk = "uart1_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* L4 CORE -> UART2 interface */ -struct omap_hwmod_ocp_if omap2_l4_core__uart2 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_uart2_hwmod, - .clk = "uart2_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* L4 PER -> UART3 interface */ -struct omap_hwmod_ocp_if omap2_l4_core__uart3 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_uart3_hwmod, - .clk = "uart3_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4 core -> mcspi1 interface */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__mcspi1 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_mcspi1_hwmod, - .clk = "mcspi1_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4 core -> mcspi2 interface */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__mcspi2 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_mcspi2_hwmod, - .clk = "mcspi2_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer3 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer3 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer3_hwmod, - .clk = "gpt3_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer4 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer4 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer4_hwmod, - .clk = "gpt4_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer5 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer5 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer5_hwmod, - .clk = "gpt5_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer6 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer6 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer6_hwmod, - .clk = "gpt6_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer7 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer7 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer7_hwmod, - .clk = "gpt7_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer8 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer8 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer8_hwmod, - .clk = "gpt8_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer9 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer9 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer9_hwmod, - .clk = "gpt9_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer10 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer10 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer10_hwmod, - .clk = "gpt10_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer11 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer11 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer11_hwmod, - .clk = "gpt11_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> timer12 */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__timer12 = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_timer12_hwmod, - .clk = "gpt12_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> dss */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__dss = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_dss_core_hwmod, - .clk = "dss_ick", - .fw = { - .omap2 = { - .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION, - .flags = OMAP_FIREWALL_L4, - }, - }, - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> dss_dispc */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_dispc = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_dss_dispc_hwmod, - .clk = "dss_ick", - .fw = { - .omap2 = { - .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_DISPC_REGION, - .flags = OMAP_FIREWALL_L4, - }, - }, - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> dss_rfbi */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_rfbi = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_dss_rfbi_hwmod, - .clk = "dss_ick", - .fw = { - .omap2 = { - .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_CORE_REGION, - .flags = OMAP_FIREWALL_L4, - }, - }, - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> dss_venc */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_venc = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_dss_venc_hwmod, - .clk = "dss_ick", - .fw = { - .omap2 = { - .l4_fw_region = OMAP2420_L4_CORE_FW_DSS_VENC_REGION, - .flags = OMAP_FIREWALL_L4, - }, - }, - .flags = OCPIF_SWSUP_IDLE, - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4_core -> rng */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__rng = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_rng_hwmod, - .clk = "rng_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4 core -> sham interface */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__sham = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_sham_hwmod, - .clk = "sha_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; - -/* l4 core -> aes interface */ -struct omap_hwmod_ocp_if omap2xxx_l4_core__aes = { - .master = &omap2xxx_l4_core_hwmod, - .slave = &omap2xxx_aes_hwmod, - .clk = "aes_ick", - .user = OCP_USER_MPU | OCP_USER_SDMA, -}; diff --git a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c deleted file mode 100644 index 4982e04ead53..000000000000 --- a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c +++ /dev/null @@ -1,668 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * omap_hwmod_2xxx_ipblock_data.c - common IP block data for OMAP2xxx - * - * Copyright (C) 2011 Nokia Corporation - * Paul Walmsley - */ - -#include - -#include "omap_hwmod.h" -#include "omap_hwmod_common_data.h" -#include "cm-regbits-24xx.h" -#include "prm-regbits-24xx.h" -#include "wd_timer.h" - -/* - * 'dispc' class - * display controller - */ - -static struct omap_hwmod_class_sysconfig omap2_dispc_sysc = { - .rev_offs = 0x0000, - .sysc_offs = 0x0010, - .syss_offs = 0x0014, - .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE | - SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE), - .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | - MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2_dispc_hwmod_class = { - .name = "dispc", - .sysc = &omap2_dispc_sysc, -}; - -/* OMAP2xxx Timer Common */ -static struct omap_hwmod_class_sysconfig omap2xxx_timer_sysc = { - .rev_offs = 0x0000, - .sysc_offs = 0x0010, - .syss_offs = 0x0014, - .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY | - SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | - SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), - .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2xxx_timer_hwmod_class = { - .name = "timer", - .sysc = &omap2xxx_timer_sysc, -}; - -/* - * 'wd_timer' class - * 32-bit watchdog upward counter that generates a pulse on the reset pin on - * overflow condition - */ - -static struct omap_hwmod_class_sysconfig omap2xxx_wd_timer_sysc = { - .rev_offs = 0x0000, - .sysc_offs = 0x0010, - .syss_offs = 0x0014, - .sysc_flags = (SYSC_HAS_EMUFREE | SYSC_HAS_SOFTRESET | - SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2xxx_wd_timer_hwmod_class = { - .name = "wd_timer", - .sysc = &omap2xxx_wd_timer_sysc, - .pre_shutdown = &omap2_wd_timer_disable, - .reset = &omap2_wd_timer_reset, -}; - -/* - * 'gpio' class - * general purpose io module - */ -static struct omap_hwmod_class_sysconfig omap2xxx_gpio_sysc = { - .rev_offs = 0x0000, - .sysc_offs = 0x0010, - .syss_offs = 0x0014, - .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE | - SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | - SYSS_HAS_RESET_STATUS), - .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -struct omap_hwmod_class omap2xxx_gpio_hwmod_class = { - .name = "gpio", - .sysc = &omap2xxx_gpio_sysc, -}; - -/* - * 'mailbox' class - * mailbox module allowing communication between the on-chip processors - * using a queued mailbox-interrupt mechanism. - */ - -static struct omap_hwmod_class_sysconfig omap2xxx_mailbox_sysc = { - .rev_offs = 0x000, - .sysc_offs = 0x010, - .syss_offs = 0x014, - .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | - SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE), - .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -struct omap_hwmod_class omap2xxx_mailbox_hwmod_class = { - .name = "mailbox", - .sysc = &omap2xxx_mailbox_sysc, -}; - -/* - * 'mcspi' class - * multichannel serial port interface (mcspi) / master/slave synchronous serial - * bus - */ - -static struct omap_hwmod_class_sysconfig omap2xxx_mcspi_sysc = { - .rev_offs = 0x0000, - .sysc_offs = 0x0010, - .syss_offs = 0x0014, - .sysc_flags = (SYSC_HAS_CLOCKACTIVITY | SYSC_HAS_SIDLEMODE | - SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | - SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), - .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -struct omap_hwmod_class omap2xxx_mcspi_class = { - .name = "mcspi", - .sysc = &omap2xxx_mcspi_sysc, -}; - -/* - * 'gpmc' class - * general purpose memory controller - */ - -static struct omap_hwmod_class_sysconfig omap2xxx_gpmc_sysc = { - .rev_offs = 0x0000, - .sysc_offs = 0x0010, - .syss_offs = 0x0014, - .sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE | - SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS), - .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2xxx_gpmc_hwmod_class = { - .name = "gpmc", - .sysc = &omap2xxx_gpmc_sysc, -}; - -/* - * IP blocks - */ - -/* L3 */ -struct omap_hwmod omap2xxx_l3_main_hwmod = { - .name = "l3_main", - .class = &l3_hwmod_class, - .flags = HWMOD_NO_IDLEST, -}; - -/* L4 CORE */ -struct omap_hwmod omap2xxx_l4_core_hwmod = { - .name = "l4_core", - .class = &l4_hwmod_class, - .flags = HWMOD_NO_IDLEST, -}; - -/* L4 WKUP */ -struct omap_hwmod omap2xxx_l4_wkup_hwmod = { - .name = "l4_wkup", - .class = &l4_hwmod_class, - .flags = HWMOD_NO_IDLEST, -}; - -/* MPU */ -struct omap_hwmod omap2xxx_mpu_hwmod = { - .name = "mpu", - .class = &mpu_hwmod_class, - .main_clk = "mpu_ck", -}; - -/* timer3 */ -struct omap_hwmod omap2xxx_timer3_hwmod = { - .name = "timer3", - .main_clk = "gpt3_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* timer4 */ -struct omap_hwmod omap2xxx_timer4_hwmod = { - .name = "timer4", - .main_clk = "gpt4_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* timer5 */ -struct omap_hwmod omap2xxx_timer5_hwmod = { - .name = "timer5", - .main_clk = "gpt5_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* timer6 */ -struct omap_hwmod omap2xxx_timer6_hwmod = { - .name = "timer6", - .main_clk = "gpt6_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* timer7 */ -struct omap_hwmod omap2xxx_timer7_hwmod = { - .name = "timer7", - .main_clk = "gpt7_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* timer8 */ -struct omap_hwmod omap2xxx_timer8_hwmod = { - .name = "timer8", - .main_clk = "gpt8_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* timer9 */ -struct omap_hwmod omap2xxx_timer9_hwmod = { - .name = "timer9", - .main_clk = "gpt9_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* timer10 */ -struct omap_hwmod omap2xxx_timer10_hwmod = { - .name = "timer10", - .main_clk = "gpt10_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT10_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* timer11 */ -struct omap_hwmod omap2xxx_timer11_hwmod = { - .name = "timer11", - .main_clk = "gpt11_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT11_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* timer12 */ -struct omap_hwmod omap2xxx_timer12_hwmod = { - .name = "timer12", - .main_clk = "gpt12_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPT12_SHIFT, - }, - }, - .class = &omap2xxx_timer_hwmod_class, - .flags = HWMOD_SET_DEFAULT_CLOCKACT, -}; - -/* wd_timer2 */ -struct omap_hwmod omap2xxx_wd_timer2_hwmod = { - .name = "wd_timer2", - .class = &omap2xxx_wd_timer_hwmod_class, - .main_clk = "mpu_wdt_fck", - .prcm = { - .omap2 = { - .module_offs = WKUP_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_MPU_WDT_SHIFT, - }, - }, -}; - -/* UART1 */ - -struct omap_hwmod omap2xxx_uart1_hwmod = { - .name = "uart1", - .main_clk = "uart1_fck", - .flags = DEBUG_OMAP2UART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT, - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_EN_UART1_SHIFT, - }, - }, - .class = &omap2_uart_class, -}; - -/* UART2 */ - -struct omap_hwmod omap2xxx_uart2_hwmod = { - .name = "uart2", - .main_clk = "uart2_fck", - .flags = DEBUG_OMAP2UART2_FLAGS | HWMOD_SWSUP_SIDLE_ACT, - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_EN_UART2_SHIFT, - }, - }, - .class = &omap2_uart_class, -}; - -/* UART3 */ - -struct omap_hwmod omap2xxx_uart3_hwmod = { - .name = "uart3", - .main_clk = "uart3_fck", - .flags = DEBUG_OMAP2UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT, - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 2, - .idlest_idle_bit = OMAP24XX_EN_UART3_SHIFT, - }, - }, - .class = &omap2_uart_class, -}; - -/* dss */ - -static struct omap_hwmod_opt_clk dss_opt_clks[] = { - /* - * The DSS HW needs all DSS clocks enabled during reset. The dss_core - * driver does not use these clocks. - */ - { .role = "tv_clk", .clk = "dss_54m_fck" }, - { .role = "sys_clk", .clk = "dss2_fck" }, -}; - -struct omap_hwmod omap2xxx_dss_core_hwmod = { - .name = "dss_core", - .class = &omap2_dss_hwmod_class, - .main_clk = "dss1_fck", /* instead of dss_fck */ - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - }, - }, - .opt_clks = dss_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks), - .flags = HWMOD_NO_IDLEST | HWMOD_CONTROL_OPT_CLKS_IN_RESET, -}; - -struct omap_hwmod omap2xxx_dss_dispc_hwmod = { - .name = "dss_dispc", - .class = &omap2_dispc_hwmod_class, - .main_clk = "dss1_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - }, - }, - .flags = HWMOD_NO_IDLEST, - .dev_attr = &omap2_3_dss_dispc_dev_attr, -}; - -static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = { - { .role = "ick", .clk = "dss_ick" }, -}; - -struct omap_hwmod omap2xxx_dss_rfbi_hwmod = { - .name = "dss_rfbi", - .class = &omap2_rfbi_hwmod_class, - .main_clk = "dss1_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - }, - }, - .opt_clks = dss_rfbi_opt_clks, - .opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks), - .flags = HWMOD_NO_IDLEST, -}; - -struct omap_hwmod omap2xxx_dss_venc_hwmod = { - .name = "dss_venc", - .class = &omap2_venc_hwmod_class, - .main_clk = "dss_54m_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - }, - }, - .flags = HWMOD_NO_IDLEST, -}; - -/* gpio1 */ -struct omap_hwmod omap2xxx_gpio1_hwmod = { - .name = "gpio1", - .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .main_clk = "gpios_fck", - .prcm = { - .omap2 = { - .module_offs = WKUP_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT, - }, - }, - .class = &omap2xxx_gpio_hwmod_class, -}; - -/* gpio2 */ -struct omap_hwmod omap2xxx_gpio2_hwmod = { - .name = "gpio2", - .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .main_clk = "gpios_fck", - .prcm = { - .omap2 = { - .module_offs = WKUP_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT, - }, - }, - .class = &omap2xxx_gpio_hwmod_class, -}; - -/* gpio3 */ -struct omap_hwmod omap2xxx_gpio3_hwmod = { - .name = "gpio3", - .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .main_clk = "gpios_fck", - .prcm = { - .omap2 = { - .module_offs = WKUP_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT, - }, - }, - .class = &omap2xxx_gpio_hwmod_class, -}; - -/* gpio4 */ -struct omap_hwmod omap2xxx_gpio4_hwmod = { - .name = "gpio4", - .flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET, - .main_clk = "gpios_fck", - .prcm = { - .omap2 = { - .module_offs = WKUP_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT, - }, - }, - .class = &omap2xxx_gpio_hwmod_class, -}; - -/* mcspi1 */ -struct omap_hwmod omap2xxx_mcspi1_hwmod = { - .name = "mcspi1", - .main_clk = "mcspi1_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_MCSPI1_SHIFT, - }, - }, - .class = &omap2xxx_mcspi_class, -}; - -/* mcspi2 */ -struct omap_hwmod omap2xxx_mcspi2_hwmod = { - .name = "mcspi2", - .main_clk = "mcspi2_fck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 1, - .idlest_idle_bit = OMAP24XX_ST_MCSPI2_SHIFT, - }, - }, - .class = &omap2xxx_mcspi_class, -}; - -/* gpmc */ -struct omap_hwmod omap2xxx_gpmc_hwmod = { - .name = "gpmc", - .class = &omap2xxx_gpmc_hwmod_class, - .main_clk = "gpmc_fck", - /* Skip reset for CONFIG_OMAP_GPMC_DEBUG for bootloader timings */ - .flags = HWMOD_NO_IDLEST | DEBUG_OMAP_GPMC_HWMOD_FLAGS, - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - }, - }, -}; - -/* RNG */ - -static struct omap_hwmod_class_sysconfig omap2_rng_sysc = { - .rev_offs = 0x3c, - .sysc_offs = 0x40, - .syss_offs = 0x44, - .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | - SYSS_HAS_RESET_STATUS), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2_rng_hwmod_class = { - .name = "rng", - .sysc = &omap2_rng_sysc, -}; - -struct omap_hwmod omap2xxx_rng_hwmod = { - .name = "rng", - .main_clk = "l4_ck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 4, - .idlest_idle_bit = OMAP24XX_ST_RNG_SHIFT, - }, - }, - /* - * XXX The first read from the SYSSTATUS register of the RNG - * after the SYSCONFIG SOFTRESET bit is set triggers an - * imprecise external abort. It's unclear why this happens. - * Until this is analyzed, skip the IP block reset. - */ - .flags = HWMOD_INIT_NO_RESET, - .class = &omap2_rng_hwmod_class, -}; - -/* SHAM */ - -static struct omap_hwmod_class_sysconfig omap2_sham_sysc = { - .rev_offs = 0x5c, - .sysc_offs = 0x60, - .syss_offs = 0x64, - .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | - SYSS_HAS_RESET_STATUS), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2xxx_sham_class = { - .name = "sham", - .sysc = &omap2_sham_sysc, -}; - -struct omap_hwmod omap2xxx_sham_hwmod = { - .name = "sham", - .main_clk = "l4_ck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 4, - .idlest_idle_bit = OMAP24XX_ST_SHA_SHIFT, - }, - }, - .class = &omap2xxx_sham_class, -}; - -/* AES */ - -static struct omap_hwmod_class_sysconfig omap2_aes_sysc = { - .rev_offs = 0x44, - .sysc_offs = 0x48, - .syss_offs = 0x4c, - .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | - SYSS_HAS_RESET_STATUS), - .sysc_fields = &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap2xxx_aes_class = { - .name = "aes", - .sysc = &omap2_aes_sysc, -}; - -struct omap_hwmod omap2xxx_aes_hwmod = { - .name = "aes", - .main_clk = "l4_ck", - .prcm = { - .omap2 = { - .module_offs = CORE_MOD, - .idlest_reg_id = 4, - .idlest_idle_bit = OMAP24XX_ST_AES_SHIFT, - }, - }, - .class = &omap2xxx_aes_class, -}; diff --git a/arch/arm/mach-omap2/omap_hwmod_common_data.h b/arch/arm/mach-omap2/omap_hwmod_common_data.h index 69dddc53e1d8..8b270cb3f64b 100644 --- a/arch/arm/mach-omap2/omap_hwmod_common_data.h +++ b/arch/arm/mach-omap2/omap_hwmod_common_data.h @@ -15,68 +15,6 @@ #include "common.h" #include "display.h" -/* Common IP block data across OMAP2xxx */ -extern struct omap_hwmod omap2xxx_l3_main_hwmod; -extern struct omap_hwmod omap2xxx_l4_core_hwmod; -extern struct omap_hwmod omap2xxx_l4_wkup_hwmod; -extern struct omap_hwmod omap2xxx_mpu_hwmod; -extern struct omap_hwmod omap2xxx_timer3_hwmod; -extern struct omap_hwmod omap2xxx_timer4_hwmod; -extern struct omap_hwmod omap2xxx_timer5_hwmod; -extern struct omap_hwmod omap2xxx_timer6_hwmod; -extern struct omap_hwmod omap2xxx_timer7_hwmod; -extern struct omap_hwmod omap2xxx_timer8_hwmod; -extern struct omap_hwmod omap2xxx_timer9_hwmod; -extern struct omap_hwmod omap2xxx_timer10_hwmod; -extern struct omap_hwmod omap2xxx_timer11_hwmod; -extern struct omap_hwmod omap2xxx_timer12_hwmod; -extern struct omap_hwmod omap2xxx_wd_timer2_hwmod; -extern struct omap_hwmod omap2xxx_uart1_hwmod; -extern struct omap_hwmod omap2xxx_uart2_hwmod; -extern struct omap_hwmod omap2xxx_uart3_hwmod; -extern struct omap_hwmod omap2xxx_dss_core_hwmod; -extern struct omap_hwmod omap2xxx_dss_dispc_hwmod; -extern struct omap_hwmod omap2xxx_dss_rfbi_hwmod; -extern struct omap_hwmod omap2xxx_dss_venc_hwmod; -extern struct omap_hwmod omap2xxx_gpio1_hwmod; -extern struct omap_hwmod omap2xxx_gpio2_hwmod; -extern struct omap_hwmod omap2xxx_gpio3_hwmod; -extern struct omap_hwmod omap2xxx_gpio4_hwmod; -extern struct omap_hwmod omap2xxx_mcspi1_hwmod; -extern struct omap_hwmod omap2xxx_mcspi2_hwmod; -extern struct omap_hwmod omap2xxx_gpmc_hwmod; -extern struct omap_hwmod omap2xxx_rng_hwmod; -extern struct omap_hwmod omap2xxx_sham_hwmod; -extern struct omap_hwmod omap2xxx_aes_hwmod; - -/* Common interface data across OMAP2xxx */ -extern struct omap_hwmod_ocp_if omap2xxx_l3_main__l4_core; -extern struct omap_hwmod_ocp_if omap2xxx_mpu__l3_main; -extern struct omap_hwmod_ocp_if omap2xxx_dss__l3; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__l4_wkup; -extern struct omap_hwmod_ocp_if omap2_l4_core__uart1; -extern struct omap_hwmod_ocp_if omap2_l4_core__uart2; -extern struct omap_hwmod_ocp_if omap2_l4_core__uart3; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__mcspi1; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__mcspi2; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer3; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer4; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer5; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer6; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer7; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer8; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer9; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer10; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer11; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__timer12; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_dispc; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_rfbi; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_venc; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__rng; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__sham; -extern struct omap_hwmod_ocp_if omap2xxx_l4_core__aes; - /* OMAP hwmod classes - forward declarations */ extern struct omap_hwmod_class l3_hwmod_class; extern struct omap_hwmod_class l4_hwmod_class; @@ -88,10 +26,6 @@ extern struct omap_hwmod_class omap2_rfbi_hwmod_class; extern struct omap_hwmod_class omap2_venc_hwmod_class; extern struct omap_hwmod_class omap2_hdq1w_class; -extern struct omap_hwmod_class omap2xxx_gpio_hwmod_class; -extern struct omap_hwmod_class omap2xxx_mailbox_hwmod_class; -extern struct omap_hwmod_class omap2xxx_mcspi_class; - extern struct omap_dss_dispc_dev_attr omap2_3_dss_dispc_dev_attr; #endif diff --git a/arch/arm/mach-omap2/opp2420_data.c b/arch/arm/mach-omap2/opp2420_data.c deleted file mode 100644 index 18a448f938ea..000000000000 --- a/arch/arm/mach-omap2/opp2420_data.c +++ /dev/null @@ -1,131 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * opp2420_data.c - old-style "OPP" table for OMAP2420 - * - * Copyright (C) 2005-2009 Texas Instruments, Inc. - * Copyright (C) 2004-2009 Nokia Corporation - * - * Richard Woodruff - * - * The OMAP2 processor can be run at several discrete 'PRCM configurations'. - * These configurations are characterized by voltage and speed for clocks. - * The device is only validated for certain combinations. One way to express - * these combinations is via the 'ratios' which the clocks operate with - * respect to each other. These ratio sets are for a given voltage/DPLL - * setting. All configurations can be described by a DPLL setting and a ratio. - * - * XXX Missing voltage data. - * XXX Missing 19.2MHz sys_clk rate sets (needed for N800/N810) - * - * THe format described in this file is deprecated. Once a reasonable - * OPP API exists, the data in this file should be converted to use it. - * - * This is technically part of the OMAP2xxx clock code. - * - * Considerable work is still needed to fully support dynamic frequency - * changes on OMAP2xxx-series chips. Readers interested in such a - * project are encouraged to review the Maemo Diablo RX-34 and RX-44 - * kernel source at: - * http://repository.maemo.org/pool/diablo/free/k/kernel-source-diablo/ - */ - -#include - -#include "opp2xxx.h" -#include "sdrc.h" -#include "clock.h" - -/* - * Key dividers which make up a PRCM set. Ratios for a PRCM are mandated. - * xtal_speed, dpll_speed, mpu_speed, CM_CLKSEL_MPU, - * CM_CLKSEL_DSP, CM_CLKSEL_GFX, CM_CLKSEL1_CORE, CM_CLKSEL1_PLL, - * CM_CLKSEL2_PLL, CM_CLKSEL_MDM - * - * Filling in table based on H4 boards available. There are quite a - * few more rate combinations which could be defined. - * - * When multiple values are defined the start up will try and choose - * the fastest one. If a 'fast' value is defined, then automatically, - * the /2 one should be included as it can be used. Generally having - * more than one fast set does not make sense, as static timings need - * to be changed to change the set. The exception is the bypass - * setting which is available for low power bypass. - * - * Note: This table needs to be sorted, fastest to slowest. - **/ -const struct prcm_config omap2420_rate_table[] = { - /* PRCM I - FAST */ - {S12M, S660M, S330M, RI_CM_CLKSEL_MPU_VAL, /* 330MHz ARM */ - RI_CM_CLKSEL_DSP_VAL, RI_CM_CLKSEL_GFX_VAL, - RI_CM_CLKSEL1_CORE_VAL, MI_CM_CLKSEL1_PLL_12_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_165MHz, - RATE_IN_242X}, - - /* PRCM II - FAST */ - {S12M, S600M, S300M, RII_CM_CLKSEL_MPU_VAL, /* 300MHz ARM */ - RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL, - RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_12_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_100MHz, - RATE_IN_242X}, - - {S13M, S600M, S300M, RII_CM_CLKSEL_MPU_VAL, /* 300MHz ARM */ - RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL, - RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_100MHz, - RATE_IN_242X}, - - /* PRCM III - FAST */ - {S12M, S532M, S266M, RIII_CM_CLKSEL_MPU_VAL, /* 266MHz ARM */ - RIII_CM_CLKSEL_DSP_VAL, RIII_CM_CLKSEL_GFX_VAL, - RIII_CM_CLKSEL1_CORE_VAL, MIII_CM_CLKSEL1_PLL_12_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_133MHz, - RATE_IN_242X}, - - {S13M, S532M, S266M, RIII_CM_CLKSEL_MPU_VAL, /* 266MHz ARM */ - RIII_CM_CLKSEL_DSP_VAL, RIII_CM_CLKSEL_GFX_VAL, - RIII_CM_CLKSEL1_CORE_VAL, MIII_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_133MHz, - RATE_IN_242X}, - - /* PRCM II - SLOW */ - {S12M, S300M, S150M, RII_CM_CLKSEL_MPU_VAL, /* 150MHz ARM */ - RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL, - RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_12_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_100MHz, - RATE_IN_242X}, - - {S13M, S300M, S150M, RII_CM_CLKSEL_MPU_VAL, /* 150MHz ARM */ - RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL, - RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_100MHz, - RATE_IN_242X}, - - /* PRCM III - SLOW */ - {S12M, S266M, S133M, RIII_CM_CLKSEL_MPU_VAL, /* 133MHz ARM */ - RIII_CM_CLKSEL_DSP_VAL, RIII_CM_CLKSEL_GFX_VAL, - RIII_CM_CLKSEL1_CORE_VAL, MIII_CM_CLKSEL1_PLL_12_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_133MHz, - RATE_IN_242X}, - - {S13M, S266M, S133M, RIII_CM_CLKSEL_MPU_VAL, /* 133MHz ARM */ - RIII_CM_CLKSEL_DSP_VAL, RIII_CM_CLKSEL_GFX_VAL, - RIII_CM_CLKSEL1_CORE_VAL, MIII_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_133MHz, - RATE_IN_242X}, - - /* PRCM-VII (boot-bypass) */ - {S12M, S12M, S12M, RVII_CM_CLKSEL_MPU_VAL, /* 12MHz ARM*/ - RVII_CM_CLKSEL_DSP_VAL, RVII_CM_CLKSEL_GFX_VAL, - RVII_CM_CLKSEL1_CORE_VAL, MVII_CM_CLKSEL1_PLL_12_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_BYPASS, - RATE_IN_242X}, - - /* PRCM-VII (boot-bypass) */ - {S13M, S13M, S13M, RVII_CM_CLKSEL_MPU_VAL, /* 13MHz ARM */ - RVII_CM_CLKSEL_DSP_VAL, RVII_CM_CLKSEL_GFX_VAL, - RVII_CM_CLKSEL1_CORE_VAL, MVII_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, 0, SDRC_RFR_CTRL_BYPASS, - RATE_IN_242X}, - - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -}; diff --git a/arch/arm/mach-omap2/opp2430_data.c b/arch/arm/mach-omap2/opp2430_data.c deleted file mode 100644 index ded8b566a23a..000000000000 --- a/arch/arm/mach-omap2/opp2430_data.c +++ /dev/null @@ -1,136 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * opp2430_data.c - old-style "OPP" table for OMAP2430 - * - * Copyright (C) 2005-2009 Texas Instruments, Inc. - * Copyright (C) 2004-2009 Nokia Corporation - * - * Richard Woodruff - * - * The OMAP2 processor can be run at several discrete 'PRCM configurations'. - * These configurations are characterized by voltage and speed for clocks. - * The device is only validated for certain combinations. One way to express - * these combinations is via the 'ratios' which the clocks operate with - * respect to each other. These ratio sets are for a given voltage/DPLL - * setting. All configurations can be described by a DPLL setting and a ratio. - * - * 2430 differs from 2420 in that there are no more phase synchronizers used. - * They both have a slightly different clock domain setup. 2420(iva1,dsp) vs - * 2430 (iva2.1, NOdsp, mdm) - * - * XXX Missing voltage data. - * XXX Missing 19.2MHz sys_clk rate sets. - * - * THe format described in this file is deprecated. Once a reasonable - * OPP API exists, the data in this file should be converted to use it. - * - * This is technically part of the OMAP2xxx clock code. - */ - -#include - -#include "opp2xxx.h" -#include "sdrc.h" -#include "clock.h" - -/* - * Key dividers which make up a PRCM set. Ratios for a PRCM are mandated. - * xtal_speed, dpll_speed, mpu_speed, CM_CLKSEL_MPU, - * CM_CLKSEL_DSP, CM_CLKSEL_GFX, CM_CLKSEL1_CORE, CM_CLKSEL1_PLL, - * CM_CLKSEL2_PLL, CM_CLKSEL_MDM - * - * Filling in table based on 2430-SDPs variants available. There are - * quite a few more rate combinations which could be defined. - * - * When multiple values are defined the start up will try and choose - * the fastest one. If a 'fast' value is defined, then automatically, - * the /2 one should be included as it can be used. Generally having - * more than one fast set does not make sense, as static timings need - * to be changed to change the set. The exception is the bypass - * setting which is available for low power bypass. - * - * Note: This table needs to be sorted, fastest to slowest. - */ -const struct prcm_config omap2430_rate_table[] = { - /* PRCM #4 - ratio2 (ES2.1) - FAST */ - {S13M, S798M, S399M, R2_CM_CLKSEL_MPU_VAL, /* 399MHz ARM */ - R2_CM_CLKSEL_DSP_VAL, R2_CM_CLKSEL_GFX_VAL, - R2_CM_CLKSEL1_CORE_VAL, M4_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, R2_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_133MHz, - RATE_IN_243X}, - - /* PRCM #2 - ratio1 (ES2) - FAST */ - {S13M, S658M, S329M, R1_CM_CLKSEL_MPU_VAL, /* 330MHz ARM */ - R1_CM_CLKSEL_DSP_VAL, R1_CM_CLKSEL_GFX_VAL, - R1_CM_CLKSEL1_CORE_VAL, M2_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, R1_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_165MHz, - RATE_IN_243X}, - - /* PRCM #5a - ratio1 - FAST */ - {S13M, S532M, S266M, R1_CM_CLKSEL_MPU_VAL, /* 266MHz ARM */ - R1_CM_CLKSEL_DSP_VAL, R1_CM_CLKSEL_GFX_VAL, - R1_CM_CLKSEL1_CORE_VAL, M5A_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, R1_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_133MHz, - RATE_IN_243X}, - - /* PRCM #5b - ratio1 - FAST */ - {S13M, S400M, S200M, R1_CM_CLKSEL_MPU_VAL, /* 200MHz ARM */ - R1_CM_CLKSEL_DSP_VAL, R1_CM_CLKSEL_GFX_VAL, - R1_CM_CLKSEL1_CORE_VAL, M5B_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, R1_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_100MHz, - RATE_IN_243X}, - - /* PRCM #4 - ratio1 (ES2.1) - SLOW */ - {S13M, S399M, S199M, R2_CM_CLKSEL_MPU_VAL, /* 200MHz ARM */ - R2_CM_CLKSEL_DSP_VAL, R2_CM_CLKSEL_GFX_VAL, - R2_CM_CLKSEL1_CORE_VAL, M4_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_1x_VAL, R2_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_133MHz, - RATE_IN_243X}, - - /* PRCM #2 - ratio1 (ES2) - SLOW */ - {S13M, S329M, S164M, R1_CM_CLKSEL_MPU_VAL, /* 165MHz ARM */ - R1_CM_CLKSEL_DSP_VAL, R1_CM_CLKSEL_GFX_VAL, - R1_CM_CLKSEL1_CORE_VAL, M2_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_1x_VAL, R1_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_165MHz, - RATE_IN_243X}, - - /* PRCM #5a - ratio1 - SLOW */ - {S13M, S266M, S133M, R1_CM_CLKSEL_MPU_VAL, /* 133MHz ARM */ - R1_CM_CLKSEL_DSP_VAL, R1_CM_CLKSEL_GFX_VAL, - R1_CM_CLKSEL1_CORE_VAL, M5A_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_1x_VAL, R1_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_133MHz, - RATE_IN_243X}, - - /* PRCM #5b - ratio1 - SLOW*/ - {S13M, S200M, S100M, R1_CM_CLKSEL_MPU_VAL, /* 100MHz ARM */ - R1_CM_CLKSEL_DSP_VAL, R1_CM_CLKSEL_GFX_VAL, - R1_CM_CLKSEL1_CORE_VAL, M5B_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_1x_VAL, R1_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_100MHz, - RATE_IN_243X}, - - /* PRCM-boot/bypass */ - {S13M, S13M, S13M, RB_CM_CLKSEL_MPU_VAL, /* 13MHz */ - RB_CM_CLKSEL_DSP_VAL, RB_CM_CLKSEL_GFX_VAL, - RB_CM_CLKSEL1_CORE_VAL, MB_CM_CLKSEL1_PLL_13_VAL, - MX_CLKSEL2_PLL_2x_VAL, RB_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_BYPASS, - RATE_IN_243X}, - - /* PRCM-boot/bypass */ - {S12M, S12M, S12M, RB_CM_CLKSEL_MPU_VAL, /* 12MHz */ - RB_CM_CLKSEL_DSP_VAL, RB_CM_CLKSEL_GFX_VAL, - RB_CM_CLKSEL1_CORE_VAL, MB_CM_CLKSEL1_PLL_12_VAL, - MX_CLKSEL2_PLL_2x_VAL, RB_CM_CLKSEL_MDM_VAL, - SDRC_RFR_CTRL_BYPASS, - RATE_IN_243X}, - - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -}; diff --git a/arch/arm/mach-omap2/opp2xxx.h b/arch/arm/mach-omap2/opp2xxx.h deleted file mode 100644 index a451182cdc02..000000000000 --- a/arch/arm/mach-omap2/opp2xxx.h +++ /dev/null @@ -1,430 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * opp2xxx.h - macros for old-style OMAP2xxx "OPP" definitions - * - * Copyright (C) 2005-2009 Texas Instruments, Inc. - * Copyright (C) 2004-2009 Nokia Corporation - * - * Richard Woodruff - * - * The OMAP2 processor can be run at several discrete 'PRCM configurations'. - * These configurations are characterized by voltage and speed for clocks. - * The device is only validated for certain combinations. One way to express - * these combinations is via the 'ratio's' which the clocks operate with - * respect to each other. These ratio sets are for a given voltage/DPLL - * setting. All configurations can be described by a DPLL setting and a ratio - * There are 3 ratio sets for the 2430 and X ratio sets for 2420. - * - * 2430 differs from 2420 in that there are no more phase synchronizers used. - * They both have a slightly different clock domain setup. 2420(iva1,dsp) vs - * 2430 (iva2.1, NOdsp, mdm) - * - * XXX Missing voltage data. - * - * THe format described in this file is deprecated. Once a reasonable - * OPP API exists, the data in this file should be converted to use it. - * - * This is technically part of the OMAP2xxx clock code. - */ - -#ifndef __ARCH_ARM_MACH_OMAP2_OPP2XXX_H -#define __ARCH_ARM_MACH_OMAP2_OPP2XXX_H - -/** - * struct prcm_config - define clock rates on a per-OPP basis (24xx) - * - * Key dividers which make up a PRCM set. Ratio's for a PRCM are mandated. - * xtal_speed, dpll_speed, mpu_speed, CM_CLKSEL_MPU,CM_CLKSEL_DSP - * CM_CLKSEL_GFX, CM_CLKSEL1_CORE, CM_CLKSEL1_PLL CM_CLKSEL2_PLL, CM_CLKSEL_MDM - * - * This is deprecated. As soon as we have a decent OPP API, we should - * move all this stuff to it. - */ -struct prcm_config { - unsigned long xtal_speed; /* crystal rate */ - unsigned long dpll_speed; /* dpll: out*xtal*M/(N-1)table_recalc */ - unsigned long mpu_speed; /* speed of MPU */ - unsigned long cm_clksel_mpu; /* mpu divider */ - unsigned long cm_clksel_dsp; /* dsp+iva1 div(2420), iva2.1(2430) */ - unsigned long cm_clksel_gfx; /* gfx dividers */ - unsigned long cm_clksel1_core; /* major subsystem dividers */ - unsigned long cm_clksel1_pll; /* m,n */ - unsigned long cm_clksel2_pll; /* dpllx1 or x2 out */ - unsigned long cm_clksel_mdm; /* modem dividers 2430 only */ - unsigned long base_sdrc_rfr; /* base refresh timing for a set */ - unsigned short flags; -}; - - -/* Core fields for cm_clksel, not ratio governed */ -#define RX_CLKSEL_DSS1 (0x10 << 8) -#define RX_CLKSEL_DSS2 (0x0 << 13) -#define RX_CLKSEL_SSI (0x5 << 20) - -/*------------------------------------------------------------------------- - * Voltage/DPLL ratios - *-------------------------------------------------------------------------*/ - -/* 2430 Ratio's, 2430-Ratio Config 1 */ -#define R1_CLKSEL_L3 (4 << 0) -#define R1_CLKSEL_L4 (2 << 5) -#define R1_CLKSEL_USB (4 << 25) -#define R1_CM_CLKSEL1_CORE_VAL (R1_CLKSEL_USB | RX_CLKSEL_SSI | \ - RX_CLKSEL_DSS2 | RX_CLKSEL_DSS1 | \ - R1_CLKSEL_L4 | R1_CLKSEL_L3) -#define R1_CLKSEL_MPU (2 << 0) -#define R1_CM_CLKSEL_MPU_VAL R1_CLKSEL_MPU -#define R1_CLKSEL_DSP (2 << 0) -#define R1_CLKSEL_DSP_IF (2 << 5) -#define R1_CM_CLKSEL_DSP_VAL (R1_CLKSEL_DSP | R1_CLKSEL_DSP_IF) -#define R1_CLKSEL_GFX (2 << 0) -#define R1_CM_CLKSEL_GFX_VAL R1_CLKSEL_GFX -#define R1_CLKSEL_MDM (4 << 0) -#define R1_CM_CLKSEL_MDM_VAL R1_CLKSEL_MDM - -/* 2430-Ratio Config 2 */ -#define R2_CLKSEL_L3 (6 << 0) -#define R2_CLKSEL_L4 (2 << 5) -#define R2_CLKSEL_USB (2 << 25) -#define R2_CM_CLKSEL1_CORE_VAL (R2_CLKSEL_USB | RX_CLKSEL_SSI | \ - RX_CLKSEL_DSS2 | RX_CLKSEL_DSS1 | \ - R2_CLKSEL_L4 | R2_CLKSEL_L3) -#define R2_CLKSEL_MPU (2 << 0) -#define R2_CM_CLKSEL_MPU_VAL R2_CLKSEL_MPU -#define R2_CLKSEL_DSP (2 << 0) -#define R2_CLKSEL_DSP_IF (3 << 5) -#define R2_CM_CLKSEL_DSP_VAL (R2_CLKSEL_DSP | R2_CLKSEL_DSP_IF) -#define R2_CLKSEL_GFX (2 << 0) -#define R2_CM_CLKSEL_GFX_VAL R2_CLKSEL_GFX -#define R2_CLKSEL_MDM (6 << 0) -#define R2_CM_CLKSEL_MDM_VAL R2_CLKSEL_MDM - -/* 2430-Ratio Bootm (BYPASS) */ -#define RB_CLKSEL_L3 (1 << 0) -#define RB_CLKSEL_L4 (1 << 5) -#define RB_CLKSEL_USB (1 << 25) -#define RB_CM_CLKSEL1_CORE_VAL (RB_CLKSEL_USB | RX_CLKSEL_SSI | \ - RX_CLKSEL_DSS2 | RX_CLKSEL_DSS1 | \ - RB_CLKSEL_L4 | RB_CLKSEL_L3) -#define RB_CLKSEL_MPU (1 << 0) -#define RB_CM_CLKSEL_MPU_VAL RB_CLKSEL_MPU -#define RB_CLKSEL_DSP (1 << 0) -#define RB_CLKSEL_DSP_IF (1 << 5) -#define RB_CM_CLKSEL_DSP_VAL (RB_CLKSEL_DSP | RB_CLKSEL_DSP_IF) -#define RB_CLKSEL_GFX (1 << 0) -#define RB_CM_CLKSEL_GFX_VAL RB_CLKSEL_GFX -#define RB_CLKSEL_MDM (1 << 0) -#define RB_CM_CLKSEL_MDM_VAL RB_CLKSEL_MDM - -/* 2420 Ratio Equivalents */ -#define RXX_CLKSEL_VLYNQ (0x12 << 15) -#define RXX_CLKSEL_SSI (0x8 << 20) - -/* 2420-PRCM III 532MHz core */ -#define RIII_CLKSEL_L3 (4 << 0) /* 133MHz */ -#define RIII_CLKSEL_L4 (2 << 5) /* 66.5MHz */ -#define RIII_CLKSEL_USB (4 << 25) /* 33.25MHz */ -#define RIII_CM_CLKSEL1_CORE_VAL (RIII_CLKSEL_USB | RXX_CLKSEL_SSI | \ - RXX_CLKSEL_VLYNQ | RX_CLKSEL_DSS2 | \ - RX_CLKSEL_DSS1 | RIII_CLKSEL_L4 | \ - RIII_CLKSEL_L3) -#define RIII_CLKSEL_MPU (2 << 0) /* 266MHz */ -#define RIII_CM_CLKSEL_MPU_VAL RIII_CLKSEL_MPU -#define RIII_CLKSEL_DSP (3 << 0) /* c5x - 177.3MHz */ -#define RIII_CLKSEL_DSP_IF (2 << 5) /* c5x - 88.67MHz */ -#define RIII_SYNC_DSP (1 << 7) /* Enable sync */ -#define RIII_CLKSEL_IVA (6 << 8) /* iva1 - 88.67MHz */ -#define RIII_SYNC_IVA (1 << 13) /* Enable sync */ -#define RIII_CM_CLKSEL_DSP_VAL (RIII_SYNC_IVA | RIII_CLKSEL_IVA | \ - RIII_SYNC_DSP | RIII_CLKSEL_DSP_IF | \ - RIII_CLKSEL_DSP) -#define RIII_CLKSEL_GFX (2 << 0) /* 66.5MHz */ -#define RIII_CM_CLKSEL_GFX_VAL RIII_CLKSEL_GFX - -/* 2420-PRCM II 600MHz core */ -#define RII_CLKSEL_L3 (6 << 0) /* 100MHz */ -#define RII_CLKSEL_L4 (2 << 5) /* 50MHz */ -#define RII_CLKSEL_USB (2 << 25) /* 50MHz */ -#define RII_CM_CLKSEL1_CORE_VAL (RII_CLKSEL_USB | RXX_CLKSEL_SSI | \ - RXX_CLKSEL_VLYNQ | RX_CLKSEL_DSS2 | \ - RX_CLKSEL_DSS1 | RII_CLKSEL_L4 | \ - RII_CLKSEL_L3) -#define RII_CLKSEL_MPU (2 << 0) /* 300MHz */ -#define RII_CM_CLKSEL_MPU_VAL RII_CLKSEL_MPU -#define RII_CLKSEL_DSP (3 << 0) /* c5x - 200MHz */ -#define RII_CLKSEL_DSP_IF (2 << 5) /* c5x - 100MHz */ -#define RII_SYNC_DSP (0 << 7) /* Bypass sync */ -#define RII_CLKSEL_IVA (3 << 8) /* iva1 - 200MHz */ -#define RII_SYNC_IVA (0 << 13) /* Bypass sync */ -#define RII_CM_CLKSEL_DSP_VAL (RII_SYNC_IVA | RII_CLKSEL_IVA | \ - RII_SYNC_DSP | RII_CLKSEL_DSP_IF | \ - RII_CLKSEL_DSP) -#define RII_CLKSEL_GFX (2 << 0) /* 50MHz */ -#define RII_CM_CLKSEL_GFX_VAL RII_CLKSEL_GFX - -/* 2420-PRCM I 660MHz core */ -#define RI_CLKSEL_L3 (4 << 0) /* 165MHz */ -#define RI_CLKSEL_L4 (2 << 5) /* 82.5MHz */ -#define RI_CLKSEL_USB (4 << 25) /* 41.25MHz */ -#define RI_CM_CLKSEL1_CORE_VAL (RI_CLKSEL_USB | \ - RXX_CLKSEL_SSI | RXX_CLKSEL_VLYNQ | \ - RX_CLKSEL_DSS2 | RX_CLKSEL_DSS1 | \ - RI_CLKSEL_L4 | RI_CLKSEL_L3) -#define RI_CLKSEL_MPU (2 << 0) /* 330MHz */ -#define RI_CM_CLKSEL_MPU_VAL RI_CLKSEL_MPU -#define RI_CLKSEL_DSP (3 << 0) /* c5x - 220MHz */ -#define RI_CLKSEL_DSP_IF (2 << 5) /* c5x - 110MHz */ -#define RI_SYNC_DSP (1 << 7) /* Activate sync */ -#define RI_CLKSEL_IVA (4 << 8) /* iva1 - 165MHz */ -#define RI_SYNC_IVA (0 << 13) /* Bypass sync */ -#define RI_CM_CLKSEL_DSP_VAL (RI_SYNC_IVA | RI_CLKSEL_IVA | \ - RI_SYNC_DSP | RI_CLKSEL_DSP_IF | \ - RI_CLKSEL_DSP) -#define RI_CLKSEL_GFX (1 << 0) /* 165MHz */ -#define RI_CM_CLKSEL_GFX_VAL RI_CLKSEL_GFX - -/* 2420-PRCM VII (boot) */ -#define RVII_CLKSEL_L3 (1 << 0) -#define RVII_CLKSEL_L4 (1 << 5) -#define RVII_CLKSEL_DSS1 (1 << 8) -#define RVII_CLKSEL_DSS2 (0 << 13) -#define RVII_CLKSEL_VLYNQ (1 << 15) -#define RVII_CLKSEL_SSI (1 << 20) -#define RVII_CLKSEL_USB (1 << 25) - -#define RVII_CM_CLKSEL1_CORE_VAL (RVII_CLKSEL_USB | RVII_CLKSEL_SSI | \ - RVII_CLKSEL_VLYNQ | \ - RVII_CLKSEL_DSS2 | RVII_CLKSEL_DSS1 | \ - RVII_CLKSEL_L4 | RVII_CLKSEL_L3) - -#define RVII_CLKSEL_MPU (1 << 0) /* all divide by 1 */ -#define RVII_CM_CLKSEL_MPU_VAL RVII_CLKSEL_MPU - -#define RVII_CLKSEL_DSP (1 << 0) -#define RVII_CLKSEL_DSP_IF (1 << 5) -#define RVII_SYNC_DSP (0 << 7) -#define RVII_CLKSEL_IVA (1 << 8) -#define RVII_SYNC_IVA (0 << 13) -#define RVII_CM_CLKSEL_DSP_VAL (RVII_SYNC_IVA | RVII_CLKSEL_IVA | \ - RVII_SYNC_DSP | RVII_CLKSEL_DSP_IF | \ - RVII_CLKSEL_DSP) - -#define RVII_CLKSEL_GFX (1 << 0) -#define RVII_CM_CLKSEL_GFX_VAL RVII_CLKSEL_GFX - -/*------------------------------------------------------------------------- - * 2430 Target modes: Along with each configuration the CPU has several - * modes which goes along with them. Modes mainly are the addition of - * describe DPLL combinations to go along with a ratio. - *-------------------------------------------------------------------------*/ - -/* Hardware governed */ -#define MX_48M_SRC (0 << 3) -#define MX_54M_SRC (0 << 5) -#define MX_APLLS_CLIKIN_12 (3 << 23) -#define MX_APLLS_CLIKIN_13 (2 << 23) -#define MX_APLLS_CLIKIN_19_2 (0 << 23) - -/* - * 2430 - standalone, 2*ref*M/(n+1), M/N is for exactness not relock speed - * #5a (ratio1) baseport-target, target DPLL = 266*2 = 532MHz - */ -#define M5A_DPLL_MULT_12 (133 << 12) -#define M5A_DPLL_DIV_12 (5 << 8) -#define M5A_CM_CLKSEL1_PLL_12_VAL (MX_48M_SRC | MX_54M_SRC | \ - M5A_DPLL_DIV_12 | M5A_DPLL_MULT_12 | \ - MX_APLLS_CLIKIN_12) -#define M5A_DPLL_MULT_13 (61 << 12) -#define M5A_DPLL_DIV_13 (2 << 8) -#define M5A_CM_CLKSEL1_PLL_13_VAL (MX_48M_SRC | MX_54M_SRC | \ - M5A_DPLL_DIV_13 | M5A_DPLL_MULT_13 | \ - MX_APLLS_CLIKIN_13) -#define M5A_DPLL_MULT_19 (55 << 12) -#define M5A_DPLL_DIV_19 (3 << 8) -#define M5A_CM_CLKSEL1_PLL_19_VAL (MX_48M_SRC | MX_54M_SRC | \ - M5A_DPLL_DIV_19 | M5A_DPLL_MULT_19 | \ - MX_APLLS_CLIKIN_19_2) -/* #5b (ratio1) target DPLL = 200*2 = 400MHz */ -#define M5B_DPLL_MULT_12 (50 << 12) -#define M5B_DPLL_DIV_12 (2 << 8) -#define M5B_CM_CLKSEL1_PLL_12_VAL (MX_48M_SRC | MX_54M_SRC | \ - M5B_DPLL_DIV_12 | M5B_DPLL_MULT_12 | \ - MX_APLLS_CLIKIN_12) -#define M5B_DPLL_MULT_13 (200 << 12) -#define M5B_DPLL_DIV_13 (12 << 8) - -#define M5B_CM_CLKSEL1_PLL_13_VAL (MX_48M_SRC | MX_54M_SRC | \ - M5B_DPLL_DIV_13 | M5B_DPLL_MULT_13 | \ - MX_APLLS_CLIKIN_13) -#define M5B_DPLL_MULT_19 (125 << 12) -#define M5B_DPLL_DIV_19 (31 << 8) -#define M5B_CM_CLKSEL1_PLL_19_VAL (MX_48M_SRC | MX_54M_SRC | \ - M5B_DPLL_DIV_19 | M5B_DPLL_MULT_19 | \ - MX_APLLS_CLIKIN_19_2) -/* - * #4 (ratio2), DPLL = 399*2 = 798MHz, L3=133MHz - */ -#define M4_DPLL_MULT_12 (133 << 12) -#define M4_DPLL_DIV_12 (3 << 8) -#define M4_CM_CLKSEL1_PLL_12_VAL (MX_48M_SRC | MX_54M_SRC | \ - M4_DPLL_DIV_12 | M4_DPLL_MULT_12 | \ - MX_APLLS_CLIKIN_12) - -#define M4_DPLL_MULT_13 (399 << 12) -#define M4_DPLL_DIV_13 (12 << 8) -#define M4_CM_CLKSEL1_PLL_13_VAL (MX_48M_SRC | MX_54M_SRC | \ - M4_DPLL_DIV_13 | M4_DPLL_MULT_13 | \ - MX_APLLS_CLIKIN_13) - -#define M4_DPLL_MULT_19 (145 << 12) -#define M4_DPLL_DIV_19 (6 << 8) -#define M4_CM_CLKSEL1_PLL_19_VAL (MX_48M_SRC | MX_54M_SRC | \ - M4_DPLL_DIV_19 | M4_DPLL_MULT_19 | \ - MX_APLLS_CLIKIN_19_2) - -/* - * #3 (ratio2) baseport-target, target DPLL = 330*2 = 660MHz - */ -#define M3_DPLL_MULT_12 (55 << 12) -#define M3_DPLL_DIV_12 (1 << 8) -#define M3_CM_CLKSEL1_PLL_12_VAL (MX_48M_SRC | MX_54M_SRC | \ - M3_DPLL_DIV_12 | M3_DPLL_MULT_12 | \ - MX_APLLS_CLIKIN_12) -#define M3_DPLL_MULT_13 (76 << 12) -#define M3_DPLL_DIV_13 (2 << 8) -#define M3_CM_CLKSEL1_PLL_13_VAL (MX_48M_SRC | MX_54M_SRC | \ - M3_DPLL_DIV_13 | M3_DPLL_MULT_13 | \ - MX_APLLS_CLIKIN_13) -#define M3_DPLL_MULT_19 (17 << 12) -#define M3_DPLL_DIV_19 (0 << 8) -#define M3_CM_CLKSEL1_PLL_19_VAL (MX_48M_SRC | MX_54M_SRC | \ - M3_DPLL_DIV_19 | M3_DPLL_MULT_19 | \ - MX_APLLS_CLIKIN_19_2) - -/* - * #2 (ratio1) DPLL = 330*2 = 660MHz, L3=165MHz - */ -#define M2_DPLL_MULT_12 (55 << 12) -#define M2_DPLL_DIV_12 (1 << 8) -#define M2_CM_CLKSEL1_PLL_12_VAL (MX_48M_SRC | MX_54M_SRC | \ - M2_DPLL_DIV_12 | M2_DPLL_MULT_12 | \ - MX_APLLS_CLIKIN_12) - -/* Speed changes - Used 658.7MHz instead of 660MHz for LP-Refresh M=76 N=2, - * relock time issue */ -/* Core frequency changed from 330/165 to 329/164 MHz*/ -#define M2_DPLL_MULT_13 (76 << 12) -#define M2_DPLL_DIV_13 (2 << 8) -#define M2_CM_CLKSEL1_PLL_13_VAL (MX_48M_SRC | MX_54M_SRC | \ - M2_DPLL_DIV_13 | M2_DPLL_MULT_13 | \ - MX_APLLS_CLIKIN_13) - -#define M2_DPLL_MULT_19 (17 << 12) -#define M2_DPLL_DIV_19 (0 << 8) -#define M2_CM_CLKSEL1_PLL_19_VAL (MX_48M_SRC | MX_54M_SRC | \ - M2_DPLL_DIV_19 | M2_DPLL_MULT_19 | \ - MX_APLLS_CLIKIN_19_2) - -/* boot (boot) */ -#define MB_DPLL_MULT (1 << 12) -#define MB_DPLL_DIV (0 << 8) -#define MB_CM_CLKSEL1_PLL_12_VAL (MX_48M_SRC | MX_54M_SRC | \ - MB_DPLL_DIV | MB_DPLL_MULT | \ - MX_APLLS_CLIKIN_12) - -#define MB_CM_CLKSEL1_PLL_13_VAL (MX_48M_SRC | MX_54M_SRC | \ - MB_DPLL_DIV | MB_DPLL_MULT | \ - MX_APLLS_CLIKIN_13) - -#define MB_CM_CLKSEL1_PLL_19_VAL (MX_48M_SRC | MX_54M_SRC | \ - MB_DPLL_DIV | MB_DPLL_MULT | \ - MX_APLLS_CLIKIN_19) - -/* - * 2430 - chassis (sedna) - * 165 (ratio1) same as above #2 - * 150 (ratio1) - * 133 (ratio2) same as above #4 - * 110 (ratio2) same as above #3 - * 104 (ratio2) - * boot (boot) - */ - -/* PRCM I target DPLL = 2*330MHz = 660MHz */ -#define MI_DPLL_MULT_12 (55 << 12) -#define MI_DPLL_DIV_12 (1 << 8) -#define MI_CM_CLKSEL1_PLL_12_VAL (MX_48M_SRC | MX_54M_SRC | \ - MI_DPLL_DIV_12 | MI_DPLL_MULT_12 | \ - MX_APLLS_CLIKIN_12) - -/* - * 2420 Equivalent - mode registers - * PRCM II , target DPLL = 2*300MHz = 600MHz - */ -#define MII_DPLL_MULT_12 (50 << 12) -#define MII_DPLL_DIV_12 (1 << 8) -#define MII_CM_CLKSEL1_PLL_12_VAL (MX_48M_SRC | MX_54M_SRC | \ - MII_DPLL_DIV_12 | MII_DPLL_MULT_12 | \ - MX_APLLS_CLIKIN_12) -#define MII_DPLL_MULT_13 (300 << 12) -#define MII_DPLL_DIV_13 (12 << 8) -#define MII_CM_CLKSEL1_PLL_13_VAL (MX_48M_SRC | MX_54M_SRC | \ - MII_DPLL_DIV_13 | MII_DPLL_MULT_13 | \ - MX_APLLS_CLIKIN_13) - -/* PRCM III target DPLL = 2*266 = 532MHz*/ -#define MIII_DPLL_MULT_12 (133 << 12) -#define MIII_DPLL_DIV_12 (5 << 8) -#define MIII_CM_CLKSEL1_PLL_12_VAL (MX_48M_SRC | MX_54M_SRC | \ - MIII_DPLL_DIV_12 | \ - MIII_DPLL_MULT_12 | MX_APLLS_CLIKIN_12) -#define MIII_DPLL_MULT_13 (266 << 12) -#define MIII_DPLL_DIV_13 (12 << 8) -#define MIII_CM_CLKSEL1_PLL_13_VAL (MX_48M_SRC | MX_54M_SRC | \ - MIII_DPLL_DIV_13 | \ - MIII_DPLL_MULT_13 | MX_APLLS_CLIKIN_13) - -/* PRCM VII (boot bypass) */ -#define MVII_CM_CLKSEL1_PLL_12_VAL MB_CM_CLKSEL1_PLL_12_VAL -#define MVII_CM_CLKSEL1_PLL_13_VAL MB_CM_CLKSEL1_PLL_13_VAL - -/* High and low operation value */ -#define MX_CLKSEL2_PLL_2x_VAL (2 << 0) -#define MX_CLKSEL2_PLL_1x_VAL (1 << 0) - -/* MPU speed defines */ -#define S12M 12000000 -#define S13M 13000000 -#define S19M 19200000 -#define S26M 26000000 -#define S100M 100000000 -#define S133M 133000000 -#define S150M 150000000 -#define S164M 164000000 -#define S165M 165000000 -#define S199M 199000000 -#define S200M 200000000 -#define S266M 266000000 -#define S300M 300000000 -#define S329M 329000000 -#define S330M 330000000 -#define S399M 399000000 -#define S400M 400000000 -#define S532M 532000000 -#define S600M 600000000 -#define S658M 658000000 -#define S660M 660000000 -#define S798M 798000000 - - -extern const struct prcm_config omap2420_rate_table[]; - -#ifdef CONFIG_SOC_OMAP2430 -extern const struct prcm_config omap2430_rate_table[]; -#else -#define omap2430_rate_table NULL -#endif -extern const struct prcm_config *rate_table; -extern const struct prcm_config *curr_prcm_set; - -#endif diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c index b947bacf23a3..8b8021b297aa 100644 --- a/arch/arm/mach-omap2/pdata-quirks.c +++ b/arch/arm/mach-omap2/pdata-quirks.c @@ -27,7 +27,6 @@ #include "clockdomain.h" #include "common.h" -#include "common-board-devices.h" #include "control.h" #include "omap_device.h" #include "omap-secure.h" @@ -42,15 +41,6 @@ struct pdata_init { static struct of_dev_auxdata omap_auxdata_lookup[]; -#ifdef CONFIG_MACH_NOKIA_N8X0 -static void __init omap2420_n8x0_legacy_init(void) -{ - omap_auxdata_lookup[0].platform_data = n8x0_legacy_init(); -} -#else -#define omap2420_n8x0_legacy_init NULL -#endif - #ifdef CONFIG_ARCH_OMAP3 /* * Configures GPIOs 126, 127 and 129 to 1.8V mode instead of 3.0V @@ -431,26 +421,9 @@ static void __init omap3_mcbsp_init(void) static void __init omap3_mcbsp_init(void) {} #endif -/* - * Few boards still need auxdata populated before we populate - * the dev entries in of_platform_populate(). - */ -static struct pdata_init auxdata_quirks[] __initdata = { -#ifdef CONFIG_SOC_OMAP2420 - { "nokia,n800", omap2420_n8x0_legacy_init, }, - { "nokia,n810", omap2420_n8x0_legacy_init, }, - { "nokia,n810-wimax", omap2420_n8x0_legacy_init, }, -#endif - { /* sentinel */ }, -}; - struct omap_sr_data __maybe_unused omap_sr_pdata[OMAP_SR_NR]; static struct of_dev_auxdata omap_auxdata_lookup[] = { -#ifdef CONFIG_MACH_NOKIA_N8X0 - OF_DEV_AUXDATA("ti,omap2420-mmc", 0x4809c000, "mmci-omap.0", NULL), - OF_DEV_AUXDATA("menelaus", 0x72, "1-0072", &n8x0_menelaus_platform_data), -#endif #ifdef CONFIG_ARCH_OMAP3 OF_DEV_AUXDATA("ti,omap2-iommu", 0x5d000000, "5d000000.mmu", &omap3_iommu_pdata), @@ -560,13 +533,11 @@ void __init pdata_quirks_init(const struct of_device_id *omap_dt_match_table) * We still need this for omap2420 and omap3 PM to work, others are * using drivers/misc/sram.c already. */ - if (of_machine_is_compatible("ti,omap2420") || - of_machine_is_compatible("ti,omap3")) + if (IS_ENABLED(CONFIG_ARCH_OMAP3) && + of_machine_is_compatible("ti,omap3")) { omap_sdrc_init(NULL, NULL); - - if (of_machine_is_compatible("ti,omap3")) omap3_mcbsp_init(); - pdata_quirks_check(auxdata_quirks); + } pdata_quirks_init_clocks(omap_dt_match_table); diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index f97ff93f2fb4..5751b85e9ffb 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h @@ -43,11 +43,6 @@ extern void pm_dbg_update_time(struct powerdomain *pwrdm, int prev); #define pm_dbg_update_time(pwrdm, prev) do {} while (0); #endif /* CONFIG_PM_DEBUG */ -/* 24xx */ -extern void omap24xx_cpu_suspend(u32 dll_ctrl, void __iomem *sdrc_dlla_ctrl, - void __iomem *sdrc_power); -extern unsigned int omap24xx_cpu_suspend_sz; - /* 3xxx */ extern void omap34xx_cpu_suspend(int save_state); diff --git a/arch/arm/mach-omap2/powerdomain.h b/arch/arm/mach-omap2/powerdomain.h index fbc89999460b..eaf6d1104dc2 100644 --- a/arch/arm/mach-omap2/powerdomain.h +++ b/arch/arm/mach-omap2/powerdomain.h @@ -244,8 +244,6 @@ int pwrdm_post_transition(struct powerdomain *pwrdm); extern int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 state); -extern void omap242x_powerdomains_init(void); -extern void omap243x_powerdomains_init(void); extern void omap3xxx_powerdomains_init(void); extern void am33xx_powerdomains_init(void); extern void omap44xx_powerdomains_init(void); @@ -253,7 +251,6 @@ extern void omap54xx_powerdomains_init(void); extern void dra7xx_powerdomains_init(void); void am43xx_powerdomains_init(void); -extern struct pwrdm_ops omap2_pwrdm_operations; extern struct pwrdm_ops omap3_pwrdm_operations; extern struct pwrdm_ops am33xx_pwrdm_operations; extern struct pwrdm_ops omap4_pwrdm_operations; diff --git a/arch/arm/mach-omap2/powerdomains2xxx_data.c b/arch/arm/mach-omap2/powerdomains2xxx_data.c deleted file mode 100644 index fa259adbdc61..000000000000 --- a/arch/arm/mach-omap2/powerdomains2xxx_data.c +++ /dev/null @@ -1,134 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * OMAP2XXX powerdomain definitions - * - * Copyright (C) 2007-2008, 2011 Texas Instruments, Inc. - * Copyright (C) 2007-2011 Nokia Corporation - * - * Paul Walmsley, Jouni Högander - */ - -#include -#include - -#include "soc.h" -#include "powerdomain.h" -#include "powerdomains2xxx_3xxx_data.h" - -#include "prcm-common.h" -#include "prm2xxx_3xxx.h" -#include "prm-regbits-24xx.h" - -/* 24XX powerdomains and dependencies */ - -/* Powerdomains */ - -static struct powerdomain dsp_pwrdm = { - .name = "dsp_pwrdm", - .prcm_offs = OMAP24XX_DSP_MOD, - .pwrsts = PWRSTS_OFF_RET_ON, - .pwrsts_logic_ret = PWRSTS_RET, - .banks = 1, - .pwrsts_mem_ret = { - [0] = PWRSTS_RET, - }, - .pwrsts_mem_on = { - [0] = PWRSTS_ON, - }, - .voltdm = { .name = "core" }, -}; - -static struct powerdomain mpu_24xx_pwrdm = { - .name = "mpu_pwrdm", - .prcm_offs = MPU_MOD, - .pwrsts = PWRSTS_OFF_RET_ON, - .pwrsts_logic_ret = PWRSTS_OFF_RET, - .banks = 1, - .pwrsts_mem_ret = { - [0] = PWRSTS_RET, - }, - .pwrsts_mem_on = { - [0] = PWRSTS_ON, - }, - .voltdm = { .name = "core" }, -}; - -static struct powerdomain core_24xx_pwrdm = { - .name = "core_pwrdm", - .prcm_offs = CORE_MOD, - .pwrsts = PWRSTS_OFF_RET_ON, - .pwrsts_logic_ret = PWRSTS_RET, - .banks = 3, - .pwrsts_mem_ret = { - [0] = PWRSTS_OFF_RET, /* MEM1RETSTATE */ - [1] = PWRSTS_OFF_RET, /* MEM2RETSTATE */ - [2] = PWRSTS_OFF_RET, /* MEM3RETSTATE */ - }, - .pwrsts_mem_on = { - [0] = PWRSTS_OFF_RET_ON, /* MEM1ONSTATE */ - [1] = PWRSTS_OFF_RET_ON, /* MEM2ONSTATE */ - [2] = PWRSTS_OFF_RET_ON, /* MEM3ONSTATE */ - }, - .voltdm = { .name = "core" }, -}; - - -/* - * 2430-specific powerdomains - */ - -/* XXX 2430 KILLDOMAINWKUP bit? No current users apparently */ - -static struct powerdomain mdm_pwrdm = { - .name = "mdm_pwrdm", - .prcm_offs = OMAP2430_MDM_MOD, - .pwrsts = PWRSTS_OFF_RET_ON, - .pwrsts_logic_ret = PWRSTS_RET, - .banks = 1, - .pwrsts_mem_ret = { - [0] = PWRSTS_RET, /* MEMRETSTATE */ - }, - .pwrsts_mem_on = { - [0] = PWRSTS_ON, /* MEMONSTATE */ - }, - .voltdm = { .name = "core" }, -}; - -/* - * - */ - -static struct powerdomain *powerdomains_omap24xx[] __initdata = { - &wkup_omap2_pwrdm, - &gfx_omap2_pwrdm, - &dsp_pwrdm, - &mpu_24xx_pwrdm, - &core_24xx_pwrdm, - NULL -}; - -static struct powerdomain *powerdomains_omap2430[] __initdata = { - &mdm_pwrdm, - NULL -}; - -void __init omap242x_powerdomains_init(void) -{ - if (!cpu_is_omap2420()) - return; - - pwrdm_register_platform_funcs(&omap2_pwrdm_operations); - pwrdm_register_pwrdms(powerdomains_omap24xx); - pwrdm_complete_init(); -} - -void __init omap243x_powerdomains_init(void) -{ - if (!cpu_is_omap2430()) - return; - - pwrdm_register_platform_funcs(&omap2_pwrdm_operations); - pwrdm_register_pwrdms(powerdomains_omap24xx); - pwrdm_register_pwrdms(powerdomains_omap2430); - pwrdm_complete_init(); -} diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h index 5e3544a63526..e326bb6a09db 100644 --- a/arch/arm/mach-omap2/prcm-common.h +++ b/arch/arm/mach-omap2/prcm-common.h @@ -27,12 +27,6 @@ #define PLL_MOD 0x500 -/* Chip-specific module offsets */ -#define OMAP24XX_GR_MOD OCP_MOD -#define OMAP24XX_DSP_MOD 0x800 - -#define OMAP2430_MDM_MOD 0xc00 - /* IVA2 module is < base on 3430 */ #define OMAP3430_IVA2_MOD -0x800 #define OMAP3430ES2_SGX_MOD GFX_MOD @@ -63,147 +57,6 @@ #define TI816X_PRM_SGX_MOD 0x0f00 #define TI81XX_PRM_ALWON_MOD 0x1800 -/* 24XX register bits shared between CM & PRM registers */ - -/* CM_FCLKEN1_CORE, CM_ICLKEN1_CORE, PM_WKEN1_CORE shared bits */ -#define OMAP2420_EN_MMC_SHIFT 26 -#define OMAP2420_EN_MMC_MASK (1 << 26) -#define OMAP24XX_EN_UART2_SHIFT 22 -#define OMAP24XX_EN_UART2_MASK (1 << 22) -#define OMAP24XX_EN_UART1_SHIFT 21 -#define OMAP24XX_EN_UART1_MASK (1 << 21) -#define OMAP24XX_EN_MCSPI2_SHIFT 18 -#define OMAP24XX_EN_MCSPI2_MASK (1 << 18) -#define OMAP24XX_EN_MCSPI1_SHIFT 17 -#define OMAP24XX_EN_MCSPI1_MASK (1 << 17) -#define OMAP24XX_EN_MCBSP2_SHIFT 16 -#define OMAP24XX_EN_MCBSP2_MASK (1 << 16) -#define OMAP24XX_EN_MCBSP1_SHIFT 15 -#define OMAP24XX_EN_MCBSP1_MASK (1 << 15) -#define OMAP24XX_EN_GPT12_SHIFT 14 -#define OMAP24XX_EN_GPT12_MASK (1 << 14) -#define OMAP24XX_EN_GPT11_SHIFT 13 -#define OMAP24XX_EN_GPT11_MASK (1 << 13) -#define OMAP24XX_EN_GPT10_SHIFT 12 -#define OMAP24XX_EN_GPT10_MASK (1 << 12) -#define OMAP24XX_EN_GPT9_SHIFT 11 -#define OMAP24XX_EN_GPT9_MASK (1 << 11) -#define OMAP24XX_EN_GPT8_SHIFT 10 -#define OMAP24XX_EN_GPT8_MASK (1 << 10) -#define OMAP24XX_EN_GPT7_SHIFT 9 -#define OMAP24XX_EN_GPT7_MASK (1 << 9) -#define OMAP24XX_EN_GPT6_SHIFT 8 -#define OMAP24XX_EN_GPT6_MASK (1 << 8) -#define OMAP24XX_EN_GPT5_SHIFT 7 -#define OMAP24XX_EN_GPT5_MASK (1 << 7) -#define OMAP24XX_EN_GPT4_SHIFT 6 -#define OMAP24XX_EN_GPT4_MASK (1 << 6) -#define OMAP24XX_EN_GPT3_SHIFT 5 -#define OMAP24XX_EN_GPT3_MASK (1 << 5) -#define OMAP24XX_EN_GPT2_SHIFT 4 -#define OMAP24XX_EN_GPT2_MASK (1 << 4) -#define OMAP2420_EN_VLYNQ_SHIFT 3 -#define OMAP2420_EN_VLYNQ_MASK (1 << 3) - -/* CM_FCLKEN2_CORE, CM_ICLKEN2_CORE, PM_WKEN2_CORE shared bits */ -#define OMAP2430_EN_GPIO5_SHIFT 10 -#define OMAP2430_EN_GPIO5_MASK (1 << 10) -#define OMAP2430_EN_MCSPI3_SHIFT 9 -#define OMAP2430_EN_MCSPI3_MASK (1 << 9) -#define OMAP2430_EN_MMCHS2_SHIFT 8 -#define OMAP2430_EN_MMCHS2_MASK (1 << 8) -#define OMAP2430_EN_MMCHS1_SHIFT 7 -#define OMAP2430_EN_MMCHS1_MASK (1 << 7) -#define OMAP24XX_EN_UART3_SHIFT 2 -#define OMAP24XX_EN_UART3_MASK (1 << 2) -#define OMAP24XX_EN_USB_SHIFT 0 -#define OMAP24XX_EN_USB_MASK (1 << 0) - -/* CM_ICLKEN2_CORE, PM_WKEN2_CORE shared bits */ -#define OMAP2430_EN_MDM_INTC_SHIFT 11 -#define OMAP2430_EN_MDM_INTC_MASK (1 << 11) -#define OMAP2430_EN_USBHS_SHIFT 6 -#define OMAP2430_EN_USBHS_MASK (1 << 6) -#define OMAP24XX_EN_GPMC_SHIFT 1 -#define OMAP24XX_EN_GPMC_MASK (1 << 1) - -/* CM_IDLEST1_CORE, PM_WKST1_CORE shared bits */ -#define OMAP2420_ST_MMC_SHIFT 26 -#define OMAP2420_ST_MMC_MASK (1 << 26) -#define OMAP24XX_ST_UART2_SHIFT 22 -#define OMAP24XX_ST_UART2_MASK (1 << 22) -#define OMAP24XX_ST_UART1_SHIFT 21 -#define OMAP24XX_ST_UART1_MASK (1 << 21) -#define OMAP24XX_ST_MCSPI2_SHIFT 18 -#define OMAP24XX_ST_MCSPI2_MASK (1 << 18) -#define OMAP24XX_ST_MCSPI1_SHIFT 17 -#define OMAP24XX_ST_MCSPI1_MASK (1 << 17) -#define OMAP24XX_ST_MCBSP2_SHIFT 16 -#define OMAP24XX_ST_MCBSP2_MASK (1 << 16) -#define OMAP24XX_ST_MCBSP1_SHIFT 15 -#define OMAP24XX_ST_MCBSP1_MASK (1 << 15) -#define OMAP24XX_ST_GPT12_SHIFT 14 -#define OMAP24XX_ST_GPT12_MASK (1 << 14) -#define OMAP24XX_ST_GPT11_SHIFT 13 -#define OMAP24XX_ST_GPT11_MASK (1 << 13) -#define OMAP24XX_ST_GPT10_SHIFT 12 -#define OMAP24XX_ST_GPT10_MASK (1 << 12) -#define OMAP24XX_ST_GPT9_SHIFT 11 -#define OMAP24XX_ST_GPT9_MASK (1 << 11) -#define OMAP24XX_ST_GPT8_SHIFT 10 -#define OMAP24XX_ST_GPT8_MASK (1 << 10) -#define OMAP24XX_ST_GPT7_SHIFT 9 -#define OMAP24XX_ST_GPT7_MASK (1 << 9) -#define OMAP24XX_ST_GPT6_SHIFT 8 -#define OMAP24XX_ST_GPT6_MASK (1 << 8) -#define OMAP24XX_ST_GPT5_SHIFT 7 -#define OMAP24XX_ST_GPT5_MASK (1 << 7) -#define OMAP24XX_ST_GPT4_SHIFT 6 -#define OMAP24XX_ST_GPT4_MASK (1 << 6) -#define OMAP24XX_ST_GPT3_SHIFT 5 -#define OMAP24XX_ST_GPT3_MASK (1 << 5) -#define OMAP24XX_ST_GPT2_SHIFT 4 -#define OMAP24XX_ST_GPT2_MASK (1 << 4) -#define OMAP2420_ST_VLYNQ_SHIFT 3 -#define OMAP2420_ST_VLYNQ_MASK (1 << 3) - -/* CM_IDLEST2_CORE, PM_WKST2_CORE shared bits */ -#define OMAP2430_ST_MDM_INTC_SHIFT 11 -#define OMAP2430_ST_MDM_INTC_MASK (1 << 11) -#define OMAP2430_ST_GPIO5_SHIFT 10 -#define OMAP2430_ST_GPIO5_MASK (1 << 10) -#define OMAP2430_ST_MCSPI3_SHIFT 9 -#define OMAP2430_ST_MCSPI3_MASK (1 << 9) -#define OMAP2430_ST_MMCHS2_SHIFT 8 -#define OMAP2430_ST_MMCHS2_MASK (1 << 8) -#define OMAP2430_ST_MMCHS1_SHIFT 7 -#define OMAP2430_ST_MMCHS1_MASK (1 << 7) -#define OMAP2430_ST_USBHS_SHIFT 6 -#define OMAP2430_ST_USBHS_MASK (1 << 6) -#define OMAP24XX_ST_UART3_SHIFT 2 -#define OMAP24XX_ST_UART3_MASK (1 << 2) -#define OMAP24XX_ST_USB_SHIFT 0 -#define OMAP24XX_ST_USB_MASK (1 << 0) - -/* CM_FCLKEN_WKUP, CM_ICLKEN_WKUP, PM_WKEN_WKUP shared bits */ -#define OMAP24XX_EN_GPIOS_SHIFT 2 -#define OMAP24XX_EN_GPIOS_MASK (1 << 2) -#define OMAP24XX_EN_GPT1_SHIFT 0 -#define OMAP24XX_EN_GPT1_MASK (1 << 0) - -/* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */ -#define OMAP24XX_ST_GPIOS_SHIFT 2 -#define OMAP24XX_ST_GPIOS_MASK (1 << 2) -#define OMAP24XX_ST_32KSYNC_SHIFT 1 -#define OMAP24XX_ST_32KSYNC_MASK (1 << 1) -#define OMAP24XX_ST_GPT1_SHIFT 0 -#define OMAP24XX_ST_GPT1_MASK (1 << 0) - -/* CM_IDLEST_MDM and PM_WKST_MDM shared bits */ -#define OMAP2430_ST_MDM_SHIFT 0 -#define OMAP2430_ST_MDM_MASK (1 << 0) - - /* 3430 register bits shared between CM & PRM registers */ /* CM_REVISION, PRM_REVISION shared bits */ diff --git a/arch/arm/mach-omap2/prm-regbits-24xx.h b/arch/arm/mach-omap2/prm-regbits-24xx.h deleted file mode 100644 index ff83801f6439..000000000000 --- a/arch/arm/mach-omap2/prm-regbits-24xx.h +++ /dev/null @@ -1,39 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -#ifndef __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_24XX_H -#define __ARCH_ARM_MACH_OMAP2_PRM_REGBITS_24XX_H - -/* - * OMAP24XX Power/Reset Management register bits - * - * Copyright (C) 2007 Texas Instruments, Inc. - * Copyright (C) 2007 Nokia Corporation - * - * Written by Paul Walmsley - */ - -#include "prm2xxx.h" - -#define OMAP24XX_EN_CORE_SHIFT 0 -#define OMAP24XX_FORCESTATE_MASK (1 << 18) -#define OMAP24XX_AUTOIDLE_MASK (1 << 0) -#define OMAP24XX_AUTO_EXTVOLT_MASK (1 << 15) -#define OMAP24XX_SETOFF_LEVEL_SHIFT 12 -#define OMAP24XX_MEMRETCTRL_MASK (1 << 8) -#define OMAP24XX_SETRET_LEVEL_SHIFT 6 -#define OMAP24XX_VOLT_LEVEL_SHIFT 0 -#define OMAP2420_CLKOUT2_EN_SHIFT 15 -#define OMAP2420_CLKOUT2_DIV_SHIFT 11 -#define OMAP2420_CLKOUT2_DIV_WIDTH 3 -#define OMAP2420_CLKOUT2_SOURCE_MASK (0x3 << 8) -#define OMAP24XX_CLKOUT_EN_SHIFT 7 -#define OMAP24XX_CLKOUT_DIV_SHIFT 3 -#define OMAP24XX_CLKOUT_DIV_WIDTH 3 -#define OMAP24XX_CLKOUT_SOURCE_MASK (0x3 << 0) -#define OMAP24XX_EMULATION_EN_SHIFT 0 -#define OMAP2430_PM_WKDEP_MPU_EN_MDM_SHIFT 5 -#define OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT 2 -#define OMAP24XX_EXTWMPU_RST_SHIFT 6 -#define OMAP24XX_SECU_WD_RST_SHIFT 5 -#define OMAP24XX_MPU_WD_RST_SHIFT 4 -#define OMAP24XX_SECU_VIOL_RST_SHIFT 3 -#endif diff --git a/arch/arm/mach-omap2/prm2xxx.c b/arch/arm/mach-omap2/prm2xxx.c deleted file mode 100644 index 35a58f54b528..000000000000 --- a/arch/arm/mach-omap2/prm2xxx.c +++ /dev/null @@ -1,229 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * OMAP2xxx PRM module functions - * - * Copyright (C) 2010-2012 Texas Instruments, Inc. - * Copyright (C) 2010 Nokia Corporation - * Benoît Cousson - * Paul Walmsley - * Rajendra Nayak - */ - -#include -#include -#include -#include -#include - -#include "powerdomain.h" -#include "clockdomain.h" -#include "prm2xxx.h" -#include "cm2xxx_3xxx.h" -#include "prm-regbits-24xx.h" - -/* - * OMAP24xx PM_PWSTCTRL_*.POWERSTATE and PM_PWSTST_*.LASTSTATEENTERED bits - - * these are reversed from the bits used on OMAP3+ - */ -#define OMAP24XX_PWRDM_POWER_ON 0x0 -#define OMAP24XX_PWRDM_POWER_RET 0x1 -#define OMAP24XX_PWRDM_POWER_OFF 0x3 - -/* - * omap2xxx_prm_reset_src_map - map from bits in the PRM_RSTST_WKUP - * hardware register (which are specific to the OMAP2xxx SoCs) to - * reset source ID bit shifts (which is an OMAP SoC-independent - * enumeration) - */ -static struct prm_reset_src_map omap2xxx_prm_reset_src_map[] = { - { OMAP_GLOBALCOLD_RST_SHIFT, OMAP_GLOBAL_COLD_RST_SRC_ID_SHIFT }, - { OMAP_GLOBALWARM_RST_SHIFT, OMAP_GLOBAL_WARM_RST_SRC_ID_SHIFT }, - { OMAP24XX_SECU_VIOL_RST_SHIFT, OMAP_SECU_VIOL_RST_SRC_ID_SHIFT }, - { OMAP24XX_MPU_WD_RST_SHIFT, OMAP_MPU_WD_RST_SRC_ID_SHIFT }, - { OMAP24XX_SECU_WD_RST_SHIFT, OMAP_SECU_WD_RST_SRC_ID_SHIFT }, - { OMAP24XX_EXTWMPU_RST_SHIFT, OMAP_EXTWARM_RST_SRC_ID_SHIFT }, - { -1, -1 }, -}; - -/** - * omap2xxx_prm_read_reset_sources - return the last SoC reset source - * - * Return a u32 representing the last reset sources of the SoC. The - * returned reset source bits are standardized across OMAP SoCs. - */ -static u32 omap2xxx_prm_read_reset_sources(void) -{ - struct prm_reset_src_map *p; - u32 r = 0; - u32 v; - - v = omap2_prm_read_mod_reg(WKUP_MOD, OMAP2_RM_RSTST); - - p = omap2xxx_prm_reset_src_map; - while (p->reg_shift >= 0 && p->std_shift >= 0) { - if (v & (1 << p->reg_shift)) - r |= 1 << p->std_shift; - p++; - } - - return r; -} - -/** - * omap2xxx_pwrst_to_common_pwrst - convert OMAP2xxx pwrst to common pwrst - * @omap2xxx_pwrst: OMAP2xxx hardware power state to convert - * - * Return the common power state bits corresponding to the OMAP2xxx - * hardware power state bits @omap2xxx_pwrst, or -EINVAL upon error. - */ -static int omap2xxx_pwrst_to_common_pwrst(u8 omap2xxx_pwrst) -{ - u8 pwrst; - - switch (omap2xxx_pwrst) { - case OMAP24XX_PWRDM_POWER_OFF: - pwrst = PWRDM_POWER_OFF; - break; - case OMAP24XX_PWRDM_POWER_RET: - pwrst = PWRDM_POWER_RET; - break; - case OMAP24XX_PWRDM_POWER_ON: - pwrst = PWRDM_POWER_ON; - break; - default: - return -EINVAL; - } - - return pwrst; -} - -/** - * omap2xxx_prm_dpll_reset - use DPLL reset to reboot the OMAP SoC - * - * Set the DPLL reset bit, which should reboot the SoC. This is the - * recommended way to restart the SoC. No return value. - */ -static void omap2xxx_prm_dpll_reset(void) -{ - omap2_prm_set_mod_reg_bits(OMAP_RST_DPLL3_MASK, WKUP_MOD, - OMAP2_RM_RSTCTRL); - /* OCP barrier */ - omap2_prm_read_mod_reg(WKUP_MOD, OMAP2_RM_RSTCTRL); -} - -/** - * omap2xxx_prm_clear_mod_irqs - clear wakeup status bits for a module - * @module: PRM module to clear wakeups from - * @regs: register offset to clear - * @wkst_mask: wakeup status mask to clear - * - * Clears wakeup status bits for a given module, so that the device can - * re-enter idle. - */ -static int omap2xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask) -{ - u32 wkst; - - wkst = omap2_prm_read_mod_reg(module, regs); - wkst &= wkst_mask; - omap2_prm_write_mod_reg(wkst, module, regs); - return 0; -} - -int omap2xxx_clkdm_sleep(struct clockdomain *clkdm) -{ - omap2_prm_set_mod_reg_bits(OMAP24XX_FORCESTATE_MASK, - clkdm->pwrdm.ptr->prcm_offs, - OMAP2_PM_PWSTCTRL); - return 0; -} - -int omap2xxx_clkdm_wakeup(struct clockdomain *clkdm) -{ - omap2_prm_clear_mod_reg_bits(OMAP24XX_FORCESTATE_MASK, - clkdm->pwrdm.ptr->prcm_offs, - OMAP2_PM_PWSTCTRL); - return 0; -} - -static int omap2xxx_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst) -{ - u8 omap24xx_pwrst; - - switch (pwrst) { - case PWRDM_POWER_OFF: - omap24xx_pwrst = OMAP24XX_PWRDM_POWER_OFF; - break; - case PWRDM_POWER_RET: - omap24xx_pwrst = OMAP24XX_PWRDM_POWER_RET; - break; - case PWRDM_POWER_ON: - omap24xx_pwrst = OMAP24XX_PWRDM_POWER_ON; - break; - default: - return -EINVAL; - } - - omap2_prm_rmw_mod_reg_bits(OMAP_POWERSTATE_MASK, - (omap24xx_pwrst << OMAP_POWERSTATE_SHIFT), - pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL); - return 0; -} - -static int omap2xxx_pwrdm_read_next_pwrst(struct powerdomain *pwrdm) -{ - u8 omap2xxx_pwrst; - - omap2xxx_pwrst = omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs, - OMAP2_PM_PWSTCTRL, - OMAP_POWERSTATE_MASK); - - return omap2xxx_pwrst_to_common_pwrst(omap2xxx_pwrst); -} - -static int omap2xxx_pwrdm_read_pwrst(struct powerdomain *pwrdm) -{ - u8 omap2xxx_pwrst; - - omap2xxx_pwrst = omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs, - OMAP2_PM_PWSTST, - OMAP_POWERSTATEST_MASK); - - return omap2xxx_pwrst_to_common_pwrst(omap2xxx_pwrst); -} - -struct pwrdm_ops omap2_pwrdm_operations = { - .pwrdm_set_next_pwrst = omap2xxx_pwrdm_set_next_pwrst, - .pwrdm_read_next_pwrst = omap2xxx_pwrdm_read_next_pwrst, - .pwrdm_read_pwrst = omap2xxx_pwrdm_read_pwrst, - .pwrdm_set_logic_retst = omap2_pwrdm_set_logic_retst, - .pwrdm_set_mem_onst = omap2_pwrdm_set_mem_onst, - .pwrdm_set_mem_retst = omap2_pwrdm_set_mem_retst, - .pwrdm_read_mem_pwrst = omap2_pwrdm_read_mem_pwrst, - .pwrdm_read_mem_retst = omap2_pwrdm_read_mem_retst, - .pwrdm_wait_transition = omap2_pwrdm_wait_transition, -}; - -/* - * - */ - -static struct prm_ll_data omap2xxx_prm_ll_data = { - .read_reset_sources = &omap2xxx_prm_read_reset_sources, - .assert_hardreset = &omap2_prm_assert_hardreset, - .deassert_hardreset = &omap2_prm_deassert_hardreset, - .is_hardreset_asserted = &omap2_prm_is_hardreset_asserted, - .reset_system = &omap2xxx_prm_dpll_reset, - .clear_mod_irqs = &omap2xxx_prm_clear_mod_irqs, -}; - -int __init omap2xxx_prm_init(const struct omap_prcm_init_data *data) -{ - return prm_register(&omap2xxx_prm_ll_data); -} - -static void __exit omap2xxx_prm_exit(void) -{ - prm_unregister(&omap2xxx_prm_ll_data); -} -__exitcall(omap2xxx_prm_exit); diff --git a/arch/arm/mach-omap2/prm2xxx.h b/arch/arm/mach-omap2/prm2xxx.h deleted file mode 100644 index 659b917348f8..000000000000 --- a/arch/arm/mach-omap2/prm2xxx.h +++ /dev/null @@ -1,128 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* - * OMAP2xxx Power/Reset Management (PRM) register definitions - * - * Copyright (C) 2007-2009, 2011-2012 Texas Instruments, Inc. - * Copyright (C) 2008-2010 Nokia Corporation - * Paul Walmsley - * - * The PRM hardware modules on the OMAP2/3 are quite similar to each - * other. The PRM on OMAP4 has a new register layout, and is handled - * in a separate file. - */ -#ifndef __ARCH_ARM_MACH_OMAP2_PRM2XXX_H -#define __ARCH_ARM_MACH_OMAP2_PRM2XXX_H - -#include "prcm-common.h" -#include "prm.h" -#include "prm2xxx_3xxx.h" - -#define OMAP2420_PRM_REGADDR(module, reg) \ - OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE + (module) + (reg)) -#define OMAP2430_PRM_REGADDR(module, reg) \ - OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE + (module) + (reg)) - -/* - * OMAP2-specific global PRM registers - * Use {read,write}l_relaxed() with these registers. - * - * With a few exceptions, these are the register names beginning with - * PRCM_* on 24xx. (The exceptions are the IRQSTATUS and IRQENABLE - * bits.) - * - */ - -#define OMAP2_PRCM_REVISION_OFFSET 0x0000 -#define OMAP2420_PRCM_REVISION OMAP2420_PRM_REGADDR(OCP_MOD, 0x0000) -#define OMAP2_PRCM_SYSCONFIG_OFFSET 0x0010 -#define OMAP2420_PRCM_SYSCONFIG OMAP2420_PRM_REGADDR(OCP_MOD, 0x0010) - -#define OMAP2_PRCM_IRQSTATUS_MPU_OFFSET 0x0018 -#define OMAP2420_PRCM_IRQSTATUS_MPU OMAP2420_PRM_REGADDR(OCP_MOD, 0x0018) -#define OMAP2_PRCM_IRQENABLE_MPU_OFFSET 0x001c -#define OMAP2420_PRCM_IRQENABLE_MPU OMAP2420_PRM_REGADDR(OCP_MOD, 0x001c) - -#define OMAP2_PRCM_VOLTCTRL_OFFSET 0x0050 -#define OMAP2420_PRCM_VOLTCTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0050) -#define OMAP2_PRCM_VOLTST_OFFSET 0x0054 -#define OMAP2420_PRCM_VOLTST OMAP2420_PRM_REGADDR(OCP_MOD, 0x0054) -#define OMAP2_PRCM_CLKSRC_CTRL_OFFSET 0x0060 -#define OMAP2420_PRCM_CLKSRC_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0060) -#define OMAP2_PRCM_CLKOUT_CTRL_OFFSET 0x0070 -#define OMAP2420_PRCM_CLKOUT_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0070) -#define OMAP2_PRCM_CLKEMUL_CTRL_OFFSET 0x0078 -#define OMAP2420_PRCM_CLKEMUL_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0078) -#define OMAP2_PRCM_CLKCFG_CTRL_OFFSET 0x0080 -#define OMAP2420_PRCM_CLKCFG_CTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0080) -#define OMAP2_PRCM_CLKCFG_STATUS_OFFSET 0x0084 -#define OMAP2420_PRCM_CLKCFG_STATUS OMAP2420_PRM_REGADDR(OCP_MOD, 0x0084) -#define OMAP2_PRCM_VOLTSETUP_OFFSET 0x0090 -#define OMAP2420_PRCM_VOLTSETUP OMAP2420_PRM_REGADDR(OCP_MOD, 0x0090) -#define OMAP2_PRCM_CLKSSETUP_OFFSET 0x0094 -#define OMAP2420_PRCM_CLKSSETUP OMAP2420_PRM_REGADDR(OCP_MOD, 0x0094) -#define OMAP2_PRCM_POLCTRL_OFFSET 0x0098 -#define OMAP2420_PRCM_POLCTRL OMAP2420_PRM_REGADDR(OCP_MOD, 0x0098) - -#define OMAP2430_PRCM_REVISION OMAP2430_PRM_REGADDR(OCP_MOD, 0x0000) -#define OMAP2430_PRCM_SYSCONFIG OMAP2430_PRM_REGADDR(OCP_MOD, 0x0010) - -#define OMAP2430_PRCM_IRQSTATUS_MPU OMAP2430_PRM_REGADDR(OCP_MOD, 0x0018) -#define OMAP2430_PRCM_IRQENABLE_MPU OMAP2430_PRM_REGADDR(OCP_MOD, 0x001c) - -#define OMAP2430_PRCM_VOLTCTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0050) -#define OMAP2430_PRCM_VOLTST OMAP2430_PRM_REGADDR(OCP_MOD, 0x0054) -#define OMAP2430_PRCM_CLKSRC_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0060) -#define OMAP2430_PRCM_CLKOUT_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0070) -#define OMAP2430_PRCM_CLKEMUL_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0078) -#define OMAP2430_PRCM_CLKCFG_CTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0080) -#define OMAP2430_PRCM_CLKCFG_STATUS OMAP2430_PRM_REGADDR(OCP_MOD, 0x0084) -#define OMAP2430_PRCM_VOLTSETUP OMAP2430_PRM_REGADDR(OCP_MOD, 0x0090) -#define OMAP2430_PRCM_CLKSSETUP OMAP2430_PRM_REGADDR(OCP_MOD, 0x0094) -#define OMAP2430_PRCM_POLCTRL OMAP2430_PRM_REGADDR(OCP_MOD, 0x0098) - -/* - * Module specific PRM register offsets from PRM_BASE + domain offset - * - * Use prm_{read,write}_mod_reg() with these registers. - * - * With a few exceptions, these are the register names beginning with - * {PM,RM}_* on both OMAP2/3 SoC families.. (The exceptions are the - * IRQSTATUS and IRQENABLE bits.) - */ - -/* Register offsets appearing on both OMAP2 and OMAP3 */ - -#define OMAP2_RM_RSTCTRL 0x0050 -#define OMAP2_RM_RSTTIME 0x0054 -#define OMAP2_RM_RSTST 0x0058 -#define OMAP2_PM_PWSTCTRL 0x00e0 -#define OMAP2_PM_PWSTST 0x00e4 - -#define PM_WKEN 0x00a0 -#define PM_WKEN1 PM_WKEN -#define PM_WKST 0x00b0 -#define PM_WKST1 PM_WKST -#define PM_WKDEP 0x00c8 -#define PM_EVGENCTRL 0x00d4 -#define PM_EVGENONTIM 0x00d8 -#define PM_EVGENOFFTIM 0x00dc - -/* OMAP2xxx specific register offsets */ -#define OMAP24XX_PM_WKEN2 0x00a4 -#define OMAP24XX_PM_WKST2 0x00b4 - -#define OMAP24XX_PRCM_IRQSTATUS_DSP 0x00f0 /* IVA mod */ -#define OMAP24XX_PRCM_IRQENABLE_DSP 0x00f4 /* IVA mod */ -#define OMAP24XX_PRCM_IRQSTATUS_IVA 0x00f8 -#define OMAP24XX_PRCM_IRQENABLE_IVA 0x00fc - -#ifndef __ASSEMBLER__ -/* Function prototypes */ -extern int omap2xxx_clkdm_sleep(struct clockdomain *clkdm); -extern int omap2xxx_clkdm_wakeup(struct clockdomain *clkdm); - -int __init omap2xxx_prm_init(const struct omap_prcm_init_data *data); - -#endif - -#endif diff --git a/arch/arm/mach-omap2/prm2xxx_3xxx.c b/arch/arm/mach-omap2/prm2xxx_3xxx.c index d983efac6f4f..afaba7153ece 100644 --- a/arch/arm/mach-omap2/prm2xxx_3xxx.c +++ b/arch/arm/mach-omap2/prm2xxx_3xxx.c @@ -15,7 +15,6 @@ #include "powerdomain.h" #include "prm2xxx_3xxx.h" -#include "prm-regbits-24xx.h" #include "clockdomain.h" /** diff --git a/arch/arm/mach-omap2/prm_common.c b/arch/arm/mach-omap2/prm_common.c index ee4588acda50..3546e7292bfb 100644 --- a/arch/arm/mach-omap2/prm_common.c +++ b/arch/arm/mach-omap2/prm_common.c @@ -26,7 +26,6 @@ #include "soc.h" #include "prm2xxx_3xxx.h" -#include "prm2xxx.h" #include "prm3xxx.h" #include "prm33xx.h" #include "prm44xx.h" @@ -582,13 +581,6 @@ int prm_unregister(struct prm_ll_data *pld) return 0; } -#ifdef CONFIG_ARCH_OMAP2 -static struct omap_prcm_init_data omap2_prm_data __initdata = { - .index = TI_CLKM_PRM, - .init = omap2xxx_prm_init, -}; -#endif - #ifdef CONFIG_ARCH_OMAP3 static struct omap_prcm_init_data omap3_prm_data __initdata = { .index = TI_CLKM_PRM, @@ -670,9 +662,6 @@ static const struct of_device_id omap_prcm_dt_match_table[] __initconst = { { .compatible = "ti,dm814-pllss", .data = &dm814_pllss_data }, { .compatible = "ti,dm816-prcm", .data = &am3_prm_data }, #endif -#ifdef CONFIG_ARCH_OMAP2 - { .compatible = "ti,omap2-prcm", .data = &omap2_prm_data }, -#endif #ifdef CONFIG_ARCH_OMAP3 { .compatible = "ti,omap3-prm", .data = &omap3_prm_data }, #endif diff --git a/arch/arm/mach-omap2/sdrc.h b/arch/arm/mach-omap2/sdrc.h index 45b35422b587..c34fba4d2f1a 100644 --- a/arch/arm/mach-omap2/sdrc.h +++ b/arch/arm/mach-omap2/sdrc.h @@ -90,17 +90,7 @@ struct memory_timings { u32 base_cs; /* base chip select to use for calculations */ }; -extern void omap2xxx_sdrc_init_params(u32 force_lock_to_unlock_mode); - -u32 omap2xxx_sdrc_dll_is_unlocked(void); -u32 omap2xxx_sdrc_reprogram(u32 level, u32 force); - - #else -#define OMAP242X_SDRC_REGADDR(reg) \ - OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE + (reg)) -#define OMAP243X_SDRC_REGADDR(reg) \ - OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE + (reg)) #define OMAP34XX_SDRC_REGADDR(reg) \ OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE + (reg)) @@ -184,17 +174,6 @@ u32 omap2xxx_sdrc_reprogram(u32 level, u32 force); #define SDRC_RFR_CTRL_BYPASS (0x00005000 | 1) /* Need to calc */ -/* - * SMS register access - */ - -#define OMAP242X_SMS_REGADDR(reg) \ - (void __iomem *)OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE + reg) -#define OMAP243X_SMS_REGADDR(reg) \ - (void __iomem *)OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE + reg) -#define OMAP343X_SMS_REGADDR(reg) \ - (void __iomem *)OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE + reg) - /* SMS register offsets - read/write with sms_{read,write}_reg() */ #define SMS_SYSCONFIG 0x010 diff --git a/arch/arm/mach-omap2/sdrc2xxx.c b/arch/arm/mach-omap2/sdrc2xxx.c deleted file mode 100644 index 5a275b4fd404..000000000000 --- a/arch/arm/mach-omap2/sdrc2xxx.c +++ /dev/null @@ -1,164 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * SDRAM timing related functions for OMAP2xxx - * - * Copyright (C) 2005, 2008 Texas Instruments Inc. - * Copyright (C) 2005, 2008 Nokia Corporation - * - * Tony Lindgren - * Paul Walmsley - * Richard Woodruff - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "soc.h" -#include "iomap.h" -#include "common.h" -#include "prm2xxx.h" -#include "clock.h" -#include "sdrc.h" -#include "sram.h" - -/* Memory timing, DLL mode flags */ -#define M_DDR 1 -#define M_LOCK_CTRL (1 << 2) -#define M_UNLOCK 0 -#define M_LOCK 1 - - -static struct memory_timings mem_timings; -static u32 curr_perf_level = CORE_CLK_SRC_DPLL_X2; - -static u32 omap2xxx_sdrc_get_slow_dll_ctrl(void) -{ - return mem_timings.slow_dll_ctrl; -} - -static u32 omap2xxx_sdrc_get_fast_dll_ctrl(void) -{ - return mem_timings.fast_dll_ctrl; -} - -static u32 omap2xxx_sdrc_get_type(void) -{ - return mem_timings.m_type; -} - -/* - * Check the DLL lock state, and return tue if running in unlock mode. - * This is needed to compensate for the shifted DLL value in unlock mode. - */ -u32 omap2xxx_sdrc_dll_is_unlocked(void) -{ - /* dlla and dllb are a set */ - u32 dll_state = sdrc_read_reg(SDRC_DLLA_CTRL); - - if ((dll_state & (1 << 2)) == (1 << 2)) - return 1; - else - return 0; -} - -/* - * 'level' is the value to store to CM_CLKSEL2_PLL.CORE_CLK_SRC. - * Practical values are CORE_CLK_SRC_DPLL (for CORE_CLK = DPLL_CLK) or - * CORE_CLK_SRC_DPLL_X2 (for CORE_CLK = * DPLL_CLK * 2) - * - * Used by the clock framework during CORE DPLL changes - */ -u32 omap2xxx_sdrc_reprogram(u32 level, u32 force) -{ - u32 dll_ctrl, m_type; - u32 prev = curr_perf_level; - unsigned long flags; - - if ((curr_perf_level == level) && !force) - return prev; - - if (level == CORE_CLK_SRC_DPLL) - dll_ctrl = omap2xxx_sdrc_get_slow_dll_ctrl(); - else if (level == CORE_CLK_SRC_DPLL_X2) - dll_ctrl = omap2xxx_sdrc_get_fast_dll_ctrl(); - else - return prev; - - m_type = omap2xxx_sdrc_get_type(); - - local_irq_save(flags); - /* - * XXX These calls should be abstracted out through a - * prm2xxx.c function - */ - if (cpu_is_omap2420()) - writel_relaxed(0xffff, OMAP2420_PRCM_VOLTSETUP); - else - writel_relaxed(0xffff, OMAP2430_PRCM_VOLTSETUP); - omap2_sram_reprogram_sdrc(level, dll_ctrl, m_type); - curr_perf_level = level; - local_irq_restore(flags); - - return prev; -} - -/* Used by the clock framework during CORE DPLL changes */ -void omap2xxx_sdrc_init_params(u32 force_lock_to_unlock_mode) -{ - unsigned long dll_cnt; - u32 fast_dll = 0; - - /* DDR = 1, SDR = 0 */ - mem_timings.m_type = !((sdrc_read_reg(SDRC_MR_0) & 0x3) == 0x1); - - /* 2422 es2.05 and beyond has a single SIP DDR instead of 2 like others. - * In the case of 2422, its ok to use CS1 instead of CS0. - */ - if (cpu_is_omap2422()) - mem_timings.base_cs = 1; - else - mem_timings.base_cs = 0; - - if (mem_timings.m_type != M_DDR) - return; - - /* With DDR we need to determine the low frequency DLL value */ - if (((mem_timings.fast_dll_ctrl & (1 << 2)) == M_LOCK_CTRL)) - mem_timings.dll_mode = M_UNLOCK; - else - mem_timings.dll_mode = M_LOCK; - - if (mem_timings.base_cs == 0) { - fast_dll = sdrc_read_reg(SDRC_DLLA_CTRL); - dll_cnt = sdrc_read_reg(SDRC_DLLA_STATUS) & 0xff00; - } else { - fast_dll = sdrc_read_reg(SDRC_DLLB_CTRL); - dll_cnt = sdrc_read_reg(SDRC_DLLB_STATUS) & 0xff00; - } - if (force_lock_to_unlock_mode) { - fast_dll &= ~0xff00; - fast_dll |= dll_cnt; /* Current lock mode */ - } - /* set fast timings with DLL filter disabled */ - mem_timings.fast_dll_ctrl = (fast_dll | (3 << 8)); - - /* No disruptions, DDR will be offline & C-ABI not followed */ - omap2_sram_ddr_init(&mem_timings.slow_dll_ctrl, - mem_timings.fast_dll_ctrl, - mem_timings.base_cs, - force_lock_to_unlock_mode); - mem_timings.slow_dll_ctrl &= 0xff00; /* Keep lock value */ - - /* Turn status into unlock ctrl */ - mem_timings.slow_dll_ctrl |= - ((mem_timings.fast_dll_ctrl & 0xF) | (1 << 2)); - - /* 90 degree phase for anything below 133MHz + disable DLL filter */ - mem_timings.slow_dll_ctrl |= ((1 << 1) | (3 << 8)); -} diff --git a/arch/arm/mach-omap2/sleep24xx.S b/arch/arm/mach-omap2/sleep24xx.S deleted file mode 100644 index 84d8c43ad382..000000000000 --- a/arch/arm/mach-omap2/sleep24xx.S +++ /dev/null @@ -1,91 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * linux/arch/arm/mach-omap2/sleep.S - * - * (C) Copyright 2004 - * Texas Instruments, - * Richard Woodruff - * - * (C) Copyright 2006 Nokia Corporation - * Fixed idle loop sleep - * Igor Stoppa - */ - -#include -#include - -#include "omap24xx.h" -#include "sdrc.h" - -/* First address of reserved address space? apparently valid for OMAP2 & 3 */ -#define A_SDRC0_V (0xC0000000) - - .text - -/* - * omap24xx_cpu_suspend() - Forces OMAP into deep sleep state by completing - * SDRC shutdown then ARM shutdown. Upon wake MPU is back on so just restore - * SDRC. - * - * Input: - * R0 : DLL ctrl value pre-Sleep - * R1 : SDRC_DLLA_CTRL - * R2 : SDRC_POWER - * - * The if the DPLL is going to AutoIdle. It seems like the DPLL may be back on - * when we get called, but the DLL probably isn't. We will wait a bit more in - * case the DPLL isn't quite there yet. The code will wait on DLL for DDR even - * if in unlocked mode. - * - * For less than 242x-ES2.2 upon wake from a sleep mode where the external - * oscillator was stopped, a timing bug exists where a non-stabilized 12MHz - * clock can pass into the PRCM can cause problems at DSP and IVA. - * To work around this the code will switch to the 32kHz source prior to sleep. - * Post sleep we will shift back to using the DPLL. Apparently, - * CM_IDLEST_CLKGEN does not reflect the full clock change so you need to wait - * 3x12MHz + 3x32kHz clocks for a full switch. - * - * The DLL load value is not kept in RETENTION or OFF. It needs to be restored - * at wake - */ - .align 3 -ENTRY(omap24xx_cpu_suspend) - stmfd sp!, {r0 - r12, lr} @ save registers on stack - mov r3, #0x0 @ clear for mcr call - mcr p15, 0, r3, c7, c10, 4 @ memory barrier, hope SDR/DDR finished - nop - nop - ldr r4, [r2] @ read SDRC_POWER - orr r4, r4, #0x40 @ enable self refresh on idle req - mov r5, #0x2000 @ set delay (DPLL relock + DLL relock) - str r4, [r2] @ make it so - nop - mcr p15, 0, r3, c7, c0, 4 @ wait for interrupt - nop -loop: - subs r5, r5, #0x1 @ awake, wait just a bit - bne loop - - /* The DPLL has to be on before we take the DDR out of self refresh */ - bic r4, r4, #0x40 @ now clear self refresh bit. - str r4, [r2] @ write to SDRC_POWER - ldr r4, A_SDRC0 @ make a clock happen - ldr r4, [r4] @ read A_SDRC0 - nop @ start auto refresh only after clk ok - movs r0, r0 @ see if DDR or SDR - strne r0, [r1] @ rewrite DLLA to force DLL reload - addne r1, r1, #0x8 @ move to DLLB - strne r0, [r1] @ rewrite DLLB to force DLL reload - - mov r5, #0x1000 -loop2: - subs r5, r5, #0x1 - bne loop2 - /* resume*/ - ldmfd sp!, {r0 - r12, pc} @ restore regs and return - -A_SDRC0: - .word A_SDRC0_V - -ENTRY(omap24xx_cpu_suspend_sz) - .word . - omap24xx_cpu_suspend diff --git a/arch/arm/mach-omap2/soc.h b/arch/arm/mach-omap2/soc.h index 9e3dbb743e5c..9c9f56ca9142 100644 --- a/arch/arm/mach-omap2/soc.h +++ b/arch/arm/mach-omap2/soc.h @@ -12,7 +12,6 @@ * Added DRA7xxx specific defines - Sricharan R */ -#include "omap24xx.h" #include "omap34xx.h" #include "omap44xx.h" #include "ti81xx.h" @@ -62,9 +61,6 @@ static inline int soc_is_omap(void) /* * Macros to group OMAP into cpu classes. * These can be used in most places. - * soc_is_omap24xx(): True for OMAP2420, OMAP2422, OMAP2423, OMAP2430 - * soc_is_omap242x(): True for OMAP2420, OMAP2422, OMAP2423 - * soc_is_omap243x(): True for OMAP2430 * soc_is_omap343x(): True for OMAP3430 * soc_is_omap443x(): True for OMAP4430 * soc_is_omap446x(): True for OMAP4460 @@ -137,7 +133,6 @@ static inline int is_dra ##subclass ##_ ##package (void) \ return (is_dra ##subclass () && GET_DRA_PACKAGE == id) ? 1 : 0; \ } -IS_OMAP_CLASS(24xx, 0x24) IS_OMAP_CLASS(34xx, 0x34) IS_OMAP_CLASS(44xx, 0x44) IS_AM_CLASS(35xx, 0x35) @@ -148,8 +143,6 @@ IS_AM_CLASS(43xx, 0x43) IS_TI_CLASS(81xx, 0x81) IS_DRA_CLASS(7xx, 0x7) -IS_OMAP_SUBCLASS(242x, 0x242) -IS_OMAP_SUBCLASS(243x, 0x243) IS_OMAP_SUBCLASS(343x, 0x343) IS_OMAP_SUBCLASS(363x, 0x363) IS_OMAP_SUBCLASS(443x, 0x443) @@ -186,21 +179,6 @@ IS_DRA_SUBCLASS(72x, 0x72) #define soc_is_dra74x() 0 #define soc_is_dra72x() 0 -#if defined(CONFIG_ARCH_OMAP2) -# define soc_is_omap24xx() is_omap24xx() -#else -# define soc_is_omap24xx() 0 -#endif -#if defined(CONFIG_SOC_OMAP2420) -# define soc_is_omap242x() is_omap242x() -#else -# define soc_is_omap242x() 0 -#endif -#if defined(CONFIG_SOC_OMAP2430) -# define soc_is_omap243x() is_omap243x() -#else -# define soc_is_omap243x() 0 -#endif #if defined(CONFIG_ARCH_OMAP3) # define soc_is_omap34xx() is_omap34xx() # define soc_is_omap343x() is_omap343x() @@ -212,10 +190,6 @@ IS_DRA_SUBCLASS(72x, 0x72) /* * Macros to detect individual cpu types. * These are only rarely needed. - * soc_is_omap2420(): True for OMAP2420 - * soc_is_omap2422(): True for OMAP2422 - * soc_is_omap2423(): True for OMAP2423 - * soc_is_omap2430(): True for OMAP2430 * soc_is_omap3430(): True for OMAP3430 */ #define GET_OMAP_TYPE ((omap_rev() >> 16) & 0xffff) @@ -226,16 +200,8 @@ static inline int is_omap ##type (void) \ return (GET_OMAP_TYPE == (id)) ? 1 : 0; \ } -IS_OMAP_TYPE(2420, 0x2420) -IS_OMAP_TYPE(2422, 0x2422) -IS_OMAP_TYPE(2423, 0x2423) -IS_OMAP_TYPE(2430, 0x2430) IS_OMAP_TYPE(3430, 0x3430) -#define soc_is_omap2420() 0 -#define soc_is_omap2422() 0 -#define soc_is_omap2423() 0 -#define soc_is_omap2430() 0 #define soc_is_omap3430() 0 #define soc_is_omap3630() 0 #define soc_is_omap5430() 0 @@ -252,17 +218,6 @@ IS_OMAP_TYPE(3430, 0x3430) #define cpu_class_is_omap1() 0 #define cpu_class_is_omap2() 1 -#if defined(CONFIG_ARCH_OMAP2) -# undef soc_is_omap2420 -# undef soc_is_omap2422 -# undef soc_is_omap2423 -# undef soc_is_omap2430 -# define soc_is_omap2420() is_omap2420() -# define soc_is_omap2422() is_omap2422() -# define soc_is_omap2423() is_omap2423() -# define soc_is_omap2430() is_omap2430() -#endif - #if defined(CONFIG_ARCH_OMAP3) # undef soc_is_omap3430 # undef soc_is_ti81xx @@ -326,13 +281,6 @@ IS_OMAP_TYPE(3430, 0x3430) #endif /* Various silicon revisions for omap2 */ -#define OMAP242X_CLASS 0x24200024 -#define OMAP2420_REV_ES1_0 OMAP242X_CLASS -#define OMAP2420_REV_ES2_0 (OMAP242X_CLASS | (0x1 << 8)) - -#define OMAP243X_CLASS 0x24300024 -#define OMAP2430_REV_ES1_0 OMAP243X_CLASS - #define OMAP343X_CLASS 0x34300034 #define OMAP3430_REV_ES1_0 OMAP343X_CLASS #define OMAP3430_REV_ES2_0 (OMAP343X_CLASS | (0x1 << 8)) @@ -400,7 +348,6 @@ IS_OMAP_TYPE(3430, 0x3430) #define DRA722_REV_ES2_0 (DRA7XX_CLASS | (0x22 << 16) | (0x20 << 8)) #define DRA722_REV_ES2_1 (DRA7XX_CLASS | (0x22 << 16) | (0x21 << 8)) -void omap2xxx_check_revision(void); void omap3xxx_check_revision(void); void omap4xxx_check_revision(void); void omap5xxx_check_revision(void); @@ -484,12 +431,6 @@ level(__##fn); #define omap_late_initcall_sync(fn) omap_initcall(late_initcall_sync, fn) /* Legacy defines, these can be removed when users are removed */ -#define cpu_is_omap2420() soc_is_omap2420() -#define cpu_is_omap2422() soc_is_omap2422() -#define cpu_is_omap242x() soc_is_omap242x() -#define cpu_is_omap2430() soc_is_omap2430() -#define cpu_is_omap243x() soc_is_omap243x() -#define cpu_is_omap24xx() soc_is_omap24xx() #define cpu_is_omap3430() soc_is_omap3430() #define cpu_is_omap343x() soc_is_omap343x() #define cpu_is_omap34xx() soc_is_omap34xx() diff --git a/arch/arm/mach-omap2/sram.c b/arch/arm/mach-omap2/sram.c index 898b011ae8d9..8f980849f201 100644 --- a/arch/arm/mach-omap2/sram.c +++ b/arch/arm/mach-omap2/sram.c @@ -28,15 +28,10 @@ #include "sdrc.h" #include "sram.h" -#define OMAP2_SRAM_PUB_PA (OMAP2_SRAM_PA + 0xf800) #define OMAP3_SRAM_PUB_PA (OMAP3_SRAM_PA + 0x8000) #define SRAM_BOOTLOADER_SZ 0x00 -#define OMAP24XX_VA_REQINFOPERM0 OMAP2_L3_IO_ADDRESS(0x68005048) -#define OMAP24XX_VA_READPERM0 OMAP2_L3_IO_ADDRESS(0x68005050) -#define OMAP24XX_VA_WRITEPERM0 OMAP2_L3_IO_ADDRESS(0x68005058) - #define OMAP34XX_VA_REQINFOPERM0 OMAP2_L3_IO_ADDRESS(0x68012848) #define OMAP34XX_VA_READPERM0 OMAP2_L3_IO_ADDRESS(0x68012850) #define OMAP34XX_VA_WRITEPERM0 OMAP2_L3_IO_ADDRESS(0x68012858) @@ -120,18 +115,11 @@ static int is_sram_locked(void) { if (omap_type() == OMAP2_DEVICE_TYPE_GP) { /* RAMFW: R/W access to all initiators for all qualifier sets */ - if (cpu_is_omap242x()) { - writel_relaxed(0xFF, OMAP24XX_VA_REQINFOPERM0); /* all q-vects */ - writel_relaxed(0xCFDE, OMAP24XX_VA_READPERM0); /* all i-read */ - writel_relaxed(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */ - } - if (cpu_is_omap34xx()) { - writel_relaxed(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */ - writel_relaxed(0xFFFF, OMAP34XX_VA_READPERM0); /* all i-read */ - writel_relaxed(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */ - writel_relaxed(0x0, OMAP34XX_VA_ADDR_MATCH2); - writel_relaxed(0xFFFFFFFF, OMAP34XX_VA_SMS_RG_ATT0); - } + writel_relaxed(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */ + writel_relaxed(0xFFFF, OMAP34XX_VA_READPERM0); /* all i-read */ + writel_relaxed(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */ + writel_relaxed(0x0, OMAP34XX_VA_ADDR_MATCH2); + writel_relaxed(0xFFFFFFFF, OMAP34XX_VA_SMS_RG_ATT0); return 0; } else return 1; /* assume locked with no PPA or security driver */ @@ -147,30 +135,17 @@ static void __init omap_detect_sram(void) { omap_sram_skip = SRAM_BOOTLOADER_SZ; if (is_sram_locked()) { - if (cpu_is_omap34xx()) { - omap_sram_start = OMAP3_SRAM_PUB_PA; - if ((omap_type() == OMAP2_DEVICE_TYPE_EMU) || - (omap_type() == OMAP2_DEVICE_TYPE_SEC)) { - omap_sram_size = 0x7000; /* 28K */ - omap_sram_skip += SZ_16K; - } else { - omap_sram_size = 0x8000; /* 32K */ - } + omap_sram_start = OMAP3_SRAM_PUB_PA; + if ((omap_type() == OMAP2_DEVICE_TYPE_EMU) || + (omap_type() == OMAP2_DEVICE_TYPE_SEC)) { + omap_sram_size = 0x7000; /* 28K */ + omap_sram_skip += SZ_16K; } else { - omap_sram_start = OMAP2_SRAM_PUB_PA; - omap_sram_size = 0x800; /* 2K */ + omap_sram_size = 0x8000; /* 32K */ } } else { - if (cpu_is_omap34xx()) { - omap_sram_start = OMAP3_SRAM_PA; - omap_sram_size = 0x10000; /* 64K */ - } else { - omap_sram_start = OMAP2_SRAM_PA; - if (cpu_is_omap242x()) - omap_sram_size = 0xa0000; /* 640K */ - else if (cpu_is_omap243x()) - omap_sram_size = 0x10000; /* 64K */ - } + omap_sram_start = OMAP3_SRAM_PA; + omap_sram_size = 0x10000; /* 64K */ } } @@ -181,24 +156,20 @@ static void __init omap2_map_sram(void) { unsigned long base; int pages; - int cached = 1; - - if (cpu_is_omap34xx()) { - /* - * SRAM must be marked as non-cached on OMAP3 since the - * CORE DPLL M2 divider change code (in SRAM) runs with the - * SDRAM controller disabled, and if it is marked cached, - * the ARM may attempt to write cache lines back to SDRAM - * which will cause the system to hang. - */ - cached = 0; - } if (omap_sram_size == 0) return; omap_sram_start = ROUND_DOWN(omap_sram_start, PAGE_SIZE); - omap_sram_base = __arm_ioremap_exec(omap_sram_start, omap_sram_size, cached); + /* + * SRAM must be marked as non-cached on OMAP3 since the + * CORE DPLL M2 divider change code (in SRAM) runs with the + * SDRAM controller disabled, and if it is marked cached, + * the ARM may attempt to write cache lines back to SDRAM + * which will cause the system to hang. + */ + + omap_sram_base = __arm_ioremap_exec(omap_sram_start, omap_sram_size, 0); if (!omap_sram_base) { pr_err("SRAM: Could not map\n"); return; @@ -219,78 +190,6 @@ static void __init omap2_map_sram(void) set_memory_rox(base, pages); } -static void (*_omap2_sram_ddr_init)(u32 *slow_dll_ctrl, u32 fast_dll_ctrl, - u32 base_cs, u32 force_unlock); - -void omap2_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl, - u32 base_cs, u32 force_unlock) -{ - BUG_ON(!_omap2_sram_ddr_init); - _omap2_sram_ddr_init(slow_dll_ctrl, fast_dll_ctrl, - base_cs, force_unlock); -} - -static void (*_omap2_sram_reprogram_sdrc)(u32 perf_level, u32 dll_val, - u32 mem_type); - -void omap2_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, u32 mem_type) -{ - BUG_ON(!_omap2_sram_reprogram_sdrc); - _omap2_sram_reprogram_sdrc(perf_level, dll_val, mem_type); -} - -static u32 (*_omap2_set_prcm)(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass); - -u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass) -{ - BUG_ON(!_omap2_set_prcm); - return _omap2_set_prcm(dpll_ctrl_val, sdrc_rfr_val, bypass); -} - -#ifdef CONFIG_SOC_OMAP2420 -static int __init omap242x_sram_init(void) -{ - _omap2_sram_ddr_init = omap_sram_push(omap242x_sram_ddr_init, - omap242x_sram_ddr_init_sz); - - _omap2_sram_reprogram_sdrc = omap_sram_push(omap242x_sram_reprogram_sdrc, - omap242x_sram_reprogram_sdrc_sz); - - _omap2_set_prcm = omap_sram_push(omap242x_sram_set_prcm, - omap242x_sram_set_prcm_sz); - - return 0; -} -#else -static inline int omap242x_sram_init(void) -{ - return 0; -} -#endif - -#ifdef CONFIG_SOC_OMAP2430 -static int __init omap243x_sram_init(void) -{ - _omap2_sram_ddr_init = omap_sram_push(omap243x_sram_ddr_init, - omap243x_sram_ddr_init_sz); - - _omap2_sram_reprogram_sdrc = omap_sram_push(omap243x_sram_reprogram_sdrc, - omap243x_sram_reprogram_sdrc_sz); - - _omap2_set_prcm = omap_sram_push(omap243x_sram_set_prcm, - omap243x_sram_set_prcm_sz); - - return 0; -} -#else -static inline int omap243x_sram_init(void) -{ - return 0; -} -#endif - -#ifdef CONFIG_ARCH_OMAP3 - void omap3_sram_restore_context(void) { omap_sram_reset(); @@ -303,24 +202,12 @@ static inline int omap34xx_sram_init(void) omap3_sram_restore_context(); return 0; } -#else -static inline int omap34xx_sram_init(void) -{ - return 0; -} -#endif /* CONFIG_ARCH_OMAP3 */ int __init omap_sram_init(void) { omap_detect_sram(); omap2_map_sram(); - - if (cpu_is_omap242x()) - omap242x_sram_init(); - else if (cpu_is_omap2430()) - omap243x_sram_init(); - else if (cpu_is_omap34xx()) - omap34xx_sram_init(); + omap34xx_sram_init(); return 0; } diff --git a/arch/arm/mach-omap2/sram.h b/arch/arm/mach-omap2/sram.h index 030cabc39821..2db2c4598cdb 100644 --- a/arch/arm/mach-omap2/sram.h +++ b/arch/arm/mach-omap2/sram.h @@ -5,43 +5,12 @@ #ifndef __ASSEMBLY__ -extern void omap2_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl, - u32 base_cs, u32 force_unlock); -extern void omap2_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, - u32 mem_type); -extern u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass); - extern void omap3_sram_restore_context(void); extern int __init omap_sram_init(void); extern void *omap_sram_push(void *funcp, unsigned long size); -extern void omap242x_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl, - u32 base_cs, u32 force_unlock); -extern unsigned long omap242x_sram_ddr_init_sz; - -extern u32 omap242x_sram_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, - int bypass); -extern unsigned long omap242x_sram_set_prcm_sz; - -extern void omap242x_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, - u32 mem_type); -extern unsigned long omap242x_sram_reprogram_sdrc_sz; - - -extern void omap243x_sram_ddr_init(u32 *slow_dll_ctrl, u32 fast_dll_ctrl, - u32 base_cs, u32 force_unlock); -extern unsigned long omap243x_sram_ddr_init_sz; - -extern u32 omap243x_sram_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, - int bypass); -extern unsigned long omap243x_sram_set_prcm_sz; - -extern void omap243x_sram_reprogram_sdrc(u32 perf_level, u32 dll_val, - u32 mem_type); -extern unsigned long omap243x_sram_reprogram_sdrc_sz; - #ifdef CONFIG_PM extern void omap_push_sram_idle(void); #else @@ -54,5 +23,4 @@ static inline void omap_push_sram_idle(void) {} * OMAP2+: define the SRAM PA addresses. * Used by the SRAM management code and the idle sleep code. */ -#define OMAP2_SRAM_PA 0x40200000 #define OMAP3_SRAM_PA 0x40200000 diff --git a/arch/arm/mach-omap2/sram242x.S b/arch/arm/mach-omap2/sram242x.S deleted file mode 100644 index 92ef21ac2ac1..000000000000 --- a/arch/arm/mach-omap2/sram242x.S +++ /dev/null @@ -1,317 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * linux/arch/arm/mach-omap2/sram242x.S - * - * Omap2 specific functions that need to be run in internal SRAM - * - * (C) Copyright 2004 - * Texas Instruments, - * Richard Woodruff - * - * Richard Woodruff notes that any changes to this code must be carefully - * audited and tested to ensure that they don't cause a TLB miss while - * the SDRAM is inaccessible. Such a situation will crash the system - * since it will cause the ARM MMU to attempt to walk the page tables. - * These crashes may be intermittent. - */ -#include - -#include - -#include "soc.h" -#include "iomap.h" -#include "prm2xxx.h" -#include "cm2xxx.h" -#include "sdrc.h" - - .text - - .align 3 -ENTRY(omap242x_sram_ddr_init) - stmfd sp!, {r0 - r12, lr} @ save registers on stack - - mov r12, r2 @ capture CS1 vs CS0 - mov r8, r3 @ capture force parameter - - /* frequency shift down */ - ldr r2, omap242x_sdi_cm_clksel2_pll @ get address of dpllout reg - mov r3, #0x1 @ value for 1x operation - str r3, [r2] @ go to L1-freq operation - - /* voltage shift down */ - mov r9, #0x1 @ set up for L1 voltage call - bl voltage_shift @ go drop voltage - - /* dll lock mode */ - ldr r11, omap242x_sdi_sdrc_dlla_ctrl @ addr of dlla ctrl - ldr r10, [r11] @ get current val - cmp r12, #0x1 @ cs1 base (2422 es2.05/1) - addeq r11, r11, #0x8 @ if cs1 base, move to DLLB - mvn r9, #0x4 @ mask to get clear bit2 - and r10, r10, r9 @ clear bit2 for lock mode. - orr r10, r10, #0x8 @ make sure DLL on (es2 bit pos) - orr r10, r10, #0x2 @ 90 degree phase for all below 133MHz - str r10, [r11] @ commit to DLLA_CTRL - bl i_dll_wait @ wait for dll to lock - - /* get dll value */ - add r11, r11, #0x4 @ get addr of status reg - ldr r10, [r11] @ get locked value - - /* voltage shift up */ - mov r9, #0x0 @ shift back to L0-voltage - bl voltage_shift @ go raise voltage - - /* frequency shift up */ - mov r3, #0x2 @ value for 2x operation - str r3, [r2] @ go to L0-freq operation - - /* reset entry mode for dllctrl */ - sub r11, r11, #0x4 @ move from status to ctrl - cmp r12, #0x1 @ normalize if cs1 based - subeq r11, r11, #0x8 @ possibly back to DLLA - cmp r8, #0x1 @ if forced unlock exit - orreq r1, r1, #0x4 @ make sure exit with unlocked value - str r1, [r11] @ restore DLLA_CTRL high value - add r11, r11, #0x8 @ move to DLLB_CTRL addr - str r1, [r11] @ set value DLLB_CTRL - bl i_dll_wait @ wait for possible lock - - /* set up for return, DDR should be good */ - str r10, [r0] @ write dll_status and return counter - ldmfd sp!, {r0 - r12, pc} @ restore regs and return - - /* ensure the DLL has relocked */ -i_dll_wait: - mov r4, #0x800 @ delay DLL relock, min 0x400 L3 clocks -i_dll_delay: - subs r4, r4, #0x1 - bne i_dll_delay - ret lr - - /* - * shift up or down voltage, use R9 as input to tell level. - * wait for it to finish, use 32k sync counter, 1tick=31uS. - */ -voltage_shift: - ldr r4, omap242x_sdi_prcm_voltctrl @ get addr of volt ctrl. - ldr r5, [r4] @ get value. - ldr r6, prcm_mask_val @ get value of mask - and r5, r5, r6 @ apply mask to clear bits - orr r5, r5, r9 @ bulld value for L0/L1-volt operation. - str r5, [r4] @ set up for change. - mov r3, #0x4000 @ get val for force - orr r5, r5, r3 @ build value for force - str r5, [r4] @ Force transition to L1 - - ldr r3, omap242x_sdi_timer_32ksynct_cr @ get addr of counter - ldr r5, [r3] @ get value - add r5, r5, #0x3 @ give it at most 93uS -volt_delay: - ldr r7, [r3] @ get timer value - cmp r5, r7 @ time up? - bhi volt_delay @ not yet->branch - ret lr @ back to caller. - -omap242x_sdi_cm_clksel2_pll: - .word OMAP2420_CM_REGADDR(PLL_MOD, CM_CLKSEL2) -omap242x_sdi_sdrc_dlla_ctrl: - .word OMAP242X_SDRC_REGADDR(SDRC_DLLA_CTRL) -omap242x_sdi_prcm_voltctrl: - .word OMAP2420_PRCM_VOLTCTRL -prcm_mask_val: - .word 0xFFFF3FFC -omap242x_sdi_timer_32ksynct_cr: - .word OMAP2_L4_IO_ADDRESS(OMAP2420_32KSYNCT_BASE + 0x010) -ENTRY(omap242x_sram_ddr_init_sz) - .word . - omap242x_sram_ddr_init - -/* - * Reprograms memory timings. - * r0 = [PRCM_FULL | PRCM_HALF] r1 = SDRC_DLLA_CTRL value r2 = [DDR | SDR] - * PRCM_FULL = 2, PRCM_HALF = 1, DDR = 1, SDR = 0 - */ - .align 3 -ENTRY(omap242x_sram_reprogram_sdrc) - stmfd sp!, {r0 - r10, lr} @ save registers on stack - mov r3, #0x0 @ clear for mrc call - mcr p15, 0, r3, c7, c10, 4 @ memory barrier, finish ARM SDR/DDR - nop - nop - ldr r6, omap242x_srs_sdrc_rfr_ctrl @ get addr of refresh reg - ldr r5, [r6] @ get value - mov r5, r5, lsr #8 @ isolate rfr field and drop burst - - cmp r0, #0x1 @ going to half speed? - movne r9, #0x0 @ if up set flag up for pre up, hi volt - - blne voltage_shift_c @ adjust voltage - - cmp r0, #0x1 @ going to half speed (post branch link) - moveq r5, r5, lsr #1 @ divide by 2 if to half - movne r5, r5, lsl #1 @ mult by 2 if to full - mov r5, r5, lsl #8 @ put rfr field back into place - add r5, r5, #0x1 @ turn on burst of 1 - ldr r4, omap242x_srs_cm_clksel2_pll @ get address of out reg - ldr r3, [r4] @ get curr value - orr r3, r3, #0x3 - bic r3, r3, #0x3 @ clear lower bits - orr r3, r3, r0 @ new state value - str r3, [r4] @ set new state (pll/x, x=1 or 2) - nop - nop - - moveq r9, #0x1 @ if speed down, post down, drop volt - bleq voltage_shift_c - - mcr p15, 0, r3, c7, c10, 4 @ memory barrier - str r5, [r6] @ set new RFR_1 value - add r6, r6, #0x30 @ get RFR_2 addr - str r5, [r6] @ set RFR_2 - nop - cmp r2, #0x1 @ (SDR or DDR) do we need to adjust DLL - bne freq_out @ leave if SDR, no DLL function - - /* With DDR, we need to take care of the DLL for the frequency change */ - ldr r2, omap242x_srs_sdrc_dlla_ctrl @ addr of dlla ctrl - str r1, [r2] @ write out new SDRC_DLLA_CTRL - add r2, r2, #0x8 @ addr to SDRC_DLLB_CTRL - str r1, [r2] @ commit to SDRC_DLLB_CTRL - mov r1, #0x2000 @ wait DLL relock, min 0x400 L3 clocks -dll_wait: - subs r1, r1, #0x1 - bne dll_wait -freq_out: - ldmfd sp!, {r0 - r10, pc} @ restore regs and return - - /* - * shift up or down voltage, use R9 as input to tell level. - * wait for it to finish, use 32k sync counter, 1tick=31uS. - */ -voltage_shift_c: - ldr r10, omap242x_srs_prcm_voltctrl @ get addr of volt ctrl - ldr r8, [r10] @ get value - ldr r7, ddr_prcm_mask_val @ get value of mask - and r8, r8, r7 @ apply mask to clear bits - orr r8, r8, r9 @ bulld value for L0/L1-volt operation. - str r8, [r10] @ set up for change. - mov r7, #0x4000 @ get val for force - orr r8, r8, r7 @ build value for force - str r8, [r10] @ Force transition to L1 - - ldr r10, omap242x_srs_timer_32ksynct @ get addr of counter - ldr r8, [r10] @ get value - add r8, r8, #0x2 @ give it at most 62uS (min 31+) -volt_delay_c: - ldr r7, [r10] @ get timer value - cmp r8, r7 @ time up? - bhi volt_delay_c @ not yet->branch - ret lr @ back to caller - -omap242x_srs_cm_clksel2_pll: - .word OMAP2420_CM_REGADDR(PLL_MOD, CM_CLKSEL2) -omap242x_srs_sdrc_dlla_ctrl: - .word OMAP242X_SDRC_REGADDR(SDRC_DLLA_CTRL) -omap242x_srs_sdrc_rfr_ctrl: - .word OMAP242X_SDRC_REGADDR(SDRC_RFR_CTRL_0) -omap242x_srs_prcm_voltctrl: - .word OMAP2420_PRCM_VOLTCTRL -ddr_prcm_mask_val: - .word 0xFFFF3FFC -omap242x_srs_timer_32ksynct: - .word OMAP2_L4_IO_ADDRESS(OMAP2420_32KSYNCT_BASE + 0x010) - -ENTRY(omap242x_sram_reprogram_sdrc_sz) - .word . - omap242x_sram_reprogram_sdrc - -/* - * Set dividers and pll. Also recalculate DLL value for DDR and unlock mode. - */ - .align 3 -ENTRY(omap242x_sram_set_prcm) - stmfd sp!, {r0-r12, lr} @ regs to stack - adr r4, pbegin @ addr of preload start - adr r8, pend @ addr of preload end - mcrr p15, 1, r8, r4, c12 @ preload into icache -pbegin: - /* move into fast relock bypass */ - ldr r8, omap242x_ssp_pll_ctl @ get addr - ldr r5, [r8] @ get val - mvn r6, #0x3 @ clear mask - and r5, r5, r6 @ clear field - orr r7, r5, #0x2 @ fast relock val - str r7, [r8] @ go to fast relock - ldr r4, omap242x_ssp_pll_stat @ addr of stat -block: - /* wait for bypass */ - ldr r8, [r4] @ stat value - and r8, r8, #0x3 @ mask for stat - cmp r8, #0x1 @ there yet - bne block @ loop if not - - /* set new dpll dividers _after_ in bypass */ - ldr r4, omap242x_ssp_pll_div @ get addr - str r0, [r4] @ set dpll ctrl val - - ldr r4, omap242x_ssp_set_config @ get addr - mov r8, #1 @ valid cfg msk - str r8, [r4] @ make dividers take - - mov r4, #100 @ dead spin a bit -wait_a_bit: - subs r4, r4, #1 @ dec loop - bne wait_a_bit @ delay done? - - /* check if staying in bypass */ - cmp r2, #0x1 @ stay in bypass? - beq pend @ jump over dpll relock - - /* relock DPLL with new vals */ - ldr r5, omap242x_ssp_pll_stat @ get addr - ldr r4, omap242x_ssp_pll_ctl @ get addr - orr r8, r7, #0x3 @ val for lock dpll - str r8, [r4] @ set val - mov r0, #1000 @ dead spin a bit -wait_more: - subs r0, r0, #1 @ dec loop - bne wait_more @ delay done? -wait_lock: - ldr r8, [r5] @ get lock val - and r8, r8, #3 @ isolate field - cmp r8, #2 @ locked? - bne wait_lock @ wait if not -pend: - /* update memory timings & briefly lock dll */ - ldr r4, omap242x_ssp_sdrc_rfr @ get addr - str r1, [r4] @ update refresh timing - ldr r11, omap242x_ssp_dlla_ctrl @ get addr of DLLA ctrl - ldr r10, [r11] @ get current val - mvn r9, #0x4 @ mask to get clear bit2 - and r10, r10, r9 @ clear bit2 for lock mode - orr r10, r10, #0x8 @ make sure DLL on (es2 bit pos) - str r10, [r11] @ commit to DLLA_CTRL - add r11, r11, #0x8 @ move to dllb - str r10, [r11] @ hit DLLB also - - mov r4, #0x800 @ relock time (min 0x400 L3 clocks) -wait_dll_lock: - subs r4, r4, #0x1 - bne wait_dll_lock - nop - ldmfd sp!, {r0-r12, pc} @ restore regs and return - -omap242x_ssp_set_config: - .word OMAP2420_PRCM_CLKCFG_CTRL -omap242x_ssp_pll_ctl: - .word OMAP2420_CM_REGADDR(PLL_MOD, CM_CLKEN) -omap242x_ssp_pll_stat: - .word OMAP2420_CM_REGADDR(PLL_MOD, CM_IDLEST) -omap242x_ssp_pll_div: - .word OMAP2420_CM_REGADDR(PLL_MOD, CM_CLKSEL1) -omap242x_ssp_sdrc_rfr: - .word OMAP242X_SDRC_REGADDR(SDRC_RFR_CTRL_0) -omap242x_ssp_dlla_ctrl: - .word OMAP242X_SDRC_REGADDR(SDRC_DLLA_CTRL) - -ENTRY(omap242x_sram_set_prcm_sz) - .word . - omap242x_sram_set_prcm diff --git a/arch/arm/mach-omap2/sram243x.S b/arch/arm/mach-omap2/sram243x.S deleted file mode 100644 index faf03b7f08f5..000000000000 --- a/arch/arm/mach-omap2/sram243x.S +++ /dev/null @@ -1,317 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-or-later */ -/* - * linux/arch/arm/mach-omap2/sram243x.S - * - * Omap2 specific functions that need to be run in internal SRAM - * - * (C) Copyright 2004 - * Texas Instruments, - * Richard Woodruff - * - * Richard Woodruff notes that any changes to this code must be carefully - * audited and tested to ensure that they don't cause a TLB miss while - * the SDRAM is inaccessible. Such a situation will crash the system - * since it will cause the ARM MMU to attempt to walk the page tables. - * These crashes may be intermittent. - */ -#include - -#include - -#include "soc.h" -#include "iomap.h" -#include "prm2xxx.h" -#include "cm2xxx.h" -#include "sdrc.h" - - .text - - .align 3 -ENTRY(omap243x_sram_ddr_init) - stmfd sp!, {r0 - r12, lr} @ save registers on stack - - mov r12, r2 @ capture CS1 vs CS0 - mov r8, r3 @ capture force parameter - - /* frequency shift down */ - ldr r2, omap243x_sdi_cm_clksel2_pll @ get address of dpllout reg - mov r3, #0x1 @ value for 1x operation - str r3, [r2] @ go to L1-freq operation - - /* voltage shift down */ - mov r9, #0x1 @ set up for L1 voltage call - bl voltage_shift @ go drop voltage - - /* dll lock mode */ - ldr r11, omap243x_sdi_sdrc_dlla_ctrl @ addr of dlla ctrl - ldr r10, [r11] @ get current val - cmp r12, #0x1 @ cs1 base (2422 es2.05/1) - addeq r11, r11, #0x8 @ if cs1 base, move to DLLB - mvn r9, #0x4 @ mask to get clear bit2 - and r10, r10, r9 @ clear bit2 for lock mode. - orr r10, r10, #0x8 @ make sure DLL on (es2 bit pos) - orr r10, r10, #0x2 @ 90 degree phase for all below 133MHz - str r10, [r11] @ commit to DLLA_CTRL - bl i_dll_wait @ wait for dll to lock - - /* get dll value */ - add r11, r11, #0x4 @ get addr of status reg - ldr r10, [r11] @ get locked value - - /* voltage shift up */ - mov r9, #0x0 @ shift back to L0-voltage - bl voltage_shift @ go raise voltage - - /* frequency shift up */ - mov r3, #0x2 @ value for 2x operation - str r3, [r2] @ go to L0-freq operation - - /* reset entry mode for dllctrl */ - sub r11, r11, #0x4 @ move from status to ctrl - cmp r12, #0x1 @ normalize if cs1 based - subeq r11, r11, #0x8 @ possibly back to DLLA - cmp r8, #0x1 @ if forced unlock exit - orreq r1, r1, #0x4 @ make sure exit with unlocked value - str r1, [r11] @ restore DLLA_CTRL high value - add r11, r11, #0x8 @ move to DLLB_CTRL addr - str r1, [r11] @ set value DLLB_CTRL - bl i_dll_wait @ wait for possible lock - - /* set up for return, DDR should be good */ - str r10, [r0] @ write dll_status and return counter - ldmfd sp!, {r0 - r12, pc} @ restore regs and return - - /* ensure the DLL has relocked */ -i_dll_wait: - mov r4, #0x800 @ delay DLL relock, min 0x400 L3 clocks -i_dll_delay: - subs r4, r4, #0x1 - bne i_dll_delay - ret lr - - /* - * shift up or down voltage, use R9 as input to tell level. - * wait for it to finish, use 32k sync counter, 1tick=31uS. - */ -voltage_shift: - ldr r4, omap243x_sdi_prcm_voltctrl @ get addr of volt ctrl. - ldr r5, [r4] @ get value. - ldr r6, prcm_mask_val @ get value of mask - and r5, r5, r6 @ apply mask to clear bits - orr r5, r5, r9 @ bulld value for L0/L1-volt operation. - str r5, [r4] @ set up for change. - mov r3, #0x4000 @ get val for force - orr r5, r5, r3 @ build value for force - str r5, [r4] @ Force transition to L1 - - ldr r3, omap243x_sdi_timer_32ksynct_cr @ get addr of counter - ldr r5, [r3] @ get value - add r5, r5, #0x3 @ give it at most 93uS -volt_delay: - ldr r7, [r3] @ get timer value - cmp r5, r7 @ time up? - bhi volt_delay @ not yet->branch - ret lr @ back to caller. - -omap243x_sdi_cm_clksel2_pll: - .word OMAP2430_CM_REGADDR(PLL_MOD, CM_CLKSEL2) -omap243x_sdi_sdrc_dlla_ctrl: - .word OMAP243X_SDRC_REGADDR(SDRC_DLLA_CTRL) -omap243x_sdi_prcm_voltctrl: - .word OMAP2430_PRCM_VOLTCTRL -prcm_mask_val: - .word 0xFFFF3FFC -omap243x_sdi_timer_32ksynct_cr: - .word OMAP2_L4_IO_ADDRESS(OMAP2430_32KSYNCT_BASE + 0x010) -ENTRY(omap243x_sram_ddr_init_sz) - .word . - omap243x_sram_ddr_init - -/* - * Reprograms memory timings. - * r0 = [PRCM_FULL | PRCM_HALF] r1 = SDRC_DLLA_CTRL value r2 = [DDR | SDR] - * PRCM_FULL = 2, PRCM_HALF = 1, DDR = 1, SDR = 0 - */ - .align 3 -ENTRY(omap243x_sram_reprogram_sdrc) - stmfd sp!, {r0 - r10, lr} @ save registers on stack - mov r3, #0x0 @ clear for mrc call - mcr p15, 0, r3, c7, c10, 4 @ memory barrier, finish ARM SDR/DDR - nop - nop - ldr r6, omap243x_srs_sdrc_rfr_ctrl @ get addr of refresh reg - ldr r5, [r6] @ get value - mov r5, r5, lsr #8 @ isolate rfr field and drop burst - - cmp r0, #0x1 @ going to half speed? - movne r9, #0x0 @ if up set flag up for pre up, hi volt - - blne voltage_shift_c @ adjust voltage - - cmp r0, #0x1 @ going to half speed (post branch link) - moveq r5, r5, lsr #1 @ divide by 2 if to half - movne r5, r5, lsl #1 @ mult by 2 if to full - mov r5, r5, lsl #8 @ put rfr field back into place - add r5, r5, #0x1 @ turn on burst of 1 - ldr r4, omap243x_srs_cm_clksel2_pll @ get address of out reg - ldr r3, [r4] @ get curr value - orr r3, r3, #0x3 - bic r3, r3, #0x3 @ clear lower bits - orr r3, r3, r0 @ new state value - str r3, [r4] @ set new state (pll/x, x=1 or 2) - nop - nop - - moveq r9, #0x1 @ if speed down, post down, drop volt - bleq voltage_shift_c - - mcr p15, 0, r3, c7, c10, 4 @ memory barrier - str r5, [r6] @ set new RFR_1 value - add r6, r6, #0x30 @ get RFR_2 addr - str r5, [r6] @ set RFR_2 - nop - cmp r2, #0x1 @ (SDR or DDR) do we need to adjust DLL - bne freq_out @ leave if SDR, no DLL function - - /* With DDR, we need to take care of the DLL for the frequency change */ - ldr r2, omap243x_srs_sdrc_dlla_ctrl @ addr of dlla ctrl - str r1, [r2] @ write out new SDRC_DLLA_CTRL - add r2, r2, #0x8 @ addr to SDRC_DLLB_CTRL - str r1, [r2] @ commit to SDRC_DLLB_CTRL - mov r1, #0x2000 @ wait DLL relock, min 0x400 L3 clocks -dll_wait: - subs r1, r1, #0x1 - bne dll_wait -freq_out: - ldmfd sp!, {r0 - r10, pc} @ restore regs and return - - /* - * shift up or down voltage, use R9 as input to tell level. - * wait for it to finish, use 32k sync counter, 1tick=31uS. - */ -voltage_shift_c: - ldr r10, omap243x_srs_prcm_voltctrl @ get addr of volt ctrl - ldr r8, [r10] @ get value - ldr r7, ddr_prcm_mask_val @ get value of mask - and r8, r8, r7 @ apply mask to clear bits - orr r8, r8, r9 @ bulld value for L0/L1-volt operation. - str r8, [r10] @ set up for change. - mov r7, #0x4000 @ get val for force - orr r8, r8, r7 @ build value for force - str r8, [r10] @ Force transition to L1 - - ldr r10, omap243x_srs_timer_32ksynct @ get addr of counter - ldr r8, [r10] @ get value - add r8, r8, #0x2 @ give it at most 62uS (min 31+) -volt_delay_c: - ldr r7, [r10] @ get timer value - cmp r8, r7 @ time up? - bhi volt_delay_c @ not yet->branch - ret lr @ back to caller - -omap243x_srs_cm_clksel2_pll: - .word OMAP2430_CM_REGADDR(PLL_MOD, CM_CLKSEL2) -omap243x_srs_sdrc_dlla_ctrl: - .word OMAP243X_SDRC_REGADDR(SDRC_DLLA_CTRL) -omap243x_srs_sdrc_rfr_ctrl: - .word OMAP243X_SDRC_REGADDR(SDRC_RFR_CTRL_0) -omap243x_srs_prcm_voltctrl: - .word OMAP2430_PRCM_VOLTCTRL -ddr_prcm_mask_val: - .word 0xFFFF3FFC -omap243x_srs_timer_32ksynct: - .word OMAP2_L4_IO_ADDRESS(OMAP2430_32KSYNCT_BASE + 0x010) - -ENTRY(omap243x_sram_reprogram_sdrc_sz) - .word . - omap243x_sram_reprogram_sdrc - -/* - * Set dividers and pll. Also recalculate DLL value for DDR and unlock mode. - */ - .align 3 -ENTRY(omap243x_sram_set_prcm) - stmfd sp!, {r0-r12, lr} @ regs to stack - adr r4, pbegin @ addr of preload start - adr r8, pend @ addr of preload end - mcrr p15, 1, r8, r4, c12 @ preload into icache -pbegin: - /* move into fast relock bypass */ - ldr r8, omap243x_ssp_pll_ctl @ get addr - ldr r5, [r8] @ get val - mvn r6, #0x3 @ clear mask - and r5, r5, r6 @ clear field - orr r7, r5, #0x2 @ fast relock val - str r7, [r8] @ go to fast relock - ldr r4, omap243x_ssp_pll_stat @ addr of stat -block: - /* wait for bypass */ - ldr r8, [r4] @ stat value - and r8, r8, #0x3 @ mask for stat - cmp r8, #0x1 @ there yet - bne block @ loop if not - - /* set new dpll dividers _after_ in bypass */ - ldr r4, omap243x_ssp_pll_div @ get addr - str r0, [r4] @ set dpll ctrl val - - ldr r4, omap243x_ssp_set_config @ get addr - mov r8, #1 @ valid cfg msk - str r8, [r4] @ make dividers take - - mov r4, #100 @ dead spin a bit -wait_a_bit: - subs r4, r4, #1 @ dec loop - bne wait_a_bit @ delay done? - - /* check if staying in bypass */ - cmp r2, #0x1 @ stay in bypass? - beq pend @ jump over dpll relock - - /* relock DPLL with new vals */ - ldr r5, omap243x_ssp_pll_stat @ get addr - ldr r4, omap243x_ssp_pll_ctl @ get addr - orr r8, r7, #0x3 @ val for lock dpll - str r8, [r4] @ set val - mov r0, #1000 @ dead spin a bit -wait_more: - subs r0, r0, #1 @ dec loop - bne wait_more @ delay done? -wait_lock: - ldr r8, [r5] @ get lock val - and r8, r8, #3 @ isolate field - cmp r8, #2 @ locked? - bne wait_lock @ wait if not -pend: - /* update memory timings & briefly lock dll */ - ldr r4, omap243x_ssp_sdrc_rfr @ get addr - str r1, [r4] @ update refresh timing - ldr r11, omap243x_ssp_dlla_ctrl @ get addr of DLLA ctrl - ldr r10, [r11] @ get current val - mvn r9, #0x4 @ mask to get clear bit2 - and r10, r10, r9 @ clear bit2 for lock mode - orr r10, r10, #0x8 @ make sure DLL on (es2 bit pos) - str r10, [r11] @ commit to DLLA_CTRL - add r11, r11, #0x8 @ move to dllb - str r10, [r11] @ hit DLLB also - - mov r4, #0x800 @ relock time (min 0x400 L3 clocks) -wait_dll_lock: - subs r4, r4, #0x1 - bne wait_dll_lock - nop - ldmfd sp!, {r0-r12, pc} @ restore regs and return - -omap243x_ssp_set_config: - .word OMAP2430_PRCM_CLKCFG_CTRL -omap243x_ssp_pll_ctl: - .word OMAP2430_CM_REGADDR(PLL_MOD, CM_CLKEN) -omap243x_ssp_pll_stat: - .word OMAP2430_CM_REGADDR(PLL_MOD, CM_IDLEST) -omap243x_ssp_pll_div: - .word OMAP2430_CM_REGADDR(PLL_MOD, CM_CLKSEL1) -omap243x_ssp_sdrc_rfr: - .word OMAP243X_SDRC_REGADDR(SDRC_RFR_CTRL_0) -omap243x_ssp_dlla_ctrl: - .word OMAP243X_SDRC_REGADDR(SDRC_DLLA_CTRL) - -ENTRY(omap243x_sram_set_prcm_sz) - .word . - omap243x_sram_set_prcm diff --git a/arch/arm/mach-omap2/usb-tusb6010.c b/arch/arm/mach-omap2/usb-tusb6010.c deleted file mode 100644 index b46c254c2bc4..000000000000 --- a/arch/arm/mach-omap2/usb-tusb6010.c +++ /dev/null @@ -1,217 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * linux/arch/arm/mach-omap2/usb-tusb6010.c - * - * Copyright (C) 2006 Nokia Corporation - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "usb-tusb6010.h" -#include "gpmc.h" - -static u8 async_cs, sync_cs; -static unsigned refclk_psec; - -static struct gpmc_settings tusb_async = { - .wait_on_read = true, - .wait_on_write = true, - .device_width = GPMC_DEVWIDTH_16BIT, - .mux_add_data = GPMC_MUX_AD, -}; - -static struct gpmc_settings tusb_sync = { - .burst_read = true, - .burst_write = true, - .sync_read = true, - .sync_write = true, - .wait_on_read = true, - .wait_on_write = true, - .burst_len = GPMC_BURST_16, - .device_width = GPMC_DEVWIDTH_16BIT, - .mux_add_data = GPMC_MUX_AD, -}; - -/* NOTE: timings are from tusb 6010 datasheet Rev 1.8, 12-Sept 2006 */ - -static int tusb_set_async_mode(unsigned sysclk_ps) -{ - struct gpmc_device_timings dev_t; - struct gpmc_timings t; - unsigned t_acsnh_advnh = sysclk_ps + 3000; - - memset(&dev_t, 0, sizeof(dev_t)); - - dev_t.t_ceasu = 8 * 1000; - dev_t.t_avdasu = t_acsnh_advnh - 7000; - dev_t.t_ce_avd = 1000; - dev_t.t_avdp_r = t_acsnh_advnh; - dev_t.t_oeasu = t_acsnh_advnh + 1000; - dev_t.t_oe = 300; - dev_t.t_cez_r = 7000; - dev_t.t_cez_w = dev_t.t_cez_r; - dev_t.t_avdp_w = t_acsnh_advnh; - dev_t.t_weasu = t_acsnh_advnh + 1000; - dev_t.t_wpl = 300; - dev_t.cyc_aavdh_we = 1; - - gpmc_calc_timings(&t, &tusb_async, &dev_t); - - return gpmc_cs_set_timings(async_cs, &t, &tusb_async); -} - -static int tusb_set_sync_mode(unsigned sysclk_ps) -{ - struct gpmc_device_timings dev_t; - struct gpmc_timings t; - unsigned t_scsnh_advnh = sysclk_ps + 3000; - - memset(&dev_t, 0, sizeof(dev_t)); - - dev_t.clk = 11100; - dev_t.t_bacc = 1000; - dev_t.t_ces = 1000; - dev_t.t_ceasu = 8 * 1000; - dev_t.t_avdasu = t_scsnh_advnh - 7000; - dev_t.t_ce_avd = 1000; - dev_t.t_avdp_r = t_scsnh_advnh; - dev_t.cyc_aavdh_oe = 3; - dev_t.cyc_oe = 5; - dev_t.t_ce_rdyz = 7000; - dev_t.t_avdp_w = t_scsnh_advnh; - dev_t.cyc_aavdh_we = 3; - dev_t.cyc_wpl = 6; - - gpmc_calc_timings(&t, &tusb_sync, &dev_t); - - return gpmc_cs_set_timings(sync_cs, &t, &tusb_sync); -} - -/* tusb driver calls this when it changes the chip's clocking */ -static int tusb6010_platform_retime(unsigned is_refclk) -{ - static const char error[] = - KERN_ERR "tusb6010 %s retime error %d\n"; - - unsigned sysclk_ps; - int status; - - if (!refclk_psec) - return -ENODEV; - - sysclk_ps = is_refclk ? refclk_psec : TUSB6010_OSCCLK_60; - - status = tusb_set_async_mode(sysclk_ps); - if (status < 0) { - printk(error, "async", status); - goto done; - } - status = tusb_set_sync_mode(sysclk_ps); - if (status < 0) - printk(error, "sync", status); -done: - return status; -} - -static struct resource tusb_resources[] = { - /* Order is significant! The start/end fields - * are updated during setup.. - */ - { /* Asynchronous access */ - .flags = IORESOURCE_MEM, - }, - { /* Synchronous access */ - .flags = IORESOURCE_MEM, - }, -}; - -static u64 tusb_dmamask = ~(u32)0; - -static struct platform_device tusb_device = { - .name = "musb-tusb", - .id = -1, - .dev = { - .dma_mask = &tusb_dmamask, - .coherent_dma_mask = 0xffffffff, - }, - .num_resources = ARRAY_SIZE(tusb_resources), - .resource = tusb_resources, -}; - - -/* this may be called only from board-*.c setup code */ -int __init tusb6010_setup_interface(struct musb_hdrc_platform_data *data, - unsigned int ps_refclk, unsigned int waitpin, - unsigned int async, unsigned int sync, - unsigned int dmachan) -{ - int status; - static char error[] __initdata = - KERN_ERR "tusb6010 init error %d, %d\n"; - - /* ASYNC region, primarily for PIO */ - status = gpmc_cs_request(async, SZ_16M, (unsigned long *) - &tusb_resources[0].start); - if (status < 0) { - printk(error, 1, status); - return status; - } - tusb_resources[0].end = tusb_resources[0].start + 0x9ff; - tusb_async.wait_pin = waitpin; - async_cs = async; - - status = gpmc_cs_program_settings(async_cs, &tusb_async); - if (status < 0) - return status; - - /* SYNC region, primarily for DMA */ - status = gpmc_cs_request(sync, SZ_16M, (unsigned long *) - &tusb_resources[1].start); - if (status < 0) { - printk(error, 2, status); - return status; - } - tusb_resources[1].end = tusb_resources[1].start + 0x9ff; - tusb_sync.wait_pin = waitpin; - sync_cs = sync; - - status = gpmc_cs_program_settings(sync_cs, &tusb_sync); - if (status < 0) - return status; - - /* set up memory timings ... can speed them up later */ - if (!ps_refclk) { - printk(error, 4, status); - return -ENODEV; - } - refclk_psec = ps_refclk; - status = tusb6010_platform_retime(1); - if (status < 0) { - printk(error, 5, status); - return status; - } - - /* finish device setup ... */ - if (!data) { - printk(error, 6, status); - return -ENODEV; - } - tusb_device.dev.platform_data = data; - - /* so far so good ... register the device */ - status = platform_device_register(&tusb_device); - if (status < 0) { - printk(error, 7, status); - return status; - } - return 0; -} diff --git a/arch/arm/mach-omap2/usb-tusb6010.h b/arch/arm/mach-omap2/usb-tusb6010.h deleted file mode 100644 index d210ff6238c2..000000000000 --- a/arch/arm/mach-omap2/usb-tusb6010.h +++ /dev/null @@ -1,12 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ - -#ifndef __USB_TUSB6010_H -#define __USB_TUSB6010_H - -extern int __init tusb6010_setup_interface( - struct musb_hdrc_platform_data *data, - unsigned int ps_refclk, unsigned int waitpin, - unsigned int async_cs, unsigned int sync_cs, - unsigned int dmachan); - -#endif /* __USB_TUSB6010_H */ diff --git a/arch/arm/mach-omap2/voltagedomains2xxx_data.c b/arch/arm/mach-omap2/voltagedomains2xxx_data.c deleted file mode 100644 index 9bc116fe3ba9..000000000000 --- a/arch/arm/mach-omap2/voltagedomains2xxx_data.c +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * OMAP3 voltage domain data - * - * Copyright (C) 2011 Texas Instruments, Inc. - */ -#include -#include - -#include "voltage.h" - -static struct voltagedomain omap2_voltdm_core = { - .name = "core", -}; - -static struct voltagedomain omap2_voltdm_wkup = { - .name = "wakeup", -}; - -static struct voltagedomain *voltagedomains_omap2[] __initdata = { - &omap2_voltdm_core, - &omap2_voltdm_wkup, - NULL, -}; - -void __init omap2xxx_voltagedomains_init(void) -{ - voltdm_init(voltagedomains_omap2); -} diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig index 0189dfdcbbe1..a383ff8f446c 100644 --- a/drivers/crypto/Kconfig +++ b/drivers/crypto/Kconfig @@ -337,7 +337,7 @@ config CRYPTO_DEV_OMAP_SHAM config CRYPTO_DEV_OMAP_AES tristate "Support for OMAP AES hw engine" - depends on ARCH_OMAP2 || ARCH_OMAP3 || ARCH_OMAP2PLUS + depends on ARCH_OMAP3 || ARCH_OMAP2PLUS select CRYPTO_AES select CRYPTO_SKCIPHER select CRYPTO_ENGINE diff --git a/drivers/media/platform/ti/omap/Kconfig b/drivers/media/platform/ti/omap/Kconfig index a9dbe1097775..c41812b324ad 100644 --- a/drivers/media/platform/ti/omap/Kconfig +++ b/drivers/media/platform/ti/omap/Kconfig @@ -9,9 +9,9 @@ config VIDEO_OMAP2_VOUT depends on V4L_PLATFORM_DRIVERS depends on MMU depends on FB_OMAP2 || (COMPILE_TEST && FB_OMAP2=n) - depends on ARCH_OMAP2 || ARCH_OMAP3 || COMPILE_TEST + depends on ARCH_OMAP3 || COMPILE_TEST depends on VIDEO_DEV select VIDEOBUF2_DMA_CONTIG - select OMAP2_VRFB if ARCH_OMAP2 || ARCH_OMAP3 + select OMAP2_VRFB if ARCH_OMAP3 help V4L2 Display driver support for OMAP2/3 based boards. diff --git a/drivers/mtd/nand/onenand/Kconfig b/drivers/mtd/nand/onenand/Kconfig index 7d57836bf32f..8a362fd5bfc4 100644 --- a/drivers/mtd/nand/onenand/Kconfig +++ b/drivers/mtd/nand/onenand/Kconfig @@ -23,8 +23,8 @@ config MTD_ONENAND_GENERIC Support for OneNAND flash via platform device driver. config MTD_ONENAND_OMAP2 - tristate "OneNAND on OMAP2/OMAP3 support" - depends on ARCH_OMAP2 || ARCH_OMAP3 || (COMPILE_TEST && ARM) + tristate "OneNAND on OMAP3 support" + depends on ARCH_OMAP3 || (COMPILE_TEST && ARM) depends on OF depends on OMAP_GPMC help diff --git a/drivers/video/fbdev/omap2/omapfb/Kconfig b/drivers/video/fbdev/omap2/omapfb/Kconfig index 2d20e79adefc..d8227f4326bd 100644 --- a/drivers/video/fbdev/omap2/omapfb/Kconfig +++ b/drivers/video/fbdev/omap2/omapfb/Kconfig @@ -8,7 +8,7 @@ menuconfig FB_OMAP2 depends on DRM_OMAP = n depends on GPIOLIB select FB_OMAP2_DSS - select OMAP2_VRFB if ARCH_OMAP2 || ARCH_OMAP3 + select OMAP2_VRFB if ARCH_OMAP3 select FB_IOMEM_HELPERS help Frame buffer driver for OMAP2+ based boards. diff --git a/include/linux/clk/ti.h b/include/linux/clk/ti.h index 54a3fa370004..ca151152da19 100644 --- a/include/linux/clk/ti.h +++ b/include/linux/clk/ti.h @@ -265,12 +265,6 @@ int omap2_clk_disable_autoidle_all(void); int omap2_clk_enable_autoidle_all(void); int omap2_clk_allow_idle(struct clk *clk); int omap2_clk_deny_idle(struct clk *clk); -unsigned long omap2_dpllcore_recalc(struct clk_hw *hw, - unsigned long parent_rate); -int omap2_reprogram_dpllcore(struct clk_hw *clk, unsigned long rate, - unsigned long parent_rate); -void omap2xxx_clkt_dpllcore_init(struct clk_hw *hw); -void omap2xxx_clkt_vps_init(void); unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk); void ti_dt_clk_init_retry_clks(void); @@ -322,8 +316,6 @@ void omap3_noncore_dpll_restore_context(struct clk_hw *hw); int omap3_core_dpll_save_context(struct clk_hw *hw); void omap3_core_dpll_restore_context(struct clk_hw *hw); -extern const struct clk_hw_omap_ops clkhwops_omap2xxx_dpll; - #ifdef CONFIG_ATAGS int omap3430_clk_legacy_init(void); int omap3430es1_clk_legacy_init(void); -- 2.53.0 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 9E4A3C79F9E for ; Tue, 8 Sep 2026 15:29:51 +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:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=GWgmoODRKtabQpYW4NA4en8LQrvvc7h0p+ydjQxU1yM=; b=Ya+x4oDxT3WGO/ YyQ8P4rXxIUVxAdBV9g9L15xSoHAtTFK+KYHwZxsaH47x8+lcrO6QC+uKZtJZwZYKTcgqFwycMBeh 1vAqdBd8Xmtsinye3c6hUrp5RqaXE8y4elY0lDLhSOrFxsxkwFUUoPLImNhNaXtlkGV0nRA0Na4fe KWEC/Gj3UM5scbaUGF9hjVAq1zMC53+6m0cyzqxfj723B1lgkxxcg+ZwmbRwt8HbefI9JPn+9AzOF us/y0ORR3ZT2u5/zysOsZtvlrksSpzWe9zJQS98pSp2umxgKIbDFq1HiCqbeJrXGr1uCJXdD9JRrz ay219uvWns1Dl6EFcN+g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x3xla-00000009UgC-47np; Tue, 08 Sep 2026 15:29:47 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x3xlU-00000009UeW-1C6B; Tue, 08 Sep 2026 15:29:40 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id EE84C43F61; Tue, 8 Sep 2026 15:29:39 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B76F01F00AC4; Tue, 8 Sep 2026 15:29:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788881379; bh=++o7uv15rBlvHRr+PxH9dFf+8dDgpY2HsOEbWk0PP6U=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=gGHuEScPnBDQs9oJVPKiK9DUaO5HUElsb7JUD82AWHsL2D1Ww4kijmXdcjc5ZoY64 o45oozwttxaV4UtvcNWBl5qfn6QeeRWO28EfFuF0gnztyzVEsLnWnLJIv3xe/yNI0c u0BCaXUWFICHkGkexo21KjT3bMHKozvCCXkm9chGOlKHnA+MApQjubQgxalbvmb44P 3tCWkUgkR7mwcL8XDLPU+VtheQOFZq94otEGdxHrrTUTW8cGZxFrqGWbfa/VzzKWed N4TLi8Y2RWZ3TAAFEAbZN6XyT1rbdVJaAxT/uPxssLOw2YtvAzIXSb2N1nZ7CRIXf9 B+oY4QTnh248g== From: Arnd Bergmann To: Krzysztof Kozlowski , Alexandre Belloni , Linus Walleij , Russell King Cc: Drew Fustini , Arnd Bergmann , Rob Herring , Conor Dooley , Liviu Dudau , Sudeep Holla , Lorenzo Pieralisi , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Vladimir Zapolskiy , Stefan Agner , Maxime Coquelin , Alexandre Torgue , Aaro Koskinen , Andreas Kemnade , Kevin Hilman , Roger Quadros , Tony Lindgren , Nicolas Ferre , Claudiu Beznea , Andrew Lunn , Sebastian Hesselbarth , Gregory Clement , Robert Jarzmik , Kristoffer Ericson , Ethan Nelson-Moore , Geert Uytterhoeven , Alexander Sverdlin , Shawn Guo , Karl Mehltretter , "David Hildenbrand (Arm)" , Nicolas Pitre , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, imx@lists.linux.dev, linux-stm32@st-md-mailman.stormreply.com, linux-omap@vger.kernel.org, Paul Walmsley , Herbert Xu , "David S. Miller" , Mauro Carvalho Chehab , Kyungmin Park , Helge Deller , Tero Kristo , Stephen Boyd , Thomas Zimmermann , linux-media@vger.kernel.org, linux-mtd@lists.infradead.org, linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-clk@vger.kernel.org Subject: [PATCH 06/13] ARM: omap2: remove omap24xx support Date: Tue, 8 Sep 2026 17:27:56 +0200 Message-ID: <20260908152808.3928630-7-arnd@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260908152808.3928630-1-arnd@kernel.org> References: <20260908152808.3928630-1-arnd@kernel.org> MIME-Version: 1.0 X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org RnJvbTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KClRoZSBvbWFwMjR4eCBTb0MgcGxh dGZvcm0gd2FzIHVzZWQgaW4gdGhlIE5va2lhIE44MDAgYW5kIE44MTAgdGFibGV0cwpyZWxlYXNl ZCBvbiAyMDA3IGFuZCB3YXMgYW1vbmcgdGhlIGZpcnN0IEFSTXY2IENQVXMgaW4gcHJvZHVjdHMg dGhhdAptYWRlIGl0IGludG8gcHJvZHVjdHMuCgpVbmZvcnR1bmF0ZWx5IHRoZSBlYXJseSBBUk0x MTM2cjAgQ1BVIGNvcmVzIGhhZCBhIG51bWJlciBvZiBxdWlya3MgdGhhdApjYXVzZWQgYSBkaXNw cm9wb3J0aW9uYXRlIGFtb3VudCBvZiB3b3JrIHRvIGtlZXAgdGhlbSBjb21wYXRpYmxlIHdpdGgK bGF0ZXIgQVJNdjZLL3Y3L3Y4IGltcGxlbWVudGF0aW9ucy4KCkRyb3AgdGhlIHN1cHBvcnQgZm9y IHRoaXMgU29DIGluIG9yZGVyIHRvIGFsbG93IHJlbW92aW5nIEFSTTExMzZyMC4KCkNjOiBBYXJv IEtvc2tpbmVuIDxhYXJvLmtvc2tpbmVuQGlraS5maT4KQ2M6IEFuZHJlYXMgS2VtbmFkZSA8YW5k cmVhc0BrZW1uYWRlLmluZm8+CkNjOiBLZXZpbiBIaWxtYW4gPGtoaWxtYW5AYmF5bGlicmUuY29t PgpDYzogUm9nZXIgUXVhZHJvcyA8cm9nZXJxQGtlcm5lbC5vcmc+CkNjOiBUb255IExpbmRncmVu IDx0b255QGF0b21pZGUuY29tPgpDYzogUGF1bCBXYWxtc2xleSA8cGF1bEBwd3Nhbi5jb20+CkNj OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CkNjOiAiRGF2aWQgUy4g TWlsbGVyIiA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KQ2M6IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8 bWNoZWhhYkBrZXJuZWwub3JnPgpDYzogS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1z dW5nLmNvbT4KQ2M6IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KQ2M6IFRlcm8gS3Jpc3Rv IDxrcmlzdG9Aa2VybmVsLm9yZz4KQ2M6IFN0ZXBoZW4gQm95ZCA8c2JveWRAa2VybmVsLm9yZz4K Q2M6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgpDYzogbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZwpDYzogbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IGRl dmljZXRyZWVAdmdlci5rZXJuZWwub3JnCkNjOiBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcK Q2M6IGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCkNjOiBsaW51eC1mYmRldkB2Z2VyLmtl cm5lbC5vcmcKQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKQ2M6IGxpbnV4LWNs a0B2Z2VyLmtlcm5lbC5vcmcKU2lnbmVkLW9mZi1ieTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5k Yi5kZT4KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgICAyIC0KIGFyY2gvYXJtL2Jvb3QvZHRzL3RpL29tYXAvTWFrZWZpbGUgICAgICAgICAgICB8 ICAgIDYgLQogYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMi5kdHNpICAgICAgICAgIHwg IDMzOCAtLS0tLQogLi4uL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDIwLWNsb2Nrcy5kdHNp IHwgIDI2NyAtLS0tCiBhcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDIwLWg0LmR0cyAg ICAgfCAgIDYzIC0KIGFyY2gvYXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAtbjgwMC5kdHMg ICB8ICAgIDkgLQogLi4uL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAtbjgxMC13aW1heC5kdHMg IHwgICAgOSAtCiBhcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDIwLW44MTAuZHRzICAg fCAgIDc1IC0KIC4uLi9kdHMvdGkvb21hcC9vbWFwMjQyMC1uOHgwLWNvbW1vbi5kdHNpICAgICB8 ICAxMjMgLS0KIGFyY2gvYXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAuZHRzaSAgICAgICB8 ICAyNjIgLS0tLQogLi4uL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDMwLWNsb2Nrcy5kdHNp IHwgIDM0MSAtLS0tLQogYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQzMC1zZHAuZHRz ICAgIHwgICA3MCAtCiBhcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDMwLmR0c2kgICAg ICAgfCAgMzY2IC0tLS0tCiAuLi4vYXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0eHgtY2xvY2tz LmR0c2kgfCAxMjQxIC0tLS0tLS0tLS0tLS0tLS0tCiBhcmNoL2FybS9jb25maWdzL29tYXAycGx1 c19kZWZjb25maWcgICAgICAgICAgfCAgICAyIC0KIGFyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZp ZyAgICAgICAgICAgICAgICAgICB8ICAgNjIgKy0KIGFyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZp bGUgICAgICAgICAgICAgICAgICB8ICAgNjMgKy0KIGFyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQt Z2VuZXJpYy5jICAgICAgICAgICB8ICAgMzQgLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1u OHgwLmMgICAgICAgICAgICAgIHwgIDUxMiAtLS0tLS0tCiBhcmNoL2FybS9tYWNoLW9tYXAyL2Ns a3QyeHh4X2RwbGwuYyAgICAgICAgICAgfCAgIDU2IC0KIGFyY2gvYXJtL21hY2gtb21hcDIvY2xr dDJ4eHhfZHBsbGNvcmUuYyAgICAgICB8ICAxOTQgLS0tCiBhcmNoL2FybS9tYWNoLW9tYXAyL2Ns a3QyeHh4X3ZpcnRfcHJjbV9zZXQuYyAgfCAgMjU5IC0tLS0KIGFyY2gvYXJtL21hY2gtb21hcDIv Y2xvY2suYyAgICAgICAgICAgICAgICAgICB8ICAgMTIgKy0KIGFyY2gvYXJtL21hY2gtb21hcDIv Y2xvY2syeHh4LmggICAgICAgICAgICAgICB8ICAgMTcgLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9j bG9ja2RvbWFpbi5jICAgICAgICAgICAgIHwgICAgNCArLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9j bG9ja2RvbWFpbi5oICAgICAgICAgICAgIHwgICAgNSAtCiBhcmNoL2FybS9tYWNoLW9tYXAyL2Ns b2NrZG9tYWluczI0MjBfZGF0YS5jICAgfCAgMTU0IC0tCiBhcmNoL2FybS9tYWNoLW9tYXAyL2Ns b2NrZG9tYWluczI0MzBfZGF0YS5jICAgfCAgMTgxIC0tLQogLi4uL21hY2gtb21hcDIvY2xvY2tk b21haW5zMnh4eF8zeHh4X2RhdGEuYyAgIHwgICAyOSArLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9j bS1yZWdiaXRzLTI0eHguaCAgICAgICAgIHwgICA1MSAtCiBhcmNoL2FybS9tYWNoLW9tYXAyL2Nt Mnh4eC5jICAgICAgICAgICAgICAgICAgfCAgMzAyIC0tLS0KIGFyY2gvYXJtL21hY2gtb21hcDIv Y20yeHh4LmggICAgICAgICAgICAgICAgICB8ICAgNjAgLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9j bV9jb21tb24uYyAgICAgICAgICAgICAgIHwgICAxMiAtCiBhcmNoL2FybS9tYWNoLW9tYXAyL2Nv bW1vbi1ib2FyZC1kZXZpY2VzLmggICAgfCAgIDExIC0KIGFyY2gvYXJtL21hY2gtb21hcDIvY29t bW9uLmggICAgICAgICAgICAgICAgICB8ICAgMTIgLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250 cm9sLmggICAgICAgICAgICAgICAgIHwgICA1NiAtCiBhcmNoL2FybS9tYWNoLW9tYXAyL2Rpc3Bs YXkuYyAgICAgICAgICAgICAgICAgfCAgICA0ICstCiBhcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5j ICAgICAgICAgICAgICAgICAgICAgfCAgIDUzICstCiBhcmNoL2FybS9tYWNoLW9tYXAyL2ZiLmMg ICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICstCiBhcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMu aCAgICAgICAgICAgICAgICAgICAgfCAgIDEwIC0KIGFyY2gvYXJtL21hY2gtb21hcDIvaTJjLmMg ICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIGFyY2gvYXJtL21hY2gtb21hcDIvaWQuYyAg ICAgICAgICAgICAgICAgICAgICB8ICAgODAgKy0KIGFyY2gvYXJtL21hY2gtb21hcDIvaW8uYyAg ICAgICAgICAgICAgICAgICAgICB8ICAxNDAgKy0KIGFyY2gvYXJtL21hY2gtb21hcDIvaW9tYXAu aCAgICAgICAgICAgICAgICAgICB8ICAgNDYgLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9sM18yeHh4 LmggICAgICAgICAgICAgICAgIHwgICAxNSAtCiBhcmNoL2FybS9tYWNoLW9tYXAyL2w0XzJ4eHgu aCAgICAgICAgICAgICAgICAgfCAgIDE5IC0KIGFyY2gvYXJtL21hY2gtb21hcDIvbW1jLmggICAg ICAgICAgICAgICAgICAgICB8ICAgMTggLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9tc2RpLmMgICAg ICAgICAgICAgICAgICAgIHwgICA3NSAtCiBhcmNoL2FybS9tYWNoLW9tYXAyL29tYXAyLXJlc3Rh cnQuYyAgICAgICAgICAgfCAgIDYyIC0KIGFyY2gvYXJtL21hY2gtb21hcDIvb21hcDI0eHguaCAg ICAgICAgICAgICAgICB8ICAgNzMgLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMg ICAgICAgICAgICAgIHwgICAxOCArLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgg ICAgICAgICAgICAgIHwgICAgMiAtCiBhcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQy MF9kYXRhLmMgICAgfCAgNDAyIC0tLS0tLQogYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9k XzI0MzBfZGF0YS5jICAgIHwgIDYwNiAtLS0tLS0tLQogLi4uL29tYXBfaHdtb2RfMnh4eF9pbnRl cmNvbm5lY3RfZGF0YS5jICAgICAgIHwgIDI1NiAtLS0tCiAuLi4vbWFjaC1vbWFwMi9vbWFwX2h3 bW9kXzJ4eHhfaXBibG9ja19kYXRhLmMgfCAgNjY4IC0tLS0tLS0tLQogYXJjaC9hcm0vbWFjaC1v bWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmggIHwgICA2NiAtCiBhcmNoL2FybS9tYWNoLW9t YXAyL29wcDI0MjBfZGF0YS5jICAgICAgICAgICAgfCAgMTMxIC0tCiBhcmNoL2FybS9tYWNoLW9t YXAyL29wcDI0MzBfZGF0YS5jICAgICAgICAgICAgfCAgMTM2IC0tCiBhcmNoL2FybS9tYWNoLW9t YXAyL29wcDJ4eHguaCAgICAgICAgICAgICAgICAgfCAgNDMwIC0tLS0tLQogYXJjaC9hcm0vbWFj aC1vbWFwMi9wZGF0YS1xdWlya3MuYyAgICAgICAgICAgIHwgICAzNSArLQogYXJjaC9hcm0vbWFj aC1vbWFwMi9wbS5oICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSAtCiBhcmNoL2FybS9tYWNo LW9tYXAyL3Bvd2VyZG9tYWluLmggICAgICAgICAgICAgfCAgICAzIC0KIGFyY2gvYXJtL21hY2gt b21hcDIvcG93ZXJkb21haW5zMnh4eF9kYXRhLmMgICB8ICAxMzQgLS0KIGFyY2gvYXJtL21hY2gt b21hcDIvcHJjbS1jb21tb24uaCAgICAgICAgICAgICB8ICAxNDcgLS0KIGFyY2gvYXJtL21hY2gt b21hcDIvcHJtLXJlZ2JpdHMtMjR4eC5oICAgICAgICB8ICAgMzkgLQogYXJjaC9hcm0vbWFjaC1v bWFwMi9wcm0yeHh4LmMgICAgICAgICAgICAgICAgIHwgIDIyOSAtLS0KIGFyY2gvYXJtL21hY2gt b21hcDIvcHJtMnh4eC5oICAgICAgICAgICAgICAgICB8ICAxMjggLS0KIGFyY2gvYXJtL21hY2gt b21hcDIvcHJtMnh4eF8zeHh4LmMgICAgICAgICAgICB8ICAgIDEgLQogYXJjaC9hcm0vbWFjaC1v bWFwMi9wcm1fY29tbW9uLmMgICAgICAgICAgICAgIHwgICAxMSAtCiBhcmNoL2FybS9tYWNoLW9t YXAyL3NkcmMuaCAgICAgICAgICAgICAgICAgICAgfCAgIDIxIC0KIGFyY2gvYXJtL21hY2gtb21h cDIvc2RyYzJ4eHguYyAgICAgICAgICAgICAgICB8ICAxNjQgLS0tCiBhcmNoL2FybS9tYWNoLW9t YXAyL3NsZWVwMjR4eC5TICAgICAgICAgICAgICAgfCAgIDkxIC0tCiBhcmNoL2FybS9tYWNoLW9t YXAyL3NvYy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDU5IC0KIGFyY2gvYXJtL21hY2gtb21h cDIvc3JhbS5jICAgICAgICAgICAgICAgICAgICB8ICAxNTkgKy0tCiBhcmNoL2FybS9tYWNoLW9t YXAyL3NyYW0uaCAgICAgICAgICAgICAgICAgICAgfCAgIDMyIC0KIGFyY2gvYXJtL21hY2gtb21h cDIvc3JhbTI0MnguUyAgICAgICAgICAgICAgICB8ICAzMTcgLS0tLS0KIGFyY2gvYXJtL21hY2gt b21hcDIvc3JhbTI0M3guUyAgICAgICAgICAgICAgICB8ICAzMTcgLS0tLS0KIGFyY2gvYXJtL21h Y2gtb21hcDIvdXNiLXR1c2I2MDEwLmMgICAgICAgICAgICB8ICAyMTcgLS0tCiBhcmNoL2FybS9t YWNoLW9tYXAyL3VzYi10dXNiNjAxMC5oICAgICAgICAgICAgfCAgIDEyIC0KIGFyY2gvYXJtL21h Y2gtb21hcDIvdm9sdGFnZWRvbWFpbnMyeHh4X2RhdGEuYyB8ICAgMjkgLQogZHJpdmVycy9jcnlw dG8vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS90aS9vbWFwL0tjb25maWcgICAgICAgIHwgICAgNCArLQogZHJpdmVycy9tdGQv bmFuZC9vbmVuYW5kL0tjb25maWcgICAgICAgICAgICAgIHwgICAgNCArLQogZHJpdmVycy92aWRl by9mYmRldi9vbWFwMi9vbWFwZmIvS2NvbmZpZyAgICAgIHwgICAgMiArLQogaW5jbHVkZS9saW51 eC9jbGsvdGkuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCAtCiA4NiBmaWxlcyBjaGFu Z2VkLCA2MCBpbnNlcnRpb25zKCspLCAxMDY5NiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEw MDY0NCBhcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyLmR0c2kKIGRlbGV0ZSBtb2RlIDEw MDY0NCBhcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDIwLWNsb2Nrcy5kdHNpCiBkZWxl dGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQyMC1oNC5kdHMK IGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDIwLW44 MDAuZHRzCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFw MjQyMC1uODEwLXdpbWF4LmR0cwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL2Jvb3QvZHRz L3RpL29tYXAvb21hcDI0MjAtbjgxMC5kdHMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9i b290L2R0cy90aS9vbWFwL29tYXAyNDIwLW44eDAtY29tbW9uLmR0c2kKIGRlbGV0ZSBtb2RlIDEw MDY0NCBhcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDIwLmR0c2kKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBhcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDMwLWNsb2Nrcy5kdHNpCiBk ZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQzMC1zZHAu ZHRzCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQz MC5kdHNpCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFw MjR4eC1jbG9ja3MuZHRzaQogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtb21hcDIv Ym9hcmQtbjh4MC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0 Mnh4eF9kcGxsLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3Qy eHh4X2RwbGxjb3JlLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLW9tYXAyL2Ns a3QyeHh4X3ZpcnRfcHJjbV9zZXQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gt b21hcDIvY2xvY2syeHh4LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLW9tYXAy L2Nsb2NrZG9tYWluczI0MjBfZGF0YS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFj aC1vbWFwMi9jbG9ja2RvbWFpbnMyNDMwX2RhdGEuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gv YXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNo L2FybS9tYWNoLW9tYXAyL2NtMnh4eC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFj aC1vbWFwMi9jbTJ4eHguaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtb21hcDIv Y29tbW9uLWJvYXJkLWRldmljZXMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gt b21hcDIvZ3BtYy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFjaC1vbWFwMi9sM18y eHh4LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLW9tYXAyL2w0XzJ4eHguaAog ZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtb21hcDIvbW1jLmgKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBhcmNoL2FybS9tYWNoLW9tYXAyL21zZGkuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFy Y2gvYXJtL21hY2gtb21hcDIvb21hcDItcmVzdGFydC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJj aC9hcm0vbWFjaC1vbWFwMi9vbWFwMjR4eC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0v bWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJj aC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCiBkZWxldGUgbW9kZSAxMDA2 NDQgYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzJ4eHhfaW50ZXJjb25uZWN0X2RhdGEu YwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yeHh4 X2lwYmxvY2tfZGF0YS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFjaC1vbWFwMi9v cHAyNDIwX2RhdGEuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtb21hcDIvb3Bw MjQzMF9kYXRhLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4 eHguaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5z Mnh4eF9kYXRhLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLW9tYXAyL3BybS1y ZWdiaXRzLTI0eHguaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL21hY2gtb21hcDIvcHJt Mnh4eC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMyeHh4LmMKIGRlbGV0 ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCiBkZWxldGUgbW9k ZSAxMDA2NDQgYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQyeC5TCiBkZWxldGUgbW9kZSAxMDA2 NDQgYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQzeC5TCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJj aC9hcm0vbWFjaC1vbWFwMi91c2ItdHVzYjYwMTAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gv YXJtL21hY2gtb21hcDIvdXNiLXR1c2I2MDEwLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2Fy bS9tYWNoLW9tYXAyL3ZvbHRhZ2Vkb21haW5zMnh4eF9kYXRhLmMKCmRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDAyOGRiN2FkMTVhZC4uMGQxMGY3Nzg4MDBkIDEw MDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTk4NzQsNyArMTk4 NzQsNiBAQCBNOglKYXJra28gTmlrdWxhIDxqYXJra28ubmlrdWxhQGJpdG1lci5jb20+CiBMOgls aW51eC1zb3VuZEB2Z2VyLmtlcm5lbC5vcmcKIEw6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3Jn CiBTOglNYWludGFpbmVkCi1GOglzb3VuZC9zb2MvdGkvbjgxMC5jCiBGOglzb3VuZC9zb2MvdGkv b21hcCoKIEY6CXNvdW5kL3NvYy90aS9yeDUxLmMKIEY6CXNvdW5kL3NvYy90aS9zZG1hLXBjbS4q CkBAIC0yMDAyNyw3ICsyMDAyNiw2IEBAIEY6CWRyaXZlcnMvZ3Bpby9ncGlvLXRwczY1MjE5LmMK IEY6CWRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCiBGOglkcml2ZXJzL2lycWNoaXAvaXJx LW9tYXAtaW50Yy5jCiBGOglkcml2ZXJzL21mZC8qb21hcCouYwotRjoJZHJpdmVycy9tZmQvbWVu ZWxhdXMuYwogRjoJZHJpdmVycy9tZmQvcGFsbWFzLmMKIEY6CWRyaXZlcnMvbWZkL3RwczY1MjE3 LmMKIEY6CWRyaXZlcnMvbWZkL3RwczY1MjE4LmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3Qv ZHRzL3RpL29tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9ib290L2R0cy90aS9vbWFwL01ha2VmaWxl CmluZGV4IDQ5OGMzNmNjYjVlYS4uM2M1ZDM3OGRmNmI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9i b290L2R0cy90aS9vbWFwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RpL29tYXAv TWFrZWZpbGUKQEAgLTEsMTAgKzEsNCBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAotZHRiLSQoQ09ORklHX0FSQ0hfT01BUDIpICs9IFwKLQlvbWFwMjQyMC1oNC5kdGIgXAot CW9tYXAyNDIwLW44MDAuZHRiIFwKLQlvbWFwMjQyMC1uODEwLmR0YiBcCi0Jb21hcDI0MjAtbjgx MC13aW1heC5kdGIgXAotCW9tYXAyNDMwLXNkcC5kdGIKIGR0Yi0kKENPTkZJR19BUkNIX09NQVAz KSArPSBcCiAJYW0zNTE3LWNyYW5lYm9hcmQuZHRiIFwKIAlhbTM1MTctZXZtLmR0YiBcCmRpZmYg LS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyLmR0c2kgYi9hcmNoL2FybS9i b290L2R0cy90aS9vbWFwL29tYXAyLmR0c2kKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IGZkYzE3OTBhZGY0My4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RpL29t YXAvb21hcDIuZHRzaQorKysgL2Rldi9udWxsCkBAIC0xLDMzOCArMCwwIEBACi0vLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogRGV2aWNlIFRyZWUgU291cmNl IGZvciBPTUFQMiBTb0MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGV4YXMgSW5zdHJ1bWVu dHMgSW5jb3Jwb3JhdGVkIC0gaHR0cHM6Ly93d3cudGkuY29tLwotICovCi0KLSNpbmNsdWRlIDxk dC1iaW5kaW5ncy9idXMvdGktc3lzYy5oPgotI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bp by5oPgotI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgot I2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BpbmN0cmwvb21hcC5oPgotCi0vIHsKLQljb21wYXRpYmxl ID0gInRpLG9tYXAyNDMwIiwgInRpLG9tYXAyNDIwIiwgInRpLG9tYXAyIjsKLQlpbnRlcnJ1cHQt cGFyZW50ID0gPCZpbnRjPjsKLQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkjc2l6ZS1jZWxscyA9 IDwxPjsKLQljaG9zZW4geyB9OwotCi0JYWxpYXNlcyB7Ci0JCXNlcmlhbDAgPSAmdWFydDE7Ci0J CXNlcmlhbDEgPSAmdWFydDI7Ci0JCXNlcmlhbDIgPSAmdWFydDM7Ci0JCWkyYzAgPSAmaTJjMTsK LQkJaTJjMSA9ICZpMmMyOwotCX07Ci0KLQljcHVzIHsKLQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47 Ci0JCSNzaXplLWNlbGxzID0gPDA+OwotCi0JCWNwdSB7Ci0JCQljb21wYXRpYmxlID0gImFybSxh cm0xMTM2amYtcyI7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQl9OwotCX07Ci0KLQlwbXUg ewotCQljb21wYXRpYmxlID0gImFybSxhcm0xMTM2LXBtdSI7Ci0JCWludGVycnVwdHMgPSA8Mz47 Ci0JfTsKLQotCXNvYyB7Ci0JCWNvbXBhdGlibGUgPSAidGksb21hcC1pbmZyYSI7Ci0JCW1wdSB7 Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyLW1wdSI7Ci0JCQl0aSxod21vZHMgPSAibXB1IjsK LQkJfTsKLQl9OwotCi0Jb2NwIHsKLQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKLQkJI2Fk ZHJlc3MtY2VsbHMgPSA8MT47Ci0JCSNzaXplLWNlbGxzID0gPDE+OwotCQlyYW5nZXM7Ci0JCXRp LGh3bW9kcyA9ICJsM19tYWluIjsKLQotCQlhZXM6IGFlc0A0ODBhNjAwMCB7Ci0JCQljb21wYXRp YmxlID0gInRpLG9tYXAyLWFlcyI7Ci0JCQl0aSxod21vZHMgPSAiYWVzIjsKLQkJCXJlZyA9IDww eDQ4MGE2MDAwIDB4NTA+OwotCQkJZG1hcyA9IDwmc2RtYSA5ICZzZG1hIDEwPjsKLQkJCWRtYS1u YW1lcyA9ICJ0eCIsICJyeCI7Ci0JCX07Ci0KLQkJaGRxMXc6IDF3QDQ4MGIyMDAwIHsKLQkJCWNv bXBhdGlibGUgPSAidGksb21hcDI0MjAtMXciOwotCQkJdGksaHdtb2RzID0gImhkcTF3IjsKLQkJ CXJlZyA9IDwweDQ4MGIyMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDU4PjsKLQkJfTsK LQotCQlpbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlckAxIHsKLQkJCWNvbXBhdGlibGUgPSAidGks b21hcDItaW50YyI7Ci0JCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJCSNpbnRlcnJ1cHQtY2Vs bHMgPSA8MT47Ci0JCQlyZWcgPSA8MHg0ODBGRTAwMCAweDEwMDA+OwotCQl9OwotCi0JCXRhcmdl dC1tb2R1bGVANDgwNTYwMDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxzeXNjLW9tYXAyIiwgInRp LHN5c2MiOwotCQkJcmVnID0gPDB4NDgwNTYwMDAgMHg0PiwKLQkJCSAgICAgIDwweDQ4MDU2MDJj IDB4ND4sCi0JCQkgICAgICA8MHg0ODA1NjAyOCAweDQ+OwotCQkJcmVnLW5hbWVzID0gInJldiIs ICJzeXNjIiwgInN5c3MiOwotCQkJdGksc3lzYy1tYXNrID0gPChTWVNDX09NQVAyX0NMT0NLQUNU SVZJVFkgfAotCQkJCQkgU1lTQ19PTUFQMl9FTVVGUkVFIHwKLQkJCQkJIFNZU0NfT01BUDJfU09G VFJFU0VUIHwKLQkJCQkJIFNZU0NfT01BUDJfQVVUT0lETEUpPjsKLQkJCXRpLHN5c2MtbWlkbGUg PSA8U1lTQ19JRExFX0ZPUkNFPiwKLQkJCQkJPFNZU0NfSURMRV9OTz4sCi0JCQkJCTxTWVNDX0lE TEVfU01BUlQ+OwotCQkJdGksc3lzcy1tYXNrID0gPDE+OwotCQkJY2xvY2tzID0gPCZjb3JlX2wz X2NrPjsKLQkJCWNsb2NrLW5hbWVzID0gImZjayI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsK LQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJcmFuZ2VzID0gPDAgMHg0ODA1NjAwMCAweDEwMDA+ OwotCi0JCQlzZG1hOiBkbWEtY29udHJvbGxlckAwIHsKLQkJCQljb21wYXRpYmxlID0gInRpLG9t YXAyNDIwLXNkbWEiLCAidGksb21hcC1zZG1hIjsKLQkJCQlyZWcgPSA8MCAweDEwMDA+OwotCQkJ CWludGVycnVwdHMgPSA8MTI+LAotCQkJCQkgICAgIDwxMz4sCi0JCQkJCSAgICAgPDE0PiwKLQkJ CQkJICAgICA8MTU+OwotCQkJCSNkbWEtY2VsbHMgPSA8MT47Ci0JCQkJZG1hLWNoYW5uZWxzID0g PDMyPjsKLQkJCQlkbWEtcmVxdWVzdHMgPSA8NjQ+OwotCQkJfTsKLQkJfTsKLQotCQlpMmMxOiBp MmNANDgwNzAwMDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi1pMmMiOwotCQkJdGksaHdt b2RzID0gImkyYzEiOwotCQkJcmVnID0gPDB4NDgwNzAwMDAgMHg4MD47Ci0JCQkjYWRkcmVzcy1j ZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDw1Nj47 Ci0JCX07Ci0KLQkJaTJjMjogaTJjQDQ4MDcyMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksb21h cDItaTJjIjsKLQkJCXRpLGh3bW9kcyA9ICJpMmMyIjsKLQkJCXJlZyA9IDwweDQ4MDcyMDAwIDB4 ODA+OwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJ CWludGVycnVwdHMgPSA8NTc+OwotCQl9OwotCi0JCW1jc3BpMTogc3BpQDQ4MDk4MDAwIHsKLQkJ CSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRp YmxlID0gInRpLG9tYXAyLW1jc3BpIjsKLQkJCXRpLGh3bW9kcyA9ICJtY3NwaTEiOwotCQkJcmVn ID0gPDB4NDgwOTgwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw2NT47Ci0JCQlkbWFzID0g PCZzZG1hIDM1ICZzZG1hIDM2ICZzZG1hIDM3ICZzZG1hIDM4Ci0JCQkJJnNkbWEgMzkgJnNkbWEg NDAgJnNkbWEgNDEgJnNkbWEgNDI+OwotCQkJZG1hLW5hbWVzID0gInR4MCIsICJyeDAiLCAidHgx IiwgInJ4MSIsCi0JCQkJICAgICJ0eDIiLCAicngyIiwgInR4MyIsICJyeDMiOwotCQl9OwotCi0J CW1jc3BpMjogc3BpQDQ4MDlhMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3Np emUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyLW1jc3BpIjsKLQkJCXRp LGh3bW9kcyA9ICJtY3NwaTIiOwotCQkJcmVnID0gPDB4NDgwOWEwMDAgMHgxMDA+OwotCQkJaW50 ZXJydXB0cyA9IDw2Nj47Ci0JCQlkbWFzID0gPCZzZG1hIDQzICZzZG1hIDQ0ICZzZG1hIDQ1ICZz ZG1hIDQ2PjsKLQkJCWRtYS1uYW1lcyA9ICJ0eDAiLCAicngwIiwgInR4MSIsICJyeDEiOwotCQl9 OwotCi0JCXJuZzogcm5nQDQ4MGEwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksb21hcDItcm5n IjsKLQkJCXRpLGh3bW9kcyA9ICJybmciOwotCQkJcmVnID0gPDB4NDgwYTAwMDAgMHg1MD47Ci0J CQlpbnRlcnJ1cHRzID0gPDUyPjsKLQkJfTsKLQotCQlzaGFtOiBzaGFtQDQ4MGE0MDAwIHsKLQkJ CWNvbXBhdGlibGUgPSAidGksb21hcDItc2hhbSI7Ci0JCQl0aSxod21vZHMgPSAic2hhbSI7Ci0J CQlyZWcgPSA8MHg0ODBhNDAwMCAweDY0PjsKLQkJCWludGVycnVwdHMgPSA8NTE+OwotCQkJZG1h cyA9IDwmc2RtYSAxMz47Ci0JCQlkbWEtbmFtZXMgPSAicngiOwotCQl9OwotCi0JCXVhcnQxOiBz ZXJpYWxANDgwNmEwMDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi11YXJ0IjsKLQkJCXRp LGh3bW9kcyA9ICJ1YXJ0MSI7Ci0JCQlyZWcgPSA8MHg0ODA2YTAwMCAweDIwMDA+OwotCQkJaW50 ZXJydXB0cyA9IDw3Mj47Ci0JCQlkbWFzID0gPCZzZG1hIDQ5ICZzZG1hIDUwPjsKLQkJCWRtYS1u YW1lcyA9ICJ0eCIsICJyeCI7Ci0JCQljbG9jay1mcmVxdWVuY3kgPSA8NDgwMDAwMDA+OwotCQl9 OwotCi0JCXVhcnQyOiBzZXJpYWxANDgwNmMwMDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFw Mi11YXJ0IjsKLQkJCXRpLGh3bW9kcyA9ICJ1YXJ0MiI7Ci0JCQlyZWcgPSA8MHg0ODA2YzAwMCAw eDQwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDczPjsKLQkJCWRtYXMgPSA8JnNkbWEgNTEgJnNkbWEg NTI+OwotCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0 ODAwMDAwMD47Ci0JCX07Ci0KLQkJdWFydDM6IHNlcmlhbEA0ODA2ZTAwMCB7Ci0JCQljb21wYXRp YmxlID0gInRpLG9tYXAyLXVhcnQiOwotCQkJdGksaHdtb2RzID0gInVhcnQzIjsKLQkJCXJlZyA9 IDwweDQ4MDZlMDAwIDB4NDAwPjsKLQkJCWludGVycnVwdHMgPSA8NzQ+OwotCQkJZG1hcyA9IDwm c2RtYSA1MyAmc2RtYSA1ND47Ci0JCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwotCQkJY2xvY2st ZnJlcXVlbmN5ID0gPDQ4MDAwMDAwPjsKLQkJfTsKLQotCQl0aW1lcjJfdGFyZ2V0OiB0YXJnZXQt bW9kdWxlQDQ4MDJhMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksc3lzYy1vbWFwMi10aW1lciIs ICJ0aSxzeXNjIjsKLQkJCXJlZyA9IDwweDQ4MDJhMDAwIDB4ND4sCi0JCQkgICAgICA8MHg0ODAy YTAxMCAweDQ+LAotCQkJICAgICAgPDB4NDgwMmEwMTQgMHg0PjsKLQkJCXJlZy1uYW1lcyA9ICJy ZXYiLCAic3lzYyIsICJzeXNzIjsKLQkJCXRpLHN5c2MtbWFzayA9IDwoU1lTQ19PTUFQMl9DTE9D S0FDVElWSVRZIHwKLQkJCQkJIFNZU0NfT01BUDJfRU1VRlJFRSB8Ci0JCQkJCSBTWVNDX09NQVAy X0VOQVdBS0VVUCB8Ci0JCQkJCSBTWVNDX09NQVAyX1NPRlRSRVNFVCB8Ci0JCQkJCSBTWVNDX09N QVAyX0FVVE9JRExFKT47Ci0JCQl0aSxzeXNjLXNpZGxlID0gPFNZU0NfSURMRV9GT1JDRT4sCi0J CQkJCTxTWVNDX0lETEVfTk8+LAotCQkJCQk8U1lTQ19JRExFX1NNQVJUPjsKLQkJCXRpLHN5c3Mt bWFzayA9IDwxPjsKLQkJCWNsb2NrcyA9IDwmZ3B0Ml9mY2s+LCA8JmdwdDJfaWNrPjsKLQkJCWNs b2NrLW5hbWVzID0gImZjayIsICJpY2siOwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkj c2l6ZS1jZWxscyA9IDwxPjsKLQkJCXJhbmdlcyA9IDwweDAgMHg0ODAyYTAwMCAweDEwMDA+Owot Ci0JCQl0aW1lcjI6IHRpbWVyQDAgewotCQkJCWNvbXBhdGlibGUgPSAidGksb21hcDI0MjAtdGlt ZXIiOwotCQkJCXJlZyA9IDwwIDB4NDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDM4PjsKLQkJCX07 Ci0JCX07Ci0KLQkJdGltZXIzOiB0aW1lckA0ODA3ODAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRp LG9tYXAyNDIwLXRpbWVyIjsKLQkJCXJlZyA9IDwweDQ4MDc4MDAwIDB4NDAwPjsKLQkJCWludGVy cnVwdHMgPSA8Mzk+OwotCQkJdGksaHdtb2RzID0gInRpbWVyMyI7Ci0JCX07Ci0KLQkJdGltZXI0 OiB0aW1lckA0ODA3YTAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyNDIwLXRpbWVyIjsK LQkJCXJlZyA9IDwweDQ4MDdhMDAwIDB4NDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDA+OwotCQkJ dGksaHdtb2RzID0gInRpbWVyNCI7Ci0JCX07Ci0KLQkJdGltZXI1OiB0aW1lckA0ODA3YzAwMCB7 Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyNDIwLXRpbWVyIjsKLQkJCXJlZyA9IDwweDQ4MDdj MDAwIDB4NDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDE+OwotCQkJdGksaHdtb2RzID0gInRpbWVy NSI7Ci0JCQl0aSx0aW1lci1kc3A7Ci0JCX07Ci0KLQkJdGltZXI2OiB0aW1lckA0ODA3ZTAwMCB7 Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyNDIwLXRpbWVyIjsKLQkJCXJlZyA9IDwweDQ4MDdl MDAwIDB4NDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDI+OwotCQkJdGksaHdtb2RzID0gInRpbWVy NiI7Ci0JCQl0aSx0aW1lci1kc3A7Ci0JCX07Ci0KLQkJdGltZXI3OiB0aW1lckA0ODA4MDAwMCB7 Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyNDIwLXRpbWVyIjsKLQkJCXJlZyA9IDwweDQ4MDgw MDAwIDB4NDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDM+OwotCQkJdGksaHdtb2RzID0gInRpbWVy NyI7Ci0JCQl0aSx0aW1lci1kc3A7Ci0JCX07Ci0KLQkJdGltZXI4OiB0aW1lckA0ODA4MjAwMCB7 Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyNDIwLXRpbWVyIjsKLQkJCXJlZyA9IDwweDQ4MDgy MDAwIDB4NDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDQ+OwotCQkJdGksaHdtb2RzID0gInRpbWVy OCI7Ci0JCQl0aSx0aW1lci1kc3A7Ci0JCX07Ci0KLQkJdGltZXI5OiB0aW1lckA0ODA4NDAwMCB7 Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyNDIwLXRpbWVyIjsKLQkJCXJlZyA9IDwweDQ4MDg0 MDAwIDB4NDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDU+OwotCQkJdGksaHdtb2RzID0gInRpbWVy OSI7Ci0JCQl0aSx0aW1lci1wd207Ci0JCX07Ci0KLQkJdGltZXIxMDogdGltZXJANDgwODYwMDAg ewotCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMjQyMC10aW1lciI7Ci0JCQlyZWcgPSA8MHg0ODA4 NjAwMCAweDQwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQ2PjsKLQkJCXRpLGh3bW9kcyA9ICJ0aW1l cjEwIjsKLQkJCXRpLHRpbWVyLXB3bTsKLQkJfTsKLQotCQl0aW1lcjExOiB0aW1lckA0ODA4ODAw MCB7Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyNDIwLXRpbWVyIjsKLQkJCXJlZyA9IDwweDQ4 MDg4MDAwIDB4NDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDc+OwotCQkJdGksaHdtb2RzID0gInRp bWVyMTEiOwotCQkJdGksdGltZXItcHdtOwotCQl9OwotCi0JCXRpbWVyMTI6IHRpbWVyQDQ4MDhh MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksb21hcDI0MjAtdGltZXIiOwotCQkJcmVnID0gPDB4 NDgwOGEwMDAgMHg0MDA+OwotCQkJaW50ZXJydXB0cyA9IDw0OD47Ci0JCQl0aSxod21vZHMgPSAi dGltZXIxMiI7Ci0JCQl0aSx0aW1lci1wd207Ci0JCX07Ci0KLQkJZHNzOiBkc3NANDgwNTAwMDAg ewotCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi1kc3MiOwotCQkJcmVnID0gPDB4NDgwNTAwMDAg MHg0MDA+OwotCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCXRpLGh3bW9kcyA9ICJkc3NfY29y ZSI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJ cmFuZ2VzOwotCi0JCQlkaXNwY0A0ODA1MDQwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFw Mi1kaXNwYyI7Ci0JCQkJcmVnID0gPDB4NDgwNTA0MDAgMHg0MDA+OwotCQkJCWludGVycnVwdHMg PSA8MjU+OwotCQkJCXRpLGh3bW9kcyA9ICJkc3NfZGlzcGMiOwotCQkJfTsKLQotCQkJcmZiaTog ZW5jb2RlckA0ODA1MDgwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi1yZmJpIjsKLQkJ CQlyZWcgPSA8MHg0ODA1MDgwMCAweDQwMD47Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJ CQl0aSxod21vZHMgPSAiZHNzX3JmYmkiOwotCQkJfTsKLQotCQkJdmVuYzogZW5jb2RlckA0ODA1 MGMwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi12ZW5jIjsKLQkJCQlyZWcgPSA8MHg0 ODA1MGMwMCAweDQwMD47Ci0JCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJCQl0aSxod21vZHMg PSAiZHNzX3ZlbmMiOwotCQkJfTsKLQkJfTsKLQl9OwotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJt L2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAtY2xvY2tzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0 cy90aS9vbWFwL29tYXAyNDIwLWNsb2Nrcy5kdHNpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMGE3YTE5OWE5MWMuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90 aS9vbWFwL29tYXAyNDIwLWNsb2Nrcy5kdHNpCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAg QEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBEZXZp Y2UgVHJlZSBTb3VyY2UgZm9yIE9NQVAyNDIwIGNsb2NrIGRhdGEKLSAqCi0gKiBDb3B5cmlnaHQg KEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqLwotCi0mcHJjbV9jbG9ja3Mgewot CXN5c19jbGtvdXQyX3NyY19nYXRlOiBzeXNfY2xrb3V0Ml9zcmNfZ2F0ZUA3MCB7Ci0JCSNjbG9j ay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbm8td2FpdC1nYXRl LWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDE1PjsK LQkJcmVnID0gPDB4MDA3MD47Ci0JfTsKLQotCXN5c19jbGtvdXQyX3NyY19tdXg6IHN5c19jbGtv dXQyX3NyY19tdXhANzAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAi dGksY29tcG9zaXRlLW11eC1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmY29yZV9jaz4sIDwmc3lzX2Nr PiwgPCZmdW5jXzk2bV9jaz4sIDwmZnVuY181NG1fY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8OD47 Ci0JCXJlZyA9IDwweDAwNzA+OwotCX07Ci0KLQlzeXNfY2xrb3V0Ml9zcmM6IHN5c19jbGtvdXQy X3NyYyB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3Np dGUtY2xvY2siOwotCQljbG9ja3MgPSA8JnN5c19jbGtvdXQyX3NyY19nYXRlPiwgPCZzeXNfY2xr b3V0Ml9zcmNfbXV4PjsKLQl9OwotCi0Jc3lzX2Nsa291dDI6IHN5c19jbGtvdXQyQDcwIHsKLQkJ I2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwot CQljbG9ja3MgPSA8JnN5c19jbGtvdXQyX3NyYz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxMT47Ci0J CXRpLG1heC1kaXYgPSA8NjQ+OwotCQlyZWcgPSA8MHgwMDcwPjsKLQkJdGksaW5kZXgtcG93ZXIt b2YtdHdvOwotCX07Ci0KLQlkc3BfZ2F0ZV9pY2s6IGRzcF9nYXRlX2lja0A4MTAgewotCQkjY2xv Y2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWludGVyZmFjZS1j bG9jayI7Ci0JCWNsb2NrcyA9IDwmZHNwX2Zjaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxPjsKLQkJ cmVnID0gPDB4MDgxMD47Ci0JfTsKLQotCWRzcF9kaXZfaWNrOiBkc3BfZGl2X2lja0A4NDAgewot CQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWRpdmlk ZXItY2xvY2siOwotCQljbG9ja3MgPSA8JmRzcF9mY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8NT47 Ci0JCXRpLG1heC1kaXYgPSA8Mz47Ci0JCXJlZyA9IDwweDA4NDA+OwotCQl0aSxpbmRleC1zdGFy dHMtYXQtb25lOwotCX07Ci0KLQlkc3BfaWNrOiBkc3BfaWNrIHsKLQkJI2Nsb2NrLWNlbGxzID0g PDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwm ZHNwX2dhdGVfaWNrPiwgPCZkc3BfZGl2X2ljaz47Ci0JfTsKLQotCWl2YTFfZ2F0ZV9pZmNrOiBp dmExX2dhdGVfaWZja0A4MDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUg PSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmNvcmVfY2s+OwotCQl0 aSxiaXQtc2hpZnQgPSA8MTA+OwotCQlyZWcgPSA8MHgwODAwPjsKLQl9OwotCi0JaXZhMV9kaXZf aWZjazogaXZhMV9kaXZfaWZja0A4NDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBh dGlibGUgPSAidGksY29tcG9zaXRlLWRpdmlkZXItY2xvY2siOwotCQljbG9ja3MgPSA8JmNvcmVf Y2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8OD47Ci0JCXJlZyA9IDwweDA4NDA+OwotCQl0aSxkaXZp ZGVycyA9IDwwPiwgPDE+LCA8Mj4sIDwzPiwgPDQ+LCA8MD4sIDw2PiwgPDA+LCA8OD4sIDwwPiwg PDA+LCA8MD4sIDwxMj47Ci0JfTsKLQotCWl2YTFfaWZjazogaXZhMV9pZmNrIHsKLQkJI2Nsb2Nr LWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7Ci0JCWNs b2NrcyA9IDwmaXZhMV9nYXRlX2lmY2s+LCA8Jml2YTFfZGl2X2lmY2s+OwotCX07Ci0KLQlpdmEx X2lmY2tfZGl2OiBpdmExX2lmY2tfZGl2IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21w YXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmaXZhMV9pZmNrPjsK LQkJY2xvY2stbXVsdCA9IDwxPjsKLQkJY2xvY2stZGl2ID0gPDI+OwotCX07Ci0KLQlpdmExX21w dV9pbnRfaWZjazogaXZhMV9tcHVfaW50X2lmY2tAODAwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+ OwotCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmaXZh MV9pZmNrX2Rpdj47Ci0JCXRpLGJpdC1zaGlmdCA9IDw4PjsKLQkJcmVnID0gPDB4MDgwMD47Ci0J fTsKLQotCXdkdDNfaWNrOiB3ZHQzX2lja0AyMTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0J CWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZs NF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyOD47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0K LQl3ZHQzX2Zjazogd2R0M19mY2tAMjAwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21w YXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+ OwotCQl0aSxiaXQtc2hpZnQgPSA8Mjg+OwotCQlyZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JbW1j X2ljazogbW1jX2lja0AyMTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUg PSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRp LGJpdC1zaGlmdCA9IDwyNj47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQltbWNfZmNrOiBt bWNfZmNrQDIwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSx3 YWl0LWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfOTZtX2NrPjsKLQkJdGksYml0LXNo aWZ0ID0gPDI2PjsKLQkJcmVnID0gPDB4MDIwMD47Ci0JfTsKLQotCWVhY19pY2s6IGVhY19pY2tA MjEwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWlu dGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8 MjQ+OwotCQlyZWcgPSA8MHgwMjEwPjsKLQl9OwotCi0JZWFjX2ZjazogZWFjX2Zja0AyMDAgewot CQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2Nr IjsKLQkJY2xvY2tzID0gPCZmdW5jXzk2bV9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyND47Ci0J CXJlZyA9IDwweDAyMDA+OwotCX07Ci0KLQlpMmMxX2ZjazogaTJjMV9mY2tAMjAwIHsKLQkJI2Ns b2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7Ci0J CWNsb2NrcyA9IDwmZnVuY18xMm1fY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MTk+OwotCQlyZWcg PSA8MHgwMjAwPjsKLQl9OwotCi0JaTJjMl9mY2s6IGkyYzJfZmNrQDIwMCB7Ci0JCSNjbG9jay1j ZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOwotCQljbG9j a3MgPSA8JmZ1bmNfMTJtX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDIwPjsKLQkJcmVnID0gPDB4 MDIwMD47Ci0JfTsKLQotCXZseW5xX2ljazogdmx5bnFfaWNrQDIxMCB7Ci0JCSNjbG9jay1jZWxs cyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOwotCQlj bG9ja3MgPSA8JmNvcmVfbDNfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8Mz47Ci0JCXJlZyA9IDww eDAyMTA+OwotCX07Ci0KLQl2bHlucV9nYXRlX2Zjazogdmx5bnFfZ2F0ZV9mY2tAMjAwIHsKLQkJ I2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNs b2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDM+OwotCQly ZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JY29yZV9kMThfY2s6IGNvcmVfZDE4X2NrIHsKLQkJI2Ns b2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7Ci0J CWNsb2NrcyA9IDwmY29yZV9jaz47Ci0JCWNsb2NrLW11bHQgPSA8MT47Ci0JCWNsb2NrLWRpdiA9 IDwxOD47Ci0JfTsKLQotCXZseW5xX211eF9mY2s6IHZseW5xX211eF9mY2tAMjQwIHsKLQkJI2Ns b2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1tdXgtY2xvY2si OwotCQljbG9ja3MgPSA8JmZ1bmNfOTZtX2NrPiwgPCZjb3JlX2NrPiwgPCZjb3JlX2QyX2NrPiwg PCZjb3JlX2QzX2NrPiwgPCZjb3JlX2Q0X2NrPiwgPCZkdW1teV9jaz4sIDwmY29yZV9kNl9jaz4s IDwmZHVtbXlfY2s+LCA8JmNvcmVfZDhfY2s+LCA8JmNvcmVfZDlfY2s+LCA8JmR1bW15X2NrPiwg PCZkdW1teV9jaz4sIDwmY29yZV9kMTJfY2s+LCA8JmR1bW15X2NrPiwgPCZkdW1teV9jaz4sIDwm ZHVtbXlfY2s+LCA8JmNvcmVfZDE2X2NrPiwgPCZkdW1teV9jaz4sIDwmY29yZV9kMThfY2s+Owot CQl0aSxiaXQtc2hpZnQgPSA8MTU+OwotCQlyZWcgPSA8MHgwMjQwPjsKLQl9OwotCi0Jdmx5bnFf ZmNrOiB2bHlucV9mY2sgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAi dGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZ2bHlucV9nYXRlX2Zjaz4sIDwmdmx5 bnFfbXV4X2Zjaz47Ci0JfTsKLX07Ci0KLSZwcmNtX2Nsb2NrZG9tYWlucyB7Ci0JZ2Z4X2Nsa2Rt OiBnZnhfY2xrZG0gewotCQljb21wYXRpYmxlID0gInRpLGNsb2NrZG9tYWluIjsKLQkJY2xvY2tz ID0gPCZnZnhfaWNrPjsKLQl9OwotCi0JY29yZV9sM19jbGtkbTogY29yZV9sM19jbGtkbSB7Ci0J CWNvbXBhdGlibGUgPSAidGksY2xvY2tkb21haW4iOwotCQljbG9ja3MgPSA8JmNhbV9mY2s+LCA8 JnZseW5xX2ljaz4sIDwmdXNiX2Zjaz47Ci0JfTsKLQotCXdrdXBfY2xrZG06IHdrdXBfY2xrZG0g ewotCQljb21wYXRpYmxlID0gInRpLGNsb2NrZG9tYWluIjsKLQkJY2xvY2tzID0gPCZkcGxsX2Nr PiwgPCZlbXVsX2NrPiwgPCZncHQxX2ljaz4sIDwmZ3Bpb3NfaWNrPiwKLQkJCSA8JmdwaW9zX2Zj az4sIDwmbXB1X3dkdF9pY2s+LCA8Jm1wdV93ZHRfZmNrPiwKLQkJCSA8JnN5bmNfMzJrX2ljaz4s IDwmd2R0MV9pY2s+LCA8Jm9tYXBjdHJsX2ljaz47Ci0JfTsKLQotCWl2YTFfY2xrZG06IGl2YTFf Y2xrZG0gewotCQljb21wYXRpYmxlID0gInRpLGNsb2NrZG9tYWluIjsKLQkJY2xvY2tzID0gPCZp dmExX21wdV9pbnRfaWZjaz47Ci0JfTsKLQotCWRzc19jbGtkbTogZHNzX2Nsa2RtIHsKLQkJY29t cGF0aWJsZSA9ICJ0aSxjbG9ja2RvbWFpbiI7Ci0JCWNsb2NrcyA9IDwmZHNzX2ljaz4sIDwmZHNz XzU0bV9mY2s+OwotCX07Ci0KLQljb3JlX2w0X2Nsa2RtOiBjb3JlX2w0X2Nsa2RtIHsKLQkJY29t cGF0aWJsZSA9ICJ0aSxjbG9ja2RvbWFpbiI7Ci0JCWNsb2NrcyA9IDwmc3NpX2w0X2ljaz4sIDwm Z3B0Ml9pY2s+LCA8JmdwdDNfaWNrPiwgPCZncHQ0X2ljaz4sCi0JCQkgPCZncHQ1X2ljaz4sIDwm Z3B0Nl9pY2s+LCA8JmdwdDdfaWNrPiwgPCZncHQ4X2ljaz4sCi0JCQkgPCZncHQ5X2ljaz4sIDwm Z3B0MTBfaWNrPiwgPCZncHQxMV9pY2s+LCA8JmdwdDEyX2ljaz4sCi0JCQkgPCZtY2JzcDFfaWNr PiwgPCZtY2JzcDJfaWNrPiwgPCZtY3NwaTFfaWNrPiwKLQkJCSA8Jm1jc3BpMV9mY2s+LCA8Jm1j c3BpMl9pY2s+LCA8Jm1jc3BpMl9mY2s+LAotCQkJIDwmdWFydDFfaWNrPiwgPCZ1YXJ0MV9mY2s+ LCA8JnVhcnQyX2ljaz4sIDwmdWFydDJfZmNrPiwKLQkJCSA8JnVhcnQzX2ljaz4sIDwmdWFydDNf ZmNrPiwgPCZjYW1faWNrPiwKLQkJCSA8Jm1haWxib3hlc19pY2s+LCA8JndkdDRfaWNrPiwgPCZ3 ZHQ0X2Zjaz4sCi0JCQkgPCZ3ZHQzX2ljaz4sIDwmd2R0M19mY2s+LCA8Jm1zcHJvX2ljaz4sIDwm bXNwcm9fZmNrPiwKLQkJCSA8Jm1tY19pY2s+LCA8Jm1tY19mY2s+LCA8JmZhY19pY2s+LCA8JmZh Y19mY2s+LAotCQkJIDwmZWFjX2ljaz4sIDwmZWFjX2Zjaz4sIDwmaGRxX2ljaz4sIDwmaGRxX2Zj az4sCi0JCQkgPCZpMmMxX2ljaz4sIDwmaTJjMV9mY2s+LCA8JmkyYzJfaWNrPiwgPCZpMmMyX2Zj az4sCi0JCQkgPCZkZXNfaWNrPiwgPCZzaGFfaWNrPiwgPCZybmdfaWNrPiwgPCZhZXNfaWNrPiwK LQkJCSA8JnBrYV9pY2s+OwotCX07Ci19OwotCi0mZnVuY185Nm1fY2sgewotCWNvbXBhdGlibGUg PSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKLQljbG9ja3MgPSA8JmFwbGw5Nl9jaz47Ci0JY2xvY2st bXVsdCA9IDwxPjsKLQljbG9jay1kaXYgPSA8MT47Ci19OwotCi0mZHNwX2Rpdl9mY2sgewotCXRp LGRpdmlkZXJzID0gPDA+LCA8MT4sIDwyPiwgPDM+LCA8ND4sIDwwPiwgPDY+LCA8MD4sIDw4Piwg PDA+LCA8MD4sIDwwPiwgPDEyPjsKLX07Ci0KLSZzc2lfc3NyX3NzdF9kaXZfZmNrIHsKLQl0aSxk aXZpZGVycyA9IDwwPiwgPDE+LCA8Mj4sIDwzPiwgPDQ+LCA8MD4sIDw2PiwgPDA+LCA8OD47Ci19 OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQyMC1oNC5kdHMg Yi9hcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDIwLWg0LmR0cwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggNWFjZjVkZDg3YzU5Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9h cm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQyMC1oNC5kdHMKKysrIC9kZXYvbnVsbApAQCAtMSw2 MyArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgot ICogQ29weXJpZ2h0IChDKSAyMDEyIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0 dHBzOi8vd3d3LnRpLmNvbS8KLSAqLwotL2R0cy12MS87Ci0KLSNpbmNsdWRlICJvbWFwMjQyMC5k dHNpIgotCi0vIHsKLQltb2RlbCA9ICJUSSBPTUFQMjQyMCBINCBib2FyZCI7Ci0JY29tcGF0aWJs ZSA9ICJ0aSxvbWFwMjQyMC1oNCIsICJ0aSxvbWFwMjQyMCIsICJ0aSxvbWFwMiI7Ci0KLQltZW1v cnlAODAwMDAwMDAgewotCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MHg4MDAw MDAwMCAweDQwMDAwMDA+OyAvKiA2NCBNQiAqLwotCX07Ci19OwotCi0mZ3BtYyB7Ci0JcmFuZ2Vz ID0gPDAgMCAweDA4MDAwMDAwIDB4MDQwMDAwMDA+OwotCi0Jbm9yQDAsMCB7Ci0JCWNvbXBhdGli bGUgPSAiY2ZpLWZsYXNoIjsKLQkJbGludXgsbXRkLW5hbWUgPSAiaW50ZWwsZ2UyOGYyNTZsMThi ODUiOwotCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCXJl ZyA9IDwwIDAgMHgwNDAwMDAwMD47Ci0JCWJhbmstd2lkdGggPSA8Mj47Ci0KLQkJZ3BtYyxtdXgt YWRkLWRhdGEgPSA8Mj47Ci0JCWdwbWMsY3Mtb24tbnMgPSA8MTA+OwotCQlncG1jLGNzLXJkLW9m Zi1ucyA9IDwxNjA+OwotCQlncG1jLGNzLXdyLW9mZi1ucyA9IDwxNjA+OwotCQlncG1jLGFkdi1v bi1ucyA9IDwyMD47Ci0JCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDw1MD47Ci0JCWdwbWMsYWR2LXdy LW9mZi1ucyA9IDw1MD47Ci0JCWdwbWMsb2Utb24tbnMgPSA8NjA+OwotCQlncG1jLG9lLW9mZi1u cyA9IDwxMjA+OwotCQlncG1jLHdlLW9uLW5zID0gPDYwPjsKLQkJZ3BtYyx3ZS1vZmYtbnMgPSA8 MTIwPjsKLQkJZ3BtYyxyZC1jeWNsZS1ucyA9IDwxNzA+OwotCQlncG1jLHdyLWN5Y2xlLW5zID0g PDE3MD47Ci0JCWdwbWMsYWNjZXNzLW5zID0gPDE1MD47Ci0JCWdwbWMscGFnZS1idXJzdC1hY2Nl c3MtbnMgPSA8MTA+OwotCi0JCXBhcnRpdGlvbkAwIHsKLQkJCWxhYmVsID0gImJvb3Rsb2FkZXIi OwotCQkJcmVnID0gPDAgMHgyMDAwMD47Ci0JCX07Ci0JCXBhcnRpdGlvbkAyMDAwMCB7Ci0JCQls YWJlbCA9ICJwYXJhbXMiOwotCQkJcmVnID0gPDB4MjAwMDAgMHgyMDAwMD47Ci0JCX07Ci0JCXBh cnRpdGlvbkA0MDAwMCB7Ci0JCQlsYWJlbCA9ICJrZXJuZWwiOwotCQkJcmVnID0gPDB4NDAwMDAg MHgyMDAwMDA+OwotCQl9OwotCQlwYXJ0aXRpb25AMjQwMDAwIHsKLQkJCWxhYmVsID0gImZpbGUt c3lzdGVtIjsKLQkJCXJlZyA9IDwweDI0MDAwMCAweDNkYzAwMDA+OwotCQl9OwotCX07Ci19Owpk aWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQyMC1uODAwLmR0cyBi L2FyY2gvYXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAtbjgwMC5kdHMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGYwNmQ3NjdlODE4Yi4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gv YXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAtbjgwMC5kdHMKKysrIC9kZXYvbnVsbApAQCAt MSw5ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vZHRzLXYx LzsKLQotI2luY2x1ZGUgIm9tYXAyNDIwLW44eDAtY29tbW9uLmR0c2kiCi0KLS8gewotCW1vZGVs ID0gIk5va2lhIE44MDAiOwotCWNvbXBhdGlibGUgPSAibm9raWEsbjgwMCIsICJub2tpYSxuOHgw IiwgInRpLG9tYXAyNDIwIiwgInRpLG9tYXAyIjsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9i b290L2R0cy90aS9vbWFwL29tYXAyNDIwLW44MTAtd2ltYXguZHRzIGIvYXJjaC9hcm0vYm9vdC9k dHMvdGkvb21hcC9vbWFwMjQyMC1uODEwLXdpbWF4LmR0cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYWM5YWNiZDYwOWI2Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vYm9vdC9k dHMvdGkvb21hcC9vbWFwMjQyMC1uODEwLXdpbWF4LmR0cworKysgL2Rldi9udWxsCkBAIC0xLDkg KzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS9kdHMtdjEvOwot Ci0jaW5jbHVkZSAib21hcDI0MjAtbjh4MC1jb21tb24uZHRzaSIKLQotLyB7Ci0JbW9kZWwgPSAi Tm9raWEgTjgxMCBXaU1heCI7Ci0JY29tcGF0aWJsZSA9ICJub2tpYSxuODEwLXdpbWF4IiwgIm5v a2lhLG44eDAiLCAidGksb21hcDI0MjAiLCAidGksb21hcDIiOwotfTsKZGlmZiAtLWdpdCBhL2Fy Y2gvYXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAtbjgxMC5kdHMgYi9hcmNoL2FybS9ib290 L2R0cy90aS9vbWFwL29tYXAyNDIwLW44MTAuZHRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAzYmY4MTc1ZDg1YTguLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90 aS9vbWFwL29tYXAyNDIwLW44MTAuZHRzCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAot Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS9kdHMtdjEvOwotCi0jaW5jbHVk ZSAib21hcDI0MjAtbjh4MC1jb21tb24uZHRzaSIKLQotLyB7Ci0JbW9kZWwgPSAiTm9raWEgTjgx MCI7Ci0JY29tcGF0aWJsZSA9ICJub2tpYSxuODEwIiwgIm5va2lhLG44eDAiLCAidGksb21hcDI0 MjAiLCAidGksb21hcDIiOwotCi0JdmlvX2FwZTogdmlvX2FwZSB7Ci0JCWNvbXBhdGlibGUgPSAi cmVndWxhdG9yLWZpeGVkIjsKLQkJcmVndWxhdG9yLW5hbWUgPSAidmlvX2FwZSI7Ci0JCXJlZ3Vs YXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9s dCA9IDwxODAwMDAwPjsKLQl9OwotCi0JdjI4X2FpYzogdjI4X2FpYyB7Ci0JCWNvbXBhdGlibGUg PSAicmVndWxhdG9yLWZpeGVkIjsKLQkJcmVndWxhdG9yLW5hbWUgPSAidjI4X2FpYyI7Ci0JCXJl Z3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OwotCQlyZWd1bGF0b3ItbWF4LW1pY3Jv dm9sdCA9IDwyODAwMDAwPjsKLQl9OwotfTsKLQotJm9tYXAyNDIwX3BteCB7Ci0JbWNic3AyX3Bp bnM6IG1jYnNwMi1waW5zIHsKLQkJcGluY3RybC1zaW5nbGUscGlucyA9IDwKLQkJCU9NQVAyNDIw X0NPUkVfSU9QQUQoMHgwMTI0LCBQSU5fSU5QVVQgfCBNVVhfTU9ERTEpCS8qIGVhY19hY19zY2xr Lm1jYnNwMl9jbGt4ICovCi0JCQlPTUFQMjQyMF9DT1JFX0lPUEFEKDB4MDEyNSwgUElOX0lOUFVU IHwgTVVYX01PREUxKQkvKiBlYWNfYWNfZnMubWNic3AyX2ZzeCAqLwotCQkJT01BUDI0MjBfQ09S RV9JT1BBRCgweDAxMjYsIFBJTl9JTlBVVCB8IE1VWF9NT0RFMSkJLyogZWFjX2FjX2Rpbi5tY2Jz cDJfZHIgKi8KLQkJCU9NQVAyNDIwX0NPUkVfSU9QQUQoMHgwMTI3LCBQSU5fT1VUUFVUIHwgTVVY X01PREUxKQkvKiBlYWNfYWNfZG91dC5tY2JzcDJfZHggKi8KLQkJPjsKLQl9OwotCi0JYWljMzNf cGluczogYWljMzMtcGlucyB7Ci0JCXBpbmN0cmwtc2luZ2xlLHBpbnMgPSA8Ci0JCQlPTUFQMjQy MF9DT1JFX0lPUEFEKDB4MDEyOSwgUElOX09VVFBVVCB8IE1VWF9NT0RFMykJLyogZWFjX2FjX3Jz dC5ncGlvMTE4ICovCi0JCQlPTUFQMjQyMF9DT1JFX0lPUEFEKDB4MDBlOCwgUElOX09VVFBVVCB8 IE1VWF9NT0RFMikJLyogdmx5bnFfdHgxLnN5c19jbGtvdXQyICovCi0JCT47Ci0JfTsKLX07Ci0K LSZpMmMyIHsKLQlhaWMzM0AxOCB7Ci0JCWNvbXBhdGlibGUgPSAidGksdGx2MzIwYWljMzMiOwot CQlyZWcgPSA8MHgxOD47Ci0KLQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQkJcGluY3Ry bC0wID0gPCZhaWMzM19waW5zPjsKLQotCQlyZXNldC1ncGlvcyA9IDwmZ3BpbzQgMjIgR1BJT19B Q1RJVkVfTE9XPjsgLyogZ3BpbzExOCAqLwotCi0JCWFpM3gtZ3Bpby1mdW5jID0gPAotCQkJMTAg LyogQUlDM1hfR1BJTzFfRlVOQ19ESUdJVEFMX01JQ19NT0RDTEsgKi8KLQkJCTUgLyogQUlDM1hf R1BJTzJfRlVOQ19ESUdJVEFMX01JQ19JTlBVVCAqLwotCQk+OwotCQlhaTN4LW1pY2JpYXMtdmcg PSA8MT47IC8qIDJWICovCi0KLQkJQVZERC1zdXBwbHkgPSA8JnYyOF9haWM+OwotCQlEUlZERC1z dXBwbHkgPSA8JnYyOF9haWM+OwotCQlJT1ZERC1zdXBwbHkgPSA8JnZpb19hcGU+OwotCQlEVkRE LXN1cHBseSA9IDwmdmlvX2FwZT47Ci0KLQkJYXNzaWduZWQtY2xvY2tzID0gPCZzeXNfY2xrb3V0 Ml9zcmM+LCA8JnN5c19jbGtvdXQyPjsKLQkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmZnVu Y185Nm1fY2s+OwotCQlhc3NpZ25lZC1jbG9jay1yYXRlcyA9IDwwPiwgPDEyMDAwMDAwPjsKLQl9 OwotfTsKLQotJm1jYnNwMiB7Ci0JcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLQlwaW5jdHJs LTAgPSA8Jm1jYnNwMl9waW5zPjsKLQotCXN0YXR1cyA9ICJva2F5IjsKLX07CmRpZmYgLS1naXQg YS9hcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDIwLW44eDAtY29tbW9uLmR0c2kgYi9h cmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDIwLW44eDAtY29tbW9uLmR0c2kKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlOWRkOGJiZmM4NS4uMDAwMDAwMDAwMDAwCi0tLSBh L2FyY2gvYXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAtbjh4MC1jb21tb24uZHRzaQorKysg L2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAotI2luY2x1ZGUgIm9tYXAyNDIwLmR0c2kiCi0KLS8gewotCW1lbW9yeUA4MDAwMDAw MCB7Ci0JCWRldmljZV90eXBlID0gIm1lbW9yeSI7Ci0JCXJlZyA9IDwweDgwMDAwMDAwIDB4ODAw MDAwMD47IC8qIDEyOCBNQiAqLwotCX07Ci0KLQljaG9zZW4gewotCQlzdGRvdXQtcGF0aCA9ICZ1 YXJ0MzsKLQl9OwotCi0Jb2NwIHsKLQkJaTJjMCB7Ci0JCQljb21wYXRpYmxlID0gImkyYy1jYnVz LWdwaW8iOwotCQkJZ3Bpb3MgPSA8JmdwaW8zIDIgR1BJT19BQ1RJVkVfSElHSCAvKiBncGlvNjYg Y2xrICovCi0JCQkJICZncGlvMyAxIEdQSU9fQUNUSVZFX0hJR0ggLyogZ3BpbzY1IGRhdCAqLwot CQkJCSAmZ3BpbzMgMCBHUElPX0FDVElWRV9ISUdIIC8qIGdwaW82NCBzZWwgKi8KLQkJCQk+Owot CQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCXJldHU6 IHJldHVAMSB7Ci0JCQkJY29tcGF0aWJsZSA9ICJub2tpYSxyZXR1IjsKLQkJCQlpbnRlcnJ1cHQt cGFyZW50ID0gPCZncGlvND47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMiBJUlFfVFlQRV9FREdFX1JJ U0lORz47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQl9OwotCQl9OwotCX07Ci19OwotCi0maTJjMSB7 Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47Ci0KLQlwbWljQDcyIHsKLQkJY29tcGF0aWJs ZSA9ICJtZW5lbGF1cyI7Ci0JCXJlZyA9IDwweDcyPjsKLQkJaW50ZXJydXB0cyA9IDw3IElSUV9U WVBFX0VER0VfUklTSU5HPjsKLQl9OwotfTsKLQotJmkyYzIgewotCWNsb2NrLWZyZXF1ZW5jeSA9 IDw0MDAwMDA+OwotfTsKLQotJmdwbWMgewotCXJhbmdlcyA9IDwwIDAgMHgwNDAwMDAwMCAweDEw MDAwMDA+OwkvKiBDUzA6IDE2TUIgZm9yIE9uZU5BTkQgKi8KLQotCS8qIGdwaW8taXJxIGZvciBk bWE6IDI2ICovCi0KLQlvbmVuYW5kQDAsMCB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkj c2l6ZS1jZWxscyA9IDwxPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi1vbmVuYW5kIjsKLQkJ cmVnID0gPDAgMCAweDIwMDAwPjsJLyogQ1MwLCBvZmZzZXQgMCwgSU8gc2l6ZSAxMjhLICovCi0K LQkJZ3BtYyxzeW5jLXJlYWQ7Ci0JCWdwbWMsYnVyc3QtbGVuZ3RoID0gPDE2PjsKLQkJZ3BtYyxi dXJzdC1yZWFkOwotCQlncG1jLGJ1cnN0LXdyYXA7Ci0JCWdwbWMsZGV2aWNlLXdpZHRoID0gPDI+ OwotCQlncG1jLG11eC1hZGQtZGF0YSA9IDwyPjsKLQkJZ3BtYyxjcy1vbi1ucyA9IDwwPjsKLQkJ Z3BtYyxjcy1yZC1vZmYtbnMgPSA8MTI3PjsKLQkJZ3BtYyxjcy13ci1vZmYtbnMgPSA8MTA5PjsK LQkJZ3BtYyxhZHYtb24tbnMgPSA8MD47Ci0JCWdwbWMsYWR2LXJkLW9mZi1ucyA9IDwxOD47Ci0J CWdwbWMsYWR2LXdyLW9mZi1ucyA9IDwxOD47Ci0JCWdwbWMsb2Utb24tbnMgPSA8Mjc+OwotCQln cG1jLG9lLW9mZi1ucyA9IDwxMjc+OwotCQlncG1jLHdlLW9uLW5zID0gPDI3PjsKLQkJZ3BtYyx3 ZS1vZmYtbnMgPSA8NzI+OwotCQlncG1jLHJkLWN5Y2xlLW5zID0gPDE0NT47Ci0JCWdwbWMsd3It Y3ljbGUtbnMgPSA8MTM2PjsKLQkJZ3BtYyxhY2Nlc3MtbnMgPSA8MTE4PjsKLQkJZ3BtYyxwYWdl LWJ1cnN0LWFjY2Vzcy1ucyA9IDwyNz47Ci0JCWdwbWMsYnVzLXR1cm5hcm91bmQtbnMgPSA8MD47 Ci0JCWdwbWMsY3ljbGUyY3ljbGUtZGVsYXktbnMgPSA8MD47Ci0JCWdwbWMsd2FpdC1tb25pdG9y aW5nLW5zID0gPDA+OwotCQlncG1jLGNsay1hY3RpdmF0aW9uLW5zID0gPDk+OwotCQlncG1jLHN5 bmMtY2xrLXBzID0gPDI3MDAwPjsKLQotCQkvKiBNVEQgcGFydGl0aW9uIHRhYmxlIGNvcnJlc3Bv bmRpbmcgdG8gb2xkIGJvYXJkLW44eDAgZmlsZS4gKi8KLQkJcGFydGl0aW9uQDAgewotCQkJbGFi ZWwgPSAiYm9vdGxvYWRlciI7Ci0JCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDIwMDAwPjsKLQkJ CXJlYWQtb25seTsKLQkJfTsKLQkJcGFydGl0aW9uQDEgewotCQkJbGFiZWwgPSAiY29uZmlnIjsK LQkJCXJlZyA9IDwweDAwMDIwMDAwIDB4MDAwNjAwMDA+OwotCQl9OwotCQlwYXJ0aXRpb25AMiB7 Ci0JCQlsYWJlbCA9ICJrZXJuZWwiOwotCQkJcmVnID0gPDB4MDAwODAwMDAgMHgwMDIwMDAwMD47 Ci0JCX07Ci0JCXBhcnRpdGlvbkAzIHsKLQkJCWxhYmVsID0gImluaXRmcyI7Ci0JCQlyZWcgPSA8 MHgwMDI4MDAwMCAweDAwNDAwMDAwPjsKLQkJfTsKLQkJcGFydGl0aW9uQDQgewotCQkJbGFiZWwg PSAicm9vdGZzIjsKLQkJCXJlZyA9IDwweDAwNjgwMDAwIDB4MGY5ODAwMDA+OwotCQl9OwotCQlw YXJ0aXRpb25ANSB7Ci0JCQlsYWJlbCA9ICJvbWFwMi1vbmVuYW5kIjsKLQkJCXJlZyA9IDwweDAw MDAwMDAwIDB4MTAwMDAwMDA+OwotCQl9OwotCX07Ci19OwotCi0mbWNzcGkyIHsKLQlzdGF0dXMg PSAib2theSI7Ci0KLQl3aWZpQDAgewotCQlyZWcgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAic3Qs c3RsYzQ1NjAiOwotCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw0ODAwMDAwMD47Ci0JCWludGVycnVw dHMtZXh0ZW5kZWQgPSA8JmdwaW8zIDIzIElSUV9UWVBFX0VER0VfUklTSU5HPjsKLQkJcG93ZXJk b3duLWdwaW9zID0gPCZncGlvNCAxIEdQSU9fQUNUSVZFX0xPVz47IC8qIGdwaW8gOTcgKi8KLQl9 OwotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAuZHRz aSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0MjAuZHRzaQpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggODIxZGE1MWNiODcwLi4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9h cm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQyMC5kdHNpCisrKyAvZGV2L251bGwKQEAgLTEsMjYy ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0g KiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIE9NQVAyNDIwIFNvQwotICoKLSAqIENvcHlyaWdodCAo QykgMjAxMiBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwczovL3d3dy50aS5j b20vCi0gKi8KLQotI2luY2x1ZGUgIm9tYXAyLmR0c2kiCi0KLS8gewotCWNvbXBhdGlibGUgPSAi dGksb21hcDI0MjAiLCAidGksb21hcDIiOwotCi0Jb2NwIHsKLQkJbDQ6IGw0QDQ4MDAwMDAwIHsK LQkJCWNvbXBhdGlibGUgPSAidGksb21hcDItbDQiLCAic2ltcGxlLWJ1cyI7Ci0JCQkjYWRkcmVz cy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJcmFuZ2VzID0gPDAgMHg0 ODAwMDAwMCAweDEwMDAwMD47Ci0KLQkJCXByY206IHByY21AODAwMCB7Ci0JCQkJY29tcGF0aWJs ZSA9ICJ0aSxvbWFwMi1wcmNtIjsKLQkJCQlyZWcgPSA8MHg4MDAwIDB4MTAwMD47Ci0KLQkJCQlw cmNtX2Nsb2NrczogY2xvY2tzIHsKLQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJCSNz aXplLWNlbGxzID0gPDA+OwotCQkJCX07Ci0KLQkJCQlwcmNtX2Nsb2NrZG9tYWluczogY2xvY2tk b21haW5zIHsKLQkJCQl9OwotCQkJfTsKLQotCQkJc2NtOiBzY21AMCB7Ci0JCQkJY29tcGF0aWJs ZSA9ICJ0aSxvbWFwMi1zY20iLCAic2ltcGxlLWJ1cyI7Ci0JCQkJcmVnID0gPDB4MCAweDEwMDA+ OwotCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJ CSNwaW5jdHJsLWNlbGxzID0gPDE+OwotCQkJCXJhbmdlcyA9IDwwIDB4MCAweDEwMDA+OwotCi0J CQkJb21hcDI0MjBfcG14OiBwaW5tdXhAMzAgewotCQkJCQljb21wYXRpYmxlID0gInRpLG9tYXAy NDIwLXBhZGNvbmYiLAotCQkJCQkJICAgICAicGluY3RybC1zaW5nbGUiOwotCQkJCQlyZWcgPSA8 MHgzMCAweDAxMTM+OwotCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkJI3NpemUtY2Vs bHMgPSA8MD47Ci0JCQkJCSNwaW5jdHJsLWNlbGxzID0gPDE+OwotCQkJCQlwaW5jdHJsLXNpbmds ZSxyZWdpc3Rlci13aWR0aCA9IDw4PjsKLQkJCQkJcGluY3RybC1zaW5nbGUsZnVuY3Rpb24tbWFz ayA9IDwweDNmPjsKLQkJCQl9OwotCi0JCQkJc2NtX2NvbmY6IHNjbV9jb25mQDI3MCB7Ci0JCQkJ CWNvbXBhdGlibGUgPSAic3lzY29uIjsKLQkJCQkJcmVnID0gPDB4MjcwIDB4MTAwPjsKLQkJCQkJ I2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCi0JCQkJCXNj bV9jbG9ja3M6IGNsb2NrcyB7Ci0JCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkJCSNz aXplLWNlbGxzID0gPDA+OwotCQkJCQl9OwotCQkJCX07Ci0KLQkJCQlzY21fY2xvY2tkb21haW5z OiBjbG9ja2RvbWFpbnMgewotCQkJCX07Ci0JCQl9OwotCi0JCQl0YXJnZXQtbW9kdWxlQDQwMDAg ewotCQkJCWNvbXBhdGlibGUgPSAidGksc3lzYy1vbWFwMiIsICJ0aSxzeXNjIjsKLQkJCQlyZWcg PSA8MHg0MDAwIDB4ND4sCi0JCQkJICAgICAgPDB4NDAwNCAweDQ+OwotCQkJCXJlZy1uYW1lcyA9 ICJyZXYiLCAic3lzYyI7Ci0JCQkJdGksc3lzYy1zaWRsZSA9IDxTWVNDX0lETEVfRk9SQ0U+LAot CQkJCQkJPFNZU0NfSURMRV9OTz47Ci0JCQkJY2xvY2tzID0gPCZmdW5jXzMya19jaz47Ci0JCQkJ Y2xvY2stbmFtZXMgPSAiZmNrIjsKLQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6 ZS1jZWxscyA9IDwxPjsKLQkJCQlyYW5nZXMgPSA8MHgwIDB4NDAwMCAweDEwMDA+OwotCi0JCQkJ Y291bnRlcjMyazogY291bnRlckAwIHsKLQkJCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwLWNvdW50 ZXIzMmsiOwotCQkJCQlyZWcgPSA8MCAweDIwPjsKLQkJCQl9OwotCQkJfTsKLQkJfTsKLQotCQln cGlvMTogZ3Bpb0A0ODAxODAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyLWdwaW8iOwot CQkJcmVnID0gPDB4NDgwMTgwMDAgMHgyMDA+OwotCQkJaW50ZXJydXB0cyA9IDwyOT47Ci0JCQl0 aSxod21vZHMgPSAiZ3BpbzEiOwotCQkJdGksZ3Bpby1hbHdheXMtb247Ci0JCQkjZ3Bpby1jZWxs cyA9IDwyPjsKLQkJCWdwaW8tY29udHJvbGxlcjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47 Ci0JCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJfTsKLQotCQlncGlvMjogZ3Bpb0A0ODAxYTAw MCB7Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyLWdwaW8iOwotCQkJcmVnID0gPDB4NDgwMWEw MDAgMHgyMDA+OwotCQkJaW50ZXJydXB0cyA9IDwzMD47Ci0JCQl0aSxod21vZHMgPSAiZ3BpbzIi OwotCQkJdGksZ3Bpby1hbHdheXMtb247Ci0JCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCWdwaW8t Y29udHJvbGxlcjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlpbnRlcnJ1cHQtY29u dHJvbGxlcjsKLQkJfTsKLQotCQlncGlvMzogZ3Bpb0A0ODAxYzAwMCB7Ci0JCQljb21wYXRpYmxl ID0gInRpLG9tYXAyLWdwaW8iOwotCQkJcmVnID0gPDB4NDgwMWMwMDAgMHgyMDA+OwotCQkJaW50 ZXJydXB0cyA9IDwzMT47Ci0JCQl0aSxod21vZHMgPSAiZ3BpbzMiOwotCQkJdGksZ3Bpby1hbHdh eXMtb247Ci0JCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCWdwaW8tY29udHJvbGxlcjsKLQkJCSNp bnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJfTsKLQot CQlncGlvNDogZ3Bpb0A0ODAxZTAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyLWdwaW8i OwotCQkJcmVnID0gPDB4NDgwMWUwMDAgMHgyMDA+OwotCQkJaW50ZXJydXB0cyA9IDwzMj47Ci0J CQl0aSxod21vZHMgPSAiZ3BpbzQiOwotCQkJdGksZ3Bpby1hbHdheXMtb247Ci0JCQkjZ3Bpby1j ZWxscyA9IDwyPjsKLQkJCWdwaW8tY29udHJvbGxlcjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8 Mj47Ci0JCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJfTsKLQotCQlncG1jOiBncG1jQDY4MDBh MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksb21hcDI0MjAtZ3BtYyI7Ci0JCQlyZWcgPSA8MHg2 ODAwYTAwMCAweDEwMDA+OwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCQkjc2l6ZS1jZWxs cyA9IDwxPjsKLQkJCWludGVycnVwdHMgPSA8MjA+OwotCQkJZ3BtYyxudW0tY3MgPSA8OD47Ci0J CQlncG1jLG51bS13YWl0cGlucyA9IDw0PjsKLQkJCXRpLGh3bW9kcyA9ICJncG1jIjsKLQkJCWlu dGVycnVwdC1jb250cm9sbGVyOwotCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCWdwaW8t Y29udHJvbGxlcjsKLQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQl9OwotCi0JCW1jYnNwMTogbWNi c3BANDgwNzQwMDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMjQyMC1tY2JzcCI7Ci0JCQly ZWcgPSA8MHg0ODA3NDAwMCAweGZmPjsKLQkJCXJlZy1uYW1lcyA9ICJtcHUiOwotCQkJaW50ZXJy dXB0cyA9IDw1OT4sIC8qIFRYIGludGVycnVwdCAqLwotCQkJCSAgICAgPDYwPjsgLyogUlggaW50 ZXJydXB0ICovCi0JCQlpbnRlcnJ1cHQtbmFtZXMgPSAidHgiLCAicngiOwotCQkJdGksaHdtb2Rz ID0gIm1jYnNwMSI7Ci0JCQlkbWFzID0gPCZzZG1hIDMxPiwKLQkJCSAgICAgICA8JnNkbWEgMzI+ OwotCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKLQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0J CX07Ci0KLQkJbWNic3AyOiBtY2JzcEA0ODA3NjAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRpLG9t YXAyNDIwLW1jYnNwIjsKLQkJCXJlZyA9IDwweDQ4MDc2MDAwIDB4ZmY+OwotCQkJcmVnLW5hbWVz ID0gIm1wdSI7Ci0JCQlpbnRlcnJ1cHRzID0gPDYyPiwgLyogVFggaW50ZXJydXB0ICovCi0JCQkJ ICAgICA8NjM+OyAvKiBSWCBpbnRlcnJ1cHQgKi8KLQkJCWludGVycnVwdC1uYW1lcyA9ICJ0eCIs ICJyeCI7Ci0JCQl0aSxod21vZHMgPSAibWNic3AyIjsKLQkJCWRtYXMgPSA8JnNkbWEgMzM+LAot CQkJICAgICAgIDwmc2RtYSAzND47Ci0JCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwotCQkJc3Rh dHVzID0gImRpc2FibGVkIjsKLQkJfTsKLQotCQltc2RpMTogbW1jQDQ4MDljMDAwIHsKLQkJCWNv bXBhdGlibGUgPSAidGksb21hcDI0MjAtbW1jIjsKLQkJCXRpLGh3bW9kcyA9ICJtc2RpMSI7Ci0J CQlyZWcgPSA8MHg0ODA5YzAwMCAweDgwPjsKLQkJCWludGVycnVwdHMgPSA8ODM+OwotCQkJZG1h cyA9IDwmc2RtYSA2MSAmc2RtYSA2Mj47Ci0JCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwotCQl9 OwotCi0JCW1haWxib3g6IG1haWxib3hANDgwOTQwMDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxv bWFwMi1tYWlsYm94IjsKLQkJCXJlZyA9IDwweDQ4MDk0MDAwIDB4MjAwPjsKLQkJCWludGVycnVw dHMgPSA8MjY+LCA8MzQ+OwotCQkJdGksaHdtb2RzID0gIm1haWxib3giOwotCQkJI21ib3gtY2Vs bHMgPSA8MT47Ci0JCQl0aSxtYm94LW51bS11c2VycyA9IDw0PjsKLQkJCXRpLG1ib3gtbnVtLWZp Zm9zID0gPDY+OwotCQkJbWJveF9kc3A6IG1ib3gtZHNwIHsKLQkJCQl0aSxtYm94LXR4ID0gPDAg MCAwPjsKLQkJCQl0aSxtYm94LXJ4ID0gPDEgMCAwPjsKLQkJCX07Ci0JCQltYm94X2l2YTogbWJv eC1pdmEgewotCQkJCXRpLG1ib3gtdHggPSA8MiAxIDM+OwotCQkJCXRpLG1ib3gtcnggPSA8MyAx IDM+OwotCQkJfTsKLQkJfTsKLQotCQl0aW1lcjFfdGFyZ2V0OiB0YXJnZXQtbW9kdWxlQDQ4MDI4 MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksc3lzYy1vbWFwMi10aW1lciIsICJ0aSxzeXNjIjsK LQkJCXJlZyA9IDwweDQ4MDI4MDAwIDB4ND4sCi0JCQkgICAgICA8MHg0ODAyODAxMCAweDQ+LAot CQkJICAgICAgPDB4NDgwMjgwMTQgMHg0PjsKLQkJCXJlZy1uYW1lcyA9ICJyZXYiLCAic3lzYyIs ICJzeXNzIjsKLQkJCXRpLHN5c2MtbWFzayA9IDwoU1lTQ19PTUFQMl9DTE9DS0FDVElWSVRZIHwK LQkJCQkJIFNZU0NfT01BUDJfRU1VRlJFRSB8Ci0JCQkJCSBTWVNDX09NQVAyX0VOQVdBS0VVUCB8 Ci0JCQkJCSBTWVNDX09NQVAyX1NPRlRSRVNFVCB8Ci0JCQkJCSBTWVNDX09NQVAyX0FVVE9JRExF KT47Ci0JCQl0aSxzeXNjLXNpZGxlID0gPFNZU0NfSURMRV9GT1JDRT4sCi0JCQkJCTxTWVNDX0lE TEVfTk8+LAotCQkJCQk8U1lTQ19JRExFX1NNQVJUPjsKLQkJCXRpLHN5c3MtbWFzayA9IDwxPjsK LQkJCWNsb2NrcyA9IDwmZ3B0MV9mY2s+LCA8JmdwdDFfaWNrPjsKLQkJCWNsb2NrLW5hbWVzID0g ImZjayIsICJpY2siOwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9 IDwxPjsKLQkJCXJhbmdlcyA9IDwweDAgMHg0ODAyODAwMCAweDEwMDA+OwotCi0JCQl0aW1lcjE6 IHRpbWVyQDAgewotCQkJCWNvbXBhdGlibGUgPSAidGksb21hcDI0MjAtdGltZXIiOwotCQkJCXJl ZyA9IDwwIDB4NDAwPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDM3PjsKLQkJCQl0aSx0aW1lci1hbHdv bjsKLQkJCX07Ci0JCX07Ci0KLQkJd2RfdGltZXIyOiB3ZHRANDgwMjIwMDAgewotCQkJY29tcGF0 aWJsZSA9ICJ0aSxvbWFwMi13ZHQiOwotCQkJdGksaHdtb2RzID0gIndkX3RpbWVyMiI7Ci0JCQly ZWcgPSA8MHg0ODAyMjAwMCAweDgwPjsKLQkJfTsKLQl9OwotfTsKLQotJmkyYzEgewotCWNvbXBh dGlibGUgPSAidGksb21hcDI0MjAtaTJjIjsKLX07Ci0KLSZpMmMyIHsKLQljb21wYXRpYmxlID0g InRpLG9tYXAyNDIwLWkyYyI7Ci19OwotCi0jaW5jbHVkZSAib21hcDI0eHgtY2xvY2tzLmR0c2ki Ci0jaW5jbHVkZSAib21hcDI0MjAtY2xvY2tzLmR0c2kiCi0KLS8qIFByZWZlcnJlZCBhbHdheXMt b24gdGltZXIgZm9yIGNsb2NrZXZlbnQgKi8KLSZ0aW1lcjFfdGFyZ2V0IHsKLQl0aSxuby1yZXNl dC1vbi1pbml0OwotCXRpLG5vLWlkbGU7Ci0JdGltZXJAMCB7Ci0JCWFzc2lnbmVkLWNsb2NrcyA9 IDwmZ3B0MV9mY2s+OwotCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZmdW5jXzMya19jaz47 Ci0JfTsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDMw LWNsb2Nrcy5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQzMC1jbG9ja3Mu ZHRzaQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU1YWI1MTg5NDc2Li4wMDAwMDAw MDAwMDAKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQzMC1jbG9ja3MuZHRz aQorKysgL2Rldi9udWxsCkBAIC0xLDM0MSArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBPTUFQMjQz MCBjbG9jayBkYXRhCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRz LCBJbmMuCi0gKi8KLQotJnNjbV9jbG9ja3MgewotCW1jYnNwM19tdXhfZmNrOiBtY2JzcDNfbXV4 X2Zja0A3OCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21w b3NpdGUtbXV4LWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzk2bV9jaz4sIDwmbWNic3BfY2xr cz47Ci0JCXJlZyA9IDwweDc4PjsKLQl9OwotCi0JbWNic3AzX2ZjazogbWNic3AzX2ZjayB7Ci0J CSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2si OwotCQljbG9ja3MgPSA8Jm1jYnNwM19nYXRlX2Zjaz4sIDwmbWNic3AzX211eF9mY2s+OwotCX07 Ci0KLQltY2JzcDRfbXV4X2ZjazogbWNic3A0X211eF9mY2tANzggewotCQkjY2xvY2stY2VsbHMg PSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7Ci0JCWNsb2Nr cyA9IDwmZnVuY185Nm1fY2s+LCA8Jm1jYnNwX2Nsa3M+OwotCQl0aSxiaXQtc2hpZnQgPSA8Mj47 Ci0JCXJlZyA9IDwweDc4PjsKLQl9OwotCi0JbWNic3A0X2ZjazogbWNic3A0X2ZjayB7Ci0JCSNj bG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOwot CQljbG9ja3MgPSA8Jm1jYnNwNF9nYXRlX2Zjaz4sIDwmbWNic3A0X211eF9mY2s+OwotCX07Ci0K LQltY2JzcDVfbXV4X2ZjazogbWNic3A1X211eF9mY2tANzggewotCQkjY2xvY2stY2VsbHMgPSA8 MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7Ci0JCWNsb2NrcyA9 IDwmZnVuY185Nm1fY2s+LCA8Jm1jYnNwX2Nsa3M+OwotCQl0aSxiaXQtc2hpZnQgPSA8ND47Ci0J CXJlZyA9IDwweDc4PjsKLQl9OwotCi0JbWNic3A1X2ZjazogbWNic3A1X2ZjayB7Ci0JCSNjbG9j ay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOwotCQlj bG9ja3MgPSA8Jm1jYnNwNV9nYXRlX2Zjaz4sIDwmbWNic3A1X211eF9mY2s+OwotCX07Ci19Owot Ci0mcHJjbV9jbG9ja3MgewotCWl2YTJfMV9nYXRlX2ljazogaXZhMl8xX2dhdGVfaWNrQDgwMCB7 Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0 ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZHNwX2Zjaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwwPjsK LQkJcmVnID0gPDB4MDgwMD47Ci0JfTsKLQotCWl2YTJfMV9kaXZfaWNrOiBpdmEyXzFfZGl2X2lj a0A4NDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9z aXRlLWRpdmlkZXItY2xvY2siOwotCQljbG9ja3MgPSA8JmRzcF9mY2s+OwotCQl0aSxiaXQtc2hp ZnQgPSA8NT47Ci0JCXRpLG1heC1kaXYgPSA8Mz47Ci0JCXJlZyA9IDwweDA4NDA+OwotCQl0aSxp bmRleC1zdGFydHMtYXQtb25lOwotCX07Ci0KLQlpdmEyXzFfaWNrOiBpdmEyXzFfaWNrIHsKLQkJ I2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7 Ci0JCWNsb2NrcyA9IDwmaXZhMl8xX2dhdGVfaWNrPiwgPCZpdmEyXzFfZGl2X2ljaz47Ci0JfTsK LQotCW1kbV9nYXRlX2ljazogbWRtX2dhdGVfaWNrQGMxMCB7Ci0JCSNjbG9jay1jZWxscyA9IDww PjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xv Y2tzID0gPCZjb3JlX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDA+OwotCQlyZWcgPSA8MHgwYzEw PjsKLQl9OwotCi0JbWRtX2Rpdl9pY2s6IG1kbV9kaXZfaWNrQGM0MCB7Ci0JCSNjbG9jay1jZWxs cyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZGl2aWRlci1jbG9jayI7Ci0J CWNsb2NrcyA9IDwmY29yZV9jaz47Ci0JCXJlZyA9IDwweDBjNDA+OwotCQl0aSxkaXZpZGVycyA9 IDwwPiwgPDE+LCA8MD4sIDwwPiwgPDQ+LCA8MD4sIDw2PiwgPDA+LCA8MD4sIDw5PjsKLQl9Owot Ci0JbWRtX2ljazogbWRtX2ljayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJs ZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOwotCQljbG9ja3MgPSA8Jm1kbV9nYXRlX2ljaz4sIDwm bWRtX2Rpdl9pY2s+OwotCX07Ci0KLQltZG1fb3NjX2NrOiBtZG1fb3NjX2NrQGMwMCB7Ci0JCSNj bG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xv Y2siOwotCQljbG9ja3MgPSA8Jm9zY19jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxPjsKLQkJcmVn ID0gPDB4MGMwMD47Ci0JfTsKLQotCW1jYnNwM19pY2s6IG1jYnNwM19pY2tAMjE0IHsKLQkJI2Ns b2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9j ayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8Mz47Ci0JCXJlZyA9 IDwweDAyMTQ+OwotCX07Ci0KLQltY2JzcDNfZ2F0ZV9mY2s6IG1jYnNwM19nYXRlX2Zja0AyMDQg ewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdh dGUtY2xvY2siOwotCQljbG9ja3MgPSA8Jm1jYnNwX2Nsa3M+OwotCQl0aSxiaXQtc2hpZnQgPSA8 Mz47Ci0JCXJlZyA9IDwweDAyMDQ+OwotCX07Ci0KLQltY2JzcDRfaWNrOiBtY2JzcDRfaWNrQDIx NCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRl cmZhY2UtY2xvY2siOwotCQljbG9ja3MgPSA8Jmw0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDQ+ OwotCQlyZWcgPSA8MHgwMjE0PjsKLQl9OwotCi0JbWNic3A0X2dhdGVfZmNrOiBtY2JzcDRfZ2F0 ZV9mY2tAMjA0IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNv bXBvc2l0ZS1nYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZtY2JzcF9jbGtzPjsKLQkJdGksYml0 LXNoaWZ0ID0gPDQ+OwotCQlyZWcgPSA8MHgwMjA0PjsKLQl9OwotCi0JbWNic3A1X2ljazogbWNi c3A1X2lja0AyMTQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGks b21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1z aGlmdCA9IDw1PjsKLQkJcmVnID0gPDB4MDIxND47Ci0JfTsKLQotCW1jYnNwNV9nYXRlX2Zjazog bWNic3A1X2dhdGVfZmNrQDIwNCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJs ZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbWNic3BfY2xrcz47 Ci0JCXRpLGJpdC1zaGlmdCA9IDw1PjsKLQkJcmVnID0gPDB4MDIwND47Ci0JfTsKLQotCW1jc3Bp M19pY2s6IG1jc3BpM19pY2tAMjE0IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRp YmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+Owot CQl0aSxiaXQtc2hpZnQgPSA8OT47Ci0JCXJlZyA9IDwweDAyMTQ+OwotCX07Ci0KLQltY3NwaTNf ZmNrOiBtY3NwaTNfZmNrQDIwNCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJs ZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfNDhtX2NrPjsKLQkJ dGksYml0LXNoaWZ0ID0gPDk+OwotCQlyZWcgPSA8MHgwMjA0PjsKLQl9OwotCi0JaWNyX2ljazog aWNyX2lja0A0MTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGks b21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZzeXNfY2s+OwotCQl0aSxiaXQt c2hpZnQgPSA8Nj47Ci0JCXJlZyA9IDwweDA0MTA+OwotCX07Ci0KLQlpMmNoczFfZmNrOiBpMmNo czFfZmNrQDIwNCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxv bWFwMjQzMC1pbnRlcmZhY2UtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfOTZtX2NrPjsKLQkJ dGksYml0LXNoaWZ0ID0gPDE5PjsKLQkJcmVnID0gPDB4MDIwND47Ci0JfTsKLQotCWkyY2hzMl9m Y2s6IGkyY2hzMl9mY2tAMjA0IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxl ID0gInRpLG9tYXAyNDMwLWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY185Nm1f Y2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MjA+OwotCQlyZWcgPSA8MHgwMjA0PjsKLQl9OwotCi0J dXNiaHNfaWNrOiB1c2Joc19pY2tAMjE0IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21w YXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmY29yZV9s M19jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDw2PjsKLQkJcmVnID0gPDB4MDIxND47Ci0JfTsKLQot CW1tY2hzMV9pY2s6IG1tY2hzMV9pY2tAMjE0IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQlj b21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRf Y2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8Nz47Ci0JCXJlZyA9IDwweDAyMTQ+OwotCX07Ci0KLQlt bWNoczFfZmNrOiBtbWNoczFfZmNrQDIwNCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29t cGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfOTZtX2Nr PjsKLQkJdGksYml0LXNoaWZ0ID0gPDc+OwotCQlyZWcgPSA8MHgwMjA0PjsKLQl9OwotCi0JbW1j aHMyX2ljazogbW1jaHMyX2lja0AyMTQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBh dGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47 Ci0JCXRpLGJpdC1zaGlmdCA9IDw4PjsKLQkJcmVnID0gPDB4MDIxND47Ci0JfTsKLQotCW1tY2hz Ml9mY2s6IG1tY2hzMl9mY2tAMjA0IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRp YmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY185Nm1fY2s+Owot CQl0aSxiaXQtc2hpZnQgPSA8OD47Ci0JCXJlZyA9IDwweDAyMDQ+OwotCX07Ci0KLQlncGlvNV9p Y2s6IGdwaW81X2lja0AyMTQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUg PSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRp LGJpdC1zaGlmdCA9IDwxMD47Ci0JCXJlZyA9IDwweDAyMTQ+OwotCX07Ci0KLQlncGlvNV9mY2s6 IGdwaW81X2Zja0AyMDQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAi dGksd2FpdC1nYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzMya19jaz47Ci0JCXRpLGJp dC1zaGlmdCA9IDwxMD47Ci0JCXJlZyA9IDwweDAyMDQ+OwotCX07Ci0KLQltZG1faW50Y19pY2s6 IG1kbV9pbnRjX2lja0AyMTQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUg PSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRp LGJpdC1zaGlmdCA9IDwxMT47Ci0JCXJlZyA9IDwweDAyMTQ+OwotCX07Ci0KLQltbWNoc2RiMV9m Y2s6IG1tY2hzZGIxX2Zja0AyMDQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGli bGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzMya19jaz47Ci0J CXRpLGJpdC1zaGlmdCA9IDwxNj47Ci0JCXJlZyA9IDwweDAyMDQ+OwotCX07Ci0KLQltbWNoc2Ri Ml9mY2s6IG1tY2hzZGIyX2Zja0AyMDQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBh dGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzMya19jaz47 Ci0JCXRpLGJpdC1zaGlmdCA9IDwxNz47Ci0JCXJlZyA9IDwweDAyMDQ+OwotCX07Ci19OwotCi0m cHJjbV9jbG9ja2RvbWFpbnMgewotCWdmeF9jbGtkbTogZ2Z4X2Nsa2RtIHsKLQkJY29tcGF0aWJs ZSA9ICJ0aSxjbG9ja2RvbWFpbiI7Ci0JCWNsb2NrcyA9IDwmZ2Z4X2ljaz47Ci0JfTsKLQotCWNv cmVfbDNfY2xrZG06IGNvcmVfbDNfY2xrZG0gewotCQljb21wYXRpYmxlID0gInRpLGNsb2NrZG9t YWluIjsKLQkJY2xvY2tzID0gPCZjYW1fZmNrPiwgPCZ1c2JfZmNrPiwgPCZ1c2Joc19pY2s+Owot CX07Ci0KLQl3a3VwX2Nsa2RtOiB3a3VwX2Nsa2RtIHsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjbG9j a2RvbWFpbiI7Ci0JCWNsb2NrcyA9IDwmZHBsbF9jaz4sIDwmZW11bF9jaz4sIDwmZ3B0MV9pY2s+ LCA8JmdwaW9zX2ljaz4sCi0JCQkgPCZncGlvc19mY2s+LCA8Jm1wdV93ZHRfaWNrPiwgPCZtcHVf d2R0X2Zjaz4sCi0JCQkgPCZzeW5jXzMya19pY2s+LCA8JndkdDFfaWNrPiwgPCZvbWFwY3RybF9p Y2s+LAotCQkJIDwmaWNyX2ljaz47Ci0JfTsKLQotCWRzc19jbGtkbTogZHNzX2Nsa2RtIHsKLQkJ Y29tcGF0aWJsZSA9ICJ0aSxjbG9ja2RvbWFpbiI7Ci0JCWNsb2NrcyA9IDwmZHNzX2ljaz4sIDwm ZHNzXzU0bV9mY2s+OwotCX07Ci0KLQljb3JlX2w0X2Nsa2RtOiBjb3JlX2w0X2Nsa2RtIHsKLQkJ Y29tcGF0aWJsZSA9ICJ0aSxjbG9ja2RvbWFpbiI7Ci0JCWNsb2NrcyA9IDwmc3NpX2w0X2ljaz4s IDwmZ3B0Ml9pY2s+LCA8JmdwdDNfaWNrPiwgPCZncHQ0X2ljaz4sCi0JCQkgPCZncHQ1X2ljaz4s IDwmZ3B0Nl9pY2s+LCA8JmdwdDdfaWNrPiwgPCZncHQ4X2ljaz4sCi0JCQkgPCZncHQ5X2ljaz4s IDwmZ3B0MTBfaWNrPiwgPCZncHQxMV9pY2s+LCA8JmdwdDEyX2ljaz4sCi0JCQkgPCZtY2JzcDFf aWNrPiwgPCZtY2JzcDJfaWNrPiwgPCZtY2JzcDNfaWNrPiwKLQkJCSA8Jm1jYnNwNF9pY2s+LCA8 Jm1jYnNwNV9pY2s+LCA8Jm1jc3BpMV9pY2s+LAotCQkJIDwmbWNzcGkxX2Zjaz4sIDwmbWNzcGky X2ljaz4sIDwmbWNzcGkyX2Zjaz4sCi0JCQkgPCZtY3NwaTNfaWNrPiwgPCZtY3NwaTNfZmNrPiwg PCZ1YXJ0MV9pY2s+LAotCQkJIDwmdWFydDFfZmNrPiwgPCZ1YXJ0Ml9pY2s+LCA8JnVhcnQyX2Zj az4sIDwmdWFydDNfaWNrPiwKLQkJCSA8JnVhcnQzX2Zjaz4sIDwmY2FtX2ljaz4sIDwmbWFpbGJv eGVzX2ljaz4sCi0JCQkgPCZ3ZHQ0X2ljaz4sIDwmd2R0NF9mY2s+LCA8Jm1zcHJvX2ljaz4sIDwm bXNwcm9fZmNrPiwKLQkJCSA8JmZhY19pY2s+LCA8JmZhY19mY2s+LCA8JmhkcV9pY2s+LCA8Jmhk cV9mY2s+LAotCQkJIDwmaTJjMV9pY2s+LCA8JmkyY2hzMV9mY2s+LCA8JmkyYzJfaWNrPiwgPCZp MmNoczJfZmNrPiwKLQkJCSA8JmRlc19pY2s+LCA8JnNoYV9pY2s+LCA8JnJuZ19pY2s+LCA8JmFl c19pY2s+LAotCQkJIDwmcGthX2ljaz4sIDwmbW1jaHMxX2ljaz4sIDwmbW1jaHMxX2Zjaz4sCi0J CQkgPCZtbWNoczJfaWNrPiwgPCZtbWNoczJfZmNrPiwgPCZncGlvNV9pY2s+LAotCQkJIDwmZ3Bp bzVfZmNrPiwgPCZtZG1faW50Y19pY2s+LCA8Jm1tY2hzZGIxX2Zjaz4sCi0JCQkgPCZtbWNoc2Ri Ml9mY2s+OwotCX07Ci0KLQltZG1fY2xrZG06IG1kbV9jbGtkbSB7Ci0JCWNvbXBhdGlibGUgPSAi dGksY2xvY2tkb21haW4iOwotCQljbG9ja3MgPSA8Jm1kbV9vc2NfY2s+OwotCX07Ci19OwotCi0m ZnVuY185Nm1fY2sgewotCWNvbXBhdGlibGUgPSAidGksbXV4LWNsb2NrIjsKLQljbG9ja3MgPSA8 JmFwbGw5Nl9jaz4sIDwmYWx0X2NrPjsKLQl0aSxiaXQtc2hpZnQgPSA8ND47Ci0JcmVnID0gPDB4 MDU0MD47Ci19OwotCi0mZHNwX2Rpdl9mY2sgewotCXRpLG1heC1kaXYgPSA8ND47Ci0JdGksaW5k ZXgtc3RhcnRzLWF0LW9uZTsKLX07Ci0KLSZzc2lfc3NyX3NzdF9kaXZfZmNrIHsKLQl0aSxtYXgt ZGl2ID0gPDU+OwotCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci19OwpkaWZmIC0tZ2l0IGEvYXJj aC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjQzMC1zZHAuZHRzIGIvYXJjaC9hcm0vYm9vdC9k dHMvdGkvb21hcC9vbWFwMjQzMC1zZHAuZHRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAyMDcwNzA2NzdlM2EuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90aS9v bWFwL29tYXAyNDMwLXNkcC5kdHMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogQ29weXJpZ2h0IChD KSAyMDEzIFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHBzOi8vd3d3LnRpLmNv bS8KLSAqLwotL2R0cy12MS87Ci0KLSNpbmNsdWRlICJvbWFwMjQzMC5kdHNpIgotCi0vIHsKLQlt b2RlbCA9ICJUSSBPTUFQMjQzMCBTRFAiOwotCWNvbXBhdGlibGUgPSAidGksb21hcDI0MzAtc2Rw IiwgInRpLG9tYXAyNDMwIiwgInRpLG9tYXAyIjsKLQotCW1lbW9yeUA4MDAwMDAwMCB7Ci0JCWRl dmljZV90eXBlID0gIm1lbW9yeSI7Ci0JCXJlZyA9IDwweDgwMDAwMDAwIDB4ODAwMDAwMD47IC8q IDEyOCBNQiAqLwotCX07Ci19OwotCi0maTJjMiB7Ci0JY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAw MD47Ci0KLQl0d2w6IHR3bEA0OCB7Ci0JCXJlZyA9IDwweDQ4PjsKLQkJaW50ZXJydXB0cyA9IDw3 PjsgLyogU1lTX05JUlEgY2FzY2FkZWQgdG8gaW50YyAqLwotCX07Ci19OwotCi0jaW5jbHVkZSAi dHdsNDAzMC5kdHNpIgotCi0mbW1jMSB7Ci0Jdm1tYy1zdXBwbHkgPSA8JnZtbWMxPjsKLQlidXMt d2lkdGggPSA8ND47Ci19OwotCi0mZ3BtYyB7Ci0JcmFuZ2VzID0gPDUgMCAweDA4MDAwMDAwIDB4 MDEwMDAwMDA+OwotCWV0aGVybmV0QGdwbWMgewotCQljb21wYXRpYmxlID0gInNtc2MsbGFuOTFj OTQiOwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncGlvNT47Ci0JCWludGVycnVwdHMgPSA8MjEg SVJRX1RZUEVfTEVWRUxfTE9XPjsJLyogZ3BpbzE0OSAqLwotCQlyZWcgPSA8NSAweDMwMCAweGY+ OwotCQliYW5rLXdpZHRoID0gPDI+OwotCQlncG1jLHN5bmMtY2xrLXBzID0gPDA+OwotCQlncG1j LG11eC1hZGQtZGF0YSA9IDwyPjsKLQkJZ3BtYyxkZXZpY2Utd2lkdGggPSA8MT47Ci0JCWdwbWMs Y3ljbGUyY3ljbGUtc2FtZWNzZW47Ci0JCWdwbWMsY3ljbGUyY3ljbGUtZGlmZmNzZW47Ci0JCWdw bWMsY3Mtb24tbnMgPSA8Nj47Ci0JCWdwbWMsY3MtcmQtb2ZmLW5zID0gPDE4Nz47Ci0JCWdwbWMs Y3Mtd3Itb2ZmLW5zID0gPDE4Nz47Ci0JCWdwbWMsYWR2LW9uLW5zID0gPDE4PjsKLQkJZ3BtYyxh ZHYtcmQtb2ZmLW5zID0gPDQ4PjsKLQkJZ3BtYyxhZHYtd3Itb2ZmLW5zID0gPDQ4PjsKLQkJZ3Bt YyxvZS1vbi1ucyA9IDw2MD47Ci0JCWdwbWMsb2Utb2ZmLW5zID0gPDE2OT47Ci0JCWdwbWMsd2Ut b24tbnMgPSA8NjY+OwotCQlncG1jLHdlLW9mZi1ucyA9IDwxNjk+OwotCQlncG1jLHJkLWN5Y2xl LW5zID0gPDE4Nz47Ci0JCWdwbWMsd3ItY3ljbGUtbnMgPSA8MTg3PjsKLQkJZ3BtYyxhY2Nlc3Mt bnMgPSA8MTg3PjsKLQkJZ3BtYyxwYWdlLWJ1cnN0LWFjY2Vzcy1ucyA9IDwyND47Ci0JCWdwbWMs YnVzLXR1cm5hcm91bmQtbnMgPSA8MjQ+OwotCQlncG1jLGN5Y2xlMmN5Y2xlLWRlbGF5LW5zID0g PDI0PjsKLQkJZ3BtYyx3YWl0LW1vbml0b3JpbmctbnMgPSA8MD47Ci0JCWdwbWMsY2xrLWFjdGl2 YXRpb24tbnMgPSA8MD47Ci0JCWdwbWMsd3ItZGF0YS1tdXgtYnVzLW5zID0gPDA+OwotCQlncG1j LHdyLWFjY2Vzcy1ucyA9IDwwPjsKLQl9OwotfTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9v dC9kdHMvdGkvb21hcC9vbWFwMjQzMC5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9v bWFwMjQzMC5kdHNpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWJkNDcxZjkyMjMu LjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9ib290L2R0cy90aS9vbWFwL29tYXAyNDMwLmR0 c2kKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgT01BUDI0 M3ggU29DCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRleGFzIEluc3RydW1lbnRzIEluY29y cG9yYXRlZCAtIGh0dHBzOi8vd3d3LnRpLmNvbS8KLSAqLwotCi0jaW5jbHVkZSAib21hcDIuZHRz aSIKLQotLyB7Ci0JY29tcGF0aWJsZSA9ICJ0aSxvbWFwMjQzMCIsICJ0aSxvbWFwMiI7Ci0KLQlv Y3AgewotCQlsNF93a3VwOiBsNF93a3VwQDQ5MDAwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGks b21hcDItbDQtd2t1cCIsICJzaW1wbGUtYnVzIjsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+Owot CQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQlyYW5nZXMgPSA8MCAweDQ5MDAwMDAwIDB4MzEwMDA+ OwotCi0JCQlwcmNtOiBwcmNtQDYwMDAgewotCQkJCWNvbXBhdGlibGUgPSAidGksb21hcDItcHJj bSI7Ci0JCQkJcmVnID0gPDB4NjAwMCAweDEwMDA+OwotCi0JCQkJcHJjbV9jbG9ja3M6IGNsb2Nr cyB7Ci0JCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsK LQkJCQl9OwotCi0JCQkJcHJjbV9jbG9ja2RvbWFpbnM6IGNsb2NrZG9tYWlucyB7Ci0JCQkJfTsK LQkJCX07Ci0KLQkJCXNjbTogc2NtQDIwMDAgewotCQkJCWNvbXBhdGlibGUgPSAidGksb21hcDIt c2NtIiwgInNpbXBsZS1idXMiOwotCQkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKLQkJCQkjYWRk cmVzcy1jZWxscyA9IDwxPjsKLQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJCQkjcGluY3RybC1j ZWxscyA9IDwxPjsKLQkJCQlyYW5nZXMgPSA8MCAweDIwMDAgMHgxMDAwPjsKLQotCQkJCW9tYXAy NDMwX3BteDogcGlubXV4QDMwIHsKLQkJCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMjQzMC1wYWRj b25mIiwKLQkJCQkJCSAgICAgInBpbmN0cmwtc2luZ2xlIjsKLQkJCQkJcmVnID0gPDB4MzAgMHgw MTU0PjsKLQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJCSNzaXplLWNlbGxzID0gPDA+ OwotCQkJCQkjcGluY3RybC1jZWxscyA9IDwxPjsKLQkJCQkJcGluY3RybC1zaW5nbGUscmVnaXN0 ZXItd2lkdGggPSA8OD47Ci0JCQkJCXBpbmN0cmwtc2luZ2xlLGZ1bmN0aW9uLW1hc2sgPSA8MHgz Zj47Ci0JCQkJfTsKLQotCQkJCXNjbV9jb25mOiBzY21fY29uZkAyNzAgewotCQkJCQljb21wYXRp YmxlID0gInRpLG9tYXAyLXNjbS1jb25mIiwgInN5c2NvbiIsCi0JCQkJCQkgICAgICJzaW1wbGUt YnVzIjsKLQkJCQkJcmVnID0gPDB4MjcwIDB4MjQwPjsKLQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8 MT47Ci0JCQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJCQlyYW5nZXMgPSA8MCAweDI3MCAweDI0 MD47Ci0KLQkJCQkJc2NtX2Nsb2NrczogY2xvY2tzIHsKLQkJCQkJCSNhZGRyZXNzLWNlbGxzID0g PDE+OwotCQkJCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQkJCX07Ci0KLQkJCQkJcGJpYXNfcmVn dWxhdG9yOiBwYmlhc19yZWd1bGF0b3JAMjMwIHsKLQkJCQkJCWNvbXBhdGlibGUgPSAidGkscGJp YXMtb21hcDIiLCAidGkscGJpYXMtb21hcCI7Ci0JCQkJCQlyZWcgPSA8MHgyMzAgMHg0PjsKLQkJ CQkJCXN5c2NvbiA9IDwmc2NtX2NvbmY+OwotCQkJCQkJcGJpYXNfbW1jX3JlZzogcGJpYXNfbW1j X29tYXAyNDMwIHsKLQkJCQkJCQlyZWd1bGF0b3ItbmFtZSA9ICJwYmlhc19tbWNfb21hcDI0MzAi OwotCQkJCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OwotCQkJCQkJCXJl Z3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMwMDAwMDA+OwotCQkJCQkJfTsKLQkJCQkJfTsKLQkJ CQl9OwotCi0JCQkJc2NtX2Nsb2NrZG9tYWluczogY2xvY2tkb21haW5zIHsKLQkJCQl9OwotCQkJ fTsKLQotCQkJdGFyZ2V0LW1vZHVsZUAyMDAwMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJ0aSxzeXNj LW9tYXAyIiwgInRpLHN5c2MiOwotCQkJCXJlZyA9IDwweDIwMDAwIDB4ND4sCi0JCQkJICAgICAg PDB4MjAwMDQgMHg0PjsKLQkJCQlyZWctbmFtZXMgPSAicmV2IiwgInN5c2MiOwotCQkJCXRpLHN5 c2Mtc2lkbGUgPSA8U1lTQ19JRExFX0ZPUkNFPiwKLQkJCQkJCTxTWVNDX0lETEVfTk8+OwotCQkJ CWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OwotCQkJCWNsb2NrLW5hbWVzID0gImZjayI7Ci0JCQkJ I2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCQkJcmFuZ2Vz ID0gPDB4MCAweDIwMDAwIDB4MTAwMD47Ci0KLQkJCQljb3VudGVyMzJrOiBjb3VudGVyQDAgewot CQkJCQljb21wYXRpYmxlID0gInRpLG9tYXAtY291bnRlcjMyayI7Ci0JCQkJCXJlZyA9IDwwIDB4 MjA+OwotCQkJCX07Ci0JCQl9OwotCQl9OwotCi0JCWdwaW8xOiBncGlvQDQ5MDBjMDAwIHsKLQkJ CWNvbXBhdGlibGUgPSAidGksb21hcDItZ3BpbyI7Ci0JCQlyZWcgPSA8MHg0OTAwYzAwMCAweDIw MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDI5PjsKLQkJCXRpLGh3bW9kcyA9ICJncGlvMSI7Ci0JCQl0 aSxncGlvLWFsd2F5cy1vbjsKLQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJZ3Bpby1jb250cm9s bGVyOwotCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCWludGVycnVwdC1jb250cm9sbGVy OwotCQl9OwotCi0JCWdwaW8yOiBncGlvQDQ5MDBlMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGks b21hcDItZ3BpbyI7Ci0JCQlyZWcgPSA8MHg0OTAwZTAwMCAweDIwMD47Ci0JCQlpbnRlcnJ1cHRz ID0gPDMwPjsKLQkJCXRpLGh3bW9kcyA9ICJncGlvMiI7Ci0JCQl0aSxncGlvLWFsd2F5cy1vbjsK LQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJI2ludGVycnVw dC1jZWxscyA9IDwyPjsKLQkJCWludGVycnVwdC1jb250cm9sbGVyOwotCQl9OwotCi0JCWdwaW8z OiBncGlvQDQ5MDEwMDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksb21hcDItZ3BpbyI7Ci0JCQly ZWcgPSA8MHg0OTAxMDAwMCAweDIwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDMxPjsKLQkJCXRpLGh3 bW9kcyA9ICJncGlvMyI7Ci0JCQl0aSxncGlvLWFsd2F5cy1vbjsKLQkJCSNncGlvLWNlbGxzID0g PDI+OwotCQkJZ3Bpby1jb250cm9sbGVyOwotCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJ CWludGVycnVwdC1jb250cm9sbGVyOwotCQl9OwotCi0JCWdwaW80OiBncGlvQDQ5MDEyMDAwIHsK LQkJCWNvbXBhdGlibGUgPSAidGksb21hcDItZ3BpbyI7Ci0JCQlyZWcgPSA8MHg0OTAxMjAwMCAw eDIwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDMyPjsKLQkJCXRpLGh3bW9kcyA9ICJncGlvNCI7Ci0J CQl0aSxncGlvLWFsd2F5cy1vbjsKLQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJZ3Bpby1jb250 cm9sbGVyOwotCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCWludGVycnVwdC1jb250cm9s bGVyOwotCQl9OwotCi0JCWdwaW81OiBncGlvQDQ4MGI2MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAi dGksb21hcDItZ3BpbyI7Ci0JCQlyZWcgPSA8MHg0ODBiNjAwMCAweDIwMD47Ci0JCQlpbnRlcnJ1 cHRzID0gPDMzPjsKLQkJCXRpLGh3bW9kcyA9ICJncGlvNSI7Ci0JCQkjZ3Bpby1jZWxscyA9IDwy PjsKLQkJCWdwaW8tY29udHJvbGxlcjsKLQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47Ci0JCQlp bnRlcnJ1cHQtY29udHJvbGxlcjsKLQkJfTsKLQotCQlncG1jOiBncG1jQDZlMDAwMDAwIHsKLQkJ CWNvbXBhdGlibGUgPSAidGksb21hcDI0MzAtZ3BtYyI7Ci0JCQlyZWcgPSA8MHg2ZTAwMDAwMCAw eDEwMDA+OwotCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JCQkjc2l6ZS1jZWxscyA9IDwxPjsK LQkJCWludGVycnVwdHMgPSA8MjA+OwotCQkJZ3BtYyxudW0tY3MgPSA8OD47Ci0JCQlncG1jLG51 bS13YWl0cGlucyA9IDw0PjsKLQkJCXRpLGh3bW9kcyA9ICJncG1jIjsKLQkJCWludGVycnVwdC1j b250cm9sbGVyOwotCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKLQkJCWdwaW8tY29udHJvbGxl cjsKLQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQl9OwotCi0JCW1jYnNwMTogbWNic3BANDgwNzQw MDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMjQzMC1tY2JzcCI7Ci0JCQlyZWcgPSA8MHg0 ODA3NDAwMCAweGZmPjsKLQkJCXJlZy1uYW1lcyA9ICJtcHUiOwotCQkJaW50ZXJydXB0cyA9IDw2 ND4sIC8qIE9DUCBjb21wbGlhbnQgaW50ZXJydXB0ICovCi0JCQkJICAgICA8NTk+LCAvKiBUWCBp bnRlcnJ1cHQgKi8KLQkJCQkgICAgIDw2MD4sIC8qIFJYIGludGVycnVwdCAqLwotCQkJCSAgICAg PDYxPjsgLyogUlggb3ZlcmZsb3cgaW50ZXJydXB0ICovCi0JCQlpbnRlcnJ1cHQtbmFtZXMgPSAi Y29tbW9uIiwgInR4IiwgInJ4IiwgInJ4X292ZXJmbG93IjsKLQkJCXRpLGJ1ZmZlci1zaXplID0g PDEyOD47Ci0JCQl0aSxod21vZHMgPSAibWNic3AxIjsKLQkJCWRtYXMgPSA8JnNkbWEgMzE+LAot CQkJICAgICAgIDwmc2RtYSAzMj47Ci0JCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwotCQkJc3Rh dHVzID0gImRpc2FibGVkIjsKLQkJfTsKLQotCQltY2JzcDI6IG1jYnNwQDQ4MDc2MDAwIHsKLQkJ CWNvbXBhdGlibGUgPSAidGksb21hcDI0MzAtbWNic3AiOwotCQkJcmVnID0gPDB4NDgwNzYwMDAg MHhmZj47Ci0JCQlyZWctbmFtZXMgPSAibXB1IjsKLQkJCWludGVycnVwdHMgPSA8MTY+LCAvKiBP Q1AgY29tcGxpYW50IGludGVycnVwdCAqLwotCQkJCSAgICAgPDYyPiwgLyogVFggaW50ZXJydXB0 ICovCi0JCQkJICAgICA8NjM+OyAvKiBSWCBpbnRlcnJ1cHQgKi8KLQkJCWludGVycnVwdC1uYW1l cyA9ICJjb21tb24iLCAidHgiLCAicngiOwotCQkJdGksYnVmZmVyLXNpemUgPSA8MTI4PjsKLQkJ CXRpLGh3bW9kcyA9ICJtY2JzcDIiOwotCQkJZG1hcyA9IDwmc2RtYSAzMz4sCi0JCQkgICAgICAg PCZzZG1hIDM0PjsKLQkJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7Ci0JCQlzdGF0dXMgPSAiZGlz YWJsZWQiOwotCQl9OwotCi0JCW1jYnNwMzogbWNic3BANDgwOGMwMDAgewotCQkJY29tcGF0aWJs ZSA9ICJ0aSxvbWFwMjQzMC1tY2JzcCI7Ci0JCQlyZWcgPSA8MHg0ODA4YzAwMCAweGZmPjsKLQkJ CXJlZy1uYW1lcyA9ICJtcHUiOwotCQkJaW50ZXJydXB0cyA9IDwxNz4sIC8qIE9DUCBjb21wbGlh bnQgaW50ZXJydXB0ICovCi0JCQkJICAgICA8ODk+LCAvKiBUWCBpbnRlcnJ1cHQgKi8KLQkJCQkg ICAgIDw5MD47IC8qIFJYIGludGVycnVwdCAqLwotCQkJaW50ZXJydXB0LW5hbWVzID0gImNvbW1v biIsICJ0eCIsICJyeCI7Ci0JCQl0aSxidWZmZXItc2l6ZSA9IDwxMjg+OwotCQkJdGksaHdtb2Rz ID0gIm1jYnNwMyI7Ci0JCQlkbWFzID0gPCZzZG1hIDE3PiwKLQkJCSAgICAgICA8JnNkbWEgMTg+ OwotCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKLQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Ci0J CX07Ci0KLQkJbWNic3A0OiBtY2JzcEA0ODA4ZTAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRpLG9t YXAyNDMwLW1jYnNwIjsKLQkJCXJlZyA9IDwweDQ4MDhlMDAwIDB4ZmY+OwotCQkJcmVnLW5hbWVz ID0gIm1wdSI7Ci0JCQlpbnRlcnJ1cHRzID0gPDE4PiwgLyogT0NQIGNvbXBsaWFudCBpbnRlcnJ1 cHQgKi8KLQkJCQkgICAgIDw1ND4sIC8qIFRYIGludGVycnVwdCAqLwotCQkJCSAgICAgPDU1Pjsg LyogUlggaW50ZXJydXB0ICovCi0JCQlpbnRlcnJ1cHQtbmFtZXMgPSAiY29tbW9uIiwgInR4Iiwg InJ4IjsKLQkJCXRpLGJ1ZmZlci1zaXplID0gPDEyOD47Ci0JCQl0aSxod21vZHMgPSAibWNic3A0 IjsKLQkJCWRtYXMgPSA8JnNkbWEgMTk+LAotCQkJICAgICAgIDwmc2RtYSAyMD47Ci0JCQlkbWEt bmFtZXMgPSAidHgiLCAicngiOwotCQkJc3RhdHVzID0gImRpc2FibGVkIjsKLQkJfTsKLQotCQlt Y2JzcDU6IG1jYnNwQDQ4MDk2MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksb21hcDI0MzAtbWNi c3AiOwotCQkJcmVnID0gPDB4NDgwOTYwMDAgMHhmZj47Ci0JCQlyZWctbmFtZXMgPSAibXB1IjsK LQkJCWludGVycnVwdHMgPSA8MTk+LCAvKiBPQ1AgY29tcGxpYW50IGludGVycnVwdCAqLwotCQkJ CSAgICAgPDgxPiwgLyogVFggaW50ZXJydXB0ICovCi0JCQkJICAgICA8ODI+OyAvKiBSWCBpbnRl cnJ1cHQgKi8KLQkJCWludGVycnVwdC1uYW1lcyA9ICJjb21tb24iLCAidHgiLCAicngiOwotCQkJ dGksYnVmZmVyLXNpemUgPSA8MTI4PjsKLQkJCXRpLGh3bW9kcyA9ICJtY2JzcDUiOwotCQkJZG1h cyA9IDwmc2RtYSAyMT4sCi0JCQkgICAgICAgPCZzZG1hIDIyPjsKLQkJCWRtYS1uYW1lcyA9ICJ0 eCIsICJyeCI7Ci0JCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwotCQl9OwotCi0JCW1tYzE6IG1tY0A0 ODA5YzAwMCB7Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyLWhzbW1jIjsKLQkJCXJlZyA9IDww eDQ4MDljMDAwIDB4MjAwPjsKLQkJCWludGVycnVwdHMgPSA8ODM+OwotCQkJdGksaHdtb2RzID0g Im1tYzEiOwotCQkJdGksZHVhbC12b2x0OwotCQkJZG1hcyA9IDwmc2RtYSA2MT4sIDwmc2RtYSA2 Mj47Ci0JCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOwotCQkJcGJpYXMtc3VwcGx5ID0gPCZwYmlh c19tbWNfcmVnPjsKLQkJfTsKLQotCQltbWMyOiBtbWNANDgwYjQwMDAgewotCQkJY29tcGF0aWJs ZSA9ICJ0aSxvbWFwMi1oc21tYyI7Ci0JCQlyZWcgPSA8MHg0ODBiNDAwMCAweDIwMD47Ci0JCQlp bnRlcnJ1cHRzID0gPDg2PjsKLQkJCXRpLGh3bW9kcyA9ICJtbWMyIjsKLQkJCWRtYXMgPSA8JnNk bWEgNDc+LCA8JnNkbWEgNDg+OwotCQkJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKLQkJfTsKLQot CQltYWlsYm94OiBtYWlsYm94QDQ4MDk0MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksb21hcDIt bWFpbGJveCI7Ci0JCQlyZWcgPSA8MHg0ODA5NDAwMCAweDIwMD47Ci0JCQlpbnRlcnJ1cHRzID0g PDI2PjsKLQkJCXRpLGh3bW9kcyA9ICJtYWlsYm94IjsKLQkJCSNtYm94LWNlbGxzID0gPDE+Owot CQkJdGksbWJveC1udW0tdXNlcnMgPSA8ND47Ci0JCQl0aSxtYm94LW51bS1maWZvcyA9IDw2PjsK LQkJCW1ib3hfZHNwOiBtYm94LWRzcCB7Ci0JCQkJdGksbWJveC10eCA9IDwwIDAgMD47Ci0JCQkJ dGksbWJveC1yeCA9IDwxIDAgMD47Ci0JCQl9OwotCQl9OwotCi0JCXRpbWVyMV90YXJnZXQ6IHRh cmdldC1tb2R1bGVANDkwMTgwMDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxzeXNjLW9tYXAyLXRp bWVyIiwgInRpLHN5c2MiOwotCQkJcmVnID0gPDB4NDkwMTgwMDAgMHg0PiwKLQkJCSAgICAgIDww eDQ5MDE4MDEwIDB4ND4sCi0JCQkgICAgICA8MHg0OTAxODAxNCAweDQ+OwotCQkJcmVnLW5hbWVz ID0gInJldiIsICJzeXNjIiwgInN5c3MiOwotCQkJdGksc3lzYy1tYXNrID0gPChTWVNDX09NQVAy X0NMT0NLQUNUSVZJVFkgfAotCQkJCQkgU1lTQ19PTUFQMl9FTVVGUkVFIHwKLQkJCQkJIFNZU0Nf T01BUDJfRU5BV0FLRVVQIHwKLQkJCQkJIFNZU0NfT01BUDJfU09GVFJFU0VUIHwKLQkJCQkJIFNZ U0NfT01BUDJfQVVUT0lETEUpPjsKLQkJCXRpLHN5c2Mtc2lkbGUgPSA8U1lTQ19JRExFX0ZPUkNF PiwKLQkJCQkJPFNZU0NfSURMRV9OTz4sCi0JCQkJCTxTWVNDX0lETEVfU01BUlQ+OwotCQkJdGks c3lzcy1tYXNrID0gPDE+OwotCQkJY2xvY2tzID0gPCZncHQxX2Zjaz4sIDwmZ3B0MV9pY2s+Owot CQkJY2xvY2stbmFtZXMgPSAiZmNrIiwgImljayI7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsK LQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJcmFuZ2VzID0gPDB4MCAweDQ5MDE4MDAwIDB4MTAw MD47Ci0KLQkJCXRpbWVyMTogdGltZXJAMCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMjQy MC10aW1lciI7Ci0JCQkJcmVnID0gPDAgMHg0MDA+OwotCQkJCWludGVycnVwdHMgPSA8Mzc+Owot CQkJCXRpLHRpbWVyLWFsd29uOwotCQkJfTsKLQkJfTsKLQotCQltY3NwaTM6IHNwaUA0ODBiODAw MCB7Ci0JCQljb21wYXRpYmxlID0gInRpLG9tYXAyLW1jc3BpIjsKLQkJCXRpLGh3bW9kcyA9ICJt Y3NwaTMiOwotCQkJcmVnID0gPDB4NDgwYjgwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw5 MT47Ci0JCQlkbWFzID0gPCZzZG1hIDE1ICZzZG1hIDE2ICZzZG1hIDIzICZzZG1hIDI0PjsKLQkJ CWRtYS1uYW1lcyA9ICJ0eDAiLCAicngwIiwgInR4MSIsICJyeDEiOwotCQl9OwotCi0JCXVzYl9v dGdfaHM6IHVzYl9vdGdfaHNANDgwYWMwMDAgewotCQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi1t dXNiIjsKLQkJCXRpLGh3bW9kcyA9ICJ1c2Jfb3RnX2hzIjsKLQkJCXJlZyA9IDwweDQ4MGFjMDAw IDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDkzPjsKLQkJfTsKLQotCQl3ZF90aW1lcjI6IHdh dGNoZG9nQDQ5MDE2MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAidGksb21hcDItd2R0IjsKLQkJCXRp LGh3bW9kcyA9ICJ3ZF90aW1lcjIiOwotCQkJcmVnID0gPDB4NDkwMTYwMDAgMHg4MD47Ci0JCX07 Ci0JfTsKLX07Ci0KLSZzZG1hIHsKLQljb21wYXRpYmxlID0gInRpLG9tYXAyNDMwLXNkbWEiLCAi dGksb21hcC1zZG1hIjsKLX07Ci0KLSZpMmMxIHsKLQljb21wYXRpYmxlID0gInRpLG9tYXAyNDMw LWkyYyI7Ci19OwotCi0maTJjMiB7Ci0JY29tcGF0aWJsZSA9ICJ0aSxvbWFwMjQzMC1pMmMiOwot fTsKLQotI2luY2x1ZGUgIm9tYXAyNHh4LWNsb2Nrcy5kdHNpIgotI2luY2x1ZGUgIm9tYXAyNDMw LWNsb2Nrcy5kdHNpIgotCi0vKiBQcmVmZXJyZWQgYWx3YXlzLW9uIHRpbWVyIGZvciBjbG9ja2V2 ZW50ICovCi0mdGltZXIxX3RhcmdldCB7Ci0JdGksbm8tcmVzZXQtb24taW5pdDsKLQl0aSxuby1p ZGxlOwotCXRpbWVyQDAgewotCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmdwdDFfZmNrPjsKLQkJYXNz aWduZWQtY2xvY2stcGFyZW50cyA9IDwmZnVuY18zMmtfY2s+OwotCX07Ci19OwpkaWZmIC0tZ2l0 IGEvYXJjaC9hcm0vYm9vdC9kdHMvdGkvb21hcC9vbWFwMjR4eC1jbG9ja3MuZHRzaSBiL2FyY2gv YXJtL2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0eHgtY2xvY2tzLmR0c2kKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDA3YWY4N2VkZjBlMi4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gvYXJt L2Jvb3QvZHRzL3RpL29tYXAvb21hcDI0eHgtY2xvY2tzLmR0c2kKKysrIC9kZXYvbnVsbApAQCAt MSwxMjQxICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkK LS8qCi0gKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIE9NQVAyNHh4IGNsb2NrIGRhdGEKLSAqCi0g KiBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqLwotJnNjbV9j bG9ja3MgewotCW1jYnNwMV9tdXhfZmNrOiBtY2JzcDFfbXV4X2Zja0A0IHsKLQkJI2Nsb2NrLWNl bGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1tdXgtY2xvY2siOwotCQlj bG9ja3MgPSA8JmZ1bmNfOTZtX2NrPiwgPCZtY2JzcF9jbGtzPjsKLQkJdGksYml0LXNoaWZ0ID0g PDI+OwotCQlyZWcgPSA8MHg0PjsKLQl9OwotCi0JbWNic3AxX2ZjazogbWNic3AxX2ZjayB7Ci0J CSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2si OwotCQljbG9ja3MgPSA8Jm1jYnNwMV9nYXRlX2Zjaz4sIDwmbWNic3AxX211eF9mY2s+OwotCX07 Ci0KLQltY2JzcDJfbXV4X2ZjazogbWNic3AyX211eF9mY2tANCB7Ci0JCSNjbG9jay1jZWxscyA9 IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKLQkJY2xvY2tz ID0gPCZmdW5jXzk2bV9jaz4sIDwmbWNic3BfY2xrcz47Ci0JCXRpLGJpdC1zaGlmdCA9IDw2PjsK LQkJcmVnID0gPDB4ND47Ci0JfTsKLQotCW1jYnNwMl9mY2s6IG1jYnNwMl9mY2sgewotCQkjY2xv Y2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJ Y2xvY2tzID0gPCZtY2JzcDJfZ2F0ZV9mY2s+LCA8Jm1jYnNwMl9tdXhfZmNrPjsKLQl9OwotfTsK LQotJnByY21fY2xvY2tzIHsKLQlmdW5jXzMya19jazogZnVuY18zMmtfY2sgewotCQkjY2xvY2st Y2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOwotCQljbG9jay1mcmVx dWVuY3kgPSA8MzI3Njg+OwotCX07Ci0KLQlzZWN1cmVfMzJrX2NrOiBzZWN1cmVfMzJrX2NrIHsK LQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJ Y2xvY2stZnJlcXVlbmN5ID0gPDMyNzY4PjsKLQl9OwotCi0JdmlydF8xMm1fY2s6IHZpcnRfMTJt X2NrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2Nr IjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKLQl9OwotCi0JdmlydF8xM21fY2s6 IHZpcnRfMTNtX2NrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gImZp eGVkLWNsb2NrIjsKLQkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKLQl9OwotCi0Jdmly dF8xOTIwMDAwMF9jazogdmlydF8xOTIwMDAwMF9jayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsK LQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwxOTIw MDAwMD47Ci0JfTsKLQotCXZpcnRfMjZtX2NrOiB2aXJ0XzI2bV9jayB7Ci0JCSNjbG9jay1jZWxs cyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7Ci0JCWNsb2NrLWZyZXF1ZW5j eSA9IDwyNjAwMDAwMD47Ci0JfTsKLQotCWFwbGxzX2Nsa2luX2NrOiBhcGxsc19jbGtpbl9ja0A1 NDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksbXV4LWNsb2Nr IjsKLQkJY2xvY2tzID0gPCZ2aXJ0XzE5MjAwMDAwX2NrPiwgPCZ2aXJ0XzI2bV9jaz4sIDwmdmly dF8xM21fY2s+LCA8JnZpcnRfMTJtX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDIzPjsKLQkJcmVn ID0gPDB4MDU0MD47Ci0JfTsKLQotCWFwbGxzX2Nsa2luX3gyX2NrOiBhcGxsc19jbGtpbl94Ml9j ayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3It Y2xvY2siOwotCQljbG9ja3MgPSA8JmFwbGxzX2Nsa2luX2NrPjsKLQkJY2xvY2stbXVsdCA9IDwy PjsKLQkJY2xvY2stZGl2ID0gPDE+OwotCX07Ci0KLQlvc2NfY2s6IG9zY19ja0A2MCB7Ci0JCSNj bG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxtdXgtY2xvY2siOwotCQljbG9j a3MgPSA8JmFwbGxzX2Nsa2luX2NrPiwgPCZhcGxsc19jbGtpbl94Ml9jaz47Ci0JCXRpLGJpdC1z aGlmdCA9IDw2PjsKLQkJcmVnID0gPDB4MDA2MD47Ci0JCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7 Ci0JfTsKLQotCXN5c19jazogc3lzX2NrQDYwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQlj b21wYXRpYmxlID0gInRpLGRpdmlkZXItY2xvY2siOwotCQljbG9ja3MgPSA8Jm9zY19jaz47Ci0J CXRpLGJpdC1zaGlmdCA9IDw2PjsKLQkJdGksbWF4LWRpdiA9IDwzPjsKLQkJcmVnID0gPDB4MDA2 MD47Ci0JCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JfTsKLQotCWFsdF9jazogYWx0X2NrIHsK LQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJ Y2xvY2stZnJlcXVlbmN5ID0gPDU0MDAwMDAwPjsKLQl9OwotCi0JbWNic3BfY2xrczogbWNic3Bf Y2xrcyB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9j ayI7Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwweDA+OwotCX07Ci0KLQlkcGxsX2NrOiBkcGxsX2Nr QDUwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMi1k cGxsLWNvcmUtY2xvY2siOwotCQljbG9ja3MgPSA8JnN5c19jaz4sIDwmc3lzX2NrPjsKLQkJcmVn ID0gPDB4MDUwMD4sIDwweDA1NDA+OwotCX07Ci0KLQlhcGxsOTZfY2s6IGFwbGw5Nl9ja0A1MDAg ewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21hcDItYXBsbC1j bG9jayI7Ci0JCWNsb2NrcyA9IDwmc3lzX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDI+OwotCQl0 aSxpZGxlc3Qtc2hpZnQgPSA8OD47Ci0JCXRpLGNsb2NrLWZyZXF1ZW5jeSA9IDw5NjAwMDAwMD47 Ci0JCXJlZyA9IDwweDA1MDA+LCA8MHgwNTMwPiwgPDB4MDUyMD47Ci0JfTsKLQotCWFwbGw1NF9j azogYXBsbDU0X2NrQDUwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9 ICJ0aSxvbWFwMi1hcGxsLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZzeXNfY2s+OwotCQl0aSxiaXQt c2hpZnQgPSA8Nj47Ci0JCXRpLGlkbGVzdC1zaGlmdCA9IDw5PjsKLQkJdGksY2xvY2stZnJlcXVl bmN5ID0gPDU0MDAwMDAwPjsKLQkJcmVnID0gPDB4MDUwMD4sIDwweDA1MzA+LCA8MHgwNTIwPjsK LQl9OwotCi0JZnVuY181NG1fY2s6IGZ1bmNfNTRtX2NrQDU0MCB7Ci0JCSNjbG9jay1jZWxscyA9 IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxtdXgtY2xvY2siOwotCQljbG9ja3MgPSA8JmFwbGw1 NF9jaz4sIDwmYWx0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDU+OwotCQlyZWcgPSA8MHgwNTQw PjsKLQl9OwotCi0JY29yZV9jazogY29yZV9jayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJ Y29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOwotCQljbG9ja3MgPSA8JmRwbGxfY2s+ OwotCQljbG9jay1tdWx0ID0gPDE+OwotCQljbG9jay1kaXYgPSA8MT47Ci0JfTsKLQotCWZ1bmNf OTZtX2NrOiBmdW5jXzk2bV9ja0A1NDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JfTsKLQot CWFwbGw5Nl9kMl9jazogYXBsbDk2X2QyX2NrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQlj b21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmYXBsbDk2X2Nr PjsKLQkJY2xvY2stbXVsdCA9IDwxPjsKLQkJY2xvY2stZGl2ID0gPDI+OwotCX07Ci0KLQlmdW5j XzQ4bV9jazogZnVuY180OG1fY2tANTQwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21w YXRpYmxlID0gInRpLG11eC1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmYXBsbDk2X2QyX2NrPiwgPCZh bHRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8Mz47Ci0JCXJlZyA9IDwweDA1NDA+OwotCX07Ci0K LQlmdW5jXzEybV9jazogZnVuY18xMm1fY2sgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNv bXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzQ4bV9j az47Ci0JCWNsb2NrLW11bHQgPSA8MT47Ci0JCWNsb2NrLWRpdiA9IDw0PjsKLQl9OwotCi0Jc3lz X2Nsa291dF9zcmNfZ2F0ZTogc3lzX2Nsa291dF9zcmNfZ2F0ZUA3MCB7Ci0JCSNjbG9jay1jZWxs cyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbm8td2FpdC1nYXRlLWNsb2Nr IjsKLQkJY2xvY2tzID0gPCZjb3JlX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDc+OwotCQlyZWcg PSA8MHgwMDcwPjsKLQl9OwotCi0Jc3lzX2Nsa291dF9zcmNfbXV4OiBzeXNfY2xrb3V0X3NyY19t dXhANzAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9z aXRlLW11eC1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmY29yZV9jaz4sIDwmc3lzX2NrPiwgPCZmdW5j Xzk2bV9jaz4sIDwmZnVuY181NG1fY2s+OwotCQlyZWcgPSA8MHgwMDcwPjsKLQl9OwotCi0Jc3lz X2Nsa291dF9zcmM6IHN5c19jbGtvdXRfc3JjIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQlj b21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmc3lzX2Nsa291 dF9zcmNfZ2F0ZT4sIDwmc3lzX2Nsa291dF9zcmNfbXV4PjsKLQl9OwotCi0Jc3lzX2Nsa291dDog c3lzX2Nsa291dEA3MCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0 aSxkaXZpZGVyLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZzeXNfY2xrb3V0X3NyYz47Ci0JCXRpLGJp dC1zaGlmdCA9IDwzPjsKLQkJdGksbWF4LWRpdiA9IDw2ND47Ci0JCXJlZyA9IDwweDAwNzA+Owot CQl0aSxpbmRleC1wb3dlci1vZi10d287Ci0JfTsKLQotCWVtdWxfY2s6IGVtdWxfY2tANzggewot CQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksZ2F0ZS1jbG9jayI7Ci0J CWNsb2NrcyA9IDwmZnVuY181NG1fY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MD47Ci0JCXJlZyA9 IDwweDAwNzg+OwotCX07Ci0KLQltcHVfY2s6IG1wdV9ja0AxNDAgewotCQkjY2xvY2stY2VsbHMg PSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksZGl2aWRlci1jbG9jayI7Ci0JCWNsb2NrcyA9IDwm Y29yZV9jaz47Ci0JCXRpLG1heC1kaXYgPSA8MzE+OwotCQlyZWcgPSA8MHgwMTQwPjsKLQkJdGks aW5kZXgtc3RhcnRzLWF0LW9uZTsKLQl9OwotCi0JZHNwX2dhdGVfZmNrOiBkc3BfZ2F0ZV9mY2tA ODAwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0 ZS1nYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0g PDA+OwotCQlyZWcgPSA8MHgwODAwPjsKLQl9OwotCi0JZHNwX2Rpdl9mY2s6IGRzcF9kaXZfZmNr QDg0MCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3Np dGUtZGl2aWRlci1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmY29yZV9jaz47Ci0JCXJlZyA9IDwweDA4 NDA+OwotCX07Ci0KLQlkc3BfZmNrOiBkc3BfZmNrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+Owot CQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZHNwX2dh dGVfZmNrPiwgPCZkc3BfZGl2X2Zjaz47Ci0JfTsKLQotCWNvcmVfbDNfY2s6IGNvcmVfbDNfY2tA MjQwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGRpdmlkZXIt Y2xvY2siOwotCQljbG9ja3MgPSA8JmNvcmVfY2s+OwotCQl0aSxtYXgtZGl2ID0gPDMxPjsKLQkJ cmVnID0gPDB4MDI0MD47Ci0JCXRpLGluZGV4LXN0YXJ0cy1hdC1vbmU7Ci0JfTsKLQotCWdmeF8z ZF9nYXRlX2ZjazogZ2Z4XzNkX2dhdGVfZmNrQDMwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsK LQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwm Y29yZV9sM19jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyPjsKLQkJcmVnID0gPDB4MDMwMD47Ci0J fTsKLQotCWdmeF8zZF9kaXZfZmNrOiBnZnhfM2RfZGl2X2Zja0AzNDAgewotCQkjY2xvY2stY2Vs bHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWRpdmlkZXItY2xvY2siOwot CQljbG9ja3MgPSA8JmNvcmVfbDNfY2s+OwotCQl0aSxtYXgtZGl2ID0gPDQ+OwotCQlyZWcgPSA8 MHgwMzQwPjsKLQkJdGksaW5kZXgtc3RhcnRzLWF0LW9uZTsKLQl9OwotCi0JZ2Z4XzNkX2Zjazog Z2Z4XzNkX2ZjayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxj b21wb3NpdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmdmeF8zZF9nYXRlX2Zjaz4sIDwmZ2Z4XzNk X2Rpdl9mY2s+OwotCX07Ci0KLQlnZnhfMmRfZ2F0ZV9mY2s6IGdmeF8yZF9nYXRlX2Zja0AzMDAg ewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdh dGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmNvcmVfbDNfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8 MT47Ci0JCXJlZyA9IDwweDAzMDA+OwotCX07Ci0KLQlnZnhfMmRfZGl2X2ZjazogZ2Z4XzJkX2Rp dl9mY2tAMzQwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNv bXBvc2l0ZS1kaXZpZGVyLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKLQkJdGks bWF4LWRpdiA9IDw0PjsKLQkJcmVnID0gPDB4MDM0MD47Ci0JCXRpLGluZGV4LXN0YXJ0cy1hdC1v bmU7Ci0JfTsKLQotCWdmeF8yZF9mY2s6IGdmeF8yZF9mY2sgewotCQkjY2xvY2stY2VsbHMgPSA8 MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZn ZnhfMmRfZ2F0ZV9mY2s+LCA8JmdmeF8yZF9kaXZfZmNrPjsKLQl9OwotCi0JZ2Z4X2ljazogZ2Z4 X2lja0AzMTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksd2Fp dC1nYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKLQkJdGksYml0LXNoaWZ0 ID0gPDA+OwotCQlyZWcgPSA8MHgwMzEwPjsKLQl9OwotCi0JbDRfY2s6IGw0X2NrQDI0MCB7Ci0J CSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxkaXZpZGVyLWNsb2NrIjsK LQkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDU+OwotCQl0aSxt YXgtZGl2ID0gPDM+OwotCQlyZWcgPSA8MHgwMjQwPjsKLQkJdGksaW5kZXgtc3RhcnRzLWF0LW9u ZTsKLQl9OwotCi0JZHNzX2ljazogZHNzX2lja0AyMTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47 Ci0JCWNvbXBhdGlibGUgPSAidGksb21hcDMtbm8td2FpdC1pbnRlcmZhY2UtY2xvY2siOwotCQlj bG9ja3MgPSA8Jmw0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDA+OwotCQlyZWcgPSA8MHgwMjEw PjsKLQl9OwotCi0JZHNzMV9nYXRlX2ZjazogZHNzMV9nYXRlX2Zja0AyMDAgewotCQkjY2xvY2st Y2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW5vLXdhaXQtZ2F0ZS1j bG9jayI7Ci0JCWNsb2NrcyA9IDwmY29yZV9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwwPjsKLQkJ cmVnID0gPDB4MDIwMD47Ci0JfTsKLQotCWNvcmVfZDJfY2s6IGNvcmVfZDJfY2sgewotCQkjY2xv Y2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKLQkJ Y2xvY2tzID0gPCZjb3JlX2NrPjsKLQkJY2xvY2stbXVsdCA9IDwxPjsKLQkJY2xvY2stZGl2ID0g PDI+OwotCX07Ci0KLQljb3JlX2QzX2NrOiBjb3JlX2QzX2NrIHsKLQkJI2Nsb2NrLWNlbGxzID0g PDA+OwotCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7Ci0JCWNsb2NrcyA9IDwm Y29yZV9jaz47Ci0JCWNsb2NrLW11bHQgPSA8MT47Ci0JCWNsb2NrLWRpdiA9IDwzPjsKLQl9Owot Ci0JY29yZV9kNF9jazogY29yZV9kNF9jayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29t cGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOwotCQljbG9ja3MgPSA8JmNvcmVfY2s+Owot CQljbG9jay1tdWx0ID0gPDE+OwotCQljbG9jay1kaXYgPSA8ND47Ci0JfTsKLQotCWNvcmVfZDVf Y2s6IGNvcmVfZDVfY2sgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAi Zml4ZWQtZmFjdG9yLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2NrPjsKLQkJY2xvY2stbXVs dCA9IDwxPjsKLQkJY2xvY2stZGl2ID0gPDU+OwotCX07Ci0KLQljb3JlX2Q2X2NrOiBjb3JlX2Q2 X2NrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rv ci1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmY29yZV9jaz47Ci0JCWNsb2NrLW11bHQgPSA8MT47Ci0J CWNsb2NrLWRpdiA9IDw2PjsKLQl9OwotCi0JZHVtbXlfY2s6IGR1bW15X2NrIHsKLQkJI2Nsb2Nr LWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKLQkJY2xvY2stZnJl cXVlbmN5ID0gPDA+OwotCX07Ci0KLQljb3JlX2Q4X2NrOiBjb3JlX2Q4X2NrIHsKLQkJI2Nsb2Nr LWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gImZpeGVkLWZhY3Rvci1jbG9jayI7Ci0JCWNs b2NrcyA9IDwmY29yZV9jaz47Ci0JCWNsb2NrLW11bHQgPSA8MT47Ci0JCWNsb2NrLWRpdiA9IDw4 PjsKLQl9OwotCi0JY29yZV9kOV9jazogY29yZV9kOV9jayB7Ci0JCSNjbG9jay1jZWxscyA9IDww PjsKLQkJY29tcGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOwotCQljbG9ja3MgPSA8JmNv cmVfY2s+OwotCQljbG9jay1tdWx0ID0gPDE+OwotCQljbG9jay1kaXYgPSA8OT47Ci0JfTsKLQot CWNvcmVfZDEyX2NrOiBjb3JlX2QxMl9jayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29t cGF0aWJsZSA9ICJmaXhlZC1mYWN0b3ItY2xvY2siOwotCQljbG9ja3MgPSA8JmNvcmVfY2s+Owot CQljbG9jay1tdWx0ID0gPDE+OwotCQljbG9jay1kaXYgPSA8MTI+OwotCX07Ci0KLQljb3JlX2Qx Nl9jazogY29yZV9kMTZfY2sgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUg PSAiZml4ZWQtZmFjdG9yLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2NrPjsKLQkJY2xvY2st bXVsdCA9IDwxPjsKLQkJY2xvY2stZGl2ID0gPDE2PjsKLQl9OwotCi0JZHNzMV9tdXhfZmNrOiBk c3MxX211eF9mY2tAMjQwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0g InRpLGNvbXBvc2l0ZS1tdXgtY2xvY2siOwotCQljbG9ja3MgPSA8JnN5c19jaz4sIDwmY29yZV9j az4sIDwmY29yZV9kMl9jaz4sIDwmY29yZV9kM19jaz4sIDwmY29yZV9kNF9jaz4sIDwmY29yZV9k NV9jaz4sIDwmY29yZV9kNl9jaz4sIDwmY29yZV9kOF9jaz4sIDwmY29yZV9kOV9jaz4sIDwmY29y ZV9kMTJfY2s+LCA8JmNvcmVfZDE2X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDg+OwotCQlyZWcg PSA8MHgwMjQwPjsKLQl9OwotCi0JZHNzMV9mY2s6IGRzczFfZmNrIHsKLQkJI2Nsb2NrLWNlbGxz ID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9 IDwmZHNzMV9nYXRlX2Zjaz4sIDwmZHNzMV9tdXhfZmNrPjsKLQl9OwotCi0JZHNzMl9nYXRlX2Zj azogZHNzMl9nYXRlX2Zja0AyMDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGli bGUgPSAidGksY29tcG9zaXRlLW5vLXdhaXQtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVu Y180OG1fY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MT47Ci0JCXJlZyA9IDwweDAyMDA+OwotCX07 Ci0KLQlkc3MyX211eF9mY2s6IGRzczJfbXV4X2Zja0AyNDAgewotCQkjY2xvY2stY2VsbHMgPSA8 MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7Ci0JCWNsb2NrcyA9 IDwmc3lzX2NrPiwgPCZmdW5jXzQ4bV9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxMz47Ci0JCXJl ZyA9IDwweDAyNDA+OwotCX07Ci0KLQlkc3MyX2ZjazogZHNzMl9mY2sgewotCQkjY2xvY2stY2Vs bHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tz ID0gPCZkc3MyX2dhdGVfZmNrPiwgPCZkc3MyX211eF9mY2s+OwotCX07Ci0KLQlkc3NfNTRtX2Zj azogZHNzXzU0bV9mY2tAMjAwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxl ID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY181NG1fY2s+OwotCQl0 aSxiaXQtc2hpZnQgPSA8Mj47Ci0JCXJlZyA9IDwweDAyMDA+OwotCX07Ci0KLQlzc2lfc3NyX3Nz dF9nYXRlX2Zjazogc3NpX3Nzcl9zc3RfZ2F0ZV9mY2tAMjA0IHsKLQkJI2Nsb2NrLWNlbGxzID0g PDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKLQkJY2xvY2tz ID0gPCZjb3JlX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDE+OwotCQlyZWcgPSA8MHgwMjA0PjsK LQl9OwotCi0Jc3NpX3Nzcl9zc3RfZGl2X2Zjazogc3NpX3Nzcl9zc3RfZGl2X2Zja0AyNDAgewot CQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWRpdmlk ZXItY2xvY2siOwotCQljbG9ja3MgPSA8JmNvcmVfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MjA+ OwotCQlyZWcgPSA8MHgwMjQwPjsKLQl9OwotCi0Jc3NpX3Nzcl9zc3RfZmNrOiBzc2lfc3NyX3Nz dF9mY2sgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9z aXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZzc2lfc3NyX3NzdF9nYXRlX2Zjaz4sIDwmc3NpX3Nz cl9zc3RfZGl2X2Zjaz47Ci0JfTsKLQotCXVzYl9sNF9nYXRlX2ljazogdXNiX2w0X2dhdGVfaWNr QDIxNCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3Np dGUtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKLQkJdGksYml0 LXNoaWZ0ID0gPDA+OwotCQlyZWcgPSA8MHgwMjE0PjsKLQl9OwotCi0JdXNiX2w0X2Rpdl9pY2s6 IHVzYl9sNF9kaXZfaWNrQDI0MCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJs ZSA9ICJ0aSxjb21wb3NpdGUtZGl2aWRlci1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmY29yZV9sM19j az47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyNT47Ci0JCXJlZyA9IDwweDAyNDA+OwotCQl0aSxkaXZp ZGVycyA9IDwwPiwgPDE+LCA8Mj4sIDwwPiwgPDQ+OwotCX07Ci0KLQl1c2JfbDRfaWNrOiB1c2Jf bDRfaWNrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBv c2l0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmdXNiX2w0X2dhdGVfaWNrPiwgPCZ1c2JfbDRfZGl2 X2ljaz47Ci0JfTsKLQotCXNzaV9sNF9pY2s6IHNzaV9sNF9pY2tAMjE0IHsKLQkJI2Nsb2NrLWNl bGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0J CWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MT47Ci0JCXJlZyA9IDwweDAy MTQ+OwotCX07Ci0KLQlncHQxX2ljazogZ3B0MV9pY2tANDEwIHsKLQkJI2Nsb2NrLWNlbGxzID0g PDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2Nr cyA9IDwmc3lzX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDA+OwotCQlyZWcgPSA8MHgwNDEwPjsK LQl9OwotCi0JZ3B0MV9nYXRlX2ZjazogZ3B0MV9nYXRlX2Zja0A0MDAgewotCQkjY2xvY2stY2Vs bHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOwotCQlj bG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDA+OwotCQlyZWcgPSA8 MHgwNDAwPjsKLQl9OwotCi0JZ3B0MV9tdXhfZmNrOiBncHQxX211eF9mY2tANDQwIHsKLQkJI2Ns b2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1tdXgtY2xvY2si OwotCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPiwgPCZzeXNfY2s+LCA8JmFsdF9jaz47Ci0JCXJl ZyA9IDwweDA0NDA+OwotCX07Ci0KLQlncHQxX2ZjazogZ3B0MV9mY2sgewotCQkjY2xvY2stY2Vs bHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tz ID0gPCZncHQxX2dhdGVfZmNrPiwgPCZncHQxX211eF9mY2s+OwotCX07Ci0KLQlncHQyX2ljazog Z3B0Ml9pY2tAMjEwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRp LG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQt c2hpZnQgPSA8ND47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQlncHQyX2dhdGVfZmNrOiBn cHQyX2dhdGVfZmNrQDIwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9 ICJ0aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+Owot CQl0aSxiaXQtc2hpZnQgPSA8ND47Ci0JCXJlZyA9IDwweDAyMDA+OwotCX07Ci0KLQlncHQyX211 eF9mY2s6IGdwdDJfbXV4X2Zja0AyNDQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBh dGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtf Y2s+LCA8JnN5c19jaz4sIDwmYWx0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDI+OwotCQlyZWcg PSA8MHgwMjQ0PjsKLQl9OwotCi0JZ3B0Ml9mY2s6IGdwdDJfZmNrIHsKLQkJI2Nsb2NrLWNlbGxz ID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9 IDwmZ3B0Ml9nYXRlX2Zjaz4sIDwmZ3B0Ml9tdXhfZmNrPjsKLQl9OwotCi0JZ3B0M19pY2s6IGdw dDNfaWNrQDIxMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxv bWFwMy1pbnRlcmZhY2UtY2xvY2siOwotCQljbG9ja3MgPSA8Jmw0X2NrPjsKLQkJdGksYml0LXNo aWZ0ID0gPDU+OwotCQlyZWcgPSA8MHgwMjEwPjsKLQl9OwotCi0JZ3B0M19nYXRlX2ZjazogZ3B0 M19nYXRlX2Zja0AyMDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAi dGksY29tcG9zaXRlLWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKLQkJ dGksYml0LXNoaWZ0ID0gPDU+OwotCQlyZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JZ3B0M19tdXhf ZmNrOiBncHQzX211eF9mY2tAMjQ0IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRp YmxlID0gInRpLGNvbXBvc2l0ZS1tdXgtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2Nr PiwgPCZzeXNfY2s+LCA8JmFsdF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDw0PjsKLQkJcmVnID0g PDB4MDI0ND47Ci0JfTsKLQotCWdwdDNfZmNrOiBncHQzX2ZjayB7Ci0JCSNjbG9jay1jZWxscyA9 IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOwotCQljbG9ja3MgPSA8 JmdwdDNfZ2F0ZV9mY2s+LCA8JmdwdDNfbXV4X2Zjaz47Ci0JfTsKLQotCWdwdDRfaWNrOiBncHQ0 X2lja0AyMTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21h cDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1zaGlm dCA9IDw2PjsKLQkJcmVnID0gPDB4MDIxMD47Ci0JfTsKLQotCWdwdDRfZ2F0ZV9mY2s6IGdwdDRf Z2F0ZV9mY2tAMjAwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRp LGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzMya19jaz47Ci0JCXRp LGJpdC1zaGlmdCA9IDw2PjsKLQkJcmVnID0gPDB4MDIwMD47Ci0JfTsKLQotCWdwdDRfbXV4X2Zj azogZ3B0NF9tdXhfZmNrQDI0NCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJs ZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzMya19jaz4s IDwmc3lzX2NrPiwgPCZhbHRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8Nj47Ci0JCXJlZyA9IDww eDAyNDQ+OwotCX07Ci0KLQlncHQ0X2ZjazogZ3B0NF9mY2sgewotCQkjY2xvY2stY2VsbHMgPSA8 MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZn cHQ0X2dhdGVfZmNrPiwgPCZncHQ0X211eF9mY2s+OwotCX07Ci0KLQlncHQ1X2ljazogZ3B0NV9p Y2tAMjEwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAz LWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQg PSA8Nz47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQlncHQ1X2dhdGVfZmNrOiBncHQ1X2dh dGVfZmNrQDIwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxj b21wb3NpdGUtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OwotCQl0aSxi aXQtc2hpZnQgPSA8Nz47Ci0JCXJlZyA9IDwweDAyMDA+OwotCX07Ci0KLQlncHQ1X211eF9mY2s6 IGdwdDVfbXV4X2Zja0AyNDQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUg PSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+LCA8 JnN5c19jaz4sIDwmYWx0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDg+OwotCQlyZWcgPSA8MHgw MjQ0PjsKLQl9OwotCi0JZ3B0NV9mY2s6IGdwdDVfZmNrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+ OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZ3B0 NV9nYXRlX2Zjaz4sIDwmZ3B0NV9tdXhfZmNrPjsKLQl9OwotCi0JZ3B0Nl9pY2s6IGdwdDZfaWNr QDIxMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1p bnRlcmZhY2UtY2xvY2siOwotCQljbG9ja3MgPSA8Jmw0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0g PDg+OwotCQlyZWcgPSA8MHgwMjEwPjsKLQl9OwotCi0JZ3B0Nl9nYXRlX2ZjazogZ3B0Nl9nYXRl X2Zja0AyMDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29t cG9zaXRlLWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKLQkJdGksYml0 LXNoaWZ0ID0gPDg+OwotCQlyZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JZ3B0Nl9tdXhfZmNrOiBn cHQ2X211eF9mY2tAMjQ0IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0g InRpLGNvbXBvc2l0ZS1tdXgtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPiwgPCZz eXNfY2s+LCA8JmFsdF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxMD47Ci0JCXJlZyA9IDwweDAy NDQ+OwotCX07Ci0KLQlncHQ2X2ZjazogZ3B0Nl9mY2sgewotCQkjY2xvY2stY2VsbHMgPSA8MD47 Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZncHQ2 X2dhdGVfZmNrPiwgPCZncHQ2X211eF9mY2s+OwotCX07Ci0KLQlncHQ3X2ljazogZ3B0N19pY2tA MjEwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWlu dGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8 OT47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQlncHQ3X2dhdGVfZmNrOiBncHQ3X2dhdGVf ZmNrQDIwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21w b3NpdGUtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OwotCQl0aSxiaXQt c2hpZnQgPSA8OT47Ci0JCXJlZyA9IDwweDAyMDA+OwotCX07Ci0KLQlncHQ3X211eF9mY2s6IGdw dDdfbXV4X2Zja0AyNDQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAi dGksY29tcG9zaXRlLW11eC1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+LCA8JnN5 c19jaz4sIDwmYWx0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDEyPjsKLQkJcmVnID0gPDB4MDI0 ND47Ci0JfTsKLQotCWdwdDdfZmNrOiBncHQ3X2ZjayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsK LQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmdwdDdf Z2F0ZV9mY2s+LCA8JmdwdDdfbXV4X2Zjaz47Ci0JfTsKLQotCWdwdDhfaWNrOiBncHQ4X2lja0Ay MTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50 ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwx MD47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQlncHQ4X2dhdGVfZmNrOiBncHQ4X2dhdGVf ZmNrQDIwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21w b3NpdGUtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OwotCQl0aSxiaXQt c2hpZnQgPSA8MTA+OwotCQlyZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JZ3B0OF9tdXhfZmNrOiBn cHQ4X211eF9mY2tAMjQ0IHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0g InRpLGNvbXBvc2l0ZS1tdXgtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPiwgPCZz eXNfY2s+LCA8JmFsdF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxND47Ci0JCXJlZyA9IDwweDAy NDQ+OwotCX07Ci0KLQlncHQ4X2ZjazogZ3B0OF9mY2sgewotCQkjY2xvY2stY2VsbHMgPSA8MD47 Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZncHQ4 X2dhdGVfZmNrPiwgPCZncHQ4X211eF9mY2s+OwotCX07Ci0KLQlncHQ5X2ljazogZ3B0OV9pY2tA MjEwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWlu dGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8 MTE+OwotCQlyZWcgPSA8MHgwMjEwPjsKLQl9OwotCi0JZ3B0OV9nYXRlX2ZjazogZ3B0OV9nYXRl X2Zja0AyMDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29t cG9zaXRlLWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPjsKLQkJdGksYml0 LXNoaWZ0ID0gPDExPjsKLQkJcmVnID0gPDB4MDIwMD47Ci0JfTsKLQotCWdwdDlfbXV4X2Zjazog Z3B0OV9tdXhfZmNrQDI0NCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9 ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzMya19jaz4sIDwm c3lzX2NrPiwgPCZhbHRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MTY+OwotCQlyZWcgPSA8MHgw MjQ0PjsKLQl9OwotCi0JZ3B0OV9mY2s6IGdwdDlfZmNrIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+ OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZ3B0 OV9nYXRlX2Zjaz4sIDwmZ3B0OV9tdXhfZmNrPjsKLQl9OwotCi0JZ3B0MTBfaWNrOiBncHQxMF9p Y2tAMjEwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAz LWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQg PSA8MTI+OwotCQlyZWcgPSA8MHgwMjEwPjsKLQl9OwotCi0JZ3B0MTBfZ2F0ZV9mY2s6IGdwdDEw X2dhdGVfZmNrQDIwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0 aSxjb21wb3NpdGUtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+OwotCQl0 aSxiaXQtc2hpZnQgPSA8MTI+OwotCQlyZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JZ3B0MTBfbXV4 X2ZjazogZ3B0MTBfbXV4X2Zja0AyNDQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBh dGlibGUgPSAidGksY29tcG9zaXRlLW11eC1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtf Y2s+LCA8JnN5c19jaz4sIDwmYWx0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDE4PjsKLQkJcmVn ID0gPDB4MDI0ND47Ci0JfTsKLQotCWdwdDEwX2ZjazogZ3B0MTBfZmNrIHsKLQkJI2Nsb2NrLWNl bGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1jbG9jayI7Ci0JCWNsb2Nr cyA9IDwmZ3B0MTBfZ2F0ZV9mY2s+LCA8JmdwdDEwX211eF9mY2s+OwotCX07Ci0KLQlncHQxMV9p Y2s6IGdwdDExX2lja0AyMTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUg PSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRp LGJpdC1zaGlmdCA9IDwxMz47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQlncHQxMV9nYXRl X2ZjazogZ3B0MTFfZ2F0ZV9mY2tAMjAwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21w YXRpYmxlID0gInRpLGNvbXBvc2l0ZS1nYXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzMy a19jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxMz47Ci0JCXJlZyA9IDwweDAyMDA+OwotCX07Ci0K LQlncHQxMV9tdXhfZmNrOiBncHQxMV9tdXhfZmNrQDI0NCB7Ci0JCSNjbG9jay1jZWxscyA9IDww PjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21wb3NpdGUtbXV4LWNsb2NrIjsKLQkJY2xvY2tzID0g PCZmdW5jXzMya19jaz4sIDwmc3lzX2NrPiwgPCZhbHRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8 MjA+OwotCQlyZWcgPSA8MHgwMjQ0PjsKLQl9OwotCi0JZ3B0MTFfZmNrOiBncHQxMV9mY2sgewot CQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWNsb2Nr IjsKLQkJY2xvY2tzID0gPCZncHQxMV9nYXRlX2Zjaz4sIDwmZ3B0MTFfbXV4X2Zjaz47Ci0JfTsK LQotCWdwdDEyX2ljazogZ3B0MTJfaWNrQDIxMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJ Y29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOwotCQljbG9ja3MgPSA8Jmw0 X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDE0PjsKLQkJcmVnID0gPDB4MDIxMD47Ci0JfTsKLQot CWdwdDEyX2dhdGVfZmNrOiBncHQxMl9nYXRlX2Zja0AyMDAgewotCQkjY2xvY2stY2VsbHMgPSA8 MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xvY2siOwotCQljbG9ja3Mg PSA8JmZ1bmNfMzJrX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDE0PjsKLQkJcmVnID0gPDB4MDIw MD47Ci0JfTsKLQotCWdwdDEyX211eF9mY2s6IGdwdDEyX211eF9mY2tAMjQ0IHsKLQkJI2Nsb2Nr LWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLGNvbXBvc2l0ZS1tdXgtY2xvY2siOwot CQljbG9ja3MgPSA8JmZ1bmNfMzJrX2NrPiwgPCZzeXNfY2s+LCA8JmFsdF9jaz47Ci0JCXRpLGJp dC1zaGlmdCA9IDwyMj47Ci0JCXJlZyA9IDwweDAyNDQ+OwotCX07Ci0KLQlncHQxMl9mY2s6IGdw dDEyX2ZjayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxjb21w b3NpdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmdwdDEyX2dhdGVfZmNrPiwgPCZncHQxMl9tdXhf ZmNrPjsKLQl9OwotCi0JbWNic3AxX2ljazogbWNic3AxX2lja0AyMTAgewotCQkjY2xvY2stY2Vs bHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJ Y2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxNT47Ci0JCXJlZyA9IDwweDAy MTA+OwotCX07Ci0KLQltY2JzcDFfZ2F0ZV9mY2s6IG1jYnNwMV9nYXRlX2Zja0AyMDAgewotCQkj Y2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9zaXRlLWdhdGUtY2xv Y2siOwotCQljbG9ja3MgPSA8Jm1jYnNwX2Nsa3M+OwotCQl0aSxiaXQtc2hpZnQgPSA8MTU+Owot CQlyZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JbWNic3AyX2ljazogbWNic3AyX2lja0AyMTAgewot CQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNl LWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwxNj47Ci0J CXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQltY2JzcDJfZ2F0ZV9mY2s6IG1jYnNwMl9nYXRlX2Zj a0AyMDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksY29tcG9z aXRlLWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8Jm1jYnNwX2Nsa3M+OwotCQl0aSxiaXQtc2hp ZnQgPSA8MTY+OwotCQlyZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JbWNzcGkxX2ljazogbWNzcGkx X2lja0AyMTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21h cDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1zaGlm dCA9IDwxNz47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQltY3NwaTFfZmNrOiBtY3NwaTFf ZmNrQDIwMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0 LWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfNDhtX2NrPjsKLQkJdGksYml0LXNoaWZ0 ID0gPDE3PjsKLQkJcmVnID0gPDB4MDIwMD47Ci0JfTsKLQotCW1jc3BpMl9pY2s6IG1jc3BpMl9p Y2tAMjEwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAz LWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQg PSA8MTg+OwotCQlyZWcgPSA8MHgwMjEwPjsKLQl9OwotCi0JbWNzcGkyX2ZjazogbWNzcGkyX2Zj a0AyMDAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksd2FpdC1n YXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzQ4bV9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9 IDwxOD47Ci0JCXJlZyA9IDwweDAyMDA+OwotCX07Ci0KLQl1YXJ0MV9pY2s6IHVhcnQxX2lja0Ay MTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50 ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwy MT47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQl1YXJ0MV9mY2s6IHVhcnQxX2Zja0AyMDAg ewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNs b2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzQ4bV9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyMT47 Ci0JCXJlZyA9IDwweDAyMDA+OwotCX07Ci0KLQl1YXJ0Ml9pY2s6IHVhcnQyX2lja0AyMTAgewot CQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNl LWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyMj47Ci0J CXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQl1YXJ0Ml9mY2s6IHVhcnQyX2Zja0AyMDAgewotCQkj Y2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsK LQkJY2xvY2tzID0gPCZmdW5jXzQ4bV9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyMj47Ci0JCXJl ZyA9IDwweDAyMDA+OwotCX07Ci0KLQl1YXJ0M19pY2s6IHVhcnQzX2lja0AyMTQgewotCQkjY2xv Y2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2Nr IjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyPjsKLQkJcmVnID0g PDB4MDIxND47Ci0JfTsKLQotCXVhcnQzX2ZjazogdWFydDNfZmNrQDIwNCB7Ci0JCSNjbG9jay1j ZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOwotCQljbG9j a3MgPSA8JmZ1bmNfNDhtX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDI+OwotCQlyZWcgPSA8MHgw MjA0PjsKLQl9OwotCi0JZ3Bpb3NfaWNrOiBncGlvc19pY2tANDEwIHsKLQkJI2Nsb2NrLWNlbGxz ID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNs b2NrcyA9IDwmc3lzX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDI+OwotCQlyZWcgPSA8MHgwNDEw PjsKLQl9OwotCi0JZ3Bpb3NfZmNrOiBncGlvc19mY2tANDAwIHsKLQkJI2Nsb2NrLWNlbGxzID0g PDA+OwotCQljb21wYXRpYmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwm ZnVuY18zMmtfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8Mj47Ci0JCXJlZyA9IDwweDA0MDA+Owot CX07Ci0KLQltcHVfd2R0X2ljazogbXB1X3dkdF9pY2tANDEwIHsKLQkJI2Nsb2NrLWNlbGxzID0g PDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2Nr cyA9IDwmc3lzX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDM+OwotCQlyZWcgPSA8MHgwNDEwPjsK LQl9OwotCi0JbXB1X3dkdF9mY2s6IG1wdV93ZHRfZmNrQDQwMCB7Ci0JCSNjbG9jay1jZWxscyA9 IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8 JmZ1bmNfMzJrX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDM+OwotCQlyZWcgPSA8MHgwNDAwPjsK LQl9OwotCi0Jc3luY18zMmtfaWNrOiBzeW5jXzMya19pY2tANDEwIHsKLQkJI2Nsb2NrLWNlbGxz ID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNs b2NrcyA9IDwmc3lzX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDE+OwotCQlyZWcgPSA8MHgwNDEw PjsKLQl9OwotCi0Jd2R0MV9pY2s6IHdkdDFfaWNrQDQxMCB7Ci0JCSNjbG9jay1jZWxscyA9IDww PjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOwotCQljbG9ja3Mg PSA8JnN5c19jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDw0PjsKLQkJcmVnID0gPDB4MDQxMD47Ci0J fTsKLQotCW9tYXBjdHJsX2ljazogb21hcGN0cmxfaWNrQDQxMCB7Ci0JCSNjbG9jay1jZWxscyA9 IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOwotCQljbG9j a3MgPSA8JnN5c19jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDw1PjsKLQkJcmVnID0gPDB4MDQxMD47 Ci0JfTsKLQotCWNhbV9mY2s6IGNhbV9mY2tAMjAwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+Owot CQljb21wYXRpYmxlID0gInRpLGdhdGUtY2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfOTZtX2Nr PjsKLQkJdGksYml0LXNoaWZ0ID0gPDMxPjsKLQkJcmVnID0gPDB4MDIwMD47Ci0JfTsKLQotCWNh bV9pY2s6IGNhbV9pY2tAMjEwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxl ID0gInRpLG9tYXAzLW5vLXdhaXQtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9j az47Ci0JCXRpLGJpdC1zaGlmdCA9IDwzMT47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQlt YWlsYm94ZXNfaWNrOiBtYWlsYm94ZXNfaWNrQDIxMCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsK LQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOwotCQljbG9ja3MgPSA8 Jmw0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDMwPjsKLQkJcmVnID0gPDB4MDIxMD47Ci0JfTsK LQotCXdkdDRfaWNrOiB3ZHQ0X2lja0AyMTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNv bXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9j az47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyOT47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQl3 ZHQ0X2Zjazogd2R0NF9mY2tAMjAwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRp YmxlID0gInRpLHdhaXQtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY18zMmtfY2s+Owot CQl0aSxiaXQtc2hpZnQgPSA8Mjk+OwotCQlyZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JbXNwcm9f aWNrOiBtc3Byb19pY2tAMjEwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxl ID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0 aSxiaXQtc2hpZnQgPSA8Mjc+OwotCQlyZWcgPSA8MHgwMjEwPjsKLQl9OwotCi0JbXNwcm9fZmNr OiBtc3Byb19mY2tAMjAwIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0g InRpLHdhaXQtZ2F0ZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmZnVuY185Nm1fY2s+OwotCQl0aSxi aXQtc2hpZnQgPSA8Mjc+OwotCQlyZWcgPSA8MHgwMjAwPjsKLQl9OwotCi0JZmFjX2ljazogZmFj X2lja0AyMTAgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksb21h cDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZsNF9jaz47Ci0JCXRpLGJpdC1zaGlm dCA9IDwyNT47Ci0JCXJlZyA9IDwweDAyMTA+OwotCX07Ci0KLQlmYWNfZmNrOiBmYWNfZmNrQDIw MCB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSx3YWl0LWdhdGUt Y2xvY2siOwotCQljbG9ja3MgPSA8JmZ1bmNfMTJtX2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDI1 PjsKLQkJcmVnID0gPDB4MDIwMD47Ci0JfTsKLQotCWhkcV9pY2s6IGhkcV9pY2tAMjEwIHsKLQkJ I2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1j bG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MjM+OwotCQly ZWcgPSA8MHgwMjEwPjsKLQl9OwotCi0JaGRxX2ZjazogaGRxX2Zja0AyMDAgewotCQkjY2xvY2st Y2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksd2FpdC1nYXRlLWNsb2NrIjsKLQkJY2xv Y2tzID0gPCZmdW5jXzEybV9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyMz47Ci0JCXJlZyA9IDww eDAyMDA+OwotCX07Ci0KLQlpMmMxX2ljazogaTJjMV9pY2tAMjEwIHsKLQkJI2Nsb2NrLWNlbGxz ID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNs b2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MTk+OwotCQlyZWcgPSA8MHgwMjEw PjsKLQl9OwotCi0JaTJjMl9pY2s6IGkyYzJfaWNrQDIxMCB7Ci0JCSNjbG9jay1jZWxscyA9IDww PjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOwotCQljbG9ja3Mg PSA8Jmw0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDIwPjsKLQkJcmVnID0gPDB4MDIxMD47Ci0J fTsKLQotCWdwbWNfZmNrOiBncG1jX2Zja0AyMzggewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0J CWNvbXBhdGlibGUgPSAidGksZml4ZWQtZmFjdG9yLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3Jl X2wzX2NrPjsKLQkJdGksY2xvY2stZGl2ID0gPDE+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDwx PjsKLQkJcmVnID0gPDB4MDIzOD47Ci0JCXRpLGNsb2NrLW11bHQgPSA8MT47Ci0JfTsKLQotCXNk bWFfZmNrOiBzZG1hX2ZjayB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9 ICJmaXhlZC1mYWN0b3ItY2xvY2siOwotCQljbG9ja3MgPSA8JmNvcmVfbDNfY2s+OwotCQljbG9j ay1tdWx0ID0gPDE+OwotCQljbG9jay1kaXYgPSA8MT47Ci0JfTsKLQotCXNkbWFfaWNrOiBzZG1h X2lja0AyMzggewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksZml4 ZWQtZmFjdG9yLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKLQkJdGksY2xvY2st ZGl2ID0gPDE+OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDwwPjsKLQkJcmVnID0gPDB4MDIzOD47 Ci0JCXRpLGNsb2NrLW11bHQgPSA8MT47Ci0JfTsKLQotCXNkcmNfaWNrOiBzZHJjX2lja0AyMzgg ewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksZml4ZWQtZmFjdG9y LWNsb2NrIjsKLQkJY2xvY2tzID0gPCZjb3JlX2wzX2NrPjsKLQkJdGksY2xvY2stZGl2ID0gPDE+ OwotCQl0aSxhdXRvaWRsZS1zaGlmdCA9IDwyPjsKLQkJcmVnID0gPDB4MDIzOD47Ci0JCXRpLGNs b2NrLW11bHQgPSA8MT47Ci0JfTsKLQotCWRlc19pY2s6IGRlc19pY2tAMjFjIHsKLQkJI2Nsb2Nr LWNlbGxzID0gPDA+OwotCQljb21wYXRpYmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7 Ci0JCWNsb2NrcyA9IDwmbDRfY2s+OwotCQl0aSxiaXQtc2hpZnQgPSA8MD47Ci0JCXJlZyA9IDww eDAyMWM+OwotCX07Ci0KLQlzaGFfaWNrOiBzaGFfaWNrQDIxYyB7Ci0JCSNjbG9jay1jZWxscyA9 IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOwotCQljbG9j a3MgPSA8Jmw0X2NrPjsKLQkJdGksYml0LXNoaWZ0ID0gPDE+OwotCQlyZWcgPSA8MHgwMjFjPjsK LQl9OwotCi0Jcm5nX2ljazogcm5nX2lja0AyMWMgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0J CWNvbXBhdGlibGUgPSAidGksb21hcDMtaW50ZXJmYWNlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZs NF9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9IDwyPjsKLQkJcmVnID0gPDB4MDIxYz47Ci0JfTsKLQot CWFlc19pY2s6IGFlc19pY2tAMjFjIHsKLQkJI2Nsb2NrLWNlbGxzID0gPDA+OwotCQljb21wYXRp YmxlID0gInRpLG9tYXAzLWludGVyZmFjZS1jbG9jayI7Ci0JCWNsb2NrcyA9IDwmbDRfY2s+Owot CQl0aSxiaXQtc2hpZnQgPSA8Mz47Ci0JCXJlZyA9IDwweDAyMWM+OwotCX07Ci0KLQlwa2FfaWNr OiBwa2FfaWNrQDIxYyB7Ci0JCSNjbG9jay1jZWxscyA9IDwwPjsKLQkJY29tcGF0aWJsZSA9ICJ0 aSxvbWFwMy1pbnRlcmZhY2UtY2xvY2siOwotCQljbG9ja3MgPSA8Jmw0X2NrPjsKLQkJdGksYml0 LXNoaWZ0ID0gPDQ+OwotCQlyZWcgPSA8MHgwMjFjPjsKLQl9OwotCi0JdXNiX2ZjazogdXNiX2Zj a0AyMDQgewotCQkjY2xvY2stY2VsbHMgPSA8MD47Ci0JCWNvbXBhdGlibGUgPSAidGksd2FpdC1n YXRlLWNsb2NrIjsKLQkJY2xvY2tzID0gPCZmdW5jXzQ4bV9jaz47Ci0JCXRpLGJpdC1zaGlmdCA9 IDwwPjsKLQkJcmVnID0gPDB4MDIwND47Ci0JfTsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9j b25maWdzL29tYXAycGx1c19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAycGx1c19k ZWZjb25maWcKaW5kZXggZjgyN2Y4OTU2N2ZkLi4yZTk1OTdmNTBjNTggMTAwNjQ0Ci0tLSBhL2Fy Y2gvYXJtL2NvbmZpZ3Mvb21hcDJwbHVzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdz L29tYXAycGx1c19kZWZjb25maWcKQEAgLTIyLDkgKzIyLDcgQEAgQ09ORklHX05BTUVTUEFDRVM9 eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX1BST0ZJ TElORz15Ci1DT05GSUdfQVJDSF9NVUxUSV9WNj15CiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9 eQotQ09ORklHX0FSQ0hfT01BUDI9eQogQ09ORklHX0FSQ0hfT01BUDM9eQogQ09ORklHX0FSQ0hf T01BUDQ9eQogQ09ORklHX1NPQ19PTUFQNT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9t YXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNzlmOGFmZTNh NmJmLi4zN2VjYmZjMGExOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZp ZworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKQEAgLTUsMTUgKzUsNiBAQCBtZW51 ICJUSSBPTUFQL0FNL0RNL0RSQSBGYW1pbHkiCiBjb25maWcgT01BUF9IV01PRAogCWJvb2wKIAot Y29uZmlnIEFSQ0hfT01BUDIKLQlib29sICJUSSBPTUFQMiIKLQlkZXBlbmRzIG9uIEFSQ0hfTVVM VElfVjYKLQlkZXBlbmRzIG9uICFTTVAKLQlzZWxlY3QgQVJDSF9PTUFQMlBMVVMKLQlzZWxlY3Qg Q1BVX0FSTTExMzZSMAotCXNlbGVjdCBPTUFQX0hXTU9ECi0Jc2VsZWN0IFNPQ19IQVNfT01BUDJf U0RSQwotCiBjb25maWcgQVJDSF9PTUFQMwogCWJvb2wgIlRJIE9NQVAzIgogCWRlcGVuZHMgb24g QVJDSF9NVUxUSV9WNwpAQCAtMTE4LDcgKzEwOSw3IEBAIGNvbmZpZyBBUkNIX09NQVAyUExVUwog CXNlbGVjdCBPTUFQX0lSUUNISVAKIAlzZWxlY3QgQ0xLU1JDX1RJXzMySwogCWhlbHAKLQkgIFN5 c3RlbXMgYmFzZWQgb24gT01BUDIsIE9NQVAzLCBPTUFQNCBvciBPTUFQNQorCSAgU3lzdGVtcyBi YXNlZCBvbiBPTUFQMywgT01BUDQgb3IgT01BUDUKIAogY29uZmlnIE9NQVBfSU5URVJDT05ORUNU X0JBUlJJRVIKIAlib29sCkBAIC0xMjksNyArMTIwLDcgQEAgY29uZmlnIEFSQ0hfT01BUAogCiBp ZiBBUkNIX09NQVAyUExVUwogCi1tZW51ICJUSSBPTUFQMi8zLzQgU3BlY2lmaWMgRmVhdHVyZXMi CittZW51ICJUSSBPTUFQMy80IFNwZWNpZmljIEZlYXR1cmVzIgogCiBjb25maWcgQVJDSF9PTUFQ MlBMVVNfVFlQSUNBTAogCWJvb2wgIlR5cGljYWwgT01BUCBjb25maWd1cmF0aW9uIgpAQCAtMTM4 LDggKzEyOSw3IEBAIGNvbmZpZyBBUkNIX09NQVAyUExVU19UWVBJQ0FMCiAJc2VsZWN0IEhJR0hN RU0KIAlzZWxlY3QgSTJDCiAJc2VsZWN0IEkyQ19PTUFQCi0Jc2VsZWN0IE1FTkVMQVVTIGlmIEFS Q0hfT01BUDIKLQlzZWxlY3QgTkVPTiBpZiBDUFVfVjcKKwlzZWxlY3QgTkVPTgogCXNlbGVjdCBS RUdVTEFUT1IKIAlzZWxlY3QgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UKIAlzZWxlY3QgVFdMNDAz MF9DT1JFIGlmIEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQNApAQCAtMjA0LDI3ICsxOTQsNyBAQCBj b25maWcgT01BUDNfTDJfQVVYX1NFQ1VSRV9TRVJWSUNFX1NFVF9JRAogCSAgUFBBIHJvdXRpbmUg c2VydmljZSBJRCBmb3Igc2V0dGluZyBMMiBhdXhpbGlhcnkgY29udHJvbCByZWdpc3Rlci4KIAog Y29tbWVudCAiT01BUCBDb3JlIFR5cGUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyCi0KLWNvbmZp ZyBTT0NfT01BUDI0MjAKLQlib29sICJPTUFQMjQyMCBzdXBwb3J0IChERVBSRUNBVEVEKSIKLQlk ZXBlbmRzIG9uIEFSQ0hfT01BUDIKLQlkZWZhdWx0IHkKLQlzZWxlY3QgT01BUF9ETV9TWVNUSU1F UgotCXNlbGVjdCBPTUFQX0RNX1RJTUVSCi0Jc2VsZWN0IFNPQ19IQVNfT01BUDJfU0RSQwotCWhl bHAKLQkgIFRoaXMgU29DIGlzIHNjaGVkdWxlZCBmb3IgcmVtb3ZhbCBpbiBlYXJseSAyMDI3LAot CSAgc2luY2UgaXQgdXNlcyB0aGUgQVJNMTEzNnIwIENQVSByZXZpc2lvbi4KLQotY29uZmlnIFNP Q19PTUFQMjQzMAotCWJvb2wgIk9NQVAyNDMwIHN1cHBvcnQgKERFUFJFQ0FURUQpIgotCWRlcGVu ZHMgb24gQVJDSF9PTUFQMgotCWRlZmF1bHQgeQotCXNlbGVjdCBTT0NfSEFTX09NQVAyX1NEUkMK LQloZWxwCi0JICBUaGlzIFNvQyBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgaW4gZWFybHkgMjAy NywKLQkgIHNpbmNlIGl0IHVzZXMgdGhlIEFSTTExMzZyMCBDUFUgcmV2aXNpb24uCisJZGVwZW5k cyBvbiBBUkNIX09NQVAzCiAKIGNvbmZpZyBTT0NfT01BUDM0MzAKIAlib29sICJPTUFQMzQzMCBz dXBwb3J0IgpAQCAtMjM3LDMzICsyMDcsOSBAQCBjb25maWcgU09DX1RJODFYWAogCWRlcGVuZHMg b24gQVJDSF9PTUFQMwogCWRlZmF1bHQgeQogCi1jb21tZW50ICJPTUFQIExlZ2FjeSBQbGF0Zm9y bSBEYXRhIEJvYXJkIFR5cGUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUwotCiBjb25maWcg TUFDSF9PTUFQX0dFTkVSSUMKIAlib29sCiAKLWNvbmZpZyBNQUNIX09NQVAyX1RVU0I2MDEwCi0J Ym9vbAotCWRlcGVuZHMgb24gQVJDSF9PTUFQMiAmJiBTT0NfT01BUDI0MjAKLQlkZWZhdWx0IHkg aWYgTUFDSF9OT0tJQV9OOFgwCi0KLWNvbmZpZyBNQUNIX05PS0lBX044MTAKLQlib29sCi0KLWNv bmZpZyBNQUNIX05PS0lBX044MTBfV0lNQVgKLQlib29sCi0KLWNvbmZpZyBNQUNIX05PS0lBX044 WDAKLQlib29sICJOb2tpYSBOODAwL044MTAgKERFUFJFQ0FURUQpIgotCWRlcGVuZHMgb24gU09D X09NQVAyNDIwCi0JZGVmYXVsdCB5Ci0Jc2VsZWN0IE1BQ0hfTk9LSUFfTjgxMAotCXNlbGVjdCBN QUNIX05PS0lBX044MTBfV0lNQVgKLQloZWxwCi0JICBUaGlzIG1hY2hpbmUgaXMgc2NoZWR1bGVk IGZvciByZW1vdmFsIGluIGVhcmx5IDIwMjcsCi0JICBzaW5jZSBpdCB1c2VzIHRoZSBBUk0xMTM2 cjAgQ1BVIHJldmlzaW9uLgotCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2Fy bS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQppbmRl eCBkYWYyMTEyN2M4MmYuLjZjNzQxNDQyZGMwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1v bWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC01LDIz ICs1LDE3IEBACiAKICMgQ29tbW9uIHN1cHBvcnQKIG9iai15IDo9IGlkLm8gaW8ubyBjb250cm9s Lm8gZGV2aWNlcy5vIGZiLm8gcG0ubyBcCi0JIGNvbW1vbi5vIGRtYS5vIG9tYXAtaGVhZHNtcC5v IHNyYW0ubworCSBjb21tb24ubyBkbWEubyBvbWFwLWhlYWRzbXAubwogCi1od21vZC1jb21tb24J CQkJPSBvbWFwX2h3bW9kLm8gXAorIyBPTUFQMyBod21vZCBzcGVjaWZpYworb2JqLSQoQ09ORklH X0FSQ0hfT01BUDMpCQkrPSBzcmFtLm8gb21hcF9od21vZC5vIFwKIAkJCQkJICBvbWFwX2h3bW9k X2NvbW1vbl9kYXRhLm8gXAogCQkJCQkgIG9tYXBfaHdtb2RfY29tbW9uX2lwYmxvY2tfZGF0YS5v IFwKIAkJCQkJICBvbWFwX2RldmljZS5vIGRpc3BsYXkubyBoZHExdy5vIFwKIAkJCQkJICBpMmMu byB3ZF90aW1lci5vCi1jbG9jay1jb21tb24JCQkJPSBjbG9jay5vCi1zZWN1cmUtY29tbW9uCQkJ CT0gb21hcC1zbWMubyBvbWFwLXNlY3VyZS5vCiAKLW9iai0kKENPTkZJR19BUkNIX09NQVAyKSAr PSAkKG9tYXAtMi0zLWNvbW1vbikgJChod21vZC1jb21tb24pCi1vYmotJChDT05GSUdfQVJDSF9P TUFQMykgKz0gJChvbWFwLTItMy1jb21tb24pICQoaHdtb2QtY29tbW9uKSAkKHNlY3VyZS1jb21t b24pCi1vYmotJChDT05GSUdfQVJDSF9PTUFQNCkgKz0gJChzZWN1cmUtY29tbW9uKQotb2JqLSQo Q09ORklHX1NPQ19BTTMzWFgpICs9ICQoc2VjdXJlLWNvbW1vbikKLW9iai0kKENPTkZJR19TT0Nf T01BUDUpICArPSAkKHNlY3VyZS1jb21tb24pCi1vYmotJChDT05GSUdfU09DX0FNNDNYWCkgKz0g JChzZWN1cmUtY29tbW9uKQotb2JqLSQoQ09ORklHX1NPQ19EUkE3WFgpICs9ICQoc2VjdXJlLWNv bW1vbikKKyMgc2VjdXJlIHdvcmxkCitvYmoteQkJCQkJKz0gb21hcC1zbWMubyBvbWFwLXNlY3Vy ZS5vCiAKIGlmbmVxICgkKENPTkZJR19TTkRfU09DX09NQVBfTUNCU1ApLCkKIG9iai0kKENPTkZJ R19PTUFQX0hXTU9EKSArPSBtY2JzcC5vCkBAIC00OSwxMyArNDMsNyBAQCBvbWFwNS1kcmE3LWNv bW1vbi0kKENPTkZJR19TT0NfSEFTX1JFQUxUSU1FX0NPVU5URVIpID0gIHRpbWVyLm8KIG9iai0k KENPTkZJR19TT0NfT01BUDUpCQkJKz0gJChvbWFwNS1kcmE3LWNvbW1vbi15KQogb2JqLSQoQ09O RklHX1NPQ19EUkE3WFgpCQkrPSAkKG9tYXA1LWRyYTctY29tbW9uLXkpCiAKLSMgRnVuY3Rpb25z IGxvYWRlZCB0byBTUkFNCi1vYmotJChDT05GSUdfU09DX09NQVAyNDIwKQkJKz0gc3JhbTI0Mngu bwotb2JqLSQoQ09ORklHX1NPQ19PTUFQMjQzMCkJCSs9IHNyYW0yNDN4Lm8KLQogIyBSZXN0YXJ0 IGNvZGUgKE9NQVA0LzUgY3VycmVudGx5IGluIG9tYXA0LWNvbW1vbi5jKQotb2JqLSQoQ09ORklH X1NPQ19PTUFQMjQyMCkJCSs9IG9tYXAyLXJlc3RhcnQubwotb2JqLSQoQ09ORklHX1NPQ19PTUFQ MjQzMCkJCSs9IG9tYXAyLXJlc3RhcnQubwogb2JqLSQoQ09ORklHX1NPQ19USTgxWFgpCQkrPSB0 aTgxeHgtcmVzdGFydC5vCiBvYmotJChDT05GSUdfU09DX0FNMzNYWCkJCSs9IGFtMzN4eC1yZXN0 YXJ0Lm8KIG9iai0kKENPTkZJR19TT0NfQU00M1hYKQkJKz0gb21hcDQtcmVzdGFydC5vCkBAIC02 NSw3ICs1Myw2IEBAIG9iai0kKENPTkZJR19TT0NfT01BUDUpCQkJKz0gb21hcDQtcmVzdGFydC5v CiBvYmotJChDT05GSUdfU09DX0RSQTdYWCkJCSs9IG9tYXA0LXJlc3RhcnQubwogCiAjIFNNUy9T RFJDCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHNkcmMyeHh4Lm8KICMgb2JqLSQoQ09O RklHX0FSQ0hfT01BUDMpCQkrPSBzZHJjM3h4eC5vCiAKICMgT1BQIHRhYmxlIGluaXRpYWxpemF0 aW9uCkBAIC04MCw3ICs2Nyw2IEBAIG9iai0kKENPTkZJR19BUkNIX09NQVA0KQkJKz0gJChvbWFw LTQtNS1wbS1jb21tb24pCiBvYmotJChDT05GSUdfU09DX09NQVA1KQkJCSs9ICQob21hcC00LTUt cG0tY29tbW9uKQogCiBpZmVxICgkKENPTkZJR19QTSkseSkKLW9iai0kKENPTkZJR19BUkNIX09N QVAyKQkJKz0gc2xlZXAyNHh4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gcG0zNHh4 Lm8gc2xlZXAzNHh4Lm8KIG9tYXAtNC01LXBtLWNvbW1vbgkJCSs9IHBtNDR4eC5vCiBvYmotJChD T05GSUdfQVJDSF9PTUFQNCkJCSs9ICQob21hcC00LTUtcG0tY29tbW9uKQpAQCAtMTA1LDcgKzkx LDYgQEAgZW5kaWYKIAogIyBQUkNNCiBvYmoteQkJCQkJKz0gcHJtX2NvbW1vbi5vIGNtX2NvbW1v bi5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHBybTJ4eHhfM3h4eC5vIHBybTJ4eHgu byBjbTJ4eHgubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBwcm0yeHh4XzN4eHgubyBw cm0zeHh4Lm8gY20zeHh4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gdmMzeHh4X2Rh dGEubyB2cDN4eHhfZGF0YS5vCiBvbWFwLXByY20tNC01LWNvbW1vbgkJCT0gIGNtaW5zdDQ0eHgu byBwcm00NHh4Lm8gXApAQCAtMTIyLDggKzEwNyw2IEBAIG9iai0kKENPTkZJR19TT0NfQU00M1hY KQkJKz0gJChvbWFwLXByY20tNC01LWNvbW1vbikgXAogCiAjIE9NQVAgdm9sdGFnZSBkb21haW5z CiB2b2x0YWdlZG9tYWluLWNvbW1vbgkJCTo9IHZvbHRhZ2UubyB2Yy5vIHZwLm8KLW9iai0kKENP TkZJR19BUkNIX09NQVAyKQkJKz0gJCh2b2x0YWdlZG9tYWluLWNvbW1vbikKLW9iai0kKENPTkZJ R19BUkNIX09NQVAyKQkJKz0gdm9sdGFnZWRvbWFpbnMyeHh4X2RhdGEubwogb2JqLSQoQ09ORklH X0FSQ0hfT01BUDMpCQkrPSAkKHZvbHRhZ2Vkb21haW4tY29tbW9uKQogb2JqLSQoQ09ORklHX0FS Q0hfT01BUDMpCQkrPSB2b2x0YWdlZG9tYWluczN4eHhfZGF0YS5vCiBvYmotJChDT05GSUdfQVJD SF9PTUFQNCkJCSs9ICQodm9sdGFnZWRvbWFpbi1jb21tb24pCkBAIC0xMzYsOSArMTE5LDYgQEAg b2JqLSQoQ09ORklHX1NPQ19EUkE3WFgpCQkrPSAkKHZvbHRhZ2Vkb21haW4tY29tbW9uKQogCiAj IE9NQVAgcG93ZXJkb21haW4gZnJhbWV3b3JrCiBwb3dlcmRvbWFpbi1jb21tb24JCQkrPSBwb3dl cmRvbWFpbi5vIHBvd2VyZG9tYWluLWNvbW1vbi5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikJ CSs9ICQocG93ZXJkb21haW4tY29tbW9uKQotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBw b3dlcmRvbWFpbnMyeHh4X2RhdGEubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBwb3dl cmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5vCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9ICQo cG93ZXJkb21haW4tY29tbW9uKQogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBwb3dlcmRv bWFpbnMzeHh4X2RhdGEubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBwb3dlcmRvbWFp bnMyeHh4XzN4eHhfZGF0YS5vCkBAIC0xNTUsMTAgKzEzNSw2IEBAIG9iai0kKENPTkZJR19TT0Nf RFJBN1hYKQkJKz0gcG93ZXJkb21haW5zN3h4X2RhdGEubwogCiAjIFBSQ00gY2xvY2tkb21haW4g Y29udHJvbAogY2xvY2tkb21haW4tY29tbW9uCQkJKz0gY2xvY2tkb21haW4ubwotb2JqLSQoQ09O RklHX0FSQ0hfT01BUDIpCQkrPSAkKGNsb2NrZG9tYWluLWNvbW1vbikKLW9iai0kKENPTkZJR19B UkNIX09NQVAyKQkJKz0gY2xvY2tkb21haW5zMnh4eF8zeHh4X2RhdGEubwotb2JqLSQoQ09ORklH X1NPQ19PTUFQMjQyMCkJCSs9IGNsb2NrZG9tYWluczI0MjBfZGF0YS5vCi1vYmotJChDT05GSUdf U09DX09NQVAyNDMwKQkJKz0gY2xvY2tkb21haW5zMjQzMF9kYXRhLm8KIG9iai0kKENPTkZJR19B UkNIX09NQVAzKQkJKz0gJChjbG9ja2RvbWFpbi1jb21tb24pCiBvYmotJChDT05GSUdfQVJDSF9P TUFQMykJCSs9IGNsb2NrZG9tYWluczJ4eHhfM3h4eF9kYXRhLm8KIG9iai0kKENPTkZJR19BUkNI X09NQVAzKQkJKz0gY2xvY2tkb21haW5zM3h4eF9kYXRhLm8KQEAgLTE3Niw0NyArMTUyLDIwIEBA IG9iai0kKENPTkZJR19TT0NfRFJBN1hYKQkJKz0gJChjbG9ja2RvbWFpbi1jb21tb24pCiBvYmot JChDT05GSUdfU09DX0RSQTdYWCkJCSs9IGNsb2NrZG9tYWluczd4eF9kYXRhLm8KIAogIyBDbG9j ayBmcmFtZXdvcmsKLW9iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gJChjbG9jay1jb21tb24p Ci1vYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IGNsa3QyeHh4X2RwbGxjb3JlLm8KLW9iai0k KENPTkZJR19BUkNIX09NQVAyKQkJKz0gY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5vCi1vYmotJChD T05GSUdfQVJDSF9PTUFQMikJCSs9IGNsa3QyeHh4X2RwbGwubwotb2JqLSQoQ09ORklHX0FSQ0hf T01BUDMpCQkrPSAkKGNsb2NrLWNvbW1vbikKLW9iai0kKENPTkZJR19BUkNIX09NQVA0KQkJKz0g JChjbG9jay1jb21tb24pCi1vYmotJChDT05GSUdfU09DX0FNMzNYWCkJCSs9ICQoY2xvY2stY29t bW9uKQotb2JqLSQoQ09ORklHX1NPQ19PTUFQNSkJCQkrPSAkKGNsb2NrLWNvbW1vbikKLW9iai0k KENPTkZJR19TT0NfRFJBN1hYKQkJKz0gJChjbG9jay1jb21tb24pCi1vYmotJChDT05GSUdfU09D X0FNNDNYWCkJCSs9ICQoY2xvY2stY29tbW9uKQotCi0jIE9NQVAyIGNsb2NrIHJhdGUgc2V0IGRh dGEgKG9sZCAiT1BQIiBkYXRhKQotb2JqLSQoQ09ORklHX1NPQ19PTUFQMjQyMCkJCSs9IG9wcDI0 MjBfZGF0YS5vCi1vYmotJChDT05GSUdfU09DX09NQVAyNDMwKQkJKz0gb3BwMjQzMF9kYXRhLm8K K29iai15CQkJCQkrPSBjbG9jay5vCiAKICMgaHdtb2QgZGF0YQotb2JqLSQoQ09ORklHX1NPQ19P TUFQMjQyMCkJCSs9IG9tYXBfaHdtb2RfMnh4eF9pcGJsb2NrX2RhdGEubwotb2JqLSQoQ09ORklH X1NPQ19PTUFQMjQyMCkJCSs9IG9tYXBfaHdtb2RfMnh4eF8zeHh4X2lwYmxvY2tfZGF0YS5vCi1v YmotJChDT05GSUdfU09DX09NQVAyNDIwKQkJKz0gb21hcF9od21vZF8yeHh4X2ludGVyY29ubmVj dF9kYXRhLm8KLW9iai0kKENPTkZJR19TT0NfT01BUDI0MjApCQkrPSBvbWFwX2h3bW9kXzI0MjBf ZGF0YS5vCi1vYmotJChDT05GSUdfU09DX09NQVAyNDMwKQkJKz0gb21hcF9od21vZF8yeHh4X2lw YmxvY2tfZGF0YS5vCi1vYmotJChDT05GSUdfU09DX09NQVAyNDMwKQkJKz0gb21hcF9od21vZF8y eHh4XzN4eHhfaXBibG9ja19kYXRhLm8KLW9iai0kKENPTkZJR19TT0NfT01BUDI0MzApCQkrPSBv bWFwX2h3bW9kXzJ4eHhfaW50ZXJjb25uZWN0X2RhdGEubwotb2JqLSQoQ09ORklHX1NPQ19PTUFQ MjQzMCkJCSs9IG9tYXBfaHdtb2RfMjQzMF9kYXRhLm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAz KQkJKz0gb21hcF9od21vZF8yeHh4XzN4eHhfaXBibG9ja19kYXRhLm8KIG9iai0kKENPTkZJR19B UkNIX09NQVAzKQkJKz0gb21hcF9od21vZF8zeHh4X2RhdGEubwogb2JqLSQoQ09ORklHX1NPQ19U STgxWFgpCQkrPSBvbWFwX2h3bW9kXzgxeHhfZGF0YS5vCiAKLSMgT01BUDI0MjAgTVNESSBjb250 cm9sbGVyIGludGVncmF0aW9uIHN1cHBvcnQgKCJNTUMiKQotb2JqLSQoQ09ORklHX1NPQ19PTUFQ MjQyMCkJCSs9IG1zZGkubwotCiAjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKIG9iai0kKENPTkZJ R19NQUNIX09NQVBfR0VORVJJQykJCSs9IGJvYXJkLWdlbmVyaWMubyBwZGF0YS1xdWlya3Mubwot b2JqLSQoQ09ORklHX01BQ0hfTk9LSUFfTjhYMCkJCSs9IGJvYXJkLW44eDAubwogCiAjIFBsYXRm b3JtIHNwZWNpZmljIGRldmljZSBpbml0IGNvZGUKIAogb2JqLXkJCQkJCSs9IG9tYXBfcGh5X2lu dGVybmFsLm8KIAotb2JqLSQoQ09ORklHX01BQ0hfT01BUDJfVFVTQjYwMTApCSs9IHVzYi10dXNi NjAxMC5vCi0KICQob2JqKS9wbS1hc20tb2Zmc2V0cy5oOiAkKG9iaikvcG0tYXNtLW9mZnNldHMu cyBGT1JDRQogCSQoY2FsbCBmaWxlY2hrLG9mZnNldHMsX19USV9QTV9BU01fT0ZGU0VUU19IX18p CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jIGIvYXJj aC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKaW5kZXggYmZmNjczZTkzMmZlLi45NzJi OGNmMDU0N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5j CisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCkBAIC00NSw0MCArNDUs NiBAQCB2b2lkIHRpY2tfYnJvYWRjYXN0KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogfQog I2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU09DX09NQVAyNDIwCi1zdGF0aWMgY29uc3QgY2hhciAq Y29uc3Qgb21hcDI0MnhfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewotCSJ0aSxvbWFw MjQyMCIsCi0JTlVMTCwKLX07Ci0KLURUX01BQ0hJTkVfU1RBUlQoT01BUDI0MlhfRFQsICJHZW5l cmljIE9NQVAyNDIwIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIikKLQkucmVzZXJ2ZQk9IG9tYXBf cmVzZXJ2ZSwKLQkubWFwX2lvCQk9IG9tYXAyNDJ4X21hcF9pbywKLQkuaW5pdF9lYXJseQk9IG9t YXAyNDIwX2luaXRfZWFybHksCi0JLmluaXRfbWFjaGluZQk9IG9tYXBfZ2VuZXJpY19pbml0LAot CS5pbml0X3RpbWUJPSBvbWFwX2luaXRfdGltZV9vZiwKLQkuZHRfY29tcGF0CT0gb21hcDI0Mnhf Ym9hcmRzX2NvbXBhdCwKLQkucmVzdGFydAk9IG9tYXAyeHh4X3Jlc3RhcnQsCi1NQUNISU5FX0VO RAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfU09DX09NQVAyNDMwCi1zdGF0aWMgY29uc3QgY2hh ciAqY29uc3Qgb21hcDI0M3hfYm9hcmRzX2NvbXBhdFtdIF9faW5pdGNvbnN0ID0gewotCSJ0aSxv bWFwMjQzMCIsCi0JTlVMTCwKLX07Ci0KLURUX01BQ0hJTkVfU1RBUlQoT01BUDI0M1hfRFQsICJH ZW5lcmljIE9NQVAyNDMwIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpIikKLQkucmVzZXJ2ZQk9IG9t YXBfcmVzZXJ2ZSwKLQkubWFwX2lvCQk9IG9tYXAyNDN4X21hcF9pbywKLQkuaW5pdF9lYXJseQk9 IG9tYXAyNDMwX2luaXRfZWFybHksCi0JLmluaXRfbWFjaGluZQk9IG9tYXBfZ2VuZXJpY19pbml0 LAotCS5pbml0X3RpbWUJPSBvbWFwX2luaXRfdGltZV9vZiwKLQkuZHRfY29tcGF0CT0gb21hcDI0 M3hfYm9hcmRzX2NvbXBhdCwKLQkucmVzdGFydAk9IG9tYXAyeHh4X3Jlc3RhcnQsCi1NQUNISU5F X0VORAotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogLyogU29tZSBib2FyZHMg bmVlZCBib2FyZCBuYW1lIGZvciBsZWdhY3kgdXNlcnNwYWNlIGluIC9wcm9jL2NwdWluZm8gKi8K IHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuOTAwX2JvYXJkc19jb21wYXRbXSBfX2luaXRjb25z dCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jIGIvYXJj aC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGQ5YWNkMzJjNTQ1Ny4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIv Ym9hcmQtbjh4MC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEyICswLDAgQEAKLS8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNo LW9tYXAyL2JvYXJkLW44eDAuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IE5va2lh IENvcnBvcmF0aW9uCi0gKiBBdXRob3I6IEp1aGEgWXJqb2xhIDxqdWhhLnlyam9sYUBub2tpYS5j b20+Ci0gKgotICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwotICov Ci0KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2lu Y2x1ZGUgPGxpbnV4L2dwaW8vbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3Vt ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNp bmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRl IDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGlu dXgvdXNiL211c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgotI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RhdGEvbW1jLW9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvbWVuZWxh dXMuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10 eXBlcy5oPgotCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAibW1jLmgiCi0jaW5jbHVk ZSAidXNiLXR1c2I2MDEwLmgiCi0jaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiY29tbW9uLWJv YXJkLWRldmljZXMuaCIKLQotI2RlZmluZSBUVVNCNjAxMF9BU1lOQ19DUwkxCi0jZGVmaW5lIFRV U0I2MDEwX1NZTkNfQ1MJNAotI2RlZmluZSBUVVNCNjAxMF9ETUFDSEFOCTB4M2YKLQotI2RlZmlu ZSBOT0tJQV9OODEwX1dJTUFYCSgxIDw8IDIpCi0jZGVmaW5lIE5PS0lBX044MTAJCSgxIDw8IDEp Ci0jZGVmaW5lIE5PS0lBX044MDAJCSgxIDw8IDApCi0KLXN0YXRpYyB1MzIgYm9hcmRfY2FwczsK LQotI2RlZmluZSBib2FyZF9pc19uODAwKCkJCShib2FyZF9jYXBzICYgTk9LSUFfTjgwMCkKLSNk ZWZpbmUgYm9hcmRfaXNfbjgxMCgpCQkoYm9hcmRfY2FwcyAmIE5PS0lBX044MTApCi0jZGVmaW5l IGJvYXJkX2lzX244MTBfd2ltYXgoKQkoYm9hcmRfY2FwcyAmIE5PS0lBX044MTBfV0lNQVgpCi0K LXN0YXRpYyB2b2lkIGJvYXJkX2NoZWNrX3JldmlzaW9uKHZvaWQpCi17Ci0JaWYgKG9mX21hY2hp bmVfaXNfY29tcGF0aWJsZSgibm9raWEsbjgwMCIpKQotCQlib2FyZF9jYXBzID0gTk9LSUFfTjgw MDsKLQllbHNlIGlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoIm5va2lhLG44MTAiKSkKLQkJ Ym9hcmRfY2FwcyA9IE5PS0lBX044MTA7Ci0JZWxzZSBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRp YmxlKCJub2tpYSxuODEwLXdpbWF4IikpCi0JCWJvYXJkX2NhcHMgPSBOT0tJQV9OODEwX1dJTUFY OwotCi0JaWYgKCFib2FyZF9jYXBzKQotCQlwcl9lcnIoIlVua25vd24gYm9hcmRcbiIpOwotfQot Ci0jaWYgSVNfRU5BQkxFRChDT05GSUdfVVNCX01VU0JfVFVTQjYwMTApCi0KLXN0YXRpYyBzdHJ1 Y3QgbXVzYl9oZHJjX2NvbmZpZyBtdXNiX2NvbmZpZyA9IHsKLQkubXVsdGlwb2ludAk9IDEsCi0J LmR5bl9maWZvCT0gMSwKLQkubnVtX2Vwcwk9IDE2LAotCS5yYW1fYml0cwk9IDEyLAotfTsKLQot c3RhdGljIHN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSB0dXNiX2RhdGEgPSB7Ci0JLm1v ZGUJCT0gTVVTQl9PVEcsCi0JLm1pbl9wb3dlcgk9IDI1LAkvKiB4MiA9IDUwIG1BIGRyYXduIGZy b20gVkJVUyBhcyBwZXJpcGhlcmFsICovCi0JLnBvd2VyCQk9IDEwMCwJLyogTWF4IDEwMCBtQSBW QlVTIGZvciBob3N0IG1vZGUgKi8KLQkuY29uZmlnCQk9ICZtdXNiX2NvbmZpZywKLX07Ci0KLXN0 YXRpYyBzdHJ1Y3QgZ3Bpb2RfbG9va3VwX3RhYmxlIHR1c2JfZ3Bpb190YWJsZSA9IHsKLQkuZGV2 X2lkID0gIm11c2ItdHVzYiIsCi0JLnRhYmxlID0gewotCQlHUElPX0xPT0tVUCgiZ3Bpby0wLTMx IiwgMCwgImVuYWJsZSIsIEdQSU9fQUNUSVZFX0hJR0gpLAotCQlHUElPX0xPT0tVUCgiZ3Bpby0z Mi02MyIsIDI2LCAiaW50IiwgR1BJT19BQ1RJVkVfSElHSCksCi0JCXsgfQotCX0sCi19OwotCi1z dGF0aWMgdm9pZCBfX2luaXQgbjh4MF91c2JfaW5pdCh2b2lkKQotewotCWludCByZXQgPSAwOwot Ci0JZ3Bpb2RfYWRkX2xvb2t1cF90YWJsZSgmdHVzYl9ncGlvX3RhYmxlKTsKLQlyZXQgPSB0dXNi NjAxMF9zZXR1cF9pbnRlcmZhY2UoJnR1c2JfZGF0YSwgVFVTQjYwMTBfUkVGQ0xLXzE5LCAyLAot CQkJCSAgICAgICBUVVNCNjAxMF9BU1lOQ19DUywgVFVTQjYwMTBfU1lOQ19DUywKLQkJCQkgICAg ICAgVFVTQjYwMTBfRE1BQ0hBTik7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm47Ci0KLQlwcl9p bmZvKCJUVVNCIDYwMTBcbiIpOwotCi0JcmV0dXJuOwotfQotI2Vsc2UKLQotc3RhdGljIHZvaWQg X19pbml0IG44eDBfdXNiX2luaXQodm9pZCkge30KLQotI2VuZGlmIC8qQ09ORklHX1VTQl9NVVNC X1RVU0I2MDEwICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NRU5FTEFVUykgJiYgSVNfRU5BQkxF RChDT05GSUdfTU1DX09NQVApCi0KLS8qCi0gKiBPbiBib3RoIE44MDAgYW5kIE44MTAsIG9ubHkg dGhlIGZpcnN0IG9mIHRoZSB0d28gTU1DIGNvbnRyb2xsZXJzIGlzIGluIHVzZS4KLSAqIFRoZSB0 d28gTU1DIHNsb3RzIGFyZSBtdWx0aXBsZXhlZCB2aWEgTWVuZWxhdXMgY29tcGFuaW9uIGNoaXAg b3ZlciBJMkMuCi0gKiBPbiBOODAwLCBib3RoIHNsb3RzIGFyZSBwb3dlcmVkIHZpYSBNZW5lbGF1 cy4gT24gTjgxMCwgb25seSBvbmUgb2YgdGhlCi0gKiBzbG90cyBpcyBwb3dlcmVkIHZpYSBNZW5l bGF1cy4gVGhlIE44MTAgRU1NQyBpcyBwb3dlcmVkIHZpYSBHUElPLgotICoKLSAqIFZNTUMJCQkJ c2xvdCAxIG9uIGJvdGggTjgwMCBhbmQgTjgxMAotICogVkRDREMzX0FQRSBhbmQgVk1DUzJfQVBF CXNsb3QgMiBvbiBOODAwCi0gKiBHUElPMjMgYW5kIEdQSU85CQlzbG90IDIgRU1NQyBvbiBOODEw Ci0gKgotICovCi1zdGF0aWMgaW50IHNsb3QxX2NvdmVyX29wZW47Ci1zdGF0aWMgaW50IHNsb3Qy X2NvdmVyX29wZW47Ci1zdGF0aWMgc3RydWN0IGRldmljZSAqbW1jX2RldmljZTsKLQotc3RhdGlj IHN0cnVjdCBncGlvZF9sb29rdXBfdGFibGUgbm9raWE4MDBfbW1jX2dwaW9fdGFibGUgPSB7Ci0J LmRldl9pZCA9ICJtbWNpLW9tYXAuMCIsCi0JLnRhYmxlID0gewotCQkvKiBTbG90IHN3aXRjaCwg R1BJTyA5NiAqLwotCQlHUElPX0xPT0tVUCgiZ3Bpby05Ni0xMjciLCAwLCAic3dpdGNoIiwgR1BJ T19BQ1RJVkVfSElHSCksCi0JCXsgfQotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9kX2xv b2t1cF90YWJsZSBub2tpYTgxMF9tbWNfZ3Bpb190YWJsZSA9IHsKLQkuZGV2X2lkID0gIm1tY2kt b21hcC4wIiwKLQkudGFibGUgPSB7Ci0JCS8qIFNsb3Qgc3dpdGNoLCBHUElPIDk2ICovCi0JCUdQ SU9fTE9PS1VQKCJncGlvLTk2LTEyNyIsIDAsICJzd2l0Y2giLCBHUElPX0FDVElWRV9ISUdIKSwK LQkJLyogU2xvdCBpbmRleCAxLCBWU0QgcG93ZXIsIEdQSU8gMjMgKi8KLQkJR1BJT19MT09LVVBf SURYKCJncGlvLTAtMzEiLCAyMywgInZzZCIsIDEsIEdQSU9fQUNUSVZFX0hJR0gpLAotCQkvKiBT bG90IGluZGV4IDEsIFZJTyBwb3dlciwgR1BJTyA5ICovCi0JCUdQSU9fTE9PS1VQX0lEWCgiZ3Bp by0wLTMxIiwgOSwgInZpbyIsIDEsIEdQSU9fQUNUSVZFX0hJR0gpLAotCQl7IH0KLQl9LAotfTsK LQotc3RhdGljIGludCBuOHgwX21tY19zZXRfcG93ZXJfbWVuZWxhdXMoc3RydWN0IGRldmljZSAq ZGV2LCBpbnQgc2xvdCwKLQkJCQkJaW50IHBvd2VyX29uLCBpbnQgdmRkKQotewotCWludCBtVjsK LQotI2lmZGVmIENPTkZJR19NTUNfREVCVUcKLQlkZXZfZGJnKGRldiwgIlNldCBzbG90ICVkIHBv d2VyOiAlcyAodmRkICVkKVxuIiwgc2xvdCArIDEsCi0JCXN0cl9vbl9vZmYocG93ZXJfb24pLCB2 ZGQpOwotI2VuZGlmCi0JaWYgKHNsb3QgPT0gMCkgewotCQlpZiAoIXBvd2VyX29uKQotCQkJcmV0 dXJuIG1lbmVsYXVzX3NldF92bW1jKDApOwotCQlzd2l0Y2ggKDEgPDwgdmRkKSB7Ci0JCWNhc2Ug TU1DX1ZERF8zM18zNDoKLQkJY2FzZSBNTUNfVkREXzMyXzMzOgotCQljYXNlIE1NQ19WRERfMzFf MzI6Ci0JCQltViA9IDMxMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBNTUNfVkREXzMwXzMxOgotCQkJ bVYgPSAzMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgTU1DX1ZERF8yOF8yOToKLQkJCW1WID0gMjgw MDsKLQkJCWJyZWFrOwotCQljYXNlIE1NQ19WRERfMTY1XzE5NToKLQkJCW1WID0gMTg1MDsKLQkJ CWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCX0KLQkJcmV0dXJuIG1lbmVsYXVzX3Nl dF92bW1jKG1WKTsKLQl9IGVsc2UgewotCQlpZiAoIXBvd2VyX29uKQotCQkJcmV0dXJuIG1lbmVs YXVzX3NldF92ZGNkYygzLCAwKTsKLQkJc3dpdGNoICgxIDw8IHZkZCkgewotCQljYXNlIE1NQ19W RERfMzNfMzQ6Ci0JCWNhc2UgTU1DX1ZERF8zMl8zMzoKLQkJCW1WID0gMzMwMDsKLQkJCWJyZWFr OwotCQljYXNlIE1NQ19WRERfMzBfMzE6Ci0JCWNhc2UgTU1DX1ZERF8yOV8zMDoKLQkJCW1WID0g MzAwMDsKLQkJCWJyZWFrOwotCQljYXNlIE1NQ19WRERfMjhfMjk6Ci0JCWNhc2UgTU1DX1ZERF8y N18yODoKLQkJCW1WID0gMjgwMDsKLQkJCWJyZWFrOwotCQljYXNlIE1NQ19WRERfMjRfMjU6Ci0J CWNhc2UgTU1DX1ZERF8yM18yNDoKLQkJCW1WID0gMjQwMDsKLQkJCWJyZWFrOwotCQljYXNlIE1N Q19WRERfMjJfMjM6Ci0JCWNhc2UgTU1DX1ZERF8yMV8yMjoKLQkJCW1WID0gMjIwMDsKLQkJCWJy ZWFrOwotCQljYXNlIE1NQ19WRERfMjBfMjE6Ci0JCQltViA9IDIwMDA7Ci0JCQlicmVhazsKLQkJ Y2FzZSBNTUNfVkREXzE2NV8xOTU6Ci0JCQltViA9IDE4MDA7Ci0JCQlicmVhazsKLQkJZGVmYXVs dDoKLQkJCUJVRygpOwotCQl9Ci0JCXJldHVybiBtZW5lbGF1c19zZXRfdmRjZGMoMywgbVYpOwot CX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBuOHgwX21tY19zZXRfcG93ZXIoc3RydWN0 IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLAotCQkJICAgICAgaW50IHZkZCkK LXsKLQlpZiAoYm9hcmRfaXNfbjgwMCgpIHx8IHNsb3QgPT0gMCkKLQkJcmV0dXJuIG44eDBfbW1j X3NldF9wb3dlcl9tZW5lbGF1cyhkZXYsIHNsb3QsIHBvd2VyX29uLCB2ZGQpOwotCi0JLyogVGhl IG44MTAgcG93ZXIgd2lsbCBiZSBoYW5kbGVkIGJ5IEdQSU8gY29kZSBpbiB0aGUgZHJpdmVyICov Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBuOHgwX21tY19zZXRfYnVzX21vZGUoc3Ry dWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IGJ1c19tb2RlKQotewotCWludCByOwotCi0J ZGV2X2RiZyhkZXYsICJTZXQgc2xvdCAlZCBidXMgbW9kZSAlc1xuIiwgc2xvdCArIDEsCi0JCWJ1 c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTiA/ICJvcGVuLWRyYWluIiA6ICJwdXNoLXB1 bGwiKTsKLQlCVUdfT04oc2xvdCAhPSAwICYmIHNsb3QgIT0gMSk7Ci0Jc2xvdCsrOwotCXN3aXRj aCAoYnVzX21vZGUpIHsKLQljYXNlIE1NQ19CVVNNT0RFX09QRU5EUkFJTjoKLQkJciA9IG1lbmVs YXVzX3NldF9tbWNfb3BlbmRyYWluKHNsb3QsIDEpOwotCQlicmVhazsKLQljYXNlIE1NQ19CVVNN T0RFX1BVU0hQVUxMOgotCQlyID0gbWVuZWxhdXNfc2V0X21tY19vcGVuZHJhaW4oc2xvdCwgMCk7 Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQlpZiAociAhPSAwICYmIHByaW50 a19yYXRlbGltaXQoKSkKLQkJZGV2X2VycihkZXYsICJNTUM6IHVuYWJsZSB0byBzZXQgYnVzIG1v ZGUgZm9yIHNsb3QgJWRcbiIsCi0JCQlzbG90KTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGlu dCBuOHgwX21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkK LXsKLQlzbG90Kys7Ci0JQlVHX09OKHNsb3QgIT0gMSAmJiBzbG90ICE9IDIpOwotCWlmIChzbG90 ID09IDEpCi0JCXJldHVybiBzbG90MV9jb3Zlcl9vcGVuOwotCWVsc2UKLQkJcmV0dXJuIHNsb3Qy X2NvdmVyX29wZW47Ci19Ci0KLXN0YXRpYyB2b2lkIG44eDBfbW1jX2NhbGxiYWNrKHZvaWQgKmRh dGEsIHU4IGNhcmRfbWFzaykKLXsKLSNpZmRlZiBDT05GSUdfTU1DX09NQVAKLQlpbnQgYml0LCAq b3BlbnAsIGluZGV4OwotCi0JaWYgKGJvYXJkX2lzX244MDAoKSkgewotCQliaXQgPSAxIDw8IDE7 Ci0JCW9wZW5wID0gJnNsb3QyX2NvdmVyX29wZW47Ci0JCWluZGV4ID0gMTsKLQl9IGVsc2Ugewot CQliaXQgPSAxOwotCQlvcGVucCA9ICZzbG90MV9jb3Zlcl9vcGVuOwotCQlpbmRleCA9IDA7Ci0J fQotCi0JaWYgKGNhcmRfbWFzayAmIGJpdCkKLQkJKm9wZW5wID0gMTsKLQllbHNlCi0JCSpvcGVu cCA9IDA7Ci0KLQlvbWFwX21tY19ub3RpZnlfY292ZXJfZXZlbnQobW1jX2RldmljZSwgaW5kZXgs ICpvcGVucCk7Ci0jZWxzZQotCXByX3dhcm4oIk1NQzogbm90aWZ5IGNvdmVyIGV2ZW50IG5vdCBh dmFpbGFibGVcbiIpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgbjh4MF9tbWNfbGF0ZV9pbml0 KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgciwgYml0LCAqb3BlbnA7Ci0JaW50IHZzMnNl bDsKLQotCW1tY19kZXZpY2UgPSBkZXY7Ci0KLQlyID0gbWVuZWxhdXNfc2V0X3Nsb3Rfc2VsKDEp OwotCWlmIChyIDwgMCkKLQkJcmV0dXJuIHI7Ci0KLQlpZiAoYm9hcmRfaXNfbjgwMCgpKQotCQl2 czJzZWwgPSAwOwotCWVsc2UKLQkJdnMyc2VsID0gMjsKLQotCXIgPSBtZW5lbGF1c19zZXRfbW1j X3Nsb3QoMiwgMCwgdnMyc2VsLCAxKTsKLQlpZiAociA8IDApCi0JCXJldHVybiByOwotCi0Jbjh4 MF9tbWNfc2V0X3Bvd2VyKGRldiwgMCwgTU1DX1BPV0VSX09OLCAxNik7IC8qIE1NQ19WRERfMjhf MjkgKi8KLQluOHgwX21tY19zZXRfcG93ZXIoZGV2LCAxLCBNTUNfUE9XRVJfT04sIDE2KTsKLQot CXIgPSBtZW5lbGF1c19zZXRfbW1jX3Nsb3QoMSwgMSwgMCwgMSk7Ci0JaWYgKHIgPCAwKQotCQly ZXR1cm4gcjsKLQlyID0gbWVuZWxhdXNfc2V0X21tY19zbG90KDIsIDEsIHZzMnNlbCwgMSk7Ci0J aWYgKHIgPCAwKQotCQlyZXR1cm4gcjsKLQotCXIgPSBtZW5lbGF1c19nZXRfc2xvdF9waW5fc3Rh dGVzKCk7Ci0JaWYgKHIgPCAwKQotCQlyZXR1cm4gcjsKLQotCWlmIChib2FyZF9pc19uODAwKCkp IHsKLQkJYml0ID0gMSA8PCAxOwotCQlvcGVucCA9ICZzbG90Ml9jb3Zlcl9vcGVuOwotCX0gZWxz ZSB7Ci0JCWJpdCA9IDE7Ci0JCW9wZW5wID0gJnNsb3QxX2NvdmVyX29wZW47Ci0JCXNsb3QyX2Nv dmVyX29wZW4gPSAwOwotCX0KLQotCS8qIEFsbCBzbG90IHBpbiBiaXRzIHNlZW0gdG8gYmUgaW52 ZXJzZWQgdW50aWwgZmlyc3Qgc3dpdGNoIGNoYW5nZSAqLwotCWlmIChyID09IDB4ZiB8fCByID09 ICgweGYgJiB+Yml0KSkKLQkJciA9IH5yOwotCi0JaWYgKHIgJiBiaXQpCi0JCSpvcGVucCA9IDE7 Ci0JZWxzZQotCQkqb3BlbnAgPSAwOwotCi0JciA9IG1lbmVsYXVzX3JlZ2lzdGVyX21tY19jYWxs YmFjayhuOHgwX21tY19jYWxsYmFjaywgTlVMTCk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGlj IHZvaWQgbjh4MF9tbWNfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCB2czJz ZWw7Ci0KLQlpZiAoYm9hcmRfaXNfbjgwMCgpKQotCQl2czJzZWwgPSAwOwotCWVsc2UKLQkJdnMy c2VsID0gMjsKLQotCW1lbmVsYXVzX3NldF9tbWNfc2xvdCgxLCAwLCAwLCAwKTsKLQltZW5lbGF1 c19zZXRfbW1jX3Nsb3QoMiwgMCwgdnMyc2VsLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgbjh4MF9t bWNfY2xlYW51cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JbWVuZWxhdXNfdW5yZWdpc3Rlcl9t bWNfY2FsbGJhY2soKTsKLX0KLQotLyoKLSAqIE1NQyBjb250cm9sbGVyMSBoYXMgdHdvIHNsb3Rz IHRoYXQgYXJlIG11bHRpcGxleGVkIHZpYSBJMkMuCi0gKiBNTUMgY29udHJvbGxlcjIgaXMgbm90 IGluIHVzZS4KLSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhIG1tYzFf ZGF0YSA9IHsKLQkubnJfc2xvdHMJCQk9IDAsCi0JLmluaXQJCQkJPSBuOHgwX21tY19sYXRlX2lu aXQsCi0JLmNsZWFudXAJCQk9IG44eDBfbW1jX2NsZWFudXAsCi0JLnNodXRkb3duCQkJPSBuOHgw X21tY19zaHV0ZG93biwKLQkubWF4X2ZyZXEJCQk9IDI0MDAwMDAwLAotCS5zbG90c1swXSA9IHsK LQkJLndpcmVzCQkJPSA0LAotCQkuc2V0X3Bvd2VyCQk9IG44eDBfbW1jX3NldF9wb3dlciwKLQkJ LnNldF9idXNfbW9kZQkJPSBuOHgwX21tY19zZXRfYnVzX21vZGUsCi0JCS5nZXRfY292ZXJfc3Rh dGUJPSBuOHgwX21tY19nZXRfY292ZXJfc3RhdGUsCi0JCS5vY3JfbWFzawkJPSBNTUNfVkREXzE2 NV8xOTUgfCBNTUNfVkREXzMwXzMxIHwKLQkJCQkJCU1NQ19WRERfMzJfMzMgICB8IE1NQ19WRERf MzNfMzQsCi0JCS5uYW1lCQkJPSAiaW50ZXJuYWwiLAotCX0sCi0JLnNsb3RzWzFdID0gewotCQku c2V0X3Bvd2VyCQk9IG44eDBfbW1jX3NldF9wb3dlciwKLQkJLnNldF9idXNfbW9kZQkJPSBuOHgw X21tY19zZXRfYnVzX21vZGUsCi0JCS5nZXRfY292ZXJfc3RhdGUJPSBuOHgwX21tY19nZXRfY292 ZXJfc3RhdGUsCi0JCS5vY3JfbWFzawkJPSBNTUNfVkREXzE2NV8xOTUgfCBNTUNfVkREXzIwXzIx IHwKLQkJCQkJCU1NQ19WRERfMjFfMjIgfCBNTUNfVkREXzIyXzIzIHwKLQkJCQkJCU1NQ19WRERf MjNfMjQgfCBNTUNfVkREXzI0XzI1IHwKLQkJCQkJCU1NQ19WRERfMjdfMjggfCBNTUNfVkREXzI4 XzI5IHwKLQkJCQkJCU1NQ19WRERfMjlfMzAgfCBNTUNfVkREXzMwXzMxIHwKLQkJCQkJCU1NQ19W RERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCQkubmFtZQkJCT0gImV4dGVybmFsIiwKLQl9LAot fTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWNfZGF0YVtPTUFQ MjRYWF9OUl9NTUNdOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbjh4MF9tbWNfaW5pdCh2b2lkKQot ewotCWlmIChib2FyZF9pc19uODEwKCkpIHsKLQkJbW1jMV9kYXRhLnNsb3RzWzBdLm5hbWUgPSAi ZXh0ZXJuYWwiOwotCi0JCS8qCi0JCSAqIFNvbWUgU2Ftc3VuZyBNb3ZpbmFuZCBjaGlwcyBkbyBu b3QgbGlrZSBvcGVuLWVuZGVkCi0JCSAqIG11bHRpLWJsb2NrIHJlYWRzIGFuZCBmYWxsIHRvIGJy YWluZC1kZWFkIHN0YXRlCi0JCSAqIHdoaWxlIGRvaW5nIHNvLiBSZWR1Y2luZyB0aGUgbnVtYmVy IG9mIGJsb2NrcyBpbgotCQkgKiB0aGUgdHJhbnNmZXIgb3IgZGVsYXlzIGluIGNsb2NrIGRpc2Fi bGUgZG8gbm90IGhlbHAKLQkJICovCi0JCW1tYzFfZGF0YS5zbG90c1sxXS5uYW1lID0gImludGVy bmFsIjsKLQkJbW1jMV9kYXRhLnNsb3RzWzFdLmJhbl9vcGVuZW5kZWQgPSAxOwotCQlncGlvZF9h ZGRfbG9va3VwX3RhYmxlKCZub2tpYTgxMF9tbWNfZ3Bpb190YWJsZSk7Ci0JfSBlbHNlIHsKLQkJ Z3Bpb2RfYWRkX2xvb2t1cF90YWJsZSgmbm9raWE4MDBfbW1jX2dwaW9fdGFibGUpOwotCX0KLQot CW1tYzFfZGF0YS5ucl9zbG90cyA9IDI7Ci0JbW1jX2RhdGFbMF0gPSAmbW1jMV9kYXRhOwotfQot I2Vsc2UKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBtbWMxX2RhdGE7Ci1z dGF0aWMgdm9pZCBfX2luaXQgbjh4MF9tbWNfaW5pdCh2b2lkKQotewotfQotI2VuZGlmCS8qIENP TkZJR19NTUNfT01BUCAqLwotCi0jaWZkZWYgQ09ORklHX01FTkVMQVVTCi0KLXN0YXRpYyBpbnQg bjh4MF9hdXRvX3NsZWVwX3JlZ3VsYXRvcnModm9pZCkKLXsKLQl1MzIgdmFsOwotCWludCByZXQ7 Ci0KLQl2YWwgPSBFTl9WUExMX1NMRUVQIHwgRU5fVk1NQ19TTEVFUCAgICBcCi0JCXwgRU5fVkFV WF9TTEVFUCB8IEVOX1ZJT19TTEVFUCBcCi0JCXwgRU5fVk1FTV9TTEVFUCB8IEVOX0RDM19TTEVF UCBcCi0JCXwgRU5fVkNfU0xFRVAgfCBFTl9EQzJfU0xFRVA7Ci0KLQlyZXQgPSBtZW5lbGF1c19z ZXRfcmVndWxhdG9yX3NsZWVwKDEsIHZhbCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJfZXJyKCJD b3VsZCBub3Qgc2V0IHJlZ3VsYXRvcnMgdG8gc2xlZXAgb24gbWVuZWxhdXM6ICV1XG4iLAotCQkg ICAgICAgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgbjh4MF9hdXRvX3ZvbHRhZ2Vfc2NhbGUodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0g bWVuZWxhdXNfc2V0X3Zjb3JlX2h3KDE0MDAsIDEwNTApOwotCWlmIChyZXQgPCAwKSB7Ci0JCXBy X2VycigiQ291bGQgbm90IHNldCBWQ09SRSB2b2x0YWdlIG9uIG1lbmVsYXVzOiAldVxuIiwgcmV0 KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbjh4MF9t ZW5lbGF1c19sYXRlX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQ7Ci0KLQly ZXQgPSBuOHgwX2F1dG9fdm9sdGFnZV9zY2FsZSgpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4g cmV0OwotCXJldCA9IG44eDBfYXV0b19zbGVlcF9yZWd1bGF0b3JzKCk7Ci0JaWYgKHJldCA8IDAp Ci0JCXJldHVybiByZXQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi1zdGF0aWMgaW50IG44eDBf bWVuZWxhdXNfbGF0ZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0K LSNlbmRpZgotCi1zdHJ1Y3QgbWVuZWxhdXNfcGxhdGZvcm1fZGF0YSBuOHgwX21lbmVsYXVzX3Bs YXRmb3JtX2RhdGEgPSB7Ci0JLmxhdGVfaW5pdCA9IG44eDBfbWVuZWxhdXNfbGF0ZV9pbml0LAot fTsKLQotc3RhdGljIHN0cnVjdCBncGlvZF9sb29rdXBfdGFibGUgbm9raWE4MTBfYXNvY19ncGlv X3RhYmxlID0gewotCS5kZXZfaWQgPSAic29jLWF1ZGlvIiwKLQkudGFibGUgPSB7Ci0JCUdQSU9f TE9PS1VQKCJncGlvLTAtMTUiLCAxMCwgImhlYWRzZXQiLCBHUElPX0FDVElWRV9ISUdIKSwKLQkJ R1BJT19MT09LVVAoImdwaW8tODAtMTExIiwgMjEsICJzcGVha2VyIiwgR1BJT19BQ1RJVkVfSElH SCksCi0JCXsgfQotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBuOHgwX2xhdGVfaW5pdGNh bGwodm9pZCkKLXsKLQlpZiAoIWJvYXJkX2NhcHMpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jbjh4 MF9tbWNfaW5pdCgpOwotCW44eDBfdXNiX2luaXQoKTsKLQlncGlvZF9hZGRfbG9va3VwX3RhYmxl KCZub2tpYTgxMF9hc29jX2dwaW9fdGFibGUpOwotCi0JcmV0dXJuIDA7Ci19Ci1vbWFwX2xhdGVf aW5pdGNhbGwobjh4MF9sYXRlX2luaXRjYWxsKTsKLQotLyoKLSAqIExlZ2FjeSBpbml0IHBkYXRh IGluaXQgZm9yIG44eDAuIE5vdGUgdGhhdCB3ZSB3YW50IHRvIGZvbGxvdyB0aGUKLSAqIEkyQyBi dXMgbnVtYmVyaW5nIHN0YXJ0aW5nIGF0IDAgZm9yIGRldmljZSB0cmVlIGxpa2Ugb3RoZXIgb21h cHMuCi0gKi8KLXZvaWQgKiBfX2luaXQgbjh4MF9sZWdhY3lfaW5pdCh2b2lkKQotewotCWJvYXJk X2NoZWNrX3JldmlzaW9uKCk7Ci0JcmV0dXJuICZtbWMxX2RhdGE7Ci19CmRpZmYgLS1naXQgYS9h cmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIv Y2xrdDJ4eHhfZHBsbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWRlYmYzMzU1 ZmEuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGwu YworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBPTUFQMi1zcGVjaWZpYyBEUExMIGNvbnRyb2wgZnVu Y3Rpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uCi0gKiBQ YXVsIFdhbG1zbGV5Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUg PGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgv aW8uaD4KLQotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiY20yeHh4LmgiCi0jaW5jbHVk ZSAiY20tcmVnYml0cy0yNHh4LmgiCi0KLS8qIFByaXZhdGUgZnVuY3Rpb25zICovCi0KLS8qKgot ICogX2FsbG93X2lkbGUgLSBlbmFibGUgRFBMTCBhdXRvaWRsZSBiaXRzCi0gKiBAY2xrOiBzdHJ1 Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gb3BlcmF0ZSBvbgotICoKLSAqIEVuYWJsZSBEUExMIGF1 dG9tYXRpYyBpZGxlIGNvbnRyb2wuICBUaGUgRFBMTCB3aWxsIGVudGVyIGxvdy1wb3dlcgotICog c3RvcCB3aGVuIGl0cyBkb3duc3RyZWFtIGNsb2NrcyBhcmUgZ2F0ZWQuICBObyByZXR1cm4gdmFs dWUuCi0gKiBSRVZJU0lUOiBEUExMIGNhbiBvcHRpb25hbGx5IGVudGVyIGxvdy1wb3dlciBieXBh c3MgYnkgd3JpdGluZyAweDEKLSAqIGluc3RlYWQuICBBZGQgc29tZSBtZWNoYW5pc20gdG8gb3B0 aW9uYWxseSBlbnRlciB0aGlzIG1vZGUuCi0gKi8KLXN0YXRpYyB2b2lkIF9hbGxvd19pZGxlKHN0 cnVjdCBjbGtfaHdfb21hcCAqY2xrKQotewotCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkK LQkJcmV0dXJuOwotCi0Jb21hcDJ4eHhfY21fc2V0X2RwbGxfYXV0b19sb3dfcG93ZXJfc3RvcCgp OwotfQotCi0vKioKLSAqIF9kZW55X2lkbGUgLSBwcmV2ZW50IERQTEwgZnJvbSBhdXRvbWF0aWNh bGx5IGlkbGluZwotICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIG9wZXJhdGUg b24KLSAqCi0gKiBEaXNhYmxlIERQTEwgYXV0b21hdGljIGlkbGUgY29udHJvbC4gIE5vIHJldHVy biB2YWx1ZS4KLSAqLwotc3RhdGljIHZvaWQgX2RlbnlfaWRsZShzdHJ1Y3QgY2xrX2h3X29tYXAg KmNsaykKLXsKLQlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCi0JCXJldHVybjsKLQotCW9t YXAyeHh4X2NtX3NldF9kcGxsX2Rpc2FibGVfYXV0b2lkbGUoKTsKLX0KLQotCi0vKiBQdWJsaWMg ZGF0YSAqLwotY29uc3Qgc3RydWN0IGNsa19od19vbWFwX29wcyBjbGtod29wc19vbWFwMnh4eF9k cGxsID0gewotCS5hbGxvd19pZGxlCT0gX2FsbG93X2lkbGUsCi0JLmRlbnlfaWRsZQk9IF9kZW55 X2lkbGUsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9kcGxs Y29yZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9kcGxsY29yZS5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2Y2ZDNjZDk1MjUuLjAwMDAwMDAwMDAwMAotLS0gYS9h cmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGxjb3JlLmMKKysrIC9kZXYvbnVsbApAQCAt MSwxOTQgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQot LyoKLSAqIERQTEwgKyBDT1JFX0NMSyBjb21wb3NpdGUgY2xvY2sgZnVuY3Rpb25zCi0gKgotICog Q29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHly aWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdHM6Ci0g KiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKiBQYXVsIFdhbG1zbGV5 Ci0gKgotICogQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBM aW5kZ3JlbiwKLSAqIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMuCi0gKgotICogWFhY IFRoZSBEUExMIGFuZCBDT1JFIGNsb2NrcyBzaG91bGQgYmUgc3BsaXQgaW50byB0d28gc2VwYXJh dGUgY2xvY2sKLSAqIHR5cGVzLgotICovCi0jdW5kZWYgREVCVUcKLQotI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xr Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrL3RpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQot I2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiY2xvY2syeHh4LmgiCi0jaW5jbHVkZSAib3Bw Mnh4eC5oIgotI2luY2x1ZGUgImNtMnh4eC5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5o IgotI2luY2x1ZGUgInNkcmMuaCIKLSNpbmNsdWRlICJzcmFtLmgiCi0KLS8qICNkZWZpbmUgRE9X Tl9WQVJJQUJMRV9EUExMIDEgKi8JCS8qIEV4cGVyaW1lbnRhbCAqLwotCi0vKgotICogZHBsbF9j b3JlX2NrOiBwb2ludGVyIHRvIHRoZSBjb21iaW5lZCBkcGxsX2NrICsgY29yZV9jayBvbiBPTUFQ Mnh4eAotICogKGN1cnJlbnRseSBkZWZpbmVkIGFzICJkcGxsX2NrIiBpbiB0aGUgT01BUDJ4eHgg Y2xvY2sgdHJlZSkuICBTZXQKLSAqIGR1cmluZyBkcGxsX2NrIGluaXQgYW5kIHVzZWQgbGF0ZXIg Ynkgb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoKS4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGtf aHdfb21hcCAqZHBsbF9jb3JlX2NrOwotCi0vKioKLSAqIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9y YXRlIC0gcmV0dXJuIHRoZSBDT1JFX0NMSyByYXRlCi0gKgotICogUmV0dXJucyB0aGUgQ09SRV9D TEsgcmF0ZS4gIENPUkVfQ0xLIGNhbiBoYXZlIG9uZSBvZiB0aHJlZSByYXRlCi0gKiBzb3VyY2Vz IG9uIE9NQVAyeHh4OiB0aGUgRFBMTCBDTEtPVVQgcmF0ZSwgRFBMTCBDTEtPVVRYMiwgb3IgMzJL SHoKLSAqICh0aGUgbGF0dGVyIGlzIHVudXN1YWwpLiAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIGJl IGNhbGxlZCB3aXRoCi0gKiBzdHJ1Y3QgY2xrICpkcGxsX2NrLCB3aGljaCBpcyBhIGNvbXBvc2l0 ZSBjbG9jayBvZiBkcGxsX2NrIGFuZAotICogY29yZV9jay4KLSAqLwotdW5zaWduZWQgbG9uZyBv bWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZSh2b2lkKQotewotCWxvbmcgbG9uZyBjb3JlX2NsazsK LQl1MzIgdjsKLQotCVdBUk5fT04oIWRwbGxfY29yZV9jayk7Ci0KLQljb3JlX2NsayA9IG9tYXAy X2dldF9kcGxsX3JhdGUoZHBsbF9jb3JlX2NrKTsKLQotCXYgPSBvbWFwMnh4eF9jbV9nZXRfY29y ZV9jbGtfc3JjKCk7Ci0KLQlpZiAodiA9PSBDT1JFX0NMS19TUkNfMzJLKQotCQljb3JlX2NsayA9 IDMyNzY4OwotCWVsc2UKLQkJY29yZV9jbGsgKj0gdjsKLQotCXJldHVybiBjb3JlX2NsazsKLX0K LQotLyoKLSAqIFVzZXMgdGhlIGN1cnJlbnQgcHJjbSBzZXQgdG8gdGVsbCBpZiBhIHJhdGUgaXMg dmFsaWQuCi0gKiBZb3UgY2FuIGdvIHNsb3dlciwgYnV0IG5vdCBmYXN0ZXIgd2l0aGluIGEgZ2l2 ZW4gcmF0ZSBzZXQuCi0gKi8KLXN0YXRpYyBsb25nIG9tYXAyX2RwbGxjb3JlX3JvdW5kX3JhdGUo dW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKLXsKLQl1MzIgaGlnaCwgbG93LCBjb3JlX2Nsa19z cmM7Ci0KLQljb3JlX2Nsa19zcmMgPSBvbWFwMnh4eF9jbV9nZXRfY29yZV9jbGtfc3JjKCk7Ci0K LQlpZiAoY29yZV9jbGtfc3JjID09IENPUkVfQ0xLX1NSQ19EUExMKSB7CS8qIERQTEwgY2xvY2tv dXQgKi8KLQkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgKiAyOwotCQlsb3cgPSBj dXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOwotCX0gZWxzZSB7CQkJCS8qIERQTEwgY2xvY2tvdXQg eCAyICovCi0JCWhpZ2ggPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOwotCQlsb3cgPSBjdXJy X3ByY21fc2V0LT5kcGxsX3NwZWVkIC8gMjsKLQl9Ci0KLSNpZmRlZiBET1dOX1ZBUklBQkxFX0RQ TEwKLQlpZiAodGFyZ2V0X3JhdGUgPiBoaWdoKQotCQlyZXR1cm4gaGlnaDsKLQllbHNlCi0JCXJl dHVybiB0YXJnZXRfcmF0ZTsKLSNlbHNlCi0JaWYgKHRhcmdldF9yYXRlID4gbG93KQotCQlyZXR1 cm4gaGlnaDsKLQllbHNlCi0JCXJldHVybiBsb3c7Ci0jZW5kaWYKLQotfQotCi11bnNpZ25lZCBs b25nIG9tYXAyX2RwbGxjb3JlX3JlY2FsYyhzdHJ1Y3QgY2xrX2h3ICpodywKLQkJCQkgICAgdW5z aWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKLXsKLQlyZXR1cm4gb21hcDJ4eHhfY2xrX2dldF9jb3Jl X3JhdGUoKTsKLX0KLQotaW50IG9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZShzdHJ1Y3QgY2xrX2h3 ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAotCQkJICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9y YXRlKQotewotCXN0cnVjdCBjbGtfaHdfb21hcCAqY2xrID0gdG9fY2xrX2h3X29tYXAoaHcpOwot CXUzMiBjdXJfcmF0ZSwgbG93LCBtdWx0LCBkaXYsIHZhbGlkX3JhdGUsIGRvbmVfcmF0ZTsKLQl1 MzIgYnlwYXNzID0gMDsKLQlzdHJ1Y3QgcHJjbV9jb25maWcgdG1wc2V0OwotCWNvbnN0IHN0cnVj dCBkcGxsX2RhdGEgKmRkOwotCi0JY3VyX3JhdGUgPSBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0 ZSgpOwotCW11bHQgPSBvbWFwMnh4eF9jbV9nZXRfY29yZV9jbGtfc3JjKCk7Ci0KLQlpZiAoKHJh dGUgPT0gKGN1cl9yYXRlIC8gMikpICYmIChtdWx0ID09IDIpKSB7Ci0JCW9tYXAyeHh4X3NkcmNf cmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMLCAxKTsKLQl9IGVsc2UgaWYgKChyYXRlID09IChj dXJfcmF0ZSAqIDIpKSAmJiAobXVsdCA9PSAxKSkgewotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3Jh bShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7Ci0JfSBlbHNlIGlmIChyYXRlICE9IGN1cl9yYXRl KSB7Ci0JCXZhbGlkX3JhdGUgPSBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHJhdGUpOwotCQlp ZiAodmFsaWRfcmF0ZSAhPSByYXRlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKG11bHQg PT0gMSkKLQkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7Ci0JCWVsc2UKLQkJCWxv dyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOwotCi0JCWRkID0gY2xrLT5kcGxsX2Rh dGE7Ci0JCWlmICghZGQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQl0bXBzZXQuY21fY2xrc2Vs MV9wbGwgPQotCQkJb21hcF9jbGtfbGxfb3BzLmNsa19yZWFkbCgmZGQtPm11bHRfZGl2MV9yZWcp OwotCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgJj0gfihkZC0+bXVsdF9tYXNrIHwKLQkJCQkJICAg ZGQtPmRpdjFfbWFzayk7Ci0JCWRpdiA9ICgoY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCAvIDEw MDAwMDApIC0gMSk7Ci0JCXRtcHNldC5jbV9jbGtzZWwyX3BsbCA9IG9tYXAyeHh4X2NtX2dldF9j b3JlX3BsbF9jb25maWcoKTsKLQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsICY9IH5PTUFQMjRYWF9D T1JFX0NMS19TUkNfTUFTSzsKLQkJaWYgKHJhdGUgPiBsb3cpIHsKLQkJCXRtcHNldC5jbV9jbGtz ZWwyX3BsbCB8PSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKLQkJCW11bHQgPSAoKHJhdGUgLyAyKSAv IDEwMDAwMDApOwotCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTExfWDI7Ci0JCX0gZWxz ZSB7Ci0JCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gQ09SRV9DTEtfU1JDX0RQTEw7Ci0JCQlt dWx0ID0gKHJhdGUgLyAxMDAwMDAwKTsKLQkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExM OwotCQl9Ci0JCXRtcHNldC5jbV9jbGtzZWwxX3BsbCB8PSAoZGl2IDw8IF9fZmZzKGRkLT5tdWx0 X21hc2spKTsKLQkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsIHw9IChtdWx0IDw8IF9fZmZzKGRkLT5k aXYxX21hc2spKTsKLQotCQkvKiBXb3JzdCBjYXNlICovCi0JCXRtcHNldC5iYXNlX3NkcmNfcmZy ID0gU0RSQ19SRlJfQ1RSTF9CWVBBU1M7Ci0KLQkJaWYgKHJhdGUgPT0gY3Vycl9wcmNtX3NldC0+ eHRhbF9zcGVlZCkJLyogSWYgYXNraW5nIGZvciAxLTEgKi8KLQkJCWJ5cGFzcyA9IDE7Ci0KLQkJ LyogRm9yIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLwotCQlvbWFwMnh4eF9zZHJjX3Jl cHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7Ci0KLQkJLyogRm9yY2UgZGxsIGxvY2sg bW9kZSAqLwotCQlvbWFwMl9zZXRfcHJjbSh0bXBzZXQuY21fY2xrc2VsMV9wbGwsIHRtcHNldC5i YXNlX3NkcmNfcmZyLAotCQkJICAgICAgIGJ5cGFzcyk7Ci0KLQkJLyogRXJyYXRhOiByZXQgZGxs IGVudHJ5IHN0YXRlICovCi0JCW9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMob21hcDJ4eHhfc2Ry Y19kbGxfaXNfdW5sb2NrZWQoKSk7Ci0JCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKGRvbmVfcmF0 ZSwgMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogb21hcDJ4eHhfY2xrdF9kcGxs Y29yZV9pbml0IC0gY2xrIGluaXQgZnVuY3Rpb24gZm9yIGRwbGxfY2sKLSAqIEBjbGs6IHN0cnVj dCBjbGsgKmRwbGxfY2sKLSAqCi0gKiBTdG9yZSBhIGxvY2FsIGNvcHkgb2YgQGNsayBpbiBkcGxs X2NvcmVfY2sgc28gb3RoZXIgY29kZSBjYW4gcXVlcnkKLSAqIHRoZSBjb3JlIHJhdGUgd2l0aG91 dCBoYXZpbmcgdG8gY2xrX2dldCgpLCB3aGljaCBjYW4gc2xlZXAuICBNdXN0Ci0gKiBvbmx5IGJl IGNhbGxlZCBvbmNlLiAgTm8gcmV0dXJuIHZhbHVlLiAgWFhYIElmIHRoZSBjbG9jawotICogcmVn aXN0cmF0aW9uIHByb2Nlc3MgaXMgZXZlciBjaGFuZ2VkIHN1Y2ggdGhhdCBkcGxsX2NrIGlzIG5v IGxvbmdlcgotICogc3RhdGljYWxseSBkZWZpbmVkLCB0aGlzIGNvZGUgbWF5IG5lZWQgdG8gY2hh bmdlIHRvIGluY3JlbWVudCBzb21lCi0gKiBraW5kIG9mIHVzZSBjb3VudCBvbiBkcGxsX2NrLgot ICovCi12b2lkIG9tYXAyeHh4X2Nsa3RfZHBsbGNvcmVfaW5pdChzdHJ1Y3QgY2xrX2h3ICpodykK LXsKLQlXQVJOKGRwbGxfY29yZV9jaywgImRwbGxfY29yZV9jayBhbHJlYWR5IHNldCAtIHNob3Vs ZCBuZXZlciBoYXBwZW4iKTsKLQlkcGxsX2NvcmVfY2sgPSB0b19jbGtfaHdfb21hcChodyk7Ci19 CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQu YyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjA0ZTQyMmI0NmMuLjAwMDAwMDAwMDAwMAotLS0gYS9h cmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3ZpcnRfcHJjbV9zZXQuYworKysgL2Rldi9udWxs CkBAIC0xLDI1OSArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5Ci0vKgotICogT01BUDJ4eHggRFZGUyB2aXJ0dWFsIGNsb2NrIGZ1bmN0aW9ucwotICoKLSAq IENvcHlyaWdodCAoQykgMjAwNS0yMDA4LCAyMDEyIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0g KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRh Y3RzOgotICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgotICogUGF1bCBX YWxtc2xleQotICoKLSAqIEJhc2VkIG9uIGVhcmxpZXIgd29yayBieSBUdXVra2EgVGlra2FuZW4s IFRvbnkgTGluZGdyZW4sCi0gKiBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jLgotICoK LSAqIFhYWCBTb21lIG9mIHRoaXMgY29kZSBzaG91bGQgYmUgcmVwbGFjZWFibGUgYnkgdGhlIHVw Y29taW5nIE9QUCBsYXllcgotICogY29kZS4gIEhvd2V2ZXIsIHNvbWUgbm90aW9uIG9mICJyYXRl IHNldCIgaXMgcHJvYmFibHkgc3RpbGwgbmVjZXNzYXJ5Ci0gKiBmb3IgT01BUDJ4eHggYXQgbGVh c3QuICBSYXRlIHNldHMgc2hvdWxkIGJlIGdlbmVyYWxpemVkIHNvIHRoZXkgY2FuIGJlCi0gKiB1 c2VkIGZvciBhbnkgT01BUCBjaGlwLCBub3QganVzdCBPTUFQMnh4eC4gIEluIHBhcnRpY3VsYXIs IFJpY2hhcmQgV29vZHJ1ZmYKLSAqIGhhcyBpbiB0aGUgcGFzdCBleHByZXNzZWQgYSBwcmVmZXJl bmNlIHRvIHVzZSByYXRlIHNldHMgZm9yIE9QUCBjaGFuZ2VzLAotICogcmF0aGVyIHRoYW4gZHlu YW1pY2FsbHkgcmVjYWxjdWxhdGluZyB0aGUgY2xvY2sgdHJlZSwgc28gaWYgc29tZW9uZSB3YW50 cwotICogdGhpcyBiYWRseSBlbm91Z2ggdG8gd3JpdGUgdGhlIGNvZGUgdG8gaGFuZGxlIGl0LCB3 ZSBzaG91bGQgc3VwcG9ydCBpdAotICogYXMgYW4gb3B0aW9uLgotICovCi0jdW5kZWYgREVCVUcK LQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0j aW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxs aW51eC9jcHVmcmVxLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAic29j LmgiCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjbG9jazJ4eHguaCIKLSNpbmNsdWRl ICJvcHAyeHh4LmgiCi0jaW5jbHVkZSAiY20yeHh4LmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy0y NHh4LmgiCi0jaW5jbHVkZSAic2RyYy5oIgotI2luY2x1ZGUgInNyYW0uaCIKLQotc3RhdGljIHUx NiBjcHVfbWFzazsKLQotY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpjdXJyX3ByY21fc2V0Owot Y29uc3Qgc3RydWN0IHByY21fY29uZmlnICpyYXRlX3RhYmxlOwotCi0vKgotICogc3lzX2NrX3Jh dGU6IHRoZSByYXRlIG9mIHRoZSBleHRlcm5hbCBoaWdoLWZyZXF1ZW5jeSBjbG9jawotICogb3Nj aWxsYXRvciBvbiB0aGUgYm9hcmQuICBTZXQgYnkgdGhlIFNvQy1zcGVjaWZpYyBjbG9jayBpbml0 IGNvZGUuCi0gKiBPbmNlIHNldCBkdXJpbmcgYSBib290LCB3aWxsIG5vdCBjaGFuZ2UuCi0gKi8K LXN0YXRpYyB1bnNpZ25lZCBsb25nIHN5c19ja19yYXRlOwotCi0vKioKLSAqIG9tYXAyX3RhYmxl X21wdV9yZWNhbGMgLSBqdXN0IHJldHVybiB0aGUgTVBVIHNwZWVkCi0gKiBAY2xrOiB2aXJ0X3By Y21fc2V0IHN0cnVjdCBjbGsKLSAqCi0gKiBTZXQgdmlydF9wcmNtX3NldCdzIHJhdGUgdG8gdGhl IG1wdV9zcGVlZCBmaWVsZCBvZiB0aGUgY3VycmVudCBQUkNNIHNldC4KLSAqLwotc3RhdGljIHVu c2lnbmVkIGxvbmcgb21hcDJfdGFibGVfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrX2h3ICpjbGssCi0J CQkJICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQotewotCXJldHVybiBjdXJyX3ByY21f c2V0LT5tcHVfc3BlZWQ7Ci19Ci0KLS8qCi0gKiBMb29rIGZvciBhIHJhdGUgZXF1YWwgb3IgbGVz cyB0aGFuIHRoZSB0YXJnZXQgcmF0ZSBnaXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0LgotICoKLSAq IFdoYXQncyBub3QgZW50aXJlbHkgY2xlYXIgaXMgIndoaWNoIiBmaWVsZCByZXByZXNlbnRzIHRo ZSBrZXkgZmllbGQuCi0gKiBTb21lIG1pZ2h0IGFyZ3VlIEwzLUREUiwgb3RoZXJzIEFSTSwgb3Ro ZXJzIElWQS4gVGhpcyBjb2RlIGlzIHNpbXBsZSBhbmQKLSAqIGp1c3QgdXNlcyB0aGUgQVJNIHJh dGVzLgotICovCi1zdGF0aWMgaW50IG9tYXAyX2RldGVybWluZV9yYXRlX3RvX3RhYmxlKHN0cnVj dCBjbGtfaHcgKmh3LAotCQkJCQkgc3RydWN0IGNsa19yYXRlX3JlcXVlc3QgKnJlcSkKLXsKLQlj b25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnB0cjsKLQlsb25nIGhpZ2hlc3RfcmF0ZTsKLQotCWhp Z2hlc3RfcmF0ZSA9IC1FSU5WQUw7Ci0KLQlmb3IgKHB0ciA9IHJhdGVfdGFibGU7IHB0ci0+bXB1 X3NwZWVkOyBwdHIrKykgewotCQlpZiAoIShwdHItPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29u dGludWU7Ci0JCWlmIChwdHItPnh0YWxfc3BlZWQgIT0gc3lzX2NrX3JhdGUpCi0JCQljb250aW51 ZTsKLQotCQloaWdoZXN0X3JhdGUgPSBwdHItPm1wdV9zcGVlZDsKLQotCQkvKiBDYW4gY2hlY2sg b25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLwotCQlpZiAocHRyLT5tcHVfc3BlZWQg PD0gcmVxLT5yYXRlKQotCQkJYnJlYWs7Ci0JfQotCXJlcS0+cmF0ZSA9IGhpZ2hlc3RfcmF0ZTsK LQotCXJldHVybiAwOwotfQotCi0vKiBTZXRzIGJhc2ljIGNsb2NrcyBiYXNlZCBvbiB0aGUgc3Bl Y2lmaWVkIHJhdGUgKi8KLXN0YXRpYyBpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0 IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKLQkJCQkgICB1bnNpZ25lZCBsb25nIHBh cmVudF9yYXRlKQotewotCXUzMiBjdXJfcmF0ZSwgZG9uZV9yYXRlLCBieXBhc3MgPSAwOwotCWNv bnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsKLQl1bnNpZ25lZCBsb25nIGZvdW5kX3NwZWVk ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZm9yIChwcmNtID0gcmF0ZV90YWJsZTsg cHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKLQkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFz aykpCi0JCQljb250aW51ZTsKLQotCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2tfcmF0 ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwcmNtLT5tcHVfc3BlZWQgPD0gcmF0ZSkgewotCQkJ Zm91bmRfc3BlZWQgPSBwcmNtLT5tcHVfc3BlZWQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlm ICghZm91bmRfc3BlZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IHNldCBNUFUg cmF0ZSB0byAlbHVNSHpcbiIsCi0JCSAgICAgICByYXRlIC8gMTAwMDAwMCk7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCWN1cnJfcHJjbV9zZXQgPSBwcmNtOwotCWN1cl9yYXRlID0gb21hcDJ4 eHhfY2xrX2dldF9jb3JlX3JhdGUoKTsKLQotCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9y YXRlIC8gMikgewotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTCwg MSk7Ci0JfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlICogMikgewotCQlv bWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7Ci0JfSBlbHNl IGlmIChwcmNtLT5kcGxsX3NwZWVkICE9IGN1cl9yYXRlKSB7Ci0JCWxvY2FsX2lycV9zYXZlKGZs YWdzKTsKLQotCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQotCQkJ YnlwYXNzID0gMTsKLQotCQlpZiAoKHByY20tPmNtX2Nsa3NlbDJfcGxsICYgT01BUDI0WFhfQ09S RV9DTEtfU1JDX01BU0spID09Ci0JCSAgICBDT1JFX0NMS19TUkNfRFBMTF9YMikKLQkJCWRvbmVf cmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMX1gyOwotCQllbHNlCi0JCQlkb25lX3JhdGUgPSBDT1JF X0NMS19TUkNfRFBMTDsKLQotCQlvbWFwMnh4eF9jbV9zZXRfbW9kX2RpdmlkZXJzKHByY20tPmNt X2Nsa3NlbF9tcHUsCi0JCQkJCSAgICAgcHJjbS0+Y21fY2xrc2VsX2RzcCwKLQkJCQkJICAgICBw cmNtLT5jbV9jbGtzZWxfZ2Z4LAotCQkJCQkgICAgIHByY20tPmNtX2Nsa3NlbDFfY29yZSwKLQkJ CQkJICAgICBwcmNtLT5jbV9jbGtzZWxfbWRtKTsKLQotCQkvKiB4MiB0byBlbnRlciBvbWFwMnh4 eF9zZHJjX2luaXRfcGFyYW1zKCkgKi8KLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9D TEtfU1JDX0RQTExfWDIsIDEpOwotCi0JCW9tYXAyX3NldF9wcmNtKHByY20tPmNtX2Nsa3NlbDFf cGxsLCBwcmNtLT5iYXNlX3NkcmNfcmZyLAotCQkJICAgICAgIGJ5cGFzcyk7Ci0KLQkJb21hcDJ4 eHhfc2RyY19pbml0X3BhcmFtcyhvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCgpKTsKLQkJ b21hcDJ4eHhfc2RyY19yZXByb2dyYW0oZG9uZV9yYXRlLCAwKTsKLQotCQlsb2NhbF9pcnFfcmVz dG9yZShmbGFncyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogb21hcDJ4eHhfY2xr dF92cHNfY2hlY2tfYm9vdGxvYWRlcl9yYXRlcyAtIGRldGVybWluZSB3aGljaCBvZiB0aGUgcmF0 ZQotICogdGFibGUgc2V0cyBtYXRjaGVzIHRoZSBjdXJyZW50IENPUkUgRFBMTCBoYXJkd2FyZSBy YXRlCi0gKgotICogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyLiAgU2V0cyB0 aGUgJ2N1cnJfcHJjbV9zZXQnCi0gKiBnbG9iYWwgdG8gcG9pbnQgdG8gdGhlIGFjdGl2ZSByYXRl IHNldCB3aGVuIGZvdW5kOyBvdGhlcndpc2UsIHNldHMKLSAqIGl0IHRvIE5VTEwuICBObyByZXR1 cm4gdmFsdWU7Ci0gKi8KLXN0YXRpYyB2b2lkIG9tYXAyeHh4X2Nsa3RfdnBzX2NoZWNrX2Jvb3Rs b2FkZXJfcmF0ZXModm9pZCkKLXsKLQljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY20gPSBO VUxMOwotCXVuc2lnbmVkIGxvbmcgcmF0ZTsKLQotCXJhdGUgPSBvbWFwMnh4eF9jbGtfZ2V0X2Nv cmVfcmF0ZSgpOwotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJj bSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7Ci0J CWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19ja19yYXRlKQotCQkJY29udGludWU7Ci0JCWlm IChwcmNtLT5kcGxsX3NwZWVkIDw9IHJhdGUpCi0JCQlicmVhazsKLQl9Ci0JY3Vycl9wcmNtX3Nl dCA9IHByY207Ci19Ci0KLS8qKgotICogb21hcDJ4eHhfY2xrdF92cHNfbGF0ZV9pbml0IC0gc3Rv cmUgYSBjb3B5IG9mIHRoZSBzeXNfY2sgcmF0ZQotICoKLSAqIFN0b3JlIGEgY29weSBvZiB0aGUg c3lzX2NrIHJhdGUgZm9yIGxhdGVyIHVzZSBieSB0aGUgT01BUDJ4eHggRFZGUwotICogY29kZS4g IChUaGUgc3lzX2NrIHJhdGUgZG9lcyBub3QgLS0gb3IgcmF0aGVyLCBtdXN0IG5vdCAtLSBjaGFu Z2UKLSAqIGR1cmluZyBrZXJuZWwgcnVudGltZS4pICBNdXN0IGJlIGNhbGxlZCBhZnRlciB3ZSBo YXZlIGEgdmFsaWQKLSAqIHN5c19jayByYXRlLCBidXQgYmVmb3JlIHRoZSB2aXJ0X3ByY21fc2V0 IGNsb2NrIHJhdGUgaXMKLSAqIHJlY2FsY3VsYXRlZC4gIE5vIHJldHVybiB2YWx1ZS4KLSAqLwot c3RhdGljIHZvaWQgb21hcDJ4eHhfY2xrdF92cHNfbGF0ZV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0 IGNsayAqYzsKLQotCWMgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKLQlpZiAoSVNfRVJSKGMp KSB7Ci0JCVdBUk4oMSwgImNvdWxkIG5vdCBsb2NhdGUgc3lzX2NrXG4iKTsKLQl9IGVsc2Ugewot CQlzeXNfY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShjKTsKLQkJY2xrX3B1dChjKTsKLQl9Ci19Ci0K LSNpZmRlZiBDT05GSUdfT0YKLSNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KLSNpbmNs dWRlIDxsaW51eC9jbGtkZXYuaD4KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHZpcnRf cHJjbV9zZXRfb3BzID0gewotCS5yZWNhbGNfcmF0ZQk9ICZvbWFwMl90YWJsZV9tcHVfcmVjYWxj LAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSwKLQkuZGV0ZXJtaW5lX3Jh dGUgPSAmb21hcDJfZGV0ZXJtaW5lX3JhdGVfdG9fdGFibGUsCi19OwotCi0vKioKLSAqIG9tYXAy eHh4X2Nsa3RfdnBzX2luaXQgLSBpbml0aWFsaXplIHZpcnRfcHJjbV9zZXQgY2xvY2sKLSAqCi0g KiBEb2VzIGEgbWFudWFsIGluaXQgZm9yIHRoZSB2aXJ0dWFsIHByY20gRFZGUyBjbG9jayBmb3Ig T01BUDIuIFRoaXMKLSAqIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGZyb20gb21hcDIgRFQgY2xv Y2sgaW5pdCwgYXMgdGhlIHZpcnR1YWwKLSAqIG5vZGUgaXMgbm90IG1vZGVsbGVkIGluIHRoZSBE VCBjbG9jayBkYXRhLgotICovCi12b2lkIG9tYXAyeHh4X2Nsa3RfdnBzX2luaXQodm9pZCkKLXsK LQlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0ID0geyBOVUxMIH07Ci0Jc3RydWN0IGNsa19od19v bWFwICpodyA9IE5VTEw7Ci0Jc3RydWN0IGNsayAqY2xrOwotCWNvbnN0IGNoYXIgKnBhcmVudF9u YW1lID0gIm1wdV9jayI7Ci0KLQlvbWFwMnh4eF9jbGt0X3Zwc19sYXRlX2luaXQoKTsKLQlvbWFw Mnh4eF9jbGt0X3Zwc19jaGVja19ib290bG9hZGVyX3JhdGVzKCk7Ci0KLQlodyA9IGt6YWxsb2Nf b2JqKCpodyk7Ci0JaWYgKCFodykKLQkJcmV0dXJuOwotCWluaXQubmFtZSA9ICJ2aXJ0X3ByY21f c2V0IjsKLQlpbml0Lm9wcyA9ICZ2aXJ0X3ByY21fc2V0X29wczsKLQlpbml0LnBhcmVudF9uYW1l cyA9ICZwYXJlbnRfbmFtZTsKLQlpbml0Lm51bV9wYXJlbnRzID0gMTsKLQotCWh3LT5ody5pbml0 ID0gJmluaXQ7Ci0KLQljbGsgPSBjbGtfcmVnaXN0ZXIoTlVMTCwgJmh3LT5odyk7Ci0JaWYgKElT X0VSUihjbGspKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2Nr XG4iKTsKLQkJa2ZyZWUoaHcpOwotCQlyZXR1cm47Ci0JfQotCi0JY2xrZGV2X2NyZWF0ZShjbGss ICJjcHVmcmVxX2NrIiwgTlVMTCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21h Y2gtb21hcDIvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwppbmRleCA4M2Zh ZTUxNzIyYTkuLmI3M2E4MDUwM2RhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9j bG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpAQCAtMzAsOSArMzAsNyBA QAogI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRl ICJjbS5oIgotI2luY2x1ZGUgImNtMnh4eC5oIgogI2luY2x1ZGUgImNtM3h4eC5oIgotI2luY2x1 ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogI2lu Y2x1ZGUgImNvbW1vbi5oIgogCkBAIC05NCwxMSArOTIsNyBAQCB2b2lkIF9faW5pdCB0aV9jbGtf aW5pdF9mZWF0dXJlcyh2b2lkKQogCX0KIAogCS8qIEJ5cGFzcyB2YWx1ZSBzZXR1cCBmb3IgRFBM THMgKi8KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJZmVhdHVyZXMuZHBsbF9ieXBhc3Nf dmFscyB8PQotCQkJKDEgPDwgT01BUDJYWFhfRU5fRFBMTF9MUEJZUEFTUykgfAotCQkJKDEgPDwg T01BUDJYWFhfRU5fRFBMTF9GUkJZUEFTUyk7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgo KSkgeworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQlmZWF0dXJlcy5kcGxsX2J5cGFzc192 YWxzIHw9CiAJCQkoMSA8PCBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTKSB8CiAJCQkoMSA8PCBP TUFQM1hYWF9FTl9EUExMX0ZSQllQQVNTKTsKQEAgLTEyMiw5ICsxMTYsNyBAQCB2b2lkIF9faW5p dCB0aV9jbGtfaW5pdF9mZWF0dXJlcyh2b2lkKQogCSAqIDM0eHggcmV2ZXJzZXMgdGhpcywganVz dCB0byBrZWVwIHVzIG9uIG91ciB0b2VzCiAJICogQU0zNXh4IHVzZXMgYm90aCwgZGVwZW5kaW5n IG9uIHRoZSBtb2R1bGUuCiAJICovCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQlmZWF0dXJl cy5jbV9pZGxlc3RfdmFsID0gT01BUDI0WFhfQ01fSURMRVNUX1ZBTDsKLQllbHNlIGlmIChjcHVf aXNfb21hcDM0eHgoKSkKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCWZlYXR1cmVzLmNtX2lk bGVzdF92YWwgPSBPTUFQMzRYWF9DTV9JRExFU1RfVkFMOwogCiAJLyogT24gT01BUDM0MzAgRVMx LjAsIERQTEw0IGNhbid0IGJlIHJlLXByb2dyYW1tZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJt L21hY2gtb21hcDIvY2xvY2syeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5o CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2MwMTFkYWRmZDIuLjAwMDAwMDAwMDAw MAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5oCisrKyAvZGV2L251bGwKQEAg LTEsMTcgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLS8q Ci0gKiBPTUFQMiBjbG9jayBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBtYWNyb3MKLSAqCi0gKiBD b3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJp Z2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KLSAqLwotCi0jaWZuZGVmIF9fQVJD SF9BUk1fTUFDSF9PTUFQMl9DTE9DSzJYWFhfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01B UDJfQ0xPQ0syWFhYX0gKLQotI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgotI2luY2x1 ZGUgImNsb2NrLmgiCi0KLXVuc2lnbmVkIGxvbmcgb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUo dm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2Rv bWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCmluZGV4IDY5ZGM1Yjgz OTMzNS4uNGI1YWUxZjQwZDUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2Nr ZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0xMjEz LDcgKzEyMTMsNyBAQCBpbnQgY2xrZG1fY2xrX2Rpc2FibGUoc3RydWN0IGNsb2NrZG9tYWluICpj bGtkbSwgc3RydWN0IGNsayAqY2xrKQogaW50IGNsa2RtX2h3bW9kX2VuYWJsZShzdHJ1Y3QgY2xv Y2tkb21haW4gKmNsa2RtLCBzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7CiAJLyogVGhlIGNsa2Rt IGF0dHJpYnV0ZSBkb2VzIG5vdCBleGlzdCB5ZXQgcHJpb3IgT01BUDQgKi8KLQlpZiAoY3B1X2lz X29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpCisJaWYgKGNwdV9pc19vbWFwMzR4eCgp KQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC0xMjQ0LDcgKzEyNDQsNyBAQCBpbnQgY2xrZG1faHdt b2RfZW5hYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0cnVjdCBvbWFwX2h3bW9kICpv aCkKIGludCBjbGtkbV9od21vZF9kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0 cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKIAkvKiBUaGUgY2xrZG0gYXR0cmlidXRlIGRvZXMgbm90 IGV4aXN0IHlldCBwcmlvciBPTUFQNCAqLwotCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVf aXNfb21hcDM0eHgoKSkKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCXJldHVybiAwOwogCiAJ aWYgKCFvaCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaCBi L2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaAppbmRleCA4NmEyZjllNWQwZWYuLjJk NDIyYjVmMTIxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5o CisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uaApAQCAtMjE2LDggKzIxNiw2 IEBAIGludCBjbGtkbV9od21vZF9kaXNhYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHN0 cnVjdCBvbWFwX2h3bW9kICpvaCk7CiB2b2lkIGNsa2RtX3NhdmVfY29udGV4dCh2b2lkKTsKIHZv aWQgY2xrZG1fcmVzdG9yZV9jb250ZXh0KHZvaWQpOwogCi1leHRlcm4gdm9pZCBfX2luaXQgb21h cDI0MnhfY2xvY2tkb21haW5zX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgb21hcDI0 M3hfY2xvY2tkb21haW5zX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgb21hcDN4eHhf Y2xvY2tkb21haW5zX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgYW0zM3h4X2Nsb2Nr ZG9tYWluc19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHRpODE0eF9jbG9ja2RvbWFp bnNfaW5pdCh2b2lkKTsKQEAgLTIzMCwxNCArMjI4LDExIEBAIHZvaWQgYW00M3h4X2Nsb2NrZG9t YWluc19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xrZG1fYWRkX2F1dG9kZXBzKHN0cnVjdCBj bG9ja2RvbWFpbiAqY2xrZG0pOwogZXh0ZXJuIHZvaWQgY2xrZG1fZGVsX2F1dG9kZXBzKHN0cnVj dCBjbG9ja2RvbWFpbiAqY2xrZG0pOwogCi1leHRlcm4gc3RydWN0IGNsa2RtX29wcyBvbWFwMl9j bGtkbV9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCBjbGtkbV9vcHMgb21hcDNfY2xrZG1fb3Bl cmF0aW9uczsKIGV4dGVybiBzdHJ1Y3QgY2xrZG1fb3BzIG9tYXA0X2Nsa2RtX29wZXJhdGlvbnM7 CiBleHRlcm4gc3RydWN0IGNsa2RtX29wcyBhbTMzeHhfY2xrZG1fb3BlcmF0aW9uczsKIGV4dGVy biBzdHJ1Y3QgY2xrZG1fb3BzIGFtNDN4eF9jbGtkbV9vcGVyYXRpb25zOwogCi1leHRlcm4gc3Ry dWN0IGNsa2RtX2RlcCBnZnhfMjR4eF93a2RlcHNbXTsKLWV4dGVybiBzdHJ1Y3QgY2xrZG1fZGVw IGRzcF8yNHh4X3drZGVwc1tdOwogZXh0ZXJuIHN0cnVjdCBjbG9ja2RvbWFpbiB3a3VwX2NvbW1v bl9jbGtkbTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2Nr ZG9tYWluczI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMyNDIw X2RhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0ZmZiNWQyZmZjLi4wMDAw MDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMyNDIwX2RhdGEu YworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMAotLyoKLSAqIE9NQVAyNDIwIGNsb2NrZG9tYWlucwotICoKLSAqIENvcHly aWdodCAoQykgMjAwOC0yMDExIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQg KEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFBhdWwgV2FsbXNsZXksIEpv dW5pIEjDtmdhbmRlcgotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBjbG9ja2RvbWFpbnMgYW5k IGNsb2NrZG9tYWluIHdha2V1cCBkZXBlbmRlbmNpZXMKLSAqIGZvciBPTUFQMjQyMCBjaGlwcy4g IFNvbWUgbm90ZXM6Ci0gKgotICogQSB1c2VmdWwgdmFsaWRhdGlvbiBydWxlIGZvciBzdHJ1Y3Qg Y2xvY2tkb21haW46IEFueSBjbG9ja2RvbWFpbgotICogcmVmZXJlbmNlZCBieSBhIHdrZGVwX3Ny Y3MgbXVzdCBoYXZlIGEgZGVwX2JpdCBhc3NpZ25lZC4gIFNvCi0gKiB3a2RlcF9zcmNzIGFyZSBy ZWFsbHkganVzdCBzb2Z0d2FyZS1jb250cm9sbGFibGUgZGVwZW5kZW5jaWVzLgotICogTm9uLXNv ZnR3YXJlLWNvbnRyb2xsYWJsZSBkZXBlbmRlbmNpZXMgZG8gZXhpc3QsIGJ1dCB0aGV5IGFyZSBu b3QKLSAqIGVuY29kZWQgYmVsb3cgKHlldCkuCi0gKgotICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0 IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRlbmNpZXMgKFNMRUVQREVQKQotICoKLSAqIFRoZSBv dmVybHktc3BlY2lmaWMgZGVwX2JpdCBuYW1lcyBhcmUgZHVlIHRvIGEgYml0IG5hbWUgY29sbGlz aW9uCi0gKiB3aXRoIENNX0ZDTEtFTl97RFNQLElWQTJ9LiAgVGhlIERTUC9JVkEyIFBNX1dLREVQ IGFuZCBDTV9TTEVFUERFUCBzaGlmdAotICogdmFsdWUgYXJlIHRoZSBzYW1lIGZvciBhbGwgcG93 ZXJkb21haW5zOiAyCi0gKgotICogWFhYIHNob3VsZCBkZXBfYml0IGJlIGEgbWFzaywgc28gd2Ug Y2FuIHRlc3QgdG8gc2VlIGlmIGl0IGlzIDAgYXMgYQotICogc2FuaXR5IGNoZWNrPwotICogWFhY IGVuY29kZSBoYXJkd2FyZSBmaXhlZCB3YWtldXAgZGVwZW5kZW5jaWVzIC0tIGVzcC4gZm9yIDM0 MzAgQ09SRQotICovCi0KLS8qCi0gKiBUby1EbyBMaXN0Ci0gKiAtPiBQb3J0IHRoZSBTbGVlcC9X YWtldXAgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9tYWlucwotICogICAgZnJvbSB0aGUgUG93ZXIg ZG9tYWluIGZyYW1ld29yawotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNs dWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiY2xvY2tkb21h aW4uaCIKLSNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKLSNpbmNsdWRlICJjbTJ4eHhfM3h4eC5o IgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgotI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0 eHguaCIKLQotLyoKLSAqIENsb2NrZG9tYWluIGRlcGVuZGVuY2llcyBmb3Igd2tkZXBzCi0gKgot ICogWFhYIEhhcmR3YXJlIGRlcGVuZGVuY2llcyAoZS5nLiwgZGVwZW5kZW5jaWVzIHRoYXQgY2Fu bm90IGJlCi0gKiBjaGFuZ2VkIGluIHNvZnR3YXJlKSBhcmUgbm90IGluY2x1ZGVkIGhlcmUgeWV0 LCBidXQgc2hvdWxkIGJlLgotICovCi0KLS8qIFdha2V1cCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJh eXMgKi8KLQotLyogMjQyMC1zcGVjaWZpYyBwb3NzaWJsZSB3YWtldXAgZGVwZW5kZW5jaWVzICov Ci0KLS8qIDI0MjAgUE1fV0tERVBfTVBVOiBDT1JFLCBEU1AsIFdLVVAgKi8KLXN0YXRpYyBzdHJ1 Y3QgY2xrZG1fZGVwIG1wdV8yNDIwX3drZGVwc1tdID0gewotCXsgLmNsa2RtX25hbWUgPSAiY29y ZV9sM19jbGtkbSIgfSwKLQl7IC5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iIH0sCi0JeyAu Y2xrZG1fbmFtZSA9ICJkc3BfY2xrZG0iIH0sCi0JeyAuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2Rt IiB9LAotCXsgTlVMTCB9LAotfTsKLQotLyogMjQyMCBQTV9XS0RFUF9DT1JFOiBEU1AsIEdGWCwg TVBVLCBXS1VQICovCi1zdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBjb3JlXzI0MjBfd2tkZXBzW10g PSB7Ci0JeyAuY2xrZG1fbmFtZSA9ICJkc3BfY2xrZG0iIH0sCi0JeyAuY2xrZG1fbmFtZSA9ICJn ZnhfY2xrZG0iIH0sCi0JeyAuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iIH0sCi0JeyAuY2xrZG1f bmFtZSA9ICJ3a3VwX2Nsa2RtIiB9LAotCXsgTlVMTCB9LAotfTsKLQotLyoKLSAqIDI0MjAtb25s eSBjbG9ja2RvbWFpbnMKLSAqLwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8yNDIw X2Nsa2RtID0gewotCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0g Im1wdV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAotCS53a2RlcF9zcmNz CT0gbXB1XzI0MjBfd2tkZXBzLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFU RV9NUFVfTUFTSywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gaXZhMV8yNDIwX2Ns a2RtID0gewotCS5uYW1lCQk9ICJpdmExX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJk c3BfcHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkuZGVwX2Jp dAk9IE9NQVAyNFhYX1BNX1dLREVQX01QVV9FTl9EU1BfU0hJRlQsCi0JLndrZGVwX3NyY3MJPSBk c3BfMjR4eF93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0MjBfQVVUT1NUQVRFX0lW QV9NQVNLLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3BfMjQyMF9jbGtkbSA9 IHsKLQkubmFtZQkJPSAiZHNwX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJkc3BfcHdy ZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkuY2xrdHJjdHJsX21h c2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX01BU0ssCi19OwotCi1zdGF0aWMgc3RydWN0IGNs b2NrZG9tYWluIGdmeF8yNDIwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAotCS5w d3JkbQkJPSB7IC5uYW1lID0gImdmeF9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hX U1VQX1NXU1VQLAotCS53a2RlcF9zcmNzCT0gZ2Z4XzI0eHhfd2tkZXBzLAotCS5jbGt0cmN0cmxf bWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9HRlhfTUFTSywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qg Y2xvY2tkb21haW4gY29yZV9sM18yNDIwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJjb3JlX2wzX2Ns a2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBD TEtETV9DQU5fSFdTVVAsCi0JLndrZGVwX3NyY3MJPSBjb3JlXzI0MjBfd2tkZXBzLAotCS5jbGt0 cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MM19NQVNLLAotfTsKLQotc3RhdGljIHN0 cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2w0XzI0MjBfY2xrZG0gPSB7Ci0JLm5hbWUJCT0gImNvcmVf bDRfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCi0JLmZsYWdz CQk9IENMS0RNX0NBTl9IV1NVUCwKLQkud2tkZXBfc3Jjcwk9IGNvcmVfMjQyMF93a2RlcHMsCi0J LmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0ssCi19OwotCi1zdGF0 aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzc18yNDIwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJkc3Nf Y2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCi0JLmZsYWdzCQk9 IENMS0RNX0NBTl9IV1NVUCwKLQkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVf RFNTX01BU0ssCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpjbG9ja2RvbWFpbnNf b21hcDI0MnhbXSBfX2luaXRkYXRhID0gewotCSZ3a3VwX2NvbW1vbl9jbGtkbSwKLQkmbXB1XzI0 MjBfY2xrZG0sCi0JJml2YTFfMjQyMF9jbGtkbSwKLQkmZHNwXzI0MjBfY2xrZG0sCi0JJmdmeF8y NDIwX2Nsa2RtLAotCSZjb3JlX2wzXzI0MjBfY2xrZG0sCi0JJmNvcmVfbDRfMjQyMF9jbGtkbSwK LQkmZHNzXzI0MjBfY2xrZG0sCi0JTlVMTCwKLX07Ci0KLXZvaWQgX19pbml0IG9tYXAyNDJ4X2Ns b2NrZG9tYWluc19pbml0KHZvaWQpCi17Ci0JaWYgKCFjcHVfaXNfb21hcDI0MngoKSkKLQkJcmV0 dXJuOwotCi0JY2xrZG1fcmVnaXN0ZXJfcGxhdGZvcm1fZnVuY3MoJm9tYXAyX2Nsa2RtX29wZXJh dGlvbnMpOwotCWNsa2RtX3JlZ2lzdGVyX2Nsa2RtcyhjbG9ja2RvbWFpbnNfb21hcDI0MngpOwot CWNsa2RtX2NvbXBsZXRlX2luaXQoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21h cDIvY2xvY2tkb21haW5zMjQzMF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9t YWluczI0MzBfZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTk3ZTE3OGFi YWEuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczI0 MzBfZGF0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICogT01BUDJ4eHggY2xvY2tkb21haW5zCi0gKgot ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENv cHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogUGF1bCBXYWxt c2xleSwgSm91bmkgSMO2Z2FuZGVyCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGNsb2NrZG9t YWlucyBhbmQgY2xvY2tkb21haW4gd2FrZXVwIGRlcGVuZGVuY2llcwotICogZm9yIE9NQVAyeHh4 IGNoaXBzLiAgU29tZSBub3RlczoKLSAqCi0gKiBBIHVzZWZ1bCB2YWxpZGF0aW9uIHJ1bGUgZm9y IHN0cnVjdCBjbG9ja2RvbWFpbjogQW55IGNsb2NrZG9tYWluCi0gKiByZWZlcmVuY2VkIGJ5IGEg d2tkZXBfc3JjcyBtdXN0IGhhdmUgYSBkZXBfYml0IGFzc2lnbmVkLiAgU28KLSAqIHdrZGVwX3Ny Y3MgYXJlIHJlYWxseSBqdXN0IHNvZnR3YXJlLWNvbnRyb2xsYWJsZSBkZXBlbmRlbmNpZXMuCi0g KiBOb24tc29mdHdhcmUtY29udHJvbGxhYmxlIGRlcGVuZGVuY2llcyBkbyBleGlzdCwgYnV0IHRo ZXkgYXJlIG5vdAotICogZW5jb2RlZCBiZWxvdyAoeWV0KS4KLSAqCi0gKiAyNHh4IGRvZXMgbm90 IHN1cHBvcnQgcHJvZ3JhbW1hYmxlIHNsZWVwIGRlcGVuZGVuY2llcyAoU0xFRVBERVApCi0gKgot ICogVGhlIG92ZXJseS1zcGVjaWZpYyBkZXBfYml0IG5hbWVzIGFyZSBkdWUgdG8gYSBiaXQgbmFt ZSBjb2xsaXNpb24KLSAqIHdpdGggQ01fRkNMS0VOX3tEU1AsSVZBMn0uICBUaGUgRFNQL0lWQTIg UE1fV0tERVAgYW5kIENNX1NMRUVQREVQIHNoaWZ0Ci0gKiB2YWx1ZSBhcmUgdGhlIHNhbWUgZm9y IGFsbCBwb3dlcmRvbWFpbnM6IDIKLSAqCi0gKiBYWFggc2hvdWxkIGRlcF9iaXQgYmUgYSBtYXNr LCBzbyB3ZSBjYW4gdGVzdCB0byBzZWUgaWYgaXQgaXMgMCBhcyBhCi0gKiBzYW5pdHkgY2hlY2s/ Ci0gKiBYWFggZW5jb2RlIGhhcmR3YXJlIGZpeGVkIHdha2V1cCBkZXBlbmRlbmNpZXMgLS0gZXNw LiBmb3IgMzQzMCBDT1JFCi0gKi8KLQotLyoKLSAqIFRvLURvIExpc3QKLSAqIC0+IFBvcnQgdGhl IFNsZWVwL1dha2V1cCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBkb21haW5zCi0gKiAgICBmcm9tIHRo ZSBQb3dlciBkb21haW4gZnJhbWV3b3JrCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJzb2MuaCIKLSNpbmNsdWRlICJj bG9ja2RvbWFpbi5oIgotI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgotI2luY2x1ZGUgImNtMnh4 eF8zeHh4LmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAicHJtLXJl Z2JpdHMtMjR4eC5oIgotCi0vKgotICogQ2xvY2tkb21haW4gZGVwZW5kZW5jaWVzIGZvciB3a2Rl cHMKLSAqCi0gKiBYWFggSGFyZHdhcmUgZGVwZW5kZW5jaWVzIChlLmcuLCBkZXBlbmRlbmNpZXMg dGhhdCBjYW5ub3QgYmUKLSAqIGNoYW5nZWQgaW4gc29mdHdhcmUpIGFyZSBub3QgaW5jbHVkZWQg aGVyZSB5ZXQsIGJ1dCBzaG91bGQgYmUuCi0gKi8KLQotLyogV2FrZXVwIGRlcGVuZGVuY3kgc291 cmNlIGFycmF5cyAqLwotCi0vKiAyNDMwLXNwZWNpZmljIHBvc3NpYmxlIHdha2V1cCBkZXBlbmRl bmNpZXMgKi8KLQotLyogMjQzMCBQTV9XS0RFUF9DT1JFOiBEU1AsIEdGWCwgTVBVLCBXS1VQLCBN RE0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGNvcmVfMjQzMF93a2RlcHNbXSA9IHsKLQl7 IC5jbGtkbV9uYW1lID0gImRzcF9jbGtkbSIgfSwKLQl7IC5jbGtkbV9uYW1lID0gImdmeF9jbGtk bSIgfSwKLQl7IC5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIgfSwKLQl7IC5jbGtkbV9uYW1lID0g IndrdXBfY2xrZG0iIH0sCi0JeyAuY2xrZG1fbmFtZSA9ICJtZG1fY2xrZG0iIH0sCi0JeyBOVUxM IH0sCi19OwotCi0vKiAyNDMwIFBNX1dLREVQX01QVTogQ09SRSwgRFNQLCBXS1VQLCBNRE0gKi8K LXN0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIG1wdV8yNDMwX3drZGVwc1tdID0gewotCXsgLmNsa2Rt X25hbWUgPSAiY29yZV9sM19jbGtkbSIgfSwKLQl7IC5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xr ZG0iIH0sCi0JeyAuY2xrZG1fbmFtZSA9ICJkc3BfY2xrZG0iIH0sCi0JeyAuY2xrZG1fbmFtZSA9 ICJ3a3VwX2Nsa2RtIiB9LAotCXsgLmNsa2RtX25hbWUgPSAibWRtX2Nsa2RtIiB9LAotCXsgTlVM TCB9LAotfTsKLQotLyogMjQzMCBQTV9XS0RFUF9NRE06IENPUkUsIE1QVSwgV0tVUCAqLwotc3Rh dGljIHN0cnVjdCBjbGtkbV9kZXAgbWRtXzI0MzBfd2tkZXBzW10gPSB7Ci0JeyAuY2xrZG1fbmFt ZSA9ICJjb3JlX2wzX2Nsa2RtIiB9LAotCXsgLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIg fSwKLQl7IC5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIgfSwKLQl7IC5jbGtkbV9uYW1lID0gIndr dXBfY2xrZG0iIH0sCi0JeyBOVUxMIH0sCi19OwotCi0vKgotICogMjQzMC1vbmx5IGNsb2NrZG9t YWlucwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MzBfY2xrZG0gPSB7 Ci0JLm5hbWUJCT0gIm1wdV9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAibXB1X3B3cmRt IiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCi0JLndrZGVwX3NyY3MJPSBt cHVfMjQzMF93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX01Q VV9NQVNLLAotfTsKLQotLyogQW5vdGhlciBjYXNlIG9mIGJpdCBuYW1lIGNvbGxpc2lvbnMgYmV0 d2VlbiBzZXZlcmFsIHJlZ2lzdGVyczogRU5fTURNICovCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9t YWluIG1kbV9jbGtkbSA9IHsKLQkubmFtZQkJPSAibWRtX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAu bmFtZSA9ICJtZG1fcHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwK LQkuZGVwX2JpdAk9IE9NQVAyNDMwX1BNX1dLREVQX01QVV9FTl9NRE1fU0hJRlQsCi0JLndrZGVw X3NyY3MJPSBtZG1fMjQzMF93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0MzBfQVVU T1NUQVRFX01ETV9NQVNLLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3BfMjQz MF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiZHNwX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9 ICJkc3BfcHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkuZGVw X2JpdAk9IE9NQVAyNFhYX1BNX1dLREVQX01QVV9FTl9EU1BfU0hJRlQsCi0JLndrZGVwX3NyY3MJ PSBkc3BfMjR4eF93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRF X0RTUF9NQVNLLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMjQzMF9jbGtk bSA9IHsKLQkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhf cHdyZG0iIH0sCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKLQkud2tkZXBfc3Jj cwk9IGdmeF8yNHh4X3drZGVwcywKLQkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RB VEVfR0ZYX01BU0ssCi19OwotCi0vKgotICogWFhYIGFkZCB1c2Vjb3VudGluZyBmb3IgY2xrZG0g ZGVwZW5kZW5jaWVzLCBvdGhlcndpc2UgdGhlIHByZXNlbmNlCi0gKiBvZiBhIHNpbmdsZSBkZXAg Yml0IGZvciBjb3JlX2wzXzI0eHhfY2xrZG0gYW5kIGNvcmVfbDRfMjR4eF9jbGtkbQotICogY291 bGQgY2F1c2UgdHJvdWJsZQotICovCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDNf MjQzMF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiY29yZV9sM19jbGtkbSIsCi0JLnB3cmRtCQk9IHsg Lm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAotCS5k ZXBfYml0CT0gT01BUDI0WFhfRU5fQ09SRV9TSElGVCwKLQkud2tkZXBfc3Jjcwk9IGNvcmVfMjQz MF93a2RlcHMsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0wzX01BU0ss Ci19OwotCi0vKgotICogWFhYIGFkZCB1c2Vjb3VudGluZyBmb3IgY2xrZG0gZGVwZW5kZW5jaWVz LCBvdGhlcndpc2UgdGhlIHByZXNlbmNlCi0gKiBvZiBhIHNpbmdsZSBkZXAgYml0IGZvciBjb3Jl X2wzXzI0eHhfY2xrZG0gYW5kIGNvcmVfbDRfMjR4eF9jbGtkbQotICogY291bGQgY2F1c2UgdHJv dWJsZQotICovCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDRfMjQzMF9jbGtkbSA9 IHsKLQkubmFtZQkJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29y ZV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAotCS5kZXBfYml0CT0gT01B UDI0WFhfRU5fQ09SRV9TSElGVCwKLQkud2tkZXBfc3Jjcwk9IGNvcmVfMjQzMF93a2RlcHMsCi0J LmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0ssCi19OwotCi1zdGF0 aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzc18yNDMwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJkc3Nf Y2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCi0JLmZsYWdzCQk9 IENMS0RNX0NBTl9IV1NVUCwKLQkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVf RFNTX01BU0ssCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluICpjbG9ja2RvbWFpbnNf b21hcDI0M3hbXSBfX2luaXRkYXRhID0gewotCSZ3a3VwX2NvbW1vbl9jbGtkbSwKLQkmbXB1XzI0 MzBfY2xrZG0sCi0JJm1kbV9jbGtkbSwKLQkmZHNwXzI0MzBfY2xrZG0sCi0JJmdmeF8yNDMwX2Ns a2RtLAotCSZjb3JlX2wzXzI0MzBfY2xrZG0sCi0JJmNvcmVfbDRfMjQzMF9jbGtkbSwKLQkmZHNz XzI0MzBfY2xrZG0sCi0JTlVMTCwKLX07Ci0KLXZvaWQgX19pbml0IG9tYXAyNDN4X2Nsb2NrZG9t YWluc19pbml0KHZvaWQpCi17Ci0JaWYgKCFjcHVfaXNfb21hcDI0M3goKSkKLQkJcmV0dXJuOwot Ci0JY2xrZG1fcmVnaXN0ZXJfcGxhdGZvcm1fZnVuY3MoJm9tYXAyX2Nsa2RtX29wZXJhdGlvbnMp OwotCWNsa2RtX3JlZ2lzdGVyX2Nsa2RtcyhjbG9ja2RvbWFpbnNfb21hcDI0M3gpOwotCWNsa2Rt X2NvbXBsZXRlX2luaXQoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9j bG9ja2RvbWFpbnMyeHh4XzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2Rv bWFpbnMyeHh4XzN4eHhfZGF0YS5jCmluZGV4IDIyMGMyMmY1ZTBmNS4uNGQyMGMyNzIwNjYwIDEw MDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczJ4eHhfM3h4eF9kYXRh LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMyeHh4XzN4eHhfZGF0YS5j CkBAIC04LDcgKzgsNyBAQAogICogUGF1bCBXYWxtc2xleSwgSm91bmkgSMO2Z2FuZGVyCiAgKgog ICogVGhpcyBmaWxlIGNvbnRhaW5zIGNsb2NrZG9tYWlucyBhbmQgY2xvY2tkb21haW4gd2FrZXVw L3NsZWVwCi0gKiBkZXBlbmRlbmNpZXMgZm9yIHRoZSBPTUFQMi8zIGNoaXBzLiAgU29tZSBub3Rl czoKKyAqIGRlcGVuZGVuY2llcyBmb3IgdGhlIE9NQVAzIGNoaXBzLiAgU29tZSBub3RlczoKICAq CiAgKiBBIHVzZWZ1bCB2YWxpZGF0aW9uIHJ1bGUgZm9yIHN0cnVjdCBjbG9ja2RvbWFpbjogQW55 IGNsb2NrZG9tYWluCiAgKiByZWZlcmVuY2VkIGJ5IGEgd2tkZXBfc3JjcyBvciBzbGVlcGRlcF9z cmNzIGFycmF5IG11c3QgaGF2ZSBhCkBAIC0xNiw4ICsxNiw2IEBACiAgKiBzb2Z0d2FyZS1jb250 cm9sbGFibGUgZGVwZW5kZW5jaWVzLiAgTm9uLXNvZnR3YXJlLWNvbnRyb2xsYWJsZQogICogZGVw ZW5kZW5jaWVzIGRvIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IGVuY29kZWQgYmVsb3cgKHlldCku CiAgKgotICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRl bmNpZXMgKFNMRUVQREVQKQotICoKICAqIFRoZSBvdmVybHktc3BlY2lmaWMgZGVwX2JpdCBuYW1l cyBhcmUgZHVlIHRvIGEgYml0IG5hbWUgY29sbGlzaW9uCiAgKiB3aXRoIENNX0ZDTEtFTl97RFNQ LElWQTJ9LiAgVGhlIERTUC9JVkEyIFBNX1dLREVQIGFuZCBDTV9TTEVFUERFUCBzaGlmdAogICog dmFsdWUgYXJlIHRoZSBzYW1lIGZvciBhbGwgcG93ZXJkb21haW5zOiAyCkBAIC0zOSwxMCArMzcs OCBAQAogI2luY2x1ZGUgImNsb2NrZG9tYWluLmgiCiAjaW5jbHVkZSAicHJtMnh4eF8zeHh4Lmgi CiAjaW5jbHVkZSAiY20yeHh4XzN4eHguaCIKLSNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIK ICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHgu aCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMt MzR4eC5oIgogCiAvKgpAQCAtNTQsMjkgKzUwLDggQEAKIAogLyogV2FrZXVwIGRlcGVuZGVuY3kg c291cmNlIGFycmF5cyAqLwogCi0vKiAyeHh4LXNwZWNpZmljIHBvc3NpYmxlIGRlcGVuZGVuY2ll cyAqLwotCi0vKiAyeHh4IFBNX1dLREVQX0dGWDogQ09SRSwgTVBVLCBXS1VQICovCi1zdHJ1Y3Qg Y2xrZG1fZGVwIGdmeF8yNHh4X3drZGVwc1tdID0gewotCXsgLmNsa2RtX25hbWUgPSAiY29yZV9s M19jbGtkbSIgfSwKLQl7IC5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iIH0sCi0JeyAuY2xr ZG1fbmFtZSA9ICJtcHVfY2xrZG0iIH0sCi0JeyAuY2xrZG1fbmFtZSA9ICJ3a3VwX2Nsa2RtIiB9 LAotCXsgTlVMTCB9LAotfTsKLQotLyogMnh4eCBQTV9XS0RFUF9EU1A6IENPUkUsIE1QVSwgV0tV UCAqLwotc3RydWN0IGNsa2RtX2RlcCBkc3BfMjR4eF93a2RlcHNbXSA9IHsKLQl7IC5jbGtkbV9u YW1lID0gImNvcmVfbDNfY2xrZG0iIH0sCi0JeyAuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2Rt IiB9LAotCXsgLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiB9LAotCXsgLmNsa2RtX25hbWUgPSAi d2t1cF9jbGtkbSIgfSwKLQl7IE5VTEwgfSwKLX07Ci0KLQogLyoKLSAqIE9NQVAyLzMtY29tbW9u IGNsb2NrZG9tYWlucworICogT01BUDMtY29tbW9uIGNsb2NrZG9tYWlucwogICoKICAqIEV2ZW4g dGhvdWdoIHRoZSAyNDIwIGhhcyBhIHNpbmdsZSBQUkNNIG1vZHVsZSBmcm9tIHRoZQogICogaW50 ZXJjb25uZWN0J3MgcGVyc3BlY3RpdmUsIGludGVybmFsbHkgaXQgZG9lcyBhcHBlYXIgdG8gaGF2 ZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaCBiL2Fy Y2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDU5YzE0ZGJiNmY4Ny4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gt b21hcDIvY20tcmVnYml0cy0yNHh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0v KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0jaWZuZGVmIF9fQVJD SF9BUk1fTUFDSF9PTUFQMl9DTV9SRUdCSVRTXzI0WFhfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01B Q0hfT01BUDJfQ01fUkVHQklUU18yNFhYX0gKLQotLyoKLSAqIE9NQVAyNFhYIENsb2NrIE1hbmFn ZW1lbnQgcmVnaXN0ZXIgYml0cwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0 cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5va2lhIENvcnBvcmF0aW9uCi0g KgotICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5Ci0gKi8KLQotI2RlZmluZSBPTUFQMjRYWF9B VVRPU1RBVEVfTVBVX01BU0sJCQkoMSA8PCAwKQotI2RlZmluZSBPTUFQMjRYWF9FTl9EU1MxX01B U0sJCQkJKDEgPDwgMCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfTUFJTEJPWEVTX1NISUZUCQkJMzAK LSNkZWZpbmUgT01BUDI0WFhfU1RfSERRX1NISUZUCQkJCTIzCi0jZGVmaW5lIE9NQVAyNDIwX1NU X0kyQzJfU0hJRlQJCQkJMjAKLSNkZWZpbmUgT01BUDI0MzBfU1RfSTJDSFMxX1NISUZUCQkJMTkK LSNkZWZpbmUgT01BUDI0MjBfU1RfSTJDMV9TSElGVAkJCQkxOQotI2RlZmluZSBPTUFQMjQzMF9T VF9JMkNIUzJfU0hJRlQJCQkyMAotI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDJfU0hJRlQJCQkx NgotI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDFfU0hJRlQJCQkxNQotI2RlZmluZSBPTUFQMjQz MF9TVF9NQ0JTUDVfU0hJRlQJCQk1Ci0jZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNF9TSElGVAkJ CTQKLSNkZWZpbmUgT01BUDI0MzBfU1RfTUNCU1AzX1NISUZUCQkJMwotI2RlZmluZSBPTUFQMjRY WF9TVF9BRVNfU0hJRlQJCQkJMwotI2RlZmluZSBPTUFQMjRYWF9TVF9STkdfU0hJRlQJCQkJMgot I2RlZmluZSBPTUFQMjRYWF9TVF9TSEFfU0hJRlQJCQkJMQotI2RlZmluZSBPTUFQMjRYWF9DTEtT RUxfRFNTMl9NQVNLCQkJKDB4MSA8PCAxMykKLSNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0RT U19NQVNLCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0sJCQko MSA8PCAxKQotI2RlZmluZSBPTUFQMjRYWF9BVVRPU1RBVEVfTDNfTUFTSwkJCSgxIDw8IDApCi0j ZGVmaW5lIE9NQVAyNFhYX0FVVE9TVEFURV9HRlhfTUFTSwkJCSgxIDw8IDApCi0jZGVmaW5lIE9N QVAyNFhYX1NUX01QVV9XRFRfU0hJRlQJCQkzCi0jZGVmaW5lIE9NQVAyNFhYX1NUXzMyS1NZTkNf U0hJRlQJCQkxCi0jZGVmaW5lIE9NQVAyNFhYX0VOXzU0TV9QTExfU0hJRlQJCQk2Ci0jZGVmaW5l IE9NQVAyNFhYX0VOXzk2TV9QTExfU0hJRlQJCQkyCi0jZGVmaW5lIE9NQVAyNFhYX1NUXzU0TV9B UExMX1NISUZUCQkJOQotI2RlZmluZSBPTUFQMjRYWF9TVF85Nk1fQVBMTF9TSElGVAkJCTgKLSNk ZWZpbmUgT01BUDI0WFhfQVVUT181NE1fTUFTSwkJCQkoMHgzIDw8IDYpCi0jZGVmaW5lIE9NQVAy NFhYX0FVVE9fOTZNX01BU0sJCQkJKDB4MyA8PCAyKQotI2RlZmluZSBPTUFQMjRYWF9BVVRPX0RQ TExfU0hJRlQJCQkwCi0jZGVmaW5lIE9NQVAyNFhYX0FVVE9fRFBMTF9NQVNLCQkJCSgweDMgPDwg MCkKLSNkZWZpbmUgT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0sJCQkoMHgzIDw8IDApCi0jZGVm aW5lIE9NQVAyNDIwX0FVVE9TVEFURV9JVkFfTUFTSwkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAy NFhYX0FVVE9TVEFURV9EU1BfTUFTSwkJCSgxIDw8IDApCi0jZGVmaW5lIE9NQVAyNDMwX0FVVE9T VEFURV9NRE1fTUFTSwkJCSgxIDw8IDApCi0jZGVmaW5lIE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNB QkxFX0FVVE8JCTB4MAotI2RlZmluZSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8JCTB4 MQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eC5jIGIvYXJj aC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MWM2ZDY5ZjRiZjQ5Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4 eHguYworKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogT01BUDJ4eHggQ00gbW9kdWxlIGZ1bmN0aW9u cwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICogQ29weXJp Z2h0IChDKSAyMDA4LTIwMTAsIDIwMTIgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIFBhdWwg V2FsbXNsZXkKLSAqIFJhamVuZHJhIE5heWFrIDxybmF5YWtAdGkuY29tPgotICovCi0KLSNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUg PGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51 eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSAicHJtMnh4eC5oIgot I2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAiY20yeHh4LmgiCi0jaW5jbHVkZSAiY20tcmVnYml0 cy0yNHh4LmgiCi0jaW5jbHVkZSAiY2xvY2tkb21haW4uaCIKLQotLyogQ01fQVVUT0lETEVfUExM LkFVVE9fKiBiaXQgdmFsdWVzIGZvciBEUExMcyAqLwotI2RlZmluZSBEUExMX0FVVE9JRExFX0RJ U0FCTEUJCQkJMHgwCi0jZGVmaW5lIE9NQVAyWFhYX0RQTExfQVVUT0lETEVfTE9XX1BPV0VSX1NU T1AJCTB4MwotCi0vKiBDTV9BVVRPSURMRV9QTEwuQVVUT18qIGJpdCB2YWx1ZXMgZm9yIEFQTExz IChPTUFQMnh4eCBvbmx5KSAqLwotI2RlZmluZSBPTUFQMlhYWF9BUExMX0FVVE9JRExFX0RJU0FC TEUJCQkweDAKLSNkZWZpbmUgT01BUDJYWFhfQVBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUAkJ MHgzCi0KLS8qIENNX0lETEVTVF9QTEwgYml0IHZhbHVlIG9mZnNldCBmb3IgQVBMTHMgKE9NQVAy eHh4IG9ubHkpICovCi0jZGVmaW5lIEVOX0FQTExfTE9DS0VECQkJCQkzCi0KLXN0YXRpYyBjb25z dCB1OCBvbWFwMnh4eF9jbV9pZGxlc3Rfb2Zmc1tdID0gewotCUNNX0lETEVTVDEsIENNX0lETEVT VDIsIE9NQVAyNDMwX0NNX0lETEVTVDMsIE9NQVAyNFhYX0NNX0lETEVTVDQKLX07Ci0KLS8qCi0g KgotICovCi0KLXN0YXRpYyB2b2lkIF93cml0ZV9jbGt0cmN0cmwodTggYywgczE2IG1vZHVsZSwg dTMyIG1hc2spCi17Ci0JdTMyIHY7Ci0KLQl2ID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKG1vZHVs ZSwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKLQl2ICY9IH5tYXNrOwotCXYgfD0gYyA8PCBfX2Zmcyht YXNrKTsKLQlvbWFwMl9jbV93cml0ZV9tb2RfcmVnKHYsIG1vZHVsZSwgT01BUDJfQ01fQ0xLU1RD VFJMKTsKLX0KLQotc3RhdGljIGJvb2wgb21hcDJ4eHhfY21faXNfY2xrZG1faW5faHdzdXAoczE2 IG1vZHVsZSwgdTMyIG1hc2spCi17Ci0JdTMyIHY7Ci0KLQl2ID0gb21hcDJfY21fcmVhZF9tb2Rf cmVnKG1vZHVsZSwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKLQl2ICY9IG1hc2s7Ci0JdiA+Pj0gX19m ZnMobWFzayk7Ci0KLQlyZXR1cm4gKHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRP KSA/IDEgOiAwOwotfQotCi1zdGF0aWMgdm9pZCBvbWFwMnh4eF9jbV9jbGtkbV9lbmFibGVfaHdz dXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCi17Ci0JX3dyaXRlX2Nsa3RyY3RybChPTUFQMjRYWF9D TEtTVENUUkxfRU5BQkxFX0FVVE8sIG1vZHVsZSwgbWFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9t YXAyeHh4X2NtX2Nsa2RtX2Rpc2FibGVfaHdzdXAoczE2IG1vZHVsZSwgdTMyIG1hc2spCi17Ci0J X3dyaXRlX2Nsa3RyY3RybChPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPLCBtb2R1bGUs IG1hc2spOwotfQotCi0vKgotICogRFBMTCBhdXRvaWRsZSBjb250cm9sCi0gKi8KLQotc3RhdGlj IHZvaWQgX29tYXAyeHh4X3NldF9kcGxsX2F1dG9pZGxlKHU4IG0pCi17Ci0JdTMyIHY7Ci0KLQl2 ID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0FVVE9JRExFKTsKLQl2ICY9IH5P TUFQMjRYWF9BVVRPX0RQTExfTUFTSzsKLQl2IHw9IG0gPDwgT01BUDI0WFhfQVVUT19EUExMX1NI SUZUOwotCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcodiwgUExMX01PRCwgQ01fQVVUT0lETEUpOwot fQotCi12b2lkIG9tYXAyeHh4X2NtX3NldF9kcGxsX2Rpc2FibGVfYXV0b2lkbGUodm9pZCkKLXsK LQlfb21hcDJ4eHhfc2V0X2RwbGxfYXV0b2lkbGUoT01BUDJYWFhfRFBMTF9BVVRPSURMRV9MT1df UE9XRVJfU1RPUCk7Ci19Ci0KLXZvaWQgb21hcDJ4eHhfY21fc2V0X2RwbGxfYXV0b19sb3dfcG93 ZXJfc3RvcCh2b2lkKQotewotCV9vbWFwMnh4eF9zZXRfZHBsbF9hdXRvaWRsZShEUExMX0FVVE9J RExFX0RJU0FCTEUpOwotfQotCi0vKioKLSAqIG9tYXAyeHh4X2NtX3NwbGl0X2lkbGVzdF9yZWcg LSBzcGxpdCBDTV9JRExFU1QgcmVnIGFkZHIgaW50byBpdHMgY29tcG9uZW50cwotICogQGlkbGVz dF9yZWc6IENNX0lETEVTVCogdmlydHVhbCBhZGRyZXNzCi0gKiBAcHJjbV9pbnN0OiBwb2ludGVy IHRvIGFuIHMxNiB0byByZXR1cm4gdGhlIFBSQ00gaW5zdGFuY2Ugb2Zmc2V0Ci0gKiBAaWRsZXN0 X3JlZ19pZDogcG9pbnRlciB0byBhIHU4IHRvIHJldHVybiB0aGUgQ01fSURMRVNUeCByZWdpc3Rl ciBJRAotICoKLSAqIFhYWCBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVlZGVkIHVudGlsIGFic29s dXRlIHJlZ2lzdGVyIGFkZHJlc3NlcyBhcmUKLSAqIHJlbW92ZWQgZnJvbSB0aGUgT01BUCBzdHJ1 Y3QgY2xrIHJlY29yZHMuCi0gKi8KLXN0YXRpYyBpbnQgb21hcDJ4eHhfY21fc3BsaXRfaWRsZXN0 X3JlZyhzdHJ1Y3QgY2xrX29tYXBfcmVnICppZGxlc3RfcmVnLAotCQkJCQlzMTYgKnByY21faW5z dCwKLQkJCQkJdTggKmlkbGVzdF9yZWdfaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBvZmZzOwotCXU4 IGlkbGVzdF9vZmZzOwotCWludCBpOwotCi0JaWRsZXN0X29mZnMgPSBpZGxlc3RfcmVnLT5vZmZz ZXQgJiAweGZmOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9tYXAyeHh4X2NtX2lkbGVz dF9vZmZzKTsgaSsrKSB7Ci0JCWlmIChpZGxlc3Rfb2ZmcyA9PSBvbWFwMnh4eF9jbV9pZGxlc3Rf b2Zmc1tpXSkgewotCQkJKmlkbGVzdF9yZWdfaWQgPSBpICsgMTsKLQkJCWJyZWFrOwotCQl9Ci0J fQotCi0JaWYgKGkgPT0gQVJSQVlfU0laRShvbWFwMnh4eF9jbV9pZGxlc3Rfb2ZmcykpCi0JCXJl dHVybiAtRUlOVkFMOwotCi0Jb2ZmcyA9IGlkbGVzdF9yZWctPm9mZnNldDsKLQlvZmZzICY9IDB4 ZmYwMDsKLQkqcHJjbV9pbnN0ID0gb2ZmczsKLQotCXJldHVybiAwOwotfQotCi0vKgotICoKLSAq LwotCi0vKioKLSAqIG9tYXAyeHh4X2NtX3dhaXRfbW9kdWxlX3JlYWR5IC0gd2FpdCBmb3IgYSBt b2R1bGUgdG8gbGVhdmUgaWRsZSBvciBzdGFuZGJ5Ci0gKiBAcGFydDogUFJDTSBwYXJ0aXRpb24s IGlnbm9yZWQgZm9yIE9NQVAyCi0gKiBAcHJjbV9tb2Q6IFBSQ00gbW9kdWxlIG9mZnNldAotICog QGlkbGVzdF9pZDogQ01fSURMRVNUeCByZWdpc3RlciBJRCAoaS5lLiwgeCA9IDEsIDIsIDMpCi0g KiBAaWRsZXN0X3NoaWZ0OiBzaGlmdCBvZiB0aGUgYml0IGluIHRoZSBDTV9JRExFU1QqIHJlZ2lz dGVyIHRvIGNoZWNrCi0gKgotICogV2FpdCBmb3IgdGhlIFBSQ00gdG8gaW5kaWNhdGUgdGhhdCB0 aGUgbW9kdWxlIGlkZW50aWZpZWQgYnkKLSAqIChAcHJjbV9tb2QsIEBpZGxlc3RfaWQsIEBpZGxl c3Rfc2hpZnQpIGlzIGNsb2NrZWQuICBSZXR1cm4gMCB1cG9uCi0gKiBzdWNjZXNzIG9yIC1FQlVT WSBpZiB0aGUgbW9kdWxlIGRvZXNuJ3QgZW5hYmxlIGluIHRpbWUuCi0gKi8KLXN0YXRpYyBpbnQg b21hcDJ4eHhfY21fd2FpdF9tb2R1bGVfcmVhZHkodTggcGFydCwgczE2IHByY21fbW9kLCB1MTYg aWRsZXN0X2lkLAotCQkJCQkgdTggaWRsZXN0X3NoaWZ0KQotewotCWludCBlbmEgPSAwLCBpID0g MDsKLQl1OCBjbV9pZGxlc3RfcmVnOwotCXUzMiBtYXNrOwotCi0JaWYgKCFpZGxlc3RfaWQgfHwg KGlkbGVzdF9pZCA+IEFSUkFZX1NJWkUob21hcDJ4eHhfY21faWRsZXN0X29mZnMpKSkKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0KLQljbV9pZGxlc3RfcmVnID0gb21hcDJ4eHhfY21faWRsZXN0X29mZnNb aWRsZXN0X2lkIC0gMV07Ci0KLQltYXNrID0gMSA8PCBpZGxlc3Rfc2hpZnQ7Ci0JZW5hID0gbWFz azsKLQotCW9tYXBfdGVzdF90aW1lb3V0KCgob21hcDJfY21fcmVhZF9tb2RfcmVnKHByY21fbW9k LCBjbV9pZGxlc3RfcmVnKSAmCi0JCQkgICAgbWFzaykgPT0gZW5hKSwgTUFYX01PRFVMRV9SRUFE WV9USU1FLCBpKTsKLQotCXJldHVybiAoaSA8IE1BWF9NT0RVTEVfUkVBRFlfVElNRSkgPyAwIDog LUVCVVNZOwotfQotCi0vKiBDbG9ja2RvbWFpbiBsb3ctbGV2ZWwgZnVuY3Rpb25zICovCi0KLXN0 YXRpYyB2b2lkIG9tYXAyeHh4X2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpj bGtkbSkKLXsKLQlvbWFwMnh4eF9jbV9jbGtkbV9lbmFibGVfaHdzdXAoY2xrZG0tPnB3cmRtLnB0 ci0+cHJjbV9vZmZzLAotCQkJCSAgICAgICBjbGtkbS0+Y2xrdHJjdHJsX21hc2spOwotfQotCi1z dGF0aWMgdm9pZCBvbWFwMnh4eF9jbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpj bGtkbSkKLXsKLQlvbWFwMnh4eF9jbV9jbGtkbV9kaXNhYmxlX2h3c3VwKGNsa2RtLT5wd3JkbS5w dHItPnByY21fb2ZmcywKLQkJCQkJY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKLX0KLQotc3RhdGlj IGludCBvbWFwMnh4eF9jbGtkbV9jbGtfZW5hYmxlKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0p Ci17Ci0JYm9vbCBod3N1cCA9IGZhbHNlOwotCi0JaWYgKCFjbGtkbS0+Y2xrdHJjdHJsX21hc2sp Ci0JCXJldHVybiAwOwotCi0JaHdzdXAgPSBvbWFwMnh4eF9jbV9pc19jbGtkbV9pbl9od3N1cChj bGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkJCSAgICAgIGNsa2RtLT5jbGt0cmN0cmxf bWFzayk7Ci0JaWYgKCFod3N1cCAmJiBjbGtkbS0+ZmxhZ3MgJiBDTEtETV9DQU5fRk9SQ0VfV0FL RVVQKQotCQlvbWFwMnh4eF9jbGtkbV93YWtldXAoY2xrZG0pOwotCi0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgb21hcDJ4eHhfY2xrZG1fY2xrX2Rpc2FibGUoc3RydWN0IGNsb2NrZG9tYWlu ICpjbGtkbSkKLXsKLQlib29sIGh3c3VwID0gZmFsc2U7Ci0KLQlpZiAoIWNsa2RtLT5jbGt0cmN0 cmxfbWFzaykKLQkJcmV0dXJuIDA7Ci0KLQlod3N1cCA9IG9tYXAyeHh4X2NtX2lzX2Nsa2RtX2lu X2h3c3VwKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKLQkJCQkJICAgICAgY2xrZG0tPmNs a3RyY3RybF9tYXNrKTsKLQotCWlmICghaHdzdXAgJiYgY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FO X0ZPUkNFX1NMRUVQKQotCQlvbWFwMnh4eF9jbGtkbV9zbGVlcChjbGtkbSk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RydWN0IGNsa2RtX29wcyBvbWFwMl9jbGtkbV9vcGVyYXRpb25zID0gewotCS5j bGtkbV9hZGRfd2tkZXAJPSBvbWFwMl9jbGtkbV9hZGRfd2tkZXAsCi0JLmNsa2RtX2RlbF93a2Rl cAk9IG9tYXAyX2Nsa2RtX2RlbF93a2RlcCwKLQkuY2xrZG1fcmVhZF93a2RlcAk9IG9tYXAyX2Ns a2RtX3JlYWRfd2tkZXAsCi0JLmNsa2RtX2NsZWFyX2FsbF93a2RlcHMJPSBvbWFwMl9jbGtkbV9j bGVhcl9hbGxfd2tkZXBzLAotCS5jbGtkbV9zbGVlcAkJPSBvbWFwMnh4eF9jbGtkbV9zbGVlcCwK LQkuY2xrZG1fd2FrZXVwCQk9IG9tYXAyeHh4X2Nsa2RtX3dha2V1cCwKLQkuY2xrZG1fYWxsb3df aWRsZQk9IG9tYXAyeHh4X2Nsa2RtX2FsbG93X2lkbGUsCi0JLmNsa2RtX2RlbnlfaWRsZQk9IG9t YXAyeHh4X2Nsa2RtX2RlbnlfaWRsZSwKLQkuY2xrZG1fY2xrX2VuYWJsZQk9IG9tYXAyeHh4X2Ns a2RtX2Nsa19lbmFibGUsCi0JLmNsa2RtX2Nsa19kaXNhYmxlCT0gb21hcDJ4eHhfY2xrZG1fY2xr X2Rpc2FibGUsCi19OwotCi1pbnQgb21hcDJ4eHhfY21fZmNsa3NfYWN0aXZlKHZvaWQpCi17Ci0J dTMyIGYxLCBmMjsKLQotCWYxID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9G Q0xLRU4xKTsKLQlmMiA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDI0WFhf Q01fRkNMS0VOMik7Ci0KLQlyZXR1cm4gKGYxIHwgZjIpID8gMSA6IDA7Ci19Ci0KLWludCBvbWFw Mnh4eF9jbV9tcHVfcmV0ZW50aW9uX2FsbG93ZWQodm9pZCkKLXsKLQl1MzIgbDsKLQotCS8qIENo ZWNrIGZvciBNTUMsIFVBUlQyLCBVQVJUMSwgTWNTUEkyLCBNY1NQSTEgYW5kIERTUzEuICovCi0J bCA9IG9tYXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fRkNMS0VOMSk7Ci0JaWYgKGwg JiAoT01BUDI0MjBfRU5fTU1DX01BU0sgfCBPTUFQMjRYWF9FTl9VQVJUMl9NQVNLIHwKLQkJIE9N QVAyNFhYX0VOX1VBUlQxX01BU0sgfCBPTUFQMjRYWF9FTl9NQ1NQSTJfTUFTSyB8Ci0JCSBPTUFQ MjRYWF9FTl9NQ1NQSTFfTUFTSyB8IE9NQVAyNFhYX0VOX0RTUzFfTUFTSykpCi0JCXJldHVybiAw OwotCS8qIENoZWNrIGZvciBVQVJUMy4gKi8KLQlsID0gb21hcDJfY21fcmVhZF9tb2RfcmVnKENP UkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKTsKLQlpZiAobCAmIE9NQVAyNFhYX0VOX1VBUlQz X01BU0spCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXUzMiBvbWFwMnh4eF9jbV9n ZXRfY29yZV9jbGtfc3JjKHZvaWQpCi17Ci0JdTMyIHY7Ci0KLQl2ID0gb21hcDJfY21fcmVhZF9t b2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOwotCXYgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JD X01BU0s7Ci0KLQlyZXR1cm4gdjsKLX0KLQotdTMyIG9tYXAyeHh4X2NtX2dldF9jb3JlX3BsbF9j b25maWcodm9pZCkKLXsKLQlyZXR1cm4gb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENN X0NMS1NFTDIpOwotfQotCi12b2lkIG9tYXAyeHh4X2NtX3NldF9tb2RfZGl2aWRlcnModTMyIG1w dSwgdTMyIGRzcCwgdTMyIGdmeCwgdTMyIGNvcmUsIHUzMiBtZG0pCi17Ci0JdTMyIHRtcDsKLQot CW9tYXAyX2NtX3dyaXRlX21vZF9yZWcobXB1LCBNUFVfTU9ELCBDTV9DTEtTRUwpOwotCW9tYXAy X2NtX3dyaXRlX21vZF9yZWcoZHNwLCBPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpOwotCW9t YXAyX2NtX3dyaXRlX21vZF9yZWcoZ2Z4LCBHRlhfTU9ELCBDTV9DTEtTRUwpOwotCXRtcCA9IG9t YXAyX2NtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fQ0xLU0VMMSkgJgotCQlPTUFQMjRYWF9D TEtTRUxfRFNTMl9NQVNLOwotCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY29yZSB8IHRtcCwgQ09S RV9NT0QsIENNX0NMS1NFTDEpOwotCWlmIChtZG0pCi0JCW9tYXAyX2NtX3dyaXRlX21vZF9yZWco bWRtLCBPTUFQMjQzMF9NRE1fTU9ELCBDTV9DTEtTRUwpOwotfQotCi0vKgotICoKLSAqLwotCi1z dGF0aWMgY29uc3Qgc3RydWN0IGNtX2xsX2RhdGEgb21hcDJ4eHhfY21fbGxfZGF0YSA9IHsKLQku c3BsaXRfaWRsZXN0X3JlZwk9ICZvbWFwMnh4eF9jbV9zcGxpdF9pZGxlc3RfcmVnLAotCS53YWl0 X21vZHVsZV9yZWFkeQk9ICZvbWFwMnh4eF9jbV93YWl0X21vZHVsZV9yZWFkeSwKLX07Ci0KLWlu dCBfX2luaXQgb21hcDJ4eHhfY21faW5pdChjb25zdCBzdHJ1Y3Qgb21hcF9wcmNtX2luaXRfZGF0 YSAqZGF0YSkKLXsKLQlyZXR1cm4gY21fcmVnaXN0ZXIoJm9tYXAyeHh4X2NtX2xsX2RhdGEpOwot fQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgb21hcDJ4eHhfY21fZXhpdCh2b2lkKQotewotCWNtX3Vu cmVnaXN0ZXIoJm9tYXAyeHh4X2NtX2xsX2RhdGEpOwotfQotX19leGl0Y2FsbChvbWFwMnh4eF9j bV9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4LmggYi9hcmNo L2FybS9tYWNoLW9tYXAyL2NtMnh4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3 Y2JlZmYxNWZmYjAuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4 eC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIE9NQVAyeHh4IENsb2NrIE1hbmFnZW1lbnQg KENNKSByZWdpc3RlciBkZWZpbml0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5 LCAyMDEyIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAx MCBOb2tpYSBDb3Jwb3JhdGlvbgotICogUGF1bCBXYWxtc2xleQotICoKLSAqIFRoZSBDTSBoYXJk d2FyZSBtb2R1bGVzIG9uIHRoZSBPTUFQMi8zIGFyZSBxdWl0ZSBzaW1pbGFyIHRvIGVhY2gKLSAq IG90aGVyLiAgVGhlIENNIG1vZHVsZXMvaW5zdGFuY2VzIG9uIE9NQVA0IGFyZSBxdWl0ZSBkaWZm ZXJlbnQsIHNvCi0gKiB0aGV5IGFyZSBoYW5kbGVkIGluIGEgc2VwYXJhdGUgZmlsZS4KLSAqLwot I2lmbmRlZiBfX0FSQ0hfQVNNX01BQ0hfT01BUDJfQ00yWFhYX0gKLSNkZWZpbmUgX19BUkNIX0FT TV9NQUNIX09NQVAyX0NNMlhYWF9ICi0KLSNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgotI2luY2x1 ZGUgImNtMnh4eF8zeHh4LmgiCi0KLSNkZWZpbmUgT01BUDI0MjBfQ01fUkVHQUREUihtb2R1bGUs IHJlZykJCQkJXAotCQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjQyMF9DTV9CQVNFICsgKG1v ZHVsZSkgKyAocmVnKSkKLSNkZWZpbmUgT01BUDI0MzBfQ01fUkVHQUREUihtb2R1bGUsIHJlZykJ CQkJXAotCQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjQzMF9DTV9CQVNFICsgKG1vZHVsZSkg KyAocmVnKSkKLQotLyoKLSAqIE1vZHVsZSBzcGVjaWZpYyBDTSByZWdpc3RlciBvZmZzZXRzIGZy b20gQ01fQkFTRSArIGRvbWFpbiBvZmZzZXQKLSAqIFVzZSBjbV97cmVhZCx3cml0ZX1fbW9kX3Jl ZygpIHdpdGggdGhlc2UgcmVnaXN0ZXJzLgotICogVGhlc2UgcmVnaXN0ZXIgb2Zmc2V0cyBnZW5l cmFsbHkgYXBwZWFyIGluIG1vcmUgdGhhbiBvbmUgUFJDTSBzdWJtb2R1bGUuCi0gKi8KLQotLyog T01BUDItc3BlY2lmaWMgcmVnaXN0ZXIgb2Zmc2V0cyAqLwotCi0jZGVmaW5lIE9NQVAyNFhYX0NN X0ZDTEtFTjIJCQkJMHgwMDA0Ci0jZGVmaW5lIE9NQVAyNFhYX0NNX0lDTEtFTjQJCQkJMHgwMDFj Ci0jZGVmaW5lIE9NQVAyNFhYX0NNX0FVVE9JRExFNAkJCQkweDAwM2MKLSNkZWZpbmUgT01BUDI0 WFhfQ01fSURMRVNUNAkJCQkweDAwMmMKLQotLyogQ01fSURMRVNUIGJpdCBmaWVsZCB2YWx1ZXMg dG8gaW5kaWNhdGUgZGVhc3NlcnRlZCBJZGxlUmVxICovCi0KLSNkZWZpbmUgT01BUDI0WFhfQ01f SURMRVNUX1ZBTAkJCQkwCi0KLQotLyogQ2xvY2sgbWFuYWdlbWVudCBkb21haW4gcmVnaXN0ZXIg Z2V0L3NldCAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotZXh0ZXJuIHZvaWQgb21hcDJ4 eHhfY21fc2V0X2RwbGxfZGlzYWJsZV9hdXRvaWRsZSh2b2lkKTsKLWV4dGVybiB2b2lkIG9tYXAy eHh4X2NtX3NldF9kcGxsX2F1dG9fbG93X3Bvd2VyX3N0b3Aodm9pZCk7Ci0KLWV4dGVybiBpbnQg b21hcDJ4eHhfY21fZmNsa3NfYWN0aXZlKHZvaWQpOwotZXh0ZXJuIGludCBvbWFwMnh4eF9jbV9t cHVfcmV0ZW50aW9uX2FsbG93ZWQodm9pZCk7Ci1leHRlcm4gdTMyIG9tYXAyeHh4X2NtX2dldF9j b3JlX2Nsa19zcmModm9pZCk7Ci1leHRlcm4gdTMyIG9tYXAyeHh4X2NtX2dldF9jb3JlX3BsbF9j b25maWcodm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwMnh4eF9jbV9zZXRfbW9kX2RpdmlkZXJzKHUz MiBtcHUsIHUzMiBkc3AsIHUzMiBnZngsIHUzMiBjb3JlLAotCQkJCQkgdTMyIG1kbSk7Ci0KLWlu dCBfX2luaXQgb21hcDJ4eHhfY21faW5pdChjb25zdCBzdHJ1Y3Qgb21hcF9wcmNtX2luaXRfZGF0 YSAqZGF0YSk7Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gt b21hcDIvY21fY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtX2NvbW1vbi5jCmluZGV4 IDg3ZjJjMmQyZDc1NC4uZmMxNmNkMWZkMmQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9t YXAyL2NtX2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY21fY29tbW9uLmMKQEAg LTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29m X2FkZHJlc3MuaD4KIAotI2luY2x1ZGUgImNtMnh4eC5oIgogI2luY2x1ZGUgImNtM3h4eC5oIgog I2luY2x1ZGUgImNtMzN4eC5oIgogI2luY2x1ZGUgImNtNDR4eC5oIgpAQCAtMjMwLDE0ICsyMjks NiBAQCBzdGF0aWMgc3RydWN0IG9tYXBfcHJjbV9pbml0X2RhdGEgY20yX2RhdGEgX19pbml0ZGF0 YSA9IHsKIH07CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCi1zdGF0aWMgc3Ry dWN0IG9tYXBfcHJjbV9pbml0X2RhdGEgb21hcDJfcHJjbV9kYXRhIF9faW5pdGRhdGEgPSB7Ci0J LmluZGV4ID0gVElfQ0xLTV9DTSwKLQkuaW5pdCA9IG9tYXAyeHh4X2NtX2luaXQsCi0JLmZsYWdz ID0gQ01fTk9fQ0xPQ0tTIHwgQ01fU0lOR0xFX0lOU1RBTkNFLAotfTsKLSNlbmRpZgotCiAjaWZk ZWYgQ09ORklHX0FSQ0hfT01BUDMKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9wcmNtX2luaXRfZGF0YSBv bWFwM19jbV9kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmluZGV4ID0gVElfQ0xLTV9DTSwKQEAgLTI2 OSw5ICsyNjAsNiBAQCBzdGF0aWMgc3RydWN0IG9tYXBfcHJjbV9pbml0X2RhdGEgYW00X3ByY21f ZGF0YSBfX2luaXRkYXRhID0gewogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIG9tYXBfY21fZHRfbWF0Y2hfdGFibGVbXSBfX2luaXRjb25zdCA9IHsKLSNpZmRlZiBD T05GSUdfQVJDSF9PTUFQMgotCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDItcHJjbSIsIC5kYXRh ID0gJm9tYXAyX3ByY21fZGF0YSB9LAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMK IAl7IC5jb21wYXRpYmxlID0gInRpLG9tYXAzLWNtIiwgLmRhdGEgPSAmb21hcDNfY21fZGF0YSB9 LAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1k ZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmgKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5Njk0YWY3MTQ3NS4uMDAwMDAwMDAwMDAwCi0t LSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuaAorKysgL2Rldi9u dWxsCkBAIC0xLDExICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w ICovCi0jaWZuZGVmIF9fT01BUF9DT01NT05fQk9BUkRfREVWSUNFU19fCi0jZGVmaW5lIF9fT01B UF9DT01NT05fQk9BUkRfREVWSUNFU19fCi0KLSNpbmNsdWRlIDxsaW51eC9tZmQvbWVuZWxhdXMu aD4KLQotdm9pZCAqbjh4MF9sZWdhY3lfaW5pdCh2b2lkKTsKLQotZXh0ZXJuIHN0cnVjdCBtZW5l bGF1c19wbGF0Zm9ybV9kYXRhIG44eDBfbWVuZWxhdXNfcGxhdGZvcm1fZGF0YTsKLQotI2VuZGlm IC8qIF9fT01BUF9DT01NT05fQk9BUkRfREVWSUNFU19fICovCmRpZmYgLS1naXQgYS9hcmNoL2Fy bS9tYWNoLW9tYXAyL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24uaAppbmRl eCA5ZDYwNzk5ZTk3NTIuLmY4ZWQ5NzA0NGFkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1v bWFwMi9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi5oCkBAIC0xMDIs OCArMTAyLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG9tYXA1X3JlYWx0aW1lX3RpbWVyX2luaXQo dm9pZCkKIH0KICNlbmRpZgogCi12b2lkIG9tYXAyNDIwX2luaXRfZWFybHkodm9pZCk7Ci12b2lk IG9tYXAyNDMwX2luaXRfZWFybHkodm9pZCk7CiB2b2lkIG9tYXAzNDMwX2luaXRfZWFybHkodm9p ZCk7CiB2b2lkIG9tYXAzNjMwX2luaXRfZWFybHkodm9pZCk7CiB2b2lkIGFtMzN4eF9pbml0X2Vh cmx5KHZvaWQpOwpAQCAtMTMwLDE0ICsxMjgsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9z b2NfZGV2aWNlX2luaXQodm9pZCkKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU09D X09NQVAyNDIwKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfT01BUDI0MzApCi12b2lkIG9tYXAyeHh4 X3Jlc3RhcnQoZW51bSByZWJvb3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpOwotI2Vsc2UK LXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMnh4eF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9k ZSwgY29uc3QgY2hhciAqY21kKQotewotfQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfU09DX0FN MzNYWAogdm9pZCBhbTMzeHhfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIG1vZGUsIGNvbnN0IGNo YXIgKmNtZCk7CiAjZWxzZQpAQCAtMTgzLDggKzE3Myw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBv bWFwX2JhcnJpZXJfcmVzZXJ2ZV9tZW1ibG9jayh2b2lkKQogLyogVGhpcyBnZXRzIGNhbGxlZCBm cm9tIG1hY2gtb21hcDIvaW8uYywgZG8gbm90IGNhbGwgdGhpcyAqLwogdm9pZCBfX2luaXQgb21h cDJfc2V0X2dsb2JhbHNfdGFwKHUzMiBjbGFzcywgdm9pZCBfX2lvbWVtICp0YXApOwogCi12b2lk IF9faW5pdCBvbWFwMjQyeF9tYXBfaW8odm9pZCk7Ci12b2lkIF9faW5pdCBvbWFwMjQzeF9tYXBf aW8odm9pZCk7CiB2b2lkIF9faW5pdCBvbWFwM19tYXBfaW8odm9pZCk7CiB2b2lkIF9faW5pdCBh bTMzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBfX2luaXQgb21hcDRfbWFwX2lvKHZvaWQpOwpkaWZm IC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmggYi9hcmNoL2FybS9tYWNoLW9t YXAyL2NvbnRyb2wuaAppbmRleCA3ZTc0NDA1MzNiZjkuLjNhYjFjNmU2ZGRlNiAxMDA2NDQKLS0t IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFw Mi9jb250cm9sLmgKQEAgLTE5LDE5ICsxOSwxMSBAQAogI2luY2x1ZGUgImFtMzN4eC5oIgogCiAj aWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBPTUFQMjQyWF9DVFJMX1JFR0FERFIocmVnKQkJ CQkJXAotCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDJYX0NUUkxfQkFTRSArIChyZWcpKQot I2RlZmluZSBPTUFQMjQzWF9DVFJMX1JFR0FERFIocmVnKQkJCQkJXAotCQlPTUFQMl9MNF9JT19B RERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSArIChyZWcpKQogI2RlZmluZSBPTUFQMzQzWF9DVFJM X1JFR0FERFIocmVnKQkJCQkJXAogCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAzNDNYX0NUUkxf QkFTRSArIChyZWcpKQogI2RlZmluZSBBTTMzWFhfQ1RSTF9SRUdBRERSKHJlZykJCQkJCVwKIAkJ QU0zM1hYX0w0X1dLX0lPX0FERFJFU1MoQU0zM1hYX1NDTV9CQVNFICsgKHJlZykpCiAjZWxzZQot I2RlZmluZSBPTUFQMjQyWF9DVFJMX1JFR0FERFIocmVnKQkJCQkJXAotCQlPTUFQMl9MNF9JT19B RERSRVNTKE9NQVAyNDJYX0NUUkxfQkFTRSArIChyZWcpKQotI2RlZmluZSBPTUFQMjQzWF9DVFJM X1JFR0FERFIocmVnKQkJCQkJXAotCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDNYX0NUUkxf QkFTRSArIChyZWcpKQogI2RlZmluZSBPTUFQMzQzWF9DVFJMX1JFR0FERFIocmVnKQkJCQkJXAog CQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSArIChyZWcpKQogI2RlZmlu ZSBBTTMzWFhfQ1RSTF9SRUdBRERSKHJlZykJCQkJCVwKQEAgLTc0LDUyICs2Niw2IEBACiAjZGVm aW5lIE9NQVAyX0NPTlRST0xfUlBVQl9LRVlfSF8yCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAw eDAwOTgpCiAjZGVmaW5lIE9NQVAyX0NPTlRST0xfUlBVQl9LRVlfSF8zCShPTUFQMl9DT05UUk9M X0dFTkVSQUwgKyAweDAwOWMpCiAKLS8qIDI0Mngtb25seSBDT05UUk9MX0dFTkVSQUwgcmVnaXN0 ZXIgb2Zmc2V0cyAqLwotI2RlZmluZSBPTUFQMjQyWF9DT05UUk9MX0RFVkNPTkYJT01BUDJfQ09O VFJPTF9ERVZDT05GMCAvKiBtYXRjaCBUUk0gKi8KLSNkZWZpbmUgT01BUDI0MlhfQ09OVFJPTF9P Q01fUkFNX1BFUk0JKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA2OCkKLQotLyogMjQzeC1v bmx5IENPTlRST0xfR0VORVJBTCByZWdpc3RlciBvZmZzZXRzICovCi0vKiBDT05UUk9MX0lWQTJf Qk9PVHtBRERSLE1PRH0gYXJlIGF0IHRoZSBzYW1lIHBsYWNlIG9uIDM0M3ggLSBub3RlZCBiZWxv dyAqLwotI2RlZmluZSBPTUFQMjQzWF9DT05UUk9MX0RFVkNPTkYxCShPTUFQMl9DT05UUk9MX0dF TkVSQUwgKyAweDAwNzgpCi0jZGVmaW5lIE9NQVAyNDNYX0NPTlRST0xfQ1NJUlhGRQkoT01BUDJf Q09OVFJPTF9HRU5FUkFMICsgMHgwMDdjKQotI2RlZmluZSBPTUFQMjQzWF9DT05UUk9MX0lWQTJf Qk9PVEFERFIJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDE5MCkKLSNkZWZpbmUgT01BUDI0 M1hfQ09OVFJPTF9JVkEyX0JPT1RNT0QJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDE5NCkK LSNkZWZpbmUgT01BUDI0M1hfQ09OVFJPTF9JVkEyX0dFTUNGRwkoT01BUDJfQ09OVFJPTF9HRU5F UkFMICsgMHgwMTk4KQotI2RlZmluZSBPTUFQMjQzWF9DT05UUk9MX1BCSUFTX0xJVEUJKE9NQVAy X0NPTlRST0xfR0VORVJBTCArIDB4MDIzMCkKLQotLyogMjR4eC1vbmx5IENPTlRST0xfR0VORVJB TCByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfREVCT0JTCQko T01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDAwKQotI2RlZmluZSBPTUFQMjRYWF9DT05UUk9M X0VNVV9TVVBQT1JUCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwMDgpCi0jZGVmaW5lIE9N QVAyNFhYX0NPTlRST0xfU0VDX1RFU1QJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA0NCkK LSNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9QU0FfQ1RSTAkoT01BUDJfQ09OVFJPTF9HRU5FUkFM ICsgMHgwMDQ4KQotI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX1BTQV9DTUQJKE9NQVAyX0NPTlRS T0xfR0VORVJBTCArIDB4MDA0YykKLSNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9QU0FfVkFMVUUJ KE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA1MCkKLSNkZWZpbmUgT01BUDI0WFhfQ09OVFJP TF9TRUNfRU1VCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwNjApCi0jZGVmaW5lIE9NQVAy NFhYX0NPTlRST0xfU0VDX1RBUAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDY0KQotI2Rl ZmluZSBPTUFQMjRYWF9DT05UUk9MX09DTV9QVUJfUkFNX0FERAkoT01BUDJfQ09OVFJPTF9HRU5F UkFMICsgMHgwMDZjKQotI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX0VYVF9TRUNfUkFNX1NUQVJU X0FERAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDcwKQotI2RlZmluZSBPTUFQMjRYWF9D T05UUk9MX0VYVF9TRUNfUkFNX1NUT1BfQURECShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAw NzQpCi0jZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfU0VDX1NUQVRVUwkJKE9NQVAyX0NPTlRST0xf R0VORVJBTCArIDB4MDA4MCkKLSNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9TRUNfRVJSX1NUQVRV UwkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDA4NCkKLSNkZWZpbmUgT01BUDI0WFhfQ09O VFJPTF9TVEFUVVMJCQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDg4KQotI2RlZmluZSBP TUFQMjRYWF9DT05UUk9MX0dFTkVSQUxfUFVSUE9TRV9TVEFUVVMJKE9NQVAyX0NPTlRST0xfR0VO RVJBTCArIDB4MDA4YykKLSNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9SQU5EX0tFWV8wCShPTUFQ Ml9DT05UUk9MX0dFTkVSQUwgKyAweDAwYTApCi0jZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfUkFO RF9LRVlfMQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGE0KQotI2RlZmluZSBPTUFQMjRY WF9DT05UUk9MX1JBTkRfS0VZXzIJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBhOCkKLSNk ZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9SQU5EX0tFWV8zCShPTUFQMl9DT05UUk9MX0dFTkVSQUwg KyAweDAwYWMpCi0jZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfQ1VTVF9LRVlfMAkoT01BUDJfQ09O VFJPTF9HRU5FUkFMICsgMHgwMGIwKQotI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX0NVU1RfS0VZ XzEJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBiNCkKLSNkZWZpbmUgT01BUDI0WFhfQ09O VFJPTF9URVNUX0tFWV8wCShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwYzApCi0jZGVmaW5l IE9NQVAyNFhYX0NPTlRST0xfVEVTVF9LRVlfMQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgw MGM0KQotI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX1RFU1RfS0VZXzIJKE9NQVAyX0NPTlRST0xf R0VORVJBTCArIDB4MDBjOCkKLSNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9URVNUX0tFWV8zCShP TUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwY2MpCi0jZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xf VEVTVF9LRVlfNAkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMGQwKQotI2RlZmluZSBPTUFQ MjRYWF9DT05UUk9MX1RFU1RfS0VZXzUJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBkNCkK LSNkZWZpbmUgT01BUDI0WFhfQ09OVFJPTF9URVNUX0tFWV82CShPTUFQMl9DT05UUk9MX0dFTkVS QUwgKyAweDAwZDgpCi0jZGVmaW5lIE9NQVAyNFhYX0NPTlRST0xfVEVTVF9LRVlfNwkoT01BUDJf Q09OVFJPTF9HRU5FUkFMICsgMHgwMGRjKQotI2RlZmluZSBPTUFQMjRYWF9DT05UUk9MX1RFU1Rf S0VZXzgJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDBlMCkKLSNkZWZpbmUgT01BUDI0WFhf Q09OVFJPTF9URVNUX0tFWV85CShPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAwZTQpCi0KICNk ZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9QQURDT05GX1NZU05JUlEgKE9NQVAyX0NPTlRST0xfSU5U RVJGQUNFICsgMHgwMWIwKQogCiAvKiAzNHh4LW9ubHkgQ09OVFJPTF9HRU5FUkFMIHJlZ2lzdGVy IG9mZnNldHMgKi8KQEAgLTMxMSwxNCArMjU3LDEyIEBACiAgKi8KIC8qIENPTlRST0xfREVWQ09O RjAgYml0cyAqLwogI2RlZmluZSBPTUFQMl9NTUNTRElPMUFEUENMS0lTRUwJKDEgPDwgMjQpIC8q IE1NQzEgbG9vcCBiYWNrIGNsb2NrICovCi0jZGVmaW5lIE9NQVAyNFhYX1VTQlNUQU5EQllDVFJM CQkoMSA8PCAxNSkKICNkZWZpbmUgT01BUDJfTUNCU1AyX0NMS1NfTUFTSwkJKDEgPDwgNikKICNk ZWZpbmUgT01BUDJfTUNCU1AxX0ZTUl9NQVNLCQkoMSA8PCA0KQogI2RlZmluZSBPTUFQMl9NQ0JT UDFfQ0xLUl9NQVNLCQkoMSA8PCAzKQogI2RlZmluZSBPTUFQMl9NQ0JTUDFfQ0xLU19NQVNLCQko MSA8PCAyKQogCiAvKiBDT05UUk9MX0RFVkNPTkYxIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0M1hf TU1DMV9BQ1RJVkVfT1ZFUldSSVRFCSgxIDw8IDMxKQogI2RlZmluZSBPTUFQMl9NTUNTRElPMkFE UENMS0lTRUwJKDEgPDwgNikgLyogTU1DMiBsb29wIGJhY2sgY2xvY2sgKi8KICNkZWZpbmUgT01B UDJfTUNCU1A1X0NMS1NfTUFTSwkJKDEgPDwgNCkgLyogPiAyNDJ4ICovCiAjZGVmaW5lIE9NQVAy X01DQlNQNF9DTEtTX01BU0sJCSgxIDw8IDIpIC8qID4gMjQyeCAqLwpkaWZmIC0tZ2l0IGEvYXJj aC9hcm0vbWFjaC1vbWFwMi9kaXNwbGF5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Rpc3BsYXku YwppbmRleCBkYmVjM2JiOWZiZjQuLmFkZGMxNDg5OGJkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0v bWFjaC1vbWFwMi9kaXNwbGF5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kaXNwbGF5LmMK QEAgLTEyNCw5ICsxMjQsNyBAQCBzdGF0aWMgdm9pZCBvbWFwX2RzaV9kaXNhYmxlX3BhZHMoaW50 IGRzaV9pZCwgdW5zaWduZWQgbGFuZV9tYXNrKQogCiBzdGF0aWMgZW51bSBvbWFwZHNzX3ZlcnNp b24gX19pbml0IG9tYXBfZGlzcGxheV9nZXRfdmVyc2lvbih2b2lkKQogewotCWlmIChjcHVfaXNf b21hcDI0eHgoKSkKLQkJcmV0dXJuIE9NQVBEU1NfVkVSX09NQVAyNHh4OwotCWVsc2UgaWYgKGNw dV9pc19vbWFwMzYzMCgpKQorCWlmIChjcHVfaXNfb21hcDM2MzAoKSkKIAkJcmV0dXJuIE9NQVBE U1NfVkVSX09NQVAzNjMwOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCWlmIChz b2NfaXNfYW0zNXh4KCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMg Yi9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCmluZGV4IDgzMGNkNGU3ZWI0NC4uM2E2YjdiNDYy MGNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCisrKyBiL2FyY2gvYXJt L21hY2gtb21hcDIvZG1hLmMKQEAgLTgyLDM5ICs4Miw2IEBAIHN0YXRpYyB1bnNpZ25lZCBjb25m aWd1cmVfZG1hX2VycmF0YSh2b2lkKQogewogCXVuc2lnbmVkIGVycmF0YSA9IDA7CiAKLQkvKgot CSAqIEVycmF0YSBhcHBsaWNhYmxlIGZvciBPTUFQMjQzMEVTMS4wIGFuZCBhbGwgb21hcDI0MjAK LQkgKgotCSAqIEkuCi0JICogRXJyYXR1bSBJRDogTm90IEF2YWlsYWJsZQotCSAqIEludGVyIEZy YW1lIERNQSBidWZmZXJpbmcgaXNzdWUgRE1BIHdpbGwgd3JvbmdseQotCSAqIGJ1ZmZlciBlbGVt ZW50cyBpZiBwYWNraW5nIGFuZCBidXJzdGluZyBpcyBlbmFibGVkLiBUaGlzIG1pZ2h0Ci0JICog cmVzdWx0IGluIGRhdGEgZ2V0cyBzdGFsbGVkIGluIEZJRk8gYXQgdGhlIGVuZCBvZiB0aGUgYmxv Y2suCi0JICogV29ya2Fyb3VuZDogRE1BIGNoYW5uZWxzIG11c3QgaGF2ZSBCVUZGRVJJTkdfRElT QUJMRUQgYml0IHNldCB0bwotCSAqIGd1YXJhbnRlZSBubyBkYXRhIHdpbGwgc3RheSBpbiB0aGUg RE1BIEZJRk8gaW4gY2FzZSBpbnRlciBmcmFtZQotCSAqIGJ1ZmZlcmluZyBvY2N1cnMKLQkgKgot CSAqIElJLgotCSAqIEVycmF0dW0gSUQ6IE5vdCBBdmFpbGFibGUKLQkgKiBETUEgbWF5IGhhbmcg d2hlbiBzZXZlcmFsIGNoYW5uZWxzIGFyZSB1c2VkIGluIHBhcmFsbGVsCi0JICogSW4gdGhlIGZv bGxvd2luZyBjb25maWd1cmF0aW9uLCBETUEgY2hhbm5lbCBoYW5naW5nIGNhbiBvY2N1cjoKLQkg KiBhLiBDaGFubmVsIGksIGhhcmR3YXJlIHN5bmNocm9uaXplZCwgaXMgZW5hYmxlZAotCSAqIGIu IEFub3RoZXIgY2hhbm5lbCAoQ2hhbm5lbCB4KSwgc29mdHdhcmUgc3luY2hyb25pemVkLCBpcyBl bmFibGVkLgotCSAqIGMuIENoYW5uZWwgaSBpcyBkaXNhYmxlZCBiZWZvcmUgZW5kIG9mIHRyYW5z ZmVyCi0JICogZC4gQ2hhbm5lbCBpIGlzIHJlZW5hYmxlZC4KLQkgKiBlLiBTdGVwcyAxIHRvIDQg YXJlIHJlcGVhdGVkIGEgY2VydGFpbiBudW1iZXIgb2YgdGltZXMuCi0JICogZi4gQSB0aGlyZCBj aGFubmVsIChDaGFubmVsIHkpLCBzb2Z0d2FyZSBzeW5jaHJvbml6ZWQsIGlzIGVuYWJsZWQuCi0J ICogQ2hhbm5lbCB4IGFuZCBDaGFubmVsIHkgbWF5IGhhbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgc3Rl cCAnZicuCi0JICogV29ya2Fyb3VuZDoKLQkgKiBGb3IgYW55IGNoYW5uZWwgdXNlZCAtIG1ha2Ug c3VyZSBOZXh0TENIX0lEIGlzIHNldCB0byB0aGUgdmFsdWUgai4KLQkgKi8KLQlpZiAoY3B1X2lz X29tYXAyNDIwKCkgfHwgKGNwdV9pc19vbWFwMjQzMCgpICYmCi0JCQkJKG9tYXBfdHlwZSgpID09 IE9NQVAyNDMwX1JFVl9FUzFfMCkpKSB7Ci0KLQkJU0VUX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV9J RlJBTUVfQlVGRkVSSU5HKTsKLQkJU0VUX0RNQV9FUlJBVEEoRE1BX0VSUkFUQV9QQVJBTExFTF9D SEFOTkVMUyk7Ci0JfQotCiAJLyoKIAkgKiBFcnJhdHVtIElEOiBpMzc4OiBPTUFQMis6IHNETUEg Q2hhbm5lbCBpcyBub3QgZGlzYWJsZWQKIAkgKiBhZnRlciBhIHRyYW5zYWN0aW9uIGVycm9yLgpA QCAtMTYyLDE2ICsxMjksNiBAQCBzdGF0aWMgdW5zaWduZWQgY29uZmlndXJlX2RtYV9lcnJhdGEo dm9pZCkKIAlyZXR1cm4gZXJyYXRhOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9zbGF2 ZV9tYXAgb21hcDI0eHhfc2RtYV9kdF9tYXBbXSA9IHsKLQkvKiBleHRlcm5hbCBETUEgcmVxdWVz dHMgd2hlbiB0dXNiNjAxMCBpcyB1c2VkICovCi0JeyAibXVzYi1oZHJjLjEuYXV0byIsICJkbWFy ZXEwIiwgU0RNQV9GSUxURVJfUEFSQU0oMikgfSwKLQl7ICJtdXNiLWhkcmMuMS5hdXRvIiwgImRt YXJlcTEiLCBTRE1BX0ZJTFRFUl9QQVJBTSgzKSB9LAotCXsgIm11c2ItaGRyYy4xLmF1dG8iLCAi ZG1hcmVxMiIsIFNETUFfRklMVEVSX1BBUkFNKDE0KSB9LCAvKiBPTUFQMjQyMCBvbmx5ICovCi0J eyAibXVzYi1oZHJjLjEuYXV0byIsICJkbWFyZXEzIiwgU0RNQV9GSUxURVJfUEFSQU0oMTUpIH0s IC8qIE9NQVAyNDIwIG9ubHkgKi8KLQl7ICJtdXNiLWhkcmMuMS5hdXRvIiwgImRtYXJlcTQiLCBT RE1BX0ZJTFRFUl9QQVJBTSgxNikgfSwgLyogT01BUDI0MjAgb25seSAqLwotCXsgIm11c2ItaGRy Yy4xLmF1dG8iLCAiZG1hcmVxNSIsIFNETUFfRklMVEVSX1BBUkFNKDY0KSB9LCAvKiBPTUFQMjQy MCBvbmx5ICovCi19OwotCiBzdGF0aWMgc3RydWN0IG9tYXBfZG1hX2Rldl9hdHRyIGRtYV9hdHRy ID0gewogCS5kZXZfY2FwcyA9IFJFU0VSVkVfQ0hBTk5FTCB8IERNQV9MSU5LRURfTENIIHwgR0xP QkFMX1BSSU9SSVRZIHwKIAkJICAgIElTX0NTU0FfMzIgfCBJU19DRFNBXzMyLApAQCAtMTg4LDE1 ICsxNDUsNyBAQCBzdHJ1Y3Qgb21hcF9zeXN0ZW1fZG1hX3BsYXRfaW5mbyBkbWFfcGxhdF9pbmZv ID0gewogc3RhdGljIGludCBfX2luaXQgb21hcDJfc3lzdGVtX2RtYV9pbml0KHZvaWQpCiB7CiAJ ZG1hX3BsYXRfaW5mby5lcnJhdGEgPSBjb25maWd1cmVfZG1hX2VycmF0YSgpOwotCi0JaWYgKHNv Y19pc19vbWFwMjR4eCgpKSB7Ci0JCS8qIERNQSBzbGF2ZSBtYXAgZm9yIGRyaXZlcnMgbm90IHll dCBjb252ZXJ0ZWQgdG8gRFQgKi8KLQkJZG1hX3BsYXRfaW5mby5zbGF2ZV9tYXAgPSBvbWFwMjR4 eF9zZG1hX2R0X21hcDsKLQkJZG1hX3BsYXRfaW5mby5zbGF2ZWNudCA9IEFSUkFZX1NJWkUob21h cDI0eHhfc2RtYV9kdF9tYXApOwotCX0KLQotCWlmICghc29jX2lzX29tYXAyNDJ4KCkpCi0JCWRt YV9hdHRyLmRldl9jYXBzIHw9IElTX1JXX1BSSU9SSVRZOworCWRtYV9hdHRyLmRldl9jYXBzIHw9 IElTX1JXX1BSSU9SSVRZOwogCiAJaWYgKHNvY19pc19vbWFwMzR4eCgpICYmIChvbWFwX3R5cGUo KSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9HUCkpCiAJCWRtYV9hdHRyLmRldl9jYXBzIHw9IEhTX0NI QU5ORUxTX1JFU0VSVkVEOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9mYi5jIGIv YXJjaC9hcm0vbWFjaC1vbWFwMi9mYi5jCmluZGV4IDBmOGM4ZWZlM2FlOC4uOWE0MjVjMzZmOTk2 IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2ZiLmMKKysrIGIvYXJjaC9hcm0vbWFj aC1vbWFwMi9mYi5jCkBAIC0yNywxNSArMjcsNiBAQAogICogVGhlIGZpcnN0IG1lbW9yeSByZXNv dXJjZSBpcyB0aGUgcmVnaXN0ZXIgcmVnaW9uIGZvciBWUkZCLAogICogdGhlIHJlc3QgYXJlIFZS RkIgdmlydHVhbCBtZW1vcnkgYXJlYXMgZm9yIGVhY2ggVlJGQiBjb250ZXh0LgogICovCi0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDJfdnJmYl9yZXNvdXJjZXNbXSA9IHsKLQlE RUZJTkVfUkVTX01FTV9OQU1FRCgweDY4MDA4MDAwdSwgMHg0MCwgInZyZmItcmVncyIpLAotCURF RklORV9SRVNfTUVNX05BTUVEKDB4NzAwMDAwMDB1LCAweDQwMDAwMDAsICJ2cmZiLWFyZWEtMCIp LAotCURFRklORV9SRVNfTUVNX05BTUVEKDB4NzQwMDAwMDB1LCAweDQwMDAwMDAsICJ2cmZiLWFy ZWEtMSIpLAotCURFRklORV9SRVNfTUVNX05BTUVEKDB4NzgwMDAwMDB1LCAweDQwMDAwMDAsICJ2 cmZiLWFyZWEtMiIpLAotCURFRklORV9SRVNfTUVNX05BTUVEKDB4N2MwMDAwMDB1LCAweDQwMDAw MDAsICJ2cmZiLWFyZWEtMyIpLAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSBv bWFwM192cmZiX3Jlc291cmNlc1tdID0gewogCURFRklORV9SRVNfTUVNX05BTUVEKDB4NkMwMDAx ODB1LCAweGMwLCAidnJmYi1yZWdzIiksCiAJREVGSU5FX1JFU19NRU1fTkFNRUQoMHg3MDAwMDAw MHUsIDB4NDAwMDAwMCwgInZyZmItYXJlYS0wIiksCkBAIC01OCwxMCArNDksNyBAQCBpbnQgX19p bml0IG9tYXBfaW5pdF92cmZiKHZvaWQpCiAJY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXM7CiAJ dW5zaWduZWQgaW50IG51bV9yZXM7CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJcmVz ID0gb21hcDJfdnJmYl9yZXNvdXJjZXM7Ci0JCW51bV9yZXMgPSBBUlJBWV9TSVpFKG9tYXAyX3Zy ZmJfcmVzb3VyY2VzKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJaWYgKGNw dV9pc19vbWFwMzR4eCgpKSB7CiAJCXJlcyA9IG9tYXAzX3ZyZmJfcmVzb3VyY2VzOwogCQludW1f cmVzID0gQVJSQVlfU0laRShvbWFwM192cmZiX3Jlc291cmNlcyk7CiAJfSBlbHNlIHsKZGlmZiAt LWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9n cG1jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNjBmMWI1YzI3ZC4uMDAwMDAw MDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5oCisrKyAvZGV2L251bGwKQEAg LTEsMTAgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAq LwotLyoKLSAqIEdlbmVyYWwtUHVycG9zZSBNZW1vcnkgQ29udHJvbGxlciBmb3IgT01BUDIKLSAq Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIERv IG5vdCBpbmNsdWRlIHRoaXMgZmlsZSBpbiBhbnkgbmV3IGNvZGUsIHRoaXMgd2lsbCBnZXQgcmVt b3ZlZAotICogb25jZSBvbWFwMyBib290cyBpbiBkZXZpY2UgdHJlZSBvbmx5IG1vZGUuCi0gKi8K LSNpbmNsdWRlIDxsaW51eC9vbWFwLWdwbWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gt b21hcDIvaTJjLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2kyYy5jCmluZGV4IDNiNGI5NTE0ZjRm YS4uZDk1NmM3MGY4ODk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2kyYy5jCisr KyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaTJjLmMKQEAgLTM5LDcgKzM5LDcgQEAgaW50IG9tYXBf aTJjX3Jlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIAl1MTYgaTJjX2NvbjsKIAlpbnQgYyA9 IDA7CiAKLQlpZiAoc29jX2lzX29tYXAyNHh4KCkgfHwgc29jX2lzX29tYXAzNHh4KCkgfHwgc29j X2lzX2FtMzV4eCgpKQorCWlmIChzb2NfaXNfb21hcDM0eHgoKSB8fCBzb2NfaXNfYW0zNXh4KCkp CiAJCWkyY19jb24gPSBPTUFQMl9JMkNfQ09OX09GRlNFVDsKIAllbHNlCiAJCWkyY19jb24gPSBP TUFQNF9JMkNfQ09OX09GRlNFVDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQu YyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwppbmRleCBjZjJiZmI0NDdlZTIuLjNlNzMxZGQy MTMxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisrKyBiL2FyY2gvYXJt L21hY2gtb21hcDIvaWQuYwpAQCAtNTUsOSArNTUsNyBAQCBpbnQgb21hcF90eXBlKHZvaWQpCiAJ aWYgKHZhbCA8IE9NQVAyX0RFVklDRVRZUEVfTUFTSykKIAkJcmV0dXJuIHZhbDsKIAotCWlmIChz b2NfaXNfb21hcDI0eHgoKSkgewotCQl2YWwgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDI0WFhfQ09O VFJPTF9TVEFUVVMpOwotCX0gZWxzZSBpZiAoc29jX2lzX3RpODF4eCgpKSB7CisJaWYgKHNvY19p c190aTgxeHgoKSkgewogCQl2YWwgPSBvbWFwX2N0cmxfcmVhZGwoVEk4MVhYX0NPTlRST0xfU1RB VFVTKTsKIAl9IGVsc2UgaWYgKHNvY19pc19hbTMzeHgoKSB8fCBzb2NfaXNfYW00M3h4KCkpIHsK IAkJdmFsID0gb21hcF9jdHJsX3JlYWRsKEFNMzNYWF9DT05UUk9MX1NUQVRVUyk7CkBAIC05OSwy MiArOTcsNiBAQCBFWFBPUlRfU1lNQk9MKG9tYXBfdHlwZSk7CiAKICNkZWZpbmUgcmVhZF90YXBf cmVnKHJlZykJcmVhZGxfcmVsYXhlZCh0YXBfYmFzZSAgKyAocmVnKSkKIAotc3RydWN0IG9tYXBf aWQgewotCXUxNgloYXdrZXllOwkvKiBTaWxpY29uIHR5cGUgKEhhd2tleWUgaWQpICovCi0JdTgJ ZGV2OwkJLyogRGV2aWNlIHR5cGUgZnJvbSBwcm9kdWN0aW9uX2lkIHJlZyAqLwotCXUzMgl0eXBl OwkJLyogQ29tYmluZWQgdHlwZSBpZCBjb3BpZWQgdG8gb21hcF9yZXZpc2lvbiAqLwotfTsKLQot LyogUmVnaXN0ZXIgdmFsdWVzIHRvIGRldGVjdCB0aGUgT01BUCB2ZXJzaW9uICovCi1zdGF0aWMg c3RydWN0IG9tYXBfaWQgb21hcF9pZHNbXSBfX2luaXRkYXRhID0gewotCXsgLmhhd2tleWUgPSAw eGI1ZDksIC5kZXYgPSAweDAsIC50eXBlID0gMHgyNDIwMDAyNCB9LAotCXsgLmhhd2tleWUgPSAw eGI1ZDksIC5kZXYgPSAweDEsIC50eXBlID0gMHgyNDIwMTAyNCB9LAotCXsgLmhhd2tleWUgPSAw eGI1ZDksIC5kZXYgPSAweDIsIC50eXBlID0gMHgyNDIwMjAyNCB9LAotCXsgLmhhd2tleWUgPSAw eGI1ZDksIC5kZXYgPSAweDQsIC50eXBlID0gMHgyNDIyMDAyNCB9LAotCXsgLmhhd2tleWUgPSAw eGI1ZDksIC5kZXYgPSAweDgsIC50eXBlID0gMHgyNDIzMDAyNCB9LAotCXsgLmhhd2tleWUgPSAw eGI2OGEsIC5kZXYgPSAweDAsIC50eXBlID0gMHgyNDMwMDAyNCB9LAotfTsKLQogc3RhdGljIHZv aWQgX19pb21lbSAqdGFwX2Jhc2U7CiBzdGF0aWMgdTE2IHRhcF9wcm9kX2lkOwogCkBAIC0xNDUs NjIgKzEyNyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfZmVlZF9yYW5kcG9vbCh2b2lkKQog fQogb21hcF9kZXZpY2VfaW5pdGNhbGwob21hcF9mZWVkX3JhbmRwb29sKTsKIAotdm9pZCBfX2lu aXQgb21hcDJ4eHhfY2hlY2tfcmV2aXNpb24odm9pZCkKLXsKLQlpbnQgaSwgajsKLQl1MzIgaWRj b2RlLCBwcm9kX2lkOwotCXUxNiBoYXdrZXllOwotCXU4ICBkZXZfdHlwZSwgcmV2OwotCXN0cnVj dCBvbWFwX2RpZV9pZCBvZGk7Ci0KLQlpZGNvZGUgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfSURD T0RFKTsKLQlwcm9kX2lkID0gcmVhZF90YXBfcmVnKHRhcF9wcm9kX2lkKTsKLQloYXdrZXllID0g KGlkY29kZSA+PiAxMikgJiAweGZmZmY7Ci0JcmV2ID0gKGlkY29kZSA+PiAyOCkgJiAweDBmOwot CWRldl90eXBlID0gKHByb2RfaWQgPj4gMTYpICYgMHgwZjsKLQlvbWFwX2dldF9kaWVfaWQoJm9k aSk7Ci0KLQlwcl9kZWJ1ZygiT01BUF9UQVBfSURDT0RFIDB4JTA4eCBSRVYgJWkgSEFXS0VZRSAw eCUwNHggTUFORiAlMDN4XG4iLAotCQkgaWRjb2RlLCByZXYsIGhhd2tleWUsIChpZGNvZGUgPj4g MSkgJiAweDdmZik7Ci0JcHJfZGVidWcoIk9NQVBfVEFQX0RJRV9JRF8wOiAweCUwOHhcbiIsIG9k aS5pZF8wKTsKLQlwcl9kZWJ1ZygiT01BUF9UQVBfRElFX0lEXzE6IDB4JTA4eCBERVZfUkVWOiAl aVxuIiwKLQkJIG9kaS5pZF8xLCAob2RpLmlkXzEgPj4gMjgpICYgMHhmKTsKLQlwcl9kZWJ1Zygi T01BUF9UQVBfRElFX0lEXzI6IDB4JTA4eFxuIiwgb2RpLmlkXzIpOwotCXByX2RlYnVnKCJPTUFQ X1RBUF9ESUVfSURfMzogMHglMDh4XG4iLCBvZGkuaWRfMyk7Ci0JcHJfZGVidWcoIk9NQVBfVEFQ X1BST0RfSURfMDogMHglMDh4IERFVl9UWVBFOiAlaVxuIiwKLQkJIHByb2RfaWQsIGRldl90eXBl KTsKLQotCS8qIENoZWNrIGhhd2tleWUgaWRzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUob21hcF9pZHMpOyBpKyspIHsKLQkJaWYgKGhhd2tleWUgPT0gb21hcF9pZHNbaV0uaGF3a2V5 ZSkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChpID09IEFSUkFZX1NJWkUob21hcF9pZHMpKSB7Ci0J CXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBPTUFQIENQVSBpZFxuIik7Ci0JCXJldHVybjsKLQl9 Ci0KLQlmb3IgKGogPSBpOyBqIDwgQVJSQVlfU0laRShvbWFwX2lkcyk7IGorKykgewotCQlpZiAo ZGV2X3R5cGUgPT0gb21hcF9pZHNbal0uZGV2KQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKGogPT0g QVJSQVlfU0laRShvbWFwX2lkcykpIHsKLQkJcHJfZXJyKCJVbmtub3duIE9NQVAgZGV2aWNlIHR5 cGUuIEhhbmRsaW5nIGl0IGFzIE9NQVAlMDR4XG4iLAotCQkgICAgICAgb21hcF9pZHNbaV0udHlw ZSA+PiAxNik7Ci0JCWogPSBpOwotCX0KLQotCXNwcmludGYoc29jX25hbWUsICJPTUFQJTA0eCIs IG9tYXBfcmV2KCkgPj4gMTYpOwotCXNwcmludGYoc29jX3JldiwgIkVTJXgiLCAob21hcF9yZXYo KSA+PiAxMikgJiAweGYpOwotCi0JcHJfaW5mbygiJXMiLCBzb2NfbmFtZSk7Ci0JaWYgKChvbWFw X3JldigpID4+IDgpICYgMHgwZikKLQkJcHJfY29udCgiJXMiLCBzb2NfcmV2KTsKLQlwcl9jb250 KCJcbiIpOwotfQotCiAjZGVmaW5lIE9NQVAzX1NIT1dfRkVBVFVSRShmZWF0KQkJXAogCWlmIChv bWFwM19oYXNfICMjZmVhdCgpKQkJXAogCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBzaXplb2Yo YnVmKSAtIG4sICNmZWF0ICIgIik7CkBAIC03NTAsOSArNjc2LDcgQEAgc3RhdGljIGNvbnN0IGNo YXIgKiBjb25zdCBvbWFwX3R5cGVzW10gPSB7CiAKIHN0YXRpYyBjb25zdCBjaGFyICogX19pbml0 IG9tYXBfZ2V0X2ZhbWlseSh2b2lkKQogewotCWlmIChzb2NfaXNfb21hcDI0eHgoKSkKLQkJcmV0 dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAiT01BUDIiKTsKLQllbHNlIGlmIChzb2NfaXNfb21h cDM0eHgoKSkKKwlpZiAoc29jX2lzX29tYXAzNHh4KCkpCiAJCXJldHVybiBrYXNwcmludGYoR0ZQ X0tFUk5FTCwgIk9NQVAzIik7CiAJZWxzZSBpZiAoc29jX2lzX29tYXA0NHh4KCkpCiAJCXJldHVy biBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIk9NQVA0Iik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9t YWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKaW5kZXggMTRlYzNmNzgw MDBiLi4xYzk0NWJlNWU3Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwor KysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRl ICJzZHJjLmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgogI2luY2x1ZGUgInNyYW0uaCIKLSNpbmNs dWRlICJjbTJ4eHguaCIKICNpbmNsdWRlICJjbTN4eHguaCIKICNpbmNsdWRlICJjbTMzeHguaCIK ICNpbmNsdWRlICJjbTQ0eHguaCIKQEAgLTQzLDExICs0Miw5IEBACiAjaW5jbHVkZSAiY20uaCIK ICNpbmNsdWRlICJwcmNtX21wdTQ0eHguaCIKICNpbmNsdWRlICJwcm1pbnN0NDR4eC5oIgotI2lu Y2x1ZGUgInBybTJ4eHguaCIKICNpbmNsdWRlICJwcm0zeHh4LmgiCiAjaW5jbHVkZSAicHJtMzN4 eC5oIgogI2luY2x1ZGUgInBybTQ0eHguaCIKLSNpbmNsdWRlICJvcHAyeHh4LmgiCiAjaW5jbHVk ZSAib21hcC1zZWN1cmUuaCIKIAogLyoKQEAgLTYxLDc2ICs1OCw2IEBAIHN0YXRpYyBpbnQgKCpv bWFwX2Nsa19zb2NfaW5pdCkodm9pZCk7CiAgKiBkZWZhdWx0IG1hcHBpbmcgcHJvdmlkZWQgaGVy ZS4KICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX09NQVAyNDIwKSB8fCBkZWZpbmVkKENP TkZJR19TT0NfT01BUDI0MzApCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyNHh4X2lvX2Rl c2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBMM18yNFhYX1ZJUlQsCi0JCS5w Zm4JCT0gX19waHlzX3RvX3BmbihMM18yNFhYX1BIWVMpLAotCQkubGVuZ3RoCQk9IEwzXzI0WFhf U0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwKLQl7Ci0JCS52aXJ0dWFsCT0gTDRfMjRY WF9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfMjRYWF9QSFlTKSwKLQkJLmxlbmd0 aAkJPSBMNF8yNFhYX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sCi19OwotCi0jaWZk ZWYgQ09ORklHX1NPQ19PTUFQMjQyMAotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMjQyeF9p b19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0gRFNQX01FTV8yNDIwX1ZJ UlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihEU1BfTUVNXzI0MjBfUEhZUyksCi0JCS5sZW5n dGgJCT0gRFNQX01FTV8yNDIwX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sCi0Jewot CQkudmlydHVhbAk9IERTUF9JUElfMjQyMF9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4o RFNQX0lQSV8yNDIwX1BIWVMpLAotCQkubGVuZ3RoCQk9IERTUF9JUElfMjQyMF9TSVpFLAotCQku dHlwZQkJPSBNVF9ERVZJQ0UKLQl9LAotCXsKLQkJLnZpcnR1YWwJPSBEU1BfTU1VXzI0MjBfVklS VCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERTUF9NTVVfMjQyMF9QSFlTKSwKLQkJLmxlbmd0 aAkJPSBEU1BfTU1VXzI0MjBfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwKLX07Ci0K LSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NPQ19PTUFQMjQzMAotc3RhdGljIHN0cnVjdCBtYXBf ZGVzYyBvbWFwMjQzeF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0g TDRfV0tfMjQzWF9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfV0tfMjQzWF9QSFlT KSwKLQkJLmxlbmd0aAkJPSBMNF9XS18yNDNYX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQot CX0sCi0JewotCQkudmlydHVhbAk9IE9NQVAyNDNYX0dQTUNfVklSVCwKLQkJLnBmbgkJPSBfX3Bo eXNfdG9fcGZuKE9NQVAyNDNYX0dQTUNfUEhZUyksCi0JCS5sZW5ndGgJCT0gT01BUDI0M1hfR1BN Q19TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LAotCXsKLQkJLnZpcnR1YWwJPSBPTUFQ MjQzWF9TRFJDX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMjQzWF9TRFJDX1BI WVMpLAotCQkubGVuZ3RoCQk9IE9NQVAyNDNYX1NEUkNfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVW SUNFCi0JfSwKLQl7Ci0JCS52aXJ0dWFsCT0gT01BUDI0M1hfU01TX1ZJUlQsCi0JCS5wZm4JCT0g X19waHlzX3RvX3BmbihPTUFQMjQzWF9TTVNfUEhZUyksCi0JCS5sZW5ndGgJCT0gT01BUDI0M1hf U01TX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sCi19OwotI2VuZGlmCi0jZW5kaWYK LQogI2lmZGVmCUNPTkZJR19BUkNIX09NQVAzCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAz NHh4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTMwNSwyMiArMjMyLDYgQEAgc3Rh dGljIHN0cnVjdCBtYXBfZGVzYyBkcmE3eHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiB9Owog I2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU09DX09NQVAyNDIwCi12b2lkIF9faW5pdCBvbWFwMjQy eF9tYXBfaW8odm9pZCkKLXsKLQlpb3RhYmxlX2luaXQob21hcDI0eHhfaW9fZGVzYywgQVJSQVlf U0laRShvbWFwMjR4eF9pb19kZXNjKSk7Ci0JaW90YWJsZV9pbml0KG9tYXAyNDJ4X2lvX2Rlc2Ms IEFSUkFZX1NJWkUob21hcDI0MnhfaW9fZGVzYykpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05G SUdfU09DX09NQVAyNDMwCi12b2lkIF9faW5pdCBvbWFwMjQzeF9tYXBfaW8odm9pZCkKLXsKLQlp b3RhYmxlX2luaXQob21hcDI0eHhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMjR4eF9pb19kZXNj KSk7Ci0JaW90YWJsZV9pbml0KG9tYXAyNDN4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0M3hf aW9fZGVzYykpOwotfQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogdm9pZCBf X2luaXQgb21hcDNfbWFwX2lvKHZvaWQpCiB7CkBAIC0zNjUsNiArMjc2LDggQEAgdm9pZCBfX2lu aXQgZHJhN3h4X21hcF9pbyh2b2lkKQogCW9tYXBfYmFycmllcnNfaW5pdCgpOwogfQogI2VuZGlm CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogLyoKICAqIG9tYXAyX2luaXRfcmVwcm9ncmFt X3NkcmMgLSByZXByb2dyYW0gU0RSQyB0aW1pbmcgcGFyYW1ldGVycwogICoKQEAgLTM5OSw3ICsz MTIsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBfb21hcDJfaW5pdF9yZXByb2dyYW1fc2RyYyh2b2lk KQogCXJldHVybiB2OwogfQogCi0jaWZkZWYgQ09ORklHX09NQVBfSFdNT0QKIHN0YXRpYyBpbnQg X3NldF9od21vZF9wb3N0c2V0dXBfc3RhdGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICpk YXRhKQogewogCXJldHVybiBvbWFwX2h3bW9kX3NldF9wb3N0c2V0dXBfc3RhdGUob2gsICoodTgg KilkYXRhKTsKQEAgLTQxMiw1NSArMzI0LDExIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBfX21heWJl X3VudXNlZCBvbWFwX2h3bW9kX2luaXRfcG9zdHNldHVwKHZvaWQpCiAJLyogU2V0IHRoZSBkZWZh dWx0IHBvc3RzZXR1cCBzdGF0ZSBmb3IgYWxsIGh3bW9kcyAqLwogCW9tYXBfaHdtb2RfZm9yX2Vh Y2goX3NldF9od21vZF9wb3N0c2V0dXBfc3RhdGUsICZwb3N0c2V0dXBfc3RhdGUpOwogfQotI2Vs c2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2h3bW9kX2luaXRfcG9zdHNldHVwKHZvaWQpCi17 Ci19Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TT0NfT01BUDI0MjAKLXZvaWQgX19pbml0IG9t YXAyNDIwX2luaXRfZWFybHkodm9pZCkKLXsKLQlvbWFwMl9zZXRfZ2xvYmFsc190YXAoT01BUDI0 MlhfQ0xBU1MsIE9NQVAyX0w0X0lPX0FERFJFU1MoMHg0ODAxNDAwMCkpOwotCW9tYXAyX3NldF9n bG9iYWxzX3NkcmMoT01BUDJfTDNfSU9fQUREUkVTUyhPTUFQMjQyMF9TRFJDX0JBU0UpLAotCQkJ ICAgICAgIE9NQVAyX0wzX0lPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UpKTsKLQlvbWFwMl9j b250cm9sX2Jhc2VfaW5pdCgpOwotCW9tYXAyeHh4X2NoZWNrX3JldmlzaW9uKCk7Ci0Jb21hcDJf cHJjbV9iYXNlX2luaXQoKTsKLQlvbWFwMnh4eF92b2x0YWdlZG9tYWluc19pbml0KCk7Ci0Jb21h cDI0MnhfcG93ZXJkb21haW5zX2luaXQoKTsKLQlvbWFwMjQyeF9jbG9ja2RvbWFpbnNfaW5pdCgp OwotCW9tYXAyNDIwX2h3bW9kX2luaXQoKTsKLQlvbWFwX2h3bW9kX2luaXRfcG9zdHNldHVwKCk7 Ci0Jb21hcF9jbGtfc29jX2luaXQgPSBvbWFwMjQyMF9kdF9jbGtfaW5pdDsKLQlyYXRlX3RhYmxl ID0gb21hcDI0MjBfcmF0ZV90YWJsZTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NPQ19P TUFQMjQzMAotdm9pZCBfX2luaXQgb21hcDI0MzBfaW5pdF9lYXJseSh2b2lkKQotewotCW9tYXAy X3NldF9nbG9iYWxzX3RhcChPTUFQMjQzWF9DTEFTUywgT01BUDJfTDRfSU9fQUREUkVTUygweDQ5 MDBhMDAwKSk7Ci0Jb21hcDJfc2V0X2dsb2JhbHNfc2RyYyhPTUFQMl9MM19JT19BRERSRVNTKE9N QVAyNDNYX1NEUkNfQkFTRSksCi0JCQkgICAgICAgT01BUDJfTDNfSU9fQUREUkVTUyhPTUFQMjQz WF9TTVNfQkFTRSkpOwotCW9tYXAyX2NvbnRyb2xfYmFzZV9pbml0KCk7Ci0Jb21hcDJ4eHhfY2hl Y2tfcmV2aXNpb24oKTsKLQlvbWFwMl9wcmNtX2Jhc2VfaW5pdCgpOwotCW9tYXAyeHh4X3ZvbHRh Z2Vkb21haW5zX2luaXQoKTsKLQlvbWFwMjQzeF9wb3dlcmRvbWFpbnNfaW5pdCgpOwotCW9tYXAy NDN4X2Nsb2NrZG9tYWluc19pbml0KCk7Ci0Jb21hcDI0MzBfaHdtb2RfaW5pdCgpOwotCW9tYXBf aHdtb2RfaW5pdF9wb3N0c2V0dXAoKTsKLQlvbWFwX2Nsa19zb2NfaW5pdCA9IG9tYXAyNDMwX2R0 X2Nsa19pbml0OwotCXJhdGVfdGFibGUgPSBvbWFwMjQzMF9yYXRlX3RhYmxlOwotfQotI2VuZGlm CiAKIC8qCiAgKiBDdXJyZW50bHkgb25seSBib2FyZC1vbWFwM2JlYWdsZS5jIHNob3VsZCBjYWxs IHRoaXMgYmVjYXVzZSBvZiB0aGUKICAqIHNhbWUgbWFjaGluZV9pZCBmb3IgMzR4eCBhbmQgMzZ4 eCBiZWFnbGUuLiBXaWxsIGdldCBmaXhlZCB3aXRoIERULgogICovCi0jaWZkZWYgQ09ORklHX0FS Q0hfT01BUDMKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19pbml0X2Vhcmx5KHZvaWQpCiB7CiAJ b21hcDJfc2V0X2dsb2JhbHNfdGFwKE9NQVAzNDNYX0NMQVNTLCBPTUFQMl9MNF9JT19BRERSRVNT KDB4NDgzMEEwMDApKTsKQEAgLTY2MSwxNiArNTI5LDE4IEBAIHZvaWQgX19pbml0IGRyYTd4eF9p bml0X2xhdGUodm9pZCkKICNlbmRpZgogCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogdm9p ZCBfX2luaXQgb21hcF9zZHJjX2luaXQoc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3Mw LAogCQkJCSAgICAgIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMSkKIHsKIAlvbWFw X3NyYW1faW5pdCgpOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IG9tYXAzX2hhc19zZHJj KCkpIHsKKwlpZiAob21hcDNfaGFzX3NkcmMoKSkgewogCQlvbWFwMl9zZHJjX2luaXQoc2RyY19j czAsIHNkcmNfY3MxKTsKIAkJX29tYXAyX2luaXRfcmVwcm9ncmFtX3NkcmMoKTsKIAl9CiB9Cisj ZW5kaWYKIAogaW50IF9faW5pdCBvbWFwX2Nsa19pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9h cmNoL2FybS9tYWNoLW9tYXAyL2lvbWFwLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbWFwLmgK aW5kZXggNjE5MWQyNDQ0MzhhLi40MDM0NDRiYjY5MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21h Y2gtb21hcDIvaW9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbWFwLmgKQEAgLTQ4 LDUyICs0OCw2IEBACiAjZGVmaW5lIE9NQVAyX0VNVV9JT19PRkZTRVQJCTB4YWE4MDAwMDAJLyog RW11bGF0aW9uICovCiAjZGVmaW5lIE9NQVAyX0VNVV9JT19BRERSRVNTKHBhKQlJT01FTSgocGEp ICsgT01BUDJfRU1VX0lPX09GRlNFVCkKIAotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAq IE9tYXAyIHNwZWNpZmljIElPIG1hcHBpbmcKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwot Ci0vKiBXZSBtYXAgYm90aCBMMyBhbmQgTDQgb24gT01BUDIgKi8KLSNkZWZpbmUgTDNfMjRYWF9Q SFlTCUwzXzI0WFhfQkFTRQkvKiAweDY4MDAwMDAwIC0tPiAweGY4MDAwMDAwKi8KLSNkZWZpbmUg TDNfMjRYWF9WSVJUCShMM18yNFhYX1BIWVMgKyBPTUFQMl9MM19JT19PRkZTRVQpCi0jZGVmaW5l IEwzXzI0WFhfU0laRQlTWl8xTQkJLyogNDRrQiBvZiAxMjhNQiB1c2VkLCB3YW50IDFNQiBzZWN0 ICovCi0jZGVmaW5lIEw0XzI0WFhfUEhZUwlMNF8yNFhYX0JBU0UJLyogMHg0ODAwMDAwMCAtLT4g MHhmYTAwMDAwMCAqLwotI2RlZmluZSBMNF8yNFhYX1ZJUlQJKEw0XzI0WFhfUEhZUyArIE9NQVAy X0w0X0lPX09GRlNFVCkKLSNkZWZpbmUgTDRfMjRYWF9TSVpFCVNaXzFNCQkvKiAxTUIgb2YgMTI4 TUIgdXNlZCwgd2FudCAxTUIgc2VjdCAqLwotCi0jZGVmaW5lIEw0X1dLXzI0M1hfUEhZUwkJTDRf V0tfMjQzWF9CQVNFCS8qIDB4NDkwMDAwMDAgLS0+IDB4ZmIwMDAwMDAgKi8KLSNkZWZpbmUgTDRf V0tfMjQzWF9WSVJUCQkoTDRfV0tfMjQzWF9QSFlTICsgT01BUDJfTDRfSU9fT0ZGU0VUKQotI2Rl ZmluZSBMNF9XS18yNDNYX1NJWkUJCVNaXzFNCi0jZGVmaW5lIE9NQVAyNDNYX0dQTUNfUEhZUwlP TUFQMjQzWF9HUE1DX0JBU0UKLSNkZWZpbmUgT01BUDI0M1hfR1BNQ19WSVJUCShPTUFQMjQzWF9H UE1DX1BIWVMgKyBPTUFQMl9MM19JT19PRkZTRVQpCi0JCQkJCQkvKiAweDZlMDAwMDAwIC0tPiAw eGZlMDAwMDAwICovCi0jZGVmaW5lIE9NQVAyNDNYX0dQTUNfU0laRQlTWl8xTQotI2RlZmluZSBP TUFQMjQzWF9TRFJDX1BIWVMJT01BUDI0M1hfU0RSQ19CQVNFCi0JCQkJCQkvKiAweDZEMDAwMDAw IC0tPiAweGZkMDAwMDAwICovCi0jZGVmaW5lIE9NQVAyNDNYX1NEUkNfVklSVAkoT01BUDI0M1hf U0RSQ19QSFlTICsgT01BUDJfTDNfSU9fT0ZGU0VUKQotI2RlZmluZSBPTUFQMjQzWF9TRFJDX1NJ WkUJU1pfMU0KLSNkZWZpbmUgT01BUDI0M1hfU01TX1BIWVMJT01BUDI0M1hfU01TX0JBU0UKLQkJ CQkJCS8qIDB4NmMwMDAwMDAgLS0+IDB4ZmMwMDAwMDAgKi8KLSNkZWZpbmUgT01BUDI0M1hfU01T X1ZJUlQJKE9NQVAyNDNYX1NNU19QSFlTICsgT01BUDJfTDNfSU9fT0ZGU0VUKQotI2RlZmluZSBP TUFQMjQzWF9TTVNfU0laRQlTWl8xTQotCi0vKiAyNDIwIElWQSAqLwotI2RlZmluZSBEU1BfTUVN XzI0MjBfUEhZUwlPTUFQMjQyMF9EU1BfTUVNX0JBU0UKLQkJCQkJCS8qIDB4NTgwMDAwMDAgLS0+ IDB4ZmMxMDAwMDAgKi8KLSNkZWZpbmUgRFNQX01FTV8yNDIwX1ZJUlQJMHhmYzEwMDAwMAotI2Rl ZmluZSBEU1BfTUVNXzI0MjBfU0laRQkweDI4MDAwCi0jZGVmaW5lIERTUF9JUElfMjQyMF9QSFlT CU9NQVAyNDIwX0RTUF9JUElfQkFTRQotCQkJCQkJLyogMHg1OTAwMDAwMCAtLT4gMHhmYzEyODAw MCAqLwotI2RlZmluZSBEU1BfSVBJXzI0MjBfVklSVAkweGZjMTI4MDAwCi0jZGVmaW5lIERTUF9J UElfMjQyMF9TSVpFCVNaXzRLCi0jZGVmaW5lIERTUF9NTVVfMjQyMF9QSFlTCU9NQVAyNDIwX0RT UF9NTVVfQkFTRQotCQkJCQkJLyogMHg1YTAwMDAwMCAtLT4gMHhmYzEyOTAwMCAqLwotI2RlZmlu ZSBEU1BfTU1VXzI0MjBfVklSVAkweGZjMTI5MDAwCi0jZGVmaW5lIERTUF9NTVVfMjQyMF9TSVpF CVNaXzRLCi0KLS8qIDI0MzAgSVZBMi4xIC0gY3VycmVudGx5IHVubWFwcGVkICovCi0KIC8qCiAg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBPbWFwMyBzcGVjaWZpYyBJTyBtYXBwaW5nCmRpZmYg LS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2wzXzJ4eHguaCBiL2FyY2gvYXJtL21hY2gtb21h cDIvbDNfMnh4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjk3YzYyNDI4YWMu LjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2wzXzJ4eHguaAorKysgL2Rl di9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9yLWxhdGVyICovCi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9s M18yeHh4LmggLSBMMyBmaXJld2FsbCBkZWZpbml0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykg MjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwczovL3d3dy50aS5jb20v Ci0gKglTdW1pdCBTZW13YWwKLSAqLwotI2lmbmRlZiBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNM VURFX1BMQVRfTDNfMlhYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fUExBVF9PTUFQX0lOQ0xVREVf UExBVF9MM18yWFhYX0gKLQotLyogTDMgQ09OTklEcyAqLwotLyogRGlzcGxheSBTdWIgc3lzdGVt IChEU1MpICovCi0jZGVmaW5lIE9NQVAyX0wzX0NPUkVfRldfQ09OTklEX0RTUwkJCTgKLQotI2Vu ZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2w0XzJ4eHguaCBiL2FyY2gvYXJt L21hY2gtb21hcDIvbDRfMnh4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MThl MTA3MmQ3MzAuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2w0XzJ4eHgu aAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1 ZGUvcGxhdC9sNF8yeHh4LmggLSBMNCBmaXJld2FsbCBkZWZpbml0aW9ucwotICoKLSAqIENvcHly aWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwczovL3d3 dy50aS5jb20vCi0gKglTdW1pdCBTZW13YWwKLSAqLwotI2lmbmRlZiBfX0FSQ0hfQVJNX1BMQVRf T01BUF9JTkNMVURFX1BMQVRfTDRfMlhYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fUExBVF9PTUFQ X0lOQ0xVREVfUExBVF9MNF8yWFhYX0gKLQotLyogTDQgQ09SRSAqLwotLyogRGlzcGxheSBTdWIg c3lzdGVtIChEU1MpICovCi0jZGVmaW5lIE9NQVAyNDIwX0w0X0NPUkVfRldfRFNTX0NPUkVfUkVH SU9OCQkJMjgKLSNkZWZpbmUgT01BUDI0MjBfTDRfQ09SRV9GV19EU1NfRElTUENfUkVHSU9OCQkJ MjkKLSNkZWZpbmUgT01BUDI0MjBfTDRfQ09SRV9GV19EU1NfUkZCSV9SRUdJT04JCQkzMAotI2Rl ZmluZSBPTUFQMjQyMF9MNF9DT1JFX0ZXX0RTU19WRU5DX1JFR0lPTgkJCTMxCi0jZGVmaW5lIE9N QVAyNDIwX0w0X0NPUkVfRldfRFNTX1RBX1JFR0lPTgkJCTMyCi0KLSNlbmRpZgpkaWZmIC0tZ2l0 IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NTMzZTkzY2I2My4uMDAwMDAwMDAwMDAw Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCAr MCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwotCi0jZGVmaW5l IE9NQVAyNFhYX05SX01NQwkJMgotI2RlZmluZSBPTUFQMjQyMF9NTUNfU0laRQlPTUFQMV9NTUNf U0laRQotI2RlZmluZSBPTUFQMl9NTUMxX0JBU0UJCTB4NDgwOWMwMDAKLQotI2RlZmluZSBPTUFQ NF9NTUNfUkVHX09GRlNFVAkweDEwMAotCi1zdHJ1Y3Qgb21hcF9od21vZDsKLQotI2lmZGVmIENP TkZJR19TT0NfT01BUDI0MjAKLWludCBvbWFwX21zZGlfcmVzZXQoc3RydWN0IG9tYXBfaHdtb2Qg Km9oKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBvbWFwX21zZGlfcmVzZXQoc3RydWN0IG9t YXBfaHdtb2QgKm9oKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNo L2FybS9tYWNoLW9tYXAyL21zZGkuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXNkaS5jCmRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTJiMmZhNGU0ZjEuLjAwMDAwMDAwMDAwMAotLS0g YS9hcmNoL2FybS9tYWNoLW9tYXAyL21zZGkuYworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAg QEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBNU0RJ IElQIGJsb2NrIHJlc2V0Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRleGFzIEluc3RydW1l bnRzLCBJbmMuCi0gKiBQYXVsIFdhbG1zbGV5Ci0gKgotICogWFhYIFdoYXQgYWJvdXQgcGFkIG11 eGluZz8KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgv ZXJyLmg+Ci0KLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRl ICJjb250cm9sLmgiCi0jaW5jbHVkZSAib21hcF9od21vZC5oIgotI2luY2x1ZGUgIm9tYXBfZGV2 aWNlLmgiCi0jaW5jbHVkZSAibW1jLmgiCi0KLS8qCi0gKiBNU0RJX0NPTl9PRkZTRVQ6IG9mZnNl dCBpbiBieXRlcyBvZiB0aGUgTVNESSBJUCBibG9jaydzIENPTiByZWdpc3RlcgotICogICAgIGZy b20gdGhlIElQIGJsb2NrJ3MgYmFzZSBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgTVNESV9DT05fT0ZG U0VUCQkJCTB4MGMKLQotLyogUmVnaXN0ZXIgYml0ZmllbGRzIGluIHRoZSBDT04gcmVnaXN0ZXIg Ki8KLSNkZWZpbmUgTVNESV9DT05fUE9XX01BU0sJCQlCSVQoMTEpCi0jZGVmaW5lIE1TRElfQ09O X0NMS0RfTUFTSwkJCSgweDNmIDw8IDApCi0jZGVmaW5lIE1TRElfQ09OX0NMS0RfU0hJRlQJCQkw Ci0KLS8qIE1TRElfVEFSR0VUX1JFU0VUX0NMS0Q6IGNsb2NrIGRpdmlzb3IgdG8gdXNlIHRocm91 Z2hvdXQgdGhlIHJlc2V0ICovCi0jZGVmaW5lIE1TRElfVEFSR0VUX1JFU0VUX0NMS0QJCTB4M2Zm Ci0KLS8qKgotICogb21hcF9tc2RpX3Jlc2V0IC0gcmVzZXQgdGhlIE1TREkgSVAgYmxvY2sKLSAq IEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgotICoKLSAqIFRoZSBNU0RJIElQIGJsb2NrIG9uIE9N QVAyNDIwIGhhcyB0byBoYXZlIGJvdGggdGhlIFBPVyBhbmQgQ0xLRAotICogZmllbGRzIHNldCBp bnNpZGUgaXRzIENPTiByZWdpc3RlciBmb3IgYSByZXNldCB0byBjb21wbGV0ZQotICogc3VjY2Vz c2Z1bGx5LiAgVGhpcyBpcyBub3QgZG9jdW1lbnRlZCBpbiB0aGUgVFJNLiAgRm9yIENMS0QsIHdl IHVzZQotICogdGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBpbiB0aGUgbG93ZXN0IHBvc3NpYmxlIGNs b2NrIHJhdGUsIHRvIGF0dGVtcHQKLSAqIHRvIGF2b2lkIGRpc3R1cmJpbmcgYW55IGNhcmRzLgot ICovCi1pbnQgb21hcF9tc2RpX3Jlc2V0KHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKLXsKLQl1MTYg diA9IDA7Ci0JaW50IGMgPSAwOwotCi0JLyogV3JpdGUgdG8gdGhlIFNPRlRSRVNFVCBiaXQgKi8K LQlvbWFwX2h3bW9kX3NvZnRyZXNldChvaCk7Ci0KLQkvKiBFbmFibGUgdGhlIE1TREkgY29yZSBh bmQgaW50ZXJuYWwgY2xvY2sgKi8KLQl2IHw9IE1TRElfQ09OX1BPV19NQVNLOwotCXYgfD0gTVNE SV9UQVJHRVRfUkVTRVRfQ0xLRCA8PCBNU0RJX0NPTl9DTEtEX1NISUZUOwotCW9tYXBfaHdtb2Rf d3JpdGUodiwgb2gsIE1TRElfQ09OX09GRlNFVCk7Ci0KLQkvKiBQb2xsIG9uIFJFU0VURE9ORSBi aXQgKi8KLQlvbWFwX3Rlc3RfdGltZW91dCgob21hcF9od21vZF9yZWFkKG9oLCBvaC0+Y2xhc3Mt PnN5c2MtPnN5c3Nfb2ZmcykKLQkJCSAgICYgU1lTU19SRVNFVERPTkVfTUFTSyksCi0JCQkgIE1B WF9NT0RVTEVfU09GVFJFU0VUX1dBSVQsIGMpOwotCi0JaWYgKGMgPT0gTUFYX01PRFVMRV9TT0ZU UkVTRVRfV0FJVCkKLQkJcHJfd2FybigiJXM6ICVzOiBzb2Z0cmVzZXQgZmFpbGVkICh3YWl0ZWQg JWQgdXNlYylcbiIsCi0JCQlfX2Z1bmNfXywgb2gtPm5hbWUsIE1BWF9NT0RVTEVfU09GVFJFU0VU X1dBSVQpOwotCWVsc2UKLQkJcHJfZGVidWcoIiVzOiAlczogc29mdHJlc2V0IGluICVkIHVzZWNc biIsIF9fZnVuY19fLAotCQkJIG9oLT5uYW1lLCBjKTsKLQotCS8qIERpc2FibGUgdGhlIE1TREkg aW50ZXJuYWwgY2xvY2sgKi8KLQl2ICY9IH5NU0RJX0NPTl9DTEtEX01BU0s7Ci0Jb21hcF9od21v ZF93cml0ZSh2LCBvaCwgTVNESV9DT05fT0ZGU0VUKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0t Z2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMi1yZXN0YXJ0LmMgYi9hcmNoL2FybS9tYWNo LW9tYXAyL29tYXAyLXJlc3RhcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRj Yzc1Yzk3ZDcwLi4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMi1y ZXN0YXJ0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogb21hcDItcmVzdGFydC5jIC0gY29kZSBj b21tb24gdG8gYWxsIE9NQVAyeHh4IG1hY2hpbmVzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAx MiBUZXhhcyBJbnN0cnVtZW50cwotICogUGF1bCBXYWxtc2xleQotICovCi0jaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJzb2MuaCIKLSNpbmNsdWRl ICJjb21tb24uaCIKLSNpbmNsdWRlICJwcm0uaCIKLQotLyoKLSAqIHJlc2V0X3ZpcnRfcHJjbV9z ZXRfY2ssIHJlc2V0X3N5c19jazogcG9pbnRlcnMgdG8gdGhlIHZpcnRfcHJjbV9zZXQKLSAqIGNs b2NrIGFuZCB0aGUgc3lzX2NrLiAgVXNlZCBkdXJpbmcgdGhlIHJlc2V0IHByb2Nlc3MKLSAqLwot c3RhdGljIHN0cnVjdCBjbGsgKnJlc2V0X3ZpcnRfcHJjbV9zZXRfY2ssICpyZXNldF9zeXNfY2s7 Ci0KLS8qIFJlYm9vdCBoYW5kbGluZyAqLwotCi0vKioKLSAqIG9tYXAyeHh4X3Jlc3RhcnQgLSBT ZXQgRFBMTCB0byBieXBhc3MgbW9kZSBmb3IgcmVib290IHRvIHdvcmsKLSAqCi0gKiBTZXQgdGhl IERQTEwgdG8gYnlwYXNzIHNvIHRoYXQgcmVib290IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuICBO bwotICogcmV0dXJuIHZhbHVlLgotICovCi12b2lkIG9tYXAyeHh4X3Jlc3RhcnQoZW51bSByZWJv b3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpCi17Ci0JdTMyIHJhdGU7Ci0KLQlyYXRlID0g Y2xrX2dldF9yYXRlKHJlc2V0X3N5c19jayk7Ci0JY2xrX3NldF9yYXRlKHJlc2V0X3ZpcnRfcHJj bV9zZXRfY2ssIHJhdGUpOwotCi0JLyogWFhYIFNob3VsZCBzYXZlIHRoZSBjbWQgYXJndW1lbnQg Zm9yIHVzZSBhZnRlciB0aGUgcmVib290ICovCi0KLQlvbWFwX3BybV9yZXNldF9zeXN0ZW0oKTsK LX0KLQotLyoqCi0gKiBvbWFwMnh4eF9jb21tb25fbG9va191cF9jbGtzX2Zvcl9yZXNldCAtIGxv b2sgdXAgY2xvY2tzIG5lZWRlZCBmb3IgcmVzdGFydAotICoKLSAqIFNvbWUgY2xvY2tzIG5lZWQg dG8gYmUgbG9va2VkIHVwIGluIGFkdmFuY2UgZm9yIHRoZSBTb0MgcmVzdGFydAotICogb3BlcmF0 aW9uIHRvIHdvcmsgLSBzZWUgb21hcDJ4eHhfcmVzdGFydCgpLiAgUmV0dXJucyAtRUlOVkFMIHVw b24KLSAqIGVycm9yIG9yIDAgdXBvbiBzdWNjZXNzLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBv bWFwMnh4eF9jb21tb25fbG9va191cF9jbGtzX2Zvcl9yZXNldCh2b2lkKQotewotCXJlc2V0X3Zp cnRfcHJjbV9zZXRfY2sgPSBjbGtfZ2V0KE5VTEwsICJ2aXJ0X3ByY21fc2V0Iik7Ci0JaWYgKElT X0VSUihyZXNldF92aXJ0X3ByY21fc2V0X2NrKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXNl dF9zeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKLQlpZiAoSVNfRVJSKHJlc2V0X3N5 c19jaykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci1vbWFwX3Bvc3Rjb3Jl X2luaXRjYWxsKG9tYXAyeHh4X2NvbW1vbl9sb29rX3VwX2Nsa3NfZm9yX3Jlc2V0KTsKZGlmZiAt LWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDI0eHguaCBiL2FyY2gvYXJtL21hY2gtb21h cDIvb21hcDI0eHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDllY2MwNTc4Mjky Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwMjR4eC5oCisrKyAv ZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAtb3ItbGF0ZXIgKi8KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHByb2Nlc3Nv ciBzcGVjaWZpYyBkZWZpbml0aW9ucwotICogb2YgdGhlIFRJIE9NQVAyNFhYLgotICoKLSAqIENv cHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cy4KLSAqIENvcHlyaWdodCAoQykgMjAw NyBOb2tpYSBDb3Jwb3JhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDJfSAot I2RlZmluZSBfX0FTTV9BUkNIX09NQVAyX0gKLQotLyoKLSAqIFBsZWFzZSBwbGFjZSBvbmx5IGJh c2UgZGVmaW5lcyBoZXJlIGFuZCBwdXQgdGhlIHJlc3QgaW4gZGV2aWNlCi0gKiBzcGVjaWZpYyBo ZWFkZXJzLiBOb3RlIGFsc28gdGhhdCBzb21lIG9mIHRoZXNlIGRlZmluZXMgYXJlIG5lZWRlZAot ICogZm9yIG9tYXAxIHRvIGNvbXBpbGUgd2l0aG91dCBhZGRpbmcgaWZkZWZzLgotICovCi0KLSNk ZWZpbmUgTDRfMjRYWF9CQVNFCQkweDQ4MDAwMDAwCi0jZGVmaW5lIEw0X1dLXzI0M1hfQkFTRQkJ MHg0OTAwMDAwMAotI2RlZmluZSBMM18yNFhYX0JBU0UJCTB4NjgwMDAwMDAKLQotLyogaW50ZXJy dXB0IGNvbnRyb2xsZXIgKi8KLSNkZWZpbmUgT01BUDI0WFhfSUNfQkFTRQkoTDRfMjRYWF9CQVNF ICsgMHhmZTAwMCkKLSNkZWZpbmUgT01BUDI0WFhfSVZBX0lOVENfQkFTRQkweDQwMDAwMDAwCi0K LSNkZWZpbmUgT01BUDI0MlhfQ1RSTF9CQVNFCUw0XzI0WFhfQkFTRQotI2RlZmluZSBPTUFQMjQy MF8zMktTWU5DVF9CQVNFCShMNF8yNFhYX0JBU0UgKyAweDQwMDApCi0jZGVmaW5lIE9NQVAyNDIw X1BSQ01fQkFTRQkoTDRfMjRYWF9CQVNFICsgMHg4MDAwKQotI2RlZmluZSBPTUFQMjQyMF9DTV9C QVNFCShMNF8yNFhYX0JBU0UgKyAweDgwMDApCi0jZGVmaW5lIE9NQVAyNDIwX1BSTV9CQVNFCU9N QVAyNDIwX0NNX0JBU0UKLSNkZWZpbmUgT01BUDI0MjBfU0RSQ19CQVNFCShMM18yNFhYX0JBU0Ug KyAweDkwMDApCi0jZGVmaW5lIE9NQVAyNDIwX1NNU19CQVNFCTB4NjgwMDgwMDAKLSNkZWZpbmUg T01BUDI0MjBfR1BNQ19CQVNFCTB4NjgwMGEwMDAKLQotI2RlZmluZSBPTUFQMjQzMF8zMktTWU5D VF9CQVNFCShMNF9XS18yNDNYX0JBU0UgKyAweDIwMDAwKQotI2RlZmluZSBPTUFQMjQzMF9QUkNN X0JBU0UJKEw0X1dLXzI0M1hfQkFTRSArIDB4NjAwMCkKLSNkZWZpbmUgT01BUDI0MzBfQ01fQkFT RQkoTDRfV0tfMjQzWF9CQVNFICsgMHg2MDAwKQotI2RlZmluZSBPTUFQMjQzMF9QUk1fQkFTRQlP TUFQMjQzMF9DTV9CQVNFCi0KLSNkZWZpbmUgT01BUDI0M1hfU01TX0JBU0UJMHg2QzAwMDAwMAot I2RlZmluZSBPTUFQMjQzWF9TRFJDX0JBU0UJMHg2RDAwMDAwMAotI2RlZmluZSBPTUFQMjQzWF9H UE1DX0JBU0UJMHg2RTAwMDAwMAotI2RlZmluZSBPTUFQMjQzWF9TQ01fQkFTRQkoTDRfV0tfMjQz WF9CQVNFICsgMHgyMDAwKQotI2RlZmluZSBPTUFQMjQzWF9DVFJMX0JBU0UJT01BUDI0M1hfU0NN X0JBU0UKLSNkZWZpbmUgT01BUDI0M1hfSFNfQkFTRQkoTDRfMjRYWF9CQVNFICsgMHgwMDBhYzAw MCkKLQotLyogRFNQIFNTICovCi0jZGVmaW5lIE9NQVAyNDIwX0RTUF9CQVNFCTB4NTgwMDAwMDAK LSNkZWZpbmUgT01BUDI0MjBfRFNQX01FTV9CQVNFCShPTUFQMjQyMF9EU1BfQkFTRSArIDB4MCkK LSNkZWZpbmUgT01BUDI0MjBfRFNQX0lQSV9CQVNFCShPTUFQMjQyMF9EU1BfQkFTRSArIDB4MTAw MDAwMCkKLSNkZWZpbmUgT01BUDI0MjBfRFNQX01NVV9CQVNFCShPTUFQMjQyMF9EU1BfQkFTRSAr IDB4MjAwMDAwMCkKLQotI2RlZmluZSBPTUFQMjQzWF9EU1BfQkFTRQkweDVDMDAwMDAwCi0jZGVm aW5lIE9NQVAyNDNYX0RTUF9NRU1fQkFTRQkoT01BUDI0M1hfRFNQX0JBU0UgKyAweDApCi0jZGVm aW5lIE9NQVAyNDNYX0RTUF9NTVVfQkFTRQkoT01BUDI0M1hfRFNQX0JBU0UgKyAweDEwMDAwMDAp Ci0KLS8qIE1haWxib3ggKi8KLSNkZWZpbmUgT01BUDI0WFhfTUFJTEJPWF9CQVNFCShMNF8yNFhY X0JBU0UgKyAweDk0MDAwKQotCi0vKiBDYW1lcmEgKi8KLSNkZWZpbmUgT01BUDI0WFhfQ0FNRVJB X0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4NTIwMDApCi0KLS8qIFNlY3VyaXR5ICovCi0jZGVmaW5l IE9NQVAyNFhYX1NFQ19CQVNFCShMNF8yNFhYX0JBU0UgKyAweEEwMDAwKQotI2RlZmluZSBPTUFQ MjRYWF9TRUNfUk5HX0JBU0UJKE9NQVAyNFhYX1NFQ19CQVNFICsgMHgwMDAwKQotI2RlZmluZSBP TUFQMjRYWF9TRUNfREVTX0JBU0UJKE9NQVAyNFhYX1NFQ19CQVNFICsgMHgyMDAwKQotI2RlZmlu ZSBPTUFQMjRYWF9TRUNfU0hBMU1ENV9CQVNFIChPTUFQMjRYWF9TRUNfQkFTRSArIDB4NDAwMCkK LSNkZWZpbmUgT01BUDI0WFhfU0VDX0FFU19CQVNFCShPTUFQMjRYWF9TRUNfQkFTRSArIDB4NjAw MCkKLSNkZWZpbmUgT01BUDI0WFhfU0VDX1BLQV9CQVNFCShPTUFQMjRYWF9TRUNfQkFTRSArIDB4 ODAwMCkKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUDJfSCAqLwotCmRpZmYgLS1naXQgYS9h cmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21h cF9od21vZC5jCmluZGV4IDAzY2Q1MjNkZmY4Ny4uYzkxODM5OWVhNzM1IDEwMDY0NAotLS0gYS9h cmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAy L29tYXBfaHdtb2QuYwpAQCAtMTUzLDkgKzE1Myw3IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCiAj aW5jbHVkZSAiY2xvY2tkb21haW4uaCIKICNpbmNsdWRlICJoZHExdy5oIgotI2luY2x1ZGUgIm1t Yy5oIgogI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCi0jaW5jbHVkZSAiY20yeHh4LmgiCiAjaW5j bHVkZSAiY20zeHh4LmgiCiAjaW5jbHVkZSAiY20zM3h4LmgiCiAjaW5jbHVkZSAicHJtLmgiCkBA IC0zNDY5LDEwICszNDY3LDYgQEAgc3RhdGljIGludCBvbWFwX2h3bW9kX2FsbG9jYXRlX21vZHVs ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCwKIAlyZXR1cm4gLUVO T01FTTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX2h3bW9kX3Jlc2V0IG9tYXAyNHh4 X3Jlc2V0X3F1aXJrc1tdID0gewotCXsgLm1hdGNoID0gIm1zZGkiLCAubGVuID0gNCwgLnJlc2V0 ID0gb21hcF9tc2RpX3Jlc2V0LCB9LAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX2h3 bW9kX3Jlc2V0IG9tYXBfcmVzZXRfcXVpcmtzW10gPSB7CiAJeyAubWF0Y2ggPSAiZHNzX2NvcmUi LCAubGVuID0gOCwgLnJlc2V0ID0gb21hcF9kc3NfcmVzZXQsIH0sCiAJeyAubWF0Y2ggPSAiaGRx MXciLCAubGVuID0gNSwgLnJlc2V0ID0gb21hcF9oZHExd19yZXNldCwgfSwKQEAgLTM1MDMsMTEg KzM0OTcsNiBAQCBzdGF0aWMgdm9pZAogb21hcF9od21vZF9pbml0X3Jlc2V0X3F1aXJrcyhzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCwKIAkJCSAgICAgY29uc3Qgc3Ry dWN0IHRpX3N5c2NfbW9kdWxlX2RhdGEgKmRhdGEpCiB7Ci0JaWYgKHNvY19pc19vbWFwMjR4eCgp KQotCQlvbWFwX2h3bW9kX2luaXRfcmVzZXRfcXVpcmsoZGV2LCBvaCwgZGF0YSwKLQkJCQkJICAg IG9tYXAyNHh4X3Jlc2V0X3F1aXJrcywKLQkJCQkJICAgIEFSUkFZX1NJWkUob21hcDI0eHhfcmVz ZXRfcXVpcmtzKSk7Ci0KIAlvbWFwX2h3bW9kX2luaXRfcmVzZXRfcXVpcmsoZGV2LCBvaCwgZGF0 YSwgb21hcF9yZXNldF9xdWlya3MsCiAJCQkJICAgIEFSUkFZX1NJWkUob21hcF9yZXNldF9xdWly a3MpKTsKIH0KQEAgLTM5MTQsMTIgKzM5MDMsNyBAQCBpbnQgb21hcF9od21vZF9zZXRfcG9zdHNl dHVwX3N0YXRlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTggc3RhdGUpCiAgKi8KIHZvaWQgX19p bml0IG9tYXBfaHdtb2RfaW5pdCh2b2lkKQogewotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewot CQlzb2Nfb3BzLndhaXRfdGFyZ2V0X3JlYWR5ID0gX29tYXAyeHh4XzN4eHhfd2FpdF90YXJnZXRf cmVhZHk7Ci0JCXNvY19vcHMuYXNzZXJ0X2hhcmRyZXNldCA9IF9vbWFwMl9hc3NlcnRfaGFyZHJl c2V0OwotCQlzb2Nfb3BzLmRlYXNzZXJ0X2hhcmRyZXNldCA9IF9vbWFwMl9kZWFzc2VydF9oYXJk cmVzZXQ7Ci0JCXNvY19vcHMuaXNfaGFyZHJlc2V0X2Fzc2VydGVkID0gX29tYXAyX2lzX2hhcmRy ZXNldF9hc3NlcnRlZDsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJaWYgKGNw dV9pc19vbWFwMzR4eCgpKSB7CiAJCXNvY19vcHMud2FpdF90YXJnZXRfcmVhZHkgPSBfb21hcDJ4 eHhfM3h4eF93YWl0X3RhcmdldF9yZWFkeTsKIAkJc29jX29wcy5hc3NlcnRfaGFyZHJlc2V0ID0g X29tYXAyX2Fzc2VydF9oYXJkcmVzZXQ7CiAJCXNvY19vcHMuZGVhc3NlcnRfaGFyZHJlc2V0ID0g X29tYXAyX2RlYXNzZXJ0X2hhcmRyZXNldDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21h cDIvb21hcF9od21vZC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmgKaW5kZXgg ZGNhYjdhMDFjMTBlLi5iNjBjZDA5YzE5OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21h cDIvb21hcF9od21vZC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5oCkBA IC02NjMsOCArNjYzLDYgQEAgb21hcF9od21vZF9mb3JfZWFjaF9ieV9jbGFzcyhjb25zdCBjaGFy ICpjbGFzc25hbWUsCiAgKiBDaGlwIHZhcmlhbnQtc3BlY2lmaWMgaHdtb2QgaW5pdCByb3V0aW5l cyAtIFhYWCBzaG91bGQgYmUgY29udmVydGVkCiAgKiB0byB1c2UgaW5pdGNhbGxzIG9uY2UgdGhl IGluaXRpYWwgYm9vdCBvcmRlcmluZyBpcyBzdHJhaWdodGVuZWQgb3V0CiAgKi8KLWV4dGVybiBp bnQgb21hcDI0MjBfaHdtb2RfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgb21hcDI0MzBfaHdtb2Rf aW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgb21hcDN4eHhfaHdtb2RfaW5pdCh2b2lkKTsKIGV4dGVy biBpbnQgZG04MTR4X2h3bW9kX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGRtODE2eF9od21vZF9p bml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0 MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmQ5ZGM5ZjA5NjIuLjAwMDAwMDAwMDAwMAot LS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKKysrIC9kZXYv bnVsbApAQCAtMSw0MDIgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb25seQotLyoKLSAqIG9tYXBfaHdtb2RfMjQyMF9kYXRhLmMgLSBoYXJkd2FyZSBtb2R1bGVz IHByZXNlbnQgb24gdGhlIE9NQVAyNDIwIGNoaXBzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5 LTIwMTEgTm9raWEgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAxMiBUZXhhcyBJbnN0 cnVtZW50cywgSW5jLgotICogUGF1bCBXYWxtc2xleQotICoKLSAqIFhYWCBoYW5kbGUgY3Jvc3Ni YXIvc2hhcmVkIGxpbmsgZGlmZmVyZW5jZSBmb3IgTDM/Ci0gKiBYWFggdGhlc2Ugc2hvdWxkIGJl IG1hcmtlZCBpbml0ZGF0YSBmb3IgbXVsdGktT01BUCBrZXJuZWxzCi0gKi8KLQotI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RhdGEvaTJjLW9tYXAuaD4KLQotI2luY2x1ZGUgIm9tYXBfaHdtb2Qu aCIKLSNpbmNsdWRlICJsM18yeHh4LmgiCi0jaW5jbHVkZSAibDRfMnh4eC5oIgotCi0jaW5jbHVk ZSAib21hcF9od21vZF9jb21tb25fZGF0YS5oIgotCi0jaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4 LmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgotI2luY2x1ZGUgImkyYy5oIgotI2lu Y2x1ZGUgIm1tYy5oIgotI2luY2x1ZGUgIndkX3RpbWVyLmgiCi0KLS8qCi0gKiBPTUFQMjQyMCBo YXJkd2FyZSBtb2R1bGUgaW50ZWdyYXRpb24gZGF0YQotICoKLSAqIEFsbCBvZiB0aGUgZGF0YSBp biB0aGlzIHNlY3Rpb24gc2hvdWxkIGJlIGF1dG9nZW5lcmF0YWJsZSBmcm9tIHRoZQotICogVEkg aGFyZHdhcmUgZGF0YWJhc2Ugb3Igb3RoZXIgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24uICBEYXRh IHRoYXQKLSAqIGlzIGRyaXZlci1zcGVjaWZpYyBvciBkcml2ZXIta2VybmVsIGludGVncmF0aW9u LXNwZWNpZmljIGJlbG9uZ3MKLSAqIGVsc2V3aGVyZS4KLSAqLwotCi0vKgotICogSVAgYmxvY2tz Ci0gKi8KLQotLyogSVZBMSAoSVZBMSkgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFz cyBpdmExX2h3bW9kX2NsYXNzID0gewotCS5uYW1lCQk9ICJpdmExIiwKLX07Ci0KLXN0YXRpYyBz dHJ1Y3Qgb21hcF9od21vZF9yc3RfaW5mbyBvbWFwMjQyMF9pdmFfcmVzZXRzW10gPSB7Ci0JeyAu bmFtZSA9ICJpdmEiLCAucnN0X3NoaWZ0ID0gOCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFw X2h3bW9kIG9tYXAyNDIwX2l2YV9od21vZCA9IHsKLQkubmFtZQkJPSAiaXZhIiwKLQkuY2xhc3MJ CT0gJml2YTFfaHdtb2RfY2xhc3MsCi0JLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCi0JLnJz dF9saW5lcwk9IG9tYXAyNDIwX2l2YV9yZXNldHMsCi0JLnJzdF9saW5lc19jbnQJPSBBUlJBWV9T SVpFKG9tYXAyNDIwX2l2YV9yZXNldHMpLAotCS5tYWluX2Nsawk9ICJpdmExX2lmY2siLAotfTsK LQotLyogRFNQICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3MgZHNwX2h3bW9kX2Ns YXNzID0gewotCS5uYW1lCQk9ICJkc3AiLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9k X3JzdF9pbmZvIG9tYXAyNDIwX2RzcF9yZXNldHNbXSA9IHsKLQl7IC5uYW1lID0gImxvZ2ljIiwg LnJzdF9zaGlmdCA9IDAgfSwKLQl7IC5uYW1lID0gIm1tdSIsIC5yc3Rfc2hpZnQgPSAxIH0sCi19 OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZHNwX2h3bW9kID0gewotCS5u YW1lCQk9ICJkc3AiLAotCS5jbGFzcwkJPSAmZHNwX2h3bW9kX2NsYXNzLAotCS5jbGtkbV9uYW1l CT0gImRzcF9jbGtkbSIsCi0JLnJzdF9saW5lcwk9IG9tYXAyNDIwX2RzcF9yZXNldHMsCi0JLnJz dF9saW5lc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2RzcF9yZXNldHMpLAotCS5tYWluX2Ns awk9ICJkc3BfZmNrIiwKLX07Ci0KLS8qIEkyQyBjb21tb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgb21h cF9od21vZF9jbGFzc19zeXNjb25maWcgaTJjX3N5c2MgPSB7Ci0JLnJldl9vZmZzCT0gMHgwMCwK LQkuc3lzY19vZmZzCT0gMHgyMCwKLQkuc3lzc19vZmZzCT0gMHgxMCwKLQkuc3lzY19mbGFncwk9 IChTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAotCS5zeXNjX2Zp ZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBf aHdtb2RfY2xhc3MgaTJjX2NsYXNzID0gewotCS5uYW1lCQk9ICJpMmMiLAotCS5zeXNjCQk9ICZp MmNfc3lzYywKLQkucmVzZXQJCT0gJm9tYXBfaTJjX3Jlc2V0LAotfTsKLQotLyogSTJDMSAqLwot c3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2kyYzFfaHdtb2QgPSB7Ci0JLm5hbWUJ CT0gImkyYzEiLAotCS5tYWluX2Nsawk9ICJpMmMxX2ZjayIsCi0JLnByY20JCT0gewotCQkub21h cDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0g MSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjQyMF9TVF9JMkMxX1NISUZULAotCQl9LAot CX0sCi0JLmNsYXNzCQk9ICZpMmNfY2xhc3MsCi0JLyoKLQkgKiBGcm9tIG1hY2gtb21hcDIvcG0y NHh4LmM6ICJQdXR0aW5nIE1QVSBpbnRvIHRoZSBXRkkgc3RhdGUKLQkgKiB3aGlsZSBhIHRyYW5z ZmVyIGlzIGFjdGl2ZSBzZWVtcyB0byBjYXVzZSB0aGUgSTJDIGJsb2NrIHRvCi0JICogdGltZW91 dC4gV2h5PyBHb29kIHF1ZXN0aW9uLiIKLQkgKi8KLQkuZmxhZ3MJCT0gKEhXTU9EXzE2QklUX1JF RyB8IEhXTU9EX0JMT0NLX1dGSSksCi19OwotCi0vKiBJMkMyICovCi1zdGF0aWMgc3RydWN0IG9t YXBfaHdtb2Qgb21hcDI0MjBfaTJjMl9od21vZCA9IHsKLQkubmFtZQkJPSAiaTJjMiIsCi0JLm1h aW5fY2xrCT0gImkyYzJfZmNrIiwKLQkucHJjbQkJPSB7Ci0JCS5vbWFwMiA9IHsKLQkJCS5tb2R1 bGVfb2ZmcyA9IENPUkVfTU9ELAotCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAotCQkJLmlkbGVzdF9p ZGxlX2JpdCA9IE9NQVAyNDIwX1NUX0kyQzJfU0hJRlQsCi0JCX0sCi0JfSwKLQkuY2xhc3MJCT0g JmkyY19jbGFzcywKLQkuZmxhZ3MJCT0gSFdNT0RfMTZCSVRfUkVHLAotfTsKLQotLyogbWFpbGJv eCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX21haWxib3hfaHdtb2QgPSB7 Ci0JLm5hbWUJCT0gIm1haWxib3giLAotCS5jbGFzcwkJPSAmb21hcDJ4eHhfbWFpbGJveF9od21v ZF9jbGFzcywKLQkubWFpbl9jbGsJPSAibWFpbGJveGVzX2ljayIsCi0JLnByY20JCT0gewotCQku b21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lk ID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9NQUlMQk9YRVNfU0hJRlQs Ci0JCX0sCi0JfSwKLX07Ci0KLS8qCi0gKiAnbWNic3AnIGNsYXNzCi0gKiBtdWx0aSBjaGFubmVs IGJ1ZmZlcmVkIHNlcmlhbCBwb3J0IGNvbnRyb2xsZXIKLSAqLwotCi1zdGF0aWMgc3RydWN0IG9t YXBfaHdtb2RfY2xhc3Mgb21hcDI0MjBfbWNic3BfaHdtb2RfY2xhc3MgPSB7Ci0JLm5hbWUgPSAi bWNic3AiLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29wdF9jbGsgbWNic3Bfb3B0 X2Nsa3NbXSA9IHsKLQl7IC5yb2xlID0gInBhZF9mY2siLCAuY2xrID0gIm1jYnNwX2Nsa3MiIH0s Ci0JeyAucm9sZSA9ICJwcmNtX2ZjayIsIC5jbGsgPSAiZnVuY185Nm1fY2siIH0sCi19OwotCi0v KiBtY2JzcDEgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9tY2JzcDFfaHdt b2QgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwMSIsCi0JLmNsYXNzCQk9ICZvbWFwMjQyMF9tY2JzcF9o d21vZF9jbGFzcywKLQkubWFpbl9jbGsJPSAibWNic3AxX2ZjayIsCi0JLnByY20JCT0gewotCQku b21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lk ID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9NQ0JTUDFfU0hJRlQsCi0J CX0sCi0JfSwKLQkub3B0X2Nsa3MJPSBtY2JzcF9vcHRfY2xrcywKLQkub3B0X2Nsa3NfY250CT0g QVJSQVlfU0laRShtY2JzcF9vcHRfY2xrcyksCi19OwotCi0vKiBtY2JzcDIgKi8KLXN0YXRpYyBz dHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9tY2JzcDJfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gIm1j YnNwMiIsCi0JLmNsYXNzCQk9ICZvbWFwMjQyMF9tY2JzcF9od21vZF9jbGFzcywKLQkubWFpbl9j bGsJPSAibWNic3AyX2ZjayIsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxl X29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMSwKLQkJCS5pZGxlc3RfaWRs ZV9iaXQgPSBPTUFQMjRYWF9TVF9NQ0JTUDJfU0hJRlQsCi0JCX0sCi0JfSwKLQkub3B0X2Nsa3MJ PSBtY2JzcF9vcHRfY2xrcywKLQkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShtY2JzcF9vcHRf Y2xrcyksCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9t YXAyNDIwX21zZGlfc3lzYyA9IHsKLQkucmV2X29mZnMJPSAweDNjLAotCS5zeXNjX29mZnMJPSAw eDY0LAotCS5zeXNzX29mZnMJPSAweDY4LAotCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NPRlRS RVNFVCB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCi0JLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdt b2Rfc3lzY190eXBlMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFw MjQyMF9tc2RpX2h3bW9kX2NsYXNzID0gewotCS5uYW1lCT0gIm1zZGkiLAotCS5zeXNjCT0gJm9t YXAyNDIwX21zZGlfc3lzYywKLQkucmVzZXQJPSAmb21hcF9tc2RpX3Jlc2V0LAotfTsKLQotLyog bXNkaTEgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9tc2RpMV9od21vZCA9 IHsKLQkubmFtZQkJPSAibXNkaTEiLAotCS5jbGFzcwkJPSAmb21hcDI0MjBfbXNkaV9od21vZF9j bGFzcywKLQkubWFpbl9jbGsJPSAibW1jX2ZjayIsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7 Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMSwKLQkJ CS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjQyMF9TVF9NTUNfU0hJRlQsCi0JCX0sCi0JfSwKLQku ZmxhZ3MJCT0gSFdNT0RfMTZCSVRfUkVHLAotfTsKLQotLyogSERRMVcvMS13aXJlICovCi1zdGF0 aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfaGRxMXdfaHdtb2QgPSB7Ci0JLm5hbWUJCT0g ImhkcTF3IiwKLQkubWFpbl9jbGsJPSAiaGRxX2ZjayIsCi0JLnByY20JCT0gewotCQkub21hcDIg PSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMSwK LQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9IRFFfU0hJRlQsCi0JCX0sCi0JfSwK LQkuY2xhc3MJCT0gJm9tYXAyX2hkcTF3X2NsYXNzLAotfTsKLQotLyoKLSAqIGludGVyZmFjZXMK LSAqLwotCi0vKiBMNCBDT1JFIC0+IEkyQzEgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9t YXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX2kyYzEgPSB7Ci0JLm1hc3RlcgkJPSAm b21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyNDIwX2kyYzFfaHdtb2Qs Ci0JLmNsawkJPSAiaTJjMV9pY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VS X1NETUEsCi19OwotCi0vKiBMNCBDT1JFIC0+IEkyQzIgaW50ZXJmYWNlICovCi1zdGF0aWMgc3Ry dWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX2kyYzIgPSB7Ci0JLm1hc3Rl cgkJPSAmb21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyNDIwX2kyYzJf aHdtb2QsCi0JLmNsawkJPSAiaTJjMl9pY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9D UF9VU0VSX1NETUEsCi19OwotCi0vKiBJVkEgPC0gTDMgaW50ZXJmYWNlICovCi1zdGF0aWMgc3Ry dWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2wzX19pdmEgPSB7Ci0JLm1hc3RlcgkJPSAm b21hcDJ4eHhfbDNfbWFpbl9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyNDIwX2l2YV9od21vZCwK LQkuY2xrCQk9ICJjb3JlX2wzX2NrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNF Ul9TRE1BLAotfTsKLQotLyogRFNQIDwtIEwzIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBv bWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sM19fZHNwID0gewotCS5tYXN0ZXIJCT0gJm9tYXAy eHh4X2wzX21haW5faHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwMjQyMF9kc3BfaHdtb2QsCi0JLmNs awkJPSAiZHNwX2ljayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwK LX07Ci0KLS8qIGw0X3drdXAgLT4gd2RfdGltZXIyICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdt b2Rfb2NwX2lmIG9tYXAyNDIwX2w0X3drdXBfX3dkX3RpbWVyMiA9IHsKLQkubWFzdGVyCQk9ICZv bWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfd2RfdGltZXIyX2h3 bW9kLAotCS5jbGsJCT0gIm1wdV93ZHRfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBP Q1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfd2t1cCAtPiBncGlvMSAqLwotc3RhdGljIHN0cnVj dCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF93a3VwX19ncGlvMSA9IHsKLQkubWFzdGVy CQk9ICZvbWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfZ3BpbzFf aHdtb2QsCi0JLmNsawkJPSAiZ3Bpb3NfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBP Q1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfd2t1cCAtPiBncGlvMiAqLwotc3RhdGljIHN0cnVj dCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF93a3VwX19ncGlvMiA9IHsKLQkubWFzdGVy CQk9ICZvbWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfZ3BpbzJf aHdtb2QsCi0JLmNsawkJPSAiZ3Bpb3NfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBP Q1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfd2t1cCAtPiBncGlvMyAqLwotc3RhdGljIHN0cnVj dCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF93a3VwX19ncGlvMyA9IHsKLQkubWFzdGVy CQk9ICZvbWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfZ3BpbzNf aHdtb2QsCi0JLmNsawkJPSAiZ3Bpb3NfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBP Q1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfd2t1cCAtPiBncGlvNCAqLwotc3RhdGljIHN0cnVj dCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sNF93a3VwX19ncGlvNCA9IHsKLQkubWFzdGVy CQk9ICZvbWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfZ3BpbzRf aHdtb2QsCi0JLmNsawkJPSAiZ3Bpb3NfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBP Q1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfY29yZSAtPiBtYWlsYm94ICovCi1zdGF0aWMgc3Ry dWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX21haWxib3ggPSB7Ci0JLm1h c3RlcgkJPSAmb21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyNDIwX21h aWxib3hfaHdtb2QsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07 Ci0KLS8qIGw0X2NvcmUgLT4gbWNic3AxICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2Nw X2lmIG9tYXAyNDIwX2w0X2NvcmVfX21jYnNwMSA9IHsKLQkubWFzdGVyCQk9ICZvbWFwMnh4eF9s NF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDI0MjBfbWNic3AxX2h3bW9kLAotCS5jbGsJ CT0gIm1jYnNwMV9pY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEs Ci19OwotCi0vKiBsNF9jb3JlIC0+IG1jYnNwMiAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9k X29jcF9pZiBvbWFwMjQyMF9sNF9jb3JlX19tY2JzcDIgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDJ4 eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyNDIwX21jYnNwMl9od21vZCwKLQku Y2xrCQk9ICJtY2JzcDJfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9T RE1BLAotfTsKLQotLyogbDRfY29yZSAtPiBtc2RpMSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3 bW9kX29jcF9pZiBvbWFwMjQyMF9sNF9jb3JlX19tc2RpMSA9IHsKLQkubWFzdGVyCQk9ICZvbWFw Mnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDI0MjBfbXNkaTFfaHdtb2QsCi0J LmNsawkJPSAibW1jX2ljayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RN QSwKLX07Ci0KLS8qIGw0X2NvcmUgLT4gaGRxMXcgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0 IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX2hkcTF3ID0gewotCS5tYXN0ZXIJ CT0gJm9tYXAyeHh4X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwMjQyMF9oZHExd19o d21vZCwKLQkuY2xrCQk9ICJoZHFfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1Bf VVNFUl9TRE1BLAotCS5mbGFncwkJPSBPTUFQX0ZJUkVXQUxMX0w0IHwgT0NQSUZfU1dTVVBfSURM RSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDNfX2dw bWMgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDJ4eHhfbDNfbWFpbl9od21vZCwKLQkuc2xhdmUJCT0g Jm9tYXAyeHh4X2dwbWNfaHdtb2QsCi0JLmNsawkJPSAiY29yZV9sM19jayIsCi0JLnVzZXIJCT0g T0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9o d21vZF9vY3BfaWYgKm9tYXAyNDIwX2h3bW9kX29jcF9pZnNbXSBfX2luaXRkYXRhID0gewotCSZv bWFwMnh4eF9sM19tYWluX19sNF9jb3JlLAotCSZvbWFwMnh4eF9tcHVfX2wzX21haW4sCi0JJm9t YXAyeHh4X2Rzc19fbDMsCi0JJm9tYXAyeHh4X2w0X2NvcmVfX21jc3BpMSwKLQkmb21hcDJ4eHhf bDRfY29yZV9fbWNzcGkyLAotCSZvbWFwMnh4eF9sNF9jb3JlX19sNF93a3VwLAotCSZvbWFwMl9s NF9jb3JlX191YXJ0MSwKLQkmb21hcDJfbDRfY29yZV9fdWFydDIsCi0JJm9tYXAyX2w0X2NvcmVf X3VhcnQzLAotCSZvbWFwMjQyMF9sNF9jb3JlX19pMmMxLAotCSZvbWFwMjQyMF9sNF9jb3JlX19p MmMyLAotCSZvbWFwMjQyMF9sM19faXZhLAotCSZvbWFwMjQyMF9sM19fZHNwLAotCSZvbWFwMnh4 eF9sNF9jb3JlX190aW1lcjMsCi0JJm9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyNCwKLQkmb21hcDJ4 eHhfbDRfY29yZV9fdGltZXI1LAotCSZvbWFwMnh4eF9sNF9jb3JlX190aW1lcjYsCi0JJm9tYXAy eHh4X2w0X2NvcmVfX3RpbWVyNywKLQkmb21hcDJ4eHhfbDRfY29yZV9fdGltZXI4LAotCSZvbWFw Mnh4eF9sNF9jb3JlX190aW1lcjksCi0JJm9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyMTAsCi0JJm9t YXAyeHh4X2w0X2NvcmVfX3RpbWVyMTEsCi0JJm9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyMTIsCi0J Jm9tYXAyNDIwX2w0X3drdXBfX3dkX3RpbWVyMiwKLQkmb21hcDJ4eHhfbDRfY29yZV9fZHNzLAot CSZvbWFwMnh4eF9sNF9jb3JlX19kc3NfZGlzcGMsCi0JJm9tYXAyeHh4X2w0X2NvcmVfX2Rzc19y ZmJpLAotCSZvbWFwMnh4eF9sNF9jb3JlX19kc3NfdmVuYywKLQkmb21hcDI0MjBfbDRfd2t1cF9f Z3BpbzEsCi0JJm9tYXAyNDIwX2w0X3drdXBfX2dwaW8yLAotCSZvbWFwMjQyMF9sNF93a3VwX19n cGlvMywKLQkmb21hcDI0MjBfbDRfd2t1cF9fZ3BpbzQsCi0JJm9tYXAyNDIwX2w0X2NvcmVfX21h aWxib3gsCi0JJm9tYXAyNDIwX2w0X2NvcmVfX21jYnNwMSwKLQkmb21hcDI0MjBfbDRfY29yZV9f bWNic3AyLAotCSZvbWFwMjQyMF9sNF9jb3JlX19tc2RpMSwKLQkmb21hcDJ4eHhfbDRfY29yZV9f cm5nLAotCSZvbWFwMnh4eF9sNF9jb3JlX19zaGFtLAotCSZvbWFwMnh4eF9sNF9jb3JlX19hZXMs Ci0JJm9tYXAyNDIwX2w0X2NvcmVfX2hkcTF3LAotCSZvbWFwMjQyMF9sM19fZ3BtYywKLQlOVUxM LAotfTsKLQotaW50IF9faW5pdCBvbWFwMjQyMF9od21vZF9pbml0KHZvaWQpCi17Ci0Jb21hcF9o d21vZF9pbml0KCk7Ci0JcmV0dXJuIG9tYXBfaHdtb2RfcmVnaXN0ZXJfbGlua3Mob21hcDI0MjBf aHdtb2Rfb2NwX2lmcyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBf aHdtb2RfMjQzMF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9k YXRhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MzIwMDgwMWIzNC4uMDAwMDAw MDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwor KysgL2Rldi9udWxsCkBAIC0xLDYwNiArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5Ci0vKgotICogb21hcF9od21vZF8yNDMwX2RhdGEuYyAtIGhhcmR3YXJl IG1vZHVsZXMgcHJlc2VudCBvbiB0aGUgT01BUDI0MzAgY2hpcHMKLSAqCi0gKiBDb3B5cmlnaHQg KEMpIDIwMDktMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRl eGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBQYXVsIFdhbG1zbGV5Ci0gKgotICogWFhYIGhhbmRs ZSBjcm9zc2Jhci9zaGFyZWQgbGluayBkaWZmZXJlbmNlIGZvciBMMz8KLSAqIFhYWCB0aGVzZSBz aG91bGQgYmUgbWFya2VkIGluaXRkYXRhIGZvciBtdWx0aS1PTUFQIGtlcm5lbHMKLSAqLwotCi0j aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9pMmMtb21hcC5oPgotI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RhdGEvaHNtbWMtb21hcC5oPgotCi0jaW5jbHVkZSAib21hcF9od21vZC5oIgot I2luY2x1ZGUgImwzXzJ4eHguaCIKLQotI2luY2x1ZGUgInNvYy5oIgotI2luY2x1ZGUgIm9tYXBf aHdtb2RfY29tbW9uX2RhdGEuaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCi0jaW5j bHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAiaTJjLmgiCi0jaW5jbHVkZSAid2Rf dGltZXIuaCIKLQotLyoKLSAqIE9NQVAyNDMwIGhhcmR3YXJlIG1vZHVsZSBpbnRlZ3JhdGlvbiBk YXRhCi0gKgotICogQWxsIG9mIHRoZSBkYXRhIGluIHRoaXMgc2VjdGlvbiBzaG91bGQgYmUgYXV0 b2dlbmVyYXRhYmxlIGZyb20gdGhlCi0gKiBUSSBoYXJkd2FyZSBkYXRhYmFzZSBvciBvdGhlciB0 ZWNobmljYWwgZG9jdW1lbnRhdGlvbi4gIERhdGEgdGhhdAotICogaXMgZHJpdmVyLXNwZWNpZmlj IG9yIGRyaXZlci1rZXJuZWwgaW50ZWdyYXRpb24tc3BlY2lmaWMgYmVsb25ncwotICogZWxzZXdo ZXJlLgotICovCi0KLS8qCi0gKiBJUCBibG9ja3MKLSAqLwotCi0vKiBJVkEyIChJVkEyKSAqLwot c3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX3JzdF9pbmZvIG9tYXAyNDMwX2l2YV9yZXNldHNbXSA9 IHsKLQl7IC5uYW1lID0gImxvZ2ljIiwgLnJzdF9zaGlmdCA9IDAgfSwKLQl7IC5uYW1lID0gIm1t dSIsIC5yc3Rfc2hpZnQgPSAxIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21h cDI0MzBfaXZhX2h3bW9kID0gewotCS5uYW1lCQk9ICJpdmEiLAotCS5jbGFzcwkJPSAmaXZhX2h3 bW9kX2NsYXNzLAotCS5jbGtkbV9uYW1lCT0gImRzcF9jbGtkbSIsCi0JLnJzdF9saW5lcwk9IG9t YXAyNDMwX2l2YV9yZXNldHMsCi0JLnJzdF9saW5lc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMw X2l2YV9yZXNldHMpLAotCS5tYWluX2Nsawk9ICJkc3BfZmNrIiwKLX07Ci0KLS8qIEkyQyBjb21t b24gKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgaTJjX3N5c2Mg PSB7Ci0JLnJldl9vZmZzCT0gMHgwMCwKLQkuc3lzY19vZmZzCT0gMHgyMCwKLQkuc3lzc19vZmZz CT0gMHgxMCwKLQkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19B VVRPSURMRSB8Ci0JCQkgICBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAotCS5zeXNjX2ZpZWxkcwk9 ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rf Y2xhc3MgaTJjX2NsYXNzID0gewotCS5uYW1lCQk9ICJpMmMiLAotCS5zeXNjCQk9ICZpMmNfc3lz YywKLQkucmVzZXQJCT0gJm9tYXBfaTJjX3Jlc2V0LAotfTsKLQotLyogSTJDMSAqLwotc3RhdGlj IHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2kyYzFfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImky YzEiLAotCS5mbGFncwkJPSBIV01PRF8xNkJJVF9SRUcsCi0JLm1haW5fY2xrCT0gImkyY2hzMV9m Y2siLAotCS5wcmNtCQk9IHsKLQkJLm9tYXAyID0gewotCQkJLyoKLQkJCSAqIE5PVEU6IFRoZSBD TV9GQ0xLRU4qIGFuZCBDTV9JQ0xLRU4qIGZvcgotCQkJICogSTJDSFMgSVAncyBkbyBub3QgZm9s bG93IHRoZSB1c3VhbCBwYXR0ZXJuLgotCQkJICogcHJjbV9yZWdfaWQgYWxvbmUgY2Fubm90IGJl IHVzZWQgdG8gcHJvZ3JhbQotCQkJICogdGhlIGljbGsgYW5kIGZjbGsuIE5lZWRzIHRvIGJlIGhh bmRsZWQgdXNpbmcKLQkJCSAqIGFkZGl0aW9uYWwgZmxhZ3Mgd2hlbiBjbGsgaGFuZGxpbmcgaXMg bW92ZWQKLQkJCSAqIHRvIGh3bW9kIGZyYW1ld29yay4KLQkJCSAqLwotCQkJLm1vZHVsZV9vZmZz ID0gQ09SRV9NT0QsCi0JCQkuaWRsZXN0X3JlZ19pZCA9IDEsCi0JCQkuaWRsZXN0X2lkbGVfYml0 ID0gT01BUDI0MzBfU1RfSTJDSFMxX1NISUZULAotCQl9LAotCX0sCi0JLmNsYXNzCQk9ICZpMmNf Y2xhc3MsCi19OwotCi0vKiBJMkMyICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0 MzBfaTJjMl9od21vZCA9IHsKLQkubmFtZQkJPSAiaTJjMiIsCi0JLmZsYWdzCQk9IEhXTU9EXzE2 QklUX1JFRywKLQkubWFpbl9jbGsJPSAiaTJjaHMyX2ZjayIsCi0JLnByY20JCT0gewotCQkub21h cDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0g MSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjQzMF9TVF9JMkNIUzJfU0hJRlQsCi0JCX0s Ci0JfSwKLQkuY2xhc3MJCT0gJmkyY19jbGFzcywKLX07Ci0KLS8qIGdwaW81ICovCi1zdGF0aWMg c3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzVfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImdw aW81IiwKLQkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKLQkubWFp bl9jbGsJPSAiZ3BpbzVfZmNrIiwKLQkucHJjbQkJPSB7Ci0JCS5vbWFwMiA9IHsKLQkJCS5tb2R1 bGVfb2ZmcyA9IENPUkVfTU9ELAotCQkJLmlkbGVzdF9yZWdfaWQgPSAyLAotCQkJLmlkbGVzdF9p ZGxlX2JpdCA9IE9NQVAyNDMwX1NUX0dQSU81X1NISUZULAotCQl9LAotCX0sCi0JLmNsYXNzCQk9 ICZvbWFwMnh4eF9ncGlvX2h3bW9kX2NsYXNzLAotfTsKLQotLyogbWFpbGJveCAqLwotc3RhdGlj IHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21haWxib3hfaHdtb2QgPSB7Ci0JLm5hbWUJCT0g Im1haWxib3giLAotCS5jbGFzcwkJPSAmb21hcDJ4eHhfbWFpbGJveF9od21vZF9jbGFzcywKLQku bWFpbl9jbGsJPSAibWFpbGJveGVzX2ljayIsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0J CQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMSwKLQkJCS5p ZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9NQUlMQk9YRVNfU0hJRlQsCi0JCX0sCi0JfSwK LX07Ci0KLS8qIG1jc3BpMyAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21j c3BpM19od21vZCA9IHsKLQkubmFtZQkJPSAibWNzcGkzIiwKLQkubWFpbl9jbGsJPSAibWNzcGkz X2ZjayIsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JF X01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMiwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQ MjQzMF9TVF9NQ1NQSTNfU0hJRlQsCi0JCX0sCi0JfSwKLQkuY2xhc3MJCT0gJm9tYXAyeHh4X21j c3BpX2NsYXNzLAotfTsKLQotLyogdXNiaHNvdGcgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21v ZF9jbGFzc19zeXNjb25maWcgb21hcDI0MzBfdXNiaHNvdGdfc3lzYyA9IHsKLQkucmV2X29mZnMJ PSAweDA0MDAsCi0JLnN5c2Nfb2Zmcwk9IDB4MDQwNCwKLQkuc3lzc19vZmZzCT0gMHgwNDA4LAot CS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX01JRExFTU9ERXwK LQkJCSAgU1lTQ19IQVNfRU5BV0FLRVVQIHwgU1lTQ19IQVNfU09GVFJFU0VUIHwKLQkJCSAgU1lT Q19IQVNfQVVUT0lETEUpLAotCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8 IFNJRExFX1NNQVJUIHwKLQkJCSAgTVNUQU5EQllfRk9SQ0UgfCBNU1RBTkRCWV9OTyB8IE1TVEFO REJZX1NNQVJUKSwKLQkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAotfTsK LQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIHVzYm90Z19jbGFzcyA9IHsKLQkubmFt ZSA9ICJ1c2JvdGciLAotCS5zeXNjID0gJm9tYXAyNDMwX3VzYmhzb3RnX3N5c2MsCi19OwotCi0v KiB1c2Jfb3RnX2hzICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfdXNiaHNv dGdfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gInVzYl9vdGdfaHMiLAotCS5tYWluX2Nsawk9ICJ1c2Jo c19pY2siLAotCS5wcmNtCQk9IHsKLQkJLm9tYXAyID0gewotCQkJLm1vZHVsZV9vZmZzID0gQ09S RV9NT0QsCi0JCQkuaWRsZXN0X3JlZ19pZCA9IDEsCi0JCQkuaWRsZXN0X2lkbGVfYml0ID0gT01B UDI0MzBfU1RfVVNCSFNfU0hJRlQsCi0JCX0sCi0JfSwKLQkuY2xhc3MJCT0gJnVzYm90Z19jbGFz cywKLQkvKgotCSAqIEVycmF0dW0gSUQ6IGk0NzkgIGlkbGVfcmVxIC8gaWRsZV9hY2sgbWVjaGFu aXNtIHBvdGVudGlhbGx5Ci0JICogYnJva2VuIHdoZW4gYXV0b2lkbGUgaXMgZW5hYmxlZAotCSAq IHdvcmthcm91bmQgaXMgdG8gZGlzYWJsZSB0aGUgYXV0b2lkbGUgYml0IGF0IG1vZHVsZSBsZXZl bC4KLQkgKi8KLQkuZmxhZ3MJCT0gSFdNT0RfTk9fT0NQX0FVVE9JRExFIHwgSFdNT0RfU1dTVVBf U0lETEUKLQkJCQl8IEhXTU9EX1NXU1VQX01TVEFOREJZLAotfTsKLQotLyoKLSAqICdtY2JzcCcg Y2xhc3MKLSAqIG11bHRpIGNoYW5uZWwgYnVmZmVyZWQgc2VyaWFsIHBvcnQgY29udHJvbGxlcgot ICovCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDI0MzBf bWNic3Bfc3lzYyA9IHsKLQkucmV2X29mZnMJPSAweDAwN0MsCi0JLnN5c2Nfb2Zmcwk9IDB4MDA4 QywKLQkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TT0ZUUkVTRVQpLAotCS5zeXNjX2ZpZWxkcyAg ICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdt b2RfY2xhc3Mgb21hcDI0MzBfbWNic3BfaHdtb2RfY2xhc3MgPSB7Ci0JLm5hbWUgPSAibWNic3Ai LAotCS5zeXNjID0gJm9tYXAyNDMwX21jYnNwX3N5c2MsCi19OwotCi1zdGF0aWMgc3RydWN0IG9t YXBfaHdtb2Rfb3B0X2NsayBtY2JzcF9vcHRfY2xrc1tdID0gewotCXsgLnJvbGUgPSAicGFkX2Zj ayIsIC5jbGsgPSAibWNic3BfY2xrcyIgfSwKLQl7IC5yb2xlID0gInByY21fZmNrIiwgLmNsayA9 ICJmdW5jXzk2bV9jayIgfSwKLX07Ci0KLS8qIG1jYnNwMSAqLwotc3RhdGljIHN0cnVjdCBvbWFw X2h3bW9kIG9tYXAyNDMwX21jYnNwMV9od21vZCA9IHsKLQkubmFtZQkJPSAibWNic3AxIiwKLQku Y2xhc3MJCT0gJm9tYXAyNDMwX21jYnNwX2h3bW9kX2NsYXNzLAotCS5tYWluX2Nsawk9ICJtY2Jz cDFfZmNrIiwKLQkucHJjbQkJPSB7Ci0JCS5vbWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9IENP UkVfTU9ELAotCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9N QVAyNFhYX1NUX01DQlNQMV9TSElGVCwKLQkJfSwKLQl9LAotCS5vcHRfY2xrcwk9IG1jYnNwX29w dF9jbGtzLAotCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKG1jYnNwX29wdF9jbGtzKSwKLX07 Ci0KLS8qIG1jYnNwMiAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21jYnNw Ml9od21vZCA9IHsKLQkubmFtZQkJPSAibWNic3AyIiwKLQkuY2xhc3MJCT0gJm9tYXAyNDMwX21j YnNwX2h3bW9kX2NsYXNzLAotCS5tYWluX2Nsawk9ICJtY2JzcDJfZmNrIiwKLQkucHJjbQkJPSB7 Ci0JCS5vbWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAotCQkJLmlkbGVzdF9y ZWdfaWQgPSAxLAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX01DQlNQMl9TSElG VCwKLQkJfSwKLQl9LAotCS5vcHRfY2xrcwk9IG1jYnNwX29wdF9jbGtzLAotCS5vcHRfY2xrc19j bnQJPSBBUlJBWV9TSVpFKG1jYnNwX29wdF9jbGtzKSwKLX07Ci0KLS8qIG1jYnNwMyAqLwotc3Rh dGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21jYnNwM19od21vZCA9IHsKLQkubmFtZQkJ PSAibWNic3AzIiwKLQkuY2xhc3MJCT0gJm9tYXAyNDMwX21jYnNwX2h3bW9kX2NsYXNzLAotCS5t YWluX2Nsawk9ICJtY2JzcDNfZmNrIiwKLQkucHJjbQkJPSB7Ci0JCS5vbWFwMiA9IHsKLQkJCS5t b2R1bGVfb2ZmcyA9IENPUkVfTU9ELAotCQkJLmlkbGVzdF9yZWdfaWQgPSAyLAotCQkJLmlkbGVz dF9pZGxlX2JpdCA9IE9NQVAyNDMwX1NUX01DQlNQM19TSElGVCwKLQkJfSwKLQl9LAotCS5vcHRf Y2xrcwk9IG1jYnNwX29wdF9jbGtzLAotCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKG1jYnNw X29wdF9jbGtzKSwKLX07Ci0KLS8qIG1jYnNwNCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9k IG9tYXAyNDMwX21jYnNwNF9od21vZCA9IHsKLQkubmFtZQkJPSAibWNic3A0IiwKLQkuY2xhc3MJ CT0gJm9tYXAyNDMwX21jYnNwX2h3bW9kX2NsYXNzLAotCS5tYWluX2Nsawk9ICJtY2JzcDRfZmNr IiwKLQkucHJjbQkJPSB7Ci0JCS5vbWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9E LAotCQkJLmlkbGVzdF9yZWdfaWQgPSAyLAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNDMw X1NUX01DQlNQNF9TSElGVCwKLQkJfSwKLQl9LAotCS5vcHRfY2xrcwk9IG1jYnNwX29wdF9jbGtz LAotCS5vcHRfY2xrc19jbnQJPSBBUlJBWV9TSVpFKG1jYnNwX29wdF9jbGtzKSwKLX07Ci0KLS8q IG1jYnNwNSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21jYnNwNV9od21v ZCA9IHsKLQkubmFtZQkJPSAibWNic3A1IiwKLQkuY2xhc3MJCT0gJm9tYXAyNDMwX21jYnNwX2h3 bW9kX2NsYXNzLAotCS5tYWluX2Nsawk9ICJtY2JzcDVfZmNrIiwKLQkucHJjbQkJPSB7Ci0JCS5v bWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAotCQkJLmlkbGVzdF9yZWdfaWQg PSAyLAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNDMwX1NUX01DQlNQNV9TSElGVCwKLQkJ fSwKLQl9LAotCS5vcHRfY2xrcwk9IG1jYnNwX29wdF9jbGtzLAotCS5vcHRfY2xrc19jbnQJPSBB UlJBWV9TSVpFKG1jYnNwX29wdF9jbGtzKSwKLX07Ci0KLS8qIE1NQy9TRC9TRElPIGNvbW1vbiAq Lwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwMjQzMF9tbWNf c3lzYyA9IHsKLQkucmV2X29mZnMJPSAweDFmYywKLQkuc3lzY19vZmZzCT0gMHgxMCwKLQkuc3lz c19vZmZzCT0gMHgxNCwKLQkuc3lzY19mbGFncwk9IChTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwg U1lTQ19IQVNfU0lETEVNT0RFIHwKLQkJCSAgIFNZU0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFT X1NPRlRSRVNFVCB8Ci0JCQkgICBTWVNDX0hBU19BVVRPSURMRSB8IFNZU1NfSEFTX1JFU0VUX1NU QVRVUyksCi0JLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01B UlQpLAotCS5zeXNjX2ZpZWxkcyAgICA9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCi19OwotCi1z dGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDI0MzBfbW1jX2NsYXNzID0gewotCS5u YW1lID0gIm1tYyIsCi0JLnN5c2MgPSAmb21hcDI0MzBfbW1jX3N5c2MsCi19OwotCi0vKiBNTUMv U0QvU0RJTzEgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIG9tYXAyNDMwX21t YzFfb3B0X2Nsa3NbXSA9IHsKLQl7IC5yb2xlID0gImRiY2siLCAuY2xrID0gIm1tY2hzZGIxX2Zj ayIgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9oc21tY19kZXZfYXR0ciBtbWMxX2Rldl9h dHRyID0gewotCS5mbGFncyA9IE9NQVBfSFNNTUNfU1VQUE9SVFNfRFVBTF9WT0xULAotfTsKLQot c3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21tYzFfaHdtb2QgPSB7Ci0JLm5hbWUJ CT0gIm1tYzEiLAotCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAot CS5vcHRfY2xrcwk9IG9tYXAyNDMwX21tYzFfb3B0X2Nsa3MsCi0JLm9wdF9jbGtzX2NudAk9IEFS UkFZX1NJWkUob21hcDI0MzBfbW1jMV9vcHRfY2xrcyksCi0JLm1haW5fY2xrCT0gIm1tY2hzMV9m Y2siLAotCS5wcmNtCQk9IHsKLQkJLm9tYXAyID0gewotCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9N T0QsCi0JCQkuaWRsZXN0X3JlZ19pZCA9IDIsCi0JCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0 MzBfU1RfTU1DSFMxX1NISUZULAotCQl9LAotCX0sCi0JLmRldl9hdHRyCT0gJm1tYzFfZGV2X2F0 dHIsCi0JLmNsYXNzCQk9ICZvbWFwMjQzMF9tbWNfY2xhc3MsCi19OwotCi0vKiBNTUMvU0QvU0RJ TzIgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRfY2xrIG9tYXAyNDMwX21tYzJfb3B0 X2Nsa3NbXSA9IHsKLQl7IC5yb2xlID0gImRiY2siLCAuY2xrID0gIm1tY2hzZGIyX2ZjayIgfSwK LX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tbWMyX2h3bW9kID0gewot CS5uYW1lCQk9ICJtbWMyIiwKLQkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9S RVNFVCwKLQkub3B0X2Nsa3MJPSBvbWFwMjQzMF9tbWMyX29wdF9jbGtzLAotCS5vcHRfY2xrc19j bnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX21tYzJfb3B0X2Nsa3MpLAotCS5tYWluX2Nsawk9ICJt bWNoczJfZmNrIiwKLQkucHJjbQkJPSB7Ci0JCS5vbWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9 IENPUkVfTU9ELAotCQkJLmlkbGVzdF9yZWdfaWQgPSAyLAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9 IE9NQVAyNDMwX1NUX01NQ0hTMl9TSElGVCwKLQkJfSwKLQl9LAotCS5jbGFzcwkJPSAmb21hcDI0 MzBfbW1jX2NsYXNzLAotfTsKLQotLyogSERRMVcvMS13aXJlICovCi1zdGF0aWMgc3RydWN0IG9t YXBfaHdtb2Qgb21hcDI0MzBfaGRxMXdfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImhkcTF3IiwKLQku bWFpbl9jbGsJPSAiaGRxX2ZjayIsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9k dWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMSwKLQkJCS5pZGxlc3Rf aWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9IRFFfU0hJRlQsCi0JCX0sCi0JfSwKLQkuY2xhc3MJCT0g Jm9tYXAyX2hkcTF3X2NsYXNzLAotfTsKLQotLyoKLSAqIGludGVyZmFjZXMKLSAqLwotCi0vKiBM MyAtPiBMNF9DT1JFIGludGVyZmFjZSAqLwotLyogbDNfY29yZSAtPiB1c2Joc290ZyAgaW50ZXJm YWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX3VzYmhzb3Rn X19sMyA9IHsKLQkubWFzdGVyCQk9ICZvbWFwMjQzMF91c2Joc290Z19od21vZCwKLQkuc2xhdmUJ CT0gJm9tYXAyeHh4X2wzX21haW5faHdtb2QsCi0JLmNsawkJPSAiY29yZV9sM19jayIsCi0JLnVz ZXIJCT0gT0NQX1VTRVJfTVBVLAotfTsKLQotLyogTDQgQ09SRSAtPiBJMkMxIGludGVyZmFjZSAq Lwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19pMmMx ID0gewotCS5tYXN0ZXIJCT0gJm9tYXAyeHh4X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZv bWFwMjQzMF9pMmMxX2h3bW9kLAotCS5jbGsJCT0gImkyYzFfaWNrIiwKLQkudXNlcgkJPSBPQ1Bf VVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogTDQgQ09SRSAtPiBJMkMyIGludGVy ZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3Jl X19pMmMyID0gewotCS5tYXN0ZXIJCT0gJm9tYXAyeHh4X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZl CQk9ICZvbWFwMjQzMF9pMmMyX2h3bW9kLAotCS5jbGsJCT0gImkyYzJfaWNrIiwKLQkudXNlcgkJ PSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogIGw0X2NvcmUgLT51c2Jo c290ZyAgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAy NDMwX2w0X2NvcmVfX3VzYmhzb3RnID0gewotCS5tYXN0ZXIJCT0gJm9tYXAyeHh4X2w0X2NvcmVf aHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwMjQzMF91c2Joc290Z19od21vZCwKLQkuY2xrCQk9ICJ1 c2JfbDRfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUsCi19OwotCi0vKiBMNCBDT1JFIC0+ IE1NQzEgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAy NDMwX2w0X2NvcmVfX21tYzEgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDJ4eHhfbDRfY29yZV9od21v ZCwKLQkuc2xhdmUJCT0gJm9tYXAyNDMwX21tYzFfaHdtb2QsCi0JLmNsawkJPSAibW1jaHMxX2lj ayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07Ci0KLS8qIEw0 IENPUkUgLT4gTU1DMiBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3Bf aWYgb21hcDI0MzBfbDRfY29yZV9fbW1jMiA9IHsKLQkubWFzdGVyCQk9ICZvbWFwMnh4eF9sNF9j b3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDI0MzBfbW1jMl9od21vZCwKLQkuY2xrCQk9ICJt bWNoczJfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsK LQotLyogbDQgY29yZSAtPiBtY3NwaTMgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBf aHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX21jc3BpMyA9IHsKLQkubWFzdGVyCQk9ICZv bWFwMnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDI0MzBfbWNzcGkzX2h3bW9k LAotCS5jbGsJCT0gIm1jc3BpM19pY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9V U0VSX1NETUEsCi19OwotCi0vKiBJVkEyIDwtIEwzIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVj dCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sM19faXZhID0gewotCS5tYXN0ZXIJCT0gJm9t YXAyeHh4X2wzX21haW5faHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwMjQzMF9pdmFfaHdtb2QsCi0J LmNsawkJPSAiY29yZV9sM19jayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJf U0RNQSwKLX07Ci0KLS8qIGw0X3drdXAgLT4gd2RfdGltZXIyICovCi1zdGF0aWMgc3RydWN0IG9t YXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X3drdXBfX3dkX3RpbWVyMiA9IHsKLQkubWFzdGVy CQk9ICZvbWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfd2RfdGlt ZXIyX2h3bW9kLAotCS5jbGsJCT0gIm1wdV93ZHRfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9N UFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfd2t1cCAtPiBncGlvMSAqLwotc3RhdGlj IHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF93a3VwX19ncGlvMSA9IHsKLQku bWFzdGVyCQk9ICZvbWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhf Z3BpbzFfaHdtb2QsCi0JLmNsawkJPSAiZ3Bpb3NfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9N UFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfd2t1cCAtPiBncGlvMiAqLwotc3RhdGlj IHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF93a3VwX19ncGlvMiA9IHsKLQku bWFzdGVyCQk9ICZvbWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhf Z3BpbzJfaHdtb2QsCi0JLmNsawkJPSAiZ3Bpb3NfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9N UFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfd2t1cCAtPiBncGlvMyAqLwotc3RhdGlj IHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF93a3VwX19ncGlvMyA9IHsKLQku bWFzdGVyCQk9ICZvbWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhf Z3BpbzNfaHdtb2QsCi0JLmNsawkJPSAiZ3Bpb3NfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9N UFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfd2t1cCAtPiBncGlvNCAqLwotc3RhdGlj IHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF93a3VwX19ncGlvNCA9IHsKLQku bWFzdGVyCQk9ICZvbWFwMnh4eF9sNF93a3VwX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhf Z3BpbzRfaHdtb2QsCi0JLmNsawkJPSAiZ3Bpb3NfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9N UFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfY29yZSAtPiBncGlvNSAqLwotc3RhdGlj IHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19ncGlvNSA9IHsKLQku bWFzdGVyCQk9ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDI0MzBf Z3BpbzVfaHdtb2QsCi0JLmNsawkJPSAiZ3BpbzVfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9N UFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfY29yZSAtPiBtYWlsYm94ICovCi1zdGF0 aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX21haWxib3ggPSB7 Ci0JLm1hc3RlcgkJPSAmb21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAy NDMwX21haWxib3hfaHdtb2QsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RN QSwKLX07Ci0KLS8qIGw0X2NvcmUgLT4gbWNic3AxICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdt b2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX21jYnNwMSA9IHsKLQkubWFzdGVyCQk9ICZvbWFw Mnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDI0MzBfbWNic3AxX2h3bW9kLAot CS5jbGsJCT0gIm1jYnNwMV9pY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VS X1NETUEsCi19OwotCi0vKiBsNF9jb3JlIC0+IG1jYnNwMiAqLwotc3RhdGljIHN0cnVjdCBvbWFw X2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19tY2JzcDIgPSB7Ci0JLm1hc3RlcgkJPSAm b21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyNDMwX21jYnNwMl9od21v ZCwKLQkuY2xrCQk9ICJtY2JzcDJfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1Bf VVNFUl9TRE1BLAotfTsKLQotLyogbDRfY29yZSAtPiBtY2JzcDMgKi8KLXN0YXRpYyBzdHJ1Y3Qg b21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDRfY29yZV9fbWNic3AzID0gewotCS5tYXN0ZXIJ CT0gJm9tYXAyeHh4X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwMjQzMF9tY2JzcDNf aHdtb2QsCi0JLmNsawkJPSAibWNic3AzX2ljayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwg T0NQX1VTRVJfU0RNQSwKLX07Ci0KLS8qIGw0X2NvcmUgLT4gbWNic3A0ICovCi1zdGF0aWMgc3Ry dWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX21jYnNwNCA9IHsKLQkubWFz dGVyCQk9ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDI0MzBfbWNi c3A0X2h3bW9kLAotCS5jbGsJCT0gIm1jYnNwNF9pY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01Q VSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBsNF9jb3JlIC0+IG1jYnNwNSAqLwotc3RhdGlj IHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19tY2JzcDUgPSB7Ci0J Lm1hc3RlcgkJPSAmb21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyNDMw X21jYnNwNV9od21vZCwKLQkuY2xrCQk9ICJtY2JzcDVfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNF Ul9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfY29yZSAtPiBoZHExdyAqLwotc3Rh dGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19oZHExdyA9IHsK LQkubWFzdGVyCQk9ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDI0 MzBfaGRxMXdfaHdtb2QsCi0JLmNsawkJPSAiaGRxX2ljayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJf TVBVIHwgT0NQX1VTRVJfU0RNQSwKLQkuZmxhZ3MJCT0gT01BUF9GSVJFV0FMTF9MNCB8IE9DUElG X1NXU1VQX0lETEUsCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAy NDMwX2wzX19ncG1jID0gewotCS5tYXN0ZXIJCT0gJm9tYXAyeHh4X2wzX21haW5faHdtb2QsCi0J LnNsYXZlCQk9ICZvbWFwMnh4eF9ncG1jX2h3bW9kLAotCS5jbGsJCT0gImNvcmVfbDNfY2siLAot CS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi1zdGF0aWMgc3Ry dWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9od21vZF9vY3BfaWZzW10gX19pbml0ZGF0 YSA9IHsKLQkmb21hcDJ4eHhfbDNfbWFpbl9fbDRfY29yZSwKLQkmb21hcDJ4eHhfbXB1X19sM19t YWluLAotCSZvbWFwMnh4eF9kc3NfX2wzLAotCSZvbWFwMjQzMF91c2Joc290Z19fbDMsCi0JJm9t YXAyNDMwX2w0X2NvcmVfX2kyYzEsCi0JJm9tYXAyNDMwX2w0X2NvcmVfX2kyYzIsCi0JJm9tYXAy eHh4X2w0X2NvcmVfX2w0X3drdXAsCi0JJm9tYXAyX2w0X2NvcmVfX3VhcnQxLAotCSZvbWFwMl9s NF9jb3JlX191YXJ0MiwKLQkmb21hcDJfbDRfY29yZV9fdWFydDMsCi0JJm9tYXAyNDMwX2w0X2Nv cmVfX3VzYmhzb3RnLAotCSZvbWFwMjQzMF9sNF9jb3JlX19tbWMxLAotCSZvbWFwMjQzMF9sNF9j b3JlX19tbWMyLAotCSZvbWFwMnh4eF9sNF9jb3JlX19tY3NwaTEsCi0JJm9tYXAyeHh4X2w0X2Nv cmVfX21jc3BpMiwKLQkmb21hcDI0MzBfbDRfY29yZV9fbWNzcGkzLAotCSZvbWFwMjQzMF9sM19f aXZhLAotCSZvbWFwMnh4eF9sNF9jb3JlX190aW1lcjMsCi0JJm9tYXAyeHh4X2w0X2NvcmVfX3Rp bWVyNCwKLQkmb21hcDJ4eHhfbDRfY29yZV9fdGltZXI1LAotCSZvbWFwMnh4eF9sNF9jb3JlX190 aW1lcjYsCi0JJm9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyNywKLQkmb21hcDJ4eHhfbDRfY29yZV9f dGltZXI4LAotCSZvbWFwMnh4eF9sNF9jb3JlX190aW1lcjksCi0JJm9tYXAyeHh4X2w0X2NvcmVf X3RpbWVyMTAsCi0JJm9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyMTEsCi0JJm9tYXAyeHh4X2w0X2Nv cmVfX3RpbWVyMTIsCi0JJm9tYXAyNDMwX2w0X3drdXBfX3dkX3RpbWVyMiwKLQkmb21hcDJ4eHhf bDRfY29yZV9fZHNzLAotCSZvbWFwMnh4eF9sNF9jb3JlX19kc3NfZGlzcGMsCi0JJm9tYXAyeHh4 X2w0X2NvcmVfX2Rzc19yZmJpLAotCSZvbWFwMnh4eF9sNF9jb3JlX19kc3NfdmVuYywKLQkmb21h cDI0MzBfbDRfd2t1cF9fZ3BpbzEsCi0JJm9tYXAyNDMwX2w0X3drdXBfX2dwaW8yLAotCSZvbWFw MjQzMF9sNF93a3VwX19ncGlvMywKLQkmb21hcDI0MzBfbDRfd2t1cF9fZ3BpbzQsCi0JJm9tYXAy NDMwX2w0X2NvcmVfX2dwaW81LAotCSZvbWFwMjQzMF9sNF9jb3JlX19tYWlsYm94LAotCSZvbWFw MjQzMF9sNF9jb3JlX19tY2JzcDEsCi0JJm9tYXAyNDMwX2w0X2NvcmVfX21jYnNwMiwKLQkmb21h cDI0MzBfbDRfY29yZV9fbWNic3AzLAotCSZvbWFwMjQzMF9sNF9jb3JlX19tY2JzcDQsCi0JJm9t YXAyNDMwX2w0X2NvcmVfX21jYnNwNSwKLQkmb21hcDI0MzBfbDRfY29yZV9faGRxMXcsCi0JJm9t YXAyeHh4X2w0X2NvcmVfX3JuZywKLQkmb21hcDJ4eHhfbDRfY29yZV9fc2hhbSwKLQkmb21hcDJ4 eHhfbDRfY29yZV9fYWVzLAotCSZvbWFwMjQzMF9sM19fZ3BtYywKLQlOVUxMLAotfTsKLQotaW50 IF9faW5pdCBvbWFwMjQzMF9od21vZF9pbml0KHZvaWQpCi17Ci0Jb21hcF9od21vZF9pbml0KCk7 Ci0JcmV0dXJuIG9tYXBfaHdtb2RfcmVnaXN0ZXJfbGlua3Mob21hcDI0MzBfaHdtb2Rfb2NwX2lm cyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMnh4eF9p bnRlcmNvbm5lY3RfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzJ4eHhf aW50ZXJjb25uZWN0X2RhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYxZDM0 OTE0ZWQ5Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9k XzJ4eHhfaW50ZXJjb25uZWN0X2RhdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBA Ci0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogb21hcF9o d21vZF8yeHh4X2ludGVyY29ubmVjdF9kYXRhLmMgLSBjb21tb24gaW50ZXJjb25uZWN0IGRhdGEg Zm9yIE9NQVAyeHh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgTm9raWEgQ29ycG9y YXRpb24KLSAqIFBhdWwgV2FsbXNsZXkKLSAqCi0gKiBYWFggaGFuZGxlIGNyb3NzYmFyL3NoYXJl ZCBsaW5rIGRpZmZlcmVuY2UgZm9yIEwzPwotICogWFhYIHRoZXNlIHNob3VsZCBiZSBtYXJrZWQg aW5pdGRhdGEgZm9yIG11bHRpLU9NQVAga2VybmVscwotICovCi0jaW5jbHVkZSA8bGludXgvc2l6 ZXMuaD4KLQotI2luY2x1ZGUgIm9tYXBfaHdtb2QuaCIKLSNpbmNsdWRlICJsM18yeHh4LmgiCi0j aW5jbHVkZSAibDRfMnh4eC5oIgotCi0jaW5jbHVkZSAib21hcF9od21vZF9jb21tb25fZGF0YS5o IgotCi0vKgotICogQ29tbW9uIGludGVyY29ubmVjdCBkYXRhCi0gKi8KLQotLyogTDMgLT4gTDRf Q09SRSBpbnRlcmZhY2UgKi8KLXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMnh4eF9sM19t YWluX19sNF9jb3JlID0gewotCS5tYXN0ZXIJPSAmb21hcDJ4eHhfbDNfbWFpbl9od21vZCwKLQku c2xhdmUJPSAmb21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkudXNlcgk9IE9DUF9VU0VSX01QVSB8 IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBNUFUgLT4gTDMgaW50ZXJmYWNlICovCi1zdHJ1Y3Qg b21hcF9od21vZF9vY3BfaWYgb21hcDJ4eHhfbXB1X19sM19tYWluID0gewotCS5tYXN0ZXIgPSAm b21hcDJ4eHhfbXB1X2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwMnh4eF9sM19tYWluX2h3bW9kLAot CS51c2VyCT0gT0NQX1VTRVJfTVBVLAotfTsKLQotLyogRFNTIC0+IGwzICovCi1zdHJ1Y3Qgb21h cF9od21vZF9vY3BfaWYgb21hcDJ4eHhfZHNzX19sMyA9IHsKLQkubWFzdGVyCQk9ICZvbWFwMnh4 eF9kc3NfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyeHh4X2wzX21haW5faHdtb2QsCi0J LmZ3ID0gewotCQkub21hcDIgPSB7Ci0JCQkubDNfcGVybV9iaXQgID0gT01BUDJfTDNfQ09SRV9G V19DT05OSURfRFNTLAotCQkJLmZsYWdzCT0gT01BUF9GSVJFV0FMTF9MMywKLQkJfSwKLQl9LAot CS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBMNF9DT1JF IC0+IEw0X1dLVVAgaW50ZXJmYWNlICovCi1zdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4 eHhfbDRfY29yZV9fbDRfd2t1cCA9IHsKLQkubWFzdGVyCT0gJm9tYXAyeHh4X2w0X2NvcmVfaHdt b2QsCi0JLnNsYXZlCT0gJm9tYXAyeHh4X2w0X3drdXBfaHdtb2QsCi0JLnVzZXIJPSBPQ1BfVVNF Ul9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogTDQgQ09SRSAtPiBVQVJUMSBpbnRlcmZh Y2UgKi8KLXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMl9sNF9jb3JlX191YXJ0MSA9IHsK LQkubWFzdGVyCQk9ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4 eHhfdWFydDFfaHdtb2QsCi0JLmNsawkJPSAidWFydDFfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNF Ul9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogTDQgQ09SRSAtPiBVQVJUMiBpbnRlcmZh Y2UgKi8KLXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMl9sNF9jb3JlX191YXJ0MiA9IHsK LQkubWFzdGVyCQk9ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4 eHhfdWFydDJfaHdtb2QsCi0JLmNsawkJPSAidWFydDJfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNF Ul9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogTDQgUEVSIC0+IFVBUlQzIGludGVyZmFj ZSAqLwotc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyX2w0X2NvcmVfX3VhcnQzID0gewot CS5tYXN0ZXIJCT0gJm9tYXAyeHh4X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwMnh4 eF91YXJ0M19od21vZCwKLQkuY2xrCQk9ICJ1YXJ0M19pY2siLAotCS51c2VyCQk9IE9DUF9VU0VS X01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBsNCBjb3JlIC0+IG1jc3BpMSBpbnRlcmZh Y2UgKi8KLXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMnh4eF9sNF9jb3JlX19tY3NwaTEg PSB7Ci0JLm1hc3RlcgkJPSAmb21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9t YXAyeHh4X21jc3BpMV9od21vZCwKLQkuY2xrCQk9ICJtY3NwaTFfaWNrIiwKLQkudXNlcgkJPSBP Q1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDQgY29yZSAtPiBtY3NwaTIg aW50ZXJmYWNlICovCi1zdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4eHhfbDRfY29yZV9f bWNzcGkyID0gewotCS5tYXN0ZXIJCT0gJm9tYXAyeHh4X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZl CQk9ICZvbWFwMnh4eF9tY3NwaTJfaHdtb2QsCi0JLmNsawkJPSAibWNzcGkyX2ljayIsCi0JLnVz ZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07Ci0KLS8qIGw0X2NvcmUgLT4g dGltZXIzICovCi1zdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4eHhfbDRfY29yZV9fdGlt ZXIzID0gewotCS5tYXN0ZXIJCT0gJm9tYXAyeHh4X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCQk9 ICZvbWFwMnh4eF90aW1lcjNfaHdtb2QsCi0JLmNsawkJPSAiZ3B0M19pY2siLAotCS51c2VyCQk9 IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBsNF9jb3JlIC0+IHRpbWVy NCAqLwotc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyNCA9 IHsKLQkubWFzdGVyCQk9ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21h cDJ4eHhfdGltZXI0X2h3bW9kLAotCS5jbGsJCT0gImdwdDRfaWNrIiwKLQkudXNlcgkJPSBPQ1Bf VVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogbDRfY29yZSAtPiB0aW1lcjUgKi8K LXN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMnh4eF9sNF9jb3JlX190aW1lcjUgPSB7Ci0J Lm1hc3RlcgkJPSAmb21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyeHh4 X3RpbWVyNV9od21vZCwKLQkuY2xrCQk9ICJncHQ1X2ljayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJf TVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07Ci0KLS8qIGw0X2NvcmUgLT4gdGltZXI2ICovCi1zdHJ1 Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4eHhfbDRfY29yZV9fdGltZXI2ID0gewotCS5tYXN0 ZXIJCT0gJm9tYXAyeHh4X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwMnh4eF90aW1l cjZfaHdtb2QsCi0JLmNsawkJPSAiZ3B0Nl9pY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8 IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBsNF9jb3JlIC0+IHRpbWVyNyAqLwotc3RydWN0IG9t YXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyNyA9IHsKLQkubWFzdGVyCQk9 ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfdGltZXI3X2h3 bW9kLAotCS5jbGsJCT0gImdwdDdfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1Bf VVNFUl9TRE1BLAotfTsKLQotLyogbDRfY29yZSAtPiB0aW1lcjggKi8KLXN0cnVjdCBvbWFwX2h3 bW9kX29jcF9pZiBvbWFwMnh4eF9sNF9jb3JlX190aW1lcjggPSB7Ci0JLm1hc3RlcgkJPSAmb21h cDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyeHh4X3RpbWVyOF9od21vZCwK LQkuY2xrCQk9ICJncHQ4X2ljayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJf U0RNQSwKLX07Ci0KLS8qIGw0X2NvcmUgLT4gdGltZXI5ICovCi1zdHJ1Y3Qgb21hcF9od21vZF9v Y3BfaWYgb21hcDJ4eHhfbDRfY29yZV9fdGltZXI5ID0gewotCS5tYXN0ZXIJCT0gJm9tYXAyeHh4 X2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwMnh4eF90aW1lcjlfaHdtb2QsCi0JLmNs awkJPSAiZ3B0OV9pY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEs Ci19OwotCi0vKiBsNF9jb3JlIC0+IHRpbWVyMTAgKi8KLXN0cnVjdCBvbWFwX2h3bW9kX29jcF9p ZiBvbWFwMnh4eF9sNF9jb3JlX190aW1lcjEwID0gewotCS5tYXN0ZXIJCT0gJm9tYXAyeHh4X2w0 X2NvcmVfaHdtb2QsCi0JLnNsYXZlCQk9ICZvbWFwMnh4eF90aW1lcjEwX2h3bW9kLAotCS5jbGsJ CT0gImdwdDEwX2ljayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwK LX07Ci0KLS8qIGw0X2NvcmUgLT4gdGltZXIxMSAqLwotc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lm IG9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyMTEgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDJ4eHhfbDRf Y29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyeHh4X3RpbWVyMTFfaHdtb2QsCi0JLmNsawkJ PSAiZ3B0MTFfaWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAot fTsKLQotLyogbDRfY29yZSAtPiB0aW1lcjEyICovCi1zdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYg b21hcDJ4eHhfbDRfY29yZV9fdGltZXIxMiA9IHsKLQkubWFzdGVyCQk9ICZvbWFwMnh4eF9sNF9j b3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfdGltZXIxMl9od21vZCwKLQkuY2xrCQk9 ICJncHQxMl9pY2siLAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19 OwotCi0vKiBsNF9jb3JlIC0+IGRzcyAqLwotc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAy eHh4X2w0X2NvcmVfX2RzcyA9IHsKLQkubWFzdGVyCQk9ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9k LAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfZHNzX2NvcmVfaHdtb2QsCi0JLmNsawkJPSAiZHNzX2lj ayIsCi0JLmZ3ID0gewotCQkub21hcDIgPSB7Ci0JCQkubDRfZndfcmVnaW9uICA9IE9NQVAyNDIw X0w0X0NPUkVfRldfRFNTX0NPUkVfUkVHSU9OLAotCQkJLmZsYWdzCT0gT01BUF9GSVJFV0FMTF9M NCwKLQkJfSwKLQl9LAotCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19 OwotCi0vKiBsNF9jb3JlIC0+IGRzc19kaXNwYyAqLwotc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lm IG9tYXAyeHh4X2w0X2NvcmVfX2Rzc19kaXNwYyA9IHsKLQkubWFzdGVyCQk9ICZvbWFwMnh4eF9s NF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfZHNzX2Rpc3BjX2h3bW9kLAotCS5j bGsJCT0gImRzc19pY2siLAotCS5mdyA9IHsKLQkJLm9tYXAyID0gewotCQkJLmw0X2Z3X3JlZ2lv biAgPSBPTUFQMjQyMF9MNF9DT1JFX0ZXX0RTU19ESVNQQ19SRUdJT04sCi0JCQkuZmxhZ3MJPSBP TUFQX0ZJUkVXQUxMX0w0LAotCQl9LAotCX0sCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQ X1VTRVJfU0RNQSwKLX07Ci0KLS8qIGw0X2NvcmUgLT4gZHNzX3JmYmkgKi8KLXN0cnVjdCBvbWFw X2h3bW9kX29jcF9pZiBvbWFwMnh4eF9sNF9jb3JlX19kc3NfcmZiaSA9IHsKLQkubWFzdGVyCQk9 ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9kLAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfZHNzX3JmYmlf aHdtb2QsCi0JLmNsawkJPSAiZHNzX2ljayIsCi0JLmZ3ID0gewotCQkub21hcDIgPSB7Ci0JCQku bDRfZndfcmVnaW9uICA9IE9NQVAyNDIwX0w0X0NPUkVfRldfRFNTX0NPUkVfUkVHSU9OLAotCQkJ LmZsYWdzCT0gT01BUF9GSVJFV0FMTF9MNCwKLQkJfSwKLQl9LAotCS51c2VyCQk9IE9DUF9VU0VS X01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBsNF9jb3JlIC0+IGRzc192ZW5jICovCi1z dHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4eHhfbDRfY29yZV9fZHNzX3ZlbmMgPSB7Ci0J Lm1hc3RlcgkJPSAmb21hcDJ4eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyeHh4 X2Rzc192ZW5jX2h3bW9kLAotCS5jbGsJCT0gImRzc19pY2siLAotCS5mdyA9IHsKLQkJLm9tYXAy ID0gewotCQkJLmw0X2Z3X3JlZ2lvbiAgPSBPTUFQMjQyMF9MNF9DT1JFX0ZXX0RTU19WRU5DX1JF R0lPTiwKLQkJCS5mbGFncwk9IE9NQVBfRklSRVdBTExfTDQsCi0JCX0sCi0JfSwKLQkuZmxhZ3MJ CT0gT0NQSUZfU1dTVVBfSURMRSwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9T RE1BLAotfTsKLQotLyogbDRfY29yZSAtPiBybmcgKi8KLXN0cnVjdCBvbWFwX2h3bW9kX29jcF9p ZiBvbWFwMnh4eF9sNF9jb3JlX19ybmcgPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDJ4eHhfbDRfY29y ZV9od21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyeHh4X3JuZ19od21vZCwKLQkuY2xrCQk9ICJybmdf aWNrIiwKLQkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyog bDQgY29yZSAtPiBzaGFtIGludGVyZmFjZSAqLwotc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9t YXAyeHh4X2w0X2NvcmVfX3NoYW0gPSB7Ci0JLm1hc3RlcgkJPSAmb21hcDJ4eHhfbDRfY29yZV9o d21vZCwKLQkuc2xhdmUJCT0gJm9tYXAyeHh4X3NoYW1faHdtb2QsCi0JLmNsawkJPSAic2hhX2lj ayIsCi0JLnVzZXIJCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07Ci0KLS8qIGw0 IGNvcmUgLT4gYWVzIGludGVyZmFjZSAqLwotc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAy eHh4X2w0X2NvcmVfX2FlcyA9IHsKLQkubWFzdGVyCQk9ICZvbWFwMnh4eF9sNF9jb3JlX2h3bW9k LAotCS5zbGF2ZQkJPSAmb21hcDJ4eHhfYWVzX2h3bW9kLAotCS5jbGsJCT0gImFlc19pY2siLAot CS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwpkaWZmIC0tZ2l0IGEv YXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzJ4eHhfaXBibG9ja19kYXRhLmMgYi9hcmNo L2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMnh4eF9pcGJsb2NrX2RhdGEuYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggNDk4MmUwNGVhZDUzLi4wMDAwMDAwMDAwMDAKLS0tIGEvYXJj aC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzJ4eHhfaXBibG9ja19kYXRhLmMKKysrIC9kZXYv bnVsbApAQCAtMSw2NjggKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb25seQotLyoKLSAqIG9tYXBfaHdtb2RfMnh4eF9pcGJsb2NrX2RhdGEuYyAtIGNvbW1vbiBJ UCBibG9jayBkYXRhIGZvciBPTUFQMnh4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tp YSBDb3Jwb3JhdGlvbgotICogUGF1bCBXYWxtc2xleQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgotCi0jaW5jbHVkZSAib21hcF9od21vZC5oIgotI2luY2x1ZGUgIm9tYXBfaHdtb2Rf Y29tbW9uX2RhdGEuaCIKLSNpbmNsdWRlICJjbS1yZWdiaXRzLTI0eHguaCIKLSNpbmNsdWRlICJw cm0tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAid2RfdGltZXIuaCIKLQotLyoKLSAqICdkaXNw YycgY2xhc3MKLSAqIGRpc3BsYXkgY29udHJvbGxlcgotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgb21h cF9od21vZF9jbGFzc19zeXNjb25maWcgb21hcDJfZGlzcGNfc3lzYyA9IHsKLQkucmV2X29mZnMJ PSAweDAwMDAsCi0JLnN5c2Nfb2Zmcwk9IDB4MDAxMCwKLQkuc3lzc19vZmZzCT0gMHgwMDE0LAot CS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NJRExFTU9ERSB8IFNZU0NfSEFTX01JRExFTU9ERSB8 Ci0JCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCi0JLmlkbGVt b2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQgfAotCQkJICAgTVNU QU5EQllfRk9SQ0UgfCBNU1RBTkRCWV9OTyB8IE1TVEFOREJZX1NNQVJUKSwKLQkuc3lzY19maWVs ZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3 bW9kX2NsYXNzIG9tYXAyX2Rpc3BjX2h3bW9kX2NsYXNzID0gewotCS5uYW1lCT0gImRpc3BjIiwK LQkuc3lzYwk9ICZvbWFwMl9kaXNwY19zeXNjLAotfTsKLQotLyogT01BUDJ4eHggVGltZXIgQ29t bW9uICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAyeHh4 X3RpbWVyX3N5c2MgPSB7Ci0JLnJldl9vZmZzCT0gMHgwMDAwLAotCS5zeXNjX29mZnMJPSAweDAw MTAsCi0JLnN5c3Nfb2Zmcwk9IDB4MDAxNCwKLQkuc3lzY19mbGFncwk9IChTWVNDX0hBU19TSURM RU1PREUgfCBTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwKLQkJCSAgIFNZU0NfSEFTX0VOQVdBS0VV UCB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8Ci0JCQkgICBTWVNDX0hBU19BVVRPSURMRSB8IFNZU1Nf SEFTX1JFU0VUX1NUQVRVUyksCi0JLmlkbGVtb2Rlcwk9IChTSURMRV9GT1JDRSB8IFNJRExFX05P IHwgU0lETEVfU01BUlQpLAotCS5zeXNjX2ZpZWxkcwk9ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEs Ci19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDJ4eHhfdGltZXJfaHdt b2RfY2xhc3MgPSB7Ci0JLm5hbWUJPSAidGltZXIiLAotCS5zeXNjCT0gJm9tYXAyeHh4X3RpbWVy X3N5c2MsCi19OwotCi0vKgotICogJ3dkX3RpbWVyJyBjbGFzcwotICogMzItYml0IHdhdGNoZG9n IHVwd2FyZCBjb3VudGVyIHRoYXQgZ2VuZXJhdGVzIGEgcHVsc2Ugb24gdGhlIHJlc2V0IHBpbiBv bgotICogb3ZlcmZsb3cgY29uZGl0aW9uCi0gKi8KLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9k X2NsYXNzX3N5c2NvbmZpZyBvbWFwMnh4eF93ZF90aW1lcl9zeXNjID0gewotCS5yZXZfb2Zmcwk9 IDB4MDAwMCwKLQkuc3lzY19vZmZzCT0gMHgwMDEwLAotCS5zeXNzX29mZnMJPSAweDAwMTQsCi0J LnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfRU1VRlJFRSB8IFNZU0NfSEFTX1NPRlRSRVNFVCB8Ci0J CQkgICBTWVNDX0hBU19BVVRPSURMRSB8IFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCi0JLnN5c2Nf ZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21h cF9od21vZF9jbGFzcyBvbWFwMnh4eF93ZF90aW1lcl9od21vZF9jbGFzcyA9IHsKLQkubmFtZQkJ PSAid2RfdGltZXIiLAotCS5zeXNjCQk9ICZvbWFwMnh4eF93ZF90aW1lcl9zeXNjLAotCS5wcmVf c2h1dGRvd24JPSAmb21hcDJfd2RfdGltZXJfZGlzYWJsZSwKLQkucmVzZXQJCT0gJm9tYXAyX3dk X3RpbWVyX3Jlc2V0LAotfTsKLQotLyoKLSAqICdncGlvJyBjbGFzcwotICogZ2VuZXJhbCBwdXJw b3NlIGlvIG1vZHVsZQotICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29u ZmlnIG9tYXAyeHh4X2dwaW9fc3lzYyA9IHsKLQkucmV2X29mZnMJPSAweDAwMDAsCi0JLnN5c2Nf b2Zmcwk9IDB4MDAxMCwKLQkuc3lzc19vZmZzCT0gMHgwMDE0LAotCS5zeXNjX2ZsYWdzCT0gKFNZ U0NfSEFTX0VOQVdBS0VVUCB8IFNZU0NfSEFTX1NJRExFTU9ERSB8Ci0JCQkgICBTWVNDX0hBU19T T0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSB8Ci0JCQkgICBTWVNTX0hBU19SRVNFVF9TVEFU VVMpLAotCS5pZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJU KSwKLQkuc3lzY19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAotfTsKLQotc3RydWN0 IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDJ4eHhfZ3Bpb19od21vZF9jbGFzcyA9IHsKLQkubmFtZSA9 ICJncGlvIiwKLQkuc3lzYyA9ICZvbWFwMnh4eF9ncGlvX3N5c2MsCi19OwotCi0vKgotICogJ21h aWxib3gnIGNsYXNzCi0gKiBtYWlsYm94IG1vZHVsZSBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJl dHdlZW4gdGhlIG9uLWNoaXAgcHJvY2Vzc29ycwotICogdXNpbmcgYSBxdWV1ZWQgbWFpbGJveC1p bnRlcnJ1cHQgbWVjaGFuaXNtLgotICovCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFz c19zeXNjb25maWcgb21hcDJ4eHhfbWFpbGJveF9zeXNjID0gewotCS5yZXZfb2Zmcwk9IDB4MDAw LAotCS5zeXNjX29mZnMJPSAweDAxMCwKLQkuc3lzc19vZmZzCT0gMHgwMTQsCi0JLnN5c2NfZmxh Z3MJPSAoU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8Ci0JCQkg ICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNDX0hBU19BVVRPSURMRSksCi0JLmlkbGVtb2Rlcwk9 IChTSURMRV9GT1JDRSB8IFNJRExFX05PIHwgU0lETEVfU01BUlQpLAotCS5zeXNjX2ZpZWxkcwk9 ICZvbWFwX2h3bW9kX3N5c2NfdHlwZTEsCi19OwotCi1zdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBv bWFwMnh4eF9tYWlsYm94X2h3bW9kX2NsYXNzID0gewotCS5uYW1lCT0gIm1haWxib3giLAotCS5z eXNjCT0gJm9tYXAyeHh4X21haWxib3hfc3lzYywKLX07Ci0KLS8qCi0gKiAnbWNzcGknIGNsYXNz Ci0gKiBtdWx0aWNoYW5uZWwgc2VyaWFsIHBvcnQgaW50ZXJmYWNlIChtY3NwaSkgLyBtYXN0ZXIv c2xhdmUgc3luY2hyb25vdXMgc2VyaWFsCi0gKiBidXMKLSAqLwotCi1zdGF0aWMgc3RydWN0IG9t YXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAyeHh4X21jc3BpX3N5c2MgPSB7Ci0JLnJldl9v ZmZzCT0gMHgwMDAwLAotCS5zeXNjX29mZnMJPSAweDAwMTAsCi0JLnN5c3Nfb2Zmcwk9IDB4MDAx NCwKLQkuc3lzY19mbGFncwk9IChTWVNDX0hBU19DTE9DS0FDVElWSVRZIHwgU1lTQ19IQVNfU0lE TEVNT0RFIHwKLQkJCQlTWVNDX0hBU19FTkFXQUtFVVAgfCBTWVNDX0hBU19TT0ZUUkVTRVQgfAot CQkJCVNZU0NfSEFTX0FVVE9JRExFIHwgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKLQkuaWRsZW1v ZGVzCT0gKFNJRExFX0ZPUkNFIHwgU0lETEVfTk8gfCBTSURMRV9TTUFSVCksCi0JLnN5c2NfZmll bGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKLX07Ci0KLXN0cnVjdCBvbWFwX2h3bW9kX2Ns YXNzIG9tYXAyeHh4X21jc3BpX2NsYXNzID0gewotCS5uYW1lCT0gIm1jc3BpIiwKLQkuc3lzYwk9 ICZvbWFwMnh4eF9tY3NwaV9zeXNjLAotfTsKLQotLyoKLSAqICdncG1jJyBjbGFzcwotICogZ2Vu ZXJhbCBwdXJwb3NlIG1lbW9yeSBjb250cm9sbGVyCi0gKi8KLQotc3RhdGljIHN0cnVjdCBvbWFw X2h3bW9kX2NsYXNzX3N5c2NvbmZpZyBvbWFwMnh4eF9ncG1jX3N5c2MgPSB7Ci0JLnJldl9vZmZz CT0gMHgwMDAwLAotCS5zeXNjX29mZnMJPSAweDAwMTAsCi0JLnN5c3Nfb2Zmcwk9IDB4MDAxNCwK LQkuc3lzY19mbGFncwk9IChTWVNDX0hBU19BVVRPSURMRSB8IFNZU0NfSEFTX1NJRExFTU9ERSB8 Ci0JCQkgICBTWVNDX0hBU19TT0ZUUkVTRVQgfCBTWVNTX0hBU19SRVNFVF9TVEFUVVMpLAotCS5p ZGxlbW9kZXMJPSAoU0lETEVfRk9SQ0UgfCBTSURMRV9OTyB8IFNJRExFX1NNQVJUKSwKLQkuc3lz Y19maWVsZHMJPSAmb21hcF9od21vZF9zeXNjX3R5cGUxLAotfTsKLQotc3RhdGljIHN0cnVjdCBv bWFwX2h3bW9kX2NsYXNzIG9tYXAyeHh4X2dwbWNfaHdtb2RfY2xhc3MgPSB7Ci0JLm5hbWUJPSAi Z3BtYyIsCi0JLnN5c2MJPSAmb21hcDJ4eHhfZ3BtY19zeXNjLAotfTsKLQotLyoKLSAqIElQIGJs b2NrcwotICovCi0KLS8qIEwzICovCi1zdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9sM19tYWlu X2h3bW9kID0gewotCS5uYW1lCQk9ICJsM19tYWluIiwKLQkuY2xhc3MJCT0gJmwzX2h3bW9kX2Ns YXNzLAotCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCi19OwotCi0vKiBMNCBDT1JFICovCi1z dHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9sNF9jb3JlX2h3bW9kID0gewotCS5uYW1lCQk9ICJs NF9jb3JlIiwKLQkuY2xhc3MJCT0gJmw0X2h3bW9kX2NsYXNzLAotCS5mbGFncwkJPSBIV01PRF9O T19JRExFU1QsCi19OwotCi0vKiBMNCBXS1VQICovCi1zdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4 eF9sNF93a3VwX2h3bW9kID0gewotCS5uYW1lCQk9ICJsNF93a3VwIiwKLQkuY2xhc3MJCT0gJmw0 X2h3bW9kX2NsYXNzLAotCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCi19OwotCi0vKiBNUFUg Ki8KLXN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyeHh4X21wdV9od21vZCA9IHsKLQkubmFtZQkJPSAi bXB1IiwKLQkuY2xhc3MJCT0gJm1wdV9od21vZF9jbGFzcywKLQkubWFpbl9jbGsJPSAibXB1X2Nr IiwKLX07Ci0KLS8qIHRpbWVyMyAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXIz X2h3bW9kID0gewotCS5uYW1lCQk9ICJ0aW1lcjMiLAotCS5tYWluX2Nsawk9ICJncHQzX2ZjayIs Ci0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwK LQkJCS5pZGxlc3RfcmVnX2lkID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9T VF9HUFQzX1NISUZULAotCQl9LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF90aW1lcl9od21v ZF9jbGFzcywKLQkuZmxhZ3MgICAgICAgICAgPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwK LX07Ci0KLS8qIHRpbWVyNCAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXI0X2h3 bW9kID0gewotCS5uYW1lCQk9ICJ0aW1lcjQiLAotCS5tYWluX2Nsawk9ICJncHQ0X2ZjayIsCi0J LnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJ CS5pZGxlc3RfcmVnX2lkID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9H UFQ0X1NISUZULAotCQl9LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF90aW1lcl9od21vZF9j bGFzcywKLQkuZmxhZ3MgICAgICAgICAgPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwKLX07 Ci0KLS8qIHRpbWVyNSAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXI1X2h3bW9k ID0gewotCS5uYW1lCQk9ICJ0aW1lcjUiLAotCS5tYWluX2Nsawk9ICJncHQ1X2ZjayIsCi0JLnBy Y20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5p ZGxlc3RfcmVnX2lkID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQ1 X1NISUZULAotCQl9LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF90aW1lcl9od21vZF9jbGFz cywKLQkuZmxhZ3MgICAgICAgICAgPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwKLX07Ci0K LS8qIHRpbWVyNiAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXI2X2h3bW9kID0g ewotCS5uYW1lCQk9ICJ0aW1lcjYiLAotCS5tYWluX2Nsawk9ICJncHQ2X2ZjayIsCi0JLnByY20J CT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxl c3RfcmVnX2lkID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQ2X1NI SUZULAotCQl9LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF90aW1lcl9od21vZF9jbGFzcywK LQkuZmxhZ3MgICAgICAgICAgPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwKLX07Ci0KLS8q IHRpbWVyNyAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXI3X2h3bW9kID0gewot CS5uYW1lCQk9ICJ0aW1lcjciLAotCS5tYWluX2Nsawk9ICJncHQ3X2ZjayIsCi0JLnByY20JCT0g ewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3Rf cmVnX2lkID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQ3X1NISUZU LAotCQl9LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF90aW1lcl9od21vZF9jbGFzcywKLQku ZmxhZ3MgICAgICAgICAgPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwKLX07Ci0KLS8qIHRp bWVyOCAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXI4X2h3bW9kID0gewotCS5u YW1lCQk9ICJ0aW1lcjgiLAotCS5tYWluX2Nsawk9ICJncHQ4X2ZjayIsCi0JLnByY20JCT0gewot CQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVn X2lkID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQ4X1NISUZULAot CQl9LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF90aW1lcl9od21vZF9jbGFzcywKLQkuZmxh Z3MgICAgICAgICAgPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwKLX07Ci0KLS8qIHRpbWVy OSAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXI5X2h3bW9kID0gewotCS5uYW1l CQk9ICJ0aW1lcjkiLAotCS5tYWluX2Nsawk9ICJncHQ5X2ZjayIsCi0JLnByY20JCT0gewotCQku b21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lk ID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQ5X1NISUZULAotCQl9 LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF90aW1lcl9od21vZF9jbGFzcywKLQkuZmxhZ3Mg ICAgICAgICAgPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwKLX07Ci0KLS8qIHRpbWVyMTAg Ki8KLXN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyeHh4X3RpbWVyMTBfaHdtb2QgPSB7Ci0JLm5hbWUJ CT0gInRpbWVyMTAiLAotCS5tYWluX2Nsawk9ICJncHQxMF9mY2siLAotCS5wcmNtCQk9IHsKLQkJ Lm9tYXAyID0gewotCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCi0JCQkuaWRsZXN0X3JlZ19p ZCA9IDEsCi0JCQkuaWRsZXN0X2lkbGVfYml0ID0gT01BUDI0WFhfU1RfR1BUMTBfU0hJRlQsCi0J CX0sCi0JfSwKLQkuY2xhc3MJCT0gJm9tYXAyeHh4X3RpbWVyX2h3bW9kX2NsYXNzLAotCS5mbGFn cyAgICAgICAgICA9IEhXTU9EX1NFVF9ERUZBVUxUX0NMT0NLQUNULAotfTsKLQotLyogdGltZXIx MSAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXIxMV9od21vZCA9IHsKLQkubmFt ZQkJPSAidGltZXIxMSIsCi0JLm1haW5fY2xrCT0gImdwdDExX2ZjayIsCi0JLnByY20JCT0gewot CQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVn X2lkID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUFQxMV9TSElGVCwK LQkJfSwKLQl9LAotCS5jbGFzcwkJPSAmb21hcDJ4eHhfdGltZXJfaHdtb2RfY2xhc3MsCi0JLmZs YWdzICAgICAgICAgID0gSFdNT0RfU0VUX0RFRkFVTFRfQ0xPQ0tBQ1QsCi19OwotCi0vKiB0aW1l cjEyICovCi1zdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF90aW1lcjEyX2h3bW9kID0gewotCS5u YW1lCQk9ICJ0aW1lcjEyIiwKLQkubWFpbl9jbGsJPSAiZ3B0MTJfZmNrIiwKLQkucHJjbQkJPSB7 Ci0JCS5vbWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAotCQkJLmlkbGVzdF9y ZWdfaWQgPSAxLAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQVDEyX1NISUZU LAotCQl9LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF90aW1lcl9od21vZF9jbGFzcywKLQku ZmxhZ3MgICAgICAgICAgPSBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCwKLX07Ci0KLS8qIHdk X3RpbWVyMiAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfd2RfdGltZXIyX2h3bW9kID0g ewotCS5uYW1lCQk9ICJ3ZF90aW1lcjIiLAotCS5jbGFzcwkJPSAmb21hcDJ4eHhfd2RfdGltZXJf aHdtb2RfY2xhc3MsCi0JLm1haW5fY2xrCT0gIm1wdV93ZHRfZmNrIiwKLQkucHJjbQkJPSB7Ci0J CS5vbWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAotCQkJLmlkbGVzdF9yZWdf aWQgPSAxLAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX01QVV9XRFRfU0hJRlQs Ci0JCX0sCi0JfSwKLX07Ci0KLS8qIFVBUlQxICovCi0KLXN0cnVjdCBvbWFwX2h3bW9kIG9tYXAy eHh4X3VhcnQxX2h3bW9kID0gewotCS5uYW1lCQk9ICJ1YXJ0MSIsCi0JLm1haW5fY2xrCT0gInVh cnQxX2ZjayIsCi0JLmZsYWdzCQk9IERFQlVHX09NQVAyVUFSVDFfRkxBR1MgfCBIV01PRF9TV1NV UF9TSURMRV9BQ1QsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMg PSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQg PSBPTUFQMjRYWF9FTl9VQVJUMV9TSElGVCwKLQkJfSwKLQl9LAotCS5jbGFzcwkJPSAmb21hcDJf dWFydF9jbGFzcywKLX07Ci0KLS8qIFVBUlQyICovCi0KLXN0cnVjdCBvbWFwX2h3bW9kIG9tYXAy eHh4X3VhcnQyX2h3bW9kID0gewotCS5uYW1lCQk9ICJ1YXJ0MiIsCi0JLm1haW5fY2xrCT0gInVh cnQyX2ZjayIsCi0JLmZsYWdzCQk9IERFQlVHX09NQVAyVUFSVDJfRkxBR1MgfCBIV01PRF9TV1NV UF9TSURMRV9BQ1QsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMg PSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMSwKLQkJCS5pZGxlc3RfaWRsZV9iaXQg PSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKLQkJfSwKLQl9LAotCS5jbGFzcwkJPSAmb21hcDJf dWFydF9jbGFzcywKLX07Ci0KLS8qIFVBUlQzICovCi0KLXN0cnVjdCBvbWFwX2h3bW9kIG9tYXAy eHh4X3VhcnQzX2h3bW9kID0gewotCS5uYW1lCQk9ICJ1YXJ0MyIsCi0JLm1haW5fY2xrCT0gInVh cnQzX2ZjayIsCi0JLmZsYWdzCQk9IERFQlVHX09NQVAyVUFSVDNfRkxBR1MgfCBIV01PRF9TV1NV UF9TSURMRV9BQ1QsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMg PSBDT1JFX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMiwKLQkJCS5pZGxlc3RfaWRsZV9iaXQg PSBPTUFQMjRYWF9FTl9VQVJUM19TSElGVCwKLQkJfSwKLQl9LAotCS5jbGFzcwkJPSAmb21hcDJf dWFydF9jbGFzcywKLX07Ci0KLS8qIGRzcyAqLwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rf b3B0X2NsayBkc3Nfb3B0X2Nsa3NbXSA9IHsKLQkvKgotCSAqIFRoZSBEU1MgSFcgbmVlZHMgYWxs IERTUyBjbG9ja3MgZW5hYmxlZCBkdXJpbmcgcmVzZXQuIFRoZSBkc3NfY29yZQotCSAqIGRyaXZl ciBkb2VzIG5vdCB1c2UgdGhlc2UgY2xvY2tzLgotCSAqLwotCXsgLnJvbGUgPSAidHZfY2xrIiwg LmNsayA9ICJkc3NfNTRtX2ZjayIgfSwKLQl7IC5yb2xlID0gInN5c19jbGsiLCAuY2xrID0gImRz czJfZmNrIiB9LAotfTsKLQotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfZHNzX2NvcmVfaHdt b2QgPSB7Ci0JLm5hbWUJCT0gImRzc19jb3JlIiwKLQkuY2xhc3MJCT0gJm9tYXAyX2Rzc19od21v ZF9jbGFzcywKLQkubWFpbl9jbGsJPSAiZHNzMV9mY2siLCAvKiBpbnN0ZWFkIG9mIGRzc19mY2sg Ki8KLQkucHJjbQkJPSB7Ci0JCS5vbWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9E LAotCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAotCQl9LAotCX0sCi0JLm9wdF9jbGtzCT0gZHNzX29w dF9jbGtzLAotCS5vcHRfY2xrc19jbnQgPSBBUlJBWV9TSVpFKGRzc19vcHRfY2xrcyksCi0JLmZs YWdzCQk9IEhXTU9EX05PX0lETEVTVCB8IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQs Ci19OwotCi1zdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9kc3NfZGlzcGNfaHdtb2QgPSB7Ci0J Lm5hbWUJCT0gImRzc19kaXNwYyIsCi0JLmNsYXNzCQk9ICZvbWFwMl9kaXNwY19od21vZF9jbGFz cywKLQkubWFpbl9jbGsJPSAiZHNzMV9mY2siLAotCS5wcmNtCQk9IHsKLQkJLm9tYXAyID0gewot CQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCi0JCQkuaWRsZXN0X3JlZ19pZCA9IDEsCi0JCX0s Ci0JfSwKLQkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAotCS5kZXZfYXR0cgk9ICZvbWFwMl8z X2Rzc19kaXNwY19kZXZfYXR0ciwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vcHRf Y2xrIGRzc19yZmJpX29wdF9jbGtzW10gPSB7Ci0JeyAucm9sZSA9ICJpY2siLCAuY2xrID0gImRz c19pY2siIH0sCi19OwotCi1zdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9kc3NfcmZiaV9od21v ZCA9IHsKLQkubmFtZQkJPSAiZHNzX3JmYmkiLAotCS5jbGFzcwkJPSAmb21hcDJfcmZiaV9od21v ZF9jbGFzcywKLQkubWFpbl9jbGsJPSAiZHNzMV9mY2siLAotCS5wcmNtCQk9IHsKLQkJLm9tYXAy ID0gewotCQkJLm1vZHVsZV9vZmZzID0gQ09SRV9NT0QsCi0JCX0sCi0JfSwKLQkub3B0X2Nsa3MJ PSBkc3NfcmZiaV9vcHRfY2xrcywKLQkub3B0X2Nsa3NfY250CT0gQVJSQVlfU0laRShkc3NfcmZi aV9vcHRfY2xrcyksCi0JLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKLX07Ci0KLXN0cnVjdCBv bWFwX2h3bW9kIG9tYXAyeHh4X2Rzc192ZW5jX2h3bW9kID0gewotCS5uYW1lCQk9ICJkc3NfdmVu YyIsCi0JLmNsYXNzCQk9ICZvbWFwMl92ZW5jX2h3bW9kX2NsYXNzLAotCS5tYWluX2Nsawk9ICJk c3NfNTRtX2ZjayIsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMg PSBDT1JFX01PRCwKLQkJfSwKLQl9LAotCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCi19Owot Ci0vKiBncGlvMSAqLwotc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfZ3BpbzFfaHdtb2QgPSB7 Ci0JLm5hbWUJCT0gImdwaW8xIiwKLQkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19J Tl9SRVNFVCwKLQkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKLQkucHJjbQkJPSB7Ci0JCS5vbWFw MiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9IFdLVVBfTU9ELAotCQkJLmlkbGVzdF9yZWdfaWQgPSAx LAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX0dQSU9TX1NISUZULAotCQl9LAot CX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF9ncGlvX2h3bW9kX2NsYXNzLAotfTsKLQotLyogZ3Bp bzIgKi8KLXN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyeHh4X2dwaW8yX2h3bW9kID0gewotCS5uYW1l CQk9ICJncGlvMiIsCi0JLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQs Ci0JLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCi0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0J CQkubW9kdWxlX29mZnMgPSBXS1VQX01PRCwKLQkJCS5pZGxlc3RfcmVnX2lkID0gMSwKLQkJCS5p ZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9TVF9HUElPU19TSElGVCwKLQkJfSwKLQl9LAotCS5j bGFzcwkJPSAmb21hcDJ4eHhfZ3Bpb19od21vZF9jbGFzcywKLX07Ci0KLS8qIGdwaW8zICovCi1z dHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9ncGlvM19od21vZCA9IHsKLQkubmFtZQkJPSAiZ3Bp bzMiLAotCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAotCS5tYWlu X2Nsawk9ICJncGlvc19mY2siLAotCS5wcmNtCQk9IHsKLQkJLm9tYXAyID0gewotCQkJLm1vZHVs ZV9vZmZzID0gV0tVUF9NT0QsCi0JCQkuaWRsZXN0X3JlZ19pZCA9IDEsCi0JCQkuaWRsZXN0X2lk bGVfYml0ID0gT01BUDI0WFhfU1RfR1BJT1NfU0hJRlQsCi0JCX0sCi0JfSwKLQkuY2xhc3MJCT0g Jm9tYXAyeHh4X2dwaW9faHdtb2RfY2xhc3MsCi19OwotCi0vKiBncGlvNCAqLwotc3RydWN0IG9t YXBfaHdtb2Qgb21hcDJ4eHhfZ3BpbzRfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImdwaW80IiwKLQku ZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKLQkubWFpbl9jbGsJPSAi Z3Bpb3NfZmNrIiwKLQkucHJjbQkJPSB7Ci0JCS5vbWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9 IFdLVVBfTU9ELAotCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9 IE9NQVAyNFhYX1NUX0dQSU9TX1NISUZULAotCQl9LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4 eF9ncGlvX2h3bW9kX2NsYXNzLAotfTsKLQotLyogbWNzcGkxICovCi1zdHJ1Y3Qgb21hcF9od21v ZCBvbWFwMnh4eF9tY3NwaTFfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpMSIsCi0JLm1haW5f Y2xrCT0gIm1jc3BpMV9mY2siLAotCS5wcmNtCQk9IHsKLQkJLm9tYXAyID0gewotCQkJLm1vZHVs ZV9vZmZzID0gQ09SRV9NT0QsCi0JCQkuaWRsZXN0X3JlZ19pZCA9IDEsCi0JCQkuaWRsZXN0X2lk bGVfYml0ID0gT01BUDI0WFhfU1RfTUNTUEkxX1NISUZULAotCQl9LAotCX0sCi0JLmNsYXNzCQk9 ICZvbWFwMnh4eF9tY3NwaV9jbGFzcywKLX07Ci0KLS8qIG1jc3BpMiAqLwotc3RydWN0IG9tYXBf aHdtb2Qgb21hcDJ4eHhfbWNzcGkyX2h3bW9kID0gewotCS5uYW1lCQk9ICJtY3NwaTIiLAotCS5t YWluX2Nsawk9ICJtY3NwaTJfZmNrIiwKLQkucHJjbQkJPSB7Ci0JCS5vbWFwMiA9IHsKLQkJCS5t b2R1bGVfb2ZmcyA9IENPUkVfTU9ELAotCQkJLmlkbGVzdF9yZWdfaWQgPSAxLAotCQkJLmlkbGVz dF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX01DU1BJMl9TSElGVCwKLQkJfSwKLQl9LAotCS5jbGFz cwkJPSAmb21hcDJ4eHhfbWNzcGlfY2xhc3MsCi19OwotCi0vKiBncG1jICovCi1zdHJ1Y3Qgb21h cF9od21vZCBvbWFwMnh4eF9ncG1jX2h3bW9kID0gewotCS5uYW1lCQk9ICJncG1jIiwKLQkuY2xh c3MJCT0gJm9tYXAyeHh4X2dwbWNfaHdtb2RfY2xhc3MsCi0JLm1haW5fY2xrCT0gImdwbWNfZmNr IiwKLQkvKiBTa2lwIHJlc2V0IGZvciBDT05GSUdfT01BUF9HUE1DX0RFQlVHIGZvciBib290bG9h ZGVyIHRpbWluZ3MgKi8KLQkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNUIHwgREVCVUdfT01BUF9H UE1DX0hXTU9EX0ZMQUdTLAotCS5wcmNtCQk9IHsKLQkJLm9tYXAyCT0gewotCQkJLm1vZHVsZV9v ZmZzID0gQ09SRV9NT0QsCi0JCX0sCi0JfSwKLX07Ci0KLS8qIFJORyAqLwotCi1zdGF0aWMgc3Ry dWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAyX3JuZ19zeXNjID0gewotCS5yZXZf b2Zmcwk9IDB4M2MsCi0JLnN5c2Nfb2Zmcwk9IDB4NDAsCi0JLnN5c3Nfb2Zmcwk9IDB4NDQsCi0J LnN5c2NfZmxhZ3MJPSAoU1lTQ19IQVNfU09GVFJFU0VUIHwgU1lTQ19IQVNfQVVUT0lETEUgfAot CQkJICAgU1lTU19IQVNfUkVTRVRfU1RBVFVTKSwKLQkuc3lzY19maWVsZHMJPSAmb21hcF9od21v ZF9zeXNjX3R5cGUxLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAy X3JuZ19od21vZF9jbGFzcyA9IHsKLQkubmFtZQkJPSAicm5nIiwKLQkuc3lzYwkJPSAmb21hcDJf cm5nX3N5c2MsCi19OwotCi1zdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9ybmdfaHdtb2QgPSB7 Ci0JLm5hbWUJCT0gInJuZyIsCi0JLm1haW5fY2xrCT0gImw0X2NrIiwKLQkucHJjbQkJPSB7Ci0J CS5vbWFwMiA9IHsKLQkJCS5tb2R1bGVfb2ZmcyA9IENPUkVfTU9ELAotCQkJLmlkbGVzdF9yZWdf aWQgPSA0LAotCQkJLmlkbGVzdF9pZGxlX2JpdCA9IE9NQVAyNFhYX1NUX1JOR19TSElGVCwKLQkJ fSwKLQl9LAotCS8qCi0JICogWFhYIFRoZSBmaXJzdCByZWFkIGZyb20gdGhlIFNZU1NUQVRVUyBy ZWdpc3RlciBvZiB0aGUgUk5HCi0JICogYWZ0ZXIgdGhlIFNZU0NPTkZJRyBTT0ZUUkVTRVQgYml0 IGlzIHNldCB0cmlnZ2VycyBhbgotCSAqIGltcHJlY2lzZSBleHRlcm5hbCBhYm9ydC4gIEl0J3Mg dW5jbGVhciB3aHkgdGhpcyBoYXBwZW5zLgotCSAqIFVudGlsIHRoaXMgaXMgYW5hbHl6ZWQsIHNr aXAgdGhlIElQIGJsb2NrIHJlc2V0LgotCSAqLwotCS5mbGFncwkJPSBIV01PRF9JTklUX05PX1JF U0VULAotCS5jbGFzcwkJPSAmb21hcDJfcm5nX2h3bW9kX2NsYXNzLAotfTsKLQotLyogU0hBTSAq LwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Nfc3lzY29uZmlnIG9tYXAyX3NoYW1f c3lzYyA9IHsKLQkucmV2X29mZnMJPSAweDVjLAotCS5zeXNjX29mZnMJPSAweDYwLAotCS5zeXNz X29mZnMJPSAweDY0LAotCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NPRlRSRVNFVCB8IFNZU0Nf SEFTX0FVVE9JRExFIHwKLQkJCSAgIFNZU1NfSEFTX1JFU0VUX1NUQVRVUyksCi0JLnN5c2NfZmll bGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9o d21vZF9jbGFzcyBvbWFwMnh4eF9zaGFtX2NsYXNzID0gewotCS5uYW1lCT0gInNoYW0iLAotCS5z eXNjCT0gJm9tYXAyX3NoYW1fc3lzYywKLX07Ci0KLXN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyeHh4 X3NoYW1faHdtb2QgPSB7Ci0JLm5hbWUJCT0gInNoYW0iLAotCS5tYWluX2Nsawk9ICJsNF9jayIs Ci0JLnByY20JCT0gewotCQkub21hcDIgPSB7Ci0JCQkubW9kdWxlX29mZnMgPSBDT1JFX01PRCwK LQkJCS5pZGxlc3RfcmVnX2lkID0gNCwKLQkJCS5pZGxlc3RfaWRsZV9iaXQgPSBPTUFQMjRYWF9T VF9TSEFfU0hJRlQsCi0JCX0sCi0JfSwKLQkuY2xhc3MJCT0gJm9tYXAyeHh4X3NoYW1fY2xhc3Ms Ci19OwotCi0vKiBBRVMgKi8KLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2Nv bmZpZyBvbWFwMl9hZXNfc3lzYyA9IHsKLQkucmV2X29mZnMJPSAweDQ0LAotCS5zeXNjX29mZnMJ PSAweDQ4LAotCS5zeXNzX29mZnMJPSAweDRjLAotCS5zeXNjX2ZsYWdzCT0gKFNZU0NfSEFTX1NP RlRSRVNFVCB8IFNZU0NfSEFTX0FVVE9JRExFIHwKLQkJCSAgIFNZU1NfSEFTX1JFU0VUX1NUQVRV UyksCi0JLnN5c2NfZmllbGRzCT0gJm9tYXBfaHdtb2Rfc3lzY190eXBlMSwKLX07Ci0KLXN0YXRp YyBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwMnh4eF9hZXNfY2xhc3MgPSB7Ci0JLm5hbWUJ PSAiYWVzIiwKLQkuc3lzYwk9ICZvbWFwMl9hZXNfc3lzYywKLX07Ci0KLXN0cnVjdCBvbWFwX2h3 bW9kIG9tYXAyeHh4X2Flc19od21vZCA9IHsKLQkubmFtZQkJPSAiYWVzIiwKLQkubWFpbl9jbGsJ PSAibDRfY2siLAotCS5wcmNtCQk9IHsKLQkJLm9tYXAyID0gewotCQkJLm1vZHVsZV9vZmZzID0g Q09SRV9NT0QsCi0JCQkuaWRsZXN0X3JlZ19pZCA9IDQsCi0JCQkuaWRsZXN0X2lkbGVfYml0ID0g T01BUDI0WFhfU1RfQUVTX1NISUZULAotCQl9LAotCX0sCi0JLmNsYXNzCQk9ICZvbWFwMnh4eF9h ZXNfY2xhc3MsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9k X2NvbW1vbl9kYXRhLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfY29tbW9uX2Rh dGEuaAppbmRleCA2OWRkZGM1M2UxZDguLjhiMjcwY2IzZjY0YiAxMDA2NDQKLS0tIGEvYXJjaC9h cm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgKKysrIGIvYXJjaC9hcm0vbWFj aC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgKQEAgLTE1LDY4ICsxNSw2IEBACiAjaW5j bHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiZGlzcGxheS5oIgogCi0vKiBDb21tb24gSVAgYmxv Y2sgZGF0YSBhY3Jvc3MgT01BUDJ4eHggKi8KLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZCBvbWFw Mnh4eF9sM19tYWluX2h3bW9kOwotZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyeHh4X2w0 X2NvcmVfaHdtb2Q7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfbDRfd2t1cF9o d21vZDsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9tcHVfaHdtb2Q7Ci1leHRl cm4gc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXIzX2h3bW9kOwotZXh0ZXJuIHN0cnVj dCBvbWFwX2h3bW9kIG9tYXAyeHh4X3RpbWVyNF9od21vZDsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9o d21vZCBvbWFwMnh4eF90aW1lcjVfaHdtb2Q7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Qgb21h cDJ4eHhfdGltZXI2X2h3bW9kOwotZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyeHh4X3Rp bWVyN19od21vZDsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF90aW1lcjhfaHdt b2Q7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXI5X2h3bW9kOwotZXh0 ZXJuIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyeHh4X3RpbWVyMTBfaHdtb2Q7Ci1leHRlcm4gc3Ry dWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfdGltZXIxMV9od21vZDsKLWV4dGVybiBzdHJ1Y3Qgb21h cF9od21vZCBvbWFwMnh4eF90aW1lcjEyX2h3bW9kOwotZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9k IG9tYXAyeHh4X3dkX3RpbWVyMl9od21vZDsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZCBvbWFw Mnh4eF91YXJ0MV9od21vZDsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF91YXJ0 Ml9od21vZDsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF91YXJ0M19od21vZDsK LWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9kc3NfY29yZV9od21vZDsKLWV4dGVy biBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9kc3NfZGlzcGNfaHdtb2Q7Ci1leHRlcm4gc3Ry dWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfZHNzX3JmYmlfaHdtb2Q7Ci1leHRlcm4gc3RydWN0IG9t YXBfaHdtb2Qgb21hcDJ4eHhfZHNzX3ZlbmNfaHdtb2Q7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdt b2Qgb21hcDJ4eHhfZ3BpbzFfaHdtb2Q7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4 eHhfZ3BpbzJfaHdtb2Q7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfZ3BpbzNf aHdtb2Q7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfZ3BpbzRfaHdtb2Q7Ci1l eHRlcm4gc3RydWN0IG9tYXBfaHdtb2Qgb21hcDJ4eHhfbWNzcGkxX2h3bW9kOwotZXh0ZXJuIHN0 cnVjdCBvbWFwX2h3bW9kIG9tYXAyeHh4X21jc3BpMl9od21vZDsKLWV4dGVybiBzdHJ1Y3Qgb21h cF9od21vZCBvbWFwMnh4eF9ncG1jX2h3bW9kOwotZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kIG9t YXAyeHh4X3JuZ19od21vZDsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMnh4eF9zaGFt X2h3bW9kOwotZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyeHh4X2Flc19od21vZDsKLQot LyogQ29tbW9uIGludGVyZmFjZSBkYXRhIGFjcm9zcyBPTUFQMnh4eCAqLwotZXh0ZXJuIHN0cnVj dCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMnh4eF9sM19tYWluX19sNF9jb3JlOwotZXh0ZXJuIHN0 cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMnh4eF9tcHVfX2wzX21haW47Ci1leHRlcm4gc3Ry dWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2Rzc19fbDM7Ci1leHRlcm4gc3RydWN0IG9t YXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVfX2w0X3drdXA7Ci1leHRlcm4gc3RydWN0 IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyX2w0X2NvcmVfX3VhcnQxOwotZXh0ZXJuIHN0cnVjdCBv bWFwX2h3bW9kX29jcF9pZiBvbWFwMl9sNF9jb3JlX191YXJ0MjsKLWV4dGVybiBzdHJ1Y3Qgb21h cF9od21vZF9vY3BfaWYgb21hcDJfbDRfY29yZV9fdWFydDM7Ci1leHRlcm4gc3RydWN0IG9tYXBf aHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVfX21jc3BpMTsKLWV4dGVybiBzdHJ1Y3Qgb21h cF9od21vZF9vY3BfaWYgb21hcDJ4eHhfbDRfY29yZV9fbWNzcGkyOwotZXh0ZXJuIHN0cnVjdCBv bWFwX2h3bW9kX29jcF9pZiBvbWFwMnh4eF9sNF9jb3JlX190aW1lcjM7Ci1leHRlcm4gc3RydWN0 IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyNDsKLWV4dGVybiBzdHJ1 Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4eHhfbDRfY29yZV9fdGltZXI1OwotZXh0ZXJuIHN0 cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMnh4eF9sNF9jb3JlX190aW1lcjY7Ci1leHRlcm4g c3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyNzsKLWV4dGVy biBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4eHhfbDRfY29yZV9fdGltZXI4OwotZXh0 ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMnh4eF9sNF9jb3JlX190aW1lcjk7Ci1l eHRlcm4gc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVfX3RpbWVyMTA7 Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVfX3RpbWVy MTE7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVfX3Rp bWVyMTI7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyeHh4X2w0X2NvcmVf X2RzczsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4eHhfbDRfY29yZV9f ZHNzX2Rpc3BjOwotZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMnh4eF9sNF9j b3JlX19kc3NfcmZiaTsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4eHhf bDRfY29yZV9fZHNzX3ZlbmM7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAy eHh4X2w0X2NvcmVfX3JuZzsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4 eHhfbDRfY29yZV9fc2hhbTsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDJ4 eHhfbDRfY29yZV9fYWVzOwotCiAvKiBPTUFQIGh3bW9kIGNsYXNzZXMgLSBmb3J3YXJkIGRlY2xh cmF0aW9ucyAqLwogZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIGwzX2h3bW9kX2NsYXNz OwogZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIGw0X2h3bW9kX2NsYXNzOwpAQCAtODgs MTAgKzI2LDYgQEAgZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyX3JmYmlfaHdt b2RfY2xhc3M7CiBleHRlcm4gc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDJfdmVuY19od21v ZF9jbGFzczsKIGV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwMl9oZHExd19jbGFz czsKIAotZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG9tYXAyeHh4X2dwaW9faHdtb2Rf Y2xhc3M7Ci1leHRlcm4gc3RydWN0IG9tYXBfaHdtb2RfY2xhc3Mgb21hcDJ4eHhfbWFpbGJveF9o d21vZF9jbGFzczsKLWV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBvbWFwMnh4eF9tY3Nw aV9jbGFzczsKLQogZXh0ZXJuIHN0cnVjdCBvbWFwX2Rzc19kaXNwY19kZXZfYXR0ciBvbWFwMl8z X2Rzc19kaXNwY19kZXZfYXR0cjsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNo LW9tYXAyL29wcDI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyNDIwX2RhdGEu YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThhNDQ4ZjkzOGVhLi4wMDAwMDAwMDAw MDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAyNDIwX2RhdGEuYworKysgL2Rldi9udWxs CkBAIC0xLDEzMSArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAot LyoKLSAqIG9wcDI0MjBfZGF0YS5jIC0gb2xkLXN0eWxlICJPUFAiIHRhYmxlIGZvciBPTUFQMjQy MAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMu Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFJp Y2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqCi0gKiBUaGUgT01BUDIgcHJv Y2Vzc29yIGNhbiBiZSBydW4gYXQgc2V2ZXJhbCBkaXNjcmV0ZSAnUFJDTSBjb25maWd1cmF0aW9u cycuCi0gKiBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgY2hhcmFjdGVyaXplZCBieSB2b2x0YWdl IGFuZCBzcGVlZCBmb3IgY2xvY2tzLgotICogVGhlIGRldmljZSBpcyBvbmx5IHZhbGlkYXRlZCBm b3IgY2VydGFpbiBjb21iaW5hdGlvbnMuIE9uZSB3YXkgdG8gZXhwcmVzcwotICogdGhlc2UgY29t YmluYXRpb25zIGlzIHZpYSB0aGUgJ3JhdGlvcycgd2hpY2ggdGhlIGNsb2NrcyBvcGVyYXRlIHdp dGgKLSAqIHJlc3BlY3QgdG8gZWFjaCBvdGhlci4gVGhlc2UgcmF0aW8gc2V0cyBhcmUgZm9yIGEg Z2l2ZW4gdm9sdGFnZS9EUExMCi0gKiBzZXR0aW5nLiBBbGwgY29uZmlndXJhdGlvbnMgY2FuIGJl IGRlc2NyaWJlZCBieSBhIERQTEwgc2V0dGluZyBhbmQgYSByYXRpby4KLSAqCi0gKiBYWFggTWlz c2luZyB2b2x0YWdlIGRhdGEuCi0gKiBYWFggTWlzc2luZyAxOS4yTUh6IHN5c19jbGsgcmF0ZSBz ZXRzIChuZWVkZWQgZm9yIE44MDAvTjgxMCkKLSAqCi0gKiBUSGUgZm9ybWF0IGRlc2NyaWJlZCBp biB0aGlzIGZpbGUgaXMgZGVwcmVjYXRlZC4gIE9uY2UgYSByZWFzb25hYmxlCi0gKiBPUFAgQVBJ IGV4aXN0cywgdGhlIGRhdGEgaW4gdGhpcyBmaWxlIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gdXNl IGl0LgotICoKLSAqIFRoaXMgaXMgdGVjaG5pY2FsbHkgcGFydCBvZiB0aGUgT01BUDJ4eHggY2xv Y2sgY29kZS4KLSAqCi0gKiBDb25zaWRlcmFibGUgd29yayBpcyBzdGlsbCBuZWVkZWQgdG8gZnVs bHkgc3VwcG9ydCBkeW5hbWljIGZyZXF1ZW5jeQotICogY2hhbmdlcyBvbiBPTUFQMnh4eC1zZXJp ZXMgY2hpcHMuICBSZWFkZXJzIGludGVyZXN0ZWQgaW4gc3VjaCBhCi0gKiBwcm9qZWN0IGFyZSBl bmNvdXJhZ2VkIHRvIHJldmlldyB0aGUgTWFlbW8gRGlhYmxvIFJYLTM0IGFuZCBSWC00NAotICog a2VybmVsIHNvdXJjZSBhdDoKLSAqICAgICBodHRwOi8vcmVwb3NpdG9yeS5tYWVtby5vcmcvcG9v bC9kaWFibG8vZnJlZS9rL2tlcm5lbC1zb3VyY2UtZGlhYmxvLwotICovCi0KLSNpbmNsdWRlIDxs aW51eC9rZXJuZWwuaD4KLQotI2luY2x1ZGUgIm9wcDJ4eHguaCIKLSNpbmNsdWRlICJzZHJjLmgi Ci0jaW5jbHVkZSAiY2xvY2suaCIKLQotLyoKLSAqIEtleSBkaXZpZGVycyB3aGljaCBtYWtlIHVw IGEgUFJDTSBzZXQuIFJhdGlvcyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KLSAqIHh0YWxfc3Bl ZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSwKLSAqIENNX0NMS1NFTF9E U1AsIENNX0NMS1NFTF9HRlgsIENNX0NMS1NFTDFfQ09SRSwgQ01fQ0xLU0VMMV9QTEwsCi0gKiBD TV9DTEtTRUwyX1BMTCwgQ01fQ0xLU0VMX01ETQotICoKLSAqIEZpbGxpbmcgaW4gdGFibGUgYmFz ZWQgb24gSDQgYm9hcmRzIGF2YWlsYWJsZS4gIFRoZXJlIGFyZSBxdWl0ZSBhCi0gKiBmZXcgbW9y ZSByYXRlIGNvbWJpbmF0aW9ucyB3aGljaCBjb3VsZCBiZSBkZWZpbmVkLgotICoKLSAqIFdoZW4g bXVsdGlwbGUgdmFsdWVzIGFyZSBkZWZpbmVkIHRoZSBzdGFydCB1cCB3aWxsIHRyeSBhbmQgY2hv b3NlCi0gKiB0aGUgZmFzdGVzdCBvbmUuIElmIGEgJ2Zhc3QnIHZhbHVlIGlzIGRlZmluZWQsIHRo ZW4gYXV0b21hdGljYWxseSwKLSAqIHRoZSAvMiBvbmUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGl0 IGNhbiBiZSB1c2VkLiAgR2VuZXJhbGx5IGhhdmluZwotICogbW9yZSB0aGFuIG9uZSBmYXN0IHNl dCBkb2VzIG5vdCBtYWtlIHNlbnNlLCBhcyBzdGF0aWMgdGltaW5ncyBuZWVkCi0gKiB0byBiZSBj aGFuZ2VkIHRvIGNoYW5nZSB0aGUgc2V0LiAgVGhlIGV4Y2VwdGlvbiBpcyB0aGUgYnlwYXNzCi0g KiBzZXR0aW5nIHdoaWNoIGlzIGF2YWlsYWJsZSBmb3IgbG93IHBvd2VyIGJ5cGFzcy4KLSAqCi0g KiBOb3RlOiBUaGlzIHRhYmxlIG5lZWRzIHRvIGJlIHNvcnRlZCwgZmFzdGVzdCB0byBzbG93ZXN0 LgotICoqLwotY29uc3Qgc3RydWN0IHByY21fY29uZmlnIG9tYXAyNDIwX3JhdGVfdGFibGVbXSA9 IHsKLQkvKiBQUkNNIEkgLSBGQVNUICovCi0Je1MxMk0sIFM2NjBNLCBTMzMwTSwgUklfQ01fQ0xL U0VMX01QVV9WQUwsCQkvKiAzMzBNSHogQVJNICovCi0JCVJJX0NNX0NMS1NFTF9EU1BfVkFMLCBS SV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUklfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlfQ01fQ0xL U0VMMV9QTExfMTJfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NU UkxfMTY1TUh6LAotCQlSQVRFX0lOXzI0Mlh9LAotCi0JLyogUFJDTSBJSSAtIEZBU1QgKi8KLQl7 UzEyTSwgUzYwME0sIFMzMDBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMDBNSHogQVJN ICovCi0JCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlS SUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKLQkJTVhf Q0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEwME1IeiwKLQkJUkFURV9JTl8y NDJYfSwKLQotCXtTMTNNLCBTNjAwTSwgUzMwME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8q IDMwME1IeiBBUk0gKi8KLQkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dG WF9WQUwsCi0JCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTNf VkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTAwTUh6LAot CQlSQVRFX0lOXzI0Mlh9LAotCi0JLyogUFJDTSBJSUkgLSBGQVNUICovCi0Je1MxMk0sIFM1MzJN LCBTMjY2TSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDI2Nk1IeiBBUk0gKi8KLQkJUklJ SV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUklJSV9DTV9D TEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKLQkJTVhfQ0xLU0VM Ml9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEzM01IeiwKLQkJUkFURV9JTl8yNDJYfSwK LQotCXtTMTNNLCBTNTMyTSwgUzI2Nk0sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyNjZN SHogQVJNICovCi0JCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9W QUwsCi0JCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xM19W QUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMzNNSHosCi0J CVJBVEVfSU5fMjQyWH0sCi0KLQkvKiBQUkNNIElJIC0gU0xPVyAqLwotCXtTMTJNLCBTMzAwTSwg UzE1ME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE1ME1IeiBBUk0gKi8KLQkJUklJX0NN X0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJJSV9DTV9DTEtTRUwx X0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8y eF9WQUwsIDAsIFNEUkNfUkZSX0NUUkxfMTAwTUh6LAotCQlSQVRFX0lOXzI0Mlh9LAotCi0Je1Mx M00sIFMzMDBNLCBTMTUwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTUwTUh6IEFSTSAq LwotCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUklJ X0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NM S1NFTDJfUExMXzJ4X1ZBTCwgMCwgU0RSQ19SRlJfQ1RSTF8xMDBNSHosCi0JCVJBVEVfSU5fMjQy WH0sCi0KLQkvKiBQUkNNIElJSSAtIFNMT1cgKi8KLQl7UzEyTSwgUzI2Nk0sIFMxMzNNLCBSSUlJ X0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLwotCQlSSUlJX0NNX0NMS1NFTF9E U1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9W QUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUws IDAsIFNEUkNfUkZSX0NUUkxfMTMzTUh6LAotCQlSQVRFX0lOXzI0Mlh9LAotCi0Je1MxM00sIFMy NjZNLCBTMTMzTSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzM01IeiBBUk0gKi8KLQkJ UklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUklJSV9D TV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xL U0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JGUl9DVFJMXzEzM01IeiwKLQkJUkFURV9JTl8yNDJY fSwKLQotCS8qIFBSQ00tVklJIChib290LWJ5cGFzcykgKi8KLQl7UzEyTSwgUzEyTSwgUzEyTSwg UlZJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEyTUh6IEFSTSovCi0JCVJWSUlfQ01fQ0xLU0VM X0RTUF9WQUwsIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJWSUlfQ01fQ0xLU0VMMV9DT1JF X1ZBTCwgTVZJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZB TCwgMCwgU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCi0JCVJBVEVfSU5fMjQyWH0sCi0KLQkvKiBQUkNN LVZJSSAoYm9vdC1ieXBhc3MpICovCi0Je1MxM00sIFMxM00sIFMxM00sIFJWSUlfQ01fQ0xLU0VM X01QVV9WQUwsCQkvKiAxM01IeiBBUk0gKi8KLQkJUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUlZJ SV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUlZJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNVklJX0NN X0NMS1NFTDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBTRFJDX1JG Ul9DVFJMX0JZUEFTUywKLQkJUkFURV9JTl8yNDJYfSwKLQotCXsgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMH0sCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vcHAy NDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMjQzMF9kYXRhLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZDhiNTY2YTIzYS4uMDAwMDAwMDAwMDAwCi0tLSBhL2Fy Y2gvYXJtL21hY2gtb21hcDIvb3BwMjQzMF9kYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYg KzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS8qCi0gKiBvcHAy NDMwX2RhdGEuYyAtIG9sZC1zdHlsZSAiT1BQIiB0YWJsZSBmb3IgT01BUDI0MzAKLSAqCi0gKiBD b3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJp Z2h0IChDKSAyMDA0LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBSaWNoYXJkIFdvb2Ry dWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKgotICogVGhlIE9NQVAyIHByb2Nlc3NvciBjYW4g YmUgcnVuIGF0IHNldmVyYWwgZGlzY3JldGUgJ1BSQ00gY29uZmlndXJhdGlvbnMnLgotICogVGhl c2UgY29uZmlndXJhdGlvbnMgYXJlIGNoYXJhY3Rlcml6ZWQgYnkgdm9sdGFnZSBhbmQgc3BlZWQg Zm9yIGNsb2Nrcy4KLSAqIFRoZSBkZXZpY2UgaXMgb25seSB2YWxpZGF0ZWQgZm9yIGNlcnRhaW4g Y29tYmluYXRpb25zLiBPbmUgd2F5IHRvIGV4cHJlc3MKLSAqIHRoZXNlIGNvbWJpbmF0aW9ucyBp cyB2aWEgdGhlICdyYXRpb3MnIHdoaWNoIHRoZSBjbG9ja3Mgb3BlcmF0ZSB3aXRoCi0gKiByZXNw ZWN0IHRvIGVhY2ggb3RoZXIuIFRoZXNlIHJhdGlvIHNldHMgYXJlIGZvciBhIGdpdmVuIHZvbHRh Z2UvRFBMTAotICogc2V0dGluZy4gQWxsIGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBkZXNjcmliZWQg YnkgYSBEUExMIHNldHRpbmcgYW5kIGEgcmF0aW8uCi0gKgotICogMjQzMCBkaWZmZXJzIGZyb20g MjQyMCBpbiB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHBoYXNlIHN5bmNocm9uaXplcnMgdXNlZC4K LSAqIFRoZXkgYm90aCBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNsb2NrIGRvbWFpbiBzZXR1 cC4gMjQyMChpdmExLGRzcCkgdnMKLSAqIDI0MzAgKGl2YTIuMSwgTk9kc3AsIG1kbSkKLSAqCi0g KiBYWFggTWlzc2luZyB2b2x0YWdlIGRhdGEuCi0gKiBYWFggTWlzc2luZyAxOS4yTUh6IHN5c19j bGsgcmF0ZSBzZXRzLgotICoKLSAqIFRIZSBmb3JtYXQgZGVzY3JpYmVkIGluIHRoaXMgZmlsZSBp cyBkZXByZWNhdGVkLiAgT25jZSBhIHJlYXNvbmFibGUKLSAqIE9QUCBBUEkgZXhpc3RzLCB0aGUg ZGF0YSBpbiB0aGlzIGZpbGUgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byB1c2UgaXQuCi0gKgotICog VGhpcyBpcyB0ZWNobmljYWxseSBwYXJ0IG9mIHRoZSBPTUFQMnh4eCBjbG9jayBjb2RlLgotICov Ci0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotI2luY2x1ZGUgIm9wcDJ4eHguaCIKLSNp bmNsdWRlICJzZHJjLmgiCi0jaW5jbHVkZSAiY2xvY2suaCIKLQotLyoKLSAqIEtleSBkaXZpZGVy cyB3aGljaCBtYWtlIHVwIGEgUFJDTSBzZXQuIFJhdGlvcyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRl ZC4KLSAqIHh0YWxfc3BlZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSwK LSAqIENNX0NMS1NFTF9EU1AsIENNX0NMS1NFTF9HRlgsIENNX0NMS1NFTDFfQ09SRSwgQ01fQ0xL U0VMMV9QTEwsCi0gKiBDTV9DTEtTRUwyX1BMTCwgQ01fQ0xLU0VMX01ETQotICoKLSAqIEZpbGxp bmcgaW4gdGFibGUgYmFzZWQgb24gMjQzMC1TRFBzIHZhcmlhbnRzIGF2YWlsYWJsZS4gIFRoZXJl IGFyZQotICogcXVpdGUgYSBmZXcgbW9yZSByYXRlIGNvbWJpbmF0aW9ucyB3aGljaCBjb3VsZCBi ZSBkZWZpbmVkLgotICoKLSAqIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSBkZWZpbmVkIHRoZSBz dGFydCB1cCB3aWxsIHRyeSBhbmQgY2hvb3NlCi0gKiB0aGUgZmFzdGVzdCBvbmUuIElmIGEgJ2Zh c3QnIHZhbHVlIGlzIGRlZmluZWQsIHRoZW4gYXV0b21hdGljYWxseSwKLSAqIHRoZSAvMiBvbmUg c2hvdWxkIGJlIGluY2x1ZGVkIGFzIGl0IGNhbiBiZSB1c2VkLiAgR2VuZXJhbGx5IGhhdmluZwot ICogbW9yZSB0aGFuIG9uZSBmYXN0IHNldCBkb2VzIG5vdCBtYWtlIHNlbnNlLCBhcyBzdGF0aWMg dGltaW5ncyBuZWVkCi0gKiB0byBiZSBjaGFuZ2VkIHRvIGNoYW5nZSB0aGUgc2V0LiAgVGhlIGV4 Y2VwdGlvbiBpcyB0aGUgYnlwYXNzCi0gKiBzZXR0aW5nIHdoaWNoIGlzIGF2YWlsYWJsZSBmb3Ig bG93IHBvd2VyIGJ5cGFzcy4KLSAqCi0gKiBOb3RlOiBUaGlzIHRhYmxlIG5lZWRzIHRvIGJlIHNv cnRlZCwgZmFzdGVzdCB0byBzbG93ZXN0LgotICovCi1jb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcg b21hcDI0MzBfcmF0ZV90YWJsZVtdID0gewotCS8qIFBSQ00gIzQgLSByYXRpbzIgKEVTMi4xKSAt IEZBU1QgKi8KLQl7UzEzTSwgUzc5OE0sIFMzOTlNLCBSMl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8q IDM5OU1IeiBBUk0gKi8KLQkJUjJfQ01fQ0xLU0VMX0RTUF9WQUwsIFIyX0NNX0NMS1NFTF9HRlhf VkFMLAotCQlSMl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNF9DTV9DTEtTRUwxX1BMTF8xM19WQUws Ci0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjJfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVNEUkNf UkZSX0NUUkxfMTMzTUh6LAotCQlSQVRFX0lOXzI0M1h9LAotCi0JLyogUFJDTSAjMiAtIHJhdGlv MSAoRVMyKSAtIEZBU1QgKi8KLQl7UzEzTSwgUzY1OE0sIFMzMjlNLCBSMV9DTV9DTEtTRUxfTVBV X1ZBTCwJCS8qIDMzME1IeiBBUk0gKi8KLQkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NM S1NFTF9HRlhfVkFMLAotCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNMl9DTV9DTEtTRUwxX1BM TF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUws Ci0JCVNEUkNfUkZSX0NUUkxfMTY1TUh6LAotCQlSQVRFX0lOXzI0M1h9LAotCi0JLyogUFJDTSAj NWEgLSByYXRpbzEgLSBGQVNUICovCi0Je1MxM00sIFM1MzJNLCBTMjY2TSwgUjFfQ01fQ0xLU0VM X01QVV9WQUwsCQkvKiAyNjZNSHogQVJNICovCi0JCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9D TV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVBX0NNX0NMS1NF TDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSMV9DTV9DTEtTRUxfTURN X1ZBTCwKLQkJU0RSQ19SRlJfQ1RSTF8xMzNNSHosCi0JCVJBVEVfSU5fMjQzWH0sCi0KLQkvKiBQ UkNNICM1YiAtIHJhdGlvMSAtIEZBU1QgKi8KLQl7UzEzTSwgUzQwME0sIFMyMDBNLCBSMV9DTV9D TEtTRUxfTVBVX1ZBTCwJCS8qIDIwME1IeiBBUk0gKi8KLQkJUjFfQ01fQ0xLU0VMX0RTUF9WQUws IFIxX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUJfQ01f Q0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIxX0NNX0NMS1NF TF9NRE1fVkFMLAotCQlTRFJDX1JGUl9DVFJMXzEwME1IeiwKLQkJUkFURV9JTl8yNDNYfSwKLQot CS8qIFBSQ00gIzQgLSByYXRpbzEgKEVTMi4xKSAtIFNMT1cgKi8KLQl7UzEzTSwgUzM5OU0sIFMx OTlNLCBSMl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDIwME1IeiBBUk0gKi8KLQkJUjJfQ01fQ0xL U0VMX0RTUF9WQUwsIFIyX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSMl9DTV9DTEtTRUwxX0NPUkVf VkFMLCBNNF9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwg UjJfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVNEUkNfUkZSX0NUUkxfMTMzTUh6LAotCQlSQVRFX0lO XzI0M1h9LAotCi0JLyogUFJDTSAjMiAtIHJhdGlvMSAoRVMyKSAtIFNMT1cgKi8KLQl7UzEzTSwg UzMyOU0sIFMxNjRNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE2NU1IeiBBUk0gKi8KLQkJ UjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAotCQlSMV9DTV9DTEtT RUwxX0NPUkVfVkFMLCBNMl9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NMS1NFTDJfUExM XzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVNEUkNfUkZSX0NUUkxfMTY1TUh6LAot CQlSQVRFX0lOXzI0M1h9LAotCi0JLyogUFJDTSAjNWEgLSByYXRpbzEgLSBTTE9XICovCi0Je1Mx M00sIFMyNjZNLCBTMTMzTSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICov Ci0JCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUjFfQ01f Q0xLU0VMMV9DT1JFX1ZBTCwgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKLQkJTVhfQ0xLU0VM Ml9QTExfMXhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKLQkJU0RSQ19SRlJfQ1RSTF8xMzNN SHosCi0JCVJBVEVfSU5fMjQzWH0sCi0KLQkvKiBQUkNNICM1YiAtIHJhdGlvMSAtIFNMT1cqLwot CXtTMTNNLCBTMjAwTSwgUzEwME0sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTAwTUh6IEFS TSAqLwotCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVIx X0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCi0JCU1YX0NM S1NFTDJfUExMXzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCi0JCVNEUkNfUkZSX0NUUkxf MTAwTUh6LAotCQlSQVRFX0lOXzI0M1h9LAotCi0JLyogUFJDTS1ib290L2J5cGFzcyAqLwotCXtT MTNNLCBTMTNNLCBTMTNNLCBSQl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzTUh6ICovCi0JCVJC X0NNX0NMS1NFTF9EU1BfVkFMLCBSQl9DTV9DTEtTRUxfR0ZYX1ZBTCwKLQkJUkJfQ01fQ0xLU0VM MV9DT1JFX1ZBTCwgTUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAotCQlNWF9DTEtTRUwyX1BMTF8y eF9WQUwsIFJCX0NNX0NMS1NFTF9NRE1fVkFMLAotCQlTRFJDX1JGUl9DVFJMX0JZUEFTUywKLQkJ UkFURV9JTl8yNDNYfSwKLQotCS8qIFBSQ00tYm9vdC9ieXBhc3MgKi8KLQl7UzEyTSwgUzEyTSwg UzEyTSwgUkJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMk1IeiAqLwotCQlSQl9DTV9DTEtTRUxf RFNQX1ZBTCwgUkJfQ01fQ0xLU0VMX0dGWF9WQUwsCi0JCVJCX0NNX0NMS1NFTDFfQ09SRV9WQUws IE1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKLQkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSQl9D TV9DTEtTRUxfTURNX1ZBTCwKLQkJU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCi0JCVJBVEVfSU5fMjQz WH0sCi0KLQl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LAotfTsKZGlmZiAtLWdp dCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMnh4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9v cHAyeHh4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NTExODJjZGMwMi4uMDAw MDAwMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMnh4eC5oCisrKyAvZGV2L251 bGwKQEAgLTEsNDMwICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w ICovCi0vKgotICogb3BwMnh4eC5oIC0gbWFjcm9zIGZvciBvbGQtc3R5bGUgT01BUDJ4eHggIk9Q UCIgZGVmaW5pdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBUZXhhcyBJbnN0 cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTm9raWEgQ29ycG9yYXRp b24KLSAqCi0gKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKgotICog VGhlIE9NQVAyIHByb2Nlc3NvciBjYW4gYmUgcnVuIGF0IHNldmVyYWwgZGlzY3JldGUgJ1BSQ00g Y29uZmlndXJhdGlvbnMnLgotICogVGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGNoYXJhY3Rlcml6 ZWQgYnkgdm9sdGFnZSBhbmQgc3BlZWQgZm9yIGNsb2Nrcy4KLSAqIFRoZSBkZXZpY2UgaXMgb25s eSB2YWxpZGF0ZWQgZm9yIGNlcnRhaW4gY29tYmluYXRpb25zLiBPbmUgd2F5IHRvIGV4cHJlc3MK LSAqIHRoZXNlIGNvbWJpbmF0aW9ucyBpcyB2aWEgdGhlICdyYXRpbydzJyB3aGljaCB0aGUgY2xv Y2tzIG9wZXJhdGUgd2l0aAotICogcmVzcGVjdCB0byBlYWNoIG90aGVyLiBUaGVzZSByYXRpbyBz ZXRzIGFyZSBmb3IgYSBnaXZlbiB2b2x0YWdlL0RQTEwKLSAqIHNldHRpbmcuIEFsbCBjb25maWd1 cmF0aW9ucyBjYW4gYmUgZGVzY3JpYmVkIGJ5IGEgRFBMTCBzZXR0aW5nIGFuZCBhIHJhdGlvCi0g KiBUaGVyZSBhcmUgMyByYXRpbyBzZXRzIGZvciB0aGUgMjQzMCBhbmQgWCByYXRpbyBzZXRzIGZv ciAyNDIwLgotICoKLSAqIDI0MzAgZGlmZmVycyBmcm9tIDI0MjAgaW4gdGhhdCB0aGVyZSBhcmUg bm8gbW9yZSBwaGFzZSBzeW5jaHJvbml6ZXJzIHVzZWQuCi0gKiBUaGV5IGJvdGggaGF2ZSBhIHNs aWdodGx5IGRpZmZlcmVudCBjbG9jayBkb21haW4gc2V0dXAuIDI0MjAoaXZhMSxkc3ApIHZzCi0g KiAyNDMwIChpdmEyLjEsIE5PZHNwLCBtZG0pCi0gKgotICogWFhYIE1pc3Npbmcgdm9sdGFnZSBk YXRhLgotICoKLSAqIFRIZSBmb3JtYXQgZGVzY3JpYmVkIGluIHRoaXMgZmlsZSBpcyBkZXByZWNh dGVkLiAgT25jZSBhIHJlYXNvbmFibGUKLSAqIE9QUCBBUEkgZXhpc3RzLCB0aGUgZGF0YSBpbiB0 aGlzIGZpbGUgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byB1c2UgaXQuCi0gKgotICogVGhpcyBpcyB0 ZWNobmljYWxseSBwYXJ0IG9mIHRoZSBPTUFQMnh4eCBjbG9jayBjb2RlLgotICovCi0KLSNpZm5k ZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX09QUDJYWFhfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01B Q0hfT01BUDJfT1BQMlhYWF9ICi0KLS8qKgotICogc3RydWN0IHByY21fY29uZmlnIC0gZGVmaW5l IGNsb2NrIHJhdGVzIG9uIGEgcGVyLU9QUCBiYXNpcyAoMjR4eCkKLSAqCi0gKiBLZXkgZGl2aWRl cnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRh dGVkLgotICogeHRhbF9zcGVlZCwgZHBsbF9zcGVlZCwgbXB1X3NwZWVkLCBDTV9DTEtTRUxfTVBV LENNX0NMS1NFTF9EU1AKLSAqIENNX0NMS1NFTF9HRlgsIENNX0NMS1NFTDFfQ09SRSwgQ01fQ0xL U0VMMV9QTEwgQ01fQ0xLU0VMMl9QTEwsIENNX0NMS1NFTF9NRE0KLSAqCi0gKiBUaGlzIGlzIGRl cHJlY2F0ZWQuICBBcyBzb29uIGFzIHdlIGhhdmUgYSBkZWNlbnQgT1BQIEFQSSwgd2Ugc2hvdWxk Ci0gKiBtb3ZlIGFsbCB0aGlzIHN0dWZmIHRvIGl0LgotICovCi1zdHJ1Y3QgcHJjbV9jb25maWcg ewotCXVuc2lnbmVkIGxvbmcgeHRhbF9zcGVlZDsJLyogY3J5c3RhbCByYXRlICovCi0JdW5zaWdu ZWQgbG9uZyBkcGxsX3NwZWVkOwkvKiBkcGxsOiBvdXQqeHRhbCpNLyhOLTEpdGFibGVfcmVjYWxj ICovCi0JdW5zaWduZWQgbG9uZyBtcHVfc3BlZWQ7CS8qIHNwZWVkIG9mIE1QVSAqLwotCXVuc2ln bmVkIGxvbmcgY21fY2xrc2VsX21wdTsJLyogbXB1IGRpdmlkZXIgKi8KLQl1bnNpZ25lZCBsb25n IGNtX2Nsa3NlbF9kc3A7CS8qIGRzcCtpdmExIGRpdigyNDIwKSwgaXZhMi4xKDI0MzApICovCi0J dW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfZ2Z4OwkvKiBnZnggZGl2aWRlcnMgKi8KLQl1bnNpZ25l ZCBsb25nIGNtX2Nsa3NlbDFfY29yZTsJLyogbWFqb3Igc3Vic3lzdGVtIGRpdmlkZXJzICovCi0J dW5zaWduZWQgbG9uZyBjbV9jbGtzZWwxX3BsbDsJLyogbSxuICovCi0JdW5zaWduZWQgbG9uZyBj bV9jbGtzZWwyX3BsbDsJLyogZHBsbHgxIG9yIHgyIG91dCAqLwotCXVuc2lnbmVkIGxvbmcgY21f Y2xrc2VsX21kbTsJLyogbW9kZW0gZGl2aWRlcnMgMjQzMCBvbmx5ICovCi0JdW5zaWduZWQgbG9u ZyBiYXNlX3NkcmNfcmZyOwkvKiBiYXNlIHJlZnJlc2ggdGltaW5nIGZvciBhIHNldCAqLwotCXVu c2lnbmVkIHNob3J0IGZsYWdzOwotfTsKLQotCi0vKiBDb3JlIGZpZWxkcyBmb3IgY21fY2xrc2Vs LCBub3QgcmF0aW8gZ292ZXJuZWQgKi8KLSNkZWZpbmUgUlhfQ0xLU0VMX0RTUzEJCQkoMHgxMCA8 PCA4KQotI2RlZmluZSBSWF9DTEtTRUxfRFNTMgkJCSgweDAgPDwgMTMpCi0jZGVmaW5lIFJYX0NM S1NFTF9TU0kJCQkoMHg1IDw8IDIwKQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFZvbHRhZ2Uv RFBMTCByYXRpb3MKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIDI0MzAgUmF0aW8ncywgMjQz MC1SYXRpbyBDb25maWcgMSAqLwotI2RlZmluZSBSMV9DTEtTRUxfTDMJCQkoNCA8PCAwKQotI2Rl ZmluZSBSMV9DTEtTRUxfTDQJCQkoMiA8PCA1KQotI2RlZmluZSBSMV9DTEtTRUxfVVNCCQkJKDQg PDwgMjUpCi0jZGVmaW5lIFIxX0NNX0NMS1NFTDFfQ09SRV9WQUwJCShSMV9DTEtTRUxfVVNCIHwg UlhfQ0xLU0VMX1NTSSB8IFwKLQkJCQkJIFJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEg fCBcCi0JCQkJCSBSMV9DTEtTRUxfTDQgfCBSMV9DTEtTRUxfTDMpCi0jZGVmaW5lIFIxX0NMS1NF TF9NUFUJCQkoMiA8PCAwKQotI2RlZmluZSBSMV9DTV9DTEtTRUxfTVBVX1ZBTAkJUjFfQ0xLU0VM X01QVQotI2RlZmluZSBSMV9DTEtTRUxfRFNQCQkJKDIgPDwgMCkKLSNkZWZpbmUgUjFfQ0xLU0VM X0RTUF9JRgkJKDIgPDwgNSkKLSNkZWZpbmUgUjFfQ01fQ0xLU0VMX0RTUF9WQUwJCShSMV9DTEtT RUxfRFNQIHwgUjFfQ0xLU0VMX0RTUF9JRikKLSNkZWZpbmUgUjFfQ0xLU0VMX0dGWAkJCSgyIDw8 IDApCi0jZGVmaW5lIFIxX0NNX0NMS1NFTF9HRlhfVkFMCQlSMV9DTEtTRUxfR0ZYCi0jZGVmaW5l IFIxX0NMS1NFTF9NRE0JCQkoNCA8PCAwKQotI2RlZmluZSBSMV9DTV9DTEtTRUxfTURNX1ZBTAkJ UjFfQ0xLU0VMX01ETQotCi0vKiAyNDMwLVJhdGlvIENvbmZpZyAyICovCi0jZGVmaW5lIFIyX0NM S1NFTF9MMwkJCSg2IDw8IDApCi0jZGVmaW5lIFIyX0NMS1NFTF9MNAkJCSgyIDw8IDUpCi0jZGVm aW5lIFIyX0NMS1NFTF9VU0IJCQkoMiA8PCAyNSkKLSNkZWZpbmUgUjJfQ01fQ0xLU0VMMV9DT1JF X1ZBTAkJKFIyX0NMS1NFTF9VU0IgfCBSWF9DTEtTRUxfU1NJIHwgXAotCQkJCQkgUlhfQ0xLU0VM X0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKLQkJCQkJIFIyX0NMS1NFTF9MNCB8IFIyX0NMS1NF TF9MMykKLSNkZWZpbmUgUjJfQ0xLU0VMX01QVQkJCSgyIDw8IDApCi0jZGVmaW5lIFIyX0NNX0NM S1NFTF9NUFVfVkFMCQlSMl9DTEtTRUxfTVBVCi0jZGVmaW5lIFIyX0NMS1NFTF9EU1AJCQkoMiA8 PCAwKQotI2RlZmluZSBSMl9DTEtTRUxfRFNQX0lGCQkoMyA8PCA1KQotI2RlZmluZSBSMl9DTV9D TEtTRUxfRFNQX1ZBTAkJKFIyX0NMS1NFTF9EU1AgfCBSMl9DTEtTRUxfRFNQX0lGKQotI2RlZmlu ZSBSMl9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkKLSNkZWZpbmUgUjJfQ01fQ0xLU0VMX0dGWF9WQUwJ CVIyX0NMS1NFTF9HRlgKLSNkZWZpbmUgUjJfQ0xLU0VMX01ETQkJCSg2IDw8IDApCi0jZGVmaW5l IFIyX0NNX0NMS1NFTF9NRE1fVkFMCQlSMl9DTEtTRUxfTURNCi0KLS8qIDI0MzAtUmF0aW8gQm9v dG0gKEJZUEFTUykgKi8KLSNkZWZpbmUgUkJfQ0xLU0VMX0wzCQkJKDEgPDwgMCkKLSNkZWZpbmUg UkJfQ0xLU0VMX0w0CQkJKDEgPDwgNSkKLSNkZWZpbmUgUkJfQ0xLU0VMX1VTQgkJCSgxIDw8IDI1 KQotI2RlZmluZSBSQl9DTV9DTEtTRUwxX0NPUkVfVkFMCQkoUkJfQ0xLU0VMX1VTQiB8IFJYX0NM S1NFTF9TU0kgfCBcCi0JCQkJCSBSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAot CQkJCQkgUkJfQ0xLU0VMX0w0IHwgUkJfQ0xLU0VMX0wzKQotI2RlZmluZSBSQl9DTEtTRUxfTVBV CQkJKDEgPDwgMCkKLSNkZWZpbmUgUkJfQ01fQ0xLU0VMX01QVV9WQUwJCVJCX0NMS1NFTF9NUFUK LSNkZWZpbmUgUkJfQ0xLU0VMX0RTUAkJCSgxIDw8IDApCi0jZGVmaW5lIFJCX0NMS1NFTF9EU1Bf SUYJCSgxIDw8IDUpCi0jZGVmaW5lIFJCX0NNX0NMS1NFTF9EU1BfVkFMCQkoUkJfQ0xLU0VMX0RT UCB8IFJCX0NMS1NFTF9EU1BfSUYpCi0jZGVmaW5lIFJCX0NMS1NFTF9HRlgJCQkoMSA8PCAwKQot I2RlZmluZSBSQl9DTV9DTEtTRUxfR0ZYX1ZBTAkJUkJfQ0xLU0VMX0dGWAotI2RlZmluZSBSQl9D TEtTRUxfTURNCQkJKDEgPDwgMCkKLSNkZWZpbmUgUkJfQ01fQ0xLU0VMX01ETV9WQUwJCVJCX0NM S1NFTF9NRE0KLQotLyogMjQyMCBSYXRpbyBFcXVpdmFsZW50cyAqLwotI2RlZmluZSBSWFhfQ0xL U0VMX1ZMWU5RCQkoMHgxMiA8PCAxNSkKLSNkZWZpbmUgUlhYX0NMS1NFTF9TU0kJCQkoMHg4IDw8 IDIwKQotCi0vKiAyNDIwLVBSQ00gSUlJIDUzMk1IeiBjb3JlICovCi0jZGVmaW5lIFJJSUlfQ0xL U0VMX0wzCQkJKDQgPDwgMCkJLyogMTMzTUh6ICovCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX0w0CQkJ KDIgPDwgNSkJLyogNjYuNU1IeiAqLwotI2RlZmluZSBSSUlJX0NMS1NFTF9VU0IJCQkoNCA8PCAy NSkJLyogMzMuMjVNSHogKi8KLSNkZWZpbmUgUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMCShSSUlJ X0NMS1NFTF9VU0IgfCBSWFhfQ0xLU0VMX1NTSSB8IFwKLQkJCQkJIFJYWF9DTEtTRUxfVkxZTlEg fCBSWF9DTEtTRUxfRFNTMiB8IFwKLQkJCQkJIFJYX0NMS1NFTF9EU1MxIHwgUklJSV9DTEtTRUxf TDQgfCBcCi0JCQkJCSBSSUlJX0NMS1NFTF9MMykKLSNkZWZpbmUgUklJSV9DTEtTRUxfTVBVCQkJ KDIgPDwgMCkJLyogMjY2TUh6ICovCi0jZGVmaW5lIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJJ SUlfQ0xLU0VMX01QVQotI2RlZmluZSBSSUlJX0NMS1NFTF9EU1AJCQkoMyA8PCAwKQkvKiBjNXgg LSAxNzcuM01IeiAqLwotI2RlZmluZSBSSUlJX0NMS1NFTF9EU1BfSUYJCSgyIDw8IDUpCS8qIGM1 eCAtIDg4LjY3TUh6ICovCi0jZGVmaW5lIFJJSUlfU1lOQ19EU1AJCQkoMSA8PCA3KQkvKiBFbmFi bGUgc3luYyAqLwotI2RlZmluZSBSSUlJX0NMS1NFTF9JVkEJCQkoNiA8PCA4KQkvKiBpdmExIC0g ODguNjdNSHogKi8KLSNkZWZpbmUgUklJSV9TWU5DX0lWQQkJCSgxIDw8IDEzKQkvKiBFbmFibGUg c3luYyAqLwotI2RlZmluZSBSSUlJX0NNX0NMS1NFTF9EU1BfVkFMCQkoUklJSV9TWU5DX0lWQSB8 IFJJSUlfQ0xLU0VMX0lWQSB8IFwKLQkJCQkJIFJJSUlfU1lOQ19EU1AgfCBSSUlJX0NMS1NFTF9E U1BfSUYgfCBcCi0JCQkJCSBSSUlJX0NMS1NFTF9EU1ApCi0jZGVmaW5lIFJJSUlfQ0xLU0VMX0dG WAkJCSgyIDw8IDApCS8qIDY2LjVNSHogKi8KLSNkZWZpbmUgUklJSV9DTV9DTEtTRUxfR0ZYX1ZB TAkJUklJSV9DTEtTRUxfR0ZYCi0KLS8qIDI0MjAtUFJDTSBJSSA2MDBNSHogY29yZSAqLwotI2Rl ZmluZSBSSUlfQ0xLU0VMX0wzCQkJKDYgPDwgMCkJLyogMTAwTUh6ICovCi0jZGVmaW5lIFJJSV9D TEtTRUxfTDQJCQkoMiA8PCA1KQkvKiA1ME1IeiAqLwotI2RlZmluZSBSSUlfQ0xLU0VMX1VTQgkJ CSgyIDw8IDI1KQkvKiA1ME1IeiAqLwotI2RlZmluZSBSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJ KFJJSV9DTEtTRUxfVVNCIHwgUlhYX0NMS1NFTF9TU0kgfCBcCi0JCQkJCSBSWFhfQ0xLU0VMX1ZM WU5RIHwgUlhfQ0xLU0VMX0RTUzIgfCBcCi0JCQkJCSBSWF9DTEtTRUxfRFNTMSB8IFJJSV9DTEtT RUxfTDQgfCBcCi0JCQkJCSBSSUlfQ0xLU0VMX0wzKQotI2RlZmluZSBSSUlfQ0xLU0VMX01QVQkJ CSgyIDw8IDApCS8qIDMwME1IeiAqLwotI2RlZmluZSBSSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJJ SV9DTEtTRUxfTVBVCi0jZGVmaW5lIFJJSV9DTEtTRUxfRFNQCQkJKDMgPDwgMCkJLyogYzV4IC0g MjAwTUh6ICovCi0jZGVmaW5lIFJJSV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSAx MDBNSHogKi8KLSNkZWZpbmUgUklJX1NZTkNfRFNQCQkJKDAgPDwgNykJLyogQnlwYXNzIHN5bmMg Ki8KLSNkZWZpbmUgUklJX0NMS1NFTF9JVkEJCQkoMyA8PCA4KQkvKiBpdmExIC0gMjAwTUh6ICov Ci0jZGVmaW5lIFJJSV9TWU5DX0lWQQkJCSgwIDw8IDEzKQkvKiBCeXBhc3Mgc3luYyAqLwotI2Rl ZmluZSBSSUlfQ01fQ0xLU0VMX0RTUF9WQUwJCShSSUlfU1lOQ19JVkEgfCBSSUlfQ0xLU0VMX0lW QSB8IFwKLQkJCQkJIFJJSV9TWU5DX0RTUCB8IFJJSV9DTEtTRUxfRFNQX0lGIHwgXAotCQkJCQkg UklJX0NMS1NFTF9EU1ApCi0jZGVmaW5lIFJJSV9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkJLyogNTBN SHogKi8KLSNkZWZpbmUgUklJX0NNX0NMS1NFTF9HRlhfVkFMCQlSSUlfQ0xLU0VMX0dGWAotCi0v KiAyNDIwLVBSQ00gSSA2NjBNSHogY29yZSAqLwotI2RlZmluZSBSSV9DTEtTRUxfTDMJCQkoNCA8 PCAwKQkvKiAxNjVNSHogKi8KLSNkZWZpbmUgUklfQ0xLU0VMX0w0CQkJKDIgPDwgNSkJLyogODIu NU1IeiAqLwotI2RlZmluZSBSSV9DTEtTRUxfVVNCCQkJKDQgPDwgMjUpCS8qIDQxLjI1TUh6ICov Ci0jZGVmaW5lIFJJX0NNX0NMS1NFTDFfQ09SRV9WQUwJCShSSV9DTEtTRUxfVVNCIHwJCVwKLQkJ CQkJIFJYWF9DTEtTRUxfU1NJIHwgUlhYX0NMS1NFTF9WTFlOUSB8IFwKLQkJCQkJIFJYX0NMS1NF TF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCi0JCQkJCSBSSV9DTEtTRUxfTDQgfCBSSV9DTEtT RUxfTDMpCi0jZGVmaW5lIFJJX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQkvKiAzMzBNSHogKi8KLSNk ZWZpbmUgUklfQ01fQ0xLU0VMX01QVV9WQUwJCVJJX0NMS1NFTF9NUFUKLSNkZWZpbmUgUklfQ0xL U0VMX0RTUAkJCSgzIDw8IDApCS8qIGM1eCAtIDIyME1IeiAqLwotI2RlZmluZSBSSV9DTEtTRUxf RFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSAxMTBNSHogKi8KLSNkZWZpbmUgUklfU1lOQ19EU1AJ CQkoMSA8PCA3KQkvKiBBY3RpdmF0ZSBzeW5jICovCi0jZGVmaW5lIFJJX0NMS1NFTF9JVkEJCQko NCA8PCA4KQkvKiBpdmExIC0gMTY1TUh6ICovCi0jZGVmaW5lIFJJX1NZTkNfSVZBCQkJKDAgPDwg MTMpCS8qIEJ5cGFzcyBzeW5jICovCi0jZGVmaW5lIFJJX0NNX0NMS1NFTF9EU1BfVkFMCQkoUklf U1lOQ19JVkEgfCBSSV9DTEtTRUxfSVZBIHwJXAotCQkJCQkgUklfU1lOQ19EU1AgfCBSSV9DTEtT RUxfRFNQX0lGIHwgXAotCQkJCQkgUklfQ0xLU0VMX0RTUCkKLSNkZWZpbmUgUklfQ0xLU0VMX0dG WAkJCSgxIDw8IDApCS8qIDE2NU1IeiAqLwotI2RlZmluZSBSSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJ UklfQ0xLU0VMX0dGWAotCi0vKiAyNDIwLVBSQ00gVklJIChib290KSAqLwotI2RlZmluZSBSVklJ X0NMS1NFTF9MMwkJCSgxIDw8IDApCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX0w0CQkJKDEgPDwgNSkK LSNkZWZpbmUgUlZJSV9DTEtTRUxfRFNTMQkJKDEgPDwgOCkKLSNkZWZpbmUgUlZJSV9DTEtTRUxf RFNTMgkJKDAgPDwgMTMpCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX1ZMWU5RCQkoMSA8PCAxNSkKLSNk ZWZpbmUgUlZJSV9DTEtTRUxfU1NJCQkJKDEgPDwgMjApCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX1VT QgkJCSgxIDw8IDI1KQotCi0jZGVmaW5lIFJWSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkoUlZJSV9D TEtTRUxfVVNCIHwgUlZJSV9DTEtTRUxfU1NJIHwgXAotCQkJCQkgUlZJSV9DTEtTRUxfVkxZTlEg fCBcCi0JCQkJCSBSVklJX0NMS1NFTF9EU1MyIHwgUlZJSV9DTEtTRUxfRFNTMSB8IFwKLQkJCQkJ IFJWSUlfQ0xLU0VMX0w0IHwgUlZJSV9DTEtTRUxfTDMpCi0KLSNkZWZpbmUgUlZJSV9DTEtTRUxf TVBVCQkJKDEgPDwgMCkgLyogYWxsIGRpdmlkZSBieSAxICovCi0jZGVmaW5lIFJWSUlfQ01fQ0xL U0VMX01QVV9WQUwJCVJWSUlfQ0xLU0VMX01QVQotCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUAkJ CSgxIDw8IDApCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUF9JRgkJKDEgPDwgNSkKLSNkZWZpbmUg UlZJSV9TWU5DX0RTUAkJCSgwIDw8IDcpCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX0lWQQkJCSgxIDw8 IDgpCi0jZGVmaW5lIFJWSUlfU1lOQ19JVkEJCQkoMCA8PCAxMykKLSNkZWZpbmUgUlZJSV9DTV9D TEtTRUxfRFNQX1ZBTAkJKFJWSUlfU1lOQ19JVkEgfCBSVklJX0NMS1NFTF9JVkEgfCBcCi0JCQkJ CSBSVklJX1NZTkNfRFNQIHwgUlZJSV9DTEtTRUxfRFNQX0lGIHwgXAotCQkJCQkgUlZJSV9DTEtT RUxfRFNQKQotCi0jZGVmaW5lIFJWSUlfQ0xLU0VMX0dGWAkJCSgxIDw8IDApCi0jZGVmaW5lIFJW SUlfQ01fQ0xLU0VMX0dGWF9WQUwJCVJWSUlfQ0xLU0VMX0dGWAotCi0vKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLSAqIDI0MzAgVGFyZ2V0IG1vZGVzOiBBbG9uZyB3aXRoIGVhY2ggY29uZmlndXJhdGlvbiB0 aGUgQ1BVIGhhcyBzZXZlcmFsCi0gKiBtb2RlcyB3aGljaCBnb2VzIGFsb25nIHdpdGggdGhlbS4g TW9kZXMgbWFpbmx5IGFyZSB0aGUgYWRkaXRpb24gb2YKLSAqIGRlc2NyaWJlIERQTEwgY29tYmlu YXRpb25zIHRvIGdvIGFsb25nIHdpdGggYSByYXRpby4KLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0K LS8qIEhhcmR3YXJlIGdvdmVybmVkICovCi0jZGVmaW5lIE1YXzQ4TV9TUkMJCQkoMCA8PCAzKQot I2RlZmluZSBNWF81NE1fU1JDCQkJKDAgPDwgNSkKLSNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEy CQkoMyA8PCAyMykKLSNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEzCQkoMiA8PCAyMykKLSNkZWZp bmUgTVhfQVBMTFNfQ0xJS0lOXzE5XzIJCSgwIDw8IDIzKQotCi0vKgotICogMjQzMCAtIHN0YW5k YWxvbmUsIDIqcmVmKk0vKG4rMSksIE0vTiBpcyBmb3IgZXhhY3RuZXNzIG5vdCByZWxvY2sgc3Bl ZWQKLSAqICM1YQkocmF0aW8xKSBiYXNlcG9ydC10YXJnZXQsIHRhcmdldCBEUExMID0gMjY2KjIg PSA1MzJNSHoKLSAqLwotI2RlZmluZSBNNUFfRFBMTF9NVUxUXzEyCQkoMTMzIDw8IDEyKQotI2Rl ZmluZSBNNUFfRFBMTF9ESVZfMTIJCQkoNSA8PCA4KQotI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9Q TExfMTJfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJIE01QV9EUExMX0RJ Vl8xMiB8IE01QV9EUExMX01VTFRfMTIgfCBcCi0JCQkJCSBNWF9BUExMU19DTElLSU5fMTIpCi0j ZGVmaW5lIE01QV9EUExMX01VTFRfMTMJCSg2MSA8PCAxMikKLSNkZWZpbmUgTTVBX0RQTExfRElW XzEzCQkJKDIgPDwgOCkKLSNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAkoTVhfNDhN X1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCSBNNUFfRFBMTF9ESVZfMTMgfCBNNUFfRFBMTF9N VUxUXzEzIHwgXAotCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzEzKQotI2RlZmluZSBNNUFfRFBMTF9N VUxUXzE5CQkoNTUgPDwgMTIpCi0jZGVmaW5lIE01QV9EUExMX0RJVl8xOQkJCSgzIDw8IDgpCi0j ZGVmaW5lIE01QV9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJKE1YXzQ4TV9TUkMgfCBNWF81NE1fU1JD IHwgXAotCQkJCQkgTTVBX0RQTExfRElWXzE5IHwgTTVBX0RQTExfTVVMVF8xOSB8IFwKLQkJCQkJ IE1YX0FQTExTX0NMSUtJTl8xOV8yKQotLyogIzViCShyYXRpbzEpIHRhcmdldCBEUExMID0gMjAw KjIgPSA0MDBNSHogKi8KLSNkZWZpbmUgTTVCX0RQTExfTVVMVF8xMgkJKDUwIDw8IDEyKQotI2Rl ZmluZSBNNUJfRFBMTF9ESVZfMTIJCQkoMiA8PCA4KQotI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9Q TExfMTJfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJIE01Ql9EUExMX0RJ Vl8xMiB8IE01Ql9EUExMX01VTFRfMTIgfCBcCi0JCQkJCSBNWF9BUExMU19DTElLSU5fMTIpCi0j ZGVmaW5lIE01Ql9EUExMX01VTFRfMTMJCSgyMDAgPDwgMTIpCi0jZGVmaW5lIE01Ql9EUExMX0RJ Vl8xMwkJCSgxMiA8PCA4KQotCi0jZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwJKE1Y XzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAotCQkJCQkgTTVCX0RQTExfRElWXzEzIHwgTTVCX0RQ TExfTVVMVF8xMyB8IFwKLQkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMykKLSNkZWZpbmUgTTVCX0RQ TExfTVVMVF8xOQkJKDEyNSA8PCAxMikKLSNkZWZpbmUgTTVCX0RQTExfRElWXzE5CQkJKDMxIDw8 IDgpCi0jZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJKE1YXzQ4TV9TUkMgfCBNWF81 NE1fU1JDIHwgXAotCQkJCQkgTTVCX0RQTExfRElWXzE5IHwgTTVCX0RQTExfTVVMVF8xOSB8IFwK LQkJCQkJIE1YX0FQTExTX0NMSUtJTl8xOV8yKQotLyoKLSAqICM0CShyYXRpbzIpLCBEUExMID0g Mzk5KjIgPSA3OThNSHosIEwzPTEzM01IegotICovCi0jZGVmaW5lIE00X0RQTExfTVVMVF8xMgkJ CSgxMzMgPDwgMTIpCi0jZGVmaW5lIE00X0RQTExfRElWXzEyCQkJKDMgPDwgOCkKLSNkZWZpbmUg TTRfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJ CQkJIE00X0RQTExfRElWXzEyIHwgTTRfRFBMTF9NVUxUXzEyIHwgXAotCQkJCQkgTVhfQVBMTFNf Q0xJS0lOXzEyKQotCi0jZGVmaW5lIE00X0RQTExfTVVMVF8xMwkJCSgzOTkgPDwgMTIpCi0jZGVm aW5lIE00X0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCi0jZGVmaW5lIE00X0NNX0NMS1NFTDFfUExM XzEzX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCSBNNF9EUExMX0RJVl8x MyB8IE00X0RQTExfTVVMVF8xMyB8IFwKLQkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMykKLQotI2Rl ZmluZSBNNF9EUExMX01VTFRfMTkJCQkoMTQ1IDw8IDEyKQotI2RlZmluZSBNNF9EUExMX0RJVl8x OQkJCSg2IDw8IDgpCi0jZGVmaW5lIE00X0NNX0NMS1NFTDFfUExMXzE5X1ZBTAkoTVhfNDhNX1NS QyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCSBNNF9EUExMX0RJVl8xOSB8IE00X0RQTExfTVVMVF8x OSB8IFwKLQkJCQkJIE1YX0FQTExTX0NMSUtJTl8xOV8yKQotCi0vKgotICogIzMJKHJhdGlvMikg YmFzZXBvcnQtdGFyZ2V0LCB0YXJnZXQgRFBMTCA9IDMzMCoyID0gNjYwTUh6Ci0gKi8KLSNkZWZp bmUgTTNfRFBMTF9NVUxUXzEyCQkJKDU1IDw8IDEyKQotI2RlZmluZSBNM19EUExMX0RJVl8xMgkJ CSgxIDw8IDgpCi0jZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAkoTVhfNDhNX1NSQyB8 IE1YXzU0TV9TUkMgfCBcCi0JCQkJCSBNM19EUExMX0RJVl8xMiB8IE0zX0RQTExfTVVMVF8xMiB8 IFwKLQkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMikKLSNkZWZpbmUgTTNfRFBMTF9NVUxUXzEzCQkJ KDc2IDw8IDEyKQotI2RlZmluZSBNM19EUExMX0RJVl8xMwkJCSgyIDw8IDgpCi0jZGVmaW5lIE0z X0NNX0NMS1NFTDFfUExMXzEzX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJ CSBNM19EUExMX0RJVl8xMyB8IE0zX0RQTExfTVVMVF8xMyB8IFwKLQkJCQkJIE1YX0FQTExTX0NM SUtJTl8xMykKLSNkZWZpbmUgTTNfRFBMTF9NVUxUXzE5CQkJKDE3IDw8IDEyKQotI2RlZmluZSBN M19EUExMX0RJVl8xOQkJCSgwIDw8IDgpCi0jZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzE5X1ZB TAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCSBNM19EUExMX0RJVl8xOSB8IE0z X0RQTExfTVVMVF8xOSB8IFwKLQkJCQkJIE1YX0FQTExTX0NMSUtJTl8xOV8yKQotCi0vKgotICog IzIgICAocmF0aW8xKSBEUExMID0gMzMwKjIgPSA2NjBNSHosIEwzPTE2NU1IegotICovCi0jZGVm aW5lIE0yX0RQTExfTVVMVF8xMgkJICAgICAgICAoNTUgPDwgMTIpCi0jZGVmaW5lIE0yX0RQTExf RElWXzEyCQkgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIE0yX0NNX0NMS1NFTDFfUExMXzEyX1ZB TAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCSBNMl9EUExMX0RJVl8xMiB8IE0y X0RQTExfTVVMVF8xMiB8IFwKLQkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMikKLQotLyogU3BlZWQg Y2hhbmdlcyAtIFVzZWQgNjU4LjdNSHogaW5zdGVhZCBvZiA2NjBNSHogZm9yIExQLVJlZnJlc2gg TT03NiBOPTIsCi0gKiByZWxvY2sgdGltZSBpc3N1ZSAqLwotLyogQ29yZSBmcmVxdWVuY3kgY2hh bmdlZCBmcm9tIDMzMC8xNjUgdG8gMzI5LzE2NCBNSHoqLwotI2RlZmluZSBNMl9EUExMX01VTFRf MTMJCSAgICAgICAgKDc2IDw8IDEyKQotI2RlZmluZSBNMl9EUExMX0RJVl8xMwkJICAgICAgICAo MiA8PCA4KQotI2RlZmluZSBNMl9DTV9DTEtTRUwxX1BMTF8xM19WQUwJKE1YXzQ4TV9TUkMgfCBN WF81NE1fU1JDIHwgXAotCQkJCQkgTTJfRFBMTF9ESVZfMTMgfCBNMl9EUExMX01VTFRfMTMgfCBc Ci0JCQkJCSBNWF9BUExMU19DTElLSU5fMTMpCi0KLSNkZWZpbmUgTTJfRFBMTF9NVUxUXzE5CQkg ICAgICAgICgxNyA8PCAxMikKLSNkZWZpbmUgTTJfRFBMTF9ESVZfMTkJCSAgICAgICAgKDAgPDwg OCkKLSNkZWZpbmUgTTJfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRN X1NSQyB8IFwKLQkJCQkJIE0yX0RQTExfRElWXzE5IHwgTTJfRFBMTF9NVUxUXzE5IHwgXAotCQkJ CQkgTVhfQVBMTFNfQ0xJS0lOXzE5XzIpCi0KLS8qIGJvb3QgKGJvb3QpICovCi0jZGVmaW5lIE1C X0RQTExfTVVMVAkJCSgxIDw8IDEyKQotI2RlZmluZSBNQl9EUExMX0RJVgkJCSgwIDw8IDgpCi0j ZGVmaW5lIE1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMg fCBcCi0JCQkJCSBNQl9EUExMX0RJViB8IE1CX0RQTExfTVVMVCB8IFwKLQkJCQkJIE1YX0FQTExT X0NMSUtJTl8xMikKLQotI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xM19WQUwJKE1YXzQ4TV9T UkMgfCBNWF81NE1fU1JDIHwgXAotCQkJCQkgTUJfRFBMTF9ESVYgfCBNQl9EUExMX01VTFQgfCBc Ci0JCQkJCSBNWF9BUExMU19DTElLSU5fMTMpCi0KLSNkZWZpbmUgTUJfQ01fQ0xLU0VMMV9QTExf MTlfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKLQkJCQkJIE1CX0RQTExfRElWIHwg TUJfRFBMTF9NVUxUIHwgXAotCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzE5KQotCi0vKgotICogMjQz MCAtIGNoYXNzaXMgKHNlZG5hKQotICogMTY1IChyYXRpbzEpIHNhbWUgYXMgYWJvdmUgIzIKLSAq IDE1MCAocmF0aW8xKQotICogMTMzIChyYXRpbzIpIHNhbWUgYXMgYWJvdmUgIzQKLSAqIDExMCAo cmF0aW8yKSBzYW1lIGFzIGFib3ZlICMzCi0gKiAxMDQgKHJhdGlvMikKLSAqIGJvb3QgKGJvb3Qp Ci0gKi8KLQotLyogUFJDTSBJIHRhcmdldCBEUExMID0gMiozMzBNSHogPSA2NjBNSHogKi8KLSNk ZWZpbmUgTUlfRFBMTF9NVUxUXzEyCQkJKDU1IDw8IDEyKQotI2RlZmluZSBNSV9EUExMX0RJVl8x MgkJCSgxIDw8IDgpCi0jZGVmaW5lIE1JX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAkoTVhfNDhNX1NS QyB8IE1YXzU0TV9TUkMgfCBcCi0JCQkJCSBNSV9EUExMX0RJVl8xMiB8IE1JX0RQTExfTVVMVF8x MiB8IFwKLQkJCQkJIE1YX0FQTExTX0NMSUtJTl8xMikKLQotLyoKLSAqIDI0MjAgRXF1aXZhbGVu dCAtIG1vZGUgcmVnaXN0ZXJzCi0gKiBQUkNNIElJICwgdGFyZ2V0IERQTEwgPSAyKjMwME1IeiA9 IDYwME1IegotICovCi0jZGVmaW5lIE1JSV9EUExMX01VTFRfMTIJCSg1MCA8PCAxMikKLSNkZWZp bmUgTUlJX0RQTExfRElWXzEyCQkJKDEgPDwgOCkKLSNkZWZpbmUgTUlJX0NNX0NMS1NFTDFfUExM XzEyX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfAlcCi0JCQkJCSBNSUlfRFBMTF9ESVZf MTIgfCBNSUlfRFBMTF9NVUxUXzEyIHwgXAotCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzEyKQotI2Rl ZmluZSBNSUlfRFBMTF9NVUxUXzEzCQkoMzAwIDw8IDEyKQotI2RlZmluZSBNSUlfRFBMTF9ESVZf MTMJCQkoMTIgPDwgOCkKLSNkZWZpbmUgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAkoTVhfNDhN X1NSQyB8IE1YXzU0TV9TUkMgfAlcCi0JCQkJCSBNSUlfRFBMTF9ESVZfMTMgfCBNSUlfRFBMTF9N VUxUXzEzIHwgXAotCQkJCQkgTVhfQVBMTFNfQ0xJS0lOXzEzKQotCi0vKiBQUkNNIElJSSB0YXJn ZXQgRFBMTCA9IDIqMjY2ID0gNTMyTUh6Ki8KLSNkZWZpbmUgTUlJSV9EUExMX01VTFRfMTIJCSgx MzMgPDwgMTIpCi0jZGVmaW5lIE1JSUlfRFBMTF9ESVZfMTIJCSg1IDw8IDgpCi0jZGVmaW5lIE1J SUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCShNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8CVwKLQkJ CQkJIE1JSUlfRFBMTF9ESVZfMTIgfCBcCi0JCQkJCSBNSUlJX0RQTExfTVVMVF8xMiB8IE1YX0FQ TExTX0NMSUtJTl8xMikKLSNkZWZpbmUgTUlJSV9EUExMX01VTFRfMTMJCSgyNjYgPDwgMTIpCi0j ZGVmaW5lIE1JSUlfRFBMTF9ESVZfMTMJCSgxMiA8PCA4KQotI2RlZmluZSBNSUlJX0NNX0NMS1NF TDFfUExMXzEzX1ZBTAkoTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfAlcCi0JCQkJCSBNSUlJX0RQ TExfRElWXzEzIHwgXAotCQkJCQkgTUlJSV9EUExMX01VTFRfMTMgfCBNWF9BUExMU19DTElLSU5f MTMpCi0KLS8qIFBSQ00gVklJIChib290IGJ5cGFzcykgKi8KLSNkZWZpbmUgTVZJSV9DTV9DTEtT RUwxX1BMTF8xMl9WQUwJTUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCi0jZGVmaW5lIE1WSUlfQ01f Q0xLU0VMMV9QTExfMTNfVkFMCU1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAotCi0vKiBIaWdoIGFu ZCBsb3cgb3BlcmF0aW9uIHZhbHVlICovCi0jZGVmaW5lIE1YX0NMS1NFTDJfUExMXzJ4X1ZBTAkJ KDIgPDwgMCkKLSNkZWZpbmUgTVhfQ0xLU0VMMl9QTExfMXhfVkFMCQkoMSA8PCAwKQotCi0vKiBN UFUgc3BlZWQgZGVmaW5lcyAqLwotI2RlZmluZSBTMTJNCTEyMDAwMDAwCi0jZGVmaW5lIFMxM00J MTMwMDAwMDAKLSNkZWZpbmUgUzE5TQkxOTIwMDAwMAotI2RlZmluZSBTMjZNCTI2MDAwMDAwCi0j ZGVmaW5lIFMxMDBNCTEwMDAwMDAwMAotI2RlZmluZSBTMTMzTQkxMzMwMDAwMDAKLSNkZWZpbmUg UzE1ME0JMTUwMDAwMDAwCi0jZGVmaW5lIFMxNjRNCTE2NDAwMDAwMAotI2RlZmluZSBTMTY1TQkx NjUwMDAwMDAKLSNkZWZpbmUgUzE5OU0JMTk5MDAwMDAwCi0jZGVmaW5lIFMyMDBNCTIwMDAwMDAw MAotI2RlZmluZSBTMjY2TQkyNjYwMDAwMDAKLSNkZWZpbmUgUzMwME0JMzAwMDAwMDAwCi0jZGVm aW5lIFMzMjlNCTMyOTAwMDAwMAotI2RlZmluZSBTMzMwTQkzMzAwMDAwMDAKLSNkZWZpbmUgUzM5 OU0JMzk5MDAwMDAwCi0jZGVmaW5lIFM0MDBNCTQwMDAwMDAwMAotI2RlZmluZSBTNTMyTQk1MzIw MDAwMDAKLSNkZWZpbmUgUzYwME0JNjAwMDAwMDAwCi0jZGVmaW5lIFM2NThNCTY1ODAwMDAwMAot I2RlZmluZSBTNjYwTQk2NjAwMDAwMDAKLSNkZWZpbmUgUzc5OE0JNzk4MDAwMDAwCi0KLQotZXh0 ZXJuIGNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyBvbWFwMjQyMF9yYXRlX3RhYmxlW107Ci0KLSNp ZmRlZiBDT05GSUdfU09DX09NQVAyNDMwCi1leHRlcm4gY29uc3Qgc3RydWN0IHByY21fY29uZmln IG9tYXAyNDMwX3JhdGVfdGFibGVbXTsKLSNlbHNlCi0jZGVmaW5lIG9tYXAyNDMwX3JhdGVfdGFi bGUJTlVMTAotI2VuZGlmCi1leHRlcm4gY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpyYXRlX3Rh YmxlOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqY3Vycl9wcmNtX3NldDsKLQot I2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5jIGIv YXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3MuYwppbmRleCBiOTQ3YmFjZjIzYTMuLjhi ODAyMWIyOTdhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wZGF0YS1xdWlya3Mu YworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BkYXRhLXF1aXJrcy5jCkBAIC0yNyw3ICsyNyw2 IEBACiAKICNpbmNsdWRlICJjbG9ja2RvbWFpbi5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgotI2lu Y2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgogI2lu Y2x1ZGUgIm9tYXBfZGV2aWNlLmgiCiAjaW5jbHVkZSAib21hcC1zZWN1cmUuaCIKQEAgLTQyLDE1 ICs0MSw2IEBAIHN0cnVjdCBwZGF0YV9pbml0IHsKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZfYXV4 ZGF0YSBvbWFwX2F1eGRhdGFfbG9va3VwW107CiAKLSNpZmRlZiBDT05GSUdfTUFDSF9OT0tJQV9O OFgwCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcDI0MjBfbjh4MF9sZWdhY3lfaW5pdCh2b2lkKQot ewotCW9tYXBfYXV4ZGF0YV9sb29rdXBbMF0ucGxhdGZvcm1fZGF0YSA9IG44eDBfbGVnYWN5X2lu aXQoKTsKLX0KLSNlbHNlCi0jZGVmaW5lIG9tYXAyNDIwX244eDBfbGVnYWN5X2luaXQJTlVMTAot I2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogLyoKICAqIENvbmZpZ3VyZXMgR1BJ T3MgMTI2LCAxMjcgYW5kIDEyOSB0byAxLjhWIG1vZGUgaW5zdGVhZCBvZiAzLjBWCkBAIC00MzEs MjYgKzQyMSw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19tY2JzcF9pbml0KHZvaWQpCiBz dGF0aWMgdm9pZCBfX2luaXQgb21hcDNfbWNic3BfaW5pdCh2b2lkKSB7fQogI2VuZGlmCiAKLS8q Ci0gKiBGZXcgYm9hcmRzIHN0aWxsIG5lZWQgYXV4ZGF0YSBwb3B1bGF0ZWQgYmVmb3JlIHdlIHBv cHVsYXRlCi0gKiB0aGUgZGV2IGVudHJpZXMgaW4gb2ZfcGxhdGZvcm1fcG9wdWxhdGUoKS4KLSAq Lwotc3RhdGljIHN0cnVjdCBwZGF0YV9pbml0IGF1eGRhdGFfcXVpcmtzW10gX19pbml0ZGF0YSA9 IHsKLSNpZmRlZiBDT05GSUdfU09DX09NQVAyNDIwCi0JeyAibm9raWEsbjgwMCIsIG9tYXAyNDIw X244eDBfbGVnYWN5X2luaXQsIH0sCi0JeyAibm9raWEsbjgxMCIsIG9tYXAyNDIwX244eDBfbGVn YWN5X2luaXQsIH0sCi0JeyAibm9raWEsbjgxMC13aW1heCIsIG9tYXAyNDIwX244eDBfbGVnYWN5 X2luaXQsIH0sCi0jZW5kaWYKLQl7IC8qIHNlbnRpbmVsICovIH0sCi19OwotCiBzdHJ1Y3Qgb21h cF9zcl9kYXRhIF9fbWF5YmVfdW51c2VkIG9tYXBfc3JfcGRhdGFbT01BUF9TUl9OUl07CiAKIHN0 YXRpYyBzdHJ1Y3Qgb2ZfZGV2X2F1eGRhdGEgb21hcF9hdXhkYXRhX2xvb2t1cFtdID0gewotI2lm ZGVmIENPTkZJR19NQUNIX05PS0lBX044WDAKLQlPRl9ERVZfQVVYREFUQSgidGksb21hcDI0MjAt bW1jIiwgMHg0ODA5YzAwMCwgIm1tY2ktb21hcC4wIiwgTlVMTCksCi0JT0ZfREVWX0FVWERBVEEo Im1lbmVsYXVzIiwgMHg3MiwgIjEtMDA3MiIsICZuOHgwX21lbmVsYXVzX3BsYXRmb3JtX2RhdGEp LAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKIAlPRl9ERVZfQVVYREFUQSgidGks b21hcDItaW9tbXUiLCAweDVkMDAwMDAwLCAiNWQwMDAwMDAubW11IiwKIAkJICAgICAgICZvbWFw M19pb21tdV9wZGF0YSksCkBAIC01NjAsMTMgKzUzMywxMSBAQCB2b2lkIF9faW5pdCBwZGF0YV9x dWlya3NfaW5pdChjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvbWFwX2R0X21hdGNoX3RhYmxl KQogCSAqIFdlIHN0aWxsIG5lZWQgdGhpcyBmb3Igb21hcDI0MjAgYW5kIG9tYXAzIFBNIHRvIHdv cmssIG90aGVycyBhcmUKIAkgKiB1c2luZyBkcml2ZXJzL21pc2Mvc3JhbS5jIGFscmVhZHkuCiAJ ICovCi0JaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgidGksb21hcDI0MjAiKSB8fAotCSAg ICBvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInRpLG9tYXAzIikpCisJaWYgKElTX0VOQUJMRUQo Q09ORklHX0FSQ0hfT01BUDMpICYmCisJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgidGks b21hcDMiKSkgewogCQlvbWFwX3NkcmNfaW5pdChOVUxMLCBOVUxMKTsKLQotCWlmIChvZl9tYWNo aW5lX2lzX2NvbXBhdGlibGUoInRpLG9tYXAzIikpCiAJCW9tYXAzX21jYnNwX2luaXQoKTsKLQlw ZGF0YV9xdWlya3NfY2hlY2soYXV4ZGF0YV9xdWlya3MpOworCX0KIAogCXBkYXRhX3F1aXJrc19p bml0X2Nsb2NrcyhvbWFwX2R0X21hdGNoX3RhYmxlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0v bWFjaC1vbWFwMi9wbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oCmluZGV4IGY5N2ZmOTNm MmZiNC4uNTc1MWI4NWU5ZmZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmgK KysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oCkBAIC00MywxMSArNDMsNiBAQCBleHRlcm4g dm9pZCBwbV9kYmdfdXBkYXRlX3RpbWUoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgaW50IHBy ZXYpOwogI2RlZmluZSBwbV9kYmdfdXBkYXRlX3RpbWUocHdyZG0sIHByZXYpIGRvIHt9IHdoaWxl ICgwKTsKICNlbmRpZiAvKiBDT05GSUdfUE1fREVCVUcgKi8KIAotLyogMjR4eCAqLwotZXh0ZXJu IHZvaWQgb21hcDI0eHhfY3B1X3N1c3BlbmQodTMyIGRsbF9jdHJsLCB2b2lkIF9faW9tZW0gKnNk cmNfZGxsYV9jdHJsLAotCQkJCQl2b2lkIF9faW9tZW0gKnNkcmNfcG93ZXIpOwotZXh0ZXJuIHVu c2lnbmVkIGludCBvbWFwMjR4eF9jcHVfc3VzcGVuZF9zejsKLQogLyogM3h4eCAqLwogZXh0ZXJu IHZvaWQgb21hcDM0eHhfY3B1X3N1c3BlbmQoaW50IHNhdmVfc3RhdGUpOwogCmRpZmYgLS1naXQg YS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmggYi9hcmNoL2FybS9tYWNoLW9tYXAy L3Bvd2VyZG9tYWluLmgKaW5kZXggZmJjODk5OTk0NjBiLi5lYWY2ZDExMDRkYzIgMTAwNjQ0Ci0t LSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uaAorKysgYi9hcmNoL2FybS9tYWNo LW9tYXAyL3Bvd2VyZG9tYWluLmgKQEAgLTI0NCw4ICsyNDQsNiBAQCBpbnQgcHdyZG1fcG9zdF90 cmFuc2l0aW9uKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogCiBleHRlcm4gaW50IG9tYXBf c2V0X3B3cmRtX3N0YXRlKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHN0YXRlKTsKIAot ZXh0ZXJuIHZvaWQgb21hcDI0MnhfcG93ZXJkb21haW5zX2luaXQodm9pZCk7Ci1leHRlcm4gdm9p ZCBvbWFwMjQzeF9wb3dlcmRvbWFpbnNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAzeHh4 X3Bvd2VyZG9tYWluc19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgYW0zM3h4X3Bvd2VyZG9tYWlu c19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDQ0eHhfcG93ZXJkb21haW5zX2luaXQodm9p ZCk7CkBAIC0yNTMsNyArMjUxLDYgQEAgZXh0ZXJuIHZvaWQgb21hcDU0eHhfcG93ZXJkb21haW5z X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBkcmE3eHhfcG93ZXJkb21haW5zX2luaXQodm9pZCk7 CiB2b2lkIGFtNDN4eF9wb3dlcmRvbWFpbnNfaW5pdCh2b2lkKTsKIAotZXh0ZXJuIHN0cnVjdCBw d3JkbV9vcHMgb21hcDJfcHdyZG1fb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3QgcHdyZG1fb3Bz IG9tYXAzX3B3cmRtX29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IHB3cmRtX29wcyBhbTMzeHhf cHdyZG1fb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3QgcHdyZG1fb3BzIG9tYXA0X3B3cmRtX29w ZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczJ4 eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4X2RhdGEuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmEyNTlhZGJkYzYxLi4wMDAwMDAwMDAwMDAK LS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyeHh4X2RhdGEuYworKysgL2Rl di9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5Ci0vKgotICogT01BUDJYWFggcG93ZXJkb21haW4gZGVmaW5pdGlvbnMKLSAqCi0g KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCwgMjAxMSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgot ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBQYXVs IFdhbG1zbGV5LCBKb3VuaSBIw7ZnYW5kZXIKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVs Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSAic29jLmgiCi0jaW5jbHVk ZSAicG93ZXJkb21haW4uaCIKLSNpbmNsdWRlICJwb3dlcmRvbWFpbnMyeHh4XzN4eHhfZGF0YS5o IgotCi0jaW5jbHVkZSAicHJjbS1jb21tb24uaCIKLSNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIK LSNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCi0KLS8qIDI0WFggcG93ZXJkb21haW5zIGFu ZCBkZXBlbmRlbmNpZXMgKi8KLQotLyogUG93ZXJkb21haW5zICovCi0KLXN0YXRpYyBzdHJ1Y3Qg cG93ZXJkb21haW4gZHNwX3B3cmRtID0gewotCS5uYW1lCQkgID0gImRzcF9wd3JkbSIsCi0JLnBy Y21fb2ZmcwkgID0gT01BUDI0WFhfRFNQX01PRCwKLQkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9S RVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfUkVULAotCS5iYW5rcwkJICA9IDEs Ci0JLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9IFBXUlNUU19SRVQsCi0JfSwKLQkucHdy c3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JTVFNfT04sCi0JfSwKLQkudm9sdGRtCQkgID0g eyAubmFtZSA9ICJjb3JlIiB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVf MjR4eF9wd3JkbSA9IHsKLQkubmFtZQkJICA9ICJtcHVfcHdyZG0iLAotCS5wcmNtX29mZnMJICA9 IE1QVV9NT0QsCi0JLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAotCS5wd3JzdHNfbG9n aWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCi0JLmJhbmtzCQkgID0gMSwKLQkucHdyc3RzX21lbV9y ZXQJICA9IHsKLQkJWzBdID0gUFdSU1RTX1JFVCwKLQl9LAotCS5wd3JzdHNfbWVtX29uCSAgPSB7 Ci0JCVswXSA9IFBXUlNUU19PTiwKLQl9LAotCS52b2x0ZG0JCSAgPSB7IC5uYW1lID0gImNvcmUi IH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfMjR4eF9wd3JkbSA9IHsK LQkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKLQkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKLQku cHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JT VFNfUkVULAotCS5iYW5rcwkJICA9IDMsCi0JLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9 IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMVJFVFNUQVRFICovCi0JCVsxXSA9IFBXUlNUU19PRkZf UkVULAkgLyogTUVNMlJFVFNUQVRFICovCi0JCVsyXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVN M1JFVFNUQVRFICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JTVFNf T0ZGX1JFVF9PTiwgLyogTUVNMU9OU1RBVEUgKi8KLQkJWzFdID0gUFdSU1RTX09GRl9SRVRfT04s IC8qIE1FTTJPTlNUQVRFICovCi0JCVsyXSA9IFBXUlNUU19PRkZfUkVUX09OLCAvKiBNRU0zT05T VEFURSAqLwotCX0sCi0JLnZvbHRkbQkJICA9IHsgLm5hbWUgPSAiY29yZSIgfSwKLX07Ci0KLQot LyoKLSAqIDI0MzAtc3BlY2lmaWMgcG93ZXJkb21haW5zCi0gKi8KLQotLyogWFhYIDI0MzAgS0lM TERPTUFJTldLVVAgYml0PyAgTm8gY3VycmVudCB1c2VycyBhcHBhcmVudGx5ICovCi0KLXN0YXRp YyBzdHJ1Y3QgcG93ZXJkb21haW4gbWRtX3B3cmRtID0gewotCS5uYW1lCQkgID0gIm1kbV9wd3Jk bSIsCi0JLnByY21fb2ZmcwkgID0gT01BUDI0MzBfTURNX01PRCwKLQkucHdyc3RzCQkgID0gUFdS U1RTX09GRl9SRVRfT04sCi0JLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfUkVULAotCS5iYW5r cwkJICA9IDEsCi0JLnB3cnN0c19tZW1fcmV0CSAgPSB7Ci0JCVswXSA9IFBXUlNUU19SRVQsIC8q IE1FTVJFVFNUQVRFICovCi0JfSwKLQkucHdyc3RzX21lbV9vbgkgID0gewotCQlbMF0gPSBQV1JT VFNfT04sICAvKiBNRU1PTlNUQVRFICovCi0JfSwKLQkudm9sdGRtCQkgID0geyAubmFtZSA9ICJj b3JlIiB9LAotfTsKLQotLyoKLSAqCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAq cG93ZXJkb21haW5zX29tYXAyNHh4W10gX19pbml0ZGF0YSA9IHsKLQkmd2t1cF9vbWFwMl9wd3Jk bSwKLQkmZ2Z4X29tYXAyX3B3cmRtLAotCSZkc3BfcHdyZG0sCi0JJm1wdV8yNHh4X3B3cmRtLAot CSZjb3JlXzI0eHhfcHdyZG0sCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFp biAqcG93ZXJkb21haW5zX29tYXAyNDMwW10gX19pbml0ZGF0YSA9IHsKLQkmbWRtX3B3cmRtLAot CU5VTEwKLX07Ci0KLXZvaWQgX19pbml0IG9tYXAyNDJ4X3Bvd2VyZG9tYWluc19pbml0KHZvaWQp Ci17Ci0JaWYgKCFjcHVfaXNfb21hcDI0MjAoKSkKLQkJcmV0dXJuOwotCi0JcHdyZG1fcmVnaXN0 ZXJfcGxhdGZvcm1fZnVuY3MoJm9tYXAyX3B3cmRtX29wZXJhdGlvbnMpOwotCXB3cmRtX3JlZ2lz dGVyX3B3cmRtcyhwb3dlcmRvbWFpbnNfb21hcDI0eHgpOwotCXB3cmRtX2NvbXBsZXRlX2luaXQo KTsKLX0KLQotdm9pZCBfX2luaXQgb21hcDI0M3hfcG93ZXJkb21haW5zX2luaXQodm9pZCkKLXsK LQlpZiAoIWNwdV9pc19vbWFwMjQzMCgpKQotCQlyZXR1cm47Ci0KLQlwd3JkbV9yZWdpc3Rlcl9w bGF0Zm9ybV9mdW5jcygmb21hcDJfcHdyZG1fb3BlcmF0aW9ucyk7Ci0JcHdyZG1fcmVnaXN0ZXJf cHdyZG1zKHBvd2VyZG9tYWluc19vbWFwMjR4eCk7Ci0JcHdyZG1fcmVnaXN0ZXJfcHdyZG1zKHBv d2VyZG9tYWluc19vbWFwMjQzMCk7Ci0JcHdyZG1fY29tcGxldGVfaW5pdCgpOwotfQpkaWZmIC0t Z2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1v bWFwMi9wcmNtLWNvbW1vbi5oCmluZGV4IDVlMzU0NGE2MzUyNi4uZTMyNmJiNmEwOWRiIDEwMDY0 NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKKysrIGIvYXJjaC9hcm0v bWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCkBAIC0yNywxMiArMjcsNiBAQAogI2RlZmluZSBQTExf TU9ECQkJCQkJMHg1MDAKIAogCi0vKiBDaGlwLXNwZWNpZmljIG1vZHVsZSBvZmZzZXRzICovCi0j ZGVmaW5lIE9NQVAyNFhYX0dSX01PRAkJCQkJT0NQX01PRAotI2RlZmluZSBPTUFQMjRYWF9EU1Bf TU9ECQkJCTB4ODAwCi0KLSNkZWZpbmUgT01BUDI0MzBfTURNX01PRAkJCQkweGMwMAotCiAvKiBJ VkEyIG1vZHVsZSBpcyA8IGJhc2Ugb24gMzQzMCAqLwogI2RlZmluZSBPTUFQMzQzMF9JVkEyX01P RAkJCQktMHg4MDAKICNkZWZpbmUgT01BUDM0MzBFUzJfU0dYX01PRAkJCQlHRlhfTU9ECkBAIC02 MywxNDcgKzU3LDYgQEAKICNkZWZpbmUgVEk4MTZYX1BSTV9TR1hfTU9ECQkJCTB4MGYwMAogI2Rl ZmluZSBUSTgxWFhfUFJNX0FMV09OX01PRAkJCTB4MTgwMAogCi0vKiAyNFhYIHJlZ2lzdGVyIGJp dHMgc2hhcmVkIGJldHdlZW4gQ00gJiBQUk0gcmVnaXN0ZXJzICovCi0KLS8qIENNX0ZDTEtFTjFf Q09SRSwgQ01fSUNMS0VOMV9DT1JFLCBQTV9XS0VOMV9DT1JFIHNoYXJlZCBiaXRzICovCi0jZGVm aW5lIE9NQVAyNDIwX0VOX01NQ19TSElGVAkJCQkyNgotI2RlZmluZSBPTUFQMjQyMF9FTl9NTUNf TUFTSwkJCQkoMSA8PCAyNikKLSNkZWZpbmUgT01BUDI0WFhfRU5fVUFSVDJfU0hJRlQJCQkJMjIK LSNkZWZpbmUgT01BUDI0WFhfRU5fVUFSVDJfTUFTSwkJCQkoMSA8PCAyMikKLSNkZWZpbmUgT01B UDI0WFhfRU5fVUFSVDFfU0hJRlQJCQkJMjEKLSNkZWZpbmUgT01BUDI0WFhfRU5fVUFSVDFfTUFT SwkJCQkoMSA8PCAyMSkKLSNkZWZpbmUgT01BUDI0WFhfRU5fTUNTUEkyX1NISUZUCQkJMTgKLSNk ZWZpbmUgT01BUDI0WFhfRU5fTUNTUEkyX01BU0sJCQkJKDEgPDwgMTgpCi0jZGVmaW5lIE9NQVAy NFhYX0VOX01DU1BJMV9TSElGVAkJCTE3Ci0jZGVmaW5lIE9NQVAyNFhYX0VOX01DU1BJMV9NQVNL CQkJCSgxIDw8IDE3KQotI2RlZmluZSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQJCQkxNgotI2Rl ZmluZSBPTUFQMjRYWF9FTl9NQ0JTUDJfTUFTSwkJCQkoMSA8PCAxNikKLSNkZWZpbmUgT01BUDI0 WFhfRU5fTUNCU1AxX1NISUZUCQkJMTUKLSNkZWZpbmUgT01BUDI0WFhfRU5fTUNCU1AxX01BU0sJ CQkJKDEgPDwgMTUpCi0jZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDEyX1NISUZUCQkJCTE0Ci0jZGVm aW5lIE9NQVAyNFhYX0VOX0dQVDEyX01BU0sJCQkJKDEgPDwgMTQpCi0jZGVmaW5lIE9NQVAyNFhY X0VOX0dQVDExX1NISUZUCQkJCTEzCi0jZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDExX01BU0sJCQkJ KDEgPDwgMTMpCi0jZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDEwX1NISUZUCQkJCTEyCi0jZGVmaW5l IE9NQVAyNFhYX0VOX0dQVDEwX01BU0sJCQkJKDEgPDwgMTIpCi0jZGVmaW5lIE9NQVAyNFhYX0VO X0dQVDlfU0hJRlQJCQkJMTEKLSNkZWZpbmUgT01BUDI0WFhfRU5fR1BUOV9NQVNLCQkJCSgxIDw8 IDExKQotI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZUCQkJCTEwCi0jZGVmaW5lIE9NQVAy NFhYX0VOX0dQVDhfTUFTSwkJCQkoMSA8PCAxMCkKLSNkZWZpbmUgT01BUDI0WFhfRU5fR1BUN19T SElGVAkJCQk5Ci0jZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDdfTUFTSwkJCQkoMSA8PCA5KQotI2Rl ZmluZSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZUCQkJCTgKLSNkZWZpbmUgT01BUDI0WFhfRU5fR1BU Nl9NQVNLCQkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDVfU0hJRlQJCQkJNwot I2RlZmluZSBPTUFQMjRYWF9FTl9HUFQ1X01BU0sJCQkJKDEgPDwgNykKLSNkZWZpbmUgT01BUDI0 WFhfRU5fR1BUNF9TSElGVAkJCQk2Ci0jZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDRfTUFTSwkJCQko MSA8PCA2KQotI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQzX1NISUZUCQkJCTUKLSNkZWZpbmUgT01B UDI0WFhfRU5fR1BUM19NQVNLCQkJCSgxIDw8IDUpCi0jZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDJf U0hJRlQJCQkJNAotI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQyX01BU0sJCQkJKDEgPDwgNCkKLSNk ZWZpbmUgT01BUDI0MjBfRU5fVkxZTlFfU0hJRlQJCQkJMwotI2RlZmluZSBPTUFQMjQyMF9FTl9W TFlOUV9NQVNLCQkJCSgxIDw8IDMpCi0KLS8qIENNX0ZDTEtFTjJfQ09SRSwgQ01fSUNMS0VOMl9D T1JFLCBQTV9XS0VOMl9DT1JFIHNoYXJlZCBiaXRzICovCi0jZGVmaW5lIE9NQVAyNDMwX0VOX0dQ SU81X1NISUZUCQkJCTEwCi0jZGVmaW5lIE9NQVAyNDMwX0VOX0dQSU81X01BU0sJCQkJKDEgPDwg MTApCi0jZGVmaW5lIE9NQVAyNDMwX0VOX01DU1BJM19TSElGVAkJCTkKLSNkZWZpbmUgT01BUDI0 MzBfRU5fTUNTUEkzX01BU0sJCQkJKDEgPDwgOSkKLSNkZWZpbmUgT01BUDI0MzBfRU5fTU1DSFMy X1NISUZUCQkJOAotI2RlZmluZSBPTUFQMjQzMF9FTl9NTUNIUzJfTUFTSwkJCQkoMSA8PCA4KQot I2RlZmluZSBPTUFQMjQzMF9FTl9NTUNIUzFfU0hJRlQJCQk3Ci0jZGVmaW5lIE9NQVAyNDMwX0VO X01NQ0hTMV9NQVNLCQkJCSgxIDw8IDcpCi0jZGVmaW5lIE9NQVAyNFhYX0VOX1VBUlQzX1NISUZU CQkJCTIKLSNkZWZpbmUgT01BUDI0WFhfRU5fVUFSVDNfTUFTSwkJCQkoMSA8PCAyKQotI2RlZmlu ZSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQJCQkJMAotI2RlZmluZSBPTUFQMjRYWF9FTl9VU0JfTUFT SwkJCQkoMSA8PCAwKQotCi0vKiBDTV9JQ0xLRU4yX0NPUkUsIFBNX1dLRU4yX0NPUkUgc2hhcmVk IGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0MzBfRU5fTURNX0lOVENfU0hJRlQJCQkxMQotI2RlZmlu ZSBPTUFQMjQzMF9FTl9NRE1fSU5UQ19NQVNLCQkJKDEgPDwgMTEpCi0jZGVmaW5lIE9NQVAyNDMw X0VOX1VTQkhTX1NISUZUCQkJCTYKLSNkZWZpbmUgT01BUDI0MzBfRU5fVVNCSFNfTUFTSwkJCQko MSA8PCA2KQotI2RlZmluZSBPTUFQMjRYWF9FTl9HUE1DX1NISUZUCQkJCTEKLSNkZWZpbmUgT01B UDI0WFhfRU5fR1BNQ19NQVNLCQkJCSgxIDw8IDEpCi0KLS8qIENNX0lETEVTVDFfQ09SRSwgUE1f V0tTVDFfQ09SRSBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMjQyMF9TVF9NTUNfU0hJRlQJ CQkJMjYKLSNkZWZpbmUgT01BUDI0MjBfU1RfTU1DX01BU0sJCQkJKDEgPDwgMjYpCi0jZGVmaW5l IE9NQVAyNFhYX1NUX1VBUlQyX1NISUZUCQkJCTIyCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQy X01BU0sJCQkJKDEgPDwgMjIpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQxX1NISUZUCQkJCTIx Ci0jZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQxX01BU0sJCQkJKDEgPDwgMjEpCi0jZGVmaW5lIE9N QVAyNFhYX1NUX01DU1BJMl9TSElGVAkJCTE4Ci0jZGVmaW5lIE9NQVAyNFhYX1NUX01DU1BJMl9N QVNLCQkJCSgxIDw8IDE4KQotI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTFfU0hJRlQJCQkxNwot I2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTFfTUFTSwkJCQkoMSA8PCAxNykKLSNkZWZpbmUgT01B UDI0WFhfU1RfTUNCU1AyX1NISUZUCQkJMTYKLSNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AyX01B U0sJCQkJKDEgPDwgMTYpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMV9TSElGVAkJCTE1Ci0j ZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMV9NQVNLCQkJCSgxIDw8IDE1KQotI2RlZmluZSBPTUFQ MjRYWF9TVF9HUFQxMl9TSElGVAkJCQkxNAotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMl9NQVNL CQkJCSgxIDw8IDE0KQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMV9TSElGVAkJCQkxMwotI2Rl ZmluZSBPTUFQMjRYWF9TVF9HUFQxMV9NQVNLCQkJCSgxIDw8IDEzKQotI2RlZmluZSBPTUFQMjRY WF9TVF9HUFQxMF9TSElGVAkJCQkxMgotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMF9NQVNLCQkJ CSgxIDw8IDEyKQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ5X1NISUZUCQkJCTExCi0jZGVmaW5l IE9NQVAyNFhYX1NUX0dQVDlfTUFTSwkJCQkoMSA8PCAxMSkKLSNkZWZpbmUgT01BUDI0WFhfU1Rf R1BUOF9TSElGVAkJCQkxMAotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ4X01BU0sJCQkJKDEgPDwg MTApCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDdfU0hJRlQJCQkJOQotI2RlZmluZSBPTUFQMjRY WF9TVF9HUFQ3X01BU0sJCQkJKDEgPDwgOSkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNl9TSElG VAkJCQk4Ci0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDZfTUFTSwkJCQkoMSA8PCA4KQotI2RlZmlu ZSBPTUFQMjRYWF9TVF9HUFQ1X1NISUZUCQkJCTcKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNV9N QVNLCQkJCSgxIDw8IDcpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDRfU0hJRlQJCQkJNgotI2Rl ZmluZSBPTUFQMjRYWF9TVF9HUFQ0X01BU0sJCQkJKDEgPDwgNikKLSNkZWZpbmUgT01BUDI0WFhf U1RfR1BUM19TSElGVAkJCQk1Ci0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDNfTUFTSwkJCQkoMSA8 PCA1KQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQyX1NISUZUCQkJCTQKLSNkZWZpbmUgT01BUDI0 WFhfU1RfR1BUMl9NQVNLCQkJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVAyNDIwX1NUX1ZMWU5RX1NI SUZUCQkJCTMKLSNkZWZpbmUgT01BUDI0MjBfU1RfVkxZTlFfTUFTSwkJCQkoMSA8PCAzKQotCi0v KiBDTV9JRExFU1QyX0NPUkUsIFBNX1dLU1QyX0NPUkUgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUg T01BUDI0MzBfU1RfTURNX0lOVENfU0hJRlQJCQkxMQotI2RlZmluZSBPTUFQMjQzMF9TVF9NRE1f SU5UQ19NQVNLCQkJKDEgPDwgMTEpCi0jZGVmaW5lIE9NQVAyNDMwX1NUX0dQSU81X1NISUZUCQkJ CTEwCi0jZGVmaW5lIE9NQVAyNDMwX1NUX0dQSU81X01BU0sJCQkJKDEgPDwgMTApCi0jZGVmaW5l IE9NQVAyNDMwX1NUX01DU1BJM19TSElGVAkJCTkKLSNkZWZpbmUgT01BUDI0MzBfU1RfTUNTUEkz X01BU0sJCQkJKDEgPDwgOSkKLSNkZWZpbmUgT01BUDI0MzBfU1RfTU1DSFMyX1NISUZUCQkJOAot I2RlZmluZSBPTUFQMjQzMF9TVF9NTUNIUzJfTUFTSwkJCQkoMSA8PCA4KQotI2RlZmluZSBPTUFQ MjQzMF9TVF9NTUNIUzFfU0hJRlQJCQk3Ci0jZGVmaW5lIE9NQVAyNDMwX1NUX01NQ0hTMV9NQVNL CQkJCSgxIDw8IDcpCi0jZGVmaW5lIE9NQVAyNDMwX1NUX1VTQkhTX1NISUZUCQkJCTYKLSNkZWZp bmUgT01BUDI0MzBfU1RfVVNCSFNfTUFTSwkJCQkoMSA8PCA2KQotI2RlZmluZSBPTUFQMjRYWF9T VF9VQVJUM19TSElGVAkJCQkyCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQzX01BU0sJCQkJKDEg PDwgMikKLSNkZWZpbmUgT01BUDI0WFhfU1RfVVNCX1NISUZUCQkJCTAKLSNkZWZpbmUgT01BUDI0 WFhfU1RfVVNCX01BU0sJCQkJKDEgPDwgMCkKLQotLyogQ01fRkNMS0VOX1dLVVAsIENNX0lDTEtF Tl9XS1VQLCBQTV9XS0VOX1dLVVAgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0WFhfRU5f R1BJT1NfU0hJRlQJCQkJMgotI2RlZmluZSBPTUFQMjRYWF9FTl9HUElPU19NQVNLCQkJCSgxIDw8 IDIpCi0jZGVmaW5lIE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQJCQkJMAotI2RlZmluZSBPTUFQMjRY WF9FTl9HUFQxX01BU0sJCQkJKDEgPDwgMCkKLQotLyogUE1fV0tTVF9XS1VQLCBDTV9JRExFU1Rf V0tVUCBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMjRYWF9TVF9HUElPU19TSElGVAkJCQky Ci0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQSU9TX01BU0sJCQkJKDEgPDwgMikKLSNkZWZpbmUgT01B UDI0WFhfU1RfMzJLU1lOQ19TSElGVAkJCTEKLSNkZWZpbmUgT01BUDI0WFhfU1RfMzJLU1lOQ19N QVNLCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMV9TSElGVAkJCQkwCi0jZGVm aW5lIE9NQVAyNFhYX1NUX0dQVDFfTUFTSwkJCQkoMSA8PCAwKQotCi0vKiBDTV9JRExFU1RfTURN IGFuZCBQTV9XS1NUX01ETSBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMjQzMF9TVF9NRE1f U0hJRlQJCQkJMAotI2RlZmluZSBPTUFQMjQzMF9TVF9NRE1fTUFTSwkJCQkoMSA8PCAwKQotCi0K IC8qIDM0MzAgcmVnaXN0ZXIgYml0cyBzaGFyZWQgYmV0d2VlbiBDTSAmIFBSTSByZWdpc3RlcnMg Ki8KIAogLyogQ01fUkVWSVNJT04sIFBSTV9SRVZJU0lPTiBzaGFyZWQgYml0cyAqLwpkaWZmIC0t Z2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0yNHh4LmggYi9hcmNoL2FybS9t YWNoLW9tYXAyL3BybS1yZWdiaXRzLTI0eHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggZmY4MzgwMWY2NDM5Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9w cm0tcmVnYml0cy0yNHh4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0jaWZuZGVmIF9fQVJDSF9BUk1f TUFDSF9PTUFQMl9QUk1fUkVHQklUU18yNFhYX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09N QVAyX1BSTV9SRUdCSVRTXzI0WFhfSAotCi0vKgotICogT01BUDI0WFggUG93ZXIvUmVzZXQgTWFu YWdlbWVudCByZWdpc3RlciBiaXRzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIElu c3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24K LSAqCi0gKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKLSAqLwotCi0jaW5jbHVkZSAicHJtMnh4 eC5oIgotCi0jZGVmaW5lIE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQgCQkJCTAKLSNkZWZpbmUgT01B UDI0WFhfRk9SQ0VTVEFURV9NQVNLCQkJKDEgPDwgMTgpCi0jZGVmaW5lIE9NQVAyNFhYX0FVVE9J RExFX01BU0sJCQkJKDEgPDwgMCkKLSNkZWZpbmUgT01BUDI0WFhfQVVUT19FWFRWT0xUX01BU0sJ CQkoMSA8PCAxNSkKLSNkZWZpbmUgT01BUDI0WFhfU0VUT0ZGX0xFVkVMX1NISUZUCQkJMTIKLSNk ZWZpbmUgT01BUDI0WFhfTUVNUkVUQ1RSTF9NQVNLCQkJKDEgPDwgOCkKLSNkZWZpbmUgT01BUDI0 WFhfU0VUUkVUX0xFVkVMX1NISUZUCQkJNgotI2RlZmluZSBPTUFQMjRYWF9WT0xUX0xFVkVMX1NI SUZUCQkJMAotI2RlZmluZSBPTUFQMjQyMF9DTEtPVVQyX0VOX1NISUZUCQkJMTUKLSNkZWZpbmUg T01BUDI0MjBfQ0xLT1VUMl9ESVZfU0hJRlQJCQkxMQotI2RlZmluZSBPTUFQMjQyMF9DTEtPVVQy X0RJVl9XSURUSAkJCTMKLSNkZWZpbmUgT01BUDI0MjBfQ0xLT1VUMl9TT1VSQ0VfTUFTSwkJCSgw eDMgPDwgOCkKLSNkZWZpbmUgT01BUDI0WFhfQ0xLT1VUX0VOX1NISUZUCQkJNwotI2RlZmluZSBP TUFQMjRYWF9DTEtPVVRfRElWX1NISUZUCQkJMwotI2RlZmluZSBPTUFQMjRYWF9DTEtPVVRfRElW X1dJRFRICQkJMwotI2RlZmluZSBPTUFQMjRYWF9DTEtPVVRfU09VUkNFX01BU0sJCQkoMHgzIDw8 IDApCi0jZGVmaW5lIE9NQVAyNFhYX0VNVUxBVElPTl9FTl9TSElGVAkJCTAKLSNkZWZpbmUgT01B UDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVAkJNQotI2RlZmluZSBPTUFQMjRYWF9QTV9X S0RFUF9NUFVfRU5fRFNQX1NISUZUCQkyCi0jZGVmaW5lIE9NQVAyNFhYX0VYVFdNUFVfUlNUX1NI SUZUCQkJNgotI2RlZmluZSBPTUFQMjRYWF9TRUNVX1dEX1JTVF9TSElGVAkJCTUKLSNkZWZpbmUg T01BUDI0WFhfTVBVX1dEX1JTVF9TSElGVAkJCTQKLSNkZWZpbmUgT01BUDI0WFhfU0VDVV9WSU9M X1JTVF9TSElGVAkJCTMKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9w cm0yeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHguYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMzVhNThmNTRiNTI4Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0v bWFjaC1vbWFwMi9wcm0yeHh4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIE9NQVAyeHh4IFBS TSBtb2R1bGUgZnVuY3Rpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTIgVGV4YXMg SW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv bgotICogQmVub8OudCBDb3Vzc29uCi0gKiBQYXVsIFdhbG1zbGV5Ci0gKiBSYWplbmRyYSBOYXlh ayA8cm5heWFrQHRpLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5j bHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxs aW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi0jaW5jbHVkZSAicG93ZXJkb21h aW4uaCIKLSNpbmNsdWRlICJjbG9ja2RvbWFpbi5oIgotI2luY2x1ZGUgInBybTJ4eHguaCIKLSNp bmNsdWRlICJjbTJ4eHhfM3h4eC5oIgotI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKLQot LyoKLSAqIE9NQVAyNHh4IFBNX1BXU1RDVFJMXyouUE9XRVJTVEFURSBhbmQgUE1fUFdTVFNUXyou TEFTVFNUQVRFRU5URVJFRCBiaXRzIC0KLSAqIHRoZXNlIGFyZSByZXZlcnNlZCBmcm9tIHRoZSBi aXRzIHVzZWQgb24gT01BUDMrCi0gKi8KLSNkZWZpbmUgT01BUDI0WFhfUFdSRE1fUE9XRVJfT04J CQkweDAKLSNkZWZpbmUgT01BUDI0WFhfUFdSRE1fUE9XRVJfUkVUCQkweDEKLSNkZWZpbmUgT01B UDI0WFhfUFdSRE1fUE9XRVJfT0ZGCQkweDMKLQotLyoKLSAqIG9tYXAyeHh4X3BybV9yZXNldF9z cmNfbWFwIC0gbWFwIGZyb20gYml0cyBpbiB0aGUgUFJNX1JTVFNUX1dLVVAKLSAqICAgaGFyZHdh cmUgcmVnaXN0ZXIgKHdoaWNoIGFyZSBzcGVjaWZpYyB0byB0aGUgT01BUDJ4eHggU29DcykgdG8K LSAqICAgcmVzZXQgc291cmNlIElEIGJpdCBzaGlmdHMgKHdoaWNoIGlzIGFuIE9NQVAgU29DLWlu ZGVwZW5kZW50Ci0gKiAgIGVudW1lcmF0aW9uKQotICovCi1zdGF0aWMgc3RydWN0IHBybV9yZXNl dF9zcmNfbWFwIG9tYXAyeHh4X3BybV9yZXNldF9zcmNfbWFwW10gPSB7Ci0JeyBPTUFQX0dMT0JB TENPTERfUlNUX1NISUZULCBPTUFQX0dMT0JBTF9DT0xEX1JTVF9TUkNfSURfU0hJRlQgfSwKLQl7 IE9NQVBfR0xPQkFMV0FSTV9SU1RfU0hJRlQsIE9NQVBfR0xPQkFMX1dBUk1fUlNUX1NSQ19JRF9T SElGVCB9LAotCXsgT01BUDI0WFhfU0VDVV9WSU9MX1JTVF9TSElGVCwgT01BUF9TRUNVX1ZJT0xf UlNUX1NSQ19JRF9TSElGVCB9LAotCXsgT01BUDI0WFhfTVBVX1dEX1JTVF9TSElGVCwgT01BUF9N UFVfV0RfUlNUX1NSQ19JRF9TSElGVCB9LAotCXsgT01BUDI0WFhfU0VDVV9XRF9SU1RfU0hJRlQs IE9NQVBfU0VDVV9XRF9SU1RfU1JDX0lEX1NISUZUIH0sCi0JeyBPTUFQMjRYWF9FWFRXTVBVX1JT VF9TSElGVCwgT01BUF9FWFRXQVJNX1JTVF9TUkNfSURfU0hJRlQgfSwKLQl7IC0xLCAtMSB9LAot fTsKLQotLyoqCi0gKiBvbWFwMnh4eF9wcm1fcmVhZF9yZXNldF9zb3VyY2VzIC0gcmV0dXJuIHRo ZSBsYXN0IFNvQyByZXNldCBzb3VyY2UKLSAqCi0gKiBSZXR1cm4gYSB1MzIgcmVwcmVzZW50aW5n IHRoZSBsYXN0IHJlc2V0IHNvdXJjZXMgb2YgdGhlIFNvQy4gIFRoZQotICogcmV0dXJuZWQgcmVz ZXQgc291cmNlIGJpdHMgYXJlIHN0YW5kYXJkaXplZCBhY3Jvc3MgT01BUCBTb0NzLgotICovCi1z dGF0aWMgdTMyIG9tYXAyeHh4X3BybV9yZWFkX3Jlc2V0X3NvdXJjZXModm9pZCkKLXsKLQlzdHJ1 Y3QgcHJtX3Jlc2V0X3NyY19tYXAgKnA7Ci0JdTMyIHIgPSAwOwotCXUzMiB2OwotCi0JdiA9IG9t YXAyX3BybV9yZWFkX21vZF9yZWcoV0tVUF9NT0QsIE9NQVAyX1JNX1JTVFNUKTsKLQotCXAgPSBv bWFwMnh4eF9wcm1fcmVzZXRfc3JjX21hcDsKLQl3aGlsZSAocC0+cmVnX3NoaWZ0ID49IDAgJiYg cC0+c3RkX3NoaWZ0ID49IDApIHsKLQkJaWYgKHYgJiAoMSA8PCBwLT5yZWdfc2hpZnQpKQotCQkJ ciB8PSAxIDw8IHAtPnN0ZF9zaGlmdDsKLQkJcCsrOwotCX0KLQotCXJldHVybiByOwotfQotCi0v KioKLSAqIG9tYXAyeHh4X3B3cnN0X3RvX2NvbW1vbl9wd3JzdCAtIGNvbnZlcnQgT01BUDJ4eHgg cHdyc3QgdG8gY29tbW9uIHB3cnN0Ci0gKiBAb21hcDJ4eHhfcHdyc3Q6IE9NQVAyeHh4IGhhcmR3 YXJlIHBvd2VyIHN0YXRlIHRvIGNvbnZlcnQKLSAqCi0gKiBSZXR1cm4gdGhlIGNvbW1vbiBwb3dl ciBzdGF0ZSBiaXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIE9NQVAyeHh4Ci0gKiBoYXJkd2FyZSBw b3dlciBzdGF0ZSBiaXRzIEBvbWFwMnh4eF9wd3JzdCwgb3IgLUVJTlZBTCB1cG9uIGVycm9yLgot ICovCi1zdGF0aWMgaW50IG9tYXAyeHh4X3B3cnN0X3RvX2NvbW1vbl9wd3JzdCh1OCBvbWFwMnh4 eF9wd3JzdCkKLXsKLQl1OCBwd3JzdDsKLQotCXN3aXRjaCAob21hcDJ4eHhfcHdyc3QpIHsKLQlj YXNlIE9NQVAyNFhYX1BXUkRNX1BPV0VSX09GRjoKLQkJcHdyc3QgPSBQV1JETV9QT1dFUl9PRkY7 Ci0JCWJyZWFrOwotCWNhc2UgT01BUDI0WFhfUFdSRE1fUE9XRVJfUkVUOgotCQlwd3JzdCA9IFBX UkRNX1BPV0VSX1JFVDsKLQkJYnJlYWs7Ci0JY2FzZSBPTUFQMjRYWF9QV1JETV9QT1dFUl9PTjoK LQkJcHdyc3QgPSBQV1JETV9QT1dFUl9PTjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHB3cnN0OwotfQotCi0vKioKLSAqIG9tYXAyeHh4X3By bV9kcGxsX3Jlc2V0IC0gdXNlIERQTEwgcmVzZXQgdG8gcmVib290IHRoZSBPTUFQIFNvQwotICoK LSAqIFNldCB0aGUgRFBMTCByZXNldCBiaXQsIHdoaWNoIHNob3VsZCByZWJvb3QgdGhlIFNvQy4g IFRoaXMgaXMgdGhlCi0gKiByZWNvbW1lbmRlZCB3YXkgdG8gcmVzdGFydCB0aGUgU29DLiAgTm8g cmV0dXJuIHZhbHVlLgotICovCi1zdGF0aWMgdm9pZCBvbWFwMnh4eF9wcm1fZHBsbF9yZXNldCh2 b2lkKQotewotCW9tYXAyX3BybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVBfUlNUX0RQTEwzX01BU0ss IFdLVVBfTU9ELAotCQkJCSAgIE9NQVAyX1JNX1JTVENUUkwpOwotCS8qIE9DUCBiYXJyaWVyICov Ci0Jb21hcDJfcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7Ci19 Ci0KLS8qKgotICogb21hcDJ4eHhfcHJtX2NsZWFyX21vZF9pcnFzIC0gY2xlYXIgd2FrZXVwIHN0 YXR1cyBiaXRzIGZvciBhIG1vZHVsZQotICogQG1vZHVsZTogUFJNIG1vZHVsZSB0byBjbGVhciB3 YWtldXBzIGZyb20KLSAqIEByZWdzOiByZWdpc3RlciBvZmZzZXQgdG8gY2xlYXIKLSAqIEB3a3N0 X21hc2s6IHdha2V1cCBzdGF0dXMgbWFzayB0byBjbGVhcgotICoKLSAqIENsZWFycyB3YWtldXAg c3RhdHVzIGJpdHMgZm9yIGEgZ2l2ZW4gbW9kdWxlLCBzbyB0aGF0IHRoZSBkZXZpY2UgY2FuCi0g KiByZS1lbnRlciBpZGxlLgotICovCi1zdGF0aWMgaW50IG9tYXAyeHh4X3BybV9jbGVhcl9tb2Rf aXJxcyhzMTYgbW9kdWxlLCB1OCByZWdzLCB1MzIgd2tzdF9tYXNrKQotewotCXUzMiB3a3N0Owot Ci0Jd2tzdCA9IG9tYXAyX3BybV9yZWFkX21vZF9yZWcobW9kdWxlLCByZWdzKTsKLQl3a3N0ICY9 IHdrc3RfbWFzazsKLQlvbWFwMl9wcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBtb2R1bGUsIHJlZ3Mp OwotCXJldHVybiAwOwotfQotCi1pbnQgb21hcDJ4eHhfY2xrZG1fc2xlZXAoc3RydWN0IGNsb2Nr ZG9tYWluICpjbGtkbSkKLXsKLQlvbWFwMl9wcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQMjRYWF9G T1JDRVNUQVRFX01BU0ssCi0JCQkJICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJ CSAgIE9NQVAyX1BNX1BXU1RDVFJMKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IG9tYXAyeHh4X2Ns a2RtX3dha2V1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQotewotCW9tYXAyX3BybV9jbGVh cl9tb2RfcmVnX2JpdHMoT01BUDI0WFhfRk9SQ0VTVEFURV9NQVNLLAotCQkJCSAgICAgY2xrZG0t PnB3cmRtLnB0ci0+cHJjbV9vZmZzLAotCQkJCSAgICAgT01BUDJfUE1fUFdTVENUUkwpOwotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9tYXAyeHh4X3B3cmRtX3NldF9uZXh0X3B3cnN0KHN0 cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KQotewotCXU4IG9tYXAyNHh4X3B3cnN0 OwotCi0Jc3dpdGNoIChwd3JzdCkgewotCWNhc2UgUFdSRE1fUE9XRVJfT0ZGOgotCQlvbWFwMjR4 eF9wd3JzdCA9IE9NQVAyNFhYX1BXUkRNX1BPV0VSX09GRjsKLQkJYnJlYWs7Ci0JY2FzZSBQV1JE TV9QT1dFUl9SRVQ6Ci0JCW9tYXAyNHh4X3B3cnN0ID0gT01BUDI0WFhfUFdSRE1fUE9XRVJfUkVU OwotCQlicmVhazsKLQljYXNlIFBXUkRNX1BPV0VSX09OOgotCQlvbWFwMjR4eF9wd3JzdCA9IE9N QVAyNFhYX1BXUkRNX1BPV0VSX09OOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJ TlZBTDsKLQl9Ci0KLQlvbWFwMl9wcm1fcm13X21vZF9yZWdfYml0cyhPTUFQX1BPV0VSU1RBVEVf TUFTSywKLQkJCQkgICAob21hcDI0eHhfcHdyc3QgPDwgT01BUF9QT1dFUlNUQVRFX1NISUZUKSwK LQkJCQkgICBwd3JkbS0+cHJjbV9vZmZzLCBPTUFQMl9QTV9QV1NUQ1RSTCk7Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgb21hcDJ4eHhfcHdyZG1fcmVhZF9uZXh0X3B3cnN0KHN0cnVjdCBw b3dlcmRvbWFpbiAqcHdyZG0pCi17Ci0JdTggb21hcDJ4eHhfcHdyc3Q7Ci0KLQlvbWFwMnh4eF9w d3JzdCA9IG9tYXAyX3BybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCi0J CQkJCQkgICAgICAgT01BUDJfUE1fUFdTVENUUkwsCi0JCQkJCQkgICAgICAgT01BUF9QT1dFUlNU QVRFX01BU0spOwotCi0JcmV0dXJuIG9tYXAyeHh4X3B3cnN0X3RvX2NvbW1vbl9wd3JzdChvbWFw Mnh4eF9wd3JzdCk7Ci19Ci0KLXN0YXRpYyBpbnQgb21hcDJ4eHhfcHdyZG1fcmVhZF9wd3JzdChz dHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQotewotCXU4IG9tYXAyeHh4X3B3cnN0OwotCi0Jb21h cDJ4eHhfcHdyc3QgPSBvbWFwMl9wcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9v ZmZzLAotCQkJCQkJICAgICAgIE9NQVAyX1BNX1BXU1RTVCwKLQkJCQkJCSAgICAgICBPTUFQX1BP V0VSU1RBVEVTVF9NQVNLKTsKLQotCXJldHVybiBvbWFwMnh4eF9wd3JzdF90b19jb21tb25fcHdy c3Qob21hcDJ4eHhfcHdyc3QpOwotfQotCi1zdHJ1Y3QgcHdyZG1fb3BzIG9tYXAyX3B3cmRtX29w ZXJhdGlvbnMgPSB7Ci0JLnB3cmRtX3NldF9uZXh0X3B3cnN0CT0gb21hcDJ4eHhfcHdyZG1fc2V0 X25leHRfcHdyc3QsCi0JLnB3cmRtX3JlYWRfbmV4dF9wd3JzdAk9IG9tYXAyeHh4X3B3cmRtX3Jl YWRfbmV4dF9wd3JzdCwKLQkucHdyZG1fcmVhZF9wd3JzdAk9IG9tYXAyeHh4X3B3cmRtX3JlYWRf cHdyc3QsCi0JLnB3cmRtX3NldF9sb2dpY19yZXRzdAk9IG9tYXAyX3B3cmRtX3NldF9sb2dpY19y ZXRzdCwKLQkucHdyZG1fc2V0X21lbV9vbnN0CT0gb21hcDJfcHdyZG1fc2V0X21lbV9vbnN0LAot CS5wd3JkbV9zZXRfbWVtX3JldHN0CT0gb21hcDJfcHdyZG1fc2V0X21lbV9yZXRzdCwKLQkucHdy ZG1fcmVhZF9tZW1fcHdyc3QJPSBvbWFwMl9wd3JkbV9yZWFkX21lbV9wd3JzdCwKLQkucHdyZG1f cmVhZF9tZW1fcmV0c3QJPSBvbWFwMl9wd3JkbV9yZWFkX21lbV9yZXRzdCwKLQkucHdyZG1fd2Fp dF90cmFuc2l0aW9uCT0gb21hcDJfcHdyZG1fd2FpdF90cmFuc2l0aW9uLAotfTsKLQotLyoKLSAq Ci0gKi8KLQotc3RhdGljIHN0cnVjdCBwcm1fbGxfZGF0YSBvbWFwMnh4eF9wcm1fbGxfZGF0YSA9 IHsKLQkucmVhZF9yZXNldF9zb3VyY2VzID0gJm9tYXAyeHh4X3BybV9yZWFkX3Jlc2V0X3NvdXJj ZXMsCi0JLmFzc2VydF9oYXJkcmVzZXQgPSAmb21hcDJfcHJtX2Fzc2VydF9oYXJkcmVzZXQsCi0J LmRlYXNzZXJ0X2hhcmRyZXNldCA9ICZvbWFwMl9wcm1fZGVhc3NlcnRfaGFyZHJlc2V0LAotCS5p c19oYXJkcmVzZXRfYXNzZXJ0ZWQgPSAmb21hcDJfcHJtX2lzX2hhcmRyZXNldF9hc3NlcnRlZCwK LQkucmVzZXRfc3lzdGVtID0gJm9tYXAyeHh4X3BybV9kcGxsX3Jlc2V0LAotCS5jbGVhcl9tb2Rf aXJxcyA9ICZvbWFwMnh4eF9wcm1fY2xlYXJfbW9kX2lycXMsCi19OwotCi1pbnQgX19pbml0IG9t YXAyeHh4X3BybV9pbml0KGNvbnN0IHN0cnVjdCBvbWFwX3ByY21faW5pdF9kYXRhICpkYXRhKQot ewotCXJldHVybiBwcm1fcmVnaXN0ZXIoJm9tYXAyeHh4X3BybV9sbF9kYXRhKTsKLX0KLQotc3Rh dGljIHZvaWQgX19leGl0IG9tYXAyeHh4X3BybV9leGl0KHZvaWQpCi17Ci0JcHJtX3VucmVnaXN0 ZXIoJm9tYXAyeHh4X3BybV9sbF9kYXRhKTsKLX0KLV9fZXhpdGNhbGwob21hcDJ4eHhfcHJtX2V4 aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4LmggYi9hcmNoL2Fy bS9tYWNoLW9tYXAyL3BybTJ4eHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU5 YjkxNzM0OGY4Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4 LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIE9NQVAyeHh4IFBvd2VyL1Jlc2V0IE1hbmFn ZW1lbnQgKFBSTSkgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIw MDctMjAwOSwgMjAxMS0yMDEyIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQg KEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgotICogUGF1bCBXYWxtc2xleQotICoKLSAq IFRoZSBQUk0gaGFyZHdhcmUgbW9kdWxlcyBvbiB0aGUgT01BUDIvMyBhcmUgcXVpdGUgc2ltaWxh ciB0byBlYWNoCi0gKiBvdGhlci4gIFRoZSBQUk0gb24gT01BUDQgaGFzIGEgbmV3IHJlZ2lzdGVy IGxheW91dCwgYW5kIGlzIGhhbmRsZWQKLSAqIGluIGEgc2VwYXJhdGUgZmlsZS4KLSAqLwotI2lm bmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUFJNMlhYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1f TUFDSF9PTUFQMl9QUk0yWFhYX0gKLQotI2luY2x1ZGUgInByY20tY29tbW9uLmgiCi0jaW5jbHVk ZSAicHJtLmgiCi0jaW5jbHVkZSAicHJtMnh4eF8zeHh4LmgiCi0KLSNkZWZpbmUgT01BUDI0MjBf UFJNX1JFR0FERFIobW9kdWxlLCByZWcpCQkJCVwKLQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQ MjQyMF9QUk1fQkFTRSArIChtb2R1bGUpICsgKHJlZykpCi0jZGVmaW5lIE9NQVAyNDMwX1BSTV9S RUdBRERSKG1vZHVsZSwgcmVnKQkJCQlcCi0JCU9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0MzBf UFJNX0JBU0UgKyAobW9kdWxlKSArIChyZWcpKQotCi0vKgotICogT01BUDItc3BlY2lmaWMgZ2xv YmFsIFBSTSByZWdpc3RlcnMKLSAqIFVzZSB7cmVhZCx3cml0ZX1sX3JlbGF4ZWQoKSB3aXRoIHRo ZXNlIHJlZ2lzdGVycy4KLSAqCi0gKiBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHRoZXNlIGFyZSB0 aGUgcmVnaXN0ZXIgbmFtZXMgYmVnaW5uaW5nIHdpdGgKLSAqIFBSQ01fKiBvbiAyNHh4LiAgKFRo ZSBleGNlcHRpb25zIGFyZSB0aGUgSVJRU1RBVFVTIGFuZCBJUlFFTkFCTEUKLSAqIGJpdHMuKQot ICoKLSAqLwotCi0jZGVmaW5lIE9NQVAyX1BSQ01fUkVWSVNJT05fT0ZGU0VUCTB4MDAwMAotI2Rl ZmluZSBPTUFQMjQyMF9QUkNNX1JFVklTSU9OCQlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9E LCAweDAwMDApCi0jZGVmaW5lIE9NQVAyX1BSQ01fU1lTQ09ORklHX09GRlNFVAkweDAwMTAKLSNk ZWZpbmUgT01BUDI0MjBfUFJDTV9TWVNDT05GSUcJCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9N T0QsIDB4MDAxMCkKLQotI2RlZmluZSBPTUFQMl9QUkNNX0lSUVNUQVRVU19NUFVfT0ZGU0VUCTB4 MDAxOAotI2RlZmluZSBPTUFQMjQyMF9QUkNNX0lSUVNUQVRVU19NUFUJT01BUDI0MjBfUFJNX1JF R0FERFIoT0NQX01PRCwgMHgwMDE4KQotI2RlZmluZSBPTUFQMl9QUkNNX0lSUUVOQUJMRV9NUFVf T0ZGU0VUCTB4MDAxYwotI2RlZmluZSBPTUFQMjQyMF9QUkNNX0lSUUVOQUJMRV9NUFUJT01BUDI0 MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDFjKQotCi0jZGVmaW5lIE9NQVAyX1BSQ01fVk9M VENUUkxfT0ZGU0VUCTB4MDA1MAotI2RlZmluZSBPTUFQMjQyMF9QUkNNX1ZPTFRDVFJMCQlPTUFQ MjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNTApCi0jZGVmaW5lIE9NQVAyX1BSQ01fVk9M VFNUX09GRlNFVAkweDAwNTQKLSNkZWZpbmUgT01BUDI0MjBfUFJDTV9WT0xUU1QJCU9NQVAyNDIw X1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA1NCkKLSNkZWZpbmUgT01BUDJfUFJDTV9DTEtTUkNf Q1RSTF9PRkZTRVQJMHgwMDYwCi0jZGVmaW5lIE9NQVAyNDIwX1BSQ01fQ0xLU1JDX0NUUkwJT01B UDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDYwKQotI2RlZmluZSBPTUFQMl9QUkNNX0NM S09VVF9DVFJMX09GRlNFVAkweDAwNzAKLSNkZWZpbmUgT01BUDI0MjBfUFJDTV9DTEtPVVRfQ1RS TAlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNzApCi0jZGVmaW5lIE9NQVAyX1BS Q01fQ0xLRU1VTF9DVFJMX09GRlNFVAkweDAwNzgKLSNkZWZpbmUgT01BUDI0MjBfUFJDTV9DTEtF TVVMX0NUUkwJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDc4KQotI2RlZmluZSBP TUFQMl9QUkNNX0NMS0NGR19DVFJMX09GRlNFVAkweDAwODAKLSNkZWZpbmUgT01BUDI0MjBfUFJD TV9DTEtDRkdfQ1RSTAlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwODApCi0jZGVm aW5lIE9NQVAyX1BSQ01fQ0xLQ0ZHX1NUQVRVU19PRkZTRVQJMHgwMDg0Ci0jZGVmaW5lIE9NQVAy NDIwX1BSQ01fQ0xLQ0ZHX1NUQVRVUwlPTUFQMjQyMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAw ODQpCi0jZGVmaW5lIE9NQVAyX1BSQ01fVk9MVFNFVFVQX09GRlNFVAkweDAwOTAKLSNkZWZpbmUg T01BUDI0MjBfUFJDTV9WT0xUU0VUVVAJCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4 MDA5MCkKLSNkZWZpbmUgT01BUDJfUFJDTV9DTEtTU0VUVVBfT0ZGU0VUCTB4MDA5NAotI2RlZmlu ZSBPTUFQMjQyMF9QUkNNX0NMS1NTRVRVUAkJT01BUDI0MjBfUFJNX1JFR0FERFIoT0NQX01PRCwg MHgwMDk0KQotI2RlZmluZSBPTUFQMl9QUkNNX1BPTENUUkxfT0ZGU0VUCTB4MDA5OAotI2RlZmlu ZSBPTUFQMjQyMF9QUkNNX1BPTENUUkwJCU9NQVAyNDIwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4 MDA5OCkKLQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX1JFVklTSU9OCQlPTUFQMjQzMF9QUk1fUkVH QUREUihPQ1BfTU9ELCAweDAwMDApCi0jZGVmaW5lIE9NQVAyNDMwX1BSQ01fU1lTQ09ORklHCQlP TUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwMTApCi0KLSNkZWZpbmUgT01BUDI0MzBf UFJDTV9JUlFTVEFUVVNfTVBVCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDAxOCkK LSNkZWZpbmUgT01BUDI0MzBfUFJDTV9JUlFFTkFCTEVfTVBVCU9NQVAyNDMwX1BSTV9SRUdBRERS KE9DUF9NT0QsIDB4MDAxYykKLQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX1ZPTFRDVFJMCQlPTUFQ MjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNTApCi0jZGVmaW5lIE9NQVAyNDMwX1BSQ01f Vk9MVFNUCQlPTUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwNTQpCi0jZGVmaW5lIE9N QVAyNDMwX1BSQ01fQ0xLU1JDX0NUUkwJT01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgw MDYwKQotI2RlZmluZSBPTUFQMjQzMF9QUkNNX0NMS09VVF9DVFJMCU9NQVAyNDMwX1BSTV9SRUdB RERSKE9DUF9NT0QsIDB4MDA3MCkKLSNkZWZpbmUgT01BUDI0MzBfUFJDTV9DTEtFTVVMX0NUUkwJ T01BUDI0MzBfUFJNX1JFR0FERFIoT0NQX01PRCwgMHgwMDc4KQotI2RlZmluZSBPTUFQMjQzMF9Q UkNNX0NMS0NGR19DVFJMCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA4MCkKLSNk ZWZpbmUgT01BUDI0MzBfUFJDTV9DTEtDRkdfU1RBVFVTCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9D UF9NT0QsIDB4MDA4NCkKLSNkZWZpbmUgT01BUDI0MzBfUFJDTV9WT0xUU0VUVVAJCU9NQVAyNDMw X1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5MCkKLSNkZWZpbmUgT01BUDI0MzBfUFJDTV9DTEtT U0VUVVAJCU9NQVAyNDMwX1BSTV9SRUdBRERSKE9DUF9NT0QsIDB4MDA5NCkKLSNkZWZpbmUgT01B UDI0MzBfUFJDTV9QT0xDVFJMCQlPTUFQMjQzMF9QUk1fUkVHQUREUihPQ1BfTU9ELCAweDAwOTgp Ci0KLS8qCi0gKiBNb2R1bGUgc3BlY2lmaWMgUFJNIHJlZ2lzdGVyIG9mZnNldHMgZnJvbSBQUk1f QkFTRSArIGRvbWFpbiBvZmZzZXQKLSAqCi0gKiBVc2UgcHJtX3tyZWFkLHdyaXRlfV9tb2RfcmVn KCkgd2l0aCB0aGVzZSByZWdpc3RlcnMuCi0gKgotICogV2l0aCBhIGZldyBleGNlcHRpb25zLCB0 aGVzZSBhcmUgdGhlIHJlZ2lzdGVyIG5hbWVzIGJlZ2lubmluZyB3aXRoCi0gKiB7UE0sUk19Xyog b24gYm90aCBPTUFQMi8zIFNvQyBmYW1pbGllcy4uICAoVGhlIGV4Y2VwdGlvbnMgYXJlIHRoZQot ICogSVJRU1RBVFVTIGFuZCBJUlFFTkFCTEUgYml0cy4pCi0gKi8KLQotLyogUmVnaXN0ZXIgb2Zm c2V0cyBhcHBlYXJpbmcgb24gYm90aCBPTUFQMiBhbmQgT01BUDMgKi8KLQotI2RlZmluZSBPTUFQ Ml9STV9SU1RDVFJMCQkJCTB4MDA1MAotI2RlZmluZSBPTUFQMl9STV9SU1RUSU1FCQkJCTB4MDA1 NAotI2RlZmluZSBPTUFQMl9STV9SU1RTVAkJCQkJMHgwMDU4Ci0jZGVmaW5lIE9NQVAyX1BNX1BX U1RDVFJMCQkJCTB4MDBlMAotI2RlZmluZSBPTUFQMl9QTV9QV1NUU1QJCQkJCTB4MDBlNAotCi0j ZGVmaW5lIFBNX1dLRU4JCQkJCQkweDAwYTAKLSNkZWZpbmUgUE1fV0tFTjEJCQkJCVBNX1dLRU4K LSNkZWZpbmUgUE1fV0tTVAkJCQkJCTB4MDBiMAotI2RlZmluZSBQTV9XS1NUMQkJCQkJUE1fV0tT VAotI2RlZmluZSBQTV9XS0RFUAkJCQkJMHgwMGM4Ci0jZGVmaW5lIFBNX0VWR0VOQ1RSTAkJCQkJ MHgwMGQ0Ci0jZGVmaW5lIFBNX0VWR0VOT05USU0JCQkJCTB4MDBkOAotI2RlZmluZSBQTV9FVkdF Tk9GRlRJTQkJCQkJMHgwMGRjCi0KLS8qIE9NQVAyeHh4IHNwZWNpZmljIHJlZ2lzdGVyIG9mZnNl dHMgKi8KLSNkZWZpbmUgT01BUDI0WFhfUE1fV0tFTjIJCQkJMHgwMGE0Ci0jZGVmaW5lIE9NQVAy NFhYX1BNX1dLU1QyCQkJCTB4MDBiNAotCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRU1RBVFVT X0RTUAkJCTB4MDBmMAkvKiBJVkEgbW9kICovCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5B QkxFX0RTUAkJCTB4MDBmNAkvKiBJVkEgbW9kICovCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJR U1RBVFVTX0lWQQkJCTB4MDBmOAotI2RlZmluZSBPTUFQMjRYWF9QUkNNX0lSUUVOQUJMRV9JVkEJ CQkweDAwZmMKLQotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0vKiBGdW5jdGlvbiBwcm90b3R5cGVz ICovCi1leHRlcm4gaW50IG9tYXAyeHh4X2Nsa2RtX3NsZWVwKHN0cnVjdCBjbG9ja2RvbWFpbiAq Y2xrZG0pOwotZXh0ZXJuIGludCBvbWFwMnh4eF9jbGtkbV93YWtldXAoc3RydWN0IGNsb2NrZG9t YWluICpjbGtkbSk7Ci0KLWludCBfX2luaXQgb21hcDJ4eHhfcHJtX2luaXQoY29uc3Qgc3RydWN0 IG9tYXBfcHJjbV9pbml0X2RhdGEgKmRhdGEpOwotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1n aXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1v bWFwMi9wcm0yeHh4XzN4eHguYwppbmRleCBkOTgzZWZhYzZmNGYuLmFmYWJhNzE1M2VjZSAxMDA2 NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0yeHh4XzN4eHguYworKysgYi9hcmNoL2Fy bS9tYWNoLW9tYXAyL3BybTJ4eHhfM3h4eC5jCkBAIC0xNSw3ICsxNSw2IEBACiAKICNpbmNsdWRl ICJwb3dlcmRvbWFpbi5oIgogI2luY2x1ZGUgInBybTJ4eHhfM3h4eC5oIgotI2luY2x1ZGUgInBy bS1yZWdiaXRzLTI0eHguaCIKICNpbmNsdWRlICJjbG9ja2RvbWFpbi5oIgogCiAvKioKZGlmZiAt LWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1v bWFwMi9wcm1fY29tbW9uLmMKaW5kZXggZWU0NTg4YWNkYTUwLi4zNTQ2ZTcyOTJiZmIgMTAwNjQ0 Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtX2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21h Y2gtb21hcDIvcHJtX2NvbW1vbi5jCkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlICJzb2Mu aCIKICNpbmNsdWRlICJwcm0yeHh4XzN4eHguaCIKLSNpbmNsdWRlICJwcm0yeHh4LmgiCiAjaW5j bHVkZSAicHJtM3h4eC5oIgogI2luY2x1ZGUgInBybTMzeHguaCIKICNpbmNsdWRlICJwcm00NHh4 LmgiCkBAIC01ODIsMTMgKzU4MSw2IEBAIGludCBwcm1fdW5yZWdpc3RlcihzdHJ1Y3QgcHJtX2xs X2RhdGEgKnBsZCkKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCi1z dGF0aWMgc3RydWN0IG9tYXBfcHJjbV9pbml0X2RhdGEgb21hcDJfcHJtX2RhdGEgX19pbml0ZGF0 YSA9IHsKLQkuaW5kZXggPSBUSV9DTEtNX1BSTSwKLQkuaW5pdCA9IG9tYXAyeHh4X3BybV9pbml0 LAotfTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKIHN0YXRpYyBzdHJ1Y3Qg b21hcF9wcmNtX2luaXRfZGF0YSBvbWFwM19wcm1fZGF0YSBfX2luaXRkYXRhID0gewogCS5pbmRl eCA9IFRJX0NMS01fUFJNLApAQCAtNjcwLDkgKzY2Miw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIG9tYXBfcHJjbV9kdF9tYXRjaF90YWJsZVtdIF9faW5pdGNvbnN0ID0gewog CXsgLmNvbXBhdGlibGUgPSAidGksZG04MTQtcGxsc3MiLCAuZGF0YSA9ICZkbTgxNF9wbGxzc19k YXRhIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ0aSxkbTgxNi1wcmNtIiwgLmRhdGEgPSAmYW0zX3By bV9kYXRhIH0sCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgotCXsgLmNvbXBhdGli bGUgPSAidGksb21hcDItcHJjbSIsIC5kYXRhID0gJm9tYXAyX3BybV9kYXRhIH0sCi0jZW5kaWYK ICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDMtcHJt IiwgLmRhdGEgPSAmb21hcDNfcHJtX2RhdGEgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9h cm0vbWFjaC1vbWFwMi9zZHJjLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuaAppbmRleCA0 NWIzNTQyMmI1ODcuLmMzNGZiYTRkMmYxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFw Mi9zZHJjLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmgKQEAgLTkwLDE3ICs5MCw3 IEBAIHN0cnVjdCBtZW1vcnlfdGltaW5ncyB7CiAJdTMyIGJhc2VfY3M7CQkvKiBiYXNlIGNoaXAg c2VsZWN0IHRvIHVzZSBmb3IgY2FsY3VsYXRpb25zICovCiB9OwogCi1leHRlcm4gdm9pZCBvbWFw Mnh4eF9zZHJjX2luaXRfcGFyYW1zKHUzMiBmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKTsKLQot dTMyIG9tYXAyeHh4X3NkcmNfZGxsX2lzX3VubG9ja2VkKHZvaWQpOwotdTMyIG9tYXAyeHh4X3Nk cmNfcmVwcm9ncmFtKHUzMiBsZXZlbCwgdTMyIGZvcmNlKTsKLQotCiAjZWxzZQotI2RlZmluZSBP TUFQMjQyWF9TRFJDX1JFR0FERFIocmVnKQkJCQkJXAotCQkJT01BUDJfTDNfSU9fQUREUkVTUyhP TUFQMjQyMF9TRFJDX0JBU0UgKyAocmVnKSkKLSNkZWZpbmUgT01BUDI0M1hfU0RSQ19SRUdBRERS KHJlZykJCQkJCVwKLQkJCU9NQVAyX0wzX0lPX0FERFJFU1MoT01BUDI0M1hfU0RSQ19CQVNFICsg KHJlZykpCiAjZGVmaW5lIE9NQVAzNFhYX1NEUkNfUkVHQUREUihyZWcpCQkJCQlcCiAJCQlPTUFQ Ml9MM19JT19BRERSRVNTKE9NQVAzNDNYX1NEUkNfQkFTRSArIChyZWcpKQogCkBAIC0xODQsMTcg KzE3NCw2IEBAIHUzMiBvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbSh1MzIgbGV2ZWwsIHUzMiBmb3Jj ZSk7CiAjZGVmaW5lIFNEUkNfUkZSX0NUUkxfQllQQVNTCSgweDAwMDA1MDAwIHwgMSkgLyogTmVl ZCB0byBjYWxjICovCiAKIAotLyoKLSAqIFNNUyByZWdpc3RlciBhY2Nlc3MKLSAqLwotCi0jZGVm aW5lIE9NQVAyNDJYX1NNU19SRUdBRERSKHJlZykJCQkJCVwKLQkJKHZvaWQgX19pb21lbSAqKU9N QVAyX0wzX0lPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UgKyByZWcpCi0jZGVmaW5lIE9NQVAy NDNYX1NNU19SRUdBRERSKHJlZykJCQkJCVwKLQkJKHZvaWQgX19pb21lbSAqKU9NQVAyX0wzX0lP X0FERFJFU1MoT01BUDI0M1hfU01TX0JBU0UgKyByZWcpCi0jZGVmaW5lIE9NQVAzNDNYX1NNU19S RUdBRERSKHJlZykJCQkJCVwKLQkJKHZvaWQgX19pb21lbSAqKU9NQVAyX0wzX0lPX0FERFJFU1Mo T01BUDM0M1hfU01TX0JBU0UgKyByZWcpCi0KIC8qIFNNUyByZWdpc3RlciBvZmZzZXRzIC0gcmVh ZC93cml0ZSB3aXRoIHNtc197cmVhZCx3cml0ZX1fcmVnKCkgKi8KIAogI2RlZmluZSBTTVNfU1lT Q09ORklHCQkJMHgwMTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHgu YyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNWEyNzViNGZkNDA0Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1v bWFwMi9zZHJjMnh4eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBTRFJBTSB0aW1pbmcgcmVs YXRlZCBmdW5jdGlvbnMgZm9yIE9NQVAyeHh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAy MDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBO b2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+ Ci0gKiBQYXVsIFdhbG1zbGV5Ci0gKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5j b20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3Qu aD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0j aW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUg InNvYy5oIgotI2luY2x1ZGUgImlvbWFwLmgiCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVk ZSAicHJtMnh4eC5oIgotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAic2RyYy5oIgotI2lu Y2x1ZGUgInNyYW0uaCIKLQotLyogTWVtb3J5IHRpbWluZywgRExMIG1vZGUgZmxhZ3MgKi8KLSNk ZWZpbmUgTV9ERFIJCTEKLSNkZWZpbmUgTV9MT0NLX0NUUkwJKDEgPDwgMikKLSNkZWZpbmUgTV9V TkxPQ0sJMAotI2RlZmluZSBNX0xPQ0sJCTEKLQotCi1zdGF0aWMgc3RydWN0IG1lbW9yeV90aW1p bmdzIG1lbV90aW1pbmdzOwotc3RhdGljIHUzMiBjdXJyX3BlcmZfbGV2ZWwgPSBDT1JFX0NMS19T UkNfRFBMTF9YMjsKLQotc3RhdGljIHUzMiBvbWFwMnh4eF9zZHJjX2dldF9zbG93X2RsbF9jdHJs KHZvaWQpCi17Ci0JcmV0dXJuIG1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmw7Ci19Ci0KLXN0YXRp YyB1MzIgb21hcDJ4eHhfc2RyY19nZXRfZmFzdF9kbGxfY3RybCh2b2lkKQotewotCXJldHVybiBt ZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsOwotfQotCi1zdGF0aWMgdTMyIG9tYXAyeHh4X3NkcmNf Z2V0X3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gbWVtX3RpbWluZ3MubV90eXBlOwotfQotCi0vKgot ICogQ2hlY2sgdGhlIERMTCBsb2NrIHN0YXRlLCBhbmQgcmV0dXJuIHR1ZSBpZiBydW5uaW5nIGlu IHVubG9jayBtb2RlLgotICogVGhpcyBpcyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHNo aWZ0ZWQgRExMIHZhbHVlIGluIHVubG9jayBtb2RlLgotICovCi11MzIgb21hcDJ4eHhfc2RyY19k bGxfaXNfdW5sb2NrZWQodm9pZCkKLXsKLQkvKiBkbGxhIGFuZCBkbGxiIGFyZSBhIHNldCAqLwot CXUzMiBkbGxfc3RhdGUgPSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQV9DVFJMKTsKLQotCWlmICgo ZGxsX3N0YXRlICYgKDEgPDwgMikpID09ICgxIDw8IDIpKQotCQlyZXR1cm4gMTsKLQllbHNlCi0J CXJldHVybiAwOwotfQotCi0vKgotICogJ2xldmVsJyBpcyB0aGUgdmFsdWUgdG8gc3RvcmUgdG8g Q01fQ0xLU0VMMl9QTEwuQ09SRV9DTEtfU1JDLgotICogUHJhY3RpY2FsIHZhbHVlcyBhcmUgQ09S RV9DTEtfU1JDX0RQTEwgKGZvciBDT1JFX0NMSyA9IERQTExfQ0xLKSBvcgotICogQ09SRV9DTEtf U1JDX0RQTExfWDIgKGZvciBDT1JFX0NMSyA9ICogRFBMTF9DTEsgKiAyKQotICoKLSAqIFVzZWQg YnkgdGhlIGNsb2NrIGZyYW1ld29yayBkdXJpbmcgQ09SRSBEUExMIGNoYW5nZXMKLSAqLwotdTMy IG9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKHUzMiBsZXZlbCwgdTMyIGZvcmNlKQotewotCXUzMiBk bGxfY3RybCwgbV90eXBlOwotCXUzMiBwcmV2ID0gY3Vycl9wZXJmX2xldmVsOwotCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Ci0KLQlpZiAoKGN1cnJfcGVyZl9sZXZlbCA9PSBsZXZlbCkgJiYgIWZvcmNl KQotCQlyZXR1cm4gcHJldjsKLQotCWlmIChsZXZlbCA9PSBDT1JFX0NMS19TUkNfRFBMTCkKLQkJ ZGxsX2N0cmwgPSBvbWFwMnh4eF9zZHJjX2dldF9zbG93X2RsbF9jdHJsKCk7Ci0JZWxzZSBpZiAo bGV2ZWwgPT0gQ09SRV9DTEtfU1JDX0RQTExfWDIpCi0JCWRsbF9jdHJsID0gb21hcDJ4eHhfc2Ry Y19nZXRfZmFzdF9kbGxfY3RybCgpOwotCWVsc2UKLQkJcmV0dXJuIHByZXY7Ci0KLQltX3R5cGUg PSBvbWFwMnh4eF9zZHJjX2dldF90eXBlKCk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0J LyoKLQkgKiBYWFggVGhlc2UgY2FsbHMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHRocm91Z2gg YQotCSAqIHBybTJ4eHguYyBmdW5jdGlvbgotCSAqLwotCWlmIChjcHVfaXNfb21hcDI0MjAoKSkK LQkJd3JpdGVsX3JlbGF4ZWQoMHhmZmZmLCBPTUFQMjQyMF9QUkNNX1ZPTFRTRVRVUCk7Ci0JZWxz ZQotCQl3cml0ZWxfcmVsYXhlZCgweGZmZmYsIE9NQVAyNDMwX1BSQ01fVk9MVFNFVFVQKTsKLQlv bWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKGxldmVsLCBkbGxfY3RybCwgbV90eXBlKTsKLQljdXJy X3BlcmZfbGV2ZWwgPSBsZXZlbDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1 cm4gcHJldjsKLX0KLQotLyogVXNlZCBieSB0aGUgY2xvY2sgZnJhbWV3b3JrIGR1cmluZyBDT1JF IERQTEwgY2hhbmdlcyAqLwotdm9pZCBvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKHUzMiBmb3Jj ZV9sb2NrX3RvX3VubG9ja19tb2RlKQotewotCXVuc2lnbmVkIGxvbmcgZGxsX2NudDsKLQl1MzIg ZmFzdF9kbGwgPSAwOwotCi0JLyogRERSID0gMSwgU0RSID0gMCAqLwotCW1lbV90aW1pbmdzLm1f dHlwZSA9ICEoKHNkcmNfcmVhZF9yZWcoU0RSQ19NUl8wKSAmIDB4MykgPT0gMHgxKTsKLQotCS8q IDI0MjIgZXMyLjA1IGFuZCBiZXlvbmQgaGFzIGEgc2luZ2xlIFNJUCBERFIgaW5zdGVhZCBvZiAy IGxpa2Ugb3RoZXJzLgotCSAqIEluIHRoZSBjYXNlIG9mIDI0MjIsIGl0cyBvayB0byB1c2UgQ1Mx IGluc3RlYWQgb2YgQ1MwLgotCSAqLwotCWlmIChjcHVfaXNfb21hcDI0MjIoKSkKLQkJbWVtX3Rp bWluZ3MuYmFzZV9jcyA9IDE7Ci0JZWxzZQotCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMDsKLQot CWlmIChtZW1fdGltaW5ncy5tX3R5cGUgIT0gTV9ERFIpCi0JCXJldHVybjsKLQotCS8qIFdpdGgg RERSIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBsb3cgZnJlcXVlbmN5IERMTCB2YWx1ZSAqLwot CWlmICgoKG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgJiAoMSA8PCAyKSkgPT0gTV9MT0NLX0NU UkwpKQotCQltZW1fdGltaW5ncy5kbGxfbW9kZSA9IE1fVU5MT0NLOwotCWVsc2UKLQkJbWVtX3Rp bWluZ3MuZGxsX21vZGUgPSBNX0xPQ0s7Ci0KLQlpZiAobWVtX3RpbWluZ3MuYmFzZV9jcyA9PSAw KSB7Ci0JCWZhc3RfZGxsID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEFfQ1RSTCk7Ci0JCWRsbF9j bnQgPSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQV9TVEFUVVMpICYgMHhmZjAwOwotCX0gZWxzZSB7 Ci0JCWZhc3RfZGxsID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEJfQ1RSTCk7Ci0JCWRsbF9jbnQg PSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQl9TVEFUVVMpICYgMHhmZjAwOwotCX0KLQlpZiAoZm9y Y2VfbG9ja190b191bmxvY2tfbW9kZSkgewotCQlmYXN0X2RsbCAmPSB+MHhmZjAwOwotCQlmYXN0 X2RsbCB8PSBkbGxfY250OwkJLyogQ3VycmVudCBsb2NrIG1vZGUgKi8KLQl9Ci0JLyogc2V0IGZh c3QgdGltaW5ncyB3aXRoIERMTCBmaWx0ZXIgZGlzYWJsZWQgKi8KLQltZW1fdGltaW5ncy5mYXN0 X2RsbF9jdHJsID0gKGZhc3RfZGxsIHwgKDMgPDwgOCkpOwotCi0JLyogTm8gZGlzcnVwdGlvbnMs IEREUiB3aWxsIGJlIG9mZmxpbmUgJiBDLUFCSSBub3QgZm9sbG93ZWQgKi8KLQlvbWFwMl9zcmFt X2Rkcl9pbml0KCZtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsLAotCQkJICAgIG1lbV90aW1pbmdz LmZhc3RfZGxsX2N0cmwsCi0JCQkgICAgbWVtX3RpbWluZ3MuYmFzZV9jcywKLQkJCSAgICBmb3Jj ZV9sb2NrX3RvX3VubG9ja19tb2RlKTsKLQltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsICY9IDB4 ZmYwMDsJLyogS2VlcCBsb2NrIHZhbHVlICovCi0KLQkvKiBUdXJuIHN0YXR1cyBpbnRvIHVubG9j ayBjdHJsICovCi0JbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCB8PQotCQkoKG1lbV90aW1pbmdz LmZhc3RfZGxsX2N0cmwgJiAweEYpIHwgKDEgPDwgMikpOwotCi0JLyogOTAgZGVncmVlIHBoYXNl IGZvciBhbnl0aGluZyBiZWxvdyAxMzNNSHogKyBkaXNhYmxlIERMTCBmaWx0ZXIgKi8KLQltZW1f dGltaW5ncy5zbG93X2RsbF9jdHJsIHw9ICgoMSA8PCAxKSB8ICgzIDw8IDgpKTsKLX0KZGlmZiAt LWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAyNHh4LlMgYi9hcmNoL2FybS9tYWNoLW9t YXAyL3NsZWVwMjR4eC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGQ4YzQzYWQz ODIuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCisr KyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb3ItbGF0ZXIgKi8KLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL3Ns ZWVwLlMKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDQKLSAqIFRleGFzIEluc3RydW1lbnRzLCA8 d3d3LnRpLmNvbT4KLSAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAq Ci0gKiAoQykgQ29weXJpZ2h0IDIwMDYgTm9raWEgQ29ycG9yYXRpb24KLSAqIEZpeGVkIGlkbGUg bG9vcCBzbGVlcAotICogSWdvciBTdG9wcGEgPGlnb3Iuc3RvcHBhQG5va2lhLmNvbT4KLSAqLwot Ci0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4K LQotI2luY2x1ZGUgIm9tYXAyNHh4LmgiCi0jaW5jbHVkZSAic2RyYy5oIgotCi0vKiBGaXJzdCBh ZGRyZXNzIG9mIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2U/ICBhcHBhcmVudGx5IHZhbGlkIGZvciBP TUFQMiAmIDMgKi8KLSNkZWZpbmUgQV9TRFJDMF9WCQkoMHhDMDAwMDAwMCkKLQotCS50ZXh0Ci0K LS8qCi0gKiBvbWFwMjR4eF9jcHVfc3VzcGVuZCgpIC0gRm9yY2VzIE9NQVAgaW50byBkZWVwIHNs ZWVwIHN0YXRlIGJ5IGNvbXBsZXRpbmcKLSAqIFNEUkMgc2h1dGRvd24gdGhlbiBBUk0gc2h1dGRv d24uICBVcG9uIHdha2UgTVBVIGlzIGJhY2sgb24gc28ganVzdCByZXN0b3JlCi0gKiBTRFJDLgot ICoKLSAqIElucHV0OgotICogUjAgOglETEwgY3RybCB2YWx1ZSBwcmUtU2xlZXAKLSAqIFIxIDog U0RSQ19ETExBX0NUUkwKLSAqIFIyIDogU0RSQ19QT1dFUgotICoKLSAqIFRoZSBpZiB0aGUgRFBM TCBpcyBnb2luZyB0byBBdXRvSWRsZS4gSXQgc2VlbXMgbGlrZSB0aGUgRFBMTCBtYXkgYmUgYmFj ayBvbgotICogd2hlbiB3ZSBnZXQgY2FsbGVkLCBidXQgdGhlIERMTCBwcm9iYWJseSBpc24ndC4g IFdlIHdpbGwgd2FpdCBhIGJpdCBtb3JlIGluCi0gKiBjYXNlIHRoZSBEUExMIGlzbid0IHF1aXRl IHRoZXJlIHlldC4gVGhlIGNvZGUgd2lsbCB3YWl0IG9uIERMTCBmb3IgRERSIGV2ZW4KLSAqIGlm IGluIHVubG9ja2VkIG1vZGUuCi0gKgotICogRm9yIGxlc3MgdGhhbiAyNDJ4LUVTMi4yIHVwb24g d2FrZSBmcm9tIGEgc2xlZXAgbW9kZSB3aGVyZSB0aGUgZXh0ZXJuYWwKLSAqIG9zY2lsbGF0b3Ig d2FzIHN0b3BwZWQsIGEgdGltaW5nIGJ1ZyBleGlzdHMgd2hlcmUgYSBub24tc3RhYmlsaXplZCAx Mk1IegotICogY2xvY2sgY2FuIHBhc3MgaW50byB0aGUgUFJDTSBjYW4gY2F1c2UgcHJvYmxlbXMg YXQgRFNQIGFuZCBJVkEuCi0gKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHRoZSBjb2RlIHdpbGwgc3dp dGNoIHRvIHRoZSAzMmtIeiBzb3VyY2UgcHJpb3IgdG8gc2xlZXAuCi0gKiBQb3N0IHNsZWVwIHdl IHdpbGwgc2hpZnQgYmFjayB0byB1c2luZyB0aGUgRFBMTC4gIEFwcGFyZW50bHksCi0gKiBDTV9J RExFU1RfQ0xLR0VOIGRvZXMgbm90IHJlZmxlY3QgdGhlIGZ1bGwgY2xvY2sgY2hhbmdlIHNvIHlv dSBuZWVkIHRvIHdhaXQKLSAqIDN4MTJNSHogKyAzeDMya0h6IGNsb2NrcyBmb3IgYSBmdWxsIHN3 aXRjaC4KLSAqCi0gKiBUaGUgRExMIGxvYWQgdmFsdWUgaXMgbm90IGtlcHQgaW4gUkVURU5USU9O IG9yIE9GRi4JSXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQKLSAqIGF0IHdha2UKLSAqLwotCS5hbGln bgkzCi1FTlRSWShvbWFwMjR4eF9jcHVfc3VzcGVuZCkKLQlzdG1mZAlzcCEsIHtyMCAtIHIxMiwg bHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKLQltb3YJcjMsICMweDAJCUAgY2xlYXIgZm9y IG1jciBjYWxsCi0JbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJQCBtZW1vcnkgYmFycmllciwg aG9wZSBTRFIvRERSIGZpbmlzaGVkCi0Jbm9wCi0Jbm9wCi0JbGRyCXI0LCBbcjJdCQlAIHJlYWQg U0RSQ19QT1dFUgotCW9ycglyNCwgcjQsICMweDQwCQlAIGVuYWJsZSBzZWxmIHJlZnJlc2ggb24g aWRsZSByZXEKLQltb3YJcjUsICMweDIwMDAJCUAgc2V0IGRlbGF5IChEUExMIHJlbG9jayArIERM TCByZWxvY2spCi0Jc3RyCXI0LCBbcjJdCQlAIG1ha2UgaXQgc28KLQlub3AKLQltY3IJcDE1LCAw LCByMywgYzcsIGMwLCA0CUAgd2FpdCBmb3IgaW50ZXJydXB0Ci0Jbm9wCi1sb29wOgotCXN1YnMJ cjUsIHI1LCAjMHgxCQlAIGF3YWtlLCB3YWl0IGp1c3QgYSBiaXQKLQlibmUJbG9vcAotCi0JLyog VGhlIERQTEwgaGFzIHRvIGJlIG9uIGJlZm9yZSB3ZSB0YWtlIHRoZSBERFIgb3V0IG9mIHNlbGYg cmVmcmVzaCAqLwotCWJpYwlyNCwgcjQsICMweDQwCQlAIG5vdyBjbGVhciBzZWxmIHJlZnJlc2gg Yml0LgotCXN0cglyNCwgW3IyXQkJQCB3cml0ZSB0byBTRFJDX1BPV0VSCi0JbGRyCXI0LCBBX1NE UkMwCQlAIG1ha2UgYSBjbG9jayBoYXBwZW4KLQlsZHIJcjQsIFtyNF0JCUAgcmVhZCBBX1NEUkMw Ci0Jbm9wCQkJCUAgc3RhcnQgYXV0byByZWZyZXNoIG9ubHkgYWZ0ZXIgY2xrIG9rCi0JbW92cwly MCwgcjAJCQlAIHNlZSBpZiBERFIgb3IgU0RSCi0Jc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBE TExBIHRvIGZvcmNlIERMTCByZWxvYWQKLQlhZGRuZQlyMSwgcjEsICMweDgJCUAgbW92ZSB0byBE TExCCi0Jc3RybmUJcjAsIFtyMV0JCUAgcmV3cml0ZSBETExCIHRvIGZvcmNlIERMTCByZWxvYWQK LQotCW1vdglyNSwgIzB4MTAwMAotbG9vcDI6Ci0Jc3VicwlyNSwgcjUsICMweDEKLQlibmUJbG9v cDIKLQkvKiByZXN1bWUqLwotCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30JQCByZXN0b3JlIHJl Z3MgYW5kIHJldHVybgotCi1BX1NEUkMwOgotCS53b3JkIEFfU0RSQzBfVgotCi1FTlRSWShvbWFw MjR4eF9jcHVfc3VzcGVuZF9zeikKLQkud29yZAkuIC0gb21hcDI0eHhfY3B1X3N1c3BlbmQKZGlm ZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc29jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAy L3NvYy5oCmluZGV4IDllM2RiYjc0M2U1Yy4uOWM5ZjU2Y2E5MTQyIDEwMDY0NAotLS0gYS9hcmNo L2FybS9tYWNoLW9tYXAyL3NvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc29jLmgKQEAg LTEyLDcgKzEyLDYgQEAKICAqIEFkZGVkIERSQTd4eHggc3BlY2lmaWMgZGVmaW5lcyAtIFNyaWNo YXJhbiBSPHIuc3JpY2hhcmFuQHRpLmNvbT4KICAqLwogCi0jaW5jbHVkZSAib21hcDI0eHguaCIK ICNpbmNsdWRlICJvbWFwMzR4eC5oIgogI2luY2x1ZGUgIm9tYXA0NHh4LmgiCiAjaW5jbHVkZSAi dGk4MXh4LmgiCkBAIC02Miw5ICs2MSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHNvY19pc19vbWFw KHZvaWQpCiAvKgogICogTWFjcm9zIHRvIGdyb3VwIE9NQVAgaW50byBjcHUgY2xhc3Nlcy4KICAq IFRoZXNlIGNhbiBiZSB1c2VkIGluIG1vc3QgcGxhY2VzLgotICogc29jX2lzX29tYXAyNHh4KCk6 CVRydWUgZm9yIE9NQVAyNDIwLCBPTUFQMjQyMiwgT01BUDI0MjMsIE9NQVAyNDMwCi0gKiBzb2Nf aXNfb21hcDI0MngoKToJVHJ1ZSBmb3IgT01BUDI0MjAsIE9NQVAyNDIyLCBPTUFQMjQyMwotICog c29jX2lzX29tYXAyNDN4KCk6CVRydWUgZm9yIE9NQVAyNDMwCiAgKiBzb2NfaXNfb21hcDM0M3go KToJVHJ1ZSBmb3IgT01BUDM0MzAKICAqIHNvY19pc19vbWFwNDQzeCgpOglUcnVlIGZvciBPTUFQ NDQzMAogICogc29jX2lzX29tYXA0NDZ4KCk6CVRydWUgZm9yIE9NQVA0NDYwCkBAIC0xMzcsNyAr MTMzLDYgQEAgc3RhdGljIGlubGluZSBpbnQgaXNfZHJhICMjc3ViY2xhc3MgIyNfICMjcGFja2Fn ZSAodm9pZCkJCVwKIAlyZXR1cm4gKGlzX2RyYSAjI3N1YmNsYXNzICgpICYmIEdFVF9EUkFfUEFD S0FHRSA9PSBpZCkgPyAxIDogMDsJXAogfQogCi1JU19PTUFQX0NMQVNTKDI0eHgsIDB4MjQpCiBJ U19PTUFQX0NMQVNTKDM0eHgsIDB4MzQpCiBJU19PTUFQX0NMQVNTKDQ0eHgsIDB4NDQpCiBJU19B TV9DTEFTUygzNXh4LCAweDM1KQpAQCAtMTQ4LDggKzE0Myw2IEBAIElTX0FNX0NMQVNTKDQzeHgs IDB4NDMpCiBJU19USV9DTEFTUyg4MXh4LCAweDgxKQogSVNfRFJBX0NMQVNTKDd4eCwgMHg3KQog Ci1JU19PTUFQX1NVQkNMQVNTKDI0MngsIDB4MjQyKQotSVNfT01BUF9TVUJDTEFTUygyNDN4LCAw eDI0MykKIElTX09NQVBfU1VCQ0xBU1MoMzQzeCwgMHgzNDMpCiBJU19PTUFQX1NVQkNMQVNTKDM2 M3gsIDB4MzYzKQogSVNfT01BUF9TVUJDTEFTUyg0NDN4LCAweDQ0MykKQEAgLTE4NiwyMSArMTc5 LDYgQEAgSVNfRFJBX1NVQkNMQVNTKDcyeCwgMHg3MikKICNkZWZpbmUgc29jX2lzX2RyYTc0eCgp CQkJMAogI2RlZmluZSBzb2NfaXNfZHJhNzJ4KCkJCQkwCiAKLSNpZiBkZWZpbmVkKENPTkZJR19B UkNIX09NQVAyKQotIyBkZWZpbmUgc29jX2lzX29tYXAyNHh4KCkJCWlzX29tYXAyNHh4KCkKLSNl bHNlCi0jIGRlZmluZSBzb2NfaXNfb21hcDI0eHgoKQkJMAotI2VuZGlmCi0jaWYgZGVmaW5lZChD T05GSUdfU09DX09NQVAyNDIwKQotIyBkZWZpbmUgc29jX2lzX29tYXAyNDJ4KCkJCWlzX29tYXAy NDJ4KCkKLSNlbHNlCi0jIGRlZmluZSBzb2NfaXNfb21hcDI0MngoKQkJMAotI2VuZGlmCi0jaWYg ZGVmaW5lZChDT05GSUdfU09DX09NQVAyNDMwKQotIyBkZWZpbmUgc29jX2lzX29tYXAyNDN4KCkJ CWlzX29tYXAyNDN4KCkKLSNlbHNlCi0jIGRlZmluZSBzb2NfaXNfb21hcDI0M3goKQkJMAotI2Vu ZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKICMgZGVmaW5lIHNvY19pc19vbWFw MzR4eCgpCQlpc19vbWFwMzR4eCgpCiAjIGRlZmluZSBzb2NfaXNfb21hcDM0M3goKQkJaXNfb21h cDM0M3goKQpAQCAtMjEyLDEwICsxOTAsNiBAQCBJU19EUkFfU1VCQ0xBU1MoNzJ4LCAweDcyKQog LyoKICAqIE1hY3JvcyB0byBkZXRlY3QgaW5kaXZpZHVhbCBjcHUgdHlwZXMuCiAgKiBUaGVzZSBh cmUgb25seSByYXJlbHkgbmVlZGVkLgotICogc29jX2lzX29tYXAyNDIwKCk6CVRydWUgZm9yIE9N QVAyNDIwCi0gKiBzb2NfaXNfb21hcDI0MjIoKToJVHJ1ZSBmb3IgT01BUDI0MjIKLSAqIHNvY19p c19vbWFwMjQyMygpOglUcnVlIGZvciBPTUFQMjQyMwotICogc29jX2lzX29tYXAyNDMwKCk6CVRy dWUgZm9yIE9NQVAyNDMwCiAgKiBzb2NfaXNfb21hcDM0MzAoKToJVHJ1ZSBmb3IgT01BUDM0MzAK ICAqLwogI2RlZmluZSBHRVRfT01BUF9UWVBFCSgob21hcF9yZXYoKSA+PiAxNikgJiAweGZmZmYp CkBAIC0yMjYsMTYgKzIwMCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlzX29tYXAgIyN0eXBlICh2 b2lkKQkJCVwKIAlyZXR1cm4gKEdFVF9PTUFQX1RZUEUgPT0gKGlkKSkgPyAxIDogMDsJCVwKIH0K IAotSVNfT01BUF9UWVBFKDI0MjAsIDB4MjQyMCkKLUlTX09NQVBfVFlQRSgyNDIyLCAweDI0MjIp Ci1JU19PTUFQX1RZUEUoMjQyMywgMHgyNDIzKQotSVNfT01BUF9UWVBFKDI0MzAsIDB4MjQzMCkK IElTX09NQVBfVFlQRSgzNDMwLCAweDM0MzApCiAKLSNkZWZpbmUgc29jX2lzX29tYXAyNDIwKCkJ CTAKLSNkZWZpbmUgc29jX2lzX29tYXAyNDIyKCkJCTAKLSNkZWZpbmUgc29jX2lzX29tYXAyNDIz KCkJCTAKLSNkZWZpbmUgc29jX2lzX29tYXAyNDMwKCkJCTAKICNkZWZpbmUgc29jX2lzX29tYXAz NDMwKCkJCTAKICNkZWZpbmUgc29jX2lzX29tYXAzNjMwKCkJCTAKICNkZWZpbmUgc29jX2lzX29t YXA1NDMwKCkJCTAKQEAgLTI1MiwxNyArMjE4LDYgQEAgSVNfT01BUF9UWVBFKDM0MzAsIDB4MzQz MCkKICNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAxKCkJCTAKICNkZWZpbmUgY3B1X2NsYXNzX2lz X29tYXAyKCkJCTEKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCi0jIHVuZGVmICBz b2NfaXNfb21hcDI0MjAKLSMgdW5kZWYgIHNvY19pc19vbWFwMjQyMgotIyB1bmRlZiAgc29jX2lz X29tYXAyNDIzCi0jIHVuZGVmICBzb2NfaXNfb21hcDI0MzAKLSMgZGVmaW5lIHNvY19pc19vbWFw MjQyMCgpCQlpc19vbWFwMjQyMCgpCi0jIGRlZmluZSBzb2NfaXNfb21hcDI0MjIoKQkJaXNfb21h cDI0MjIoKQotIyBkZWZpbmUgc29jX2lzX29tYXAyNDIzKCkJCWlzX29tYXAyNDIzKCkKLSMgZGVm aW5lIHNvY19pc19vbWFwMjQzMCgpCQlpc19vbWFwMjQzMCgpCi0jZW5kaWYKLQogI2lmIGRlZmlu ZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAjIHVuZGVmIHNvY19pc19vbWFwMzQzMAogIyB1bmRlZiBz b2NfaXNfdGk4MXh4CkBAIC0zMjYsMTMgKzI4MSw2IEBAIElTX09NQVBfVFlQRSgzNDMwLCAweDM0 MzApCiAjZW5kaWYKIAogLyogVmFyaW91cyBzaWxpY29uIHJldmlzaW9ucyBmb3Igb21hcDIgKi8K LSNkZWZpbmUgT01BUDI0MlhfQ0xBU1MJCTB4MjQyMDAwMjQKLSNkZWZpbmUgT01BUDI0MjBfUkVW X0VTMV8wCU9NQVAyNDJYX0NMQVNTCi0jZGVmaW5lIE9NQVAyNDIwX1JFVl9FUzJfMAkoT01BUDI0 MlhfQ0xBU1MgfCAoMHgxIDw8IDgpKQotCi0jZGVmaW5lIE9NQVAyNDNYX0NMQVNTCQkweDI0MzAw MDI0Ci0jZGVmaW5lIE9NQVAyNDMwX1JFVl9FUzFfMAlPTUFQMjQzWF9DTEFTUwotCiAjZGVmaW5l IE9NQVAzNDNYX0NMQVNTCQkweDM0MzAwMDM0CiAjZGVmaW5lIE9NQVAzNDMwX1JFVl9FUzFfMAlP TUFQMzQzWF9DTEFTUwogI2RlZmluZSBPTUFQMzQzMF9SRVZfRVMyXzAJKE9NQVAzNDNYX0NMQVNT IHwgKDB4MSA8PCA4KSkKQEAgLTQwMCw3ICszNDgsNiBAQCBJU19PTUFQX1RZUEUoMzQzMCwgMHgz NDMwKQogI2RlZmluZSBEUkE3MjJfUkVWX0VTMl8wCShEUkE3WFhfQ0xBU1MgfCAoMHgyMiA8PCAx NikgfCAoMHgyMCA8PCA4KSkKICNkZWZpbmUgRFJBNzIyX1JFVl9FUzJfMQkoRFJBN1hYX0NMQVNT IHwgKDB4MjIgPDwgMTYpIHwgKDB4MjEgPDwgOCkpCiAKLXZvaWQgb21hcDJ4eHhfY2hlY2tfcmV2 aXNpb24odm9pZCk7CiB2b2lkIG9tYXAzeHh4X2NoZWNrX3JldmlzaW9uKHZvaWQpOwogdm9pZCBv bWFwNHh4eF9jaGVja19yZXZpc2lvbih2b2lkKTsKIHZvaWQgb21hcDV4eHhfY2hlY2tfcmV2aXNp b24odm9pZCk7CkBAIC00ODQsMTIgKzQzMSw2IEBAIGxldmVsKF9fIyNmbik7CiAjZGVmaW5lIG9t YXBfbGF0ZV9pbml0Y2FsbF9zeW5jKGZuKQlvbWFwX2luaXRjYWxsKGxhdGVfaW5pdGNhbGxfc3lu YywgZm4pCiAKIC8qIExlZ2FjeSBkZWZpbmVzLCB0aGVzZSBjYW4gYmUgcmVtb3ZlZCB3aGVuIHVz ZXJzIGFyZSByZW1vdmVkICovCi0jZGVmaW5lIGNwdV9pc19vbWFwMjQyMCgpCXNvY19pc19vbWFw MjQyMCgpCi0jZGVmaW5lIGNwdV9pc19vbWFwMjQyMigpCXNvY19pc19vbWFwMjQyMigpCi0jZGVm aW5lIGNwdV9pc19vbWFwMjQyeCgpCXNvY19pc19vbWFwMjQyeCgpCi0jZGVmaW5lIGNwdV9pc19v bWFwMjQzMCgpCXNvY19pc19vbWFwMjQzMCgpCi0jZGVmaW5lIGNwdV9pc19vbWFwMjQzeCgpCXNv Y19pc19vbWFwMjQzeCgpCi0jZGVmaW5lIGNwdV9pc19vbWFwMjR4eCgpCXNvY19pc19vbWFwMjR4 eCgpCiAjZGVmaW5lIGNwdV9pc19vbWFwMzQzMCgpCXNvY19pc19vbWFwMzQzMCgpCiAjZGVmaW5l IGNwdV9pc19vbWFwMzQzeCgpCXNvY19pc19vbWFwMzQzeCgpCiAjZGVmaW5lIGNwdV9pc19vbWFw MzR4eCgpCXNvY19pc19vbWFwMzR4eCgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAy L3NyYW0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5jCmluZGV4IDg5OGIwMTFhZThkOS4u OGY5ODA4NDlmMjAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYworKysg Yi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uYwpAQCAtMjgsMTUgKzI4LDEwIEBACiAjaW5jbHVk ZSAic2RyYy5oIgogI2luY2x1ZGUgInNyYW0uaCIKIAotI2RlZmluZSBPTUFQMl9TUkFNX1BVQl9Q QQkoT01BUDJfU1JBTV9QQSArIDB4ZjgwMCkKICNkZWZpbmUgT01BUDNfU1JBTV9QVUJfUEEgICAg ICAgKE9NQVAzX1NSQU1fUEEgKyAweDgwMDApCiAKICNkZWZpbmUgU1JBTV9CT09UTE9BREVSX1Na CTB4MDAKIAotI2RlZmluZSBPTUFQMjRYWF9WQV9SRVFJTkZPUEVSTTAJT01BUDJfTDNfSU9fQURE UkVTUygweDY4MDA1MDQ4KQotI2RlZmluZSBPTUFQMjRYWF9WQV9SRUFEUEVSTTAJCU9NQVAyX0wz X0lPX0FERFJFU1MoMHg2ODAwNTA1MCkKLSNkZWZpbmUgT01BUDI0WFhfVkFfV1JJVEVQRVJNMAkJ T01BUDJfTDNfSU9fQUREUkVTUygweDY4MDA1MDU4KQotCiAjZGVmaW5lIE9NQVAzNFhYX1ZBX1JF UUlORk9QRVJNMAlPTUFQMl9MM19JT19BRERSRVNTKDB4NjgwMTI4NDgpCiAjZGVmaW5lIE9NQVAz NFhYX1ZBX1JFQURQRVJNMAkJT01BUDJfTDNfSU9fQUREUkVTUygweDY4MDEyODUwKQogI2RlZmlu ZSBPTUFQMzRYWF9WQV9XUklURVBFUk0wCQlPTUFQMl9MM19JT19BRERSRVNTKDB4NjgwMTI4NTgp CkBAIC0xMjAsMTggKzExNSwxMSBAQCBzdGF0aWMgaW50IGlzX3NyYW1fbG9ja2VkKHZvaWQpCiB7 CiAJaWYgKG9tYXBfdHlwZSgpID09IE9NQVAyX0RFVklDRV9UWVBFX0dQKSB7CiAJCS8qIFJBTUZX OiBSL1cgYWNjZXNzIHRvIGFsbCBpbml0aWF0b3JzIGZvciBhbGwgcXVhbGlmaWVyIHNldHMgKi8K LQkJaWYgKGNwdV9pc19vbWFwMjQyeCgpKSB7Ci0JCQl3cml0ZWxfcmVsYXhlZCgweEZGLCBPTUFQ MjRYWF9WQV9SRVFJTkZPUEVSTTApOyAvKiBhbGwgcS12ZWN0cyAqLwotCQkJd3JpdGVsX3JlbGF4 ZWQoMHhDRkRFLCBPTUFQMjRYWF9WQV9SRUFEUEVSTTApOyAgLyogYWxsIGktcmVhZCAqLwotCQkJ d3JpdGVsX3JlbGF4ZWQoMHhDRkRFLCBPTUFQMjRYWF9WQV9XUklURVBFUk0wKTsgLyogYWxsIGkt d3JpdGUgKi8KLQkJfQotCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJCXdyaXRlbF9yZWxh eGVkKDB4RkZGRiwgT01BUDM0WFhfVkFfUkVRSU5GT1BFUk0wKTsgLyogYWxsIHEtdmVjdHMgKi8K LQkJCXdyaXRlbF9yZWxheGVkKDB4RkZGRiwgT01BUDM0WFhfVkFfUkVBRFBFUk0wKTsgIC8qIGFs bCBpLXJlYWQgKi8KLQkJCXdyaXRlbF9yZWxheGVkKDB4RkZGRiwgT01BUDM0WFhfVkFfV1JJVEVQ RVJNMCk7IC8qIGFsbCBpLXdyaXRlICovCi0JCQl3cml0ZWxfcmVsYXhlZCgweDAsIE9NQVAzNFhY X1ZBX0FERFJfTUFUQ0gyKTsKLQkJCXdyaXRlbF9yZWxheGVkKDB4RkZGRkZGRkYsIE9NQVAzNFhY X1ZBX1NNU19SR19BVFQwKTsKLQkJfQorCQl3cml0ZWxfcmVsYXhlZCgweEZGRkYsIE9NQVAzNFhY X1ZBX1JFUUlORk9QRVJNMCk7IC8qIGFsbCBxLXZlY3RzICovCisJCXdyaXRlbF9yZWxheGVkKDB4 RkZGRiwgT01BUDM0WFhfVkFfUkVBRFBFUk0wKTsgIC8qIGFsbCBpLXJlYWQgKi8KKwkJd3JpdGVs X3JlbGF4ZWQoMHhGRkZGLCBPTUFQMzRYWF9WQV9XUklURVBFUk0wKTsgLyogYWxsIGktd3JpdGUg Ki8KKwkJd3JpdGVsX3JlbGF4ZWQoMHgwLCBPTUFQMzRYWF9WQV9BRERSX01BVENIMik7CisJCXdy aXRlbF9yZWxheGVkKDB4RkZGRkZGRkYsIE9NQVAzNFhYX1ZBX1NNU19SR19BVFQwKTsKIAkJcmV0 dXJuIDA7CiAJfSBlbHNlCiAJCXJldHVybiAxOyAvKiBhc3N1bWUgbG9ja2VkIHdpdGggbm8gUFBB IG9yIHNlY3VyaXR5IGRyaXZlciAqLwpAQCAtMTQ3LDMwICsxMzUsMTcgQEAgc3RhdGljIHZvaWQg X19pbml0IG9tYXBfZGV0ZWN0X3NyYW0odm9pZCkKIHsKIAlvbWFwX3NyYW1fc2tpcCA9IFNSQU1f Qk9PVExPQURFUl9TWjsKIAlpZiAoaXNfc3JhbV9sb2NrZWQoKSkgewotCQlpZiAoY3B1X2lzX29t YXAzNHh4KCkpIHsKLQkJCW9tYXBfc3JhbV9zdGFydCA9IE9NQVAzX1NSQU1fUFVCX1BBOwotCQkJ aWYgKChvbWFwX3R5cGUoKSA9PSBPTUFQMl9ERVZJQ0VfVFlQRV9FTVUpIHx8Ci0JCQkgICAgKG9t YXBfdHlwZSgpID09IE9NQVAyX0RFVklDRV9UWVBFX1NFQykpIHsKLQkJCQlvbWFwX3NyYW1fc2l6 ZSA9IDB4NzAwMDsgLyogMjhLICovCi0JCQkJb21hcF9zcmFtX3NraXAgKz0gU1pfMTZLOwotCQkJ fSBlbHNlIHsKLQkJCQlvbWFwX3NyYW1fc2l6ZSA9IDB4ODAwMDsgLyogMzJLICovCi0JCQl9CisJ CW9tYXBfc3JhbV9zdGFydCA9IE9NQVAzX1NSQU1fUFVCX1BBOworCQlpZiAoKG9tYXBfdHlwZSgp ID09IE9NQVAyX0RFVklDRV9UWVBFX0VNVSkgfHwKKwkJICAgIChvbWFwX3R5cGUoKSA9PSBPTUFQ Ml9ERVZJQ0VfVFlQRV9TRUMpKSB7CisJCQlvbWFwX3NyYW1fc2l6ZSA9IDB4NzAwMDsgLyogMjhL ICovCisJCQlvbWFwX3NyYW1fc2tpcCArPSBTWl8xNks7CiAJCX0gZWxzZSB7Ci0JCQlvbWFwX3Ny YW1fc3RhcnQgPSBPTUFQMl9TUkFNX1BVQl9QQTsKLQkJCW9tYXBfc3JhbV9zaXplID0gMHg4MDA7 IC8qIDJLICovCisJCQlvbWFwX3NyYW1fc2l6ZSA9IDB4ODAwMDsgLyogMzJLICovCiAJCX0KIAl9 IGVsc2UgewotCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJCW9tYXBfc3JhbV9zdGFydCA9 IE9NQVAzX1NSQU1fUEE7Ci0JCQlvbWFwX3NyYW1fc2l6ZSA9IDB4MTAwMDA7IC8qIDY0SyAqLwot CQl9IGVsc2UgewotCQkJb21hcF9zcmFtX3N0YXJ0ID0gT01BUDJfU1JBTV9QQTsKLQkJCWlmIChj cHVfaXNfb21hcDI0MngoKSkKLQkJCQlvbWFwX3NyYW1fc2l6ZSA9IDB4YTAwMDA7IC8qIDY0MEsg Ki8KLQkJCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQzeCgpKQotCQkJCW9tYXBfc3JhbV9zaXplID0g MHgxMDAwMDsgLyogNjRLICovCi0JCX0KKwkJb21hcF9zcmFtX3N0YXJ0ID0gT01BUDNfU1JBTV9Q QTsKKwkJb21hcF9zcmFtX3NpemUgPSAweDEwMDAwOyAvKiA2NEsgKi8KIAl9CiB9CiAKQEAgLTE4 MSwyNCArMTU2LDIwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwMl9tYXBfc3JhbSh2b2lkKQog ewogCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAlpbnQgcGFnZXM7Ci0JaW50IGNhY2hlZCA9IDE7Ci0K LQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJLyoKLQkJICogU1JBTSBtdXN0IGJlIG1hcmtl ZCBhcyBub24tY2FjaGVkIG9uIE9NQVAzIHNpbmNlIHRoZQotCQkgKiBDT1JFIERQTEwgTTIgZGl2 aWRlciBjaGFuZ2UgY29kZSAoaW4gU1JBTSkgcnVucyB3aXRoIHRoZQotCQkgKiBTRFJBTSBjb250 cm9sbGVyIGRpc2FibGVkLCBhbmQgaWYgaXQgaXMgbWFya2VkIGNhY2hlZCwKLQkJICogdGhlIEFS TSBtYXkgYXR0ZW1wdCB0byB3cml0ZSBjYWNoZSBsaW5lcyBiYWNrIHRvIFNEUkFNCi0JCSAqIHdo aWNoIHdpbGwgY2F1c2UgdGhlIHN5c3RlbSB0byBoYW5nLgotCQkgKi8KLQkJY2FjaGVkID0gMDsK LQl9CiAKIAlpZiAob21hcF9zcmFtX3NpemUgPT0gMCkKIAkJcmV0dXJuOwogCiAJb21hcF9zcmFt X3N0YXJ0ID0gUk9VTkRfRE9XTihvbWFwX3NyYW1fc3RhcnQsIFBBR0VfU0laRSk7Ci0Jb21hcF9z cmFtX2Jhc2UgPSBfX2FybV9pb3JlbWFwX2V4ZWMob21hcF9zcmFtX3N0YXJ0LCBvbWFwX3NyYW1f c2l6ZSwgY2FjaGVkKTsKKwkvKgorCSAqIFNSQU0gbXVzdCBiZSBtYXJrZWQgYXMgbm9uLWNhY2hl ZCBvbiBPTUFQMyBzaW5jZSB0aGUKKwkgKiBDT1JFIERQTEwgTTIgZGl2aWRlciBjaGFuZ2UgY29k ZSAoaW4gU1JBTSkgcnVucyB3aXRoIHRoZQorCSAqIFNEUkFNIGNvbnRyb2xsZXIgZGlzYWJsZWQs IGFuZCBpZiBpdCBpcyBtYXJrZWQgY2FjaGVkLAorCSAqIHRoZSBBUk0gbWF5IGF0dGVtcHQgdG8g d3JpdGUgY2FjaGUgbGluZXMgYmFjayB0byBTRFJBTQorCSAqIHdoaWNoIHdpbGwgY2F1c2UgdGhl IHN5c3RlbSB0byBoYW5nLgorCSAqLworCisJb21hcF9zcmFtX2Jhc2UgPSBfX2FybV9pb3JlbWFw X2V4ZWMob21hcF9zcmFtX3N0YXJ0LCBvbWFwX3NyYW1fc2l6ZSwgMCk7CiAJaWYgKCFvbWFwX3Ny YW1fYmFzZSkgewogCQlwcl9lcnIoIlNSQU06IENvdWxkIG5vdCBtYXBcbiIpOwogCQlyZXR1cm47 CkBAIC0yMTksNzggKzE5MCw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwMl9tYXBfc3JhbSh2 b2lkKQogCXNldF9tZW1vcnlfcm94KGJhc2UsIHBhZ2VzKTsKIH0KIAotc3RhdGljIHZvaWQgKCpf b21hcDJfc3JhbV9kZHJfaW5pdCkodTMyICpzbG93X2RsbF9jdHJsLCB1MzIgZmFzdF9kbGxfY3Ry bCwKLQkJCSAgICAgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKLQotdm9pZCBvbWFw Ml9zcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCi0J CSAgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKQotewotCUJVR19PTighX29tYXAyX3Ny YW1fZGRyX2luaXQpOwotCV9vbWFwMl9zcmFtX2Rkcl9pbml0KHNsb3dfZGxsX2N0cmwsIGZhc3Rf ZGxsX2N0cmwsCi0JCQkgICAgIGJhc2VfY3MsIGZvcmNlX3VubG9jayk7Ci19Ci0KLXN0YXRpYyB2 b2lkICgqX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMpKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxs X3ZhbCwKLQkJCQkJICB1MzIgbWVtX3R5cGUpOwotCi12b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFt X3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLCB1MzIgbWVtX3R5cGUpCi17Ci0JQlVH X09OKCFfb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyk7Ci0JX29tYXAyX3NyYW1fcmVwcm9ncmFt X3NkcmMocGVyZl9sZXZlbCwgZGxsX3ZhbCwgbWVtX3R5cGUpOwotfQotCi1zdGF0aWMgdTMyICgq X29tYXAyX3NldF9wcmNtKSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50 IGJ5cGFzcyk7Ci0KLXUzMiBvbWFwMl9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNk cmNfcmZyX3ZhbCwgaW50IGJ5cGFzcykKLXsKLQlCVUdfT04oIV9vbWFwMl9zZXRfcHJjbSk7Ci0J cmV0dXJuIF9vbWFwMl9zZXRfcHJjbShkcGxsX2N0cmxfdmFsLCBzZHJjX3Jmcl92YWwsIGJ5cGFz cyk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU09DX09NQVAyNDIwCi1zdGF0aWMgaW50IF9faW5pdCBv bWFwMjQyeF9zcmFtX2luaXQodm9pZCkKLXsKLQlfb21hcDJfc3JhbV9kZHJfaW5pdCA9IG9tYXBf c3JhbV9wdXNoKG9tYXAyNDJ4X3NyYW1fZGRyX2luaXQsCi0JCQkJCW9tYXAyNDJ4X3NyYW1fZGRy X2luaXRfc3opOwotCi0JX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMgPSBvbWFwX3NyYW1fcHVz aChvbWFwMjQyeF9zcmFtX3JlcHJvZ3JhbV9zZHJjLAotCQkJCQkgICAgb21hcDI0Mnhfc3JhbV9y ZXByb2dyYW1fc2RyY19zeik7Ci0KLQlfb21hcDJfc2V0X3ByY20gPSBvbWFwX3NyYW1fcHVzaChv bWFwMjQyeF9zcmFtX3NldF9wcmNtLAotCQkJCQkgb21hcDI0Mnhfc3JhbV9zZXRfcHJjbV9zeik7 Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBvbWFwMjQyeF9zcmFt X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1NP Q19PTUFQMjQzMAotc3RhdGljIGludCBfX2luaXQgb21hcDI0M3hfc3JhbV9pbml0KHZvaWQpCi17 Ci0JX29tYXAyX3NyYW1fZGRyX2luaXQgPSBvbWFwX3NyYW1fcHVzaChvbWFwMjQzeF9zcmFtX2Rk cl9pbml0LAotCQkJCQlvbWFwMjQzeF9zcmFtX2Rkcl9pbml0X3N6KTsKLQotCV9vbWFwMl9zcmFt X3JlcHJvZ3JhbV9zZHJjID0gb21hcF9zcmFtX3B1c2gob21hcDI0M3hfc3JhbV9yZXByb2dyYW1f c2RyYywKLQkJCQkJICAgIG9tYXAyNDN4X3NyYW1fcmVwcm9ncmFtX3NkcmNfc3opOwotCi0JX29t YXAyX3NldF9wcmNtID0gb21hcF9zcmFtX3B1c2gob21hcDI0M3hfc3JhbV9zZXRfcHJjbSwKLQkJ CQkJIG9tYXAyNDN4X3NyYW1fc2V0X3ByY21fc3opOwotCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQot c3RhdGljIGlubGluZSBpbnQgb21hcDI0M3hfc3JhbV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7 Ci19Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCi0KIHZvaWQgb21hcDNfc3Jh bV9yZXN0b3JlX2NvbnRleHQodm9pZCkKIHsKIAlvbWFwX3NyYW1fcmVzZXQoKTsKQEAgLTMwMywy NCArMjAyLDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9tYXAzNHh4X3NyYW1faW5pdCh2b2lkKQog CW9tYXAzX3NyYW1fcmVzdG9yZV9jb250ZXh0KCk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotc3Rh dGljIGlubGluZSBpbnQgb21hcDM0eHhfc3JhbV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19 Ci0jZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KIAogaW50IF9faW5pdCBvbWFwX3NyYW1f aW5pdCh2b2lkKQogewogCW9tYXBfZGV0ZWN0X3NyYW0oKTsKIAlvbWFwMl9tYXBfc3JhbSgpOwot Ci0JaWYgKGNwdV9pc19vbWFwMjQyeCgpKQotCQlvbWFwMjQyeF9zcmFtX2luaXQoKTsKLQllbHNl IGlmIChjcHVfaXNfb21hcDI0MzAoKSkKLQkJb21hcDI0M3hfc3JhbV9pbml0KCk7Ci0JZWxzZSBp ZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCW9tYXAzNHh4X3NyYW1faW5pdCgpOworCW9tYXAzNHh4 X3NyYW1faW5pdCgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNo LW9tYXAyL3NyYW0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS5oCmluZGV4IDAzMGNhYmMz OTgyMS4uMmRiMmM0NTk4Y2RiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0u aAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0uaApAQCAtNSw0MyArNSwxMiBAQAogCiAj aWZuZGVmIF9fQVNTRU1CTFlfXwogCi1leHRlcm4gdm9pZCBvbWFwMl9zcmFtX2Rkcl9pbml0KHUz MiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCi0JCQkJdTMyIGJhc2VfY3MsIHUz MiBmb3JjZV91bmxvY2spOwotZXh0ZXJuIHZvaWQgb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyh1 MzIgcGVyZl9sZXZlbCwgdTMyIGRsbF92YWwsCi0JCQkJICAgICAgdTMyIG1lbV90eXBlKTsKLWV4 dGVybiB1MzIgb21hcDJfc2V0X3ByY20odTMyIGRwbGxfY3RybF92YWwsIHUzMiBzZHJjX3Jmcl92 YWwsIGludCBieXBhc3MpOwotCiBleHRlcm4gdm9pZCBvbWFwM19zcmFtX3Jlc3RvcmVfY29udGV4 dCh2b2lkKTsKIAogZXh0ZXJuIGludCBfX2luaXQgb21hcF9zcmFtX2luaXQodm9pZCk7CiAKIGV4 dGVybiB2b2lkICpvbWFwX3NyYW1fcHVzaCh2b2lkICpmdW5jcCwgdW5zaWduZWQgbG9uZyBzaXpl KTsKIAotZXh0ZXJuIHZvaWQgb21hcDI0Mnhfc3JhbV9kZHJfaW5pdCh1MzIgKnNsb3dfZGxsX2N0 cmwsIHUzMiBmYXN0X2RsbF9jdHJsLAotCQkJCQkJdTMyIGJhc2VfY3MsIHUzMiBmb3JjZV91bmxv Y2spOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcDI0Mnhfc3JhbV9kZHJfaW5pdF9zejsKLQot ZXh0ZXJuIHUzMiBvbWFwMjQyeF9zcmFtX3NldF9wcmNtKHUzMiBkcGxsX2N0cmxfdmFsLCB1MzIg c2RyY19yZnJfdmFsLAotCQkJCQkJaW50IGJ5cGFzcyk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBv bWFwMjQyeF9zcmFtX3NldF9wcmNtX3N6OwotCi1leHRlcm4gdm9pZCBvbWFwMjQyeF9zcmFtX3Jl cHJvZ3JhbV9zZHJjKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxsX3ZhbCwKLQkJCQkJCXUzMiBtZW1f dHlwZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBvbWFwMjQyeF9zcmFtX3JlcHJvZ3JhbV9zZHJj X3N6OwotCi0KLWV4dGVybiB2b2lkIG9tYXAyNDN4X3NyYW1fZGRyX2luaXQodTMyICpzbG93X2Rs bF9jdHJsLCB1MzIgZmFzdF9kbGxfY3RybCwKLQkJCQkJCXUzMiBiYXNlX2NzLCB1MzIgZm9yY2Vf dW5sb2NrKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG9tYXAyNDN4X3NyYW1fZGRyX2luaXRfc3o7 Ci0KLWV4dGVybiB1MzIgb21hcDI0M3hfc3JhbV9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwg dTMyIHNkcmNfcmZyX3ZhbCwKLQkJCQkJCWludCBieXBhc3MpOwotZXh0ZXJuIHVuc2lnbmVkIGxv bmcgb21hcDI0M3hfc3JhbV9zZXRfcHJjbV9zejsKLQotZXh0ZXJuIHZvaWQgb21hcDI0M3hfc3Jh bV9yZXByb2dyYW1fc2RyYyh1MzIgcGVyZl9sZXZlbCwgdTMyIGRsbF92YWwsCi0JCQkJCQl1MzIg bWVtX3R5cGUpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb21hcDI0M3hfc3JhbV9yZXByb2dyYW1f c2RyY19zejsKLQogI2lmZGVmIENPTkZJR19QTQogZXh0ZXJuIHZvaWQgb21hcF9wdXNoX3NyYW1f aWRsZSh2b2lkKTsKICNlbHNlCkBAIC01NCw1ICsyMyw0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBv bWFwX3B1c2hfc3JhbV9pZGxlKHZvaWQpIHt9CiAgKiBPTUFQMis6IGRlZmluZSB0aGUgU1JBTSBQ QSBhZGRyZXNzZXMuCiAgKiBVc2VkIGJ5IHRoZSBTUkFNIG1hbmFnZW1lbnQgY29kZSBhbmQgdGhl IGlkbGUgc2xlZXAgY29kZS4KICAqLwotI2RlZmluZSBPTUFQMl9TUkFNX1BBCQkweDQwMjAwMDAw CiAjZGVmaW5lIE9NQVAzX1NSQU1fUEEgICAgICAgICAgIDB4NDAyMDAwMDAKZGlmZiAtLWdpdCBh L2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTI0MnguUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3Jh bTI0MnguUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJlZjIxYWMyYWMxLi4wMDAw MDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQyeC5TCisrKyAvZGV2L251 bGwKQEAgLTEsMzE3ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9yLWxhdGVyICovCi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQyeC5T Ci0gKgotICogT21hcDIgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBydW4gaW4g aW50ZXJuYWwgU1JBTQotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNAotICogVGV4YXMgSW5zdHJ1 bWVudHMsIDx3d3cudGkuY29tPgotICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGku Y29tPgotICoKLSAqIFJpY2hhcmQgV29vZHJ1ZmYgbm90ZXMgdGhhdCBhbnkgY2hhbmdlcyB0byB0 aGlzIGNvZGUgbXVzdCBiZSBjYXJlZnVsbHkKLSAqIGF1ZGl0ZWQgYW5kIHRlc3RlZCB0byBlbnN1 cmUgdGhhdCB0aGV5IGRvbid0IGNhdXNlIGEgVExCIG1pc3Mgd2hpbGUKLSAqIHRoZSBTRFJBTSBp cyBpbmFjY2Vzc2libGUuICBTdWNoIGEgc2l0dWF0aW9uIHdpbGwgY3Jhc2ggdGhlIHN5c3RlbQot ICogc2luY2UgaXQgd2lsbCBjYXVzZSB0aGUgQVJNIE1NVSB0byBhdHRlbXB0IHRvIHdhbGsgdGhl IHBhZ2UgdGFibGVzLgotICogVGhlc2UgY3Jhc2hlcyBtYXkgYmUgaW50ZXJtaXR0ZW50LgotICov Ci0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCi0jaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5o PgotCi0jaW5jbHVkZSAic29jLmgiCi0jaW5jbHVkZSAiaW9tYXAuaCIKLSNpbmNsdWRlICJwcm0y eHh4LmgiCi0jaW5jbHVkZSAiY20yeHh4LmgiCi0jaW5jbHVkZSAic2RyYy5oIgotCi0JLnRleHQK LQotCS5hbGlnbgkzCi1FTlRSWShvbWFwMjQyeF9zcmFtX2Rkcl9pbml0KQotCXN0bWZkCXNwISwg e3IwIC0gcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotCi0JbW92CXIxMiwgcjIJ CQlAIGNhcHR1cmUgQ1MxIHZzIENTMAotCW1vdglyOCwgcjMJCQlAIGNhcHR1cmUgZm9yY2UgcGFy YW1ldGVyCi0KLQkvKiBmcmVxdWVuY3kgc2hpZnQgZG93biAqLwotCWxkcglyMiwgb21hcDI0Mnhf c2RpX2NtX2Nsa3NlbDJfcGxsCUAgZ2V0IGFkZHJlc3Mgb2YgZHBsbG91dCByZWcKLQltb3YJcjMs ICMweDEJCUAgdmFsdWUgZm9yIDF4IG9wZXJhdGlvbgotCXN0cglyMywgW3IyXQkJQCBnbyB0byBM MS1mcmVxIG9wZXJhdGlvbgotCi0JLyogdm9sdGFnZSBzaGlmdCBkb3duICovCi0JbW92IHI5LCAj MHgxCQkJQCBzZXQgdXAgZm9yIEwxIHZvbHRhZ2UgY2FsbAotCWJsIHZvbHRhZ2Vfc2hpZnQJCUAg Z28gZHJvcCB2b2x0YWdlCi0KLQkvKiBkbGwgbG9jayBtb2RlICovCi0JbGRyCXIxMSwgb21hcDI0 Mnhfc2RpX3NkcmNfZGxsYV9jdHJsCUAgYWRkciBvZiBkbGxhIGN0cmwKLQlsZHIJcjEwLCBbcjEx XQkJQCBnZXQgY3VycmVudCB2YWwKLQljbXAJcjEyLCAjMHgxCQlAIGNzMSBiYXNlICgyNDIyIGVz Mi4wNS8xKQotCWFkZGVxCXIxMSwgcjExLCAjMHg4CQlAIGlmIGNzMSBiYXNlLCBtb3ZlIHRvIERM TEIKLQltdm4JcjksICMweDQJCUAgbWFzayB0byBnZXQgY2xlYXIgYml0MgotCWFuZAlyMTAsIHIx MCwgcjkJCUAgY2xlYXIgYml0MiBmb3IgbG9jayBtb2RlLgotCW9ycglyMTAsIHIxMCwgIzB4OAkJ QCBtYWtlIHN1cmUgRExMIG9uIChlczIgYml0IHBvcykKLQlvcnIJcjEwLCByMTAsICMweDIJCUAg OTAgZGVncmVlIHBoYXNlIGZvciBhbGwgYmVsb3cgMTMzTUh6Ci0Jc3RyCXIxMCwgW3IxMV0JCUAg Y29tbWl0IHRvIERMTEFfQ1RSTAotCWJsCWlfZGxsX3dhaXQJCUAgd2FpdCBmb3IgZGxsIHRvIGxv Y2sKLQotCS8qIGdldCBkbGwgdmFsdWUgKi8KLQlhZGQJcjExLCByMTEsICMweDQJCUAgZ2V0IGFk ZHIgb2Ygc3RhdHVzIHJlZwotCWxkcglyMTAsIFtyMTFdCQlAIGdldCBsb2NrZWQgdmFsdWUKLQot CS8qIHZvbHRhZ2Ugc2hpZnQgdXAgKi8KLQltb3YgcjksICMweDAJCQlAIHNoaWZ0IGJhY2sgdG8g TDAtdm9sdGFnZQotCWJsIHZvbHRhZ2Vfc2hpZnQJCUAgZ28gcmFpc2Ugdm9sdGFnZQotCi0JLyog ZnJlcXVlbmN5IHNoaWZ0IHVwICovCi0JbW92CXIzLCAjMHgyCQlAIHZhbHVlIGZvciAyeCBvcGVy YXRpb24KLQlzdHIJcjMsIFtyMl0JCUAgZ28gdG8gTDAtZnJlcSBvcGVyYXRpb24KLQotCS8qIHJl c2V0IGVudHJ5IG1vZGUgZm9yIGRsbGN0cmwgKi8KLQlzdWIJcjExLCByMTEsICMweDQJCUAgbW92 ZSBmcm9tIHN0YXR1cyB0byBjdHJsCi0JY21wCXIxMiwgIzB4MQkJQCBub3JtYWxpemUgaWYgY3Mx IGJhc2VkCi0Jc3ViZXEJcjExLCByMTEsICMweDgJCUAgcG9zc2libHkgYmFjayB0byBETExBCi0J Y21wCXI4LCAjMHgxCQlAIGlmIGZvcmNlZCB1bmxvY2sgZXhpdAotCW9ycmVxCXIxLCByMSwgIzB4 NAkJQCBtYWtlIHN1cmUgZXhpdCB3aXRoIHVubG9ja2VkIHZhbHVlCi0Jc3RyCXIxLCBbcjExXQkJ QCByZXN0b3JlIERMTEFfQ1RSTCBoaWdoIHZhbHVlCi0JYWRkCXIxMSwgcjExLCAjMHg4CQlAIG1v dmUgdG8gRExMQl9DVFJMIGFkZHIKLQlzdHIJcjEsIFtyMTFdCQlAIHNldCB2YWx1ZSBETExCX0NU UkwKLQlibAlpX2RsbF93YWl0CQlAIHdhaXQgZm9yIHBvc3NpYmxlIGxvY2sKLQotCS8qIHNldCB1 cCBmb3IgcmV0dXJuLCBERFIgc2hvdWxkIGJlIGdvb2QgKi8KLQlzdHIgcjEwLCBbcjBdCQkJQCB3 cml0ZSBkbGxfc3RhdHVzIGFuZCByZXR1cm4gY291bnRlcgotCWxkbWZkCXNwISwge3IwIC0gcjEy LCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgotCi0JLyogZW5zdXJlIHRoZSBETEwgaGFz IHJlbG9ja2VkICovCi1pX2RsbF93YWl0OgotCW1vdglyNCwgIzB4ODAwCQlAIGRlbGF5IERMTCBy ZWxvY2ssIG1pbiAweDQwMCBMMyBjbG9ja3MKLWlfZGxsX2RlbGF5OgotCXN1YnMJcjQsIHI0LCAj MHgxCi0JYm5lCWlfZGxsX2RlbGF5Ci0JcmV0CWxyCi0KLQkvKgotCSAqIHNoaWZ0IHVwIG9yIGRv d24gdm9sdGFnZSwgdXNlIFI5IGFzIGlucHV0IHRvIHRlbGwgbGV2ZWwuCi0JICogd2FpdCBmb3Ig aXQgdG8gZmluaXNoLCB1c2UgMzJrIHN5bmMgY291bnRlciwgMXRpY2s9MzF1Uy4KLQkgKi8KLXZv bHRhZ2Vfc2hpZnQ6Ci0JbGRyCXI0LCBvbWFwMjQyeF9zZGlfcHJjbV92b2x0Y3RybAlAIGdldCBh ZGRyIG9mIHZvbHQgY3RybC4KLQlsZHIJcjUsIFtyNF0JCUAgZ2V0IHZhbHVlLgotCWxkcglyNiwg cHJjbV9tYXNrX3ZhbAlAIGdldCB2YWx1ZSBvZiBtYXNrCi0JYW5kCXI1LCByNSwgcjYJCUAgYXBw bHkgbWFzayB0byBjbGVhciBiaXRzCi0Jb3JyCXI1LCByNSwgcjkJCUAgYnVsbGQgdmFsdWUgZm9y IEwwL0wxLXZvbHQgb3BlcmF0aW9uLgotCXN0cglyNSwgW3I0XQkJQCBzZXQgdXAgZm9yIGNoYW5n ZS4KLQltb3YJcjMsICMweDQwMDAJCUAgZ2V0IHZhbCBmb3IgZm9yY2UKLQlvcnIJcjUsIHI1LCBy MwkJQCBidWlsZCB2YWx1ZSBmb3IgZm9yY2UKLQlzdHIJcjUsIFtyNF0JCUAgRm9yY2UgdHJhbnNp dGlvbiB0byBMMQotCi0JbGRyCXIzLCBvbWFwMjQyeF9zZGlfdGltZXJfMzJrc3luY3RfY3IJQCBn ZXQgYWRkciBvZiBjb3VudGVyCi0JbGRyCXI1LCBbcjNdCQlAIGdldCB2YWx1ZQotCWFkZAlyNSwg cjUsICMweDMJCUAgZ2l2ZSBpdCBhdCBtb3N0IDkzdVMKLXZvbHRfZGVsYXk6Ci0JbGRyCXI3LCBb cjNdCQlAIGdldCB0aW1lciB2YWx1ZQotCWNtcAlyNSwgcjcJCQlAIHRpbWUgdXA/Ci0JYmhpCXZv bHRfZGVsYXkJCUAgbm90IHlldC0+YnJhbmNoCi0JcmV0CWxyCQkJQCBiYWNrIHRvIGNhbGxlci4K LQotb21hcDI0Mnhfc2RpX2NtX2Nsa3NlbDJfcGxsOgotCS53b3JkIE9NQVAyNDIwX0NNX1JFR0FE RFIoUExMX01PRCwgQ01fQ0xLU0VMMikKLW9tYXAyNDJ4X3NkaV9zZHJjX2RsbGFfY3RybDoKLQku d29yZCBPTUFQMjQyWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCi1vbWFwMjQyeF9zZGlf cHJjbV92b2x0Y3RybDoKLQkud29yZCBPTUFQMjQyMF9QUkNNX1ZPTFRDVFJMCi1wcmNtX21hc2tf dmFsOgotCS53b3JkIDB4RkZGRjNGRkMKLW9tYXAyNDJ4X3NkaV90aW1lcl8zMmtzeW5jdF9jcjoK LQkud29yZCBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDIwXzMyS1NZTkNUX0JBU0UgKyAweDAx MCkKLUVOVFJZKG9tYXAyNDJ4X3NyYW1fZGRyX2luaXRfc3opCi0JLndvcmQJLiAtIG9tYXAyNDJ4 X3NyYW1fZGRyX2luaXQKLQotLyoKLSAqIFJlcHJvZ3JhbXMgbWVtb3J5IHRpbWluZ3MuCi0gKiBy MCA9IFtQUkNNX0ZVTEwgfCBQUkNNX0hBTEZdIHIxID0gU0RSQ19ETExBX0NUUkwgdmFsdWUgcjIg PSBbRERSIHwgU0RSXQotICogUFJDTV9GVUxMID0gMiwgUFJDTV9IQUxGID0gMSwgRERSID0gMSwg U0RSID0gMAotICovCi0JLmFsaWduCTMKLUVOVFJZKG9tYXAyNDJ4X3NyYW1fcmVwcm9ncmFtX3Nk cmMpCi0Jc3RtZmQJc3AhLCB7cjAgLSByMTAsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNr Ci0JbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtcmMgY2FsbAotCW1jcglwMTUsIDAsIHIzLCBj NywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIsIGZpbmlzaCBBUk0gU0RSL0REUgotCW5vcAotCW5v cAotCWxkcglyNiwgb21hcDI0Mnhfc3JzX3NkcmNfcmZyX2N0cmwJQCBnZXQgYWRkciBvZiByZWZy ZXNoIHJlZwotCWxkcglyNSwgW3I2XQkJQCBnZXQgdmFsdWUKLQltb3YJcjUsIHI1LCBsc3IgIzgJ CUAgaXNvbGF0ZSByZnIgZmllbGQgYW5kIGRyb3AgYnVyc3QKLQotCWNtcAlyMCwgIzB4MQkJQCBn b2luZyB0byBoYWxmIHNwZWVkPwotCW1vdm5lCXI5LCAjMHgwCQlAIGlmIHVwIHNldCBmbGFnIHVw IGZvciBwcmUgdXAsIGhpIHZvbHQKLQotCWJsbmUJdm9sdGFnZV9zaGlmdF9jCQlAIGFkanVzdCB2 b2x0YWdlCi0KLQljbXAJcjAsICMweDEJCUAgZ29pbmcgdG8gaGFsZiBzcGVlZCAocG9zdCBicmFu Y2ggbGluaykKLQltb3ZlcQlyNSwgcjUsIGxzciAjMQkJQCBkaXZpZGUgYnkgMiBpZiB0byBoYWxm Ci0JbW92bmUJcjUsIHI1LCBsc2wgIzEJCUAgbXVsdCBieSAyIGlmIHRvIGZ1bGwKLQltb3YJcjUs IHI1LCBsc2wgIzgJCUAgcHV0IHJmciBmaWVsZCBiYWNrIGludG8gcGxhY2UKLQlhZGQJcjUsIHI1 LCAjMHgxCQlAIHR1cm4gb24gYnVyc3Qgb2YgMQotCWxkcglyNCwgb21hcDI0Mnhfc3JzX2NtX2Ns a3NlbDJfcGxsCUAgZ2V0IGFkZHJlc3Mgb2Ygb3V0IHJlZwotCWxkcglyMywgW3I0XQkJQCBnZXQg Y3VyciB2YWx1ZQotCW9ycglyMywgcjMsICMweDMKLQliaWMJcjMsIHIzLCAjMHgzCQlAIGNsZWFy IGxvd2VyIGJpdHMKLQlvcnIJcjMsIHIzLCByMAkJQCBuZXcgc3RhdGUgdmFsdWUKLQlzdHIJcjMs IFtyNF0JCUAgc2V0IG5ldyBzdGF0ZSAocGxsL3gsIHg9MSBvciAyKQotCW5vcAotCW5vcAotCi0J bW92ZXEJcjksICMweDEJCUAgaWYgc3BlZWQgZG93biwgcG9zdCBkb3duLCBkcm9wIHZvbHQKLQli bGVxCXZvbHRhZ2Vfc2hpZnRfYwotCi0JbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJQCBtZW1v cnkgYmFycmllcgotCXN0cglyNSwgW3I2XQkJQCBzZXQgbmV3IFJGUl8xIHZhbHVlCi0JYWRkCXI2 LCByNiwgIzB4MzAJCUAgZ2V0IFJGUl8yIGFkZHIKLQlzdHIJcjUsIFtyNl0JCUAgc2V0IFJGUl8y Ci0Jbm9wCi0JY21wCXIyLCAjMHgxCQlAIChTRFIgb3IgRERSKSBkbyB3ZSBuZWVkIHRvIGFkanVz dCBETEwKLQlibmUJZnJlcV9vdXQJCUAgbGVhdmUgaWYgU0RSLCBubyBETEwgZnVuY3Rpb24KLQot CS8qIFdpdGggRERSLCB3ZSBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgRExMIGZvciB0aGUgZnJl cXVlbmN5IGNoYW5nZSAqLwotCWxkcglyMiwgb21hcDI0Mnhfc3JzX3NkcmNfZGxsYV9jdHJsCUAg YWRkciBvZiBkbGxhIGN0cmwKLQlzdHIJcjEsIFtyMl0JCUAgd3JpdGUgb3V0IG5ldyBTRFJDX0RM TEFfQ1RSTAotCWFkZAlyMiwgcjIsICMweDgJCUAgYWRkciB0byBTRFJDX0RMTEJfQ1RSTAotCXN0 cglyMSwgW3IyXQkJQCBjb21taXQgdG8gU0RSQ19ETExCX0NUUkwKLQltb3YJcjEsICMweDIwMDAJ CUAgd2FpdCBETEwgcmVsb2NrLCBtaW4gMHg0MDAgTDMgY2xvY2tzCi1kbGxfd2FpdDoKLQlzdWJz CXIxLCByMSwgIzB4MQotCWJuZQlkbGxfd2FpdAotZnJlcV9vdXQ6Ci0JbGRtZmQJc3AhLCB7cjAg LSByMTAsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCi0KLSAgICAvKgotICAgICAqIHNo aWZ0IHVwIG9yIGRvd24gdm9sdGFnZSwgdXNlIFI5IGFzIGlucHV0IHRvIHRlbGwgbGV2ZWwuCi0g ICAgICoJd2FpdCBmb3IgaXQgdG8gZmluaXNoLCB1c2UgMzJrIHN5bmMgY291bnRlciwgMXRpY2s9 MzF1Uy4KLSAgICAgKi8KLXZvbHRhZ2Vfc2hpZnRfYzoKLQlsZHIJcjEwLCBvbWFwMjQyeF9zcnNf cHJjbV92b2x0Y3RybAlAIGdldCBhZGRyIG9mIHZvbHQgY3RybAotCWxkcglyOCwgW3IxMF0JCUAg Z2V0IHZhbHVlCi0JbGRyCXI3LCBkZHJfcHJjbV9tYXNrX3ZhbAlAIGdldCB2YWx1ZSBvZiBtYXNr Ci0JYW5kCXI4LCByOCwgcjcJCUAgYXBwbHkgbWFzayB0byBjbGVhciBiaXRzCi0Jb3JyCXI4LCBy OCwgcjkJCUAgYnVsbGQgdmFsdWUgZm9yIEwwL0wxLXZvbHQgb3BlcmF0aW9uLgotCXN0cglyOCwg W3IxMF0JCUAgc2V0IHVwIGZvciBjaGFuZ2UuCi0JbW92CXI3LCAjMHg0MDAwCQlAIGdldCB2YWwg Zm9yIGZvcmNlCi0Jb3JyCXI4LCByOCwgcjcJCUAgYnVpbGQgdmFsdWUgZm9yIGZvcmNlCi0Jc3Ry CXI4LCBbcjEwXQkJQCBGb3JjZSB0cmFuc2l0aW9uIHRvIEwxCi0KLQlsZHIJcjEwLCBvbWFwMjQy eF9zcnNfdGltZXJfMzJrc3luY3QJQCBnZXQgYWRkciBvZiBjb3VudGVyCi0JbGRyCXI4LCBbcjEw XQkJQCBnZXQgdmFsdWUKLQlhZGQJcjgsIHI4LCAjMHgyCQlAIGdpdmUgaXQgYXQgbW9zdCA2MnVT IChtaW4gMzErKQotdm9sdF9kZWxheV9jOgotCWxkcglyNywgW3IxMF0JCUAgZ2V0IHRpbWVyIHZh bHVlCi0JY21wCXI4LCByNwkJCUAgdGltZSB1cD8KLQliaGkJdm9sdF9kZWxheV9jCQlAIG5vdCB5 ZXQtPmJyYW5jaAotCXJldAlscgkJCUAgYmFjayB0byBjYWxsZXIKLQotb21hcDI0Mnhfc3JzX2Nt X2Nsa3NlbDJfcGxsOgotCS53b3JkIE9NQVAyNDIwX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xL U0VMMikKLW9tYXAyNDJ4X3Nyc19zZHJjX2RsbGFfY3RybDoKLQkud29yZCBPTUFQMjQyWF9TRFJD X1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCi1vbWFwMjQyeF9zcnNfc2RyY19yZnJfY3RybDoKLQku d29yZCBPTUFQMjQyWF9TRFJDX1JFR0FERFIoU0RSQ19SRlJfQ1RSTF8wKQotb21hcDI0Mnhfc3Jz X3ByY21fdm9sdGN0cmw6Ci0JLndvcmQgT01BUDI0MjBfUFJDTV9WT0xUQ1RSTAotZGRyX3ByY21f bWFza192YWw6Ci0JLndvcmQgMHhGRkZGM0ZGQwotb21hcDI0Mnhfc3JzX3RpbWVyXzMya3N5bmN0 OgotCS53b3JkIE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0MjBfMzJLU1lOQ1RfQkFTRSArIDB4 MDEwKQotCi1FTlRSWShvbWFwMjQyeF9zcmFtX3JlcHJvZ3JhbV9zZHJjX3N6KQotCS53b3JkCS4g LSBvbWFwMjQyeF9zcmFtX3JlcHJvZ3JhbV9zZHJjCi0KLS8qCi0gKiBTZXQgZGl2aWRlcnMgYW5k IHBsbC4gQWxzbyByZWNhbGN1bGF0ZSBETEwgdmFsdWUgZm9yIEREUiBhbmQgdW5sb2NrIG1vZGUu Ci0gKi8KLQkuYWxpZ24JMwotRU5UUlkob21hcDI0Mnhfc3JhbV9zZXRfcHJjbSkKLQlzdG1mZAlz cCEsIHtyMC1yMTIsIGxyfQlAIHJlZ3MgdG8gc3RhY2sKLQlhZHIJcjQsIHBiZWdpbgkJQCBhZGRy IG9mIHByZWxvYWQgc3RhcnQKLQlhZHIJcjgsIHBlbmQJCUAgYWRkciBvZiBwcmVsb2FkIGVuZAot CW1jcnIJcDE1LCAxLCByOCwgcjQsIGMxMglAIHByZWxvYWQgaW50byBpY2FjaGUKLXBiZWdpbjoK LQkvKiBtb3ZlIGludG8gZmFzdCByZWxvY2sgYnlwYXNzICovCi0JbGRyCXI4LCBvbWFwMjQyeF9z c3BfcGxsX2N0bAlAIGdldCBhZGRyCi0JbGRyCXI1LCBbcjhdCQlAIGdldCB2YWwKLQltdm4JcjYs ICMweDMJCUAgY2xlYXIgbWFzawotCWFuZAlyNSwgcjUsIHI2CQlAIGNsZWFyIGZpZWxkCi0Jb3Jy CXI3LCByNSwgIzB4MgkJQCBmYXN0IHJlbG9jayB2YWwKLQlzdHIJcjcsIFtyOF0JCUAgZ28gdG8g ZmFzdCByZWxvY2sKLQlsZHIJcjQsIG9tYXAyNDJ4X3NzcF9wbGxfc3RhdAlAIGFkZHIgb2Ygc3Rh dAotYmxvY2s6Ci0JLyogd2FpdCBmb3IgYnlwYXNzICovCi0JbGRyCXI4LCBbcjRdCQlAIHN0YXQg dmFsdWUKLQlhbmQJcjgsIHI4LCAjMHgzCQlAIG1hc2sgZm9yIHN0YXQKLQljbXAJcjgsICMweDEJ CUAgdGhlcmUgeWV0Ci0JYm5lCWJsb2NrCQkJQCBsb29wIGlmIG5vdAotCi0JLyogc2V0IG5ldyBk cGxsIGRpdmlkZXJzIF9hZnRlcl8gaW4gYnlwYXNzICovCi0JbGRyCXI0LCBvbWFwMjQyeF9zc3Bf cGxsX2RpdglAIGdldCBhZGRyCi0Jc3RyCXIwLCBbcjRdCQlAIHNldCBkcGxsIGN0cmwgdmFsCi0K LQlsZHIJcjQsIG9tYXAyNDJ4X3NzcF9zZXRfY29uZmlnCUAgZ2V0IGFkZHIKLQltb3YJcjgsICMx CQkJQCB2YWxpZCBjZmcgbXNrCi0Jc3RyCXI4LCBbcjRdCQlAIG1ha2UgZGl2aWRlcnMgdGFrZQot Ci0JbW92CXI0LCAjMTAwCQlAIGRlYWQgc3BpbiBhIGJpdAotd2FpdF9hX2JpdDoKLQlzdWJzCXI0 LCByNCwgIzEJCUAgZGVjIGxvb3AKLQlibmUJd2FpdF9hX2JpdAkJQCBkZWxheSBkb25lPwotCi0J LyogY2hlY2sgaWYgc3RheWluZyBpbiBieXBhc3MgKi8KLQljbXAJcjIsICMweDEJCUAgc3RheSBp biBieXBhc3M/Ci0JYmVxCXBlbmQJCQlAIGp1bXAgb3ZlciBkcGxsIHJlbG9jawotCi0JLyogcmVs b2NrIERQTEwgd2l0aCBuZXcgdmFscyAqLwotCWxkcglyNSwgb21hcDI0Mnhfc3NwX3BsbF9zdGF0 CUAgZ2V0IGFkZHIKLQlsZHIJcjQsIG9tYXAyNDJ4X3NzcF9wbGxfY3RsCUAgZ2V0IGFkZHIKLQlv cnIJcjgsIHI3LCAjMHgzCQlAIHZhbCBmb3IgbG9jayBkcGxsCi0Jc3RyCXI4LCBbcjRdCQlAIHNl dCB2YWwKLQltb3YJcjAsICMxMDAwCQlAIGRlYWQgc3BpbiBhIGJpdAotd2FpdF9tb3JlOgotCXN1 YnMJcjAsIHIwLCAjMQkJQCBkZWMgbG9vcAotCWJuZQl3YWl0X21vcmUJCUAgZGVsYXkgZG9uZT8K LXdhaXRfbG9jazoKLQlsZHIJcjgsIFtyNV0JCUAgZ2V0IGxvY2sgdmFsCi0JYW5kCXI4LCByOCwg IzMJCUAgaXNvbGF0ZSBmaWVsZAotCWNtcAlyOCwgIzIJCQlAIGxvY2tlZD8KLQlibmUJd2FpdF9s b2NrCQlAIHdhaXQgaWYgbm90Ci1wZW5kOgotCS8qIHVwZGF0ZSBtZW1vcnkgdGltaW5ncyAmIGJy aWVmbHkgbG9jayBkbGwgKi8KLQlsZHIJcjQsIG9tYXAyNDJ4X3NzcF9zZHJjX3JmcglAIGdldCBh ZGRyCi0Jc3RyCXIxLCBbcjRdCQlAIHVwZGF0ZSByZWZyZXNoIHRpbWluZwotCWxkcglyMTEsIG9t YXAyNDJ4X3NzcF9kbGxhX2N0cmwJQCBnZXQgYWRkciBvZiBETExBIGN0cmwKLQlsZHIJcjEwLCBb cjExXQkJQCBnZXQgY3VycmVudCB2YWwKLQltdm4JcjksICMweDQJCUAgbWFzayB0byBnZXQgY2xl YXIgYml0MgotCWFuZAlyMTAsIHIxMCwgcjkJCUAgY2xlYXIgYml0MiBmb3IgbG9jayBtb2RlCi0J b3JyCXIxMCwgcjEwLCAjMHg4CQlAIG1ha2Ugc3VyZSBETEwgb24gKGVzMiBiaXQgcG9zKQotCXN0 cglyMTAsIFtyMTFdCQlAIGNvbW1pdCB0byBETExBX0NUUkwKLQlhZGQJcjExLCByMTEsICMweDgJ CUAgbW92ZSB0byBkbGxiCi0Jc3RyCXIxMCwgW3IxMV0JCUAgaGl0IERMTEIgYWxzbwotCi0JbW92 CXI0LCAjMHg4MDAJCUAgcmVsb2NrIHRpbWUgKG1pbiAweDQwMCBMMyBjbG9ja3MpCi13YWl0X2Rs bF9sb2NrOgotCXN1YnMJcjQsIHI0LCAjMHgxCi0JYm5lCXdhaXRfZGxsX2xvY2sKLQlub3AKLQls ZG1mZAlzcCEsIHtyMC1yMTIsIHBjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCi0KLW9tYXAy NDJ4X3NzcF9zZXRfY29uZmlnOgotCS53b3JkIE9NQVAyNDIwX1BSQ01fQ0xLQ0ZHX0NUUkwKLW9t YXAyNDJ4X3NzcF9wbGxfY3RsOgotCS53b3JkIE9NQVAyNDIwX0NNX1JFR0FERFIoUExMX01PRCwg Q01fQ0xLRU4pCi1vbWFwMjQyeF9zc3BfcGxsX3N0YXQ6Ci0JLndvcmQgT01BUDI0MjBfQ01fUkVH QUREUihQTExfTU9ELCBDTV9JRExFU1QpCi1vbWFwMjQyeF9zc3BfcGxsX2RpdjoKLQkud29yZCBP TUFQMjQyMF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpCi1vbWFwMjQyeF9zc3Bfc2Ry Y19yZnI6Ci0JLndvcmQgT01BUDI0MlhfU0RSQ19SRUdBRERSKFNEUkNfUkZSX0NUUkxfMCkKLW9t YXAyNDJ4X3NzcF9kbGxhX2N0cmw6Ci0JLndvcmQgT01BUDI0MlhfU0RSQ19SRUdBRERSKFNEUkNf RExMQV9DVFJMKQotCi1FTlRSWShvbWFwMjQyeF9zcmFtX3NldF9wcmNtX3N6KQotCS53b3JkCS4g LSBvbWFwMjQyeF9zcmFtX3NldF9wcmNtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAy L3NyYW0yNDN4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDN4LlMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGZhZjAzYjdmMDhmNS4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gv YXJtL21hY2gtb21hcDIvc3JhbTI0M3guUworKysgL2Rldi9udWxsCkBAIC0xLDMxNyArMCwwIEBA Ci0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwotLyoKLSAq IGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTI0M3guUwotICoKLSAqIE9tYXAyIHNwZWNp ZmljIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KLSAqCi0g KiAoQykgQ29weXJpZ2h0IDIwMDQKLSAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4K LSAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqCi0gKiBSaWNoYXJk IFdvb2RydWZmIG5vdGVzIHRoYXQgYW55IGNoYW5nZXMgdG8gdGhpcyBjb2RlIG11c3QgYmUgY2Fy ZWZ1bGx5Ci0gKiBhdWRpdGVkIGFuZCB0ZXN0ZWQgdG8gZW5zdXJlIHRoYXQgdGhleSBkb24ndCBj YXVzZSBhIFRMQiBtaXNzIHdoaWxlCi0gKiB0aGUgU0RSQU0gaXMgaW5hY2Nlc3NpYmxlLiAgU3Vj aCBhIHNpdHVhdGlvbiB3aWxsIGNyYXNoIHRoZSBzeXN0ZW0KLSAqIHNpbmNlIGl0IHdpbGwgY2F1 c2UgdGhlIEFSTSBNTVUgdG8gYXR0ZW1wdCB0byB3YWxrIHRoZSBwYWdlIHRhYmxlcy4KLSAqIFRo ZXNlIGNyYXNoZXMgbWF5IGJlIGludGVybWl0dGVudC4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2xp bmthZ2UuaD4KLQotI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KLQotI2luY2x1ZGUgInNvYy5o IgotI2luY2x1ZGUgImlvbWFwLmgiCi0jaW5jbHVkZSAicHJtMnh4eC5oIgotI2luY2x1ZGUgImNt Mnh4eC5oIgotI2luY2x1ZGUgInNkcmMuaCIKLQotCS50ZXh0Ci0KLQkuYWxpZ24JMwotRU5UUlko b21hcDI0M3hfc3JhbV9kZHJfaW5pdCkKLQlzdG1mZAlzcCEsIHtyMCAtIHIxMiwgbHJ9CUAgc2F2 ZSByZWdpc3RlcnMgb24gc3RhY2sKLQotCW1vdglyMTIsIHIyCQkJQCBjYXB0dXJlIENTMSB2cyBD UzAKLQltb3YJcjgsIHIzCQkJQCBjYXB0dXJlIGZvcmNlIHBhcmFtZXRlcgotCi0JLyogZnJlcXVl bmN5IHNoaWZ0IGRvd24gKi8KLQlsZHIJcjIsIG9tYXAyNDN4X3NkaV9jbV9jbGtzZWwyX3BsbAlA IGdldCBhZGRyZXNzIG9mIGRwbGxvdXQgcmVnCi0JbW92CXIzLCAjMHgxCQlAIHZhbHVlIGZvciAx eCBvcGVyYXRpb24KLQlzdHIJcjMsIFtyMl0JCUAgZ28gdG8gTDEtZnJlcSBvcGVyYXRpb24KLQot CS8qIHZvbHRhZ2Ugc2hpZnQgZG93biAqLwotCW1vdiByOSwgIzB4MQkJCUAgc2V0IHVwIGZvciBM MSB2b2x0YWdlIGNhbGwKLQlibCB2b2x0YWdlX3NoaWZ0CQlAIGdvIGRyb3Agdm9sdGFnZQotCi0J LyogZGxsIGxvY2sgbW9kZSAqLwotCWxkcglyMTEsIG9tYXAyNDN4X3NkaV9zZHJjX2RsbGFfY3Ry bAlAIGFkZHIgb2YgZGxsYSBjdHJsCi0JbGRyCXIxMCwgW3IxMV0JCUAgZ2V0IGN1cnJlbnQgdmFs Ci0JY21wCXIxMiwgIzB4MQkJQCBjczEgYmFzZSAoMjQyMiBlczIuMDUvMSkKLQlhZGRlcQlyMTEs IHIxMSwgIzB4OAkJQCBpZiBjczEgYmFzZSwgbW92ZSB0byBETExCCi0JbXZuCXI5LCAjMHg0CQlA IG1hc2sgdG8gZ2V0IGNsZWFyIGJpdDIKLQlhbmQJcjEwLCByMTAsIHI5CQlAIGNsZWFyIGJpdDIg Zm9yIGxvY2sgbW9kZS4KLQlvcnIJcjEwLCByMTAsICMweDgJCUAgbWFrZSBzdXJlIERMTCBvbiAo ZXMyIGJpdCBwb3MpCi0Jb3JyCXIxMCwgcjEwLCAjMHgyCQlAIDkwIGRlZ3JlZSBwaGFzZSBmb3Ig YWxsIGJlbG93IDEzM01IegotCXN0cglyMTAsIFtyMTFdCQlAIGNvbW1pdCB0byBETExBX0NUUkwK LQlibAlpX2RsbF93YWl0CQlAIHdhaXQgZm9yIGRsbCB0byBsb2NrCi0KLQkvKiBnZXQgZGxsIHZh bHVlICovCi0JYWRkCXIxMSwgcjExLCAjMHg0CQlAIGdldCBhZGRyIG9mIHN0YXR1cyByZWcKLQls ZHIJcjEwLCBbcjExXQkJQCBnZXQgbG9ja2VkIHZhbHVlCi0KLQkvKiB2b2x0YWdlIHNoaWZ0IHVw ICovCi0JbW92IHI5LCAjMHgwCQkJQCBzaGlmdCBiYWNrIHRvIEwwLXZvbHRhZ2UKLQlibCB2b2x0 YWdlX3NoaWZ0CQlAIGdvIHJhaXNlIHZvbHRhZ2UKLQotCS8qIGZyZXF1ZW5jeSBzaGlmdCB1cCAq LwotCW1vdglyMywgIzB4MgkJQCB2YWx1ZSBmb3IgMnggb3BlcmF0aW9uCi0Jc3RyCXIzLCBbcjJd CQlAIGdvIHRvIEwwLWZyZXEgb3BlcmF0aW9uCi0KLQkvKiByZXNldCBlbnRyeSBtb2RlIGZvciBk bGxjdHJsICovCi0Jc3ViCXIxMSwgcjExLCAjMHg0CQlAIG1vdmUgZnJvbSBzdGF0dXMgdG8gY3Ry bAotCWNtcAlyMTIsICMweDEJCUAgbm9ybWFsaXplIGlmIGNzMSBiYXNlZAotCXN1YmVxCXIxMSwg cjExLCAjMHg4CQlAIHBvc3NpYmx5IGJhY2sgdG8gRExMQQotCWNtcAlyOCwgIzB4MQkJQCBpZiBm b3JjZWQgdW5sb2NrIGV4aXQKLQlvcnJlcQlyMSwgcjEsICMweDQJCUAgbWFrZSBzdXJlIGV4aXQg d2l0aCB1bmxvY2tlZCB2YWx1ZQotCXN0cglyMSwgW3IxMV0JCUAgcmVzdG9yZSBETExBX0NUUkwg aGlnaCB2YWx1ZQotCWFkZAlyMTEsIHIxMSwgIzB4OAkJQCBtb3ZlIHRvIERMTEJfQ1RSTCBhZGRy Ci0Jc3RyCXIxLCBbcjExXQkJQCBzZXQgdmFsdWUgRExMQl9DVFJMCi0JYmwJaV9kbGxfd2FpdAkJ QCB3YWl0IGZvciBwb3NzaWJsZSBsb2NrCi0KLQkvKiBzZXQgdXAgZm9yIHJldHVybiwgRERSIHNo b3VsZCBiZSBnb29kICovCi0Jc3RyIHIxMCwgW3IwXQkJCUAgd3JpdGUgZGxsX3N0YXR1cyBhbmQg cmV0dXJuIGNvdW50ZXIKLQlsZG1mZAlzcCEsIHtyMCAtIHIxMiwgcGN9CUAgcmVzdG9yZSByZWdz IGFuZCByZXR1cm4KLQotCS8qIGVuc3VyZSB0aGUgRExMIGhhcyByZWxvY2tlZCAqLwotaV9kbGxf d2FpdDoKLQltb3YJcjQsICMweDgwMAkJQCBkZWxheSBETEwgcmVsb2NrLCBtaW4gMHg0MDAgTDMg Y2xvY2tzCi1pX2RsbF9kZWxheToKLQlzdWJzCXI0LCByNCwgIzB4MQotCWJuZQlpX2RsbF9kZWxh eQotCXJldAlscgotCi0JLyoKLQkgKiBzaGlmdCB1cCBvciBkb3duIHZvbHRhZ2UsIHVzZSBSOSBh cyBpbnB1dCB0byB0ZWxsIGxldmVsLgotCSAqIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCwgdXNlIDMy ayBzeW5jIGNvdW50ZXIsIDF0aWNrPTMxdVMuCi0JICovCi12b2x0YWdlX3NoaWZ0OgotCWxkcgly NCwgb21hcDI0M3hfc2RpX3ByY21fdm9sdGN0cmwJQCBnZXQgYWRkciBvZiB2b2x0IGN0cmwuCi0J bGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZS4KLQlsZHIJcjYsIHByY21fbWFza192YWwJQCBnZXQg dmFsdWUgb2YgbWFzawotCWFuZAlyNSwgcjUsIHI2CQlAIGFwcGx5IG1hc2sgdG8gY2xlYXIgYml0 cwotCW9ycglyNSwgcjUsIHI5CQlAIGJ1bGxkIHZhbHVlIGZvciBMMC9MMS12b2x0IG9wZXJhdGlv bi4KLQlzdHIJcjUsIFtyNF0JCUAgc2V0IHVwIGZvciBjaGFuZ2UuCi0JbW92CXIzLCAjMHg0MDAw CQlAIGdldCB2YWwgZm9yIGZvcmNlCi0Jb3JyCXI1LCByNSwgcjMJCUAgYnVpbGQgdmFsdWUgZm9y IGZvcmNlCi0Jc3RyCXI1LCBbcjRdCQlAIEZvcmNlIHRyYW5zaXRpb24gdG8gTDEKLQotCWxkcgly Mywgb21hcDI0M3hfc2RpX3RpbWVyXzMya3N5bmN0X2NyCUAgZ2V0IGFkZHIgb2YgY291bnRlcgot CWxkcglyNSwgW3IzXQkJQCBnZXQgdmFsdWUKLQlhZGQJcjUsIHI1LCAjMHgzCQlAIGdpdmUgaXQg YXQgbW9zdCA5M3VTCi12b2x0X2RlbGF5OgotCWxkcglyNywgW3IzXQkJQCBnZXQgdGltZXIgdmFs dWUKLQljbXAJcjUsIHI3CQkJQCB0aW1lIHVwPwotCWJoaQl2b2x0X2RlbGF5CQlAIG5vdCB5ZXQt PmJyYW5jaAotCXJldAlscgkJCUAgYmFjayB0byBjYWxsZXIuCi0KLW9tYXAyNDN4X3NkaV9jbV9j bGtzZWwyX3BsbDoKLQkud29yZCBPTUFQMjQzMF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NF TDIpCi1vbWFwMjQzeF9zZGlfc2RyY19kbGxhX2N0cmw6Ci0JLndvcmQgT01BUDI0M1hfU0RSQ19S RUdBRERSKFNEUkNfRExMQV9DVFJMKQotb21hcDI0M3hfc2RpX3ByY21fdm9sdGN0cmw6Ci0JLndv cmQgT01BUDI0MzBfUFJDTV9WT0xUQ1RSTAotcHJjbV9tYXNrX3ZhbDoKLQkud29yZCAweEZGRkYz RkZDCi1vbWFwMjQzeF9zZGlfdGltZXJfMzJrc3luY3RfY3I6Ci0JLndvcmQgT01BUDJfTDRfSU9f QUREUkVTUyhPTUFQMjQzMF8zMktTWU5DVF9CQVNFICsgMHgwMTApCi1FTlRSWShvbWFwMjQzeF9z cmFtX2Rkcl9pbml0X3N6KQotCS53b3JkCS4gLSBvbWFwMjQzeF9zcmFtX2Rkcl9pbml0Ci0KLS8q Ci0gKiBSZXByb2dyYW1zIG1lbW9yeSB0aW1pbmdzLgotICogcjAgPSBbUFJDTV9GVUxMIHwgUFJD TV9IQUxGXSByMSA9IFNEUkNfRExMQV9DVFJMIHZhbHVlIHIyID0gW0REUiB8IFNEUl0KLSAqIFBS Q01fRlVMTCA9IDIsIFBSQ01fSEFMRiA9IDEsIEREUiA9IDEsIFNEUiA9IDAKLSAqLwotCS5hbGln bgkzCi1FTlRSWShvbWFwMjQzeF9zcmFtX3JlcHJvZ3JhbV9zZHJjKQotCXN0bWZkCXNwISwge3Iw IC0gcjEwLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotCW1vdglyMywgIzB4MAkJQCBj bGVhciBmb3IgbXJjIGNhbGwKLQltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAlAIG1lbW9yeSBi YXJyaWVyLCBmaW5pc2ggQVJNIFNEUi9ERFIKLQlub3AKLQlub3AKLQlsZHIJcjYsIG9tYXAyNDN4 X3Nyc19zZHJjX3Jmcl9jdHJsCUAgZ2V0IGFkZHIgb2YgcmVmcmVzaCByZWcKLQlsZHIJcjUsIFty Nl0JCUAgZ2V0IHZhbHVlCi0JbW92CXI1LCByNSwgbHNyICM4CQlAIGlzb2xhdGUgcmZyIGZpZWxk IGFuZCBkcm9wIGJ1cnN0Ci0KLQljbXAJcjAsICMweDEJCUAgZ29pbmcgdG8gaGFsZiBzcGVlZD8K LQltb3ZuZQlyOSwgIzB4MAkJQCBpZiB1cCBzZXQgZmxhZyB1cCBmb3IgcHJlIHVwLCBoaSB2b2x0 Ci0KLQlibG5lCXZvbHRhZ2Vfc2hpZnRfYwkJQCBhZGp1c3Qgdm9sdGFnZQotCi0JY21wCXIwLCAj MHgxCQlAIGdvaW5nIHRvIGhhbGYgc3BlZWQgKHBvc3QgYnJhbmNoIGxpbmspCi0JbW92ZXEJcjUs IHI1LCBsc3IgIzEJCUAgZGl2aWRlIGJ5IDIgaWYgdG8gaGFsZgotCW1vdm5lCXI1LCByNSwgbHNs ICMxCQlAIG11bHQgYnkgMiBpZiB0byBmdWxsCi0JbW92CXI1LCByNSwgbHNsICM4CQlAIHB1dCBy ZnIgZmllbGQgYmFjayBpbnRvIHBsYWNlCi0JYWRkCXI1LCByNSwgIzB4MQkJQCB0dXJuIG9uIGJ1 cnN0IG9mIDEKLQlsZHIJcjQsIG9tYXAyNDN4X3Nyc19jbV9jbGtzZWwyX3BsbAlAIGdldCBhZGRy ZXNzIG9mIG91dCByZWcKLQlsZHIJcjMsIFtyNF0JCUAgZ2V0IGN1cnIgdmFsdWUKLQlvcnIJcjMs IHIzLCAjMHgzCi0JYmljCXIzLCByMywgIzB4MwkJQCBjbGVhciBsb3dlciBiaXRzCi0Jb3JyCXIz LCByMywgcjAJCUAgbmV3IHN0YXRlIHZhbHVlCi0Jc3RyCXIzLCBbcjRdCQlAIHNldCBuZXcgc3Rh dGUgKHBsbC94LCB4PTEgb3IgMikKLQlub3AKLQlub3AKLQotCW1vdmVxCXI5LCAjMHgxCQlAIGlm IHNwZWVkIGRvd24sIHBvc3QgZG93biwgZHJvcCB2b2x0Ci0JYmxlcQl2b2x0YWdlX3NoaWZ0X2MK LQotCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIKLQlzdHIJcjUs IFtyNl0JCUAgc2V0IG5ldyBSRlJfMSB2YWx1ZQotCWFkZAlyNiwgcjYsICMweDMwCQlAIGdldCBS RlJfMiBhZGRyCi0Jc3RyCXI1LCBbcjZdCQlAIHNldCBSRlJfMgotCW5vcAotCWNtcAlyMiwgIzB4 MQkJQCAoU0RSIG9yIEREUikgZG8gd2UgbmVlZCB0byBhZGp1c3QgRExMCi0JYm5lCWZyZXFfb3V0 CQlAIGxlYXZlIGlmIFNEUiwgbm8gRExMIGZ1bmN0aW9uCi0KLQkvKiBXaXRoIEREUiwgd2UgbmVl ZCB0byB0YWtlIGNhcmUgb2YgdGhlIERMTCBmb3IgdGhlIGZyZXF1ZW5jeSBjaGFuZ2UgKi8KLQls ZHIJcjIsIG9tYXAyNDN4X3Nyc19zZHJjX2RsbGFfY3RybAlAIGFkZHIgb2YgZGxsYSBjdHJsCi0J c3RyCXIxLCBbcjJdCQlAIHdyaXRlIG91dCBuZXcgU0RSQ19ETExBX0NUUkwKLQlhZGQJcjIsIHIy LCAjMHg4CQlAIGFkZHIgdG8gU0RSQ19ETExCX0NUUkwKLQlzdHIJcjEsIFtyMl0JCUAgY29tbWl0 IHRvIFNEUkNfRExMQl9DVFJMCi0JbW92CXIxLCAjMHgyMDAwCQlAIHdhaXQgRExMIHJlbG9jaywg bWluIDB4NDAwIEwzIGNsb2NrcwotZGxsX3dhaXQ6Ci0Jc3VicwlyMSwgcjEsICMweDEKLQlibmUJ ZGxsX3dhaXQKLWZyZXFfb3V0OgotCWxkbWZkCXNwISwge3IwIC0gcjEwLCBwY30JQCByZXN0b3Jl IHJlZ3MgYW5kIHJldHVybgotCi0gICAgLyoKLSAgICAgKiBzaGlmdCB1cCBvciBkb3duIHZvbHRh Z2UsIHVzZSBSOSBhcyBpbnB1dCB0byB0ZWxsIGxldmVsLgotICAgICAqCXdhaXQgZm9yIGl0IHRv IGZpbmlzaCwgdXNlIDMyayBzeW5jIGNvdW50ZXIsIDF0aWNrPTMxdVMuCi0gICAgICovCi12b2x0 YWdlX3NoaWZ0X2M6Ci0JbGRyCXIxMCwgb21hcDI0M3hfc3JzX3ByY21fdm9sdGN0cmwJQCBnZXQg YWRkciBvZiB2b2x0IGN0cmwKLQlsZHIJcjgsIFtyMTBdCQlAIGdldCB2YWx1ZQotCWxkcglyNywg ZGRyX3ByY21fbWFza192YWwJQCBnZXQgdmFsdWUgb2YgbWFzawotCWFuZAlyOCwgcjgsIHI3CQlA IGFwcGx5IG1hc2sgdG8gY2xlYXIgYml0cwotCW9ycglyOCwgcjgsIHI5CQlAIGJ1bGxkIHZhbHVl IGZvciBMMC9MMS12b2x0IG9wZXJhdGlvbi4KLQlzdHIJcjgsIFtyMTBdCQlAIHNldCB1cCBmb3Ig Y2hhbmdlLgotCW1vdglyNywgIzB4NDAwMAkJQCBnZXQgdmFsIGZvciBmb3JjZQotCW9ycglyOCwg cjgsIHI3CQlAIGJ1aWxkIHZhbHVlIGZvciBmb3JjZQotCXN0cglyOCwgW3IxMF0JCUAgRm9yY2Ug dHJhbnNpdGlvbiB0byBMMQotCi0JbGRyCXIxMCwgb21hcDI0M3hfc3JzX3RpbWVyXzMya3N5bmN0 CUAgZ2V0IGFkZHIgb2YgY291bnRlcgotCWxkcglyOCwgW3IxMF0JCUAgZ2V0IHZhbHVlCi0JYWRk CXI4LCByOCwgIzB4MgkJQCBnaXZlIGl0IGF0IG1vc3QgNjJ1UyAobWluIDMxKykKLXZvbHRfZGVs YXlfYzoKLQlsZHIJcjcsIFtyMTBdCQlAIGdldCB0aW1lciB2YWx1ZQotCWNtcAlyOCwgcjcJCQlA IHRpbWUgdXA/Ci0JYmhpCXZvbHRfZGVsYXlfYwkJQCBub3QgeWV0LT5icmFuY2gKLQlyZXQJbHIJ CQlAIGJhY2sgdG8gY2FsbGVyCi0KLW9tYXAyNDN4X3Nyc19jbV9jbGtzZWwyX3BsbDoKLQkud29y ZCBPTUFQMjQzMF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDIpCi1vbWFwMjQzeF9zcnNf c2RyY19kbGxhX2N0cmw6Ci0JLndvcmQgT01BUDI0M1hfU0RSQ19SRUdBRERSKFNEUkNfRExMQV9D VFJMKQotb21hcDI0M3hfc3JzX3NkcmNfcmZyX2N0cmw6Ci0JLndvcmQgT01BUDI0M1hfU0RSQ19S RUdBRERSKFNEUkNfUkZSX0NUUkxfMCkKLW9tYXAyNDN4X3Nyc19wcmNtX3ZvbHRjdHJsOgotCS53 b3JkIE9NQVAyNDMwX1BSQ01fVk9MVENUUkwKLWRkcl9wcmNtX21hc2tfdmFsOgotCS53b3JkIDB4 RkZGRjNGRkMKLW9tYXAyNDN4X3Nyc190aW1lcl8zMmtzeW5jdDoKLQkud29yZCBPTUFQMl9MNF9J T19BRERSRVNTKE9NQVAyNDMwXzMyS1NZTkNUX0JBU0UgKyAweDAxMCkKLQotRU5UUlkob21hcDI0 M3hfc3JhbV9yZXByb2dyYW1fc2RyY19zeikKLQkud29yZAkuIC0gb21hcDI0M3hfc3JhbV9yZXBy b2dyYW1fc2RyYwotCi0vKgotICogU2V0IGRpdmlkZXJzIGFuZCBwbGwuIEFsc28gcmVjYWxjdWxh dGUgRExMIHZhbHVlIGZvciBERFIgYW5kIHVubG9jayBtb2RlLgotICovCi0JLmFsaWduCTMKLUVO VFJZKG9tYXAyNDN4X3NyYW1fc2V0X3ByY20pCi0Jc3RtZmQJc3AhLCB7cjAtcjEyLCBscn0JQCBy ZWdzIHRvIHN0YWNrCi0JYWRyCXI0LCBwYmVnaW4JCUAgYWRkciBvZiBwcmVsb2FkIHN0YXJ0Ci0J YWRyCXI4LCBwZW5kCQlAIGFkZHIgb2YgcHJlbG9hZCBlbmQKLQltY3JyCXAxNSwgMSwgcjgsIHI0 LCBjMTIJQCBwcmVsb2FkIGludG8gaWNhY2hlCi1wYmVnaW46Ci0JLyogbW92ZSBpbnRvIGZhc3Qg cmVsb2NrIGJ5cGFzcyAqLwotCWxkcglyOCwgb21hcDI0M3hfc3NwX3BsbF9jdGwJQCBnZXQgYWRk cgotCWxkcglyNSwgW3I4XQkJQCBnZXQgdmFsCi0JbXZuCXI2LCAjMHgzCQlAIGNsZWFyIG1hc2sK LQlhbmQJcjUsIHI1LCByNgkJQCBjbGVhciBmaWVsZAotCW9ycglyNywgcjUsICMweDIJCUAgZmFz dCByZWxvY2sgdmFsCi0Jc3RyCXI3LCBbcjhdCQlAIGdvIHRvIGZhc3QgcmVsb2NrCi0JbGRyCXI0 LCBvbWFwMjQzeF9zc3BfcGxsX3N0YXQJQCBhZGRyIG9mIHN0YXQKLWJsb2NrOgotCS8qIHdhaXQg Zm9yIGJ5cGFzcyAqLwotCWxkcglyOCwgW3I0XQkJQCBzdGF0IHZhbHVlCi0JYW5kCXI4LCByOCwg IzB4MwkJQCBtYXNrIGZvciBzdGF0Ci0JY21wCXI4LCAjMHgxCQlAIHRoZXJlIHlldAotCWJuZQli bG9jawkJCUAgbG9vcCBpZiBub3QKLQotCS8qIHNldCBuZXcgZHBsbCBkaXZpZGVycyBfYWZ0ZXJf IGluIGJ5cGFzcyAqLwotCWxkcglyNCwgb21hcDI0M3hfc3NwX3BsbF9kaXYJQCBnZXQgYWRkcgot CXN0cglyMCwgW3I0XQkJQCBzZXQgZHBsbCBjdHJsIHZhbAotCi0JbGRyCXI0LCBvbWFwMjQzeF9z c3Bfc2V0X2NvbmZpZwlAIGdldCBhZGRyCi0JbW92CXI4LCAjMQkJCUAgdmFsaWQgY2ZnIG1zawot CXN0cglyOCwgW3I0XQkJQCBtYWtlIGRpdmlkZXJzIHRha2UKLQotCW1vdglyNCwgIzEwMAkJQCBk ZWFkIHNwaW4gYSBiaXQKLXdhaXRfYV9iaXQ6Ci0Jc3VicwlyNCwgcjQsICMxCQlAIGRlYyBsb29w Ci0JYm5lCXdhaXRfYV9iaXQJCUAgZGVsYXkgZG9uZT8KLQotCS8qIGNoZWNrIGlmIHN0YXlpbmcg aW4gYnlwYXNzICovCi0JY21wCXIyLCAjMHgxCQlAIHN0YXkgaW4gYnlwYXNzPwotCWJlcQlwZW5k CQkJQCBqdW1wIG92ZXIgZHBsbCByZWxvY2sKLQotCS8qIHJlbG9jayBEUExMIHdpdGggbmV3IHZh bHMgKi8KLQlsZHIJcjUsIG9tYXAyNDN4X3NzcF9wbGxfc3RhdAlAIGdldCBhZGRyCi0JbGRyCXI0 LCBvbWFwMjQzeF9zc3BfcGxsX2N0bAlAIGdldCBhZGRyCi0Jb3JyCXI4LCByNywgIzB4MwkJQCB2 YWwgZm9yIGxvY2sgZHBsbAotCXN0cglyOCwgW3I0XQkJQCBzZXQgdmFsCi0JbW92CXIwLCAjMTAw MAkJQCBkZWFkIHNwaW4gYSBiaXQKLXdhaXRfbW9yZToKLQlzdWJzCXIwLCByMCwgIzEJCUAgZGVj IGxvb3AKLQlibmUJd2FpdF9tb3JlCQlAIGRlbGF5IGRvbmU/Ci13YWl0X2xvY2s6Ci0JbGRyCXI4 LCBbcjVdCQlAIGdldCBsb2NrIHZhbAotCWFuZAlyOCwgcjgsICMzCQlAIGlzb2xhdGUgZmllbGQK LQljbXAJcjgsICMyCQkJQCBsb2NrZWQ/Ci0JYm5lCXdhaXRfbG9jawkJQCB3YWl0IGlmIG5vdAot cGVuZDoKLQkvKiB1cGRhdGUgbWVtb3J5IHRpbWluZ3MgJiBicmllZmx5IGxvY2sgZGxsICovCi0J bGRyCXI0LCBvbWFwMjQzeF9zc3Bfc2RyY19yZnIJQCBnZXQgYWRkcgotCXN0cglyMSwgW3I0XQkJ QCB1cGRhdGUgcmVmcmVzaCB0aW1pbmcKLQlsZHIJcjExLCBvbWFwMjQzeF9zc3BfZGxsYV9jdHJs CUAgZ2V0IGFkZHIgb2YgRExMQSBjdHJsCi0JbGRyCXIxMCwgW3IxMV0JCUAgZ2V0IGN1cnJlbnQg dmFsCi0JbXZuCXI5LCAjMHg0CQlAIG1hc2sgdG8gZ2V0IGNsZWFyIGJpdDIKLQlhbmQJcjEwLCBy MTAsIHI5CQlAIGNsZWFyIGJpdDIgZm9yIGxvY2sgbW9kZQotCW9ycglyMTAsIHIxMCwgIzB4OAkJ QCBtYWtlIHN1cmUgRExMIG9uIChlczIgYml0IHBvcykKLQlzdHIJcjEwLCBbcjExXQkJQCBjb21t aXQgdG8gRExMQV9DVFJMCi0JYWRkCXIxMSwgcjExLCAjMHg4CQlAIG1vdmUgdG8gZGxsYgotCXN0 cglyMTAsIFtyMTFdCQlAIGhpdCBETExCIGFsc28KLQotCW1vdglyNCwgIzB4ODAwCQlAIHJlbG9j ayB0aW1lIChtaW4gMHg0MDAgTDMgY2xvY2tzKQotd2FpdF9kbGxfbG9jazoKLQlzdWJzCXI0LCBy NCwgIzB4MQotCWJuZQl3YWl0X2RsbF9sb2NrCi0Jbm9wCi0JbGRtZmQJc3AhLCB7cjAtcjEyLCBw Y30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgotCi1vbWFwMjQzeF9zc3Bfc2V0X2NvbmZpZzoK LQkud29yZCBPTUFQMjQzMF9QUkNNX0NMS0NGR19DVFJMCi1vbWFwMjQzeF9zc3BfcGxsX2N0bDoK LQkud29yZCBPTUFQMjQzMF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKQotb21hcDI0M3hf c3NwX3BsbF9zdGF0OgotCS53b3JkIE9NQVAyNDMwX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURM RVNUKQotb21hcDI0M3hfc3NwX3BsbF9kaXY6Ci0JLndvcmQgT01BUDI0MzBfQ01fUkVHQUREUihQ TExfTU9ELCBDTV9DTEtTRUwxKQotb21hcDI0M3hfc3NwX3NkcmNfcmZyOgotCS53b3JkIE9NQVAy NDNYX1NEUkNfUkVHQUREUihTRFJDX1JGUl9DVFJMXzApCi1vbWFwMjQzeF9zc3BfZGxsYV9jdHJs OgotCS53b3JkIE9NQVAyNDNYX1NEUkNfUkVHQUREUihTRFJDX0RMTEFfQ1RSTCkKLQotRU5UUlko b21hcDI0M3hfc3JhbV9zZXRfcHJjbV9zeikKLQkud29yZAkuIC0gb21hcDI0M3hfc3JhbV9zZXRf cHJjbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItdHVzYjYwMTAuYyBiL2Fy Y2gvYXJtL21hY2gtb21hcDIvdXNiLXR1c2I2MDEwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGI0NmMyNTRjMmJjNC4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21h cDIvdXNiLXR1c2I2MDEwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIGxpbnV4L2FyY2gvYXJt L21hY2gtb21hcDIvdXNiLXR1c2I2MDEwLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9r aWEgQ29ycG9yYXRpb24KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8 bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51 eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxh dGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Ci0jaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGF0YS91c2Itb21hcC5oPgotCi0jaW5jbHVkZSA8bGludXgvdXNiL211c2Iu aD4KLQotI2luY2x1ZGUgInVzYi10dXNiNjAxMC5oIgotI2luY2x1ZGUgImdwbWMuaCIKLQotc3Rh dGljIHU4CQlhc3luY19jcywgc3luY19jczsKLXN0YXRpYyB1bnNpZ25lZAkJcmVmY2xrX3BzZWM7 Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3BtY19zZXR0aW5ncyB0dXNiX2FzeW5jID0gewotCS53YWl0X29u X3JlYWQJPSB0cnVlLAotCS53YWl0X29uX3dyaXRlCT0gdHJ1ZSwKLQkuZGV2aWNlX3dpZHRoCT0g R1BNQ19ERVZXSURUSF8xNkJJVCwKLQkubXV4X2FkZF9kYXRhCT0gR1BNQ19NVVhfQUQsCi19Owot Ci1zdGF0aWMgc3RydWN0IGdwbWNfc2V0dGluZ3MgdHVzYl9zeW5jID0gewotCS5idXJzdF9yZWFk CT0gdHJ1ZSwKLQkuYnVyc3Rfd3JpdGUJPSB0cnVlLAotCS5zeW5jX3JlYWQJPSB0cnVlLAotCS5z eW5jX3dyaXRlCT0gdHJ1ZSwKLQkud2FpdF9vbl9yZWFkCT0gdHJ1ZSwKLQkud2FpdF9vbl93cml0 ZQk9IHRydWUsCi0JLmJ1cnN0X2xlbgk9IEdQTUNfQlVSU1RfMTYsCi0JLmRldmljZV93aWR0aAk9 IEdQTUNfREVWV0lEVEhfMTZCSVQsCi0JLm11eF9hZGRfZGF0YQk9IEdQTUNfTVVYX0FELAotfTsK LQotLyogTk9URTogIHRpbWluZ3MgYXJlIGZyb20gdHVzYiA2MDEwIGRhdGFzaGVldCBSZXYgMS44 LCAxMi1TZXB0IDIwMDYgKi8KLQotc3RhdGljIGludCB0dXNiX3NldF9hc3luY19tb2RlKHVuc2ln bmVkIHN5c2Nsa19wcykKLXsKLQlzdHJ1Y3QgZ3BtY19kZXZpY2VfdGltaW5ncyBkZXZfdDsKLQlz dHJ1Y3QgZ3BtY190aW1pbmdzCXQ7Ci0JdW5zaWduZWQJCXRfYWNzbmhfYWR2bmggPSBzeXNjbGtf cHMgKyAzMDAwOwotCi0JbWVtc2V0KCZkZXZfdCwgMCwgc2l6ZW9mKGRldl90KSk7Ci0KLQlkZXZf dC50X2NlYXN1ID0gOCAqIDEwMDA7Ci0JZGV2X3QudF9hdmRhc3UgPSB0X2Fjc25oX2Fkdm5oIC0g NzAwMDsKLQlkZXZfdC50X2NlX2F2ZCA9IDEwMDA7Ci0JZGV2X3QudF9hdmRwX3IgPSB0X2Fjc25o X2Fkdm5oOwotCWRldl90LnRfb2Vhc3UgPSB0X2Fjc25oX2Fkdm5oICsgMTAwMDsKLQlkZXZfdC50 X29lID0gMzAwOwotCWRldl90LnRfY2V6X3IgPSA3MDAwOwotCWRldl90LnRfY2V6X3cgPSBkZXZf dC50X2Nlel9yOwotCWRldl90LnRfYXZkcF93ID0gdF9hY3NuaF9hZHZuaDsKLQlkZXZfdC50X3dl YXN1ID0gdF9hY3NuaF9hZHZuaCArIDEwMDA7Ci0JZGV2X3QudF93cGwgPSAzMDA7Ci0JZGV2X3Qu Y3ljX2FhdmRoX3dlID0gMTsKLQotCWdwbWNfY2FsY190aW1pbmdzKCZ0LCAmdHVzYl9hc3luYywg JmRldl90KTsKLQotCXJldHVybiBncG1jX2NzX3NldF90aW1pbmdzKGFzeW5jX2NzLCAmdCwgJnR1 c2JfYXN5bmMpOwotfQotCi1zdGF0aWMgaW50IHR1c2Jfc2V0X3N5bmNfbW9kZSh1bnNpZ25lZCBz eXNjbGtfcHMpCi17Ci0Jc3RydWN0IGdwbWNfZGV2aWNlX3RpbWluZ3MgZGV2X3Q7Ci0Jc3RydWN0 IGdwbWNfdGltaW5ncwl0OwotCXVuc2lnbmVkCQl0X3Njc25oX2Fkdm5oID0gc3lzY2xrX3BzICsg MzAwMDsKLQotCW1lbXNldCgmZGV2X3QsIDAsIHNpemVvZihkZXZfdCkpOwotCi0JZGV2X3QuY2xr ID0gMTExMDA7Ci0JZGV2X3QudF9iYWNjID0gMTAwMDsKLQlkZXZfdC50X2NlcyA9IDEwMDA7Ci0J ZGV2X3QudF9jZWFzdSA9IDggKiAxMDAwOwotCWRldl90LnRfYXZkYXN1ID0gdF9zY3NuaF9hZHZu aCAtIDcwMDA7Ci0JZGV2X3QudF9jZV9hdmQgPSAxMDAwOwotCWRldl90LnRfYXZkcF9yID0gdF9z Y3NuaF9hZHZuaDsKLQlkZXZfdC5jeWNfYWF2ZGhfb2UgPSAzOwotCWRldl90LmN5Y19vZSA9IDU7 Ci0JZGV2X3QudF9jZV9yZHl6ID0gNzAwMDsKLQlkZXZfdC50X2F2ZHBfdyA9IHRfc2NzbmhfYWR2 bmg7Ci0JZGV2X3QuY3ljX2FhdmRoX3dlID0gMzsKLQlkZXZfdC5jeWNfd3BsID0gNjsKLQotCWdw bWNfY2FsY190aW1pbmdzKCZ0LCAmdHVzYl9zeW5jLCAmZGV2X3QpOwotCi0JcmV0dXJuIGdwbWNf Y3Nfc2V0X3RpbWluZ3Moc3luY19jcywgJnQsICZ0dXNiX3N5bmMpOwotfQotCi0vKiB0dXNiIGRy aXZlciBjYWxscyB0aGlzIHdoZW4gaXQgY2hhbmdlcyB0aGUgY2hpcCdzIGNsb2NraW5nICovCi1z dGF0aWMgaW50IHR1c2I2MDEwX3BsYXRmb3JtX3JldGltZSh1bnNpZ25lZCBpc19yZWZjbGspCi17 Ci0Jc3RhdGljIGNvbnN0IGNoYXIJZXJyb3JbXSA9Ci0JCUtFUk5fRVJSICJ0dXNiNjAxMCAlcyBy ZXRpbWUgZXJyb3IgJWRcbiI7Ci0KLQl1bnNpZ25lZAlzeXNjbGtfcHM7Ci0JaW50CQlzdGF0dXM7 Ci0KLQlpZiAoIXJlZmNsa19wc2VjKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXN5c2Nsa19wcyA9 IGlzX3JlZmNsayA/IHJlZmNsa19wc2VjIDogVFVTQjYwMTBfT1NDQ0xLXzYwOwotCi0Jc3RhdHVz ID0gdHVzYl9zZXRfYXN5bmNfbW9kZShzeXNjbGtfcHMpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0J CXByaW50ayhlcnJvciwgImFzeW5jIiwgc3RhdHVzKTsKLQkJZ290byBkb25lOwotCX0KLQlzdGF0 dXMgPSB0dXNiX3NldF9zeW5jX21vZGUoc3lzY2xrX3BzKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJ cHJpbnRrKGVycm9yLCAic3luYyIsIHN0YXR1cyk7Ci1kb25lOgotCXJldHVybiBzdGF0dXM7Ci19 Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHVzYl9yZXNvdXJjZXNbXSA9IHsKLQkvKiBPcmRl ciBpcyBzaWduaWZpY2FudCEgIFRoZSBzdGFydC9lbmQgZmllbGRzCi0JICogYXJlIHVwZGF0ZWQg ZHVyaW5nIHNldHVwLi4KLQkgKi8KLQl7IC8qIEFzeW5jaHJvbm91cyBhY2Nlc3MgKi8KLQkJLmZs YWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7IC8qIFN5bmNocm9ub3VzIGFjY2VzcyAqLwot CQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHU2NCB0dXNiX2Rt YW1hc2sgPSB+KHUzMikwOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0dXNiX2Rl dmljZSA9IHsKLQkubmFtZQkJPSAibXVzYi10dXNiIiwKLQkuaWQJCT0gLTEsCi0JLmRldiA9IHsK LQkJLmRtYV9tYXNrCQk9ICZ0dXNiX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4 ZmZmZmZmZmYsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHVzYl9yZXNvdXJj ZXMpLAotCS5yZXNvdXJjZQk9IHR1c2JfcmVzb3VyY2VzLAotfTsKLQotCi0vKiB0aGlzIG1heSBi ZSBjYWxsZWQgb25seSBmcm9tIGJvYXJkLSouYyBzZXR1cCBjb2RlICovCi1pbnQgX19pbml0IHR1 c2I2MDEwX3NldHVwX2ludGVyZmFjZShzdHJ1Y3QgbXVzYl9oZHJjX3BsYXRmb3JtX2RhdGEgKmRh dGEsCi0JCXVuc2lnbmVkIGludCBwc19yZWZjbGssIHVuc2lnbmVkIGludCB3YWl0cGluLAotCQl1 bnNpZ25lZCBpbnQgYXN5bmMsIHVuc2lnbmVkIGludCBzeW5jLAotCQl1bnNpZ25lZCBpbnQgZG1h Y2hhbikKLXsKLQlpbnQJCXN0YXR1czsKLQlzdGF0aWMgY2hhcgllcnJvcltdIF9faW5pdGRhdGEg PQotCQlLRVJOX0VSUiAidHVzYjYwMTAgaW5pdCBlcnJvciAlZCwgJWRcbiI7Ci0KLQkvKiBBU1lO QyByZWdpb24sIHByaW1hcmlseSBmb3IgUElPICovCi0Jc3RhdHVzID0gZ3BtY19jc19yZXF1ZXN0 KGFzeW5jLCBTWl8xNk0sICh1bnNpZ25lZCBsb25nICopCi0JCQkJJnR1c2JfcmVzb3VyY2VzWzBd LnN0YXJ0KTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcmludGsoZXJyb3IsIDEsIHN0YXR1cyk7 Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCXR1c2JfcmVzb3VyY2VzWzBdLmVuZCA9IHR1c2JfcmVz b3VyY2VzWzBdLnN0YXJ0ICsgMHg5ZmY7Ci0JdHVzYl9hc3luYy53YWl0X3BpbiA9IHdhaXRwaW47 Ci0JYXN5bmNfY3MgPSBhc3luYzsKLQotCXN0YXR1cyA9IGdwbWNfY3NfcHJvZ3JhbV9zZXR0aW5n cyhhc3luY19jcywgJnR1c2JfYXN5bmMpOwotCWlmIChzdGF0dXMgPCAwKQotCQlyZXR1cm4gc3Rh dHVzOwotCi0JLyogU1lOQyByZWdpb24sIHByaW1hcmlseSBmb3IgRE1BICovCi0Jc3RhdHVzID0g Z3BtY19jc19yZXF1ZXN0KHN5bmMsIFNaXzE2TSwgKHVuc2lnbmVkIGxvbmcgKikKLQkJCQkmdHVz Yl9yZXNvdXJjZXNbMV0uc3RhcnQpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCXByaW50ayhlcnJv ciwgMiwgc3RhdHVzKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0JdHVzYl9yZXNvdXJjZXNbMV0u ZW5kID0gdHVzYl9yZXNvdXJjZXNbMV0uc3RhcnQgKyAweDlmZjsKLQl0dXNiX3N5bmMud2FpdF9w aW4gPSB3YWl0cGluOwotCXN5bmNfY3MgPSBzeW5jOwotCi0Jc3RhdHVzID0gZ3BtY19jc19wcm9n cmFtX3NldHRpbmdzKHN5bmNfY3MsICZ0dXNiX3N5bmMpOwotCWlmIChzdGF0dXMgPCAwKQotCQly ZXR1cm4gc3RhdHVzOwotCi0JLyogc2V0IHVwIG1lbW9yeSB0aW1pbmdzIC4uLiBjYW4gc3BlZWQg dGhlbSB1cCBsYXRlciAqLwotCWlmICghcHNfcmVmY2xrKSB7Ci0JCXByaW50ayhlcnJvciwgNCwg c3RhdHVzKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJlZmNsa19wc2VjID0gcHNfcmVmY2xr OwotCXN0YXR1cyA9IHR1c2I2MDEwX3BsYXRmb3JtX3JldGltZSgxKTsKLQlpZiAoc3RhdHVzIDwg MCkgewotCQlwcmludGsoZXJyb3IsIDUsIHN0YXR1cyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQot Ci0JLyogZmluaXNoIGRldmljZSBzZXR1cCAuLi4gKi8KLQlpZiAoIWRhdGEpIHsKLQkJcHJpbnRr KGVycm9yLCA2LCBzdGF0dXMpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JdHVzYl9kZXZpY2Uu ZGV2LnBsYXRmb3JtX2RhdGEgPSBkYXRhOwotCi0JLyogc28gZmFyIHNvIGdvb2QgLi4uIHJlZ2lz dGVyIHRoZSBkZXZpY2UgKi8KLQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnR1 c2JfZGV2aWNlKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlwcmludGsoZXJyb3IsIDcsIHN0YXR1 cyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJj aC9hcm0vbWFjaC1vbWFwMi91c2ItdHVzYjYwMTAuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNi LXR1c2I2MDEwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMTBmZjYyMzhjMi4u MDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLXR1c2I2MDEwLmgKKysr IC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCAqLwotCi0jaWZuZGVmIF9fVVNCX1RVU0I2MDEwX0gKLSNkZWZpbmUgX19VU0JfVFVT QjYwMTBfSAotCi1leHRlcm4gaW50IF9faW5pdCB0dXNiNjAxMF9zZXR1cF9pbnRlcmZhY2UoCi0J CXN0cnVjdCBtdXNiX2hkcmNfcGxhdGZvcm1fZGF0YSAqZGF0YSwKLQkJdW5zaWduZWQgaW50IHBz X3JlZmNsaywgdW5zaWduZWQgaW50IHdhaXRwaW4sCi0JCXVuc2lnbmVkIGludCBhc3luY19jcywg dW5zaWduZWQgaW50IHN5bmNfY3MsCi0JCXVuc2lnbmVkIGludCBkbWFjaGFuKTsKLQotI2VuZGlm IC8qIF9fVVNCX1RVU0I2MDEwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIv dm9sdGFnZWRvbWFpbnMyeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdm9sdGFnZWRv bWFpbnMyeHh4X2RhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJjMTE2ZmUz YmE5Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlZG9tYWlu czJ4eHhfZGF0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIE9NQVAzIHZvbHRhZ2UgZG9tYWlu IGRhdGEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4K LSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4K LQotI2luY2x1ZGUgInZvbHRhZ2UuaCIKLQotc3RhdGljIHN0cnVjdCB2b2x0YWdlZG9tYWluIG9t YXAyX3ZvbHRkbV9jb3JlID0gewotCS5uYW1lID0gImNvcmUiLAotfTsKLQotc3RhdGljIHN0cnVj dCB2b2x0YWdlZG9tYWluIG9tYXAyX3ZvbHRkbV93a3VwID0gewotCS5uYW1lID0gIndha2V1cCIs Ci19OwotCi1zdGF0aWMgc3RydWN0IHZvbHRhZ2Vkb21haW4gKnZvbHRhZ2Vkb21haW5zX29tYXAy W10gX19pbml0ZGF0YSA9IHsKLQkmb21hcDJfdm9sdGRtX2NvcmUsCi0JJm9tYXAyX3ZvbHRkbV93 a3VwLAotCU5VTEwsCi19OwotCi12b2lkIF9faW5pdCBvbWFwMnh4eF92b2x0YWdlZG9tYWluc19p bml0KHZvaWQpCi17Ci0Jdm9sdGRtX2luaXQodm9sdGFnZWRvbWFpbnNfb21hcDIpOwotfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vS2NvbmZpZyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcK aW5kZXggMDE4OWRmZGNiYmUxLi5hMzgzZmY4ZjQ0NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5 cHRvL0tjb25maWcKKysrIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwpAQCAtMzM3LDcgKzMzNyw3 IEBAIGNvbmZpZyBDUllQVE9fREVWX09NQVBfU0hBTQogCiBjb25maWcgQ1JZUFRPX0RFVl9PTUFQ X0FFUwogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBPTUFQIEFFUyBodyBlbmdpbmUiCi0JZGVwZW5k cyBvbiBBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQMlBMVVMKKwlkZXBlbmRz IG9uIEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQMlBMVVMKIAlzZWxlY3QgQ1JZUFRPX0FFUwogCXNl bGVjdCBDUllQVE9fU0tDSVBIRVIKIAlzZWxlY3QgQ1JZUFRPX0VOR0lORQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90aS9vbWFwL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3RpL29tYXAvS2NvbmZpZwppbmRleCBhOWRiZTEwOTc3NzUuLmM0MTgxMmIzMjRhZCAx MDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90aS9vbWFwL0tjb25maWcKKysrIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90aS9vbWFwL0tjb25maWcKQEAgLTksOSArOSw5IEBAIGNv bmZpZyBWSURFT19PTUFQMl9WT1VUCiAJZGVwZW5kcyBvbiBWNExfUExBVEZPUk1fRFJJVkVSUwog CWRlcGVuZHMgb24gTU1VCiAJZGVwZW5kcyBvbiBGQl9PTUFQMiB8fCAoQ09NUElMRV9URVNUICYm IEZCX09NQVAyPW4pCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMgfHwgQ09N UElMRV9URVNUCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzIHx8IENPTVBJTEVfVEVTVAogCWRlcGVu ZHMgb24gVklERU9fREVWCiAJc2VsZWN0IFZJREVPQlVGMl9ETUFfQ09OVElHCi0Jc2VsZWN0IE9N QVAyX1ZSRkIgaWYgQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzCisJc2VsZWN0IE9NQVAyX1ZSRkIg aWYgQVJDSF9PTUFQMwogCWhlbHAKIAkgIFY0TDIgRGlzcGxheSBkcml2ZXIgc3VwcG9ydCBmb3Ig T01BUDIvMyBiYXNlZCBib2FyZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL29uZW5h bmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvb25lbmFuZC9LY29uZmlnCmluZGV4IDdkNTc4 MzZiZjMyZi4uOGEzNjJmZDViZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL29uZW5h bmQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9uYW5kL29uZW5hbmQvS2NvbmZpZwpAQCAtMjMs OCArMjMsOCBAQCBjb25maWcgTVREX09ORU5BTkRfR0VORVJJQwogCSAgU3VwcG9ydCBmb3IgT25l TkFORCBmbGFzaCB2aWEgcGxhdGZvcm0gZGV2aWNlIGRyaXZlci4KIAogY29uZmlnIE1URF9PTkVO QU5EX09NQVAyCi0JdHJpc3RhdGUgIk9uZU5BTkQgb24gT01BUDIvT01BUDMgc3VwcG9ydCIKLQlk ZXBlbmRzIG9uIEFSQ0hfT01BUDIgfHwgQVJDSF9PTUFQMyB8fCAoQ09NUElMRV9URVNUICYmIEFS TSkKKwl0cmlzdGF0ZSAiT25lTkFORCBvbiBPTUFQMyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJD SF9PTUFQMyB8fCAoQ09NUElMRV9URVNUICYmIEFSTSkKIAlkZXBlbmRzIG9uIE9GCiAJZGVwZW5k cyBvbiBPTUFQX0dQTUMKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29t YXAyL29tYXBmYi9LY29uZmlnIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9vbWFwZmIvS2Nv bmZpZwppbmRleCAyZDIwZTc5YWRlZmMuLmQ4MjI3ZjQzMjZiZCAxMDA2NDQKLS0tIGEvZHJpdmVy cy92aWRlby9mYmRldi9vbWFwMi9vbWFwZmIvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2Zi ZGV2L29tYXAyL29tYXBmYi9LY29uZmlnCkBAIC04LDcgKzgsNyBAQCBtZW51Y29uZmlnIEZCX09N QVAyCiAJZGVwZW5kcyBvbiBEUk1fT01BUCA9IG4KIAlkZXBlbmRzIG9uIEdQSU9MSUIKIAlzZWxl Y3QgRkJfT01BUDJfRFNTCi0Jc2VsZWN0IE9NQVAyX1ZSRkIgaWYgQVJDSF9PTUFQMiB8fCBBUkNI X09NQVAzCisJc2VsZWN0IE9NQVAyX1ZSRkIgaWYgQVJDSF9PTUFQMwogCXNlbGVjdCBGQl9JT01F TV9IRUxQRVJTCiAJaGVscAogCSAgRnJhbWUgYnVmZmVyIGRyaXZlciBmb3IgT01BUDIrIGJhc2Vk IGJvYXJkcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xrL3RpLmggYi9pbmNsdWRlL2xp bnV4L2Nsay90aS5oCmluZGV4IDU0YTNmYTM3MDAwNC4uY2ExNTExNTJkYTE5IDEwMDY0NAotLS0g YS9pbmNsdWRlL2xpbnV4L2Nsay90aS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xrL3RpLmgKQEAg LTI2NSwxMiArMjY1LDYgQEAgaW50IG9tYXAyX2Nsa19kaXNhYmxlX2F1dG9pZGxlX2FsbCh2b2lk KTsKIGludCBvbWFwMl9jbGtfZW5hYmxlX2F1dG9pZGxlX2FsbCh2b2lkKTsKIGludCBvbWFwMl9j bGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwogaW50IG9tYXAyX2Nsa19kZW55X2lkbGUo c3RydWN0IGNsayAqY2xrKTsKLXVuc2lnbmVkIGxvbmcgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0 cnVjdCBjbGtfaHcgKmh3LAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKTsKLWlu dCBvbWFwMl9yZXByb2dyYW1fZHBsbGNvcmUoc3RydWN0IGNsa19odyAqY2xrLCB1bnNpZ25lZCBs b25nIHJhdGUsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpOwotdm9pZCBvbWFw Mnh4eF9jbGt0X2RwbGxjb3JlX2luaXQoc3RydWN0IGNsa19odyAqaHcpOwotdm9pZCBvbWFwMnh4 eF9jbGt0X3Zwc19pbml0KHZvaWQpOwogdW5zaWduZWQgbG9uZyBvbWFwMl9nZXRfZHBsbF9yYXRl KHN0cnVjdCBjbGtfaHdfb21hcCAqY2xrKTsKIAogdm9pZCB0aV9kdF9jbGtfaW5pdF9yZXRyeV9j bGtzKHZvaWQpOwpAQCAtMzIyLDggKzMxNiw2IEBAIHZvaWQgb21hcDNfbm9uY29yZV9kcGxsX3Jl c3RvcmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodyk7CiBpbnQgb21hcDNfY29yZV9kcGxsX3Nh dmVfY29udGV4dChzdHJ1Y3QgY2xrX2h3ICpodyk7CiB2b2lkIG9tYXAzX2NvcmVfZHBsbF9yZXN0 b3JlX2NvbnRleHQoc3RydWN0IGNsa19odyAqaHcpOwogCi1leHRlcm4gY29uc3Qgc3RydWN0IGNs a19od19vbWFwX29wcyBjbGtod29wc19vbWFwMnh4eF9kcGxsOwotCiAjaWZkZWYgQ09ORklHX0FU QUdTCiBpbnQgb21hcDM0MzBfY2xrX2xlZ2FjeV9pbml0KHZvaWQpOwogaW50IG9tYXAzNDMwZXMx X2Nsa19sZWdhY3lfaW5pdCh2b2lkKTsKLS0gCjIuNTMuMAoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBt YWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1tdGQvCg==