From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 3/7] drm/i915: Convert fences to use a GGTT lock rather than struct_mutex Date: Wed, 11 Jul 2018 11:08:46 +0200 Message-ID: <20180711090846.GV3008@phenom.ffwll.local> References: <20180711073608.20286-1-chris@chris-wilson.co.uk> <20180711073608.20286-4-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id 305BC6EBD6 for ; Wed, 11 Jul 2018 09:08:50 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id e19-v6so18638593edq.7 for ; Wed, 11 Jul 2018 02:08:50 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180711073608.20286-4-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBKdWwgMTEsIDIwMTggYXQgMDg6MzY6MDRBTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IEludHJvZHVjZSBhIG5ldyBtdXRleCB0byBndWFyZCBhbGwgb2YgdGhlIHZtYSBvcGVy YXRpb25zIHdpdGhpbiBhIHZtIChhcwo+IG9wcG9zZWQgdG8gdGhlIEJLTCBzdHJ1Y3RfbXV0ZXgp IGFuZCBzdGFydCBieSB1c2luZyBpdCB0byBndWFyZCB0aGUKPiBmZW5jZSBvcGVyYXRpb25zIGZv ciBhIEdHVFQgVk1BLgoKQ29tbWl0IG1lc3NhZ2UgaXMgYSBiaXQgY29uZnVzaW5nLCBzaW5jZSB5 b3UndmUgYWxyZWFkeSBpbnRyb2R1Y2UgdGhpcyBuZXcKbXV0ZXggaW4gYW4gZWFybGllciBwYXRj aC4gUGxlYXNlIGNoYW5nZSB0byAiU3dpdGNoIGZyb20gZGV2LT5zdHJ1Y3RfbXV0ZXgKdG8gZ2d0 dC52bS0+bXV0ZXgiIG9yIHNpbWlsYXIgLi4uCgpGb3IgdGhlIHJldmlld2VycyBiZW5lZml0IGl0 IHdvdWxkIGFsc28gYmUgZ29vZCB0byBleHBsYWluIGhvdyB0aGlzIG5ldwp2bS5tdXRleCBuZXN0 cyB3aXRoIG90aGVycyBzdHVmZiBoZXJlIChkZXYtPnN0cnVjdF9tdXRleCBhbmQgcnBtIGNvbWUg dG8KbWluZCwgbG9va2luZyBmcm9tIHRoZSBwYXRjaCkuIFByb2JhYmx5IGJlc3QgaGVyZSB0aGFu IGluIGRvY3Mgc2luY2UgaXQncwpsaWtlbHkgZ29pbmcgdG8gZ2V0IG91dGRhdGVkLgoKPiAKPiBT aWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAt LS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgICAgIHwgIDkgKyst Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICB8IDExICsrKy0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jIHwgIDUgKy0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2VfcmVnLmMgIHwgNjggKysrKysrKysr KysrKysrKystLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jICAgICAgICAg ICAgfCAxMiArKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmggICAgICAgICAg ICB8IDIzICsrKysrKystCj4gIDYgZmlsZXMgY2hhbmdlZCwgOTYgaW5zZXJ0aW9ucygrKSwgMzIg ZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBpbmRleCA3 NWZmZWQ2YTNmMzEuLmUyYmEyOThhNWQ4OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVi dWdmcy5jCj4gQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIGNoYXIgZ2V0X3RpbGluZ19mbGFnKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIAo+ICBzdGF0aWMgY2hhciBnZXRfZ2xv YmFsX2ZsYWcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgewo+IC0JcmV0dXJu IG9iai0+dXNlcmZhdWx0X2NvdW50ID8gJ2cnIDogJyAnOwo+ICsJcmV0dXJuIFJFQURfT05DRShv YmotPnVzZXJmYXVsdF9jb3VudCkgPyAnZycgOiAnICc7CgpUaGUgdXNlZmF1bHRfY291bnQgaGVy ZSAoYW5kIGJlbG93KSBsb29rIGxpa2UgbWlzcGxhY2VkIGh1bmtzPwoKPiAgfQo+ICAKPiAgc3Rh dGljIGNoYXIgZ2V0X3Bpbl9tYXBwZWRfZmxhZyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQo+IEBAIC05MTQsMTEgKzkxNCwxMCBAQCBzdGF0aWMgaW50IGk5MTVfaW50ZXJydXB0X2lu Zm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAKPiAgc3RhdGljIGludCBpOTE1 X2dlbV9mZW5jZV9yZWdzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICB7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IG5vZGVfdG9faTkxNShtLT5wcml2 YXRlKTsKPiAtCWNvbnN0IHN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAmaTkxNS0+Z2d0dDsKPiAr CXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAmbm9kZV90b19pOTE1KG0tPnByaXZhdGUpLT5nZ3R0 Owo+ICAJaW50IGksIHJldDsKPiAgCj4gLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUo Jmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKCZnZ3R0LT52bS5tdXRleCk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+ IEBAIC05MzUsNyArOTM0LDcgQEAgc3RhdGljIGludCBpOTE1X2dlbV9mZW5jZV9yZWdzX2luZm8o c3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAJCXNlcV9wdXRjKG0sICdcbicpOwo+ ICAJfQo+ICAKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlt dXRleF91bmxvY2soJmdndHQtPnZtLm11dGV4KTsKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDM1NmM4NjA3MWNjYy4uY2JjYmE2MTNiMTc1IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTIxOTMsOCArMjE5Myw4IEBAIGk5MTVf Z2VtX3JlbGVhc2VfbW1hcChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAJICog cmVxdWlyZW1lbnQgdGhhdCBvcGVyYXRpb25zIHRvIHRoZSBHR1RUIGJlIG1hZGUgaG9sZGluZyB0 aGUgUlBNCj4gIAkgKiB3YWtlcmVmLgo+ICAJICovCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAgCWludGVsX3J1bnRpbWVfcG1fZ2V0KGk5MTUpOwo+ ICsJbXV0ZXhfbG9jaygmaTkxNS0+Z2d0dC52bS5tdXRleCk7Cj4gIAo+ICAJaWYgKCFvYmotPnVz ZXJmYXVsdF9jb3VudCkKPiAgCQlnb3RvIG91dDsKPiBAQCAtMjIxMSw2ICsyMjExLDcgQEAgaTkx NV9nZW1fcmVsZWFzZV9tbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIAl3 bWIoKTsKPiAgCj4gIG91dDoKPiArCW11dGV4X3VubG9jaygmaTkxNS0+Z2d0dC52bS5tdXRleCk7 Cj4gIAlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1KTsKPiAgfQo+ICAKPiBAQCAtMjIyMywxMCAr MjIyNCwxMiBAQCB2b2lkIGk5MTVfZ2VtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSkKPiAgCS8qCj4gIAkgKiBPbmx5IGNhbGxlZCBkdXJpbmcgUlBNIHN1c3Bl bmQuIEFsbCB1c2VycyBvZiB0aGUgdXNlcmZhdWx0X2xpc3QKPiAgCSAqIG11c3QgYmUgaG9sZGlu ZyBhbiBSUE0gd2FrZXJlZiB0byBlbnN1cmUgdGhhdCB0aGlzIGNhbiBub3QKPiAtCSAqIHJ1biBj b25jdXJyZW50bHkgd2l0aCB0aGVtc2VsdmVzIChhbmQgdXNlIHRoZSBzdHJ1Y3RfbXV0ZXggZm9y Cj4gKwkgKiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlbXNlbHZlcyAoYW5kIHVzZSB0aGUgZ2d0 dC0+bXV0ZXggZm9yCj4gIAkgKiBwcm90ZWN0aW9uIGJldHdlZW4gdGhlbXNlbHZlcykuCj4gIAkg Ki8KCkkgdGhpbmsgdGhlIGFib3ZlIGNoYW5nZSBpc24ndCBjb3JyZWN0LCBhdCBsZWFzdCBub3Qg eWV0IGF0IHRoaXMgc3RhZ2U6CkFsbCB1c2VycyBvZiB0aGUgdXNlcmZhdWx0X2xpc3Qgc3RpbGwg dXNlIGRldi0+c3RydWN0X211dGV4LCBub3Qgdm0ubXV0ZXguCkkgZ3Vlc3Mgd2UgY291bGQgbW92 ZSB0aGF0IG92ZXIgdG8gdGhlIGdndHQudm0ubXV0ZXggZXZlbnR1YWxseSwgYnV0IHRoaXMKcGF0 Y2ggZG9lc24ndCBkbyB0aGF0Lgo+ICAKPiArCW11dGV4X2xvY2soJmk5MTUtPmdndHQudm0ubXV0 ZXgpOwoKSSBhbHNvIGRvbid0IHRoaW5rIHlvdSBuZWVkIHRvIHRha2UgdGhlIGxvY2sganVzdCB5 ZXQuIEZvciBycG0gd2Uga2VlcCB0aGUKZmVuY2VzIGFyb3VuZCAod2UgcmVzdG9yZSB0aGVtIGlu IHJwbV9yZXN1bWUgYWZ0ZXIgYWxsKSwgd2UganVzdCBudWtlIHRoZQptbWFwIHB0ZXMuCgo+ICsK PiAgCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG9uLAo+ICAJCQkJICZpOTE1LT5tbS51 c2VyZmF1bHRfbGlzdCwgdXNlcmZhdWx0X2xpbmspCj4gIAkJX19pOTE1X2dlbV9vYmplY3RfcmVs ZWFzZV9tbWFwKG9iaik7Cj4gQEAgLTIyNTUsNiArMjI1OCw4IEBAIHZvaWQgaTkxNV9nZW1fcnVu dGltZV9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAJCUdFTV9CVUdf T04oaTkxNV92bWFfaGFzX3VzZXJmYXVsdChyZWctPnZtYSkpOwo+ICAJCXJlZy0+ZGlydHkgPSB0 cnVlOwo+ICAJfQo+ICsKPiArCW11dGV4X3VubG9jaygmaTkxNS0+Z2d0dC52bS5tdXRleCk7Cgo+ ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfbW1hcF9vZmZzZXQo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiBAQCAtNDg2MSw3ICs0ODY2LDcgQEAg c3RhdGljIHZvaWQgX19pOTE1X2dlbV9mcmVlX29iamVjdHMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsCj4gIAkJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiAg Cj4gIAkJR0VNX0JVR19PTihvYmotPmJpbmRfY291bnQpOwo+IC0JCUdFTV9CVUdfT04ob2JqLT51 c2VyZmF1bHRfY291bnQpOwo+ICsJCUdFTV9CVUdfT04oUkVBRF9PTkNFKG9iai0+dXNlcmZhdWx0 X2NvdW50KSk7CgpBbm90aGVyIG1pc3BsYWNlZCBodW5rPwoKPiAgCQlHRU1fQlVHX09OKGF0b21p Y19yZWFkKCZvYmotPmZyb250YnVmZmVyX2JpdHMpKTsKPiAgCQlHRU1fQlVHX09OKCFsaXN0X2Vt cHR5KCZvYmotPmx1dF9saXN0KSk7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9leGVjYnVmZmVyLmMKPiBpbmRleCAzZjBjNjEyZDQyZTcuLmUxZDY1YjE2NWJmMSAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPiBAQCAtNDI2LDgg KzQyNiwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19lYl91bnJlc2VydmVfdm1hKHN0cnVjdCBp OTE1X3ZtYSAqdm1hLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gIHsKPiAgCUdFTV9CVUdfT04oIShm bGFncyAmIF9fRVhFQ19PQkpFQ1RfSEFTX1BJTikpOwo+ICAKPiAtCWlmICh1bmxpa2VseShmbGFn cyAmIF9fRVhFQ19PQkpFQ1RfSEFTX0ZFTkNFKSkKPiArCWlmICh1bmxpa2VseShmbGFncyAmIF9f RVhFQ19PQkpFQ1RfSEFTX0ZFTkNFKSkgewo+ICsJCW11dGV4X2xvY2soJnZtYS0+dm0tPm11dGV4 KTsKPiAgCQlfX2k5MTVfdm1hX3VucGluX2ZlbmNlKHZtYSk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZ2 bWEtPnZtLT5tdXRleCk7Cj4gKwl9Cj4gIAo+ICAJX19pOTE1X3ZtYV91bnBpbih2bWEpOwo+ICB9 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlX3JlZy5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2VfcmVnLmMKPiBpbmRleCA2MGZh NWE4Mjc2Y2IuLjkzMTNhOGU2NzVjOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9mZW5jZV9yZWcuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2ZlbmNlX3JlZy5jCj4gQEAgLTE4OCw2ICsxODgsOCBAQCBzdGF0aWMgdm9pZCBpODMwX3dy aXRlX2ZlbmNlX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZSwKPiAgc3RhdGlj IHZvaWQgZmVuY2Vfd3JpdGUoc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqZmVuY2UsCj4gIAkJ CXN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICB7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZmZW5j ZS0+Z2d0dC0+dm0ubXV0ZXgpOwo+ICsKPiAgCS8qIFByZXZpb3VzIGFjY2VzcyB0aHJvdWdoIHRo ZSBmZW5jZSByZWdpc3RlciBpcyBtYXJzaGFsbGVkIGJ5Cj4gIAkgKiB0aGUgbWIoKSBpbnNpZGUg dGhlIGZhdWx0IGhhbmRsZXJzIChpOTE1X2dlbV9yZWxlYXNlX21tYXBzKQo+ICAJICogYW5kIGV4 cGxpY2l0bHkgbWFuYWdlZCBmb3IgaW50ZXJuYWwgdXNlcnMuCj4gQEAgLTIxMyw2ICsyMTUsOCBA QCBzdGF0aWMgaW50IGZlbmNlX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5j ZSwKPiAgCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSBmZW5jZS0+Z2d0dDsKPiAgCWludCByZXQ7 Cj4gIAo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZ2d0dC0+dm0ubXV0ZXgpOwo+ICsKPiAgCWlm ICh2bWEpIHsKPiAgCQlpZiAoIWk5MTVfdm1hX2lzX21hcF9hbmRfZmVuY2VhYmxlKHZtYSkpCj4g IAkJCXJldHVybiAtRUlOVkFMOwo+IEBAIC0yODksMTQgKzI5MywzOSBAQCBzdGF0aWMgaW50IGZl bmNlX3VwZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZSwKPiAgaW50IGk5MTVf dm1hX3B1dF9mZW5jZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgewo+ICAJc3RydWN0IGRybV9p OTE1X2ZlbmNlX3JlZyAqZmVuY2UgPSB2bWEtPmZlbmNlOwo+ICsJaW50IGVycjsKPiAgCj4gIAlp ZiAoIWZlbmNlKQo+ICAJCXJldHVybiAwOwo+ICAKPiAtCWlmIChmZW5jZS0+cGluX2NvdW50KQo+ IC0JCXJldHVybiAtRUJVU1k7Cj4gKwltdXRleF9sb2NrKCZ2bWEtPnZtLT5tdXRleCk7Cj4gKwlp ZiAoIWZlbmNlLT5waW5fY291bnQpCj4gKwkJZXJyID0gZmVuY2VfdXBkYXRlKGZlbmNlLCBOVUxM KTsKPiArCWVsc2UKPiArCQllcnIgPSAtRUJVU1k7Cj4gKwltdXRleF91bmxvY2soJnZtYS0+dm0t Pm11dGV4KTsKPiAgCj4gLQlyZXR1cm4gZmVuY2VfdXBkYXRlKGZlbmNlLCBOVUxMKTsKPiArCXJl dHVybiBlcnI7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV92bWFfcmV2b2tlX2ZlbmNlKHN0cnVjdCBp OTE1X3ZtYSAqdm1hKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZTsK PiArCj4gKwlHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19nZ3R0KHZtYSkpOwo+ICsJbG9ja2RlcF9h c3NlcnRfaGVsZCgmdm1hLT52bS0+bXV0ZXgpOwo+ICsKPiArCWZlbmNlID0gdm1hLT5mZW5jZTsK PiArCWlmICghZmVuY2UpCj4gKwkJcmV0dXJuOwo+ICsKPiArCUdFTV9CVUdfT04oZmVuY2UtPnBp bl9jb3VudCk7Cj4gKwo+ICsJbGlzdF9tb3ZlKCZmZW5jZS0+bGluaywgJmk5MTVfdm1fdG9fZ2d0 dCh2bWEtPnZtKS0+ZmVuY2VfbGlzdCk7Cj4gKwl2bWEtPmZlbmNlID0gTlVMTDsKPiArCj4gKwlm ZW5jZV93cml0ZShmZW5jZSwgTlVMTCk7Cj4gKwlmZW5jZS0+dm1hID0gTlVMTDsKCmZlbmNlX3Vw ZGF0ZShmZW5jZSwgTlVMTCk7IGhlcmUgcGxlYXNlIGluc3RlYWQgb2Ygb3Blbi1jb2RpbmcgaXQu IE9yIEknbQpraW5kYSBub3QgZm9sbG93aW5nIHdoeSB5b3UncmUgZG9pbmcgdGhpcz8KCj4gIH0K PiAgCj4gIHN0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfZmVuY2VfcmVnICpmZW5jZV9maW5kKHN0cnVj dCBpOTE1X2dndHQgKmdndHQpCj4gQEAgLTMzNyw4ICszNjYsNyBAQCBzdGF0aWMgc3RydWN0IGRy bV9pOTE1X2ZlbmNlX3JlZyAqZmVuY2VfZmluZChzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0KQo+ICAg Kgo+ICAgKiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiAg ICovCj4gLWludAo+IC1pOTE1X3ZtYV9waW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4g K2ludCBfX2k5MTVfdm1hX3Bpbl9mZW5jZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKCkkgZG9uJ3Qg KHlldCkgc2VlIGEgY2FsbGVyIG9mIHRoaXMgbmV3IF9fIHZlcnNpb24gLi4uCgo+ICB7Cj4gIAlz dHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gaTkxNV92bV90b19nZ3R0KHZtYS0+dm0pOwo+ICAJc3Ry dWN0IGk5MTVfdm1hICpzZXQgPSBpOTE1X2dlbV9vYmplY3RfaXNfdGlsZWQodm1hLT5vYmopID8g dm1hIDogTlVMTDsKPiBAQCAtMzQ5LDYgKzM3Nyw3IEBAIGk5MTVfdm1hX3Bpbl9mZW5jZShzdHJ1 Y3QgaTkxNV92bWEgKnZtYSkKPiAgCSAqIG11c3Qga2VlcCB0aGUgZGV2aWNlIGF3YWtlIHdoaWxz dCB1c2luZyB0aGUgZmVuY2UuCj4gIAkgKi8KPiAgCWFzc2VydF9ycG1fd2FrZWxvY2tfaGVsZChn Z3R0LT52bS5pOTE1KTsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmdndHQtPnZtLm11dGV4KTsK PiAgCj4gIAkvKiBKdXN0IHVwZGF0ZSBvdXIgcGxhY2UgaW4gdGhlIExSVSBpZiBvdXIgZmVuY2Ug aXMgZ2V0dGluZyByZXVzZWQuICovCj4gIAlpZiAodm1hLT5mZW5jZSkgewo+IEBAIC0zOTksMjcg KzQyOCwzNCBAQCBpOTE1X3Jlc2VydmVfZmVuY2Uoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUpCj4gIAlpbnQgY291bnQ7Cj4gIAlpbnQgcmV0Owo+ICAKPiAtCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+Z2d0dC52 bS5tdXRleCk7Cj4gIAo+ICAJLyogS2VlcCBhdCBsZWFzdCBvbmUgZmVuY2UgYXZhaWxhYmxlIGZv ciB0aGUgZGlzcGxheSBlbmdpbmUuICovCj4gIAljb3VudCA9IDA7Cj4gIAlsaXN0X2Zvcl9lYWNo X2VudHJ5KGZlbmNlLCAmZ2d0dC0+ZmVuY2VfbGlzdCwgbGluaykKPiAgCQljb3VudCArPSAhZmVu Y2UtPnBpbl9jb3VudDsKPiAtCWlmIChjb3VudCA8PSAxKQo+IC0JCXJldHVybiBFUlJfUFRSKC1F Tk9TUEMpOwo+ICsJaWYgKGNvdW50IDw9IDEpIHsKPiArCQlmZW5jZSA9IEVSUl9QVFIoLUVOT1NQ Qyk7Cj4gKwkJZ290byBvdXRfdW5sb2NrOwo+ICsJfQo+ICAKPiAgCWZlbmNlID0gZmVuY2VfZmlu ZChnZ3R0KTsKPiAgCWlmIChJU19FUlIoZmVuY2UpKQo+IC0JCXJldHVybiBmZW5jZTsKPiArCQln b3RvIG91dF91bmxvY2s7Cj4gIAo+ICAJaWYgKGZlbmNlLT52bWEpIHsKPiAgCQkvKiBGb3JjZS1y ZW1vdmUgZmVuY2UgZnJvbSBWTUEgKi8KPiAgCQlyZXQgPSBmZW5jZV91cGRhdGUoZmVuY2UsIE5V TEwpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwkJaWYgKHJl dCkgewo+ICsJCQlmZW5jZSA9IEVSUl9QVFIocmV0KTsKPiArCQkJZ290byBvdXRfdW5sb2NrOwo+ ICsJCX0KPiAgCX0KPiAgCj4gIAlsaXN0X2RlbCgmZmVuY2UtPmxpbmspOwo+ICsKPiArb3V0X3Vu bG9jazoKPiArCW11dGV4X3VubG9jaygmaTkxNS0+Z2d0dC52bS5tdXRleCk7Cj4gIAlyZXR1cm4g ZmVuY2U7Cj4gIH0KPiAgCj4gQEAgLTQzMSw5ICs0NjcsOSBAQCBpOTE1X3Jlc2VydmVfZmVuY2Uo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAqLwo+ICB2b2lkIGk5MTVfdW5yZXNl cnZlX2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKmZlbmNlKQo+ICB7Cj4gLQlsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZmZW5jZS0+Z2d0dC0+dm0uaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4gLQo+ICsJbXV0ZXhfbG9jaygmZmVuY2UtPmdndHQtPnZtLm11dGV4KTsKPiAgCWxpc3RfYWRk KCZmZW5jZS0+bGluaywgJmZlbmNlLT5nZ3R0LT5mZW5jZV9saXN0KTsKPiArCW11dGV4X3VubG9j aygmZmVuY2UtPmdndHQtPnZtLm11dGV4KTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTQ1MSw4ICs0 ODcsNyBAQCB2b2lkIGk5MTVfZ2VtX3Jldm9rZV9mZW5jZXMoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUpCj4gIAlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmk5MTUtPmdndHQ7Cj4gIAlp bnQgaTsKPiAgCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZpOTE1LT5kcm0uc3RydWN0X211dGV4 KTsKPiAtCj4gKwltdXRleF9sb2NrKCZnZ3R0LT52bS5tdXRleCk7Cj4gIAlmb3IgKGkgPSAwOyBp IDwgZ2d0dC0+bnVtX2ZlbmNlX3JlZ3M7IGkrKykgewo+ICAJCXN0cnVjdCBkcm1faTkxNV9mZW5j ZV9yZWcgKmZlbmNlID0gJmdndHQtPmZlbmNlX3JlZ3NbaV07Cj4gIAo+IEBAIC00NjEsNiArNDk2 LDcgQEAgdm9pZCBpOTE1X2dlbV9yZXZva2VfZmVuY2VzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1KQo+ICAJCWlmIChmZW5jZS0+dm1hKQo+ICAJCQlpOTE1X3ZtYV9yZXZva2VfbW1hcChm ZW5jZS0+dm1hKTsKPiAgCX0KPiArCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICB9 Cj4gIAo+ICAvKioKPiBAQCAtNDc2LDYgKzUxMiw3IEBAIHZvaWQgaTkxNV9nZW1fcmVzdG9yZV9m ZW5jZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIAlzdHJ1Y3QgaTkxNV9nZ3R0 ICpnZ3R0ID0gJmk5MTUtPmdndHQ7Cj4gIAlpbnQgaTsKPiAgCj4gKwltdXRleF9sb2NrKCZnZ3R0 LT52bS5tdXRleCk7Cj4gIAlmb3IgKGkgPSAwOyBpIDwgZ2d0dC0+bnVtX2ZlbmNlX3JlZ3M7IGkr Kykgewo+ICAJCXN0cnVjdCBkcm1faTkxNV9mZW5jZV9yZWcgKnJlZyA9ICZnZ3R0LT5mZW5jZV9y ZWdzW2ldOwo+ICAJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gcmVnLT52bWE7Cj4gQEAgLTQ5OCw2 ICs1MzUsNyBAQCB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZmVuY2VzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KQo+ICAJCWZlbmNlX3dyaXRlKHJlZywgdm1hKTsKPiAgCQlyZWctPnZtYSA9 IHZtYTsKPiAgCX0KPiArCW11dGV4X3VubG9jaygmZ2d0dC0+dm0ubXV0ZXgpOwo+ICB9Cj4gIAo+ ICAvKioKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmMKPiBpbmRleCBlZDRlMGZiNTU4ZjcuLjA0NWI3 NWQ3OWY2MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuYwo+IEBAIC04NjAsNyArODYwLDcg QEAgdm9pZCBpOTE1X3ZtYV9yZXZva2VfbW1hcChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgCXN0 cnVjdCBkcm1fdm1hX29mZnNldF9ub2RlICpub2RlID0gJnZtYS0+b2JqLT5iYXNlLnZtYV9ub2Rl Owo+ICAJdTY0IHZtYV9vZmZzZXQ7Cj4gIAo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmdm1hLT52 bS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEt PnZtLT5tdXRleCk7Cj4gIAo+ICAJaWYgKCFpOTE1X3ZtYV9oYXNfdXNlcmZhdWx0KHZtYSkpCj4g IAkJcmV0dXJuOwo+IEBAIC0xMDgyLDYgKzEwODIsOCBAQCBpbnQgaTkxNV92bWFfdW5iaW5kKHN0 cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAJCXJldHVybiAwOwo+ICAKPiAgCWlmIChpOTE1X3ZtYV9p c19tYXBfYW5kX2ZlbmNlYWJsZSh2bWEpKSB7Cj4gKwkJbXV0ZXhfbG9jaygmdm1hLT52bS0+bXV0 ZXgpOwo+ICsKPiAgCQkvKgo+ICAJCSAqIENoZWNrIHRoYXQgd2UgaGF2ZSBmbHVzaGVkIGFsbCB3 cml0ZXMgdGhyb3VnaCB0aGUgR0dUVAo+ICAJCSAqIGJlZm9yZSB0aGUgdW5iaW5kLCBvdGhlciBk dWUgdG8gbm9uLXN0cmljdCBuYXR1cmUgb2YgdGhvc2UKPiBAQCAtMTA5MSwxNiArMTA5MywxNCBA QCBpbnQgaTkxNV92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAJCWk5MTVfdm1h X2ZsdXNoX3dyaXRlcyh2bWEpOwo+ICAJCUdFTV9CVUdfT04oaTkxNV92bWFfaGFzX2dndHRfd3Jp dGUodm1hKSk7Cj4gIAo+IC0JCS8qIHJlbGVhc2UgdGhlIGZlbmNlIHJlZyBfYWZ0ZXJfIGZsdXNo aW5nICovCj4gLQkJcmV0ID0gaTkxNV92bWFfcHV0X2ZlbmNlKHZtYSk7Cj4gLQkJaWYgKHJldCkK PiAtCQkJcmV0dXJuIHJldDsKPiAtCj4gIAkJLyogRm9yY2UgYSBwYWdlZmF1bHQgZm9yIGRvbWFp biB0cmFja2luZyBvbiBuZXh0IHVzZXIgYWNjZXNzICovCj4gIAkJaTkxNV92bWFfcmV2b2tlX21t YXAodm1hKTsKPiArCQlpOTE1X3ZtYV9yZXZva2VfZmVuY2Uodm1hKTsKPiAgCj4gIAkJX19pOTE1 X3ZtYV9pb3VubWFwKHZtYSk7Cj4gIAkJdm1hLT5mbGFncyAmPSB+STkxNV9WTUFfQ0FOX0ZFTkNF Owo+ICsKPiArCQltdXRleF91bmxvY2soJnZtYS0+dm0tPm11dGV4KTsKPiAgCX0KPiAgCUdFTV9C VUdfT04odm1hLT5mZW5jZSk7Cj4gIAlHRU1fQlVHX09OKGk5MTVfdm1hX2hhc191c2VyZmF1bHQo dm1hKSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmggYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3ZtYS5oCj4gaW5kZXggZjA2ZDY2Mzc3MTA3Li40MjJk OTBjNjg2YjUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV92bWEuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdm1hLmgKPiBAQCAtMTkwLDYgKzE5MCw3 IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3ZtYV9zZXRfdXNlcmZhdWx0KHN0cnVjdCBpOTE1 X3ZtYSAqdm1hKQo+ICAKPiAgc3RhdGljIGlubGluZSB2b2lkIGk5MTVfdm1hX3Vuc2V0X3VzZXJm YXVsdChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgewo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgm dm1hLT52bS0+bXV0ZXgpOwo+ICAJcmV0dXJuIF9fY2xlYXJfYml0KEk5MTVfVk1BX1VTRVJGQVVM VF9CSVQsICZ2bWEtPmZsYWdzKTsKPiAgfQo+ICAKPiBAQCAtMzc4LDExICszNzksMjYgQEAgc3Rh dGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqaTkxNV92bWFfZmlyc3RfcGFnZShzdHJ1Y3QgaTkxNV92 bWEgKnZtYSkKPiAgICoKPiAgICogVHJ1ZSBpZiB0aGUgdm1hIGhhcyBhIGZlbmNlLCBmYWxzZSBv dGhlcndpc2UuCj4gICAqLwo+IC1pbnQgaTkxNV92bWFfcGluX2ZlbmNlKHN0cnVjdCBpOTE1X3Zt YSAqdm1hKTsKPiAraW50IF9faTkxNV92bWFfcGluX2ZlbmNlKHN0cnVjdCBpOTE1X3ZtYSAqdm1h KTsKPiArc3RhdGljIGlubGluZSBpbnQgaTkxNV92bWFfcGluX2ZlbmNlKHN0cnVjdCBpOTE1X3Zt YSAqdm1hKQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCW11dGV4X2xvY2soJnZtYS0+dm0tPm11 dGV4KTsKPiArCWVyciA9IF9faTkxNV92bWFfcGluX2ZlbmNlKHZtYSk7Cj4gKwltdXRleF91bmxv Y2soJnZtYS0+dm0tPm11dGV4KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICBpbnQg X19tdXN0X2NoZWNrIGk5MTVfdm1hX3B1dF9mZW5jZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSk7Cj4g K3ZvaWQgaTkxNV92bWFfcmV2b2tlX2ZlbmNlKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKPiAgCj4g IHN0YXRpYyBpbmxpbmUgdm9pZCBfX2k5MTVfdm1hX3VucGluX2ZlbmNlKHN0cnVjdCBpOTE1X3Zt YSAqdm1hKQo+ICB7Cj4gKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ2bWEtPnZtLT5tdXRleCk7Cj4g KwlHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19nZ3R0KHZtYSkpOwo+ICsKPiAgCUdFTV9CVUdfT04o dm1hLT5mZW5jZS0+cGluX2NvdW50IDw9IDApOwo+ICAJdm1hLT5mZW5jZS0+cGluX2NvdW50LS07 Cj4gIH0KPiBAQCAtMzk5LDggKzQxNSwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQKPiAgaTkxNV92 bWFfdW5waW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gIHsKPiAgCS8qIGxvY2tkZXBf YXNzZXJ0X2hlbGQoJnZtYS0+dm0tPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOyAqLwo+IC0JaWYg KHZtYS0+ZmVuY2UpCj4gKwlpZiAodm1hLT5mZW5jZSkgewoKSSB0aGluayB5b3UgbmVlZCB0aGUg bG9jayBoZXJlIG91dHNpZGUgb2Ygdm1hLT5mZW5jZS4gQXQgbGVhc3QgSQp1bmRlcnN0b29kIHRo ZSBmYW5jeSBuZXcgbG9ja2luZyBydWxlcyB0byBtZWFuIHRoYXQgdm1hLT5mZW5jZSBpcwpwcm90 ZWN0ZWQgYnkgdm1hLT52bS5tdXRleC4gU2luY2Ugdm1hJ3MgY2FuJ3QgbW92ZSBiZXR3ZWVuIHZt IHRoaXMgaXMKc2FmZS4KCldvdWxkIGJlIGdvb2QgdG8gdXBkYXRlIHRoZSBrZXJuZWxkb2MvY29t bWVudHMgZm9yIHRoYXQgYWNjb3JkaW5nbHkgdG9vLgoKPiArCQltdXRleF9sb2NrKCZ2bWEtPnZt LT5tdXRleCk7Cj4gIAkJX19pOTE1X3ZtYV91bnBpbl9mZW5jZSh2bWEpOwo+ICsJCW11dGV4X3Vu bG9jaygmdm1hLT52bS0+bXV0ZXgpOwo+ICsJfQo+ICB9Cj4gIAo+ICB2b2lkIGk5MTVfdm1hX3Bh cmtlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7CgpPayB0aGUgbG9ja2luZyBjaGFu Z2VzIGluIGk5MTVfZ2VtX2ZlbmNlX3JlZy5jIGxvb2sgZ29vZCwgYnV0IGdpdCBncmVwCnNheXMg dGhlcmUncyBtb3JlOgotIGRlc2NyaWJlX29iaiBpbiBpOTE1X2RlYnVnZnMuYyBvbmx5IHdhbnRz IGRldi0+c3RydWN0X211dGV4LCBidXQgcmVhbGx5CiAgd2FudHMgdm0ubXV0ZXggb24gdG9wIHRv byBub3cuIEF0IGxlYXN0IGZvciBnZ3R0LgotIGk5MTVfZ2VtX2ZlbmNlX3JlZ3NfaW5mbyBpbiBp OTE1X2RlYnVnZnMuYyBpcyBhbHJlYWR5IGZpeGVkIGluIHRoaXMKICBwYXRjaC4KLSBJJ3ZlIGln bm9yZWQgaTkxNV9ncHVfZXJyb3IuYyBhcyB1c3VhbCA6LSkKLSBpbnRlbF9kaXNwbGF5LmMgaXMg YW5ub3lpbmcsIHNpbmNlIHRoZSB3YXkgaXQgdHJpZXMgdG8gZmlndXJlIG91dAogIHdoZXRoZXIg aXQgZ290IGEgZmVuY2Ugb3Igbm90IGlzIHJhY3kuIFRoYXQgb25lIHByb2JhYmx5IG5lZWRzIHRo ZQogIF9faTkxNV92bWFfcGluX2ZlbmNlIHZlcnNpb24gdGhhdCBJIGRpZG4ndCBmaW5kIC4uLgot IGludGVsX2ZiYy5jIGxvb2tzIHNhZmUgZHVlIHRvIHRoZSBQTEFORV9IQVNfRkVOQ0UgZmxhZ3Mg KG1pbnVzIHRoZSBpc3N1ZQogIGluIGludGVsX2Rpc3BsYXkuYykKLSBJIGZvdW5kIG9uZSBtb3Jl IGFjY2VzcyB0byB2bWEtPmZlbmNlLT5pZCBpbiB0aGUgc2VsZnRlc3RzLCB0aGF0J3MKICByZWFs bHkgdGhlIHNhbWUgYXMgd2UgZG8gaW4gaTkxNV9ncHVfZXJyb3IuYy4gSWYgeW91IGZlZWwgbGlr ZSBpdCwgYQogIGk5MTVfdm1hX2ZlbmNlX2lkKCkgc3RhdGljIGlubGluZSB0aGF0IGRvZXMgdGhl IGNvcnJlY3QgUkVBRF9PTkNFIGRhbmNlCiAgb24gdm1hLT5mZW5jZSBjb3VsZCBiZSB1c2VmdWwg Zm9yIHRoZSBwYXJhbm9pZC4KCkFic29sdXRlbHkgbG92ZWQgdGhlIG5hbWluZyBjb2xsaXNpb24g d2l0aCBkbWFfZmVuY2UsIGFuZCBteSBncmVwIGZ1IGlzbid0Cmdvb2QgZW5vdWdoIHRvIGF2b2lk IHRoZXNlLiBTbyBwcm9iYWJseSBtaXNzZWQgc29tZSAoYnV0IHRyaWVkIHJhdGhlciBoYXJkCm5v dCB0bykuCgpCZXNpZGVzIHRoZXNlIHNtYWxsIG5pdHMgYW5kIHF1ZXN0aW9ucyBsb29rcyBhbGwg Z29vZC4KLURhbmllbAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwg Q29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==