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 08CEED597B9 for ; Tue, 12 Nov 2024 23:18:18 +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:Message-ID:References:In-Reply-To:Subject:Cc:To:From:Date: MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=4I0/umEkHMESvC3qIgXCsO3xJ243mX0eXN3WO9pKnZc=; b=pnWFTZtOo3zDEkENErUObY7iDX v1KiyuegZe8xUp7IcKG0APHh23Li6fCdZrBSXntm3FqZOcpAPESjX4MbnGn/1v7EtuwUgeiKERp08 nRD1rwjpJJ1inw/KZdUS8ErPMxngG5pOqfxPwdb2lFn4kcX9DXPN/XhUBQZ9Q5WbglgzXep1gDfQH E7xb3bEk5AVLThbPq1XQyhMljMNdgbjPgBeDFD2wbyk46ux1+cnsaYurmi1+CHb/6L20EsQJIfU80 8fC0UbZuZutncn6DZjpARtz48GF6oB3JsG1PAJ1Nod0Quj8qZZN+ZWImngnoe53XJ85KomNCu2Trk v+f6B60A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tB099-00000005GFv-2lMM; Tue, 12 Nov 2024 23:18:07 +0000 Received: from mail.manjaro.org ([2a01:4f8:c0c:51f3::1]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB03U-00000005FLP-2rYl; Tue, 12 Nov 2024 23:12:18 +0000 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=manjaro.org; s=2021; t=1731453133; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4I0/umEkHMESvC3qIgXCsO3xJ243mX0eXN3WO9pKnZc=; b=xnSYJeBmZn9GNFWJYuF0tjise9MfXrpkwsPLs3TvfQ+DjC2NUcrnHmAtRassDigPEKc8Ff p6ZGBtEAevz/3s2Hr8xzgFKODfT6Zhs1ya4NtpwjWffpqQmZeHeUS3n4pe3UbdqIm/E/Hu UWuY+KdW0Z7ANcddxsnWQRzHA8ByEYwmb9grAkkJO4Z6W+3OQCF4ypt7/cjRd1q6N4FjV2 0Kl3NinqNQI7eHwEyMMCffZPgYi0ELRHwfs31s3Py5ArrKQxTEm82vEd9jr5YCPxV3wjvU 34UuIlxNGIYuEYsHPXn2wvtsaVK0gmo+aN4FK+n4ACfXMchLM911P3F4fX/qlg== Date: Wed, 13 Nov 2024 00:12:12 +0100 From: Dragan Simic To: Robin Murphy Cc: linux-rockchip@lists.infradead.org, heiko@sntech.de, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, stable@vger.kernel.org Subject: Re: [PATCH] arm64: dts: rockchip: Fix vdd_gpu voltage constraints on PinePhone Pro In-Reply-To: <33f8430e-0adc-4060-afb5-2cc5c79c8dec@arm.com> References: <0718feb8e95344a0b615f61e6d909f6e105e3bf9.1731264205.git.dsimic@manjaro.org> <607a731c-41e9-497a-a08c-f718339610ae@arm.com> <33f8430e-0adc-4060-afb5-2cc5c79c8dec@arm.com> Message-ID: <4ba2d58cf1da5b90930b630ba0978e2c@manjaro.org> X-Sender: dsimic@manjaro.org Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Authentication-Results: ORIGINATING; auth=pass smtp.auth=dsimic@manjaro.org smtp.mailfrom=dsimic@manjaro.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241112_151217_052471_7EDAF7AD X-CRM114-Status: GOOD ( 35.37 ) 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hello Robin, On 2024-11-12 19:51, Robin Murphy wrote: > On 12/11/2024 2:36 pm, Dragan Simic wrote: >> On 2024-11-12 15:19, Robin Murphy wrote: >>> On 10/11/2024 6:44 pm, Dragan Simic wrote: >>>> The regulator-{min,max}-microvolt values for the vdd_gpu regulator >>>> in the >>>> PinePhone Pro device dts file are too restrictive, which prevents >>>> the highest >>>> GPU OPP from being used, slowing the GPU down unnecessarily.  Let's >>>> fix that >>>> by making the regulator-{min,max}-microvolt values less strict, >>>> using the >>>> voltage range that the Silergy SYR838 chip used for the vdd_gpu >>>> regulator is >>>> actually capable of producing. [1][2] >>> >>> Specifying the absolute limits which the regulator driver necessarily >>> already knows doesn't seem particularly useful... Moreover, the >>> RK3399 >>> datasheet specifies the operating range for GPU_VDD as 0.80-1.20V, so >>> at the very least, allowing the regulator to go outside that range >>> seems inadvisable. >> >> Indeed, which is why I already mentioned in the patch description >> that I do plan to update the constraints of all regulators to match >> the summary of the constraints of their consumers.  Though, I plan >> to do that later, as a separate directory-wide cleanup, for which >> I must find and allocate a substantial amount of time, to make sure >> there will be no mistakes. > > Sure, but even if every other DT needs fixing, that still doesn't make > it a good idea to deliberately introduce the same mistake to *this* DT > and thus create even more work to fix it again. There's no value in > being consistently wrong over inconsistently wrong - if there's > justification for changing this DT at all, change it to be right. After thinking a bit more about it, I agree. At least, setting the voltage regulator constraints according to the constraints of its consumer(s) in one place sets an example for what's to be done in the future for the other voltage regulators. >>> However there's a separate datasheet for the >>> RK3399-T variant, which does specify this 875-975mV range and a >>> maximum GPU clock of 600MHz, along with the same 1.5GHz max. >>> Cortex-A72 clock as advertised for RK3399S, so it seems quite >>> possible >>> that these GPU constraints here are in fact intentional as well. >>> Obviously users are free to overclock and overvolt if they wish - I >>> do >>> for my actively-cooled RK3399 board :) - but it's a different matter >>> for mainline to force it upon them. >> >> Well, maybe the RK3399S is the same in that regard as the RK3399-T, >> but maybe it actually isn't -- unfortunately, we don't have some >> official RK3399S datasheet that would provide us with the required >> information.  As another, somewhat unrelated example, we don't have >> some official documentation to tell us is the RK3399S supposed not >> to have working PCI Express interface, which officially isn't present >> in the RK3399-T variant. > > Looking back at the original submission, v2 *was* proposing the > RK3399-T OPPs, with the GPU capped at 600MHz, and it was said that > those are what PPP *should* be using[*]. It seems there was a semantic > objection to having a separate rk3399-t-opp.dtsi at the time, and when > the main DTS was reworked for v3 the 800MHz GPU OPP seems to have been > overlooked. However, since rk3399-t.dtsi does now exist anyway, it > would seem more logical to just use that instead of including > rk3399.dtsi and then overriding it to be pretty much equivalent to the > T variant anyway. Ah, I see, thanks for pointing this out. With this in mind, I think that the RK3399S is actually just the RK3399-T binned specifically for lower leakage values and, as a result, lower power consumption. I've already assumed so, but this reaffirms it. Actually, there's now also the rk3399-s.dtsi, [**] in which I just spotted a rather small, non-critical mistake that I made, for which I'll send a separate patch later. Anyway, the rk3399-t.dtsi, originally known as rk3399-t-opp.dtsi and added in the commit 9176ba910ba0 (arm64: dts: rockchip: Add RK3399-T OPP table, 2022-09-02) specifies a bit higher voltages for the OPPs than those found in the rk3399-s.dtsi, which fits well together with the above-described assumption that the RK3399S is actually just the RK3399-T specifically binned for lower leakage values... ... which also means that the RK3399S's GPU is supposed to run at the GPU OPPs _below_ 800 MHz, just like the RK3399-T, but at slightly lower voltages specified in the rk3399-s.dtsi. Let me dig out that Rockchip Android dtb for the PinePhone Pro that I mentioned already, to provide the last piece of evidence, and I'll come back with the v2 of this patch. [*] https://lore.kernel.org/linux-rockchip/CAN1fySWVVTeGHAD=_hFH+ZdcR_AEiBc0wqes9Y4VRzB=zcdvSw@mail.gmail.com/ [**] https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git/commit/?h=for-next&id=f7f8ec7d8cef4cf62ee13b526d59438c23bbb34f >> However, I fully agree that forcing any kind of an overclock is not >> what we want to do.  Thus, I'll do my best, as I already noted in this >> thread, to extract the dtb from the "reference" Android build that >> Rockchip itself provided for the RK3399S-based PinePhone Pro.  That's >> closest to the official documentation for the RK3399S variant that we >> can get our hands on. >> >>>> This also eliminates the following error messages from the kernel >>>> log: >>>> >>>>    core: _opp_supported_by_regulators: OPP minuV: 1100000 maxuV: >>>> 1150000, not supported by regulator >>>>    panfrost ff9a0000.gpu: _opp_add: OPP not supported by regulators >>>> (800000000) >>>> >>>> These changes to the regulator-{min,max}-microvolt values make the >>>> PinePhone >>>> Pro device dts consistent with the dts files for other Rockchip >>>> RK3399-based >>>> boards and devices.  It's possible to be more strict here, by >>>> specifying the >>>> regulator-{min,max}-microvolt values that don't go outside of what >>>> the GPU >>>> actually may use, as the consumer of the vdd_gpu regulator, but >>>> those changes >>>> are left for a later directory-wide regulator cleanup. >>>> >>>> [1] >>>> https://files.pine64.org/doc/PinePhonePro/PinephonePro-Schematic-V1.0-20211127.pdf >>>> [2] >>>> https://www.t-firefly.com/download/Firefly-RK3399/docs/Chip%20Specifications/DC-DC_SYR837_838.pdf >>>> >>>> Fixes: 78a21c7d5952 ("arm64: dts: rockchip: Add initial support for >>>> Pine64 PinePhone Pro") >>>> Cc: stable@vger.kernel.org >>>> Signed-off-by: Dragan Simic >>>> --- >>>>   arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts | 4 ++-- >>>>   1 file changed, 2 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts >>>> b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts >>>> index 1a44582a49fb..956d64f5b271 100644 >>>> --- a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts >>>> +++ b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts >>>> @@ -410,8 +410,8 @@ vdd_gpu: regulator@41 { >>>>           pinctrl-names = "default"; >>>>           pinctrl-0 = <&vsel2_pin>; >>>>           regulator-name = "vdd_gpu"; >>>> -        regulator-min-microvolt = <875000>; >>>> -        regulator-max-microvolt = <975000>; >>>> +        regulator-min-microvolt = <712500>; >>>> +        regulator-max-microvolt = <1500000>; >>>>           regulator-ramp-delay = <1000>; >>>>           regulator-always-on; >>>>           regulator-boot-on; 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 35029D597B9 for ; Tue, 12 Nov 2024 23:18:12 +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:Message-ID:References:In-Reply-To:Subject:Cc:To:From :Date:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=W3+rdJ8gxTuMzbDq4n51uyXeyOfecbYt1uKxrua5Sk0=; b=z2ljt6pR+QxCyk88SHZ1ORFQdt wnSR3Hk12YvCYxQO82MzMgyCuHDS/83U9M6J7MZAWprCH3ZRZm2UAKDGEijuirpS7obm5W1tpfIcA KpT5heJo/shX/wuY62KjgtFu4Dj9dSzaGT9NDYv3s85F7OoFlLgF6O/jpiK5Efy9Us146MbciC5bB qTAiTNrh1QDH6TcEKPjvtpEmFdrlLR8dJZNmcpMfBI7U9K3vgGpwlKNuiGlyaQCSQluS9rcGfPN33 qJk8DEkjKps98pdFkdd9MUgttZNwhIxddzNS65vd46mZmDtzRpVIcrHTT06crB6Q3esDz0E2Rp45i YN5+ZwVA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tB09A-00000005GGl-2to4; Tue, 12 Nov 2024 23:18:08 +0000 Received: from mail.manjaro.org ([2a01:4f8:c0c:51f3::1]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tB03U-00000005FLP-2rYl; Tue, 12 Nov 2024 23:12:18 +0000 MIME-Version: 1.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=manjaro.org; s=2021; t=1731453133; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4I0/umEkHMESvC3qIgXCsO3xJ243mX0eXN3WO9pKnZc=; b=xnSYJeBmZn9GNFWJYuF0tjise9MfXrpkwsPLs3TvfQ+DjC2NUcrnHmAtRassDigPEKc8Ff p6ZGBtEAevz/3s2Hr8xzgFKODfT6Zhs1ya4NtpwjWffpqQmZeHeUS3n4pe3UbdqIm/E/Hu UWuY+KdW0Z7ANcddxsnWQRzHA8ByEYwmb9grAkkJO4Z6W+3OQCF4ypt7/cjRd1q6N4FjV2 0Kl3NinqNQI7eHwEyMMCffZPgYi0ELRHwfs31s3Py5ArrKQxTEm82vEd9jr5YCPxV3wjvU 34UuIlxNGIYuEYsHPXn2wvtsaVK0gmo+aN4FK+n4ACfXMchLM911P3F4fX/qlg== Date: Wed, 13 Nov 2024 00:12:12 +0100 From: Dragan Simic To: Robin Murphy Cc: linux-rockchip@lists.infradead.org, heiko@sntech.de, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, stable@vger.kernel.org Subject: Re: [PATCH] arm64: dts: rockchip: Fix vdd_gpu voltage constraints on PinePhone Pro In-Reply-To: <33f8430e-0adc-4060-afb5-2cc5c79c8dec@arm.com> References: <0718feb8e95344a0b615f61e6d909f6e105e3bf9.1731264205.git.dsimic@manjaro.org> <607a731c-41e9-497a-a08c-f718339610ae@arm.com> <33f8430e-0adc-4060-afb5-2cc5c79c8dec@arm.com> Message-ID: <4ba2d58cf1da5b90930b630ba0978e2c@manjaro.org> X-Sender: dsimic@manjaro.org Authentication-Results: ORIGINATING; auth=pass smtp.auth=dsimic@manjaro.org smtp.mailfrom=dsimic@manjaro.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241112_151217_052471_7EDAF7AD X-CRM114-Status: GOOD ( 35.37 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms 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-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGVsbG8gUm9iaW4sCgpPbiAyMDI0LTExLTEyIDE5OjUxLCBSb2JpbiBNdXJwaHkgd3JvdGU6Cj4g T24gMTIvMTEvMjAyNCAyOjM2IHBtLCBEcmFnYW4gU2ltaWMgd3JvdGU6Cj4+IE9uIDIwMjQtMTEt MTIgMTU6MTksIFJvYmluIE11cnBoeSB3cm90ZToKPj4+IE9uIDEwLzExLzIwMjQgNjo0NCBwbSwg RHJhZ2FuIFNpbWljIHdyb3RlOgo+Pj4+IFRoZSByZWd1bGF0b3Ite21pbixtYXh9LW1pY3Jvdm9s dCB2YWx1ZXMgZm9yIHRoZSB2ZGRfZ3B1IHJlZ3VsYXRvciAKPj4+PiBpbiB0aGUKPj4+PiBQaW5l UGhvbmUgUHJvIGRldmljZSBkdHMgZmlsZSBhcmUgdG9vIHJlc3RyaWN0aXZlLCB3aGljaCBwcmV2 ZW50cyAKPj4+PiB0aGUgaGlnaGVzdAo+Pj4+IEdQVSBPUFAgZnJvbSBiZWluZyB1c2VkLCBzbG93 aW5nIHRoZSBHUFUgZG93biB1bm5lY2Vzc2FyaWx5LsKgIExldCdzIAo+Pj4+IGZpeCB0aGF0Cj4+ Pj4gYnkgbWFraW5nIHRoZSByZWd1bGF0b3Ite21pbixtYXh9LW1pY3Jvdm9sdCB2YWx1ZXMgbGVz cyBzdHJpY3QsIAo+Pj4+IHVzaW5nIHRoZQo+Pj4+IHZvbHRhZ2UgcmFuZ2UgdGhhdCB0aGUgU2ls ZXJneSBTWVI4MzggY2hpcCB1c2VkIGZvciB0aGUgdmRkX2dwdSAKPj4+PiByZWd1bGF0b3IgaXMK Pj4+PiBhY3R1YWxseSBjYXBhYmxlIG9mIHByb2R1Y2luZy4gWzFdWzJdCj4+PiAKPj4+IFNwZWNp ZnlpbmcgdGhlIGFic29sdXRlIGxpbWl0cyB3aGljaCB0aGUgcmVndWxhdG9yIGRyaXZlciBuZWNl c3NhcmlseQo+Pj4gYWxyZWFkeSBrbm93cyBkb2Vzbid0IHNlZW0gcGFydGljdWxhcmx5IHVzZWZ1 bC4uLiBNb3Jlb3ZlciwgdGhlIAo+Pj4gUkszMzk5Cj4+PiBkYXRhc2hlZXQgc3BlY2lmaWVzIHRo ZSBvcGVyYXRpbmcgcmFuZ2UgZm9yIEdQVV9WREQgYXMgMC44MC0xLjIwViwgc28KPj4+IGF0IHRo ZSB2ZXJ5IGxlYXN0LCBhbGxvd2luZyB0aGUgcmVndWxhdG9yIHRvIGdvIG91dHNpZGUgdGhhdCBy YW5nZQo+Pj4gc2VlbXMgaW5hZHZpc2FibGUuCj4+IAo+PiBJbmRlZWQsIHdoaWNoIGlzIHdoeSBJ IGFscmVhZHkgbWVudGlvbmVkIGluIHRoZSBwYXRjaCBkZXNjcmlwdGlvbgo+PiB0aGF0IEkgZG8g cGxhbiB0byB1cGRhdGUgdGhlIGNvbnN0cmFpbnRzIG9mIGFsbCByZWd1bGF0b3JzIHRvIG1hdGNo Cj4+IHRoZSBzdW1tYXJ5IG9mIHRoZSBjb25zdHJhaW50cyBvZiB0aGVpciBjb25zdW1lcnMuwqAg VGhvdWdoLCBJIHBsYW4KPj4gdG8gZG8gdGhhdCBsYXRlciwgYXMgYSBzZXBhcmF0ZSBkaXJlY3Rv cnktd2lkZSBjbGVhbnVwLCBmb3Igd2hpY2gKPj4gSSBtdXN0IGZpbmQgYW5kIGFsbG9jYXRlIGEg c3Vic3RhbnRpYWwgYW1vdW50IG9mIHRpbWUsIHRvIG1ha2Ugc3VyZQo+PiB0aGVyZSB3aWxsIGJl IG5vIG1pc3Rha2VzLgo+IAo+IFN1cmUsIGJ1dCBldmVuIGlmIGV2ZXJ5IG90aGVyIERUIG5lZWRz IGZpeGluZywgdGhhdCBzdGlsbCBkb2Vzbid0IG1ha2UKPiBpdCBhIGdvb2QgaWRlYSB0byBkZWxp YmVyYXRlbHkgaW50cm9kdWNlIHRoZSBzYW1lIG1pc3Rha2UgdG8gKnRoaXMqIERUCj4gYW5kIHRo dXMgY3JlYXRlIGV2ZW4gbW9yZSB3b3JrIHRvIGZpeCBpdCBhZ2Fpbi4gVGhlcmUncyBubyB2YWx1 ZSBpbgo+IGJlaW5nIGNvbnNpc3RlbnRseSB3cm9uZyBvdmVyIGluY29uc2lzdGVudGx5IHdyb25n IC0gaWYgdGhlcmUncwo+IGp1c3RpZmljYXRpb24gZm9yIGNoYW5naW5nIHRoaXMgRFQgYXQgYWxs LCBjaGFuZ2UgaXQgdG8gYmUgcmlnaHQuCgpBZnRlciB0aGlua2luZyBhIGJpdCBtb3JlIGFib3V0 IGl0LCBJIGFncmVlLiAgQXQgbGVhc3QsIHNldHRpbmcgdGhlCnZvbHRhZ2UgcmVndWxhdG9yIGNv bnN0cmFpbnRzIGFjY29yZGluZyB0byB0aGUgY29uc3RyYWludHMgb2YgaXRzCmNvbnN1bWVyKHMp IGluIG9uZSBwbGFjZSBzZXRzIGFuIGV4YW1wbGUgZm9yIHdoYXQncyB0byBiZSBkb25lIGluCnRo ZSBmdXR1cmUgZm9yIHRoZSBvdGhlciB2b2x0YWdlIHJlZ3VsYXRvcnMuCgo+Pj4gSG93ZXZlciB0 aGVyZSdzIGEgc2VwYXJhdGUgZGF0YXNoZWV0IGZvciB0aGUKPj4+IFJLMzM5OS1UIHZhcmlhbnQs IHdoaWNoIGRvZXMgc3BlY2lmeSB0aGlzIDg3NS05NzVtViByYW5nZSBhbmQgYQo+Pj4gbWF4aW11 bSBHUFUgY2xvY2sgb2YgNjAwTUh6LCBhbG9uZyB3aXRoIHRoZSBzYW1lIDEuNUdIeiBtYXguCj4+ PiBDb3J0ZXgtQTcyIGNsb2NrIGFzIGFkdmVydGlzZWQgZm9yIFJLMzM5OVMsIHNvIGl0IHNlZW1z IHF1aXRlIAo+Pj4gcG9zc2libGUKPj4+IHRoYXQgdGhlc2UgR1BVIGNvbnN0cmFpbnRzIGhlcmUg YXJlIGluIGZhY3QgaW50ZW50aW9uYWwgYXMgd2VsbC4KPj4+IE9idmlvdXNseSB1c2VycyBhcmUg ZnJlZSB0byBvdmVyY2xvY2sgYW5kIG92ZXJ2b2x0IGlmIHRoZXkgd2lzaCAtIEkgCj4+PiBkbwo+ Pj4gZm9yIG15IGFjdGl2ZWx5LWNvb2xlZCBSSzMzOTkgYm9hcmQgOikgLSBidXQgaXQncyBhIGRp ZmZlcmVudCBtYXR0ZXIKPj4+IGZvciBtYWlubGluZSB0byBmb3JjZSBpdCB1cG9uIHRoZW0uCj4+ IAo+PiBXZWxsLCBtYXliZSB0aGUgUkszMzk5UyBpcyB0aGUgc2FtZSBpbiB0aGF0IHJlZ2FyZCBh cyB0aGUgUkszMzk5LVQsCj4+IGJ1dCBtYXliZSBpdCBhY3R1YWxseSBpc24ndCAtLSB1bmZvcnR1 bmF0ZWx5LCB3ZSBkb24ndCBoYXZlIHNvbWUKPj4gb2ZmaWNpYWwgUkszMzk5UyBkYXRhc2hlZXQg dGhhdCB3b3VsZCBwcm92aWRlIHVzIHdpdGggdGhlIHJlcXVpcmVkCj4+IGluZm9ybWF0aW9uLsKg IEFzIGFub3RoZXIsIHNvbWV3aGF0IHVucmVsYXRlZCBleGFtcGxlLCB3ZSBkb24ndCBoYXZlCj4+ IHNvbWUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB0byB0ZWxsIHVzIGlzIHRoZSBSSzMzOTlTIHN1 cHBvc2VkIG5vdAo+PiB0byBoYXZlIHdvcmtpbmcgUENJIEV4cHJlc3MgaW50ZXJmYWNlLCB3aGlj aCBvZmZpY2lhbGx5IGlzbid0IHByZXNlbnQKPj4gaW4gdGhlIFJLMzM5OS1UIHZhcmlhbnQuCj4g Cj4gTG9va2luZyBiYWNrIGF0IHRoZSBvcmlnaW5hbCBzdWJtaXNzaW9uLCB2MiAqd2FzKiBwcm9w b3NpbmcgdGhlCj4gUkszMzk5LVQgT1BQcywgd2l0aCB0aGUgR1BVIGNhcHBlZCBhdCA2MDBNSHos IGFuZCBpdCB3YXMgc2FpZCB0aGF0Cj4gdGhvc2UgYXJlIHdoYXQgUFBQICpzaG91bGQqIGJlIHVz aW5nWypdLiBJdCBzZWVtcyB0aGVyZSB3YXMgYSBzZW1hbnRpYwo+IG9iamVjdGlvbiB0byBoYXZp bmcgYSBzZXBhcmF0ZSByazMzOTktdC1vcHAuZHRzaSBhdCB0aGUgdGltZSwgYW5kIHdoZW4KPiB0 aGUgbWFpbiBEVFMgd2FzIHJld29ya2VkIGZvciB2MyB0aGUgODAwTUh6IEdQVSBPUFAgc2VlbXMg dG8gaGF2ZSBiZWVuCj4gb3Zlcmxvb2tlZC4gSG93ZXZlciwgc2luY2UgcmszMzk5LXQuZHRzaSBk b2VzIG5vdyBleGlzdCBhbnl3YXksIGl0Cj4gd291bGQgc2VlbSBtb3JlIGxvZ2ljYWwgdG8ganVz dCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGluY2x1ZGluZwo+IHJrMzM5OS5kdHNpIGFuZCB0aGVuIG92 ZXJyaWRpbmcgaXQgdG8gYmUgcHJldHR5IG11Y2ggZXF1aXZhbGVudCB0byB0aGUKPiBUIHZhcmlh bnQgYW55d2F5LgoKQWgsIEkgc2VlLCB0aGFua3MgZm9yIHBvaW50aW5nIHRoaXMgb3V0LiAgV2l0 aCB0aGlzIGluIG1pbmQsIEkgdGhpbmsKdGhhdCB0aGUgUkszMzk5UyBpcyBhY3R1YWxseSBqdXN0 IHRoZSBSSzMzOTktVCBiaW5uZWQgc3BlY2lmaWNhbGx5CmZvciBsb3dlciBsZWFrYWdlIHZhbHVl cyBhbmQsIGFzIGEgcmVzdWx0LCBsb3dlciBwb3dlciBjb25zdW1wdGlvbi4KSSd2ZSBhbHJlYWR5 IGFzc3VtZWQgc28sIGJ1dCB0aGlzIHJlYWZmaXJtcyBpdC4KCkFjdHVhbGx5LCB0aGVyZSdzIG5v dyBhbHNvIHRoZSByazMzOTktcy5kdHNpLCBbKipdIGluIHdoaWNoIEkganVzdApzcG90dGVkIGEg cmF0aGVyIHNtYWxsLCBub24tY3JpdGljYWwgbWlzdGFrZSB0aGF0IEkgbWFkZSwgZm9yIHdoaWNo CkknbGwgc2VuZCBhIHNlcGFyYXRlIHBhdGNoIGxhdGVyLgoKQW55d2F5LCB0aGUgcmszMzk5LXQu ZHRzaSwgb3JpZ2luYWxseSBrbm93biBhcyByazMzOTktdC1vcHAuZHRzaSBhbmQKYWRkZWQgaW4g dGhlIGNvbW1pdCA5MTc2YmE5MTBiYTAgKGFybTY0OiBkdHM6IHJvY2tjaGlwOiBBZGQgUkszMzk5 LVQKT1BQIHRhYmxlLCAyMDIyLTA5LTAyKSBzcGVjaWZpZXMgYSBiaXQgaGlnaGVyIHZvbHRhZ2Vz IGZvciB0aGUgT1BQcwp0aGFuIHRob3NlIGZvdW5kIGluIHRoZSByazMzOTktcy5kdHNpLCB3aGlj aCBmaXRzIHdlbGwgdG9nZXRoZXIgd2l0aAp0aGUgYWJvdmUtZGVzY3JpYmVkIGFzc3VtcHRpb24g dGhhdCB0aGUgUkszMzk5UyBpcyBhY3R1YWxseSBqdXN0IHRoZQpSSzMzOTktVCBzcGVjaWZpY2Fs bHkgYmlubmVkIGZvciBsb3dlciBsZWFrYWdlIHZhbHVlcy4uLgoKLi4uIHdoaWNoIGFsc28gbWVh bnMgdGhhdCB0aGUgUkszMzk5UydzIEdQVSBpcyBzdXBwb3NlZCB0byBydW4gYXQKdGhlIEdQVSBP UFBzIF9iZWxvd18gODAwIE1IeiwganVzdCBsaWtlIHRoZSBSSzMzOTktVCwgYnV0IGF0IHNsaWdo dGx5Cmxvd2VyIHZvbHRhZ2VzIHNwZWNpZmllZCBpbiB0aGUgcmszMzk5LXMuZHRzaS4KCkxldCBt ZSBkaWcgb3V0IHRoYXQgUm9ja2NoaXAgQW5kcm9pZCBkdGIgZm9yIHRoZSBQaW5lUGhvbmUgUHJv IHRoYXQKSSBtZW50aW9uZWQgYWxyZWFkeSwgdG8gcHJvdmlkZSB0aGUgbGFzdCBwaWVjZSBvZiBl dmlkZW5jZSwgYW5kIEknbGwKY29tZSBiYWNrIHdpdGggdGhlIHYyIG9mIHRoaXMgcGF0Y2guCgpb Kl0gCmh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LXJvY2tjaGlwL0NBTjFmeVNXVlZUZUdI QUQ9X2hGSCtaZGNSX0FFaUJjMHdxZXM5WTRWUnpCPXpjZHZTd0BtYWlsLmdtYWlsLmNvbS8KWyoq XSAKaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbW1pbmQv bGludXgtcm9ja2NoaXAuZ2l0L2NvbW1pdC8/aD1mb3ItbmV4dCZpZD1mN2Y4ZWM3ZDhjZWY0Y2Y2 MmVlMTNiNTI2ZDU5NDM4YzIzYmJiMzRmCgo+PiBIb3dldmVyLCBJIGZ1bGx5IGFncmVlIHRoYXQg Zm9yY2luZyBhbnkga2luZCBvZiBhbiBvdmVyY2xvY2sgaXMgbm90Cj4+IHdoYXQgd2Ugd2FudCB0 byBkby7CoCBUaHVzLCBJJ2xsIGRvIG15IGJlc3QsIGFzIEkgYWxyZWFkeSBub3RlZCBpbiB0aGlz Cj4+IHRocmVhZCwgdG8gZXh0cmFjdCB0aGUgZHRiIGZyb20gdGhlICJyZWZlcmVuY2UiIEFuZHJv aWQgYnVpbGQgdGhhdAo+PiBSb2NrY2hpcCBpdHNlbGYgcHJvdmlkZWQgZm9yIHRoZSBSSzMzOTlT LWJhc2VkIFBpbmVQaG9uZSBQcm8uwqAgVGhhdCdzCj4+IGNsb3Nlc3QgdG8gdGhlIG9mZmljaWFs IGRvY3VtZW50YXRpb24gZm9yIHRoZSBSSzMzOTlTIHZhcmlhbnQgdGhhdCB3ZQo+PiBjYW4gZ2V0 IG91ciBoYW5kcyBvbi4KPj4gCj4+Pj4gVGhpcyBhbHNvIGVsaW1pbmF0ZXMgdGhlIGZvbGxvd2lu ZyBlcnJvciBtZXNzYWdlcyBmcm9tIHRoZSBrZXJuZWwgCj4+Pj4gbG9nOgo+Pj4+IAo+Pj4+IMKg wqAgY29yZTogX29wcF9zdXBwb3J0ZWRfYnlfcmVndWxhdG9yczogT1BQIG1pbnVWOiAxMTAwMDAw IG1heHVWOiAKPj4+PiAxMTUwMDAwLCBub3Qgc3VwcG9ydGVkIGJ5IHJlZ3VsYXRvcgo+Pj4+IMKg wqAgcGFuZnJvc3QgZmY5YTAwMDAuZ3B1OiBfb3BwX2FkZDogT1BQIG5vdCBzdXBwb3J0ZWQgYnkg cmVndWxhdG9ycyAKPj4+PiAoODAwMDAwMDAwKQo+Pj4+IAo+Pj4+IFRoZXNlIGNoYW5nZXMgdG8g dGhlIHJlZ3VsYXRvci17bWluLG1heH0tbWljcm92b2x0IHZhbHVlcyBtYWtlIHRoZSAKPj4+PiBQ aW5lUGhvbmUKPj4+PiBQcm8gZGV2aWNlIGR0cyBjb25zaXN0ZW50IHdpdGggdGhlIGR0cyBmaWxl cyBmb3Igb3RoZXIgUm9ja2NoaXAgCj4+Pj4gUkszMzk5LWJhc2VkCj4+Pj4gYm9hcmRzIGFuZCBk ZXZpY2VzLsKgIEl0J3MgcG9zc2libGUgdG8gYmUgbW9yZSBzdHJpY3QgaGVyZSwgYnkgCj4+Pj4g c3BlY2lmeWluZyB0aGUKPj4+PiByZWd1bGF0b3Ite21pbixtYXh9LW1pY3Jvdm9sdCB2YWx1ZXMg dGhhdCBkb24ndCBnbyBvdXRzaWRlIG9mIHdoYXQgCj4+Pj4gdGhlIEdQVQo+Pj4+IGFjdHVhbGx5 IG1heSB1c2UsIGFzIHRoZSBjb25zdW1lciBvZiB0aGUgdmRkX2dwdSByZWd1bGF0b3IsIGJ1dCAK Pj4+PiB0aG9zZSBjaGFuZ2VzCj4+Pj4gYXJlIGxlZnQgZm9yIGEgbGF0ZXIgZGlyZWN0b3J5LXdp ZGUgcmVndWxhdG9yIGNsZWFudXAuCj4+Pj4gCj4+Pj4gWzFdIAo+Pj4+IGh0dHBzOi8vZmlsZXMu cGluZTY0Lm9yZy9kb2MvUGluZVBob25lUHJvL1BpbmVwaG9uZVByby1TY2hlbWF0aWMtVjEuMC0y MDIxMTEyNy5wZGYKPj4+PiBbMl0gCj4+Pj4gaHR0cHM6Ly93d3cudC1maXJlZmx5LmNvbS9kb3du bG9hZC9GaXJlZmx5LVJLMzM5OS9kb2NzL0NoaXAlMjBTcGVjaWZpY2F0aW9ucy9EQy1EQ19TWVI4 MzdfODM4LnBkZgo+Pj4+IAo+Pj4+IEZpeGVzOiA3OGEyMWM3ZDU5NTIgKCJhcm02NDogZHRzOiBy b2NrY2hpcDogQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgCj4+Pj4gUGluZTY0IFBpbmVQaG9uZSBQ cm8iKQo+Pj4+IENjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnCj4+Pj4gU2lnbmVkLW9mZi1ieTog RHJhZ2FuIFNpbWljIDxkc2ltaWNAbWFuamFyby5vcmc+Cj4+Pj4gLS0tCj4+Pj4gwqAgYXJjaC9h cm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMzOTktcGluZXBob25lLXByby5kdHMgfCA0ICsrLS0K Pj4+PiDCoCAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+ Pj4+IAo+Pj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzM5 OS1waW5lcGhvbmUtcHJvLmR0cyAKPj4+PiBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAv cmszMzk5LXBpbmVwaG9uZS1wcm8uZHRzCj4+Pj4gaW5kZXggMWE0NDU4MmE0OWZiLi45NTZkNjRm NWIyNzEgMTAwNjQ0Cj4+Pj4gLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazMz OTktcGluZXBob25lLXByby5kdHMKPj4+PiArKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL3JvY2tj aGlwL3JrMzM5OS1waW5lcGhvbmUtcHJvLmR0cwo+Pj4+IEBAIC00MTAsOCArNDEwLDggQEAgdmRk X2dwdTogcmVndWxhdG9yQDQxIHsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcGluY3RybC1uYW1l cyA9ICJkZWZhdWx0IjsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcGluY3RybC0wID0gPCZ2c2Vs Ml9waW4+Owo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZWd1bGF0b3ItbmFtZSA9ICJ2ZGRfZ3B1 IjsKPj4+PiAtwqDCoMKgwqDCoMKgwqAgcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODc1MDAw PjsKPj4+PiAtwqDCoMKgwqDCoMKgwqAgcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8OTc1MDAw PjsKPj4+PiArwqDCoMKgwqDCoMKgwqAgcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NzEyNTAw PjsKPj4+PiArwqDCoMKgwqDCoMKgwqAgcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTUwMDAw MD47Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDEwMDA+ Owo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZWd1bGF0b3ItYWx3YXlzLW9uOwo+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoCByZWd1bGF0b3ItYm9vdC1vbjsKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51 eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtcm9ja2NoaXAK