From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-2668558-1519125230-2-6081385358519646001 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no ("Email failed DMARC policy for domain") X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.001, ME_NOAUTH 0.01, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='com', MailFrom='org' X-Spam-charsets: plain='utf-8' X-IgnoreVacation: yes ("Email failed DMARC policy for domain") X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: linux-usb-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1519125229; b=M6V427guCa8+7sKrLDhBis9cwrgsvVhnjrzCpzPGQ5i51Fe nBcbAxqrsDHlkbwfgdSkX3CC70kZxFS27OoH7l64XS8dth863hge1/TR2jJAkBuz q5IoheONfSzELCT6L0sEFDZO+IEujfxtQbHoA6h8ZjAKvlHE1GhtqwVPGzUkyruk iKNOSz+DrmjftX9eglpIxWI71lr8jBIw71I/24g8RFiD9cMg5Wr8Hsr9yOJu23ue kZNoglKp4cWaxERkhZoALSacvbODP5fa28GUFLz1C7mwNYL0oPZ0xXB9fQUXYVLB 7K9pXOTOJlTo9RNtZC+LH4AAh6rvfKeK12Yyaqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:mime-version:subject:from :in-reply-to:date:cc:content-transfer-encoding:message-id :references:to:sender:list-id; s=arctest; t=1519125229; bh=W7JR9 DGFEdf8H7nvWZ8xpPEQjX/8Sd+r8fclFBDnVEw=; b=DRAkiGSyh8K9v9zQ7f5dW 0llLjEsDNqhkHxojsu8OOUie6pbhfBHVB/tZw3sm/ZVxCRAiqsrwRAFDZU2kHR5v AQj1vCGgoXFrwdvbfxy2mw/CgpSVKCYrLBf688pdyvKKZjRE+hLlZxylK775Thyv GaLnycYTJhbNrWdE6suktINnz55HysUYoiwA4xYXRX4jTXI3ZV6D43atr1HGyHi6 48oXDtWBwoDfuKJvQwJPuu9Xm/DvnkWfT9oQv1Hv0Xn/5wXrkuvT4omrqvXNxbDO FPMDc+Cv4tcmcAimL2/VrCP9vIbIGmNTuvEzGnMaC7E1mkVSvAtusClfDgYS+aBp w== ARC-Authentication-Results: i=1; mx2.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=fail (p=none,has-list-id=yes,d=none) header.from=canonical.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-google-dkim=fail (message has been altered; 2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=URZFSgWM; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=canonical.com header.result=pass header_is_org_domain=yes Authentication-Results: mx2.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=fail (p=none,has-list-id=yes,d=none) header.from=canonical.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-google-dkim=fail (message has been altered; 2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=URZFSgWM; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=canonical.com header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751681AbeBTLNq convert rfc822-to-8bit (ORCPT ); Tue, 20 Feb 2018 06:13:46 -0500 Received: from youngberry.canonical.com ([91.189.89.112]:54744 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751511AbeBTLNp (ORCPT ); Tue, 20 Feb 2018 06:13:45 -0500 X-Google-Smtp-Source: AH8x224lbiLeOkdUD9zZMWYFjEQBFRmzRI0Lywgf1U2+4XKQ4iEjM2hSqG8wdkXBboHpnSDVnItseg== Content-Type: text/plain; charset=utf-8 Mime-Version: 1.0 (Mac OS X Mail 11.2 \(3445.5.20\)) Subject: Re: [PATCH v2] xhci: Fix front USB ports on ASUS PRIME B350M-A From: Kai-Heng Feng In-Reply-To: Date: Tue, 20 Feb 2018 19:13:37 +0800 Cc: mathias.nyman@intel.com, Greg Kroah-Hartman , Linux USB Mailing List , linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8BIT Message-Id: <8579E16A-AA34-4876-9B62-D023B8FC2212@canonical.com> References: <20180219190621.6632-1-kai.heng.feng@canonical.com> To: Mathias Nyman X-Mailer: Apple Mail (2.3445.5.20) Sender: linux-usb-owner@vger.kernel.org X-Mailing-List: linux-usb@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: > On 20 Feb 2018, at 4:24 PM, Mathias Nyman wrote: > > Hi > > On 19.02.2018 21:06, Kai-Heng Feng wrote: >> When a USB device gets plugged on ASUS PRIME B350M-A's front ports, the >> xHC stops working: >> [ 549.114587] xhci_hcd 0000:02:00.0: WARN: xHC CMD_RUN timeout >> [ 549.114608] suspend_common(): xhci_pci_suspend+0x0/0xc0 returns -110 >> [ 549.114638] xhci_hcd 0000:02:00.0: can't suspend (hcd_pci_runtime_suspend returned -110) > > Is the xhci runtime suspend something that you expected here? > I mean was the plugged device first enumerated normally, driver bound, inactive and runtime suspended > first? I guess this is how it behaves, here’s the log after a device gets plugged: [ 7535.716578] xhci_hcd 0000:02:00.0: // Setting command ring address to 0xff86c001 [ 7535.720107] xhci_hcd 0000:02:00.0: xhci_resume: starting port polling. [ 7535.720114] xhci_hcd 0000:02:00.0: xhci_hub_status_data: stopping port polling. [ 7535.720134] xhci_hcd 0000:02:00.0: xhci_suspend: stopping port polling. [ 7535.720190] xhci_hcd 0000:02:00.0: Port Status Change Event for port 8 [ 7535.720194] xhci_hcd 0000:02:00.0: resume root hub [ 7535.720201] xhci_hcd 0000:02:00.0: handle_port_status: starting port polling. [ 7535.721675] xhci_hcd 0000:02:00.0: // Setting command ring address to 0xff86c001 [ 7535.722106] xhci_hcd 0000:02:00.0: // Setting command ring address to 0xff86c001 [ 7535.725538] xhci_hcd 0000:02:00.0: xhci_resume: starting port polling. So the xHC resumes and suspends, then resume again. [ 7535.725543] xhci_hcd 0000:02:00.0: xhci_hub_status_data: stopping port polling. [ 7535.725587] xhci_hcd 0000:02:00.0: get port status, actual port 0 status = 0x2a0 [ 7535.725590] xhci_hcd 0000:02:00.0: Get port status returned 0x100 [ 7535.725606] xhci_hcd 0000:02:00.0: get port status, actual port 1 status = 0x2a0 [ 7535.725608] xhci_hcd 0000:02:00.0: Get port status returned 0x100 [ 7535.725616] xhci_hcd 0000:02:00.0: get port status, actual port 2 status = 0x2a0 [ 7535.725618] xhci_hcd 0000:02:00.0: Get port status returned 0x100 [ 7535.725625] xhci_hcd 0000:02:00.0: get port status, actual port 3 status = 0x202e1 [ 7535.725627] xhci_hcd 0000:02:00.0: Get port status returned 0x10101 [ 7535.725632] xhci_hcd 0000:02:00.0: Port Status Change Event for port 8 [ 7535.725636] xhci_hcd 0000:02:00.0: handle_port_status: starting port polling. [ 7535.725656] xhci_hcd 0000:02:00.0: clear port connect change, actual port 3 status = 0x2e1 [ 7535.725663] xhci_hcd 0000:02:00.0: get port status, actual port 4 status = 0x2a0 [ 7535.725665] xhci_hcd 0000:02:00.0: Get port status returned 0x100 [ 7535.725672] xhci_hcd 0000:02:00.0: get port status, actual port 5 status = 0x2a0 [ 7535.725674] xhci_hcd 0000:02:00.0: Get port status returned 0x100 [ 7535.725680] xhci_hcd 0000:02:00.0: get port status, actual port 6 status = 0x2a0 [ 7535.725682] xhci_hcd 0000:02:00.0: Get port status returned 0x100 [ 7535.725689] xhci_hcd 0000:02:00.0: get port status, actual port 7 status = 0x2a0 [ 7535.725691] xhci_hcd 0000:02:00.0: Get port status returned 0x100 [ 7535.725698] xhci_hcd 0000:02:00.0: get port status, actual port 8 status = 0x2a0 [ 7535.725699] xhci_hcd 0000:02:00.0: Get port status returned 0x100 [ 7535.725706] xhci_hcd 0000:02:00.0: get port status, actual port 9 status = 0x2a0 [ 7535.725708] xhci_hcd 0000:02:00.0: Get port status returned 0x100 [ 7535.736165] xhci_hcd 0000:04:00.0: // Setting command ring address to 0xfff58001 [ 7535.740033] xhci_hcd 0000:04:00.0: xhci_resume: starting port polling. [ 7535.740040] xhci_hcd 0000:04:00.0: xhci_hub_status_data: stopping port polling. [ 7535.740047] xhci_hcd 0000:04:00.0: xhci_hub_status_data: stopping port polling. [ 7535.740133] xhci_hcd 0000:04:00.0: xhci_suspend: stopping port polling. [ 7535.740161] xhci_hcd 0000:04:00.0: // Setting command ring address to 0xfff58001 This is the “other” xHC that I mentioned in patch v1. It provides USB 3.1 capabilities to front USB port. [ 7535.776003] xhci_hcd 0000:02:00.0: xhci_hub_status_data: stopping port polling. [ 7535.832028] xhci_hcd 0000:02:00.0: get port status, actual port 3 status = 0x2e1 [ 7535.832031] xhci_hcd 0000:02:00.0: Get port status returned 0x101 [ 7535.832051] xhci_hcd 0000:02:00.0: // Ding dong! [ 7535.832150] xhci_hcd 0000:02:00.0: Slot 3 output ctx = 0xff125000 (dma) [ 7535.832153] xhci_hcd 0000:02:00.0: Slot 3 input ctx = 0xff16c000 (dma) [ 7535.832160] xhci_hcd 0000:02:00.0: Set slot id 3 dcbaa entry 000000000bd2158a to 0xff125000 [ 7535.832189] xhci_hcd 0000:02:00.0: set port reset, actual port 3 status = 0x2e1 [ 7535.835982] xhci_hcd 0000:02:00.0: xhci_hub_status_data: stopping port polling. [ 7535.892049] xhci_hcd 0000:02:00.0: Port Status Change Event for port 8 [ 7535.892056] xhci_hcd 0000:02:00.0: handle_port_status: starting port polling. [ 7535.900058] xhci_hcd 0000:02:00.0: get port status, actual port 3 status = 0x200e03 [ 7535.900061] xhci_hcd 0000:02:00.0: Get port status returned 0x100503 [ 7535.900079] xhci_hcd 0000:02:00.0: clear port reset change, actual port 3 status = 0xe03 [ 7535.959990] usb 1-4: new high-speed USB device number 4 using xhci_hcd > >> Delay before running xHC command CMD_RUN can workaround the issue. >> Use a new quirk to make the delay only targets to the affected xHC. > > Is this some known issue with this chip, or something figured out by trial and error? By trial and error. This might be a more pervasive issue, but I don’t see other bug reports though. > >> Signed-off-by: Kai-Heng Feng > > Thanks, otherwise workaround seems fine, just curious about the two details above Thank you. Kai-Heng > > -Mathias > From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2] xhci: Fix front USB ports on ASUS PRIME B350M-A From: Kai-Heng Feng Message-Id: <8579E16A-AA34-4876-9B62-D023B8FC2212@canonical.com> Date: Tue, 20 Feb 2018 19:13:37 +0800 To: Mathias Nyman Cc: mathias.nyman@intel.com, Greg Kroah-Hartman , Linux USB Mailing List , linux-kernel@vger.kernel.org List-ID: PiBPbiAyMCBGZWIgMjAxOCwgYXQgNDoyNCBQTSwgTWF0aGlhcyBOeW1hbiA8bWF0aGlhcy5ueW1h bkBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+IAo+IEhpCj4gCj4gT24gMTkuMDIuMjAxOCAyMTow NiwgS2FpLUhlbmcgRmVuZyB3cm90ZToKPj4gV2hlbiBhIFVTQiBkZXZpY2UgZ2V0cyBwbHVnZ2Vk IG9uIEFTVVMgUFJJTUUgQjM1ME0tQSdzIGZyb250IHBvcnRzLCB0aGUKPj4geEhDIHN0b3BzIHdv cmtpbmc6Cj4+IFsgIDU0OS4xMTQ1ODddIHhoY2lfaGNkIDAwMDA6MDI6MDAuMDogV0FSTjogeEhD IENNRF9SVU4gdGltZW91dAo+PiBbICA1NDkuMTE0NjA4XSBzdXNwZW5kX2NvbW1vbigpOiB4aGNp X3BjaV9zdXNwZW5kKzB4MC8weGMwIHJldHVybnMgLTExMAo+PiBbICA1NDkuMTE0NjM4XSB4aGNp X2hjZCAwMDAwOjAyOjAwLjA6IGNhbid0IHN1c3BlbmQgKGhjZF9wY2lfcnVudGltZV9zdXNwZW5k IHJldHVybmVkIC0xMTApCj4gCj4gSXMgdGhlIHhoY2kgcnVudGltZSBzdXNwZW5kIHNvbWV0aGlu ZyB0aGF0IHlvdSBleHBlY3RlZCBoZXJlPwo+IEkgbWVhbiB3YXMgdGhlIHBsdWdnZWQgZGV2aWNl IGZpcnN0IGVudW1lcmF0ZWQgbm9ybWFsbHksIGRyaXZlciBib3VuZCwgaW5hY3RpdmUgYW5kIHJ1 bnRpbWUgc3VzcGVuZGVkCj4gZmlyc3Q/CgpJIGd1ZXNzIHRoaXMgaXMgaG93IGl0IGJlaGF2ZXMs IGhlcmXigJlzIHRoZSBsb2cgYWZ0ZXIgYSBkZXZpY2UgZ2V0cyBwbHVnZ2VkOgoKWyA3NTM1Ljcx NjU3OF0geGhjaV9oY2QgMDAwMDowMjowMC4wOiAvLyBTZXR0aW5nIGNvbW1hbmQgcmluZyBhZGRy ZXNzIHRvIDB4ZmY4NmMwMDEKWyA3NTM1LjcyMDEwN10geGhjaV9oY2QgMDAwMDowMjowMC4wOiB4 aGNpX3Jlc3VtZTogc3RhcnRpbmcgcG9ydCBwb2xsaW5nLgpbIDc1MzUuNzIwMTE0XSB4aGNpX2hj ZCAwMDAwOjAyOjAwLjA6IHhoY2lfaHViX3N0YXR1c19kYXRhOiBzdG9wcGluZyBwb3J0IHBvbGxp bmcuClsgNzUzNS43MjAxMzRdIHhoY2lfaGNkIDAwMDA6MDI6MDAuMDogeGhjaV9zdXNwZW5kOiBz dG9wcGluZyBwb3J0IHBvbGxpbmcuClsgNzUzNS43MjAxOTBdIHhoY2lfaGNkIDAwMDA6MDI6MDAu MDogUG9ydCBTdGF0dXMgQ2hhbmdlIEV2ZW50IGZvciBwb3J0IDgKWyA3NTM1LjcyMDE5NF0geGhj aV9oY2QgMDAwMDowMjowMC4wOiByZXN1bWUgcm9vdCBodWIKWyA3NTM1LjcyMDIwMV0geGhjaV9o Y2QgMDAwMDowMjowMC4wOiBoYW5kbGVfcG9ydF9zdGF0dXM6IHN0YXJ0aW5nIHBvcnQgcG9sbGlu Zy4KWyA3NTM1LjcyMTY3NV0geGhjaV9oY2QgMDAwMDowMjowMC4wOiAvLyBTZXR0aW5nIGNvbW1h bmQgcmluZyBhZGRyZXNzIHRvIDB4ZmY4NmMwMDEKWyA3NTM1LjcyMjEwNl0geGhjaV9oY2QgMDAw MDowMjowMC4wOiAvLyBTZXR0aW5nIGNvbW1hbmQgcmluZyBhZGRyZXNzIHRvIDB4ZmY4NmMwMDEK WyA3NTM1LjcyNTUzOF0geGhjaV9oY2QgMDAwMDowMjowMC4wOiB4aGNpX3Jlc3VtZTogc3RhcnRp bmcgcG9ydCBwb2xsaW5nLgoKU28gdGhlIHhIQyByZXN1bWVzIGFuZCBzdXNwZW5kcywgdGhlbiBy ZXN1bWUgYWdhaW4uIAoKWyA3NTM1LjcyNTU0M10geGhjaV9oY2QgMDAwMDowMjowMC4wOiB4aGNp X2h1Yl9zdGF0dXNfZGF0YTogc3RvcHBpbmcgcG9ydCBwb2xsaW5nLgpbIDc1MzUuNzI1NTg3XSB4 aGNpX2hjZCAwMDAwOjAyOjAwLjA6IGdldCBwb3J0IHN0YXR1cywgYWN0dWFsIHBvcnQgMCBzdGF0 dXMgID0gMHgyYTAKWyA3NTM1LjcyNTU5MF0geGhjaV9oY2QgMDAwMDowMjowMC4wOiBHZXQgcG9y dCBzdGF0dXMgcmV0dXJuZWQgMHgxMDAKWyA3NTM1LjcyNTYwNl0geGhjaV9oY2QgMDAwMDowMjow MC4wOiBnZXQgcG9ydCBzdGF0dXMsIGFjdHVhbCBwb3J0IDEgc3RhdHVzICA9IDB4MmEwClsgNzUz NS43MjU2MDhdIHhoY2lfaGNkIDAwMDA6MDI6MDAuMDogR2V0IHBvcnQgc3RhdHVzIHJldHVybmVk IDB4MTAwClsgNzUzNS43MjU2MTZdIHhoY2lfaGNkIDAwMDA6MDI6MDAuMDogZ2V0IHBvcnQgc3Rh dHVzLCBhY3R1YWwgcG9ydCAyIHN0YXR1cyAgPSAweDJhMApbIDc1MzUuNzI1NjE4XSB4aGNpX2hj ZCAwMDAwOjAyOjAwLjA6IEdldCBwb3J0IHN0YXR1cyByZXR1cm5lZCAweDEwMApbIDc1MzUuNzI1 NjI1XSB4aGNpX2hjZCAwMDAwOjAyOjAwLjA6IGdldCBwb3J0IHN0YXR1cywgYWN0dWFsIHBvcnQg MyBzdGF0dXMgID0gMHgyMDJlMQpbIDc1MzUuNzI1NjI3XSB4aGNpX2hjZCAwMDAwOjAyOjAwLjA6 IEdldCBwb3J0IHN0YXR1cyByZXR1cm5lZCAweDEwMTAxClsgNzUzNS43MjU2MzJdIHhoY2lfaGNk IDAwMDA6MDI6MDAuMDogUG9ydCBTdGF0dXMgQ2hhbmdlIEV2ZW50IGZvciBwb3J0IDgKWyA3NTM1 LjcyNTYzNl0geGhjaV9oY2QgMDAwMDowMjowMC4wOiBoYW5kbGVfcG9ydF9zdGF0dXM6IHN0YXJ0 aW5nIHBvcnQgcG9sbGluZy4KWyA3NTM1LjcyNTY1Nl0geGhjaV9oY2QgMDAwMDowMjowMC4wOiBj bGVhciBwb3J0IGNvbm5lY3QgY2hhbmdlLCBhY3R1YWwgcG9ydCAzIHN0YXR1cyAgPSAweDJlMQpb IDc1MzUuNzI1NjYzXSB4aGNpX2hjZCAwMDAwOjAyOjAwLjA6IGdldCBwb3J0IHN0YXR1cywgYWN0 dWFsIHBvcnQgNCBzdGF0dXMgID0gMHgyYTAKWyA3NTM1LjcyNTY2NV0geGhjaV9oY2QgMDAwMDow MjowMC4wOiBHZXQgcG9ydCBzdGF0dXMgcmV0dXJuZWQgMHgxMDAKWyA3NTM1LjcyNTY3Ml0geGhj aV9oY2QgMDAwMDowMjowMC4wOiBnZXQgcG9ydCBzdGF0dXMsIGFjdHVhbCBwb3J0IDUgc3RhdHVz ICA9IDB4MmEwClsgNzUzNS43MjU2NzRdIHhoY2lfaGNkIDAwMDA6MDI6MDAuMDogR2V0IHBvcnQg c3RhdHVzIHJldHVybmVkIDB4MTAwClsgNzUzNS43MjU2ODBdIHhoY2lfaGNkIDAwMDA6MDI6MDAu MDogZ2V0IHBvcnQgc3RhdHVzLCBhY3R1YWwgcG9ydCA2IHN0YXR1cyAgPSAweDJhMApbIDc1MzUu NzI1NjgyXSB4aGNpX2hjZCAwMDAwOjAyOjAwLjA6IEdldCBwb3J0IHN0YXR1cyByZXR1cm5lZCAw eDEwMApbIDc1MzUuNzI1Njg5XSB4aGNpX2hjZCAwMDAwOjAyOjAwLjA6IGdldCBwb3J0IHN0YXR1 cywgYWN0dWFsIHBvcnQgNyBzdGF0dXMgID0gMHgyYTAKWyA3NTM1LjcyNTY5MV0geGhjaV9oY2Qg MDAwMDowMjowMC4wOiBHZXQgcG9ydCBzdGF0dXMgcmV0dXJuZWQgMHgxMDAKWyA3NTM1LjcyNTY5 OF0geGhjaV9oY2QgMDAwMDowMjowMC4wOiBnZXQgcG9ydCBzdGF0dXMsIGFjdHVhbCBwb3J0IDgg c3RhdHVzICA9IDB4MmEwClsgNzUzNS43MjU2OTldIHhoY2lfaGNkIDAwMDA6MDI6MDAuMDogR2V0 IHBvcnQgc3RhdHVzIHJldHVybmVkIDB4MTAwClsgNzUzNS43MjU3MDZdIHhoY2lfaGNkIDAwMDA6 MDI6MDAuMDogZ2V0IHBvcnQgc3RhdHVzLCBhY3R1YWwgcG9ydCA5IHN0YXR1cyAgPSAweDJhMApb IDc1MzUuNzI1NzA4XSB4aGNpX2hjZCAwMDAwOjAyOjAwLjA6IEdldCBwb3J0IHN0YXR1cyByZXR1 cm5lZCAweDEwMAoKWyA3NTM1LjczNjE2NV0geGhjaV9oY2QgMDAwMDowNDowMC4wOiAvLyBTZXR0 aW5nIGNvbW1hbmQgcmluZyBhZGRyZXNzIHRvIDB4ZmZmNTgwMDEKWyA3NTM1Ljc0MDAzM10geGhj aV9oY2QgMDAwMDowNDowMC4wOiB4aGNpX3Jlc3VtZTogc3RhcnRpbmcgcG9ydCBwb2xsaW5nLgpb IDc1MzUuNzQwMDQwXSB4aGNpX2hjZCAwMDAwOjA0OjAwLjA6IHhoY2lfaHViX3N0YXR1c19kYXRh OiBzdG9wcGluZyBwb3J0IHBvbGxpbmcuClsgNzUzNS43NDAwNDddIHhoY2lfaGNkIDAwMDA6MDQ6 MDAuMDogeGhjaV9odWJfc3RhdHVzX2RhdGE6IHN0b3BwaW5nIHBvcnQgcG9sbGluZy4KWyA3NTM1 Ljc0MDEzM10geGhjaV9oY2QgMDAwMDowNDowMC4wOiB4aGNpX3N1c3BlbmQ6IHN0b3BwaW5nIHBv cnQgcG9sbGluZy4KWyA3NTM1Ljc0MDE2MV0geGhjaV9oY2QgMDAwMDowNDowMC4wOiAvLyBTZXR0 aW5nIGNvbW1hbmQgcmluZyBhZGRyZXNzIHRvIDB4ZmZmNTgwMDEKClRoaXMgaXMgdGhlIOKAnG90 aGVy4oCdIHhIQyB0aGF0IEkgbWVudGlvbmVkIGluIHBhdGNoIHYxLiBJdCBwcm92aWRlcyBVU0Ig My4xIGNhcGFiaWxpdGllcyB0byBmcm9udCBVU0IgcG9ydC4KClsgNzUzNS43NzYwMDNdIHhoY2lf aGNkIDAwMDA6MDI6MDAuMDogeGhjaV9odWJfc3RhdHVzX2RhdGE6IHN0b3BwaW5nIHBvcnQgcG9s bGluZy4KWyA3NTM1LjgzMjAyOF0geGhjaV9oY2QgMDAwMDowMjowMC4wOiBnZXQgcG9ydCBzdGF0 dXMsIGFjdHVhbCBwb3J0IDMgc3RhdHVzICA9IDB4MmUxClsgNzUzNS44MzIwMzFdIHhoY2lfaGNk IDAwMDA6MDI6MDAuMDogR2V0IHBvcnQgc3RhdHVzIHJldHVybmVkIDB4MTAxClsgNzUzNS44MzIw NTFdIHhoY2lfaGNkIDAwMDA6MDI6MDAuMDogLy8gRGluZyBkb25nIQpbIDc1MzUuODMyMTUwXSB4 aGNpX2hjZCAwMDAwOjAyOjAwLjA6IFNsb3QgMyBvdXRwdXQgY3R4ID0gMHhmZjEyNTAwMCAoZG1h KQpbIDc1MzUuODMyMTUzXSB4aGNpX2hjZCAwMDAwOjAyOjAwLjA6IFNsb3QgMyBpbnB1dCBjdHgg PSAweGZmMTZjMDAwIChkbWEpClsgNzUzNS44MzIxNjBdIHhoY2lfaGNkIDAwMDA6MDI6MDAuMDog U2V0IHNsb3QgaWQgMyBkY2JhYSBlbnRyeSAwMDAwMDAwMDBiZDIxNThhIHRvIDB4ZmYxMjUwMDAK WyA3NTM1LjgzMjE4OV0geGhjaV9oY2QgMDAwMDowMjowMC4wOiBzZXQgcG9ydCByZXNldCwgYWN0 dWFsIHBvcnQgMyBzdGF0dXMgID0gMHgyZTEKWyA3NTM1LjgzNTk4Ml0geGhjaV9oY2QgMDAwMDow MjowMC4wOiB4aGNpX2h1Yl9zdGF0dXNfZGF0YTogc3RvcHBpbmcgcG9ydCBwb2xsaW5nLgpbIDc1 MzUuODkyMDQ5XSB4aGNpX2hjZCAwMDAwOjAyOjAwLjA6IFBvcnQgU3RhdHVzIENoYW5nZSBFdmVu dCBmb3IgcG9ydCA4ClsgNzUzNS44OTIwNTZdIHhoY2lfaGNkIDAwMDA6MDI6MDAuMDogaGFuZGxl X3BvcnRfc3RhdHVzOiBzdGFydGluZyBwb3J0IHBvbGxpbmcuClsgNzUzNS45MDAwNThdIHhoY2lf aGNkIDAwMDA6MDI6MDAuMDogZ2V0IHBvcnQgc3RhdHVzLCBhY3R1YWwgcG9ydCAzIHN0YXR1cyAg PSAweDIwMGUwMwpbIDc1MzUuOTAwMDYxXSB4aGNpX2hjZCAwMDAwOjAyOjAwLjA6IEdldCBwb3J0 IHN0YXR1cyByZXR1cm5lZCAweDEwMDUwMwpbIDc1MzUuOTAwMDc5XSB4aGNpX2hjZCAwMDAwOjAy OjAwLjA6IGNsZWFyIHBvcnQgcmVzZXQgY2hhbmdlLCBhY3R1YWwgcG9ydCAzIHN0YXR1cyAgPSAw eGUwMwpbIDc1MzUuOTU5OTkwXSB1c2IgMS00OiBuZXcgaGlnaC1zcGVlZCBVU0IgZGV2aWNlIG51 bWJlciA0IHVzaW5nIHhoY2lfaGNkCgo+IAo+PiBEZWxheSBiZWZvcmUgcnVubmluZyB4SEMgY29t bWFuZCBDTURfUlVOIGNhbiB3b3JrYXJvdW5kIHRoZSBpc3N1ZS4KPj4gVXNlIGEgbmV3IHF1aXJr IHRvIG1ha2UgdGhlIGRlbGF5IG9ubHkgdGFyZ2V0cyB0byB0aGUgYWZmZWN0ZWQgeEhDLgo+IAo+ IElzIHRoaXMgc29tZSBrbm93biBpc3N1ZSB3aXRoIHRoaXMgY2hpcCwgb3Igc29tZXRoaW5nIGZp Z3VyZWQgb3V0IGJ5IHRyaWFsIGFuZCBlcnJvcj8KCkJ5IHRyaWFsIGFuZCBlcnJvci4KVGhpcyBt aWdodCBiZSBhIG1vcmUgcGVydmFzaXZlIGlzc3VlLCBidXQgSSBkb27igJl0IHNlZSBvdGhlciBi dWcgcmVwb3J0cyB0aG91Z2guCgo+IAo+PiBTaWduZWQtb2ZmLWJ5OiBLYWktSGVuZyBGZW5nIDxr YWkuaGVuZy5mZW5nQGNhbm9uaWNhbC5jb20+Cj4gCj4gVGhhbmtzLCBvdGhlcndpc2Ugd29ya2Fy b3VuZCBzZWVtcyBmaW5lLCBqdXN0IGN1cmlvdXMgYWJvdXQgdGhlIHR3byBkZXRhaWxzIGFib3Zl CgpUaGFuayB5b3UuCgpLYWktSGVuZwoKPiAKPiAtTWF0aGlhcwo+Ci0tLQpUbyB1bnN1YnNjcmli ZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBp bgp0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3Jl IG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZv Lmh0bWwK