From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B6FCC2BB1D for ; Tue, 17 Mar 2020 12:23:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E104C20735 for ; Tue, 17 Mar 2020 12:23:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726638AbgCQMWx (ORCPT ); Tue, 17 Mar 2020 08:22:53 -0400 Received: from foss.arm.com ([217.140.110.172]:36416 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725906AbgCQMWw (ORCPT ); Tue, 17 Mar 2020 08:22:52 -0400 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 90A7A30E; Tue, 17 Mar 2020 05:22:51 -0700 (PDT) Received: from e119884-lin.cambridge.arm.com (e119884-lin.cambridge.arm.com [10.1.196.72]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 764FF3F534; Tue, 17 Mar 2020 05:22:48 -0700 (PDT) From: Vincenzo Frascino To: linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, linux-mips@vger.kernel.org, x86@kernel.org Cc: Vincenzo Frascino , Catalin Marinas , Will Deacon , Arnd Bergmann , Russell King , Paul Burton , Thomas Gleixner , Andy Lutomirski , Ingo Molnar , Borislav Petkov , Stephen Boyd , Mark Salyzyn , Kees Cook , Peter Collingbourne , Dmitry Safonov <0x7f454c46@gmail.com>, Andrei Vagin , Nick Desaulniers , Marc Zyngier , Mark Rutland Subject: [PATCH v4 00/26] Introduce common headers for vDSO Date: Tue, 17 Mar 2020 12:21:54 +0000 Message-Id: <20200317122220.30393-1-vincenzo.frascino@arm.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Back in July last year we started having a problem in building compat vDSOs on arm64 [1] [2] that was not present when the arm64 porting to the Unified vDSO was done. In particular when the compat vDSO on such architecture is built with gcc it generates the warning below: In file included from ./arch/arm64/include/asm/thread_info.h:17:0, from ./include/linux/thread_info.h:38, from ./arch/arm64/include/asm/preempt.h:5, from ./include/linux/preempt.h:78, from ./include/linux/spinlock.h:51, from ./include/linux/seqlock.h:36, from ./include/linux/time.h:6, from ./lib/vdso/gettimeofday.c:7, from :0: ./arch/arm64/include/asm/memory.h: In function ‘__tag_set’: ./arch/arm64/include/asm/memory.h:233:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] u64 __addr = (u64)addr & ~__tag_shifted(0xff); ^ In file included from ./arch/arm64/include/asm/pgtable-hwdef.h:8:0, from ./arch/arm64/include/asm/processor.h:34, from ./arch/arm64/include/asm/elf.h:118, from ./include/linux/elf.h:5, from ./include/linux/elfnote.h:62, from arch/arm64/kernel/vdso32/note.c:11: ./arch/arm64/include/asm/memory.h: In function ‘__tag_set’: ./arch/arm64/include/asm/memory.h:233:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] u64 __addr = (u64)addr & ~__tag_shifted(0xff); The same porting does not build at all when the selected compiler is clang. I started an investigation to try to understand better the problem and after various discussions at Plumbers and Recipes last year the conclusion was that the vDSO library as it stands it is including more headers that it needs. In particular, being a user-space library, it should require only the UAPI and a minimal vDSO kernel interface instead of all the kernel-related inline functions which are not directly used and in some cases can have side effects. To solve the problem, I decided to use the approach below: * Extract from include/linux/ the vDSO required kernel interface and place it in include/vdso/ * Make sure that where meaningful the kernel includes "vdso" headers. * Limit the vDSO library to include headers coming only from UAPI and "vdso" (with 2 exceptions compiler.h for barriers and param.h for HZ). * Adapt all the architectures that support the unified vDSO library to use "vdso" headers. According to me this approach allows up to exercise a better control on what the vDSO library can include and to prevent potential issues in future. This patch series contains the implementation of the described approach. The "vdso" headers have been verified on all the architectures that support unified vDSO using the vdsotest [3] testsuite for what concerns the vDSO part and randconfig to verify that they are included in the correct places. To simplify the testing, a copy of the patchset on top of a recent linux tree can be found at [4]. [1] https://github.com/ClangBuiltLinux/linux/issues/595 [2] https://lore.kernel.org/lkml/20190926151704.GH9689@arrakis.emea.arm.com [3] https://github.com/nathanlynch/vdsotest [4] git://linux-arm.org/linux-vf.git common-headers/v4 Changes: -------- v4: - Dropped vDSO optimization patch for arm64. - Introduce a new patch to drop dependency from TASK_SIZE_32 on arm64. - Addressed review comments. - Rebased on tip/timers/core. v3: - Changed the namespace from common to vdso. - Addressed an issue involving parisc modules compilation. - Added vdso header for clocksource.h. - Addressed review comments. - Rebased on tip/timers/core. v2: - Addressed review comments for clang support. - Rebased on 5.6-rc4. Cc: Catalin Marinas Cc: Will Deacon Cc: Arnd Bergmann Cc: Russell King Cc: Paul Burton Cc: Thomas Gleixner Cc: Andy Lutomirski Cc: Ingo Molnar Cc: Borislav Petkov Cc: Stephen Boyd Cc: Mark Salyzyn Cc: Kees Cook Cc: Peter Collingbourne Cc: Dmitry Safonov <0x7f454c46@gmail.com> Cc: Andrei Vagin Cc: Nick Desaulniers Cc: Marc Zyngier Cc: Mark Rutland Signed-off-by: Vincenzo Frascino Vincenzo Frascino (26): linux/const.h: Extract common header for vDSO linux/bits.h: Extract common header for vDSO linux/limits.h: Extract common header for vDSO x86:Introduce asm/vdso/clocksource.h arm: Introduce asm/vdso/clocksource.h arm64: Introduce asm/vdso/clocksource.h mips: Introduce asm/vdso/clocksource.h linux/clocksource.h: Extract common header for vDSO linux/math64.h: Extract common header for vDSO linux/time.h: Extract common header for vDSO linux/time32.h: Extract common header for vDSO linux/time64.h: Extract common header for vDSO linux/jiffies.h: Extract common header for vDSO linux/ktime.h: Extract common header for vDSO common: Introduce processor.h scripts: Fix the inclusion order in modpost linux/elfnote.h: Replace elf.h with UAPI equivalent arm64: vdso32: Replace TASK_SIZE_32 check in vgettimeofday arm64: Introduce asm/vdso/processor.h arm64: vdso: Include common headers in the vdso library arm64: vdso32: Include common headers in the vdso library mips: vdso: Enable mips to use common headers x86: vdso: Enable x86 to use common headers arm: vdso: Enable arm to use common headers lib: vdso: Enable common headers arm64: vdso32: Enable Clang Compilation arch/arm/include/asm/clocksource.h | 6 +-- arch/arm/include/asm/cp15.h | 20 +--------- arch/arm/include/asm/processor.h | 11 +----- arch/arm/include/asm/vdso/clocksource.h | 8 ++++ arch/arm/include/asm/vdso/cp15.h | 38 +++++++++++++++++++ arch/arm/include/asm/vdso/gettimeofday.h | 4 +- arch/arm/include/asm/vdso/processor.h | 22 +++++++++++ arch/arm64/include/asm/clocksource.h | 3 +- arch/arm64/include/asm/processor.h | 7 +--- arch/arm64/include/asm/vdso/clocksource.h | 8 ++++ .../include/asm/vdso/compat_gettimeofday.h | 2 +- arch/arm64/include/asm/vdso/gettimeofday.h | 1 - arch/arm64/include/asm/vdso/processor.h | 17 +++++++++ arch/arm64/kernel/vdso/vgettimeofday.c | 2 - arch/arm64/kernel/vdso32/Makefile | 11 ++++++ arch/arm64/kernel/vdso32/vgettimeofday.c | 13 ++++--- arch/mips/include/asm/clocksource.h | 4 +- arch/mips/include/asm/processor.h | 16 +------- arch/mips/include/asm/vdso/clocksource.h | 9 +++++ arch/mips/include/asm/vdso/gettimeofday.h | 4 -- arch/mips/include/asm/vdso/processor.h | 27 +++++++++++++ arch/x86/include/asm/clocksource.h | 5 +-- arch/x86/include/asm/processor.h | 12 +----- arch/x86/include/asm/vdso/clocksource.h | 10 +++++ arch/x86/include/asm/vdso/processor.h | 23 +++++++++++ include/linux/bits.h | 2 +- include/linux/clocksource.h | 11 +----- include/linux/const.h | 5 +-- include/linux/elfnote.h | 2 +- include/linux/jiffies.h | 4 +- include/linux/ktime.h | 9 +---- include/linux/limits.h | 13 +------ include/linux/math64.h | 20 +--------- include/linux/time.h | 5 +-- include/linux/time32.h | 14 +------ include/linux/time64.h | 10 +---- include/vdso/bits.h | 9 +++++ include/vdso/clocksource.h | 23 +++++++++++ include/vdso/const.h | 10 +++++ include/vdso/datapage.h | 33 ++++++++++++++-- include/vdso/jiffies.h | 11 ++++++ include/vdso/ktime.h | 16 ++++++++ include/vdso/limits.h | 19 ++++++++++ include/vdso/math64.h | 24 ++++++++++++ include/vdso/processor.h | 14 +++++++ include/vdso/time.h | 12 ++++++ include/vdso/time32.h | 17 +++++++++ include/vdso/time64.h | 14 +++++++ lib/vdso/gettimeofday.c | 22 ----------- scripts/mod/modpost.c | 6 ++- 50 files changed, 412 insertions(+), 196 deletions(-) create mode 100644 arch/arm/include/asm/vdso/clocksource.h create mode 100644 arch/arm/include/asm/vdso/cp15.h create mode 100644 arch/arm/include/asm/vdso/processor.h create mode 100644 arch/arm64/include/asm/vdso/clocksource.h create mode 100644 arch/arm64/include/asm/vdso/processor.h create mode 100644 arch/mips/include/asm/vdso/clocksource.h create mode 100644 arch/mips/include/asm/vdso/processor.h create mode 100644 arch/x86/include/asm/vdso/clocksource.h create mode 100644 arch/x86/include/asm/vdso/processor.h create mode 100644 include/vdso/bits.h create mode 100644 include/vdso/clocksource.h create mode 100644 include/vdso/const.h create mode 100644 include/vdso/jiffies.h create mode 100644 include/vdso/ktime.h create mode 100644 include/vdso/limits.h create mode 100644 include/vdso/math64.h create mode 100644 include/vdso/processor.h create mode 100644 include/vdso/time.h create mode 100644 include/vdso/time32.h create mode 100644 include/vdso/time64.h -- 2.25.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6FCBAC3F2CE for ; Tue, 17 Mar 2020 12:23:00 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 3BD052076D for ; Tue, 17 Mar 2020 12:23:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Yu1ALJHX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3BD052076D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To :From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=8xGCPrMOjQi5xd4VldcphVp3MgIsR1GKbK6yFWMLr2A=; b=Yu1ALJHXv3GaL8 cALlv1meY5iS+k1Ghin/Biu7/WgKuNihz3csuCsfyooCvbLEQ+3WpG6J/SQ4JSCkstG6MFfh20xEv aS7QkycjIrgfiv4Ka/nZh3PNHNUmkEVVkrnRsp3l48nAX5918FZl74pCHKNQ2QEOmpbv6BkWea2e8 IsQhL1LK0iDjUAqZAH++ZvZ15vJjFpXyCTid6V9fs32sb6APX5iFVzKm8pNipF5mvXMU/Dt+Wx2ak EpAWhNQSqEM5UGztoTseILQeT63NUtNdNErpXjo576lxnQqaUc89/PQtP92bbFNmsLPXT8oDYsHD3 CpMeFLOeSyjjIvgU13GA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jEBFL-0005Pm-Pl; Tue, 17 Mar 2020 12:22:59 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jEBFI-0005Op-1E for linux-arm-kernel@lists.infradead.org; Tue, 17 Mar 2020 12:22:58 +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 90A7A30E; Tue, 17 Mar 2020 05:22:51 -0700 (PDT) Received: from e119884-lin.cambridge.arm.com (e119884-lin.cambridge.arm.com [10.1.196.72]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 764FF3F534; Tue, 17 Mar 2020 05:22:48 -0700 (PDT) From: Vincenzo Frascino To: linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, linux-mips@vger.kernel.org, x86@kernel.org Subject: [PATCH v4 00/26] Introduce common headers for vDSO Date: Tue, 17 Mar 2020 12:21:54 +0000 Message-Id: <20200317122220.30393-1-vincenzo.frascino@arm.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200317_052256_165897_C2503C50 X-CRM114-Status: GOOD ( 20.83 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , Nick Desaulniers , Dmitry Safonov <0x7f454c46@gmail.com>, Kees Cook , Arnd Bergmann , Stephen Boyd , Catalin Marinas , Will Deacon , Russell King , Mark Salyzyn , Paul Burton , Ingo Molnar , Borislav Petkov , Andy Lutomirski , Marc Zyngier , Thomas Gleixner , Vincenzo Frascino , Peter Collingbourne , Andrei Vagin Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org QmFjayBpbiBKdWx5IGxhc3QgeWVhciB3ZSBzdGFydGVkIGhhdmluZyBhIHByb2JsZW0gaW4gYnVp bGRpbmcgY29tcGF0CnZEU09zIG9uIGFybTY0IFsxXSBbMl0gdGhhdCB3YXMgbm90IHByZXNlbnQg d2hlbiB0aGUgYXJtNjQgcG9ydGluZyB0bwp0aGUgVW5pZmllZCB2RFNPIHdhcyBkb25lLiBJbiBw YXJ0aWN1bGFyIHdoZW4gdGhlIGNvbXBhdCB2RFNPIG9uIHN1Y2gKYXJjaGl0ZWN0dXJlIGlzIGJ1 aWx0IHdpdGggZ2NjIGl0IGdlbmVyYXRlcyB0aGUgd2FybmluZyBiZWxvdzoKCkluIGZpbGUgaW5j bHVkZWQgZnJvbSAuL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaDoxNzowLAog ICAgICAgICAgICAgICAgIGZyb20gLi9pbmNsdWRlL2xpbnV4L3RocmVhZF9pbmZvLmg6MzgsCiAg ICAgICAgICAgICAgICAgZnJvbSAuL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJlZW1wdC5oOjUs CiAgICAgICAgICAgICAgICAgZnJvbSAuL2luY2x1ZGUvbGludXgvcHJlZW1wdC5oOjc4LAogICAg ICAgICAgICAgICAgIGZyb20gLi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmg6NTEsCiAgICAgICAg ICAgICAgICAgZnJvbSAuL2luY2x1ZGUvbGludXgvc2VxbG9jay5oOjM2LAogICAgICAgICAgICAg ICAgIGZyb20gLi9pbmNsdWRlL2xpbnV4L3RpbWUuaDo2LAogICAgICAgICAgICAgICAgIGZyb20g Li9saWIvdmRzby9nZXR0aW1lb2ZkYXkuYzo3LAogICAgICAgICAgICAgICAgIGZyb20gPGNvbW1h bmQtbGluZT46MDoKLi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21lbW9yeS5oOiBJbiBmdW5jdGlv biDigJhfX3RhZ19zZXTigJk6Ci4vYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tZW1vcnkuaDoyMzM6 MTU6IHdhcm5pbmc6IGNhc3QgZnJvbSBwb2ludGVyCiAgICAgICAgICAgICAgICB0byBpbnRlZ2Vy IG9mIGRpZmZlcmVudCBzaXplIFstV3BvaW50ZXItdG8taW50LWNhc3RdCiAgdTY0IF9fYWRkciA9 ICh1NjQpYWRkciAmIH5fX3RhZ19zaGlmdGVkKDB4ZmYpOwogICAgICAgICAgICAgICBeCkluIGZp bGUgaW5jbHVkZWQgZnJvbSAuL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS1od2RlZi5o Ojg6MCwKICAgICAgICAgICAgICAgICBmcm9tIC4vYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wcm9j ZXNzb3IuaDozNCwKICAgICAgICAgICAgICAgICBmcm9tIC4vYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9lbGYuaDoxMTgsCiAgICAgICAgICAgICAgICAgZnJvbSAuL2luY2x1ZGUvbGludXgvZWxmLmg6 NSwKICAgICAgICAgICAgICAgICBmcm9tIC4vaW5jbHVkZS9saW51eC9lbGZub3RlLmg6NjIsCiAg ICAgICAgICAgICAgICAgZnJvbSBhcmNoL2FybTY0L2tlcm5lbC92ZHNvMzIvbm90ZS5jOjExOgou L2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbWVtb3J5Lmg6IEluIGZ1bmN0aW9uIOKAmF9fdGFnX3Nl dOKAmToKLi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21lbW9yeS5oOjIzMzoxNTogd2FybmluZzog Y2FzdCBmcm9tIHBvaW50ZXIKICAgICAgICAgICAgICAgIHRvIGludGVnZXIgb2YgZGlmZmVyZW50 IHNpemUgWy1XcG9pbnRlci10by1pbnQtY2FzdF0KICB1NjQgX19hZGRyID0gKHU2NClhZGRyICYg fl9fdGFnX3NoaWZ0ZWQoMHhmZik7CgpUaGUgc2FtZSBwb3J0aW5nIGRvZXMgbm90IGJ1aWxkIGF0 IGFsbCB3aGVuIHRoZSBzZWxlY3RlZCBjb21waWxlciBpcwpjbGFuZy4KCkkgc3RhcnRlZCBhbiBp bnZlc3RpZ2F0aW9uIHRvIHRyeSB0byB1bmRlcnN0YW5kIGJldHRlciB0aGUgcHJvYmxlbSBhbmQK YWZ0ZXIgdmFyaW91cyBkaXNjdXNzaW9ucyBhdCBQbHVtYmVycyBhbmQgUmVjaXBlcyBsYXN0IHll YXIgdGhlCmNvbmNsdXNpb24gd2FzIHRoYXQgdGhlIHZEU08gbGlicmFyeSBhcyBpdCBzdGFuZHMg aXQgaXMgaW5jbHVkaW5nIG1vcmUKaGVhZGVycyB0aGF0IGl0IG5lZWRzLiBJbiBwYXJ0aWN1bGFy LCBiZWluZyBhIHVzZXItc3BhY2UgbGlicmFyeSwgaXQKc2hvdWxkIHJlcXVpcmUgb25seSB0aGUg VUFQSSBhbmQgYSBtaW5pbWFsIHZEU08ga2VybmVsIGludGVyZmFjZSBpbnN0ZWFkCm9mIGFsbCB0 aGUga2VybmVsLXJlbGF0ZWQgaW5saW5lIGZ1bmN0aW9ucyB3aGljaCBhcmUgbm90IGRpcmVjdGx5 IHVzZWQKYW5kIGluIHNvbWUgY2FzZXMgY2FuIGhhdmUgc2lkZSBlZmZlY3RzLgoKVG8gc29sdmUg dGhlIHByb2JsZW0sIEkgZGVjaWRlZCB0byB1c2UgdGhlIGFwcHJvYWNoIGJlbG93OgogICogRXh0 cmFjdCBmcm9tIGluY2x1ZGUvbGludXgvIHRoZSB2RFNPIHJlcXVpcmVkIGtlcm5lbCBpbnRlcmZh Y2UKICAgIGFuZCBwbGFjZSBpdCBpbiBpbmNsdWRlL3Zkc28vCiAgKiBNYWtlIHN1cmUgdGhhdCB3 aGVyZSBtZWFuaW5nZnVsIHRoZSBrZXJuZWwgaW5jbHVkZXMgInZkc28iIGhlYWRlcnMuCiAgKiBM aW1pdCB0aGUgdkRTTyBsaWJyYXJ5IHRvIGluY2x1ZGUgaGVhZGVycyBjb21pbmcgb25seSBmcm9t IFVBUEkKICAgIGFuZCAidmRzbyIgKHdpdGggMiBleGNlcHRpb25zIGNvbXBpbGVyLmggZm9yIGJh cnJpZXJzIGFuZCBwYXJhbS5oCiAgICBmb3IgSFopLgogICogQWRhcHQgYWxsIHRoZSBhcmNoaXRl Y3R1cmVzIHRoYXQgc3VwcG9ydCB0aGUgdW5pZmllZCB2RFNPIGxpYnJhcnkKICAgIHRvIHVzZSAi dmRzbyIgaGVhZGVycy4KCkFjY29yZGluZyB0byBtZSB0aGlzIGFwcHJvYWNoIGFsbG93cyB1cCB0 byBleGVyY2lzZSBhIGJldHRlciBjb250cm9sIG9uCndoYXQgdGhlIHZEU08gbGlicmFyeSBjYW4g aW5jbHVkZSBhbmQgdG8gcHJldmVudCBwb3RlbnRpYWwgaXNzdWVzIGluCmZ1dHVyZS4KClRoaXMg cGF0Y2ggc2VyaWVzIGNvbnRhaW5zIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGVzY3JpYmVk IGFwcHJvYWNoLgoKVGhlICJ2ZHNvIiBoZWFkZXJzIGhhdmUgYmVlbiB2ZXJpZmllZCBvbiBhbGwg dGhlIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0CnVuaWZpZWQgdkRTTyB1c2luZyB0aGUgdmRz b3Rlc3QgWzNdIHRlc3RzdWl0ZSBmb3Igd2hhdCBjb25jZXJucyB0aGUgdkRTTyBwYXJ0CmFuZCBy YW5kY29uZmlnIHRvIHZlcmlmeSB0aGF0IHRoZXkgYXJlIGluY2x1ZGVkIGluIHRoZSBjb3JyZWN0 IHBsYWNlcy4KClRvIHNpbXBsaWZ5IHRoZSB0ZXN0aW5nLCBhIGNvcHkgb2YgdGhlIHBhdGNoc2V0 IG9uIHRvcCBvZiBhIHJlY2VudCBsaW51eAp0cmVlIGNhbiBiZSBmb3VuZCBhdCBbNF0uCgpbMV0g aHR0cHM6Ly9naXRodWIuY29tL0NsYW5nQnVpbHRMaW51eC9saW51eC9pc3N1ZXMvNTk1ClsyXSBo dHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMTkwOTI2MTUxNzA0LkdIOTY4OUBhcnJha2lz LmVtZWEuYXJtLmNvbQpbM10gaHR0cHM6Ly9naXRodWIuY29tL25hdGhhbmx5bmNoL3Zkc290ZXN0 Cls0XSBnaXQ6Ly9saW51eC1hcm0ub3JnL2xpbnV4LXZmLmdpdCBjb21tb24taGVhZGVycy92NAoK Q2hhbmdlczoKLS0tLS0tLS0KdjQ6CiAgLSBEcm9wcGVkIHZEU08gb3B0aW1pemF0aW9uIHBhdGNo IGZvciBhcm02NC4KICAtIEludHJvZHVjZSBhIG5ldyBwYXRjaCB0byBkcm9wIGRlcGVuZGVuY3kg ZnJvbSBUQVNLX1NJWkVfMzIgb24gYXJtNjQuCiAgLSBBZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRz LgogIC0gUmViYXNlZCBvbiB0aXAvdGltZXJzL2NvcmUuCnYzOgogIC0gQ2hhbmdlZCB0aGUgbmFt ZXNwYWNlIGZyb20gY29tbW9uIHRvIHZkc28uCiAgLSBBZGRyZXNzZWQgYW4gaXNzdWUgaW52b2x2 aW5nIHBhcmlzYyBtb2R1bGVzIGNvbXBpbGF0aW9uLgogIC0gQWRkZWQgdmRzbyBoZWFkZXIgZm9y IGNsb2Nrc291cmNlLmguCiAgLSBBZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRzLgogIC0gUmViYXNl ZCBvbiB0aXAvdGltZXJzL2NvcmUuCnYyOgogIC0gQWRkcmVzc2VkIHJldmlldyBjb21tZW50cyBm b3IgY2xhbmcgc3VwcG9ydC4KICAtIFJlYmFzZWQgb24gNS42LXJjNC4KCkNjOiBDYXRhbGluIE1h cmluYXMgPGNhdGFsaW4ubWFyaW5hc0Bhcm0uY29tPgpDYzogV2lsbCBEZWFjb24gPHdpbGwuZGVh Y29uQGFybS5jb20+CkNjOiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgpDYzogUnVzc2Vs bCBLaW5nIDxsaW51eEBhcm1saW51eC5vcmcudWs+CkNjOiBQYXVsIEJ1cnRvbiA8cGF1bC5idXJ0 b25AbWlwcy5jb20+CkNjOiBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KQ2M6 IEFuZHkgTHV0b21pcnNraSA8bHV0b0BrZXJuZWwub3JnPgpDYzogSW5nbyBNb2xuYXIgPG1pbmdv QHJlZGhhdC5jb20+CkNjOiBCb3Jpc2xhdiBQZXRrb3YgPGJwQGFsaWVuOC5kZT4KQ2M6IFN0ZXBo ZW4gQm95ZCA8c2JveWRAa2VybmVsLm9yZz4KQ2M6IE1hcmsgU2FseXp5biA8c2FseXp5bkBhbmRy b2lkLmNvbT4KQ2M6IEtlZXMgQ29vayA8a2Vlc2Nvb2tAY2hyb21pdW0ub3JnPgpDYzogUGV0ZXIg Q29sbGluZ2JvdXJuZSA8cGNjQGdvb2dsZS5jb20+CkNjOiBEbWl0cnkgU2Fmb25vdiA8MHg3ZjQ1 NGM0NkBnbWFpbC5jb20+CkNjOiBBbmRyZWkgVmFnaW4gPGF2YWdpbkBvcGVudnoub3JnPgpDYzog TmljayBEZXNhdWxuaWVycyA8bmRlc2F1bG5pZXJzQGdvb2dsZS5jb20+CkNjOiBNYXJjIFp5bmdp ZXIgPG1hekBrZXJuZWwub3JnPgpDYzogTWFyayBSdXRsYW5kIDxNYXJrLlJ1dGxhbmRAYXJtLmNv bT4KU2lnbmVkLW9mZi1ieTogVmluY2Vuem8gRnJhc2Npbm8gPHZpbmNlbnpvLmZyYXNjaW5vQGFy bS5jb20+CgpWaW5jZW56byBGcmFzY2lubyAoMjYpOgogIGxpbnV4L2NvbnN0Lmg6IEV4dHJhY3Qg Y29tbW9uIGhlYWRlciBmb3IgdkRTTwogIGxpbnV4L2JpdHMuaDogRXh0cmFjdCBjb21tb24gaGVh ZGVyIGZvciB2RFNPCiAgbGludXgvbGltaXRzLmg6IEV4dHJhY3QgY29tbW9uIGhlYWRlciBmb3Ig dkRTTwogIHg4NjpJbnRyb2R1Y2UgYXNtL3Zkc28vY2xvY2tzb3VyY2UuaAogIGFybTogSW50cm9k dWNlIGFzbS92ZHNvL2Nsb2Nrc291cmNlLmgKICBhcm02NDogSW50cm9kdWNlIGFzbS92ZHNvL2Ns b2Nrc291cmNlLmgKICBtaXBzOiBJbnRyb2R1Y2UgYXNtL3Zkc28vY2xvY2tzb3VyY2UuaAogIGxp bnV4L2Nsb2Nrc291cmNlLmg6IEV4dHJhY3QgY29tbW9uIGhlYWRlciBmb3IgdkRTTwogIGxpbnV4 L21hdGg2NC5oOiBFeHRyYWN0IGNvbW1vbiBoZWFkZXIgZm9yIHZEU08KICBsaW51eC90aW1lLmg6 IEV4dHJhY3QgY29tbW9uIGhlYWRlciBmb3IgdkRTTwogIGxpbnV4L3RpbWUzMi5oOiBFeHRyYWN0 IGNvbW1vbiBoZWFkZXIgZm9yIHZEU08KICBsaW51eC90aW1lNjQuaDogRXh0cmFjdCBjb21tb24g aGVhZGVyIGZvciB2RFNPCiAgbGludXgvamlmZmllcy5oOiBFeHRyYWN0IGNvbW1vbiBoZWFkZXIg Zm9yIHZEU08KICBsaW51eC9rdGltZS5oOiBFeHRyYWN0IGNvbW1vbiBoZWFkZXIgZm9yIHZEU08K ICBjb21tb246IEludHJvZHVjZSBwcm9jZXNzb3IuaAogIHNjcmlwdHM6IEZpeCB0aGUgaW5jbHVz aW9uIG9yZGVyIGluIG1vZHBvc3QKICBsaW51eC9lbGZub3RlLmg6IFJlcGxhY2UgZWxmLmggd2l0 aCBVQVBJIGVxdWl2YWxlbnQKICBhcm02NDogdmRzbzMyOiBSZXBsYWNlIFRBU0tfU0laRV8zMiBj aGVjayBpbiB2Z2V0dGltZW9mZGF5CiAgYXJtNjQ6IEludHJvZHVjZSBhc20vdmRzby9wcm9jZXNz b3IuaAogIGFybTY0OiB2ZHNvOiBJbmNsdWRlIGNvbW1vbiBoZWFkZXJzIGluIHRoZSB2ZHNvIGxp YnJhcnkKICBhcm02NDogdmRzbzMyOiBJbmNsdWRlIGNvbW1vbiBoZWFkZXJzIGluIHRoZSB2ZHNv IGxpYnJhcnkKICBtaXBzOiB2ZHNvOiBFbmFibGUgbWlwcyB0byB1c2UgY29tbW9uIGhlYWRlcnMK ICB4ODY6IHZkc286IEVuYWJsZSB4ODYgdG8gdXNlIGNvbW1vbiBoZWFkZXJzCiAgYXJtOiB2ZHNv OiBFbmFibGUgYXJtIHRvIHVzZSBjb21tb24gaGVhZGVycwogIGxpYjogdmRzbzogRW5hYmxlIGNv bW1vbiBoZWFkZXJzCiAgYXJtNjQ6IHZkc28zMjogRW5hYmxlIENsYW5nIENvbXBpbGF0aW9uCgog YXJjaC9hcm0vaW5jbHVkZS9hc20vY2xvY2tzb3VyY2UuaCAgICAgICAgICAgIHwgIDYgKy0tCiBh cmNoL2FybS9pbmNsdWRlL2FzbS9jcDE1LmggICAgICAgICAgICAgICAgICAgfCAyMCArLS0tLS0t LS0tCiBhcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCAgICAgICAgICAgICAgfCAxMSAr LS0tLS0KIGFyY2gvYXJtL2luY2x1ZGUvYXNtL3Zkc28vY2xvY2tzb3VyY2UuaCAgICAgICB8ICA4 ICsrKysKIGFyY2gvYXJtL2luY2x1ZGUvYXNtL3Zkc28vY3AxNS5oICAgICAgICAgICAgICB8IDM4 ICsrKysrKysrKysrKysrKysrKysKIGFyY2gvYXJtL2luY2x1ZGUvYXNtL3Zkc28vZ2V0dGltZW9m ZGF5LmggICAgICB8ICA0ICstCiBhcmNoL2FybS9pbmNsdWRlL2FzbS92ZHNvL3Byb2Nlc3Nvci5o ICAgICAgICAgfCAyMiArKysrKysrKysrKwogYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jbG9ja3Nv dXJjZS5oICAgICAgICAgIHwgIDMgKy0KIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHJvY2Vzc29y LmggICAgICAgICAgICB8ICA3ICstLS0KIGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmRzby9jbG9j a3NvdXJjZS5oICAgICB8ICA4ICsrKysKIC4uLi9pbmNsdWRlL2FzbS92ZHNvL2NvbXBhdF9nZXR0 aW1lb2ZkYXkuaCAgICB8ICAyICstCiBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Zkc28vZ2V0dGlt ZW9mZGF5LmggICAgfCAgMSAtCiBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Zkc28vcHJvY2Vzc29y LmggICAgICAgfCAxNyArKysrKysrKysKIGFyY2gvYXJtNjQva2VybmVsL3Zkc28vdmdldHRpbWVv ZmRheS5jICAgICAgICB8ICAyIC0KIGFyY2gvYXJtNjQva2VybmVsL3Zkc28zMi9NYWtlZmlsZSAg ICAgICAgICAgICB8IDExICsrKysrKwogYXJjaC9hcm02NC9rZXJuZWwvdmRzbzMyL3ZnZXR0aW1l b2ZkYXkuYyAgICAgIHwgMTMgKysrKy0tLQogYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Nsb2Nrc291 cmNlLmggICAgICAgICAgIHwgIDQgKy0KIGFyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3Iu aCAgICAgICAgICAgICB8IDE2ICstLS0tLS0tCiBhcmNoL21pcHMvaW5jbHVkZS9hc20vdmRzby9j bG9ja3NvdXJjZS5oICAgICAgfCAgOSArKysrKwogYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Zkc28v Z2V0dGltZW9mZGF5LmggICAgIHwgIDQgLS0KIGFyY2gvbWlwcy9pbmNsdWRlL2FzbS92ZHNvL3By b2Nlc3Nvci5oICAgICAgICB8IDI3ICsrKysrKysrKysrKysKIGFyY2gveDg2L2luY2x1ZGUvYXNt L2Nsb2Nrc291cmNlLmggICAgICAgICAgICB8ICA1ICstLQogYXJjaC94ODYvaW5jbHVkZS9hc20v cHJvY2Vzc29yLmggICAgICAgICAgICAgIHwgMTIgKy0tLS0tCiBhcmNoL3g4Ni9pbmNsdWRlL2Fz bS92ZHNvL2Nsb2Nrc291cmNlLmggICAgICAgfCAxMCArKysrKwogYXJjaC94ODYvaW5jbHVkZS9h c20vdmRzby9wcm9jZXNzb3IuaCAgICAgICAgIHwgMjMgKysrKysrKysrKysKIGluY2x1ZGUvbGlu dXgvYml0cy5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiBpbmNsdWRlL2xpbnV4 L2Nsb2Nrc291cmNlLmggICAgICAgICAgICAgICAgICAgfCAxMSArLS0tLS0KIGluY2x1ZGUvbGlu dXgvY29uc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1ICstLQogaW5jbHVkZS9saW51 eC9lbGZub3RlLmggICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIGluY2x1ZGUvbGludXgv amlmZmllcy5oICAgICAgICAgICAgICAgICAgICAgICB8ICA0ICstCiBpbmNsdWRlL2xpbnV4L2t0 aW1lLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgOSArLS0tLQogaW5jbHVkZS9saW51eC9s aW1pdHMuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMgKy0tLS0tLQogaW5jbHVkZS9saW51 eC9tYXRoNjQuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAgKy0tLS0tLS0tLQogaW5jbHVk ZS9saW51eC90aW1lLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUgKy0tCiBpbmNsdWRl L2xpbnV4L3RpbWUzMi5oICAgICAgICAgICAgICAgICAgICAgICAgfCAxNCArLS0tLS0tCiBpbmNs dWRlL2xpbnV4L3RpbWU2NC5oICAgICAgICAgICAgICAgICAgICAgICAgfCAxMCArLS0tLQogaW5j bHVkZS92ZHNvL2JpdHMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrKysKIGlu Y2x1ZGUvdmRzby9jbG9ja3NvdXJjZS5oICAgICAgICAgICAgICAgICAgICB8IDIzICsrKysrKysr KysrCiBpbmNsdWRlL3Zkc28vY29uc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMCAr KysrKwogaW5jbHVkZS92ZHNvL2RhdGFwYWdlLmggICAgICAgICAgICAgICAgICAgICAgIHwgMzMg KysrKysrKysrKysrKystLQogaW5jbHVkZS92ZHNvL2ppZmZpZXMuaCAgICAgICAgICAgICAgICAg ICAgICAgIHwgMTEgKysrKysrCiBpbmNsdWRlL3Zkc28va3RpbWUuaCAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAxNiArKysrKysrKwogaW5jbHVkZS92ZHNvL2xpbWl0cy5oICAgICAgICAgICAg ICAgICAgICAgICAgIHwgMTkgKysrKysrKysrKwogaW5jbHVkZS92ZHNvL21hdGg2NC5oICAgICAg ICAgICAgICAgICAgICAgICAgIHwgMjQgKysrKysrKysrKysrCiBpbmNsdWRlL3Zkc28vcHJvY2Vz c29yLmggICAgICAgICAgICAgICAgICAgICAgfCAxNCArKysrKysrCiBpbmNsdWRlL3Zkc28vdGlt ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMiArKysrKysKIGluY2x1ZGUvdmRzby90 aW1lMzIuaCAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3ICsrKysrKysrKwogaW5jbHVkZS92 ZHNvL3RpbWU2NC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQgKysrKysrKwogbGliL3Zk c28vZ2V0dGltZW9mZGF5LmMgICAgICAgICAgICAgICAgICAgICAgIHwgMjIgLS0tLS0tLS0tLS0K IHNjcmlwdHMvbW9kL21vZHBvc3QuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrLQog NTAgZmlsZXMgY2hhbmdlZCwgNDEyIGluc2VydGlvbnMoKyksIDE5NiBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9pbmNsdWRlL2FzbS92ZHNvL2Nsb2Nrc291cmNlLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9pbmNsdWRlL2FzbS92ZHNvL2NwMTUuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL2luY2x1ZGUvYXNtL3Zkc28vcHJvY2Vzc29yLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Zkc28vY2xvY2tzb3VyY2Uu aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdmRzby9wcm9jZXNz b3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvbWlwcy9pbmNsdWRlL2FzbS92ZHNvL2Nsb2Nr c291cmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL21pcHMvaW5jbHVkZS9hc20vdmRzby9w cm9jZXNzb3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2luY2x1ZGUvYXNtL3Zkc28v Y2xvY2tzb3VyY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2luY2x1ZGUvYXNtL3Zk c28vcHJvY2Vzc29yLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3Zkc28vYml0cy5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS92ZHNvL2Nsb2Nrc291cmNlLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBpbmNsdWRlL3Zkc28vY29uc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUv dmRzby9qaWZmaWVzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3Zkc28va3RpbWUuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdmRzby9saW1pdHMuaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGluY2x1ZGUvdmRzby9tYXRoNjQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdmRz by9wcm9jZXNzb3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdmRzby90aW1lLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3Zkc28vdGltZTMyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBpbmNsdWRlL3Zkc28vdGltZTY0LmgKCi0tIAoyLjI1LjEKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==