From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 3/6] drm/i915/huc: Add HuC fw loading support Date: Thu, 14 Jul 2016 16:26:18 +0200 Message-ID: <20160714142618.GC17101@phenom.ffwll.local> References: <1466532685-5101-1-git-send-email-peter.antoine@intel.com> <1466532685-5101-4-git-send-email-peter.antoine@intel.com> <20160622083148.GO23520@phenom.ffwll.local> <576BB679.5090807@intel.com> <20160713124810.GO23520@phenom.ffwll.local> <57879CE9.6010401@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x232.google.com (mail-wm0-x232.google.com [IPv6:2a00:1450:400c:c09::232]) by gabe.freedesktop.org (Postfix) with ESMTPS id 625226E8B6 for ; Thu, 14 Jul 2016 14:26:24 +0000 (UTC) Received: by mail-wm0-x232.google.com with SMTP id i5so115423804wmg.0 for ; Thu, 14 Jul 2016 07:26:24 -0700 (PDT) Content-Disposition: inline In-Reply-To: <57879CE9.6010401@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon Cc: sean.v.kelley@intel.com, lawrence.t.li@intel.com, intel-gfx@lists.freedesktop.org, rodrigo.vivi@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdWwgMTQsIDIwMTYgYXQgMDM6MDg6NDFQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gT24gMTMvMDcvMTYgMTM6NDgsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBUaHUs IEp1biAyMywgMjAxNiBhdCAwMjo1Mjo0MVBNICswMTAwLCBQZXRlciBBbnRvaW5lIHdyb3RlOgo+ ID4gPiBPbiBUaHUsIDIzIEp1biAyMDE2LCBEYXZlIEdvcmRvbiB3cm90ZToKPiA+ID4gPiBPbiAy Mi8wNi8xNiAwOTozMSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+ID4gPiBObywgdGhlICpjb3Jy ZWN0KiBmaXggaXMgdG8gdW5pZnkgYWxsIHRoZSBmaXJtd2FyZSBsb2FkZXJzIHdlIGhhdmUuCj4g PiA+ID4gVGhlcmUgc2hvdWxkIGp1c3QgYmUgT05FIHBpZWNlIG9mIGNvZGUgdGhhdCBjYW4gYmUg dXNlZCB0byBmZXRjaCBhbmQKPiA+ID4gPiBsb2FkIEFOeSBmaXJtd2FyZSBpbnRvIEFOWSBhdXhp bGlhcnkgbWljcm9jb250cm9sbGVyLiBOT1Qgb25lIHBlcgo+ID4gPiA+IG1pY3JvY29udHJvbGxl ciwgYWxsIGRpZmZlcmVudCAtLSB0aGF0IHdheSBsaWVzIG1hZG5lc3MuCj4gPiA+ID4gCj4gPiA+ ID4gV2UgYWxyZWFkeSBoYWQgYSB1bmlmaWVkIGxvYWRlciBmb3IgdGhlIEh1QyBhbmQgR3VDIGEg eWVhciBhZ28sIGJ1dCBJSVJDCj4gPiA+ID4gdGhlIHBhcnR5IGxpbmUgdGhlbiB3YXMgImp1c3Qg bWFrZSBpdCAoR3VDKSBzcGVjaWZpYywgdGhlbiBjb3B5cGFzdGUgaXQKPiA+ID4gPiBmb3IgdGhl IHNlY29uZCB1QywgYW5kIHdoZW4gd2UndmUgZ290IHRocmVlIHZlcnNpb25zIHdlJ2xsIGhhdmUg bGVhcm50Cj4gPiA+ID4gaG93IHdlIHJlYWxseSB3YW50IGEgdW5pZmllZCBsb2FkZXIgdG8gYmVo YXZlLiIKPiA+ID4gPiAKPiA+ID4gPiBXZWxsLiBoZXJlJ3MgdGhlIGNvcHlwYXN0ZSwgYW5kIHdl IGFscmVhZHkgaGF2ZSBhIGRpZmZlcmVudCBsb2FkZXIgZm9yCj4gPiA+ID4gdGhlIERNQy9DU1Is IHNvIGl0IG11c3QgYmUgdGltZSBmb3IgKHJlLSl1bmlmaWNhdGlvbi4KPiA+ID4gPiAKPiA+ID4g PiAuRGF2ZS4KPiA+ID4gCj4gPiA+IEp1c3QgdG8gYWRkLCBpZiB5b3UgdWNfZndfZmV0Y2goKSBo YXMgYW4gZXJyb3IgY29kZSB5b3Ugd2lsbCBzdGlsbCBoYXZlIHRvCj4gPiA+IHJlbWVtYmVyIHRo ZSBzdGF0ZSBvZiB0aGUgZmV0Y2ggb3IgYXQgZWFjaCByZXNldC9yZXN1bWUvZXRjLi4uIG9yIHlv dSB3aWxsCj4gPiA+IGhhdmUgdG8gdHJ5IHRoZSBmaXJtd2FyZSBsb2FkIGFnYWluIGFuZCB0aGF0 IGNhbiB0YWtlIGEgbG9uZyB0aW1lLiBTbyB0aGUKPiA+ID4gc3RhdGUgd2lsbCBoYXZlIHRvIGJl IHJlLWluc3RhdGVkLgo+ID4gPiAKPiA+ID4gU2VlaW5nIHRoaXMgY29kZSB3YXMgd3JpdHRlbiB3 aXRoIHRoZSBnaXZlbiBnb2FscyBhbmQgd2VyZSB3cml0dGVuIGluIHRoZQo+ID4gPiBzYW1lIHZh bmUgYXMgY29kZSB0aGF0IHdhcyBkZWVtZWQgYWNjZXB0YWJsZSwgaXQgc2VlbXMgd2VpcmQgYXQg dGhpcyBsYXRlCj4gPiA+IHN0YWdlIHRvIGNoYW5nZSB0aGUgZGVzaWduIGdvYWxzLgo+ID4gPiAK PiA+ID4gTm90ZTogdGhpcyBpcyB0aGUgdGhpcmQgdGltZSB0aGF0IHRoZXNlIHBhdGNoZXMgaGF2 ZSBiZWVuIHBvc3RlZCBhbmQgd2VyZQo+ID4gPiBvbmx5IHJlamVjdGVkIChhcyBmYXIgYXMgSSBr bm93KSBkdWUgdG8gbm8gb3Blbi1zb3VyY2UgdXNlci4gV2hpY2ggdGhlcmUgaXMKPiA+ID4gbm93 LCBhbmQgaXMgd2h5IEkgaGF2ZSByZXBvc3RlZCB0aGVzZSBwYXRjaGVzLgo+ID4gCj4gPiBJIG5l dmVyIGxpa2VkIHRoZSBndWMgZmlybXdhcmUgY29kZSwgYnV0IGZpZ3VyZSBmb3Igb25lIGNvcHkg aXQncyBub3QKPiA+IHdvcnRoIGZpZ2h0aW5nIG92ZXIuIEFkZGluZyBtb3JlIGNvcGllcyAob3Ig cGVycGV0dWF0aW5nIHRoZSBkZXNpZ24gYnkKPiA+IG1ha2luZyBpdCBnZW5lcmljKSBpc24ndCB3 aGF0IEknbSBsb29raW5nIGZvci4KPiAKPiAqWW91KiBhc2tlZCBmb3IgbW9yZSBjb3BpZXMsIGJh Y2sgd2hlbiB3ZSBwcm9wb3NlZCBhIHNpbmdsZSB1bmlmaWVkIHNvbHV0aW9uCj4gbGFzdCB5ZWFy LiBXZSBhbHJlYWR5IGhhZCBhICpzaW5nbGUqIEd1QytIdUMgbG9hZGVyIHdoaWNoIGNvdWxkIGFs c28gaGF2ZQo+IGJlZW4gZXh0ZW5kZWQgdG8gc3VwcG9ydCB0aGUgRE1DIGFzIHdlbGwsIGJ1dCBh dCB0aGUgdGltZSB5b3Ugd2FudGVkIGEKPiBHdUMtc3BlY2lmaWMgdmVyc2lvbiAtLSBhbmQgYnkg aW1wbGljYXRpb24sIGEgc2VwYXJhdGUgSHVDIGxvYWRlciAtLSAqaW4KPiBhZGRpdGlvbiB0byog dGhlIERNQyBsb2FkZXIuCj4gCj4gPiBGaXJtd2FyZSBsb2FkaW5nIHNob3VsZG4ndCBiZSB0aGF0 IGNvbXBsaWNhdGVkLCByZWFsbHkuCj4gCj4gTWF5YmUgaXQgc2hvdWxkbid0IGJlLCBhbmQgbWF5 YmUgaXQgaXNuJ3QgLS0geW91IG1heSBub3QgYmUgc2VlaW5nIGhvdwo+IHNpbXBsZSB0aGlzIGNv ZGUgYWN0dWFsbHkgaXMuIEZldGNoIGZpcm13YXJlLCB2YWxpZGF0ZSBpdCwgc2F2ZSBpdCBpbiBh IEdFTQo+IG9iamVjdDsgbGF0ZXIsIERNQSBpdCB0byB0aGUgaC93OyBhdCBlYWNoIHN0YWdlIGtl ZXAgdHJhY2sgb2Ygc3RhdHVzIHNvIHdlCj4ga25vdyB3aGF0IGhhcyBiZWVuIGRvbmUgYW5kIHdo YXQgaXMgc3RpbGwgdG8gZG8gKG9yIHJlZG8sIGR1cmluZyByZXNldCkuCj4gCj4gQW55IGNvbXBs aWNhdGlvbnMgYXJlIGJlY2F1c2UgdGhlIGgvdyAoZS5nLiB3cml0ZS1vbmNlIG1lbW9yeSkgbWFr ZXMgdGhlbQo+IG5lY2Vzc2FyeSwgb3IgYXJ0ZWZhY3RzIG9mIHRoZSBHRU0gb2JqZWN0IHN5c3Rl bSwgb3IgYmVjYXVzZSBvZiB0aGUgZHJpdmVyJ3MKPiBieXphbnRpbmUgc2VxdWVuY2Ugb2Ygb3Bl cmF0aW9ucyBkdXJpbmcgbG9hZC9yZXNldC9zdXNwZW5kL3Jlc3VtZS91bmxvYWQuCj4gCj4gPiBU aGUgdW5pZmllZCBmaXJtd2FyZSBsb2FkZXIgaXMgY2FsbGVkIHJlcXVlc3RfZmlybXdhcmUuIElm IHRoYXQncyBub3QgZ29vZAo+ID4gZW5vdWdoLCBwbHMgZml4IHRoZSBjb3JlIGZ1bmN0aW9uLCBu b3QgcGFwZXIgY29kZSBvdmVyIGluIGk5MTUuCj4gCj4gVGhhdCdzIGV4YWN0bHkgdGhlIGZ1bmN0 aW9uIHdlIGNhbGwuIFRoZW4gd2UgaGF2ZSB0byB2YWxpZGF0ZSBhbmQgc2F2ZSB0aGUKPiBibG9i LiBBbmQgcmVtZW1iZXIgdGhhdCB3ZSd2ZSBkb25lIHNvLgo+IAo+ID4gSW4gdGhhdCByZWdhcmQg RE1DL0NTUiBpcyB1bmlmaWVkLCBldmVyeXRoaW5nIGVsc2UgaXNuJ3QgeWV0Lgo+IAo+IFVuaWZp ZWQgd2l0aCB3aGF0PyBNYXliZSB0aGUgIkRNQyIgaXMgdW5pZmllZCB3aXRoIHRoZSAiQ1NSIiAt LSB3aGljaCBBRkFJSwo+IGFyZSB0aGUgc2FtZSB0aGluZyAtLSBhbmQgdGhlIHNvZnR3YXJlIGp1 c3QgcmFuZG9tbHkgdXNlcyBib3RoIG5hbWVzIHRvCj4gbWF4aW1pc2UgY29uZnVzaW9uPwo+IAo+ IAlpZiAoSEFTX0NTUihkZXYpKSB7Cj4gCQlzdHJ1Y3QgaW50ZWxfY3NyICpjc3IgPSAmZGV2X3By aXYtPmNzcjsKPiAKPiAJCWVycl9wcmludGYobSwgIkRNQyBsb2FkZWQ6ICVzXG4iLAo+IAkJCSAg IHllc25vKGNzci0+ZG1jX3BheWxvYWQgIT0gTlVMTCkpOwo+IAkJZXJyX3ByaW50ZihtLCAiRE1D IGZ3IHZlcnNpb246ICVkLiVkXG4iLAo+IAkJCSAgIENTUl9WRVJTSU9OX01BSk9SKGNzci0+dmVy c2lvbiksCj4gCQkJICAgQ1NSX1ZFUlNJT05fTUlOT1IoY3NyLT52ZXJzaW9uKSk7Cj4gCX0KPiAu Li4KPiAJaWYgKCFJU19HRU45KGRldl9wcml2KSkgewo+IAkJRFJNX0VSUk9SKCJObyBDU1Igc3Vw cG9ydCBhdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm1cbiIpOwo+IAkJcmV0dXJuOwo+IAl9Cj4g CWlmICghZGV2X3ByaXYtPmNzci5kbWNfcGF5bG9hZCkgewo+IAkJRFJNX0VSUk9SKCJUcmllZCB0 byBwcm9ncmFtIENTUiB3aXRoIGVtcHR5IHBheWxvYWRcbiIpOwo+IAkJcmV0dXJuOwo+IAl9Cj4g Cj4gQW5kIGFjY29yZGluZyB0byB0aGUgY29tbWVudHMgaW4gaW50ZWxfY3NyLmMgLS0gYnV0IG5v dCB0aGUgY29kZSAtLQo+IAo+IC8qCj4gICogRmlybXdhcmUgbG9hZGluZyBzdGF0dXMgd2lsbCBi ZSBvbmUgb2YgdGhlIGJlbG93IHN0YXRlczoKPiAgKiBGV19VTklOSVRJQUxJWkVELCBGV19MT0FE RUQsIEZXX0ZBSUxFRC4KPiAgKgo+ICAqIE9uY2UgdGhlIGZpcm13YXJlIGlzIHdyaXR0ZW4gaW50 byB0aGUgcmVnaXN0ZXJzIHN0YXR1cyB3aWxsCj4gICogYmUgbW92ZWQgZnJvbSBGV19VTklOSVRJ QUxJWkVEIHRvIEZXX0xPQURFRCBhbmQgZm9yIGFueQo+ICAqIGVycm9uZW91cyBjb25kaXRpb24g c3RhdHVzIHdpbGwgYmUgbW92ZWQgdG8gRldfRkFJTEVELgo+ICAqLwo+IAo+IFNvIEkgZG9uJ3Qg dGhpbmsgeW91IHNob3VsZCBob2xkIHRoaXMgY29kZSB1cCBhcyBhIG1hc3RlcnBpZWNlIG9mICJ1 bmlmaWVkIgo+IGRlc2lnbiAtLSB3aGljaCBpbiBhbnkgY2FzZSB5b3UgYXJndWVkIGFnYWluc3Qg bGFzdCB5ZWFyLCB3aGVuIHdlIHByZXNlbnRlZAo+IGEgdW5pZmllZCBsb2FkZXIuIFNwZWNpZmlj YWxseSwgeW91IHNhaWQsICJJbiBteSBleHBlcmllbmNlIHRyeWluZyB0bwo+IGV4dHJhY3QgY29t bW9uIGNvZGUgYXQgYWxsIGNvc3RzIGlzIGhhcm1mdWwgd2F5IHRvbyBvZnRlbi4iCj4gCj4gQWxz bywgdGhlIGFwcHJvYWNoIHRha2VuIGluIHRoZSBETUMgbG9hZGVyIC0tIHdoaWNoIGFwcGVhcnMg dG8gaGF2ZSBiZWVuCj4gY29weXBhc3RlZCBmcm9tIGEgL3ZlcnkgZWFybHkvIHZlcnNpb24gb2Yg dGhlIEd1QyBsb2FkZXIsIGJlZm9yZSBJIGZpeGVkIHRoZQo+IGFzeW5jLWxvYWQgcHJvYmxlbXMg LS0ganVzdCB3b3VsZG4ndCB3b3JrIGZvciB0aGUgSHVDL0d1Qywgd2hlcmUgdGhlIGtlcm5lbAo+ IG5lZWRzIHRvIGtub3cgd2hlbiB0aGUgZmlybXdhcmUgbG9hZCBoYXMgYmVlbiBjb21wbGV0ZWQg c28gdGhhdCBpdCBjYW4gc3RhcnQKPiBzZW5kaW5nIHdvcmsgdG8gdGhlIEd1Qy4gVGhlIERNQyBs b2FkZXIgb25seSB3b3JrcyBiZWNhdXNlIGl0IGRvZXNuJ3QKPiBhY3R1YWxseSBtYXR0ZXIgd2hl biAob3IgaWYpIGl0J3MgbG9hZGVkLiBJdCB3b3VsZCBiZSAqY29tcGxldGVseSB3cm9uZyogdG8K PiBsb2FkIHRoZSBIdUMvR3VjIHRoYXQgd2F5Lgo+IAo+ID4gSWlyYyB0aGUgYmlnIGlzc3VlIGlz IGRlbGF5ZWQgZmlybXdhcmUgbG9hZGluZyBmb3IgYnVpbHQtaW4gaTkxNSBhbmQgZncKPiA+IG9u bHkgYXZhaWxhYmxlIGxhdGVyIG9uLiBUaGlzIGlzIGFuIG9wZW4gaXNzdWUgaW4gcmVxdWVzdF9m aXJtd2FyZSgpIHNpbmNlCj4gPiB5ZWFycywgYW5kIHRoZXJlJ3MgdmFyaW91cyBwYXRjaGVzIGZs b2F0aW5nIGFyb3VuZC4gSWYgdGhlIHByb2JsZW0gaXMgdGhhdAo+ID4gR3JlZyBLSCBkb2Vzbid0 IGNvbnNpZGVyIHRob3NlIHBhdGNoZXMsIEkgY2FuIGhlbHAgd2l0aCB0aGF0LiBCdXQgbm90Cj4g PiBwdXNoaW5nIHRoZSBjb3JlIGZpeCBmb3J3YXJkIGlzbid0IGFjY2VwdGFibGUgaW1vLgo+IAo+ IFdlJ3JlIG5vdCBhZGRyZXNzaW5nIHRoYXQgaXNzdWUgYXQgYWxsIGhlcmUsIGZvciBMaW51eCB3 ZSBleHBlY3QgdGhlCj4gZmlybXdhcmUgd2lsbCBiZSBpbiB0aGUgcmFtZGlzayBzbyBpdCdzIGF2 YWlsYWJsZSBpbW1lZGlhdGVseS4gQW5kcm9pZCBoYXMKPiBhbiBpc3N1ZSB3aXRoIHRoYXQsIGJ1 dCB3ZSBhbHJlYWR5IGhhdmUgc29sdXRpb25zIHRoZXJlLgoKQ3JvcyBoYXMgdGhlIHNhbWUgaXNz dWUsIGFuZCBpdCBqdXN0IGNyb3BwZWQgdXAgYWdhaW4gYmVjYXVzZSBHb29nbGUgaXMKdW5oYXBw eSB0aGF0IHRoaXMgaXMgc3RpbGwgbm90IGZpeGVkIGluIHVwc3RyZWFtLiBUaGlzIGlzIGJ5IG5v IG1lYW5zCmFuZHJvaWQgc3BlY2lmaWMgYXQgYWxsLCBubyByZWFzb24gdG8gaGF2ZSBhIGhhY2sg Zm9yIGl0IG9ubHkgaW4gYW5kcm9pZC4KCj4gPiBPbmNlIHRoYXQgZml4IGlzIGxhbmRlZAo+ID4g d2UgY2FuIHRyZWF0IHJlcXVlc3RfZmlybXdhcmUgYXMgcmVsaWFibGUgKGl0IG1pZ2h0IHRha2Ug YSB3aGlsZSwgaGVuY2UKPiA+IG11c3QgYmUgcnVuIGluIGFuIGFzeW5jIHdvcmsgbGlrZSBETUMg bG9hZGluZyksIHdpdGggbm8gbmVlZCB0byBldmVyIHJldHJ5Cj4gPiBhbnl0aGluZy4KPiAKPiBO bywgaXQgKmNhbid0KiBydW4gImluIGFuIGFzeW5jIHdvcmsgbGlrZSBETUMgbG9hZGluZyIgLS0g dGhhdCB3YXMgZXhhY3RseQo+IHdoYXQgd2FzIHdyb25nIHdpdGggdGhlIG9yaWdpbmFsIEd1QyBs b2FkZXIgYmVmb3JlIEkgZ290IGludm9sdmVkLiBUaGUKPiBmaXJtd2FyZSB3YXMgZGVsaXZlcmVk IHRvIHRoZSBHdUMgaC93IGFzeW5jaHJvbm91c2x5LCAqYWZ0ZXIqIHRoZSBrZXJuZWwgaGFkCj4g YWxyZWFkeSBzdGFydGVkIHNlbmRpbmcgd29yayB0byB0aGUgZW5naW5lcy4gVGhhdCB3YXMgdXR0 ZXJseSBib2d1cyEKPiAKPiAqVGhpcyogdmVyc2lvbiBpcyBmdWxseSBzeW5jaHJvbm91czsgdGhl IGtlcm5lbCBjYWxscyBmb3IgdGhlIGZpcm13YXJlIHVzaW5nCj4gcmVxdWVzdF9maXJtd2FyZSgp IChhbmQgd2FpdHMgdW50aWwgaXQncyBzdWNjZWVkZWQgb3IgZmFpbGVkKSwgYW5kIGxhdGVyCj4g YXNrcyBmb3IgdGhlIGZpcm13YXJlIHRvIGJlIGxvYWRlZCBpbnRvIHRoZSBHdUMgKGFnYWluLCB3 YWl0aW5nIHVudGlsIGl0IGhhcwo+IHN1Y2NlZWRlZCBvciBmYWlsZWQpLgoKWW91IG5lZWQgdG8g YXBwcm9wcmlhdGVseSBzeW5jIHdpdGggYXN5bmMgd29yayBhdCB0aGUgcmlnaHQgcG9pbnQuIEZv ciBkbWMKdGhhdCdzIGRvbmUgdXNpbmcgcnBtL3Bvd2VyIGRvbWFpbiByZWZjb3VudHMsIGl0J3Mg bm90IG5vbmV4aXN0aW5nIChzaW5jZQppbmRlZWQganVzdCBydW5uaW5nIHN0dWZmIGFzeW5jIHdv dWxkIGZhbGwgb3ZlcikuIEZvciBHdUMvSHVDIHdlIG5lZWQgc29tZQp3YXkgdG8gc3luY2hyb25p emUgZWxzZXdoZXJlLCBsaWtlIGZsdXNoX3dvcmsgaW4gZXhlY2J1Zi4KCkFuZCBpZiB0aGUgZmly bXdhcmUgZmFpbGVkIHRvIGxvYWQgYWZ0ZXIgZmx1c2hfd29yaygpLCB0aGVuIHdlIGNhbgpyZWxp YWJsZSBmYWlsIGV4ZWNidWYgd2l0aCBFSU8gKGxpa2UgaW4gYW55IG90aGVyIGNhc2Ugd2hlbiB0 aGUgaHcgaXMKY29uc2lkZXJlZCB0b28gZGVhZCB0b28gYmUgdXNlZnVsKS4gQW5kIGlmIGZsdXNo X3dvcmsgaXMgdG9vIGV4cGVuc2l2ZSwKd2UgY2FuIGNyZWF0ZSBhIG5pY2UgY29tcGxldGlvbiwg d2hlcmUgdGhlIGZhc3RwYXRoIGlzIGxvY2tsZXNzLiBJIHN0aWxsCmRvbid0IHNlZSB3aHkgYSBi aWcgc3RhdGUgbWFjaGluZXJ5IGlzIG5lZWRlZCBmb3IgdGhpcyBhdCBhbGwuCgpBbmQgaWYgdGhp cyB2ZXJzaW9uIGlzIGZ1bGx5IHN5bmNocm5vdXMsIHdoeSBkb2VzIGl0IGV2ZW4gbmVlZCBzdWNo IGEKY29tcGxpY2F0ZWQgc3RhdHVzIGhhbmRsaW5nPyBGYWxsIG92ZXIgd2l0aCAtRUlPIHJlYWxs eSBzaG91bGQgZG8gYmUKZW5vdWdoLgoKPiA+IElmIGZ3IGxvYWRpbmcgZmFpbHMgd2UgY2FuIGp1 c3QgbWFyayB0aGUgZW50aXJlIHJlbmRlciBwYXJ0IG9mCj4gPiB0aGUgZ3B1IGFzIGRlYWQgYnkg aW5qZWN0aW5nIHRoZSBlcXVpdmFsZW50IG9mIGEgbm9uLXJlY292ZXJhYmxlIGhhbmcKPiA+IChh c3luYyBzZXR1cCkgb3IgZmFpbGluZyBlbmdpbmUgaW5pdCB3aXRoIC1FSU8gKGlmIHRoaXMgaXMg c3RpbGwKPiA+IHN5bmNocm9ub3VzLCB3aGljaCBJIGRvbid0IGV4cGVjdCByZWFsbHkpLgo+IAo+ IFdoaWNoIGlzIGp1c3Qgd2hhdCB3ZSBkby4gVGhpcyBwYXRjaHNldCBpcyBlc3NlbnRpYWxseSBq dXN0IGFkZGluZyBIdUMKPiBsb2FkaW5nIHRvIHRoZSBleGlzdGluZyBHdUMgbG9hZGluZyBwcm9j ZXNzLCByZXVzaW5nIGFzIG11Y2ggYXMgcG9zc2libGUgb2YKPiB0aGUgc2FtZSBjb2RlLgo+IAo+ ID4gSWYgdGhlcmUncyBhbm90aGVyIHJlYXNvbiBmb3IgdGhpcyBjb21wbGV4aXR5LCBwbGVhc2Ug ZXhwbGFpbiBzaW5jZSBJJ2QKPiA+IGxpa2UgdG8gdW5kZXJzdGFuZCB3aHkgd2UgbmVlZCB0aGlz Lgo+ID4gLURhbmllbAo+IAo+IExlc3MgY29tcGxleGl0eSB0aGFuIHlvdSB0aGluay4KPiAKPiAg IDUzMSAgMTY5OCAxNDI1NSBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jc3IuYwo+ICAgNzUx ICAyNzU3IDIyODg5IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwo+IAo+ IE11Y2ggdGhlIHNhbWUgc2l6ZSwgdG8gd2l0aGluIGEgKGJpbmFyeSkgb3JkZXItb2YtbWFnbml0 dWRlLiBPYnZpb3VzbHkgdGhlCj4gR3VDIGNvZGUgKm5lY2Vzc2FyaWx5KiBkb2VzIG1vcmUgYmVj YXVzZSB0aGUgZi93IGludGVyZmFjZXMgYXJlIG11Y2ggbW9yZQo+IGNvbXBsZXggKGN0eCBwb29s LCBBRFMsIGV0Yyk7IGJ1dCB0aG9zZSBhcmUgbm90IG9wdGlvbmFsLiBBbmQgdGhlIEd1QyBjb2Rl Cj4gaGFzIHRvIGRlYWwgd2l0aCByZWxvYWRpbmcgYWZ0ZXIgUkM2IG9yIEdQVSByZXNldCwgd2hp Y2ggQUZBSUNUIHRoZSBETUMKPiBkb2Vzbid0LgoKSSdtIG5vdCBhZ2FpbnN0IGNvZGUgc2l6ZSwg YnV0IGFnYWluc3QgdGhlIHN0YXR1cyBtYXRyaXguIEkgbnVrZWQgaXQgZnJvbQppbnRlbF9jc3Iu YywgSSB3YW50IGl0IGdvbmUgZnJvbSB0aGUgZ3VjL2h1YyBsb2FkZXIgdG9vLiBJdCBpbW8gc2Vy dmVzIG5vCnBvaW50LgotRGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK