From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C01A233F5B3; Sun, 12 Jul 2026 17:00:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.11.138.130 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783875638; cv=none; b=b9rSanoylX0cfJFRk025ocLHTm6DX2LeDU53ZNNVtFiuhxCPlZvC/TjfgS7skPaYwJpN3xSWUqW4COO1kSQgFeaBxB/3VE9vS1l8WFjz3ogQFJCfT1iPUsgCc0b9unDVZXuxP8UE/zgmDs+OBhs4sIWmJBiQegl5mx2++UIim4Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783875638; c=relaxed/simple; bh=/PLqj/FIB5HTtSo6gizl6/u5i+tTV2Mi1tQ/3VWekJE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WV5srMksEL1k3TUSSyAATf6DV5AXxHW35RUSb401xZtEa8IVh89lHy7UnMuIAhGE5+oO5uhmNVMsakvddx5K5koUP1y4wTF1mmNqFfMvSCirsEFQwzcXK0ABjC+awDUtdDhiT2kePaJwqR28jEN7ZSqJHEKamUXnonF7AVNX8Ak= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de; spf=pass smtp.mailfrom=sntech.de; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b=Gt1Rprs4; arc=none smtp.client-ip=185.11.138.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=sntech.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sntech.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sntech.de header.i=@sntech.de header.b="Gt1Rprs4" 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=EYmNQeN1MMv3XCMLlgvSMjuvdlpxNtGkNTF/uC1tgH4=; b=Gt1Rprs4T9rS1j+zsV8bvuaMOJ t7HxPBa1j1m0JItJ5WHAaWmlGPpF6gFPbEzako2YaWKDyPn6RpFFl4wPFmJ1G2cHh/cWOFXV0pDy+ 7665P+rXo5HJU+a3PhPpKTFetM0t/Sa8R+4diZkHEP6hE1gveOaDX+bV/sKq6dazewNDTq8zDAvND gUrbd7EdSaUWOX1CMI34fTuWJRq1ENfwlklPur7u/lGYipW6uo+xYUVCTbBt2dGwB7W1/6Y4yOUUX m31AslFuztVTIFfri4hisKAwxoxiKZI/VKR9FTzI8FUf1R02FbZskhoHiVUbPb9ts/qLgc4If5Cif I0jf13Ig==; From: Heiko =?UTF-8?B?U3TDvGJuZXI=?= To: Simon Glass Cc: linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, Fabio Estevam , linux-arm-kernel@lists.infradead.org, Simon Glass , Jeffy Chen , Linus Walleij , huang lin , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 04/12] pinctrl: rockchip: Add RV1106 pinctrl support Date: Sun, 12 Jul 2026 19:00:13 +0200 Message-ID: <13316226.iMDcRRXYNz@diego> In-Reply-To: <20260706195818.3906949-5-sjg@chromium.org> References: <20260706195818.3906949-1-sjg@chromium.org> <20260706195818.3906949-5-sjg@chromium.org> Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Am Montag, 6. Juli 2026, 21:58:00 Mitteleurop=C3=A4ische Sommerzeit schrieb= Simon Glass: > Add pinctrl support for the Rockchip RV1106, taken from the vendor > kernel in the Luckfox Pico SDK [1] at commit 824b817f8 (a Linux > 5.10.160 kernel tree). The IOC registers are spread across several > blocks, addressed through per-bank offsets, with the GPIO0 block in the > PMU. The drive strength uses the RK3568-style exponential encoding. >=20 > The RV1103 is a package variant of the RV1106 with fewer pins and uses > the same pin controller. >=20 > [1] https://github.com/LuckfoxTECH/luckfox-pico >=20 > Signed-off-by: Simon Glass > --- >=20 > drivers/pinctrl/pinctrl-rockchip.c | 208 +++++++++++++++++++++++++++++ > drivers/pinctrl/pinctrl-rockchip.h | 1 + > 2 files changed, 209 insertions(+) >=20 > diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl= =2Drockchip.c > index 7e0fcd45fd26..f9cbcb955853 100644 > --- a/drivers/pinctrl/pinctrl-rockchip.c > +++ b/drivers/pinctrl/pinctrl-rockchip.c [...] > @@ -3310,6 +3470,7 @@ static int rockchip_set_drive_perpin(struct rockchi= p_pin_bank *bank, > ret =3D strength; > goto config; > } else if (ctrl->type =3D=3D RV1103B || > + ctrl->type =3D=3D RV1106 || > ctrl->type =3D=3D RK3506 || > ctrl->type =3D=3D RK3528 || > ctrl->type =3D=3D RK3562 || > @@ -3482,6 +3643,7 @@ static int rockchip_get_pull(struct rockchip_pin_ba= nk *bank, int pin_num) > : PIN_CONFIG_BIAS_DISABLE; > case PX30: > case RV1103B: > + case RV1106: > case RV1108: > case RK3188: > case RK3288: > @@ -3547,6 +3709,7 @@ static int rockchip_set_pull(struct rockchip_pin_ba= nk *bank, > break; > case PX30: > case RV1103B: > + case RV1106: > case RV1108: > case RV1126: > case RK3188: > @@ -3843,6 +4006,7 @@ static bool rockchip_pinconf_pull_valid(struct rock= chip_pin_ctrl *ctrl, > return pull ? false : true; > case PX30: > case RV1103B: > + case RV1106: > case RV1108: > case RV1126: > case RK3188: > @@ -4623,6 +4787,48 @@ static struct rockchip_pin_ctrl rv1103b_pin_ctrl _= _maybe_unused =3D { > .schmitt_calc_reg =3D rv1103b_calc_schmitt_reg_and_bit, > }; > =20 > +static struct rockchip_pin_bank rv1106_pin_banks[] =3D { > + PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", > + IOMUX_WIDTH_4BIT | IOMUX_SOURCE_PMU, > + IOMUX_WIDTH_4BIT | IOMUX_SOURCE_PMU, > + IOMUX_WIDTH_4BIT | IOMUX_SOURCE_PMU, > + IOMUX_WIDTH_4BIT | IOMUX_SOURCE_PMU), sashiko is correct here, only pins 0-6 have drive-strength registers. Some different setting starts at the 0x30 mark. This should be easy to handle in rv1106_calc_drv_reg_and_bit() > + PIN_BANK_IOMUX_FLAGS_OFFSET(1, 32, "gpio1", > + IOMUX_WIDTH_4BIT, > + IOMUX_WIDTH_4BIT, > + IOMUX_WIDTH_4BIT, > + IOMUX_WIDTH_4BIT, > + 0, 0x08, 0x10, 0x18), > + PIN_BANK_IOMUX_FLAGS_OFFSET(2, 32, "gpio2", > + IOMUX_WIDTH_4BIT, > + IOMUX_WIDTH_4BIT, > + IOMUX_WIDTH_4BIT, > + IOMUX_WIDTH_4BIT, > + 0x10020, 0x10028, 0, 0), in theory only the first offset should be necessary here - same for the other bank's offsets. =46or offset-values of 0, the driver will automatically create the right, offset increments. 8 for 4bit wide iomuxes. See https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/dri= vers/pinctrl/pinctrl-rockchip.c#n4344 So with the drive-strength thing fixed Reviewed-by: Heiko Stuebner Heiko 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 0FA3CC43458 for ; Sun, 12 Jul 2026 17:00:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id: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=uVWqo+badSXIIS4Y1NWtTMOXB5KOmbTpn2RIq7Hr/bA=; b=SXKMxHRRMzt0Z5 yGMF70A+7qdeVNTkFclBn8RoPneqUhdiNFIGW//kQwQ1O6RK/HDCL6cn+NAXgIoHh06JyjJ0xRpEq Hem62GbPMF40TSKq4YVEtg28JZrQ2kVhUjt1O5Fmzd87j73NpiprTYwFlOjxCcgpIyOETfR6mBRRJ T7e5xeqOoOdEsv1Z+zMPl3cmY17VNMfJsMQt6ts07jP7/JQKR94Ln6nJHjFzcSUfxRLf80SRrD82r ZrlZ5KGG9c1TK4LRjFdNabZUgTyoiQYVBf6e0F1/HST+qCkaWMEHc2cadF+XWF1eDh9Z6sNnoumec L40zQWGJT2BAArsVA3sw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wixXU-00000007dFQ-0sqo; Sun, 12 Jul 2026 17:00:24 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wixXR-00000007dEq-3Vft; Sun, 12 Jul 2026 17:00:23 +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=EYmNQeN1MMv3XCMLlgvSMjuvdlpxNtGkNTF/uC1tgH4=; b=Gt1Rprs4T9rS1j+zsV8bvuaMOJ t7HxPBa1j1m0JItJ5WHAaWmlGPpF6gFPbEzako2YaWKDyPn6RpFFl4wPFmJ1G2cHh/cWOFXV0pDy+ 7665P+rXo5HJU+a3PhPpKTFetM0t/Sa8R+4diZkHEP6hE1gveOaDX+bV/sKq6dazewNDTq8zDAvND gUrbd7EdSaUWOX1CMI34fTuWJRq1ENfwlklPur7u/lGYipW6uo+xYUVCTbBt2dGwB7W1/6Y4yOUUX m31AslFuztVTIFfri4hisKAwxoxiKZI/VKR9FTzI8FUf1R02FbZskhoHiVUbPb9ts/qLgc4If5Cif I0jf13Ig==; From: Heiko =?UTF-8?B?U3TDvGJuZXI=?= To: Simon Glass Cc: linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, Fabio Estevam , linux-arm-kernel@lists.infradead.org, Simon Glass , Jeffy Chen , Linus Walleij , huang lin , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 04/12] pinctrl: rockchip: Add RV1106 pinctrl support Date: Sun, 12 Jul 2026 19:00:13 +0200 Message-ID: <13316226.iMDcRRXYNz@diego> In-Reply-To: <20260706195818.3906949-5-sjg@chromium.org> References: <20260706195818.3906949-1-sjg@chromium.org> <20260706195818.3906949-5-sjg@chromium.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260712_100021_977971_3341566B X-CRM114-Status: GOOD ( 18.96 ) 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-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 QW0gTW9udGFnLCA2LiBKdWxpIDIwMjYsIDIxOjU4OjAwIE1pdHRlbGV1cm9ww6Rpc2NoZSBTb21t ZXJ6ZWl0IHNjaHJpZWIgU2ltb24gR2xhc3M6Cj4gQWRkIHBpbmN0cmwgc3VwcG9ydCBmb3IgdGhl IFJvY2tjaGlwIFJWMTEwNiwgdGFrZW4gZnJvbSB0aGUgdmVuZG9yCj4ga2VybmVsIGluIHRoZSBM dWNrZm94IFBpY28gU0RLIFsxXSBhdCBjb21taXQgODI0YjgxN2Y4IChhIExpbnV4Cj4gNS4xMC4x NjAga2VybmVsIHRyZWUpLiBUaGUgSU9DIHJlZ2lzdGVycyBhcmUgc3ByZWFkIGFjcm9zcyBzZXZl cmFsCj4gYmxvY2tzLCBhZGRyZXNzZWQgdGhyb3VnaCBwZXItYmFuayBvZmZzZXRzLCB3aXRoIHRo ZSBHUElPMCBibG9jayBpbiB0aGUKPiBQTVUuIFRoZSBkcml2ZSBzdHJlbmd0aCB1c2VzIHRoZSBS SzM1Njgtc3R5bGUgZXhwb25lbnRpYWwgZW5jb2RpbmcuCj4gCj4gVGhlIFJWMTEwMyBpcyBhIHBh Y2thZ2UgdmFyaWFudCBvZiB0aGUgUlYxMTA2IHdpdGggZmV3ZXIgcGlucyBhbmQgdXNlcwo+IHRo ZSBzYW1lIHBpbiBjb250cm9sbGVyLgo+IAo+IFsxXSBodHRwczovL2dpdGh1Yi5jb20vTHVja2Zv eFRFQ0gvbHVja2ZveC1waWNvCj4gCj4gU2lnbmVkLW9mZi1ieTogU2ltb24gR2xhc3MgPHNqZ0Bj aHJvbWl1bS5vcmc+Cj4gLS0tCj4gCj4gIGRyaXZlcnMvcGluY3RybC9waW5jdHJsLXJvY2tjaGlw LmMgfCAyMDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9waW5jdHJs L3BpbmN0cmwtcm9ja2NoaXAuaCB8ICAgMSArCj4gIDIgZmlsZXMgY2hhbmdlZCwgMjA5IGluc2Vy dGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcm9ja2No aXAuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXJvY2tjaGlwLmMKPiBpbmRleCA3ZTBmY2Q0 NWZkMjYuLmY5Y2JjYjk1NTg1MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3Ry bC1yb2NrY2hpcC5jCj4gKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcm9ja2NoaXAuYwoK Wy4uLl0KCj4gQEAgLTMzMTAsNiArMzQ3MCw3IEBAIHN0YXRpYyBpbnQgcm9ja2NoaXBfc2V0X2Ry aXZlX3BlcnBpbihzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmJhbmssCj4gIAkJcmV0ID0gc3Ry ZW5ndGg7Cj4gIAkJZ290byBjb25maWc7Cj4gIAl9IGVsc2UgaWYgKGN0cmwtPnR5cGUgPT0gUlYx MTAzQiB8fAo+ICsJCSAgIGN0cmwtPnR5cGUgPT0gUlYxMTA2IHx8Cj4gIAkJICAgY3RybC0+dHlw ZSA9PSBSSzM1MDYgfHwKPiAgCQkgICBjdHJsLT50eXBlID09IFJLMzUyOCB8fAo+ICAJCSAgIGN0 cmwtPnR5cGUgPT0gUkszNTYyIHx8Cj4gQEAgLTM0ODIsNiArMzY0Myw3IEBAIHN0YXRpYyBpbnQg cm9ja2NoaXBfZ2V0X3B1bGwoc3RydWN0IHJvY2tjaGlwX3Bpbl9iYW5rICpiYW5rLCBpbnQgcGlu X251bSkKPiAgCQkJCTogUElOX0NPTkZJR19CSUFTX0RJU0FCTEU7Cj4gIAljYXNlIFBYMzA6Cj4g IAljYXNlIFJWMTEwM0I6Cj4gKwljYXNlIFJWMTEwNjoKPiAgCWNhc2UgUlYxMTA4Ogo+ICAJY2Fz ZSBSSzMxODg6Cj4gIAljYXNlIFJLMzI4ODoKPiBAQCAtMzU0Nyw2ICszNzA5LDcgQEAgc3RhdGlj IGludCByb2NrY2hpcF9zZXRfcHVsbChzdHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgKmJhbmssCj4g IAkJYnJlYWs7Cj4gIAljYXNlIFBYMzA6Cj4gIAljYXNlIFJWMTEwM0I6Cj4gKwljYXNlIFJWMTEw NjoKPiAgCWNhc2UgUlYxMTA4Ogo+ICAJY2FzZSBSVjExMjY6Cj4gIAljYXNlIFJLMzE4ODoKPiBA QCAtMzg0Myw2ICs0MDA2LDcgQEAgc3RhdGljIGJvb2wgcm9ja2NoaXBfcGluY29uZl9wdWxsX3Zh bGlkKHN0cnVjdCByb2NrY2hpcF9waW5fY3RybCAqY3RybCwKPiAgCQlyZXR1cm4gcHVsbCA/IGZh bHNlIDogdHJ1ZTsKPiAgCWNhc2UgUFgzMDoKPiAgCWNhc2UgUlYxMTAzQjoKPiArCWNhc2UgUlYx MTA2Ogo+ICAJY2FzZSBSVjExMDg6Cj4gIAljYXNlIFJWMTEyNjoKPiAgCWNhc2UgUkszMTg4Ogo+ IEBAIC00NjIzLDYgKzQ3ODcsNDggQEAgc3RhdGljIHN0cnVjdCByb2NrY2hpcF9waW5fY3RybCBy djExMDNiX3Bpbl9jdHJsIF9fbWF5YmVfdW51c2VkID0gewo+ICAJLnNjaG1pdHRfY2FsY19yZWcJ PSBydjExMDNiX2NhbGNfc2NobWl0dF9yZWdfYW5kX2JpdCwKPiAgfTsKPiAgCj4gK3N0YXRpYyBz dHJ1Y3Qgcm9ja2NoaXBfcGluX2JhbmsgcnYxMTA2X3Bpbl9iYW5rc1tdID0gewo+ICsJUElOX0JB TktfSU9NVVhfRkxBR1MoMCwgMzIsICJncGlvMCIsCj4gKwkJCSAgICAgSU9NVVhfV0lEVEhfNEJJ VCB8IElPTVVYX1NPVVJDRV9QTVUsCj4gKwkJCSAgICAgSU9NVVhfV0lEVEhfNEJJVCB8IElPTVVY X1NPVVJDRV9QTVUsCj4gKwkJCSAgICAgSU9NVVhfV0lEVEhfNEJJVCB8IElPTVVYX1NPVVJDRV9Q TVUsCj4gKwkJCSAgICAgSU9NVVhfV0lEVEhfNEJJVCB8IElPTVVYX1NPVVJDRV9QTVUpLAoKc2Fz aGlrbyBpcyBjb3JyZWN0IGhlcmUsCm9ubHkgcGlucyAwLTYgaGF2ZSBkcml2ZS1zdHJlbmd0aCBy ZWdpc3RlcnMuCgpTb21lIGRpZmZlcmVudCBzZXR0aW5nIHN0YXJ0cyBhdCB0aGUgMHgzMCBtYXJr LgoKVGhpcyBzaG91bGQgYmUgZWFzeSB0byBoYW5kbGUgaW4gcnYxMTA2X2NhbGNfZHJ2X3JlZ19h bmRfYml0KCkKCgoKPiArCVBJTl9CQU5LX0lPTVVYX0ZMQUdTX09GRlNFVCgxLCAzMiwgImdwaW8x IiwKPiArCQkJCSAgICBJT01VWF9XSURUSF80QklULAo+ICsJCQkJICAgIElPTVVYX1dJRFRIXzRC SVQsCj4gKwkJCQkgICAgSU9NVVhfV0lEVEhfNEJJVCwKPiArCQkJCSAgICBJT01VWF9XSURUSF80 QklULAo+ICsJCQkJICAgIDAsIDB4MDgsIDB4MTAsIDB4MTgpLAo+ICsJUElOX0JBTktfSU9NVVhf RkxBR1NfT0ZGU0VUKDIsIDMyLCAiZ3BpbzIiLAo+ICsJCQkJICAgIElPTVVYX1dJRFRIXzRCSVQs Cj4gKwkJCQkgICAgSU9NVVhfV0lEVEhfNEJJVCwKPiArCQkJCSAgICBJT01VWF9XSURUSF80QklU LAo+ICsJCQkJICAgIElPTVVYX1dJRFRIXzRCSVQsCj4gKwkJCQkgICAgMHgxMDAyMCwgMHgxMDAy OCwgMCwgMCksCgppbiB0aGVvcnkgb25seSB0aGUgZmlyc3Qgb2Zmc2V0IHNob3VsZCBiZSBuZWNl c3NhcnkgaGVyZSAtIHNhbWUgZm9yIHRoZQpvdGhlciBiYW5rJ3Mgb2Zmc2V0cy4KCkZvciBvZmZz ZXQtdmFsdWVzIG9mIDAsIHRoZSBkcml2ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGNyZWF0ZSB0aGUg cmlnaHQsCm9mZnNldCBpbmNyZW1lbnRzLiA4IGZvciA0Yml0IHdpZGUgaW9tdXhlcy4KClNlZQpo dHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9s aW51eC5naXQvdHJlZS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1yb2NrY2hpcC5jI240MzQ0CgoK U28gd2l0aCB0aGUgZHJpdmUtc3RyZW5ndGggdGhpbmcgZml4ZWQKUmV2aWV3ZWQtYnk6IEhlaWtv IFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+CgoKSGVpa28KCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtcm9ja2NoaXAgbWFpbGluZyBsaXN0 CkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAo=