From mboxrd@z Thu Jan 1 00:00:00 1970 From: Felix Kuehling Subject: Re: [PATCH 1/2] drm/amdgpu: Moved fault hash table to amdgpu vm Date: Mon, 10 Sep 2018 15:10:04 -0400 Message-ID: <8cee8563-2df9-1075-3113-66135cbd14fd@amd.com> References: <1536290910-6476-1-git-send-email-Oak.Zeng@amd.com> <12913b70-925d-2e17-2dc2-491ed8592610@amd.com> <546c9911-b7af-03c8-b5e2-f2bb07932c0b@gmail.com> <89e7515f-53f1-9f10-aeb6-7fc1b8df2702@amd.com> <9b6b78aa-c98a-a741-7ce2-0e7811e1f806@amd.com> <143b57c2-12d1-8cb1-ddea-a8fe7226e1c4@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <143b57c2-12d1-8cb1-ddea-a8fe7226e1c4-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Content-Language: en-CA List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: christian.koenig-5C7GfCeVMHo@public.gmane.org, "Zeng, Oak" , Oak Zeng , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "Yang, Philip" SSdtIG5vdCBzdXJlIHdoeSB5b3UgbmVlZCB0byBkaXN0aW5ndWlzaCBjdXJyZW50IGFuZCBmdXR1 cmUgc3RhdGUgd2hlbgpkZWFsaW5nIHdpdGggcGFnZSBmYXVsdHMuIFdoZW4geW91IGdldCBhIHBh Z2UgZmF1bHQsIHlvdSBrbm93IHRoYXQgdGhlCkdQVSBpcyB0cnlpbmcgdG8gYWNjZXNzIG1lbW9y eSByaWdodCBub3csIGluIHRoZSBwcmVzZW50LiBTbyB5b3UncmUKYWx3YXlzIHdvcmtpbmcgd2l0 aCB0aGUgY3VycmVudCBzdGF0ZS4gV2hlbiB0aGUgQ1BVIHBhZ2UgdGFibGUgY2hhbmdlcywKeW91 IGdldCBhbiBNTVUgbm90aWZpZXIgdGhhdCBhbGxvd3MgeW91IHRvIGludmFsaWRhdGUgdGhlIGNv cnJlc3BvbmRpbmcKR1BVIFBURXMuIElmIHlvdSBoYXZlIGEgdmFsaWQgR1BVIFBURSwgaXQgYWx3 YXlzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQKc3RhdGVzIGFuZCBpcyBpbiBzeW5jIHdpdGggdGhl IENQVSBwYWdlIHRhYmxlLiBJZiB0aGUgR1BVIHBhZ2UgdGFibGUgaXMKZXZlciBvdXRkYXRlZCwg aXQgc2hvdWxkIGhhdmUgYW4gaW52YWxpZCBlbnRyeSBpbiB0aGF0IHBsYWNlLgoKSWYgU0RNQSBp cyB1c2VkIHRvIHVwZGF0ZSB0aGUgR1BVIFBURXMsIHRoZXJlIGlzIGEgZGVsYXkuIFRoZSBNTVUK bm90aWZpZXIgaXMgc3luY2hyb25vdXMsIHNvIGl0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0uIFlv dSBqdXN0IHdhaXQgZm9yCnRoZSBTRE1BIGpvYiB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5n LiBXaGVuIHVwZGF0aW5nIFBURXMgd2l0aCBuZXcKdmFsaWQgYWRkcmVzc2VzLCBpdCdzIGFzeW5j aHJvbm91cy4gQnV0IHRoZSBHUFUgd2lsbCBjb250aW51ZSByZXRyeWluZwpvbiB0aGUgaW52YWxp ZCBlbnRyeSB1bnRpbCBTRE1BIGZpbmlzaGVzLiBTbyBpdCdzIGFsc28gaW1wbGljaXRseQpzeW5j aHJvbml6ZWQgb24gdGhlIEdQVSBzaWRlLgoKUmVnYXJkcywKwqAgRmVsaXgKCgpPbiAyMDE4LTA5 LTEwIDA1OjQyIEFNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+IEhpIEZlbGl4ICYgT2FrLAo+ Cj4gb3ZlciB0aGUgd2Vla2VuZCBJIGhhZCB0aGUgaWRlYSB0aGF0IHdlIGNvdWxkIGp1c3QgdXNl IHRoZSBzaGFkb3cgQk9zCj4gdG8gaGF2ZSB0aGUgY3VycmVudCBzdGF0ZSBpbiBhIHBhZ2UgZmF1 bHQuIFRoZXkgYXJlIEdUVCBCT3MgYW5kIENQVQo+IGFjY2Vzc2libGUgYW55d2F5Lgo+Cj4gUmVn YXJkcywKPiBDaHJpc3RpYW4uCj4KPiBBbSAwOC4wOS4yMDE4IHVtIDA5OjM0IHNjaHJpZWIgQ2hy aXN0aWFuIEvDtm5pZzoKPj4gSGkgRmVsaXgsCj4+Cj4+PiBCdXQgd2h5IGRvIHlvdSB3YW50IHRv IHVwZGF0ZSBwYWdlIHRhYmxlcyB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgdXNlcgo+Pj4gbW9kZSBj b250ZXh0IHRoYXQgY2FyZXMgYWJvdXQgdGhlbT8gSXMgdGhpcyBqdXN0IHRvIGFsbG93IHBlbmRp bmcgd29yawo+Pj4gdG8gY29tcGxldGUgYWZ0ZXIgdGhlIHVzZXIgbW9kZSBjb250ZXh0IGlzIGdv bmU/IFRvIHByZXZlbnQgaGFuZ3M/Cj4+Cj4+IFRoZSBwcm9ibGVtIEknbSBzZWUgaXMgdGhhdCB3 ZSBzdGlsbCBkb24ndCBoYXZlIGEgcmVsaWFibGUgd2F5IG9mCj4+IGtpbGxpbmcgYSBjb21tYW5k IHN1Ym1pc3Npb24gd2hpbGUgbWFraW5nIHN1cmUgdGhhdCBubyBtb3JlIGZhdWx0cyBvZgo+PiBp dCBhcmUgaW4gdGhlIGZsaWdodC4KPj4KPj4gRS5nLiB0aGUgSFdTIGhhcyBhIGZ1bmN0aW9uIHRv IGtpbGwgYSBydW5uaW5nIGpvYiBvbiB0aGUgaGFyZHdhcmUsCj4+IGJ1dCB0aGF0IG9ubHkgd29y a3MgZm9yIGNvbXB1dGUgYW5kIHRoZXJlIGlzIG5vIHdheSBvZiB0ZWxsaW5nIHdoZW4KPj4gdGhh dCBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLgo+Pgo+PiBCdXQgT2FrIGhhcyBhbHJlYWR5IGNvbnZp bmNlZCBtZSB0aGF0IHdlIHNob3VsZCBwcm9iYWJseSB3b3JrIG9uIHRoYXQKPj4gaW5zdGVhZCBv ZiB0cnlpbmcgdG8ga2VlcCB0aGUgVk0gYWxpdmUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KPj4KPj4g UmVnYXJkcywKPj4gQ2hyaXN0aWFuLgo+Pgo+PiBBbSAwOC4wOS4yMDE4IHVtIDAyOjI3IHNjaHJp ZWIgRmVsaXggS3VlaGxpbmc6Cj4+PiBIaSBDaHJpc3RpYW4sCj4+Pgo+Pj4gSSdtIG5vdCBzdXJl IEkgZ2V0IHlvdXIgcG9pbnQgaGVyZS4KPj4+Cj4+PiBBcyBJIHVuZGVyc3RhbmQgaXQsIHRoZSBh bWRncHVfdm0gc3RydWN0dXJlIHJlcHJlc2VudHMgdGhlIHVzZXIgbW9kZSBWTQo+Pj4gY29udGV4 dC4gSXQgaGFzIHRoZSBwb2ludGVycyB0byB0aGUgcm9vdCBwYWdlIGRpcmVjdG9yeSBhbmQgdGhl IHJlc3Qgb2YKPj4+IHRoZSBwYWdlIHRhYmxlIGhpZXJhcmNoeS4gSWYgdGhlcmUgaXMgbm8gYW1k Z3B1X3ZtLCB0aGVyZSBpcyBubyB1c2VyCj4+PiBtb2RlIGNvbnRleHQgdGhhdCBjYXJlcyBhYm91 dCB0aGUgcGFnZSB0YWJsZXMuCj4+Pgo+Pj4gSWYgd2UgbGVhdmUgdGhlIHBhZ2UgdGFibGUgcG9p bnRlcnMgaW4gdGhlIGFtZGdwdV92bSwgdGhlbiBoYW5kbGluZwo+Pj4gZmF1bHRzIGFmdGVyIHRo ZSBWTSBpcyBkZXN0cm95ZWQgaXMgcG9pbnRsZXNzLiBXZSBjYW4ndCBmaW5kIHRoZSBwYWdlCj4+ PiB0YWJsZXMgYW5kIHdlIGNhbid0IHVwZGF0ZSB0aGVtLCBzbyB0aGVyZSBpcyBub3RoaW5nIHdl IGNhbiBkbyBpbgo+Pj4gcmVzcG9uc2UgdG8gVk0gZmF1bHRzLgo+Pj4KPj4+IFNvIEknbSBndWVz c2luZyB0aGF0IHlvdSB3YW50IHRvIG1vdmUgdGhlIHBhZ2UgdGFibGUgcG9pbnRlcnMgaW50byBh Cj4+PiBkaWZmZXJlbnQgc3RydWN0dXJlIHRoYXQgZXhpc3RzIGhhbGYtaW5kZXBlbmRlbnRseSBv ZiB0aGUgVk0uIEl0IHdvdWxkCj4+PiBiZSBjcmVhdGVkIHdoZW4gdGhlIFZNIGlzIGNyZWF0ZWQg KHRoYXQncyB3aGVyZSB3ZSBjdXJyZW50bHkgYWxsb2NhdGUKPj4+IHRoZSBQQVNJRCkgYnV0IGNh biBiZSBkZXN0cm95ZWQgc2xpZ2h0bHkgbGF0ZXIuCj4+Pgo+Pj4gQnV0IHdoeSBkbyB5b3Ugd2Fu dCB0byB1cGRhdGUgcGFnZSB0YWJsZXMgd2hlbiB0aGVyZSBpcyBubyBtb3JlIHVzZXIKPj4+IG1v ZGUgY29udGV4dCB0aGF0IGNhcmVzIGFib3V0IHRoZW0/IElzIHRoaXMganVzdCB0byBhbGxvdyBw ZW5kaW5nIHdvcmsKPj4+IHRvIGNvbXBsZXRlIGFmdGVyIHRoZSB1c2VyIG1vZGUgY29udGV4dCBp cyBnb25lPyBUbyBwcmV2ZW50IGhhbmdzPwo+Pj4KPj4+IFJlZ2FyZHMsCj4+PiDCoMKgIEZlbGl4 Cj4+Pgo+Pj4gT24gMjAxOC0wOS0xMCAwNzoyMCBBTSwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToK Pj4+Pj4gQW0gSSByaWdodCB0aGF0IHRoZSBoYW5kbGluZyBvZiBwYWdlIGZhdWx0IG5lZWQgYSB2 YWxpZCBWTT8KPj4+PiBObywgZXhhY3RseSB0aGF0IHZpZXcgaXMgaW5jb3JyZWN0Lgo+Pj4+Cj4+ Pj4gVGhlIFZNIGlzIG1lYW50IHRvIGJlIGEgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlIG9m IHBhZ2UgdGFibGVzIGFuZAo+Pj4+IGlzIGNvbXBsZXRlbHkgcG9pbnRsZXNzIGZhdWx0IHByb2Nl c3NpbmcgYmVjYXVzZSBpdCByZXByZXNlbnQgdGhlCj4+Pj4gZnV0dXJlIHN0YXRlIG9mIHRoZSBw YWdlIHRhYmxlcyBhbmQgbm90IHRoZSBjdXJyZW50IG9uZS4KPj4+Pgo+Pj4+IFdoYXQgd2UgbmVl ZCBmb3IgZmF1bHQgcHJvY2Vzc2luZyBpcyBhIG5ldyBzdHJ1Y3R1cmUgYnVpbGQgYXJvdW5kCj4+ Pj4gUEFTSURzIHdoaWNoIGlzIGZlZWQgYnkgdGhlIHdpdGggYWRkcmVzc2VzIHdoZW4gcGFnZSB0 YWJsZXMgYXJlIG1vdmVkCj4+Pj4gYXJvdW5kLgo+Pj4+Cj4+Pj4gQWx0ZXJuYXRpdmVseSBJIGhv cGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSBTRE1BIHRvIHdhbGsgdGhlIHBhZ2UgdGFibGVzCj4+Pj4g YW5kIHVwZGF0ZSB0aGUgcmVxdWlyZWQgZW50cmllcyBieSBqdXN0IHVzaW5nIHRoZSBhZGRyZXNz Lgo+Pj4+Cj4+Pj4gUmVnYXJkcywKPj4+PiBDaHJpc3RpYW4uCj4+Pj4KPj4+PiBBbSAwNy4wOS4y MDE4IHVtIDE2OjU1IHNjaHJpZWIgWmVuZywgT2FrOgo+Pj4+PiBIaSBDaHJpc3RpYW4sCj4+Pj4+ Cj4+Pj4+Cj4+Pj4+IFdoYXQgaXMgdGhlIHZhbHVlIG9mIGRlbGF5IHRoZSBkZXN0cm95IG9mIGhh c2ggdG8gYWZ0ZXIgdm0gaXMKPj4+Pj4gZGVzdHJveWVkPyBTaW5jZSB2bSBpcyBkZXN0cm95ZWQs IHlvdSBiYXNpY2FsbHkgZG9u4oCZdCBoYXZlIGVub3VnaAo+Pj4+PiBpbmZvcm1hdGlvbiB0byBw YWdpbmcgaW4gdGhlIGNvcnJlY3QgcGFnZSB0byBncHV2bS4gQW0gSSByaWdodCB0aGF0Cj4+Pj4+ IHRoZSBoYW5kbGluZyBvZiBwYWdlIGZhdWx0IG5lZWQgYSB2YWxpZCBWTT8gRm9yIGV4YW1wbGUs IHlvdSBuZWVkIHRoZQo+Pj4+PiBWTSB0byBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgcGh5c2ljYWwg YWRkcmVzcyBvZiB0aGUgZmF1bHR5IHBhZ2UuCj4+Pj4+Cj4+Pj4+Cj4+Pj4+IEFmdGVyIHZtIGlz IGRlc3Ryb3llZCwgdGhlIHJldHJ5IGludGVycnVwdCBjYW4gYmUgZGlyZWN0bHkgZGlzY2FyZCBh cwo+Pj4+PiB5b3UgY2Fu4oCZdCBmaW5kIHZtIHRocm91Z2ggcGFzaWQuIFlvdSBjYW4gdGhpbmsg dGhpcyBpcyBhbHNvIG9uZSBraW5kCj4+Pj4+IG9mIHByZXNjcmVlbi4KPj4+Pj4KPj4+Pj4KPj4+ Pj4gU28gSSBhbSBzdGFuZCBmb3IgdGhlIHBvaW50IHRoYXQsIHRoZXJlIGlzIG5vIG5lZWQgdG8g ZGVsYXkgdGhlCj4+Pj4+IGRlc3Ryb3kgb2YgaGFzaCB0byBhZnRlciB2bSBpcyBkZXN0cm95ZWQu IFByZXNjcmVlbmluZyBoYXNoIGNhbiBiZQo+Pj4+PiBkZXN0cm95ZWQgYXQgdGhlIHRpbWUgb2Yg dm1fZmluaS4KPj4+Pj4KPj4+Pj4KPj4+Pj4gVGhhbmtzLAo+Pj4+Pgo+Pj4+PiBPYWsKPj4+Pj4K Pj4+Pj4KPj4+Pj4gKkZyb206KkNocmlzdGlhbiBLw7ZuaWcgPGNrb2VuaWcubGVpY2h0enVtZXJr ZW5AZ21haWwuY29tPgo+Pj4+PiAqU2VudDoqIEZyaWRheSwgU2VwdGVtYmVyIDA3LCAyMDE4IDQ6 MzkgQU0KPj4+Pj4gKlRvOiogWmVuZywgT2FrIDxPYWsuWmVuZ0BhbWQuY29tPjsgT2FrIFplbmcg PHplbmdzaGFuanVuQGdtYWlsLmNvbT47Cj4+Pj4+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4+Pj4+ICpDYzoqIFplbmcsIE9hayA8T2FrLlplbmdAYW1kLmNvbT4KPj4+Pj4gKlN1Ympl Y3Q6KiBSZTogW1BBVENIIDEvMl0gZHJtL2FtZGdwdTogTW92ZWQgZmF1bHQgaGFzaCB0YWJsZSB0 bwo+Pj4+PiBhbWRncHUgdm0KPj4+Pj4KPj4+Pj4KPj4+Pj4gSGkgT2FrLAo+Pj4+Pgo+Pj4+PiB5 ZWFoLCBidXQgdGhpcyBpcyBzdGlsbCBhIE5BSy4gTWFraW5nIHRoZSBoYXNoIHBlciBQQVNJRCB3 YXMgbm90IGEKPj4+Pj4gc3VnZ2VzdGlvbiBidXQgcmF0aGVyIGEgbXVzdCBoYXZlLgo+Pj4+Pgo+ Pj4+PiBUaGUgVk0gc3RydWN0dXJlcyBtdXN0IGJlIGRlc3Ryb3llZCB3aGlsZSB0aGUgcHJvY2Vz c2luZyBpcyBzdGlsbAo+Pj4+PiBvbmdvaW5nLCBvciBvdGhlcndpc2Ugd2Ugd291bGQgbm90IGhh dmUgYSBjbGVhbiBPT00gaGFuZGxpbmcuCj4+Pj4+Cj4+Pj4+IFRoZSBJRFIgZm9yIFBBU0lEIGxv Y2t1cCBjYW4gYmUgcHV0IGludG8gYW1kZ3B1X2lkcy5jLCB5b3UgY2FuIGp1c3QKPj4+Pj4gcmVw bGFjZSB0aGUgSURBIGFscmVhZHkgdXNlZCB0aGVyZSB3aXRoIGFuIElEUi4KPj4+Pj4KPj4+Pj4g U2luY2UgdGhlIFBBU0lEIGlzIGFscmVhZHkgZnJlZWQgdXAgZGVsYXllZCB3ZSBzaG91bGQgaGF2 ZSB0aGUgZ3JhY2UKPj4+Pj4gcGVyaW9kIGZvciBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBpbmNsdWRl ZC4gSWYgdGhhdCBzdGlsbCBpc24ndAo+Pj4+PiBzdWZmaWNpZW50IHdlIGNhbiBzdGlsbCBhZGQg c29tZSBkZWxheWVkIHdvcmsgZm9yIHRoaXMuCj4+Pj4+Cj4+Pj4+IFJlZ2FyZHMsCj4+Pj4+IENo cmlzdGlhbi4KPj4+Pj4KPj4+Pj4gQW0gMDcuMDkuMjAxOCB1bSAwNjoxNiBzY2hyaWViIG96ZW5n Ogo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoCBIaSBDaHJpc3RpYW4sCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg IEluIHRoaXMgaW1wbGVtZW50YXRpb24sIGZhdWx0IGhhc2ggaXMgbWFkZSBwZXIgdm0sIG5vdCBw ZXIgcGFzaWQKPj4+Pj4gwqDCoMKgwqAgYXMgc3VnZ2VzdGVkLCBiYXNlZCBvbiBiZWxvdyBjb25z aWRlcmF0aW9uczoKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgICogRGVsYXkgdGhlIGRlc3Ryb3kg b2YgaGFzaCBpbnRyb2R1Y2VzIG1vcmUgZWZmb3J0IGxpa2UgaG93IHRvCj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgc2V0IHRoZSBwcm9wZXIgZ3JhY2UgcGVyaW9kIGFmdGVyIHdoaWNoIG5vIHJldHJ5 IGludGVycnVwdAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIHdpbGwgYmUgZ2VuZXJhdGVkLiBXZSB3 YW50IHRvIGF2b2lkIHRob3NlIGNvbXBsaWNhdGlvbiBpZiB3ZQo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgIGNhbi4KPj4+Pj4gwqDCoMKgwqDCoMKgICogVGhlwqAgcHJvYmxlbSBvZiB0aGUgcGVyIHZt IGltcGxlbWVudGF0aW9uIGlzIHRoYXQgaXQgaXMgaGFyZAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg IHRvIGRlbGF5IHRoZSBkZXN0cm95IG9mIGZhdWx0IGhhc2gsIGJlY2F1c2Ugd2hlbiB2bSBpcwo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIGRlc3Ryb3llZCwgcHJlc2NyZWVuIGZ1bmN0aW9uIHdvbid0 IGJlIGFibGUgdG8gcmV0cmlldmUgdGhlCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgZmF1bHQgaGFz aC4gQnV0IGluIHRoaXMgY2FzZSwgdGhlIHByZXNjcmVlbiBmdW5jdGlvbiBjYW4KPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCBlaXRoZXIgbGV0IHRoZSBpbnRlcnJ1cHQgZ28gdGhyb3VnaCAodG8gZ21j KSBvciBpZ25vcmUgaXQuCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgRnJvbSB0aGlzIHBlcnNwZWN0 aXZlLCBpdCBpcyBub3QgdmVyeSBuZWNlc3NhcnkgdG8gZGVsYXkgdGhlCj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgZGVzdHJveSBvZiBoYXNoIHRhYmxlLgo+Pj4+PiDCoMKgwqDCoMKgwqAgKiBPbiB0 aGUgb3RoZXIgaGFuZCwgc2luY2UgQVNJQ3MgYWZ0ZXIgdmVnYTEwIGhhdmUgdGhlIEhXIENBTQo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIGZlYXR1cmUuIFNvIHRoZSBTVyBJViBwcmVzY3JlZW4gaXMg b25seSB1c2VmdWwgZm9yIHZlZ2ExMC4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBGb3IgYWxsIHRo ZSBIVyBpbXBsZW1lbnRlZCBDQU0sIHdlIGNhbiBjb25zaWRlciB0aGUgZGVsYXllZAo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgIENBTSBhY2tub3dsZWRnbWVudC4KPj4+Pj4gwqDCoMKgwqDCoMKgICog TWFraW5nIGl0IHBlciBwYXNpZCBuZWVkIHRvIGludHJvZHVjZSBhbm90aGVyIGlkciB0bwo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgIGNvcnJlbGF0ZSBwYXNpZCBhbmQgaGFzaCB0YWJsZSAtIHdoZXJl IHRvIHB1dCB0aGUgaWRyPyBZb3UKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCB3aWxsIGhhdmUgdG8g bWFrZSBpdCBhIGdsb2JhbCB2YXJpYWJsZSB3aGljaCBpcyBub3QgdmVyeQo+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgIGRlc2lyYWJsZS4KPj4+Pj4KPj4+Pj4gwqDCoMKgwqAgVGhlIG1haW4gcHVycG9z ZSBvZiB0aGlzIHBhdGNoIGlzIHRvIHNvbHZlIHRoZSBpbnRlci1wcm9jZXNzCj4+Pj4+IGxvY2sK Pj4+Pj4gwqDCoMKgwqAgaXNzdWUgKHdoZW4gaGFzaCB0YWJsZSBpcyBmdWxsKSwgd2hpbGUgc3Rp bGwga2VlcCBjb2RlcyBzaW1wbGUuCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgIEFsc28gd2l0aCB0aGlz IHBhdGNoLCB0aGUgZmF1bHRzIGtmaWZvIGlzIG5vdCBuZWNlc3NhcnkgYW55Cj4+Pj4+IG1vcmUu Cj4+Pj4+IMKgwqDCoMKgIFNlZSBwYXRjaCAyLgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoCBSZWdhcmRz LAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoCBPYWsKPj4+Pj4KPj4+Pj4KPj4+Pj4gwqDCoMKgwqAgT24g MDkvMDYvMjAxOCAxMToyOCBQTSwgT2FrIFplbmcgd3JvdGU6Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgSW4gc3RlYWQgb2Ygc2hhcmUgb25lIGZhdWx0IGhhc2ggdGFibGUgcGVyIGRldmlj ZSwgbWFrZSBpdAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIHBlciB2bS4gVGhpcyBjYW4g YXZvaWQgaW50ZXItcHJvY2VzcyBsb2NrIGlzc3VlIHdoZW4gZmF1bHQKPj4+Pj4KPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCBoYXNoIHRhYmxlIGlzIGZ1bGwuCj4+Pj4+Cj4+Pj4+Cj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgQ2hhbmdlLUlkOiBJNWQxMjgxYjdjNDFlZGRjOGUyNjExM2UwMTA1MTY1NTc1 ODhkMzcwOAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIFNpZ25lZC1vZmYtYnk6IE9hayBa ZW5nIDxPYWsuWmVuZ0BhbWQuY29tPgo+Pj4+PiA8bWFpbHRvOk9hay5aZW5nQGFtZC5jb20+Cj4+ Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgU3VnZ2VzdGVkLWJ5OiBDaHJpc3RpYW4gS29uaWcg PENocmlzdGlhbi5Lb2VuaWdAYW1kLmNvbT4KPj4+Pj4gPG1haWx0bzpDaHJpc3RpYW4uS29lbmln QGFtZC5jb20+Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgU3VnZ2VzdGVkLWJ5OiBGZWxp eCBLdWVobGluZyA8RmVsaXguS3VlaGxpbmdAYW1kLmNvbT4KPj4+Pj4gPG1haWx0bzpGZWxpeC5L dWVobGluZ0BhbWQuY29tPgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0tLQo+Pj4+Pgo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2loLmMgfMKgIDc1Cj4+Pj4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+Pgo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2loLmgg fMKgIDEwIC0tLS0KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jIHwgMTAyCj4+Pj4+ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmggfMKgIDEyICsrKysKPj4+Pj4KPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3ZlZ2ExMF9paC5jIHzCoCAz OCArKysrKy0tLS0tLS0KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIDUgZmlsZXMgY2hh bmdlZCwgMTI3IGluc2VydGlvbnMoKyksIDExMCBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4KPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X2loLmMKPj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf aWguYwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIGluZGV4IDA2MzczZDQuLjRlZDg2MjEg MTAwNjQ0Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2loLmMKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArKysg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWguYwo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgIEBAIC0xOTcsNzggKzE5NywzIEBAIGludCBhbWRncHVfaWhfcHJvY2Vzcyhz dHJ1Y3QKPj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldikKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIMKgIHJldHVybiBJUlFfSEFORExFRDsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIH0KPj4+Pj4KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtLyoqCj4+Pj4+Cj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqAgLSAqIGFtZGdwdV9paF9hZGRfZmF1bHQgLSBBZGQgYSBwYWdlIGZh dWx0IHJlY29yZAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKgo+Pj4+Pgo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgIC0gKiBAYWRldjogYW1kZ3B1IGRldmljZSBwb2ludGVyCj4+Pj4+Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIEBrZXk6IDY0LWJpdCBlbmNvZGluZyBvZiBQQVNJRCBh bmQgYWRkcmVzcwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKgo+Pj4+Pgo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgIC0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIHJldHJ5IHBh Z2UgZmF1bHQKPj4+Pj4gaW50ZXJydXB0IGlzCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg LSAqIHJlY2VpdmVkLiBJZiB0aGlzIGlzIGEgbmV3IHBhZ2UgZmF1bHQsIGl0IHdpbGwgYmUKPj4+ Pj4gYWRkZWQgdG8gYSBoYXNoCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIHRhYmxl LiBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYQo+Pj4+PiBuZXcg ZmF1bHQsIG9yCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIGEgZmF1bHQgdGhhdCB3 YXMgYWxyZWFkeSBrbm93biBhbmQgaXMgYWxyZWFkeSBiZWluZwo+Pj4+PiBoYW5kbGVkLgo+Pj4+ Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg IC0gKiBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgcGVuZGluZyBwYWdlIGZhdWx0cywgdGhpcyB3aWxs Cj4+Pj4+IGZhaWwuIFJldHJ5Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIGludGVy cnVwdHMgc2hvdWxkIGJlIGlnbm9yZWQgaW4gdGhpcyBjYXNlIHVudGlsIHRoZXJlCj4+Pj4+IGlz IGVub3VnaAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBmcmVlIHNwYWNlLgo+Pj4+ Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg IC0gKiBSZXR1cm5zIDAgaWYgdGhlIGZhdWx0IHdhcyBhZGRlZCwgMSBpZiB0aGUgZmF1bHQgd2Fz Cj4+Pj4+IGFscmVhZHkga25vd24sCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIC1F Tk9TUEMgaWYgdGhlcmUgYXJlIHRvbyBtYW55IHBlbmRpbmcgZmF1bHRzLgo+Pj4+Pgo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgIC0gKi8KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtaW50IGFt ZGdwdV9paF9hZGRfZmF1bHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHU2NAo+Pj4+PiBr ZXkpCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLXsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCAtwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKg wqDCoCAtwqAgaW50IHIgPSAtRU5PU1BDOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0K Pj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgaWYgKFdBUk5fT05fT05DRSghYWRldi0+ aXJxLmloLmZhdWx0cykpCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgwqDCoMKgwqDC oMKgwqDCoCAvKiBTaG91bGQgYmUgYWxsb2NhdGVkIGluIDxJUD5faWhfc3dfaW5pdCBvbgo+Pj4+ PiBHUFVzIHRoYXQKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiBzdXBwb3J0IHJldHJ5IGZhdWx0cyBhbmQgcmVxdWlyZSByZXRyeQo+Pj4+PiBmaWx0 ZXJpbmcuCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgwqDCoMKgwqDCoMKgwqDCoMKg ICovCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcjsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgLSBzcGluX2xvY2tfaXJxc2F2ZSgmYWRldi0+aXJxLmloLmZhdWx0cy0+bG9jaywg ZmxhZ3MpOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0KPj4+Pj4KPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCAtwqAgLyogT25seSBsZXQgdGhlIGhhc2ggdGFibGUgZmlsbCB1cCB0byA1MCUg Zm9yIGJlc3QKPj4+Pj4gcGVyZm9ybWFuY2UgKi8KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCAtwqAgaWYgKGFkZXYtPmlycS5paC5mYXVsdHMtPmNvdW50ID49ICgxIDw8Cj4+Pj4+IChBTURH UFVfUEFHRUZBVUxUX0hBU0hfQklUUy0xKSkpCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg LcKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIHVubG9ja19vdXQ7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgLQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCByID0gY2hhc2hfdGFi bGVfY29weV9pbigmYWRldi0+aXJxLmloLmZhdWx0cy0+aGFzaCwKPj4+Pj4ga2V5LCBOVUxMKTsK Pj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgaWYgKCFyKQo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgIC3CoMKgwqDCoMKgwqDCoMKgwqAgYWRldi0+aXJxLmloLmZhdWx0cy0+Y291 bnQrKzsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgLcKgIC8qIGNoYXNoX3RhYmxlX2NvcHlfaW4gc2hvdWxkIG5ldmVyIGZhaWwgdW5s ZXNzIHdlJ3JlCj4+Pj4+IGxvc2luZyBjb3VudCAqLwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgIC3CoCBXQVJOX09OX09OQ0UociA8IDApOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg IC0KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtdW5sb2NrX291dDoKPj4+Pj4KPj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCAtIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkZXYtPmlycS5paC5m YXVsdHMtPmxvY2ssIGZsYWdzKTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgcmV0 dXJuIHI7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLX0KPj4+Pj4KPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCAtCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLS8qKgo+Pj4+Pgo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBhbWRncHVfaWhfY2xlYXJfZmF1bHQgLSBSZW1vdmUgYSBw YWdlIGZhdWx0IHJlY29yZAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKgo+Pj4+Pgo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBAYWRldjogYW1kZ3B1IGRldmljZSBwb2ludGVyCj4+ Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLSAqIEBrZXk6IDY0LWJpdCBlbmNvZGluZyBvZiBQ QVNJRCBhbmQgYWRkcmVzcwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKgo+Pj4+Pgo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIHBh Z2UgZmF1bHQgaGFzIGJlZW4KPj4+Pj4gaGFuZGxlZC4gQW55Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgLSAqIGZ1dHVyZSBpbnRlcnJ1cHQgd2l0aCB0aGlzIGtleSB3aWxsIGJlIHByb2Nl c3NlZCBhcyBhCj4+Pj4+IG5ldwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKiBwYWdl IGZhdWx0Lgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0gKi8KPj4+Pj4KPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCAtdm9pZCBhbWRncHVfaWhfY2xlYXJfZmF1bHQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCj4+Pj4+IHU2NCBrZXkpCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg LXsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgdW5zaWduZWQgbG9uZyBmbGFnczsK Pj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAgaW50IHI7Cj4+Pj4+Cj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgLQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCBpZiAoIWFkZXYt PmlycS5paC5mYXVsdHMpCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm47Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLQo+Pj4+Pgo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgIC0gc3Bpbl9sb2NrX2lycXNhdmUoJmFkZXYtPmlycS5paC5mYXVs dHMtPmxvY2ssIGZsYWdzKTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtCj4+Pj4+Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIHIgPSBjaGFzaF90YWJsZV9yZW1vdmUoJmFkZXYtPmly cS5paC5mYXVsdHMtPmhhc2gsCj4+Pj4+IGtleSwgTlVMTCk7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgLcKgIGlmICghV0FSTl9PTl9PTkNFKHIgPCAwKSkgewo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgIC3CoMKgwqDCoMKgwqDCoMKgwqAgYWRldi0+aXJxLmloLmZhdWx0cy0+Y291 bnQtLTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtIFdBUk5fT05fT05DRShhZGV2LT5p cnEuaWguZmF1bHRzLT5jb3VudCA8IDApOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3C oCB9Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgIC0gc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRldi0+aXJxLmloLmZhdWx0cy0+bG9j aywgZmxhZ3MpOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC19Cj4+Pj4+Cj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9paC5oCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2loLmgK Pj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBpbmRleCBhMjNlMWMwLi5mNDExZmZiIDEwMDY0 NAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9paC5oCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2loLmgKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCBAQCAtMzIsMTMgKzMyLDYgQEAgc3RydWN0IGFtZGdwdV9kZXZpY2U7Cj4+Pj4+Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAjZGVmaW5lIEFNREdQVV9JSF9DTElFTlRJRF9MRUdBQ1kg MAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgI2RlZmluZSBBTURHUFVfSUhfQ0xJRU5U SURfTUFYIFNPQzE1X0lIX0NMSUVOVElEX01BWAo+Pj4+Pgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgIC0jZGVmaW5lIEFNREdQVV9QQUdFRkFVTFRfSEFTSF9CSVRTIDgKPj4+Pj4KPj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCAtc3RydWN0IGFtZGdwdV9yZXRyeWZhdWx0X2hhc2h0YWJsZSB7Cj4+ Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIERFQ0xBUkVfQ0hBU0hfVEFCTEUoaGFzaCwg QU1ER1BVX1BBR0VGQVVMVF9IQVNIX0JJVFMsCj4+Pj4+IDgsIDApOwo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgIC3CoCBzcGlubG9ja190wqDCoMKgwqAgbG9jazsKPj4+Pj4KPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCAtwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb3VudDsKPj4+Pj4K Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtfTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAt Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgIMKgICogUjZ4eCsgSUggcmluZwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIMKg ICovCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgQEAgLTU3LDcgKzUwLDYgQEAgc3RydWN0 IGFtZGdwdV9paF9yaW5nIHsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIGJvb2zC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdXNlX2Rvb3JiZWxsOwo+Pj4+Pgo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgYm9vbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1c2VfYnVzX2FkZHI7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDC oCBkbWFfYWRkcl90wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJiX2RtYV9hZGRyOyAvKiBvbmx5 IHVzZWQgd2hlbgo+Pj4+PiB1c2VfYnVzX2FkZHIgPSB0cnVlICovCj4+Pj4+Cj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgLcKgIHN0cnVjdCBhbWRncHVfcmV0cnlmYXVsdF9oYXNodGFibGUgKmZhdWx0 czsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH07Cj4+Pj4+Cj4+Pj4+Cj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgwqAjZGVmaW5lIEFNREdQVV9JSF9TUkNfREFUQV9NQVhfU0laRV9EVyA0 Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgQEAgLTk1LDcgKzg3LDUgQEAgaW50IGFtZGdw dV9paF9yaW5nX2luaXQoc3RydWN0Cj4+Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHVuc2lnbmVk IHJpbmdfc2l6ZSwKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCB1c2VfYnVzX2FkZHIpOwo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgdm9pZCBhbWRncHVfaWhfcmluZ19maW5pKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2KTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGludCBhbWRncHVfaWhf cHJvY2VzcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgLWludCBhbWRncHVfaWhfYWRkX2ZhdWx0KHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2LCB1NjQKPj4+Pj4ga2V5KTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtdm9pZCBh bWRncHVfaWhfY2xlYXJfZmF1bHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+Pj4+IHU2 NCBrZXkpOwo+Pj4+Pgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIMKgI2VuZGlmCj4+Pj4+ Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV92bS5jCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X3ZtLmMKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBpbmRleCAxZDdlM2MxLi44YjIy MGU5IDEwMDY0NAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMKPj4+Pj4KPj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCBAQCAtMjY5Miw2ICsyNjkyLDIyIEBAIHZvaWQgYW1kZ3B1X3ZtX2Fk anVzdF9zaXplKHN0cnVjdAo+Pj4+PiBhbWRncHVfZGV2aWNlICphZGV2LCB1aW50MzJfdCBtaW5f dm1fc2l6ZSwKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDC oCDCoGFkZXYtPnZtX21hbmFnZXIuZnJhZ21lbnRfc2l6ZSk7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqDCoCB9Cj4+Pj4+Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK3N0YXRpYyBz dHJ1Y3QgYW1kZ3B1X3JldHJ5ZmF1bHRfaGFzaHRhYmxlCj4+Pj4+ICppbml0X2ZhdWx0X2hhc2go dm9pZCkKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArewo+Pj4+Pgo+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgICvCoCBzdHJ1Y3QgYW1kZ3B1X3JldHJ5ZmF1bHRfaGFzaHRhYmxlICpmYXVsdF9o YXNoOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCArwqAgZmF1bHRfaGFzaCA9IGttYWxsb2Moc2l6ZW9mKCpmYXVsdF9oYXNoKSwgR0ZQ X0tFUk5FTCk7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIGlmICghZmF1bHRfaGFz aCkKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biBmYXVsdF9oYXNoOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsKPj4+Pj4KPj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCArwqAgSU5JVF9DSEFTSF9UQUJMRShmYXVsdF9oYXNoLT5oYXNoLAo+ Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEFNREdQVV9QQUdFRkFVTFRfSEFTSF9CSVRTLCA4LCAwKTsKPj4+Pj4KPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoCArwqAgc3Bpbl9sb2NrX2luaXQoJmZhdWx0X2hhc2gtPmxvY2spOwo+Pj4+ Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBmYXVsdF9oYXNoLT5jb3VudCA9IDA7Cj4+Pj4+ Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICvC oCByZXR1cm4gZmF1bHRfaGFzaDsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArfQo+Pj4+ Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IC8qKgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIMKgICogYW1kZ3B1X3ZtX2luaXQgLSBp bml0aWFsaXplIGEgdm0gaW5zdGFuY2UKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCDCoCAq Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgQEAgLTI3ODAsNiArMjc5NiwxMiBAQCBpbnQg YW1kZ3B1X3ZtX2luaXQoc3RydWN0Cj4+Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBh bWRncHVfdm0gKnZtLAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqDCoMKg wqDCoMKgIHZtLT5wYXNpZCA9IHBhc2lkOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg wqAgfQo+Pj4+Pgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCB2bS0+ZmF1bHRfaGFz aCA9IGluaXRfZmF1bHRfaGFzaCgpOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBp ZiAoIXZtLT5mYXVsdF9oYXNoKSB7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDC oMKgwqDCoMKgwqDCoCByID0gLUVOT01FTTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAr wqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyb3JfZnJlZV9yb290Owo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgICvCoCB9Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKwo+Pj4+Pgo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgSU5JVF9LRklGTyh2bS0+ZmF1bHRzKTsKPj4+Pj4K Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIHZtLT5mYXVsdF9jcmVkaXQgPSAxNjsKPj4+Pj4K Pj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBAQCAtMjk3Myw3ICsyOTk1LDcgQEAgdm9pZCBh bWRncHVfdm1fZmluaShzdHJ1Y3QKPj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwgc3RydWN0IGFt ZGdwdV92bSAqdm0pCj4+Pj4+Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgwqDCoCAvKiBD bGVhciBwZW5kaW5nIHBhZ2UgZmF1bHRzIGZyb20gSUggd2hlbiB0aGUgVk0gaXMKPj4+Pj4gZGVz dHJveWVkICovCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCB3aGlsZSAoa2ZpZm9f Z2V0KCZ2bS0+ZmF1bHRzLCAmZmF1bHQpKQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3C oMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2loX2NsZWFyX2ZhdWx0KGFkZXYsIGZhdWx0KTsKPj4+ Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV92bV9j bGVhcl9mYXVsdCh2bS0+ZmF1bHRfaGFzaCwgZmF1bHQpOwo+Pj4+Pgo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgIMKgwqAgaWYgKHZtLT5wYXNpZCkgewo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+Pj4+Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgQEAgLTI5ODMsNiArMzAwNSw5IEBAIHZvaWQgYW1kZ3B1X3Zt X2Zpbmkoc3RydWN0Cj4+Pj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCBhbWRncHVfdm0g KnZtKQo+Pj4+Pgo+Pj4+PiBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGV2LT52bV9tYW5hZ2Vy LnBhc2lkX2xvY2ssIGZsYWdzKTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIH0K Pj4+Pj4KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqAga2ZyZWUodm0tPmZhdWx0X2hh c2gpOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCB2bS0+ZmF1bHRfaGFzaCA9IE5V TEw7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgwqAgZHJtX3NjaGVkX2VudGl0eV9kZXN0cm95KCZ2bS0+ZW50aXR5KTsKPj4+Pj4K Pj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCDCoMKgIGlmICghUkJfRU1QVFlfUk9PVCgmdm0t PnZhLnJiX3Jvb3QpKSB7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgQEAgLTMxODMsMyAr MzIwOCw3OCBAQCB2b2lkCj4+Pj4+IGFtZGdwdV92bV9zZXRfdGFza19pbmZvKHN0cnVjdCBhbWRn cHVfdm0gKnZtKQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqDCoMKgwqDC oMKgIH0KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIH0KPj4+Pj4KPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArCj4+Pj4+Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKy8qKgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsg KiBhbWRncHVfdm1fYWRkX2ZhdWx0IC0gQWRkIGEgcGFnZSBmYXVsdCByZWNvcmQgdG8KPj4+Pj4g ZmF1bHQgaGFzaCB0YWJsZQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsgKgo+Pj4+Pgo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsgKiBAZmF1bHRfaGFzaDogZmF1bHQgaGFzaCB0YWJsZQo+ Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsgKiBAa2V5OiA2NC1iaXQgZW5jb2Rpbmcgb2Yg UEFTSUQgYW5kIGFkZHJlc3MKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICoKPj4+Pj4K Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBy ZXRyeSBwYWdlIGZhdWx0Cj4+Pj4+IGludGVycnVwdCBpcwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgICsgKiByZWNlaXZlZC4gSWYgdGhpcyBpcyBhIG5ldyBwYWdlIGZhdWx0LCBpdCB3aWxs IGJlCj4+Pj4+IGFkZGVkIHRvIGEgaGFzaAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsg KiB0YWJsZS4gVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEKPj4+ Pj4gbmV3IGZhdWx0LCBvcgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsgKiBhIGZhdWx0 IHRoYXQgd2FzIGFscmVhZHkga25vd24gYW5kIGlzIGFscmVhZHkgYmVpbmcKPj4+Pj4gaGFuZGxl ZC4KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICoKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCArICogSWYgdGhlcmUgYXJlIHRvbyBtYW55IHBlbmRpbmcgcGFnZSBmYXVsdHMsIHRo aXMgd2lsbAo+Pj4+PiBmYWlsLiBSZXRyeQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsg KiBpbnRlcnJ1cHRzIHNob3VsZCBiZSBpZ25vcmVkIGluIHRoaXMgY2FzZSB1bnRpbCB0aGVyZQo+ Pj4+PiBpcyBlbm91Z2gKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogZnJlZSBzcGFj ZS4KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICoKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCArICogUmV0dXJucyAwIGlmIHRoZSBmYXVsdCB3YXMgYWRkZWQsIDEgaWYgdGhlIGZh dWx0IHdhcwo+Pj4+PiBhbHJlYWR5IGtub3duLAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg ICsgKiAtRU5PU1BDIGlmIHRoZXJlIGFyZSB0b28gbWFueSBwZW5kaW5nIGZhdWx0cy4KPj4+Pj4K Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICovCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg K2ludCBhbWRncHVfdm1fYWRkX2ZhdWx0KHN0cnVjdAo+Pj4+PiBhbWRncHVfcmV0cnlmYXVsdF9o YXNodGFibGUgKmZhdWx0X2hhc2gsIHU2NCBrZXkpCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgK3sKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqAgdW5zaWduZWQgbG9uZyBmbGFn czsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqAgaW50IHIgPSAtRU5PU1BDOwo+Pj4+ Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAr wqAgaWYgKFdBUk5fT05fT05DRSghZmF1bHRfaGFzaCkpCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCAvKiBTaG91bGQgYmUgYWxsb2NhdGVkIGluIGFtZGdw dV92bV9pbml0Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDC oMKgICovCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gcjsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArCj4+Pj4+Cj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgK8KgIHNwaW5fbG9ja19pcnFzYXZlKCZmYXVsdF9oYXNoLT5sb2NrLCBmbGFn cyk7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgICvCoCAvKiBPbmx5IGxldCB0aGUgaGFzaCB0YWJsZSBmaWxsIHVwIHRvIDUwJSBmb3Ig YmVzdAo+Pj4+PiBwZXJmb3JtYW5jZSAqLwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICvC oCBpZiAoZmF1bHRfaGFzaC0+Y291bnQgPj0gKDEgPDwKPj4+Pj4gKEFNREdQVV9QQUdFRkFVTFRf SEFTSF9CSVRTLTEpKSkKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gdW5sb2NrX291dDsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArCj4+ Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIHIgPSBjaGFzaF90YWJsZV9jb3B5X2luKCZm YXVsdF9oYXNoLT5oYXNoLCBrZXksIE5VTEwpOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg ICvCoCBpZiAoIXIpCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKg wqDCoCBmYXVsdF9oYXNoLT5jb3VudCsrOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsK Pj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqAgLyogY2hhc2hfdGFibGVfY29weV9pbiBz aG91bGQgbmV2ZXIgZmFpbCB1bmxlc3Mgd2UncmUKPj4+Pj4gbG9zaW5nIGNvdW50ICovCj4+Pj4+ Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIFdBUk5fT05fT05DRShyIDwgMCk7Cj4+Pj4+Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICt1bmxv Y2tfb3V0Ogo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZmYXVsdF9oYXNoLT5sb2NrLCBmbGFncyk7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgK8KgIHJldHVybiByOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICt9Cj4+Pj4+ Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsv KioKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogYW1kZ3B1X3ZtX2NsZWFyX2ZhdWx0 IC0gUmVtb3ZlIGEgcGFnZSBmYXVsdCByZWNvcmQKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCArICoKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogQGZhdWx0X2hhc2g6IGZhdWx0 IGhhc2ggdGFibGUKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogQGtleTogNjQtYml0 IGVuY29kaW5nIG9mIFBBU0lEIGFuZCBhZGRyZXNzCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgKyAqCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKyAqIFRoaXMgc2hvdWxkIGJlIGNh bGxlZCB3aGVuIGEgcGFnZSBmYXVsdCBoYXMgYmVlbgo+Pj4+PiBoYW5kbGVkLiBBbnkKPj4+Pj4K Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArICogZnV0dXJlIGludGVycnVwdCB3aXRoIHRoaXMga2V5 IHdpbGwgYmUgcHJvY2Vzc2VkIGFzIGEKPj4+Pj4gbmV3Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgKyAqIHBhZ2UgZmF1bHQuCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKyAqLwo+ Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICt2b2lkIGFtZGdwdV92bV9jbGVhcl9mYXVsdChz dHJ1Y3QKPj4+Pj4gYW1kZ3B1X3JldHJ5ZmF1bHRfaGFzaHRhYmxlICpmYXVsdF9oYXNoLCB1NjQg a2V5KQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICt7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgK8KgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgK8KgIGludCByOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsKPj4+Pj4KPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqAgaWYgKCFmYXVsdF9oYXNoKQo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgICsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqAgc3Bpbl9sb2Nr X2lycXNhdmUoJmZhdWx0X2hhc2gtPmxvY2ssIGZsYWdzKTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCArCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIHIgPSBjaGFzaF90YWJs ZV9yZW1vdmUoJmZhdWx0X2hhc2gtPmhhc2gsIGtleSwgTlVMTCk7Cj4+Pj4+Cj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgK8KgIGlmICghV0FSTl9PTl9PTkNFKHIgPCAwKSkgewo+Pj4+Pgo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqAgZmF1bHRfaGFzaC0+Y291bnQtLTsK Pj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgIFdBUk5fT05f T05DRShmYXVsdF9oYXNoLT5jb3VudCA8IDApOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg ICvCoCB9Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKwo+Pj4+Pgo+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgICvCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYXVsdF9oYXNoLT5sb2NrLCBm bGFncyk7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK30KPj4+Pj4KPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3ZtLmgKPj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uaAo+Pj4+ Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIGluZGV4IGUyNzVlZTcuLjZlYjFkYTEgMTAwNjQ0Cj4+ Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3ZtLmgKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uaAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgIEBAIC0xNzgsNiArMTc4LDEzIEBAIHN0cnVjdCBhbWRncHVfdGFza19pbmZvIHsKPj4+Pj4K Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIHBpZF90wqDCoCB0Z2lkOwo+Pj4+Pgo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgfTsKPj4+Pj4KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAr I2RlZmluZSBBTURHUFVfUEFHRUZBVUxUX0hBU0hfQklUUyA4Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgK3N0cnVjdCBhbWRncHVfcmV0cnlmYXVsdF9oYXNodGFibGUgewo+Pj4+Pgo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgICvCoCBERUNMQVJFX0NIQVNIX1RBQkxFKGhhc2gsIEFNREdQVV9Q QUdFRkFVTFRfSEFTSF9CSVRTLAo+Pj4+PiA4LCAwKTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKg wqDCoCArwqAgc3BpbmxvY2tfdMKgwqDCoMKgIGxvY2s7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgK8KgIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY291bnQ7Cj4+Pj4+Cj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgK307Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgKwo+Pj4+Pgo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV92bSB7Cj4+Pj4+Cj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoCDCoCAvKiB0cmVlIG9mIHZpcnR1YWwgYWRkcmVzc2VzIG1hcHBlZCAq Lwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgc3RydWN0IHJiX3Jvb3RfY2FjaGVk wqAgdmE7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgQEAgLTI0MCw2ICsyNDcsNyBAQCBz dHJ1Y3QgYW1kZ3B1X3ZtIHsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIHN0cnVj dCB0dG1fbHJ1X2J1bGtfbW92ZSBscnVfYnVsa19tb3ZlOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgwqAgLyogbWFyayB3aGV0aGVyIGNhbiBkbyB0aGUgYnVsayBtb3ZlICovCj4+Pj4+ Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCBib29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJ1bGtfbW92ZWFibGU7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg K8KgIHN0cnVjdCBhbWRncHVfcmV0cnlmYXVsdF9oYXNodGFibGUgKmZhdWx0X2hhc2g7Cj4+Pj4+ Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Owo+Pj4+Pgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgIMKgc3RydWN0IGFtZGdwdV92bV9tYW5hZ2VyIHsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCBAQCAtMzU1LDQgKzM2Myw4IEBAIHZvaWQgYW1kZ3B1X3ZtX3NldF90YXNrX2luZm8o c3RydWN0Cj4+Pj4+IGFtZGdwdV92bSAqdm0pOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg wqAgdm9pZCBhbWRncHVfdm1fbW92ZV90b19scnVfdGFpbChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSk7Cj4+Pj4+ Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK2ludCBhbWRncHVfdm1fYWRkX2ZhdWx0KHN0 cnVjdAo+Pj4+PiBhbWRncHVfcmV0cnlmYXVsdF9oYXNodGFibGUgKmZhdWx0X2hhc2gsIHU2NCBr ZXkpOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDC oMKgwqDCoCArdm9pZCBhbWRncHVfdm1fY2xlYXJfZmF1bHQoc3RydWN0Cj4+Pj4+IGFtZGdwdV9y ZXRyeWZhdWx0X2hhc2h0YWJsZSAqZmF1bHRfaGFzaCwgdTY0IGtleSk7Cj4+Pj4+Cj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgKwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgI2VuZGlmCj4+ Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L3ZlZ2ExMF9paC5jCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv dmVnYTEwX2loLmMKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCBpbmRleCA1YWU1ZWQyLi5h Y2JlNWE3IDEwMDY0NAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L3ZlZ2ExMF9paC5jCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdmVnYTEwX2loLmMKPj4+Pj4KPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCBAQCAtMjY1LDM1ICsyNjUsMzYgQEAgc3RhdGljIGJvb2wKPj4+ Pj4gdmVnYTEwX2loX3ByZXNjcmVlbl9pdihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4+ Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHJ1 ZTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIH0KPj4+Pj4KPj4+Pj4KPj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCAtwqAgYWRkciA9ICgodTY0KShkdzUgJiAweGYpIDw8IDQ0KSB8ICgo dTY0KWR3NCA8PCAxMik7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIGtleSA9IEFN REdQVV9WTV9GQVVMVChwYXNpZCwgYWRkcik7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg LcKgIHIgPSBhbWRncHVfaWhfYWRkX2ZhdWx0KGFkZXYsIGtleSk7Cj4+Pj4+Cj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqAgLQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCAvKiBIYXNoIHRh YmxlIGlzIGZ1bGwgb3IgdGhlIGZhdWx0IGlzIGFscmVhZHkgYmVpbmcKPj4+Pj4gcHJvY2Vzc2Vk LAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoMKgICogaWdub3JlIGZ1cnRoZXIgcGFn ZSBmYXVsdHMKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqDCoCAqLwo+Pj4+Pgo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCBpZiAociAhPSAwKQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgIC3CoMKgwqDCoMKgwqDCoMKgwqAgZ290byBpZ25vcmVfaXY7Cj4+Pj4+Cj4+Pj4+IMKg wqDCoMKgwqDCoMKgwqAgLQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgLyogVHJh Y2sgcmV0cnkgZmF1bHRzIGluIHBlci1WTSBmYXVsdCBGSUZPLiAqLwo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgwqAgc3Bpbl9sb2NrKCZhZGV2LT52bV9tYW5hZ2VyLnBhc2lkX2xvY2sp Owo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgdm0gPSBpZHJfZmluZCgmYWRldi0+ dm1fbWFuYWdlci5wYXNpZF9pZHIsIHBhc2lkKTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCArwqAgYWRkciA9ICgodTY0KShkdzUgJiAweGYpIDw8IDQ0KSB8ICgodTY0KWR3NCA8PCAxMik7 Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIGtleSA9IEFNREdQVV9WTV9GQVVMVChw YXNpZCwgYWRkcik7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCBpZiAoIXZtKSB7 Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgLyogVk0g bm90IGZvdW5kLCBwcm9jZXNzIGl0IG5vcm1hbGx5ICovCj4+Pj4+Cj4+Pj4+IHNwaW5fdW5sb2Nr KCZhZGV2LT52bV9tYW5hZ2VyLnBhc2lkX2xvY2spOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgIC3CoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2loX2NsZWFyX2ZhdWx0KGFkZXYsIGtleSk7 Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHRydWU7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgIH0gZWxzZSB7Cj4+Pj4+Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCByID0gYW1kZ3B1X3ZtX2Fk ZF9mYXVsdCh2bS0+ZmF1bHRfaGFzaCwga2V5KTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oCArCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoCAvKiBI YXNoIHRhYmxlIGlzIGZ1bGwgb3IgdGhlIGZhdWx0IGlzIGFscmVhZHkKPj4+Pj4gYmVpbmcgcHJv Y2Vzc2VkLAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDC oCAqIGlnbm9yZSBmdXJ0aGVyIHBhZ2UgZmF1bHRzCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKg wqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAg K8KgwqDCoMKgwqDCoMKgwqDCoCBpZiAociAhPSAwKSB7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqAgKyBzcGluX3VubG9jaygmYWRldi0+dm1fbWFuYWdlci5wYXNpZF9sb2NrKTsKPj4+Pj4K Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBnb3RvIGlnbm9yZV9pdjsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCArwqDCoMKgwqDC oMKgwqDCoMKgIH0KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIH0KPj4+Pj4KPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIMKgIC8qIE5vIGxvY2tpbmcgcmVxdWlyZWQgd2l0aCBzaW5n bGUgd3JpdGVyIGFuZCBzaW5nbGUKPj4+Pj4gcmVhZGVyICovCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqDCoCDCoCByID0ga2ZpZm9fcHV0KCZ2bS0+ZmF1bHRzLCBrZXkpOwo+Pj4+Pgo+Pj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgaWYgKCFyKSB7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgLyogRklGTyBpcyBmdWxsLiBJZ25vcmUgaXQgdW50 aWwgdGhlcmUgaXMKPj4+Pj4gc3BhY2UgKi8KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAr wqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV92bV9jbGVhcl9mYXVsdCh2bS0+ZmF1bHRfaGFzaCwg a2V5KTsKPj4+Pj4KPj4+Pj4gc3Bpbl91bmxvY2soJmFkZXYtPnZtX21hbmFnZXIucGFzaWRfbG9j ayk7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgwqDCoMKgwqDCoMKgwqDCoCBhbWRn cHVfaWhfY2xlYXJfZmF1bHQoYWRldiwga2V5KTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGlnbm9yZV9pdjsKPj4+Pj4KPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIMKgIH0KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtIHNwaW5fdW5s b2NrKCZhZGV2LT52bV9tYW5hZ2VyLnBhc2lkX2xvY2spOwo+Pj4+Pgo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgICsgc3Bpbl91bmxvY2soJmFkZXYtPnZtX21hbmFnZXIucGFzaWRfbG9jayk7 Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCAvKiBJdCdzIHRoZSBmaXJzdCBmYXVs dCBmb3IgdGhpcyBhZGRyZXNzLCBwcm9jZXNzIGl0Cj4+Pj4+IG5vcm1hbGx5ICovCj4+Pj4+Cj4+ Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCByZXR1cm4gdHJ1ZTsKPj4+Pj4KPj4+Pj4KPj4+Pj4g wqDCoMKgwqDCoMKgwqDCoCBAQCAtMzg2LDE0ICszODcsNiBAQCBzdGF0aWMgaW50IHZlZ2ExMF9p aF9zd19pbml0KHZvaWQKPj4+Pj4gKmhhbmRsZSkKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIMKgIGFkZXYtPmlycS5paC51c2VfZG9vcmJlbGwgPSB0cnVlOwo+Pj4+Pgo+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgwqAgYWRldi0+aXJxLmloLmRvb3JiZWxsX2luZGV4ID0gQU1ER1BVX0RP T1JCRUxMNjRfSUggPDwgMTsKPj4+Pj4KPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqAg YWRldi0+aXJxLmloLmZhdWx0cyA9Cj4+Pj4+IGttYWxsb2Moc2l6ZW9mKCphZGV2LT5pcnEuaWgu ZmF1bHRzKSwgR0ZQX0tFUk5FTCk7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLcKgIGlm ICghYWRldi0+aXJxLmloLmZhdWx0cykKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoCAtwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgIC0gSU5JVF9DSEFTSF9UQUJMRShhZGV2LT5pcnEuaWguZmF1bHRzLT5oYXNoLAo+Pj4+Pgo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgQU1ER1BVX1BBR0VGQVVMVF9IQVNIX0JJVFMsIDgsIDApOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgIC0gc3Bpbl9sb2NrX2luaXQoJmFkZXYtPmlycS5paC5mYXVsdHMtPmxvY2spOwo+ Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgIC3CoCBhZGV2LT5pcnEuaWguZmF1bHRzLT5jb3Vu dCA9IDA7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgLQo+Pj4+Pgo+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgwqAgciA9IGFtZGdwdV9pcnFfaW5pdChhZGV2KTsKPj4+Pj4KPj4+Pj4KPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoCDCoMKgIHJldHVybiByOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgIEBAIC00MDYsOSArMzk5LDYgQEAgc3RhdGljIGludCB2ZWdhMTBfaWhfc3dfZmluaSh2 b2lkCj4+Pj4+ICpoYW5kbGUpCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCBhbWRn cHVfaXJxX2ZpbmkoYWRldik7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCDCoCBhbWRn cHVfaWhfcmluZ19maW5pKGFkZXYpOwo+Pj4+Pgo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg IC3CoCBrZnJlZShhZGV2LT5pcnEuaWguZmF1bHRzKTsKPj4+Pj4KPj4+Pj4gwqDCoMKgwqDCoMKg wqDCoCAtwqAgYWRldi0+aXJxLmloLmZhdWx0cyA9IE5VTEw7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqAgLQo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgwqAgcmV0dXJuIDA7Cj4+ Pj4+Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+Cj4+Pj4+Cj4+Pj4+Cj4+Pj4+Cj4+ Pj4+Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgIGFtZC1nZnggbWFpbGluZyBsaXN0 Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgIGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+Pj4+ IDxtYWlsdG86YW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmc+Cj4+Pj4+Cj4+Pj4+IMKgwqDC oMKgIGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdm eAo+Pj4+Pgo+Pj4+Pgo+Pj4+Cj4+Pj4KPj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwo+Pj4+IGFtZC1nZnggbWFpbGluZyBsaXN0Cj4+Pj4gYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngKPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QKPj4gYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vYW1kLWdmeAo=