From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v2 5/6] drm/i915/guc: refactor doorbell management code Date: Mon, 13 Jun 2016 10:48:18 +0100 Message-ID: <575E8162.2010302@linux.intel.com> References: <1465577461-35616-1-git-send-email-david.s.gordon@intel.com> <1465577461-35616-6-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 2A905880B0 for ; Mon, 13 Jun 2016 09:48:20 +0000 (UTC) In-Reply-To: <1465577461-35616-6-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDEwLzA2LzE2IDE3OjUxLCBEYXZlIEdvcmRvbiB3cm90ZToKPiBUaGlzIHBhdGNoIHJlZmFj dG9ycyB0aGUgZHJpdmVyJ3MgaGFuZGxpbmcgYW5kIHRyYWNraW5nIG9mIGRvb3JiZWxscywgaW4K PiBwcmVwYXJhdGlvbiBmb3IgYSBsYXRlciBvbmUgd2hpY2ggd2lsbCByZXNvbHZlIGEgc3VzcGVu ZC1yZXN1bWUgaXNzdWUuCj4KPiBUaGVyZSBhcmUgdGhyZWUgcmVzb3VyY2VzIHRvIGJlIG1hbmFn ZWQ6Cj4gMS4gQ2FjaGVsaW5lczogYSBzaW5nbGUgbGluZSB3aXRoaW4gdGhlIGNsaWVudC1vYmpl Y3QncyBwYWdlIDAKPiAgICAgaXMgc25vb3BlZCBieSBkb29yYmVsbCBoYXJkd2FyZSBmb3Igd3Jp dGVzIGZyb20gdGhlIGhvc3QuCj4gMi4gRG9vcmJlbGwgcmVnaXN0ZXJzOiBlYWNoIGRlZmluZXMg b25lIGNhY2hlbGluZSB0byBiZSBzbm9vcGVkLgo+IDMuIEJpdG1hcDogdHJhY2tzIHdoaWNoIGRv b3JiZWxsIHJlZ2lzdGVycyBhcmUgaW4gdXNlLgo+Cj4gVGhlIGRvb3JiZWxsIHNldHVwL3RlYXJk b3duIHByb3RvY29sIHN0YXJ0cyB3aXRoOgo+IDEuIFBpY2sgYSBjYWNoZWxpbmU6IHNlbGVjdF9k b29yYmVsbF9jYWNoZWxpbmUoKQo+IDIuIEZpbmQgYW4gYXZhaWxhYmxlIGRvb3JiZWxsIHJlZ2lz dGVyOiBhc3NpZ25fZG9vcmJlbGwoKQo+IChUaGVzZSB2YWx1ZXMgYXJlIHBhc3NlZCB0byB0aGUg R3VDIHZpYSB0aGUgc2hhcmVkIGNvbnRleHQKPiBkZXNjcmlwdG9yOyB0aGlzIHBhcnQgb2YgdGhl IHNlcXVlbmNlIHJlbWFpbnMgdW5jaGFuZ2VkKS4KPgo+IDMuIFVwZGF0ZSB0aGUgYml0bWFwIHRv IHJlZmxlY3QgcmVnaXN0ZXJzLWluLXVzZQo+IDQuIFByZXBhcmUgdGhlIGNhY2hlbGluZSBmb3Ig dXNlIGJ5IHNldHRpbmcgaXRzIHN0YXR1cyB0byBFTkFCTEVECj4gNS4gQXNrIHRoZSBHdUMgdG8g cHJvZ3JhbSB0aGUgZG9vcmJlbGwgdG8gc25vb3AgdGhlIGNhY2hlbGluZQo+Cj4gYW5kIG9mIGNv dXJzZSB0ZWFyZG93biBpcyB2ZXJ5IHNpbWlsYXI6Cj4gNi4gU2V0IHRoZSBjYWNoZWxpbmUgdG8g RElTQUJMRUQKPiA3LiBBc2sgdGhlIEd1QyB0byByZXByb2dyYW0gdGhlIGRvb3JiZWxsIHRvIHN0 b3Agc25vb3BpbmcKPiA4LiBSZWNvcmQgdGhhdCB0aGUgZG9vcmJlbGwgaXMgbm90IGluIHVzZS4K Pgo+IE9wZXJhdGlvbnMgNi04IChndWNfZGlzYWJsZV9kb29yYmVsbCgpLCBob3N0Mmd1Y19yZWxl YXNlX2Rvb3JiZWxsKCksIGFuZAo+IHJlbGVhc2VfZG9vcmJlbGwoKSkgd2VyZSBjYWxsZWQgaW4g c2VxdWVuY2UgZnJvbSBndWNfY2xpZW50X2ZyZWUoKSwgYnV0Cj4gYXJlIG5vdyBtb3ZlZCBpbnRv IHRoZSB0ZWFyZG93biBwaGFzZSBvZiB0aGUgY29tbW9uIGZ1bmN0aW9uLgo+Cj4gU3RlcHMgNC01 IChndWNfaW5pdF9kb29yYmVsbCgpIGFuZCBob3N0Mmd1Y19hbGxvY2F0ZV9kb29yYmVsbCgpKSB3 ZXJlCj4gc2ltaWxhcmx5IGRvbmUgYXMgc2VxdWVudGlhbCBzdGVwcyBpbiBndWNfY2xpZW50X2Fs bG9jKCksIGJ1dCBzaW5jZSBpdAo+IHR1cm5zIG91dCB0aGF0IHdlIGRvbid0IG5lZWQgdG8gYmUg YWJsZSB0byBkbyB0aGVtIHNlcGFyYXRlbHkgdGhleSdyZQo+IG5vdyBjb2xsZWN0ZWQgaW50byB0 aGUgc2V0dXAgcGhhc2Ugb2YgdGhlIGNvbW1vbiBmdW5jdGlvbi4KPgo+IFRoZSBvbmx5IG5ldyBj b2RlIChhbmQgbmV3IGNhcGFiaWxpdHkpIGlzIHRoZSBibG9jayB0YWdnZWQKPiAgICAgIC8qIFVw ZGF0ZSB0aGUgR3VDJ3MgaWRlYSBvZiB0aGUgZG9vcmJlbGwgSUQgKi8KPiBpLmUuIHdlIGNhbiBu b3cgKmNoYW5nZSogdGhlIGRvb3JiZWxsIHJlZ2lzdGVyIHVzZWQgYnkgYW4gZXhpc3RpbmcKPiBj bGllbnQsIHdoZXJlYXMgcHJldmlvdXNseSBpdCB3YXMgc2V0IG9uY2UgZm9yIHRoZSBlbnRpcmUg bGlmZXRpbWUKPiBvZiB0aGUgY2xpZW50LiBXZSB3aWxsIHVzZSB0aGlzIG5ldyBmZWF0dXJlIGlu IHRoZSBuZXh0IHBhdGNoLgo+Cj4gdjI6IFRyaXZpYWwgaW5kZXBlbmRlbnQgZml4ZXMgcHVzaGVk IGFoZWFkIGFzIHNlcGFyYXRlIHBhdGNoZXMuCj4gICAgICBNVUNIIGxvbmdlciBjb21taXQgbWVz c2FnZSA6KSBbVHZydGtvIFVyc3VsaW5dCj4KPiBTaWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRvbiA8 ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9ndWNfc3VibWlzc2lvbi5jIHwgOTQgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t Cj4gICAxIGZpbGUgY2hhbmdlZCwgNTMgaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCj4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCj4gaW5kZXggNDVi MzNmOC4uMTgzM2JmZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1 Y19zdWJtaXNzaW9uLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJt aXNzaW9uLmMKPiBAQCAtMTc0LDMxICsxNzQsNTkgQEAgc3RhdGljIGludCBob3N0Mmd1Y19zYW1w bGVfZm9yY2V3YWtlKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPiAgICAqIGNsaWVudCBvYmplY3Qg d2hpY2ggY29udGFpbnMgdGhlIHBhZ2UgYmVpbmcgdXNlZCBmb3IgdGhlIGRvb3JiZWxsCj4gICAg Ki8KPgo+IC1zdGF0aWMgdm9pZCBndWNfaW5pdF9kb29yYmVsbChzdHJ1Y3QgaW50ZWxfZ3VjICpn dWMsCj4gLQkJCSAgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKPiArc3RhdGlj IGludCBndWNfdXBkYXRlX2Rvb3JiZWxsX2lkKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPiArCQkJ CSAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50LAo+ICsJCQkJICB1MTYgbmV3X2lkKQo+ ICAgewo+ICsJc3RydWN0IHNnX3RhYmxlICpzZyA9IGd1Yy0+Y3R4X3Bvb2xfb2JqLT5wYWdlczsK PiArCXZvaWQgKmRvb3JiZWxsX2JpdG1hcCA9IGd1Yy0+ZG9vcmJlbGxfYml0bWFwOwo+ICAgCXN0 cnVjdCBndWNfZG9vcmJlbGxfaW5mbyAqZG9vcmJlbGw7Cj4gKwlzdHJ1Y3QgZ3VjX2NvbnRleHRf ZGVzYyBkZXNjOwo+ICsJc2l6ZV90IGxlbjsKPgo+ICAgCWRvb3JiZWxsID0gY2xpZW50LT5jbGll bnRfYmFzZSArIGNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0Owo+Cj4gLQlkb29yYmVsbC0+ZGJfc3Rh dHVzID0gR1VDX0RPT1JCRUxMX0VOQUJMRUQ7Cj4gKwlpZiAoY2xpZW50LT5kb29yYmVsbF9pZCAh PSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCAmJgo+ICsJICAgIHRlc3RfYml0KGNsaWVudC0+ZG9v cmJlbGxfaWQsIGRvb3JiZWxsX2JpdG1hcCkpIHsKPiArCQkvKiBEZWFjdGl2YXRlIHRoZSBvbGQg ZG9vcmJlbGwgKi8KPiArCQlkb29yYmVsbC0+ZGJfc3RhdHVzID0gR1VDX0RPT1JCRUxMX0RJU0FC TEVEOwo+ICsJCSh2b2lkKWhvc3QyZ3VjX3JlbGVhc2VfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOwo+ ICsJCV9fY2xlYXJfYml0KGNsaWVudC0+ZG9vcmJlbGxfaWQsIGRvb3JiZWxsX2JpdG1hcCk7Cj4g Kwl9Cj4gKwo+ICsJLyogVXBkYXRlIHRoZSBHdUMncyBpZGVhIG9mIHRoZSBkb29yYmVsbCBJRCAq Lwo+ICsJbGVuID0gc2dfcGNvcHlfdG9fYnVmZmVyKHNnLT5zZ2wsIHNnLT5uZW50cywgJmRlc2Ms IHNpemVvZihkZXNjKSwKPiArCQkJICAgICBzaXplb2YoZGVzYykgKiBjbGllbnQtPmN0eF9pbmRl eCk7Cj4gKwlpZiAobGVuICE9IHNpemVvZihkZXNjKSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiAr CWRlc2MuZGJfaWQgPSBuZXdfaWQ7Cj4gKwlsZW4gPSBzZ19wY29weV9mcm9tX2J1ZmZlcihzZy0+ c2dsLCBzZy0+bmVudHMsICZkZXNjLCBzaXplb2YoZGVzYyksCj4gKwkJCSAgICAgc2l6ZW9mKGRl c2MpICogY2xpZW50LT5jdHhfaW5kZXgpOwo+ICsJaWYgKGxlbiAhPSBzaXplb2YoZGVzYykpCj4g KwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJY2xpZW50LT5kb29yYmVsbF9pZCA9IG5ld19pZDsK PiArCWlmIChuZXdfaWQgPT0gR1VDX0lOVkFMSURfRE9PUkJFTExfSUQpCj4gKwkJcmV0dXJuIDA7 Cj4gKwo+ICsJLyogQWN0aXZhdGUgdGhlIG5ldyBkb29yYmVsbCAqLwo+ICsJX19zZXRfYml0KG5l d19pZCwgZG9vcmJlbGxfYml0bWFwKTsKCklzIHRoaXMgdGhlIHNhbWUgYml0IGFzIGluIGFzc2ln bl9kb29yYmVsbCBzbyByZWR1bmRhbnQ/Cgo+ICAgCWRvb3JiZWxsLT5jb29raWUgPSAwOwo+ICsJ ZG9vcmJlbGwtPmRiX3N0YXR1cyA9IEdVQ19ET09SQkVMTF9FTkFCTEVEOwo+ICsJcmV0dXJuIGhv c3QyZ3VjX2FsbG9jYXRlX2Rvb3JiZWxsKGd1YywgY2xpZW50KTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBndWNfaW5pdF9kb29yYmVsbChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gKwkJCSAgICAg IHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCwKPiArCQkJICAgICAgdWludDE2X3QgZGJf aWQpCj4gK3sKPiArCXJldHVybiBndWNfdXBkYXRlX2Rvb3JiZWxsX2lkKGd1YywgY2xpZW50LCBk Yl9pZCk7Cj4gICB9Cj4KPiAgIHN0YXRpYyB2b2lkIGd1Y19kaXNhYmxlX2Rvb3JiZWxsKHN0cnVj dCBpbnRlbF9ndWMgKmd1YywKPiAgIAkJCQkgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50 KQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5 MTUoZ3VjKTsKPiAtCXN0cnVjdCBndWNfZG9vcmJlbGxfaW5mbyAqZG9vcmJlbGw7Cj4gLQlpOTE1 X3JlZ190IGRyYnJlZyA9IEdFTjhfRFJCUkVHTChjbGllbnQtPmRvb3JiZWxsX2lkKTsKPiAtCWlu dCB2YWx1ZTsKPiAtCj4gLQlkb29yYmVsbCA9IGNsaWVudC0+Y2xpZW50X2Jhc2UgKyBjbGllbnQt PmRvb3JiZWxsX29mZnNldDsKPiAtCj4gLQlkb29yYmVsbC0+ZGJfc3RhdHVzID0gR1VDX0RPT1JC RUxMX0RJU0FCTEVEOwo+IC0KPiAtCXZhbHVlID0gSTkxNV9SRUFEKGRyYnJlZyk7Cj4gLQlXQVJO X09OKCh2YWx1ZSAmIEdFTjhfRFJCX1ZBTElEKSAhPSAwKTsKPiArCSh2b2lkKWd1Y191cGRhdGVf ZG9vcmJlbGxfaWQoZ3VjLCBjbGllbnQsIEdVQ19JTlZBTElEX0RPT1JCRUxMX0lEKTsKPgo+ICAg CS8qIFhYWDogd2FpdCBmb3IgYW55IGludGVycnVwdHMgKi8KPiAgIAkvKiBYWFg6IHdhaXQgZm9y IHdvcmtxdWV1ZSB0byBkcmFpbiAqLwo+IEBAIC0yNTQsMTEgKzI4Miw2IEBAIHN0YXRpYyB1aW50 MTZfdCBhc3NpZ25fZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1aW50MzJfdCBwcmlv cml0eSkKPiAgIAlyZXR1cm4gaWQ7Cj4gICB9Cj4KPiAtc3RhdGljIHZvaWQgcmVsZWFzZV9kb29y YmVsbChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHVpbnQxNl90IGlkKQo+IC17Cj4gLQlfX2NsZWFy X2JpdChpZCwgZ3VjLT5kb29yYmVsbF9iaXRtYXApOwo+IC19Cj4gLQo+ICAgLyoKPiAgICAqIElu aXRpYWxpc2UgdGhlIHByb2Nlc3MgZGVzY3JpcHRvciBzaGFyZWQgd2l0aCB0aGUgR3VDIGZpcm13 YXJlLgo+ICAgICovCj4gQEAgLTY1MiwyMSArNjc1LDExIEBAIHN0YXRpYyB2b2lkIGd1Y19jbGll bnRfZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCSAqLwo+Cj4gICAJaWYgKGNsaWVu dC0+Y2xpZW50X2Jhc2UpIHsKPiAtCQl1aW50MTZfdCBkYl9pZCA9IGNsaWVudC0+ZG9vcmJlbGxf aWQ7Cj4gLQo+ICAgCQkvKgo+IC0JCSAqIElmIHdlIGdvdCBhcyBmYXIgYXMgc2V0dGluZyB1cCBh IGRvb3JiZWxsLCBtYWtlIHN1cmUKPiAtCQkgKiB3ZSBzaHV0IGl0IGRvd24gYmVmb3JlIHVubWFw cGluZyAmIGRlYWxsb2NhdGluZyB0aGUKPiAtCQkgKiBtZW1vcnkuIFNvIGZpcnN0IGRpc2FibGUg dGhlIGRvb3JiZWxsLCB0aGVuIHRlbGwgdGhlCj4gLQkJICogR3VDIHRoYXQgd2UndmUgZmluaXNo ZWQgd2l0aCBpdCwgZmluYWxseSBkZWFsbG9jYXRlCj4gLQkJICogaXQgaW4gb3VyIGJpdG1hcAo+ ICsJCSAqIElmIHdlIGdvdCBhcyBmYXIgYXMgc2V0dGluZyB1cCBhIGRvb3JiZWxsLCBtYWtlIHN1 cmUgd2UKPiArCQkgKiBzaHV0IGl0IGRvd24gYmVmb3JlIHVubWFwcGluZyAmIGRlYWxsb2NhdGlu ZyB0aGUgbWVtb3J5Lgo+ICAgCQkgKi8KPiAtCQlpZiAoZGJfaWQgIT0gR1VDX0lOVkFMSURfRE9P UkJFTExfSUQpIHsKPiAtCQkJZ3VjX2Rpc2FibGVfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOwo+IC0J CQlpZiAodGVzdF9iaXQoZGJfaWQsIGd1Yy0+ZG9vcmJlbGxfYml0bWFwKSkKPiAtCQkJCWhvc3Qy Z3VjX3JlbGVhc2VfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOwo+IC0JCQlyZWxlYXNlX2Rvb3JiZWxs KGd1YywgZGJfaWQpOwo+IC0JCX0KPiArCQlndWNfZGlzYWJsZV9kb29yYmVsbChndWMsIGNsaWVu dCk7Cj4KPiAgIAkJa3VubWFwKGttYXBfdG9fcGFnZShjbGllbnQtPmNsaWVudF9iYXNlKSk7Cj4g ICAJfQo+IEBAIC03MDEsNiArNzE0LDcgQEAgc3RhdGljIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQg Kmd1Y19jbGllbnRfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICAgCXN0cnVjdCBp bnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7Cj4gKwl1aW50MTZfdCBkYl9pZDsKPgo+ICAgCWNsaWVudCA9IGt6YWxsb2Mo c2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKPiAgIAlpZiAoIWNsaWVudCkKPiBAQCAtNzQx LDIyICs3NTUsMjAgQEAgc3RhdGljIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmd1Y19jbGllbnRf YWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgIAllbHNlCj4gICAJCWNsaWVudC0+cHJv Y19kZXNjX29mZnNldCA9IChHVUNfREJfU0laRSAvIDIpOwo+Cj4gLQljbGllbnQtPmRvb3JiZWxs X2lkID0gYXNzaWduX2Rvb3JiZWxsKGd1YywgY2xpZW50LT5wcmlvcml0eSk7Cj4gLQlpZiAoY2xp ZW50LT5kb29yYmVsbF9pZCA9PSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCkKPiArCWRiX2lkID0g YXNzaWduX2Rvb3JiZWxsKGd1YywgY2xpZW50LT5wcmlvcml0eSk7Cj4gKwlpZiAoZGJfaWQgPT0g R1VDX0lOVkFMSURfRE9PUkJFTExfSUQpCj4gICAJCS8qIFhYWDogZXZpY3QgYSBkb29yYmVsbCBp bnN0ZWFkICovCj4gICAJCWdvdG8gZXJyOwo+Cj4gICAJZ3VjX2luaXRfcHJvY19kZXNjKGd1Yywg Y2xpZW50KTsKPiAgIAlndWNfaW5pdF9jdHhfZGVzYyhndWMsIGNsaWVudCk7Cj4gLQlndWNfaW5p dF9kb29yYmVsbChndWMsIGNsaWVudCk7Cj4gLQo+IC0JLyogWFhYOiBBbnkgY2FjaGUgZmx1c2hl cyBuZWVkZWQ/IEdlbmVyYWwgZG9tYWluIG1nbXQgY2FsbHM/ICovCj4gLQo+IC0JaWYgKGhvc3Qy Z3VjX2FsbG9jYXRlX2Rvb3JiZWxsKGd1YywgY2xpZW50KSkKPiArCWlmIChndWNfaW5pdF9kb29y YmVsbChndWMsIGNsaWVudCwgZGJfaWQpKQo+ICAgCQlnb3RvIGVycjsKPgo+IC0JRFJNX0RFQlVH X0RSSVZFUigibmV3IHByaW9yaXR5ICV1IGNsaWVudCAlcDogY3R4X2luZGV4ICV1IGRiX2lkICV1 XG4iLAo+IC0JCXByaW9yaXR5LCBjbGllbnQsIGNsaWVudC0+Y3R4X2luZGV4LCBjbGllbnQtPmRv b3JiZWxsX2lkKTsKPiArCURSTV9ERUJVR19EUklWRVIoIm5ldyBwcmlvcml0eSAldSBjbGllbnQg JXA6IGN0eF9pbmRleCAldVxuIiwKPiArCQlwcmlvcml0eSwgY2xpZW50LCBjbGllbnQtPmN0eF9p bmRleCk7Cj4gKwlEUk1fREVCVUdfRFJJVkVSKCJkb29yYmVsbCBpZCAldSwgY2FjaGVsaW5lIG9m ZnNldCAweCV4XG4iLAo+ICsJCWNsaWVudC0+ZG9vcmJlbGxfaWQsIGNsaWVudC0+ZG9vcmJlbGxf b2Zmc2V0KTsKPgo+ICAgCXJldHVybiBjbGllbnQ7Cj4KPgoKT3RoZXJ3aXNlIGxvb2tzIGdvb2Qg dG8gbWUsIG11Y2ggbW9yZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIApoYXBwZW5pbmcg bm93LgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK