From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v7 09/11] drm: uevent for connector status change Date: Mon, 20 May 2019 18:11:07 +0200 Message-ID: <20190520161107.GA21222@phenom.ffwll.local> References: <20190514110242.6f6ba4b0@eldfell.localdomain> <9b6386239ecae396fc4f5cc4467f8e76721f2c83.camel@intel.com> <20190514163602.7d252b12@eldfell.localdomain> <20190515103731.16855195@eldfell.localdomain> <20190515082449.GA17751@phenom.ffwll.local> <20190516112211.1cd5a8c6@eldfell.localdomain> <20190516122455.GA3851@phenom.ffwll.local> <20190517130824.17372663@eldfell.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id A0CDC89257 for ; Mon, 20 May 2019 16:11:30 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id l25so24632245eda.9 for ; Mon, 20 May 2019 09:11:30 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190517130824.17372663@eldfell.localdomain> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Pekka Paalanen Cc: "Ser, Simon" , "thomas.petazzoni@bootlin.com" , "maxime.ripard@bootlin.com" , Daniel Vetter , "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "paul.kocialkowski@bootlin.com" , "airlied@linux.ie" , "Vetter, Daniel" List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBNYXkgMTcsIDIwMTkgYXQgMDE6MDg6MjRQTSArMDMwMCwgUGVra2EgUGFhbGFuZW4g d3JvdGU6Cj4gT24gVGh1LCAxNiBNYXkgMjAxOSAxNDoyNDo1NSArMDIwMAo+IERhbmllbCBWZXR0 ZXIgPGRhbmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gCj4gPiBPbiBUaHUsIE1heSAxNiwgMjAxOSBh dCAxMToyMjoxMUFNICswMzAwLCBQZWtrYSBQYWFsYW5lbiB3cm90ZToKPiA+ID4gT24gV2VkLCAx NSBNYXkgMjAxOSAxMDoyNDo0OSArMDIwMAo+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3 bGwuY2g+IHdyb3RlOgo+ID4gPiAgIAo+ID4gPiA+IE9uIFdlZCwgTWF5IDE1LCAyMDE5IGF0IDEw OjM3OjMxQU0gKzAzMDAsIFBla2thIFBhYWxhbmVuIHdyb3RlOiAgCj4gPiA+ID4gPiBPbiBUdWUs IDE0IE1heSAyMDE5IDE2OjM0OjAxICswMjAwCj4gPiA+ID4gPiBEYW5pZWwgVmV0dGVyIDxkYW5p ZWwudmV0dGVyQGZmd2xsLmNoPiB3cm90ZToKPiA+ID4gPiA+ICAgICAKPiA+ID4gPiA+ID4gT24g VHVlLCBNYXkgMTQsIDIwMTkgYXQgMzozNiBQTSBQZWtrYSBQYWFsYW5lbiA8cHBhYWxhbmVuQGdt YWlsLmNvbT4gd3JvdGU6ICAgIAo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gT24gVHVlLCAx NCBNYXkgMjAxOSAxMzowMjowOSArMDIwMAo+ID4gPiA+ID4gPiA+IERhbmllbCBWZXR0ZXIgPGRh bmllbC52ZXR0ZXJAZmZ3bGwuY2g+IHdyb3RlOgo+ID4gPiA+ID4gPiA+ICAgICAgCj4gPiA+ID4g PiA+ID4gPiBPbiBUdWUsIE1heSAxNCwgMjAxOSBhdCAxMDoxOCBBTSBTZXIsIFNpbW9uIDxzaW1v bi5zZXJAaW50ZWwuY29tPiB3cm90ZTogICAgICAKPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gPiA+ID4gT24gVHVlLCAyMDE5LTA1LTE0IGF0IDExOjAyICswMzAwLCBQZWtrYSBQYWFsYW5l biB3cm90ZTogICAgICAKPiA+ID4gPiA+IAo+ID4gPiA+ID4gLi4uCj4gPiA+ID4gPiAgICAgCj4g PiA+ID4gPiA+ID4gPiA+ID4gSGkgRGFuaWVsLAo+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gPiA+ID4ganVzdCB0byBjbGFyaWZ5IHRoZSBmaXJzdCBjYXNlLCBzcGVjaWZpYyB0byBv bmUgdmVyeSBwYXJ0aWN1bGFyCj4gPiA+ID4gPiA+ID4gPiA+ID4gcHJvcGVydHk6Cj4gPiA+ID4g PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiBXaXRoIEhEQ1AsIHRoZXJlIGlzIGEgcHJv cGVydHkgdGhhdCBtYXkgY2hhbmdlIGR5bmFtaWNhbGx5IGF0IHJ1bnRpbWUKPiA+ID4gPiA+ID4g PiA+ID4gPiAodGhlIHVuZGVzaXJlZC9kZXNpcmVkL2VuYWJsZWQgdHJpc3RhdGUpLiBVc2Vyc3Bh Y2UgbXVzdCBiZSBub3RpZmllZAo+ID4gPiA+ID4gPiA+ID4gPiA+IHdoZW4gaXQgY2hhbmdlcywg SSBkbyBub3Qgd2FudCB1c2Vyc3BhY2UgaGF2ZSB0byBwb2xsIHRoYXQgcHJvcGVydHkKPiA+ID4g PiA+ID4gPiA+ID4gPiB3aXRoIGEgdGltZXIuCj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gPiA+ID4gPiBXaGVuIHRoYXQgcHJvcGVydHkgYWxvbmUgY2hhbmdlcywgYW5kIHVzZXJzcGFj ZSBpcyBwcmVwYXJlZCB0byBoYW5kbGUKPiA+ID4gPiA+ID4gPiA+ID4gPiB0aGF0IHByb3BlcnR5 IGNoYW5naW5nIGFsb25lLCBpdCBtdXN0IG5vdCB0cmlnZ2VyIGEgcmVwcm9iZSBvZiB0aGUKPiA+ ID4gPiA+ID4gPiA+ID4gPiBjb25uZWN0b3IuIFRoZXJlIGlzIG5vIHJlYXNvbiB0byByZXByb2Jl IGF0IHRoYXQgcG9pbnQgQUZBSVUuCj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ ID4gPiBIb3cgZG8geW91IGVuc3VyZSB0aGF0IHVzZXJzcGFjZSBjYW4gYXZvaWQgdHJpZ2dlcmlu ZyBhIHJlcHJvYmUgd2l0aCB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiBlcG9jaCBhcHByb2FjaCBv ciB3aXRoIGFueSBhbHRlcm5hdGUgdWV2ZW50IGRlc2lnbj8KPiA+ID4gPiA+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiA+ID4gPiA+IFdlIG5lZWQgYW4gZXZlbnQgdG8gdXNlcnNwYWNlIHRoYXQgaW5k aWNhdGVzIHRoYXQgcmUtcmVhZGluZyB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gPiBwcm9wZXJ0aWVz IGlzIGVub3VnaCBhbmQgcmVwcm9iZSBvZiB0aGUgY29ubmVjdG9yIGlzIG5vdCBuZWNlc3Nhcnku Cj4gPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBpcyBjb21wbGVtZW50YXJ5IHRvIGluZGljYXRpbmcg dG8gdXNlcnNwYWNlIHRoYXQgb25seSBzb21lCj4gPiA+ID4gPiA+ID4gPiA+ID4gY29ubmVjdG9y cyBuZWVkIHRvIGJlIHJlcHJvYmVkIGluc3RlYWQgb2YgZXZlcnl0aGluZy4gICAgICAKPiA+ID4g PiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gQ2FuJ3QgeW91IHVzZSB0aGUgUFJPUEVSVFkg aGludD8gSWYgUFJPUEVSVFkgaXMgdGhlIEhEQ1Agb25lLCBza2lwIHRoZQo+ID4gPiA+ID4gPiA+ ID4gPiByZXByb2JpbmcuIFdvdWxkIHRoYXQgd29yaz8gICAgICAKPiA+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiA+IEhpLAo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4geWVzLCB0aGF0IHdvdWxk IHdvcmssIGlmIGl0IHdhcyBhY2NlcHRhYmxlIHRvIERSTSB1cHN0cmVhbS4gVGhlIHJlcGxpZXMK PiA+ID4gPiA+ID4gPiB0byBQYXVsIHNlZW1lZCB0byBiZSBnb2luZyBzb3V0aCBzbyBmYXN0IHRo YXQgSSB0aG91Z2h0IHdlIHdvdWxkbid0IGdldAo+ID4gPiA+ID4gPiA+IGFueSBuZXcgdWV2ZW50 IGZpZWxkcyBpbiBmYXZvdXIgb2YgImVwb2NoIGNvdW50ZXJzIi4KPiA+ID4gPiA+ID4gPiAgICAg IAo+ID4gPiA+ID4gPiA+ID4gWWVzIHRoYXQncyB0aGUgaWRlYSwgZGVwZW5kaW5nIHVwb24gd2hp Y2ggcHJvcGVydHkgeW91IGdldCB5b3Uga25vdwo+ID4gPiA+ID4gPiA+ID4gaXQncyBhIHNpbmsg Y2hhbmdlIChuZWVkcyBmdWxsIHJlcHJvYmUpIG9yIHNvbWV0aGluZyBlbHNlIGxpa2UgaGRjcAo+ ID4gPiA+ID4gPiA+ID4gc3RhdGUgbWFjaGluZXJ5IHVwZGF0ZS4gICAgICAKPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+IFJpZ2h0Lgo+ID4gPiA+ID4gPiA+ICAgICAgCj4gPiA+ID4gPiA+ID4g PiBXcnQgYXZvaWRpbmcgdGhlIGZ1bGwgcmVwcm9iZSBmb3Igc2luayBjaGFuZ2VzOiBJIHRoaW5r IHdlIHNob3VsZAo+ID4gPiA+ID4gPiA+ID4gaW5kZWVkIGRlY291cGxlIHRoYXQgZnJvbSB0aGUg cGVyLWNvbm5lY3RvciBldmVudCBmb3Igc2luayBjaGFuZ2VzLgo+ID4gPiA+ID4gPiA+ID4gVGhh dCBhbG9uZyBpcyBhIGdvb2Qgd2luIGFscmVhZHksIHNpbmNlIHlvdSBrbm93IGZvciB3aGljaCBj b25uZWN0b3IKPiA+ID4gPiA+ID4gPiA+IHlvdSBuZWVkIHRvIGNhbGwgZHJtR2V0Q29ubmVjdG9y ICh3aGljaCBmb3JjZXMgdGhlIHJlcHJvYmUpLiBJdCB3b3VsZAo+ID4gPiA+ID4gPiA+ID4gYmUg bmljZSB0byBvbmx5IGNhbGwgZHJtR2V0Q29ubmVjdG9yQ3VycmVudCAoYXZvaWRzIHRoZSByZXBy b2JlKSwgYnV0Cj4gPiA+ID4gPiA+ID4gPiBoaXN0b3JpY2FsbHkgc3BlYWtpbmcgZXZlcnkgdGlt ZSB3ZSB0cmllZCB0byByZWx5IG9uIHRoaXMgd2UgZW5kZWQgdXAKPiA+ID4gPiA+ID4gPiA+IHJl Z3JldHRpbmcgdGhpbmdzLiAgICAgIAo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gV2hhdCBj aGFuZ2VkPyBUaGlzIHNvdW5kcyB2ZXJ5IG11Y2ggd2hhdCBQYXVsIHN1Z2dlc3RlZC4gTG9va2lu ZyBhdCBpdAo+ID4gPiA+ID4gPiA+IGZyb20gdXNlcnNwYWNlIHNpZGU6ICAgICAgCj4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiBUaGlzIHNvdW5kcyBzb2xpZCwgc29tZSByZWZpbmVtZW50cyBiZWxv dzoKPiA+ID4gPiA+ID4gICAgIAo+ID4gPiA+ID4gPiA+IEhPVFBMVUc9MSBDT05ORUNUT1I9eHgg UFJPUEVSVFk9eXkKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IC0gSWYgeXkgaXMgIkNvbnRl bnQgUHJvdGVjdGlvbiIsIG5vIG5lZWQgdG8gZHJtTW9kZUdldENvbm5lY3RvcigpLCBqdXN0Cj4g PiA+ID4gPiA+ID4gICByZS1nZXQgdGhlIGNvbm5lY3RvciBwcm9wZXJ0aWVzLgo+ID4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ID4gLSBLZXJuZWwgcHJvYmFibHkgc2hvdWxkbid0IGJvdGhlciBzZW5k aW5nIHRoaXMgZm9yIHByb3BlcnRpZXMgd2hlcmUKPiA+ID4gPiA+ID4gPiAgIHJlLXByb2JlIGNv dWxkIGJlIG5lY2Vzc2FyeSwgYW5kIHNlbmQgdGhlIGJlbG93IGluc3RlYWQuICAgICAgCj4gPiA+ ID4gPiA+IAo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gSSB0aGluayB3ZSBzaG91bGQgYXNzZXJ0 IHRoYXQgdGhlIGtlcm5lbCBjYW4gZ2V0IHRoZSBuZXcgcHJvcGVydHkKPiA+ID4gPiA+ID4gdmFs dWVzIHVzaW5nIGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50IGZvciB0aGlzIGNhc2UsIGkuZS4g dGhlIGtlcm5lbAo+ID4gPiA+ID4gPiBkb2VzIG5vdCBleHBlY3QgYSBmdWxsIHJlcHJvYmUuIEku ZS4gdXBncmFkZSB5b3VyIGlkZWEgZnJvbSAic2hvdWxkIgo+ID4gPiA+ID4gPiB0byAibXVzdCIg ICAgCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEhpIERhbmllbCwKPiA+ID4gPiA+IAo+ID4gPiA+ID4g b2ssIHRoYXQncyBnb29kLgo+ID4gPiA+ID4gICAgIAo+ID4gPiA+ID4gPiBGdXJ0aGVybW9yZSBk aWZmZXJlbnQgcHJvcGVydHkgY2FuIGluZGljYXRlIGRpZmZlcmVudCBraW5kIG9mIHVwZGF0ZXMs Cj4gPiA+ID4gPiA+IGUuZy4gaGRjcCB2cyBnZW5lcmFsIHNpbmsgY2hhbmdlIHZzLiB3aGF0ZXZl ciBlbHNlIG1pZ2h0IGNvbWUgaW4gdGhlCj4gPiA+ID4gPiA+IGZ1dHVyZS4gICAgCj4gPiA+ID4g PiAKPiA+ID4gPiA+IFdoYXQgZG8geW91IG1lYW4gYnkgZGlmZmVyZW50IGtpbmRzIG9mIHVwZGF0 ZXM/ICAgIAo+ID4gPiA+IAo+ID4gPiA+IEF0bSB3ZSdyZSBkaXNjdXNzaW5nIHR3bzoKPiA+ID4g PiAKPiA+ID4gPiAtICJDb250ZW50IFByb3RlY3Rpb24iCj4gPiA+ID4gLSAic2luayBjaGFuZ2Vk LCBidXQgeW91IGRvbid0IG5lZWQgdG8gcmVwcm9iZSIgdGhpcyB3b3VsZCBiZSBxdWl0ZSBhIGJp dAo+ID4gPiA+ICAgYSBjYXRjaCBhbGwgZnJvbSB0aGUgb3V0cHV0IGRldGVjdGlvbi4gUGF1bCB0 aGlua3MgZGlmZmVyZW50bHksIGJ1dCBJJ20KPiA+ID4gPiAgIG5vdCBzb2xkIG9uIHNwbGl0dGlu ZyB0aGlzIHVwIG1vcmUsIGF0IGxlYXN0IG5vdCByaWdodCBub3cuIFRoaXMgd291bGQKPiA+ID4g PiAgIGluY2x1ZGUgY29ubmVjdG9yIHN0YXR1cyAoYW5kIHJlbGF0ZWQgdGhpbmdzIHJldHVybmVk IGJ5IGRybUdldENvbm5lY3Rvcgo+ID4gPiA+ICAgd2hpY2ggY3VycmVudGx5IGFyZW4ndCBhIHBy b3BlcnR5KSwgRURJRCwgdGhlIG1zdCBwYXRoIGlkLCB0aGF0IGtpbmQgb2YKPiA+ID4gPiAgIHN0 dWZmLgo+ID4gPiA+IAo+ID4gPiA+IEltZSBvbmNlIHdlIGhhdmUgMiwgdGhlcmUncyBtb3JlIGJv dW5kIHRvIGNvbWUgOi0pICAKPiA+ID4gCj4gPiA+IEhpIERhbmllbCwKPiA+ID4gCj4gPiA+IEkg ZG9uJ3QgdW5kZXJzdGFuZCB3aGF0IHRoZSAic2luayBjaGFuZ2VkIiB0aGluZyBjb3VsZCBiZSwg YnV0IHN1cmUsCj4gPiA+IHRoZXJlIGNhbiBiZSBtb3JlLiAgCj4gPiAKPiA+IFNvIGlmIHlvdSBo YXZlIGEgcmVwZWF0ZXIgKGhkbWkgb3IgZHApIGFuZCB5b3UgY2hhbmdlIHRoZSB0aGluZyB5b3Ug cGx1Zwo+ID4gaW50byB0aGF0LCB0aGVuIG9uIHRoZSBjb21wdXRlciB5b3UgZG9uJ3QgZ2V0IGEg ZnVsbCBob3RwbHVnLCBiZWNhdXNlIHRoZQo+ID4gcmVwZWF0ZXIgd2FzIGFsd2F5cyBjb25uZWN0 ZWQuIEluc3RlYWQgeW91IGdldCBhIHNob3J0IHB1bHNlIGhvdHBsdWcsCj4gPiBpbmRpY2F0aW5n IHRoYXQgc29tZXRoaW5nIHdpdGggdGhlIHNpbmsgaGFzIGNoYW5nZWQuIFRoaXMgY291bGQgYmUg YQo+ID4gc2xpZ2h0bHkgYWRqdXN0ZWQgRURJRCAoZS5nLiBkaWZmZXJlbnQgZWxkIGluIHRoZSBh dWRpbyBzZWN0aW9uKSwgb3IKPiA+IHNvbWV0aGluZyBlbHNlLiBUaGF0J3Mgd2hhdCBJIG1lYW4g d2l0aCAic2luayBjaGFuZ2VkIi4gU2ltaWxhciB0aGluZyBjYW4KPiA+IGhhcHBlbiBpZiB5b3Ug dW5wbHVnIGFuZCB0aGVuIHBsdWcgaW4gc29tZXRoaW5nIGVsc2UgcmVhbCBxdWljayAodXN1YWxs eQo+ID4gb3ZlciBzdXNwZW5kL3Jlc3VtZSksIHdoZXJlIGNvbm5lY3Rvci0+c3RhdHVzIHN0YXlz IHRoZSBzYW1lLCBidXQgdGhlCj4gPiBhY3R1YWwgdGhpbmcgcGx1Z2dlZCBpbiBpcyBkaWZmZXJl bnQuIEkgdGhpbmsgZm9yIGhkbWkgdGhpcyBpcyBqdXN0IHRoZQo+ID4gRURJRCwgYnV0IHdlIGRv IHBhcnNlIGEgYnVuY2ggb2YgdGhpbmdzIG91dCBvZiB0aGUgRURJRCB0aGF0IGhhdmUgZnVydGhl cgo+ID4gZWZmZWN0cyAoY29sb3Igc3BhY2UsIG1heCBjbG9jaykuIFdpdGggRFAgdGhlcmUncyBh bHNvIGRwIGF1eCBzdHVmZiwgZS5nLgo+ID4gaWYgeW91IHN3aXRjaCBmcm9tIGEgMiBsYW5lIHRv IGEgNCBsYW5lIGNhYmxlIHRoZW4gd2l0aCBzYW1lIHNjcmVlbiBtb3JlCj4gPiBtb2RlcyBjYW4g d29yay4KPiA+IAo+ID4gQ2xlYXJlcj8KPiA+IAo+ID4gSSBndWVzcyBmb3IgdGhlIGRvY3VtZW50 YXRpb24gZm9yIHRoaXMgbmV3IHVhcGkgd2UgbmVlZCB0byBtYWtlIGFuCj4gPiBleGhhdXN0aXZl IGxpc3Qgb2YgYWxsIHRoZSB0aGluZ3MgdGhhdCBtaWdodCBoYXZlIGNoYW5nZWQgZm9yIGEgInNp bmsKPiA+IGNoYW5nZWQiIGV2ZW50LCB3aGF0ZXZlciB3ZSBhY3R1YWxseSBhZ3JlZSBvbiB3aGF0 IHRoYXQgc2hvdWxkIGxvb2sgbGlrZS4KPiA+IE9yIHRoZSBQUk9QRVJUWT0wIGZhbGxiYWNrIHlv dSBtZW50aW9uIGJlbG93IGFzIGEgZmFsbGJhY2sgaWRlYS4KPiAKPiBIaSBEYW5pZWwsCj4gCj4g dG8gbWUgYWxsIHRoYXQgc291bmRzIGxpa2UgdXNlcnNwYWNlIHdvdWxkIGJldHRlciBkbyBhIHBy b2JlIGFuZCBzdGFydAo+IGZyb20gc2NyYXRjaCB3aXRoIHRoYXQgb25lIGNvbm5lY3Rvci4gVGhl cmVmb3JlIGl0IHdvdWxkIGZhbGwgaW50byB0aGUKPiAnSE9UUExVRz0xIENPTk5FQ1RPUj14eCcg Y2FzZSwgbm8gUFJPUEVSVFkuCj4gCj4gSSBzdXBwb3NlIEknbSBtaXNzaW5nIHNvbWV0aGluZz8K CkRvaW5nIGEgZnVsbCBwcm9iZSBpcyBoZWxsYSBleHBlbnNpdmUuIEF0bSB5b3UgYWx3YXlzIGhh dmUgdG8gZG8gdGhpcywgYnV0CndlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGJyYXZlIG5ldyBmdXR1 cmUgd2hlcmUgdGhlIGtlcm5lbCBzdWNrcyBsZXNzLCBhbmQKdGhlIGtlcm5lbCB3b3VsZCBoYXZl IGRvbmUgdGhlIGV4cGVuc2l2ZSBwcm9iaW5nIGZvciB5b3UgYWxyZWFkeS4KCj4gQnV0IGFsc28g SSBkb24ndCBtaW5kLCBJIGhhdmUgYWx3YXlzIGV4cGVjdGVkIHRoZXJlIG1pZ2h0IGJlIG1vcmUK PiBwcm9wZXJ0aWVzIHdob3NlIGNoYW5nZSBkb2VzIG5vdCByZXF1aXJlIGEgcHJvYmUuCj4gCj4g U28sIHRoZSBrZXJuZWwgZG9lcyBzb21ldGltZXMgZG8gdGhlIHByb2JlIG9uIGl0cyBvd24gYXMg d2VsbCwgcmlnaHQ/Cj4gSXMgdGhhdCBjb21wbGV0ZWx5IGludmlzaWJsZSB0byB1c2Vyc3BhY2Us IG9yIGNvdWxkIGl0IHN0YWxsIHNvbWUKPiB1c2Vyc3BhY2Ugb3BlcmF0aW9ucyB0aGF0IGFyZSBu b3QgYSBwcm9iZSBvZiB0aGUgc2FtZSBjb25uZWN0b3I/CgpNYWpvciBzdGFsbCBiZWNhdXNlIHRo ZSBsb2NraW5nIGRlc2lnbiBpc24ndCBwcmV0dHkuIElmIHRoZSBrZXJuZWwgaXMKcHJvYmluZyBy aWdodCBub3cgZXZlbiB5b3VyIEdldENvbm5lY3RvckN1cnJlbnQgb3IgR2V0UHJvcGVydGllcyAo b24gYQpjb25uZWN0b3IpIHdpbGwgc3RhbGwgZm9yIHdoYXRldmVyIGxvbmcgaXQgdGFrZXMgdG8g cmVhZCB0aGUgRURJRC4gT3IKd2hhdGV2ZXIgZWxzZSB0aGUga2VybmVsIGlzIGRvaW5nIGluIHRo ZSBwcm9iZSBwYXRocyByaWdodCBub3cuIFdlIGNvdWxkCnByb2JhYmx5IGltcHJvdmUgdGhpcywg YW5kIG1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IEdldENvbm5lY3RvckN1cnJlbnQgYW5kCkdldFBy b3BlcnRpZXMgc3RvcCBzdWNraW5nLiBCdXQgbmVlZHMgc29tZSBzZXJpb3VzIGxvY2tpbmctZnUg dG8gbWFrZSB0aGF0CndvcmsuCgpBc2lkZTogSnVzdCByZWFsaXplZCB0aGlzIGlzIGFub3RoZXIg aW1wb3J0YW50IHJlYXNvbiB3aHkgd2UgbmVlZCB0byBiYXRjaAp1cCBwcm9wZXJ0eSB1cGRhdGVz LiBJZiB3ZSBkb24ndCwgdGhlbiB1c2Vyc3BhY2Ugd2lsbCBzaW1wbHkgZ2V0IGhlbGQgdXAKdW50 aWwgdGhlIGtlcm5lbCBpcyBkb25lIGFueXdheS4KCj4gSSByZWFsbHkgdGhpbmsgdGhlIGRlc2ln biBvZiB0aGUgdUFQSSBtdXN0IHN0YXJ0IHdpdGggaG93IHVzZXJzcGFjZSBpcwo+IGV4cGVjdGVk IHRvIHJlYWN0IHRvIHRoZSBldmVudHMuIEZvciB0aGF0IHRoZXJlIGFyZSB0aHJlZSBjYXNlczoK PiByZS1kZWlzY292ZXIgYW5kIHByb2JlIGV2ZXJ5dGluZywgcmUtcHJvYmUgb25lIGNvbm5lY3Rv ciwgcmUtcmVhZAo+IHByb3BlcnRpZXMgb2Ygb25lIGNvbm5lY3RvciB3aXRob3V0IHByb2JlLiBV c2Vyc3BhY2UgY2FuIHRoZW4gZGlzY292ZXIKPiB3aGF0IGV4YWN0bHkgY2hhbmdlZCwganVzdCBs aWtlIGl0IGFscmVhZHkgZG9lcy4KCll1cCwgSSB0aGluayBvbiB0aGlzIHdlIGFsbCBhZ3JlZS4K Cj4gPiA+ID4gPiBCdHcuIEkgc3RhcnRlZCB0aGlua2luZywgbWF5YmUgd2Ugc2hvdWxkIGNvbXBs ZXRlbHkgbGVhdmUgb3V0IHRoZSAiSWYKPiA+ID4gPiA+IHl5IGlzICJDb250ZW50IFByb3RlY3Rp b24iIiBhbmQgcmVxdWlyZSB0aGUga2VybmVsIHRvIGd1YXJhbnRlZSwgdGhhdAo+ID4gPiA+ID4g aWYgUFJPUEVSVFkgaXMgc2V0LCB0aGVuIGRybU1vZGVHZXRDb25uZWN0b3IoKSAocHJvYmluZykg bXVzdCBub3QgYmUKPiA+ID4gPiA+IG5lY2Vzc2FyeSBiYXNlZCBvbiB0aGlzIGV2ZW50IGFsb25l Lgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBXcml0aW5nIGl0IGRvd24gYWdhaW46Cj4gPiA+ID4gPiAK PiA+ID4gPiA+IEhPVFBMVUc9MSBDT05ORUNUT1I9eHggUFJPUEVSVFk9eXkKPiA+ID4gPiA+IAo+ ID4gPiA+ID4gLSB5eSBkZW5vdGVzIHdoaWNoIGNvbm5lY3RvciB4eCBwcm9wZXJ0eSBjaGFuZ2Vk LiAgICAKPiA+ID4gPiAKPiA+ID4gPiBNYXliZSB5eSBkZW5vdGVzIHdoaWNoIGdyb3VwIG9mIHBy b3BlcnRpZXMgY2hhbmdlZCwgYW5kIHBhcnQgb2YgdGhlIHVhcGkKPiA+ID4gPiBpcyBwaWNraW5n IHRoZSBjYW5vbmljYWwgb25lLiBFLmcuIGNvbnRlbnQgcHJvdGVjdGlvbiBtaWdodCBhbHNvIGdh aW4gbW9yZQo+ID4gPiA+IHByb3BlcnRpZXMgaW4gdGhlIGZ1dHVyZSAodGhlcmUncyBwYXRjaGVz LCBidXQgdGhlIHVzZXJzcGFjZSB3b24ndCBiZSBvcGVuCj4gPiA+ID4gc291cmNlZCkuIEFuZCBm b3IgdGhhdCBjYXNlIEkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkIHRoZW4gc2VuZCBhbiBldmVuIGZv cgo+ID4gPiA+IGV2ZXJ5IHNpbmdsZSBpbmRpdmlkdWFsIHByb3BlcnR5LCBidXQganVzdCBmb3Ig dGhlIGxlYWQgcHJvcGVydHkuCj4gPiA+ID4gCj4gPiA+ID4gTWF5YmUgd2Ugc2hvdWxkIGNoYW5n ZSBpdCB0byBVUERBVEVfVFlQRT08c29tZS11bmlxdWUtc3RyaW5nPiwgYnV0IGl0IGZlbHQKPiA+ ID4gPiBiZXR0ZXIgdG8gdXNlIHRoZSBwcm9wZXJ0eSBpZCB3ZSBhbHJlYWR5IGhhdmUgZm9yIHRo aXMuICAKPiA+ID4gCj4gPiA+IEluZGVlZCwgaXQgaXMgbm90IHJlYWxseSBuZWNlc3NhcnkgdG8g aWRlbnRpZnkgdGhlIGV4YWN0IHByb3BlcnR5Lgo+ID4gPiAKPiA+ID4gV2UgY291bGQgZXZlbiBq dXN0IHVzZSBQUk9QRVJUWT0wIHRvIGluZGljYXRlICJzb21ldGhpbmcgbWF5IGhhdmUKPiA+ID4g Y2hhbmdlZCwgeW91IHNob3VsZCByZS1nZXQgdGhlIHByb3BlcnRpZXMsIGJ1dCBubyBuZWVkIHRv IHByb2JlIEkKPiA+ID4gcHJvbWlzZSIuCj4gPiA+IAo+ID4gPiBPciBsaWtlIHlvdSBzYWlkLCB3 aGF0ZXZlci4gSSBkb24ndCByZWFsbHkgY2FyZSBhcyBsb25nIGFzIHRoZQo+ID4gPiBzZW1hbnRp Y3MgYXJlIHRoZSBzYW1lLgo+ID4gPiAgIAo+ID4gPiA+ID4gLSBVc2Vyc3BhY2UgZG9lcyBub3Qg bmVlZCB0byBkbyBkcm1Nb2RlR2V0Q29ubmVjdG9yKCksIGl0IG9ubHkgbmVlZHMgdG8KPiA+ID4g PiA+ICAgZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoKSBvbiB0aGUgY29ubmVjdG9yIHRvIHJl Y2VpdmUgdGhlIG5ldwo+ID4gPiA+ID4gICB1cGRhdGVkIHByb3BlcnR5IHZhbHVlcy4gICAgCj4g PiA+ID4gCj4gPiA+ID4gZHJtTW9kZUdldENvbm5lY3RvcihDdXJyZW50KSBhbHNvIHN1cHBsaWVz IGFsbCB0aGUgcHJvcGVydGllcyBhbHJlYWR5Lgo+ID4gPiA+IFRoaXMgaXMgc3BlY2lhbCB3aXRo IGNvbm5lY3RvcnMsIHNpbmNlIHRoZSBwcmVkYXRlIHRoZSAicHJvcGVydGllcyBvbgo+ID4gPiA+ IGV2ZXJ5dGhpbmciIGRlc2lnbi4gSSdkIGp1c3QgbWVudGlvbiB0aGlzIGZ1bmN0aW9uIGhlcmUs IGFuZCBpZ25vcmUKPiA+ID4gPiBkcm1Nb2RlT2JqZWN0R2V0UHJvcGVydGllcy4gIAo+ID4gPiAK PiA+ID4gVG8gYXZvaWQgY29uZnVzaW9uLCBpdCB3b3VsZCBiZSBiZXN0IHRvIG1lbnRpb24gYWxs IHRocmVlIGZ1bmN0aW9ucwo+ID4gPiB0aGVuLiBJdCBpcyB2ZXJ5IGVhc3kgdG8gZm9yZ2V0IGFi b3V0IGxlZ2FjeSB1QVBJIGxpa2UgcHJvcGVydGllcwo+ID4gPiB0aHJvdWdoIEdldENvbm5lY3Rv ci4KPiA+ID4gICAKPiA+ID4gPiA+IC0gS2VybmVsIG11c3Qgbm90IHNlbmQgdGhpcyBldmVudCBm b3IgY2hhbmdlcyB0aGF0IG1heSByZXF1aXJlIHByb2JpbmcKPiA+ID4gPiA+ICAgZm9yIGNvcnJl Y3QgcmVzdWx0cywgZXhjZXB0aW9uYWwgY29uZGl0aW9ucyAoYnVnZ3kgaGFyZHdhcmUsIGV0Yy4p Cj4gPiA+ID4gPiAgIGluY2x1ZGVkLiBJbnN0ZWFkLCB0aGUga2VybmVsIG11c3Qgc2VuZCBvbmUg b2YgdGhlIGJlbG93IGV2ZW50cy4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gSXMgdGhlcmUgYWN0dWFs bHkgYW55dGhpbmcgaW50ZXJlc3RpbmcgdGhhdAo+ID4gPiA+ID4gZHJtTW9kZUdldENvbm5lY3Rv ckN1cnJlbnQoKSBjb3VsZCBndWFyYW50ZWVkIGNvcnJlY3RseSByZXR1cm4gdGhhdCBpcwo+ID4g PiA+ID4gbm90IGEgcHJvcGVydHkgYWxyZWFkeT8gSSdkIHByb2JhYmx5IGxlYXZlIHRoaXMgY29u c2lkZXJhdGlvbiBvdXQKPiA+ID4gPiA+IGNvbXBsZXRlbHksIGFuZCBqdXN0IHNheSBkbyBvbmUg b2YgdGhlIG5lZWRzLXByb2JpbmcgZXZlbnRzIGlmIGFueXRoaW5nCj4gPiA+ID4gPiB0aGVyZSBj aGFuZ2VkLiAgICAKPiA+ID4gPiAKPiA+ID4gPiBUaGF0J3Mgd2h5IEknbSBzdWdnZXN0aW5nIHRo ZSBQUk9QRVJUWT08ZXBvY2hfcHJvcF9pZD4gd291bGQgaW5kaWNhdGUgYWxsCj4gPiA+ID4gc2lu ayByZWxhdGVkIHN0dWZmLCBpbmNsdWRpbmcgdGhlIG5vdC1wcm9wZXJwZXJ0eS1maWVkIHN0dWZm IGlzIHVwZGF0ZWQsCj4gPiA+ID4gYW5kIHdpbGwgYmUgcmVwb3J0ZWQgY29ycmVjdGx5IGJ5IEdl dENvbm5lY3RvckN1cnJlbnQuICAKPiA+ID4gCj4gPiA+IEp1c3QgYmVjYXVzZSBHZXRDb25uZWN0 b3JDdXJyZW50IHJldHVybnMgdGhlIHNhbWUgcHJvcGVydGllcyBhcwo+ID4gPiBkcm1Nb2RlT2Jq ZWN0R2V0UHJvcGVydGllcz8gT2sgdGhlbi4gUGVyc29uYWxseSBJJ20gcXVpdGUgZmlybWx5IGlu IHRoZQo+ID4gPiBsYW5kIHdoZXJlIGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzIGV4aXN0cywg c28gZG9uJ3QgcmVhbGx5IGNhcmUKPiA+ID4gYWJvdXQgdGhlIGxlZ2FjeSBzdHVmZi4gIAo+ID4g Cj4gPiBTbyBmcm9tIGEgcXVpY2sgc2tpbW1pbmcgR2V0Q29ubmVjdG9yQ3VycmVudCA9PSBHZXRQ cm9wZXJ0aWVzLCBleGNlcHQgeW91Cj4gPiBkb24ndCBnZXQgdGhlIG5vbi1wcm9wZXJ0aWZpZWQg c3R1ZmYgbGlrZSBtb2RlIGxpc3QsIC0+c3RhdHVzLCBhbmQgYSBmZXcKPiA+IG90aGVyIHRoaW5n cyB3ZSBwYXJzZSBvdXQgZnJvbSB2YXJpb3VzIHNvdXJjZXMuIFNvIGZvciBjb25uZWN0b3JzIHlv dSBuZWVkCj4gPiB0byB1c2UgR2V0Q29ubmVjdG9yL0N1cnJlbnQgYW55d2F5IEkgdGhpbmssIGlm IHlvdSByZWx5IG9uIEdldFByb3BlcnRpZXMKPiA+IG9ubHksIHlvdSdyZSBtaXNzaW5nIHN0dWZm Lgo+IAo+IFRoYXQgd2FzIHBhcnQgb2YgbXkgcXVlc3Rpb246IHRoZSBzdHVmZiBJIHdvdWxkIGJl IG1pc3NpbmcsIGRvZXMgaXQKPiBtYXR0ZXI/Cj4gCj4gTW9zdCBvZiB0aGUgc3R1ZmYgSSB3b3Vs ZCBiZSBtaXNzaW5nIGFyZSB0aGluZ3MgdGhhdCByZXF1aXJlIGEgcHJvYmUgdG8KPiBiZSB1cC10 by1kYXRlLCB3aGljaCBtZWFucyBJIHdpbGwgbm90IGJlIG1pc3NpbmcgdGhlbSwgYmVjYXVzZSBJ IHdpbGwKPiBiZSBjYWxsaW5nIGRybU1vZGVHZXRDb25uZWN0b3IgaW5zdGVhZCAoYW5kIG5vdCBH ZXRDb25uZWN0b3JDdXJyZW50KSwKPiBiZWNhdXNlIHRoZSBrZXJuZWwgZHJpdmVyIHNlbnQgYW4g dWV2ZW50IHRvIHRlbGwgbWUgdG8gZG8gZXhhY3RseSB0aGF0LgoKWWVzIGN1cnJlbnRseSB0aGF0 J3MgdHJ1ZSwgYmVjYXVzZSB0aGUga2VybmVsIHN1Y2tzLiBCdXQgaXQgd291bGQgYmUgbmljZQpp ZiB3ZSBjb3VsZCBkbyB0aGUgZXhwZW5zaXZlIHByb2JpbmcgYWxsIHVwZnJvbnQsIGZvciBtb3N0 IGNvbm5lY3RvcnMsIGFuZAooYXQgbGVhc3QgZXZlbnR1YWxseSkgYmxvY2sgdXNlcnNwYWNlJ3Mg dWV2ZW50IGhhbmRsZXIgYSBiaXQgbGVzcy4KCj4gSXMgdGhlcmUgYW55dGhpbmcgaW4gdGhlIHNl dCBvZiBjb25uZWN0b3IgcGFyYW1ldGVycyB3aGljaCBhKSBkbyBub3QKPiByZXF1aXJlIGEgcHJv YmUgdG8gYmUgdXAtdG8tZGF0ZSwgYW5kIGIpIGFyZSBub3QgYWN0dWFsIHByb3BlcnRpZXMgdG9v PwoKTm90IHlldC4gSSdkIGxpa2UgdG8gbWFrZSB0aGUga2VybmVsIHN1Y2sgbGVzcyB0aG91Z2gg KGFuZCBhdCBsZWFzdCBmb3IKZHAvaGRtaSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyB0aGF0IHdp dGggZmV3IGNoYW5nZXMpLgoKPiBJZiB0aGVyZSBhcmUsIHdlIGhhdmUgdHdvIG9wdGlvbnM6IGNv bXBsaWNhdGUgdXNlcnNwYWNlIHRvIHVzZSBhIHRoaXJkCj4gZnVuY3Rpb24gdG8gZ2V0IHNvbWUg Yml0cyAoZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQpLCBvciBtYWtlIHRoZQo+IGtlcm5lbCBk cml2ZXIganVzdCBzZW5kIHRoZSB1ZXZlbnQgdGhhdCBtYWtlcyB1c2Vyc3BhY2UgcHJvYmUgYW55 d2F5LgoKU2VlIGFib3ZlLCBJIHdhbnQgdG8gZ2V0IHRoZSBleHBlbnNpdmUgcHJvYmUgc3R1ZmYg b3V0IG9mIHRoZSB1ZXZlbiBhcwptdWNoIGFzIHBvc3NpYmxlLiBSZWFkaW5nIGFuIEVESUQgdXN1 YWxseSBtZWFucyB5b3UgbWlzcyBhIGZyYW1lICh+MjBtcwpmb3IgeW91ciBhdmVyYWdlIGhkbWkg ZWRpZCwgY2FuIGJlIGEgbG90IG1vcmUpLiBFeGNlcHQgaWYgeW91IGJvdGhlciB3aXRoCnRocmVh ZCB5b3VyIGNvbXBvc2l0b3IsIGFuZCB0aGVuIHdoeSBkb2VzIHRoZSBrZXJuZWwgc3VjayB0aGF0 IG11Y2ggOi0vCgo+ID4gQWdyZWVkIHRoYXQgd2UgbmVlZCB0byBzcGVsbCB0aGlzIGFsbCBvdXQu Cj4gPiAKPiA+ID4gPiA+ID4gPiBIT1RQTFVHPTEgQ09OTkVDVE9SPXh4Cj4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiAtIE5lZWRzIHRvIGRybU1vZGVHZXRDb25uZWN0b3IoKSBvbiB0aGUgb25l IGNvbm5lY3Rvciwgbm8gbmVlZCB0byBwcm9iZQo+ID4gPiA+ID4gPiA+ICAgb3RoZXJzLiBJbXBs aWVzIHRoYXQgb25lIG5lZWRzIHRvIHJlLWdldCB0aGUgY29ubmVjdG9yIHByb3BlcnRpZXMgYXMK PiA+ID4gPiA+ID4gPiAgIHdlbGwuICAgICAgCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBTb3Vu ZHMgZ29vZC4KPiA+ID4gPiA+ID4gICAgIAo+ID4gPiA+ID4gPiA+IEhPVFBMVUc9MQo+ID4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+ID4gLSBOZWVkIHRvIGRvIGRybU0gb2RlR2V0UmVzb3VjZXMoKSB0 byBkaXNjb3ZlciBuZXcvZGlzYXBwZWFyZWQKPiA+ID4gPiA+ID4gPiAgIGNvbm5lY3RvcnMsIGFu ZCBuZWVkIHRvIGRybU1vZGVHZXRDb25uZWN0b3IgdG8gcmUtcHJvYmUgZXZlcnkKPiA+ID4gPiA+ ID4gPiAgIGNvbm5lY3Rvci4gKEFzIGFsd2F5cy4pICAgICAgCj4gCj4gLi4uCj4gCj4gPiA+ID4g PiA+ID4gLS0tLS0tLS0KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IFdoZW4gZGlzY3Vzc2lu ZyB0aGlzIGluIElSQywgSSBoYWQgdGhlIGNvbmNlcm4gYWJvdXQgaG93IHVldmVudHMgYXJlCj4g PiA+ID4gPiA+ID4gZGVsaXZlcmVkIGluIHVzZXJzcGFjZS4gSXMgdGhlcmUgYSBwb3NzaWJpbGl0 eSB0aGF0IHRoZXkgbWlnaHQgYmUKPiA+ID4gPiA+ID4gPiBvdmVyd3JpdHRlbiwgY29udGFpbiBz dGFsZSBhdHRyaWJ1dGVzLCBvciBnZXQgc3F1YXNoZWQgdG9nZXRoZXI/Cj4gPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gPiBQYXJ0aWN1bGFybHkgaWYgYSBkaXNwbGF5IHNlcnZlciBpcyBjdXJyZW50 IG9uIHRoZSBWVCBhbmQgYWN0aXZlIGFuZAo+ID4gPiA+ID4gPiA+IG1vbml0b3JpbmcgdWRldiwg YnV0IHN0dWNrIGRvaW5nIHNvbWV0aGluZyBhbmQgY2Fubm90IHNlcnZpY2UgdWV2ZW50cwo+ID4g PiA+ID4gPiA+IHZlcnkgZmFzdCwgYW5kIHRoZSBrZXJuZWwgc2VuZHMgbW9yZSB0aGFuIG9uZSBl dmVudCBiZWZvcmUgdGhlIHByb2Nlc3MKPiA+ID4gPiA+ID4gPiBnZXRzIGJhY2sgdG8gZGlzcGF0 Y2hpbmcuIFRoZSB0ZXJtaW5vbG9neSBpbiBsaWJ1ZGV2IEFQSSBjb25mdXNlZCBtZSBhcwo+ID4g PiA+ID4gPiA+IGFuIGV2ZW50IGlzIGEgZGV2aWNlLiBTcXVhc2hpbmcgdG9nZXRoZXIgd291bGQg bWFrZSBzZW5zZSBpZiB0aGUKPiA+ID4gPiA+ID4gPiB1ZXZlbnQgd2VyZSBqdXN0IHVwZGF0aW5n IGEgZGV2aWNlIGF0dHJpYnV0ZSBsaXN0LiBQcmV2aW91c2x5IHdoZW4gd2UKPiA+ID4gPiA+ID4g PiBoYWQganVzdCBhIHNpbmdsZSBraW5kIG9mIHVldmVudCwgdGhhdCB3b3VsZCBub3QgaGF2ZSBt YWRlIGEKPiA+ID4gPiA+ID4gPiBkaWZmZXJlbmNlLCBidXQgaWYgd2UgZ2FpbiBkaWZmZXJlbnQg a2luZHMgb2YgdWV2ZW50cyBsaWtlIGhlcmUsIGl0Cj4gPiA+ID4gPiA+ID4gc3RhcnRzIHRvIG1h dHRlci4KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IEhvd2V2ZXIsIFBhdWwgY2FtZSB0byB0 aGUgY29uY2x1c2lvbiB0aGF0IHdlIHdpbGwgYmUgb2sgYXMgbG9uZyBhcyB0aGUKPiA+ID4gPiA+ ID4gPiBldmVudHMgY29tZSB2aWEgbmV0bGluay4gICAgICAKPiA+ID4gPiA+ID4gCj4gPiA+ID4g PiA+IFllYWggbmV0bGluayBzaG91bGRuJ3QgZHJvcCBldmVudHMgb24gdGhlIGZsb29yIEkgdGhp bmsuIEl0IG1pZ2h0Cj4gPiA+ID4gPiA+IHN0aWxsIGhhcHBlbiwgYnV0IHRoZW4gSSB0aGluayB5 b3Ugc2hvdWxkIGdldCBhbiBpbmRpY2F0aW9uIG9mIHRoYXQKPiA+ID4gPiA+ID4gZXJyb3IsIGFu ZCB5b3UganVzdCB0cmVhdCBpdCBhcyBhIGdlbmVyYWwgaG90cGx1ZyBldmVudCBsaWtlIG9uIG9s ZGVyCj4gPiA+ID4gPiA+IGtlcm5lbHMuICAgIAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBBbHJpZ2h0 LCBhbHRob3VnaCByZWFkaW5nIFBhdWwgaXQgc291bmRzIGxpa2UgdGhlcmUgaXMgYW5vdGhlcgo+ ID4gPiA+ID4gKGZhbGxiYWNrPykgbWV0aG9kIGFzIHdlbGwgdGhhdCB3b3VsZG4ndCB3b3JrLiBT aG91bGQgdXNlcnNwYWNlIHdvcnJ5Cj4gPiA+ID4gPiBhYm91dCB0aGF0Pwo+ID4gPiA+ID4gCj4g PiA+ID4gPiBIbW0sIGdldCBhbiBpbmRpY2F0aW9uIG9mIGFuIGVycm9yLi4uIEkgZG9uJ3Qga25v dyBob3cgdGhhdCB3b3VsZCBiZQo+ID4gPiA+ID4gcHJlc2VudGVkIGluIGxpYnVkZXYgQVBJIGFu ZCBJIGNhbid0IHBvaW50IHRvIGFueSBjb2RlIGluIFdlc3RvbiB0aGF0Cj4gPiA+ID4gPiB3b3Vs ZCBkZWFsIHdpdGggaXQuIERvZXMgYW55b25lIGhhdmUgYSBjbHVlIGFib3V0IHRoYXQ/Cj4gPiA+ ID4gPiAKPiA+ID4gPiA+IFVzZXJzcGFjZSBjYW5ub3QgcmVhbGx5IHN0YXJ0IHRha2luZyBhZHZh bnRhZ2Ugb2YgYW55IG5ldyBmaW5lLWdyYWluZWQKPiA+ID4gPiA+IGhvdHBsdWcgZXZlbnRzIHVu dGlsIGl0IGNhbiByZWx5IG9uIHRoZSBldmVudCBkZWxpdmVyeS4gR3JhbnRlZCwgdGhpcwo+ID4g PiA+ID4gc2VlbXMgcHVyZWx5IGEgdXNlcnNwYWNlIGlzc3VlLCBidXQgSSBiZXQgaXQgY291bGQg YmUgZm9ybXVsYXRlZCBhcyBhCj4gPiA+ID4gPiBrZXJuZWwgcmVncmVzc2lvbjogdGhpbmdzIHN0 b3Agd29ya2luZyBhZnRlciB1cGdyYWRpbmcgdGhlIGtlcm5lbCB3aGlsZQo+ID4gPiA+ID4gaGF2 aW5nIGFsd2F5cyB1c2VkIG5ldyB1c2Vyc3BhY2Ugd2hpY2ggd2FzIHJlYWR5IGZvciBkZXRhaWxl ZCBob3RwbHVnCj4gPiA+ID4gPiBldmVudHMgYnV0IGRpZG4ndCBlbnN1cmUgdGhlIGRlbGl2ZXJ5 IGluIHVzZXJzcGFjZS4gICAgCj4gPiA+ID4gCj4gPiA+ID4gWW91IGhhdmUgdGhpcyBhbHJlYWR5 IChpZiBpdCdzIHJlYWxseSBhbiBpc3N1ZSB3aXRoIG5ldGxpbmsgcmVsaWFiaWxpdHksCj4gPiA+ ID4gdGJoIG5vIGlkZWEpLCB5b3UgY2FuIGFscmVhZHkgbWlzcyBhIGdsb2JhbCB1ZXZlbnQuIEl0 J3MgZWFzaWVyIHRvIGNhdGNoCj4gPiA+ID4gdXAgaWYgeW91IGRvIG1pc3MgaXQsIHNpbmNlIHlv dSdyZSBmb3JjaW5nIGEgcmVwcm9iZSBvbiBldmVyeXRoaW5nLiBUaGF0J3MKPiA+ID4gPiB3aHkg SSB0aGluayB0aGUgRVBPQ0ggdGhpbmcgd291bGQgYmUgZ29vZCwgdXNlcnNwYWNlIGNvdWxkIGJl IGRlZmVuc2l2ZQo+ID4gPiA+IGFuZCBhbHdheXMgY2FsbCBHZXRDb25uZWN0b3JDdXJyZW50IG9u IGFsbCBjb25uZWN0b3JzIGlmIGl0IGdldHMgYW55Cj4gPiA+ID4gaG90cGx1ZyB1ZXZlbnQsIGFu ZCBpZiBpdCBnZXRzIGFuIEVQT0NIIGNoYW5nZSwgZm9yY2UgYSByZXByb2JlLiBCdXQgSSdtCj4g PiA+ID4gbm90IHN1cmUgdGhhdCdzIHJlYWxseSByZXF1aXJlZCAoYXNpZGUgZnJvbSBWVCBzd2l0 Y2hpbmcpLiAgCj4gPiA+IAo+ID4gPiBObywgbXkgY29uY2VybiBpcyBub3QgYW4gaXNzdWUgd2l0 aCBuZXRsaW5rIHJlbGlhYmlsaXR5LiBJdCBpcyBhCj4gPiA+IHBvdGVudGlhbCBpc3N1ZSB3aGVu IHVzZXJzcGFjZSBjaG9vc2VzIHRvIG5vdCB1c2UgbmV0bGluaywgYW5kIHVzZXMKPiA+ID4gc29t ZXRoaW5nIGVsc2UgaW5zdGVhZC4gSSdtIG5vdCBzdXJlIHdoYXQgdGhhdCBlbHNlIGlzIGJ1dCBQ YXVsIHNheXMKPiA+ID4gdGhlcmUgaXMgY29kZSBpbiBsaWJ1ZGV2IGFuZCB0aGF0IGlzIGNvbXBs ZXRlbHkgb3V0c2lkZSB0aGUgY29udHJvbCBvZgo+ID4gPiBLTVMgYXBwcyBsaWtlIGRpc3BsYXkg c2VydmVycy4gIAo+ID4gCj4gPiBhZmFpayB0aGlzIG90aGVyIHBhdGggb25seSBleGlzdHMgYmVj YXVzZSBpdCdzIHRoZSBvbGRlciBvbmUsIGZvciB1YXBpCj4gPiBiYWNrd2FyZHMgY29tcGF0aWJp bGl0eSB3aXRoIG9sZGVyIHVzZXJzcGFjZS4gU2hvdWxkbid0IGJlIHVzZWQgZm9yCj4gPiBhbnl0 aGluZy4KPiAKPiAiU2hvdWxkbid0IGJlIHVzZWQiIGFuZCBzb21lb25lIHNjcmVhbWluZyAia2Vy bmVsIHJlZ3Jlc3Npb24iLi4uIGFyZSB5b3UKPiBzdXJlIHRoYXQgcGF0aCB3b24ndCBtYXR0ZXI/ Cj4gCj4gTGlrZSBzb21lIGhvbWUtYnJld24gZGlzdHJpYnV0aW9uIHRoYXQgaGFwcGVucyB0byBj b25maWd1cmUgdGhlaXIKPiBsaWJ1ZGV2IGFuZCBrZXJuZWwgdG8gdXNlIHRoZSBvbGQgbWV0aG9k LCB1c2VzIGFscmVhZHkgbmV3IHVzZXJzcGFjZSwKPiBhbmQgdGhlbiB1cGdyYWRlcyB0aGUga2Vy bmVsIHRoYXQgc3RhcnRzIHNlbmRpbmcgZmluZS1ncmFpbmVkIGhvdHBsdWcKPiBldmVudHMsIHJl c3VsdGluZyB0aGUgZGlzcGxheSBzZXJ2ZXIgcmFuZG9tbHkgaGFuZGxpbmcgaG90cGx1ZyB3cm9u Zy4KPiAKPiBSZWFkaW5nIEFpcmxpZSdzIHJlY2VudCByYW50IGFib3V0IGtlcm5lbCByZWdyZXNz aW9uIGhhbmRsaW5nIG1ha2UgdGhpcwo+IGEgc2Nhcnkgc2NlbmFyaW8gd2hlcmUgeW91IHdvdWxk IGhhdmUgbm8gb3RoZXIgY2hvaWNlIHRoYW4gdG8gcmlwIGFsbAo+IHRoZSBmaW5lLWdyYWluZWQg dWV2ZW50cyBvdXQgYWdhaW4uCj4gCj4gSXMgdGhlcmUgYW55IGRpZmZlcmVuY2UgaW4gdGhlIGtl cm5lbCBjb2RlIGJldHdlZW4gdGhlIG9sZCBtZXRob2QgYW5kCj4gdGhlIG5ldGxpbmsgbWV0aG9k PyBXb3VsZCBpdCBiZSBwb3NzaWJsZSB0byBzZW5kIGZpbmUtZ3JhaW5lZCBob3RwbHVnCj4gZXZl bnRzIG9ubHkgdGhyb3VnaCBuZXRsaW5rLCBhbmQgZmFsbCBiYWNrIHRvIHRoZSBvbGQgJ0hPVFBM VUc9MScgZm9yCj4gdGhlIG9sZCBtZXRob2Q/CgpUaGVyZSdzIGEgbG90IG9mIGdyZXkgaW4ga2Vy bmVsIHJlZ3Jlc3Npb25zLCBhbmQgZm9yIGZyaW5nZSBzZXR1cHMgdXNlZCBieQpmZXcgcGVvcGxl IEkgd291bGRuJ3Qgd29ycnkgYWJvdXQgdGhpcy4gSWYgdGhleSBleHBlY3QgdGhlaXIgc2hpdCB0 byBrZWVwCndvcmtpbmcgd2hlbiB1c2luZyBuZXcgc3R1ZmYgYW5kIGNyYXBweSBvbGQgaW50ZXJm YWNlcywgdGhleSBnZXQgdG8ga2VlcAphbGwgdGhlIHBpZWNlcy4KCkRhdmUncyByZWNlbnQgcmFu dCB3YXMgYSBiaXQgc3BlY2lhbCwgc2luY2UgdXNlcnNwYWNlIGlzIGNsZWFybHkgc21va2luZwpz b21lIHN0cm9uZyBzdHVmZiAoLW1vZGVzZXR0aW5nJ3MgYXRvbWljIGlzIHNlcmlvdXNseSBub3Qg dXNpbmcgYXRvbWljCmNvcnJlY3RseSksIGJ1dCBpdCB3YXMgYWxzbyBhZmZlY3RpbmcgdG9vIG1h bnkgcGVvcGxlLCBhbmQgY2hhbmdpbmcgdGhlCmJvb3Qgc2V0dXAgbWVhbnQgeW91J2QgZ2V0IGEg YmxhY2sgc2NyZWVuIG9uIGJvb3QtdXAgYWxyZWFkeS4gSW5zdGVhZCBvZgpqdXN0IG9uIHRoZSBm aXJzdCBtb2Rlc2V0IHdpdGggbW9yZSB0aGFuIDEgc2NyZWVuLgoKVGhlcmUncyBhbHNvIGEgZmFp cmx5IGVhc3kgZml4IGZvciB0aGF0IC1tb2Rlc2V0dGluZyBpc3N1ZTogV2UgZG9uJ3QKZXhwb3Nl IGF0b21pYyBpZiB0aGUgY29tcG9zaXRvciBoYXMgYSBwcm9jZXNzIG5hbWUgb2YgIlhzZXJ2ZXIi LiBCcnV0YWwsCmJ1dCBnZXRzIHRoZSBqb2IgZG9uZS4gT25jZSBYIGlzIGZpeGVkLCB3ZSBjYW4g Z2l2ZSBhIG5ldyAiSSdtIG5vdCB0b3RhbGx5CmJyb2tlbiBhbnltb3JlIiBpbnRlcmZhY2UgdG8g Z2V0IGJhY2sgYXQgYXRvbWljLgoKdGxkcjsgSSdtIG5vdCB3b3JyaWVkIGF0IGFsbCwgYXQgbGVh c3Qgbm90IG1vcmUgdGhhbiB3aXRoIGFueXRoaW5nIHVhcGkuClZlcnkgcmFyZWx5IHdlJ2xsIGhh dmUgcmVncmV0cy4KCj4gPiA+IENhbiB5b3UgZXhwbGFpbiBob3cgb25lIGNvdWxkIG1pc3MgYSBn bG9iYWwgaG90cGx1ZyBldmVudCB3aGVuCj4gPiA+IHVzZXJzcGFjZSBpcyB1c2luZyBuZXRsaW5r IHRvIHdhdGNoIGZvciBldmVudHM/IEkgdGhvdWdodCB0aGUgbmV0bGluawo+ID4gPiBwYXRoIHRo cm91Z2ggbGlidWRldiB3YXMgcmVsaWFibGUuIEFuZCBob3cgZG9lcyB1c2Vyc3BhY2UgcmVhbGl6 ZSBpdAo+ID4gPiBtaXNzZWQgYW4gZXZlbnQ/ICAKPiA+IAo+ID4gSSB0aG91Z2h0IG5ldGxpbmsg aXMgc3VwcG9zZWQgdG8gYmUgcmVsaWFibGUsIGJ1dCB0aGVuIGlmIHlvdSBzZW5kCj4gPiBiYXpp bGxpb24gb2YgZXZlbnRzIGFuZCB1c2Vyc3BhY2UgaXMgc3R1Y2ssIGV2ZW50dWFsbHkgeW91IHdp bGwgcnVuIG91dCBvZgo+ID4gbWVtb3J5LiBJIGhhdmUgbm8gaWRlYSBob3cgbmV0bGluayBzaWdu YWxzIHRoYXQsIGFuZCBob3cgdGhhdCdzIGZvcndhcmRlZAo+ID4gb3Igbm90IGluIGxpYnVkZXYu IEFsc28gbm90IHN1cmUgd2hldGhlciB3ZSBzaG91bGQgYWN0dWFsbHkgY2FyZSBhYm91dAo+ID4g dGhpcy4KPiAKPiBPay4gTGV0J3MgdHJ5IHRvIGtlZXAgdGhlIG51bWJlciBvZiBldmVudHMgbG93 IHRoZW4sIGUuZy4gaW4gdGhlIGNhc2Ugb2YKPiAKPiAJSE9UUExVRz0xIENPTk5FQ1RPUj14eCBQ Uk9QRVJUWT15eQo+IAo+IHJldmVydCB0byBzZW5kaW5nIGp1c3QgYSBzaW5nbGUgdWV2ZW50IHdp dGggUFJPUEVSVFkgc2V0IHRvIDAgaW5zdGVhZAo+IGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25l IHN1Y2ggbm8tcHJvYmUgcHJvcGVydHkgY2hhbmdlcyBmb3IgdGhlIHNhbWUKPiBjb25uZWN0b3Iu CgpZZWFoIFBST1BFUlRZPTAgd291bGQgYmUgYW5vdGhlciBvcHRpb24uIEkgdGhpbmsgaW5kaWNh dGVzIGNsZWFybHkgImRvbid0CnJlcHJvYmUiIGJ1dCBhbHNvICJ1cGRhdGUgbm90IGZvciBhbnkg c3BlY2lmaWMgcHJvcCwgYnV0IGZvciBhbGwgb2YKdGhlbSIuCgpDaGVlcnMsIERhbmllbAotLSAK RGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDov L2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4