From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 04/38] drm/i915: Use HW semaphores for inter-engine synchronisation on gen8+ Date: Fri, 1 Mar 2019 15:11:25 +0000 Message-ID: <205aa1c0-2c5e-258d-9f26-b1137db87248@linux.intel.com> References: <20190301140404.26690-1-chris@chris-wilson.co.uk> <20190301140404.26690-4-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id BC42B899DE for ; Fri, 1 Mar 2019 15:11:27 +0000 (UTC) In-Reply-To: <20190301140404.26690-4-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDAxLzAzLzIwMTkgMTQ6MDMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBIYXZpbmcgaW50cm9k dWNlZCBwZXItY29udGV4dCBzZXFubywgd2Ugbm93IGhhdmUgYSBtZWFucyB0byBpZGVudGl0eQo+ IHByb2dyZXNzIGFjcm9zcyB0aGUgc3lzdGVtIHdpdGhvdXQgZmVlbCBvZiByb2xsYmFjayBhcyBi ZWZlbGwgdGhlCj4gZ2xvYmFsX3NlcW5vLiBUaGF0IGlzIHdlIGNhbiBwcm9ncmFtIGEgTUlfU0VN QVBIT1JFX1dBSVQgb3BlcmF0aW9uIGluCj4gYWR2YW5jZSBvZiBzdWJtaXNzaW9uIHNhZmUgaW4g dGhlIGtub3dsZWRnZSB0aGF0IG91ciB0YXJnZXQgc2Vxbm8gYW5kCj4gYWRkcmVzcyBpcyBzdGFi bGUuCj4gCj4gSG93ZXZlciwgc2luY2Ugd2UgYXJlIHRlbGxpbmcgdGhlIEdQVSB0byBidXN5LXNw aW4gb24gdGhlIHRhcmdldCBhZGRyZXNzCj4gdW50aWwgaXQgbWF0Y2hlcyB0aGUgc2lnbmFsaW5n IHNlcW5vLCB3ZSBvbmx5IHdhbnQgdG8gZG8gc28gd2hlbiB3ZSBhcmUKPiBzdXJlIHRoYXQgYnVz eS1zcGluIHdpbGwgYmUgY29tcGxldGVkIHF1aWNrbHkuIFRvIGFjaGlldmUgdGhpcyB3ZSBvbmx5 Cj4gc3VibWl0IHRoZSByZXF1ZXN0IHRvIEhXIG9uY2UgdGhlIHNpZ25hbGVyIGlzIGl0c2VsZiBl eGVjdXRpbmcgKG1vZHVsbwo+IHByZWVtcHRpb24gY2F1c2luZyB1cyB0byB3YWl0IGxvbmdlciks IGFuZCB3ZSBvbmx5IGRvIHNvIGZvciBkZWZhdWx0IGFuZAo+IGFib3ZlIHByaW9yaXR5IHJlcXVl c3RzIChzbyB0aGF0IGlkbGUgcHJpb3JpdHkgdGFza3MgbmV2ZXIgdGhlbXNlbHZlcwo+IGhvZyB0 aGUgR1BVIHdhaXRpbmcgZm9yIG90aGVycykuCj4gCj4gQXMgbWlnaHQgYmUgcmVhc29uYWJseSBl eHBlY3RlZCwgSFcgc2VtYXBob3JlcyBleGNlbCBpbiBpbnRlci1lbmdpbmUKPiBzeW5jaHJvbmlz YXRpb24gbWljcm9iZW5jaG1hcmtzICh3aGVyZSB0aGUgM3ggcmVkdWNlZCBsYXRlbmN5IC8gaW5j cmVhc2VkCj4gdGhyb3VnaHB1dCBtb3JlIHRoYW4gb2Zmc2V0IHRoZSBwb3dlciBjb3N0IG9mIHNw aW5uaW5nIG9uIGEgc2Vjb25kIHJpbmcpCj4gYW5kIGhhdmUgc2lnbmlmaWNhbnQgaW1wcm92ZW1l bnQgKGNhbiBiZSB1cCB0byB+MTAlLCBtb3N0IHNlZSBubyBjaGFuZ2UpCj4gZm9yIHNpbmdsZSBj bGllbnRzIHRoYXQgdXRpbGl6ZSBtdWx0aXBsZSBlbmdpbmVzICh0eXBpY2FsbHkgbWVkaWEgcGxh eWVycwo+IGFuZCB0cmFuc2NvZGVycyksIHdpdGhvdXQgcmVncmVzc2luZyBtdWx0aXBsZSBjbGll bnRzIHRoYXQgY2FuIHNhdHVyYXRlCj4gdGhlIHN5c3RlbSBvciBjaGFuZ2luZyB0aGUgcG93ZXIg ZW52ZWxvcGUgZHJhbWF0aWNhbGx5Lgo+IAo+IHYzOiBEcm9wIHRoZSBvbGRlciBORVEgYnJhbmNo LCBub3cgd2UgcGluIHRoZSBzaWduYWxlcidzIEhXU1AgYW55d2F5Lgo+IHY0OiBUZWxsIHRoZSB3 b3JsZCBhbmQgaW5jbHVkZSBpdCBhcyBwYXJ0IG9mIHNjaGVkdWxlciBjYXBzLgo+IAo+IFRlc3Rj YXNlOiBpZ3QvZ2VtX2V4ZWNfd2hpc3Blcgo+IFRlc3RjYXNlOiBpZ3QvYmVuY2htYXJrcy9nZW1f d3NpbQo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IC0t LQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgICAgfCAgIDIgKy0K PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgIHwgMTM4ICsrKysr KysrKysrKysrKysrKysrKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5o ICAgICAgIHwgICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3dfZmVuY2UuYyAg ICAgIHwgICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N3X2ZlbmNlLmggICAg ICB8ICAgMyArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyAgICB8 ICAgMSArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ncHVfY29tbWFuZHMuaCB8ICAg OSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgICAgICAgICAgfCAgIDEg Kwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oICAgfCAgIDcgKysK PiAgIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICAgIHwgICAxICsKPiAg IDEwIGZpbGVzIGNoYW5nZWQsIDE2MCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQo+IAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IGluZGV4IGM2MzU0ZjZjZGJkYi4uYzA4YWJkZWY1ZWI2 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gQEAgLTM1MSw3ICszNTEsNyBAQCBzdGF0 aWMgaW50IGk5MTVfZ2V0cGFyYW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKPiAgIAkJdmFsdWUgPSBtaW5fdChpbnQsIElOVEVMX1BQR1RUKGRldl9wcml2KSwgSTkx NV9HRU1fUFBHVFRfRlVMTCk7Cj4gICAJCWJyZWFrOwo+ICAgCWNhc2UgSTkxNV9QQVJBTV9IQVNf U0VNQVBIT1JFUzoKPiAtCQl2YWx1ZSA9IDA7Cj4gKwkJdmFsdWUgPSAhIShkZXZfcHJpdi0+Y2Fw cy5zY2hlZHVsZXIgJiBJOTE1X1NDSEVEVUxFUl9DQVBfU0VNQVBIT1JFUyk7Cj4gICAJCWJyZWFr Owo+ICAgCWNhc2UgSTkxNV9QQVJBTV9IQVNfU0VDVVJFX0JBVENIRVM6Cj4gICAJCXZhbHVlID0g Y2FwYWJsZShDQVBfU1lTX0FETUlOKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZXF1ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+ IGluZGV4IGQzNTQ5NjdkNmFlOC4uNTllMzBiOGM0ZWU5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZXF1ZXN0LmMKPiBAQCAtMjIsOCArMjIsOSBAQAo+ICAgICoKPiAgICAqLwo+ICAgCj4g LSNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2RtYS1mZW5j ZS1hcnJheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvaXJxX3dvcmsuaD4KPiArI2luY2x1ZGUgPGxp bnV4L3ByZWZldGNoLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KPiAgICNpbmNsdWRl IDxsaW51eC9zY2hlZC9jbG9jay5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkL3NpZ25hbC5o Pgo+IEBAIC0zMiw5ICszMywxNiBAQAo+ICAgI2luY2x1ZGUgImk5MTVfYWN0aXZlLmgiCj4gICAj aW5jbHVkZSAiaTkxNV9yZXNldC5oIgo+ICAgCj4gK3N0cnVjdCBleGVjdXRlX2NiIHsKPiArCXN0 cnVjdCBsaXN0X2hlYWQgbGluazsKPiArCXN0cnVjdCBpcnFfd29yayB3b3JrOwo+ICsJc3RydWN0 IGk5MTVfc3dfZmVuY2UgKmZlbmNlOwo+ICt9Owo+ICsKPiAgIHN0YXRpYyBzdHJ1Y3QgaTkxNV9n bG9iYWxfcmVxdWVzdCB7Cj4gICAJc3RydWN0IGttZW1fY2FjaGUgKnNsYWJfcmVxdWVzdHM7Cj4g ICAJc3RydWN0IGttZW1fY2FjaGUgKnNsYWJfZGVwZW5kZW5jaWVzOwo+ICsJc3RydWN0IGttZW1f Y2FjaGUgKnNsYWJfZXhlY3V0ZV9jYnM7Cj4gICB9IGdsb2JhbDsKPiAgIAo+ICAgc3RhdGljIGNv bnN0IGNoYXIgKmk5MTVfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZl bmNlKQo+IEBAIC0zMjUsNiArMzMzLDY5IEBAIHZvaWQgaTkxNV9yZXF1ZXN0X3JldGlyZV91cHRv KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICAgCX0gd2hpbGUgKHRtcCAhPSBycSk7Cj4gICB9 Cj4gICAKPiArc3RhdGljIHZvaWQgaXJxX2V4ZWN1dGVfY2Ioc3RydWN0IGlycV93b3JrICp3cmsp Cj4gK3sKPiArCXN0cnVjdCBleGVjdXRlX2NiICpjYiA9IGNvbnRhaW5lcl9vZih3cmssIHR5cGVv ZigqY2IpLCB3b3JrKTsKPiArCj4gKwlpOTE1X3N3X2ZlbmNlX2NvbXBsZXRlKGNiLT5mZW5jZSk7 Cj4gKwlrbWVtX2NhY2hlX2ZyZWUoZ2xvYmFsLnNsYWJfZXhlY3V0ZV9jYnMsIGNiKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgX19ub3RpZnlfZXhlY3V0ZV9jYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSkKPiArewo+ICsJc3RydWN0IGV4ZWN1dGVfY2IgKmNiOwo+ICsKPiArCWxvY2tkZXBfYXNz ZXJ0X2hlbGQoJnJxLT5sb2NrKTsKPiArCj4gKwlpZiAobGlzdF9lbXB0eSgmcnEtPmV4ZWN1dGVf Y2IpKQo+ICsJCXJldHVybjsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNiLCAmcnEtPmV4 ZWN1dGVfY2IsIGxpbmspCj4gKwkJaXJxX3dvcmtfcXVldWUoJmNiLT53b3JrKTsKPiArCj4gKwkv Kgo+ICsJICogWFhYIFJvbGxiYWNrIG9uIF9faTkxNV9yZXF1ZXN0X3Vuc3VibWl0KCkKPiArCSAq Cj4gKwkgKiBJbiB0aGUgZnV0dXJlLCBwZXJoYXBzIHdoZW4gd2UgaGF2ZSBhbiBhY3RpdmUgdGlt ZS1zbGljaW5nIHNjaGVkdWxlciwKPiArCSAqIGl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gdW5z dWJtaXQgcGFyYWxsZWwgZXhlY3V0aW9uIGFuZCByZW1vdmUKPiArCSAqIGJ1c3l3YWl0cyBmcm9t IHRoZSBHUFUgdW50aWwgdGhlaXIgbWFzdGVyIGlzIHJlc3RhcnRlZC4gVGhpcyBpcwo+ICsJICog cXVpdGUgaGFpcnksIHdlIGhhdmUgdG8gY2FyZWZ1bGx5IHJvbGxiYWNrIHRoZSBmZW5jZSBhbmQg ZG8gYQo+ICsJICogcHJlZW1wdC10by1pZGxlIGN5Y2xlIG9uIHRoZSB0YXJnZXQgZW5naW5lLCBh bGwgdGhlIHdoaWxlIHRoZQo+ICsJICogbWFzdGVyIGV4ZWN1dGVfY2IgbWF5IHJlZmlyZS4KPiAr CSAqLwo+ICsJSU5JVF9MSVNUX0hFQUQoJnJxLT5leGVjdXRlX2NiKTsKPiArfQo+ICsKPiArc3Rh dGljIGludAo+ICtpOTE1X3JlcXVlc3RfYXdhaXRfZXhlY3V0aW9uKHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJxLAo+ICsJCQkgICAgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnNpZ25hbCwKPiArCQkJICAg ICBnZnBfdCBnZnApCj4gK3sKPiArCXN0cnVjdCBleGVjdXRlX2NiICpjYjsKPiArCj4gKwlpZiAo aTkxNV9yZXF1ZXN0X2lzX2FjdGl2ZShzaWduYWwpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWNi ID0ga21lbV9jYWNoZV9hbGxvYyhnbG9iYWwuc2xhYl9leGVjdXRlX2NicywgZ2ZwKTsKPiArCWlm ICghY2IpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJY2ItPmZlbmNlID0gJnJxLT5zdWJt aXQ7Cj4gKwlpOTE1X3N3X2ZlbmNlX2F3YWl0KGNiLT5mZW5jZSk7Cj4gKwlpbml0X2lycV93b3Jr KCZjYi0+d29yaywgaXJxX2V4ZWN1dGVfY2IpOwo+ICsKPiArCXNwaW5fbG9ja19pcnEoJnNpZ25h bC0+bG9jayk7Cj4gKwlpZiAoaTkxNV9yZXF1ZXN0X2lzX2FjdGl2ZShzaWduYWwpKSB7Cj4gKwkJ aTkxNV9zd19mZW5jZV9jb21wbGV0ZShjYi0+ZmVuY2UpOwo+ICsJCWttZW1fY2FjaGVfZnJlZShn bG9iYWwuc2xhYl9leGVjdXRlX2NicywgY2IpOwo+ICsJfSBlbHNlIHsKPiArCQlsaXN0X2FkZF90 YWlsKCZjYi0+bGluaywgJnNpZ25hbC0+ZXhlY3V0ZV9jYik7Cj4gKwl9Cj4gKwlzcGluX3VubG9j a19pcnEoJnNpZ25hbC0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gICBzdGF0 aWMgdm9pZCBtb3ZlX3RvX3RpbWVsaW5lKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsCj4g ICAJCQkgICAgIHN0cnVjdCBpOTE1X3RpbWVsaW5lICp0aW1lbGluZSkKPiAgIHsKPiBAQCAtMzYx LDYgKzQzMiw4IEBAIHZvaWQgX19pOTE1X3JlcXVlc3Rfc3VibWl0KHN0cnVjdCBpOTE1X3JlcXVl c3QgKnJlcXVlc3QpCj4gICAJICAgICFpOTE1X3JlcXVlc3RfZW5hYmxlX2JyZWFkY3J1bWIocmVx dWVzdCkpCj4gICAJCWludGVsX2VuZ2luZV9xdWV1ZV9icmVhZGNydW1icyhlbmdpbmUpOwo+ICAg Cj4gKwlfX25vdGlmeV9leGVjdXRlX2NiKHJlcXVlc3QpOwo+ICsKPiAgIAlzcGluX3VubG9jaygm cmVxdWVzdC0+bG9jayk7Cj4gICAKPiAgIAllbmdpbmUtPmVtaXRfZmluaV9icmVhZGNydW1iKHJl cXVlc3QsCj4gQEAgLTYwOCw2ICs2ODEsNyBAQCBpOTE1X3JlcXVlc3RfYWxsb2Moc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAg CX0KPiAgIAo+ICAgCUlOSVRfTElTVF9IRUFEKCZycS0+YWN0aXZlX2xpc3QpOwo+ICsJSU5JVF9M SVNUX0hFQUQoJnJxLT5leGVjdXRlX2NiKTsKPiAgIAo+ICAgCXRsID0gY2UtPnJpbmctPnRpbWVs aW5lOwo+ICAgCXJldCA9IGk5MTVfdGltZWxpbmVfZ2V0X3NlcW5vKHRsLCBycSwgJnNlcW5vKTsK PiBAQCAtNjk2LDYgKzc3MCw1MiBAQCBpOTE1X3JlcXVlc3RfYWxsb2Moc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgCXJldHVy biBFUlJfUFRSKHJldCk7Cj4gICB9Cj4gICAKPiArc3RhdGljIGludAo+ICtlbWl0X3NlbWFwaG9y ZV93YWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnRvLAo+ICsJCSAgICBzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpmcm9tLAo+ICsJCSAgICBnZnBfdCBnZnApCj4gK3sKPiArCXUzMiBod3NwX29mZnNldDsK PiArCXUzMiAqY3M7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCUdFTV9CVUdfT04oIWZyb20tPnRpbWVs aW5lLT5oYXNfaW5pdGlhbF9icmVhZGNydW1iKTsKPiArCUdFTV9CVUdfT04oSU5URUxfR0VOKHRv LT5pOTE1KSA8IDgpOwo+ICsKPiArCS8qIFdlIG5lZWQgdG8gcGluIHRoZSBzaWduYWxlcidzIEhX U1AgdW50aWwgd2UgYXJlIGZpbmlzaGVkIHJlYWRpbmcuICovCj4gKwllcnIgPSBpOTE1X3RpbWVs aW5lX3JlYWRfaHdzcChmcm9tLCB0bywgJmh3c3Bfb2Zmc2V0KTsKPiArCWlmIChlcnIpCj4gKwkJ cmV0dXJuIGVycjsKPiArCj4gKwkvKiBPbmx5IHN1Ym1pdCBvdXIgc3Bpbm5lciBhZnRlciB0aGUg c2lnbmFsZXIgaXMgcnVubmluZyEgKi8KPiArCWVyciA9IGk5MTVfcmVxdWVzdF9hd2FpdF9leGVj dXRpb24odG8sIGZyb20sIGdmcCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ ICsJY3MgPSBpbnRlbF9yaW5nX2JlZ2luKHRvLCA0KTsKPiArCWlmIChJU19FUlIoY3MpKQo+ICsJ CXJldHVybiBQVFJfRVJSKGNzKTsKPiArCj4gKwkvKgo+ICsJICogVXNpbmcgZ3JlYXRlci10aGFu LW9yLWVxdWFsIGhlcmUgbWVhbnMgd2UgaGF2ZSB0byB3b3JyeQo+ICsJICogYWJvdXQgc2Vxbm8g d3JhcGFyb3VuZC4gVG8gc2lkZSBzdGVwIHRoYXQgaXNzdWUsIHdlIHN3YXAKPiArCSAqIHRoZSB0 aW1lbGluZSBIV1NQIHVwb24gd3JhcHBpbmcsIHNvIHRoYXQgZXZlcnlvbmUgbGlzdGVuaW5nCj4g KwkgKiBmb3IgdGhlIG9sZCAocHJlLXdyYXApIHZhbHVlcyBkbyBub3Qgc2VlIHRoZSBtdWNoIHNt YWxsZXIKPiArCSAqIChwb3N0LXdyYXApIHZhbHVlcyB0aGFuIHRoZXkgd2VyZSBleHBlY3Rpbmcg KGFuZCBzbyB3YWl0Cj4gKwkgKiBmb3JldmVyKS4KPiArCSAqLwo+ICsJKmNzKysgPSBNSV9TRU1B UEhPUkVfV0FJVCB8Cj4gKwkJTUlfU0VNQVBIT1JFX0dMT0JBTF9HVFQgfAo+ICsJCU1JX1NFTUFQ SE9SRV9QT0xMIHwKPiArCQlNSV9TRU1BUEhPUkVfU0FEX0dURV9TREQ7Cj4gKwkqY3MrKyA9IGZy b20tPmZlbmNlLnNlcW5vOwo+ICsJKmNzKysgPSBod3NwX29mZnNldDsKPiArCSpjcysrID0gMDsK PiArCj4gKwlpbnRlbF9yaW5nX2FkdmFuY2UodG8sIGNzKTsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICAgc3RhdGljIGludAo+ICAgaTkxNV9yZXF1ZXN0X2F3YWl0X3JlcXVlc3Qoc3RydWN0IGk5 MTVfcmVxdWVzdCAqdG8sIHN0cnVjdCBpOTE1X3JlcXVlc3QgKmZyb20pCj4gICB7Cj4gQEAgLTcx Nyw2ICs4MzcsOSBAQCBpOTE1X3JlcXVlc3RfYXdhaXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICp0bywgc3RydWN0IGk5MTVfcmVxdWVzdCAqZnJvbSkKPiAgIAkJcmV0ID0gaTkxNV9zd19m ZW5jZV9hd2FpdF9zd19mZW5jZV9nZnAoJnRvLT5zdWJtaXQsCj4gICAJCQkJCQkgICAgICAgJmZy b20tPnN1Ym1pdCwKPiAgIAkJCQkJCSAgICAgICBJOTE1X0ZFTkNFX0dGUCk7Cj4gKwl9IGVsc2Ug aWYgKGludGVsX2VuZ2luZV9oYXNfc2VtYXBob3Jlcyh0by0+ZW5naW5lKSAmJgo+ICsJCSAgIHRv LT5nZW1fY29udGV4dC0+c2NoZWQucHJpb3JpdHkgPj0gSTkxNV9QUklPUklUWV9OT1JNQUwpIHsK PiArCQlyZXQgPSBlbWl0X3NlbWFwaG9yZV93YWl0KHRvLCBmcm9tLCBJOTE1X0ZFTkNFX0dGUCk7 Cj4gICAJfSBlbHNlIHsKPiAgIAkJcmV0ID0gaTkxNV9zd19mZW5jZV9hd2FpdF9kbWFfZmVuY2Uo JnRvLT5zdWJtaXQsCj4gICAJCQkJCQkgICAgJmZyb20tPmZlbmNlLCAwLAo+IEBAIC0xMjA4LDE0 ICsxMzMxLDIzIEBAIGludCBfX2luaXQgaTkxNV9nbG9iYWxfcmVxdWVzdF9pbml0KHZvaWQpCj4g ICAJaWYgKCFnbG9iYWwuc2xhYl9yZXF1ZXN0cykKPiAgIAkJcmV0dXJuIC1FTk9NRU07Cj4gICAK PiArCWdsb2JhbC5zbGFiX2V4ZWN1dGVfY2JzID0gS01FTV9DQUNIRShleGVjdXRlX2NiLAo+ICsJ CQkJCSAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOIHwKPiArCQkJCQkgICAgIFNMQUJfUkVDTEFJTV9B Q0NPVU5UIHwKPiArCQkJCQkgICAgIFNMQUJfVFlQRVNBRkVfQllfUkNVKTsKPiArCWlmICghZ2xv YmFsLnNsYWJfZXhlY3V0ZV9jYnMpCj4gKwkJZ290byBlcnJfcmVxdWVzdHM7Cj4gKwo+ICAgCWds b2JhbC5zbGFiX2RlcGVuZGVuY2llcyA9IEtNRU1fQ0FDSEUoaTkxNV9kZXBlbmRlbmN5LAo+ICAg CQkJCQkgICAgICBTTEFCX0hXQ0FDSEVfQUxJR04gfAo+ICAgCQkJCQkgICAgICBTTEFCX1JFQ0xB SU1fQUNDT1VOVCk7Cj4gICAJaWYgKCFnbG9iYWwuc2xhYl9kZXBlbmRlbmNpZXMpCj4gLQkJZ290 byBlcnJfcmVxdWVzdHM7Cj4gKwkJZ290byBlcnJfZXhlY3V0ZV9jYnM7Cj4gICAKPiAgIAlyZXR1 cm4gMDsKPiAgIAo+ICtlcnJfZXhlY3V0ZV9jYnM6Cj4gKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2xv YmFsLnNsYWJfZXhlY3V0ZV9jYnMpOwo+ICAgZXJyX3JlcXVlc3RzOgo+ICAgCWttZW1fY2FjaGVf ZGVzdHJveShnbG9iYWwuc2xhYl9yZXF1ZXN0cyk7Cj4gICAJcmV0dXJuIC1FTk9NRU07Cj4gQEAg LTEyMjQsMTEgKzEzNTYsMTMgQEAgaW50IF9faW5pdCBpOTE1X2dsb2JhbF9yZXF1ZXN0X2luaXQo dm9pZCkKPiAgIHZvaWQgaTkxNV9nbG9iYWxfcmVxdWVzdF9zaHJpbmsodm9pZCkKPiAgIHsKPiAg IAlrbWVtX2NhY2hlX3NocmluayhnbG9iYWwuc2xhYl9kZXBlbmRlbmNpZXMpOwo+ICsJa21lbV9j YWNoZV9zaHJpbmsoZ2xvYmFsLnNsYWJfZXhlY3V0ZV9jYnMpOwo+ICAgCWttZW1fY2FjaGVfc2hy aW5rKGdsb2JhbC5zbGFiX3JlcXVlc3RzKTsKPiAgIH0KPiAgIAo+ICAgdm9pZCBpOTE1X2dsb2Jh bF9yZXF1ZXN0X2V4aXQodm9pZCkKPiAgIHsKPiAgIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2xvYmFs LnNsYWJfZGVwZW5kZW5jaWVzKTsKPiArCWttZW1fY2FjaGVfZGVzdHJveShnbG9iYWwuc2xhYl9l eGVjdXRlX2Nicyk7Cj4gICAJa21lbV9jYWNoZV9kZXN0cm95KGdsb2JhbC5zbGFiX3JlcXVlc3Rz KTsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaAo+IGluZGV4IGVhMWU2ZjBh ZGU1My4uM2UwZDYyZDM1MjI2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVxdWVzdC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmgK PiBAQCAtMTI5LDYgKzEyOSw3IEBAIHN0cnVjdCBpOTE1X3JlcXVlc3Qgewo+ICAgCSAqLwo+ICAg CXN0cnVjdCBpOTE1X3N3X2ZlbmNlIHN1Ym1pdDsKPiAgIAl3YWl0X3F1ZXVlX2VudHJ5X3Qgc3Vi bWl0cTsKPiArCXN0cnVjdCBsaXN0X2hlYWQgZXhlY3V0ZV9jYjsKPiAgIAo+ICAgCS8qCj4gICAJ ICogQSBsaXN0IG9mIGV2ZXJ5b25lIHdlIHdhaXQgdXBvbiwgYW5kIGV2ZXJ5b25lIHdobyB3YWl0 cyB1cG9uIHVzLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N3X2Zl bmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N3X2ZlbmNlLmMKPiBpbmRleCA3YzU4 YjA0OWVjYjUuLjhkMTQwMGQzNzhkNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3N3X2ZlbmNlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N3X2Zl bmNlLmMKPiBAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lkIF9faTkxNV9zd19mZW5jZV9j b21wbGV0ZShzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UsCj4gICAJX19pOTE1X3N3X2ZlbmNl X25vdGlmeShmZW5jZSwgRkVOQ0VfRlJFRSk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgaTkx NV9zd19mZW5jZV9jb21wbGV0ZShzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UpCj4gK3ZvaWQg aTkxNV9zd19mZW5jZV9jb21wbGV0ZShzdHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UpCj4gICB7 Cj4gICAJZGVidWdfZmVuY2VfYXNzZXJ0KGZlbmNlKTsKPiAgIAo+IEBAIC0yMDIsNyArMjAyLDcg QEAgc3RhdGljIHZvaWQgaTkxNV9zd19mZW5jZV9jb21wbGV0ZShzdHJ1Y3QgaTkxNV9zd19mZW5j ZSAqZmVuY2UpCj4gICAJX19pOTE1X3N3X2ZlbmNlX2NvbXBsZXRlKGZlbmNlLCBOVUxMKTsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBpOTE1X3N3X2ZlbmNlX2F3YWl0KHN0cnVjdCBpOTE1X3N3 X2ZlbmNlICpmZW5jZSkKPiArdm9pZCBpOTE1X3N3X2ZlbmNlX2F3YWl0KHN0cnVjdCBpOTE1X3N3 X2ZlbmNlICpmZW5jZSkKPiAgIHsKPiAgIAlkZWJ1Z19mZW5jZV9hc3NlcnQoZmVuY2UpOwo+ICAg CVdBUk5fT04oYXRvbWljX2luY19yZXR1cm4oJmZlbmNlLT5wZW5kaW5nKSA8PSAxKTsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zd19mZW5jZS5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9zd19mZW5jZS5oCj4gaW5kZXggMGUwNTVlYTAxNzlmLi42ZGVjOWUx ZDExMDIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zd19mZW5jZS5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zd19mZW5jZS5oCj4gQEAgLTc5LDYg Kzc5LDkgQEAgaW50IGk5MTVfc3dfZmVuY2VfYXdhaXRfcmVzZXJ2YXRpb24oc3RydWN0IGk5MTVf c3dfZmVuY2UgKmZlbmNlLAo+ICAgCQkJCSAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQsCj4gICAJ CQkJICAgIGdmcF90IGdmcCk7Cj4gICAKPiArdm9pZCBpOTE1X3N3X2ZlbmNlX2F3YWl0KHN0cnVj dCBpOTE1X3N3X2ZlbmNlICpmZW5jZSk7Cj4gK3ZvaWQgaTkxNV9zd19mZW5jZV9jb21wbGV0ZShz dHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UpOwo+ICsKPiAgIHN0YXRpYyBpbmxpbmUgYm9vbCBp OTE1X3N3X2ZlbmNlX3NpZ25hbGVkKGNvbnN0IHN0cnVjdCBpOTE1X3N3X2ZlbmNlICpmZW5jZSkK PiAgIHsKPiAgIAlyZXR1cm4gYXRvbWljX3JlYWQoJmZlbmNlLT5wZW5kaW5nKSA8PSAwOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jCj4gaW5kZXggZGY4Zjg4MTQyZjFkLi40 ZmM3ZTJhYzYyNzggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5n aW5lX2NzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwo+ IEBAIC02MTYsNiArNjE2LDcgQEAgdm9pZCBpbnRlbF9lbmdpbmVzX3NldF9zY2hlZHVsZXJfY2Fw cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAl9IG1hcFtdID0gewo+ICAgI2Rl ZmluZSBNQVAoeCwgeSkgeyBpbG9nMihJOTE1X0VOR0lORV9IQVNfIyN4KSwgaWxvZzIoSTkxNV9T Q0hFRFVMRVJfQ0FQXyMjeSkgfQo+ICAgCQlNQVAoUFJFRU1QVElPTiwgUFJFRU1QVElPTiksCj4g KwkJTUFQKFNFTUFQSE9SRVMsIFNFTUFQSE9SRVMpLAo+ICAgI3VuZGVmIE1BUAo+ICAgCX07Cj4g ICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9ncHVfY29tbWFuZHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2dwdV9jb21tYW5kcy5oCj4gaW5kZXggYjk2YTMxYmMxMDgwLi5hMzRlY2U1M2E3NzEg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3B1X2NvbW1hbmRzLmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ncHVfY29tbWFuZHMuaAo+IEBAIC0x MDUsOCArMTA1LDEzIEBACj4gICAjZGVmaW5lIE1JX1NFTUFQSE9SRV9TSUdOQUwJTUlfSU5TVFIo MHgxYiwgMCkgLyogR0VOOCsgKi8KPiAgICNkZWZpbmUgICBNSV9TRU1BUEhPUkVfVEFSR0VUKGVu Z2luZSkJKChlbmdpbmUpPDwxNSkKPiAgICNkZWZpbmUgTUlfU0VNQVBIT1JFX1dBSVQJTUlfSU5T VFIoMHgxYywgMikgLyogR0VOOCsgKi8KPiAtI2RlZmluZSAgIE1JX1NFTUFQSE9SRV9QT0xMCQko MTw8MTUpCj4gLSNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FEX0dURV9TREQJKDE8PDEyKQo+ICsj ZGVmaW5lICAgTUlfU0VNQVBIT1JFX1BPTEwJCSgxIDw8IDE1KQo+ICsjZGVmaW5lICAgTUlfU0VN QVBIT1JFX1NBRF9HVF9TREQJKDAgPDwgMTIpCj4gKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FE X0dURV9TREQJKDEgPDwgMTIpCj4gKyNkZWZpbmUgICBNSV9TRU1BUEhPUkVfU0FEX0xUX1NERAko MiA8PCAxMikKPiArI2RlZmluZSAgIE1JX1NFTUFQSE9SRV9TQURfTFRFX1NERAkoMyA8PCAxMikK PiArI2RlZmluZSAgIE1JX1NFTUFQSE9SRV9TQURfRVFfU0RECSg0IDw8IDEyKQo+ICsjZGVmaW5l ICAgTUlfU0VNQVBIT1JFX1NBRF9ORVFfU0RECSg1IDw8IDEyKQo+ICAgI2RlZmluZSBNSV9TVE9S RV9EV09SRF9JTU0JTUlfSU5TVFIoMHgyMCwgMSkKPiAgICNkZWZpbmUgTUlfU1RPUkVfRFdPUkRf SU1NX0dFTjQJTUlfSU5TVFIoMHgyMCwgMikKPiAgICNkZWZpbmUgICBNSV9NRU1fVklSVFVBTAko MSA8PCAyMikgLyogOTQ1LGczMyw5NjUgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IGlu ZGV4IGY1N2NmZTJmYzA3OC4uNTNkNmY3ZmRiNTBlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf bHJjLmMKPiBAQCAtMjMyNCw2ICsyMzI0LDcgQEAgdm9pZCBpbnRlbF9leGVjbGlzdHNfc2V0X2Rl ZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJZW5n aW5lLT5wYXJrID0gTlVMTDsKPiAgIAllbmdpbmUtPnVucGFyayA9IE5VTEw7Cj4gICAKPiArCWVu Z2luZS0+ZmxhZ3MgfD0gSTkxNV9FTkdJTkVfSEFTX1NFTUFQSE9SRVM7Cj4gICAJZW5naW5lLT5m bGFncyB8PSBJOTE1X0VOR0lORV9TVVBQT1JUU19TVEFUUzsKPiAgIAlpZiAoZW5naW5lLT5pOTE1 LT5wcmVlbXB0X2NvbnRleHQpCj4gICAJCWVuZ2luZS0+ZmxhZ3MgfD0gSTkxNV9FTkdJTkVfSEFT X1BSRUVNUFRJT047Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jp bmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+IGlu ZGV4IGI4ZWM3ZTQwYTU5Yi4uMmU3MjY0MTE5ZWM0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuaAo+IEBAIC00OTksNiArNDk5LDcgQEAgc3RydWN0IGludGVsX2Vu Z2luZV9jcyB7Cj4gICAjZGVmaW5lIEk5MTVfRU5HSU5FX05FRURTX0NNRF9QQVJTRVIgQklUKDAp Cj4gICAjZGVmaW5lIEk5MTVfRU5HSU5FX1NVUFBPUlRTX1NUQVRTICAgQklUKDEpCj4gICAjZGVm aW5lIEk5MTVfRU5HSU5FX0hBU19QUkVFTVBUSU9OICAgQklUKDIpCj4gKyNkZWZpbmUgSTkxNV9F TkdJTkVfSEFTX1NFTUFQSE9SRVMgICBCSVQoMykKPiAgIAl1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4g ICAKPiAgIAkvKgo+IEBAIC01NzYsNiArNTc3LDEyIEBAIGludGVsX2VuZ2luZV9oYXNfcHJlZW1w dGlvbihjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICAJcmV0dXJuIGVu Z2luZS0+ZmxhZ3MgJiBJOTE1X0VOR0lORV9IQVNfUFJFRU1QVElPTjsKPiAgIH0KPiAgIAo+ICtz dGF0aWMgaW5saW5lIGJvb2wKPiAraW50ZWxfZW5naW5lX2hhc19zZW1hcGhvcmVzKGNvbnN0IHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJcmV0dXJuIGVuZ2luZS0+Zmxh Z3MgJiBJOTE1X0VOR0lORV9IQVNfU0VNQVBIT1JFUzsKPiArfQo+ICsKPiAgIHZvaWQgaW50ZWxf ZW5naW5lc19zZXRfc2NoZWR1bGVyX2NhcHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp Owo+ICAgCj4gICBzdGF0aWMgaW5saW5lIGJvb2wgX19leGVjbGlzdHNfbmVlZF9wcmVlbXB0KGlu dCBwcmlvLCBpbnQgbGFzdCkKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2Ry bS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gaW5kZXggODMwNGE3ZjFlYzNmLi5i MTBlZWEzZjZkMjQgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4g KysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gQEAgLTQ3OSw2ICs0NzksNyBAQCB0 eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfd2FpdCB7Cj4gICAjZGVmaW5lICAgSTkxNV9TQ0hF RFVMRVJfQ0FQX0VOQUJMRUQJKDF1bCA8PCAwKQo+ICAgI2RlZmluZSAgIEk5MTVfU0NIRURVTEVS X0NBUF9QUklPUklUWQkoMXVsIDw8IDEpCj4gICAjZGVmaW5lICAgSTkxNV9TQ0hFRFVMRVJfQ0FQ X1BSRUVNUFRJT04JKDF1bCA8PCAyKQo+ICsjZGVmaW5lICAgSTkxNV9TQ0hFRFVMRVJfQ0FQX1NF TUFQSE9SRVMJKDF1bCA8PCAzKQo+ICAgCj4gICAjZGVmaW5lIEk5MTVfUEFSQU1fSFVDX1NUQVRV UwkJIDQyCj4gICAKPiAKClJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3Vs aW5AaW50ZWwuY29tPgoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZng=