From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= Subject: Re: RFC v1: Xen block protocol overhaul - problem statement (with pictures!) Date: Fri, 18 Jan 2013 17:00:10 +0100 Message-ID: <50F9718A.4040202@citrix.com> References: <20121218143109.GA24471@phenom.dumpdata.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20121218143109.GA24471@phenom.dumpdata.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Konrad Rzeszutek Wilk Cc: "axboe@kernel.dk" , "xen-devel@lists.xensource.com" , Felipe Franciosi , "martin.petersen@oracle.com" , "matthew@wil.cx" List-Id: xen-devel@lists.xenproject.org T24gMTgvMTIvMTIgMTU6MzEsIEtvbnJhZCBSemVzenV0ZWsgV2lsayB3cm90ZToKPiBIZXksCj4g Cj4gSSBhbSBpbmNsdWRpbmcgc29tZSBmb2xrcyB0aGF0IGFyZSBub3QgYWx3YXlzIG9uIFhlbi1k ZXZlbCB0byBzZWUgaWYgdGhleSBoYXZlCj4gc29tZSBleHRyYSBpZGVhcyBvciBjYW4gY29ycmVj dCBteSBtaXN1bmRlcnN0YW5kaW5ncy4KPiAKPiBUaGlzIGlzIHZlcnkgbXVjaCBSRkMgLSBzbyB0 aGVyZSBpcyBib3VuZCB0byBiZSBzb21lIGJ1Z3MuCj4gVGhlIG9yaWdpbmFsIGlzIGhlcmUKPiBo dHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFWaDVUOFozVHgzc1VFaFZCMERuTkRL Qk5pcUJfWkE4WjVZVnFBc0NJanVJL2VkaXQKPiBpbiBjYXNlIG9uZSB3aXNoZXMgdG8gbW9kaWZ5 L3Byb3ZpZGUgY29tbWVudCBvbiB0aGF0IG9uZS4KCkhlbGxvIEtvbnJhZCwKClRoYW5rcyBmb3Ig dGhlIHByb2JsZW0gZGVzY3JpcHRpb24gYW5kIHBvc3NpYmxlIHNvbHV0aW9ucywgSSdtIApnb2lu ZyB0byB0YWtlIG9uIHRoaXMgKHByb3ZpZGVkIHRoYXQgeW91IGFyZSBPSyB3aXRoIGl0KS4KCj4g Cj4gVGhlcmUgYXJlIG91dHN0YW5kaW5nIGlzc3VlcyB3ZSBoYXZlIG5vdyB3aXRoIHRoZSBibG9j ayBwcm90b2NvbDoKPiBOb3RlOiBJIGFtIGFzc3VtaW5nIDY0LWJpdCBndWVzdC9ob3N0IC0gYXMg dGhlIHNpemXigJlzIG9mIHRoZSBzdHJ1Y3R1cmVzCj4gY2hhbmdlIG9uIDMyLWJpdC4gSSBhbSBh bHNvIGF0dGFjaGluZyB0aGUgaGVhZGVyIGZvciB0aGUgYmxraWYgcmluZwo+IGFzIG9mIHRvZGF5 Lgo+IAo+IEEpIFNlZ21lbnQgc2l6ZSBpcyBsaW1pdGVkIHRvIDExIHBhZ2VzLiBJdCBtZWFucyB3 ZSBjYW4gYXQgbW9zdCBzcXVlZXplCj4gaW4gNDRrQiBwZXIgcmVxdWVzdC4gVGhlIHJpbmcgY2Fu IGhvbGQgMzIgKG5leHQgcG93ZXIgb2YgdHdvIGJlbG93IDM2KQo+IHJlcXVlc3RzLCBtZWFuaW5n IHdlIGNhbiBkbyAxLjRNIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzLgoKSSd2ZSBiZWVuIGxvb2tp bmcgYXQgdGhlIGRpZmZlcmVudCBvcHRpb25zIGhlcmUgYW5kIEkgdGhpbmsgdGhlIG1vc3QKc3Vp dGFibGUgb25lIHdvdWxkIGJlIHVzaW5nIGEgbWVjaGFuaXNtIHNpbWlsYXIgdG8gVmlydElPICJp bmRpcmVjdApkZXNjcmlwdG9ycyIsIGl0IGlzIHRoZSBvbmUgdGhhdCBhbGxvd3MgZm9yIG1vcmUg aW4tZmxpZ2h0IHJlcXVlc3RzCndoaWxlIGJlaW5nIHF1aXRlIHNpbXBsZSB0byBpbXBsZW1lbnQu Cgo+IEIpLiBQcm9kdWNlciBhbmQgY29uc3VtZXIgaW5kZXggaXMgb24gdGhlIHNhbWUgY2FjaGUg bGluZS4gSW4gcHJlc2VudCBoYXJkd2FyZQo+IHRoYXQgbWVhbnMgdGhlIHJlYWRlciBhbmQgd3Jp dGVyIHdpbGwgY29tcGV0ZSBmb3IgdGhlIHNhbWUgY2FjaGVsaW5lIGNhdXNpbmcgYQo+IHBpbmct cG9uZyBiZXR3ZWVuIHNvY2tldHMuCj4gCj4gQykuIFRoZSByZXF1ZXN0cyBhbmQgcmVzcG9uc2Vz IGFyZSBvbiB0aGUgc2FtZSByaW5nLiBUaGlzIGFnYWluIGNhdXNlcyB0aGUKPiBwaW5nLXBvbmcg YmV0d2VlbiBzb2NrZXRzIGFzIHRoZSBvd25lcnNoaXAgb2YgdGhlIGNhY2hlIGxpbmUgd2lsbCBz aGlmdCBiZXR3ZWVuCj4gc29ja2V0cy4KPiAKPiBEKS4gQ2FjaGUgYWxpZ25tZW50LiBDdXJyZW50 bHkgdGhlIHByb3RvY29sIGlzIDE2LWJpdCBhbGlnbmVkLiBUaGlzIGlzIGF3a3dhcmQKPiBhcyB0 aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2VzIHNvbWV0aW1lcyBmaXQgd2l0aGluIGEgY2FjaGVsaW5l IG9yIHNvbWV0aW1lcwo+IHN0cmFkZGxlIHRoZW0uCj4gCj4gRSkuIEludGVycnVwdCBtaXRpZ2F0 aW9uLiBXZSBhcmUgY3VycmVudGx5IGRvaW5nIGEga2ljayB3aGVuZXZlciB3ZSBhcmUKPiBkb25l IOKAnHByb2Nlc3NpbmfigJ0gdGhlIHJpbmcuIFRoZXJlIGFyZSBiZXR0ZXIgd2F5cyB0byBkbyB0 aGlzIC0gYW5kCj4gd2UgY291bGQgdXNlIGV4aXN0aW5nIG5ldHdvcmsgaW50ZXJydXB0IG1pdGln YXRpb24gdGVjaG5pcXVlcyB0byBtYWtlIHRoZQo+IGNvZGUgcG9sbCB3aGVuIHRoZXJlIGlzIGEg bG90IG9mIGRhdGEuCj4gCj4gRikuIExhdGVuY3kuIFRoZSBwcm9jZXNzaW5nIG9mIHRoZSByZXF1 ZXN0IGxpbWl0cyB1cyB0byBvbmx5IGRvIDQ0a0IgLSB3aGljaCBtZWFucwo+IHRoYXQgYSAxTUIg Y2h1bmsgb2YgZGF0YSAtIHdoaWNoIG9uIGNvbnRlbXBvcmFyeSBkZXZpY2VzIHdvdWxkIG9ubHkg dXNlIEkvTyByZXF1ZXN0Cj4gLSB3b3VsZCBiZSBzcGxpdCB1cCBpbiBtdWx0aXBsZSDigJhyZXF1 ZXN0c+KAmSBpbmFkdmVydGVudGx5IGRlbGF5aW5nIHRoZSBwcm9jZXNzaW5nIG9mCj4gc2FpZCBi bG9jay4KPiAKPiBHKSBGdXR1cmUgZXh0ZW5zaW9ucy4gRElGL0RJWCBmb3IgaW50ZWdyaXR5LiBU aGVyZSBtaWdodAo+IGJlIG90aGVyIGluIHRoZSBmdXR1cmUgYW5kIGl0IHdvdWxkIGJlIGdvb2Qg dG8gbGVhdmUgc3BhY2UgZm9yIGV4dHJhCj4gZmxhZ3MgVEJELgo+IAo+IEgpLiBTZXBhcmF0ZSB0 aGUgcmVzcG9uc2UgYW5kIHJlcXVlc3QgcmluZ3MuIFRoZSBjdXJyZW50Cj4gaW1wbGVtZW50YXRp b24gaGFzIG9uZSB0aHJlYWQgZm9yIG9uZSBibG9jayByaW5nLiBUaGVyZSBpcyBubyByZWFzb24g d2h5Cj4gdGhlcmUgY291bGQgbm90IGJlIHR3byB0aHJlYWRzIC0gb25lIGZvciByZXNwb25zZXMg YW5kIG9uZSBmb3IgcmVxdWVzdHMgLQo+IGFuZCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHNjaGVk dWxlZCBvbiBkaWZmZXJlbnQgQ1BVcy4gRnVydGhlcm1vcmUgdGhpcwo+IGNvdWxkIGFsc28gYmUg c3BsaXQgaW4gbXVsdGktcXVldWVzIC0gc28gdHdvIHF1ZXVlcyAocmVzcG9uc2UgYW5kIHJlcXVl c3QpCj4gb24gZWFjaCB2Q1BVLgo+IAo+IEkpLiBXZSB3YXN0ZSBhIGxvdCBvZiBzcGFjZSBvbiB0 aGUgcmluZyAtIGFzIHdlIHVzZSB0aGUKPiByaW5nIGZvciBib3RoIHJlcXVlc3RzIGFuZCByZXNw b25zZXMuIFRoZSByZXNwb25zZSBzdHJ1Y3R1cmUgbmVlZHMgdG8KPiBvY2N1cHkgdGhlIHNhbWUg YW1vdW50IG9mIHNwYWNlIGFzIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAoMTEyIGJ5dGVzKS4gSWYK PiB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgaXMgZXhwYW5kZWQgdG8gYmUgYWJsZSB0byBmaXQgbW9y ZSBzZWdtZW50cyAoc2F5Cj4gdGhlIOKAmHN0cnVjdCBibGtpZl9zcmluZ19lbnRyeSBpcyBleHBh bmRlZCB0byB+MTUwMCBieXRlcykgdGhhdCBzdGlsbAo+IHJlcXVpcmVzIHVzIHRvIGhhdmUgYSBt YXRjaGluZyBzaXplIHJlc3BvbnNlIHN0cnVjdHVyZS4gV2UgZG8gbm90IG5lZWQKPiB0byB1c2Ug dGhhdCBtdWNoIHNwYWNlIGZvciBvbmUgcmVzcG9uc2UuIEhhdmluZyBhIHNlcGFyYXRlIHJlc3Bv bnNlIHJpbmcKPiB3b3VsZCBzaW1wbGlmeSB0aGUgc3RydWN0dXJlcy4KPiAKPiBKKS4gMzIgYml0 IHZzIDY0IGJpdC4gUmlnaHQgbm93IHRoZSBzaXplCj4gb2YgdGhlIHJlcXVlc3Qgc3RydWN0dXJl IGlzIDExMiBieXRlcyB1bmRlciA2NC1iaXQgZ3Vlc3QgYW5kIDEwMiBieXRlcwo+IHVuZGVyIDMy LWJpdCBndWVzdC4gSXQgaXMgY29uZnVzaW5nIGFuZCBmdXJ0aGVybW9yZSByZXF1aXJlcyB0aGUg aG9zdAo+IHRvIGRvIGV4dHJhIGFjY291bnRpbmcgYW5kIHByb2Nlc3NpbmcuCj4gCj4gVGhlIGNy dWRlIGRyYXdpbmcgZGlzcGxheXMgbWVtb3J5IHRoYXQgdGhlIHJpbmcgb2NjdXBpZXMgaW4gb2Zm c2V0IG9mCj4gNjQgYnl0ZXMgKGNhY2hlIGxpbmUpLiBPZiBjb3Vyc2UgZnV0dXJlIENQVXMgY291 bGQgaGF2ZSBkaWZmZXJlbnQgY2FjaGUKPiBsaW5lcyAoc2F5IDMyIGJ5dGVzPyktIHdoaWNoIHdv dWxkIHNrZXcgdGhpcyBkcmF3aW5nLiBBIDMyLWJpdCByaW5nIGlzCj4gYSBiaXQgZGlmZmVyZW50 IGFzIHRoZSDigJhzdHJ1Y3QgYmxraWZfc3JpbmdfZW50cnnigJkgaXMgb2YgMTAyIGJ5dGVzLgo+ IAo+IAo+IFRoZSBBKSBoYXMgdHdvIHNvbHV0aW9ucyB0byB0aGlzIChsb29rIGF0Cj4gaHR0cDov L2NvbW1lbnRzLmdtYW5lLm9yZy9nbWFuZS5jb21wLmVtdWxhdG9ycy54ZW4uZGV2ZWwvMTQwNDA2 IGZvcgo+IGRldGFpbHMpLiBPbmUgcHJvcG9zZWQgYnkgSnVzdGluIGZyb20gU3BlY3RyYWxvZ2lj IGhhcyB0byBuZWdvdGlhdGUKPiB0aGUgc2VnbWVudCBzaXplLiBUaGlzIG1lYW5zIHRoYXQgdGhl IOKAmHN0cnVjdCBibGtpZl9zcmluZ19lbnRyeeKAmQo+IGlzIG5vdyBhIHZhcmlhYmxlIHNpemUu IEl0IGNhbiBleHBhbmQgZnJvbSAxMTIgYnl0ZXMgKGNvdmVyIDExIHBhZ2VzIG9mCj4gZGF0YSAt IDQ0a0IpIHRvIDE1ODAgYnl0ZXMgKDI1NiBwYWdlcyBvZiBkYXRhIC0gc28gMU1CKS4gSXQgaXMg YSBzaW1wbGUKPiBleHRlbnNpb24gYnkganVzdCBtYWtpbmcgdGhlIGFycmF5IGluIHRoZSByZXF1 ZXN0IGV4cGFuZCBmcm9tIDExIHRvIGEKPiB2YXJpYWJsZSBzaXplIG5lZ290aWF0ZWQuCj4gCj4g Cj4gVGhlIG1hdGggaXMgYXMgZm9sbG93Lgo+IAo+IAo+ICAgICAgICAgc3RydWN0IGJsa2lmX3Jl cXVlc3Rfc2VnbWVudCB7Cj4gICAgICAgICAgICAgICAgIHVpbnQzMiBncmFudDsgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gNCBieXRlcyB1aW50OF90Cj4gICAgICAgICAgICAgICAgIGZpcnN0 X3NlY3QsIGxhc3Rfc2VjdDsvLyAxLCAxID0gNiBieXRlcwo+ICAgICAgICAgfQo+ICg2IGJ5dGVz IGZvciBlYWNoIHNlZ21lbnQpIC0gdGhlIGFib3ZlIHN0cnVjdHVyZSBpcyBpbiBhbiBhcnJheSBv ZiBzaXplCj4gMTEgaW4gdGhlIHJlcXVlc3QuIFRoZSDigJhzdHJ1Y3QgYmxraWZfc3JpbmdfZW50 cnnigJkgaXMgMTEyIGJ5dGVzLiBUaGUKPiBjaGFuZ2UgaXMgdG8gZXhwYW5kIHRoZSBhcnJheSAt IGluIHRoaXMgZXhhbXBsZSB3ZSB3b3VsZCB0YWNrIG9uIDI0NSBleHRyYQo+IOKAmHN0cnVjdCBi bGtpZl9yZXF1ZXN0X3NlZ21lbnTigJkgLSAyNDUqNiArIDExMiA9IDE1ODIuIElmIHdlIHdlcmUg dG8KPiB1c2UgMzYgcmVxdWVzdHMgKHNvIDE1ODIqMzYgKyA2NCkgd2Ugd291bGQgdXNlIDU3MDE2 IGJ5dGVzICgxNCBwYWdlcykuCj4gCj4gCj4gVGhlIG90aGVyIHNvbHV0aW9uIChmcm9tIEludGVs IC0gUm9uZ2h1aSkgd2FzIHRvIGNyZWF0ZSBvbmUgZXh0cmEKPiByaW5nIHRoYXQgb25seSBoYXMg dGhlIOKAmHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnTigJkgaW4gdGhlbS4gVGhlCj4g4oCY c3RydWN0IGJsa2lmX3JlcXVlc3TigJkgd291bGQgYmUgY2hhbmdlZCB0byBoYXZlIGFuIGluZGV4 IGluIHNhaWQKPiDigJhzZWdtZW50IHJpbmfigJkuIFRoZXJlIGlzIG9ubHkgb25lIHNlZ21lbnQg cmluZy4gVGhpcyBtZWFucyB0aGF0IHRoZQo+IHNpemUgb2YgdGhlIGluaXRpYWwgcmluZyBpcyBz dGlsbCB0aGUgc2FtZS4gVGhlIHJlcXVlc3RzIHdvdWxkIHBvaW50Cj4gdG8gdGhlIHNlZ21lbnQg YW5kIGVudW1lcmF0ZSBvdXQgaG93IG1hbnkgb2YgdGhlIGluZGV4ZXMgaXQgd2FudHMgdG8KPiB1 c2UuIFRoZSBsaW1pdCBpcyBvZiBjb3Vyc2UgdGhlIHNpemUgb2YgdGhlIHNlZ21lbnQuIElmIG9u ZSBhc3N1bWVzIGEKPiBvbmUtcGFnZSBzZWdtZW50IHRoaXMgbWVhbnMgd2UgY2FuIGluIG9uZSBy ZXF1ZXN0IGNvdmVyIH40TUIuIFRoZSBtYXRoCj4gaXMgYXMgZm9sbG93Ogo+IAo+IAo+IEZpcnN0 IHJlcXVlc3QgdXNlcyB0aGUgaGFsZiBvZiB0aGUgc2VnbWVudCByaW5nIC0gc28gaW5kZXggMCB1 cAo+IHRvIDM0MSAob3V0IG9mIDY4MikuIEVhY2ggZW50cnkgaW4gdGhlIHNlZ21lbnQgcmluZyBp cyBhIOKAmHN0cnVjdAo+IGJsa2lmX3JlcXVlc3Rfc2VnbWVudOKAmSBzbyBpdCBvY2N1cGllcyA2 IGJ5dGVzLiBUaGUgb3RoZXIgcmVxdWVzdHMgb24KPiB0aGUgcmluZyAoc28gdGhlcmUgYXJlIDM1 IGxlZnQpIGNhbiB1c2UgZWl0aGVyIHRoZSByZW1haW5pbmcgMzQxIGluZGV4ZXMKPiBvZiB0aGUg c2dlbWVudCByaW5nIG9yIHVzZSB0aGUgb2xkIHN0eWxlIHJlcXVlc3QuIFRoZSBvbGQgc3R5bGUg cmVxdWVzdAo+IGNhbiBhZGRyZXNzIHVzZSB1cCB0byA0NGtCLiBGb3IgZXhhbXBsZToKPiAKPiAK PiAgc3JpbmdbMF0tPlt1c2VzIDAtPjM0MSBpbmRleGVzIGluIHRoZSBzZWdtZW50IHJpbmddID0g MzQyKjQwOTYgPSAxNDAwODMyCj4gIHNyaW5nWzFdLT5bdXNlIHN0aGUgb2xkIHN0eWxlIHJlcXVl c3RdID0gMTEqNDA5NiA9IDQ1MDU2Cj4gIHNyaW5nWzJdLT5bdXNlcyAzNDItPjY4MiBpbmRleGVz IGluIHRoZSBzZWdtZW50IHJpbmddID0gMTM5MjY0MAo+ICBzcmluZ1szLi4zMl0gLT4gW3VzZXMg dGhlIG9sZCBzdHlsZSByZXF1ZXN0XSA9IDI5KjQwOTYqMTEgPSAxMzA2NjI0Cj4gCj4gCj4gVG90 YWw6IDQxNDUxNTIgYnl0ZXMgTmF0dXJhbGx5IHRoaXMgY291bGQgYmUgZXh0ZW5kZWQgdG8gaGF2 ZSBhIGJpZ2dlcgo+IHNlZ21lbnQgcmluZyB0byBjb3ZlciBtb3JlLgo+IAo+IAo+IAo+IAo+IAo+ IFRoZSBwcm9ibGVtIHdpdGggdGhpcyBleHRlbnNpb24gaXMgdGhhdCB3ZSB1c2UgNiBieXRlcyBh bmQgZW5kIHVwCj4gc3RyYWRkbGluZyBhIGNhY2hlIGxpbmUuIFVzaW5nIDggYnl0ZXMgd2lsbCBm aXggdGhlIGNhY2hlIHN0cmFkZGxpbmcuIFRoaXMKPiB3b3VsZCBtZWFuIGZpdHRpbmcgb25seSA1 MTIgc2VnbWVudHMgcGVyIHBhZ2UuCj4gCj4gCj4gVGhlcmUgaXMgeWV0IGFub3RoZXIgbWVjaGFu aXNtIHRoYXQgY291bGQgYmUgZW1wbG95ZWQgIC0gYW5kIGl0IGJvcnJvd3MKPiBmcm9tIFZpcnRJ TyBwcm90b2NvbC4gQW5kIHRoYXQgaXMgdGhlIOKAmGluZGlyZWN0IGRlc2NyaXB0b3Jz4oCZLiBU aGlzCj4gdmVyeSBzaW1pbGFyIHRvIHdoYXQgSW50ZWwgc3VnZ2VzdHMsIGJ1dCB3aXRoIGEgdHdp c3QuCj4gCj4gCj4gV2UgY291bGQgcHJvdmlkZSBhIG5ldyBCTEtJRl9PUCAoc2F5IEJMS0lGX09Q X0lORElSRUNUKSwgYW5kIHRoZSDigJhzdHJ1Y3QKPiBibGtpZl9zcmluZ+KAmSAoZWFjaCBlbnRy eSBjYW4gYmUgdXAgdG8gMTEyIGJ5dGVzIGlmIG5lZWRlZCAtIHNvIHRoZQo+IG9sZCBzdHlsZSBy ZXF1ZXN0IHdvdWxkIGZpdCkuIEl0IHdvdWxkIGxvb2sgbGlrZToKPiAKPiAKPiAvKiBzbyA2NCBi eXRlcyB1bmRlciA2NC1iaXQuIElmIG5lY2Vzc2FyeSwgdGhlIGFycmF5IChzZWcpIGNhbiBiZQo+ IGV4cGFuZGVkIHRvIGZpdCAxMSBzZWdtZW50cyBhcyB0aGUgb2xkIHN0eWxlIHJlcXVlc3QgZGlk ICovIHN0cnVjdAo+IGJsa2lmX3JlcXVlc3RfaW5kaXJlY3Qgewo+ICAgICAgICAgdWludDhfdCAg ICAgICAgb3A7ICAgICAgICAgICAvKiBCTEtJRl9PUF8qICh1c3VhbGx5IFJFQUQgb3IgV1JJVEUg ICAgKi8KPiAvLyAxIGJsa2lmX3ZkZXZfdCAgIGhhbmRsZTsgICAgICAgLyogb25seSBmb3IgcmVh ZC93cml0ZSByZXF1ZXN0cyAgICAgICAgICovIC8vIDIKPiAjaWZkZWYgQ09ORklHX1g4Nl82NAo+ ICAgICAgICAgdWludDMyX3QgICAgICAgX3BhZDE7ICAgICAgICAgICAgIC8qIG9mZnNldG9mKGJs a2lmX3JlcXVlc3QsdS5ydy5pZCkgPT0gOCAqLyAvLyAyCj4gI2VuZGlmCj4gICAgICAgICB1aW50 NjRfdCAgICAgICBpZDsgICAgICAgICAgIC8qIHByaXZhdGUgZ3Vlc3QgdmFsdWUsIGVjaG9lZCBp biByZXNwICAqLwo+ICAgICAgICAgZ3JhbnRfcmVmX3QgICAgZ3JlZjsgICAgICAgIC8qIHJlZmVy ZW5jZSB0byBpbmRpcmVjdCBidWZmZXIgZnJhbWUgIGlmIHVzZWQqLwo+ICAgICAgICAgICAgIHN0 cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnRfYWxpZ25lZCBzZWdbNF07IC8vIGVhY2ggaXMgOCBi eXRlcwo+Cj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4gCj4gCj4gc3RydWN0IGJs a2lmX3JlcXVlc3Qgewo+ICAgICAgICAgdWludDhfdCAgICAgICAgb3BlcmF0aW9uOyAgICAvKiBC TEtJRl9PUF8/Pz8gICovCj4gICAgICAgICB1bmlvbiB7Cj4gICAgICAgICAgICAgICAgIHN0cnVj dCBibGtpZl9yZXF1ZXN0X3J3IHJ3Owo+ICAgICAgICAgICAgICAgICBzdHJ1Y3QgYmxraWZfcmVx dWVzdF9pbmRpcmVjdAo+ICAgICAgICAgICAgICAgICBpbmRpcmVjdDsg4oCmIG90aGVyIC4uCj4g ICAgICAgICB9IHU7Cj4gfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Cj4gCgpEbyB5b3Ug dGhpbmsgaXQgd2lsbCBiZSBzdWl0YWJsZSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgYmxraWZfcmVx dWVzdCwgSSAKd2FzIHRoaW5raW5nIHRoYXQgaWYgd2UgaW50cm9kdWNlIGluZGlyZWN0IHJlcXVl c3Qgd2UgY291bGQgcmVkdWNlIHRoZSAKbWF4aW11bSBudW1iZXIgb2Ygc2VnbWVudHMgcGVyIHJl cXVlc3QgdG8gMiwgc28gYmxraWZfcmVxdWVzdCBpcyAKcmVkdWNlZCB0byAzMmJ5dGVzIGFuZCB3 ZSBjYW4gZml0IDEyNiByZXF1ZXN0cyAoNjQgZHVlIHRvIHJvdW5kaW5nKSAKaW4gYSBzaW5nbGUg cmluZy4gCgpFdmVyeXRoaW5nIHRoYXQgbmVlZHMgbW9yZSB0aGFuIHR3byBzZWdtZW50cyB3aWxs IHN3aXRjaCB0byB1c2luZyB0aGUgCm5ldyBpbmRpcmVjdCBvcGVyYXRpb24uIEFsc28sIHRvIG1h a2UgdXNlIG9mIHRoZSBleHRyYSBzcGFjZSBpbiAKYmxraWZfcmVxdWVzdF9pbmRpcmVjdCBJIHdv dWxkIHJlbW92ZSB0aGUgZXh0cmEgc2VnbWVudHMgYW5kIGluc3RlYWQgCnBhc3MgbW9yZSBncmFu dCByZWZlcmVuY2VzIHRvIGZyYW1lcyBjb250YWluaW5nIApibGtpZl9yZXF1ZXN0X2luZGlyZWN0 X2VudHJ5IGVudHJpZXMuCgojZGVmaW5lIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCAy CiNkZWZpbmUgQkxLSUZfTUFYX0lORElSRUNUX0dSRUZTX1BFUl9SRVFVRVNUIDQKCnN0cnVjdCBi bGtpZl9yZXF1ZXN0X3NlZ21lbnQgewogICAgZ3JhbnRfcmVmX3QgZ3JlZjsgICAgICAgIC8qIHJl ZmVyZW5jZSB0byBJL08gYnVmZmVyIGZyYW1lICAgICAgICAqLwogICAgLyogQGZpcnN0X3NlY3Q6 IGZpcnN0IHNlY3RvciBpbiBmcmFtZSB0byB0cmFuc2ZlciAoaW5jbHVzaXZlKS4gICAqLwogICAg LyogQGxhc3Rfc2VjdDogbGFzdCBzZWN0b3IgaW4gZnJhbWUgdG8gdHJhbnNmZXIgKGluY2x1c2l2 ZSkuICAgICAqLwogICAgdWludDhfdCAgICAgZmlyc3Rfc2VjdCwgbGFzdF9zZWN0Owp9IF9fYXR0 cmlidXRlX18oKF9fcGFja2VkX18pKTsKCnN0cnVjdCBibGtpZl9yZXF1ZXN0X2luZGlyZWN0X2Vu dHJ5IHsKICAgIGJsa2lmX3NlY3Rvcl90ICBzZWN0b3JfbnVtYmVyOwogICAgc3RydWN0ICAgICAg ICAgIGJsa2lmX3JlcXVlc3Rfc2VnbWVudCBzZWc7CiAgICB1aW50OF90ICAgICAgICAgX3BhZFsy XTsKfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CgpzdHJ1Y3QgYmxraWZfcmVxdWVzdF9y dyB7CiAgICB1aW50OF90ICAgICAgICBucl9zZWdtZW50czsgIC8qIG51bWJlciBvZiBzZWdtZW50 cyAgICAgICAgICAgICAgICAgICAqLwogICAgYmxraWZfdmRldl90ICAgaGFuZGxlOyAgICAgICAv KiBvbmx5IGZvciByZWFkL3dyaXRlIHJlcXVlc3RzICAgICAgICAgKi8KICAgIHVpbnQ2NF90ICAg ICAgIGlkOyAgICAgICAgICAgLyogcHJpdmF0ZSBndWVzdCB2YWx1ZSwgZWNob2VkIGluIHJlc3Ag ICovCiAgICBibGtpZl9zZWN0b3JfdCBzZWN0b3JfbnVtYmVyOy8qIHN0YXJ0IHNlY3RvciBpZHgg b24gZGlzayAoci93IG9ubHkpICAqLwogICAgc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCBz ZWdbQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUXTsKfSBfX2F0dHJpYnV0ZV9fKChfX3Bh Y2tlZF9fKSk7CgpzdHJ1Y3QgYmxraWZfcmVxdWVzdF9pbmRpcmVjdCB7CiAgICB1aW50OF90ICAg ICAgICBvcDsgICAgICAgICAgIC8qIEJMS0lGX09QXyogKHVzdWFsbHkgUkVBRCBvciBXUklURSAg ICAqLwogICAgdWludDE2X3QgICAgICAgbnJfaW5kaXJlY3Q7ICAvKiBudW1iZXIgb2YgaW5kaXJl Y3QgZW50cmllcyBpbiBncmVmIGZyYW1lcyAqLwogICAgYmxraWZfdmRldl90ICAgaGFuZGxlOyAg ICAgICAvKiBvbmx5IGZvciByZWFkL3dyaXRlIHJlcXVlc3RzICAgICAgICAgKi8KICAgIHVpbnQ2 NF90ICAgICAgIGlkOyAgICAgICAgICAgLyogcHJpdmF0ZSBndWVzdCB2YWx1ZSwgZWNob2VkIGlu IHJlc3AgICovCiAgICAvKiByZWZlcmVuY2UgdG8gaW5kaXJlY3QgYnVmZmVyIGZyYW1lICovCiAg ICBncmFudF9yZWZfdCAgICBncmVmW0JMS0lGX01BWF9JTkRJUkVDVF9HUkVGU19QRVJfUkVRVUVT VF07Cn0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwoKc3RydWN0IGJsa2lmX3JlcXVlc3Rf ZGlzY2FyZCB7CiAgICB1aW50OF90ICAgICAgICBmbGFnOyAgICAgICAgIC8qIEJMS0lGX0RJU0NB UkRfU0VDVVJFIG9yIHplcm8uICAgICAgICAqLwojZGVmaW5lIEJMS0lGX0RJU0NBUkRfU0VDVVJF ICgxPDwwKSAgLyogaWdub3JlZCBpZiBkaXNjYXJkLXNlY3VyZT0wICAgICAgICAgICovCiAgICB1 aW50NjRfdCAgICAgICBpZDsgICAgICAgICAgIC8qIHByaXZhdGUgZ3Vlc3QgdmFsdWUsIGVjaG9l ZCBpbiByZXNwICAqLwogICAgYmxraWZfc2VjdG9yX3Qgc2VjdG9yX251bWJlcjsKICAgIHVpbnQ2 NF90ICAgICAgIG5yX3NlY3RvcnM7Cn0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwoKc3Ry dWN0IGJsa2lmX3JlcXVlc3QgewogICAgdWludDhfdCAgICAgICAgb3BlcmF0aW9uOyAgICAvKiBC TEtJRl9PUF8/Pz8gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgIHVuaW9uIHsKICAgICAg ICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9ydyBydzsKICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVz dF9pbmRpcmVjdCBpbmRpcmVjdDsKICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9kaXNjYXJk IGRpc2NhcmQ7CiAgICB9IHU7Cn0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwoKSSd2ZSBy ZW1vdmVkIGFsbCB0aGUgZXh0cmEgcGFkZGluZ3MsIGJlY2F1c2UgdGhpcyBwcm90b2NvbCBpcyBu byBsb25nZXIgCmNvbXBhdGlibGUgd2l0aCB0aGUgcHJldmlvdXMgb25lICh3ZSBtb2RpZnkgCkJM S0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCksIGFuZCBwYWNrZWQgdGhlIHN0cnVjdHVyZXMu IEknbSAKd29uZGVyaW5nIGlmIHVzaW5nIF9fYXR0cmlidXRlX18gaW4gYSBwdWJsaWMgaGVhZGVy IGlzIGFsbG93ZWQsIHNpbmNlIAp0aGlzIGlzIGEgR05VIGV4dGVuc2lvbiAoQUZBSUsgc3VwcG9y dGVkIGJ5IGdjYyBhbmQgY2xhbmcgYXQgbGVhc3QpLgoKVGhlIG1haW4gbW90aXZhdGlvbiBiZWhp bmQgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgc2l6ZSBvZiB0aGUgCnJlcXVlc3QgaXMgYmVjYXVz ZSBJJ3ZlIHJlYWxpemVkIHRoYXQgaW4geW91ciBwcm9wb3NhbCwgeW91IHdoZXJlIAphZGRpbmcg NCBleHRyYSBzZWdtZW50cyB0byB0aGUgaW5kaXJlY3QgcmVxdWVzdCwgYW5kIEkgd2FzIHdvbmRl cmluZyAKaWYgSSBjb3VsZCBwYWNrIG1vcmUgZ3JhbnQgZnJhbWVzIGNvbnRhaW5pbmcgaW5kaXJl Y3QgZW50cmllcyBpbiBhIApzaW5nbGUgcmVxdWVzdC4gQnkgdXNpbmcgdGhlIG9sZCBzaXplIG9m IGJsa2ZfcmVxdWVzdCB3ZSB3aWxsIGJlIGFibGUgdG8Kc2VuZCB1cCB0byA5IGdyYW50IGZyYW1l cyBmaWxsZWQgd2l0aCBpbmRpcmVjdCBlbnRyaWVzLCB3aGljaCBnaXZlcyB1cwo0MDk2ICogMjU2 ICogOSA9IDlNQiBvZiBvdXRzdGFuZGluZyBJTyBpbiBlYWNoIHJlcXVlc3QuIEkgdGhpbmsgdGhh dAp0aGlzIGlzIHRvbyBoaWdoLCBhbmQgd2lsbCBpbnRyb2R1Y2UgYSBsb3Qgb2YgbGF0ZW5jeSB0 byB0aGUgcHJvdG9jb2wuClRoYXQncyB0aGUgbWFpbiByZWFzb24gSSd2ZSBkZWNpZGVkIHRvIHJl ZHVjZSB0aGUgc2l6ZSBvZiBibGtpZl9yZXF1ZXN0CmluIG9yZGVyIHRvIGJlIGFibGUgdG8gZml0 IG1vcmUgb2YgdGhlbSBpbiBhIHJpbmcsIGluc3RlYWQgb2YgbWFraW5nCmVhY2ggb2YgdGhlIHJl cXVlc3RzIGJpZ2dlci4KClVzaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gZWFjaCByZXF1ZXN0IGhh cyBhIHNpemUgb2YgMzJieXRlcyAodG8gCnByZXZlbnQgY2FjaGUgc3RyYWRkbGUpLCBzbyB3ZSBj b3VsZCBmaXQgMTI2IHJlcXVlc3RzIGluIGEgcmluZywgYnV0IApkdWUgdG8gdGhlIHJvdW5kaW5n LCB3ZSBlbmQgdXAgd2l0aCA2NC4gQWxzbyBlYWNoIHJlcXVlc3QgY2FuIGNvbnRhaW4gCjQgZ3Jh bnQgcGFnZXMsIGVhY2ggb25lIGZpbGxlZCB3aXRoIDI1NiBibGtpZl9yZXF1ZXN0X2luZGlyZWN0 X2VudHJ5LiAKVGhlIG1hdGggZm9yIHRoZSBtYXhpbXVtIGRhdGEgaW4gYSByZXF1ZXN0IGlzOiA0 MDk2ICogMjU2ICogNCA9IDRNQiwgCmFuZCBpbiB0aGUgd2hvbGUgcmluZyA0ICogNjQgPSAyNTZN QiB3b3J0aCBvZiBvdXRzdGFuZGluZyBJTy4KIAo+IAo+IAo+IFRoZSDigJhvcGVyYXRpb27igJkg d291bGQgYmUgQkxLSUZfT1BfSU5ESVJFQ1QuIFRoZSByZWFkL3dyaXRlL2Rpc2NhcmQsCj4gZXRj IG9wZXJhdGlvbiB3b3VsZCBub3cgYmUgaW4gaW5kaXJlY3Qub3AuIFRoZSBpbmRpcmVjdC5ncmVm IHBvaW50cyB0bwo+IGEgcGFnZSB0aGF0IGlzIGZpbGxlZCB3aXRoOgo+IAo+IAo+IHN0cnVjdCBi bGtpZl9yZXF1ZXN0X2luZGlyZWN0X2VudHJ5IHsKPiAgICAgICAgIGJsa2lmX3NlY3Rvcl90IHNl Y3Rvcl9udW1iZXI7Cj4gICAgICAgICBzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50IHNlZzsK PiB9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKPiAvLzE2IGJ5dGVzLCBzbyB3ZSBjYW4g Zml0IGluIGEgcGFnZSAyNTYgb2YgdGhlc2Ugc3RydWN0dXJlcy4KPiAKPiAKPiBUaGlzIG1lYW5z IHRoYXQgd2l0aCB0aGUgZXhpc3RpbmcgMzYgc2xvdHMgaW4gdGhlIHJpbmcgKHNpbmdsZSBwYWdl KQo+IHdlIGNhbiBjb3ZlcjogMzIgc2xvdHMgKiBlYWNoIGJsa2lmX3JlcXVlc3RfaW5kaXJlY3Qg Y292ZXJzOiAyNTYgKiA0MDk2Cj4gfj0gMzJNLiBJZiB3ZSBkb27igJl0IHdhbnQgdG8gdXNlIGlu ZGlyZWN0IGRlc2NyaXB0b3Igd2UgY2FuIHN0aWxsIHVzZQo+IHVwIHRvIDQgcGFnZXMgb2YgdGhl IHJlcXVlc3QgKGFzIGl0IGhhcyBlbm91Z2ggc3BhY2UgdG8gY29udGFpbiBmb3VyCj4gc2VnbWVu dHMgYW5kIHRoZSBzdHJ1Y3R1cmUgd2lsbCBzdGlsbCBiZSBjYWNoZS1hbGlnbmVkKS4KPiAKPiAK PiAKPiAKPiBCKS4gQm90aCB0aGUgcHJvZHVjZXIgKHJlcV8qIGFuZCByc3BfKikgdmFsdWVzIGFy ZSBpbiB0aGUgc2FtZQo+IGNhY2hlLWxpbmUuIFRoaXMgbWVhbnMgdGhhdCB3ZSBlbmQgdXAgd2l0 aCB0aGUgc2FtZSBjYWNoZWxpbmUgYmVpbmcKPiBtb2RpZmllZCBieSB0d28gZGlmZmVyZW50IGd1 ZXN0cy4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kCj4gcGxhY2VtZW50IG9mIHRo ZSBndWVzdCB0aGlzIGNvdWxkIGJlIGJhZCAtIGFzIGVhY2ggbG9naWNhbCBDUFUgd291bGQKPiB0 cnkgdG8gd3JpdGUgYW5kIHJlYWQgZnJvbSB0aGUgc2FtZSBjYWNoZS1saW5lLiBBIG1lY2hhbmlz bSB3aGVyZQo+IHRoZSByZXFfKiBhbmQgcnNwXyB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBhbmQgb24g YSBkaWZmZXJlbnQgY2FjaGUgbGluZQo+IGNvdWxkIGJlIHVzZWQuIFRoZSB2YWx1ZSBvZiB0aGUg Y29ycmVjdCBjYWNoZS1saW5lIGFuZCBhbGlnbm1lbnQgY291bGQKPiBiZSBuZWdvdGlhdGVkIHZp YSBYZW5CdXMgLSBpbiBjYXNlIGZ1dHVyZSB0ZWNobm9sb2dpZXMgc3RhcnQgdXNpbmcgMTI4Cj4g Ynl0ZXMgZm9yIGNhY2hlIG9yIHN1Y2guIE9yIHRoZSB0aGUgcHJvZHVjZXIgYW5kIGNvbnN1bWVy IGluZGV4ZXMgYXJlIGluCj4gc2VwYXJhdGUgcmluZ3MuIE1lYW5pbmcgd2UgaGF2ZSBhIOKAmHJl cXVlc3QgcmluZ+KAmSBhbmQgYSDigJhyZXNwb25zZQo+IHJpbmfigJkgLSBhbmQgb25seSB0aGUg 4oCYcmVxX3Byb2TigJksIOKAmHJlcV9ldmVudOKAmSBhcmUgbW9kaWZpZWQgaW4KPiB0aGUg4oCY cmVxdWVzdCByaW5n4oCZLiBUaGUgb3Bwb3NpdGUgKHJlc3BfKikgYXJlIG9ubHkgbW9kaWZpZWQg aW4gdGhlCj4g4oCYcmVzcG9uc2UgcmluZ+KAmS4KClVzaW5nIGRpZmZlcmVudCByaW5ncyBmb3Ig cmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBzb3VuZHMgbGlrZSBhIGdvb2QgaWRlYSwKdGhpcyB3aWxs IHJlZHVjZSB0aGUgbnVtYmVyIG9mIHZhcmlhYmxlcyBvbiB0aGUgcmluZywgbGVhdmluZyBvbmx5 CiJwcm9kdWNlZCIgYW5kICJldmVudCIgKHdlIG5vIGxvbmdlciBuZWVkIHJzcF8gYW5kIHJlcV8p LgoKU2luY2Ugd2Ugd2lsbCBubyBsb25nZXIgaGF2ZSB0d28gZGlmZmVyZW50IGRvbWFpbnMgd3Jp dGluZyB0byB0aGUgc2FtZQpjYWNoZSBsaW5lIEkgZ3Vlc3MgdGhpcyB3aWxsIGdldCByaWQgb2Yg dGhlIGNhY2hlIHBpbmctcG9uZyBwcm9ibGVtLgoKQWxzbyB3aGlsZSB0aGVyZSB3ZSBjb3VsZCB0 cnkgdG8gdXNlIGFsbCB0aGUgcGFnZSwgaW5zdGVhZCBvZiByb3VuZGluZwpkb3duIHRvIHRoZSBj bG9zZXIgcG93ZXIgb2YgdHdvLCB0aGlzIHdpbGwgYWxsb3cgdXMgdG8gZ28gZnJvbSA2NApyZXF1 ZXN0cyB0byAxMjYgKGlmIHVzaW5nIHRoZSBpbmRpcmVjdCBkZXNjcmlwdG9ycyBwcm9wb3NhbCBl eHBsYWluZWQKYWJvdmUpLgogCj4gQykuIFNpbWlsYXIgdG8gQikgcHJvYmxlbSBidXQgd2l0aCBh IGJpZ2dlciBwYXlsb2FkLiBFYWNoCj4g4oCYYmxraWZfc3JpbmdfZW50cnnigJkgb2NjdXBpZXMg MTEyIGJ5dGVzIHdoaWNoIGRvZXMgbm90IGxlbmQgaXRzZWxmCj4gdG8gYSBuaWNlIGNhY2hlIGxp bmUgc2l6ZS4gSWYgdGhlIGluZGlyZWN0IGRlc2NyaXB0b3JzIGFyZSB0byBiZSB1c2VkCj4gZm9y IGV2ZXJ5dGhpbmcgd2UgY291bGQg4oCYc2xpbS1kb3du4oCZIHRoZSBibGtpZl9yZXF1ZXN0L3Jl c3BvbnNlIHRvCj4gYmUgdXAtdG8gNjQgYnl0ZXMuIFRoaXMgbWVhbnMgbW9kaWZ5aW5nIEJMS0lG X01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVAo+IHRvIDUgYXMgdGhhdCB3b3VsZCBzbGltIHRoZSBs YXJnZXN0IG9mIHRoZSBzdHJ1Y3R1cmVzIHRvIDY0LWJ5dGVzLgo+IE5hdHVyYWxseSB0aGlzIG1l YW5zIG5lZ290aWF0aW5nIGEgbmV3IHNpemUgb2YgdGhlIHN0cnVjdHVyZSB2aWEgWGVuQnVzLgo+ IAo+IAo+IEQpLiBUaGUgZmlyc3QgcGljdHVyZSBzaG93cyB0aGUgcHJvYmxlbS4gV2Ugbm93IGFs aWduaW5nIGV2ZXJ5dGhpbmcKPiBvbiB0aGUgd3JvbmcgY2FjaGVsaW5lcy4gV29yc3QgaW4g4oWT IG9mIHRoZSBjYXNlcyB3ZSBzdHJhZGRsZQo+IHRocmVlIGNhY2hlLWxpbmVzLiBXZSBjb3VsZCBu ZWdvdGlhdGUgYSBwcm9wZXIgYWxpZ25tZW50IGZvciBlYWNoCj4gcmVxdWVzdC9yZXNwb25zZSBz dHJ1Y3R1cmUuCj4gCj4gCj4gRSkuIFRoZSBuZXR3b3JrIHN0YWNrIGhhcyBzaG93ZWQgdGhhdCBn b2luZyBpbiBhIHBvbGxpbmcgbW9kZSBkb2VzIGltcHJvdmUKPiBwZXJmb3JtYW5jZS4gVGhlIGN1 cnJlbnQgbWVjaGFuaXNtIG9mIGtpY2tpbmcgdGhlIGd1ZXN0IGFuZCBvciBibG9jawo+IGJhY2tl bmQgaXMgbm90IGFsd2F5cyBjbGVhci4gIFtUT0RPOiBLb25yYWQgdG8gZXhwbGFpbiBpdCBpbiBk ZXRhaWxzXQo+IAo+IAo+IEYpLiBUaGUgY3VycmVudCBibG9jayBwcm90b2NvbCBmb3IgYmlnIEkv T3MgdGhhdCB0aGUgYmFja2VuZCBkZXZpY2VzIGNhbgo+IGhhbmRsZSBlbmRzIHVwIGRvaW5nIGV4 dHJhIHdvcmsgYnkgc3BsaXR0aW5nIHRoZSBJL08gaW4gc21hbGxlciBjaHVua3MsCj4gYW5kIHRo ZW4gcmVhc3NlbWJsaW5nIHRoZW0uIFdpdGggdGhlIHNvbHV0aW9ucyBvdXRsaW5lZCBpbiBBKSB0 aGlzIGNhbgo+IGJlIGZpeGVkLiBUaGlzIGlzIGVhc2lseSBzZWVuIHdpdGggMU1CIEkvT3MuIFNp bmNlIGVhY2ggcmVxdWVzdCBjYW4KPiBvbmx5IGhhbmRsZSA0NGtCIHRoYXQgbWVhbnMgd2UgaGF2 ZSB0byBzcGxpdCBhIDFNQiBJL08gaW4gMjQgcmVxdWVzdHMKPiAoMjMgKiA0MDk2ICogMTEgPSAx MDgxMzQ0KS4gVGhlbiB0aGUgYmFja2VuZCBlbmRzIHVwIHNlbmRpbmcgdGhlbSBpbgo+IHNlY3Rv ci1zaXplcy0gd2hpY2ggd2l0aCBjb250ZW1wb3JhcnkgZGV2aWNlcyAoc3VjaCBhcyBTU0QpIGVu ZHMgdXAgd2l0aAo+IG1vcmUgcHJvY2Vzc2luZy4gVGhlIFNTRHMgYXJlIGNvbWZvcnRhYmxlIGhh bmRsaW5nIDEyOGtCIG9yIGhpZ2hlciBJL09zCj4gaW4gb25lIGdvLgo+IAo+IAo+IEcpLiBESUYv RElYLiBUaGlzIGEgcHJvdG9jb2wgdG8gY2FycnkgZXh0cmEg4oCYY2hlY2tzdW3igJkgaW5mb3Jt YXRpb24KPiBmb3IgZWFjaCBJL08uIFRoZSBJL08gY2FuIGJlIGEgc2VjdG9yIHNpemUsIHBhZ2Ut c2l6ZSBvciBhbiBJL08gc2l6ZQo+IChtb3N0IHBvcHVsYXIgYXJlIDFNQikuIFRoZSBESUYvRElY IG5lZWRzIDggYnl0ZXMgb2YgaW5mb3JtYXRpb24gZm9yCj4gZWFjaCBJL08uIEl0IHdvdWxkIGJl IHdvcnRoIGNvbnNpZGVyaW5nIHB1dHRpbmcvcmVzZXJ2aW5nIHRoYXQgYW1vdW50IG9mCj4gc3Bh Y2UgaW4gZWFjaCByZXF1ZXN0L3Jlc3BvbnNlLiBBbHNvIHB1dHRpbmcgaW4gZXh0cmEgZmxhZ3Mg Zm9yIGZ1dHVyZQo+IGV4dGVuc2lvbnMgd291bGQgYmUgd29ydGggaXQgLSBob3dldmVyIHRoZSBh dXRob3IgaXMgbm90IGF3YXJlIG9mIGFueQo+IHJpZ2h0IG5vdy4KPiAKPiAKPiBIKS4gU2VwYXJh dGUgcmVzcG9uc2UvcmVxdWVzdC4gUG90ZW50aWFsbHkgZXZlbiBtdWx0aS1xdWV1ZSBwZXItVkNQ VQo+IHF1ZXVlcy4gQXMgdjIuNi4zNyBkZW1vbnN0cmF0ZWQsIHRoZSBpZGVhIG9mIFdSSVRFX0JB UlJJRVIgd2FzCj4gZmxhd2VkLiBUaGVyZSBpcyBubyBzaW1pbGFyIGNvbmNlcHQgaW4gdGhlIHN0 b3JhZ2Ugd29ybGQgd2VyZSB0aGUKPiBvcGVyYXRpbmcgc3lzdGVtIGNhbiBwdXQgYSBmb29kIGRv d24gYW5kIHNheTog4oCcZXZlcnl0aGluZyBiZWZvcmUgdGhpcwo+IGhhcyB0byBiZSBvbiB0aGUg ZGlzay7igJ0gVGhlcmUgYXJlIGxpZ3RoZXIgdmVyc2lvbnMgb2YgdGhpcyAtIGNhbGxlZAo+IOKA mEZVQeKAmSBhbmQg4oCYRkxVU0jigJkuIERlcGVuZGluZyBvbiB0aGUgaW50ZXJuYWwgaW1wbGVt ZW50YXRpb24KPiBvZiB0aGUgc3RvcmFnZSB0aGV5IGFyZSBlaXRoZXIgaWdub3JlZCBvciBkbyB0 aGUgcmlnaHQgdGhpbmcuIFRoZQo+IGZpbGVzeXN0ZW1zIGRldGVybWluZSB0aGUgdmlhYmlsaXR5 IG9mIHRoZXNlIGZsYWdzIGFuZCBjaGFuZ2Ugd3JpdGluZwo+IHRhY3RpY3MgZGVwZW5kaW5nIG9u IHRoaXMuIEZyb20gYSBwcm90b2NvbCBsZXZlbCwgdGhpcyBtZWFucyB0aGF0IHRoZQo+IFdSSVRF L1JFQUQvU1lOQyByZXF1ZXN0cyBjYW4gYmUgaW50ZXJtaXhlZCAtIHRoZSBzdG9yYWdlIGJ5IGl0 c2VsZgo+IGRldGVybWluZXMgdGhlIG9yZGVyIG9mIHRoZSBvcGVyYXRpb24uIFRoZSBmaWxlc3lz dGVtIGlzIHRoZSBvbmUgdGhhdAo+IGRldGVybWluZXMgd2hldGhlciB0aGUgV1JJVEUgc2hvdWxk IGJlIHdpdGggYSBGTFVTSCB0byBwcmVzZXJ2ZSBzb21lIGZvcm0KPiBvZiBhdG9taWNpdHkuIFRo aXMgbWVhbnMgd2UgZG8gbm90IGhhdmUgdG8gcHJlc2VydmUgYW4gb3JkZXIgb2Ygb3BlcmF0aW9u cwo+IC0gc28gd2UgY2FuIGhhdmUgbXVsdGlwbGUgcXVldWVzIGZvciByZXF1ZXN0IGFuZCByZXNw b25zZXMuIFRoaXMgaGFzCj4gc2hvdyBpbiB0aGUgbmV0d29yayB3b3JsZCB0byBpbXByb3ZlIHBl cmZvcm1hbmNlIGNvbnNpZGVyYWJseS4KPiAKPiAKPiBJKS4gV2FzdGFnZSBvZiByZXNwb25zZS9y ZXF1ZXN0IG9uIHRoZSBzYW1lIHJpbmcuIEN1cnJlbnRseSBlYWNoIHJlc3BvbnNlCj4gTVVTVCBv Y2N1cHkgdGhlIHNhbWUgYW1vdW50IG9mIHNwYWNlIHRoYXQgdGhlIHJlcXVlc3Qgb2NjdXBpZXMg LSBhcyB0aGUKPiByaW5nIGNhbiBoYXZlIGJvdGggcmVzcG9uc2VzIGFuZCByZXF1ZXN0cy4gU2Vw YXJhdGluZyB0aGUgcmVxdWVzdCBhbmQKPiByZXNwb25zZSByaW5nIHdvdWxkIHJlbW92ZSB0aGUg d2FzdGFnZS4KPiAKPiAKPiBKKS4gMzItYml0IHZzIDY0LWJpdCAob3IgMTAyIGJ5dGVzIHZzIDEx MiBieXRlcykuIFRoZSBzaXplIG9mIHRoZSByaW5nCj4gZW50cmllcyBpcyBkaWZmZXJlbnQgaWYg dGhlIGd1ZXN0IGlzIGluIDMyLWJpdCBvciA2NC1iaXQgbW9kZS4gQ2xlYW5pbmcKPiB0aGlzIHVw IHRvIGJlIHRoZSBzYW1lIHNpemUgd291bGQgc2F2ZSBjb25zaWRlcmFibGUgYWNjb3VudGluZyB0 aGF0IHRoZQo+IGhvc3QgaGFzIHRvIGRvIChleHRyYSBtZW1jcHkgZm9yIGVhY2ggcmVzcG9uc2Uv cmVxdWVzdCkuCgpTbyBmb3J0aCBJIHRoaW5rIG1vc3Qgb2YgdGhlIHByb2JsZW1zIGNvdWxkIGJl IHNvbHZlZCBieSB1c2luZyBpbmRpcmVjdApkZXNjcmlwdG9ycywgYWxpZ25pbmcgcmVxdWVzdHMg dG8gYSBjYWNoZSBzZW5zaWJsZSB2YWx1ZSAodG8gcHJldmVudApzdHJhZGRsaW5nKSBhbmQgdXNp bmcgc2VwYXJhdGUgcmluZ3MgZm9yIHJlcXVlc3RzIGFuZCByZXNwb25zZXMuIFRoaXMgCndvdWxk IGJlIG15IHBsYW4gZm9yIHNvbHZpbmcgdGhpcyBpc3N1ZXM6CgoxLiBJbXBsZW1lbnQgTFJVIG1l Y2hhbmlzbSBpbiBibGtiYWNrIGZvciB0aGUgcGVyc2lzdGVudCBncmFudHMgbGlzdC4gSWYKd2Ug YXJlIGdvaW5nIHRvIGluY3JlbWVudCB0aGUgbnVtYmVyIG9mIGluLWZsaWdodCBJTyB3ZSBuZWVk IHRvIGJlIGFibGUgdG8Ka2VlcCB0aGUgbGlzdCBvZiBwZXJzaXN0ZW50bHkgbWFwcGVkIGdyYW50 cyB0byBzb21ldGhpbmcgc2Vuc2libGUsIGFuZAp3ZSBhcmUgbm8gbG9uZ2VyIGFibGUgdG8gcGVy c2lzdGVudGx5IG1hcCBhbGwgdGhlIGdyYW50cyB0aGF0IGNvdWxkIGJlIAp1c2VkLiBJbiBteSBw cm9wb3NhbCB0aGF0IHdvdWxkIGJlIDY0ICogNCBmb3IgZWFjaCBncmFudCBmcmFtZSB0aGF0IApj b250YWlucyBpbmRpcmVjdCBlbnRyaWVzLCBwbHVzIDY0ICogNCAqIDI1NiwgZm9yIGFsbCB0aGUg cG9zc2libGUKZW50cmllcyBpbiB0aGUgaW5kaXJlY3QgZnJhbWUgNjQgKiA0ICsgNjQgKiA0ICog MjU2ID0gNjU3OTIuCgoyLiBJbXBsZW1lbnQgaW5kaXJlY3QgZGVzY3JpcHRvcnMuCgozLiBJbXBs ZW1lbnQgbmV3IHJpbmcgcHJvdG9jb2wsIHVzaW5nIHR3byBzZXBhcmF0ZSByaW5ncyBmb3IgcmVx dWVzdHMKYW5kIHJlcGxpZXMuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=