From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 13/23] drm/i915: Move list of timelines under its own lock Date: Thu, 17 Jan 2019 17:54:38 +0000 Message-ID: <290e8d56-5467-3419-6f5d-e5d2e75d805e@linux.intel.com> References: <20190117143519.16086-1-chris@chris-wilson.co.uk> <20190117143519.16086-14-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 mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 883BB6F536 for ; Thu, 17 Jan 2019 17:54:38 +0000 (UTC) In-Reply-To: <20190117143519.16086-14-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 Ck9uIDE3LzAxLzIwMTkgMTQ6MzQsIENocmlzIFdpbHNvbiB3cm90ZToKPiBDdXJyZW50bHksIHRo ZSBsaXN0IG9mIHRpbWVsaW5lcyBpcyBzZXJpYWxpc2VkIGJ5IHRoZSBzdHJ1Y3RfbXV0ZXgsIGJ1 dAo+IHRvIGFsbGV2aWF0ZSBkaWZmaWN1bHRpZXMgd2l0aCB1c2luZyB0aGF0IG11dGV4IGluIGZ1 dHVyZSwgbW92ZSB0aGUKPiBsaXN0IG1hbmFnZW1lbnQgdW5kZXIgaXRzIG93biBkZWRpY2F0ZWQg bXV0ZXguCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxz b24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAg ICAgICAgICAgfCAgNSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAg ICAgICAgICAgIHwgODkgKysrKysrKysrLS0tLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZXNldC5jICAgICAgICAgICAgIHwgIDggKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfdGltZWxpbmUuYyAgICAgICAgICB8IDM4ICsrKysrKy0tCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lLmggICAgICAgICAgfCAgMyArCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3ZtYS5jICAgICAgICAgICAgICAgfCAgNiArKwo+ICAgLi4uL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvbW9ja19nZW1fZGV2aWNlLmMgIHwgIDcgKy0KPiAgIC4uLi9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfdGltZWxpbmUuYyAgICB8ICAzICstCj4gICA4IGZpbGVz IGNoYW5nZWQsIDEwMSBpbnNlcnRpb25zKCspLCA1OCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA5NDY4MGIxNWJlZDAuLjM5MTM5MDA2MDBiNyAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC0xOTc1LDcgKzE5NzUsMTAgQEAgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgewo+ICAgCQl2b2lkICgqcmVzdW1lKShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqKTsKPiAgIAkJdm9pZCAoKmNsZWFudXBfZW5naW5lKShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpOwo+ICAgCj4gLQkJc3RydWN0IGxpc3RfaGVhZCB0aW1lbGluZXM7Cj4gKwkJ c3RydWN0IGk5MTVfZ3RfdGltZWxpbmVzIHsKPiArCQkJc3RydWN0IG11dGV4IG11dGV4OyAvKiBw cm90ZWN0cyBsaXN0LCB0YWludGVkIGJ5IEdQVSAqLwoKV2hhdCBkb2VzIGl0IG1lYW4gInRhaW50 ZWQgYnkgR1BVIj8KCj4gKwkJCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiArCQl9IHRpbWVsaW5l czsKPiAgIAo+ICAgCQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9yaW5nczsKPiAgIAkJc3RydWN0 IGxpc3RfaGVhZCBjbG9zZWRfdm1hOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDE1 YWNkMDUyZGE0Ni4uM2M2MDkxMDIxMjkwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4g QEAgLTMyMjIsMzMgKzMyMjIsNiBAQCBpOTE1X2dlbV93YWl0X2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKPiAgIAlyZXR1cm4g cmV0Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBsb25nIHdhaXRfZm9yX3RpbWVsaW5lKHN0cnVjdCBp OTE1X3RpbWVsaW5lICp0bCwKPiAtCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzLCBsb25nIHRp bWVvdXQpCj4gLXsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+IC0KPiAtCXJxID0gaTkx NV9nZW1fYWN0aXZlX2dldF91bmxvY2tlZCgmdGwtPmxhc3RfcmVxdWVzdCk7Cj4gLQlpZiAoIXJx KQo+IC0JCXJldHVybiB0aW1lb3V0Owo+IC0KPiAtCS8qCj4gLQkgKiAiUmFjZS10by1pZGxlIi4K PiAtCSAqCj4gLQkgKiBTd2l0Y2hpbmcgdG8gdGhlIGtlcm5lbCBjb250ZXh0IGlzIG9mdGVuIHVz ZWQgYSBzeW5jaHJvbm91cwo+IC0JICogc3RlcCBwcmlvciB0byBpZGxpbmcsIGUuZy4gaW4gc3Vz cGVuZCBmb3IgZmx1c2hpbmcgYWxsCj4gLQkgKiBjdXJyZW50IG9wZXJhdGlvbnMgdG8gbWVtb3J5 IGJlZm9yZSBzbGVlcGluZy4gVGhlc2Ugd2UKPiAtCSAqIHdhbnQgdG8gY29tcGxldGUgYXMgcXVp Y2tseSBhcyBwb3NzaWJsZSB0byBhdm9pZCBwcm9sb25nZWQKPiAtCSAqIHN0YWxscywgc28gYWxs b3cgdGhlIGdwdSB0byBib29zdCB0byBtYXhpbXVtIGNsb2Nrcy4KPiAtCSAqLwo+IC0JaWYgKGZs YWdzICYgSTkxNV9XQUlUX0ZPUl9JRExFX0JPT1NUKQo+IC0JCWdlbjZfcnBzX2Jvb3N0KHJxLCBO VUxMKTsKPiAtCj4gLQl0aW1lb3V0ID0gaTkxNV9yZXF1ZXN0X3dhaXQocnEsIGZsYWdzLCB0aW1l b3V0KTsKPiAtCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+IC0KPiAtCXJldHVybiB0aW1lb3V0Owo+ IC19Cj4gLQo+ICAgc3RhdGljIGludCB3YWl0X2Zvcl9lbmdpbmVzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQo+ICAgewo+ICAgCWlmICh3YWl0X2ZvcihpbnRlbF9lbmdpbmVzX2FyZV9p ZGxlKGk5MTUpLCBJOTE1X0lETEVfRU5HSU5FU19USU1FT1VUKSkgewo+IEBAIC0zMjY1LDYgKzMy MzgsOCBAQCBzdGF0aWMgaW50IHdhaXRfZm9yX2VuZ2luZXMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpCj4gICBpbnQgaTkxNV9nZW1fd2FpdF9mb3JfaWRsZShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSwKPiAgIAkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgbG9uZyB0aW1lb3V0 KQo+ICAgewo+ICsJc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsOwo+ICsKPiAgIAlHRU1fVFJBQ0Uo ImZsYWdzPSV4ICglcyksIHRpbWVvdXQ9JWxkJXNcbiIsCj4gICAJCSAgZmxhZ3MsIGZsYWdzICYg STkxNV9XQUlUX0xPQ0tFRCA/ICJsb2NrZWQiIDogInVubG9ja2VkIiwKPiAgIAkJICB0aW1lb3V0 LCB0aW1lb3V0ID09IE1BWF9TQ0hFRFVMRV9USU1FT1VUID8gIiAoZm9yZXZlcikiIDogIiIpOwo+ IEBAIC0zMjczLDE3ICszMjQ4LDQ1IEBAIGludCBpOTE1X2dlbV93YWl0X2Zvcl9pZGxlKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCWlmICghUkVBRF9PTkNFKGk5MTUtPmd0LmF3 YWtlKSkKPiAgIAkJcmV0dXJuIDA7Cj4gICAKPiArCW11dGV4X2xvY2soJmk5MTUtPmd0LnRpbWVs aW5lcy5tdXRleCk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRsLCAmaTkxNS0+Z3QudGltZWxp bmVzLmxpc3QsIGxpbmspIHsKPiArCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCj4gKwkJ cnEgPSBpOTE1X2dlbV9hY3RpdmVfZ2V0X3VubG9ja2VkKCZ0bC0+bGFzdF9yZXF1ZXN0KTsKPiAr CQlpZiAoIXJxKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJbXV0ZXhfdW5sb2NrKCZpOTE1LT5n dC50aW1lbGluZXMubXV0ZXgpOwo+ICsKPiArCQkvKgo+ICsJCSAqICJSYWNlLXRvLWlkbGUiLgo+ ICsJCSAqCj4gKwkJICogU3dpdGNoaW5nIHRvIHRoZSBrZXJuZWwgY29udGV4dCBpcyBvZnRlbiB1 c2VkIGEgc3luY2hyb25vdXMKPiArCQkgKiBzdGVwIHByaW9yIHRvIGlkbGluZywgZS5nLiBpbiBz dXNwZW5kIGZvciBmbHVzaGluZyBhbGwKPiArCQkgKiBjdXJyZW50IG9wZXJhdGlvbnMgdG8gbWVt b3J5IGJlZm9yZSBzbGVlcGluZy4gVGhlc2Ugd2UKPiArCQkgKiB3YW50IHRvIGNvbXBsZXRlIGFz IHF1aWNrbHkgYXMgcG9zc2libGUgdG8gYXZvaWQgcHJvbG9uZ2VkCj4gKwkJICogc3RhbGxzLCBz byBhbGxvdyB0aGUgZ3B1IHRvIGJvb3N0IHRvIG1heGltdW0gY2xvY2tzLgo+ICsJCSAqLwo+ICsJ CWlmIChmbGFncyAmIEk5MTVfV0FJVF9GT1JfSURMRV9CT09TVCkKPiArCQkJZ2VuNl9ycHNfYm9v c3QocnEsIE5VTEwpOwo+ICsKPiArCQl0aW1lb3V0ID0gaTkxNV9yZXF1ZXN0X3dhaXQocnEsIGZs YWdzLCB0aW1lb3V0KTsKPiArCQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiArCQlpZiAodGltZW91 dCA8IDApCj4gKwkJCXJldHVybiB0aW1lb3V0Owo+ICsKPiArCQltdXRleF9sb2NrKCZpOTE1LT5n dC50aW1lbGluZXMubXV0ZXgpOwo+ICsKPiArCQkvKiByZXN0YXJ0IGFmdGVyIGRyb3BwaW5nIHRo ZSBsb2NrICovCj4gKwkJdGwgPSBsaXN0X2VudHJ5KCZpOTE1LT5ndC50aW1lbGluZXMubGlzdCwg dHlwZW9mKCp0bCksIGxpbmspOwo+ICsJfQo+ICsJbXV0ZXhfdW5sb2NrKCZpOTE1LT5ndC50aW1l bGluZXMubXV0ZXgpOwoKSG0sIHNpbmNlIHRoZSBsb29wIGFib3ZlIGJvdGhlcnMgcmVzdGFydGlu ZyBhZnRlciBkcm9wcGluZyB0aGUgbG9jaywgCnRoYXQgaW1wbGllcyB3aGVuIHdlIGRyb3AgdGhl IGxvY2sgaGVyZSB3ZSBtYXkgbm90IGJlIGlkbGUgYW55IGxvbmdlci4gCk9yIHdlIGFjdHVhbGx5 IHN0aWxsIGRlcGVuZCBvbiBzdHJ1Y3RfbXV0ZXggYW5kIHRoaXMgaXMgYW5vdGhlciBzbWFsbCAK Y2hhcmFkZT8gSSBndWVzcyBzbywgc2luY2Ugd2l0aG91dCB0aGlzIHBhdGNoIHdlIGFsc28gaGF2 ZSB0d28gcGF0aCB3aXRoIApkaWZmZXJlbnQgbGV2ZWxzIG9mIGlkbGVuZXNzIGd1YXJhbnRlZS4K Cj4gKwo+ICAgCWlmIChmbGFncyAmIEk5MTVfV0FJVF9MT0NLRUQpIHsKPiAtCQlzdHJ1Y3QgaTkx NV90aW1lbGluZSAqdGw7Cj4gICAJCWludCBlcnI7Cj4gICAKPiAgIAkJbG9ja2RlcF9hc3NlcnRf aGVsZCgmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAKPiAtCQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHRsLCAmaTkxNS0+Z3QudGltZWxpbmVzLCBsaW5rKSB7Cj4gLQkJCXRpbWVvdXQgPSB3YWl0 X2Zvcl90aW1lbGluZSh0bCwgZmxhZ3MsIHRpbWVvdXQpOwo+IC0JCQlpZiAodGltZW91dCA8IDAp Cj4gLQkJCQlyZXR1cm4gdGltZW91dDsKPiAtCQl9Cj4gICAJCWlmIChHRU1fU0hPV19ERUJVRygp ICYmICF0aW1lb3V0KSB7Cj4gICAJCQkvKiBQcmVzdW1lIHRoYXQgdGltZW91dCB3YXMgbm9uLXpl cm8gdG8gYmVnaW4gd2l0aCEgKi8KPiAgIAkJCWRldl93YXJuKCZpOTE1LT5kcm0ucGRldi0+ZGV2 LAo+IEBAIC0zMjk3LDE3ICszMzAwLDYgQEAgaW50IGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4gICAKPiAgIAkJaTkxNV9yZXRpcmVfcmVxdWVz dHMoaTkxNSk7Cj4gICAJCUdFTV9CVUdfT04oaTkxNS0+Z3QuYWN0aXZlX3JlcXVlc3RzKTsKPiAt CX0gZWxzZSB7Cj4gLQkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+IC0JCWVudW0g aW50ZWxfZW5naW5lX2lkIGlkOwo+IC0KPiAtCQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1 LCBpZCkgewo+IC0JCQlzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGwgPSAmZW5naW5lLT50aW1lbGlu ZTsKPiAtCj4gLQkJCXRpbWVvdXQgPSB3YWl0X2Zvcl90aW1lbGluZSh0bCwgZmxhZ3MsIHRpbWVv dXQpOwo+IC0JCQlpZiAodGltZW91dCA8IDApCj4gLQkJCQlyZXR1cm4gdGltZW91dDsKPiAtCQl9 Cj4gICAJfQo+ICAgCj4gICAJcmV0dXJuIDA7Cj4gQEAgLTUwMDgsNiArNTAwMCw4IEBAIGludCBp OTE1X2dlbV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgIAkJZGV2 X3ByaXYtPmd0LmNsZWFudXBfZW5naW5lID0gaW50ZWxfZW5naW5lX2NsZWFudXA7Cj4gICAJfQo+ ICAgCj4gKwlpOTE1X3RpbWVsaW5lc19pbml0KGRldl9wcml2KTsKPiArCj4gICAJcmV0ID0gaTkx NV9nZW1faW5pdF91c2VycHRyKGRldl9wcml2KTsKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4g cmV0Owo+IEBAIC01MTMwLDggKzUxMjQsMTAgQEAgaW50IGk5MTVfZ2VtX2luaXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgZXJyX3VjX21pc2M6Cj4gICAJaW50ZWxfdWNf ZmluaV9taXNjKGRldl9wcml2KTsKPiAgIAo+IC0JaWYgKHJldCAhPSAtRUlPKQo+ICsJaWYgKHJl dCAhPSAtRUlPKSB7Cj4gICAJCWk5MTVfZ2VtX2NsZWFudXBfdXNlcnB0cihkZXZfcHJpdik7Cj4g KwkJaTkxNV90aW1lbGluZXNfZmluaShkZXZfcHJpdik7Cj4gKwl9Cj4gICAKPiAgIAlpZiAocmV0 ID09IC1FSU8pIHsKPiAgIAkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgp Owo+IEBAIC01MTgyLDYgKzUxNzgsNyBAQCB2b2lkIGk5MTVfZ2VtX2Zpbmkoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgCj4gICAJaW50ZWxfdWNfZmluaV9taXNjKGRldl9w cml2KTsKPiAgIAlpOTE1X2dlbV9jbGVhbnVwX3VzZXJwdHIoZGV2X3ByaXYpOwo+ICsJaTkxNV90 aW1lbGluZXNfZmluaShkZXZfcHJpdik7Cj4gICAKPiAgIAlpOTE1X2dlbV9kcmFpbl9mcmVlZF9v YmplY3RzKGRldl9wcml2KTsKPiAgIAo+IEBAIC01Mjg0LDcgKzUyODEsNiBAQCBpbnQgaTkxNV9n ZW1faW5pdF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gICAJaWYg KCFkZXZfcHJpdi0+cHJpb3JpdGllcykKPiAgIAkJZ290byBlcnJfZGVwZW5kZW5jaWVzOwo+ICAg Cj4gLQlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPmd0LnRpbWVsaW5lcyk7Cj4gICAJSU5JVF9M SVNUX0hFQUQoJmRldl9wcml2LT5ndC5hY3RpdmVfcmluZ3MpOwo+ICAgCUlOSVRfTElTVF9IRUFE KCZkZXZfcHJpdi0+Z3QuY2xvc2VkX3ZtYSk7Cj4gICAKPiBAQCAtNTMyOCw3ICs1MzI0LDYgQEAg dm9pZCBpOTE1X2dlbV9jbGVhbnVwX2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiAgIAlHRU1fQlVHX09OKCFsbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmZyZWVfbGlz dCkpOwo+ICAgCUdFTV9CVUdfT04oYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS5mcmVlX2NvdW50 KSk7Cj4gICAJV0FSTl9PTihkZXZfcHJpdi0+bW0ub2JqZWN0X2NvdW50KTsKPiAtCVdBUk5fT04o IWxpc3RfZW1wdHkoJmRldl9wcml2LT5ndC50aW1lbGluZXMpKTsKPiAgIAo+ICAgCWttZW1fY2Fj aGVfZGVzdHJveShkZXZfcHJpdi0+cHJpb3JpdGllcyk7Cj4gICAJa21lbV9jYWNoZV9kZXN0cm95 KGRldl9wcml2LT5kZXBlbmRlbmNpZXMpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3Jlc2V0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmMKPiBp bmRleCBkNDRiMDk1ZTI4NjAuLjEyZTVhMmJjODI1YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3Jlc2V0LmMKPiBAQCAtODUwLDcgKzg1MCw4IEBAIGJvb2wgaTkxNV9nZW1fdW5zZXRfd2VkZ2Vk KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCSAqCj4gICAJICogTm8gbW9yZSBj YW4gYmUgc3VibWl0dGVkIHVudGlsIHdlIHJlc2V0IHRoZSB3ZWRnZWQgYml0Lgo+ICAgCSAqLwo+ IC0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0bCwgJmk5MTUtPmd0LnRpbWVsaW5lcywgbGluaykgewo+ ICsJbXV0ZXhfbG9jaygmaTkxNS0+Z3QudGltZWxpbmVzLm11dGV4KTsKPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkodGwsICZpOTE1LT5ndC50aW1lbGluZXMubGlzdCwgbGluaykgewo+ICAgCQlzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiAgIAkJbG9uZyB0aW1lb3V0Owo+ICAgCj4gQEAgLTg3Miw5 ICs4NzMsMTIgQEAgYm9vbCBpOTE1X2dlbV91bnNldF93ZWRnZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpCj4gICAJCXRpbWVvdXQgPSBkbWFfZmVuY2VfZGVmYXVsdF93YWl0KCZycS0+ ZmVuY2UsIHRydWUsCj4gICAJCQkJCQkgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ICAgCQlpOTE1 X3JlcXVlc3RfcHV0KHJxKTsKPiAtCQlpZiAodGltZW91dCA8IDApCj4gKwkJaWYgKHRpbWVvdXQg PCAwKSB7Cj4gKwkJCW11dGV4X3VubG9jaygmaTkxNS0+Z3QudGltZWxpbmVzLm11dGV4KTsKPiAg IAkJCWdvdG8gdW5sb2NrOwo+ICsJCX0KPiAgIAl9Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmd0 LnRpbWVsaW5lcy5tdXRleCk7Cj4gICAKPiAgIAlpbnRlbF9lbmdpbmVzX3Nhbml0aXplKGk5MTUs IGZhbHNlKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Rp bWVsaW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RpbWVsaW5lLmMKPiBpbmRleCA0 NjY3Y2MwOGM0MTYuLjg0NTUwZjE3ZDNkZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3RpbWVsaW5lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Rp bWVsaW5lLmMKPiBAQCAtMTMsNyArMTMsNyBAQCB2b2lkIGk5MTVfdGltZWxpbmVfaW5pdChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAkJCXN0cnVjdCBpOTE1X3RpbWVsaW5lICp0 aW1lbGluZSwKPiAgIAkJCWNvbnN0IGNoYXIgKm5hbWUpCj4gICB7Cj4gLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCXN0cnVjdCBpOTE1X2d0X3RpbWVs aW5lcyAqZ3QgPSAmaTkxNS0+Z3QudGltZWxpbmVzOwo+ICAgCj4gICAJLyoKPiAgIAkgKiBJZGVh bGx5IHdlIHdhbnQgYSBzZXQgb2YgZW5naW5lcyBvbiBhIHNpbmdsZSBsZWFmIGFzIHdlIGV4cGVj dAo+IEBAIC0yMyw5ICsyMywxMiBAQCB2b2lkIGk5MTVfdGltZWxpbmVfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwKPiAgIAkgKi8KPiAgIAlCVUlMRF9CVUdfT04oS1NZTkNNQVAg PCBJOTE1X05VTV9FTkdJTkVTKTsKPiAgIAo+ICsJdGltZWxpbmUtPmk5MTUgPSBpOTE1Owo+ICAg CXRpbWVsaW5lLT5uYW1lID0gbmFtZTsKPiAgIAo+IC0JbGlzdF9hZGQoJnRpbWVsaW5lLT5saW5r LCAmaTkxNS0+Z3QudGltZWxpbmVzKTsKPiArCW11dGV4X2xvY2soJmd0LT5tdXRleCk7Cj4gKwls aXN0X2FkZCgmdGltZWxpbmUtPmxpbmssICZndC0+bGlzdCk7Cj4gKwltdXRleF91bmxvY2soJmd0 LT5tdXRleCk7Cj4gICAKPiAgIAkvKiBDYWxsZWQgZHVyaW5nIGVhcmx5X2luaXQgYmVmb3JlIHdl IGtub3cgaG93IG1hbnkgZW5naW5lcyB0aGVyZSBhcmUgKi8KPiAgIAo+IEBAIC0zOSw2ICs0Miwx NyBAQCB2b2lkIGk5MTVfdGltZWxpbmVfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKPiAgIAlpOTE1X3N5bmNtYXBfaW5pdCgmdGltZWxpbmUtPnN5bmMpOwo+ICAgfQo+ICAgCj4g K3ZvaWQgaTkxNV90aW1lbGluZXNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK PiArewo+ICsJc3RydWN0IGk5MTVfZ3RfdGltZWxpbmVzICpndCA9ICZpOTE1LT5ndC50aW1lbGlu ZXM7Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmZ3QtPm11dGV4KTsKPiArCUlOSVRfTElTVF9IRUFEKCZn dC0+bGlzdCk7Cj4gKwo+ICsJLyogdmlhIGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUoKSAqLwo+ICsJ aTkxNV9nZW1fc2hyaW5rZXJfdGFpbnRzX211dGV4KGk5MTUsICZndC0+bXV0ZXgpOwo+ICt9Cj4g Kwo+ICAgLyoqCj4gICAgKiBpOTE1X3RpbWVsaW5lc19wYXJrIC0gY2FsbGVkIHdoZW4gdGhlIGRy aXZlciBpZGxlcwo+ICAgICogQGk5MTU6IHRoZSBkcm1faTkxNV9wcml2YXRlIGRldmljZQo+IEBA IC01MSwxMSArNjUsMTEgQEAgdm9pZCBpOTE1X3RpbWVsaW5lX2luaXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCj4gICAgKi8KPiAgIHZvaWQgaTkxNV90aW1lbGluZXNfcGFyayhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiArCXN0cnVjdCBpOTE1X2d0X3RpbWVs aW5lcyAqZ3QgPSAmaTkxNS0+Z3QudGltZWxpbmVzOwo+ICAgCXN0cnVjdCBpOTE1X3RpbWVsaW5l ICp0aW1lbGluZTsKPiAgIAo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0aW1lbGluZSwgJmk5MTUtPmd0 LnRpbWVsaW5lcywgbGluaykgewo+ICsJbXV0ZXhfbG9jaygmZ3QtPm11dGV4KTsKPiArCWxpc3Rf Zm9yX2VhY2hfZW50cnkodGltZWxpbmUsICZndC0+bGlzdCwgbGluaykgewo+ICAgCQkvKgo+ICAg CQkgKiBBbGwga25vd24gZmVuY2VzIGFyZSBjb21wbGV0ZWQgc28gd2UgY2FuIHNjcmFwCj4gICAJ CSAqIHRoZSBjdXJyZW50IHN5bmMgcG9pbnQgdHJhY2tpbmcgYW5kIHN0YXJ0IGFmcmVzaCwKPiBA QCAtNjQsMTUgKzc4LDIwIEBAIHZvaWQgaTkxNV90aW1lbGluZXNfcGFyayhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIAkJICovCj4gICAJCWk5MTVfc3luY21hcF9mcmVlKCZ0aW1l bGluZS0+c3luYyk7Cj4gICAJfQo+ICsJbXV0ZXhfdW5sb2NrKCZndC0+bXV0ZXgpOwo+ICAgfQo+ ICAgCj4gICB2b2lkIGk5MTVfdGltZWxpbmVfZmluaShzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGlt ZWxpbmUpCj4gICB7Cj4gKwlzdHJ1Y3QgaTkxNV9ndF90aW1lbGluZXMgKmd0ID0gJnRpbWVsaW5l LT5pOTE1LT5ndC50aW1lbGluZXM7Cj4gKwo+ICAgCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJnRp bWVsaW5lLT5yZXF1ZXN0cykpOwo+ICAgCj4gICAJaTkxNV9zeW5jbWFwX2ZyZWUoJnRpbWVsaW5l LT5zeW5jKTsKPiAgIAo+ICsJbXV0ZXhfbG9jaygmZ3QtPm11dGV4KTsKPiAgIAlsaXN0X2RlbCgm dGltZWxpbmUtPmxpbmspOwo+ICsJbXV0ZXhfdW5sb2NrKCZndC0+bXV0ZXgpOwo+ICAgfQo+ICAg Cj4gICBzdHJ1Y3QgaTkxNV90aW1lbGluZSAqCj4gQEAgLTk5LDYgKzExOCwxNSBAQCB2b2lkIF9f aTkxNV90aW1lbGluZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQo+ICAgCWtmcmVlKHRpbWVsaW5l KTsKPiAgIH0KPiAgIAo+ICt2b2lkIGk5MTVfdGltZWxpbmVzX2Zpbmkoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2d0X3RpbWVsaW5lcyAqZ3QgPSAm aTkxNS0+Z3QudGltZWxpbmVzOwo+ICsKPiArCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJmd0LT5s aXN0KSk7Cj4gKwo+ICsJbXV0ZXhfZGVzdHJveSgmZ3QtPm11dGV4KTsKPiArfQo+ICsKPiAgICNp ZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKPiAgICNpbmNsdWRlICJzZWxm dGVzdHMvbW9ja190aW1lbGluZS5jIgo+ICAgI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X3RpbWVs aW5lLmMiCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmUu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmUuaAo+IGluZGV4IDM4YzFlMTVl OTI3YS4uODdhZDJkZDMxYzIwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfdGltZWxpbmUuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdGltZWxpbmUu aAo+IEBAIC02Niw2ICs2Niw3IEBAIHN0cnVjdCBpOTE1X3RpbWVsaW5lIHsKPiAgIAo+ICAgCXN0 cnVjdCBsaXN0X2hlYWQgbGluazsKPiAgIAljb25zdCBjaGFyICpuYW1lOwo+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gICAKPiAgIAlzdHJ1Y3Qga3JlZiBrcmVmOwo+ICAgfTsK PiBAQCAtMTM0LDYgKzEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3RpbWVsaW5lX3N5 bmNfaXNfbGF0ZXIoc3RydWN0IGk5MTVfdGltZWxpbmUgKnRsLAo+ICAgCXJldHVybiBfX2k5MTVf dGltZWxpbmVfc3luY19pc19sYXRlcih0bCwgZmVuY2UtPmNvbnRleHQsIGZlbmNlLT5zZXFubyk7 Cj4gICB9Cj4gICAKPiArdm9pZCBpOTE1X3RpbWVsaW5lc19pbml0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KTsKPiAgIHZvaWQgaTkxNV90aW1lbGluZXNfcGFyayhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gK3ZvaWQgaTkxNV90aW1lbGluZXNfZmluaShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSk7Cj4gICAKPiAgICNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92 bWEuYwo+IGluZGV4IDNhNjgwZmUyYmI4Yi4uZDgzYjhhZDVmODU5IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3ZtYS5jCj4gQEAgLTIwMSw2ICsyMDEsMTEgQEAgdm1hX2NyZWF0ZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQlyYiA9ICpwOwo+ICAgCQlwb3MgPSByYl9lbnRy eShyYiwgc3RydWN0IGk5MTVfdm1hLCBvYmpfbm9kZSk7Cj4gICAKPiArCQkvKgo+ICsJCSAqIElm IHRoZSB2aWV3IGFscmVhZHkgZXhpc3RzIGluIHRoZSB0cmVlLCBhbm90aGVyIHRocmVhZAo+ICsJ CSAqIGFscmVhZHkgY3JlYXRlZCBhIG1hdGNoaW5nIHZtYSwgc28gcmV0dXJuIHRoZSBvbGRlciBp bnN0YW5jZQo+ICsJCSAqIGFuZCBkaXNwb3NlIG9mIG91cnMuCj4gKwkJICovCgpPaCBoZXJlIGlz IHRoZSBsb3N0IGNvbW1lbnQsIGFsbCBhbG9uZSBpbiB0aGUgc3RyYW5nZSB3b3JsZC4gOikKCj4g ICAJCWNtcCA9IGk5MTVfdm1hX2NvbXBhcmUocG9zLCB2bSwgdmlldyk7Cj4gICAJCWlmIChjbXAg PT0gMCkgewo+ICAgCQkJc3Bpbl91bmxvY2soJm9iai0+dm1hLmxvY2spOwo+IEBAIC0yOTQsNiAr Mjk5LDcgQEAgaTkxNV92bWFfaW5zdGFuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKPiAgIAl2bWEgPSB2bWFfbG9va3VwKG9iaiwgdm0sIHZpZXcpOwo+ICAgCXNwaW5fdW5sb2Nr KCZvYmotPnZtYS5sb2NrKTsKPiAgIAo+ICsJLyogdm1hX2NyZWF0ZSgpIHdpbGwgcmVzb2x2ZSB0 aGUgcmFjZSBpZiBhbm90aGVyIGNyZWF0ZXMgdGhlIHZtYSAqLwoKSSBhc3N1bWUgeW91J2xsIG1v dmUgYm90aCBjb21tZW50cyB0byB0aGVpciByaWdodCBwbGFjZS4KCj4gICAJaWYgKHVubGlrZWx5 KCF2bWEpKQo+ICAgCQl2bWEgPSB2bWFfY3JlYXRlKG9iaiwgdm0sIHZpZXcpOwo+ICAgCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2Uu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+IGlu ZGV4IDg4OGM2OTc4YmM1NC4uNDFhZTUwMjM2MWQ3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2dlbV9kZXZpY2UuYwo+IEBAIC02OCwxMyArNjgsMTQg QEAgc3RhdGljIHZvaWQgbW9ja19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+ICAgCWk5MTVfZ2VtX2NvbnRleHRzX2ZpbmkoaTkxNSk7Cj4gICAJbXV0ZXhfdW5sb2NrKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgIAo+ICsJaTkxNV90aW1lbGluZXNfZmluaShpOTE1 KTsKPiArCj4gICAJZHJhaW5fd29ya3F1ZXVlKGk5MTUtPndxKTsKPiAgIAlpOTE1X2dlbV9kcmFp bl9mcmVlZF9vYmplY3RzKGk5MTUpOwo+ICAgCj4gICAJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7Cj4gICAJbW9ja19maW5pX2dndHQoaTkxNSk7Cj4gICAJbXV0ZXhfdW5sb2Nr KCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAtCVdBUk5fT04oIWxpc3RfZW1wdHkoJmk5MTUt Pmd0LnRpbWVsaW5lcykpOwo+ICAgCj4gICAJZGVzdHJveV93b3JrcXVldWUoaTkxNS0+d3EpOwo+ ICAgCj4gQEAgLTIyNiw3ICsyMjcsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqbW9ja19n ZW1fZGV2aWNlKHZvaWQpCj4gICAJaWYgKCFpOTE1LT5wcmlvcml0aWVzKQo+ICAgCQlnb3RvIGVy cl9kZXBlbmRlbmNpZXM7Cj4gICAKPiAtCUlOSVRfTElTVF9IRUFEKCZpOTE1LT5ndC50aW1lbGlu ZXMpOwo+ICsJaTkxNV90aW1lbGluZXNfaW5pdChpOTE1KTsKPiArCj4gICAJSU5JVF9MSVNUX0hF QUQoJmk5MTUtPmd0LmFjdGl2ZV9yaW5ncyk7Cj4gICAJSU5JVF9MSVNUX0hFQUQoJmk5MTUtPmd0 LmNsb3NlZF92bWEpOwo+ICAgCj4gQEAgLTI1Myw2ICsyNTUsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqbW9ja19nZW1fZGV2aWNlKHZvaWQpCj4gICAJaTkxNV9nZW1fY29udGV4dHNfZmlu aShpOTE1KTsKPiAgIGVycl91bmxvY2s6Cj4gICAJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiArCWk5MTVfdGltZWxpbmVzX2ZpbmkoaTkxNSk7Cj4gICAJa21lbV9jYWNo ZV9kZXN0cm95KGk5MTUtPnByaW9yaXRpZXMpOwo+ICAgZXJyX2RlcGVuZGVuY2llczoKPiAgIAlr bWVtX2NhY2hlX2Rlc3Ryb3koaTkxNS0+ZGVwZW5kZW5jaWVzKTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfdGltZWxpbmUuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3RpbWVsaW5lLmMKPiBpbmRleCBkY2YzYjE2ZjVhMDcu LmNmMzljY2Q5ZmMwNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvbW9ja190aW1lbGluZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L21vY2tfdGltZWxpbmUuYwo+IEBAIC0xMCw2ICsxMCw3IEBACj4gICAKPiAgIHZvaWQgbW9ja190 aW1lbGluZV9pbml0KHN0cnVjdCBpOTE1X3RpbWVsaW5lICp0aW1lbGluZSwgdTY0IGNvbnRleHQp Cj4gICB7Cj4gKwl0aW1lbGluZS0+aTkxNSA9IE5VTEw7Cj4gICAJdGltZWxpbmUtPmZlbmNlX2Nv bnRleHQgPSBjb250ZXh0Owo+ICAgCj4gICAJc3Bpbl9sb2NrX2luaXQoJnRpbWVsaW5lLT5sb2Nr KTsKPiBAQCAtMjQsNSArMjUsNSBAQCB2b2lkIG1vY2tfdGltZWxpbmVfaW5pdChzdHJ1Y3QgaTkx NV90aW1lbGluZSAqdGltZWxpbmUsIHU2NCBjb250ZXh0KQo+ICAgCj4gICB2b2lkIG1vY2tfdGlt ZWxpbmVfZmluaShzdHJ1Y3QgaTkxNV90aW1lbGluZSAqdGltZWxpbmUpCj4gICB7Cj4gLQlpOTE1 X3RpbWVsaW5lX2ZpbmkodGltZWxpbmUpOwo+ICsJaTkxNV9zeW5jbWFwX2ZyZWUoJnRpbWVsaW5l LT5zeW5jKTsKPiAgIH0KPiAKCkxvb2tzIG9rYXkuCgpBcGFydCB0aGF0IEkgYW0gOS8xMCB3b3Jy aWVkIG9mIGhvdyB0aGUgbG9uZyBnYW1lIG9mIGZpbmUgZ3JhaW5lZCAKbG9ja2luZyB3aWxsIHVu dGFuZ2xlLCBvciBpbiBvdGhlciB3b3JkcywgaG93IG11Y2ggeW91IG1hbmFnZWQgdG8gbmFpbCAK YWxsIHRoZSBuZXcgbG9ja3MgYW5kIGhvdyBtdWNoIHlvdSdsbCBoYXZlIHRvIHJlLWZpZGRsZSB3 aXRoIHRoZW0uIDpJIApCdXQgbWF5YmUgeW91IHNlZSB0aGUgZW5kIGdhbWUgc28gSSB3b24ndCBw cm9qZWN0IG15IGluYWJpbGl0eSB0byBkbyBzby4KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==