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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id ECE24C83F1C for ; Wed, 30 Aug 2023 18:48:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242927AbjH3SsB (ORCPT ); Wed, 30 Aug 2023 14:48:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56226 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243812AbjH3Lr0 (ORCPT ); Wed, 30 Aug 2023 07:47:26 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 957051B0; Wed, 30 Aug 2023 04:47:23 -0700 (PDT) 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 BEE552F4; Wed, 30 Aug 2023 04:48:02 -0700 (PDT) Received: from pluto (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AD9893F64C; Wed, 30 Aug 2023 04:47:20 -0700 (PDT) Date: Wed, 30 Aug 2023 12:47:18 +0100 From: Cristian Marussi To: Peng Fan Cc: Linus Walleij , "Peng Fan (OSS)" , "oleksii_moisieiev@epam.com" , "sudeep.holla@arm.com" , cristian.marussi@arm.com, Aisheng Dong , "festevam@gmail.com" , Jacky Bai , "s.hauer@pengutronix.de" , "shawnguo@kernel.org" , "kernel@pengutronix.de" , dl-linux-imx , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "linux-gpio@vger.kernel.org" Subject: Re: [RFC] scmi: pinctrl: support i.MX9 Message-ID: References: <20230824070611.3335107-1-peng.fan@oss.nxp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org On Fri, Aug 25, 2023 at 08:43:38AM +0000, Peng Fan wrote: > > Subject: Re: [RFC] scmi: pinctrl: support i.MX9 > > > > On Thu, Aug 24, 2023 at 2:47 PM Peng Fan wrote: > > > Me: Hi Peng, > > > > >> it is merely making things more complex and also slower > > > > bymaking the registers only accessible from this SCMI link. > > > > > > This is for safety reason, the pinctrl hardware must be handled by a > > > system manager entity. So mmio direct access not allowed from Cortex-A > > > side. > > > > Yeah I understood as much. But I don't think that the firmware is really > > filtering any of the access, it will just poke into any pinctrl register as > > instructed anyway so what's the point. Just looks like a layer of indirection. > > No, the firmware has a check on whether a pin is allowed to be configured > by the agent that wanna to configure the pin. > > > But I'm not your system manager, so it's not my decision. > > > > > The SCMI firmware is very straightforward, there is no group or > > > function. > > > > > > It just accepts the format as this: > > > MUX_TYPE, MUX VALUE, CONF_TYPE, CONF_VAL, DAISY_TYPE, DAISY ID, > > > DAISY_CFG, DAISY_VALUE. > > > > > > Similar as linux MMIO format. > > > > > > Our i.MX95 platform will support two settings, one with SCMI firmware, > > > one without SCMI. These two settings will share the same pinctrl > > > header file. > > > > > > And to simplify the scmi firmware design(anyway I am not owner of the > > > firmware), to make pinctrl header shared w/o scmi, we take the current > > > in-upstream freescale imx binding format. > > > > The SCMI people will have to state their position on this. > > Like what they consider conformance and what extensions are allowed. This > > is more a standardization question than an implementation question so it's > > not really my turf. > > The i.MX95 SCMI firmware uses OEM extension type. So I just follow > what the firmware did and support it in linux. Anyway let's > wait Sudeep's reply. > So my unsderstanding on this matter as of now is that: 1. the current SCMI Pinctrl specification can support your usecase by using OEM Types and multiple pins/values CONFIG_GET/SET commands 2. the Kernel SCMI protocol layer (driver/firmware/arm_scmi/pinctrl.c) is equally fine and can support your usecase, AFTER Oleksii fixes it to align it to the latest v3.2-BETA2 specification changes. IOW, this means that, using the SCMI Pinctrl protocol operations exposed in scmi_protocol.h, from somewhere, you are able to properly configure multiple pins/values with your specific OEM types. 3. The SCMI Pinctrl driver (by Oleksii) built on top of the pinctrl protocol operations is instead NOT suitable for your usecase since it uses the Linux Generic Pinconf and IMX does not make use of it, and instead IMX has its own bindings and related parsing logic. Am I right ? If this is the case, I would NOT try to abuse the current SCMI Pinctrl Generic driver (by Oleksii) by throwing into it a bunch of IMX specific DT parsing, also because you'll end-up NOT using most of the generic SCMI Pinctrl driver but just reusing a bit of the probe (customized with your own DT maps parsing) Instead, given that the spec[1.] and the protocol layer[2.] are fine for your use case and you indeed have already a custom way to parse your DT mappings, I would say that you could just write your own custom SCMI driver ( ? pinctrl-imx-scmi), distinct and much more simple than the generic one, that does its own IMX DT parsing and calls just the SCMI protocol operations that it needs in the way that your platform expects: so basically another Pinctrl SCMI driver that does not use the generic pinconf DT configuration BUT DO USE the underlying SCMI Pinctrl protocol (via its exposed protocol operations...) Not sure what Sudeep thinks about supporting multiple SCMI driver for the same protocol (we did it already for Sensors hwmon && iio), and if this approach won't need some sort of mutual exclusion mechanism in Kconfig to avoid loading both the generic and the custom IMX (even though they should be able to co-exist from the SCMI kernel/fw stack pint of view, as long as you dont mess-up the DTs and mixup generic pins with custom IMX pins...) Instead, adding an IMX-custom extension to what it was supposed to be a generic driver (as you propose) seems to me like a stretch of the generic Pinctrl driver that is not really worth, since you'll end up polluting the generic driver with some highly custom and specific IMX bits. while really NOT reusing so much of the generic driver at all. 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 D4529C83F14 for ; Wed, 30 Aug 2023 11:48:02 +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:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9kfSESbGq6Ad6qMHuRqv78X2Ols1QIkqKC8rj9VxzaI=; b=lUi4ZRttMnRiPE aIS6T2sYCBkRbOfb/ljDeMUzmgXDSIEl7keDchiDnqLD2UWwPODtg1NRd3TEtn7FQFhjxVLR6HUv5 LZ18SqdmGMjB/5a7KbnyNJMAPafoTGQKaPibzduYrFZFIkJs14FHfQ7qetj3VVqvYG/5zxSg9E/yR ss+PS4GTyShEL+Ayd9U+v7AeFRTOV+dlV7KIez0COsFwWnfPetgaBfqBKeu5+DjcGRRXNKoWata1i dMsVMF4jnBDbanhCcEcQh4aNCbn0NNmoMh50/ChtnBNwngELiYAANEmlu0BW7vLIn5/s1NbINaiDv r2Qns8E+inYuhRZ6GSsA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qbJfV-00DQgS-1v; Wed, 30 Aug 2023 11:47:29 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qbJfS-00DQfl-1I for linux-arm-kernel@lists.infradead.org; Wed, 30 Aug 2023 11:47:28 +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 BEE552F4; Wed, 30 Aug 2023 04:48:02 -0700 (PDT) Received: from pluto (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id AD9893F64C; Wed, 30 Aug 2023 04:47:20 -0700 (PDT) Date: Wed, 30 Aug 2023 12:47:18 +0100 From: Cristian Marussi To: Peng Fan Cc: Linus Walleij , "Peng Fan (OSS)" , "oleksii_moisieiev@epam.com" , "sudeep.holla@arm.com" , cristian.marussi@arm.com, Aisheng Dong , "festevam@gmail.com" , Jacky Bai , "s.hauer@pengutronix.de" , "shawnguo@kernel.org" , "kernel@pengutronix.de" , dl-linux-imx , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "linux-gpio@vger.kernel.org" Subject: Re: [RFC] scmi: pinctrl: support i.MX9 Message-ID: References: <20230824070611.3335107-1-peng.fan@oss.nxp.com> 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-20230830_044726_556932_7B3A07D1 X-CRM114-Status: GOOD ( 37.42 ) 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 T24gRnJpLCBBdWcgMjUsIDIwMjMgYXQgMDg6NDM6MzhBTSArMDAwMCwgUGVuZyBGYW4gd3JvdGU6 Cj4gPiBTdWJqZWN0OiBSZTogW1JGQ10gc2NtaTogcGluY3RybDogc3VwcG9ydCBpLk1YOQo+ID4g Cj4gPiBPbiBUaHUsIEF1ZyAyNCwgMjAyMyBhdCAyOjQ34oCvUE0gUGVuZyBGYW4gPHBlbmcuZmFu QG54cC5jb20+IHdyb3RlOgo+ID4gPiBNZToKCkhpIFBlbmcsCgo+ID4gCj4gPiA+PiBpdCBpcyBt ZXJlbHkgbWFraW5nIHRoaW5ncyBtb3JlIGNvbXBsZXggYW5kIGFsc28gc2xvd2VyCj4gPiA+ID4g YnltYWtpbmcgdGhlIHJlZ2lzdGVycyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGlzIFNDTUkgbGlu ay4KPiA+ID4KPiA+ID4gVGhpcyBpcyBmb3Igc2FmZXR5IHJlYXNvbiwgdGhlIHBpbmN0cmwgaGFy ZHdhcmUgbXVzdCBiZSBoYW5kbGVkIGJ5IGEKPiA+ID4gc3lzdGVtIG1hbmFnZXIgZW50aXR5LiBT byBtbWlvIGRpcmVjdCBhY2Nlc3Mgbm90IGFsbG93ZWQgZnJvbSBDb3J0ZXgtQQo+ID4gPiBzaWRl Lgo+ID4gCj4gPiBZZWFoIEkgdW5kZXJzdG9vZCBhcyBtdWNoLiBCdXQgSSBkb24ndCB0aGluayB0 aGF0IHRoZSBmaXJtd2FyZSBpcyByZWFsbHkKPiA+IGZpbHRlcmluZyBhbnkgb2YgdGhlIGFjY2Vz cywgaXQgd2lsbCBqdXN0IHBva2UgaW50byBhbnkgcGluY3RybCByZWdpc3RlciBhcwo+ID4gaW5z dHJ1Y3RlZCBhbnl3YXkgc28gd2hhdCdzIHRoZSBwb2ludC4gSnVzdCBsb29rcyBsaWtlIGEgbGF5 ZXIgb2YgaW5kaXJlY3Rpb24uCj4gCj4gTm8sIHRoZSBmaXJtd2FyZSBoYXMgYSBjaGVjayBvbiB3 aGV0aGVyIGEgcGluIGlzIGFsbG93ZWQgdG8gYmUgY29uZmlndXJlZAo+IGJ5IHRoZSBhZ2VudCB0 aGF0IHdhbm5hIHRvIGNvbmZpZ3VyZSB0aGUgcGluLiAKPiAKPiA+IEJ1dCBJJ20gbm90IHlvdXIg c3lzdGVtIG1hbmFnZXIsIHNvIGl0J3Mgbm90IG15IGRlY2lzaW9uLgo+ID4gCj4gPiA+IFRoZSBT Q01JIGZpcm13YXJlIGlzIHZlcnkgc3RyYWlnaHRmb3J3YXJkLCB0aGVyZSBpcyBubyBncm91cCBv cgo+ID4gPiBmdW5jdGlvbi4KPiA+ID4KPiA+ID4gSXQganVzdCBhY2NlcHRzIHRoZSBmb3JtYXQg YXMgdGhpczoKPiA+ID4gTVVYX1RZUEUsIE1VWCBWQUxVRSwgQ09ORl9UWVBFLCBDT05GX1ZBTCwg REFJU1lfVFlQRSwgREFJU1kgSUQsCj4gPiA+IERBSVNZX0NGRywgREFJU1lfVkFMVUUuCj4gPiA+ Cj4gPiA+IFNpbWlsYXIgYXMgbGludXggTU1JTyBmb3JtYXQuCj4gPiA+Cj4gPiA+IE91ciBpLk1Y OTUgcGxhdGZvcm0gd2lsbCBzdXBwb3J0IHR3byBzZXR0aW5ncywgb25lIHdpdGggU0NNSSBmaXJt d2FyZSwKPiA+ID4gb25lIHdpdGhvdXQgU0NNSS4gVGhlc2UgdHdvIHNldHRpbmdzIHdpbGwgc2hh cmUgdGhlIHNhbWUgcGluY3RybAo+ID4gPiBoZWFkZXIgZmlsZS4KPiA+ID4KPiA+ID4gQW5kIHRv IHNpbXBsaWZ5IHRoZSBzY21pIGZpcm13YXJlIGRlc2lnbihhbnl3YXkgSSBhbSBub3Qgb3duZXIg b2YgdGhlCj4gPiA+IGZpcm13YXJlKSwgdG8gbWFrZSBwaW5jdHJsIGhlYWRlciBzaGFyZWQgdy9v IHNjbWksIHdlIHRha2UgdGhlIGN1cnJlbnQKPiA+ID4gaW4tdXBzdHJlYW0gZnJlZXNjYWxlIGlt eCBiaW5kaW5nIGZvcm1hdC4KPiA+IAo+ID4gVGhlIFNDTUkgcGVvcGxlIHdpbGwgaGF2ZSB0byBz dGF0ZSB0aGVpciBwb3NpdGlvbiBvbiB0aGlzLgo+ID4gTGlrZSB3aGF0IHRoZXkgY29uc2lkZXIg Y29uZm9ybWFuY2UgYW5kIHdoYXQgZXh0ZW5zaW9ucyBhcmUgYWxsb3dlZC4gVGhpcwo+ID4gaXMg bW9yZSBhIHN0YW5kYXJkaXphdGlvbiBxdWVzdGlvbiB0aGFuIGFuIGltcGxlbWVudGF0aW9uIHF1 ZXN0aW9uIHNvIGl0J3MKPiA+IG5vdCByZWFsbHkgbXkgdHVyZi4KPiAKPiBUaGUgaS5NWDk1IFND TUkgZmlybXdhcmUgdXNlcyBPRU0gZXh0ZW5zaW9uIHR5cGUuIFNvIEkganVzdCBmb2xsb3cKPiB3 aGF0IHRoZSBmaXJtd2FyZSBkaWQgYW5kIHN1cHBvcnQgaXQgaW4gbGludXguIEFueXdheSBsZXQn cwo+IHdhaXQgU3VkZWVwJ3MgcmVwbHkuCj4gCgpTbyBteSB1bnNkZXJzdGFuZGluZyBvbiB0aGlz IG1hdHRlciBhcyBvZiBub3cgaXMgdGhhdDoKCjEuIHRoZSBjdXJyZW50IFNDTUkgUGluY3RybCBz cGVjaWZpY2F0aW9uIGNhbiBzdXBwb3J0IHlvdXIgdXNlY2FzZSBieSB1c2luZwogICBPRU0gVHlw ZXMgYW5kIG11bHRpcGxlIHBpbnMvdmFsdWVzIENPTkZJR19HRVQvU0VUIGNvbW1hbmRzCgoyLiB0 aGUgS2VybmVsIFNDTUkgcHJvdG9jb2wgbGF5ZXIgKGRyaXZlci9maXJtd2FyZS9hcm1fc2NtaS9w aW5jdHJsLmMpCiAgIGlzIGVxdWFsbHkgZmluZSBhbmQgY2FuIHN1cHBvcnQgeW91ciB1c2VjYXNl LCBBRlRFUiBPbGVrc2lpIGZpeGVzIGl0IHRvCiAgIGFsaWduIGl0IHRvIHRoZSBsYXRlc3QgdjMu Mi1CRVRBMiBzcGVjaWZpY2F0aW9uIGNoYW5nZXMuCiAgIElPVywgdGhpcyBtZWFucyB0aGF0LCB1 c2luZyB0aGUgU0NNSSBQaW5jdHJsIHByb3RvY29sIG9wZXJhdGlvbnMKICAgZXhwb3NlZCBpbiBz Y21pX3Byb3RvY29sLmgsIGZyb20gc29tZXdoZXJlLCB5b3UgYXJlIGFibGUgdG8gcHJvcGVybHkK ICAgY29uZmlndXJlIG11bHRpcGxlIHBpbnMvdmFsdWVzIHdpdGggeW91ciBzcGVjaWZpYyBPRU0g dHlwZXMuCgozLiBUaGUgU0NNSSBQaW5jdHJsIGRyaXZlciAoYnkgT2xla3NpaSkgYnVpbHQgb24g dG9wIG9mIHRoZSBwaW5jdHJsIHByb3RvY29sCiAgIG9wZXJhdGlvbnMgaXMgaW5zdGVhZCBOT1Qg c3VpdGFibGUgZm9yIHlvdXIgdXNlY2FzZSBzaW5jZSBpdCB1c2VzIHRoZSBMaW51eAogICBHZW5l cmljIFBpbmNvbmYgYW5kIElNWCBkb2VzIG5vdCBtYWtlIHVzZSBvZiBpdCwgYW5kIGluc3RlYWQg SU1YIGhhcwogICBpdHMgb3duIGJpbmRpbmdzIGFuZCByZWxhdGVkIHBhcnNpbmcgbG9naWMuCgpB bSBJIHJpZ2h0ID8KCklmIHRoaXMgaXMgdGhlIGNhc2UsIEkgd291bGQgTk9UIHRyeSB0byBhYnVz ZSB0aGUgY3VycmVudCBTQ01JIFBpbmN0cmwKR2VuZXJpYyBkcml2ZXIgKGJ5IE9sZWtzaWkpIGJ5 IHRocm93aW5nIGludG8gaXQgYSBidW5jaCBvZiBJTVggc3BlY2lmaWMgRFQKcGFyc2luZywgYWxz byBiZWNhdXNlIHlvdSdsbCBlbmQtdXAgTk9UIHVzaW5nIG1vc3Qgb2YgdGhlIGdlbmVyaWMgU0NN SQpQaW5jdHJsIGRyaXZlciBidXQganVzdCByZXVzaW5nIGEgYml0IG9mIHRoZSBwcm9iZSAoY3Vz dG9taXplZCB3aXRoIHlvdXIKb3duIERUIG1hcHMgcGFyc2luZykKCkluc3RlYWQsIGdpdmVuIHRo YXQgdGhlIHNwZWNbMS5dIGFuZCB0aGUgcHJvdG9jb2wgbGF5ZXJbMi5dIGFyZSBmaW5lIGZvcgp5 b3VyIHVzZSBjYXNlIGFuZCB5b3UgaW5kZWVkIGhhdmUgYWxyZWFkeSBhIGN1c3RvbSB3YXkgdG8g cGFyc2UgeW91ciBEVAptYXBwaW5ncywgSSB3b3VsZCBzYXkgdGhhdCB5b3UgY291bGQganVzdCB3 cml0ZSB5b3VyIG93biBjdXN0b20gU0NNSQpkcml2ZXIgKCA/IHBpbmN0cmwtaW14LXNjbWkpLCBk aXN0aW5jdCBhbmQgbXVjaCBtb3JlIHNpbXBsZSB0aGFuIHRoZSBnZW5lcmljIG9uZSwKdGhhdCBk b2VzIGl0cyBvd24gSU1YIERUIHBhcnNpbmcgYW5kIGNhbGxzIGp1c3QgdGhlIFNDTUkgcHJvdG9j b2wgb3BlcmF0aW9ucwp0aGF0IGl0IG5lZWRzIGluIHRoZSB3YXkgdGhhdCB5b3VyIHBsYXRmb3Jt IGV4cGVjdHM6IHNvIGJhc2ljYWxseSBhbm90aGVyClBpbmN0cmwgU0NNSSBkcml2ZXIgdGhhdCBk b2VzIG5vdCB1c2UgdGhlIGdlbmVyaWMgcGluY29uZiBEVApjb25maWd1cmF0aW9uIEJVVCBETyBV U0UgdGhlIHVuZGVybHlpbmcgU0NNSSBQaW5jdHJsIHByb3RvY29sICh2aWEgaXRzCmV4cG9zZWQg cHJvdG9jb2wgb3BlcmF0aW9ucy4uLikKCk5vdCBzdXJlIHdoYXQgU3VkZWVwIHRoaW5rcyBhYm91 dCBzdXBwb3J0aW5nIG11bHRpcGxlIFNDTUkgZHJpdmVyIGZvciB0aGUKc2FtZSBwcm90b2NvbCAo d2UgZGlkIGl0IGFscmVhZHkgZm9yIFNlbnNvcnMgaHdtb24gJiYgaWlvKSwgYW5kIGlmIHRoaXMK YXBwcm9hY2ggd29uJ3QgbmVlZCBzb21lIHNvcnQgb2YgbXV0dWFsIGV4Y2x1c2lvbiBtZWNoYW5p c20gaW4gS2NvbmZpZyB0bwphdm9pZCBsb2FkaW5nIGJvdGggdGhlIGdlbmVyaWMgYW5kIHRoZSBj dXN0b20gSU1YIChldmVuIHRob3VnaCB0aGV5IHNob3VsZApiZSBhYmxlIHRvIGNvLWV4aXN0IGZy b20gdGhlIFNDTUkga2VybmVsL2Z3IHN0YWNrIHBpbnQgb2YgdmlldywgYXMgbG9uZyBhcwp5b3Ug ZG9udCBtZXNzLXVwIHRoZSBEVHMgYW5kIG1peHVwIGdlbmVyaWMgcGlucyB3aXRoIGN1c3RvbSBJ TVggcGlucy4uLikKCkluc3RlYWQsIGFkZGluZyBhbiBJTVgtY3VzdG9tIGV4dGVuc2lvbiB0byB3 aGF0IGl0IHdhcyBzdXBwb3NlZCB0byBiZSBhIGdlbmVyaWMKZHJpdmVyIChhcyB5b3UgcHJvcG9z ZSkgc2VlbXMgdG8gbWUgbGlrZSBhIHN0cmV0Y2ggb2YgdGhlIGdlbmVyaWMgUGluY3RybCBkcml2 ZXIKdGhhdCBpcyBub3QgcmVhbGx5IHdvcnRoLCBzaW5jZSB5b3UnbGwgZW5kIHVwIHBvbGx1dGlu ZyB0aGUgZ2VuZXJpYyBkcml2ZXIgd2l0aApzb21lIGhpZ2hseSBjdXN0b20gYW5kIHNwZWNpZmlj IElNWCBiaXRzLiB3aGlsZSByZWFsbHkgTk9UIHJldXNpbmcgc28gbXVjaCBvZgp0aGUgZ2VuZXJp YyBkcml2ZXIgYXQgYWxsLgoKVGhhbmtzLApDcmlzdGlhbgoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK