From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andre Przywara Subject: Re: [RFC] ARM: New (Xen) VGIC design document Date: Wed, 1 Nov 2017 17:54:27 +0000 Message-ID: <7ae1e665-1ac0-3193-cab4-e66e814ad50a@linaro.org> References: <20171011143303.27453-1-andre.przywara@arm.com> <20171012120531.GA8927@cbox> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e9x9Z-0005KY-Oa for xen-devel@lists.xenproject.org; Wed, 01 Nov 2017 17:50:14 +0000 Received: by mail-wr0-f196.google.com with SMTP id o44so2616972wrf.11 for ; Wed, 01 Nov 2017 10:50:10 -0700 (PDT) In-Reply-To: <20171012120531.GA8927@cbox> Content-Language: en-GB List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Christoffer Dall Cc: Stefano Stabellini , Marc Zyngier , Julien Grall , Eric Auger , xen-devel@lists.xenproject.org, Christoffer Dall List-Id: xen-devel@lists.xenproject.org SGkgQ2hyaXN0b2ZmZXIsCgpPbiAxMi8xMC8xNyAxMzowNSwgQ2hyaXN0b2ZmZXIgRGFsbCB3cm90 ZToKPiBIaSBBbmRyZSwKPiAKPiBPbiBXZWQsIE9jdCAxMSwgMjAxNyBhdCAwMzozMzowM1BNICsw MTAwLCBBbmRyZSBQcnp5d2FyYSB3cm90ZToKPj4gSGksCj4+Cj4+IChDQzppbmcgc29tZSBLVk0v QVJNIGZvbGtzIGludm9sdmVkIGluIHRoZSBWR0lDKQo+IAo+IFZlcnkgbmljZSB3cml0ZXVwIQo+ IAo+IEkgYWRkZWQgYSBidW5jaCBvZiBjb21tZW50cywgbW9zdGx5IGZvciB0aGUgd3JpdGluZyBh bmQgY2xhcml0eSwgSSBob3BlCj4gaXQgaGVscHMuCgpUaGFuayB5b3UgdmVyeSBtdWNoIGZvciB0 aGUgcmVzcG9uc2UgYW5kIHRoZSBjb21tZW50cyEgSSByZWFsbHkKYXBwcmVjaWF0ZSB5b3VyIHBy ZWNpc2UgKGFjYWRlbWljKSBsYW5ndWFnZSBoZXJlLgpJIGhlbGQgYmFjayB0aGUgcmVzcG9uc2Ug c2luY2UgU3RlZmFubyB3YXMgdGhlIGFjdHVhbCBhZGRyZXNzZWUgb2YgdGhpcwp3cml0ZS11cCwg c286IHNvcnJ5IGZvciB0aGUgZGVsYXkuCgo+PiBzdGFydGluZyB3aXRoIHRoZSBhZGRpdGlvbiBv ZiB0aGUgSVRTIHN1cHBvcnQgd2Ugd2VyZSBzZWVpbmcgbW9yZSBhbmQKPj4gbW9yZSBpc3N1ZXMg d2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBvdXIgQVJNIEdlbmVyaWMgSW50ZXJy dXB0Cj4+IENvbnRyb2xsZXIgKEdJQykgZW11bGF0aW9uLCB0aGUgVkdJQy4KPj4gQW1vbmcgb3Ro ZXIgYXBwcm9hY2hlcyB0byBmaXggdGhvc2UgaXNzdWVzIGl0IHdhcyBwcm9wb3NlZCB0byBjb3B5 IHRoZQo+PiBWR0lDIGVtdWxhdGlvbiB1c2VkIGluIEtWTS4gVGhpcyBvbmUgd2FzIHN1ZmZlcmlu ZyBmcm9tIHZlcnkgc2ltaWxhcgo+PiBpc3N1ZXMsIGFuZCBhIGNsZWFuIGRlc2lnbiBmcm9tIHNj cmF0Y2ggbGVhZCB0byBhIHZlcnkgcm9idXN0IGFuZAo+PiBjYXBhYmxlIHJlLWltcGxlbWVudGF0 aW9uLiBJbnRlcmVzdGluZ2x5IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgZmFpcmx5Cj4+IHNlbGYt Y29udGFpbmVkLCBzbyBpdCBzZWVtcyBmZWFzaWJsZSB0byBjb3B5IGl0LiBIb3BlZnVsbHkgd2Ug b25seSBuZWVkCj4+IG1pbm9yIGFkanVzdG1lbnRzLCBwb3NzaWJseSB3ZSBjYW4gZXZlbiBjb3B5 IGl0IHZlcmJhdGltIHdpdGggc29tZQo+PiBhZGRpdGlvbmFsIGdsdWUgbGF5ZXIgY29kZS4KPj4g U3RlZmFubyBhc2tlZCBmb3IgZ2V0dGluZyBhIGRlc2lnbiBvdmVydmlldywgdG8gYXNzZXNzIHRo ZSBmZWFzaWJpbGl0eQo+PiBvZiBjb3B5aW5nIHRoZSBLVk0gY29kZSB3aXRob3V0IHJldmlld2lu ZyB0b25zIG9mIGNvZGUgaW4gdGhlIGZpcnN0Cj4+IHBsYWNlLgo+PiBTbyB0byBmb2xsb3cgWGVu IHJ1bGVzIGZvciBuZXcgZmVhdHVyZXMsIHRoaXMgZGVzaWduIGRvY3VtZW50IGJlbG93IGlzCj4+ IGFuIGF0dGVtcHQgdG8gZGVzY3JpYmUgdGhlIGN1cnJlbnQgS1ZNIFZHSUMgZGVzaWduIC0gaW4g YSBoeXBlcnZpc29yCj4+IGFnbm9zdGljIHNlc3Npb24uIEl0IGlzIGEgYml0IG9mIGEgcmV0cm8t Zml0IGRlc2lnbiBkZXNjcmlwdGlvbiwgYXMgaXQKPj4gaXMgbm90IHN0cmljdGx5IGZvcndhcmQt bG9va2luZyBvbmx5LCBidXQgYWN0dWFsbHkgZGVzY3JpYmluZyB0aGUKPj4gZXhpc3RpbmcgaW1w bGVtZW5hdGlvbiBbMV0uCj4+Cj4+IFBsZWFzZSBoYXZlIGEgbG9vayBhbmQgbGV0IG1lIGtub3c6 Cj4+IDEpIGlmIHRoaXMgZG9jdW1lbnQgaGFzIHRoZSByaWdodCBzY29wZQo+PiAyKSBpZiB0aGlz IGRvY3VtZW50IGhhcyB0aGUgcmlnaHQgbGV2ZWwgb2YgZGV0YWlsCj4+IDMpIGlmIHRoZXJlIGFy ZSBwb2ludHMgbWlzc2luZyBmcm9tIHRoZSBkb2N1bWVudAo+PiAzKSBpZiB0aGUgZGVzaWduIGlu IGdlbmVyYWwgaXMgYSBmaXQKPj4KPj4gQXBwcmVjaWF0ZSBhbnkgZmVlZGJhY2shCj4+Cj4+IENo ZWVycywKPj4gQW5kcmUuCj4+Cj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+Pgo+PiBWR0lDIGRlc2lnbgo+PiA9PT09PT09PT09PQo+Pgo+PiBUaGlzIGRvY3VtZW50 IGRlc2NyaWJlcyB0aGUgZGVzaWduIG9mIGFuIEFSTSBHZW5lcmljIEludGVycnVwdCBDb250cm9s bGVyIChHSUMpCj4+IGVtdWxhdGlvbi4gSXQgaXMgbWVhbnQgdG8gZW11bGF0ZSBhIEdJQyBmb3Ig YSBndWVzdCBpbiBhbiB2aXJ0dWFsIG1hY2hpbmUsCj4+IHRoZSBjb21tb24gbmFtZSBmb3IgdGhh dCBpcyBWR0lDIChmcm9tICJ2aXJ0dWFsIEdJQyIpLgo+Pgo+PiBUaGlzIGRlc2lnbiB3YXMgdGhl IHJlc3VsdCBvZiBhIG9uZS13ZWVrLWxvbmcgZGVzaWduIHNlc3Npb24gd2l0aCBzb21lCj4+IGVu Z2luZWVycyBpbiBhIHJvb20sIHRyaWdnZXJlZCBieSBldmVyLWluY3JlYXNpbmcgZGlmZmljdWx0 aWVzIGluIG1haW50YWluaW5nCj4+IHRoZSBleGlzdGluZyBHSUMgZW11bGF0aW9uIGluIHRoZSBL Vk0gaHlwZXJ2aXNvci4gVGhlIGRlc2lnbiBldmVudHVhbGx5Cj4+IG1hdGVyaWFsaXNlZCBhcyBh biBhbHRlcm5hdGl2ZSBWR0lDIGltcGxlbWVudGF0aW9uIGluIHRoZSBMaW51eCBrZXJuZWwKPj4g KG1lcmdlZCBpbnRvIExpbnV4IHY0LjcpLiBBcyBvZiBMaW51eCB2NC44IHRoZSBwcmV2aW91cyBW R0lDIGltcGxlbWVudGF0aW9uCj4+IHdhcyByZW1vdmVkLCBzbyBpdCBpcyBub3cgdGhlIGN1cnJl bnQgY29kZSB1c2VkIGJ5IExpbnV4Lgo+PiBBbHRob3VnaCBiZWluZyB1c2VkIGluIEtWTSwgdGhl IGFjdHVhbCBkZXNpZ24gb2YgdGhpcyBWR0lDIGlzIHJhdGhlciBoeXBlcnZpc29yCj4+IGFnbm9z dGljIGFuZCBjYW4gYmUgdXNlZCBieSBvdGhlciBoeXBlcnZpc29ycyBhcyB3ZWxsLCBpbiBwYXJ0 aWN1bGFyIGZvciBYZW4uCj4+Cj4+IEdJQyBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0 Cj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Cj4+IFRoZSBBUk0gR2Vu ZXJpYyBJbnRlcnJ1cHQgQ29udHJvbGxlciAoc2luY2UgdjIpIHN1cHBvcnRzIHRoZSB2aXJ0dWFs aXphdGlvbgo+PiBleHRlbnNpb25zLCB3aGljaCBhbGxvd3Mgc29tZSBwYXJ0cyBvZiB0aGUgaW50 ZXJydXB0IGxpZmUgY3ljbGUgdG8gYmUgaGFuZGxlZAo+PiBwdXJlbHkgaW5zaWRlIHRoZSBndWVz dCB3aXRob3V0IGV4aXRpbmcgaW50byB0aGUgaHlwZXJ2aXNvci4KPj4gSW4gdGhlIEdJQ3YyIGFu ZCBHSUN2MyBhcmNoaXRlY3R1cmUgdGhpcyBjb3ZlcnMgbW9zdGx5IHRoZSAiaW50ZXJydXB0Cj4+ IGFja25vd2xlZGdlbWVudCIsICJwcmlvcml0eSBkcm9wIiBhbmQgImludGVycnVwdCBkZWFjdGl2 YXRlIiBhY3Rpb25zLgo+PiBTbyBhIGd1ZXN0IGNhbiBoYW5kbGUgbW9zdCBvZiB0aGUgaW50ZXJy dXB0IHByb2Nlc3NpbmcgY29kZSB3aXRob3V0Cj4+IGxlYXZpbmcgRUwxIGFuZCB0cmFwcGluZyBp bnRvIHRoZSBoeXBlcnZpc29yLiBUbyBhY2NvbXBsaXNoCj4+IHRoaXMsIHRoZSBHSUMgaG9sZHMg c28gY2FsbGVkICJsaXN0IHJlZ2lzdGVycyIgKExScyksIHdoaWNoIHNoYWRvdyB0aGUKPj4gaW50 ZXJydXB0IHN0YXRlIGZvciBhbnkgdmlydHVhbCBpbnRlcnJ1cHQuIEluamVjdGluZyBhbiBpbnRl cnJ1cHQgdG8gYSBndWVzdAo+PiBpbnZvbHZlcyBzZXR0aW5nIHVwIG9uZSBMUiB3aXRoIHRoZSBp bnRlcnJ1cHQgbnVtYmVyLCBpdHMgcHJpb3JpdHkgYW5kIGluaXRpYWwKPj4gc3RhdGUgKG1vc3Rs eSAicGVuZGluZyIpLCB0aGVuIGVudGVyaW5nIHRoZSBndWVzdC4gQW55IEVPSSByZWxhdGVkIGFj dGlvbgo+PiBmcm9tIHdpdGhpbiB0aGUgZ3Vlc3QganVzdCBhY3RzIG9uIHRob3NlIExScywgdGhl IGh5cGVydmlzb3IgY2FuIGxhdGVyIHVwZGF0ZQo+PiB0aGUgdmlydHVhbCBpbnRlcnJ1cHQgc3Rh dGUgd2hlbiB0aGUgZ3Vlc3QgZXhpc3RzIHRoZSBuZXh0IHRpbWUgKGZvciB3aGF0ZXZlcgo+PiBy ZWFzb24pLgo+PiBCdXQgZGVzcGl0ZSB0aGUgR0lDIGhhcmR3YXJlIGhlbHBpbmcgb3V0IGhlcmUs IHRoZSB3aG9sZSBpbnRlcnJ1cHQKPj4gY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IGlzIG5vdCB2 aXJ0dWFsaXplZCBhdCBhbGwgYW5kIG5lZWRzIHRvIGJlIGVtdWxhdGVkCj4+IGJ5IHRoZSBoeXBl cnZpc29yIC0gb3IgYW5vdGhlciByZWxhdGVkIHNvZnR3YXJlIGNvbXBvbmVudCwgZm9yIGluc3Rh bmNlIGEKPj4gdXNlcmxhbmQgZW11bGF0b3IuIFRoaXMgc28gY2FsbGVkICJkaXN0cmlidXRvciIg cGFydCBvZiB0aGUgR0lDIGNvbnNpc3RzIG9mCj4+IG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzLCB3 aGljaCBjYW4gYmUgdHJhcHBlZCBieSB0aGUgaHlwZXJ2aXNvciwgc28gYW55IGd1ZXN0Cj4+IGFj Y2VzcyBjYW4gYmUgZW11bGF0ZWQgaW4gdGhlIHVzdWFsIHdheS4KPj4KPj4gVkdJQyBkZXNpZ24g bW90aXZhdGlvbgo+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+Cj4+IEEgR0lDIGVtdWxhdGlv biB0aHVzIG5lZWRzIHRvIHRha2UgY2FyZSBvZiB0aG9zZSBiaXRzOgo+Pgo+PiAtIHRyYXAgR0lD IGRpc3RyaWJ1dG9yIE1NSU8gYWNjZXNzZXMgYW5kIHNoYWRvdyB0aGUgY29uZmlndXJhdGlvbiBz ZXR1cAo+PiAgIChlbmFibGVkL2Rpc2FibGVkLCBsZXZlbC9lZGdlLCBwcmlvcml0eSwgYWZmaW5p dHkpIGZvciB2aXJ0dWFsIGludGVycnVwdHMKPj4gLSBoYW5kbGUgaW5jb21pbmcgaGFyZHdhcmUg YW5kIHZpcnR1YWwgaW50ZXJydXB0IHJlcXVlc3RzIGFuZCBpbmplY3QgdGhlCj4+ICAgYXNzb2Np YXRlZCB2aXJ0dWFsIGludGVycnVwdCBieSBtYW5pcHVsYXRpbmcgb25lIG9mIHRoZSBsaXN0IHJl Z2lzdGVycwo+PiAtIHRyYWNrIHRoZSBzdGF0ZSBvZiBhIHZpcnR1YWwgaW50ZXJydXB0IGJ5IGlu c3BlY3RpbmcgdGhlIExScyBhZnRlciB0aGUKPj4gICBndWVzdCBoYXMgZXhpdGVkLCBwb3NzaWJs eSBhZGp1c3RpbmcgdGhlIHNoYWRvd2VkIHZpcnR1YWwgaW50ZXJydXB0IHN0YXRlCj4+Cj4+IERl c3BpdGUgdGhlIGRpc3RyaWJ1dG9yIE1NSU8gcmVnaXN0ZXIgZW11bGF0aW9uIGJlaW5nIGEgc2l6 ZWFibGUgY2h1bmsgb2YKPj4gdGhlIGVtdWxhdGlvbiwgaXQgaXMgYWN0dWFsbHkgbm90IGRvbWlu YW50IGlmIGxvb2tpbmcgYXQgdGhlIGZyZXF1ZW5jeSBhdAo+PiB3aGljaCBpdCBpcyBhY2Nlc3Nl ZC4gTm9ybWFsbHkgdGhlIGludGVycnVwdCBjb25maWd1cmF0aW9uIGlzIGRvbmUgYXQgYm9vdAo+ PiB0aW1lIG9yIHVwb24gaW5pdGlhbGlzaW5nIHRoZSBkZXZpY2UgKGRyaXZlciksIGJ1dCByYXJl bHkgZHVyaW5nIHRoZSBhY3R1YWwKPj4gcnVuIHRpbWUgb2YgYSBzeXN0ZW0uIEluamVjdGluZyBh bmQgRU9JLWluZyBpbnRlcnJ1cHRzIGhvd2V2ZXIgaGFwcGVucyBtdWNoCj4+IG1vcmUgb2Z0ZW4u IEEgZ29vZCBlbXVsYXRpb24gYXBwcm9hY2ggc2hvdWxkIHRodXMgZm9jdXMgb24gdHJhY2tpbmcg dGhlIHZpcnR1YWwKPj4gaW50ZXJydXB0IHN0YXRlIGVmZmljaWVudGx5LCBhbGxvd2luZyBxdWlj ayBoYW5kbGluZyBvZiBpbmNvbWluZyBhbmQgRU9JLWVkCj4+IGludGVycnVwdHMuCj4gCj4gSSB3 b3VsZCBhbHNvIHNheSB0aGF0IHRoZSBhcmNoaXRlY3R1cmUgZm9yIHRoZSBHSUMgaW5jbHVkZXMg YSByZWxhdGl2ZWx5Cj4gaGlnaCBudW1iZXIgb2YgY29ybmVyIGNhc2VzIGFuZCBpbnZhcmlhbnRz IHRoYXQgbWF5IG5vdCBiZSB2aW9sYXRlZCwgYW5kCj4gYmVpbmcgY29tcGxldGVseSBhcmNoaXRl Y3R1cmUgY29tcGxpYW50IHdhcyBvdXIgZmlyc3QgcmVxdWlyZW1lbnQsIHRoZQo+IHNlY29uZCBy ZXF1aXJlbWVudCB3YXMgdG8gc3VwcG9ydCBlZmZpY2llbnQgaW50ZXJydXB0IGxpZmUgY3ljbGUK PiBtYW5hZ2VtZW50IGFuZCB0byBiZSBhYmxlIHRvIHF1aWNrbHkgdGVsbCB3aGljaCAoaWYgYW55 KSBpbnRlcnJ1cHRzIG11c3QKPiBiZSBwcmVzZW50ZWQgdG8gYSB2aXJ0dWFsIENQVS4KCjEwMCUg QUNLLiBXaWxsIHRyeSB0byBpbmNsdWRlIHRoaXMuCgo+PiBUaGUgYWN0dWFsIGludGVycnVwdCBz dGF0ZSB0cmFja2luZyBjYW4gYmUgcXVpdGUgdHJpY2t5IGluIHBhcnRzLiBJbnRlcnJ1cHQKPj4g aW5qZWN0aW9ucyBjYW4gYmUgaW5kZXBlbmRlbnQgZnJvbSB0aGUgZ3Vlc3QgZW50cnkvZXhpdCBw b2ludHMsIGFsc28gTU1JTwo+PiBjb25maWd1cmF0aW9uIGFjY2Vzc2VzIGNvdWxkIGJlIHRyaWdn ZXJlZCBieSBhbnkgVkNQVSBhdCBhbnkgcG9pbnQgaW4gdGltZS4KPj4gQ2hhbmdpbmcgaW50ZXJy dXB0IENQVSBhZmZpbml0eSBhZGRzIHRvIHRoZSBjb21wbGljYXRpb24uCj4+IFRoaXMgbGVhZHMg dG8gbWFueSBjb2RlIHBhcnRzIHdoaWNoIGNvdWxkIHJ1biBpbiBwYXJhbGxlbCBhbmQgdGh1cyBj b250YWlucwo+PiBzb21lIHJhY2UgY29uZGl0aW9ucywgc28gcHJvcGVyIGxvY2tpbmcgYmVjb21l cyBrZXkgb2YgYSBnb29kIGRlc2lnbi4KPj4gQnV0IG9uZSBoYXMgdG8gY29uc2lkZXIgdGhhdCBp bnRlcnJ1cHRzIGluIGdlbmVyYWwgY2FuIGJlIGNoYXJhY3RlcmlzZWQKPj4gYXMgYSByYXJlIGV2 ZW50IC0gb3RoZXJ3aXNlIGEgZ3Vlc3Qgd291bGQgYmUgYnVzeSBoYW5kbGluZyBpbnRlcnJ1cHRz IGFuZCBjb3VsZAo+IAo+IChhY3Jvc3MgYWxsIHZpcnR1YWwgQ1BVcykKPiAKPj4gbm90IHByb2Nl c3MgYWN0dWFsIGNvbXB1dGF0aW9uIHRhc2tzLgo+PiBUaGF0J3Mgd2h5IHRoZSBpbnRlcnJ1cHQg c3RhdGUgdHJhY2tpbmcgc2hvdWxkIGZvY3VzIG9uIGEgY2xlYXIgYW5kIHJhY2UtZnJlZQo+IAo+ IG5pdDogbm90IHN1cmUgaXQgbWFrZXMgc2Vuc2UgdG8gdGFsayBhYm91dCBhIHJhY2UtZnJlZSBs b2NraW5nIHNjaGVtZS4KPiBZb3UgaGF2ZSBsb2NraW5nIGluaGVyZW50bHkgYmVjYXVzZSB5b3Ug aGF2ZSByYWNlczsgbG9ja2luZyBqdXN0IG1ha2VzCj4gc3VyZSB0aGF0IHRoaW5ncyB0aGF0IHJh Y2UgYW5kIGFjY2VzcyBkYXRhIGNvbmN1cnJlbnRseSBkb24ndCBjb3JydXB0Cj4gc3RhY2UgYW5k IHRoYXQgdGhlIHJhY2VzIGJlY29tZSBiZW5pZ24uCgpJbmRlZWQsIGdvb2QgcG9pbnQuCgo+PiBs b2NraW5nIHNjaGVtZSwgd2l0aG91dCBuZWVkbGVzc2x5IG9wdGltaXNpbmcgdG9vIG11Y2ggaW4g dGhpcyByZXNwZWN0Lgo+PiBFeHBlcmllbmNlIHNob3dzIHRoYXQgdGhpcyBjb21wbGljYXRlcyB0 aGUgY29kZSBhbmQgbGVhZHMgdG8gdW5kZXRlY3RlZCBhbmQKPj4gaGFyZC10by1kZWJ1ZyByYWNl IGNvbmRpdGlvbnMsIHdoaWNoIGFmZmVjdCB0aGUgc3RhYmlsaXR5IG9mIHRoZSBzeXN0ZW0gaW4K Pj4gcG9zc2libHkgdW50ZXN0ZWQgY29ybmVyIGNhc2VzLgo+IAo+IEkgdGhpbmsgZXhwZXJpZW5j ZSBhbHNvIHNob3dzIHRoYXQgdGhlIGV4cGVjdGVkIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzCj4g cmVhbGx5IHdlcmVuJ3QgdGhlcmUgYXQgYWxsLCBhbmQgYW55IG9wdGltaXphdGlvbiBlZmZvcnRz IHNob3VsZCBiZQo+IGRyaXZlbiBieSBjbGVhciBtZWFzdXJlbWVudHMgb2YgdGhlIHBhaW4gcG9p bnRzLCBmYWxsaW5nIGJhY2sgdG8gY2xhcml0eQo+IG9mIGltcGxlbWVudGF0aW9uIGFuZCBlYXNl IG9mIG1haW50ZW5hbmNlIGZvciBhbGwgb3RoZXIgcGFydHMgb2YgdGhlCj4gaW1wbGVtZW50YXRp b24uCgpZZXMsIGl0IHNlZW1zIG9idmlvdXMsIGJ1dCBpcyBpbmRlZWQgc29tZXRoaW5nIHRoYXQg d2UgbmVlZCB0byByZW1lbWJlcgpvdXJzZWx2ZXMgb2YgZnJvbSB0aW1lIHRvIHRpbWUuCgo+PiBW R0lDIGRlc2lnbiBwcmluY2lwbGVzCj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4KPj4gIyMj IERhdGEgc3RydWN0dXJlCj4+Cj4+IFRoaXMgVkdJQyBkZXNpZ24gaXMgYmFzZWQgb24gdGhlIGlk ZWEgb2YgaGF2aW5nIG9uZSBzdHJ1Y3R1cmUgcGVyIHZpcnR1YWwKPj4gaW50ZXJydXB0LCBwcm90 ZWN0ZWQgYnkgaXRzIG93biBsb2NrLiAKPiAKPiBFdmVuIG1vcmUgaGlnaCBsZXZlbDogVGhpcyBW R0lDIGRlc2lnbiB3YXMgYmFzZWQgYXJvdW5kIGhhdmluZyBhIHZlcnkKPiBjbGVhciBkYXRhIHN0 cnVjdHVyZSBkZXNpZ24sIG5ldmVyIGR1cGxpY2F0aW5nIHN0YXRlLCBhbmQgbWFraW5nIGl0Cj4g YWJ1bmRhbnRseSBjbGVhciBob3cgdGhpbmdzIGFyZSBzdHJ1Y3R1cmVkLiAgT25lIHdheSBvZiBh Y2hpZXZpbmcgdGhhdAo+IGlzIHRvIGhhdmUgYSBzdHJ1Y3R1cmUgcGVyIGludGVycnVwdCwgZWFj aCBoYXZpbmcgaXRzIG93biBsb2NrLgo+IAo+PiBJbiBhZGRpdGlvbiB0aGVyZSBpcyBhIGxpc3Qg cGVyIFZDUFUsCj4+IHdoaWNoIHF1ZXVlcyB0aGUgaW50ZXJydXB0cyB3aGljaCB0aGlzIFZDUFUg c2hvdWxkIGNvbnNpZGVyIGZvciBpbmplY3Rpb24uCj4gCj4gbml0OiBTaG91bGQgeW91IGludHJv ZHVjZSB0aGUgQVAgbGlzdCBuYW1lIGhlcmUsIGFuZCBzYXkgdGhhdCBpdCdzIHByb3RlY3RlZAo+ IGJ5IHRoZSBWQ1BVIGxvY2s/CgpZZWFoLCBnb29kIGlkZWEuCgo+PiBPbmUgaW50ZXJydXB0IGNh biBvbmx5IGJlIG9uIG9uZSBWQ1BVIGxpc3QgYXQgYW55IGdpdmVuIHBvaW50IGluIHRpbWUuCj4g Cj4gbml0LCB3b3JkaW5nOiBBbnkgaW50ZXJydXB0IGNhbiBiZSBvbiBhdCBtb3N0IG9uZSBBUCBs aXN0IGF0IGFueSBwb2ludAo+IGluIHRpbWUuCj4gCj4+IEZvciBwcml2YXRlIGludGVycnVwdHMg YW5kIFNQSXMgYSBzdGF0aWMgYWxsb2NhdGlvbiBvZiB0aGlzIGRhdGEgc3RydWN0dXJlCj4gCj4g bml0OiBQUElzIGFuZCBTUElzIChvciBwcml2YXRlIGFuZCBzaGFyZWQgaW50ZXJydXB0cykKCldl bGwsIHdpdGggInByaXZhdGUgaW50ZXJydXB0cyIgSSBpbmNsdWRlZCBTR0lzIGFzIHdlbGwsIGJh c2ljYWxseSBldmVyeQpJUlEgdGhhdCBpcyBzdGF0aWMgYW5kIGhhcyBhIHdlbGwgYm91bmRlZCB1 cHBlciBsaW1pdC4KCj4+IHdvdWxkIGJlIHN1ZmZpY2llbnQsIGhvd2V2ZXIgTFBJcyAodHJpZ2dl cmVkIGJ5IGEgKHZpcnR1YWwpIElUUykgaGF2ZSBhIHZlcnkKPj4gZHluYW1pYyBhbmQgcG9zc2li bHkgdmVyeSBzcGFyc2UgYWxsb2NhdGlvbiBzY2hlbWUsIHNvIHdlIG5lZWQgdG8gZGVhbCB3aXRo Cj4+IGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZGUtYWxsb2NhdGlvbiBvZiB0aGlzIHN0cnVjdC4g VG8gYWNjb21tb2RhdGUgdGhpcwo+PiB0aGVyZSBpcyBhbiBhZGRpdGlvbmFsIGxpc3QgaGVhZGVy IHRvIGxpbmsgYWxsIExQSXMuCj4+IEFsc28gdGhlIExQSSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcg Y2FuIGhhcHBlbiBhc3luY2hyb25vdXNseSwgc28gd2UgbmVlZCB0bwo+IAo+IGFzeW5jaHJvbm91 c2x5IHRvIHdoYXQ/CgpBc3luY2hyb25vdXNseSB0byBtYW5hZ2luZyB2aXJ0dWFsIGludGVycnVw dHMsIGkuZS4gaW4gdGhlIG1pZGRsZSBvZiB0aGUKSFYgcnVubmluZyBvciBldmVuIGR1cmluZyB0 aGUgYWN0dWFsIGluamVjdGlvbiBjb2RlLgoKPj4gcHJvcGVybHkgcmVmLWNvdW50IHRoZSBzdHJ1 Y3R1cmUgKGF0IGxlYXN0IGZvciBMUElzKSwgb3RoZXJ3aXNlIHNvbWUgY29kZSBwYXJ0cwo+IAo+ IG5pdCwgd29yZGluZzogcmVmZXJlbmNlIGNvdW50Lgo+IAo+PiB3b3VsZCBwb3RlbnRpYWxseSBl bmQgdXAgd2l0aCByZWZlcmVuY2luZyBhbiBhbHJlYWR5IGZyZWVkIHBvaW50ZXIuCj4gCj4gSXQn cyBub3Qgb25seSB0aGF0LCBpdCdzIHRoYXQgeW91IG5lZWQgdG8ga25vdyB3aGVuIHRvIGZyZWUg dGhpbmdzLgo+IFRoaXMgaXMgdGhlIGJhc2ljIGlkZWEgb2YgcmVmZXJlbmNlIGNvdW50aW5nIHdo aWNoIEkgZG9uJ3QgdGhpbmsgeW91Cj4gbmVlZCB0byBhcmd1ZSBmb3IgaW4gdGhpcyBkb2N1bWVu dC4KCkFncmVlZCwgYW5kIHNpbmNlIFN0ZWZhbm8gb2J2aW91c2x5IGRvZXMgbm90IG5lZWQgY29u dmluY2luZyBvbiB0aGlzCmZyb250IDstKSwgSSBjYW4gc2hvcnRlbiB0aGUgYXJndW1lbnQgaGVy ZS4KCj4+Cj4+IFRoZSBjZW50cmFsIGRhdGEgc3RydWN0dXJlIGlzIGNhbGxlZCBgc3RydWN0IHZn aWNfaXJxYCwgYW5kLCBiZXNpZGUgdGhlCj4+IGV4cGVjdGVkIGludGVycnVwdCBjb25maWd1cmF0 aW9uIGRhdGEsIGNvbnRhaW5zIGF0IGxlYXN0IHRoZSBsb2NrLCBhIGxpc3QKPj4gaGVhZGVyICh0 byBiZSBhYmxlIHRvIGxpbmsgaXQgdG8gYSBWQ1BVKSBhbmQgYSByZWZjb3VudC4gQWxzbyBpdCBj b250YWlucwo+PiB0aGUgaW50ZXJydXB0IG51bWJlciAodG8gYWNjb21tb2RhdGUgZm9yIG5vbi1j b250aWd1b3VzIGludGVycnVwdCBhbGxvY2F0aW9ucywKPj4gZm9yIGluc3RhbmNlIGZvciBMUElz KS4KPj4gQmVzaWRlIHRob3NlIGVzc2VudGlhbCBlbGVtZW50cyBpdCBwcm92ZXMgd29ydGggdG8g c3RvcmUgKGEgcmVmZXJlbmNlIHRvKSB0aGUKPj4gVkNQVSB0aGlzIElSUSBpcyBhc3NvY2lhdGVk IHdpdGguIFRoaXMgYWxsb3dzIHRvIGVhc2lseSBmaW5kIHRoZSByZXNwZWN0aXZlCj4+IFZDUFUg bGlzdC4KPj4KPj4gICAgIHN0cnVjdCB2Z2ljX2lycSB7Cj4+ICAgICAgICAgc3BpbmxvY2tfdCBp cnFfbG9jazsgICAgICAgICAgICAvKiBQcm90ZWN0cyB0aGUgY29udGVudCBvZiB0aGUgc3RydWN0 ICovCj4+ICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBscGlfbGlzdDsgICAgICAvKiBVc2VkIHRv IGxpbmsgYWxsIExQSXMgdG9nZXRoZXIgKi8KPj4gICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGFw X2xpc3Q7Cj4+Cj4+ICAgICAgICAgc3RydWN0IHZjcHUgKnZjcHU7ICAgICAgICAgICAgICAvKiBT R0lzIGFuZCBQUElzOiBUaGUgVkNQVQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogU1BJcyBhbmQgTFBJczogVGhlIFZDUFUgd2hvc2UgYXBfbGlzdAo+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyBpcyBxdWV1ZWQgb24u Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KPj4KPj4gICAg ICAgICBzdHJ1Y3QgdmNwdSAqdGFyZ2V0X3ZjcHU7ICAgICAgICAvKiBUaGUgVkNQVSB0aGF0IHRo aXMgaW50ZXJydXB0IHNob3VsZAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIGJlIHNlbnQgdG8sIGFzIGEgcmVzdWx0IG9mIHRoZQo+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRhcmdldHMgcmVnICh2Mikgb3IgdGhlCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWZmaW5pdHkgcmVn ICh2MykuCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCj4+ Cj4+ICAgICAgICAgdTMyIGludGlkOyAgICAgICAgICAgICAgICAgICAgICAvKiBHdWVzdCB2aXNp YmxlIElOVElEICovCj4+ICAgICAgICAgYm9vbCBsaW5lX2xldmVsOyAgICAgICAgICAgICAgICAv KiBMZXZlbCBvbmx5ICovCj4+ICAgICAgICAgYm9vbCBwZW5kaW5nX2xhdGNoOyAgICAgICAgICAg ICAvKiBUaGUgcGVuZGluZyBsYXRjaCBzdGF0ZSB1c2VkIHRvCj4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBjYWxjdWxhdGUgdGhlIHBlbmRpbmcgc3RhdGUgZm9y Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBib3RoIGxldmVs IGFuZCBlZGdlIHRyaWdnZXJlZCBJUlFzLgo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCj4+Cj4+ICAgICAgICAgYm9vbCBhY3RpdmU7ICAgICAgICAgICAgICAg ICAgICAvKiBub3QgdXNlZCBmb3IgTFBJcyAqLwo+PiAgICAgICAgIGJvb2wgZW5hYmxlZDsKPj4g ICAgICAgICBib29sIGh3OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpZWQgdG8gSFcgSVJR ICovCj4+ICAgICAgICAgc3RydWN0IGtyZWYgcmVmY291bnQ7ICAgICAgICAgICAvKiBVc2VkIGZv ciBMUElzICovCj4+ICAgICAgICAgdTMyIGh3aW50aWQ7ICAgICAgICAgICAgICAgICAgICAvKiBI VyBJTlRJRCBudW1iZXIgKi8KPj4gICAgICAgICB1bmlvbiB7Cj4+ICAgICAgICAgICAgIHU4IHRh cmdldHM7ICAgICAgICAgICAgICAgICAgICAgLyogR0lDdjIgdGFyZ2V0IFZDUFVzIG1hc2sgKi8K Pj4gICAgICAgICAgICAgdTMyIG1waWRyOyAgICAgICAgICAgICAgICAgICAgICAvKiBHSUN2MyB0 YXJnZXQgVkNQVSAqLwo+PiAgICAgICAgIH07Cj4+ICAgICAgICAgdTggc291cmNlOyAgICAgICAg ICAgICAgICAgICAgICAvKiBHSUN2MiBTR0lzIG9ubHkgKi8KPj4gICAgICAgICB1OCBwcmlvcml0 eTsKPj4gICAgICAgICBlbnVtIHZnaWNfaXJxX2NvbmZpZyBjb25maWc7ICAgIC8qIExldmVsIG9y IGVkZ2UgKi8KPj4gICAgIH07Cj4+Cj4+ICMjIyBWQ1BVIGxpc3QgaGFuZGxpbmcKPj4KPj4gSW5p dGlhbGx5IGEgdmlydHVhbCBpbnRlcnJ1cHQganVzdCBsaXZlcyBvbiBpdHMgb3duLiAKPiAKPiBu b3Qgc3VyZSB3aGF0IHRoaXMgbWVhbnMsIHNlZSBpZiB5b3UgY2FuIGNsYXJpZnkgYnkgYmVpbmcg bW9yZSBjb25jcmV0ZS4KClllYWgsIEkgZGlkbid0IGZpbmQgYW55IGJldHRlciB3b3JkaW5nLiBC YXNpY2FsbHkgdGhhdCBzdHJ1Y3QgdmdpY19pcnEKaXMgbm90IGNvbm5lY3RlZCB0byBhbnl0aGlu ZywgYW5kIGlzIHNlbGYtYWJzb3JiZWQgd2l0aCBwbGF5aW5nIHdpdGggaXRzCmZpZWxkcyBhbmQg dGhlIGxvY2sgOy0pCgo+PiBHdWVzdCBNTUlPIGFjY2Vzc2VzIHRvCj4+IHRoZSBkaXN0cmlidXRv ciB3aWxsIGNoYW5nZSB0aGUgc3RhdGUgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUuCj4+ IFdoZW4gYW4gaW50ZXJydXB0IGlzIGFjdHVhbGx5IG1hZGUgcGVuZGluZyAoZWl0aGVyIGJ5IGFu IGFzc29jaWF0ZWQgaGFyZHdhcmUKPj4gSVJRIGZpcmluZyBvciBieSBhIHZpcnR1YWwgSVJRIHRy aWdnZXIpLCB0aGUgYHZnaWNfaXJxYCBzdHJ1Y3R1cmUgd2lsbCBiZQo+IAo+IEkgdGhpbmsgdGhl IGRpc3RpbmN0aW9uIG9mIHdoYXQgY2F1c2VzIGFuIGludGVycnVwdCB0byBiZSBmaXJlZCBzaG91 bGQKPiBiZSByZXdvcmtlZCBpbiB0aGUgZG9jdW1lbnQuICBUaGUgaW1wb3J0YW50IGJpdCBpcyB0 aGF0IHRoZSBWR0lDIGhhcyBhIAo+IHZpcnR1YWwgaW50ZXJydXB0IGlucHV0IGxpbmUsIHdoaWNo IGNhbiBiZSByYWlzZWQgYW5kIGxvd2VyZWQsIHdoaWNoIHRoZQo+IGh5cGVydmlzb3IgY2FuIHVz ZSB0byBzaWduYWwgdmlydHVhbCBpbnRlcnJ1cHRzLiAgVGhlc2UgbWF5IG9yIG1heSBub3QKPiBi ZSB0aWVkIHRvIGEgcGh5c2ljYWwgaW50ZXJydXB0LCBhbmQgdGhleSBtYXkgdGhlcmVmb3JlIGJl IG1hcmtlZCBhcwo+IGh3PXRydWUgb3IgaHc9ZmFsc2UsIHJlc3BlY3RpdmVseS4KCk9LLCB0aGF0 J3MgYSBnb29kIHBvaW50LiBXaXRoIHRoZSBYZW4gZm9jdXMgb24gaHc9MSBpbnRlcnJ1cHRzLCBJ IGdvdCBhCmJpdCBjb25mdXNlZCwgYnV0IGluZGVlZCBpdCdzIHN0aWxsIGEgdmlydHVhbCBpbnRl cnJ1cHQsIHdoaWNoIG5lZWRzIHRvCmJlIHRyaWdnZXJlZCBieSB0aGUgaHlwZXJ2aXNvci4gVGhl IGNvbm5lY3Rpb24gdG8gYSBwaHlzaWNhbCBJUlEgaXMKc29tZXRoaW5nIG9uIHRvcCBvZiB0aGlz LCBmb3IgbGF0ZXIgaW4gdGhlIElSUSBsaWZlIGN5Y2xlLgpUaGFua3MgZm9yIHNwZWxsaW5nIHRo aXMgb3V0IQoKPj4gbGlua2VkIHRvIHRoZSBjdXJyZW50IHRhcmdldCBWQ1BVLiBUaGUgYHZjcHVg IG1lbWJlciBpbiB0aGUgc3RydWN0dXJlIHdpbGwKPj4gYmUgc2V0IHRvIHRoaXMgVkNQVS4gQW55 IGFmZmluaXR5IGNoYW5nZSBhZnRlciB0aGlzIHBvaW50IHdpbGwgbm90IGFmZmVjdAo+PiB0aGUg Y3VycmVudCB0YXJnZXQgVkNQVSBhbnltb3JlLCBpdCBqdXN0IHVwZGF0ZXMgdGhlIGB0YXJnZXRf dnB1YCBmaWVsZCBpbgo+PiB0aGUgc3RydWN0dXJlLCB3aGljaCB3aWxsIGJlIGNvbnNpZGVyZWQg b24gdGhlIG5leHQgaW5qZWN0aW9uLgo+IAo+IEkgdGhpbmsgdGhpcyBkZXNjcmlwdGlvbiBpcyBh IGxpdHRsZSB2YWd1ZS4gIFRoZXJlIGFyZSBjbGVhciBzZW1hbnRpY3MKPiBhc3NvY2lhdGVkIHdp dGggdGhlc2UgdHdvIGZpZWxkczoKPiAKPiAgICB2Y3B1OiBUaGUgVkNQVSB3aG9zZSBhcF9saXN0 IHRoaXMgaW50ZXJydXB0IGlzIHF1ZXVlZCBvbiAod2hpY2gKPiAgICAgICAgICBoYXBwZW5zIHRv IGJlIGltbXV0YWJsZSBmb3IgU0dJcyBhbmQgUFBJcykKPiAKPiAgICB0YXJnZXRfdmNwdTogRm9y IFNHSXMgYW5kIExQSXMsIHRoZSBjb25maWd1cmVkIHRhcmdldCBWQ1BVIGZvciBhbgo+ICAgICAg ICAgICAgICAgICBpbnRlcnJ1cHQuCj4gCj4gT25jZSB0aGlzIGlzIGNsZWFybHkgZGVmaW5lZCwg dGhlcmUgYXJlIHNvbWUgcnVsZXMgaW4gdGVybXMgb2Ygd2hlbiB0aGUKPiB2Y3B1IGZpZWxkIGNh biBiZSBjaGFuZ2VkOyB3aGVuIHF1ZWluZyBhIHZpcnR1YWwgaW50ZXJydXB0IGZvciBkZWxpdmVy eQo+IChiZWNhdXNlIGl0J3MgcGVuZGluZyBhbmQvb3IgYWN0aXZlKSwgdGhlIHZjcHUgZmllbGQg ZmllbGQgcG9pbnRzIHRvIHRoZQo+IFZDUFUgb24gd2hpY2ggaXQgaXMgcXVldWQuICBUaGUgdGFy Z2V0X3ZjcHUgZmllbGQgc2ltcGx5IHJlY29yZHMgdGhlCj4gY29uZmlndXJhdGlvbiwgYW5kIGNh biBiZSBjaGFuZ2VkIGJ5IHRoZSBoeXBlcnZpc29yIG9yIHRoZSBWTSBpdHNlbGYgYXQKPiBhbnkg dGltZSwgYnV0IG9ubHkgdGhlIFZDUFUgb24gd2hvc2UgQVAgbGlzdCB0aGUgdmlydHVhbCBpbnRl cnJ1cHQgaXMKPiBhbHJlYWR5IHF1ZXVlZCwgY2FuIGNoYW5nZSBhIG5vbi1OVUxMIHZjcHUgZmll bGQgdG8gTlVMTCBvciB0byBhCj4gZGlmZmVyZW50IHZhbHVlLCBpLmUuIG1pZ3JhdGUgdGhlIHZp cnR1YWwgaW50ZXJydXB0Lgo+IAo+IFRoaXMgaXMgYSByZXF1aXJlbWVudCB0byBlbnN1cmUgY29y cmVjdCBmdW5jdGlvbmFsaXR5OyBvbmNlIHlvdSBwcmVzZW50Cj4gYW4gYWN0aXZlIGludGVycnVw dCB0byBhIFZDUFUsIHlvdSBjYW5ub3QgdGFrZSBpdCBhd2F5IGJlaGluZCBpdHMgYmFjaywKPiBi dXQgeW91IGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUgVkNQVSBkZWFjdGl2YXRlcyB0aGUgaW50ZXJy dXB0Lgo+IAo+PiBUaGlzIHBlci1WQ1BVIGxpc3QgaXMgY2FsbGVkIHRoZSBgYXBfbGlzdGAsIHNp bmNlIGl0IGhvbGRzIGludGVycnVwdHMgd2hpY2gKPj4gYXJlIGluIGEgcGVuZGluZyBhbmQvb3Ig YWN0aXZlIHN0YXRlLgo+Pgo+PiAjIyMgVmlydHVhbCBJUlEgcmVmZXJlbmNlcwo+Pgo+PiBUaGVy ZSBpcyBhIGZ1bmN0aW9uIGB2Z2ljX2dldF9pcnEoKWAgd2hpY2ggcmV0dXJucyBhIHJlZmVyZW5j ZSB0byBhIHZpcnR1YWwgSVJRCj4+IGdpdmVuIGl0cyBudW1iZXIuCj4+IEZvciBwcml2YXRlIElS UXMgYW5kIFNQSXMgaXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGlzIGp1c3QgaW5kZXhlcyBhIHN0YXRp YyBhcnJheS4KPj4gRm9yIExQSXMgKHdoaWNoIGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXQg cnVuIHRpbWUpIHRoaXMgaXMgZXhwZWN0ZWQgdG8KPj4gaXRlcmF0ZSBhIGRhdGEgc3RydWN0dXJl IChsaWtlIGEgbGlua2VkIGxpc3QpIHRvIGZpbmQgdGhlIHJpZ2h0IHN0cnVjdHVyZS4KPiAKPiAo b3IgYWxsb2NhdGUgb25lPykKCk1taCwgd2UgZG9uJ3QgaW4gb3VyIGNvZGU6IHZnaWNfZ2V0X2xw aSgpIHJldHVybnMgTlVMTCBpZiB0aGUgTFBJIGlzIG5vdApmb3VuZCwgYW5kIG5lZWRzIHZnaWNf YWRkX2xwaSgpIHRvIGV4cGxpY2l0bHkgYWxsb2NhdGUgb25lLgpJIGd1ZXNzIGFuIGltcGxlbWVu dGF0aW9uIGNvdWxkIGNob29zZSB0byBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlIG9uZSwKYnV0IHRo aXMgd291bGQgYmUgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCB3b3VsZG4ndCBpdD8KCj4+IElu IGFueSBjYXNlIGEgY2FsbCB0byBgdmdpY19nZXRfaXJxYCB3aWxsIGluY3JlYXNlIGEgcmVmY291 bnQsIHdoaWNoIHdpbGwKPj4gcHJldmVudCBMUElzIGZyb20gYmVpbmcgZGUtYWxsb2NhdGVkIHdo aWxlIGFub3RoZXIgcGFydCBvZiB0aGUgVkdJQyBpcyBzdGlsbAo+PiBob2xkaW5nIGEgcmVmZXJl bmNlLiBUaHVzIGFueSBjYWxsZXIgdG8gYHZnaWNfZ2V0X2lycWAgc2hhbGwgY2FsbAo+PiBgdmdp Y19wdXRfaXJxKClgIGFmdGVyIGl0IGlzIGRvbmUgd2l0aCBoYW5kbGluZyB0aGlzIGludGVycnVw dC4KPiAKPiBJc24ndCB0aGlzIHJlZmNvdW50aW5nIDEwMT8gIEkgYXNzdW1lIGl0J3MgYWxyZWFk eSB1c2VkIGluIFhlbiBhbmQgdGhlCj4gcmF0aW9uYWxlIGNvdWxkIGJlIHNraXBwZWQgaGVyZSBp biB0aGUgaW50ZXJlc3Qgb2YgZm9jdXMuCgpZZXMsIGJ1dCB0aGlzICJjYWxsIHZnaWNfcHV0X2ly cSgpIGFmdGVyIGl0IGlzIGRvbmUiIGhhcyBjb25zZXF1ZW5jZXMKZm9yIHRoZSBjb2RlOiB5b3Ug aGF2ZSB0byBkbyBpdCBleHBsaWNpdGx5IGFuZCBjYW5ub3QganVzdCByZXR1cm4gYQpwb2ludGVy IGZyb20gYSBmdW5jdGlvbiB3aXRob3V0IHBhc3NpbmcgdGhlIHJlc3BvbnNpYmlsaXR5IG9mICJw dXR0aW5nCml0IiB0byB0aGUgY2FsbGVyLiBJIGZvdW5kIHRoaXMgbm90ZXdvcnRoeSwgc2luY2Ug dGhlIFhlbiBWR0lDIGNvZGUgZG9lcwp2aW9sYXRlIHRoaXMgcHJpbmNpcGxlIGF0IHRoZSBtb21l bnQgKHdoaWNoIGlzIGZpbmUgc2luY2UgWGVuIGRvZXMgbm90Cm5lZWQgaXQpLgoKPj4gQW4gZXhj ZXB0aW9uIHdvdWxkIGJlIGlmIHRoZSB2aXJ0dWFsIElSUSBpcyBldmVudHVhbGx5IGluamVjdGVk IGludG8gYSBWQ1BVLiBJbgo+PiB0aGlzIGNhc2UgdGhlIFZDUFUgaG9sZHMgdGhhdCByZWZlcmVu Y2UgYW5kIGl0IGlzIGtlcHQgYXMgbG9uZyBhcyB0aGUgZ3Vlc3QKPj4gc2VlcyB0aGlzIHZpcnR1 YWwgSVJRLiBUaGUgcmVmY291bnQgd291bGQgb25seSBiZSBkZWNyZWFzZWQgdXBvbiB0aGUgSVJR IGhhdmluZwo+PiBiZWVuIEVPSWVkIGJ5IHRoZSBndWVzdCBhbmQgaXQgaGF2aW5nIGJlZW4gcmVt b3ZlZCBmcm9tIHRoZSBWQ1BVIGxpc3QuCj4gCj4gQWdhaW4sIHRoaXMgc2VlbXMgdG8ganVzdCBl eHBsYWluIGFuIGV4YW1wbGUgb2Ygb25lIG9mIHRoZSByZWZlcmVuY2VzLgo+IFJlZmVyZW5jZSBj b3VudGluZyB3b3JrcyBieSBjb3VudGluZyByZWZlcmVuY2VzLCBmcmVlaW5nIHRoZSByZXNvdXJj ZQo+IHdoZW4gdGhlIHJlZmVjZW5jZSByZWFjaGVzIHplcm8uICBUaGF0J3MgYWJvdXQgaXQuCgpP SywgSSBndWVzcyBJIGNhbiBzaG9ydGVuIHRoZSBsZW5ndGh5IENTIGxlY3R1cmUgaGVyZSwganVz dCBhZGRpbmcgdGhhdApiZWluZyBvbiBhbiBhcF9saXN0IHJlcXVpcmVzIHVzIHRvIGtlZXAgdGhl IHJlZmVyZW5jZSwgZXZlbiBpZiB3ZSBsZWF2ZQp0aGUgZnVuY3Rpb24gYW5kIGVudGVyIGEgVkNQ VS4KQXMgbWVjaGFuaWNhbGx5IG9uZSB3b3VsZCBwYWlyIGEgcHV0KCkgd2l0aCBhIGdldCgpIGlu IGEgKGxlYWYpCmZ1bmN0aW9uLCB0aGUgZGV2aWF0aW5nIG5lZWQgZm9yIHNwcmVhZGluZyBnZXRz IGFuZCBwdXRzIG92ZXIgZGlmZmVyZW50CmNvZGUgcGFydHMgc2VlbXMgdG8gYmUgd29ydGh3aGls ZSB0byBiZSBtZW50aW9uZWQgaGVyZSBleHBsaWNpdGx5LgoKPj4gIyMjIExvY2tpbmcKPj4KPj4g VG8ga2VlcCB0aGUgYHZnaWNfaXJxYCBzdHJ1Y3R1cmUgY29uc2lzdGVudCBhbmQgdG8gYXZvaWQg cmFjZXMgYmV0d2Vlbgo+PiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIFZHSUMsIGxvY2tpbmcgaXMg ZXNzZW50aWFsIHdoZW5ldmVyIGFjY2Vzc2luZyBhIG1lbWJlcgo+IAo+IG5pdDogYWdhaW4gYSBy YWNlIGNhbm5vdCBiZSBhdm9pZGVkIGNvbXBsZXRlbHksIGJ1dCB0aGV5IGNhbiBiZSBtYWRlCj4g YmVuaWduLi4uCgpSaWdodC4KCj4+IG9mIHRoaXMgc3RydWN0dXJlLiBJdCBpcyBleHBlY3RlZCB0 aGF0IHRoaXMgbG9jayBpcyBhbG1vc3QgbmV2ZXIgY29udGVuZGVkLAo+PiBhbHNvIGhlbGQgb25s eSBmb3IgYnJpZWYgcGVyaW9kcyBvZiB0aW1lLCBzbyB0aGlzIGlzIGNvbnNpZGVyZWQgY2hlYXAu Cj4+IFRvIGtlZXAgdGhlIGNvZGUgY2xlYW4gYW5kIGF2b2lkIG5hc3R5IGNvcm5lciBjYXNlcywg dGhlcmUgYXJlIG5vIHRyaWNrcyBvbgo+PiB0cnlpbmcgdG8gYmUgbG9ja2xlc3MgaGVyZS4KPj4g SWYgZm9yIGFueSByZWFzb24gdGhlIGNvZGUgbmVlZHMgdG8gaG9sZCB0aGUgbG9ja3MgZm9yIHR3 byB2aXJ0dWFsIElSUXMsIHRoZQo+PiBvbmUgd2l0aCB0aGUgbG93ZXIgSVJRIG51bWJlciBpcyB0 byBiZSB0YWtlbiBmaXJzdCwgdG8gYXZvaWQgZGVhZGxvY2tzLgo+Pgo+PiBBbm90aGVyIGxvY2sg dG8gY29uc2lkZXIgaXMgdGhlIFZDUFUgbG9jaywgd2hpY2ggb24gdGhlIGZpcnN0IGdsYW5jZSBw cm90ZWN0cwo+PiB0aGUgdmlydHVhbCBDUFUncyBsaXN0IHN0cnVjdHVyZSwgYnV0IGFsc28gc3lu Y2hyb25pc2VzIGFkZGl0aW9ucyBhbmQgcmVtb3ZhbHMKPj4gb2YgSVJRcyBmcm9tIGEgVkNQVS4g VG8gYWRkIGFuIElSUSB0byBhIGxpc3QsIGJvdGggdGhlIFZDUFUgYW5kIHRoZSBwZXItSVJRCj4+ IGxvY2sgbmVlZCB0byBiZSBoZWxkLiBUbyBhdm9pZCBkZWFkbG9ja3MsIHRoZXJlIGlzIGEgc3Ry aWN0IGxvY2tpbmcgb3JkZXI6Cj4+Cj4+PiBUaGUgVkNQVSBsb2NrIG5lZWRzIHRvIGJlIHRha2Vu IGZpcnN0LCB0aGUgcGVyLUlSUSBsb2NrIGFmdGVyIHRoaXMuCj4+Cj4+IFNvbWUgb3BlcmF0aW9u cyAobGlrZSBtaWdyYXRpbmcgSVJRcyBiZXR3ZWVuIHR3byBWQ1BVcykgcmVxdWlyZSB0d28gVkNQ VQo+PiBsb2NrcyB0byBiZSBoZWxkLCBpbiB0aGlzIGNhc2UgdGhlIGxvY2sgZm9yIHRoZSBWQ1BV IHdpdGggdGhlIHNtYWxsZXIgVkNQVSBJRAo+PiBpcyB0byBiZSB0YWtlbiBmaXJzdC4KPj4KPj4g VGhlcmUgYXJlIG9jY2FzaW9ucyB3aGVyZSB0aGUgbG9ja2luZyBvcmRlciAoVkNQVSBmaXJzdCkg aXMgaGFyZCB0byBvYnNlcnZlLAo+PiBiZWNhdXNlIHRoZSBwZXItSVJRIGxvY2sgaXMgYWxyZWFk eSBoZWxkLCBidXQgdGhpcyBJUlEgbmVlZHMgdG8gZ28gb24gYSBWQ1BVCj4+IGxpc3QuIEluIHRo aXMgY2FzZSB0aGUgSVJRIGxvY2sgbmVlZHMgdG8gYmUgZHJvcHBlZCwgdGhlIHJlc3BlY3RpdmUg VkNQVQo+PiBsb2NrIHNob3VsZCBiZSB0YWtlbiwgdGhlbiB0aGUgcGVyLUlSUSBsb2NrIG5lZWRz IHRvIGJlIHJlLXRha2VuLgo+PiBBZnRlciBib3RoIHRoZSBsb2NrcyBhcmUgaGVsZCwgd2UgbmVl ZCB0byBjaGVjayBpZiB0aGUgY29uZGl0aW9ucyB3aGljaAo+PiBvcmlnaW5hbGx5IG1hbmRhdGVk IHRoZSBsaXN0IGFkZGl0aW9uIChvciByZW1vdmFsKSBhcmUgc3RpbGwgdHJ1ZS4gVGhpcyBpcwo+ PiBuZWVkZWQgYmVjYXVzZSB0aGUgSVJRIGxvY2sgY291bGQgaGF2ZSBiZWVuIHRha2VuIGJ5IGFu b3RoZXIgZW50aXR5IG1lYW53aGlsZQo+PiBhbmQgdGhlIHN0YXRlIG9mIHRoaXMgaW50ZXJydXB0 IGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkLiBFeGFtcGxlcyBhcmUgaWYgdGhlCj4+IGludGVycnVw dCBpcyBubyBsb25nZXIgcGVuZGluZywgZ290IGRpc2FibGVkIG9yIGNoYW5nZWQgdGhlIENQVSBh ZmZpbml0eS4KPj4gU29tZSBvZiB0aG9zZSBjaGFuZ2VzIG1pZ2h0IHJlbmRlciB0byBjdXJyZW50 IGFjdGlvbiBvYnNvbGV0ZSAobm8gbG9uZ2VyCj4+IHBlbmRpbmcpLCBvdGhlciB3aWxsIGxlYWQg dG8gYSByZXRyeSBvZiB0aGUgcmUtbG9ja2luZyBzY2hlbWUgZGVzY3JpYmVkIGFib3ZlLgo+PiBU aGlzIHJlLWxvY2tpbmcgc2NoZW1lIHNoYWxsIGJlIGltcGxlbWVudGVkIGluIGEgd2VsbC1kb2N1 bWVudGVkIGZ1bmN0aW9uLgo+IAo+IERvIHdlIGhhdmUgdGhpcyBkb2N1bWVudGF0aW9uIG9uIHRo ZSBLVk0gc2lkZSB0aGF0IHlvdSBjb3VsZCBsaW5rIHRvCj4gaGVyZSBmb3IgcGVvcGxlIHRvIGhh dmUgYW4gdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBjYW4gYmUgZXhwbGFpbmVkPwo+IEl0J3Mg bm90IHRoYXQgYmFkIHdoZW4geW91IGxvb2sgYXQgaXQgcmVhbGx5LgoKV2VsbCwgdGhlcmUgaXMg dGhpcyBmdW5jdGlvbiB3aXRoIDgwJSBjb21tZW50cyA7LSkKQnV0IEkgZm91bmQgaXQgYSBiaXQg Y3VtYmVyc29tZSB0byByZWZlciB0byBzb21lIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uCmluIGEg ZGVzaWduIGRvY3VtZW50LiBNYXliZSBJIGNvdWxkIGFkZCBzb21lIHBzZXVkbyBjb2RlIGhlcmU/ Cgo+Pgo+PiAjIyMgTGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdHMKPj4KPj4gVGhl IEdJQyBrbm93cyBhYm91dCB0d28ga2luZHMgb2Ygc2lnbmFsbGluZyBpbnRlcnJ1cHRzOgo+Pgo+ PiAtIEVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdHMgYXJlIHRyaWdnZXJlZCBieSBhIGRldmljZSBv bmNlLCB0aGVpciBsaWZlIGN5Y2xlCj4+IGVuZHMgd2hlbiB0aGUgZ3Vlc3QgaGFzIEVPSWVkIHRo ZW0sIGF0IHdoaWNoIHBvaW50IHdlIHJlbW92ZSB0aGUgcGVuZGluZyBzdGF0ZSwKPj4gY2xlYXIg dGhlIExSIGFuZCByZXR1cm4gdGhlIGB2Z2ljX2lycWAgc3RydWN0dXJlIHRvIGEgcXVpZXNjZW50 IHN0YXRlLgo+IAo+IEZvciBub24tSFcgaW50ZXJydXB0cywgeW91IGhhdmUgdGhlIGFkZGVkIHBv dGVudGlhbCBjb21wbGV4aXR5IG9mCj4gUEVORElORytBQ1RJVkUuCgpXZWxsLCBJIHdhbnRlZCB0 byBpbnRyb2R1Y2UgbGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkIElSUXMgaGVyZSwgbm90CmNvbXBs ZXRlbHkgYWxpZW5hdGUgdGhlIHJlYWRlciA7LSkKSSBndWVzcyBJIHNob3J0ZW4gdGhpcyB0byB0 aGUgdGV4dCBib29rIGRlZmluaXRpb24gb2YgbGV2ZWwgdnMuIGVkZ2UsCmFuZCBkZXRhaWxzIG9u IHRob3NlIGNhc2VzIGxhdGVyLgoKPj4gLSBMZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cyBhcmUg dHJpZ2dlcmVkIHdoZW4gYSBkZXZpY2UgcmFpc2VzIGl0cyBpbnRlcnJ1cHQKPj4gbGluZSwgdGhl eSBzdGF5IHBlbmRpbmcgYXMgbG9uZyBhcyB0aGlzIGxpbmUgaXMgaGVsZCBoaWdoLiBBdCBzb21l IHBvaW50IHRoZQo+PiBkcml2ZXIgaW4gdGhlIGd1ZXN0IGlzIGV4cGVjdGVkIHRvIHByb2dyYW0g dGhlIGRldmljZSB0byBleHBsaWNpdGx5IG9yCj4+IGltcGxpY2l0bHkgbG93ZXIgdGhpcyBpbnRl cnJ1cHQgbGluZS4gVGhhdCBtZWFucyB0aGF0IHdlIGhhdmUgdG8gc3RvcmUgdGhlCj4+IHN0YXRl IG9mIHRoZSB2aXJ0dWFsIGludGVycnVwdCBsaW5lLCB3aGljaCBpcyBvbmx5IGNvbnRyb2xsZWQg YnkgdGhlICh2aXJ0dWFsKQo+PiBkZXZpY2UuIFRoaXMgaXMgZG9uZSBpbiB0aGUgYGxpbmVfbGV2 ZWxgIG1lbWJlciBvZiBgc3RydWN0IHZnaWNfaXJxYC4KPj4KPj4gVG8gYXNzZXJ0IHRoZSBpbnRl cnJ1cHQgY29uZGl0aW9uLCBhICh2aXJ0dWFsKSBkZXZpY2UgY2FsbHMgYSBmdW5jdGlvbiBleHBv cnRlZAo+PiBieSB0aGUgVkdJQywgd2hpY2ggYWxsb3dzIHRvIHJhaXNlIG9yIGxvd2VyIGFuIGlu dGVycnVwdCBsaW5lLiBMb3dlcmluZyB0aGUKPj4gbGluZSBmb3IgYW4gZWRnZSB0cmlnZ2VyZWQg SVJRIGlzIGlnbm9yZWQgKGFuZCBzbyBpcyBvcHRpb25hbCkuIFJhaXNpbmcgdGhlCj4+IGxpbmUg YXNzZXJ0cyB0aGUgcGVuZGluZyBzdGF0ZSBhbmQgcG90ZW50aWFsbHkgaW5qZWN0cyB0aGlzIHZp cnR1YWwgSVJRLiBBbnkKPj4gc3Vic2VxdWVudCAicmFpc2luZyIgY2FsbCBtaWdodCBpbmplY3Qg YW5vdGhlciBJUlEsIGlmIHRoZSBwcmV2aW91cyBoYXMgYXQKPj4gbGVhc3QgYmVlbiBhY3RpdmF0 ZWQgYnkgdGhlIGd1ZXN0IGFscmVhZHksIG90aGVyd2lzZSBpcyBpZ25vcmVkLgo+Pgo+PiBGb3Ig bGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdHMgdGhpcyBmdW5jdGlvbiBzdG9yZXMgdGhlIG5ldyBz dGF0ZSBpbnRvIHRoZQo+PiBgbGluZV9sZXZlbGAgdmFyaWFibGUsIHBvdGVudGlhbGx5IGluamVj dGluZyB0aGUgaW50ZXJydXB0IGlmIHRoYXQgbGluZQo+PiBjaGFuZ2VzIGZyb20gZmFsc2UgdG8g dHJ1ZS4gSWYgdGhlIGxpbmUgaXMgbG93ZXJlZCBiZWZvcmUgdGhlIGd1ZXN0IGhhcwo+PiBzZWVu IGl0LCB0aGlzIHBhcnRpY3VsYXIgaW50ZXJydXB0IGluc3RhbmNlIHdpbGwgYmUgZGlzY2FyZGVk LiBTdWNjZXNzaXZlCj4+ICJyYWlzaW5nIiBjYWxscyB3aWxsIG5vdCBsZWFkIHRvIG11bHRpcGxl IGludGVycnVwdHMgaWYgdGhlIGxpbmUgaGFzIG5vdAo+PiBiZWVuIGxvd2VyZWQgaW4gYmV0d2Vl bi4KPiAKPiBUaGlzIGlzIGNvbmZ1c2luZzoKCkV2ZW4gZm9yIG1lLCBhcHBhcmVudGx5IDstKQoK PiBMb3dlcmluZyBvciByYWlzaW5nIHRoZSBsaW5lIGZvciBhIGxldmVsIHRyaWdnZXJlZAo+IGlu dGVycnVwdCBkb2Vzbid0IG1ha2UgYW55IGRpZmZlcmVuY2UuICBUaGUgcG9pbnQgaXMgdGhhdCBh cyBsb25nIGFzIHRoZQo+IGxpbmUgaXMgaGlnaCwgaWYgeW91IGRlYWN0aXZhdGUgdGhhdCBpbnRl cnJ1cHQsIGEgbmV3IGludGVycnVwdCB3aWxsIGhpdAo+IGltbWVkaWF0ZWx5IGFnYWluLCB1bmxl c3MgdGhlIGxpbmUgaGFzIGJlZW4gbG93ZXJlZCBpbiB0aGUgbWVhbnRpbWUuCgpZZWFoLCBpdCBz ZWVtcyBJIG5lZWQgdG8gc2VyaW91c2x5IHJld29yayB0aGlzIHBhcmFncmFwaC4KCj4+Cj4+ICMj IyBTb2Z0d2FyZSB0cmlnZ2VyZWQgaW50ZXJydXB0cwo+Pgo+PiBCZXNpZGUgdGhlIG5hdHVyYWxs eSBzb2Z0d2FyZSB0cmlnZ2VyZWQgaW50ZXItcHJvY2Vzc29yLWludGVycnVwdHMKPj4gKFNHSXMg aW4gR0lDIHNwZWFrKSwgdGhlcmUgaXMgYW5vdGhlciB3YXkgb2YgbGV0dGluZyBzb2Z0d2FyZSBy YWlzZSBhbgo+PiBpbnRlcnJ1cHQgY29uZGl0aW9uLgo+IAo+IFRoZXNlIHRocmVlIGxpbmVzIGFw cGVhciB0byBiZWxvbmcgdG8gdGhlIGhlYWRpbmcuLi4KPiAKPj4gVGhlIEdJQyBkaXN0cmlidXRv ciBhbGxvd3MgdG8gc2V0IG9yIGNsZWFyIGJvdGggdGhlIHBlbmRpbmcgYW5kIGFjdGl2ZSBzdGF0 ZQo+PiBvZiBhbnkgaW50ZXJydXB0IHZpYSBNTUlPIHJlZ2lzdGVycy4gVGhpcyBpc24ndCB3aWRl bHkgdXNlZCBieSBtYW55IG9wZXJhdGluZwo+PiBzeXN0ZW1zLCBidXQgaXMgdXNlZnVsIHdoZW4g c2F2aW5nIGFuZCByZXN0b3JpbmcgdGhlIHN0YXRlIG9mIGEgbWFjaGluZS4KPj4gU28gZW11bGF0 aW5nIHRoZXNlIGZ1bmN0aW9ucyBpcyByZXF1aXJlZCBmb3IgYmVpbmcgYXJjaGl0ZWN0dXJlIGNv bXBsaWFudCwKPj4gaG93ZXZlciB0aGUgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IG5lZWQgdG8g YmUgdmVyeSBlZmZpY2llbnQgZ2l2ZW4gaXRzIHJhcmUKPj4gdXNhZ2UuIEluIGZhY3Qgc3VwcG9y dGluZyB0aGUgc2V0LXBlbmRpbmcgYW5kIGNsZWFyLXBlbmRpbmcgcmVnaXN0ZXJzIGlzCj4+IHJl bGF0aXZlbHkgc3RyYWlnaHQtZm9yd2FyZCwgYXMgbG9uZyBhcyBvbmUga2VlcHMgdGhpcyBzdGF0 ZSBzZXBhcmF0ZSBmcm9tCj4+IHRoZSBlbXVsYXRlZCBpbnRlcnJ1cHQgbGluZS4gYHBlbmRpbmdf bGF0Y2hgIHN0b3JlcyB0aGlzIHN0YXRlIGluIGB2Z2ljX2lycWAuCj4+Cj4+IFRoZSBzZXQtYWN0 aXZlIGFuZCBjbGVhci1hY3RpdmUgcmVnaXN0ZXJzIGFyZSBtdWNoIGhhcmRlciB0byBlbXVsYXRl LCB0aG91Z2gsCj4+IGFzIG5vcm1hbGx5IHRoZSBhY3RpdmUgc3RhdGUgaXMgb2YgbGl0dGxlIGNv bmNlcm4gdG8gdGhlIEdJQyBlbXVsYXRpb24uIEluCj4+IGEgbm9ybWFsIGludGVycnVwdCBsaWZl IGN5Y2xlIHRoZSBhY3RpdmUgc3RhdGUgaXNuJ3QgZXZlbiB2aXNpYmxlIHRvIHRoZQo+PiBoeXBl cnZpc29yLCBhcyBpdCBtaWdodCBiZSBzZXQgYW5kIGNsZWFyZWQgYWdhaW4gZW50aXJlbHkgd2l0 aGluIHRoZSBndWVzdAo+PiBpbiB0aGUgbGlzdCByZWdpc3Rlciwgd2l0aG91dCBleGl0aW5nIHRv IHRoZSBoeXBlcnZpc29yLgo+PiBTbyBtYW5pcHVsYXRpbmcgdGhlIGFjdGl2ZSBzdGF0ZSB2aWEg dGhlIE1NSU8gcmVnaXN0ZXJzIHJlcXVpcmVzIHNvbWUgaGVhdnkKPj4gbGlmdGluZzogSWYgdGhp cyBpbnRlcnJ1cHQgaXMgY3VycmVudGx5IGluamVjdGVkIGludG8gYSBydW5uaW5nIFZDUFUsIHRo aXMKPj4gVkNQVSBtdXN0IGV4aXQsIHRoZSBhY3RpdmUgc3RhdGUgbXVzdCBiZSBzZXQgb3IgY2xl YXJlZCBpbiB0aGUgTFIsIHRoZW4KPj4gZXhlY3V0aW9uIGNhbiBjb250aW51ZS4gV2hpbGUgdGhp cyBpcyBleHBlbnNpdmUsIGFzIG1lbnRpb25lZCBhYm92ZSB0aGlzCj4+IHNob3VsZCBub3QgaGFw cGVuIHRvbyBvZnRlbiwgYWxzbyBwcm9iYWJseSB0aGUgc3lzdGVtIGlzbid0IHZlcnkgcGVyZm9y bWFuY2UKPj4gc2Vuc2l0aXZlIHdoZW4gdXNpbmcgdGhpcyBmZWF0dXJlIGZvciBzYXZlIGFuZCBy ZXN0b3JlIGFueXdheS4KPiAKPiBUaGVzZSB0d28gcGFyYWdyYXBocyBub3Qgc28gbXVjaCwgdGhl eSBzZWVtIHRvIGJlbG9uZyB0byBNTUlPIGVtdWxhdGlvbiwKPiBhbmQgc2hvdWxkIHByb2JhYmx5 IGZvbGxvdyB0aGUgcGFyYWdyYXBoIGJlbG93LgoKWWVzLCBpbmRlZWQgaXQgbWFrZXMgc2Vuc2Ug dG8gbW92ZSB0aGVtLgoKPj4gIyMjIE1NSU8gZW11bGF0aW9uCj4+Cj4+IEFzIG1lbnRpb25lZCBi ZWZvcmUsIHRoZSBkaXN0cmlidXRvciBhbmQgcmVkaXN0cmlidXRvciBwYXJ0IG9mIHRoZSBWR0lD IG5lZWRzCj4+IHRvIGJlIGZ1bGx5IGVtdWxhdGVkLiBUaG9zZSBwYXJ0cyBhcmUgY2hhcmFjdGVy aXNlZCBieSBhIHJhbmdlIG9mIE1NSU8KPj4gcmVnaXN0ZXJzLiBUaGUgaW1wbGVtZW50YXRpb24g c2hhbGwgcHJvdmlkZSBhIGRpc3BhdGNoZXIgZnVuY3Rpb24sIHdoaWNoCj4+IHRha2VzIHRoZSBm YXVsdGVkIGFkZHJlc3MsIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIE1NSU8gcmFu Z2UsIGFuZAo+PiB3b3JrcyBvdXQgd2hpY2ggYWN0dWFsIHJlZ2lzdGVyIGlzIGFmZmVjdGVkLiBJ dCB0aGVuIGxvb2tzIHVwIHRoZSB0aGUKPj4gcmVzcGVjdGl2ZSBoYW5kbGVyIGZ1bmN0aW9uIGFu ZCBjYWxscyBpdC4gVGhvc2UgZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0bwo+PiBiZSBsaXN0ZWQg aW4gYSBzdHJ1Y3QgaW5pdGlhbGlzZXIsIHdoaWNoIGNvbm5lY3RzIHRoZSBhY3R1YWwgcmVnaXN0 ZXIKPj4gb2Zmc2V0IGFuZCBpdHMgc2l6ZSB0byBhIHBhcnRpY3VsYXIgaGFuZGxlci4gSGF2aW5n IGhhbmRsZXIgZnVuY3Rpb25zIGZvcgo+PiBhIHJlZ2lzdGVyIHJhbmdlIHNlZW1zIGJlbmVmaWNp YWwgb3ZlciBoYW5kbGluZyByZWdpc3RlcnMgaW4gYSBzd2l0Y2gvY2FzZSwKPj4gYmVjYXVzZSBp dCdzIGVhc2llciB0byByZWFkIGFuZCBzaW1wbGlmaWVzIGNvZGUgc2hhcmluZywgZm9yIGluc3Rh bmNlCj4+IGJldHdlZW4gdGhlIEdJQ3YyLCBHSUN2MyBkaXN0cmlidXRvciBhbmQgR0lDdjMgcmVk aXN0cmlidXRvciByZWdpc3RlcnMKPj4gd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MuCj4+Cj4+ICMj IyBMaXN0IHJlZ2lzdGVyIG1hbmFnZW1lbnQKPj4KPj4gQSBsaXN0IHJlZ2lzdGVyIChMUikgaG9s ZHMgdGhlIHN0YXRlIG9mIGEgdmlydHVhbCBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwKPj4gYmUgdXNl ZCBieSB0aGUgR0lDIGhhcmR3YXJlIHRvIHNpbXVsYXRlIGFuIElSUSBsaWZlIGN5Y2xlIGZvciBh IGd1ZXN0Lgo+PiBFYWNoIEdJQyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBjYW4gY2hvb3NlIHRv IGltcGxlbWVudCBhIG51bWJlciBvZiBMUnMsCj4+IGhhdmluZyBmb3VyIG9mIHRoZW0gc2VlbXMg dG8gYmUgYSBjb21tb24gdmFsdWUuIFRoaXMgZGVzaWduIGhlcmUgZG9lcyBub3QKPj4gdHJ5IHRv IG1hbmFnZSB0aGUgTFJzIHZlcnkgY2xldmVybHksIGluc3RlYWQgb24gZXZlcnkgZ3Vlc3QgZXhp dCBldmVyeSBMUgo+PiBpbiB1c2Ugd2lsbCBiZSBzeW5jZWQgdG8gdGhlIGVtdWxhdGVkIHN0YXRl LCB0aGVuIGNsZWFyZWQuIAo+IAo+IEluIGZhY3QgSSB0aGluayB3ZSBjYW1lIHVwIHdpdGggY291 bnRlci1leGFtcGxlcyBmb3IgZXZlcnkgbW9kZWwgb2YKPiBiZWluZyBjbGV2ZXIgd2l0aCBub3Qg cmVhZGluZyBiYWNrIHRoZSBMUnMsIGJlY2F1c2UgeW91IHNpbXBseSBoYXZlIHRvCj4gb2JzZXJ2 ZSBhbnkgY2hhbmdlIGluIHN0YXRlIHRoYXQgaGFwcGVuZWQgaW4gaGFyZHdhcmUgd2hpbGUgdGhl IGd1ZXN0IGlzCj4gcnVubmluZywgdG8gYmUgYWJsZSB0byBwcm9wZXJseSBlbXVsYXRlIGNvbXBs aWFudCBmdW5jdGlvbmFsaXR5IG9mIGJlaW5nCj4gYWJsZSB0byBpbmplY3QgaW50ZXJydXB0cyBv ciBub3QuCgpBZGRpbmcgYW5vdGhlciBvbmU6Cmh0dHBzOi8veGVuYml0cy54ZW4ub3JnL2dpdHdl Yi8/cD14ZW4uZ2l0O2E9YmxvYjtmPXhlbi9hcmNoL2FybS9naWMuYztoYj1IRUFEI2w2MjIKClNv cnJ5LCBTdGVmYW5vLCBjb3VsZG4ndCByZXNpc3QgOy0pCgo+PiBVcG9uIGd1ZXN0IGVudHJ5Cj4+ IHRoZSB0b3AgcHJpb3JpdHkgdmlydHVhbCBJUlFzIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUg TFJzLiBJZiB0aGVyZSBhcmUKPj4gbW9yZSBwZW5kaW5nIG9yIGFjdGl2ZSBJUlFzIHRoYW4gbGlz dCByZWdpc3RlcnMsIHRoZSBHSUMgbWFuYWdlbWVudCBJUlEKPj4gd2lsbCBiZSBjb25maWd1cmVk IHRvIG5vdGlmeSB0aGUgaHlwZXJ2aXNvciBvZiBhIGZyZWUgTFIgKG9uY2UgdGhlIGd1ZXN0Cj4+ IGhhcyBFT0llZCBvbmUgSVJRKS4gVGhpcyB3aWxsIHRyaWdnZXIgYSBub3JtYWwgZXhpdCwgd2hp Y2ggd2lsbCBnbyB0aHJvdWdoCj4+IHRoZSBub3JtYWwgY2xlYW51cC9yZXBvcHVsYXRlIHNjaGVt ZSwgcG9zc2libHkgbm93IHF1ZXVpbmcgdGhlIGxlZnRvdmVyCj4+IGludGVycnVwdChzKS4KPj4g VG8gZmFjaWxpdGF0ZSBxdWljayBndWVzdCBleGl0IGFuZCBlbnRyeSB0aW1lcywgdGhlIFZHSUMg bWFpbnRhaW5zIHRoZSBsaXN0Cj4+IG9mIHBlbmRpbmcgb3IgYWN0aXZlIGludGVycnVwdHMgKGFw XF9saXN0KSBzb3J0ZWQgYnkgdGhlaXIgcHJpb3JpdHkuIEFjdGl2ZQo+PiBpbnRlcnJ1cHRzIGFs d2F5cyBnbyBmaXJzdCBvbiB0aGUgbGlzdCwgc2luY2UgYSBndWVzdCBhbmQgdGhlIGhhcmR3YXJl IEdJQwo+PiBleHBlY3QgdGhvc2UgdG8gc3RheSB1bnRpbCB0aGV5IGhhdmUgYmVlbiBleHBsaWNp dGx5IGRlYWN0aXZhdGVkLiBGYWlsdXJlCj4+IGluIGtlZXBpbmcgYWN0aXZlIElSUXMgYXJvdW5k IHdpbGwgcmVzdWx0IGluIGVycm9yIGNvbmRpdGlvbnMgaW4gdGhlIEdJQy4KPj4gVGhlIHNlY29u ZCBzb3J0IGNyaXRlcmlhIGZvciB0aGUgYXBcX2xpc3QgaXMgdGhlaXIgcHJpb3JpdHksIHNvIGhp Z2hlcgo+PiBwcmlvcml0eSBwZW5kaW5nIGludGVycnVwdCBhbHdheXMgZ28gZmlyc3QgaW50byB0 aGUgTFJzLgo+IAo+IAo+IE90aGVyd2lzZSwgYXMgSSBzYWlkLCB0aGlzIGlzIGEgcmVhbGx5IG5p Y2Ugd3JpdGV1cC4KClRoYW5rcywgbXVjaCBhcHByZWNpYXRlZCEKCkNoZWVycywKQW5kcmUuCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK