From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: Re: [PATCH 2/3] drm: Create a format/modifier blob Date: Thu, 11 May 2017 10:58:36 -0700 Message-ID: <20170511175836.GA12655@mail.bwidawsk.net> References: <20170503051428.4734-1-ben@bwidawsk.net> <20170503051428.4734-2-ben@bwidawsk.net> <20170503131515.GI28653@e110455-lin.cambridge.arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170503131515.GI28653@e110455-lin.cambridge.arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Liviu Dudau Cc: Intel GFX , "Kristian H . Kristensen" , Daniel Stone , DRI Development List-Id: intel-gfx@lists.freedesktop.org T24gMTctMDUtMDMgMTQ6MTU6MTUsIExpdml1IER1ZGF1IHdyb3RlOgo+T24gVHVlLCBNYXkgMDIs IDIwMTcgYXQgMTA6MTQ6MjdQTSAtMDcwMCwgQmVuIFdpZGF3c2t5IHdyb3RlOgo+PiBVcGRhdGVk IGJsb2IgbGF5b3V0IChSb2IsIERhbmllbCwgS3Jpc3RpYW4sIHhlcnBpKQo+Pgo+PiBDYzogUm9i IENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgo+PiBDYzogRGFuaWVsIFN0b25lIDxkYW5pZWxz QGNvbGxhYm9yYS5jb20+Cj4+IENjOiBLcmlzdGlhbiBILiBLcmlzdGVuc2VuIDxob2Vnc2JlcmdA Z21haWwuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5u ZXQ+Cj4+IC0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2RybV9tb2RlX2NvbmZpZy5jIHwgICA3ICsr Kwo+PiAgZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZS5jICAgICAgIHwgMTE5ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICBpbmNsdWRlL2RybS9kcm1fbW9kZV9jb25m aWcuaCAgICAgfCAgIDYgKysKPj4gIGluY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaCAgICAgICB8 ICAyNiArKysrKysrKysKPj4gIDQgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKykKPj4K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZV9jb25maWcuYyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fbW9kZV9jb25maWcuYwo+PiBpbmRleCBkOTg2MjI1OWEyYTcuLjZiZmJj MzgzOWRmNSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2RlX2NvbmZpZy5j Cj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZV9jb25maWcuYwo+PiBAQCAtMzM3LDYg KzMzNywxMyBAQCBzdGF0aWMgaW50IGRybV9tb2RlX2NyZWF0ZV9zdGFuZGFyZF9wcm9wZXJ0aWVz KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4+ICAJCXJldHVybiAtRU5PTUVNOwo+PiAgCWRldi0+ bW9kZV9jb25maWcuZ2FtbWFfbHV0X3NpemVfcHJvcGVydHkgPSBwcm9wOwo+Pgo+PiArCXByb3Ag PSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwKPj4gKwkJCQkgICBEUk1fTU9ERV9QUk9QX0lNTVVU QUJMRSB8IERSTV9NT0RFX1BST1BfQkxPQiwKPj4gKwkJCQkgICAiSU5fRk9STUFUUyIsIDApOwo+ PiArCWlmICghcHJvcCkKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsJZGV2LT5tb2RlX2NvbmZp Zy5tb2RpZmllcnMgPSBwcm9wOwo+PiArCj4+ICAJcmV0dXJuIDA7Cj4+ICB9Cj4+Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X3BsYW5lLmMKPj4gaW5kZXggMjg2ZTE4Mzg5MWU1Li4yZTg5ZTBlNzM0MzUgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGxhbmUuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX3BsYW5lLmMKPj4gQEAgLTYyLDYgKzYyLDExNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRy bV9udW1fcGxhbmVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4+ICAJcmV0dXJuIG51bTsKPj4g IH0KPj4KPj4gK3N0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyX2Jsb2Igewo+PiArI2RlZmluZSBG T1JNQVRfQkxPQl9DVVJSRU5UIDEKPj4gKwkvKiBWZXJzaW9uIG9mIHRoaXMgYmxvYiBmb3JtYXQg Ki8KPj4gKwl1MzIgdmVyc2lvbjsKPj4gKwo+PiArCS8qIEZsYWdzICovCj4+ICsJdTMyIGZsYWdz Owo+PiArCj4+ICsJLyogTnVtYmVyIG9mIGZvdXJjYyBmb3JtYXRzIHN1cHBvcnRlZCAqLwo+PiAr CXUzMiBjb3VudF9mb3JtYXRzOwo+PiArCj4+ICsJLyogV2hlcmUgaW4gdGhpcyBibG9iIHRoZSBm b3JtYXRzIGV4aXN0IChpbiBieXRlcykgKi8KPj4gKwl1MzIgZm9ybWF0c19vZmZzZXQ7Cj4+ICsK Pj4gKwkvKiBOdW1iZXIgb2YgZHJtX2Zvcm1hdF9tb2RpZmllcnMgKi8KPj4gKwl1MzIgY291bnRf bW9kaWZpZXJzOwo+PiArCj4+ICsJLyogV2hlcmUgaW4gdGhpcyBibG9iIHRoZSBtb2RpZmllcnMg ZXhpc3QgKGluIGJ5dGVzKSAqLwo+PiArCXUzMiBtb2RpZmllcnNfb2Zmc2V0Owo+PiArCj4+ICsJ LyogdTMyIGZvcm1hdHNbXSAqLwo+PiArCS8qIHN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyIG1v ZGlmaWVyc1tdICovCj4+ICt9IF9fcGFja2VkOwo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHUzMiAq Cj4+ICtmb3JtYXRzX3B0cihzdHJ1Y3QgZHJtX2Zvcm1hdF9tb2RpZmllcl9ibG9iICpibG9iKQo+ PiArewo+PiArCXJldHVybiAodTMyICopKCgoY2hhciAqKWJsb2IpICsgYmxvYi0+Zm9ybWF0c19v ZmZzZXQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fZm9ybWF0X21v ZGlmaWVyICoKPj4gK21vZGlmaWVyc19wdHIoc3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXJfYmxv YiAqYmxvYikKPj4gK3sKPj4gKwlyZXR1cm4gKHN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyICop KCgoY2hhciAqKWJsb2IpICsgYmxvYi0+bW9kaWZpZXJzX29mZnNldCk7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgY3JlYXRlX2luX2Zvcm1hdF9ibG9iKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiArCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2Z1bmNzICpmdW5jcywKPj4gKwkJCQkgY29uc3QgdWludDMyX3QgKmZvcm1hdHMsIHVuc2lnbmVk IGludCBmb3JtYXRfY291bnQsCj4+ICsJCQkJIGNvbnN0IHVpbnQ2NF90ICpmb3JtYXRfbW9kaWZp ZXJzKQo+Cj5XaHkgZG8geW91IGhhdmUgdG8gcGFzcyB0aGUgZm9ybWF0X21vZGlmaWVycyBhZ2Fp biB3aGVuIHlvdSBoYXZlIHBsYW5lLT5tb2RpZmllcnM/Cj5PciB0aGUgcmV2ZXJzZSBxdWVzdGlv bjogd2h5IGRvIHlvdSBuZWVkIHBsYW5lLT5tb2RpZmllcnMgd2hlbiB5b3UgYXJlIHBhc3Npbmcg dGhlCj5tb2RpZmllcnMgYXMgcGFyYW1ldGVycyBhbGwgdGhlIHRpbWU/Cj4KCkkndmUgZHJvcHBl ZCBtb3N0IG9mIHRoZSBwYXJhbWV0ZXJzIGhlcmUgYW5kIGp1c3QgdXNlZCBwbGFuZS0+KgoKPj4g K3sKPj4gKwljb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2Rl X2NvbmZpZzsKPj4gKwljb25zdCB1aW50NjRfdCAqdGVtcF9tb2RpZmllcnMgPSBmb3JtYXRfbW9k aWZpZXJzOwo+PiArCXVuc2lnbmVkIGludCBmb3JtYXRfbW9kaWZpZXJfY291bnQgPSAwOwo+PiAr CXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYiA9IE5VTEw7Cj4+ICsJc3RydWN0IGRybV9m b3JtYXRfbW9kaWZpZXIgKm1vZDsKPj4gKwlzaXplX3QgYmxvYl9zaXplID0gMCwgZm9ybWF0c19z aXplLCBtb2RpZmllcnNfc2l6ZTsKPj4gKwlzdHJ1Y3QgZHJtX2Zvcm1hdF9tb2RpZmllcl9ibG9i ICpibG9iX2RhdGE7Cj4+ICsJaW50IGksIGosIHJldCA9IDA7Cj4+ICsKPj4gKwlpZiAoZm9ybWF0 X21vZGlmaWVycykKPj4gKwkJd2hpbGUgKCp0ZW1wX21vZGlmaWVycysrICE9IERSTV9GT1JNQVRf TU9EX0lOVkFMSUQpCj4+ICsJCQlmb3JtYXRfbW9kaWZpZXJfY291bnQrKzsKPj4gKwo+PiArCWZv cm1hdHNfc2l6ZSA9IHNpemVvZihfX3UzMikgKiBmb3JtYXRfY291bnQ7Cj4+ICsJaWYgKFdBUk5f T04oIWZvcm1hdHNfc2l6ZSkpIHsKPj4gKwkJLyogMCBmb3JtYXRzIGFyZSBuZXZlciBleHBlY3Rl ZCAqLwo+PiArCQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICsKPj4gKwltb2RpZmllcnNfc2l6ZSA9Cj4+ ICsJCXNpemVvZihzdHJ1Y3QgZHJtX2Zvcm1hdF9tb2RpZmllcikgKiBmb3JtYXRfbW9kaWZpZXJf Y291bnQ7Cj4+ICsKPj4gKwlibG9iX3NpemUgPSBBTElHTihzaXplb2Yoc3RydWN0IGRybV9mb3Jt YXRfbW9kaWZpZXJfYmxvYiksIDgpOwo+PiArCWJsb2Jfc2l6ZSArPSBBTElHTihmb3JtYXRzX3Np emUsIDgpOwo+PiArCWJsb2Jfc2l6ZSArPSBtb2RpZmllcnNfc2l6ZTsKPj4gKwo+PiArCWJsb2Ig PSBkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2IoZGV2LCBibG9iX3NpemUsIE5VTEwpOwo+PiArCWlm IChJU19FUlIoYmxvYikpCj4+ICsJCXJldHVybiAtMTsKPj4gKwo+PiArCWJsb2JfZGF0YSA9IChz dHJ1Y3QgZHJtX2Zvcm1hdF9tb2RpZmllcl9ibG9iICopYmxvYi0+ZGF0YTsKPj4gKwlibG9iX2Rh dGEtPnZlcnNpb24gPSBGT1JNQVRfQkxPQl9DVVJSRU5UOwo+PiArCWJsb2JfZGF0YS0+Y291bnRf Zm9ybWF0cyA9IGZvcm1hdF9jb3VudDsKPj4gKwlibG9iX2RhdGEtPmZvcm1hdHNfb2Zmc2V0ID0g c2l6ZW9mKHN0cnVjdCBkcm1fZm9ybWF0X21vZGlmaWVyX2Jsb2IpOwo+PiArCWJsb2JfZGF0YS0+ Y291bnRfbW9kaWZpZXJzID0gZm9ybWF0X21vZGlmaWVyX2NvdW50Owo+PiArCj4+ICsJLyogTW9k aWZpZXJzIG9mZnNldCBpcyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgd2l0aCBhIDY0IGJpdCBmaWVs ZCBzbyBpdAo+PiArCSAqIHNob3VsZCBiZSBuYXR1cmFsbHkgYWxpZ25lZCB0byA4Qi4KPj4gKwkg Ki8KPj4gKwlibG9iX2RhdGEtPm1vZGlmaWVyc19vZmZzZXQgPQo+PiArCQlBTElHTihibG9iX2Rh dGEtPmZvcm1hdHNfb2Zmc2V0ICsgZm9ybWF0c19zaXplLCA4KTsKPj4gKwo+PiArCW1lbWNweShm b3JtYXRzX3B0cihibG9iX2RhdGEpLCBmb3JtYXRzLCBmb3JtYXRzX3NpemUpOwo+PiArCj4+ICsJ LyogSWYgd2UgY2FuJ3QgZGV0ZXJtaW5lIHN1cHBvcnQsIGp1c3QgYmFpbCAqLwo+PiArCWlmICgh ZnVuY3MtPmZvcm1hdF9tb2Rfc3VwcG9ydGVkKQo+PiArCQlnb3RvIGRvbmU7Cj4+ICsKPj4gKwlt b2QgPSBtb2RpZmllcnNfcHRyKGJsb2JfZGF0YSk7Cj4+ICsJZm9yIChpID0gMDsgaSA8IGZvcm1h dF9tb2RpZmllcl9jb3VudDsgaSsrKSB7Cj4+ICsJCWZvciAoaiA9IDA7IGogPCBmb3JtYXRfY291 bnQ7IGorKykgewo+PiArCQkJaWYgKGZ1bmNzLT5mb3JtYXRfbW9kX3N1cHBvcnRlZChwbGFuZSwg Zm9ybWF0c1tqXSwKPj4gKwkJCQkJCQlmb3JtYXRfbW9kaWZpZXJzW2ldKSkgewo+PiArCQkJCW1v ZC0+Zm9ybWF0cyB8PSAxIDw8IGo7Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwo+PiArCQltb2QtPm1v ZGlmaWVyID0gZm9ybWF0X21vZGlmaWVyc1tpXTsKPj4gKwkJbW9kLT5vZmZzZXQgPSAwOwo+PiAr CQltb2QtPnBhZCA9IDA7Cj4+ICsJCW1vZCsrOwo+PiArCX0KPj4gKwo+PiArZG9uZToKPj4gKwlk cm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIGNvbmZpZy0+bW9kaWZpZXJz LAo+PiArCQkJCSAgIGJsb2ItPmJhc2UuaWQpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30K Pj4gKwo+PiAgLyoqCj4+ICAgKiBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQgLSBJbml0aWFsaXpl IGEgbmV3IHVuaXZlcnNhbCBwbGFuZSBvYmplY3QKPj4gICAqIEBkZXY6IERSTSBkZXZpY2UKPj4g QEAgLTEzMCw2ICsyNDEsMTAgQEAgaW50IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPj4gIAkJcmV0dXJuIC1F Tk9NRU07Cj4+ICAJfQo+Pgo+PiArCS8qIEZpcnN0IGRyaXZlciB0byBuZWVkIG1vcmUgdGhhbiA2 NCBmb3JtYXRzIG5lZWRzIHRvIGZpeCB0aGlzICovCj4+ICsJaWYgKFdBUk5fT04oZm9ybWF0X2Nv dW50ID4gNjQpKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+Cj5BcHBseWluZyB0aGlzIHBh dGNoIG1ha2VzIHRoZSBhYm92ZSBjaGVjayBhcHBlYXIgdHdpY2UgaW4gZHJtX3VuaXZlcnNhbF9w bGFuZV9pbml0KCkgZnVuY3Rpb24uCj4KCkZpeGVkLiBUaGFua3MuCgo+PiAgCWlmIChuYW1lKSB7 Cj4+ICAJCXZhX2xpc3QgYXA7Cj4+Cj4+IEBAIC0xNzcsNiArMjkyLDEwIEBAIGludCBkcm1fdW5p dmVyc2FsX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCj4+ICAJCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZwbGFuZS0+YmFzZSwg Y29uZmlnLT5wcm9wX3NyY19oLCAwKTsKPj4gIAl9Cj4+Cj4+ICsJaWYgKGNvbmZpZy0+YWxsb3df ZmJfbW9kaWZpZXJzKQo+PiArCQljcmVhdGVfaW5fZm9ybWF0X2Jsb2IoZGV2LCBwbGFuZSwgZnVu Y3MsIGZvcm1hdHMsIGZvcm1hdF9jb3VudCwKPj4gKwkJCQkgICAgICBmb3JtYXRfbW9kaWZpZXJz KTsKPj4gKwo+PiAgCXJldHVybiAwOwo+PiAgfQo+PiAgRVhQT1JUX1NZTUJPTChkcm1fdW5pdmVy c2FsX3BsYW5lX2luaXQpOwo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGVfY29u ZmlnLmggYi9pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaAo+PiBpbmRleCA0Mjk4MTcxMTE4 OWIuLjAzNzc2ZTY1OTgxMSAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21vZGVfY29u ZmlnLmgKPj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmgKPj4gQEAgLTc1Nyw2 ICs3NTcsMTIgQEAgc3RydWN0IGRybV9tb2RlX2NvbmZpZyB7Cj4+ICAJICovCj4+ICAJYm9vbCBh bGxvd19mYl9tb2RpZmllcnM7Cj4+Cj4+ICsJLyoqCj4+ICsJICogQG1vZGlmaWVyczogUGxhbmUg cHJvcGVydHkgdG8gbGlzdCBzdXBwb3J0IG1vZGlmaWVyL2Zvcm1hdAo+PiArCSAqIGNvbWJpbmF0 aW9uLgo+Cj5Db21tZW50IHNheXMgIlBsYW5lIHByb3BlcnR5IiB5ZXQgdGhpcyBpcyBzdHJ1Y3Qg ZHJtX21vZGVfY29uZmlnLgo+CgpZZWFoLCBpdCBpcyBhIHBlciBwbGFuZSBwcm9wZXJ0eS4gSXQn cyBqdXN0IGluIHRoZSBtb2RlIGNvbmZpZyBmb3IgYmxvYgpjcmVhdGlvbi4gQUZBSUNULCBhbGwg cHJvcHMgd29yayB0aGlzIHdheS4gSXQncyBhdHRhY2hlZCB0byB0aGUgcGxhbmUgdGhvdWdoOgpk cm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmcGxhbmUtPmJhc2UsIGNvbmZpZy0+bW9kaWZpZXJz LCBibG9iLT5iYXNlLmlkKTsKCldoYXQgd291bGQgeW91IGxpa2UgbWUgdG8gY2hhbmdlIGhlcmU/ CgoKPj4gKwkgKi8KPj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICptb2RpZmllcnM7Cj4+ICsKPj4g IAkvKiBjdXJzb3Igc2l6ZSAqLwo+PiAgCXVpbnQzMl90IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hl aWdodDsKPj4KPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaCBiL2lu Y2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaAo+PiBpbmRleCA4YzY3ZmMwM2Q1M2QuLmRjZGQwNGM1 NTc5MiAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oCj4+ICsrKyBi L2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaAo+PiBAQCAtNjY1LDYgKzY2NSwzMiBAQCBzdHJ1 Y3QgZHJtX21vZGVfYXRvbWljIHsKPj4gIAlfX3U2NCB1c2VyX2RhdGE7Cj4+ICB9Owo+Pgo+PiAr c3RydWN0IGRybV9mb3JtYXRfbW9kaWZpZXIgewo+PiArICAgICAgIC8qIEJpdG1hc2sgb2YgZm9y bWF0cyBpbiBnZXRfcGxhbmUgZm9ybWF0IGxpc3QgdGhpcyBpbmZvIGFwcGxpZXMgdG8uIFRoZQo+ Cj5Zb3UgaGF2ZSBzb21lIHVudXN1YWwgaW5kZW50IG9mIHRoZSBjb21tZW50IGhlcmUuIEFsc28g dGhlIGZpbGUgdXNlcyBhIGRpZmZlcmVudAo+c3R5bGUgZm9yIG11bHRpLWxpbmUgY29tbWVudHMu Cj4KCkZpeGVkIHRoZSBpbmRlbnQgaXNzdWUuIFRoYW5rcyBmb3Igc3BvdHRpbmcgdGhhdCwgaXQg d2FzIGEgY29weS1wYXN0ZSBwcm9ibGVtIG9uCm15IGVuZC4gVGhlIGZpbGUgaXMgaW5jb25zaXN0 ZW50IGluIG11bHRpbGluZSBjb21tZW50cywgYWN0dWFsbHkuIE5vdCBjaGFuZ2VkCmFueXRoaW5n IHRoZXJlLgoKPj4gKwkqIG9mZnNldCBhbGxvd3MgYSBzbGlkaW5nIHdpbmRvdyBvZiB3aGljaCA2 NCBmb3JtYXRzIChiaXRzKS4KPj4gKwkqCj4+ICsJKiBTb21lIGV4YW1wbGVzOgo+PiArCSogSW4g dG9kYXkncyB3b3JsZCB3aXRoIDwgNjUgZm9ybWF0cywgYW5kIGZvcm1hdHMgMCwgYW5kIDIgYXJl Cj4+ICsJKiBzdXBwb3J0ZWQKPj4gKwkqIDB4MDAwMDAwMDAwMDAwMDAwNQo+PiArCSoJCSAgXi1v ZmZzZXQgPSAwLCBmb3JtYXRzID0gNQo+PiArCSoKPj4gKwkqIElmIHRoZSBudW1iZXIgZm9ybWF0 cyBncmV3IHRvIDEyOCwgYW5kIGZvcm1hdHMgOTgtMTAyIGFyZQo+PiArCSogc3VwcG9ydGVkIHdp dGggdGhlIG1vZGlmaWVyOgo+PiArCSoKPj4gKwkqIDB4MDAwMDAwM2MwMDAwMDAwMCAwMDAwMDAw MDAwMDAwMDAwCj4+ICsJKgkJICBeCj4+ICsJKgkJICB8X19vZmZzZXQgPSA2NCwgZm9ybWF0cyA9 IDB4M2MwMDAwMDAwMAo+PiArCSoKPj4gKwkqLwo+PiArICAgICAgIHVpbnQ2NF90IGZvcm1hdHM7 Cj4+ICsgICAgICAgdWludDMyX3Qgb2Zmc2V0Owo+PiArICAgICAgIHVpbnQzMl90IHBhZDsKPgo+ cy9wYWQvX19wYWQvIG9yIHMvcGFkL19fcmVzZXJ2ZWQvID8KPgoKRXZlcnkgb3RoZXIgc3RydWN0 dXJlIGluIHRoZSBmaWxlIHdpdGggYSBwYWQgZmllbGQgaXMgY2FsbGVkICJwYWQiIGhvd2V2ZXIs IHlvdQptYWRlIG1lIHJlYWxpemUgbXkgZGF0YSB0eXBlcyBzaG91bGQgYmUgX191MzIgYW5kIF9f dTY0LCB0aG9zZSBhcmUgZml4ZWQuCgo+PiArCj4+ICsgICAgICAgLyogVGhpcyBtb2RpZmllciBj YW4gYmUgdXNlZCB3aXRoIHRoZSBmb3JtYXQgZm9yIHRoaXMgcGxhbmUuICovCj4KPkknbSBoYXZp bmcgdHJvdWJsZSBwYXJzaW5nIHRoZSBjb21tZW50LiBIb3cgYWJvdXQ6ICJUaGUgbW9kaWZpZXIg dGhhdCBhcHBsaWVzIHRvIHRoZQo+Z2V0X3BsYW5lIGZvcm1hdCBsaXN0IGJpdG1hc2suIiA/Cj4K ClN1cmUuIERvbmUuCgo+QmVzdCByZWdhcmRzLAo+TGl2aXUKPgo+PiArICAgICAgIHVpbnQ2NF90 IG1vZGlmaWVyOwo+PiArfSBfX3BhY2tlZDsKPj4gKwo+PiAgLyoqCj4+ICAgKiBDcmVhdGUgYSBu ZXcgJ2Jsb2InIGRhdGEgcHJvcGVydHksIGNvcHlpbmcgbGVuZ3RoIGJ5dGVzIGZyb20gZGF0YSBw b2ludGVyLAo+PiAgICogYW5kIHJldHVybmluZyBuZXcgYmxvYiBJRC4KPj4gLS0KPj4gMi4xMi4y Cj4+Cj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+ IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y Zwo+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo+Cj4tLSAKPj09PT09PT09PT09PT09PT09PT09Cj58IEkgd291bGQgbGlrZSB0byB8Cj58 IGZpeCB0aGUgd29ybGQsICB8Cj58IGJ1dCB0aGV5J3JlIG5vdCB8Cj58IGdpdmluZyBtZSB0aGUg ICB8Cj4gXCBzb3VyY2UgY29kZSEgIC8KPiAgLS0tLS0tLS0tLS0tLS0tCj4gICAgwq9cXyjjg4Qp Xy/CrwoKLS0gCkJlbiBXaWRhd3NreSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50 ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==