From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: Re: [RFC 2/3] drm: Add helper iterator functions to iterate over plane damage. Date: Thu, 5 Apr 2018 10:49:09 +0200 Message-ID: <0edfe662-6463-a143-e00a-d3d4bc06a229@vmware.com> References: <1522885748-67122-1-git-send-email-drawat@vmware.com> <1522885748-67122-3-git-send-email-drawat@vmware.com> <20180405075205.GQ3881@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0045.outbound.protection.outlook.com [104.47.42.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id A40A66E6F0 for ; Thu, 5 Apr 2018 08:49:33 +0000 (UTC) In-Reply-To: <20180405075205.GQ3881@phenom.ffwll.local> 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: Deepak Rawat , dri-devel@lists.freedesktop.org, syeh@vmware.com, linux-graphics-maintainer@vmware.com, ville.syrjala@linux.intel.com, lukasz.spintzyk@displaylink.com, noralf@tronnes.org, robdclark@gmail.com, gustavo@padovan.org, maarten.lankhorst@linux.intel.com, seanpaul@chromium.org, airlied@linux.ie, linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gMDQvMDUvMjAxOCAwOTo1MiBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiBPbiBXZWQsIEFw ciAwNCwgMjAxOCBhdCAwNDo0OTowN1BNIC0wNzAwLCBEZWVwYWsgUmF3YXQgd3JvdGU6Cj4+IFdp dGggZGFtYWdlIHByb3BlcnR5IGluIGRybV9wbGFuZV9zdGF0ZSwgdGhpcyBwYXRjaCBhZGRzIGhl bHBlciBpdGVyYXRvcgo+PiB0byB0cmF2ZXJzZSB0aGUgZGFtYWdlIGNsaXBzLiBJdGVyYXRvciB3 aWxsIHJldHVybiB0aGUgZGFtYWdlIHJlY3RhbmdsZXMKPj4gaW4gZnJhbWVidWZmZXIsIHBsYW5l IG9yIGNydGMgY29vcmRpbmF0ZXMgYXMgbmVlZCBieSBkcml2ZXIKPj4gaW1wbGVtZW50YXRpb24u Cj4+Cj4+IFNpZ25lZC1vZmYtYnk6IERlZXBhayBSYXdhdCA8ZHJhd2F0QHZtd2FyZS5jb20+Cj4g SSdkIHJlYWxseSBsaWtlIHNlbGZ0ZXN0L3VuaXR0ZXN0cyBmb3IgdGhpcyBzdHVmZi4gVGhlcmUn cyBhbiBhd2Z1bCBsb3Qgb2YKPiBjb3JuZXJjYXNlcyBpbiB0aGlzIGhlcmUgKGZvciBhbnkgb2Yg dGhlIHRyYW5zZm9ybWVkIGl0ZXJhdG9ycyBhdCBsZWFzdCksCj4gYW5kIHVuaXQgdGVzdHMgaXMg dGhlIGJlc3Qgd2F5IHRvIG1ha2Ugc3VyZSB3ZSBoYW5kbGUgdGhlbSBhbGwgY29ycmVjdGx5Lgo+ Cj4gQm9udXMgcG9pbnRzIGlmIHlvdSBpbnRlZ3JhdGUgdGhlIG5ldyBzZWxmdGVzdHMgaW50byBp Z3Qgc28gaW50ZWwgQ0kgY2FuCj4gcnVuIHRoZW0sIHNlZWwgaWd0L3Rlc3RzL2RybV9tbS5jIGZv ciBhbiBleGFtcGxlLiBkcm1fbW0gc2VsZnRlc3QgaXMgYWxzbwo+IHRoZSBmcmFtZXdvcmsgSSdk IGNvcHkgZm9yIHRoaXMgc3R1ZmYuCj4KPj4gLS0tCj4+ICAgZHJpdmVycy9ncHUvZHJtL2RybV9h dG9taWNfaGVscGVyLmMgfCAxMjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4+ICAgaW5jbHVkZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaCAgICAgfCAgMzkgKysrKysrKysr KysrCj4+ICAgMiBmaWxlcyBjaGFuZ2VkLCAxNjEgaW5zZXJ0aW9ucygrKQo+Pgo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pY19oZWxwZXIuYwo+PiBpbmRleCA1NWI0NGUzLi4zNTViNTE0IDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2F0b21pY19oZWxwZXIuYwo+PiBAQCAtMzg2NSwzICszODY1LDEyNSBA QCB2b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9vYmpfZHVwbGljYXRlX3N0YXRlKHN0 cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iago+PiAgIAltZW1jcHkoc3RhdGUsIG9iai0+c3RhdGUs IHNpemVvZigqc3RhdGUpKTsKPj4gICB9Cj4+ICAgRVhQT1JUX1NZTUJPTChfX2RybV9hdG9taWNf aGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZSk7Cj4+ICsKPj4gKy8qKgo+PiArICog ZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCAtIGluaXRpYWxpemUgdGhlIGRhbWFn ZSBpdGVyYXRvcgo+PiArICogQGl0ZXI6IFRoZSBpdGVyYXRvciB0byBpbml0aWFsaXplLgo+PiAr ICogQHR5cGU6IENvb3JkaW5hdGUgdHlwZSBjYWxsZXIgaXMgaW50ZXJlc3RlZCBpbi4KPj4gKyAq IEBzdGF0ZTogcGxhbmVfc3RhdGUgZnJvbSB3aGljaCB0byBpdGVyYXRlIHRoZSBkYW1hZ2UgY2xp cHMuCj4+ICsgKiBAaGRpc3BsYXk6IFdpZHRoIG9mIGNydGMgb24gd2hpY2ggcGxhbmUgaXMgc2Nh bm5lZCBvdXQuCj4+ICsgKiBAdmRpc3BsYXk6IEhlaWdodCBvZiBjcnRjIG9uIHdoaWNoIHBsYW5l IGlzIHNjYW5uZWQgb3V0Lgo+PiArICoKPj4gKyAqIEluaXRpYWxpemUgYW4gaXRlcmF0b3IgdGhh dCBpcyB1c2VkIHRvIHRyYW5zbGF0ZSBhbmQgY2xpcCBhIHNldCBvZiBkYW1hZ2UKPj4gKyAqIHJl Y3RhbmdsZXMgaW4gZnJhbWVidWZmZXIgY29vcmRpbmF0ZXMgdG8gcGxhbmUgYW5kIGNydGMgY29v cmRpbmF0ZXMuIFRoZSB0eXBlCj4+ICsgKiBhcmd1bWVudCBzcGVjaWZ5IHdoaWNoIHR5cGUgb2Yg Y29vcmRpbmF0ZSB0byBpdGVyYXRlIGluLgo+PiArICoKPj4gKyAqIFJldHVybnM6IDAgb24gc3Vj Y2VzcyBhbmQgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBlcnJvci4gSWYgYW4gZXJyb3IgY29kZSBp cwo+PiArICogcmV0dXJuZWQgdGhlbiBpdCBtZWFucyB0aGUgcGxhbmUgc3RhdGUgc2hvdWxkIG5v dCB1cGRhdGUuCj4+ICsgKi8KPj4gK2ludAo+PiArZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0 ZXJfaW5pdChzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgKml0ZXIsCj4+ICsJ CQkJICAgZW51bSBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfY2xpcF90eXBlIHR5cGUsCj4+ICsJ CQkJICAgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCj4+ICsJCQkJICAgdWlu dDMyX3QgaGRpc3BsYXksIHVpbnQzMl90IHZkaXNwbGF5KQo+PiArewo+PiArCWlmICghc3RhdGUg fHwgIXN0YXRlLT5jcnRjIHx8ICFzdGF0ZS0+ZmIpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiAr Cj4+ICsJbWVtc2V0KGl0ZXIsIDAsIHNpemVvZigqaXRlcikpOwo+PiArCWl0ZXItPmNsaXBzID0g KHN0cnVjdCBkcm1fcmVjdCAqKXN0YXRlLT5kYW1hZ2VfY2xpcHMtPmRhdGE7Cj4+ICsJaXRlci0+ bnVtX2NsaXBzID0gc3RhdGUtPm51bV9jbGlwczsKPj4gKwlpdGVyLT50eXBlID0gdHlwZTsKPj4g Kwo+PiArCS8qCj4+ICsJICogRnVsbCB1cGRhdGUgaW4gY2FzZSBvZiBzY2FsaW5nIG9yIHJvdGF0 aW9uLiBJbiBmdXR1cmUgc3VwcG9ydCBmb3IKPj4gKwkgKiBzY2FsaW5nL3JvdGF0aW5nIGRhbWFn ZSBjbGlwcyBjYW4gYmUgYWRkZWQKPj4gKwkgKi8KPj4gKwlpZiAoc3RhdGUtPmNydGNfdyAhPSAo c3RhdGUtPnNyY193ID4+IDE2KSB8fAo+PiArCSAgICBzdGF0ZS0+Y3J0Y19oICE9IHN0YXRlLT5z cmNfaCA+PiAxNiB8fCBzdGF0ZS0+cm90YXRpb24gIT0gMCkgewo+PiArCQlpdGVyLT5jdXJyX2Ns aXAgPSBpdGVyLT5udW1fY2xpcHM7Cj4+ICsJCXJldHVybiAwOwo+IEdpdmVuIHRoZXJlJ3Mgbm8g dXNlciBvZiB0aGlzIEkgaGF2ZSBubyBpZGVhIGhvdyB0aGlzIG1hbmFnZXMgdG8gcHJvdm9rZSBh Cj4gZnVsbCBjbGlwIHJlY3QuIHNlbGZ0ZXN0IGNvZGUgd291bGQgYmUgcGVyZmVjdCBmb3Igc3R1 ZmYgbGlrZSB0aGlzLgo+Cj4gQWxzbywgSSB0aGluayB3ZSBzaG91bGQgcHJvdmlkZSBhIGZ1bGwg Y2xpcCBmb3IgdGhlIGNhc2Ugb2YgbnVtX2NsaXBzID09Cj4gMCwgc28gdGhhdCBkcml2ZXIgY29k ZSBjYW4gc2ltcGx5IGl0ZXJhdGUgb3ZlciBhbGwgY2xpcHMgYW5kIGRvZXNuJ3QgZXZlcgo+IGhh dmUgdG8gaGFuZGxlIHRoZSAibm8gY2xpcCByZWN0cyBwcm92aWRlZCIgY2FzZSBhcyBhIHNwZWNp YWwgY2FzZSBpdHNlbGYuCj4KPj4gKwl9Cj4+ICsKPj4gKwlpdGVyLT5mYl9zcmMueDEgPSAwOwo+ PiArCWl0ZXItPmZiX3NyYy55MSA9IDA7Cj4+ICsJaXRlci0+ZmJfc3JjLngyID0gc3RhdGUtPmZi LT53aWR0aDsKPj4gKwlpdGVyLT5mYl9zcmMueTIgPSBzdGF0ZS0+ZmItPmhlaWdodDsKPj4gKwo+ PiArCWl0ZXItPnBsYW5lX3NyYy54MSA9IHN0YXRlLT5zcmNfeCA+PiAxNjsKPj4gKwlpdGVyLT5w bGFuZV9zcmMueTEgPSBzdGF0ZS0+c3JjX3kgPj4gMTY7Cj4+ICsJaXRlci0+cGxhbmVfc3JjLngy ID0gaXRlci0+cGxhbmVfc3JjLngxICsgKHN0YXRlLT5zcmNfdyA+PiAxNik7Cj4+ICsJaXRlci0+ cGxhbmVfc3JjLnkyID0gaXRlci0+cGxhbmVfc3JjLnkxICsgKHN0YXRlLT5zcmNfaCA+PiAxNik7 Cj4+ICsJaXRlci0+dHJhbnNsYXRlX3BsYW5lX3ggPSAtaXRlci0+cGxhbmVfc3JjLngxOwo+PiAr CWl0ZXItPnRyYW5zbGF0ZV9wbGFuZV95ID0gLWl0ZXItPnBsYW5lX3NyYy55MTsKPj4gKwo+PiAr CS8qIENsaXAgcGxhbmUgc3JjIHJlY3QgdG8gZmIgZGltZW5zaW9ucyAqLwo+PiArCWRybV9yZWN0 X2ludGVyc2VjdCgmaXRlci0+cGxhbmVfc3JjLCAmaXRlci0+ZmJfc3JjKTsKPiBUaGlzIHNtZWxs cyBsaWtlIGRyaXZlciBidWcuIEFsc28sIHNlZSBWaWxsZSdzIHJlY2VudCBlZmZvcnRzIHRvIGlt cHJvdmUKPiB0aGUgYXRvbWljIHBsYW5lIGNsaXBwaW5nLCBJIHRoaW5rIGRybV9wbGFuZV9zdGF0 ZSBhbHJlYWR5IGhhcyBhbGwgdGhlCj4gY2xpcCByZWN0cyB5b3Ugd2FudC4KPgo+PiArCj4+ICsJ aXRlci0+Y3J0Y19zcmMueDEgPSAwOwo+PiArCWl0ZXItPmNydGNfc3JjLnkxID0gMDsKPj4gKwlp dGVyLT5jcnRjX3NyYy54MiA9IGhkaXNwbGF5Owo+PiArCWl0ZXItPmNydGNfc3JjLnkyID0gdmRp c3BsYXk7Cj4+ICsJaXRlci0+dHJhbnNsYXRlX2NydGNfeCA9IC0oaXRlci0+cGxhbmVfc3JjLngx IC0gc3RhdGUtPmNydGNfeCk7Cj4+ICsJaXRlci0+dHJhbnNsYXRlX2NydGNfeCA9IC0oaXRlci0+ cGxhbmVfc3JjLnkxIC0gc3RhdGUtPmNydGNfeSk7Cj4+ICsKPj4gKwkvKiBDbGlwIGNydGMgc3Jj IHJlY3QgdG8gcGxhbmUgZGltZW5zaW9ucyAqLwo+PiArCWRybV9yZWN0X3RyYW5zbGF0ZSgmaXRl ci0+Y3J0Y19zcmMsIC1pdGVyLT50cmFuc2xhdGVfY3J0Y194LAo+PiArCQkJICAgLWl0ZXItPnRy YW5zbGF0ZV9jcnRjX3gpOwo+IFdlIGNhbiBhbHNvIHNjYWxlLgoKSSBzdWdnZXN0IHdlIGxlYXZl IG91dCBzY2FsaW5nIGZvciBub3cgdW50aWwgc29tZW9uZSBhY3R1YWxseSBuZWVkcyBpdC4KCj4K Pj4gKwlkcm1fcmVjdF9pbnRlcnNlY3QoJml0ZXItPmNydGNfc3JjLCAmaXRlci0+cGxhbmVfc3Jj KTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTChkcm1fYXRvbWlj X2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KTsKPj4gKwo+PiArLyoqCj4+ICsgKiBkcm1fYXRvbWlj X2hlbHBlcl9kYW1hZ2VfaXRlcl9uZXh0IC0gYWR2YW5jZSB0aGUgZGFtYWdlIGl0ZXJhdG9yCj4+ ICsgKiBAaXRlcjogVGhlIGl0ZXJhdG9yIHRvIGFkdmFuY2UuCj4+ICsgKiBAcmVjdDogUmV0dXJu IGEgcmVjdGFuZ2xlIGluIGNvb3JkaW5hdGUgc3BlY2lmaWVkIGR1cmluZyBpdGVyYXRvciBpbml0 Lgo+PiArICoKPj4gKyAqIFJldHVybnM6ICB0cnVlIGlmIHRoZSBvdXRwdXQgaXMgdmFsaWQsIGZh bHNlIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUKPj4gKyAqIHJlY3RhbmdsZSBsaXN0 LiBJZiB0aGUgZmlyc3QgY2FsbCByZXR1cm4gZmFsc2UsIG1lYW5zIG5lZWQgZnVsbCB1cGRhdGUu Cj4+ICsgKi8KPj4gK2Jvb2wKPj4gK2RybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX25leHQo c3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyICppdGVyLAo+PiArCQkJCSAgIHN0 cnVjdCBkcm1fcmVjdCAqcmVjdCkKPj4gK3sKPj4gKwljb25zdCBzdHJ1Y3QgZHJtX3JlY3QgKmN1 cnJfY2xpcDsKPj4gKwo+PiArbmV4dF9jbGlwOgo+PiArCWlmIChpdGVyLT5jdXJyX2NsaXAgPj0g aXRlci0+bnVtX2NsaXBzKQo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ICsKPj4gKwljdXJyX2NsaXAg PSAmaXRlci0+Y2xpcHNbaXRlci0+Y3Vycl9jbGlwXTsKPj4gKwlpdGVyLT5jdXJyX2NsaXArKzsK Pj4gKwo+PiArCXJlY3QtPngxID0gY3Vycl9jbGlwLT54MTsKPj4gKwlyZWN0LT54MiA9IGN1cnJf Y2xpcC0+eDI7Cj4+ICsJcmVjdC0+eTEgPSBjdXJyX2NsaXAtPnkxOwo+PiArCXJlY3QtPnkyID0g Y3Vycl9jbGlwLT55MjsKPj4gKwo+PiArCS8qIENsaXAgZGFtYWdlIHJlY3Qgd2l0aGluIGZiIGxp bWl0ICovCj4+ICsJaWYgKCFkcm1fcmVjdF9pbnRlcnNlY3QocmVjdCwgJml0ZXItPmZiX3NyYykp Cj4+ICsJCWdvdG8gbmV4dF9jbGlwOwo+PiArCWVsc2UgaWYgKGl0ZXItPnR5cGUgJiBEUk1fQVRP TUlDX0hFTFBFUl9EQU1BR0VfQ0xJUF9UWVBFX0ZCKQo+PiArCQlyZXR1cm4gdHJ1ZTsKPj4gKwo+ PiArCS8qIENsaXAgZGFtYWdlIHJlY3Qgd2l0aGluIHBsYW5lIGxpbWl0ICovCj4+ICsJaWYgKCFk cm1fcmVjdF9pbnRlcnNlY3QocmVjdCwgJml0ZXItPnBsYW5lX3NyYykpCj4+ICsJCWdvdG8gbmV4 dF9jbGlwOwo+PiArCWVsc2UgaWYgKGl0ZXItPnR5cGUgJiBEUk1fQVRPTUlDX0hFTFBFUl9EQU1B R0VfQ0xJUF9UWVBFX1BMQU5FKSB7Cj4+ICsJCWRybV9yZWN0X3RyYW5zbGF0ZShyZWN0LCBpdGVy LT50cmFuc2xhdGVfcGxhbmVfeCwKPj4gKwkJCQkgICBpdGVyLT50cmFuc2xhdGVfcGxhbmVfeSk7 Cj4+ICsJCXJldHVybiB0cnVlOwo+PiArCX0KPj4gKwo+PiArCS8qIENsaXAgZGFtYWdlIHJlY3Qg d2l0aGluIGNydGMgbGltaXQgKi8KPj4gKwlpZiAoIWRybV9yZWN0X2ludGVyc2VjdChyZWN0LCAm aXRlci0+Y3J0Y19zcmMpKQo+PiArCQlnb3RvIG5leHRfY2xpcDsKPj4gKwo+PiArCWRybV9yZWN0 X3RyYW5zbGF0ZShyZWN0LCBpdGVyLT50cmFuc2xhdGVfY3J0Y194LAo+PiArCQkJICAgaXRlci0+ dHJhbnNsYXRlX2NydGNfeSk7Cj4+ICsKPj4gKwlyZXR1cm4gdHJ1ZTsKPj4gK30KPj4gK0VYUE9S VF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfbmV4dCk7Cj4+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2F0 b21pY19oZWxwZXIuaAo+PiBpbmRleCAyNmFhYmE1Li5lYmQ0YjY2IDEwMDY0NAo+PiAtLS0gYS9p bmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oCj4+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9h dG9taWNfaGVscGVyLmgKPj4gQEAgLTM2LDYgKzM2LDM3IEBAIHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlOwo+PiAgIHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmo7Cj4+ICAgc3RydWN0IGRybV9wcml2YXRl X3N0YXRlOwo+PiAgIAo+PiArLyoqCj4+ICsgKiBlbnVtIGRybV9hdG9taWNfaGVscGVyX2RhbWFn ZV9jbGlwX3R5cGUgLSB0eXBlIG9mIGNsaXBzIHRvIGl0ZXJhdG9yIG92ZXIKPj4gKyAqCj4+ICsg KiBXaGlsZSB1c2luZyBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciB0aGUgdHlwZSBvZiBj bGlwIGNvb3JkaW5hdGVzIGNhbGxlcgo+PiArICogaXMgaW50ZXJlc3RlZCBpbi4KPj4gKyAqLwo+ PiArZW51bSBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfY2xpcF90eXBlIHsKPj4gKwlEUk1fQVRP TUlDX0hFTFBFUl9EQU1BR0VfQ0xJUF9UWVBFX0ZCICAgICAgID0gMHgwLAo+PiArCURSTV9BVE9N SUNfSEVMUEVSX0RBTUFHRV9DTElQX1RZUEVfUExBTkUgICAgPSAweDEsCj4+ICsJRFJNX0FUT01J Q19IRUxQRVJfREFNQUdFX0NMSVBfVFlQRV9DUlRDICAgICA9IDB4MiwKPiBJJ20gY29uZnVzZWQg d2l0aCB3aGF0IGV4YWN0bHkgdGhlc2UgZGlmZmVyZW50IHR5cGVzIG9mIGl0ZXJhdG9ycyBhcmUK PiBzdXBwb3NlZCB0byBhY2hpZXZlLiBUWVBFX0ZCIG1ha2VzIHNlbnNlLCB0aGF0J3Mgd2hhdCB2 bXdnZnggYW5kIG90aGVyCj4gdmlydHVhbCBkcml2ZXJzIG5lZWQgdG8gZmlndXJlIG91dCB3aGlj aCBwYXJ0cyBvZiBhIGJ1ZmZlciB0byB1cGxvYWQgdG8KPiB0aGUgaG9zdC4KPgo+IFRZUEVfUExB TkUgSSBoYXZlIG5vIGlkZWEgd2hvIG5lZWRzIHRoYXQuIEkgc3VnZ2VzdCB3ZSBqdXN0IGRyb3Ag aXQuCj4KPiBUWVBFX0NSVEMgaXMgd2hhdCBJJ2Qgd2FudCB0byB1c2UgZm9yIG1hbnVhbCB1cGxv YWQgaHcsIHdlcmUgaW5zdGVhZCBvZgo+IGNvbXBvc2l0aW5nIHRoZSBlbnRpcmUgc2NyZWVuIHdl IGNhbiBsaW1pdCB0aGUgdXBsb2FkZWQgYXJlYSB0byAxIG9yIDIKPiByZWN0YW5nbGVzIChkZXBl bmRpbmcgdXBvbiBob3cgdGhlIGh3IHdvcmtzKS4gQnV0IHRob3NlIGRyaXZlcnMgd2FudCBhbGwK PiB0aGUgY3J0YyBjbGlwIHJlY3RzIGZvciBfYWxsXyB0aGUgcGxhbmVzIGNvbWJpbmVkLCBub3Qg Zm9yIGVhY2ggcGxhbmUKPiBpbmRpdmlkdWFsbHkuCj4KPiBNeSBzdWdnZXN0aW9uIGlzIHRvIGRy b3AgVFlQRV9DUlRDIHVudGlsIHNvbWVvbmUgbmVlZHMgaXQgZm9yIGEgZHJpdmVyLgo+IEFuZCBt b3N0IGxpa2VseSB0aGUgb25seSBpdGVyYXRvciB3ZSB3YW50IGZvciBUWVBFX0NSVEMgaXMgb25l IHRoYXQgZ2l2ZXMKPiB5b3UgdGhlIG92ZXJhbGwgZGFtYWdlIGFyZWEsIGluY2x1ZGluZyBhbHBo YS9jdG0vZ2FtbWEvZXZlcnl0aGluZyBlbHNlLAo+IGNvYWxlc2NlZCBpbnRvIGp1c3QgMSBjbGlw IHJlY3QuIFNvIHByb2JhYmx5IGFuIGVudGlyZWx5IGRpZmZlcmVudAo+IGZ1bmN0aW9uLgoKQWN0 dWFsbHkgZm9yIHZtd2dmeCwgdGhlIGRpc3BsYXkgcGFydCBvZiB0aGUgaGFyZHdhcmUgY29tZXMg aW4gZGlmZmVyZW50IAp2ZXJzaW9ucyBhbmQgd2UnZCB0eXBpY2FsbHkgZXhwZWN0IGJvdGggdGhl IEZCIGNvb3JkaW5hdGVzIGFuZCB0aGUgQ1JUQyAKY29vcmRpbmF0ZXMuIEluIHRoZSBsYXRlc3Qg dmVyc2lvbiB0aGUgc3VyZmFjZSBiYWNraW5nIHRoZSBzY3JlZW4gbmVlZHMgCnRvIGV4YWN0bHkg Zml0IHRoZSBDUlRDIHNjYW5vdXQgYXJlYSwgYW5kIGlmIHRoZSBGQiBkb2Vzbid0IGRvIHRoYXQs IHdlIApuZWVkIHRvIGNyZWF0ZSBhIHN1cmZhY2UgdGhhdCBkb2VzIGFuZCBjb3B5IGluIHRoZSBr ZXJuZWwgZHJpdmVyLiBBZnRlciAKdGhhdCwgYXMgYSBzZWNvbmQgc3RlcCwgd2UgbmVlZCB0byBu b3RpZnkgdGhlIGRpc3BsYXkgc3lzdGVtIG9mIHRoZSAKZGFtYWdlZCBhcmVhIGluIENSVEMgY29v cmRpbmF0ZXMuCgoKCj4gU3VtbWFyaXppbmcgYWxsIHRoaXMsIEknZCBzaW1wbGlmeSB0aGUgaXRl cmF0b3IgdG86Cj4KPiBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KGl0ZXIsIHBs YW5lX3N0YXRlKTsKPgo+IEFuZCBsZWF2ZSB0aGUgb3RoZXIgMiB1c2UtY2FzZXMgdG8gdGhlIG5l eHQgcGF0Y2ggc2VyaWVzLiBGb3IgY3J0YyBkYW1hZ2UKPiB3ZSBwcm9iYWJseSB3YW50Ogo+Cj4g ZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kYW1hZ2UoZHJtX2F0b21pY19zdGF0ZSwgcmVjdCkKPgo+ IFdoaWNoIGludGVybmFsbHkgbG9vcHMgb3ZlciBhbGwgcGxhbmVzIGFuZCBhbHNvIHRha2VzIGFs bCB0aGUgb3RoZXIgc3RhdGUKPiBjaGFuZ2VzIGludG8gYWNjb3VudC4gVGhhdCB3YXkgeW91IGFs c28gZG9uJ3QgaGF2ZSB0byBmaXggdGhlIHNjYWxpbmcKPiBpc3N1ZSwgc2luY2UgeW91ciBjdXJy ZW50IGNvZGUgb25seSBoYW5kbGVzIHRyYW5zbGF0aW9uLgo+Cj4gQW5vdGhlciBiaXQ6IGRybV9h dG9taWNfaGVscGVyLmMgaXMgaHVnZSwgSSdkIHZvdGUgdG8gcHV0IGFsbCB0aGlzIHN0dWZmCj4g aW50byBhIG5ldyBkcm1fZGFtYWdlX2hlbHBlci5baGNdLCBpbmNsdWRpbmcgbmV3IHNlY3Rpb24g aW4gZHJtLWttcy5yc3QKPiBhbmQgYWxsIHRoYXQuIFNwbGl0dGluZyB1cCBkcm1fYXRvbWljX2hl bHBlci5baGNdIGlzIHNvbWV3aGVyZSBvbiBteSB0b2RvCj4gLi4uCj4KPiBDaGVlcnMsIERhbmll bAoKL1Rob21hcwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==