From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 00/20] drm: Split out the formats API and move it to a common place Date: Sun, 21 Apr 2019 01:59:04 +0300 Message-ID: <20190420225904.GZ4964@pendragon.ideasonboard.com> References: <20190417154121.GJ13337@phenom.ffwll.local> <20190418062229.eyog4i62eg4pr6uf@flea> <20190418090221.e57dogn4yx5nwdni@flea> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id 53B66892BD for ; Sat, 20 Apr 2019 22:59:15 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Thomas Petazzoni , Maxime Ripard , Linux Kernel Mailing List , dri-devel , Paul Kocialkowski , David Airlie , Hans Verkuil , Sean Paul , Sakari Ailus , Daniel Vetter , Mauro Carvalho Chehab , "open list:DMA BUFFER SHARING FRAMEWORK" List-Id: dri-devel@lists.freedesktop.org SGkgRGFuaWVsLAoKT24gVGh1LCBBcHIgMTgsIDIwMTkgYXQgMTI6MDc6NDRQTSArMDIwMCwgRGFu aWVsIFZldHRlciB3cm90ZToKPiBPbiBUaHUsIEFwciAxOCwgMjAxOSBhdCAxMTowMiBBTSBNYXhp bWUgUmlwYXJkIHdyb3RlOgo+ID4gT24gVGh1LCBBcHIgMTgsIDIwMTkgYXQgMDk6NTI6MTBBTSAr MDIwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+ID4gT24gVGh1LCBBcHIgMTgsIDIwMTkgYXQg ODoyMiBBTSBNYXhpbWUgUmlwYXJkIHdyb3RlOgo+ID4gPiA+IE9uIFdlZCwgQXByIDE3LCAyMDE5 IGF0IDA1OjQxOjIxUE0gKzAyMDAsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiA+ID4gPiBPbiBX ZWQsIEFwciAxNywgMjAxOSBhdCAwOTo1NDoyNkFNICswMjAwLCBNYXhpbWUgUmlwYXJkIHdyb3Rl Ogo+ID4gPiA+ID4gPiBIaSwKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gRFJNIGNvbWVzIHdpdGgg YW4gZXh0ZW5zaXZlIGZvcm1hdCBzdXBwb3J0IHRvIHJldHJpZXZlIHRoZSB2YXJpb3VzCj4gPiA+ ID4gPiA+IHBhcmFtZXRlcnMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZm9ybWF0IChzdWNoIGFz IHRoZSBzdWJzYW1wbGluZywgb3IgdGhlCj4gPiA+ID4gPiA+IGJpdHMgcGVyIHBpeGVsKSwgYXMg d2VsbCBhcyBzb21lIGhlbHBlcnMgYW5kIHV0aWxpdGllcyB0byBlYXNlIHRoZSBkcml2ZXIKPiA+ ID4gPiA+ID4gZGV2ZWxvcG1lbnQuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IHY0bDIsIG9uIHRo ZSBvdGhlciBzaWRlLCBkb2Vzbid0IHByb3ZpZGUgc3VjaCBmYWNpbGl0aWVzLCBsZWF2aW5nIGVh Y2gKPiA+ID4gPiA+ID4gZHJpdmVyIHJlaW1wbGVtZW50IGEgc3Vic2V0IG9mIHRoZSBmb3JtYXRz IHBhcmFtZXRlcnMgZm9yIHRoZSBvbmUgc3VwcG9ydGVkCj4gPiA+ID4gPiA+IGJ5IHRoYXQgcGFy dGljdWxhciBkcml2ZXIuIFRoaXMgbGVhZHMgdG8gYSBsb3Qgb2YgZHVwbGljYXRpb24gYW5kCj4g PiA+ID4gPiA+IGJvaWxlcnBsYXRlIGNvZGUgaW4gdGhlIHY0bDIgZHJpdmVycy4KPiA+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gVGhpcyBzZXJpZXMgdHJpZXMgdG8gYWRkcmVzcyB0aGlzIGJ5IG1vdmlu ZyB0aGUgRFJNIGZvcm1hdCBBUEkgaW50byBsaWIgYW5kCj4gPiA+ID4gPiA+IHR1cm5pbmcgaXQg aW50byBhIG1vcmUgZ2VuZXJpYyBBUEkuIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdlJ3ZlIG5lZWRl ZCB0byBkbwo+ID4gPiA+ID4gPiBzb21lIHByZWxpbWluYXJ5IGNoYW5nZXMgb24gdGhlIERSTSBk cml2ZXJzLCB0aGVuIG1vdmVkIHRoZSBBUEkgYW5kIGZpbmFsbHkKPiA+ID4gPiA+ID4gY29udmVy dGVkIGEgdjRsMiBkcml2ZXIgdG8gZ2l2ZSBhbiBleGFtcGxlIG9mIGhvdyBzdWNoIGxpYnJhcnkg Y291bGQgYmUKPiA+ID4gPiA+ID4gdXNlZC4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gTGV0IG1l IGtub3cgd2hhdCB5b3UgdGhpbmssCj4gPiA+ID4gPiA+IE1heGltZQo+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiBDaGFuZ2VzIGZyb20gUkZDOgo+ID4gPiA+ID4gPiAgIC0gUmViYXNlZCBvbiBuZXh0 Cj4gPiA+ID4gPiA+ICAgLSBGaXhlZCB0aGUgdmFyaW91cyBmb3JtYXRzIG1hcHBpbmcKPiA+ID4g PiA+ID4gICAtIEFkZGVkIHRhZ3MKPiA+ID4gPiA+ID4gICAtIERpZCBtb3N0IG9mIHRoZSBmb3Jt YXRzIGZ1bmN0aW9ucyBhcyBpbmxpbmUgZnVuY3Rpb25zCj4gPiA+ID4gPiA+ICAgLSBVc2VkIGEg Y29uc2lzdGVudCBwcmVmaXggZm9yIGFsbCB0aGUgdXRpbGl0aWVzIGZ1bmN0aW9ucwo+ID4gPiA+ ID4gPiAgIC0gRml4ZWQgdGhlIGNvbXBpbGF0aW9uIGJyZWFrYWdlcywgYW5kIGRpZCBhIHJ1biBv ZiBhbGxtb2Rjb25maWcgZm9yIGFybSwKPiA+ID4gPiA+ID4gICAgIGFybTY0IGFuZCB4ODZfNjQK PiA+ID4gPiA+ID4gICAtIEZpeGVkIG91dCBvZiBhcnJheSBib3VuZHMgd2FybmluZ3MgaW4gdGhl IGltYWdlX2Zvcm1hdF9pbmZvX2Jsb2NrXyoKPiA+ID4gPiA+ID4gICAgIGZ1bmN0aW9ucwo+ID4g PiA+ID4gPiAgIC0gQWRkZWQgTGljZW5zZSBhbmQgY29weXJpZ2h0IGhlYWRlcnMgb24gbWlzc2lu ZyBmaWxlcwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBNYXhpbWUgUmlwYXJkICgyMCk6Cj4gPiA+ ID4gPiA+ICAgZHJtOiBSZW1vdmUgdXNlcnMgb2YgZHJtX2Zvcm1hdF9udW1fcGxhbmVzCj4gPiA+ ID4gPiA+ICAgZHJtOiBSZW1vdmUgdXNlcnMgb2YgZHJtX2Zvcm1hdF8oaG9yenx2ZXJ0KV9jaHJv bWFfc3Vic2FtcGxpbmcKPiA+ID4gPiA+ID4gICBkcm0vZm91cmNjOiBQYXNzIHRoZSBmb3JtYXRf aW5mbyBwb2ludGVyIHRvIGRybV9mb3JtYXRfcGxhbmVfY3BwCj4gPiA+ID4gPiA+ICAgZHJtL2Zv dXJjYzogUGFzcyB0aGUgZm9ybWF0X2luZm8gcG9pbnRlciB0byBkcm1fZm9ybWF0X3BsYW5lX3dp ZHRoL2hlaWdodAo+ID4gPiA+ID4gPiAgIGRybTogUmVwbGFjZSBpbnN0YW5jZXMgb2YgZHJtX2Zv cm1hdF9pbmZvIGJ5IGRybV9nZXRfZm9ybWF0X2luZm8KPiA+ID4gPiA+ID4gICBsaWI6IEFkZCB2 aWRlbyBmb3JtYXQgaW5mb3JtYXRpb24gbGlicmFyeQo+ID4gPiA+ID4gPiAgIGRybS9mYjogTW92 ZSBmcm9tIGRybV9mb3JtYXRfaW5mbyB0byBpbWFnZV9mb3JtYXRfaW5mbwo+ID4gPiA+ID4gPiAg IGRybS9tYWxpZHA6IENvbnZlcnQgdG8gZ2VuZXJpYyBpbWFnZSBmb3JtYXQgbGlicmFyeQo+ID4g PiA+ID4gPiAgIGRybS9jbGllbnQ6IENvbnZlcnQgdG8gZ2VuZXJpYyBpbWFnZSBmb3JtYXQgbGli cmFyeQo+ID4gPiA+ID4gPiAgIGRybS9leHlub3M6IENvbnZlcnQgdG8gZ2VuZXJpYyBpbWFnZSBm b3JtYXQgbGlicmFyeQo+ID4gPiA+ID4gPiAgIGRybS9pOTE1OiBDb252ZXJ0IHRvIGdlbmVyaWMg aW1hZ2UgZm9ybWF0IGxpYnJhcnkKPiA+ID4gPiA+ID4gICBkcm0vaXB1djM6IENvbnZlcnQgdG8g Z2VuZXJpYyBpbWFnZSBmb3JtYXQgbGlicmFyeQo+ID4gPiA+ID4gPiAgIGRybS9tc206IENvbnZl cnQgdG8gZ2VuZXJpYyBpbWFnZSBmb3JtYXQgbGlicmFyeQo+ID4gPiA+ID4gPiAgIGRybS9vbWFw OiBDb252ZXJ0IHRvIGdlbmVyaWMgaW1hZ2UgZm9ybWF0IGxpYnJhcnkKPiA+ID4gPiA+ID4gICBk cm0vcm9ja2NoaXA6IENvbnZlcnQgdG8gZ2VuZXJpYyBpbWFnZSBmb3JtYXQgbGlicmFyeQo+ID4g PiA+ID4gPiAgIGRybS90ZWdyYTogQ29udmVydCB0byBnZW5lcmljIGltYWdlIGZvcm1hdCBsaWJy YXJ5Cj4gPiA+ID4gPiA+ICAgZHJtL2ZvdXJjYzogUmVtb3ZlIG9sZCBEUk0gZm9ybWF0IEFQSQo+ ID4gPiA+ID4gPiAgIGxpYjogaW1hZ2UtZm9ybWF0czogQWRkIHY0bDIgZm9ybWF0cyBzdXBwb3J0 Cj4gPiA+ID4gPiA+ICAgbGliOiBpbWFnZS1mb3JtYXRzOiBBZGQgbW9yZSBmdW5jdGlvbnMKPiA+ ID4gPiA+ID4gICBtZWRpYTogc3VuNmk6IENvbnZlcnQgdG8gdGhlIGltYWdlIGZvcm1hdCBBUEkK PiA+ID4gPiA+Cj4gPiA+ID4gPiBJbiB0aGUgaW50ZXJlc3Qgb2YgbWFraW5nIG15c2VsZiB1bnBv cHVsYXI6IFdoeSBtb3ZlIHRoaXMgb3V0IG9mIGRybT8KPiA+ID4gPiA+Cj4gPiA+ID4gPiBXZSBk byBoYXZlIGEgYnVuY2ggb2Ygb3RoZXIgc3VjaCBzaGFyZWQgaGVscGVycyBhbHJlYWR5IChtb3N0 bHkgaW4KPiA+ID4gPiA+IGRyaXZlcnMvdmlkZW8pIGZvciBkdCB2aWRlb21vZGUgYW5kIGhkbWkg aW5mb2ZyYW1lcywgYW5kIEknbSBub3Qgc3VwZXIKPiA+ID4gPiA+IHN1cmUgdGhhdCdzIGdvaW5n IGJldHRlciB0aGFuIGtlZXBpbmcgaXQgbWFpbnRhaW5lZCBpbiBkcm0uCgpUaGF0J3MgYSBiaXQg b2YgYSBkaWZmZXJlbnQgc2l0dWF0aW9uIGFzIGJvdGggRFJNIGFuZCBGQkRFViBhZGRyZXNzIHRo ZQpzYW1lIGZlYXR1cmVzIChkaXNwbGF5IG91dHB1dCksIGFuZCBGQkRFViBpcyBkZXByZWNhcmVk IGFuZCByZXBsYWNlZCBieQpEUk0uCgpJJ20gbm90IGFnYWluc3QgbWFpbnRhaW5pbmcgYSA0Q0Mg bGlicmFyeSBpbiBEUk0gKGFkZGluZyBhIHRoaXJkLXBhcnR5Cm1haW50YWluZXIgd291bGQgbGlr ZWx5IGNyZWF0ZSBtb3JlIHByb2JsZW1zIHRoYW4gaXQgd291bGQgc29sdmUpLCBidXQKdGhhdCBk b2Vzbid0IG1lYW4gdGhlIGxpYnJhcnkgaGFzIHRvIGxpdmUgaW4gZHJpdmVycy9ncHUvLCBub3Ig dGhhdCBpdApuZWVkcyB0byBoYXZlIHRoZSBkcm1fIHByZWZpeC4gSSB3b3VsZCBhY3R1YWxseSBh ZHZvY2F0ZSB0byBtYWtlIGl0IGxpdmUKaW4gYSBuZXV0cmFsIGRpcmVjdG9yeSwgd2l0aCBhIG5l dXRyYWwgcHJlZml4IChrdWRvcyB0byBhbnlvbmUgd2hvIGNhbgpwcm9wb3NlIGEgbmljZSBuYW1p bmcgY29udmVudGlvbiB0aGF0IHdvdWxkIGVzdGFibGlzaCBhIG5ldyBzaGFyZWQKZ3JvdW5kIGZv ciBpbWFnZS92aWRlby1yZWxhdGVkIExpbnV4IEFQSXMpLCBhbmQgbWFpbnRhaW5lZCB0aHJvdWdo IHRoZQpEUk0gdHJlZSAocG9zc2libHkgd2l0aCBleHRyYSBlbnRyaWVzIGluIE1BSU5UQUlORVJT IHRvIGVuc3VyZSBpdApyZWFjaGVzIGFsbCB0aGUgcmVsYXRlZCBmb2xrcykuCgo+ID4gPiA+ID4g UGx1cyB0aGUgdWFwaSBpcyBhbHJlYWR5IHRoYXQgeW91IGluY2x1ZGUgZHJtX2ZvdXJjYy5oIHRv IGdldCBhdCB0aGVzZSwKPiA+ID4gPiA+IGRyb3BwaW5nIHRoZSBkcm0gcHJlZml4IGlzbid0IGdv aW5nIHRvIGhlbHAgSSB0aGluay4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBPZiBjb3Vyc2Ugd2UnZCBu ZWVkIHRvIG1ha2UgaXQgYSBzZXBhcmF0ZSBkcm1fZm9ybWF0cy5rbyAoc28gdGhhdCB2NGwgY2Fu Cj4gPiA+ID4gPiB1c2UgaXQgd2l0aG91dCBkcmFnZ2luZyBpbiBhbGwgb2YgZHJtKSwgYW5kIHdl IG5lZWQgdG8gYWRkIHNvbWUgZmllbGRzIGZvcgo+ID4gPiA+ID4gY29udmVydGluZyB0byB2NGwg Zm91cmNjIGNvZGVzICh3aGljaCBhcmUgZGlmZmVyZW50KS4gQnV0IHRoYXQgc2hvdWxkIGJlCj4g PiA+ID4gPiBhbGwgcG9zc2libGUuIEFuZCBJIGRvbid0IHRoaW5rIHRoZSBkcm1fIHByZWZpeCBp biB2NGwgY29kZSBpcyBhIHByb2JsZW0sCj4gPiA+ID4gPiBpdCdzIGFjdHVhbGx5IGEgZmVhdHVy ZTogSXQgbWFrZXMgaXQgcmVhbGx5IGNsZWFyIHRoYXQgdGhlc2UgYXJlIHRoZSBkcm0KPiA+ID4g PiA+IGZvdXJjYyBjb2RlcywgYXMgYWxsb2NhdGVkIGluIGRybV9mb3VyY2MuaCwgcGx1cyB0aGVp ciBtb2RpZmllcnMsIGFuZCBhbGwKPiA+ID4gPiA+IHRoYXQuIFRoYXQgYWxsb2NhdGlvbiBhdXRo b3JpdHkgaXMgYWxzbyBhbHJlYWR5IGJha2VkIGludG8gdmFyaW91cyBraHIvZXh0Cj4gPiA+ID4g PiBzdGFuZGFyZHMsIHRvby4KClRoZXJlJ3Mgb25lIHRoaW5nIHRoYXQgVjRMMiBoYXMgYW5kIERS TSBoYXNuJ3QgZm9yIDRDQ3M6IGdvb2QKZG9jdW1lbnRhdGlvbi4gTG9vayBhdApodHRwczovL2xp bnV4dHYub3JnL2Rvd25sb2Fkcy92NGwtZHZiLWFwaXMtbmV3L3VhcGkvdjRsL3BpeGZtdC1wYWNr ZWQtcmdiLmh0bWwKb3IKaHR0cHM6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvdjRsLWR2Yi1hcGlz LW5ldy91YXBpL3Y0bC95dXYtZm9ybWF0cy5odG1sCmZvciBpbnN0YW5jZS4gSXQncyBwYWluZnVs IHRvIHdyaXRlLCBwYWluZnVsIHRvIHJlYWQsIGJ1dCBkZWZpbmVzIHRoZQo0Q0NzIHZlcnkgY2xl YXJseSB3aXRob3V0IGFtYmlndWl0eS4gSSB3b3VsZG4ndCBiZSBzdXJwcmlzZWQgaWYKZGlmZmVy ZW50IGRyaXZlcnMgdXNlZCB0aGUgc2FtZSBEUk0gNENDIGZvciBkaWZmZXJlbnQgZm9ybWF0cyBk dWUgdG8gdGhlCmxhY2sgb2YgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbi4gTW92aW5nIHRvIGEgc2hh cmVkIGxpYnJhcnkgZm9yIDRDQ3MKc2hvdWxkIGFsc28gYWRkcmVzcyB0aGUgZG9jdW1lbnRhdGlv biBzaWRlLCBhbmQgYW55IG5ldyBmb3JtYXQgYWRkZWQgdG8KdGhlIGtlcm5lbCwgd2hldGhlciBm cm9tIHRoZSBWNEwyIHNpZGUgb3IgdGhlIERSTSBzaWRlLCB3b3VsZCBiZQpyZXF1aXJlZCB0byBw cm92aWRlIGRldGFpbGVkIGRvY3VtZW50YXRpb24uIFRoYXQgd291bGQgYmUgYSBncmVhdAppbXBy b3ZlbWVudCBmb3IgRFJNIDRDQyBoYW5kbGluZy4KCj4gPiA+ID4gVGhlIHdheSBJIHNlZSBpdCwg dGhlcmUncyBhIGZ1bmRhbWVudGFsIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgVUFQSQo+ID4gPiA+ IGFuZCB0aGUga2VybmVsLiBJIGRvbid0IHN1Z2dlc3Qgd2UgY2hhbmdlIGFueXRoaW5nIGFib3V0 IHRoZSBVQVBJOiB0aGUKPiA+ID4gPiBkcm0gZm9ybWF0cyBzaG91bGQga2VlcCB0aGVpciBwcmVm aXgsIGRybV9mb3VyY2MuaCBjYW4gcmVtYWluIHRoYXQKPiA+ID4gPiBhdXRob3JpdHksIGl0J3Mg YWxsIGZpbmUuCj4gPiA+ID4KPiA+ID4gPiBJbnRlcm5hbGx5IGhvd2V2ZXIsIHRoZSBsb25nIHRl cm0gZ29hbCBpcyB0byBzaGFyZSB0aGUgZm91cmNjJ3MKPiA+ID4gPiBiZXR3ZWVuIERSTSBhbmQg VjRMMiBmb3IgdGhlIHNhbWUgZm9ybWF0cy4gSXQgYmFzaWNhbGx5IG1lYW5zIHRoYXQgb2YKPiA+ ID4gPiBjb3Vyc2UgdjRsMiBzaG91bGQgYmUgdXNpbmcgdGhlIERSTSBmb3VyY2Mgd2hlbiBhIGZv cm1hdCBleGlzdHMgaW4gRFJNCj4gPiA+ID4gYW5kIG5vdCB2NGwyLCBidXQgYWxzbyB0aGF0IERS TSBzaG91bGQgdXNlIHY0bDIgZm91cmNjIHdoZW4gdGhlIGZvcm1hdAo+ID4gPiA+IGV4aXN0cyBp biB2NGwyIGJ1dCBub3QgRFJNLCBhbmQgdGhhdCBpcyBmYXIgbW9yZSBsaWtlbHksIGdpdmVuIHRo ZQo+ID4gPiA+IGFscmVhZHkgZXh0ZW5zaXZlIHY0bDIgZm9ybWF0cyBzdXBwb3J0Lgo+ID4gPgo+ ID4gPiBVaCBuby4gV2UgZGlkIGxvb2sgYXQgdjRsIGZvdXJjYyBleHRlbnNpdmVseSB3aGVuIGRl Y2lkaW5nIHVwb24gYSBkcm0KPiA+ID4gZm9ybWF0IGlkZW50aWZpZXIgc3BhY2UuCj4gPgo+ID4g Tm8gdG8gd2hhdCBleGFjdGx5Pwo+ID4KPiA+ID4gQW5kIGEgbG90IG9mIHBlb3BsZSBwdXNoZWQg Zm9yIHRoZSAiZm91cmNjIGlzIGEgc3RhbmRhcmQiLCB3aGVuCj4gPiA+IHJlYWxseSBpdCdzIHRv dGFsbHkgbm90Lgo+ID4KPiA+IEV2ZW4gaWYgaXQncyBub3QgYSBzdGFuZGFyZCwgaGF2aW5nIGNv bnNpc3RlbmN5IHdvdWxkIGJlIGEgZ29vZCB0aGluZy4KPiA+Cj4gPiBBbmQgeW91IHNhaWQgeW91 cnNlbGYgdGhhdCBEUk0gZm91cmNjIGlzIG5vdyBwcmV0dHkgbXVjaCBhbiBhdXRob3JpdHkKPiA+ IGZvciB0aGUgZm91cmNjLCBzbyBpdCBkZWZpbml0ZWx5IGxvb2tzIGxpa2UgYSBzdGFuZGFyZCB0 byBtZS4KPiAKPiBkcm0gZm91cmNjIGlzIHRoZSBhdXRob3JpdHkgZm9yIGRybSBmb3VyY2MgY29k ZXMuIE5vdCBmb3IgYW55IG9mIHRoZQo+IG90aGVycyAoYW5kIHRoZXJlJ3MgbG90cyBvZiB0aGVt KS4gTm93IGl0J3MgdXNlZCBpbiBhIGJ1bmNoIG9mIG90aGVyCj4gcGxhY2VzIChraHIgc3RhbmRh cmRzLCBkcmkgcHJvdG9jb2xzIGluIHdheWxhbmQvWDExKSwgYnV0IHRoZXkncmUKPiBzdGlsbCBv bmx5IGRybSBmb3VyY2MuIFRoZXJlIGlzIG5vIG92ZXJhbGwgZm91cmNjIHN0YW5kYXJkLgo+IAo+ ID4gPiB2NGwgdGVuZHMgdG8gY29uZmxhdGUgcGl4ZWwgZm9ybWF0IHdpdGggc3R1ZmYgdGhhdCB3 ZSB0ZW5kIHRvIGVuY29kZQo+ID4gPiBpbiBtb2RpZmllcnMgYSBsb3QgbW9yZS4KPiA+Cj4gPiBC b3JpcyBpcyB3b3JraW5nIG9uIGFkZGluZyB0aGUgbW9kaWZpZXJzIGNvbmNlcHQgdG8gdjRsMiwg c28gd2UncmUKPiA+IGNvbnZlcmdpbmcgaGVyZSwgYW5kIHdlIGNhbiB0b3RhbGx5IGhhdmUgYSBs YXllciBpbiB2NGwyIHRvIGNvbnZlcnQKPiA+IGJldHdlZW4gb2xkIHY0bDIgImZvcm1hdCttb2Rp ZmllcnMiIGZvcm1hdHMsIGFuZCBEUk0gc3R5bGUgZm9ybWF0cy4KPiA+Cj4gPiA+IFRoZXJlJ3Mg YSBidW5jaCBvZiByZWFzb25zIHdlIGNhbid0IGp1c3QgdXNlIHY0bCwgYW5kIHRoZXkncmUgYXMK PiA+ID4gdmFsaWQgYXMgZXZlcjoKPiA+ID4KPiA+ID4gLSBXZSBvdmVybGFwIGJhZGx5IGluIHNv bWUgYXJlYXMsIHNvIGV2ZW4gaWYgZm91cmNjIGNvZGVzIG1hdGNoLCB3ZQo+ID4gPiAgIGNhbid0 IHVzZSB0aGVtIGFuZCBuZWVkIGEgZHVwbGljYXRlZCBEUk1fRk9VUkNDIGNvZGUuCj4gPgo+ID4g RG8geW8gaGF2ZSBhbiBleGFtcGxlIG9mIG9uZSBvZiB0aG9zZSBhcmVhcz8KPiAKPiBJIHRoaW5r IHRoZSByZ2Igc3R1ZmYgd2FzIG9uZSBvZiB0aGUgYmlnIHJlYXNvbnMgdG8gbm90IHJldXNlIGFu eQo+IGV4aXN0aW5nIGZvdXJjYyBzdGFuZGFyZCAod2hldGhlciB2NGwsIG9yIGFub3RoZXIgb25l IGZyb20gZS5nLiB2aWRlbwo+IGNvbnRhaW5lciBmb3JtYXRzKS4gV2UgaGFkIGluaXRpYWwgcGF0 Y2hlcyB0byByZXVzZSB0aGUgZm91cmNjIHRoYXQKPiBleGlzdGVkLCBidXQgdGhlIGVuZCByZXN1 bHQgd2FzIHJlYWxseSBpbmNvbnNpc3RlbnQsIHNvIHdlIGRpdGNoIHRoYXQKPiBhbmQgcm9sbGVk IG91dCBhIG5ldyBzZXQgb2YgZW50aXJlbHkgZHJtIHNwZWNpZmljIGZvdXJjYyBjb2RlcyBmb3IK PiByZ2JhLgoKQ291bGQgeW91IGdpdmUgb25lIG9yIGEgY291cGxlIG9mIGV4YW1wbGVzIG9mIFY0 TDIgNENDcyB0aGF0IGFyZSBub3QKT0NELWNvbXBhdGlibGUgPyA6LSkKCj4gPiA+IC0gdjRsIGVu Y29kZXMgc29tZSBtZXRhZGF0YSBpbnRvIHRoZSBmb3VyY2MgdGhhdCB3ZSBlbmNvZGUgZWxzZXdo ZXJlLAo+ID4gPiAgIGUuZy4gb2Zmc2V0IGZvciBwbGFuYXIgeXV2IGZvcm1hdHMsIG9yIHRpbGlu ZyBtb2RlCj4gPgo+ID4gQXMgSSB3YXMgc2F5aW5nLCB0aGlzIGNoYW5nZXMgb24gdGhlIHY0bDIg c2lkZSwgYW5kIGNvbnZlcmdpbmcgdG8KPiA+IHdoYXQgRFJNIGlzIGRvaW5nLgo+ID4KPiA+ID4g LSBkcm0gZm91cmNjIGNvZGUgZG9lc24ndCBhY3R1YWxseSBkZWZpbmUgdGhlIGRybV9mb3JtYXRf aW5mbwo+ID4gPiAgIHVuaXF1ZWx5LCBkcml2ZXJzIGNhbiBvdmVycmlkZSB0aGF0ICh0aGF0J3Mg YW4gZXhwbGljaXQgZGVzaWduCj4gPiA+ICAgaW50ZW50IG9mIG1vZGlmaWVycywgdG8gYWxsb3cg ZHJpdmVycyB0byBhZGQgYW5vdGhlciBwbGFuZSBmb3IKPiA+ID4gICBlLmcuIGNvbXByZXNzaW9u IGluZm9ybWF0aW9uKS4gWW91J2QgbmVlZCB0byBwdWxsIHRoYXQgZHJpdmVyCj4gPiA+ICAga25v d2xlZGdlIGludG8geW91ciBmb3JtYXQgbGlicmFyeS4KClRoYXQncyBhIG1pc3Rha2UgaW4gbXkg b3Bpbmlvbi4gV2UgdHJpZWQgdGhhdCBpbiBWNEwyIHRvIHN0b3JlIG1ldGFkYXRhCmluIGEgc2Vw YXJhdGUgcGxhbmUsIGFuZCBoYWQgdG8gZ28gYW5vdGhlciByb3V0ZSBldmVudHVhbGx5IGFzIGl0 CmNyZWF0ZWQgYSB2ZXJ5IGJhZCBtZXNzLgoKVGhlcmUncyBhIHRlbmRlbmN5IGluIGJvdGggc3Vi c3lzdGVtcyB0byBsb29rIGF0IHRoZSBvdGhlciBhcyBhIGJpdCBvZiBhCnJldGFyZGVkIHJlbGF0 aXZlLCBhbmQgdGhhdCdzIGEgc2hhbWUsIHdlIGhhdmUgbG90cyB0byBsZWFybiBmcm9tIGVhY2gK b3RoZXIncyBtaXN0YWtlcy4gVGhhdCB3b3VsZG4ndCBiZSB0b28gZGlmZmljdWx0IGlmIHBlb3Bs ZSBzdGFydGVkCnRhbGtpbmcgdG8gZWFjaCBvdGhlci4KCkEgc2VtaS1yZWxhdGVkIGNvbW1lbnQ6 IERSTSBhbHNvIGNhcnJpZXMgb3RoZXIgbWlzdGFrZXMgb2YgaXRzIG93biwgSSdtCnRoaW5raW5n IGFib3V0IERSTV9GT1JNQVRfQklHX0VORElBTiBpbiBwYXJ0aWN1bGFyCgo+ID4gSSdtIG5vdCBz dXJlIGhvdyBteSBwYXRjaGVzIGFyZSBjaGFuZ2luZyBhbnl0aGluZyBoZXJlLiBUaGlzIGlzCj4g PiBsaXR0ZXJhbGx5IHRoZSBzYW1lIGNvZGUsIHdpdGggdGhlIGZ1bmN0aW9ucyByZW5hbWVkLgo+ ID4KPiA+IElmIGRyaXZlcnMgd2FudCB0byBvdmVycmlkZSB0aGF0LCB0aGVuIHllYWgsIGZpbmUs IHdlIGNhbiBsZXQgdGhlbSBkbwo+ID4gdGhhdC4gSnVzdCBsaWtlIGFueSBoZWxwZXIgdGhpcyBq dXN0IHByb3ZpZGVzIGEgZGVmYXVsdCB0aGF0IGNvdmVycwo+ID4gbW9zdCBvZiB0aGUgY2FzZXMu Cj4gPgo+ID4gPiBJb3cgdGhlcmUncyBubyB3YXkgd2UgY2FuIGVhc2lseSBhZG9wdCB2NGwgZm91 cmNjLCBleGNlcHQgaWYgd2UgZG8KPiA+ID4gc29tZXRoaW5nIGxpa2UgYSBuZXcgYWRkZmIgZmxh Zy4KPiA+Cj4gPiBGb3IgdGhlIGZvcm1hdHMgdGhhdCB3b3VsZCBiZSBkZXNjcmliZWQgYXMgYSBt b2RpZmllciwgc3VyZS4gRm9yIGFsbAo+ID4gdGhlIG90aGVycyAodGhhdCBhcmUgbm90IHlldCBz dXBwb3J0ZWQgYnkgRFJNKSwgdGhlbiBJIGRvbid0IHJlYWxseQo+ID4gc2VlIHdoeSBub3QuCj4g Cj4gU2VlIGFib3ZlLCB3ZSB0cmllZCB0aGF0IGluaXRpYWxseSwgZGlkbid0IHBhc3MgdGhlIG9j ZCB0ZXN0cyB3aGVuCj4gcmV2aWV3aW5nLiBNYXliZSB0aGUgc2l0dWF0aW9uIGlzIGJldHRlciBv dXRzaWRlIG9mIHJiZ3gvYSBmb3JtYXRzLAo+IGFuZCBJIHRoaW5rIHdlIGRvIGF0IGxlYXN0IHRy eSB0byB1c2UgdGhlIHNhbWUgZm91cmNjIGNvZGVzIHRoZXJlIHdoZW4KPiB0aGVyZSBhbHJlYWR5 IGlzIG9uZS4gQnV0IHRoZW4gdGhlIGRldGFpbHMgb2NjYXNpb25hbGx5IGxvb2sKPiBkaWZmZXJl bnQuCj4gCj4gPiA+ID4gQW5kIGdpdmVuIGhvdyB0aGUgY3VycmVudCBzdGF0ZSBpcyBhIG1lc3Mg aW4gdGhpcyByZWdhcmQsIEknbSBub3QgdG9vCj4gPiA+ID4gb3B0aW1pc3RpYyBhYm91dCBrZWVw aW5nIHRoZSBmb3JtYXRzIGluIHRoZWlyIHJlbGV2YW50IGZyYW1ld29ya3MuCj4gPiA+ID4KPiA+ ID4gPiBIYXZpbmcgYSBzaGFyZWQgbGlicmFyeSwgZ292ZXJuZWQgYnkgYm90aCwgd2lsbCBtYWtl IHRoaXMgZmFyIGVhc2llciwKPiA+ID4gPiBzaW5jZSBpdCB3aWxsIGJlIGVhc3kgdG8gZGlzY292 ZXIgdGhlIGZvcm1hdHMgdGhhdCBhcmUgYWxyZWFkeQo+ID4gPiA+IHN1cHBvcnRlZCBieSB0aGUg b3RoZXIgc3Vic3lzdGVtLgo+ID4gPgo+ID4gPiBJIHRoaW5rIGEgY29tcGF0IGxpYnJhcnkgdGhh dCAodHJpZXMgdG8sIGJlc3QgZWZmb3J0KSBjb252ZXJ0IGJldHdlZW4KPiA+ID4gdjRsIGFuZCBk cm0gZm91cmNjIHdvdWxkIG1ha2Ugc2Vuc2UuIFNvbWV3aGVyZSBpbiBkcml2ZXJzL3ZpZGVvLCBu ZXh0Cj4gPiA+IHRvIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmb3IgdmlkZW9tb2RlIDwtPiBk cm1fZGlzcGxheV9tb2RlCj4gPiA+IHBlcmhhcHMuIFRoYXQgc2hvdWxkIGJlIHVzZWZ1bCBmb3Ig ZHJpdmVycy4KPiA+Cj4gPiBUaGF0J3Mgbm90IHJlYWxseSB3aGF0IHRoaXMgc2VyaWVzIGlzIGFi b3V0IHRob3VnaC4gVGhhdCBzZXJpZXMgaXMKPiA+IGFib3V0IHNoYXJpbmcgdGhlIChpbWFnZXxw aXhlbHMpIGZvcm1hdHMgZGF0YWJhc2UgYWNyb3NzIGV2ZXJ5b25lIHNvCj4gPiB0aGF0IGV2ZXJ5 b25lIGNhbiBiZW5lZml0IGZyb20gaXQuCj4gCj4gWWVhaCBJIGtub3cuIEkgc3RpbGwgdGhpbmsg bGVhdmluZyB0aGUgZHJtIGZvdXJjYyB3aXRoIHRoZSBkcm0gcHJlZml4Cj4gd291bGQgYmUgZ29v ZCwgc2luY2UgdGhlcmUncyByZWFsbHkgbm8gc3RhbmRhcmQgaGVyZS4KPiAKPiA+ID4gVW5pZnlp bmcgdGhlIGZvcm1hdHMgdGhlbXNlbHZlcywgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBtZXRhZGF0 YSBpcwo+ID4gPiBpbW8gYSBuby1nbywgYW5kIHdhcyBhIHByZXR0eSBjb25zY2lvdXMgZGVjaXNp b24gd2hlbiB3ZSBpbXBsZW1lbnRlZAo+ID4gPiBkcm1fZm91cmNjIGEgZmV3IHllYXJzIGJhY2su Cj4gPiA+Cj4gPiA+ID4gSWYgd2Ugd2FudCB0byBrZWVwIHRoZSBjdXJyZW50IGxpYnJhcnkgaW4g RFJNLCB3ZSBoYXZlIHR3byBvcHRpb25zCj4gPiA+ID4gdGhlbjoKPiA+ID4gPgo+ID4gPiA+ICAg LSBTdXBwb3J0IGFsbCB0aGUgdjRsMiBmb3JtYXRzIGluIHRoZSBEUk0gbGlicmFyeSwgd2hpY2gg aXMKPiA+ID4gPiAgICAgZXNzZW50aWFsbHkgd2hhdCBJJ20gZG9pbmcgaW4gdGhlIGxhc3QgcGF0 Y2hlcy4gSG93ZXZlciwgdGhhdAo+ID4gPiA+ICAgICB3b3VsZCByZXF1aXJlIHRvIGhhdmUgdGhl IHY0bDIgZGV2ZWxvcHBlcnMgYWxzbyByZXZpZXdpbmcgc3R1ZmYKPiA+ID4gPiAgICAgdGhlcmUu IEFuZCBnaXZlbiBob3cgYnVzeSB0aGV5IGFyZSwgSSBjYW5ub3QgcmVhbGx5IHNlZSBob3cgdGhh dAo+ID4gPiA+ICAgICB3b3VsZCB3b3JrLgo+ID4gPgo+ID4gPiBXZWxsLCBpZiB3ZSBlbmQgdXAg d2l0aCBhIGNvbW1vbiBsaWJyYXJ5IHRoZW4geWVzIHdlIG5lZWQgY3Jvc3MKPiA+ID4gcmV2aWV3 LiBUaGVyZSdzIG5vIHdheSBhcm91bmQgdGhhdC4gRG9lc24ndCBtYXR0ZXIgd2hlcmUgZXhhY3Rs eSB0aGF0Cj4gPiA+IGxpYnJhcnkgaXMgaW4gdGhlIGZpbGVzeXN0ZW0gdHJlZSwgYW5kIGFkZGlu ZyBhIHNwZWNpYWwgTUFJTlRBSU5FUlMKPiA+ID4gZW50cnkgZm9yIGFueXRoaW5nIHJlbGF0ZWQg dG8gZm91cmNjIChib3RoIGRybSBhbmQgdjRsKSB0byBtYWtlIHN1cmUKPiA+ID4gdGhleSBnZXQg Y3Jvc3MtcG9zdGVkIGlzIGVhc3kuIE5vIGZpbGUgcmVuYW1pbmcgbmVlZGVkLgo+ID4KPiA+IFRo YXQgd291bGQgY3JlYXRlIHNvbWUgZ292ZXJuaW5nIGlzc3VlcyBhcyB3ZWxsLiBGb3IgZXhhbXBs ZSwgaWYgeW91Cj4gPiBldmVyIGhhdmUgYSBwYXRjaCBmcm9tIG9uZSBmb3VyY2MgYWRkaXRpb24g KHRoYXQgbWlnaHQgb3IgbWlnaHQgbm90IGJlCj4gPiBjb3ZlcmVkIGJ5IHY0bDIpLCB3aWxsIHlv dSB3YWl0IGZvciBhbnkgdjRsMiBkZXZlbG9wcGVyIHRvIHJldmlldyBpdD8KPiAKPiBOb25lIG9m IHRoaXMgaXMgZml4ZWQgYnkgY29kZSByZW5hbWluZyBvciBsb2NhdGlvbnMuIEVpdGhlciB3YXkg d2UKPiBuZWVkIHRvIGZpZ3VyZSB0aGF0IG91dC4KPiAKPiBBbmQgeWVzIHBhcnQgb2YgdGhlIHJl YXNvbnMgZm9yIG5vdCBtb3ZpbmcgdGhpcyBvdXQgb2YgZHJtIGlzIHRoYXQgSSdtCj4gbm90IGEg ZmFuIG9mIGJvdXRpcXVlIHRyZWVzIGZvciBzbWFsbCBzdHVmZi4gSWYgc2hhcmluZyBtZWFucyB3 ZSBuZWVkCj4gdG8gc3BsaXQgdGhlIGRybV9mb3VyY2MgY29kZSBhbmQgbGlicmFyeSBvdXQgb2Yg ZHJtIHRyZWVzLCBJJ20gbm90Cj4gc3VyZSB0aGF0J3MgYSBnb29kIGlkZWEuIFdlJ3JlIGFscmVh ZHkgc3VwZXIgbGliZXJhbCB3aXRoIG1lcmdpbmcKPiBhbnl0aGluZyB0aHJvdWdoIGRyaXZlciB0 cmVlcyB3aXRoIGFja3MsIGFuZCBpbnRlZ3JhdGluZyB0aGVtIHF1aWNrbHkKPiBpbnRvIGRybS1u ZXh0LiBUaGlzIHdvdWxkIHN0aWxsIGJlIHdvcmthYmxlIGlmIHY0bCBzZW5kcyByZWd1bGFyIHB1 bGwKPiByZXF1ZXN0cyB0byBkcm0tbmV4dCAoZXZlcnkgMS0yIHdlZWtzLCBsaWtlIHRoZSBvdGhl ciBiaWcgZ3B1IHRyZWVzCj4gZG8pLiBJZiB3ZSBjYW4gb25seSBzeW5jIHVwIG9uY2UgcGVyIG1l cmdlIHdpbmRvdyB3aXRoIGEgc2hhcmVkCj4gYm91dGlxdWUgdHJlZSBmb3IgZm9ybWF0cyBvbmx5 LCBsaWZlIGlzIGdvaW5nIHRvIGJlIHBhaW5mdWwuCgpUaGF0IHNob3VsZCBiZSBzb2x2ZWQgYnkg dGhlIHByb3Bvc2FsIGFib3ZlLCBtYWludGFpbmluZyB0aGUgc2hhcmVkCmxpYnJhcnkgaW4gdGhl IERSTSB0cmVlLiBXZSB3b3VsZCBuZWVkIHRvIGJlIGNhcmVmdWwgdGhlcmUsIGFuZCBpZGVhbGx5 Cm1haW50YWluIHRoYXQgaW4gYSBzZXBhcmF0ZSBicmFuY2ggdGhhdCBjb3VsZCBiZSBtZXJnZWQg aW4gYm90aCBEUk0gYW5kClY0TDIgd2l0aG91dCBoYXZpbmcgdG8gbWVyZ2UgbW9zdCBvZiB0aGUg b3RoZXIgc3Vic3lzdGVtJ3MgcGVuZGluZwpjaGFuZ2VzIGF0IHRoZSBzYW1lIHRpbWUsIGJ1dCBJ IHRoaW5rIGl0J3MgZG9hYmxlIHdpdGhvdXQgYW55IGJpZyBpc3N1ZS4KCj4gPiBJZiBpdCdzIHNo YXJlZCBjb2RlLCB0aGVuIGl0IHNob3VsZCBiZSBzaGFyZWQsIGFuZCBldmVyeSBjbGllbnQKPiA+ IGZyYW1ld29yayBwdXQgb24gYW4gZXF1YWwgZm9vdGluZy4KPiA+Cj4gPiA+ID4gICAtIERldmVs b3AgdGhlIHNhbWUgbGlicmFyeSBmcm9tIHdpdGhpbiB2NGwyLiBUaGF0IGlzIHJlYWxseSBhIHBv b3IKPiA+ID4gPiAgICAgc29sdXRpb24sIHNpbmNlIHRoZSBpbmZvcm1hdGlvbiB3b3VsZCBiZSBn cmVhdGx5IGR1cGxpY2F0ZWQKPiA+ID4gPiAgICAgYmV0d2VlbiB0aGUgdHdvLCBhbmQgaW4gdGVy bXMgb2YgbWFpbnRhaW5hbmNlLCBjb2RlLCBhbmQgYmluYXJ5Cj4gPiA+ID4gICAgIHNpemUgdGhh dCB3b3VsZCBiZSBkdXBsaWNhdGVkIHRvby4KPiA+ID4KPiA+ID4gSXQncyBlc3NlbnRpYWxseSB3 aGF0IHdlIGRlY2lkZWQgdG8gZG8gZm9yIGRybSB5ZWFycyBiYWNrLgo+ID4KPiA+IEFuZCBpdCB3 YXMgcHJvYmFibHkgdGhlIHJpZ2h0IHNvbHV0aW9uIGJhY2sgdGhlbiwgYnV0IEknbSByZWFsbHkg bm90Cj4gPiBjb252aW5jZWQgaXQncyBzdGlsbCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gdG9kYXku Cj4gPgo+ID4gPiA+IEhhdmluZyBpdCBzaGFyZWQgYWxsb3dzIHRvIGVhc2lseSBzaGFyZSwgYW5k IGRpc2NvdmVyIGZvcm1hdHMgZnJvbSB0aGUKPiA+ID4gPiBvdGhlciBzdWJzeXN0ZW0sIGFuZCB0 byBoYXZlIGEgc2luZ2xlLCB1bmlxdWUgcGxhY2Ugd2hlcmUgdGhpcyBpcwo+ID4gPiA+IGNlbnRy YWxpemVkLgo+ID4gPgo+ID4gPiBXaGF0IEkgdGhpbmsgY291bGQgd29yayBhcyBtaWRkbGUgZ3Jv dW5kOgo+ID4gPiAtIFB1dCBkcm1fZm9ybWF0IHN0dWZmIGludG8gYSBzZXBhcmF0ZSAua28KPiA+ ID4gLSBBZGQgYSBNQUlOVEFJTkVSUyBlbnRyeSB0byBtYWtlIHN1cmUgYWxsIHRoaW5ncyBmb3Vy Y2MgYXJlIGNyb3NzCj4gPiA+IHBvc3RlZCB0byBib3RoIGRybSBhbmQgdjRsIGxpc3RzLiBFYXN5 IG9uIHRoZSBkcm0gc2lkZSwgc2luY2UgaXQncyBhbGwKPiA+ID4gc2VwYXJhdGUgZmlsZXMuIE5v dCBzdXJlIGl0J3Mgc28gY29udmVuaWVudCBmb3IgdjRsIHVhcGkuCj4gPiA+IC0gQWRkIGEgY29u dmVyc2lvbiBsaWJyYXJ5IHRoYXQgdHJpZXMgdG8gYmVzdC1lZmZvcnQgbWFwIGJldHdlZW4gZHJt Cj4gPiA+IGFuZCB2NGwgZm9ybWF0cy4gT24gdGhlIGRybSBzaWRlIHRoYXQgbW9zdCBsaWtlbHkg bWVhbnMgeW91IG5lZWQKPiA+ID4gb2Zmc2V0cyBmb3IgcGxhbmVzLCBhbmQgbW9kaWZpZXJzIHRv byAoc2luY2UgdGhvc2UgYXJlIGltcGxpZWQgaW4gc29tZQo+ID4gPiB2NGwgZm91cmNjKS4gRW1w aGFzaXMgb24gImJlc3QgZWZmb3J0IiBpLmUuIG9ubHkgc3VwcG9ydCBhcyBtdWNoIGFzCj4gPiA+ IHRoZSBkcml2ZXJzIHRoYXQgdXNlIHRoaXMgbGlicmFyeSBuZWVkLgo+ID4gPiAtIEFkZCBkcm1f Zm91cmNjIGFzLW5lZWRlZCBieSB0aGVzZSBkcml2ZXJzIHRoYXQgd2FudCB0byB1c2UgYSB1bmlm aWVkCj4gPiA+IGZvcm1hdCBzcGFjZS4KPiA+ID4KPiA+ID4gRm9yY2luZyB0aGlzIHVuaWZpY2F0 aW9uIG9uIGV2ZXJ5b25lIG90b2ggaXMgaW1vIHdheSB0b28gbXVjaC4KPiA+Cj4gPiB2NGwyIGlz IHN0YXJ0aW5nIHRvIGNvbnZlcmdlIHdpdGggRFJNLCBhbmQgd2UncmUgdXNpbmcgdGhlIERSTSBB UEkKPiA+IHByZXR0eSBtdWNoIHVudG91Y2hlZCBmb3IgdGhhdCBsaWJyYXJ5LCBzbyBJJ20gbm90 IHJlYWxseSBzdXJlIGhvdwo+ID4gYW55b25lIGlzIGh1cnQgYnkgdGhhdCB1bmlmaWNhdGlvbi4K PiAKPiBJdCBtaWdodCBtYWtlIHNlbnNlIHRvIHJlZ3VsYXJseSBwdWxsIHY0bCB1cGRhdGVzIGlu dG8gZHJtLW5leHQgdGhlbgo+IGFueXdheS4gVGhhdCB3b3VsZCBhbHNvIHJlbW92ZSB0aGUgbmVl ZCB0byBoYXZlIHRoZSBmb3JtYXQgbGlicmFyeQo+IHNvbWV3aGVyZSBlbHNlLgoKQXJlIHlvdSBz YXlpbmcgaXQgc2hvdWxkIHRoZSBsaXZlIGluIFY0TDIgPyA7LSkKCi0tIApSZWdhcmRzLAoKTGF1 cmVudCBQaW5jaGFydApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWw=