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=-3.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=no 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 4E4A7C43460 for ; Tue, 20 Apr 2021 16:20:10 +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 A9B53613C3 for ; Tue, 20 Apr 2021 16:20:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A9B53613C3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=jlekstrand.net 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 E43D86E857; Tue, 20 Apr 2021 16:20:08 +0000 (UTC) Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [IPv6:2a00:1450:4864:20::635]) by gabe.freedesktop.org (Postfix) with ESMTPS id 278FC6E857 for ; Tue, 20 Apr 2021 16:20:08 +0000 (UTC) Received: by mail-ej1-x635.google.com with SMTP id n2so59135799ejy.7 for ; Tue, 20 Apr 2021 09:20:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jlekstrand-net.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=MY9Ywk+yFyX6kULVp2XS4x3ieLy1VUl+MPJOR9TmAPU=; b=t9ZHR1ZgSZBt9ClYX80PwOcCwRcp1wscWDbcshcz4XHhNP3KoHsYRSNb08wlKVEXfs ht0Ov2kdWXgMz5bjSo39A+DO9PgQeKRLJNnTzjy348R4ZycsAN9+2gQCmYVgpc+RHGpg J6Chy/T90SgSmHMmtWrHb/nU6RnVBnI0dzPaVUUyBn/q8c8FCyfkkOl8yY09qQbMAJNv p2dTDGhMEJoX7S11Gipkt0vgSa/Y6dlQVHVddxpW2aY5IymgjKtBQhnkRLWAzoOONUHG v/xUvpvaXkSZYtNPkCCH384/e030Y2Xij8+bowU8W2GyR1jcJ9KtuPRWw3kU5Eo/2/tR EKNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=MY9Ywk+yFyX6kULVp2XS4x3ieLy1VUl+MPJOR9TmAPU=; b=jYnnuy51pjHEqTI70w5DkqXU6tE/JYJIVnRYKBG+N1S0j5BTtlyZN+JoekmWwv/W/Z ouvkBzsZVRAmy/GlIAnVIEFJ6BykVmLenBnoybEPSx06ZtPLr/VzDmsa8M5/8snYTdw0 My91MUk/VCg1Hm3J+0VvISgWg9IleVC4YeQifrlA3pnKfgRG0tj1YQ4nJ4tzteBHyaM4 eQKcCgSW7XqkMquXAKZiSEw3wGOEGuLk9siqUoaNE/j35zA+q9Oi7a69cQC1R4Gpu7IQ q+RbJIL6c+S8qdzVcMzCajfbzDkZ7eImGQuDQYfy6isS5I6WCCmHMIvjhrAdoQmOhOND uptQ== X-Gm-Message-State: AOAM530+f6ozgG6dJ7kR+Rxk5Tyk6oAXzIcpQT0nZ1//iUra77GkS0UW aJ8bnLrtur32GuWMud2v5y8afvt9MZ2qrzdJuQLsBw== X-Google-Smtp-Source: ABdhPJxBADnTz+vqFhLo2Ppaz6S9qapYNGmRRCmZhdLevHRbizORkwX8iB3WXLu86+f1/nR0cQTIMfDbS9053e7H7X8= X-Received: by 2002:a17:906:5fc2:: with SMTP id k2mr29131463ejv.354.1618935606444; Tue, 20 Apr 2021 09:20:06 -0700 (PDT) MIME-Version: 1.0 References: <926b18b2-2498-9fcb-8516-fa34510fb898@gmail.com> In-Reply-To: From: Jason Ekstrand Date: Tue, 20 Apr 2021 11:19:53 -0500 Message-ID: Subject: Re: [Mesa-dev] [RFC] Linux Graphics Next: Explicit fences everywhere and no BO fences - initial proposal To: =?UTF-8?Q?Christian_K=C3=B6nig?= 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: ML Mesa-dev , dri-devel , =?UTF-8?B?TWFyZWsgT2zFocOhaw==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" U29ycnkgZm9yIHRoZSBtZWdhLXJlcGx5IGJ1dCB0aW1lem9uZXMuLi4KCk9uIFR1ZSwgQXByIDIw LCAyMDIxIGF0IDY6NTkgQU0gQ2hyaXN0aWFuIEvDtm5pZwo8Y2tvZW5pZy5sZWljaHR6dW1lcmtl bkBnbWFpbC5jb20+IHdyb3RlOgo+Cj4gPiBZZWFoLiBJZiB3ZSBnbyB3aXRoIHVzZXJzcGFjZSBm ZW5jZXMsIHRoZW4gdXNlcnNwYWNlIGNhbiBoYW5nIGl0c2VsZi4gTm90Cj4gPiB0aGUga2VybmVs J3MgcHJvYmxlbS4KPgo+IFdlbGwsIHRoZSBwYXRoIG9mIGlubmVyIHBlYWNlIGJlZ2lucyB3aXRo IGZvdXIgd29yZHMuIOKAnE5vdCBteSBmdWNraW5nCj4gcHJvYmxlbS7igJ0KCvCfp5gKCj4gQnV0 IEknbSBub3QgdGhhdCBtdWNoIGNvbmNlcm5lZCBhYm91dCB0aGUga2VybmVsLCBidXQgcmF0aGVy IGFib3V0Cj4gaW1wb3J0YW50IHVzZXJzcGFjZSBwcm9jZXNzZXMgbGlrZSBYLCBXYXlsYW5kLCBT dXJmYWNlRmxpbmdlciBldGMuLi4KPgo+IEkgbWVhbiBhdHRhY2hpbmcgYSBwYWdlIHRvIGEgc3lu YyBvYmplY3QgYW5kIGFsbG93aW5nIHRvIHdhaXQvc2lnbmFsCj4gZnJvbSBib3RoIENQVSBhcyB3 ZWxsIGFzIEdQVSBzaWRlIGlzIG5vdCBzbyBtdWNoIG9mIGEgcHJvYmxlbS4KCll1cC4uLiBTb3J0 aW5nIG91dCB0aGVzZSBpc3N1ZXMgaXMgd2hhdCBtYWtlcyB0aGlzIGEgaGFyZCBwcm9ibGVtLgoK Cj4gPiBZb3UgaGF2ZSB0byBzb21laG93IGhhbmRsZSB0aGF0LCBlLmcuIHBlcmhhcHMgd2l0aCBj b25kaXRpb25hbAo+ID4gcmVuZGVyaW5nIGFuZCBqdXN0IHVzaW5nIHRoZSBvbGQgZnJhbWUgaW4g Y29tcG9zaXRpbmcgaWYgdGhlIG5ldyBvbmUKPiA+IGRvZXNuJ3Qgc2hvdyB1cCBpbiB0aW1lLgo+ Cj4gTmljZSBpZGVhLCBidXQgaG93IHdvdWxkIHlvdSBoYW5kbGUgdGhhdCBvbiB0aGUgT3BlbkdM L0dsYW1vci9WdWxrYW4gbGV2ZWwuCgoiSnVzdCBoYW5kbGUgaXQgd2l0aCBjb25kaXRpb25hbCBy ZW5kZXJpbmciIGlzIGEgcHJldHR5IHRyaXRlIGFuc3dlci4KSWYgd2UgaGF2ZSBtZW1vcnkgZmVu Y2VzLCB3ZSBjb3VsZCBleHBvc2UgYSBWdWxrYW4gZXh0ZW5zaW9uIHRvIGFsbG93CnRoZW0gdG8g YmUgcmVhZCBieSBjb25kaXRpb25hbCByZW5kZXJpbmcgb3IgYnkgYSBzaGFkZXIuICBIb3dldmVy LCBhcwpEYW5pZWwgaGFzIHBvaW50ZWQgb3V0IG11bHRpcGxlIHRpbWVzLCBjb21wb3NpdGlvbiBw aXBlbGluZXMgYXJlIGxvbmcKYW5kIGNvbXBsZXggYW5kIGNoZWFwIHRyaWNrcyBsaWtlIHRoYXQg YXJlbid0IHNvbWV0aGluZyB3ZSBjYW4gcmVseSBvbgpmb3Igc29sdmluZyB0aGUgcHJvYmxlbS4g IElmIHdlJ3JlIGdvaW5nIHRvIHNvbHZlIHRoZSBwcm9ibGVtLCB3ZSBuZWVkCnRvIG1ha2UgZHJp dmVyLWludGVybmFsIHN0dWZmIG5pY2Ugd2hpbGUgc3RpbGwgcHJvdmlkaW5nIHNvbWV0aGluZwp0 aGF0IGxvb2tzIHZlcnkgbXVjaCBsaWtlIGEgc3luY19maWxlIHdpdGggZmluaXRlIHRpbWUgc2Vt YW50aWNzIHRvCnRoZSBjb21wb3NpdGlvbiBwaXBlbGluZS4gIEhvdz8gIFRoYXQncyB0aGUgcXVl c3Rpb24uCgoKPiBSZWdhcmRzLAo+IENocmlzdGlhbi4KPgo+IEFtIDIwLjA0LjIxIHVtIDEzOjE2 IHNjaHJpZWIgRGFuaWVsIFZldHRlcjoKPiA+IE9uIFR1ZSwgQXByIDIwLCAyMDIxIGF0IDA3OjAz OjE5QU0gLTA0MDAsIE1hcmVrIE9sxaHDoWsgd3JvdGU6Cj4gPj4gRGFuaWVsLCBhcmUgeW91IHN1 Z2dlc3RpbmcgdGhhdCB3ZSBzaG91bGQgc2tpcCBhbnkgZGVhZGxvY2sgcHJldmVudGlvbiBpbgo+ ID4+IHRoZSBrZXJuZWwsIGFuZCBqdXN0IGxldCB1c2Vyc3BhY2Ugd2FpdCBmb3IgYW5kIHNpZ25h bCBhbnkgZmVuY2UgaXQgaGFzCj4gPj4gYWNjZXNzIHRvPwo+ID4gWWVhaC4gSWYgd2UgZ28gd2l0 aCB1c2Vyc3BhY2UgZmVuY2VzLCB0aGVuIHVzZXJzcGFjZSBjYW4gaGFuZyBpdHNlbGYuIE5vdAo+ ID4gdGhlIGtlcm5lbCdzIHByb2JsZW0uIFRoZSBvbmx5IGNyaXRlcmlhIGlzIHRoYXQgdGhlIGtl cm5lbCBpdHNlbGYgbXVzdAo+ID4gbmV2ZXIgcmVseSBvbiB0aGVzZSB1c2Vyc3BhY2UgZmVuY2Vz LCBleGNlcHQgZm9yIHN0dWZmIGxpa2UgaW1wbGVtZW50aW5nCj4gPiBvcHRpbWl6ZWQgY3B1IHdh aXRzLiBBbmQgaW4gdGhvc2Ugd2UgbXVzdCBhbHdheXMgZ3VhcmFudGVlIHRoYXQgdGhlCj4gPiB1 c2Vyc3BhY2UgcHJvY2VzcyByZW1haW5zIGludGVycnVwdGlibGUuCj4gPgo+ID4gSXQncyBhIGNv bXBsZXRlbHkgZGlmZmVyZW50IHdvcmxkIGZyb20gZG1hX2ZlbmNlIGJhc2VkIGtlcm5lbCBmZW5j ZXMsCj4gPiB3aGV0aGVyIHRob3NlIGFyZSBpbXBsaWNpdCBvciBleHBsaWNpdC4KPiA+Cj4gPj4g RG8geW91IGhhdmUgYW55IGNvbmNlcm4gd2l0aCB0aGUgZGVwcmVjYXRpb24vcmVtb3ZhbCBvZiBC TyBmZW5jZXMgaW4gdGhlCj4gPj4ga2VybmVsIGFzc3VtaW5nIHVzZXJzcGFjZSBpcyBvbmx5IHVz aW5nIGV4cGxpY2l0IGZlbmNlcz8gQW55IGNvbmNlcm4gd2l0aAo+ID4+IHRoZSBzdWJtaXQgYW5k IHJldHVybiBmZW5jZXMgZm9yIG1vZGVzZXR0aW5nIGFuZCBvdGhlciBwcm9kdWNlcjwtPmNvbnN1 bWVyCj4gPj4gc2NlbmFyaW9zPwo+ID4gTGV0IG1lIHdvcmsgb24gdGhlIGZ1bGwgcmVwbGF5IGZv ciB5b3VyIHJmYyBmaXJzdCwgYmVjYXVzZSB0aGVyZSdzIGEgbG90Cj4gPiBvZiBkZXRhaWxzIGhl cmUgYW5kIG51YW5jZS4KPiA+IC1EYW5pZWwKPiA+Cj4gPj4gVGhhbmtzLAo+ID4+IE1hcmVrCj4g Pj4KPiA+PiBPbiBUdWUsIEFwciAyMCwgMjAyMSBhdCA2OjM0IEFNIERhbmllbCBWZXR0ZXIgPGRh bmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gPj4KPiA+Pj4gT24gVHVlLCBBcHIgMjAsIDIwMjEgYXQg MTI6MTUgUE0gQ2hyaXN0aWFuIEvDtm5pZwo+ID4+PiA8Y2tvZW5pZy5sZWljaHR6dW1lcmtlbkBn bWFpbC5jb20+IHdyb3RlOgo+ID4+Pj4gQW0gMTkuMDQuMjEgdW0gMTc6NDggc2NocmllYiBKYXNv biBFa3N0cmFuZDoKPiA+Pj4+PiBOb3QgZ29pbmcgdG8gY29tbWVudCBvbiBldmVyeXRoaW5nIG9u IHRoZSBmaXJzdCBwYXNzLi4uCj4gPj4+Pj4KPiA+Pj4+PiBPbiBNb24sIEFwciAxOSwgMjAyMSBh dCA1OjQ4IEFNIE1hcmVrIE9sxaHDoWsgPG1hcmFlb0BnbWFpbC5jb20+IHdyb3RlOgo+ID4+Pj4+ PiBIaSwKPiA+Pj4+Pj4KPiA+Pj4+Pj4gVGhpcyBpcyBvdXIgaW5pdGlhbCBwcm9wb3NhbCBmb3Ig ZXhwbGljaXQgZmVuY2VzIGV2ZXJ5d2hlcmUgYW5kIG5ldwo+ID4+PiBtZW1vcnkgbWFuYWdlbWVu dCB0aGF0IGRvZXNuJ3QgdXNlIEJPIGZlbmNlcy4gSXQncyBhIHJlZGVzaWduIG9mIGhvdyBMaW51 eAo+ID4+PiBncmFwaGljcyBkcml2ZXJzIHdvcmssIGFuZCBpdCBjYW4gY29leGlzdCB3aXRoIHdo YXQgd2UgaGF2ZSBub3cuCj4gPj4+Pj4+Cj4gPj4+Pj4+IDEuIEludHJvZHVjdGlvbgo+ID4+Pj4+ PiAoc2tpcCB0aGlzIGlmIHlvdSBhcmUgYWxyZWFkeSBzb2xkIG9uIGV4cGxpY2l0IGZlbmNlcykK PiA+Pj4+Pj4KPiA+Pj4+Pj4gVGhlIGN1cnJlbnQgTGludXggZ3JhcGhpY3MgYXJjaGl0ZWN0dXJl IHdhcyBpbml0aWFsbHkgZGVzaWduZWQgZm9yCj4gPj4+IEdQVXMgd2l0aCBvbmx5IG9uZSBncmFw aGljcyBxdWV1ZSB3aGVyZSBldmVyeXRoaW5nIHdhcyBleGVjdXRlZCBpbiB0aGUKPiA+Pj4gc3Vi bWlzc2lvbiBvcmRlciBhbmQgcGVyLUJPIGZlbmNlcyB3ZXJlIHVzZWQgZm9yIG1lbW9yeSBtYW5h Z2VtZW50IGFuZAo+ID4+PiBDUFUtR1BVIHN5bmNocm9uaXphdGlvbiwgbm90IEdQVS1HUFUgc3lu Y2hyb25pemF0aW9uLiBMYXRlciwgbXVsdGlwbGUKPiA+Pj4gcXVldWVzIHdlcmUgYWRkZWQgb24g dG9wLCB3aGljaCByZXF1aXJlZCB0aGUgaW50cm9kdWN0aW9uIG9mIGltcGxpY2l0Cj4gPj4+IEdQ VS1HUFUgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcXVldWVzIG9mIGRpZmZlcmVudCBwcm9jZXNz ZXMgdXNpbmcgcGVyLUJPCj4gPj4+IGZlbmNlcy4gUmVjZW50bHksIGV2ZW4gcGFyYWxsZWwgZXhl Y3V0aW9uIHdpdGhpbiBvbmUgcXVldWUgd2FzIGVuYWJsZWQKPiA+Pj4gd2hlcmUgYSBjb21tYW5k IGJ1ZmZlciBzdGFydHMgZHJhd3MgYW5kIGNvbXB1dGUgc2hhZGVycywgYnV0IGRvZXNuJ3Qgd2Fp dAo+ID4+PiBmb3IgdGhlbSwgZW5hYmxpbmcgcGFyYWxsZWxpc20gYmV0d2VlbiBiYWNrLXRvLWJh Y2sgY29tbWFuZCBidWZmZXJzLgo+ID4+PiBNb2Rlc2V0dGluZyBhbHNvIHVzZXMgcGVyLUJPIGZl bmNlcyBmb3Igc2NoZWR1bGluZyBmbGlwcy4gT3VyIEdQVSBzY2hlZHVsZXIKPiA+Pj4gd2FzIGNy ZWF0ZWQgdG8gZW5hYmxlIGFsbCB0aG9zZSB1c2UgY2FzZXMsIGFuZCBpdCdzIHRoZSBvbmx5IHJl YXNvbiB3aHkgdGhlCj4gPj4+IHNjaGVkdWxlciBleGlzdHMuCj4gPj4+Pj4+IFRoZSBHUFUgc2No ZWR1bGVyLCBpbXBsaWNpdCBzeW5jaHJvbml6YXRpb24sIEJPLWZlbmNlLWJhc2VkIG1lbW9yeQo+ ID4+PiBtYW5hZ2VtZW50LCBhbmQgdGhlIHRyYWNraW5nIG9mIHBlci1CTyBmZW5jZXMgaW5jcmVh c2UgQ1BVIG92ZXJoZWFkIGFuZAo+ID4+PiBsYXRlbmN5LCBhbmQgcmVkdWNlIHBhcmFsbGVsaXNt LiBUaGVyZSBpcyBhIGRlc2lyZSB0byByZXBsYWNlIGFsbCBvZiB0aGVtCj4gPj4+IHdpdGggc29t ZXRoaW5nIG11Y2ggc2ltcGxlci4gQmVsb3cgaXMgaG93IHdlIGNvdWxkIGRvIGl0Lgo+ID4+Pj4+ Pgo+ID4+Pj4+PiAyLiBFeHBsaWNpdCBzeW5jaHJvbml6YXRpb24gZm9yIHdpbmRvdyBzeXN0ZW1z IGFuZCBtb2Rlc2V0dGluZwo+ID4+Pj4+Pgo+ID4+Pj4+PiBUaGUgcHJvZHVjZXIgaXMgYW4gYXBw bGljYXRpb24gYW5kIHRoZSBjb25zdW1lciBpcyBhIGNvbXBvc2l0b3Igb3IgYQo+ID4+PiBtb2Rl c2V0dGluZyBkcml2ZXIuCj4gPj4+Pj4+IDIuMS4gVGhlIFByZXNlbnQgcmVxdWVzdAo+ID4+Pj4+ Pgo+ID4+Pj4+PiBBcyBwYXJ0IG9mIHRoZSBQcmVzZW50IHJlcXVlc3QsIHRoZSBwcm9kdWNlciB3 aWxsIHBhc3MgMiBmZW5jZXMgKHN5bmMKPiA+Pj4gb2JqZWN0cykgdG8gdGhlIGNvbnN1bWVyIGFs b25nc2lkZSB0aGUgcHJlc2VudGVkIERNQUJVRiBCTzoKPiA+Pj4+Pj4gLSBUaGUgc3VibWl0IGZl bmNlOiBJbml0aWFsbHkgdW5zaWduYWxsZWQsIGl0IHdpbGwgYmUgc2lnbmFsbGVkIHdoZW4KPiA+ Pj4gdGhlIHByb2R1Y2VyIGhhcyBmaW5pc2hlZCBkcmF3aW5nIGludG8gdGhlIHByZXNlbnRlZCBi dWZmZXIuCj4gPj4+Pj4+IC0gVGhlIHJldHVybiBmZW5jZTogSW5pdGlhbGx5IHVuc2lnbmFsbGVk LCBpdCB3aWxsIGJlIHNpZ25hbGxlZCB3aGVuCj4gPj4+IHRoZSBjb25zdW1lciBoYXMgZmluaXNo ZWQgdXNpbmcgdGhlIHByZXNlbnRlZCBidWZmZXIuCj4gPj4+Pj4gSSdtIG5vdCBzdXJlIHN5bmNv YmogaXMgd2hhdCB3ZSB3YW50LiAgSW4gdGhlIEludGVsIHdvcmxkIHdlJ3JlIHRyeWluZwo+ID4+ Pj4+IHRvIGdvIGV2ZW4gZnVydGhlciB0byBzb21ldGhpbmcgd2UncmUgY2FsbGluZyAidXNlcnNw YWNlIGZlbmNlcyIgd2hpY2gKPiA+Pj4+PiBhcmUgYSB0aW1lbGluZSBpbXBsZW1lbnRlZCBhcyBh IHNpbmdsZSA2NC1iaXQgdmFsdWUgaW4gc29tZQo+ID4+Pj4+IENQVS1tYXBwYWJsZSBCTy4gIFRo ZSBjbGllbnQgd3JpdGVzIGEgaGlnaGVyIHZhbHVlIGludG8gdGhlIEJPIHRvCj4gPj4+Pj4gc2ln bmFsIHRoZSB0aW1lbGluZS4KPiA+Pj4+IFdlbGwgdGhhdCBpcyBleGFjdGx5IHdoYXQgb3VyIFdp bmRvd3MgZ3V5cyBoYXZlIHN1Z2dlc3RlZCBhcyB3ZWxsLCBidXQKPiA+Pj4+IGl0IHN0cm9uZ2x5 IGxvb2tzIGxpa2UgdGhhdCB0aGlzIGlzbid0IHN1ZmZpY2llbnQuCj4gPj4+Pgo+ID4+Pj4gRmly c3Qgb2YgYWxsIHlvdSBydW4gaW50byBzZWN1cml0eSBwcm9ibGVtcyB3aGVuIGFueSBhcHBsaWNh dGlvbiBjYW4KPiA+Pj4+IGp1c3Qgd3JpdGUgYW55IHZhbHVlIHRvIHRoYXQgbWVtb3J5IGxvY2F0 aW9uLiBKdXN0IGltYWdpbmUgYW4KPiA+Pj4+IGFwcGxpY2F0aW9uIHNldHMgdGhlIGNvdW50ZXIg dG8gemVybyBhbmQgWCB3YWl0cyBmb3JldmVyIGZvciBzb21lCj4gPj4+PiByZW5kZXJpbmcgdG8g ZmluaXNoLgo+ID4+PiBUaGUgdGhpbmcgaXMsIHdpdGggdXNlcnNwYWNlIGZlbmNlcyBzZWN1cml0 eSBib3VuZGFyeSBpc3N1ZSBwcmV2ZW50Cj4gPj4+IG1vdmVzIGludG8gdXNlcnNwYWNlIGVudGly ZWx5LiBBbmQgaXQgcmVhbGx5IGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIKPiA+Pj4gdGhlIGV2ZW50 IHlvdSdyZSB3YWl0aW5nIG9uIGRvZXNuJ3QgY29tcGxldGUgYmVjYXVzZSB0aGUgb3RoZXIgYXBw Cj4gPj4+IGNyYXNoZWQgb3Igd2FzIHN0dXBpZCBvciBpbnRlbnRpb25hbGx5IGdhdmUgeW91IGEg d3JvbmcgZmVuY2UgcG9pbnQ6Cj4gPj4+IFlvdSBoYXZlIHRvIHNvbWVob3cgaGFuZGxlIHRoYXQs IGUuZy4gcGVyaGFwcyB3aXRoIGNvbmRpdGlvbmFsCj4gPj4+IHJlbmRlcmluZyBhbmQganVzdCB1 c2luZyB0aGUgb2xkIGZyYW1lIGluIGNvbXBvc2l0aW5nIGlmIHRoZSBuZXcgb25lCj4gPj4+IGRv ZXNuJ3Qgc2hvdyB1cCBpbiB0aW1lLiBPciBzb21ldGhpbmcgbGlrZSB0aGF0LiBTbyB0cnlpbmcg dG8gZ2V0IHRoZQo+ID4+PiBrZXJuZWwgaW52b2x2ZWQgYnV0IGFsc28gbm90IHNvIG11Y2ggaW52 b2x2ZWQgc291bmRzIGxpa2UgYSBiYWQgZGVzaWduCj4gPj4+IHRvIG1lLgoKU29ycnkgdGhhdCBt eSBpbml0aWFsIHJlcGx5IHdhcyBzbyB0dXJzZS4gIEknbSBub3QgY2xhaW1pbmcgKG5vciB3aWxs CkkgZXZlcikgdGhhdCBtZW1vcnkgZmVuY2VzIGFyZSBhbiBlYXN5IHNvbHV0aW9uLiAgVGhleSdy ZSBjZXJ0YWlubHkKZnJhdWdodCB3aXRoIHBvdGVudGlhbCBpc3N1ZXMuICBJIGRvLCBob3dldmVy LCB0aGluayB0aGF0IHRoZXkgYXJlIHRoZQpiYXNpcyBvZiB0aGUgZnV0dXJlIG9mIHN5bmNocm9u aXphdGlvbi4gIFRoZSBmYWN0IHRoYXQgV2luZG93cyAxMCBhbmQKdGhlIGNvbnNvbGVzIGhhdmUg YmVlbiB1c2luZyB0aGVtIHRvIGdyZWF0IGVmZmVjdCBmb3IgNSsgeWVhcnMKaW5kaWNhdGVzIHRo YXQgdGhleSBkbywgaW4gZmFjdCwgd29yay4gIEhvd2V2ZXIsIE1pY3Jvc29mdCBoYXMgbmV2ZXIK c3VwcG9ydGVkIGJvdGggYSBtZW1vcnkgZmVuY2UgYW5kIGRtYS1mZW5jZS1saWtlIG1vZGVsIGlu IHRoZSBzYW1lCldpbmRvd3MgdmVyc2lvbiBzbyB0aGVyZSdzIG5vIHByaW9yIGFydCBmb3Igc21h c2hpbmcgdGhlIHR3byBtb2RlbHMKdG9nZXRoZXIuCgoKPiA+Pj4+IEFkZGl0aW9uYWwgdG8gdGhh dCBpbiBzdWNoIGEgbW9kZWwgeW91IGNhbid0IGRldGVybWluZSB3aG8gaXMgdGhlIGd1aWx0eQo+ ID4+Pj4gcXVldWUgaW4gY2FzZSBvZiBhIGhhbmcgYW5kIGNhbid0IHJlc2V0IHRoZSBzeW5jaHJv bml6YXRpb24gcHJpbWl0aXZlcwo+ID4+Pj4gaW4gY2FzZSBvZiBhbiBlcnJvci4KCkZvciB0aGlz LCBXaW5kb3dzIGhhcyB0d28gc29sdXRpb25zLiAgT25lIGlzIHRoYXQgZXZlcnlvbmUgaXMKaGFu Zy1hd2FyZSBpbiBzb21lIHNlbnNlLiAgSXQgbWVhbnMgZXh0cmEgY29tcGxleGl0eSBpbiB0aGUg d2luZG93CnN5c3RlbSBidXQgc29tZSBhbW91bnQgb2YgdGhhdCBpcyBuZWNlc3NhcnkgaWYgeW91 IGRvbid0IGhhdmUgZWFzeQplcnJvciBwcm9wYWdhdGlvbi4KClNlY29uZCBpcyB0aGF0IHRoZSBm ZW5jZXMgYXJlbid0IGFjdHVhbGx5IHNpbmdhbGVkIGZyb20gdXNlcnMgc3BhY2UgYXMKRGFuaWVs IHN1Z2dlc3RzIGJ1dCBhcmUgc2lnbmFsZWQgZnJvbSB0aGUga2VybmVsLiAgVGhpcyBtZWFucyB0 aGF0IHRoZQprZXJuZWwgaXMgYXdhcmUgb2YgYWxsIHRoZSBmZW5jZXMgd2hpY2ggYXJlIHN1cHBv c2VkIHRvIGJlIHNpZ25hbGVkCmZyb20gYSBnaXZlbiBjb250ZXh0L2VuZ2luZS4gIFdoZW4gYSBo YW5nIG9jY3VycywgaXQgaGFzIGEgbW9kZSB3aGVyZQppdCBzbWFzaGVzIGFsbCB0aW1lbGluZXMg d2hpY2ggdGhlIGNvbnRleHQgaXMgc3VwcG9zZWQgdG8gYmUgc2lnbmFsaW5nCnRvIFVJTlQ2NF9N QVgsIHVuYmxvY2tpbmcgYW55dGhpbmcgd2hpY2ggZGVwZW5kcyBvbiB0aGVtLiAgVGhlcmUgYXJl IGEKbG90IG9mIGRldGFpbHMgaGVyZSB3aGljaCBhcmUgdW5jbGVhciB0byBtZSBzdWNoIGFzIHdo YXQgaGFwcGVucyBpZgpzb21lIG90aGVyIG9wZXJhdGlvbiBzbWFzaGVzIGl0IGJhY2sgdG8gYSBs b3dlciB2YWx1ZS4gIERvZXMgaXQga2VlcApzbWFzaGluZyB0byBVSU5UNjRfTUFYIHVudGlsIGl0 IGFsbCBjbGVhcnM/ICBJJ20gbm90IHN1cmUuCgoKPiA+Pj4+IEFwYXJ0IGZyb20gdGhhdCB0aGlz IGlzIHJhdGhlciBpbmVmZmljaWVudCwgZS5nLiB3ZSBkb24ndCBoYXZlIGFueSB3YXkKPiA+Pj4+ IHRvIHByZXZlbnQgcHJpb3JpdHkgaW52ZXJzaW9uIHdoZW4gdXNlZCBhcyBhIHN5bmNocm9uaXph dGlvbiBtZWNoYW5pc20KPiA+Pj4+IGJldHdlZW4gZGlmZmVyZW50IEdQVSBxdWV1ZXMuCj4gPj4+ IFllYWggYnV0IHlvdSBjYW4ndCBoYXZlIGl0IGJvdGggd2F5cy4gRWl0aGVyIGFsbCB0aGUgc2No ZWR1bGluZyBpbiB0aGUKPiA+Pj4ga2VybmVsIGFuZCBmZW5jZSBoYW5kbGluZyBpcyBhIHByb2Js ZW0sIG9yIHlvdSBhY3R1YWxseSB3YW50IHRvCj4gPj4+IHNjaGVkdWxlIGluIHRoZSBrZXJuZWwu IGh3IHNlZW1zIHRvIGRlZmluaXRlbHkgbW92ZSB0b3dhcmRzIHRoZSBtb3JlCj4gPj4+IHN0dXBp ZCBzcGlubG9jay1pbi1odyBtb2RlbCAoYW5kIGRpcmVjdCBzdWJtaXQgZnJvbSB1c2Vyc3BhY2Ug YW5kIGFsbAo+ID4+PiB0aGF0KSwgcHJpb3JpdHkgaW52ZXJzaW9ucyBiZSBkYW1uZWQuIEknbSBy ZWFsbHkgbm90IHN1cmUgd2Ugc2hvdWxkCj4gPj4+IGZpZ2h0IHRoYXQgLSBpZiBpdCdzIHJlYWxs eSB0aGF0IGluZWZmaWNpZW50IHRoZW4gbWF5YmUgaHcgd2lsbCBhZGQKPiA+Pj4gc3VwcG9ydCBm b3Igd2FpdGluZyBzeW5jIGNvbnN0cnVjdHMgaW4gaGFyZHdhcmUsIG9yIGF0IGxlYXN0IGJlCj4g Pj4+IHNtYXJ0ZXIgYWJvdXQgc2NoZWR1bGluZyBvdGhlciBzdHVmZi4gRS5nLiBvbiBpbnRlbCBo dyBib3RoIHRoZSBrZXJuZWwKPiA+Pj4gc2NoZWR1bGVyIGFuZCBmdyBzY2hlZHVsZXIga25vd3Mg d2hlbiB5b3UncmUgc3Bpbm5pbmcgb24gYSBodyBmZW5jZQo+ID4+PiAod2hldGhlciB1c2Vyc3Bh Y2Ugb3Iga2VybmVsIGRvZXNuJ3QgbWF0dGVyKSBhbmQgcGx1Z3MgaW4gc29tZXRoaW5nCj4gPj4+ IGVsc2UuIEFkZCBpbiBhIGJpdCBvZiBodyBzdXBwb3J0IHRvIHdhdGNoIGNhY2hlbGluZXMsIGFu ZCB5b3UgaGF2ZQo+ID4+PiBzb21ldGhpbmcgd2hpY2ggY2FuIGhhbmRsZSBib3RoIGRpcmVjdGlv bnMgZWZmaWNpZW50bHkuCj4gPj4+Cj4gPj4+IEltbyBnaXZlbiB3aGVyZSBodyBpcyBnb2luZywg d2Ugc2hvdWxkbid0IHRyeSB0byBiZSB0b28gY2xldmVyIGhlcmUuCj4gPj4+IFRoZSBvbmx5IHRo aW5nIHdlIGRvIG5lZWQgdG8gcHJvdmlzaW9uIGlzIGJlaW5nIGFibGUgdG8gZG8gY3B1IHNpZGUK PiA+Pj4gd2FpdHMgd2l0aG91dCBzcGlubmluZy4gQW5kIHRoYXQgc2hvdWxkIHByb2JhYmx5IGJl IGRvbmUgaW4gYSBmYWlybHkKPiA+Pj4gZ3B1IHNwZWNpZmljIHdheSBzdGlsbC4KCll1cC4gIFRo ZSBzeW5jaHJvbml6YXRpb24gbW9kZWwgdGhhdCBXaW5kb3dzLCBjb25zb2xlcywgYW5kIGhhcmR3 YXJlCmlzIG1vdmluZyB0b3dhcmRzIGlzIGEgbW9kZWwgd2hlcmUgeW91IGhhdmUgbWVtb3J5IGZl bmNlcyBmb3IKZXhlY3V0aW9uIHN5bmNocm9uaXphdGlvbiBhbmQgZXhwbGljaXQgbWVtb3J5IGJp bmRpbmcgYW5kIHJlc2lkZW5jeQptYW5hZ2VtZW50IGFuZCB0aGVuIHRoZSBhc2sgZnJvbSB1c2Vy c3BhY2UgdG8gdGhlIGtlcm5lbCBpcyAicHV0CmV2ZXJ5dGhpbmcgaW4gcGxhY2UgYW5kIHRoZW4g cnVuIGFzIGZhc3QgYXMgeW91IGNhbiIuICBJIHRoaW5rIHRoYXQKbGFzdCBiaXQgaXMgcm91Z2hs eSB3aGF0IE1hcmVrIGlzIGFza2luZyBmb3IgaGVyZS4gIFRoZSBkaWZmZXJlbmNlIGlzCmluIHRo ZSBkZXRhaWxzIG9uIGhvdyBpdCBhbGwgd29ya3MgaW50ZXJuYWxseS4KCkFsc28sIGp1c3QgdG8g YmUgY2xlYXIsIG15IGNvbW1lbnRzIGhlcmUgd2VyZW4ndCBzbyBtdWNoICJwbGVhc2Ugc29sdmUK YWxsIHRoZSBwcm9ibGVtcyIgYXMgYXNraW5nIHRoYXQsIGFzIHdlIGltcHJvdmUgZXhwbGljaXQK c3luY2hyb25pemF0aW9uIHBsdW1iaW5nLCB3ZSBkbyBpdCB3aXRoIG1lbW9yeSBmZW5jZXMgaW4g bWluZC4gIEkgZG8KdGhpbmsgdGhleSdyZSB0aGUgZnV0dXJlLCBldmVuIGlmIGl0J3MgYSBkaWZm aWN1bHQgZnV0dXJlIHRvIGdldCB0bywKYW5kIEknbSB0cnlpbmcgdG8gZmluZCBhIHBhdGguCgot LUphc29uCgoKPiA+Pj4gLURhbmllbAo+ID4+Pgo+ID4+Pj4gQ2hyaXN0aWFuLgo+ID4+Pj4KPiA+ Pj4+PiAgICAgVGhlIGtlcm5lbCB0aGVuIHByb3ZpZGVzIHNvbWUgaGVscGVycyBmb3IKPiA+Pj4+ PiB3YWl0aW5nIG9uIHRoZW0gcmVsaWFibHkgYW5kIHdpdGhvdXQgc3Bpbm5pbmcuICBJIGRvbid0 IGV4cGVjdAo+ID4+Pj4+IGV2ZXJ5b25lIHRvIHN1cHBvcnQgdGhlc2UgcmlnaHQgYXdheSBidXQs IElmIHdlJ3JlIGdvaW5nIHRvIHJlLXBsdW1iCj4gPj4+Pj4gdXNlcnNwYWNlIGZvciBleHBsaWNp dCBzeW5jaHJvbml6YXRpb24sIEknZCBsaWtlIHRvIG1ha2Ugc3VyZSB3ZSB0YWtlCj4gPj4+Pj4g dGhpcyBpbnRvIGFjY291bnQgc28gd2Ugb25seSBoYXZlIHRvIGRvIGl0IG9uY2UuCj4gPj4+Pj4K PiA+Pj4+Pgo+ID4+Pj4+PiBEZWFkbG9jayBtaXRpZ2F0aW9uIHRvIHJlY292ZXIgZnJvbSBzZWdm YXVsdHM6Cj4gPj4+Pj4+IC0gVGhlIGtlcm5lbCBrbm93cyB3aGljaCBwcm9jZXNzIGlzIG9ibGln ZWQgdG8gc2lnbmFsIHdoaWNoIGZlbmNlLgo+ID4+PiBUaGlzIGluZm9ybWF0aW9uIGlzIHBhcnQg b2YgdGhlIFByZXNlbnQgcmVxdWVzdCBhbmQgc3VwcGxpZWQgYnkgdXNlcnNwYWNlLgo+ID4+Pj4+ IFRoaXMgaXNuJ3QgY2xlYXIgdG8gbWUuICBZZXMsIGlmIHdlJ3JlIHVzaW5nIGFueXRoaW5nIGRt YS1mZW5jZSBiYXNlZAo+ID4+Pj4+IGxpa2Ugc3luY29iaiwgdGhpcyBpcyB0cnVlLiAgQnV0IGl0 IGRvZXNuJ3Qgc2VlbSB0b3RhbGx5IHRydWUgYXMgYQo+ID4+Pj4+IGdlbmVyYWwgc3RhdGVtZW50 Lgo+ID4+Pj4+Cj4gPj4+Pj4KPiA+Pj4+Pj4gLSBJZiB0aGUgcHJvZHVjZXIgY3Jhc2hlcywgdGhl IGtlcm5lbCBzaWduYWxzIHRoZSBzdWJtaXQgZmVuY2UsIHNvCj4gPj4+IHRoYXQgdGhlIGNvbnN1 bWVyIGNhbiBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuCj4gPj4+Pj4+IC0gSWYgdGhlIGNvbnN1bWVy IGNyYXNoZXMsIHRoZSBrZXJuZWwgc2lnbmFscyB0aGUgcmV0dXJuIGZlbmNlLCBzbwo+ID4+PiB0 aGF0IHRoZSBwcm9kdWNlciBjYW4gcmVjbGFpbSB0aGUgYnVmZmVyLgo+ID4+Pj4+PiAtIEEgR1BV IGhhbmcgc2lnbmFscyBhbGwgZmVuY2VzLiBPdGhlciBkZWFkbG9ja3Mgd2lsbCBiZSBoYW5kbGVk IGxpa2UKPiA+Pj4gR1BVIGhhbmdzLgo+ID4+Pj4+IFdoYXQgZG8geW91IG1lYW4gYnkgImFsbCI/ ICBBbGwgZmVuY2VzIHRoYXQgd2VyZSBzdXBwb3NlZCB0byBiZQo+ID4+Pj4+IHNpZ25hbGVkIGJ5 IHRoZSBodW5nIGNvbnRleHQ/Cj4gPj4+Pj4KPiA+Pj4+Pgo+ID4+Pj4+PiBPdGhlciB3aW5kb3cg c3lzdGVtIHJlcXVlc3RzIGNhbiBmb2xsb3cgdGhlIHNhbWUgaWRlYS4KPiA+Pj4+Pj4KPiA+Pj4+ Pj4gTWVyZ2VkIGZlbmNlcyB3aGVyZSBvbmUgZmVuY2Ugb2JqZWN0IGNvbnRhaW5zIG11bHRpcGxl IGZlbmNlcyB3aWxsIGJlCj4gPj4+IHN1cHBvcnRlZC4gQSBtZXJnZWQgZmVuY2UgaXMgc2lnbmFs bGVkIG9ubHkgd2hlbiBpdHMgZmVuY2VzIGFyZSBzaWduYWxsZWQuCj4gPj4+IFRoZSBjb25zdW1l ciB3aWxsIGhhdmUgdGhlIG9wdGlvbiB0byByZWRlZmluZSB0aGUgdW5zaWduYWxsZWQgcmV0dXJu IGZlbmNlCj4gPj4+IHRvIGEgbWVyZ2VkIGZlbmNlLgo+ID4+Pj4+PiAyLjIuIE1vZGVzZXR0aW5n Cj4gPj4+Pj4+Cj4gPj4+Pj4+IFNpbmNlIGEgbW9kZXNldHRpbmcgZHJpdmVyIGNhbiBhbHNvIGJl IHRoZSBjb25zdW1lciwgdGhlIHByZXNlbnQKPiA+Pj4gaW9jdGwgd2lsbCBjb250YWluIGEgc3Vi bWl0IGZlbmNlIGFuZCBhIHJldHVybiBmZW5jZSB0b28uIE9uZSBzbWFsbCBwcm9ibGVtCj4gPj4+ IHdpdGggdGhpcyBpcyB0aGF0IHVzZXJzcGFjZSBjYW4gaGFuZyB0aGUgbW9kZXNldHRpbmcgZHJp dmVyLCBidXQgaW4gdGhlb3J5LAo+ID4+PiBhbnkgbGF0ZXIgcHJlc2VudCBpb2N0bCBjYW4gb3Zl cnJpZGUgdGhlIHByZXZpb3VzIG9uZSwgc28gdGhlIHVuc2lnbmFsbGVkCj4gPj4+IHByZXNlbnRh dGlvbiBpcyBuZXZlciB1c2VkLgo+ID4+Pj4+Pgo+ID4+Pj4+PiAzLiBOZXcgbWVtb3J5IG1hbmFn ZW1lbnQKPiA+Pj4+Pj4KPiA+Pj4+Pj4gVGhlIHBlci1CTyBmZW5jZXMgd2lsbCBiZSByZW1vdmVk IGFuZCB0aGUga2VybmVsIHdpbGwgbm90IGtub3cgd2hpY2gKPiA+Pj4gYnVmZmVycyBhcmUgYnVz eS4gVGhpcyB3aWxsIHJlZHVjZSBDUFUgb3ZlcmhlYWQgYW5kIGxhdGVuY3kuIFRoZSBrZXJuZWwK PiA+Pj4gd2lsbCBub3QgbmVlZCBwZXItQk8gZmVuY2VzIHdpdGggZXhwbGljaXQgc3luY2hyb25p emF0aW9uLCBzbyB3ZSBqdXN0IG5lZWQKPiA+Pj4gdG8gcmVtb3ZlIHRoZWlyIGxhc3QgdXNlcjog YnVmZmVyIGV2aWN0aW9ucy4gSXQgYWxzbyByZXNvbHZlcyB0aGUgY3VycmVudAo+ID4+PiBPT00g ZGVhZGxvY2suCj4gPj4+Pj4gSXMgdGhpcyBldmVuIHJlYWxseSBwb3NzaWJsZT8gIEknbSBubyBr ZXJuZWwgTU0gZXhwZXJ0ICh0cnlpbmcgdG8KPiA+Pj4+PiBsZWFybiBzb21lKSBidXQgbXkgdW5k ZXJzdGFuZGluZyBpcyB0aGF0IHRoZSB1c2Ugb2YgcGVyLUJPIGRtYS1mZW5jZQo+ID4+Pj4+IHJ1 bnMgZGVlcC4gIEkgd291bGQgbGlrZSB0byBzdG9wIHVzaW5nIGl0IGZvciBpbXBsaWNpdCBzeW5j aHJvbml6YXRpb24KPiA+Pj4+PiB0byBiZSBzdXJlLCBidXQgSSdtIG5vdCBzdXJlIEkgYmVsaWV2 ZSB0aGUgY2xhaW0gdGhhdCB3ZSBjYW4gZ2V0IHJpZAo+ID4+Pj4+IG9mIGl0IGVudGlyZWx5LiAg SGFwcHkgdG8gc2VlIHNvbWVvbmUgdHJ5LCB0aG91Z2guCj4gPj4+Pj4KPiA+Pj4+Pgo+ID4+Pj4+ PiAzLjEuIEV2aWN0aW9ucwo+ID4+Pj4+Pgo+ID4+Pj4+PiBJZiB0aGUga2VybmVsIHdhbnRzIHRv IG1vdmUgYSBidWZmZXIsIGl0IHdpbGwgaGF2ZSB0byB3YWl0IGZvcgo+ID4+PiBldmVyeXRoaW5n IHRvIGdvIGlkbGUsIGhhbHQgYWxsIHVzZXJzcGFjZSBjb21tYW5kIHN1Ym1pc3Npb25zLCBtb3Zl IHRoZQo+ID4+PiBidWZmZXIsIGFuZCByZXN1bWUgZXZlcnl0aGluZy4gVGhpcyBpcyBub3QgZXhw ZWN0ZWQgdG8gaGFwcGVuIHdoZW4gbWVtb3J5Cj4gPj4+IGlzIG5vdCBleGhhdXN0ZWQuIE90aGVy IG1vcmUgZWZmaWNpZW50IHdheXMgb2Ygc3luY2hyb25pemF0aW9uIGFyZSBhbHNvCj4gPj4+IHBv c3NpYmxlIChlLmcuIHN5bmMgb25seSBvbmUgcHJvY2VzcyksIGJ1dCBhcmUgbm90IGRpc2N1c3Nl ZCBoZXJlLgo+ID4+Pj4+PiAzLjIuIFBlci1wcm9jZXNzIFZSQU0gdXNhZ2UgcXVvdGEKPiA+Pj4+ Pj4KPiA+Pj4+Pj4gRWFjaCBwcm9jZXNzIGNhbiBvcHRpb25hbGx5IGFuZCBwZXJpb2RpY2FsbHkg cXVlcnkgaXRzIFZSQU0gdXNhZ2UKPiA+Pj4gcXVvdGEgYW5kIGNoYW5nZSBkb21haW5zIG9mIGl0 cyBidWZmZXJzIHRvIG9iZXkgdGhhdCBxdW90YS4gRm9yIGV4YW1wbGUsIGEKPiA+Pj4gcHJvY2Vz cyBhbGxvY2F0ZWQgMiBHQiBvZiBidWZmZXJzIGluIFZSQU0sIGJ1dCB0aGUga2VybmVsIGRlY3Jl YXNlZCB0aGUKPiA+Pj4gcXVvdGEgdG8gMSBHQi4gVGhlIHByb2Nlc3MgY2FuIGNoYW5nZSB0aGUg ZG9tYWlucyBvZiB0aGUgbGVhc3QgaW1wb3J0YW50Cj4gPj4+IGJ1ZmZlcnMgdG8gR1RUIHRvIGdl dCB0aGUgYmVzdCBvdXRjb21lIGZvciBpdHNlbGYuIElmIHRoZSBwcm9jZXNzIGRvZXNuJ3QKPiA+ Pj4gZG8gaXQsIHRoZSBrZXJuZWwgd2lsbCBjaG9vc2Ugd2hpY2ggYnVmZmVycyB0byBldmljdCBh dCByYW5kb20uICh0aGFua3MgdG8KPiA+Pj4gQ2hyaXN0aWFuIEtvZW5pZyBmb3IgdGhpcyBpZGVh KQo+ID4+Pj4+IFRoaXMgaXMgZ29pbmcgdG8gYmUgZGlmZmljdWx0LiAgT24gSW50ZWwsIHdlIGhh dmUgc29tZSByZXNvdXJjZXMgdGhhdAo+ID4+Pj4+IGhhdmUgdG8gYmUgcGlubmVkIHRvIFZSQU0g YW5kIGNhbid0IGJlIGR5bmFtaWNhbGx5IHN3YXBwZWQgb3V0IGJ5IHRoZQo+ID4+Pj4+IGtlcm5l bC4gIEluIEdMLCB3ZSBwcm9iYWJseSBjYW4gZGVhbCB3aXRoIGl0IHNvbWV3aGF0IGR5bmFtaWNh bGx5LiAgSW4KPiA+Pj4+PiBWdWxrYW4sIHdlJ2xsIGJlIGVudGlyZWx5IGRlcGVuZGVudCBvbiB0 aGUgYXBwbGljYXRpb24gdG8gdXNlIHRoZQo+ID4+Pj4+IGFwcHJvcHJpYXRlIFZ1bGthbiBtZW1v cnkgYnVkZ2V0IEFQSXMuCj4gPj4+Pj4KPiA+Pj4+PiAtLUphc29uCj4gPj4+Pj4KPiA+Pj4+Pgo+ ID4+Pj4+PiAzLjMuIEJ1ZmZlciBkZXN0cnVjdGlvbiB3aXRob3V0IHBlci1CTyBmZW5jZXMKPiA+ Pj4+Pj4KPiA+Pj4+Pj4gV2hlbiB0aGUgYnVmZmVyIGRlc3Ryb3kgaW9jdGwgaXMgY2FsbGVkLCBh biBvcHRpb25hbCBmZW5jZSBsaXN0IGNhbgo+ID4+PiBiZSBwYXNzZWQgdG8gdGhlIGtlcm5lbCB0 byBpbmRpY2F0ZSB3aGVuIGl0J3Mgc2FmZSB0byBkZWFsbG9jYXRlIHRoZQo+ID4+PiBidWZmZXIu IElmIHRoZSBmZW5jZSBsaXN0IGlzIGVtcHR5LCB0aGUgYnVmZmVyIHdpbGwgYmUgZGVhbGxvY2F0 ZWQKPiA+Pj4gaW1tZWRpYXRlbHkuIFNoYXJlZCBidWZmZXJzIHdpbGwgYmUgaGFuZGxlZCBieSBt ZXJnaW5nIGZlbmNlIGxpc3RzIGZyb20gYWxsCj4gPj4+IHByb2Nlc3NlcyB0aGF0IGRlc3Ryb3kg dGhlbS4gTWl0aWdhdGlvbiBvZiBtYWxpY2lvdXMgYmVoYXZpb3I6Cj4gPj4+Pj4+IC0gSWYgdXNl cnNwYWNlIGRlc3Ryb3lzIGEgYnVzeSBidWZmZXIsIGl0IHdpbGwgZ2V0IGEgR1BVIHBhZ2UgZmF1 bHQuCj4gPj4+Pj4+IC0gSWYgdXNlcnNwYWNlIHNlbmRzIGZlbmNlcyB0aGF0IG5ldmVyIHNpZ25h bCwgdGhlIGtlcm5lbCB3aWxsIGhhdmUgYQo+ID4+PiB0aW1lb3V0IHBlcmlvZCBhbmQgdGhlbiB3 aWxsIHByb2NlZWQgdG8gZGVhbGxvY2F0ZSB0aGUgYnVmZmVyIGFueXdheS4KPiA+Pj4+Pj4gMy40 LiBPdGhlciBub3RlcyBvbiBNTQo+ID4+Pj4+Pgo+ID4+Pj4+PiBPdmVyY29tbWl0bWVudCBvZiBH UFUtYWNjZXNzaWJsZSBtZW1vcnkgd2lsbCBjYXVzZSBhbiBhbGxvY2F0aW9uCj4gPj4+IGZhaWx1 cmUgb3IgaW52b2tlIHRoZSBPT00ga2lsbGVyLiBFdmljdGlvbnMgdG8gR1BVLWluYWNjZXNzaWJs ZSBtZW1vcnkKPiA+Pj4gbWlnaHQgbm90IGJlIHN1cHBvcnRlZC4KPiA+Pj4+Pj4gS2VybmVsIGRy aXZlcnMgY291bGQgbW92ZSB0byB0aGlzIG5ldyBtZW1vcnkgbWFuYWdlbWVudCB0b2RheS4gT25s eQo+ID4+PiBidWZmZXIgcmVzaWRlbmN5IGFuZCBldmljdGlvbnMgd291bGQgc3RvcCB1c2luZyBw ZXItQk8gZmVuY2VzLgo+ID4+Pj4+Pgo+ID4+Pj4+PiA0LiBEZXByZWNhdGluZyBpbXBsaWNpdCBz eW5jaHJvbml6YXRpb24KPiA+Pj4+Pj4KPiA+Pj4+Pj4gSXQgY2FuIGJlIHBoYXNlZCBvdXQgYnkg aW50cm9kdWNpbmcgYSBuZXcgZ2VuZXJhdGlvbiBvZiBoYXJkd2FyZQo+ID4+PiB3aGVyZSB0aGUg ZHJpdmVyIGRvZXNuJ3QgYWRkIHN1cHBvcnQgZm9yIGl0IChsaWtlIGEgZHJpdmVyIGZvcmsgd291 bGQgZG8pLAo+ID4+PiBhc3N1bWluZyB1c2Vyc3BhY2UgaGFzIGFsbCB0aGUgY2hhbmdlcyBmb3Ig ZXhwbGljaXQgc3luY2hyb25pemF0aW9uLiBUaGlzCj4gPj4+IGNvdWxkIHBvdGVudGlhbGx5IGNy ZWF0ZSBhbiBpc29sYXRlZCBwYXJ0IG9mIHRoZSBrZXJuZWwgRFJNIHdoZXJlIGFsbAo+ID4+PiBk cml2ZXJzIG9ubHkgc3VwcG9ydCBleHBsaWNpdCBzeW5jaHJvbml6YXRpb24uCj4gPj4+Pj4+IE1h cmVrCj4gPj4+Pj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCj4gPj4+Pj4+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiA+Pj4+Pj4gZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4+Pj4+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo+ID4+Pj4+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPj4+Pj4gbWVzYS1kZXYgbWFpbGluZyBsaXN0 Cj4gPj4+Pj4gbWVzYS1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPj4+Pj4gaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9tZXNhLWRldgo+ID4+Pgo+ID4+ PiAtLQo+ID4+PiBEYW5pZWwgVmV0dGVyCj4gPj4+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBD b3Jwb3JhdGlvbgo+ID4+PiBodHRwOi8vYmxvZy5mZndsbC5jaAo+ID4+Pgo+Cl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=