From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH v6 3/6] drm/dp_mst: Start tracking per-port VCPI allocations Date: Wed, 28 Nov 2018 13:48:23 -0500 Message-ID: <7b3affe574f9968d6b9a44f34cc22d227ff3b99c.camel@redhat.com> References: <20181116005008.7243-1-lyude@redhat.com> <20181116005008.7243-4-lyude@redhat.com> <20181126210421.GQ4266@phenom.ffwll.local> <20181126212250.GS4266@phenom.ffwll.local> <8fe9a5708b2cafc74635688848ee082e54f739d5.camel@redhat.com> <20181127194452.GE4266@phenom.ffwll.local> <20181128081708.GG4266@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181128081708.GG4266-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Daniel Vetter Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAyMDE4LTExLTI4IGF0IDA5OjE3ICswMTAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ IE9uIFR1ZSwgTm92IDI3LCAyMDE4IGF0IDA4OjQ0OjE0UE0gLTA1MDAsIEx5dWRlIFBhdWwgd3Jv dGU6Cj4gPiBPbiBUdWUsIDIwMTgtMTEtMjcgYXQgMjA6NDQgKzAxMDAsIERhbmllbCBWZXR0ZXIg d3JvdGU6Cj4gPiA+IE9uIFR1ZSwgTm92IDI3LCAyMDE4IGF0IDEyOjQ4OjU5UE0gLTA1MDAsIEx5 dWRlIFBhdWwgd3JvdGU6Cj4gPiA+ID4gT24gTW9uLCAyMDE4LTExLTI2IGF0IDIyOjIyICswMTAw LCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ID4gPiA+ID4gT24gTW9uLCBOb3YgMjYsIDIwMTggYXQg MTA6MDQ6MjFQTSArMDEwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+ID4gPiA+ID4gT24gVGh1 LCBOb3YgMTUsIDIwMTggYXQgMDc6NTA6MDVQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90ZToKPiA+ ID4gPiA+ID4gPiBUaGVyZSBoYXMgYmVlbiBhIFRPRE8gd2FpdGluZyBmb3IgcXVpdGUgYSBsb25n IHRpbWUgaW4KPiA+ID4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5LmM6Cj4gPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+ID4gCS8qIFdlIGNhbm5vdCByZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Ns b3RzIHRvIHVwZGF0ZQo+ID4gPiA+ID4gPiA+IAkgKiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xv dHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZgo+ID4gPiA+ID4gPiA+IHRoZSBwYXJlbnQK PiA+ID4gPiA+ID4gPiAJICogYnJhbmNoIGRldmljZSB3YXMgdW5wbHVnZ2VkLiBUaGlzIHNob3Vs ZCBiZSBmaXhlZCBieQo+ID4gPiA+ID4gPiA+IHRyYWNraW5nCj4gPiA+ID4gPiA+ID4gCSAqIHBl ci1wb3J0IHNsb3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlCj4gPiA+ ID4gPiA+ID4gaW5zdGVhZCBvZgo+ID4gPiA+ID4gPiA+IAkgKiBkZXBlbmRpbmcgb24gdGhlIGNh bGxlciB0byB0ZWxsIHVzIGhvdyBtYW55IHNsb3RzIHRvCj4gPiA+ID4gPiA+ID4gcmVsZWFzZS4K PiA+ID4gPiA+ID4gPiAJICovCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gVGhhdCdzIG5v dCB0aGUgb25seSByZWFzb24gd2Ugc2hvdWxkIGZpeCB0aGlzOiBmb3JjaW5nIHRoZQo+ID4gPiA+ ID4gPiA+IGRyaXZlciB0bwo+ID4gPiA+ID4gPiA+IHRyYWNrIHRoZSBWQ1BJIGFsbG9jYXRpb25z IHRocm91Z2hvdXQgYSBzdGF0ZSdzIGF0b21pYyBjaGVjayBpcwo+ID4gPiA+ID4gPiA+IGVycm9y IHByb25lLCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgZXh0cmEgY2FyZSBoYXMgdG8gYmUgdGFrZW4K PiA+ID4gPiA+ID4gPiB3aXRoCj4gPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+ID4gb3JkZXIg dGhhdCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIGFuZAo+ID4gPiA+ID4gPiA+IGRy bV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgYXJlIGNhbGxlZCBpbiBpbiBvcmRlciB0 bwo+ID4gPiA+ID4gPiA+IGVuc3VyZQo+ID4gPiA+ID4gPiA+IGlkZW1wb3RlbmN5LiBDdXJyZW50 bHkgdGhlIG9ubHkgZHJpdmVyIGFjdHVhbGx5IHVzaW5nIHRoZXNlCj4gPiA+ID4gPiA+ID4gaGVs cGVycywKPiA+ID4gPiA+ID4gPiBpOTE1LCBkb2Vzbid0IGV2ZW4gZG8gdGhpcyBjb3JyZWN0bHk6 IG11bHRpcGxlIC0+YmVzdF9lbmNvZGVyKCkKPiA+ID4gPiA+ID4gPiBjaGVja3MKPiA+ID4gPiA+ ID4gPiB3aXRoIGk5MTUncyBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdvdWxkIG5vdCBiZSBpZGVt cG90ZW50IGFuZAo+ID4gPiA+ID4gPiA+IHdvdWxkCj4gPiA+ID4gPiA+ID4gb3Zlci1hbGxvY2F0 ZSBWQ1BJIHNsb3RzLCBzb21ldGhpbmcgSSBsZWFybmVkIHRyeWluZyB0bwo+ID4gPiA+ID4gPiA+ IGltcGxlbWVudAo+ID4gPiA+ID4gPiA+IGZhbGxiYWNrIHJldHJhaW5pbmcgaW4gTVNULgo+ID4g PiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IFNvOiBzaW1wbGlmeSB0aGlzIHdob2xlIG1lc3MsIGFu ZCB0ZWFjaAo+ID4gPiA+ID4gPiA+IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiA+ ID4gPiA+ID4gPiBhbmQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSB0byB0cmFj ayB0aGUgVkNQSQo+ID4gPiA+ID4gPiA+IGFsbG9jYXRpb25zCj4gPiA+ID4gPiA+ID4gZm9yCj4g PiA+ID4gPiA+ID4gZWFjaCBwb3J0LiBUaGlzIGFsbG93cyB1cyB0byBlbnN1cmUgaWRlbXBvdGVu Y3kgd2l0aG91dCBoYXZpbmcKPiA+ID4gPiA+ID4gPiB0bwo+ID4gPiA+ID4gPiA+IHJlbHkKPiA+ ID4gPiA+ID4gPiBvbiB0aGUgZHJpdmVyIGFzIG11Y2guIEFkZGl0aW9uYWxseTogdGhlIGRyaXZl ciBkb2Vzbid0IG5lZWQgdG8KPiA+ID4gPiA+ID4gPiBkbwo+ID4gPiA+ID4gPiA+IGFueQo+ID4g PiA+ID4gPiA+IGtpbmQgb2YgVkNQSSBzbG90IHRyYWNraW5nIGFueW1vcmUgaWYgaXQgZG9lc24n dCBuZWVkIGl0IGZvcgo+ID4gPiA+ID4gPiA+IGl0J3MKPiA+ID4gPiA+ID4gPiBvd24KPiA+ID4g PiA+ID4gPiBpbnRlcm5hbCBzdGF0ZS4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBBZGRp dGlvbmFsbHk7IHRoaXMgYWRkcyBhIG5ldyBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpIGhlbHBl cgo+ID4gPiA+ID4gPiA+IHdoaWNoCj4gPiA+ID4gPiA+ID4gbXVzdCBiZSB1c2VkIGJ5IGF0b21p YyBkcml2ZXJzIHRvIHBlcmZvcm0gdmFsaWRpdHkgY2hlY2tzIGZvcgo+ID4gPiA+ID4gPiA+IHRo ZQo+ID4gPiA+ID4gPiA+IG5ldwo+ID4gPiA+ID4gPiA+IFZDUEkgYWxsb2NhdGlvbnMgaW5jdXJy ZWQgYnkgYSBzdGF0ZS4KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBBbHNvOiB1cGRhdGUg dGhlIGRvY3VtZW50YXRpb24gYW5kIG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoYXQKPiA+ID4gPiA+ ID4gPiB0aGVzZQo+ID4gPiA+ID4gPiA+IC9tdXN0LyBiZSBjYWxsZWQgYnkgL2FsbC8gYXRvbWlj IGRyaXZlcnMgc3VwcG9ydGluZyBNU1QuCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gQ2hh bmdlcyBzaW5jZSB2NjoKPiA+ID4gPiA+ID4gPiAgLSBLZWVwIGEga3JlZiB0byBhbGwgb2YgdGhl IHBvcnRzIHdlIGhhdmUgYWxsb2NhdGlvbnMgb24uIFRoaXMKPiA+ID4gPiA+ID4gPiByZXF1aXJl ZAo+ID4gPiA+ID4gPiA+ICAgIGEgZ29vZCBiaXQgb2YgY2hhbmdpbmcgdG8gd2hlbiB3ZSBjYWxs Cj4gPiA+ID4gPiA+ID4gZHJtX2RwX2ZpbmRfdmNwaV9zbG90cygpLAo+ID4gPiA+ID4gPiA+ICAg IG1haW5seSB0aGF0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugb25seSByZWRvIFZDUEkKPiA+ ID4gPiA+ID4gPiBhbGxvY2F0aW9ucwo+ID4gPiA+ID4gPiA+IG9uCj4gPiA+ID4gPiA+ID4gICAg YWN0dWFsIG1vZGUgb3IgQ1JUQyBjaGFuZ2VzLCBub3QgY3J0Y19zdGF0ZS0+YWN0aXZlIGNoYW5n ZXMuCj4gPiA+ID4gPiA+ID4gICAgQWRkaXRpb25hbGx5LCB3ZSBubyBsb25nZXIgdGFrZSB0aGUg cmVnaXN0cmF0aW9uIG9mIHRoZSBEUk0KPiA+ID4gPiA+ID4gPiBjb25uZWN0b3IKPiA+ID4gPiA+ ID4gPiAgICBmb3IgZWFjaCBwb3J0IGludG8gYWNjb3VudCBiZWNhdXNlIHNvIGxvbmcgYXMgd2Ug aGF2ZSBhIGtyZWYKPiA+ID4gPiA+ID4gPiB0bwo+ID4gPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4g PiA+ICAgIHBvcnQgaW4gdGhlIG5ldyBvciBwcmV2aW91cyBhdG9taWMgc3RhdGUsIHRoZSBjb25u ZWN0b3Igd2lsbAo+ID4gPiA+ID4gPiA+IHN0YXkKPiA+ID4gPiA+ID4gPiAgICByZWdpc3RlcmVk Lgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gSSB3cml0ZSBhbiBlbnRpcmUgcGlsZSBvZiBzbWFs bCBuaXRwaXRzIChzdGlsbCBpbmNsdWRlZCBtb3N0IG9mCj4gPiA+ID4gPiA+IHRoZW0KPiA+ID4g PiA+ID4gYmVsb3cpLCB1bnRpbCBJIHJlYWxpemVkIHRoaXMgaGVyZSB3b250IHdvcmsuIERlbGF5 aW5nIHRoZSBjYWxsIHRvCj4gPiA+ID4gPiA+IGRlc3Ryb3kKPiA+ID4gPiA+ID4gdGhlIGNvbm5l Y3RvciAod2VsbCwgdW5yZWdpc3RlciBpdCByZWFsbHkpIHdyZWFrcyB0aGUgZGVzaWduIHdlJ3Zl Cj4gPiA+ID4gPiA+IGNvbWUgdXAKPiA+ID4gPiA+ID4gd2l0aCB0aHVzIGZhciwgcmVzdWx0aW5n IGluIG1vc3Qgb2YgbXkgY29tbWVudHMgaGVyZS4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IElu c3RlYWQsIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGRlbGF5IHRoZSBrZnJlZShwb3J0KSBhdCB0aGUg Ym90dG9tCj4gPiA+ID4gPiA+IG9mCj4gPiA+ID4gPiA+IGRybV9kcF9kZXN0cm95X3BvcnQoKS4g VGhlIHZjcGkgYWxsb2NhdGlvbiBzdHJ1Y3R1cmUgX29ubHlfIG5lZWRzCj4gPiA+ID4gPiA+IHRo ZQo+ID4gPiA+ID4gPiBwb2ludGVyIHZhbHVlIHRvIHN0YXkgdmFsaWQsIGFzIGEgbG9va3VwIGtl eS4gSXQgZG9lc24ndCBjYXJlIGF0Cj4gPiA+ID4gPiA+IGFsbAo+ID4gPiA+ID4gPiBhYm91dAo+ ID4gPiA+ID4gPiBhbnl0aGluZyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlcmUuIFNvIHRoZSBvbmx5 IHRoaW5nIHdlIG5lZWQgdG8KPiA+ID4gPiA+ID4gZGVsYXkKPiA+ID4gPiA+ID4gaXMKPiA+ID4g PiA+ID4gdGhlIGtmcmVlLiBJIHRoaW5rIHRoZSBzaW1wbGVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlz IGlzIHRvIGFkZCBhCj4gPiA+ID4gPiA+IDJuZAo+ID4gPiA+ID4gPiBrcmVmCj4gPiA+ID4gPiA+ IChwb3J0LT5rZnJlZV9yZWYgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCksIHdpdGggb24gcmVmZXJl bmNlIGhlbGQKPiA+ID4gPiA+ID4gYnkKPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+IHBvcnQg aXRzZWxmIChyZWxlYXNlZCBpbiBkcm1fZHBfZGVzdHJveV9wb3J0KSwgYW5kIHRoZSBvdGhlciBv bmUKPiA+ID4gPiA+ID4gaGVsZAo+ID4gPiA+ID4gPiBhcy1uZWVkZWQgYnkgdGhlIHZjcGkgYWxs b2NhdGlvbiBsaXN0cy4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IEkgdGhpbmsgaWYgd2UgZ28g d2l0aCB0aGlzIGRlc2lnbiBpbnN0ZWFkIG9mIHJldHJvZml0dGluZyBhCj4gPiA+ID4gPiA+IHNl bWFudGljCj4gPiA+ID4gPiA+IGNoYW5nZSBvZiB0aGUgcG9ydCBsaWZldGltZSBpdHNlbGYsIGFs bCB0aGUgY29tcGxpY2F0aW9ucyBJCj4gPiA+ID4gPiA+IGNvbXBsYWluCj4gPiA+ID4gPiA+IGFi b3V0Cj4gPiA+ID4gPiA+IGJlbG93IHNob3VsZCBkaXNhcHBlYXIuCj4gPiA+ID4gPiAKPiA+ID4g PiA+IEluIHRoZSBhYm92ZSBJIG1lYW50IGRybV9kcF9kZXN0cm95X3BvcnQgb3IKPiA+ID4gPiA+ IGRybV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBBc2lk ZTogSSB0aGluayBjcmVhdGluZyBhIGtyZWYgZm9yIHRoZSBmaW5hbCBrZnJlZSB3b3VsZCBhbHNv IHNvbHZlCj4gPiA+ID4gPiBhCj4gPiA+ID4gPiBidW5jaCBvZiBvdGhlciBpc3N1ZXMgaW4gYSBt dWNoIG5lYXRlciB3YXk6IEluCj4gPiA+ID4gPiAKPiA+ID4gPiA+IGNvbW1pdCBmMDM4YzViOTlm YzEzMzJmNTU4YjQ5NWQxMzZkNGY0MzNlZTY1Y2FhCj4gPiA+ID4gPiBBdXRob3I6IEx5dWRlIFBh dWwgPGx5dWRlQHJlZGhhdC5jb20+Cj4gPiA+ID4gPiBEYXRlOiAgIFR1ZSBOb3YgMTMgMTc6NDY6 MTQgMjAxOCAtMDUwMAo+ID4gPiA+ID4gCj4gPiA+ID4gPiAgICAgZHJtL2RwX21zdDogU2tpcCB2 YWxpZGF0aW5nIHBvcnRzIGR1cmluZyBkZXN0cnVjdGlvbiwganVzdCByZWYKPiA+ID4gPiA+IAo+ ID4gPiA+ID4gd2UgY291bGQgdXNlIHRoYXQga2ZyZWUgcmVmZXJlbmNlIHRvIG1ha2Ugc3VyZSB0 aGUgcG9ydCBwb2ludGVyIGlzCj4gPiA+ID4gPiBhbGl2ZS4KPiA+ID4gPiA+IFRoaXMgb2YgY291 cnNlIG1lYW5zIHRoYXQgZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKCkgd291bGQgYWxzbwo+ ID4gPiA+ID4gbmVlZAo+ID4gPiA+ID4gdG8KPiA+ID4gPiA+IHVzZSB0aGUga2ZyZWUgcmVmZXJl bmNlIGZvciB0aGUgdmNwaSBhbGxvY2F0aW9ucy4gQW5kIHByb2JhYmx5Cj4gPiA+ID4gPiBldmVy eXdoZXJlCj4gPiA+ID4gPiBlbHNlIChlLmcuIGluIHlvdXIgbm91dmVhdSBzZXJpZXMgZm9yIHBh eWxvYWQgaW5mb3JtYXRpb24pLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBUaGF0IHdvdWxkIGdpdmUg dXMgYSB2ZXJ5IGNsZWFyIHNlcGFyYXRpb24gb3ZlcmFsbCBiZXR3ZWVuICJwb3J0IGNhbgo+ID4g PiA+ID4gc3RpbGwKPiA+ID4gPiA+IGJlIHVzZWQgYmVjYXVzZSBpdCdzIG5vdCB5ZXQgdW5wbHVn Z2VkIiB2cy4gInBvcnQgb25seSBoYW5ncyBhcm91bmQKPiA+ID4gPiA+IGJlY2F1c2UgYSBidW5j aCBvZiB2Y3BpIGFsbG9jYXRpb25zIGFuZCBvdGhlciBwYXlsb2FkIHRoaW5ncwo+ID4gPiA+ID4g dXBzdHJlYW0gb2YKPiA+ID4gPiA+IHRoZSBwb3J0IG1pZ2h0IHN0aWxsIG5lZWQgdGhlIHBvcnQg bG9va3VwIGtleSB0byBmcmVlIHJlc291cmNlcyIuCj4gPiA+ID4gPiBJbnN0ZWFkCj4gPiA+ID4g PiBvZiBhZ2FpbiBzcHJpbmtsaW5nIGNvbXBsaWNhdGVkIGNvbmRpdGlvbnMgYW5kIG1hZ2ljIHRy aWNrcyBhbGwgb3Zlcgo+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiBjb2RlIHRvIGZpZ3VyZSBvdXQg d2hldGhlIHdlIHNob3VsZCBhbGxvdyB0aGUgZ2V0X3ZhbGlkYXRlX3BvcnQgdG8KPiA+ID4gPiA+ IHN1Y2NlZWQKPiA+ID4gPiA+IG9yIG5vdCwgb3IgdGhlIG1vZGVzZXQgdG8gc3VjY2VlZCBvciBu b3QuCj4gPiA+ID4gCj4gPiA+ID4gbWhtLCBJJ3ZlIGJlZW4gZXhwZXJpbWVudGluZyB3aXRoIHRo aXMgYW5kIEkgdGhpbmsgSSBhZ3JlZSB0aGlzIGlzCj4gPiA+ID4gZGVmaW5pdGVseQo+ID4gPiA+ IHRoZSByaWdodCBzb2x1dGlvbiB0byBnbyB3aXRoLiBJdCdsbCBlbmQgdXAgZGVjb21wbGljYXRp bmcgYSBsb3Qgb2YKPiA+ID4gPiB0aGlzCj4gPiA+ID4gOikKPiA+ID4gCj4gPiA+IFNpbmNlIGl0 IGxvb2tzIGxpa2Ugd2UnbGwgdXNlIHRoZSBrZnJlZV9yZWYgcXVpdGUgYSBiaXQsIHdyYXBwZXJz IGZvcgo+ID4gPiB0aGF0Cj4gPiA+IHdvdWxkIGJlIHVzZWZ1bC4gU3RpbGwgbm90IHN1cmUgd2hh dCB0byBjYWxsIHRob3NlLCBiZXN0IEkgY291bGQgY29tZSB1cAo+ID4gPiB3aXRoIGlzIGRwX3Bv cnRfbWFsbG9jX2dldC9wdXQuIFBsdXMgYSBjb21tZW50IGV4cGxhaW5pbmcgd2hhdCBpdCBkb2Vz Lgo+ID4gPiBJdCdzIGdvaW5nIHRvIGJlIGEgYml0IG9mIHd0Zi1pcy10aGlzIG5vIG1hdHRlciB3 aGF0IDotLwo+ID4gPiAtRGFuaWVsCj4gPiAKPiA+IFdlIGNvdWxkIGRvIHRoaXMgdGhlIG90aGVy IHdheSBhcm91bmQgc28gaXQgbG9va3MgbGlrZSB0aGlzIG1heWJlCj4gPiAKPiA+IHN0cnVjdCBr cmVmOyAvKiBtYW5hZ2VzIGtmcmVlKCkgKi8KPiA+IHN0cnVjdCB0b3BvbG9neV9rcmVmOyAvKiBj b3JyZXNvbmRzIHRvIGxpZmV0aW1lIGluIHRvcG9sb2d5ICovCj4gPiAKPiA+IFRoZW4gb25seSBl eHBvc2UgZnVuY3Rpb25zIGZvciB0aGUgbm9ybWFsIGtyZWYgdG8gZHJpdmVycywgc28gdGhhdCBh bnkKPiA+IHBvc3NpYmxlIGNvbmZ1c2lvbiBpcyBzdGlsbCBsaW1pdGVkIHRvIGRybV9kcF9tc3Rf dG9wb2xvZ3kuYwo+IAo+IEkgbGlrZSB0aGlzIGJpa2VzaGVkIGEgbG90LiBTaW5jZSB3ZSBuZWVk IGEgYnVuY2ggb2YgdGhlIHBsYWluCj4ga3JlZl9nZXQvcHV0IGludGVybmFsbHksIHByb2JhYmx5 IHN0aWxsIGdvb2QgdG8gaGF2ZSBhIHdyYXBwZXIuIEZvciB0aGF0Cj4gdGhlIHBvcnRfbWFsbG9j X2dldC9wdXQoKSBzdGlsbCBzb3VuZHMgZ29vZCB0byBtZSAtIHBvcnRfa2ZyZWVfZ2V0L3B1dAo+ IHNvdW5kcyBjb25mdXNpbmcsIHNpbmNlIGl0J3Mgbm90IHRoZSBrZnJlZSB3ZSdyZSByZWZjb3Vu dGluZywgYnV0IHRoZQo+IG1lbW9yeSBhbGxvY2F0aW9uLgo+IAo+IEFub3RoZXIgb3B0aW9uIHdv dWxkIGJlIHRvIGFkZCBfdG9wb2xvZ3kgdG8gdGhlIHB1YmxpYyBnZXQvcHV0IGZ1bmN0aW9ucywK PiBidXQgdGhhdCBtYWtlcyBmb3IgYSBmYWlybHkgbG9uZyBmdW5jdGlvbiBuYW1lIDotLwoKV2Vs bCBpZiB3ZSBleHBvc2VkIGdldC9wdXQgZnVuY3Rpb25zIGZvciB0aGlzIHB1YmxpY2FsbHksIEkn ZCBwcm9iYWJseSBqdXN0CmNhbGwgdGhlbSBkcm1fZHBfZ2V0X3BvcnQoKSBhbmQgZHJtX2RwX3B1 dF9wb3J0KCkgc2luY2UgaXQgd291bGRuJ3QgbWFrZSBzZW5zZQp0byBoYXZlIGRpZmZlcmVudGlh dGVkIG5hbWluZyBpZiB3ZSdyZSBvbmx5IGV4cG9zaW5nIG9uZSBvZiB0aGUga3JlZnMKcHVibGlj YWxseSAoZS5nLiB0aGUgbWFsbG9jIGtyZWYpLgoKQWxzbzogSSd2ZSBiZWVuIHRoaW5raW5nIGFi b3V0IHNob3J0ZW5pbmcgc29tZSBvZiB0aGUgbmFtZXMgb2YgdGhlIE1TVCBoZWxwZXIKZnVuY3Rp b25zIGZvciBhIHdoaWxlLiBJIGRvbid0IHRoaW5rIHdlIG5lZWQgdG8gc2F5IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyCmV2ZXJ5d2hlcmUgOikKCj4gLURhbmllbAo+IAo+ID4gPiA+ID4gLURhbmll bAo+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFBpbGVzIG9mIGNvbW1lbnRzIGJlbG93Lgo+ID4gPiA+ ID4gPiAKPiA+ID4gPiA+ID4gQ2hlZXJzLCBEYW5pZWwKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ ID4gIC0gVXNlIHRoZSBzbWFsbCBjaGFuZ2VzIHRvIGRybV9kcF9wdXRfcG9ydCgpIHRvIGFkZCBl dmVuIG1vcmUKPiA+ID4gPiA+ID4gPiBlcnJvcgo+ID4gPiA+ID4gPiA+ICAgIGNoZWNraW5nIHRv IG1ha2UgbWlzdXNhZ2Ugb2YgdGhlIGhlbHBlcnMgbW9yZSBvYnZpb3VzLiBJCj4gPiA+ID4gPiA+ ID4gYWRkZWQKPiA+ID4gPiA+ID4gPiB0aGlzCj4gPiA+ID4gPiA+ID4gICAgYWZ0ZXIgaGF2aW5n IHRvIGNoYXNlIGRvd24gdmFyaW91cyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zCj4gPiA+ID4g PiA+ID4gdGhhdAo+ID4gPiA+ID4gPiA+ICAgIHN0YXJ0ZWQgcG9wcGluZyB1cCBmcm9tIHRoZSBu ZXcgaGVscGVycyBzbyBubyBvbmUgZWxzZSBoYXMgdG8KPiA+ID4gPiA+ID4gPiAgICB0cm91Ymxl c2hvb3QgdGhhdC4KPiA+ID4gPiA+ID4gPiAgLSBNb3ZlIHNvbWUgYWNjaWRlbnRhbCBEUk1fREVC VUdfS01TKCkgY2FsbHMgdG8KPiA+ID4gPiA+ID4gPiBEUk1fREVCVUdfQVRPTUlDKCkKPiA+ID4g PiA+ID4gPiAgLSBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhZ2Fpbiwgbm90ZSB0aGF0IGZpbmQvcmVs ZWFzZSgpIHNob3VsZAo+ID4gPiA+ID4gPiA+IGJvdGgKPiA+ID4gPiA+ID4gPiBub3QKPiA+ID4g PiA+ID4gPiBiZQo+ID4gPiA+ID4gPiA+ICAgIGNhbGxlZCBvbiB0aGUgc2FtZSBwb3J0IGluIGEg c2luZ2xlIGF0b21pYyBjaGVjayBwaGFzZSAoYnV0Cj4gPiA+ID4gPiA+ID4gbXVsdGlwbGUKPiA+ ID4gPiA+ID4gPiAgICBjYWxscyB0byBvbmUgb3IgdGhlIG90aGVyIGlzIE9LKQo+ID4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiA+IENoYW5nZXMgc2luY2UgdjQ6Cj4gPiA+ID4gPiA+ID4gIC0gRG9u J3Qgc2tpcCB0aGUgYXRvbWljIGNoZWNrcyBmb3IgVkNQSSBhbGxvY2F0aW9ucyBpZiBubyBuZXcK PiA+ID4gPiA+ID4gPiBWQ1BJCj4gPiA+ID4gPiA+ID4gICAgYWxsb2NhdGlvbnMgaGFwcGVuIGlu IGEgc3RhdGUuIFRoaXMgbWFrZXMgdGhlIG5leHQgY2hhbmdlIEknbQo+ID4gPiA+ID4gPiA+IGFi b3V0Cj4gPiA+ID4gPiA+ID4gICAgdG8gbGlzdCBoZXJlIGEgbG90IGVhc2llciB0byBpbXBsZW1l bnQuCj4gPiA+ID4gPiA+ID4gIC0gRG9uJ3QgaWdub3JlIFZDUEkgYWxsb2NhdGlvbnMgb24gZGVz dHJveWVkIHBvcnRzLCBpbnN0ZWFkCj4gPiA+ID4gPiA+ID4gZW5zdXJlCj4gPiA+ID4gPiA+ID4g dGhhdAo+ID4gPiA+ID4gPiA+ICAgIHdoZW4gcG9ydHMgYXJlIGRlc3Ryb3llZCBhbmQgc3RpbGwg aGF2ZSBWQ1BJIGFsbG9jYXRpb25zIGluCj4gPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+ID4g ICAgdG9wb2xvZ3kgc3RhdGUsIHRoZSBvbmx5IHN0YXRlIGNoYW5nZXMgYWxsb3dlZCBhcmUgcmVs ZWFzaW5nCj4gPiA+ID4gPiA+ID4gc2FpZAo+ID4gPiA+ID4gPiA+ICAgIHBvcnRzJyBWQ1BJLiBU aGlzIHByZXZlbnRzIGEgc3RhdGUgd2l0aCBhIG1peCBvZiBWQ1BJCj4gPiA+ID4gPiA+ID4gYWxs b2NhdGlvbnMKPiA+ID4gPiA+ID4gPiAgICBmcm9tIGRlc3Ryb3llZCBwb3J0cywgYW5kIGFsbG9j YXRpb25zIGZyb20gdmFsaWQgcG9ydHMuCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gQ2hh bmdlcyBzaW5jZSB2MzoKPiA+ID4gPiA+ID4gPiAgLSBEb24ndCByZWxlYXNlIFZDUEkgYWxsb2Nh dGlvbnMgaW4gdGhlIHRvcG9sb2d5IHN0YXRlCj4gPiA+ID4gPiA+ID4gaW1tZWRpYXRlbHkKPiA+ ID4gPiA+ID4gPiBpbgo+ID4gPiA+ID4gPiA+ICAgIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3Bp X3Nsb3RzKCksIGluc3RlYWQgbWFyayB0aGVtIGFzIDAKPiA+ID4gPiA+ID4gPiBhbmQKPiA+ID4g PiA+ID4gPiBza2lwCj4gPiA+ID4gPiA+ID4gICAgb3ZlciB0aGVtIGluIGRybV9kcF9tc3RfZHVw bGljYXRlX3N0YXRlKCkuIFRoaXMgbWFrZXMgaXQgc28KPiA+ID4gPiA+ID4gPiAgICBkcm1fZHBf YXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGlzIHN0aWxsIGlkZW1wb3RlbnQgd2hpbGUKPiA+ ID4gPiA+ID4gPiBhbHNvCj4gPiA+ID4gPiA+ID4gICAgdGhyb3dpbmcgd2FybmluZ3MgaWYgdGhl IGRyaXZlciBtZXNzZXMgdXAgaXQncyBib29rIGtlZXBpbmcKPiA+ID4gPiA+ID4gPiBhbmQKPiA+ ID4gPiA+ID4gPiB0cmllcwo+ID4gPiA+ID4gPiA+ICAgIHRvIHJlbGVhc2UgVkNQSSBzbG90cyBv biBhIHBvcnQgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZS0KPiA+ID4gPiA+ID4gPiBleGlzdGlu Zwo+ID4gPiA+ID4gPiA+ICAgIFZDUEkgYWxsb2NhdGlvbiAtIGRhbnZldAo+ID4gPiA+ID4gPiA+ ICAtIENoYW5nZSBtc3Rfc3RhdGUvc3RhdGUgaW4gc29tZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8g Im1zdAo+ID4gPiA+ID4gPiA+IHN0YXRlIgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IENo YW5nZXMgc2luY2UgdjI6Cj4gPiA+ID4gPiA+ID4gIC0gVXNlIGttZW1kdXAoKSBmb3IgZHVwbGlj YXRpbmcgTVNUIHN0YXRlIC0gZGFudmV0Cj4gPiA+ID4gPiA+ID4gIC0gTW92ZSBwb3J0IHZhbGlk YXRpb24gb3V0IG9mIGR1cGxpY2F0ZSBzdGF0ZSBjYWxsYmFjayAtIGRhbnZldAo+ID4gPiA+ID4g PiA+ICAtIEhhbmRsZSBsb29waW5nIHRocm91Z2ggTVNUIHRvcG9sb2d5IHN0YXRlcyBpbgo+ID4g PiA+ID4gPiA+ICAgIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgc28gdGhlIGRyaXZlciBkb2Vz bid0IGhhdmUgdG8gZG8gaXQKPiA+ID4gPiA+ID4gPiAgLSBGaXggZG9jdW1lbnRhdGlvbiBpbiBk cm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gPiA+ID4gPiA+ID4gIC0gTW92ZSB0aGUg YXRvbWljIGNoZWNrIGZvciBlYWNoIGluZGl2aWR1YWwgdG9wb2xvZ3kgc3RhdGUgaW50bwo+ID4g PiA+ID4gPiA+IGl0J3MKPiA+ID4gPiA+ID4gPiAgICBvd24gZnVuY3Rpb24sIHJlZHVjZXMgaW5k ZW50aW5nCj4gPiA+ID4gPiA+ID4gIC0gRG9uJ3QgY29uc2lkZXIgInN0YWxlIiBNU1QgcG9ydHMg d2hlbiBjYWxjdWxhdGluZyB0aGUKPiA+ID4gPiA+ID4gPiBiYW5kd2lkdGgKPiA+ID4gPiA+ID4g PiAgICByZXF1aXJlbWVudHMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb3JpZ2luYWxseSB3ZSBy ZWxpZWQgb24KPiA+ID4gPiA+ID4gPiB0aGUKPiA+ID4gPiA+ID4gPiAgICBzdGF0ZSBkdXBsaWNh dGlvbiBmdW5jdGlvbnMgdG8gcHJ1bmUgYW55IHN0YWxlIHBvcnRzIGZyb20gdGhlCj4gPiA+ID4g PiA+ID4gbmV3Cj4gPiA+ID4gPiA+ID4gICAgc3RhdGUsIHdoaWNoIHdvdWxkIHByZXZlbnQgdXMg ZnJvbSBpbmNvcnJlY3RseSBjb25zaWRlcmluZwo+ID4gPiA+ID4gPiA+IHRoZWlyCj4gPiA+ID4g PiA+ID4gICAgYmFuZHdpZHRoIHJlcXVpcmVtZW50cyBhbG9uZ3NpZGUgbGVnaXRpbWF0ZSBuZXcg cGF5bG9hZHMuCj4gPiA+ID4gPiA+ID4gIC0gQWRkIGZ1bmN0aW9uIHJlZmVyZW5jZXMgaW4gZHJt X2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ID4gPiA+ID4gPiA+IC0KPiA+ID4gPiA+ ID4gPiBkYW52ZXQKPiA+ID4gPiA+ID4gPiAgLSBBbm5vdGF0ZSBhdG9taWMgVkNQSSBhbmQgYXRv bWljIGNoZWNrIGZ1bmN0aW9ucyB3aXRoCj4gPiA+ID4gPiA+ID4gX19tdXN0X2NoZWNrCj4gPiA+ ID4gPiA+ID4gICAgLSBkYW52ZXQKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBDaGFuZ2Vz IHNpbmNlIHYxOgo+ID4gPiA+ID4gPiA+ICAtIERvbid0IHVzZSB0aGUgbm93LXJlbW92ZWQgLT5h dG9taWNfY2hlY2soKSBmb3IgcHJpdmF0ZQo+ID4gPiA+ID4gPiA+IG9iamVjdHMKPiA+ID4gPiA+ ID4gPiBob29rLAo+ID4gPiA+ID4gPiA+ICAgIGp1c3QgZ2l2ZSBkcml2ZXJzIGEgZnVuY3Rpb24g dG8gY2FsbCB0aGVtc2VsdmVzCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gU2lnbmVkLW9m Zi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KPiA+ID4gPiA+ID4gPiBDYzogRGFu aWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiA+ID4gPiA+ID4gPiAtLS0KPiA+ ID4gPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYyB8IDI5NAo+ ID4gPiA+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrLS0tCj4gPiA+ID4gPiA+ID4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgfCAgIDQgKwo+ID4gPiA+ID4gPiA+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYyAgIHwgIDY0ICsrKy0tLQo+ID4g PiA+ID4gPiA+ICBpbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgIDI0ICsr LQo+ID4gPiA+ID4gPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDMxOSBpbnNlcnRpb25zKCspLCA2NyBk ZWxldGlvbnMoLSkKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ID4gPiA+ID4gPiA+IGIvZHJpdmVy cy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ID4gPiA+ID4gPiA+IGluZGV4IDAwZmJl N2EyNjk5ZC4uMTgzZDBlODMyY2VkIDEwMDY0NAo+ID4gPiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiA+ID4gPiA+ID4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiA+ID4gPiA+ID4gQEAgLTI2MTcsMjEg KzI2MTcsNDIgQEAgc3RhdGljIGludCBkcm1fZHBfaW5pdF92Y3BpKHN0cnVjdAo+ID4gPiA+ID4g PiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gPiA+ID4gIH0KPiA+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gPiAgLyoqCj4gPiA+ID4gPiA+ID4gLSAqIGRybV9kcF9hdG9t aWNfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIGFuZCBhZGQgdmNwaSBzbG90cyB0bwo+ID4gPiA+ ID4gPiA+IHRoZQo+ID4gPiA+ID4gPiA+IHN0YXRlCj4gPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9h dG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIGFuZCBhZGQgVkNQSSBzbG90cyB0bwo+ID4g PiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gPiA+IHN0YXRlCj4gPiA+ID4gPiA+ID4gICAqIEBzdGF0 ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQo+ID4gPiA+ID4gPiA+ICAgKiBAbWdyOiBNU1QgdG9wb2xv Z3kgbWFuYWdlciBmb3IgdGhlIHBvcnQKPiA+ID4gPiA+ID4gPiAgICogQHBvcnQ6IHBvcnQgdG8g ZmluZCB2Y3BpIHNsb3RzIGZvcgo+ID4gPiA+ID4gPiA+ICAgKiBAcGJuOiBiYW5kd2lkdGggcmVx dWlyZWQgZm9yIHRoZSBtb2RlIGluIFBCTgo+ID4gPiA+ID4gPiA+ICAgKgo+ID4gPiA+ID4gPiA+ IC0gKiBSRVRVUk5TOgo+ID4gPiA+ID4gPiA+IC0gKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWlj IHN0YXRlIGFzc2lnbmVkIGZvciB0aGlzIHBvcnQgb3IKPiA+ID4gPiA+ID4gPiBlcnJvcgo+ID4g PiA+ID4gPiA+ICsgKiBBbGxvY2F0ZXMgVkNQSSBzbG90cyB0byBAcG9ydCwgcmVwbGFjaW5nIGFu eSBwcmV2aW91cyBWQ1BJCj4gPiA+ID4gPiA+ID4gYWxsb2NhdGlvbnMgaXQKPiA+ID4gPiA+ID4g PiArICogbWF5IGhhdmUgaGFkLiBBbnkgYXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1Qg bXVzdCBjYWxsCj4gPiA+ID4gPiA+ID4gdGhpcwo+ID4gPiA+ID4gPiA+IGZ1bmN0aW9uCj4gPiA+ ID4gPiA+ID4gKyAqIGluIHRoZWlyICZkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MuYXRvbWljX2No ZWNrKCkgY2FsbGJhY2sKPiA+ID4gPiA+ID4gPiB0bwo+ID4gPiA+ID4gPiA+IGNoYW5nZQo+ID4g PiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gPiA+ICsgKiBjdXJyZW50IFZDUEkgYWxsb2NhdGlvbiBm b3IgdGhlIG5ldyBzdGF0ZSwgYnV0IG9ubHkgd2hlbgo+ID4gPiA+ID4gPiA+ICsgKiAmZHJtX2Ny dGNfc3RhdGUubW9kZV9jaGFuZ2VkIG9yCj4gPiA+ID4gPiA+ID4gJmRybV9jcnRjX3N0YXRlLmNv bm5lY3RvcnNfY2hhbmdlZAo+ID4gPiA+ID4gPiA+IGlzIHNldAo+ID4gPiA+ID4gPiA+ICsgKiB0 byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgdGhhdAo+ ID4gPiA+ID4gPiA+IHN0aWxsCj4gPiA+ID4gPiA+ID4gdXNlCj4gPiA+ID4gPiA+ID4gdGhlCj4g PiA+ID4gPiA+ID4gKyAqIGxlZ2FjeSBtb2Rlc2V0dGluZyBVQVBJLgo+ID4gPiA+ID4gPiA+ICsg Kgo+ID4gPiA+ID4gPiA+ICsgKiBBbGxvY2F0aW9ucyBzZXQgYnkgdGhpcyBmdW5jdGlvbiBhcmUg bm90IGNoZWNrZWQgYWdhaW5zdCB0aGUKPiA+ID4gPiA+ID4gPiBiYW5kd2lkdGgKPiA+ID4gPiA+ ID4gPiArICogcmVzdHJhaW50cyBvZiBAbWdyIHVudGlsIHRoZSBkcml2ZXIgY2FsbHMKPiA+ID4g PiA+ID4gPiBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpLgo+ID4gPiA+ID4gPiA+ICsgKgo+ID4g PiA+ID4gPiA+ICsgKiBBZGRpdGlvbmFsbHksIGl0IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlv biBtdWx0aXBsZSB0aW1lcwo+ID4gPiA+ID4gPiA+IG9uCj4gPiA+ID4gPiA+ID4gdGhlCj4gPiA+ ID4gPiA+ID4gc2FtZQo+ID4gPiA+ID4gPiA+ICsgKiBAcG9ydCBhcyBuZWVkZWQuIEl0IGlzIG5v dCBPSyBob3dldmVyLCB0byBjYWxsIHRoaXMgZnVuY3Rpb24KPiA+ID4gPiA+ID4gPiBhbmQKPiA+ ID4gPiA+ID4gPiArICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSBpbiB0aGUg c2FtZSBhdG9taWMgY2hlY2sKPiA+ID4gPiA+ID4gPiBwaGFzZS4KPiA+ID4gPiA+ID4gPiArICoK PiA+ID4gPiA+ID4gPiArICogU2VlIGFsc286Cj4gPiA+ID4gPiA+ID4gKyAqIGRybV9kcF9hdG9t aWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkKPiA+ID4gPiA+ID4gPiArICogZHJtX2RwX21zdF9hdG9t aWNfY2hlY2soKQo+ID4gPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gPiA+ICsgKiBSZXR1cm5zOgo+ ID4gPiA+ID4gPiA+ICsgKiBUb3RhbCBzbG90cyBpbiB0aGUgYXRvbWljIHN0YXRlIGFzc2lnbmVk IGZvciB0aGlzIHBvcnQsIG9yIGEKPiA+ID4gPiA+ID4gPiBuZWdhdGl2ZSBlcnJvcgo+ID4gPiA+ ID4gPiA+ICsgKiBjb2RlIGlmIHRoZSBwb3J0IG5vIGxvbmdlciBleGlzdHMKPiA+ID4gPiA+ID4g PiAgICovCj4gPiA+ID4gPiA+ID4gIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZQo+ID4gPiA+ID4gPiA+ICpzdGF0ZSwKPiA+ID4gPiA+ID4g PiAgCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gPiA+ ID4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludAo+ID4gPiA+ID4gPiA+ IHBibikKPiA+ID4gPiA+ID4gPiAgewo+ID4gPiA+ID4gPiA+ICAJc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgKnRvcG9sb2d5X3N0YXRlOwo+ID4gPiA+ID4gPiA+IC0JaW50IHJlcV9z bG90czsKPiA+ID4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpwb3Ms ICp2Y3BpID0gTlVMTDsKPiA+ID4gPiA+ID4gPiArCWludCBwcmV2X3Nsb3RzLCByZXFfc2xvdHMs IHJldDsKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiAgCXRvcG9sb2d5X3N0YXRlID0gZHJt X2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLAo+ID4gPiA+ID4gPiA+IG1ncik7 Cj4gPiA+ID4gPiA+ID4gIAlpZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiA+ID4gPiA+ID4g PiBAQCAtMjY0MCwyMCArMjY2MSw2MCBAQCBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xv dHMoc3RydWN0Cj4gPiA+ID4gPiA+ID4gZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gPiA+ID4g PiA+ID4gIAlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsK PiA+ID4gPiA+ID4gPiAgCWlmIChwb3J0ID09IE5VTEwpCj4gPiA+ID4gPiA+ID4gIAkJcmV0dXJu IC1FSU5WQUw7Cj4gPiA+ID4gPiA+ID4gLQlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBt Z3ItPnBibl9kaXYpOwo+ID4gPiA+ID4gPiA+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyBy ZXE9JWQsIGF2YWlsPSVkXG4iLAo+ID4gPiA+ID4gPiA+IC0JCQlyZXFfc2xvdHMsIHRvcG9sb2d5 X3N0YXRlLT5hdmFpbF9zbG90cyk7Cj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gLQlpZiAo cmVxX3Nsb3RzID4gdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKSB7Cj4gPiA+ID4gPiA+ID4g LQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gPiA+ID4gPiA+IC0JCXJldHVybiAtRU5PU1BD Owo+ID4gPiA+ID4gPiA+ICsJdG9wb2xvZ3lfc3RhdGUtPnZjcGlfYWxsb2NhdGVkID0gdHJ1ZTsK PiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gKwkvKiBGaW5kIHRoZSBjdXJyZW50IGFsbG9j YXRpb24gZm9yIHRoaXMgcG9ydCwgaWYgYW55ICovCj4gPiA+ID4gPiA+ID4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KHBvcywgJnRvcG9sb2d5X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiA+ID4g PiA+ICsJCWlmIChwb3MtPnBvcnQgPT0gcG9ydCkgewo+ID4gPiA+ID4gPiA+ICsJCQl2Y3BpID0g cG9zOwo+ID4gPiA+ID4gPiA+ICsJCQlwcmV2X3Nsb3RzID0gdmNwaS0+dmNwaTsKPiA+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ID4gKwkJCS8qCj4gPiA+ID4gPiA+ID4gKwkJCSAqIFRoaXMgc2hv dWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzIHRoZSBkcml2ZXIKPiA+ID4gPiA+ID4gPiB0cmllcwo+ ID4gPiA+ID4gPiA+ICsJCQkgKiByZWxlYXNpbmcgYW5kIGFsbG9jYXRpbmcgdGhlIHNhbWUgVkNQ SQo+ID4gPiA+ID4gPiA+IGFsbG9jYXRpb24sCj4gPiA+ID4gPiA+ID4gKwkJCSAqIHdoaWNoIGlz IGFuIGVycm9yCj4gPiA+ID4gPiA+ID4gKwkJCSAqLwo+ID4gPiA+ID4gPiA+ICsJCQlpZiAoV0FS Tl9PTighcHJldl9zbG90cykpIHsKPiA+ID4gPiA+ID4gPiArCQkJCURSTV9FUlJPUigiY2Fubm90 IGFsbG9jYXRlIGFuZCByZWxlYXNlCj4gPiA+ID4gPiA+ID4gVkNQSSBvbgo+ID4gPiA+ID4gPiA+ IFtNU1QgUE9SVDolcF0gaW4gdGhlIHNhbWUgc3RhdGVcbiIsCj4gPiA+ID4gPiA+ID4gKwkJCQkJ ICBwb3J0KTsKPiA+ID4gPiA+ID4gPiArCQkJCXJldHVybiAtRUlOVkFMOwo+ID4gPiA+ID4gPiA+ ICsJCQl9Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBBbGxvd2luZyBhdG9taWMgY2hhbmdlcyB0 byBvdXRwdXQgc3RhdGUgKGxpa2UgZGlzYWJsaW5nIGl0IG9uIG9uZQo+ID4gPiA+ID4gPiBjcnRj LAo+ID4gPiA+ID4gPiBhbmQgdGhlbiBlbmFibGluZyBvbiB0aGUgb3RoZXIsIHRodXMgYm90aCBy ZWxlYXNpbmcgYW5kIHJlLQo+ID4gPiA+ID4gPiBhbGxvY2F0aW5nCj4gPiA+ID4gPiA+IHRoZQo+ ID4gPiA+ID4gPiB2Y3BpIGluIG9uZSBnbykgaXMga2luZGEgdGhlIHBvaW50IG9mIGF0b21pYy4g U28gZGVmaW5pdGVseSBjYW4ndAo+ID4gPiA+ID4gPiBFSU5WQUwKPiA+ID4gPiA+ID4gaGVyZS4K PiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFNvdW5kcyBsaWtlIHdlIG5lZWQgbW9yZSB0ZXN0Y2Fz ZXMgaW4gaWd0Pwo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gKwkJ CWJyZWFrOwo+ID4gPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ID4gPiAgCX0KPiA+ID4gPiA+ID4g PiArCWlmICghdmNwaSkKPiA+ID4gPiA+ID4gPiArCQlwcmV2X3Nsb3RzID0gMDsKPiA+ID4gPiA+ ID4gPiAKPiA+ID4gPiA+ID4gPiAtCXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyAtPSByZXFf c2xvdHM7Cj4gPiA+ID4gPiA+ID4gLQlEUk1fREVCVUdfS01TKCJ2Y3BpIHNsb3RzIGF2YWlsPSVk IiwgdG9wb2xvZ3lfc3RhdGUtCj4gPiA+ID4gPiA+ID4gPiBhdmFpbF9zbG90cyk7Cj4gPiA+ID4g PiA+ID4gKwlyZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+ID4g PiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6 JWQ6JXNdIFtNU1QgUE9SVDolcF0gVkNQSSAlZCAtPgo+ID4gPiA+ID4gPiA+ICVkXG4iLAo+ID4g PiA+ID4gPiA+ICsJCQkgcG9ydC0+Y29ubmVjdG9yLT5iYXNlLmlkLCBwb3J0LT5jb25uZWN0b3It Cj4gPiA+ID4gPiA+ID4gPiBuYW1lLAo+ID4gPiA+ID4gPiA+ICsJCQkgcG9ydCwgcHJldl9zbG90 cywgcmVxX3Nsb3RzKTsKPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gKwkvKiBBZGQgdGhl IG5ldyBhbGxvY2F0aW9uIHRvIHRoZSBzdGF0ZSAqLwo+ID4gPiA+ID4gPiA+ICsJaWYgKCF2Y3Bp KSB7Cj4gPiA+ID4gPiA+ID4gKwkJdmNwaSA9IGt6YWxsb2Moc2l6ZW9mKCp2Y3BpKSwgR0ZQX0tF Uk5FTCk7Cj4gPiA+ID4gPiA+ID4gKwkJaWYgKCF2Y3BpKSB7Cj4gPiA+ID4gPiA+ID4gKwkJCXJl dCA9IC1FTk9NRU07Cj4gPiA+ID4gPiA+ID4gKwkJCWdvdG8gb3V0Owo+ID4gPiA+ID4gPiA+ICsJ CX0KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiArCQl2Y3BpLT5wb3J0ID0gZHJtX2RwX2dl dF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiA+ID4gPiA+ID4gPiArCQlpZiAoIXZj cGktPnBvcnQpIHsKPiA+ID4gPiA+ID4gPiArCQkJcmV0ID0gLUVJTlZBTDsKPiA+ID4gPiA+ID4g PiArCQkJa2ZyZWUodmNwaSk7Cj4gPiA+ID4gPiA+ID4gKwkJCWdvdG8gb3V0Owo+ID4gPiA+ID4g PiA+ICsJCX0KPiA+ID4gPiA+ID4gPiArCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwgJnRvcG9sb2d5 X3N0YXRlLT52Y3Bpcyk7Cj4gPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiA+ID4gKwl2Y3BpLT52 Y3BpID0gcmVxX3Nsb3RzOwo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArCXJldCA9IHJl cV9zbG90czsKPiA+ID4gPiA+ID4gPiArb3V0Ogo+ID4gPiA+ID4gPiA+ICAJZHJtX2RwX3B1dF9w b3J0KHBvcnQpOwo+ID4gPiA+ID4gPiA+IC0JcmV0dXJuIHJlcV9zbG90czsKPiA+ID4gPiA+ID4g PiArCXJldHVybiByZXQ7Cj4gPiA+ID4gPiA+ID4gIH0KPiA+ID4gPiA+ID4gPiAgRVhQT1JUX1NZ TUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyk7Cj4gPiA+ID4gPiA+ID4gCj4gPiA+ ID4gPiA+ID4gQEAgLTI2NjEsMzEgKzI3MjIsNjYgQEAKPiA+ID4gPiA+ID4gPiBFWFBPUlRfU1lN Qk9MKGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKTsKPiA+ID4gPiA+ID4gPiAgICogZHJt X2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSAtIFJlbGVhc2UgYWxsb2NhdGVkIHZjcGkK PiA+ID4gPiA+ID4gPiBzbG90cwo+ID4gPiA+ID4gPiA+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9t aWMgc3RhdGUKPiA+ID4gPiA+ID4gPiAgICogQG1ncjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9y IHRoZSBwb3J0Cj4gPiA+ID4gPiA+ID4gLSAqIEBzbG90czogbnVtYmVyIG9mIHZjcGkgc2xvdHMg dG8gcmVsZWFzZQo+ID4gPiA+ID4gPiA+ICsgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0 aGUgVkNQSSBzbG90cyBmcm9tCj4gPiA+ID4gPiA+ID4gICAqCj4gPiA+ID4gPiA+ID4gLSAqIFJF VFVSTlM6Cj4gPiA+ID4gPiA+ID4gLSAqIDAgaWYgQHNsb3RzIHdlcmUgYWRkZWQgYmFjayB0byAm ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS0KPiA+ID4gPiA+ID4gPiA+IGF2YWlsX3Nsb3RzIG9y Cj4gPiA+ID4gPiA+ID4gLSAqIG5lZ2F0aXZlIGVycm9yIGNvZGUKPiA+ID4gPiA+ID4gPiArICog UmVsZWFzZXMgYW55IFZDUEkgc2xvdHMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHRvIGEgcG9y dAo+ID4gPiA+ID4gPiA+IGluCj4gPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+ID4gYXRvbWlj Cj4gPiA+ID4gPiA+ID4gKyAqIHN0YXRlLiBBbnkgYXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9y dCBNU1QgbXVzdCBjYWxsIHRoaXMKPiA+ID4gPiA+ID4gPiBmdW5jdGlvbgo+ID4gPiA+ID4gPiA+ IGluCj4gPiA+ID4gPiA+ID4gKyAqIHRoZWlyICZkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcy5h dG9taWNfY2hlY2soKSBjYWxsYmFjawo+ID4gPiA+ID4gPiA+IHdoZW4KPiA+ID4gPiA+ID4gPiB0 aGUKPiA+ID4gPiA+ID4gPiArICogY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2VyIGhhdmUgVkNQSSBh bGxvY2F0ZWQgKGUuZy4gYmVjYXVzZQo+ID4gPiA+ID4gPiA+IGl0J3MKPiA+ID4gPiA+ID4gPiBD UlRDCj4gPiA+ID4gPiA+ID4gd2FzCj4gPiA+ID4gPiA+ID4gKyAqIHJlbW92ZWQpIHdoZW4gaXQg aGFkIFZDUEkgYWxsb2NhdGVkIGluIHRoZSBwcmV2aW91cyBhdG9taWMKPiA+ID4gPiA+ID4gPiBz dGF0ZS4KPiA+ID4gPiA+ID4gPiArICoKPiA+ID4gPiA+ID4gPiArICogSXQgaXMgT0sgdG8gY2Fs bCB0aGlzIGV2ZW4gaWYgQHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tCj4gPiA+ID4gPiA+ID4g dGhlCj4gPiA+ID4gPiA+ID4gc3lzdGVtLgo+ID4gPiA+ID4gPiA+ICsgKiBBZGRpdGlvbmFsbHks IGl0IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcwo+ID4gPiA+ID4g PiA+IG9uCj4gPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4gPiA+ID4gc2FtZQo+ID4gPiA+ID4gPiA+ ICsgKiBAcG9ydCBhcyBuZWVkZWQuIEl0IGlzIG5vdCBPSyBob3dldmVyLCB0byBjYWxsIHRoaXMg ZnVuY3Rpb24KPiA+ID4gPiA+ID4gPiBhbmQKPiA+ID4gPiA+ID4gPiArICogZHJtX2RwX2F0b21p Y19maW5kX3ZjcGlfc2xvdHMoKSBvbiB0aGUgc2FtZSBAcG9ydCBpbiBhCj4gPiA+ID4gPiA+ID4g c2luZ2xlCj4gPiA+ID4gPiA+ID4gYXRvbWljCj4gPiA+ID4gPiA+ID4gY2hlY2sKPiA+ID4gPiA+ ID4gPiArICogcGhhc2UuCj4gPiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ID4gKyAqIFNlZSBh bHNvOgo+ID4gPiA+ID4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4g PiA+ID4gPiA+ID4gKyAqIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkKPiA+ID4gPiA+ID4gPiAr ICoKPiA+ID4gPiA+ID4gPiArICogUmV0dXJuczoKPiA+ID4gPiA+ID4gPiArICogMCBpZiBhbGwg c2xvdHMgZm9yIHRoaXMgcG9ydCB3ZXJlIGFkZGVkIGJhY2sgdG8KPiA+ID4gPiA+ID4gPiArICog JmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUuYXZhaWxfc2xvdHMgb3IgbmVnYXRpdmUgZXJyb3IK PiA+ID4gPiA+ID4gPiBjb2RlCj4gPiA+ID4gPiA+ID4gICAqLwo+ID4gPiA+ID4gPiA+ICBpbnQg ZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUK PiA+ID4gPiA+ID4gPiAqc3RhdGUsCj4gPiA+ID4gPiA+ID4gIAkJCQkgICAgIHN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21ncgo+ID4gPiA+ID4gPiA+ICptZ3IsCj4gPiA+ID4gPiA+ID4gLQkJ CQkgICAgIGludCBzbG90cykKPiA+ID4gPiA+ID4gPiArCQkJCSAgICAgc3RydWN0IGRybV9kcF9t c3RfcG9ydCAqcG9ydCkKPiA+ID4gPiA+ID4gPiAgewo+ID4gPiA+ID4gPiA+ICAJc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnRvcG9sb2d5X3N0YXRlOwo+ID4gPiA+ID4gPiA+ICsJ c3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvczsKPiA+ID4gPiA+ID4gPiArCWJvb2wg Zm91bmQgPSBmYWxzZTsKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiAgCXRvcG9sb2d5X3N0 YXRlID0gZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLAo+ID4gPiA+ID4g PiA+IG1ncik7Cj4gPiA+ID4gPiA+ID4gIAlpZiAoSVNfRVJSKHRvcG9sb2d5X3N0YXRlKSkKPiA+ ID4gPiA+ID4gPiAgCQlyZXR1cm4gUFRSX0VSUih0b3BvbG9neV9zdGF0ZSk7Cj4gPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+ID4gLQkvKiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3BpLm51bV9z bG90cyB0byB1cGRhdGUKPiA+ID4gPiA+ID4gPiAtCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9z bG90cyBhcyB0aGUgcG9ydCBtYXkgbm90IGV4aXN0IGlmCj4gPiA+ID4gPiA+ID4gdGhlIHBhcmVu dAo+ID4gPiA+ID4gPiA+IC0JICogYnJhbmNoIGRldmljZSB3YXMgdW5wbHVnZ2VkLiBUaGlzIHNo b3VsZCBiZSBmaXhlZCBieQo+ID4gPiA+ID4gPiA+IHRyYWNraW5nCj4gPiA+ID4gPiA+ID4gLQkg KiBwZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4gZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ ID4gPiA+ID4gPiA+IGluc3RlYWQgb2YKPiA+ID4gPiA+ID4gPiAtCSAqIGRlcGVuZGluZyBvbiB0 aGUgY2FsbGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8KPiA+ID4gPiA+ID4gPiByZWxl YXNlLgo+ID4gPiA+ID4gPiA+IC0JICovCj4gPiA+ID4gPiA+ID4gLQl0b3BvbG9neV9zdGF0ZS0+ YXZhaWxfc2xvdHMgKz0gc2xvdHM7Cj4gPiA+ID4gPiA+ID4gLQlEUk1fREVCVUdfS01TKCJ2Y3Bp IHNsb3RzIHJlbGVhc2VkPSVkLCBhdmFpbD0lZFxuIiwKPiA+ID4gPiA+ID4gPiAtCQkJc2xvdHMs IHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyk7Cj4gPiA+ID4gPiA+ID4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KHBvcywgJnRvcG9sb2d5X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ID4gPiA+ID4g PiA+ICsJCWlmIChwb3MtPnBvcnQgPT0gcG9ydCkgewo+ID4gPiA+ID4gPiA+ICsJCQlmb3VuZCA9 IHRydWU7Cj4gPiA+ID4gPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiA+ID4gPiA+ICsJCX0KPiA+ID4g PiA+ID4gPiArCX0KPiA+ID4gPiA+ID4gPiArCWlmIChXQVJOX09OKCFmb3VuZCkpIHsKPiA+ID4g PiA+ID4gPiArCQlEUk1fRVJST1IoIm5vIFZDUEkgZm9yIFtNU1QgUE9SVDolcF0gZm91bmQgaW4g bXN0Cj4gPiA+ID4gPiA+ID4gc3RhdGUgJXBcbiIsCj4gPiA+ID4gPiA+ID4gKwkJCSAgcG9ydCwg JnRvcG9sb2d5X3N0YXRlLT5iYXNlKTsKPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsK PiA+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gKwlEUk1fREVC VUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIFZDUEkgJWQgLT4gMFxuIiwgcG9ydCwgcG9zLQo+ID4g PiA+ID4gPiA+ID4gdmNwaSk7Cj4gPiA+ID4gPiA+ID4gKwlpZiAocG9zLT52Y3BpKSB7Cj4gPiA+ ID4gPiA+ID4gKwkJLyoKPiA+ID4gPiA+ID4gPiArCQkgKiBUaGlzIHNob3VsZCBiZSBzYWZlLWFz IHRoZSBwcmV2aW91cyBzdGF0ZSB3aWxsCj4gPiA+ID4gPiA+ID4gc3RpbGwgaG9sZCBhCj4gPiA+ ID4gPiA+ID4gKwkJICogcmVmZXJlbmNlIHRvIHRoaXMgcG9ydCB1bnRpbCB3ZSBzd2FwIHN0YXRl cy4gSWYKPiA+ID4gPiA+ID4gPiBpdCdzIG5vdCwKPiA+ID4gPiA+ID4gPiArCQkgKiB0aGUgZHJp dmVyIGhhcyBhIGJvb2trZWVwaW5nIGVycm9yCj4gPiA+ID4gPiA+ID4gKwkJICovCj4gPiA+ID4g PiA+ID4gKwkJaWYgKFdBUk5fT04oZHJtX2RwX3B1dF9wb3J0KHBvcnQpKSkgewo+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gVGhlIHVzdWFsIHdheSB0byBkbyB0aGlzIChpbnN0ZWFkIG9mIGFkZGlu ZyBhIHJldHVybiB2YWx1ZSB0byB0aGUKPiA+ID4gPiA+ID4gbm9ybWFsCj4gPiA+ID4gPiA+IF9w dXQgZnVuY3Rpb24pIGlzIHNvbWV0aGluZyBsaWtlCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAJ a3JlZl9wdXQocG9ydCwgZnVuY3Rpb25fdGhhdF93aXRoX2p1c3RfYV9XQVJOSU5HX0RSTV9FUlJP UikKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IGF2b2lkcyB0aGUgbmVlZCBmb3IgcGF0Y2ggMi4K PiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gKwkJCURSTV9FUlJPUigiY2Fubm90IGFsbG9jYXRl IGFuZCByZWxlYXNlIFZDUEkgb24KPiA+ID4gPiA+ID4gPiBbTVNUCj4gPiA+ID4gPiA+ID4gUE9S VDolcF0gaW4gdGhlIHNhbWUgc3RhdGVcbiIsCj4gPiA+ID4gPiA+ID4gKwkJCQkgIHBvcnQpOwo+ ID4gPiA+ID4gPiA+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ID4gPiArCQl9Cj4gPiA+ ID4gPiA+ID4gKwkJcG9zLT52Y3BpID0gMDsKPiA+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gPiAgCXJldHVybiAwOwo+ID4gPiA+ID4gPiA+ICB9Cj4gPiA+ID4gPiA+ ID4gQEAgLTMxMTUsMTUgKzMyMTEsNDUgQEAgc3RhdGljIHZvaWQKPiA+ID4gPiA+ID4gPiBkcm1f ZHBfZGVzdHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3QKPiA+ID4gPiA+ID4gPiB3b3JrX3N0cnVj dCAqd29yaykKPiA+ID4gPiA+ID4gPiAgc3RhdGljIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAq Cj4gPiA+ID4gPiA+ID4gIGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcHJp dmF0ZV9vYmogKm9iaikKPiA+ID4gPiA+ID4gPiAgewo+ID4gPiA+ID4gPiA+IC0Jc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlOwo+ID4gPiA+ID4gPiA+ICsJc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlLCAqb2xkX3N0YXRlID0KPiA+ID4gPiA+ID4g PiArCQl0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUob2JqLT5zdGF0ZSk7Cj4gPiA+ID4gPiA+ID4g KwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAqdmNwaTsKPiA+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gPiAtCXN0YXRlID0ga21lbWR1cChvYmotPnN0YXRlLCBzaXplb2YoKnN0 YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiA+ID4gKwlzdGF0ZSA9IGttZW1kdXAob2xkX3N0 YXRlLCBzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gPiA+ID4gIAlpZiAoIXN0 YXRlKQo+ID4gPiA+ID4gPiA+ICAJCXJldHVybiBOVUxMOwo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ ID4gPiA+ICAJX19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUo b2JqLCAmc3RhdGUtCj4gPiA+ID4gPiA+ID4gPiBiYXNlKTsKPiA+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gPiArCUlOSVRfTElTVF9IRUFEKCZzdGF0ZS0+dmNwaXMpOwo+ID4gPiA+ID4gPiA+ICsJ c3RhdGUtPnZjcGlfYWxsb2NhdGVkID0gZmFsc2U7Cj4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZvbGRfc3RhdGUtPnZjcGlzLCBuZXh0KSB7 Cj4gPiA+ID4gPiA+ID4gKwkJLyogUHJ1bmUgbGVmdG92ZXIgZnJlZWQgVkNQSSBhbGxvY2F0aW9u cyAqLwo+ID4gPiA+ID4gPiA+ICsJCWlmICghcG9zLT52Y3BpKQo+ID4gPiA+ID4gPiA+ICsJCQlj b250aW51ZTsKPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gKwkJdmNwaSA9IGttZW1kdXAo cG9zLCBzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ID4gPiArCQlpZiAoIXZj cGkpCj4gPiA+ID4gPiA+ID4gKwkJCWdvdG8gZmFpbDsKPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4g PiA+ID4gKwkJLyogVGFrZSBhIHBsYWluIG9sZCBrcmVmIGhlcmUgYW5kIGRvbid0IHZhbGlkYXRl IHRoZQo+ID4gPiA+ID4gPiA+IHBvcnQsIGFzCj4gPiA+ID4gPiA+ID4gKwkJICogaXQncyB0b3Bv bG9neSBtaWdodCBub3QgZXZlbiBleGlzdCBhbnltb3JlCj4gPiA+ID4gPiA+ID4gKwkJICovCj4g PiA+ID4gPiA+ID4gKwkJa3JlZl9nZXQoJnZjcGktPnBvcnQtPmtyZWYpOwo+ID4gPiA+ID4gPiA+ ICsJCWxpc3RfYWRkKCZ2Y3BpLT5uZXh0LCAmc3RhdGUtPnZjcGlzKTsKPiA+ID4gPiA+ID4gPiAr CX0KPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gIAlyZXR1cm4gJnN0YXRlLT5iYXNlOwo+ ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArZmFpbDoKPiA+ID4gPiA+ID4gPiArCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHZjcGksICZzdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ ID4gPiA+ID4gPiArCQlkcm1fZHBfcHV0X3BvcnQocG9zLT5wb3J0KTsKPiA+ID4gPiA+ID4gPiAr CQlrZnJlZShwb3MpOwo+ID4gPiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gPiA+ICsJa2ZyZWUoc3Rh dGUpOwo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArCXJldHVybiBOVUxMOwo+ID4gPiA+ ID4gPiA+ICB9Cj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gIHN0YXRpYyB2b2lkIGRybV9k cF9tc3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqCj4gPiA+ID4gPiA+ID4g Km9iaiwKPiA+ID4gPiA+ID4gPiBAQCAtMzEzMSwxNCArMzI1NywxMTYgQEAgc3RhdGljIHZvaWQK PiA+ID4gPiA+ID4gPiBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUoc3RydWN0Cj4gPiA+ID4gPiA+ ID4gZHJtX3ByaXZhdGVfb2JqICpvYmosCj4gPiA+ID4gPiA+ID4gIHsKPiA+ID4gPiA+ID4gPiAg CXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUgPQo+ID4gPiA+ID4g PiA+ICAJCXRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSk7Cj4gPiA+ID4gPiA+ID4gKwlz dHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAqdG1wOwo+ID4gPiA+ID4gPiA+ICsK PiA+ID4gPiA+ID4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgJm1zdF9z dGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ID4gPiA+ID4gPiArCQkvKiBXZSBvbmx5IGtlZXAgcmVm ZXJlbmNlcyB0byBwb3J0cyB3aXRoIG5vbi16ZXJvCj4gPiA+ID4gPiA+ID4gVkNQSXMgKi8KPiA+ ID4gPiA+ID4gPiArCQlpZiAocG9zLT52Y3BpKQo+ID4gPiA+ID4gPiA+ICsJCQlkcm1fZHBfcHV0 X3BvcnQocG9zLT5wb3J0KTsKPiA+ID4gPiA+ID4gPiArCQlrZnJlZShwb3MpOwo+ID4gPiA+ID4g PiA+ICsJfQo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ICAJa2ZyZWUobXN0X3N0YXRlKTsK PiA+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IC1zdGF0aWMgY29u c3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIG1zdF9zdGF0ZV9mdW5jcyA9IHsKPiA+ ID4gPiA+ID4gPiArc3RhdGljIGlubGluZSBpbnQKPiA+ID4gPiA+ID4gPiArZHJtX2RwX21zdF9h dG9taWNfY2hlY2tfdG9wb2xvZ3lfc3RhdGUoc3RydWN0Cj4gPiA+ID4gPiA+ID4gZHJtX2RwX21z dF90b3BvbG9neV9tZ3IKPiA+ID4gPiA+ID4gPiAqbWdyLAo+ID4gPiA+ID4gPiA+ICsJCQkJICAg ICAgIHN0cnVjdAo+ID4gPiA+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ID4g PiA+ID4gPiAqbXN0X3N0YXRlKQo+ID4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ID4gKwlzdHJ1 Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqdmNwaTsKPiA+ID4gPiA+ID4gPiArCXN0cnVjdCBk cm1fZHBfbXN0X3BvcnQgKnBvcnQ7Cj4gPiA+ID4gPiA+ID4gKwlpbnQgYXZhaWxfc2xvdHMgPSA2 MywgcmV0Owo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArCS8qIFRoZXJlJ3Mgbm8gcG9z c2libGUgc2NlbmFyaW8gd2hlcmUgcmVsZWFzaW5nIFZDUEkgb3IKPiA+ID4gPiA+ID4gPiBrZWVw aW5nIGl0IHRoZQo+ID4gPiA+ID4gPiA+ICsJICogc2FtZSB3b3VsZCBtYWtlIHRoZSBzdGF0ZSBp bnZhbGlkCj4gPiA+ID4gPiA+ID4gKwkgKi8KPiA+ID4gPiA+ID4gPiArCWlmICghbXN0X3N0YXRl LT52Y3BpX2FsbG9jYXRlZCkgewo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gRG8gd2UgbmVlZCB0 aGlzPyBJZiBub3QgSSdtIGFsd2F5cyBpbiBmYXZvdXIgb2YgcmVtb3ZpbmcgY29kZSBpZgo+ID4g PiA+ID4gPiBpdCdzCj4gPiA+ID4gPiA+IG5vdAo+ID4gPiA+ID4gPiBuZWVkZWQgOi0pCj4gPiA+ ID4gPiA+IAo+ID4gPiA+ID4gPiA+ICsJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgTUdSOiVwXSBz dGF0ZSAlcCBhbGxvY2F0ZXMgbm8KPiA+ID4gPiA+ID4gPiBWQ1BJLAo+ID4gPiA+ID4gPiA+IGNo ZWNrIHNraXBwZWRcbiIsCj4gPiA+ID4gPiA+ID4gKwkJCQkgbWdyLCAmbXN0X3N0YXRlLT5iYXNl KTsKPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZjcGksICZtc3Rfc3Rh dGUtPnZjcGlzLCBuZXh0KSB7Cj4gPiA+ID4gPiA+ID4gKwkJLyogUmVsZWFzaW5nIFZDUEkgaXMg YWx3YXlzIE9LLWV2ZW4gaWYgdGhlIHBvcnQgaXMKPiA+ID4gPiA+ID4gPiBnb25lICovCj4gPiA+ ID4gPiA+ID4gKwkJaWYgKCF2Y3BpLT52Y3BpKSB7Cj4gPiA+ID4gPiA+ID4gKwkJCURSTV9ERUJV R19BVE9NSUMoIltNU1QgUE9SVDolcF0gcmVsZWFzZXMgYWxsCj4gPiA+ID4gPiA+ID4gVkNQSQo+ ID4gPiA+ID4gPiA+IHNsb3RzXG4iLAo+ID4gPiA+ID4gPiA+ICsJCQkJCSB2Y3BpLT5wb3J0KTsK PiA+ID4gPiA+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ID4gPiA+ID4gKwkJfQo+ID4gPiA+ID4g PiA+ICsKPiA+ID4gPiA+ID4gPiArCQlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9y ZWYobWdyLCB2Y3BpLT5wb3J0KTsKPiA+ID4gPiA+ID4gPiArCQlpZiAoIXBvcnQpIHsKPiA+ID4g PiA+ID4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSBpcyBnb25lIGJ1dAo+ ID4gPiA+ID4gPiA+IHN0aWxsIGhhcwo+ID4gPiA+ID4gPiA+IFZDUEksIGNhbm5vdCBhZGQgbmV3 IFZDUElcbiIsCj4gPiA+ID4gPiA+ID4gKwkJCQkJIHZjcGktPnBvcnQpOwo+ID4gPiA+ID4gPiA+ ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiA+ID4gPiArCQl9Cj4gPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiBGb3IgZmluZF92Y3BpIHdlJ3ZlIGFscmVhZHkgZG9uZSB0aGlzLiBGb3IgdW5wbHVn Z2VkIHZjcGksIHdlCj4gPiA+ID4gPiA+IGNhbid0IGRvCj4gPiA+ID4gPiA+IHRoaXMgaGVyZSBJ IHRoaW5rIC0gb3RoZXJ3aXNlIGlmIHlvdSBlbmFibGUgMiBtc3Qgb3V0cHV0cyBvbiB0aGUKPiA+ ID4gPiA+ID4gc2FtZQo+ID4gPiA+ID4gPiBicmFuY2gsIGFuZCB1bnBsdWcgYm90aCwgb2xkIG5v bi1hdG9taWMgdXNlcnNwYWNlIGNhbiBuZXZlciBldmVyCj4gPiA+ID4gPiA+IGFnYWluCj4gPiA+ ID4gPiA+IGRpc2FibGUgdGhlbSBiZWNhdXNlIGl0IGNhbid0IGRpc2FibGUgYm90aC4gVGhlIGNo ZWNrICh0byBza2lwCj4gPiA+ID4gPiA+IGFscmVhZHkKPiA+ID4gPiA+ID4gZGVhbGxvY2F0ZWQg cG9ydHMpIGFib3ZlIGlzbid0IGVub3VnaCB0byBoYW5kbGUgdGhhdC4KPiA+ID4gPiA+ID4gCj4g PiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ICsJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9S VDolcF0gcmVxdWlyZXMgJWQgdmNwaQo+ID4gPiA+ID4gPiA+IHNsb3RzXG4iLAo+ID4gPiA+ID4g PiA+ICsJCQkJIHZjcGktPnBvcnQsIHZjcGktPnZjcGkpOwo+ID4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gPiArCQlhdmFpbF9zbG90cyAtPSB2Y3BpLT52Y3BpOwo+ID4gPiA+ID4gPiA+ICsJCWlm IChhdmFpbF9zbG90cyA8IDApIHsKPiA+ID4gPiA+ID4gPiArCQkJRFJNX0RFQlVHX0FUT01JQygi W01TVCBQT1JUOiVwXSBub3QgZW5vdWdoCj4gPiA+ID4gPiA+ID4gVkNQSSBzbG90cwo+ID4gPiA+ ID4gPiA+IGluIG1zdCBzdGF0ZSAlcCAoYXZhaWw9JWQpXG4iLAo+ID4gPiA+ID4gPiA+ICsJCQkJ CSB2Y3BpLT5wb3J0LCBtc3Rfc3RhdGUsCj4gPiA+ID4gPiA+ID4gKwkJCQkJIGF2YWlsX3Nsb3Rz ICsgdmNwaS0+dmNwaSk7Cj4gPiA+ID4gPiA+ID4gKwkJCXJldCA9IC1FTk9TUEM7Cj4gPiA+ID4g PiA+ID4gKwkJCWdvdG8gcG9ydF9mYWlsOwo+ID4gPiA+ID4gPiA+ICsJCX0KPiA+ID4gPiA+ID4g PiArCj4gPiA+ID4gPiA+ID4gKwkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gPiA+ID4gPiA+ ICsJfQo+ID4gPiA+ID4gPiA+ICsJRFJNX0RFQlVHX0FUT01JQygiW01TVCBNR1I6JXBdIG1zdCBz dGF0ZSAlcCBWQ1BJIGF2YWlsPSVkCj4gPiA+ID4gPiA+ID4gdXNlZD0lZFxuIiwKPiA+ID4gPiA+ ID4gPiArCQkJIG1nciwgbXN0X3N0YXRlLCBhdmFpbF9zbG90cywKPiA+ID4gPiA+ID4gPiArCQkJ IDYzIC0gYXZhaWxfc2xvdHMpOwo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArCXJldHVy biAwOwo+ID4gPiA+ID4gPiA+ICtwb3J0X2ZhaWw6Cj4gPiA+ID4gPiA+ID4gKwlkcm1fZHBfcHV0 X3BvcnQocG9ydCk7Cj4gPiA+ID4gPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiA+ID4gPiA+ICt9 Cj4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ICsvKioKPiA+ID4gPiA+ID4gPiArICogZHJt X2RwX21zdF9hdG9taWNfY2hlY2sgLSBDaGVjayB0aGF0IHRoZSBuZXcgc3RhdGUgb2YgYW4gTVNU Cj4gPiA+ID4gPiA+ID4gdG9wb2xvZ3kgaW4gYW4KPiA+ID4gPiA+ID4gPiArICogYXRvbWljIHVw ZGF0ZSBpcyB2YWxpZAo+ID4gPiA+ID4gPiA+ICsgKiBAc3RhdGU6IFBvaW50ZXIgdG8gdGhlIG5l dyAmc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiA+ID4gPiA+ID4gPiArICoKPiA+ ID4gPiA+ID4gPiArICogQ2hlY2tzIHRoZSBnaXZlbiB0b3BvbG9neSBzdGF0ZSBmb3IgYW4gYXRv bWljIHVwZGF0ZSB0bwo+ID4gPiA+ID4gPiA+IGVuc3VyZQo+ID4gPiA+ID4gPiA+IHRoYXQKPiA+ ID4gPiA+ID4gPiBpdCdzCj4gPiA+ID4gPiA+ID4gKyAqIHZhbGlkLiBUaGlzIGluY2x1ZGVzIGNo ZWNraW5nIHdoZXRoZXIgdGhlcmUncyBlbm91Z2gKPiA+ID4gPiA+ID4gPiBiYW5kd2lkdGgKPiA+ ID4gPiA+ID4gPiB0bwo+ID4gPiA+ID4gPiA+IHN1cHBvcnQKPiA+ID4gPiA+ID4gPiArICogdGhl IG5ldyBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZSBhdG9taWMgdXBkYXRlLgo+ID4gPiA+ID4gPiA+ ICsgKgo+ID4gPiA+ID4gPiA+ICsgKiBBbnkgYXRvbWljIGRyaXZlcnMgc3VwcG9ydGluZyBEUCBN U1QgbXVzdCBtYWtlIHN1cmUgdG8gY2FsbAo+ID4gPiA+ID4gPiA+IHRoaXMKPiA+ID4gPiA+ID4g PiBhZnRlcgo+ID4gPiA+ID4gPiA+ICsgKiBjaGVja2luZyB0aGUgcmVzdCBvZiB0aGVpciBzdGF0 ZSBpbiB0aGVpcgo+ID4gPiA+ID4gPiA+ICsgKiAmZHJtX21vZGVfY29uZmlnX2Z1bmNzLmF0b21p Y19jaGVjaygpIGNhbGxiYWNrLgo+ID4gPiA+ID4gPiA+ICsgKgo+ID4gPiA+ID4gPiA+ICsgKiBT ZWUgYWxzbzoKPiA+ID4gPiA+ID4gPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMo KQo+ID4gPiA+ID4gPiA+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpCj4g PiA+ID4gPiA+ID4gKyAqCj4gPiA+ID4gPiA+ID4gKyAqIFJldHVybnM6Cj4gPiA+ID4gPiA+ID4g KyAqCj4gPiA+ID4gPiA+ID4gKyAqIDAgaWYgdGhlIG5ldyBzdGF0ZSBpcyB2YWxpZCwgbmVnYXRp dmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gPiA+ID4gPiA+ID4gKyAqLwo+ID4gPiA+ID4gPiA+ ICtpbnQgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlKQo+ID4gPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IgKm1ncjsKPiA+ID4gPiA+ID4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICptc3Rfc3RhdGU7Cj4gPiA+ID4gPiA+ID4gKwlpbnQgaSwgcmV0ID0gMDsKPiA+ ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gKwlmb3JfZWFjaF9uZXdfbXN0X21ncl9pbl9zdGF0 ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsKPiA+ID4gPiA+ID4gPiArCQlyZXQgPSBkcm1f ZHBfbXN0X2F0b21pY19jaGVja190b3BvbG9neV9zdGF0ZShtZ3IsCj4gPiA+ID4gPiA+ID4gbXN0 X3N0YXRlKTsKPiA+ID4gPiA+ID4gPiArCQlpZiAocmV0KQo+ID4gPiA+ID4gPiA+ICsJCQlicmVh azsKPiA+ID4gPiA+ID4gPiArCX0KPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gKwlyZXR1 cm4gcmV0Owo+ID4gPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiA+ID4gK0VYUE9SVF9TWU1CT0woZHJt X2RwX21zdF9hdG9taWNfY2hlY2spOwo+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gPiArY29u c3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzCj4gPiA+ID4gPiA+ID4gZHJtX2RwX21z dF90b3BvbG9neV9zdGF0ZV9mdW5jcyA9Cj4gPiA+ID4gPiA+ID4gewo+ID4gPiA+ID4gPiA+ICAJ LmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0ZSwKPiA+ ID4gPiA+ID4gPiAgCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9kcF9tc3RfZGVzdHJveV9z dGF0ZSwKPiA+ID4gPiA+ID4gPiAgfTsKPiA+ID4gPiA+ID4gPiArRVhQT1JUX1NZTUJPTChkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzKTsKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4g PiAgLyoqCj4gPiA+ID4gPiA+ID4gICAqIGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0 ZTogZ2V0IE1TVCB0b3BvbG9neSBzdGF0ZQo+ID4gPiA+ID4gPiA+IEBAIC0zMjE2LDEzICszNDQ0 LDExIEBAIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0KHN0cnVjdAo+ID4gPiA+ID4g PiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiA+ID4gPiA+ID4gIAkJcmV0dXJu IC1FTk9NRU07Cj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gIAltc3Rfc3RhdGUtPm1nciA9 IG1ncjsKPiA+ID4gPiA+ID4gPiAtCj4gPiA+ID4gPiA+ID4gLQkvKiBtYXguIHRpbWUgc2xvdHMg LSBvbmUgc2xvdCBmb3IgTVRQIGhlYWRlciAqLwo+ID4gPiA+ID4gPiA+IC0JbXN0X3N0YXRlLT5h dmFpbF9zbG90cyA9IDYzOwo+ID4gPiA+ID4gPiA+ICsJSU5JVF9MSVNUX0hFQUQoJm1zdF9zdGF0 ZS0+dmNwaXMpOwo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ICAJZHJtX2F0b21pY19wcml2 YXRlX29ial9pbml0KCZtZ3ItPmJhc2UsCj4gPiA+ID4gPiA+ID4gIAkJCQkgICAgJm1zdF9zdGF0 ZS0+YmFzZSwKPiA+ID4gPiA+ID4gPiAtCQkJCSAgICAmbXN0X3N0YXRlX2Z1bmNzKTsKPiA+ID4g PiA+ID4gPiArCQkJCSAgICAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyk7Cj4gPiA+ ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gPiA+ID4gPiAgfQo+ID4g PiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPiA+ID4gPiA+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ ID4gPiA+ID4gPiA+IGluZGV4IDEzMmU5NzgyMjdmYi4uOGU4NWUwNGE1OTQ4IDEwMDY0NAo+ID4g PiA+ID4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4g PiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4g PiA+ID4gPiA+IEBAIC0xMjU5Miw2ICsxMjU5MiwxMCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21p Y19jaGVjayhzdHJ1Y3QKPiA+ID4gPiA+ID4gPiBkcm1fZGV2aWNlCj4gPiA+ID4gPiA+ID4gKmRl diwKPiA+ID4gPiA+ID4gPiAgCQkJCSAgICAgICAiW21vZGVzZXRdIiA6ICJbZmFzdHNldF0iKTsK PiA+ID4gPiA+ID4gPiAgCX0KPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiArCXJldCA9IGRy bV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKTsKPiA+ID4gPiA+ID4gPiArCWlmIChyZXQpCj4g PiA+ID4gPiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4g IAlpZiAoYW55X21zKSB7Cj4gPiA+ID4gPiA+ID4gIAkJcmV0ID0gaW50ZWxfbW9kZXNldF9jaGVj a3Moc3RhdGUpOwo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gPiA+ID4gPiA+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiA+ID4gPiA+ID4gPiBpbmRleCA0ZGUyNDdkZGYw NWYuLmJlMmQxYWM3ZDg3ZCAxMDA2NDQKPiA+ID4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2RwX21zdC5jCj4gPiA+ID4gPiA+ID4gQEAgLTQxLDggKzQxLDEzIEBAIHN0 YXRpYyBib29sCj4gPiA+ID4gPiA+ID4gaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmlnKHN0cnVj dAo+ID4gPiA+ID4gPiA+IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiA+ID4gPiA+ID4gIAlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gY29ubl9zdGF0ZS0+Y29ubmVjdG9yOwo+ ID4gPiA+ID4gPiA+ICAJdm9pZCAqcG9ydCA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3Ip LT5wb3J0Owo+ID4gPiA+ID4gPiA+ICAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0g cGlwZV9jb25maWctPmJhc2Uuc3RhdGU7Cj4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2NydGMg KmNydGMgPSBwaXBlX2NvbmZpZy0+YmFzZS5jcnRjOwo+ID4gPiA+ID4gPiA+ICsJc3RydWN0IGRy bV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSA9Cj4gPiA+ID4gPiA+ID4gKwkJZHJtX2F0b21p Y19nZXRfb2xkX2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOwo+ID4gPiA+ID4gPiA+ICsJc3RydWN0 IGRybV9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSA9ICZwaXBlX2NvbmZpZy0+YmFzZTsKPiA+ ID4gPiA+ID4gPiAgCWludCBicHA7Cj4gPiA+ID4gPiA+ID4gLQlpbnQgbGFuZV9jb3VudCwgc2xv dHMgPSAwOwo+ID4gPiA+ID4gPiA+ICsJaW50IGxhbmVfY291bnQsIHNsb3RzID0KPiA+ID4gPiA+ ID4gPiArCQl0b19pbnRlbF9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKS0+ZHBfbV9uLnR1Owo+ ID4gPiA+ID4gPiA+ICAJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21v ZGUgPSAmcGlwZV9jb25maWctCj4gPiA+ID4gPiA+ID4gPiBiYXNlLmFkanVzdGVkX21vZGU7Cj4g PiA+ID4gPiA+ID4gIAlpbnQgbXN0X3BibjsKPiA+ID4gPiA+ID4gPiAgCWJvb2wgY29uc3RhbnRf biA9IGRybV9kcF9oYXNfcXVpcmsoJmludGVsX2RwLT5kZXNjLAo+ID4gPiA+ID4gPiA+IEBAIC03 Nyw4ICs4MiwxMiBAQCBzdGF0aWMgYm9vbAo+ID4gPiA+ID4gPiA+IGludGVsX2RwX21zdF9jb21w dXRlX2NvbmZpZyhzdHJ1Y3QKPiA+ID4gPiA+ID4gPiBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ ID4gPiA+ID4gPiA+ICAJbXN0X3BibiA9IGRybV9kcF9jYWxjX3Bibl9tb2RlKGFkanVzdGVkX21v ZGUtPmNydGNfY2xvY2ssCj4gPiA+ID4gPiA+ID4gYnBwKTsKPiA+ID4gPiA+ID4gPiAgCXBpcGVf Y29uZmlnLT5wYm4gPSBtc3RfcGJuOwo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IC0JLyog Wm9tYmllIGNvbm5lY3RvcnMgY2FuJ3QgaGF2ZSBWQ1BJIHNsb3RzICovCj4gPiA+ID4gPiA+ID4g LQlpZiAoIWRybV9jb25uZWN0b3JfaXNfdW5yZWdpc3RlcmVkKGNvbm5lY3RvcikpIHsKPiA+ID4g PiA+ID4gPiArCS8qIE9ubHkgY2hhbmdlIFZDUEkgYWxsb2NhdGlvbiBvbiBhY3R1YWwgbW9kZSBj aGFuZ2VzLCB0bwo+ID4gPiA+ID4gPiA+IHByZXZlbnQgdXMKPiA+ID4gPiA+ID4gPiArCSAqIGZy b20gdHJ5aW5nIHRvIGFsbG9jYXRlIFZDUEkgdG8gcG9ydHMgdGhhdCBubyBsb25nZXIgZXhpc3QK PiA+ID4gPiA+ID4gPiB3aGVuIHdlCj4gPiA+ID4gPiA+ID4gKwkgKiBtYXkganVzdCBiZSB0cnlp bmcgdG8gZGlzYWJsZSBEUE1TIG9uIHRoZW0KPiA+ID4gPiA+ID4gPiArCSAqLwo+ID4gPiA+ID4g PiA+ICsJaWYgKG5ld19jcnRjX3N0YXRlLT5tb2RlX2NoYW5nZWQgfHwKPiA+ID4gPiA+ID4gPiAr CSAgICBuZXdfY3J0Y19zdGF0ZS0+Y29ubmVjdG9yc19jaGFuZ2VkKSB7Cj4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiBXaHkgZXhhY3RseSBpcyB0aGlzIG5lZWRlZD8gV2Ugb25seSBjYWxsIGNvbXB1 dGVfY29uZmlnIG9uIHRoZQo+ID4gPiA+ID4gPiBlbm9jb2Rlcgo+ID4gPiA+ID4gPiB3aGVuIGVu YWJsaW5nIGFuIG91dHB1dC4gTm90IHdoZW4gZGlzYWJsaW5nIG9uZS4gU2ltaWxhciBmb3IgdGhl Cj4gPiA+ID4gPiA+IGF0b21pYwo+ID4gPiA+ID4gPiBoZWxwZXJzIGFuZCB0aGUgdmFyaW91cyBl bmNvZGVyIGNhbGxiYWNrcyAoeW91IGhhdmUgdGhlIHNhbWUKPiA+ID4gPiA+ID4gY2hhbmdlIGlu Cj4gPiA+ID4gPiA+IHRoZQo+ID4gPiA+ID4gPiBub3V2ZWF1IGNvZGUpLiBEaWQgdGhpcyBhY3R1 YWxseSBibG93IHVwIHdoaWxlIHRlc3Rpbmc/Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ICAJ CXNsb3RzID0gZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RhdGUsCj4gPiA+ID4gPiA+ ID4gIAkJCQkJCSAgICAgICZpbnRlbF9kcC0KPiA+ID4gPiA+ID4gPiA+IG1zdF9tZ3IsCj4gPiA+ ID4gPiA+ID4gIAkJCQkJCSAgICAgIHBvcnQsCj4gPiA+ID4gPiA+ID4gQEAgLTEwNywzNiArMTE2 LDM5IEBAIHN0YXRpYyBib29sCj4gPiA+ID4gPiA+ID4gaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29u ZmlnKHN0cnVjdAo+ID4gPiA+ID4gPiA+IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gPiA+ID4g PiA+ID4gIAlyZXR1cm4gdHJ1ZTsKPiA+ID4gPiA+ID4gPiAgfQo+ID4gPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiA+IC1zdGF0aWMgaW50IGludGVsX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRy bV9jb25uZWN0b3IKPiA+ID4gPiA+ID4gPiAqY29ubmVjdG9yLAo+ID4gPiA+ID4gPiA+IC0JCXN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpuZXdfY29ubl9zdGF0ZSkKPiA+ID4gPiA+ID4gPiAr c3RhdGljIGludAo+ID4gPiA+ID4gPiA+ICtpbnRlbF9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ID4gPiA+ID4gKwkJCSAgc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25uX3N0YXRlKQo+ID4gPiA+ID4gPiA+ICB7Cj4gPiA+ ID4gPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IgPQo+ID4g PiA+ID4gPiA+ICsJCXRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ID4gPiA+ID4gPiA+ ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IgPQo+ID4gPiA+ID4gPiA+ICsJ CSZpbnRlbF9jb25uZWN0b3ItPm1zdF9wb3J0LT5tc3RfbWdyOwo+ID4gPiA+ID4gPiA+ICsJc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCA9IGludGVsX2Nvbm5lY3Rvci0+cG9ydDsKPiA+ID4g PiA+ID4gPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IG5ld19jb25uX3N0YXRl LT5zdGF0ZTsKPiA+ID4gPiA+ID4gPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRf Y29ubl9zdGF0ZTsKPiA+ID4gPiA+ID4gPiAtCXN0cnVjdCBkcm1fY3J0YyAqb2xkX2NydGM7Cj4g PiA+ID4gPiA+ID4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gPiA+ID4g PiA+ID4gLQlpbnQgc2xvdHMsIHJldCA9IDA7Cj4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUgPQo+ID4gPiA+ID4gPiA+ICsJCWRybV9hdG9t aWNfZ2V0X29sZF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gPiA+ID4gPiA+ ID4gKwlzdHJ1Y3QgZHJtX2NydGMgKm9sZF9jcnRjID0gb2xkX2Nvbm5fc3RhdGUtPmNydGMsCj4g PiA+ID4gPiA+ID4gKwkJCSpuZXdfY3J0YyA9IG5ld19jb25uX3N0YXRlLT5jcnRjOwo+ID4gPiA+ ID4gPiA+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwgKm5ld19jcnRj X3N0YXRlOwo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IC0Jb2xkX2Nvbm5fc3RhdGUgPSBk cm1fYXRvbWljX2dldF9vbGRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLAo+ID4gPiA+ID4gPiA+IGNv bm5lY3Rvcik7Cj4gPiA+ID4gPiA+ID4gLQlvbGRfY3J0YyA9IG9sZF9jb25uX3N0YXRlLT5jcnRj Owo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gQmlrZXNoZWQ6IFJld29ya2luZyBhbGwgdGhlIGFi b3ZlIGhpZGVzIHRoZSByZWFsIGNoYW5nZXMgcXVpdGUgYQo+ID4gPiA+ID4gPiBiaXQuCj4gPiA+ ID4gPiA+IAo+ID4gPiA+ID4gPiA+ICAJaWYgKCFvbGRfY3J0YykKPiA+ID4gPiA+ID4gPiAtCQly ZXR1cm4gcmV0Owo+ID4gPiA+ID4gPiA+ICsJCXJldHVybiAwOwo+ID4gPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiA+IC0JY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0 YXRlLCBvbGRfY3J0Yyk7Cj4gPiA+ID4gPiA+ID4gLQlzbG90cyA9IHRvX2ludGVsX2NydGNfc3Rh dGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dTsKPiA+ID4gPiA+ID4gPiAtCWlmIChkcm1fYXRvbWlj X2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSAmJiBzbG90cyA+IDApIHsKPiA+ID4gPiA+ ID4gPiAtCQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncjsKPiA+ID4gPiA+ID4g PiAtCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKm9sZF9lbmNvZGVyOwo+ID4gPiA+ID4gPiA+ICsJb2xk X2NydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRfY3J0Y19zdGF0ZShzdGF0ZSwKPiA+ID4g PiA+ID4gPiBvbGRfY3J0Yyk7Cj4gPiA+ID4gPiA+ID4gKwlpZiAoIW9sZF9jcnRjX3N0YXRlIHx8 Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAhb2xkX2NydGNfc3RhdGUgd291bGQgYmUgYSBmcmFt ZXdvcmsgYnVnLiBKdXN0IHJlbW92ZSB0aGF0IGNoZWNrLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ ID4gPiArCSAgICAhdG9faW50ZWxfY3J0Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSktPmRwX21fbi50 dSkKPiA+ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IEht LCB3aHkgZG8gd2UgbmVlZCB0aGlzPyBIYXZpbmcgYSBEUCBwb3J0IHByZXZpb3VzbHkgZW5hYmxl ZCB3aXRoCj4gPiA+ID4gPiA+IGEgMAo+ID4gPiA+ID4gPiB0dQo+ID4gPiA+ID4gPiBzb3VuZHMg bGlrZSBhIHByZXR0eSBiaWcgZHJpdmVyIGJ1Zy4KPiA+ID4gPiA+ID4gPiAtCQlvbGRfZW5jb2Rl ciA9IG9sZF9jb25uX3N0YXRlLT5iZXN0X2VuY29kZXI7Cj4gPiA+ID4gPiA+ID4gLQkJbWdyID0g JmVuY190b19tc3Qob2xkX2VuY29kZXIpLT5wcmltYXJ5LT5kcC5tc3RfbWdyOwo+ID4gPiA+ID4g PiA+ICsJLyogSWYgd2Ugc3dpdGNoZWQgQ1JUQ3MsIGNsZWFyIHRoZSBwcmV2aW91cyBvbmUncyBh bGxvY2F0aW9uCj4gPiA+ID4gPiA+ID4gKi8KPiA+ID4gPiA+ID4gPiArCW5ld19jcnRjX3N0YXRl ID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsCj4gPiA+ID4gPiA+ID4gb2xk X2NydGMpOwo+ID4gPiA+ID4gPiA+ICsJaWYgKG5ld19jcnRjX3N0YXRlLT5jb25uZWN0b3JzX2No YW5nZWQgJiYgIW5ld19jcnRjX3N0YXRlLQo+ID4gPiA+ID4gPiA+ID4gZW5hYmxlKQo+ID4gPiA+ ID4gPiA+ICsJCXRvX2ludGVsX2NydGNfc3RhdGUobmV3X2NydGNfc3RhdGUpLT5kcF9tX24udHUg PSAwOwo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gTm8gaWRlYSB3aHkgd2UgbmVlZCB0byBjbGVh ciB0aGlzIGhlcmU/IFNob3VsZG4ndCB3ZSBqdXN0IGNsZWFyCj4gPiA+ID4gPiA+IHRoaXMKPiA+ ID4gPiA+ID4gdW5jb25kaXRpb25hbGx5IGlmIHdlIHJlbGVhc2UgdGhlIGFsbG9jYXRpb24uCj4g PiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBBbHNvIG5hbWluZyBjb252ZW50aW9uLCBJJ2QgY2FsbCB0 aGlzIG9sZF9jcnRjX25ld19zdGF0ZSwgYW5kCj4gPiA+ID4gPiA+IG1heWJlCj4gPiA+ID4gPiA+ IG9sZF9jcnRjX29sZF9zdGF0ZS4gVG8gbWFrZSBpdCBjbGVhciB0aGVzZSBhcmUgdGhlIG9sZC9u ZXcgc3RhdGVzCj4gPiA+ID4gPiA+IGZvcgo+ID4gPiA+ID4gPiBvbGRfY3J0Yy4gSW5zdGVhZCBv ZiBvbGQvbmV3IHN0YXRlIGZvciB0aGUgbmV3IGNydGMuCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiA+IC0JCXJldCA9IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3Is Cj4gPiA+ID4gPiA+ID4gc2xvdHMpOwo+ID4gPiA+ID4gPiA+IC0JCWlmIChyZXQpCj4gPiA+ID4g PiA+ID4gLQkJCURSTV9ERUJVR19LTVMoImZhaWxlZCByZWxlYXNpbmcgJWQgdmNwaQo+ID4gPiA+ ID4gPiA+IHNsb3RzOiVkXG4iLAo+ID4gPiA+ID4gPiA+IHNsb3RzLCByZXQpOwo+ID4gPiA+ID4g PiA+IC0JCWVsc2UKPiA+ID4gPiA+ID4gPiAtCQkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0 YXRlKS0+ZHBfbV9uLnR1ID0KPiA+ID4gPiA+ID4gPiAwOwo+ID4gPiA+ID4gPiA+IC0JfQo+ID4g PiA+ID4gPiA+IC0JcmV0dXJuIHJldDsKPiA+ID4gPiA+ID4gPiArCWlmIChuZXdfY3J0YykKPiA+ ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IE5vdCBzdXJl IHdoeSB3ZSBzaG91bGRuJ3QgcmVsZWFzZSB0aGlzPyBJZiB3ZSBoYW5kbGUgdGhpcyBpbgo+ID4g PiA+ID4gPiBoZWxwZXJzLAo+ID4gPiA+ID4gPiBpdAo+ID4gPiA+ID4gPiB3b3VsZCByZW1vdmUg cGlsZXMgb2Ygc3BlY2lhbCBjYXNpbmcgY29kZSBoZXJlIEkgdGhpbmsuIFBsdXMKPiA+ID4gPiA+ ID4gcmVtb3ZlCj4gPiA+ID4gPiA+IHNwZWNpYWwgY29kZSBpbiB0aGUgaGxwZXJzLgo+ID4gPiA+ ID4gPiAKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ICsJcmV0dXJu IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0YXRlLCBtZ3IsIHBvcnQpOwo+ID4g PiA+ID4gPiA+ICB9Cj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gIHN0YXRpYyB2b2lkIGlu dGVsX21zdF9kaXNhYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gPiA+ ID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiA+ ID4gPiA+ID4gYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiA+ID4gPiA+ID4g aW5kZXggM2ZhY2ViNjZmNWNiLi4yMzkyZTEyYjZiY2UgMTAwNjQ0Cj4gPiA+ID4gPiA+ID4gLS0t IGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gPiA+ID4gPiA+ICsrKyBiL2lu Y2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiA+ID4gPiA+ID4gPiBAQCAtNDA2LDkgKzQw NiwxNiBAQCBzdHJ1Y3QgZHJtX2RwX3BheWxvYWQgewo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiA+ICAjZGVmaW5lIHRvX2RwX21zdF90b3BvbG9neV9zdGF0ZSh4KSBjb250YWluZXJfb2YoeCwg c3RydWN0Cj4gPiA+ID4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSwgYmFzZSkKPiA+ ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiArc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24g ewo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gSSB0aGluayBhIGNvbW1lbnQgaGVyZSB0aGF0IHRo aXMgcG9pbnRlciBob2xkcyBhIGZ1bGwgcmVmZXJlbmNlCj4gPiA+ID4gPiA+IChldmVuCj4gPiA+ ID4gPiA+IHBhc3QKPiA+ID4gPiA+ID4gd2hlbiB0aGUgY29ubmVjdG9yIGlzIHVucGx1Z2dlZCkg d291bGQgYmUgZ29vZC4gT3RoZXJ3aXNlIHRoZSBsb29wCj4gPiA+ID4gPiA+IGluCj4gPiA+ID4g PiA+IHJlbGVhc2VfdmNwaSB3b3VsZCBiZSBidWdneS4KPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ ID4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Owo+ID4gPiA+ID4gPiA+ICsJaW50IHZj cGk7Cj4gPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cj4gPiA+ID4gPiA+ID4g K307Cj4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ICBzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSB7Cj4gPiA+ID4gPiA+ID4gIAlzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgYmFz ZTsKPiA+ID4gPiA+ID4gPiAtCWludCBhdmFpbF9zbG90czsKPiA+ID4gPiA+ID4gPiArCXN0cnVj dCBsaXN0X2hlYWQgdmNwaXM7Cj4gPiA+ID4gPiA+ID4gKwl1OCB2Y3BpX2FsbG9jYXRlZDsKPiA+ ID4gPiA+ID4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ID4gPiA+ ID4gPiA+ICB9Owo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IEBAIC02MTksMTQgKzYyNiwx NyBAQCB2b2lkCj4gPiA+ID4gPiA+ID4gZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc3VzcGVuZChz dHJ1Y3QKPiA+ID4gPiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKPiA+ID4g PiA+ID4gPiAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3Jlc3VtZShzdHJ1Y3QKPiA+ID4g PiA+ID4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncgo+ID4gPiA+ID4gPiA+ICptZ3IpOwo+ID4g PiA+ID4gPiA+ICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQo+ID4gPiA+ID4gPiA+ ICpkcm1fYXRvbWljX2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3Rh dGUKPiA+ID4gPiA+ID4gPiAqc3RhdGUsCj4gPiA+ID4gPiA+ID4gIAkJCQkJCQkJICAgIHN0Cj4g PiA+ID4gPiA+ID4gcnVjdAo+ID4gPiA+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICpt Z3IpOwo+ID4gPiA+ID4gPiA+IC1pbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUKPiA+ID4gPiA+ID4gPiAqc3RhdGUsCj4gPiA+ID4gPiA+ID4g LQkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gPiA+ID4gPiA+ IC0JCQkJICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQKPiA+ID4gPiA+ID4gPiBw Ym4pOwo+ID4gPiA+ID4gPiA+IC1pbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMo c3RydWN0IGRybV9hdG9taWNfc3RhdGUKPiA+ID4gPiA+ID4gPiAqc3RhdGUsCj4gPiA+ID4gPiA+ ID4gLQkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncgo+ID4gPiA+ID4gPiA+ ICptZ3IsCj4gPiA+ID4gPiA+ID4gLQkJCQkgICAgIGludCBzbG90cyk7Cj4gPiA+ID4gPiA+ID4g K2ludCBfX211c3RfY2hlY2sKPiA+ID4gPiA+ID4gPiArZHJtX2RwX2F0b21pY19maW5kX3ZjcGlf c2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gPiA+ID4gPiA+ICsJCQkg ICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ID4gPiA+ID4gPiAr CQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibik7Cj4gPiA+ID4g PiA+ID4gK2ludCBfX211c3RfY2hlY2sKPiA+ID4gPiA+ID4gPiArZHJtX2RwX2F0b21pY19yZWxl YXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUKPiA+ID4gPiA+ID4gPiAqc3Rh dGUsCj4gPiA+ID4gPiA+ID4gKwkJCQkgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICpt Z3IsCj4gPiA+ID4gPiA+ID4gKwkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCk7Cj4g PiA+ID4gPiA+ID4gIGludCBkcm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5KHN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21ncgo+ID4gPiA+ID4gPiA+ICptZ3IsCj4gPiA+ID4gPiA+ID4gIAkJ CQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9vbAo+ID4gPiA+ID4gPiA+IHBvd2Vy X3VwKTsKPiA+ID4gPiA+ID4gPiAraW50IF9fbXVzdF9jaGVjayBkcm1fZHBfbXN0X2F0b21pY19j aGVjayhzdHJ1Y3QKPiA+ID4gPiA+ID4gPiBkcm1fYXRvbWljX3N0YXRlCj4gPiA+ID4gPiA+ID4g KnN0YXRlKTsKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiAgZXh0ZXJuIGNvbnN0IHN0cnVj dCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcwo+ID4gPiA+ID4gPiA+IGRybV9kcF9tc3RfdG9wb2xv Z3lfc3RhdGVfZnVuY3M7Cj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gLS0KPiA+ID4gPiA+ ID4gPiAyLjE5LjEKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IC0tCj4g PiA+ID4gPiA+IERhbmllbCBWZXR0ZXIKPiA+ID4gPiA+ID4gU29mdHdhcmUgRW5naW5lZXIsIElu dGVsIENvcnBvcmF0aW9uCj4gPiA+ID4gPiA+IGh0dHA6Ly9ibG9nLmZmd2xsLmNoCj4gPiA+ID4g LS0KPiA+ID4gPiBDaGVlcnMsCj4gPiA+ID4gCUx5dWRlIFBhdWwKPiA+ID4gPiAKPiA+IC0tCj4g PiBDaGVlcnMsCj4gPiAJTHl1ZGUgUGF1bAo+ID4gCi0tIApDaGVlcnMsCglMeXVkZSBQYXVsCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1h aWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXUK