From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [WIP PATCH 03/15] drm/dp_mst: Introduce new refcounting scheme for mstbs and ports Date: Fri, 14 Dec 2018 10:29:00 +0100 Message-ID: <20181214092900.GN21184@phenom.ffwll.local> References: <20181214012604.13746-1-lyude@redhat.com> <20181214012604.13746-4-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: <20181214012604.13746-4-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Lyude Paul Cc: Sean Paul , Jonathan Corbet , Maxime Ripard , nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Maarten Lankhorst , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, David Airlie , Jerry Zuo , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Vetter , Harry Wentland , David Airlie , Juston Li List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBEZWMgMTMsIDIwMTggYXQgMDg6MjU6MzJQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBUaGUgY3VycmVudCB3YXkgb2YgaGFuZGxpbmcgcmVmY291bnRpbmcgaW4gdGhlIERQIE1T VCBoZWxwZXJzIGlzIHJlYWxseQo+IGNvbmZ1c2luZyBhbmQgcHJvYmFibHkganVzdCBwbGFpbiB3 cm9uZyBiZWNhdXNlIGl0J3MgYmVlbiBoYWNrZWQgdXAgbWFueQo+IHRpbWVzIG92ZXIgdGhlIHll YXJzIHdpdGhvdXQgYW55b25lIGFjdHVhbGx5IGdvaW5nIG92ZXIgdGhlIGNvZGUgYW5kCj4gc2Vl aW5nIGlmIHRoaW5ncyBjb3VsZCBiZSBzaW1wbGlmaWVkLgo+IAo+IFRvIHRoZSBiZXN0IG9mIG15 IHVuZGVyc3RhbmRpbmcsIHRoZSBjdXJyZW50IHNjaGVtZSB3b3JrcyBsaWtlIHRoaXM6Cj4gZHJt X2RwX21zdF9wb3J0IGFuZCBkcm1fZHBfbXN0X2JyYW5jaCBib3RoIGhhdmUgYSBzaW5nbGUgcmVm Y291bnQuIFdoZW4KPiB0aGlzIHJlZmNvdW50IGhpdHMgMCBmb3IgZWl0aGVyIG9mIHRoZSB0d28s IHRoZXkncmUgcmVtb3ZlZCBmcm9tIHRoZQo+IHRvcG9sb2d5IHN0YXRlLCBidXQgbm90IGltbWVk aWF0ZWx5IGZyZWVkLiBCb3RoIHBvcnRzIGFuZCBicmFuY2ggZGV2aWNlcwo+IHdpbGwgcmVpbml0 aWFsaXplIHRoZWlyIGtyZWYgb25jZSBpdCdzIGhpdCAwIGJlZm9yZSBhY3R1YWxseSBkZXN0cm95 aW5nCj4gdGhlbXNlbHZlcy4gVGhlIGludGVuZGVkIHB1cnBvc2UgYmVoaW5kIHRoaXMgaXMgc28g dGhhdCB3ZSBjYW4gYXZvaWQKPiBwcm9ibGVtcyBsaWtlIG5vdCBiZWluZyBhYmxlIHRvIGZyZWUg YSByZW1vdGUgcGF5bG9hZCB0aGF0IG1pZ2h0IHN0aWxsCj4gYmUgYWN0aXZlLCBkdWUgdG8gdXMg aGF2aW5nIHJlbW92ZWQgYWxsIG9mIHRoZSBwb3J0L2JyYW5jaCBkZXZpY2UKPiBzdHJ1Y3R1cmVz IGluIG1lbW9yeSwgYXMgcGVyOgo+IAo+IDkxYTI1ZTQ2MzEzMCAoImRybS9kcC9tc3Q6IGRlYWxs b2NhdGUgcGF5bG9hZCBvbiBwb3J0IGRlc3RydWN0aW9uIikKPiAKPiBXaGljaCBtYXkgaGF2ZSB3 b3JrZWQsIGJ1dCB0aGVuIGl0IGNhdXNlZCB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMuIEJlaW5nCj4g bmV3IHRvIE1TVCBhdCB0aGUgdGltZSwgSSB0cmllZCBmaXhpbmcgaXQ7Cj4gCj4gMjYzZWZkZTMx Zjk3ICgiZHJtL2RwL21zdDogR2V0IHZhbGlkYXRlZCBwb3J0IHJlZiBpbiBkcm1fZHBfdXBkYXRl X3BheWxvYWRfcGFydDEoKSIpCj4gCj4gQnV0LCB0aGF0IHdhcyBicm9rZW46IGJvdGggZHJtX2Rw X21zdF9wb3J0IGFuZCBkcm1fZHBfbXN0X2JyYW5jaCBzdHJ1Y3RzCj4gYXJlIHZhbGlkYXRlZCBp biBhbG1vc3QgZXZlcnkgRFAgTVNUIGhlbHBlciBmdW5jdGlvbi4gU2ltcGx5IHB1dCwgdGhpcwo+ IG1lYW5zIHdlIGdvIHRocm91Z2ggdGhlIHRvcG9sb2d5IGFuZCB0cnkgdG8gc2VlIGlmIHRoZSBn aXZlbgo+IGRybV9kcF9tc3RfYnJhbmNoIG9yIGRybV9kcF9tc3RfcG9ydCBpcyBzdGlsbCBhdHRh Y2hlZCB0byBzb21ldGhpbmcKPiBiZWZvcmUgdHJ5aW5nIHRvIHVzZSBpdCBpbiBvcmRlciB0byBh dm9pZCBkZXJlZmVyZW5jaW5nIGZyZWVkIG1lbW9yeQo+IChzb21ldGhpbmcgdGhhdCBoYXMgaGFw cGVuZWQgYSBMT1QgaW4gdGhlIHBhc3Qgd2l0aCB0aGlzIGxpYnJhcnkpLgo+IEJlY2F1c2Ugb2Yg dGhpcyBpdCBkb2Vzbid0IGFjdHVhbGx5IG1hdHRlciB3aGV0aGVyIG9yIG5vdCB3ZSBrZWVwIGtl ZXAKPiB0aGUgcG9ydHMgYW5kIGJyYW5jaGVzIGFyb3VuZCBpbiBtZW1vcnkgYXMgdGhhdCdzIG5v dCBlbm91Z2gsIGJlY2F1c2UKPiBhbnkgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgdGhlIGJyYW5j aGVzIGFuZCBwb3J0cyBwYXNzZWQgdG8gaXQgd2lsbAo+IHN0aWxsIHJlamVjdCB0aGVtIGFueXdh eSBzaW5jZSB0aGV5J3JlIG5vIGxvbmdlciBpbiB0aGUgdG9wb2xvZ3kKPiBzdHJ1Y3R1cmUuIFNv LCB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMgd2VyZSBmaXhlZCBidXQgcGF5bG9hZCBkZWFsbG9jYXRp b24KPiB3YXMgY29tcGxldGVseSBicm9rZW4uCj4gCj4gVHdvIHllYXJzIGxhdGVyLCBBTUQgaW5m b3JtZWQgbWUgYWJvdXQgdGhpcyBpc3N1ZSBhbmQgSSBhdHRlbXB0ZWQgdG8KPiBjb21lIHVwIHdp dGggYSB0ZW1wb3JhcnkgZml4LCBwZW5kaW5nIGEgbG9uZy1vdmVyZHVlIGNsZWFudXAgb2YgdGhp cwo+IGxpYnJhcnk6Cj4gCj4gYzU0YzczNzRmZjQ0ICgiZHJtL2RwX21zdDogU2tpcCB2YWxpZGF0 aW5nIHBvcnRzIGR1cmluZyBkZXN0cnVjdGlvbiwganVzdCByZWYiKQo+IAo+IEJ1dCB0aGVuIHRo YXQgaW50cm9kdWNlZCB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMsIHNvIEkgcXVpY2tseSByZXZlcnRl ZAo+IGl0Ogo+IAo+IDk3NjU2MzViMzA3NSAoIlJldmVydCAiZHJtL2RwX21zdDogU2tpcCB2YWxp ZGF0aW5nIHBvcnRzIGR1cmluZyBkZXN0cnVjdGlvbiwganVzdCByZWYiIikKPiAKPiBBbmQgaW4g dGhlIHByb2Nlc3MsIGxlYXJuZWQgdGhhdCB0aGVyZSBpcyBqdXN0IG5vIHNpbXBsZSBmaXggZm9y IHRoaXM6Cj4gdGhlIGRlc2lnbiBpcyBqdXN0IGJyb2tlbi4gVW5mb3J0dW50ZWx5LCB0aGUgdXNh Z2Ugb2YgdGhlc2UgaGVscGVycyBhcmUKPiBxdWl0ZSBicm9rZW4gYXMgd2VsbC4gU29tZSBkcml2 ZXJzIGxpa2UgaTkxNSBoYXZlIGJlZW4gc21hcnQgZW5vdWdoIHRvCj4gYXZvaWQgYWNjZXNzaW5n IGFueSBraW5kIG9mIGluZm9ybWF0aW9uIGZyb20gTVNUIHBvcnQgc3RydWN0dXJlcywgYnV0Cj4g b3RoZXJzIGxpa2Ugbm91dmVhdSBoYXZlIGFzc3VtZWQsIHVuZGVyc3RhbmRhYmx5IHNvLCB0aGF0 Cj4gZHJtX2RwX21zdF9wb3J0IHN0cnVjdHVyZXMgYXJlIG5vcm1hbCBhbmQgY2FuIGp1c3QgYmUg YWNjZXNzZWQgYXQgYW55Cj4gdGltZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHVzZS1hZnRlci1m cmVlIGVycm9ycy4KPiAKPiBBZnRlciBhIGxvdCBvZiBkaXNjdXNzaW9uLCBtZSBhbmQgRGFuaWVs IFZldHRlciBjYW1lIHVwIHdpdGggYSBiZXR0ZXIKPiBpZGVhIHRvIHJlcGxhY2UgYWxsIG9mIHRo aXMuCj4gCj4gVG8gc3VtbWFyaXplLCBzaW5jZSB0aGlzIGlzIGRvY3VtZW50ZWQgZmFyIG1vcmUg aW5kZXB0aCBpbiB0aGUKPiBkb2N1bWVudGF0aW9uIHRoaXMgcGF0Y2ggaW50cm9kdWNlcywgd2Ug bWFrZSBpdCBzbyB0aGF0IGRybV9kcF9tc3RfcG9ydAo+IGFuZCBkcm1fZHBfbXN0X2JyYW5jaCBz dHJ1Y3R1cmVzIGhhdmUgdHdvIGRpZmZlcmVudCBjbGFzc2VzIG9mCj4gcmVmY291bnRzOiB0b3Bv bG9neV9rcmVmLCBhbmQgbWFsbG9jX2tyZWYuIHRvcG9sb2d5X2tyZWYgY29ycmVzcG9uZHMgdG8K PiB0aGUgbGlmZXRpbWUgb2YgdGhlIGdpdmVuIGRybV9kcF9tc3RfcG9ydCBvciBkcm1fZHBfbXN0 X2JyYW5jaCBpbiBpdCdzCj4gZ2l2ZW4gdG9wb2xvZ3kuIE9uY2UgaXQgaGl0cyB6ZXJvLCBhbnkg YXNzb2NpYXRlZCBjb25uZWN0b3JzIGFyZSByZW1vdmVkCj4gYW5kIHRoZSBicmFuY2ggb3IgcG9y dCBjYW4gbm8gbG9uZ2VyIGJlIHZhbGlkYXRlZC4gbWFsbG9jX2tyZWYKPiBjb3JyZXNwb25kcyB0 byB0aGUgbGlmZXRpbWUgb2YgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciB0aGUgYWN0dWFsCj4g c3RydWN0dXJlLCBhbmQgd2lsbCBhbHdheXMgYmUgbm9uLXplcm8gc28gbG9uZyBhcyB0aGUgdG9w b2xvZ3lfa3JlZiBpcwo+IG5vbi16ZXJvLiBUaGlzIGdpdmVzIHVzIGEgd2F5IHRvIGFsbG93IGNh bGxlcnMgdG8gaG9sZCBvbnRvIHBvcnQgYW5kCj4gYnJhbmNoIGRldmljZSBzdHJ1Y3R1cmVzIHBh c3QgdGhlaXIgdG9wb2xvZ3kgbGlmZXRpbWUsIGFuZCBkcmFtYXRpY2FsbHkKPiBzaW1wbGlmaWVz IHRoZSBsaWZldGltZXMgb2YgYm90aCBzdHJ1Y3R1cmVzLiBUaGlzIGFsc28gZmluYWxseSBmaXhl cyB0aGUKPiBwb3J0IGRlYWxsb2NhdGlvbiBwcm9ibGVtLCBwcm9wZXJseS4KPiAKPiBBZGRpdGlv bmFsbHk6IHNpbmNlIHRoaXMgbm93IG1lYW5zIHRoYXQgd2UgY2FuIGtlZXAgcG9ydHMgYW5kIGJy YW5jaAo+IGRldmljZXMgYWxsb2NhdGVkIGluIG1lbW9yeSBmb3IgaG93ZXZlciBsb25nIHdlIG5l ZWQsIHdlIG5vIGxvbmdlciBuZWVkCj4gYSBzaWduaWZpY2FudCBhbW91bnQgb2YgdGhlIHBvcnQg dmFsaWRhdGlvbiB0aGF0IHdlIGN1cnJlbnRseSBkby4KPiAKPiBBZGRpdGlvbmFsbHksIHRoZXJl IGlzIG9uZSBsYXN0IHNjZW5hcmlvIHRoYXQgdGhpcyBmaXhlcywgd2hpY2ggY291bGRuJ3QKPiBo YXZlIGJlZW4gZml4ZWQgcHJvcGVybHkgYmVmb3JlaGFuZDoKPiAKPiAtIENQVTEgdW5yZWZzIHBv cnQgZnJvbSB0b3BvbG9neSAocmVmY291bnQgMS0+MCkKPiAtIENQVTIgcmVmcyBwb3J0IGluIHRv cG9sb2d5KHJlZmNvdW50IDAtPjEpCj4gCj4gU2luY2Ugd2Ugbm93IGNhbiBndWFyYW50ZWUgbWVt b3J5IHNhZmV0eSBmb3IgcG9ydHMgYW5kIGJyYW5jaGVzCj4gYXMtbmVlZGVkLCB3ZSBhbHNvIGNh biBtYWtlIG91ciBtYWluIHJlZmVyZW5jZSBjb3VudGluZyBmdW5jdGlvbnMgZml4Cj4gdGhpcyBw cm9ibGVtIGJ5IHVzaW5nIGtyZWZfZ2V0X3VubGVzc196ZXJvKCkgaW50ZXJuYWxseSBzbyB0aGF0 IHRvcG9sb2d5Cj4gcmVmY291bnRzIGNhbiBvbmx5IGV2ZXIgcmVhY2ggMCBvbmNlLgo+IAo+IFNp Z25lZC1vZmYtYnk6IEx5dWRlIFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+Cj4gQ2M6IERhbmllbCBW ZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KPiBDYzogRGF2aWQgQWlybGllIDxhaXJsaWVkQHJlZGhh dC5jb20+Cj4gQ2M6IEplcnJ5IFp1byA8SmVycnkuWnVvQGFtZC5jb20+Cj4gQ2M6IEhhcnJ5IFdl bnRsYW5kIDxoYXJyeS53ZW50bGFuZEBhbWQuY29tPgo+IENjOiBKdXN0b24gTGkgPGp1c3Rvbi5s aUBpbnRlbC5jb20+Cj4gLS0tCj4gIC4uLi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRv dCAgICAgICAgICB8ICAzMSArKwo+ICAuLi4vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMi5k b3QgICAgICAgICAgfCAgMzcgKysKPiAgLi4uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTMu ZG90ICAgICAgICAgIHwgIDQwICsrCj4gIERvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVy cy5yc3QgICAgICAgICB8IDEyNSArKysrLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90 b3BvbG9neS5jICAgICAgICAgfCA1MTIgKysrKysrKysrKysrKy0tLS0tCj4gIGluY2x1ZGUvZHJt L2RybV9kcF9tc3RfaGVscGVyLmggICAgICAgICAgICAgICB8ICAxOSArLQo+ICA2IGZpbGVzIGNo YW5nZWQsIDYzNyBpbnNlcnRpb25zKCspLCAxMjcgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBEb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTEuZG90Cj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmln dXJlLTIuZG90Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2dwdS9kcC1tc3Qv dG9wb2xvZ3ktZmlndXJlLTMuZG90CgpZYXksIGRvY3MsIGFuZCBwcmV0dHkgb25lcyBhdCB0aGF0 ISBBd2Vzb21lIHN0dWZmIDotKQoKPiAKPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUv ZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0xLmRvdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90 b3BvbG9neS1maWd1cmUtMS5kb3QKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uZmI4Mzc4OWUwYTNlCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0RvY3VtZW50YXRp b24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMS5kb3QKPiBAQCAtMCwwICsxLDMxIEBACj4g K2RpZ3JhcGggVCB7Cj4gKyAgICAvKiBUb3BvbG9neSByZWZlcmVuY2VzICovCj4gKyAgICBub2Rl IFtzaGFwZT1vdmFsXTsKPiArICAgIG1zdGIxIC0+IHtwb3J0MSwgcG9ydDJ9Owo+ICsgICAgcG9y dDEgLT4gbXN0YjI7Cj4gKyAgICBwb3J0MiAtPiBtc3RiMyAtPiB7cG9ydDMsIHBvcnQ0fTsKPiAr ICAgIHBvcnQzIC0+IG1zdGI0Owo+ICsKPiArICAgIC8qIE1hbGxvYyByZWZlcmVuY2VzICovCj4g KyAgICBlZGdlIFtzdHlsZT1kYXNoZWRdOwo+ICsgICAgbXN0YjQgLT4gcG9ydDM7Cj4gKyAgICB7 cG9ydDQsIHBvcnQzfSAtPiBtc3RiMzsKPiArICAgIG1zdGIzIC0+IHBvcnQyOwo+ICsgICAgbXN0 YjIgLT4gcG9ydDE7Cj4gKyAgICB7cG9ydDEsIHBvcnQyfSAtPiBtc3RiMTsKPiArCj4gKyAgICBl ZGdlIFtkaXI9YmFja107Cj4gKyAgICBub2RlIFtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxj b2xvcj1saWdodGJsdWVdOwo+ICsgICAgcG9ydDEgLT4gIlBheWxvYWQgIzEiOwo+ICsgICAgcG9y dDMgLT4gIlBheWxvYWQgIzIiOwo+ICsKPiArICAgIG1zdGIxIFtsYWJlbD0iTVNUQiAjMSI7c3R5 bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5dOwo+ICsgICAgbXN0YjIgW2xhYmVsPSJNU1RC ICMyIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07Cj4gKyAgICBtc3RiMyBbbGFi ZWw9Ik1TVEIgIzMiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuXTsKPiArICAgIG1z dGI0IFtsYWJlbD0iTVNUQiAjNCI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5dOwo+ ICsKPiArICAgIHBvcnQxIFtsYWJlbD0iUG9ydCAjMSJdOwo+ICsgICAgcG9ydDIgW2xhYmVsPSJQ b3J0ICMyIl07Cj4gKyAgICBwb3J0MyBbbGFiZWw9IlBvcnQgIzMiXTsKPiArICAgIHBvcnQ0IFts YWJlbD0iUG9ydCAjNCJdOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2Rw LW1zdC90b3BvbG9neS1maWd1cmUtMi5kb3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcC1tc3QvdG9w b2xvZ3ktZmlndXJlLTIuZG90Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLmVlYmNlNTYwYmU0MAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9Eb2N1bWVudGF0aW9u L2dwdS9kcC1tc3QvdG9wb2xvZ3ktZmlndXJlLTIuZG90Cj4gQEAgLTAsMCArMSwzNyBAQAo+ICtk aWdyYXBoIFQgewo+ICsgICAgLyogVG9wb2xvZ3kgcmVmZXJlbmNlcyAqLwo+ICsgICAgbm9kZSBb c2hhcGU9b3ZhbF07Cj4gKwo+ICsgICAgbXN0YjEgLT4ge3BvcnQxLCBwb3J0Mn07Cj4gKyAgICBw b3J0MSAtPiBtc3RiMjsKPiArICAgIGVkZ2UgW2NvbG9yPXJlZF07Cj4gKyAgICBwb3J0MiAtPiBt c3RiMyAtPiB7cG9ydDMsIHBvcnQ0fTsKPiArICAgIHBvcnQzIC0+IG1zdGI0Owo+ICsgICAgZWRn ZSBbY29sb3I9IiJdOwo+ICsKPiArICAgIC8qIE1hbGxvYyByZWZlcmVuY2VzICovCj4gKyAgICBl ZGdlIFtzdHlsZT1kYXNoZWRdOwo+ICsgICAgcG9ydDMgLT4gbXN0YjM7Cj4gKyAgICBtc3RiMyAt PiBwb3J0MjsKPiArICAgIG1zdGIyIC0+IHBvcnQxOwo+ICsgICAge3BvcnQxLCBwb3J0Mn0gLT4g bXN0YjE7Cj4gKyAgICBlZGdlIFtjb2xvcj1yZWRdOwo+ICsgICAgbXN0YjQgLT4gcG9ydDM7Cj4g KyAgICBwb3J0NCAtPiBtc3RiMzsKPiArICAgIGVkZ2UgW2NvbG9yPSIiXTsKPiArCj4gKyAgICBl ZGdlIFtkaXI9YmFja107Cj4gKyAgICBub2RlIFtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxj b2xvcj1saWdodGJsdWVdOwo+ICsgICAgcG9ydDEgLT4gIlBheWxvYWQgIzEiOwo+ICsgICAgcG9y dDMgLT4gIlBheWxvYWQgIzIiOwo+ICsKPiArICAgIG1zdGIxIFtsYWJlbD0iTVNUQiAjMSI7c3R5 bGU9ZmlsbGVkO2ZpbGxjb2xvcj1wYWxlZ3JlZW5dOwo+ICsgICAgbXN0YjIgW2xhYmVsPSJNU1RC ICMyIjtzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07Cj4gKyAgICBtc3RiMyBbbGFi ZWw9Ik1TVEIgIzMiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuXTsKPiArICAgIG1z dGI0IFtsYWJlbD0iTVNUQiAjNCI7c3R5bGU9ZmlsbGVkO2ZpbGxjb2xvcj1ncmV5XTsKPiArCj4g KyAgICBwb3J0MSBbbGFiZWw9IlBvcnQgIzEiXTsKPiArICAgIHBvcnQyIFtsYWJlbD0iUG9ydCAj MiJdOwo+ICsgICAgcG9ydDMgW2xhYmVsPSJQb3J0ICMzIl07Cj4gKyAgICBwb3J0NCBbbGFiZWw9 IlBvcnQgIzQiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9Z3JleV07Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHAtbXN0L3RvcG9sb2d5LWZpZ3VyZS0zLmRvdCBiL0RvY3Vt ZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMy5kb3QKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOWJmMjhkODcxNDRjCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RwLW1zdC90b3BvbG9neS1maWd1cmUtMy5kb3QK PiBAQCAtMCwwICsxLDQwIEBACj4gK2RpZ3JhcGggVCB7Cj4gKyAgICAvKiBUb3BvbG9neSByZWZl cmVuY2VzICovCj4gKyAgICBub2RlIFtzaGFwZT1vdmFsXTsKPiArCj4gKyAgICBtc3RiMSAtPiB7 cG9ydDEsIHBvcnQyfTsKPiArICAgIHBvcnQxIC0+IG1zdGIyOwo+ICsgICAgZWRnZSBbY29sb3I9 Z3JleV07Cj4gKyAgICBwb3J0MiAtPiBtc3RiMyAtPiB7cG9ydDMsIHBvcnQ0fTsKPiArICAgIHBv cnQzIC0+IG1zdGI0Owo+ICsgICAgZWRnZSBbY29sb3I9IiJdOwo+ICsKPiArICAgIC8qIE1hbGxv YyByZWZlcmVuY2VzICovCj4gKyAgICBlZGdlIFtzdHlsZT1kYXNoZWRdOwo+ICsgICAgcG9ydDMg LT4gbXN0YjMgW3BlbndpZHRoPTNdOwo+ICsgICAgbXN0YjMgLT4gcG9ydDIgW3BlbndpZHRoPTNd Owo+ICsgICAgbXN0YjIgLT4gcG9ydDE7Cj4gKyAgICB7cG9ydDEsIHBvcnQyfSAtPiBtc3RiMTsK PiArICAgIGVkZ2UgW2NvbG9yPWdyZXldOwo+ICsgICAgbXN0YjQgLT4gcG9ydDM7Cj4gKyAgICBw b3J0NCAtPiBtc3RiMzsKPiArICAgIGVkZ2UgW2NvbG9yPSIiXTsKPiArCj4gKyAgICBlZGdlIFtk aXI9YmFja107Cj4gKyAgICBub2RlIFtzdHlsZT1maWxsZWQ7c2hhcGU9Ym94O2ZpbGxjb2xvcj1s aWdodGJsdWVdOwo+ICsgICAgcG9ydDEgLT4gcGF5bG9hZDE7Cj4gKyAgICBwb3J0MyAtPiBwYXls b2FkMiBbcGVud2lkdGg9M107Cj4gKwo+ICsgICAgbXN0YjEgW2xhYmVsPSJNU1RCICMxIjtzdHls ZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07Cj4gKyAgICBtc3RiMiBbbGFiZWw9Ik1TVEIg IzIiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9cGFsZWdyZWVuXTsKPiArICAgIG1zdGIzIFtsYWJl bD0iTVNUQiAjMyI7cGVud2lkdGg9MztzdHlsZT1maWxsZWQ7ZmlsbGNvbG9yPXBhbGVncmVlbl07 Cj4gKyAgICBtc3RiNCBbbGFiZWw9Ik1TVEIgIzQiO3N0eWxlPWZpbGxlZDtmaWxsY29sb3I9Z3Jl eV07Cj4gKwo+ICsgICAgcG9ydDEgW2xhYmVsPSJQb3J0ICMxIl07Cj4gKyAgICBwb3J0MiBbbGFi ZWw9IlBvcnQgIzIiO3BlbndpZHRoPTNdOwo+ICsgICAgcG9ydDMgW2xhYmVsPSJQb3J0ICMzIjtw ZW53aWR0aD0zXTsKPiArICAgIHBvcnQ0IFtsYWJlbD0iUG9ydCAjNCI7c3R5bGU9ZmlsbGVkO2Zp bGxjb2xvcj1ncmV5XTsKPiArCj4gKyAgICBwYXlsb2FkMSBbbGFiZWw9IlBheWxvYWQgIzEiXTsK PiArICAgIHBheWxvYWQyIFtsYWJlbD0iUGF5bG9hZCAjMiI7cGVud2lkdGg9M107Cj4gK30KPiBk aWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdCBiL0RvY3Vt ZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKPiBpbmRleCBiNDIyZWI4ZWRmMTYuLmMw Zjk5NGMyYzcyZiAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBl cnMucnN0Cj4gKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdAo+IEBA IC0yMDgsOCArMjA4LDExIEBAIERpc3BsYXkgUG9ydCBEdWFsIE1vZGUgQWRhcHRvciBIZWxwZXIg RnVuY3Rpb25zIFJlZmVyZW5jZQo+ICAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2Ry bV9kcF9kdWFsX21vZGVfaGVscGVyLmMKPiAgICAgOmV4cG9ydDoKPiAgCj4gLURpc3BsYXkgUG9y dCBNU1QgSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UKPiAtPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQo+ICtEaXNwbGF5IFBvcnQgTVNUIEhlbHBlcnMKPiArPT09 PT09PT09PT09PT09PT09PT09PT09Cj4gKwo+ICtGdW5jdGlvbnMgUmVmZXJlbmNlCj4gKy0tLS0t LS0tLS0tLS0tLS0tLS0KPiAgCj4gIC4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJt X2RwX21zdF90b3BvbG9neS5jCj4gICAgIDpkb2M6IGRwIG1zdCBoZWxwZXIKPiBAQCAtMjIwLDYg KzIyMywxMjQgQEAgRGlzcGxheSBQb3J0IE1TVCBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQo+ ICAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ ICAgICA6ZXhwb3J0Ogo+ICAKPiArQnJhbmNoIGRldmljZSBhbmQgcG9ydCByZWZjb3VudGluZwo+ ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJIGdlbmVyYWxseSB0cnkgdG8g cHV0IHRoZSBsb25nLWZvcm0gZXhwbGFuYXRpb25zIGJlZm9yZSB0aGUgZnVuY3Rpb24KcmVmZXJl bmNlcy4gU2luY2UgdXN1YWxseSB0aGUgcmVmZXJlbmNlcyBjb21wbGV0ZWx5IGRyb3duIG91dCBl dmVyeXRoaW5nCmVsc2UgYW5kIG1ha2UgaXQgaGFyZGVyIHRvIHNwb3QgdGhlIGltcG9ydGFudCBv dmVydmlldyBzdHVmZi4KCgo+ICsKPiArT3ZlcnZpZXcKPiArfn5+fn5+fn4KPiArCj4gK1RoZSBy ZWZjb3VudGluZyBzY2hlbWVzIGZvciA6Yzp0eXBlOmBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2hg IGFuZAo+ICs6Yzp0eXBlOmBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0YCBhcmUgc29tZXdoYXQgdW51 c3VhbC4gQm90aCBwb3J0cyBhbmQgYnJhbmNoCj4gK2RldmljZXMgaGF2ZSB0d28gZGlmZmVyZW50 IGtpbmRzIG9mIHJlZmNvdW50czogdG9wb2xvZ3kgcmVmY291bnRzLCBhbmQgbWFsbG9jCj4gK3Jl ZmNvdW50cy4KPiArCj4gK1RvcG9sb2d5IHJlZmNvdW50IG92ZXJ2aWV3Cj4gK35+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+Cj4gKwo+ICtUb3BvbG9neSByZWZjb3VudHMgYXJlIG5vdCBleHBvc2Vk IHRvIGRyaXZlcnMsIGFuZCBhcmUgaGFuZGxlZCBpbnRlcm5hbGx5IGJ5IHRoZQo+ICtEUCBNU1Qg aGVscGVycy4gVGhlIGhlbHBlcnMgdXNlIHRoZW0gaW4gb3JkZXIgdG8gcHJldmVudCB0aGUgaW4t bWVtb3J5IHRvcG9sb2d5Cj4gK3N0YXRlIGZyb20gYmVpbmcgY2hhbmdlZCBpbiB0aGUgbWlkZGxl IG9mIGNyaXRpY2FsIG9wZXJhdGlvbnMgbGlrZSBjaGFuZ2luZyB0aGUKPiAraW50ZXJuYWwgc3Rh dGUgb2YgcGF5bG9hZCBhbGxvY2F0aW9ucy4gVGhpcyBtZWFucyBlYWNoIGJyYW5jaCBhbmQgcG9y dCB3aWxsIGJlCj4gK2NvbnNpZGVyZWQgdG8gYmUgY29ubmVjdGVkIHRvIHRoZSByZXN0IG9mIHRo ZSB0b3BvbG9neSB1bnRpbCBpdCdzIHRvcG9sb2d5Cj4gK3JlZmNvdW50IHJlYWNoZXMgemVyby4g QWRkaXRpb25hbGx5LCBmb3IgcG9ydHMgdGhpcyBtZWFucyB0aGF0IHRoZWlyIGFzc29jaWF0ZWQK PiArOmM6dHlwZTpgc3RydWN0IGRybV9jb25uZWN0b3JgIHdpbGwgc3RheSByZWdpc3RlcmVkIHdp dGggdXNlcnNwYWNlIHVudGlsIHRoZQo+ICtwb3J0J3MgcmVmY291bnQgcmVhY2hlcyAwLgo+ICsK PiArCj4gK1RvcG9sb2d5IHJlZmNvdW50IGZ1bmN0aW9ucwo+ICt+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn4KPiArCj4gK1RoZSBEUCBNU1QgaGVscGVycyB1c2UgdGhlIGZvbGxvd2luZyBmdW5j dGlvbnMgdG8gbWFuYWdlIHRvcG9sb2d5IHJlZmNvdW50czoKPiArCj4gKy4uIGtlcm5lbC1kb2M6 OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gKyAgIDpmdW5jdGlvbnM6 IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQgZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9y dAo+ICsgICAgICAgICAgICAgICBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9wb3J0IGRybV9kcF9t c3RfdG9wb2xvZ3lfZ2V0X21zdGIKPiArICAgICAgICAgICAgICAgZHJtX2RwX21zdF90b3BvbG9n eV9wdXRfbXN0YiBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9tc3RiCj4gKwo+ICtNYWxsb2MgcmVm Y291bnQgb3ZlcnZpZXcKPiArfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cj4gKwo+ICtNYWxsb2Mg cmVmZXJlbmNlcyBhcmUgdXNlZCB0byBrZWVwIGEgOmM6dHlwZTpgc3RydWN0IGRybV9kcF9tc3Rf cG9ydGAgb3IKPiArOmM6dHlwZTpgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoYCBhbGxvY2F0ZWQg ZXZlbiBhZnRlciBhbGwgb2YgaXRzIHRvcG9sb2d5Cj4gK3JlZmVyZW5jZXMgaGF2ZSBiZWVuIGRy b3BwZWQsIHNvIHRoYXQgdGhlIGRyaXZlciBvciBNU1QgaGVscGVycyBjYW4gc2FmZWx5Cj4gK2Fj Y2VzcyBlYWNoIGJyYW5jaCdzIGxhc3Qga25vd24gc3RhdGUgYmVmb3JlIGl0IHdhcyBkaXNjb25u ZWN0ZWQgZnJvbSB0aGUKPiArdG9wb2xvZ3kuIFdoZW4gdGhlIG1hbGxvYyByZWZjb3VudCBvZiBh IHBvcnQgb3IgYnJhbmNoIHJlYWNoZXMgMCwgdGhlIG1lbW9yeQo+ICthbGxvY2F0aW9uIGNvbnRh aW5pbmcgdGhlIDpjOnR5cGU6YHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaGAgb3IgOmM6dHlwZTpg c3RydWN0Cj4gK2RybV9kcF9tc3RfcG9ydGAgcmVzcGVjdGl2ZWx5IHdpbGwgYmUgZnJlZWQuCj4g Kwo+ICtNYWxsb2MgcmVmY291bnRzIGZvciBwb3J0cwo+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fgo+ICsKPiArRm9yIDpjOnR5cGU6YHN0cnVjdCBkcm1fZHBfbXN0X3BvcnRgLCBtYWxsb2Mg cmVmY291bnRzIGFyZSBleHBvc2VkIHRvIGRyaXZlcnMKPiArdGhyb3VnaCB0aGUgZm9sbG93aW5n IGZ1bmN0aW9uczoKPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2Rw X21zdF90b3BvbG9neS5jCj4gKyAgIDpmdW5jdGlvbnM6IGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFs bG9jIGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jCj4gKwo+ICtNYWxsb2MgcmVmY291bnRzIGZv ciBicmFuY2ggZGV2aWNlcwo+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgo+ ICsKPiArRm9yIDpjOnR5cGU6YHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaGAsIG1hbGxvYyByZWZj b3VudHMgYXJlIG5vdCBjdXJyZW50bHkKPiArZXhwb3NlZCB0byBkcml2ZXJzLiBBcyBvZiB3cml0 aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgdGhlcmUgYXJlIG5vIGRyaXZlcnMgdGhhdAo+ICtoYXZl IGEgdXNlY2FzZSBmb3IgYWNjZXNzaW5nIDpjOnR5cGU6YHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5j aGAgb3V0c2lkZSBvZiB0aGUKPiArTVNUIGhlbHBlcnMuIEV4cG9zaW5nIHRoaXMgQVBJIHRvIGRy aXZlcnMgaW4gYSByYWNlLWZyZWUgbWFubmVyIHdvdWxkIHRha2UgbW9yZQo+ICt0d2Vha2luZyBv ZiB0aGUgcmVmY291bnRpbmcgc2NoZW1lLCBob3dldmVyIHBhdGNoZXMgYXJlIHdlbGNvbWUgcHJv dmlkZWQgdGhlcmUKPiAraXMgYSBsZWdpdGltYXRlIGRyaXZlciB1c2VjYXNlIGZvciB0aGlzLgo+ ICsKPiArSW50ZXJuYWxseSwgbWFsbG9jIHJlZmNvdW50cyBmb3IgOmM6dHlwZTpgc3RydWN0IGRy bV9kcF9tc3RfYnJhbmNoYCBhcmUgbWFuYWdlZAo+ICtieSB0aGUgRFAgTVNUIGNvcmUgdGhyb3Vn aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJz L2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gKyAgIDpmdW5jdGlvbnM6IGRybV9kcF9t c3RfZ2V0X21zdGJfbWFsbG9jIGRybV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jCj4gKwo+ICtSZWZj b3VudCByZWxhdGlvbnNoaXBzIGluIGEgdG9wb2xvZ3kKPiArfn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+Cj4gKwo+ICtMZXQncyB0YWtlIGEgbG9vayBhdCB3aHkgdGhlIHJlbGF0 aW9uc2hpcCBiZXR3ZWVuIHRvcG9sb2d5IGFuZCBtYWxsb2MgcmVmY291bnRzCj4gK2lzIGRlc2ln bmVkIHRoZSB3YXkgaXQgaXMuCj4gKwo+ICsuLiBrZXJuZWwtZmlndXJlOjogZHAtbXN0L3RvcG9s b2d5LWZpZ3VyZS0xLmRvdAo+ICsKPiArICAgQW4gZXhhbXBsZSBvZiB0b3BvbG9neSBhbmQgbWFs bG9jIHJlZnMgaW4gYSBEUCBNU1QgdG9wb2xvZ3kgd2l0aCB0d28gYWN0aXZlCj4gKyAgIHBheWxv YWRzLiBUb3BvbG9neSByZWZjb3VudCBpbmNyZW1lbnRzIGFyZSBpbmRpY2F0ZWQgYnkgc29saWQg bGluZXMsIGFuZAo+ICsgICBtYWxsb2MgcmVmY291bnQgaW5jcmVtZW50cyBhcmUgaW5kaWNhdGVk IGJ5IGRhc2hlZCBsaW5lcy4gRWFjaCBzdGFydHMgZnJvbQo+ICsgICB0aGUgYnJhbmNoIHdoaWNo IGluY3JlbWVudGVkIHRoZSByZWZjb3VudCwgYW5kIGVuZHMgYXQgdGhlIGJyYW5jaCB0byB3aGlj aAo+ICsgICB0aGUgcmVmY291bnQgYmVsb25ncyB0by4KPiArCj4gK0FzIHlvdSBjYW4gc2VlIGlu IGZpZ3VyZSAxLCBldmVyeSBicmFuY2ggaW5jcmVtZW50cyB0aGUgdG9wb2xvZ3kKPiArcmVmY291 bnQgb2YgaXQncyBjaGlsZHJlbiwgYW5kIGluY3JlbWVudHMgdGhlIG1hbGxvYyByZWZjb3VudCBv ZiBpdCdzIHBhcmVudC4KPiArQWRkaXRpb25hbGx5LCBldmVyeSBwYXlsb2FkIGluY3JlbWVudHMg dGhlIG1hbGxvYyByZWZjb3VudCBvZiBpdCdzIGFzc2lnbmVkIHBvcnQKPiArYnkgMS4KPiArCj4g K1NvLCB3aGF0IHdvdWxkIGhhcHBlbiBpZiBNU1RCICMzIGZyb20gdGhlIGFib3ZlIGZpZ3VyZSB3 YXMgdW5wbHVnZ2VkIGZyb20gdGhlCj4gK3N5c3RlbSwgYnV0IHRoZSBkcml2ZXIgaGFkbid0IHll dCByZW1vdmVkIHBheWxvYWQgIzIgZnJvbSBwb3J0ICMzPyBUaGUgdG9wb2xvZ3kKPiArd291bGQg c3RhcnQgdG8gbG9vayBsaWtlIGZpZ3VyZSAyLgo+ICsKPiArLi4ga2VybmVsLWZpZ3VyZTo6IGRw LW1zdC90b3BvbG9neS1maWd1cmUtMi5kb3QKPiArCj4gKyAgIFBvcnRzIGFuZCBicmFuY2ggZGV2 aWNlcyB3aGljaCBoYXZlIGJlZW4gcmVsZWFzZWQgZnJvbSBtZW1vcnkgYXJlIGNvbG9yZWQKPiAr ICAgZ3JleSwgYW5kIHJlZmVyZW5jZXMgd2hpY2ggaGF2ZSBiZWVuIHJlbW92ZWQgYXJlIGNvbG9y ZWQgcmVkLgo+ICsKPiArV2hlbmV2ZXIgYSBwb3J0IG9yIGJyYW5jaCBkZXZpY2UncyB0b3BvbG9n eSByZWZjb3VudCByZWFjaGVzIHplcm8sIGl0IHdpbGwKPiArZGVjcmVtZW50IHRoZSB0b3BvbG9n eSByZWZjb3VudHMgb2YgYWxsIGl0cyBjaGlsZHJlbiwgdGhlIG1hbGxvYyByZWZjb3VudCBvZiBp dHMKPiArcGFyZW50LCBhbmQgZmluYWxseSBpdHMgb3duIG1hbGxvYyByZWZjb3VudC4gRm9yIE1T VEIgIzQgYW5kIHBvcnQgIzQsIHRoaXMgbWVhbnMKPiArdGhleSBib3RoIGhhdmUgYmVlbiBkaXNj b25uZWN0ZWQgZnJvbSB0aGUgdG9wb2xvZ3kgYW5kIGZyZWVkIGZyb20gbWVtb3J5LiBCdXQsCj4g K2JlY2F1c2UgcGF5bG9hZCAjMiBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHBvcnQg IzMsIHBvcnQgIzMgaXMgcmVtb3ZlZAo+ICtmcm9tIHRoZSB0b3BvbG9neSBidXQgaXQncyA6Yzp0 eXBlOmBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0YCBpcyBzdGlsbCBhY2Nlc3NpYmxlCj4gK2Zyb20g bWVtb3J5LiBUaGlzIGFsc28gbWVhbnMgcG9ydCAjMyBoYXMgbm90IHlldCBkZWNyZW1lbnRlZCB0 aGUgbWFsbG9jIHJlZmNvdW50Cj4gK29mIE1TVEIgIzMsIHNvIGl0J3MgOmM6dHlwZTpgc3RydWN0 IGRybV9kcF9tc3RfYnJhbmNoYCB3aWxsIGFsc28gc3RheSBhbGxvY2F0ZWQKPiAraW4gbWVtb3J5 IHVudGlsIHBvcnQgIzMncyBtYWxsb2MgcmVmY291bnQgcmVhY2hlcyAwLgo+ICsKPiArVGhpcyBy ZWxhdGlvbnNoaXAgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaW4gb3JkZXIgdG8gcmVsZWFzZSBwYXls b2FkICMyLCB3ZQo+ICtuZWVkIHRvIGJlIGFibGUgdG8gZmlndXJlIG91dCB0aGUgbGFzdCByZWxh dGl2ZSBvZiBwb3J0ICMzIHRoYXQncyBzdGlsbAo+ICtjb25uZWN0ZWQgdG8gdGhlIHRvcG9sb2d5 LiBJbiB0aGlzIGNhc2UsIHdlIHdvdWxkIHRyYXZlbCB1cCB0aGUgdG9wb2xvZ3kgYXMKPiArc2hv d24gaW4gZmlndXJlIDMuCj4gKwo+ICsuLiBrZXJuZWwtZmlndXJlOjogZHAtbXN0L3RvcG9sb2d5 LWZpZ3VyZS0zLmRvdAo+ICsKPiArQW5kIGZpbmFsbHksIHJlbW92ZSBwYXlsb2FkICMyIGJ5IGNv bW11bmljYXRpbmcgd2l0aCBwb3J0ICMyIHRocm91Z2ggc2lkZWJhbmQKPiArdHJhbnNhY3Rpb25z LgoKKEJsaW5kIGd1ZXNzLCBJIGhhdmVuJ3QgbG9va2VkIGFoZWFkIGluIHRoZSBzZXJpZXMgeWV0 KQoKSSBhc3N1bWUgdGhhdCBkcml2ZXJzIGFsc28gd2FudCB0byBob2xkIGEgbWFsbG9jIHJlZmVy ZW5jZSBmcm9tIHRoZWlyCmNvbm5lY3RvciwgdW50aWwgdGhhdCBjb25uZWN0b3IgaXMgZGVzdHJv eWVkIGNvbXBsZXRlZCAoYW5kIHdlIGhlbmNlIGtub3cKaXQgcmVsZWFzZWQgYWxsIGl0cyB2Y3Bp IGFuZCBvdGhlciBzdHVmZiBhbmQgcmVhbGx5IGRvZXNuJ3QgbmVlZCB0aGUgcG9ydAphbnltb3Jl KS4gQ291bGQgd2UgaW50ZWdyYXRlZCB0aGF0IGludG8gdGhlc2UgbmVhdCBncmFwaHMgdG9vPyBB bnN3ZXJpbmcKdGhlICJzbyBob3cgZG9lcyB0aGlzIGludGVncmF0ZSBpbnRvIG15IGRyaXZlcj8i IHF1ZXN0aW9uIGlzIGltbyB0aGUgbW9zdAppbXBvcnRhbnQgcGFydCBmb3IgY29yZSBhcGkgZG9j cy4KCkFub3RoZXIgb25lOiBBbnkgcmVhc29uIGZvciBub3QgcHV0dGluZyB0aGlzIHJpZ2h0IGlu dG8gdGhlIGNvZGUgYXMgYSBET0M6CnNlY3Rpb24/IEltZSBtb3ZpbmcgZG9jcyBhcyBjbG9zZSBh cyBwb3NzaWJsZSB0byB0aGUgY29kZSBpbXByb3ZlcyB0aGUKb2RkcyBpdCdzIGtlcHQgdXAtdG8t ZGF0ZS4gVGhlIG9ubHkgb3ZlcnZpZXcgdGV4dHMgSSd2ZSBsZWZ0IGluIHRoZSAucnN0CmlzIHRo ZSBzdHVmZiB0aGF0IGRlc2NyaWJlcyBvdmVyYWxsIGNvbmNlcHRzIChlLmcuIGhvdyBhbGwgdGhl IGttcyBvYmplY3RzCmZpdCB0b2dldGhlcikuCgpBbGwgdGhlIHNwaGlueC9yc3Qgc3ludGF4IHNo b3VsZCBjYXJyeSBvdmVyIDE6MSwgZXhjZXB0IGluIGtlcm5lbGRvYyB5b3UKYWxzbyBjYW4gYmVu ZWZpdCBmcm9tIHRoZSBhYmJyZXZpYXRlZCByZWZlcmVuY2Ugc3ludGF4IGZyb20ga2VybmVsZG9j LgoKQW55d2F5LCByZWFsbHkgZ3JlYXQgc3R1ZmYuCgo+ICsKPiAgTUlQSSBEU0kgSGVscGVyIEZ1 bmN0aW9ucyBSZWZlcmVuY2UKPiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K PiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMg Yi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gaW5kZXggMmFiMTZjOWU2 MjQzLi5jMTk2ZmI1ODBiZWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9t c3RfdG9wb2xvZ3kuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5 LmMKPiBAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBkdW1wX2RwX3BheWxvYWRfdGFibGUo c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gIAkJCQkgIGNoYXIgKmJ1Zik7 Cj4gIHN0YXRpYyBpbnQgdGVzdF9jYWxjX3Bibl9tb2RlKHZvaWQpOwo+ICAKPiAtc3RhdGljIHZv aWQgZHJtX2RwX3B1dF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOwo+ICtzdGF0 aWMgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQpOwo+ICAKPiAgc3RhdGljIGludCBkcm1fZHBfZHBjZF93cml0ZV9wYXlsb2FkKHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJCQkJICAgICBpbnQgaWQsCj4g QEAgLTg1MCw0NiArODUwLDEyMCBAQCBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpk cm1fZHBfYWRkX21zdF9icmFuY2hfZGV2aWNlKHU4IGxjdCwgdTggKnJhZCkKPiAgCWlmIChsY3Qg PiAxKQo+ICAJCW1lbWNweShtc3RiLT5yYWQsIHJhZCwgbGN0IC8gMik7Cj4gIAlJTklUX0xJU1Rf SEVBRCgmbXN0Yi0+cG9ydHMpOwo+IC0Ja3JlZl9pbml0KCZtc3RiLT5rcmVmKTsKPiArCWtyZWZf aW5pdCgmbXN0Yi0+dG9wb2xvZ3lfa3JlZik7Cj4gKwlrcmVmX2luaXQoJm1zdGItPm1hbGxvY19r cmVmKTsKPiAgCXJldHVybiBtc3RiOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBkcm1fZHBfZnJl ZV9tc3RfcG9ydChzdHJ1Y3Qga3JlZiAqa3JlZik7Cj4gK3N0YXRpYyB2b2lkIGRybV9kcF9mcmVl X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKTsKCkknZCBtb3ZlIHRoZSBmdW5j dGlvbnMgYXJvdW5kLCBmb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3Igc3RhdGljIGZ1bmN0aW9ucwpp cyBhIGJpdCBzaWxseQoKPiArCj4gKy8qKgo+ICsgKiBkcm1fZHBfbXN0X2dldF9tc3RiX21hbGxv YygpIC0gSW5jcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQgb2YgYSBicmFuY2gKPiArICogZGV2 aWNlCj4gKyAqIEBtc3RiOiBUaGUgJnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB0byBpbmNyZW1l bnQgdGhlIG1hbGxvYyByZWZjb3VudCBvZgo+ICsgKgo+ICsgKiBJbmNyZW1lbnRzIEBtc3RiLm1h bGxvY19rcmVmLiBXaGVuIEBtc3RiLm1hbGxvY19rcmVmIHJlYWNoZXMgMCwgdGhlIG1lbW9yeQoK cy9ALyYvIGZvciBzdHJ1Y3R1cmUgbWVtYmVyIHJlZmVyZW5jZXMuIEAgcmVmZXJlbmNlcyB0byBw YXJhbWV0ZXJzL21lbWJlcnMKaW4gdGhlIHNhbWUga2VybmVsZG9jIHR5cGUgb25seS4gV2l0aCAm IHlvdSdsbCBnZXQgYSBuaWNlIGxpbmssIEAgaXMganVzdAptYXJrdXAgKGFuZCB5ZXMgJiB3aXRo IGEgbWVtYmVyIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBsaW5rIHRvIHRoZSBtZW1iZXIsCm9ubHkg dGhlIG92ZXJhbGwgc3RydWN0dXJlKS4KClNpbWlsYXJseSBiZWxvdy4KCj4gKyAqIGFsbG9jYXRp b24gZm9yIEBtc3RiIHdpbGwgYmUgcmVsZWFzZWQgYW5kIEBtc3RiIG1heSBubyBsb25nZXIgYmUg dXNlZC4KPiArICoKPiArICogQW55IG1hbGxvYyByZWZlcmVuY2VzIGFjcXVpcmVkIHdpdGggdGhp cyBmdW5jdGlvbiBtdXN0IGJlIHJlbGVhc2VkIHdoZW4KPiArICogdGhleSBhcmUgbm8gbG9uZ2Vy IGJlaW5nIHVzZWQgYnkgY2FsbGluZyBkcm1fZHBfbXN0X3B1dF9tc3RiX21hbGxvYygpLgoKSSdk IGRyb3BwZWQgIndoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIGJlaW5nIHVzZWQiLCBhbmQgdGhlIGxp bmUgYmVsb3cgdG9vLgpTaG9ydCBkb2NzIGFyZSBiZXR0ZXIgZ2VuZXJhbGx5IGJlY2F1c2UgYXR0 ZW50aW9uIHNwYW4gb2YgcmVhZGVycy4KCj4gKyAqCj4gKyAqIFNlZSBhbHNvOiBkcm1fZHBfbXN0 X3B1dF9tc3RiX21hbGxvYygpCj4gKyAqLwo+ICtzdGF0aWMgdm9pZAo+ICtkcm1fZHBfbXN0X2dl dF9tc3RiX21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCj4gK3sKPiArCWty ZWZfZ2V0KCZtc3RiLT5tYWxsb2Nfa3JlZik7Cj4gKwlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxu IiwgbXN0Yiwga3JlZl9yZWFkKCZtc3RiLT5tYWxsb2Nfa3JlZikpOwo+ICt9Cj4gKwo+ICsvKioK PiArICogZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2MoKSAtIERlY3JlbWVudCB0aGUgbWFsbG9j IHJlZmNvdW50IG9mIGEgYnJhbmNoCj4gKyAqIGRldmljZQo+ICsgKiBAbXN0YjogVGhlICZzdHJ1 Y3QgZHJtX2RwX21zdF9icmFuY2ggdG8gZGVjcmVtZW50IHRoZSBtYWxsb2MgcmVmY291bnQgb2YK PiArICoKPiArICogRGVjcmVtZW50cyBAbXN0Yi5tYWxsb2Nfa3JlZi4gV2hlbiBAbXN0Yi5tYWxs b2Nfa3JlZiByZWFjaGVzIDAsIHRoZSBtZW1vcnkKPiArICogYWxsb2NhdGlvbiBmb3IgQG1zdGIg d2lsbCBiZSByZWxlYXNlZCBhbmQgQG1zdGIgbWF5IG5vIGxvbmdlciBiZSB1c2VkLgo+ICsgKgo+ ICsgKiBTZWUgYWxzbzogZHJtX2RwX21zdF9nZXRfbXN0Yl9tYWxsb2MoKQo+ICsgKi8KPiArc3Rh dGljIHZvaWQKPiArZHJtX2RwX21zdF9wdXRfbXN0Yl9tYWxsb2Moc3RydWN0IGRybV9kcF9tc3Rf YnJhbmNoICptc3RiKQo+ICt7Cj4gKwlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxuIiwgbXN0Yiwg a3JlZl9yZWFkKCZtc3RiLT5tYWxsb2Nfa3JlZiktMSk7Cj4gKwlrcmVmX3B1dCgmbXN0Yi0+bWFs bG9jX2tyZWYsIGRybV9kcF9mcmVlX21zdF9icmFuY2hfZGV2aWNlKTsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIGRybV9kcF9tc3RfZ2V0X3BvcnRfbWFsbG9jKCkgLSBJbmNyZW1lbnQgdGhlIG1hbGxv YyByZWZjb3VudCBvZiBhbiBNU1QgcG9ydAo+ICsgKiBAcG9ydDogVGhlICZzdHJ1Y3QgZHJtX2Rw X21zdF9wb3J0IHRvIGluY3JlbWVudCB0aGUgbWFsbG9jIHJlZmNvdW50IG9mCj4gKyAqCj4gKyAq IEluY3JlbWVudHMgQHBvcnQubWFsbG9jX2tyZWYuIFdoZW4gQHBvcnQubWFsbG9jX2tyZWYgcmVh Y2hlcyAwLCB0aGUgbWVtb3J5Cj4gKyAqIGFsbG9jYXRpb24gZm9yIEBwb3J0IHdpbGwgYmUgcmVs ZWFzZWQgYW5kIEBwb3J0IG1heSBubyBsb25nZXIgYmUgdXNlZC4KPiArICoKPiArICogQmVjYXVz ZSBAcG9ydCBjb3VsZCBwb3RlbnRpYWxseSBiZSBmcmVlZCBhdCBhbnkgdGltZSBieSB0aGUgRFAg TVNUIGhlbHBlcnMKPiArICogaWYgQHBvcnQubWFsbG9jX2tyZWYgcmVhY2hlcyAwLCBpbmNsdWRp bmcgZHVyaW5nIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLAo+ICsgKiBkcml2ZXJzIHRoYXQgd2hp Y2ggdG8gbWFrZSB1c2Ugb2YgJnN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgc2hvdWxkIGVuc3VyZQo+ ICsgKiB0aGF0IHRoZXkgZ3JhYiBhdCBsZWFzdCBvbmUgbWFpbiBtYWxsb2MgcmVmZXJlbmNlIHRv IHRoZWlyIE1TVCBwb3J0cyBpbgo+ICsgKiAmZHJtX2RwX21zdF90b3BvbG9neV9jYnMuYWRkX2Nv bm5lY3Rvci4gVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYmVmb3JlCj4gKyAqIHRoZXJlIGlzIGFu eSBjaGFuY2UgZm9yIEBwb3J0Lm1hbGxvY19rcmVmIHRvIHJlYWNoIDAuCj4gKyAqCj4gKyAqIEFu eSBtYWxsb2MgcmVmZXJlbmNlcyBhY3F1aXJlZCB3aXRoIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBy ZWxlYXNlZCB3aGVuCj4gKyAqIHRoZXkgYXJlIG5vIGxvbmdlciBiZWluZyB1c2VkIGJ5IGNhbGxp bmcgZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2MoKS4KPiArICoKPiArICogU2VlIGFsc286IGRy bV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKCkKClNhbWUgcmVkdWN0aW9uIGFzIHdpdGggbXN0Yl9t YWxsb2MgdmVyc2lvbi4KCj4gKyAqLwo+ICt2b2lkCj4gK2RybV9kcF9tc3RfZ2V0X3BvcnRfbWFs bG9jKHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpCj4gK3sKPiArCWtyZWZfZ2V0KCZwb3J0 LT5tYWxsb2Nfa3JlZik7Cj4gKwlEUk1fREVCVUcoInBvcnQgJXAgKCVkKVxuIiwgcG9ydCwga3Jl Zl9yZWFkKCZwb3J0LT5tYWxsb2Nfa3JlZikpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2Rw X21zdF9nZXRfcG9ydF9tYWxsb2MpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9kcF9tc3RfcHV0X3Bv cnRfbWFsbG9jKCkgLSBEZWNyZW1lbnQgdGhlIG1hbGxvYyByZWZjb3VudCBvZiBhbiBNU1QgcG9y dAo+ICsgKiBAcG9ydDogVGhlICZzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0IHRvIGRlY3JlbWVudCB0 aGUgbWFsbG9jIHJlZmNvdW50IG9mCj4gKyAqCj4gKyAqIERlY3JlbWVudHMgQHBvcnQubWFsbG9j X2tyZWYuIFdoZW4gQHBvcnQubWFsbG9jX2tyZWYgcmVhY2hlcyAwLCB0aGUgbWVtb3J5Cj4gKyAq IGFsbG9jYXRpb24gZm9yIEBwb3J0IHdpbGwgYmUgcmVsZWFzZWQgYW5kIEBwb3J0IG1heSBubyBs b25nZXIgYmUgdXNlZC4KPiArICoKPiArICogU2VlIGFsc286IGRybV9kcF9tc3RfZ2V0X3BvcnRf bWFsbG9jKCkKPiArICovCj4gK3ZvaWQKPiArZHJtX2RwX21zdF9wdXRfcG9ydF9tYWxsb2Moc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiArewo+ICsJRFJNX0RFQlVHKCJwb3J0ICVwICgl ZClcbiIsIHBvcnQsIGtyZWZfcmVhZCgmcG9ydC0+bWFsbG9jX2tyZWYpLTEpOwo+ICsJa3JlZl9w dXQoJnBvcnQtPm1hbGxvY19rcmVmLCBkcm1fZHBfZnJlZV9tc3RfcG9ydCk7Cj4gK30KPiArRVhQ T1JUX1NZTUJPTChkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyk7Cj4gIAo+ICBzdGF0aWMgdm9p ZCBkcm1fZHBfZnJlZV9tc3RfYnJhbmNoX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZikKPiAgewo+ IC0Jc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiID0gY29udGFpbmVyX29mKGtyZWYsIHN0 cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCwga3JlZik7Cj4gLQlpZiAobXN0Yi0+cG9ydF9wYXJlbnQp IHsKPiAtCQlpZiAobGlzdF9lbXB0eSgmbXN0Yi0+cG9ydF9wYXJlbnQtPm5leHQpKQo+IC0JCQlr cmVmX3B1dCgmbXN0Yi0+cG9ydF9wYXJlbnQtPmtyZWYsIGRybV9kcF9mcmVlX21zdF9wb3J0KTsK PiAtCX0KPiArCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiA9Cj4gKwkJY29udGFpbmVy X29mKGtyZWYsIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCwgbWFsbG9jX2tyZWYpOwo+ICsKPiAr CWlmIChtc3RiLT5wb3J0X3BhcmVudCkKPiArCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyht c3RiLT5wb3J0X3BhcmVudCk7Cj4gKwo+ICAJa2ZyZWUobXN0Yik7Cj4gIH0KPiAgCj4gIHN0YXRp YyB2b2lkIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVm KQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIgPSBjb250YWluZXJfb2Yo a3JlZiwgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoLCBrcmVmKTsKPiArCXN0cnVjdCBkcm1fZHBf bXN0X2JyYW5jaCAqbXN0YiA9Cj4gKwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkcm1fZHBf bXN0X2JyYW5jaCwgdG9wb2xvZ3lfa3JlZik7Cj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3IgKm1nciA9IG1zdGItPm1ncjsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQs ICp0bXA7Cj4gIAlib29sIHdha2VfdHggPSBmYWxzZTsKPiAgCj4gLQkvKgo+IC0JICogaW5pdCBr cmVmIGFnYWluIHRvIGJlIHVzZWQgYnkgcG9ydHMgdG8gcmVtb3ZlIG1zdCBicmFuY2ggd2hlbiBp dCBpcwo+IC0JICogbm90IG5lZWRlZCBhbnltb3JlCj4gLQkgKi8KPiAtCWtyZWZfaW5pdChrcmVm KTsKPiAtCj4gLQlpZiAobXN0Yi0+cG9ydF9wYXJlbnQgJiYgbGlzdF9lbXB0eSgmbXN0Yi0+cG9y dF9wYXJlbnQtPm5leHQpKQo+IC0JCWtyZWZfZ2V0KCZtc3RiLT5wb3J0X3BhcmVudC0+a3JlZik7 Cj4gLQo+IC0JLyoKPiAtCSAqIGRlc3Ryb3kgYWxsIHBvcnRzIC0gZG9uJ3QgbmVlZCBsb2NrCj4g LQkgKiBhcyB0aGVyZSBhcmUgbm8gbW9yZSByZWZlcmVuY2VzIHRvIHRoZSBtc3QgYnJhbmNoCj4g LQkgKiBkZXZpY2UgYXQgdGhpcyBwb2ludC4KPiAtCSAqLwo+ICsJbXV0ZXhfbG9jaygmbWdyLT5s b2NrKTsKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCB0bXAsICZtc3RiLT5wb3J0 cywgbmV4dCkgewo+ICAJCWxpc3RfZGVsKCZwb3J0LT5uZXh0KTsKPiAtCQlkcm1fZHBfcHV0X3Bv cnQocG9ydCk7Cj4gKwkJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsKPiAgCX0K PiArCW11dGV4X3VubG9jaygmbWdyLT5sb2NrKTsKCldvdWxkIGJlIG5pY2UgdG8gc3BsaXQgdGhp cyBvdXQgKHRvIGhpZ2hsaWdodCB0aGUgYnVnZml4IG1vcmUpLCBidXQKYmVjYXVzZSBvZiB0aGUg a3JlZl9pbml0KCkgaGFjayBub3QgcmVhbGx5IGZlYXNpYmxlIEkgdGhpbmsgOi0vCj4gIAo+ICAJ LyogZHJvcCBhbnkgdHggc2xvdHMgbXNnICovCj4gIAltdXRleF9sb2NrKCZtc3RiLT5tZ3ItPnFs b2NrKTsKPiBAQCAtOTA4LDE0ICs5ODIsODIgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lf bXN0X2JyYW5jaF9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpCj4gIAlpZiAod2FrZV90eCkKPiAg CQl3YWtlX3VwX2FsbCgmbXN0Yi0+bWdyLT50eF93YWl0cSk7Cj4gIAo+IC0Ja3JlZl9wdXQoa3Jl ZiwgZHJtX2RwX2ZyZWVfbXN0X2JyYW5jaF9kZXZpY2UpOwo+ICsJZHJtX2RwX21zdF9wdXRfbXN0 Yl9tYWxsb2MobXN0Yik7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGRybV9kcF9wdXRfbXN0X2Jy YW5jaF9kZXZpY2Uoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiKQo+ICsvKioKPiArICog ZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YigpIC0gSW5jcmVtZW50IHRoZSB0b3BvbG9neSBy ZWZjb3VudCBvZiBhCj4gKyAqIGJyYW5jaCBkZXZpY2UgdW5sZXNzIGl0cyB6ZXJvCj4gKyAqIEBt c3RiOiAmc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIHRvIGluY3JlbWVudCB0aGUgdG9wb2xvZ3kg cmVmY291bnQgb2YKPiArICoKPiArICogQXR0ZW1wdHMgdG8gZ3JhYiBhIHRvcG9sb2d5IHJlZmVy ZW5jZSB0byBAbXN0YiwgaWYgaXQgaGFzbid0IHlldCBiZWVuCj4gKyAqIHJlbW92ZWQgZnJvbSB0 aGUgdG9wb2xvZ3kgKGUuZy4gQG1zdGIudG9wb2xvZ3lfa3JlZiBoYXMgcmVhY2hlZCAwKS4KPiAr ICoKPiArICogQW55IHRvcG9sb2d5IHJlZmVyZW5jZXMgYWNxdWlyZWQgd2l0aCB0aGlzIGZ1bmN0 aW9uIG11c3QgYmUgcmVsZWFzZWQgd2hlbgo+ICsgKiB0aGV5IGFyZSBubyBsb25nZXIgYmVpbmcg dXNlZCBieSBjYWxsaW5nIGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIoKS4KCkknZCBleHBs YWluIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBtYWxsb2Nfa3JlZiBhIGJpdCBoZXJlOgoKLSB0b3Bv bG9neSByZWYgaW1wbGllcyBhIG1hbGxvYyByZWYsIGhlbmNlIHlvdSBjYW4gY2FsbCBnZXRfbXN0 Yl9tYWxsb2MKICB3aXRoIG9ubHkgaG9sZGluZyBhIHRvcG9sb2d5IHJlZiAobWlnaHQgYmUgYmV0 dGVyIHRvIGV4cGxhaW4gdGhpcyBpbiB0aGUKICBnZXRfbXN0Yl9tYWxsb2Mga2VybmVsZG9jLCBz aW5jZSBpdCBhbHNvIGFwcGxpZXMgdG8gdGhlIHVuY29uZGl0aW9uYWwKICBrcmVmX2dldCBiZWxv dykKLSBtYWxsb2NfcmVmIGlzIGVub3VnaCB0byBjYWxsIHRoaXMgZnVuY3Rpb24sIGJ1dCB0aGVu IGl0IGNhbiBmYWlsCgo+ICsgKgo+ICsgKiBTZWUgYWxzbzoKPiArICogZHJtX2RwX21zdF90b3Bv bG9neV9yZWZfbXN0YigpCgpJJ2Qgd3JpdGUgb3V0IHdoZW4geW91IHNob3VsZCB1c2UgdGhpcyBv bmUgaW5zdGVhZDoKCiJJZiB5b3UgYWxyZWFkeSBoYXZlIGEgdG9wb2xvZ3kgcmVmZXJlbmNlIHlv dSBzaG91bGQgdXNlIG90aGVyX2Z1bmN0aW9uKCkKaW5zdGVhZC4iCgo+ICsgKiBkcm1fZHBfbXN0 X3RvcG9sb2d5X2dldF9tc3RiKCkKClRoaXMgaXMgdGhpcyBmdW5jdGlvbiBpdHNlbGYgOi0pCgo+ ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiAqIDE6IEEgdG9wb2xvZ3kgcmVmZXJlbmNlIHdhcyBn cmFiYmVkIHN1Y2Nlc3NmdWxseQo+ICsgKiAqIDA6IEBwb3J0IGlzIG5vIGxvbmdlciBpbiB0aGUg dG9wb2xvZ3ksIG5vIHJlZmVyZW5jZSB3YXMgZ3JhYmJlZAo+ICsgKi8KPiArc3RhdGljIGludCBf X211c3RfY2hlY2sKPiArZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YihzdHJ1Y3QgZHJtX2Rw X21zdF9icmFuY2ggKm1zdGIpCgpIbSBpZiB5b3UgYm90aCB3YW50IGEga3JlZl9nZXQgYW5kIGEg a3JlZl9nZXRfdW5sZXNzX3plcm8gdGhlbiB3ZSBuZWVkCmJldHRlciBuYW1pbmcuIHRvcG9sb2d5 X2dldF9tc3RiIHNob3VsZCBiZSB0aGUgdW5jb25kaXRpb25hbCBrcmVmX2dldCwgdGhlCmNvbmRp dGlvbmFsIGtyZWZfZ2V0X3VubGVzc196ZXJvIG5lZWRzIHNvbWUgaW5kaWNhdGlvbiB0aGF0IGl0 IGNvdWxkIGZhaWwuCldlIG5lZWQgc29tZSB2ZXJiIHRoYXQgaW5kaWNhdGVzIHRoYXQgaW5zdGVh ZCBvZiAiZ2V0IjoKLSAidmFsaWRhdGUiIHNpbmNlIHdlJ3ZlIHVzZWQgdGhhdCBvbmUgYWxyZWFk eQotICJsb29rdXAiIHRoYXQncyB1c2VkIGJ5IGFsbCB0aGUgZHJtX21vZGVfb2JqZWN0IGxvb2t1 cCBmdW5jdGlvbnMsIGZlZWxzCiAgYSBiaXQgbWlzbGVhZGluZwotICJ0cnlfZ2V0IgoKPiAgewo+ IC0Ja3JlZl9wdXQoJm1zdGItPmtyZWYsIGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNl KTsKPiArCWludCByZXQgPSBrcmVmX2dldF91bmxlc3NfemVybygmbXN0Yi0+dG9wb2xvZ3lfa3Jl Zik7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlEUk1fREVCVUcoIm1zdGIgJXAgKCVkKVxuIiwgbXN0 YiwKPiArCQkJICBrcmVmX3JlYWQoJm1zdGItPnRvcG9sb2d5X2tyZWYpKTsKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX2RwX21zdF90b3BvbG9neV9yZWZfbXN0 YigpIC0gSW5jcmVtZW50IHRoZSB0b3BvbG9neSByZWZjb3VudCBvZiBhCj4gKyAqIGJyYW5jaCBk ZXZpY2UKPiArICogQG1zdGI6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoIHRvIGluY3Jl bWVudCB0aGUgdG9wb2xvZ3kgcmVmY291bnQgb2YKPiArICoKPiArICogSW5jcmVtZW50cyBAbXN0 Yi50b3BvbG9neV9yZWZjb3VudCB3aXRob3V0IGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IGl0J3MK PiArICogYWxyZWFkeSByZWFjaGVkIDAuIFRoaXMgaXMgb25seSB2YWxpZCB0byB1c2UgaW4gc2Nl bmFyaW9zIHdoZXJlIHlvdSBhcmUKPiArICogYWxyZWFkeSBndWFyYW50ZWVkIHRvIGhhdmUgYXQg bGVhc3Qgb25lIGFjdGl2ZSB0b3BvbG9neSByZWZlcmVuY2UgdG8gQG1zdGIuCj4gKyAqIE90aGVy d2lzZSwgZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YigpIHNob3VsZCBiZSB1c2VkLgoKcy9z aG91bGQvbXVzdC8gIChvciBteSBFbmdsaXNoIHVuZGVyc3RhbmRpbmcgaXMgb2ZmLCBhZmFpdWkg InNob3VsZCIgaXNuJ3QKYSBzdHJpY3QgcmVxdWlyZW1lbnQgcGVyIHJmYzIxMTkpCgo+ICsgKgo+ ICsgKiBBbnkgdG9wb2xvZ3kgcmVmZXJlbmNlcyBhY3F1aXJlZCB3aXRoIHRoaXMgZnVuY3Rpb24g bXVzdCBiZSByZWxlYXNlZCB3aGVuCj4gKyAqIHRoZXkgYXJlIG5vIGxvbmdlciBiZWluZyB1c2Vk IGJ5IGNhbGxpbmcgZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0YigpLgo+ICsgKgo+ICsgKiBT ZWUgYWxzbzoKPiArICogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YigpCj4gKyAqIGRybV9k cF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIoKQo+ICsgKi8KPiArc3RhdGljIHZvaWQKPiArZHJtX2Rw X21zdF90b3BvbG9neV9yZWZfbXN0YihzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCj4g K3sKClNob3VsZCB3ZSBoYXZlIGEgV0FSTl9PTihyZWZjb3VudCA9PSAwKSBoZXJlPwoKPiArCWty ZWZfZ2V0KCZtc3RiLT50b3BvbG9neV9rcmVmKTsKPiArCURSTV9ERUJVRygibXN0YiAlcCAoJWQp XG4iLCBtc3RiLCBrcmVmX3JlYWQoJm1zdGItPnRvcG9sb2d5X2tyZWYpKTsKPiAgfQo+ICAKPiAr LyoqCj4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIoKSAtIHJlbGVhc2UgYSB0b3Bv bG9neSByZWZlcmVuY2UgdG8gYSBicmFuY2gKPiArICogZGV2aWNlCj4gKyAqIEBtc3RiOiBUaGUg JnN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB0byByZWxlYXNlIHRoZSB0b3BvbG9neSByZWZlcmVu Y2UgZnJvbQo+ICsgKgo+ICsgKiBSZWxlYXNlcyBhIHRvcG9sb2d5IHJlZmVyZW5jZSBmcm9tIEBt c3RiIGJ5IGRlY3JlbWVudGluZwo+ICsgKiBAbXN0Yi50b3BvbG9neV9rcmVmLgo+ICsgKgo+ICsg KiBTZWUgYWxzbzoKPiArICogZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0YigpCj4gKyAqIGRy bV9kcF9tc3RfdG9wb2xvZ3lfcmVmX21zdGIoKQo+ICsgKi8KPiArc3RhdGljIHZvaWQKPiArZHJt X2RwX21zdF90b3BvbG9neV9wdXRfbXN0YihzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIp Cj4gK3sKPiArCURSTV9ERUJVRygibXN0YiAlcCAoJWQpXG4iLCBtc3RiLCBrcmVmX3JlYWQoJm1z dGItPnRvcG9sb2d5X2tyZWYpLTEpOwo+ICsJa3JlZl9wdXQoJm1zdGItPnRvcG9sb2d5X2tyZWYs IGRybV9kcF9kZXN0cm95X21zdF9icmFuY2hfZGV2aWNlKTsKPiArfQo+ICAKPiAgc3RhdGljIHZv aWQgZHJtX2RwX3BvcnRfdGVhcmRvd25fcGR0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQs IGludCBvbGRfcGR0KQo+ICB7Cj4gQEAgLTkzMCwxNCArMTA3MiwxNSBAQCBzdGF0aWMgdm9pZCBk cm1fZHBfcG9ydF90ZWFyZG93bl9wZHQoc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50 IG9sZF9wZHQpCj4gIAljYXNlIERQX1BFRVJfREVWSUNFX01TVF9CUkFOQ0hJTkc6Cj4gIAkJbXN0 YiA9IHBvcnQtPm1zdGI7Cj4gIAkJcG9ydC0+bXN0YiA9IE5VTEw7Cj4gLQkJZHJtX2RwX3B1dF9t c3RfYnJhbmNoX2RldmljZShtc3RiKTsKPiArCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3Ri KG1zdGIpOwo+ICAJCWJyZWFrOwo+ICAJfQo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBkcm1fZHBf ZGVzdHJveV9wb3J0KHN0cnVjdCBrcmVmICprcmVmKQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2RwX21z dF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQs IGtyZWYpOwo+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCA9Cj4gKwkJY29udGFpbmVy X29mKGtyZWYsIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQsIHRvcG9sb2d5X2tyZWYpOwo+ICAJc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IgPSBwb3J0LT5tZ3I7Cj4gIAo+ICAJaWYg KCFwb3J0LT5pbnB1dCkgewo+IEBAIC05NTYsNyArMTA5OSw2IEBAIHN0YXRpYyB2b2lkIGRybV9k cF9kZXN0cm95X3BvcnQoc3RydWN0IGtyZWYgKmtyZWYpCj4gIAkJCSAqIGZyb20gYW4gRURJRCBy ZXRyaWV2YWwgKi8KPiAgCj4gIAkJCW11dGV4X2xvY2soJm1nci0+ZGVzdHJveV9jb25uZWN0b3Jf bG9jayk7Cj4gLQkJCWtyZWZfZ2V0KCZwb3J0LT5wYXJlbnQtPmtyZWYpOwo+ICAJCQlsaXN0X2Fk ZCgmcG9ydC0+bmV4dCwgJm1nci0+ZGVzdHJveV9jb25uZWN0b3JfbGlzdCk7Cj4gIAkJCW11dGV4 X3VubG9jaygmbWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl9sb2NrKTsKPiAgCQkJc2NoZWR1bGVfd29y aygmbWdyLT5kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKTsKPiBAQCAtOTY3LDI1ICsxMTA5LDkzIEBA IHN0YXRpYyB2b2lkIGRybV9kcF9kZXN0cm95X3BvcnQoc3RydWN0IGtyZWYgKmtyZWYpCj4gIAkJ ZHJtX2RwX3BvcnRfdGVhcmRvd25fcGR0KHBvcnQsIHBvcnQtPnBkdCk7Cj4gIAkJcG9ydC0+cGR0 ID0gRFBfUEVFUl9ERVZJQ0VfTk9ORTsKPiAgCX0KPiAtCWtmcmVlKHBvcnQpOwo+ICsJZHJtX2Rw X21zdF9wdXRfcG9ydF9tYWxsb2MocG9ydCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGRybV9k cF9wdXRfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ICsvKioKPiArICogZHJt X2RwX21zdF90b3BvbG9neV9nZXRfcG9ydCgpIC0gSW5jcmVtZW50IHRoZSB0b3BvbG9neSByZWZj b3VudCBvZiBhCj4gKyAqIHBvcnQgdW5sZXNzIGl0cyB6ZXJvCj4gKyAqIEBwb3J0OiAmc3RydWN0 IGRybV9kcF9tc3RfcG9ydCB0byBpbmNyZW1lbnQgdGhlIHRvcG9sb2d5IHJlZmNvdW50IG9mCj4g KyAqCj4gKyAqIEF0dGVtcHRzIHRvIGdyYWIgYSB0b3BvbG9neSByZWZlcmVuY2UgdG8gQHBvcnQs IGlmIGl0IGhhc24ndCB5ZXQgYmVlbgo+ICsgKiByZW1vdmVkIGZyb20gdGhlIHRvcG9sb2d5IChl LmcuIEBwb3J0LnRvcG9sb2d5X2tyZWYgaGFzIHJlYWNoZWQgMCkuCj4gKyAqCj4gKyAqIEFueSB0 b3BvbG9neSByZWZlcmVuY2VzIGFjcXVpcmVkIHdpdGggdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHJl bGVhc2VkIHdoZW4KPiArICogdGhleSBhcmUgbm8gbG9uZ2VyIGJlaW5nIHVzZWQgYnkgY2FsbGlu ZyBkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KCkuCj4gKyAqCj4gKyAqIFNlZSBhbHNvOgo+ ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5X3JlZl9wb3J0KCkKPiArICogZHJtX2RwX21zdF90b3Bv bG9neV9wdXRfcG9ydCgpCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqICogMTogQSB0b3BvbG9n eSByZWZlcmVuY2Ugd2FzIGdyYWJiZWQgc3VjY2Vzc2Z1bGx5Cj4gKyAqICogMDogQHBvcnQgaXMg bm8gbG9uZ2VyIGluIHRoZSB0b3BvbG9neSwgbm8gcmVmZXJlbmNlIHdhcyBncmFiYmVkCj4gKyAq Lwo+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjawo+ICtkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9w b3J0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpCj4gIHsKPiAtCWtyZWZfcHV0KCZwb3J0 LT5rcmVmLCBkcm1fZHBfZGVzdHJveV9wb3J0KTsKPiArCWludCByZXQgPSBrcmVmX2dldF91bmxl c3NfemVybygmcG9ydC0+dG9wb2xvZ3lfa3JlZik7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlEUk1f REVCVUcoInBvcnQgJXAgKCVkKVxuIiwgcG9ydCwKPiArCQkJICBrcmVmX3JlYWQoJnBvcnQtPnRv cG9sb2d5X2tyZWYpKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1zdGF0aWMgc3Ry dWN0IGRybV9kcF9tc3RfYnJhbmNoICpkcm1fZHBfbXN0X2dldF92YWxpZGF0ZWRfbXN0Yl9yZWZf bG9ja2VkKHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0Yiwgc3RydWN0IGRybV9kcF9tc3Rf YnJhbmNoICp0b19maW5kKQo+ICsvKioKPiArICogZHJtX2RwX21zdF90b3BvbG9neV9yZWZfcG9y dCgpIC0gSW5jcmVtZW50IHRoZSB0b3BvbG9neSByZWZjb3VudCBvZiBhIHBvcnQKPiArICogQHBv cnQ6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfcG9ydCB0byBpbmNyZW1lbnQgdGhlIHRvcG9sb2d5 IHJlZmNvdW50IG9mCj4gKyAqCj4gKyAqIEluY3JlbWVudHMgQHBvcnQudG9wb2xvZ3lfcmVmY291 bnQgd2l0aG91dCBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCBpdCdzCj4gKyAqIGFscmVhZHkgcmVh Y2hlZCAwLiBUaGlzIGlzIG9ubHkgdmFsaWQgdG8gdXNlIGluIHNjZW5hcmlvcyB3aGVyZSB5b3Ug YXJlCj4gKyAqIGFscmVhZHkgZ3VhcmFudGVlZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBhY3RpdmUg dG9wb2xvZ3kgcmVmZXJlbmNlIHRvIEBwb3J0Lgo+ICsgKiBPdGhlcndpc2UsIGRybV9kcF9tc3Rf dG9wb2xvZ3lfZ2V0X3BvcnQoKSBzaG91bGQgYmUgdXNlZC4KPiArICoKPiArICogQW55IHRvcG9s b2d5IHJlZmVyZW5jZXMgYWNxdWlyZWQgd2l0aCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgcmVsZWFz ZWQgd2hlbgo+ICsgKiB0aGV5IGFyZSBubyBsb25nZXIgYmVpbmcgdXNlZCBieSBjYWxsaW5nIGRy bV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQoKS4KPiArICoKPiArICogU2VlIGFsc286Cj4gKyAq IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnQoKQo+ICsgKiBkcm1fZHBfbXN0X3RvcG9sb2d5 X3B1dF9wb3J0KCkKPiArICovCj4gK3N0YXRpYyB2b2lkIGRybV9kcF9tc3RfdG9wb2xvZ3lfcmVm X3BvcnQoc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiArewo+ICsJa3JlZl9nZXQoJnBv cnQtPnRvcG9sb2d5X2tyZWYpOwo+ICsJRFJNX0RFQlVHKCJwb3J0ICVwICglZClcbiIsIHBvcnQs IGtyZWZfcmVhZCgmcG9ydC0+dG9wb2xvZ3lfa3JlZikpOwo+ICt9Cj4gKwo+ICsvKioKPiArICog ZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydCgpIC0gcmVsZWFzZSBhIHRvcG9sb2d5IHJlZmVy ZW5jZSB0byBhIHBvcnQKPiArICogQHBvcnQ6IFRoZSAmc3RydWN0IGRybV9kcF9tc3RfcG9ydCB0 byByZWxlYXNlIHRoZSB0b3BvbG9neSByZWZlcmVuY2UgZnJvbQo+ICsgKgo+ICsgKiBSZWxlYXNl cyBhIHRvcG9sb2d5IHJlZmVyZW5jZSBmcm9tIEBwb3J0IGJ5IGRlY3JlbWVudGluZwo+ICsgKiBA cG9ydC50b3BvbG9neV9rcmVmLgo+ICsgKgo+ICsgKiBTZWUgYWxzbzoKPiArICogZHJtX2RwX21z dF90b3BvbG9neV9nZXRfcG9ydCgpCj4gKyAqIGRybV9kcF9tc3RfdG9wb2xvZ3lfcmVmX3BvcnQo KQo+ICsgKi8KPiArc3RhdGljIHZvaWQgZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ICt7Cj4gKwlEUk1fREVCVUcoInBvcnQgJXAgKCVk KVxuIiwgcG9ydCwga3JlZl9yZWFkKCZwb3J0LT50b3BvbG9neV9rcmVmKS0xKTsKPiArCWtyZWZf cHV0KCZwb3J0LT50b3BvbG9neV9rcmVmLCBkcm1fZHBfZGVzdHJveV9wb3J0KTsKPiArfQo+ICsK PiArc3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqCj4gK2RybV9kcF9tc3RfdG9wb2xv Z3lfZ2V0X21zdGJfdmFsaWRhdGVkX2xvY2tlZChzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1z dGIsCj4gKwkJCQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICp0b19maW5kKQo+ICB7 Cj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Owo+ICAJc3RydWN0IGRybV9kcF9tc3Rf YnJhbmNoICpybXN0YjsKPiAtCWlmICh0b19maW5kID09IG1zdGIpIHsKPiAtCQlrcmVmX2dldCgm bXN0Yi0+a3JlZik7Cj4gKwo+ICsJaWYgKHRvX2ZpbmQgPT0gbXN0YikKPiAgCQlyZXR1cm4gbXN0 YjsKPiAtCX0KPiArCj4gIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZtc3RiLT5wb3J0cywg bmV4dCkgewo+ICAJCWlmIChwb3J0LT5tc3RiKSB7Cj4gLQkJCXJtc3RiID0gZHJtX2RwX21zdF9n ZXRfdmFsaWRhdGVkX21zdGJfcmVmX2xvY2tlZChwb3J0LT5tc3RiLCB0b19maW5kKTsKPiArCQkJ cm1zdGIgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiX3ZhbGlkYXRlZF9sb2NrZWQoCgpJ IHRoaW5rIGEgcHJlcCBwYXRjaCB3aGljaCBqdXN0IHJlbmFtZXMgdGhlIGN1cnJlbnQgZ2V0X3Zh bGlkYXRlZC9wdXQKZnVuY3Rpb25zIHRvIHRoZSBuZXcgbmFtZXMgd291bGQgYmUgcmVhbGx5IGdv b2QuIFRoZW4gdGhpcyBwYXRjaCBoZXJlIHdpdGgKdGhlIG5ldyBzdHVmZi4KCgo+ICsJCQkgICAg cG9ydC0+bXN0YiwgdG9fZmluZCk7Cj4gIAkJCWlmIChybXN0YikKPiAgCQkJCXJldHVybiBybXN0 YjsKPiAgCQl9Cj4gQEAgLTk5MywyNyArMTIwMywzNyBAQCBzdGF0aWMgc3RydWN0IGRybV9kcF9t c3RfYnJhbmNoICpkcm1fZHBfbXN0X2dldF92YWxpZGF0ZWRfbXN0Yl9yZWZfbG9ja2VkKHN0cnVj dAo+ICAJcmV0dXJuIE5VTEw7Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9i cmFuY2ggKmRybV9kcF9nZXRfdmFsaWRhdGVkX21zdGJfcmVmKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyLCBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCj4gK3N0YXRp YyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKgo+ICtkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9t c3RiX3ZhbGlkYXRlZChzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiArCQkJ CSAgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIpCj4gIHsKPiAgCXN0cnVjdCBk cm1fZHBfbXN0X2JyYW5jaCAqcm1zdGIgPSBOVUxMOwo+ICsKPiAgCW11dGV4X2xvY2soJm1nci0+ bG9jayk7Cj4gLQlpZiAobWdyLT5tc3RfcHJpbWFyeSkKPiAtCQlybXN0YiA9IGRybV9kcF9tc3Rf Z2V0X3ZhbGlkYXRlZF9tc3RiX3JlZl9sb2NrZWQobWdyLT5tc3RfcHJpbWFyeSwgbXN0Yik7Cj4g KwlpZiAobWdyLT5tc3RfcHJpbWFyeSkgewo+ICsJCXJtc3RiID0gZHJtX2RwX21zdF90b3BvbG9n eV9nZXRfbXN0Yl92YWxpZGF0ZWRfbG9ja2VkKAo+ICsJCSAgICBtZ3ItPm1zdF9wcmltYXJ5LCBt c3RiKTsKPiArCj4gKwkJaWYgKHJtc3RiICYmICFkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3Ri KHJtc3RiKSkKPiArCQkJcm1zdGIgPSBOVUxMOwo+ICsJfQo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3It PmxvY2spOwo+ICAJcmV0dXJuIHJtc3RiOwo+ICB9Cj4gIAo+IC1zdGF0aWMgc3RydWN0IGRybV9k cF9tc3RfcG9ydCAqZHJtX2RwX21zdF9nZXRfcG9ydF9yZWZfbG9ja2VkKHN0cnVjdCBkcm1fZHBf bXN0X2JyYW5jaCAqbXN0Yiwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqdG9fZmluZCkKPiArc3Rh dGljIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKgo+ICtkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9w b3J0X3ZhbGlkYXRlZF9sb2NrZWQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLAo+ICsJ CQkJCSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnRvX2ZpbmQpCj4gIHsKPiAgCXN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsICptcG9ydDsKPiAgCj4gIAlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHBvcnQsICZtc3RiLT5wb3J0cywgbmV4dCkgewo+IC0JCWlmIChwb3J0ID09IHRvX2ZpbmQp IHsKPiAtCQkJa3JlZl9nZXQoJnBvcnQtPmtyZWYpOwo+ICsJCWlmIChwb3J0ID09IHRvX2ZpbmQp Cj4gIAkJCXJldHVybiBwb3J0Owo+IC0JCX0KPiArCj4gIAkJaWYgKHBvcnQtPm1zdGIpIHsKPiAt CQkJbXBvcnQgPSBkcm1fZHBfbXN0X2dldF9wb3J0X3JlZl9sb2NrZWQocG9ydC0+bXN0YiwgdG9f ZmluZCk7Cj4gKwkJCW1wb3J0ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0 ZWRfbG9ja2VkKAo+ICsJCQkgICAgcG9ydC0+bXN0YiwgdG9fZmluZCk7Cj4gIAkJCWlmIChtcG9y dCkKPiAgCQkJCXJldHVybiBtcG9ydDsKPiAgCQl9Cj4gQEAgLTEwMjEsMTIgKzEyNDEsMjAgQEAg c3RhdGljIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKmRybV9kcF9tc3RfZ2V0X3BvcnRfcmVmX2xv Y2tlZChzdHJ1Y3QgZHJtX2RwX21zdF8KPiAgCXJldHVybiBOVUxMOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYo c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQpCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICoKPiArZHJtX2RwX21z dF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf bWdyICptZ3IsCj4gKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCkKPiAg ewo+ICAJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcnBvcnQgPSBOVUxMOwo+ICsKPiAgCW11dGV4 X2xvY2soJm1nci0+bG9jayk7Cj4gLQlpZiAobWdyLT5tc3RfcHJpbWFyeSkKPiAtCQlycG9ydCA9 IGRybV9kcF9tc3RfZ2V0X3BvcnRfcmVmX2xvY2tlZChtZ3ItPm1zdF9wcmltYXJ5LCBwb3J0KTsK PiArCWlmIChtZ3ItPm1zdF9wcmltYXJ5KSB7Cj4gKwkJcnBvcnQgPSBkcm1fZHBfbXN0X3RvcG9s b2d5X2dldF9wb3J0X3ZhbGlkYXRlZF9sb2NrZWQoCj4gKwkJICAgIG1nci0+bXN0X3ByaW1hcnks IHBvcnQpOwo+ICsKPiArCQlpZiAocnBvcnQgJiYgIWRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3Bv cnQocnBvcnQpKQo+ICsJCQlycG9ydCA9IE5VTEw7Cj4gKwl9Cj4gIAltdXRleF91bmxvY2soJm1n ci0+bG9jayk7Cj4gIAlyZXR1cm4gcnBvcnQ7Cj4gIH0KPiBAQCAtMTAzNCwxMSArMTI2MiwxMiBA QCBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9y dF9yZWYoc3RydWN0IGRybV9kcF9tc3RfdAo+ICBzdGF0aWMgc3RydWN0IGRybV9kcF9tc3RfcG9y dCAqZHJtX2RwX2dldF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwgdTggcG9y dF9udW0pCj4gIHsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7Cj4gKwlpbnQgcmV0 Owo+ICAKPiAgCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJm1zdGItPnBvcnRzLCBuZXh0KSB7 Cj4gIAkJaWYgKHBvcnQtPnBvcnRfbnVtID09IHBvcnRfbnVtKSB7Cj4gLQkJCWtyZWZfZ2V0KCZw b3J0LT5rcmVmKTsKPiAtCQkJcmV0dXJuIHBvcnQ7Cj4gKwkJCXJldCA9IGRybV9kcF9tc3RfdG9w b2xvZ3lfZ2V0X3BvcnQocG9ydCk7Cj4gKwkJCXJldHVybiByZXQgPyBwb3J0IDogTlVMTDsKPiAg CQl9Cj4gIAl9Cj4gIAo+IEBAIC0xMDg3LDYgKzEzMTYsMTEgQEAgc3RhdGljIGJvb2wgZHJtX2Rw X3BvcnRfc2V0dXBfcGR0KHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpCj4gIAkJaWYgKHBv cnQtPm1zdGIpIHsKPiAgCQkJcG9ydC0+bXN0Yi0+bWdyID0gcG9ydC0+bWdyOwo+ICAJCQlwb3J0 LT5tc3RiLT5wb3J0X3BhcmVudCA9IHBvcnQ7Cj4gKwkJCS8qCj4gKwkJCSAqIE1ha2Ugc3VyZSB0 aGlzIHBvcnQncyBtZW1vcnkgYWxsb2NhdGlvbiBzdGF5cwo+ICsJCQkgKiBhcm91bmQgdW50aWwg aXQncyBjaGlsZCBNU1RCIHJlbGVhc2VzIGl0Cj4gKwkJCSAqLwo+ICsJCQlkcm1fZHBfbXN0X2dl dF9wb3J0X21hbGxvYyhwb3J0KTsKPiAgCj4gIAkJCXNlbmRfbGluayA9IHRydWU7Cj4gIAkJfQo+ IEBAIC0xMTQ3LDE3ICsxMzgxLDI2IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9hZGRfcG9ydChzdHJ1 Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsCj4gIAlib29sIGNyZWF0ZWQgPSBmYWxzZTsKPiAg CWludCBvbGRfcGR0ID0gMDsKPiAgCWludCBvbGRfZGRwcyA9IDA7Cj4gKwo+ICAJcG9ydCA9IGRy bV9kcF9nZXRfcG9ydChtc3RiLCBwb3J0X21zZy0+cG9ydF9udW1iZXIpOwo+ICAJaWYgKCFwb3J0 KSB7Cj4gIAkJcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKCpwb3J0KSwgR0ZQX0tFUk5FTCk7Cj4gIAkJ aWYgKCFwb3J0KQo+ICAJCQlyZXR1cm47Cj4gLQkJa3JlZl9pbml0KCZwb3J0LT5rcmVmKTsKPiAr CQlrcmVmX2luaXQoJnBvcnQtPnRvcG9sb2d5X2tyZWYpOwo+ICsJCWtyZWZfaW5pdCgmcG9ydC0+ bWFsbG9jX2tyZWYpOwo+ICAJCXBvcnQtPnBhcmVudCA9IG1zdGI7Cj4gIAkJcG9ydC0+cG9ydF9u dW0gPSBwb3J0X21zZy0+cG9ydF9udW1iZXI7Cj4gIAkJcG9ydC0+bWdyID0gbXN0Yi0+bWdyOwo+ ICAJCXBvcnQtPmF1eC5uYW1lID0gIkRQTVNUIjsKPiAgCQlwb3J0LT5hdXguZGV2ID0gZGV2LT5k ZXY7Cj4gKwo+ICsJCS8qCj4gKwkJICogTWFrZSBzdXJlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBm b3Igb3VyIHBhcmVudCBicmFuY2ggc3RheXMKPiArCQkgKiBhcm91bmQgdW50aWwgb3VyIG93biBt ZW1vcnkgYWxsb2NhdGlvbiBpcyByZWxlYXNlZAo+ICsJCSAqLwo+ICsJCWRybV9kcF9tc3RfZ2V0 X21zdGJfbWFsbG9jKG1zdGIpOwo+ICsKPiAgCQljcmVhdGVkID0gdHJ1ZTsKPiAgCX0gZWxzZSB7 Cj4gIAkJb2xkX3BkdCA9IHBvcnQtPnBkdDsKPiBAQCAtMTE3Nyw3ICsxNDIwLDcgQEAgc3RhdGlj IHZvaWQgZHJtX2RwX2FkZF9wb3J0KHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwKPiAg CSAgIGZvciB0aGlzIGxpc3QgKi8KPiAgCWlmIChjcmVhdGVkKSB7Cj4gIAkJbXV0ZXhfbG9jaygm bXN0Yi0+bWdyLT5sb2NrKTsKPiAtCQlrcmVmX2dldCgmcG9ydC0+a3JlZik7Cj4gKwkJZHJtX2Rw X21zdF90b3BvbG9neV9yZWZfcG9ydChwb3J0KTsKPiAgCQlsaXN0X2FkZCgmcG9ydC0+bmV4dCwg Jm1zdGItPnBvcnRzKTsKPiAgCQltdXRleF91bmxvY2soJm1zdGItPm1nci0+bG9jayk7Cj4gIAl9 Cj4gQEAgLTEyMDIsMTcgKzE0NDUsMjEgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2FkZF9wb3J0KHN0 cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwKPiAgCWlmIChjcmVhdGVkICYmICFwb3J0LT5p bnB1dCkgewo+ICAJCWNoYXIgcHJvcHBhdGhbMjU1XTsKPiAgCj4gLQkJYnVpbGRfbXN0X3Byb3Bf cGF0aChtc3RiLCBwb3J0LT5wb3J0X251bSwgcHJvcHBhdGgsIHNpemVvZihwcm9wcGF0aCkpOwo+ IC0JCXBvcnQtPmNvbm5lY3RvciA9ICgqbXN0Yi0+bWdyLT5jYnMtPmFkZF9jb25uZWN0b3IpKG1z dGItPm1nciwgcG9ydCwgcHJvcHBhdGgpOwo+ICsJCWJ1aWxkX21zdF9wcm9wX3BhdGgobXN0Yiwg cG9ydC0+cG9ydF9udW0sIHByb3BwYXRoLAo+ICsJCQkJICAgIHNpemVvZihwcm9wcGF0aCkpOwo+ ICsJCXBvcnQtPmNvbm5lY3RvciA9ICgqbXN0Yi0+bWdyLT5jYnMtPmFkZF9jb25uZWN0b3IpKG1z dGItPm1nciwKPiArCQkJCQkJCQkgICBwb3J0LAo+ICsJCQkJCQkJCSAgIHByb3BwYXRoKTsKPiAg CQlpZiAoIXBvcnQtPmNvbm5lY3Rvcikgewo+ICAJCQkvKiByZW1vdmUgaXQgZnJvbSB0aGUgcG9y dCBsaXN0ICovCj4gIAkJCW11dGV4X2xvY2soJm1zdGItPm1nci0+bG9jayk7Cj4gIAkJCWxpc3Rf ZGVsKCZwb3J0LT5uZXh0KTsKPiAgCQkJbXV0ZXhfdW5sb2NrKCZtc3RiLT5tZ3ItPmxvY2spOwo+ ICAJCQkvKiBkcm9wIHBvcnQgbGlzdCByZWZlcmVuY2UgKi8KPiAtCQkJZHJtX2RwX3B1dF9wb3J0 KHBvcnQpOwo+ICsJCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQpOwo+ICAJCQln b3RvIG91dDsKPiAgCQl9Cj4gKwo+ICAJCWlmICgocG9ydC0+cGR0ID09IERQX1BFRVJfREVWSUNF X0RQX0xFR0FDWV9DT05WIHx8Cj4gIAkJICAgICBwb3J0LT5wZHQgPT0gRFBfUEVFUl9ERVZJQ0Vf U1NUX1NJTkspICYmCj4gIAkJICAgIHBvcnQtPnBvcnRfbnVtID49IERQX01TVF9MT0dJQ0FMX1BP UlRfMCkgewo+IEBAIC0xMjI0LDcgKzE0NzEsNyBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfYWRkX3Bv cnQoc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLAo+ICAKPiAgb3V0Ogo+ICAJLyogcHV0 IHJlZmVyZW5jZSB0byB0aGlzIHBvcnQgKi8KPiAtCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiAr CWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2 b2lkIGRybV9kcF91cGRhdGVfcG9ydChzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsCj4g QEAgLTEyNTksNyArMTUwNiw3IEBAIHN0YXRpYyB2b2lkIGRybV9kcF91cGRhdGVfcG9ydChzdHJ1 Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGIsCj4gIAkJCWRvd29yayA9IHRydWU7Cj4gIAl9Cj4g IAo+IC0JZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRf cG9ydChwb3J0KTsKPiAgCWlmIChkb3dvcmspCj4gIAkJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193 cSwgJm1zdGItPm1nci0+d29yayk7Cj4gIAo+IEBAIC0xMjcwLDcgKzE1MTcsNyBAQCBzdGF0aWMg c3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICpkcm1fZHBfZ2V0X21zdF9icmFuY2hfZGV2aWNlKHN0 cnVjdCBkcm1fZHBfbXN0Xwo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGI7 Cj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0Owo+IC0JaW50IGk7Cj4gKwlpbnQgaSwg cmV0Owo+ICAJLyogZmluZCB0aGUgcG9ydCBieSBpdGVyYXRpbmcgZG93biAqLwo+ICAKPiAgCW11 dGV4X2xvY2soJm1nci0+bG9jayk7Cj4gQEAgLTEyOTUsNyArMTU0Miw5IEBAIHN0YXRpYyBzdHJ1 Y3QgZHJtX2RwX21zdF9icmFuY2ggKmRybV9kcF9nZXRfbXN0X2JyYW5jaF9kZXZpY2Uoc3RydWN0 IGRybV9kcF9tc3RfCj4gIAkJCX0KPiAgCQl9Cj4gIAl9Cj4gLQlrcmVmX2dldCgmbXN0Yi0+a3Jl Zik7Cj4gKwlyZXQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9tc3RiKG1zdGIpOwo+ICsJaWYg KCFyZXQpCj4gKwkJbXN0YiA9IE5VTEw7Cj4gIG91dDoKPiAgCW11dGV4X3VubG9jaygmbWdyLT5s b2NrKTsKPiAgCXJldHVybiBtc3RiOwo+IEBAIC0xMzI1LDE5ICsxNTc0LDIyIEBAIHN0YXRpYyBz dHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKmdldF9tc3RfYnJhbmNoX2RldmljZV9ieV9ndWlkX2hl bHBlcigKPiAgCXJldHVybiBOVUxMOwo+ICB9Cj4gIAo+IC1zdGF0aWMgc3RydWN0IGRybV9kcF9t c3RfYnJhbmNoICpkcm1fZHBfZ2V0X21zdF9icmFuY2hfZGV2aWNlX2J5X2d1aWQoCj4gLQlzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiAtCXVpbnQ4X3QgKmd1aWQpCj4gK3N0 YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKgo+ICtkcm1fZHBfZ2V0X21zdF9icmFuY2hf ZGV2aWNlX2J5X2d1aWQoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gKwkJ CQkgICAgIHVpbnQ4X3QgKmd1aWQpCj4gIHsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAq bXN0YjsKPiArCWludCByZXQ7Cj4gIAo+ICAJLyogZmluZCB0aGUgcG9ydCBieSBpdGVyYXRpbmcg ZG93biAqLwo+ICAJbXV0ZXhfbG9jaygmbWdyLT5sb2NrKTsKPiAgCj4gIAltc3RiID0gZ2V0X21z dF9icmFuY2hfZGV2aWNlX2J5X2d1aWRfaGVscGVyKG1nci0+bXN0X3ByaW1hcnksIGd1aWQpOwo+ IC0KPiAtCWlmIChtc3RiKQo+IC0JCWtyZWZfZ2V0KCZtc3RiLT5rcmVmKTsKPiArCWlmIChtc3Ri KSB7Cj4gKwkJcmV0ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yihtc3RiKTsKPiArCQlp ZiAoIXJldCkKPiArCQkJbXN0YiA9IE5VTEw7Cj4gKwl9Cj4gIAo+ICAJbXV0ZXhfdW5sb2NrKCZt Z3ItPmxvY2spOwo+ICAJcmV0dXJuIG1zdGI7Cj4gQEAgLTEzNjIsMTAgKzE2MTQsMTAgQEAgc3Rh dGljIHZvaWQgZHJtX2RwX2NoZWNrX2FuZF9zZW5kX2xpbmtfYWRkcmVzcyhzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm0KPiAgCQkJZHJtX2RwX3NlbmRfZW51bV9wYXRoX3Jlc291cmNl cyhtZ3IsIG1zdGIsIHBvcnQpOwo+ICAKPiAgCQlpZiAocG9ydC0+bXN0Yikgewo+IC0JCQltc3Ri X2NoaWxkID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfbXN0Yl9yZWYobWdyLCBwb3J0LT5tc3RiKTsK PiArCQkJbXN0Yl9jaGlsZCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGJfdmFsaWRhdGVk KG1nciwgcG9ydC0+bXN0Yik7Cj4gIAkJCWlmIChtc3RiX2NoaWxkKSB7Cj4gIAkJCQlkcm1fZHBf Y2hlY2tfYW5kX3NlbmRfbGlua19hZGRyZXNzKG1nciwgbXN0Yl9jaGlsZCk7Cj4gLQkJCQlkcm1f ZHBfcHV0X21zdF9icmFuY2hfZGV2aWNlKG1zdGJfY2hpbGQpOwo+ICsJCQkJZHJtX2RwX21zdF90 b3BvbG9neV9wdXRfbXN0Yihtc3RiX2NoaWxkKTsKPiAgCQkJfQo+ICAJCX0KPiAgCX0KPiBAQCAt MTM3NSwxNiArMTYyNywxOSBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0X2xpbmtfcHJvYmVfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciwgd29yayk7Cj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2ggKm1zdGI7Cj4g KwlpbnQgcmV0Owo+ICAKPiAgCW11dGV4X2xvY2soJm1nci0+bG9jayk7Cj4gIAltc3RiID0gbWdy LT5tc3RfcHJpbWFyeTsKPiAgCWlmIChtc3RiKSB7Cj4gLQkJa3JlZl9nZXQoJm1zdGItPmtyZWYp Owo+ICsJCXJldCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X21zdGIobXN0Yik7Cj4gKwkJaWYg KCFyZXQpCj4gKwkJCW1zdGIgPSBOVUxMOwo+ICAJfQo+ICAJbXV0ZXhfdW5sb2NrKCZtZ3ItPmxv Y2spOwo+ICAJaWYgKG1zdGIpIHsKPiAgCQlkcm1fZHBfY2hlY2tfYW5kX3NlbmRfbGlua19hZGRy ZXNzKG1nciwgbXN0Yik7Cj4gLQkJZHJtX2RwX3B1dF9tc3RfYnJhbmNoX2RldmljZShtc3RiKTsK PiArCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKG1zdGIpOwo+ICAJfQo+ICB9Cj4gIAo+ IEBAIC0xNjk1LDIyICsxOTUwLDMyIEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpk cm1fZHBfZ2V0X2xhc3RfY29ubmVjdGVkX3BvcnRfdG9fbXN0YihzdHJ1Y3QgZHJtCj4gIAlyZXR1 cm4gZHJtX2RwX2dldF9sYXN0X2Nvbm5lY3RlZF9wb3J0X3RvX21zdGIobXN0Yi0+cG9ydF9wYXJl bnQtPnBhcmVudCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgZHJtX2RwX21zdF9icmFuY2gg KmRybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRfcG9ydF9hbmRfbXN0YihzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwKPiAtCQkJCQkJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5j aCAqbXN0YiwKPiAtCQkJCQkJCQkJIGludCAqcG9ydF9udW0pCj4gK3N0YXRpYyBzdHJ1Y3QgZHJt X2RwX21zdF9icmFuY2ggKgo+ICtkcm1fZHBfZ2V0X2xhc3RfY29ubmVjdGVkX3BvcnRfYW5kX21z dGIoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gKwkJCQkJc3RydWN0IGRy bV9kcF9tc3RfYnJhbmNoICptc3RiLAo+ICsJCQkJCWludCAqcG9ydF9udW0pCj4gIHsKPiAgCXN0 cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqcm1zdGIgPSBOVUxMOwo+ICAJc3RydWN0IGRybV9kcF9t c3RfcG9ydCAqZm91bmRfcG9ydDsKPiArCj4gIAltdXRleF9sb2NrKCZtZ3ItPmxvY2spOwo+IC0J aWYgKG1nci0+bXN0X3ByaW1hcnkpIHsKPiArCWlmICghbWdyLT5tc3RfcHJpbWFyeSkKPiArCQln b3RvIG91dDsKPiArCj4gKwlkbyB7Cj4gIAkJZm91bmRfcG9ydCA9IGRybV9kcF9nZXRfbGFzdF9j b25uZWN0ZWRfcG9ydF90b19tc3RiKG1zdGIpOwo+ICsJCWlmICghZm91bmRfcG9ydCkKPiArCQkJ YnJlYWs7Cj4gIAo+IC0JCWlmIChmb3VuZF9wb3J0KSB7Cj4gKwkJaWYgKGRybV9kcF9tc3RfdG9w b2xvZ3lfZ2V0X21zdGIoZm91bmRfcG9ydC0+cGFyZW50KSkgewo+ICAJCQlybXN0YiA9IGZvdW5k X3BvcnQtPnBhcmVudDsKPiAtCQkJa3JlZl9nZXQoJnJtc3RiLT5rcmVmKTsKPiAgCQkJKnBvcnRf bnVtID0gZm91bmRfcG9ydC0+cG9ydF9udW07Cj4gKwkJfSBlbHNlIHsKPiArCQkJLyogU2VhcmNo IGFnYWluLCBzdGFydGluZyBmcm9tIHRoaXMgcGFyZW50ICovCj4gKwkJCW1zdGIgPSBmb3VuZF9w b3J0LT5wYXJlbnQ7Cj4gIAkJfQo+IC0JfQo+ICsJfSB3aGlsZSAoIXJtc3RiKTsKCkhtLCBpcyB0 aGlzIGEgYnVnZml4IG9mIHZhbGlkYXRpbmcgdGhlIGVudGlyZSBjaGFpbj8gQWZhaXVpIHRoZSBu ZXcKdG9wb2xvZ3lfZ2V0IHN0aWxsIHZhbGlkYXRlcyB0aGUgZW50aXJlIGNoYWluLCBzbyBJJ20g YSBiaXQgY29uZnVzZWQgd2hhdAp0aGlzIGRvZXMgaGVyZS4KCj4gK291dDoKPiAgCW11dGV4X3Vu bG9jaygmbWdyLT5sb2NrKTsKPiAgCXJldHVybiBybXN0YjsKPiAgfQo+IEBAIC0xNzI2LDE3ICsx OTkxLDE5IEBAIHN0YXRpYyBpbnQgZHJtX2RwX3BheWxvYWRfc2VuZF9tc2coc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gIAl1OCBzaW5rc1tEUk1fRFBfTUFYX1NEUF9TVFJF QU1TXTsKPiAgCWludCBpOwo+ICAKPiAtCXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0 X3JlZihtZ3IsIHBvcnQpOwo+ICsJcG9ydCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRf dmFsaWRhdGVkKG1nciwgcG9ydCk7Cj4gIAlpZiAoIXBvcnQpCj4gIAkJcmV0dXJuIC1FSU5WQUw7 Cj4gIAo+ICAJcG9ydF9udW0gPSBwb3J0LT5wb3J0X251bTsKPiAtCW1zdGIgPSBkcm1fZHBfZ2V0 X3ZhbGlkYXRlZF9tc3RiX3JlZihtZ3IsIHBvcnQtPnBhcmVudCk7Cj4gKwltc3RiID0gZHJtX2Rw X21zdF90b3BvbG9neV9nZXRfbXN0Yl92YWxpZGF0ZWQobWdyLCBwb3J0LT5wYXJlbnQpOwo+ICAJ aWYgKCFtc3RiKSB7Cj4gLQkJbXN0YiA9IGRybV9kcF9nZXRfbGFzdF9jb25uZWN0ZWRfcG9ydF9h bmRfbXN0YihtZ3IsIHBvcnQtPnBhcmVudCwgJnBvcnRfbnVtKTsKPiArCQltc3RiID0gZHJtX2Rw X2dldF9sYXN0X2Nvbm5lY3RlZF9wb3J0X2FuZF9tc3RiKG1nciwKPiArCQkJCQkJCSAgICAgICBw b3J0LT5wYXJlbnQsCj4gKwkJCQkJCQkgICAgICAgJnBvcnRfbnVtKTsKPiAgCj4gIAkJaWYgKCFt c3RiKSB7Cj4gLQkJCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiArCQkJZHJtX2RwX21zdF90b3Bv bG9neV9wdXRfcG9ydChwb3J0KTsKPiAgCQkJcmV0dXJuIC1FSU5WQUw7Cj4gIAkJfQo+ICAJfQo+ IEBAIC0xNzY2LDggKzIwMzMsOCBAQCBzdGF0aWMgaW50IGRybV9kcF9wYXlsb2FkX3NlbmRfbXNn KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJfQo+ICAJa2ZyZWUodHht c2cpOwo+ICBmYWlsX3B1dDoKPiAtCWRybV9kcF9wdXRfbXN0X2JyYW5jaF9kZXZpY2UobXN0Yik7 Cj4gLQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9t c3RiKG1zdGIpOwo+ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsKPiAgCXJl dHVybiByZXQ7Cj4gIH0KPiAgCj4gQEAgLTE3NzcsMTMgKzIwNDQsMTMgQEAgaW50IGRybV9kcF9z ZW5kX3Bvd2VyX3VwZG93bl9waHkoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3Is Cj4gIAlzdHJ1Y3QgZHJtX2RwX3NpZGViYW5kX21zZ190eCAqdHhtc2c7Cj4gIAlpbnQgbGVuLCBy ZXQ7Cj4gIAo+IC0JcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3BvcnRfcmVmKG1nciwgcG9y dCk7Cj4gKwlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQobWdy LCBwb3J0KTsKPiAgCWlmICghcG9ydCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gIAl0eG1z ZyA9IGt6YWxsb2Moc2l6ZW9mKCp0eG1zZyksIEdGUF9LRVJORUwpOwo+ICAJaWYgKCF0eG1zZykg ewo+IC0JCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiArCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1 dF9wb3J0KHBvcnQpOwo+ICAJCXJldHVybiAtRU5PTUVNOwo+ICAJfQo+ICAKPiBAQCAtMTc5OSw3 ICsyMDY2LDcgQEAgaW50IGRybV9kcF9zZW5kX3Bvd2VyX3VwZG93bl9waHkoc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gIAkJCXJldCA9IDA7Cj4gIAl9Cj4gIAlrZnJlZSh0 eG1zZyk7Cj4gLQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5 X3B1dF9wb3J0KHBvcnQpOwo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiBAQCAtMTg4OCw3ICsy MTU1LDggQEAgaW50IGRybV9kcF91cGRhdGVfcGF5bG9hZF9wYXJ0MShzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1ncikKPiAgCQlpZiAodmNwaSkgewo+ICAJCQlwb3J0ID0gY29udGFp bmVyX29mKHZjcGksIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQsCj4gIAkJCQkJICAgIHZjcGkpOwo+ IC0JCQlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiAr CQkJcG9ydCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKG1nciwKPiAr CQkJCQkJCQkgICAgICBwb3J0KTsKPiAgCQkJaWYgKCFwb3J0KSB7Cj4gIAkJCQltdXRleF91bmxv Y2soJm1nci0+cGF5bG9hZF9sb2NrKTsKPiAgCQkJCXJldHVybiAtRUlOVkFMOwo+IEBAIC0xOTI1 LDcgKzIxOTMsNyBAQCBpbnQgZHJtX2RwX3VwZGF0ZV9wYXlsb2FkX3BhcnQxKHN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKQo+ICAJCWN1cl9zbG90cyArPSByZXFfcGF5bG9hZC5u dW1fc2xvdHM7Cj4gIAo+ICAJCWlmIChwb3J0KQo+IC0JCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7 Cj4gKwkJCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gIAl9Cj4gIAo+ICAJ Zm9yIChpID0gMDsgaSA8IG1nci0+bWF4X3BheWxvYWRzOyBpKyspIHsKPiBAQCAtMjAyNCw3ICsy MjkyLDcgQEAgc3RhdGljIGludCBkcm1fZHBfc2VuZF9kcGNkX3dyaXRlKHN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJc3RydWN0IGRybV9kcF9zaWRlYmFuZF9tc2dfdHgg KnR4bXNnOwo+ICAJc3RydWN0IGRybV9kcF9tc3RfYnJhbmNoICptc3RiOwo+ICAKPiAtCW1zdGIg PSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9tc3RiX3JlZihtZ3IsIHBvcnQtPnBhcmVudCk7Cj4gKwlt c3RiID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yl92YWxpZGF0ZWQobWdyLCBwb3J0LT5w YXJlbnQpOwo+ICAJaWYgKCFtc3RiKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiBAQCAtMjA0 OCw3ICsyMzE2LDcgQEAgc3RhdGljIGludCBkcm1fZHBfc2VuZF9kcGNkX3dyaXRlKHN0cnVjdCBk cm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJfQo+ICAJa2ZyZWUodHhtc2cpOwo+ICBm YWlsX3B1dDoKPiAtCWRybV9kcF9wdXRfbXN0X2JyYW5jaF9kZXZpY2UobXN0Yik7Cj4gKwlkcm1f ZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKG1zdGIpOwo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAK PiBAQCAtMjE1OCw3ICsyNDI2LDcgQEAgaW50IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9t c3Qoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsIGJvb2wgbXMKPiAgCj4gIAkJ LyogZ2l2ZSB0aGlzIHRoZSBtYWluIHJlZmVyZW5jZSAqLwo+ICAJCW1nci0+bXN0X3ByaW1hcnkg PSBtc3RiOwo+IC0JCWtyZWZfZ2V0KCZtZ3ItPm1zdF9wcmltYXJ5LT5rcmVmKTsKPiArCQlkcm1f ZHBfbXN0X3RvcG9sb2d5X3JlZl9tc3RiKG1nci0+bXN0X3ByaW1hcnkpOwo+ICAKPiAgCQlyZXQg PSBkcm1fZHBfZHBjZF93cml0ZWIobWdyLT5hdXgsIERQX01TVE1fQ1RSTCwKPiAgCQkJCQkJCSBE UF9NU1RfRU4gfCBEUF9VUF9SRVFfRU4gfCBEUF9VUFNUUkVBTV9JU19TUkMpOwo+IEBAIC0yMTky LDcgKzI0NjAsNyBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jfc2V0X21zdChzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgYm9vbCBtcwo+ICBvdXRfdW5sb2NrOgo+ICAJ bXV0ZXhfdW5sb2NrKCZtZ3ItPmxvY2spOwo+ICAJaWYgKG1zdGIpCj4gLQkJZHJtX2RwX3B1dF9t c3RfYnJhbmNoX2RldmljZShtc3RiKTsKPiArCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3Ri KG1zdGIpOwo+ICAJcmV0dXJuIHJldDsKPiAgCj4gIH0KPiBAQCAtMjM1Nyw3ICsyNjI1LDcgQEAg c3RhdGljIGludCBkcm1fZHBfbXN0X2hhbmRsZV9kb3duX3JlcChzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IgKm1ncikKPiAgCQkJICAgICAgIG1nci0+ZG93bl9yZXBfcmVjdi5pbml0aWFs X2hkci5sY3QsCj4gIAkJCQkgICAgICBtZ3ItPmRvd25fcmVwX3JlY3YuaW5pdGlhbF9oZHIucmFk WzBdLAo+ICAJCQkJICAgICAgbWdyLT5kb3duX3JlcF9yZWN2Lm1zZ1swXSk7Cj4gLQkJCWRybV9k cF9wdXRfbXN0X2JyYW5jaF9kZXZpY2UobXN0Yik7Cj4gKwkJCWRybV9kcF9tc3RfdG9wb2xvZ3lf cHV0X21zdGIobXN0Yik7Cj4gIAkJCW1lbXNldCgmbWdyLT5kb3duX3JlcF9yZWN2LCAwLCBzaXpl b2Yoc3RydWN0IGRybV9kcF9zaWRlYmFuZF9tc2dfcngpKTsKPiAgCQkJcmV0dXJuIDA7Cj4gIAkJ fQo+IEBAIC0yMzY4LDcgKzI2MzYsNyBAQCBzdGF0aWMgaW50IGRybV9kcF9tc3RfaGFuZGxlX2Rv d25fcmVwKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKQo+ICAJCX0KPiAgCj4g IAkJbWVtc2V0KCZtZ3ItPmRvd25fcmVwX3JlY3YsIDAsIHNpemVvZihzdHJ1Y3QgZHJtX2RwX3Np ZGViYW5kX21zZ19yeCkpOwo+IC0JCWRybV9kcF9wdXRfbXN0X2JyYW5jaF9kZXZpY2UobXN0Yik7 Cj4gKwkJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfbXN0Yihtc3RiKTsKPiAgCj4gIAkJbXV0ZXhf bG9jaygmbWdyLT5xbG9jayk7Cj4gIAkJdHhtc2ctPnN0YXRlID0gRFJNX0RQX1NJREVCQU5EX1RY X1JYOwo+IEBAIC0yNDQxLDcgKzI3MDksNyBAQCBzdGF0aWMgaW50IGRybV9kcF9tc3RfaGFuZGxl X3VwX3JlcShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncikKPiAgCQl9Cj4gIAo+ ICAJCWlmIChtc3RiKQo+IC0JCQlkcm1fZHBfcHV0X21zdF9icmFuY2hfZGV2aWNlKG1zdGIpOwo+ ICsJCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9tc3RiKG1zdGIpOwo+ICAKPiAgCQltZW1zZXQo Jm1nci0+dXBfcmVxX3JlY3YsIDAsIHNpemVvZihzdHJ1Y3QgZHJtX2RwX3NpZGViYW5kX21zZ19y eCkpOwo+ICAJfQo+IEBAIC0yNTAxLDcgKzI3NjksNyBAQCBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzIGRybV9kcF9tc3RfZGV0ZWN0X3BvcnQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cgo+ICAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMgPSBjb25uZWN0b3Jfc3RhdHVz X2Rpc2Nvbm5lY3RlZDsKPiAgCj4gIAkvKiB3ZSBuZWVkIHRvIHNlYXJjaCBmb3IgdGhlIHBvcnQg aW4gdGhlIG1nciBpbiBjYXNlIGl0cyBnb25lICovCj4gLQlwb3J0ID0gZHJtX2RwX2dldF92YWxp ZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiArCXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5 X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3IsIHBvcnQpOwo+ICAJaWYgKCFwb3J0KQo+ICAJCXJldHVy biBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiAgCj4gQEAgLTI1MjYsNyArMjc5NCw3 IEBAIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgZHJtX2RwX21zdF9kZXRlY3RfcG9ydChzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yCj4gIAkJYnJlYWs7Cj4gIAl9Cj4gIG91dDoKPiAt CWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiArCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQo cG9ydCk7Cj4gIAlyZXR1cm4gc3RhdHVzOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21z dF9kZXRlY3RfcG9ydCk7Cj4gQEAgLTI1NDMsMTEgKzI4MTEsMTEgQEAgYm9vbCBkcm1fZHBfbXN0 X3BvcnRfaGFzX2F1ZGlvKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICB7 Cj4gIAlib29sIHJldCA9IGZhbHNlOwo+ICAKPiAtCXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRl ZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ICsJcG9ydCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0 X3BvcnRfdmFsaWRhdGVkKG1nciwgcG9ydCk7Cj4gIAlpZiAoIXBvcnQpCj4gIAkJcmV0dXJuIHJl dDsKPiAgCXJldCA9IHBvcnQtPmhhc19hdWRpbzsKPiAtCWRybV9kcF9wdXRfcG9ydChwb3J0KTsK PiArCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gIAlyZXR1cm4gcmV0Owo+ ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9wb3J0X2hhc19hdWRpbyk7Cj4gQEAgLTI1 NjcsNyArMjgzNSw3IEBAIHN0cnVjdCBlZGlkICpkcm1fZHBfbXN0X2dldF9lZGlkKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fZHBfCj4gIAlzdHJ1Y3QgZWRpZCAq ZWRpZCA9IE5VTEw7Cj4gIAo+ICAJLyogd2UgbmVlZCB0byBzZWFyY2ggZm9yIHRoZSBwb3J0IGlu IHRoZSBtZ3IgaW4gY2FzZSBpdHMgZ29uZSAqLwo+IC0JcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRh dGVkX3BvcnRfcmVmKG1nciwgcG9ydCk7Cj4gKwlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9neV9n ZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0KTsKPiAgCWlmICghcG9ydCkKPiAgCQlyZXR1cm4g TlVMTDsKPiAgCj4gQEAgLTI1NzgsNyArMjg0Niw3IEBAIHN0cnVjdCBlZGlkICpkcm1fZHBfbXN0 X2dldF9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fZHBf Cj4gIAkJZHJtX2Nvbm5lY3Rvcl9zZXRfdGlsZV9wcm9wZXJ0eShjb25uZWN0b3IpOwo+ICAJfQo+ ICAJcG9ydC0+aGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOwo+IC0J ZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ICsJZHJtX2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChw b3J0KTsKPiAgCXJldHVybiBlZGlkOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9n ZXRfZWRpZCk7Cj4gQEAgLTI2NDksNyArMjkxNyw3IEBAIGludCBkcm1fZHBfYXRvbWljX2ZpbmRf dmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIAlpZiAoSVNfRVJS KHRvcG9sb2d5X3N0YXRlKSkKPiAgCQlyZXR1cm4gUFRSX0VSUih0b3BvbG9neV9zdGF0ZSk7Cj4g IAo+IC0JcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3BvcnRfcmVmKG1nciwgcG9ydCk7Cj4g Kwlwb3J0ID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfcG9ydF92YWxpZGF0ZWQobWdyLCBwb3J0 KTsKPiAgCWlmIChwb3J0ID09IE5VTEwpCj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gIAlyZXFfc2xv dHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+IEBAIC0yNjU3LDE0ICsyOTI1 LDE0IEBAIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCj4gIAkJCXJlcV9zbG90cywgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Ns b3RzKTsKPiAgCj4gIAlpZiAocmVxX3Nsb3RzID4gdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3Rz KSB7Cj4gLQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ICsJCWRybV9kcF9tc3RfdG9wb2xvZ3lf cHV0X3BvcnQocG9ydCk7Cj4gIAkJcmV0dXJuIC1FTk9TUEM7Cj4gIAl9Cj4gIAo+ICAJdG9wb2xv Z3lfc3RhdGUtPmF2YWlsX3Nsb3RzIC09IHJlcV9zbG90czsKPiAgCURSTV9ERUJVR19LTVMoInZj cGkgc2xvdHMgYXZhaWw9JWQiLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ICAKPiAt CWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiArCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQo cG9ydCk7Cj4gIAlyZXR1cm4gcmVxX3Nsb3RzOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2Rw X2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+IEBAIC0yNzE1LDcgKzI5ODMsNyBAQCBib29sIGRy bV9kcF9tc3RfYWxsb2NhdGVfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n ciwKPiAgewo+ICAJaW50IHJldDsKPiAgCj4gLQlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRf cG9ydF9yZWYobWdyLCBwb3J0KTsKPiArCXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9w b3J0X3ZhbGlkYXRlZChtZ3IsIHBvcnQpOwo+ICAJaWYgKCFwb3J0KQo+ICAJCXJldHVybiBmYWxz ZTsKPiAgCj4gQEAgLTI3MjUsNyArMjk5Myw3IEBAIGJvb2wgZHJtX2RwX21zdF9hbGxvY2F0ZV92 Y3BpKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJaWYgKHBvcnQtPnZj cGkudmNwaSA+IDApIHsKPiAgCQlEUk1fREVCVUdfS01TKCJwYXlsb2FkOiB2Y3BpICVkIGFscmVh ZHkgYWxsb2NhdGVkIGZvciBwYm4gJWQgLSByZXF1ZXN0ZWQgcGJuICVkXG4iLCBwb3J0LT52Y3Bp LnZjcGksIHBvcnQtPnZjcGkucGJuLCBwYm4pOwo+ICAJCWlmIChwYm4gPT0gcG9ydC0+dmNwaS5w Ym4pIHsKPiAtCQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ICsJCQlkcm1fZHBfbXN0X3RvcG9s b2d5X3B1dF9wb3J0KHBvcnQpOwo+ICAJCQlyZXR1cm4gdHJ1ZTsKPiAgCQl9Cj4gIAl9Cj4gQEAg LTI3MzMsMTMgKzMwMDEsMTMgQEAgYm9vbCBkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkoc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gIAlyZXQgPSBkcm1fZHBfaW5pdF92Y3Bp KG1nciwgJnBvcnQtPnZjcGksIHBibiwgc2xvdHMpOwo+ICAJaWYgKHJldCkgewo+ICAJCURSTV9E RUJVR19LTVMoImZhaWxlZCB0byBpbml0IHZjcGkgc2xvdHM9JWQgbWF4PTYzIHJldD0lZFxuIiwK PiAtCQkJCURJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2RpdiksIHJldCk7Cj4gKwkJCSAgICAg IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2RpdiksIHJldCk7Cj4gIAkJZ290byBvdXQ7Cj4g IAl9Cj4gIAlEUk1fREVCVUdfS01TKCJpbml0aW5nIHZjcGkgZm9yIHBibj0lZCBzbG90cz0lZFxu IiwKPiAtCQkJcGJuLCBwb3J0LT52Y3BpLm51bV9zbG90cyk7Cj4gKwkJICAgICAgcGJuLCBwb3J0 LT52Y3BpLm51bV9zbG90cyk7Cj4gIAo+IC0JZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ICsJZHJt X2RwX21zdF90b3BvbG9neV9wdXRfcG9ydChwb3J0KTsKPiAgCXJldHVybiB0cnVlOwo+ICBvdXQ6 Cj4gIAlyZXR1cm4gZmFsc2U7Cj4gQEAgLTI3NDksMTIgKzMwMTcsMTIgQEAgRVhQT1JUX1NZTUJP TChkcm1fZHBfbXN0X2FsbG9jYXRlX3ZjcGkpOwo+ICBpbnQgZHJtX2RwX21zdF9nZXRfdmNwaV9z bG90cyhzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgc3RydWN0IGRybV9kcF9t c3RfcG9ydCAqcG9ydCkKPiAgewo+ICAJaW50IHNsb3RzID0gMDsKPiAtCXBvcnQgPSBkcm1fZHBf Z2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQpOwo+ICsJcG9ydCA9IGRybV9kcF9tc3Rf dG9wb2xvZ3lfZ2V0X3BvcnRfdmFsaWRhdGVkKG1nciwgcG9ydCk7Cj4gIAlpZiAoIXBvcnQpCj4g IAkJcmV0dXJuIHNsb3RzOwo+ICAKPiAgCXNsb3RzID0gcG9ydC0+dmNwaS5udW1fc2xvdHM7Cj4g LQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gKwlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0 KHBvcnQpOwo+ICAJcmV0dXJuIHNsb3RzOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX21z dF9nZXRfdmNwaV9zbG90cyk7Cj4gQEAgLTI3NjgsMTEgKzMwMzYsMTEgQEAgRVhQT1JUX1NZTUJP TChkcm1fZHBfbXN0X2dldF92Y3BpX3Nsb3RzKTsKPiAgICovCj4gIHZvaWQgZHJtX2RwX21zdF9y ZXNldF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLCBzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ICB7Cj4gLQlwb3J0ID0gZHJtX2RwX2dldF92YWxp ZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiArCXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5 X2dldF9wb3J0X3ZhbGlkYXRlZChtZ3IsIHBvcnQpOwo+ICAJaWYgKCFwb3J0KQo+ICAJCXJldHVy bjsKPiAgCXBvcnQtPnZjcGkubnVtX3Nsb3RzID0gMDsKPiAtCWRybV9kcF9wdXRfcG9ydChwb3J0 KTsKPiArCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gIH0KPiAgRVhQT1JU X1NZTUJPTChkcm1fZHBfbXN0X3Jlc2V0X3ZjcGlfc2xvdHMpOwo+ICAKPiBAQCAtMjc4MSw5ICsz MDQ5LDEwIEBAIEVYUE9SVF9TWU1CT0woZHJtX2RwX21zdF9yZXNldF92Y3BpX3Nsb3RzKTsKPiAg ICogQG1ncjogbWFuYWdlciBmb3IgdGhpcyBwb3J0Cj4gICAqIEBwb3J0OiB1bnZlcmlmaWVkIHBv cnQgdG8gZGVhbGxvY2F0ZSB2Y3BpIGZvcgo+ICAgKi8KPiAtdm9pZCBkcm1fZHBfbXN0X2RlYWxs b2NhdGVfdmNwaShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgc3RydWN0IGRy bV9kcF9tc3RfcG9ydCAqcG9ydCkKPiArdm9pZCBkcm1fZHBfbXN0X2RlYWxsb2NhdGVfdmNwaShz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiArCQkJCXN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQpCj4gIHsKPiAtCXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0 X3JlZihtZ3IsIHBvcnQpOwo+ICsJcG9ydCA9IGRybV9kcF9tc3RfdG9wb2xvZ3lfZ2V0X3BvcnRf dmFsaWRhdGVkKG1nciwgcG9ydCk7Cj4gIAlpZiAoIXBvcnQpCj4gIAkJcmV0dXJuOwo+ICAKPiBA QCAtMjc5Miw3ICszMDYxLDcgQEAgdm9pZCBkcm1fZHBfbXN0X2RlYWxsb2NhdGVfdmNwaShzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwgc3RydWN0IGRybV8KPiAgCXBvcnQtPnZj cGkucGJuID0gMDsKPiAgCXBvcnQtPnZjcGkuYWxpZ25lZF9wYm4gPSAwOwo+ICAJcG9ydC0+dmNw aS52Y3BpID0gMDsKPiAtCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiArCWRybV9kcF9tc3RfdG9w b2xvZ3lfcHV0X3BvcnQocG9ydCk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X2Rl YWxsb2NhdGVfdmNwaSk7Cj4gIAo+IEBAIC0zMDc4LDggKzMzNDcsMTAgQEAgc3RhdGljIHZvaWQg ZHJtX2RwX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAKPiAgc3RhdGljIHZv aWQgZHJtX2RwX2ZyZWVfbXN0X3BvcnQoc3RydWN0IGtyZWYgKmtyZWYpCj4gIHsKPiAtCXN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9k cF9tc3RfcG9ydCwga3JlZik7Cj4gLQlrcmVmX3B1dCgmcG9ydC0+cGFyZW50LT5rcmVmLCBkcm1f ZHBfZnJlZV9tc3RfYnJhbmNoX2RldmljZSk7Cj4gKwlzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpw b3J0ID0KPiArCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kcF9tc3RfcG9ydCwgbWFs bG9jX2tyZWYpOwo+ICsKPiArCWRybV9kcF9tc3RfcHV0X21zdGJfbWFsbG9jKHBvcnQtPnBhcmVu dCk7Cj4gIAlrZnJlZShwb3J0KTsKPiAgfQo+ICAKPiBAQCAtMzEwMyw3ICszMzc0LDYgQEAgc3Rh dGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lfY29ubmVjdG9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQo+ICAJCWxpc3RfZGVsKCZwb3J0LT5uZXh0KTsKPiAgCQltdXRleF91bmxvY2soJm1n ci0+ZGVzdHJveV9jb25uZWN0b3JfbG9jayk7Cj4gIAo+IC0JCWtyZWZfaW5pdCgmcG9ydC0+a3Jl Zik7Cj4gIAkJSU5JVF9MSVNUX0hFQUQoJnBvcnQtPm5leHQpOwo+ICAKPiAgCQltZ3ItPmNicy0+ ZGVzdHJveV9jb25uZWN0b3IobWdyLCBwb3J0LT5jb25uZWN0b3IpOwo+IEBAIC0zMTE3LDcgKzMz ODcsNyBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCj4gIAkJCWRybV9kcF9tc3RfcHV0X3BheWxvYWRfaWQobWdyLCBw b3J0LT52Y3BpLnZjcGkpOwo+ICAJCX0KPiAgCj4gLQkJa3JlZl9wdXQoJnBvcnQtPmtyZWYsIGRy bV9kcF9mcmVlX21zdF9wb3J0KTsKPiArCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3J0 KTsKPiAgCQlzZW5kX2hvdHBsdWcgPSB0cnVlOwo+ICAJfQo+ICAJaWYgKHNlbmRfaG90cGx1ZykK PiBAQCAtMzI5Miw3ICszNTYyLDcgQEAgc3RhdGljIGludCBkcm1fZHBfbXN0X2kyY194ZmVyKHN0 cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGkyY19tc2cgKm1zZ3MKPiAgCXN0cnVj dCBkcm1fZHBfc2lkZWJhbmRfbXNnX3R4ICp0eG1zZyA9IE5VTEw7Cj4gIAlpbnQgcmV0Owo+ICAK PiAtCW1zdGIgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9tc3RiX3JlZihtZ3IsIHBvcnQtPnBhcmVu dCk7Cj4gKwltc3RiID0gZHJtX2RwX21zdF90b3BvbG9neV9nZXRfbXN0Yl92YWxpZGF0ZWQobWdy LCBwb3J0LT5wYXJlbnQpOwo+ICAJaWYgKCFtc3RiKQo+ICAJCXJldHVybiAtRVJFTU9URUlPOwo+ ICAKPiBAQCAtMzM0Miw3ICszNjEyLDcgQEAgc3RhdGljIGludCBkcm1fZHBfbXN0X2kyY194ZmVy KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGkyY19tc2cgKm1zZ3MKPiAgCX0K PiAgb3V0Ogo+ICAJa2ZyZWUodHhtc2cpOwo+IC0JZHJtX2RwX3B1dF9tc3RfYnJhbmNoX2Rldmlj ZShtc3RiKTsKPiArCWRybV9kcF9tc3RfdG9wb2xvZ3lfcHV0X21zdGIobXN0Yik7Cj4gIAlyZXR1 cm4gcmV0Owo+ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hl bHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+IGluZGV4IDM3MWNjMjgx NjQ3Ny4uNTA2NDNhMzk3NjVkIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9kcF9tc3Rf aGVscGVyLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gQEAgLTQ0 LDcgKzQ0LDEwIEBAIHN0cnVjdCBkcm1fZHBfdmNwaSB7Cj4gIAo+ICAvKioKPiAgICogc3RydWN0 IGRybV9kcF9tc3RfcG9ydCAtIE1TVCBwb3J0Cj4gLSAqIEBrcmVmOiByZWZlcmVuY2UgY291bnQg Zm9yIHRoaXMgcG9ydC4KPiArICogQHRvcG9sb2d5X2tyZWY6IHJlZmNvdW50IGZvciB0aGlzIHBv cnQncyBsaWZldGltZSBpbiB0aGUgdG9wb2xvZ3ksIG9ubHkgdGhlCj4gKyAqIERQIE1TVCBoZWxw ZXJzIHNob3VsZCBuZWVkIHRvIHRvdWNoIHRoaXMKPiArICogQG1hbGxvY19rcmVmOiByZWZjb3Vu dCBmb3IgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGNvbnRhaW5pbmcgdGhpcyBzdHJ1Y3R1cmUuCj4g KyAqIFNlZSBkcm1fZHBfbXN0X2dldF9wb3J0X21hbGxvYygpIGFuZCBkcm1fZHBfbXN0X3B1dF9w b3J0X21hbGxvYygpLgo+ICAgKiBAcG9ydF9udW06IHBvcnQgbnVtYmVyCj4gICAqIEBpbnB1dDog aWYgdGhpcyBwb3J0IGlzIGFuIGlucHV0IHBvcnQuCj4gICAqIEBtY3M6IG1lc3NhZ2UgY2FwYWJp bGl0eSBzdGF0dXMgLSBEUCAxLjIgc3BlYy4KPiBAQCAtNjcsNyArNzAsOCBAQCBzdHJ1Y3QgZHJt X2RwX3ZjcGkgewo+ICAgKiBpbiB0aGUgTVNUIHRvcG9sb2d5Lgo+ICAgKi8KPiAgc3RydWN0IGRy bV9kcF9tc3RfcG9ydCB7Cj4gLQlzdHJ1Y3Qga3JlZiBrcmVmOwo+ICsJc3RydWN0IGtyZWYgdG9w b2xvZ3lfa3JlZjsKPiArCXN0cnVjdCBrcmVmIG1hbGxvY19rcmVmOwoKSSdkIHRvIGlubGluZSBt ZW1iZXIga2VybmVsZG9jIGhlcmUgKHlvdSBjYW4gbWl4Jm1hdGNoLCBzbyBubyBuZWVkIHRvCnJl d3JpdGUgdGhlbSBhbGwpIGFuZCBzcGVuZCBhIGZldyB3b3JkcyByZWZlcmVuY2UgdGhlIGZhbWls eSBvZiBnZXQvcHV0CmZ1bmN0aW9ucy4gU2FtZSBmb3IgbXN0YiBiZWxvdy4KCj4gIAo+ICAJdTgg cG9ydF9udW07Cj4gIAlib29sIGlucHV0Owo+IEBAIC0xMDIsNyArMTA2LDEwIEBAIHN0cnVjdCBk cm1fZHBfbXN0X3BvcnQgewo+ICAKPiAgLyoqCj4gICAqIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5j aCAtIE1TVCBicmFuY2ggZGV2aWNlLgo+IC0gKiBAa3JlZjogcmVmZXJlbmNlIGNvdW50IGZvciB0 aGlzIHBvcnQuCj4gKyAqIEB0b3BvbG9neV9rcmVmOiByZWZjb3VudCBmb3IgdGhpcyBicmFuY2gg ZGV2aWNlJ3MgbGlmZXRpbWUgaW4gdGhlIHRvcG9sb2d5LAo+ICsgKiBvbmx5IHRoZSBEUCBNU1Qg aGVscGVycyBzaG91bGQgbmVlZCB0byB0b3VjaCB0aGlzCj4gKyAqIEBtYWxsb2Nfa3JlZjogcmVm Y291bnQgZm9yIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBjb250YWluaW5nIHRoaXMgc3RydWN0dXJl Lgo+ICsgKiBTZWUgZHJtX2RwX21zdF9nZXRfbXN0Yl9tYWxsb2MoKSBhbmQgZHJtX2RwX21zdF9w dXRfbXN0Yl9tYWxsb2MoKS4KPiAgICogQHJhZDogUmVsYXRpdmUgQWRkcmVzcyB0byB0YWxrIHRv IHRoaXMgYnJhbmNoIGRldmljZS4KPiAgICogQGxjdDogTGluayBjb3VudCB0b3RhbCB0byB0YWxr IHRvIHRoaXMgYnJhbmNoIGRldmljZS4KPiAgICogQG51bV9wb3J0czogbnVtYmVyIG9mIHBvcnRz IG9uIHRoZSBicmFuY2guCj4gQEAgLTEyMSw3ICsxMjgsOCBAQCBzdHJ1Y3QgZHJtX2RwX21zdF9w b3J0IHsKPiAgICogdG8gZG93bnN0cmVhbSBwb3J0IG9mIHBhcmVudCBicmFuY2hlcy4KPiAgICov Cj4gIHN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCB7Cj4gLQlzdHJ1Y3Qga3JlZiBrcmVmOwo+ICsJ c3RydWN0IGtyZWYgdG9wb2xvZ3lfa3JlZjsKPiArCXN0cnVjdCBrcmVmIG1hbGxvY19rcmVmOwo+ ICAJdTggcmFkWzhdOwo+ICAJdTggbGN0Owo+ICAJaW50IG51bV9wb3J0czsKPiBAQCAtNjI2LDQg KzYzNCw3IEBAIGludCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUsCj4gIGludCBkcm1fZHBfc2VuZF9wb3dlcl91cGRvd25fcGh5 KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJCQkJIHN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQgKnBvcnQsIGJvb2wgcG93ZXJfdXApOwo+ICAKPiArdm9pZCBkcm1fZHBfbXN0 X2dldF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsKPiArdm9pZCBk cm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsK PiArCj4gICNlbmRpZgo+IC0tIAo+IDIuMTkuMgoKSSByZWFsbHkgbGlrZS4gTW9zdGx5IGNvbmNl bnRyYXRlZCBvbiBsb29raW5nIGF0IHRoZSBkb2NzLiBBbHNvIHN0aWxsCm5lZWQgdG8gYXBwbHkg aXQgYW5kIGJ1aWxkIHRoZSBkb2NzLCBzbyBJIGNhbiBhcHByZWNpYXRlIHRoZSBET1QgZ3JhcGhz LgotRGFuaWVsCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jw b3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL25vdXZlYXUK