From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Andrew F. Davis" Subject: Re: [EARLY RFC][PATCH] dma-buf: Add dma-buf heaps framework Date: Mon, 4 Mar 2019 08:53:42 -0600 Message-ID: <05f41d32-2a53-7116-691b-d3c843eae9d1@ti.com> References: <20190225143604.27511-1-afd@ti.com> <20190301120632.tmah4qq4q7mi3i3i@DESKTOP-E1NTVVP.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lelv0143.ext.ti.com (lelv0143.ext.ti.com [198.47.23.248]) by gabe.freedesktop.org (Postfix) with ESMTPS id EFD0E89CFA for ; Mon, 4 Mar 2019 14:53:49 +0000 (UTC) In-Reply-To: <20190301120632.tmah4qq4q7mi3i3i@DESKTOP-E1NTVVP.localdomain> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Brian Starkey Cc: nd , Chenbo Feng , Alistair Strachan , Liam Mark , "dri-devel@lists.freedesktop.org" List-Id: dri-devel@lists.freedesktop.org T24gMy8xLzE5IDY6MDYgQU0sIEJyaWFuIFN0YXJrZXkgd3JvdGU6Cj4gSGkgQW5kcmV3LAo+IAo+ IFNvcnJ5IGZvciBub3QgbWFuYWdpbmcgdG8gY29tbWVudCBvbiB0aGlzIHNvb25lciwgSSd2ZSBo YWQgYSBjcmF6eSBmZXcKPiBkYXlzLgo+IAo+IEFzIHRoZSBvdGhlcnMgaGF2ZSBzYWlkLCBJIHF1 aXRlIGxpa2UgdGhlIGRpcmVjdGlvbiBoZXJlLgo+IAo+IE9uIE1vbiwgRmViIDI1LCAyMDE5IGF0 IDA4OjM2OjA0QU0gLTA2MDAsIEFuZHJldyBGLiBEYXZpcyB3cm90ZToKPj4gVGhpcyBmcmFtZXdv cmsgYWxsb3dzIGEgdW5pZmllZCB1c2Vyc3BhY2UgaW50ZXJmYWNlIGZvciBkbWEtYnVmCj4+IGV4 cG9ydGVycywgYWxsb3dpbmcgdXNlcmxhbmQgdG8gYWxsb2NhdGUgc3BlY2lmaWMgdHlwZXMgb2Yg bWVtb3J5Cj4+IGZvciB1c2UgaW4gZG1hLWJ1ZiBzaGFyaW5nLgo+Pgo+PiBFYWNoIGhlYXAgaXMg Z2l2ZW4gaXRzIG93biBkZXZpY2Ugbm9kZSwgd2hpY2ggYSB1c2VyIGNhbiBhbGxvY2F0ZQo+PiBh IGRtYS1idWYgZmQgZnJvbSB1c2luZyB0aGUgRE1BX0hFQVBfSU9DX0FMTE9DLgo+Pgo+PiBTaWdu ZWQtb2ZmLWJ5OiBBbmRyZXcgRi4gRGF2aXMgPGFmZEB0aS5jb20+Cj4+IC0tLQo+Pgo+PiBIZWxs byBhbGwsCj4+Cj4+IEkgaGFkIGEgbGl0dGxlIGxlc3MgdGltZSBvdmVyIHRoZSB3ZWVrZW5kIHRo YW4gSSB0aG91Z2h0IEkgd291bGQgdG8KPj4gY2xlYW4gdGhpcyB1cCBtb3JlIGFuZCBmaW5pc2gg dGhlIGZpcnN0IHNldCBvZiB1c2VyIGhlYXBzLCBidXQgd2FudGVkCj4+IHRvIGdldCB0aGlzIG91 dCBhbnl3YXkuCj4+Cj4+IElPTiBpbiBpdHMgY3VycmVudCBmb3JtIGFzc3VtZXMgYSBsb3QgYWJv dXQgdGhlIG1lbW9yeSBpdCBleHBvcnRzIGFuZAo+PiB0aGVzZSBhc3N1bXB0aW9ucyBsZWFkIHRv IHJlc3RyaWN0aW9ucyBvbiB0aGUgZnVsbCByYW5nZSBvZiBvcGVyYXRpb25zCj4+IGRtYS1idWYn cyBjYW4gcHJvZHVjZS4gRHVlIHRvIHRoaXMgaWYgd2UgYXJlIHRvIGFkZCB0aGlzIGFzIGFuIGV4 dGVuc2lvbgo+PiBvZiB0aGUgY29yZSBkbWEtYnVmIHRoZW4gaXQgc2hvdWxkIG9ubHkgYmUgdGhl IHVzZXItc3BhY2UgYWR2ZXJ0aXNlbWVudAo+PiBhbmQgYWxsb2NhdGlvbiBmcm9udC1lbmQuIEFs bCBkbWEtYnVmIGV4cG9ydGluZyBhbmQgb3BlcmF0aW9uIG5lZWQgdG8gYmUKPj4gcGxhY2VkIGlu IHRoZSBjb250cm9sIG9mIHRoZSBleHBvcnRpbmcgaGVhcC4gVGhlIGNvcmUgYmVjb21lcyByYXRo ZXIKPj4gc21hbGwsIGp1c3QgYSBmZXcgaHVuZHJlZCBsaW5lcyB5b3Ugc2VlIGhlcmUuIFRoaXMg aXMgbm90IHRvIHNheSB3ZQo+PiBzaG91bGQgbm90IHByb3ZpZGUgaGVscGVycyB0byBtYWtlIHRo ZSBoZWFwIGV4cG9ydGVycyBtb3JlIHNpbXBsZSwgYnV0Cj4+IHRoZXkgc2hvdWxkIG9ubHkgYmUg aGVscGVycyBhbmQgbm90IGVuZm9yY2VkIGJ5IHRoZSBjb3JlIGZyYW1ld29yay4KPj4KPj4gQmFz aWMgdXNlIG1vZGVsIGhlcmUgaXMgYW4gZXhwb3J0ZXIgKGRlZGljYXRlZCBoZWFwIG1lbW9yeSBk cml2ZXIsIENNQSwKPj4gU3lzdGVtLCBldGMuKSByZWdpc3RlcnMgd2l0aCB0aGUgZnJhbWV3b3Jr IGJ5IHByb3ZpZGluZyBhIHN0cnVjdAo+PiBkbWFfaGVhcF9pbmZvIHdoaWNoIGdpdmVzIHVzIHRo ZSBuZWVkZWQgaW5mbyB0byBleHBvcnQgdGhpcyBoZWFwIHRvCj4+IHVzZXJzcGFjZSBhcyBhIGRl dmljZSBub2RlLiBOZXh0IGEgdXNlciB3aWxsIHJlcXVlc3QgYW4gYWxsb2NhdGlvbiwKPj4gdGhl IElPQ1RMIGlzIHBhcnNlZCBhbmQgdGhlIHJlcXVlc3QgbWFkZSB0byBhIGhlYXAgcHJvdmlkZWQg YWxsb2MoKSBvcC4KPj4gVGhlIGhlYXAgc2hvdWxkIHJldHVybiB0aGUgZmlsbGVkIG91dCBzdHJ1 Y3QgZG1hX2hlYXBfYnVmZmVyLCBpbmNsdWRpbmcKPj4gZXhwb3J0aW5nIHRoZSBidWZmZXIgYXMg YSBkbWEtYnVmLiBUaGlzIGRtYS1idWYgd2UgdGhlbiByZXR1cm4gdG8gdGhlCj4+IHVzZXIgYXMg YSBmZC4gQnVmZmVyIGZyZWUgaXMgc3RpbGwgYSBiaXQgb3BlbiBhcyB3ZSBuZWVkIHRvIHVwZGF0 ZSBzb21lCj4+IHN0YXRzIGFuZCBmcmVlIHNvbWUgbWVtb3J5LCBidXQgdGhlIHJlbGVhc2Ugb3Bl cmF0aW9uIGlzIGNvbnRyb2xsZWQgYnkKPj4gdGhlIGhlYXAgZXhwb3J0ZXIsIHNvIHNvbWUgaG9v ayB3aWxsIGhhdmUgdG8gYmUgY3JlYXRlZC4KPj4KPj4gSXQgYWxsIG5lZWRzIGEgYml0IG1vcmUg d29yaywgYW5kIEknbSBzdXJlIEknbGwgZmluZCBtaXNzaW5nIHBhcnRzIHdoZW4KPj4gSSBhZGQg c29tZSBtb3JlIGhlYXBzLCBidXQgaG9wZWZ1bGx5IHRoaXMgZnJhbWV3b3JrIGlzIHNpbXBsZSBl bm91Z2ggdGhhdAo+PiBpdCBkb2VzIG5vdCBpbXBlZGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGFs bCBmdW5jdGlvbmFsaXR5IG9uY2UgcHJvdmlkZWQKPj4gYnkgSU9OIChzaHJpbmtlciwgZGVsYXll ZCBmcmVlKSwgbm9yIGFueSBuZXcgZnVuY3Rpb25hbGl0eSBuZWVkZWQgZm9yCj4+IGZ1dHVyZSBo ZWFwIGV4cG9ydGluZyBkZXZpY2VzLgo+Pgo+PiBUaGFua3MsCj4+IEFuZHJldwo+Pgo+PiAgZHJp dmVycy9kbWEtYnVmL0tjb25maWcgICAgICAgfCAgMTIgKysKPj4gIGRyaXZlcnMvZG1hLWJ1Zi9N YWtlZmlsZSAgICAgIHwgICAxICsKPj4gIGRyaXZlcnMvZG1hLWJ1Zi9kbWEtaGVhcC5jICAgIHwg MjY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIGluY2x1ZGUvbGludXgv ZG1hLWhlYXAuaCAgICAgIHwgIDU3ICsrKysrKysrCj4+ICBpbmNsdWRlL3VhcGkvbGludXgvZG1h LWhlYXAuaCB8ICA1NCArKysrKysrCj4+ICA1IGZpbGVzIGNoYW5nZWQsIDM5MiBpbnNlcnRpb25z KCspCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEtYnVmL2RtYS1oZWFwLmMKPj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2RtYS1oZWFwLmgKPj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvbGludXgvZG1hLWhlYXAuaAo+Pgo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9kbWEtYnVmL0tjb25maWcgYi9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZwo+PiBp bmRleCAyZTVhMGZhYTJjYjEuLjMwYjBkN2M4Mzk0NSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9k bWEtYnVmL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL0tjb25maWcKPj4gQEAgLTM5 LDQgKzM5LDE2IEBAIGNvbmZpZyBVRE1BQlVGCj4+ICAJICBBIGRyaXZlciB0byBsZXQgdXNlcnNw YWNlIHR1cm4gbWVtZmQgcmVnaW9ucyBpbnRvIGRtYS1idWZzLgo+PiAgCSAgUWVtdSBjYW4gdXNl IHRoaXMgdG8gY3JlYXRlIGhvc3QgZG1hYnVmcyBmb3IgZ3Vlc3QgZnJhbWVidWZmZXJzLgo+PiAg Cj4+ICttZW51Y29uZmlnIERNQUJVRl9IRUFQUwo+PiArCWJvb2wgIkRNQS1CVUYgVXNlcmxhbmQg TWVtb3J5IEhlYXBzIgo+PiArCWRlcGVuZHMgb24gSEFTX0RNQSAmJiBNTVUKPj4gKwlzZWxlY3Qg R0VORVJJQ19BTExPQ0FUT1IKPj4gKwlzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVIKPj4gKwloZWxw Cj4+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxlIHRoZSBETUEtQlVGIHVzZXJsYW5k IG1lbW9yeSBoZWFwcywKPj4gKwkgIHRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBhbGxvY2F0ZSBk bWEtYnVmcyB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2Vlbgo+PiArCSAgZHJpdmVycy4KPj4gKwo+ PiArc291cmNlICJkcml2ZXJzL2RtYS1idWYvaGVhcHMvS2NvbmZpZyIKPj4gKwo+PiAgZW5kbWVu dQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEt YnVmL01ha2VmaWxlCj4+IGluZGV4IDA5MTNhNmNjYWI1YS4uYjAzMzJmMTQzNDEzIDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9kbWEtYnVm L01ha2VmaWxlCj4+IEBAIC0xLDQgKzEsNSBAQAo+PiAgb2JqLXkgOj0gZG1hLWJ1Zi5vIGRtYS1m ZW5jZS5vIGRtYS1mZW5jZS1hcnJheS5vIHJlc2VydmF0aW9uLm8gc2Vxbm8tZmVuY2Uubwo+PiAr b2JqLSQoQ09ORklHX0RNQUJVRl9IRUFQUykJKz0gZG1hLWhlYXAubwo+PiAgb2JqLSQoQ09ORklH X1NZTkNfRklMRSkJCSs9IHN5bmNfZmlsZS5vCj4+ICBvYmotJChDT05GSUdfU1dfU1lOQykJCSs9 IHN3X3N5bmMubyBzeW5jX2RlYnVnLm8KPj4gIG9iai0kKENPTkZJR19VRE1BQlVGKQkJKz0gdWRt YWJ1Zi5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuYyBiL2RyaXZl cnMvZG1hLWJ1Zi9kbWEtaGVhcC5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAw MDAwMDAwMDAwMC4uNzJlZDIyNWZhODkyCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVy cy9kbWEtYnVmL2RtYS1oZWFwLmMKPj4gQEAgLTAsMCArMSwyNjggQEAKPj4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogRnJhbWV3b3JrIGZvciB1c2Vy c3BhY2UgRE1BLUJVRiBhbGxvY2F0aW9ucwo+PiArICoKPj4gKyAqIENvcHlyaWdodCAoQykgMjAx MSBHb29nbGUsIEluYy4KPj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBMaW5hcm8gTHRkLgo+PiAr ICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv ZGVidWdmcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxp bnV4L2RtYS1idWYuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPj4gKyNpbmNsdWRlIDxs aW51eC9pZHIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPj4gKwo+PiArI2luY2x1 ZGUgPGxpbnV4L2RtYS1oZWFwLmg+Cj4+ICsjaW5jbHVkZSA8dWFwaS9saW51eC9kbWEtaGVhcC5o Pgo+PiArCj4+ICsjZGVmaW5lIERFVk5BTUUgImRtYV9oZWFwIgo+PiArCj4+ICsjZGVmaW5lIE5V TV9IRUFQX01JTk9SUyAxMjgKPj4gK3N0YXRpYyBERUZJTkVfSURSKGRtYV9oZWFwX2lkcik7Cj4+ ICtzdGF0aWMgREVGSU5FX01VVEVYKG1pbm9yX2xvY2spOyAvKiBQcm90ZWN0IGlkciBhY2Nlc3Nl cyAqLwo+PiArCj4+ICtkZXZfdCBkbWFfaGVhcF9kZXZ0Owo+PiArc3RydWN0IGNsYXNzICpkbWFf aGVhcF9jbGFzczsKPj4gK3N0cnVjdCBsaXN0X2hlYWQgZG1hX2hlYXBfbGlzdDsKPj4gK3N0cnVj dCBkZW50cnkgKmRtYV9oZWFwX2RlYnVnX3Jvb3Q7Cj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0 IGRtYV9oZWFwIC0gcmVwcmVzZW50cyBhIGRtYWJ1ZiBoZWFwIGluIHRoZSBzeXN0ZW0KPj4gKyAq IEBuYW1lOgkJdXNlZCBmb3IgZGVidWdnaW5nL2RldmljZS1ub2RlIG5hbWUKPj4gKyAqIEBvcHM6 CQlvcHMgc3RydWN0IGZvciB0aGlzIGhlYXAKPj4gKyAqIEBtaW5vcgkJbWlub3IgbnVtYmVyIG9m IHRoaXMgaGVhcCBkZXZpY2UKPj4gKyAqIEBoZWFwX2RldnQJCWhlYXAgZGV2aWNlIG5vZGUKPj4g KyAqIEBoZWFwX2NkZXYJCWhlYXAgY2hhciBkZXZpY2UKPj4gKyAqIEBudW1fb2ZfYnVmZmVycwl0 aGUgbnVtYmVyIG9mIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnVmZmVycwo+PiArICogQG51bV9vZl9h bGxvY19ieXRlcwl0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBieXRlcwo+PiArICogQGFsbG9jX2J5 dGVzX3dtCXRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIGJ5dGVzIHdhdGVybWFyawo+PiArICogQHN0 YXRfbG9jawkJbG9jayBmb3IgaGVhcCBzdGF0aXN0aWNzCj4+ICsgKgo+PiArICogUmVwcmVzZW50 cyBhIGhlYXAgb2YgbWVtb3J5IGZyb20gd2hpY2ggYnVmZmVycyBjYW4gYmUgbWFkZS4KPj4gKyAq Lwo+PiArc3RydWN0IGRtYV9oZWFwIHsKPj4gKwljb25zdCBjaGFyICpuYW1lOwo+PiArCXN0cnVj dCBkbWFfaGVhcF9vcHMgKm9wczsKPj4gKwl1bnNpZ25lZCBpbnQgbWlub3I7Cj4+ICsJZGV2X3Qg aGVhcF9kZXZ0Owo+PiArCXN0cnVjdCBjZGV2IGhlYXBfY2RldjsKPj4gKwo+PiArCS8qIGhlYXAg c3RhdGlzdGljcyAqLwo+PiArCXU2NCBudW1fb2ZfYnVmZmVyczsKPj4gKwl1NjQgbnVtX29mX2Fs bG9jX2J5dGVzOwo+PiArCXU2NCBhbGxvY19ieXRlc193bTsKPj4gKwlzcGlubG9ja190IHN0YXRf bG9jazsKPj4gK307Cj4+ICsKPj4gKy8qCj4+ICsgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkg dGhlIGhlYXAgZXhwb3J0ZXIgd2hlbiBhIGJ1ZmZlcnMgZG1hLWJ1Zgo+PiArICogaGFuZGxlIGlz IHJlbGVhc2VkIHNvIHRoZSBjb3JlIGNhbiB1cGRhdGUgdGhlIHN0YXRzIGFuZCByZWxlYXNlIHRo ZQo+PiArICogYnVmZmVyIGhhbmRsZSBtZW1vcnkuCj4+ICsgKgo+PiArICogT3Igd2UgY291bGQg ZmluZCBhIHdheSB0byBob29rIGludG8gdGhlIGZkIG9yIHN0cnVjdCBkbWFfYnVmIGl0c2VsZj8K Pj4gKyAqLwo+PiArdm9pZCBkbWFfaGVhcF9idWZmZXJfZnJlZShzdHJ1Y3QgZG1hX2hlYXBfYnVm ZmVyICpidWZmZXIpCj4+ICt7Cj4+ICsJc3Bpbl9sb2NrKCZidWZmZXItPmhlYXAtPnN0YXRfbG9j ayk7Cj4+ICsJYnVmZmVyLT5oZWFwLT5udW1fb2ZfYnVmZmVycy0tOwo+PiArCWJ1ZmZlci0+aGVh cC0+bnVtX29mX2FsbG9jX2J5dGVzIC09IGJ1ZmZlci0+c2l6ZTsKPj4gKwlzcGluX3VubG9jaygm YnVmZmVyLT5oZWFwLT5zdGF0X2xvY2spOwo+PiArCj4+ICsJa2ZyZWUoYnVmZmVyKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBkbWFfaGVhcF9idWZmZXJfYWxsb2Moc3RydWN0IGRtYV9oZWFw ICpoZWFwLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICsJc3RydWN0 IGRtYV9oZWFwX2J1ZmZlciAqYnVmZmVyOwo+PiArCWludCBmZCwgcmV0Owo+PiArCj4+ICsJYnVm ZmVyID0ga3phbGxvYyhzaXplb2YoKmJ1ZmZlciksIEdGUF9LRVJORUwpOwo+PiArCWlmICghYnVm ZmVyKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCWJ1ZmZlci0+aGVhcCA9IGhlYXA7 Cj4+ICsJcmV0ID0gaGVhcC0+b3BzLT5hbGxvY2F0ZShoZWFwLCBidWZmZXIsIGxlbiwgZmxhZ3Mp Owo+PiArCWlmIChyZXQpIHsKPj4gKwkJa2ZyZWUoYnVmZmVyKTsKPj4gKwkJcmV0dXJuIHJldDsK Pj4gKwl9Cj4+ICsKPj4gKwlmZCA9IGRtYV9idWZfZmQoYnVmZmVyLT5kbWFidWYsIE9fQ0xPRVhF Qyk7Cj4+ICsJaWYgKGZkIDwgMCkgewo+PiArCQlkbWFfYnVmX3B1dChidWZmZXItPmRtYWJ1Zik7 Cj4+ICsJCXJldHVybiBmZDsKPj4gKwl9Cj4+ICsKPj4gKwlzcGluX2xvY2soJmhlYXAtPnN0YXRf bG9jayk7Cj4+ICsJaGVhcC0+bnVtX29mX2J1ZmZlcnMrKzsKPj4gKwloZWFwLT5udW1fb2ZfYWxs b2NfYnl0ZXMgKz0gYnVmZmVyLT5zaXplOwo+PiArCWlmIChoZWFwLT5udW1fb2ZfYWxsb2NfYnl0 ZXMgPiBoZWFwLT5hbGxvY19ieXRlc193bSkKPj4gKwkJaGVhcC0+YWxsb2NfYnl0ZXNfd20gPSBo ZWFwLT5udW1fb2ZfYWxsb2NfYnl0ZXM7Cj4+ICsJc3Bpbl91bmxvY2soJmhlYXAtPnN0YXRfbG9j ayk7Cj4+ICsKPj4gKwlyZXR1cm4gZmQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZG1hX2hl YXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKPj4gK3sKPj4g KwlzdHJ1Y3QgZG1hX2hlYXAgKmhlYXA7Cj4+ICsKPj4gKwltdXRleF9sb2NrKCZtaW5vcl9sb2Nr KTsKPj4gKwloZWFwID0gaWRyX2ZpbmQoJmRtYV9oZWFwX2lkciwgaW1pbm9yKGlub2RlKSk7Cj4+ ICsJbXV0ZXhfdW5sb2NrKCZtaW5vcl9sb2NrKTsKPj4gKwlpZiAoIWhlYXApIHsKPj4gKwkJcHJf ZXJyKCJkbWFfaGVhcDogbWlub3IgJWQgdW5rbm93bi5cbiIsIGltaW5vcihpbm9kZSkpOwo+PiAr CQlyZXR1cm4gLUVOT0RFVjsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBpbnN0YW5jZSBkYXRhIGFzIGNv bnRleHQgKi8KPj4gKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBoZWFwOwo+PiArCW5vbnNlZWthYmxl X29wZW4oaW5vZGUsIGZpbHApOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgZG1hX2hlYXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmls ZSAqZmlscCkKPj4gK3sKPj4gKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOwo+PiArCj4+ICsJ cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBsb25nIGRtYV9oZWFwX2lvY3RsKHN0cnVj dCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKPj4gK3sK Pj4gKwlzd2l0Y2ggKGNtZCkgewo+PiArCWNhc2UgRE1BX0hFQVBfSU9DX0FMTE9DOgo+PiArCXsK Pj4gKwkJc3RydWN0IGRtYV9oZWFwX2FsbG9jYXRpb25fZGF0YSBoZWFwX2FsbG9jYXRpb247Cj4+ ICsJCXN0cnVjdCBkbWFfaGVhcCAqaGVhcCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKPj4gKwkJaW50 IGZkOwo+PiArCj4+ICsJCWlmIChjb3B5X2Zyb21fdXNlcigmaGVhcF9hbGxvY2F0aW9uLCAodm9p ZCBfX3VzZXIgKilhcmcsIF9JT0NfU0laRShjbWQpKSkKPj4gKwkJCXJldHVybiAtRUZBVUxUOwo+ IAo+IEFtIEkgcmlnaHQgaW4gdGhpbmtpbmcgImNtZCIgY29tZXMgZnJvbSB1c2Vyc3BhY2U/IEl0 IG1pZ2h0IGJlIGEgZ29vZAo+IGlkZWEgdG8gbm90IHRydXN0IF9JT0NfU0laRShjbWQpIGFuZCB1 c2Ugb3VyIG93bi4gSSdtIGxvb2tpbmcgYXQKPiBEb2N1bWVudGF0aW9uL2lvY3RsL2JvdGNoaW5n LXVwLWlvY3Rscy50eHQgYW5kIGRybV9pb2N0bCgpCj4gCgpZZXMgY21kIGlzIGZyb20gdXNlcnNw YWNlLCBidXQgd2UgYXJlIGluIGEgc3dpdGNoLWNhc2UgdGhhdCBoYXMgYWxyZWFkeQptYXRjaGVk IGNtZCA9PSBETUFfSEVBUF9JT0NfQUxMT0Mgd2hpY2ggaXMgc2l6ZWQgY29ycmVjdGx5LgoKPj4g Kwo+PiArCQlpZiAoaGVhcF9hbGxvY2F0aW9uLnJlc2VydmVkMCB8fAo+PiArCQkgICAgaGVhcF9h bGxvY2F0aW9uLnJlc2VydmVkMSkgewo+PiArCQkJcHJfd2Fybl9vbmNlKCJkbWFfaGVhcDogaW9j dGwgZGF0YSBub3QgdmFsaWRcbiIpOwo+PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJCX0KPj4g Kwo+PiArCQlmZCA9IGRtYV9oZWFwX2J1ZmZlcl9hbGxvYyhoZWFwLCBoZWFwX2FsbG9jYXRpb24u bGVuLCBoZWFwX2FsbG9jYXRpb24uZmxhZ3MpOwo+PiArCQlpZiAoZmQgPCAwKQo+PiArCQkJcmV0 dXJuIGZkOwo+PiArCj4+ICsJCWhlYXBfYWxsb2NhdGlvbi5mZCA9IGZkOwo+PiArCj4+ICsJCWlm IChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaGVhcF9hbGxvY2F0aW9uLCBfSU9D X1NJWkUoY21kKSkpCj4+ICsJCQlyZXR1cm4gLUVGQVVMVDsKPj4gKwo+PiArCQlicmVhazsKPj4g Kwl9Cj4+ICsJZGVmYXVsdDoKPj4gKwkJcmV0dXJuIC1FTk9UVFk7Cj4+ICsJfQo+PiArCj4+ICsJ cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIGRtYV9oZWFwX2ZvcHMgPSB7Cj4+ICsJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUs Cj4+ICsJLm9wZW4JCT0gZG1hX2hlYXBfb3BlbiwKPj4gKwkucmVsZWFzZQk9IGRtYV9oZWFwX3Jl bGVhc2UsCj4+ICsJLnVubG9ja2VkX2lvY3RsID0gZG1hX2hlYXBfaW9jdGwsCj4+ICsjaWZkZWYg Q09ORklHX0NPTVBBVAo+PiArCS5jb21wYXRfaW9jdGwJPSBkbWFfaGVhcF9pb2N0bCwKPj4gKyNl bmRpZgo+PiArfTsKPj4gKwo+PiAraW50IGRtYV9oZWFwX2FkZChzdHJ1Y3QgZG1hX2hlYXBfaW5m byAqaGVhcF9pbmZvKQo+PiArewo+PiArCXN0cnVjdCBkbWFfaGVhcCAqaGVhcDsKPj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXZfcmV0Owo+PiArCXN0cnVjdCBkZW50cnkgKmhlYXBfcm9vdDsKPj4gKwlp bnQgcmV0Owo+PiArCj4+ICsJaWYgKCFoZWFwX2luZm8tPm5hbWUgfHwgIXN0cmNtcChoZWFwX2lu Zm8tPm5hbWUsICIiKSkgewo+PiArCQlwcl9lcnIoImRtYV9oZWFwOiBDYW5ub3QgYWRkIGhlYXAg d2l0aG91dCBhIG5hbWVcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4g KwlpZiAoIWhlYXBfaW5mby0+b3BzIHx8ICFoZWFwX2luZm8tPm9wcy0+YWxsb2NhdGUpIHsKPj4g KwkJcHJfZXJyKCJkbWFfaGVhcDogQ2Fubm90IGFkZCBoZWFwIHdpdGggaW52YWxpZCBvcHMgc3Ry dWN0XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJaGVhcCA9IGt6 YWxsb2Moc2l6ZW9mKCpoZWFwKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFoZWFwKQo+PiArCQly ZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCWhlYXAtPm5hbWUgPSBoZWFwX2luZm8tPm5hbWU7Cj4+ ICsJbWVtY3B5KGhlYXAtPm9wcywgaGVhcF9pbmZvLT5vcHMsIHNpemVvZigqaGVhcC0+b3BzKSk7 Cj4+ICsKPj4gKwkvKiBGaW5kIHVudXNlZCBtaW5vciBudW1iZXIgKi8KPj4gKwltdXRleF9sb2Nr KCZtaW5vcl9sb2NrKTsKPj4gKwlyZXQgPSBpZHJfYWxsb2MoJmRtYV9oZWFwX2lkciwgaGVhcCwg MCwgTlVNX0hFQVBfTUlOT1JTLCBHRlBfS0VSTkVMKTsKPj4gKwltdXRleF91bmxvY2soJm1pbm9y X2xvY2spOwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCXByX2VycigiZG1hX2hlYXA6IFVuYWJs ZSB0byBnZXQgbWlub3IgbnVtYmVyIGZvciBoZWFwXG4iKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4g Kwl9Cj4+ICsJaGVhcC0+bWlub3IgPSByZXQ7Cj4+ICsKPj4gKwkvKiBDcmVhdGUgZGV2aWNlICov Cj4+ICsJaGVhcC0+aGVhcF9kZXZ0ID0gTUtERVYoTUFKT1IoZG1hX2hlYXBfZGV2dCksIGhlYXAt Pm1pbm9yKTsKPj4gKwlkZXZfcmV0ID0gZGV2aWNlX2NyZWF0ZShkbWFfaGVhcF9jbGFzcywKPj4g KwkJCQlOVUxMLAo+PiArCQkJCWhlYXAtPmhlYXBfZGV2dCwKPj4gKwkJCQlOVUxMLAo+PiArCQkJ CWhlYXAtPm5hbWUpOwo+PiArCWlmIChJU19FUlIoZGV2X3JldCkpIHsKPj4gKwkJcHJfZXJyKCJk bWFfaGVhcDogVW5hYmxlIHRvIGNyZWF0ZSBjaGFyIGRldmljZVxuIik7Cj4+ICsJCXJldHVybiBQ VFJfRVJSKGRldl9yZXQpOwo+PiArCX0KPj4gKwo+PiArCS8qIEFkZCBkZXZpY2UgKi8KPj4gKwlj ZGV2X2luaXQoJmhlYXAtPmhlYXBfY2RldiwgJmRtYV9oZWFwX2ZvcHMpOwo+PiArCXJldCA9IGNk ZXZfYWRkKCZoZWFwLT5oZWFwX2NkZXYsIGRtYV9oZWFwX2RldnQsIE5VTV9IRUFQX01JTk9SUyk7 Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2aWNlX2Rlc3Ryb3koZG1hX2hlYXBfY2xhc3Ms IGhlYXAtPmhlYXBfZGV2dCk7Cj4+ICsJCXByX2VycigiZG1hX2hlYXA6IFVuYWJsZSB0byBhZGQg Y2hhciBkZXZpY2VcbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCWhlYXAt Pm51bV9vZl9idWZmZXJzID0gMDsKPj4gKwloZWFwLT5udW1fb2ZfYWxsb2NfYnl0ZXMgPSAwOwo+ PiArCWhlYXAtPmFsbG9jX2J5dGVzX3dtID0gMDsKPj4gKwlzcGluX2xvY2tfaW5pdCgmaGVhcC0+ c3RhdF9sb2NrKTsKPj4gKwloZWFwX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoaGVhcC0+bmFt ZSwgZG1hX2hlYXBfZGVidWdfcm9vdCk7Cj4+ICsJZGVidWdmc19jcmVhdGVfdTY0KCJudW1fb2Zf YnVmZmVycyIsIDA0NDQsIGhlYXBfcm9vdCwgJmhlYXAtPm51bV9vZl9idWZmZXJzKTsKPj4gKwlk ZWJ1Z2ZzX2NyZWF0ZV91NjQoIm51bV9vZl9hbGxvY19ieXRlcyIsIDA0NDQsIGhlYXBfcm9vdCwg JmhlYXAtPm51bV9vZl9hbGxvY19ieXRlcyk7Cj4+ICsJZGVidWdmc19jcmVhdGVfdTY0KCJhbGxv Y19ieXRlc193bSIsIDA0NDQsIGhlYXBfcm9vdCwgJmhlYXAtPmFsbG9jX2J5dGVzX3dtKTsKPiAK PiBJIGNhbiBzZWUgaXQgYmVpbmcgdXNlZnVsIHRvIGJlIGFibGUgdG8gcmVzZXQgdGhpcyBvbmUu Cj4gCgpBZ3JlZSwgbG9va3MgbGlrZSB0aGVzZSB3aWxsIGJlIHB1bGxlZCBpbnRvIHRoZSBoZWFw cyB0aGVtc2VsdmVzIGluIHRoZQpuZXh0IHJldiBKb2huIGlzIHdvcmtpbmcgb24sIHNvIHNob3Vs ZG4ndCBtYXR0ZXIgaGVyZS4KCldoYXQgd2UgYXJlIG1vdmluZyB0byBpcyBhIGJldHRlciAoSSB0 aGluaykgb3duZXJzaGlwIG1vZGVsLiAnRE1BLWhlYXBzJwpvbmx5IHRyYWNrcyAnaGVhcHMnLCAn aGVhcHMnIHRyYWNrIHRoZWlyICdidWZmZXJzJy4gSW4gdGhlIGFib3ZlIHdlIGhhdmUKJ0RNQS1o ZWFwcycgdHJhY2tpbmcgaW5mbyBvbiAnYnVmZmVycycsIGJ5cGFzc2luZyB0aGUgJ2hlYXBzJyBs YXllciwgc28KaW4gdGhlIG5leHQgcmV2IHdpbGwgYmUgdGhlICdETUEtaGVhcHMnIGNvcmUgYXNr cyB0aGUgJ2hlYXBzJyB0byByZXBvcnQKYmFjayBzdGF0cy4KCj4+ICsKPj4gKwlyZXR1cm4gMDsK Pj4gK30KPj4gK0VYUE9SVF9TWU1CT0woZG1hX2hlYXBfYWRkKTsKPj4gKwo+PiArc3RhdGljIGlu dCBkbWFfaGVhcF9pbml0KHZvaWQpCj4+ICt7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCXJldCA9 IGFsbG9jX2NocmRldl9yZWdpb24oJmRtYV9oZWFwX2RldnQsIDAsIE5VTV9IRUFQX01JTk9SUywg REVWTkFNRSk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCWRtYV9o ZWFwX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBERVZOQU1FKTsKPj4gKwlpZiAo SVNfRVJSKGRtYV9oZWFwX2NsYXNzKSkgewo+PiArCQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24o ZG1hX2hlYXBfZGV2dCwgTlVNX0hFQVBfTUlOT1JTKTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIoZG1h X2hlYXBfY2xhc3MpOwo+PiArCX0KPj4gKwo+PiArCWRtYV9oZWFwX2RlYnVnX3Jvb3QgPSBkZWJ1 Z2ZzX2NyZWF0ZV9kaXIoImRtYV9oZWFwIiwgTlVMTCk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4g K30KPj4gK3N1YnN5c19pbml0Y2FsbChkbWFfaGVhcF9pbml0KTsKPj4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvZG1hLWhlYXAuaCBiL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaAo+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjA5ZWFiMzEwNTExOAo+PiAt LS0gL2Rldi9udWxsCj4+ICsrKyBiL2luY2x1ZGUvbGludXgvZG1hLWhlYXAuaAo+PiBAQCAtMCww ICsxLDU3IEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+PiArLyoK Pj4gKyAqIERNQUJVRiBIZWFwcyBBbGxvY2F0aW9uIEluZnJhc3RydWN0dXJlCj4+ICsgKgo+PiAr ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLgo+PiArICogQ29weXJpZ2h0IChDKSAy MDE5IExpbmFybyBMdGQuCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBfRE1BX0hFQVBTX0gKPj4g KyNkZWZpbmUgX0RNQV9IRUFQU19ICj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBkbWFfaGVhcF9idWZmZXIgLSBtZXRhZGF0YSBmb3Ig YSBwYXJ0aWN1bGFyIGJ1ZmZlcgo+PiArICogQGhlYXA6CQliYWNrIHBvaW50ZXIgdG8gdGhlIGhl YXAgdGhlIGJ1ZmZlciBjYW1lIGZyb20KPj4gKyAqIEBkbWFidWY6CQliYWNraW5nIGRtYS1idWYg Zm9yIHRoaXMgYnVmZmVyCj4+ICsgKiBAc2l6ZToJCXNpemUgb2YgdGhlIGJ1ZmZlcgo+PiArICog QGZsYWdzOgkJYnVmZmVyIHNwZWNpZmljIGZsYWdzCj4+ICsgKi8KPj4gK3N0cnVjdCBkbWFfaGVh cF9idWZmZXIgewo+PiArCXN0cnVjdCBkbWFfaGVhcCAqaGVhcDsKPj4gKwlzdHJ1Y3QgZG1hX2J1 ZiAqZG1hYnVmOwo+PiArCXNpemVfdCBzaXplOwo+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBkbWFfaGVhcF9vcHMgLSBvcHMgdG8gb3Bl cmF0ZSBvbiBhIGdpdmVuIGhlYXAKPj4gKyAqIEBhbGxvY2F0ZToJCWFsbG9jYXRlIGJ1ZmZlcgo+ PiArICoKPj4gKyAqIGFsbG9jYXRlIHJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZXJy b3IuCj4+ICsgKi8KPj4gK3N0cnVjdCBkbWFfaGVhcF9vcHMgewo+PiArCWludCAoKmFsbG9jYXRl KShzdHJ1Y3QgZG1hX2hlYXAgKmhlYXAsCj4+ICsJCQlzdHJ1Y3QgZG1hX2hlYXBfYnVmZmVyICpi dWZmZXIsCj4+ICsJCQl1bnNpZ25lZCBsb25nIGxlbiwKPj4gKwkJCXVuc2lnbmVkIGxvbmcgZmxh Z3MpOwo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgZG1hX2hlYXBfaW5mbyAtIGhv bGRzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgYSBETUEtaGVhcAo+PiArICogQG9wczoJ CW9wcyBzdHJ1Y3QgZm9yIHRoaXMgaGVhcAo+PiArICogQG5hbWU6CQl1c2VkIGZvciBkZWJ1Z2dp bmcvZGV2aWNlLW5vZGUgbmFtZQo+PiArICovCj4+ICtzdHJ1Y3QgZG1hX2hlYXBfaW5mbyB7Cj4+ ICsJY29uc3QgY2hhciAqbmFtZTsKPj4gKwlzdHJ1Y3QgZG1hX2hlYXBfb3BzICpvcHM7Cj4+ICt9 Owo+PiArCj4+ICsvKioKPj4gKyAqIGRtYV9oZWFwX2FkZCAtIGFkZHMgYSBoZWFwIHRvIGRtYWJ1 ZiBoZWFwcwo+PiArICogQGhlYXA6CQl0aGUgaGVhcCB0byBhZGQKPj4gKyAqLwo+PiAraW50IGRt YV9oZWFwX2FkZChzdHJ1Y3QgZG1hX2hlYXBfaW5mbyAqaGVhcF9pbmZvKTsKPj4gKwo+IAo+IEZv ciBtZSwgdGhlIG1haW4gdGhpbmcgdGhhdCdzIG1pc3NpbmcgaXMgYSB3YXkgdG8gdW5yZWdpc3Rl ciBhIGhlYXAuCj4gSWYgZHJpdmVycy9tb2R1bGVzIGFyZSByZWdpc3RlcmluZyBoZWFwcywgdGhl biB0aGV5IGFsc28gbmVlZCB0byBiZQo+IGFibGUgdG8gcmVtb3ZlIHRoZW0gYWdhaW4gd2hlbiB0 aGV5IGdvIGF3YXkgKHJtbW9kIG9yIHdoYXRldmVyKS4KPiAKPiBJIHRoaW5rIHRoYXQgc3RhcnRz IHRvIGJlIHF1aXRlIGEgY2FuIG9mIHdvcm1zLCBhcyB5b3UgbWlnaHQgZW5kIHVwCj4gd2l0aCBi dWZmZXJzIHdoaWNoIG91dGxpdmUgdGhlaXIgYWxsb2NhdG9yICh0aGF0J3MgdHJ1ZSB0b2RheSBh cyB3ZWxsCj4gYWZhaWssIGJ1dCBpcyBpbiBkcml2ZXJzIHJhdGhlciB0aGFuIHNvbWV0aGluZyBt b3JlIGNlbnRyYWwpLgo+IAoKWWVhaCwgd2FzIHdhbnRpbmcgdG8gYXZvaWQgZGVhbGluZyB3aXRo IGFsbCB0aGF0LCBhdCBsZWFzdCB0byBzdGFydCBvdXQKd2l0aC4gQXQgYSBoaWdoIGxldmVsIG1l bW9yeSBzaG91bGRuJ3QgZXZlciBqdXN0IGRpc2FwcGVhciwgd2Ugc2hvdWxkCmJsb2NrIHJlbW92 aW5nIGEgaGVhcCBkcml2ZXIgdW50aWwgYWxsIGJ1ZmZlcnMgaGF2ZSBiZWVuIHJlbGVhc2VkLgoK Pj4gKyNlbmRpZiAvKiBfRE1BX0hFQVBTX0ggKi8KPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9saW51eC9kbWEtaGVhcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2RtYS1oZWFwLmgKPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi43ZGNiYjk4ZTI5ZWMKPj4g LS0tIC9kZXYvbnVsbAo+PiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZG1hLWhlYXAuaAo+PiBA QCAtMCwwICsxLDU0IEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lwo+PiArLyoKPj4gKyAqIERNQUJVRiBIZWFwcyBVc2Vyc3BhY2UgQVBJCj4+ICsgKgo+PiArICog Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLgo+PiArICogQ29weXJpZ2h0IChDKSAyMDE5 IExpbmFybyBMdGQuCj4+ICsgKi8KPj4gKyNpZm5kZWYgX1VBUElfTElOVVhfRE1BQlVGX1BPT0xf SAo+PiArI2RlZmluZSBfVUFQSV9MSU5VWF9ETUFCVUZfUE9PTF9ICj4+ICsKPj4gKyNpbmNsdWRl IDxsaW51eC9pb2N0bC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+ICsKPj4gKy8q Kgo+PiArICogRE9DOiBETUFCVUYgSGVhcHMgVXNlcnNwYWNlIEFQSQo+PiArICoKPj4gKyAqLwo+ PiArCj4+ICsvKgo+PiArICogbWFwcGluZ3Mgb2YgdGhpcyBidWZmZXIgc2hvdWxkIGJlIHVuLWNh Y2hlZCwgb3RoZXJ3aXNlIGRtYWJ1ZiBoZWFwcyB3aWxsCj4+ICsgKiBuZWVkIGNhY2hlIG1haW50 ZW5hbmNlIHVzaW5nIERNQV9CVUZfU1lOQ18qIHdoZW4gdGhlIGJ1ZmZlciBpcyBtYXBwZWQgZm9y IGRtYQo+PiArICovCj4+ICsjZGVmaW5lIERNQV9IRUFQX0ZMQUdfQ09IRVJFTlQgMQo+IAo+IEkn bSBub3QgcmVhbGx5IGNsZWFyIG9uIHRoZSBpbnRlbnRpb24gb2YgdGhpcyBmbGFnLCBhbmQgSSBk byB0aGluawo+IHRoYXQgIkNPSEVSRU5UIiBpcyBhIGNvbmZ1c2luZy9vdmVybG9hZGVkIHRlcm0u Cj4gCgpJdCBpcywgSSB3YW50ZWQgdG8gdXNlIHRoZSB0ZXJtIGFzIHVzZWQgYnkgdGhlIG90aGVy IERNQSBmcmFtZXdvcmtzLCBidXQKSSBkb24ndCByZWFsbHkgbGlrZSBpdCBlaXRoZXIuCgo+IFRv IG1lLCBpZiB0aGUgYnVmZmVyIGlzIGFjdHVhbGx5IGNvaGVyZW50IHdpdGggRE1BIG1hc3RlcnMs IHRoZW4KPiB0aGVyZSdzIG5vIG5lZWQgZm9yIGFueSBjYWNoZSBtYWludGVuYW5jZSAtIHdoaWNo IGlzIHRoZSBvcHBvc2l0ZSBvZgo+IHdoYXQgdGhlIGNvbW1lbnQgc2F5cy4KPiAKCkJ1ZmZlcnMg dGhlbXNlbHZlcyBjYW4ndCBiZSAobm9uKWNvaGVyZW50LCB0aGV5IGFyZSBqdXN0IG1lbW9yeSwg bWFzdGVycwpvbiBhIGJ1cyBjYW4gaGF2ZSBjb2hlcmVudCBpbnRlcmFjdGlvbnMgZGVwZW5kaW5n IG9uIHdoaWNoIG1hc3RlcnMgYXJlCnRhbGtpbmcgYW5kIGhvdyB0aGUgYnVmZmVyIGluIHF1ZXN0 aW9uIGlzIG1hbmFnZWQuIFNvIHJlYWxseSB0aGUgdGVybQppc24ndCByaWdodCBhbG1vc3QgYW55 d2hlcmUgYXMgaXQgb25seSBhcHBsaWVzIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mCnRoZSBsb2Nh bCBjb3JlIChydW5uaW5nIExpbnV4KSBhbmQgb25seSBpZiBzaW1wbHkgbm90IGxvY2FsbHkgY2Fj aGluZwp0aGUgYnVmZmVyIGlzIGVub3VnaCB0byBtYWtlIGl0ICJjb2hlcmVudCIuIEJ1dCB0aGF0 IGlzIGEgcmFudCBiZXN0CnNhdmVkIGZvciBhbm90aGVyIHRpbWUuCgpGb3IgdXMgbGV0cyBkcm9w IHRoYXQgZmxhZywgaWYgeW91IHdhbnQgdG8gYWxsb2NhdGUgZnJvbSBhCm5vbi1sb2NhbGx5LWNh Y2hlZCBidWZmZXIgdGhlbiBpdCBjYW4gYmUgaXRzIG93biBoZWFwIHRoYXQgb25seSBwcm92aWRl cwp0aGF0IHR5cGUgb2YgYWxsb2NhdGlvbi4gT3IgZXZlbiB0aGUgc2FtZSBoZWFwIGV4cG9ydGVy IHByb3ZpZGluZyBib3RoCnR5cGVzLCBqdXN0IHJlZ2lzdGVycyBpdHNlbGYgdHdpY2Ugd2l0aCB0 aGUgRE1BLWhlYXBzIGNvcmUsIG9uY2UgZm9yIGFuCmludGVyZmFjZSB0aGF0IGdpdmVzIG91dCBj YWNoZWQgYnVmZmVycyBhbmQgb25lIGZvciB1bmNhY2hlZC4KCkFuZHJldwoKPiBDaGVlcnMsCj4g LUJyaWFuCj4gCj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IGRtYV9oZWFwX2FsbG9jYXRpb25f ZGF0YSAtIG1ldGFkYXRhIHBhc3NlZCBmcm9tIHVzZXJzcGFjZSBmb3IKPj4gKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0aW9ucwo+PiArICogQGxlbjoJCXNp emUgb2YgdGhlIGFsbG9jYXRpb24KPj4gKyAqIEBmbGFnczoJCWZsYWdzIHBhc3NlZCB0byBwb29s Cj4+ICsgKiBAZmQ6CQkJd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCBhIGZkIHdoaWNoIHByb3ZkZXMg dGhlCj4+ICsgKgkJCWhhbmRsZSB0byB0aGUgYWxsb2NhdGVkIGRtYS1idWYKPj4gKyAqCj4+ICsg KiBQcm92aWRlZCBieSB1c2Vyc3BhY2UgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGlvY3RsCj4+ICsg Ki8KPj4gK3N0cnVjdCBkbWFfaGVhcF9hbGxvY2F0aW9uX2RhdGEgewo+PiArCV9fdTY0IGxlbjsK Pj4gKwlfX3UzMiBmbGFnczsKPj4gKwlfX3UzMiBmZDsKPj4gKwlfX3UzMiByZXNlcnZlZDA7Cj4+ ICsJX191MzIgcmVzZXJ2ZWQxOwo+PiArfTsKPj4gKwo+PiArI2RlZmluZSBETUFfSEVBUF9JT0Nf TUFHSUMJCSdIJwo+PiArCj4+ICsvKioKPj4gKyAqIERPQzogRE1BX0hFQVBfSU9DX0FMTE9DIC0g YWxsb2NhdGUgbWVtb3J5IGZyb20gcG9vbAo+PiArICoKPj4gKyAqIFRha2VzIGFuIGRtYV9oZWFw X2FsbG9jYXRpb25fZGF0YSBzdHJ1Y3QgYW5kIHJldHVybnMgaXQgd2l0aCB0aGUgZmQgZmllbGQK Pj4gKyAqIHBvcHVsYXRlZCB3aXRoIHRoZSBkbWFidWYgaGFuZGxlIG9mIHRoZSBhbGxvY2F0aW9u Lgo+PiArICovCj4+ICsjZGVmaW5lIERNQV9IRUFQX0lPQ19BTExPQwlfSU9XUihETUFfSEVBUF9J T0NfTUFHSUMsIDAsIFwKPj4gKwkJCQkgICAgICBzdHJ1Y3QgZG1hX2hlYXBfYWxsb2NhdGlvbl9k YXRhKQo+PiArCj4+ICsjZW5kaWYgLyogX1VBUElfTElOVVhfRE1BQlVGX1BPT0xfSCAqLwo+PiAt LSAKPj4gMi4xOS4xCj4+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbA==