From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 24FDA1719 for ; Thu, 7 Dec 2023 10:31:09 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A5880139F for ; Thu, 7 Dec 2023 10:31:54 -0800 (PST) Received: from e110455-lin.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 855143F762 for ; Thu, 7 Dec 2023 10:31:08 -0800 (PST) Date: Thu, 7 Dec 2023 18:30:57 +0000 From: Liviu Dudau To: Linus Walleij Cc: Mark Rutland , Will Deacon , Russell King , Sudeep Holla , Lorenzo Pieralisi , Lubomir Rintel , Arnd Bergmann , soc@kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v2] ARM: Delete ARM11MPCore (ARM11 ARMv6K SMP) support Message-ID: References: <20231207-drop-11mpcore-v2-1-560b396f3bf5@linaro.org> Precedence: bulk X-Mailing-List: linux-perf-users@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20231207-drop-11mpcore-v2-1-560b396f3bf5@linaro.org> On Thu, Dec 07, 2023 at 02:33:35PM +0100, Linus Walleij wrote: > This ARM11 SMP configuration was one of the first SMP configurations > the ARM kernel supported, but it has the downside of odd DMA handling, > odd cache tagging, and often (as of recent) completely broken cache > handling on the ARM RealView PB11MPCore test chips. To boot the > platform it was necessary to completely disable the cache. > When it comes to the EB 11MPCore it is unclear if this ever worked. > > These reference designs are now the only ARMv6K SMP platforms. > > As only reference designs of purely academic interest remain, and > since the special-cased DMA and PMU code is hard to maintain and > doesn't really work, it is not really worth our time. > > Delete the ARM11MPCore support along with: > > - The special DMA quirk CONFIG_DMA_CACHE_RWFO that is only used > on ARMv6K SMP, and we are the last ARMV6K system leaving the > building and the cache handling is awkward, so good-bye. > > - The special PMU handling that was only used by ARM11MPCore. > > The following is left behind: > > - TIMER_OF_DECLARE(arm_twd_11mp, "arm,arm11mp-twd-timer", ...) > in arch/arm/kernel/smp_twd.c, this is still in use by Marvell MMP3 > arch/arm/boot/dts/marvell/mmp3.dtsi > > - IRQCHIP_DECLARE(arm11mp_gic, "arm,arm11mp-gic", ...) > in drivers/irqchip/irq-gic.c, this is still in use by Marvell MMP3 > arch/arm/boot/dts/marvell/mmp3.dtsi > > - A compatible for the arm11mpcore SCU, since this was mistakedly > used for the Cortex-A9 version of RealView EB. > > These are unfortunate but will need to be kept around for > compatibility. New Marvell-specific compatibles should however probably > be added. I remember seeing a decade ago some evaluation boards with ARM11MPCore but that's as far as I have ever come close to this platform. For what is worth: Acked-by: Liviu Dudau Best regards, Liviu > > Acked-by: Mark Rutland > Reviewed-by: Arnd Bergmann > Signed-off-by: Linus Walleij > --- > Changes in v2: > - Keep the PB11MPCore SCU compatible for a bit (until we delete these > RealView EB device trees). > - Please apply this to the SoC tree once there is consensus. > - Link to v1: https://lore.kernel.org/r/20231204-drop-11mpcore-v1-1-f96cd3938cf1@linaro.org > --- > arch/arm/kernel/perf_event_v6.c | 34 ------------------------------ > arch/arm/mach-versatile/Kconfig | 17 --------------- > arch/arm/mach-versatile/platsmp-realview.c | 6 +++++- > arch/arm/mach-versatile/realview.c | 1 - > arch/arm/mm/Kconfig | 18 ---------------- > arch/arm/mm/cache-v6.S | 31 --------------------------- > 6 files changed, 5 insertions(+), 102 deletions(-) > > diff --git a/arch/arm/kernel/perf_event_v6.c b/arch/arm/kernel/perf_event_v6.c > index 1ae99deeec54..3115077f6abc 100644 > --- a/arch/arm/kernel/perf_event_v6.c > +++ b/arch/arm/kernel/perf_event_v6.c > @@ -525,40 +525,7 @@ static int armv6_1176_pmu_init(struct arm_pmu *cpu_pmu) > return 0; > } > > -/* > - * ARMv6mpcore is almost identical to single core ARMv6 with the exception > - * that some of the events have different enumerations and that there is no > - * *hack* to stop the programmable counters. To stop the counters we simply > - * disable the interrupt reporting and update the event. When unthrottling we > - * reset the period and enable the interrupt reporting. > - */ > - > -static int armv6mpcore_map_event(struct perf_event *event) > -{ > - return armpmu_map_event(event, &armv6mpcore_perf_map, > - &armv6mpcore_perf_cache_map, 0xFF); > -} > - > -static int armv6mpcore_pmu_init(struct arm_pmu *cpu_pmu) > -{ > - cpu_pmu->name = "armv6_11mpcore"; > - cpu_pmu->handle_irq = armv6pmu_handle_irq; > - cpu_pmu->enable = armv6pmu_enable_event; > - cpu_pmu->disable = armv6mpcore_pmu_disable_event; > - cpu_pmu->read_counter = armv6pmu_read_counter; > - cpu_pmu->write_counter = armv6pmu_write_counter; > - cpu_pmu->get_event_idx = armv6pmu_get_event_idx; > - cpu_pmu->clear_event_idx = armv6pmu_clear_event_idx; > - cpu_pmu->start = armv6pmu_start; > - cpu_pmu->stop = armv6pmu_stop; > - cpu_pmu->map_event = armv6mpcore_map_event; > - cpu_pmu->num_events = 3; > - > - return 0; > -} > - > static const struct of_device_id armv6_pmu_of_device_ids[] = { > - {.compatible = "arm,arm11mpcore-pmu", .data = armv6mpcore_pmu_init}, > {.compatible = "arm,arm1176-pmu", .data = armv6_1176_pmu_init}, > {.compatible = "arm,arm1136-pmu", .data = armv6_1136_pmu_init}, > { /* sentinel value */ } > @@ -568,7 +535,6 @@ static const struct pmu_probe_info armv6_pmu_probe_table[] = { > ARM_PMU_PROBE(ARM_CPU_PART_ARM1136, armv6_1136_pmu_init), > ARM_PMU_PROBE(ARM_CPU_PART_ARM1156, armv6_1156_pmu_init), > ARM_PMU_PROBE(ARM_CPU_PART_ARM1176, armv6_1176_pmu_init), > - ARM_PMU_PROBE(ARM_CPU_PART_ARM11MPCORE, armv6mpcore_pmu_init), > { /* sentinel value */ } > }; > > diff --git a/arch/arm/mach-versatile/Kconfig b/arch/arm/mach-versatile/Kconfig > index b1519b4dc03a..e029270c2687 100644 > --- a/arch/arm/mach-versatile/Kconfig > +++ b/arch/arm/mach-versatile/Kconfig > @@ -201,23 +201,6 @@ config REALVIEW_EB_A9MP > Enable support for the Cortex-A9MPCore tile fitted to the > Realview(R) Emulation Baseboard platform. > > -config REALVIEW_EB_ARM11MP > - bool "Support ARM11MPCore Tile" > - depends on MACH_REALVIEW_EB && ARCH_MULTI_V6 > - select HAVE_SMP > - help > - Enable support for the ARM11MPCore tile fitted to the Realview(R) > - Emulation Baseboard platform. > - > -config MACH_REALVIEW_PB11MP > - bool "Support RealView(R) Platform Baseboard for ARM11MPCore" > - depends on ARCH_MULTI_V6 > - select HAVE_SMP > - help > - Include support for the ARM(R) RealView(R) Platform Baseboard for > - the ARM11MPCore. This platform has an on-board ARM11MPCore and has > - support for PCI-E and Compact Flash. > - > # ARMv6 CPU without K extensions, but does have the new exclusive ops > config MACH_REALVIEW_PB1176 > bool "Support RealView(R) Platform Baseboard for ARM1176JZF-S" > diff --git a/arch/arm/mach-versatile/platsmp-realview.c b/arch/arm/mach-versatile/platsmp-realview.c > index 5d363385c801..6965a1de727b 100644 > --- a/arch/arm/mach-versatile/platsmp-realview.c > +++ b/arch/arm/mach-versatile/platsmp-realview.c > @@ -18,6 +18,11 @@ > #define REALVIEW_SYS_FLAGSSET_OFFSET 0x30 > > static const struct of_device_id realview_scu_match[] = { > + /* > + * The ARM11MP SCU compatible is only provided as fallback for > + * old RealView EB Cortex-A9 device trees that were using this > + * compatible by mistake. > + */ > { .compatible = "arm,arm11mp-scu", }, > { .compatible = "arm,cortex-a9-scu", }, > { .compatible = "arm,cortex-a5-scu", }, > @@ -27,7 +32,6 @@ static const struct of_device_id realview_scu_match[] = { > static const struct of_device_id realview_syscon_match[] = { > { .compatible = "arm,core-module-integrator", }, > { .compatible = "arm,realview-eb-syscon", }, > - { .compatible = "arm,realview-pb11mp-syscon", }, > { .compatible = "arm,realview-pbx-syscon", }, > { }, > }; > diff --git a/arch/arm/mach-versatile/realview.c b/arch/arm/mach-versatile/realview.c > index a3933e2373d5..36a6f6bc4fdd 100644 > --- a/arch/arm/mach-versatile/realview.c > +++ b/arch/arm/mach-versatile/realview.c > @@ -9,7 +9,6 @@ > static const char *const realview_dt_platform_compat[] __initconst = { > "arm,realview-eb", > "arm,realview-pb1176", > - "arm,realview-pb11mp", > "arm,realview-pba8", > "arm,realview-pbx", > NULL, > diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig > index c164cde50243..2b6f50dd5478 100644 > --- a/arch/arm/mm/Kconfig > +++ b/arch/arm/mm/Kconfig > @@ -937,24 +937,6 @@ config VDSO > You must have glibc 2.22 or later for programs to seamlessly > take advantage of this. > > -config DMA_CACHE_RWFO > - bool "Enable read/write for ownership DMA cache maintenance" > - depends on CPU_V6K && SMP > - default y > - help > - The Snoop Control Unit on ARM11MPCore does not detect the > - cache maintenance operations and the dma_{map,unmap}_area() > - functions may leave stale cache entries on other CPUs. By > - enabling this option, Read or Write For Ownership in the ARMv6 > - DMA cache maintenance functions is performed. These LDR/STR > - instructions change the cache line state to shared or modified > - so that the cache operation has the desired effect. > - > - Note that the workaround is only valid on processors that do > - not perform speculative loads into the D-cache. For such > - processors, if cache maintenance operations are not broadcast > - in hardware, other workarounds are needed (e.g. cache > - maintenance broadcasting in software via FIQ). > > config OUTER_CACHE > bool > diff --git a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S > index 250c83bf7158..44211d8a296f 100644 > --- a/arch/arm/mm/cache-v6.S > +++ b/arch/arm/mm/cache-v6.S > @@ -201,10 +201,6 @@ ENTRY(v6_flush_kern_dcache_area) > * - end - virtual end address of region > */ > v6_dma_inv_range: > -#ifdef CONFIG_DMA_CACHE_RWFO > - ldrb r2, [r0] @ read for ownership > - strb r2, [r0] @ write for ownership > -#endif > tst r0, #D_CACHE_LINE_SIZE - 1 > bic r0, r0, #D_CACHE_LINE_SIZE - 1 > #ifdef HARVARD_CACHE > @@ -213,10 +209,6 @@ v6_dma_inv_range: > mcrne p15, 0, r0, c7, c11, 1 @ clean unified line > #endif > tst r1, #D_CACHE_LINE_SIZE - 1 > -#ifdef CONFIG_DMA_CACHE_RWFO > - ldrbne r2, [r1, #-1] @ read for ownership > - strbne r2, [r1, #-1] @ write for ownership > -#endif > bic r1, r1, #D_CACHE_LINE_SIZE - 1 > #ifdef HARVARD_CACHE > mcrne p15, 0, r1, c7, c14, 1 @ clean & invalidate D line > @@ -231,10 +223,6 @@ v6_dma_inv_range: > #endif > add r0, r0, #D_CACHE_LINE_SIZE > cmp r0, r1 > -#ifdef CONFIG_DMA_CACHE_RWFO > - ldrlo r2, [r0] @ read for ownership > - strlo r2, [r0] @ write for ownership > -#endif > blo 1b > mov r0, #0 > mcr p15, 0, r0, c7, c10, 4 @ drain write buffer > @@ -248,9 +236,6 @@ v6_dma_inv_range: > v6_dma_clean_range: > bic r0, r0, #D_CACHE_LINE_SIZE - 1 > 1: > -#ifdef CONFIG_DMA_CACHE_RWFO > - ldr r2, [r0] @ read for ownership > -#endif > #ifdef HARVARD_CACHE > mcr p15, 0, r0, c7, c10, 1 @ clean D line > #else > @@ -269,10 +254,6 @@ v6_dma_clean_range: > * - end - virtual end address of region > */ > ENTRY(v6_dma_flush_range) > -#ifdef CONFIG_DMA_CACHE_RWFO > - ldrb r2, [r0] @ read for ownership > - strb r2, [r0] @ write for ownership > -#endif > bic r0, r0, #D_CACHE_LINE_SIZE - 1 > 1: > #ifdef HARVARD_CACHE > @@ -282,10 +263,6 @@ ENTRY(v6_dma_flush_range) > #endif > add r0, r0, #D_CACHE_LINE_SIZE > cmp r0, r1 > -#ifdef CONFIG_DMA_CACHE_RWFO > - ldrblo r2, [r0] @ read for ownership > - strblo r2, [r0] @ write for ownership > -#endif > blo 1b > mov r0, #0 > mcr p15, 0, r0, c7, c10, 4 @ drain write buffer > @@ -301,13 +278,7 @@ ENTRY(v6_dma_map_area) > add r1, r1, r0 > teq r2, #DMA_FROM_DEVICE > beq v6_dma_inv_range > -#ifndef CONFIG_DMA_CACHE_RWFO > b v6_dma_clean_range > -#else > - teq r2, #DMA_TO_DEVICE > - beq v6_dma_clean_range > - b v6_dma_flush_range > -#endif > ENDPROC(v6_dma_map_area) > > /* > @@ -317,11 +288,9 @@ ENDPROC(v6_dma_map_area) > * - dir - DMA direction > */ > ENTRY(v6_dma_unmap_area) > -#ifndef CONFIG_DMA_CACHE_RWFO > add r1, r1, r0 > teq r2, #DMA_TO_DEVICE > bne v6_dma_inv_range > -#endif > ret lr > ENDPROC(v6_dma_unmap_area) > > > --- > base-commit: d570fe67df85c84be7cc33ca9e9568d9601b494f > change-id: 20231202-drop-11mpcore-d556cc5f7d99 > > Best regards, > -- > Linus Walleij > -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ¯\_(ツ)_/¯ 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 CFE45C4167B for ; Thu, 7 Dec 2023 18:31: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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=A1aTHOeQWTrfUY0YV3sfFp+9E5cu6m5bcuaWBuoxnb0=; b=akshXe0u16a5I6 F5u3KnpPZ/xUDMD8YV/rpADxdnqd7JdJS8UFPUi6/C7f+AWnSnqRH5QYvN7pr4j65D8E/Yc4/WXlY FM5efeUVt/2ZFkgcOaIEcZCwAo2Dnv7TvZsqZvSB5Mg9OM62Tox+R0YyIwTvOV4jGQH4bt9VIyaFL 2nu+PuURyl6Clbjt9J7XApkbEz26iRUXQ0sJj/xXCCyJ+cnF1x7WmszFRx7YpatteLwvTLjW6jxlb RZ49FhW3YOHv8ic3YrDcJvrKVf4pMMnlRKppGn5g/s0LoKTNmL/0KQbUn29PNdgNvtAb51eZNX34c yPUHa+l4xUjiIvaz79qQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rBJ9c-00DePd-0Z; Thu, 07 Dec 2023 18:31:20 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rBJ9X-00DeNz-2r for linux-arm-kernel@lists.infradead.org; Thu, 07 Dec 2023 18:31:18 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A602B1595 for ; Thu, 7 Dec 2023 10:31:55 -0800 (PST) Received: from e110455-lin.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 854863F762 for ; Thu, 7 Dec 2023 10:31:09 -0800 (PST) Date: Thu, 7 Dec 2023 18:30:57 +0000 From: Liviu Dudau To: Linus Walleij Cc: Mark Rutland , Will Deacon , Russell King , Sudeep Holla , Lorenzo Pieralisi , Lubomir Rintel , Arnd Bergmann , soc@kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH v2] ARM: Delete ARM11MPCore (ARM11 ARMv6K SMP) support Message-ID: References: <20231207-drop-11mpcore-v2-1-560b396f3bf5@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20231207-drop-11mpcore-v2-1-560b396f3bf5@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231207_103116_042890_325D17D9 X-CRM114-Status: GOOD ( 49.51 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVGh1LCBEZWMgMDcsIDIwMjMgYXQgMDI6MzM6MzVQTSArMDEwMCwgTGludXMgV2FsbGVpaiB3 cm90ZToKPiBUaGlzIEFSTTExIFNNUCBjb25maWd1cmF0aW9uIHdhcyBvbmUgb2YgdGhlIGZpcnN0 IFNNUCBjb25maWd1cmF0aW9ucwo+IHRoZSBBUk0ga2VybmVsIHN1cHBvcnRlZCwgYnV0IGl0IGhh cyB0aGUgZG93bnNpZGUgb2Ygb2RkIERNQSBoYW5kbGluZywKPiBvZGQgY2FjaGUgdGFnZ2luZywg YW5kIG9mdGVuIChhcyBvZiByZWNlbnQpIGNvbXBsZXRlbHkgYnJva2VuIGNhY2hlCj4gaGFuZGxp bmcgb24gdGhlIEFSTSBSZWFsVmlldyBQQjExTVBDb3JlIHRlc3QgY2hpcHMuIFRvIGJvb3QgdGhl Cj4gcGxhdGZvcm0gaXQgd2FzIG5lY2Vzc2FyeSB0byBjb21wbGV0ZWx5IGRpc2FibGUgdGhlIGNh Y2hlLgo+IFdoZW4gaXQgY29tZXMgdG8gdGhlIEVCIDExTVBDb3JlIGl0IGlzIHVuY2xlYXIgaWYg dGhpcyBldmVyIHdvcmtlZC4KPiAKPiBUaGVzZSByZWZlcmVuY2UgZGVzaWducyBhcmUgbm93IHRo ZSBvbmx5IEFSTXY2SyBTTVAgcGxhdGZvcm1zLgo+IAo+IEFzIG9ubHkgcmVmZXJlbmNlIGRlc2ln bnMgb2YgcHVyZWx5IGFjYWRlbWljIGludGVyZXN0IHJlbWFpbiwgYW5kCj4gc2luY2UgdGhlIHNw ZWNpYWwtY2FzZWQgRE1BIGFuZCBQTVUgY29kZSBpcyBoYXJkIHRvIG1haW50YWluIGFuZAo+IGRv ZXNuJ3QgcmVhbGx5IHdvcmssIGl0IGlzIG5vdCByZWFsbHkgd29ydGggb3VyIHRpbWUuCj4gCj4g RGVsZXRlIHRoZSBBUk0xMU1QQ29yZSBzdXBwb3J0IGFsb25nIHdpdGg6Cj4gCj4gLSBUaGUgc3Bl Y2lhbCBETUEgcXVpcmsgQ09ORklHX0RNQV9DQUNIRV9SV0ZPIHRoYXQgaXMgb25seSB1c2VkCj4g ICBvbiBBUk12NksgU01QLCBhbmQgd2UgYXJlIHRoZSBsYXN0IEFSTVY2SyBzeXN0ZW0gbGVhdmlu ZyB0aGUKPiAgIGJ1aWxkaW5nIGFuZCB0aGUgY2FjaGUgaGFuZGxpbmcgaXMgYXdrd2FyZCwgc28g Z29vZC1ieWUuCj4gCj4gLSBUaGUgc3BlY2lhbCBQTVUgaGFuZGxpbmcgdGhhdCB3YXMgb25seSB1 c2VkIGJ5IEFSTTExTVBDb3JlLgo+IAo+IFRoZSBmb2xsb3dpbmcgaXMgbGVmdCBiZWhpbmQ6Cj4g Cj4gLSBUSU1FUl9PRl9ERUNMQVJFKGFybV90d2RfMTFtcCwgImFybSxhcm0xMW1wLXR3ZC10aW1l ciIsIC4uLikKPiAgIGluIGFyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMsIHRoaXMgaXMgc3RpbGwg aW4gdXNlIGJ5IE1hcnZlbGwgTU1QMwo+ICAgYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9tbXAz LmR0c2kKPiAKPiAtIElSUUNISVBfREVDTEFSRShhcm0xMW1wX2dpYywgImFybSxhcm0xMW1wLWdp YyIsIC4uLikKPiAgIGluIGRyaXZlcnMvaXJxY2hpcC9pcnEtZ2ljLmMsIHRoaXMgaXMgc3RpbGwg aW4gdXNlIGJ5IE1hcnZlbGwgTU1QMwo+ICAgYXJjaC9hcm0vYm9vdC9kdHMvbWFydmVsbC9tbXAz LmR0c2kKPiAKPiAtIEEgY29tcGF0aWJsZSBmb3IgdGhlIGFybTExbXBjb3JlIFNDVSwgc2luY2Ug dGhpcyB3YXMgbWlzdGFrZWRseQo+ICAgdXNlZCBmb3IgdGhlIENvcnRleC1BOSB2ZXJzaW9uIG9m IFJlYWxWaWV3IEVCLgo+IAo+IFRoZXNlIGFyZSB1bmZvcnR1bmF0ZSBidXQgd2lsbCBuZWVkIHRv IGJlIGtlcHQgYXJvdW5kIGZvcgo+IGNvbXBhdGliaWxpdHkuIE5ldyBNYXJ2ZWxsLXNwZWNpZmlj IGNvbXBhdGlibGVzIHNob3VsZCBob3dldmVyIHByb2JhYmx5Cj4gYmUgYWRkZWQuCgpJIHJlbWVt YmVyIHNlZWluZyBhIGRlY2FkZSBhZ28gc29tZSBldmFsdWF0aW9uIGJvYXJkcyB3aXRoIEFSTTEx TVBDb3JlCmJ1dCB0aGF0J3MgYXMgZmFyIGFzIEkgaGF2ZSBldmVyIGNvbWUgY2xvc2UgdG8gdGhp cyBwbGF0Zm9ybS4KCkZvciB3aGF0IGlzIHdvcnRoOgoKQWNrZWQtYnk6IExpdml1IER1ZGF1IDxs aXZpdS5kdWRhdUBhcm0uY29tPgoKQmVzdCByZWdhcmRzLApMaXZpdQoKPiAKPiBBY2tlZC1ieTog TWFyayBSdXRsYW5kIDxtYXJrLnJ1dGxhbmRAYXJtLmNvbT4KPiBSZXZpZXdlZC1ieTogQXJuZCBC ZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KPiBTaWduZWQtb2ZmLWJ5OiBMaW51cyBXYWxsZWlqIDxs aW51cy53YWxsZWlqQGxpbmFyby5vcmc+Cj4gLS0tCj4gQ2hhbmdlcyBpbiB2MjoKPiAtIEtlZXAg dGhlIFBCMTFNUENvcmUgU0NVIGNvbXBhdGlibGUgZm9yIGEgYml0ICh1bnRpbCB3ZSBkZWxldGUg dGhlc2UKPiAgIFJlYWxWaWV3IEVCIGRldmljZSB0cmVlcykuCj4gLSBQbGVhc2UgYXBwbHkgdGhp cyB0byB0aGUgU29DIHRyZWUgb25jZSB0aGVyZSBpcyBjb25zZW5zdXMuCj4gLSBMaW5rIHRvIHYx OiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjMxMjA0LWRyb3AtMTFtcGNvcmUtdjEtMS1m OTZjZDM5MzhjZjFAbGluYXJvLm9yZwo+IC0tLQo+ICBhcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVu dF92Ni5jICAgICAgICAgICAgfCAzNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAg YXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZyAgICAgICAgICAgIHwgMTcgLS0tLS0tLS0t LS0tLS0tCj4gIGFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3BsYXRzbXAtcmVhbHZpZXcuYyB8ICA2 ICsrKysrLQo+ICBhcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9yZWFsdmlldy5jICAgICAgICAgfCAg MSAtCj4gIGFyY2gvYXJtL21tL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICB8IDE4IC0t LS0tLS0tLS0tLS0tLS0KPiAgYXJjaC9hcm0vbW0vY2FjaGUtdjYuUyAgICAgICAgICAgICAgICAg ICAgIHwgMzEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDYgZmlsZXMgY2hhbmdlZCwg NSBpbnNlcnRpb25zKCspLCAxMDIgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gv YXJtL2tlcm5lbC9wZXJmX2V2ZW50X3Y2LmMgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudF92 Ni5jCj4gaW5kZXggMWFlOTlkZWVlYzU0Li4zMTE1MDc3ZjZhYmMgMTAwNjQ0Cj4gLS0tIGEvYXJj aC9hcm0va2VybmVsL3BlcmZfZXZlbnRfdjYuYwo+ICsrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJm X2V2ZW50X3Y2LmMKPiBAQCAtNTI1LDQwICs1MjUsNyBAQCBzdGF0aWMgaW50IGFybXY2XzExNzZf cG11X2luaXQoc3RydWN0IGFybV9wbXUgKmNwdV9wbXUpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAK PiAtLyoKPiAtICogQVJNdjZtcGNvcmUgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBzaW5nbGUgY29y ZSBBUk12NiB3aXRoIHRoZSBleGNlcHRpb24KPiAtICogdGhhdCBzb21lIG9mIHRoZSBldmVudHMg aGF2ZSBkaWZmZXJlbnQgZW51bWVyYXRpb25zIGFuZCB0aGF0IHRoZXJlIGlzIG5vCj4gLSAqICpo YWNrKiB0byBzdG9wIHRoZSBwcm9ncmFtbWFibGUgY291bnRlcnMuIFRvIHN0b3AgdGhlIGNvdW50 ZXJzIHdlIHNpbXBseQo+IC0gKiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgcmVwb3J0aW5nIGFuZCB1 cGRhdGUgdGhlIGV2ZW50LiBXaGVuIHVudGhyb3R0bGluZyB3ZQo+IC0gKiByZXNldCB0aGUgcGVy aW9kIGFuZCBlbmFibGUgdGhlIGludGVycnVwdCByZXBvcnRpbmcuCj4gLSAqLwo+IC0KPiAtc3Rh dGljIGludCBhcm12Nm1wY29yZV9tYXBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQo+ IC17Cj4gLQlyZXR1cm4gYXJtcG11X21hcF9ldmVudChldmVudCwgJmFybXY2bXBjb3JlX3BlcmZf bWFwLAo+IC0JCQkJJmFybXY2bXBjb3JlX3BlcmZfY2FjaGVfbWFwLCAweEZGKTsKPiAtfQo+IC0K PiAtc3RhdGljIGludCBhcm12Nm1wY29yZV9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqY3B1X3Bt dSkKPiAtewo+IC0JY3B1X3BtdS0+bmFtZQkJPSAiYXJtdjZfMTFtcGNvcmUiOwo+IC0JY3B1X3Bt dS0+aGFuZGxlX2lycQk9IGFybXY2cG11X2hhbmRsZV9pcnE7Cj4gLQljcHVfcG11LT5lbmFibGUJ CT0gYXJtdjZwbXVfZW5hYmxlX2V2ZW50Owo+IC0JY3B1X3BtdS0+ZGlzYWJsZQk9IGFybXY2bXBj b3JlX3BtdV9kaXNhYmxlX2V2ZW50Owo+IC0JY3B1X3BtdS0+cmVhZF9jb3VudGVyCT0gYXJtdjZw bXVfcmVhZF9jb3VudGVyOwo+IC0JY3B1X3BtdS0+d3JpdGVfY291bnRlcgk9IGFybXY2cG11X3dy aXRlX2NvdW50ZXI7Cj4gLQljcHVfcG11LT5nZXRfZXZlbnRfaWR4CT0gYXJtdjZwbXVfZ2V0X2V2 ZW50X2lkeDsKPiAtCWNwdV9wbXUtPmNsZWFyX2V2ZW50X2lkeCA9IGFybXY2cG11X2NsZWFyX2V2 ZW50X2lkeDsKPiAtCWNwdV9wbXUtPnN0YXJ0CQk9IGFybXY2cG11X3N0YXJ0Owo+IC0JY3B1X3Bt dS0+c3RvcAkJPSBhcm12NnBtdV9zdG9wOwo+IC0JY3B1X3BtdS0+bWFwX2V2ZW50CT0gYXJtdjZt cGNvcmVfbWFwX2V2ZW50Owo+IC0JY3B1X3BtdS0+bnVtX2V2ZW50cwk9IDM7Cj4gLQo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFybXY2 X3BtdV9vZl9kZXZpY2VfaWRzW10gPSB7Cj4gLQl7LmNvbXBhdGlibGUgPSAiYXJtLGFybTExbXBj b3JlLXBtdSIsCS5kYXRhID0gYXJtdjZtcGNvcmVfcG11X2luaXR9LAo+ICAJey5jb21wYXRpYmxl ID0gImFybSxhcm0xMTc2LXBtdSIsCS5kYXRhID0gYXJtdjZfMTE3Nl9wbXVfaW5pdH0sCj4gIAl7 LmNvbXBhdGlibGUgPSAiYXJtLGFybTExMzYtcG11IiwJLmRhdGEgPSBhcm12Nl8xMTM2X3BtdV9p bml0fSwKPiAgCXsgLyogc2VudGluZWwgdmFsdWUgKi8gfQo+IEBAIC01NjgsNyArNTM1LDYgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfcHJvYmVfaW5mbyBhcm12Nl9wbXVfcHJvYmVfdGFibGVb XSA9IHsKPiAgCUFSTV9QTVVfUFJPQkUoQVJNX0NQVV9QQVJUX0FSTTExMzYsIGFybXY2XzExMzZf cG11X2luaXQpLAo+ICAJQVJNX1BNVV9QUk9CRShBUk1fQ1BVX1BBUlRfQVJNMTE1NiwgYXJtdjZf MTE1Nl9wbXVfaW5pdCksCj4gIAlBUk1fUE1VX1BST0JFKEFSTV9DUFVfUEFSVF9BUk0xMTc2LCBh cm12Nl8xMTc2X3BtdV9pbml0KSwKPiAtCUFSTV9QTVVfUFJPQkUoQVJNX0NQVV9QQVJUX0FSTTEx TVBDT1JFLCBhcm12Nm1wY29yZV9wbXVfaW5pdCksCj4gIAl7IC8qIHNlbnRpbmVsIHZhbHVlICov IH0KPiAgfTsKPiAgCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25m aWcgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnCj4gaW5kZXggYjE1MTliNGRjMDNh Li5lMDI5MjcwYzI2ODcgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2Nv bmZpZwo+ICsrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcKPiBAQCAtMjAxLDIz ICsyMDEsNiBAQCBjb25maWcgUkVBTFZJRVdfRUJfQTlNUAo+ICAJICBFbmFibGUgc3VwcG9ydCBm b3IgdGhlIENvcnRleC1BOU1QQ29yZSB0aWxlIGZpdHRlZCB0byB0aGUKPiAgCSAgUmVhbHZpZXco UikgRW11bGF0aW9uIEJhc2Vib2FyZCBwbGF0Zm9ybS4KPiAgCj4gLWNvbmZpZyBSRUFMVklFV19F Ql9BUk0xMU1QCj4gLQlib29sICJTdXBwb3J0IEFSTTExTVBDb3JlIFRpbGUiCj4gLQlkZXBlbmRz IG9uIE1BQ0hfUkVBTFZJRVdfRUIgJiYgQVJDSF9NVUxUSV9WNgo+IC0Jc2VsZWN0IEhBVkVfU01Q Cj4gLQloZWxwCj4gLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQVJNMTFNUENvcmUgdGlsZSBm aXR0ZWQgdG8gdGhlIFJlYWx2aWV3KFIpCj4gLQkgIEVtdWxhdGlvbiBCYXNlYm9hcmQgcGxhdGZv cm0uCj4gLQo+IC1jb25maWcgTUFDSF9SRUFMVklFV19QQjExTVAKPiAtCWJvb2wgIlN1cHBvcnQg UmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBBUk0xMU1QQ29yZSIKPiAtCWRlcGVu ZHMgb24gQVJDSF9NVUxUSV9WNgo+IC0Jc2VsZWN0IEhBVkVfU01QCj4gLQloZWxwCj4gLQkgIElu Y2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9h cmQgZm9yCj4gLQkgIHRoZSBBUk0xMU1QQ29yZS4gIFRoaXMgcGxhdGZvcm0gaGFzIGFuIG9uLWJv YXJkIEFSTTExTVBDb3JlIGFuZCBoYXMKPiAtCSAgc3VwcG9ydCBmb3IgUENJLUUgYW5kIENvbXBh Y3QgRmxhc2guCj4gLQo+ICAjIEFSTXY2IENQVSB3aXRob3V0IEsgZXh0ZW5zaW9ucywgYnV0IGRv ZXMgaGF2ZSB0aGUgbmV3IGV4Y2x1c2l2ZSBvcHMKPiAgY29uZmlnIE1BQ0hfUkVBTFZJRVdfUEIx MTc2Cj4gIAlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZCBmb3Ig QVJNMTE3NkpaRi1TIgo+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wbGF0 c21wLXJlYWx2aWV3LmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wbGF0c21wLXJlYWx2aWV3 LmMKPiBpbmRleCA1ZDM2MzM4NWM4MDEuLjY5NjVhMWRlNzI3YiAxMDA2NDQKPiAtLS0gYS9hcmNo L2FybS9tYWNoLXZlcnNhdGlsZS9wbGF0c21wLXJlYWx2aWV3LmMKPiArKysgYi9hcmNoL2FybS9t YWNoLXZlcnNhdGlsZS9wbGF0c21wLXJlYWx2aWV3LmMKPiBAQCAtMTgsNiArMTgsMTEgQEAKPiAg I2RlZmluZSBSRUFMVklFV19TWVNfRkxBR1NTRVRfT0ZGU0VUCTB4MzAKPiAgCj4gIHN0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJlYWx2aWV3X3NjdV9tYXRjaFtdID0gewo+ICsJLyoK PiArCSAqIFRoZSBBUk0xMU1QIFNDVSBjb21wYXRpYmxlIGlzIG9ubHkgcHJvdmlkZWQgYXMgZmFs bGJhY2sgZm9yCj4gKwkgKiBvbGQgUmVhbFZpZXcgRUIgQ29ydGV4LUE5IGRldmljZSB0cmVlcyB0 aGF0IHdlcmUgdXNpbmcgdGhpcwo+ICsJICogY29tcGF0aWJsZSBieSBtaXN0YWtlLgo+ICsJICov Cj4gIAl7IC5jb21wYXRpYmxlID0gImFybSxhcm0xMW1wLXNjdSIsIH0sCj4gIAl7IC5jb21wYXRp YmxlID0gImFybSxjb3J0ZXgtYTktc2N1IiwgfSwKPiAgCXsgLmNvbXBhdGlibGUgPSAiYXJtLGNv cnRleC1hNS1zY3UiLCB9LAo+IEBAIC0yNyw3ICszMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIHJlYWx2aWV3X3NjdV9tYXRjaFtdID0gewo+ICBzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCByZWFsdmlld19zeXNjb25fbWF0Y2hbXSA9IHsKPiAgICAgICAgICB7 IC5jb21wYXRpYmxlID0gImFybSxjb3JlLW1vZHVsZS1pbnRlZ3JhdG9yIiwgfSwKPiAgICAgICAg ICB7IC5jb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1lYi1zeXNjb24iLCB9LAo+IC0gICAgICAg IHsgLmNvbXBhdGlibGUgPSAiYXJtLHJlYWx2aWV3LXBiMTFtcC1zeXNjb24iLCB9LAo+ICAgICAg ICAgIHsgLmNvbXBhdGlibGUgPSAiYXJtLHJlYWx2aWV3LXBieC1zeXNjb24iLCB9LAo+ICAgICAg ICAgIHsgfSwKPiAgfTsKPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvcmVh bHZpZXcuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3JlYWx2aWV3LmMKPiBpbmRleCBhMzkz M2UyMzczZDUuLjM2YTZmNmJjNGZkZCAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNh dGlsZS9yZWFsdmlldy5jCj4gKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvcmVhbHZpZXcu Ywo+IEBAIC05LDcgKzksNiBAQAo+ICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcmVhbHZpZXdf ZHRfcGxhdGZvcm1fY29tcGF0W10gX19pbml0Y29uc3QgPSB7Cj4gIAkiYXJtLHJlYWx2aWV3LWVi IiwKPiAgCSJhcm0scmVhbHZpZXctcGIxMTc2IiwKPiAtCSJhcm0scmVhbHZpZXctcGIxMW1wIiwK PiAgCSJhcm0scmVhbHZpZXctcGJhOCIsCj4gIAkiYXJtLHJlYWx2aWV3LXBieCIsCj4gIAlOVUxM LAo+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZp Zwo+IGluZGV4IGMxNjRjZGU1MDI0My4uMmI2ZjUwZGQ1NDc4IDEwMDY0NAo+IC0tLSBhL2FyY2gv YXJtL21tL0tjb25maWcKPiArKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCj4gQEAgLTkzNywyNCAr OTM3LDYgQEAgY29uZmlnIFZEU08KPiAgCSAgWW91IG11c3QgaGF2ZSBnbGliYyAyLjIyIG9yIGxh dGVyIGZvciBwcm9ncmFtcyB0byBzZWFtbGVzc2x5Cj4gIAkgIHRha2UgYWR2YW50YWdlIG9mIHRo aXMuCj4gIAo+IC1jb25maWcgRE1BX0NBQ0hFX1JXRk8KPiAtCWJvb2wgIkVuYWJsZSByZWFkL3dy aXRlIGZvciBvd25lcnNoaXAgRE1BIGNhY2hlIG1haW50ZW5hbmNlIgo+IC0JZGVwZW5kcyBvbiBD UFVfVjZLICYmIFNNUAo+IC0JZGVmYXVsdCB5Cj4gLQloZWxwCj4gLQkgIFRoZSBTbm9vcCBDb250 cm9sIFVuaXQgb24gQVJNMTFNUENvcmUgZG9lcyBub3QgZGV0ZWN0IHRoZQo+IC0JICBjYWNoZSBt YWludGVuYW5jZSBvcGVyYXRpb25zIGFuZCB0aGUgZG1hX3ttYXAsdW5tYXB9X2FyZWEoKQo+IC0J ICBmdW5jdGlvbnMgbWF5IGxlYXZlIHN0YWxlIGNhY2hlIGVudHJpZXMgb24gb3RoZXIgQ1BVcy4g QnkKPiAtCSAgZW5hYmxpbmcgdGhpcyBvcHRpb24sIFJlYWQgb3IgV3JpdGUgRm9yIE93bmVyc2hp cCBpbiB0aGUgQVJNdjYKPiAtCSAgRE1BIGNhY2hlIG1haW50ZW5hbmNlIGZ1bmN0aW9ucyBpcyBw ZXJmb3JtZWQuIFRoZXNlIExEUi9TVFIKPiAtCSAgaW5zdHJ1Y3Rpb25zIGNoYW5nZSB0aGUgY2Fj aGUgbGluZSBzdGF0ZSB0byBzaGFyZWQgb3IgbW9kaWZpZWQKPiAtCSAgc28gdGhhdCB0aGUgY2Fj aGUgb3BlcmF0aW9uIGhhcyB0aGUgZGVzaXJlZCBlZmZlY3QuCj4gLQo+IC0JICBOb3RlIHRoYXQg dGhlIHdvcmthcm91bmQgaXMgb25seSB2YWxpZCBvbiBwcm9jZXNzb3JzIHRoYXQgZG8KPiAtCSAg bm90IHBlcmZvcm0gc3BlY3VsYXRpdmUgbG9hZHMgaW50byB0aGUgRC1jYWNoZS4gRm9yIHN1Y2gK PiAtCSAgcHJvY2Vzc29ycywgaWYgY2FjaGUgbWFpbnRlbmFuY2Ugb3BlcmF0aW9ucyBhcmUgbm90 IGJyb2FkY2FzdAo+IC0JICBpbiBoYXJkd2FyZSwgb3RoZXIgd29ya2Fyb3VuZHMgYXJlIG5lZWRl ZCAoZS5nLiBjYWNoZQo+IC0JICBtYWludGVuYW5jZSBicm9hZGNhc3RpbmcgaW4gc29mdHdhcmUg dmlhIEZJUSkuCj4gIAo+ICBjb25maWcgT1VURVJfQ0FDSEUKPiAgCWJvb2wKPiBkaWZmIC0tZ2l0 IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKPiBpbmRl eCAyNTBjODNiZjcxNTguLjQ0MjExZDhhMjk2ZiAxMDA2NDQKPiAtLS0gYS9hcmNoL2FybS9tbS9j YWNoZS12Ni5TCj4gKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwo+IEBAIC0yMDEsMTAgKzIw MSw2IEBAIEVOVFJZKHY2X2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCj4gICAqCS0gZW5kICAgICAt IHZpcnR1YWwgZW5kIGFkZHJlc3Mgb2YgcmVnaW9uCj4gICAqLwo+ICB2Nl9kbWFfaW52X3Jhbmdl Ogo+IC0jaWZkZWYgQ09ORklHX0RNQV9DQUNIRV9SV0ZPCj4gLQlsZHJiCXIyLCBbcjBdCQkJQCBy ZWFkIGZvciBvd25lcnNoaXAKPiAtCXN0cmIJcjIsIFtyMF0JCQlAIHdyaXRlIGZvciBvd25lcnNo aXAKPiAtI2VuZGlmCj4gIAl0c3QJcjAsICNEX0NBQ0hFX0xJTkVfU0laRSAtIDEKPiAgCWJpYwly MCwgcjAsICNEX0NBQ0hFX0xJTkVfU0laRSAtIDEKPiAgI2lmZGVmIEhBUlZBUkRfQ0FDSEUKPiBA QCAtMjEzLDEwICsyMDksNiBAQCB2Nl9kbWFfaW52X3JhbmdlOgo+ICAJbWNybmUJcDE1LCAwLCBy MCwgYzcsIGMxMSwgMQkJQCBjbGVhbiB1bmlmaWVkIGxpbmUKPiAgI2VuZGlmCj4gIAl0c3QJcjEs ICNEX0NBQ0hFX0xJTkVfU0laRSAtIDEKPiAtI2lmZGVmIENPTkZJR19ETUFfQ0FDSEVfUldGTwo+ IC0JbGRyYm5lCXIyLCBbcjEsICMtMV0JCQlAIHJlYWQgZm9yIG93bmVyc2hpcAo+IC0Jc3RyYm5l CXIyLCBbcjEsICMtMV0JCQlAIHdyaXRlIGZvciBvd25lcnNoaXAKPiAtI2VuZGlmCj4gIAliaWMJ cjEsIHIxLCAjRF9DQUNIRV9MSU5FX1NJWkUgLSAxCj4gICNpZmRlZiBIQVJWQVJEX0NBQ0hFCj4g IAltY3JuZQlwMTUsIDAsIHIxLCBjNywgYzE0LCAxCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBEIGxp bmUKPiBAQCAtMjMxLDEwICsyMjMsNiBAQCB2Nl9kbWFfaW52X3JhbmdlOgo+ICAjZW5kaWYKPiAg CWFkZAlyMCwgcjAsICNEX0NBQ0hFX0xJTkVfU0laRQo+ICAJY21wCXIwLCByMQo+IC0jaWZkZWYg Q09ORklHX0RNQV9DQUNIRV9SV0ZPCj4gLQlsZHJsbwlyMiwgW3IwXQkJCUAgcmVhZCBmb3Igb3du ZXJzaGlwCj4gLQlzdHJsbwlyMiwgW3IwXQkJCUAgd3JpdGUgZm9yIG93bmVyc2hpcAo+IC0jZW5k aWYKPiAgCWJsbwkxYgo+ICAJbW92CXIwLCAjMAo+ICAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAs IDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCj4gQEAgLTI0OCw5ICsyMzYsNiBAQCB2Nl9kbWFfaW52 X3JhbmdlOgo+ICB2Nl9kbWFfY2xlYW5fcmFuZ2U6Cj4gIAliaWMJcjAsIHIwLCAjRF9DQUNIRV9M SU5FX1NJWkUgLSAxCj4gIDE6Cj4gLSNpZmRlZiBDT05GSUdfRE1BX0NBQ0hFX1JXRk8KPiAtCWxk cglyMiwgW3IwXQkJCUAgcmVhZCBmb3Igb3duZXJzaGlwCj4gLSNlbmRpZgo+ICAjaWZkZWYgSEFS VkFSRF9DQUNIRQo+ICAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBsaW5l Cj4gICNlbHNlCj4gQEAgLTI2OSwxMCArMjU0LDYgQEAgdjZfZG1hX2NsZWFuX3JhbmdlOgo+ICAg KgktIGVuZCAgICAgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzIG9mIHJlZ2lvbgo+ICAgKi8KPiAgRU5U UlkodjZfZG1hX2ZsdXNoX3JhbmdlKQo+IC0jaWZkZWYgQ09ORklHX0RNQV9DQUNIRV9SV0ZPCj4g LQlsZHJiCXIyLCBbcjBdCQlAIHJlYWQgZm9yIG93bmVyc2hpcAo+IC0Jc3RyYglyMiwgW3IwXQkJ QCB3cml0ZSBmb3Igb3duZXJzaGlwCj4gLSNlbmRpZgo+ICAJYmljCXIwLCByMCwgI0RfQ0FDSEVf TElORV9TSVpFIC0gMQo+ICAxOgo+ICAjaWZkZWYgSEFSVkFSRF9DQUNIRQo+IEBAIC0yODIsMTAg KzI2Myw2IEBAIEVOVFJZKHY2X2RtYV9mbHVzaF9yYW5nZSkKPiAgI2VuZGlmCj4gIAlhZGQJcjAs IHIwLCAjRF9DQUNIRV9MSU5FX1NJWkUKPiAgCWNtcAlyMCwgcjEKPiAtI2lmZGVmIENPTkZJR19E TUFfQ0FDSEVfUldGTwo+IC0JbGRyYmxvCXIyLCBbcjBdCQkJQCByZWFkIGZvciBvd25lcnNoaXAK PiAtCXN0cmJsbwlyMiwgW3IwXQkJCUAgd3JpdGUgZm9yIG93bmVyc2hpcAo+IC0jZW5kaWYKPiAg CWJsbwkxYgo+ICAJbW92CXIwLCAjMAo+ICAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAg ZHJhaW4gd3JpdGUgYnVmZmVyCj4gQEAgLTMwMSwxMyArMjc4LDcgQEAgRU5UUlkodjZfZG1hX21h cF9hcmVhKQo+ICAJYWRkCXIxLCByMSwgcjAKPiAgCXRlcQlyMiwgI0RNQV9GUk9NX0RFVklDRQo+ ICAJYmVxCXY2X2RtYV9pbnZfcmFuZ2UKPiAtI2lmbmRlZiBDT05GSUdfRE1BX0NBQ0hFX1JXRk8K PiAgCWIJdjZfZG1hX2NsZWFuX3JhbmdlCj4gLSNlbHNlCj4gLQl0ZXEJcjIsICNETUFfVE9fREVW SUNFCj4gLQliZXEJdjZfZG1hX2NsZWFuX3JhbmdlCj4gLQliCXY2X2RtYV9mbHVzaF9yYW5nZQo+ IC0jZW5kaWYKPiAgRU5EUFJPQyh2Nl9kbWFfbWFwX2FyZWEpCj4gIAo+ICAvKgo+IEBAIC0zMTcs MTEgKzI4OCw5IEBAIEVORFBST0ModjZfZG1hX21hcF9hcmVhKQo+ICAgKgktIGRpcgktIERNQSBk aXJlY3Rpb24KPiAgICovCj4gIEVOVFJZKHY2X2RtYV91bm1hcF9hcmVhKQo+IC0jaWZuZGVmIENP TkZJR19ETUFfQ0FDSEVfUldGTwo+ICAJYWRkCXIxLCByMSwgcjAKPiAgCXRlcQlyMiwgI0RNQV9U T19ERVZJQ0UKPiAgCWJuZQl2Nl9kbWFfaW52X3JhbmdlCj4gLSNlbmRpZgo+ICAJcmV0CWxyCj4g IEVORFBST0ModjZfZG1hX3VubWFwX2FyZWEpCj4gIAo+IAo+IC0tLQo+IGJhc2UtY29tbWl0OiBk NTcwZmU2N2RmODVjODRiZTdjYzMzY2E5ZTk1NjhkOTYwMWI0OTRmCj4gY2hhbmdlLWlkOiAyMDIz MTIwMi1kcm9wLTExbXBjb3JlLWQ1NTZjYzVmN2Q5OQo+IAo+IEJlc3QgcmVnYXJkcywKPiAtLSAK PiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+Cj4gCgotLSAKPT09PT09 PT09PT09PT09PT09PT0KfCBJIHdvdWxkIGxpa2UgdG8gfAp8IGZpeCB0aGUgd29ybGQsICB8Cnwg YnV0IHRoZXkncmUgbm90IHwKfCBnaXZpbmcgbWUgdGhlICAgfAogXCBzb3VyY2UgY29kZSEgIC8K ICAtLS0tLS0tLS0tLS0tLS0KICAgIMKvXF8o44OEKV8vwq8KCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK