From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v5 06/20] drm/dp_mst: Introduce new refcounting scheme for mstbs and ports Date: Thu, 10 Jan 2019 10:12:12 +0100 Message-ID: <20190110091212.GC21184@phenom.ffwll.local> References: <20190109003516.14752-1-lyude@redhat.com> <20190109003516.14752-7-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190109003516.14752-7-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Lyude Paul Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Jerry Zuo , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Vetter , David Airlie , Harry Wentland , Juston Li List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBKYW4gMDgsIDIwMTkgYXQgMDc6MzU6MDNQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBUaGUgY3VycmVudCB3YXkgb2YgaGFuZGxpbmcgcmVmY291bnRpbmcgaW4gdGhlIERQIE1T VCBoZWxwZXJzIGlzIHJlYWxseQo+IGNvbmZ1c2luZyBhbmQgcHJvYmFibHkganVzdCBwbGFpbiB3 cm9uZyBiZWNhdXNlIGl0J3MgYmVlbiBoYWNrZWQgdXAgbWFueQo+IHRpbWVzIG92ZXIgdGhlIHll YXJzIHdpdGhvdXQgYW55b25lIGFjdHVhbGx5IGdvaW5nIG92ZXIgdGhlIGNvZGUgYW5kCj4gc2Vl aW5nIGlmIHRoaW5ncyBjb3VsZCBiZSBzaW1wbGlmaWVkLgo+IAo+IFRvIHRoZSBiZXN0IG9mIG15 IHVuZGVyc3RhbmRpbmcsIHRoZSBjdXJyZW50IHNjaGVtZSB3b3JrcyBsaWtlIHRoaXM6Cj4gZHJt X2RwX21zdF9wb3J0IGFuZCBkcm1fZHBfbXN0X2JyYW5jaCBib3RoIGhhdmUgYSBzaW5nbGUgcmVm Y291bnQuIFdoZW4KPiB0aGlzIHJlZmNvdW50IGhpdHMgMCBmb3IgZWl0aGVyIG9mIHRoZSB0d28s IHRoZXkncmUgcmVtb3ZlZCBmcm9tIHRoZQo+IHRvcG9sb2d5IHN0YXRlLCBidXQgbm90IGltbWVk aWF0ZWx5IGZyZWVkLiBCb3RoIHBvcnRzIGFuZCBicmFuY2ggZGV2aWNlcwo+IHdpbGwgcmVpbml0 aWFsaXplIHRoZWlyIGtyZWYgb25jZSBpdCdzIGhpdCAwIGJlZm9yZSBhY3R1YWxseSBkZXN0cm95 aW5nCj4gdGhlbXNlbHZlcy4gVGhlIGludGVuZGVkIHB1cnBvc2UgYmVoaW5kIHRoaXMgaXMgc28g dGhhdCB3ZSBjYW4gYXZvaWQKPiBwcm9ibGVtcyBsaWtlIG5vdCBiZWluZyBhYmxlIHRvIGZyZWUg YSByZW1vdGUgcGF5bG9hZCB0aGF0IG1pZ2h0IHN0aWxsCj4gYmUgYWN0aXZlLCBkdWUgdG8gdXMg aGF2aW5nIHJlbW92ZWQgYWxsIG9mIHRoZSBwb3J0L2JyYW5jaCBkZXZpY2UKPiBzdHJ1Y3R1cmVz IGluIG1lbW9yeSwgYXMgcGVyOgo+IAo+IGNvbW1pdCA5MWEyNWU0NjMxMzAgKCJkcm0vZHAvbXN0 OiBkZWFsbG9jYXRlIHBheWxvYWQgb24gcG9ydCBkZXN0cnVjdGlvbiIpCj4gCj4gV2hpY2ggbWF5 IGhhdmUgd29ya2VkLCBidXQgdGhlbiBpdCBjYXVzZWQgdXNlLWFmdGVyLWZyZWUgZXJyb3JzLiBC ZWluZwo+IG5ldyB0byBNU1QgYXQgdGhlIHRpbWUsIEkgdHJpZWQgZml4aW5nIGl0Owo+IAo+IGNv bW1pdCAyNjNlZmRlMzFmOTcgKCJkcm0vZHAvbXN0OiBHZXQgdmFsaWRhdGVkIHBvcnQgcmVmIGlu IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MSgpIikKPiAKPiBCdXQsIHRoYXQgd2FzIGJyb2tl bjogYm90aCBkcm1fZHBfbXN0X3BvcnQgYW5kIGRybV9kcF9tc3RfYnJhbmNoIHN0cnVjdHMKPiBh cmUgdmFsaWRhdGVkIGluIGFsbW9zdCBldmVyeSBEUCBNU1QgaGVscGVyIGZ1bmN0aW9uLiBTaW1w bHkgcHV0LCB0aGlzCj4gbWVhbnMgd2UgZ28gdGhyb3VnaCB0aGUgdG9wb2xvZ3kgYW5kIHRyeSB0 byBzZWUgaWYgdGhlIGdpdmVuCj4gZHJtX2RwX21zdF9icmFuY2ggb3IgZHJtX2RwX21zdF9wb3J0 IGlzIHN0aWxsIGF0dGFjaGVkIHRvIHNvbWV0aGluZwo+IGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0 IGluIG9yZGVyIHRvIGF2b2lkIGRlcmVmZXJlbmNpbmcgZnJlZWQgbWVtb3J5Cj4gKHNvbWV0aGlu ZyB0aGF0IGhhcyBoYXBwZW5lZCBhIExPVCBpbiB0aGUgcGFzdCB3aXRoIHRoaXMgbGlicmFyeSku Cj4gQmVjYXVzZSBvZiB0aGlzIGl0IGRvZXNuJ3QgYWN0dWFsbHkgbWF0dGVyIHdoZXRoZXIgb3Ig bm90IHdlIGtlZXAga2VlcAo+IHRoZSBwb3J0cyBhbmQgYnJhbmNoZXMgYXJvdW5kIGluIG1lbW9y eSBhcyB0aGF0J3Mgbm90IGVub3VnaCwgYmVjYXVzZQo+IGFueSBmdW5jdGlvbiB0aGF0IHZhbGlk YXRlcyB0aGUgYnJhbmNoZXMgYW5kIHBvcnRzIHBhc3NlZCB0byBpdCB3aWxsCj4gc3RpbGwgcmVq ZWN0IHRoZW0gYW55d2F5IHNpbmNlIHRoZXkncmUgbm8gbG9uZ2VyIGluIHRoZSB0b3BvbG9neQo+ IHN0cnVjdHVyZS4gU28sIHVzZS1hZnRlci1mcmVlIGVycm9ycyB3ZXJlIGZpeGVkIGJ1dCBwYXls b2FkIGRlYWxsb2NhdGlvbgo+IHdhcyBjb21wbGV0ZWx5IGJyb2tlbi4KPiAKPiBUd28geWVhcnMg bGF0ZXIsIEFNRCBpbmZvcm1lZCBtZSBhYm91dCB0aGlzIGlzc3VlIGFuZCBJIGF0dGVtcHRlZCB0 bwo+IGNvbWUgdXAgd2l0aCBhIHRlbXBvcmFyeSBmaXgsIHBlbmRpbmcgYSBsb25nLW92ZXJkdWUg Y2xlYW51cCBvZiB0aGlzCj4gbGlicmFyeToKPiAKPiBjb21taXQgYzU0YzczNzRmZjQ0ICgiZHJt L2RwX21zdDogU2tpcCB2YWxpZGF0aW5nIHBvcnRzIGR1cmluZyBkZXN0cnVjdGlvbiwganVzdCBy ZWYiKQo+IAo+IEJ1dCB0aGVuIHRoYXQgaW50cm9kdWNlZCB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMs IHNvIEkgcXVpY2tseSByZXZlcnRlZAo+IGl0Ogo+IAo+IGNvbW1pdCA5NzY1NjM1YjMwNzUgKCJS ZXZlcnQgImRybS9kcF9tc3Q6IFNraXAgdmFsaWRhdGluZyBwb3J0cyBkdXJpbmcgZGVzdHJ1Y3Rp b24sIGp1c3QgcmVmIiIpCj4gCj4gQW5kIGluIHRoZSBwcm9jZXNzLCBsZWFybmVkIHRoYXQgdGhl cmUgaXMganVzdCBubyBzaW1wbGUgZml4IGZvciB0aGlzOgo+IHRoZSBkZXNpZ24gaXMganVzdCBi cm9rZW4uIFVuZm9ydHVuYXRlbHksIHRoZSB1c2FnZSBvZiB0aGVzZSBoZWxwZXJzIGFyZQo+IHF1 aXRlIGJyb2tlbiBhcyB3ZWxsLiBTb21lIGRyaXZlcnMgbGlrZSBpOTE1IGhhdmUgYmVlbiBzbWFy dCBlbm91Z2ggdG8KPiBhdm9pZCBhY2Nlc3NpbmcgYW55IGtpbmQgb2YgaW5mb3JtYXRpb24gZnJv bSBNU1QgcG9ydCBzdHJ1Y3R1cmVzLCBidXQKPiBvdGhlcnMgbGlrZSBub3V2ZWF1IGhhdmUgYXNz dW1lZCwgdW5kZXJzdGFuZGFibHkgc28sIHRoYXQKPiBkcm1fZHBfbXN0X3BvcnQgc3RydWN0dXJl cyBhcmUgbm9ybWFsIGFuZCBjYW4ganVzdCBiZSBhY2Nlc3NlZCBhdCBhbnkKPiB0aW1lIHdpdGhv dXQgd29ycnlpbmcgYWJvdXQgdXNlLWFmdGVyLWZyZWUgZXJyb3JzLgo+IAo+IEFmdGVyIGEgbG90 IG9mIGRpc2N1c3Npb24sIG1lIGFuZCBEYW5pZWwgVmV0dGVyIGNhbWUgdXAgd2l0aCBhIGJldHRl cgo+IGlkZWEgdG8gcmVwbGFjZSBhbGwgb2YgdGhpcy4KPiAKPiBUbyBzdW1tYXJpemUsIHNpbmNl IHRoaXMgaXMgZG9jdW1lbnRlZCBmYXIgbW9yZSBpbmRlcHRoIGluIHRoZQo+IGRvY3VtZW50YXRp b24gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzLCB3ZSBtYWtlIGl0IHNvIHRoYXQgZHJtX2RwX21zdF9w b3J0Cj4gYW5kIGRybV9kcF9tc3RfYnJhbmNoIHN0cnVjdHVyZXMgaGF2ZSB0d28gZGlmZmVyZW50 IGNsYXNzZXMgb2YKPiByZWZjb3VudHM6IHRvcG9sb2d5X2tyZWYsIGFuZCBtYWxsb2Nfa3JlZi4g dG9wb2xvZ3lfa3JlZiBjb3JyZXNwb25kcyB0bwo+IHRoZSBsaWZldGltZSBvZiB0aGUgZ2l2ZW4g ZHJtX2RwX21zdF9wb3J0IG9yIGRybV9kcF9tc3RfYnJhbmNoIGluIGl0J3MKPiBnaXZlbiB0b3Bv bG9neS4gT25jZSBpdCBoaXRzIHplcm8sIGFueSBhc3NvY2lhdGVkIGNvbm5lY3RvcnMgYXJlIHJl bW92ZWQKPiBhbmQgdGhlIGJyYW5jaCBvciBwb3J0IGNhbiBubyBsb25nZXIgYmUgdmFsaWRhdGVk LiBtYWxsb2Nfa3JlZgo+IGNvcnJlc3BvbmRzIHRvIHRoZSBsaWZldGltZSBvZiB0aGUgbWVtb3J5 IGFsbG9jYXRpb24gZm9yIHRoZSBhY3R1YWwKPiBzdHJ1Y3R1cmUsIGFuZCB3aWxsIGFsd2F5cyBi ZSBub24temVybyBzbyBsb25nIGFzIHRoZSB0b3BvbG9neV9rcmVmIGlzCj4gbm9uLXplcm8uIFRo aXMgZ2l2ZXMgdXMgYSB3YXkgdG8gYWxsb3cgY2FsbGVycyB0byBob2xkIG9udG8gcG9ydCBhbmQK PiBicmFuY2ggZGV2aWNlIHN0cnVjdHVyZXMgcGFzdCB0aGVpciB0b3BvbG9neSBsaWZldGltZSwg YW5kIGRyYW1hdGljYWxseQo+IHNpbXBsaWZpZXMgdGhlIGxpZmV0aW1lcyBvZiBib3RoIHN0cnVj dHVyZXMuIFRoaXMgYWxzbyBmaW5hbGx5IGZpeGVzIHRoZQo+IHBvcnQgZGVhbGxvY2F0aW9uIHBy b2JsZW0sIHByb3Blcmx5Lgo+IAo+IEFkZGl0aW9uYWxseTogc2luY2UgdGhpcyBub3cgbWVhbnMg dGhhdCB3ZSBjYW4ga2VlcCBwb3J0cyBhbmQgYnJhbmNoCj4gZGV2aWNlcyBhbGxvY2F0ZWQgaW4g bWVtb3J5IGZvciBob3dldmVyIGxvbmcgd2UgbmVlZCwgd2Ugbm8gbG9uZ2VyIG5lZWQKPiBhIHNp Z25pZmljYW50IGFtb3VudCBvZiB0aGUgcG9ydCB2YWxpZGF0aW9uIHRoYXQgd2UgY3VycmVudGx5 IGRvLgo+IAo+IEFkZGl0aW9uYWxseSwgdGhlcmUgaXMgb25lIGxhc3Qgc2NlbmFyaW8gdGhhdCB0 aGlzIGZpeGVzLCB3aGljaCBjb3VsZG4ndAo+IGhhdmUgYmVlbiBmaXhlZCBwcm9wZXJseSBiZWZv cmVoYW5kOgo+IAo+IC0gQ1BVMSB1bnJlZnMgcG9ydCBmcm9tIHRvcG9sb2d5IChyZWZjb3VudCAx LT4wKQo+IC0gQ1BVMiByZWZzIHBvcnQgaW4gdG9wb2xvZ3kocmVmY291bnQgMC0+MSkKPiAKPiBT aW5jZSB3ZSBub3cgY2FuIGd1YXJhbnRlZSBtZW1vcnkgc2FmZXR5IGZvciBwb3J0cyBhbmQgYnJh bmNoZXMKPiBhcy1uZWVkZWQsIHdlIGFsc28gY2FuIG1ha2Ugb3VyIG1haW4gcmVmZXJlbmNlIGNv dW50aW5nIGZ1bmN0aW9ucyBmaXgKPiB0aGlzIHByb2JsZW0gYnkgdXNpbmcga3JlZl9nZXRfdW5s ZXNzX3plcm8oKSBpbnRlcm5hbGx5IHNvIHRoYXQgdG9wb2xvZ3kKPiByZWZjb3VudHMgY2FuIG9u bHkgZXZlciByZWFjaCAwIG9uY2UuCj4gCj4gQ2hhbmdlcyBzaW5jZSB2MzoKPiAqIFJlbW92ZSBy ZWJhc2UgZGV0cml0dXMgLSBkYW52ZXQKPiAqIFNwbGl0IG91dCBwdXJlbHkgc3R5bGUgY2hhbmdl cyBpbnRvIHNlcGFyYXRlIHBhdGNoZXMgLSBod2VudGxhbgo+IAo+IENoYW5nZXMgc2luY2UgdjI6 Cj4gKiBGaXggY29tbWl0IG1lc3NhZ2UgLSBjaGVja3BhdGNoCj4gKiBzLyktMS8pIC0gMS9nIC0g Y2hlY2twYXRjaAo+IAo+IENoYW5nZXMgc2luY2UgdjE6Cj4gKiBSZW1vdmUgZm9yd2FyZCBkZWNs YXJhdGlvbnMgLSBkYW52ZXQKPiAqIE1vdmUgIkJyYW5jaCBkZXZpY2UgYW5kIHBvcnQgcmVmY291 bnRpbmciIHNlY3Rpb24gZnJvbSBkb2N1bWVudGF0aW9uCj4gICBpbnRvIGtlcm5lbC1kb2MgY29t bWVudHMgLSBkYW52ZXQKPiAqIEV4cG9ydCBpbnRlcm5hbCB0b3BvbG9neSBsaWZldGltZSBmdW5j dGlvbnMgaW50byB0aGVpciBvd24gc2VjdGlvbiBpbgo+ICAgdGhlIGtlcm5lbC1kb2NzIC0gZGFu dmV0Cj4gKiBzL0AvJi9nIGZvciBzdHJ1Y3QgcmVmZXJlbmNlcyBpbiBrZXJuZWwtZG9jcyAtIGRh bnZldAo+ICogRHJvcCB0aGUgIndoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIGJlaW5nIHVzZWQiIGJp dHMgZnJvbSB0aGUga2VybmVsCj4gICBkb2NzIC0gZGFudmV0Cj4gKiBNb2RpZnkgZGlhZ3JhbXMg dG8gc2hvdyBob3cgdGhlIERSTSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIHRvcG9sb2d5Cj4g ICBhbmQgcGF5bG9hZHMgLSBkYW52ZXQKPiAqIE1ha2Ugc3VnZ2VzdGVkIGRvY3VtZW50YXRpb24g Y2hhbmdlcyBmb3IKPiAgIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGIoKSBhbmQgZHJtX2Rw X21zdF90b3BvbG9neV9nZXRfcG9ydCgpIC0KPiAgIGRhbnZldAo+ICogQmV0dGVyIGV4cGxhaW4g dGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG1hbGxvYyByZWZzIGFuZCB0b3BvbG9neSBrcmVmcwo+ ICAgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQo KSBhbmQKPiAgIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGIoKSAtIGRhbnZldAo+ICogRml4 ICJTZWUgYWxzbyIgaW4gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YigpIC0gZGFudmV0Cj4g KiBSZW5hbWUgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfKHBvcnR8bXN0YikoKSAtPgo+ICAgZHJt X2RwX21zdF90b3BvbG9neV90cnlfZ2V0Xyhwb3J0fG1zdGIpKCkgYW5kCj4gICBkcm1fZHBfbXN0 X3RvcG9sb2d5X3JlZl8ocG9ydHxtc3RiKSgpIC0+Cj4gICBkcm1fZHBfbXN0X3RvcG9sb2d5X2dl dF8ocG9ydHxtc3RiKSgpIC0gZGFudmV0Cj4gKiBzL3Nob3VsZC9tdXN0IGluIGRvY3MgLSBkYW52 ZXQKPiAqIFdBUk5fT04ocmVmY291bnQgPT0gMCkgaW4gdG9wb2xvZ3lfZ2V0Xyhtc3RifHBvcnQp IC0gZGFudmV0Cj4gKiBNb3ZlIGtkb2NzIGZvciBtc3RiL3BvcnQgc3RydWN0cyBpbmxpbmUgLSBk YW52ZXQKPiAqIFNwbGl0IGRybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRfcG9ydF9hbmRfbXN0Yigp IGNoYW5nZXMgaW50byB0aGVpciBvd24KPiAgIGNvbW1pdCAtIGRhbnZldAo+IAo+IFNpZ25lZC1v ZmYtYnk6IEx5dWRlIFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+Cj4gUmV2aWV3ZWQtYnk6IEhhcnJ5 IFdlbnRsYW5kIDxoYXJyeS53ZW50bGFuZEBhbWQuY29tPgo+IENjOiBEYW5pZWwgVmV0dGVyIDxk YW5pZWxAZmZ3bGwuY2g+Cj4gQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgo+ IENjOiBKZXJyeSBadW8gPEplcnJ5Llp1b0BhbWQuY29tPgo+IENjOiBKdXN0b24gTGkgPGp1c3Rv bi5saUBpbnRlbC5jb20+Cj4gLS0tCj4gIC4uLi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0x LmRvdCAgICAgICAgICB8ICA1MiArKwo+ICAuLi4vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUt Mi5kb3QgICAgICAgICAgfCAgNTYgKysrCj4gIC4uLi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3Vy ZS0zLmRvdCAgICAgICAgICB8ICA1OSArKysKPiAgRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1o ZWxwZXJzLnJzdCAgICAgICAgIHwgIDI2ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0 X3RvcG9sb2d5LmMgICAgICAgICB8IDQ1NyArKysrKysrKysrKysrKystLS0KPiAgaW5jbHVkZS9k cm0vZHJtX2RwX21zdF9oZWxwZXIuaCAgICAgICAgICAgICAgIHwgIDMyICstCj4gIDYgZmlsZXMg Y2hhbmdlZCwgNjEzIGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRvdAo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZp Z3VyZS0yLmRvdAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0 L3RvcG9sb2d5LWZpZ3VyZS0zLmRvdAo+IAo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dw dS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTEuZG90IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0 L3RvcG9sb2d5LWZpZ3VyZS0xLmRvdAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwLi4xNTdlMTdjN2UwYjAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvRG9jdW1lbnRh dGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRvdAo+IEBAIC0wLDAgKzEsNTIgQEAK PiArZGlncmFwaCBUIHsKPiArICAgIC8qIE1ha2Ugc3VyZSBvdXIgcGF5bG9hZHMgYXJlIGFsd2F5 cyBkcmF3biBiZWxvdyB0aGUgZHJpdmVyIG5vZGUgKi8KPiArICAgIHN1YmdyYXBoIGNsdXN0ZXJf ZHJpdmVyIHsKPiArICAgICAgICBmaWxsY29sb3IgPSBncmV5Owo+ICsgICAgICAgIHN0eWxlID0g ZmlsbGVkOwo+ICsgICAgICAgIGRyaXZlciAtPiB7cGF5bG9hZDEsIHBheWxvYWQyfSBbZGlyPW5v bmVdOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIERyaXZlciBtYWxsb2MgcmVmZXJlbmNlcyAqLwo+ ICsgICAgZWRnZSBbc3R5bGU9ZGFzaGVkXTsKPiArICAgIGRyaXZlciAtPiBwb3J0MTsKPiArICAg IGRyaXZlciAtPiBwb3J0MjsKPiArICAgIGRyaXZlciAtPiBwb3J0MzplOwo+ICsgICAgZHJpdmVy IC0+IHBvcnQ0Owo+ICsKPiArICAgIHBheWxvYWQxOnMgLT4gcG9ydDE6ZTsKPiArICAgIHBheWxv YWQyOnMgLT4gcG9ydDM6ZTsKPiArICAgIGVkZ2UgW3N0eWxlPSIiXTsKPiArCj4gKyAgICBzdWJn cmFwaCBjbHVzdGVyX3RvcG9sb2d5IHsKPiArICAgICAgICBsYWJlbD0iVG9wb2xvZ3kgTWFuYWdl ciI7Cj4gKyAgICAgICAgbGFiZWxsb2M9Ym90dG9tOwo+ICsKPiArICAgICAgICAvKiBUb3BvbG9n eSByZWZlcmVuY2VzICovCj4gKyAgICAgICAgbXN0YjEgLT4ge3BvcnQxLCBwb3J0Mn07Cj4gKyAg ICAgICAgcG9ydDEgLT4gbXN0YjI7Cj4gKyAgICAgICAgcG9ydDIgLT4gbXN0YjMgLT4ge3BvcnQz LCBwb3J0NH07Cj4gKyAgICAgICAgcG9ydDMgLT4gbXN0YjQ7Cj4gKwo+ICsgICAgICAgIC8qIE1h bGxvYyByZWZlcmVuY2VzICovCj4gKyAgICAgICAgZWRnZSBbc3R5bGU9ZGFzaGVkO2Rpcj1iYWNr XTsKPiArICAgICAgICBtc3RiMSAtPiB7cG9ydDEsIHBvcnQyfTsKPiArICAgICAgICBwb3J0MSAt PiBtc3RiMjsKPiArICAgICAgICBwb3J0MiAtPiBtc3RiMyAtPiB7cG9ydDMsIHBvcnQ0fTsKPiAr ICAgICAgICBwb3J0MyAtPiBtc3RiNDsKPiArICAgIH0KPiArCj4gKyAgICBkcml2ZXIgW2xhYmVs PSJEUk0gZHJpdmVyIjtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVd Owo+ICsKPiArICAgIHBheWxvYWQxIFtsYWJlbD0iUGF5bG9hZCAjMSI7c3R5bGU9ZmlsbGVkO3No YXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVlXTsKPiArICAgIHBheWxvYWQyIFtsYWJlbD0iUGF5 bG9hZCAjMiI7c3R5bGU9ZmlsbGVkO3NoYXBlPWJveDtmaWxsY29sb3I9bGlnaHRibHVlXTsKPiAr Cj4gKyAgICBtc3RiMSBbbGFiZWw9Ik1TVEIgIzEiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFs ZWdyZWVuO3NoYXBlPW92YWxdOwo+ICsgICAgbXN0YjIgW2xhYmVsPSJNU1RCICMyIjtzdHlsZT1m aWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbjtzaGFwZT1vdmFsXTsKPiArICAgIG1zdGIzIFtsYWJl bD0iTVNUQiAjMyI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW47c2hhcGU9b3ZhbF07 Cj4gKyAgICBtc3RiNCBbbGFiZWw9Ik1TVEIgIzQiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFs ZWdyZWVuO3NoYXBlPW92YWxdOwo+ICsKPiArICAgIHBvcnQxIFtsYWJlbD0iUG9ydCAjMSI7c2hh cGU9b3ZhbF07Cj4gKyAgICBwb3J0MiBbbGFiZWw9IlBvcnQgIzIiO3NoYXBlPW92YWxdOwo+ICsg ICAgcG9ydDMgW2xhYmVsPSJQb3J0ICMzIjtzaGFwZT1vdmFsXTsKPiArICAgIHBvcnQ0IFtsYWJl bD0iUG9ydCAjNCI7c2hhcGU9b3ZhbF07Cj4gK30KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0yLmRvdCBiL0RvY3VtZW50YXRpb24vZ3B1L2Rw LW1zdC90b3BvbG9neS1maWd1cmUtMi5kb3QKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uNDI0M2RkMTczN2NiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0RvY3Vt ZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMi5kb3QKPiBAQCAtMCwwICsxLDU2 IEBACj4gK2RpZ3JhcGggVCB7Cj4gKyAgICAvKiBNYWtlIHN1cmUgb3VyIHBheWxvYWRzIGFyZSBh bHdheXMgZHJhd24gYmVsb3cgdGhlIGRyaXZlciBub2RlICovCj4gKyAgICBzdWJncmFwaCBjbHVz dGVyX2RyaXZlciB7Cj4gKyAgICAgICAgZmlsbGNvbG9yID0gZ3JleTsKPiArICAgICAgICBzdHls ZSA9IGZpbGxlZDsKPiArICAgICAgICBkcml2ZXIgLT4ge3BheWxvYWQxLCBwYXlsb2FkMn0gW2Rp cj1ub25lXTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBEcml2ZXIgbWFsbG9jIHJlZmVyZW5jZXMg Ki8KPiArICAgIGVkZ2UgW3N0eWxlPWRhc2hlZF07Cj4gKyAgICBkcml2ZXIgLT4gcG9ydDE7Cj4g KyAgICBkcml2ZXIgLT4gcG9ydDI7Cj4gKyAgICBkcml2ZXIgLT4gcG9ydDM6ZTsKPiArICAgIGRy aXZlciAtPiBwb3J0NCBbY29sb3I9cmVkXTsKPiArCj4gKyAgICBwYXlsb2FkMTpzIC0+IHBvcnQx OmU7Cj4gKyAgICBwYXlsb2FkMjpzIC0+IHBvcnQzOmU7Cj4gKyAgICBlZGdlIFtzdHlsZT0iIl07 Cj4gKwo+ICsgICAgc3ViZ3JhcGggY2x1c3Rlcl90b3BvbG9neSB7Cj4gKyAgICAgICAgbGFiZWw9 IlRvcG9sb2d5IE1hbmFnZXIiOwo+ICsgICAgICAgIGxhYmVsbG9jPWJvdHRvbTsKPiArCj4gKyAg ICAgICAgLyogVG9wb2xvZ3kgcmVmZXJlbmNlcyAqLwo+ICsgICAgICAgIG1zdGIxIC0+IHtwb3J0 MSwgcG9ydDJ9Owo+ICsgICAgICAgIHBvcnQxIC0+IG1zdGIyOwo+ICsgICAgICAgIGVkZ2UgW2Nv bG9yPXJlZF07Cj4gKyAgICAgICAgcG9ydDIgLT4gbXN0YjMgLT4ge3BvcnQzLCBwb3J0NH07Cj4g KyAgICAgICAgcG9ydDMgLT4gbXN0YjQ7Cj4gKyAgICAgICAgZWRnZSBbY29sb3I9IiJdOwo+ICsK PiArICAgICAgICAvKiBNYWxsb2MgcmVmZXJlbmNlcyAqLwo+ICsgICAgICAgIGVkZ2UgW3N0eWxl PWRhc2hlZDtkaXI9YmFja107Cj4gKyAgICAgICAgbXN0YjEgLT4ge3BvcnQxLCBwb3J0Mn07Cj4g KyAgICAgICAgcG9ydDEgLT4gbXN0YjI7Cj4gKyAgICAgICAgcG9ydDIgLT4gbXN0YjMgLT4gcG9y dDM7Cj4gKyAgICAgICAgZWRnZSBbY29sb3I9cmVkXTsKPiArICAgICAgICBtc3RiMyAtPiBwb3J0 NDsKPiArICAgICAgICBwb3J0MyAtPiBtc3RiNDsKPiArICAgIH0KPiArCj4gKyAgICBtc3RiMSBb bGFiZWw9Ik1TVEIgIzEiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuXTsKPiArICAg IG1zdGIyIFtsYWJlbD0iTVNUQiAjMiI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5d Owo+ICsgICAgbXN0YjMgW2xhYmVsPSJNU1RCICMzIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBh bGVncmVlbl07Cj4gKyAgICBtc3RiNCBbbGFiZWw9Ik1TVEIgIzQiO3N0eWxlPWZpbGxlZDtmaWxs Y29sb3I9Z3JleV07Cj4gKwo+ICsgICAgcG9ydDEgW2xhYmVsPSJQb3J0ICMxIl07Cj4gKyAgICBw b3J0MiBbbGFiZWw9IlBvcnQgIzIiXTsKPiArICAgIHBvcnQzIFtsYWJlbD0iUG9ydCAjMyJdOwo+ ICsgICAgcG9ydDQgW2xhYmVsPSJQb3J0ICM0IjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPWdyZXld Owo+ICsKPiArICAgIGRyaXZlciBbbGFiZWw9IkRSTSBkcml2ZXIiO3N0eWxlPWZpbGxlZDtzaGFw ZT1ib3g7ZmlsbGNvbG9yPWxpZ2h0Ymx1ZV07Cj4gKwo+ICsgICAgcGF5bG9hZDEgW2xhYmVsPSJQ YXlsb2FkICMxIjtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVdOwo+ ICsgICAgcGF5bG9hZDIgW2xhYmVsPSJQYXlsb2FkICMyIjtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94 O2ZpbGxjb2xvcj1saWdodGJsdWVdOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24v Z3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMy5kb3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1t c3QvdG9wb2xvZ3ktZmlndXJlLTMuZG90Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwMDAuLjZjZDc4ZDA2Nzc4Ygo+IC0tLSAvZGV2L251bGwKPiArKysgYi9Eb2N1bWVu dGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTMuZG90Cj4gQEAgLTAsMCArMSw1OSBA QAo+ICtkaWdyYXBoIFQgewo+ICsgICAgLyogTWFrZSBzdXJlIG91ciBwYXlsb2FkcyBhcmUgYWx3 YXlzIGRyYXduIGJlbG93IHRoZSBkcml2ZXIgbm9kZSAqLwo+ICsgICAgc3ViZ3JhcGggY2x1c3Rl cl9kcml2ZXIgewo+ICsgICAgICAgIGZpbGxjb2xvciA9IGdyZXk7Cj4gKyAgICAgICAgc3R5bGUg PSBmaWxsZWQ7Cj4gKyAgICAgICAgZWRnZSBbZGlyPW5vbmVdOwo+ICsgICAgICAgIGRyaXZlciAt PiBwYXlsb2FkMTsKPiArICAgICAgICBkcml2ZXIgLT4gcGF5bG9hZDIgW3BlbndpZHRoPTNdOwo+ ICsgICAgICAgIGVkZ2UgW2Rpcj0iIl07Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogRHJpdmVyIG1h bGxvYyByZWZlcmVuY2VzICovCj4gKyAgICBlZGdlIFtzdHlsZT1kYXNoZWRdOwo+ICsgICAgZHJp dmVyIC0+IHBvcnQxOwo+ICsgICAgZHJpdmVyIC0+IHBvcnQyOwo+ICsgICAgZHJpdmVyIC0+IHBv cnQzOmU7Cj4gKyAgICBkcml2ZXIgLT4gcG9ydDQgW2NvbG9yPWdyZXldOwo+ICsgICAgcGF5bG9h ZDE6cyAtPiBwb3J0MTplOwo+ICsgICAgcGF5bG9hZDI6cyAtPiBwb3J0MzplIFtwZW53aWR0aD0z XTsKPiArICAgIGVkZ2UgW3N0eWxlPSIiXTsKPiArCj4gKyAgICBzdWJncmFwaCBjbHVzdGVyX3Rv cG9sb2d5IHsKPiArICAgICAgICBsYWJlbD0iVG9wb2xvZ3kgTWFuYWdlciI7Cj4gKyAgICAgICAg bGFiZWxsb2M9Ym90dG9tOwo+ICsKPiArICAgICAgICAvKiBUb3BvbG9neSByZWZlcmVuY2VzICov Cj4gKyAgICAgICAgbXN0YjEgLT4ge3BvcnQxLCBwb3J0Mn07Cj4gKyAgICAgICAgcG9ydDEgLT4g bXN0YjI7Cj4gKyAgICAgICAgZWRnZSBbY29sb3I9Z3JleV07Cj4gKyAgICAgICAgcG9ydDIgLT4g bXN0YjMgLT4ge3BvcnQzLCBwb3J0NH07Cj4gKyAgICAgICAgcG9ydDMgLT4gbXN0YjQ7Cj4gKyAg ICAgICAgZWRnZSBbY29sb3I9IiJdOwo+ICsKPiArICAgICAgICAvKiBNYWxsb2MgcmVmZXJlbmNl cyAqLwo+ICsgICAgICAgIGVkZ2UgW3N0eWxlPWRhc2hlZDtkaXI9YmFja107Cj4gKyAgICAgICAg bXN0YjEgLT4ge3BvcnQxLCBwb3J0Mn07Cj4gKyAgICAgICAgcG9ydDEgLT4gbXN0YjI7Cj4gKyAg ICAgICAgcG9ydDIgLT4gbXN0YjMgW3BlbndpZHRoPTNdOwo+ICsgICAgICAgIG1zdGIzIC0+IHBv cnQzIFtwZW53aWR0aD0zXTsKPiArICAgICAgICBlZGdlIFtjb2xvcj1ncmV5XTsKPiArICAgICAg ICBtc3RiMyAtPiBwb3J0NDsKPiArICAgICAgICBwb3J0MyAtPiBtc3RiNDsKPiArICAgIH0KPiAr Cj4gKyAgICBtc3RiMSBbbGFiZWw9Ik1TVEIgIzEiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFs ZWdyZWVuXTsKPiArICAgIG1zdGIyIFtsYWJlbD0iTVNUQiAjMiI7c3R5bGU9ZmlsbGVkO2ZpbGxj b2xvcj1wYWxlZ3JlZW5dOwo+ICsgICAgbXN0YjMgW2xhYmVsPSJNU1RCICMzIjtzdHlsZT1maWxs ZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbjtwZW53aWR0aD0zXTsKPiArICAgIG1zdGI0IFtsYWJlbD0i TVNUQiAjNCI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1ncmV5XTsKPiArCj4gKyAgICBwb3J0MSBb bGFiZWw9IlBvcnQgIzEiXTsKPiArICAgIHBvcnQyIFtsYWJlbD0iUG9ydCAjMiI7cGVud2lkdGg9 NV07Cj4gKyAgICBwb3J0MyBbbGFiZWw9IlBvcnQgIzMiO3BlbndpZHRoPTNdOwo+ICsgICAgcG9y dDQgW2xhYmVsPSJQb3J0ICM0IjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPWdyZXldOwo+ICsKPiAr ICAgIGRyaXZlciBbbGFiZWw9IkRSTSBkcml2ZXIiO3N0eWxlPWZpbGxlZDtzaGFwZT1ib3g7Zmls bGNvbG9yPWxpZ2h0Ymx1ZV07Cj4gKwo+ICsgICAgcGF5bG9hZDEgW2xhYmVsPSJQYXlsb2FkICMx IjtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1saWdodGJsdWVdOwo+ICsgICAgcGF5 bG9hZDIgW2xhYmVsPSJQYXlsb2FkICMyIjtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xv cj1saWdodGJsdWU7cGVud2lkdGg9M107Cj4gK30KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVs cGVycy5yc3QKPiBpbmRleCBiNDIyZWI4ZWRmMTYuLjdhM2ZjNTY5YmM2OCAxMDA2NDQKPiAtLS0g YS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0Cj4gKysrIGIvRG9jdW1lbnRh dGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdAo+IEBAIC0yMDgsMTggKzIwOCw0MCBAQCBEaXNw bGF5IFBvcnQgRHVhbCBNb2RlIEFkYXB0b3IgSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UKPiAg Li4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfZHVhbF9tb2RlX2hlbHBlci5j Cj4gICAgIDpleHBvcnQ6Cj4gIAo+IC1EaXNwbGF5IFBvcnQgTVNUIEhlbHBlciBGdW5jdGlvbnMg UmVmZXJlbmNlCj4gLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K PiArRGlzcGxheSBQb3J0IE1TVCBIZWxwZXJzCj4gKz09PT09PT09PT09PT09PT09PT09PT09PQo+ ICsKPiArT3ZlcnZpZXcKPiArLS0tLS0tLS0KPiAgCj4gIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJz L2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gICAgIDpkb2M6IGRwIG1zdCBoZWxwZXIK PiAgCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9n eS5jCj4gKyAgIDpkb2M6IEJyYW5jaCBkZXZpY2UgYW5kIHBvcnQgcmVmY291bnRpbmcKPiArCj4g K0Z1bmN0aW9ucyBSZWZlcmVuY2UKPiArLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsKPiAgLi4ga2Vy bmVsLWRvYzo6IGluY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiAgICAgOmludGVybmFs Ogo+ICAKPiAgLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9s b2d5LmMKPiAgICAgOmV4cG9ydDoKPiAgCj4gK1RvcG9sb2d5IExpZmV0aW1lIEludGVybmFscwo+ ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArCj4gK1RoZXNlIGZ1bmN0aW9ucyBhcmVu J3QgZXhwb3J0ZWQgdG8gZHJpdmVycywgYnV0IGFyZSBkb2N1bWVudGVkIGhlcmUgdG8gaGVscCBt YWtlCj4gK3RoZSBNU1QgdG9wb2xvZ3kgaGVscGVycyBlYXNpZXIgdG8gdW5kZXJzdGFuZAo+ICsK PiArLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMK PiArICAgOmZ1bmN0aW9uczogZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIgZHJtX2Rw X21zdF90b3BvbG9neV9nZXRfbXN0Ygo+ICsgICAgICAgICAgICAgICBkcm1fZHBfbXN0X3RvcG9s b2d5X3B1dF9tc3RiCj4gKyAgICAgICAgICAgICAgIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dl dF9wb3J0IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQKPiArICAgICAgICAgICAgICAgZHJt X2RwX21zdF90b3BvbG9neV9wdXRfcG9ydAo+ICsgICAgICAgICAgICAgICBkcm1fZHBfbXN0X2dl dF9tc3RiX21hbGxvYyBkcm1fZHBfbXN0X3B1dF9tc3RiX21hbGxvYwo+ICsKPiAgTUlQSSBEU0kg SGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UKPiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3Rv cG9sb2d5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gaW5kZXgg MDc0ZTk4NTA5M2NhLi5jNTNjZjdlYjFkYmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0 X3RvcG9sb2d5LmMKPiBAQCAtODUwLDQ2ICs4NTAsMjExIEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2Rw X21zdF9icmFuY2ggKmRybV9kcF9hZGRfbXN0X2JyYW5jaF9kZXZpY2UodTggbGN0LCB1OCAqcmFk KQo+ICAJaWYgKGxjdCA+IDEpCj4gIAkJbWVtY3B5KG1zdGItPnJhZCwgcmFkLCBsY3QgLyAyKTsK PiAgCUlOSVRfTElTVF9IRUFEKCZtc3RiLT5wb3J0cyk7Cj4gLQlrcmVmX2luaXQoJm1zdGItPmty ZWYpOwo+ICsJa3JlZl9pbml0KCZtc3RiLT50b3BvbG9neV9rcmVmKTsKPiArCWtyZWZfaW5pdCgm bXN0Yi0+bWFsbG9jX2tyZWYpOwo+ICAJcmV0dXJuIG1zdGI7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2 b2lkIGRybV9kcF9mcmVlX21zdF9wb3J0KHN0cnVjdCBrcmVmICprcmVmKTsKPiAtCj4gIHN0YXRp YyB2b2lkIGRybV9kcF9mcmVlX21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKQo+ ICB7Cj4gLQlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIgPSBjb250YWluZXJfb2Yoa3Jl Ziwgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoLCBrcmVmKTsKPiAtCWlmIChtc3RiLT5wb3J0X3Bh cmVudCkgewo+IC0JCWlmIChsaXN0X2VtcHR5KCZtc3RiLT5wb3J0X3BhcmVudC0+bmV4dCkpCj4g LQkJCWtyZWZfcHV0KCZtc3RiLT5wb3J0X3BhcmVudC0+a3JlZiwgZHJtX2RwX2ZyZWVfbXN0X3Bv cnQpOwo+IC0JfQo+ICsJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiID0KPiArCQljb250 YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoLCBtYWxsb2Nfa3JlZik7Cj4g Kwo+ICsJaWYgKG1zdGItPnBvcnRfcGFyZW50KQo+ICsJCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFs bG9jKG1zdGItPnBvcnRfcGFyZW50KTsKPiArCj4gIAlrZnJlZShtc3RiKTsKPiAgfQo+ICAKPiAr LyoqCj4gKyAqIERPQzogQnJhbmNoIGRldmljZSBhbmQgcG9ydCByZWZjb3VudGluZwo+ICsgKgo+ ICsgKiBUb3BvbG9neSByZWZjb3VudCBvdmVydmlldwo+ICsgKiB+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fgo+ICsgKgo+ICsgKiBUaGUgcmVmY291bnRpbmcgc2NoZW1lcyBmb3IgJnN0cnVjdCBk cm1fZHBfbXN0X2JyYW5jaCBhbmQgJnN0cnVjdAo+ICsgKiBkcm1fZHBfbXN0X3BvcnQgYXJlIHNv bWV3aGF0IHVudXN1YWwuIEJvdGggcG9ydHMgYW5kIGJyYW5jaCBkZXZpY2VzIGhhdmUKPiArICog dHdvIGRpZmZlcmVudCBraW5kcyBvZiByZWZjb3VudHM6IHRvcG9sb2d5IHJlZmNvdW50cywgYW5k IG1hbGxvYyByZWZjb3VudHMuCj4gKyAqCj4gKyAqIFRvcG9sb2d5IHJlZmNvdW50cyBhcmUgbm90 IGV4cG9zZWQgdG8gZHJpdmVycywgYW5kIGFyZSBoYW5kbGVkIGludGVybmFsbHkKPiArICogYnkg dGhlIERQIE1TVCBoZWxwZXJzLiBUaGUgaGVscGVycyB1c2UgdGhlbSBpbiBvcmRlciB0byBwcmV2 ZW50IHRoZQo+ICsgKiBpbi1tZW1vcnkgdG9wb2xvZ3kgc3RhdGUgZnJvbSBiZWluZyBjaGFuZ2Vk IGluIHRoZSBtaWRkbGUgb2YgY3JpdGljYWwKPiArICogb3BlcmF0aW9ucyBsaWtlIGNoYW5naW5n IHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiBwYXlsb2FkIGFsbG9jYXRpb25zLiBUaGlzCj4gKyAqIG1l YW5zIGVhY2ggYnJhbmNoIGFuZCBwb3J0IHdpbGwgYmUgY29uc2lkZXJlZCB0byBiZSBjb25uZWN0 ZWQgdG8gdGhlIHJlc3QKPiArICogb2YgdGhlIHRvcG9sb2d5IHVudGlsIGl0J3MgdG9wb2xvZ3kg cmVmY291bnQgcmVhY2hlcyB6ZXJvLiBBZGRpdGlvbmFsbHksCj4gKyAqIGZvciBwb3J0cyB0aGlz IG1lYW5zIHRoYXQgdGhlaXIgYXNzb2NpYXRlZCAmc3RydWN0IGRybV9jb25uZWN0b3Igd2lsbCBz dGF5Cj4gKyAqIHJlZ2lzdGVyZWQgd2l0aCB1c2Vyc3BhY2UgdW50aWwgdGhlIHBvcnQncyByZWZj b3VudCByZWFjaGVzIDAuCj4gKyAqCj4gKyAqIE1hbGxvYyByZWZjb3VudCBvdmVydmlldwo+ICsg KiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KPiArICoKPiArICogTWFsbG9jIHJlZmVyZW5jZXMg YXJlIHVzZWQgdG8ga2VlcCBhICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IG9yICZzdHJ1Y3QKPiAr ICogZHJtX2RwX21zdF9icmFuY2ggYWxsb2NhdGVkIGV2ZW4gYWZ0ZXIgYWxsIG9mIGl0cyB0b3Bv bG9neSByZWZlcmVuY2VzIGhhdmUKPiArICogYmVlbiBkcm9wcGVkLCBzbyB0aGF0IHRoZSBkcml2 ZXIgb3IgTVNUIGhlbHBlcnMgY2FuIHNhZmVseSBhY2Nlc3MgZWFjaAo+ICsgKiBicmFuY2gncyBs YXN0IGtub3duIHN0YXRlIGJlZm9yZSBpdCB3YXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIHRvcG9s b2d5Lgo+ICsgKiBXaGVuIHRoZSBtYWxsb2MgcmVmY291bnQgb2YgYSBwb3J0IG9yIGJyYW5jaCBy ZWFjaGVzIDAsIHRoZSBtZW1vcnkKPiArICogYWxsb2NhdGlvbiBjb250YWluaW5nIHRoZSAmc3Ry dWN0IGRybV9kcF9tc3RfYnJhbmNoIG9yICZzdHJ1Y3QKPiArICogZHJtX2RwX21zdF9wb3J0IHJl c3BlY3RpdmVseSB3aWxsIGJlIGZyZWVkLgo+ICsgKgo+ICsgKiBGb3IgJnN0cnVjdCBkcm1fZHBf bXN0X2JyYW5jaCwgbWFsbG9jIHJlZmNvdW50cyBhcmUgbm90IGN1cnJlbnRseSBleHBvc2VkCj4g KyAqIHRvIGRyaXZlcnMuIEFzIG9mIHdyaXRpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCB0aGVyZSBh cmUgbm8gZHJpdmVycyB0aGF0Cj4gKyAqIGhhdmUgYSB1c2VjYXNlIGZvciBhY2Nlc3NpbmcgJnN0 cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCBvdXRzaWRlIG9mIHRoZSBNU1QKPiArICogaGVscGVycy4g RXhwb3NpbmcgdGhpcyBBUEkgdG8gZHJpdmVycyBpbiBhIHJhY2UtZnJlZSBtYW5uZXIgd291bGQg dGFrZSBtb3JlCj4gKyAqIHR3ZWFraW5nIG9mIHRoZSByZWZjb3VudGluZyBzY2hlbWUsIGhvd2V2 ZXIgcGF0Y2hlcyBhcmUgd2VsY29tZSBwcm92aWRlZAo+ICsgKiB0aGVyZSBpcyBhIGxlZ2l0aW1h dGUgZHJpdmVyIHVzZWNhc2UgZm9yIHRoaXMuCj4gKyAqCj4gKyAqIFJlZmNvdW50IHJlbGF0aW9u c2hpcHMgaW4gYSB0b3BvbG9neQo+ICsgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn4KPiArICoKPiArICogTGV0J3MgdGFrZSBhIGxvb2sgYXQgd2h5IHRoZSByZWxhdGlvbnNo aXAgYmV0d2VlbiB0b3BvbG9neSBhbmQgbWFsbG9jCj4gKyAqIHJlZmNvdW50cyBpcyBkZXNpZ25l ZCB0aGUgd2F5IGl0IGlzLgo+ICsgKgo+ICsgKiAuLiBrZXJuZWwtZmlndXJlOjogZHAtbXN0L3Rv cG9sb2d5LWZpZ3VyZS0xLmRvdAo+ICsgKgo+ICsgKiAgICBBbiBleGFtcGxlIG9mIHRvcG9sb2d5 IGFuZCBtYWxsb2MgcmVmcyBpbiBhIERQIE1TVCB0b3BvbG9neSB3aXRoIHR3bwo+ICsgKiAgICBh Y3RpdmUgcGF5bG9hZHMuIFRvcG9sb2d5IHJlZmNvdW50IGluY3JlbWVudHMgYXJlIGluZGljYXRl ZCBieSBzb2xpZAo+ICsgKiAgICBsaW5lcywgYW5kIG1hbGxvYyByZWZjb3VudCBpbmNyZW1lbnRz IGFyZSBpbmRpY2F0ZWQgYnkgZGFzaGVkIGxpbmVzLgo+ICsgKiAgICBFYWNoIHN0YXJ0cyBmcm9t IHRoZSBicmFuY2ggd2hpY2ggaW5jcmVtZW50ZWQgdGhlIHJlZmNvdW50LCBhbmQgZW5kcyBhdAo+ ICsgKiAgICB0aGUgYnJhbmNoIHRvIHdoaWNoIHRoZSByZWZjb3VudCBiZWxvbmdzIHRvLgoKSSBo YWQgdG8gdGFrZSBhIGRvdWJsZSB0YWtlIG9uIHRoaXMgb25lIGhlcmUuICBNYXliZSBhZGQgIiwg aS5lLiB0aGUKYXJyb3dzIHBvaW50IHRoZSBzYW1lIHdheSBhcyB0aGUgQyBwb2ludGVycyB1c2Vk IHRvIHJlZmVyZW5jZSBhCnN0cnVjdHVyZS4iCgo+ICsgKgo+ICsgKiBBcyB5b3UgY2FuIHNlZSBp biBmaWd1cmUgMSwgZXZlcnkgYnJhbmNoIGluY3JlbWVudHMgdGhlIHRvcG9sb2d5IHJlZmNvdW50 CgpNYXliZSBzL2ZpZ3VyZSAxL2Fib3ZlIGZpZ3VyZS8sIHRoZSBvdXRwdXQgZG9lc24ndCBoYXZl IG51bWJlcmVkIGZpZ3VyZXMKKGFuZCBpZiBpdCBkaWQsIHdlJ2QgbmVlZCBhbiByc3QgcmVmZXJl bmNlKS4KCj4gKyAqIG9mIGl0J3MgY2hpbGRyZW4sIGFuZCBpbmNyZW1lbnRzIHRoZSBtYWxsb2Mg cmVmY291bnQgb2YgaXQncyBwYXJlbnQuCj4gKyAqIEFkZGl0aW9uYWxseSwgZXZlcnkgcGF5bG9h ZCBpbmNyZW1lbnRzIHRoZSBtYWxsb2MgcmVmY291bnQgb2YgaXQncyBhc3NpZ25lZAo+ICsgKiBw b3J0IGJ5IDEuCj4gKyAqCj4gKyAqIFNvLCB3aGF0IHdvdWxkIGhhcHBlbiBpZiBNU1RCICMzIGZy b20gdGhlIGFib3ZlIGZpZ3VyZSB3YXMgdW5wbHVnZ2VkIGZyb20KPiArICogdGhlIHN5c3RlbSwg YnV0IHRoZSBkcml2ZXIgaGFkbid0IHlldCByZW1vdmVkIHBheWxvYWQgIzIgZnJvbSBwb3J0ICMz PyBUaGUKPiArICogdG9wb2xvZ3kgd291bGQgc3RhcnQgdG8gbG9vayBsaWtlIGZpZ3VyZSAyLgo+ ICsgKgo+ICsgKiAuLiBrZXJuZWwtZmlndXJlOjogZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0yLmRv dAo+ICsgKgo+ICsgKiAgICBQb3J0cyBhbmQgYnJhbmNoIGRldmljZXMgd2hpY2ggaGF2ZSBiZWVu IHJlbGVhc2VkIGZyb20gbWVtb3J5IGFyZQo+ICsgKiAgICBjb2xvcmVkIGdyZXksIGFuZCByZWZl cmVuY2VzIHdoaWNoIGhhdmUgYmVlbiByZW1vdmVkIGFyZSBjb2xvcmVkIHJlZC4KPiArICoKPiAr ICogV2hlbmV2ZXIgYSBwb3J0IG9yIGJyYW5jaCBkZXZpY2UncyB0b3BvbG9neSByZWZjb3VudCBy ZWFjaGVzIHplcm8sIGl0IHdpbGwKPiArICogZGVjcmVtZW50IHRoZSB0b3BvbG9neSByZWZjb3Vu dHMgb2YgYWxsIGl0cyBjaGlsZHJlbiwgdGhlIG1hbGxvYyByZWZjb3VudAo+ICsgKiBvZiBpdHMg cGFyZW50LCBhbmQgZmluYWxseSBpdHMgb3duIG1hbGxvYyByZWZjb3VudC4gRm9yIE1TVEIgIzQg YW5kIHBvcnQKPiArICogIzQsIHRoaXMgbWVhbnMgdGhleSBib3RoIGhhdmUgYmVlbiBkaXNjb25u ZWN0ZWQgZnJvbSB0aGUgdG9wb2xvZ3kgYW5kIGZyZWVkCj4gKyAqIGZyb20gbWVtb3J5LiBCdXQs IGJlY2F1c2UgcGF5bG9hZCAjMiBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHBvcnQK PiArICogIzMsIHBvcnQgIzMgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0b3BvbG9neSBidXQgaXQncyAm c3RydWN0IGRybV9kcF9tc3RfcG9ydAo+ICsgKiBpcyBzdGlsbCBhY2Nlc3NpYmxlIGZyb20gbWVt b3J5LiBUaGlzIGFsc28gbWVhbnMgcG9ydCAjMyBoYXMgbm90IHlldAo+ICsgKiBkZWNyZW1lbnRl ZCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIE1TVEIgIzMsIHNvIGl0J3MgJnN0cnVjdAo+ICsgKiBk cm1fZHBfbXN0X2JyYW5jaCB3aWxsIGFsc28gc3RheSBhbGxvY2F0ZWQgaW4gbWVtb3J5IHVudGls IHBvcnQgIzMncwo+ICsgKiBtYWxsb2MgcmVmY291bnQgcmVhY2hlcyAwLgo+ICsgKgo+ICsgKiBU aGlzIHJlbGF0aW9uc2hpcCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpbiBvcmRlciB0byByZWxlYXNl IHBheWxvYWQgIzIsIHdlCj4gKyAqIG5lZWQgdG8gYmUgYWJsZSB0byBmaWd1cmUgb3V0IHRoZSBs YXN0IHJlbGF0aXZlIG9mIHBvcnQgIzMgdGhhdCdzIHN0aWxsCj4gKyAqIGNvbm5lY3RlZCB0byB0 aGUgdG9wb2xvZ3kuIEluIHRoaXMgY2FzZSwgd2Ugd291bGQgdHJhdmVsIHVwIHRoZSB0b3BvbG9n eSBhcwo+ICsgKiBzaG93biBpbiBmaWd1cmUgMy4KPiArICoKPiArICogLi4ga2VybmVsLWZpZ3Vy ZTo6IGRwLW1zdC90b3BvbG9neS1maWd1cmUtMy5kb3QKPiArICoKPiArICogQW5kIGZpbmFsbHks IHJlbW92ZSBwYXlsb2FkICMyIGJ5IGNvbW11bmljYXRpbmcgd2l0aCBwb3J0ICMyIHRocm91Z2gK PiArICogc2lkZWJhbmQgdHJhbnNhY3Rpb25zLgo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBkcm1f ZHBfbXN0X2dldF9tc3RiX21hbGxvYygpIC0gSW5jcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQg b2YgYSBicmFuY2gKPiArICogZGV2aWNlCj4gKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBkcm1fZHBf bXN0X2JyYW5jaCB0byBpbmNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudCBvZgo+ICsgKgo+ICsg KiBJbmNyZW1lbnRzICZkcm1fZHBfbXN0X2JyYW5jaC5tYWxsb2Nfa3JlZi4gV2hlbgo+ICsgKiAm ZHJtX2RwX21zdF9icmFuY2gubWFsbG9jX2tyZWYgcmVhY2hlcyAwLCB0aGUgbWVtb3J5IGFsbG9j YXRpb24gZm9yIEBtc3RiCj4gKyAqIHdpbGwgYmUgcmVsZWFzZWQgYW5kIEBtc3RiIG1heSBubyBs b25nZXIgYmUgdXNlZC4KPiArICoKPiArICogU2VlIGFsc286IGRybV9kcF9tc3RfcHV0X21zdGJf bWFsbG9jKCkKPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK2RybV9kcF9tc3RfZ2V0X21zdGJfbWFs bG9jKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikKPiArewo+ICsJa3JlZl9nZXQoJm1z dGItPm1hbGxvY19rcmVmKTsKPiArCURSTV9ERUJVRygibXN0YiAlcCAoJWQpXG4iLCBtc3RiLCBr cmVmX3JlYWQoJm1zdGItPm1hbGxvY19rcmVmKSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1f ZHBfbXN0X3B1dF9tc3RiX21hbGxvYygpIC0gRGVjcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQg b2YgYSBicmFuY2gKPiArICogZGV2aWNlCj4gKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBkcm1fZHBf bXN0X2JyYW5jaCB0byBkZWNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudCBvZgo+ICsgKgo+ICsg KiBEZWNyZW1lbnRzICZkcm1fZHBfbXN0X2JyYW5jaC5tYWxsb2Nfa3JlZi4gV2hlbgo+ICsgKiAm ZHJtX2RwX21zdF9icmFuY2gubWFsbG9jX2tyZWYgcmVhY2hlcyAwLCB0aGUgbWVtb3J5IGFsbG9j YXRpb24gZm9yIEBtc3RiCj4gKyAqIHdpbGwgYmUgcmVsZWFzZWQgYW5kIEBtc3RiIG1heSBubyBs b25nZXIgYmUgdXNlZC4KPiArICoKPiArICogU2VlIGFsc286IGRybV9kcF9tc3RfZ2V0X21zdGJf bWFsbG9jKCkKPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK2RybV9kcF9tc3RfcHV0X21zdGJfbWFs bG9jKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikKPiArewo+ICsJRFJNX0RFQlVHKCJt c3RiICVwICglZClcbiIsIG1zdGIsIGtyZWZfcmVhZCgmbXN0Yi0+bWFsbG9jX2tyZWYpIC0gMSk7 Cj4gKwlrcmVmX3B1dCgmbXN0Yi0+bWFsbG9jX2tyZWYsIGRybV9kcF9mcmVlX21zdF9icmFuY2hf ZGV2aWNlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHJtX2RwX2ZyZWVfbXN0X3BvcnQoc3Ry dWN0IGtyZWYgKmtyZWYpCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQgPQo+ ICsJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0LCBtYWxsb2Nfa3Jl Zik7Cj4gKwo+ICsJZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2MocG9ydC0+cGFyZW50KTsKPiAr CWtmcmVlKHBvcnQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX2RwX21zdF9nZXRfcG9ydF9t YWxsb2MoKSAtIEluY3JlbWVudCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mIGFuIE1TVCBwb3J0Cj4g KyAqIEBwb3J0OiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgdG8gaW5jcmVtZW50IHRoZSBt YWxsb2MgcmVmY291bnQgb2YKPiArICoKPiArICogSW5jcmVtZW50cyAmZHJtX2RwX21zdF9wb3J0 Lm1hbGxvY19rcmVmLiBXaGVuICZkcm1fZHBfbXN0X3BvcnQubWFsbG9jX2tyZWYKPiArICogcmVh Y2hlcyAwLCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZm9yIEBwb3J0IHdpbGwgYmUgcmVsZWFzZWQg YW5kIEBwb3J0IG1heQo+ICsgKiBubyBsb25nZXIgYmUgdXNlZC4KPiArICoKPiArICogQmVjYXVz ZSBAcG9ydCBjb3VsZCBwb3RlbnRpYWxseSBiZSBmcmVlZCBhdCBhbnkgdGltZSBieSB0aGUgRFAg TVNUIGhlbHBlcnMKPiArICogaWYgJmRybV9kcF9tc3RfcG9ydC5tYWxsb2Nfa3JlZiByZWFjaGVz IDAsIGluY2x1ZGluZyBkdXJpbmcgYSBjYWxsIHRvIHRoaXMKPiArICogZnVuY3Rpb24sIGRyaXZl cnMgdGhhdCB3aGljaCB0byBtYWtlIHVzZSBvZiAmc3RydWN0IGRybV9kcF9tc3RfcG9ydCBzaG91 bGQKPiArICogZW5zdXJlIHRoYXQgdGhleSBncmFiIGF0IGxlYXN0IG9uZSBtYWluIG1hbGxvYyBy ZWZlcmVuY2UgdG8gdGhlaXIgTVNUIHBvcnRzCj4gKyAqIGluICZkcm1fZHBfbXN0X3RvcG9sb2d5 X2Nicy5hZGRfY29ubmVjdG9yLiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBiZWZvcmUKPiArICog dGhlcmUgaXMgYW55IGNoYW5jZSBmb3IgJmRybV9kcF9tc3RfcG9ydC5tYWxsb2Nfa3JlZiB0byBy ZWFjaCAwLgo+ICsgKgo+ICsgKiBTZWUgYWxzbzogZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2Mo KQo+ICsgKi8KPiArdm9pZAo+ICtkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJt X2RwX21zdF9wb3J0ICpwb3J0KQo+ICt7Cj4gKwlrcmVmX2dldCgmcG9ydC0+bWFsbG9jX2tyZWYp Owo+ICsJRFJNX0RFQlVHKCJwb3J0ICVwICglZClcbiIsIHBvcnQsIGtyZWZfcmVhZCgmcG9ydC0+ bWFsbG9jX2tyZWYpKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfZ2V0X3BvcnRf bWFsbG9jKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYygpIC0g RGVjcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQgb2YgYW4gTVNUIHBvcnQKPiArICogQHBvcnQ6 IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfcG9ydCB0byBkZWNyZW1lbnQgdGhlIG1hbGxvYyByZWZj b3VudCBvZgo+ICsgKgo+ICsgKiBEZWNyZW1lbnRzICZkcm1fZHBfbXN0X3BvcnQubWFsbG9jX2ty ZWYuIFdoZW4gJmRybV9kcF9tc3RfcG9ydC5tYWxsb2Nfa3JlZgo+ICsgKiByZWFjaGVzIDAsIHRo ZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgQHBvcnQgd2lsbCBiZSByZWxlYXNlZCBhbmQgQHBvcnQg bWF5Cj4gKyAqIG5vIGxvbmdlciBiZSB1c2VkLgo+ICsgKgo+ICsgKiBTZWUgYWxzbzogZHJtX2Rw X21zdF9nZXRfcG9ydF9tYWxsb2MoKQo+ICsgKi8KPiArdm9pZAo+ICtkcm1fZHBfbXN0X3B1dF9w b3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ICt7Cj4gKwlEUk1fREVC VUcoInBvcnQgJXAgKCVkKVxuIiwgcG9ydCwga3JlZl9yZWFkKCZwb3J0LT5tYWxsb2Nfa3JlZikg LSAxKTsKPiArCWtyZWZfcHV0KCZwb3J0LT5tYWxsb2Nfa3JlZiwgZHJtX2RwX2ZyZWVfbXN0X3Bv cnQpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2MpOwo+ ICsKPiAgc3RhdGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lfbXN0X2JyYW5jaF9kZXZpY2Uoc3RydWN0 IGtyZWYgKmtyZWYpCj4gIHsKPiAtCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiA9IGNv bnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gsIGtyZWYpOwo+ICsJc3Ry dWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiID0KPiArCQljb250YWluZXJfb2Yoa3JlZiwgc3Ry dWN0IGRybV9kcF9tc3RfYnJhbmNoLCB0b3BvbG9neV9rcmVmKTsKPiArCXN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyID0gbXN0Yi0+bWdyOwo+ICAJc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCwgKnRtcDsKPiAgCWJvb2wgd2FrZV90eCA9IGZhbHNlOwo+ICAKPiAtCS8qCj4g LQkgKiBpbml0IGtyZWYgYWdhaW4gdG8gYmUgdXNlZCBieSBwb3J0cyB0byByZW1vdmUgbXN0IGJy YW5jaCB3aGVuIGl0IGlzCj4gLQkgKiBub3QgbmVlZGVkIGFueW1vcmUKPiAtCSAqLwo+IC0Ja3Jl Zl9pbml0KGtyZWYpOwo+IC0KPiAtCWlmIChtc3RiLT5wb3J0X3BhcmVudCAmJiBsaXN0X2VtcHR5 KCZtc3RiLT5wb3J0X3BhcmVudC0+bmV4dCkpCj4gLQkJa3JlZl9nZXQoJm1zdGItPnBvcnRfcGFy ZW50LT5rcmVmKTsKPiAtCj4gLQkvKgo+IC0JICogZGVzdHJveSBhbGwgcG9ydHMgLSBkb24ndCBu ZWVkIGxvY2sKPiAtCSAqIGFzIHRoZXJlIGFyZSBubyBtb3JlIHJlZmVyZW5jZXMgdG8gdGhlIG1z dCBicmFuY2gKPiAtCSAqIGRldmljZSBhdCB0aGlzIHBvaW50Lgo+IC0JICovCj4gKwltdXRleF9s b2NrKCZtZ3ItPmxvY2spOwo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHRtcCwg Jm1zdGItPnBvcnRzLCBuZXh0KSB7Cj4gIAkJbGlzdF9kZWwoJnBvcnQtPm5leHQpOwo+ICAJCWRy bV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gIAl9Cj4gKwltdXRleF91bmxvY2so Jm1nci0+bG9jayk7Cj4gIAo+ICAJLyogZHJvcCBhbnkgdHggc2xvdHMgbXNnICovCj4gIAltdXRl eF9sb2NrKCZtc3RiLT5tZ3ItPnFsb2NrKTsKPiBAQCAtOTA4LDE0ICsxMDczLDgzIEBAIHN0YXRp YyB2b2lkIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVm KQo+ICAJaWYgKHdha2VfdHgpCj4gIAkJd2FrZV91cF9hbGwoJm1zdGItPm1nci0+dHhfd2FpdHEp Owo+ICAKPiAtCWtyZWZfcHV0KGtyZWYsIGRybV9kcF9mcmVlX21zdF9icmFuY2hfZGV2aWNlKTsK PiArCWRybV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jKG1zdGIpOwo+ICB9Cj4gIAo+IC1zdGF0aWMg dm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5j aCAqbXN0YikKPiArLyoqCj4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiKCkg LSBJbmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mIGEKPiArICogYnJhbmNoIGRldmlj ZSB1bmxlc3MgaXRzIHplcm8KPiArICogQG1zdGI6ICZzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg dG8gaW5jcmVtZW50IHRoZSB0b3BvbG9neSByZWZjb3VudCBvZgo+ICsgKgo+ICsgKiBBdHRlbXB0 cyB0byBncmFiIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIHRvIEBtc3RiLCBpZiBpdCBoYXNuJ3QgeWV0 IGJlZW4KPiArICogcmVtb3ZlZCBmcm9tIHRoZSB0b3BvbG9neSAoZS5nLiAmZHJtX2RwX21zdF9i cmFuY2gudG9wb2xvZ3lfa3JlZiBoYXMKPiArICogcmVhY2hlZCAwKS4gSG9sZGluZyBhIHRvcG9s b2d5IHJlZmVyZW5jZSBpbXBsaWVzIHRoYXQgYSBtYWxsb2MgcmVmZXJlbmNlCj4gKyAqIHdpbGwg YmUgaGVsZCB0byBAbXN0YiBhcyBsb25nIGFzIHRoZSB1c2VyIGhvbGRzIHRoZSB0b3BvbG9neSBy ZWZlcmVuY2UuCj4gKyAqCj4gKyAqIENhcmUgc2hvdWxkIGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0 IHRoZSB1c2VyIGhhcyBhdCBsZWFzdCBvbmUgbWFsbG9jCj4gKyAqIHJlZmVyZW5jZSB0byBAbXN0 Yi4gSWYgeW91IGFscmVhZHkgaGF2ZSBhIHRvcG9sb2d5IHJlZmVyZW5jZSB0byBAbXN0YiwgeW91 Cj4gKyAqIHNob3VsZCB1c2UgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YigpIGluc3RlYWQu Cj4gKyAqCj4gKyAqIFNlZSBhbHNvOgo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3Ri KCkKPiArICogZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0YigpCj4gKyAqCj4gKyAqIFJldHVy bnM6Cj4gKyAqICogMTogQSB0b3BvbG9neSByZWZlcmVuY2Ugd2FzIGdyYWJiZWQgc3VjY2Vzc2Z1 bGx5Cj4gKyAqICogMDogQHBvcnQgaXMgbm8gbG9uZ2VyIGluIHRoZSB0b3BvbG9neSwgbm8gcmVm ZXJlbmNlIHdhcyBncmFiYmVkCj4gKyAqLwo+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjawo+ICtk cm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0YihzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg Km1zdGIpCj4gIHsKPiAtCWtyZWZfcHV0KCZtc3RiLT5rcmVmLCBkcm1fZHBfZGVzdHJveV9tc3Rf YnJhbmNoX2RldmljZSk7Cj4gKwlpbnQgcmV0ID0ga3JlZl9nZXRfdW5sZXNzX3plcm8oJm1zdGIt PnRvcG9sb2d5X2tyZWYpOwo+ICsKPiArCWlmIChyZXQpCj4gKwkJRFJNX0RFQlVHKCJtc3RiICVw ICglZClcbiIsIG1zdGIsCj4gKwkJCSAga3JlZl9yZWFkKCZtc3RiLT50b3BvbG9neV9rcmVmKSk7 Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiArLyoqCj4gKyAqIGRybV9kcF9tc3RfdG9w b2xvZ3lfZ2V0X21zdGIoKSAtIEluY3JlbWVudCB0aGUgdG9wb2xvZ3kgcmVmY291bnQgb2YgYQo+ ICsgKiBicmFuY2ggZGV2aWNlCj4gKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X2Jy YW5jaCB0byBpbmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mCj4gKyAqCj4gKyAqIElu Y3JlbWVudHMgJmRybV9kcF9tc3RfYnJhbmNoLnRvcG9sb2d5X3JlZmNvdW50IHdpdGhvdXQgY2hl Y2tpbmcgd2hldGhlciBvcgo+ICsgKiBub3QgaXQncyBhbHJlYWR5IHJlYWNoZWQgMC4gVGhpcyBp cyBvbmx5IHZhbGlkIHRvIHVzZSBpbiBzY2VuYXJpb3Mgd2hlcmUKPiArICogeW91IGFyZSBhbHJl YWR5IGd1YXJhbnRlZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgYWN0aXZlIHRvcG9sb2d5IHJlZmVy ZW5jZQo+ICsgKiB0byBAbXN0Yi4gT3RoZXJ3aXNlLCBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9n ZXRfbXN0YigpIG11c3QgYmUgdXNlZC4KPiArICoKPiArICogU2VlIGFsc286Cj4gKyAqIGRybV9k cF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3RiKCkKPiArICogZHJtX2RwX21zdF90b3BvbG9neV9w dXRfbXN0YigpCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9t c3RiKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YikKPiArewo+ICsJV0FSTl9PTihrcmVm X3JlYWQoJm1zdGItPnRvcG9sb2d5X2tyZWYpID09IDApOwo+ICsJa3JlZl9nZXQoJm1zdGItPnRv cG9sb2d5X2tyZWYpOwo+ICsJRFJNX0RFQlVHKCJtc3RiICVwICglZClcbiIsIG1zdGIsIGtyZWZf cmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZikpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX2Rw X21zdF90b3BvbG9neV9wdXRfbXN0YigpIC0gcmVsZWFzZSBhIHRvcG9sb2d5IHJlZmVyZW5jZSB0 byBhIGJyYW5jaAo+ICsgKiBkZXZpY2UKPiArICogQG1zdGI6IFRoZSAmc3RydWN0IGRybV9kcF9t c3RfYnJhbmNoIHRvIHJlbGVhc2UgdGhlIHRvcG9sb2d5IHJlZmVyZW5jZSBmcm9tCj4gKyAqCj4g KyAqIFJlbGVhc2VzIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIGZyb20gQG1zdGIgYnkgZGVjcmVtZW50 aW5nCj4gKyAqICZkcm1fZHBfbXN0X2JyYW5jaC50b3BvbG9neV9rcmVmLgo+ICsgKgo+ICsgKiBT ZWUgYWxzbzoKPiArICogZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X21zdGIoKQo+ICsgKiBk cm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKCkKPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK2Ry bV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3Ri KQo+ICt7Cj4gKwlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxuIiwKPiArCQkgIG1zdGIsIGtyZWZf cmVhZCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZikgLSAxKTsKPiArCWtyZWZfcHV0KCZtc3RiLT50b3Bv bG9neV9rcmVmLCBkcm1fZHBfZGVzdHJveV9tc3RfYnJhbmNoX2RldmljZSk7Cj4gK30KPiAgCj4g IHN0YXRpYyB2b2lkIGRybV9kcF9wb3J0X3RlYXJkb3duX3BkdChzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0LCBpbnQgb2xkX3BkdCkKPiAgewo+IEBAIC05MzcsNyArMTE3MSw4IEBAIHN0YXRp YyB2b2lkIGRybV9kcF9wb3J0X3RlYXJkb3duX3BkdChzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpw b3J0LCBpbnQgb2xkX3BkdCkKPiAgCj4gIHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X3BvcnQo c3RydWN0IGtyZWYgKmtyZWYpCj4gIHsKPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQg PSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCwga3JlZik7Cj4gKwlz dHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0ID0KPiArCQljb250YWluZXJfb2Yoa3JlZiwgc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCwgdG9wb2xvZ3lfa3JlZik7Cj4gIAlzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciA9IHBvcnQtPm1ncjsKPiAgCj4gIAlpZiAoIXBvcnQtPmlucHV0 KSB7Cj4gQEAgLTk1Niw3ICsxMTkxLDYgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lfcG9y dChzdHJ1Y3Qga3JlZiAqa3JlZikKPiAgCQkJICogZnJvbSBhbiBFRElEIHJldHJpZXZhbCAqLwo+ ICAKPiAgCQkJbXV0ZXhfbG9jaygmbWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl9sb2NrKTsKPiAtCQkJ a3JlZl9nZXQoJnBvcnQtPnBhcmVudC0+a3JlZik7Cj4gIAkJCWxpc3RfYWRkKCZwb3J0LT5uZXh0 LCAmbWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl9saXN0KTsKPiAgCQkJbXV0ZXhfdW5sb2NrKCZtZ3It PmRlc3Ryb3lfY29ubmVjdG9yX2xvY2spOwo+ICAJCQlzY2hlZHVsZV93b3JrKCZtZ3ItPmRlc3Ry b3lfY29ubmVjdG9yX3dvcmspOwo+IEBAIC05NjcsMTIgKzEyMDEsNzkgQEAgc3RhdGljIHZvaWQg ZHJtX2RwX2Rlc3Ryb3lfcG9ydChzdHJ1Y3Qga3JlZiAqa3JlZikKPiAgCQlkcm1fZHBfcG9ydF90 ZWFyZG93bl9wZHQocG9ydCwgcG9ydC0+cGR0KTsKPiAgCQlwb3J0LT5wZHQgPSBEUF9QRUVSX0RF VklDRV9OT05FOwo+ICAJfQo+IC0Ja2ZyZWUocG9ydCk7Cj4gKwlkcm1fZHBfbXN0X3B1dF9wb3J0 X21hbGxvYyhwb3J0KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lf dHJ5X2dldF9wb3J0KCkgLSBJbmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mIGEKPiAr ICogcG9ydCB1bmxlc3MgaXRzIHplcm8KPiArICogQHBvcnQ6ICZzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0IHRvIGluY3JlbWVudCB0aGUgdG9wb2xvZ3kgcmVmY291bnQgb2YKPiArICoKPiArICogQXR0 ZW1wdHMgdG8gZ3JhYiBhIHRvcG9sb2d5IHJlZmVyZW5jZSB0byBAcG9ydCwgaWYgaXQgaGFzbid0 IHlldCBiZWVuCj4gKyAqIHJlbW92ZWQgZnJvbSB0aGUgdG9wb2xvZ3kgKGUuZy4gJmRybV9kcF9t c3RfcG9ydC50b3BvbG9neV9rcmVmIGhhcyByZWFjaGVkCj4gKyAqIDApLiBIb2xkaW5nIGEgdG9w b2xvZ3kgcmVmZXJlbmNlIGltcGxpZXMgdGhhdCBhIG1hbGxvYyByZWZlcmVuY2Ugd2lsbCBiZQo+ ICsgKiBoZWxkIHRvIEBwb3J0IGFzIGxvbmcgYXMgdGhlIHVzZXIgaG9sZHMgdGhlIHRvcG9sb2d5 IHJlZmVyZW5jZS4KPiArICoKPiArICogQ2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gZW5zdXJlIHRo YXQgdGhlIHVzZXIgaGFzIGF0IGxlYXN0IG9uZSBtYWxsb2MKPiArICogcmVmZXJlbmNlIHRvIEBw b3J0LiBJZiB5b3UgYWxyZWFkeSBoYXZlIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIHRvIEBwb3J0LCB5 b3UKPiArICogc2hvdWxkIHVzZSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0KCkgaW5zdGVh ZC4KPiArICoKPiArICogU2VlIGFsc286Cj4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3Bv cnQoKQo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KCkKPiArICoKPiArICogUmV0 dXJuczoKPiArICogKiAxOiBBIHRvcG9sb2d5IHJlZmVyZW5jZSB3YXMgZ3JhYmJlZCBzdWNjZXNz ZnVsbHkKPiArICogKiAwOiBAcG9ydCBpcyBubyBsb25nZXIgaW4gdGhlIHRvcG9sb2d5LCBubyBy ZWZlcmVuY2Ugd2FzIGdyYWJiZWQKPiArICovCj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrCj4g K2RybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQg KnBvcnQpCj4gK3sKPiArCWludCByZXQgPSBrcmVmX2dldF91bmxlc3NfemVybygmcG9ydC0+dG9w b2xvZ3lfa3JlZik7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlEUk1fREVCVUcoInBvcnQgJXAgKCVk KVxuIiwgcG9ydCwKPiArCQkJICBrcmVmX3JlYWQoJnBvcnQtPnRvcG9sb2d5X2tyZWYpKTsKPiAr Cj4gKwlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICsvKioKPiArICogZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfcG9ydCgpIC0gSW5jcmVtZW50IHRoZSB0b3BvbG9neSByZWZjb3VudCBvZiBhIHBvcnQK PiArICogQHBvcnQ6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfcG9ydCB0byBpbmNyZW1lbnQgdGhl IHRvcG9sb2d5IHJlZmNvdW50IG9mCj4gKyAqCj4gKyAqIEluY3JlbWVudHMgJmRybV9kcF9tc3Rf cG9ydC50b3BvbG9neV9yZWZjb3VudCB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXIgb3IKPiArICog bm90IGl0J3MgYWxyZWFkeSByZWFjaGVkIDAuIFRoaXMgaXMgb25seSB2YWxpZCB0byB1c2UgaW4g c2NlbmFyaW9zIHdoZXJlCj4gKyAqIHlvdSBhcmUgYWxyZWFkeSBndWFyYW50ZWVkIHRvIGhhdmUg YXQgbGVhc3Qgb25lIGFjdGl2ZSB0b3BvbG9neSByZWZlcmVuY2UKPiArICogdG8gQHBvcnQuIE90 aGVyd2lzZSwgZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X3BvcnQoKSBtdXN0IGJlIHVzZWQu Cj4gKyAqCj4gKyAqIFNlZSBhbHNvOgo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRf cG9ydCgpCj4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQoKQo+ICsgKi8KPiArc3Rh dGljIHZvaWQgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0ICpwb3J0KQo+ICt7Cj4gKwlXQVJOX09OKGtyZWZfcmVhZCgmcG9ydC0+dG9wb2xvZ3lfa3Jl ZikgPT0gMCk7Cj4gKwlrcmVmX2dldCgmcG9ydC0+dG9wb2xvZ3lfa3JlZik7Cj4gKwlEUk1fREVC VUcoInBvcnQgJXAgKCVkKVxuIiwgcG9ydCwga3JlZl9yZWFkKCZwb3J0LT50b3BvbG9neV9rcmVm KSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KCkg LSByZWxlYXNlIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIHRvIGEgcG9ydAo+ICsgKiBAcG9ydDogVGhl ICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHRvIHJlbGVhc2UgdGhlIHRvcG9sb2d5IHJlZmVyZW5j ZSBmcm9tCj4gKyAqCj4gKyAqIFJlbGVhc2VzIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIGZyb20gQHBv cnQgYnkgZGVjcmVtZW50aW5nCj4gKyAqICZkcm1fZHBfbXN0X3BvcnQudG9wb2xvZ3lfa3JlZi4K PiArICoKPiArICogU2VlIGFsc286Cj4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9w b3J0KCkKPiArICogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydCgpCj4gKyAqLwo+ICBzdGF0 aWMgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQpCj4gIHsKPiAtCWtyZWZfcHV0KCZwb3J0LT5rcmVmLCBkcm1fZHBfZGVzdHJveV9w b3J0KTsKPiArCURSTV9ERUJVRygicG9ydCAlcCAoJWQpXG4iLAo+ICsJCSAgcG9ydCwga3JlZl9y ZWFkKCZwb3J0LT50b3BvbG9neV9rcmVmKSAtIDEpOwo+ICsJa3JlZl9wdXQoJnBvcnQtPnRvcG9s b2d5X2tyZWYsIGRybV9kcF9kZXN0cm95X3BvcnQpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgc3RydWN0 IGRybV9kcF9tc3RfYnJhbmNoICoKPiBAQCAtOTgxLDEwICsxMjgyLDEwIEBAIGRybV9kcF9tc3Rf dG9wb2xvZ3lfZ2V0X21zdGJfdmFsaWRhdGVkX2xvY2tlZChzdHJ1Y3QgZHJtX2RwX21zdF9icmFu Y2ggKm1zdGIsCj4gIHsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7Cj4gIAlzdHJ1 Y3QgZHJtX2RwX21zdF9icmFuY2ggKnJtc3RiOwo+IC0JaWYgKHRvX2ZpbmQgPT0gbXN0Yikgewo+ IC0JCWtyZWZfZ2V0KCZtc3RiLT5rcmVmKTsKPiArCj4gKwlpZiAodG9fZmluZCA9PSBtc3RiKQo+ ICAJCXJldHVybiBtc3RiOwo+IC0JfQo+ICsKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwg Jm1zdGItPnBvcnRzLCBuZXh0KSB7Cj4gIAkJaWYgKHBvcnQtPm1zdGIpIHsKPiAgCQkJcm1zdGIg PSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiX3ZhbGlkYXRlZF9sb2NrZWQoCj4gQEAgLTEw MDEsMjUgKzEzMDIsMzIgQEAgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yl92YWxpZGF0ZWQo c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gIAkJCQkgICAgICAgc3RydWN0 IGRybV9kcF9tc3RfYnJhbmNoICptc3RiKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9icmFu Y2ggKnJtc3RiID0gTlVMTDsKPiArCj4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2spOwo+IC0JaWYg KG1nci0+bXN0X3ByaW1hcnkpCj4gKwlpZiAobWdyLT5tc3RfcHJpbWFyeSkgewo+ICAJCXJtc3Ri ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yl92YWxpZGF0ZWRfbG9ja2VkKAo+ICAJCSAg ICBtZ3ItPm1zdF9wcmltYXJ5LCBtc3RiKTsKPiArCj4gKwkJaWYgKHJtc3RiICYmICFkcm1fZHBf bXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0YihybXN0YikpCj4gKwkJCXJtc3RiID0gTlVMTDsKPiAr CX0KPiAgCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsKPiAgCXJldHVybiBybXN0YjsKPiAgfQo+ ICAKPiAtc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKmRybV9kcF9tc3RfZ2V0X3BvcnRf cmVmX2xvY2tlZChzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnRvX2ZpbmQpCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICoKPiAr ZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWRfbG9ja2VkKHN0cnVjdCBkcm1f ZHBfbXN0X2JyYW5jaCAqbXN0YiwKPiArCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0 ICp0b19maW5kKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCAqbXBvcnQ7 Cj4gIAo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmbXN0Yi0+cG9ydHMsIG5leHQpIHsK PiAtCQlpZiAocG9ydCA9PSB0b19maW5kKSB7Cj4gLQkJCWtyZWZfZ2V0KCZwb3J0LT5rcmVmKTsK PiArCQlpZiAocG9ydCA9PSB0b19maW5kKQo+ICAJCQlyZXR1cm4gcG9ydDsKPiAtCQl9Cj4gKwo+ ICAJCWlmIChwb3J0LT5tc3RiKSB7Cj4gLQkJCW1wb3J0ID0gZHJtX2RwX21zdF9nZXRfcG9ydF9y ZWZfbG9ja2VkKHBvcnQtPm1zdGIsIHRvX2ZpbmQpOwo+ICsJCQltcG9ydCA9IGRybV9kcF9tc3Rf dG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkX2xvY2tlZCgKPiArCQkJICAgIHBvcnQtPm1zdGIs IHRvX2ZpbmQpOwo+ICAJCQlpZiAobXBvcnQpCj4gIAkJCQlyZXR1cm4gbXBvcnQ7Cj4gIAkJfQo+ IEBAIC0xMDMyLDkgKzEzNDAsMTUgQEAgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxp ZGF0ZWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gIAkJCQkgICAgICAg c3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiAgewo+ICAJc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcnBvcnQgPSBOVUxMOwo+ICsKPiAgCW11dGV4X2xvY2soJm1nci0+bG9jayk7Cj4gLQlp ZiAobWdyLT5tc3RfcHJpbWFyeSkKPiAtCQlycG9ydCA9IGRybV9kcF9tc3RfZ2V0X3BvcnRfcmVm X2xvY2tlZChtZ3ItPm1zdF9wcmltYXJ5LCBwb3J0KTsKPiArCWlmIChtZ3ItPm1zdF9wcmltYXJ5 KSB7Cj4gKwkJcnBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlkYXRlZF9s b2NrZWQoCj4gKwkJICAgIG1nci0+bXN0X3ByaW1hcnksIHBvcnQpOwo+ICsKPiArCQlpZiAocnBv cnQgJiYgIWRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9wb3J0KHJwb3J0KSkKPiArCQkJcnBv cnQgPSBOVUxMOwo+ICsJfQo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2spOwo+ICAJcmV0dXJu IHJwb3J0Owo+ICB9Cj4gQEAgLTEwNDIsMTEgKzEzNTYsMTIgQEAgZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfcG9ydF92YWxpZGF0ZWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3Is Cj4gIHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpkcm1fZHBfZ2V0X3BvcnQoc3RydWN0 IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLCB1OCBwb3J0X251bSkKPiAgewo+ICAJc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydDsKPiArCWludCByZXQ7Cj4gIAo+ICAJbGlzdF9mb3JfZWFjaF9l bnRyeShwb3J0LCAmbXN0Yi0+cG9ydHMsIG5leHQpIHsKPiAgCQlpZiAocG9ydC0+cG9ydF9udW0g PT0gcG9ydF9udW0pIHsKPiAtCQkJa3JlZl9nZXQoJnBvcnQtPmtyZWYpOwo+IC0JCQlyZXR1cm4g cG9ydDsKPiArCQkJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV90cnlfZ2V0X3BvcnQocG9ydCk7 Cj4gKwkJCXJldHVybiByZXQgPyBwb3J0IDogTlVMTDsKPiAgCQl9Cj4gIAl9Cj4gIAo+IEBAIC0x MDk1LDYgKzE0MTAsMTEgQEAgc3RhdGljIGJvb2wgZHJtX2RwX3BvcnRfc2V0dXBfcGR0KHN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpCj4gIAkJaWYgKHBvcnQtPm1zdGIpIHsKPiAgCQkJcG9y dC0+bXN0Yi0+bWdyID0gcG9ydC0+bWdyOwo+ICAJCQlwb3J0LT5tc3RiLT5wb3J0X3BhcmVudCA9 IHBvcnQ7Cj4gKwkJCS8qCj4gKwkJCSAqIE1ha2Ugc3VyZSB0aGlzIHBvcnQncyBtZW1vcnkgYWxs b2NhdGlvbiBzdGF5cwo+ICsJCQkgKiBhcm91bmQgdW50aWwgaXQncyBjaGlsZCBNU1RCIHJlbGVh c2VzIGl0Cj4gKwkJCSAqLwo+ICsJCQlkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYyhwb3J0KTsK PiAgCj4gIAkJCXNlbmRfbGluayA9IHRydWU7Cj4gIAkJfQo+IEBAIC0xMTU1LDE3ICsxNDc1LDI2 IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9hZGRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg Km1zdGIsCj4gIAlib29sIGNyZWF0ZWQgPSBmYWxzZTsKPiAgCWludCBvbGRfcGR0ID0gMDsKPiAg CWludCBvbGRfZGRwcyA9IDA7Cj4gKwo+ICAJcG9ydCA9IGRybV9kcF9nZXRfcG9ydChtc3RiLCBw b3J0X21zZy0+cG9ydF9udW1iZXIpOwo+ICAJaWYgKCFwb3J0KSB7Cj4gIAkJcG9ydCA9IGt6YWxs b2Moc2l6ZW9mKCpwb3J0KSwgR0ZQX0tFUk5FTCk7Cj4gIAkJaWYgKCFwb3J0KQo+ICAJCQlyZXR1 cm47Cj4gLQkJa3JlZl9pbml0KCZwb3J0LT5rcmVmKTsKPiArCQlrcmVmX2luaXQoJnBvcnQtPnRv cG9sb2d5X2tyZWYpOwo+ICsJCWtyZWZfaW5pdCgmcG9ydC0+bWFsbG9jX2tyZWYpOwo+ICAJCXBv cnQtPnBhcmVudCA9IG1zdGI7Cj4gIAkJcG9ydC0+cG9ydF9udW0gPSBwb3J0X21zZy0+cG9ydF9u dW1iZXI7Cj4gIAkJcG9ydC0+bWdyID0gbXN0Yi0+bWdyOwo+ICAJCXBvcnQtPmF1eC5uYW1lID0g IkRQTVNUIjsKPiAgCQlwb3J0LT5hdXguZGV2ID0gZGV2LT5kZXY7Cj4gKwo+ICsJCS8qCj4gKwkJ ICogTWFrZSBzdXJlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmb3Igb3VyIHBhcmVudCBicmFuY2gg c3RheXMKPiArCQkgKiBhcm91bmQgdW50aWwgb3VyIG93biBtZW1vcnkgYWxsb2NhdGlvbiBpcyBy ZWxlYXNlZAo+ICsJCSAqLwo+ICsJCWRybV9kcF9tc3RfZ2V0X21zdGJfbWFsbG9jKG1zdGIpOwo+ ICsKPiAgCQljcmVhdGVkID0gdHJ1ZTsKPiAgCX0gZWxzZSB7Cj4gIAkJb2xkX3BkdCA9IHBvcnQt PnBkdDsKPiBAQCAtMTE4NSw3ICsxNTE0LDcgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2FkZF9wb3J0 KHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwKPiAgCSAgIGZvciB0aGlzIGxpc3QgKi8K PiAgCWlmIChjcmVhdGVkKSB7Cj4gIAkJbXV0ZXhfbG9jaygmbXN0Yi0+bWdyLT5sb2NrKTsKPiAt CQlrcmVmX2dldCgmcG9ydC0+a3JlZik7Cj4gKwkJZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9y dChwb3J0KTsKPiAgCQlsaXN0X2FkZCgmcG9ydC0+bmV4dCwgJm1zdGItPnBvcnRzKTsKPiAgCQlt dXRleF91bmxvY2soJm1zdGItPm1nci0+bG9jayk7Cj4gIAl9Cj4gQEAgLTEyODQsNyArMTYxMyw3 IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKmRybV9kcF9nZXRfbXN0X2JyYW5j aF9kZXZpY2Uoc3RydWN0IGRybV9kcF9tc3RfCj4gIHsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X2Jy YW5jaCAqbXN0YjsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7Cj4gLQlpbnQgaTsK PiArCWludCBpLCByZXQ7Cj4gIAkvKiBmaW5kIHRoZSBwb3J0IGJ5IGl0ZXJhdGluZyBkb3duICov Cj4gIAo+ICAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsKPiBAQCAtMTMwOSw3ICsxNjM4LDkgQEAg c3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqZHJtX2RwX2dldF9tc3RfYnJhbmNoX2Rl dmljZShzdHJ1Y3QgZHJtX2RwX21zdF8KPiAgCQkJfQo+ICAJCX0KPiAgCX0KPiAtCWtyZWZfZ2V0 KCZtc3RiLT5rcmVmKTsKPiArCXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfdHJ5X2dldF9tc3Ri KG1zdGIpOwo+ICsJaWYgKCFyZXQpCj4gKwkJbXN0YiA9IE5VTEw7Cj4gIG91dDoKPiAgCW11dGV4 X3VubG9jaygmbWdyLT5sb2NrKTsKPiAgCXJldHVybiBtc3RiOwo+IEBAIC0xMzQ0LDE0ICsxNjc1 LDE3IEBAIGRybV9kcF9nZXRfbXN0X2JyYW5jaF9kZXZpY2VfYnlfZ3VpZChzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiAgCQkJCSAgICAgdWludDhfdCAqZ3VpZCkKPiAgewo+ ICAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiOwo+ICsJaW50IHJldDsKPiAgCj4gIAkv KiBmaW5kIHRoZSBwb3J0IGJ5IGl0ZXJhdGluZyBkb3duICovCj4gIAltdXRleF9sb2NrKCZtZ3It PmxvY2spOwo+ICAKPiAgCW1zdGIgPSBnZXRfbXN0X2JyYW5jaF9kZXZpY2VfYnlfZ3VpZF9oZWxw ZXIobWdyLT5tc3RfcHJpbWFyeSwgZ3VpZCk7Cj4gLQo+IC0JaWYgKG1zdGIpCj4gLQkJa3JlZl9n ZXQoJm1zdGItPmtyZWYpOwo+ICsJaWYgKG1zdGIpIHsKPiArCQlyZXQgPSBkcm1fZHBfbXN0X3Rv cG9sb2d5X3RyeV9nZXRfbXN0Yihtc3RiKTsKPiArCQlpZiAoIXJldCkKPiArCQkJbXN0YiA9IE5V TEw7Cj4gKwl9Cj4gIAo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2spOwo+ICAJcmV0dXJuIG1z dGI7Cj4gQEAgLTEzOTAsMTEgKzE3MjQsMTQgQEAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9saW5r X3Byb2JlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9tZ3IsIHdvcmspOwo+ICAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNo ICptc3RiOwo+ICsJaW50IHJldDsKPiAgCj4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2spOwo+ICAJ bXN0YiA9IG1nci0+bXN0X3ByaW1hcnk7Cj4gIAlpZiAobXN0Yikgewo+IC0JCWtyZWZfZ2V0KCZt c3RiLT5rcmVmKTsKPiArCQlyZXQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0Yiht c3RiKTsKPiArCQlpZiAoIXJldCkKPiArCQkJbXN0YiA9IE5VTEw7Cj4gIAl9Cj4gIAltdXRleF91 bmxvY2soJm1nci0+bG9jayk7Cj4gIAlpZiAobXN0Yikgewo+IEBAIC0xNzIyLDggKzIwNTksMTAg QEAgc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqZHJtX2RwX2dldF9sYXN0X2Nvbm5l Y3RlZF9wb3J0X2FuZF9tc3RiKHN0cnVjdAo+ICAKPiAgCQlpZiAoZm91bmRfcG9ydCkgewo+ICAJ CQlybXN0YiA9IGZvdW5kX3BvcnQtPnBhcmVudDsKPiAtCQkJa3JlZl9nZXQoJnJtc3RiLT5rcmVm KTsKPiAtCQkJKnBvcnRfbnVtID0gZm91bmRfcG9ydC0+cG9ydF9udW07Cj4gKwkJCWlmIChkcm1f ZHBfbXN0X3RvcG9sb2d5X3RyeV9nZXRfbXN0YihybXN0YikpCj4gKwkJCQkqcG9ydF9udW0gPSBm b3VuZF9wb3J0LT5wb3J0X251bTsKPiArCQkJZWxzZQo+ICsJCQkJcm1zdGIgPSBOVUxMOwo+ICAJ CX0KPiAgCX0KPiAgCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsKPiBAQCAtMjE3Niw3ICsyNTE1 LDcgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3Qoc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMKPiAgCj4gIAkJLyogZ2l2ZSB0aGlzIHRoZSBt YWluIHJlZmVyZW5jZSAqLwo+ICAJCW1nci0+bXN0X3ByaW1hcnkgPSBtc3RiOwo+IC0JCWtyZWZf Z2V0KCZtZ3ItPm1zdF9wcmltYXJ5LT5rcmVmKTsKPiArCQlkcm1fZHBfbXN0X3RvcG9sb2d5X2dl dF9tc3RiKG1nci0+bXN0X3ByaW1hcnkpOwo+ICAKPiAgCQlyZXQgPSBkcm1fZHBfZHBjZF93cml0 ZWIobWdyLT5hdXgsIERQX01TVE1fQ1RSTCwKPiAgCQkJCQkJCSBEUF9NU1RfRU4gfCBEUF9VUF9S RVFfRU4gfCBEUF9VUFNUUkVBTV9JU19TUkMpOwo+IEBAIC0zMDk2LDEzICszNDM1LDYgQEAgc3Rh dGljIHZvaWQgZHJtX2RwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAJbXV0 ZXhfdW5sb2NrKCZtZ3ItPnFsb2NrKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgZHJtX2RwX2Zy ZWVfbXN0X3BvcnQoc3RydWN0IGtyZWYgKmtyZWYpCj4gLXsKPiAtCXN0cnVjdCBkcm1fZHBfbXN0 X3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCwg a3JlZik7Cj4gLQlrcmVmX3B1dCgmcG9ydC0+cGFyZW50LT5rcmVmLCBkcm1fZHBfZnJlZV9tc3Rf YnJhbmNoX2RldmljZSk7Cj4gLQlrZnJlZShwb3J0KTsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQg ZHJtX2RwX2Rlc3Ryb3lfY29ubmVjdG9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciA9IGNvbnRhaW5lcl9v Zih3b3JrLCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IsIGRlc3Ryb3lfY29ubmVjdG9y X3dvcmspOwo+IEBAIC0zMTIzLDcgKzM0NTUsNiBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJv eV9jb25uZWN0b3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIAkJbGlzdF9kZWwo JnBvcnQtPm5leHQpOwo+ICAJCW11dGV4X3VubG9jaygmbWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl9s b2NrKTsKPiAgCj4gLQkJa3JlZl9pbml0KCZwb3J0LT5rcmVmKTsKPiAgCQlJTklUX0xJU1RfSEVB RCgmcG9ydC0+bmV4dCk7Cj4gIAo+ICAJCW1nci0+Y2JzLT5kZXN0cm95X2Nvbm5lY3RvcihtZ3Is IHBvcnQtPmNvbm5lY3Rvcik7Cj4gQEAgLTMxMzcsNyArMzQ2OCw3IEBAIHN0YXRpYyB2b2lkIGRy bV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAg CQkJZHJtX2RwX21zdF9wdXRfcGF5bG9hZF9pZChtZ3IsIHBvcnQtPnZjcGkudmNwaSk7Cj4gIAkJ fQo+ICAKPiAtCQlrcmVmX3B1dCgmcG9ydC0+a3JlZiwgZHJtX2RwX2ZyZWVfbXN0X3BvcnQpOwo+ ICsJCWRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKHBvcnQpOwo+ICAJCXNlbmRfaG90cGx1ZyA9 IHRydWU7Cj4gIAl9Cj4gIAlpZiAoc2VuZF9ob3RwbHVnKQo+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2RybS9kcm1fZHBfbXN0X2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIu aAo+IGluZGV4IDM3MWNjMjgxNjQ3Ny4uOGVjYTVmMjkyNDJjIDEwMDY0NAo+IC0tLSBhL2luY2x1 ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0 X2hlbHBlci5oCj4gQEAgLTQ0LDcgKzQ0LDYgQEAgc3RydWN0IGRybV9kcF92Y3BpIHsKPiAgCj4g IC8qKgo+ICAgKiBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IC0gTVNUIHBvcnQKPiAtICogQGtyZWY6 IHJlZmVyZW5jZSBjb3VudCBmb3IgdGhpcyBwb3J0Lgo+ICAgKiBAcG9ydF9udW06IHBvcnQgbnVt YmVyCj4gICAqIEBpbnB1dDogaWYgdGhpcyBwb3J0IGlzIGFuIGlucHV0IHBvcnQuCj4gICAqIEBt Y3M6IG1lc3NhZ2UgY2FwYWJpbGl0eSBzdGF0dXMgLSBEUCAxLjIgc3BlYy4KPiBAQCAtNjcsNyAr NjYsMTggQEAgc3RydWN0IGRybV9kcF92Y3BpIHsKPiAgICogaW4gdGhlIE1TVCB0b3BvbG9neS4K PiAgICovCj4gIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgewo+IC0Jc3RydWN0IGtyZWYga3JlZjsK PiArCS8qKgo+ICsJICogQHRvcG9sb2d5X2tyZWY6IHJlZmNvdW50IGZvciB0aGlzIHBvcnQncyBs aWZldGltZSBpbiB0aGUgdG9wb2xvZ3ksCj4gKwkgKiBvbmx5IHRoZSBEUCBNU1QgaGVscGVycyBz aG91bGQgbmVlZCB0byB0b3VjaCB0aGlzCj4gKwkgKi8KPiArCXN0cnVjdCBrcmVmIHRvcG9sb2d5 X2tyZWY7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAbWFsbG9jX2tyZWY6IHJlZmNvdW50IGZvciB0aGUg bWVtb3J5IGFsbG9jYXRpb24gY29udGFpbmluZyB0aGlzCj4gKwkgKiBzdHJ1Y3R1cmUuIFNlZSBk cm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYygpIGFuZAo+ICsJICogZHJtX2RwX21zdF9wdXRfcG9y dF9tYWxsb2MoKS4KPiArCSAqLwo+ICsJc3RydWN0IGtyZWYgbWFsbG9jX2tyZWY7Cj4gIAo+ICAJ dTggcG9ydF9udW07Cj4gIAlib29sIGlucHV0Owo+IEBAIC0xMDIsNyArMTEyLDYgQEAgc3RydWN0 IGRybV9kcF9tc3RfcG9ydCB7Cj4gIAo+ICAvKioKPiAgICogc3RydWN0IGRybV9kcF9tc3RfYnJh bmNoIC0gTVNUIGJyYW5jaCBkZXZpY2UuCj4gLSAqIEBrcmVmOiByZWZlcmVuY2UgY291bnQgZm9y IHRoaXMgcG9ydC4KPiAgICogQHJhZDogUmVsYXRpdmUgQWRkcmVzcyB0byB0YWxrIHRvIHRoaXMg YnJhbmNoIGRldmljZS4KPiAgICogQGxjdDogTGluayBjb3VudCB0b3RhbCB0byB0YWxrIHRvIHRo aXMgYnJhbmNoIGRldmljZS4KPiAgICogQG51bV9wb3J0czogbnVtYmVyIG9mIHBvcnRzIG9uIHRo ZSBicmFuY2guCj4gQEAgLTEyMSw3ICsxMzAsMTkgQEAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCB7 Cj4gICAqIHRvIGRvd25zdHJlYW0gcG9ydCBvZiBwYXJlbnQgYnJhbmNoZXMuCj4gICAqLwo+ICBz dHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggewo+IC0Jc3RydWN0IGtyZWYga3JlZjsKPiArCS8qKgo+ ICsJICogQHRvcG9sb2d5X2tyZWY6IHJlZmNvdW50IGZvciB0aGlzIGJyYW5jaCBkZXZpY2UncyBs aWZldGltZSBpbiB0aGUKPiArCSAqIHRvcG9sb2d5LCBvbmx5IHRoZSBEUCBNU1QgaGVscGVycyBz aG91bGQgbmVlZCB0byB0b3VjaCB0aGlzCj4gKwkgKi8KPiArCXN0cnVjdCBrcmVmIHRvcG9sb2d5 X2tyZWY7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAbWFsbG9jX2tyZWY6IHJlZmNvdW50IGZvciB0aGUg bWVtb3J5IGFsbG9jYXRpb24gY29udGFpbmluZyB0aGlzCj4gKwkgKiBzdHJ1Y3R1cmUuIFNlZSBk cm1fZHBfbXN0X2dldF9tc3RiX21hbGxvYygpIGFuZAo+ICsJICogZHJtX2RwX21zdF9wdXRfbXN0 Yl9tYWxsb2MoKS4KPiArCSAqLwo+ICsJc3RydWN0IGtyZWYgbWFsbG9jX2tyZWY7Cj4gKwo+ICAJ dTggcmFkWzhdOwo+ICAJdTggbGN0Owo+ICAJaW50IG51bV9wb3J0czsKPiBAQCAtNjI2LDQgKzY0 Nyw3IEBAIGludCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUsCj4gIGludCBkcm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5KHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJCQkJIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQsIGJvb2wgcG93ZXJfdXApOwo+ICAKPiArdm9pZCBkcm1fZHBfbXN0X2dl dF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsKPiArdm9pZCBkcm1f ZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsKPiAr CgoKX1JlYWxseV8gbmljZSBkb2N1bWVudGF0aW9uLCBhbmQgdGhlIGdyYXBocyBsb29rIHByZXR0 eSEKClJldmlld2VkLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgoK QXNpZGU6IFdlJ3JlIGxhY2tpbmcga2VybmVsZG9jIGZvciBkcm1fZHBfbXN0X3RvcG9sb2d5X2Ni cy4gQSBmb2xsb3ctdXAgdG8KZG9jdW1lbnQgYSBiaXQgd2hhdCBkcml2ZXJzIGFyZSBleHBlY3Rl ZCB0byBkbyBpbiBlYWNoIGNhbGxiYWNrIHdvdWxkIGJlCm5lYXQuCi1EYW5pZWwKCgo+ICAjZW5k aWYKPiAtLSAKPiAyLjIwLjEKPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK