From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [PATCH 0/1] drm/xen-zcopy: Add Xen zero-copy helper DRM driver Date: Thu, 19 Apr 2018 11:14:02 +0300 Message-ID: References: <20180329131931.29957-1-andr2000@gmail.com> <5d8fec7f-956c-378f-be90-f45029385740@gmail.com> <20180416192905.GA18096@downor-Z87X-UD5H> <20180417075928.GT31310@phenom.ffwll.local> <20180417205744.GA15930@downor-Z87X-UD5H> <41487acb-a67a-8933-d0c3-702c19b0938e@gmail.com> <20180418170148.GB20588@downor-Z87X-UD5H> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-x241.google.com (mail-lf0-x241.google.com [IPv6:2a00:1450:4010:c07::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 872056E60B for ; Thu, 19 Apr 2018 08:14:07 +0000 (UTC) Received: by mail-lf0-x241.google.com with SMTP id g203-v6so6466122lfg.11 for ; Thu, 19 Apr 2018 01:14:07 -0700 (PDT) In-Reply-To: <20180418170148.GB20588@downor-Z87X-UD5H> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Dongwon Kim Cc: jgross@suse.com, Artem Mygaiev , konrad.wilk@oracle.com, airlied@linux.ie, "Oleksandr_Andrushchenko@epam.com" , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, "Potrola, MateuszX" , xen-devel@lists.xenproject.org, daniel.vetter@intel.com, boris.ostrovsky@oracle.com List-Id: dri-devel@lists.freedesktop.org T24gMDQvMTgvMjAxOCAwODowMSBQTSwgRG9uZ3dvbiBLaW0gd3JvdGU6Cj4gT24gV2VkLCBBcHIg MTgsIDIwMTggYXQgMDk6Mzg6MzlBTSArMDMwMCwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gd3Jv dGU6Cj4+IE9uIDA0LzE3LzIwMTggMTE6NTcgUE0sIERvbmd3b24gS2ltIHdyb3RlOgo+Pj4gT24g VHVlLCBBcHIgMTcsIDIwMTggYXQgMDk6NTk6MjhBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3cm90 ZToKPj4+PiBPbiBNb24sIEFwciAxNiwgMjAxOCBhdCAxMjoyOTowNVBNIC0wNzAwLCBEb25nd29u IEtpbSB3cm90ZToKPj4+Pj4gWWVhaCwgSSBkZWZpbml0ZWx5IGFncmVlIG9uIHRoZSBpZGVhIG9m IGV4cGFuZGluZyB0aGUgdXNlIGNhc2UgdG8gdGhlCj4+Pj4+IGdlbmVyYWwgZG9tYWluIHdoZXJl IGRtYWJ1ZiBzaGFyaW5nIGlzIHVzZWQuIEhvd2V2ZXIsIHdoYXQgeW91IGFyZQo+Pj4+PiB0YXJn ZXR0aW5nIHdpdGggcHJvcG9zZWQgY2hhbmdlcyBpcyBpZGVudGljYWwgdG8gdGhlIGNvcmUgZGVz aWduIG9mCj4+Pj4+IGh5cGVyX2RtYWJ1Zi4KPj4+Pj4KPj4+Pj4gT24gdG9wIG9mIHRoaXMgYmFz aWMgZnVuY3Rpb25hbGl0aWVzLCBoeXBlcl9kbWFidWYgaGFzIGRyaXZlciBsZXZlbAo+Pj4+PiBp bnRlci1kb21haW4gY29tbXVuaWNhdGlvbiwgdGhhdCBpcyBuZWVkZWQgZm9yIGRtYS1idWYgcmVt b3RlIHRyYWNraW5nCj4+Pj4+IChubyBmZW5jZSBmb3J3YXJkaW5nIHRob3VnaCksIGV2ZW50IHRy aWdnZXJpbmcgYW5kIGV2ZW50IGhhbmRsaW5nLCBleHRyYQo+Pj4+PiBtZXRhIGRhdGEgZXhjaGFu Z2UgYW5kIGh5cGVyX2RtYWJ1Zl9pZCB0aGF0IHJlcHJlc2VudHMgZ3JlZnMKPj4+Pj4gKGdyZWZz IGFyZSBzaGFyZWQgaW1wbGljaXRseSBvbiBkcml2ZXIgbGV2ZWwpCj4+Pj4gVGhpcyByZWFsbHkg aXNuJ3QgYSBwb3NpdGl2ZSBkZXNpZ24gYXNwZWN0IG9mIGh5cGVyZG1hYnVmIGltby4gVGhlIGNv cmUKPj4+PiBjb2RlIGluIHhlbi16Y29weSAoaWdub3JpbmcgdGhlIGlvY3RsIHNpZGUsIHdoaWNo IHdpbGwgYmUgY2xlYW5lZCB1cCkgaXMKPj4+PiB2ZXJ5IHNpbXBsZSAmIGNsZWFuLgo+Pj4+Cj4+ Pj4gSWYgdGhlcmUncyBhIGNsZWFyIG5lZWQgbGF0ZXIgb24gd2UgY2FuIGV4dGVuZCB0aGF0LiBC dXQgZm9yIG5vdyB4ZW4temNvcHkKPj4+PiBzZWVtcyB0byBjb3ZlciB0aGUgYmFzaWMgdXNlLWNh c2UgbmVlZHMsIHNvIGdldHMgdGhlIGpvYiBkb25lLgo+Pj4+Cj4+Pj4+IEFsc28gaXQgaXMgZGVz aWduZWQgd2l0aCBmcm9udGVuZCAoY29tbW9uIGNvcmUgZnJhbWV3b3JrKSArIGJhY2tlbmQKPj4+ Pj4gKGh5cGVyIHZpc29yIHNwZWNpZmljIGNvbW0gYW5kIG1lbW9yeSBzaGFyaW5nKSBzdHJ1Y3R1 cmUgZm9yIHBvcnRhYmlsaXR5Lgo+Pj4+PiBXZSBqdXN0IGNhbid0IGxpbWl0IHRoaXMgZmVhdHVy ZSB0byBYZW4gYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGUgc2FtZQo+Pj4+PiB1YXBpcyBub3Qg b25seSBmb3IgWGVuIGJ1dCBhbHNvIG90aGVyIGFwcGxpY2FibGUgaHlwZXJ2aXNvciwgbGlrZSBB Q09STi4KPj4+PiBTZWUgdGhlIGRpc2N1c3Npb24gYXJvdW5kIHVkbWFidWYgYW5kIHRoZSBuZWVk cyBmb3Iga3ZtLiBJIHRoaW5rIHRyeWluZyB0bwo+Pj4+IG1ha2UgYW4gaW9jdGwvdWFwaSB0aGF0 IHdvcmtzIGZvciBtdWx0aXBsZSBoeXBlcnZpc29ycyBpcyBtaXNndWlkZWQgLSBpdAo+Pj4+IGxp a2VseSB3b24ndCB3b3JrLgo+Pj4+Cj4+Pj4gT24gdG9wIG9mIHRoYXQgdGhlIDJuZCBoeXBlcnZp c29yIHlvdSdyZSBhaW1pbmcgdG8gc3VwcG9ydCBpcyBBQ1JOLiBUaGF0J3MKPj4+PiBub3QgZXZl biB1cHN0cmVhbSB5ZXQsIG5vciBoYXZlIEkgc2VlbiBhbnkgcGF0Y2hlcyBwcm9wb3NpbmcgdG8g bGFuZCBsaW51eAo+Pj4+IHN1cHBvcnQgZm9yIEFDUk4uIFNpbmNlIGl0J3Mgbm90IHVwc3RyZWFt LCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgZm9yCj4+Pj4gdXBzdHJlYW0gY29uc2lkZXJhdGlv bi4gSSdtIGRvdWJ0aW5nIHRoYXQgQUNSTiB3aWxsIHVzZSB0aGUgc2FtZSBncmFudAo+Pj4+IHJl ZmVyZW5jZXMgYXMgeGVuLCBzbyB0aGUgc2FtZSB1YXBpIHdvbid0IHdvcmsgb24gQUNSTiBhcyBv biBYZW4gYW55d2F5Lgo+Pj4gWWVhaCwgQUNSTiBkb2Vzbid0IGhhdmUgZ3JhbnQtdGFibGUuIE9u bHkgWGVuIHN1cHBvcnRzIGl0LiBCdXQgdGhhdCBpcyB3aHkKPj4+IGh5cGVyX2RtYWJ1ZiBoYXMg YmVlbiBhcmNoaXRlY3R1cmVkIHdpdGggdGhlIGNvbmNlcHQgb2YgYmFja2VuZC4KPj4+IElmIHlv dSBsb29rIGF0IHRoZSBzdHJ1Y3R1cmUgb2YgYmFja2VuZCwgeW91IHdpbGwgZmluZCB0aGF0Cj4+ PiBiYWNrZW5kIGlzIGp1c3QgYSBzZXQgb2Ygc3RhbmRhcmQgZnVuY3Rpb24gY2FsbHMgYXMgc2hv d24gaGVyZToKPj4+Cj4+PiBzdHJ1Y3QgaHlwZXJfZG1hYnVmX2JrbmRfb3BzIHsKPj4+ICAgICAg ICAgIC8qIGJhY2tlbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZSAob3B0aW9uYWwpICovCj4+PiAg ICAgICAgICBpbnQgKCppbml0KSh2b2lkKTsKPj4+Cj4+PiAgICAgICAgICAvKiBiYWNrZW5kIGNs ZWFudXAgcm91dGluZSAob3B0aW9uYWwpICovCj4+PiAgICAgICAgICBpbnQgKCpjbGVhbnVwKSh2 b2lkKTsKPj4+Cj4+PiAgICAgICAgICAvKiByZXRyZWl2aW5nIGlkIG9mIGN1cnJlbnQgdmlydHVh bCBtYWNoaW5lICovCj4+PiAgICAgICAgICBpbnQgKCpnZXRfdm1faWQpKHZvaWQpOwo+Pj4KPj4+ ICAgICAgICAgIC8qIGdldCBwYWdlcyBzaGFyZWQgdmlhIGh5cGVydmlzb3Itc3BlY2lmaWMgbWV0 aG9kICovCj4+PiAgICAgICAgICBpbnQgKCpzaGFyZV9wYWdlcykoc3RydWN0IHBhZ2UgKipwYWdl cywgaW50IHZtX2lkLAo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZW50cywg dm9pZCAqKnJlZnNfaW5mbyk7Cj4+Pgo+Pj4gICAgICAgICAgLyogbWFrZSBzaGFyZWQgcGFnZXMg dW5zaGFyZWQgdmlhIGh5cGVydmlzb3Igc3BlY2lmaWMgbWV0aG9kICovCj4+PiAgICAgICAgICBp bnQgKCp1bnNoYXJlX3BhZ2VzKSh2b2lkICoqcmVmc19pbmZvLCBpbnQgbmVudHMpOwo+Pj4KPj4+ ICAgICAgICAgIC8qIG1hcCByZW1vdGVseSBzaGFyZWQgcGFnZXMgb24gaW1wb3J0ZXIncyBzaWRl IHZpYQo+Pj4gICAgICAgICAgICogaHlwZXJ2aXNvci1zcGVjaWZpYyBtZXRob2QKPj4+ICAgICAg ICAgICAqLwo+Pj4gICAgICAgICAgc3RydWN0IHBhZ2UgKiogKCptYXBfc2hhcmVkX3BhZ2VzKSh1 bnNpZ25lZCBsb25nIHJlZiwgaW50IHZtX2lkLAo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbmVudHMsIHZvaWQgKipyZWZzX2luZm8pOwo+Pj4KPj4+ ICAgICAgICAgIC8qIHVubWFwIGFuZCBmcmVlIHNoYXJlZCBwYWdlcyBvbiBpbXBvcnRlcidzIHNp ZGUgdmlhCj4+PiAgICAgICAgICAgKiBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZAo+Pj4gICAg ICAgICAgICovCj4+PiAgICAgICAgICBpbnQgKCp1bm1hcF9zaGFyZWRfcGFnZXMpKHZvaWQgKipy ZWZzX2luZm8sIGludCBuZW50cyk7Cj4+Pgo+Pj4gICAgICAgICAgLyogaW5pdGlhbGl6ZSBjb21t dW5pY2F0aW9uIGVudmlyb25tZW50ICovCj4+PiAgICAgICAgICBpbnQgKCppbml0X2NvbW1fZW52 KSh2b2lkKTsKPj4+Cj4+PiAgICAgICAgICB2b2lkICgqZGVzdHJveV9jb21tKSh2b2lkKTsKPj4+ Cj4+PiAgICAgICAgICAvKiB1cHN0cmVhbSBjaCBzZXR1cCAocmVjZWl2aW5nIGFuZCByZXNwb25k aW5nKSAqLwo+Pj4gICAgICAgICAgaW50ICgqaW5pdF9yeF9jaCkoaW50IHZtX2lkKTsKPj4+Cj4+ PiAgICAgICAgICAvKiBkb3duc3RyZWFtIGNoIHNldHVwICh0cmFuc21pdHRpbmcgYW5kIHBhcnNp bmcgcmVzcG9uc2VzKSAqLwo+Pj4gICAgICAgICAgaW50ICgqaW5pdF90eF9jaCkoaW50IHZtX2lk KTsKPj4+Cj4+PiAgICAgICAgICBpbnQgKCpzZW5kX3JlcSkoaW50IHZtX2lkLCBzdHJ1Y3QgaHlw ZXJfZG1hYnVmX3JlcSAqcmVxLCBpbnQgd2FpdCk7Cj4+PiB9Owo+Pj4KPj4+IEFsbCBvZiB0aGVz ZSBjYW4gYmUgbWFwcGVkIHdpdGggYW55IGh5cGVydmlzb3Igc3BlY2lmaWMgaW1wbGVtZW50YXRp b24uCj4+PiBXZSBkZXNpZ25lZCBiYWNrZW5kIGltcGxlbWVudGF0aW9uIGZvciBYZW4gdXNpbmcg Z3JhbnQtdGFibGUsIFhlbiBldmVudAo+Pj4gYW5kIHJpbmcgYnVmZmVyIGNvbW11bmljYXRpb24u IEZvciBBQ1JOLCB3ZSBoYXZlIGFub3RoZXIgYmFja2VuZCB1c2luZyBWaXJ0LUlPCj4+PiBmb3Ig Ym90aCBtZW1vcnkgc2hhcmluZyBhbmQgY29tbXVuaWNhdGlvbi4KPj4+Cj4+PiBXZSB0cmllZCB0 byBkZWZpbmUgdGhpcyBzdHJ1Y3R1cmUgb2YgYmFja2VuZCB0byBtYWtlIGl0IGdlbmVyYWwgZW5v dWdoIChvcgo+Pj4gaXQgY2FuIGJlIGV2ZW4gbW9kaWZpZWQgb3IgZXh0ZW5kZWQgdG8gc3VwcG9y dCBtb3JlIGNhc2VzLikgc28gdGhhdCBpdCBjYW4KPj4+IGZpdCB0byBvdGhlciBoeXBlcnZpc29y IGNhc2VzLiBPbmx5IHJlcXVpcmVtZW50cy9leHBlY3RhdGlvbiBvbiB0aGUgaHlwZXJ2aXNvcgo+ Pj4gYXJlIHBhZ2UtbGV2ZWwgbWVtb3J5IHNoYXJpbmcgYW5kIGludGVyLWRvbWFpbiBjb21tdW5p Y2F0aW9uLCB3aGljaCBJIHRoaW5rCj4+PiBhcmUgc3RhbmRhcmQgZmVhdHVyZXMgb2YgbW9kZXJu IGh5cGVydmlzb3IuCj4+Pgo+Pj4gQW5kIHBsZWFzZSByZXZpZXcgY29tbW9uIFVBUElzIHRoYXQg aHlwZXJfZG1hYnVmIGFuZCB4ZW4temNvcHkgc3VwcG9ydHMuIFRoZXkKPj4+IGFyZSB2ZXJ5IGdl bmVyYWwuIE9uZSBpcyBnZXR0aW5nIEZEIChkbWFidWYpIGFuZCBnZXQgdGhvc2Ugc2hhcmVkLiBU aGUgb3RoZXIKPj4+IGlzIGdlbmVyYXRpbmcgZG1hYnVmIGZyb20gZ2xvYmFsIGhhbmRsZSAoc2Vj dXJlIGhhbmRsZSBoaWRpbmcgZ3JlZiBiZWhpbmQgaXQpLgo+Pj4gT24gdG9wIG9mIHRoaXMsIGh5 cGVyX2RtYWJ1ZiBoYXMgInVuc2hhcmUiIGFuZCAicXVlcnkiIHdoaWNoIGFyZSBhbHNvIHVzZWZ1 bAo+Pj4gZm9yIGFueSBjYXNlcy4KPj4+Cj4+PiBTbyBJIGRvbid0IGtub3cgd2h5IHdlIHdvdWxk bid0IHdhbnQgdG8gdHJ5IHRvIG1ha2UgdGhlc2Ugc3RhbmRhcmQgaW4gbW9zdCBvZgo+Pj4gaHlw ZXJ2aXNvciBjYXNlcyBpbnN0ZWFkIG9mIGxpbWl0aW5nIGl0IHRvIGNlcnRhaW4gaHlwZXJ2aXNv ciBsaWtlIFhlbi4KPj4+IEZyb250ZW5kLWJhY2tlbmQgc3RydWN0cmUgaXMgb3B0aW1hbCBmb3Ig dGhpcyBJIHRoaW5rLgo+Pj4KPj4+Pj4gU28gSSBhbSB3b25kZXJpbmcgd2UgY2FuIHN0YXJ0IHdp dGggdGhpcyBoeXBlcl9kbWFidWYgdGhlbiBtb2RpZnkgaXQgZm9yCj4+Pj4+IHlvdXIgdXNlLWNh c2UgaWYgbmVlZGVkIGFuZCBwb2xpc2ggYW5kIGZpeCBhbnkgZ2xpdGNoZXMgaWYgd2Ugd2FudCB0 bwo+Pj4+PiB0byB1c2UgdGhpcyBmb3IgYWxsIGdlbmVyYWwgZG1hLWJ1ZiB1c2VjYXNlcy4KPj4+ PiBJbW8geGVuLXpjb3B5IGlzIGEgbXVjaCBtb3JlIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQg Zm9yIHVwc3RyZWFtLCB3aGljaAo+Pj4+IGNhbiB0aGVuIGJlIGV4dGVuZGVkIChpZiByZWFsbHkg cHJvdmVuIHRvIGJlIG5lY2Vzc2FyeSkuCj4+Pj4KPj4+Pj4gQWxzbywgSSBzdGlsbCBoYXZlIG9u ZSB1bnJlc29sdmVkIHF1ZXN0aW9uIHJlZ2FyZGluZyB0aGUgZXhwb3J0L2ltcG9ydCBmbG93Cj4+ Pj4+IGluIGJvdGggb2YgaHlwZXJfZG1hYnVmIGFuZCB4ZW4temNvcHkuCj4+Pj4+Cj4+Pj4+IEBk YW52ZXQ6IFdvdWxkIHRoaXMgZmxvdyAoZ3Vlc3QxLT5pbXBvcnQgZXhpc3RpbmcgZG1hYnVmLT5z aGFyZSB1bmRlcmx5aW5nCj4+Pj4+IHBhZ2VzLT5ndWVzdDItPm1hcCBzaGFyZWQgcGFnZXMtPmNy ZWF0ZS9leHBvcnQgZG1hYnVmKSBiZSBhY2NlcHRhYmxlIG5vdz8KPj4+PiBJIHRoaW5rIGlmIHlv dSBqdXN0IGxvb2sgYXQgdGhlIHBhZ2VzLCBhbmQgbWFrZSBzdXJlIHlvdSBoYW5kbGUgdGhlCj4+ Pj4gc2dfcGFnZSA9PSBOVUxMIGNhc2UgaXQncyBvay1pc2guIEl0J3Mgbm90IGdyZWF0LCBidXQg bW9zdGx5IGl0IHNob3VsZAo+Pj4+IHdvcmsuIFRoZSByZWFsIHRyb3VibGUgd2l0aCBoeXBlcmRt YWJ1ZiB3YXMgdGhlIGZvcndhcmRpbmcgb2YgYWxsIHRoZXNlCj4+Pj4gY2FsbHMsIGluc3RlYWQg b2YganVzdCBwYXNzaW5nIGFyb3VuZCBhIGxpc3Qgb2YgZ3JhbnQgcmVmZXJlbmNlcy4KPj4+IEkg dGFsa2VkIHRvIGRhbnZldCBhYm91dCB0aGlzIGxpdHRlIGJpdC4KPj4+Cj4+PiBJIHRoaW5rIHRo ZXJlIHdhcyBzb21lIG1pc3VuZGVyc3RhbmRpbmcgb24gdGhpcyAiZm9yd2FyZGluZyIuIEV4cG9y dGluZwo+Pj4gYW5kIGltcG9ydGluZyBmbG93IGluIGh5cGVyX2RtYWJ1ZiBhcmUgYmFzaWNhbGx5 IHNhbWUgYXMgeGVuLXpjb3B5J3MuIEkgdGhpbmsKPj4+IHdoYXQgbWFkZSBjb25mdXNpb24gd2Fz IHRoYXQgaW1wb3J0aW5nIGRvbWFpbiBub3RpZmllcyBleHBvcnRpbmcgZG9tYWluIHdoZW4KPj4+ IHRoZXJlIGFyZSBkbWFidWYgb3BlcmF0aW9ucyAobGlrZSBhdHRhY2gsIG1hcHBpbmcsIGRldGFj aCBhbmQgcmVsZWFzZSkgc28gdGhhdAo+Pj4gZXhwb3J0aW5nIGRvbWFpbiBjYW4gdHJhY2sgdGhl IHVzYWdlIG9mIGRtYWJ1ZiBvbiB0aGUgaW1wb3J0aW5nIGRvbWFpbi4KPj4+Cj4+PiBJIGRlc2ln bmVkIHRoaXMgZm9yIHNvbWUgYmFzaWMgdHJhY2tpbmcuIFdlIG1heSBub3QgbmVlZCB0byBub3Rp ZnkgZm9yIGV2ZXJ5Cj4+PiBkaWZmZXJlbnQgYWN0aXZpdHkgYnV0IGlmIG5vbmUgb2YgdGhlbSBp cyB0aGVyZSwgZXhwb3J0aW5nIGRvbWFpbiBjYW4ndAo+Pj4gZGV0ZXJtaW5lIGlmIGl0IGlzIG9r IHRvIHVuc2hhcmUgdGhlIGJ1ZmZlciBvciB0aGUgb3JpZ2luYXRvciAobGlrZSBpOTE1KQo+Pj4g Y2FuIGZyZWUgdGhlIG9iamVjdCBldmVuIGlmIGl0J3MgYmVpbmcgYWNjZXNzZWQgaW4gaW1wb3J0 aW5nIGRvbWFpbi4KPj4+Cj4+PiBBbnl3YXkgSSByZWFsbHkgaG9wZSB3ZSBjYW4gaGF2ZSBlbm91 Z2ggZGlzY3Vzc2lvbiBhbmQgcmVzb2x2ZSBhbGwgY29uY2VybnMKPj4+IGJlZm9yZSBuYWlsaW5n IGl0IGRvd24uCj4+IExldCBtZSBleHBsYWluIGhvdyB0aGlzIHdvcmtzIGluIGNhc2Ugb2YgcGFy YS12aXJ0dWFsIGRpc3BsYXkKPj4gdXNlLWNhc2Ugd2l0aCB4ZW4temNvcHkuCj4+Cj4+IDEuIFRo ZXJlIGFyZSA0IGNvbXBvbmVudHMgaW4gdGhlIHN5c3RlbToKPj4gIMKgIC0gZGlzcGxpZiBwcm90 b2NvbCBbMV0KPj4gIMKgIC0geGVuLWZyb250IC0gcGFyYS12aXJ0dWFsIERSTSBkcml2ZXIgcnVu bmluZyBpbiBEb21VIChHdWVzdCkgVk0KPj4gIMKgIC0gYmFja2VuZCAtIHVzZXItc3BhY2UgYXBw bGljYXRpb24gcnVubmluZyBpbiBEb20wCj4+ICDCoCAtIHhlbi16Y29weSAtIERSTSAoYXMgb2Yg bm93KSBoZWxwZXIgZHJpdmVyIHJ1bm5pbmcgaW4gRG9tMAo+Pgo+PiAyLiBBbGwgdGhlIGNvbW11 bmljYXRpb24gYmV0d2VlbiBkb21haW5zIGhhcHBlbnMgYmV0d2VlbiB4ZW4tZnJvbnQgYW5kIHRo ZQo+PiBiYWNrZW5kLCBzbyBpdCBpcyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgcGFyYS12aXJ0dWFs IGRpc3BsYXkgdXNlLWNhc2UKPj4gd2l0aG91dCB4ZW4temNvcHkgYXQgYWxsICh0aGlzIGlzIHdo eSBpdCBpcyBhIGhlbHBlciBkcml2ZXIpLCBidXQgaW4gdGhpcwo+PiBjYXNlCj4+IG1lbW9yeSBj b3B5aW5nIG9jY3VycyAodGhpcyBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMgZGlzY3Vzc2lvbiku Cj4+Cj4+IDMuIFRvIGJldHRlciB1bmRlcnN0YW5kIHNlY3VyaXR5IGlzc3VlcyBsZXQncyBzZWUg d2hhdCB1c2UtY2FzZXMgd2UgaGF2ZToKPj4KPj4gMy4xIHhlbi1mcm9udCBleHBvcnRzIGl0cyBk bWEtYnVmIChkdW1iKSB0byB0aGUgYmFja2VuZAo+Pgo+PiBJbiB0aGlzIGNhc2UgdGhlcmUgYXJl IG5vIHNlY3VyaXR5IGlzc3VlcyBhdCBhbGwgYXMgRG9tMCAoYmFja2VuZCBzaWRlKQo+PiB3aWxs IHVzZSBEb21VJ3MgcGFnZXMgKHhlbi1mcm9udCBzaWRlKSBhbmQgRG9tMCBpcyBhIHRydXN0ZWQg ZG9tYWluLCBzbwo+PiB3ZSBhc3N1bWUgaXQgd29uJ3QgaHVydCBEb21VLiBFdmVuIGlmIERvbVUg ZGllcyBub3RoaW5nIGJhZCBoYXBwZW5zIHRvIERvbTAuCj4+IElmIERvbVUgbWlzYmVoYXZlcyBp dCBjYW4gb25seSB3cml0ZSB0byBpdHMgb3duIHBhZ2VzIHNoYXJlZCB3aXRoIERvbTAsIGJ1dAo+ PiBzdGlsbAo+PiBjYW5ub3QgZ28gYmV5b25kIHRoYXQsIGUuZy4gaXQgY2FuJ3QgYWNjZXNzIERv bTAncyBtZW1vcnkuCj4+Cj4+IDMuMiBCYWNrZW5kIGV4cG9ydHMgZG1hLWJ1ZiB0byB4ZW4tZnJv bnQKPj4KPj4gSW4gdGhpcyBjYXNlIERvbTAgcGFnZXMgYXJlIHNoYXJlZCB3aXRoIERvbVUuIEFz IGJlZm9yZSwgRG9tVSBjYW4gb25seSB3cml0ZQo+PiB0byB0aGVzZSBwYWdlcywgbm90IGFueSBv dGhlciBwYWdlIGZyb20gRG9tMCwgc28gaXQgY2FuIGJlIHN0aWxsIGNvbnNpZGVyZWQKPj4gc2Fm ZS4KPj4gQnV0LCB0aGUgZm9sbG93aW5nIG11c3QgYmUgY29uc2lkZXJlZCAoaGlnaGxpZ2h0ZWQg aW4geGVuLWZyb250J3MgS2VybmVsCj4+IGRvY3VtZW50YXRpb24pOgo+PiAgwqAtIElmIGd1ZXN0 IGRvbWFpbiBkaWVzIHRoZW4gcGFnZXMvZ3JhbnRzIHJlY2VpdmVkIGZyb20gdGhlIGJhY2tlbmQg Y2Fubm90Cj4+ICDCoMKgIGJlIGNsYWltZWQgYmFjayAtIHRoaW5rIG9mIGl0IGFzIG1lbW9yeSBs b3N0IHRvIERvbTAgKHdvbid0IGJlIHVzZWQgZm9yCj4+IGFueQo+PiAgwqDCoCBvdGhlciBndWVz dCkKPj4gIMKgLSBNaXNiZWhhdmluZyBndWVzdCBtYXkgc2VuZCB0b28gbWFueSByZXF1ZXN0cyB0 byB0aGUgYmFja2VuZCBleGhhdXN0aW5nCj4+ICDCoMKgIGl0cyBncmFudCByZWZlcmVuY2VzIGFu ZCBtZW1vcnkgKGNvbnNpZGVyIHRoaXMgZnJvbSBzZWN1cml0eSBQT1YpLiBBcyB0aGUKPj4gIMKg wqAgYmFja2VuZCBydW5zIGluIHRoZSB0cnVzdGVkIGRvbWFpbiB3ZSBhbHNvIGFzc3VtZSB0aGF0 IGl0IGlzIHRydXN0ZWQgYXMKPj4gd2VsbCwKPj4gIMKgwqAgZS5nLiBtdXN0IHRha2UgbWVhc3Vy ZXMgdG8gcHJldmVudCBERG9TIGF0dGFja3MuCj4+Cj4gVGhlcmUgaXMgYW5vdGhlciBzZWN1cml0 eSBpc3N1ZSB0aGF0IHRoaXMgZHJpdmVyIGl0c2VsZiBjYW4gY2F1c2UuIFVzaW5nIHRoZQo+IGdy YW50LXJlZmVyZW5jZSBhcyBpcyBpcyBub3QgdmVyeSBzYWZlIGJlY2F1c2UgaXQncyBlYXN5IHRv IGd1ZXNzIChjb3VudGluZwo+IG51bWJlciBwcm9iYWJseSkgYW5kIGFueSBhdHRhY2tlcnMgcnVu bmluZyBvbiB0aGUgc2FtZSBpbXBvcnRpbmcgZG9tYWluIGNhbgo+IHVzZSB0aGVzZSByZWZlcmVu Y2VzIHRvIG1hcCBzaGFyZWQgcGFnZXMgYW5kIGFjY2VzcyB0aGUgZGF0YS4gVGhpcyBpcyB3aHkg d2UKPiBpbXBsZW1lbnRlZCAiaHlwZXJfZG1hYnVmX2lkIiB0aGF0IGNvbnRhaW5zIDk2IGJpdCBy YW5kb20gbnVtYmVyIHRvIG1ha2UgaXQKPiBhbG1vc3QgaW1wb3NzaWJsZSB0byBndWVzcy4KWWVz LCB0aGVyZSBpcyBzb21ldGhpbmcgdG8gdGhpbmsgYWJvdXQgaW4gZ2VuZXJhbCwgbm90IHJlbGF0 ZWQKdG8gZG1hLWJ1Zi96Y29weS4gVGhpcyBpcyBhIHF1ZXN0aW9uIHRvIFhlbiBjb21tdW5pdHkg d2hhdCB0aGV5CnNlZSBhcyB0aGUgcmlnaHQgYXBwcm9hY2ggaGVyZS4KPiAgIEFsbCBncmFudCBy ZWZlcmVuY2VzIGZvciBwYWdlcyBhcmUgc2hhcmVkIGluIHRoZQo+IGRyaXZlciBsZXZlbC4gVGhp cyBpcyBhbm90aGVyIHJlYXNvbiBmb3IgaGF2aW5nIGludGVyLVZNIGNvbW0uCj4KPj4gNC4geGVu LWZyb250L2JhY2tlbmQveGVuLXpjb3B5IHN5bmNocm9uaXphdGlvbgo+Pgo+PiA0LjEuIEFzIEkg YWxyZWFkeSBzYWlkIGluIDIpIGFsbCB0aGUgaW50ZXIgVk0gY29tbXVuaWNhdGlvbiBoYXBwZW5z IGJldHdlZW4KPj4geGVuLWZyb250IGFuZCB0aGUgYmFja2VuZCwgeGVuLXpjb3B5IGlzIE5PVCBp bnZvbHZlZCBpbiB0aGF0Lgo+IFllYWgsIHVuZGVyc3Rvb2QgYnV0IHRoaXMgaXMgYWxzbyBteSBw b2ludC4gQm90aCBoeXBlcl9kbWFidWYgYW5kIHhlbi16Y29weQo+IGlzIGEgZHJpdmVyIHRoYXQg ZXhwYW5kcyBkbWFidWYgc2hhcmluZyB0byBpbnRlci1WTSBsZXZlbC4gVGhlbiBzaG91bGRuJ3Qg dGhpcwo+IGRyaXZlciBpdHNlbGYgcHJvdmlkZSBzb21lIHdheSB0byBzeW5jaHJvbml6ZSBiZXR3 ZWVuIHR3byBWTXM/Ck5vLCBiZWNhdXNlIHhlbi16Y29weSBpcyBhICpoZWxwZXIqIGRyaXZlciwg bm90IG1vcmUuCj4gICBJIHRoaW5rIHRoZQo+IGFzc3VtcHRpb24gYmVoaW5kIHRoaXMgaXMgdGhh dCBYZW4gUFYgZGlzcGxheSBpbnRlcmZhY2UgYW5kIGJhY2tlbmQgKHJ1bm5pbmcKPiBvbiB0aGUg dXNlcnNwYWNlKSBhcmUgdXNlZCB0b2dldGhlciB3aXRoIHhlbi16Y29weQpCYWNrZW5kIG1heSB1 c2UgeGVuLXpjb3B5IG9yIG1heSBub3QgLSBpdCBkZXBlbmRzIGlmIHlvdSBuZWVkCnplcm8gY29w eSBvciBub3QsIGUuZy4gaXQgaXMgbm90IGEgbXVzdCBmb3IgdGhlIGJhY2tlbmQKPiBidXQgd2hh dCBpZiBhbiB1c2VyIHNwYWNlCj4ganVzdCB3YW50IHRvIHVzZSB4ZW4temNvcHkgc2VwYXJhdGVs eT8gU2luY2UgaXQgZXhwb3NlcyBpb2N0bHMsIHRoaXMgaXMKPiBwb3NzaWJsZSB1bmxlc3MgeW91 IGFkZCBzb21lIGRlcGVuZGVuY3kgY29uZmlndXJhdGlvbiB0aGVyZS4KSXQgaXMgcG9zc2libGUs IGFueSBiYWNrZW5kICh1c2VyLXNwYWNlIGFwcGxpY2F0aW9uKSBjYW4gdXNlIHhlbi16Y29weQpF dmVuIG1vcmUsIG9uZSBjYW4gZXh0ZW5kIGl0IHRvIHByb3ZpZGUga2VybmVsIHNpZGUgQVBJCj4K Pj4gV2hlbiB4ZW4tZnJvbnQgd2FudHMgdG8gZGVzdHJveSBhIGRpc3BsYXkgYnVmZmVyIChkdW1i L2RtYS1idWYpIGl0IGlzc3VlcyBhCj4+IFhFTkRJU1BMX09QX0RCVUZfREVTVFJPWSBjb21tYW5k IChvcHBvc2l0ZSB0byBYRU5ESVNQTF9PUF9EQlVGX0NSRUFURSkuCj4+IFRoaXMgY2FsbCBpcyBz eW5jaHJvbm91cywgc28geGVuLWZyb250IGV4cGVjdHMgdGhhdCBiYWNrZW5kIGRvZXMgZnJlZSB0 aGUKPj4gYnVmZmVyIHBhZ2VzIG9uIHJldHVybi4KPiBEb2VzIGl0IG1lYW4gaW1wb3J0aW5nIGRv bWFpbiAoZG9tMCBhc3N1bWluZyB3ZSBkbyBkb21VIC0+IGRvbTAgZG1hYnVmCj4gZXhwb3J0aW5n KSBtYWtlcyBhIGRlc3RvcnkgcmVxdWVzdCB0byB0aGUgZXhwb3J0aW5nIFZNPwpObywgdGhlIHJl cXVlc3RlciBpcyBhbHdheXMgRG9tVSwgc28gImRlc3Ryb3kgYnVmZmVyIiByZXF1ZXN0CndpbGwg YWx3YXlzIGNvbWUgZnJvbSBEb21VCj4gICBCdXQgaXNuJ3QgaXQKPiB0aGUgZG9tVSB0byBtYWtl IHN1Y2ggZGVjaXNpb24gc2luY2UgaXQncyB0aGUgb3duZXIgb2YgYnVmZmVyLgpTZWUgYWJvdmUK Pgo+IEFuZCB3aGF0IGFib3V0IHRoZSBvdGhlciB3YXkgYXJvdW5kPyBGb3IgZXhhbXBsZSwgd2hh dCBoYXBwZW5zIGlmIHRoZQo+IG9yaWdpbmF0b3Igb2YgYnVmZmVyIChsaWtlIGk5MTUpIGRlY2lk ZXMgdG8gZnJlZSB0aGUgb2JqZWN0IGJlaGluZCBkbWFidWY/CkZvciB0aGF0IHJlYXNvbiB0aGVy ZSBpcyByZWYtY291bnRpbmcgZm9yIGRtYS1idWYsIGUuZy4KaWYgaTkxNSBkZWNpZGVzIHRvIGZy ZWUgdGhlbiB0aGUgYmFja2VuZCAoaW4gbXkgY2FzZSkgc3RpbGwgaG9sZHMKdGhlIGJ1ZmZlciwg dGh1cyBub3QgYWxsb3dpbmcgaXQgZG8gZGlzYXBwZWFyLiBCYXNpY2FsbHksIHRoaXMgaXMKdGhl IGJhY2tlbmQgd2hpY2ggY3JlYXRlcyBkbWEtYnVmIGZyb20gcmVmcyBhbmQgb3ducyBpdC4KPiBX b3VsZCBpOTE1IG9yIGV4cG9ydGluZyBzaWRlIG9mIHhlbi16Y29weSBrbm93IHdoZXRoZXIgZG9t MCBjdXJyZW50bHkKPiB1c2VzIHRoZSBkbWFidWYgb3Igbm90PwpXaHkgZG8geW91IG5lZWQgdGhp cyB0byBrbm93IChwcm9iYWJseSBJIGRvbid0IHVuZGVyc3RhbmQgdGhlIHVzZS1jYXNlKS4KSSBj b3VsZCBiZSBvYnZpb3VzIGhlcmUsIGJ1dCBpZiByZWYtY291bnQgb2YgdGhlIGRtYS1idWYgaXMg bm90IHplcm8KaXQgaXMgc3RpbGwgZXhpc3RzIGFuZCB1c2VkPwo+Cj4gQW5kIGFnYWluLCBJIHRo aW5rIHRoaXMgdHJhY2tpbmcgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIGRyaXZlciBpdHNlbGYK PiBpbXBsaWNpdGx5IHdpdGhvdXQgYW55IHVzZXJzcGFjZSBpbnZvbHZlbWVudCBpZiB3ZSB3YW50 IHRvIHRoaXMgZG1hYnVmCj4gc2hhcmluZyBleGlzdCBhcyBhIGdlbmVyaWMgZmVhdHVyZS4KV2h5 IG5vdCBhbGxvdyBkbWEtYnVmIExpbnV4IGZyYW1ld29yayBkbyB0aGF0IGZvciB5b3U/Cj4KPj4g NC4yLiBCYWNrZW5kLCBvbiBYRU5ESVNQTF9PUF9EQlVGX0RFU1RST1k6Cj4+ICDCoCAtIGNsb3Nl cyBhbGwgZHVtYiBoYW5kbGVzL2ZkJ3Mgb2YgdGhlIGJ1ZmZlciBhY2NvcmRpbmcgdG8gWzNdCj4+ ICDCoCAtIGlzc3VlcyBEUk1fSU9DVExfWEVOX1pDT1BZX0RVTUJfV0FJVF9GUkVFIElPQ1RMIHRv IHhlbi16Y29weSB0byBtYWtlCj4+IHN1cmUKPj4gIMKgwqDCoCB0aGUgYnVmZmVyIGlzIGZyZWVk ICh0aGluayBvZiBpdCBhcyBpdCB3YWl0cyBmb3IgZG1hLWJ1Zi0+cmVsZWFzZQo+PiBjYWxsYmFj aykKPj4gIMKgIC0gcmVwbGllcyB0byB4ZW4tZnJvbnQgdGhhdCB0aGUgYnVmZmVyIGNhbiBiZSBk ZXN0cm95ZWQuCj4+IFRoaXMgd2F5IGRlbGV0aW9uIG9mIHRoZSBidWZmZXIgaGFwcGVucyBzeW5j aHJvbm91c2x5IG9uIGJvdGggRG9tMCBhbmQgRG9tVQo+PiBzaWRlcy4gSW4gY2FzZSBpZiBEUk1f SU9DVExfWEVOX1pDT1BZX0RVTUJfV0FJVF9GUkVFIHJldHVybnMgd2l0aCB0aW1lLW91dAo+PiBl cnJvcgo+PiAoQlRXLCB3YWl0IHRpbWUgaXMgYSBwYXJhbWV0ZXIgb2YgdGhpcyBJT0NUTCksIFhl biB3aWxsIGRlZmVyIGdyYW50Cj4+IHJlZmVyZW5jZQo+PiByZW1vdmFsIGFuZCB3aWxsIHJldHJ5 IGxhdGVyIHVudGlsIHRob3NlIGFyZSBmcmVlLgo+Pgo+PiBIb3BlIHRoaXMgaGVscHMgdW5kZXJz dGFuZCBob3cgYnVmZmVycyBhcmUgc3luY2hyb25vdXNseSBkZWxldGVkIGluIGNhc2UKPj4gb2Yg eGVuLXpjb3B5IHdpdGggYSBzaW5nbGUgcHJvdG9jb2wgY29tbWFuZC4KPj4KPj4gSSB0aGluayB0 aGUgYWJvdmUgbG9naWMgY2FuIGFsc28gYmUgcmUtdXNlZCBieSB0aGUgaHlwZXItZG1hYnVmIGRy aXZlciB3aXRoCj4+IHNvbWUgYWRkaXRpb25hbCB3b3JrOgo+Pgo+PiAxLiB4ZW4temNvcHkgY2Fu IGJlIHNwbGl0IGludG8gMiBwYXJ0cyBhbmQgZXh0ZW5kOgo+PiAxLjEuIFhlbiBnbnRkZXYgZHJp dmVyIFs0XSwgWzVdIHRvIGFsbG93IGNyZWF0aW5nIGRtYS1idWYgZnJvbSBncmVmcyBhbmQKPj4g dmlzZSB2ZXJzYSwKPj4gaW1wbGVtZW50ICJ3YWl0IiBpb2N0bCAod2FpdCBmb3IgZG1hLWJ1Zi0+ cmVsZWFzZSk6IGN1cnJlbnRseSB0aGVzZSBhcmUKPj4gRFJNX1hFTl9aQ09QWV9EVU1CX0ZST01f UkVGUywgRFJNX1hFTl9aQ09QWV9EVU1CX1RPX1JFRlMgYW5kCj4+IERSTV9YRU5fWkNPUFlfRFVN Ql9XQUlUX0ZSRUUKPj4gMS4yLiBYZW4gYmFsbG9vbiBkcml2ZXIgWzZdIHRvIGFsbG93IGFsbG9j YXRpbmcgY29udGlndW91cyBidWZmZXJzIChub3QKPj4gbmVlZGVkCj4+IGJ5IGN1cnJlbnQgaHlw ZXItZG1hYnVmLCBidXQgaXMgYSBtdXN0IGZvciB4ZW4temNvcHkgdXNlLWNhc2VzKQo+IE5vdCBz dXJlIGhvdyB0byBtYXRjaCBvdXIgdXNlIGNhc2UgdG8geGVuLXpjb3B5J3MgY2FzZSBidXQgd2Ug ZG9uJ3QgZG8gYWxsb2MKPiAvZnJlZSBhbGwgdGhlIHRpbWUuCldlIGFsc28gZG9uJ3QKPiAgIEFs c28sIGRvbTAgd29uJ3QgbWFrZSBhbnkgZnJlZWluZyByZXF1ZXN0IHRvIGRvbVUgc2luY2UgaXQK PiBkb2Vzbid0IG93biB0aGUgYnVmZmVyLiBJdCBvbmx5IGZvbGxvd3MgZG1hYnVmIHByb3RvY29s IGFzIHN1Y2ggYXR0YWNoL2RldGFjaAo+IC9yZWxlYXNlLApTaW1pbGFyIGhlcmUKPiAgIHdoaWNo IGFyZSB0cmFja2VkIGJ5IGRvbVUgKGV4cG9ydGluZyBWTSkuIEFuZCBmb3IgZGVzdHJ1Y3Rpb24g b2YKPiBzaGFyaW5nLCB3ZSBoYXZlIHNlcGFyYXRlIElPQ1RMIGZvciB0aGF0LCB3aGljaCByZXZv a2UgZ3JhbnQgcmVmZXJlbmNlcyAiSUYiCj4gdGhlcmUgaXMgbm8gZHJpdmVycyBhdHRhY2hlZCB0 byB0aGUgZG1hYnVmIGluIGRvbTAuIE90aGVyd2lzZSwgaXQgc2NoZWR1bGVzCj4gZGVzdHJ1Y3Rp b24gb2Ygc2hhcmluZyB1bnRpbCBpdCBnZXRzIGZpbmFsIGRtYWJ1ZiByZWxlYXNlIG1lc3NhZ2Ug ZnJvbSBkb20wLgpXZSBibG9jayBpbnN0ZWFkIHdpdGggM3NlYyB0aW1lb3V0ICsgc29tZSBvdGhl ciBsb2dpYwoob3V0IG9mIGNvbnRleHQgbm93KQo+Cj4gQWxzbywgaW4gb3VyIHVzZWNhc2UsIChh bHRob3VnaCB3ZSBkaWRuJ3QgaW50ZW5kIHRvIGRvIHNvKSBpdCBlbmRzIHVwIHVzaW5nCj4gM340 IGJ1ZmZlcnMgcmVwZWF0ZWx5LgoyLTMgaW4gb3VyIHVzZS1jYXNlcwo+IFRoaXMgaXMgYmVjYXVz ZSBEUk0gaW4gZG9tVSAodGhhdCByZW5kZXJzKSBkb2Vzbid0Cj4gYWxsb2NhdGUgbW9yZSBvYmpl Y3QgZm9yIEVHTCBpbWFnZSBzaW5jZSB0aGVyZSBpcyBhbHdheXMgZnJlZSBvYmplY3RzIHVzZWQK PiBiZWZvcmUgZXhpc3QgaW4gdGhlIGxpc3QuIEFuZCB3ZSBhY3R1YWxseSBkb24ndCBkbyBmdWxs LXBhdGggZXhwb3J0aW5nCj4gKGV4dHJhY3RpbmcgcGFnZXMgLT4gZ3JhbnQtcmVmZXJlbmNlcyAt PiBnZXQgdGhvc2Ugc2hhcmVkKSBhbGwgdGhlIHRpbWUuCj4gSWYgdGhlIHNhbWUgZG1hYnVmIGlz IGV4cG9ydGVkIGFscmVhZHksIHdlIGp1c3QgdXBkYXRlIHByaXZhdGUgbWVzc2FnZSB0aGVuCj4g bm90aWZpZXMgZG9tMCAocmVhc29uIGZvciBoYXNoIHRhYmxlcyBmb3Iga2VlcGluZyBleHBvcnRl ZCBhbmQgaW1wb3J0ZXIKPiBkbWFidWZzKS4KSW4gbXkgY2FzZSB0aGVzZSAyLTMgYnVmZmVycyBh cmUgYWxsb2NhdGVkIGF0IHN0YXJ0IGFuZCBub3QgZnJlZWQKdW50aWwgdGhlIGVuZCAtIHRoZXNl IGFyZSB1c2VkIGFzIGZyYW1lIGJ1ZmZlcnMgd2hpY2ggYXJlIGNvbnN0YW50bHkKZmxpcHBlZC4g U28sIGluIG15IGNhc2UgdGhlcmUgaXMgbm8gbXVjaCBwcm9maXQgaW4gdHJ5aW5nIHRvIGNhY2hl CndoaWNoIGFkZHMgdW5uZWVkZWQgY29tcGxleGl0eSAoaW4gbXkgdXNlLWNhc2UsIG9mIGNvdXJz ZSkuCklmIHRob3NlIDMtNCBidWZmZXJzIHlvdSBhbGxvY2F0ZSBhcmUgdGhlIG9ubHkgYnVmZmVy cyB1c2VkIHlvdSBtYXkKYWxzbyB0cnkgZ29pbmcgd2l0aG91dCBjYWNoaW5nLCBidXQgdGhpcyBk ZXBlbmRzIG9uIHlvdXIgdXNlLWNhc2UKCj4+IDIuIFRoZW4gaHlwZXItZG1hYnVmIHVzZXMgWGVu IGdudGRldiBkcml2ZXIgZm9yIFhlbiBzcGVjaWZpYyBkbWEtYnVmCj4+IGFsbG9jL2ZyZWUvd2Fp dAo+Pgo+PiAzLiBoeXBlci1kbWFidWYgdXNlcyBpdHMgb3duIHByb3RvY29sIGJldHdlZW4gVk1z IHRvIGNvbW11bmljYXRlIGJ1ZmZlcgo+PiBjcmVhdGlvbi9kZWxldGlvbiBhbmQgd2hhdGV2ZXIg ZWxzZSBpcyBuZWVkZWQgKGZlbmNlcz8pLgo+Pgo+PiBUbyBYZW4gY29tbXVuaXR5OiBwbGVhc2Ug dGhpbmsgb2YgZG1hLWJ1ZiBoZXJlIGFzIG9mIGEgYnVmZmVyIHJlcHJlc2VudGF0aW9uCj4+IG1l Y2hhbmlzbSwKPj4gZS5nLiBhdCB0aGUgZW5kIG9mIHRoZSBkYXkgaXQncyBqdXN0IGEgc2V0IG9m IHBhZ2VzLgo+Pgo+PiBUaGFuayB5b3UsCj4+IE9sZWtzYW5kcgo+Pj4+IC1EYW5pZWwKPj4+Pgo+ Pj4+PiBSZWdhcmRzLAo+Pj4+PiBEVwo+Pj4+PiBPbiBNb24sIEFwciAxNiwgMjAxOCBhdCAwNToz Mzo0NlBNICswMzAwLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToKPj4+Pj4+IEhlbGxv LCBhbGwhCj4+Pj4+Pgo+Pj4+Pj4gQWZ0ZXIgZGlzY3Vzc2luZyB4ZW4temNvcHkgYW5kIGh5cGVy LWRtYWJ1ZiBbMV0gYXBwcm9hY2hlcwo+Pj4+Pj4KPj4+Pj4+IGl0IHNlZW1zIHRoYXQgeGVuLXpj b3B5IGNhbiBiZSBtYWRlIG5vdCBkZXBlbmQgb24gRFJNIGNvcmUgYW55IG1vcmUKPj4+Pj4+Cj4+ Pj4+PiBhbmQgYmUgZG1hLWJ1ZiBjZW50cmljICh3aGljaCBpdCBpbiBmYWN0IGlzKS4KPj4+Pj4+ Cj4+Pj4+PiBUaGUgRFJNIGNvZGUgd2FzIG1vc3RseSB0aGVyZSBmb3IgZG1hLWJ1ZidzIEZEIGlt cG9ydC9leHBvcnQKPj4+Pj4+Cj4+Pj4+PiB3aXRoIERSTSBQUklNRSBVQVBJIGFuZCB3aXRoIERS TSB1c2UtY2FzZXMgaW4gbWluZCwgYnV0IGl0IGNvbWVzIG91dCB0aGF0IGlmCj4+Pj4+Pgo+Pj4+ Pj4gdGhlIHByb3Bvc2VkIDIgSU9DVExzIChEUk1fWEVOX1pDT1BZX0RVTUJfRlJPTV9SRUZTIGFu ZAo+Pj4+Pj4gRFJNX1hFTl9aQ09QWV9EVU1CX1RPX1JFRlMpCj4+Pj4+Pgo+Pj4+Pj4gYXJlIGV4 dGVuZGVkIHRvIGFsc28gcHJvdmlkZSBhIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgY29ycmVzcG9u ZGluZyBkbWEtYnVmLAo+Pj4+Pj4gdGhlbgo+Pj4+Pj4KPj4+Pj4+IFBSSU1FIHN0dWZmIGluIHRo ZSBkcml2ZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLgo+Pj4+Pj4KPj4+Pj4+IFRoYXQgYmVpbmcg c2FpZCwgeGVuLXpjb3B5IGNhbiBzYWZlbHkgYmUgZGV0YWNoZWQgZnJvbSBEUk0gYW5kIG1vdmVk IGZyb20KPj4+Pj4+Cj4+Pj4+PiBkcml2ZXJzL2dwdS9kcm0veGVuIGludG8gZHJpdmVycy94ZW4v ZG1hLWJ1Zi1iYWNrZW5kKD8pLgo+Pj4+Pj4KPj4+Pj4+IFRoaXMgZHJpdmVyIHRoZW4gYmVjb21l cyBhIHVuaXZlcnNhbCB3YXkgdG8gdHVybiBhbnkgc2hhcmVkIGJ1ZmZlciBiZXR3ZWVuCj4+Pj4+ PiBEb20wL0RvbUQKPj4+Pj4+Cj4+Pj4+PiBhbmQgRG9tVShzKSBpbnRvIGEgZG1hLWJ1ZiwgZS5n LiBvbmUgY2FuIGNyZWF0ZSBhIGRtYS1idWYgZnJvbSBhbnkgZ3JhbnQKPj4+Pj4+IHJlZmVyZW5j ZXMKPj4+Pj4+Cj4+Pj4+PiBvciByZXByZXNlbnQgYSBkbWEtYnVmIGFzIGdyYW50LXJlZmVyZW5j ZXMgZm9yIGV4cG9ydC4KPj4+Pj4+Cj4+Pj4+PiBUaGlzIHdheSB0aGUgZHJpdmVyIGNhbiBiZSB1 c2VkIG5vdCBvbmx5IGZvciBEUk0gdXNlLWNhc2VzLCBidXQgYWxzbyBmb3IKPj4+Pj4+IG90aGVy Cj4+Pj4+Pgo+Pj4+Pj4gdXNlLWNhc2VzIHdoaWNoIG1heSByZXF1aXJlIHplcm8gY29weWluZyBi ZXR3ZWVuIGRvbWFpbnMuCj4+Pj4+Pgo+Pj4+Pj4gRm9yIGV4YW1wbGUsIHRoZSB1c2UtY2FzZXMg d2UgYXJlIGFib3V0IHRvIHdvcmsgaW4gdGhlIG5lYXJlc3QgZnV0dXJlIHdpbGwKPj4+Pj4+IHVz ZQo+Pj4+Pj4KPj4+Pj4+IFY0TCwgZS5nLiB3ZSBwbGFuIHRvIHN1cHBvcnQgY2FtZXJhcywgY29k ZWNzIGV0Yy4gYW5kIGFsbCB0aGVzZSB3aWxsIGJlbmVmaXQKPj4+Pj4+Cj4+Pj4+ID5mcm9tIHpl cm8gY29weWluZyBtdWNoLiBQb3RlbnRpYWxseSwgZXZlbiBibG9jay9uZXQgZGV2aWNlcyBtYXkg YmVuZWZpdCwKPj4+Pj4+IGJ1dCB0aGlzIG5lZWRzIHNvbWUgZXZhbHVhdGlvbi4KPj4+Pj4+Cj4+ Pj4+Pgo+Pj4+Pj4gSSB3b3VsZCBsb3ZlIHRvIGhlYXIgY29tbWVudHMgZm9yIGF1dGhvcnMgb2Yg dGhlIGh5cGVyLWRtYWJ1Zgo+Pj4+Pj4KPj4+Pj4+IGFuZCBYZW4gY29tbXVuaXR5LCBhcyB3ZWxs IGFzIERSSS1EZXZlbCBhbmQgb3RoZXIgaW50ZXJlc3RlZCBwYXJ0aWVzLgo+Pj4+Pj4KPj4+Pj4+ Cj4+Pj4+PiBUaGFuayB5b3UsCj4+Pj4+Pgo+Pj4+Pj4gT2xla3NhbmRyCj4+Pj4+Pgo+Pj4+Pj4K Pj4+Pj4+IE9uIDAzLzI5LzIwMTggMDQ6MTkgUE0sIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdy b3RlOgo+Pj4+Pj4+IEZyb206IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5k cnVzaGNoZW5rb0BlcGFtLmNvbT4KPj4+Pj4+Pgo+Pj4+Pj4+IEhlbGxvIQo+Pj4+Pj4+Cj4+Pj4+ Pj4gV2hlbiB1c2luZyBYZW4gUFYgRFJNIGZyb250ZW5kIGRyaXZlciB0aGVuIG9uIGJhY2tlbmQg c2lkZSBvbmUgd2lsbCBuZWVkCj4+Pj4+Pj4gdG8gZG8gY29weWluZyBvZiBkaXNwbGF5IGJ1ZmZl cnMnIGNvbnRlbnRzIChmaWxsZWQgYnkgdGhlCj4+Pj4+Pj4gZnJvbnRlbmQncyB1c2VyLXNwYWNl KSBpbnRvIGJ1ZmZlcnMgYWxsb2NhdGVkIGF0IHRoZSBiYWNrZW5kIHNpZGUuCj4+Pj4+Pj4gVGFr aW5nIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiBkaXNwbGF5IGJ1ZmZlcnMgYW5kIGZyYW1lcyBw ZXIgc2Vjb25kcwo+Pj4+Pj4+IGl0IG1heSByZXN1bHQgaW4gdW5uZWVkZWQgaHVnZSBkYXRhIGJ1 cyBvY2N1cGF0aW9uIGFuZCBwZXJmb3JtYW5jZSBsb3NzLgo+Pj4+Pj4+Cj4+Pj4+Pj4gVGhpcyBo ZWxwZXIgZHJpdmVyIGFsbG93cyBpbXBsZW1lbnRpbmcgemVyby1jb3B5aW5nIHVzZS1jYXNlcwo+ Pj4+Pj4+IHdoZW4gdXNpbmcgWGVuIHBhcmEtdmlydHVhbGl6ZWQgZnJvbnRlbmQgZGlzcGxheSBk cml2ZXIgYnkKPj4+Pj4+PiBpbXBsZW1lbnRpbmcgYSBEUk0vS01TIGhlbHBlciBkcml2ZXIgcnVu bmluZyBvbiBiYWNrZW5kJ3Mgc2lkZS4KPj4+Pj4+PiBJdCB1dGlsaXplcyBQUklNRSBidWZmZXJz IEFQSSB0byBzaGFyZSBmcm9udGVuZCdzIGJ1ZmZlcnMgd2l0aAo+Pj4+Pj4+IHBoeXNpY2FsIGRl dmljZSBkcml2ZXJzIG9uIGJhY2tlbmQncyBzaWRlOgo+Pj4+Pj4+Cj4+Pj4+Pj4gICAtIGEgZHVt YiBidWZmZXIgY3JlYXRlZCBvbiBiYWNrZW5kJ3Mgc2lkZSBjYW4gYmUgc2hhcmVkCj4+Pj4+Pj4g ICAgIHdpdGggdGhlIFhlbiBQViBmcm9udGVuZCBkcml2ZXIsIHNvIGl0IGRpcmVjdGx5IHdyaXRl cwo+Pj4+Pj4+ICAgICBpbnRvIGJhY2tlbmQncyBkb21haW4gbWVtb3J5IChpbnRvIHRoZSBidWZm ZXIgZXhwb3J0ZWQgZnJvbQo+Pj4+Pj4+ICAgICBEUk0vS01TIGRyaXZlciBvZiBhIHBoeXNpY2Fs IGRpc3BsYXkgZGV2aWNlKQo+Pj4+Pj4+ICAgLSBhIGR1bWIgYnVmZmVyIGFsbG9jYXRlZCBieSB0 aGUgZnJvbnRlbmQgY2FuIGJlIGltcG9ydGVkCj4+Pj4+Pj4gICAgIGludG8gcGh5c2ljYWwgZGV2 aWNlIERSTS9LTVMgZHJpdmVyLCB0aHVzIGFsbG93aW5nIHRvCj4+Pj4+Pj4gICAgIGFjaGlldmUg bm8gY29weWluZyBhcyB3ZWxsCj4+Pj4+Pj4KPj4+Pj4+PiBGb3IgdGhhdCByZWFzb24gbnVtYmVy IG9mIElPQ1RMcyBhcmUgaW50cm9kdWNlZDoKPj4+Pj4+PiAgIC0gIERSTV9YRU5fWkNPUFlfRFVN Ql9GUk9NX1JFRlMKPj4+Pj4+PiAgICAgIFRoaXMgd2lsbCBjcmVhdGUgYSBEUk0gZHVtYiBidWZm ZXIgZnJvbSBncmFudCByZWZlcmVuY2VzIHByb3ZpZGVkCj4+Pj4+Pj4gICAgICBieSB0aGUgZnJv bnRlbmQKPj4+Pj4+PiAgIC0gRFJNX1hFTl9aQ09QWV9EVU1CX1RPX1JFRlMKPj4+Pj4+PiAgICAg VGhpcyB3aWxsIGdyYW50IHJlZmVyZW5jZXMgdG8gYSBkdW1iL2Rpc3BsYXkgYnVmZmVyJ3MgbWVt b3J5IHByb3ZpZGVkCj4+Pj4+Pj4gICAgIGJ5IHRoZSBiYWNrZW5kCj4+Pj4+Pj4gICAtIERSTV9Y RU5fWkNPUFlfRFVNQl9XQUlUX0ZSRUUKPj4+Pj4+PiAgICAgVGhpcyB3aWxsIGJsb2NrIHVudGls IHRoZSBkdW1iIGJ1ZmZlciB3aXRoIHRoZSB3YWl0IGhhbmRsZSBwcm92aWRlZAo+Pj4+Pj4+ICAg ICBiZSBmcmVlZAo+Pj4+Pj4+Cj4+Pj4+Pj4gV2l0aCB0aGlzIGhlbHBlciBkcml2ZXIgSSB3YXMg YWJsZSB0byBkcm9wIENQVSB1c2FnZSBmcm9tIDE3JSB0byAzJQo+Pj4+Pj4+IG9uIFJlbmVzYXMg Ui1DYXIgTTMgYm9hcmQuCj4+Pj4+Pj4KPj4+Pj4+PiBUaGlzIHdhcyB0ZXN0ZWQgd2l0aCBSZW5l c2FzJyBXYXlsYW5kLUtNUyBhbmQgYmFja2VuZCBydW5uaW5nIGFzIERSTSBtYXN0ZXIuCj4+Pj4+ Pj4KPj4+Pj4+PiBUaGFuayB5b3UsCj4+Pj4+Pj4gT2xla3NhbmRyCj4+Pj4+Pj4KPj4+Pj4+PiBP bGVrc2FuZHIgQW5kcnVzaGNoZW5rbyAoMSk6Cj4+Pj4+Pj4gICAgZHJtL3hlbi16Y29weTogQWRk IFhlbiB6ZXJvLWNvcHkgaGVscGVyIERSTSBkcml2ZXIKPj4+Pj4+Pgo+Pj4+Pj4+ICAgRG9jdW1l bnRhdGlvbi9ncHUvZHJpdmVycy5yc3QgICAgICAgICAgICAgICB8ICAgMSArCj4+Pj4+Pj4gICBE b2N1bWVudGF0aW9uL2dwdS94ZW4temNvcHkucnN0ICAgICAgICAgICAgIHwgIDMyICsKPj4+Pj4+ PiAgIGRyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgMjUgKwo+ Pj4+Pj4+ICAgZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAg NSArCj4+Pj4+Pj4gICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1femNvcHkuYyAgICAgICAg IHwgODgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+Pj4+PiAgIGRyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV96Y29weV9iYWxsb29uLmMgfCAxNTQgKysrKysKPj4+Pj4+PiAgIGRy aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV96Y29weV9iYWxsb29uLmggfCAgMzggKysKPj4+Pj4+ PiAgIGluY2x1ZGUvdWFwaS9kcm0veGVuX3pjb3B5X2RybS5oICAgICAgICAgICAgfCAxMjkgKysr Kwo+Pj4+Pj4+ICAgOCBmaWxlcyBjaGFuZ2VkLCAxMjY0IGluc2VydGlvbnMoKykKPj4+Pj4+PiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2dwdS94ZW4temNvcHkucnN0Cj4+Pj4+ Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX3pjb3B5 LmMKPj4+Pj4+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9k cm1femNvcHlfYmFsbG9vbi5jCj4+Pj4+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3hlbi94ZW5fZHJtX3pjb3B5X2JhbGxvb24uaAo+Pj4+Pj4+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvdWFwaS9kcm0veGVuX3pjb3B5X2RybS5oCj4+Pj4+Pj4KPj4+Pj4+IFsx XQo+Pj4+Pj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9hcmNoaXZlcy9odG1sL3hlbi1k ZXZlbC8yMDE4LTAyL21zZzAxMjAyLmh0bWwKPj4+Pj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPj4+Pj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+Pj4+ PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+Pj4+IGh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCj4+Pj4gLS0gCj4+Pj4gRGFu aWVsIFZldHRlcgo+Pj4+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgo+Pj4+ IGh0dHA6Ly9ibG9nLmZmd2xsLmNoCj4+IFsxXSBodHRwczovL2VsaXhpci5ib290bGluLmNvbS9s aW51eC92NC4xNy1yYzEvc291cmNlL2luY2x1ZGUveGVuL2ludGVyZmFjZS9pby9kaXNwbGlmLmgK Pj4gWzJdIGh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y0LjE3LXJjMS9zb3VyY2Uv aW5jbHVkZS94ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaCNMNTM5Cj4+IFszXSBodHRwczovL2Vs aXhpci5ib290bGluLmNvbS9saW51eC92NC4xNy1yYzEvc291cmNlL2RyaXZlcnMvZ3B1L2RybS9k cm1fcHJpbWUuYyNMMzkKPj4gWzRdIGh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y0 LjE3LXJjMS9zb3VyY2UvZHJpdmVycy94ZW4vZ250ZGV2LmMKPj4gWzVdCj4+IGh0dHBzOi8vZWxp eGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y0LjE3LXJjMS9zb3VyY2UvaW5jbHVkZS91YXBpL3hlbi9n bnRkZXYuaAo+PiBbNl0gaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvdjQuMTctcmMx L3NvdXJjZS9kcml2ZXJzL3hlbi9iYWxsb29uLmMKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo=