From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 9DDA4C433B4 for ; Thu, 13 May 2021 16:41:05 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 3CCCA61438 for ; Thu, 13 May 2021 16:41:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3CCCA61438 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4245A6ED6B; Thu, 13 May 2021 16:41:02 +0000 (UTC) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 486626E0AA; Thu, 13 May 2021 16:41:01 +0000 (UTC) IronPort-SDR: qqQgFYGuxfJV3qUVBuktYk5mgb7Wmq+44RUJ6g+T7Jgzq8Ir1qcxfuNgf8ZAUMZxdcSnj0E5p+ PvH/4CkmwkJQ== X-IronPort-AV: E=McAfee;i="6200,9189,9983"; a="179582978" X-IronPort-AV: E=Sophos;i="5.82,296,1613462400"; d="scan'208";a="179582978" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 May 2021 09:40:56 -0700 IronPort-SDR: zvpeWm9M9E54Zx0UAYT2cNnoDN6hVFBdMwaa+uLa7oDM2bP4B6zJSZ9sx46WEtDvdOyYh++dzK hsW6Ggpbj2gw== X-IronPort-AV: E=Sophos;i="5.82,296,1613462400"; d="scan'208";a="626297750" Received: from hcadcock-mobl1.ger.corp.intel.com (HELO [10.213.209.166]) ([10.213.209.166]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 May 2021 09:40:55 -0700 Subject: Re: [PATCH 0/7] Per client engine busyness To: Alex Deucher References: <20210513110002.3641705-1-tvrtko.ursulin@linux.intel.com> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: Date: Thu, 13 May 2021 17:40:51 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Intel Graphics Development , Maling list - DRI developers Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hi, On 13/05/2021 16:48, Alex Deucher wrote: > On Thu, May 13, 2021 at 7:00 AM Tvrtko Ursulin > wrote: >> >> From: Tvrtko Ursulin >> >> Resurrect of the previosuly merged per client engine busyness patches. In a >> nutshell it enables intel_gpu_top to be more top(1) like useful and show not >> only physical GPU engine usage but per process view as well. >> >> Example screen capture: >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> intel-gpu-top - 906/ 955 MHz; 0% RC6; 5.30 Watts; 933 irqs/s >> >> IMC reads: 4414 MiB/s >> IMC writes: 3805 MiB/s >> >> ENGINE BUSY MI_SEMA MI_WAIT >> Render/3D/0 93.46% |████████████████████████████████▋ | 0% 0% >> Blitter/0 0.00% | | 0% 0% >> Video/0 0.00% | | 0% 0% >> VideoEnhance/0 0.00% | | 0% 0% >> >> PID NAME Render/3D Blitter Video VideoEnhance >> 2733 neverball |██████▌ || || || | >> 2047 Xorg |███▊ || || || | >> 2737 glxgears |█▍ || || || | >> 2128 xfwm4 | || || || | >> 2047 Xorg | || || || | >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> Internally we track time spent on engines for each struct intel_context, both >> for current and past contexts belonging to each open DRM file. >> >> This can serve as a building block for several features from the wanted list: >> smarter scheduler decisions, getrusage(2)-like per-GEM-context functionality >> wanted by some customers, setrlimit(2) like controls, cgroups controller, >> dynamic SSEU tuning, ... >> >> To enable userspace access to the tracked data, we expose time spent on GPU per >> client and per engine class in sysfs with a hierarchy like the below: >> >> # cd /sys/class/drm/card0/clients/ >> # tree >> . >> ├── 7 >> │ ├── busy >> │ │ ├── 0 >> │ │ ├── 1 >> │ │ ├── 2 >> │ │ └── 3 >> │ ├── name >> │ └── pid >> ├── 8 >> │ ├── busy >> │ │ ├── 0 >> │ │ ├── 1 >> │ │ ├── 2 >> │ │ └── 3 >> │ ├── name >> │ └── pid >> └── 9 >> ├── busy >> │ ├── 0 >> │ ├── 1 >> │ ├── 2 >> │ └── 3 >> ├── name >> └── pid >> >> Files in 'busy' directories are numbered using the engine class ABI values and >> they contain accumulated nanoseconds each client spent on engines of a >> respective class. > > We did something similar in amdgpu using the gpu scheduler. We then > expose the data via fdinfo. See > https://cgit.freedesktop.org/drm/drm-misc/commit/?id=1774baa64f9395fa884ea9ed494bcb043f3b83f5 > https://cgit.freedesktop.org/drm/drm-misc/commit/?id=874442541133f78c78b6880b8cc495bab5c61704 Interesting! Is yours wall time or actual GPU time taking preemption and such into account? Do you have some userspace tools parsing this data and how to do you client discovery? Presumably there has to be a better way that going through all open file descriptors? Our implementation was merged in January but Daniel took it out recently because he wanted to have discussion about a common vendor framework for this whole story on dri-devel. I think. +Daniel to comment. I couldn't find the patch you pasted on the mailing list to see if there was any such discussion around your version. Regards, Tvrtko > > Alex > > >> >> Tvrtko Ursulin (7): >> drm/i915: Expose list of clients in sysfs >> drm/i915: Update client name on context create >> drm/i915: Make GEM contexts track DRM clients >> drm/i915: Track runtime spent in closed and unreachable GEM contexts >> drm/i915: Track all user contexts per client >> drm/i915: Track context current active time >> drm/i915: Expose per-engine client busyness >> >> drivers/gpu/drm/i915/Makefile | 5 +- >> drivers/gpu/drm/i915/gem/i915_gem_context.c | 61 ++- >> .../gpu/drm/i915/gem/i915_gem_context_types.h | 16 +- >> drivers/gpu/drm/i915/gt/intel_context.c | 27 +- >> drivers/gpu/drm/i915/gt/intel_context.h | 15 +- >> drivers/gpu/drm/i915/gt/intel_context_types.h | 24 +- >> .../drm/i915/gt/intel_execlists_submission.c | 23 +- >> .../gpu/drm/i915/gt/intel_gt_clock_utils.c | 4 + >> drivers/gpu/drm/i915/gt/intel_lrc.c | 27 +- >> drivers/gpu/drm/i915/gt/intel_lrc.h | 24 ++ >> drivers/gpu/drm/i915/gt/selftest_lrc.c | 10 +- >> drivers/gpu/drm/i915/i915_drm_client.c | 365 ++++++++++++++++++ >> drivers/gpu/drm/i915/i915_drm_client.h | 123 ++++++ >> drivers/gpu/drm/i915/i915_drv.c | 6 + >> drivers/gpu/drm/i915/i915_drv.h | 5 + >> drivers/gpu/drm/i915/i915_gem.c | 21 +- >> drivers/gpu/drm/i915/i915_gpu_error.c | 31 +- >> drivers/gpu/drm/i915/i915_gpu_error.h | 2 +- >> drivers/gpu/drm/i915/i915_sysfs.c | 8 + >> 19 files changed, 716 insertions(+), 81 deletions(-) >> create mode 100644 drivers/gpu/drm/i915/i915_drm_client.c >> create mode 100644 drivers/gpu/drm/i915/i915_drm_client.h >> >> -- >> 2.30.2 >> From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,HK_RANDOM_FROM,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 F348EC433B4 for ; Thu, 13 May 2021 16:41:02 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 AA0F961438 for ; Thu, 13 May 2021 16:41:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AA0F961438 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 30ED86E0AA; Thu, 13 May 2021 16:41:02 +0000 (UTC) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 486626E0AA; Thu, 13 May 2021 16:41:01 +0000 (UTC) IronPort-SDR: qqQgFYGuxfJV3qUVBuktYk5mgb7Wmq+44RUJ6g+T7Jgzq8Ir1qcxfuNgf8ZAUMZxdcSnj0E5p+ PvH/4CkmwkJQ== X-IronPort-AV: E=McAfee;i="6200,9189,9983"; a="179582978" X-IronPort-AV: E=Sophos;i="5.82,296,1613462400"; d="scan'208";a="179582978" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 May 2021 09:40:56 -0700 IronPort-SDR: zvpeWm9M9E54Zx0UAYT2cNnoDN6hVFBdMwaa+uLa7oDM2bP4B6zJSZ9sx46WEtDvdOyYh++dzK hsW6Ggpbj2gw== X-IronPort-AV: E=Sophos;i="5.82,296,1613462400"; d="scan'208";a="626297750" Received: from hcadcock-mobl1.ger.corp.intel.com (HELO [10.213.209.166]) ([10.213.209.166]) by fmsmga005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 May 2021 09:40:55 -0700 To: Alex Deucher References: <20210513110002.3641705-1-tvrtko.ursulin@linux.intel.com> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: Date: Thu, 13 May 2021 17:40:51 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 0/7] Per client engine busyness X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Intel Graphics Development , Maling list - DRI developers Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" CkhpLAoKT24gMTMvMDUvMjAyMSAxNjo0OCwgQWxleCBEZXVjaGVyIHdyb3RlOgo+IE9uIFRodSwg TWF5IDEzLCAyMDIxIGF0IDc6MDAgQU0gVHZydGtvIFVyc3VsaW4KPiA8dHZydGtvLnVyc3VsaW5A bGludXguaW50ZWwuY29tPiB3cm90ZToKPj4KPj4gRnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRr by51cnN1bGluQGludGVsLmNvbT4KPj4KPj4gUmVzdXJyZWN0IG9mIHRoZSBwcmV2aW9zdWx5IG1l cmdlZCBwZXIgY2xpZW50IGVuZ2luZSBidXN5bmVzcyBwYXRjaGVzLiBJbiBhCj4+IG51dHNoZWxs IGl0IGVuYWJsZXMgaW50ZWxfZ3B1X3RvcCB0byBiZSBtb3JlIHRvcCgxKSBsaWtlIHVzZWZ1bCBh bmQgc2hvdyBub3QKPj4gb25seSBwaHlzaWNhbCBHUFUgZW5naW5lIHVzYWdlIGJ1dCBwZXIgcHJv Y2VzcyB2aWV3IGFzIHdlbGwuCj4+Cj4+IEV4YW1wbGUgc2NyZWVuIGNhcHR1cmU6Cj4+IH5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+Cj4+IGludGVsLWdwdS10b3AgLSAgOTA2LyA5NTUgTUh6OyAgICAw JSBSQzY7ICA1LjMwIFdhdHRzOyAgICAgIDkzMyBpcnFzL3MKPj4KPj4gICAgICAgIElNQyByZWFk czogICAgIDQ0MTQgTWlCL3MKPj4gICAgICAgSU1DIHdyaXRlczogICAgIDM4MDUgTWlCL3MKPj4K Pj4gICAgICAgICAgICBFTkdJTkUgICAgICBCVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBNSV9TRU1BIE1JX1dBSVQKPj4gICAgICAgUmVuZGVyLzNELzAgICA5My40NiUg fOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKW iOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiyAgfCAgICAgIDAlICAg ICAgMCUKPj4gICAgICAgICBCbGl0dGVyLzAgICAgMC4wMCUgfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgIDAlICAgICAgMCUKPj4gICAgICAgICAgIFZpZGVvLzAgICAg MC4wMCUgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIDAlICAgICAg MCUKPj4gICAgVmlkZW9FbmhhbmNlLzAgICAgMC4wMCUgfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAgIDAlICAgICAgMCUKPj4KPj4gICAgUElEICAgICAgICAgICAgTkFN RSAgUmVuZGVyLzNEICAgICAgQmxpdHRlciAgICAgICAgVmlkZW8gICAgICBWaWRlb0VuaGFuY2UK Pj4gICAyNzMzICAgICAgIG5ldmVyYmFsbCB84paI4paI4paI4paI4paI4paI4paMICAgICB8fCAg ICAgICAgICAgIHx8ICAgICAgICAgICAgfHwgICAgICAgICAgICB8Cj4+ICAgMjA0NyAgICAgICAg ICAgIFhvcmcgfOKWiOKWiOKWiOKWiiAgICAgICAgfHwgICAgICAgICAgICB8fCAgICAgICAgICAg IHx8ICAgICAgICAgICAgfAo+PiAgIDI3MzcgICAgICAgIGdseGdlYXJzIHzilojilo0gICAgICAg ICAgfHwgICAgICAgICAgICB8fCAgICAgICAgICAgIHx8ICAgICAgICAgICAgfAo+PiAgIDIxMjgg ICAgICAgICAgIHhmd200IHwgICAgICAgICAgICB8fCAgICAgICAgICAgIHx8ICAgICAgICAgICAg fHwgICAgICAgICAgICB8Cj4+ICAgMjA0NyAgICAgICAgICAgIFhvcmcgfCAgICAgICAgICAgIHx8 ICAgICAgICAgICAgfHwgICAgICAgICAgICB8fCAgICAgICAgICAgIHwKPj4gfn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn4KPj4KPj4gSW50ZXJuYWxseSB3ZSB0cmFjayB0aW1lIHNwZW50IG9uIGVuZ2lu ZXMgZm9yIGVhY2ggc3RydWN0IGludGVsX2NvbnRleHQsIGJvdGgKPj4gZm9yIGN1cnJlbnQgYW5k IHBhc3QgY29udGV4dHMgYmVsb25naW5nIHRvIGVhY2ggb3BlbiBEUk0gZmlsZS4KPj4KPj4gVGhp cyBjYW4gc2VydmUgYXMgYSBidWlsZGluZyBibG9jayBmb3Igc2V2ZXJhbCBmZWF0dXJlcyBmcm9t IHRoZSB3YW50ZWQgbGlzdDoKPj4gc21hcnRlciBzY2hlZHVsZXIgZGVjaXNpb25zLCBnZXRydXNh Z2UoMiktbGlrZSBwZXItR0VNLWNvbnRleHQgZnVuY3Rpb25hbGl0eQo+PiB3YW50ZWQgYnkgc29t ZSBjdXN0b21lcnMsIHNldHJsaW1pdCgyKSBsaWtlIGNvbnRyb2xzLCBjZ3JvdXBzIGNvbnRyb2xs ZXIsCj4+IGR5bmFtaWMgU1NFVSB0dW5pbmcsIC4uLgo+Pgo+PiBUbyBlbmFibGUgdXNlcnNwYWNl IGFjY2VzcyB0byB0aGUgdHJhY2tlZCBkYXRhLCB3ZSBleHBvc2UgdGltZSBzcGVudCBvbiBHUFUg cGVyCj4+IGNsaWVudCBhbmQgcGVyIGVuZ2luZSBjbGFzcyBpbiBzeXNmcyB3aXRoIGEgaGllcmFy Y2h5IGxpa2UgdGhlIGJlbG93Ogo+Pgo+PiAgICAgICAgICAjIGNkIC9zeXMvY2xhc3MvZHJtL2Nh cmQwL2NsaWVudHMvCj4+ICAgICAgICAgICMgdHJlZQo+PiAgICAgICAgICAuCj4+ICAgICAgICAg IOKUnOKUgOKUgCA3Cj4+ICAgICAgICAgIOKUgiAgIOKUnOKUgOKUgCBidXN5Cj4+ICAgICAgICAg IOKUgiAgIOKUgiAgIOKUnOKUgOKUgCAwCj4+ICAgICAgICAgIOKUgiAgIOKUgiAgIOKUnOKUgOKU gCAxCj4+ICAgICAgICAgIOKUgiAgIOKUgiAgIOKUnOKUgOKUgCAyCj4+ICAgICAgICAgIOKUgiAg IOKUgiAgIOKUlOKUgOKUgCAzCj4+ICAgICAgICAgIOKUgiAgIOKUnOKUgOKUgCBuYW1lCj4+ICAg ICAgICAgIOKUgiAgIOKUlOKUgOKUgCBwaWQKPj4gICAgICAgICAg4pSc4pSA4pSAIDgKPj4gICAg ICAgICAg4pSCICAg4pSc4pSA4pSAIGJ1c3kKPj4gICAgICAgICAg4pSCICAg4pSCICAg4pSc4pSA 4pSAIDAKPj4gICAgICAgICAg4pSCICAg4pSCICAg4pSc4pSA4pSAIDEKPj4gICAgICAgICAg4pSC ICAg4pSCICAg4pSc4pSA4pSAIDIKPj4gICAgICAgICAg4pSCICAg4pSCICAg4pSU4pSA4pSAIDMK Pj4gICAgICAgICAg4pSCICAg4pSc4pSA4pSAIG5hbWUKPj4gICAgICAgICAg4pSCICAg4pSU4pSA 4pSAIHBpZAo+PiAgICAgICAgICDilJTilIDilIAgOQo+PiAgICAgICAgICAgICAg4pSc4pSA4pSA IGJ1c3kKPj4gICAgICAgICAgICAgIOKUgiAgIOKUnOKUgOKUgCAwCj4+ICAgICAgICAgICAgICDi lIIgICDilJzilIDilIAgMQo+PiAgICAgICAgICAgICAg4pSCICAg4pSc4pSA4pSAIDIKPj4gICAg ICAgICAgICAgIOKUgiAgIOKUlOKUgOKUgCAzCj4+ICAgICAgICAgICAgICDilJzilIDilIAgbmFt ZQo+PiAgICAgICAgICAgICAg4pSU4pSA4pSAIHBpZAo+Pgo+PiBGaWxlcyBpbiAnYnVzeScgZGly ZWN0b3JpZXMgYXJlIG51bWJlcmVkIHVzaW5nIHRoZSBlbmdpbmUgY2xhc3MgQUJJIHZhbHVlcyBh bmQKPj4gdGhleSBjb250YWluIGFjY3VtdWxhdGVkIG5hbm9zZWNvbmRzIGVhY2ggY2xpZW50IHNw ZW50IG9uIGVuZ2luZXMgb2YgYQo+PiByZXNwZWN0aXZlIGNsYXNzLgo+IAo+IFdlIGRpZCBzb21l dGhpbmcgc2ltaWxhciBpbiBhbWRncHUgdXNpbmcgdGhlIGdwdSBzY2hlZHVsZXIuICBXZSB0aGVu Cj4gZXhwb3NlIHRoZSBkYXRhIHZpYSBmZGluZm8uICBTZWUKPiBodHRwczovL2NnaXQuZnJlZWRl c2t0b3Aub3JnL2RybS9kcm0tbWlzYy9jb21taXQvP2lkPTE3NzRiYWE2NGY5Mzk1ZmE4ODRlYTll ZDQ5NGJjYjA0M2YzYjgzZjUKPiBodHRwczovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2RybS9kcm0t bWlzYy9jb21taXQvP2lkPTg3NDQ0MjU0MTEzM2Y3OGM3OGI2ODgwYjhjYzQ5NWJhYjVjNjE3MDQK CkludGVyZXN0aW5nIQoKSXMgeW91cnMgd2FsbCB0aW1lIG9yIGFjdHVhbCBHUFUgdGltZSB0YWtp bmcgcHJlZW1wdGlvbiBhbmQgc3VjaCBpbnRvIAphY2NvdW50PyBEbyB5b3UgaGF2ZSBzb21lIHVz ZXJzcGFjZSB0b29scyBwYXJzaW5nIHRoaXMgZGF0YSBhbmQgaG93IHRvIApkbyB5b3UgY2xpZW50 IGRpc2NvdmVyeT8gUHJlc3VtYWJseSB0aGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoYXQg CmdvaW5nIHRocm91Z2ggYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycz8KCk91ciBpbXBsZW1lbnRh dGlvbiB3YXMgbWVyZ2VkIGluIEphbnVhcnkgYnV0IERhbmllbCB0b29rIGl0IG91dCByZWNlbnRs eSAKYmVjYXVzZSBoZSB3YW50ZWQgdG8gaGF2ZSBkaXNjdXNzaW9uIGFib3V0IGEgY29tbW9uIHZl bmRvciBmcmFtZXdvcmsgZm9yIAp0aGlzIHdob2xlIHN0b3J5IG9uIGRyaS1kZXZlbC4gSSB0aGlu ay4gK0RhbmllbCB0byBjb21tZW50LgoKSSBjb3VsZG4ndCBmaW5kIHRoZSBwYXRjaCB5b3UgcGFz dGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QgdG8gc2VlIGlmIHRoZXJlIAp3YXMgYW55IHN1Y2ggZGlz Y3Vzc2lvbiBhcm91bmQgeW91ciB2ZXJzaW9uLgoKUmVnYXJkcywKClR2cnRrbwoKPiAKPiBBbGV4 Cj4gCj4gCj4+Cj4+IFR2cnRrbyBVcnN1bGluICg3KToKPj4gICAgZHJtL2k5MTU6IEV4cG9zZSBs aXN0IG9mIGNsaWVudHMgaW4gc3lzZnMKPj4gICAgZHJtL2k5MTU6IFVwZGF0ZSBjbGllbnQgbmFt ZSBvbiBjb250ZXh0IGNyZWF0ZQo+PiAgICBkcm0vaTkxNTogTWFrZSBHRU0gY29udGV4dHMgdHJh Y2sgRFJNIGNsaWVudHMKPj4gICAgZHJtL2k5MTU6IFRyYWNrIHJ1bnRpbWUgc3BlbnQgaW4gY2xv c2VkIGFuZCB1bnJlYWNoYWJsZSBHRU0gY29udGV4dHMKPj4gICAgZHJtL2k5MTU6IFRyYWNrIGFs bCB1c2VyIGNvbnRleHRzIHBlciBjbGllbnQKPj4gICAgZHJtL2k5MTU6IFRyYWNrIGNvbnRleHQg Y3VycmVudCBhY3RpdmUgdGltZQo+PiAgICBkcm0vaTkxNTogRXhwb3NlIHBlci1lbmdpbmUgY2xp ZW50IGJ1c3luZXNzCj4+Cj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAg ICAgICAgICAgIHwgICA1ICstCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X2NvbnRleHQuYyAgIHwgIDYxICsrLQo+PiAgIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X2NvbnRleHRfdHlwZXMuaCB8ICAxNiArLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2NvbnRleHQuYyAgICAgICB8ICAyNyArLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2NvbnRleHQuaCAgICAgICB8ICAxNSArLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2NvbnRleHRfdHlwZXMuaCB8ICAyNCArLQo+PiAgIC4uLi9kcm0vaTkxNS9ndC9p bnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbi5jICB8ICAyMyArLQo+PiAgIC4uLi9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfZ3RfY2xvY2tfdXRpbHMuYyAgICB8ICAgNCArCj4+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMgICAgICAgICAgIHwgIDI3ICstCj4+ICAgZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmggICAgICAgICAgIHwgIDI0ICsrCj4+ICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfbHJjLmMgICAgICAgIHwgIDEwICstCj4+ICAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcm1fY2xpZW50LmMgICAgICAgIHwgMzY1ICsrKysrKysr KysrKysrKysrKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJtX2NsaWVudC5oICAg ICAgICB8IDEyMyArKysrKysKPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAg ICAgICAgICAgICAgfCAgIDYgKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmgg ICAgICAgICAgICAgICB8ICAgNSArCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YyAgICAgICAgICAgICAgIHwgIDIxICstCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n cHVfZXJyb3IuYyAgICAgICAgIHwgIDMxICstCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9ncHVfZXJyb3IuaCAgICAgICAgIHwgICAyICstCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9zeXNmcy5jICAgICAgICAgICAgIHwgICA4ICsKPj4gICAxOSBmaWxlcyBjaGFuZ2VkLCA3 MTYgaW5zZXJ0aW9ucygrKSwgODEgZGVsZXRpb25zKC0pCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJtX2NsaWVudC5jCj4+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJtX2NsaWVudC5oCj4+Cj4+IC0tCj4+ IDIuMzAuMgo+PgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK