From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) (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 B9CB11D522; Tue, 19 Dec 2023 14:15:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="XY6P3jPf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702995335; x=1734531335; h=message-id:date:mime-version:subject:to:references:from: in-reply-to:content-transfer-encoding; bh=Utihva+epIpi2x6Byt8cKcSmxRrfp7KTu5MbAz0YYqA=; b=XY6P3jPfCr/ZZfDm22v+2CDqXA0zin3WMIbLjlZOrpnm2RonCbt3nKZd scB9OO4eB95S0qd1coJ5ACYRKYygq+CmIwoT6pQCHdyJBdUqr6ajmYmXe jbSnTlto9imp0ICfncrSCG2syRcPmPYUfpIlXAHlCYVb0YemDRetyG10U yAIfL1mRQ9fi8NnB0IQtJMnw/HU4M5v9MczDbtiY38nsy0E8yqj7U9HF8 khu76Eh/JWF0gG1IyLjiMmPv2CxqQvpB32bl3/xBwq2/7QutSPzbR0kV/ BpJxftmn4fwZF0SUMTYBPNntbdbaUBS6Y7ooX2B0AM9+6xmzmsOFcpEkw g==; X-IronPort-AV: E=McAfee;i="6600,9927,10929"; a="2515922" X-IronPort-AV: E=Sophos;i="6.04,288,1695711600"; d="scan'208";a="2515922" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 06:15:34 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.04,288,1695711600"; d="scan'208";a="10401295" Received: from linux.intel.com ([10.54.29.200]) by fmviesa002.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 06:15:32 -0800 Received: from [10.209.175.219] (kliang2-mobl1.ccr.corp.intel.com [10.209.175.219]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by linux.intel.com (Postfix) with ESMTPS id 89593580BDF; Tue, 19 Dec 2023 06:15:29 -0800 (PST) Message-ID: Date: Tue, 19 Dec 2023 09:15:27 -0500 Precedence: bulk X-Mailing-List: linux-perf-users@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH V3 0/7] Clean up perf mem To: kajoljain , acme@kernel.org, irogers@google.com, peterz@infradead.org, mingo@redhat.com, namhyung@kernel.org, jolsa@kernel.org, adrian.hunter@intel.com, john.g.garry@oracle.com, will@kernel.org, james.clark@arm.com, mike.leach@linaro.org, leo.yan@linaro.org, yuhaixin.yhx@linux.alibaba.com, renyu.zj@linux.alibaba.com, tmricht@linux.ibm.com, ravi.bangoria@amd.com, atrajeev@linux.vnet.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <20231213195154.1085945-1-kan.liang@linux.intel.com> Content-Language: en-US From: "Liang, Kan" In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 2023-12-19 4:26 a.m., kajoljain wrote: > Hi, > I was trying to test this patchset on powerpc. > > After applying it on top of acme's perf-tools-next branch, I am getting > below error: > > INSTALL libsubcmd_headers > INSTALL libperf_headers > INSTALL libsymbol_headers > INSTALL libapi_headers > INSTALL libbpf_headers > CC arch/powerpc/util/mem-events.o > In file included from arch/powerpc/util/mem-events.c:3: > arch/powerpc/util/mem-events.h:5:52: error: ‘PERF_MEM_EVENTS__MAX’ > undeclared here (not in a function) > 5 | extern struct perf_mem_event > perf_mem_events_power[PERF_MEM_EVENTS__MAX]; > | > ^~~~~~~~~~~~~~~~~~~~ > make[6]: *** [/home/kajol/linux/tools/build/Makefile.build:105: > arch/powerpc/util/mem-events.o] Error 1 > make[5]: *** [/home/kajol/linux/tools/build/Makefile.build:158: util] > Error 2 > make[4]: *** [/home/kajol/linux/tools/build/Makefile.build:158: powerpc] > Error 2 > make[3]: *** [/home/kajol/linux/tools/build/Makefile.build:158: arch] > Error 2 > make[3]: *** Waiting for unfinished jobs.... > make[2]: *** [Makefile.perf:693: perf-in.o] Error 2 > make[1]: *** [Makefile.perf:251: sub-make] Error 2 > make: *** [Makefile:70: all] Error 2 > > It seems some headerfiles are missing from arch/powerpc/util/mem- > events.c > Leo updated the headerfiles for ARM. https://termbin.com/0dkn I guess powerpc has to do the same thing. Could you please try the below patch? diff --git a/tools/perf/arch/powerpc/util/mem-events.c b/tools/perf/arch/powerpc/util/mem-events.c index 72a6ac2b52f5..765d4a054b0a 100644 --- a/tools/perf/arch/powerpc/util/mem-events.c +++ b/tools/perf/arch/powerpc/util/mem-events.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 -#include "map_symbol.h" +#include "util/map_symbol.h" +#include "util/mem-events.h" #include "mem-events.h" #define E(t, n, s, l, a) { .tag = t, .name = n, .event_name = s, .ldlat = l, .aux_event = a } Thanks, Kan > Thanks, > Kajol Jain > > On 12/14/23 01:21, kan.liang@linux.intel.com wrote: >> From: Kan Liang >> >> Changes since V2: >> - Fix the Arm64 building error (Leo) >> - Add two new patches to clean up perf_mem_events__record_args() >> and perf_pmus__num_mem_pmus() (Leo) >> >> Changes since V1: >> - Fix strcmp of PMU name checking (Ravi) >> - Fix "/," typo (Ian) >> - Rename several functions with perf_pmu__mem_events prefix. (Ian) >> - Fold the header removal patch into the patch where the cleanups made. >> (Arnaldo) >> - Add reviewed-by and tested-by from Ian and Ravi >> >> As discussed in the below thread, the patch set is to clean up perf mem. >> https://lore.kernel.org/lkml/afefab15-cffc-4345-9cf4-c6a4128d4d9c@linux.intel.com/ >> >> Introduce generic functions perf_mem_events__ptr(), >> perf_mem_events__name() ,and is_mem_loads_aux_event() to replace the >> ARCH specific ones. >> Simplify the perf_mem_event__supported(). >> >> Only keeps the ARCH-specific perf_mem_events array in the corresponding >> mem-events.c for each ARCH. >> >> There is no functional change. >> >> The patch set touches almost all the ARCHs, Intel, AMD, ARM, Power and >> etc. But I can only test it on two Intel platforms. >> Please give it try, if you have machines with other ARCHs. >> >> Here are the test results: >> Intel hybrid machine: >> >> $perf mem record -e list >> ldlat-loads : available >> ldlat-stores : available >> >> $perf mem record -e ldlat-loads -v --ldlat 50 >> calling: record -e cpu_atom/mem-loads,ldlat=50/P -e cpu_core/mem-loads,ldlat=50/P >> >> $perf mem record -v >> calling: record -e cpu_atom/mem-loads,ldlat=30/P -e cpu_atom/mem-stores/P -e cpu_core/mem-loads,ldlat=30/P -e cpu_core/mem-stores/P >> >> $perf mem record -t store -v >> calling: record -e cpu_atom/mem-stores/P -e cpu_core/mem-stores/P >> >> >> Intel SPR: >> $perf mem record -e list >> ldlat-loads : available >> ldlat-stores : available >> >> $perf mem record -e ldlat-loads -v --ldlat 50 >> calling: record -e {cpu/mem-loads-aux/,cpu/mem-loads,ldlat=50/}:P >> >> $perf mem record -v >> calling: record -e {cpu/mem-loads-aux/,cpu/mem-loads,ldlat=30/}:P -e cpu/mem-stores/P >> >> $perf mem record -t store -v >> calling: record -e cpu/mem-stores/P >> >> Kan Liang (7): >> perf mem: Add mem_events into the supported perf_pmu >> perf mem: Clean up perf_mem_events__ptr() >> perf mem: Clean up perf_mem_events__name() >> perf mem: Clean up perf_mem_event__supported() >> perf mem: Clean up is_mem_loads_aux_event() >> perf mem: Clean up perf_mem_events__record_args() >> perf mem: Clean up perf_pmus__num_mem_pmus() >> >> tools/perf/arch/arm/util/pmu.c | 3 + >> tools/perf/arch/arm64/util/mem-events.c | 39 +--- >> tools/perf/arch/arm64/util/mem-events.h | 7 + >> tools/perf/arch/powerpc/util/mem-events.c | 13 +- >> tools/perf/arch/powerpc/util/mem-events.h | 7 + >> tools/perf/arch/powerpc/util/pmu.c | 11 ++ >> tools/perf/arch/s390/util/pmu.c | 3 + >> tools/perf/arch/x86/util/mem-events.c | 99 ++-------- >> tools/perf/arch/x86/util/mem-events.h | 10 + >> tools/perf/arch/x86/util/pmu.c | 19 +- >> tools/perf/builtin-c2c.c | 45 ++--- >> tools/perf/builtin-mem.c | 48 ++--- >> tools/perf/util/mem-events.c | 217 +++++++++++++--------- >> tools/perf/util/mem-events.h | 19 +- >> tools/perf/util/pmu.c | 4 +- >> tools/perf/util/pmu.h | 7 + >> tools/perf/util/pmus.c | 6 - >> tools/perf/util/pmus.h | 1 - >> 18 files changed, 278 insertions(+), 280 deletions(-) >> create mode 100644 tools/perf/arch/arm64/util/mem-events.h >> create mode 100644 tools/perf/arch/powerpc/util/mem-events.h >> create mode 100644 tools/perf/arch/powerpc/util/pmu.c >> create mode 100644 tools/perf/arch/x86/util/mem-events.h >> > 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 99F04C41535 for ; Tue, 19 Dec 2023 14:16:07 +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:From:References:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8NhfN4cgw1j1VEFAiCr5Ci3v246PKP5gTTg6zF5H2fE=; b=lZxm3eONi/jJHq BoPMJArghZQmrzzAopG2mt33oqg2eduoL48SSFqQRr5SvkhoJNGa+73teGyI26dm0lQ77cMf0ld3N ssyHu/RJxUtkGZs90bbkE+3Dqo+7fL5ZFAJRPKZBDeBV/HPqys/MRqsHWtXSWmO1XYMsp8+UTBqkv MBUKjKy8X/kqBFOUEp5W9a5XrwrSOk0MxERA2cGRpFwthFAj+d68f62l6bgNZaawCc6CNmdbhzUdJ Br5du2Xr5Hp7A3El+ZuWCKhs56oHBR/Ya1634BM1Kzu2CDxIy/JhHWucDT+7kOQAow+MaiScXeuVb SvVXPpfRzCTQSwOM3Xfw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rFasl-00EK3v-1z; Tue, 19 Dec 2023 14:15:39 +0000 Received: from mgamail.intel.com ([192.198.163.9]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rFasi-00EK26-0g for linux-arm-kernel@lists.infradead.org; Tue, 19 Dec 2023 14:15:38 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1702995336; x=1734531336; h=message-id:date:mime-version:subject:to:references:from: in-reply-to:content-transfer-encoding; bh=Utihva+epIpi2x6Byt8cKcSmxRrfp7KTu5MbAz0YYqA=; b=eiUj5A7pM7i2+KQ9N/24SR+aH+ImgtVWF1UDkDGhs3+qkpXB3B2ObRKr d+a9dKXcMA3TgiNCkFKnN/ElUptZrkXeIaIBF4tAjoGU8zAQZTGU+GmV8 jWhQAbEVbcyKfFnXQsuieO+Mf1CFtLUPh/ys2uqYEuEFmYXSe8/y2ZZaR xaSz9wGX3uvx0T6SXmZmUv1p/KHOxbcfHaaxwmfH9KeLmZ57QJ426OPcA PkOXKQ53N8fk9haHyXDw+qYOA/A2+wCVvhC8ozNw/vf96JfJq2QE1izUz aTcaOx3016Ug8QWo93UvX9nJbtWAmbuuf85gJzVrc/d2zuWx/EfcYciuf Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10929"; a="2515928" X-IronPort-AV: E=Sophos;i="6.04,288,1695711600"; d="scan'208";a="2515928" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 06:15:34 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.04,288,1695711600"; d="scan'208";a="10401295" Received: from linux.intel.com ([10.54.29.200]) by fmviesa002.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2023 06:15:32 -0800 Received: from [10.209.175.219] (kliang2-mobl1.ccr.corp.intel.com [10.209.175.219]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by linux.intel.com (Postfix) with ESMTPS id 89593580BDF; Tue, 19 Dec 2023 06:15:29 -0800 (PST) Message-ID: Date: Tue, 19 Dec 2023 09:15:27 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH V3 0/7] Clean up perf mem To: kajoljain , acme@kernel.org, irogers@google.com, peterz@infradead.org, mingo@redhat.com, namhyung@kernel.org, jolsa@kernel.org, adrian.hunter@intel.com, john.g.garry@oracle.com, will@kernel.org, james.clark@arm.com, mike.leach@linaro.org, leo.yan@linaro.org, yuhaixin.yhx@linux.alibaba.com, renyu.zj@linux.alibaba.com, tmricht@linux.ibm.com, ravi.bangoria@amd.com, atrajeev@linux.vnet.ibm.com, linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org References: <20231213195154.1085945-1-kan.liang@linux.intel.com> Content-Language: en-US From: "Liang, Kan" In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231219_061536_258188_E3B0B1F4 X-CRM114-Status: GOOD ( 26.73 ) 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 CgpPbiAyMDIzLTEyLTE5IDQ6MjYgYS5tLiwga2Fqb2xqYWluIHdyb3RlOgo+IEhpLAo+ICAgSSB3 YXMgdHJ5aW5nIHRvIHRlc3QgdGhpcyBwYXRjaHNldCBvbiBwb3dlcnBjLgo+IAo+IEFmdGVyIGFw cGx5aW5nIGl0IG9uIHRvcCBvZiBhY21lJ3MgcGVyZi10b29scy1uZXh0IGJyYW5jaCwgSSBhbSBn ZXR0aW5nCj4gYmVsb3cgZXJyb3I6Cj4gCj4gICBJTlNUQUxMIGxpYnN1YmNtZF9oZWFkZXJzCj4g ICBJTlNUQUxMIGxpYnBlcmZfaGVhZGVycwo+ICAgSU5TVEFMTCBsaWJzeW1ib2xfaGVhZGVycwo+ ICAgSU5TVEFMTCBsaWJhcGlfaGVhZGVycwo+ICAgSU5TVEFMTCBsaWJicGZfaGVhZGVycwo+ICAg Q0MgICAgICBhcmNoL3Bvd2VycGMvdXRpbC9tZW0tZXZlbnRzLm8KPiBJbiBmaWxlIGluY2x1ZGVk IGZyb20gYXJjaC9wb3dlcnBjL3V0aWwvbWVtLWV2ZW50cy5jOjM6Cj4gYXJjaC9wb3dlcnBjL3V0 aWwvbWVtLWV2ZW50cy5oOjU6NTI6IGVycm9yOiDigJhQRVJGX01FTV9FVkVOVFNfX01BWOKAmQo+ IHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCj4gICAgIDUgfCBleHRlcm4gc3Ry dWN0IHBlcmZfbWVtX2V2ZW50Cj4gcGVyZl9tZW1fZXZlbnRzX3Bvd2VyW1BFUkZfTUVNX0VWRU5U U19fTUFYXTsKPiAgICAgICB8Cj4gXn5+fn5+fn5+fn5+fn5+fn5+fn4KPiBtYWtlWzZdOiAqKiog Wy9ob21lL2tham9sL2xpbnV4L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmJ1aWxkOjEwNToKPiBhcmNo L3Bvd2VycGMvdXRpbC9tZW0tZXZlbnRzLm9dIEVycm9yIDEKPiBtYWtlWzVdOiAqKiogWy9ob21l L2tham9sL2xpbnV4L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmJ1aWxkOjE1ODogdXRpbF0KPiBFcnJv ciAyCj4gbWFrZVs0XTogKioqIFsvaG9tZS9rYWpvbC9saW51eC90b29scy9idWlsZC9NYWtlZmls ZS5idWlsZDoxNTg6IHBvd2VycGNdCj4gRXJyb3IgMgo+IG1ha2VbM106ICoqKiBbL2hvbWUva2Fq b2wvbGludXgvdG9vbHMvYnVpbGQvTWFrZWZpbGUuYnVpbGQ6MTU4OiBhcmNoXQo+IEVycm9yIDIK PiBtYWtlWzNdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgo+IG1ha2VbMl06 ICoqKiBbTWFrZWZpbGUucGVyZjo2OTM6IHBlcmYtaW4ub10gRXJyb3IgMgo+IG1ha2VbMV06ICoq KiBbTWFrZWZpbGUucGVyZjoyNTE6IHN1Yi1tYWtlXSBFcnJvciAyCj4gbWFrZTogKioqIFtNYWtl ZmlsZTo3MDogYWxsXSBFcnJvciAyCj4gCj4gSXQgc2VlbXMgc29tZSBoZWFkZXJmaWxlcyBhcmUg bWlzc2luZyBmcm9tIGFyY2gvcG93ZXJwYy91dGlsL21lbS0KPiBldmVudHMuYwo+IAoKTGVvIHVw ZGF0ZWQgdGhlIGhlYWRlcmZpbGVzIGZvciBBUk0uIGh0dHBzOi8vdGVybWJpbi5jb20vMGRrbgoK SSBndWVzcyBwb3dlcnBjIGhhcyB0byBkbyB0aGUgc2FtZSB0aGluZy4gQ291bGQgeW91IHBsZWFz ZSB0cnkgdGhlIGJlbG93CnBhdGNoPwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC9wb3dl cnBjL3V0aWwvbWVtLWV2ZW50cy5jCmIvdG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvdXRpbC9tZW0t ZXZlbnRzLmMKaW5kZXggNzJhNmFjMmI1MmY1Li43NjVkNGEwNTRiMGEgMTAwNjQ0Ci0tLSBhL3Rv b2xzL3BlcmYvYXJjaC9wb3dlcnBjL3V0aWwvbWVtLWV2ZW50cy5jCisrKyBiL3Rvb2xzL3BlcmYv YXJjaC9wb3dlcnBjL3V0aWwvbWVtLWV2ZW50cy5jCkBAIC0xLDUgKzEsNiBAQAogLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLSNpbmNsdWRlICJtYXBfc3ltYm9sLmgiCisjaW5j bHVkZSAidXRpbC9tYXBfc3ltYm9sLmgiCisjaW5jbHVkZSAidXRpbC9tZW0tZXZlbnRzLmgiCiAj aW5jbHVkZSAibWVtLWV2ZW50cy5oIgoKICNkZWZpbmUgRSh0LCBuLCBzLCBsLCBhKSB7IC50YWcg PSB0LCAubmFtZSA9IG4sIC5ldmVudF9uYW1lID0gcywgLmxkbGF0Cj0gbCwgLmF1eF9ldmVudCA9 IGEgfQoKVGhhbmtzLApLYW4KCj4gVGhhbmtzLAo+IEtham9sIEphaW4KPiAKPiBPbiAxMi8xNC8y MyAwMToyMSwga2FuLmxpYW5nQGxpbnV4LmludGVsLmNvbSB3cm90ZToKPj4gRnJvbTogS2FuIExp YW5nIDxrYW4ubGlhbmdAbGludXguaW50ZWwuY29tPgo+Pgo+PiBDaGFuZ2VzIHNpbmNlIFYyOgo+ PiAtIEZpeCB0aGUgQXJtNjQgYnVpbGRpbmcgZXJyb3IgKExlbykKPj4gLSBBZGQgdHdvIG5ldyBw YXRjaGVzIHRvIGNsZWFuIHVwIHBlcmZfbWVtX2V2ZW50c19fcmVjb3JkX2FyZ3MoKQo+PiAgIGFu ZCBwZXJmX3BtdXNfX251bV9tZW1fcG11cygpIChMZW8pCj4+Cj4+IENoYW5nZXMgc2luY2UgVjE6 Cj4+IC0gRml4IHN0cmNtcCBvZiBQTVUgbmFtZSBjaGVja2luZyAoUmF2aSkKPj4gLSBGaXggIi8s IiB0eXBvIChJYW4pCj4+IC0gUmVuYW1lIHNldmVyYWwgZnVuY3Rpb25zIHdpdGggcGVyZl9wbXVf X21lbV9ldmVudHMgcHJlZml4LiAoSWFuKQo+PiAtIEZvbGQgdGhlIGhlYWRlciByZW1vdmFsIHBh dGNoIGludG8gdGhlIHBhdGNoIHdoZXJlIHRoZSBjbGVhbnVwcyBtYWRlLgo+PiAgIChBcm5hbGRv KQo+PiAtIEFkZCByZXZpZXdlZC1ieSBhbmQgdGVzdGVkLWJ5IGZyb20gSWFuIGFuZCBSYXZpCj4+ Cj4+IEFzIGRpc2N1c3NlZCBpbiB0aGUgYmVsb3cgdGhyZWFkLCB0aGUgcGF0Y2ggc2V0IGlzIHRv IGNsZWFuIHVwIHBlcmYgbWVtLgo+PiBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sL2FmZWZh YjE1LWNmZmMtNDM0NS05Y2Y0LWM2YTQxMjhkNGQ5Y0BsaW51eC5pbnRlbC5jb20vCj4+Cj4+IElu dHJvZHVjZSBnZW5lcmljIGZ1bmN0aW9ucyBwZXJmX21lbV9ldmVudHNfX3B0cigpLAo+PiBwZXJm X21lbV9ldmVudHNfX25hbWUoKSAsYW5kIGlzX21lbV9sb2Fkc19hdXhfZXZlbnQoKSB0byByZXBs YWNlIHRoZQo+PiBBUkNIIHNwZWNpZmljIG9uZXMuCj4+IFNpbXBsaWZ5IHRoZSBwZXJmX21lbV9l dmVudF9fc3VwcG9ydGVkKCkuCj4+Cj4+IE9ubHkga2VlcHMgdGhlIEFSQ0gtc3BlY2lmaWMgcGVy Zl9tZW1fZXZlbnRzIGFycmF5IGluIHRoZSBjb3JyZXNwb25kaW5nCj4+IG1lbS1ldmVudHMuYyBm b3IgZWFjaCBBUkNILgo+Pgo+PiBUaGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5nZS4KPj4KPj4g VGhlIHBhdGNoIHNldCB0b3VjaGVzIGFsbW9zdCBhbGwgdGhlIEFSQ0hzLCBJbnRlbCwgQU1ELCBB Uk0sIFBvd2VyIGFuZAo+PiBldGMuIEJ1dCBJIGNhbiBvbmx5IHRlc3QgaXQgb24gdHdvIEludGVs IHBsYXRmb3Jtcy4KPj4gUGxlYXNlIGdpdmUgaXQgdHJ5LCBpZiB5b3UgaGF2ZSBtYWNoaW5lcyB3 aXRoIG90aGVyIEFSQ0hzLgo+Pgo+PiBIZXJlIGFyZSB0aGUgdGVzdCByZXN1bHRzOgo+PiBJbnRl bCBoeWJyaWQgbWFjaGluZToKPj4KPj4gJHBlcmYgbWVtIHJlY29yZCAtZSBsaXN0Cj4+IGxkbGF0 LWxvYWRzICA6IGF2YWlsYWJsZQo+PiBsZGxhdC1zdG9yZXMgOiBhdmFpbGFibGUKPj4KPj4gJHBl cmYgbWVtIHJlY29yZCAtZSBsZGxhdC1sb2FkcyAtdiAtLWxkbGF0IDUwCj4+IGNhbGxpbmc6IHJl Y29yZCAtZSBjcHVfYXRvbS9tZW0tbG9hZHMsbGRsYXQ9NTAvUCAtZSBjcHVfY29yZS9tZW0tbG9h ZHMsbGRsYXQ9NTAvUAo+Pgo+PiAkcGVyZiBtZW0gcmVjb3JkIC12Cj4+IGNhbGxpbmc6IHJlY29y ZCAtZSBjcHVfYXRvbS9tZW0tbG9hZHMsbGRsYXQ9MzAvUCAtZSBjcHVfYXRvbS9tZW0tc3RvcmVz L1AgLWUgY3B1X2NvcmUvbWVtLWxvYWRzLGxkbGF0PTMwL1AgLWUgY3B1X2NvcmUvbWVtLXN0b3Jl cy9QCj4+Cj4+ICRwZXJmIG1lbSByZWNvcmQgLXQgc3RvcmUgLXYKPj4gY2FsbGluZzogcmVjb3Jk IC1lIGNwdV9hdG9tL21lbS1zdG9yZXMvUCAtZSBjcHVfY29yZS9tZW0tc3RvcmVzL1AKPj4KPj4K Pj4gSW50ZWwgU1BSOgo+PiAkcGVyZiBtZW0gcmVjb3JkIC1lIGxpc3QKPj4gbGRsYXQtbG9hZHMg IDogYXZhaWxhYmxlCj4+IGxkbGF0LXN0b3JlcyA6IGF2YWlsYWJsZQo+Pgo+PiAkcGVyZiBtZW0g cmVjb3JkIC1lIGxkbGF0LWxvYWRzIC12IC0tbGRsYXQgNTAKPj4gY2FsbGluZzogcmVjb3JkIC1l IHtjcHUvbWVtLWxvYWRzLWF1eC8sY3B1L21lbS1sb2FkcyxsZGxhdD01MC99OlAKPj4KPj4gJHBl cmYgbWVtIHJlY29yZCAtdgo+PiBjYWxsaW5nOiByZWNvcmQgLWUge2NwdS9tZW0tbG9hZHMtYXV4 LyxjcHUvbWVtLWxvYWRzLGxkbGF0PTMwL306UCAtZSBjcHUvbWVtLXN0b3Jlcy9QCj4+Cj4+ICRw ZXJmIG1lbSByZWNvcmQgLXQgc3RvcmUgLXYKPj4gY2FsbGluZzogcmVjb3JkIC1lIGNwdS9tZW0t c3RvcmVzL1AKPj4KPj4gS2FuIExpYW5nICg3KToKPj4gICBwZXJmIG1lbTogQWRkIG1lbV9ldmVu dHMgaW50byB0aGUgc3VwcG9ydGVkIHBlcmZfcG11Cj4+ICAgcGVyZiBtZW06IENsZWFuIHVwIHBl cmZfbWVtX2V2ZW50c19fcHRyKCkKPj4gICBwZXJmIG1lbTogQ2xlYW4gdXAgcGVyZl9tZW1fZXZl bnRzX19uYW1lKCkKPj4gICBwZXJmIG1lbTogQ2xlYW4gdXAgcGVyZl9tZW1fZXZlbnRfX3N1cHBv cnRlZCgpCj4+ICAgcGVyZiBtZW06IENsZWFuIHVwIGlzX21lbV9sb2Fkc19hdXhfZXZlbnQoKQo+ PiAgIHBlcmYgbWVtOiBDbGVhbiB1cCBwZXJmX21lbV9ldmVudHNfX3JlY29yZF9hcmdzKCkKPj4g ICBwZXJmIG1lbTogQ2xlYW4gdXAgcGVyZl9wbXVzX19udW1fbWVtX3BtdXMoKQo+Pgo+PiAgdG9v bHMvcGVyZi9hcmNoL2FybS91dGlsL3BtdS5jICAgICAgICAgICAgfCAgIDMgKwo+PiAgdG9vbHMv cGVyZi9hcmNoL2FybTY0L3V0aWwvbWVtLWV2ZW50cy5jICAgfCAgMzkgKy0tLQo+PiAgdG9vbHMv cGVyZi9hcmNoL2FybTY0L3V0aWwvbWVtLWV2ZW50cy5oICAgfCAgIDcgKwo+PiAgdG9vbHMvcGVy Zi9hcmNoL3Bvd2VycGMvdXRpbC9tZW0tZXZlbnRzLmMgfCAgMTMgKy0KPj4gIHRvb2xzL3BlcmYv YXJjaC9wb3dlcnBjL3V0aWwvbWVtLWV2ZW50cy5oIHwgICA3ICsKPj4gIHRvb2xzL3BlcmYvYXJj aC9wb3dlcnBjL3V0aWwvcG11LmMgICAgICAgIHwgIDExICsrCj4+ICB0b29scy9wZXJmL2FyY2gv czM5MC91dGlsL3BtdS5jICAgICAgICAgICB8ICAgMyArCj4+ICB0b29scy9wZXJmL2FyY2gveDg2 L3V0aWwvbWVtLWV2ZW50cy5jICAgICB8ICA5OSArKy0tLS0tLS0tCj4+ICB0b29scy9wZXJmL2Fy Y2gveDg2L3V0aWwvbWVtLWV2ZW50cy5oICAgICB8ICAxMCArCj4+ICB0b29scy9wZXJmL2FyY2gv eDg2L3V0aWwvcG11LmMgICAgICAgICAgICB8ICAxOSArLQo+PiAgdG9vbHMvcGVyZi9idWlsdGlu LWMyYy5jICAgICAgICAgICAgICAgICAgfCAgNDUgKystLS0KPj4gIHRvb2xzL3BlcmYvYnVpbHRp bi1tZW0uYyAgICAgICAgICAgICAgICAgIHwgIDQ4ICsrLS0tCj4+ICB0b29scy9wZXJmL3V0aWwv bWVtLWV2ZW50cy5jICAgICAgICAgICAgICB8IDIxNyArKysrKysrKysrKysrLS0tLS0tLS0tCj4+ ICB0b29scy9wZXJmL3V0aWwvbWVtLWV2ZW50cy5oICAgICAgICAgICAgICB8ICAxOSArLQo+PiAg dG9vbHMvcGVyZi91dGlsL3BtdS5jICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KPj4gIHRv b2xzL3BlcmYvdXRpbC9wbXUuaCAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKPj4gIHRvb2xz L3BlcmYvdXRpbC9wbXVzLmMgICAgICAgICAgICAgICAgICAgIHwgICA2IC0KPj4gIHRvb2xzL3Bl cmYvdXRpbC9wbXVzLmggICAgICAgICAgICAgICAgICAgIHwgICAxIC0KPj4gIDE4IGZpbGVzIGNo YW5nZWQsIDI3OCBpbnNlcnRpb25zKCspLCAyODAgZGVsZXRpb25zKC0pCj4+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgdG9vbHMvcGVyZi9hcmNoL2FybTY0L3V0aWwvbWVtLWV2ZW50cy5oCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgdG9vbHMvcGVyZi9hcmNoL3Bvd2VycGMvdXRpbC9tZW0tZXZlbnRzLmgK Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9wZXJmL2FyY2gvcG93ZXJwYy91dGlsL3BtdS5j Cj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvcGVyZi9hcmNoL3g4Ni91dGlsL21lbS1ldmVu dHMuaAo+Pgo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=