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 AD569C27C5E for ; Tue, 11 Jun 2024 06:54:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:In-Reply-To:From:References:Cc:To:Subject:MIME-Version:Date: Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=LHO9/+aaT2pd8Io9rbdkeZgk0rv8OF/M30y0e2KQQjo=; b=tn9ABAJJDb+3MJpoC5OqqdnmRg kIsC5ho5vhSseDy5vAHMgplBm8TohyjndapOYkysXb6GsvSg0tvaXvd0F02KJDNvQoLTaMuJXLJLn uJjSXn8d1k06YRP/hfyxUD1b/uQXLzqzBdyIpKVsHRQfw9d1h4nykcCDWYXBRuy7Zgrwfllww9J1e jgDfbxaNxq8yZOifqoL5DhkYLWpJos4BGLMBQNSRhTjxTAJrCBy5Y4yS6TSRbXyWC2oEabe7OJrHd zY5+3J5T5FX3QjKvl730h1nxprAGsaB/Mpb1BatpxlBQ2k7uqkZ04lUy0EPq8s6d7KCp5NQLVmEIT /7bXZrYg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGvOh-00000007lk9-0THn; Tue, 11 Jun 2024 06:54:23 +0000 Received: from madrid.collaboradmins.com ([2a00:1098:ed:100::25]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGvOZ-00000007lgt-48HK; Tue, 11 Jun 2024 06:54:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1718088850; bh=L2glcEBJPqTLQO8Gdi0zVPEY8C63eL0dUxrZNc/ueBk=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=iiLcw0kA6mk7hFiX5Y1591cgeb/Ga9Ubf84v4VB0213cIV28cEdq4NBAvhLWFK73B aYC9owce1ydMJEuVlGqL0CObz/YJrGP3bO5N9r2c9SnNSJ9dQ/SITzarkyyslqv0BM mqv0JIN6AF7+7hwmh3Tn5ekQ5ZzRwiyAcnyMLXr3DiINpryoOz3/JpW8YN5SONFoPe YvibWtk5xpnjTCLamTVnnSEFfxiyZWqGa/bDNLP/XUPYcWECSNvKO9BkPblf8e8NdG oIJoGQNPcWTCuYU4Md5FoWCDXktCwmdliD7TCiRQFV9Xh5y1WmpXVyBODcJRIkxgPP NgnFa+18pgHHA== Received: from [100.113.186.2] (cola.collaboradmins.com [195.201.22.229]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by madrid.collaboradmins.com (Postfix) with ESMTPSA id 9070A3780EC6; Tue, 11 Jun 2024 06:54:09 +0000 (UTC) Message-ID: Date: Tue, 11 Jun 2024 08:54:08 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 2/3] dt-bindings: arm: mediatek: mmsys: Add OF graph support for board path To: =?UTF-8?B?Q0sgSHUgKOiDoeS/iuWFiSk=?= , "chunkuang.hu@kernel.org" Cc: "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "wenst@chromium.org" , "devicetree@vger.kernel.org" , "tzimmermann@suse.de" , =?UTF-8?B?U2hhd24gU3VuZyAo5a6L5a2d6KyZKQ==?= , "mripard@kernel.org" , =?UTF-8?B?Sml0YW8gU2hpICjnn7PorrDmtpsp?= , "daniel@ffwll.ch" , "p.zabel@pengutronix.de" , "conor+dt@kernel.org" , "maarten.lankhorst@linux.intel.com" , "robh@kernel.org" , "dri-devel@lists.freedesktop.org" , "airlied@gmail.com" , "krzysztof.kozlowski+dt@linaro.org" , "kernel@collabora.com" , "matthias.bgg@gmail.com" , =?UTF-8?B?WXUtY2hhbmcgTGVlICjmnY7nprnnkosp?= , "linux-arm-kernel@lists.infradead.org" , "amergnat@baylibre.com" References: <20240521075717.50330-1-angelogioacchino.delregno@collabora.com> <20240521075717.50330-3-angelogioacchino.delregno@collabora.com> <0e0fe86c-92da-43f5-89d7-8084274a908a@collabora.com> <0f20214ab3a86f68669ad1392398b16228e699ee.camel@mediatek.com> <47f05439-815e-4ca1-b20d-8e427fef0a2a@collabora.com> From: AngeloGioacchino Del Regno Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240610_235418_042837_9C17B011 X-CRM114-Status: GOOD ( 34.06 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Il 11/06/24 08:48, CK Hu (胡俊光) ha scritto: > On Mon, 2024-06-10 at 10:28 +0200, AngeloGioacchino Del Regno wrote: >> Il 06/06/24 07:29, CK Hu (胡俊光) ha scritto: >>> Hi, Angelo: >>> >>> On Wed, 2024-06-05 at 13:15 +0200, AngeloGioacchino Del Regno wrote: >>>> Il 05/06/24 03:38, CK Hu (胡俊光) ha scritto: >>>>> Hi, Angelo: >>>>> >>>>> On Tue, 2024-05-21 at 09:57 +0200, AngeloGioacchino Del Regno wrote: >>>>>> Document OF graph on MMSYS/VDOSYS: this supports up to three DDP paths >>>>>> per HW instance (so potentially up to six displays for multi-vdo SoCs). >>>>>> >>>>>> The MMSYS or VDOSYS is always the first component in the DDP pipeline, >>>>>> so it only supports an output port with multiple endpoints - where each >>>>>> endpoint defines the starting point for one of the (currently three) >>>>>> possible hardware paths. >>>>>> >>>>>> Reviewed-by: Rob Herring (Arm) >>>>>> Reviewed-by: Alexandre Mergnat >>>>>> Tested-by: Alexandre Mergnat >>>>>> Signed-off-by: AngeloGioacchino Del Regno >>>>>> --- >>>>>> .../bindings/arm/mediatek/mediatek,mmsys.yaml | 28 +++++++++++++++++++ >>>>>> 1 file changed, 28 insertions(+) >>>>>> >>>>>> diff --git a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml >>>>>> index b3c6888c1457..0ef67ca4122b 100644 >>>>>> --- a/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml >>>>>> +++ b/Documentation/devicetree/bindings/arm/mediatek/mediatek,mmsys.yaml >>>>>> @@ -93,6 +93,34 @@ properties: >>>>>> '#reset-cells': >>>>>> const: 1 >>>>>> >>>>>> + port: >>>>>> + $ref: /schemas/graph.yaml#/properties/port >>>>>> + description: >>>>>> + Output port node. This port connects the MMSYS/VDOSYS output to >>>>>> + the first component of one display pipeline, for example one of >>>>>> + the available OVL or RDMA blocks. >>>>>> + Some MediaTek SoCs support multiple display outputs per MMSYS. >>>>> >>>>> This patch looks good to me. Just want to share another information for you. >>>>> Here is an example that mmsys/vdosys could point to the display interface node. >>>>> >>>>> vdosys0: syscon@1c01a000 { >>>>> mmsys-display-interface = <&dsi0>, <&dsi1>, <&dp_intf0>; >>>>> }; >>>>> >>>>> vdosys1: syscon@1c100000 { >>>>> mmsys-display-interface = <&dp_intf1>; >>>>> }; >>>>> >>>>> There is no conflict that mmsys/vdosys point to first component of one display pipeline or point to display interface. >>>>> Both could co-exist. >>>>> >>>> >>>> Hey CK, >>>> >>>> yes, this could be an alternative to the OF graphs, and I'm sure that it'd work, >>>> even though this kind of solution would still require partial hardcoding of the >>>> display paths up until mmsys-display-interface (so, up until DSI0, or DSI1, etc). >>>> >>>> The problem with a solution like this is that, well, even though it would work, >>>> even if we ignore the suboptimal partial hardcoding, OF graphs are something >>>> generic, while the mmsys-display-interface would be a MediaTek specific/custom >>>> property. >>>> >>>> In the end, reusing generic kernel apis/interfaces/etc is always preferred >>>> compared to custom solutions, especially in this case, in which the generic >>>> stuff is on-par (or actually, depending purely on personal opinions, superior). >>>> >>>> As for the two to co-exist, I'm not sure that this is actually needed, as the >>>> OF graphs are already (at the end of the graph) pointing to the display interface. >>>> >>>> In any case, just as a reminder: if there will be any need to add any custom >>>> MediaTek specific properties later, it's ok and we can do that at any time. >>> >>> The alternative solution is using OF graphs to point display interface and use MediaTek specific property to first component: >>> >>> vdosys0: syscon@1c01a000 { >>> ports { >>> port@0 { >>> endpoint { >>> remote-endpoint = <&dsi0_endpoint>; >>> }; >>> }; >>> >>> port@1 { >>> endpoint { >>> remote-endpoint = <&dsi1_endpoint>; >>> }; >>> }; >>> >>> port@2 { >>> endpoint { >>> remote-endpoint = <&dp_intf0_endpoint>; >>> }; >>> }; >>> }; >>> >>> display-first-component = <&ovl0>; >>> }; >>> >>> And I agree to it's better to keep only OF graphs property, so it would be >>> >>> vdosys0: syscon@1c01a000 { >>> ports { >>> port@0 { >>> endpoint { >>> remote-endpoint = <&dsi0_endpoint>; >>> >>> }; >>> }; >>> >>> port@1 { >>> endpoint { >>> remote-endpoint = <&dsi1_endpoint>; >>> >>> }; >>> }; >>> >>> port@2 { >>> endpoint { >>> remote-endpoint = <&dp_intf0_endpoint>; >>> } >>> ; >>> }; >>> }; >>> }; >>> >>> Maybe we could use OF graphs for both first component and display interface and drop using MediaTek specific property. >>> >> >> We could, or we can simply walk through the OF Graph in the driver and get the >> display interface like that, as it's board-specific ;-) >> >> ...but anyway, let's see that later: after getting this series upstreamed, I will >> convert all MediaTek boards (including Chromebooks) to use the graphs instead, and >> you'll see that, at least for the currently supported boards, there's no need for >> any custom property. >> >> Also, setting the DSI0/1/dpintf endpoint to VDO0 is technically wrong, as that is >> supposed to be the last one, and a graph is conceptually supposed to go from the >> first to the last in sequence. >> >> *if* we will ever need (probably not) to get the VDO0 node to point directly to >> the last node for whatever reason, the right way would be the first one you said, >> so, mediatek,mmsys-display-interface = <&dsi0>, <&dsi1>, etc etc >> >> ...or mediatek,mmsys-possible-displays = < ... phandles > >> >> ...or anyway, many other solutions are possible - but again, I think this is not >> the right time to think about that. Knowing that there are eventual solutions for >> any need that might arise in the future is enough, IMO :-) > > This is one routing of display pipeline and the relation of VDOSYS0 with display pipeline. > > +-- VDOSYS0 ---------------------------------------------+ > | | > | | > DRAM -> IOMMU ---> OVL0 -> RDMA0 -> ... -> DSC0 -> MERGE0 -> DP_INTF0 ----> > | | > | | > +--------------------------------------------------------+ > > Video data is read by IOMMU from DRAM and send to display pipeline. Then video data travel through first component to display interface. > VDOSYS0 manage each component in the pipeline include first component and display interface. > The management include clock gating, reset, video data input/output routing. > The relationship of VDOSYTS0 with first component is the same as the relationship of VDOSYS0 with display interface. > If VDOSYS0 is not suitable using OF graph point to display interface, VDOSYS0 is also not suitable using OF graph point to first component. In the cases in which VDO goes directly to the display, it *is* possible to make it point directly to the display. In the cases in which the pipeline is larger, VDO still points to the display, but only later in the pipeline. > The job of the component in display pipeline is to process the video data, > but the job of VDOSYS0 is to manage (clock gating, reset, routing) the pipeline. > If the OF graph is to show the video data travel path, VDOSYS0 should not exist in the OF graph. > > Regards, > CK > >> >> Cheers, >> Angelo >> >>> Regards, >>> CK >>> >>>> >>>> Cheers! >>>> Angelo >>>> >>>>> Regards, >>>>> CK >>>>> >>>>>> + properties: >>>>>> + endpoint@0: >>>>>> + $ref: /schemas/graph.yaml#/properties/endpoint >>>>>> + description: Output to the primary display pipeline >>>>>> + >>>>>> + endpoint@1: >>>>>> + $ref: /schemas/graph.yaml#/properties/endpoint >>>>>> + description: Output to the secondary display pipeline >>>>>> + >>>>>> + endpoint@2: >>>>>> + $ref: /schemas/graph.yaml#/properties/endpoint >>>>>> + description: Output to the tertiary display pipeline >>>>>> + >>>>>> + anyOf: >>>>>> + - required: >>>>>> + - endpoint@0 >>>>>> + - required: >>>>>> + - endpoint@1 >>>>>> + - required: >>>>>> + - endpoint@2 >>>>>> + >>>>>> required: >>>>>> - compatible >>>>>> - reg >>>> >>>> >> >> 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 29EC9C27C5E for ; Tue, 11 Jun 2024 06:54:42 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9f7Cyd8snVpApz5eVQY9PST5D5ji5djX5dascVhzn7k=; b=rjPBD0tlUkKzA+ 7OSi7tmFhv+uxdOC4zV20OXGgRgZQvaIB8Q3fWUGWfwX21TCIuM3LYyWdOtuP+ti+GYUdS5jGS2Hy lglrS+SYONr20V59LsT2CURtWvFoX0LaDmrgPNOveVN8mozvRdLOMw66d9NgygriPN17ccVwbo2HF jDvMNtuMl0lBBVJRupoU2uIFsLaRXOLombrpZwharsSIpfrvaQFomPI7uC8xwdQTYzxUwHG4Tm1v/ ULkE0nD1QMlzRoi3aNj4GJxwq98kp2+5hEL04YJWtDHozvGd+IAlQjhH6Gm9MfS6rILGaR7QO4DNx 7iDx+NbaSkk/6t37eyjA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGvOg-00000007ljj-07WE; Tue, 11 Jun 2024 06:54:22 +0000 Received: from madrid.collaboradmins.com ([2a00:1098:ed:100::25]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sGvOZ-00000007lgt-48HK; Tue, 11 Jun 2024 06:54:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1718088850; bh=L2glcEBJPqTLQO8Gdi0zVPEY8C63eL0dUxrZNc/ueBk=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=iiLcw0kA6mk7hFiX5Y1591cgeb/Ga9Ubf84v4VB0213cIV28cEdq4NBAvhLWFK73B aYC9owce1ydMJEuVlGqL0CObz/YJrGP3bO5N9r2c9SnNSJ9dQ/SITzarkyyslqv0BM mqv0JIN6AF7+7hwmh3Tn5ekQ5ZzRwiyAcnyMLXr3DiINpryoOz3/JpW8YN5SONFoPe YvibWtk5xpnjTCLamTVnnSEFfxiyZWqGa/bDNLP/XUPYcWECSNvKO9BkPblf8e8NdG oIJoGQNPcWTCuYU4Md5FoWCDXktCwmdliD7TCiRQFV9Xh5y1WmpXVyBODcJRIkxgPP NgnFa+18pgHHA== Received: from [100.113.186.2] (cola.collaboradmins.com [195.201.22.229]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by madrid.collaboradmins.com (Postfix) with ESMTPSA id 9070A3780EC6; Tue, 11 Jun 2024 06:54:09 +0000 (UTC) Message-ID: Date: Tue, 11 Jun 2024 08:54:08 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 2/3] dt-bindings: arm: mediatek: mmsys: Add OF graph support for board path To: =?UTF-8?B?Q0sgSHUgKOiDoeS/iuWFiSk=?= , "chunkuang.hu@kernel.org" Cc: "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "wenst@chromium.org" , "devicetree@vger.kernel.org" , "tzimmermann@suse.de" , =?UTF-8?B?U2hhd24gU3VuZyAo5a6L5a2d6KyZKQ==?= , "mripard@kernel.org" , =?UTF-8?B?Sml0YW8gU2hpICjnn7PorrDmtpsp?= , "daniel@ffwll.ch" , "p.zabel@pengutronix.de" , "conor+dt@kernel.org" , "maarten.lankhorst@linux.intel.com" , "robh@kernel.org" , "dri-devel@lists.freedesktop.org" , "airlied@gmail.com" , "krzysztof.kozlowski+dt@linaro.org" , "kernel@collabora.com" , "matthias.bgg@gmail.com" , =?UTF-8?B?WXUtY2hhbmcgTGVlICjmnY7nprnnkosp?= , "linux-arm-kernel@lists.infradead.org" , "amergnat@baylibre.com" References: <20240521075717.50330-1-angelogioacchino.delregno@collabora.com> <20240521075717.50330-3-angelogioacchino.delregno@collabora.com> <0e0fe86c-92da-43f5-89d7-8084274a908a@collabora.com> <0f20214ab3a86f68669ad1392398b16228e699ee.camel@mediatek.com> <47f05439-815e-4ca1-b20d-8e427fef0a2a@collabora.com> From: AngeloGioacchino Del Regno Content-Language: en-US In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240610_235418_042837_9C17B011 X-CRM114-Status: GOOD ( 34.06 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SWwgMTEvMDYvMjQgMDg6NDgsIENLIEh1ICjog6Hkv4rlhYkpIGhhIHNjcml0dG86Cj4gT24gTW9u LCAyMDI0LTA2LTEwIGF0IDEwOjI4ICswMjAwLCBBbmdlbG9HaW9hY2NoaW5vIERlbCBSZWdubyB3 cm90ZToKPj4gSWwgMDYvMDYvMjQgMDc6MjksIENLIEh1ICjog6Hkv4rlhYkpIGhhIHNjcml0dG86 Cj4+PiBIaSwgQW5nZWxvOgo+Pj4KPj4+IE9uIFdlZCwgMjAyNC0wNi0wNSBhdCAxMzoxNSArMDIw MCwgQW5nZWxvR2lvYWNjaGlubyBEZWwgUmVnbm8gd3JvdGU6Cj4+Pj4gSWwgMDUvMDYvMjQgMDM6 MzgsIENLIEh1ICjog6Hkv4rlhYkpIGhhIHNjcml0dG86Cj4+Pj4+IEhpLCBBbmdlbG86Cj4+Pj4+ Cj4+Pj4+IE9uIFR1ZSwgMjAyNC0wNS0yMSBhdCAwOTo1NyArMDIwMCwgQW5nZWxvR2lvYWNjaGlu byBEZWwgUmVnbm8gd3JvdGU6Cj4+Pj4+PiBEb2N1bWVudCBPRiBncmFwaCBvbiBNTVNZUy9WRE9T WVM6IHRoaXMgc3VwcG9ydHMgdXAgdG8gdGhyZWUgRERQIHBhdGhzCj4+Pj4+PiBwZXIgSFcgaW5z dGFuY2UgKHNvIHBvdGVudGlhbGx5IHVwIHRvIHNpeCBkaXNwbGF5cyBmb3IgbXVsdGktdmRvIFNv Q3MpLgo+Pj4+Pj4KPj4+Pj4+IFRoZSBNTVNZUyBvciBWRE9TWVMgaXMgYWx3YXlzIHRoZSBmaXJz dCBjb21wb25lbnQgaW4gdGhlIEREUCBwaXBlbGluZSwKPj4+Pj4+IHNvIGl0IG9ubHkgc3VwcG9y dHMgYW4gb3V0cHV0IHBvcnQgd2l0aCBtdWx0aXBsZSBlbmRwb2ludHMgLSB3aGVyZSBlYWNoCj4+ Pj4+PiBlbmRwb2ludCBkZWZpbmVzIHRoZSBzdGFydGluZyBwb2ludCBmb3Igb25lIG9mIHRoZSAo Y3VycmVudGx5IHRocmVlKQo+Pj4+Pj4gcG9zc2libGUgaGFyZHdhcmUgcGF0aHMuCj4+Pj4+Pgo+ Pj4+Pj4gUmV2aWV3ZWQtYnk6IFJvYiBIZXJyaW5nIChBcm0pIDxyb2JoQGtlcm5lbC5vcmc+Cj4+ Pj4+PiBSZXZpZXdlZC1ieTogQWxleGFuZHJlIE1lcmduYXQgPGFtZXJnbmF0QGJheWxpYnJlLmNv bT4KPj4+Pj4+IFRlc3RlZC1ieTogQWxleGFuZHJlIE1lcmduYXQgPGFtZXJnbmF0QGJheWxpYnJl LmNvbT4KPj4+Pj4+IFNpZ25lZC1vZmYtYnk6IEFuZ2Vsb0dpb2FjY2hpbm8gRGVsIFJlZ25vIDxh bmdlbG9naW9hY2NoaW5vLmRlbHJlZ25vQGNvbGxhYm9yYS5jb20+Cj4+Pj4+PiAtLS0KPj4+Pj4+ ICAgICAuLi4vYmluZGluZ3MvYXJtL21lZGlhdGVrL21lZGlhdGVrLG1tc3lzLnlhbWwgfCAyOCAr KysrKysrKysrKysrKysrKysrCj4+Pj4+PiAgICAgMSBmaWxlIGNoYW5nZWQsIDI4IGluc2VydGlv bnMoKykKPj4+Pj4+Cj4+Pj4+PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL2FybS9tZWRpYXRlay9tZWRpYXRlayxtbXN5cy55YW1sIGIvRG9jdW1lbnRhdGlv bi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tZWRpYXRlay9tZWRpYXRlayxtbXN5cy55YW1sCj4+ Pj4+PiBpbmRleCBiM2M2ODg4YzE0NTcuLjBlZjY3Y2E0MTIyYiAxMDA2NDQKPj4+Pj4+IC0tLSBh L0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbWVkaWF0ZWsvbWVkaWF0ZWss bW1zeXMueWFtbAo+Pj4+Pj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L2FybS9tZWRpYXRlay9tZWRpYXRlayxtbXN5cy55YW1sCj4+Pj4+PiBAQCAtOTMsNiArOTMsMzQg QEAgcHJvcGVydGllczoKPj4+Pj4+ICAgICAgICcjcmVzZXQtY2VsbHMnOgo+Pj4+Pj4gICAgICAg ICBjb25zdDogMQo+Pj4+Pj4gICAgIAo+Pj4+Pj4gKyAgcG9ydDoKPj4+Pj4+ICsgICAgJHJlZjog L3NjaGVtYXMvZ3JhcGgueWFtbCMvcHJvcGVydGllcy9wb3J0Cj4+Pj4+PiArICAgIGRlc2NyaXB0 aW9uOgo+Pj4+Pj4gKyAgICAgIE91dHB1dCBwb3J0IG5vZGUuIFRoaXMgcG9ydCBjb25uZWN0cyB0 aGUgTU1TWVMvVkRPU1lTIG91dHB1dCB0bwo+Pj4+Pj4gKyAgICAgIHRoZSBmaXJzdCBjb21wb25l bnQgb2Ygb25lIGRpc3BsYXkgcGlwZWxpbmUsIGZvciBleGFtcGxlIG9uZSBvZgo+Pj4+Pj4gKyAg ICAgIHRoZSBhdmFpbGFibGUgT1ZMIG9yIFJETUEgYmxvY2tzLgo+Pj4+Pj4gKyAgICAgIFNvbWUg TWVkaWFUZWsgU29DcyBzdXBwb3J0IG11bHRpcGxlIGRpc3BsYXkgb3V0cHV0cyBwZXIgTU1TWVMu Cj4+Pj4+Cj4+Pj4+IFRoaXMgcGF0Y2ggbG9va3MgZ29vZCB0byBtZS4gSnVzdCB3YW50IHRvIHNo YXJlIGFub3RoZXIgaW5mb3JtYXRpb24gZm9yIHlvdS4KPj4+Pj4gSGVyZSBpcyBhbiBleGFtcGxl IHRoYXQgbW1zeXMvdmRvc3lzIGNvdWxkIHBvaW50IHRvIHRoZSBkaXNwbGF5IGludGVyZmFjZSBu b2RlLgo+Pj4+Pgo+Pj4+PiB2ZG9zeXMwOiBzeXNjb25AMWMwMWEwMDAgewo+Pj4+PiAgICAgICAg ICAgICAgbW1zeXMtZGlzcGxheS1pbnRlcmZhY2UgPSA8JmRzaTA+LCA8JmRzaTE+LCA8JmRwX2lu dGYwPjsKPj4+Pj4gfTsKPj4+Pj4gICAgIAo+Pj4+PiB2ZG9zeXMxOiBzeXNjb25AMWMxMDAwMDAg ewo+Pj4+PiAgICAgICAgICAgICAgbW1zeXMtZGlzcGxheS1pbnRlcmZhY2UgPSA8JmRwX2ludGYx PjsKPj4+Pj4gfTsKPj4+Pj4KPj4+Pj4gVGhlcmUgaXMgbm8gY29uZmxpY3QgdGhhdCBtbXN5cy92 ZG9zeXMgcG9pbnQgdG8gZmlyc3QgY29tcG9uZW50IG9mIG9uZSBkaXNwbGF5IHBpcGVsaW5lIG9y IHBvaW50IHRvIGRpc3BsYXkgaW50ZXJmYWNlLgo+Pj4+PiBCb3RoIGNvdWxkIGNvLWV4aXN0Lgo+ Pj4+Pgo+Pj4+Cj4+Pj4gSGV5IENLLAo+Pj4+Cj4+Pj4geWVzLCB0aGlzIGNvdWxkIGJlIGFuIGFs dGVybmF0aXZlIHRvIHRoZSBPRiBncmFwaHMsIGFuZCBJJ20gc3VyZSB0aGF0IGl0J2Qgd29yaywK Pj4+PiBldmVuIHRob3VnaCB0aGlzIGtpbmQgb2Ygc29sdXRpb24gd291bGQgc3RpbGwgcmVxdWly ZSBwYXJ0aWFsIGhhcmRjb2Rpbmcgb2YgdGhlCj4+Pj4gZGlzcGxheSBwYXRocyB1cCB1bnRpbCBt bXN5cy1kaXNwbGF5LWludGVyZmFjZSAoc28sIHVwIHVudGlsIERTSTAsIG9yIERTSTEsIGV0Yyku Cj4+Pj4KPj4+PiBUaGUgcHJvYmxlbSB3aXRoIGEgc29sdXRpb24gbGlrZSB0aGlzIGlzIHRoYXQs IHdlbGwsIGV2ZW4gdGhvdWdoIGl0IHdvdWxkIHdvcmssCj4+Pj4gZXZlbiBpZiB3ZSBpZ25vcmUg dGhlIHN1Ym9wdGltYWwgcGFydGlhbCBoYXJkY29kaW5nLCBPRiBncmFwaHMgYXJlIHNvbWV0aGlu Zwo+Pj4+IGdlbmVyaWMsIHdoaWxlIHRoZSBtbXN5cy1kaXNwbGF5LWludGVyZmFjZSB3b3VsZCBi ZSBhIE1lZGlhVGVrIHNwZWNpZmljL2N1c3RvbQo+Pj4+IHByb3BlcnR5Lgo+Pj4+Cj4+Pj4gSW4g dGhlIGVuZCwgcmV1c2luZyBnZW5lcmljIGtlcm5lbCBhcGlzL2ludGVyZmFjZXMvZXRjIGlzIGFs d2F5cyBwcmVmZXJyZWQKPj4+PiBjb21wYXJlZCB0byBjdXN0b20gc29sdXRpb25zLCBlc3BlY2lh bGx5IGluIHRoaXMgY2FzZSwgaW4gd2hpY2ggdGhlIGdlbmVyaWMKPj4+PiBzdHVmZiBpcyBvbi1w YXIgKG9yIGFjdHVhbGx5LCBkZXBlbmRpbmcgcHVyZWx5IG9uIHBlcnNvbmFsIG9waW5pb25zLCBz dXBlcmlvcikuCj4+Pj4KPj4+PiBBcyBmb3IgdGhlIHR3byB0byBjby1leGlzdCwgSSdtIG5vdCBz dXJlIHRoYXQgdGhpcyBpcyBhY3R1YWxseSBuZWVkZWQsIGFzIHRoZQo+Pj4+IE9GIGdyYXBocyBh cmUgYWxyZWFkeSAoYXQgdGhlIGVuZCBvZiB0aGUgZ3JhcGgpIHBvaW50aW5nIHRvIHRoZSBkaXNw bGF5IGludGVyZmFjZS4KPj4+Pgo+Pj4+IEluIGFueSBjYXNlLCBqdXN0IGFzIGEgcmVtaW5kZXI6 IGlmIHRoZXJlIHdpbGwgYmUgYW55IG5lZWQgdG8gYWRkIGFueSBjdXN0b20KPj4+PiBNZWRpYVRl ayBzcGVjaWZpYyBwcm9wZXJ0aWVzIGxhdGVyLCBpdCdzIG9rIGFuZCB3ZSBjYW4gZG8gdGhhdCBh dCBhbnkgdGltZS4KPj4+Cj4+PiBUaGUgYWx0ZXJuYXRpdmUgc29sdXRpb24gaXMgdXNpbmcgT0Yg Z3JhcGhzIHRvIHBvaW50IGRpc3BsYXkgaW50ZXJmYWNlIGFuZCB1c2UgTWVkaWFUZWsgc3BlY2lm aWMgcHJvcGVydHkgdG8gZmlyc3QgY29tcG9uZW50Ogo+Pj4KPj4+IHZkb3N5czA6IHN5c2NvbkAx YzAxYTAwMCB7Cj4+PiAgICAgICAgICAgICBwb3J0cyB7Cj4+PiAgICAgICAgICAgICAgICAgICAg ICBwb3J0QDAgewo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50IHsK Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUtZW5kcG9p bnQgPSA8JmRzaTBfZW5kcG9pbnQ+Owo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH07Cj4+PiAgICAgICAgICAgICAgICAgICAgICB9Owo+Pj4gICAgCj4+PiAgICAgICAgICAgICAg ICAgICAgICBwb3J0QDEgewo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBv aW50IHsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUt ZW5kcG9pbnQgPSA8JmRzaTFfZW5kcG9pbnQ+Owo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH07Cj4+PiAgICAgICAgICAgICAgICAgICAgICB9Owo+Pj4gICAgCj4+PiAgICAgICAg ICAgICAgICAgICAgICBwb3J0QDIgewo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGVuZHBvaW50IHsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZW1vdGUtZW5kcG9pbnQgPSA8JmRwX2ludGYwX2VuZHBvaW50PjsKPj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9Owo+Pj4gICAgICAgICAgICAgICAgICAgICAgfTsKPj4+ICAgICAg ICAgICAgIH07Cj4+PiAgICAKPj4+ICAgICAgICAgICAgIGRpc3BsYXktZmlyc3QtY29tcG9uZW50 ID0gPCZvdmwwPjsKPj4+IH07Cj4+Pgo+Pj4gQW5kIEkgYWdyZWUgdG8gaXQncyBiZXR0ZXIgdG8g a2VlcCBvbmx5IE9GIGdyYXBocyBwcm9wZXJ0eSwgc28gaXQgd291bGQgYmUKPj4+Cj4+PiB2ZG9z eXMwOiBzeXNjb25AMWMwMWEwMDAgewo+Pj4gICAgICAgICAgICAgcG9ydHMgewo+Pj4gICAgICAg ICAgICAgICAgICAgICAgcG9ydEAwIHsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbmRwb2ludCB7Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVtb3RlLWVuZHBvaW50ID0gPCZkc2kwX2VuZHBvaW50PjsKPj4+ICAgICAgICAgICAgICAgICAg ICAgCj4+PiAgICAgICAgICAgICAgfTsKPj4+ICAgICAgICAgICAgICAgICAgICAgIH07Cj4+PiAg ICAKPj4+ICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMSB7Cj4+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZW5kcG9pbnQgewo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlbW90ZS1lbmRwb2ludCA9IDwmZHNpMV9lbmRwb2ludD47Cj4+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCj4+PiAgICAgIH07Cj4+PiAgICAgICAgICAgICAgICAg ICAgICB9Owo+Pj4gICAgCj4+PiAgICAgICAgICAgICAgICAgICAgICBwb3J0QDIgewo+Pj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50IHsKPj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUtZW5kcG9pbnQgPSA8JmRwX2ludGYwX2Vu ZHBvaW50PjsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4+PiA7Cj4+PiAg ICAgICAgICAgICAgICAgICAgICB9Owo+Pj4gICAgICAgICAgICAgfTsKPj4+IH07Cj4+Pgo+Pj4g TWF5YmUgd2UgY291bGQgdXNlIE9GIGdyYXBocyBmb3IgYm90aCBmaXJzdCBjb21wb25lbnQgYW5k IGRpc3BsYXkgaW50ZXJmYWNlIGFuZCBkcm9wIHVzaW5nIE1lZGlhVGVrIHNwZWNpZmljIHByb3Bl cnR5Lgo+Pj4KPj4KPj4gV2UgY291bGQsIG9yIHdlIGNhbiBzaW1wbHkgd2FsayB0aHJvdWdoIHRo ZSBPRiBHcmFwaCBpbiB0aGUgZHJpdmVyIGFuZCBnZXQgdGhlCj4+IGRpc3BsYXkgaW50ZXJmYWNl IGxpa2UgdGhhdCwgYXMgaXQncyBib2FyZC1zcGVjaWZpYyA7LSkKPj4KPj4gLi4uYnV0IGFueXdh eSwgbGV0J3Mgc2VlIHRoYXQgbGF0ZXI6IGFmdGVyIGdldHRpbmcgdGhpcyBzZXJpZXMgdXBzdHJl YW1lZCwgSSB3aWxsCj4+IGNvbnZlcnQgYWxsIE1lZGlhVGVrIGJvYXJkcyAoaW5jbHVkaW5nIENo cm9tZWJvb2tzKSB0byB1c2UgdGhlIGdyYXBocyBpbnN0ZWFkLCBhbmQKPj4geW91J2xsIHNlZSB0 aGF0LCBhdCBsZWFzdCBmb3IgdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgYm9hcmRzLCB0aGVyZSdz IG5vIG5lZWQgZm9yCj4+IGFueSBjdXN0b20gcHJvcGVydHkuCj4+Cj4+IEFsc28sIHNldHRpbmcg dGhlIERTSTAvMS9kcGludGYgZW5kcG9pbnQgdG8gVkRPMCBpcyB0ZWNobmljYWxseSB3cm9uZywg YXMgdGhhdCBpcwo+PiBzdXBwb3NlZCB0byBiZSB0aGUgbGFzdCBvbmUsIGFuZCBhIGdyYXBoIGlz IGNvbmNlcHR1YWxseSBzdXBwb3NlZCB0byBnbyBmcm9tIHRoZQo+PiBmaXJzdCB0byB0aGUgbGFz dCBpbiBzZXF1ZW5jZS4KPj4KPj4gKmlmKiB3ZSB3aWxsIGV2ZXIgbmVlZCAocHJvYmFibHkgbm90 KSB0byBnZXQgdGhlIFZETzAgbm9kZSB0byBwb2ludCBkaXJlY3RseSB0bwo+PiB0aGUgbGFzdCBu b2RlIGZvciB3aGF0ZXZlciByZWFzb24sIHRoZSByaWdodCB3YXkgd291bGQgYmUgdGhlIGZpcnN0 IG9uZSB5b3Ugc2FpZCwKPj4gc28sIG1lZGlhdGVrLG1tc3lzLWRpc3BsYXktaW50ZXJmYWNlID0g PCZkc2kwPiwgPCZkc2kxPiwgZXRjIGV0Ywo+Pgo+PiAuLi5vciBtZWRpYXRlayxtbXN5cy1wb3Nz aWJsZS1kaXNwbGF5cyA9IDwgLi4uIHBoYW5kbGVzID4KPj4KPj4gLi4ub3IgYW55d2F5LCBtYW55 IG90aGVyIHNvbHV0aW9ucyBhcmUgcG9zc2libGUgLSBidXQgYWdhaW4sIEkgdGhpbmsgdGhpcyBp cyBub3QKPj4gdGhlIHJpZ2h0IHRpbWUgdG8gdGhpbmsgYWJvdXQgdGhhdC4gS25vd2luZyB0aGF0 IHRoZXJlIGFyZSBldmVudHVhbCBzb2x1dGlvbnMgZm9yCj4+IGFueSBuZWVkIHRoYXQgbWlnaHQg YXJpc2UgaW4gdGhlIGZ1dHVyZSBpcyBlbm91Z2gsIElNTyA6LSkKPiAKPiBUaGlzIGlzIG9uZSBy b3V0aW5nIG9mIGRpc3BsYXkgcGlwZWxpbmUgYW5kIHRoZSByZWxhdGlvbiBvZiBWRE9TWVMwIHdp dGggZGlzcGxheSBwaXBlbGluZS4KPiAKPiAgICAgICAgICAgICAgICAgKy0tIFZET1NZUzAgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICAgICAgICAgICAg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8Cj4gICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiBEUkFNIC0+IElPTU1VIC0tLT4gT1ZMMCAtPiBS RE1BMCAtPiAuLi4gLT4gRFNDMCAtPiBNRVJHRTAgLT4gRFBfSU5URjAgLS0tLT4KPiAgICAgICAg ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfAo+ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gICAgICAgICAgICAgICAgICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAKPiBW aWRlbyBkYXRhIGlzIHJlYWQgYnkgSU9NTVUgZnJvbSBEUkFNIGFuZCBzZW5kIHRvIGRpc3BsYXkg cGlwZWxpbmUuIFRoZW4gdmlkZW8gZGF0YSB0cmF2ZWwgdGhyb3VnaCBmaXJzdCBjb21wb25lbnQg dG8gZGlzcGxheSBpbnRlcmZhY2UuCj4gVkRPU1lTMCBtYW5hZ2UgZWFjaCBjb21wb25lbnQgaW4g dGhlIHBpcGVsaW5lIGluY2x1ZGUgZmlyc3QgY29tcG9uZW50IGFuZCBkaXNwbGF5IGludGVyZmFj ZS4KPiBUaGUgbWFuYWdlbWVudCBpbmNsdWRlIGNsb2NrIGdhdGluZywgcmVzZXQsIHZpZGVvIGRh dGEgaW5wdXQvb3V0cHV0IHJvdXRpbmcuCj4gVGhlIHJlbGF0aW9uc2hpcCBvZiBWRE9TWVRTMCB3 aXRoIGZpcnN0IGNvbXBvbmVudCBpcyB0aGUgc2FtZSBhcyB0aGUgcmVsYXRpb25zaGlwIG9mIFZE T1NZUzAgd2l0aCBkaXNwbGF5IGludGVyZmFjZS4KPiBJZiBWRE9TWVMwIGlzIG5vdCBzdWl0YWJs ZSB1c2luZyBPRiBncmFwaCBwb2ludCB0byBkaXNwbGF5IGludGVyZmFjZSwgVkRPU1lTMCBpcyBh bHNvIG5vdCBzdWl0YWJsZSB1c2luZyBPRiBncmFwaCBwb2ludCB0byBmaXJzdCBjb21wb25lbnQu CgpJbiB0aGUgY2FzZXMgaW4gd2hpY2ggVkRPIGdvZXMgZGlyZWN0bHkgdG8gdGhlIGRpc3BsYXks IGl0ICppcyogcG9zc2libGUgdG8gbWFrZSBpdApwb2ludCBkaXJlY3RseSB0byB0aGUgZGlzcGxh eS4KCkluIHRoZSBjYXNlcyBpbiB3aGljaCB0aGUgcGlwZWxpbmUgaXMgbGFyZ2VyLCBWRE8gc3Rp bGwgcG9pbnRzIHRvIHRoZSBkaXNwbGF5LCBidXQKb25seSBsYXRlciBpbiB0aGUgcGlwZWxpbmUu Cgo+IFRoZSBqb2Igb2YgdGhlIGNvbXBvbmVudCBpbiBkaXNwbGF5IHBpcGVsaW5lIGlzIHRvIHBy b2Nlc3MgdGhlIHZpZGVvIGRhdGEsCj4gYnV0IHRoZSBqb2Igb2YgVkRPU1lTMCBpcyB0byBtYW5h Z2UgKGNsb2NrIGdhdGluZywgcmVzZXQsIHJvdXRpbmcpIHRoZSBwaXBlbGluZS4KPiBJZiB0aGUg T0YgZ3JhcGggaXMgdG8gc2hvdyB0aGUgdmlkZW8gZGF0YSB0cmF2ZWwgcGF0aCwgVkRPU1lTMCBz aG91bGQgbm90IGV4aXN0IGluIHRoZSBPRiBncmFwaC4KPiAKPiBSZWdhcmRzLAo+IENLCj4gCj4+ Cj4+IENoZWVycywKPj4gQW5nZWxvCj4+Cj4+PiBSZWdhcmRzLAo+Pj4gQ0sKPj4+Cj4+Pj4KPj4+ PiBDaGVlcnMhCj4+Pj4gQW5nZWxvCj4+Pj4KPj4+Pj4gUmVnYXJkcywKPj4+Pj4gQ0sKPj4+Pj4K Pj4+Pj4+ICsgICAgcHJvcGVydGllczoKPj4+Pj4+ICsgICAgICBlbmRwb2ludEAwOgo+Pj4+Pj4g KyAgICAgICAgJHJlZjogL3NjaGVtYXMvZ3JhcGgueWFtbCMvcHJvcGVydGllcy9lbmRwb2ludAo+ Pj4+Pj4gKyAgICAgICAgZGVzY3JpcHRpb246IE91dHB1dCB0byB0aGUgcHJpbWFyeSBkaXNwbGF5 IHBpcGVsaW5lCj4+Pj4+PiArCj4+Pj4+PiArICAgICAgZW5kcG9pbnRAMToKPj4+Pj4+ICsgICAg ICAgICRyZWY6IC9zY2hlbWFzL2dyYXBoLnlhbWwjL3Byb3BlcnRpZXMvZW5kcG9pbnQKPj4+Pj4+ ICsgICAgICAgIGRlc2NyaXB0aW9uOiBPdXRwdXQgdG8gdGhlIHNlY29uZGFyeSBkaXNwbGF5IHBp cGVsaW5lCj4+Pj4+PiArCj4+Pj4+PiArICAgICAgZW5kcG9pbnRAMjoKPj4+Pj4+ICsgICAgICAg ICRyZWY6IC9zY2hlbWFzL2dyYXBoLnlhbWwjL3Byb3BlcnRpZXMvZW5kcG9pbnQKPj4+Pj4+ICsg ICAgICAgIGRlc2NyaXB0aW9uOiBPdXRwdXQgdG8gdGhlIHRlcnRpYXJ5IGRpc3BsYXkgcGlwZWxp bmUKPj4+Pj4+ICsKPj4+Pj4+ICsgICAgYW55T2Y6Cj4+Pj4+PiArICAgICAgLSByZXF1aXJlZDoK Pj4+Pj4+ICsgICAgICAgICAgLSBlbmRwb2ludEAwCj4+Pj4+PiArICAgICAgLSByZXF1aXJlZDoK Pj4+Pj4+ICsgICAgICAgICAgLSBlbmRwb2ludEAxCj4+Pj4+PiArICAgICAgLSByZXF1aXJlZDoK Pj4+Pj4+ICsgICAgICAgICAgLSBlbmRwb2ludEAyCj4+Pj4+PiArCj4+Pj4+PiAgICAgcmVxdWly ZWQ6Cj4+Pj4+PiAgICAgICAtIGNvbXBhdGlibGUKPj4+Pj4+ICAgICAgIC0gcmVnCj4+Pj4KPj4+ Pgo+Pgo+PgoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=