From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH i-g-t v2 02/14] lib/igt_kms: Rework plane properties to be more atomic, v5. Date: Thu, 19 Oct 2017 11:44:32 +0200 Message-ID: <114d694a-fd87-96ef-0e2f-614cf07875a3@linux.intel.com> References: <20171012115435.18880-1-maarten.lankhorst@linux.intel.com> <20171012115435.18880-3-maarten.lankhorst@linux.intel.com> <1508404114.3274.119.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9F1456EA1B for ; Thu, 19 Oct 2017 09:44:35 +0000 (UTC) In-Reply-To: <1508404114.3274.119.camel@intel.com> 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: mika.kahola@intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T3AgMTktMTAtMTcgb20gMTE6MDggc2NocmVlZiBNaWthIEthaG9sYToKPiBPbiBUaHUsIDIwMTct MTAtMTIgYXQgMTM6NTQgKzAyMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+PiBJbiB0aGUg ZnV0dXJlIEkgd2FudCB0byBhbGxvdyB0ZXN0cyB0byBjb21taXQgbW9yZSBwcm9wZXJ0aWVzLAo+ PiBidXQgZm9yIHRoaXMgdG8gd29yayBJIGhhdmUgdG8gZml4IGFsbCBwcm9wZXJ0aWVzIHRvIHdv cmsgYmV0dGVyCj4+IHdpdGggYXRvbWljIGNvbW1pdC4gSW5zdGVhZCBvZiBzcGVjaWFsIGNhc2lu ZyBlYWNoCj4+IHByb3BlcnR5IG1ha2UgYSBiaXRtYXNrIGZvciBhbGwgcHJvcGVydHkgY2hhbmdl ZCBmbGFncywgYW5kIHRyeSB0bwo+PiBjb21taXQgYWxsIHByb3BlcnRpZXMuCj4+Cj4+IENoYW5n ZXMgc2luY2UgdjE6Cj4+IC0gUmVtb3ZlIHNwZWNpYWwgZHVtcGluZyBvZiBzcmMgYW5kIGNydGMg Y29vcmRpbmF0ZXMuCj4+IC0gRHVtcCBhbGwgbW9kaWZpZWQgY29vcmRpbmF0ZXMuCj4+IENoYW5n ZXMgc2luY2UgdjI6Cj4+IC0gTW92ZSBpZ3RfcGxhbmVfc2V0X3Byb3BfY2hhbmdlZCB1cCBzbGln aHRseS4KPj4gQ2hhbmdlcyBzaW5jZSB2MzoKPj4gLSBGaXggd3Jvbmcgb3JkZXJpbmcgb2Ygc2V0 X3Bvc2l0aW9uIGluIGttc19wbGFuZV9sb3dyZXMgY2F1c2luZyBhCj4+IHRlc3QgZmFpbHVyZS4K Pj4gQ2hhbmdlcyBzaW5jZSB2NDoKPj4gLSBCYWNrIG91dCByZXNldHRpbmcgY3J0YyBwb3NpdGlv biBpbiBpZ3RfcGxhbmVfc2V0X2ZiKCkgYW5kCj4+IMKgIGRvY3VtZW50IGl0IGR1cmluZyBpbml0 LiBUZXN0cyBhcHBlYXIgdG8gcmVseSBvbiBpdCBiZWluZwo+PiBwcmVzZXJ2ZWQuCj4+Cj4+IFNp Z25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5p bnRlbC5jb20+Cj4+IC0tLQo+PiDCoGxpYi9pZ3Rfa21zLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfCAyOTkgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCj4+IC0t LS0tLS0tLS0tLQo+PiDCoGxpYi9pZ3Rfa21zLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfMKgwqA1OSArKysrLS0tLQo+PiDCoHRlc3RzL2ttc19hdG9taWNfaW50ZXJy dXB0aWJsZS5jIHzCoMKgMTIgKy0KPj4gwqB0ZXN0cy9rbXNfcm90YXRpb25fY3JjLmPCoMKgwqDC oMKgwqDCoMKgwqB8wqDCoMKgNCArLQo+PiDCoDQgZmlsZXMgY2hhbmdlZCwgMTY1IGluc2VydGlv bnMoKyksIDIwOSBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rfa21zLmMg Yi9saWIvaWd0X2ttcy5jCj4+IGluZGV4IGU2ZmE4ZjRhZjQ1NS4uZTc3YWU1ZDY5NmRhIDEwMDY0 NAo+PiAtLS0gYS9saWIvaWd0X2ttcy5jCj4+ICsrKyBiL2xpYi9pZ3Rfa21zLmMKPj4gQEAgLTE5 MiwxMSArMTkyLDExIEBAIGNvbnN0IGNoYXIKPj4gKmlndF9jb25uZWN0b3JfcHJvcF9uYW1lc1tJ R1RfTlVNX0NPTk5FQ1RPUl9QUk9QU10gPSB7Cj4+IMKgCj4+IMKgLyoKPj4gwqAgKiBSZXRyaWV2 ZSBhbGwgdGhlIHByb3BlcmllcyBzcGVjaWZpZWQgaW4gcHJvcHNfbmFtZSBhbmQgc3RvcmUgdGhl bQo+PiBpbnRvCj4+IC0gKiBwbGFuZS0+YXRvbWljX3Byb3BzX3BsYW5lLgo+PiArICogcGxhbmUt PnByb3BzLgo+PiDCoCAqLwo+PiDCoHN0YXRpYyB2b2lkCj4+IC1pZ3RfYXRvbWljX2ZpbGxfcGxh bmVfcHJvcHMoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaWd0X3BsYW5lX3QKPj4gKnBsYW5lLAo+ PiAtCQkJaW50IG51bV9wcm9wcywgY29uc3QgY2hhciAqKnByb3BfbmFtZXMpCj4+ICtpZ3RfZmls bF9wbGFuZV9wcm9wcyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3RfcGxhbmVfdCAqcGxhbmUs Cj4+ICsJCcKgwqDCoMKgwqBpbnQgbnVtX3Byb3BzLCBjb25zdCBjaGFyICoqcHJvcF9uYW1lcykK Pj4gwqB7Cj4+IMKgCWRybU1vZGVPYmplY3RQcm9wZXJ0aWVzUHRyIHByb3BzOwo+PiDCoAlpbnQg aSwgaiwgZmQ7Cj4+IEBAIC0yMTQsNyArMjE0LDcgQEAgaWd0X2F0b21pY19maWxsX3BsYW5lX3By b3BzKGlndF9kaXNwbGF5X3QKPj4gKmRpc3BsYXksIGlndF9wbGFuZV90ICpwbGFuZSwKPj4gwqAJ CQlpZiAoc3RyY21wKHByb3AtPm5hbWUsIHByb3BfbmFtZXNbal0pICE9IDApCj4+IMKgCQkJCWNv bnRpbnVlOwo+PiDCoAo+PiAtCQkJcGxhbmUtPmF0b21pY19wcm9wc19wbGFuZVtqXSA9IHByb3Bz LQo+Pj4gcHJvcHNbaV07Cj4+ICsJCQlwbGFuZS0+cHJvcHNbal0gPSBwcm9wcy0+cHJvcHNbaV07 Cj4+IMKgCQkJYnJlYWs7Cj4+IMKgCQl9Cj4+IMKgCj4+IEBAIC0xNjU5LDcgKzE2NTksNiBAQCB2 b2lkIGlndF9kaXNwbGF5X2luaXQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwKPj4gaW50IGRybV9m ZCkKPj4gwqAJZHJtTW9kZVJlcyAqcmVzb3VyY2VzOwo+PiDCoAlkcm1Nb2RlUGxhbmVSZXMgKnBs YW5lX3Jlc291cmNlczsKPj4gwqAJaW50IGk7Cj4+IC0JaW50IGlzX2F0b21pYyA9IDA7Cj4+IMKg Cj4+IMKgCW1lbXNldChkaXNwbGF5LCAwLCBzaXplb2YoaWd0X2Rpc3BsYXlfdCkpOwo+PiDCoAo+ PiBAQCAtMTY3OSw3ICsxNjc4LDkgQEAgdm9pZCBpZ3RfZGlzcGxheV9pbml0KGlndF9kaXNwbGF5 X3QgKmRpc3BsYXksCj4+IGludCBkcm1fZmQpCj4+IMKgCWlndF9hc3NlcnRfZihkaXNwbGF5LT5w aXBlcywgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yCj4+ICVkIHBpcGVzXG4iLCBkaXNw bGF5LT5uX3BpcGVzKTsKPj4gwqAKPj4gwqAJZHJtU2V0Q2xpZW50Q2FwKGRybV9mZCwgRFJNX0NM SUVOVF9DQVBfVU5JVkVSU0FMX1BMQU5FUywgMSk7Cj4+IC0JaXNfYXRvbWljID0gZHJtU2V0Q2xp ZW50Q2FwKGRybV9mZCwgRFJNX0NMSUVOVF9DQVBfQVRPTUlDLAo+PiAxKTsKPj4gKwlpZiAoZHJt U2V0Q2xpZW50Q2FwKGRybV9mZCwgRFJNX0NMSUVOVF9DQVBfQVRPTUlDLCAxKSA9PSAwKQo+PiAr CQlkaXNwbGF5LT5pc19hdG9taWMgPSAxOwo+PiArCj4+IMKgCXBsYW5lX3Jlc291cmNlcyA9IGRy bU1vZGVHZXRQbGFuZVJlc291cmNlcyhkaXNwbGF5LT5kcm1fZmQpOwo+PiDCoAlpZ3RfYXNzZXJ0 KHBsYW5lX3Jlc291cmNlcyk7Cj4+IMKgCj4+IEBAIC0xNzc2LDE5ICsxNzc3LDI3IEBAIHZvaWQg aWd0X2Rpc3BsYXlfaW5pdChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LAo+PiBpbnQgZHJtX2ZkKQo+ PiDCoAkJCXBsYW5lLT50eXBlID0gdHlwZTsKPj4gwqAJCQlwbGFuZS0+cGlwZSA9IHBpcGU7Cj4+ IMKgCQkJcGxhbmUtPmRybV9wbGFuZSA9IGRybV9wbGFuZTsKPj4gLQkJCXBsYW5lLT5mZW5jZV9m ZCA9IC0xOwo+PiArCQkJcGxhbmUtPnZhbHVlc1tJR1RfUExBTkVfSU5fRkVOQ0VfRkRdID0KPj4g fjBVTEw7Cj4+IMKgCj4+IC0JCQlpZiAoaXNfYXRvbWljID09IDApIHsKPj4gLQkJCQlkaXNwbGF5 LT5pc19hdG9taWMgPSAxOwo+PiAtCQkJCWlndF9hdG9taWNfZmlsbF9wbGFuZV9wcm9wcyhkaXNw bGF5LAo+PiBwbGFuZSwgSUdUX05VTV9QTEFORV9QUk9QUywgaWd0X3BsYW5lX3Byb3BfbmFtZXMp Owo+PiAtCQkJfQo+PiArCQkJaWd0X2ZpbGxfcGxhbmVfcHJvcHMoZGlzcGxheSwgcGxhbmUsCj4+ IElHVF9OVU1fUExBTkVfUFJPUFMsIGlndF9wbGFuZV9wcm9wX25hbWVzKTsKPj4gwqAKPj4gwqAJ CQlnZXRfcGxhbmVfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLAo+PiBkcm1fcGxhbmUtPnBsYW5l X2lkLAo+PiDCoAkJCQkJwqDCoMKgInJvdGF0aW9uIiwKPj4gLQkJCQkJwqDCoMKgJnBsYW5lLQo+ Pj4gcm90YXRpb25fcHJvcGVydHksCj4+IC0JCQkJCcKgwqDCoCZwcm9wX3ZhbHVlLAo+PiArCQkJ CQnCoMKgwqAmcGxhbmUtCj4+PiBwcm9wc1tJR1RfUExBTkVfUk9UQVRJT05dLAo+PiArCQkJCQnC oMKgwqAmcGxhbmUtCj4+PiB2YWx1ZXNbSUdUX1BMQU5FX1JPVEFUSU9OXSwKPj4gwqAJCQkJCcKg wqDCoE5VTEwpOwo+PiAtCQkJcGxhbmUtPnJvdGF0aW9uID0KPj4gKGlndF9yb3RhdGlvbl90KXBy b3BfdmFsdWU7Cj4+ICsKPj4gKwkJCS8qIENsZWFyIGFueSByZXNpZHVhbCBmcmFtZWJ1ZmZlciBp bmZvIG9uCj4+IGZpcnN0IGNvbW1pdC4gKi8KPj4gKwkJCWlndF9wbGFuZV9zZXRfcHJvcF9jaGFu Z2VkKHBsYW5lLAo+PiBJR1RfUExBTkVfRkJfSUQpOwo+PiArCQkJaWd0X3BsYW5lX3NldF9wcm9w X2NoYW5nZWQocGxhbmUsCj4+IElHVF9QTEFORV9DUlRDX0lEKTsKPj4gKwo+PiArCQkJLyoKPj4g KwkJCcKgKiBDUlRDX1gvWSBhcmUgbm90IGNoYW5nZWQgaW4KPj4gaWd0X3BsYW5lX3NldF9mYiwg c28KPj4gKwkJCcKgKiBmb3JjZSB0aGVtIHRvIGJlIHNhbml0aXplZCBpbiBjYXNlIHRoZXkKPj4g Y29udGFpbgo+PiArCQkJwqAqIGdhcmJhZ2UuCj4+ICsJCQnCoCovCj4+ICsJCQlpZ3RfcGxhbmVf c2V0X3Byb3BfY2hhbmdlZChwbGFuZSwKPj4gSUdUX1BMQU5FX0NSVENfWCk7Cj4+ICsJCQlpZ3Rf cGxhbmVfc2V0X3Byb3BfY2hhbmdlZChwbGFuZSwKPj4gSUdUX1BMQU5FX0NSVENfWSk7Cj4+IMKg CQl9Cj4+IMKgCj4+IMKgCQkvKgo+PiBAQCAtMTgwNSw5ICsxODE0LDYgQEAgdm9pZCBpZ3RfZGlz cGxheV9pbml0KGlndF9kaXNwbGF5X3QgKmRpc3BsYXksCj4+IGludCBkcm1fZmQpCj4+IMKgCj4+ IMKgCQlwaXBlLT5uX3BsYW5lcyA9IG5fcGxhbmVzOwo+PiDCoAo+PiAtCQlmb3JfZWFjaF9wbGFu ZV9vbl9waXBlKGRpc3BsYXksIGksIHBsYW5lKQo+PiAtCQkJcGxhbmUtPmZiX2NoYW5nZWQgPSB0 cnVlOwo+PiAtCj4+IMKgCQlwaXBlLT5tb2RlX2NoYW5nZWQgPSB0cnVlOwo+PiDCoAl9Cj4+IMKg Cj4+IEBAIC0yMDcwLDE4ICsyMDc2LDcgQEAgYm9vbCBpZ3RfcGlwZV9nZXRfcHJvcGVydHkoaWd0 X3BpcGVfdCAqcGlwZSwKPj4gY29uc3QgY2hhciAqbmFtZSwKPj4gwqAKPj4gwqBzdGF0aWMgdWlu dDMyX3QgaWd0X3BsYW5lX2dldF9mYl9pZChpZ3RfcGxhbmVfdCAqcGxhbmUpCj4+IMKgewo+PiAt CWlmIChwbGFuZS0+ZmIpCj4+IC0JCXJldHVybiBwbGFuZS0+ZmItPmZiX2lkOwo+PiAtCWVsc2UK Pj4gLQkJcmV0dXJuIDA7Cj4+IC19Cj4+IC0KPj4gLXN0YXRpYyB1aW50MzJfdCBpZ3RfcGxhbmVf Z2V0X2ZiX2dlbV9oYW5kbGUoaWd0X3BsYW5lX3QgKnBsYW5lKQo+PiAtewo+PiAtCWlmIChwbGFu ZS0+ZmIpCj4+IC0JCXJldHVybiBwbGFuZS0+ZmItPmdlbV9oYW5kbGU7Cj4+IC0JZWxzZQo+PiAt CQlyZXR1cm4gMDsKPj4gKwlyZXR1cm4gcGxhbmUtPnZhbHVlc1tJR1RfUExBTkVfRkJfSURdOwo+ PiDCoH0KPj4gwqAKPj4gwqAjZGVmaW5lIENIRUNLX1JFVFVSTihyLCBmYWlsKSB7CVwKPj4gQEAg LTIwOTAsOSArMjA4NSw2IEBAIHN0YXRpYyB1aW50MzJfdAo+PiBpZ3RfcGxhbmVfZ2V0X2ZiX2dl bV9oYW5kbGUoaWd0X3BsYW5lX3QgKnBsYW5lKQo+PiDCoAlpZ3RfYXNzZXJ0X2VxKHIsIDApOwlc Cj4+IMKgfQo+PiDCoAo+PiAtCj4+IC0KPj4gLQo+PiDCoC8qCj4+IMKgICogQWRkIHBvc2l0aW9u IGFuZCBmYiBjaGFuZ2VzIG9mIGEgcGxhbmUgdG8gdGhlIGF0b21pYyBwcm9wZXJ0eSBzZXQKPj4g wqAgKi8KPj4gQEAgLTIxMDEsNjMgKzIwOTMsMzEgQEAgaWd0X2F0b21pY19wcmVwYXJlX3BsYW5l X2NvbW1pdChpZ3RfcGxhbmVfdAo+PiAqcGxhbmUsIGlndF9waXBlX3QgKnBpcGUsCj4+IMKgCWRy bU1vZGVBdG9taWNSZXEgKnJlcSkKPj4gwqB7Cj4+IMKgCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkg PSBwaXBlLT5kaXNwbGF5Owo+PiAtCXVpbnQzMl90IGZiX2lkLCBjcnRjX2lkOwo+PiArCWludCBp Owo+PiDCoAo+PiDCoAlpZ3RfYXNzZXJ0KHBsYW5lLT5kcm1fcGxhbmUpOwo+PiDCoAo+PiAtCS8q IGl0J3MgYW4gZXJyb3IgdG8gdHJ5IGFuIHVuc3VwcG9ydGVkIGZlYXR1cmUgKi8KPj4gLQlpZ3Rf YXNzZXJ0KGlndF9wbGFuZV9zdXBwb3J0c19yb3RhdGlvbihwbGFuZSkgfHwKPj4gLQkJCSFwbGFu ZS0+cm90YXRpb25fY2hhbmdlZCk7Cj4+IC0KPj4gLQlmYl9pZCA9IGlndF9wbGFuZV9nZXRfZmJf aWQocGxhbmUpOwo+PiAtCWNydGNfaWQgPSBwaXBlLT5jcnRjX2lkOwo+PiAtCj4+IMKgCUxPRyhk aXNwbGF5LAo+PiDCoAnCoMKgwqDCoCJwb3B1bGF0aW5nIHBsYW5lIGRhdGE6ICVzLiVkLCBmYiAl dVxuIiwKPj4gwqAJwqDCoMKgwqBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlLT5waXBlKSwKPj4gwqAJ wqDCoMKgwqBwbGFuZS0+aW5kZXgsCj4+IC0JwqDCoMKgwqBmYl9pZCk7Cj4+IC0KPj4gLQlpZiAo cGxhbmUtPmZlbmNlX2ZkID49IDApIHsKPj4gLQkJdWludDY0X3QgZmVuY2VfZmQgPSAoaW50NjRf dCkgcGxhbmUtPmZlbmNlX2ZkOwo+PiAtCQlpZ3RfYXRvbWljX3BvcHVsYXRlX3BsYW5lX3JlcShy ZXEsIHBsYW5lLAo+PiBJR1RfUExBTkVfSU5fRkVOQ0VfRkQsIGZlbmNlX2ZkKTsKPj4gLQl9Cj4+ ICsJwqDCoMKgwqBpZ3RfcGxhbmVfZ2V0X2ZiX2lkKHBsYW5lKSk7Cj4+IMKgCj4+IC0JaWYgKHBs YW5lLT5mYl9jaGFuZ2VkKSB7Cj4+IC0JCWlndF9hdG9taWNfcG9wdWxhdGVfcGxhbmVfcmVxKHJl cSwgcGxhbmUsCj4+IElHVF9QTEFORV9DUlRDX0lELCBmYl9pZCA/IGNydGNfaWQgOiAwKTsKPj4g LQkJaWd0X2F0b21pY19wb3B1bGF0ZV9wbGFuZV9yZXEocmVxLCBwbGFuZSwKPj4gSUdUX1BMQU5F X0ZCX0lELCBmYl9pZCk7Cj4+IC0JfQo+PiAtCj4+IC0JaWYgKHBsYW5lLT5wb3NpdGlvbl9jaGFu Z2VkIHx8IHBsYW5lLT5zaXplX2NoYW5nZWQpIHsKPj4gLQkJdWludDMyX3Qgc3JjX3ggPSBJR1Rf RklYRUQocGxhbmUtPnNyY194LCAwKTsgLyoKPj4gc3JjX3ggKi8KPj4gLQkJdWludDMyX3Qgc3Jj X3kgPSBJR1RfRklYRUQocGxhbmUtPnNyY195LCAwKTsgLyoKPj4gc3JjX3kgKi8KPj4gLQkJdWlu dDMyX3Qgc3JjX3cgPSBJR1RfRklYRUQocGxhbmUtPnNyY193LCAwKTsgLyoKPj4gc3JjX3cgKi8K Pj4gLQkJdWludDMyX3Qgc3JjX2ggPSBJR1RfRklYRUQocGxhbmUtPnNyY19oLCAwKTsgLyoKPj4g c3JjX2ggKi8KPj4gLQkJaW50MzJfdCBjcnRjX3ggPSBwbGFuZS0+Y3J0Y194Owo+PiAtCQlpbnQz Ml90IGNydGNfeSA9IHBsYW5lLT5jcnRjX3k7Cj4+IC0JCXVpbnQzMl90IGNydGNfdyA9IHBsYW5l LT5jcnRjX3c7Cj4+IC0JCXVpbnQzMl90IGNydGNfaCA9IHBsYW5lLT5jcnRjX2g7Cj4+ICsJZm9y IChpID0gMDsgaSA8IElHVF9OVU1fUExBTkVfUFJPUFM7IGkrKykgewo+PiArCQlpZiAoIWlndF9w bGFuZV9pc19wcm9wX2NoYW5nZWQocGxhbmUsIGkpKQo+PiArCQkJY29udGludWU7Cj4gQ291bGQg d2UgYWRkIGEgbWFjcm8gaGVyZSB0b28/IExpa2UgJ2Zvcl9lYWNoX3Byb3Bfb25fcGxhbmUoKScg b3IKPiBzaW1pbGFyPwoKT3V0c2lkZSBvZiBjb21taXQgaXQgZG9lc24ndCBtYWtlIG11Y2ggc2Vu c2UgdG8gaXRlcmF0ZSBvdmVyIHRoZSBwcm9wZXJ0aWVzLgpUaGUgb25seSB0ZXN0IHRoYXQgZW51 bWVyYXRlcyBvdmVyIHRoZSBhcnJheSBpcyB0aGUgcmV3b3JrZWQga21zX2F0b21pYywgdG8Kc2Vl IGlmIHRoZSB2YWx1ZSBjb21taXR0ZWQgaXMgdGhlIHNhbWUgYXMgdGhlIHZhbHVlIHJldHVybmVk IGJ5IGdldHByb3AuCgpBbmQgdGhlIG9ubHkgcmVhc29uIHRoZSB0ZXN0IGRvZXMgc28gaXMgYmVj YXVzZSBpdCB3YXMgZWFzaWVyIHRvIHN0b3JlIGluIGFuCmFycmF5IHRvIG1lbWNtcCBwbGFuZS0+ dmFsdWVzIGFnYWluc3Qga2VybmVsX3ZhbHVlcy4KCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=