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 sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99]) (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 4CED3C4332F for ; Fri, 10 Nov 2023 17:49:50 +0000 (UTC) Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 0E0A4281A68 for ; Fri, 10 Nov 2023 17:49:50 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 5F5F73D971; Fri, 10 Nov 2023 17:47:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=none Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (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 203EF3C6BF for ; Fri, 10 Nov 2023 17:46:58 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B92153A886; Fri, 10 Nov 2023 07:24:16 -0800 (PST) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D18AC12FC; Fri, 10 Nov 2023 07:25:00 -0800 (PST) Received: from pluto (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 694FC3F6C4; Fri, 10 Nov 2023 07:24:14 -0800 (PST) Date: Fri, 10 Nov 2023 15:24:04 +0000 From: Cristian Marussi To: Takahiro Akashi , Linus Walleij , Oleksii Moisieiev , "sudeep.holla@arm.com" , Souvik Chakravarty , Rob Herring , Krzysztof Kozlowski , Conor Dooley , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-gpio@vger.kernel.org" Subject: Re: [RFC v5 5/5] dt-bindings: firmware: arm,scmi: Add support for pinctrl protocol Message-ID: References: Precedence: bulk X-Mailing-List: linux-gpio@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Fri, Nov 10, 2023 at 09:58:39AM +0900, Takahiro Akashi wrote: > Hi Arm folks, > > Do you have any comment? > I expect that you have had some assumption when you defined > SCMI pinctrl protocol specification. > [CC Souvik] @Souvik for context see: https://lore.kernel.org/all/CACRpkdZ4GborirSpa3GK_PwMgCvY0ePEmZO+CwnLcP6nAdieow@mail.gmail.com/ Hi, I am not sure what is the full story here, BUT the spec was mainly aimed at supporting PINCTRL in SCMI with the idea to then, later on, base GPIO on top of it, "easily" building on the PINCTRL spec features in the future with a separate series from the one Oleksii is working on...but it like seems the future is already here and maybe we have discovered something to be clarified... Souvik/Oleksii can tell you better what were (if any) further assumptions related to GPIO on top on SCMI/PINCTRL, but the aim of this series was always to be just the basic Generic Pinctrl support when dealing with an SCMI server backend. Regarding the current Pinctrl series by Oleksii, I would also notice that, indeed, some "non-spec-dictated" naming assumptions are ALREADY present somehow, because, currently, the spec and the pinctrl SCMI protocol layer speak/refer about pins/groups/functions, as usual, only in terms of numeric identifiers/IDs (with an associated name of course), while the pinctrl driver (thanks to the Linux pictrl subsystem layer) describes and refers anything in the DT in terms of names: so all of this really works only because the names used in the DT happen to match the names reported by the backend server. My test DT uses just what Oleksii exemplified in the cover letter: pinctrl_i2c2: i2c2 { groups = "i2c2_a", "i2c2_b"; function = "i2c2"; }; pinctrl_mdio: pins_mdio { groups = "avb_mdio"; drive-strength = <24>; }; keys_pins: keys { pins = "GP_5_17", "GP_5_20", "GP_5_22", "GP_2_1"; bias-pull-up; }; with a dummmy test driver referring to it, so as to trigger the drivers core to initialize the pinctrl stuff. But all of this works just because, in the example of my emulated setup, my fake server exposes resources that are exactly named just as how the above DT expects pins/functions/pins to be named, because this is how the Generic Pinctrl subsystem in Linux is supposed to work, right ? The difference is that the names, in the case of pinctrl-scmi, are not hardcoded in the specific pin-controller driver BUT are provided dynamically by the SCMI server at runtime. And this is just a naming convention, between the Linux picntrl subsys AND the SCMI server, that allows the Linux Pinctrl subsys to map, under-hood, names to type/IDs as expected by the SCMI protocol layer (and by the spec): so when you will define and describe a real platform with a DT, you will will have to provide your name references, knowing that the shipped platform SCMI fw will advertise exactly the same (or a superset of them) As such, personally, I would find reasonable to use, equally, some conventional function name like 'gpio' to advertise and configure groups of pins as being used as GPIOs. Maybe, though, both of these expected naming comventions should be explicitly stated in the spec: indeed if you look at some Sensor protocol extensions added in v3.0, in 4.7.2.5.1 "Sensor Axis Descriptors" regarding naming we say: "It is recommended that the name ends with ‘_’ followed by the axis of the sensor in uppercase. For example, the name for the x-axis of a triaxial accelerometer could be “acc_X” or “_X”." ...so maybe some similar remarks could be added here. Souvik is really the one who can have a say about the opportunity (or not) of these kind of explicit advised naming conventions on the spec, so I have CCed him. > On Mon, Nov 06, 2023 at 02:12:36PM +0100, Linus Walleij wrote: > > On Fri, Oct 27, 2023 at 8:28???AM Oleksii Moisieiev > > wrote: > > > > > + keys_pins: keys-pins { > > > + pins = "GP_5_17", "GP_5_20", "GP_5_22", "GP_2_1"; > > > + bias-pull-up; > > > + }; > > > > This is kind of interesting and relates to my question about naming groups and > > functions of GPIO pins. > > > > Here we see four pins suspiciously named "GP_*" which I read as > > "generic purpose" > > and they are not muxed to *any* function, yes pulled up. > > > > I would have expected something like: > > > > keys_pins: keys-pins { > > groups = "GP_5_17_grp", "GP_5_20_grp", "GP_5_22_grp", "GP_2_1_grp"; > > function = "gpio"; > > pins = "GP_5_17", "GP_5_20", "GP_5_22", "GP_2_1"; > > bias-pull-up; > > }; > > > > I hope this illustrates what I see as a problem in not designing in > > GPIO as an explicit > > function, I get the impression that these pins are GPIO because it is hardware > > default. > > If you want to stick to "explicit", we may rather introduce a pre-defined > sub-node name, "gpio", in a device tree binding, i.e. > > protocol@19 { // pinctrl protocol > ... // other pinmux nodes > > scmi_gpio: gpio { // "gpio" is a fixed name > keys-pins { > pins = "GP_5_17", "GP_5_20", "GP_5_22", "GP_2_1"; > bias-pull-up; > // possibly input or output > }; > input-pins { > groups = "some group"; // any name > input-mode; > } > output-pins { > pins = "foo1", "foo2"; // any name > output-mode; > } > } > } > I suppose your proposal of a specially named "gpio" node would be another way, BUT it would also mean describing something in the DT that could be discoverable dynamically querying the server (while making the above assumptions about conventions). Thanks, Cristian 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 C76A1C4332F for ; Fri, 10 Nov 2023 15:24:51 +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:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=SWzs+/d+5/5RQ8RObCXiSR82zLFvOxJlAn5qc2b0ylw=; b=a5QhbfKkY4ZwjM ErY7njMS7TuyelsW0gwrHsmBmnlAMLCqLdzi25hEc8KrukdME1UegHRfsE8aVtUuf14BATl2cRGI3 0d7u8Ud2w60nYF/eMa2iXyDsWjcvKkthaakZtqZIcRpGFmwEkzbtUycIn0RRki3epeVBogJZR2Ail +wucwKNtNoGMEy+TW+Hqiwoz8y/njV4XdWNl8cWHJ6uy3hyfspd56cLndYNIyMgYfPKUxmnhzmkZk KPB1TDjnBmtfQ+O4j8wHdAbYcS45nhT5JPRk2K4ORguBd7Se34/Dc+qb3W7ZqaX0luq/ltcEWzSfs kXkLy6QRSRhX0c+bvu/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r1TMt-0090Cf-2A; Fri, 10 Nov 2023 15:24:23 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r1TMq-0090C7-0X for linux-arm-kernel@lists.infradead.org; Fri, 10 Nov 2023 15:24:22 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D18AC12FC; Fri, 10 Nov 2023 07:25:00 -0800 (PST) Received: from pluto (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 694FC3F6C4; Fri, 10 Nov 2023 07:24:14 -0800 (PST) Date: Fri, 10 Nov 2023 15:24:04 +0000 From: Cristian Marussi To: Takahiro Akashi , Linus Walleij , Oleksii Moisieiev , "sudeep.holla@arm.com" , Souvik Chakravarty , Rob Herring , Krzysztof Kozlowski , Conor Dooley , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-gpio@vger.kernel.org" Subject: Re: [RFC v5 5/5] dt-bindings: firmware: arm,scmi: Add support for pinctrl protocol Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231110_072420_320162_963EC91E X-CRM114-Status: GOOD ( 37.07 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gRnJpLCBOb3YgMTAsIDIwMjMgYXQgMDk6NTg6MzlBTSArMDkwMCwgVGFrYWhpcm8gQWthc2hp IHdyb3RlOgo+IEhpIEFybSBmb2xrcywKPiAKCj4gRG8geW91IGhhdmUgYW55IGNvbW1lbnQ/Cj4g SSBleHBlY3QgdGhhdCB5b3UgaGF2ZSBoYWQgc29tZSBhc3N1bXB0aW9uIHdoZW4geW91IGRlZmlu ZWQKPiBTQ01JIHBpbmN0cmwgcHJvdG9jb2wgc3BlY2lmaWNhdGlvbi4KPgoKW0NDIFNvdXZpa10K CkBTb3V2aWsgZm9yIGNvbnRleHQgc2VlOgpodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvQ0FD UnBrZFo0R2JvcmlyU3BhM0dLX1B3TWdDdlkwZVBFbVpPK0N3bkxjUDZuQWRpZW93QG1haWwuZ21h aWwuY29tLwoKSGksCgpJIGFtIG5vdCBzdXJlIHdoYXQgaXMgdGhlIGZ1bGwgc3RvcnkgaGVyZSwg QlVUIHRoZSBzcGVjIHdhcyBtYWlubHkgYWltZWQKYXQgc3VwcG9ydGluZyBQSU5DVFJMIGluIFND TUkgd2l0aCB0aGUgaWRlYSB0byB0aGVuLCBsYXRlciBvbiwgYmFzZSBHUElPCm9uIHRvcCBvZiBp dCwgImVhc2lseSIgYnVpbGRpbmcgb24gdGhlIFBJTkNUUkwgc3BlYyBmZWF0dXJlcyBpbiB0aGUg ZnV0dXJlCndpdGggYSBzZXBhcmF0ZSBzZXJpZXMgZnJvbSB0aGUgb25lIE9sZWtzaWkgaXMgd29y a2luZyBvbi4uLmJ1dCBpdCBsaWtlCnNlZW1zIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBoZXJlIGFu ZCBtYXliZSB3ZSBoYXZlIGRpc2NvdmVyZWQgc29tZXRoaW5nCnRvIGJlIGNsYXJpZmllZC4uLgoK U291dmlrL09sZWtzaWkgY2FuIHRlbGwgeW91IGJldHRlciB3aGF0IHdlcmUgKGlmIGFueSkgZnVy dGhlciBhc3N1bXB0aW9ucwpyZWxhdGVkIHRvIEdQSU8gb24gdG9wIG9uIFNDTUkvUElOQ1RSTCwg YnV0IHRoZSBhaW0gb2YgdGhpcyBzZXJpZXMgd2FzCmFsd2F5cyB0byBiZSBqdXN0IHRoZSBiYXNp YyBHZW5lcmljIFBpbmN0cmwgc3VwcG9ydCB3aGVuIGRlYWxpbmcgd2l0aCBhbgpTQ01JIHNlcnZl ciBiYWNrZW5kLgoKUmVnYXJkaW5nIHRoZSBjdXJyZW50IFBpbmN0cmwgc2VyaWVzIGJ5IE9sZWtz aWksIEkgd291bGQgYWxzbyBub3RpY2UgdGhhdCwKaW5kZWVkLCBzb21lICJub24tc3BlYy1kaWN0 YXRlZCIgbmFtaW5nIGFzc3VtcHRpb25zIGFyZSBBTFJFQURZIHByZXNlbnQKc29tZWhvdywgYmVj YXVzZSwgY3VycmVudGx5LCB0aGUgc3BlYyBhbmQgdGhlIHBpbmN0cmwgU0NNSSBwcm90b2NvbCBs YXllcgpzcGVhay9yZWZlciBhYm91dCBwaW5zL2dyb3Vwcy9mdW5jdGlvbnMsIGFzIHVzdWFsLCBv bmx5IGluIHRlcm1zIG9mIG51bWVyaWMKaWRlbnRpZmllcnMvSURzICh3aXRoIGFuIGFzc29jaWF0 ZWQgbmFtZSBvZiBjb3Vyc2UpLCB3aGlsZSB0aGUgcGluY3RybApkcml2ZXIgKHRoYW5rcyB0byB0 aGUgTGludXggcGljdHJsIHN1YnN5c3RlbSBsYXllcikgZGVzY3JpYmVzIGFuZCByZWZlcnMKYW55 dGhpbmcgaW4gdGhlIERUIGluIHRlcm1zIG9mIG5hbWVzOiBzbyBhbGwgb2YgdGhpcyByZWFsbHkg d29ya3Mgb25seQpiZWNhdXNlIHRoZSBuYW1lcyB1c2VkIGluIHRoZSBEVCBoYXBwZW4gdG8gbWF0 Y2ggdGhlIG5hbWVzIHJlcG9ydGVkIGJ5CnRoZSBiYWNrZW5kIHNlcnZlci4KCk15IHRlc3QgRFQg dXNlcyBqdXN0IHdoYXQgT2xla3NpaSBleGVtcGxpZmllZCBpbiB0aGUgY292ZXIgbGV0dGVyOgoK CXBpbmN0cmxfaTJjMjogaTJjMiB7CgkJZ3JvdXBzID0gImkyYzJfYSIsICJpMmMyX2IiOwogICAg ICAgICAgICAgICAgZnVuY3Rpb24gPSAiaTJjMiI7CiAgICAgICAgfTsKCglwaW5jdHJsX21kaW86 IHBpbnNfbWRpbyB7CgkJZ3JvdXBzID0gImF2Yl9tZGlvIjsKICAgICAgICAgICAgICAgIGRyaXZl LXN0cmVuZ3RoID0gPDI0PjsKICAgICAgICB9OwoKICAgICAgICBrZXlzX3BpbnM6IGtleXMgewoJ CXBpbnMgPSAiR1BfNV8xNyIsICJHUF81XzIwIiwgIkdQXzVfMjIiLCAiR1BfMl8xIjsKICAgICAg ICAgICAgICAgIGJpYXMtcHVsbC11cDsKICAgICAgICB9OwoKCndpdGggYSBkdW1tbXkgdGVzdCBk cml2ZXIgcmVmZXJyaW5nIHRvIGl0LCBzbyBhcyB0byB0cmlnZ2VyIHRoZSBkcml2ZXJzCmNvcmUg dG8gaW5pdGlhbGl6ZSB0aGUgcGluY3RybCBzdHVmZi4KCkJ1dCBhbGwgb2YgdGhpcyB3b3JrcyBq dXN0IGJlY2F1c2UsIGluIHRoZSBleGFtcGxlIG9mIG15IGVtdWxhdGVkIHNldHVwLApteSBmYWtl IHNlcnZlciBleHBvc2VzIHJlc291cmNlcyB0aGF0IGFyZSBleGFjdGx5IG5hbWVkIGp1c3QgYXMg aG93IHRoZQphYm92ZSBEVCBleHBlY3RzIHBpbnMvZnVuY3Rpb25zL3BpbnMgdG8gYmUgbmFtZWQs IGJlY2F1c2UgdGhpcyBpcyBob3cKdGhlIEdlbmVyaWMgUGluY3RybCBzdWJzeXN0ZW0gaW4gTGlu dXggaXMgc3VwcG9zZWQgdG8gd29yaywgcmlnaHQgPwoKVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB0 aGUgbmFtZXMsIGluIHRoZSBjYXNlIG9mIHBpbmN0cmwtc2NtaSwgYXJlIG5vdApoYXJkY29kZWQg aW4gdGhlIHNwZWNpZmljIHBpbi1jb250cm9sbGVyIGRyaXZlciBCVVQgYXJlIHByb3ZpZGVkIGR5 bmFtaWNhbGx5CmJ5IHRoZSBTQ01JIHNlcnZlciBhdCBydW50aW1lLgoKQW5kIHRoaXMgaXMganVz dCBhIG5hbWluZyBjb252ZW50aW9uLCBiZXR3ZWVuIHRoZSBMaW51eCBwaWNudHJsIHN1YnN5cyBB TkQKdGhlIFNDTUkgc2VydmVyLCB0aGF0IGFsbG93cyB0aGUgTGludXggUGluY3RybCBzdWJzeXMg dG8gbWFwLCB1bmRlci1ob29kLApuYW1lcyB0byB0eXBlL0lEcyBhcyBleHBlY3RlZCBieSB0aGUg U0NNSSBwcm90b2NvbCBsYXllciAoYW5kIGJ5IHRoZSBzcGVjKToKc28gd2hlbiB5b3Ugd2lsbCBk ZWZpbmUgYW5kIGRlc2NyaWJlIGEgcmVhbCBwbGF0Zm9ybSB3aXRoIGEgRFQsIHlvdSB3aWxsCndp bGwgaGF2ZSB0byBwcm92aWRlIHlvdXIgbmFtZSByZWZlcmVuY2VzLCBrbm93aW5nIHRoYXQgdGhl IHNoaXBwZWQgcGxhdGZvcm0KU0NNSSBmdyB3aWxsIGFkdmVydGlzZSBleGFjdGx5IHRoZSBzYW1l IChvciBhIHN1cGVyc2V0IG9mIHRoZW0pCgpBcyBzdWNoLCBwZXJzb25hbGx5LCBJIHdvdWxkIGZp bmQgcmVhc29uYWJsZSB0byB1c2UsIGVxdWFsbHksIHNvbWUKY29udmVudGlvbmFsIGZ1bmN0aW9u IG5hbWUgbGlrZSAnZ3BpbycgdG8gYWR2ZXJ0aXNlIGFuZCBjb25maWd1cmUgZ3JvdXBzCm9mIHBp bnMgYXMgYmVpbmcgdXNlZCBhcyBHUElPcy4KCk1heWJlLCB0aG91Z2gsIGJvdGggb2YgdGhlc2Ug ZXhwZWN0ZWQgbmFtaW5nIGNvbXZlbnRpb25zIHNob3VsZCBiZQpleHBsaWNpdGx5IHN0YXRlZCBp biB0aGUgc3BlYzogaW5kZWVkIGlmIHlvdSBsb29rIGF0IHNvbWUgU2Vuc29yIHByb3RvY29sCmV4 dGVuc2lvbnMgYWRkZWQgaW4gdjMuMCwgaW4gNC43LjIuNS4xICJTZW5zb3IgQXhpcyBEZXNjcmlw dG9ycyIKcmVnYXJkaW5nIG5hbWluZyB3ZSBzYXk6CgoiSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0 aGUgbmFtZSBlbmRzIHdpdGgg4oCYX+KAmQpmb2xsb3dlZCBieSB0aGUgYXhpcyBvZiB0aGUgc2Vu c29yIGluIHVwcGVyY2FzZS4gRm9yCmV4YW1wbGUsIHRoZSBuYW1lIGZvciB0aGUgeC1heGlzIG9m IGEgdHJpYXhpYWwKYWNjZWxlcm9tZXRlciBjb3VsZCBiZSDigJxhY2NfWOKAnSBvciDigJxfWOKA nS4iCgouLi5zbyBtYXliZSBzb21lIHNpbWlsYXIgcmVtYXJrcyBjb3VsZCBiZSBhZGRlZCBoZXJl LgoKU291dmlrIGlzIHJlYWxseSB0aGUgb25lIHdobyBjYW4gaGF2ZSBhIHNheSBhYm91dCB0aGUg b3Bwb3J0dW5pdHkgKG9yCm5vdCkgb2YgdGhlc2Uga2luZCBvZiBleHBsaWNpdCBhZHZpc2VkIG5h bWluZyBjb252ZW50aW9ucyBvbiB0aGUgc3BlYywKc28gSSBoYXZlIENDZWQgaGltLgogCj4gT24g TW9uLCBOb3YgMDYsIDIwMjMgYXQgMDI6MTI6MzZQTSArMDEwMCwgTGludXMgV2FsbGVpaiB3cm90 ZToKPiA+IE9uIEZyaSwgT2N0IDI3LCAyMDIzIGF0IDg6Mjg/Pz9BTSBPbGVrc2lpIE1vaXNpZWll dgo+ID4gPE9sZWtzaWlfTW9pc2llaWV2QGVwYW0uY29tPiB3cm90ZToKPiA+IAo+ID4gPiArICAg ICAgICAgICAgICAgIGtleXNfcGluczoga2V5cy1waW5zIHsKPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgcGlucyA9ICJHUF81XzE3IiwgIkdQXzVfMjAiLCAiR1BfNV8yMiIsICJHUF8yXzEiOwo+ ID4gPiArICAgICAgICAgICAgICAgICAgICBiaWFzLXB1bGwtdXA7Cj4gPiA+ICsgICAgICAgICAg ICAgICAgfTsKPiA+IAo+ID4gVGhpcyBpcyBraW5kIG9mIGludGVyZXN0aW5nIGFuZCByZWxhdGVz IHRvIG15IHF1ZXN0aW9uIGFib3V0IG5hbWluZyBncm91cHMgYW5kCj4gPiBmdW5jdGlvbnMgb2Yg R1BJTyBwaW5zLgo+ID4gCj4gPiBIZXJlIHdlIHNlZSBmb3VyIHBpbnMgc3VzcGljaW91c2x5IG5h bWVkICJHUF8qIiB3aGljaCBJIHJlYWQgYXMKPiA+ICJnZW5lcmljIHB1cnBvc2UiCj4gPiBhbmQg dGhleSBhcmUgbm90IG11eGVkIHRvICphbnkqIGZ1bmN0aW9uLCB5ZXMgcHVsbGVkIHVwLgo+ID4g Cj4gPiBJIHdvdWxkIGhhdmUgZXhwZWN0ZWQgc29tZXRoaW5nIGxpa2U6Cj4gPiAKPiA+IGtleXNf cGluczoga2V5cy1waW5zIHsKPiA+ICAgZ3JvdXBzID0gIkdQXzVfMTdfZ3JwIiwgIkdQXzVfMjBf Z3JwIiwgIkdQXzVfMjJfZ3JwIiwgIkdQXzJfMV9ncnAiOwo+ID4gICBmdW5jdGlvbiA9ICJncGlv IjsKPiA+ICAgcGlucyA9ICJHUF81XzE3IiwgIkdQXzVfMjAiLCAiR1BfNV8yMiIsICJHUF8yXzEi Owo+ID4gICBiaWFzLXB1bGwtdXA7Cj4gPiB9Owo+ID4gCj4gPiBJIGhvcGUgdGhpcyBpbGx1c3Ry YXRlcyB3aGF0IEkgc2VlIGFzIGEgcHJvYmxlbSBpbiBub3QgZGVzaWduaW5nIGluCj4gPiBHUElP IGFzIGFuIGV4cGxpY2l0Cj4gPiBmdW5jdGlvbiwgSSBnZXQgdGhlIGltcHJlc3Npb24gdGhhdCB0 aGVzZSBwaW5zIGFyZSBHUElPIGJlY2F1c2UgaXQgaXMgaGFyZHdhcmUKPiA+IGRlZmF1bHQuCj4g Cj4gSWYgeW91IHdhbnQgdG8gc3RpY2sgdG8gImV4cGxpY2l0Iiwgd2UgbWF5IHJhdGhlciBpbnRy b2R1Y2UgYSBwcmUtZGVmaW5lZAo+IHN1Yi1ub2RlIG5hbWUsICJncGlvIiwgaW4gYSBkZXZpY2Ug dHJlZSBiaW5kaW5nLCBpLmUuCj4gCj4gICBwcm90b2NvbEAxOSB7IC8vIHBpbmN0cmwgcHJvdG9j b2wKPiAgICAgICAuLi4gLy8gb3RoZXIgcGlubXV4IG5vZGVzCj4gCj4gICAgICAgc2NtaV9ncGlv OiBncGlvIHsgLy8gImdwaW8iIGlzIGEgZml4ZWQgbmFtZQo+ICAgICAgICAgICBrZXlzLXBpbnMg ewo+ICAgICAgICAgICAgICAgcGlucyA9ICJHUF81XzE3IiwgIkdQXzVfMjAiLCAiR1BfNV8yMiIs ICJHUF8yXzEiOwo+ICAgICAgICAgICAgICAgYmlhcy1wdWxsLXVwOwo+ICAgICAgICAgICAgICAg Ly8gcG9zc2libHkgaW5wdXQgb3Igb3V0cHV0Cj4gICAgICAgICAgIH07Cj4gICAgICAgICAgIGlu cHV0LXBpbnMgewo+ICAgICAgICAgICAgICAgZ3JvdXBzID0gInNvbWUgZ3JvdXAiOyAvLyBhbnkg bmFtZQo+ICAgICAgICAgICAgICAgaW5wdXQtbW9kZTsKPiAgICAgICAgICAgfQo+ICAgICAgICAg ICBvdXRwdXQtcGlucyB7Cj4gICAgICAgICAgICAgICBwaW5zID0gImZvbzEiLCAiZm9vMiI7IC8v IGFueSBuYW1lCj4gICAgICAgICAgICAgICBvdXRwdXQtbW9kZTsKPiAgICAgICAgICAgfQo+ICAg ICAgIH0KPiAgIH0KPgoKSSBzdXBwb3NlIHlvdXIgcHJvcG9zYWwgb2YgYSBzcGVjaWFsbHkgbmFt ZWQgImdwaW8iIG5vZGUgd291bGQgYmUKYW5vdGhlciB3YXksIEJVVCBpdCB3b3VsZCBhbHNvIG1l YW4gZGVzY3JpYmluZyBzb21ldGhpbmcgaW4gdGhlIERUIHRoYXQKY291bGQgYmUgZGlzY292ZXJh YmxlIGR5bmFtaWNhbGx5IHF1ZXJ5aW5nIHRoZSBzZXJ2ZXIgKHdoaWxlIG1ha2luZyB0aGUKYWJv dmUgYXNzdW1wdGlvbnMgYWJvdXQgY29udmVudGlvbnMpLgoKVGhhbmtzLApDcmlzdGlhbgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=