From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 3DD284773A for ; Thu, 21 Dec 2023 09:01:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1EABD68D06F; Thu, 21 Dec 2023 11:01:00 +0200 (EET) Received: from w4.tutanota.de (w4.tutanota.de [81.3.6.165]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9A0FE68CDF6 for ; Thu, 21 Dec 2023 11:00:53 +0200 (EET) Received: from tutadb.w10.tutanota.de (unknown [192.168.1.10]) by w4.tutanota.de (Postfix) with ESMTP id 2302310602CC for ; Thu, 21 Dec 2023 09:00:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1703149252; s=s1; d=lynne.ee; h=From:From:To:To:Subject:Subject:Content-Description:Content-ID:Content-Type:Content-Type:Content-Transfer-Encoding:Content-Transfer-Encoding:Cc:Date:Date:In-Reply-To:In-Reply-To:MIME-Version:MIME-Version:Message-ID:Message-ID:Reply-To:References:References:Sender; bh=M1AXFRRv8N0AdexEEfxpMRq37iTxld37KeF/LpwKPA8=; b=h5D/4G4r2zKJ2Mt0zbB4aEe9aYc4rbQfWG+PwqDkxt5khktGfMU56qP5RzvrOYMp HZ2asE12EgIv0JE4QpmOI3tbDIRxP4S0wKlBO9tbE/kMQqn6MSL5e8TcuwRNgpksoV3 ASUxO0EkmsPh3ZLCTnAwPWWRsQ8CKeHxJ//rIP4TkkiH2ThZ+FLsa3AK3/VgZsk7+m4 LbOP+mOlZZJ6UGGwuTUIrFd2A/YsT5bNqCqWj+42fwjMbQRuP6mvvxf2XKXZPzmGRhe klbHPb4zlkTPI0lp3Y6XSmYcjvSymcFerZDjqbLy5i8bbv0dB4+FF5HRg1aRA4tTS/N 9S1RR6wt6Q== Date: Thu, 21 Dec 2023 10:00:52 +0100 (CET) From: Lynne To: FFmpeg development discussions and patches Message-ID: In-Reply-To: References: <20231205065034.1621-1-tong1.wu@intel.com> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH v12 1/9] libavutil: add hwcontext_d3d12va and AV_PIX_FMT_D3D12 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: VGhlcmUgYXJlIHN0aWxsIG5vIHB1YmxpYyBleHRlcm5hbCBBUEkgdXNlcnMgdG8gYWN0dWFsbHkg dGVzdCB0aGUgQVBJLAp3aGljaCBpcyBjb25jZXJuaW5nLiBJdCB0b29rIG1vbnRocyBmb3IgdGhl IFZ1bGthbiBBUEkgdG8gYmUgcG9ydGFibGUKZW5vdWdoIHRvIHdvcmsgd2l0aCB0aGUgbWFqb3Ig VnVsa2FuIHVzZXJzIG91dCB0aGVyZS4gR3JhbnRlZCwgVnVsa2FuCmlzIHNwZWNpYWwuCgpJcyB0 aGVyZSBhbnkgcHVibGljIHRlc3QgY29kZSBvdXQgdGhlcmU/IElmIG5vdCwgSSdkIHByZWZlciB0 aGUgQVBJIHRvIGJlCmRlY2xhcmVkIGFzIGV4cGVyaW1lbnRhbCBmb3Igbm93LCBzbyB3ZSBjYW4g bWFrZSBjaGFuZ2VzIGlmIG5lZWRlZC4KCkRlYyAyMSwgMjAyMywgMDk6MzEgYnkgaGFpaGFvLnhp YW5nLWF0LWludGVsLmNvbUBmZm1wZWcub3JnOgoKPiBPbiBNYSwgMjAyMy0xMi0xOCBhdCAwNjoy OCArMDAwMCwgWGlhbmcsIEhhaWhhbyB3cm90ZToKPgo+PiBPbiBEaSwgMjAyMy0xMi0wNSBhdCAx NDo0NiArMDgwMCwgVG9uZyBXdSB3cm90ZToKPj4gPiBGcm9tOiBXdSBKaWFuaHVhIDx0b3FzeHdA b3V0bG9vay5jb20+Cj4+ID4gCj4+ID4gU2lnbmVkLW9mZi1ieTogV3UgSmlhbmh1YSA8dG9xc3h3 QG91dGxvb2suY29tPgo+PiA+IFNpZ25lZC1vZmYtYnk6IFRvbmcgV3UgPHRvbmcxLnd1QGludGVs LmNvbT4KPj4gPiAtLS0KPj4gPiAKPj4gPiBDb21wYXJlZCB0byB2MTEsIHYxMiBzZXQgdGhlIGlu aXRpYWwgdmFsdWUgdG8gMCBmb3IgdGhlIGZlbmNlIHZhbHVlLAo+PiA+IGZpeGluZyBhIHBvdGVu dGlhbCBkeW5hbWljIHBvb2wgc3luYyBpc3N1ZS4gSGVuY2UgcmVtb3ZlZCB0aGUgbm9uIHplcm8K Pj4gPiBpbml0aWFsX3Bvb2xfc2l6ZSBmb3IKPj4gPiBkM2QxMnZhIGRlY29kZXIuIAo+PiA+IAo+ PiA+IFNvbWUgb3RoZXIgbWlub3IgZXJyb3IgbWVzc2FnZSBjaGFuZ2VzLgo+PiA+IAo+PiA+IAo+ PiA+IAo+PiA+IMKgY29uZmlndXJlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA1ICsKPj4gPiDCoGRvYy9BUEljaGFuZ2VzwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDUgKwo+ PiA+IMKgbGliYXZ1dGlsL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8wqDCoCAzICsKPj4gPiDCoGxpYmF2dXRpbC9od2NvbnRleHQuY8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArCj4+ID4gwqBsaWJhdnV0aWwvaHdjb250 ZXh0LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiA+IMKg bGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmPCoMKgwqDCoMKgwqDCoMKgwqAgfCA3MDMgKysr KysrKysrKysrKysrKysrKysrKysrKwo+PiA+IMKgbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZh LmjCoMKgwqDCoMKgwqDCoMKgwqAgfCAxMzQgKysrKysKPj4gPiDCoGxpYmF2dXRpbC9od2NvbnRl eHRfZDNkMTJ2YV9pbnRlcm5hbC5oIHzCoCA1OSArKysKPj4gPiDCoGxpYmF2dXRpbC9od2NvbnRl eHRfaW50ZXJuYWwuaMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4+ID4gwqBsaWJhdnV0aWwv cGl4ZGVzYy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCAr Cj4+ID4gwqBsaWJhdnV0aWwvcGl4Zm10LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHzCoMKgIDcgKwo+PiA+IMKgbGliYXZ1dGlsL3Rlc3RzL2h3ZGV2aWNlLmPCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArCj4+ID4gwqBsaWJhdnV0aWwvdmVyc2lvbi5o wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArLQo+PiA+IMKg MTMgZmlsZXMgY2hhbmdlZCwgOTI5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4gPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuYwo+PiA+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5oCj4+ID4gwqBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhX2ludGVybmFsLmgK Pj4gPiAKPj4gPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4+ID4gaW5kZXgg ZDc3YzA1MzIyNi4uMWEzNDNhYzZiOSAxMDA3NTUKPj4gPiAtLS0gYS9jb25maWd1cmUKPj4gPiAr KysgYi9jb25maWd1cmUKPj4gPiBAQCAtMzM2LDYgKzMzNiw3IEBAIEV4dGVybmFsIGxpYnJhcnkg c3VwcG9ydDoKPj4gPiDCoMKgIC0tZGlzYWJsZS1jdWRhLWxsdm3CoMKgwqDCoMKgIGRpc2FibGUg Q1VEQSBjb21waWxhdGlvbiB1c2luZyBjbGFuZwo+PiA+IFthdXRvZGV0ZWN0XQo+PiA+IMKgwqAg LS1kaXNhYmxlLWN1dmlkwqDCoMKgwqDCoMKgwqDCoMKgIGRpc2FibGUgTnZpZGlhIENVVklEIHN1 cHBvcnQgW2F1dG9kZXRlY3RdCj4+ID4gwqDCoCAtLWRpc2FibGUtZDNkMTF2YcKgwqDCoMKgwqDC oMKgIGRpc2FibGUgTWljcm9zb2Z0IERpcmVjdDNEIDExIHZpZGVvIGFjY2VsZXJhdGlvbgo+PiA+ IGNvZGUgW2F1dG9kZXRlY3RdCj4+ID4gK8KgIC0tZGlzYWJsZS1kM2QxMnZhwqDCoMKgwqDCoMKg wqAgZGlzYWJsZSBNaWNyb3NvZnQgRGlyZWN0M0QgMTIgdmlkZW8gYWNjZWxlcmF0aW9uCj4+ID4g Y29kZSBbYXV0b2RldGVjdF0KPj4gPiDCoMKgIC0tZGlzYWJsZS1keHZhMsKgwqDCoMKgwqDCoMKg wqDCoCBkaXNhYmxlIE1pY3Jvc29mdCBEaXJlY3RYIDkgdmlkZW8gYWNjZWxlcmF0aW9uCj4+ID4g Y29kZSBbYXV0b2RldGVjdF0KPj4gPiDCoMKgIC0tZGlzYWJsZS1mZm52Y29kZWPCoMKgwqDCoMKg IGRpc2FibGUgZHluYW1pY2FsbHkgbGlua2VkIE52aWRpYSBjb2RlCj4+ID4gW2F1dG9kZXRlY3Rd Cj4+ID4gwqDCoCAtLWVuYWJsZS1saWJkcm3CoMKgwqDCoMKgwqDCoMKgwqAgZW5hYmxlIERSTSBj b2RlIChMaW51eCkgW25vXQo+PiA+IEBAIC0xOTI2LDYgKzE5MjcsNyBAQCBIV0FDQ0VMX0FVVE9E RVRFQ1RfTElCUkFSWV9MSVNUPSIKPj4gPiDCoMKgwqDCoCBjdWRhX2xsdm0KPj4gPiDCoMKgwqDC oCBjdXZpZAo+PiA+IMKgwqDCoMKgIGQzZDExdmEKPj4gPiArwqDCoMKgIGQzZDEydmEKPj4gPiDC oMKgwqDCoCBkeHZhMgo+PiA+IMKgwqDCoMKgIGZmbnZjb2RlYwo+PiA+IMKgwqDCoMKgIG52ZGVj Cj4+ID4gQEAgLTMwNDgsNiArMzA1MCw3IEBAIGNyeXN0YWxoZF9kZXBzPSJsaWJjcnlzdGFsaGRf bGliY3J5c3RhbGhkX2lmX2giCj4+ID4gwqBjdWRhX2RlcHM9ImZmbnZjb2RlYyIKPj4gPiDCoGN1 dmlkX2RlcHM9ImZmbnZjb2RlYyIKPj4gPiDCoGQzZDExdmFfZGVwcz0iZHh2YV9oIElEM0QxMVZp ZGVvRGVjb2RlciBJRDNEMTFWaWRlb0NvbnRleHQiCj4+ID4gK2QzZDEydmFfZGVwcz0iZHh2YV9o IElEM0QxMkRldmljZSBJRDNEMTJWaWRlb0RlY29kZXIiCj4+ID4gwqBkeHZhMl9kZXBzPSJkeHZh MmFwaV9oIERYVkEyX0NvbmZpZ1BpY3R1cmVEZWNvZGUgb2xlMzIgdXNlcjMyIgo+PiA+IMKgZmZu dmNvZGVjX2RlcHNfYW55PSJsaWJkbCBMb2FkTGlicmFyeSIKPj4gPiDCoG1lZGlhY29kZWNfZGVw cz0iYW5kcm9pZCIKPj4gPiBAQCAtNjU3NSw2ICs2NTc4LDggQEAgY2hlY2tfdHlwZSAid2luZG93 cy5oIGR4Z2kxXzIuaCIgIklEWEdJT3V0cHV0MSIKPj4gPiDCoGNoZWNrX3R5cGUgIndpbmRvd3Mu aCBkeGdpMV81LmgiICJJRFhHSU91dHB1dDUiCj4+ID4gwqBjaGVja190eXBlICJ3aW5kb3dzLmgg ZDNkMTEuaCIgIklEM0QxMVZpZGVvRGVjb2RlciIKPj4gPiDCoGNoZWNrX3R5cGUgIndpbmRvd3Mu aCBkM2QxMS5oIiAiSUQzRDExVmlkZW9Db250ZXh0Igo+PiA+ICtjaGVja190eXBlICJ3aW5kb3dz LmggZDNkMTIuaCIgIklEM0QxMkRldmljZSIKPj4gPiArY2hlY2tfdHlwZSAid2luZG93cy5oIGQz ZDEydmlkZW8uaCIgIklEM0QxMlZpZGVvRGVjb2RlciIKPj4gPiDCoGNoZWNrX3R5cGUgIndpbmRv d3MuaCIgIkRQSV9BV0FSRU5FU1NfQ09OVEVYVCIgLURfV0lOMzJfV0lOTlQ9MHgwQTAwCj4+ID4g wqBjaGVja190eXBlICJkM2Q5LmggZHh2YTJhcGkuaCIgRFhWQTJfQ29uZmlnUGljdHVyZURlY29k ZSAtCj4+ID4gRF9XSU4zMl9XSU5OVD0weDA2MDIKPj4gPiDCoGNoZWNrX2Z1bmNfaGVhZGVycyBt ZmFwaS5oIE1GQ3JlYXRlQWxpZ25lZE1lbW9yeUJ1ZmZlciAtbG1mcGxhdAo+PiA+IGRpZmYgLS1n aXQgYS9kb2MvQVBJY2hhbmdlcyBiL2RvYy9BUEljaGFuZ2VzCj4+ID4gaW5kZXggNGEyZGMxYzQ0 Zi4uMDQzNTkyNmQ4MCAxMDA2NDQKPj4gPiAtLS0gYS9kb2MvQVBJY2hhbmdlcwo+PiA+ICsrKyBi L2RvYy9BUEljaGFuZ2VzCj4+ID4gQEAgLTIsNiArMiwxMSBAQCBUaGUgbGFzdCB2ZXJzaW9uIGlu Y3JlYXNlcyBvZiBhbGwgbGlicmFyaWVzIHdlcmUgb24gMjAyMy0KPj4gPiAwMi0KPj4gPiAwOQo+ PiA+IMKgCj4+ID4gwqBBUEkgY2hhbmdlcywgbW9zdCByZWNlbnQgZmlyc3Q6Cj4+ID4gwqAKPj4g PiArMjAyMy0xMS0wNyAtIHh4eHh4eHh4eHggLSBsYXZ1IDU4LjMzLjEwMCAtIHBpeGZtdC5oIGh3 Y29udGV4dC5oCj4+ID4gaHdjb250ZXh0X2QzZDEydmEuaAo+PiA+ICvCoCBBZGQgQVZfSFdERVZJ Q0VfVFlQRV9EM0QxMlZBIGFuZCBBVl9QSVhfRk1UX0QzRDEyLgo+PiA+ICvCoCBBZGQgQVZEM0Qx MlZBRGV2aWNlQ29udGV4dCwgQVZEM0QxMlZBU3luY0NvbnRleHQsIEFWRDNEMTJWQUZyYW1lIGFu ZAo+PiA+ICvCoCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0Lgo+PiA+ICsKPj4gPiDCoDIwMjMtMTEt MDggLSBiODI5NTdhNjZhNyAtIGxhdnUgNTguMzIuMTAwIC0gY2hhbm5lbF9sYXlvdXQuaAo+PiA+ IMKgwqAgQWRkIEFWX0NIX0xBWU9VVF83UE9JTlQyUE9JTlQzIGFuZCBBVl9DSEFOTkVMX0xBWU9V VF83UE9JTlQyUE9JTlQzLgo+PiA+IMKgwqAgQWRkIEFWX0NIX0xBWU9VVF85UE9JTlQxUE9JTlQ0 X0JBQ0sgYW5kCj4+ID4gQVZfQ0hBTk5FTF9MQVlPVVRfOVBPSU5UMVBPSU5UNF9CQUNLLgo+PiA+ IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvTWFrZWZpbGUgYi9saWJhdnV0aWwvTWFrZWZpbGUKPj4g PiBpbmRleCA0NzExZjhjZGU4Li42YTg1NjZmMWQ5IDEwMDY0NAo+PiA+IC0tLSBhL2xpYmF2dXRp bC9NYWtlZmlsZQo+PiA+ICsrKyBiL2xpYmF2dXRpbC9NYWtlZmlsZQo+PiA+IEBAIC00Miw2ICs0 Miw3IEBAIEhFQURFUlMgPQo+PiA+IGFkbGVyMzIuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2NvbnRl eHQuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4dF9jdWRhLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgXAo+PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4dF9kM2QxMXZh LmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAg aHdjb250ZXh0X2QzZDEydmEuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqAgaHdjb250ZXh0X2RybS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgXAo+PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3Y29udGV4dF9keHZhMi5o wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqAgaHdjb250ZXh0X3Fzdi5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ PiA+IEBAIC0xOTAsNiArMTkxLDcgQEAgT0JKUyA9Cj4+ID4gYWRsZXIzMi5vwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiA+IMKgCj4+ID4g wqBPQkpTLSQoQ09ORklHX0NVREEpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCArPSBod2NvbnRleHRfY3VkYS5vCj4+ID4gwqBPQkpTLSQoQ09ORklHX0QzRDExVkEpwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfZDNkMTF2YS5vCj4+ ID4gK09CSlMtJChDT05GSUdfRDNEMTJWQSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICs9IGh3Y29udGV4dF9kM2QxMnZhLm8KPj4gPiDCoE9CSlMtJChDT05GSUdfRFhWQTIpwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2R4dmEyLm8K Pj4gPiDCoE9CSlMtJChDT05GSUdfTElCRFJNKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCArPSBod2NvbnRleHRfZHJtLm8KPj4gPiDCoE9CSlMtJChDT05GSUdfTUFDT1NfS1BF UkYpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gbWFjb3Nfa3BlcmYubwo+PiA+IEBAIC0y MTMsNiArMjE1LDcgQEAgU0tJUEhFQURFUlMtJChIQVZFX0NVREFfSCnCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKz0KPj4gPiBod2NvbnRleHRfY3VkYS5oCj4+ID4gwqBTS0lQSEVBREVSUy0kKENP TkZJR19DVURBKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRleHRfY3VkYV9pbnRl cm5hbC5owqDCoMKgwqAgXAo+PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdWRhX2No ZWNrLmgKPj4gPiDCoFNLSVBIRUFERVJTLSQoQ09ORklHX0QzRDExVkEpwqDCoMKgwqDCoMKgwqDC oMKgICs9IGh3Y29udGV4dF9kM2QxMXZhLmgKPj4gPiArU0tJUEhFQURFUlMtJChDT05GSUdfRDNE MTJWQSnCoMKgwqDCoMKgwqDCoMKgwqAgKz0gaHdjb250ZXh0X2QzZDEydmEuaAo+PiA+IMKgU0tJ UEhFQURFUlMtJChDT05GSUdfRFhWQTIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBod2NvbnRl eHRfZHh2YTIuaAo+PiA+IMKgU0tJUEhFQURFUlMtJChDT05GSUdfUVNWKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9xc3YuaAo+PiA+IMKgU0tJUEhFQURFUlMtJChDT05G SUdfT1BFTkNMKcKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGh3Y29udGV4dF9vcGVuY2wuaAo+PiA+ IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvaHdjb250ZXh0LmMgYi9saWJhdnV0aWwvaHdjb250ZXh0 LmMKPj4gPiBpbmRleCAzNjUwZDQ2NTNhLi5lMjNiYWQyMzBmIDEwMDY0NAo+PiA+IC0tLSBhL2xp YmF2dXRpbC9od2NvbnRleHQuYwo+PiA+ICsrKyBiL2xpYmF2dXRpbC9od2NvbnRleHQuYwo+PiA+ IEBAIC0zNiw2ICszNiw5IEBAIHN0YXRpYyBjb25zdCBIV0NvbnRleHRUeXBlICogY29uc3QgaHdf dGFibGVbXSA9IHsKPj4gPiDCoCNpZiBDT05GSUdfRDNEMTFWQQo+PiA+IMKgwqDCoMKgICZmZl9o d2NvbnRleHRfdHlwZV9kM2QxMXZhLAo+PiA+IMKgI2VuZGlmCj4+ID4gKyNpZiBDT05GSUdfRDNE MTJWQQo+PiA+ICvCoMKgwqAgJmZmX2h3Y29udGV4dF90eXBlX2QzZDEydmEsCj4+ID4gKyNlbmRp Zgo+PiA+IMKgI2lmIENPTkZJR19MSUJEUk0KPj4gPiDCoMKgwqDCoCAmZmZfaHdjb250ZXh0X3R5 cGVfZHJtLAo+PiA+IMKgI2VuZGlmCj4+ID4gQEAgLTcxLDYgKzc0LDcgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKmNvbnN0IGh3X3R5cGVfbmFtZXNbXSA9IHsKPj4gPiDCoMKgwqDCoCBbQVZfSFdERVZJ Q0VfVFlQRV9EUk1dwqDCoMKgID0gImRybSIsCj4+ID4gwqDCoMKgwqAgW0FWX0hXREVWSUNFX1RZ UEVfRFhWQTJdwqAgPSAiZHh2YTIiLAo+PiA+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX0Qz RDExVkFdID0gImQzZDExdmEiLAo+PiA+ICvCoMKgwqAgW0FWX0hXREVWSUNFX1RZUEVfRDNEMTJW QV0gPSAiZDNkMTJ2YSIsCj4+ID4gwqDCoMKgwqAgW0FWX0hXREVWSUNFX1RZUEVfT1BFTkNMXSA9 ICJvcGVuY2wiLAo+PiA+IMKgwqDCoMKgIFtBVl9IV0RFVklDRV9UWVBFX1FTVl3CoMKgwqAgPSAi cXN2IiwKPj4gPiDCoMKgwqDCoCBbQVZfSFdERVZJQ0VfVFlQRV9WQUFQSV3CoCA9ICJ2YWFwaSIs Cj4+ID4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9od2NvbnRleHQuaCBiL2xpYmF2dXRpbC9od2Nv bnRleHQuaAo+PiA+IGluZGV4IDdmZjA4Yzg2MDguLjJiMzM3MjFhOTcgMTAwNjQ0Cj4+ID4gLS0t IGEvbGliYXZ1dGlsL2h3Y29udGV4dC5oCj4+ID4gKysrIGIvbGliYXZ1dGlsL2h3Y29udGV4dC5o Cj4+ID4gQEAgLTM3LDYgKzM3LDcgQEAgZW51bSBBVkhXRGV2aWNlVHlwZSB7Cj4+ID4gwqDCoMKg wqAgQVZfSFdERVZJQ0VfVFlQRV9PUEVOQ0wsCj4+ID4gwqDCoMKgwqAgQVZfSFdERVZJQ0VfVFlQ RV9NRURJQUNPREVDLAo+PiA+IMKgwqDCoMKgIEFWX0hXREVWSUNFX1RZUEVfVlVMS0FOLAo+PiA+ ICvCoMKgwqAgQVZfSFdERVZJQ0VfVFlQRV9EM0QxMlZBLAo+PiA+IMKgfTsKPj4gPiDCoAo+PiA+ IMKgdHlwZWRlZiBzdHJ1Y3QgQVZIV0RldmljZUludGVybmFsIEFWSFdEZXZpY2VJbnRlcm5hbDsK Pj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmMgYi9saWJhdnV0 aWwvaHdjb250ZXh0X2QzZDEydmEuYwo+PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+ID4gaW5k ZXggMDAwMDAwMDAwMC4uMTYwMGQ5NGNiMAo+PiA+IC0tLSAvZGV2L251bGwKPj4gPiArKysgYi9s aWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmEuYwo+PiA+IEBAIC0wLDAgKzEsNzAzIEBACj4+ID4g Ky8qCj4+ID4gKyAqIERpcmVjdDNEIDEyIEhXIGFjY2VsZXJhdGlvbi4KPj4gPiArICoKPj4gPiAr ICogY29weXJpZ2h0IChjKSAyMDIyLTIwMjMgV3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29t Pgo+PiA+ICsgKgo+PiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4+ID4gKyAq Cj4+ID4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKPj4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYwo+PiA+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPj4gPiArICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ID4g KyAqCj4+ID4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+PiA+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBHTlUKPj4gPiArICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gPiArICoK Pj4gPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYwo+PiA+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4+ID4gKyAqIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQo+ PiA+IFVTQQo+PiA+ICsgKi8KPj4gPiArCj4+ID4gKyNpbmNsdWRlICJjb25maWcuaCIKPj4gPiAr I2luY2x1ZGUgImNvbW1vbi5oIgo+PiA+ICsjaW5jbHVkZSAiaHdjb250ZXh0LmgiCj4+ID4gKyNp bmNsdWRlICJod2NvbnRleHRfaW50ZXJuYWwuaCIKPj4gPiArI2luY2x1ZGUgImh3Y29udGV4dF9k M2QxMnZhX2ludGVybmFsLmgiCj4+ID4gKyNpbmNsdWRlICJod2NvbnRleHRfZDNkMTJ2YS5oIgo+ PiA+ICsjaW5jbHVkZSAiaW1ndXRpbHMuaCIKPj4gPiArI2luY2x1ZGUgInBpeGRlc2MuaCIKPj4g PiArI2luY2x1ZGUgInBpeGZtdC5oIgo+PiA+ICsjaW5jbHVkZSAidGhyZWFkLmgiCj4+ID4gKyNp bmNsdWRlICJjb21wYXQvdzMyZGxmY24uaCIKPj4gPiArI2luY2x1ZGUgPGR4Z2kxXzMuaD4KPj4g PiArCj4+ID4gK3R5cGVkZWYgSFJFU1VMVChXSU5BUEkgKlBGTl9DUkVBVEVfRFhHSV9GQUNUT1JZ MikoVUlOVCBGbGFncywgUkVGSUlEIHJpaWQsCj4+ID4gdm9pZCAqKnBwRmFjdG9yeSk7Cj4+ID4g Kwo+PiA+ICt0eXBlZGVmIHN0cnVjdCBEM0QxMlZBRnJhbWVzQ29udGV4dCB7Cj4+ID4gK8KgwqDC oCBJRDNEMTJSZXNvdXJjZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnN0YWdpbmdfZG93bmxvYWRf YnVmZmVyOwo+PiA+ICvCoMKgwqAgSUQzRDEyUmVzb3VyY2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICpzdGFnaW5nX3VwbG9hZF9idWZmZXI7Cj4+ID4gK8KgwqDCoCBJRDNEMTJDb21tYW5kUXVldWXC oMKgwqDCoMKgwqDCoCAqY29tbWFuZF9xdWV1ZTsKPj4gPiArwqDCoMKgIElEM0QxMkNvbW1hbmRB bGxvY2F0b3LCoMKgwqAgKmNvbW1hbmRfYWxsb2NhdG9yOwo+PiA+ICvCoMKgwqAgSUQzRDEyR3Jh cGhpY3NDb21tYW5kTGlzdCAqY29tbWFuZF9saXN0Owo+PiA+ICvCoMKgwqAgQVZEM0QxMlZBU3lu Y0NvbnRleHTCoMKgwqDCoMKgwqAgc3luY19jdHg7Cj4+ID4gK8KgwqDCoCBVSU5UwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbHVtYV9jb21wb25lbnRfc2l6ZTsK Pj4gPiArfSBEM0QxMlZBRnJhbWVzQ29udGV4dDsKPj4gPiArCj4+ID4gK3R5cGVkZWYgc3RydWN0 IEQzRDEyVkFEZXZpY2VQcml2IHsKPj4gPiArwqDCoMKgIEhBTkRMRcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZDNkMTJsaWI7Cj4+ID4gK8KgwqDCoCBIQU5E TEXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGR4Z2lsaWI7 Cj4+ID4gK8KgwqDCoCBQRk5fQ1JFQVRFX0RYR0lfRkFDVE9SWTLCoMKgwqDCoMKgIGNyZWF0ZV9k eGdpX2ZhY3RvcnkyOwo+PiA+ICvCoMKgwqAgUEZOX0QzRDEyX0NSRUFURV9ERVZJQ0XCoMKgwqDC oMKgwqAgY3JlYXRlX2RldmljZTsKPj4gPiArwqDCoMKgIFBGTl9EM0QxMl9HRVRfREVCVUdfSU5U RVJGQUNFIGdldF9kZWJ1Z19pbnRlcmZhY2U7Cj4+ID4gK30gRDNEMTJWQURldmljZVByaXY7Cj4+ ID4gKwo+PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsKPj4gPiArwqDCoMKgIERYR0lfRk9STUFU IGQzZF9mb3JtYXQ7Cj4+ID4gK8KgwqDCoCBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdDsKPj4g PiArfSBzdXBwb3J0ZWRfZm9ybWF0c1tdID0gewo+PiA+ICvCoMKgwqAgeyBEWEdJX0ZPUk1BVF9O VjEyLCBBVl9QSVhfRk1UX05WMTIgfSwKPj4gPiArwqDCoMKgIHsgRFhHSV9GT1JNQVRfUDAxMCwg QVZfUElYX0ZNVF9QMDEwIH0sCj4+ID4gK307Cj4+ID4gKwo+PiA+ICtzdGF0aWMgdm9pZCBkM2Qx MnZhX2RlZmF1bHRfbG9jayh2b2lkICpjdHgpCj4+ID4gK3sKPj4gPiArwqDCoMKgIFdhaXRGb3JT aW5nbGVPYmplY3RFeChjdHgsIElORklOSVRFLCBGQUxTRSk7Cj4+ID4gK30KPj4gPiArCj4+ID4g K3N0YXRpYyB2b2lkIGQzZDEydmFfZGVmYXVsdF91bmxvY2sodm9pZCAqY3R4KQo+PiA+ICt7Cj4+ ID4gK8KgwqDCoCBSZWxlYXNlTXV0ZXgoY3R4KTsKPj4gPiArfQo+PiA+ICsKPj4gPiArRFhHSV9G T1JNQVQgYXZfZDNkMTJ2YV9tYXBfc3dfdG9faHdfZm9ybWF0KGVudW0gQVZQaXhlbEZvcm1hdCBw aXhfZm10KQo+PiA+ICt7Cj4+ID4gK8KgwqDCoCBzd2l0Y2ggKHBpeF9mbXQpIHsKPj4gPiArwqDC oMKgIGNhc2UgQVZfUElYX0ZNVF9OVjEyOnJldHVybiBEWEdJX0ZPUk1BVF9OVjEyOwo+PiA+ICvC oMKgwqAgY2FzZSBBVl9QSVhfRk1UX1AwMTA6cmV0dXJuIERYR0lfRk9STUFUX1AwMTA7Cj4+ID4g K8KgwqDCoCBkZWZhdWx0OsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRFhHSV9GT1JN QVRfVU5LTk9XTjsKPj4gPiArwqDCoMKgIH0KPj4gPiArfQo+PiA+ICsKPj4gPiArc3RhdGljIGlu dCBkM2QxMnZhX2ZlbmNlX2NvbXBsZXRpb24oQVZEM0QxMlZBU3luY0NvbnRleHQgKnBzeW5jX2N0 eCkKPj4gPiArewo+PiA+ICvCoMKgwqAgdWludDY0X3QgY29tcGxldGlvbiA9IElEM0QxMkZlbmNl X0dldENvbXBsZXRlZFZhbHVlKHBzeW5jX2N0eC0+ZmVuY2UpOwo+PiA+ICvCoMKgwqAgaWYgKGNv bXBsZXRpb24gPCBwc3luY19jdHgtPmZlbmNlX3ZhbHVlKSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKg IGlmIChGQUlMRUQoSUQzRDEyRmVuY2VfU2V0RXZlbnRPbkNvbXBsZXRpb24ocHN5bmNfY3R4LT5m ZW5jZSwKPj4gPiBwc3luY19jdHgtPmZlbmNlX3ZhbHVlLCBwc3luY19jdHgtPmV2ZW50KSkpCj4+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gPiAr Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIFdhaXRGb3JTaW5nbGVPYmplY3RFeChwc3luY19jdHgtPmV2 ZW50LCBJTkZJTklURSwgRkFMU0UpOwo+PiA+ICvCoMKgwqAgfQo+PiA+ICsKPj4gPiArwqDCoMKg IHJldHVybiAwOwo+PiA+ICt9Cj4+ID4gKwo+PiA+ICtzdGF0aWMgaW5saW5lIGludCBkM2QxMnZh X3dhaXRfcXVldWVfaWRsZShBVkQzRDEyVkFTeW5jQ29udGV4dCAqcHN5bmNfY3R4LAo+PiA+IElE M0QxMkNvbW1hbmRRdWV1ZSAqY29tbWFuZF9xdWV1ZSkKPj4gPiArewo+PiA+ICvCoMKgwqAgRFhf Q0hFQ0soSUQzRDEyQ29tbWFuZFF1ZXVlX1NpZ25hbChjb21tYW5kX3F1ZXVlLCBwc3luY19jdHgt PmZlbmNlLAo+PiA+ICsrcHN5bmNfY3R4LT5mZW5jZV92YWx1ZSkpOwo+PiA+ICvCoMKgwqAgcmV0 dXJuIGQzZDEydmFfZmVuY2VfY29tcGxldGlvbihwc3luY19jdHgpOwo+PiA+ICsKPj4gPiArZmFp bDoKPj4gPiArwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+ID4gK30KPj4gPiArCj4+ ID4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9jcmVhdGVfc3RhZ2luZ19idWZmZXJfcmVzb3VyY2UoQVZI V0ZyYW1lc0NvbnRleHQgKmN0eCwKPj4gPiBEM0QxMl9SRVNPVVJDRV9TVEFURVMgc3RhdGVzLAo+ PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJRDNEMTJSZXNv dXJjZQo+PiA+ICoqcHBSZXNvdXJjZSwgaW50IGRvd25sb2FkKQo+PiA+ICt7Cj4+ID4gK8KgwqDC oCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0ICpkZXZpY2VfaHdjdHggPSBjdHgtPmRldmljZV9jdHgt Pmh3Y3R4Owo+PiA+ICvCoMKgwqAgRDNEMTJWQUZyYW1lc0NvbnRleHTCoMKgICpzwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA9IGN0eC0+aW50ZXJuYWwtPnByaXY7Cj4+ID4gK8KgwqDCoCBEM0QxMl9I RUFQX1BST1BFUlRJRVMgcHJvcHMgPSB7IC5UeXBlID0gZG93bmxvYWQgPwo+PiA+IEQzRDEyX0hF QVBfVFlQRV9SRUFEQkFDSyA6IEQzRDEyX0hFQVBfVFlQRV9VUExPQUQgfTsKPj4gPiArwqDCoMKg IEQzRDEyX1JFU09VUkNFX0RFU0MgZGVzYyA9IHsKPj4gPiArwqDCoMKgwqDCoMKgwqAgLkRpbWVu c2lvbsKgwqDCoMKgwqDCoMKgwqDCoCA9IEQzRDEyX1JFU09VUkNFX0RJTUVOU0lPTl9CVUZGRVIs Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIC5BbGlnbm1lbnTCoMKgwqDCoMKgwqDCoMKgwqAgPSAwLAo+ PiA+ICvCoMKgwqDCoMKgwqDCoCAuV2lkdGjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IHMt Pmx1bWFfY29tcG9uZW50X3NpemUgKyAocy0KPj4gPiA+IGx1bWFfY29tcG9uZW50X3NpemUgPj4g MSksCj4+ID4gK8KgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg PSAxLAo+PiA+ICvCoMKgwqDCoMKgwqDCoCAuRGVwdGhPckFycmF5U2l6ZcKgwqAgPSAxLAo+PiA+ ICvCoMKgwqDCoMKgwqDCoCAuTWlwTGV2ZWxzwqDCoMKgwqDCoMKgwqDCoMKgID0gMSwKPj4gPiAr wqDCoMKgwqDCoMKgwqAgLkZvcm1hdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IERYR0lfRk9S TUFUX1VOS05PV04sCj4+ID4gK8KgwqDCoMKgwqDCoMKgIC5TYW1wbGVEZXNjwqDCoMKgwqDCoMKg wqDCoCA9IHsgLkNvdW50ID0gMSwgLlF1YWxpdHkgPSAwIH0sCj4+ID4gK8KgwqDCoMKgwqDCoMKg IC5MYXlvdXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9URVhUVVJFX0xBWU9VVF9S T1dfTUFKT1IsCj4+ID4gK8KgwqDCoMKgwqDCoMKgIC5GbGFnc8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgID0gRDNEMTJfUkVTT1VSQ0VfRkxBR19OT05FLAo+PiA+ICvCoMKgwqAgfTsKPj4gPiAr Cj4+ID4gK8KgwqDCoCBpZiAoRkFJTEVEKElEM0QxMkRldmljZV9DcmVhdGVDb21taXR0ZWRSZXNv dXJjZShkZXZpY2VfaHdjdHgtPmRldmljZSwKPj4gPiAmcHJvcHMsIEQzRDEyX0hFQVBfRkxBR19O T05FLCAmZGVzYywKPj4gPiArwqDCoMKgwqDCoMKgwqAgc3RhdGVzLCBOVUxMLCAmSUlEX0lEM0Qx MlJlc291cmNlLCAodm9pZCAqKilwcFJlc291cmNlKSkpIHsKPj4gPiArwqDCoMKgwqDCoMKgwqAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQ291bGQgbm90IGNyZWF0ZSB0aGUgc3RhZ2luZyBi dWZmZXIKPj4gPiByZXNvdXJjZVxuIik7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVS Uk9SX1VOS05PV047Cj4+ID4gK8KgwqDCoCB9Cj4+ID4gKwo+PiA+ICvCoMKgwqAgcmV0dXJuIDA7 Cj4+ID4gK30KPj4gPiArCj4+ID4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9jcmVhdGVfaGVscGVyX29i amVjdHMoQVZIV0ZyYW1lc0NvbnRleHQgKmN0eCkKPj4gPiArewo+PiA+ICvCoMKgwqAgQVZEM0Qx MlZBRGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3Y3R4ID0gY3R4LT5kZXZpY2VfY3R4LT5od2N0eDsK Pj4gPiArwqDCoMKgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmZyYW1lc19od2N0eCA9IGN0eC0+ aHdjdHg7Cj4+ID4gK8KgwqDCoCBEM0QxMlZBRnJhbWVzQ29udGV4dMKgwqAgKnPCoMKgwqDCoMKg wqDCoMKgwqDCoMKgID0gY3R4LT5pbnRlcm5hbC0+cHJpdjsKPj4gPiArCj4+ID4gK8KgwqDCoCBE M0QxMl9DT01NQU5EX1FVRVVFX0RFU0MgcXVldWVfZGVzYyA9IHsKPj4gPiArwqDCoMKgwqDCoMKg wqAgLlR5cGXCoMKgwqDCoCA9IEQzRDEyX0NPTU1BTkRfTElTVF9UWVBFX0NPUFksCj4+ID4gK8Kg wqDCoMKgwqDCoMKgIC5Qcmlvcml0eSA9IDAsCj4+ID4gK8KgwqDCoMKgwqDCoMKgIC5Ob2RlTWFz ayA9IDAsCj4+ID4gK8KgwqDCoCB9Owo+PiA+ICsKPj4gPiArwqDCoMKgIHMtPmx1bWFfY29tcG9u ZW50X3NpemUgPSBGRkFMSUdOKGN0eC0+d2lkdGggKiAoZnJhbWVzX2h3Y3R4LT5mb3JtYXQgPT0K Pj4gPiBEWEdJX0ZPUk1BVF9QMDEwID8gMiA6IDEpLAo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRDNE MTJfVEVYVFVSRV9EQVRBX1BJVENIX0FMSUdOTUVOVCkgKgo+PiA+IGN0eC0+aGVpZ2h0Owo+PiA+ ICsKPj4gPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkRldmljZV9DcmVhdGVGZW5jZShkZXZpY2Vf aHdjdHgtPmRldmljZSwgMCwKPj4gPiBEM0QxMl9GRU5DRV9GTEFHX05PTkUsCj4+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICZJSURfSUQzRDEyRmVuY2UsICh2b2lkICoqKSZzLQo+PiA+ID4gc3luY19j dHguZmVuY2UpKTsKPj4gPiArCj4+ID4gK8KgwqDCoCBzLT5zeW5jX2N0eC5ldmVudCA9IENyZWF0 ZUV2ZW50KE5VTEwsIEZBTFNFLCBGQUxTRSwgTlVMTCk7Cj4+ID4gK8KgwqDCoCBpZiAoIXMtPnN5 bmNfY3R4LmV2ZW50KQo+PiA+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ID4gKwo+PiA+ ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyRGV2aWNlX0NyZWF0ZUNvbW1hbmRRdWV1ZShkZXZpY2Vf aHdjdHgtPmRldmljZSwKPj4gPiAmcXVldWVfZGVzYywKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICZJSURfSUQzRDEyQ29tbWFuZFF1ZXVlLCAodm9pZCAqKikmcy0+Y29tbWFuZF9xdWV1 ZSkpOwo+PiA+ICsKPj4gPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkRldmljZV9DcmVhdGVDb21t YW5kQWxsb2NhdG9yKGRldmljZV9od2N0eC0+ZGV2aWNlLAo+PiA+IHF1ZXVlX2Rlc2MuVHlwZSwK Pj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZJSURfSUQzRDEyQ29tbWFuZEFsbG9jYXRv ciwgKHZvaWQgKiopJnMtPmNvbW1hbmRfYWxsb2NhdG9yKSk7Cj4+ID4gKwo+PiA+ICvCoMKgwqAg RFhfQ0hFQ0soSUQzRDEyRGV2aWNlX0NyZWF0ZUNvbW1hbmRMaXN0KGRldmljZV9od2N0eC0+ZGV2 aWNlLCAwLAo+PiA+IHF1ZXVlX2Rlc2MuVHlwZSwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHMtPmNvbW1hbmRfYWxsb2NhdG9yLCBOVUxMLCAmSUlEX0lEM0QxMkdyYXBoaWNzQ29tbWFu ZExpc3QsCj4+ID4gKHZvaWQgKiopJnMtPmNvbW1hbmRfbGlzdCkpOwo+PiA+ICsKPj4gPiArwqDC oMKgIERYX0NIRUNLKElEM0QxMkdyYXBoaWNzQ29tbWFuZExpc3RfQ2xvc2Uocy0+Y29tbWFuZF9s aXN0KSk7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgSUQzRDEyQ29tbWFuZFF1ZXVlX0V4ZWN1dGVDb21t YW5kTGlzdHMocy0+Y29tbWFuZF9xdWV1ZSwgMSwKPj4gPiAoSUQzRDEyQ29tbWFuZExpc3QgKiop JnMtPmNvbW1hbmRfbGlzdCk7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgcmV0dXJuIGQzZDEydmFfd2Fp dF9xdWV1ZV9pZGxlKCZzLT5zeW5jX2N0eCwgcy0+Y29tbWFuZF9xdWV1ZSk7Cj4+ID4gKwo+PiA+ ICtmYWlsOgo+PiA+ICvCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPj4gPiArfQo+PiA+ ICsKPj4gPiArc3RhdGljIHZvaWQgZDNkMTJ2YV9mcmFtZXNfdW5pbml0KEFWSFdGcmFtZXNDb250 ZXh0ICpjdHgpCj4+ID4gK3sKPj4gPiArwqDCoMKgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmZy YW1lc19od2N0eCA9IGN0eC0+aHdjdHg7Cj4+ID4gK8KgwqDCoCBEM0QxMlZBRnJhbWVzQ29udGV4 dMKgwqAgKnPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gY3R4LT5pbnRlcm5hbC0+cHJpdjsKPj4g PiArCj4+ID4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShzLT5zeW5jX2N0eC5mZW5jZSk7 Cj4+ID4gK8KgwqDCoCBpZiAocy0+c3luY19jdHguZXZlbnQpCj4+ID4gK8KgwqDCoMKgwqDCoMKg IENsb3NlSGFuZGxlKHMtPnN5bmNfY3R4LmV2ZW50KTsKPj4gPiArCj4+ID4gK8KgwqDCoCBEM0Qx Ml9PQkpFQ1RfUkVMRUFTRShzLT5zdGFnaW5nX2Rvd25sb2FkX2J1ZmZlcik7Cj4+ID4gK8KgwqDC oCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShzLT5zdGFnaW5nX3VwbG9hZF9idWZmZXIpOwo+PiA+ICvC oMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0Uocy0+Y29tbWFuZF9hbGxvY2F0b3IpOwo+PiA+ICvC oMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0Uocy0+Y29tbWFuZF9saXN0KTsKPj4gPiArwqDCoMKg IEQzRDEyX09CSkVDVF9SRUxFQVNFKHMtPmNvbW1hbmRfcXVldWUpOwo+PiA+ICt9Cj4+ID4gKwo+ PiA+ICtzdGF0aWMgaW50IGQzZDEydmFfZnJhbWVzX2dldF9jb25zdHJhaW50cyhBVkhXRGV2aWNl Q29udGV4dCAqY3R4LCBjb25zdAo+PiA+IHZvaWQKPj4gPiAqaHdjb25maWcsIEFWSFdGcmFtZXND b25zdHJhaW50cyAqY29uc3RyYWludHMpCj4+ID4gK3sKPj4gPiArwqDCoMKgIEhSRVNVTFQgaHI7 Cj4+ID4gK8KgwqDCoCBpbnQgbmJfc3dfZm9ybWF0cyA9IDA7Cj4+ID4gK8KgwqDCoCBBVkQzRDEy VkFEZXZpY2VDb250ZXh0ICpkZXZpY2VfaHdjdHggPSBjdHgtPmh3Y3R4Owo+PiA+ICsKPj4gPiAr wqDCoMKgIGNvbnN0cmFpbnRzLT52YWxpZF9zd19mb3JtYXRzID0KPj4gPiBhdl9tYWxsb2NfYXJy YXkoRkZfQVJSQVlfRUxFTVMoc3VwcG9ydGVkX2Zvcm1hdHMpICsgMSwKPj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVvZigqY29uc3RyYWludHMt Cj4+ID4gPiB2YWxpZF9zd19mb3JtYXRzKSk7Cj4+ID4gK8KgwqDCoCBpZiAoIWNvbnN0cmFpbnRz LT52YWxpZF9zd19mb3JtYXRzKQo+PiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOwo+PiA+ICsKPj4gPiArwqDCoMKgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlf RUxFTVMoc3VwcG9ydGVkX2Zvcm1hdHMpOyBpKyspIHsKPj4gPiArwqDCoMKgwqDCoMKgwqAgRDNE MTJfRkVBVFVSRV9EQVRBX0ZPUk1BVF9TVVBQT1JUIGZvcm1hdF9zdXBwb3J0ID0gewo+PiA+IHN1 cHBvcnRlZF9mb3JtYXRzW2ldLmQzZF9mb3JtYXQgfTsKPj4gPiArwqDCoMKgwqDCoMKgwqAgaHIg PSBJRDNEMTJEZXZpY2VfQ2hlY2tGZWF0dXJlU3VwcG9ydChkZXZpY2VfaHdjdHgtPmRldmljZSwK Pj4gPiBEM0QxMl9GRUFUVVJFX0ZPUk1BVF9TVVBQT1JULCAmZm9ybWF0X3N1cHBvcnQsIHNpemVv Zihmb3JtYXRfc3VwcG9ydCkpOwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAoU1VDQ0VFREVEKGhy KSAmJiAoZm9ybWF0X3N1cHBvcnQuU3VwcG9ydDEgJgo+PiA+IEQzRDEyX0ZPUk1BVF9TVVBQT1JU MV9URVhUVVJFMkQpKQo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0cmFpbnRzLT52 YWxpZF9zd19mb3JtYXRzW25iX3N3X2Zvcm1hdHMrK10gPQo+PiA+IHN1cHBvcnRlZF9mb3JtYXRz W2ldLnBpeF9mbXQ7Cj4+ID4gK8KgwqDCoCB9Cj4+ID4gK8KgwqDCoCBjb25zdHJhaW50cy0+dmFs aWRfc3dfZm9ybWF0c1tuYl9zd19mb3JtYXRzXSA9IEFWX1BJWF9GTVRfTk9ORTsKPj4gPiArCj4+ ID4gK8KgwqDCoCBjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0cyA9IGF2X21hbGxvY19hcnJh eSgyLCBzaXplb2YoKmNvbnN0cmFpbnRzLQo+PiA+ID4gdmFsaWRfaHdfZm9ybWF0cykpOwo+PiA+ ICvCoMKgwqAgaWYgKCFjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0cykKPj4gPiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPj4gPiArCj4+ID4gK8KgwqDCoCBjb25z dHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0c1swXSA9IEFWX1BJWF9GTVRfRDNEMTI7Cj4+ID4gK8Kg wqDCoCBjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0c1sxXSA9IEFWX1BJWF9GTVRfTk9ORTsK Pj4gPiArCj4+ID4gK8KgwqDCoCByZXR1cm4gMDsKPj4gPiArfQo+PiA+ICsKPj4gPiArc3RhdGlj IHZvaWQgZnJlZV90ZXh0dXJlKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSkKPj4gPiArewo+ PiA+ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWUgKmZyYW1lID0gKEFWRDNEMTJWQUZyYW1lICopZGF0 YTsKPj4gPiArCj4+ID4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShmcmFtZS0+dGV4dHVy ZSk7Cj4+ID4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShmcmFtZS0+c3luY19jdHguZmVu Y2UpOwo+PiA+ICvCoMKgwqAgaWYgKGZyYW1lLT5zeW5jX2N0eC5ldmVudCkKPj4gPiArwqDCoMKg wqDCoMKgwqAgQ2xvc2VIYW5kbGUoZnJhbWUtPnN5bmNfY3R4LmV2ZW50KTsKPj4gPiArCj4+ID4g K8KgwqDCoCBhdl9mcmVlcCgmZGF0YSk7Cj4+ID4gK30KPj4gPiArCj4+ID4gK3N0YXRpYyBBVkJ1 ZmZlclJlZiAqZDNkMTJ2YV9wb29sX2FsbG9jKHZvaWQgKm9wYXF1ZSwgc2l6ZV90IHNpemUpCj4+ ID4gK3sKPj4gPiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0wqDCoMKgwqDCoCAqY3R4wqDCoMKg wqDCoMKgwqDCoMKgID0gKEFWSFdGcmFtZXNDb250ZXh0ICopb3BhcXVlOwo+PiA+ICvCoMKgwqAg QVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqaHdjdHjCoMKgwqDCoMKgwqDCoCA9IGN0eC0+aHdjdHg7 Cj4+ID4gK8KgwqDCoCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0ICpkZXZpY2VfaHdjdHggPSBjdHgt PmRldmljZV9jdHgtPmh3Y3R4Owo+PiA+ICsKPj4gPiArwqDCoMKgIEFWQnVmZmVyUmVmICpidWY7 Cj4+ID4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZSAqZnJhbWU7Cj4+ID4gK8KgwqDCoCBEM0QxMl9I RUFQX1BST1BFUlRJRVMgcHJvcHMgPSB7IC5UeXBlID0gRDNEMTJfSEVBUF9UWVBFX0RFRkFVTFQg fTsKPj4gPiArwqDCoMKgIEQzRDEyX1JFU09VUkNFX0RFU0MgZGVzYyA9IHsKPj4gPiArwqDCoMKg wqDCoMKgwqAgLkRpbWVuc2lvbsKgwqDCoMKgwqDCoMKgID0gRDNEMTJfUkVTT1VSQ0VfRElNRU5T SU9OX1RFWFRVUkUyRCwKPj4gPiArwqDCoMKgwqDCoMKgwqAgLkFsaWdubWVudMKgwqDCoMKgwqDC oMKgID0gMCwKPj4gPiArwqDCoMKgwqDCoMKgwqAgLldpZHRowqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA9IGN0eC0+d2lkdGgsCj4+ID4gK8KgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgwqDCoMKgwqDC oMKgwqDCoCA9IGN0eC0+aGVpZ2h0LAo+PiA+ICvCoMKgwqDCoMKgwqDCoCAuRGVwdGhPckFycmF5 U2l6ZSA9IDEsCj4+ID4gK8KgwqDCoMKgwqDCoMKgIC5NaXBMZXZlbHPCoMKgwqDCoMKgwqDCoCA9 IDEsCj4+ID4gK8KgwqDCoMKgwqDCoMKgIC5Gb3JtYXTCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGh3 Y3R4LT5mb3JtYXQsCj4+ID4gK8KgwqDCoMKgwqDCoMKgIC5TYW1wbGVEZXNjwqDCoMKgwqDCoMKg ID0gey5Db3VudCA9IDEsIC5RdWFsaXR5ID0gMCB9LAo+PiA+ICvCoMKgwqDCoMKgwqDCoCAuTGF5 b3V0wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9URVhUVVJFX0xBWU9VVF9VTktOT1dOLAo+ PiA+ICvCoMKgwqDCoMKgwqDCoCAuRmxhZ3PCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRDNEMTJf UkVTT1VSQ0VfRkxBR19OT05FLAo+PiA+ICvCoMKgwqAgfTsKPj4gPiArCj4+ID4gK8KgwqDCoCBm cmFtZSA9IGF2X21hbGxvY3ooc2l6ZW9mKEFWRDNEMTJWQUZyYW1lKSk7Cj4+ID4gK8KgwqDCoCBp ZiAoIWZyYW1lKQo+PiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4gPiArCj4+ID4g K8KgwqDCoCBpZiAoRkFJTEVEKElEM0QxMkRldmljZV9DcmVhdGVDb21taXR0ZWRSZXNvdXJjZShk ZXZpY2VfaHdjdHgtPmRldmljZSwKPj4gPiAmcHJvcHMsIEQzRDEyX0hFQVBfRkxBR19OT05FLCAm ZGVzYywKPj4gPiArwqDCoMKgwqDCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OLCBO VUxMLCAmSUlEX0lEM0QxMlJlc291cmNlLCAodm9pZAo+PiA+ICoqKSZmcmFtZS0+dGV4dHVyZSkp KSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkNvdWxk IG5vdCBjcmVhdGUgdGhlIHRleHR1cmVcbiIpOwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZh aWw7Cj4+ID4gK8KgwqDCoCB9Cj4+ID4gKwo+PiA+ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyRGV2 aWNlX0NyZWF0ZUZlbmNlKGRldmljZV9od2N0eC0+ZGV2aWNlLCAwLAo+PiA+IEQzRDEyX0ZFTkNF X0ZMQUdfTk9ORSwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJklJRF9JRDNEMTJGZW5jZSwgKHZv aWQgKiopJmZyYW1lLQo+PiA+ID4gc3luY19jdHguZmVuY2UpKTsKPj4gPiArCj4+ID4gK8KgwqDC oCBmcmFtZS0+c3luY19jdHguZXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFMU0Us IE5VTEwpOwo+PiA+ICvCoMKgwqAgaWYgKCFmcmFtZS0+c3luY19jdHguZXZlbnQpCj4+ID4gK8Kg wqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsKPj4gPiArCj4+ID4gK8KgwqDCoCBidWYgPSBhdl9idWZm ZXJfY3JlYXRlKCh1aW50OF90ICopZnJhbWUsIHNpemVvZihmcmFtZSksIGZyZWVfdGV4dHVyZSwK Pj4gPiBOVUxMLCAwKTsKPj4gPiArwqDCoMKgIGlmICghYnVmKQo+PiA+ICvCoMKgwqDCoMKgwqDC oCBnb3RvIGZhaWw7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgcmV0dXJuIGJ1ZjsKPj4gPiArCj4+ID4g K2ZhaWw6Cj4+ID4gK8KgwqDCoCBmcmVlX3RleHR1cmUoTlVMTCwgKHVpbnQ4X3QgKilmcmFtZSk7 Cj4+ID4gK8KgwqDCoCByZXR1cm4gTlVMTDsKPj4gPiArfQo+PiA+ICsKPj4gPiArc3RhdGljIGlu dCBkM2QxMnZhX2ZyYW1lc19pbml0KEFWSFdGcmFtZXNDb250ZXh0ICpjdHgpCj4+ID4gK3sKPj4g PiArwqDCoMKgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmh3Y3R4wqDCoMKgwqDCoMKgwqAgPSBj dHgtPmh3Y3R4Owo+PiA+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqZGV2aWNlX2h3 Y3R4ID0gY3R4LT5kZXZpY2VfY3R4LT5od2N0eDsKPj4gPiArwqDCoMKgIEQzRDEyVkFGcmFtZXND b250ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBjdHgtPmludGVybmFsLT5wcml2 Owo+PiA+ICvCoMKgwqAgaW50IGk7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8 IEZGX0FSUkFZX0VMRU1TKHN1cHBvcnRlZF9mb3JtYXRzKTsgaSsrKSB7Cj4+ID4gK8KgwqDCoMKg wqDCoMKgIGlmIChjdHgtPnN3X2Zvcm1hdCA9PSBzdXBwb3J0ZWRfZm9ybWF0c1tpXS5waXhfZm10 KSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGh3Y3R4LT5mb3JtYXQgIT0gRFhH SV9GT1JNQVRfVU5LTk9XTiAmJgo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aHdjdHgtPmZvcm1hdCAhPSBzdXBwb3J0ZWRfZm9ybWF0c1tpXS5kM2RfZm9ybWF0KQo+PiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcs ICJJbmNvbXBhdGlibGUgRFhHSSBmb3JtYXQKPj4gPiBwcm92aWRlZCBieSB1c2VyLCB3aWxsIGJl IG92ZXJpZGVkXG4iKTsKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBod2N0eC0+Zm9ybWF0 ID0gc3VwcG9ydGVkX2Zvcm1hdHNbaV0uZDNkX2Zvcm1hdDsKPj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBicmVhazsKPj4gPiArwqDCoMKgwqDCoMKgwqAgfQo+PiA+ICvCoMKgwqAgfQo+PiA+ ICvCoMKgwqAgaWYgKGkgPT0gRkZfQVJSQVlfRUxFTVMoc3VwcG9ydGVkX2Zvcm1hdHMpKSB7Cj4+ ID4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVk IHBpeGVsIGZvcm1hdDogJXNcbiIsCj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YXZfZ2V0X3BpeF9mbXRfbmFtZShjdHgtPnN3X2Zvcm1hdCkpOwo+PiA+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+PiA+ICvCoMKgwqAgfQo+PiA+ICsKPj4gPiArwqDC oMKgIGN0eC0+aW50ZXJuYWwtPnBvb2xfaW50ZXJuYWwgPQo+PiA+IGF2X2J1ZmZlcl9wb29sX2lu aXQyKHNpemVvZihBVkQzRDEyVkFGcmFtZSksCj4+ID4gK8KgwqDCoMKgwqDCoMKgIGN0eCwgZDNk MTJ2YV9wb29sX2FsbG9jLCBOVUxMKTsKPj4gPiArCj4+ID4gK8KgwqDCoCBpZiAoIWN0eC0+aW50 ZXJuYWwtPnBvb2xfaW50ZXJuYWwpCj4+ID4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ID4gK30KPj4gPiArCj4+ ID4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9nZXRfYnVmZmVyKEFWSFdGcmFtZXNDb250ZXh0ICpjdHgs IEFWRnJhbWUgKmZyYW1lKQo+PiA+ICt7Cj4+ID4gK8KgwqDCoCBpbnQgcmV0Owo+PiA+ICsKPj4g PiArwqDCoMKgIGZyYW1lLT5idWZbMF0gPSBhdl9idWZmZXJfcG9vbF9nZXQoY3R4LT5wb29sKTsK Pj4gPiArwqDCoMKgIGlmICghZnJhbWUtPmJ1ZlswXSkKPj4gPiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKPj4gPiArCj4+ID4gK8KgwqDCoCByZXQgPSBhdl9pbWFnZV9m aWxsX2FycmF5cyhmcmFtZS0+ZGF0YSwgZnJhbWUtPmxpbmVzaXplLCBOVUxMLAo+PiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y3R4LT5zd19mb3JtYXQsIGN0eC0+d2lkdGgsIGN0eC0+aGVpZ2h0LAo+PiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRDNEMTJf VEVYVFVSRV9EQVRBX1BJVENIX0FMSUdOTUVOVCk7Cj4+ID4gK8KgwqDCoCBpZiAocmV0IDwgMCkK Pj4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gPiArCj4+ID4gK8KgwqDCoCBmcmFt ZS0+ZGF0YVswXSA9IGZyYW1lLT5idWZbMF0tPmRhdGE7Cj4+ID4gK8KgwqDCoCBmcmFtZS0+Zm9y bWF0wqAgPSBBVl9QSVhfRk1UX0QzRDEyOwo+PiA+ICvCoMKgwqAgZnJhbWUtPndpZHRowqDCoCA9 IGN0eC0+d2lkdGg7Cj4+ID4gK8KgwqDCoCBmcmFtZS0+aGVpZ2h0wqAgPSBjdHgtPmhlaWdodDsK Pj4gPiArCj4+ID4gK8KgwqDCoCByZXR1cm4gMDsKPj4gPiArfQo+PiA+ICsKPj4gPiArc3RhdGlj IGludCBkM2QxMnZhX3RyYW5zZmVyX2dldF9mb3JtYXRzKEFWSFdGcmFtZXNDb250ZXh0ICpjdHgs Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIEFWSFdGcmFtZVRyYW5zZmVyRGlyZWN0 aW9uCj4+ID4gZGlyLAo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSBBVlBpeGVsRm9y bWF0ICoqZm9ybWF0cykKPj4gPiArewo+PiA+ICvCoMKgwqAgRDNEMTJWQUZyYW1lc0NvbnRleHQg KnMgPSBjdHgtPmludGVybmFsLT5wcml2Owo+PiA+ICvCoMKgwqAgZW51bSBBVlBpeGVsRm9ybWF0 ICpmbXRzOwo+PiA+ICsKPj4gPiArwqDCoMKgIGZtdHMgPSBhdl9tYWxsb2NfYXJyYXkoMiwgc2l6 ZW9mKCpmbXRzKSk7Cj4+ID4gK8KgwqDCoCBpZiAoIWZtdHMpCj4+ID4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgZm10c1swXSA9IGN0 eC0+c3dfZm9ybWF0Owo+PiA+ICvCoMKgwqAgZm10c1sxXSA9IEFWX1BJWF9GTVRfTk9ORTsKPj4g PiArCj4+ID4gK8KgwqDCoCAqZm9ybWF0cyA9IGZtdHM7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgcmV0 dXJuIDA7Cj4+ID4gK30KPj4gPiArCj4+ID4gK3N0YXRpYyBpbnQgZDNkMTJ2YV90cmFuc2Zlcl9k YXRhKEFWSFdGcmFtZXNDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmRzdCwKPj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b25zdCBBVkZyYW1lICpzcmMpCj4+ID4gK3sKPj4gPiArwqDCoMKgIEFWRDNEMTJWQURldmljZUNv bnRleHQgKmh3Y3R4wqDCoMKgwqDCoMKgwqAgPSBjdHgtPmRldmljZV9jdHgtPmh3Y3R4Owo+PiA+ ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqZnJhbWVzX2h3Y3R4ID0gY3R4LT5od2N0 eDsKPj4gPiArwqDCoMKgIEQzRDEyVkFGcmFtZXNDb250ZXh0wqDCoCAqc8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgPSBjdHgtPmludGVybmFsLT5wcml2Owo+PiA+ICsKPj4gPiArwqDCoMKgIGludCBy ZXQ7Cj4+ID4gK8KgwqDCoCBpbnQgZG93bmxvYWQgPSBzcmMtPmZvcm1hdCA9PSBBVl9QSVhfRk1U X0QzRDEyOwo+PiA+ICvCoMKgwqAgY29uc3QgQVZGcmFtZSAqZnJhbWUgPSBkb3dubG9hZCA/IHNy YyA6IGRzdDsKPj4gPiArwqDCoMKgIGNvbnN0IEFWRnJhbWUgKm90aGVyID0gZG93bmxvYWQgPyBk c3QgOiBzcmM7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWUgKmYgPSAoQVZEM0Qx MlZBRnJhbWUgKilmcmFtZS0+ZGF0YVswXTsKPj4gPiArwqDCoMKgIElEM0QxMlJlc291cmNlICp0 ZXh0dXJlID0gKElEM0QxMlJlc291cmNlICopZi0+dGV4dHVyZTsKPj4gPiArCj4+ID4gK8KgwqDC oCB1aW50OF90ICptYXBwZWRfZGF0YTsKPj4gPiArwqDCoMKgIHVpbnQ4X3QgKmRhdGFbNF07Cj4+ ID4gK8KgwqDCoCBpbnQgbGluZXNpemVzWzRdOwo+PiA+ICsKPj4gPiArwqDCoMKgIEQzRDEyX1RF WFRVUkVfQ09QWV9MT0NBVElPTiBzdGFnaW5nX3lfbG9jYXRpb27CoCA9IHsgMCB9Owo+PiA+ICvC oMKgwqAgRDNEMTJfVEVYVFVSRV9DT1BZX0xPQ0FUSU9OIHN0YWdpbmdfdXZfbG9jYXRpb24gPSB7 IDAgfTsKPj4gPiArCj4+ID4gK8KgwqDCoCBEM0QxMl9URVhUVVJFX0NPUFlfTE9DQVRJT04gdGV4 dHVyZV95X2xvY2F0aW9uID0gewo+PiA+ICvCoMKgwqDCoMKgwqDCoCAucFJlc291cmNlwqDCoMKg wqDCoMKgwqAgPSB0ZXh0dXJlLAo+PiA+ICvCoMKgwqDCoMKgwqDCoCAuVHlwZcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA9IEQzRDEyX1RFWFRVUkVfQ09QWV9UWVBFX1NVQlJFU09VUkNFX0lOREVY LAo+PiA+ICvCoMKgwqDCoMKgwqDCoCAuU3VicmVzb3VyY2VJbmRleCA9IDAsCj4+ID4gK8KgwqDC oCB9Owo+PiA+ICsKPj4gPiArwqDCoMKgIEQzRDEyX1RFWFRVUkVfQ09QWV9MT0NBVElPTiB0ZXh0 dXJlX3V2X2xvY2F0aW9uID0gewo+PiA+ICvCoMKgwqDCoMKgwqDCoCAucFJlc291cmNlwqDCoMKg wqDCoMKgwqAgPSB0ZXh0dXJlLAo+PiA+ICvCoMKgwqDCoMKgwqDCoCAuVHlwZcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCA9IEQzRDEyX1RFWFRVUkVfQ09QWV9UWVBFX1NVQlJFU09VUkNFX0lOREVY LAo+PiA+ICvCoMKgwqDCoMKgwqDCoCAuU3VicmVzb3VyY2VJbmRleCA9IDEsCj4+ID4gK8KgwqDC oCB9Owo+PiA+ICsKPj4gPiArwqDCoMKgIEQzRDEyX1JFU09VUkNFX0JBUlJJRVIgYmFycmllciA9 IHsKPj4gPiArwqDCoMKgwqDCoMKgwqAgLlR5cGXCoCA9IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJf VFlQRV9UUkFOU0lUSU9OLAo+PiA+ICvCoMKgwqDCoMKgwqDCoCAuRmxhZ3MgPSBEM0QxMl9SRVNP VVJDRV9CQVJSSUVSX0ZMQUdfTk9ORSwKPj4gPiArwqDCoMKgwqDCoMKgwqAgLlRyYW5zaXRpb24g PSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnBSZXNvdXJjZcKgwqAgPSB0ZXh0dXJl LAo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5TdGF0ZUJlZm9yZSA9IEQzRDEyX1JFU09V UkNFX1NUQVRFX0NPTU1PTiwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuU3RhdGVBZnRl csKgID0gZG93bmxvYWQgPyBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT1BZX1NPVVJDRSA6Cj4+ID4g RDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09QWV9ERVNULAo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC5TdWJyZXNvdXJjZSA9IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJfQUxMX1NVQlJFU09VUkNF UywKPj4gPiArwqDCoMKgwqDCoMKgwqAgfSwKPj4gPiArwqDCoMKgIH07Cj4+ID4gKwo+PiA+ICvC oMKgwqAgaWYgKGZyYW1lLT5od19mcmFtZXNfY3R4LT5kYXRhICE9ICh1aW50OF90ICopY3R4IHx8 IG90aGVyLT5mb3JtYXQgIT0KPj4gPiBjdHgtCj4+ID4gPiBzd19mb3JtYXQpCj4+ID4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgaHdj dHgtPmxvY2soaHdjdHgtPmxvY2tfY3R4KTsKPj4gPiArCj4+ID4gK8KgwqDCoCBpZiAoIXMtPmNv bW1hbmRfcXVldWUpIHsKPj4gPiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gZDNkMTJ2YV9jcmVhdGVf aGVscGVyX29iamVjdHMoY3R4KTsKPj4gPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOwo+PiA+ICvCoMKgwqAgfQo+PiA+ ICsKPj4gPiArwqDCoMKgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQo+PiA+ICvCoMKgwqDC oMKgwqDCoCBsaW5lc2l6ZXNbaV0gPSBGRkFMSUdOKGZyYW1lLT53aWR0aCAqIChmcmFtZXNfaHdj dHgtPmZvcm1hdCA9PQo+PiA+IERYR0lfRk9STUFUX1AwMTAgPyAyIDogMSksCj4+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBE M0QxMl9URVhUVVJFX0RBVEFfUElUQ0hfQUxJR05NRU5UKTsKPj4gPiArCj4+ID4gK8KgwqDCoMKg wqDCoMKgIHN0YWdpbmdfeV9sb2NhdGlvbiA9IChEM0QxMl9URVhUVVJFX0NPUFlfTE9DQVRJT04p IHsKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuVHlwZcKgwqDCoMKgwqAgPSBEM0QxMl9U RVhUVVJFX0NPUFlfVFlQRV9QTEFDRURfRk9PVFBSSU5ULAo+PiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC5QbGFjZWRGb290cHJpbnQgPSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAuT2Zmc2V0ID0gMCwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC5Gb290cHJpbnQgPSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC5Gb3JtYXTCoMKgID0gZnJhbWVzX2h3Y3R4LT5mb3JtYXQgPT0gRFhHSV9GT1JNQVRfUDAx MCA/Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgCj4+ID4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNCj4+ID4gOiBEWEdJX0ZPUk1BVF9SOF9V Tk9STSwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLldpZHRo wqDCoMKgID0gY3R4LT53aWR0aCwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLkhlaWdodMKgwqAgPSBjdHgtPmhlaWdodCwKPj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLkRlcHRowqDCoMKgID0gMSwKPj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlJvd1BpdGNoID0gbGluZXNpemVzWzBdLAo+ PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSwKPj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB9LAo+PiA+ICvCoMKgwqDCoMKgwqDCoCB9Owo+PiA+ICsKPj4gPiArwqDCoMKg wqDCoMKgwqAgc3RhZ2luZ191dl9sb2NhdGlvbiA9IChEM0QxMl9URVhUVVJFX0NPUFlfTE9DQVRJ T04pIHsKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuVHlwZcKgwqDCoMKgwqAgPSBEM0Qx Ml9URVhUVVJFX0NPUFlfVFlQRV9QTEFDRURfRk9PVFBSSU5ULAo+PiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC5QbGFjZWRGb290cHJpbnQgPSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAuT2Zmc2V0ID0gcy0+bHVtYV9jb21wb25lbnRfc2l6ZSwKPj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5Gb290cHJpbnQgPSB7Cj4+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5Gb3JtYXTCoMKgID0gZnJhbWVzX2h3Y3R4LT5m b3JtYXQgPT0gRFhHSV9GT1JNQVRfUDAxMCA/Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4+ID4gRFhHSV9GT1JNQVRfUjE2RzE2X1VO T1JNIDogRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLldpZHRowqDCoMKgID0gY3R4LT53aWR0aMKgID4+IDEsCj4+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgID0gY3R4 LT5oZWlnaHQgPj4gMSwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLkRlcHRowqDCoMKgID0gMSwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLlJvd1BpdGNoID0gbGluZXNpemVzWzBdLAo+PiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfSwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9LAo+PiA+ICvC oMKgwqDCoMKgwqDCoCB9Owo+PiA+ICsKPj4gPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkNvbW1h bmRBbGxvY2F0b3JfUmVzZXQocy0+Y29tbWFuZF9hbGxvY2F0b3IpKTsKPj4gPiArCj4+ID4gK8Kg wqDCoCBEWF9DSEVDSyhJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0X1Jlc2V0KHMtPmNvbW1hbmRf bGlzdCwgcy0KPj4gPiA+IGNvbW1hbmRfYWxsb2NhdG9yLCBOVUxMKSk7Cj4+ID4gKwo+PiA+ICvC oMKgwqAgaWYgKGRvd25sb2FkKSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIGlmICghcy0+c3RhZ2lu Z19kb3dubG9hZF9idWZmZXIpIHsKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBk M2QxMnZhX2NyZWF0ZV9zdGFnaW5nX2J1ZmZlcl9yZXNvdXJjZShjdHgsCj4+ID4gRDNEMTJfUkVT T1VSQ0VfU1RBVEVfQ09QWV9ERVNULAo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzLQo+PiA+ID4gc3RhZ2luZ19kb3dubG9hZF9i dWZmZXIsIDEpOwo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKSB7Cj4+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+PiA+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ID4gKwo+PiA+ICvC oMKgwqDCoMKgwqDCoCBzdGFnaW5nX3lfbG9jYXRpb24ucFJlc291cmNlID0gc3RhZ2luZ191dl9s b2NhdGlvbi5wUmVzb3VyY2UgPSBzLQo+PiA+ID4gc3RhZ2luZ19kb3dubG9hZF9idWZmZXI7Cj4+ ID4gKwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0X1Jlc291 cmNlQmFycmllcihzLT5jb21tYW5kX2xpc3QsIDEsCj4+ID4gJmJhcnJpZXIpOwo+PiA+ICsKPj4g PiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlzdF9Db3B5VGV4dHVyZVJl Z2lvbihzLT5jb21tYW5kX2xpc3QsCj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAmc3RhZ2luZ195X2xvY2F0aW9uLCAwLAo+PiA+IDAsIDAsCj4+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmdGV4dHVyZV95 X2xvY2F0aW9uLAo+PiA+IE5VTEwpOwo+PiA+ICsKPj4gPiArwqDCoMKgwqDCoMKgwqAgSUQzRDEy R3JhcGhpY3NDb21tYW5kTGlzdF9Db3B5VGV4dHVyZVJlZ2lvbihzLT5jb21tYW5kX2xpc3QsCj4+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmc3RhZ2lu Z191dl9sb2NhdGlvbiwKPj4gPiAwLAo+PiA+IDAsIDAsCj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmdGV4dHVyZV91dl9sb2NhdGlvbiwKPj4gPiBO VUxMKTsKPj4gPiArCj4+ID4gK8KgwqDCoMKgwqDCoMKgIGJhcnJpZXIuVHJhbnNpdGlvbi5TdGF0 ZUJlZm9yZSA9IGJhcnJpZXIuVHJhbnNpdGlvbi5TdGF0ZUFmdGVyOwo+PiA+ICvCoMKgwqDCoMKg wqDCoCBiYXJyaWVyLlRyYW5zaXRpb24uU3RhdGVBZnRlcsKgID0gRDNEMTJfUkVTT1VSQ0VfU1RB VEVfQ09NTU9OOwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0 X1Jlc291cmNlQmFycmllcihzLT5jb21tYW5kX2xpc3QsIDEsCj4+ID4gJmJhcnJpZXIpOwo+PiA+ ICsKPj4gPiArwqDCoMKgwqDCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyR3JhcGhpY3NDb21tYW5kTGlz dF9DbG9zZShzLT5jb21tYW5kX2xpc3QpKTsKPj4gPiArCj4+ID4gK8KgwqDCoMKgwqDCoMKgIERY X0NIRUNLKElEM0QxMkNvbW1hbmRRdWV1ZV9XYWl0KHMtPmNvbW1hbmRfcXVldWUsIGYtCj4+ID4g PnN5bmNfY3R4LmZlbmNlLAo+PiA+IGYtPnN5bmNfY3R4LmZlbmNlX3ZhbHVlKSk7Cj4+ID4gKwo+ PiA+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJDb21tYW5kUXVldWVfRXhlY3V0ZUNvbW1hbmRMaXN0 cyhzLT5jb21tYW5kX3F1ZXVlLCAxLAo+PiA+IChJRDNEMTJDb21tYW5kTGlzdCAqKikmcy0+Y29t bWFuZF9saXN0KTsKPj4gPiArCj4+ID4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGQzZDEydmFfd2Fp dF9xdWV1ZV9pZGxlKCZzLT5zeW5jX2N0eCwgcy0+Y29tbWFuZF9xdWV1ZSk7Cj4+ID4gK8KgwqDC oMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8g ZmFpbDsKPj4gPiArCj4+ID4gK8KgwqDCoMKgwqDCoMKgIERYX0NIRUNLKElEM0QxMlJlc291cmNl X01hcChzLT5zdGFnaW5nX2Rvd25sb2FkX2J1ZmZlciwgMCwgTlVMTCwKPj4gPiAodm9pZCAqKikm bWFwcGVkX2RhdGEpKTsKPj4gPiArwqDCoMKgwqDCoMKgwqAgYXZfaW1hZ2VfZmlsbF9wb2ludGVy cyhkYXRhLCBjdHgtPnN3X2Zvcm1hdCwgY3R4LT5oZWlnaHQsCj4+ID4gbWFwcGVkX2RhdGEsIGxp bmVzaXplcyk7Cj4+ID4gKwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBhdl9pbWFnZV9jb3B5KGRzdC0+ ZGF0YSwgZHN0LT5saW5lc2l6ZSwgZGF0YSwgbGluZXNpemVzLAo+PiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5zd19mb3JtYXQsIGN0eC0+d2lkdGgs IGN0eC0+aGVpZ2h0KTsKPj4gPiArCj4+ID4gK8KgwqDCoMKgwqDCoMKgIElEM0QxMlJlc291cmNl X1VubWFwKHMtPnN0YWdpbmdfZG93bmxvYWRfYnVmZmVyLCAwLCBOVUxMKTsKPj4gPiArwqDCoMKg IH0gZWxzZSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIGlmICghcy0+c3RhZ2luZ191cGxvYWRfYnVm ZmVyKSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gZDNkMTJ2YV9jcmVhdGVf c3RhZ2luZ19idWZmZXJfcmVzb3VyY2UoY3R4LAo+PiA+IEQzRDEyX1JFU09VUkNFX1NUQVRFX0dF TkVSSUNfUkVBRCwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJnMtCj4+ID4gPiBzdGFnaW5nX3VwbG9hZF9idWZmZXIsIDApOwo+PiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKSB7Cj4+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfQo+PiA+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ID4gKwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBz dGFnaW5nX3lfbG9jYXRpb24ucFJlc291cmNlID0gc3RhZ2luZ191dl9sb2NhdGlvbi5wUmVzb3Vy Y2UgPSBzLQo+PiA+ID4gc3RhZ2luZ191cGxvYWRfYnVmZmVyOwo+PiA+ICsKPj4gPiArwqDCoMKg wqDCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyUmVzb3VyY2VfTWFwKHMtPnN0YWdpbmdfdXBsb2FkX2J1 ZmZlciwgMCwgTlVMTCwKPj4gPiAodm9pZAo+PiA+ICoqKSZtYXBwZWRfZGF0YSkpOwo+PiA+ICvC oMKgwqDCoMKgwqDCoCBhdl9pbWFnZV9maWxsX3BvaW50ZXJzKGRhdGEsIGN0eC0+c3dfZm9ybWF0 LCBjdHgtPmhlaWdodCwKPj4gPiBtYXBwZWRfZGF0YSwgbGluZXNpemVzKTsKPj4gPiArCj4+ID4g K8KgwqDCoMKgwqDCoMKgIGF2X2ltYWdlX2NvcHkoZGF0YSwgbGluZXNpemVzLCBzcmMtPmRhdGEs IHNyYy0+bGluZXNpemUsCj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjdHgtPnN3X2Zvcm1hdCwgY3R4LT53aWR0aCwgY3R4LT5oZWlnaHQpOwo+PiA+ICsK Pj4gPiArwqDCoMKgwqDCoMKgwqAgSUQzRDEyUmVzb3VyY2VfVW5tYXAocy0+c3RhZ2luZ191cGxv YWRfYnVmZmVyLCAwLCBOVUxMKTsKPj4gPiArCj4+ID4gK8KgwqDCoMKgwqDCoMKgIElEM0QxMkdy YXBoaWNzQ29tbWFuZExpc3RfUmVzb3VyY2VCYXJyaWVyKHMtPmNvbW1hbmRfbGlzdCwgMSwKPj4g PiAmYmFycmllcik7Cj4+ID4gKwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJHcmFwaGljc0Nv bW1hbmRMaXN0X0NvcHlUZXh0dXJlUmVnaW9uKHMtPmNvbW1hbmRfbGlzdCwKPj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZ0ZXh0dXJlX3lfbG9jYXRp b24sIDAsCj4+ID4gMCwgMCwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICZzdGFnaW5nX3lfbG9jYXRpb24sCj4+ID4gTlVMTCk7Cj4+ID4gKwo+PiA+ ICvCoMKgwqDCoMKgwqDCoCBJRDNEMTJHcmFwaGljc0NvbW1hbmRMaXN0X0NvcHlUZXh0dXJlUmVn aW9uKHMtPmNvbW1hbmRfbGlzdCwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICZ0ZXh0dXJlX3V2X2xvY2F0aW9uLAo+PiA+IDAsCj4+ID4gMCwgMCwK Pj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZzdGFn aW5nX3V2X2xvY2F0aW9uLAo+PiA+IE5VTEwpOwo+PiA+ICsKPj4gPiArwqDCoMKgwqDCoMKgwqAg YmFycmllci5UcmFuc2l0aW9uLlN0YXRlQmVmb3JlID0gYmFycmllci5UcmFuc2l0aW9uLlN0YXRl QWZ0ZXI7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIGJhcnJpZXIuVHJhbnNpdGlvbi5TdGF0ZUFmdGVy ID0gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OOwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBJRDNE MTJHcmFwaGljc0NvbW1hbmRMaXN0X1Jlc291cmNlQmFycmllcihzLT5jb21tYW5kX2xpc3QsIDEs Cj4+ID4gJmJhcnJpZXIpOwo+PiA+ICsKPj4gPiArwqDCoMKgwqDCoMKgwqAgRFhfQ0hFQ0soSUQz RDEyR3JhcGhpY3NDb21tYW5kTGlzdF9DbG9zZShzLT5jb21tYW5kX2xpc3QpKTsKPj4gPiArCj4+ ID4gK8KgwqDCoMKgwqDCoMKgIElEM0QxMkNvbW1hbmRRdWV1ZV9FeGVjdXRlQ29tbWFuZExpc3Rz KHMtPmNvbW1hbmRfcXVldWUsIDEsCj4+ID4gKElEM0QxMkNvbW1hbmRMaXN0ICoqKSZzLT5jb21t YW5kX2xpc3QpOwo+PiA+ICsKPj4gPiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gZDNkMTJ2YV93YWl0 X3F1ZXVlX2lkbGUoJnMtPnN5bmNfY3R4LCBzLT5jb21tYW5kX3F1ZXVlKTsKPj4gPiArwqDCoMKg wqDCoMKgwqAgaWYgKHJldCA8IDApCj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBm YWlsOwo+PiA+ICvCoMKgwqAgfQo+PiA+ICsKPj4gPiArwqDCoMKgIGh3Y3R4LT51bmxvY2soaHdj dHgtPmxvY2tfY3R4KTsKPj4gPiArCj4+ID4gK8KgwqDCoCByZXR1cm4gMDsKPj4gPiArCj4+ID4g K2ZhaWw6Cj4+ID4gK8KgwqDCoCBod2N0eC0+dW5sb2NrKGh3Y3R4LT5sb2NrX2N0eCk7Cj4+ID4g K8KgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+PiA+ICt9Cj4+ID4gKwo+PiA+ICtzdGF0 aWMgaW50IGQzZDEydmFfbG9hZF9mdW5jdGlvbnMoQVZIV0RldmljZUNvbnRleHQgKmh3ZGV2KQo+ PiA+ICt7Cj4+ID4gK8KgwqDCoCBEM0QxMlZBRGV2aWNlUHJpdiAqcHJpdiA9IGh3ZGV2LT5pbnRl cm5hbC0+cHJpdjsKPj4gPiArCj4+ID4gKyNpZiAhSEFWRV9VV1AKPj4gPiArwqDCoMKgIHByaXYt PmQzZDEybGliID0gZGxvcGVuKCJkM2QxMi5kbGwiLCAwKTsKPj4gPiArwqDCoMKgIHByaXYtPmR4 Z2lsaWLCoCA9IGRsb3BlbigiZHhnaS5kbGwiLCAwKTsKPj4gPiArCj4+ID4gK8KgwqDCoCBpZiAo IXByaXYtPmQzZDEybGliIHx8ICFwcml2LT5keGdpbGliKQo+PiA+ICvCoMKgwqDCoMKgwqDCoCBn b3RvIGZhaWw7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgcHJpdi0+Y3JlYXRlX2RldmljZSA9IChQRk5f RDNEMTJfQ1JFQVRFX0RFVklDRSlHZXRQcm9jQWRkcmVzcyhwcml2LQo+PiA+ID4gZDNkMTJsaWIs ICJEM0QxMkNyZWF0ZURldmljZSIpOwo+PiA+ICvCoMKgwqAgaWYgKCFwcml2LT5jcmVhdGVfZGV2 aWNlKQo+PiA+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ID4gKwo+PiA+ICvCoMKgwqAg cHJpdi0+Y3JlYXRlX2R4Z2lfZmFjdG9yeTIgPQo+PiA+IChQRk5fQ1JFQVRFX0RYR0lfRkFDVE9S WTIpR2V0UHJvY0FkZHJlc3MocHJpdi0+ZHhnaWxpYiwKPj4gPiAiQ3JlYXRlRFhHSUZhY3Rvcnky Iik7Cj4+ID4gK8KgwqDCoCBpZiAoIXByaXYtPmNyZWF0ZV9keGdpX2ZhY3RvcnkyKQo+PiA+ICvC oMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgcHJpdi0+Z2V0X2Rl YnVnX2ludGVyZmFjZcKgID0KPj4gPiAoUEZOX0QzRDEyX0dFVF9ERUJVR19JTlRFUkZBQ0UpR2V0 UHJvY0FkZHJlc3MocHJpdi0+ZDNkMTJsaWIsCj4+ID4gIkQzRDEyR2V0RGVidWdJbnRlcmZhY2Ui KTsKPj4gPiArI2Vsc2UKPj4gPiArwqDCoMKgIHByaXYtPmNyZWF0ZV9kZXZpY2XCoMKgwqDCoMKg wqDCoCA9IChQRk5fRDNEMTJfQ1JFQVRFX0RFVklDRSkKPj4gPiBEM0QxMkNyZWF0ZURldmljZTsK Pj4gPiArwqDCoMKgIHByaXYtPmNyZWF0ZV9keGdpX2ZhY3RvcnkyID0gKFBGTl9DUkVBVEVfRFhH SV9GQUNUT1JZMikKPj4gPiBDcmVhdGVEWEdJRmFjdG9yeTI7Cj4+ID4gK8KgwqDCoCBwcml2LT5n ZXRfZGVidWdfaW50ZXJmYWNlwqAgPSAoUEZOX0QzRDEyX0dFVF9ERUJVR19JTlRFUkZBQ0UpCj4+ ID4gRDNEMTJHZXREZWJ1Z0ludGVyZmFjZTsKPj4gPiArI2VuZGlmCj4+ID4gK8KgwqDCoCByZXR1 cm4gMDsKPj4gPiArCj4+ID4gK2ZhaWw6Cj4+ID4gK8KgwqDCoCBhdl9sb2coaHdkZXYsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBsb2FkIEQzRDEyIGxpYnJhcnkgb3IgaXRzCj4+ID4gZnVuY3Rp b25zXG4iKTsKPj4gPiArwqDCoMKgIHJldHVybiBBVkVSUk9SX1VOS05PV047Cj4+ID4gK30KPj4g PiArCj4+ID4gK3N0YXRpYyB2b2lkIGQzZDEydmFfZGV2aWNlX2ZyZWUoQVZIV0RldmljZUNvbnRl eHQgKmh3ZGV2KQo+PiA+ICt7Cj4+ID4gK8KgwqDCoCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0ICpj dHjCoCA9IGh3ZGV2LT5od2N0eDsKPj4gPiArwqDCoMKgIEQzRDEyVkFEZXZpY2VQcml2wqDCoMKg wqDCoCAqcHJpdiA9IGh3ZGV2LT5pbnRlcm5hbC0+cHJpdjsKPj4gPiArCj4+ID4gK8KgwqDCoCBE M0QxMl9PQkpFQ1RfUkVMRUFTRShjdHgtPmRldmljZSk7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgaWYg KHByaXYtPmQzZDEybGliKQo+PiA+ICvCoMKgwqDCoMKgwqDCoCBkbGNsb3NlKHByaXYtPmQzZDEy bGliKTsKPj4gPiArCj4+ID4gK8KgwqDCoCBpZiAocHJpdi0+ZHhnaWxpYikKPj4gPiArwqDCoMKg wqDCoMKgwqAgZGxjbG9zZShwcml2LT5keGdpbGliKTsKPj4gPiArfQo+PiA+ICsKPj4gPiArc3Rh dGljIGludCBkM2QxMnZhX2RldmljZV9pbml0KEFWSFdEZXZpY2VDb250ZXh0ICpod2RldikKPj4g PiArewo+PiA+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqY3R4ID0gaHdkZXYtPmh3 Y3R4Owo+PiA+ICsKPj4gPiArwqDCoMKgIGlmICghY3R4LT5sb2NrKSB7Cj4+ID4gK8KgwqDCoMKg wqDCoMKgIGN0eC0+bG9ja19jdHggPSBDcmVhdGVNdXRleChOVUxMLCAwLCBOVUxMKTsKPj4gPiAr wqDCoMKgwqDCoMKgwqAgaWYgKGN0eC0+bG9ja19jdHggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUp IHsKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coTlVMTCwgQVZfTE9HX0VSUk9S LCAiRmFpbGVkIHRvIGNyZWF0ZSBhIG11dGV4XG4iKTsKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+PiA+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ID4g K8KgwqDCoMKgwqDCoMKgIGN0eC0+bG9ja8KgwqAgPSBkM2QxMnZhX2RlZmF1bHRfbG9jazsKPj4g PiArwqDCoMKgwqDCoMKgwqAgY3R4LT51bmxvY2sgPSBkM2QxMnZhX2RlZmF1bHRfdW5sb2NrOwo+ PiA+ICvCoMKgwqAgfQo+PiA+ICsKPj4gPiArwqDCoMKgIGlmICghY3R4LT52aWRlb19kZXZpY2Up Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIERYX0NIRUNLKElEM0QxMkRldmljZV9RdWVyeUludGVyZmFj ZShjdHgtPmRldmljZSwKPj4gPiAmSUlEX0lEM0QxMlZpZGVvRGV2aWNlLCAodm9pZCAqKikmY3R4 LT52aWRlb19kZXZpY2UpKTsKPj4gPiArCj4+ID4gK8KgwqDCoCByZXR1cm4gMDsKPj4gPiArCj4+ ID4gK2ZhaWw6Cj4+ID4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+PiA+ICt9Cj4+ ID4gKwo+PiA+ICtzdGF0aWMgdm9pZCBkM2QxMnZhX2RldmljZV91bmluaXQoQVZIV0RldmljZUNv bnRleHQgKmh3ZGV2KQo+PiA+ICt7Cj4+ID4gK8KgwqDCoCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0 ICpkZXZpY2VfaHdjdHggPSBod2Rldi0+aHdjdHg7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgRDNEMTJf T0JKRUNUX1JFTEVBU0UoZGV2aWNlX2h3Y3R4LT52aWRlb19kZXZpY2UpOwo+PiA+ICsKPj4gPiAr wqDCoMKgIGlmIChkZXZpY2VfaHdjdHgtPmxvY2sgPT0gZDNkMTJ2YV9kZWZhdWx0X2xvY2spIHsK Pj4gPiArwqDCoMKgwqDCoMKgwqAgQ2xvc2VIYW5kbGUoZGV2aWNlX2h3Y3R4LT5sb2NrX2N0eCk7 Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIGRldmljZV9od2N0eC0+bG9ja19jdHggPSBJTlZBTElEX0hB TkRMRV9WQUxVRTsKPj4gPiArwqDCoMKgwqDCoMKgwqAgZGV2aWNlX2h3Y3R4LT5sb2NrID0gTlVM TDsKPj4gPiArwqDCoMKgIH0KPj4gPiArfQo+PiA+ICsKPj4gPiArc3RhdGljIGludCBkM2QxMnZh X2RldmljZV9jcmVhdGUoQVZIV0RldmljZUNvbnRleHQgKmh3ZGV2LCBjb25zdCBjaGFyCj4+ID4g KmRldmljZSwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBVkRpY3Rpb25hcnkgKm9wdHMsIGludCBmbGFncykKPj4g PiArewo+PiA+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqY3R4wqAgPSBod2Rldi0+ aHdjdHg7Cj4+ID4gK8KgwqDCoCBEM0QxMlZBRGV2aWNlUHJpdsKgwqDCoMKgwqAgKnByaXYgPSBo d2Rldi0+aW50ZXJuYWwtPnByaXY7Cj4+ID4gKwo+PiA+ICvCoMKgwqAgSFJFU1VMVCBocjsKPj4g PiArwqDCoMKgIFVJTlQgY3JlYXRlX2ZsYWdzID0gMDsKPj4gPiArwqDCoMKgIElEWEdJQWRhcHRl ciAqcEFkYXB0ZXIgPSBOVUxMOwo+PiA+ICsKPj4gPiArwqDCoMKgIGludCByZXQ7Cj4+ID4gK8Kg wqDCoCBpbnQgaXNfZGVidWcgPSAhIWF2X2RpY3RfZ2V0KG9wdHMsICJkZWJ1ZyIsIE5VTEwsIDAp Owo+PiA+ICsKPj4gPiArwqDCoMKgIGh3ZGV2LT5mcmVlID0gZDNkMTJ2YV9kZXZpY2VfZnJlZTsK Pj4gPiArCj4+ID4gK8KgwqDCoCByZXQgPSBkM2QxMnZhX2xvYWRfZnVuY3Rpb25zKGh3ZGV2KTsK Pj4gPiArwqDCoMKgIGlmIChyZXQgPCAwKQo+PiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0 Owo+PiA+ICsKPj4gPiArwqDCoMKgIGlmIChpc19kZWJ1Zykgewo+PiA+ICvCoMKgwqDCoMKgwqDC oCBJRDNEMTJEZWJ1ZyAqcERlYnVnOwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAocHJpdi0+Z2V0 X2RlYnVnX2ludGVyZmFjZSAmJiBTVUNDRUVERUQocHJpdi0KPj4gPiA+IGdldF9kZWJ1Z19pbnRl cmZhY2UoJklJRF9JRDNEMTJEZWJ1ZywgKHZvaWQgKiopJnBEZWJ1ZykpKSB7Cj4+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY3JlYXRlX2ZsYWdzIHw9IERYR0lfQ1JFQVRFX0ZBQ1RPUllfREVC VUc7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSUQzRDEyRGVidWdfRW5hYmxlRGVidWdM YXllcihwRGVidWcpOwo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEQzRDEyX09CSkVDVF9S RUxFQVNFKHBEZWJ1Zyk7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGh3ZGV2 LCBBVl9MT0dfSU5GTywgIkQzRDEyIGRlYnVnIGxheWVyIGlzIGVuYWJsZWQhXG4iKTsKPj4gPiAr wqDCoMKgwqDCoMKgwqAgfQo+PiA+ICvCoMKgwqAgfQo+PiA+ICsKPj4gPiArwqDCoMKgIGlmICgh Y3R4LT5kZXZpY2UpIHsKPj4gPiArwqDCoMKgwqDCoMKgwqAgSURYR0lGYWN0b3J5MiAqcERYR0lG YWN0b3J5ID0gTlVMTDsKPj4gPiArCj4+ID4gK8KgwqDCoMKgwqDCoMKgIGhyID0gcHJpdi0+Y3Jl YXRlX2R4Z2lfZmFjdG9yeTIoY3JlYXRlX2ZsYWdzLCAmSUlEX0lEWEdJRmFjdG9yeTIsCj4+ID4g KHZvaWQgKiopJnBEWEdJRmFjdG9yeSk7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgIGlmIChTVUNDRUVE RUQoaHIpKSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGFkYXB0ZXIgPSBkZXZp Y2UgPyBhdG9pKGRldmljZSkgOiAwOwo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChG QUlMRUQoSURYR0lGYWN0b3J5Ml9FbnVtQWRhcHRlcnMocERYR0lGYWN0b3J5LCBhZGFwdGVyLAo+ PiA+ICZwQWRhcHRlcikpKQo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcEFk YXB0ZXIgPSBOVUxMOwo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElEWEdJRmFjdG9yeTJf UmVsZWFzZShwRFhHSUZhY3RvcnkpOwo+PiA+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ID4gKwo+PiA+ ICvCoMKgwqDCoMKgwqDCoCBpZiAocEFkYXB0ZXIpIHsKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBEWEdJX0FEQVBURVJfREVTQyBkZXNjOwo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGhyID0gSURYR0lBZGFwdGVyMl9HZXREZXNjKHBBZGFwdGVyLCAmZGVzYyk7Cj4+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFGQUlMRUQoaHIpKSB7Cj4+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIlVzaW5nIGRldmljZSAl MDR4OiUwNHggKCVscykuXG4iLAo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkZXNjLlZlbmRvcklkLCBkZXNjLkRldmljZUlkLCBkZXNjLkRlc2NyaXB0 aW9uKTsKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ID4gK8KgwqDCoMKgwqDCoMKg IH0KPj4gPiArCj4+ID4gK8KgwqDCoMKgwqDCoMKgIGhyID0gcHJpdi0+Y3JlYXRlX2RldmljZSgo SVVua25vd24gKilwQWRhcHRlciwKPj4gPiBEM0RfRkVBVFVSRV9MRVZFTF8xMl8wLCAmSUlEX0lE M0QxMkRldmljZSwgKHZvaWQgKiopJmN0eC0+ZGV2aWNlKTsKPj4gPiArwqDCoMKgwqDCoMKgwqAg RDNEMTJfT0JKRUNUX1JFTEVBU0UocEFkYXB0ZXIpOwo+PiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAo RkFJTEVEKGhyKSkgewo+PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgRGlyZWN0IDNEIDEyIGRldmljZQo+PiA+ICgl bHgpXG4iLCAobG9uZylocik7Cj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFW RVJST1JfVU5LTk9XTjsKPj4gPiArwqDCoMKgwqDCoMKgwqAgfQo+PiA+ICvCoMKgwqAgfQo+PiA+ ICsKPj4gPiArwqDCoMKgIHJldHVybiAwOwo+PiA+ICt9Cj4+ID4gKwo+PiA+ICtjb25zdCBIV0Nv bnRleHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX2QzZDEydmEgPSB7Cj4+ID4gK8KgwqDCoCAudHlw ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEFWX0hXREVWSUNFX1RZUEVf RDNEMTJWQSwKPj4gPiArwqDCoMKgIC5uYW1lwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgID0gIkQzRDEyVkEiLAo+PiA+ICsKPj4gPiArwqDCoMKgIC5kZXZpY2VfaHdjdHhfc2l6 ZcKgwqDCoMKgwqAgPSBzaXplb2YoQVZEM0QxMlZBRGV2aWNlQ29udGV4dCksCj4+ID4gK8KgwqDC oCAuZGV2aWNlX3ByaXZfc2l6ZcKgwqDCoMKgwqDCoCA9IHNpemVvZihEM0QxMlZBRGV2aWNlUHJp diksCj4+ID4gK8KgwqDCoCAuZnJhbWVzX2h3Y3R4X3NpemXCoMKgwqDCoMKgID0gc2l6ZW9mKEFW RDNEMTJWQUZyYW1lc0NvbnRleHQpLAo+PiA+ICvCoMKgwqAgLmZyYW1lc19wcml2X3NpemXCoMKg wqDCoMKgwqAgPSBzaXplb2YoRDNEMTJWQUZyYW1lc0NvbnRleHQpLAo+PiA+ICsKPj4gPiArwqDC oMKgIC5kZXZpY2VfY3JlYXRlwqDCoMKgwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9kZXZpY2VfY3Jl YXRlLAo+PiA+ICvCoMKgwqAgLmRldmljZV9pbml0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGQz ZDEydmFfZGV2aWNlX2luaXQsCj4+ID4gK8KgwqDCoCAuZGV2aWNlX3VuaW5pdMKgwqDCoMKgwqDC oMKgwqDCoCA9IGQzZDEydmFfZGV2aWNlX3VuaW5pdCwKPj4gPiArwqDCoMKgIC5mcmFtZXNfZ2V0 X2NvbnN0cmFpbnRzID0gZDNkMTJ2YV9mcmFtZXNfZ2V0X2NvbnN0cmFpbnRzLAo+PiA+ICvCoMKg wqAgLmZyYW1lc19pbml0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGQzZDEydmFfZnJhbWVzX2lu aXQsCj4+ID4gK8KgwqDCoCAuZnJhbWVzX3VuaW5pdMKgwqDCoMKgwqDCoMKgwqDCoCA9IGQzZDEy dmFfZnJhbWVzX3VuaW5pdCwKPj4gPiArwqDCoMKgIC5mcmFtZXNfZ2V0X2J1ZmZlcsKgwqDCoMKg wqAgPSBkM2QxMnZhX2dldF9idWZmZXIsCj4+ID4gK8KgwqDCoCAudHJhbnNmZXJfZ2V0X2Zvcm1h dHPCoMKgID0gZDNkMTJ2YV90cmFuc2Zlcl9nZXRfZm9ybWF0cywKPj4gPiArwqDCoMKgIC50cmFu c2Zlcl9kYXRhX3RvwqDCoMKgwqDCoMKgID0gZDNkMTJ2YV90cmFuc2Zlcl9kYXRhLAo+PiA+ICvC oMKgwqAgLnRyYW5zZmVyX2RhdGFfZnJvbcKgwqDCoMKgID0gZDNkMTJ2YV90cmFuc2Zlcl9kYXRh LAo+PiA+ICsKPj4gPiArwqDCoMKgIC5waXhfZm10c8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgPSAoY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0W10pewo+PiA+IEFWX1BJWF9GTVRfRDNEMTIs Cj4+ID4gQVZfUElYX0ZNVF9OT05FIH0sCj4+ID4gK307Cj4+ID4gZGlmZiAtLWdpdCBhL2xpYmF2 dXRpbC9od2NvbnRleHRfZDNkMTJ2YS5oIGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgK Pj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiA+IGluZGV4IDAwMDAwMDAwMDAuLmZmMDZlNmYy ZWYKPj4gPiAtLS0gL2Rldi9udWxsCj4+ID4gKysrIGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2Qx MnZhLmgKPj4gPiBAQCAtMCwwICsxLDEzNCBAQAo+PiA+ICsvKgo+PiA+ICsgKiBEaXJlY3QzRCAx MiBIVyBhY2NlbGVyYXRpb24uCj4+ID4gKyAqCj4+ID4gKyAqIGNvcHlyaWdodCAoYykgMjAyMi0y MDIzIFd1IEppYW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4KPj4gPiArICoKPj4gPiArICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+PiA+ICsgKgo+PiA+ICsgKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4+ID4gKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4g PiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCj4+ID4gKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+PiA+ICsgKgo+PiA+ICsgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLsKgIFNlZSB0aGUgR05VCj4+ID4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ID4gKyAqCj4+ID4gKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPj4gPiAr ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQo+PiA+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEKPj4gPiBVU0EKPj4gPiArICovCj4+ID4g Kwo+PiA+ICsjaWZuZGVmIEFWVVRJTF9IV0NPTlRFWFRfRDNEMTJWQV9ICj4+ID4gKyNkZWZpbmUg QVZVVElMX0hXQ09OVEVYVF9EM0QxMlZBX0gKPj4gPiArCj4+ID4gKy8qKgo+PiA+ICsgKiBAZmls ZQo+PiA+ICsgKiBBbiBBUEktc3BlY2lmaWMgaGVhZGVyIGZvciBBVl9IV0RFVklDRV9UWVBFX0Qz RDEyVkEuCj4+ID4gKyAqCj4+ID4gKyAqIEFWSFdGcmFtZXNDb250ZXh0LnBvb2wgbXVzdCBjb250 YWluIEFWQnVmZmVyUmVmcyB3aG9zZQo+PiA+ICsgKiBkYXRhIHBvaW50ZXIgcG9pbnRzIHRvIGFu IEFWRDNEMTJWQUZyYW1lIHN0cnVjdC4KPj4gPiArICovCj4+ID4gKyNpbmNsdWRlIDxzdGRpbnQu aD4KPj4gPiArI2luY2x1ZGUgPGluaXRndWlkLmg+Cj4+ID4gKyNpbmNsdWRlIDxkM2QxMi5oPgo+ PiA+ICsjaW5jbHVkZSA8ZDNkMTJzZGtsYXllcnMuaD4KPj4gPiArI2luY2x1ZGUgPGQzZDEydmlk ZW8uaD4KPj4gPiArCj4+ID4gKy8qKgo+PiA+ICsgKiBAYnJpZWYgVGhpcyBzdHJ1Y3QgaXMgYWxs b2NhdGVkIGFzIEFWSFdEZXZpY2VDb250ZXh0Lmh3Y3R4Cj4+ID4gKyAqCj4+ID4gKyAqLwo+PiA+ ICt0eXBlZGVmIHN0cnVjdCBBVkQzRDEyVkFEZXZpY2VDb250ZXh0IHsKPj4gPiArwqDCoMKgIC8q Kgo+PiA+ICvCoMKgwqDCoCAqIERldmljZSB1c2VkIGZvciBvYmplY3RzIGNyZWF0aW9uIGFuZCBh Y2Nlc3MuIFRoaXMgY2FuIGFsc28gYmUKPj4gPiArwqDCoMKgwqAgKiB1c2VkIHRvIHNldCB0aGUg bGliYXZjb2RlYyBkZWNvZGluZyBkZXZpY2UuCj4+ID4gK8KgwqDCoMKgICoKPj4gPiArwqDCoMKg wqAgKiBDYW4gYmUgc2V0IGJ5IHRoZSB1c2VyLiBUaGlzIGlzIHRoZSBvbmx5IG1hbmRhdG9yeSBm aWVsZCAtIHRoZSBvdGhlcgo+PiA+ICvCoMKgwqDCoCAqIGRldmljZSBjb250ZXh0IGZpZWxkcyBh cmUgc2V0IGZyb20gdGhpcyBhbmQgYXJlIGF2YWlsYWJsZSBmb3IKPj4gPiBjb252ZW5pZW5jZS4K Pj4gPiArwqDCoMKgwqAgKgo+PiA+ICvCoMKgwqDCoCAqIERlYWxsb2NhdGluZyB0aGUgQVZIV0Rl dmljZUNvbnRleHQgd2lsbCBhbHdheXMgcmVsZWFzZSB0aGlzCj4+ID4gaW50ZXJmYWNlLAo+PiA+ ICvCoMKgwqDCoCAqIGFuZCBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hldGhlciBpdCB3YXMgdXNlci1h bGxvY2F0ZWQuCj4+ID4gK8KgwqDCoMKgICovCj4+ID4gK8KgwqDCoCBJRDNEMTJEZXZpY2UgKmRl dmljZTsKPj4gPiArCj4+ID4gK8KgwqDCoCAvKioKPj4gPiArwqDCoMKgwqAgKiBJZiB1bnNldCwg dGhpcyB3aWxsIGJlIHNldCBmcm9tIHRoZSBkZXZpY2UgZmllbGQgb24gaW5pdC4KPj4gPiArwqDC oMKgwqAgKgo+PiA+ICvCoMKgwqDCoCAqIERlYWxsb2NhdGluZyB0aGUgQVZIV0RldmljZUNvbnRl eHQgd2lsbCBhbHdheXMgcmVsZWFzZSB0aGlzCj4+ID4gaW50ZXJmYWNlLAo+PiA+ICvCoMKgwqDC oCAqIGFuZCBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hldGhlciBpdCB3YXMgdXNlci1hbGxvY2F0ZWQu Cj4+ID4gK8KgwqDCoMKgICovCj4+ID4gK8KgwqDCoCBJRDNEMTJWaWRlb0RldmljZSAqdmlkZW9f ZGV2aWNlOwo+PiA+ICsKPj4gPiArwqDCoMKgIC8qKgo+PiA+ICvCoMKgwqDCoCAqIENhbGxiYWNr cyBmb3IgbG9ja2luZy4gVGhleSBwcm90ZWN0IGFjY2VzcyB0byB0aGUgaW50ZXJuYWwgc3RhZ2lu Zwo+PiA+ICvCoMKgwqDCoCAqIHRleHR1cmUgKGZvciBhdl9od2ZyYW1lX3RyYW5zZmVyX2RhdGEo KSBjYWxscykuIFRoZXkgZG8gTk9UIHByb3RlY3QKPj4gPiArwqDCoMKgwqAgKiBhY2Nlc3MgdG8g aHdjb250ZXh0IG9yIGRlY29kZXIgc3RhdGUgaW4gZ2VuZXJhbC4KPj4gPiArwqDCoMKgwqAgKgo+ PiA+ICvCoMKgwqDCoCAqIElmIHVuc2V0IG9uIGluaXQsIHRoZSBod2NvbnRleHQgaW1wbGVtZW50 YXRpb24gd2lsbCBzZXQgdGhlbSB0byB1c2UKPj4gPiBhbgo+PiA+ICvCoMKgwqDCoCAqIGludGVy bmFsIG11dGV4Lgo+PiA+ICvCoMKgwqDCoCAqCj4+ID4gK8KgwqDCoMKgICogVGhlIHVuZGVybHlp bmcgbG9jayBtdXN0IGJlIHJlY3Vyc2l2ZS4gbG9ja19jdHggaXMgZm9yIGZyZWUgdXNlIGJ5Cj4+ ID4gdGhlCj4+ID4gK8KgwqDCoMKgICogbG9ja2luZyBpbXBsZW1lbnRhdGlvbi4KPj4gPiArwqDC oMKgwqAgKi8KPj4gPiArwqDCoMKgIHZvaWQgKCpsb2NrKSh2b2lkICpsb2NrX2N0eCk7Cj4+ID4g K8KgwqDCoCB2b2lkICgqdW5sb2NrKSh2b2lkICpsb2NrX2N0eCk7Cj4+ID4gK8KgwqDCoCB2b2lk ICpsb2NrX2N0eDsKPj4gPiArfSBBVkQzRDEyVkFEZXZpY2VDb250ZXh0Owo+PiA+ICsKPj4gPiAr LyoqCj4+ID4gKyAqIEBicmllZiBUaGlzIHN0cnVjdCBpcyB1c2VkIHRvIHN5bmMgZDNkMTIgZXhl Y3V0aW9uCj4+ID4gKyAqCj4+ID4gKyAqLwo+PiA+ICt0eXBlZGVmIHN0cnVjdCBBVkQzRDEyVkFT eW5jQ29udGV4dCB7Cj4+ID4gK8KgwqDCoCAvKioKPj4gPiArwqDCoMKgwqAgKiBEM0QxMiBmZW5j ZSBvYmplY3QKPj4gPiArwqDCoMKgwqAgKi8KPj4gPiArwqDCoMKgIElEM0QxMkZlbmNlICpmZW5j ZTsKPj4gPiArCj4+ID4gK8KgwqDCoCAvKioKPj4gPiArwqDCoMKgwqAgKiBBIGhhbmRsZSB0byB0 aGUgZXZlbnQgb2JqZWN0IHRoYXQncyByYWlzZWQgd2hlbiB0aGUgZmVuY2UKPj4gPiArwqDCoMKg wqAgKiByZWFjaGVzIGEgY2VydGFpbiB2YWx1ZS4KPj4gPiArwqDCoMKgwqAgKi8KPj4gPiArwqDC oMKgIEhBTkRMRSBldmVudDsKPj4gPiArCj4+ID4gK8KgwqDCoCAvKioKPj4gPiArwqDCoMKgwqAg KiBUaGUgZmVuY2UgdmFsdWUgdXNlZCBmb3Igc3luYwo+PiA+ICvCoMKgwqDCoCAqLwo+PiA+ICvC oMKgwqAgdWludDY0X3QgZmVuY2VfdmFsdWU7Cj4+ID4gK30gQVZEM0QxMlZBU3luY0NvbnRleHQ7 Cj4+ID4gKwo+PiA+ICsvKioKPj4gPiArICogQGJyaWVmIEQzRDEyVkEgZnJhbWUgZGVzY3JpcHRv ciBmb3IgcG9vbCBhbGxvY2F0aW9uLgo+PiA+ICsgKgo+PiA+ICsgKi8KPj4gPiArdHlwZWRlZiBz dHJ1Y3QgQVZEM0QxMlZBRnJhbWUgewo+PiA+ICvCoMKgwqAgLyoqCj4+ID4gK8KgwqDCoMKgICog VGhlIHRleHR1cmUgaW4gd2hpY2ggdGhlIGZyYW1lIGlzIGxvY2F0ZWQuIFRoZSByZWZlcmVuY2Ug Y291bnQgaXMKPj4gPiArwqDCoMKgwqAgKiBtYW5hZ2VkIGJ5IHRoZSBBVkJ1ZmZlclJlZiwgYW5k IGRlc3Ryb3lpbmcgdGhlIHJlZmVyZW5jZSB3aWxsCj4+ID4gcmVsZWFzZQo+PiA+ICvCoMKgwqDC oCAqIHRoZSBpbnRlcmZhY2UuCj4+ID4gK8KgwqDCoMKgICovCj4+ID4gK8KgwqDCoCBJRDNEMTJS ZXNvdXJjZSAqdGV4dHVyZTsKPj4gPiArCj4+ID4gK8KgwqDCoCAvKioKPj4gPiArwqDCoMKgwqAg KiBUaGUgc3luYyBjb250ZXh0IGZvciB0aGUgdGV4dHVyZQo+PiA+ICvCoMKgwqDCoCAqCj4+ID4g K8KgwqDCoMKgICogQHNlZToKPj4gPiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMv d2luZG93cy93aW4zMi9tZWRmb3VuZC9kaXJlY3QzZC0xMi12aWRlby1vdmVydmlldyNkaXJlY3R4 LTEyLWZlbmNlcwo+PiA+ICvCoMKgwqDCoCAqLwo+PiA+ICvCoMKgwqAgQVZEM0QxMlZBU3luY0Nv bnRleHQgc3luY19jdHg7Cj4+ID4gK30gQVZEM0QxMlZBRnJhbWU7Cj4+ID4gKwo+PiA+ICsvKioK Pj4gPiArICogQGJyaWVmIFRoaXMgc3RydWN0IGlzIGFsbG9jYXRlZCBhcyBBVkhXRnJhbWVzQ29u dGV4dC5od2N0eAo+PiA+ICsgKgo+PiA+ICsgKi8KPj4gPiArdHlwZWRlZiBzdHJ1Y3QgQVZEM0Qx MlZBRnJhbWVzQ29udGV4dCB7Cj4+ID4gK8KgwqDCoCAvKioKPj4gPiArwqDCoMKgwqAgKiBEWEdJ X0ZPUk1BVCBmb3JtYXQuIE1VU1QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBwaXhlbCBmb3JtYXQu Cj4+ID4gK8KgwqDCoMKgICogSWYgdW5zZXQsIHdpbGwgYmUgYXV0b21hdGljYWxseSBzZXQuCj4+ ID4gK8KgwqDCoMKgICovCj4+ID4gK8KgwqDCoCBEWEdJX0ZPUk1BVCBmb3JtYXQ7Cj4+ID4gK30g QVZEM0QxMlZBRnJhbWVzQ29udGV4dDsKPj4gPiArCj4+ID4gKyNlbmRpZiAvKiBBVlVUSUxfSFdD T05URVhUX0QzRDEyVkFfSCAqLwo+PiA+IGRpZmYgLS1naXQgYS9saWJhdnV0aWwvaHdjb250ZXh0 X2QzZDEydmFfaW50ZXJuYWwuaAo+PiA+IGIvbGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhX2lu dGVybmFsLmgKPj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiA+IGluZGV4IDAwMDAwMDAwMDAu LmJmZDg5YjM1NDUKPj4gPiAtLS0gL2Rldi9udWxsCj4+ID4gKysrIGIvbGliYXZ1dGlsL2h3Y29u dGV4dF9kM2QxMnZhX2ludGVybmFsLmgKPj4gPiBAQCAtMCwwICsxLDU5IEBACj4+ID4gKy8qCj4+ ID4gKyAqIERpcmVjdDNEIDEyIEhXIGFjY2VsZXJhdGlvbi4KPj4gPiArICoKPj4gPiArICogY29w eXJpZ2h0IChjKSAyMDIyLTIwMjMgV3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPgo+PiA+ ICsgKgo+PiA+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4+ID4gKyAqCj4+ID4g KyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKPj4gPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYwo+PiA+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPj4gPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ID4gKyAqCj4+ ID4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAo+PiA+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+PiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBHTlUKPj4gPiArICogTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4gPiArICoKPj4gPiAr ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwo+PiA+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4+ID4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQo+PiA+IFVT QQo+PiA+ICsgKi8KPj4gPiArCj4+ID4gKyNpZm5kZWYgQVZVVElMX0hXQ09OVEVYVF9EM0QxMlZB X0lOVEVSTkFMX0gKPj4gPiArI2RlZmluZSBBVlVUSUxfSFdDT05URVhUX0QzRDEyVkFfSU5URVJO QUxfSAo+PiA+ICsKPj4gPiArLyoqCj4+ID4gKyAqIEBkZWYgQ09CSk1BQ1JPUwo+PiA+ICsgKgo+ PiA+ICsgKiBAYnJpZWYgRW5hYmxlIEMgc3R5bGUgaW50ZXJmYWNlIGZvciBEM0QxMgo+PiA+ICsg Ki8KPj4gPiArI2lmbmRlZiBDT0JKTUFDUk9TCj4+ID4gKyNkZWZpbmUgQ09CSk1BQ1JPUwo+PiA+ ICsjZW5kaWYKPj4gPiArCj4+ID4gKy8qKgo+PiA+ICsgKiBAZGVmIERYX0NIRUNLCj4+ID4gKyAq Cj4+ID4gKyAqIEBicmllZiBBIGNoZWNrIG1hY3JvIHVzZWQgYnkgRDNEMTIgZnVuY3Rpb25zIGhp Z2hseSBmcmVxdWVudGx5Cj4+ID4gKyAqLwo+PiA+ICsjZGVmaW5lIERYX0NIRUNLKGhyKcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ PiA+ICvCoMKgwqAgZG8ge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiA+ICvCoMKgwqDC oMKgwqDCoCBpZiAoRkFJTEVEKGhyKSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZh aWw7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFwKPj4gPiArwqDCoMKgIH0gd2hpbGUgKDApCj4+ID4gKwo+PiA+ICsvKioKPj4gPiArICogQGRl ZiBEM0QxMl9PQkpFQ1RfUkVMRUFTRQo+PiA+ICsgKgo+PiA+ICsgKiBAYnJpZWYgQSByZWxlYXNl IG1hY3JvIHVzZWQgYnkgRDNEMTIgb2JqZWN0cyBoaWdobHkgZnJlcXVlbnRseQo+PiA+ICsgKi8K Pj4gPiArI2RlZmluZSBEM0QxMl9PQkpFQ1RfUkVMRUFTRShwSW50ZXJmYWNlKcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFwKPj4gPiArwqDCoMKgIGRvIHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgXAo+PiA+ICvCoMKgwqDCoMKgwqDCoCBpZiAocEludGVyZmFjZSkge8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJVW5rbm93bl9SZWxlYXNlKChJVW5rbm93biAqKXBJ bnRlcmZhY2UpOyBcCj4+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcEludGVyZmFjZSA9IE5V TEw7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ID4g K8KgwqDCoMKgwqDCoMKgIH3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4gPiAr wqDCoMKgIH0gd2hpbGUgKDApCj4+ID4gKwo+PiA+ICsjZW5kaWYgLyogQVZVVElMX0hXQ09OVEVY VF9EM0QxMlZBX0lOVEVSTkFMX0ggKi8KPj4gPiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK Pj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL2h3Y29udGV4dF9pbnRlcm5hbC5oIGIvbGliYXZ1 dGlsL2h3Y29udGV4dF9pbnRlcm5hbC5oCj4+ID4gaW5kZXggZTYyNjY0OTRhYy4uNGRmNTE2ZWU2 YSAxMDA2NDQKPj4gPiAtLS0gYS9saWJhdnV0aWwvaHdjb250ZXh0X2ludGVybmFsLmgKPj4gPiAr KysgYi9saWJhdnV0aWwvaHdjb250ZXh0X2ludGVybmFsLmgKPj4gPiBAQCAtMTY1LDYgKzE2NSw3 IEBAIGludCBmZl9od2ZyYW1lX21hcF9yZXBsYWNlKEFWRnJhbWUgKmRzdCwgY29uc3QgQVZGcmFt ZQo+PiA+ICpzcmMpOwo+PiA+IMKgCj4+ID4gwqBleHRlcm4gY29uc3QgSFdDb250ZXh0VHlwZSBm Zl9od2NvbnRleHRfdHlwZV9jdWRhOwo+PiA+IMKgZXh0ZXJuIGNvbnN0IEhXQ29udGV4dFR5cGUg ZmZfaHdjb250ZXh0X3R5cGVfZDNkMTF2YTsKPj4gPiArZXh0ZXJuIGNvbnN0IEhXQ29udGV4dFR5 cGUgZmZfaHdjb250ZXh0X3R5cGVfZDNkMTJ2YTsKPj4gPiDCoGV4dGVybiBjb25zdCBIV0NvbnRl eHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX2RybTsKPj4gPiDCoGV4dGVybiBjb25zdCBIV0NvbnRl eHRUeXBlIGZmX2h3Y29udGV4dF90eXBlX2R4dmEyOwo+PiA+IMKgZXh0ZXJuIGNvbnN0IEhXQ29u dGV4dFR5cGUgZmZfaHdjb250ZXh0X3R5cGVfb3BlbmNsOwo+PiA+IGRpZmYgLS1naXQgYS9saWJh dnV0aWwvcGl4ZGVzYy5jIGIvbGliYXZ1dGlsL3BpeGRlc2MuYwo+PiA+IGluZGV4IDRlNGE2M2Uy ODcuLjBkYjQxNjc5MzQgMTAwNjQ0Cj4+ID4gLS0tIGEvbGliYXZ1dGlsL3BpeGRlc2MuYwo+PiA+ ICsrKyBiL2xpYmF2dXRpbC9waXhkZXNjLmMKPj4gPiBAQCAtMjMxMSw2ICsyMzExLDEwIEBAIHN0 YXRpYyBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IKPj4gPiBhdl9waXhfZm10X2Rlc2NyaXB0b3Jz W0FWX1BJWF9GTVRfTkJdID0gewo+PiA+IMKgwqDCoMKgwqDCoMKgwqAgLm5hbWUgPSAiZDNkMTEi LAo+PiA+IMKgwqDCoMKgwqDCoMKgwqAgLmZsYWdzID0gQVZfUElYX0ZNVF9GTEFHX0hXQUNDRUws Cj4+ID4gwqDCoMKgwqAgfSwKPj4gPiArwqDCoMKgIFtBVl9QSVhfRk1UX0QzRDEyXSA9IHsKPj4g PiArwqDCoMKgwqDCoMKgwqAgLm5hbWUgPSAiZDNkMTIiLAo+PiA+ICvCoMKgwqDCoMKgwqDCoCAu ZmxhZ3MgPSBBVl9QSVhfRk1UX0ZMQUdfSFdBQ0NFTCwKPj4gPiArwqDCoMKgIH0sCj4+ID4gwqDC oMKgwqAgW0FWX1BJWF9GTVRfR0JSUEYzMkJFXSA9IHsKPj4gPiDCoMKgwqDCoMKgwqDCoMKgIC5u YW1lID0gImdicnBmMzJiZSIsCj4+ID4gwqDCoMKgwqDCoMKgwqDCoCAubmJfY29tcG9uZW50cyA9 IDMsCj4+ID4gZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC9waXhmbXQuaCBiL2xpYmF2dXRpbC9waXhm bXQuaAo+PiA+IGluZGV4IGEyNmM3MmQ1NmIuLjU4ZjlhZDI4YmQgMTAwNjQ0Cj4+ID4gLS0tIGEv bGliYXZ1dGlsL3BpeGZtdC5oCj4+ID4gKysrIGIvbGliYXZ1dGlsL3BpeGZtdC5oCj4+ID4gQEAg LTQyOSw2ICs0MjksMTMgQEAgZW51bSBBVlBpeGVsRm9ybWF0IHsKPj4gPiDCoMKgwqDCoCBBVl9Q SVhfRk1UX0dCUkFQMTRCRSzCoCAvLy88IHBsYW5hciBHQlIgNDo0OjQ6NCA1NmJwcCwgYmlnLWVu ZGlhbgo+PiA+IMKgwqDCoMKgIEFWX1BJWF9GTVRfR0JSQVAxNExFLMKgIC8vLzwgcGxhbmFyIEdC UiA0OjQ6NDo0IDU2YnBwLCBsaXR0bGUtZW5kaWFuCj4+ID4gwqAKPj4gPiArwqDCoMKgIC8qKgo+ PiA+ICvCoMKgwqDCoCAqIEhhcmR3YXJlIHN1cmZhY2VzIGZvciBEaXJlY3QzRCAxMi4KPj4gPiAr wqDCoMKgwqAgKgo+PiA+ICvCoMKgwqDCoCAqIGRhdGFbMF0gcG9pbnRzIHRvIGFuIEFWRDNEMTJW QUZyYW1lCj4+ID4gK8KgwqDCoMKgICovCj4+ID4gK8KgwqDCoCBBVl9QSVhfRk1UX0QzRDEyLAo+ PiA+ICsKPj4gPiDCoMKgwqDCoCBBVl9QSVhfRk1UX05CwqDCoMKgwqDCoMKgwqDCoCAvLy88IG51 bWJlciBvZiBwaXhlbCBmb3JtYXRzLCBETyBOT1QgVVNFIFRISVMgaWYKPj4gPiB5b3Ugd2FudCB0 byBsaW5rIHdpdGggc2hhcmVkIGxpYmF2KiBiZWNhdXNlIHRoZSBudW1iZXIgb2YgZm9ybWF0cyBt aWdodAo+PiA+IGRpZmZlcgo+PiA+IGJldHdlZW4gdmVyc2lvbnMKPj4gPiDCoH07Cj4+ID4gwqAK Pj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3Rlc3RzL2h3ZGV2aWNlLmMgYi9saWJhdnV0aWwv dGVzdHMvaHdkZXZpY2UuYwo+PiA+IGluZGV4IGM1NzU4NjYxM2EuLjlkNzk2NGY5ZWUgMTAwNjQ0 Cj4+ID4gLS0tIGEvbGliYXZ1dGlsL3Rlc3RzL2h3ZGV2aWNlLmMKPj4gPiArKysgYi9saWJhdnV0 aWwvdGVzdHMvaHdkZXZpY2UuYwo+PiA+IEBAIC0xMzcsNiArMTM3LDggQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCB7Cj4+ID4gwqDCoMKgwqDCoMKgIHsgIjAiLCAiMSIsICIyIiB9IH0sCj4+ID4gwqDC oMKgwqAgeyBBVl9IV0RFVklDRV9UWVBFX0QzRDExVkEsCj4+ID4gwqDCoMKgwqDCoMKgIHsgIjAi LCAiMSIsICIyIiB9IH0sCj4+ID4gK8KgwqDCoCB7IEFWX0hXREVWSUNFX1RZUEVfRDNEMTJWQSwK Pj4gPiArwqDCoMKgwqDCoCB7ICIwIiwgIjEiLCAiMiIgfSB9LAo+PiA+IMKgwqDCoMKgIHsgQVZf SFdERVZJQ0VfVFlQRV9PUEVOQ0wsCj4+ID4gwqDCoMKgwqDCoMKgIHsgIjAuMCIsICIwLjEiLCAi MS4wIiwgIjEuMSIgfSB9LAo+PiA+IMKgwqDCoMKgIHsgQVZfSFdERVZJQ0VfVFlQRV9WQUFQSSwK Pj4gPiBkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3ZlcnNpb24uaCBiL2xpYmF2dXRpbC92ZXJzaW9u LmgKPj4gPiBpbmRleCBjNWZhN2MzNjkyLi4wNjg0OTk2YmYyIDEwMDY0NAo+PiA+IC0tLSBhL2xp YmF2dXRpbC92ZXJzaW9uLmgKPj4gPiArKysgYi9saWJhdnV0aWwvdmVyc2lvbi5oCj4+ID4gQEAg LTc5LDcgKzc5LDcgQEAKPj4gPiDCoCAqLwo+PiA+IMKgCj4+ID4gwqAjZGVmaW5lIExJQkFWVVRJ TF9WRVJTSU9OX01BSk9SwqAgNTgKPj4gPiAtI2RlZmluZSBMSUJBVlVUSUxfVkVSU0lPTl9NSU5P UsKgIDMyCj4+ID4gKyNkZWZpbmUgTElCQVZVVElMX1ZFUlNJT05fTUlOT1LCoCAzMwo+PiA+IMKg I2RlZmluZSBMSUJBVlVUSUxfVkVSU0lPTl9NSUNSTyAxMDAKPj4gPiDCoAo+PiA+IMKgI2RlZmlu ZSBMSUJBVlVUSUxfVkVSU0lPTl9JTlTCoMKgIEFWX1ZFUlNJT05fSU5UKExJQkFWVVRJTF9WRVJT SU9OX01BSk9SLCBcCj4+Cj4+Cj4+IHYxMiBMR1RNLCBhbmQgd29ya3Mgd2VsbCBpbiBteSB0ZXN0 aW5nLiBJJ2xsIG1lcmdlIHYxMiBpZiB0aGVyZSBhcmUgbm8KPj4gb2JqZWN0aW9ucyAvIGNvbW1l bnRzLgo+Pgo+Cj4gRml4ZWQgY29uZmxpY3RzIGluIENoYW5nZWxvZyAvIHZlcnNpb24uaCAvIEFQ SUNoYW5nZSBhbmQgcHVzaGVkLiAKPgo+IFRoYW5rcwo+IEhhaWhhbwo+Cj4KPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWls aW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxp bmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRo IHN1YmplY3QgInVuc3Vic2NyaWJlIi4KPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxA ZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2 ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2 ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=