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 B3A2CC77B7F for ; Sun, 22 Jun 2025 13:51:28 +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-Type: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date :Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=oFDaay6ObVe+UiujVij89FfjrwGtWai4DDnEmqpInLE=; b=KEKWxeWzGGnK6KsGl6SLX6HuZG zL0OY7WtZkFCvdXz8mt9HhCD/DeiIrJ1Dvtag7/LyzHq/KrkTqMyOTq+6PPGh3xWxKBYi7oqyuJg+ KUkruAsAY5X+y9zeqgARU6fw+sg12PzL3QCsrQUHNmGvXzyIdyULOKEhAFUMJfy2kwrqzcqtMjQUW DyTYTSl7lkX565gCSf2ifATADKxPgYRqCpJF3Kb7MdWVrurPxbRXvknPaE9yxSGNkwWMWVr4YB26z KEAy85K166RbDj5fgnKWKmmj/K3EY8eEhdXdyXYdzcJiinW4yBQHoaAteE5/6dKxMbK+magnqk58q qBpVncRg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uTL6O-00000000uQV-2rKK; Sun, 22 Jun 2025 13:51:20 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uTL46-00000000uKD-3nMP; Sun, 22 Jun 2025 13:49:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=oFDaay6ObVe+UiujVij89FfjrwGtWai4DDnEmqpInLE=; b=0yqyLpAVlfQnyyUFI3XCCmjU/d hRDtO8qUnFY9FQx7ktw8FLvqR0u9rtq4nycjmwVs+TEWQrDNBDZ0WkVwumb9volVpfH1lzAbpFxr2 t2szVJ7sD3VRredSZ24Xk6v44DlJU8HqrOktbMfJCE55V8OrrPhn7Aa/BtrnL2rOOdDN1M+PEb3Bh ltnZadRUDO5AexCLF0Tnm+t+vOrWyHfKjSxxbTFR3Ok7MPxaWv+xHjcUaT6Qf+crEeJgAjIW/WEKk nu7zHQwgHKLb/fvRJaJAbqJ7Mc9jj1I+19AF/6t8ZRfTxVUI1s6ifcwGqBQryEd/6UF3vR5YPc77C NBhEDGrw==; Received: from [185.15.108.45] (helo=phil.localnet) by gloria.sntech.de with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uTL3y-0004W7-K6; Sun, 22 Jun 2025 15:48:50 +0200 From: Heiko Stuebner To: Alexey Charkov Cc: Nicolas Frattaroli , XiaoDong Huang , Piotr Oniszczuk , Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, Jonas Karlman Subject: Re: [PATCH 1/4] arm64: dts: rockchip: list all CPU supplies on ArmSoM Sige5 Date: Sun, 22 Jun 2025 15:48:49 +0200 Message-ID: <5897576.DvuYhMxLoT@phil> In-Reply-To: References: <20250603-sige5-updates-v1-0-717e8ce4ab77@gmail.com> <3286000.Y6S9NjorxK@phil> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250622_064859_111266_F835E45C X-CRM114-Status: GOOD ( 62.63 ) 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 Am Samstag, 21. Juni 2025, 23:21:11 Mitteleurop=C3=A4ische Sommerzeit schri= eb Alexey Charkov: > On Sat, Jun 21, 2025 at 11:44=E2=80=AFPM Heiko Stuebner = wrote: > > > > Am Samstag, 21. Juni 2025, 21:35:56 Mitteleurop=C3=A4ische Sommerzeit s= chrieb Alexey Charkov: > > > On Fri, Jun 20, 2025 at 8:02=E2=80=AFPM Alexey Charkov wrote: > > > > > > > > On Wed, Jun 18, 2025 at 6:48=E2=80=AFPM Alexey Charkov wrote: > > > > > > > > > > On Wed, Jun 18, 2025 at 6:06=E2=80=AFPM Nicolas Frattaroli > > > > > wrote: > > > > > > > > > > > > Hello, > > > > > > > > > > > > +Cc Jonas Karlman as he is intimately familiar with RK3576 cloc= k shenanigans by now, > > > > > > > > > > > > On Wednesday, 18 June 2025 15:51:45 Central European Summer Tim= e Alexey Charkov wrote: > > > > > > > On Sun, Jun 15, 2025 at 8:00=E2=80=AFPM Piotr Oniszczuk > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Wiadomo=C5=9B=C4=87 napisana przez Alexey Charkov w dniu 9 cze 2025, o godz. 16:05: > > > > > > > > > > > > > > > > > > On Sun, Jun 8, 2025 at 11:24=E2=80=AFAM Piotr Oniszczuk > > > > > > > > > wrote: > > > > > > > > >>> Wiadomo=C5=9B=C4=87 napisana przez Alexey Charkov w dniu 5 cze 2025, o godz. 15:42: > > > > > > > > >>>> Alexey, > > > > > > > > >>>> I see you are using rk3576 board like me (nanopi-m5) > > > > > > > > >>>> Have you on your board correctly working cpu dvfs? > > > > > > > > >>>> I mean: [1][desired clocks reported by kernel sysfs ar= e in pair with [2[]cur clocks? > > > > > > > > >>>> In my case i see mine cpu lives totally on it=E2=80=99= s own with dvfs: > > > > > > > > >>> > > > > > > > > >>> Hi Piotr, > > > > > > > > >>> > > > > > > > > >>> I haven't tried to validate actual running frequencies = vs. requested > > > > > > > > >>> frequencies, but subjective performance and power consu= mption seem to > > > > > > > > >>> be in line with what I expect. > > > > > > > > >> > > > > > > > > >> well - my subjective l&f is that - currently - my rk357= 6 seems =E2=80=9Eslower" than i.e. 4xA53 h618. > > > > > > > > > > > > > > > > > > In my experience, native compilation of GCC 14 using 8 th= reads on > > > > > > > > > RK3576 (mainline with passive cooling and throttling enab= led): 2 hours > > > > > > > > > 6 minutes, on RK3588 (mainline with passive cooling via R= adxa Rock 5B > > > > > > > > > case and throttling enabled but never kicking in): 1 hour= 10 minutes > > > > > > > > > > > > > > > > by curiosity i looked randomly on 3576 vs 3588: > > > > > > > > multithread passmark: 3675 (https://www.cpubenchmark.net/cp= u.php?cpu=3DRockchip+RK3576&id=3D6213) > > > > > > > > multithread passmark: 4530 (https://www.cpubenchmark.net/cp= u.php?cpu=3DRockchip+RK3588&id=3D4906) > > > > > > > > > > > > > > > > assuming 3588 as baseline, 3576 is approx 20% slower on mul= tithread passmark (has ~0,8 comp power of 3588) > > > > > > > > 70 min compile on 3588 should take something like ~86min on= 3576. > > > > > > > > In your case 126min compile on 3576 shows 3576 offers 0,55 = comp power of 3588. > > > > > > > > Roughly 3576 should do this task in 40min less than you cur= rently see i think > > > > > > > > > > > > > > > > > > > > > > > > > Can't see how u-boot would affect CPU speed in Linux, as = long as you > > > > > > > > > use comparable ATF images. Do you use the same kernel and= dtb in all > > > > > > > > > these cases? Also, what's your thermal setup? > > > > > > > > > > > > > > > > yes. in all cases only change was: uboot & atf > > > > > > > > thermal is based on recent collabora series (+ recent pooli= ng fix for clocks return from throttling) > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Not sure UX is a particularly good measure of CPU perform= ance, as long > > > > > > > > > as you've got a properly accelerated DRM graphics pipelin= e. More > > > > > > > > > likely 2D/3D and memory. > > > > > > > > > > > > > > > > indeed. > > > > > > > > For quantified look i=E2=80=99m looking on v.simple approac= h to estimate real clock is http://uob-hpc.github.io/2017/11/22/arm-clock-f= req.html > > > > > > > > by curiosity i looked what it reports on a53/a55/a72/a76 an= d it is surprisingly accurate :-) > > > > > > > > on mine 3576 with collabora uboot+mainline atf is hows 800M= Hz (and in perf. gov it seems to be constant) > > > > > > > > > > > > > > > > > > > > > > > > > > There might be some difference in how PVTPLL behaves on R= K3576 vs. > > > > > > > > > RK3588. But frankly first I would check if you are using = comparable > > > > > > > > > ATF implementations (e.g. upstream TF-A in both cases), k= ernels and > > > > > > > > > thermal environment :) > > > > > > > > > > > > > > > > all tests: the same 6.15.2 mainline + some collabora patches > > > > > > > > > > > > > > > > diffs were: > > > > > > > > 1.collabora uboot[1] + mainline atf 2.13 > > > > > > > > 2.collabora uboot[1] + rockchip rkbin bl31 blob > > > > > > > > 3.vendor uboot (bin dump from friendlyelec ubuntu image) > > > > > > > > > > > > > > > > on 1/2 i see kind of issue with clock values (i.e. perf gov= gives constant 800MHz on mainline atf). > > > > > > > > 3 seems to perform better - (i.e. perf gov gives constant 1= 500MHz so all is snappier/faster) > > > > > > > > > > > > > > There is indeed something weird going on. I've tried running = sbc-bench > > > > > > > [1], and even though I observe dynamically varying CPU freque= ncies > > > > > > > after boot with schedutil governor, once sbc-bench switches t= he > > > > > > > governor to "performance" and goes through the OPPs in descen= ding > > > > > > > frequency order, the CPUs seem to get stuck at the last appli= ed low > > > > > > > frequency. Even after max frequency gets reverted from 408 MH= z to > > > > > > > something higher, even after I switch the governor to somethi= ng else - > > > > > > > no matter what. Only a reboot gets the higher frequencies 'un= stuck' > > > > > > > for me. > > > > > > > > > > > > > > These are all observed at around 55C SoC temperature, so thro= ttling is > > > > > > > not an issue. Regulators are stuck at 950000 uV - way above 7= 00000 uV > > > > > > > that the 408 MHz OPP requires (and power readings seem to mat= ch: I'm > > > > > > > getting about 2.3W consumption at 408 MHz in idle vs. normal = idle > > > > > > > reading of 1.4W at around 1 GHz). > > > > > > > > > > > > > > Not sure what's going on here, and I don't remember seeing an= ything > > > > > > > similar on RK3588. Thoughts welcome. > > > > > > > > > > > > This may once again be a "accidentally uses wrong clock IDs" ty= pe > > > > > > situation. The other possibility is that we're getting confused > > > > > > between what we think the clock rate is and what SCMI actually = set > > > > > > the clock rate to. > > > > > > > > > > > > Things to check is whether the right clock controller (scmi vs = cru) > > > > > > and the right clock id (check ATF source for this) is used. > > > > > > > > > > Clock IDs in the kernel seem to match those in ATF, but I've noti= ced > > > > > what appears to be a buffer overflow in some of the SCMI clock na= mes > > > > > defined in the opensource TF-A (thanks GCC 15 and its zealous > > > > > warnings): > > > > > > > > After some more testing, I tend to confirm what Piotr observed > > > > earlier. Namely, frequency scaling acts weird on any ATF version (be > > > > it binary BL31 or opensource TF-A), as long as mainline u-boot is > > > > used. Using the u-boot binary extracted from the ArmSoM QWRT image > > > > does not lead to "stuck" CPU frequencies when running sbc-bench. > > > > > > > > I'm getting this with the exact same kernel build (6.16-rc1 with so= me > > > > Sige5 related patches, namely v2 of this series, Nicolas' USB > > > > enablement series and TSADC). The only other difference is that the > > > > binary u-boot doesn't have EFI support, so I had to boot into the > > > > ARM64 uncompressed Image instead of vmlinuz.efi, but those were both > > > > taken from the same build. > > > > > > > > What I'm observing during the sbc-bench run: > > > > - It switches the cpufreq governor from schedutil to performance > > > > - It goes through all CPU OPPs in descending frequency order > > > > --- While it does that when booted using mainline u-boot + > > > > vmlinuz.efi: "hardware limits" line in "cpupower -c 0,4 > > > > frequency-info" changes with each OPP change (the max frequency > > > > getting reduced sequentially), then it resets to the initial full > > > > range, but the actual frequency stays stuck at the lowest possible > > > > value > > > > --- While it does that when booted using binary u-boot + Image: > > > > "hardware limits" line in "cpupower -c 0,4 frequency-info" doesn't > > > > change, but the actual frequency gets reduced sequentially. Then af= ter > > > > the iteration over all OPPs is completed it returns to the highest > > > > possible value, and adjusts dynamically based on thermal throttling= as > > > > the benchmark progresses > > > > > > Slight correction: it's not the "hardware limits" line, but rather > > > "current policy". > > > > > > Note that booting mainline u-boot in non-EFI mode (using plain Image) > > > doesn't change the results above. > > > > I'm in a similar boat, while trying to make DSI run on the rk3576. > > Andy from Rockchip was able to make it work "just" by using vendor- > > firmware - while using mainline u-boot (with both mainline TF-A > > or vendor TF-A) produces just black output. > > > > I think when I did the mainline u-boot thing I took the "vendor"-code > > from the armbian rk3576 vendor-u-boot ... but that actually may differ > > from what the vendors provided? >=20 > Just tried booting into u-boot built from ArmSoM sources at [1] - same > issues as using mainline. Either I'm doing something stupid building > it (don't know what though), or the binary shipped in ArmSoM images is > indeed different from what the sources are. Can you list the versions you see for the _working_ binaries? I.e. u-boot and friends may list someversion-gGITHASH thingy like your OPTEE already does: OP-TEE version: 3.13.0-791-g185dc3c92 . Also possibly the build date. I.e. I'm wondering/hoping if we can match to some git commit. Heiko >=20 > FTR, my steps to build the vendor u-boot were: >=20 > make rk3576_defconfig > cp ~/rkbin/bin/rk35/rk3576_bl31_v1.15.elf bl31.elf > cp ~/rkbin/bin/rk35/rk3576_bl32_v1.05.bin tee.bin > make -j12 > make u-boot.itb > ./tools/mkimage -n rk3576 -T rksd -d > ~/rkbin/bin/rk35/rk3576_ddr_lp4_2112MHz_lp5_2736MHz_v1.09.bin:spl/u-boot-= spl-dtb.bin > idbloader.img >=20 > Then I wrote idbloader.img to eMMC starting from sector 64, u-boot.itb > starting from sector 16384. It boots, but exhibits the same "stuck" > CPU frequencies as with mainline u-boot. >=20 > FWIW, I've managed to load Rockchip BL32 as OP-TEE with mainline > u-boot too: turns out the right address to load it is 0x48400000 and > not 0x08400000. It didn't help with the problem though. >=20 > Best regards, > Alexey >=20 > [1] https://github.com/ArmSoM/u-boot/tree/rk3576-6.1-rk3.1 >=20 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 9F9C3C7115A for ; Sun, 22 Jun 2025 13:51:29 +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:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NDvHjxrKWqMjlVCn00Fw5ThuFitJ2LX7O+vfDQQ6LUo=; b=ou5KLR7YzDC2oj GuZ9VmpkYunlhLcJc+mfVmh8+SoirYYm5Rvjmh2WrQ8OfQywRke7EC66vnpxJnqcR+W9FCJBk9Yuq sX45raQOa2lO1VGyoOv8J9O8hAnq5QsWLgQ7fzZ17dkduHIzQOMVBWC7H0H6kndnwE8EBWmoYEDof TiMkfyuQ+fCB2R3rSPon+YYpma014Dgg2EwKkhIck3jgps6aA1v1+NKJLZGZPu1FDsxBstDAXTK/j uqClerVWseR0DlFr1dLJwsSrgXOSjxUzYqa5hthVBaOTzABVxKrCcvnTCrIuVeRCjPh1O8AP+IXWG xZXGRW6kpgdlQCHB62SA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uTL6P-00000000uQZ-0rhT; Sun, 22 Jun 2025 13:51:21 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uTL46-00000000uKD-3nMP; Sun, 22 Jun 2025 13:49:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=oFDaay6ObVe+UiujVij89FfjrwGtWai4DDnEmqpInLE=; b=0yqyLpAVlfQnyyUFI3XCCmjU/d hRDtO8qUnFY9FQx7ktw8FLvqR0u9rtq4nycjmwVs+TEWQrDNBDZ0WkVwumb9volVpfH1lzAbpFxr2 t2szVJ7sD3VRredSZ24Xk6v44DlJU8HqrOktbMfJCE55V8OrrPhn7Aa/BtrnL2rOOdDN1M+PEb3Bh ltnZadRUDO5AexCLF0Tnm+t+vOrWyHfKjSxxbTFR3Ok7MPxaWv+xHjcUaT6Qf+crEeJgAjIW/WEKk nu7zHQwgHKLb/fvRJaJAbqJ7Mc9jj1I+19AF/6t8ZRfTxVUI1s6ifcwGqBQryEd/6UF3vR5YPc77C NBhEDGrw==; Received: from [185.15.108.45] (helo=phil.localnet) by gloria.sntech.de with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uTL3y-0004W7-K6; Sun, 22 Jun 2025 15:48:50 +0200 From: Heiko Stuebner To: Alexey Charkov Subject: Re: [PATCH 1/4] arm64: dts: rockchip: list all CPU supplies on ArmSoM Sige5 Date: Sun, 22 Jun 2025 15:48:49 +0200 Message-ID: <5897576.DvuYhMxLoT@phil> In-Reply-To: References: <20250603-sige5-updates-v1-0-717e8ce4ab77@gmail.com> <3286000.Y6S9NjorxK@phil> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250622_064859_111266_F835E45C X-CRM114-Status: GOOD ( 62.63 ) 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: , Cc: Rob Herring , Conor Dooley , Piotr Oniszczuk , devicetree@vger.kernel.org, Jonas Karlman , linux-kernel@vger.kernel.org, XiaoDong Huang , linux-rockchip@lists.infradead.org, Krzysztof Kozlowski , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org QW0gU2Ftc3RhZywgMjEuIEp1bmkgMjAyNSwgMjM6MjE6MTEgTWl0dGVsZXVyb3DDpGlzY2hlIFNv bW1lcnplaXQgc2NocmllYiBBbGV4ZXkgQ2hhcmtvdjoKPiBPbiBTYXQsIEp1biAyMSwgMjAyNSBh dCAxMTo0NOKAr1BNIEhlaWtvIFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+IHdyb3RlOgo+ID4K PiA+IEFtIFNhbXN0YWcsIDIxLiBKdW5pIDIwMjUsIDIxOjM1OjU2IE1pdHRlbGV1cm9ww6Rpc2No ZSBTb21tZXJ6ZWl0IHNjaHJpZWIgQWxleGV5IENoYXJrb3Y6Cj4gPiA+IE9uIEZyaSwgSnVuIDIw LCAyMDI1IGF0IDg6MDLigK9QTSBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+IHdy b3RlOgo+ID4gPiA+Cj4gPiA+ID4gT24gV2VkLCBKdW4gMTgsIDIwMjUgYXQgNjo0OOKAr1BNIEFs ZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4gd3JvdGU6Cj4gPiA+ID4gPgo+ID4gPiA+ ID4gT24gV2VkLCBKdW4gMTgsIDIwMjUgYXQgNjowNuKAr1BNIE5pY29sYXMgRnJhdHRhcm9saQo+ ID4gPiA+ID4gPG5pY29sYXMuZnJhdHRhcm9saUBjb2xsYWJvcmEuY29tPiB3cm90ZToKPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gSGVsbG8sCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICtDYyBKb25h cyBLYXJsbWFuIGFzIGhlIGlzIGludGltYXRlbHkgZmFtaWxpYXIgd2l0aCBSSzM1NzYgY2xvY2sg c2hlbmFuaWdhbnMgYnkgbm93LAo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBPbiBXZWRuZXNkYXks IDE4IEp1bmUgMjAyNSAxNTo1MTo0NSBDZW50cmFsIEV1cm9wZWFuIFN1bW1lciBUaW1lIEFsZXhl eSBDaGFya292IHdyb3RlOgo+ID4gPiA+ID4gPiA+IE9uIFN1biwgSnVuIDE1LCAyMDI1IGF0IDg6 MDDigK9QTSBQaW90ciBPbmlzemN6dWsKPiA+ID4gPiA+ID4gPiA8cGlvdHIub25pc3pjenVrQGdt YWlsLmNvbT4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IFdpYWRvbW/Fm8SHIG5hcGlzYW5hIHByemV6IEFsZXhl eSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4gdyBkbml1IDkgY3plIDIwMjUsIG8gZ29kei4g MTY6MDU6Cj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IE9uIFN1biwgSnVuIDgs IDIwMjUgYXQgMTE6MjTigK9BTSBQaW90ciBPbmlzemN6dWsKPiA+ID4gPiA+ID4gPiA+ID4gPHBp b3RyLm9uaXN6Y3p1a0BnbWFpbC5jb20+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ID4gPj4+IFdpYWRv bW/Fm8SHIG5hcGlzYW5hIHByemV6IEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4g dyBkbml1IDUgY3plIDIwMjUsIG8gZ29kei4gMTU6NDI6Cj4gPiA+ID4gPiA+ID4gPiA+Pj4+IEFs ZXhleSwKPiA+ID4gPiA+ID4gPiA+ID4+Pj4gSSBzZWUgeW91IGFyZSB1c2luZyByazM1NzYgYm9h cmQgbGlrZSBtZSAobmFub3BpLW01KQo+ID4gPiA+ID4gPiA+ID4gPj4+PiBIYXZlIHlvdSBvbiB5 b3VyIGJvYXJkIGNvcnJlY3RseSB3b3JraW5nIGNwdSBkdmZzPwo+ID4gPiA+ID4gPiA+ID4gPj4+ PiBJIG1lYW46IFsxXVtkZXNpcmVkIGNsb2NrcyByZXBvcnRlZCBieSBrZXJuZWwgc3lzZnMgYXJl IGluIHBhaXIgd2l0aCBbMltdY3VyIGNsb2Nrcz8KPiA+ID4gPiA+ID4gPiA+ID4+Pj4gSW4gbXkg Y2FzZSBpIHNlZSBtaW5lIGNwdSBsaXZlcyB0b3RhbGx5IG9uIGl04oCZcyBvd24gd2l0aCBkdmZz Ogo+ID4gPiA+ID4gPiA+ID4gPj4+Cj4gPiA+ID4gPiA+ID4gPiA+Pj4gSGkgUGlvdHIsCj4gPiA+ ID4gPiA+ID4gPiA+Pj4KPiA+ID4gPiA+ID4gPiA+ID4+PiBJIGhhdmVuJ3QgdHJpZWQgdG8gdmFs aWRhdGUgYWN0dWFsIHJ1bm5pbmcgZnJlcXVlbmNpZXMgdnMuIHJlcXVlc3RlZAo+ID4gPiA+ID4g PiA+ID4gPj4+IGZyZXF1ZW5jaWVzLCBidXQgc3ViamVjdGl2ZSBwZXJmb3JtYW5jZSBhbmQgcG93 ZXIgY29uc3VtcHRpb24gc2VlbSB0bwo+ID4gPiA+ID4gPiA+ID4gPj4+IGJlIGluIGxpbmUgd2l0 aCB3aGF0IEkgZXhwZWN0Lgo+ID4gPiA+ID4gPiA+ID4gPj4KPiA+ID4gPiA+ID4gPiA+ID4+IHdl bGwgLSBteSBzdWJqZWN0aXZlIGwmZiBpcyB0aGF0ICAtIGN1cnJlbnRseSAtIG15IHJrMzU3NiBz ZWVtcyDigJ5zbG93ZXIiIHRoYW4gaS5lLiA0eEE1MyBoNjE4Lgo+ID4gPiA+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiA+ID4gPiBJbiBteSBleHBlcmllbmNlLCBuYXRpdmUgY29tcGlsYXRpb24gb2Yg R0NDIDE0IHVzaW5nIDggdGhyZWFkcyBvbgo+ID4gPiA+ID4gPiA+ID4gPiBSSzM1NzYgKG1haW5s aW5lIHdpdGggcGFzc2l2ZSBjb29saW5nIGFuZCB0aHJvdHRsaW5nIGVuYWJsZWQpOiAyIGhvdXJz Cj4gPiA+ID4gPiA+ID4gPiA+IDYgbWludXRlcywgb24gUkszNTg4IChtYWlubGluZSB3aXRoIHBh c3NpdmUgY29vbGluZyB2aWEgUmFkeGEgUm9jayA1Qgo+ID4gPiA+ID4gPiA+ID4gPiBjYXNlIGFu ZCB0aHJvdHRsaW5nIGVuYWJsZWQgYnV0IG5ldmVyIGtpY2tpbmcgaW4pOiAxIGhvdXIgMTAgbWlu dXRlcwo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IGJ5IGN1cmlvc2l0eSBpIGxvb2tl ZCByYW5kb21seSBvbiAzNTc2IHZzIDM1ODg6Cj4gPiA+ID4gPiA+ID4gPiBtdWx0aXRocmVhZCBw YXNzbWFyazogMzY3NSAoaHR0cHM6Ly93d3cuY3B1YmVuY2htYXJrLm5ldC9jcHUucGhwP2NwdT1S b2NrY2hpcCtSSzM1NzYmaWQ9NjIxMykKPiA+ID4gPiA+ID4gPiA+IG11bHRpdGhyZWFkIHBhc3Nt YXJrOiA0NTMwIChodHRwczovL3d3dy5jcHViZW5jaG1hcmsubmV0L2NwdS5waHA/Y3B1PVJvY2tj aGlwK1JLMzU4OCZpZD00OTA2KQo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IGFzc3Vt aW5nIDM1ODggYXMgYmFzZWxpbmUsIDM1NzYgaXMgYXBwcm94IDIwJSBzbG93ZXIgb24gbXVsdGl0 aHJlYWQgcGFzc21hcmsgKGhhcyB+MCw4IGNvbXAgcG93ZXIgb2YgMzU4OCkKPiA+ID4gPiA+ID4g PiA+IDcwIG1pbiBjb21waWxlIG9uIDM1ODggc2hvdWxkIHRha2Ugc29tZXRoaW5nIGxpa2Ugfjg2 bWluIG9uIDM1NzYuCj4gPiA+ID4gPiA+ID4gPiBJbiB5b3VyIGNhc2UgMTI2bWluIGNvbXBpbGUg b24gMzU3NiBzaG93cyAzNTc2IG9mZmVycyAwLDU1IGNvbXAgcG93ZXIgb2YgMzU4OC4KPiA+ID4g PiA+ID4gPiA+IFJvdWdobHkgMzU3NiBzaG91bGQgZG8gdGhpcyB0YXNrIGluIDQwbWluIGxlc3Mg dGhhbiB5b3UgY3VycmVudGx5IHNlZSBpIHRoaW5rCj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gQ2FuJ3Qgc2VlIGhvdyB1LWJvb3Qgd291bGQgYWZmZWN0 IENQVSBzcGVlZCBpbiBMaW51eCwgYXMgbG9uZyBhcyB5b3UKPiA+ID4gPiA+ID4gPiA+ID4gdXNl IGNvbXBhcmFibGUgQVRGIGltYWdlcy4gRG8geW91IHVzZSB0aGUgc2FtZSBrZXJuZWwgYW5kIGR0 YiBpbiBhbGwKPiA+ID4gPiA+ID4gPiA+ID4gdGhlc2UgY2FzZXM/IEFsc28sIHdoYXQncyB5b3Vy IHRoZXJtYWwgc2V0dXA/Cj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4geWVzLiBpbiBh bGwgY2FzZXMgb25seSBjaGFuZ2Ugd2FzOiB1Ym9vdCAmIGF0Zgo+ID4gPiA+ID4gPiA+ID4gdGhl cm1hbCBpcyBiYXNlZCBvbiByZWNlbnQgY29sbGFib3JhIHNlcmllcyAoKyByZWNlbnQgcG9vbGlu ZyBmaXggZm9yIGNsb2NrcyByZXR1cm4gZnJvbSB0aHJvdHRsaW5nKQo+ID4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gTm90 IHN1cmUgVVggaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBtZWFzdXJlIG9mIENQVSBwZXJmb3JtYW5j ZSwgYXMgbG9uZwo+ID4gPiA+ID4gPiA+ID4gPiBhcyB5b3UndmUgZ290IGEgcHJvcGVybHkgYWNj ZWxlcmF0ZWQgRFJNIGdyYXBoaWNzIHBpcGVsaW5lLiBNb3JlCj4gPiA+ID4gPiA+ID4gPiA+IGxp a2VseSAyRC8zRCBhbmQgbWVtb3J5Lgo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IGlu ZGVlZC4KPiA+ID4gPiA+ID4gPiA+IEZvciBxdWFudGlmaWVkIGxvb2sgaeKAmW0gbG9va2luZyBv biB2LnNpbXBsZSBhcHByb2FjaCB0byBlc3RpbWF0ZSByZWFsIGNsb2NrIGlzIGh0dHA6Ly91b2It aHBjLmdpdGh1Yi5pby8yMDE3LzExLzIyL2FybS1jbG9jay1mcmVxLmh0bWwKPiA+ID4gPiA+ID4g PiA+IGJ5IGN1cmlvc2l0eSBpIGxvb2tlZCB3aGF0IGl0IHJlcG9ydHMgb24gYTUzL2E1NS9hNzIv YTc2IGFuZCBpdCBpcyBzdXJwcmlzaW5nbHkgYWNjdXJhdGUgOi0pCj4gPiA+ID4gPiA+ID4gPiBv biBtaW5lIDM1NzYgd2l0aCBjb2xsYWJvcmEgdWJvb3QrbWFpbmxpbmUgYXRmIGlzIGhvd3MgODAw TUh6IChhbmQgaW4gcGVyZi4gZ292IGl0IHNlZW1zIHRvIGJlIGNvbnN0YW50KQo+ID4gPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gVGhlcmUgbWlnaHQgYmUg c29tZSBkaWZmZXJlbmNlIGluIGhvdyBQVlRQTEwgYmVoYXZlcyBvbiBSSzM1NzYgdnMuCj4gPiA+ ID4gPiA+ID4gPiA+IFJLMzU4OC4gQnV0IGZyYW5rbHkgZmlyc3QgSSB3b3VsZCBjaGVjayBpZiB5 b3UgYXJlIHVzaW5nIGNvbXBhcmFibGUKPiA+ID4gPiA+ID4gPiA+ID4gQVRGIGltcGxlbWVudGF0 aW9ucyAoZS5nLiB1cHN0cmVhbSBURi1BIGluIGJvdGggY2FzZXMpLCBrZXJuZWxzIGFuZAo+ID4g PiA+ID4gPiA+ID4gPiB0aGVybWFsIGVudmlyb25tZW50IDopCj4gPiA+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiA+ID4gYWxsIHRlc3RzOiB0aGUgc2FtZSA2LjE1LjIgbWFpbmxpbmUgKyBzb21lIGNv bGxhYm9yYSBwYXRjaGVzCj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gZGlmZnMgd2Vy ZToKPiA+ID4gPiA+ID4gPiA+IDEuY29sbGFib3JhIHVib290WzFdICsgbWFpbmxpbmUgYXRmIDIu MTMKPiA+ID4gPiA+ID4gPiA+IDIuY29sbGFib3JhIHVib290WzFdICsgcm9ja2NoaXAgcmtiaW4g YmwzMSBibG9iCj4gPiA+ID4gPiA+ID4gPiAzLnZlbmRvciB1Ym9vdCAoYmluIGR1bXAgZnJvbSBm cmllbmRseWVsZWMgdWJ1bnR1IGltYWdlKQo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ IG9uIDEvMiBpIHNlZSBraW5kIG9mIGlzc3VlIHdpdGggY2xvY2sgdmFsdWVzIChpLmUuIHBlcmYg Z292IGdpdmVzIGNvbnN0YW50IDgwME1IeiBvbiBtYWlubGluZSBhdGYpLgo+ID4gPiA+ID4gPiA+ ID4gMyBzZWVtcyB0byBwZXJmb3JtIGJldHRlciAtIChpLmUuIHBlcmYgZ292IGdpdmVzIGNvbnN0 YW50IDE1MDBNSHogc28gYWxsIGlzIHNuYXBwaWVyL2Zhc3RlcikKPiA+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiA+IFRoZXJlIGlzIGluZGVlZCBzb21ldGhpbmcgd2VpcmQgZ29pbmcgb24uIEkndmUg dHJpZWQgcnVubmluZyBzYmMtYmVuY2gKPiA+ID4gPiA+ID4gPiBbMV0sIGFuZCBldmVuIHRob3Vn aCBJIG9ic2VydmUgZHluYW1pY2FsbHkgdmFyeWluZyBDUFUgZnJlcXVlbmNpZXMKPiA+ID4gPiA+ ID4gPiBhZnRlciBib290IHdpdGggc2NoZWR1dGlsIGdvdmVybm9yLCBvbmNlIHNiYy1iZW5jaCBz d2l0Y2hlcyB0aGUKPiA+ID4gPiA+ID4gPiBnb3Zlcm5vciB0byAicGVyZm9ybWFuY2UiIGFuZCBn b2VzIHRocm91Z2ggdGhlIE9QUHMgaW4gZGVzY2VuZGluZwo+ID4gPiA+ID4gPiA+IGZyZXF1ZW5j eSBvcmRlciwgdGhlIENQVXMgc2VlbSB0byBnZXQgc3R1Y2sgYXQgdGhlIGxhc3QgYXBwbGllZCBs b3cKPiA+ID4gPiA+ID4gPiBmcmVxdWVuY3kuIEV2ZW4gYWZ0ZXIgbWF4IGZyZXF1ZW5jeSBnZXRz IHJldmVydGVkIGZyb20gNDA4IE1IeiB0bwo+ID4gPiA+ID4gPiA+IHNvbWV0aGluZyBoaWdoZXIs IGV2ZW4gYWZ0ZXIgSSBzd2l0Y2ggdGhlIGdvdmVybm9yIHRvIHNvbWV0aGluZyBlbHNlIC0KPiA+ ID4gPiA+ID4gPiBubyBtYXR0ZXIgd2hhdC4gT25seSBhIHJlYm9vdCBnZXRzIHRoZSBoaWdoZXIg ZnJlcXVlbmNpZXMgJ3Vuc3R1Y2snCj4gPiA+ID4gPiA+ID4gZm9yIG1lLgo+ID4gPiA+ID4gPiA+ Cj4gPiA+ID4gPiA+ID4gVGhlc2UgYXJlIGFsbCBvYnNlcnZlZCBhdCBhcm91bmQgNTVDIFNvQyB0 ZW1wZXJhdHVyZSwgc28gdGhyb3R0bGluZyBpcwo+ID4gPiA+ID4gPiA+IG5vdCBhbiBpc3N1ZS4g UmVndWxhdG9ycyBhcmUgc3R1Y2sgYXQgOTUwMDAwIHVWIC0gd2F5IGFib3ZlIDcwMDAwMCB1Vgo+ ID4gPiA+ID4gPiA+IHRoYXQgdGhlIDQwOCBNSHogT1BQIHJlcXVpcmVzIChhbmQgcG93ZXIgcmVh ZGluZ3Mgc2VlbSB0byBtYXRjaDogSSdtCj4gPiA+ID4gPiA+ID4gZ2V0dGluZyBhYm91dCAyLjNX IGNvbnN1bXB0aW9uIGF0IDQwOCBNSHogaW4gaWRsZSB2cy4gbm9ybWFsIGlkbGUKPiA+ID4gPiA+ ID4gPiByZWFkaW5nIG9mIDEuNFcgYXQgYXJvdW5kIDEgR0h6KS4KPiA+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiA+IE5vdCBzdXJlIHdoYXQncyBnb2luZyBvbiBoZXJlLCBhbmQgSSBkb24ndCByZW1l bWJlciBzZWVpbmcgYW55dGhpbmcKPiA+ID4gPiA+ID4gPiBzaW1pbGFyIG9uIFJLMzU4OC4gVGhv dWdodHMgd2VsY29tZS4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gVGhpcyBtYXkgb25jZSBhZ2Fp biBiZSBhICJhY2NpZGVudGFsbHkgdXNlcyB3cm9uZyBjbG9jayBJRHMiIHR5cGUKPiA+ID4gPiA+ ID4gc2l0dWF0aW9uLiBUaGUgb3RoZXIgcG9zc2liaWxpdHkgaXMgdGhhdCB3ZSdyZSBnZXR0aW5n IGNvbmZ1c2VkCj4gPiA+ID4gPiA+IGJldHdlZW4gd2hhdCB3ZSB0aGluayB0aGUgY2xvY2sgcmF0 ZSBpcyBhbmQgd2hhdCBTQ01JIGFjdHVhbGx5IHNldAo+ID4gPiA+ID4gPiB0aGUgY2xvY2sgcmF0 ZSB0by4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gVGhpbmdzIHRvIGNoZWNrIGlzIHdoZXRoZXIg dGhlIHJpZ2h0IGNsb2NrIGNvbnRyb2xsZXIgKHNjbWkgdnMgY3J1KQo+ID4gPiA+ID4gPiBhbmQg dGhlIHJpZ2h0IGNsb2NrIGlkIChjaGVjayBBVEYgc291cmNlIGZvciB0aGlzKSBpcyB1c2VkLgo+ ID4gPiA+ID4KPiA+ID4gPiA+IENsb2NrIElEcyBpbiB0aGUga2VybmVsIHNlZW0gdG8gbWF0Y2gg dGhvc2UgaW4gQVRGLCBidXQgSSd2ZSBub3RpY2VkCj4gPiA+ID4gPiB3aGF0IGFwcGVhcnMgdG8g YmUgYSBidWZmZXIgb3ZlcmZsb3cgaW4gc29tZSBvZiB0aGUgU0NNSSBjbG9jayBuYW1lcwo+ID4g PiA+ID4gZGVmaW5lZCBpbiB0aGUgb3BlbnNvdXJjZSBURi1BICh0aGFua3MgR0NDIDE1IGFuZCBp dHMgemVhbG91cwo+ID4gPiA+ID4gd2FybmluZ3MpOgo+ID4gPiA+Cj4gPiA+ID4gQWZ0ZXIgc29t ZSBtb3JlIHRlc3RpbmcsIEkgdGVuZCB0byBjb25maXJtIHdoYXQgUGlvdHIgb2JzZXJ2ZWQKPiA+ ID4gPiBlYXJsaWVyLiBOYW1lbHksIGZyZXF1ZW5jeSBzY2FsaW5nIGFjdHMgd2VpcmQgb24gYW55 IEFURiB2ZXJzaW9uIChiZQo+ID4gPiA+IGl0IGJpbmFyeSBCTDMxIG9yIG9wZW5zb3VyY2UgVEYt QSksIGFzIGxvbmcgYXMgbWFpbmxpbmUgdS1ib290IGlzCj4gPiA+ID4gdXNlZC4gVXNpbmcgdGhl IHUtYm9vdCBiaW5hcnkgZXh0cmFjdGVkIGZyb20gdGhlIEFybVNvTSBRV1JUIGltYWdlCj4gPiA+ ID4gZG9lcyBub3QgbGVhZCB0byAic3R1Y2siIENQVSBmcmVxdWVuY2llcyB3aGVuIHJ1bm5pbmcg c2JjLWJlbmNoLgo+ID4gPiA+Cj4gPiA+ID4gSSdtIGdldHRpbmcgdGhpcyB3aXRoIHRoZSBleGFj dCBzYW1lIGtlcm5lbCBidWlsZCAoNi4xNi1yYzEgd2l0aCBzb21lCj4gPiA+ID4gU2lnZTUgcmVs YXRlZCBwYXRjaGVzLCBuYW1lbHkgdjIgb2YgdGhpcyBzZXJpZXMsIE5pY29sYXMnIFVTQgo+ID4g PiA+IGVuYWJsZW1lbnQgc2VyaWVzIGFuZCBUU0FEQykuIFRoZSBvbmx5IG90aGVyIGRpZmZlcmVu Y2UgaXMgdGhhdCB0aGUKPiA+ID4gPiBiaW5hcnkgdS1ib290IGRvZXNuJ3QgaGF2ZSBFRkkgc3Vw cG9ydCwgc28gSSBoYWQgdG8gYm9vdCBpbnRvIHRoZQo+ID4gPiA+IEFSTTY0IHVuY29tcHJlc3Nl ZCBJbWFnZSBpbnN0ZWFkIG9mIHZtbGludXouZWZpLCBidXQgdGhvc2Ugd2VyZSBib3RoCj4gPiA+ ID4gdGFrZW4gZnJvbSB0aGUgc2FtZSBidWlsZC4KPiA+ID4gPgo+ID4gPiA+IFdoYXQgSSdtIG9i c2VydmluZyBkdXJpbmcgdGhlIHNiYy1iZW5jaCBydW46Cj4gPiA+ID4gIC0gSXQgc3dpdGNoZXMg dGhlIGNwdWZyZXEgZ292ZXJub3IgZnJvbSBzY2hlZHV0aWwgdG8gcGVyZm9ybWFuY2UKPiA+ID4g PiAgLSBJdCBnb2VzIHRocm91Z2ggYWxsIENQVSBPUFBzIGluIGRlc2NlbmRpbmcgZnJlcXVlbmN5 IG9yZGVyCj4gPiA+ID4gIC0tLSBXaGlsZSBpdCBkb2VzIHRoYXQgd2hlbiBib290ZWQgdXNpbmcg bWFpbmxpbmUgdS1ib290ICsKPiA+ID4gPiB2bWxpbnV6LmVmaTogImhhcmR3YXJlIGxpbWl0cyIg bGluZSBpbiAiY3B1cG93ZXIgLWMgMCw0Cj4gPiA+ID4gZnJlcXVlbmN5LWluZm8iIGNoYW5nZXMg d2l0aCBlYWNoIE9QUCBjaGFuZ2UgKHRoZSBtYXggZnJlcXVlbmN5Cj4gPiA+ID4gZ2V0dGluZyBy ZWR1Y2VkIHNlcXVlbnRpYWxseSksIHRoZW4gaXQgcmVzZXRzIHRvIHRoZSBpbml0aWFsIGZ1bGwK PiA+ID4gPiByYW5nZSwgYnV0IHRoZSBhY3R1YWwgZnJlcXVlbmN5IHN0YXlzIHN0dWNrIGF0IHRo ZSBsb3dlc3QgcG9zc2libGUKPiA+ID4gPiB2YWx1ZQo+ID4gPiA+ICAtLS0gV2hpbGUgaXQgZG9l cyB0aGF0IHdoZW4gYm9vdGVkIHVzaW5nIGJpbmFyeSB1LWJvb3QgKyBJbWFnZToKPiA+ID4gPiAi aGFyZHdhcmUgbGltaXRzIiBsaW5lIGluICJjcHVwb3dlciAtYyAwLDQgZnJlcXVlbmN5LWluZm8i IGRvZXNuJ3QKPiA+ID4gPiBjaGFuZ2UsIGJ1dCB0aGUgYWN0dWFsIGZyZXF1ZW5jeSBnZXRzIHJl ZHVjZWQgc2VxdWVudGlhbGx5LiBUaGVuIGFmdGVyCj4gPiA+ID4gdGhlIGl0ZXJhdGlvbiBvdmVy IGFsbCBPUFBzIGlzIGNvbXBsZXRlZCBpdCByZXR1cm5zIHRvIHRoZSBoaWdoZXN0Cj4gPiA+ID4g cG9zc2libGUgdmFsdWUsIGFuZCBhZGp1c3RzIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRoZXJtYWwg dGhyb3R0bGluZyBhcwo+ID4gPiA+IHRoZSBiZW5jaG1hcmsgcHJvZ3Jlc3Nlcwo+ID4gPgo+ID4g PiBTbGlnaHQgY29ycmVjdGlvbjogaXQncyBub3QgdGhlICJoYXJkd2FyZSBsaW1pdHMiIGxpbmUs IGJ1dCByYXRoZXIKPiA+ID4gImN1cnJlbnQgcG9saWN5Ii4KPiA+ID4KPiA+ID4gTm90ZSB0aGF0 IGJvb3RpbmcgbWFpbmxpbmUgdS1ib290IGluIG5vbi1FRkkgbW9kZSAodXNpbmcgcGxhaW4gSW1h Z2UpCj4gPiA+IGRvZXNuJ3QgY2hhbmdlIHRoZSByZXN1bHRzIGFib3ZlLgo+ID4KPiA+IEknbSBp biBhIHNpbWlsYXIgYm9hdCwgd2hpbGUgdHJ5aW5nIHRvIG1ha2UgRFNJIHJ1biBvbiB0aGUgcmsz NTc2Lgo+ID4gQW5keSBmcm9tIFJvY2tjaGlwIHdhcyBhYmxlIHRvIG1ha2UgaXQgd29yayAianVz dCIgYnkgdXNpbmcgdmVuZG9yLQo+ID4gZmlybXdhcmUgLSB3aGlsZSB1c2luZyBtYWlubGluZSB1 LWJvb3QgKHdpdGggYm90aCBtYWlubGluZSBURi1BCj4gPiBvciB2ZW5kb3IgVEYtQSkgcHJvZHVj ZXMganVzdCBibGFjayBvdXRwdXQuCj4gPgo+ID4gSSB0aGluayB3aGVuIEkgZGlkIHRoZSBtYWlu bGluZSB1LWJvb3QgdGhpbmcgSSB0b29rIHRoZSAidmVuZG9yIi1jb2RlCj4gPiBmcm9tIHRoZSBh cm1iaWFuIHJrMzU3NiB2ZW5kb3ItdS1ib290IC4uLiBidXQgdGhhdCBhY3R1YWxseSBtYXkgZGlm ZmVyCj4gPiBmcm9tIHdoYXQgdGhlIHZlbmRvcnMgcHJvdmlkZWQ/Cj4gCj4gSnVzdCB0cmllZCBi b290aW5nIGludG8gdS1ib290IGJ1aWx0IGZyb20gQXJtU29NIHNvdXJjZXMgYXQgWzFdIC0gc2Ft ZQo+IGlzc3VlcyBhcyB1c2luZyBtYWlubGluZS4gRWl0aGVyIEknbSBkb2luZyBzb21ldGhpbmcg c3R1cGlkIGJ1aWxkaW5nCj4gaXQgKGRvbid0IGtub3cgd2hhdCB0aG91Z2gpLCBvciB0aGUgYmlu YXJ5IHNoaXBwZWQgaW4gQXJtU29NIGltYWdlcyBpcwo+IGluZGVlZCBkaWZmZXJlbnQgZnJvbSB3 aGF0IHRoZSBzb3VyY2VzIGFyZS4KCkNhbiB5b3UgbGlzdCB0aGUgdmVyc2lvbnMgeW91IHNlZSBm b3IgdGhlIF93b3JraW5nXyBiaW5hcmllcz8KCkkuZS4gdS1ib290IGFuZCBmcmllbmRzIG1heSBs aXN0IHNvbWV2ZXJzaW9uLWdHSVRIQVNIIHRoaW5neSBsaWtlIHlvdXIKT1BURUUgYWxyZWFkeSBk b2VzOiBPUC1URUUgdmVyc2lvbjogMy4xMy4wLTc5MS1nMTg1ZGMzYzkyIC4KQWxzbyBwb3NzaWJs eSB0aGUgYnVpbGQgZGF0ZS4KCkkuZS4gSSdtIHdvbmRlcmluZy9ob3BpbmcgaWYgd2UgY2FuIG1h dGNoIHRvIHNvbWUgZ2l0IGNvbW1pdC4KCgpIZWlrbwoKCj4gCj4gRlRSLCBteSBzdGVwcyB0byBi dWlsZCB0aGUgdmVuZG9yIHUtYm9vdCB3ZXJlOgo+IAo+IG1ha2UgcmszNTc2X2RlZmNvbmZpZwo+ IGNwIH4vcmtiaW4vYmluL3JrMzUvcmszNTc2X2JsMzFfdjEuMTUuZWxmIGJsMzEuZWxmCj4gY3Ag fi9ya2Jpbi9iaW4vcmszNS9yazM1NzZfYmwzMl92MS4wNS5iaW4gdGVlLmJpbgo+IG1ha2UgLWox Mgo+IG1ha2UgdS1ib290Lml0Ygo+IC4vdG9vbHMvbWtpbWFnZSAtbiByazM1NzYgLVQgcmtzZCAt ZAo+IH4vcmtiaW4vYmluL3JrMzUvcmszNTc2X2Rkcl9scDRfMjExMk1Iel9scDVfMjczNk1Iel92 MS4wOS5iaW46c3BsL3UtYm9vdC1zcGwtZHRiLmJpbgo+IGlkYmxvYWRlci5pbWcKPiAKPiBUaGVu IEkgd3JvdGUgaWRibG9hZGVyLmltZyB0byBlTU1DIHN0YXJ0aW5nIGZyb20gc2VjdG9yIDY0LCB1 LWJvb3QuaXRiCj4gc3RhcnRpbmcgZnJvbSBzZWN0b3IgMTYzODQuIEl0IGJvb3RzLCBidXQgZXho aWJpdHMgdGhlIHNhbWUgInN0dWNrIgo+IENQVSBmcmVxdWVuY2llcyBhcyB3aXRoIG1haW5saW5l IHUtYm9vdC4KPiAKPiBGV0lXLCBJJ3ZlIG1hbmFnZWQgdG8gbG9hZCBSb2NrY2hpcCBCTDMyIGFz IE9QLVRFRSB3aXRoIG1haW5saW5lCj4gdS1ib290IHRvbzogdHVybnMgb3V0IHRoZSByaWdodCBh ZGRyZXNzIHRvIGxvYWQgaXQgaXMgMHg0ODQwMDAwMCBhbmQKPiBub3QgMHgwODQwMDAwMC4gSXQg ZGlkbid0IGhlbHAgd2l0aCB0aGUgcHJvYmxlbSB0aG91Z2guCj4gCj4gQmVzdCByZWdhcmRzLAo+ IEFsZXhleQo+IAo+IFsxXSBodHRwczovL2dpdGh1Yi5jb20vQXJtU29NL3UtYm9vdC90cmVlL3Jr MzU3Ni02LjEtcmszLjEKPiAKCgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LXJvY2tjaGlwCg==