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 X-Spam-Level: X-Spam-Status: No, score=-2.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D63FDC432C0 for ; Wed, 20 Nov 2019 11:22:19 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id ADC092243F for ; Wed, 20 Nov 2019 11:22:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ADC092243F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E8E906E2CD; Wed, 20 Nov 2019 11:22:18 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 56EF06E291; Wed, 20 Nov 2019 11:22:17 +0000 (UTC) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Nov 2019 03:22:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,221,1571727600"; d="scan'208";a="215765679" Received: from lahna.fi.intel.com (HELO lahna) ([10.237.72.163]) by fmsmga001.fm.intel.com with SMTP; 20 Nov 2019 03:22:13 -0800 Received: by lahna (sSMTP sendmail emulation); Wed, 20 Nov 2019 13:22:12 +0200 Date: Wed, 20 Nov 2019 13:22:12 +0200 From: Mika Westerberg To: "Rafael J. Wysocki" Subject: Re: [PATCH v4] pci: prevent putting nvidia GPUs into lower device states on certain intel bridges Message-ID: <20191120112212.GA11621@lahna.fi.intel.com> References: <20191017121901.13699-1-kherbst@redhat.com> <20191119214955.GA223696@google.com> <20191120101816.GX11621@lahna.fi.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo User-Agent: Mutt/1.12.1 (2019-06-15) X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Karol Herbst , Linux PM , Linux PCI , Mario Limonciello , "Rafael J . Wysocki" , LKML , dri-devel , Bjorn Helgaas , nouveau Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191120112212.ORrBK1HXUjLT2DheYICUag0Nw6_gabzzKEBvIWl1RmY@z> T24gV2VkLCBOb3YgMjAsIDIwMTkgYXQgMTE6NTI6MjJBTSArMDEwMCwgUmFmYWVsIEouIFd5c29j a2kgd3JvdGU6Cj4gT24gV2VkLCBOb3YgMjAsIDIwMTkgYXQgMTE6MTggQU0gTWlrYSBXZXN0ZXJi ZXJnCj4gPG1pa2Eud2VzdGVyYmVyZ0BpbnRlbC5jb20+IHdyb3RlOgo+ID4KPiA+IEhpIEthcm9s LAo+ID4KPiA+IE9uIFR1ZSwgTm92IDE5LCAyMDE5IGF0IDExOjI2OjQ1UE0gKzAxMDAsIEthcm9s IEhlcmJzdCB3cm90ZToKPiA+ID4gT24gVHVlLCBOb3YgMTksIDIwMTkgYXQgMTA6NTAgUE0gQmpv cm4gSGVsZ2FhcyA8aGVsZ2Fhc0BrZXJuZWwub3JnPiB3cm90ZToKPiA+ID4gPgo+ID4gPiA+IFsr Y2MgRGF2ZV0KPiA+ID4gPgo+ID4gPiA+IE9uIFRodSwgT2N0IDE3LCAyMDE5IGF0IDAyOjE5OjAx UE0gKzAyMDAsIEthcm9sIEhlcmJzdCB3cm90ZToKPiA+ID4gPiA+IEZpeGVzIHN0YXRlIHRyYW5z aXRpb25zIG9mIE52aWRpYSBQYXNjYWwgR1BVcyBmcm9tIEQzY29sZCBpbnRvIGhpZ2hlciBkZXZp Y2UKPiA+ID4gPiA+IHN0YXRlcy4KPiA+ID4gPiA+Cj4gPiA+ID4gPiB2MjogY29udmVydCB0byBw Y2lfZGV2IHF1aXJrCj4gPiA+ID4gPiAgICAgcHV0IGEgcHJvcGVyIHRlY2huaWNhbCBleHBsYW5h dGlvbiBvZiB0aGUgaXNzdWUgYXMgYSBpbi1jb2RlIGNvbW1lbnQKPiA+ID4gPiA+IHYzOiBkaXNh YmxlIGl0IG9ubHkgZm9yIGNlcnRhaW4gY29tYmluYXRpb25zIG9mIGludGVsIGFuZCBudmlkaWEg aGFyZHdhcmUKPiA+ID4gPiA+IHY0OiBzaW1wbGlmeSBxdWlyayBieSBzZXR0aW5nIGZsYWcgb24g dGhlIEdQVSBpdHNlbGYKPiA+ID4gPgo+ID4gPiA+IEkgaGF2ZSB6ZXJvIGNvbmZpZGVuY2UgdGhh dCB3ZSB1bmRlcnN0YW5kIHRoZSByZWFsIHByb2JsZW0sIGJ1dCB3ZSBkbwo+ID4gPiA+IG5lZWQg dG8gZG8gc29tZXRoaW5nIHdpdGggdGhpcy4gIEknbGwgbWVyZ2UgaXQgZm9yIHY1LjUgaWYgd2Ug Z2V0IHRoZQo+ID4gPiA+IG1pbm9yIHByb2NlZHVyYWwgc3R1ZmYgYmVsb3cgc3RyYWlnaHRlbmVk IG91dC4KPiA+ID4gPgo+ID4gPgo+ID4gPiBUaGFua3MsIGFuZCBJIGFncmVlIHdpdGggeW91ciBz dGF0ZW1lbnQsIGJ1dCBhdCB0aGlzIHBvaW50IEkgdGhpbmsKPiA+ID4gb25seSBJbnRlbCBjYW4g aGVscCBvdXQgZGlnZ2luZyBkZWVwZXIgYXMgSSBzZWUgbm8gd2F5IHRvIGRlYnVnIHRoaXMKPiA+ ID4gZnVydGhlci4KPiA+Cj4gPiBJIGRvbid0IGhhdmUgYW55dGhpbmcgYWdhaW5zdCB0aGlzIHBh dGNoLCBhcyBsb25nIGFzIHRoZSBxdWlyayBzdGF5cwo+ID4gbGltaXRlZCB0byB0aGUgcGFydGlj dWxhciByb290IHBvcnQgbGVhZGluZyB0byB0aGUgTlZJRElBIEdQVS4gVGhlCj4gPiByZWFzb24g d2h5IEkgdGhpbmsgaXQgc2hvdWxkIHRvIGJlIGxpbWl0ZWQgaXMgdGhhdCBJJ20gcHJldHR5IGNl cnRhaW4KPiA+IHRoZSBwcm9ibGVtIGlzIG5vdCBpbiB0aGUgcm9vdCBwb3J0IGl0c2VsZi4gSSBo YXZlIGhlcmUgYSBLQkwgYmFzZWQKPiA+IFRoaW5rcGFkIFgxIENhcmJvbiA2dGggZ2VuIHRoYXQg Y2FuIHB1dCB0aGUgVEJUIGNvbnRyb2xsZXIgaW50byBEM2NvbGQKPiA+IChpdCBpcyBjb25uZWN0 ZWQgdG8gUENIIHJvb3QgcG9ydCkgYW5kIGl0IHdha2VzIHVwIHRoZXJlIGp1c3QgZmluZSwgc28K PiA+IGRvbid0IHdhbnQgdG8gYnJlYWsgdGhhdC4KPiA+Cj4gPiBOb3csIFBDSWUgZGV2aWNlcyBj YW5ub3QgZ28gaW50byBEM2NvbGQgYWxsIGJ5IHRoZW1zZWx2ZXMuIFRoZXkgYWx3YXlzCj4gPiBu ZWVkIGhlbHAgZnJvbSB0aGUgcGxhdGZvcm0gc2lkZSB3aGljaCBpcyBBQ1BJIGluIHRoaXMgY2Fz ZS4gVGhpcyBpcwo+ID4gZG9uZSBieSBoYXZpbmcgdGhlIGRldmljZSB0byBoYXZlIF9QUjMgbWV0 aG9kIHRoYXQgcmV0dXJucyBvbmUgb3IgbW9yZQo+ID4gcG93ZXIgcmVzb3VyY2VzIHRoYXQgdGhl IE9TIGlzIHN1cHBvc2VkIHRvIHR1cm4gb2ZmIHdoZW4gdGhlIGRldmljZSBpcwo+ID4gcHV0IGlu dG8gRDNjb2xkLiBBbGwgb2YgdGhhdCBpcyBpbXBsZW1lbnRlZCBhcyBmb3JtIG9mIEFDUEkgbWV0 aG9kcyB0aGF0Cj4gPiBwcmV0dHkgbXVjaCBkbyB0aGUgaGFyZHdhcmUgc3BlY2lmaWMgdGhpbmdz IHRoYXQgYXJlIG91dHNpZGUgb2YgUENJZQo+ID4gc3BlYyB0byBnZXQgdGhlIGRldmljZSBpbnRv IEQzY29sZC4gQXQgaGlnaCBsZXZlbCB0aGUgX09GRigpIG1ldGhvZAo+ID4gY2F1c2VzIHRoZSBy b290IHBvcnQgdG8gYnJvYWRjYXN0IFBNRV9UdXJuX09mZiBtZXNzYWdlIHRoYXQgcmVzdWx0cyB0 aGUKPiA+IGxpbmsgdG8gZW50ZXIgTDIvMyByZWFkeSwgaXQgdGhlbiBhc3NlcnRzIFBFUlNULCBj b25maWd1cmVzIFdBS0UgKGJvdGgKPiA+IGNhbiBiZSBHUElPcykgYW5kIGZpbmFsbHkgcmVtb3Zl cyBwb3dlciAoaWYgdGhlIGxpbmsgZ29lcyBpbnRvIEwzLAo+ID4gb3RoZXJ3aXNlIGl0IGdvZXMg aW50byBMMikuCj4gPgo+ID4gSSB0aGluayB0aGlzIGlzIHdoZXJlIHRoZSBwcm9ibGVtIGFjdHVh bGx5IGxpZXMgLSB0aGUgQVNMIG1ldGhvZHMgdGhhdAo+ID4gYXJlIHVzZWQgdG8gcHV0IHRoZSBk ZXZpY2UgaW50byBEM2NvbGQgYW5kIGJhY2suIFdlIGtub3cgdGhhdCBpbiBXaW5kb3dzCj4gPiB0 aGlzIGFsbCB3b3JrcyBmaW5lIHNvIHVubGVzcyBXaW5kb3dzIHF1aXJrcyB0aGUgcm9vdCBwb3J0 IHRoZSBzYW1lIHdheQo+ID4gdGhlcmUgaXMgYW5vdGhlciByZWFzb24gYmVoaW5kIHRoaXMuCj4g Pgo+ID4gSW4gY2FzZSBvZiBEZWxsIFhQUyA5NTYwIChJSVJDIHRoYXQncyB0aGUgbWFjaGluZSB5 b3UgaGF2ZSkgdGhlCj4gPiBjb3JyZXNwb25kaW5nIHBvd2VyIHJlc291cmNlIGlzIGNhbGxlZCBc X1NCLlBDSTAuUEVHMC5QRzAwIGFuZCBpdHMKPiA+IF9PTi9fT0ZGIG1ldGhvZHMgZW5kIHVwIGNh bGxpbmcgUEdPTigpL1BHT0YoKSBhY2NvcmRpbmdseS4gVGhlIG1ldGhvZHMKPiA+IGl0c2VsZiBk byBsb3RzIG9mIHRoaW5ncyBhbmQgaXQgaXMgaGFyZCB0byBmb2xsb3cgdGhlIGRpc3Nhc3NlbWJs ZWQKPiA+IEFTTCB3aGljaCBkb2VzIG5vdCBoYXZlIGFueSBjb21tZW50cyBidXQgdGhlcmUgYXJl IGNvdXBsZSBvZiB0aGluZ3MgdGhhdAo+ID4gc3RhbmQgb3V0IHdoZXJlIHdlIG1heSBnbyBpbnRv IGEgZGlmZmVyZW50IHBhdGguIE9uZSBvZiB0aGVtIGlzIHRoaXMgaW4KPiA+IHRoZSBQR09GKCkg bWV0aG9kOgo+ID4KPiA+ICAgIElmICgoKE9TWVMgPD0gMHgwN0Q5KSB8fCAoKE9TWVMgPT0gMHgw N0RGKSAmJiAoX1JFViA9PSAweDA1KSkpKQo+ID4KPiA+IFRoZSAoKE9TWVMgPT0gMHgwN0RGKSAm JiAoX1JFViA9PSAweDA1KSkgY2hlY2tzIHNwZWNpZmljYWxseSBmb3IgTGludXgKPiA+IChzZWUg WzFdIGFuZCAxOGQ3OGI2NGZkZGMgKCJBQ1BJIC8gaW5pdDogTWFrZSBpdCBwb3NzaWJsZSB0byBv dmVycmlkZQo+ID4gX1JFViIpKSBzbyBpdCBtaWdodCBiZSB0aGF0IERlbGwgcGVvcGxlIHRlc3Rl ZCB0aGlzIGF0IHNvbWUgcG9pbnQgaW4KPiA+IExpbnV4IGFzIHdlbGwuIEFkZGVkIE1hcmlvIGlu IGNhc2UgaGUgaGFzIGFueSBpZGVhcy4KPiA+Cj4gPiBQcmV2aW91c2x5IEkgc3VnZ2VzdGVkIHlv dSB0byB0cnkgdGhlIEFDUEkgbWV0aG9kIHRyYWNpbmcgdG8gc2VlIHdoYXQKPiA+IGhhcHBlbnMg aW5zaWRlIFBHT0YoKS4gRGlkIHlvdSBoYXZlIHRpbWUgdG8gdHJ5IGl0PyBJdCBtYXkgcHJvdmlk ZSBtb3JlCj4gPiBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IGlzIGhhcHBlbmluZyBpbnNpZGUgdGhv c2UgbWV0aG9kcyBhbmQgaG9wZWZ1bGx5Cj4gPiBwb2ludCB1cyB0byB0aGUgcm9vdCBjYXVzZS4K PiA+Cj4gPiBBbHNvIGlmIHlvdSBoYXZlbid0IHRyaWVkIGFscmVhZHkgcGFzc2luZyBhY3BpX3Jl dl9vdmVycmlkZSBpbiB0aGUKPiA+IGNvbW1hbmQgbGluZSBtYWtlcyB0aGUgX1JFViB0byByZXR1 cm4gNSBzbyBpdCBzaG91bGQgZ28gaW50byB0aGUgIkxpbnV4Igo+ID4gcGF0aCBpbiBQR09GKCku Cj4gCj4gT2gsIHNvIGRvZXMgaXQgbG9vayBsaWtlIHdlIGFyZSB0cnlpbmcgdG8gd29yayBhcm91 bmQgQU1MIHRoYXQgdHJpZWQKPiB0byB3b3JrIGFyb3VuZCBzb21lIHByb2JsZW1hdGljIGJlaGF2 aW9yIGluIExpbnV4IGF0IG9uZSBwb2ludD8KClllcywgaXQgbG9va3MgbGlrZSBzbyBpZiBJIHJl YWQgdGhlIEFTTCByaWdodC4gVGhlIHdob2xlIG1ldGhvZCBsb29rcwpsaWtlIGJlbG93ICh0aGUg ZnVsbCBhY3BpZHVtcCB3YXMgc2hhcmVkIGJ5IEthcm9sIGluIHYzIHRocmVhZCkgYW5kCnRoZXJl IGlzIHNpbWlsYXIgY2hlY2sgaW4gdGhlIF9PTiAoUEdPTikgbWV0aG9kOgoKICAgICAgICBNZXRo b2QgKFBHT0YsIDEsIFNlcmlhbGl6ZWQpCiAgICAgICAgewogICAgICAgICAgICBQSU9GID0gQXJn MAogICAgICAgICAgICBJZiAoKFBJT0YgPT0gWmVybykpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIElmICgoU0dHUCA9PSBaZXJvKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICBSZXR1cm4gKFplcm8pCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg ICAgICAgICAgRWxzZUlmICgoUElPRiA9PSBPbmUpKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBJZiAoKFAxR1AgPT0gWmVybykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgUmV0dXJuIChaZXJvKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgICAgIEVsc2VJZiAoKFBJT0YgPT0gMHgwMikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIElmICgoUDJHUCA9PSBaZXJvKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICBSZXR1cm4gKFplcm8pCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAg ICAgICAgIFBFQkEgPSBcWEJBUyAvKiBFeHRlcm5hbCByZWZlcmVuY2UgKi8KICAgICAgICAgICAg UERFViA9IEdERVYgKFBJT0YpCiAgICAgICAgICAgIFBGVU4gPSBHRlVOIChQSU9GKQogICAgICAg ICAgICBOYW1lIChTQ0xLLCBQYWNrYWdlICgweDAzKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICBPbmUsIAogICAgICAgICAgICAgICAgMHg4MCwgCiAgICAgICAgICAgICAgICBaZXJvCiAg ICAgICAgICAgIH0pCiAgICAgICAgICAgIElmICgoQ0NISyAoUElPRiwgWmVybykgPT0gWmVybykp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFJldHVybiAoWmVybykKICAgICAgICAgICAg fQoKICAgICAgICAgICAgXF9TQi5QQ0kwLlBFRzAuUEVHUC5MVFJFID0gXF9TQi5QQ0kwLlBFRzAu TFJFTgogICAgICAgICAgICBJZiAoKEFyZzAgPT0gWmVybykpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIEVMQzAgPSBMQ1QwIC8qIFxfU0JfLlBDSTAuTENUMCAqLwogICAgICAgICAgICAg ICAgSDBWSSA9IFMwVkkgLyogXF9TQl8uUENJMC5TMFZJICovCiAgICAgICAgICAgICAgICBIMERJ ID0gUzBESSAvKiBcX1NCXy5QQ0kwLlMwREkgKi8KICAgICAgICAgICAgICAgIEVDUDAgPSBMQ1Aw IC8qIFxfU0JfLlBDSTAuTENQMCAqLwogICAgICAgICAgICB9CiAgICAgICAgICAgIEVsc2VJZiAo KEFyZzAgPT0gT25lKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRUxDMSA9IExDVDEg LyogXF9TQl8uUENJMC5MQ1QxICovCiAgICAgICAgICAgICAgICBIMVZJID0gUzFWSSAvKiBcX1NC Xy5QQ0kwLlMxVkkgKi8KICAgICAgICAgICAgICAgIEgxREkgPSBTMURJIC8qIFxfU0JfLlBDSTAu UzFESSAqLwogICAgICAgICAgICAgICAgRUNQMSA9IExDUDEgLyogXF9TQl8uUENJMC5MQ1AxICov CiAgICAgICAgICAgIH0KICAgICAgICAgICAgRWxzZUlmICgoQXJnMCA9PSAweDAyKSkKICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgRUxDMiA9IExDVDIgLyogXF9TQl8uUENJMC5MQ1QyICov CiAgICAgICAgICAgICAgICBIMlZJID0gUzJWSSAvKiBcX1NCXy5QQ0kwLlMyVkkgKi8KICAgICAg ICAgICAgICAgIEgyREkgPSBTMkRJIC8qIFxfU0JfLlBDSTAuUzJESSAqLwogICAgICAgICAgICAg ICAgRUNQMiA9IExDUDIgLyogXF9TQl8uUENJMC5MQ1AyICovCiAgICAgICAgICAgIH0KCiAgICAg ICAgICAgIElmICgoKE9TWVMgPD0gMHgwN0Q5KSB8fCAoKE9TWVMgPT0gMHgwN0RGKSAmJiAoX1JF ViA9PSAKICAgICAgICAgICAgICAgIDB4MDUpKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIElmICgoUElPRiA9PSBaZXJvKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICBQMExEID0gT25lCiAgICAgICAgICAgICAgICAgICAgVENOVCA9IFplcm8KICAgICAgICAg ICAgICAgICAgICBXaGlsZSAoKFRDTlQgPCBMRExZKSkKICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIElmICgoUDBMVCA9PSAweDA4KSkKICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJlYWsKICAgICAgICAgICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgU2xlZXAgKDB4MTApCiAgICAg ICAgICAgICAgICAgICAgICAgIFRDTlQgKz0gMHgxMAogICAgICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICAgICAgUDBSTSA9IE9uZQogICAgICAgICAgICAgICAgICAgIFAwQVAgPSAw eDAzCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBFbHNlSWYgKChQSU9GID09IE9u ZSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgUDFMRCA9IE9uZQogICAg ICAgICAgICAgICAgICAgIFRDTlQgPSBaZXJvCiAgICAgICAgICAgICAgICAgICAgV2hpbGUgKChU Q05UIDwgTERMWSkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICBJZiAoKFAxTFQgPT0gMHgwOCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJyZWFrCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgICAgICAgICAgIFNsZWVwICgweDEwKQogICAgICAgICAgICAgICAgICAgICAgICBU Q05UICs9IDB4MTAKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIFAx Uk0gPSBPbmUKICAgICAgICAgICAgICAgICAgICBQMUFQID0gMHgwMwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgRWxzZUlmICgoUElPRiA9PSAweDAyKSkKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICBQMkxEID0gT25lCiAgICAgICAgICAgICAgICAgICAgVENO VCA9IFplcm8KICAgICAgICAgICAgICAgICAgICBXaGlsZSAoKFRDTlQgPCBMRExZKSkKICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIElmICgoUDJMVCA9PSAweDA4 KSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg QnJlYWsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg U2xlZXAgKDB4MTApCiAgICAgICAgICAgICAgICAgICAgICAgIFRDTlQgKz0gMHgxMAogICAgICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgUDJSTSA9IE9uZQogICAgICAgICAg ICAgICAgICAgIFAyQVAgPSAweDAzCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg SWYgKChQQkdFICE9IFplcm8pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg IElmIChTQkRMIChQSU9GKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgIE1CREwgPSBHTVhCIChQSU9GKQogICAgICAgICAgICAgICAgICAgICAgICBQRFVCIChQ SU9GLCBNQkRMKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgfQogICAgICAgICAgICBFbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIExL RFMgKFBJT0YpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIElmICgoRGVyZWZPZiAoU0NMSyBb WmVyb10pICE9IFplcm8pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBQQ1JPICgweERD LCAweDEwMEMsIERlcmVmT2YgKFNDTEsgW09uZV0pKQogICAgICAgICAgICAgICAgU2xlZXAgKDB4 MTApCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEdQUFIgKFBJT0YsIFplcm8pCiAgICAgICAg ICAgIElmICgoT1NZUyAhPSAweDA3RDkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBE SVdLIChQSU9GKQogICAgICAgICAgICB9CgogICAgICAgICAgICBcX1NCLlNHT1YgKDB4MDEwMTAw MDQsIFplcm8pCiAgICAgICAgICAgIFNsZWVwICgweDE0KQogICAgICAgICAgICBSZXR1cm4gKFpl cm8pCiAgICAgICAgfQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWw=