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 AAEB8EB8FA5 for ; Wed, 6 Sep 2023 05:43:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232140AbjIFFn4 (ORCPT ); Wed, 6 Sep 2023 01:43:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39654 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229596AbjIFFn4 (ORCPT ); Wed, 6 Sep 2023 01:43:56 -0400 Received: from mail-io1-xd2a.google.com (mail-io1-xd2a.google.com [IPv6:2607:f8b0:4864:20::d2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02CDAEA for ; Tue, 5 Sep 2023 22:43:52 -0700 (PDT) Received: by mail-io1-xd2a.google.com with SMTP id ca18e2360f4ac-792973a659fso24669739f.0 for ; Tue, 05 Sep 2023 22:43:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1693979031; x=1694583831; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:mail-followup-to:message-id:subject:cc:to :from:date:from:to:cc:subject:date:message-id:reply-to; bh=OdFaYaGTjzlyGp7Qapnet5xSyB/GpvqUe5y44btANBM=; b=UMwQ3U8IYVjv5Y6p74MBXm+5khh8gWW52bCVXHkPrd5ZgVL7ZTRWtDJtUHL+FDFKfd eephL8zktmJZioCRTk/DUqFA9tEc2N18jOwyrBcaHtOPh8TpAxoX0697mKO/RjHhJZfY zLyCAOuJC7e9NPQaJKQ3mBh7fhofQNcGu+/0+ar2lQZfRd5a8nHVATkrtSTH0DzByWkO 9ELUVV6StZHjPRSSH5Mw4mjO/R49obiKUk07XpDk4kl+VbrdOcuAMksKGR0/KDQeu6U4 1u6khW+KC0DFuzn42QsYO0qhYRykRWLHtRKPKmY83wTCS3eoaespcWYeYeGrNrxsCuPb WCBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693979031; x=1694583831; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:mail-followup-to:message-id:subject:cc:to :from:date:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=OdFaYaGTjzlyGp7Qapnet5xSyB/GpvqUe5y44btANBM=; b=ThGE1+W2sWw/4wafpfxbFqsfd9CL/CVMXbYT5jTDGs5m88YaAwVvSLuCeRl5dsHOzk 5wWOy/M9N/mORkLdLoeacEMa//jZISOS1je+jnLZY0Y8wRJWlNU7dZYaRiBHvb0u1slZ SyFfG/v355J77xBKJ6xVQbUQ+lTAr6dL+JvIUB9Lxni7iKi5Ngwuj1iSvSc0klj3ALs5 47ctv8zwvV9K/2Wv9F6QmpItWTEtkEjO+PNWBVo+Fvfy4XuOoqKXzaN6X43nsBwzXExn 8nttRGqo6v5P9LQEKjTp5Lotf23z/C7Q1KagAZLINCfNzvOgGC7tgp+FGda3QejaMumJ c6aA== X-Gm-Message-State: AOJu0YzVEpt04xOO6f874jt1RkAr6YcG+G1Ux5NsckhKERTB/Ejmdvq0 1sm+7W4zDcLR1luEhDhlq/5PkQ== X-Google-Smtp-Source: AGHT+IH+UT9R50hhEf1jDx4bYkyvr1jfj+uVGxxCJ2ZKC45cLE2h43GejBGayPxDXc7cB/7SWmp0Rw== X-Received: by 2002:a92:cd06:0:b0:34e:e25:b12c with SMTP id z6-20020a92cd06000000b0034e0e25b12cmr12844747iln.0.1693979031171; Tue, 05 Sep 2023 22:43:51 -0700 (PDT) Received: from octopus ([2400:4050:c3e1:100:8294:a07d:b7e9:4033]) by smtp.gmail.com with ESMTPSA id bf7-20020a17090b0b0700b00263cca08d95sm11752590pjb.55.2023.09.05.22.43.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Sep 2023 22:43:50 -0700 (PDT) Date: Wed, 6 Sep 2023 14:43:46 +0900 From: AKASHI Takahiro To: Cristian Marussi Cc: Peng Fan , Linus Walleij , "Peng Fan (OSS)" , "oleksii_moisieiev@epam.com" , "sudeep.holla@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: Mail-Followup-To: AKASHI Takahiro , Cristian Marussi , Peng Fan , Linus Walleij , "Peng Fan (OSS)" , "oleksii_moisieiev@epam.com" , "sudeep.holla@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" 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 Wed, Aug 30, 2023 at 02:37:48PM +0100, Cristian Marussi wrote: > On Wed, Aug 30, 2023 at 12:48:37PM +0000, Peng Fan wrote: > > Hi Cristian, > > > > Hi, > > > > Subject: Re: [RFC] scmi: pinctrl: support i.MX9 > > > > > > 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 > > > > Yes, based on the Oleksii patchset with my local multiple configs support. > > > > Yes, I know, I pointed out on his series that the protocol has still to > be fixed to be aligned with the latest BETA2 spec (we changed the spec > on the fly while he was already posting indeed..) > > > > > > > 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. > > > > Yes. > > Good. > > > > > > > > > 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. > > > > Yes. > > > > > > > > Am I right ? > > > > You are 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) > > > > Only DT map to parse the dts and map to config array. Others are same, > > so need to export some symbols for pinctrl-scmi-imx.c driver if build imx > > scmi driver. > > > > Yes, but you are basically using some exported symbol to parse the DT in > your way and then you do not use anything of the various > functions/groups stuff...you just leverage some of the probing stuff and > then issue you OEM Type configs....I mean most of the picntrl-scmi > driver would be unused anyway in this scenario. > > > > > > > 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...) > > > > I am ok with this approach, but I need use the other ID, saying 0x99, not 0x19, > > because 0x19 will bind with the pinctrl-scmi.c driver, I could not reuse > > this ID for i.MX pinctrl-scmi-imx driver. Otherwise there will be issue if both > > driver are built in kernel image. > > > > Ok here I lost you. > > The protocol ID 0x19 is bound to the protocol layer and identifies the > standard Pinctrl protocol: usually you use a 0x99 to define and describe > you own specific NEW vendor protocol, BUT here you are saying you are fine to > use std Pinctrl spec AND the protocol operations as exposed in pinctrl.c, so > I dont see why you should use a new vendor protocol_id to basically > expose the same operations. (and I also dont see how you can do that > without hacks in the current codebase) > > You CAN have multiple SCMI drivers using the same protocol at the same > time (even more than one protocol at the same time), even though we try > to avoid it if there are no good reason to have more than one driver, there > is nothing in the spec or in the current SCMI platform or agent stacks that > inhibits such scenario (and I use iot heavily for my offline testing > indeed.) > > Look at: > > - drivers/hwmon/scmi-hwmon > - drivers/iio/common/scmi_sensors/scmi_iio.c > > and you'll see that these 2 drivers uses the same SENSOR protocol, just for > different sensor types so they do not interfere one with each other. Then, how are those two devices identified in a device tree? That is the point in Peng's case and why he wants to have a dedicated protocol id (I don't agree to this, though.) If we follow Cristian's idea, we may want to have two dt nodes, say pinctrl-scmi-generic and pinctrl-scmi-imx, as phandles for other device nodes to refer to pins, respectively. I think there is currently no mechanism (or binding?) to allow this except adding a protocol id. -Takahiro Akashi > What happens is that the first driver using a protocol causes its > protocol_init to be called once for all. > > This should work flawlessly like this, if this is not the case for some > reason, this will have to be fixed in the protocol implementation: you > are supposed to be able to grab the same protocol from different > drivers without any issue. > > I agree that you have to be careful not to share the same pins across 2 > different drivers using the same Pinctrl driver, but even if both driver > are compiled in, nothing is really happening until the related DT > binding are parsed, and so unless you mismatch your DT and assign same > pins to both the Generic SCMI Pinctrl and to the IMX SCMI Pinctrl I dont > see how they can interfere. You could indeed, have a set of pins managed > by your custom IMX driver and one distinct other set of pins handled by > the SCMI Generic driver by Oleksii, both magically handled by the same > SCMI Server backend :P ! > > BUT to be on the safe side you could anyway force a conflict in Kconfig > to mutually exclude one driver when the other is built and vice-versa. > > Am I missing something ? Why would you need a new vendor ID to define a > new protocol without not really having any new protocol ? > > 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 1E1AAEB8FAF for ; Wed, 6 Sep 2023 05:44:33 +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=/UvBlhnBz/RyniXTnO1VTmbgCNQqSqDuKYJKsmoR4zM=; b=pT8LANxt7ur+F5 /HCHH27b4rXmPu0FdM+yQucoA1XzU+mcoWs936uB6e89JejmGGHG1gXHXql6IB2S1oUjQqB+31SLV fkpcsJQbBSqtpV7QTUpBhBp0oO6Vuc0kPWcxojWl+HujY2iHvfkX3VwH1tT7kHNxVj+Oi7TjG/YyG B5q0HC7ZZfHwJ6gPDWwV+T5wyX2rF+E5dPvRn59AR16bu7e64j8j1yvXhyrqKTo8q8DxzKb5X7XY9 5GnwAy9fNn5Kw2//Cxe4W+ieq2LkIu133TZ9HRm0Fpi9/tqIbwwXMwcA/uIivDj4PVY7z7IGuO2+x 7i28VSAdgjgy7gwa/WCA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qdlKa-007JF8-0g; Wed, 06 Sep 2023 05:44:00 +0000 Received: from mail-il1-x12f.google.com ([2607:f8b0:4864:20::12f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qdlKW-007JEA-2Y for linux-arm-kernel@lists.infradead.org; Wed, 06 Sep 2023 05:43:58 +0000 Received: by mail-il1-x12f.google.com with SMTP id e9e14a558f8ab-34bae11c5a6so2639965ab.0 for ; Tue, 05 Sep 2023 22:43:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1693979031; x=1694583831; darn=lists.infradead.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:mail-followup-to:message-id:subject:cc:to :from:date:from:to:cc:subject:date:message-id:reply-to; bh=OdFaYaGTjzlyGp7Qapnet5xSyB/GpvqUe5y44btANBM=; b=A5Ksj4bm29OmSqCFDATjRIX2VCSg1k9bObbHNLUJbv8O2WLXhOPH2oeeOmMR84SRez wGIAZ/7VMESt2RuSLdM76w7e3TurM12gmpRxR+9Sp85zao1Q9+s17pYq9UiDKKGJn3VD P5R+KGjVVtmg4iYESlYzqMMWpE9gpbCrdGsa/+Y9HoPJ50zLyYWQL/sdFXe/w1+j7Rh8 E8QG/boMUVYROmjD0CvtEnMtNxZRBKWYHW58PQ3IIQWaa7qNnHaWinNq+lh91TsmQe7W pBjp/xWd4U616xLIr+vJcdamG3DZ5gRw9fueRBOuXUMoMfmV74lpjUoRv4TdutWu0gJV Q2hA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693979031; x=1694583831; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:mail-followup-to:message-id:subject:cc:to :from:date:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=OdFaYaGTjzlyGp7Qapnet5xSyB/GpvqUe5y44btANBM=; b=e5Cp8LoEC9lzWnzXtC8yz6gA+SiziCdiTmzR8pwvo46wAOvdKjqRZ95pRkzTFSxEBQ eu/9Hgpl8LZ8GZm3Lt18hvPmr0ks4aY6/8qk4/VBezd/ooYOiu+AEtXt2WdHOGRaQ8Nj aIvEdUAX7iqbjYpyHSEd5dVcazQtwB/e2lU0g36wyBuwwEIMAvn8r4o8tZUZ58Ph1Hrs KEVQuC/6CMXFX5CM3q2EWOlD9BV/ofpDDdtuF0EGS7zNcHC1hTCXbWvF+5oCD5fNa3Z+ E/swCr1zyEffLobFQwkuaakEstqLLENotHM6OfeAOca+WebMI3gOq5VpyABtUFG8+HpC btlQ== X-Gm-Message-State: AOJu0YyMDp3az0KfuLof1jrFHgGFuxKhmXskcBmseOt9rfWaqCo+v9Py /ln/qM7iW8nld+fJ6vwQk6kX9Q== X-Google-Smtp-Source: AGHT+IH+UT9R50hhEf1jDx4bYkyvr1jfj+uVGxxCJ2ZKC45cLE2h43GejBGayPxDXc7cB/7SWmp0Rw== X-Received: by 2002:a92:cd06:0:b0:34e:e25:b12c with SMTP id z6-20020a92cd06000000b0034e0e25b12cmr12844747iln.0.1693979031171; Tue, 05 Sep 2023 22:43:51 -0700 (PDT) Received: from octopus ([2400:4050:c3e1:100:8294:a07d:b7e9:4033]) by smtp.gmail.com with ESMTPSA id bf7-20020a17090b0b0700b00263cca08d95sm11752590pjb.55.2023.09.05.22.43.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Sep 2023 22:43:50 -0700 (PDT) Date: Wed, 6 Sep 2023 14:43:46 +0900 From: AKASHI Takahiro To: Cristian Marussi Cc: Peng Fan , Linus Walleij , "Peng Fan (OSS)" , "oleksii_moisieiev@epam.com" , "sudeep.holla@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: Mail-Followup-To: AKASHI Takahiro , Cristian Marussi , Peng Fan , Linus Walleij , "Peng Fan (OSS)" , "oleksii_moisieiev@epam.com" , "sudeep.holla@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" 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-20230905_224356_836004_50ACEB41 X-CRM114-Status: GOOD ( 70.83 ) 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 T24gV2VkLCBBdWcgMzAsIDIwMjMgYXQgMDI6Mzc6NDhQTSArMDEwMCwgQ3Jpc3RpYW4gTWFydXNz aSB3cm90ZToKPiBPbiBXZWQsIEF1ZyAzMCwgMjAyMyBhdCAxMjo0ODozN1BNICswMDAwLCBQZW5n IEZhbiB3cm90ZToKPiA+IEhpIENyaXN0aWFuLAo+ID4gCj4gCj4gSGksCj4gCj4gPiA+IFN1Ympl Y3Q6IFJlOiBbUkZDXSBzY21pOiBwaW5jdHJsOiBzdXBwb3J0IGkuTVg5Cj4gPiA+IAo+ID4gPiBP biBGcmksIEF1ZyAyNSwgMjAyMyBhdCAwODo0MzozOEFNICswMDAwLCBQZW5nIEZhbiB3cm90ZToK PiA+ID4gPiA+IFN1YmplY3Q6IFJlOiBbUkZDXSBzY21pOiBwaW5jdHJsOiBzdXBwb3J0IGkuTVg5 Cj4gPiA+ID4gPgo+ID4gPiA+ID4gT24gVGh1LCBBdWcgMjQsIDIwMjMgYXQgMjo0N+KAr1BNIFBl bmcgRmFuIDxwZW5nLmZhbkBueHAuY29tPiB3cm90ZToKPiA+ID4gPiA+ID4gTWU6Cj4gPiA+IAo+ ID4gPiBIaSBQZW5nLAo+ID4gPiAKPiA+ID4gPiA+Cj4gPiA+ID4gPiA+PiBpdCBpcyBtZXJlbHkg bWFraW5nIHRoaW5ncyBtb3JlIGNvbXBsZXggYW5kIGFsc28gc2xvd2VyCj4gPiA+ID4gPiA+ID4g YnltYWtpbmcgdGhlIHJlZ2lzdGVycyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGlzIFNDTUkgbGlu ay4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gVGhpcyBpcyBmb3Igc2FmZXR5IHJlYXNvbiwgdGhl IHBpbmN0cmwgaGFyZHdhcmUgbXVzdCBiZSBoYW5kbGVkIGJ5Cj4gPiA+ID4gPiA+IGEgc3lzdGVt IG1hbmFnZXIgZW50aXR5LiBTbyBtbWlvIGRpcmVjdCBhY2Nlc3Mgbm90IGFsbG93ZWQgZnJvbQo+ ID4gPiA+ID4gPiBDb3J0ZXgtQSBzaWRlLgo+ID4gPiA+ID4KPiA+ID4gPiA+IFllYWggSSB1bmRl cnN0b29kIGFzIG11Y2guIEJ1dCBJIGRvbid0IHRoaW5rIHRoYXQgdGhlIGZpcm13YXJlIGlzCj4g PiA+ID4gPiByZWFsbHkgZmlsdGVyaW5nIGFueSBvZiB0aGUgYWNjZXNzLCBpdCB3aWxsIGp1c3Qg cG9rZSBpbnRvIGFueQo+ID4gPiA+ID4gcGluY3RybCByZWdpc3RlciBhcyBpbnN0cnVjdGVkIGFu eXdheSBzbyB3aGF0J3MgdGhlIHBvaW50LiBKdXN0IGxvb2tzIGxpa2UgYQo+ID4gPiBsYXllciBv ZiBpbmRpcmVjdGlvbi4KPiA+ID4gPgo+ID4gPiA+IE5vLCB0aGUgZmlybXdhcmUgaGFzIGEgY2hl Y2sgb24gd2hldGhlciBhIHBpbiBpcyBhbGxvd2VkIHRvIGJlCj4gPiA+ID4gY29uZmlndXJlZCBi eSB0aGUgYWdlbnQgdGhhdCB3YW5uYSB0byBjb25maWd1cmUgdGhlIHBpbi4KPiA+ID4gPgo+ID4g PiA+ID4gQnV0IEknbSBub3QgeW91ciBzeXN0ZW0gbWFuYWdlciwgc28gaXQncyBub3QgbXkgZGVj aXNpb24uCj4gPiA+ID4gPgo+ID4gPiA+ID4gPiBUaGUgU0NNSSBmaXJtd2FyZSBpcyB2ZXJ5IHN0 cmFpZ2h0Zm9yd2FyZCwgdGhlcmUgaXMgbm8gZ3JvdXAgb3IKPiA+ID4gPiA+ID4gZnVuY3Rpb24u Cj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEl0IGp1c3QgYWNjZXB0cyB0aGUgZm9ybWF0IGFzIHRo aXM6Cj4gPiA+ID4gPiA+IE1VWF9UWVBFLCBNVVggVkFMVUUsIENPTkZfVFlQRSwgQ09ORl9WQUws IERBSVNZX1RZUEUsIERBSVNZCj4gPiA+IElELAo+ID4gPiA+ID4gPiBEQUlTWV9DRkcsIERBSVNZ X1ZBTFVFLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBTaW1pbGFyIGFzIGxpbnV4IE1NSU8gZm9y bWF0Lgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBPdXIgaS5NWDk1IHBsYXRmb3JtIHdpbGwgc3Vw cG9ydCB0d28gc2V0dGluZ3MsIG9uZSB3aXRoIFNDTUkKPiA+ID4gPiA+ID4gZmlybXdhcmUsIG9u ZSB3aXRob3V0IFNDTUkuIFRoZXNlIHR3byBzZXR0aW5ncyB3aWxsIHNoYXJlIHRoZSBzYW1lCj4g PiA+ID4gPiA+IHBpbmN0cmwgaGVhZGVyIGZpbGUuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEFu ZCB0byBzaW1wbGlmeSB0aGUgc2NtaSBmaXJtd2FyZSBkZXNpZ24oYW55d2F5IEkgYW0gbm90IG93 bmVyIG9mCj4gPiA+ID4gPiA+IHRoZSBmaXJtd2FyZSksIHRvIG1ha2UgcGluY3RybCBoZWFkZXIg c2hhcmVkIHcvbyBzY21pLCB3ZSB0YWtlIHRoZQo+ID4gPiA+ID4gPiBjdXJyZW50IGluLXVwc3Ry ZWFtIGZyZWVzY2FsZSBpbXggYmluZGluZyBmb3JtYXQuCj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhl IFNDTUkgcGVvcGxlIHdpbGwgaGF2ZSB0byBzdGF0ZSB0aGVpciBwb3NpdGlvbiBvbiB0aGlzLgo+ ID4gPiA+ID4gTGlrZSB3aGF0IHRoZXkgY29uc2lkZXIgY29uZm9ybWFuY2UgYW5kIHdoYXQgZXh0 ZW5zaW9ucyBhcmUgYWxsb3dlZC4KPiA+ID4gPiA+IFRoaXMgaXMgbW9yZSBhIHN0YW5kYXJkaXph dGlvbiBxdWVzdGlvbiB0aGFuIGFuIGltcGxlbWVudGF0aW9uCj4gPiA+ID4gPiBxdWVzdGlvbiBz byBpdCdzIG5vdCByZWFsbHkgbXkgdHVyZi4KPiA+ID4gPgo+ID4gPiA+IFRoZSBpLk1YOTUgU0NN SSBmaXJtd2FyZSB1c2VzIE9FTSBleHRlbnNpb24gdHlwZS4gU28gSSBqdXN0IGZvbGxvdwo+ID4g PiA+IHdoYXQgdGhlIGZpcm13YXJlIGRpZCBhbmQgc3VwcG9ydCBpdCBpbiBsaW51eC4gQW55d2F5 IGxldCdzIHdhaXQKPiA+ID4gPiBTdWRlZXAncyByZXBseS4KPiA+ID4gPgo+ID4gPiAKPiA+ID4g U28gbXkgdW5zZGVyc3RhbmRpbmcgb24gdGhpcyBtYXR0ZXIgYXMgb2Ygbm93IGlzIHRoYXQ6Cj4g PiA+IAo+ID4gPiAxLiB0aGUgY3VycmVudCBTQ01JIFBpbmN0cmwgc3BlY2lmaWNhdGlvbiBjYW4g c3VwcG9ydCB5b3VyIHVzZWNhc2UgYnkgdXNpbmcKPiA+ID4gICAgT0VNIFR5cGVzIGFuZCBtdWx0 aXBsZSBwaW5zL3ZhbHVlcyBDT05GSUdfR0VUL1NFVCBjb21tYW5kcwo+ID4gCj4gPiBZZXMsIGJh c2VkIG9uIHRoZSBPbGVrc2lpIHBhdGNoc2V0IHdpdGggbXkgbG9jYWwgbXVsdGlwbGUgY29uZmln cyBzdXBwb3J0Lgo+ID4gCj4gCj4gWWVzLCBJIGtub3csIEkgcG9pbnRlZCBvdXQgb24gaGlzIHNl cmllcyB0aGF0IHRoZSBwcm90b2NvbCBoYXMgc3RpbGwgdG8KPiBiZSBmaXhlZCB0byBiZSBhbGln bmVkIHdpdGggdGhlIGxhdGVzdCBCRVRBMiBzcGVjICh3ZSBjaGFuZ2VkIHRoZSBzcGVjCj4gb24g dGhlIGZseSB3aGlsZSBoZSB3YXMgYWxyZWFkeSBwb3N0aW5nIGluZGVlZC4uKQo+IAo+ID4gPiAK PiA+ID4gMi4gdGhlIEtlcm5lbCBTQ01JIHByb3RvY29sIGxheWVyIChkcml2ZXIvZmlybXdhcmUv YXJtX3NjbWkvcGluY3RybC5jKQo+ID4gPiAgICBpcyBlcXVhbGx5IGZpbmUgYW5kIGNhbiBzdXBw b3J0IHlvdXIgdXNlY2FzZSwgQUZURVIgT2xla3NpaSBmaXhlcyBpdCB0bwo+ID4gPiAgICBhbGln biBpdCB0byB0aGUgbGF0ZXN0IHYzLjItQkVUQTIgc3BlY2lmaWNhdGlvbiBjaGFuZ2VzLgo+ID4g PiAgICBJT1csIHRoaXMgbWVhbnMgdGhhdCwgdXNpbmcgdGhlIFNDTUkgUGluY3RybCBwcm90b2Nv bCBvcGVyYXRpb25zCj4gPiA+ICAgIGV4cG9zZWQgaW4gc2NtaV9wcm90b2NvbC5oLCBmcm9tIHNv bWV3aGVyZSwgeW91IGFyZSBhYmxlIHRvIHByb3Blcmx5Cj4gPiA+ICAgIGNvbmZpZ3VyZSBtdWx0 aXBsZSBwaW5zL3ZhbHVlcyB3aXRoIHlvdXIgc3BlY2lmaWMgT0VNIHR5cGVzLgo+ID4gCj4gPiBZ ZXMuCj4gCj4gR29vZC4KPiAKPiA+IAo+ID4gPiAKPiA+ID4gMy4gVGhlIFNDTUkgUGluY3RybCBk cml2ZXIgKGJ5IE9sZWtzaWkpIGJ1aWx0IG9uIHRvcCBvZiB0aGUgcGluY3RybCBwcm90b2NvbAo+ ID4gPiAgICBvcGVyYXRpb25zIGlzIGluc3RlYWQgTk9UIHN1aXRhYmxlIGZvciB5b3VyIHVzZWNh c2Ugc2luY2UgaXQgdXNlcyB0aGUgTGludXgKPiA+ID4gICAgR2VuZXJpYyBQaW5jb25mIGFuZCBJ TVggZG9lcyBub3QgbWFrZSB1c2Ugb2YgaXQsIGFuZCBpbnN0ZWFkIElNWCBoYXMKPiA+ID4gICAg aXRzIG93biBiaW5kaW5ncyBhbmQgcmVsYXRlZCBwYXJzaW5nIGxvZ2ljLgo+ID4gCj4gPiBZZXMu Cj4gPiAKPiA+ID4gCj4gPiA+IEFtIEkgcmlnaHQgPwo+ID4gCj4gPiBZb3UgYXJlIHJpZ2h0Lgo+ ID4gCj4gPiA+IAo+ID4gPiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBJIHdvdWxkIE5PVCB0cnkgdG8g YWJ1c2UgdGhlIGN1cnJlbnQgU0NNSSBQaW5jdHJsIEdlbmVyaWMKPiA+ID4gZHJpdmVyIChieSBP bGVrc2lpKSBieSB0aHJvd2luZyBpbnRvIGl0IGEgYnVuY2ggb2YgSU1YIHNwZWNpZmljIERUIHBh cnNpbmcsCj4gPiA+IGFsc28gYmVjYXVzZSB5b3UnbGwgZW5kLXVwIE5PVCB1c2luZyBtb3N0IG9m IHRoZSBnZW5lcmljIFNDTUkgUGluY3RybCBkcml2ZXIKPiA+ID4gYnV0IGp1c3QgcmV1c2luZyBh IGJpdCBvZiB0aGUgcHJvYmUgKGN1c3RvbWl6ZWQgd2l0aCB5b3VyIG93biBEVCBtYXBzCj4gPiA+ IHBhcnNpbmcpCj4gPiAKPiA+IE9ubHkgRFQgbWFwIHRvIHBhcnNlIHRoZSBkdHMgYW5kIG1hcCB0 byBjb25maWcgYXJyYXkuIE90aGVycyBhcmUgc2FtZSwKPiA+IHNvIG5lZWQgdG8gZXhwb3J0IHNv bWUgc3ltYm9scyBmb3IgcGluY3RybC1zY21pLWlteC5jIGRyaXZlciBpZiBidWlsZCBpbXgKPiA+ IHNjbWkgZHJpdmVyLgo+ID4KPiAKPiBZZXMsIGJ1dCB5b3UgYXJlIGJhc2ljYWxseSB1c2luZyBz b21lIGV4cG9ydGVkIHN5bWJvbCB0byBwYXJzZSB0aGUgRFQgaW4KPiB5b3VyIHdheSBhbmQgdGhl biB5b3UgZG8gbm90IHVzZSBhbnl0aGluZyBvZiB0aGUgdmFyaW91cwo+IGZ1bmN0aW9ucy9ncm91 cHMgc3R1ZmYuLi55b3UganVzdCBsZXZlcmFnZSBzb21lIG9mIHRoZSBwcm9iaW5nIHN0dWZmIGFu ZAo+IHRoZW4gaXNzdWUgeW91IE9FTSBUeXBlIGNvbmZpZ3MuLi4uSSBtZWFuIG1vc3Qgb2YgdGhl IHBpY250cmwtc2NtaQo+IGRyaXZlciB3b3VsZCBiZSB1bnVzZWQgYW55d2F5IGluIHRoaXMgc2Nl bmFyaW8uCj4gCj4gPiA+IAo+ID4gPiBJbnN0ZWFkLCBnaXZlbiB0aGF0IHRoZSBzcGVjWzEuXSBh bmQgdGhlIHByb3RvY29sIGxheWVyWzIuXSBhcmUgZmluZSBmb3IgeW91cgo+ID4gPiB1c2UgY2Fz ZSBhbmQgeW91IGluZGVlZCBoYXZlIGFscmVhZHkgYSBjdXN0b20gd2F5IHRvIHBhcnNlIHlvdXIg RFQKPiA+ID4gbWFwcGluZ3MsIEkgd291bGQgc2F5IHRoYXQgeW91IGNvdWxkIGp1c3Qgd3JpdGUg eW91ciBvd24gY3VzdG9tIFNDTUkKPiA+ID4gZHJpdmVyICggPyBwaW5jdHJsLWlteC1zY21pKSwg ZGlzdGluY3QgYW5kIG11Y2ggbW9yZSBzaW1wbGUgdGhhbiB0aGUgZ2VuZXJpYwo+ID4gPiBvbmUs IHRoYXQgZG9lcyBpdHMgb3duIElNWCBEVCBwYXJzaW5nIGFuZCBjYWxscyBqdXN0IHRoZSBTQ01J IHByb3RvY29sCj4gPiA+IG9wZXJhdGlvbnMgdGhhdCBpdCBuZWVkcyBpbiB0aGUgd2F5IHRoYXQg eW91ciBwbGF0Zm9ybSBleHBlY3RzOiBzbyBiYXNpY2FsbHkKPiA+ID4gYW5vdGhlciBQaW5jdHJs IFNDTUkgZHJpdmVyIHRoYXQgZG9lcyBub3QgdXNlIHRoZSBnZW5lcmljIHBpbmNvbmYgRFQKPiA+ ID4gY29uZmlndXJhdGlvbiBCVVQgRE8gVVNFIHRoZSB1bmRlcmx5aW5nIFNDTUkgUGluY3RybCBw cm90b2NvbCAodmlhIGl0cwo+ID4gPiBleHBvc2VkIHByb3RvY29sIG9wZXJhdGlvbnMuLi4pCj4g PiAKPiA+IEkgYW0gb2sgd2l0aCB0aGlzIGFwcHJvYWNoLCBidXQgSSBuZWVkIHVzZSB0aGUgb3Ro ZXIgSUQsIHNheWluZyAweDk5LCBub3QgMHgxOSwKPiA+IGJlY2F1c2UgMHgxOSB3aWxsIGJpbmQg d2l0aCB0aGUgcGluY3RybC1zY21pLmMgZHJpdmVyLCBJIGNvdWxkIG5vdCByZXVzZQo+ID4gdGhp cyBJRCBmb3IgaS5NWCBwaW5jdHJsLXNjbWktaW14IGRyaXZlci4gT3RoZXJ3aXNlIHRoZXJlIHdp bGwgYmUgaXNzdWUgaWYgYm90aAo+ID4gZHJpdmVyIGFyZSBidWlsdCBpbiBrZXJuZWwgaW1hZ2Uu Cj4gPiAKPiAKPiBPayBoZXJlIEkgbG9zdCB5b3UuCj4gCj4gVGhlIHByb3RvY29sIElEIDB4MTkg aXMgYm91bmQgdG8gdGhlIHByb3RvY29sIGxheWVyIGFuZCBpZGVudGlmaWVzIHRoZQo+IHN0YW5k YXJkIFBpbmN0cmwgcHJvdG9jb2w6IHVzdWFsbHkgeW91IHVzZSBhIDB4OTkgdG8gZGVmaW5lIGFu ZCBkZXNjcmliZQo+IHlvdSBvd24gc3BlY2lmaWMgTkVXIHZlbmRvciBwcm90b2NvbCwgQlVUIGhl cmUgeW91IGFyZSBzYXlpbmcgeW91IGFyZSBmaW5lIHRvCj4gdXNlIHN0ZCBQaW5jdHJsIHNwZWMg QU5EIHRoZSBwcm90b2NvbCBvcGVyYXRpb25zIGFzIGV4cG9zZWQgaW4gcGluY3RybC5jLCBzbwo+ IEkgZG9udCBzZWUgd2h5IHlvdSBzaG91bGQgdXNlIGEgbmV3IHZlbmRvciBwcm90b2NvbF9pZCB0 byBiYXNpY2FsbHkKPiBleHBvc2UgdGhlIHNhbWUgb3BlcmF0aW9ucy4gKGFuZCBJIGFsc28gZG9u dCBzZWUgaG93IHlvdSBjYW4gZG8gdGhhdAo+IHdpdGhvdXQgaGFja3MgaW4gdGhlIGN1cnJlbnQg Y29kZWJhc2UpCj4gCj4gWW91IENBTiBoYXZlIG11bHRpcGxlIFNDTUkgZHJpdmVycyB1c2luZyB0 aGUgc2FtZSBwcm90b2NvbCBhdCB0aGUgc2FtZQo+IHRpbWUgKGV2ZW4gbW9yZSB0aGFuIG9uZSBw cm90b2NvbCBhdCB0aGUgc2FtZSB0aW1lKSwgZXZlbiB0aG91Z2ggd2UgdHJ5Cj4gdG8gYXZvaWQg aXQgaWYgdGhlcmUgYXJlIG5vIGdvb2QgcmVhc29uIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBkcml2 ZXIsIHRoZXJlCj4gaXMgbm90aGluZyBpbiB0aGUgc3BlYyBvciBpbiB0aGUgY3VycmVudCBTQ01J IHBsYXRmb3JtIG9yIGFnZW50IHN0YWNrcyB0aGF0Cj4gaW5oaWJpdHMgc3VjaCBzY2VuYXJpbyAo YW5kIEkgdXNlIGlvdCBoZWF2aWx5IGZvciBteSBvZmZsaW5lIHRlc3RpbmcKPiBpbmRlZWQuKQo+ IAo+IExvb2sgYXQ6Cj4gCj4gIC0gZHJpdmVycy9od21vbi9zY21pLWh3bW9uIAo+ICAtIGRyaXZl cnMvaWlvL2NvbW1vbi9zY21pX3NlbnNvcnMvc2NtaV9paW8uYwo+IAo+IGFuZCB5b3UnbGwgc2Vl IHRoYXQgdGhlc2UgMiBkcml2ZXJzIHVzZXMgdGhlIHNhbWUgU0VOU09SIHByb3RvY29sLCBqdXN0 IGZvcgo+IGRpZmZlcmVudCBzZW5zb3IgdHlwZXMgc28gdGhleSBkbyBub3QgaW50ZXJmZXJlIG9u ZSB3aXRoIGVhY2ggb3RoZXIuCgpUaGVuLCBob3cgYXJlIHRob3NlIHR3byBkZXZpY2VzIGlkZW50 aWZpZWQgaW4gYSBkZXZpY2UgdHJlZT8KVGhhdCBpcyB0aGUgcG9pbnQgaW4gUGVuZydzIGNhc2Ug YW5kIHdoeSBoZSB3YW50cyB0byBoYXZlIGEgZGVkaWNhdGVkCnByb3RvY29sIGlkIChJIGRvbid0 IGFncmVlIHRvIHRoaXMsIHRob3VnaC4pCklmIHdlIGZvbGxvdyBDcmlzdGlhbidzIGlkZWEsIHdl IG1heSB3YW50IHRvIGhhdmUgdHdvIGR0IG5vZGVzLCBzYXkKcGluY3RybC1zY21pLWdlbmVyaWMg YW5kIHBpbmN0cmwtc2NtaS1pbXgsIGFzIHBoYW5kbGVzIGZvciBvdGhlciBkZXZpY2UKbm9kZXMg dG8gcmVmZXIgdG8gcGlucywgcmVzcGVjdGl2ZWx5LgpJIHRoaW5rIHRoZXJlIGlzIGN1cnJlbnRs eSBubyBtZWNoYW5pc20gKG9yIGJpbmRpbmc/KSB0byBhbGxvdyB0aGlzCmV4Y2VwdCBhZGRpbmcg YSBwcm90b2NvbCBpZC4KCi1UYWthaGlybyBBa2FzaGkKCgo+IFdoYXQgaGFwcGVucyBpcyB0aGF0 IHRoZSBmaXJzdCBkcml2ZXIgdXNpbmcgYSBwcm90b2NvbCBjYXVzZXMgaXRzCj4gcHJvdG9jb2xf aW5pdCB0byBiZSBjYWxsZWQgb25jZSBmb3IgYWxsLgo+IAo+IFRoaXMgc2hvdWxkIHdvcmsgZmxh d2xlc3NseSBsaWtlIHRoaXMsIGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBzb21lCj4gcmVh c29uLCB0aGlzIHdpbGwgaGF2ZSB0byBiZSBmaXhlZCBpbiB0aGUgcHJvdG9jb2wgaW1wbGVtZW50 YXRpb246IHlvdQo+IGFyZSBzdXBwb3NlZCB0byBiZSBhYmxlIHRvIGdyYWIgdGhlIHNhbWUgcHJv dG9jb2wgZnJvbSBkaWZmZXJlbnQKPiBkcml2ZXJzIHdpdGhvdXQgYW55IGlzc3VlLgo+IAo+IEkg YWdyZWUgdGhhdCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBzaGFyZSB0aGUgc2FtZSBw aW5zIGFjcm9zcyAyCj4gZGlmZmVyZW50IGRyaXZlcnMgdXNpbmcgdGhlIHNhbWUgUGluY3RybCBk cml2ZXIsIGJ1dCBldmVuIGlmIGJvdGggZHJpdmVyCj4gYXJlIGNvbXBpbGVkIGluLCBub3RoaW5n IGlzIHJlYWxseSBoYXBwZW5pbmcgdW50aWwgdGhlIHJlbGF0ZWQgRFQKPiBiaW5kaW5nIGFyZSBw YXJzZWQsIGFuZCBzbyB1bmxlc3MgeW91IG1pc21hdGNoIHlvdXIgRFQgYW5kIGFzc2lnbiBzYW1l Cj4gcGlucyB0byBib3RoIHRoZSBHZW5lcmljIFNDTUkgUGluY3RybCBhbmQgdG8gdGhlIElNWCBT Q01JIFBpbmN0cmwgSSBkb250Cj4gc2VlIGhvdyB0aGV5IGNhbiBpbnRlcmZlcmUuIFlvdSBjb3Vs ZCBpbmRlZWQsIGhhdmUgYSBzZXQgb2YgcGlucyBtYW5hZ2VkCj4gYnkgeW91ciBjdXN0b20gSU1Y IGRyaXZlciBhbmQgb25lIGRpc3RpbmN0IG90aGVyIHNldCBvZiBwaW5zIGhhbmRsZWQgYnkKPiB0 aGUgU0NNSSBHZW5lcmljIGRyaXZlciBieSBPbGVrc2lpLCBib3RoIG1hZ2ljYWxseSBoYW5kbGVk IGJ5IHRoZSBzYW1lCj4gU0NNSSBTZXJ2ZXIgYmFja2VuZCA6UCAhCj4gCj4gQlVUIHRvIGJlIG9u IHRoZSBzYWZlIHNpZGUgeW91IGNvdWxkIGFueXdheSBmb3JjZSBhIGNvbmZsaWN0IGluIEtjb25m aWcKPiB0byBtdXR1YWxseSBleGNsdWRlIG9uZSBkcml2ZXIgd2hlbiB0aGUgb3RoZXIgaXMgYnVp bHQgYW5kIHZpY2UtdmVyc2EuCj4gCj4gQW0gSSBtaXNzaW5nIHNvbWV0aGluZyA/IFdoeSB3b3Vs ZCB5b3UgbmVlZCBhIG5ldyB2ZW5kb3IgSUQgdG8gZGVmaW5lIGEKPiBuZXcgcHJvdG9jb2wgd2l0 aG91dCBub3QgcmVhbGx5IGhhdmluZyBhbnkgbmV3IHByb3RvY29sID8KPiAKPiBUaGFua3MsCj4g Q3Jpc3RpYW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK