From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH v2 07/20] drm/i915: Rework primary plane stuff slightly. Date: Wed, 08 Jul 2015 14:36:57 +0200 Message-ID: <559D1969.6070408@linux.intel.com> References: <1436252911-5703-1-git-send-email-maarten.lankhorst@linux.intel.com> <1436252911-5703-8-git-send-email-maarten.lankhorst@linux.intel.com> <20150707111655.GJ7568@phenom.ffwll.local> <559BDBF8.9060309@linux.intel.com> <20150708092712.GG7568@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 12E666EB0E for ; Wed, 8 Jul 2015 05:36:59 -0700 (PDT) In-Reply-To: <20150708092712.GG7568@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T3AgMDgtMDctMTUgb20gMTE6Mjcgc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+IE9uIFR1ZSwgSnVs IDA3LCAyMDE1IGF0IDA0OjAyOjMyUE0gKzAyMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+ PiBPcCAwNy0wNy0xNSBvbSAxMzoxNiBzY2hyZWVmIERhbmllbCBWZXR0ZXI6Cj4+PiBPbiBUdWUs IEp1bCAwNywgMjAxNSBhdCAwOTowODoxOEFNICswMjAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPj4+PiBNYWtlIHN1cmUgdGhlIHByaW1hcnkgcGxhbmUgaXMgc2V0IHVwIGNvcnJlY3RseS4g VGhpcyBpcyBkb25lIGJ5Cj4+Pj4gc2V0dGluZyBwbGFuZV9zdGF0ZS0+c3JjIGFuZCBwbGFuZV9z dGF0ZS0+Y3J0Yy4KPj4+Pgo+Pj4+IEFsbCBub24tcHJpbWFyeSBwbGFuZXMgZ2V0IGRpc2FibGVk Lgo+Pj4gVG9vIHRlcnNlIGNvbW1pdCBtZXNzYWdlLCBmYWlscyB0byBtZW50aW9uIHRoYXQgdGhp cyBpcyBhYm91dCBodwo+Pj4gcmVhZG91dCBjb21wbGV0ZWx5LiBBbHNvIHNob3VsZCBtZW50aW9u IHRoYXQgdGhpcyByZW1vdmVzIHRoZQo+Pj4gaW5pdGlhbF9wbGFuZXMgaGFjay4KPj4+Cj4+Pj4g U2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4 LmludGVsLmNvbT4KPj4+PiAtLS0KPj4+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRv bWljLmMgIHwgICA3IC0tCj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku YyB8IDE2NyArKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+ICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgfCAgIDIgLQo+Pj4+ICAzIGZpbGVzIGNoYW5n ZWQsIDYwIGluc2VydGlvbnMoKyksIDExNiBkZWxldGlvbnMoLSkKPj4+Pgo+Pj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2F0b21pYy5jCj4+Pj4gaW5kZXggNDI5Njc3YTExMWQ1Li5iNTkzNjEyYTkx N2QgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMK Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWMuYwo+Pj4+IEBAIC05 OCwxMyArOTgsNiBAQCBpbnQgaW50ZWxfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCj4+Pj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gIAl9Cj4+Pj4gIAo+Pj4+IC0JaWYgKGNy dGNfc3RhdGUgJiYKPj4+PiAtCSAgICBjcnRjX3N0YXRlLT5xdWlya3MgJiBQSVBFX0NPTkZJR19R VUlSS19JTklUSUFMX1BMQU5FUykgewo+Pj4+IC0JCXJldCA9IGRybV9hdG9taWNfYWRkX2FmZmVj dGVkX3BsYW5lcyhzdGF0ZSwgJm51Y2xlYXJfY3J0Yy0+YmFzZSk7Cj4+Pj4gLQkJaWYgKHJldCkK Pj4+PiAtCQkJcmV0dXJuIHJldDsKPj4+PiAtCX0KPj4+PiAtCj4+Pj4gIAlyZXQgPSBkcm1fYXRv bWljX2hlbHBlcl9jaGVja19wbGFuZXMoZGV2LCBzdGF0ZSk7Cj4+Pj4gIAlpZiAocmV0KQo+Pj4+ ICAJCXJldHVybiByZXQ7Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+Pj4+ IGluZGV4IGViN2MyZTI4MTliNy4uZmExMTAyMzkyZWNhIDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+Pj4+IEBAIC0xMDksNiArMTA5LDcgQEAgc3RhdGljIHZv aWQgc2tsX2luaXRfc2NhbGVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3IKPj4+PiAgCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRl KTsKPj4+PiAgc3RhdGljIGludCBpOXh4X2dldF9yZWZjbGsoY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCj4+Pj4gIAkJCSAgIGludCBudW1fY29ubmVjdG9ycyk7Cj4+ Pj4gK3N0YXRpYyB2b2lkIGludGVsX3ByZV9kaXNhYmxlX3ByaW1hcnkoc3RydWN0IGRybV9jcnRj ICpjcnRjKTsKPj4+PiAgCj4+Pj4gIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxf ZmluZF9lbmNvZGVyKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IHBpcGUp Cj4+Pj4gIHsKPj4+PiBAQCAtMjU4MiwxMSArMjU4MywxMiBAQCBpbnRlbF9maW5kX2luaXRpYWxf cGxhbmVfb2JqKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLAo+Pj4+ICB7Cj4+Pj4gIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfY3J0Yy0+YmFzZS5kZXY7Cj4+Pj4gIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+Pj4+IC0J c3RydWN0IGRybV9jcnRjICpjOwo+Pj4+IC0Jc3RydWN0IGludGVsX2NydGMgKmk7Cj4+Pj4gIAlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+Pj4+IC0Jc3RydWN0IGRybV9wbGFuZSAq cHJpbWFyeSA9IGludGVsX2NydGMtPmJhc2UucHJpbWFyeTsKPj4+PiAgCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiOwo+Pj4+ICsJc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSA9IGludGVsX2Ny dGMtPmJhc2UucHJpbWFyeTsKPj4+PiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcDsKPj4+PiArCXN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUgPQo+Pj4+ICsJCXRvX2ludGVsX3Bs YW5lX3N0YXRlKHByaW1hcnktPnN0YXRlKTsKPj4+PiAgCj4+Pj4gIAlpZiAoIXBsYW5lX2NvbmZp Zy0+ZmIpCj4+Pj4gIAkJcmV0dXJuOwo+Pj4+IEBAIC0yNjAyLDE2ICsyNjA0LDExIEBAIGludGVs X2ZpbmRfaW5pdGlhbF9wbGFuZV9vYmooc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMsCj4+ Pj4gIAkgKiBGYWlsZWQgdG8gYWxsb2MgdGhlIG9iaiwgY2hlY2sgdG8gc2VlIGlmIHdlIHNob3Vs ZCBzaGFyZQo+Pj4+ICAJICogYW4gZmIgd2l0aCBhbm90aGVyIENSVEMgaW5zdGVhZAo+Pj4+ICAJ ICovCj4+Pj4gLQlmb3JfZWFjaF9jcnRjKGRldiwgYykgewo+Pj4+IC0JCWkgPSB0b19pbnRlbF9j cnRjKGMpOwo+Pj4+IC0KPj4+PiAtCQlpZiAoYyA9PSAmaW50ZWxfY3J0Yy0+YmFzZSkKPj4+PiAt CQkJY29udGludWU7Cj4+Pj4gLQo+Pj4+IC0JCWlmICghaS0+YWN0aXZlKQo+Pj4+ICsJZm9yX2Vh Y2hfaW50ZWxfcGxhbmUoZGV2LCBwKSB7Cj4+Pj4gKwkJaWYgKHAtPmJhc2UudHlwZSAhPSBEUk1f UExBTkVfVFlQRV9QUklNQVJZKQo+Pj4+ICAJCQljb250aW51ZTsKPj4+PiAgCj4+Pj4gLQkJZmIg PSBjLT5wcmltYXJ5LT5mYjsKPj4+PiArCQlmYiA9IHAtPmJhc2Uuc3RhdGUtPmZiOwo+Pj4gVGhp cyBzZWVtcyB0byBicmVhayB0aGUgc2hhcmluZyBsb2dpYyBjb21wbGV0ZWx5OiBXZSB3YW50IHRv IGNoZWNrIHByaW1hcnkKPj4+IHBsYW5lcyBvZiBhbGwgb3RoZXIgY3J0Y3MgdG8gc2VlIHdoZXRo ZXIgd2UgY291bGQgbWVyZ2VkIHRoZSBmYiB0b2dldGhlci4KPj4+IFdlIGRvbid0IGV2ZW4gcmVh ZCBvdXQgcGxhbmUgc3RhdGUgZm9yIG5vbi1wcmltYXJ5IHBsYW5lcywgc28gdGhlIGJlbG93IGZi Cj4+PiBjaGVjayB3aWxsIG5ldmVyIGJlIG5vbi1OVUxMLgo+PiBJIHRob3VnaHQgdGhpcyB3YXMg YWJvdXQgbXVsdGlwbGUgcGxhbmVzIHNoYXJpbmcgdGhlIHNhbWUgZmIgd2l0aCBzYW1lIG9mZnNl dC4KPj4gQW5kIGFzIHN1Y2ggY2hlY2tpbmcgZm9yIHRoZSBjcnRjIGlzIHVubmVjZXNzYXJ5LCBm b3IgdGhlIGN1cnJlbnQgY3J0YyBpdCB3aWxsIGJlIGJlIE5VTEwgaGVyZS4KPj4KPj4gVGhpcyBv bmx5IHJlYWRzIG91dCB0aGUgY3VycmVudCBmYiwgbm90IGRpZmZlcmVudCBvbmVzLgo+Pgo+PiBB bmQgc2hhcmluZyB0aGUgc2FtZSBmYiB3aXRoIG90aGVyIGNydGMncyBpcyBkb25lIGluIGludGVs X2ZiZGV2X2luaXRfYmlvcy4KPiBUaGlzIGlzIGFib3V0IHNoYXJpbmcgdGhlIHNhbWUgZmIgYnV0 IGFjcm9zcyBkaWZmZXJlbnQgY3J0Y3MgLSBiaW9zIG5ldmVyCj4gZW5hYmxlcyBtb3JlIHRoYW4g dGhlIHByaW1hcnkgcGxhbmUgYW55d2F5LiBBbmQgeW91IGNhbid0IHJlbHkgdXBvbgo+IGZiZGV2 X2luaXRfYmlvcyBzaW5jZSB0aGF0J3Mgbm90IHJ1biBhdCBhbGwgd2hlbiBJOTE1X0ZCREVWPW4u Cj4KPiBTbyB5ZXMgd2l0aCBjdXJyZW50IGNvZGUgdGhpcyBsb29wIGhlcmUgcmVjb25zdHJ1Y3Qg dGhlIHNoYXJlZCBiZXR3ZWVuCj4gcHJpbWFyeSBwbGFuZXMgb24gZGlmZmVyZW50IGNydGNzIChp ZiB0aGUgc3RvbGVuIGFsbG9jYXRvciB0ZWxscyB1cyB0aGF0Cj4gb3VyIHJhbmdlIGlzIG9jY3Vw aWVkIGFscmVhZHkpLiBmYmRldl9pbml0X2Jpb3MganVzdCB0cmllcyB0byBjcmVhdGUgYQo+IGNv bmZpZyBtYXRjaGluZyB0aGUgb25lIHRoZSBiaW9zIGhhcyBzZXQgdXAgKGFuZCB0aGVuIHBpY2sg YSBzdWl0YWJsZSBmYgo+IGZvciBmYmNvbiBmcm9tIHRoZSBvbmVzIGFscmVhZHkgYWxsb2NhdGVk KS4KPgo+IE1heWJlIHdlIHNob3VsZCBleHRyYWN0IHRoaXMgYXMgdHJ5X3RvX2ZpbmRfc2hhcmVk X2ZiIG9yIHNpbWlsYXIgdG8gbWFrZQo+IHRoZSBjb2RlIHNlbGYtZXhwbGFuYXRvcnk/Cj4KPj4+ PiAgCQlpZiAoIWZiKQo+Pj4+ICAJCQljb250aW51ZTsKPj4+PiAgCj4+Pj4gQEAgLTI2MjIsMTgg KzI2MTksMjggQEAgaW50ZWxfZmluZF9pbml0aWFsX3BsYW5lX29iaihzdHJ1Y3QgaW50ZWxfY3J0 YyAqaW50ZWxfY3J0YywKPj4+PiAgCQl9Cj4+Pj4gIAl9Cj4+Pj4gIAo+Pj4+ICsJaW50ZWxfcHJl X2Rpc2FibGVfcHJpbWFyeSgmaW50ZWxfY3J0Yy0+YmFzZSk7Cj4+Pj4gKwl0b19pbnRlbF9wbGFu ZShwcmltYXJ5KS0+ZGlzYWJsZV9wbGFuZShwcmltYXJ5LCAmaW50ZWxfY3J0Yy0+YmFzZSk7Cj4+ Pj4gKwo+Pj4+ICAJcmV0dXJuOwo+Pj4+ICAKPj4+PiAgdmFsaWRfZmI6Cj4+Pj4gKwlkcm1fZnJh bWVidWZmZXJfcmVmZXJlbmNlKGZiKTsKPj4+PiArCXByaW1hcnktPmZiID0gcGxhbmVfc3RhdGUt PmJhc2UuZmIgPSBmYjsKPj4+PiArCXBsYW5lX3N0YXRlLT5iYXNlLmNydGMgPSBwcmltYXJ5LT5j cnRjID0gJmludGVsX2NydGMtPmJhc2U7Cj4+Pj4gKwo+Pj4+ICsJcGxhbmVfc3RhdGUtPmJhc2Uu c3JjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmNfeSA9IDA7Cj4+Pj4gKwlwbGFuZV9zdGF0ZS0+ YmFzZS5zcmNfdyA9IGZiLT53aWR0aCA8PCAxNjsKPj4+PiArCXBsYW5lX3N0YXRlLT5iYXNlLnNy Y19oID0gZmItPmhlaWdodCA8PCAxNjsKPj4+PiArCj4+Pj4gKwlwbGFuZV9zdGF0ZS0+YmFzZS5j cnRjX3ggPSBwbGFuZV9zdGF0ZS0+YmFzZS5zcmNfeSA9IDA7Cj4+Pj4gKwlwbGFuZV9zdGF0ZS0+ YmFzZS5jcnRjX3cgPSBmYi0+d2lkdGg7Cj4+Pj4gKwlwbGFuZV9zdGF0ZS0+YmFzZS5jcnRjX2gg PSBmYi0+aGVpZ2h0Owo+Pj4+ICsKPj4+PiArCXBsYW5lX3N0YXRlLT52aXNpYmxlID0gdHJ1ZTsK Pj4+PiAgCW9iaiA9IGludGVsX2ZiX29iaihmYik7Cj4+Pj4gIAlpZiAob2JqLT50aWxpbmdfbW9k ZSAhPSBJOTE1X1RJTElOR19OT05FKQo+Pj4+ICAJCWRldl9wcml2LT5wcmVzZXJ2ZV9iaW9zX3N3 aXp6bGUgPSB0cnVlOwo+Pj4+IC0KPj4+PiAtCXByaW1hcnktPmZiID0gZmI7Cj4+Pj4gLQlwcmlt YXJ5LT5jcnRjID0gcHJpbWFyeS0+c3RhdGUtPmNydGMgPSAmaW50ZWxfY3J0Yy0+YmFzZTsKPj4+ PiAtCXVwZGF0ZV9zdGF0ZV9mYihwcmltYXJ5KTsKPj4+IERvIHdlIHN0aWxsIGhhdmUgb3RoZXIg dXNlcnMgb2YgdXBkYXRlX3N0YXRlX2ZiIGxlZnQ/Cj4+IEp1c3QgdGhlIHBhZ2UgZmxpcCBoYW5k bGVyLgo+Pj4+IC0JaW50ZWxfY3J0Yy0+YmFzZS5zdGF0ZS0+cGxhbmVfbWFzayB8PSAoMSA8PCBk cm1fcGxhbmVfaW5kZXgocHJpbWFyeSkpOwo+Pj4+IC0Jb2JqLT5mcm9udGJ1ZmZlcl9iaXRzIHw9 IHRvX2ludGVsX3BsYW5lKHByaW1hcnkpLT5mcm9udGJ1ZmZlcl9iaXQ7Cj4+Pj4gIH0KPj4+PiAg Cj4+Pj4gIHN0YXRpYyB2b2lkIGk5eHhfdXBkYXRlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGRybV9j cnRjICpjcnRjLAo+Pj4+IEBAIC0xMTc2MSwzNCArMTE3NjgsNiBAQCBzdGF0aWMgYm9vbCBjaGVj a19lbmNvZGVyX2Nsb25pbmcoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+Pj4+ICAJ cmV0dXJuIHRydWU7Cj4+Pj4gIH0KPj4+PiAgCj4+Pj4gLXN0YXRpYyB2b2lkIGludGVsX2NydGNf Y2hlY2tfaW5pdGlhbF9wbGFuZXMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+Pj4+IC0JCQkJCSAg ICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4+Pj4gLXsKPj4+PiAtCXN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyA9Cj4+Pj4gLQkJdG9faW50ZWxfY3J0Y19z dGF0ZShjcnRjX3N0YXRlKTsKPj4+PiAtCXN0cnVjdCBkcm1fcGxhbmUgKnA7Cj4+Pj4gLQl1bnNp Z25lZCB2aXNpYmxlX21hc2sgPSAwOwo+Pj4+IC0KPj4+PiAtCWRybV9mb3JfZWFjaF9wbGFuZV9t YXNrKHAsIGNydGMtPmRldiwgY3J0Y19zdGF0ZS0+cGxhbmVfbWFzaykgewo+Pj4+IC0JCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlID0KPj4+PiAtCQkJZHJtX2F0b21pY19nZXRf ZXhpc3RpbmdfcGxhbmVfc3RhdGUoY3J0Y19zdGF0ZS0+c3RhdGUsIHApOwo+Pj4+IC0KPj4+PiAt CQlpZiAoV0FSTl9PTighcGxhbmVfc3RhdGUpKQo+Pj4+IC0JCQljb250aW51ZTsKPj4+PiAtCj4+ Pj4gLQkJaWYgKCFwbGFuZV9zdGF0ZS0+ZmIpCj4+Pj4gLQkJCWNydGNfc3RhdGUtPnBsYW5lX21h c2sgJj0KPj4+PiAtCQkJCX4oMSA8PCBkcm1fcGxhbmVfaW5kZXgocCkpOwo+Pj4+IC0JCWVsc2Ug aWYgKHRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlKS0+dmlzaWJsZSkKPj4+PiAtCQkJ dmlzaWJsZV9tYXNrIHw9IDEgPDwgZHJtX3BsYW5lX2luZGV4KHApOwo+Pj4+IC0JfQo+Pj4+IC0K Pj4+PiAtCWlmICghdmlzaWJsZV9tYXNrKQo+Pj4+IC0JCXJldHVybjsKPj4+PiAtCj4+Pj4gLQlw aXBlX2NvbmZpZy0+cXVpcmtzICY9IH5QSVBFX0NPTkZJR19RVUlSS19JTklUSUFMX1BMQU5FUzsK Pj4+PiAtfQo+Pj4+IC0KPj4+PiAgc3RhdGljIGludCBpbnRlbF9jcnRjX2F0b21pY19jaGVjayhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4+Pj4gIAkJCQkgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KmNydGNfc3RhdGUpCj4+Pj4gIHsKPj4+PiBAQCAtMTE4MTAsMTAgKzExNzg5LDYgQEAgc3RhdGlj IGludCBpbnRlbF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4+Pj4g IAkJIltDUlRDOiVpXSBtaXNtYXRjaCBiZXR3ZWVuIHN0YXRlLT5hY3RpdmUoJWkpIGFuZCBjcnRj LT5hY3RpdmUoJWkpXG4iLAo+Pj4+ICAJCWlkeCwgY3J0Yy0+c3RhdGUtPmFjdGl2ZSwgaW50ZWxf Y3J0Yy0+YWN0aXZlKTsKPj4+PiAgCj4+Pj4gLQkvKiBwbGFuZSBtYXNrIGlzIGZpeGVkIHVwIGFm dGVyIGFsbCBpbml0aWFsIHBsYW5lcyBhcmUgY2FsY3VsYXRlZCAqLwo+Pj4+IC0JaWYgKHBpcGVf Y29uZmlnLT5xdWlya3MgJiBQSVBFX0NPTkZJR19RVUlSS19JTklUSUFMX1BMQU5FUykKPj4+PiAt CQlpbnRlbF9jcnRjX2NoZWNrX2luaXRpYWxfcGxhbmVzKGNydGMsIGNydGNfc3RhdGUpOwo+Pj4+ IC0KPj4+PiAgCWlmIChtb2RlX2NoYW5nZWQgJiYgIWNydGNfc3RhdGUtPmFjdGl2ZSkKPj4+PiAg CQlpbnRlbF9jcnRjLT5hdG9taWMudXBkYXRlX3dtX3Bvc3QgPSB0cnVlOwo+Pj4+ICAKPj4+PiBA QCAtMTMxNTUsMTkgKzEzMTMwLDYgQEAgaW50ZWxfbW9kZXNldF9jb21wdXRlX2NvbmZpZyhzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4+Pj4gIAkJCWNvbnRpbnVlOwo+Pj4+ICAJCX0K Pj4+PiAgCj4+Pj4gLQkJaWYgKHBpcGVfY29uZmlnLT5xdWlya3MgJiBQSVBFX0NPTkZJR19RVUlS S19JTklUSUFMX1BMQU5FUykgewo+Pj4+IC0JCQlyZXQgPSBkcm1fYXRvbWljX2FkZF9hZmZlY3Rl ZF9wbGFuZXMoc3RhdGUsIGNydGMpOwo+Pj4+IC0JCQlpZiAocmV0KQo+Pj4+IC0JCQkJcmV0dXJu IHJldDsKPj4+PiAtCj4+Pj4gLQkJCS8qCj4+Pj4gLQkJCSAqIFdlIG91Z2h0IHRvIGhhbmRsZSBp OTE1LmZhc3Rib290IGhlcmUuCj4+Pj4gLQkJCSAqIElmIG5vIG1vZGVzZXQgaXMgcmVxdWlyZWQg YW5kIHRoZSBwcmltYXJ5IHBsYW5lIGhhcwo+Pj4+IC0JCQkgKiBhIGZiLCB1cGRhdGUgdGhlIG1l bWJlcnMgb2YgY3J0Y19zdGF0ZSBhcyBuZWVkZWQsCj4+Pj4gLQkJCSAqIGFuZCBydW4gdGhlIG5l Y2Vzc2FyeSB1cGRhdGVzIGR1cmluZyB2YmxhbmsgZXZhc2lvbi4KPj4+PiAtCQkJICovCj4+Pj4g LQkJfQo+Pj4+IC0KPj4+PiAgCQlpZiAoIW5lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkpIHsKPj4+ PiAgCQkJaWYgKCEocGlwZV9jb25maWctPnF1aXJrcyAmIFBJUEVfQ09ORklHX1FVSVJLX0lOSEVS SVRFRF9NT0RFKSkKPj4+PiAgCQkJCWNvbnRpbnVlOwo+Pj4+IEBAIC0xNTE0OSwyNSArMTUxMTEs MzAgQEAgdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4+ PiAgCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZGV2KTsKPj4+PiAgCj4+Pj4gIAlmb3JfZWFjaF9p bnRlbF9jcnRjKGRldiwgY3J0Yykgewo+Pj4+IC0JCWlmICghY3J0Yy0+YWN0aXZlKQo+Pj4+ICsJ CXN0cnVjdCBpbnRlbF9pbml0aWFsX3BsYW5lX2NvbmZpZyBwbGFuZV9jb25maWc7Cj4+Pj4gKwkJ c3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4+Pj4gKwo+Pj4+ICsJCWlmICghY3J0Yy0+YmFzZS5z dGF0ZS0+YWN0aXZlKQo+Pj4+ICAJCQljb250aW51ZTsKPj4+PiAgCj4+Pj4gKwkJLyogZGlzYWJs ZSBhbGwgbm9uLXByaW1hcnkgcGxhbmVzICovCj4+Pj4gKwkJZHJtX2Zvcl9lYWNoX3BsYW5lX21h c2socGxhbmUsIGRldiwKPj4+PiArCQkJCQljcnRjLT5iYXNlLnN0YXRlLT5wbGFuZV9tYXNrKQo+ Pj4+ICsJCQlpZiAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKPj4+PiAr CQkJCXRvX2ludGVsX3BsYW5lKHBsYW5lKS0+ZGlzYWJsZV9wbGFuZShwbGFuZSwgJmNydGMtPmJh c2UpOwo+Pj4+ICsKPj4+PiArCQljcnRjLT5iYXNlLnN0YXRlLT5wbGFuZV9tYXNrICY9Cj4+Pj4g KwkJCTEgPDwgZHJtX3BsYW5lX2luZGV4KGNydGMtPmJhc2UucHJpbWFyeSk7Cj4+Pj4gKwo+Pj4+ ICsJCXBsYW5lX2NvbmZpZy5mYiA9IE5VTEw7Cj4+Pj4gKwkJZGV2X3ByaXYtPmRpc3BsYXkuZ2V0 X2luaXRpYWxfcGxhbmVfY29uZmlnKGNydGMsCj4+Pj4gKwkJCQkJCQkgICAmcGxhbmVfY29uZmln KTsKPj4+PiArCj4+Pj4gIAkJLyoKPj4+PiAtCQkgKiBOb3RlIHRoYXQgcmVzZXJ2aW5nIHRoZSBC SU9TIGZiIHVwIGZyb250IHByZXZlbnRzIHVzCj4+Pj4gLQkJICogZnJvbSBzdHVmZmluZyBvdGhl ciBzdG9sZW4gYWxsb2NhdGlvbnMgbGlrZSB0aGUgcmluZwo+Pj4+IC0JCSAqIG9uIHRvcC4gIFRo aXMgcHJldmVudHMgc29tZSB1Z2xpbmVzcyBhdCBib290IHRpbWUsIGFuZAo+Pj4+IC0JCSAqIGNh biBldmVuIGFsbG93IGZvciBzbW9vdGggYm9vdCB0cmFuc2l0aW9ucyBpZiB0aGUgQklPUwo+Pj4+ IC0JCSAqIGZiIGlzIGxhcmdlIGVub3VnaCBmb3IgdGhlIGFjdGl2ZSBwaXBlIGNvbmZpZ3VyYXRp b24uCj4+Pj4gKwkJICogSWYgdGhlIGZiIGlzIHNoYXJlZCBiZXR3ZWVuIG11bHRpcGxlIGhlYWRz LCB3ZSdsbAo+Pj4+ICsJCSAqIGp1c3QgZ2V0IHRoZSBmaXJzdCBvbmUuCj4+Pj4gIAkJICovCj4+ Pj4gLQkJaWYgKGRldl9wcml2LT5kaXNwbGF5LmdldF9pbml0aWFsX3BsYW5lX2NvbmZpZykgewo+ Pj4+IC0JCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfaW5pdGlhbF9wbGFuZV9jb25maWcoY3J0YywK Pj4+PiAtCQkJCQkJCSAgICZjcnRjLT5wbGFuZV9jb25maWcpOwo+Pj4+IC0JCQkvKgo+Pj4+IC0J CQkgKiBJZiB0aGUgZmIgaXMgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgaGVhZHMsIHdlJ2xsCj4+ Pj4gLQkJCSAqIGp1c3QgZ2V0IHRoZSBmaXJzdCBvbmUuCj4+Pj4gLQkJCSAqLwo+Pj4+IC0JCQlp bnRlbF9maW5kX2luaXRpYWxfcGxhbmVfb2JqKGNydGMsICZjcnRjLT5wbGFuZV9jb25maWcpOwo+ Pj4+IC0JCX0KPj4+PiArCQlpbnRlbF9maW5kX2luaXRpYWxfcGxhbmVfb2JqKGNydGMsICZwbGFu ZV9jb25maWcpOwo+Pj4+ICAJfQo+Pj4+ICB9Cj4+PiBPayBJIGxvb2tlZCBhdCB0aGlzIGFuZCB0 aGUgcmVhZG91dF9wbGFuZV9zdGF0ZSBmdW5jdGlvbiBhbmQgSSB0aGluayB3ZQo+Pj4gaGF2ZSBh IGJpdCBhIGNvbmZ1c2lvbiBhYm91dCByZXNwb25zaWJpbGl0aWVzIGhlcmUuIFRoZSBiaWcgdGhp bmcgaXMgdGhhdAo+Pj4gb25seSBkcml2ZXIgbG9hZCBjYXJlcyBhYm91dCByZWNvbnN0cnVjdGlu ZyBwbGFuZSBzdGF0ZSBhY2N1cmF0ZWx5LCBmb3IKPj4+IHJlc3VtZSBhbmQgbGlkIG5vdGlmaWVy IHdlIGp1c3Qgd2FudCB0byBtYWtlIHN1cmUgdGhhdCB3ZSB1cGRhdGUgdGhlCj4+PiBwbGFuZXMu IEFuZCB0aGF0IGNvdWxkIGJlIGFjaGlldmVkIGJ5IHVuY29uZGl0aW9uYWxseSBzZXR0aW5nCj4+ PiBjcnRjX3N0YXRlLT5wbGFuZXNfY2hhbmdlZC4gV2UgYWxyZWFkeSBoYXZlIGFsbCB0aGUgcGxh bmUgc3RhdGVzIHdoZW4KPj4+IHJlc3RvcmluZyBzdGF0ZSBhbnl3YXkuCj4+IE9uIHJlc3VtZSBJ IGZvcmNlIGEgbW9kZXNldCBmb3IgdGhpcyByZWFzb24sIGFuZCBzZXQgdGhlIHBsYW5lX21hc2su Cj4+IFRoaXMgbWFrZXMgc3VyZSBhbnkgcGxhbmUgZ2V0cyBkaXNhYmxlZC4KPj4KPj4gVGhlIG1v ZGVzZXQgd2lsbCBhbHNvIGFkZCBhbGwgcGxhbmVzLCB3aGljaCBzZXRzIHBsYW5lc19jaGFuZ2Vk IGlmIG5lZWRlZC4KPiBZZWFoIHRoYXQncyB3aGF0IEkgaGFkIGluIG1pbmQgZm9yIHJlc3VtZTog V2UgbmVlZCB0byBncmFiIGFsbCBwbGFuZQo+IHN0YXRlcyBhbnl3YXkgKHRvIGJlIGFibGUgdG8g cmVzdG9yZSB0aGUgb2xkIGNvbmZpZyksIHNvIGF0IG1vc3Qgd2UgbmVlZAo+IHRvIHNldCBhIHBs YW5lc19jaGFuZ2VkIHRvIG1ha2Ugc3VyZSB0aGUgdXBkYXRlIGhhcHBlbnMuCj4KPj4gQSBjb21t aXQgb24gaXRzIG93biBkb2Vzbid0IGRvIHRoaXMsIHdoZW4gYSBwbGFuZSBkb2Vzbid0IGhhdmUg YSBmYgo+PiBpdCB3b24ndCBkaXNhYmxlIGl0IG9uIGl0cyBvd24gYmVjYXVzZSB0aGUgcGxhbmUn cyBhc3N1bWVkIHRvIGJlIGRpc2FibGVkCj4+IHdoZW4gb2xkX3BsYW5lX3N0YXRlLT5mYiA9PSBO VUxMIGFuZCBuZXdfcGxhbmVfc3RhdGUtPmZiID09IE5VTEwuCj4gTm90IGEgcHJvYmxlbSBzaW5j ZSB0b28gbWFueSBwbGFuZXMgZG9lc24ndCBzZWVtIHRvIGhhcHBlbiBpbiByZWFsaXR5LiBBdAo+ IGxlYXN0IHdlIGRpZG4ndCBoYXZlIGNvZGUgdG8gZm9yY2UtZGlzYWJsZSBwbGFuZXMgb24gcmVz dW1lL2xpZF9ub3RpZnkKPiBiZWZvcmUsIHdoaWNoIG1lYW5zIHdlIGRvbid0IHN1ZGRlbmx5IG5l ZWQgaXQgbm93LiBzYW5pdGl6ZV8qIHNob3VsZCBvbmx5Cj4gZml4IHVwIHN0dWZmIHRoYXQncyBi cm9rZW4gZm9yIGk5MTUgb24gcmVhbC13b3JsZCBtYWNoaW5lcywgbm90IHdoYXQgYWxsCj4gY291 bGQgYmUgcG9zc2libGUuCj4KPj4gSSBkb24ndCBrbm93IGlmIEkgY2FuIGNhbGwgZGlzYWJsZV9w bGFuZSBpbiB0aGlzIGxvb3AgZWl0aGVyLCBiZWNhdXNlIHRoYXQgd2lsbAo+PiB1cGRhdGUgdGhl IHdhdGVybWFya3Mgb24gc2t5bGFrZSB3aXRoIHRoZSBjYWxsIHRvIGludGVsX3VwZGF0ZV9zcHJp dGVfd2F0ZXJtYXJrcwo+PiBjYWxsaW5nIHNrbF91cGRhdGVfc3ByaXRlX3dtIGNhbGxpbmcgc2ts X3VwZGF0ZV93bS4KPiBIbSB0aGF0IHNvdW5kcyBsaWtlIGEgYnVnIHN0aWxsLiBNYXliZSBqdXN0 IGZvcmdldCBhYm91dCBkaXNhYmxpbmcKPiBub24tcHJpbWFyeSBwbGFuZXMgZm9yIG5vdyBvbiBk cml2ZXIgbG9hZD8gV2UgZG9uJ3Qgc2VlbSB0byBoYXZlIGFueSBuZWVkCj4gY3VycmVudGx5IGVp dGhlci4gQW5kIGZvciBwcmltYXJ5IHBsYW5lcyBtYXliZSB3ZSBjYW4gaGFyZC1jb2RlIHNvbWV0 aGluZwo+IHdoaWNoIGp1c3QgY2xlYXJzIHRoZSBQTEFORV9FTkFCTEUgYml0IGFuZCBkb2VzIG5v dGhpbmcgZWxzZT8gIEtpbmQgb2YgYQo+IHN1cGVyLWxvdy1sZXZlbCBwbGFuZSBmb3JjZSBkaXNh YmxlLiBTaW1pbGFyIHRvIGhvdyB3ZSBoYXZlIGEgc3BlY2lhbAo+IGZ1bmN0aW9uIHRvIGZvcmNl LWRpc2FibGUgdGhlIHZnYSBwbGFuZS4KPgo+PiBXZSBkb24ndCBldmVuIGhhdmUgYW55IHdhdGVy bWFya3MgY2FsY3VsYXRlZCB5ZXQsIHNvIHRoYXQgd2lsbCBicmVhay4KPj4+IFRoYXQgbWVhbnMg d2Ugc2hvdWxkIG1vdmUgcmVhZG91dF9wbGFuZV9zdGF0ZSBpbnRvIHRoZSBhYm92ZSBsb29wLiBX aGljaAo+Pj4gdGhlbiBnZXRzIGEgYml0IHRvbyBiaWcsIHNvIGJldHRlciBleHRyYWN0IHRoaXMg aW50byBhCj4+PiBpbnRlbF9yZWNvbnN0cnVjdF9wbGFuZV9zdGF0ZSBvciBzaW1pbGFyLiBUaGlz IGZ1bmN0aW9uIHNob3VsZCB0aGVuIGRvIGFsbAo+Pj4gdGhlIHBsYW5lIHN0YXRlIHJlY29uc3Ry dWN0aW9uLgo+Pj4KPj4+IFRoYXQgYWxzbyBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIHBsYXkgdHJp Y2tzIHdpdGggcGxhbmVfbWFzayBsaWtlIHlvdSBkby4KPj4+IFdlIHNpbXBseSByZWNvbnN0cnVj dCB0aGUgcHJpbWFyeSBwbGFuZSAoaWYgcG9zc2libGUpIGFuZCBmb3JjZS1kaXNhYmxlCj4+PiBh bGwgdGhlIG90aGVycy4gU2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgYXQgZHJpdmVyIGxvYWQgdGhl cmUncyBubyBuZWVkIHRvCj4+PiBjbGVhciBvdXQgYW55IHN0YXRlIGZvciBzcHJpdGUvY3Vyc29y cyBzaW5jZSBpdCdzIGFscmVhZHkgZnVsbHkgY2xlYXJlZC4KPj4+Cj4+PiBJIHRoaW5rIHRoaXMg d2F5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGhhdmUgZXZlcnl0aGluZyBpbiBvbmUgcGxhY2UsIGFu ZAo+Pj4gdGhhdCBzaG91bGQgYWxsb3cgdXMgdG8gc2ltcGxpZnkgdGhpbmdzIGEgbG90Lgo+PiBJ IGRvIHRoaXMgdHJpY2sgZm9yIGF0b21pYyByZXN1bWUsIHdlIGNhbid0IGFsbG9jYXRlIHRoZSBv cmlnaW5hbCBmYiBpbiB0aGF0IGNhc2UKPj4gYnV0IEkgc3RpbGwgd2FudCB0byBzYW5pdGl6ZSBl dmVyeXRoaW5nLiBUaGlzIGVpdGhlciBoYXBwZW5zIGJlY2F1c2UKPj4gYSBuZXcgcHJpbWFyeSBm YiBnZXRzIGNvbW1pdHRlZCBvciB0aGUgcHJpbWFyeSBmYiBnZXRzIGRpc2FibGVkLgo+IFdlbGwg b24gcmVzdW1lIHdlIGRvbid0IGNhcmUgYXQgYWxsIGFib3V0IHRoZSBvcmlnaW5hbCBmYiBmb3Ig dHdvIHJlYXNvbnM6Cj4gLSBBbnl0aGluZyByZW1vdGVseSBtb2Rlcm4gcmVzdW1lcyB3aXRoIGV2 ZXJ5dGhpbmcgb2ZmLgo+IC0gV2Ugb25seSByZWNvdmVyIHRoZSBpbml0aWFsIHBsYW5lIGZyb20g dGhlIGJpb3MgdG8gZW5zdXJlIGJvb3QtdXAgaXMKPiAgIGNvbXBsZXRlbHkgZmxpY2tlci1mcmVl LiBJZiB3ZSBkb24ndCByZXNlcnZlIHRoYXQgd2UnbGwgYWxsb2NhdGUgcmluZ3MKPiAgIGFuZCBv dGhlciBncHUgb2JqZWN0cyBpbiB0aGVyZSB3aGljaCBpc24ndCBwcmV0dHkuCj4KPiBJIGRvbid0 IHRoaW5rIHdlIG5lZWQgdG8gc2FuaXRpemUgcGxhbmVzIGVpdGhlciBhcyBsb25nIGFzIHdlIGZv cmNlIGEgZnVsbAo+IHBsYW5lIHVwZGF0ZSBvbiByZXN1bWUgKGJ5IGZvcmNpbmcgcGxhbmVzX2No YW5nZWQgb3Igc2ltaWxhcikuClRoaXMgZG9lc24ndCB3b3JrLgoKSWYgYSBwbGFuZSBoYXMgbm8g ZmIgaW4gc29mdHdhcmUgeW91IHdvbid0IHVwZGF0ZSBpdCB3aXRoIGNvbW1pdF9wbGFuZXNfb25f Y3J0YywKYmVjYXVzZSBvbGRfc3RhdGUtPmNydGMgYW5kIHBsYW5lX3N0YXRlLT5jcnRjIGFyZSBi b3RoIE5VTEwuCj4gQW5kIGZvciB0aGUgbGlkX3Jlc3RvcmUgY2FzZSB0aGUgcHJvYmxlbSBoYXNu J3QgYmVlbiB0aGF0IHRoZSBiaW9zIGNoYW5nZWQKPiB0aGUgcGxhbmUgc3RhdGUgcmVhbGx5LCBi dXQgdGhhdCBpdCBqdXN0IHdlbnQgYWhlYWQgYW5kIGRpc2FibGVkCj4gZXZlcnl0aGluZyBvbiBp dHMgb3duLiBUaGF0IHdpbGwgcmVzdWx0IGluIGEgY3J0Y19lbmFibGUgd2hpY2ggd2lsbAo+IHJl c3RvcmUgZXZlcnl0aGluZyBjb3JyZWN0bHkuCj4KPiBJbW8gd2UgZG9uJ3QgbmVlZCB0byBoYXZl IGEgcGVyZmVjdCBzYW5pdGl6ZSBmb3IgZXZlcnl0aGluZywgdGhpcyBjb2RlCj4gcmVhbGx5IGp1 c3QgZml4ZXMgdXAgd2hhdCdzIGFjdHVhbGx5IGJlZW4gYnJva2VuIGluIHJlYWwtd29ybGQgbWFj aGluZXMKPiBvdXQgdGhlcmUuIFRoYXQga2luZCBvZiByZWFsLXdvcmxkIHRlc3RpbmcgaXMgYWxz byB3aHkgSSB3YW50IHRvIGNoYW5nZSBhcwo+IGxpdHRsZSBhcyBwb3NzaWJsZSBpbiB0aGUgc2Fu aXRpemVfKiBmdW5jdGlvbnMuCj4KPj4+PiBAQCAtMTU0MDQsNDcgKzE1MzcxLDMwIEBAIHN0YXRp YyB2b2lkIHJlYWRvdXRfcGxhbmVfc3RhdGUoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4+Pj4g IAlzdHJ1Y3QgaW50ZWxfcGxhbmUgKnA7Cj4+Pj4gIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpk cm1fcGxhbmVfc3RhdGU7Cj4+Pj4gIAlib29sIGFjdGl2ZSA9IGNydGNfc3RhdGUtPmJhc2UuYWN0 aXZlOwo+Pj4+ICsJYm9vbCB3cm9uZ19wbGFuZTsKPj4+PiAgCj4+Pj4gLQlpZiAoYWN0aXZlKSB7 Cj4+Pj4gLQkJY3J0Y19zdGF0ZS0+cXVpcmtzIHw9IFBJUEVfQ09ORklHX1FVSVJLX0lOSVRJQUxf UExBTkVTOwo+Pj4+IC0KPj4+PiAtCQkvKiBhcHBseSB0byBwcmV2aW91cyBzdyBzdGF0ZSB0b28g Ki8KPj4+PiAtCQl0b19pbnRlbF9jcnRjX3N0YXRlKGNydGMtPmJhc2Uuc3RhdGUpLT5xdWlya3Mg fD0KPj4+PiAtCQkJUElQRV9DT05GSUdfUVVJUktfSU5JVElBTF9QTEFORVM7Cj4+Pj4gLQl9Cj4+ Pj4gKwl3cm9uZ19wbGFuZSA9IGFjdGl2ZSAmJiAhaW50ZWxfY2hlY2tfcGxhbmVfbWFwcGluZyhj cnRjKTsKPj4+PiArCWlmICh3cm9uZ19wbGFuZSkKPj4+PiArCQljcnRjLT5waXBlID0gIWNydGMt PnBpcGU7Cj4+Pj4gIAo+Pj4+ICAJZm9yX2VhY2hfaW50ZWxfcGxhbmUoY3J0Yy0+YmFzZS5kZXYs IHApIHsKPj4+PiAtCQlib29sIHZpc2libGUgPSBhY3RpdmU7Cj4+Pj4gLQo+Pj4+ICAJCWlmIChj cnRjLT5waXBlICE9IHAtPnBpcGUpCj4+Pj4gIAkJCWNvbnRpbnVlOwo+Pj4+ICAKPj4+PiAgCQlk cm1fcGxhbmVfc3RhdGUgPSBwLT5iYXNlLnN0YXRlOwo+Pj4+ICAKPj4+PiAtCQkvKiBQbGFuZSBz Y2FsZXIgc3RhdGUgaXMgbm90IHRvdWNoZWQgaGVyZS4gVGhlIGZpcnN0IGF0b21pYwo+Pj4+IC0J CSAqIGNvbW1pdCB3aWxsIHJlc3RvcmUgYWxsIHBsYW5lIHNjYWxlcnMgdG8gaXRzIG9sZCBzdGF0 ZS4KPj4+PiAtCQkgKi8KPj4+PiAtCj4+Pj4gLQkJaWYgKGFjdGl2ZSAmJiBwLT5iYXNlLnR5cGUg PT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkgewo+Pj4+IC0JCQl2aXNpYmxlID0gcHJpbWFyeV9n ZXRfaHdfc3RhdGUoY3J0Yyk7Cj4+Pj4gLQkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKGRybV9wbGFu ZV9zdGF0ZSktPnZpc2libGUgPSB2aXNpYmxlOwo+Pj4+IC0JCX0gZWxzZSB7Cj4+Pj4gLQkJCS8q Cj4+Pj4gLQkJCSAqIHVua25vd24gc3RhdGUsIGFzc3VtZSBpdCdzIG9mZiB0byBmb3JjZSBhIHRy YW5zaXRpb24KPj4+PiAtCQkJICogdG8gb24gd2hlbiBjYWxjdWxhdGluZyBzdGF0ZSBjaGFuZ2Vz Lgo+Pj4+IC0JCQkgKi8KPj4+PiArCQlpZiAocC0+YmFzZS50eXBlID09IERSTV9QTEFORV9UWVBF X1BSSU1BUlkpCj4+Pj4gKwkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKGRybV9wbGFuZV9zdGF0ZSkt PnZpc2libGUgPQo+Pj4+ICsJCQkJcHJpbWFyeV9nZXRfaHdfc3RhdGUoY3J0Yyk7Cj4+Pj4gKwkJ ZWxzZQo+Pj4+ICAJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShkcm1fcGxhbmVfc3RhdGUpLT52aXNp YmxlID0gZmFsc2U7Cj4+Pj4gLQkJfQo+Pj4+ICAKPj4+PiAtCQlpZiAodmlzaWJsZSkgewo+Pj4+ IC0JCQljcnRjX3N0YXRlLT5iYXNlLnBsYW5lX21hc2sgfD0KPj4+PiAtCQkJCTEgPDwgZHJtX3Bs YW5lX2luZGV4KCZwLT5iYXNlKTsKPj4+PiAtCQl9IGVsc2UgaWYgKGNydGNfc3RhdGUtPmJhc2Uu c3RhdGUpIHsKPj4+PiAtCQkJLyogTWFrZSB0aGlzIHVuY29uZGl0aW9uYWwgZm9yIGF0b21pYyBo dyByZWFkb3V0LiAqLwo+Pj4+IC0JCQljcnRjX3N0YXRlLT5iYXNlLnBsYW5lX21hc2sgJj0KPj4+ PiAtCQkJCX4oMSA8PCBkcm1fcGxhbmVfaW5kZXgoJnAtPmJhc2UpKTsKPj4+PiAtCQl9Cj4+Pj4g KwkJY3J0Y19zdGF0ZS0+YmFzZS5wbGFuZV9tYXNrIHw9Cj4+Pj4gKwkJCTEgPDwgZHJtX3BsYW5l X2luZGV4KCZwLT5iYXNlKTsKPj4+PiAgCX0KPj4+PiArCj4+Pj4gKwlpZiAod3JvbmdfcGxhbmUp Cj4+Pj4gKwkJY3J0Yy0+cGlwZSA9ICFjcnRjLT5waXBlOwo+Pj4+ICB9Cj4+Pj4gIAo+Pj4+ICBz dGF0aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3JlYWRvdXRfaHdfc3RhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKPj4+PiBAQCAtMTU2NjQsNiArMTU2MTQsOSBAQCB2b2lkIGludGVsX21vZGVzZXRf Z2VtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4+PiAgCQkJdXBkYXRlX3N0YXRlX2Zi KGMtPnByaW1hcnkpOwo+Pj4+ICAJCQljLT5zdGF0ZS0+cGxhbmVfbWFzayAmPSB+KDEgPDwgZHJt X3BsYW5lX2luZGV4KGMtPnByaW1hcnkpKTsKPj4+PiAgCQl9Cj4+Pj4gKwkJZWxzZQo+Pj4+ICsJ CQlvYmotPmZyb250YnVmZmVyX2JpdHMgfD0KPj4+PiArCQkJCXRvX2ludGVsX3BsYW5lKGMtPnBy aW1hcnkpLT5mcm9udGJ1ZmZlcl9iaXQ7Cj4+PiBUaGlzIGlzIHBhcnQgb2YgcGxhbmUgc3RhdGUg cmVjb25zdHJ1Y3Rpb24sIG5vIG5lZWQgdG8gbW92ZSBpdC4gVGhlIG9ubHkKPj4+IHJlYXNvbiB3 ZSBoYXZlIHRvIHBpbiBsYXRlIGlzIHRoYXQgZ2VtIGlzbid0IGluaXRpYWxpemVkIHlldCBmdWxs eSB3aGVuIHdlCj4+PiB3YW50IHRvIHJlY29uc3RydWN0IHRoZSBtb2Rlc2V0IHN0YXRlLiBBbmQg dGhhdCBwaW5uaW5nIHNob3VsZG4ndCBldmVyCj4+PiBmYWlsLCBpdCBqdXN0IGluY3JlbWVudHMg cGluX2NvdW50IGFuZCB3cml0ZXMgdGhlIHB0ZXMgKGFnYWluKS4KPj4gV2h5IGJvdGhlciBoYW5k bGluZyB0aGUgcmV0dXJuIHZhbHVlIGF0IGFsbCB0aGVuPwo+IFRvIHByaW50IHRoZSB3YXJuaW5n LiBJIHRoaW5rIGV2ZW4gdGhlIGNsZWFudXAgaXMgcG9pbnRsZXNzIHNpbmNlIGF0IHdvcnN0Cj4g d2UnbGwgdW5kZXJydW4gdGhlIHBpbiBjb3VudCwgYW5kIHdlIGhhdmUgcHJvdGVjdGlvbiBmb3Ig dGhhdCBhbHJlYWR5Cj4gKGFnYWluIHdpdGggYSBsb3VkIHdhcm5pbmcpLiBJZiB5b3Ugd2FudCB5 b3UgY2FuIHJlbW92ZSB0aGF0IGNvZGUuCk9rLgoKfk1hYXJ0ZW4KCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==