From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [DMC_BUGFIX_SKL_V2 1/5] drm/i915/skl: Added a check for the hardware status of csr fw before loading. Date: Wed, 30 Sep 2015 14:14:04 +0200 Message-ID: <20150930121404.GD3383@phenom.ffwll.local> References: <55F9C1A9.7000106@intel.com> <20150923075738.GF3383@phenom.ffwll.local> <56031060.9040708@intel.com> <20150928065256.GH3383@phenom.ffwll.local> <5609D34D.4080902@intel.com> <20150929085111.GE3383@phenom.ffwll.local> <560B31E0.8060807@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) by gabe.freedesktop.org (Postfix) with ESMTPS id 527B56E064 for ; Wed, 30 Sep 2015 05:11:11 -0700 (PDT) Received: by wiclk2 with SMTP id lk2so194862943wic.0 for ; Wed, 30 Sep 2015 05:11:09 -0700 (PDT) Content-Disposition: inline In-Reply-To: <560B31E0.8060807@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Rafael J. Wysocki" Cc: Daniel Vetter , intel-gfx List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBTZXAgMzAsIDIwMTUgYXQgMDI6NTA6NDBBTSArMDIwMCwgUmFmYWVsIEouIFd5c29j a2kgd3JvdGU6Cj4gT24gOS8yOS8yMDE1IDEwOjUxIEFNLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ ID5PbiBUdWUsIFNlcCAyOSwgMjAxNSBhdCAwMTo1NDo1M0FNICswMjAwLCBSYWZhZWwgSi4gV3lz b2NraSB3cm90ZToKPiA+Pk9uIDkvMjgvMjAxNSA4OjUyIEFNLCBEYW5pZWwgVmV0dGVyIHdyb3Rl Ogo+ID4+Pk9uIFdlZCwgU2VwIDIzLCAyMDE1IGF0IDEwOjQ5OjM2UE0gKzAyMDAsIFJhZmFlbCBK LiBXeXNvY2tpIHdyb3RlOgo+ID4+Pj5PbiA5LzIzLzIwMTUgNzoxNyBQTSwgRGFuaWVsIFZldHRl ciB3cm90ZToKPiA+Pj4+PmFjcGlfdGFyZ2V0X3N5c3RlbV9zdGF0ZSgpIHNlZW1zIHRvIGJlIGFs bW9zdCB0aGUgdGhpbmcgd2UncmUgbG9va2luZwo+ID4+Pj4+Zm9yLCBleGNlcHQgdGhhdCBpdCdz IG9ubHkgdmFsaWQgaW4gdGhlIHN1c3BlbmQgY2FsbGJhY2tzIHNpbmNlIGl0Cj4gPj4+Pj5nZXRz IHJlc2V0IHRvIEFDUElfU1RBVEVfUzAgd2hlbiByZXN1bWluZy4gU28gcHJvYmFibHkgd2Ugd2Fu dAo+ID4+Pj4+c29tZXRoaW5nIGVsc2UgLi4uCj4gPj4+PlJpZ2h0Lgo+ID4+Pj4KPiA+Pj4+VGhl IGlkZWEgaXMgdG8gYWRkIGEgd2F5IGZvciBkcml2ZXJzIHRvIGNoZWNrIGlmCj4gPj4+PihhKSBz dXNwZW5kIGlzIGdvaW5nIHRvIGVudGVyIHRoZSBCSU9TCj4gPj4+PihiKSByZXN1bWUgaGFzIGJl ZW4gdHJpZ2dlcmVkIGJ5IHRoZSBCSU9TCj4gPj4+PmFuZCB0aGF0J3MgcmVhbGx5IHdoYXQgZHJp dmVycyBuZWVkIHRvIGtub3cuCj4gPj4+Pgo+ID4+Pj5Gb3Igc3VzcGVuZC10by1pZGxlIHRob3Nl IHR3byB3aWxsIHJldHVybiBmYWxzZSBhbmQgZm9yIFMzIHRoZXknbGwgcmV0dXJuCj4gPj4+PnRy dWUuCj4gPj4+Pgo+ID4+Pj5Xb3VsZCB0aGF0IGhlbHA/Cj4gPj4+Tm90IHN1cmUgdGhhdCBtYXRj aGVzIGV4YXh0bHkgd2hhdCB3ZSdkIG5lZWQgaGVyZSAuLi4gRXNzZW50aWFsbHkgd2UgbmVlZAo+ ID4+PnRvIGtub3cgd2hldGhlciB3ZSd2ZSBiZWVuIGluIFMzL1M0IChmaXJtd2FyZSBoYXMgYmVl biBlYXRlbikgb3IgaW4gb25lIG9mCj4gPj4+dGhlIGhpZ2hlciBzdXNwZW5kLXRvLWlkbGUvc3Rh bmRieSBzdGF0ZXMgKGZpcm13YXJlIHN0aWxsIGFsaXZlLCBkb24ndAo+ID4+PmRpc3R1cmIgaXQp LiBBZGRpdGlvbmFsIGZ1biB0aGF0IGp1c3QgY3Jvc3NlZCBteSBtaW5kIGlzIHRoYXQgaWYgdGhl Cj4gPj4+c3VzcGVuZC10by1tZW0gaXMgYWJvcnRlZCAoc29tZSBvdGhlciBkcml2ZXIgZmFpbGVk KSB0aGVuIHRoYXQgZnVuY3Rpb24KPiA+Pj5zaG91bGQgX25vdF8gaW5kaWNhdGUgdGhhdCB3ZSd2 ZSBiZWVuIGluIFMzLiBTbyBtYXliZSBzb21ldGhpbmcgbGlrZQo+ID4+U28gaXQgcmVhbGx5IGxv b2tzIGxpa2UgdGhlIGludGVyZmFjZSBJIHdhcyB0YWxraW5nIGFib3V0IHdvdWxkIGJlIHN1aXRh YmxlOgo+ID4+Cj4gPj5wbV9zdXNwZW5kX3ZpYV9maXJtd2FyZSgpID09IHRydWUgLT4gZmlybXdh cmUgaXMgZ29pbmcgdG8gYmUgZWF0ZW4gKHVzZSB0aGF0Cj4gPj5kdXJpbmcgc3VzcGVuZCBpZiBu ZWVkZWQpCj4gPj5wbV9yZXN1bWVfdmlhX2Zpcm13YXJlKCkgPT0gdHJ1ZSAtPiBmaXJtd2FyZSB3 YXMgZWF0ZW4KPiA+Pgo+ID4+VGhlIGxhdHRlciB3aWxsIG9ubHkgcmV0dXJuICd0cnVlJyBpZiB3 ZSByZWFsbHkgaGF2ZSBlbnRlcmVkIHRoZSBCSU9TCj4gPj4ocGxhdGZvcm0gZmlybXdhcmUpLgo+ ID5ZZWFoIHRoYXQgc2VlbXMgdG8gZml0IHRoZSBiaWxsLiBXZSBhbHJlYWR5IGhhdmUgYSBjaGVj ayBpbiBvdXIgc3VzcGVuZAo+ID5wYXRocyB0byBmaWd1cmUgb3V0IHdoZXRoZXIgd2UnbGwgc3Vz cGVuZCB0byBpZGxlIG9yIGdvIGludG8gZnVsbCBTMywgc28KPiA+aTkxNSBjb3VsZCB1c2UgdGhl bSBib3RoLiBBbmQgbWFraW5nIHRoZW0gZ2VuZXJpYyB3b3VsZCBtYWtlIHNlbnNlIEkKPiA+Z3Vl c3MuCj4gCj4gT0ssIHNlbnQgcGF0Y2hlcyAoQ0NlZCB5b3UpLCBwbGVhc2UgaGF2ZSBhIGxvb2su CgpFWFBPUlRfU1lNQk9MIHNlZW1zIG1pc3NpbmcsIGJ1dCBsZ3RtIG90aGVyd2lzZS4gSSBoYXZl bid0IHRyaWVkIHRvIHVzZQp0aGVtIGZvciB0aGUgdHdvIGNhc2VzIGluIGk5MTUgdGhvdWdoLgot RGFuaWVsCgo+IAo+IFRoYW5rcywKPiBSYWZhZWwKPiAKPiAKPiA+Pj5hY3BpX3NvdXJjZV9zeXN0 ZW1fc3RhdGUoKSB3aGljaCB1c3VhbGx5IGlzIFMwIGFuZCBvbmx5IHdoZW4gYWNwaQo+ID4+PnN1 Y2Nlc3NmdWxseSB3ZW50IGludG8gdGhlIHN1c3BlbmQgc3RhdGUgaW4gcGxhdGZvcm1fc3VzcGVu ZF9vcHMtPmVudGVyIGl0Cj4gPj4+Z2V0cyBzZXQgdG8gdGhlIHZhbHVlIG9mIGFjcGlfdGFyZ2V0 X3N5c3RlbV9zdGF0ZS4gQW5kIHRoZW4gcmVzZXQgb25jZSB0aGUKPiA+Pj5yZXN1bWUgaGFzIGNv bXBsZXRlZC4gSSB0aGluayB0aGF0IHdvdWxkIGJlIHdoYXQgd2UnZCB3YW50IGhlcmUuCj4gPj5X ZSBuZWVkIHRvIG5ldyBmdW5jdGlvbnMgbGlrZSB0aGUgYWJvdmUsIGJlY2F1c2Ugc29tZSB0aGlu Z3MgYWxyZWFkeSBkZXBlbmQKPiA+Pm9uIGFjcGlfdGFyZ2V0X3N5c3RlbV9zdGF0ZSB3b3JraW5n IHRoZSB3YXkgaXQgZG9lcyBjdXJyZW50bHkuCj4gPj4KPiA+Pkkgc2VlIG5vIHJlYXNvbiB0byBt YWtlIHRoYXQgQUNQSS1zcGVjaWZpYywgdGhvdWdoLCBpbiBwcmluY2lwbGUuCj4gPj4KPiA+Pj5B bnl3YXkgSSdsbCBwdWxsIGluIEFuaW1lc2ggc2VyaWVzIG1lYW53aGlsZSwgYW1lbmRlZCB3aXRo IGEgRklYTUUgY29tbWVudC4KPiA+PkZpbmUgYnkgbWUuCj4gPj4KPiA+PlRoYW5rcywKPiA+PlJh ZmFlbAo+ID4+Cj4gPj4KPiA+Pj4+Pk9uIFdlZCwgU2VwIDIzLCAyMDE1IGF0IDY6MjggUE0sIERh bmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4gd3JvdGU6Cj4gPj4+Pj4+QWN0dWFsbHkgYWRk IFJhZmFlbCB0aGlzIHRpbWUgYXJvdW5kIC4uLgo+ID4+Pj4+Pi1EYW5pZWwKPiA+Pj4+Pj4KPiA+ Pj4+Pj5PbiBXZWQsIFNlcCAyMywgMjAxNSBhdCA2OjI3IFBNLCBEYW5pZWwgVmV0dGVyIDxkYW5p ZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4+Pj4+Pj5PbiBXZWQsIFNlcCAyMywgMjAxNSBhdCA5OjU3 IEFNLCBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4+Pj4+Pj4+T24g VGh1LCBTZXAgMTcsIDIwMTUgYXQgMTI6NTM6MjFBTSArMDUzMCwgQW5pbWVzaCBNYW5uYSB3cm90 ZToKPiA+Pj4+Pj4+Pj5PbiA5LzE0LzIwMTUgMToxNiBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToK PiA+Pj4+Pj4+Pj4+T24gRnJpLCBTZXAgMTEsIDIwMTUgYXQgMTI6MzY6MjRBTSArMDUzMCwgQW5p bWVzaCBNYW5uYSB3cm90ZToKPiA+Pj4+Pj4+Pj4+Pk9uIDkvMTAvMjAxNSA4OjE1IFBNLCBEYW5p ZWwgVmV0dGVyIHdyb3RlOgo+ID4+Pj4+Pj4+Pj4+Pk9uIFRodSwgU2VwIDEwLCAyMDE1IGF0IDAx OjU4OjU0QU0gKzA1MzAsIEFuaW1lc2ggTWFubmEgd3JvdGU6Cj4gPj4+Pj4+Pj4+Pj4+Pk9uIDkv Mi8yMDE1IDI6MjQgUE0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPj4+Pj4+Pj4+Pj4+Pj5PbiBX ZWQsIEF1ZyAyNiwgMjAxNSBhdCAwNzo0MDo1NFBNICswNTMwLCBBbmltZXNoIE1hbm5hIHdyb3Rl Ogo+ID4+Pj4+Pj4+Pj4+Pj4+Pk9uIDgvMjYvMjAxNSA2OjQwIFBNLCBEYW5pZWwgVmV0dGVyIHdy b3RlOgo+ID4+Pj4+Pj4+Pj4+Pj4+Pj5PbiBXZWQsIEF1ZyAyNiwgMjAxNSBhdCAwMTozNjowNUFN ICswNTMwLCBBbmltZXNoIE1hbm5hIHdyb3RlOgo+ID4+Pj4+Pj4+Pj4+Pj4+Pj4+RG1jIHdpbGwg cmVzdG9yZSB0aGUgY3NyIHByb2dyYW0gZXhjZXB0IERDOSwgY29sZCBib290LAo+ID4+Pj4+Pj4+ Pj4+Pj4+Pj4+d2FybSByZXNldCwgUENJIGZ1bmN0aW9uIGxldmVsIHJlc2V0LCBhbmQgaGliZXJu YXRlL3N1c3BlbmQuCj4gPj4+Pj4+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PmludGVs X2Nzcl9sb2FkX3Byb2dyYW0oKSBmdW5jdGlvbiBpcyB1c2VkIHRvIGxvYWQgdGhlIGZpcm13YXJl Cj4gPj4+Pj4+Pj4+Pj4+Pj4+Pj5kYXRhIGZyb20ga2VybmVsIG1lbW9yeSB0byBjc3IgYWRkcmVz cyBzcGFjZS4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+Pj4+Pj4+QWxsIHZhbHVl cyBvZiBjc3IgYWRkcmVzcyBzcGFjZSB3aWxsIGJlIHplcm8gaWYgaXQgZ290IHJlc2V0IGFuZAo+ ID4+Pj4+Pj4+Pj4+Pj4+Pj4+dGhlIGZpcnN0IGJ5dGUgb2YgY3NyIHByb2dyYW0gaXMgYWx3YXlz IGEgbm9uLXplcm8gaWYgZmlybXdhcmUKPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PmlzIGxvYWRlZCBzdWNj ZXNzZnVseS4gQmFzZWQgb24gaGFyZHdhcmUgc3RhdHVzIHdpbGwgbG9hZCB0aGUKPiA+Pj4+Pj4+ Pj4+Pj4+Pj4+PmZpcm13YXJlLgo+ID4+Pj4+Pj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4+Pj4+ Pj5XaXRob3V0IHRoaXMgY29uZGl0aW9uIGNoZWNrIGlmIHdlIG92ZXJ3cml0ZSB0aGUgZmlybXdh cmUgZGF0YSB0aGUKPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PmNvdW50ZXJzIGV4cG9zZWQgZm9yIGRjNS9k YzYgKGhlbHAgZm9yIGRlYnVnZ2luZykgd2lsbCBiZSBudWxsaWZpZWQuCj4gPj4+Pj4+Pj4+Pj4+ Pj4+QmFjYXVzZSBvZiB0aGUgYWJvdmUgcmVhc29uIG1lbnRpb25lZCBqdXN0IGFib3ZlIHdlIG5l ZWQgdG8gYmxvY2sgZmlybXdhcmUgbG9hZGluZyBhZ2Fpbi4KPiA+Pj4+Pj4+Pj4+Pj4+Pj5TbyBv bmx5IFdBUk5fT04gd2lsbCBub3QgaGVscC4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+ Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PnYxOiBJbml0aWFsIHZlcnNpb24uCj4gPj4+Pj4+Pj4+ Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PnYyOiBCYXNlZCBvbiByZXZpZXcgY29tbWVudHMg ZnJvbSBEYW5pZWwsCj4gPj4+Pj4+Pj4+Pj4+Pj4+Pj4tIEFkZGVkIGEgY2hlY2sgdG8ga25vdyBo YXJkd2FyZSBzdGF0dXMgYW5kIGxvYWQgdGhlIGZpcm13YXJlIGlmIG5vdCBsb2FkZWQuCj4gPj4+ Pj4+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5p ZWwudmV0dGVyQGludGVsLmNvbT4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PkNjOiBEYW1pZW4gTGVzcGlh dSA8ZGFtaWVuLmxlc3BpYXVAaW50ZWwuY29tPgo+ID4+Pj4+Pj4+Pj4+Pj4+Pj4+Q2M6IEltcmUg RGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PkNjOiBTdW5pbCBL YW1hdGggPHN1bmlsLmthbWF0aEBpbnRlbC5jb20+Cj4gPj4+Pj4+Pj4+Pj4+Pj4+Pj5TaWduZWQt b2ZmLWJ5OiBBbmltZXNoIE1hbm5hIDxhbmltZXNoLm1hbm5hQGludGVsLmNvbT4KPiA+Pj4+Pj4+ Pj4+Pj4+Pj4+PlNpZ25lZC1vZmYtYnk6IFZhdGhzYWxhIE5hZ2FyYWp1IDx2YXRoc2FsYS5uYWdh cmFqdUBpbnRlbC5jb20+Cj4gPj4+Pj4+Pj4+Pj4+Pj4+Pj4tLS0KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+ PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3NyLmMgfCA5ICsrKysrKysrKwo+ID4+Pj4+ Pj4+Pj4+Pj4+Pj4+ICAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCj4gPj4+Pj4+Pj4+ Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9jc3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Nzci5jCj4gPj4+ Pj4+Pj4+Pj4+Pj4+Pj5pbmRleCBiYTFhZTAzLi42ODJjYzI2IDEwMDY0NAo+ID4+Pj4+Pj4+Pj4+ Pj4+Pj4+LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3NyLmMKPiA+Pj4+Pj4+Pj4+ Pj4+Pj4+PisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Nzci5jCj4gPj4+Pj4+Pj4+ Pj4+Pj4+Pj5AQCAtMjUyLDYgKzI1MiwxNSBAQCB2b2lkIGludGVsX2Nzcl9sb2FkX3Byb2dyYW0o c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PiAgICAgICAgICAgICAg cmV0dXJuOwo+ID4+Pj4+Pj4+Pj4+Pj4+Pj4+ICAgICAgfQo+ID4+Pj4+Pj4+Pj4+Pj4+Pj4+KyAg ICAgLyoKPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PisgICAgICAqIERtYyB3aWxsIHJlc3RvcmUgdGhlIGNz ciB0aGUgcHJvZ3JhbSBleGNlcHQgREM5LCBjb2xkIGJvb3QsCj4gPj4+Pj4+Pj4+Pj4+Pj4+Pj4r ICAgICAgKiB3YXJtIHJlc2V0LCBQQ0kgZnVuY3Rpb24gbGV2ZWwgcmVzZXQsIGFuZCBoaWJlcm5h dGUvc3VzcGVuZC4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+PisgICAgICAqIFRoaXMgY29uZGl0aW9uIHdp bGwgaGVscCB0byBjaGVjayBpZiBjc3IgYWRkcmVzcyBzcGFjZSBpcyByZXNldC8KPiA+Pj4+Pj4+ Pj4+Pj4+Pj4+PisgICAgICAqIG5vdCBsb2FkZWQuCj4gPj4+Pj4+Pj4+Pj4+Pj4+Pj4rICAgICAg Ki8KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+QXRtIHdlIGNhbGwgdGhpcyBmcm9tIGRyaXZlciBsb2FkIGFu ZCByZXN1bWUsIHdoaWNoIGRvZXNuIHNlZW0gdG8gY292ZXIKPiA+Pj4+Pj4+Pj4+Pj4+Pj4+YWxs IHRoZSBjYXNlcyB5b3UgbWVudGlvbiBpbiB0aGUgY29tbWVudC4gU2hvdWxkIHRoaXMgYmUgYSBX QVJOX09OCj4gPj4+Pj4+Pj4+Pj4+Pj4+Pmluc3RlYWQ/IE9yIGRvIHdlIGhhdmUgdHJvdWJsZXMg aW4gb3VyIGluaXQgc2VxdWVuY2Ugd2hlcmUgd2UgbG9hZCB0b28KPiA+Pj4+Pj4+Pj4+Pj4+Pj4+ bWFueSB0aW1lcz8KPiA+Pj4+Pj4+Pj4+Pj4+Pj5ZZXMsIHRoZSBhYm92ZSBzdGF0ZW1lbnQgdGFr ZW4gZnJvbSBic3BlYyB0byBkZXNjcmliZSBhYm91dCB0aGUgc3BlY2lhbCBjYXNlcyBkbWMgd2ls bCBub3QgcmVzdG9yZSB0aGUgZmlybXdhcmUuCj4gPj4+Pj4+Pj4+Pj4+Pj4+QWdyZWUsIEluIG91 ciBjYXNlcyBjb2xkIGJvb3QgYW5kIGhpYmVybmF0ZS9zdXNwZW5kIG1haW5seSB3ZSBuZWVkIHRv IGxvYWQgdGhlIGZpcm13YXJlIGFnYWluLCBzbyBpbiBteQo+ID4+Pj4+Pj4+Pj4+Pj4+PnNlY29u ZCBzZW50ZW5jZSBJIHdhbnRlZCB0byBjb21tZW50IG1haW5seSByZWdhcmRpbmcgdGhpcyBjb25k aXRpb24gY2hlY2sgYWRkZWQgZm9yIHN1c3BlbmQtaGliZXJuYXRlKHJlc2V0KQo+ID4+Pj4+Pj4+ Pj4+Pj4+PmFuZCBjb2xkIGJvb3Qobm90IGxvYWRlZCkuCj4gPj4+Pj4+Pj4+Pj4+Pj4+Cj4gPj4+ Pj4+Pj4+Pj4+Pj4+QW55d2F5cyB0aGUgc2FtZSBhcGkgbGF0ZXIgY2FuIGJlIHVzZWQgdG8gbG9h ZCB0aGUgZmlybXdhcmUgZnJvbSBhbnl3aGVyZSwgc28gbXkgaW50ZW50aW9uIHRvIGNoZWNrIGZp cm13YXJlIGxvYWRlZCBvciBub3QuCj4gPj4+Pj4+Pj4+Pj4+Pj4+SWYgYWxyZWFkeSBsb2FkZWQg dGhlbiBub3QgdG8gb3ZlcndyaXRlIHRoZSBjc3IgYWRkcmVzcyBzcGFjZSB0byBtYWludGFpbiB0 aGUgZGM1L2RjNiBjb3VudGVyIHZhbHVlLgo+ID4+Pj4+Pj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+ Pj4+PkNhbiB0aGUgYmVsb3cgY29tbWVudCBtb3JlIGNsZWFyIHRvIHlvdS4KPiA+Pj4+Pj4+Pj4+ Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+Pj4gICAgICAgIC8qCj4gPj4+Pj4+Pj4+Pj4+Pj4+ICAgICAg ICAgKiBEbWMgd2lsbCByZXN0b3JlIHRoZSBjc3IgdGhlIHByb2dyYW0gZXhjZXB0IERDOSwgY29s ZCBib290LAo+ID4+Pj4+Pj4+Pj4+Pj4+PiAgICAgICAgICogd2FybSByZXNldCwgUENJIGZ1bmN0 aW9uIGxldmVsIHJlc2V0LCBhbmQgaGliZXJuYXRlL3N1c3BlbmQuCj4gPj4+Pj4+Pj4+Pj4+Pj4+ ICAgICAgICAgKiBJZiBmaXJtd2FyZSBpcyByZXN0b3JlZCBieSBkbWMgdGhlbiBubyBuZWVkIHRv IGxvYWQgYWdhaW4gd2hpY2gKPiA+Pj4+Pj4+Pj4+Pj4+Pj4gICAgICAgICAqIHdpbGwga2VlcCB0 aGUgZGM1L2RjNiBjb3VudGVyIGV4cG9zZWQgYnkgZmlybXdhcmUuCj4gPj4+Pj4+Pj4+Pj4+Pj4+ ICAgICAgICAgKi8KPiA+Pj4+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+Pj5ObyBpc3N1ZSBp biBpbml0IHNlcXVlbmNlLgo+ID4+Pj4+Pj4+Pj4+Pj4+VGhhdCBzZWVtcyB0byBzdGlsbCBjb3Zl ciBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIGZ1bmN0aW9uIGFmYWljcyAtIHdlIGRvCj4gPj4+Pj4+ Pj4+Pj4+Pj5wY2kgcmVzZXRzIG92ZXIgc3VzcGVuZCByZXN1bWUgdW5jb25kaXRpb25hbGx5LiBT byBJIHN0aWxsIGRvbid0Cj4gPj4+Pj4+Pj4+Pj4+Pj51bmRlcnN0YW5kIHdoZXJlIGV4YWN0bHkg d2UgdHJ5IHRvIGxvYWQgdGhlIGRtYyBmaXJtd2FyZSBpbiBpOTE1LmtvIHdoZW4KPiA+Pj4+Pj4+ Pj4+Pj4+Pml0J3MgYWxyZWFkeSBsb2FkZWQuCj4gPj4+Pj4+Pj4+Pj4+PkR1cmluZyByZXN1bWUg aW50ZWxfY3NyX2xvYWRfcHJvZ3JhbSgpIHdpbGwgYmUgY2FsbGVkIGZyb20KPiA+Pj4+Pj4+Pj4+ Pj4+aW50ZWxfcnVudGltZV9yZXN1bWUoKS4KPiA+Pj4+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pj4+ PmludGVsX3J1bnRpbWVfcmVzdW1lKCktPiBza2xfcmVzdW1lX3ByZXBhcmUoKS0+IGludGVsX2Nz cl9sb2FkX3Byb2dyYW0oKQo+ID4+Pj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+Pj4+RHVyaW5nIFBj MTAgZW50cnkgdGVzdGluZyBJIGNhbiBzZWUgZG1jIGlzIHJlc3RvcmluZyBiYWNrIHRoZSBmaXJt d2FyZSBhbHdheXMsCj4gPj4+Pj4+Pj4+Pj4+PmJ1dCBhcyB5b3UgbWVudGlvbmVkIHBjaS1yZXNl dCBjYW4gaGFwcGVuIHVuY29uZGl0aW9uYWxseSwgYnV0IHN0aWxsIHRoZW4KPiA+Pj4+Pj4+Pj4+ Pj4+YWxzbyBkdXJpbmcgcmVzdW1lIGludGVsX3J1bnRpbWVfcmVzdW1lKCkgd2lsbCBiZSBjYWxs ZWQgYW5kIGJhc2VkIG9uCj4gPj4+Pj4+Pj4+Pj4+PnJlZ2lzdGVyIHJlYWQgb2YgY3NyLWJhc2Ut YWRkcmVzcyBmaXJtd2FyZSBsb2FkaW5nIHdpbGwgaGFwcGVuLgo+ID4+Pj4+Pj4+Pj4+PkJ1dCBp biB5b3VyIGNvbW1lbnQgeW91J3JlIHNheWluZyBpdCB3b24ndCBnZXQgcmVzdG9yZWQgaW4gY2Fz ZSBvZiBkYzkgYW5kCj4gPj4+Pj4+Pj4+Pj4+c3VzcGVuZC4gU28gdGhhdCBzZWVtcyB0byBtaXNt YXRjaCB3aGF0IHlvdSdyZSBzYXlpbmcgaGVyZSAoYW5kIHdoYXQgdGhlCj4gPj4+Pj4+Pj4+Pj4+ Y29tbWl0IG1lc3NhZ2Ugc2F5cykgYW5kIHdoYXQgdGhlIGNvZGUgZG9lcy4gQW5kIHRoaXMgZnVu Y3Rpb24gaGVyZSBpcwo+ID4+Pj4+Pj4+Pj4+PmNhbGxlZCBmb3IgcmVzdW1lIGFmdGVyIHN1c3Bl bmQvaGliZXJuYXRlIG9ubHkuCj4gPj4+Pj4+Pj4+Pj5wYzEwIGVudHJ5IGV4cGxhbmF0aW9uIEkg dG9sZCBpcyBmb3Igc2t5bGFrZS4gZGM5IGluIHNreWxha2UgaXMgbm90IHBvc3NpYmxlLgo+ID4+ Pj4+Pj4+Pj4+SSB0aGluayB5b3UgYXJlIGNvbmZ1c2luZyBiZXR3ZWVuIGRjNiBhbmQgZGM5LiBQ YzEwIGNhbiBiZSBhY2hpZXZlZCBieQo+ID4+Pj4+Pj4+Pj4+ZW50ZXJpbmcgaW50byBkYzYgKG5v dCBkYzkpIGZvciBza3lsYWtlLiBkYzkgaXMgdGhlIGxvd2VzdCBwb3NzaWJsZSBzdGF0ZQo+ID4+ Pj4+Pj4+Pj4+Zm9yIGJyb3h0b24gd2hpY2ggaXMgbm90IHByZXNlbnQgZm9yIHNreWxha2UuCj4g Pj4+Pj4+Pj4+PkkgaGF2ZSBubyBpZGVhIGF0IGFsbCBhYm91dCBkaWZmZXJlbnQgcGMgbGV2ZWxz IG9uIHNrbC4gV2hhdCBJJ20gdGFsa2luZwo+ID4+Pj4+Pj4+Pj5hYm91dCBpcyBzeXN0ZW0gc3Vz cGVuZC9yZXN1bWUgYW5kIGRyaXZlciBsb2FkLCB3aGljaCBhcmUgdGhlIHBsYWNlcyB0aGlzCj4g Pj4+Pj4+Pj4+PmZ1bmN0aW9uIGdldHMgY2FsbGVkLiBBdCBsZWFzdCBhZmFpY3MuCj4gPj4+Pj4+ Pj4+Pgo+ID4+Pj4+Pj4+Pj4+SGVyZSBpbnRlbF9jc3JfbG9hZF9wcm9ncmFtKCkgd2lsbCBiZSB1 c2VkIGZvciBib3RoIHNreWxha2UgYW5kIGJyb3h0b24sIGFuZCBpbnN0cnVjdGlvbgo+ID4+Pj4+ Pj4+Pj4+ZXhlY3V0aW9uIGZsb3cgd2lsbCBiZSBkaWZmZXJlbnQgaW4gY2FzZSBvZiBzdXNwZW5k L3Jlc3VtZSB3aGljaCBJIHRoaW5rIGlzIGNvbmZ1c2luZwo+ID4+Pj4+Pj4+Pj4+eW91Lgo+ID4+ Pj4+Pj4+Pj5UaGF0IHNlZW1zIGxpa2UgcmVhbGx5IGltcG9ydGFudCBpbmZvcm1hdGlvbi4gV2hh dCdzIGRpZmZlcmVudCBvbiBieHQ/Cj4gPj4+Pj4+Pj4+PlRoZXNlIGFyZSB0aGUga2luZCBvZiBk ZXRhaWxzIHlvdSBzaG91bGQgZXhwbGFpbiBpbiB0aGUgY29tbWl0IG1lc3NhZ2UgLi4uCj4gPj4+ Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj4+SSBhbSByZWFkeSBleHBsYWluIHlvdSBpbiBkZXRhaWwuIEl0 IHdpbGwgYmUgZ29vZCBpZiB3ZSBkaXNjdXNzIHNwZWNpZmljIHVzZS1jYXNlIHNjZW5hcmlvCj4g Pj4+Pj4+Pj4+Pj5hbmQgaXR6IHNvZnR3YXJlIGRlc2lnbiBmb3Igc3BlY2lmaWMgcGxhdGZvcm0u IEFub3RoZXIgcG9pbnQgLSBhcyBkbWMgcmVsYXRlZCBjb2RlIGZvcgo+ID4+Pj4+Pj4+Pj4+YnJv eHRvbiBpcyBub3QgbWVyZ2VkIGJldHRlciBmaXJzdCB3ZSBjbG9zZSBkZXNpZ24gZm9yIHNreWxh a2UuIE5vdywgSSBoYXZlIGFkZGVkIGRjOQo+ID4+Pj4+Pj4+Pj4+ZGVzY3JpcHRpb24gaW4gY29t bWVudCB0aGlua2luZyBvZiBmdXR1cmUuIElmIHlvdSB3YW50IEkgY2FuIHJlbW92ZSBmb3Igbm93 IGFuZCBsYXRlcgo+ID4+Pj4+Pj4+Pj4+Y2FuIGFkZCBpbiBieHQgcGF0Y2ggc2VyaWVzIGZvciBl bmFibGluZyBkbWMuIFdpbGwgd2FpdCBmb3IgeW91ciByZXBseS4KPiA+Pj4+Pj4+Pj4+VGhpcyBx dWVzdGlvbiBoZXJlIGlzbid0IGFib3V0IHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgaG93IHRvIGhh bmRsZSBwb3dlcgo+ID4+Pj4+Pj4+Pj53ZWxscyBpbiBza2wvYnh0LiBUaGF0J3MgYSBzZXBhcmF0 ZSBkaXNjdXNzaW9uIGFuZCB0cmFja2VkIHNvbWV3aGVyZSBlbHNlLgo+ID4+Pj4+Pj4+Pj5JJ20g cmVhbGx5IGp1c3QgY29uZnVzZWQgYWJvdXQgd2hlbiBleGFjdGx5IHdlIG5lZWQgdG8gcmVsb2Fk IHRvIGZpcm13YXJlLAo+ID4+Pj4+Pj4+Pj5hbmQgd2h5IHdlIG5lZWQgYSBydW50aW1lIGNoZWNr IGZvciB0aGF0LiBOb3JtYWxseSB3ZSBzaG91bGQga25vdyB3aGVuIHRvCj4gPj4+Pj4+Pj4+PnJl bG9hZCB0aGUgZmlybXdhcmUgYW5kIGp1c3QgZWl0aGVyIHJlbG9hZCBvciBub3QsIHdpdGhvdXQg Y2hlY2tpbmcgaHcKPiA+Pj4+Pj4+Pj4+c3RhdGUuIEFuZCBJIGRvbid0IGxpa2UgY2hlY2tpbmcg Zm9yIGh3IHN0YXRlIHNpbmNlIGF0IGxlYXN0IGluIHRoZSBwYXN0Cj4gPj4+Pj4+Pj4+PnRoYXQg a2luZCBvZiBjb2RlIGVuZGVkIHVwIGJlaW5nIGZyYWdpbGUgLSBpdCdzIGFuIGlsbHVzaW9uIHRo YXQgaXQgZG9lcwo+ID4+Pj4+Pj4+Pj50aGUgcmlnaHQgdGhpbmcgbm8gbWF0dGVyIHdoYXQsIHNp bmNlIG9mdGVuIHRoZXJlJ3Mgb3RoZXIgdHJpY2t5IG9yZGVyaW5nCj4gPj4+Pj4+Pj4+PmNvbnN0 cmFpbnRzLiBBbmQgaWYgeW91IGhhdmUgYXV0b21hdGljIGR1Y3QtdGFwZSBsaWtlIHRoZW4gbm8g b25lIHdpbGwKPiA+Pj4+Pj4+Pj4+ZXZlciBzcG90IHRob3NlIG90aGVyLCBoYXJkZXIgdG8gc3Bv dCBpc3N1ZXMsIHVudGlsIGFuIGV4cGVuc2l2ZSBjdXN0b21lcgo+ID4+Pj4+Pj4+Pj5lc2NhbGF0 aW9uIGhhcHBlbnMuCj4gPj4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+Pj5TbyB3aGF0IEkgd2FudCB0byBr bm93IGhlcmUgaXM6Cj4gPj4+Pj4+Pj4+Pi0gV2hlbiBleGFjdGx5IGRvIHdlIG5lZWQgdG8gcmVs b2FkIGRtYyBmaXJtd2FyZS4KPiA+Pj4+Pj4+Pj5JbiBza2wsIGR1cmluZyBkcml2ZXIgbG9hZCBm aXJzdCB0aW1lIHdlIGxvYWQgdGhlIGZpcm13YXJlLCBkdXJpbmcgbm9ybWFsCj4gPj4+Pj4+Pj4+ c3VzcGVuZC1yZXN1bWUgKGRjNiBlbnRyeS9leGl0KQo+ID4+Pj4+Pj4+Pm5vIG5lZWQgdG8gcmVs b2FkIHRoZSBmaXJtd2FyZSBhZ2FpbiBhcyBkbWMgd2lsbCB0YWtlIGNhcmUgb2YgaXQuIEJ1dCBk dXJpbmcKPiA+Pj4+Pj4+Pj5zdXNwZW5kL2hpYmVybmF0aW9uCj4gPj4+Pj4+Pj4+ZG1jIHdpbGwg bm90IHJlc3RvcmUgdGhlIGZpcm13YXJlLiBJbiB0aGF0IGNhc2UgZHJpdmVyIG5lZWQgdG8gcmVs b2FkIGl0Cj4gPj4+Pj4+Pj4+YWdhaW4uIEkgZG8gbm90IGtub3cKPiA+Pj4+Pj4+Pj5ob3cgdG8g ZGlmZmVyZW50aWF0ZSBwbS1zdXNwZW5kIGFuZCBzdXNwZW5kLWhpYmVybmF0aW9uIGFuZCB0aG91 Z2h0IGJvdGggdGhlCj4gPj4+Pj4+Pj4+Y2FzZXMKPiA+Pj4+Pj4+Pj5pbnRlbF9ydW50aW1lX3Jl c3VtZSgpIHdpbGwgYmUgY2FsbGVkIHdoZXJlIHdlIGNhbiBjaGVjayB0aGUgaC93IHN0YXRlIGFu ZAo+ID4+Pj4+Pj4+PnJlbG9hZCB0aGUKPiA+Pj4+Pj4+Pj5maXJtd2FyZSBpZiBkbWMgaXMgbm90 IHJlc3RvcmVkLgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PkluIGJ4dCwgZHVyaW5nIGRyaXZlciBs b2FkIGZpcnN0IHRpbWUgd2UgbG9hZCB0aGUgZmlybXdhcmUsIGR1cmluZyBub3JtYWwKPiA+Pj4+ Pj4+Pj5zdXNwZW5kLXJlc3VtZQo+ID4+Pj4+Pj4+PmRpc3BsYXkgZW5naW5lIHdpbGwgZW50ZXIg aW50byBkYzkgYW5kIGRtYyB3aWxsIG5vdCByZXN0b3JlIHRoZSBmaXJtd2FyZS4gU28KPiA+Pj4+ Pj4+Pj5ldmVyeQo+ID4+Pj4+Pj4+PnN1c3BlbmQtcmVzdW1lIHdlIG5lZWQgdG8gcmVsb2FkIHRo ZSBmaXJtd2FyZS4KPiA+Pj4+Pj4+Pj4+LSBXaGF0IGV4YWN0bHkgaXMgdGhlIHJlYXNvbiB3aHkg d2UgY2FuJ3QgbWFrZSB0aGF0IGRlY2lzaW9uIHN0YXRpY2FsbHkgaW4KPiA+Pj4+Pj4+Pj4+ICAg dGhlIGNvZGUgKGJ5IGNhbGxpbmcgY3NyX2xvYWQgYXQgdGhlIHJpZ2h0IHNwb3RzKS4KPiA+Pj4+ Pj4+Pj5BcyBJIG1lbnRpb25lZCBiZWZvcmUgaW4gY2FzZSBvZiBza3lsYWtlIGNhbiB3ZSBkaWZm ZXJlbnRpYXRlIGJldHdlZW4KPiA+Pj4+Pj4+Pj4icmVzdW1lIGZyb20gcG0tc3VzcGVuZCIgd2l0 aCAicmVzdW1lIGZyb20gc3VzcGVuZC1oaWJlcm5hdGlvbiIgaW5zaWRlCj4gPj4+Pj4+Pj4+ZHJp dmVyPwo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PkluIGNhc2Ugb2YgYnJveHRvbiwgZXZlcnkgdGlt ZSB3ZSBuZWVkIHRvIHJlbG9hZCwgc28gd2UgY2FuIGRlY2lkZQo+ID4+Pj4+Pj4+PnN0YXRpY2Fs bHkuCj4gPj4+Pj4+Pj5PZiBjb3Vyc2Ugd2UgY2FuIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhbGwg dGhlIGRpZmZlcmVudCByZXN1bWUgcGF0aHMsIGFuZAo+ID4+Pj4+Pj4+d2UgYWxzbyBoYXZlIGEg cGVyLXBsYXRmb3JtIHNwbGl0IHRvIHRha2UgY2FyZSBvZiBieHQgdnMuIHNrbC4gQW5kIHRoZXJl Cj4gPj4+Pj4+Pj5hcmUgYWN0dWFsbHkgMyBkaWZmZXJlbnQgcmVzdW1lIHBhdGhzOgo+ID4+Pj4+ Pj4+Cj4gPj4+Pj4+Pj4tIHJ1bnRpbWUgUE0gcmVzdW1lLiBUaGlzIGNhbGxzIHRoZSBydW50aW1l X3Jlc3VtZSBob29rLiBJdCBzb3VuZHMgbGlrZSBvbgo+ID4+Pj4+Pj4+ICAgc2tsIHdlIHNob3Vs ZCBfbm90XyBsb2FkIHRoZSBjc3IgZmlybXdhcmUsIGJ1dCBvbiBieHQgd2Ugc2hvdWxkIGxvYWQg aXQuCj4gPj4+Pj4+Pj4gICBUaGlzIGNhbiBiZSBmaXhlZCBieSByZW1vdmluZyB0aGUgaW50ZWxf Y3NyX2xvYWRfcHJvZ3JhbSBjYWxsIGZyb20KPiA+Pj4+Pj4+PiAgIHNrbF9yZXN1bWVfcHJlcGFy ZS4KPiA+Pj4+Pj4+Pi0gcmVzdW1lIGZyb20gaGliZXJuYXRlLXRvLWRpc2sgKGkuZS4gc3lzdGVt IGNvbXBsZXRlbHkgb2ZmLCBzdGF0ZSBzdG9yZWQKPiA+Pj4+Pj4+PiAgIG9uIHRoZSBzd2FwIHBh cnRpdGlvbikgaXMgZG9uZSBieSBjYWxsaW5nIHRoZSB0aGF3IGNhbGxiYWNrcy4KPiA+Pj4+Pj4+ Pi0gcmVzdW1lIGZyb20gc3VzcGVuZC10by1tZW0gKGkuZS4gc3lzdGVtIGluIGxvdy1wb3dlciB3 aXRoIG9ubHkgbWVtb3J5Cj4gPj4+Pj4+Pj4gICBpbiBzZWxmLXJlZnJlc2gsIGFsbCBzdGF0ZSBz dG9yZWQgaW4gbWVtb3J5KSBpcyBkb25lIGJ5IGNhbGxpbmcgdGhlCj4gPj4+Pj4+Pj4gICByZXN1 bWUgY2FsbGJhY2tzLgo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj5Gb3IgaTkxNSB3ZSB1c2UgdW5pZmll ZCBoYW5kbGVycyBpbiBvdXIgZGV2X3BtX29wcyBmb3IgYm90aCB0aGF3IGFuZAo+ID4+Pj4+Pj4+ cmVzdW1lLCBidXQgaXQgc291bmRzIGxpa2UgdGhhdCB3b24ndCBiZSBhIHByb2JsZW0gZm9yIHNr bC9ieHQgc2luY2Ugd2UKPiA+Pj4+Pj4+Pm5lZWQgdG8gcmVsb2FkIHRoZSBjc3IgZmlybXdhcmUg aW4gYWxsIGNhc2VzLiBBbHRob3VnaCBJJ20gbm90IHBlcmZlY3RseQo+ID4+Pj4+Pj4+c3VyZSBz aW5jZSB5b3UgZG9uJ3QgZXhwbGFpbiB3aGF0IGtpbmQgb2YgcmVzdW1lIHlvdSBtZWFuIGV4YWN0 bHkgKHNpbmNlCj4gPj4+Pj4+Pj55b3UgZG9uJ3QgdXNlIHRoZSBsaW51eCBuYW1lcyBmb3IgdGhl bSkuCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PkFueXdheSBpdCBzb3VuZHMgbGlrZSB3ZSBjYW4gcmVw bGFjZSB0aGlzIHBhdGNoIGJ5IG9uZSB3aGVyZSB3ZSByZW1vdmUKPiA+Pj4+Pj4+PnRoYXQgZXJy b3Jub3VzIGNzciBsb2FkIGNhbGwgZnJvbSBza2wgcnVudGltZSBwbSByZXN1bWUgYW5kIHRoYXQn cyBhbGwuCj4gPj4+Pj4+Pj5CdXQgSSBzdWdnZXN0IHRvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhpcyBy aWdodCB3ZSBrZWVwIHRoZSBjaGVjayB5b3UncmUKPiA+Pj4+Pj4+PmFkZGluZyBoZXJlLCBidXQg d3JhcCBpdCBpbiBhIFdBUk5fT04uIFRoZW4gd2UnbGwgZ2V0IGEgYmFja3RyYWNlIHdoZW4KPiA+ Pj4+Pj4+PnRoaXMgaXMgZ29pbmcgd3JvbmcgYWdhaW4uIExpa2UgdGhpczoKPiA+Pj4+Pj4+Pgo+ ID4+Pj4+Pj4+ICAgICAgICAgaWYgKFdBUk5fT04oY3NyX2xvYWRlZF9hbHJlYWR5KCkpKQo+ID4+ Pj4+Pj4+ICAgICAgICAgICAgICAgICByZXR1cm47Cj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PkFsc28g d2hlbiByZWRvaW5nIHRoZSBjb21taXRzIHBsZWFzZSBleHBsYWluIGluIGRldGFpbCB3aGF0IGV4 YWN0bHkgYXJlCj4gPj4+Pj4+Pj50aGUgcmVxdWlyZW1lbnRzIGxpa2UgeW91J3ZlIGRvbmUgYWJv dmUsIGJ1dCBwbGVhc2UgdXNlIHRoZSBzdGFuZGFyZCBsaW51eAo+ID4+Pj4+Pj4+bmFtZXMsIGku ZS4gInJ1bnRpbWUgUE0iIGFuZCAiaGliZXJuYXRlLXRvLWRpc2siIGFuZCAic3VzcGVuZC10by1t ZW0iLgo+ID4+Pj4+Pj5PayBob29yYXkgdGhlcmUncyBtb3JlIHN1c3BlbmQtdG8tc29tZXRoaW5n IHRoaW5ncyBJJ3ZlIHRvdGFsbHkgbWlzc2VkOgo+ID4+Pj4+Pj4tIHN1c3BlbmQtdG8taWRsZSAo ZG9uZSBieSBjYXQgZnJlZXplID4gL3N5cy9wb3dlci9zdGF0ZSkgYW5kCj4gPj4+Pj4+Pi0gc3Vz cGVuZCAoZG9uZSBieSBjYXQgc3VzcGVuZCA+IC9zeXMvcG93ZXIvc3RhdGUpCj4gPj4+Pj4+Pgo+ ID4+Pj4+Pj5BbmQgYXBwYXJlbnRseSB0aGVyZSdzIHJlYWxseSBubyB3YXkgdG8gZHJpdmVycyB0 byB0ZWxsIHRoZW0gYXBhcnQuCj4gPj4+Pj4+PlJhZmFlbCwgaXMgdGhlcmUgcmVhbGx5IG5vIHdh eSBmb3IgZHJpdmVycyB0byB0YWtlIGRpZmZlcmVudCBwYXRocyBmb3IKPiA+Pj4+Pj4+dGhlc2Ug MyBzdXNwZW5kIGNhc2VzPyBJIHRyaWVkIGdyZXBwaW5nIGZvciBQTV9TVVNQRU5EX09OL1NUQU5E WS9NRU0KPiA+Pj4+Pj4+YW5kIGRpZG4ndCBzcG90IGFueXRoaW5nLgo+ID4+Pj4+Pj4KPiA+Pj4+ Pj4+QWxzbyB3ZSdyZSBjb21wbGV0ZWx5IG1pc3NpbmcgdGVzdCBjb3ZlcmFnZSBmb3IgdGhhdCBp biBpZ3QuIFRoYXQgaXMKPiA+Pj4+Pj4+c29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZml4ZWQg YXNhcCAoeWV0IGFub3RoZXIgY2FzZSBvZgo+ID4+Pj4+Pj5jb21iaW5hdG9yaWFsIGV4cGxvc2lv biBpbiBpZ3QgdGVzdHMsIHlheSkuIEFuZCBhdCBsZWFzdCBvbmUgb2YgdGhvc2UKPiA+Pj4+Pj4+ c3VzcGVuZC10by1pZGxlIHRlc3RjYXNlIGJldHRlciBiZSBpbiB0aGUgQkFULgo+ID4+Pj4+Pj4t RGFuaWVsCj4gPj4+Pj4+Pi0tCj4gPj4+Pj4+PkRhbmllbCBWZXR0ZXIKPiA+Pj4+Pj4+U29mdHdh cmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCj4gPj4+Pj4+Pis0MSAoMCkgNzkgMzY1IDU3 IDQ4IC0gaHR0cDovL2Jsb2cuZmZ3bGwuY2gKPiA+Pj4+Pj4tLQo+ID4+Pj4+PkRhbmllbCBWZXR0 ZXIKPiA+Pj4+Pj5Tb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiA+Pj4+Pj4r NDEgKDApIDc5IDM2NSA1NyA0OCAtIGh0dHA6Ly9ibG9nLmZmd2xsLmNoCj4gCgotLSAKRGFuaWVs IFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cu ZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK