From mboxrd@z Thu Jan 1 00:00:00 1970 From: ville.syrjala@linux.intel.com (Ville =?iso-8859-1?Q?Syrj=E4l=E4?=) Date: Wed, 24 Jan 2018 15:35:33 +0200 Subject: [Intel-gfx] REGRESSION in c5552fde102f ("nvme: Enable autonomous power state transitions") In-Reply-To: <87shaveb5b.fsf@intel.com> References: <87shaveb5b.fsf@intel.com> Message-ID: <20180124133533.GQ5453@intel.com> On Wed, Jan 24, 2018@01:42:08PM +0200, Jani Nikula wrote: > > Hi Andy, all - > > So this is an odd one. > > I'm getting display FIFO underruns in a very specific setting: Laptop > display switched off, and an external display connected. Other > combinations work fine. > > I've bisected this to c5552fde102f ("nvme: Enable autonomous power state > transitions"), and, being baffled by the result, carefully checked > this. There are no problems when running c5552fde102f^, with > nvme_core.default_ps_max_latency_us=0, or after 'echo 0 > > pm_qos_latency_tolerance_us'. With the last one, restoring the original > value of 100000 brings the underruns back. > > I have no idea what the root cause mechanism here is, but the bisect is > correct. Perhaps something to do with timing. I'd be happy to provide > further details. > > I see that you have quirked one Samsung device. Incidentally, this > Lenovo Yoga 910 (Kabylake, SunrisePoint LP PCH) also has a Samsung NVMe > device, just a different one. Details below. I don't know what the > failure mode in the quirked one is, so I don't know if this could be the > same issue. My first gut feeling would be that by allowing the nvme to go to sleep we're gettting into some deeper power saving state, which then causes display underruns. How does the package c-state residency look before/after the commit? I might be wrong too of course. IIRC there were plenty of display flicker issues on SKL at least that were magically fixed by unknown magic in BIOS updates. > > BR, > Jani. > > > $ lspci -vvnn -s 02:00.0 > 02:00.0 Non-Volatile memory controller [0108]: Samsung Electronics Co Ltd Device [144d:a804] (prog-if 02 [NVM Express]) > Subsystem: Samsung Electronics Co Ltd Device [144d:a801] > Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+ > Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- Latency: 0, Cache Line Size: 64 bytes > Interrupt: pin A routed to IRQ 16 > NUMA node: 0 > Region 0: Memory at a1200000 (64-bit, non-prefetchable) [size=16K] > Capabilities: [40] Power Management version 3 > Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-) > Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME- > Capabilities: [50] MSI: Enable- Count=1/32 Maskable- 64bit+ > Address: 0000000000000000 Data: 0000 > Capabilities: [70] Express (v2) Endpoint, MSI 00 > DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited > ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset+ SlotPowerLimit 25.000W > DevCtl: Report errors: Correctable+ Non-Fatal+ Fatal+ Unsupported+ > RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+ FLReset- > MaxPayload 256 bytes, MaxReadReq 512 bytes > DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend- > LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L0s unlimited, L1 <64us > ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+ > LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- CommClk+ > ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt- > LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt- > DevCap2: Completion Timeout: Range ABCD, TimeoutDis+, LTR+, OBFF Not Supported > DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR+, OBFF Disabled > LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis- > Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS- > Compliance De-emphasis: -6dB > LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+ > EqualizationPhase2+, EqualizationPhase3+, LinkEqualizationRequest- > Capabilities: [b0] MSI-X: Enable+ Count=33 Masked- > Vector table: BAR=0 offset=00003000 > PBA: BAR=0 offset=00002000 > Capabilities: [100 v2] Advanced Error Reporting > UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol- > UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol- > UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol- > CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr- > CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+ > AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn- > Capabilities: [148 v1] Device Serial Number 00-00-00-00-00-00-00-00 > Capabilities: [158 v1] Power Budgeting > Capabilities: [168 v1] #19 > Capabilities: [188 v1] Latency Tolerance Reporting > Max snoop latency: 3145728ns > Max no snoop latency: 3145728ns > Capabilities: [190 v1] L1 PM Substates > L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substates+ > PortCommonModeRestoreTime=10us PortTPowerOnTime=10us > L1SubCtl1: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ > T_CommonMode=0us LTR1.2_Threshold=163840ns > L1SubCtl2: T_PwrOn=44us > Kernel driver in use: nvme > Kernel modules: nvme > > > -- > Jani Nikula, Intel Open Source Technology Center > _______________________________________________ > Intel-gfx mailing list > Intel-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrj?l? Intel OTC From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: REGRESSION in c5552fde102f ("nvme: Enable autonomous power state transitions") Date: Wed, 24 Jan 2018 15:35:33 +0200 Message-ID: <20180124133533.GQ5453@intel.com> References: <87shaveb5b.fsf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 548116E5E2 for ; Wed, 24 Jan 2018 13:35:39 +0000 (UTC) Content-Disposition: inline In-Reply-To: <87shaveb5b.fsf@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: Jens Axboe , Sagi Grimberg , intel-gfx@lists.freedesktop.org, linux-nvme@lists.infradead.org, ville.syrjala@intel.linux.com, Keith Busch , Andy Lutomirski , Christoph Hellwig List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKYW4gMjQsIDIwMTggYXQgMDE6NDI6MDhQTSArMDIwMCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4gCj4gSGkgQW5keSwgYWxsIC0KPiAKPiBTbyB0aGlzIGlzIGFuIG9kZCBvbmUuCj4gCj4g SSdtIGdldHRpbmcgZGlzcGxheSBGSUZPIHVuZGVycnVucyBpbiBhIHZlcnkgc3BlY2lmaWMgc2V0 dGluZzogTGFwdG9wCj4gZGlzcGxheSBzd2l0Y2hlZCBvZmYsIGFuZCBhbiBleHRlcm5hbCBkaXNw bGF5IGNvbm5lY3RlZC4gT3RoZXIKPiBjb21iaW5hdGlvbnMgd29yayBmaW5lLgo+IAo+IEkndmUg YmlzZWN0ZWQgdGhpcyB0byBjNTU1MmZkZTEwMmYgKCJudm1lOiBFbmFibGUgYXV0b25vbW91cyBw b3dlciBzdGF0ZQo+IHRyYW5zaXRpb25zIiksIGFuZCwgYmVpbmcgYmFmZmxlZCBieSB0aGUgcmVz dWx0LCBjYXJlZnVsbHkgY2hlY2tlZAo+IHRoaXMuIFRoZXJlIGFyZSBubyBwcm9ibGVtcyB3aGVu IHJ1bm5pbmcgYzU1NTJmZGUxMDJmXiwgd2l0aAo+IG52bWVfY29yZS5kZWZhdWx0X3BzX21heF9s YXRlbmN5X3VzPTAsIG9yIGFmdGVyICdlY2hvIDAgPgo+IHBtX3Fvc19sYXRlbmN5X3RvbGVyYW5j ZV91cycuIFdpdGggdGhlIGxhc3Qgb25lLCByZXN0b3JpbmcgdGhlIG9yaWdpbmFsCj4gdmFsdWUg b2YgMTAwMDAwIGJyaW5ncyB0aGUgdW5kZXJydW5zIGJhY2suCj4gCj4gSSBoYXZlIG5vIGlkZWEg d2hhdCB0aGUgcm9vdCBjYXVzZSBtZWNoYW5pc20gaGVyZSBpcywgYnV0IHRoZSBiaXNlY3QgaXMK PiBjb3JyZWN0LiBQZXJoYXBzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRpbWluZy4gSSdkIGJlIGhh cHB5IHRvIHByb3ZpZGUKPiBmdXJ0aGVyIGRldGFpbHMuCj4gCj4gSSBzZWUgdGhhdCB5b3UgaGF2 ZSBxdWlya2VkIG9uZSBTYW1zdW5nIGRldmljZS4gSW5jaWRlbnRhbGx5LCB0aGlzCj4gTGVub3Zv IFlvZ2EgOTEwIChLYWJ5bGFrZSwgU3VucmlzZVBvaW50IExQIFBDSCkgYWxzbyBoYXMgYSBTYW1z dW5nIE5WTWUKPiBkZXZpY2UsIGp1c3QgYSBkaWZmZXJlbnQgb25lLiBEZXRhaWxzIGJlbG93LiBJ IGRvbid0IGtub3cgd2hhdCB0aGUKPiBmYWlsdXJlIG1vZGUgaW4gdGhlIHF1aXJrZWQgb25lIGlz LCBzbyBJIGRvbid0IGtub3cgaWYgdGhpcyBjb3VsZCBiZSB0aGUKPiBzYW1lIGlzc3VlLgoKTXkg Zmlyc3QgZ3V0IGZlZWxpbmcgd291bGQgYmUgdGhhdCBieSBhbGxvd2luZyB0aGUgbnZtZSB0byBn byB0byBzbGVlcAp3ZSdyZSBnZXR0dGluZyBpbnRvIHNvbWUgZGVlcGVyIHBvd2VyIHNhdmluZyBz dGF0ZSwgd2hpY2ggdGhlbiBjYXVzZXMKZGlzcGxheSB1bmRlcnJ1bnMuIEhvdyBkb2VzIHRoZSBw YWNrYWdlIGMtc3RhdGUgcmVzaWRlbmN5IGxvb2sKYmVmb3JlL2FmdGVyIHRoZSBjb21taXQ/CgpJ IG1pZ2h0IGJlIHdyb25nIHRvbyBvZiBjb3Vyc2UuIElJUkMgdGhlcmUgd2VyZSBwbGVudHkgb2Yg ZGlzcGxheQpmbGlja2VyIGlzc3VlcyBvbiBTS0wgYXQgbGVhc3QgdGhhdCB3ZXJlIG1hZ2ljYWxs eSBmaXhlZCBieSB1bmtub3duCm1hZ2ljIGluIEJJT1MgdXBkYXRlcy4KCj4gCj4gQlIsCj4gSmFu aS4KPiAKPiAKPiAkIGxzcGNpIC12dm5uIC1zIDAyOjAwLjAKPiAwMjowMC4wIE5vbi1Wb2xhdGls ZSBtZW1vcnkgY29udHJvbGxlciBbMDEwOF06IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28gTHRkIERl dmljZSBbMTQ0ZDphODA0XSAocHJvZy1pZiAwMiBbTlZNIEV4cHJlc3NdKQo+IAlTdWJzeXN0ZW06 IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28gTHRkIERldmljZSBbMTQ0ZDphODAxXQo+IAlDb250cm9s OiBJL08tIE1lbSsgQnVzTWFzdGVyKyBTcGVjQ3ljbGUtIE1lbVdJTlYtIFZHQVNub29wLSBQYXJF cnItIFN0ZXBwaW5nLSBTRVJSLSBGYXN0QjJCLSBEaXNJTlR4Kwo+IAlTdGF0dXM6IENhcCsgNjZN SHotIFVERi0gRmFzdEIyQi0gUGFyRXJyLSBERVZTRUw9ZmFzdCA+VEFib3J0LSA8VEFib3J0LSA8 TUFib3J0LSA+U0VSUi0gPFBFUlItIElOVHgtCj4gCUxhdGVuY3k6IDAsIENhY2hlIExpbmUgU2l6 ZTogNjQgYnl0ZXMKPiAJSW50ZXJydXB0OiBwaW4gQSByb3V0ZWQgdG8gSVJRIDE2Cj4gCU5VTUEg bm9kZTogMAo+IAlSZWdpb24gMDogTWVtb3J5IGF0IGExMjAwMDAwICg2NC1iaXQsIG5vbi1wcmVm ZXRjaGFibGUpIFtzaXplPTE2S10KPiAJQ2FwYWJpbGl0aWVzOiBbNDBdIFBvd2VyIE1hbmFnZW1l bnQgdmVyc2lvbiAzCj4gCQlGbGFnczogUE1FQ2xrLSBEU0ktIEQxLSBEMi0gQXV4Q3VycmVudD0w bUEgUE1FKEQwLSxEMS0sRDItLEQzaG90LSxEM2NvbGQtKQo+IAkJU3RhdHVzOiBEMCBOb1NvZnRS c3QrIFBNRS1FbmFibGUtIERTZWw9MCBEU2NhbGU9MCBQTUUtCj4gCUNhcGFiaWxpdGllczogWzUw XSBNU0k6IEVuYWJsZS0gQ291bnQ9MS8zMiBNYXNrYWJsZS0gNjRiaXQrCj4gCQlBZGRyZXNzOiAw MDAwMDAwMDAwMDAwMDAwICBEYXRhOiAwMDAwCj4gCUNhcGFiaWxpdGllczogWzcwXSBFeHByZXNz ICh2MikgRW5kcG9pbnQsIE1TSSAwMAo+IAkJRGV2Q2FwOglNYXhQYXlsb2FkIDI1NiBieXRlcywg UGhhbnRGdW5jIDAsIExhdGVuY3kgTDBzIHVubGltaXRlZCwgTDEgdW5saW1pdGVkCj4gCQkJRXh0 VGFnLSBBdHRuQnRuLSBBdHRuSW5kLSBQd3JJbmQtIFJCRSsgRkxSZXNldCsgU2xvdFBvd2VyTGlt aXQgMjUuMDAwVwo+IAkJRGV2Q3RsOglSZXBvcnQgZXJyb3JzOiBDb3JyZWN0YWJsZSsgTm9uLUZh dGFsKyBGYXRhbCsgVW5zdXBwb3J0ZWQrCj4gCQkJUmx4ZE9yZCsgRXh0VGFnLSBQaGFudEZ1bmMt IEF1eFB3ci0gTm9Tbm9vcCsgRkxSZXNldC0KPiAJCQlNYXhQYXlsb2FkIDI1NiBieXRlcywgTWF4 UmVhZFJlcSA1MTIgYnl0ZXMKPiAJCURldlN0YToJQ29yckVyci0gVW5jb3JyRXJyLSBGYXRhbEVy ci0gVW5zdXBwUmVxLSBBdXhQd3IrIFRyYW5zUGVuZC0KPiAJCUxua0NhcDoJUG9ydCAjMCwgU3Bl ZWQgOEdUL3MsIFdpZHRoIHg0LCBBU1BNIEwxLCBFeGl0IExhdGVuY3kgTDBzIHVubGltaXRlZCwg TDEgPDY0dXMKPiAJCQlDbG9ja1BNKyBTdXJwcmlzZS0gTExBY3RSZXAtIEJ3Tm90LSBBU1BNT3B0 Q29tcCsKPiAJCUxua0N0bDoJQVNQTSBMMSBFbmFibGVkOyBSQ0IgNjQgYnl0ZXMgRGlzYWJsZWQt IENvbW1DbGsrCj4gCQkJRXh0U3luY2gtIENsb2NrUE0rIEF1dFdpZERpcy0gQldJbnQtIEF1dEJX SW50LQo+IAkJTG5rU3RhOglTcGVlZCA4R1QvcywgV2lkdGggeDQsIFRyRXJyLSBUcmFpbi0gU2xv dENsaysgRExBY3RpdmUtIEJXTWdtdC0gQUJXTWdtdC0KPiAJCURldkNhcDI6IENvbXBsZXRpb24g VGltZW91dDogUmFuZ2UgQUJDRCwgVGltZW91dERpcyssIExUUissIE9CRkYgTm90IFN1cHBvcnRl ZAo+IAkJRGV2Q3RsMjogQ29tcGxldGlvbiBUaW1lb3V0OiA1MHVzIHRvIDUwbXMsIFRpbWVvdXRE aXMtLCBMVFIrLCBPQkZGIERpc2FibGVkCj4gCQlMbmtDdGwyOiBUYXJnZXQgTGluayBTcGVlZDog OEdUL3MsIEVudGVyQ29tcGxpYW5jZS0gU3BlZWREaXMtCj4gCQkJIFRyYW5zbWl0IE1hcmdpbjog Tm9ybWFsIE9wZXJhdGluZyBSYW5nZSwgRW50ZXJNb2RpZmllZENvbXBsaWFuY2UtIENvbXBsaWFu Y2VTT1MtCj4gCQkJIENvbXBsaWFuY2UgRGUtZW1waGFzaXM6IC02ZEIKPiAJCUxua1N0YTI6IEN1 cnJlbnQgRGUtZW1waGFzaXMgTGV2ZWw6IC02ZEIsIEVxdWFsaXphdGlvbkNvbXBsZXRlKywgRXF1 YWxpemF0aW9uUGhhc2UxKwo+IAkJCSBFcXVhbGl6YXRpb25QaGFzZTIrLCBFcXVhbGl6YXRpb25Q aGFzZTMrLCBMaW5rRXF1YWxpemF0aW9uUmVxdWVzdC0KPiAJQ2FwYWJpbGl0aWVzOiBbYjBdIE1T SS1YOiBFbmFibGUrIENvdW50PTMzIE1hc2tlZC0KPiAJCVZlY3RvciB0YWJsZTogQkFSPTAgb2Zm c2V0PTAwMDAzMDAwCj4gCQlQQkE6IEJBUj0wIG9mZnNldD0wMDAwMjAwMAo+IAlDYXBhYmlsaXRp ZXM6IFsxMDAgdjJdIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZwo+IAkJVUVTdGE6CURMUC0gU0RF Uy0gVExQLSBGQ1AtIENtcGx0VE8tIENtcGx0QWJydC0gVW54Q21wbHQtIFJ4T0YtIE1hbGZUTFAt IEVDUkMtIFVuc3VwUmVxLSBBQ1NWaW9sLQo+IAkJVUVNc2s6CURMUC0gU0RFUy0gVExQLSBGQ1At IENtcGx0VE8tIENtcGx0QWJydC0gVW54Q21wbHQtIFJ4T0YtIE1hbGZUTFAtIEVDUkMtIFVuc3Vw UmVxLSBBQ1NWaW9sLQo+IAkJVUVTdnJ0OglETFArIFNERVMrIFRMUC0gRkNQKyBDbXBsdFRPLSBD bXBsdEFicnQtIFVueENtcGx0LSBSeE9GKyBNYWxmVExQKyBFQ1JDLSBVbnN1cFJlcS0gQUNTVmlv bC0KPiAJCUNFU3RhOglSeEVyci0gQmFkVExQLSBCYWRETExQLSBSb2xsb3Zlci0gVGltZW91dC0g Tm9uRmF0YWxFcnItCj4gCQlDRU1zazoJUnhFcnItIEJhZFRMUC0gQmFkRExMUC0gUm9sbG92ZXIt IFRpbWVvdXQtIE5vbkZhdGFsRXJyKwo+IAkJQUVSQ2FwOglGaXJzdCBFcnJvciBQb2ludGVyOiAw MCwgR2VuQ2FwKyBDR2VuRW4tIENoa0NhcCsgQ2hrRW4tCj4gCUNhcGFiaWxpdGllczogWzE0OCB2 MV0gRGV2aWNlIFNlcmlhbCBOdW1iZXIgMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAKPiAJQ2FwYWJp bGl0aWVzOiBbMTU4IHYxXSBQb3dlciBCdWRnZXRpbmcgPD8+Cj4gCUNhcGFiaWxpdGllczogWzE2 OCB2MV0gIzE5Cj4gCUNhcGFiaWxpdGllczogWzE4OCB2MV0gTGF0ZW5jeSBUb2xlcmFuY2UgUmVw b3J0aW5nCj4gCQlNYXggc25vb3AgbGF0ZW5jeTogMzE0NTcyOG5zCj4gCQlNYXggbm8gc25vb3Ag bGF0ZW5jeTogMzE0NTcyOG5zCj4gCUNhcGFiaWxpdGllczogWzE5MCB2MV0gTDEgUE0gU3Vic3Rh dGVzCj4gCQlMMVN1YkNhcDogUENJLVBNX0wxLjIrIFBDSS1QTV9MMS4xKyBBU1BNX0wxLjIrIEFT UE1fTDEuMSsgTDFfUE1fU3Vic3RhdGVzKwo+IAkJCSAgUG9ydENvbW1vbk1vZGVSZXN0b3JlVGlt ZT0xMHVzIFBvcnRUUG93ZXJPblRpbWU9MTB1cwo+IAkJTDFTdWJDdGwxOiBQQ0ktUE1fTDEuMisg UENJLVBNX0wxLjErIEFTUE1fTDEuMisgQVNQTV9MMS4xKwo+IAkJCSAgIFRfQ29tbW9uTW9kZT0w dXMgTFRSMS4yX1RocmVzaG9sZD0xNjM4NDBucwo+IAkJTDFTdWJDdGwyOiBUX1B3ck9uPTQ0dXMK PiAJS2VybmVsIGRyaXZlciBpbiB1c2U6IG52bWUKPiAJS2VybmVsIG1vZHVsZXM6IG52bWUKPiAK PiAKPiAtLSAKPiBKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50 ZXIKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IElu dGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK Ci0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=