From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, HK_RANDOM_FROM,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FD7BC433DF for ; Thu, 11 Jun 2020 14:29:29 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id EE4D72065C for ; Thu, 11 Jun 2020 14:29:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EE4D72065C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8CEE66E848; Thu, 11 Jun 2020 14:29:28 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4D7946E848; Thu, 11 Jun 2020 14:29:27 +0000 (UTC) IronPort-SDR: j1CIvtoZkOTlPMBmc3c3UgY00IrY5An0a2bXHvNmDNobi5RI885AUMd2U3HTAfdTAi0LMev3ub o41EE46tiNHg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:26 -0700 IronPort-SDR: /OQuU5Pl16dhKAQ8MPr5NunLJJHsE69DTemvtYctQTSHF8XNlyfq34qfyk7OXe4eIYIwNaYMfB 30OgsFGnvRFA== X-IronPort-AV: E=Sophos;i="5.73,499,1583222400"; d="scan'208";a="419117978" Received: from osides-mobl1.ger.corp.intel.com (HELO [10.214.204.82]) ([10.214.204.82]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:21 -0700 Subject: Re: [Intel-gfx] [PATCH 03/18] dma-fence: basic lockdep annotations To: Daniel Vetter References: <20200604081224.863494-1-daniel.vetter@ffwll.ch> <20200604081224.863494-4-daniel.vetter@ffwll.ch> <19c6fe47-50ff-869e-d3f0-703b8165d577@linux.intel.com> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: <28c18eed-6d03-aeb2-9e0f-39bae84dfb8c@linux.intel.com> Date: Thu, 11 Jun 2020 15:29:18 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-rdma , Intel Graphics Development , LKML , amd-gfx list , Chris Wilson , "moderated list:DMA BUFFER SHARING FRAMEWORK" , Thomas Hellstrom , DRI Development , Daniel Vetter , Mika Kuoppala , =?UTF-8?Q?Christian_K=c3=b6nig?= , "open list:DMA BUFFER SHARING FRAMEWORK" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Ck9uIDExLzA2LzIwMjAgMTI6MjksIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gT24gVGh1LCBKdW4g MTEsIDIwMjAgYXQgMTI6MzYgUE0gVHZydGtvIFVyc3VsaW4KPiA8dHZydGtvLnVyc3VsaW5AbGlu dXguaW50ZWwuY29tPiB3cm90ZToKPj4gT24gMTAvMDYvMjAyMCAxNjoxNywgRGFuaWVsIFZldHRl ciB3cm90ZToKPj4+IE9uIFdlZCwgSnVuIDEwLCAyMDIwIGF0IDQ6MjIgUE0gVHZydGtvIFVyc3Vs aW4KPj4+IDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+Pj4+Cj4+Pj4K Pj4+PiBPbiAwNC8wNi8yMDIwIDA5OjEyLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+Pj4+PiBEZXNp Z24gaXMgc2ltaWxhciB0byB0aGUgbG9ja2RlcCBhbm5vdGF0aW9ucyBmb3Igd29ya2VycywgYnV0 IHdpdGgKPj4+Pj4gc29tZSB0d2lzdHM6Cj4+Pj4+Cj4+Pj4+IC0gV2UgdXNlIGEgcmVhZC1sb2Nr IGZvciB0aGUgZXhlY3V0aW9uL3dvcmtlci9jb21wbGV0aW9uIHNpZGUsIHNvIHRoYXQKPj4+Pj4g ICAgICB0aGlzIGV4cGxpY2l0IGFubm90YXRpb24gY2FuIGJlIG1vcmUgbGliZXJhbGx5IHNwcmlu a2xlZCBhcm91bmQuCj4+Pj4+ICAgICAgV2l0aCByZWFkIGxvY2tzIGxvY2tkZXAgaXNuJ3QgZ29p bmcgdG8gY29tcGxhaW4gaWYgdGhlIHJlYWQtc2lkZQo+Pj4+PiAgICAgIGlzbid0IG5lc3RlZCB0 aGUgc2FtZSB3YXkgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMsIHNvIEFCQkEgZGVhZGxvY2tzCj4+ Pj4+ICAgICAgYXJlIG9rLiBXaGljaCB0aGV5IGFyZSwgc2luY2UgdGhpcyBpcyBhbiBhbm5vdGF0 aW9uIG9ubHkuCj4+Pj4+Cj4+Pj4+IC0gV2UncmUgdXNpbmcgbm9uLXJlY3Vyc2l2ZSBsb2NrZGVw IHJlYWQgbG9jayBtb2RlLCBzaW5jZSBpbiByZWN1cnNpdmUKPj4+Pj4gICAgICByZWFkIGxvY2sg bW9kZSBsb2NrZGVwIGRvZXMgbm90IGNhdGNoIHJlYWQgc2lkZSBoYXphcmRzLiBBbmQgd2UKPj4+ Pj4gICAgICBfdmVyeV8gbXVjaCB3YW50IHJlYWQgc2lkZSBoYXphcmRzIHRvIGJlIGNhdWdodC4g Rm9yIGZ1bGwgZGV0YWlscyBvZgo+Pj4+PiAgICAgIHRoaXMgbGltaXRhdGlvbiBzZWUKPj4+Pj4K Pj4+Pj4gICAgICBjb21taXQgZTkxNDk4NTg5NzQ2MDY1ZTNhZTk1ZDlhMDBiMDY4ZTUyNWVlYzM0 Zgo+Pj4+PiAgICAgIEF1dGhvcjogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3Jn Pgo+Pj4+PiAgICAgIERhdGU6ICAgV2VkIEF1ZyAyMyAxMzoxMzoxMSAyMDE3ICswMjAwCj4+Pj4+ Cj4+Pj4+ICAgICAgICAgIGxvY2tpbmcvbG9ja2RlcC9zZWxmdGVzdHM6IEFkZCBtaXhlZCByZWFk LXdyaXRlIEFCQkEgdGVzdHMKPj4+Pj4KPj4+Pj4gLSBUbyBhbGxvdyBuZXN0aW5nIG9mIHRoZSBy ZWFkLXNpZGUgZXhwbGljaXQgYW5ub3RhdGlvbnMgd2UgZXhwbGljaXRseQo+Pj4+PiAgICAgIGtl ZXAgdHJhY2sgb2YgdGhlIG5lc3RpbmcuIGxvY2tfaXNfaGVsZCgpIGFsbG93cyB1cyB0byBkbyB0 aGF0Lgo+Pj4+Pgo+Pj4+PiAtIFRoZSB3YWl0LXNpZGUgYW5ub3RhdGlvbiBpcyBhIHdyaXRlIGxv Y2ssIGFuZCBlbnRpcmVseSBkb25lIHdpdGhpbgo+Pj4+PiAgICAgIGRtYV9mZW5jZV93YWl0KCkg Zm9yIGV2ZXJ5b25lIGJ5IGRlZmF1bHQuCj4+Pj4+Cj4+Pj4+IC0gVG8gYmUgYWJsZSB0byBmcmVl bHkgYW5ub3RhdGUgaGVscGVyIGZ1bmN0aW9ucyBJIHdhbnQgdG8gbWFrZSBpdCBvawo+Pj4+PiAg ICAgIHRvIGNhbGwgZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nIGZyb20gc29mdC9oYXJk aXJxIGNvbnRleHQuCj4+Pj4+ICAgICAgRmlyc3QgYXR0ZW1wdCB3YXMgdXNpbmcgdGhlIGhhcmRp cnEgbG9ja2luZyBjb250ZXh0IGZvciB0aGUgd3JpdGUKPj4+Pj4gICAgICBzaWRlIGluIGxvY2tk ZXAsIGJ1dCB0aGlzIGZvcmNlcyBhbGwgbm9ybWFsIHNwaW5sb2NrcyBuZXN0ZWQgd2l0aGluCj4+ Pj4+ICAgICAgZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nIHRvIGJlIHNwaW5sb2Nrcy4g VGhhdCBib2xsb2Nrcy4KPj4+Pj4KPj4+Pj4gICAgICBUaGUgYXBwcm9hY2ggbm93IGlzIHRvIHNp bXBsZSBjaGVjayBpbl9hdG9taWMoKSwgYW5kIGZvciB0aGVzZSBjYXNlcwo+Pj4+PiAgICAgIGVu dGlyZWx5IHJlbHkgb24gdGhlIG1pZ2h0X3NsZWVwKCkgY2hlY2sgaW4gZG1hX2ZlbmNlX3dhaXQo KS4gVGhhdAo+Pj4+PiAgICAgIHdpbGwgY2F0Y2ggYW55IHdyb25nIG5lc3RpbmcgYWdhaW5zdCBz cGlubG9ja3MgZnJvbSBzb2Z0L2hhcmRpcnEKPj4+Pj4gICAgICBjb250ZXh0cy4KPj4+Pj4KPj4+ Pj4gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGV2ZXJ5IGNvZGUgcGF0aCB0aGF0J3MgY3JpdGljYWwg Zm9yIGV2ZW50dWFsbHkKPj4+Pj4gc2lnbmFsbGluZyBhIGRtYV9mZW5jZSBzaG91bGQgYmUgYW5u b3RhdGVkIHdpdGgKPj4+Pj4gZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nLiBUaGUgYW5u b3RhdGlvbiBpZGVhbGx5IHN0YXJ0cyByaWdodAo+Pj4+PiBhZnRlciBhIGRtYV9mZW5jZSBpcyBw dWJsaXNoZWQgKGFkZGVkIHRvIGEgZG1hX3Jlc3YsIGV4cG9zZWQgYXMgYQo+Pj4+PiBzeW5jX2Zp bGUgZmQsIGF0dGFjaGVkIHRvIGEgZHJtX3N5bmNvYmogZmQsIG9yIGFueXRoaW5nIGVsc2UgdGhh dAo+Pj4+PiBtYWtlcyB0aGUgZG1hX2ZlbmNlIHZpc2libGUgdG8gb3RoZXIga2VybmVsIHRocmVh ZHMpLCB1cCB0byBhbmQKPj4+Pj4gaW5jbHVkaW5nIHRoZSBkbWFfZmVuY2Vfd2FpdCgpLiBFeGFt cGxlcyBhcmUgaXJxIGhhbmRsZXJzLCB0aGUKPj4+Pj4gc2NoZWR1bGVyIHJ0IHRocmVhZHMsIHRo ZSB0YWlsIG9mIGV4ZWNidWYgKGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nCj4+Pj4+IGZlbmNlcyBh cmUgdmlzaWJsZSksIGFueSB3b3JrZXJzIHRoYXQgZW5kIHVwIHNpZ25hbGxpbmcgZG1hX2ZlbmNl cyBhbmQKPj4+Pj4gcmVhbGx5IGFueXRoaW5nIGVsc2UuIE5vdCBhbm5vdGF0ZWQgc2hvdWxkIGJl IGNvZGUgcGF0aHMgdGhhdCBvbmx5Cj4+Pj4+IGNvbXBsZXRlIGZlbmNlcyBvcHBvcnR1bmlzdGlj YWxseSBhcyB0aGUgZ3B1IHByb2dyZXNzZXMsIGxpa2UgZS5nLgo+Pj4+PiBzaHJpbmtlci9ldmlj dGlvbiBjb2RlLgo+Pj4+Pgo+Pj4+PiBUaGUgbWFpbiBjbGFzcyBvZiBkZWFkbG9ja3MgdGhpcyBp cyBzdXBwb3NlZCB0byBjYXRjaCBhcmU6Cj4+Pj4+Cj4+Pj4+IFRocmVhZCBBOgo+Pj4+Pgo+Pj4+ PiAgICAgICAgIG11dGV4X2xvY2soQSk7Cj4+Pj4+ICAgICAgICAgbXV0ZXhfdW5sb2NrKEEpOwo+ Pj4+Pgo+Pj4+PiAgICAgICAgIGRtYV9mZW5jZV9zaWduYWwoKTsKPj4+Pj4KPj4+Pj4gVGhyZWFk IEI6Cj4+Pj4+Cj4+Pj4+ICAgICAgICAgbXV0ZXhfbG9jayhBKTsKPj4+Pj4gICAgICAgICBkbWFf ZmVuY2Vfd2FpdCgpOwo+Pj4+PiAgICAgICAgIG11dGV4X3VubG9jayhBKTsKPj4+Pj4KPj4+Pj4g VGhyZWFkIEIgaXMgYmxvY2tlZCBvbiBBIHNpZ25hbGxpbmcgdGhlIGZlbmNlLCBidXQgQSBuZXZl ciBnZXRzIGFyb3VuZAo+Pj4+PiB0byB0aGF0IGJlY2F1c2UgaXQgY2Fubm90IGFjcXVpcmUgdGhl IGxvY2sgQS4KPj4+Pj4KPj4+Pj4gTm90ZSB0aGF0IGRtYV9mZW5jZV93YWl0KCkgaXMgYWxsb3dl ZCB0byBiZSBuZXN0ZWQgd2l0aGluCj4+Pj4+IGRtYV9mZW5jZV9iZWdpbi9lbmRfc2lnbmFsbGlu ZyBzZWN0aW9ucy4gVG8gYWxsb3cgdGhpcyB0byBoYXBwZW4gdGhlCj4+Pj4+IHJlYWQgbG9jayBu ZWVkcyB0byBiZSB1cGdyYWRlZCB0byBhIHdyaXRlIGxvY2ssIHdoaWNoIG1lYW5zIHRoYXQgYW55 Cj4+Pj4+IG90aGVyIGxvY2sgaXMgYWNxdWlyZWQgYmV0d2VlbiB0aGUgZG1hX2ZlbmNlX2JlZ2lu X3NpZ25hbGxpbmcoKSBjYWxsIGFuZAo+Pj4+PiB0aGUgY2FsbCB0byBkbWFfZmVuY2Vfd2FpdCgp LCBhbmQgc3RpbGwgaGVsZCwgdGhpcyB3aWxsIHJlc3VsdCBpbiBhbgo+Pj4+PiBpbW1lZGlhdGUg bG9ja2RlcCBjb21wbGFpbnQuIFRoZSBvbmx5IG90aGVyIG9wdGlvbiB3b3VsZCBiZSB0byBub3QK Pj4+Pj4gYW5ub3RhdGUgc3VjaCBjYWxscywgZGVmZWF0aW5nIHRoZSBwb2ludC4gVGhlcmVmb3Jl IHRoZXNlIGFubm90YXRpb25zCj4+Pj4+IGNhbm5vdCBiZSBzcHJpbmtsZWQgb3ZlciB0aGUgY29k ZSBlbnRpcmVseSBtaW5kbGVzcyB0byBhdm9pZCBmYWxzZQo+Pj4+PiBwb3NpdGl2ZXMuCj4+Pj4+ Cj4+Pj4+IHYyOiBoYW5kbGUgc29mdC9oYXJkaXJxIGN0eCBiZXR0ZXIgYWdhaW5zdCB3cml0ZSBz aWRlIGFuZCBkb250IGZvcmdldAo+Pj4+PiBFWFBPUlRfU1lNQk9MLCBkcml2ZXJzIGNhbid0IHVz ZSB0aGlzIG90aGVyd2lzZS4KPj4+Pj4KPj4+Pj4gdjM6IEtlcm5lbGRvYy4KPj4+Pj4KPj4+Pj4g djQ6IFNvbWUgc3BlbGxpbmcgZml4ZXMgZnJvbSBNaWthCj4+Pj4+Cj4+Pj4+IENjOiBNaWthIEt1 b3BwYWxhIDxtaWthLmt1b3BwYWxhQGludGVsLmNvbT4KPj4+Pj4gQ2M6IFRob21hcyBIZWxsc3Ry b20gPHRob21hcy5oZWxsc3Ryb21AaW50ZWwuY29tPgo+Pj4+PiBDYzogbGludXgtbWVkaWFAdmdl ci5rZXJuZWwub3JnCj4+Pj4+IENjOiBsaW5hcm8tbW0tc2lnQGxpc3RzLmxpbmFyby5vcmcKPj4+ Pj4gQ2M6IGxpbnV4LXJkbWFAdmdlci5rZXJuZWwub3JnCj4+Pj4+IENjOiBhbWQtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+Pj4+PiBDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zwo+Pj4+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+Pj4+ IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t Pgo+Pj4+PiBDYzogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNv bT4KPj4+Pj4gLS0tCj4+Pj4+ICAgICBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5y c3QgfCAgMTIgKy0KPj4+Pj4gICAgIGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYyAgICAgICAg ICB8IDE2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+Pj4gICAgIGluY2x1ZGUvbGlu dXgvZG1hLWZlbmNlLmggICAgICAgICAgICB8ICAxMiArKwo+Pj4+PiAgICAgMyBmaWxlcyBjaGFu Z2VkLCAxODIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAt LWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdCBiL0RvY3VtZW50YXRp b24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdAo+Pj4+PiBpbmRleCA2M2RlYzc2ZDFkOGQuLjA1ZDg1 NjEzMTE0MCAxMDA2NDQKPj4+Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1i dWYucnN0Cj4+Pj4+ICsrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdAo+ Pj4+PiBAQCAtMTAwLDExICsxMDAsMTEgQEAgQ1BVIEFjY2VzcyB0byBETUEgQnVmZmVyIE9iamVj dHMKPj4+Pj4gICAgIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4+ Pj4+ICAgICAgICA6ZG9jOiBjcHUgYWNjZXNzCj4+Pj4+Cj4+Pj4+IC1GZW5jZSBQb2xsIFN1cHBv cnQKPj4+Pj4gLX5+fn5+fn5+fn5+fn5+fn5+fgo+Pj4+PiArSW1wbGljaXQgRmVuY2UgUG9sbCBT dXBwb3J0Cj4+Pj4+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPj4+Pj4KPj4+Pj4gICAg IC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4+Pj4+IC0gICA6ZG9j OiBmZW5jZSBwb2xsaW5nCj4+Pj4+ICsgICA6ZG9jOiBpbXBsaWNpdCBmZW5jZSBwb2xsaW5nCj4+ Pj4+Cj4+Pj4+ICAgICBLZXJuZWwgRnVuY3Rpb25zIGFuZCBTdHJ1Y3R1cmVzIFJlZmVyZW5jZQo+ Pj4+PiAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPj4+Pj4g QEAgLTEzMyw2ICsxMzMsMTIgQEAgRE1BIEZlbmNlcwo+Pj4+PiAgICAgLi4ga2VybmVsLWRvYzo6 IGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYwo+Pj4+PiAgICAgICAgOmRvYzogRE1BIGZlbmNl cyBvdmVydmlldwo+Pj4+Pgo+Pj4+PiArRE1BIEZlbmNlIFNpZ25hbGxpbmcgQW5ub3RhdGlvbnMK Pj4+Pj4gK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cj4+Pj4+ICsKPj4+Pj4gKy4u IGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLmMKPj4+Pj4gKyAgIDpkb2M6 IGZlbmNlIHNpZ25hbGxpbmcgYW5ub3RhdGlvbgo+Pj4+PiArCj4+Pj4+ICAgICBETUEgRmVuY2Vz IEZ1bmN0aW9ucyBSZWZlcmVuY2UKPj4+Pj4gICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fgo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5j IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5jCj4+Pj4+IGluZGV4IDY1NmU5YWMyZDAyOC4u MDAwNWJjMDAyNTI5IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNl LmMKPj4+Pj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5jCj4+Pj4+IEBAIC0xMTAs NiArMTEwLDE2MCBAQCB1NjQgZG1hX2ZlbmNlX2NvbnRleHRfYWxsb2ModW5zaWduZWQgbnVtKQo+ Pj4+PiAgICAgfQo+Pj4+PiAgICAgRVhQT1JUX1NZTUJPTChkbWFfZmVuY2VfY29udGV4dF9hbGxv Yyk7Cj4+Pj4+Cj4+Pj4+ICsvKioKPj4+Pj4gKyAqIERPQzogZmVuY2Ugc2lnbmFsbGluZyBhbm5v dGF0aW9uCj4+Pj4+ICsgKgo+Pj4+PiArICogUHJvdmluZyBjb3JyZWN0bmVzcyBvZiBhbGwgdGhl IGtlcm5lbCBjb2RlIGFyb3VuZCAmZG1hX2ZlbmNlIHRocm91Z2ggY29kZQo+Pj4+PiArICogcmV2 aWV3IGFuZCB0ZXN0aW5nIGlzIHRyaWNreSBmb3IgYSBmZXcgcmVhc29uczoKPj4+Pj4gKyAqCj4+ Pj4+ICsgKiAqIEl0IGlzIGEgY3Jvc3MtZHJpdmVyIGNvbnRyYWN0LCBhbmQgdGhlcmVmb3JlIGFs bCBkcml2ZXJzIG11c3QgZm9sbG93IHRoZQo+Pj4+PiArICogICBzYW1lIHJ1bGVzIGZvciBsb2Nr IG5lc3Rpbmcgb3JkZXIsIGNhbGxpbmcgY29udGV4dHMgZm9yIHZhcmlvdXMgZnVuY3Rpb25zCj4+ Pj4+ICsgKiAgIGFuZCBhbnl0aGluZyBlbHNlIHNpZ25pZmljYW50IGZvciBpbi1rZXJuZWwgaW50 ZXJmYWNlcy4gQnV0IGl0IGlzIGFsc28KPj4+Pj4gKyAqICAgaW1wb3NzaWJsZSB0byB0ZXN0IGFs bCBkcml2ZXJzIGluIGEgc2luZ2xlIG1hY2hpbmUsIGhlbmNlIGJydXRlLWZvcmNlIE4gdnMuCj4+ Pj4+ICsgKiAgIE4gdGVzdGluZyBvZiBhbGwgY29tYmluYXRpb25zIGlzIGltcG9zc2libGUuIEV2 ZW4ganVzdCBsaW1pdGluZyB0byB0aGUKPj4+Pj4gKyAqICAgcG9zc2libGUgY29tYmluYXRpb25z IGlzIGluZmVhc2libGUuCj4+Pj4+ICsgKgo+Pj4+PiArICogKiBUaGVyZSBpcyBhbiBlbm9ybW91 cyBhbW91bnQgb2YgZHJpdmVyIGNvZGUgaW52b2x2ZWQuIEZvciByZW5kZXIgZHJpdmVycwo+Pj4+ PiArICogICB0aGVyZSdzIHRoZSB0YWlsIG9mIGNvbW1hbmQgc3VibWlzc2lvbiwgYWZ0ZXIgZmVu Y2VzIGFyZSBwdWJsaXNoZWQsCj4+Pj4+ICsgKiAgIHNjaGVkdWxlciBjb2RlLCBpbnRlcnJ1cHQg YW5kIHdvcmtlcnMgdG8gcHJvY2VzcyBqb2IgY29tcGxldGlvbiwKPj4+Pj4gKyAqICAgYW5kIHRp bWVvdXQsIGdwdSByZXNldCBhbmQgZ3B1IGhhbmcgcmVjb3ZlcnkgY29kZS4gUGx1cyBmb3IgaW50 ZWdyYXRpb24KPj4+Pj4gKyAqICAgd2l0aCBjb3JlIG1tIHdpdGggaGF2ZSAmbW11X25vdGlmaWVy LCByZXNwZWN0aXZlbHkgJm1tdV9pbnRlcnZhbF9ub3RpZmllciwKPj4+Pj4gKyAqICAgYW5kICZz aHJpbmtlci4gRm9yIG1vZGVzZXR0aW5nIGRyaXZlcnMgdGhlcmUncyB0aGUgY29tbWl0IHRhaWwg ZnVuY3Rpb25zCj4+Pj4+ICsgKiAgIGJldHdlZW4gd2hlbiBmZW5jZXMgZm9yIGFuIGF0b21pYyBt b2Rlc2V0IGFyZSBwdWJsaXNoZWQsIGFuZCB3aGVuIHRoZQo+Pj4+PiArICogICBjb3JyZXNwb25k aW5nIHZibGFuayBjb21wbGV0ZXMsIGluY2x1ZGluZyBhbnkgaW50ZXJydXB0IHByb2Nlc3Npbmcg YW5kCj4+Pj4+ICsgKiAgIHJlbGF0ZWQgd29ya2Vycy4gQXVkaXRpbmcgYWxsIHRoYXQgY29kZSwg YWNyb3NzIGFsbCBkcml2ZXJzLCBpcyBub3QKPj4+Pj4gKyAqICAgZmVhc2libGUuCj4+Pj4+ICsg Kgo+Pj4+PiArICogKiBEdWUgdG8gaG93IG1hbnkgb3RoZXIgc3Vic3lzdGVtcyBhcmUgaW52b2x2 ZWQgYW5kIHRoZSBsb2NraW5nIGhpZXJhcmNoaWVzCj4+Pj4+ICsgKiAgIHRoaXMgcHVsbHMgaW4g dGhlcmUgaXMgZXh0cmVtZWx5IHRoaW4gd2lnZ2xlLXJvb20gZm9yIGRyaXZlci1zcGVjaWZpYwo+ Pj4+PiArICogICBkaWZmZXJlbmNlcy4gJmRtYV9mZW5jZSBpbnRlcmFjdHMgd2l0aCBhbG1vc3Qg YWxsIG9mIHRoZSBjb3JlIG1lbW9yeQo+Pj4+PiArICogICBoYW5kbGluZyB0aHJvdWdoIHBhZ2Ug ZmF1bHQgaGFuZGxlcnMgdmlhICZkbWFfcmVzdiwgZG1hX3Jlc3ZfbG9jaygpIGFuZAo+Pj4+PiAr ICogICBkbWFfcmVzdl91bmxvY2soKS4gT24gdGhlIG90aGVyIHNpZGUgaXQgYWxzbyBpbnRlcmFj dHMgdGhyb3VnaCBhbGwKPj4+Pj4gKyAqICAgYWxsb2NhdGlvbiBzaXRlcyB0aHJvdWdoICZtbXVf bm90aWZpZXIgYW5kICZzaHJpbmtlci4KPj4+Pj4gKyAqCj4+Pj4+ICsgKiBGdXJ0aGVybW9yZSBs b2NrZGVwIGRvZXMgbm90IGhhbmRsZSBjcm9zcy1yZWxlYXNlIGRlcGVuZGVuY2llcywgd2hpY2gg bWVhbnMKPj4+Pj4gKyAqIGFueSBkZWFkbG9ja3MgYmV0d2VlbiBkbWFfZmVuY2Vfd2FpdCgpIGFu ZCBkbWFfZmVuY2Vfc2lnbmFsKCkgY2FuJ3QgYmUgY2F1Z2h0Cj4+Pj4+ICsgKiBhdCBydW50aW1l IHdpdGggc29tZSBxdWljayB0ZXN0aW5nLiBUaGUgc2ltcGxlc3QgZXhhbXBsZSBpcyBvbmUgdGhy ZWFkCj4+Pj4+ICsgKiB3YWl0aW5nIG9uIGEgJmRtYV9mZW5jZSB3aGlsZSBob2xkaW5nIGEgbG9j azo6Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICAgZG1hX2Zl bmNlX3dhaXQoQik7Cj4+Pj4+ICsgKiAgICAgdW5sb2NrKEEpOwo+Pj4+PiArICoKPj4+Pj4gKyAq IHdoaWxlIHRoZSBvdGhlciB0aHJlYWQgaXMgc3R1Y2sgdHJ5aW5nIHRvIGFjcXVpcmUgdGhlIHNh bWUgbG9jaywgd2hpY2gKPj4+Pj4gKyAqIHByZXZlbnRzIGl0IGZyb20gc2lnbmFsbGluZyB0aGUg ZmVuY2UgdGhlIHByZXZpb3VzIHRocmVhZCBpcyBzdHVjayB3YWl0aW5nCj4+Pj4+ICsgKiBvbjo6 Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICAgdW5sb2NrKEEp Owo+Pj4+PiArICogICAgIGRtYV9mZW5jZV9zaWduYWwoQik7Cj4+Pj4+ICsgKgo+Pj4+PiArICog QnkgbWFudWFsbHkgYW5ub3RhdGluZyBhbGwgY29kZSByZWxldmFudCB0byBzaWduYWxsaW5nIGEg JmRtYV9mZW5jZSB3ZSBjYW4KPj4+Pj4gKyAqIHRlYWNoIGxvY2tkZXAgYWJvdXQgdGhlc2UgZGVw ZW5kZW5jaWVzLCB3aGljaCBhbHNvIGhlbHBzIHdpdGggdGhlIHZhbGlkYXRpb24KPj4+Pj4gKyAq IGhlYWRhY2hlIHNpbmNlIG5vdyBsb2NrZGVwIGNhbiBjaGVjayBhbGwgdGhlIHJ1bGVzIGZvciB1 czo6Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgY29va2llID0gZG1hX2ZlbmNlX2JlZ2luX3NpZ25h bGxpbmcoKTsKPj4+Pj4gKyAqICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICB1bmxvY2soQSk7Cj4+ Pj4+ICsgKiAgICBkbWFfZmVuY2Vfc2lnbmFsKEIpOwo+Pj4+PiArICogICAgZG1hX2ZlbmNlX2Vu ZF9zaWduYWxsaW5nKGNvb2tpZSk7Cj4+Pj4+ICsgKgo+Pj4+PiArICogRm9yIHVzaW5nIGRtYV9m ZW5jZV9iZWdpbl9zaWduYWxsaW5nKCkgYW5kIGRtYV9mZW5jZV9lbmRfc2lnbmFsbGluZygpIHRv Cj4+Pj4+ICsgKiBhbm5vdGF0ZSBjcml0aWNhbCBzZWN0aW9ucyB0aGUgZm9sbG93aW5nIHJ1bGVz IG5lZWQgdG8gYmUgb2JzZXJ2ZWQ6Cj4+Pj4+ICsgKgo+Pj4+PiArICogKiBBbGwgY29kZSBuZWNl c3NhcnkgdG8gY29tcGxldGUgYSAmZG1hX2ZlbmNlIG11c3QgYmUgYW5ub3RhdGVkLCBmcm9tIHRo ZQo+Pj4+PiArICogICBwb2ludCB3aGVyZSBhIGZlbmNlIGlzIGFjY2Vzc2libGUgdG8gb3RoZXIg dGhyZWFkcywgdG8gdGhlIHBvaW50IHdoZXJlCj4+Pj4+ICsgKiAgIGRtYV9mZW5jZV9zaWduYWwo KSBpcyBjYWxsZWQuIFVuLWFubm90YXRlZCBjb2RlIGNhbiBjb250YWluIGRlYWRsb2NrIGlzc3Vl cywKPj4+Pj4gKyAqICAgYW5kIGR1ZSB0byB0aGUgdmVyeSBzdHJpY3QgcnVsZXMgYW5kIG1hbnkg Y29ybmVyIGNhc2VzIGl0IGlzIGluZmVhc2libGUgdG8KPj4+Pj4gKyAqICAgY2F0Y2ggdGhlc2Ug anVzdCB3aXRoIHJldmlldyBvciBub3JtYWwgc3RyZXNzIHRlc3RpbmcuCj4+Pj4+ICsgKgo+Pj4+ PiArICogKiAmc3RydWN0IGRtYV9yZXN2IGRlc2VydmVzIGEgc3BlY2lhbCBub3RlLCBzaW5jZSB0 aGUgcmVhZGVycyBhcmUgb25seQo+Pj4+PiArICogICBwcm90ZWN0ZWQgYnkgcmN1LiBUaGlzIG1l YW5zIHRoZSBzaWduYWxsaW5nIGNyaXRpY2FsIHNlY3Rpb24gc3RhcnRzIGFzIHNvb24KPj4+Pj4g KyAqICAgYXMgdGhlIG5ldyBmZW5jZXMgYXJlIGluc3RhbGxlZCwgZXZlbiBiZWZvcmUgZG1hX3Jl c3ZfdW5sb2NrKCkgaXMgY2FsbGVkLgo+Pj4+PiArICoKPj4+Pj4gKyAqICogVGhlIG9ubHkgZXhj ZXB0aW9uIGFyZSBmYXN0IHBhdGhzIGFuZCBvcHBvcnR1bmlzdGljIHNpZ25hbGxpbmcgY29kZSwg d2hpY2gKPj4+Pj4gKyAqICAgY2FsbHMgZG1hX2ZlbmNlX3NpZ25hbCgpIHB1cmVseSBhcyBhbiBv cHRpbWl6YXRpb24sIGJ1dCBpcyBub3QgcmVxdWlyZWQgdG8KPj4+Pj4gKyAqICAgZ3VhcmFudGVl IGNvbXBsZXRpb24gb2YgYSAmZG1hX2ZlbmNlLiBUaGUgdXN1YWwgZXhhbXBsZSBpcyBhIHdhaXQg SU9DVEwKPj4+Pj4gKyAqICAgd2hpY2ggY2FsbHMgZG1hX2ZlbmNlX3NpZ25hbCgpLCB3aGlsZSB0 aGUgbWFuZGF0b3J5IGNvbXBsZXRpb24gcGF0aCBnb2VzCj4+Pj4+ICsgKiAgIHRocm91Z2ggYSBo YXJkd2FyZSBpbnRlcnJ1cHQgYW5kIHBvc3NpYmxlIGpvYiBjb21wbGV0aW9uIHdvcmtlci4KPj4+ Pj4gKyAqCj4+Pj4+ICsgKiAqIFRvIGFpZCBjb21wb3NhYmlsaXR5IG9mIGNvZGUsIHRoZSBhbm5v dGF0aW9ucyBjYW4gYmUgZnJlZWx5IG5lc3RlZCwgYXMgbG9uZwo+Pj4+PiArICogICBhcyB0aGUg b3ZlcmFsbCBsb2NraW5nIGhpZXJhcmNoeSBpcyBjb25zaXN0ZW50LiBUaGUgYW5ub3RhdGlvbnMg YWxzbyB3b3JrCj4+Pj4+ICsgKiAgIGJvdGggaW4gaW50ZXJydXB0IGFuZCBwcm9jZXNzIGNvbnRl eHQuIER1ZSB0byBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoaXMKPj4+Pj4gKyAqICAgcmVxdWly ZXMgdGhhdCBjYWxsZXJzIHBhc3MgYW4gb3BhcXVlIGNvb2tpZSBmcm9tCj4+Pj4+ICsgKiAgIGRt YV9mZW5jZV9iZWdpbl9zaWduYWxsaW5nKCkgdG8gZG1hX2ZlbmNlX2VuZF9zaWduYWxsaW5nKCku Cj4+Pj4+ICsgKgo+Pj4+PiArICogKiBWYWxpZGF0aW9uIGFnYWluc3QgdGhlIGNyb3NzIGRyaXZl ciBjb250cmFjdCBpcyBpbXBsZW1lbnRlZCBieSBwcmltaW5nCj4+Pj4+ICsgKiAgIGxvY2tkZXAg d2l0aCB0aGUgcmVsZXZhbnQgaGllcmFyY2h5IGF0IGJvb3QtdXAuIFRoaXMgbWVhbnMgZXZlbiBq dXN0Cj4+Pj4+ICsgKiAgIHRlc3Rpbmcgd2l0aCBhIHNpbmdsZSBkZXZpY2UgaXMgZW5vdWdoIHRv IHZhbGlkYXRlIGEgZHJpdmVyLCBhdCBsZWFzdCBhcwo+Pj4+PiArICogICBmYXIgYXMgZGVhZGxv Y2tzIHdpdGggZG1hX2ZlbmNlX3dhaXQoKSBhZ2FpbnN0IGRtYV9mZW5jZV9zaWduYWwoKSBhcmUK Pj4+Pj4gKyAqICAgY29uY2VybmVkLgo+Pj4+PiArICovCj4+Pj4+ICsjaWZkZWYgQ09ORklHX0xP Q0tERVAKPj4+Pj4gK3N0cnVjdCBsb2NrZGVwX21hcCAgIGRtYV9mZW5jZV9sb2NrZGVwX21hcCA9 IHsKPj4+Pj4gKyAgICAgLm5hbWUgPSAiZG1hX2ZlbmNlX21hcCIKPj4+Pj4gK307Cj4+Pj4KPj4+ PiBNYXliZSBhIHN0dXBpZCBxdWVzdGlvbiBiZWNhdXNlIHRoaXMgaXMgZGVmaW5pdGVseSBjb21w bGljYXRlZCwgYnV0Li4gSWYKPj4+PiB5b3UgaGF2ZSBhIHNpbmdsZS9zdGF0aWMvZ2xvYmFsIGxv Y2tkZXAgbWFwLCBkb2Vzbid0IHRoaXMgbWVhbiBfYWxsXwo+Pj4+IGxvY2tzLCBmcm9tIF9hbGxf IGRyaXZlcnMgaGFwcGVuaW5nIHRvIHVzZSBkbWEtZmVuY2VzIHdpbGwgZ2V0IHJlY29yZGVkCj4+ Pj4gaW4gaXQuIFdpbGwgdGhpcyB3b3JrIGFuZCBub3QgY2F1c2UgZmFsc2UgcG9zaXRpdmVzPwo+ Pj4+Cj4+Pj4gU291bmRzIGxpa2UgaXQgY291bGQgY3JlYXRlIGEgY29tbW9uIGxpbmsgYmV0d2Vl biB0d28gY29tcGxldGVseQo+Pj4+IHVuY29ubmVjdGVkIHVzYWdlcy4gQmVjYXVzZSBiZWxvdyB5 b3UgZG8gYWRkIGFubm90YXRpb25zIHRvIGdlbmVyaWMKPj4+PiBkbWFfZmVuY2Vfc2lnbmFsIGFu ZCBkbWFfZmVuY2Vfd2FpdC4KPj4+Cj4+PiBUaGlzIGlzIGZ1bGx5IGludGVudGlvbmFsLiBkbWEt ZmVuY2UgaXMgYSBjcm9zcy1kcml2ZXIgaW50ZXJmYWNlLCBpZgo+Pj4gZXZlcnkgZHJpdmVyIGlu dmVudHMgaXRzIG93biBydWxlcyBhYm91dCBob3cgdGhpcyBzaG91bGQgd29yayB3ZSBoYXZlCj4+ PiBhbiB1bm1haW50YWluYWJsZSBhbmQgdW5yZXZpZXdhYmxlIG1lc3MuCj4+Pgo+Pj4gSSd2ZSB0 eXBlZCB1cCB0aGUgZnVsbCBsZW5ndGggcmFudCBhbHJlYWR5IGhlcmU6Cj4+Pgo+Pj4gaHR0cHM6 Ly9sb3JlLmtlcm5lbC5vcmcvZHJpLWRldmVsL0NBS01LN3VHbkZoYnB1dXJSc25aNGR2UlY5Z1Ff My1ybVNKYW9xU0ZZPStLdmVwel9DQUBtYWlsLmdtYWlsLmNvbS8KPj4KPj4gQnV0ICJwZXJmZWN0 IHN0b3JtIiBvZjoKPj4KPj4gICArIGdsb2JhbCBmZW5jZSBsb2NrbWFwCj4+ICAgKyBtbXUgbm90 aWZpZXJzCj4+ICAgKyBmcyByZWNsYWltCj4+ICAgKyBkZWZhdWx0IGFubm90YXRpb25zIGluIGRt YV9mZW5jZV9zaWduYWwgLyBkbWFfZmVuY2Vfd2FpdAo+Pgo+PiBFcXVhbHMgdG8gYW55dGhpbmcg ZXZlciB1c2luZyBkbWFfZmVuY2Ugd2lsbCBiZSBpbiBpbXBvc3NpYmxlIGNoYWlucyB3aXRoIHJh bmRvbSBvdGhlciBkcml2ZXJzLCBldmVuIGlmIG5laXRoZXIgZHJpdmVyIGhhcyBjb2RlIHRvIGV4 cG9ydC9zaGFyZSB0aGF0IGZlbmNlLgo+Pgo+PiBFeGFtcGxlIGZyb20gdGhlIENJIHJ1bjoKPj4K Pj4gICBbMjUuOTE4Nzg4XSBDaGFpbiBleGlzdHMgb2Y6Cj4+ICAgIGZzX3JlY2xhaW0gLS0+IG1t dV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0IC0tPiBkbWFfZmVuY2VfbWFwCj4+ICAg WzI1LjkxODc5NF0gIFBvc3NpYmxlIHVuc2FmZSBsb2NraW5nIHNjZW5hcmlvOgo+PiAgIFsyNS45 MTg3OTddICAgICAgICBDUFUwICAgICAgICAgICAgICAgICAgICBDUFUxCj4+ICAgWzI1LjkxODc5 OV0gICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS0KPj4gICBbMjUuOTE4ODAxXSAg IGxvY2soZG1hX2ZlbmNlX21hcCk7Cj4+ICAgWzI1LjkxODgwM10gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvY2sobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpOwo+ PiAgIFsyNS45MTg4MDddICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrKGRtYV9m ZW5jZV9tYXApOwo+PiAgIFsyNS45MTg4MDldICAgbG9jayhmc19yZWNsYWltKTsKPj4KPj4gV2hh dCBhYm91dCBhIGRtYV9mZW5jZV9leHBvcnQgaGVscGVyIHdoaWNoIHdvdWxkICJhcm0iIHRoZSBh bm5vdGF0aW9ucz8gSXQgd291bGQgYmUgY2FsbGVkIGFzIHNvb24gYXMgdGhlIGZlbmNlIGlzIGV4 cG9ydGVkLiBNYXliZSB3aGVuIGFkZGVkIHRvIGRtYV9yZXN2LCBvciBleHBvcnRlZCB2aWEgc3lu Y19maWxlLCBldGMuIEJlZm9yZSB0aGF0IHBvaW50IGJlZ2luL2VuZF9zaWduYWxpbmcgYW5kIHNv IHdvdWxkIGJlIG5vLW9wcy4KPiAKPiBSdW4gQ0kgd2l0aG91dCB0aGUgaTkxNSBhbm5vdGF0aW9u IHBhdGNoLCBub3RoaW5nIGJyZWFrcy4KCkkgdGhpbmsgc29tZSBwYXJ0cyBvZiBpOTE1IHdvdWxk IHN0aWxsIGJyZWFrIHdpdGggbXkgaWRlYSB0byBvbmx5IGFwcGx5IGFubm90YXRpb25zIG9uIGV4 cG9ydGVkIGZlbmNlcy4gV2hhdCBkbyB5b3UgZGlzbGlrZSBhYm91dCB0aGF0IGlkZWE/IEkgdGhv dWdodCB0aGUgcG9pbnQgaXMgdG8gZW5mb3JjZSBydWxlcyBmb3IgX2V4cG9ydGVkXyBmZW5jZXMu CgpIb3cgeW91IGhhdmUgYW5ub3RhdGVkIGRtYV9mZW5jZV93b3JrIHlvdSBjYW4ndCBzYXksIG1h eWJlIGl0IGlzIGV4cG9ydGVkIG1heWJlIGl0IGlzbid0LiBJIHRoaW5rIGl0IGlzIGJ0dywgc28g c3BsYXRzIHdvdWxkIHN0aWxsIGJlIHRoZXJlLCBidXQgSSBhbSBub3Qgc3VyZSBpdCBpcyBjb25j ZXB0dWFsbHkgY29ycmVjdC4KCkF0IGxlYXN0IG15IHVuZGVyc3RhbmRpbmcgaXMgR0ZQX0tFUk5F TCBhbGxvY2F0aW9ucyBhcmUgb25seSBkaXNhbGxvd2VkIGJ5IHRoZSB2aXJ0dWUgb2YgdGhlIGds b2JhbCBkbWEtZmVuY2UgY29udHJhY3QuIElmIHlvdSB3YW50IHRvIGVuZm9yY2UgdGhleSBhcmUg bmV2ZXIgdXNlZCBmb3IgYW55dGhpbmcgYnV0IGV4cG9ydGluZywgdGhlbiB0aGF0IHdvdWxkIGJl IGEgYml0IGhhcnNoLCBubz8KCkFub3RoZXIgZXhhbXBsZSBmcm9tIHRoZSBDSSBydW46CgogWzI2 LjU4NTM1N10gICAgICAgIENQVTAgICAgICAgICAgICAgICAgICAgIENQVTEKIFsyNi41ODUzNTld ICAgICAgICAtLS0tICAgICAgICAgICAgICAgICAgICAtLS0tCiBbMjYuNTg1MzYwXSAgIGxvY2so ZG1hX2ZlbmNlX21hcCk7CiBbMjYuNTg1MzYyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG9jayhtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCk7CiBbMjYuNTg1MzY1 XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jayhkbWFfZmVuY2VfbWFwKTsKIFsy Ni41ODUzNjddICAgbG9jayhpOTE1X2dlbV9vYmplY3RfaW50ZXJuYWwvMSk7CiBbMjYuNTg1MzY5 XSAKICoqKiBERUFETE9DSyAqKioKCkxldHMgc2F5IHNvbWVvbmUgc3VibWl0dGVkIGFuIGV4ZWNi dWYgdXNpbmcgdXNlcnB0ciBhcyBhIGJhdGNoIGFuZCB0aGVuIHVubWFwcGVkIGl0IGltbWVkaWF0 ZWx5LiBUaGF0IHdvdWxkIGV4cGxhaW4gQ1BVMSBnZXR0aW5nIGludG8gdGhlIG1tdSBub3RpZmll ciBhbmQgd2FpdGluZyBvbiB0aGlzIGJhdGNoIHRvIHVuYmluZCB0aGUgb2JqZWN0LgoKTWVhbndo aWxlIENQVTAgaXMgdGhlIGFzeW5jIGNvbW1hbmQgcGFyc2VyIGZvciB0aGlzIHJlcXVlc3QgdHJ5 aW5nIHRvIGxvY2sgdGhlIHNoYWRvdyBiYXRjaCBidWZmZXIuIEJlY2F1c2UgaXQgdXNlcyB0aGUg ZG1hX2ZlbmNlX3dvcmsgdGhpcyBpcyBiZXR3ZWVuIHRoZSBiZWdpbi9lbmQgc2lnbmFsbGluZyBt YXJrZXJzLgoKSXQgY2FuIGJlIHRoZSBzYW1lIGRtYS1mZW5jZSBJIHRoaW5rLCBzaW5jZSB3ZSBp bnN0YWxsIHRoZSBhc3luYyBwYXJzZXIgZmVuY2Ugb24gdGhlIHJlYWwgYmF0Y2ggZG1hLXJlc3Ys IGJ1dCBkbWFfZmVuY2VfbWFwIGlzIG5vdCBhIHJlYWwgbG9jaywgc28gd2hhdCBpcyBhY3R1YWxs eSBwcmV2ZW50aW5nIHByb2dyZXNzIGluIHRoaXMgY2FzZT8KCkNQVTEgaXMgd2FpdGluZyBvbiBh IGZlbmNlLCBidXQgQ1BVMCBjYW4gb2J0YWluIHRoZSBsb2NrKGk5MTVfZ2VtX29iamVjdF9pbnRl cm5hbC8xKSwgcHJvY2VlZCB0byBwYXJzZSB0aGUgYmF0Y2gsIGFuZCBleGl0IHRoZSBzaWduYWxs aW5nIHNlY3Rpb24uIEF0IHdoaWNoIHBvaW50IENQVTEgaXMgc3RpbGwgYmxvY2tlZCwgd2FpdGlu ZyB1bnRpbCB0aGUgZXhlY2J1ZiBmaW5pc2hlcyBhbmQgdGhlbiBtbXUgbm90aWZpZXIgY2FuIGZp bmlzaCBhbmQgaW52YWxpZGF0ZSB0aGUgcGFnZXMuCgpNYXliZSBJIGFtIG1pc3Npbmcgc29tZXRo aW5nIGJ1dCBJIGRvbid0IHNlZSBob3cgdGhpcyBvbmUgaXMgcmVhbC4KCj4gU28gd2UgY2FuIGdy YWR1YWxseSBmaXggdXAgZXhpc3RpbmcgY29kZSB0aGF0IGRvZXNuJ3QgcXVpdGUgZ2V0IGl0Cj4g cmlnaHQgYW5kIG1vdmUgb24uCj4KPj4+Pj4gKwo+Pj4+PiArLyoqCj4+Pj4+ICsgKiBkbWFfZmVu Y2VfYmVnaW5fc2lnbmFsbGluZyAtIGJlZ2luIGEgY3JpdGljYWwgRE1BIGZlbmNlIHNpZ25hbGxp bmcgc2VjdGlvbgo+Pj4+PiArICoKPj4+Pj4gKyAqIERyaXZlcnMgc2hvdWxkIHVzZSB0aGlzIHRv IGFubm90YXRlIHRoZSBiZWdpbm5pbmcgb2YgYW55IGNvZGUgc2VjdGlvbgo+Pj4+PiArICogcmVx dWlyZWQgdG8gZXZlbnR1YWxseSBjb21wbGV0ZSAmZG1hX2ZlbmNlIGJ5IGNhbGxpbmcgZG1hX2Zl bmNlX3NpZ25hbCgpLgo+Pj4+PiArICoKPj4+Pj4gKyAqIFRoZSBlbmQgb2YgdGhlc2UgY3JpdGlj YWwgc2VjdGlvbnMgYXJlIGFubm90YXRlZCB3aXRoCj4+Pj4+ICsgKiBkbWFfZmVuY2VfZW5kX3Np Z25hbGxpbmcoKS4KPj4+Pj4gKyAqCj4+Pj4+ICsgKiBSZXR1cm5zOgo+Pj4+PiArICoKPj4+Pj4g KyAqIE9wYXF1ZSBjb29raWUgbmVlZGVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggbmVl ZHMgdG8gYmUgcGFzc2VkIHRvCj4+Pj4+ICsgKiBkbWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoKS4K Pj4+Pj4gKyAqLwo+Pj4+PiArYm9vbCBkbWFfZmVuY2VfYmVnaW5fc2lnbmFsbGluZyh2b2lkKQo+ Pj4+PiArewo+Pj4+PiArICAgICAvKiBleHBsaWNpdGx5IG5lc3RpbmcgLi4uICovCj4+Pj4+ICsg ICAgIGlmIChsb2NrX2lzX2hlbGRfdHlwZSgmZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAxKSkKPj4+ Pj4gKyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4+Pj4gKwo+Pj4+PiArICAgICAvKiByZWx5 IG9uIG1pZ2h0X3NsZWVwIGNoZWNrIGZvciBzb2Z0L2hhcmRpcnEgbG9ja3MgKi8KPj4+Pj4gKyAg ICAgaWYgKGluX2F0b21pYygpKQo+Pj4+PiArICAgICAgICAgICAgIHJldHVybiB0cnVlOwo+Pj4+ PiArCj4+Pj4+ICsgICAgIC8qIC4uLiBhbmQgbm9uLXJlY3Vyc2l2ZSByZWFkbG9jayAqLwo+Pj4+ PiArICAgICBsb2NrX2FjcXVpcmUoJmRtYV9mZW5jZV9sb2NrZGVwX21hcCwgMCwgMCwgMSwgMSwg TlVMTCwgX1JFVF9JUF8pOwo+Pj4+Cj4+Pj4gV291bGQgaXQgd29yayBpZiBzaWduYWxsaW5nIHBh dGggd291bGQgbWFyayBpdHNlbGYgYXMgYSB3cml0ZSBsb2NrPyBJIGFtCj4+Pj4gdGhpbmtpbmcg aXQgd291bGQgYmUgbmljZSB0byBzZWUgaW4gbG9ja2RlcCBzcGxhdHMgd2hhdCBhcmUgc2lnbmFs cyBhbmQKPj4+PiB3aGF0IGFyZSB3YWl0cy4KPj4+Cj4+PiBZZWFoIGl0J2QgYmUgbmljZSB0byBo YXZlIGEgcmVhZCB2cyB3cml0ZSBuYW1lIGZvciB0aGUgbG9jay4gQnV0IHdlCj4+PiBhbHJlYWR5 IGhhdmUgdGhpcyBwcm9ibGVtIGZvciBlLmcuIGZsdXNoX3dvcmsoKSwgZnJvbSB3aGljaCBJJ3Zl Cj4+PiBzdG9sZW4gdGhpcyBpZGVhLiBTbyBpdCdzIG5vdCByZWFsbHkgbmV3LiBFc3NlbnRpYWxs eSBsb29rIGF0IHRoZQo+Pj4gYmFja3RyYWNlcyBsb2NrZGVwIGdpdmVzIHlvdSwgYW5kIHJlY29u c3RydWN0IHRoZSBkZWFkbG9jay4gSSdtIGhvcGluZwo+Pj4gdGhhdCBwZW9wbGUgd2lsbCBub3Rp Y2UgdGhlIHNwZWNpYWwgZnVuY3Rpb25zIG9uIHRoZSBiYWNrdHJhY2UsIGUuZy4KPj4+IGRtYV9m ZW5jZV9iZWdpbl9zaWduYWxsaW5nIHdpbGwgYmUgbGlzdGVkIGFzIG9mZmVuZGluZyBmdW5jdGlv bi9sb2NrCj4+PiBob2xkZXIsIGFuZCB0aGVuIHJlYWQgdGhlIGtlcm5lbGRvYy4KPj4+Cj4+Pj4g VGhlIHJlY3Vyc2l2ZSB1c2FnZSB3b3VsZG4ndCB3b3JrIHRoZW4gcmlnaHQ/IFdvdWxkIHdyaXRl IGFubm90YXRpb24gb24KPj4+PiB0aGUgd2FpdCBwYXRoIHdvcms/Cj4+Pgo+Pj4gV2FpdCBwYXRo IGlzIHdyaXRlIGFubm90YXRpb25zIGFscmVhZHksIGJ1dCB5ZWFoIGFubm90YXRpbmcgdGhlCj4+ PiBzaWduYWxsaW5nIHNpZGUgYXMgd3JpdGUgd291bGQgY2F1c2UgZW5kbGVzcyBhbW91bnRzIG9m IGFsc2UKPj4+IHBvc2l0aXZlcy4gQWxzbyBpdCBtYWtlcyBjb21wb3NhYmlsaXR5IG9mIHRoZXNl IGUuZy4gd2hhdCBJJ3ZlIGRvbmUgaW4KPj4+IGFtZGdwdSB3aXRoIGFubm90YXRpb25zIGluIHRk ciB3b3JrIGluIGRybS9zY2hlZHVsZXIsIGFubm90YXRpb25zIGluCj4+PiB0aGUgYW1kZ3B1IGdw dSByZXNldCBjb2RlIGFuZCB0aGVuIGFsc28gYW5ub3RhdGlvbnMgaW4gYXRvbWljIGNvZGUsCj4+ PiB3aGljaCBhbGwgbmVzdCB3aXRoaW4gZWFjaCBvdGhlciBpbiBzb21lIGNhbGwgY2hhaW5zLCBi dXQgbm90IG90aGVycy4KPj4+IERyb3BwaW5nIHRoZSByZWN1cnNpb24gd291bGQgYnJlYWsgdGhh dCBhbmQgbWFrZSBpdCByZWFsbHkgYXdrd2FyZCB0bwo+Pj4gYW5ub3RhdGUgc3VjaCBjYXNlcyBj b3JyZWN0bHkuCj4+Pgo+Pj4gQW5kIHRoZSByZWN1cnNpb24gb25seSB3b3JrcyBpZiBpdCdzIHJl YWQgbG9ja3MsIG90aGVyd2lzZSBsb2NrZGVwCj4+PiBjb21wbGFpbnMgaWYgeW91IGhhdmUgaW5j b25zaXN0ZW50IGFubm90YXRpb25zIG9uIHRoZSBzaWduYWxsaW5nIHNpZGUKPj4+ICh3aGljaCBh Z2FpbiB3b3VsZCBtYWtlIGl0IG1vcmUgb3IgbGVzcyBpbXBvc3NpYmxlIHRvIGFubm90YXRlIHRo ZQo+Pj4gYWJvdmUgY2FzZSBmdWxseSkuCj4+Cj4+IEhvdyBkbyBJIHNlZSBpbiBsb2NrZGVwIHNw bGF0cyBpZiBpdCB3YXMgYSByZWFkIG9yIHdyaXRlIHVzZXI/IFlvdXIgcGF0Y2ggYXBwZWFycyB0 byBoYXZlOgo+Pgo+PiBkbWFfZmVuY2Vfc2lnbmFsOgo+PiArICAgICAgIGxvY2tfYWNxdWlyZSgm ZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxMLCBfUkVUX0lQXyk7Cj4+Cj4+ IF9fZG1hX2ZlbmNlX21pZ2h0X3dhaXQ6Cj4+ICsgICAgICAgbG9ja19hY3F1aXJlKCZkbWFfZmVu Y2VfbG9ja2RlcF9tYXAsIDAsIDAsIDEsIDEsIE5VTEwsIF9USElTX0lQXyk7Cj4+Cj4+IFdoaWNo IGJvdGggc2VlbSBsaWtlIHJlYWQgbG9jay4gSSBkb24ndCBmdWxseSB1bmRlcnN0YW5kIHRoZSBs b2NrZGVwIEFQSSBzbyBJIG1pZ2h0IGJlIHdyb25nLCBub3Qgc3VyZS4gQnV0IG5laXRoZXIgSSBz ZWUgYSBkaWZmZXJlbmNlIGluIHNwbGF0cyB0ZWxsaW5nIG1lIHdoaWNoIHBhdGggaXMgd2hpY2gu Cj4gCj4gSSB0aGluayB5b3UgZ290IHRyaWNrZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLCB0aGlz IGlzbid0IHF1aXRlIHdoYXQncwo+IGdvaW5nIG9uLiBUaGVyZSdzIHR3byB0aGluZ3Mgd2hpY2gg bWFrZSB0aGUgYW5ub3RhdGlvbnMgc3BlY2lhbDoKPiAKPiAtIHdlIHdhbnQgYSByZWN1cnNpdmUg cmVhZCBsb2NrIG9uIHRoZSBzaWduYWxsaW5nIGNyaXRpY2FsIHNlY3Rpb24uCj4gVGhlIHByb2Js ZW0gaXMgdGhhdCBsb2NrZGVwIGRvZXNuJ3QgaW1wbGVtZW50IGZ1bGwgdmFsaWRhdGlvbiBmb3IK PiByZWN1cnNpdmUgcmVhZCBsb2Nrcywgb25seSBub24tcmVjdXJzaXZlIHJlYWQvd3JpdGUgbG9j a3MgZnVsbHkKPiB2YWxpZGF0ZWQuIFRoZXJlJ3Mgc29tZSBjaGVja3MgZm9yIHJlY3Vyc2l2ZSBy ZWFkIGxvY2tzLCBidXQgZXhhY3RseQo+IHRoZSBjaGVja3Mgd2UgbmVlZCB0byBjYXRjaCBjb21t b24gZG1hX2ZlbmNlX3dhaXQgZGVhZGxvY2tzIGFyZW4ndAo+IGRvbmUuIFRoYXQncyB3aHkgd2Ug bmVlZCB0byBpbXBsZW1lbnQgbWFudWFsIGxvY2sgcmVjdXJzaW9uIG9uIHRoZQo+IHJlYWRlciBz aWRlCj4gCj4gLSBub3cgb24gdGhlIHdyaXRlIHNpZGUgd2UgYWRkaXRpb25hbGx5IG5lZWQgdG8g aW1wbGVtZW50IGFuCj4gcmVhZDJ3cml0ZSB1cGdyYWRlLCBhbmQgYSB3cml0ZTJyZWFkIGRvd25n cmFkZS4gTG9ja2RlcCBkb2Vzbid0Cj4gaW1wbGVtZW50IHRoYXQsIHNvIGFnYWluIHdlIGhhdmUg dG8gaGFuZC1yb2xsIHRoaXMuCj4gCj4gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY29kZSBsaW5lLWJ5 LWxpbmU6Cj4gCj4gICAgICBib29sIHRtcDsKPiAKPiAgICAgIHRtcCA9IGxvY2tfaXNfaGVsZF90 eXBlKCZkbWFfZmVuY2VfbG9ja2RlcF9tYXAsIDEpOwo+IAo+IFdlIGNoZWNrIHdoZXRoZXIgc29t ZW9uZSBpcyBob2xkaW5nIHRoZSBub24tcmVjdXJzaXZlIHJlYWQgbG9jayBhbHJlYWR5Lgo+IAo+ ICAgICAgaWYgKHRtcCkKPiAgICAgICAgICBsb2NrX3JlbGVhc2UoJmRtYV9mZW5jZV9sb2NrZGVw X21hcCwgX1RISVNfSVBfKTsKPiAKPiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlIGRyb3AgdGhhdCBy ZWFkIGxvY2suCj4gCj4gICAgICBsb2NrX21hcF9hY3F1aXJlKCZkbWFfZmVuY2VfbG9ja2RlcF9t YXApOwo+IAo+IFRoZW4gd2UgZG8gdGhlIGFjdHVhbCBtaWdodF93YWl0IGFubm90YXRpb24sIHRo ZSBhYm92ZSB0YWtlcyB0aGUgZnVsbAo+IHdyaXRlIGxvY2sgLi4uCj4gCj4gICAgICBsb2NrX21h cF9yZWxlYXNlKCZkbWFfZmVuY2VfbG9ja2RlcF9tYXApOwo+IAo+IC4uLiBhbmQgbm93IHdlIHJl bGVhc2UgdGhlIHdyaXRlIGxvY2sgYWdhaW4uCj4gCj4gCj4gICAgICBpZiAodG1wKQo+ICAgICAg ICAgIGxvY2tfYWNxdWlyZSgmZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxM LCBfVEhJU19JUF8pOwo+IAo+IEZpbmFsbHkgd2UgbmVlZCB0byByZS1hY3F1aXJlIHRoZSByZWFk IGxvY2ssIGlmIHdlJ3ZlIGhlbGQgdGhhdCB3aGVuCj4gZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4g VGhpcyBhbm5vdGF0aW9uIG5hdHVyYWxseSBoYXMgdG8gZXhhY3RseSBtYXRjaAo+IHdoYXQgYmVn aW5fc2lnbmFsbGluZyB3b3VsZCBkbywgb3RoZXJ3aXNlIHRoZSBoYW5kLXJvbGxlZCBuZXN0aW5n Cj4gd291bGQgZmFsbCBhcGFydC4KPiAKPiBJIGhvcGUgdGhhdCBleHBsYWlucyB3aGF0J3MgZ29p bmcgb24gaGVyZSwgYW5kIGFzc3VyZXMgeW91IHRoYXQKPiBtaWdodF93YWl0KCkgaXMgaW5kZWVk IGEgd3JpdGUgbG9jayBhbm5vdGF0aW9uLCBidXQgd2l0aCBhIGJpZyBwaWxlIG9mCj4gY29tcGxp Y2F0aW9ucy4KCkkgYW0gY2VydGFpbmx5IGNvbmZ1c2VkIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gbG9ja19tYXBfYWNxdWlyZS9yZWxlYXNlIGFuZCBsb2NrX2FjcXVpcmUvcmVsZWFzZS4gV2hh dCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28/CgpSZWdhcmRzLAoKVHZydGtvCgoK CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdm eCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, HK_RANDOM_FROM,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80C7AC433E0 for ; Thu, 11 Jun 2020 14:38:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 480B22075F for ; Thu, 11 Jun 2020 14:38:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728283AbgFKOi2 (ORCPT ); Thu, 11 Jun 2020 10:38:28 -0400 Received: from mga05.intel.com ([192.55.52.43]:54413 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726657AbgFKOi2 (ORCPT ); Thu, 11 Jun 2020 10:38:28 -0400 IronPort-SDR: 57+GC/VeHLhJxaXZ59Kz70UEtqZC8s34Nl+XlVA6PODoCGSw2pJAFDAzB9aeJXtQwHMPUCt2Xa a/Y65yTGSd6w== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:25 -0700 IronPort-SDR: /OQuU5Pl16dhKAQ8MPr5NunLJJHsE69DTemvtYctQTSHF8XNlyfq34qfyk7OXe4eIYIwNaYMfB 30OgsFGnvRFA== X-IronPort-AV: E=Sophos;i="5.73,499,1583222400"; d="scan'208";a="419117978" Received: from osides-mobl1.ger.corp.intel.com (HELO [10.214.204.82]) ([10.214.204.82]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:21 -0700 Subject: Re: [Intel-gfx] [PATCH 03/18] dma-fence: basic lockdep annotations To: Daniel Vetter Cc: DRI Development , linux-rdma , Intel Graphics Development , LKML , amd-gfx list , Chris Wilson , "moderated list:DMA BUFFER SHARING FRAMEWORK" , Thomas Hellstrom , Daniel Vetter , "open list:DMA BUFFER SHARING FRAMEWORK" , =?UTF-8?Q?Christian_K=c3=b6nig?= , Mika Kuoppala References: <20200604081224.863494-1-daniel.vetter@ffwll.ch> <20200604081224.863494-4-daniel.vetter@ffwll.ch> <19c6fe47-50ff-869e-d3f0-703b8165d577@linux.intel.com> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: <28c18eed-6d03-aeb2-9e0f-39bae84dfb8c@linux.intel.com> Date: Thu, 11 Jun 2020 15:29:18 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org On 11/06/2020 12:29, Daniel Vetter wrote: > On Thu, Jun 11, 2020 at 12:36 PM Tvrtko Ursulin > wrote: >> On 10/06/2020 16:17, Daniel Vetter wrote: >>> On Wed, Jun 10, 2020 at 4:22 PM Tvrtko Ursulin >>> wrote: >>>> >>>> >>>> On 04/06/2020 09:12, Daniel Vetter wrote: >>>>> Design is similar to the lockdep annotations for workers, but with >>>>> some twists: >>>>> >>>>> - We use a read-lock for the execution/worker/completion side, so that >>>>> this explicit annotation can be more liberally sprinkled around. >>>>> With read locks lockdep isn't going to complain if the read-side >>>>> isn't nested the same way under all circumstances, so ABBA deadlocks >>>>> are ok. Which they are, since this is an annotation only. >>>>> >>>>> - We're using non-recursive lockdep read lock mode, since in recursive >>>>> read lock mode lockdep does not catch read side hazards. And we >>>>> _very_ much want read side hazards to be caught. For full details of >>>>> this limitation see >>>>> >>>>> commit e91498589746065e3ae95d9a00b068e525eec34f >>>>> Author: Peter Zijlstra >>>>> Date: Wed Aug 23 13:13:11 2017 +0200 >>>>> >>>>> locking/lockdep/selftests: Add mixed read-write ABBA tests >>>>> >>>>> - To allow nesting of the read-side explicit annotations we explicitly >>>>> keep track of the nesting. lock_is_held() allows us to do that. >>>>> >>>>> - The wait-side annotation is a write lock, and entirely done within >>>>> dma_fence_wait() for everyone by default. >>>>> >>>>> - To be able to freely annotate helper functions I want to make it ok >>>>> to call dma_fence_begin/end_signalling from soft/hardirq context. >>>>> First attempt was using the hardirq locking context for the write >>>>> side in lockdep, but this forces all normal spinlocks nested within >>>>> dma_fence_begin/end_signalling to be spinlocks. That bollocks. >>>>> >>>>> The approach now is to simple check in_atomic(), and for these cases >>>>> entirely rely on the might_sleep() check in dma_fence_wait(). That >>>>> will catch any wrong nesting against spinlocks from soft/hardirq >>>>> contexts. >>>>> >>>>> The idea here is that every code path that's critical for eventually >>>>> signalling a dma_fence should be annotated with >>>>> dma_fence_begin/end_signalling. The annotation ideally starts right >>>>> after a dma_fence is published (added to a dma_resv, exposed as a >>>>> sync_file fd, attached to a drm_syncobj fd, or anything else that >>>>> makes the dma_fence visible to other kernel threads), up to and >>>>> including the dma_fence_wait(). Examples are irq handlers, the >>>>> scheduler rt threads, the tail of execbuf (after the corresponding >>>>> fences are visible), any workers that end up signalling dma_fences and >>>>> really anything else. Not annotated should be code paths that only >>>>> complete fences opportunistically as the gpu progresses, like e.g. >>>>> shrinker/eviction code. >>>>> >>>>> The main class of deadlocks this is supposed to catch are: >>>>> >>>>> Thread A: >>>>> >>>>> mutex_lock(A); >>>>> mutex_unlock(A); >>>>> >>>>> dma_fence_signal(); >>>>> >>>>> Thread B: >>>>> >>>>> mutex_lock(A); >>>>> dma_fence_wait(); >>>>> mutex_unlock(A); >>>>> >>>>> Thread B is blocked on A signalling the fence, but A never gets around >>>>> to that because it cannot acquire the lock A. >>>>> >>>>> Note that dma_fence_wait() is allowed to be nested within >>>>> dma_fence_begin/end_signalling sections. To allow this to happen the >>>>> read lock needs to be upgraded to a write lock, which means that any >>>>> other lock is acquired between the dma_fence_begin_signalling() call and >>>>> the call to dma_fence_wait(), and still held, this will result in an >>>>> immediate lockdep complaint. The only other option would be to not >>>>> annotate such calls, defeating the point. Therefore these annotations >>>>> cannot be sprinkled over the code entirely mindless to avoid false >>>>> positives. >>>>> >>>>> v2: handle soft/hardirq ctx better against write side and dont forget >>>>> EXPORT_SYMBOL, drivers can't use this otherwise. >>>>> >>>>> v3: Kerneldoc. >>>>> >>>>> v4: Some spelling fixes from Mika >>>>> >>>>> Cc: Mika Kuoppala >>>>> Cc: Thomas Hellstrom >>>>> Cc: linux-media@vger.kernel.org >>>>> Cc: linaro-mm-sig@lists.linaro.org >>>>> Cc: linux-rdma@vger.kernel.org >>>>> Cc: amd-gfx@lists.freedesktop.org >>>>> Cc: intel-gfx@lists.freedesktop.org >>>>> Cc: Chris Wilson >>>>> Cc: Maarten Lankhorst >>>>> Cc: Christian König >>>>> Signed-off-by: Daniel Vetter >>>>> --- >>>>> Documentation/driver-api/dma-buf.rst | 12 +- >>>>> drivers/dma-buf/dma-fence.c | 161 +++++++++++++++++++++++++++ >>>>> include/linux/dma-fence.h | 12 ++ >>>>> 3 files changed, 182 insertions(+), 3 deletions(-) >>>>> >>>>> diff --git a/Documentation/driver-api/dma-buf.rst b/Documentation/driver-api/dma-buf.rst >>>>> index 63dec76d1d8d..05d856131140 100644 >>>>> --- a/Documentation/driver-api/dma-buf.rst >>>>> +++ b/Documentation/driver-api/dma-buf.rst >>>>> @@ -100,11 +100,11 @@ CPU Access to DMA Buffer Objects >>>>> .. kernel-doc:: drivers/dma-buf/dma-buf.c >>>>> :doc: cpu access >>>>> >>>>> -Fence Poll Support >>>>> -~~~~~~~~~~~~~~~~~~ >>>>> +Implicit Fence Poll Support >>>>> +~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>> >>>>> .. kernel-doc:: drivers/dma-buf/dma-buf.c >>>>> - :doc: fence polling >>>>> + :doc: implicit fence polling >>>>> >>>>> Kernel Functions and Structures Reference >>>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>> @@ -133,6 +133,12 @@ DMA Fences >>>>> .. kernel-doc:: drivers/dma-buf/dma-fence.c >>>>> :doc: DMA fences overview >>>>> >>>>> +DMA Fence Signalling Annotations >>>>> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>> + >>>>> +.. kernel-doc:: drivers/dma-buf/dma-fence.c >>>>> + :doc: fence signalling annotation >>>>> + >>>>> DMA Fences Functions Reference >>>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>> >>>>> diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c >>>>> index 656e9ac2d028..0005bc002529 100644 >>>>> --- a/drivers/dma-buf/dma-fence.c >>>>> +++ b/drivers/dma-buf/dma-fence.c >>>>> @@ -110,6 +110,160 @@ u64 dma_fence_context_alloc(unsigned num) >>>>> } >>>>> EXPORT_SYMBOL(dma_fence_context_alloc); >>>>> >>>>> +/** >>>>> + * DOC: fence signalling annotation >>>>> + * >>>>> + * Proving correctness of all the kernel code around &dma_fence through code >>>>> + * review and testing is tricky for a few reasons: >>>>> + * >>>>> + * * It is a cross-driver contract, and therefore all drivers must follow the >>>>> + * same rules for lock nesting order, calling contexts for various functions >>>>> + * and anything else significant for in-kernel interfaces. But it is also >>>>> + * impossible to test all drivers in a single machine, hence brute-force N vs. >>>>> + * N testing of all combinations is impossible. Even just limiting to the >>>>> + * possible combinations is infeasible. >>>>> + * >>>>> + * * There is an enormous amount of driver code involved. For render drivers >>>>> + * there's the tail of command submission, after fences are published, >>>>> + * scheduler code, interrupt and workers to process job completion, >>>>> + * and timeout, gpu reset and gpu hang recovery code. Plus for integration >>>>> + * with core mm with have &mmu_notifier, respectively &mmu_interval_notifier, >>>>> + * and &shrinker. For modesetting drivers there's the commit tail functions >>>>> + * between when fences for an atomic modeset are published, and when the >>>>> + * corresponding vblank completes, including any interrupt processing and >>>>> + * related workers. Auditing all that code, across all drivers, is not >>>>> + * feasible. >>>>> + * >>>>> + * * Due to how many other subsystems are involved and the locking hierarchies >>>>> + * this pulls in there is extremely thin wiggle-room for driver-specific >>>>> + * differences. &dma_fence interacts with almost all of the core memory >>>>> + * handling through page fault handlers via &dma_resv, dma_resv_lock() and >>>>> + * dma_resv_unlock(). On the other side it also interacts through all >>>>> + * allocation sites through &mmu_notifier and &shrinker. >>>>> + * >>>>> + * Furthermore lockdep does not handle cross-release dependencies, which means >>>>> + * any deadlocks between dma_fence_wait() and dma_fence_signal() can't be caught >>>>> + * at runtime with some quick testing. The simplest example is one thread >>>>> + * waiting on a &dma_fence while holding a lock:: >>>>> + * >>>>> + * lock(A); >>>>> + * dma_fence_wait(B); >>>>> + * unlock(A); >>>>> + * >>>>> + * while the other thread is stuck trying to acquire the same lock, which >>>>> + * prevents it from signalling the fence the previous thread is stuck waiting >>>>> + * on:: >>>>> + * >>>>> + * lock(A); >>>>> + * unlock(A); >>>>> + * dma_fence_signal(B); >>>>> + * >>>>> + * By manually annotating all code relevant to signalling a &dma_fence we can >>>>> + * teach lockdep about these dependencies, which also helps with the validation >>>>> + * headache since now lockdep can check all the rules for us:: >>>>> + * >>>>> + * cookie = dma_fence_begin_signalling(); >>>>> + * lock(A); >>>>> + * unlock(A); >>>>> + * dma_fence_signal(B); >>>>> + * dma_fence_end_signalling(cookie); >>>>> + * >>>>> + * For using dma_fence_begin_signalling() and dma_fence_end_signalling() to >>>>> + * annotate critical sections the following rules need to be observed: >>>>> + * >>>>> + * * All code necessary to complete a &dma_fence must be annotated, from the >>>>> + * point where a fence is accessible to other threads, to the point where >>>>> + * dma_fence_signal() is called. Un-annotated code can contain deadlock issues, >>>>> + * and due to the very strict rules and many corner cases it is infeasible to >>>>> + * catch these just with review or normal stress testing. >>>>> + * >>>>> + * * &struct dma_resv deserves a special note, since the readers are only >>>>> + * protected by rcu. This means the signalling critical section starts as soon >>>>> + * as the new fences are installed, even before dma_resv_unlock() is called. >>>>> + * >>>>> + * * The only exception are fast paths and opportunistic signalling code, which >>>>> + * calls dma_fence_signal() purely as an optimization, but is not required to >>>>> + * guarantee completion of a &dma_fence. The usual example is a wait IOCTL >>>>> + * which calls dma_fence_signal(), while the mandatory completion path goes >>>>> + * through a hardware interrupt and possible job completion worker. >>>>> + * >>>>> + * * To aid composability of code, the annotations can be freely nested, as long >>>>> + * as the overall locking hierarchy is consistent. The annotations also work >>>>> + * both in interrupt and process context. Due to implementation details this >>>>> + * requires that callers pass an opaque cookie from >>>>> + * dma_fence_begin_signalling() to dma_fence_end_signalling(). >>>>> + * >>>>> + * * Validation against the cross driver contract is implemented by priming >>>>> + * lockdep with the relevant hierarchy at boot-up. This means even just >>>>> + * testing with a single device is enough to validate a driver, at least as >>>>> + * far as deadlocks with dma_fence_wait() against dma_fence_signal() are >>>>> + * concerned. >>>>> + */ >>>>> +#ifdef CONFIG_LOCKDEP >>>>> +struct lockdep_map dma_fence_lockdep_map = { >>>>> + .name = "dma_fence_map" >>>>> +}; >>>> >>>> Maybe a stupid question because this is definitely complicated, but.. If >>>> you have a single/static/global lockdep map, doesn't this mean _all_ >>>> locks, from _all_ drivers happening to use dma-fences will get recorded >>>> in it. Will this work and not cause false positives? >>>> >>>> Sounds like it could create a common link between two completely >>>> unconnected usages. Because below you do add annotations to generic >>>> dma_fence_signal and dma_fence_wait. >>> >>> This is fully intentional. dma-fence is a cross-driver interface, if >>> every driver invents its own rules about how this should work we have >>> an unmaintainable and unreviewable mess. >>> >>> I've typed up the full length rant already here: >>> >>> https://lore.kernel.org/dri-devel/CAKMK7uGnFhbpuurRsnZ4dvRV9gQ_3-rmSJaoqSFY=+Kvepz_CA@mail.gmail.com/ >> >> But "perfect storm" of: >> >> + global fence lockmap >> + mmu notifiers >> + fs reclaim >> + default annotations in dma_fence_signal / dma_fence_wait >> >> Equals to anything ever using dma_fence will be in impossible chains with random other drivers, even if neither driver has code to export/share that fence. >> >> Example from the CI run: >> >> [25.918788] Chain exists of: >> fs_reclaim --> mmu_notifier_invalidate_range_start --> dma_fence_map >> [25.918794] Possible unsafe locking scenario: >> [25.918797] CPU0 CPU1 >> [25.918799] ---- ---- >> [25.918801] lock(dma_fence_map); >> [25.918803] lock(mmu_notifier_invalidate_range_start); >> [25.918807] lock(dma_fence_map); >> [25.918809] lock(fs_reclaim); >> >> What about a dma_fence_export helper which would "arm" the annotations? It would be called as soon as the fence is exported. Maybe when added to dma_resv, or exported via sync_file, etc. Before that point begin/end_signaling and so would be no-ops. > > Run CI without the i915 annotation patch, nothing breaks. I think some parts of i915 would still break with my idea to only apply annotations on exported fences. What do you dislike about that idea? I thought the point is to enforce rules for _exported_ fences. How you have annotated dma_fence_work you can't say, maybe it is exported maybe it isn't. I think it is btw, so splats would still be there, but I am not sure it is conceptually correct. At least my understanding is GFP_KERNEL allocations are only disallowed by the virtue of the global dma-fence contract. If you want to enforce they are never used for anything but exporting, then that would be a bit harsh, no? Another example from the CI run: [26.585357] CPU0 CPU1 [26.585359] ---- ---- [26.585360] lock(dma_fence_map); [26.585362] lock(mmu_notifier_invalidate_range_start); [26.585365] lock(dma_fence_map); [26.585367] lock(i915_gem_object_internal/1); [26.585369] *** DEADLOCK *** Lets say someone submitted an execbuf using userptr as a batch and then unmapped it immediately. That would explain CPU1 getting into the mmu notifier and waiting on this batch to unbind the object. Meanwhile CPU0 is the async command parser for this request trying to lock the shadow batch buffer. Because it uses the dma_fence_work this is between the begin/end signalling markers. It can be the same dma-fence I think, since we install the async parser fence on the real batch dma-resv, but dma_fence_map is not a real lock, so what is actually preventing progress in this case? CPU1 is waiting on a fence, but CPU0 can obtain the lock(i915_gem_object_internal/1), proceed to parse the batch, and exit the signalling section. At which point CPU1 is still blocked, waiting until the execbuf finishes and then mmu notifier can finish and invalidate the pages. Maybe I am missing something but I don't see how this one is real. > So we can gradually fix up existing code that doesn't quite get it > right and move on. > >>>>> + >>>>> +/** >>>>> + * dma_fence_begin_signalling - begin a critical DMA fence signalling section >>>>> + * >>>>> + * Drivers should use this to annotate the beginning of any code section >>>>> + * required to eventually complete &dma_fence by calling dma_fence_signal(). >>>>> + * >>>>> + * The end of these critical sections are annotated with >>>>> + * dma_fence_end_signalling(). >>>>> + * >>>>> + * Returns: >>>>> + * >>>>> + * Opaque cookie needed by the implementation, which needs to be passed to >>>>> + * dma_fence_end_signalling(). >>>>> + */ >>>>> +bool dma_fence_begin_signalling(void) >>>>> +{ >>>>> + /* explicitly nesting ... */ >>>>> + if (lock_is_held_type(&dma_fence_lockdep_map, 1)) >>>>> + return true; >>>>> + >>>>> + /* rely on might_sleep check for soft/hardirq locks */ >>>>> + if (in_atomic()) >>>>> + return true; >>>>> + >>>>> + /* ... and non-recursive readlock */ >>>>> + lock_acquire(&dma_fence_lockdep_map, 0, 0, 1, 1, NULL, _RET_IP_); >>>> >>>> Would it work if signalling path would mark itself as a write lock? I am >>>> thinking it would be nice to see in lockdep splats what are signals and >>>> what are waits. >>> >>> Yeah it'd be nice to have a read vs write name for the lock. But we >>> already have this problem for e.g. flush_work(), from which I've >>> stolen this idea. So it's not really new. Essentially look at the >>> backtraces lockdep gives you, and reconstruct the deadlock. I'm hoping >>> that people will notice the special functions on the backtrace, e.g. >>> dma_fence_begin_signalling will be listed as offending function/lock >>> holder, and then read the kerneldoc. >>> >>>> The recursive usage wouldn't work then right? Would write annotation on >>>> the wait path work? >>> >>> Wait path is write annotations already, but yeah annotating the >>> signalling side as write would cause endless amounts of alse >>> positives. Also it makes composability of these e.g. what I've done in >>> amdgpu with annotations in tdr work in drm/scheduler, annotations in >>> the amdgpu gpu reset code and then also annotations in atomic code, >>> which all nest within each other in some call chains, but not others. >>> Dropping the recursion would break that and make it really awkward to >>> annotate such cases correctly. >>> >>> And the recursion only works if it's read locks, otherwise lockdep >>> complains if you have inconsistent annotations on the signalling side >>> (which again would make it more or less impossible to annotate the >>> above case fully). >> >> How do I see in lockdep splats if it was a read or write user? Your patch appears to have: >> >> dma_fence_signal: >> + lock_acquire(&dma_fence_lockdep_map, 0, 0, 1, 1, NULL, _RET_IP_); >> >> __dma_fence_might_wait: >> + lock_acquire(&dma_fence_lockdep_map, 0, 0, 1, 1, NULL, _THIS_IP_); >> >> Which both seem like read lock. I don't fully understand the lockdep API so I might be wrong, not sure. But neither I see a difference in splats telling me which path is which. > > I think you got tricked by the implementation, this isn't quite what's > going on. There's two things which make the annotations special: > > - we want a recursive read lock on the signalling critical section. > The problem is that lockdep doesn't implement full validation for > recursive read locks, only non-recursive read/write locks fully > validated. There's some checks for recursive read locks, but exactly > the checks we need to catch common dma_fence_wait deadlocks aren't > done. That's why we need to implement manual lock recursion on the > reader side > > - now on the write side we additionally need to implement an > read2write upgrade, and a write2read downgrade. Lockdep doesn't > implement that, so again we have to hand-roll this. > > Let's go through the code line-by-line: > > bool tmp; > > tmp = lock_is_held_type(&dma_fence_lockdep_map, 1); > > We check whether someone is holding the non-recursive read lock already. > > if (tmp) > lock_release(&dma_fence_lockdep_map, _THIS_IP_); > > If that's the case, we drop that read lock. > > lock_map_acquire(&dma_fence_lockdep_map); > > Then we do the actual might_wait annotation, the above takes the full > write lock ... > > lock_map_release(&dma_fence_lockdep_map); > > ... and now we release the write lock again. > > > if (tmp) > lock_acquire(&dma_fence_lockdep_map, 0, 0, 1, 1, NULL, _THIS_IP_); > > Finally we need to re-acquire the read lock, if we've held that when > entering this function. This annotation naturally has to exactly match > what begin_signalling would do, otherwise the hand-rolled nesting > would fall apart. > > I hope that explains what's going on here, and assures you that > might_wait() is indeed a write lock annotation, but with a big pile of > complications. I am certainly confused by the difference between lock_map_acquire/release and lock_acquire/release. What is the difference between the two? Regards, Tvrtko From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, HK_RANDOM_FROM,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ED63FC433E0 for ; Thu, 11 Jun 2020 14:29:29 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CE0722065C for ; Thu, 11 Jun 2020 14:29:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CE0722065C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BF0FD6E910; Thu, 11 Jun 2020 14:29:28 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4D7946E848; Thu, 11 Jun 2020 14:29:27 +0000 (UTC) IronPort-SDR: j1CIvtoZkOTlPMBmc3c3UgY00IrY5An0a2bXHvNmDNobi5RI885AUMd2U3HTAfdTAi0LMev3ub o41EE46tiNHg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:26 -0700 IronPort-SDR: /OQuU5Pl16dhKAQ8MPr5NunLJJHsE69DTemvtYctQTSHF8XNlyfq34qfyk7OXe4eIYIwNaYMfB 30OgsFGnvRFA== X-IronPort-AV: E=Sophos;i="5.73,499,1583222400"; d="scan'208";a="419117978" Received: from osides-mobl1.ger.corp.intel.com (HELO [10.214.204.82]) ([10.214.204.82]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:21 -0700 Subject: Re: [Intel-gfx] [PATCH 03/18] dma-fence: basic lockdep annotations To: Daniel Vetter References: <20200604081224.863494-1-daniel.vetter@ffwll.ch> <20200604081224.863494-4-daniel.vetter@ffwll.ch> <19c6fe47-50ff-869e-d3f0-703b8165d577@linux.intel.com> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: <28c18eed-6d03-aeb2-9e0f-39bae84dfb8c@linux.intel.com> Date: Thu, 11 Jun 2020 15:29:18 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-rdma , Intel Graphics Development , LKML , amd-gfx list , Chris Wilson , "moderated list:DMA BUFFER SHARING FRAMEWORK" , Thomas Hellstrom , DRI Development , Daniel Vetter , Mika Kuoppala , =?UTF-8?Q?Christian_K=c3=b6nig?= , "open list:DMA BUFFER SHARING FRAMEWORK" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Ck9uIDExLzA2LzIwMjAgMTI6MjksIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gT24gVGh1LCBKdW4g MTEsIDIwMjAgYXQgMTI6MzYgUE0gVHZydGtvIFVyc3VsaW4KPiA8dHZydGtvLnVyc3VsaW5AbGlu dXguaW50ZWwuY29tPiB3cm90ZToKPj4gT24gMTAvMDYvMjAyMCAxNjoxNywgRGFuaWVsIFZldHRl ciB3cm90ZToKPj4+IE9uIFdlZCwgSnVuIDEwLCAyMDIwIGF0IDQ6MjIgUE0gVHZydGtvIFVyc3Vs aW4KPj4+IDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+Pj4+Cj4+Pj4K Pj4+PiBPbiAwNC8wNi8yMDIwIDA5OjEyLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+Pj4+PiBEZXNp Z24gaXMgc2ltaWxhciB0byB0aGUgbG9ja2RlcCBhbm5vdGF0aW9ucyBmb3Igd29ya2VycywgYnV0 IHdpdGgKPj4+Pj4gc29tZSB0d2lzdHM6Cj4+Pj4+Cj4+Pj4+IC0gV2UgdXNlIGEgcmVhZC1sb2Nr IGZvciB0aGUgZXhlY3V0aW9uL3dvcmtlci9jb21wbGV0aW9uIHNpZGUsIHNvIHRoYXQKPj4+Pj4g ICAgICB0aGlzIGV4cGxpY2l0IGFubm90YXRpb24gY2FuIGJlIG1vcmUgbGliZXJhbGx5IHNwcmlu a2xlZCBhcm91bmQuCj4+Pj4+ICAgICAgV2l0aCByZWFkIGxvY2tzIGxvY2tkZXAgaXNuJ3QgZ29p bmcgdG8gY29tcGxhaW4gaWYgdGhlIHJlYWQtc2lkZQo+Pj4+PiAgICAgIGlzbid0IG5lc3RlZCB0 aGUgc2FtZSB3YXkgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMsIHNvIEFCQkEgZGVhZGxvY2tzCj4+ Pj4+ICAgICAgYXJlIG9rLiBXaGljaCB0aGV5IGFyZSwgc2luY2UgdGhpcyBpcyBhbiBhbm5vdGF0 aW9uIG9ubHkuCj4+Pj4+Cj4+Pj4+IC0gV2UncmUgdXNpbmcgbm9uLXJlY3Vyc2l2ZSBsb2NrZGVw IHJlYWQgbG9jayBtb2RlLCBzaW5jZSBpbiByZWN1cnNpdmUKPj4+Pj4gICAgICByZWFkIGxvY2sg bW9kZSBsb2NrZGVwIGRvZXMgbm90IGNhdGNoIHJlYWQgc2lkZSBoYXphcmRzLiBBbmQgd2UKPj4+ Pj4gICAgICBfdmVyeV8gbXVjaCB3YW50IHJlYWQgc2lkZSBoYXphcmRzIHRvIGJlIGNhdWdodC4g Rm9yIGZ1bGwgZGV0YWlscyBvZgo+Pj4+PiAgICAgIHRoaXMgbGltaXRhdGlvbiBzZWUKPj4+Pj4K Pj4+Pj4gICAgICBjb21taXQgZTkxNDk4NTg5NzQ2MDY1ZTNhZTk1ZDlhMDBiMDY4ZTUyNWVlYzM0 Zgo+Pj4+PiAgICAgIEF1dGhvcjogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3Jn Pgo+Pj4+PiAgICAgIERhdGU6ICAgV2VkIEF1ZyAyMyAxMzoxMzoxMSAyMDE3ICswMjAwCj4+Pj4+ Cj4+Pj4+ICAgICAgICAgIGxvY2tpbmcvbG9ja2RlcC9zZWxmdGVzdHM6IEFkZCBtaXhlZCByZWFk LXdyaXRlIEFCQkEgdGVzdHMKPj4+Pj4KPj4+Pj4gLSBUbyBhbGxvdyBuZXN0aW5nIG9mIHRoZSBy ZWFkLXNpZGUgZXhwbGljaXQgYW5ub3RhdGlvbnMgd2UgZXhwbGljaXRseQo+Pj4+PiAgICAgIGtl ZXAgdHJhY2sgb2YgdGhlIG5lc3RpbmcuIGxvY2tfaXNfaGVsZCgpIGFsbG93cyB1cyB0byBkbyB0 aGF0Lgo+Pj4+Pgo+Pj4+PiAtIFRoZSB3YWl0LXNpZGUgYW5ub3RhdGlvbiBpcyBhIHdyaXRlIGxv Y2ssIGFuZCBlbnRpcmVseSBkb25lIHdpdGhpbgo+Pj4+PiAgICAgIGRtYV9mZW5jZV93YWl0KCkg Zm9yIGV2ZXJ5b25lIGJ5IGRlZmF1bHQuCj4+Pj4+Cj4+Pj4+IC0gVG8gYmUgYWJsZSB0byBmcmVl bHkgYW5ub3RhdGUgaGVscGVyIGZ1bmN0aW9ucyBJIHdhbnQgdG8gbWFrZSBpdCBvawo+Pj4+PiAg ICAgIHRvIGNhbGwgZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nIGZyb20gc29mdC9oYXJk aXJxIGNvbnRleHQuCj4+Pj4+ICAgICAgRmlyc3QgYXR0ZW1wdCB3YXMgdXNpbmcgdGhlIGhhcmRp cnEgbG9ja2luZyBjb250ZXh0IGZvciB0aGUgd3JpdGUKPj4+Pj4gICAgICBzaWRlIGluIGxvY2tk ZXAsIGJ1dCB0aGlzIGZvcmNlcyBhbGwgbm9ybWFsIHNwaW5sb2NrcyBuZXN0ZWQgd2l0aGluCj4+ Pj4+ICAgICAgZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nIHRvIGJlIHNwaW5sb2Nrcy4g VGhhdCBib2xsb2Nrcy4KPj4+Pj4KPj4+Pj4gICAgICBUaGUgYXBwcm9hY2ggbm93IGlzIHRvIHNp bXBsZSBjaGVjayBpbl9hdG9taWMoKSwgYW5kIGZvciB0aGVzZSBjYXNlcwo+Pj4+PiAgICAgIGVu dGlyZWx5IHJlbHkgb24gdGhlIG1pZ2h0X3NsZWVwKCkgY2hlY2sgaW4gZG1hX2ZlbmNlX3dhaXQo KS4gVGhhdAo+Pj4+PiAgICAgIHdpbGwgY2F0Y2ggYW55IHdyb25nIG5lc3RpbmcgYWdhaW5zdCBz cGlubG9ja3MgZnJvbSBzb2Z0L2hhcmRpcnEKPj4+Pj4gICAgICBjb250ZXh0cy4KPj4+Pj4KPj4+ Pj4gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGV2ZXJ5IGNvZGUgcGF0aCB0aGF0J3MgY3JpdGljYWwg Zm9yIGV2ZW50dWFsbHkKPj4+Pj4gc2lnbmFsbGluZyBhIGRtYV9mZW5jZSBzaG91bGQgYmUgYW5u b3RhdGVkIHdpdGgKPj4+Pj4gZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nLiBUaGUgYW5u b3RhdGlvbiBpZGVhbGx5IHN0YXJ0cyByaWdodAo+Pj4+PiBhZnRlciBhIGRtYV9mZW5jZSBpcyBw dWJsaXNoZWQgKGFkZGVkIHRvIGEgZG1hX3Jlc3YsIGV4cG9zZWQgYXMgYQo+Pj4+PiBzeW5jX2Zp bGUgZmQsIGF0dGFjaGVkIHRvIGEgZHJtX3N5bmNvYmogZmQsIG9yIGFueXRoaW5nIGVsc2UgdGhh dAo+Pj4+PiBtYWtlcyB0aGUgZG1hX2ZlbmNlIHZpc2libGUgdG8gb3RoZXIga2VybmVsIHRocmVh ZHMpLCB1cCB0byBhbmQKPj4+Pj4gaW5jbHVkaW5nIHRoZSBkbWFfZmVuY2Vfd2FpdCgpLiBFeGFt cGxlcyBhcmUgaXJxIGhhbmRsZXJzLCB0aGUKPj4+Pj4gc2NoZWR1bGVyIHJ0IHRocmVhZHMsIHRo ZSB0YWlsIG9mIGV4ZWNidWYgKGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nCj4+Pj4+IGZlbmNlcyBh cmUgdmlzaWJsZSksIGFueSB3b3JrZXJzIHRoYXQgZW5kIHVwIHNpZ25hbGxpbmcgZG1hX2ZlbmNl cyBhbmQKPj4+Pj4gcmVhbGx5IGFueXRoaW5nIGVsc2UuIE5vdCBhbm5vdGF0ZWQgc2hvdWxkIGJl IGNvZGUgcGF0aHMgdGhhdCBvbmx5Cj4+Pj4+IGNvbXBsZXRlIGZlbmNlcyBvcHBvcnR1bmlzdGlj YWxseSBhcyB0aGUgZ3B1IHByb2dyZXNzZXMsIGxpa2UgZS5nLgo+Pj4+PiBzaHJpbmtlci9ldmlj dGlvbiBjb2RlLgo+Pj4+Pgo+Pj4+PiBUaGUgbWFpbiBjbGFzcyBvZiBkZWFkbG9ja3MgdGhpcyBp cyBzdXBwb3NlZCB0byBjYXRjaCBhcmU6Cj4+Pj4+Cj4+Pj4+IFRocmVhZCBBOgo+Pj4+Pgo+Pj4+ PiAgICAgICAgIG11dGV4X2xvY2soQSk7Cj4+Pj4+ICAgICAgICAgbXV0ZXhfdW5sb2NrKEEpOwo+ Pj4+Pgo+Pj4+PiAgICAgICAgIGRtYV9mZW5jZV9zaWduYWwoKTsKPj4+Pj4KPj4+Pj4gVGhyZWFk IEI6Cj4+Pj4+Cj4+Pj4+ICAgICAgICAgbXV0ZXhfbG9jayhBKTsKPj4+Pj4gICAgICAgICBkbWFf ZmVuY2Vfd2FpdCgpOwo+Pj4+PiAgICAgICAgIG11dGV4X3VubG9jayhBKTsKPj4+Pj4KPj4+Pj4g VGhyZWFkIEIgaXMgYmxvY2tlZCBvbiBBIHNpZ25hbGxpbmcgdGhlIGZlbmNlLCBidXQgQSBuZXZl ciBnZXRzIGFyb3VuZAo+Pj4+PiB0byB0aGF0IGJlY2F1c2UgaXQgY2Fubm90IGFjcXVpcmUgdGhl IGxvY2sgQS4KPj4+Pj4KPj4+Pj4gTm90ZSB0aGF0IGRtYV9mZW5jZV93YWl0KCkgaXMgYWxsb3dl ZCB0byBiZSBuZXN0ZWQgd2l0aGluCj4+Pj4+IGRtYV9mZW5jZV9iZWdpbi9lbmRfc2lnbmFsbGlu ZyBzZWN0aW9ucy4gVG8gYWxsb3cgdGhpcyB0byBoYXBwZW4gdGhlCj4+Pj4+IHJlYWQgbG9jayBu ZWVkcyB0byBiZSB1cGdyYWRlZCB0byBhIHdyaXRlIGxvY2ssIHdoaWNoIG1lYW5zIHRoYXQgYW55 Cj4+Pj4+IG90aGVyIGxvY2sgaXMgYWNxdWlyZWQgYmV0d2VlbiB0aGUgZG1hX2ZlbmNlX2JlZ2lu X3NpZ25hbGxpbmcoKSBjYWxsIGFuZAo+Pj4+PiB0aGUgY2FsbCB0byBkbWFfZmVuY2Vfd2FpdCgp LCBhbmQgc3RpbGwgaGVsZCwgdGhpcyB3aWxsIHJlc3VsdCBpbiBhbgo+Pj4+PiBpbW1lZGlhdGUg bG9ja2RlcCBjb21wbGFpbnQuIFRoZSBvbmx5IG90aGVyIG9wdGlvbiB3b3VsZCBiZSB0byBub3QK Pj4+Pj4gYW5ub3RhdGUgc3VjaCBjYWxscywgZGVmZWF0aW5nIHRoZSBwb2ludC4gVGhlcmVmb3Jl IHRoZXNlIGFubm90YXRpb25zCj4+Pj4+IGNhbm5vdCBiZSBzcHJpbmtsZWQgb3ZlciB0aGUgY29k ZSBlbnRpcmVseSBtaW5kbGVzcyB0byBhdm9pZCBmYWxzZQo+Pj4+PiBwb3NpdGl2ZXMuCj4+Pj4+ Cj4+Pj4+IHYyOiBoYW5kbGUgc29mdC9oYXJkaXJxIGN0eCBiZXR0ZXIgYWdhaW5zdCB3cml0ZSBz aWRlIGFuZCBkb250IGZvcmdldAo+Pj4+PiBFWFBPUlRfU1lNQk9MLCBkcml2ZXJzIGNhbid0IHVz ZSB0aGlzIG90aGVyd2lzZS4KPj4+Pj4KPj4+Pj4gdjM6IEtlcm5lbGRvYy4KPj4+Pj4KPj4+Pj4g djQ6IFNvbWUgc3BlbGxpbmcgZml4ZXMgZnJvbSBNaWthCj4+Pj4+Cj4+Pj4+IENjOiBNaWthIEt1 b3BwYWxhIDxtaWthLmt1b3BwYWxhQGludGVsLmNvbT4KPj4+Pj4gQ2M6IFRob21hcyBIZWxsc3Ry b20gPHRob21hcy5oZWxsc3Ryb21AaW50ZWwuY29tPgo+Pj4+PiBDYzogbGludXgtbWVkaWFAdmdl ci5rZXJuZWwub3JnCj4+Pj4+IENjOiBsaW5hcm8tbW0tc2lnQGxpc3RzLmxpbmFyby5vcmcKPj4+ Pj4gQ2M6IGxpbnV4LXJkbWFAdmdlci5rZXJuZWwub3JnCj4+Pj4+IENjOiBhbWQtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+Pj4+PiBDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zwo+Pj4+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+Pj4+ IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t Pgo+Pj4+PiBDYzogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNv bT4KPj4+Pj4gLS0tCj4+Pj4+ICAgICBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5y c3QgfCAgMTIgKy0KPj4+Pj4gICAgIGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYyAgICAgICAg ICB8IDE2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+Pj4gICAgIGluY2x1ZGUvbGlu dXgvZG1hLWZlbmNlLmggICAgICAgICAgICB8ICAxMiArKwo+Pj4+PiAgICAgMyBmaWxlcyBjaGFu Z2VkLCAxODIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAt LWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdCBiL0RvY3VtZW50YXRp b24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdAo+Pj4+PiBpbmRleCA2M2RlYzc2ZDFkOGQuLjA1ZDg1 NjEzMTE0MCAxMDA2NDQKPj4+Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1i dWYucnN0Cj4+Pj4+ICsrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdAo+ Pj4+PiBAQCAtMTAwLDExICsxMDAsMTEgQEAgQ1BVIEFjY2VzcyB0byBETUEgQnVmZmVyIE9iamVj dHMKPj4+Pj4gICAgIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4+ Pj4+ICAgICAgICA6ZG9jOiBjcHUgYWNjZXNzCj4+Pj4+Cj4+Pj4+IC1GZW5jZSBQb2xsIFN1cHBv cnQKPj4+Pj4gLX5+fn5+fn5+fn5+fn5+fn5+fgo+Pj4+PiArSW1wbGljaXQgRmVuY2UgUG9sbCBT dXBwb3J0Cj4+Pj4+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPj4+Pj4KPj4+Pj4gICAg IC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4+Pj4+IC0gICA6ZG9j OiBmZW5jZSBwb2xsaW5nCj4+Pj4+ICsgICA6ZG9jOiBpbXBsaWNpdCBmZW5jZSBwb2xsaW5nCj4+ Pj4+Cj4+Pj4+ICAgICBLZXJuZWwgRnVuY3Rpb25zIGFuZCBTdHJ1Y3R1cmVzIFJlZmVyZW5jZQo+ Pj4+PiAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPj4+Pj4g QEAgLTEzMyw2ICsxMzMsMTIgQEAgRE1BIEZlbmNlcwo+Pj4+PiAgICAgLi4ga2VybmVsLWRvYzo6 IGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYwo+Pj4+PiAgICAgICAgOmRvYzogRE1BIGZlbmNl cyBvdmVydmlldwo+Pj4+Pgo+Pj4+PiArRE1BIEZlbmNlIFNpZ25hbGxpbmcgQW5ub3RhdGlvbnMK Pj4+Pj4gK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cj4+Pj4+ICsKPj4+Pj4gKy4u IGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLmMKPj4+Pj4gKyAgIDpkb2M6 IGZlbmNlIHNpZ25hbGxpbmcgYW5ub3RhdGlvbgo+Pj4+PiArCj4+Pj4+ICAgICBETUEgRmVuY2Vz IEZ1bmN0aW9ucyBSZWZlcmVuY2UKPj4+Pj4gICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fgo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5j IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5jCj4+Pj4+IGluZGV4IDY1NmU5YWMyZDAyOC4u MDAwNWJjMDAyNTI5IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNl LmMKPj4+Pj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5jCj4+Pj4+IEBAIC0xMTAs NiArMTEwLDE2MCBAQCB1NjQgZG1hX2ZlbmNlX2NvbnRleHRfYWxsb2ModW5zaWduZWQgbnVtKQo+ Pj4+PiAgICAgfQo+Pj4+PiAgICAgRVhQT1JUX1NZTUJPTChkbWFfZmVuY2VfY29udGV4dF9hbGxv Yyk7Cj4+Pj4+Cj4+Pj4+ICsvKioKPj4+Pj4gKyAqIERPQzogZmVuY2Ugc2lnbmFsbGluZyBhbm5v dGF0aW9uCj4+Pj4+ICsgKgo+Pj4+PiArICogUHJvdmluZyBjb3JyZWN0bmVzcyBvZiBhbGwgdGhl IGtlcm5lbCBjb2RlIGFyb3VuZCAmZG1hX2ZlbmNlIHRocm91Z2ggY29kZQo+Pj4+PiArICogcmV2 aWV3IGFuZCB0ZXN0aW5nIGlzIHRyaWNreSBmb3IgYSBmZXcgcmVhc29uczoKPj4+Pj4gKyAqCj4+ Pj4+ICsgKiAqIEl0IGlzIGEgY3Jvc3MtZHJpdmVyIGNvbnRyYWN0LCBhbmQgdGhlcmVmb3JlIGFs bCBkcml2ZXJzIG11c3QgZm9sbG93IHRoZQo+Pj4+PiArICogICBzYW1lIHJ1bGVzIGZvciBsb2Nr IG5lc3Rpbmcgb3JkZXIsIGNhbGxpbmcgY29udGV4dHMgZm9yIHZhcmlvdXMgZnVuY3Rpb25zCj4+ Pj4+ICsgKiAgIGFuZCBhbnl0aGluZyBlbHNlIHNpZ25pZmljYW50IGZvciBpbi1rZXJuZWwgaW50 ZXJmYWNlcy4gQnV0IGl0IGlzIGFsc28KPj4+Pj4gKyAqICAgaW1wb3NzaWJsZSB0byB0ZXN0IGFs bCBkcml2ZXJzIGluIGEgc2luZ2xlIG1hY2hpbmUsIGhlbmNlIGJydXRlLWZvcmNlIE4gdnMuCj4+ Pj4+ICsgKiAgIE4gdGVzdGluZyBvZiBhbGwgY29tYmluYXRpb25zIGlzIGltcG9zc2libGUuIEV2 ZW4ganVzdCBsaW1pdGluZyB0byB0aGUKPj4+Pj4gKyAqICAgcG9zc2libGUgY29tYmluYXRpb25z IGlzIGluZmVhc2libGUuCj4+Pj4+ICsgKgo+Pj4+PiArICogKiBUaGVyZSBpcyBhbiBlbm9ybW91 cyBhbW91bnQgb2YgZHJpdmVyIGNvZGUgaW52b2x2ZWQuIEZvciByZW5kZXIgZHJpdmVycwo+Pj4+ PiArICogICB0aGVyZSdzIHRoZSB0YWlsIG9mIGNvbW1hbmQgc3VibWlzc2lvbiwgYWZ0ZXIgZmVu Y2VzIGFyZSBwdWJsaXNoZWQsCj4+Pj4+ICsgKiAgIHNjaGVkdWxlciBjb2RlLCBpbnRlcnJ1cHQg YW5kIHdvcmtlcnMgdG8gcHJvY2VzcyBqb2IgY29tcGxldGlvbiwKPj4+Pj4gKyAqICAgYW5kIHRp bWVvdXQsIGdwdSByZXNldCBhbmQgZ3B1IGhhbmcgcmVjb3ZlcnkgY29kZS4gUGx1cyBmb3IgaW50 ZWdyYXRpb24KPj4+Pj4gKyAqICAgd2l0aCBjb3JlIG1tIHdpdGggaGF2ZSAmbW11X25vdGlmaWVy LCByZXNwZWN0aXZlbHkgJm1tdV9pbnRlcnZhbF9ub3RpZmllciwKPj4+Pj4gKyAqICAgYW5kICZz aHJpbmtlci4gRm9yIG1vZGVzZXR0aW5nIGRyaXZlcnMgdGhlcmUncyB0aGUgY29tbWl0IHRhaWwg ZnVuY3Rpb25zCj4+Pj4+ICsgKiAgIGJldHdlZW4gd2hlbiBmZW5jZXMgZm9yIGFuIGF0b21pYyBt b2Rlc2V0IGFyZSBwdWJsaXNoZWQsIGFuZCB3aGVuIHRoZQo+Pj4+PiArICogICBjb3JyZXNwb25k aW5nIHZibGFuayBjb21wbGV0ZXMsIGluY2x1ZGluZyBhbnkgaW50ZXJydXB0IHByb2Nlc3Npbmcg YW5kCj4+Pj4+ICsgKiAgIHJlbGF0ZWQgd29ya2Vycy4gQXVkaXRpbmcgYWxsIHRoYXQgY29kZSwg YWNyb3NzIGFsbCBkcml2ZXJzLCBpcyBub3QKPj4+Pj4gKyAqICAgZmVhc2libGUuCj4+Pj4+ICsg Kgo+Pj4+PiArICogKiBEdWUgdG8gaG93IG1hbnkgb3RoZXIgc3Vic3lzdGVtcyBhcmUgaW52b2x2 ZWQgYW5kIHRoZSBsb2NraW5nIGhpZXJhcmNoaWVzCj4+Pj4+ICsgKiAgIHRoaXMgcHVsbHMgaW4g dGhlcmUgaXMgZXh0cmVtZWx5IHRoaW4gd2lnZ2xlLXJvb20gZm9yIGRyaXZlci1zcGVjaWZpYwo+ Pj4+PiArICogICBkaWZmZXJlbmNlcy4gJmRtYV9mZW5jZSBpbnRlcmFjdHMgd2l0aCBhbG1vc3Qg YWxsIG9mIHRoZSBjb3JlIG1lbW9yeQo+Pj4+PiArICogICBoYW5kbGluZyB0aHJvdWdoIHBhZ2Ug ZmF1bHQgaGFuZGxlcnMgdmlhICZkbWFfcmVzdiwgZG1hX3Jlc3ZfbG9jaygpIGFuZAo+Pj4+PiAr ICogICBkbWFfcmVzdl91bmxvY2soKS4gT24gdGhlIG90aGVyIHNpZGUgaXQgYWxzbyBpbnRlcmFj dHMgdGhyb3VnaCBhbGwKPj4+Pj4gKyAqICAgYWxsb2NhdGlvbiBzaXRlcyB0aHJvdWdoICZtbXVf bm90aWZpZXIgYW5kICZzaHJpbmtlci4KPj4+Pj4gKyAqCj4+Pj4+ICsgKiBGdXJ0aGVybW9yZSBs b2NrZGVwIGRvZXMgbm90IGhhbmRsZSBjcm9zcy1yZWxlYXNlIGRlcGVuZGVuY2llcywgd2hpY2gg bWVhbnMKPj4+Pj4gKyAqIGFueSBkZWFkbG9ja3MgYmV0d2VlbiBkbWFfZmVuY2Vfd2FpdCgpIGFu ZCBkbWFfZmVuY2Vfc2lnbmFsKCkgY2FuJ3QgYmUgY2F1Z2h0Cj4+Pj4+ICsgKiBhdCBydW50aW1l IHdpdGggc29tZSBxdWljayB0ZXN0aW5nLiBUaGUgc2ltcGxlc3QgZXhhbXBsZSBpcyBvbmUgdGhy ZWFkCj4+Pj4+ICsgKiB3YWl0aW5nIG9uIGEgJmRtYV9mZW5jZSB3aGlsZSBob2xkaW5nIGEgbG9j azo6Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICAgZG1hX2Zl bmNlX3dhaXQoQik7Cj4+Pj4+ICsgKiAgICAgdW5sb2NrKEEpOwo+Pj4+PiArICoKPj4+Pj4gKyAq IHdoaWxlIHRoZSBvdGhlciB0aHJlYWQgaXMgc3R1Y2sgdHJ5aW5nIHRvIGFjcXVpcmUgdGhlIHNh bWUgbG9jaywgd2hpY2gKPj4+Pj4gKyAqIHByZXZlbnRzIGl0IGZyb20gc2lnbmFsbGluZyB0aGUg ZmVuY2UgdGhlIHByZXZpb3VzIHRocmVhZCBpcyBzdHVjayB3YWl0aW5nCj4+Pj4+ICsgKiBvbjo6 Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICAgdW5sb2NrKEEp Owo+Pj4+PiArICogICAgIGRtYV9mZW5jZV9zaWduYWwoQik7Cj4+Pj4+ICsgKgo+Pj4+PiArICog QnkgbWFudWFsbHkgYW5ub3RhdGluZyBhbGwgY29kZSByZWxldmFudCB0byBzaWduYWxsaW5nIGEg JmRtYV9mZW5jZSB3ZSBjYW4KPj4+Pj4gKyAqIHRlYWNoIGxvY2tkZXAgYWJvdXQgdGhlc2UgZGVw ZW5kZW5jaWVzLCB3aGljaCBhbHNvIGhlbHBzIHdpdGggdGhlIHZhbGlkYXRpb24KPj4+Pj4gKyAq IGhlYWRhY2hlIHNpbmNlIG5vdyBsb2NrZGVwIGNhbiBjaGVjayBhbGwgdGhlIHJ1bGVzIGZvciB1 czo6Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgY29va2llID0gZG1hX2ZlbmNlX2JlZ2luX3NpZ25h bGxpbmcoKTsKPj4+Pj4gKyAqICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICB1bmxvY2soQSk7Cj4+ Pj4+ICsgKiAgICBkbWFfZmVuY2Vfc2lnbmFsKEIpOwo+Pj4+PiArICogICAgZG1hX2ZlbmNlX2Vu ZF9zaWduYWxsaW5nKGNvb2tpZSk7Cj4+Pj4+ICsgKgo+Pj4+PiArICogRm9yIHVzaW5nIGRtYV9m ZW5jZV9iZWdpbl9zaWduYWxsaW5nKCkgYW5kIGRtYV9mZW5jZV9lbmRfc2lnbmFsbGluZygpIHRv Cj4+Pj4+ICsgKiBhbm5vdGF0ZSBjcml0aWNhbCBzZWN0aW9ucyB0aGUgZm9sbG93aW5nIHJ1bGVz IG5lZWQgdG8gYmUgb2JzZXJ2ZWQ6Cj4+Pj4+ICsgKgo+Pj4+PiArICogKiBBbGwgY29kZSBuZWNl c3NhcnkgdG8gY29tcGxldGUgYSAmZG1hX2ZlbmNlIG11c3QgYmUgYW5ub3RhdGVkLCBmcm9tIHRo ZQo+Pj4+PiArICogICBwb2ludCB3aGVyZSBhIGZlbmNlIGlzIGFjY2Vzc2libGUgdG8gb3RoZXIg dGhyZWFkcywgdG8gdGhlIHBvaW50IHdoZXJlCj4+Pj4+ICsgKiAgIGRtYV9mZW5jZV9zaWduYWwo KSBpcyBjYWxsZWQuIFVuLWFubm90YXRlZCBjb2RlIGNhbiBjb250YWluIGRlYWRsb2NrIGlzc3Vl cywKPj4+Pj4gKyAqICAgYW5kIGR1ZSB0byB0aGUgdmVyeSBzdHJpY3QgcnVsZXMgYW5kIG1hbnkg Y29ybmVyIGNhc2VzIGl0IGlzIGluZmVhc2libGUgdG8KPj4+Pj4gKyAqICAgY2F0Y2ggdGhlc2Ug anVzdCB3aXRoIHJldmlldyBvciBub3JtYWwgc3RyZXNzIHRlc3RpbmcuCj4+Pj4+ICsgKgo+Pj4+ PiArICogKiAmc3RydWN0IGRtYV9yZXN2IGRlc2VydmVzIGEgc3BlY2lhbCBub3RlLCBzaW5jZSB0 aGUgcmVhZGVycyBhcmUgb25seQo+Pj4+PiArICogICBwcm90ZWN0ZWQgYnkgcmN1LiBUaGlzIG1l YW5zIHRoZSBzaWduYWxsaW5nIGNyaXRpY2FsIHNlY3Rpb24gc3RhcnRzIGFzIHNvb24KPj4+Pj4g KyAqICAgYXMgdGhlIG5ldyBmZW5jZXMgYXJlIGluc3RhbGxlZCwgZXZlbiBiZWZvcmUgZG1hX3Jl c3ZfdW5sb2NrKCkgaXMgY2FsbGVkLgo+Pj4+PiArICoKPj4+Pj4gKyAqICogVGhlIG9ubHkgZXhj ZXB0aW9uIGFyZSBmYXN0IHBhdGhzIGFuZCBvcHBvcnR1bmlzdGljIHNpZ25hbGxpbmcgY29kZSwg d2hpY2gKPj4+Pj4gKyAqICAgY2FsbHMgZG1hX2ZlbmNlX3NpZ25hbCgpIHB1cmVseSBhcyBhbiBv cHRpbWl6YXRpb24sIGJ1dCBpcyBub3QgcmVxdWlyZWQgdG8KPj4+Pj4gKyAqICAgZ3VhcmFudGVl IGNvbXBsZXRpb24gb2YgYSAmZG1hX2ZlbmNlLiBUaGUgdXN1YWwgZXhhbXBsZSBpcyBhIHdhaXQg SU9DVEwKPj4+Pj4gKyAqICAgd2hpY2ggY2FsbHMgZG1hX2ZlbmNlX3NpZ25hbCgpLCB3aGlsZSB0 aGUgbWFuZGF0b3J5IGNvbXBsZXRpb24gcGF0aCBnb2VzCj4+Pj4+ICsgKiAgIHRocm91Z2ggYSBo YXJkd2FyZSBpbnRlcnJ1cHQgYW5kIHBvc3NpYmxlIGpvYiBjb21wbGV0aW9uIHdvcmtlci4KPj4+ Pj4gKyAqCj4+Pj4+ICsgKiAqIFRvIGFpZCBjb21wb3NhYmlsaXR5IG9mIGNvZGUsIHRoZSBhbm5v dGF0aW9ucyBjYW4gYmUgZnJlZWx5IG5lc3RlZCwgYXMgbG9uZwo+Pj4+PiArICogICBhcyB0aGUg b3ZlcmFsbCBsb2NraW5nIGhpZXJhcmNoeSBpcyBjb25zaXN0ZW50LiBUaGUgYW5ub3RhdGlvbnMg YWxzbyB3b3JrCj4+Pj4+ICsgKiAgIGJvdGggaW4gaW50ZXJydXB0IGFuZCBwcm9jZXNzIGNvbnRl eHQuIER1ZSB0byBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoaXMKPj4+Pj4gKyAqICAgcmVxdWly ZXMgdGhhdCBjYWxsZXJzIHBhc3MgYW4gb3BhcXVlIGNvb2tpZSBmcm9tCj4+Pj4+ICsgKiAgIGRt YV9mZW5jZV9iZWdpbl9zaWduYWxsaW5nKCkgdG8gZG1hX2ZlbmNlX2VuZF9zaWduYWxsaW5nKCku Cj4+Pj4+ICsgKgo+Pj4+PiArICogKiBWYWxpZGF0aW9uIGFnYWluc3QgdGhlIGNyb3NzIGRyaXZl ciBjb250cmFjdCBpcyBpbXBsZW1lbnRlZCBieSBwcmltaW5nCj4+Pj4+ICsgKiAgIGxvY2tkZXAg d2l0aCB0aGUgcmVsZXZhbnQgaGllcmFyY2h5IGF0IGJvb3QtdXAuIFRoaXMgbWVhbnMgZXZlbiBq dXN0Cj4+Pj4+ICsgKiAgIHRlc3Rpbmcgd2l0aCBhIHNpbmdsZSBkZXZpY2UgaXMgZW5vdWdoIHRv IHZhbGlkYXRlIGEgZHJpdmVyLCBhdCBsZWFzdCBhcwo+Pj4+PiArICogICBmYXIgYXMgZGVhZGxv Y2tzIHdpdGggZG1hX2ZlbmNlX3dhaXQoKSBhZ2FpbnN0IGRtYV9mZW5jZV9zaWduYWwoKSBhcmUK Pj4+Pj4gKyAqICAgY29uY2VybmVkLgo+Pj4+PiArICovCj4+Pj4+ICsjaWZkZWYgQ09ORklHX0xP Q0tERVAKPj4+Pj4gK3N0cnVjdCBsb2NrZGVwX21hcCAgIGRtYV9mZW5jZV9sb2NrZGVwX21hcCA9 IHsKPj4+Pj4gKyAgICAgLm5hbWUgPSAiZG1hX2ZlbmNlX21hcCIKPj4+Pj4gK307Cj4+Pj4KPj4+ PiBNYXliZSBhIHN0dXBpZCBxdWVzdGlvbiBiZWNhdXNlIHRoaXMgaXMgZGVmaW5pdGVseSBjb21w bGljYXRlZCwgYnV0Li4gSWYKPj4+PiB5b3UgaGF2ZSBhIHNpbmdsZS9zdGF0aWMvZ2xvYmFsIGxv Y2tkZXAgbWFwLCBkb2Vzbid0IHRoaXMgbWVhbiBfYWxsXwo+Pj4+IGxvY2tzLCBmcm9tIF9hbGxf IGRyaXZlcnMgaGFwcGVuaW5nIHRvIHVzZSBkbWEtZmVuY2VzIHdpbGwgZ2V0IHJlY29yZGVkCj4+ Pj4gaW4gaXQuIFdpbGwgdGhpcyB3b3JrIGFuZCBub3QgY2F1c2UgZmFsc2UgcG9zaXRpdmVzPwo+ Pj4+Cj4+Pj4gU291bmRzIGxpa2UgaXQgY291bGQgY3JlYXRlIGEgY29tbW9uIGxpbmsgYmV0d2Vl biB0d28gY29tcGxldGVseQo+Pj4+IHVuY29ubmVjdGVkIHVzYWdlcy4gQmVjYXVzZSBiZWxvdyB5 b3UgZG8gYWRkIGFubm90YXRpb25zIHRvIGdlbmVyaWMKPj4+PiBkbWFfZmVuY2Vfc2lnbmFsIGFu ZCBkbWFfZmVuY2Vfd2FpdC4KPj4+Cj4+PiBUaGlzIGlzIGZ1bGx5IGludGVudGlvbmFsLiBkbWEt ZmVuY2UgaXMgYSBjcm9zcy1kcml2ZXIgaW50ZXJmYWNlLCBpZgo+Pj4gZXZlcnkgZHJpdmVyIGlu dmVudHMgaXRzIG93biBydWxlcyBhYm91dCBob3cgdGhpcyBzaG91bGQgd29yayB3ZSBoYXZlCj4+ PiBhbiB1bm1haW50YWluYWJsZSBhbmQgdW5yZXZpZXdhYmxlIG1lc3MuCj4+Pgo+Pj4gSSd2ZSB0 eXBlZCB1cCB0aGUgZnVsbCBsZW5ndGggcmFudCBhbHJlYWR5IGhlcmU6Cj4+Pgo+Pj4gaHR0cHM6 Ly9sb3JlLmtlcm5lbC5vcmcvZHJpLWRldmVsL0NBS01LN3VHbkZoYnB1dXJSc25aNGR2UlY5Z1Ff My1ybVNKYW9xU0ZZPStLdmVwel9DQUBtYWlsLmdtYWlsLmNvbS8KPj4KPj4gQnV0ICJwZXJmZWN0 IHN0b3JtIiBvZjoKPj4KPj4gICArIGdsb2JhbCBmZW5jZSBsb2NrbWFwCj4+ICAgKyBtbXUgbm90 aWZpZXJzCj4+ICAgKyBmcyByZWNsYWltCj4+ICAgKyBkZWZhdWx0IGFubm90YXRpb25zIGluIGRt YV9mZW5jZV9zaWduYWwgLyBkbWFfZmVuY2Vfd2FpdAo+Pgo+PiBFcXVhbHMgdG8gYW55dGhpbmcg ZXZlciB1c2luZyBkbWFfZmVuY2Ugd2lsbCBiZSBpbiBpbXBvc3NpYmxlIGNoYWlucyB3aXRoIHJh bmRvbSBvdGhlciBkcml2ZXJzLCBldmVuIGlmIG5laXRoZXIgZHJpdmVyIGhhcyBjb2RlIHRvIGV4 cG9ydC9zaGFyZSB0aGF0IGZlbmNlLgo+Pgo+PiBFeGFtcGxlIGZyb20gdGhlIENJIHJ1bjoKPj4K Pj4gICBbMjUuOTE4Nzg4XSBDaGFpbiBleGlzdHMgb2Y6Cj4+ICAgIGZzX3JlY2xhaW0gLS0+IG1t dV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0IC0tPiBkbWFfZmVuY2VfbWFwCj4+ICAg WzI1LjkxODc5NF0gIFBvc3NpYmxlIHVuc2FmZSBsb2NraW5nIHNjZW5hcmlvOgo+PiAgIFsyNS45 MTg3OTddICAgICAgICBDUFUwICAgICAgICAgICAgICAgICAgICBDUFUxCj4+ICAgWzI1LjkxODc5 OV0gICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS0KPj4gICBbMjUuOTE4ODAxXSAg IGxvY2soZG1hX2ZlbmNlX21hcCk7Cj4+ICAgWzI1LjkxODgwM10gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvY2sobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpOwo+ PiAgIFsyNS45MTg4MDddICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrKGRtYV9m ZW5jZV9tYXApOwo+PiAgIFsyNS45MTg4MDldICAgbG9jayhmc19yZWNsYWltKTsKPj4KPj4gV2hh dCBhYm91dCBhIGRtYV9mZW5jZV9leHBvcnQgaGVscGVyIHdoaWNoIHdvdWxkICJhcm0iIHRoZSBh bm5vdGF0aW9ucz8gSXQgd291bGQgYmUgY2FsbGVkIGFzIHNvb24gYXMgdGhlIGZlbmNlIGlzIGV4 cG9ydGVkLiBNYXliZSB3aGVuIGFkZGVkIHRvIGRtYV9yZXN2LCBvciBleHBvcnRlZCB2aWEgc3lu Y19maWxlLCBldGMuIEJlZm9yZSB0aGF0IHBvaW50IGJlZ2luL2VuZF9zaWduYWxpbmcgYW5kIHNv IHdvdWxkIGJlIG5vLW9wcy4KPiAKPiBSdW4gQ0kgd2l0aG91dCB0aGUgaTkxNSBhbm5vdGF0aW9u IHBhdGNoLCBub3RoaW5nIGJyZWFrcy4KCkkgdGhpbmsgc29tZSBwYXJ0cyBvZiBpOTE1IHdvdWxk IHN0aWxsIGJyZWFrIHdpdGggbXkgaWRlYSB0byBvbmx5IGFwcGx5IGFubm90YXRpb25zIG9uIGV4 cG9ydGVkIGZlbmNlcy4gV2hhdCBkbyB5b3UgZGlzbGlrZSBhYm91dCB0aGF0IGlkZWE/IEkgdGhv dWdodCB0aGUgcG9pbnQgaXMgdG8gZW5mb3JjZSBydWxlcyBmb3IgX2V4cG9ydGVkXyBmZW5jZXMu CgpIb3cgeW91IGhhdmUgYW5ub3RhdGVkIGRtYV9mZW5jZV93b3JrIHlvdSBjYW4ndCBzYXksIG1h eWJlIGl0IGlzIGV4cG9ydGVkIG1heWJlIGl0IGlzbid0LiBJIHRoaW5rIGl0IGlzIGJ0dywgc28g c3BsYXRzIHdvdWxkIHN0aWxsIGJlIHRoZXJlLCBidXQgSSBhbSBub3Qgc3VyZSBpdCBpcyBjb25j ZXB0dWFsbHkgY29ycmVjdC4KCkF0IGxlYXN0IG15IHVuZGVyc3RhbmRpbmcgaXMgR0ZQX0tFUk5F TCBhbGxvY2F0aW9ucyBhcmUgb25seSBkaXNhbGxvd2VkIGJ5IHRoZSB2aXJ0dWUgb2YgdGhlIGds b2JhbCBkbWEtZmVuY2UgY29udHJhY3QuIElmIHlvdSB3YW50IHRvIGVuZm9yY2UgdGhleSBhcmUg bmV2ZXIgdXNlZCBmb3IgYW55dGhpbmcgYnV0IGV4cG9ydGluZywgdGhlbiB0aGF0IHdvdWxkIGJl IGEgYml0IGhhcnNoLCBubz8KCkFub3RoZXIgZXhhbXBsZSBmcm9tIHRoZSBDSSBydW46CgogWzI2 LjU4NTM1N10gICAgICAgIENQVTAgICAgICAgICAgICAgICAgICAgIENQVTEKIFsyNi41ODUzNTld ICAgICAgICAtLS0tICAgICAgICAgICAgICAgICAgICAtLS0tCiBbMjYuNTg1MzYwXSAgIGxvY2so ZG1hX2ZlbmNlX21hcCk7CiBbMjYuNTg1MzYyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG9jayhtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCk7CiBbMjYuNTg1MzY1 XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jayhkbWFfZmVuY2VfbWFwKTsKIFsy Ni41ODUzNjddICAgbG9jayhpOTE1X2dlbV9vYmplY3RfaW50ZXJuYWwvMSk7CiBbMjYuNTg1MzY5 XSAKICoqKiBERUFETE9DSyAqKioKCkxldHMgc2F5IHNvbWVvbmUgc3VibWl0dGVkIGFuIGV4ZWNi dWYgdXNpbmcgdXNlcnB0ciBhcyBhIGJhdGNoIGFuZCB0aGVuIHVubWFwcGVkIGl0IGltbWVkaWF0 ZWx5LiBUaGF0IHdvdWxkIGV4cGxhaW4gQ1BVMSBnZXR0aW5nIGludG8gdGhlIG1tdSBub3RpZmll ciBhbmQgd2FpdGluZyBvbiB0aGlzIGJhdGNoIHRvIHVuYmluZCB0aGUgb2JqZWN0LgoKTWVhbndo aWxlIENQVTAgaXMgdGhlIGFzeW5jIGNvbW1hbmQgcGFyc2VyIGZvciB0aGlzIHJlcXVlc3QgdHJ5 aW5nIHRvIGxvY2sgdGhlIHNoYWRvdyBiYXRjaCBidWZmZXIuIEJlY2F1c2UgaXQgdXNlcyB0aGUg ZG1hX2ZlbmNlX3dvcmsgdGhpcyBpcyBiZXR3ZWVuIHRoZSBiZWdpbi9lbmQgc2lnbmFsbGluZyBt YXJrZXJzLgoKSXQgY2FuIGJlIHRoZSBzYW1lIGRtYS1mZW5jZSBJIHRoaW5rLCBzaW5jZSB3ZSBp bnN0YWxsIHRoZSBhc3luYyBwYXJzZXIgZmVuY2Ugb24gdGhlIHJlYWwgYmF0Y2ggZG1hLXJlc3Ys IGJ1dCBkbWFfZmVuY2VfbWFwIGlzIG5vdCBhIHJlYWwgbG9jaywgc28gd2hhdCBpcyBhY3R1YWxs eSBwcmV2ZW50aW5nIHByb2dyZXNzIGluIHRoaXMgY2FzZT8KCkNQVTEgaXMgd2FpdGluZyBvbiBh IGZlbmNlLCBidXQgQ1BVMCBjYW4gb2J0YWluIHRoZSBsb2NrKGk5MTVfZ2VtX29iamVjdF9pbnRl cm5hbC8xKSwgcHJvY2VlZCB0byBwYXJzZSB0aGUgYmF0Y2gsIGFuZCBleGl0IHRoZSBzaWduYWxs aW5nIHNlY3Rpb24uIEF0IHdoaWNoIHBvaW50IENQVTEgaXMgc3RpbGwgYmxvY2tlZCwgd2FpdGlu ZyB1bnRpbCB0aGUgZXhlY2J1ZiBmaW5pc2hlcyBhbmQgdGhlbiBtbXUgbm90aWZpZXIgY2FuIGZp bmlzaCBhbmQgaW52YWxpZGF0ZSB0aGUgcGFnZXMuCgpNYXliZSBJIGFtIG1pc3Npbmcgc29tZXRo aW5nIGJ1dCBJIGRvbid0IHNlZSBob3cgdGhpcyBvbmUgaXMgcmVhbC4KCj4gU28gd2UgY2FuIGdy YWR1YWxseSBmaXggdXAgZXhpc3RpbmcgY29kZSB0aGF0IGRvZXNuJ3QgcXVpdGUgZ2V0IGl0Cj4g cmlnaHQgYW5kIG1vdmUgb24uCj4KPj4+Pj4gKwo+Pj4+PiArLyoqCj4+Pj4+ICsgKiBkbWFfZmVu Y2VfYmVnaW5fc2lnbmFsbGluZyAtIGJlZ2luIGEgY3JpdGljYWwgRE1BIGZlbmNlIHNpZ25hbGxp bmcgc2VjdGlvbgo+Pj4+PiArICoKPj4+Pj4gKyAqIERyaXZlcnMgc2hvdWxkIHVzZSB0aGlzIHRv IGFubm90YXRlIHRoZSBiZWdpbm5pbmcgb2YgYW55IGNvZGUgc2VjdGlvbgo+Pj4+PiArICogcmVx dWlyZWQgdG8gZXZlbnR1YWxseSBjb21wbGV0ZSAmZG1hX2ZlbmNlIGJ5IGNhbGxpbmcgZG1hX2Zl bmNlX3NpZ25hbCgpLgo+Pj4+PiArICoKPj4+Pj4gKyAqIFRoZSBlbmQgb2YgdGhlc2UgY3JpdGlj YWwgc2VjdGlvbnMgYXJlIGFubm90YXRlZCB3aXRoCj4+Pj4+ICsgKiBkbWFfZmVuY2VfZW5kX3Np Z25hbGxpbmcoKS4KPj4+Pj4gKyAqCj4+Pj4+ICsgKiBSZXR1cm5zOgo+Pj4+PiArICoKPj4+Pj4g KyAqIE9wYXF1ZSBjb29raWUgbmVlZGVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggbmVl ZHMgdG8gYmUgcGFzc2VkIHRvCj4+Pj4+ICsgKiBkbWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoKS4K Pj4+Pj4gKyAqLwo+Pj4+PiArYm9vbCBkbWFfZmVuY2VfYmVnaW5fc2lnbmFsbGluZyh2b2lkKQo+ Pj4+PiArewo+Pj4+PiArICAgICAvKiBleHBsaWNpdGx5IG5lc3RpbmcgLi4uICovCj4+Pj4+ICsg ICAgIGlmIChsb2NrX2lzX2hlbGRfdHlwZSgmZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAxKSkKPj4+ Pj4gKyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4+Pj4gKwo+Pj4+PiArICAgICAvKiByZWx5 IG9uIG1pZ2h0X3NsZWVwIGNoZWNrIGZvciBzb2Z0L2hhcmRpcnEgbG9ja3MgKi8KPj4+Pj4gKyAg ICAgaWYgKGluX2F0b21pYygpKQo+Pj4+PiArICAgICAgICAgICAgIHJldHVybiB0cnVlOwo+Pj4+ PiArCj4+Pj4+ICsgICAgIC8qIC4uLiBhbmQgbm9uLXJlY3Vyc2l2ZSByZWFkbG9jayAqLwo+Pj4+ PiArICAgICBsb2NrX2FjcXVpcmUoJmRtYV9mZW5jZV9sb2NrZGVwX21hcCwgMCwgMCwgMSwgMSwg TlVMTCwgX1JFVF9JUF8pOwo+Pj4+Cj4+Pj4gV291bGQgaXQgd29yayBpZiBzaWduYWxsaW5nIHBh dGggd291bGQgbWFyayBpdHNlbGYgYXMgYSB3cml0ZSBsb2NrPyBJIGFtCj4+Pj4gdGhpbmtpbmcg aXQgd291bGQgYmUgbmljZSB0byBzZWUgaW4gbG9ja2RlcCBzcGxhdHMgd2hhdCBhcmUgc2lnbmFs cyBhbmQKPj4+PiB3aGF0IGFyZSB3YWl0cy4KPj4+Cj4+PiBZZWFoIGl0J2QgYmUgbmljZSB0byBo YXZlIGEgcmVhZCB2cyB3cml0ZSBuYW1lIGZvciB0aGUgbG9jay4gQnV0IHdlCj4+PiBhbHJlYWR5 IGhhdmUgdGhpcyBwcm9ibGVtIGZvciBlLmcuIGZsdXNoX3dvcmsoKSwgZnJvbSB3aGljaCBJJ3Zl Cj4+PiBzdG9sZW4gdGhpcyBpZGVhLiBTbyBpdCdzIG5vdCByZWFsbHkgbmV3LiBFc3NlbnRpYWxs eSBsb29rIGF0IHRoZQo+Pj4gYmFja3RyYWNlcyBsb2NrZGVwIGdpdmVzIHlvdSwgYW5kIHJlY29u c3RydWN0IHRoZSBkZWFkbG9jay4gSSdtIGhvcGluZwo+Pj4gdGhhdCBwZW9wbGUgd2lsbCBub3Rp Y2UgdGhlIHNwZWNpYWwgZnVuY3Rpb25zIG9uIHRoZSBiYWNrdHJhY2UsIGUuZy4KPj4+IGRtYV9m ZW5jZV9iZWdpbl9zaWduYWxsaW5nIHdpbGwgYmUgbGlzdGVkIGFzIG9mZmVuZGluZyBmdW5jdGlv bi9sb2NrCj4+PiBob2xkZXIsIGFuZCB0aGVuIHJlYWQgdGhlIGtlcm5lbGRvYy4KPj4+Cj4+Pj4g VGhlIHJlY3Vyc2l2ZSB1c2FnZSB3b3VsZG4ndCB3b3JrIHRoZW4gcmlnaHQ/IFdvdWxkIHdyaXRl IGFubm90YXRpb24gb24KPj4+PiB0aGUgd2FpdCBwYXRoIHdvcms/Cj4+Pgo+Pj4gV2FpdCBwYXRo IGlzIHdyaXRlIGFubm90YXRpb25zIGFscmVhZHksIGJ1dCB5ZWFoIGFubm90YXRpbmcgdGhlCj4+ PiBzaWduYWxsaW5nIHNpZGUgYXMgd3JpdGUgd291bGQgY2F1c2UgZW5kbGVzcyBhbW91bnRzIG9m IGFsc2UKPj4+IHBvc2l0aXZlcy4gQWxzbyBpdCBtYWtlcyBjb21wb3NhYmlsaXR5IG9mIHRoZXNl IGUuZy4gd2hhdCBJJ3ZlIGRvbmUgaW4KPj4+IGFtZGdwdSB3aXRoIGFubm90YXRpb25zIGluIHRk ciB3b3JrIGluIGRybS9zY2hlZHVsZXIsIGFubm90YXRpb25zIGluCj4+PiB0aGUgYW1kZ3B1IGdw dSByZXNldCBjb2RlIGFuZCB0aGVuIGFsc28gYW5ub3RhdGlvbnMgaW4gYXRvbWljIGNvZGUsCj4+ PiB3aGljaCBhbGwgbmVzdCB3aXRoaW4gZWFjaCBvdGhlciBpbiBzb21lIGNhbGwgY2hhaW5zLCBi dXQgbm90IG90aGVycy4KPj4+IERyb3BwaW5nIHRoZSByZWN1cnNpb24gd291bGQgYnJlYWsgdGhh dCBhbmQgbWFrZSBpdCByZWFsbHkgYXdrd2FyZCB0bwo+Pj4gYW5ub3RhdGUgc3VjaCBjYXNlcyBj b3JyZWN0bHkuCj4+Pgo+Pj4gQW5kIHRoZSByZWN1cnNpb24gb25seSB3b3JrcyBpZiBpdCdzIHJl YWQgbG9ja3MsIG90aGVyd2lzZSBsb2NrZGVwCj4+PiBjb21wbGFpbnMgaWYgeW91IGhhdmUgaW5j b25zaXN0ZW50IGFubm90YXRpb25zIG9uIHRoZSBzaWduYWxsaW5nIHNpZGUKPj4+ICh3aGljaCBh Z2FpbiB3b3VsZCBtYWtlIGl0IG1vcmUgb3IgbGVzcyBpbXBvc3NpYmxlIHRvIGFubm90YXRlIHRo ZQo+Pj4gYWJvdmUgY2FzZSBmdWxseSkuCj4+Cj4+IEhvdyBkbyBJIHNlZSBpbiBsb2NrZGVwIHNw bGF0cyBpZiBpdCB3YXMgYSByZWFkIG9yIHdyaXRlIHVzZXI/IFlvdXIgcGF0Y2ggYXBwZWFycyB0 byBoYXZlOgo+Pgo+PiBkbWFfZmVuY2Vfc2lnbmFsOgo+PiArICAgICAgIGxvY2tfYWNxdWlyZSgm ZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxMLCBfUkVUX0lQXyk7Cj4+Cj4+ IF9fZG1hX2ZlbmNlX21pZ2h0X3dhaXQ6Cj4+ICsgICAgICAgbG9ja19hY3F1aXJlKCZkbWFfZmVu Y2VfbG9ja2RlcF9tYXAsIDAsIDAsIDEsIDEsIE5VTEwsIF9USElTX0lQXyk7Cj4+Cj4+IFdoaWNo IGJvdGggc2VlbSBsaWtlIHJlYWQgbG9jay4gSSBkb24ndCBmdWxseSB1bmRlcnN0YW5kIHRoZSBs b2NrZGVwIEFQSSBzbyBJIG1pZ2h0IGJlIHdyb25nLCBub3Qgc3VyZS4gQnV0IG5laXRoZXIgSSBz ZWUgYSBkaWZmZXJlbmNlIGluIHNwbGF0cyB0ZWxsaW5nIG1lIHdoaWNoIHBhdGggaXMgd2hpY2gu Cj4gCj4gSSB0aGluayB5b3UgZ290IHRyaWNrZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLCB0aGlz IGlzbid0IHF1aXRlIHdoYXQncwo+IGdvaW5nIG9uLiBUaGVyZSdzIHR3byB0aGluZ3Mgd2hpY2gg bWFrZSB0aGUgYW5ub3RhdGlvbnMgc3BlY2lhbDoKPiAKPiAtIHdlIHdhbnQgYSByZWN1cnNpdmUg cmVhZCBsb2NrIG9uIHRoZSBzaWduYWxsaW5nIGNyaXRpY2FsIHNlY3Rpb24uCj4gVGhlIHByb2Js ZW0gaXMgdGhhdCBsb2NrZGVwIGRvZXNuJ3QgaW1wbGVtZW50IGZ1bGwgdmFsaWRhdGlvbiBmb3IK PiByZWN1cnNpdmUgcmVhZCBsb2Nrcywgb25seSBub24tcmVjdXJzaXZlIHJlYWQvd3JpdGUgbG9j a3MgZnVsbHkKPiB2YWxpZGF0ZWQuIFRoZXJlJ3Mgc29tZSBjaGVja3MgZm9yIHJlY3Vyc2l2ZSBy ZWFkIGxvY2tzLCBidXQgZXhhY3RseQo+IHRoZSBjaGVja3Mgd2UgbmVlZCB0byBjYXRjaCBjb21t b24gZG1hX2ZlbmNlX3dhaXQgZGVhZGxvY2tzIGFyZW4ndAo+IGRvbmUuIFRoYXQncyB3aHkgd2Ug bmVlZCB0byBpbXBsZW1lbnQgbWFudWFsIGxvY2sgcmVjdXJzaW9uIG9uIHRoZQo+IHJlYWRlciBz aWRlCj4gCj4gLSBub3cgb24gdGhlIHdyaXRlIHNpZGUgd2UgYWRkaXRpb25hbGx5IG5lZWQgdG8g aW1wbGVtZW50IGFuCj4gcmVhZDJ3cml0ZSB1cGdyYWRlLCBhbmQgYSB3cml0ZTJyZWFkIGRvd25n cmFkZS4gTG9ja2RlcCBkb2Vzbid0Cj4gaW1wbGVtZW50IHRoYXQsIHNvIGFnYWluIHdlIGhhdmUg dG8gaGFuZC1yb2xsIHRoaXMuCj4gCj4gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY29kZSBsaW5lLWJ5 LWxpbmU6Cj4gCj4gICAgICBib29sIHRtcDsKPiAKPiAgICAgIHRtcCA9IGxvY2tfaXNfaGVsZF90 eXBlKCZkbWFfZmVuY2VfbG9ja2RlcF9tYXAsIDEpOwo+IAo+IFdlIGNoZWNrIHdoZXRoZXIgc29t ZW9uZSBpcyBob2xkaW5nIHRoZSBub24tcmVjdXJzaXZlIHJlYWQgbG9jayBhbHJlYWR5Lgo+IAo+ ICAgICAgaWYgKHRtcCkKPiAgICAgICAgICBsb2NrX3JlbGVhc2UoJmRtYV9mZW5jZV9sb2NrZGVw X21hcCwgX1RISVNfSVBfKTsKPiAKPiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlIGRyb3AgdGhhdCBy ZWFkIGxvY2suCj4gCj4gICAgICBsb2NrX21hcF9hY3F1aXJlKCZkbWFfZmVuY2VfbG9ja2RlcF9t YXApOwo+IAo+IFRoZW4gd2UgZG8gdGhlIGFjdHVhbCBtaWdodF93YWl0IGFubm90YXRpb24sIHRo ZSBhYm92ZSB0YWtlcyB0aGUgZnVsbAo+IHdyaXRlIGxvY2sgLi4uCj4gCj4gICAgICBsb2NrX21h cF9yZWxlYXNlKCZkbWFfZmVuY2VfbG9ja2RlcF9tYXApOwo+IAo+IC4uLiBhbmQgbm93IHdlIHJl bGVhc2UgdGhlIHdyaXRlIGxvY2sgYWdhaW4uCj4gCj4gCj4gICAgICBpZiAodG1wKQo+ICAgICAg ICAgIGxvY2tfYWNxdWlyZSgmZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxM LCBfVEhJU19JUF8pOwo+IAo+IEZpbmFsbHkgd2UgbmVlZCB0byByZS1hY3F1aXJlIHRoZSByZWFk IGxvY2ssIGlmIHdlJ3ZlIGhlbGQgdGhhdCB3aGVuCj4gZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4g VGhpcyBhbm5vdGF0aW9uIG5hdHVyYWxseSBoYXMgdG8gZXhhY3RseSBtYXRjaAo+IHdoYXQgYmVn aW5fc2lnbmFsbGluZyB3b3VsZCBkbywgb3RoZXJ3aXNlIHRoZSBoYW5kLXJvbGxlZCBuZXN0aW5n Cj4gd291bGQgZmFsbCBhcGFydC4KPiAKPiBJIGhvcGUgdGhhdCBleHBsYWlucyB3aGF0J3MgZ29p bmcgb24gaGVyZSwgYW5kIGFzc3VyZXMgeW91IHRoYXQKPiBtaWdodF93YWl0KCkgaXMgaW5kZWVk IGEgd3JpdGUgbG9jayBhbm5vdGF0aW9uLCBidXQgd2l0aCBhIGJpZyBwaWxlIG9mCj4gY29tcGxp Y2F0aW9ucy4KCkkgYW0gY2VydGFpbmx5IGNvbmZ1c2VkIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gbG9ja19tYXBfYWNxdWlyZS9yZWxlYXNlIGFuZCBsb2NrX2FjcXVpcmUvcmVsZWFzZS4gV2hh dCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28/CgpSZWdhcmRzLAoKVHZydGtvCgoK CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, HK_RANDOM_FROM,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CD185C433E1 for ; Thu, 11 Jun 2020 14:29:32 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AC4AE2065C for ; Thu, 11 Jun 2020 14:29:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AC4AE2065C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8EFE46E921; Thu, 11 Jun 2020 14:29:29 +0000 (UTC) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4D7946E848; Thu, 11 Jun 2020 14:29:27 +0000 (UTC) IronPort-SDR: j1CIvtoZkOTlPMBmc3c3UgY00IrY5An0a2bXHvNmDNobi5RI885AUMd2U3HTAfdTAi0LMev3ub o41EE46tiNHg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:26 -0700 IronPort-SDR: /OQuU5Pl16dhKAQ8MPr5NunLJJHsE69DTemvtYctQTSHF8XNlyfq34qfyk7OXe4eIYIwNaYMfB 30OgsFGnvRFA== X-IronPort-AV: E=Sophos;i="5.73,499,1583222400"; d="scan'208";a="419117978" Received: from osides-mobl1.ger.corp.intel.com (HELO [10.214.204.82]) ([10.214.204.82]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 07:29:21 -0700 To: Daniel Vetter References: <20200604081224.863494-1-daniel.vetter@ffwll.ch> <20200604081224.863494-4-daniel.vetter@ffwll.ch> <19c6fe47-50ff-869e-d3f0-703b8165d577@linux.intel.com> From: Tvrtko Ursulin Organization: Intel Corporation UK Plc Message-ID: <28c18eed-6d03-aeb2-9e0f-39bae84dfb8c@linux.intel.com> Date: Thu, 11 Jun 2020 15:29:18 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 03/18] dma-fence: basic lockdep annotations X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-rdma , Intel Graphics Development , LKML , amd-gfx list , Chris Wilson , "moderated list:DMA BUFFER SHARING FRAMEWORK" , Thomas Hellstrom , DRI Development , Daniel Vetter , Mika Kuoppala , =?UTF-8?Q?Christian_K=c3=b6nig?= , "open list:DMA BUFFER SHARING FRAMEWORK" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Ck9uIDExLzA2LzIwMjAgMTI6MjksIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gT24gVGh1LCBKdW4g MTEsIDIwMjAgYXQgMTI6MzYgUE0gVHZydGtvIFVyc3VsaW4KPiA8dHZydGtvLnVyc3VsaW5AbGlu dXguaW50ZWwuY29tPiB3cm90ZToKPj4gT24gMTAvMDYvMjAyMCAxNjoxNywgRGFuaWVsIFZldHRl ciB3cm90ZToKPj4+IE9uIFdlZCwgSnVuIDEwLCAyMDIwIGF0IDQ6MjIgUE0gVHZydGtvIFVyc3Vs aW4KPj4+IDx0dnJ0a28udXJzdWxpbkBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+Pj4+Cj4+Pj4K Pj4+PiBPbiAwNC8wNi8yMDIwIDA5OjEyLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+Pj4+PiBEZXNp Z24gaXMgc2ltaWxhciB0byB0aGUgbG9ja2RlcCBhbm5vdGF0aW9ucyBmb3Igd29ya2VycywgYnV0 IHdpdGgKPj4+Pj4gc29tZSB0d2lzdHM6Cj4+Pj4+Cj4+Pj4+IC0gV2UgdXNlIGEgcmVhZC1sb2Nr IGZvciB0aGUgZXhlY3V0aW9uL3dvcmtlci9jb21wbGV0aW9uIHNpZGUsIHNvIHRoYXQKPj4+Pj4g ICAgICB0aGlzIGV4cGxpY2l0IGFubm90YXRpb24gY2FuIGJlIG1vcmUgbGliZXJhbGx5IHNwcmlu a2xlZCBhcm91bmQuCj4+Pj4+ICAgICAgV2l0aCByZWFkIGxvY2tzIGxvY2tkZXAgaXNuJ3QgZ29p bmcgdG8gY29tcGxhaW4gaWYgdGhlIHJlYWQtc2lkZQo+Pj4+PiAgICAgIGlzbid0IG5lc3RlZCB0 aGUgc2FtZSB3YXkgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMsIHNvIEFCQkEgZGVhZGxvY2tzCj4+ Pj4+ICAgICAgYXJlIG9rLiBXaGljaCB0aGV5IGFyZSwgc2luY2UgdGhpcyBpcyBhbiBhbm5vdGF0 aW9uIG9ubHkuCj4+Pj4+Cj4+Pj4+IC0gV2UncmUgdXNpbmcgbm9uLXJlY3Vyc2l2ZSBsb2NrZGVw IHJlYWQgbG9jayBtb2RlLCBzaW5jZSBpbiByZWN1cnNpdmUKPj4+Pj4gICAgICByZWFkIGxvY2sg bW9kZSBsb2NrZGVwIGRvZXMgbm90IGNhdGNoIHJlYWQgc2lkZSBoYXphcmRzLiBBbmQgd2UKPj4+ Pj4gICAgICBfdmVyeV8gbXVjaCB3YW50IHJlYWQgc2lkZSBoYXphcmRzIHRvIGJlIGNhdWdodC4g Rm9yIGZ1bGwgZGV0YWlscyBvZgo+Pj4+PiAgICAgIHRoaXMgbGltaXRhdGlvbiBzZWUKPj4+Pj4K Pj4+Pj4gICAgICBjb21taXQgZTkxNDk4NTg5NzQ2MDY1ZTNhZTk1ZDlhMDBiMDY4ZTUyNWVlYzM0 Zgo+Pj4+PiAgICAgIEF1dGhvcjogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3Jn Pgo+Pj4+PiAgICAgIERhdGU6ICAgV2VkIEF1ZyAyMyAxMzoxMzoxMSAyMDE3ICswMjAwCj4+Pj4+ Cj4+Pj4+ICAgICAgICAgIGxvY2tpbmcvbG9ja2RlcC9zZWxmdGVzdHM6IEFkZCBtaXhlZCByZWFk LXdyaXRlIEFCQkEgdGVzdHMKPj4+Pj4KPj4+Pj4gLSBUbyBhbGxvdyBuZXN0aW5nIG9mIHRoZSBy ZWFkLXNpZGUgZXhwbGljaXQgYW5ub3RhdGlvbnMgd2UgZXhwbGljaXRseQo+Pj4+PiAgICAgIGtl ZXAgdHJhY2sgb2YgdGhlIG5lc3RpbmcuIGxvY2tfaXNfaGVsZCgpIGFsbG93cyB1cyB0byBkbyB0 aGF0Lgo+Pj4+Pgo+Pj4+PiAtIFRoZSB3YWl0LXNpZGUgYW5ub3RhdGlvbiBpcyBhIHdyaXRlIGxv Y2ssIGFuZCBlbnRpcmVseSBkb25lIHdpdGhpbgo+Pj4+PiAgICAgIGRtYV9mZW5jZV93YWl0KCkg Zm9yIGV2ZXJ5b25lIGJ5IGRlZmF1bHQuCj4+Pj4+Cj4+Pj4+IC0gVG8gYmUgYWJsZSB0byBmcmVl bHkgYW5ub3RhdGUgaGVscGVyIGZ1bmN0aW9ucyBJIHdhbnQgdG8gbWFrZSBpdCBvawo+Pj4+PiAg ICAgIHRvIGNhbGwgZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nIGZyb20gc29mdC9oYXJk aXJxIGNvbnRleHQuCj4+Pj4+ICAgICAgRmlyc3QgYXR0ZW1wdCB3YXMgdXNpbmcgdGhlIGhhcmRp cnEgbG9ja2luZyBjb250ZXh0IGZvciB0aGUgd3JpdGUKPj4+Pj4gICAgICBzaWRlIGluIGxvY2tk ZXAsIGJ1dCB0aGlzIGZvcmNlcyBhbGwgbm9ybWFsIHNwaW5sb2NrcyBuZXN0ZWQgd2l0aGluCj4+ Pj4+ICAgICAgZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nIHRvIGJlIHNwaW5sb2Nrcy4g VGhhdCBib2xsb2Nrcy4KPj4+Pj4KPj4+Pj4gICAgICBUaGUgYXBwcm9hY2ggbm93IGlzIHRvIHNp bXBsZSBjaGVjayBpbl9hdG9taWMoKSwgYW5kIGZvciB0aGVzZSBjYXNlcwo+Pj4+PiAgICAgIGVu dGlyZWx5IHJlbHkgb24gdGhlIG1pZ2h0X3NsZWVwKCkgY2hlY2sgaW4gZG1hX2ZlbmNlX3dhaXQo KS4gVGhhdAo+Pj4+PiAgICAgIHdpbGwgY2F0Y2ggYW55IHdyb25nIG5lc3RpbmcgYWdhaW5zdCBz cGlubG9ja3MgZnJvbSBzb2Z0L2hhcmRpcnEKPj4+Pj4gICAgICBjb250ZXh0cy4KPj4+Pj4KPj4+ Pj4gVGhlIGlkZWEgaGVyZSBpcyB0aGF0IGV2ZXJ5IGNvZGUgcGF0aCB0aGF0J3MgY3JpdGljYWwg Zm9yIGV2ZW50dWFsbHkKPj4+Pj4gc2lnbmFsbGluZyBhIGRtYV9mZW5jZSBzaG91bGQgYmUgYW5u b3RhdGVkIHdpdGgKPj4+Pj4gZG1hX2ZlbmNlX2JlZ2luL2VuZF9zaWduYWxsaW5nLiBUaGUgYW5u b3RhdGlvbiBpZGVhbGx5IHN0YXJ0cyByaWdodAo+Pj4+PiBhZnRlciBhIGRtYV9mZW5jZSBpcyBw dWJsaXNoZWQgKGFkZGVkIHRvIGEgZG1hX3Jlc3YsIGV4cG9zZWQgYXMgYQo+Pj4+PiBzeW5jX2Zp bGUgZmQsIGF0dGFjaGVkIHRvIGEgZHJtX3N5bmNvYmogZmQsIG9yIGFueXRoaW5nIGVsc2UgdGhh dAo+Pj4+PiBtYWtlcyB0aGUgZG1hX2ZlbmNlIHZpc2libGUgdG8gb3RoZXIga2VybmVsIHRocmVh ZHMpLCB1cCB0byBhbmQKPj4+Pj4gaW5jbHVkaW5nIHRoZSBkbWFfZmVuY2Vfd2FpdCgpLiBFeGFt cGxlcyBhcmUgaXJxIGhhbmRsZXJzLCB0aGUKPj4+Pj4gc2NoZWR1bGVyIHJ0IHRocmVhZHMsIHRo ZSB0YWlsIG9mIGV4ZWNidWYgKGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nCj4+Pj4+IGZlbmNlcyBh cmUgdmlzaWJsZSksIGFueSB3b3JrZXJzIHRoYXQgZW5kIHVwIHNpZ25hbGxpbmcgZG1hX2ZlbmNl cyBhbmQKPj4+Pj4gcmVhbGx5IGFueXRoaW5nIGVsc2UuIE5vdCBhbm5vdGF0ZWQgc2hvdWxkIGJl IGNvZGUgcGF0aHMgdGhhdCBvbmx5Cj4+Pj4+IGNvbXBsZXRlIGZlbmNlcyBvcHBvcnR1bmlzdGlj YWxseSBhcyB0aGUgZ3B1IHByb2dyZXNzZXMsIGxpa2UgZS5nLgo+Pj4+PiBzaHJpbmtlci9ldmlj dGlvbiBjb2RlLgo+Pj4+Pgo+Pj4+PiBUaGUgbWFpbiBjbGFzcyBvZiBkZWFkbG9ja3MgdGhpcyBp cyBzdXBwb3NlZCB0byBjYXRjaCBhcmU6Cj4+Pj4+Cj4+Pj4+IFRocmVhZCBBOgo+Pj4+Pgo+Pj4+ PiAgICAgICAgIG11dGV4X2xvY2soQSk7Cj4+Pj4+ICAgICAgICAgbXV0ZXhfdW5sb2NrKEEpOwo+ Pj4+Pgo+Pj4+PiAgICAgICAgIGRtYV9mZW5jZV9zaWduYWwoKTsKPj4+Pj4KPj4+Pj4gVGhyZWFk IEI6Cj4+Pj4+Cj4+Pj4+ICAgICAgICAgbXV0ZXhfbG9jayhBKTsKPj4+Pj4gICAgICAgICBkbWFf ZmVuY2Vfd2FpdCgpOwo+Pj4+PiAgICAgICAgIG11dGV4X3VubG9jayhBKTsKPj4+Pj4KPj4+Pj4g VGhyZWFkIEIgaXMgYmxvY2tlZCBvbiBBIHNpZ25hbGxpbmcgdGhlIGZlbmNlLCBidXQgQSBuZXZl ciBnZXRzIGFyb3VuZAo+Pj4+PiB0byB0aGF0IGJlY2F1c2UgaXQgY2Fubm90IGFjcXVpcmUgdGhl IGxvY2sgQS4KPj4+Pj4KPj4+Pj4gTm90ZSB0aGF0IGRtYV9mZW5jZV93YWl0KCkgaXMgYWxsb3dl ZCB0byBiZSBuZXN0ZWQgd2l0aGluCj4+Pj4+IGRtYV9mZW5jZV9iZWdpbi9lbmRfc2lnbmFsbGlu ZyBzZWN0aW9ucy4gVG8gYWxsb3cgdGhpcyB0byBoYXBwZW4gdGhlCj4+Pj4+IHJlYWQgbG9jayBu ZWVkcyB0byBiZSB1cGdyYWRlZCB0byBhIHdyaXRlIGxvY2ssIHdoaWNoIG1lYW5zIHRoYXQgYW55 Cj4+Pj4+IG90aGVyIGxvY2sgaXMgYWNxdWlyZWQgYmV0d2VlbiB0aGUgZG1hX2ZlbmNlX2JlZ2lu X3NpZ25hbGxpbmcoKSBjYWxsIGFuZAo+Pj4+PiB0aGUgY2FsbCB0byBkbWFfZmVuY2Vfd2FpdCgp LCBhbmQgc3RpbGwgaGVsZCwgdGhpcyB3aWxsIHJlc3VsdCBpbiBhbgo+Pj4+PiBpbW1lZGlhdGUg bG9ja2RlcCBjb21wbGFpbnQuIFRoZSBvbmx5IG90aGVyIG9wdGlvbiB3b3VsZCBiZSB0byBub3QK Pj4+Pj4gYW5ub3RhdGUgc3VjaCBjYWxscywgZGVmZWF0aW5nIHRoZSBwb2ludC4gVGhlcmVmb3Jl IHRoZXNlIGFubm90YXRpb25zCj4+Pj4+IGNhbm5vdCBiZSBzcHJpbmtsZWQgb3ZlciB0aGUgY29k ZSBlbnRpcmVseSBtaW5kbGVzcyB0byBhdm9pZCBmYWxzZQo+Pj4+PiBwb3NpdGl2ZXMuCj4+Pj4+ Cj4+Pj4+IHYyOiBoYW5kbGUgc29mdC9oYXJkaXJxIGN0eCBiZXR0ZXIgYWdhaW5zdCB3cml0ZSBz aWRlIGFuZCBkb250IGZvcmdldAo+Pj4+PiBFWFBPUlRfU1lNQk9MLCBkcml2ZXJzIGNhbid0IHVz ZSB0aGlzIG90aGVyd2lzZS4KPj4+Pj4KPj4+Pj4gdjM6IEtlcm5lbGRvYy4KPj4+Pj4KPj4+Pj4g djQ6IFNvbWUgc3BlbGxpbmcgZml4ZXMgZnJvbSBNaWthCj4+Pj4+Cj4+Pj4+IENjOiBNaWthIEt1 b3BwYWxhIDxtaWthLmt1b3BwYWxhQGludGVsLmNvbT4KPj4+Pj4gQ2M6IFRob21hcyBIZWxsc3Ry b20gPHRob21hcy5oZWxsc3Ryb21AaW50ZWwuY29tPgo+Pj4+PiBDYzogbGludXgtbWVkaWFAdmdl ci5rZXJuZWwub3JnCj4+Pj4+IENjOiBsaW5hcm8tbW0tc2lnQGxpc3RzLmxpbmFyby5vcmcKPj4+ Pj4gQ2M6IGxpbnV4LXJkbWFAdmdlci5rZXJuZWwub3JnCj4+Pj4+IENjOiBhbWQtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+Pj4+PiBDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zwo+Pj4+PiBDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4+Pj4+ IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29t Pgo+Pj4+PiBDYzogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+ Pj4+PiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNv bT4KPj4+Pj4gLS0tCj4+Pj4+ICAgICBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZG1hLWJ1Zi5y c3QgfCAgMTIgKy0KPj4+Pj4gICAgIGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYyAgICAgICAg ICB8IDE2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+Pj4gICAgIGluY2x1ZGUvbGlu dXgvZG1hLWZlbmNlLmggICAgICAgICAgICB8ICAxMiArKwo+Pj4+PiAgICAgMyBmaWxlcyBjaGFu Z2VkLCAxODIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAt LWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdCBiL0RvY3VtZW50YXRp b24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdAo+Pj4+PiBpbmRleCA2M2RlYzc2ZDFkOGQuLjA1ZDg1 NjEzMTE0MCAxMDA2NDQKPj4+Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RtYS1i dWYucnN0Cj4+Pj4+ICsrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kbWEtYnVmLnJzdAo+ Pj4+PiBAQCAtMTAwLDExICsxMDAsMTEgQEAgQ1BVIEFjY2VzcyB0byBETUEgQnVmZmVyIE9iamVj dHMKPj4+Pj4gICAgIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4+ Pj4+ICAgICAgICA6ZG9jOiBjcHUgYWNjZXNzCj4+Pj4+Cj4+Pj4+IC1GZW5jZSBQb2xsIFN1cHBv cnQKPj4+Pj4gLX5+fn5+fn5+fn5+fn5+fn5+fgo+Pj4+PiArSW1wbGljaXQgRmVuY2UgUG9sbCBT dXBwb3J0Cj4+Pj4+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPj4+Pj4KPj4+Pj4gICAg IC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4+Pj4+IC0gICA6ZG9j OiBmZW5jZSBwb2xsaW5nCj4+Pj4+ICsgICA6ZG9jOiBpbXBsaWNpdCBmZW5jZSBwb2xsaW5nCj4+ Pj4+Cj4+Pj4+ICAgICBLZXJuZWwgRnVuY3Rpb25zIGFuZCBTdHJ1Y3R1cmVzIFJlZmVyZW5jZQo+ Pj4+PiAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPj4+Pj4g QEAgLTEzMyw2ICsxMzMsMTIgQEAgRE1BIEZlbmNlcwo+Pj4+PiAgICAgLi4ga2VybmVsLWRvYzo6 IGRyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYwo+Pj4+PiAgICAgICAgOmRvYzogRE1BIGZlbmNl cyBvdmVydmlldwo+Pj4+Pgo+Pj4+PiArRE1BIEZlbmNlIFNpZ25hbGxpbmcgQW5ub3RhdGlvbnMK Pj4+Pj4gK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cj4+Pj4+ICsKPj4+Pj4gKy4u IGtlcm5lbC1kb2M6OiBkcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLmMKPj4+Pj4gKyAgIDpkb2M6 IGZlbmNlIHNpZ25hbGxpbmcgYW5ub3RhdGlvbgo+Pj4+PiArCj4+Pj4+ICAgICBETUEgRmVuY2Vz IEZ1bmN0aW9ucyBSZWZlcmVuY2UKPj4+Pj4gICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fgo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5j IGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5jCj4+Pj4+IGluZGV4IDY1NmU5YWMyZDAyOC4u MDAwNWJjMDAyNTI5IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNl LmMKPj4+Pj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1mZW5jZS5jCj4+Pj4+IEBAIC0xMTAs NiArMTEwLDE2MCBAQCB1NjQgZG1hX2ZlbmNlX2NvbnRleHRfYWxsb2ModW5zaWduZWQgbnVtKQo+ Pj4+PiAgICAgfQo+Pj4+PiAgICAgRVhQT1JUX1NZTUJPTChkbWFfZmVuY2VfY29udGV4dF9hbGxv Yyk7Cj4+Pj4+Cj4+Pj4+ICsvKioKPj4+Pj4gKyAqIERPQzogZmVuY2Ugc2lnbmFsbGluZyBhbm5v dGF0aW9uCj4+Pj4+ICsgKgo+Pj4+PiArICogUHJvdmluZyBjb3JyZWN0bmVzcyBvZiBhbGwgdGhl IGtlcm5lbCBjb2RlIGFyb3VuZCAmZG1hX2ZlbmNlIHRocm91Z2ggY29kZQo+Pj4+PiArICogcmV2 aWV3IGFuZCB0ZXN0aW5nIGlzIHRyaWNreSBmb3IgYSBmZXcgcmVhc29uczoKPj4+Pj4gKyAqCj4+ Pj4+ICsgKiAqIEl0IGlzIGEgY3Jvc3MtZHJpdmVyIGNvbnRyYWN0LCBhbmQgdGhlcmVmb3JlIGFs bCBkcml2ZXJzIG11c3QgZm9sbG93IHRoZQo+Pj4+PiArICogICBzYW1lIHJ1bGVzIGZvciBsb2Nr IG5lc3Rpbmcgb3JkZXIsIGNhbGxpbmcgY29udGV4dHMgZm9yIHZhcmlvdXMgZnVuY3Rpb25zCj4+ Pj4+ICsgKiAgIGFuZCBhbnl0aGluZyBlbHNlIHNpZ25pZmljYW50IGZvciBpbi1rZXJuZWwgaW50 ZXJmYWNlcy4gQnV0IGl0IGlzIGFsc28KPj4+Pj4gKyAqICAgaW1wb3NzaWJsZSB0byB0ZXN0IGFs bCBkcml2ZXJzIGluIGEgc2luZ2xlIG1hY2hpbmUsIGhlbmNlIGJydXRlLWZvcmNlIE4gdnMuCj4+ Pj4+ICsgKiAgIE4gdGVzdGluZyBvZiBhbGwgY29tYmluYXRpb25zIGlzIGltcG9zc2libGUuIEV2 ZW4ganVzdCBsaW1pdGluZyB0byB0aGUKPj4+Pj4gKyAqICAgcG9zc2libGUgY29tYmluYXRpb25z IGlzIGluZmVhc2libGUuCj4+Pj4+ICsgKgo+Pj4+PiArICogKiBUaGVyZSBpcyBhbiBlbm9ybW91 cyBhbW91bnQgb2YgZHJpdmVyIGNvZGUgaW52b2x2ZWQuIEZvciByZW5kZXIgZHJpdmVycwo+Pj4+ PiArICogICB0aGVyZSdzIHRoZSB0YWlsIG9mIGNvbW1hbmQgc3VibWlzc2lvbiwgYWZ0ZXIgZmVu Y2VzIGFyZSBwdWJsaXNoZWQsCj4+Pj4+ICsgKiAgIHNjaGVkdWxlciBjb2RlLCBpbnRlcnJ1cHQg YW5kIHdvcmtlcnMgdG8gcHJvY2VzcyBqb2IgY29tcGxldGlvbiwKPj4+Pj4gKyAqICAgYW5kIHRp bWVvdXQsIGdwdSByZXNldCBhbmQgZ3B1IGhhbmcgcmVjb3ZlcnkgY29kZS4gUGx1cyBmb3IgaW50 ZWdyYXRpb24KPj4+Pj4gKyAqICAgd2l0aCBjb3JlIG1tIHdpdGggaGF2ZSAmbW11X25vdGlmaWVy LCByZXNwZWN0aXZlbHkgJm1tdV9pbnRlcnZhbF9ub3RpZmllciwKPj4+Pj4gKyAqICAgYW5kICZz aHJpbmtlci4gRm9yIG1vZGVzZXR0aW5nIGRyaXZlcnMgdGhlcmUncyB0aGUgY29tbWl0IHRhaWwg ZnVuY3Rpb25zCj4+Pj4+ICsgKiAgIGJldHdlZW4gd2hlbiBmZW5jZXMgZm9yIGFuIGF0b21pYyBt b2Rlc2V0IGFyZSBwdWJsaXNoZWQsIGFuZCB3aGVuIHRoZQo+Pj4+PiArICogICBjb3JyZXNwb25k aW5nIHZibGFuayBjb21wbGV0ZXMsIGluY2x1ZGluZyBhbnkgaW50ZXJydXB0IHByb2Nlc3Npbmcg YW5kCj4+Pj4+ICsgKiAgIHJlbGF0ZWQgd29ya2Vycy4gQXVkaXRpbmcgYWxsIHRoYXQgY29kZSwg YWNyb3NzIGFsbCBkcml2ZXJzLCBpcyBub3QKPj4+Pj4gKyAqICAgZmVhc2libGUuCj4+Pj4+ICsg Kgo+Pj4+PiArICogKiBEdWUgdG8gaG93IG1hbnkgb3RoZXIgc3Vic3lzdGVtcyBhcmUgaW52b2x2 ZWQgYW5kIHRoZSBsb2NraW5nIGhpZXJhcmNoaWVzCj4+Pj4+ICsgKiAgIHRoaXMgcHVsbHMgaW4g dGhlcmUgaXMgZXh0cmVtZWx5IHRoaW4gd2lnZ2xlLXJvb20gZm9yIGRyaXZlci1zcGVjaWZpYwo+ Pj4+PiArICogICBkaWZmZXJlbmNlcy4gJmRtYV9mZW5jZSBpbnRlcmFjdHMgd2l0aCBhbG1vc3Qg YWxsIG9mIHRoZSBjb3JlIG1lbW9yeQo+Pj4+PiArICogICBoYW5kbGluZyB0aHJvdWdoIHBhZ2Ug ZmF1bHQgaGFuZGxlcnMgdmlhICZkbWFfcmVzdiwgZG1hX3Jlc3ZfbG9jaygpIGFuZAo+Pj4+PiAr ICogICBkbWFfcmVzdl91bmxvY2soKS4gT24gdGhlIG90aGVyIHNpZGUgaXQgYWxzbyBpbnRlcmFj dHMgdGhyb3VnaCBhbGwKPj4+Pj4gKyAqICAgYWxsb2NhdGlvbiBzaXRlcyB0aHJvdWdoICZtbXVf bm90aWZpZXIgYW5kICZzaHJpbmtlci4KPj4+Pj4gKyAqCj4+Pj4+ICsgKiBGdXJ0aGVybW9yZSBs b2NrZGVwIGRvZXMgbm90IGhhbmRsZSBjcm9zcy1yZWxlYXNlIGRlcGVuZGVuY2llcywgd2hpY2gg bWVhbnMKPj4+Pj4gKyAqIGFueSBkZWFkbG9ja3MgYmV0d2VlbiBkbWFfZmVuY2Vfd2FpdCgpIGFu ZCBkbWFfZmVuY2Vfc2lnbmFsKCkgY2FuJ3QgYmUgY2F1Z2h0Cj4+Pj4+ICsgKiBhdCBydW50aW1l IHdpdGggc29tZSBxdWljayB0ZXN0aW5nLiBUaGUgc2ltcGxlc3QgZXhhbXBsZSBpcyBvbmUgdGhy ZWFkCj4+Pj4+ICsgKiB3YWl0aW5nIG9uIGEgJmRtYV9mZW5jZSB3aGlsZSBob2xkaW5nIGEgbG9j azo6Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICAgZG1hX2Zl bmNlX3dhaXQoQik7Cj4+Pj4+ICsgKiAgICAgdW5sb2NrKEEpOwo+Pj4+PiArICoKPj4+Pj4gKyAq IHdoaWxlIHRoZSBvdGhlciB0aHJlYWQgaXMgc3R1Y2sgdHJ5aW5nIHRvIGFjcXVpcmUgdGhlIHNh bWUgbG9jaywgd2hpY2gKPj4+Pj4gKyAqIHByZXZlbnRzIGl0IGZyb20gc2lnbmFsbGluZyB0aGUg ZmVuY2UgdGhlIHByZXZpb3VzIHRocmVhZCBpcyBzdHVjayB3YWl0aW5nCj4+Pj4+ICsgKiBvbjo6 Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICAgdW5sb2NrKEEp Owo+Pj4+PiArICogICAgIGRtYV9mZW5jZV9zaWduYWwoQik7Cj4+Pj4+ICsgKgo+Pj4+PiArICog QnkgbWFudWFsbHkgYW5ub3RhdGluZyBhbGwgY29kZSByZWxldmFudCB0byBzaWduYWxsaW5nIGEg JmRtYV9mZW5jZSB3ZSBjYW4KPj4+Pj4gKyAqIHRlYWNoIGxvY2tkZXAgYWJvdXQgdGhlc2UgZGVw ZW5kZW5jaWVzLCB3aGljaCBhbHNvIGhlbHBzIHdpdGggdGhlIHZhbGlkYXRpb24KPj4+Pj4gKyAq IGhlYWRhY2hlIHNpbmNlIG5vdyBsb2NrZGVwIGNhbiBjaGVjayBhbGwgdGhlIHJ1bGVzIGZvciB1 czo6Cj4+Pj4+ICsgKgo+Pj4+PiArICogICAgY29va2llID0gZG1hX2ZlbmNlX2JlZ2luX3NpZ25h bGxpbmcoKTsKPj4+Pj4gKyAqICAgIGxvY2soQSk7Cj4+Pj4+ICsgKiAgICB1bmxvY2soQSk7Cj4+ Pj4+ICsgKiAgICBkbWFfZmVuY2Vfc2lnbmFsKEIpOwo+Pj4+PiArICogICAgZG1hX2ZlbmNlX2Vu ZF9zaWduYWxsaW5nKGNvb2tpZSk7Cj4+Pj4+ICsgKgo+Pj4+PiArICogRm9yIHVzaW5nIGRtYV9m ZW5jZV9iZWdpbl9zaWduYWxsaW5nKCkgYW5kIGRtYV9mZW5jZV9lbmRfc2lnbmFsbGluZygpIHRv Cj4+Pj4+ICsgKiBhbm5vdGF0ZSBjcml0aWNhbCBzZWN0aW9ucyB0aGUgZm9sbG93aW5nIHJ1bGVz IG5lZWQgdG8gYmUgb2JzZXJ2ZWQ6Cj4+Pj4+ICsgKgo+Pj4+PiArICogKiBBbGwgY29kZSBuZWNl c3NhcnkgdG8gY29tcGxldGUgYSAmZG1hX2ZlbmNlIG11c3QgYmUgYW5ub3RhdGVkLCBmcm9tIHRo ZQo+Pj4+PiArICogICBwb2ludCB3aGVyZSBhIGZlbmNlIGlzIGFjY2Vzc2libGUgdG8gb3RoZXIg dGhyZWFkcywgdG8gdGhlIHBvaW50IHdoZXJlCj4+Pj4+ICsgKiAgIGRtYV9mZW5jZV9zaWduYWwo KSBpcyBjYWxsZWQuIFVuLWFubm90YXRlZCBjb2RlIGNhbiBjb250YWluIGRlYWRsb2NrIGlzc3Vl cywKPj4+Pj4gKyAqICAgYW5kIGR1ZSB0byB0aGUgdmVyeSBzdHJpY3QgcnVsZXMgYW5kIG1hbnkg Y29ybmVyIGNhc2VzIGl0IGlzIGluZmVhc2libGUgdG8KPj4+Pj4gKyAqICAgY2F0Y2ggdGhlc2Ug anVzdCB3aXRoIHJldmlldyBvciBub3JtYWwgc3RyZXNzIHRlc3RpbmcuCj4+Pj4+ICsgKgo+Pj4+ PiArICogKiAmc3RydWN0IGRtYV9yZXN2IGRlc2VydmVzIGEgc3BlY2lhbCBub3RlLCBzaW5jZSB0 aGUgcmVhZGVycyBhcmUgb25seQo+Pj4+PiArICogICBwcm90ZWN0ZWQgYnkgcmN1LiBUaGlzIG1l YW5zIHRoZSBzaWduYWxsaW5nIGNyaXRpY2FsIHNlY3Rpb24gc3RhcnRzIGFzIHNvb24KPj4+Pj4g KyAqICAgYXMgdGhlIG5ldyBmZW5jZXMgYXJlIGluc3RhbGxlZCwgZXZlbiBiZWZvcmUgZG1hX3Jl c3ZfdW5sb2NrKCkgaXMgY2FsbGVkLgo+Pj4+PiArICoKPj4+Pj4gKyAqICogVGhlIG9ubHkgZXhj ZXB0aW9uIGFyZSBmYXN0IHBhdGhzIGFuZCBvcHBvcnR1bmlzdGljIHNpZ25hbGxpbmcgY29kZSwg d2hpY2gKPj4+Pj4gKyAqICAgY2FsbHMgZG1hX2ZlbmNlX3NpZ25hbCgpIHB1cmVseSBhcyBhbiBv cHRpbWl6YXRpb24sIGJ1dCBpcyBub3QgcmVxdWlyZWQgdG8KPj4+Pj4gKyAqICAgZ3VhcmFudGVl IGNvbXBsZXRpb24gb2YgYSAmZG1hX2ZlbmNlLiBUaGUgdXN1YWwgZXhhbXBsZSBpcyBhIHdhaXQg SU9DVEwKPj4+Pj4gKyAqICAgd2hpY2ggY2FsbHMgZG1hX2ZlbmNlX3NpZ25hbCgpLCB3aGlsZSB0 aGUgbWFuZGF0b3J5IGNvbXBsZXRpb24gcGF0aCBnb2VzCj4+Pj4+ICsgKiAgIHRocm91Z2ggYSBo YXJkd2FyZSBpbnRlcnJ1cHQgYW5kIHBvc3NpYmxlIGpvYiBjb21wbGV0aW9uIHdvcmtlci4KPj4+ Pj4gKyAqCj4+Pj4+ICsgKiAqIFRvIGFpZCBjb21wb3NhYmlsaXR5IG9mIGNvZGUsIHRoZSBhbm5v dGF0aW9ucyBjYW4gYmUgZnJlZWx5IG5lc3RlZCwgYXMgbG9uZwo+Pj4+PiArICogICBhcyB0aGUg b3ZlcmFsbCBsb2NraW5nIGhpZXJhcmNoeSBpcyBjb25zaXN0ZW50LiBUaGUgYW5ub3RhdGlvbnMg YWxzbyB3b3JrCj4+Pj4+ICsgKiAgIGJvdGggaW4gaW50ZXJydXB0IGFuZCBwcm9jZXNzIGNvbnRl eHQuIER1ZSB0byBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRoaXMKPj4+Pj4gKyAqICAgcmVxdWly ZXMgdGhhdCBjYWxsZXJzIHBhc3MgYW4gb3BhcXVlIGNvb2tpZSBmcm9tCj4+Pj4+ICsgKiAgIGRt YV9mZW5jZV9iZWdpbl9zaWduYWxsaW5nKCkgdG8gZG1hX2ZlbmNlX2VuZF9zaWduYWxsaW5nKCku Cj4+Pj4+ICsgKgo+Pj4+PiArICogKiBWYWxpZGF0aW9uIGFnYWluc3QgdGhlIGNyb3NzIGRyaXZl ciBjb250cmFjdCBpcyBpbXBsZW1lbnRlZCBieSBwcmltaW5nCj4+Pj4+ICsgKiAgIGxvY2tkZXAg d2l0aCB0aGUgcmVsZXZhbnQgaGllcmFyY2h5IGF0IGJvb3QtdXAuIFRoaXMgbWVhbnMgZXZlbiBq dXN0Cj4+Pj4+ICsgKiAgIHRlc3Rpbmcgd2l0aCBhIHNpbmdsZSBkZXZpY2UgaXMgZW5vdWdoIHRv IHZhbGlkYXRlIGEgZHJpdmVyLCBhdCBsZWFzdCBhcwo+Pj4+PiArICogICBmYXIgYXMgZGVhZGxv Y2tzIHdpdGggZG1hX2ZlbmNlX3dhaXQoKSBhZ2FpbnN0IGRtYV9mZW5jZV9zaWduYWwoKSBhcmUK Pj4+Pj4gKyAqICAgY29uY2VybmVkLgo+Pj4+PiArICovCj4+Pj4+ICsjaWZkZWYgQ09ORklHX0xP Q0tERVAKPj4+Pj4gK3N0cnVjdCBsb2NrZGVwX21hcCAgIGRtYV9mZW5jZV9sb2NrZGVwX21hcCA9 IHsKPj4+Pj4gKyAgICAgLm5hbWUgPSAiZG1hX2ZlbmNlX21hcCIKPj4+Pj4gK307Cj4+Pj4KPj4+ PiBNYXliZSBhIHN0dXBpZCBxdWVzdGlvbiBiZWNhdXNlIHRoaXMgaXMgZGVmaW5pdGVseSBjb21w bGljYXRlZCwgYnV0Li4gSWYKPj4+PiB5b3UgaGF2ZSBhIHNpbmdsZS9zdGF0aWMvZ2xvYmFsIGxv Y2tkZXAgbWFwLCBkb2Vzbid0IHRoaXMgbWVhbiBfYWxsXwo+Pj4+IGxvY2tzLCBmcm9tIF9hbGxf IGRyaXZlcnMgaGFwcGVuaW5nIHRvIHVzZSBkbWEtZmVuY2VzIHdpbGwgZ2V0IHJlY29yZGVkCj4+ Pj4gaW4gaXQuIFdpbGwgdGhpcyB3b3JrIGFuZCBub3QgY2F1c2UgZmFsc2UgcG9zaXRpdmVzPwo+ Pj4+Cj4+Pj4gU291bmRzIGxpa2UgaXQgY291bGQgY3JlYXRlIGEgY29tbW9uIGxpbmsgYmV0d2Vl biB0d28gY29tcGxldGVseQo+Pj4+IHVuY29ubmVjdGVkIHVzYWdlcy4gQmVjYXVzZSBiZWxvdyB5 b3UgZG8gYWRkIGFubm90YXRpb25zIHRvIGdlbmVyaWMKPj4+PiBkbWFfZmVuY2Vfc2lnbmFsIGFu ZCBkbWFfZmVuY2Vfd2FpdC4KPj4+Cj4+PiBUaGlzIGlzIGZ1bGx5IGludGVudGlvbmFsLiBkbWEt ZmVuY2UgaXMgYSBjcm9zcy1kcml2ZXIgaW50ZXJmYWNlLCBpZgo+Pj4gZXZlcnkgZHJpdmVyIGlu dmVudHMgaXRzIG93biBydWxlcyBhYm91dCBob3cgdGhpcyBzaG91bGQgd29yayB3ZSBoYXZlCj4+ PiBhbiB1bm1haW50YWluYWJsZSBhbmQgdW5yZXZpZXdhYmxlIG1lc3MuCj4+Pgo+Pj4gSSd2ZSB0 eXBlZCB1cCB0aGUgZnVsbCBsZW5ndGggcmFudCBhbHJlYWR5IGhlcmU6Cj4+Pgo+Pj4gaHR0cHM6 Ly9sb3JlLmtlcm5lbC5vcmcvZHJpLWRldmVsL0NBS01LN3VHbkZoYnB1dXJSc25aNGR2UlY5Z1Ff My1ybVNKYW9xU0ZZPStLdmVwel9DQUBtYWlsLmdtYWlsLmNvbS8KPj4KPj4gQnV0ICJwZXJmZWN0 IHN0b3JtIiBvZjoKPj4KPj4gICArIGdsb2JhbCBmZW5jZSBsb2NrbWFwCj4+ICAgKyBtbXUgbm90 aWZpZXJzCj4+ICAgKyBmcyByZWNsYWltCj4+ICAgKyBkZWZhdWx0IGFubm90YXRpb25zIGluIGRt YV9mZW5jZV9zaWduYWwgLyBkbWFfZmVuY2Vfd2FpdAo+Pgo+PiBFcXVhbHMgdG8gYW55dGhpbmcg ZXZlciB1c2luZyBkbWFfZmVuY2Ugd2lsbCBiZSBpbiBpbXBvc3NpYmxlIGNoYWlucyB3aXRoIHJh bmRvbSBvdGhlciBkcml2ZXJzLCBldmVuIGlmIG5laXRoZXIgZHJpdmVyIGhhcyBjb2RlIHRvIGV4 cG9ydC9zaGFyZSB0aGF0IGZlbmNlLgo+Pgo+PiBFeGFtcGxlIGZyb20gdGhlIENJIHJ1bjoKPj4K Pj4gICBbMjUuOTE4Nzg4XSBDaGFpbiBleGlzdHMgb2Y6Cj4+ICAgIGZzX3JlY2xhaW0gLS0+IG1t dV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0IC0tPiBkbWFfZmVuY2VfbWFwCj4+ICAg WzI1LjkxODc5NF0gIFBvc3NpYmxlIHVuc2FmZSBsb2NraW5nIHNjZW5hcmlvOgo+PiAgIFsyNS45 MTg3OTddICAgICAgICBDUFUwICAgICAgICAgICAgICAgICAgICBDUFUxCj4+ICAgWzI1LjkxODc5 OV0gICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS0KPj4gICBbMjUuOTE4ODAxXSAg IGxvY2soZG1hX2ZlbmNlX21hcCk7Cj4+ICAgWzI1LjkxODgwM10gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvY2sobW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpOwo+ PiAgIFsyNS45MTg4MDddICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrKGRtYV9m ZW5jZV9tYXApOwo+PiAgIFsyNS45MTg4MDldICAgbG9jayhmc19yZWNsYWltKTsKPj4KPj4gV2hh dCBhYm91dCBhIGRtYV9mZW5jZV9leHBvcnQgaGVscGVyIHdoaWNoIHdvdWxkICJhcm0iIHRoZSBh bm5vdGF0aW9ucz8gSXQgd291bGQgYmUgY2FsbGVkIGFzIHNvb24gYXMgdGhlIGZlbmNlIGlzIGV4 cG9ydGVkLiBNYXliZSB3aGVuIGFkZGVkIHRvIGRtYV9yZXN2LCBvciBleHBvcnRlZCB2aWEgc3lu Y19maWxlLCBldGMuIEJlZm9yZSB0aGF0IHBvaW50IGJlZ2luL2VuZF9zaWduYWxpbmcgYW5kIHNv IHdvdWxkIGJlIG5vLW9wcy4KPiAKPiBSdW4gQ0kgd2l0aG91dCB0aGUgaTkxNSBhbm5vdGF0aW9u IHBhdGNoLCBub3RoaW5nIGJyZWFrcy4KCkkgdGhpbmsgc29tZSBwYXJ0cyBvZiBpOTE1IHdvdWxk IHN0aWxsIGJyZWFrIHdpdGggbXkgaWRlYSB0byBvbmx5IGFwcGx5IGFubm90YXRpb25zIG9uIGV4 cG9ydGVkIGZlbmNlcy4gV2hhdCBkbyB5b3UgZGlzbGlrZSBhYm91dCB0aGF0IGlkZWE/IEkgdGhv dWdodCB0aGUgcG9pbnQgaXMgdG8gZW5mb3JjZSBydWxlcyBmb3IgX2V4cG9ydGVkXyBmZW5jZXMu CgpIb3cgeW91IGhhdmUgYW5ub3RhdGVkIGRtYV9mZW5jZV93b3JrIHlvdSBjYW4ndCBzYXksIG1h eWJlIGl0IGlzIGV4cG9ydGVkIG1heWJlIGl0IGlzbid0LiBJIHRoaW5rIGl0IGlzIGJ0dywgc28g c3BsYXRzIHdvdWxkIHN0aWxsIGJlIHRoZXJlLCBidXQgSSBhbSBub3Qgc3VyZSBpdCBpcyBjb25j ZXB0dWFsbHkgY29ycmVjdC4KCkF0IGxlYXN0IG15IHVuZGVyc3RhbmRpbmcgaXMgR0ZQX0tFUk5F TCBhbGxvY2F0aW9ucyBhcmUgb25seSBkaXNhbGxvd2VkIGJ5IHRoZSB2aXJ0dWUgb2YgdGhlIGds b2JhbCBkbWEtZmVuY2UgY29udHJhY3QuIElmIHlvdSB3YW50IHRvIGVuZm9yY2UgdGhleSBhcmUg bmV2ZXIgdXNlZCBmb3IgYW55dGhpbmcgYnV0IGV4cG9ydGluZywgdGhlbiB0aGF0IHdvdWxkIGJl IGEgYml0IGhhcnNoLCBubz8KCkFub3RoZXIgZXhhbXBsZSBmcm9tIHRoZSBDSSBydW46CgogWzI2 LjU4NTM1N10gICAgICAgIENQVTAgICAgICAgICAgICAgICAgICAgIENQVTEKIFsyNi41ODUzNTld ICAgICAgICAtLS0tICAgICAgICAgICAgICAgICAgICAtLS0tCiBbMjYuNTg1MzYwXSAgIGxvY2so ZG1hX2ZlbmNlX21hcCk7CiBbMjYuNTg1MzYyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG9jayhtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCk7CiBbMjYuNTg1MzY1 XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jayhkbWFfZmVuY2VfbWFwKTsKIFsy Ni41ODUzNjddICAgbG9jayhpOTE1X2dlbV9vYmplY3RfaW50ZXJuYWwvMSk7CiBbMjYuNTg1MzY5 XSAKICoqKiBERUFETE9DSyAqKioKCkxldHMgc2F5IHNvbWVvbmUgc3VibWl0dGVkIGFuIGV4ZWNi dWYgdXNpbmcgdXNlcnB0ciBhcyBhIGJhdGNoIGFuZCB0aGVuIHVubWFwcGVkIGl0IGltbWVkaWF0 ZWx5LiBUaGF0IHdvdWxkIGV4cGxhaW4gQ1BVMSBnZXR0aW5nIGludG8gdGhlIG1tdSBub3RpZmll ciBhbmQgd2FpdGluZyBvbiB0aGlzIGJhdGNoIHRvIHVuYmluZCB0aGUgb2JqZWN0LgoKTWVhbndo aWxlIENQVTAgaXMgdGhlIGFzeW5jIGNvbW1hbmQgcGFyc2VyIGZvciB0aGlzIHJlcXVlc3QgdHJ5 aW5nIHRvIGxvY2sgdGhlIHNoYWRvdyBiYXRjaCBidWZmZXIuIEJlY2F1c2UgaXQgdXNlcyB0aGUg ZG1hX2ZlbmNlX3dvcmsgdGhpcyBpcyBiZXR3ZWVuIHRoZSBiZWdpbi9lbmQgc2lnbmFsbGluZyBt YXJrZXJzLgoKSXQgY2FuIGJlIHRoZSBzYW1lIGRtYS1mZW5jZSBJIHRoaW5rLCBzaW5jZSB3ZSBp bnN0YWxsIHRoZSBhc3luYyBwYXJzZXIgZmVuY2Ugb24gdGhlIHJlYWwgYmF0Y2ggZG1hLXJlc3Ys IGJ1dCBkbWFfZmVuY2VfbWFwIGlzIG5vdCBhIHJlYWwgbG9jaywgc28gd2hhdCBpcyBhY3R1YWxs eSBwcmV2ZW50aW5nIHByb2dyZXNzIGluIHRoaXMgY2FzZT8KCkNQVTEgaXMgd2FpdGluZyBvbiBh IGZlbmNlLCBidXQgQ1BVMCBjYW4gb2J0YWluIHRoZSBsb2NrKGk5MTVfZ2VtX29iamVjdF9pbnRl cm5hbC8xKSwgcHJvY2VlZCB0byBwYXJzZSB0aGUgYmF0Y2gsIGFuZCBleGl0IHRoZSBzaWduYWxs aW5nIHNlY3Rpb24uIEF0IHdoaWNoIHBvaW50IENQVTEgaXMgc3RpbGwgYmxvY2tlZCwgd2FpdGlu ZyB1bnRpbCB0aGUgZXhlY2J1ZiBmaW5pc2hlcyBhbmQgdGhlbiBtbXUgbm90aWZpZXIgY2FuIGZp bmlzaCBhbmQgaW52YWxpZGF0ZSB0aGUgcGFnZXMuCgpNYXliZSBJIGFtIG1pc3Npbmcgc29tZXRo aW5nIGJ1dCBJIGRvbid0IHNlZSBob3cgdGhpcyBvbmUgaXMgcmVhbC4KCj4gU28gd2UgY2FuIGdy YWR1YWxseSBmaXggdXAgZXhpc3RpbmcgY29kZSB0aGF0IGRvZXNuJ3QgcXVpdGUgZ2V0IGl0Cj4g cmlnaHQgYW5kIG1vdmUgb24uCj4KPj4+Pj4gKwo+Pj4+PiArLyoqCj4+Pj4+ICsgKiBkbWFfZmVu Y2VfYmVnaW5fc2lnbmFsbGluZyAtIGJlZ2luIGEgY3JpdGljYWwgRE1BIGZlbmNlIHNpZ25hbGxp bmcgc2VjdGlvbgo+Pj4+PiArICoKPj4+Pj4gKyAqIERyaXZlcnMgc2hvdWxkIHVzZSB0aGlzIHRv IGFubm90YXRlIHRoZSBiZWdpbm5pbmcgb2YgYW55IGNvZGUgc2VjdGlvbgo+Pj4+PiArICogcmVx dWlyZWQgdG8gZXZlbnR1YWxseSBjb21wbGV0ZSAmZG1hX2ZlbmNlIGJ5IGNhbGxpbmcgZG1hX2Zl bmNlX3NpZ25hbCgpLgo+Pj4+PiArICoKPj4+Pj4gKyAqIFRoZSBlbmQgb2YgdGhlc2UgY3JpdGlj YWwgc2VjdGlvbnMgYXJlIGFubm90YXRlZCB3aXRoCj4+Pj4+ICsgKiBkbWFfZmVuY2VfZW5kX3Np Z25hbGxpbmcoKS4KPj4+Pj4gKyAqCj4+Pj4+ICsgKiBSZXR1cm5zOgo+Pj4+PiArICoKPj4+Pj4g KyAqIE9wYXF1ZSBjb29raWUgbmVlZGVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggbmVl ZHMgdG8gYmUgcGFzc2VkIHRvCj4+Pj4+ICsgKiBkbWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoKS4K Pj4+Pj4gKyAqLwo+Pj4+PiArYm9vbCBkbWFfZmVuY2VfYmVnaW5fc2lnbmFsbGluZyh2b2lkKQo+ Pj4+PiArewo+Pj4+PiArICAgICAvKiBleHBsaWNpdGx5IG5lc3RpbmcgLi4uICovCj4+Pj4+ICsg ICAgIGlmIChsb2NrX2lzX2hlbGRfdHlwZSgmZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAxKSkKPj4+ Pj4gKyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4+Pj4gKwo+Pj4+PiArICAgICAvKiByZWx5 IG9uIG1pZ2h0X3NsZWVwIGNoZWNrIGZvciBzb2Z0L2hhcmRpcnEgbG9ja3MgKi8KPj4+Pj4gKyAg ICAgaWYgKGluX2F0b21pYygpKQo+Pj4+PiArICAgICAgICAgICAgIHJldHVybiB0cnVlOwo+Pj4+ PiArCj4+Pj4+ICsgICAgIC8qIC4uLiBhbmQgbm9uLXJlY3Vyc2l2ZSByZWFkbG9jayAqLwo+Pj4+ PiArICAgICBsb2NrX2FjcXVpcmUoJmRtYV9mZW5jZV9sb2NrZGVwX21hcCwgMCwgMCwgMSwgMSwg TlVMTCwgX1JFVF9JUF8pOwo+Pj4+Cj4+Pj4gV291bGQgaXQgd29yayBpZiBzaWduYWxsaW5nIHBh dGggd291bGQgbWFyayBpdHNlbGYgYXMgYSB3cml0ZSBsb2NrPyBJIGFtCj4+Pj4gdGhpbmtpbmcg aXQgd291bGQgYmUgbmljZSB0byBzZWUgaW4gbG9ja2RlcCBzcGxhdHMgd2hhdCBhcmUgc2lnbmFs cyBhbmQKPj4+PiB3aGF0IGFyZSB3YWl0cy4KPj4+Cj4+PiBZZWFoIGl0J2QgYmUgbmljZSB0byBo YXZlIGEgcmVhZCB2cyB3cml0ZSBuYW1lIGZvciB0aGUgbG9jay4gQnV0IHdlCj4+PiBhbHJlYWR5 IGhhdmUgdGhpcyBwcm9ibGVtIGZvciBlLmcuIGZsdXNoX3dvcmsoKSwgZnJvbSB3aGljaCBJJ3Zl Cj4+PiBzdG9sZW4gdGhpcyBpZGVhLiBTbyBpdCdzIG5vdCByZWFsbHkgbmV3LiBFc3NlbnRpYWxs eSBsb29rIGF0IHRoZQo+Pj4gYmFja3RyYWNlcyBsb2NrZGVwIGdpdmVzIHlvdSwgYW5kIHJlY29u c3RydWN0IHRoZSBkZWFkbG9jay4gSSdtIGhvcGluZwo+Pj4gdGhhdCBwZW9wbGUgd2lsbCBub3Rp Y2UgdGhlIHNwZWNpYWwgZnVuY3Rpb25zIG9uIHRoZSBiYWNrdHJhY2UsIGUuZy4KPj4+IGRtYV9m ZW5jZV9iZWdpbl9zaWduYWxsaW5nIHdpbGwgYmUgbGlzdGVkIGFzIG9mZmVuZGluZyBmdW5jdGlv bi9sb2NrCj4+PiBob2xkZXIsIGFuZCB0aGVuIHJlYWQgdGhlIGtlcm5lbGRvYy4KPj4+Cj4+Pj4g VGhlIHJlY3Vyc2l2ZSB1c2FnZSB3b3VsZG4ndCB3b3JrIHRoZW4gcmlnaHQ/IFdvdWxkIHdyaXRl IGFubm90YXRpb24gb24KPj4+PiB0aGUgd2FpdCBwYXRoIHdvcms/Cj4+Pgo+Pj4gV2FpdCBwYXRo IGlzIHdyaXRlIGFubm90YXRpb25zIGFscmVhZHksIGJ1dCB5ZWFoIGFubm90YXRpbmcgdGhlCj4+ PiBzaWduYWxsaW5nIHNpZGUgYXMgd3JpdGUgd291bGQgY2F1c2UgZW5kbGVzcyBhbW91bnRzIG9m IGFsc2UKPj4+IHBvc2l0aXZlcy4gQWxzbyBpdCBtYWtlcyBjb21wb3NhYmlsaXR5IG9mIHRoZXNl IGUuZy4gd2hhdCBJJ3ZlIGRvbmUgaW4KPj4+IGFtZGdwdSB3aXRoIGFubm90YXRpb25zIGluIHRk ciB3b3JrIGluIGRybS9zY2hlZHVsZXIsIGFubm90YXRpb25zIGluCj4+PiB0aGUgYW1kZ3B1IGdw dSByZXNldCBjb2RlIGFuZCB0aGVuIGFsc28gYW5ub3RhdGlvbnMgaW4gYXRvbWljIGNvZGUsCj4+ PiB3aGljaCBhbGwgbmVzdCB3aXRoaW4gZWFjaCBvdGhlciBpbiBzb21lIGNhbGwgY2hhaW5zLCBi dXQgbm90IG90aGVycy4KPj4+IERyb3BwaW5nIHRoZSByZWN1cnNpb24gd291bGQgYnJlYWsgdGhh dCBhbmQgbWFrZSBpdCByZWFsbHkgYXdrd2FyZCB0bwo+Pj4gYW5ub3RhdGUgc3VjaCBjYXNlcyBj b3JyZWN0bHkuCj4+Pgo+Pj4gQW5kIHRoZSByZWN1cnNpb24gb25seSB3b3JrcyBpZiBpdCdzIHJl YWQgbG9ja3MsIG90aGVyd2lzZSBsb2NrZGVwCj4+PiBjb21wbGFpbnMgaWYgeW91IGhhdmUgaW5j b25zaXN0ZW50IGFubm90YXRpb25zIG9uIHRoZSBzaWduYWxsaW5nIHNpZGUKPj4+ICh3aGljaCBh Z2FpbiB3b3VsZCBtYWtlIGl0IG1vcmUgb3IgbGVzcyBpbXBvc3NpYmxlIHRvIGFubm90YXRlIHRo ZQo+Pj4gYWJvdmUgY2FzZSBmdWxseSkuCj4+Cj4+IEhvdyBkbyBJIHNlZSBpbiBsb2NrZGVwIHNw bGF0cyBpZiBpdCB3YXMgYSByZWFkIG9yIHdyaXRlIHVzZXI/IFlvdXIgcGF0Y2ggYXBwZWFycyB0 byBoYXZlOgo+Pgo+PiBkbWFfZmVuY2Vfc2lnbmFsOgo+PiArICAgICAgIGxvY2tfYWNxdWlyZSgm ZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxMLCBfUkVUX0lQXyk7Cj4+Cj4+ IF9fZG1hX2ZlbmNlX21pZ2h0X3dhaXQ6Cj4+ICsgICAgICAgbG9ja19hY3F1aXJlKCZkbWFfZmVu Y2VfbG9ja2RlcF9tYXAsIDAsIDAsIDEsIDEsIE5VTEwsIF9USElTX0lQXyk7Cj4+Cj4+IFdoaWNo IGJvdGggc2VlbSBsaWtlIHJlYWQgbG9jay4gSSBkb24ndCBmdWxseSB1bmRlcnN0YW5kIHRoZSBs b2NrZGVwIEFQSSBzbyBJIG1pZ2h0IGJlIHdyb25nLCBub3Qgc3VyZS4gQnV0IG5laXRoZXIgSSBz ZWUgYSBkaWZmZXJlbmNlIGluIHNwbGF0cyB0ZWxsaW5nIG1lIHdoaWNoIHBhdGggaXMgd2hpY2gu Cj4gCj4gSSB0aGluayB5b3UgZ290IHRyaWNrZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLCB0aGlz IGlzbid0IHF1aXRlIHdoYXQncwo+IGdvaW5nIG9uLiBUaGVyZSdzIHR3byB0aGluZ3Mgd2hpY2gg bWFrZSB0aGUgYW5ub3RhdGlvbnMgc3BlY2lhbDoKPiAKPiAtIHdlIHdhbnQgYSByZWN1cnNpdmUg cmVhZCBsb2NrIG9uIHRoZSBzaWduYWxsaW5nIGNyaXRpY2FsIHNlY3Rpb24uCj4gVGhlIHByb2Js ZW0gaXMgdGhhdCBsb2NrZGVwIGRvZXNuJ3QgaW1wbGVtZW50IGZ1bGwgdmFsaWRhdGlvbiBmb3IK PiByZWN1cnNpdmUgcmVhZCBsb2Nrcywgb25seSBub24tcmVjdXJzaXZlIHJlYWQvd3JpdGUgbG9j a3MgZnVsbHkKPiB2YWxpZGF0ZWQuIFRoZXJlJ3Mgc29tZSBjaGVja3MgZm9yIHJlY3Vyc2l2ZSBy ZWFkIGxvY2tzLCBidXQgZXhhY3RseQo+IHRoZSBjaGVja3Mgd2UgbmVlZCB0byBjYXRjaCBjb21t b24gZG1hX2ZlbmNlX3dhaXQgZGVhZGxvY2tzIGFyZW4ndAo+IGRvbmUuIFRoYXQncyB3aHkgd2Ug bmVlZCB0byBpbXBsZW1lbnQgbWFudWFsIGxvY2sgcmVjdXJzaW9uIG9uIHRoZQo+IHJlYWRlciBz aWRlCj4gCj4gLSBub3cgb24gdGhlIHdyaXRlIHNpZGUgd2UgYWRkaXRpb25hbGx5IG5lZWQgdG8g aW1wbGVtZW50IGFuCj4gcmVhZDJ3cml0ZSB1cGdyYWRlLCBhbmQgYSB3cml0ZTJyZWFkIGRvd25n cmFkZS4gTG9ja2RlcCBkb2Vzbid0Cj4gaW1wbGVtZW50IHRoYXQsIHNvIGFnYWluIHdlIGhhdmUg dG8gaGFuZC1yb2xsIHRoaXMuCj4gCj4gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY29kZSBsaW5lLWJ5 LWxpbmU6Cj4gCj4gICAgICBib29sIHRtcDsKPiAKPiAgICAgIHRtcCA9IGxvY2tfaXNfaGVsZF90 eXBlKCZkbWFfZmVuY2VfbG9ja2RlcF9tYXAsIDEpOwo+IAo+IFdlIGNoZWNrIHdoZXRoZXIgc29t ZW9uZSBpcyBob2xkaW5nIHRoZSBub24tcmVjdXJzaXZlIHJlYWQgbG9jayBhbHJlYWR5Lgo+IAo+ ICAgICAgaWYgKHRtcCkKPiAgICAgICAgICBsb2NrX3JlbGVhc2UoJmRtYV9mZW5jZV9sb2NrZGVw X21hcCwgX1RISVNfSVBfKTsKPiAKPiBJZiB0aGF0J3MgdGhlIGNhc2UsIHdlIGRyb3AgdGhhdCBy ZWFkIGxvY2suCj4gCj4gICAgICBsb2NrX21hcF9hY3F1aXJlKCZkbWFfZmVuY2VfbG9ja2RlcF9t YXApOwo+IAo+IFRoZW4gd2UgZG8gdGhlIGFjdHVhbCBtaWdodF93YWl0IGFubm90YXRpb24sIHRo ZSBhYm92ZSB0YWtlcyB0aGUgZnVsbAo+IHdyaXRlIGxvY2sgLi4uCj4gCj4gICAgICBsb2NrX21h cF9yZWxlYXNlKCZkbWFfZmVuY2VfbG9ja2RlcF9tYXApOwo+IAo+IC4uLiBhbmQgbm93IHdlIHJl bGVhc2UgdGhlIHdyaXRlIGxvY2sgYWdhaW4uCj4gCj4gCj4gICAgICBpZiAodG1wKQo+ICAgICAg ICAgIGxvY2tfYWNxdWlyZSgmZG1hX2ZlbmNlX2xvY2tkZXBfbWFwLCAwLCAwLCAxLCAxLCBOVUxM LCBfVEhJU19JUF8pOwo+IAo+IEZpbmFsbHkgd2UgbmVlZCB0byByZS1hY3F1aXJlIHRoZSByZWFk IGxvY2ssIGlmIHdlJ3ZlIGhlbGQgdGhhdCB3aGVuCj4gZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4g VGhpcyBhbm5vdGF0aW9uIG5hdHVyYWxseSBoYXMgdG8gZXhhY3RseSBtYXRjaAo+IHdoYXQgYmVn aW5fc2lnbmFsbGluZyB3b3VsZCBkbywgb3RoZXJ3aXNlIHRoZSBoYW5kLXJvbGxlZCBuZXN0aW5n Cj4gd291bGQgZmFsbCBhcGFydC4KPiAKPiBJIGhvcGUgdGhhdCBleHBsYWlucyB3aGF0J3MgZ29p bmcgb24gaGVyZSwgYW5kIGFzc3VyZXMgeW91IHRoYXQKPiBtaWdodF93YWl0KCkgaXMgaW5kZWVk IGEgd3JpdGUgbG9jayBhbm5vdGF0aW9uLCBidXQgd2l0aCBhIGJpZyBwaWxlIG9mCj4gY29tcGxp Y2F0aW9ucy4KCkkgYW0gY2VydGFpbmx5IGNvbmZ1c2VkIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdl ZW4gbG9ja19tYXBfYWNxdWlyZS9yZWxlYXNlIGFuZCBsb2NrX2FjcXVpcmUvcmVsZWFzZS4gV2hh dCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28/CgpSZWdhcmRzLAoKVHZydGtvCgoK CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==