From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [RFC 0/4] TEE mediator framework + OP-TEE mediator Date: Tue, 24 Oct 2017 18:33:20 +0100 Message-ID: References: <1507748484-16871-1-git-send-email-volodymyr_babchuk@epam.com> <078a8941-5a6b-f7bb-b5c8-f2cf84210cf2@linaro.org> <20171017155901.GA24929@EPUAKYIW2556.kyiv.epam.com> <942b70a8-dffa-e3ec-19d4-40ff9a328cf6@arm.com> <20171020173705.GC11787@EPUAKYIW2556.kyiv.epam.com> <20171023201141.GA20412@EPUAKYIW2556.kyiv.epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171023201141.GA20412@EPUAKYIW2556.kyiv.epam.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Volodymyr Babchuk Cc: Julien Grall , nd@arm.com, Stefano Stabellini , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAyMy8xMC8xNyAyMToxMSwgVm9sb2R5bXlyIEJhYmNodWsgd3JvdGU6Cj4gT24gTW9u LCBPY3QgMjMsIDIwMTcgYXQgMDU6NTk6NDRQTSArMDEwMCwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+ IAo+PiBIaSBWb2xvZHlteXIsCj4gSGkgSnVsaWVuLAo+IAo+PiBMZXQgbWUgYmVnaW4gdGhlIGUt bWFpbCB3aXRoIEkgYW0gbm90IHRvdGFsbHkgYWR2ZXJzZWQgdG8gcHV0dGluZyB0aGUgVEVFCj4+ IG1lZGlhdG9yIGluIFhlbi4gQXQgdGhlIG1vbWVudCwgSSBhbSB0cnlpbmcgdG8gdW5kZXJzdGFu ZCB0aGUgd2hvbGUgcGljdHVyZS4KPiBUaGFua3MgZm9yIGNsYXJpZmljYXRpb24uIFRoaXMgaXMg cmVhbGx5IHJlYXNzdXJpbmcgOikKPiBJbiBteSB0dXJuLCBJJ20gbm90IHRvdGFsbHkgYWdhaW5z dCBURUUgbWVkaWF0b3JzIGluIHN0dWJkb21zLiBJJ20gb25seQo+IGNvbmNlcm5lZCBhYm91dCBy ZXF1aXJlZCBlZmZvcnRzLgo+IAo+PiBPbiAyMC8xMC8xNyAxODozNywgVm9sb2R5bXlyIEJhYmNo dWsgd3JvdGU6Cj4+PiBPbiBGcmksIE9jdCAyMCwgMjAxNyBhdCAwMjoxMToxNFBNICswMTAwLCBK dWxpZW4gR3JhbGwgd3JvdGU6Cj4+Pj4gT24gMTcvMTAvMTcgMTY6NTksIFZvbG9keW15ciBCYWJj aHVrIHdyb3RlOgo+Pj4+PiBPbiBNb24sIE9jdCAxNiwgMjAxNyBhdCAwMTowMDoyMVBNICswMTAw LCBKdWxpZW4gR3JhbGwgd3JvdGU6Cj4+Pj4+PiBPbiAxMS8xMC8xNyAyMDowMSwgVm9sb2R5bXly IEJhYmNodWsgd3JvdGU6Cj4+Pj4+Pj4gSSB3YW50IHRvIHByZXNlbnQgVEVFIG1lZGlhdG9yLCB0 aGF0IHdhcyBkaXNjdXNzZWQgZWFybGllciAoWzFdKS4KPj4+Pj4+Pgo+Pj4+Pj4+IEkgc2VsZWN0 ZWQgZGVzaWduIHdpdGggYnVpbHQtaW4gbWVkaWF0b3JzLiBUaGlzIGlzIGVhc2llc3Qgd2F5LAo+ Pj4+Pj4+IGl0IHJlbW92ZXMgbWFueSBxdWVzdGlvbnMsIGl0IGlzIGVhc3kgdG8gaW1wbGVtZW50 IGFuZCBtYWludGFpbgo+Pj4+Pj4+IChhdCBsZWFzdCBJIGhvcGUgc28pLgo+Pj4+Pj4KPj4+Pj4+ IFdlbGwsIGl0IG1heSBjbG9zZSB0aGUgdGVjaG5pY2FsIHF1ZXN0aW9ucyBidXQgc3RpbGwgbGVh dmUgdGhlIHNlY3VyaXR5Cj4+Pj4+PiBpbXBhY3QgdW5hbnN3ZXJlZC4gSSB3b3VsZCBoYXZlIGFw cHJlY2lhdGVkIGEgc3VtbWFyeSBvZiBlYWNoIGFwcHJvYWNoIGFuZAo+Pj4+Pj4gZXhwbGFpbiB0 aGUgcHJvcy9jb25zLgo+Pj4+PiBUaGlzIGlzIHRoZSBtb3N0IHNlY3VyZSB3YXkgYWxzby4gSW4g dGVybXMgb2YgdHJ1c3QgYmV0d2VlbiBndWVzdHMgYW5kCj4+Pj4+IFhlbiBhdCBsZWFzdC4gSSdt IHdvcmtlZCB3aXRoIE9QLVRFRSBndXlzIG1vc3RseSwgc28gd2hlbiBJIGhlYXIgYWJvdXQKPj4+ Pj4gInNlY3VyaXR5IiwgbXkgZmlyc3QgdGhvdWdodHMgYXJlICJDYW4gVEVFIE9TIHRydXN0IHRv IFhFTiBhcyBhCj4+Pj4+IG1lZGlhdG9yPyBDYW4gVEVFIGNsaWVudCB0cnVzdCB0byBYRU4gYXMg YSBtZWRpYXRvcj8iLiBBbmQgd2l0aAo+Pj4+PiBjdXJyZW50IGFwcHJvYWNoIGFuc3dlciBpcyAi eWVzLCB0aGV5IGNhbiwgZXNwZWNpYWxseSBpZiBYRU4gaXMgYSBwYXJ0Cj4+Pj4+IG9mIGEgY2hh aW4gb2YgdHJ1c3QiLgo+Pj4+Pgo+Pj4+PiBCdXQgeW91IHByb2JhYmx5IHdhbnRlZCB0byBhc2sg IkNhbiBndWVzdCBjb21wcm9taXNlIHdob2xlIHN5c3RlbSBieQo+Pj4+PiB1c2luZyBURUUgbWVk aWF0b3Igb3IgVEVFIE9TPyIuIFRoaXMgaXMgYW4gaW50ZXJlc3RpbmcgcXVlc3Rpb24uCj4+Pj4+ IEZpcnN0IGxldCdzIGRpc2N1c3MgcmVxdWlyZW1lbnRzIGZvciBhIFRFRSBtZWRpYXRvci4gU28s IG1lZGlhdG9yCj4+Pj4+IHNob3VsZCBiZSBhYmxlIHRvOgo+Pj4+Pgo+Pj4+PiAgICogUmVjZWl2 ZSByZXF1ZXN0IHRvIGhhbmRsZSB0cmFwcGVkIFNNQy4gVGhpcyByZXF1ZXN0IHNob3VsZCBpbmNs dWRlCj4+Pj4+ICAgICB1c2VyIHJlZ2lzdGVycyArIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgZ3Vl c3QgKGF0IGxlYXN0IGRvbWFpbiBpZCkuCj4+Pj4+ICAgKiBQaW4vdW5waW4gZG9tYWluIG1lbW9y eSBwYWdlcy4KPj4+Pj4gICAqIE1hcCBkb21haW4gbWVtb3J5IHBhZ2VzIGludG8gb3duIGFkZHJl c3Mgc3BhY2Ugd2l0aCBSVyBhY2Nlc3MuCj4+Pj4+ICAgKiBJc3N1ZSByZWFsIFNNQyB0byBhIFRF RS4KPj4+Pj4gICAqIFJlY2VpdmUgaW5mb3JtYXRpb24gYWJvdXQgZ3Vlc3QgY3JlYXRpb24gYW5k IGRlc3RydWN0aW9uLgo+Pj4+PiAgICogKFByb2JhYmx5KSBpbmplY3QgSVJRcyBpbnRvIGEgZG9t YWluICh0aGlzIGNhbiBiZSBub3QgYSByZXF1ZXN0ZXIgZG9tYWluLAo+Pj4+PiAgICAgYnV0IHNv bWUgb3RoZXIgZG9tYWluLCB0aGF0IGFsc28gY2FsbGVkIHRvIFRFRSkuCj4+Pj4+Cj4+Pj4+IFRo aXMgaXMgYSBtaW5pbWFsIGxpc3Qgb2YgcmVxdWlyZW1lbnRzLiBJIHRoaW5rLCB0aGlzIHNob3Vs ZCBiZSBlbm91Z2ggdG8KPj4+Pj4gaW1wbGVtZW50IG1lZGlhdG9yIGZvciBPUC1URUUuIEJ1dCBJ IGNhbid0IHNheSBmb3Igc3VyZSBmb3Igb3RoZXIgVEVFcy4KPj4+Pj4KPj4+Pj4gTGV0J3MgY29u c2lkZXIgcG9zc2libGUgYXBwcm9hY2hlczoKPj4+Pj4KPj4+Pj4gMS4gTWVkaWF0b3IgcmlnaHQg aW4gWEVOLCB3b3JrcyBhdCBFTDIuCj4+Pj4+ICAgICBQcm9zOgo+Pj4+PiAgICAgICogTWVkaWF0 b3IgY2FuIHVzZSBhbGwgWEVOIEFQSXMKPj4+Pj4gICAgICAqIEFzIG1lZGlhdG9yIHJlc2lkZXMg aW4gWEVOLCBpdCBjYW4gYmUgY2hlY2tlZCB0b2dldGhlciB3aXRoIFhFTgo+Pj4+PiAgICAgICAg Zm9yIGEgdmFsaWRpdHkgKHRydXN0ZWQgYm9vdCkuCj4+Pj4+ICAgICAgKiBNZWRpYXRvciBpcyBp bml0aWFsaXplZCBiZWZvcmUgRG9tMC4gRG9tMCBjYW4gd29yayB3aXRoIGEgVEVFLgo+Pj4+PiAg ICAgICogTm8gZXh0cmEgY29udGV4dCBzd2l0Y2hlcywgbm8gc3BlY2lhbCBBQkkgYmV0d2VlbiBY RU4gYW5kIG1lZGlhdG9yLgo+Pj4+Pgo+Pj4+PiAgICAgQ29uczoKPj4+Pj4gICAgICAqIEJlY2F1 c2UgaXQgbGl2ZXMgaW4gRUwyLCBpdCBjYW4gY29tcHJvbWlzZSB3aG9sZSBoeXBlcnZpc29yLAo+ Pj4+PiAgICAgICAgaWYgdGhlcmUgaXMgYSBzZWN1cml0eSBidWcgaW4gbWVkaWF0b3IgY29kZS4K Pj4+Pj4gICAgICAqIE5vIHN1cHBvcnQgZm9yIGNsb3NlZCBzb3VyY2UgVEVFcy4KPj4+Pgo+Pj4+ IEFub3RoZXIgY29ucyBpcyB5b3UgYXNzdW1lIFRFRSBBUEkgaXMgZnVsbHkgc3RhYmxlIGFuZCB3 aWxsIG5vdCBjaGFuZ2UuCj4+Pj4gSW1hZ2luZSBhIG5ldyBmdW5jdGlvbiBpcyBhZGRlZCwgb3Ig YSB2ZW5kb3IgZGVjaWRlZCB0byBoZW5jZSB3aXRoIGEgbmV3IHNldAo+Pj4+IG9mIEFQSS4gSG93 IHdpbGwgeW91IGtub3cgWGVuIGlzIHNhZmUgdG8gdXNlIGl0Pwo+Pj4gV2l0aCB3aGl0ZWxpc3Rp bmcsIGFzIHlvdSBjb3JyZWN0bHkgc3VnZ2VzdGVkIGJlbG93LiBYRU4gd2lsbCBwcm9jZXNzCj4+ PiBvbmx5IGtub3cgcmVxdWVzdHMuIEFueXRoaW5nIHRoYXQgbG9va3MgdW5maW1pbGlhciBzaG91 bGQgYmUgcmVqZWN0ZWQuCj4+Cj4+IExldCdzIGltYWdpbmUgdGhlIGd1ZXN0IGlzIHJ1bm5pbmcg b24gYSBwbGF0Zm9ybSB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZgo+PiBURUUuIFRoaXMgZ3Vlc3Qg d2lsbCBwcm9iZSB0aGUgdmVyc2lvbiBvZiBPUC1URUUgYW5kIGtub3dzIHRoZSBuZXcgZnVuY3Rp b24KPj4gaXMgcHJlc2VudC4KPiBUaGlzIHJlcXVlc3Qgd2lsbCBiZSBoYW5kbGVkIG1lZGlhdG9y LiBBdCB0aGlzIG1vbWVudCwgT1AtVEVFIGNsaWVudCBkb2VzCj4gbm90IHVzZSB2ZXJzaW9ucy4g SW5zdGVhZCBpdCB1c2VzIGNhcGFiaWxpdHkgZmxhZ3MuIFNvLCBtZWRpYXRvciBzaG91bGQKPiBm aWx0ZXIgYWxsIHVua25vd24gY2Fwcy4gVGhpcyB3aWxsIGZvcmNlIGd1ZXN0IHRvIHVzZSBvbmx5 IHN1cHBvcnRlZAo+IHN1YnNldCBvZiBmZWF0dXJlcy4KCk9uZSBtb3JlIHF1ZXN0aW9uLiBEb2Vz IGl0IG1lYW4gbmV3IGZ1bmN0aW9ucyB3aWxsIG5ldmVyIGJlIGFkZGVkIGluIApjdXJyZW50IGNh cGFiaWxpdGllcz8KCj4gSWYsIGluIHRoZSBmdXR1cmUsIGNsaWVudCB3aWxsIHJlbGx5IG9uIHZl cnNpb25zIChpLmUuIGR1ZSB0byBkcmFtYXRpYwo+IHByb3RvY29sIGNoYW5nZSksIG1lZGlhdG9y IGNhbiBlaXRoZXIgZG93bmdyYWRlIHZlcnNpb24gb3IgcmVmdXNlIHRvIHdvcmsKPiBhdCBhbGwu CgpNYWtlcyBzZW5zZS4KCj4gCj4+IElmIGFzIHlvdSBzYWlkIFhlbiBpcyB1c2luZyBhIHdoaXRl bGlzdCwgdGhpcyBtZWFucyB0aGUgaHlwZXJ2aXNvciB3aWxsCj4+IHJldHVybiB1bmltcGxlbWVu dGVkLgo+PiBIb3cgZG8geW91IGV4cGVjdCB0aGUgZ3Vlc3QgdG8gYmVoYXZlIGluIHRoYXQgY2Fz ZT8KPiBBcyBJIHNhaWQgYWJvdmUsIGd1ZXN0IHNob3VsZCBkb3duZ3JhZGUgdG8gc3VwcG9ydGVk IGZlYXR1cmVzIHN1YnNldC4KPiAKPj4gTm90ZSB0aGF0IEkgdGhpbmsgYSB3aGl0ZWxpc3QgaXMg YSBnb29kIGlkZWEsIGJ1dCBJIHRoaW5rIHdlIG5lZWQgdG8gdGhpbmsgYQo+PiBiaXQgbW9yZSBh Ym91dCB0aGUgaW1wbGljYXRpb24uCj4gQXQgbGVhc3Qgbm93IE9QLVRFRSBpcyBkZXNpZ25lZCBp biBhIHN1Y2ggd2F5LCB0aGF0IGl0IGlzIGNvbXBhdGlibGUgaW4gYm90aAo+IHdheXMuIEknbSBz dXJlIHRoYXQgZnV0dXJlIE9QLVRFRSBkZXZlbG9wbWVudCB3aWxsIGJlIGRvbmUgd2l0aCB2aXJ0 dWFsaXphdGlvbgo+IHN1cHBvcnQgaW4gbWluZCwgc28gaXQgd2lsbCBub3QgYnJlYWsgZXhpc3Rp bmcgc2V0dXBzLgoKSXQgd291bGQgYmUgZ29vZCB0byBoYXZlIHRoZSB0d28gY29tbXVuaXRpZXMg dGFsa2luZyB0b2dldGhlci4gU28gd2UgY2FuIAptYWtlIHN1cmUgdGhlIHZpcnR1YWxpemF0aW9u IHN1cHBvcnQgaXMgbm90IGdvaW5nIGluIHRoZSB3cm9uZyBkaXJlY3Rpb24uCgpTaW1pbGFybHks IGl0IHdvdWxkIGJlIG5pY2UgdGhhdCBzb21lb25lIGZyb20gdGhlIE9QLVRFRSBtYWludGFpbmVy cyAKZ2l2ZSBmZWVkYmFjayBvbiB0aGUgYXBwcm9hY2ggc3VnZ2VzdGVkIGluIFhlbi4KCj4gCj4+ Pgo+Pj4+IElmIGl0IGlzIG5vdCBzYWZlLCB0aGlzIG1lYW5zIHlvdSBoYXZlIGEgd2hpdGVsaXN0 IHNvbHV0aW9uIGFuZCB0aGVyZWZvcmUKPj4+PiB0aWUgWGVuIHRvIGEgc3BlY2lmaWMgT1AtVEVF IHZlcnNpb24uIFNvIGlmIHlvdSBuZWVkIHRvIHVzZSBhIG5ldyBmdW5jdGlvbgo+Pj4+IHlvdSB3 b3VsZCBuZWVkIHRvIHVwZ3JhZGUgWGVuIG1ha2luZyB0aGUgY29kZSBvZiB1c2luZyBuZXcgdmVy c2lvbgo+Pj4+IHBvdGVudGlhbGx5IGhpZ2guCj4+PiBZZXMsIGFueSBBQkkgY2hhbmdlIGJldHdl ZW4gT1AtVEVFIGFuZCBpdHMgY2xpZW50cyB3aWxsIHJlcXVpcmUgbWVkaWF0b3IKPj4+IHVwZ3Jh ZGUuIEx1Y2tpbGx5LCBPUC1URUUgbWFpbnRhaW5zIEFCSSBiYWNrd2FyZC1jb21wYXRpYmxlLCBz byBpZiB5b3UnbGwKPj4+IGluc3RhbGwgb2xkIFhFTiBhbmQgbmV3IE9QLVRFRSwgT1AtVEVFIHdp bGwgdXNlIG9ubHkgdGhhdCBzdWJzZXQgb2YgQUJJLAo+Pj4gd2hpY2ggaXMga25vd24gdG8gWEVO Lgo+Pj4KPj4+PiBBbHNvLCBjb3JyZWN0IG1lIGlmIEkgYW0gd3JvbmcsIE9QLVRFRSBpcyBhIEJT RCAyLUNsYXVzZS4gVGhpcyBtZWFucyB5b3UKPj4+PiBpbXBvc2UgYW55b25lIHdhbnRlZCB0byBt b2RpZnkgT1AtVEVFIGZvciB0aGVpciBvd24gcHVycG9zZSBjYW4gbWFrZSBhCj4+Pj4gY2xvc2Vk IHZlcnNpb24gb2YgdGhlIFRFRS4gQnV0IGlmIHlvdSBuZWVkIHRvIGludHJvc3BlY3Qvd2hpdGVs aXN0IGNhbGwsIHlvdQo+Pj4+IGltcG9zZSB0aGUgdmVuZG9yIHRvIGV4cG9zZSB0aGVpciBBUEku Cj4+PiBCYXNpY2FsbHkgeWVzLiBJcyB0aGlzIGJhZD8gT1AtVEVFIGRyaXZlciBpbiBMaW51eCBp cyBsaWNlbnNlZCB1bmRlciBHUEwgdjIuCj4+PiBJZiB2ZW5kb3IgbW9kaWZpZXMgaW50ZXJmYWNl IGJldHdlZW4gT1AtVEVFIGFuZCBMaW51eCwgdGhleSBhbnl3YXlzIG9ibGlndWVkCj4+PiB0byBl eHBvc2UgQVBJLgo+Pgo+PiBQYXJkb24gbWUgZm9yIHBvdGVudGlhbCBzdHVwaWQgcXVlc3Rpb25z LCBteSBrbm93bGVkZ2Ugb2YgT1AtVEVFIGlzIGxpbWl0ZWQuCj4+Cj4+IE15IHVuZGVyc3RhbmRp bmcgaXMgdGhlIE9QLVRFRSB3aWxsIHByb3ZpZGUgYSBnZW5lcmljIHdheSB0byBhY2Nlc3MKPj4g ZGlmZmVyZW50IFRydXN0ZWQgQXBwbGljYXRpb24uIFdoaWxlIE9QLVRFRSBBUEkgbWF5IGJlIGdl bmVyaWMsIHRoZSBUQSBBUEkKPj4gaXMgY3VzdG9tLiBBRkFJQ1QgdGhlIGxhdHRlciBpcyBub3Qg cGFydCBvZiBMaW51eCBkcml2ZXIuCj4gWWVzLCB5b3UgYXJlIHBlcmZlY3RseSByaWdodCB0aGVy ZS4KPiAKPj4gU28gaGVyZSBteSBxdWVzdGlvbnM6Cj4+IAkxKSBBcmUgeW91IHBsYW5uaW5nIGFs bG93IGFsbCB0aGUgZ3Vlc3RzIHRvIGFjY2VzcyBldmVyeSBUcnVzdGVkCj4+IEFwcGxpY2F0aW9u cz8KPiBUaGlzIGlzIGEgZ29vZCBxdWVzdGlvbi4gVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBUQXMg c3VwcG9ydGVkIGluCj4gT1AtVEVFOiByZWFsIFRBcyAoYXMgdGhleSBhcmUgZGVzY3JpYmVkIGlu IEdsb2JhbFBsYXRmb3JtIHNwZWNzKSBhbmQKPiBQc2V1ZG9UQXMuICBUaGUgbGF0dGVyIG9uZXMg YXJlIHN0YXRpY2FsbHkgbGlua2VkIHJpZ2h0IGludG8gT1AtVEVFCj4ga2VybmVsIGFuZCBleGVj dXRlIGF0IFMtRUwxIGxldmVsLgo+IFJlYWwgVEFzIGFyZSBwcm92aWRlZCBieSBjbGllbnQuIFRo YXQgbWVhbnMgdGhhdCBOVyB1c2Vyc3BhY2UKPiBzdXBwbGljYW50IGxvYWRzIFRBIGludG8gT1At VEVFLiBPUC1URUUgY2hlY2tzIHNpZ25hdHVyZSBmb3IgdGhlIFRBCj4gYW5kIHRoZW4gcnVucyBp dCBpbiBTLUVMMC4KPiBTbywgSSdtIHBsYW5uaW5nIHRvIGFsbG93IGNsaWVudCB0byB3b3JrIHdp dGggYW55IHJlYWwgVEEuIEkgY2FuJ3Qgc2VlCj4gcmVhbCBwcm9ibGVtIHRoZXJlLgoKQXJlIHRo ZSByZWFsIFRBcyBnb2luZyB0byBiZSBzaGFyZWQgYmV0d2VlbiBndWVzdHM/IE9yIHdpbGwgZWFj aCBndWVzdCAKaGF2ZSB0aGVpciBvd24gb25lPwoKV2lsbCB5b3UgYWxsb3cgZXZlcnkgZ3Vlc3Rz IGxvYWRpbmcgcmVhbCBUQXM/Cgo+IFBzZXVkb1RBcyBjYW4gYmUgdXNlZCB0byBhY2Nlc3Mgc29t ZSBwbGF0Zm9ybS1zcGVjaWZpYyBmZWF0dXJlcywgYW5kIHRodXMKPiBpdCBjYW4gYmUgcXVpdGUg ZGFuZ2Vyb3VzIHRvIGFsbG93IGFueW9uZSBjYWxsIHRoZW0uCj4gQnV0LCBnZW5lcmljIE9QLVRF RSBpbmNsdWRlcyBvbmx5IHRlc3QgYW5kIGJlbmNobWFyayBQc2V1ZG9UQXMsIHRoYXQKPiBzaG91 bGQgYmUgZGlzYWJsZWQgb24gcHJvZHVjdGlvbiBidWlsZHMuIFNvLCBJIGRvbid0IHNlZSB3aHkg Z2VuZXJpYwo+IG1lZGlhdG9yIHNob3VsZCBkaXN0aW5ndWlzaCB0aGVtLiBJIHRoaW5rLCBYU00g Y2FuIGJlIGVtcGxveWVkIGxhdGVyCj4gdG8gY29udHJvbCB3aGljaCBndWVzdCBjYW4gYWNjZXNz IHdoaWNoIFBzZXVkb1RBLiBCdXQgdGhpcyBpcyBub3QKPiB0YXJnZXQgZm9yIGZpcnN0IHZlcnNp b24uCgpJIGd1ZXNzIHRoZSBmaXJzdCB2ZXJzaW9uIHdpbGwgZm9yYmlkIGFjY2VzcyB0byBQc2V1 ZG9UQSBmcm9tIGFsbCB0aGUgCmd1ZXN0cyBidXQgRG9tMD8KCgo+PiAJMikgV2lsbCB5b3UgZXZl ciBuZWVkIHRvIGludHJvc3BlY3QgdGhvc2UgbWVzc2FnZXM/Cj4gTm8sIEkgZG9uJ3QuCgpJIGd1 ZXNzIHRoYXQncyBiZWNhdXNlIGFsbCB0aGUgVEFzIHNob3VsZCBmb2xsb3dlZCB0aGUgc3BlY2lm aWVkIG1lc3NhZ2UgCnByb3RvY29sPwoKPiAKPj4+Pj4KPj4+Pj4gMi4gTWVkaWF0b3IgaW4gYSBz dHViZG9tYWluLiBXb3JrcyBhdCBFTDEuCj4+Pj4+ICAgICBQcm9zOgo+Pj4+PiAgICAgICogTWVk aWF0b3IgaXMgaXNvbGF0ZWQgZnJvbSBoeXBlcnZpc29yIChidXQgaXQgc3RpbGwgY2FuIGRvIHBv dGVudGlhbGx5Cj4+Pj4+ICAgICAgICBkYW5nZXJvdXMgdGhpbmdzIGxpa2UgbWFwcGluZyBkb21h aW4gbWVtb3J5IG9yIHBpbmluZyBwYWdlcykuCj4+Pj4+ICAgICAgKiBPbmUgY2FuIGxlZ2FsbHkg Y3JlYXRlIGFuZCB1c2UgbWVkaWF0b3IgZm9yIGEgY2xvc2VkLXNvdXJjZSBURUUuCj4+Pj4KPj4+ PiAgICAgICAgICogRWFzaWVyIHRvIHVwZ3JhZGUgdG8gYSBuZXcgdmVyc2lvbiBvZiBPUC1URUUu Cj4+PiBZZXMsIHRoaXMgaXMgdHJ1ZS4gQnV0IHdoYXQgYWJvdXQgaW50ZXJmYWNlIGJldHdlZW4g WEVOIGFuZCBtZWRpYXRvcj8KPj4+IFRoaXMgaXMgYSBuZXcgZW50aXR5IHRoYXQgc2hvdWxkIGJl IG1haW50YWluZWQuIFdpbGwgSSBhYmUgYWJsZSB0byB1c2UKPj4+IG5ldyBYRU4gd2l0aCBvbGQg bWVkaWF0b3I/IE9yIG5ldyBtZWRpYXRvciB3aXRoIG9sZCBYRU4/Cj4+Cj4+IFdoeSB3b3VsZCB5 b3UgbmVlZCB0byBzcGVjaWZpYyBpbnRlcmZhY2UgZm9yIHRoZSBtZWRpYXRvcj8gKHNlZSBtb3Jl IGJlbG93KQo+IEF0IGxlYXN0IGZvbGxvd2luZyBmZWF0dXJlcyBpbiBYRU4gY29udHJvbCAoSSBo b3BlIHRoaXMgaXMgcmlnaHQgdGVybSkgQVBJCj4gYXJlIG1pc3NpbmcgcmlnaHQgbm93Ogo+ICAg LSBkb21haW4gY3JlYXRpb24vZGVzdHJ1Y3Rpb24gaG9va3MKPiAgIC0gYWJpbGl0eSB0byBpbnRl cmNlcHQgb25seSBjZXJ0YWluIFNNQ3MKPiAgIC0gd2F5IHRvIGluamVjdCBJUlFzIHRvIG90aGVy IGd1ZXN0cwo+IAo+IEFsc28sIHNlZSBtb3JlIGJlbG93Cj4+Pgo+Pj4+Pj4gICAgICBDb25zOgo+ Pj4+PiAgICAgICogT3ZlcmhlYWQgaW4gWEVOPC0+TWVkaWF0b3IgY29tbXVuaWNhdGlvbi4KPj4+ Pj4gICAgICAqIFhFTiBuZWVkcyB0byBiZSBtb2RpZmllZCB0byBib290IG1lZGlhdG9yIGRvbWFp biBiZWZvcmUgRG9tMC4KPj4+Pgo+Pj4+IElzIGl0IGEgcmVhbGx5IGNvbnM/IEluIHRoZSBwYXN0 LCB3ZSBoYWQgZGlzY3Vzc2lvbiB0byBhbGxvdyBYZW4gY3JlYXRpbmcKPj4+PiBtdWx0aXBsZSBk b21haW4sIGF2b2lkaW5nIHRoZSBvdmVyaGVhZCBvZiBEb20wLiBUaGlzIGNvdWxkIGFsc28gYmVu ZWZpdHMKPj4+PiBoZXJlLgo+Pj4gQXMgSSB1bmRlcnN0YW5kLCB0aGlzIGlzIGEgc2lnbmlmaWNh bnQgY2hhbmdlIGluIFhFTi4gV2hhdCBhcmUgdGhlIGNoYW5jZXMsCj4+PiB0aGF0IGNvbW11bml0 eSB3aWxsIGFjY2VwdCB0aGlzIGNoYW5nZT8gQXMgSSBjYW4gc2VlLCBpbW1lZGlhdGUgYmVuZWZp dAo+Pj4gb2YgdGhpcyBpcyBvbmx5IFRFRSBtZWRpYXRvciBzdXBwb3J0LiBMb29rcyBsaWtlIG5v IG9uZSBleGNlcHQgdXMKPj4+IGludGVyZXN0ZWQgaW4gdGhpcyB0b3BpYy4KPj4KPj4gVGhlIEdT T0MgcHJvamVjdCB3YXMgbm90IGFkZGVkIGJlY2F1c2Ugb2YgVEVFIG1lZGlhdG9yLiBXZSBoYWQg Y29tcGFuaWVzCj4+IHNob3dpbmcgaW50ZXJlc3QgdG8gc3RhcnQgbXVsdGlwbGUgZG9tYWlucyBh dCB0aGUgc2FtZSB0aW1lLiBUaGlzIHdvdWxkCj4+IHNpZ25pZmljYW50bHkgc2hyaW5rIGRvd24g dGhlIGJvb3QgdGltZSBvZiB0aGUgd2hvbGUgcGxhdGZvcm0uCj4gWWVzLiBBY3R1YWxseSwgd2Ug YWxzbyBpbnRlcmVzdGVkIGluIGEgZmFzdGVyIGJvb3QuIEJ1dCBteSBwb2ludCB3YXMKPiB0aGF0 IHdoYXQgd2UgbmVlZCBmb3IgbWVkaWF0b3IgaXMgbm90IHRoZSBzYW1lIHRoYXQgaXMgZGVzY3Jp YmVkIGluCj4gR1NPQyBwcm9qZWN0LiBGdW5jdGlvbmFsaXR5IGRlc2NyaWJlZCBhdCBHU09DIHBh Z2UgaGFzIG11bHRpcGxlIHVzZXMuCj4gQnV0IGZvciBtZWRpYXRvciB3ZSBuZWVkIHNvbWV0aGlu ZyBtb3JlIGludHJpY2F0ZTogYXMgSSBzYWlkIGJlbG93LAo+IGFiaWxpdHkgdG8gZGVsYXkgYm9v dCBvZiBod2RvbSAoYW5kIG90aGVyIGRvbWFpbnMpLgoKTm90IHJlYWxseSwgeW91IGNvdWxkIHRo ZSBkb21haW4gY291bGQgYmxvY2sgd2hlbiBpc3N1aW5nIGFuIFNNQyB1bnRpbCAKdGhlIG1lZGlh dG9yIGlzIHVwIGFuZCBydW5uaW5nLgoKPiAKPj4+Cj4+PiBCVFcsIEkgY2hlY2tlZCAiWGVuIG9u IEFSTTogY3JlYXRlIG11bHRpcGxlIGd1ZXN0cyBmcm9tIGRldmljZQo+Pj4gdHJlZSIgYXQgWzFd LiBUaGlzIGlzIGNsb3NlLCB0byB3aGF0IHdlIG5lZWQsIGJ1dCBub3QgZXhhY3RseS4gWW91IHNl ZSwKPj4+IFRFRSBtZWRpYXRvciBzaG91bGQgYmUgY3JlYXRlZCAqYmVmb3JlKiBEb20wLiBTbyBh Y3R1YWxseSBURUUgbWVkaWF0b3IKPj4+IHdpbGwgcmVjZWl2ZSBkb21pZCAwLiBJIHN1c3BlY3Qg dGhhdCB0aGlzIG9ubHkgY2hhbmdlIHdpbGwgYnJlYWsKPj4+IG1hbnkgdGhpbmdzLgo+Pgo+PiBD YW4geW91IHBsZWFzZSBnaXZlIGV4YW1wbGU/Cj4gSSdtIHN1cmUgdGhhdCBJIHNlZW4gY2hlY2tz IGZvciBkb21pZCA9PSAwIGJlZm9yZSwgYnV0IG5vdyBJIGNhbid0IGZpbmQgYW55Lgo+IFByb2Jh Ymx5LCB0aGF0IHdhcyBjbG9zZWQtc291cmNlIGJhY2tlbmRzLiBTbywgc29ycnkgZm9yIGZhbHNl IGFjY3VzYXRpb24gOikKPiAKPj4gVGVjaG5pY2FsbHkgbm9uZSBvZiB0aGUgaHlwZXJ2aXNvciwg TGludXggYW5kIHRoZSB0b29sc3RhY2sgc2hvdWxkIHJlbHkgb24KPj4gZG9tMCB0byBiZSBkb21p ZCAwLgo+Pgo+PiBBRkFJSywgdGhlIGh5cGVydmlzb3IgYW5kIExpbnV4IGFyZSBmcmVlIG9mIHRo ZW0uIEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvCj4+IGhhdmUgZmV3IGhhcmRjb2RlZCBpbiB0aGUg dG9vbHN0YWNrLCBidXQgdGhleSBzaG91bGQgcmVhbGx5IGRpc2FwcGVhci4KPiBUb3RhbHkgYWdy ZWUgdGhlcmUuCj4gCj4+IEhvd2V2ZXIsIEkgY2FuJ3Qgc2VlIHdoeSB5b3UgcmVxdWlyZSB0aGUg bWVkaWF0b3IgdG8gdXNlIGRvbWlkIDAuIFlvdSBjb3VsZAo+PiBmb3IgZXhhbXBsZSBrZWVwIHRo ZSBoYXJkd2FyZSBkb21haW4gcGF1c2VkIHVudGlsIHRoZSBtZWRpYXRvciBoYXMgc3RhcnRlZC4K PiBTbyB0aGlzIHdpbGwgbGlrZTogY29uc3RydWN0IGRvbTAsIGNvbnN0cnVjdCBhbmQgcnVuIG1l ZGlhdG9yIGRvbWFpbiwKPiBydW4gZG9tMCBieSBzaWduYWwgZnJvbSBEb21NZWRpYXRvcj8gUHJv YmFibHkgdGhpcyB3aWxsIHdvcmsuCj4gCj4+Pgo+Pj4+Pgo+Pj4+PiBBbmQgeWVzLCBpdCBzZWVt cyBvYnZpb3VzLCBidXQgSSB3YW50IHRvIHNheSB0aGlzIGV4cGxpY2l0bHk6IGdlbmVyaWMKPj4+ Pj4gVEVFIG1lZGlhdG9yIGZyYW1ld29yayBzaG91bGQgYW5kIHdpbGwgdXNlIFhTTSB0byBjb250 cm9sIHdoaWNoIGRvbWFpbgo+Pj4+PiBjYW4gd29yayB3aXRoIFRFRS4gU28sIGlmIHlvdSBkb24n dCB0cnVzdCB5b3VyIGd1ZXN0IC0gZG9uJ3QgbGV0IGl0Cj4+Pj4+IHRvIGNhbGwgVEVFIGF0IGFs bC4KPj4+Pgo+Pj4+IENvcnJlY3QgbWUgaWYgSSBhbSB3cm9uZy4gVEVFIGNvdWxkIGJlIHVzZWQg YnkgQW5kcm9pZCBndWVzdCB3aGljaCBsaWtlbHkKPj4+PiBydW4gdGhlIHVzZXIgYXBwcy4uLiBy aWdodD8gU28gYXJlIHlvdSBzYXlpbmcgeW91IGZ1bGx5IHRydXN0IHRoYXQgZ3Vlc3QgYW5kCj4+ Pj4gb2J2aW91c2x5IHRoZSB1c2VyIGluc3RhbGxpbmcgcm9ndWUgYXBwPwo+Pj4gSSBkb24ndCB0 aGluayB0aGF0IGFwcCBkb3dubG9hZGVkIGZyb20gUGxheSBNYXJnZXQgY2FuIGFjY2VzcyBPUC1U RUUgZGlyZWN0bHkuCj4+PiBPUC1URUUgY2FuIGJlIHVzZWQgYnkgQW5kcm9pZCBpdHNlbGYgYXMg YSBrZXkgc3RvcmFnZSBvciB0byBhY2Nlc3MgdG8gYSBTRSwKPj4+IGZvciBleGFtcGxlLiBCdXQg M3JkIGFwcCB0aGF0IGlzc3VlcyBURUUgY2FsbHMuLi4gSSBkb24ndCB0aGluayBzby4KPj4KPj4g WW91IGRpZG4ndCBnZXQgbXkgcG9pbnQgaGVyZS4gVGhhdCByb2d1ZSBhcHAgbWF5IGJlIGFibGUg dG8gYnJlYWsgaW50bwo+PiBrZXJuZWwgdmlhIGFuIGV4cGxvaXQgb3IgaGF2ZSBlbm91Z2ggcHJp dmlsZWdlIHRvIGJyZWFrIHRoZSBndWVzdC4gV2hvIGtub3dzCj4+IHdoYXQgaXQgd2lsbCBiZSBh YmxlIHRvIGRvIGFmdGVyLi4uCj4gT25seSB3aGF0IGh5cGVydmlzb3IgYW5kIFRFRSB3aWxsIGFs bG93IGl0IHRvIGRvLiBMb29rLCBPUC1URUUgd2FzIG5vdCBkZXNpZ25lZAo+IHRvIHJ1bGUgdGhl IG1hY2hpbmUuIFRoZXJlIGlzIEFSTSBURiBmb3IgdGhhdCA6KSBPUC1URUUncyB0YXNrIGlzIHRv IHByb3ZpZGUKPiBzb21lIHNhZmVyIGVudmlyb25tZW50IGZvciBzZW5zaXRpdmUgZGF0YSBhbmQg Y29kZS4gVGhpcyBlbnZpcm9ubWVudCBoYXMKPiB3ZWxsLWRlZmluZWQgaW50ZXJmYWNlcyBhbmQg aXMgZGVzZ2luZWQgdG8gYmUgYXMgc2FmZSBhcyBwb3NzaWJsZS4KPiAKPiBJZiByb2d1ZSBhcHAg YnJlYWtzIGludG8ga2VybmVsLCB0aGVuIGl0IGNhbiBpc3N1ZSBhbnkgU01DIHdoaWNoIGl0IHdh bnRzLgo+IEJ1dCBPUC1URUUgZG9lcyBub3QgdHJ1c3QgdG8gTlcuIEh5cGVydmlzb3IgZG9lcyBu b3QgdHJ1c3QgdG8gZ3Vlc3RzLgo+IE1lZGlhdG9yIHNob3VsZCBiZSB3cml0dGVuIGluIHRoZSBz YW1lIHdheS4KPiAKPiBTbywgd2hhdCBjYW4gZG8gcm9ndWUga2VybmVsPyBBcyBJIGtub3cgLSBp dCBjYW4gY2F1c2UgRG9TIGluIE9QLVRFRS4gVGhpcyBpcwo+IGtub3duIGlzc3VlLiBJZiB0aGVy ZSBpcyBhIHNlY3VyaXR5IGJ1ZyBpbiBPUC1URUUsIGl0IHByb2JhYmx5IGNhbiBvdmVyY29tZQo+ IHdob2xlIHN5c3RlbS4gQnV0IHRoaXMgaXMgdHJ1ZSBmb3IgYW55IHN5c3RlbSBydW5uaW5nIE9Q LVRFRS4KCkkgYWdyZWUgdGhhdCBpZiB5b3UgdGFrZSBvdmVyIE9QLVRFRSwgeW91IHdpbGwgdGFr ZSBvdmVyIGFueSBzeXN0ZW0uIApUaGlzIGlzIG5vdCBzcGVjaWZpYyB0byBoeXBlcnZpc29yLgoK QmFyZW1ldGFsIE9TIHRha2luZyBkb3duIHRoZSBwbGF0Zm9ybSB3aWxsIG9ubHkgaGFybSBpdHNl bGYuIEEgZ3Vlc3QgT1MgCmNvdWxkIGhhcm0gdGhlIHdob2xlIHBsYXRmb3JtLgoKV2hhdCBJIGFt IG5vdCBzdXJlIHlldCwgbWF5YmUgYmVjYXVzZSBvZiBteSBsYWNrIG9mIGtub3dsZWRnZSBhcm91 bmQgCk9QLVRFRSwgd2hvIGlzIGdvaW5nIHRvIHByb3RlY3QgYSBUQSB0byBhY2Nlc3MgYWxsIHRo ZSBOUyBtZW1vcnk/Cgo+IAo+IElmIHRoZXJlIGlzIGEgc2VjdXJpdHkgZmxhdyBpbiBtZWRpYXRv ciAtIGl0IGNhbiBjb21wcm9taXNlIGVpdGhlciBoeXBlcnZpc29yLAo+IG9yIERvbU1lZGlhdG9y IGFuZCBhbGwgVEVFLWNhcGFibGUgZ3Vlc3RzLiBZZXMsIHRoaXMgaXMgYSByaXNrLgo+IAo+PiBU aGUgd2hvbGUgcG9pbnQgb2YgdXNpbmcgYW4gaHlwZXJ2aXNvciBpcyB0byBpc29sYXRlIGd1ZXN0 IGZyb20gZWFjaCBvdGhlci4KPj4gU28gd2hhdCBpcyB0aGUgaXNvbGF0aW9uIG1vZGVsIHdpdGgg T1AtVEVFIGFuZCB0aGUgbWVkaWF0b3I/Cj4gT1AtVEVFIGlzIHdyaXR0ZW4gdG8gaXNvbGF0ZSBU QXMsIHJlc291cmNlcyBhbmQgY2xpZW50cyBmcm9tIGVhY2ggb3RoZXIuCj4gQ3VycmVudGx5IHRo ZXJlIGFyZSBubyBwbGFucyBmb3IgaW50ZXJhY3Rpb24gYmV0d2VlbiBUQXMgZnJvbSBkaWZmZXJl bnQgVk1zLAo+IG5vIHJlc291cmNlIHNoYXJpbmcsIG5vdGhpbmcgbGlrZSB0aGlzLgo+IFdoYXQg ZG8geW91IG1lYW4gdW5kZXIgImlzb2xhdGlvbiBtb2RlbCI/IENhbiB5b3UgZ2l2ZSBzb21lIGV4 YW1wbGU/CgpCeSB0aGF0IEkgbWVhbnQsIHdobyBpcyBnb2luZyB0byBwcmV2ZW50IGd1ZXN0IEEg dG8gYWNjZXNzIGd1ZXN0IEIgZGF0YS4gCkkgdGhpbmsgeW91IHBhcnRseSBhbnN3ZXJlZCB0byBt eSBxdWVzdGlvbiBieSB0aGUgIk9QLVRFRSBpcyB3cml0dGVuIHRvIAppc29sYXRlIFRBcyIuIFRo ZSBhY2Nlc3MgdG8gTlMgbWVtb3J5IHF1ZXN0aW9uIGFib3ZlIHdpbGwgZmlsbCB0aGUgcmVzdCAK SSB0aGluay4KCj4gCj4+Pgo+Pj4+PiBUaGlzIGZlYXR1cmUgaXMgbm90IGltcGxlbWVudGVkIGlu IHRoaXMgUkZDIG9ubHkgYmVjYXVzZQo+Pj4+PiBjdXJyZW50bHkgb25seSBEb20wIGNhbGxzIGFy ZSBzdXBwb3J0ZWQuCj4+Pj4+Cj4+Pj4+PiBUaGlzIHdvdWxkIGhlbHAgdG8gdW5kZXJzdGFuZCB0 aGF0IG1heWJlIGl0IGlzIGFuIGVhc3kgd2F5IGJ1dCBhbHNvIHN0aWxsCj4+Pj4+PiBzZWN1cmUu Li4KPj4+Pj4gSW4gcHJldmlvdXMgZGlzY3Vzc2lvbiB3ZSBjb25zaWRlcmVkIG9ubHkgdHdvIHZh cmlhbnRzOiBpbiBYRU4gb3Igb3V0c2lkZQo+Pj4+PiBYRU4uIFN0dWJkb21haW4gYXBwcm9hY2gg bG9va3MgbW9yZSBzZWN1cmUsIGJ1dCBJJ20gbm90IHN1cmUgdGhhdCBpdCBpcyB0cnVlLgo+Pj4+ PiBTdWNoIHN0dWJkb21haW4gd2lsbCBuZWVkIGFjY2VzcyB0byBhbGwgZ3Vlc3RzIG1lbW9yeS4g SWYgeW91IG1hbmFnZWQgdG8KPj4+Pj4gZ2FpbiBjb250cm9sIG9uIG1lZGlhdG9yIHN0dWJkb21h aW4sIHlvdSBjYW4gZG8gYW55dGhpbmcgeW91IHdhbnQgd2l0aCBhbGwKPj4+Pj4gZ3Vlc3RzLgo+ Pj4+Cj4+Pj4gVGhhdCdzIHNsaWdodGx5IHVudHJ1ZS4gVGhlIHN0dWJkb21haW4gd2lsbCBvbmx5 IGJlIGFibGUgdG8gbWVzcyB3aXRoCj4+Pj4gZG9tYWlucyB1c2luZyBURUUuCj4+PiBZZXMsIHRo aXMgaXMgbW9yZSBzdHJpY3QuIFRoZW4gZWl0aGVyIHlvdSBhcmUgbm90IGFsbG93aW5nIHlvdXIg cHJpdmlsZWdlZAo+Pj4gZG9tYWluIHRvIHVzZSBURUUsIG9yIHlvdXIgc3lzdGVtIG1heSBiZSBj b21wcm9taXNlZCBhbnl3YXlzLgo+Pgo+PiBDYW4geW91IGdpdmUgYW4gZXhhbXBsZSBvZiBwcml2 aWxlZ2UgZG9tYWluIGZvciB5b3U/IERvIHlvdSBjb25zaWRlciBBbmRyb2lkCj4+IGEgcHJpdmls ZWdlIGRvbWFpbj8KPiBJbiB0aGlzIGNhc2UgSSB1c2VkIHRlcm0gInByaXZpbGlnZWQgZG9tYWlu IiBpbiBYRU4gbWVhbmluZzogaXNfcHJpdmlsZWdlZCA9PSAxLgo+IEFuZHJvaWQgaXMgbm90IHBy aXZpbGVnZWQgZG9tYWluLCBieSBhbGwgbWVhbnMuCj4gSSB3YW50ZWQgdG8gc2F5IHRoYXQgeW91 IGlmIHlvdSBhbGxvdyBEb20wIHRvIGFjY2VzcyBURUUsIHRoZW4gaGFja2VkIERvbU1lZGlhdG9y Cj4gY2FuIGNvbXByb21pc2UgRG9tMCBhbmQgdGhlIGh5cGVydmlzb3IuCgpBbmQgSSBuZXZlciBk aXNhZ3JlZWQgaW4gdGhhdC4gVGhpcyBpcyB0aGUgbm9uLWNvbnRyb3ZlcnNpYWwgcGFydCA6KS4K Cj4gCj4+Pj4+Cj4+Pj4+PiBUbyBiZSBjbGVhciwgdGhpcyBzZXJpZXMgZG9uJ3QgbG9vayBjb250 cm92ZXJzaWFsIGF0IGxlYXN0IGZvciBPUC1URUUuIFdoYXQKPj4+Pj4+IEkgYW0gbW9yZSBjb25j ZXJuZWQgaXMgYWJvdXQgRG9tVSBzdXBwb3J0cy4KPj4+Pj4gWW91ciBjb25jZXJuIGlzIHRoYXQg cm9ndWUgRG9tVSBjYW4gY29tcHJvbWlzZSB3aG9sZSBzeXN0ZW0sIHJpZ2h0Pwo+Pj4+Cj4+Pj4g WWVzLiBZb3Ugc2VlbSB0byBhc3N1bWUgdGhhdCBEb21VIHVzaW5nIFRFRSB3aWxsIGFsd2F5cyBi ZSB0cnVzdGVkLCBJIHRoaW5rCj4+Pj4gdGhpcyBpcyB0aGUgd3JvbmcgYXBwcm9hY2ggaWYgdGhl IHVzZSBpcyBhYmxlIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGgKPj4+PiB0aG9zZSBndWVzdHMu IFNlZSBhYm92ZS4KPj4+IE5vLCBJIGFtIG5vdCBhc3N1bWluZyB0aGF0IERvbVUgdGhhdCBjYWxs cyBURUUgc2hvdWxkIGJlIHRydXN0ZWQuIFdoeSBkbyB5b3UKPj4+IHRoaW5rIHNvPyBJdCBzaG91 bGQgYmUgYWJsZSB0byB1c2UgVEVFIHNlcnZpY2VzLCBidXQgdGhpcyBkb2VzIG5vdCBtZWFuIHRo YXQKPj4+IFhFTiBzaG91bGQgdHJ1c3QgaXQuCj4+Cj4+IEluIGEgcHJldmlvdXMgYW5zd2VyIHlv dSBzYWlkOiAiU28sIGlmIHlvdSBkb24ndCB0cnVzdCB5b3VyIGd1ZXN0IC0gZG9uJ3QKPj4gbGV0 IGl0Ii4gRm9yIG1lLCB0aGlzIGNsZWFybHkgbWVhbnMgeW91IGNvbnNpZGVyIHRoYXQgRG9tVSB1 c2luZyBURUUgYXJlCj4+IHRydXN0ZWQuCj4+Cj4+IFNvIGNhbiB5b3UgY2xhcmlmeSBieSB3aGF0 IHlvdSBtZWFuIGJ5IHRydXN0IHRoZW4/Cj4gV2VsbC4uLiBJbiByZWFsIHdvcmxkICJ0cnVzdCIg aXNuJ3QgYmluYXJ5IG9wdGlvbi4gWW91IGRvbid0IHdhbnQgdG8KPiBhbGxvdyBhbGwgZG9tYWlu cyB0byBhY2Nlc3MgVEVFLiBCcmVhY2hlZCBURUUgdXNlciBkb21haW4gZG9lc24ndAo+IGF1dG9t YXRpY2FsbHkgbWVhbiB0aGF0IHlvdXIgd2hvbGUgc3lzdGVtIGlzIGNvbXByb21pc2VkLiBCdXQg dGhpcwo+IGNlcnRhaW5seSBpbmNyZWFzZXMgYXR0YWNrIHN1cmZhY2UuIFNvIGl0IGlzIHNhZmVy IHRvIGdpdmUgVEVFIGFjY2Vzcwo+IG9ubHkgdG8gdGhvc2UgZG9tYWlucywgd2hpY2ggcmVhbGx5 IHJlcXVpcmUgaXQuIFlvdSBjYW4gY2FsbCB0aGVtCj4gc2xpZ3RseSBtb3JlIHRydXN0ZWQsIHRo ZW4gb3RoZXJzLgoKRG8geW91IGhhdmUgYW4gZXhhbXBsZSBvZiBndWVzdCB5b3Ugd291bGQgc2xp Z2h0bHkgdHJ1c3QgbW9yZT8KCj4gCj4+PiBFdmVuIG5vdywgWEVOIHByb2Nlc3NlcyByZXF1ZXN0 cyBmcm9tIERvbVVzIHdpdGhvdXQKPj4+IHRydXN0aW5nIHRoZW0uIFdoeSBkbyB5b3UgdGhpbmss IHRoYXQgVEVFIG1lZGlhdG9yIHVzYWdlIHdpbGwgZGlmZmVyPwo+Pgo+PiBJIGd1ZXNzIHlvdSBh cmUgY29tcGFyaW5nIHdpdGggdkdJQyBhbmQgUEwwMTE/IElITU8sIHRoZSBtYWluIGRpZmZlcmVu Y2UgaXMKPj4gWGVuIGlzIHRha2luZyBjYXJlIGFsb25lIG9mIHRoZSBpc29sYXRpb24gYmV0d2Vl biBndWVzdC4gSGVyZSBpbiB0aGUgVEVFCj4+IGNhc2UsIHlvdSByZWx5IG9uIGEgY29tYmluYXRp b24gb2YgYm90aCBURUUgYW5kIFhlbiB0byBkbyB0aGUgaXNvbGF0aW9uLgo+IFllcy4gVGhpcyBp cyB3aWxsIGJlIGxlc3Mgc2VjdXJlLCB0aGFuIFRFRS1vbmx5IG9yIGh5cGVydmlzb3Itb25seSBz eXN0ZW0uCgpDYW4geW91IGV4cGFuZCBoZXJlPwoKPiAKPj4+Cj4+PiBMb29rLCBJIGdlbmVyYWxs eSBub3QgYWdhaW5zdCBpZGVhIG9mIFRFRSBtZWRpYXRvciBpbiBzdHViZG9tcy4gQnV0IHRoaXMK Pj4+IGFwcHJvYWNoIHJlcXVpcmUgbWFueSBjaGFuZ2VzIGluIGV4aXN0aW5nIFhFTiBjb2RlOgo+ Pj4KPj4+IDEuIExvYWQgZG9tYWlucyBiZWZvcmUgRG9tMC4KPj4+Cj4+PiAyLiBBZGQgc3BlY2lh bCBBUEkgZm9yIG1lZGlhdG9yLiBPciBhbHRlciBleGlzdGluZyBvbmVzLiBZb3UgY2FuJ3QgdXNl Cj4+PiAgICAgZXhpc3RpbmcgQVBJcyBhcyBpdCwgYmVjYXVzZSB5b3UgbmVlZCB0byBlbmZvcmNl IHN0cmljdGVyIFhTTSBydWxlcwo+Pj4gICAgIG9uIHRoZW0uCj4+Cj4+IE1pbmQgZ2l2aW5nIG1v cmUgZXhwbGFuYXRpb24uLi4uPyBYZW4gaGFzIGEgZGVmYXVsdCBwb2xpY3kgZm9yIFhTTSBhbmQK Pj4gaW5kZWVkIG1heSBub3QgZml0IHlvdXIgdXNlIGNhc2UuIEJ1dCB5b3UgY2FuIHdyaXRlIHlv dXIgb3duIHBvbGljeSBhbmQgbG9hZAo+PiBpdC4KPiBZZXMuIFlvdSBuZWVkIHBvbGljeSAiYWxs b3cgdGhpcyBzdHViZG9tIHRvIG1hcCBtZW1vcnkgb25seSBmcm9tIFRFRS1lbmFibGVkCj4gZ3Vl c3RzIi4gQUZBSUssIHRoaXMgaXMgbm90IHBvc3NpYmxlIHJpZ2h0IG5vdy4gQnV0IEkgY2FuIGJl IHdyb25nLCBJJ20KPiBub3QgdmVyeSBmYW1pbGlhciB3aXRoIFhTTS4KCkkgYmVsaWV2ZSBYU00g Y291bGQgZG8gdGhhdC4gSUlSQywgeW91IGNhbiAibGFiZWwiIHlvdXIgZG9tYWluIGFuZCB1c2Ug CnRoYXQgdG8gc2F5ICJzdHViZG9tIGlzIGFsbG93ZWQgdG8gYWNjZXNzIG1lbW9yeSB3aXRoIGRv bWFpbiB1c2luZyB0aGUgCmdpdmVuIGxhYmVsIi4KCj4gCj4+Pgo+Pj4gMy4gQ2hhbmdlcyBpbiBz Y2hlZHVsaW5nIHRvIGFsbG93IFRFRSBtZWRpYXRvciB1c2UgY3JlZGl0cy9zbGljZXMgb2YKPj4+ ICAgICBjYWxsaW5nIGd1ZXN0Lgo+Pj4KPj4+IDQuIFN1cHBvcnQgYm9pbGVycGxhdGUgY29kZSBp biBzdHViZG9tLiBZb3Uga25vdywgeW91IGNhbid0IHNpbXBseQo+Pj4gICAgIHdyaXRlIG1lZGlh dG9yIGluIHN0dWJkb20uIFlvdSBuZWVkIGEga2VybmVsLiBZb3UgbmVlZCB0bwo+Pj4gICAgIG1h aW50YWluIGl0Lgo+Pgo+PiBXZWxsLCBpbiBhIHdheSBvciBhbm90aGVyIHNvbWVvbmUgd2lsbCBo YXZlIHRvIG1haW50YWluIHRoZSBtZWRpYXRvci4uLiBUaGUKPj4ga2VybmVsIGRvZXMgbm90IG5l ZWQgdG8gYmUgc3BlY2lmaWMgdG8gVEVFLCBpdCBjb3VsZCBiZSBhIHVuaWtlcm5lbC4KPiBSaWdo dC4gQnV0IGZvciBtZSBYRU4gbG9va3MgYmV0dGVyIG1haW50YWluZWQgImtlcm5lbCIgOikKPiBJ TUhPLCBYRU4gaXMgbWF0dXJlLCB0aGVyZSBhcmUgbGVzcyBidWdzIChlc3BlY2lhbGx5IHNlY3Vy aXR5IG9uZXMpCj4gdGhhbiBpbiBhbnkgb3RoZXIga2VybmVsLgo+IAo+PiBBbmQgYmVmb3JlIHlv dSBzYXkgYWdhaW4gbm8tb25lIGluIHRoZSBjb21tdW5pdHkgc2VlbSB0byBiZSBpbnRlcmVzdGVk LiBJCj4+IHNob3VsZCByZW1pbmQgeW91IHRoYXQgQXJtIGlzIHdvcmtpbmcgb24gaXQgKHNlZSBk ZXZlbG9wbWVudCB1cGRhdGUpLgo+IFlvdSBhcmUgdGFsa2luZyBhYm91dCB0aGF0ICJ1bmljb3Jl IiBwcm9qZWN0IGJ5IE5FQyBndXlzPyBTb3JyeSwKPiBjYW4ndCBmaW5kIG1lbnRpb25lZCBkZXZl bG9wbWVudCB1cGRhdGUuIExvb2tzIGxpa2Ugc2VhcmNoIG9uIG1hcmttYWlsCj4gaXMgZG93biAo b3IgSSdtIGRvaW5nIHNvbWV0aGluZyB0ZXJyaWJseSB3cm9uZykuCgpTb3JyeSwgSSBtZWFudCBN aW5pLU9TLiBJIGRvbid0IGtub3cgYW55IHdvcmsgb24gInVuaWNvcmUiIGZvciBBcm02NCBmb3Ig Cm5vdy4KCj4gCj4+Pgo+Pj4gVGhpcyBpcyBhIGxvdCBvZiBhIHdvcmsuIEl0IHJlcXVpcmVzIGNo YW5nZXMgaW4gZ2VuZXJpYyBwYXJ0cyBvZiBYRU4uCj4+PiBJIGZlYXIgaXQgd2lsbCBiZSB2ZXJ5 IGhhcmQgdG8gdXBzdHJlYW0gc3VjaCBjaGFuZ2VzLCBiZWNhdXNlIG5vIG9uZQo+Pj4gc2VlcyBh biBpbW1lZGlhdGUgdmFsdWUgaW4gdGhlbS4gSG93IGRvIHlvdSB0aGluaywgd2hhdCBhcmUgbXkg Y2hhbmNlcwo+Pj4gdG8gdXBzdHJlYW0gdGhpcz8KPj4KPj4gSXQgaXMgZmFpcmx5IGFubm95aW5n IHRvIHNlZSB5b3UganVzdGlmeWluZyBiYWNrIG1vc3Qgb2YgdGhpcyB0aHJlYWQgd2l0aAo+PiAi bm8gb25lIHNlZXMgYW4gaW1tZWRpYXRlIHZhbHVlIGluIHRoZW0iLgo+Pgo+PiBJIGFtIG5vdCB0 aGUgb25seSBtYWludGFpbmVycyBpbiBYZW4sIHNvIGVmZmVjdGl2ZWx5IGNhbid0IHByb21pc2Ug d2hldGhlcgo+PiBpdCBpcyBnb2luZyB0byBiZSB1cHN0cmVhbWVkLiBCdXQgSSBiZWxpZXZlIHRo ZSBjb21tdW5pdHkgaGFzIGJlZW4gdmVyeQo+PiBzdXBwb3J0aXZlIHNvIGZhciwgYSBsb3Qgb2Yg ZGlzY3Vzc2lvbnMgaGFwcGVuZWQgKHNlZSBbMl0pIGJlY2F1c2Ugb2YgdGhlCj4+IE9QLVRFRSBz dXBwb3J0LiBTbyB3aGF0IG1vcmUgZG8geW91IGV4cGVjdCBmcm9tIHVzPwo+IEknbSBzb3JyeSwg SSBkaWRuJ3QgbWVhbiB0byBvZmZlbmQgeW91IG9yIHNvbWVvbmUgZWxzZS4gWW91LCBndXlzLCBj YW4KPiBiZSBoYXJzaCBzb21ldGltZXMsIGJ1dCBJIHJlYWxseSBhcHByZWNpYXRlIGhlbHAgcHJv dmlkZWQgYnkgdGhlCj4gY29tbXVuaXR5LiBBbmQgSSwgY2VydGFpbmx5LCBkb24ndCBhc2sgeW91 IGFib3V0IGFueSBndWFyYW50ZWVzIG9yCj4gc29tZXRoaW5nIG9mIHRoYXQgc29ydC4KPiAKPiBJ J20ganVzdCBib3RoZXJlZCBieSBhbW91bnQgb2YgcmVxdWlyZWQgd29yayBhbmQgYnkgdXBzdHJl YW1pbmcKPiBwcm9jZXNzLiBCdXQgdGhpcyBpcyBub3QgYSBzdHJvbmcgYXJndW1lbnQgYWdhaW5z dCBtZWRpYXRvcnMgaW4KPiBzdHViZG9tcywgSSB0aGluayA6KQo+IAo+IEN1cnJlbnRseSBJJ20g ZGV2ZWxvcGluZyB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IGluIE9QLVRFRSwgc28gaW4KPiBtZWFu dGltZSB3ZSdsbCBoYXZlIG11Y2ggdGltZSB0byBkaXNjdXNzIG1lZGlhdG9ycyBhbmQgc3R1YmRv bWFpbgo+IGFwcHJvYWNoIChpZiB5b3UgaGF2ZSB0aW1lKS4gVG8gdGVzdCB0aGlzIGZlYXR1cmUg aW4gT1AtVEVFIEknbQo+IGV4dGVuZGluZyB0aGlzIFJGQywgbWFraW5nIG9wdGVlLmMgdG8gbG9v ayBsaWtlIGZ1bGwtc2NhbGUgbWVkaWF0b3IuCj4gSSBuZWVkIHRvIGRvIHRoaXMgYW55d2F5cywg dG8gdGVzdCBPUC1URUUuIFdoZW4gSSdsbCBmaW5pc2gsIEkgY2FuCj4gc2hvdyB5b3UgaG93IG1l ZGlhdG9yIGNhbiBsb29rIGxpa2UuIE1heWJlIHRoaXMgd2lsbCBwZXJzdWFkZSB5b3UgdG8KPiBv bmUgb3IgYW5vdGhlciBhcHByb2FjaC4KCkkgdGhpbmsgdGhpcyB3b3VsZCBiZSB1c2VmdWwuIENh biB5b3UgYWxzbyBrZWVwIGJvdGggU3RlZmFubyAoSSBhc3N1bWUgCmhlIHdhbnRzIHRvbykgYW5k IEkgIGluIHRoZSBsb29wIGZvciB0aGUgT1AtVEVFIHZpcnR1YWxpemF0aW9uIHNpZGU/CgpDaGVl cnMsCgotLSAKSnVsaWVuIEdyYWxsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4u b3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK