From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH] drm/msm: Remove dpu_edid_parser Date: Mon, 26 Feb 2018 10:36:42 -0500 Message-ID: <20180226153642.GT223881@art_vandelay> References: <20180223191515.155783-1-seanpaul@chromium.org> <20180223215141.GQ223881@art_vandelay> <0569f6fdbf932942defa603f09867c50@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Rob Clark Cc: linux-arm-msm , abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-arm-msm-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Sean Paul , Abhinav Kumar , "Kristian H. Kristensen" , freedreno , Jeykumar Sankaran List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBGZWIgMjMsIDIwMTggYXQgMDU6NDg6NDhQTSAtMDUwMCwgUm9iIENsYXJrIHdyb3Rl Ogo+IE9uIEZyaSwgRmViIDIzLCAyMDE4IGF0IDU6MzEgUE0sICA8YWJoaW5hdmtAY29kZWF1cm9y YS5vcmc+IHdyb3RlOgo+ID4gVGhlIGJpdG1hcHMgaW4gZHJtX2hkbWlfaW5mbyBkb250IHNlZW0g dG8gYmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCj4gPgo+ID4gT3VyIG1vZGUgc2VsZWN0aW9uIGxv Z2ljIGlzIGluIHVzZXJzcGFjZSBhdCB0aGUgbW9tZW50IHdoaWNoIG1lYW5zIGl0cwo+ID4gYmV0 dGVyIHVzZXJzcGFjZSBrbm93cyB3aGljaCBtb2RlcyBzdXBwb3J0IHdoYXQuCj4gPgo+ID4gSWYg d2UgZGVjaWRlIHRvIG1vdmUgbW9kZSB2YWxpZGF0aW9uIGVudGlyZWx5IHRvIHRoZSBkcml2ZXIs IHdlIGNhbiB1c2UKPiA+IHRoZXNlIGJpdG1hcHMgdG8gdmFsaWRhdGUuCj4gPgo+ID4gQnV0IHRo aXMgaXMgYWdhaW4gYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB0aGVuLgo+ID4KPiA+IElzIHRoZXJl IG5vIHVzZS1jYXNlIHNvIGZhciB3aGVyZSB1c2Vyc3BhY2UgaGFzIGhhZCB0byBrbm93IHdoaWNo IG1vZGVzCj4gPiBzdXBwb3J0IHdoaWNoIGZvcm1hdHM/Cj4gPgo+IAo+IEkgdGhpbmsgaGlzdG9y aWNhbGx5IGEgbG90IG1vcmUgb2YgdGhlIGZvY3VzIHVwc3RyZWFtIHNvIGZhciBoYXMgYmVlbgo+ ICJkZXNrdG9wIHN0eWxlIiB1c2UgY2FzZXMsIHdoZXJlIFJHQiB0byB0aGUgc2luayBtYWtlcyBt b3JlIHNlbnNlLgo+IFRoYXQgZG9lc24ndCBtZWFuIHRoZXJlIGlzbid0IGEgdXNlLWNhc2UgZm9y IFlVVi4gIEknbSBub3Qgc3VyZSwgYW5kCj4gaGF2ZW4ndCByZWFsbHkgZ2l2ZW4gbXVjaCB0aG91 Z2h0IGludG8sIGhvdyB0byBleHBvc2UgdGhpcyB0bwo+IHVzZXJzcGFjZS4gIEJ1dCBJIGd1ZXNz IHRoZSBzYW1lIHRoaW5nIGNvbWVzIHVwIHcvIEhEUiBhbmQgaGlnaGVyCj4gYml0LWRlcHRoIFJH QiBtb2RlcyAobGlrZSAxMF8xMF8xMCBmb3JtYXRzLCBldGMpLCBhbmQgcGVvcGxlIGFyZQo+IGdp dmluZyB0aG91Z2h0IHRvIHRob3NlIHRoaW5ncyB0aGVzZSBkYXlzLiAgSSBoYXZlbid0IGJlZW4g Zm9sbG93aW5nCj4gdGhlIEhEUiB3b3JrICp0aGF0KiBjbG9zZWx5LCBidXQgSSBndWVzcyBpZiB5 b3Ugd2FudCB0byB1c2UgSERSLCB5b3UKPiB3YW50IHRvIGtub3cgd2hhdCBtb2RlcyBzdXBwb3J0 IGl0IGF0IHRoZSBzaW5rLgo+IAo+IEVpdGhlciB3YXksIEkgdGhpbmsgdGhpcyBpcyBzb21ldGhp bmcgd2hpY2ggc2hvdWxkIGJlIHN1cHBvcnRlZCBpbiBkcm0KPiBjb3JlIHdpdGggYSBzdGFuZGFy ZGl6ZWQgVUFQSSwgcmF0aGVyIHRoYW4gYnkgZHJpdmVyIHJvbGxpbmcgaXQncyBvd24KPiBlZGlk IHBhcnNpbmcgYW5kIGN1c3RvbSBVQVBJLgo+IAo+IChJIGd1ZXNzIGV4dGVuZGluZyB0aGUgbW9k ZWluZm8gc3RydWN0IG1pZ2h0IGJlIGRpZmZpY3VsdCwgYnV0IHBlcmhhcHMKPiBhIGJsb2IgcHJv cGVydHkgdy8gc3VwcGxlbWVudGFsIGluZm8gbWlnaHQgbWFrZSBzZW5zZT8/ICBPciBtYXliZQo+ IHNvbWVvbmUgYWxyZWFkeSBoYXMgc29tZSBvdGhlciBpZGVhcz8pCgoKWWVhaCwgaW4gY29uanVu Y3Rpb24gd2l0aCBoZHIgc3VwcG9ydCwgc29tZSB0eXBlIG9mIG1vZGVpbmZvIHN1cHBsZW1lbnRh cnkgZGF0YQpzZWVtcyBhcHByb3ByaWF0ZS4gCgpXZSBoYXZlIHNvbWUgc3BhY2UgbGVmdCBpbiBt b2RlaW5mby0+ZmxhZ3MsIGJ1dCB0aGF0IGRvZXNuJ3Qgc2NhbGUgc28gd2VsbC4gCkFkZGluZyBh IHByb3BlcnR5IHdvdWxkIGJlIGVhc2llc3Qgc2luY2Ugd2UgY291bGQganVzdCBleHBvc2UgdGhl IGJpdG1hcCB0byAKdXNlcnNwYWNlIChtb3JlIG9yIGxlc3MpLiBXZSBjb3VsZCBhbHNvIGNoYW5n ZSAicGFkIiBpbiBkcm1fbW9kZV9nZXRfY29ubmVjdG9yCnRvIGZsYWdzIGFuZCBhbGxvdyB1c2Vy c3BhY2UgdG8gcmVxdWVzdCBlbmhhbmNlZCBtb2RlIGluZm8uCgpTZWFuCgoKPiAKPiBCUiwKPiAt Ugo+IAo+ID4gVGhhbmtzCj4gPgo+ID4gQWJoaW5hdgo+ID4KPiA+Cj4gPiBPbiAyMDE4LTAyLTIz IDEzOjUxLCBTZWFuIFBhdWwgd3JvdGU6Cj4gPj4KPiA+PiBPbiBGcmksIEZlYiAyMywgMjAxOCBh dCAwMToyOTowM1BNIC0wODAwLCBhYmhpbmF2a0Bjb2RlYXVyb3JhLm9yZyB3cm90ZToKPiA+Pj4K PiA+Pj4gSSBhbSBPSyB3aXRoIHJlbW92aW5nIHNvbWUgcGFydHMgb2YgdGhlIHBhcnNlciBidXQg bm90IGVudGlyZWx5Lgo+ID4+Pgo+ID4+PiBGdW5kYW1lbnRhbGx5LCB3ZSB3ZW50IGFoZWFkIHdp dGggdGhlIHBhcnNlciBmb3IgYSBjb3VwbGUgb2YgcmVhc29uczoKPiA+Pj4KPiA+Pj4gLT4gV2Ug d291bGQgbGlrZSB0byBiZSBhYmxlIHRvIGFzc29jaWF0ZSB0aGUgY29sb3IgZm9ybWF0IHdpdGgg dGhlIG1vZGUuCj4gPj4+IFRoaXMgaGVscHMgdXMgZGVjaWRlIHRoYXQgaWYgdGhlIHNhbWUgbW9k ZSBzdXBwb3J0cyBib3RoIFJHQi9ZVVYgdGhlbgo+ID4+PiB3aGljaAo+ID4+PiBvbmUgd2UgY2Fu IHBpY2suCj4gPj4+Cj4gPj4+IC0+IFRoZSB1cHN0cmVhbSBwYXJzZXIgY3VycmVudGx5IGp1c3Qg YWRkcyBpdCB0byB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgb2YKPiA+Pj4gdGhlIHNpbmsgaW5mby0+ Y29sb3JfZm9ybWF0cyB8PSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIwOyBIb3dldmVyIHRoZQo+ ID4+PiBsaW5rCj4gPj4+IGJldHdlZW4gdGhlIG1vZGUgYW5kIHRoZSBmb3JtYXQgaXRzZWxmIGlz IHVuY2xlYXIKPiA+Pj4KPiA+Pj4gSSB3b3VsZCBsaWtlIHRvIGtub3cgaWYgYW55IG9mIHRoZSBh Ym92ZSBoYXZlIGJlZW4gYWRkcmVzc2VkIHNvIGZhcgo+ID4+PiBiZWZvcmUKPiA+Pj4gcmV2ZXJ0 aW5nIHRoaXMuCj4gPj4KPiA+Pgo+ID4+IFRoZSBpbmZvcm1hdGlvbiBvZiB3aGljaCBtb2RlcyBz dXBwb3J0IHdoaWNoIGZvcm1hdHMgaXMgc3RvcmVkIGluIGJpdG1hcHMKPiA+PiB3aXRoaW4KPiA+ PiBkcm1faGRtaV9pbmZvLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBoZXJlOgo+ID4+Cj4gPj4KPiA+ PiBodHRwczovLzAxLm9yZy9saW51eGdyYXBoaWNzL2dmeC1kb2NzL2RybS9ncHUvZHJtLWttcy5o dG1sP2hpZ2hsaWdodD1kcm1faGRtaV9pbmZvI2MuZHJtX2hkbWlfaW5mbwo+ID4+Cj4gPj4gSXMg dGhpcyBzdWZmaWNpZW50Pwo+ID4+Cj4gPj4gU2Vhbgo+ID4+Cj4gPj4+Cj4gPj4+IFRoYW5rcwo+ ID4+Pgo+ID4+PiBBYmhpbmF2Cj4gPj4+Cj4gPj4+Cj4gPj4+IE9uIDIwMTgtMDItMjMgMTE6MTUs IFNlYW4gUGF1bCB3cm90ZToKPiA+Pj4gPiBVc2UgZHJtX2VkaWQgdG8gcGFyc2UgdGhlIGVkaWQg aW5zdGVhZCBvZiB0aGUgaGFuZCByb2xsZWQgZHB1IHZlcnNpb24uCj4gPj4+ID4KPiA+Pj4gPiBT aWduZWQtb2ZmLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KPiA+Pj4gPiAt LS0KPiA+Pj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSAt Cj4gPj4+ID4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXVkaW8uYyAgICAgfCAgMjIgKy0K PiA+Pj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMgICB8ICAgNyAtCj4g Pj4+ID4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYyAgICAgfCAgNzcgKystCj4g Pj4+ID4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaCAgICAgfCAgIDcgKy0KPiA+ Pj4gPiAgZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZWRpZF9wYXJzZXIuYyB8IDY1NyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4+PiA+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlk X3BhcnNlci5oIHwgMTY2IC0tLS0tLS0KPiA+Pj4gPiAgNyBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNl cnRpb25zKCspLCA4ODIgZGVsZXRpb25zKC0pCj4gPj4+ID4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5jCj4gPj4+ID4gIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5oCj4gPj4+ID4KPiA+ Pj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+ID4+PiA+IGIv ZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQo+ID4+PiA+IGluZGV4IGZjZDg1YWUyOGQ2Ni4u MmZiOWJhMTFkZjE5IDEwMDY0NAo+ID4+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFr ZWZpbGUKPiA+Pj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gPj4+ID4g QEAgLTg2LDcgKzg2LDYgQEAgbXNtLXkgOj0gXAo+ID4+PiA+ICAgICAgIGRpc3AvZHB1MS9kcHVf cm0ubyBcCj4gPj4+ID4gICAgICAgZGlzcC9kcHUxL2RwdV92YmlmLm8gXAo+ID4+PiA+ICAgICAg IGRwdV9kYmcubyBcCj4gPj4+ID4gLSAgICAgZHB1X2VkaWRfcGFyc2VyLm8gXAo+ID4+PiA+ICAg ICAgIGRwdV9pb191dGlsLm8gXAo+ID4+PiA+ICAgICAgIGRwdV9kYmdfZXZ0bG9nLm8gXAo+ID4+ PiA+ICAgICAgIGRwdV9wb3dlcl9oYW5kbGUubyBcCj4gPj4+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHAvZHBfYXVkaW8uYwo+ID4+PiA+IGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9hdWRpby5jCj4gPj4+ID4gaW5kZXggNGUwY2RjZDE1YzhjLi5jZTAwYjhiNTI2MzEg MTAwNjQ0Cj4gPj4+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jCj4g Pj4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jCj4gPj4+ID4gQEAg LTE4LDYgKzE4LDcgQEAKPiA+Pj4gPiAgI2luY2x1ZGUgPGxpbnV4L21zbV9leHRfZGlzcGxheS5o Pgo+ID4+PiA+Cj4gPj4+ID4gICNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgo+ID4+PiA+ ICsjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+Cj4gPj4+ID4KPiA+Pj4gPiAgI2luY2x1ZGUgImRw X2NhdGFsb2cuaCIKPiA+Pj4gPiAgI2luY2x1ZGUgImRwX2F1ZGlvLmgiCj4gPj4+ID4gQEAgLTQ4 MCw3ICs0ODEsNiBAQCBzdGF0aWMgaW50IGRwX2F1ZGlvX2dldF9lZGlkX2JsayhzdHJ1Y3QKPiA+ Pj4gPiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gPj4+ID4gIHsKPiA+Pj4gPiAgICAgICBpbnQg cmMgPSAwOwo+ID4+PiA+ICAgICAgIHN0cnVjdCBkcF9hdWRpb19wcml2YXRlICphdWRpbzsKPiA+ Pj4gPiAtICAgICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZDsKPiA+Pj4gPgo+ID4+PiA+ICAg ICAgIGF1ZGlvID0gZ2V0X2F1ZGlvX2dldF9kYXRhKHBkZXYpOwo+ID4+PiA+ICAgICAgIGlmIChJ U19FUlIoYXVkaW8pKSB7Cj4gPj4+ID4gQEAgLTQ4OCwxOSArNDg4LDI5IEBAIHN0YXRpYyBpbnQg ZHBfYXVkaW9fZ2V0X2VkaWRfYmxrKHN0cnVjdAo+ID4+PiA+IHBsYXRmb3JtX2RldmljZSAqcGRl diwKPiA+Pj4gPiAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+ID4+PiA+ICAgICAgIH0KPiA+Pj4g Pgo+ID4+PiA+IC0gICAgIGlmICghYXVkaW8tPnBhbmVsIHx8ICFhdWRpby0+cGFuZWwtPmVkaWRf Y3RybCkgewo+ID4+PiA+ICsgICAgIGlmICghYXVkaW8tPnBhbmVsIHx8ICFhdWRpby0+cGFuZWwt PmVkaWQpIHsKPiA+Pj4gPiAgICAgICAgICAgICAgIHByX2VycigiaW52YWxpZCBwYW5lbCBkYXRh XG4iKTsKPiA+Pj4gPiAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKPiA+Pj4gPiAgICAgICAg ICAgICAgIGdvdG8gZW5kOwo+ID4+PiA+ICAgICAgIH0KPiA+Pj4gPgo+ID4+PiA+IC0gICAgIGVk aWQgPSBhdWRpby0+cGFuZWwtPmVkaWRfY3RybDsKPiA+Pj4gPiAtCj4gPj4+ID4gKy8qCj4gPj4+ ID4gKyAqIFRPRE86Cj4gPj4+ID4gKyAqICAgYXVkaW9fZGF0YV9ibGsgc2hvdWxkIGJlIGNoYW5n ZWQgdG8gYmUgYSBjZWFfc2FkIGFycmF5Cj4gPj4+ID4gKyAqICAgYXVkaW9fZGF0YV9ibGtfc2l6 ZSBzaG91bGQgYmUgY2hhbmdlZCB0byBjb250YWluIGEgY291bnQgb2Ygc2Fkcwo+ID4+PiA+ICsg Kgo+ID4+PiA+ICsgKiAgIE9uY2UgdGhpcyBpcyBkb25lLCB1c2UgZHJtX2VkaWRfdG9fc2FkKCkg dG8gZXh0cmFjdCB0aGlzIGZyb20KPiA+Pj4gPiArICogICBhdWRpby0+cGFuZWwtPmVkaWQuIEkn ZCBjaGFuZ2UgdGhpcywgYnV0IEkgZG9uJ3QgaGF2ZSB0aGF0IGNvZGUKPiA+Pj4gPiA6Lwo+ID4+ PiA+ICsgKi8KPiA+Pj4gPiArI2lmIDAKPiA+Pj4gPiAgICAgICBibGstPmF1ZGlvX2RhdGFfYmxr ID0gZWRpZC0+YXVkaW9fZGF0YV9ibG9jazsKPiA+Pj4gPiAgICAgICBibGstPmF1ZGlvX2RhdGFf YmxrX3NpemUgPSBlZGlkLT5hZGJfc2l6ZTsKPiA+Pj4gPiArI2VuZGlmCj4gPj4+ID4gKwo+ID4+ PiA+ICsgICAgIGJsay0+c3BrX2FsbG9jX2RhdGFfYmxrX3NpemUgPSBkcm1fZWRpZF90b19zcGVh a2VyX2FsbG9jYXRpb24oCj4gPj4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGF1ZGlvLT5wYW5lbC0+ZWRpZCwKPiA+Pj4gPiArCj4gPj4+ID4gYmxrLT5z cGtyX2FsbG9jX2RhdGFfYmxvY2spOwo+ID4+PiA+Cj4gPj4+ID4gLSAgICAgYmxrLT5zcGtfYWxs b2NfZGF0YV9ibGsgPSBlZGlkLT5zcGtyX2FsbG9jX2RhdGFfYmxvY2s7Cj4gPj4+ID4gLSAgICAg YmxrLT5zcGtfYWxsb2NfZGF0YV9ibGtfc2l6ZSA9IGVkaWQtPnNhZGJfc2l6ZTsKPiA+Pj4gPiAg ZW5kOgo+ID4+PiA+ICAgICAgIHJldHVybiByYzsKPiA+Pj4gPiAgfQo+ID4+PiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYwo+ID4+PiA+IGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmMKPiA+Pj4gPiBpbmRleCA2ZjJjMDY4MDliZjUu Ljg0NmVmMzNhZWNiZCAxMDA2NDQKPiA+Pj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw L2RwX2Rpc3BsYXkuYwo+ID4+PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlz cGxheS5jCj4gPj4+ID4gQEAgLTM3MywxMiArMzczLDYgQEAgc3RhdGljIGludCBkcF9kaXNwbGF5 X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LAo+ID4+PiA+IHN0cnVjdCBkZXZpY2UgKm1hc3RlciwK PiA+Pj4gPiAgICAgICAgICAgICAgIGdvdG8gZW5kOwo+ID4+PiA+ICAgICAgIH0KPiA+Pj4gPgo+ ID4+PiA+IC0gICAgIHJjID0gZHAtPnBhbmVsLT5kcHVfZWRpZF9yZWdpc3RlcihkcC0+cGFuZWwp Owo+ID4+PiA+IC0gICAgIGlmIChyYykgewo+ID4+PiA+IC0gICAgICAgICAgICAgcHJfZXJyKCJE Uk0gRFAgRURJRCByZWdpc3RlciBmYWlsZWRcbiIpOwo+ID4+PiA+IC0gICAgICAgICAgICAgZ290 byBlbmQ7Cj4gPj4+ID4gLSAgICAgfQo+ID4+PiA+IC0KPiA+Pj4gPiAgICAgICByYyA9IGRwLT5w b3dlci0+cG93ZXJfY2xpZW50X2luaXQoZHAtPnBvd2VyLCAmcHJpdi0+cGhhbmRsZSk7Cj4gPj4+ ID4gICAgICAgaWYgKHJjKSB7Cj4gPj4+ID4gICAgICAgICAgICAgICBwcl9lcnIoIlBvd2VyIGNs aWVudCBjcmVhdGUgZmFpbGVkXG4iKTsKPiA+Pj4gPiBAQCAtNDEyLDcgKzQwNiw2IEBAIHN0YXRp YyB2b2lkIGRwX2Rpc3BsYXlfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+Pj4gPiBzdHJ1 Y3QgZGV2aWNlICptYXN0ZXIsCj4gPj4+ID4gICAgICAgfQo+ID4+PiA+Cj4gPj4+ID4gICAgICAg KHZvaWQpZHAtPnBvd2VyLT5wb3dlcl9jbGllbnRfZGVpbml0KGRwLT5wb3dlcik7Cj4gPj4+ID4g LSAgICAgKHZvaWQpZHAtPnBhbmVsLT5kcHVfZWRpZF9kZXJlZ2lzdGVyKGRwLT5wYW5lbCk7Cj4g Pj4+ID4gICAgICAgKHZvaWQpZHAtPmF1eC0+ZHJtX2F1eF9kZXJlZ2lzdGVyKGRwLT5hdXgpOwo+ ID4+PiA+ICAgICAgIGRwX2Rpc3BsYXlfZGVpbml0aWFsaXplX2hkY3AoZHApOwo+ID4+PiA+ICB9 Cj4gPj4+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYwo+ ID4+PiA+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jCj4gPj4+ID4gaW5kZXgg MTFjMzMzOGUyM2IxLi42M2Y5YmY0MDc1MDggMTAwNjQ0Cj4gPj4+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9wYW5lbC5jCj4gPj4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wYW5lbC5jCj4gPj4+ID4gQEAgLTE2LDYgKzE2LDkgQEAKPiA+Pj4gPgo+ID4+PiA+ ICAjaW5jbHVkZSAiZHBfcGFuZWwuaCIKPiA+Pj4gPgo+ID4+PiA+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9jb25uZWN0b3IuaD4KPiA+Pj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ID4+PiA+ ICsKPiA+Pj4gPiAgI2RlZmluZSBEUF9QQU5FTF9ERUZBVUxUX0JQUCAyNAo+ID4+PiA+ICAjZGVm aW5lIERQX01BWF9EU19QT1JUX0NPVU5UIDEKPiA+Pj4gPgo+ID4+PiA+IEBAIC0xNTEsOSArMTU0 LDEwIEBAIHN0YXRpYyBpbnQgZHBfcGFuZWxfcmVhZF9lZGlkKHN0cnVjdCBkcF9wYW5lbAo+ID4+ PiA+ICpkcF9wYW5lbCwKPiA+Pj4gPiAgICAgICBwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5l bCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsCj4gPj4+ID4gZHBfcGFuZWwpOwo+ID4+PiA+Cj4g Pj4+ID4gICAgICAgZG8gewo+ID4+PiA+IC0gICAgICAgICAgICAgZHB1X2dldF9lZGlkKGNvbm5l Y3RvciwgJnBhbmVsLT5hdXgtPmRybV9hdXgtPmRkYywKPiA+Pj4gPiAtICAgICAgICAgICAgICAg ICAgICAgKHZvaWQgKiopJmRwX3BhbmVsLT5lZGlkX2N0cmwpOwo+ID4+PiA+IC0gICAgICAgICAg ICAgaWYgKCFkcF9wYW5lbC0+ZWRpZF9jdHJsLT5lZGlkKSB7Cj4gPj4+ID4gKyAgICAgICAgICAg ICBrZnJlZShkcF9wYW5lbC0+ZWRpZCk7Cj4gPj4+ID4gKyAgICAgICAgICAgICBkcF9wYW5lbC0+ ZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsCj4gPj4+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFuZWwtPmF1eC0+ZHJtX2F1eC0+ZGRjKTsKPiA+ Pj4gPiArICAgICAgICAgICAgIGlmICghZHBfcGFuZWwtPmVkaWQpIHsKPiA+Pj4gPiAgICAgICAg ICAgICAgICAgICAgICAgcHJfZXJyKCJFRElEIHJlYWQgZmFpbGVkXG4iKTsKPiA+Pj4gPiAgICAg ICAgICAgICAgICAgICAgICAgcmV0cnlfY250Kys7Cj4gPj4+ID4gICAgICAgICAgICAgICAgICAg ICAgIHBhbmVsLT5hdXgtPnJlY29uZmlnKHBhbmVsLT5hdXgpOwo+ID4+PiA+IEBAIC0xNjMsNyAr MTY3LDcgQEAgc3RhdGljIGludCBkcF9wYW5lbF9yZWFkX2VkaWQoc3RydWN0IGRwX3BhbmVsCj4g Pj4+ID4gKmRwX3BhbmVsLAo+ID4+PiA+ICAgICAgICAgICAgICAgfQo+ID4+PiA+ICAgICAgIH0g d2hpbGUgKHJldHJ5X2NudCA8IG1heF9yZXRyeSk7Cj4gPj4+ID4KPiA+Pj4gPiAtICAgICByZXR1 cm4gLUVJTlZBTDsKPiA+Pj4gPiArICAgICByZXR1cm4gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5l Y3RvciwgZHBfcGFuZWwtPmVkaWQpOwo+ID4+PiA+ICB9Cj4gPj4+ID4KPiA+Pj4gPiAgc3RhdGlj IGludCBkcF9wYW5lbF9yZWFkX3NpbmtfY2FwcyhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAo+ ID4+PiA+IEBAIC0xODgsNyArMTkyLDcgQEAgc3RhdGljIGludCBkcF9wYW5lbF9yZWFkX3Npbmtf Y2FwcyhzdHJ1Y3QgZHBfcGFuZWwKPiA+Pj4gPiAqZHBfcGFuZWwsCj4gPj4+ID4gICAgICAgfQo+ ID4+PiA+Cj4gPj4+ID4gICAgICAgcmMgPSBkcF9wYW5lbF9yZWFkX2VkaWQoZHBfcGFuZWwsIGNv bm5lY3Rvcik7Cj4gPj4+ID4gLSAgICAgaWYgKHJjKSB7Cj4gPj4+ID4gKyAgICAgaWYgKHJjIDwg MCkgewo+ID4+PiA+ICAgICAgICAgICAgICAgcHJfZXJyKCJwYW5lbCBlZGlkIHJlYWQgZmFpbGVk LCBzZXQgZmFpbHNhZmUgbW9kZVxuIik7Cj4gPj4+ID4gICAgICAgICAgICAgICByZXR1cm4gcmM7 Cj4gPj4+ID4gICAgICAgfQo+ID4+PiA+IEBAIC0yMTUsNyArMjE5LDcgQEAgc3RhdGljIHUzMiBk cF9wYW5lbF9nZXRfbWF4X3BjbGsoc3RydWN0IGRwX3BhbmVsCj4gPj4+ID4gKmRwX3BhbmVsKQo+ ID4+PiA+Cj4gPj4+ID4gICAgICAgbGlua19pbmZvID0gJmRwX3BhbmVsLT5saW5rX2luZm87Cj4g Pj4+ID4KPiA+Pj4gPiAtICAgICBicGMgPSBkcHVfZ2V0X3NpbmtfYnBjKGRwX3BhbmVsLT5lZGlk X2N0cmwpOwo+ID4+PiA+ICsgICAgIGJwYyA9IGRwX3BhbmVsLT5jb25uZWN0b3ItPmRpc3BsYXlf aW5mby5icGM7Cj4gPj4+ID4gICAgICAgYnBwID0gYnBjICogbnVtX2NvbXBvbmVudHM7Cj4gPj4+ ID4gICAgICAgaWYgKCFicHApCj4gPj4+ID4gICAgICAgICAgICAgICBicHAgPSBEUF9QQU5FTF9E RUZBVUxUX0JQUDsKPiA+Pj4gPiBAQCAtMjkwLDggKzI5NCw4IEBAIHN0YXRpYyBpbnQgZHBfcGFu ZWxfZ2V0X21vZGVzKHN0cnVjdCBkcF9wYW5lbAo+ID4+PiA+ICpkcF9wYW5lbCwKPiA+Pj4gPiAg ICAgICBpZiAoZHBfcGFuZWwtPnZpZGVvX3Rlc3QpIHsKPiA+Pj4gPiAgICAgICAgICAgICAgIGRw X3BhbmVsX3NldF90ZXN0X21vZGUocGFuZWwsIG1vZGUpOwo+ID4+PiA+ICAgICAgICAgICAgICAg cmV0dXJuIDE7Cj4gPj4+ID4gLSAgICAgfSBlbHNlIGlmIChkcF9wYW5lbC0+ZWRpZF9jdHJsLT5l ZGlkKSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm4gX2RwdV9lZGlkX3VwZGF0ZV9tb2Rl cyhjb25uZWN0b3IsCj4gPj4+ID4gZHBfcGFuZWwtPmVkaWRfY3RybCk7Cj4gPj4+ID4gKyAgICAg fSBlbHNlIGlmIChkcF9wYW5lbC0+ZWRpZCkgewo+ID4+PiA+ICsgICAgICAgICAgICAgcmV0dXJu IGRwX3BhbmVsX3JlYWRfZWRpZChkcF9wYW5lbCwgY29ubmVjdG9yKTsKPiA+Pj4gPiAgICAgICB9 Cj4gPj4+ID4KPiA+Pj4gPiAgICAgICAvKiBmYWlsLXNhZmUgbW9kZSAqLwo+ID4+PiA+IEBAIC0z MDAsNiArMzA0LDI3IEBAIHN0YXRpYyBpbnQgZHBfcGFuZWxfZ2V0X21vZGVzKHN0cnVjdCBkcF9w YW5lbAo+ID4+PiA+ICpkcF9wYW5lbCwKPiA+Pj4gPiAgICAgICByZXR1cm4gMTsKPiA+Pj4gPiAg fQo+ID4+PiA+Cj4gPj4+ID4gK3N0YXRpYyB1OCBkcF9wYW5lbF9nZXRfZWRpZF9jaGVja3N1bShz dHJ1Y3QgZWRpZCAqZWRpZCkKPiA+Pj4gPiArewo+ID4+PiA+ICsgICAgIHN0cnVjdCBlZGlkICps YXN0X2Jsb2NrID0gTlVMTDsKPiA+Pj4gPiArICAgICB1OCAqcmF3X2VkaWQgPSBOVUxMOwo+ID4+ PiA+ICsKPiA+Pj4gPiArICAgICBpZiAoIWVkaWQpIHsKPiA+Pj4gPiArICAgICAgICAgICAgIHBy X2VycigiaW52YWxpZCBlZGlkIGlucHV0XG4iKTsKPiA+Pj4gPiArICAgICAgICAgICAgIHJldHVy biAwOwo+ID4+PiA+ICsgICAgIH0KPiA+Pj4gPiArCj4gPj4+ID4gKyAgICAgcmF3X2VkaWQgPSAo dTggKillZGlkOwo+ID4+PiA+ICsgICAgIHJhd19lZGlkICs9IChlZGlkLT5leHRlbnNpb25zICog RURJRF9MRU5HVEgpOwo+ID4+PiA+ICsgICAgIGxhc3RfYmxvY2sgPSAoc3RydWN0IGVkaWQgKily YXdfZWRpZDsKPiA+Pj4gPiArCj4gPj4+ID4gKyAgICAgaWYgKGxhc3RfYmxvY2spCj4gPj4+ID4g KyAgICAgICAgICAgICByZXR1cm4gbGFzdF9ibG9jay0+Y2hlY2tzdW07Cj4gPj4+ID4gKwo+ID4+ PiA+ICsgICAgIHByX2VycigiSW52YWxpZCBibG9jaywgbm8gY2hlY2tzdW1cbiIpOwo+ID4+PiA+ ICsgICAgIHJldHVybiAwOwo+ID4+PiA+ICt9Cj4gPj4+ID4gKwo+ID4+PiA+ICBzdGF0aWMgdm9p ZCBkcF9wYW5lbF9oYW5kbGVfc2lua19yZXF1ZXN0KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwp Cj4gPj4+ID4gIHsKPiA+Pj4gPiAgICAgICBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0ZSAqcGFuZWw7 Cj4gPj4+ID4gQEAgLTMxMiw3ICszMzcsNyBAQCBzdGF0aWMgdm9pZCBkcF9wYW5lbF9oYW5kbGVf c2lua19yZXF1ZXN0KHN0cnVjdAo+ID4+PiA+IGRwX3BhbmVsICpkcF9wYW5lbCkKPiA+Pj4gPiAg ICAgICBwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9wYW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZh dGUsCj4gPj4+ID4gZHBfcGFuZWwpOwo+ID4+PiA+Cj4gPj4+ID4gICAgICAgaWYgKHBhbmVsLT5s aW5rLT5zaW5rX3JlcXVlc3QgJiBEUF9URVNUX0xJTktfRURJRF9SRUFEKSB7Cj4gPj4+ID4gLSAg ICAgICAgICAgICB1OCBjaGVja3N1bSA9IGRwdV9nZXRfZWRpZF9jaGVja3N1bShkcF9wYW5lbC0+ ZWRpZF9jdHJsKTsKPiA+Pj4gPiArICAgICAgICAgICAgIHU4IGNoZWNrc3VtID0gZHBfcGFuZWxf Z2V0X2VkaWRfY2hlY2tzdW0oZHBfcGFuZWwtPmVkaWQpOwo+ID4+PiA+Cj4gPj4+ID4gICAgICAg ICAgICAgICBwYW5lbC0+bGluay0+c2VuZF9lZGlkX2NoZWNrc3VtKHBhbmVsLT5saW5rLCBjaGVj a3N1bSk7Cj4gPj4+ID4gICAgICAgICAgICAgICBwYW5lbC0+bGluay0+c2VuZF90ZXN0X3Jlc3Bv bnNlKHBhbmVsLT5saW5rKTsKPiA+Pj4gPiBAQCAtMzgyLDM2ICs0MDcsNiBAQCBzdGF0aWMgaW50 IGRwX3BhbmVsX3RpbWluZ19jZmcoc3RydWN0IGRwX3BhbmVsCj4gPj4+ID4gKmRwX3BhbmVsKQo+ ID4+PiA+ICAgICAgIHJldHVybiByYzsKPiA+Pj4gPiAgfQo+ID4+PiA+Cj4gPj4+ID4gLXN0YXRp YyBpbnQgZHBfcGFuZWxfZWRpZF9yZWdpc3RlcihzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQo+ ID4+PiA+IC17Cj4gPj4+ID4gLSAgICAgaW50IHJjID0gMDsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAg ICAgaWYgKCFkcF9wYW5lbCkgewo+ID4+PiA+IC0gICAgICAgICAgICAgcHJfZXJyKCJpbnZhbGlk IGlucHV0XG4iKTsKPiA+Pj4gPiAtICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKPiA+Pj4gPiAt ICAgICAgICAgICAgIGdvdG8gZW5kOwo+ID4+PiA+IC0gICAgIH0KPiA+Pj4gPiAtCj4gPj4+ID4g LSAgICAgZHBfcGFuZWwtPmVkaWRfY3RybCA9IGRwdV9lZGlkX2luaXQoKTsKPiA+Pj4gPiAtICAg ICBpZiAoIWRwX3BhbmVsLT5lZGlkX2N0cmwpIHsKPiA+Pj4gPiAtICAgICAgICAgICAgIHByX2Vy cigiZHB1IGVkaWQgaW5pdCBmb3IgRFAgZmFpbGVkXG4iKTsKPiA+Pj4gPiAtICAgICAgICAgICAg IHJjID0gLUVOT01FTTsKPiA+Pj4gPiAtICAgICAgICAgICAgIGdvdG8gZW5kOwo+ID4+PiA+IC0g ICAgIH0KPiA+Pj4gPiAtZW5kOgo+ID4+PiA+IC0gICAgIHJldHVybiByYzsKPiA+Pj4gPiAtfQo+ ID4+PiA+IC0KPiA+Pj4gPiAtc3RhdGljIHZvaWQgZHBfcGFuZWxfZWRpZF9kZXJlZ2lzdGVyKHN0 cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCj4gPj4+ID4gLXsKPiA+Pj4gPiAtICAgICBpZiAoIWRw X3BhbmVsKSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICBwcl9lcnIoImludmFsaWQgaW5wdXRcbiIp Owo+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuOwo+ID4+PiA+IC0gICAgIH0KPiA+Pj4gPiAt Cj4gPj4+ID4gLSAgICAgZHB1X2VkaWRfZGVpbml0KCh2b2lkICoqKSZkcF9wYW5lbC0+ZWRpZF9j dHJsKTsKPiA+Pj4gPiAtfQo+ID4+PiA+IC0KPiA+Pj4gPiAgc3RhdGljIGludCBkcF9wYW5lbF9p bml0X3BhbmVsX2luZm8oc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKPiA+Pj4gPiAgewo+ID4+ PiA+ICAgICAgIGludCByYyA9IDA7Cj4gPj4+ID4gQEAgLTUwMyw4ICs0OTgsNiBAQCBzdHJ1Y3Qg ZHBfcGFuZWwgKmRwX3BhbmVsX2dldChzdHJ1Y3QgZHBfcGFuZWxfaW4KPiA+Pj4gPiAqaW4pCj4g Pj4+ID4gICAgICAgZHBfcGFuZWwgPSAmcGFuZWwtPmRwX3BhbmVsOwo+ID4+PiA+ICAgICAgIHBh bmVsLT5hdXhfY2ZnX3VwZGF0ZV9kb25lID0gZmFsc2U7Cj4gPj4+ID4KPiA+Pj4gPiAtICAgICBk cF9wYW5lbC0+ZHB1X2VkaWRfcmVnaXN0ZXIgPSBkcF9wYW5lbF9lZGlkX3JlZ2lzdGVyOwo+ID4+ PiA+IC0gICAgIGRwX3BhbmVsLT5kcHVfZWRpZF9kZXJlZ2lzdGVyID0gZHBfcGFuZWxfZWRpZF9k ZXJlZ2lzdGVyOwo+ID4+PiA+ICAgICAgIGRwX3BhbmVsLT5pbml0X2luZm8gPSBkcF9wYW5lbF9p bml0X3BhbmVsX2luZm87Cj4gPj4+ID4gICAgICAgZHBfcGFuZWwtPnRpbWluZ19jZmcgPSBkcF9w YW5lbF90aW1pbmdfY2ZnOwo+ID4+PiA+ICAgICAgIGRwX3BhbmVsLT5yZWFkX3NpbmtfY2FwcyA9 IGRwX3BhbmVsX3JlYWRfc2lua19jYXBzOwo+ID4+PiA+IEBAIC01MjcsNSArNTIwLDcgQEAgdm9p ZCBkcF9wYW5lbF9wdXQoc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKPiA+Pj4gPgo+ID4+PiA+ ICAgICAgIHBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJp dmF0ZSwKPiA+Pj4gPiBkcF9wYW5lbCk7Cj4gPj4+ID4KPiA+Pj4gPiArICAgICBrZnJlZShkcF9w YW5lbC0+ZWRpZCk7Cj4gPj4+ID4gKyAgICAgZHBfcGFuZWwtPmVkaWQgPSBOVUxMOwo+ID4+PiA+ ICAgICAgIGRldm1fa2ZyZWUocGFuZWwtPmRldiwgcGFuZWwpOwo+ID4+PiA+ICB9Cj4gPj4+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuaAo+ID4+PiA+IGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wYW5lbC5oCj4gPj4+ID4gaW5kZXggYTk1ZmQwMTU3 YTRlLi5kNmViZGI5OGY3NjcgMTAwNjQ0Cj4gPj4+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kcC9kcF9wYW5lbC5oCj4gPj4+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w YW5lbC5oCj4gPj4+ID4gQEAgLTE4LDcgKzE4LDggQEAKPiA+Pj4gPiAgI2luY2x1ZGUgImRwX2F1 eC5oIgo+ID4+PiA+ICAjaW5jbHVkZSAiZHBfbGluay5oIgo+ID4+PiA+ICAjaW5jbHVkZSAiZHBf dXNicGQuaCIKPiA+Pj4gPiAtI2luY2x1ZGUgImRwdV9lZGlkX3BhcnNlci5oIgo+ID4+PiA+ICsK PiA+Pj4gPiArc3RydWN0IGVkaWQ7Cj4gPj4+ID4KPiA+Pj4gPiAgZW51bSBkcF9sYW5lX2NvdW50 IHsKPiA+Pj4gPiAgICAgICBEUF9MQU5FX0NPVU5UXzEgPSAxLAo+ID4+PiA+IEBAIC02Myw3ICs2 NCw3IEBAIHN0cnVjdCBkcF9wYW5lbCB7Cj4gPj4+ID4gICAgICAgdTggZHNfcG9ydHNbRFBfTUFY X0RPV05TVFJFQU1fUE9SVFNdOwo+ID4+PiA+Cj4gPj4+ID4gICAgICAgc3RydWN0IGRybV9kcF9s aW5rIGxpbmtfaW5mbzsKPiA+Pj4gPiAtICAgICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9j dHJsOwo+ID4+PiA+ICsgICAgIHN0cnVjdCBlZGlkICplZGlkOwo+ID4+PiA+ICAgICAgIHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPj4+ID4gICAgICAgc3RydWN0IGRwX3BhbmVs X2luZm8gcGluZm87Cj4gPj4+ID4gICAgICAgYm9vbCB2aWRlb190ZXN0Owo+ID4+PiA+IEBAIC03 MSw4ICs3Miw2IEBAIHN0cnVjdCBkcF9wYW5lbCB7Cj4gPj4+ID4gICAgICAgdTMyIHZpYzsKPiA+ Pj4gPiAgICAgICB1MzIgbWF4X3BjbGtfa2h6Owo+ID4+PiA+Cj4gPj4+ID4gLSAgICAgaW50ICgq ZHB1X2VkaWRfcmVnaXN0ZXIpKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpOwo+ID4+PiA+IC0g ICAgIHZvaWQgKCpkcHVfZWRpZF9kZXJlZ2lzdGVyKShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVs KTsKPiA+Pj4gPiAgICAgICBpbnQgKCppbml0X2luZm8pKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFu ZWwpOwo+ID4+PiA+ICAgICAgIGludCAoKnRpbWluZ19jZmcpKHN0cnVjdCBkcF9wYW5lbCAqZHBf cGFuZWwpOwo+ID4+PiA+ICAgICAgIGludCAoKnJlYWRfc2lua19jYXBzKShzdHJ1Y3QgZHBfcGFu ZWwgKmRwX3BhbmVsLAo+ID4+PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw dV9lZGlkX3BhcnNlci5jCj4gPj4+ID4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3Bh cnNlci5jCj4gPj4+ID4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4+ID4gaW5kZXggMjRm NWY0NGMxNDkyLi4wMDAwMDAwMDAwMDAKPiA+Pj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwdV9lZGlkX3BhcnNlci5jCj4gPj4+ID4gKysrIC9kZXYvbnVsbAo+ID4+PiA+IEBAIC0xLDY1 NyArMCwwIEBACj4gPj4+ID4gLS8qIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXgg Rm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+Pj4gPiAtICoKPiA+Pj4gPiAtICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgo+ID4+PiA+IG1vZGlmeQo+ID4+PiA+IC0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiA+Pj4gPiAtICogb25s eSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u Cj4gPj4+ID4gLSAqCj4gPj4+ID4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4+PiA+IC0gKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4+PiA+ IC0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCj4gPj4+ID4gLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCj4gPj4+ID4gLSAqLwo+ID4+PiA+IC0KPiA+Pj4gPiAtI2luY2x1ZGUgPGRybS9k cm1fZWRpZC5oPgo+ID4+PiA+IC0jaW5jbHVkZSA8bGludXgvaGRtaS5oPgo+ID4+PiA+IC0KPiA+ Pj4gPiAtI2luY2x1ZGUgImRwdV9rbXMuaCIKPiA+Pj4gPiAtI2luY2x1ZGUgImRwdV9lZGlkX3Bh cnNlci5oIgo+ID4+PiA+IC0KPiA+Pj4gPiAtI2RlZmluZSBEQkNfU1RBUlRfT0ZGU0VUIDQKPiA+ Pj4gPiAtI2RlZmluZSBFRElEX0RURF9MRU4gMTgKPiA+Pj4gPiAtCj4gPj4+ID4gLWVudW0gZGF0 YV9ibG9ja190eXBlcyB7Cj4gPj4+ID4gLSAgICAgUkVTRVJWRUQsCj4gPj4+ID4gLSAgICAgQVVE SU9fREFUQV9CTE9DSywKPiA+Pj4gPiAtICAgICBWSURFT19EQVRBX0JMT0NLLAo+ID4+PiA+IC0g ICAgIFZFTkRPUl9TUEVDSUZJQ19EQVRBX0JMT0NLLAo+ID4+PiA+IC0gICAgIFNQRUFLRVJfQUxM T0NBVElPTl9EQVRBX0JMT0NLLAo+ID4+PiA+IC0gICAgIFZFU0FfRFRDX0RBVEFfQkxPQ0ssCj4g Pj4+ID4gLSAgICAgUkVTRVJWRUQyLAo+ID4+PiA+IC0gICAgIFVTRV9FWFRFTkRFRF9UQUcKPiA+ Pj4gPiAtfTsKPiA+Pj4gPiAtCj4gPj4+ID4gLXN0YXRpYyB1OCAqZHB1X2ZpbmRfZWRpZF9leHRl bnNpb24oc3RydWN0IGVkaWQgKmVkaWQsIGludCBleHRfaWQpCj4gPj4+ID4gLXsKPiA+Pj4gPiAt ICAgICB1OCAqZWRpZF9leHQgPSBOVUxMOwo+ID4+PiA+IC0gICAgIGludCBpOwo+ID4+PiA+IC0K PiA+Pj4gPiAtICAgICAvKiBObyBFRElEIG9yIEVESUQgZXh0ZW5zaW9ucyAqLwo+ID4+PiA+IC0g ICAgIGlmIChlZGlkID09IE5VTEwgfHwgZWRpZC0+ZXh0ZW5zaW9ucyA9PSAwKQo+ID4+PiA+IC0g ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIC8qIEZpbmQg Q0VBIGV4dGVuc2lvbiAqLwo+ID4+PiA+IC0gICAgIGZvciAoaSA9IDA7IGkgPCBlZGlkLT5leHRl bnNpb25zOyBpKyspIHsKPiA+Pj4gPiAtICAgICAgICAgICAgIGVkaWRfZXh0ID0gKHU4ICopZWRp ZCArIEVESURfTEVOR1RIICogKGkgKyAxKTsKPiA+Pj4gPiAtICAgICAgICAgICAgIGlmIChlZGlk X2V4dFswXSA9PSBleHRfaWQpCj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ ID4+PiA+IC0gICAgIH0KPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgaWYgKGkgPT0gZWRpZC0+ZXh0 ZW5zaW9ucykKPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ID4+PiA+IC0KPiA+ Pj4gPiAtICAgICByZXR1cm4gZWRpZF9leHQ7Cj4gPj4+ID4gLX0KPiA+Pj4gPiAtCj4gPj4+ID4g LXN0YXRpYyB1OCAqZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihzdHJ1Y3QgZWRpZCAqZWRpZCkKPiA+ Pj4gPiAtewo+ID4+PiA+IC0gICAgIHJldHVybiBkcHVfZmluZF9lZGlkX2V4dGVuc2lvbihlZGlk LCBEUFVfQ0VBX0VYVCk7Cj4gPj4+ID4gLX0KPiA+Pj4gPiAtCj4gPj4+ID4gLXN0YXRpYyBpbnQK PiA+Pj4gPiAtZHB1X2NlYV9kYl9wYXlsb2FkX2xlbihjb25zdCB1OCAqZGIpCj4gPj4+ID4gLXsK PiA+Pj4gPiAtICAgICByZXR1cm4gZGJbMF0gJiAweDFmOwo+ID4+PiA+IC19Cj4gPj4+ID4gLQo+ ID4+PiA+IC1zdGF0aWMgaW50Cj4gPj4+ID4gLWRwdV9jZWFfZGJfdGFnKGNvbnN0IHU4ICpkYikK PiA+Pj4gPiAtewo+ID4+PiA+IC0gICAgIHJldHVybiBkYlswXSA+PiA1Owo+ID4+PiA+IC19Cj4g Pj4+ID4gLQo+ID4+PiA+IC1zdGF0aWMgaW50Cj4gPj4+ID4gLWRwdV9jZWFfcmV2aXNpb24oY29u c3QgdTggKmNlYSkKPiA+Pj4gPiAtewo+ID4+PiA+IC0gICAgIHJldHVybiBjZWFbMV07Cj4gPj4+ ID4gLX0KPiA+Pj4gPiAtCj4gPj4+ID4gLXN0YXRpYyBpbnQKPiA+Pj4gPiAtZHB1X2NlYV9kYl9v ZmZzZXRzKGNvbnN0IHU4ICpjZWEsIGludCAqc3RhcnQsIGludCAqZW5kKQo+ID4+PiA+IC17Cj4g Pj4+ID4gLSAgICAgLyogRGF0YSBibG9jayBvZmZzZXQgaW4gQ0VBIGV4dGVuc2lvbiBibG9jayAq Lwo+ID4+PiA+IC0gICAgICpzdGFydCA9IDQ7Cj4gPj4+ID4gLSAgICAgKmVuZCA9IGNlYVsyXTsK PiA+Pj4gPiAtICAgICBpZiAoKmVuZCA9PSAwKQo+ID4+PiA+IC0gICAgICAgICAgICAgKmVuZCA9 IDEyNzsKPiA+Pj4gPiAtICAgICBpZiAoKmVuZCA8IDQgfHwgKmVuZCA+IDEyNykKPiA+Pj4gPiAt ICAgICAgICAgICAgIHJldHVybiAtRVJBTkdFOwo+ID4+PiA+IC0gICAgIHJldHVybiAwOwo+ID4+ PiA+IC19Cj4gPj4+ID4gLQo+ID4+PiA+IC0jZGVmaW5lIGRwdV9mb3JfZWFjaF9jZWFfZGIoY2Vh LCBpLCBzdGFydCwgZW5kKSBcCj4gPj4+ID4gLWZvciAoKGkpID0gKHN0YXJ0KTsgXAo+ID4+PiA+ IC0oaSkgPCAoZW5kKSAmJiAoaSkgKyBkcHVfY2VhX2RiX3BheWxvYWRfbGVuKCYoY2VhKVsoaSld KSA8IChlbmQpOyBcCj4gPj4+ID4gLShpKSArPSBkcHVfY2VhX2RiX3BheWxvYWRfbGVuKCYoY2Vh KVsoaSldKSArIDEpCj4gPj4+ID4gLQo+ID4+PiA+IC1zdGF0aWMgYm9vbCBkcHVfY2VhX2RiX2lz X2hkbWlfaGZfdnNkYihjb25zdCB1OCAqZGIpCj4gPj4+ID4gLXsKPiA+Pj4gPiAtICAgICBpbnQg aGRtaV9pZDsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgaWYgKGRwdV9jZWFfZGJfdGFnKGRiKSAh PSBWRU5ET1JfU1BFQ0lGSUNfREFUQV9CTE9DSykKPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgaWYgKGRwdV9jZWFfZGJfcGF5bG9hZF9s ZW4oZGIpIDwgNykKPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiA+Pj4gPiAt Cj4gPj4+ID4gLSAgICAgaGRtaV9pZCA9IGRiWzFdIHwgKGRiWzJdIDw8IDgpIHwgKGRiWzNdIDw8 IDE2KTsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgcmV0dXJuIGhkbWlfaWQgPT0gSERNSV9GT1JV TV9JRUVFX09VSTsKPiA+Pj4gPiAtfQo+ID4+PiA+IC0KPiA+Pj4gPiAtc3RhdGljIHU4ICpkcHVf ZWRpZF9maW5kX2V4dGVuZGVkX3RhZ19ibG9jayhzdHJ1Y3QgZWRpZCAqZWRpZCwgaW50Cj4gPj4+ ID4gYmxrX2lkKQo+ID4+PiA+IC17Cj4gPj4+ID4gLSAgICAgdTggKmRiID0gTlVMTDsKPiA+Pj4g PiAtICAgICB1OCAqY2VhID0gTlVMTDsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgaWYgKCFlZGlk KSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICBEUFVfRVJST1IoIiVzOiBpbnZhbGlkIGlucHV0XG4i LCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiA+Pj4gPiAt ICAgICB9Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIGNlYSA9IGRwdV9maW5kX2NlYV9leHRlbnNp b24oZWRpZCk7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIGlmIChjZWEgJiYgZHB1X2NlYV9yZXZp c2lvbihjZWEpID49IDMpIHsKPiA+Pj4gPiAtICAgICAgICAgICAgIGludCBpLCBzdGFydCwgZW5k Owo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICAgICAgICAgIGlmIChkcHVfY2VhX2RiX29mZnNldHMo Y2VhLCAmc3RhcnQsICZlbmQpKQo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICByZXR1cm4g TlVMTDsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgICAgICAgICBkcHVfZm9yX2VhY2hfY2VhX2Ri KGNlYSwgaSwgc3RhcnQsIGVuZCkgewo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBkYiA9 ICZjZWFbaV07Cj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGlmICgoZHB1X2NlYV9kYl90 YWcoZGIpID09IERQVV9FWFRFTkRFRF9UQUcpICYmCj4gPj4+ID4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGRiWzFdID09IGJsa19pZCkpCj4gPj4+ID4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIGRiOwo+ID4+PiA+IC0gICAgICAgICAgICAgfQo+ID4+PiA+IC0g ICAgIH0KPiA+Pj4gPiAtICAgICByZXR1cm4gTlVMTDsKPiA+Pj4gPiAtfQo+ID4+PiA+IC0KPiA+ Pj4gPiAtc3RhdGljIHU4ICoKPiA+Pj4gPiAtZHB1X2VkaWRfZmluZF9ibG9jayhzdHJ1Y3QgZWRp ZCAqZWRpZCwgaW50IGJsa19pZCkKPiA+Pj4gPiAtewo+ID4+PiA+IC0gICAgIHU4ICpkYiA9IE5V TEw7Cj4gPj4+ID4gLSAgICAgdTggKmNlYSA9IE5VTEw7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAg IGlmICghZWRpZCkgewo+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VSUk9SKCIlczogaW52YWxp ZCBpbnB1dFxuIiwgX19mdW5jX18pOwo+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuIE5VTEw7 Cj4gPj4+ID4gLSAgICAgfQo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBjZWEgPSBkcHVfZmluZF9j ZWFfZXh0ZW5zaW9uKGVkaWQpOwo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBpZiAoY2VhICYmIGRw dV9jZWFfcmV2aXNpb24oY2VhKSA+PSAzKSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICBpbnQgaSwg c3RhcnQsIGVuZDsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgICAgICAgICBpZiAoZHB1X2NlYV9k Yl9vZmZzZXRzKGNlYSwgJnN0YXJ0LCAmZW5kKSkKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIE5VTEw7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgICAgICAgICAgZHB1X2Zvcl9l YWNoX2NlYV9kYihjZWEsIGksIHN0YXJ0LCBlbmQpIHsKPiA+Pj4gPiAtICAgICAgICAgICAgICAg ICAgICAgZGIgPSAmY2VhW2ldOwo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBpZiAoZHB1 X2NlYV9kYl90YWcoZGIpID09IGJsa19pZCkKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gZGI7Cj4gPj4+ID4gLSAgICAgICAgICAgICB9Cj4gPj4+ID4gLSAgICAg fQo+ID4+PiA+IC0gICAgIHJldHVybiBOVUxMOwo+ID4+PiA+IC19Cj4gPj4+ID4gLQo+ID4+PiA+ IC0KPiA+Pj4gPiAtc3RhdGljIGNvbnN0IHU4ICpfZHB1X2VkaWRfZmluZF9ibG9jayhjb25zdCB1 OCAqaW5fYnVmLCB1MzIKPiA+Pj4gPiBzdGFydF9vZmZzZXQsCj4gPj4+ID4gLSAgICAgdTggdHlw ZSwgdTggKmxlbikKPiA+Pj4gPiAtewo+ID4+PiA+IC0gICAgIC8qIHRoZSBzdGFydCBvZiBkYXRh IGJsb2NrIGNvbGxlY3Rpb24sIHN0YXJ0IG9mIFZpZGVvIERhdGEgQmxvY2sKPiA+Pj4gPiAqLwo+ ID4+PiA+IC0gICAgIHUzMiBvZmZzZXQgPSBzdGFydF9vZmZzZXQ7Cj4gPj4+ID4gLSAgICAgdTMy IGRiY19vZmZzZXQgPSBpbl9idWZbMl07Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIERQVV9FRElE X0RFQlVHKCIlcyArIiwgX19mdW5jX18pOwo+ID4+PiA+IC0gICAgIC8qCj4gPj4+ID4gLSAgICAg ICogKiBlZGlkIGJ1ZmZlciAxLCBieXRlIDIgYmVpbmcgNCBtZWFucyBubyBub24tRFREL0RhdGEg YmxvY2sKPiA+Pj4gPiAtICAgICAgKiAgIGNvbGxlY3Rpb24gcHJlc2VudC4KPiA+Pj4gPiAtICAg ICAgKiAqIGVkaWQgYnVmZmVyIDEsIGJ5dGUgMiBiZWluZyAwIG1lYW5zIG5vIG5vbi1EVEQvREFU QSBibG9jawo+ID4+PiA+IC0gICAgICAqICAgY29sbGVjdGlvbiBwcmVzZW50IGFuZCBubyBEVEQg ZGF0YSBwcmVzZW50Lgo+ID4+PiA+IC0gICAgICAqLwo+ID4+PiA+IC0gICAgIGlmICgoZGJjX29m ZnNldCA9PSAwKSB8fCAoZGJjX29mZnNldCA9PSA0KSkgewo+ID4+PiA+IC0gICAgICAgICAgICAg RFBVX0VSUk9SKCJFRElEOiBubyBEVEQgb3Igbm9uLURURCBkYXRhIHByZXNlbnRcbiIpOwo+ID4+ PiA+IC0gICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPj4+ID4gLSAgICAgfQo+ID4+PiA+IC0K PiA+Pj4gPiAtICAgICB3aGlsZSAob2Zmc2V0IDwgZGJjX29mZnNldCkgewo+ID4+PiA+IC0gICAg ICAgICAgICAgdTggYmxvY2tfbGVuID0gaW5fYnVmW29mZnNldF0gJiAweDFGOwo+ID4+PiA+IC0K PiA+Pj4gPiAtICAgICAgICAgICAgIGlmICgob2Zmc2V0ICsgYmxvY2tfbGVuIDw9IGRiY19vZmZz ZXQpICYmCj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgKGluX2J1ZltvZmZzZXRdID4+IDUpID09 IHR5cGUpIHsKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgKmxlbiA9IGJsb2NrX2xlbjsK PiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgRFBVX0VESURfREVCVUcoImJsb2NrPSVkIGZv dW5kIEAgMHgleCB3Lwo+ID4+PiA+IGxlbj0lZFxuIiwKPiA+Pj4gPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0eXBlLCBvZmZzZXQsIGJsb2NrX2xlbik7Cj4gPj4+ID4gLQo+ID4+PiA+ IC0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5fYnVmICsgb2Zmc2V0Owo+ID4+PiA+IC0g ICAgICAgICAgICAgfQo+ID4+PiA+IC0gICAgICAgICAgICAgb2Zmc2V0ICs9IDEgKyBibG9ja19s ZW47Cj4gPj4+ID4gLSAgICAgfQo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICByZXR1cm4gTlVMTDsK PiA+Pj4gPiAtfQo+ID4+PiA+IC0KPiA+Pj4gPiAtc3RhdGljIHZvaWQgZHB1X2VkaWRfZXh0cmFj dF92ZW5kb3JfaWQoc3RydWN0IGRwdV9lZGlkX2N0cmwKPiA+Pj4gPiAqZWRpZF9jdHJsKQo+ID4+ PiA+IC17Cj4gPj4+ID4gLSAgICAgY2hhciAqdmVuZG9yX2lkOwo+ID4+PiA+IC0gICAgIHUzMiBp ZF9jb2RlczsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzICsiLCBf X2Z1bmNfXyk7Cj4gPj4+ID4gLSAgICAgaWYgKCFlZGlkX2N0cmwpIHsKPiA+Pj4gPiAtICAgICAg ICAgICAgIERQVV9FUlJPUigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVuY19fKTsKPiA+Pj4g PiAtICAgICAgICAgICAgIHJldHVybjsKPiA+Pj4gPiAtICAgICB9Cj4gPj4+ID4gLQo+ID4+PiA+ IC0gICAgIHZlbmRvcl9pZCA9IGVkaWRfY3RybC0+dmVuZG9yX2lkOwo+ID4+PiA+IC0gICAgIGlk X2NvZGVzID0gKCh1MzIpZWRpZF9jdHJsLT5lZGlkLT5tZmdfaWRbMF0gPDwgOCkgKwo+ID4+PiA+ IC0gICAgICAgICAgICAgZWRpZF9jdHJsLT5lZGlkLT5tZmdfaWRbMV07Cj4gPj4+ID4gLQo+ID4+ PiA+IC0gICAgIHZlbmRvcl9pZFswXSA9ICdBJyAtIDEgKyAoKGlkX2NvZGVzID4+IDEwKSAmIDB4 MUYpOwo+ID4+PiA+IC0gICAgIHZlbmRvcl9pZFsxXSA9ICdBJyAtIDEgKyAoKGlkX2NvZGVzID4+ IDUpICYgMHgxRik7Cj4gPj4+ID4gLSAgICAgdmVuZG9yX2lkWzJdID0gJ0EnIC0gMSArIChpZF9j b2RlcyAmIDB4MUYpOwo+ID4+PiA+IC0gICAgIHZlbmRvcl9pZFszXSA9IDA7Cj4gPj4+ID4gLSAg ICAgRFBVX0VESURfREVCVUcoInZlbmRvciBpZCBpcyAlcyAiLCB2ZW5kb3JfaWQpOwo+ID4+PiA+ IC0gICAgIERQVV9FRElEX0RFQlVHKCIlcyAtIiwgX19mdW5jX18pOwo+ID4+PiA+IC19Cj4gPj4+ ID4gLQo+ID4+PiA+IC1zdGF0aWMgdm9pZCBkcHVfZWRpZF9zZXRfeTQyMF9zdXBwb3J0KHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPj4+ID4gLXUzMiB2aWRlb19mb3JtYXQpCj4g Pj4+ID4gLXsKPiA+Pj4gPiAtICAgICB1OCBjZWFfbW9kZSA9IDA7Cj4gPj4+ID4gLSAgICAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gPj4+ID4gLSAgICAgdTMyIG1vZGVfZm10X2Zs YWdzID0gMDsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgLyogTmVlZCB0byBhZGQgWTQyMCBzdXBw b3J0IGZsYWcgdG8gdGhlIG1vZGVzICovCj4gPj4+ID4gLSAgICAgbGlzdF9mb3JfZWFjaF9lbnRy eShtb2RlLCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsIGhlYWQpIHsKPiA+Pj4gPiAtICAgICAg ICAgICAgIC8qIENhY2hlIHRoZSBmb3JtYXQgZmxhZ3MgYmVmb3JlIGNsZWFyaW5nICovCj4gPj4+ ID4gLSAgICAgICAgICAgICBtb2RlX2ZtdF9mbGFncyA9IG1vZGUtPmZsYWdzOwo+ID4+PiA+IC0g ICAgICAgICAgICAgLyogQ2xlYXIgdGhlIFJHQi9ZVVYgZm9ybWF0IGZsYWdzIGJlZm9yZSBjYWxs aW5nIHVwc3RyZWFtCj4gPj4+ID4gQVBJICovCj4gPj4+ID4gLSAgICAgICAgICAgICBtb2RlLT5m bGFncyAmPSB+RFBVX0RSTV9NT0RFX0ZMQUdfRk1UX01BU0s7Cj4gPj4+ID4gLSAgICAgICAgICAg ICBjZWFfbW9kZSA9IGRybV9tYXRjaF9jZWFfbW9kZShtb2RlKTsKPiA+Pj4gPiAtICAgICAgICAg ICAgIC8qIFJlc3RvcmUgdGhlIGZvcm1hdCBmbGFncyAqLwo+ID4+PiA+IC0gICAgICAgICAgICAg bW9kZS0+ZmxhZ3MgPSBtb2RlX2ZtdF9mbGFnczsKPiA+Pj4gPiAtICAgICAgICAgICAgIGlmICgo Y2VhX21vZGUgIT0gMCkgJiYgKGNlYV9tb2RlID09IHZpZGVvX2Zvcm1hdCkpIHsKPiA+Pj4gPiAt ICAgICAgICAgICAgICAgICAgICAgRFBVX0VESURfREVCVUcoIiVzIGZvdW5kIG1hdGNoIGZvciAl ZCAiLAo+ID4+PiA+IF9fZnVuY19fLAo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICB2aWRl b19mb3JtYXQpOwo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBtb2RlLT5mbGFncyB8PSBE Uk1fTU9ERV9GTEFHX1NVUFBPUlRTX1lVVjsKPiA+Pj4gPiAtICAgICAgICAgICAgIH0KPiA+Pj4g PiAtICAgICB9Cj4gPj4+ID4gLX0KPiA+Pj4gPiAtCj4gPj4+ID4gLXN0YXRpYyB2b2lkIGRwdV9l ZGlkX3BhcnNlX1k0MjBDTURCKAo+ID4+PiA+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsLAo+ID4+PiA+IC1jb25zdCB1OCAq ZGIpCj4gPj4+ID4gLXsKPiA+Pj4gPiAtICAgICB1MzIgb2Zmc2V0ID0gMDsKPiA+Pj4gPiAtICAg ICB1OCBjbWRiX2xlbiA9IDA7Cj4gPj4+ID4gLSAgICAgdTggc3ZkX2xlbiA9IDA7Cj4gPj4+ID4g LSAgICAgY29uc3QgdTggKnN2ZCA9IE5VTEw7Cj4gPj4+ID4gLSAgICAgdTMyIGkgPSAwLCBqID0g MDsKPiA+Pj4gPiAtICAgICB1MzIgdmlkZW9fZm9ybWF0ID0gMDsKPiA+Pj4gPiAtCj4gPj4+ID4g LSAgICAgaWYgKCFlZGlkX2N0cmwpIHsKPiA+Pj4gPiAtICAgICAgICAgICAgIERQVV9FUlJPUigi JXM6IGVkaWRfY3RybCBpcyBOVUxMXG4iLCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLSAgICAgICAgICAg ICByZXR1cm47Cj4gPj4+ID4gLSAgICAgfQo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBpZiAoIWRi KSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICBEUFVfRVJST1IoIiVzOiBpbnZhbGlkIGlucHV0XG4i LCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm47Cj4gPj4+ID4gLSAgICAg fQo+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Cj4gPj4+ ID4gLSAgICAgY21kYl9sZW4gPSBkYlswXSAmIDB4MWY7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAg IC8qIEJ5dGUgMyB0byBMKzEgY29udGFpbiBTVkRzICovCj4gPj4+ID4gLSAgICAgb2Zmc2V0ICs9 IDI7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIHN2ZCA9IGRwdV9lZGlkX2ZpbmRfYmxvY2soZWRp ZF9jdHJsLT5lZGlkLCBWSURFT19EQVRBX0JMT0NLKTsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAg aWYgKHN2ZCkgewo+ID4+PiA+IC0gICAgICAgICAgICAgLyptb3ZpbmcgdG8gdGhlIG5leHQgYnl0 ZSBhcyB2aWMgaW5mbyBiZWdpbnMgdGhlcmUqLwo+ID4+PiA+IC0gICAgICAgICAgICAgc3ZkX2xl biA9IHN2ZFswXSAmIDB4MWY7Cj4gPj4+ID4gLSAgICAgICAgICAgICArK3N2ZDsKPiA+Pj4gPiAt ICAgICB9Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIGZvciAoaSA9IDA7IGkgPCBzdmRfbGVuOyBp KyssIGorKykgewo+ID4+PiA+IC0gICAgICAgICAgICAgdmlkZW9fZm9ybWF0ID0gKihzdmQgKyBp KSAmIDB4N0Y7Cj4gPj4+ID4gLSAgICAgICAgICAgICBpZiAoY21kYl9sZW4gPT0gMSkgewo+ID4+ PiA+IC0gICAgICAgICAgICAgICAgICAgICAvKiBJZiBjbWRiX2xlbiBpcyAxLCBpdCBtZWFucyBh bGwgU1ZEcyBzdXBwb3J0Cj4gPj4+ID4gWVVWICovCj4gPj4+ID4gLSAgICAgICAgICAgICAgICAg ICAgIGRwdV9lZGlkX3NldF95NDIwX3N1cHBvcnQoY29ubmVjdG9yLAo+ID4+PiA+IHZpZGVvX2Zv cm1hdCk7Cj4gPj4+ID4gLSAgICAgICAgICAgICB9IGVsc2UgaWYgKGRiW29mZnNldF0gJiAoMSA8 PCBqKSkgewo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBkcHVfZWRpZF9zZXRfeTQyMF9z dXBwb3J0KGNvbm5lY3RvciwKPiA+Pj4gPiB2aWRlb19mb3JtYXQpOwo+ID4+PiA+IC0KPiA+Pj4g PiAtICAgICAgICAgICAgICAgICAgICAgaWYgKGogJiAweDgwKSB7Cj4gPj4+ID4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaiA9IGovODsKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvZmZzZXQrKzsKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAob2Zmc2V0ID49IGNtZGJfbGVuKQo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Cj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIH0KPiA+ Pj4gPiAtICAgICAgICAgICAgIH0KPiA+Pj4gPiAtICAgICB9Cj4gPj4+ID4gLQo+ID4+PiA+IC0g ICAgIERQVV9FRElEX0RFQlVHKCIlcyAtXG4iLCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLQo+ID4+PiA+ IC19Cj4gPj4+ID4gLQo+ID4+PiA+IC1zdGF0aWMgdm9pZCBkcHVfZWRpZF9wYXJzZV9ZNDIwVkRC KAo+ID4+PiA+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHB1X2Vk aWRfY3RybCAqZWRpZF9jdHJsLAo+ID4+PiA+IC1jb25zdCB1OCAqZGIpCj4gPj4+ID4gLXsKPiA+ Pj4gPiAtICAgICB1OCBsZW4gPSBkYlswXSAmIDB4MWY7Cj4gPj4+ID4gLSAgICAgdTMyIGkgPSAw Owo+ID4+PiA+IC0gICAgIHUzMiB2aWRlb19mb3JtYXQgPSAwOwo+ID4+PiA+IC0KPiA+Pj4gPiAt ICAgICBpZiAoIWVkaWRfY3RybCkgewo+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VSUk9SKCIl czogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwo+ID4+PiA+IC0gICAgICAgICAgICAgcmV0 dXJuOwo+ID4+PiA+IC0gICAgIH0KPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgRFBVX0VESURfREVC VUcoIiVzICtcbiIsIF9fZnVuY19fKTsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgLyogT2Zmc2V0 IHRvIGJ5dGUgMyAqLwo+ID4+PiA+IC0gICAgIGRiICs9IDI7Cj4gPj4+ID4gLSAgICAgZm9yIChp ID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgewo+ID4+PiA+IC0gICAgICAgICAgICAgdmlkZW9fZm9y bWF0ID0gKihkYiArIGkpICYgMHg3RjsKPiA+Pj4gPiAtICAgICAgICAgICAgIC8qCj4gPj4+ID4g LSAgICAgICAgICAgICAgKiBtb2RlIHdhcyBhbHJlYWR5IGFkZGVkIGluIGdldF9tb2RlcygpCj4g Pj4+ID4gLSAgICAgICAgICAgICAgKiBvbmx5IG5lZWQgdG8gc2V0IHRoZSBZNDIwIHN1cHBvcnQg ZmxhZwo+ID4+PiA+IC0gICAgICAgICAgICAgICovCj4gPj4+ID4gLSAgICAgICAgICAgICBkcHVf ZWRpZF9zZXRfeTQyMF9zdXBwb3J0KGNvbm5lY3RvciwgdmlkZW9fZm9ybWF0KTsKPiA+Pj4gPiAt ICAgICB9Cj4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7Cj4g Pj4+ID4gLX0KPiA+Pj4gPiAtCj4gPj4+ID4gLXN0YXRpYyB2b2lkIGRwdV9lZGlkX3NldF9tb2Rl X2Zvcm1hdCgKPiA+Pj4gPiAtc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0 IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCkKPiA+Pj4gPiAtewo+ID4+PiA+IC0gICAgIGNvbnN0 IHU4ICpkYiA9IE5VTEw7Cj4gPj4+ID4gLSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGU7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1 bmNfXyk7Cj4gPj4+ID4gLSAgICAgLyogU2V0IFlVViBtb2RlIHN1cHBvcnQgZmxhZ3MgZm9yIFlD YmNyNDIwVkRCICovCj4gPj4+ID4gLSAgICAgZGIgPSBkcHVfZWRpZF9maW5kX2V4dGVuZGVkX3Rh Z19ibG9jayhlZGlkX2N0cmwtPmVkaWQsCj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIFk0 MjBfVklERU9fREFUQV9CTE9DSyk7Cj4gPj4+ID4gLSAgICAgaWYgKGRiKQo+ID4+PiA+IC0gICAg ICAgICAgICAgZHB1X2VkaWRfcGFyc2VfWTQyMFZEQihjb25uZWN0b3IsIGVkaWRfY3RybCwgZGIp Owo+ID4+PiA+IC0gICAgIGVsc2UKPiA+Pj4gPiAtICAgICAgICAgICAgIERQVV9FRElEX0RFQlVH KCJZQ2JDcjQyMCBWREIgaXMgbm90IHByZXNlbnRcbiIpOwo+ID4+PiA+IC0KPiA+Pj4gPiAtICAg ICAvKiBTZXQgUkdCIHN1cHBvcnRlZCBvbiBhbGwgbW9kZXMgd2hlcmUgWVVWIGlzIG5vdCBzZXQg Ki8KPiA+Pj4gPiAtICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3ItPnBy b2JlZF9tb2RlcywgaGVhZCkgewo+ID4+PiA+IC0gICAgICAgICAgICAgaWYgKCEobW9kZS0+Zmxh Z3MgJiBEUk1fTU9ERV9GTEFHX1NVUFBPUlRTX1lVVikpCj4gPj4+ID4gLSAgICAgICAgICAgICAg ICAgICAgIG1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfU1VQUE9SVFNfUkdCOwo+ID4+PiA+ IC0gICAgIH0KPiA+Pj4gPiAtCj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIGRiID0gZHB1X2VkaWRf ZmluZF9leHRlbmRlZF90YWdfYmxvY2soZWRpZF9jdHJsLT5lZGlkLAo+ID4+PiA+IC0gICAgICAg ICAgICAgICAgICAgICBZNDIwX0NBUEFCSUxJVFlfTUFQX0RBVEFfQkxPQ0spOwo+ID4+PiA+IC0g ICAgIGlmIChkYikKPiA+Pj4gPiAtICAgICAgICAgICAgIGRwdV9lZGlkX3BhcnNlX1k0MjBDTURC KGNvbm5lY3RvciwgZWRpZF9jdHJsLCBkYik7Cj4gPj4+ID4gLSAgICAgZWxzZQo+ID4+PiA+IC0g ICAgICAgICAgICAgRFBVX0VESURfREVCVUcoIllDYkNyNDIwIENNREIgaXMgbm90IHByZXNlbnRc biIpOwo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBEUFVfRURJRF9ERUJVRygiJXMgLVxuIiwgX19m dW5jX18pOwo+ID4+PiA+IC19Cj4gPj4+ID4gLQo+ID4+PiA+IC1zdGF0aWMgdm9pZCBfZHB1X2Vk aWRfdXBkYXRlX2RjX21vZGVzKAo+ID4+PiA+IC1zdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsKQo+ID4+PiA+IC17Cj4gPj4+ID4g LSAgICAgaW50IGksIHN0YXJ0LCBlbmQ7Cj4gPj4+ID4gLSAgICAgdTggKmVkaWRfZXh0LCAqaGRt aTsKPiA+Pj4gPiAtICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlzcF9pbmZvOwo+ID4+ PiA+IC0gICAgIHUzMiBoZG1pX2RjX3l1dl9tb2RlcyA9IDA7Cj4gPj4+ID4gLQo+ID4+PiA+IC0g ICAgIERQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLQo+ID4+PiA+ IC0gICAgIGlmICghY29ubmVjdG9yIHx8ICFlZGlkX2N0cmwpIHsKPiA+Pj4gPiAtICAgICAgICAg ICAgIERQVV9FUlJPUigiaW52YWxpZCBpbnB1dFxuIik7Cj4gPj4+ID4gLSAgICAgICAgICAgICBy ZXR1cm47Cj4gPj4+ID4gLSAgICAgfQo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBkaXNwX2luZm8g PSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm87Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIGVkaWRf ZXh0ID0gZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihlZGlkX2N0cmwtPmVkaWQpOwo+ID4+PiA+IC0K PiA+Pj4gPiAtICAgICBpZiAoIWVkaWRfZXh0KSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICBEUFVf RVJST1IoIm5vIGNlYSBleHRlbnNpb25cbiIpOwo+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJu Owo+ID4+PiA+IC0gICAgIH0KPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgaWYgKGRwdV9jZWFfZGJf b2Zmc2V0cyhlZGlkX2V4dCwgJnN0YXJ0LCAmZW5kKSkKPiA+Pj4gPiAtICAgICAgICAgICAgIHJl dHVybjsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgZHB1X2Zvcl9lYWNoX2NlYV9kYihlZGlkX2V4 dCwgaSwgc3RhcnQsIGVuZCkgewo+ID4+PiA+IC0gICAgICAgICAgICAgaWYgKGRwdV9jZWFfZGJf aXNfaGRtaV9oZl92c2RiKCZlZGlkX2V4dFtpXSkpIHsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAg ICAgICAgICAgICAgICAgIGhkbWkgPSAmZWRpZF9leHRbaV07Cj4gPj4+ID4gLQo+ID4+PiA+IC0g ICAgICAgICAgICAgICAgICAgICBpZiAoZHB1X2NlYV9kYl9wYXlsb2FkX2xlbihoZG1pKSA8IDcp Cj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPj4+ID4g LQo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBpZiAoaGRtaVs3XSAmIERSTV9FRElEX1lD QkNSNDIwX0RDXzMwKSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRt aV9kY195dXZfbW9kZXMgfD0KPiA+Pj4gPiBEUk1fRURJRF9ZQ0JDUjQyMF9EQ18zMDsKPiA+Pj4g PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUFVfRURJRF9ERUJVRygiWTQyMCAzMC1i aXQKPiA+Pj4gPiBzdXBwb3J0ZWRcbiIpOwo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICB9 Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBpZiAoaGRtaVs3XSAmIERS TV9FRElEX1lDQkNSNDIwX0RDXzM2KSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaGRtaV9kY195dXZfbW9kZXMgfD0KPiA+Pj4gPiBEUk1fRURJRF9ZQ0JDUjQyMF9EQ18z NjsKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUFVfRURJRF9ERUJVRygi WTQyMCAzNi1iaXQKPiA+Pj4gPiBzdXBwb3J0ZWRcbiIpOwo+ID4+PiA+IC0gICAgICAgICAgICAg ICAgICAgICB9Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICBpZiAoaGRt aVs3XSAmIERSTV9FRElEX1lDQkNSNDIwX0RDXzQ4KSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaGRtaV9kY195dXZfbW9kZXMgfD0KPiA+Pj4gPiBEUk1fRURJRF9ZQ0JD UjQyMF9EQ18zNjsKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUFVfRURJ RF9ERUJVRygiWTQyMCA0OC1iaXQKPiA+Pj4gPiBzdXBwb3J0ZWRcbiIpOwo+ID4+PiA+IC0gICAg ICAgICAgICAgICAgICAgICB9Cj4gPj4+ID4gLSAgICAgICAgICAgICB9Cj4gPj4+ID4gLSAgICAg fQo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBkaXNwX2luZm8tPmVkaWRfaGRtaV9kY19tb2RlcyB8 PSBoZG1pX2RjX3l1dl9tb2RlczsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgRFBVX0VESURfREVC VUcoIiVzIC1cbiIsIF9fZnVuY19fKTsKPiA+Pj4gPiAtfQo+ID4+PiA+IC0KPiA+Pj4gPiAtc3Rh dGljIHZvaWQgX2RwdV9lZGlkX2V4dHJhY3RfYXVkaW9fZGF0YV9ibG9ja3MoCj4gPj4+ID4gLSAg ICAgc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCkKPiA+Pj4gPiAtewo+ID4+PiA+IC0g ICAgIHU4IGxlbiA9IDA7Cj4gPj4+ID4gLSAgICAgdTggYWRiX21heCA9IDA7Cj4gPj4+ID4gLSAg ICAgY29uc3QgdTggKmFkYiA9IE5VTEw7Cj4gPj4+ID4gLSAgICAgdTMyIG9mZnNldCA9IERCQ19T VEFSVF9PRkZTRVQ7Cj4gPj4+ID4gLSAgICAgdTggKmNlYSA9IE5VTEw7Cj4gPj4+ID4gLQo+ID4+ PiA+IC0gICAgIGlmICghZWRpZF9jdHJsKSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICBEUFVfRVJS T1IoImludmFsaWQgZWRpZF9jdHJsXG4iKTsKPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybjsK PiA+Pj4gPiAtICAgICB9Cj4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzICsiLCBfX2Z1 bmNfXyk7Cj4gPj4+ID4gLSAgICAgY2VhID0gZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihlZGlkX2N0 cmwtPmVkaWQpOwo+ID4+PiA+IC0gICAgIGlmICghY2VhKSB7Cj4gPj4+ID4gLSAgICAgICAgICAg ICBEUFVfREVCVUcoIkNFQSBleHRlbnNpb24gbm90IGZvdW5kXG4iKTsKPiA+Pj4gPiAtICAgICAg ICAgICAgIHJldHVybjsKPiA+Pj4gPiAtICAgICB9Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIGVk aWRfY3RybC0+YWRiX3NpemUgPSAwOwo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBtZW1zZXQoZWRp ZF9jdHJsLT5hdWRpb19kYXRhX2Jsb2NrLCAwLAo+ID4+PiA+IC0gICAgICAgICAgICAgc2l6ZW9m KGVkaWRfY3RybC0+YXVkaW9fZGF0YV9ibG9jaykpOwo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBk byB7Cj4gPj4+ID4gLSAgICAgICAgICAgICBsZW4gPSAwOwo+ID4+PiA+IC0gICAgICAgICAgICAg YWRiID0gX2RwdV9lZGlkX2ZpbmRfYmxvY2soY2VhLCBvZmZzZXQsIEFVRElPX0RBVEFfQkxPQ0ss Cj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgICZsZW4pOwo+ID4+PiA+IC0KPiA+Pj4gPiAt ICAgICAgICAgICAgIGlmICgoYWRiID09IE5VTEwpIHx8IChsZW4gPiBNQVhfQVVESU9fREFUQV9C TE9DS19TSVpFIHx8Cj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGFkYl9tYXggPj0gTUFY X05VTUJFUl9BREIpKSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGlmICghZWRpZF9j dHJsLT5hZGJfc2l6ZSkgewo+ID4+PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERQ VV9ERUJVRygiTm8vSW52YWxpZCBBdWRpbyBEYXRhCj4gPj4+ID4gQmxvY2tcbiIpOwo+ID4+PiA+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKPiA+Pj4gPiAtICAgICAgICAg ICAgICAgICAgICAgfQo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Cj4gPj4+ID4gLSAgICAgICAgICAgICB9Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgICAg ICAgICAgbWVtY3B5KGVkaWRfY3RybC0+YXVkaW9fZGF0YV9ibG9jayArIGVkaWRfY3RybC0+YWRi X3NpemUsCj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGFkYiArIDEsIGxlbik7Cj4gPj4+ ID4gLSAgICAgICAgICAgICBvZmZzZXQgPSAoYWRiIC0gY2VhKSArIDEgKyBsZW47Cj4gPj4+ID4g LQo+ID4+PiA+IC0gICAgICAgICAgICAgZWRpZF9jdHJsLT5hZGJfc2l6ZSArPSBsZW47Cj4gPj4+ ID4gLSAgICAgICAgICAgICBhZGJfbWF4Kys7Cj4gPj4+ID4gLSAgICAgfSB3aGlsZSAoYWRiKTsK PiA+Pj4gPiAtICAgICBEUFVfRURJRF9ERUJVRygiJXMgLSIsIF9fZnVuY19fKTsKPiA+Pj4gPiAt fQo+ID4+PiA+IC0KPiA+Pj4gPiAtc3RhdGljIHZvaWQgX2RwdV9lZGlkX2V4dHJhY3Rfc3BlYWtl cl9hbGxvY2F0aW9uX2RhdGEoCj4gPj4+ID4gLSAgICAgc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVk aWRfY3RybCkKPiA+Pj4gPiAtewo+ID4+PiA+IC0gICAgIHU4IGxlbjsKPiA+Pj4gPiAtICAgICBj b25zdCB1OCAqc2FkYiA9IE5VTEw7Cj4gPj4+ID4gLSAgICAgdTggKmNlYSA9IE5VTEw7Cj4gPj4+ ID4gLQo+ID4+PiA+IC0gICAgIGlmICghZWRpZF9jdHJsKSB7Cj4gPj4+ID4gLSAgICAgICAgICAg ICBEUFVfRVJST1IoImludmFsaWQgZWRpZF9jdHJsXG4iKTsKPiA+Pj4gPiAtICAgICAgICAgICAg IHJldHVybjsKPiA+Pj4gPiAtICAgICB9Cj4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVz ICsiLCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLSAgICAgY2VhID0gZHB1X2ZpbmRfY2VhX2V4dGVuc2lv bihlZGlkX2N0cmwtPmVkaWQpOwo+ID4+PiA+IC0gICAgIGlmICghY2VhKSB7Cj4gPj4+ID4gLSAg ICAgICAgICAgICBEUFVfREVCVUcoIkNFQSBleHRlbnNpb24gbm90IGZvdW5kXG4iKTsKPiA+Pj4g PiAtICAgICAgICAgICAgIHJldHVybjsKPiA+Pj4gPiAtICAgICB9Cj4gPj4+ID4gLQo+ID4+PiA+ IC0gICAgIHNhZGIgPSBfZHB1X2VkaWRfZmluZF9ibG9jayhjZWEsIERCQ19TVEFSVF9PRkZTRVQs Cj4gPj4+ID4gLSAgICAgICAgICAgICBTUEVBS0VSX0FMTE9DQVRJT05fREFUQV9CTE9DSywgJmxl bik7Cj4gPj4+ID4gLSAgICAgaWYgKChzYWRiID09IE5VTEwpIHx8IChsZW4gIT0gTUFYX1NQS1Jf QUxMT0NfREFUQV9CTE9DS19TSVpFKSkgewo+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0RFQlVH KCJOby9JbnZhbGlkIFNwZWFrZXIgQWxsb2NhdGlvbiBEYXRhIEJsb2NrXG4iKTsKPiA+Pj4gPiAt ICAgICAgICAgICAgIHJldHVybjsKPiA+Pj4gPiAtICAgICB9Cj4gPj4+ID4gLQo+ID4+PiA+IC0g ICAgIG1lbWNweShlZGlkX2N0cmwtPnNwa3JfYWxsb2NfZGF0YV9ibG9jaywgc2FkYiArIDEsIGxl bik7Cj4gPj4+ID4gLSAgICAgZWRpZF9jdHJsLT5zYWRiX3NpemUgPSBsZW47Cj4gPj4+ID4gLQo+ ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVHKCJzcGVha2VyIGFsbG9jIGRhdGEgU1AgYnl0ZSA9 ICUwOHgKPiA+Pj4gPiAlcyVzJXMlcyVzJXMlc1xuIiwKPiA+Pj4gPiAtICAgICAgICAgICAgIHNh ZGJbMV0sCj4gPj4+ID4gLSAgICAgICAgICAgICAoc2FkYlsxXSAmIEJJVCgwKSkgPyAiRkwvRlIs IiA6ICIiLAo+ID4+PiA+IC0gICAgICAgICAgICAgKHNhZGJbMV0gJiBCSVQoMSkpID8gIkxGRSwi IDogIiIsCj4gPj4+ID4gLSAgICAgICAgICAgICAoc2FkYlsxXSAmIEJJVCgyKSkgPyAiRkMsIiA6 ICIiLAo+ID4+PiA+IC0gICAgICAgICAgICAgKHNhZGJbMV0gJiBCSVQoMykpID8gIlJML1JSLCIg OiAiIiwKPiA+Pj4gPiAtICAgICAgICAgICAgIChzYWRiWzFdICYgQklUKDQpKSA/ICJSQywiIDog IiIsCj4gPj4+ID4gLSAgICAgICAgICAgICAoc2FkYlsxXSAmIEJJVCg1KSkgPyAiRkxDL0ZSQywi IDogIiIsCj4gPj4+ID4gLSAgICAgICAgICAgICAoc2FkYlsxXSAmIEJJVCg2KSkgPyAiUkxDL1JS QywiIDogIiIpOwo+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVHKCIlcyAtIiwgX19mdW5jX18p Owo+ID4+PiA+IC19Cj4gPj4+ID4gLQo+ID4+PiA+IC1zdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZHB1 X2VkaWRfaW5pdCh2b2lkKQo+ID4+PiA+IC17Cj4gPj4+ID4gLSAgICAgc3RydWN0IGRwdV9lZGlk X2N0cmwgKmVkaWRfY3RybCA9IE5VTEw7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIERQVV9FRElE X0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLSAgICAgZWRpZF9jdHJsID0ga3ph bGxvYyhzaXplb2YoKmVkaWRfY3RybCksIEdGUF9LRVJORUwpOwo+ID4+PiA+IC0gICAgIGlmICgh ZWRpZF9jdHJsKSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICBEUFVfRVJST1IoImVkaWRfY3RybCBh bGxvYyBmYWlsZWRcbiIpOwo+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gPj4+ ID4gLSAgICAgfQo+ID4+PiA+IC0gICAgIG1lbXNldCgoZWRpZF9jdHJsKSwgMCwgc2l6ZW9mKCpl ZGlkX2N0cmwpKTsKPiA+Pj4gPiAtICAgICBEUFVfRURJRF9ERUJVRygiJXMgLVxuIiwgX19mdW5j X18pOwo+ID4+PiA+IC0gICAgIHJldHVybiBlZGlkX2N0cmw7Cj4gPj4+ID4gLX0KPiA+Pj4gPiAt Cj4gPj4+ID4gLXZvaWQgZHB1X2ZyZWVfZWRpZCh2b2lkICoqaW5wdXQpCj4gPj4+ID4gLXsKPiA+ Pj4gPiAtICAgICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVf ZWRpZF9jdHJsCj4gPj4+ID4gKikoKmlucHV0KTsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgRFBV X0VESURfREVCVUcoIiVzICsiLCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLSAgICAga2ZyZWUoZWRpZF9j dHJsLT5lZGlkKTsKPiA+Pj4gPiAtICAgICBlZGlkX2N0cmwtPmVkaWQgPSBOVUxMOwo+ID4+PiA+ IC19Cj4gPj4+ID4gLQo+ID4+PiA+IC12b2lkIGRwdV9lZGlkX2RlaW5pdCh2b2lkICoqaW5wdXQp Cj4gPj4+ID4gLXsKPiA+Pj4gPiAtICAgICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJs ID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJsCj4gPj4+ID4gKikoKmlucHV0KTsKPiA+Pj4gPiAtCj4g Pj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzICsiLCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLSAg ICAgZHB1X2ZyZWVfZWRpZCgodm9pZCAqKSZlZGlkX2N0cmwpOwo+ID4+PiA+IC0gICAgIGtmcmVl KGVkaWRfY3RybCk7Cj4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNf Xyk7Cj4gPj4+ID4gLX0KPiA+Pj4gPiAtCj4gPj4+ID4gLWludCBfZHB1X2VkaWRfdXBkYXRlX21v ZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPj4+ID4gLSAgICAgdm9pZCAq aW5wdXQpCj4gPj4+ID4gLXsKPiA+Pj4gPiAtICAgICBpbnQgcmMgPSAwOwo+ID4+PiA+IC0gICAg IHN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAoc3RydWN0IGRwdV9lZGlkX2N0cmwK PiA+Pj4gPiAqKShpbnB1dCk7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVH KCIlcyArIiwgX19mdW5jX18pOwo+ID4+PiA+IC0gICAgIGlmIChlZGlkX2N0cmwtPmVkaWQpIHsK PiA+Pj4gPiAtICAgICAgICAgICAgIGRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9w ZXJ0eShjb25uZWN0b3IsCj4gPj4+ID4gLSAgICAgICAgICAgICAgICAgICAgIGVkaWRfY3RybC0+ ZWRpZCk7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAgICAgICAgICAgcmMgPSBkcm1fYWRkX2VkaWRf bW9kZXMoY29ubmVjdG9yLCBlZGlkX2N0cmwtPmVkaWQpOwo+ID4+PiA+IC0gICAgICAgICAgICAg ZHB1X2VkaWRfc2V0X21vZGVfZm9ybWF0KGNvbm5lY3RvciwgZWRpZF9jdHJsKTsKPiA+Pj4gPiAt ICAgICAgICAgICAgIF9kcHVfZWRpZF91cGRhdGVfZGNfbW9kZXMoY29ubmVjdG9yLCBlZGlkX2N0 cmwpOwo+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNf Xyk7Cj4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm4gcmM7Cj4gPj4+ID4gLSAgICAgfQo+ID4+ PiA+IC0KPiA+Pj4gPiAtICAgICBkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVy dHkoY29ubmVjdG9yLCBOVUxMKTsKPiA+Pj4gPiAtICAgICBEUFVfRURJRF9ERUJVRygiJXMgbnVs bCBlZGlkIC0iLCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLSAgICAgcmV0dXJuIHJjOwo+ID4+PiA+IC19 Cj4gPj4+ID4gLQo+ID4+PiA+IC11MzIgZHB1X2dldF9zaW5rX2JwYyh2b2lkICppbnB1dCkKPiA+ Pj4gPiAtewo+ID4+PiA+IC0gICAgIHN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAo c3RydWN0IGRwdV9lZGlkX2N0cmwKPiA+Pj4gPiAqKShpbnB1dCk7Cj4gPj4+ID4gLSAgICAgc3Ry dWN0IGVkaWQgKmVkaWQgPSBlZGlkX2N0cmwtPmVkaWQ7Cj4gPj4+ID4gLQo+ID4+PiA+IC0gICAg IGlmICghZWRpZCkgewo+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VSUk9SKCJpbnZhbGlkIGVk aWQgaW5wdXRcbiIpOwo+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPj4+ID4gLSAg ICAgfQo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBpZiAoKGVkaWQtPnJldmlzaW9uIDwgMykgfHwg IShlZGlkLT5pbnB1dCAmCj4gPj4+ID4gRFJNX0VESURfSU5QVVRfRElHSVRBTCkpCj4gPj4+ID4g LSAgICAgICAgICAgICByZXR1cm4gMDsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgaWYgKGVkaWQt PnJldmlzaW9uIDwgNCkgewo+ID4+PiA+IC0gICAgICAgICAgICAgaWYgKGVkaWQtPmlucHV0ICYg RFJNX0VESURfRElHSVRBTF9UWVBFX0RWSSkKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIDg7Cj4gPj4+ID4gLSAgICAgICAgICAgICBlbHNlCj4gPj4+ID4gLSAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAwOwo+ID4+PiA+IC0gICAgIH0KPiA+Pj4gPiAtCj4gPj4+ID4gLSAg ICAgc3dpdGNoIChlZGlkLT5pbnB1dCAmIERSTV9FRElEX0RJR0lUQUxfREVQVEhfTUFTSykgewo+ ID4+PiA+IC0gICAgIGNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF82Ogo+ID4+PiA+IC0gICAg ICAgICAgICAgcmV0dXJuIDY7Cj4gPj4+ID4gLSAgICAgY2FzZSBEUk1fRURJRF9ESUdJVEFMX0RF UFRIXzg6Cj4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm4gODsKPiA+Pj4gPiAtICAgICBjYXNl IERSTV9FRElEX0RJR0lUQUxfREVQVEhfMTA6Cj4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm4g MTA7Cj4gPj4+ID4gLSAgICAgY2FzZSBEUk1fRURJRF9ESUdJVEFMX0RFUFRIXzEyOgo+ID4+PiA+ IC0gICAgICAgICAgICAgcmV0dXJuIDEyOwo+ID4+PiA+IC0gICAgIGNhc2UgRFJNX0VESURfRElH SVRBTF9ERVBUSF8xNDoKPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiAxNDsKPiA+Pj4gPiAt ICAgICBjYXNlIERSTV9FRElEX0RJR0lUQUxfREVQVEhfMTY6Cj4gPj4+ID4gLSAgICAgICAgICAg ICByZXR1cm4gMTY7Cj4gPj4+ID4gLSAgICAgY2FzZSBEUk1fRURJRF9ESUdJVEFMX0RFUFRIX1VO REVGOgo+ID4+PiA+IC0gICAgIGRlZmF1bHQ6Cj4gPj4+ID4gLSAgICAgICAgICAgICByZXR1cm4g MDsKPiA+Pj4gPiAtICAgICB9Cj4gPj4+ID4gLX0KPiA+Pj4gPiAtCj4gPj4+ID4gLXU4IGRwdV9n ZXRfZWRpZF9jaGVja3N1bSh2b2lkICppbnB1dCkKPiA+Pj4gPiAtewo+ID4+PiA+IC0gICAgIHN0 cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAoc3RydWN0IGRwdV9lZGlkX2N0cmwKPiA+ Pj4gPiAqKShpbnB1dCk7Cj4gPj4+ID4gLSAgICAgc3RydWN0IGVkaWQgKmVkaWQgPSBOVUxMLCAq bGFzdF9ibG9jayA9IE5VTEw7Cj4gPj4+ID4gLSAgICAgdTggKnJhd19lZGlkID0gTlVMTDsKPiA+ Pj4gPiAtCj4gPj4+ID4gLSAgICAgaWYgKCFlZGlkX2N0cmwgfHwgIWVkaWRfY3RybC0+ZWRpZCkg ewo+ID4+PiA+IC0gICAgICAgICAgICAgRFBVX0VSUk9SKCJpbnZhbGlkIGVkaWQgaW5wdXRcbiIp Owo+ID4+PiA+IC0gICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPj4+ID4gLSAgICAgfQo+ID4+PiA+ IC0KPiA+Pj4gPiAtICAgICBlZGlkID0gZWRpZF9jdHJsLT5lZGlkOwo+ID4+PiA+IC0KPiA+Pj4g PiAtICAgICByYXdfZWRpZCA9ICh1OCAqKWVkaWQ7Cj4gPj4+ID4gLSAgICAgcmF3X2VkaWQgKz0g KGVkaWQtPmV4dGVuc2lvbnMgKiBFRElEX0xFTkdUSCk7Cj4gPj4+ID4gLSAgICAgbGFzdF9ibG9j ayA9IChzdHJ1Y3QgZWRpZCAqKXJhd19lZGlkOwo+ID4+PiA+IC0KPiA+Pj4gPiAtICAgICBpZiAo bGFzdF9ibG9jaykKPiA+Pj4gPiAtICAgICAgICAgICAgIHJldHVybiBsYXN0X2Jsb2NrLT5jaGVj a3N1bTsKPiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgRFBVX0VSUk9SKCJJbnZhbGlkIGJsb2NrLCBu byBjaGVja3N1bVxuIik7Cj4gPj4+ID4gLSAgICAgcmV0dXJuIDA7Cj4gPj4+ID4gLX0KPiA+Pj4g PiAtCj4gPj4+ID4gLWJvb2wgZHB1X2RldGVjdF9oZG1pX21vbml0b3Iodm9pZCAqaW5wdXQpCj4g Pj4+ID4gLXsKPiA+Pj4gPiAtICAgICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0g KHN0cnVjdCBkcHVfZWRpZF9jdHJsCj4gPj4+ID4gKikoaW5wdXQpOwo+ID4+PiA+IC0KPiA+Pj4g PiAtICAgICByZXR1cm4gZHJtX2RldGVjdF9oZG1pX21vbml0b3IoZWRpZF9jdHJsLT5lZGlkKTsK PiA+Pj4gPiAtfQo+ID4+PiA+IC0KPiA+Pj4gPiAtdm9pZCBkcHVfZ2V0X2VkaWQoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgdm9pZAo+ID4+PiA+ICoqaW5wdXQp Cj4gPj4+ID4gLXsKPiA+Pj4gPiAtICAgICBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJs ID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJsCj4gPj4+ID4gKikoKmlucHV0KTsKPiA+Pj4gPiAtCj4g Pj4+ID4gLSAgICAgZWRpZF9jdHJsLT5lZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgYWRh cHRlcik7Cj4gPj4+ID4gLSAgICAgRFBVX0VESURfREVCVUcoIiVzICtcbiIsIF9fZnVuY19fKTsK PiA+Pj4gPiAtCj4gPj4+ID4gLSAgICAgaWYgKCFlZGlkX2N0cmwtPmVkaWQpCj4gPj4+ID4gLSAg ICAgICAgICAgICBEUFVfRVJST1IoIkVESUQgcmVhZCBmYWlsZWRcbiIpOwo+ID4+PiA+IC0KPiA+ Pj4gPiAtICAgICBpZiAoZWRpZF9jdHJsLT5lZGlkKSB7Cj4gPj4+ID4gLSAgICAgICAgICAgICBk cHVfZWRpZF9leHRyYWN0X3ZlbmRvcl9pZChlZGlkX2N0cmwpOwo+ID4+PiA+IC0gICAgICAgICAg ICAgX2RwdV9lZGlkX2V4dHJhY3RfYXVkaW9fZGF0YV9ibG9ja3MoZWRpZF9jdHJsKTsKPiA+Pj4g PiAtICAgICAgICAgICAgIF9kcHVfZWRpZF9leHRyYWN0X3NwZWFrZXJfYWxsb2NhdGlvbl9kYXRh KGVkaWRfY3RybCk7Cj4gPj4+ID4gLSAgICAgfQo+ID4+PiA+IC0gICAgIERQVV9FRElEX0RFQlVH KCIlcyAtXG4iLCBfX2Z1bmNfXyk7Cj4gPj4+ID4gLX07Cj4gPj4+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPiA+Pj4gPiBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPiA+Pj4gPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKPiA+Pj4gPiBpbmRleCBjMDUxYjE4YmI4MTIuLjAwMDAwMDAwMDAwMAo+ID4+PiA+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKPiA+Pj4gPiArKysgL2Rldi9u dWxsCj4gPj4+ID4gQEAgLTEsMTY2ICswLDAgQEAKPiA+Pj4gPiAtLyoKPiA+Pj4gPiAtICogQ29w eXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLgo+ID4+PiA+IC0gKgo+ID4+PiA+IC0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gPj4+ID4gbW9kaWZ5Cj4gPj4+ ID4gLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFuZAo+ID4+PiA+IC0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiA+Pj4gPiAtICoKPiA+Pj4gPiAtICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCj4gPj4+ID4gLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gPj4+ID4gLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiA+Pj4gPiAtICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiA+Pj4gPiAtICoKPiA+ Pj4gPiAtICovCj4gPj4+ID4gLQo+ID4+PiA+IC0jaWZuZGVmIF9EUFVfRURJRF9QQVJTRVJfSF8K PiA+Pj4gPiAtI2RlZmluZSBfRFBVX0VESURfUEFSU0VSX0hfCj4gPj4+ID4gLQo+ID4+PiA+IC0j aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiA+Pj4gPiAtI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5o Pgo+ID4+PiA+IC0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+ID4+PiA+IC0jaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+Cj4gPj4+ID4gLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiA+Pj4g PiAtI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPj4+ID4gLSNpbmNsdWRlIDxkcm0vZHJtX2NydGMu aD4KPiA+Pj4gPiAtI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ID4+PiA+IC0KPiA+Pj4gPiAt Cj4gPj4+ID4gLSNkZWZpbmUgTUFYX05VTUJFUl9BREIgNQo+ID4+PiA+IC0jZGVmaW5lIE1BWF9B VURJT19EQVRBX0JMT0NLX1NJWkUgMzAKPiA+Pj4gPiAtI2RlZmluZSBNQVhfU1BLUl9BTExPQ19E QVRBX0JMT0NLX1NJWkUgMwo+ID4+PiA+IC0jZGVmaW5lIEVESURfVkVORE9SX0lEX1NJWkUgICAg IDQKPiA+Pj4gPiAtCj4gPj4+ID4gLSNkZWZpbmUgRFBVX0NFQV9FWFQgICAgMHgwMgo+ID4+PiA+ IC0jZGVmaW5lIERQVV9FWFRFTkRFRF9UQUcgMHgwNwo+ID4+PiA+IC0KPiA+Pj4gPiAtI2RlZmlu ZSBEUFVfRFJNX01PREVfRkxBR19GTVRfTUFTSyAoMHgzIDw8IDIwKQo+ID4+PiA+IC0KPiA+Pj4g PiAtZW51bSBleHRlbmRlZF9kYXRhX2Jsb2NrX3R5cGVzIHsKPiA+Pj4gPiAtICAgICBWSURFT19D QVBBQklMSVRZX0RBVEFfQkxPQ0sgPSAweDAsCj4gPj4+ID4gLSAgICAgVkVORE9SX1NQRUNJRklD X1ZJREVPX0RBVEFfQkxPQ0sgPSAweDAxLAo+ID4+PiA+IC0gICAgIEhETUlfVklERU9fREFUQV9C TE9DSyA9IDB4MDQsCj4gPj4+ID4gLSAgICAgSERSX1NUQVRJQ19NRVRBREFUQV9EQVRBX0JMT0NL ID0gMHgwNiwKPiA+Pj4gPiAtICAgICBZNDIwX1ZJREVPX0RBVEFfQkxPQ0sgPSAweDBFLAo+ID4+ PiA+IC0gICAgIFZJREVPX0ZPUk1BVF9QUkVGRVJFTkNFX0RBVEFfQkxPQ0sgPSAweDBELAo+ID4+ PiA+IC0gICAgIFk0MjBfQ0FQQUJJTElUWV9NQVBfREFUQV9CTE9DSyA9IDB4MEYsCj4gPj4+ID4g LSAgICAgVkVORE9SX1NQRUNJRklDX0FVRElPX0RBVEFfQkxPQ0sgPSAweDExLAo+ID4+PiA+IC0g ICAgIElORk9GUkFNRV9EQVRBX0JMT0NLID0gMHgyMCwKPiA+Pj4gPiAtfTsKPiA+Pj4gPiAtCj4g Pj4+ID4gLSNpZmRlZiBEUFVfRURJRF9ERUJVR19FTkFCTEUKPiA+Pj4gPiAtI2RlZmluZSBEUFVf RURJRF9ERUJVRyhmbXQsIGFyZ3MuLi4pICAgRFBVX0VSUk9SKGZtdCwgIyNhcmdzKQo+ID4+PiA+ IC0jZWxzZQo+ID4+PiA+IC0jZGVmaW5lIERQVV9FRElEX0RFQlVHKGZtdCwgYXJncy4uLikgICBE UFVfREVCVUcoZm10LCAjI2FyZ3MpCj4gPj4+ID4gLSNlbmRpZgo+ID4+PiA+IC0KPiA+Pj4gPiAt LyoKPiA+Pj4gPiAtICogc3RydWN0IGhkbWlfZWRpZF9oZHJfZGF0YSAtIEhEUiBTdGF0aWMgTWV0 YWRhdGEKPiA+Pj4gPiAtICogQGVvdGY6IEVsZWN0cm8tT3B0aWNhbCBUcmFuc2ZlciBGdW5jdGlv bgo+ID4+PiA+IC0gKiBAbWV0YWRhdGFfdHlwZV9vbmU6IFN0YXRpYyBNZXRhZGF0YSBUeXBlIDEg c3VwcG9ydAo+ID4+PiA+IC0gKiBAbWF4X2x1bWluYW5jZTogRGVzaXJlZCBDb250ZW50IE1heGlt dW0gTHVtaW5hbmNlCj4gPj4+ID4gLSAqIEBhdmdfbHVtaW5hbmNlOiBEZXNpcmVkIENvbnRlbnQg RnJhbWUtYXZlcmFnZSBMdW1pbmFuY2UKPiA+Pj4gPiAtICogQG1pbl9sdW1pbmFuY2U6IERlc2ly ZWQgQ29udGVudCBNaW5pbXVtIEx1bWluYW5jZQo+ID4+PiA+IC0gKi8KPiA+Pj4gPiAtc3RydWN0 IGRwdV9lZGlkX2hkcl9kYXRhIHsKPiA+Pj4gPiAtICAgICB1MzIgZW90ZjsKPiA+Pj4gPiAtICAg ICBib29sIG1ldGFkYXRhX3R5cGVfb25lOwo+ID4+PiA+IC0gICAgIHUzMiBtYXhfbHVtaW5hbmNl Owo+ID4+PiA+IC0gICAgIHUzMiBhdmdfbHVtaW5hbmNlOwo+ID4+PiA+IC0gICAgIHUzMiBtaW5f bHVtaW5hbmNlOwo+ID4+PiA+IC19Owo+ID4+PiA+IC0KPiA+Pj4gPiAtc3RydWN0IGRwdV9lZGlk X3NpbmtfY2FwcyB7Cj4gPj4+ID4gLSAgICAgdTMyIG1heF9wY2xrX2luX2h6Owo+ID4+PiA+IC0g ICAgIGJvb2wgc2NkY19wcmVzZW50Owo+ID4+PiA+IC0gICAgIGJvb2wgc2NyYW1ibGVfc3VwcG9y dDsgLyogc2NyYW1ibGUgc3VwcG9ydCBmb3IgbGVzcyB0aGFuIDM0ME1jc2MKPiA+Pj4gPiAqLwo+ ID4+PiA+IC0gICAgIGJvb2wgcmVhZF9yZXFfc3VwcG9ydDsKPiA+Pj4gPiAtICAgICBib29sIG9z ZF9kaXNwYXJpdHk7Cj4gPj4+ID4gLSAgICAgYm9vbCBkdWFsX3ZpZXdfc3VwcG9ydDsKPiA+Pj4g PiAtICAgICBib29sIGluZF92aWV3X3N1cHBvcnQ7Cj4gPj4+ID4gLX07Cj4gPj4+ID4gLQo+ID4+ PiA+IC1zdHJ1Y3QgZHB1X2VkaWRfY3RybCB7Cj4gPj4+ID4gLSAgICAgc3RydWN0IGVkaWQgKmVk aWQ7Cj4gPj4+ID4gLSAgICAgdTggcHRfc2Nhbl9pbmZvOwo+ID4+PiA+IC0gICAgIHU4IGl0X3Nj YW5faW5mbzsKPiA+Pj4gPiAtICAgICB1OCBjZV9zY2FuX2luZm87Cj4gPj4+ID4gLSAgICAgdTgg YXVkaW9fZGF0YV9ibG9ja1tNQVhfTlVNQkVSX0FEQiAqIE1BWF9BVURJT19EQVRBX0JMT0NLX1NJ WkVdOwo+ID4+PiA+IC0gICAgIGludCBhZGJfc2l6ZTsKPiA+Pj4gPiAtICAgICB1OCBzcGtyX2Fs bG9jX2RhdGFfYmxvY2tbTUFYX1NQS1JfQUxMT0NfREFUQV9CTE9DS19TSVpFXTsKPiA+Pj4gPiAt ICAgICBpbnQgc2FkYl9zaXplOwo+ID4+PiA+IC0gICAgIGJvb2wgaGRyX3N1cHBvcnRlZDsKPiA+ Pj4gPiAtICAgICBjaGFyIHZlbmRvcl9pZFtFRElEX1ZFTkRPUl9JRF9TSVpFXTsKPiA+Pj4gPiAt ICAgICBzdHJ1Y3QgZHB1X2VkaWRfc2lua19jYXBzIHNpbmtfY2FwczsKPiA+Pj4gPiAtICAgICBz dHJ1Y3QgZHB1X2VkaWRfaGRyX2RhdGEgaGRyX2RhdGE7Cj4gPj4+ID4gLX07Cj4gPj4+ID4gLQo+ ID4+PiA+IC0vKioKPiA+Pj4gPiAtICogZHB1X2VkaWRfaW5pdCgpIC0gaW5pdCBlZGlkIHN0cnVj dHVyZS4KPiA+Pj4gPiAtICogQGVkaWRfY3RybDogICAgIEhhbmRsZSB0byB0aGUgZWRpZF9jdHJs IHN0cnVjdHVyZS4KPiA+Pj4gPiAtICogUmV0dXJuOiBoYW5kbGUgdG8gZHB1X2VkaWRfY3RybCBm b3IgdGhlIGNsaWVudC4KPiA+Pj4gPiAtICovCj4gPj4+ID4gLXN0cnVjdCBkcHVfZWRpZF9jdHJs ICpkcHVfZWRpZF9pbml0KHZvaWQpOwo+ID4+PiA+IC0KPiA+Pj4gPiAtLyoqCj4gPj4+ID4gLSAq IGRwdV9lZGlkX2RlaW5pdCgpIC0gZGVpbml0IGVkaWQgc3RydWN0dXJlLgo+ID4+PiA+IC0gKiBA ZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+ID4+PiA+ IC0gKgo+ID4+PiA+IC0gKiBSZXR1cm46IHZvaWQuCj4gPj4+ID4gLSAqLwo+ID4+PiA+IC12b2lk IGRwdV9lZGlkX2RlaW5pdCh2b2lkICoqZWRpZF9jdHJsKTsKPiA+Pj4gPiAtCj4gPj4+ID4gLS8q Kgo+ID4+PiA+IC0gKiBkcHVfZ2V0X2VkaWQoKSAtIGdldCBlZGlkIGluZm8uCj4gPj4+ID4gLSAq IEBjb25uZWN0b3I6ICAgSGFuZGxlIHRvIHRoZSBkcm1fY29ubmVjdG9yLgo+ID4+PiA+IC0gKiBA YWRhcHRlcjogICAgIGhhbmRsZSB0byBpMmMgYWRhcHRlciBmb3IgRERDIHJlYWQKPiA+Pj4gPiAt ICogQGVkaWRfY3RybDogICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCj4gPj4+ ID4gLSAqCj4gPj4+ID4gLSAqIFJldHVybjogdm9pZC4KPiA+Pj4gPiAtICovCj4gPj4+ID4gLXZv aWQgZHB1X2dldF9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPj4+ID4g LXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKPiA+Pj4gPiAtdm9pZCAqKmVkaWRfY3RybCk7 Cj4gPj4+ID4gLQo+ID4+PiA+IC0vKioKPiA+Pj4gPiAtICogZHB1X2ZyZWVfZWRpZCgpIC0gZnJl ZSBlZGlkIHN0cnVjdHVyZS4KPiA+Pj4gPiAtICogQGVkaWRfY3RybDogICAgIEhhbmRsZSB0byB0 aGUgZWRpZF9jdHJsIHN0cnVjdHVyZS4KPiA+Pj4gPiAtICoKPiA+Pj4gPiAtICogUmV0dXJuOiB2 b2lkLgo+ID4+PiA+IC0gKi8KPiA+Pj4gPiAtdm9pZCBkcHVfZnJlZV9lZGlkKHZvaWQgKiplZGlk X2N0cmwpOwo+ID4+PiA+IC0KPiA+Pj4gPiAtLyoqCj4gPj4+ID4gLSAqIGRwdV9kZXRlY3RfaGRt aV9tb25pdG9yKCkgLSBkZXRlY3QgSERNSSBtb2RlLgo+ID4+PiA+IC0gKiBAZWRpZF9jdHJsOiAg ICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgo+ID4+PiA+IC0gKgo+ID4+PiA+ IC0gKiBSZXR1cm46IGVycm9yIGNvZGUuCj4gPj4+ID4gLSAqLwo+ID4+PiA+IC1ib29sIGRwdV9k ZXRlY3RfaGRtaV9tb25pdG9yKHZvaWQgKmVkaWRfY3RybCk7Cj4gPj4+ID4gLQo+ID4+PiA+IC0v KioKPiA+Pj4gPiAtICogZHB1X2dldF9zaW5rX2JwYygpIC0gcmV0dXJuIHRoZSBicGMgb2Ygc2lu ayBkZXZpY2UuCj4gPj4+ID4gLSAqIEBlZGlkX2N0cmw6ICAgICBIYW5kbGUgdG8gdGhlIGVkaWRf Y3RybCBzdHJ1Y3R1cmUuCj4gPj4+ID4gLSAqCj4gPj4+ID4gLSAqIFJldHVybjogYnBjIHN1cHBv cnRlZCBieSB0aGUgc2luay4KPiA+Pj4gPiAtICovCj4gPj4+ID4gLXUzMiBkcHVfZ2V0X3Npbmtf YnBjKHZvaWQgKmVkaWRfY3RybCk7Cj4gPj4+ID4gLQo+ID4+PiA+IC0vKioKPiA+Pj4gPiAtICog ZHB1X2dldF9lZGlkX2NoZWNrc3VtKCkgLSByZXR1cm4gdGhlIGNoZWNrc3VtIG9mIGxhc3QgYmxv Y2sgb2YKPiA+Pj4gPiBFRElELgo+ID4+PiA+IC0gKiBAaW5wdXQ6ICAgICBIYW5kbGUgdG8gdGhl IGVkaWRfY3RybCBzdHJ1Y3R1cmUuCj4gPj4+ID4gLSAqCj4gPj4+ID4gLSAqIFJldHVybjogY2hl Y2tzdW0gb2YgdGhlIGxhc3QgRURJRCBibG9jay4KPiA+Pj4gPiAtICovCj4gPj4+ID4gLXU4IGRw dV9nZXRfZWRpZF9jaGVja3N1bSh2b2lkICppbnB1dCk7Cj4gPj4+ID4gLQo+ID4+PiA+IC0vKioK PiA+Pj4gPiAtICogX2RwdV9lZGlkX3VwZGF0ZV9tb2RlcygpIC0gcG9wdWxhdGUgRURJRCBtb2Rl cy4KPiA+Pj4gPiAtICogQGVkaWRfY3RybDogICAgIEhhbmRsZSB0byB0aGUgZWRpZF9jdHJsIHN0 cnVjdHVyZS4KPiA+Pj4gPiAtICoKPiA+Pj4gPiAtICogUmV0dXJuOiBlcnJvciBjb2RlLgo+ID4+ PiA+IC0gKi8KPiA+Pj4gPiAtaW50IF9kcHVfZWRpZF91cGRhdGVfbW9kZXMoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKPiA+Pj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICplZGlkX2N0cmwpOwo+ID4+PiA+IC0KPiA+ Pj4gPiAtI2VuZGlmIC8qIF9EUFVfRURJRF9QQVJTRVJfSF8gKi8KPiA+Pj4gPiAtCgotLSAKU2Vh biBQYXVsLCBTb2Z0d2FyZSBFbmdpbmVlciwgR29vZ2xlIC8gQ2hyb21pdW0gT1MKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcg bGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==