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 A7F25C77B7F for ; Tue, 16 May 2023 11:50:41 +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:In-Reply-To: Content-Transfer-Encoding:Content-Type: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=12oCxnsjDGRIi94hOFSo73JpXQEuM8yD/ulEikbT2L4=; b=sVSC8bUcPdlHKbuNTn/+NNIpbn JAYxbb8raxypuGbJNSXjKKwOhWWdqTAgf2ZVG4keiy5+0GC4XJc4Avpa3pFHDacwo+No6LY8TpyMs /Ti9kJD5fqHtQVooSXwCpajerY0Fmk3PF3symcSSkZdfCJKXI6xmI6T2Wbwvlnu5SHbYQJ589NJ6K /8FElVYWqUOSQhvlAG3PDb2/zDEQyVyUxlqRwV1xzVjQkox4WK6YruKtB2LXnPJh99vIBTw7KWC1S iEZAbK8yaNE0U7n7G/ZUDsgIV032cnmIDrENJnOdd0+DPJJYBc9QpCMqW5/NyhGkCVefLdeNQG6oN dk9VbHYg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pytCF-005dph-2W; Tue, 16 May 2023 11:50:27 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:32c8:5054:ff:fe00:142]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pytCB-005doa-2L; Tue, 16 May 2023 11:50:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type: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-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=12oCxnsjDGRIi94hOFSo73JpXQEuM8yD/ulEikbT2L4=; b=tuwTkh+5w5+Qt2MPL0jAfyNZxg DWX0hQcDynjGyxGAzHbREit1U7MiRp8je4AjojwvfK7s9TJZa9Xg2DUAlpGMp7NaXJpSvN/46IQuS Yp7YOpdIouupc8LfTIbSxG2pvxGVwVqRZsNKDVsmvS/YQFn8jrDZqvzjc4rPl2sljF4u5sAR9L7jx dMQrhzkdiGF8W5w1z3UZ3qsv+YmJKrNr55c7y3DNyCTg9y67ip6RHyxOssInIQ440xlvY5pppOm0X qZ8K8RliQdmLz9UKNIahBBG58/PAAZERMFtrsFVksLl/J1feC/Ku/KQGmoumQ7XZngXU485rQ8YRG BYtONZZQ==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:56526) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1pytBf-0005fL-QL; Tue, 16 May 2023 12:49:51 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1pytBY-0000me-Em; Tue, 16 May 2023 12:49:44 +0100 Date: Tue, 16 May 2023 12:49:44 +0100 From: "Russell King (Oracle)" To: Vladimir Oltean Cc: Andrew Lunn , AngeloGioacchino Del Regno , Daniel Machon , "David S. Miller" , Eric Dumazet , Felix Fietkau , Florian Fainelli , Heiner Kallweit , Horatiu Vultur , Ioana Ciornei , Jakub Kicinski , John Crispin , Jose Abreu , Lars Povlsen , Lorenzo Bianconi , Marcin Wojtas , Mark Lee , Matthias Brugger , Maxime Chevallier , Paolo Abeni , Sean Wang , Steen Hegelund , Taras Chornyi , Thomas Petazzoni , UNGLinuxDriver@microchip.com, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, netdev@vger.kernel.org Subject: Re: [PATCH RFC] Providing a helper for PCS inband negotiation Message-ID: References: <20230515195616.uwg62f7hw47mktfu@skbuf> <20230515220833.up43pd76zne2suy2@skbuf> <20230516090009.ssq3uedjl53kzsjr@skbuf> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230516090009.ssq3uedjl53kzsjr@skbuf> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230516_045023_910062_A793E036 X-CRM114-Status: GOOD ( 58.08 ) X-BeenThere: linux-mediatek@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-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org On Tue, May 16, 2023 at 12:00:09PM +0300, Vladimir Oltean wrote: > On Tue, May 16, 2023 at 12:36:33AM +0100, Russell King (Oracle) wrote: > > > Clause 73 negotiates the actual use of 10GBase-KR as a SERDES protocol > > > through the copper backplane in favor of other "Base-K*" alternative > > > link modes, so it's not quite proper to say that 10GBase-KR is a clause > > > 73 using protocol. > > > > I believe it is correct to state it as such, because: > > > > 72.1: Table 72–1—Physical Layer clauses associated with the 10GBASE-KR PMD > > > > 73—Auto-Negotiation for Backplane Ethernet Required > > > > Essentially, 802.3 doesn't permit 10GBASE-KR without hardware support > > for Clause 73 AN (but that AN doesn't have to be enabled by management > > software.) > > Just like clause 40 (PCS and PMA for 1000BASE-T) requires clause 28 AN > to be supported. But, when the autoneg process begins, the use of > 10GBase-KR as a protocol over the backplane link hasn't even been yet > established, so I find it unnatural to speak of clause 73 autoneg as > something that 10GBase-KR has. > > The reason why I'm insisting on this is because to me, to treat clause > 73 as an in-band autoneg process of 10GBase-KR sounds like a reversal of > causality. The clause 73 link codeword has a Technology Ability field > through which 10GBase-KR, 1GBase-KX etc are advertised as supported > protocols. If C73 is an inband protocol of 10GBase-KR, what should the > local PCS advertise for its Technology Ability? Only 10GBase-KR, because > this is what is implied by treating it as an attribute of 10GBase-KR, no? I'm not going to get hung up on this, because I don't regard the point as being particularly important to this discussion. You are right that Clause 73 AN selects whether e.g. 10GBASE-KR gets used, and I don't disagree with that. We're just entering into what seems like a pointless debate that eats up email bandwidth. > But that would be a denatured way of negotiating - advertise a single > link mode, take it or leave it. And what other inband autoneg protocols > permit, say, starting from SGMII and ending in 1000Base-X? Clause 73 > can't be directly compared to what we currently mean by managed = > "in-band-status". > > Not only is C37 autoneg not directly comparable to C73, but they are not > mutually exclusive, either. I would say they are more or less orthogonal. > More below. > > I don't believe that toggling clause 73 autoneg based on phylink_pcs_neg_mode() > makes much sense. I agree, which means phylink_pcs_neg_mode() needs to document this so that people don't think it does - and that solves both of the issues I was bringing up in my original email. > > However, if we did want to extend this topic, then there are a number > > of questions that really need to be asked is about the XPCS driver. > > Such as - what does 1000BASE-KX, 10000BASE-KX4, 10000BASE-KR and > > 2500BASE-X have to do with USXGMII, and why are there no copper > > ethtool modes listed when a USXGMII link can definitely support > > being connected to a copper PHY? (See xpcs_usxgmii_features[]). > > > > Why does XPCS think that USXGMII uses Clause 73 AN? (see the first > > entry in synopsys_xpcs_compat[].) > > First, in principle USXGMII and clause 73 are not mutually exclusive. > > It is possible to use clause 73 to advertise 10GBase-KR as a link mode, > and that will give you link training for proper 3-tap electrical > equalization over the copper backplane. > > Then, once C73 AN/LT ended and 10GBase-KR has been established, is > possible to configure the 10GBase-R PCS to enable C37 USXGMII to select > the actual data rate via symbol replication, while the SERDES lane > remains at 10GBaud. At least, the XPCS seems to permit enabling symbol > replication in conjunction with 10GBase-KR. My comments are against the driver as it stands today, not some theoretical case that the hardware may support. What I'm getting at is if the interface mode is PHY_INTERFACE_MODE_USXGMII, then... okay... we _may_ wish to do clause 73 negotiation advertising 10GBASE-KR and then do clause 73 for the USXGMII control word - but the driver doesn't do this as far as I can see. If C73 AN is being used, it merely reads the C73 state and returns the resolution from that. Any speed information that a USXGMII PHY passes back over the C37 inband signalling would be ignored because there seems to be no provision for the USXGMII inband signalling. So I'm confused what the xpcs driver _actually_ does when USXGMII mode is selected by PHY_INTERFACE_MODE_USXGMII, because looking at the driver, it doesn't look like it's USXGMII at all. > Then, there's the entire issue that the code, as it was originally > introduced, is not the same as it is now. For example, this bit in > xpcs_do_config(): > > switch (compat->an_mode) { > case DW_AN_C73: > if (phylink_autoneg_inband(mode)) { > ret = xpcs_config_aneg_c73(xpcs, compat); > if (ret) > return ret; > } > break; > > used to look at state->an_enabled rather than phylink_autoneg_inband(). > Through my idiocy, I inadvertently converted that in commit 11059740e616 > ("net: pcs: xpcs: convert to phylink_pcs_ops"). If we want to change that back to the old behaviour, that needs to be: if (test_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, advertising)) { ... } break; but that wouldn't ever have been sufficient, even when the code was using an_enabled, because both of these reflect the user configuration. (an_enabled was just a proxy for this Autoneg bit). I'm going to call both of these an "AN indicator" in the question below. Isn't it rather perverse that the driver configures AN if this AN indicator is set, but then does nothing if it isn't? > > xpcs_sgmii_features[] only mentions copper linkmodes, but as we know, > > it's common for copper PHYs to also support fibre with an auto- > > selection mechanism. So, 1000BASE-X is definitely possible if SGMII > > is supported, so why isn't it listed. > > Most likely explanation is that XPCS has never been paired up until now > to such a PHY. So it's probably safe to add ETHTOOL_LINK_MODE_1000baseX_Full_BIT there - thanks. > > As previously said, 1000BASE-X can be connected to a PHY that does > > 1000BASE-T, so why does xpcs_1000basex_features[] not mention > > 1000baseT_Full... there's probably more here as well. > > > > Interestingly, xpcs_2500basex_features[] _does_ mention both > > 2500BASE-X and 2500BASE-T, but I think that only does because I > > happened to comment on it during a review. > > > > I think xpcs is another can of worms, but is an easier can of worms > > to solve than trying to sort out that "what's an ethernet PHY" > > question we seem to be heading towards (which I think would be a > > mammoth task, even back when phylink didn't exist, to sort out.) > > I wasn't necessarily going to go all the way into "what's a PHY?". > I just want to clarify some terms such that we can agree what is correct > and what is not. I believe that much of what's currently in XPCS w.r.t. > C73 is not correct, partly through initial intention and partly through > blind conversions such as mine. Right, that's probably why I'm having a hard time interpreting what this driver is doing when it comes to these modes that makes use clause 73. As this is the only phylink-using implementation that involves clause 73 at present, I would like to ensure that there's a clear resolution of the expected behaviour before we get further implementations, and preferably document what's expected. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last! 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 CA977C77B75 for ; Tue, 16 May 2023 11:50:57 +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=DoSV/L4Vo25mkBRH9R5niI203HVmbvMXWF1gDByoBoA=; b=p3SmYnhgLPnA9p EEtnAARfS1iegvv2SW2uBIjAUSBLmOWk5Lqhy605Rd8a3nkgPSVZ/oMdue1gS4scsTOb5pLu/6PJs BWFOlaS/aJzmwneiTkc22h3bhGY0NW6r1UFPM2uJoW4h8n+MypiZXFbXSsqel++f9KfwumlCd8bjq QueDdKbEvw7dOSJq9IhX727awcfi0plNJ36+MOaEQ+0hgqfJvPIPKhsaPrGfSryWoPBhkh7wLuYy5 XOcGgWL2f7QQjq+mcGD5GtZYYr8EZXv6kvTtOcAhwiKJ5OLBLkS/zSnXuEo2UHHYu9OSl0ARE/w9K bpJMyGVi73Fkg4InceYA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pytCF-005dpd-18; Tue, 16 May 2023 11:50:27 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:32c8:5054:ff:fe00:142]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pytCB-005doa-2L; Tue, 16 May 2023 11:50:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type: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-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=12oCxnsjDGRIi94hOFSo73JpXQEuM8yD/ulEikbT2L4=; b=tuwTkh+5w5+Qt2MPL0jAfyNZxg DWX0hQcDynjGyxGAzHbREit1U7MiRp8je4AjojwvfK7s9TJZa9Xg2DUAlpGMp7NaXJpSvN/46IQuS Yp7YOpdIouupc8LfTIbSxG2pvxGVwVqRZsNKDVsmvS/YQFn8jrDZqvzjc4rPl2sljF4u5sAR9L7jx dMQrhzkdiGF8W5w1z3UZ3qsv+YmJKrNr55c7y3DNyCTg9y67ip6RHyxOssInIQ440xlvY5pppOm0X qZ8K8RliQdmLz9UKNIahBBG58/PAAZERMFtrsFVksLl/J1feC/Ku/KQGmoumQ7XZngXU485rQ8YRG BYtONZZQ==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:56526) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1pytBf-0005fL-QL; Tue, 16 May 2023 12:49:51 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1pytBY-0000me-Em; Tue, 16 May 2023 12:49:44 +0100 Date: Tue, 16 May 2023 12:49:44 +0100 From: "Russell King (Oracle)" To: Vladimir Oltean Cc: Andrew Lunn , AngeloGioacchino Del Regno , Daniel Machon , "David S. Miller" , Eric Dumazet , Felix Fietkau , Florian Fainelli , Heiner Kallweit , Horatiu Vultur , Ioana Ciornei , Jakub Kicinski , John Crispin , Jose Abreu , Lars Povlsen , Lorenzo Bianconi , Marcin Wojtas , Mark Lee , Matthias Brugger , Maxime Chevallier , Paolo Abeni , Sean Wang , Steen Hegelund , Taras Chornyi , Thomas Petazzoni , UNGLinuxDriver@microchip.com, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, netdev@vger.kernel.org Subject: Re: [PATCH RFC] Providing a helper for PCS inband negotiation Message-ID: References: <20230515195616.uwg62f7hw47mktfu@skbuf> <20230515220833.up43pd76zne2suy2@skbuf> <20230516090009.ssq3uedjl53kzsjr@skbuf> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20230516090009.ssq3uedjl53kzsjr@skbuf> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230516_045023_910062_A793E036 X-CRM114-Status: GOOD ( 58.08 ) 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 T24gVHVlLCBNYXkgMTYsIDIwMjMgYXQgMTI6MDA6MDlQTSArMDMwMCwgVmxhZGltaXIgT2x0ZWFu IHdyb3RlOgo+IE9uIFR1ZSwgTWF5IDE2LCAyMDIzIGF0IDEyOjM2OjMzQU0gKzAxMDAsIFJ1c3Nl bGwgS2luZyAoT3JhY2xlKSB3cm90ZToKPiA+ID4gQ2xhdXNlIDczIG5lZ290aWF0ZXMgdGhlIGFj dHVhbCB1c2Ugb2YgMTBHQmFzZS1LUiBhcyBhIFNFUkRFUyBwcm90b2NvbAo+ID4gPiB0aHJvdWdo IHRoZSBjb3BwZXIgYmFja3BsYW5lIGluIGZhdm9yIG9mIG90aGVyICJCYXNlLUsqIiBhbHRlcm5h dGl2ZQo+ID4gPiBsaW5rIG1vZGVzLCBzbyBpdCdzIG5vdCBxdWl0ZSBwcm9wZXIgdG8gc2F5IHRo YXQgMTBHQmFzZS1LUiBpcyBhIGNsYXVzZQo+ID4gPiA3MyB1c2luZyBwcm90b2NvbC4KPiA+IAo+ ID4gSSBiZWxpZXZlIGl0IGlzIGNvcnJlY3QgdG8gc3RhdGUgaXQgYXMgc3VjaCwgYmVjYXVzZToK PiA+IAo+ID4gNzIuMTogVGFibGUgNzLigJMx4oCUUGh5c2ljYWwgTGF5ZXIgY2xhdXNlcyBhc3Nv Y2lhdGVkIHdpdGggdGhlIDEwR0JBU0UtS1IgUE1ECj4gPiAKPiA+IAk3M+KAlEF1dG8tTmVnb3Rp YXRpb24gZm9yIEJhY2twbGFuZSBFdGhlcm5ldCAgICAgICAgICAgICAgUmVxdWlyZWQKPiA+IAo+ ID4gRXNzZW50aWFsbHksIDgwMi4zIGRvZXNuJ3QgcGVybWl0IDEwR0JBU0UtS1Igd2l0aG91dCBo YXJkd2FyZSBzdXBwb3J0Cj4gPiBmb3IgQ2xhdXNlIDczIEFOIChidXQgdGhhdCBBTiBkb2Vzbid0 IGhhdmUgdG8gYmUgZW5hYmxlZCBieSBtYW5hZ2VtZW50Cj4gPiBzb2Z0d2FyZS4pCj4gCj4gSnVz dCBsaWtlIGNsYXVzZSA0MCAoUENTIGFuZCBQTUEgZm9yIDEwMDBCQVNFLVQpIHJlcXVpcmVzIGNs YXVzZSAyOCBBTgo+IHRvIGJlIHN1cHBvcnRlZC4gQnV0LCB3aGVuIHRoZSBhdXRvbmVnIHByb2Nl c3MgYmVnaW5zLCB0aGUgdXNlIG9mCj4gMTBHQmFzZS1LUiBhcyBhIHByb3RvY29sIG92ZXIgdGhl IGJhY2twbGFuZSBsaW5rIGhhc24ndCBldmVuIGJlZW4geWV0Cj4gZXN0YWJsaXNoZWQsIHNvIEkg ZmluZCBpdCB1bm5hdHVyYWwgdG8gc3BlYWsgb2YgY2xhdXNlIDczIGF1dG9uZWcgYXMKPiBzb21l dGhpbmcgdGhhdCAxMEdCYXNlLUtSIGhhcy4KPiAKPiBUaGUgcmVhc29uIHdoeSBJJ20gaW5zaXN0 aW5nIG9uIHRoaXMgaXMgYmVjYXVzZSB0byBtZSwgdG8gdHJlYXQgY2xhdXNlCj4gNzMgYXMgYW4g aW4tYmFuZCBhdXRvbmVnIHByb2Nlc3Mgb2YgMTBHQmFzZS1LUiBzb3VuZHMgbGlrZSBhIHJldmVy c2FsIG9mCj4gY2F1c2FsaXR5LiBUaGUgY2xhdXNlIDczIGxpbmsgY29kZXdvcmQgaGFzIGEgVGVj aG5vbG9neSBBYmlsaXR5IGZpZWxkCj4gdGhyb3VnaCB3aGljaCAxMEdCYXNlLUtSLCAxR0Jhc2Ut S1ggZXRjIGFyZSBhZHZlcnRpc2VkIGFzIHN1cHBvcnRlZAo+IHByb3RvY29scy4gSWYgQzczIGlz IGFuIGluYmFuZCBwcm90b2NvbCBvZiAxMEdCYXNlLUtSLCB3aGF0IHNob3VsZCB0aGUKPiBsb2Nh bCBQQ1MgYWR2ZXJ0aXNlIGZvciBpdHMgVGVjaG5vbG9neSBBYmlsaXR5PyBPbmx5IDEwR0Jhc2Ut S1IsIGJlY2F1c2UKPiB0aGlzIGlzIHdoYXQgaXMgaW1wbGllZCBieSB0cmVhdGluZyBpdCBhcyBh biBhdHRyaWJ1dGUgb2YgMTBHQmFzZS1LUiwgbm8/CgpJJ20gbm90IGdvaW5nIHRvIGdldCBodW5n IHVwIG9uIHRoaXMsIGJlY2F1c2UgSSBkb24ndCByZWdhcmQgdGhlIHBvaW50CmFzIGJlaW5nIHBh cnRpY3VsYXJseSBpbXBvcnRhbnQgdG8gdGhpcyBkaXNjdXNzaW9uLiBZb3UgYXJlIHJpZ2h0IHRo YXQKQ2xhdXNlIDczIEFOIHNlbGVjdHMgd2hldGhlciBlLmcuIDEwR0JBU0UtS1IgZ2V0cyB1c2Vk LCBhbmQgSSBkb24ndApkaXNhZ3JlZSB3aXRoIHRoYXQuIFdlJ3JlIGp1c3QgZW50ZXJpbmcgaW50 byB3aGF0IHNlZW1zIGxpa2UgYSBwb2ludGxlc3MKZGViYXRlIHRoYXQgZWF0cyB1cCBlbWFpbCBi YW5kd2lkdGguCgo+IEJ1dCB0aGF0IHdvdWxkIGJlIGEgZGVuYXR1cmVkIHdheSBvZiBuZWdvdGlh dGluZyAtIGFkdmVydGlzZSBhIHNpbmdsZQo+IGxpbmsgbW9kZSwgdGFrZSBpdCBvciBsZWF2ZSBp dC4gQW5kIHdoYXQgb3RoZXIgaW5iYW5kIGF1dG9uZWcgcHJvdG9jb2xzCj4gcGVybWl0LCBzYXks IHN0YXJ0aW5nIGZyb20gU0dNSUkgYW5kIGVuZGluZyBpbiAxMDAwQmFzZS1YPyBDbGF1c2UgNzMK PiBjYW4ndCBiZSBkaXJlY3RseSBjb21wYXJlZCB0byB3aGF0IHdlIGN1cnJlbnRseSBtZWFuIGJ5 IG1hbmFnZWQgPQo+ICJpbi1iYW5kLXN0YXR1cyIuCj4gCj4gTm90IG9ubHkgaXMgQzM3IGF1dG9u ZWcgbm90IGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gQzczLCBidXQgdGhleSBhcmUgbm90Cj4gbXV0 dWFsbHkgZXhjbHVzaXZlLCBlaXRoZXIuIEkgd291bGQgc2F5IHRoZXkgYXJlIG1vcmUgb3IgbGVz cyBvcnRob2dvbmFsLgo+IE1vcmUgYmVsb3cuCj4gCj4gSSBkb24ndCBiZWxpZXZlIHRoYXQgdG9n Z2xpbmcgY2xhdXNlIDczIGF1dG9uZWcgYmFzZWQgb24gcGh5bGlua19wY3NfbmVnX21vZGUoKQo+ IG1ha2VzIG11Y2ggc2Vuc2UuCgpJIGFncmVlLCB3aGljaCBtZWFucyBwaHlsaW5rX3Bjc19uZWdf bW9kZSgpIG5lZWRzIHRvIGRvY3VtZW50IHRoaXMgc28KdGhhdCBwZW9wbGUgZG9uJ3QgdGhpbmsg aXQgZG9lcyAtIGFuZCB0aGF0IHNvbHZlcyBib3RoIG9mIHRoZSBpc3N1ZXMKSSB3YXMgYnJpbmdp bmcgdXAgaW4gbXkgb3JpZ2luYWwgZW1haWwuCgo+ID4gSG93ZXZlciwgaWYgd2UgZGlkIHdhbnQg dG8gZXh0ZW5kIHRoaXMgdG9waWMsIHRoZW4gdGhlcmUgYXJlIGEgbnVtYmVyCj4gPiBvZiBxdWVz dGlvbnMgdGhhdCByZWFsbHkgbmVlZCB0byBiZSBhc2tlZCBpcyBhYm91dCB0aGUgWFBDUyBkcml2 ZXIuCj4gPiBTdWNoIGFzIC0gd2hhdCBkb2VzIDEwMDBCQVNFLUtYLCAxMDAwMEJBU0UtS1g0LCAx MDAwMEJBU0UtS1IgYW5kCj4gPiAyNTAwQkFTRS1YIGhhdmUgdG8gZG8gd2l0aCBVU1hHTUlJLCBh bmQgd2h5IGFyZSB0aGVyZSBubyBjb3BwZXIKPiA+IGV0aHRvb2wgbW9kZXMgbGlzdGVkIHdoZW4g YSBVU1hHTUlJIGxpbmsgY2FuIGRlZmluaXRlbHkgc3VwcG9ydAo+ID4gYmVpbmcgY29ubmVjdGVk IHRvIGEgY29wcGVyIFBIWT8gKFNlZSB4cGNzX3VzeGdtaWlfZmVhdHVyZXNbXSkuCj4gPiAKPiA+ IFdoeSBkb2VzIFhQQ1MgdGhpbmsgdGhhdCBVU1hHTUlJIHVzZXMgQ2xhdXNlIDczIEFOPyAoc2Vl IHRoZSBmaXJzdAo+ID4gZW50cnkgaW4gc3lub3BzeXNfeHBjc19jb21wYXRbXS4pCj4gCj4gRmly c3QsIGluIHByaW5jaXBsZSBVU1hHTUlJIGFuZCBjbGF1c2UgNzMgYXJlIG5vdCBtdXR1YWxseSBl eGNsdXNpdmUuCj4gCj4gSXQgaXMgcG9zc2libGUgdG8gdXNlIGNsYXVzZSA3MyB0byBhZHZlcnRp c2UgMTBHQmFzZS1LUiBhcyBhIGxpbmsgbW9kZSwKPiBhbmQgdGhhdCB3aWxsIGdpdmUgeW91IGxp bmsgdHJhaW5pbmcgZm9yIHByb3BlciAzLXRhcCBlbGVjdHJpY2FsCj4gZXF1YWxpemF0aW9uIG92 ZXIgdGhlIGNvcHBlciBiYWNrcGxhbmUuCj4gCj4gVGhlbiwgb25jZSBDNzMgQU4vTFQgZW5kZWQg YW5kIDEwR0Jhc2UtS1IgaGFzIGJlZW4gZXN0YWJsaXNoZWQsIGlzCj4gcG9zc2libGUgdG8gY29u ZmlndXJlIHRoZSAxMEdCYXNlLVIgUENTIHRvIGVuYWJsZSBDMzcgVVNYR01JSSB0byBzZWxlY3QK PiB0aGUgYWN0dWFsIGRhdGEgcmF0ZSB2aWEgc3ltYm9sIHJlcGxpY2F0aW9uLCB3aGlsZSB0aGUg U0VSREVTIGxhbmUKPiByZW1haW5zIGF0IDEwR0JhdWQuIEF0IGxlYXN0LCB0aGUgWFBDUyBzZWVt cyB0byBwZXJtaXQgZW5hYmxpbmcgc3ltYm9sCj4gcmVwbGljYXRpb24gaW4gY29uanVuY3Rpb24g d2l0aCAxMEdCYXNlLUtSLgoKTXkgY29tbWVudHMgYXJlIGFnYWluc3QgdGhlIGRyaXZlciBhcyBp dCBzdGFuZHMgdG9kYXksIG5vdCBzb21lCnRoZW9yZXRpY2FsIGNhc2UgdGhhdCB0aGUgaGFyZHdh cmUgbWF5IHN1cHBvcnQuCgpXaGF0IEknbSBnZXR0aW5nIGF0IGlzIGlmIHRoZSBpbnRlcmZhY2Ug bW9kZSBpcwpQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSwgdGhlbi4uLiBva2F5Li4uIHdlIF9t YXlfIHdpc2ggdG8gZG8KY2xhdXNlIDczIG5lZ290aWF0aW9uIGFkdmVydGlzaW5nIDEwR0JBU0Ut S1IgYW5kIHRoZW4gZG8gY2xhdXNlIDczCmZvciB0aGUgVVNYR01JSSBjb250cm9sIHdvcmQgLSBi dXQgdGhlIGRyaXZlciBkb2Vzbid0IGRvIHRoaXMgYXMgZmFyCmFzIEkgY2FuIHNlZS4gSWYgQzcz IEFOIGlzIGJlaW5nIHVzZWQsIGl0IG1lcmVseSByZWFkcyB0aGUgQzczCnN0YXRlIGFuZCByZXR1 cm5zIHRoZSByZXNvbHV0aW9uIGZyb20gdGhhdC4gQW55IHNwZWVkIGluZm9ybWF0aW9uIHRoYXQK YSBVU1hHTUlJIFBIWSBwYXNzZXMgYmFjayBvdmVyIHRoZSBDMzcgaW5iYW5kIHNpZ25hbGxpbmcg d291bGQgYmUKaWdub3JlZCBiZWNhdXNlIHRoZXJlIHNlZW1zIHRvIGJlIG5vIHByb3Zpc2lvbiBm b3IgdGhlIFVTWEdNSUkKaW5iYW5kIHNpZ25hbGxpbmcuCgpTbyBJJ20gY29uZnVzZWQgd2hhdCB0 aGUgeHBjcyBkcml2ZXIgX2FjdHVhbGx5XyBkb2VzIHdoZW4gVVNYR01JSQptb2RlIGlzIHNlbGVj dGVkIGJ5IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJLCBiZWNhdXNlIGxvb2tpbmcgYXQKdGhl IGRyaXZlciwgaXQgZG9lc24ndCBsb29rIGxpa2UgaXQncyBVU1hHTUlJIGF0IGFsbC4KCj4gVGhl biwgdGhlcmUncyB0aGUgZW50aXJlIGlzc3VlIHRoYXQgdGhlIGNvZGUsIGFzIGl0IHdhcyBvcmln aW5hbGx5Cj4gaW50cm9kdWNlZCwgaXMgbm90IHRoZSBzYW1lIGFzIGl0IGlzIG5vdy4gRm9yIGV4 YW1wbGUsIHRoaXMgYml0IGluCj4geHBjc19kb19jb25maWcoKToKPiAKPiAJc3dpdGNoIChjb21w YXQtPmFuX21vZGUpIHsKPiAJY2FzZSBEV19BTl9DNzM6Cj4gCQlpZiAocGh5bGlua19hdXRvbmVn X2luYmFuZChtb2RlKSkgewo+IAkJCXJldCA9IHhwY3NfY29uZmlnX2FuZWdfYzczKHhwY3MsIGNv bXBhdCk7Cj4gCQkJaWYgKHJldCkKPiAJCQkJcmV0dXJuIHJldDsKPiAJCX0KPiAJCWJyZWFrOwo+ IAo+IHVzZWQgdG8gbG9vayBhdCBzdGF0ZS0+YW5fZW5hYmxlZCByYXRoZXIgdGhhbiBwaHlsaW5r X2F1dG9uZWdfaW5iYW5kKCkuCj4gVGhyb3VnaCBteSBpZGlvY3ksIEkgaW5hZHZlcnRlbnRseSBj b252ZXJ0ZWQgdGhhdCBpbiBjb21taXQgMTEwNTk3NDBlNjE2Cj4gKCJuZXQ6IHBjczogeHBjczog Y29udmVydCB0byBwaHlsaW5rX3Bjc19vcHMiKS4KCklmIHdlIHdhbnQgdG8gY2hhbmdlIHRoYXQg YmFjayB0byB0aGUgb2xkIGJlaGF2aW91ciwgdGhhdCBuZWVkcyB0bwpiZToKCQlpZiAodGVzdF9i aXQoRVRIVE9PTF9MSU5LX01PREVfQXV0b25lZ19CSVQsIGFkdmVydGlzaW5nKSkgewoJCQkuLi4K CQl9CgkJYnJlYWs7CgpidXQgdGhhdCB3b3VsZG4ndCBldmVyIGhhdmUgYmVlbiBzdWZmaWNpZW50 LCBldmVuIHdoZW4gdGhlIGNvZGUgd2FzCnVzaW5nIGFuX2VuYWJsZWQsIGJlY2F1c2UgYm90aCBv ZiB0aGVzZSByZWZsZWN0IHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24uCihhbl9lbmFibGVkIHdhcyBq dXN0IGEgcHJveHkgZm9yIHRoaXMgQXV0b25lZyBiaXQpLiBJJ20gZ29pbmcgdG8gY2FsbApib3Ro IG9mIHRoZXNlIGFuICJBTiBpbmRpY2F0b3IiIGluIHRoZSBxdWVzdGlvbiBiZWxvdy4KCklzbid0 IGl0IHJhdGhlciBwZXJ2ZXJzZSB0aGF0IHRoZSBkcml2ZXIgY29uZmlndXJlcyBBTiBpZiB0aGlz IEFOCmluZGljYXRvciBpcyBzZXQsIGJ1dCB0aGVuIGRvZXMgbm90aGluZyBpZiBpdCBpc24ndD8K Cj4gPiB4cGNzX3NnbWlpX2ZlYXR1cmVzW10gb25seSBtZW50aW9ucyBjb3BwZXIgbGlua21vZGVz LCBidXQgYXMgd2Uga25vdywKPiA+IGl0J3MgY29tbW9uIGZvciBjb3BwZXIgUEhZcyB0byBhbHNv IHN1cHBvcnQgZmlicmUgd2l0aCBhbiBhdXRvLQo+ID4gc2VsZWN0aW9uIG1lY2hhbmlzbS4gU28s IDEwMDBCQVNFLVggaXMgZGVmaW5pdGVseSBwb3NzaWJsZSBpZiBTR01JSQo+ID4gaXMgc3VwcG9y dGVkLCBzbyB3aHkgaXNuJ3QgaXQgbGlzdGVkLgo+IAo+IE1vc3QgbGlrZWx5IGV4cGxhbmF0aW9u IGlzIHRoYXQgWFBDUyBoYXMgbmV2ZXIgYmVlbiBwYWlyZWQgdXAgdW50aWwgbm93Cj4gdG8gc3Vj aCBhIFBIWS4KClNvIGl0J3MgcHJvYmFibHkgc2FmZSB0byBhZGQgRVRIVE9PTF9MSU5LX01PREVf MTAwMGJhc2VYX0Z1bGxfQklUCnRoZXJlIC0gdGhhbmtzLgoKPiA+IEFzIHByZXZpb3VzbHkgc2Fp ZCwgMTAwMEJBU0UtWCBjYW4gYmUgY29ubmVjdGVkIHRvIGEgUEhZIHRoYXQgZG9lcwo+ID4gMTAw MEJBU0UtVCwgc28gd2h5IGRvZXMgeHBjc18xMDAwYmFzZXhfZmVhdHVyZXNbXSBub3QgbWVudGlv bgo+ID4gMTAwMGJhc2VUX0Z1bGwuLi4gdGhlcmUncyBwcm9iYWJseSBtb3JlIGhlcmUgYXMgd2Vs bC4KPiA+IAo+ID4gSW50ZXJlc3RpbmdseSwgeHBjc18yNTAwYmFzZXhfZmVhdHVyZXNbXSBfZG9l c18gbWVudGlvbiBib3RoCj4gPiAyNTAwQkFTRS1YIGFuZCAyNTAwQkFTRS1ULCBidXQgSSB0aGlu ayB0aGF0IG9ubHkgZG9lcyBiZWNhdXNlIEkKPiA+IGhhcHBlbmVkIHRvIGNvbW1lbnQgb24gaXQg ZHVyaW5nIGEgcmV2aWV3Lgo+ID4gCj4gPiBJIHRoaW5rIHhwY3MgaXMgYW5vdGhlciBjYW4gb2Yg d29ybXMsIGJ1dCBpcyBhbiBlYXNpZXIgY2FuIG9mIHdvcm1zCj4gPiB0byBzb2x2ZSB0aGFuIHRy eWluZyB0byBzb3J0IG91dCB0aGF0ICJ3aGF0J3MgYW4gZXRoZXJuZXQgUEhZIgo+ID4gcXVlc3Rp b24gd2Ugc2VlbSB0byBiZSBoZWFkaW5nIHRvd2FyZHMgKHdoaWNoIEkgdGhpbmsgd291bGQgYmUg YQo+ID4gbWFtbW90aCB0YXNrLCBldmVuIGJhY2sgd2hlbiBwaHlsaW5rIGRpZG4ndCBleGlzdCwg dG8gc29ydCBvdXQuKQo+IAo+IEkgd2Fzbid0IG5lY2Vzc2FyaWx5IGdvaW5nIHRvIGdvIGFsbCB0 aGUgd2F5IGludG8gIndoYXQncyBhIFBIWT8iLgo+IEkganVzdCB3YW50IHRvIGNsYXJpZnkgc29t ZSB0ZXJtcyBzdWNoIHRoYXQgd2UgY2FuIGFncmVlIHdoYXQgaXMgY29ycmVjdAo+IGFuZCB3aGF0 IGlzIG5vdC4gSSBiZWxpZXZlIHRoYXQgbXVjaCBvZiB3aGF0J3MgY3VycmVudGx5IGluIFhQQ1Mg dy5yLnQuCj4gQzczIGlzIG5vdCBjb3JyZWN0LCBwYXJ0bHkgdGhyb3VnaCBpbml0aWFsIGludGVu dGlvbiBhbmQgcGFydGx5IHRocm91Z2gKPiBibGluZCBjb252ZXJzaW9ucyBzdWNoIGFzIG1pbmUu CgpSaWdodCwgdGhhdCdzIHByb2JhYmx5IHdoeSBJJ20gaGF2aW5nIGEgaGFyZCB0aW1lIGludGVy cHJldGluZyB3aGF0CnRoaXMgZHJpdmVyIGlzIGRvaW5nIHdoZW4gaXQgY29tZXMgdG8gdGhlc2Ug bW9kZXMgdGhhdCBtYWtlcyB1c2UKY2xhdXNlIDczLgoKQXMgdGhpcyBpcyB0aGUgb25seSBwaHls aW5rLXVzaW5nIGltcGxlbWVudGF0aW9uIHRoYXQgaW52b2x2ZXMgY2xhdXNlCjczIGF0IHByZXNl bnQsIEkgd291bGQgbGlrZSB0byBlbnN1cmUgdGhhdCB0aGVyZSdzIGEgY2xlYXIgcmVzb2x1dGlv bgpvZiB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyIGJlZm9yZSB3ZSBnZXQgZnVydGhlciBpbXBsZW1l bnRhdGlvbnMsIGFuZApwcmVmZXJhYmx5IGRvY3VtZW50IHdoYXQncyBleHBlY3RlZC4KCi0tIApS TUsncyBQYXRjaCBzeXN0ZW06IGh0dHBzOi8vd3d3LmFybWxpbnV4Lm9yZy51ay9kZXZlbG9wZXIv cGF0Y2hlcy8KRlRUUCBpcyBoZXJlISA4ME1icHMgZG93biAxME1icHMgdXAuIERlY2VudCBjb25u ZWN0aXZpdHkgYXQgbGFzdCEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK