From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [PATCH v4 07/38] drm/i915: Start of GPU scheduler Date: Wed, 20 Jan 2016 15:18:33 +0200 Message-ID: <1453295913.7637.55.camel@linux.intel.com> References: <1448278774-31376-1-git-send-email-John.C.Harrison@Intel.com> <1452537788-32136-1-git-send-email-John.C.Harrison@Intel.com> <1452537788-32136-8-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 043126E920 for ; Wed, 20 Jan 2016 05:17:31 -0800 (PST) In-Reply-To: <1452537788-32136-8-git-send-email-John.C.Harrison@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John.C.Harrison@Intel.com, Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org SGksCgpDb21tZW50cyBiZWxvdyB0aGlzIHByZSB0ZXh0LgoKTWFueSBvZiB0aGUgY29tbWVudHMg YXJlIHJlbGF0ZWQgdG8gdGhlIGluZGVudCBhbmQgc3R5bGUgb2YgdGhlIGNvZGUuClRoYXQgc3R1 ZmYgaXMgaW1wb3J0YW50IHRvIGZpeCBmb3IgZnV0dXJlIG1haW50YWluYWJpbGl0eS4gSW4gb3Jk ZXIgZm9yCnRoZSBmdXR1cmUgcmV2aWV3IHRvIGJlIG1vcmUgZWZmZWN0aXZlLCBJJ2QgbGlrZSB0 byBuZXh0IHNlZSBhIHY1IG9mCnRoZSBzZXJpZXMgd2hlcmUgdGhlIGNvZGUgcXVhbGl0eSBjb25j ZXJucyBoYXZlIGJlZW4gYWRkcmVzc2VkLCBwYXRjaGVzCnNxdWFzaGVkIHRvIGJlIGFjdHVhbCBy ZXZpZXdhYmxlIGNodW5rcyBhbmQgYXBwcm9wcmlhdGUga2VybmVsZG9jIGJlaW5nCmFkZGVkLgoK VG8gZ2l2ZSBhbiBpZGVhIG9mIHByb3BlciBzbGljaW5nIG9mIHBhdGNoZXMsIGZpcnN0IHByb2R1 Y2UgYSBuby1vcApzY2hlZHVsZXIsIGFkZGluZyB0aGUgZXh0cmEgZnVuY3Rpb24gY2FsbHMgd2hl cmUgbmVlZGVkIGFuZCBzdGlsbAprZWVwaW5nIHRoZSBzY2hlZHVsaW5nIGNvbXBsZXRlbHkgbGlu ZWFyLiBTZWNvbmQgcGF0Y2ggY291bGQgaW50cm9kdWNlCm91dCBvZiBvcmRlciBzdWJtaXR0aW5n LCB0aGlyZCBvbmUgcHJpb3JpdHkgYnVtcGluZywgZm91cnRoIHByZS1lbXB0aW5nIAphbmQgc28g b24uIFRoYXQgd2F5LCBlYWNoIHBhdGNoIGV4dGVuZHMgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIGlz IGl0c2VsZgphbHJlYWR5IG1lcmdlYWJsZS4gVGhhdCB3YXkgSSd2ZSBiZWVuIGFibGUgdG8gZ28g dGhyb3VnaCBhbmQgdW5kZXJzdGFuZAp0aGUgZXhpc3RpbmcgY29kZSwgYW5kIEkgY2FuIGFjdHVh bGx5IHJldmlldyAob3RoZXIgdGhhbiBqdXN0IG5hZyBhYm91dAppbmRlbnQgYW5kIGNvZGluZyBz dHlsZSkgaWYgdGhlIGNoYW5nZXMgYXJlIGFwcHJvcHJpYXRlIHRvIGJyaW5nIGluIHRoZQpmdW5j dGlvbmFsaXR5IGRlc2lyZWQuCgpJbiB0aGUgY3VycmVudCBzcGxpdCwgZm9yIG1lIG9yIGFueW9u ZSB3aG8gZGlkIG5vdCBwYXJ0aWNpcGF0ZSB3cml0aW5nCnRoZSBjb2RlLCBpdCBpcyBvdGhlcndp c2UgdG9vIGNvbmZ1c2luZyB0byB0cnkgdG8gZ3Vlc3Mgd2hhdCBmdXR1cmUKY2hhbmdlcyBtaWdo dCBtYWtlIGVhY2ggcGllY2Ugb2YgY29kZSBtYWtlIHNlbnNlLCBhbmQgd2hpY2ggd2lsbCBiZQpy ZWR1bmRhbnQgaW4gdGhlIGZ1dHVyZSB0b28uIFRoZXJlIGlzIG5vIHZhbHVlIGluIHNwbGl0dGlu ZyBjb2RlIHRvCmNodW5rcyB0aGF0IGFyZSBub3QgaXRzZWxmIGZ1bmN0aW9uYWwuCgpSZWdhcmRz LCBKb29uYXMKCk9uIE1vbiwgMjAxNi0wMS0xMSBhdCAxODo0MiArMDAwMCwgSm9obi5DLkhhcnJp c29uQEludGVsLmNvbSB3cm90ZToKPiBGcm9tOiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlz b25ASW50ZWwuY29tPgo+IAo+IEluaXRpYWwgY3JlYXRpb24gb2Ygc2NoZWR1bGVyIHNvdXJjZSBm aWxlcy4gTm90ZSB0aGF0IHRoaXMgcGF0Y2gKPiBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIHNjaGVk dWxlciBmdW5jdGlvbmFsaXR5IGJ1dCBkb2VzIG5vdCBob29rIGl0Cj4gaW4KPiB0byB0aGUgZHJp dmVyIHlldC4gSXQgYWxzbyBsZWF2ZXMgdGhlIHNjaGVkdWxlciBjb2RlIGluICdwYXNzCj4gdGhy b3VnaCcKPiBtb2RlIHNvIHRoYXQgZXZlbiB3aGVuIGl0IGlzIGhvb2tlZCBpbiwgaXQgd2lsbCBu b3QgYWN0dWFsbHkgZG8gdmVyeQo+IG11Y2guIFRoaXMgYWxsb3dzIHRoZSBob29rcyB0byBiZSBh ZGRlZCBvbmUgYXQgYSB0aW1lIGluIGJpdGUgc2l6ZQo+IGNodW5rcyBhbmQgb25seSB3aGVuIHRo ZSBzY2hlZHVsZXIgaXMgZmluYWxseSBlbmFibGVkIGF0IHRoZSBlbmQgZG9lcwo+IGFueXRoaW5n IHN0YXJ0IGhhcHBlbmluZy4KPiAKPiBUaGUgZ2VuZXJhbCB0aGVvcnkgb2Ygb3BlcmF0aW9uIGlz IHRoYXQgd2hlbiBiYXRjaCBidWZmZXJzIGFyZQo+IHN1Ym1pdHRlZCB0byB0aGUgZHJpdmVyLCB0 aGUgZXhlY2J1ZmZlcigpIGNvZGUgcGFja2FnZXMgdXAgYWxsIHRoZQo+IGluZm9ybWF0aW9uIHJl cXVpcmVkIHRvIGV4ZWN1dGUgdGhlIGJhdGNoIGJ1ZmZlciBhdCBhIGxhdGVyIHRpbWUuCj4gVGhp cwo+IHBhY2thZ2UgaXMgZ2l2ZW4gb3ZlciB0byB0aGUgc2NoZWR1bGVyIHdoaWNoIGFkZHMgaXQg dG8gYW4gaW50ZXJuYWwKPiBub2RlIGxpc3QuIFRoZSBzY2hlZHVsZXIgYWxzbyBzY2FucyB0aGUg bGlzdCBvZiBvYmplY3RzIGFzc29jaWF0ZWQKPiB3aXRoIHRoZSBiYXRjaCBidWZmZXIgYW5kIGNv bXBhcmVzIHRoZW0gYWdhaW5zdCB0aGUgb2JqZWN0cyBhbHJlYWR5Cj4gaW4KPiB1c2UgYnkgb3Ro ZXIgYnVmZmVycyBpbiB0aGUgbm9kZSBsaXN0LiBJZiBtYXRjaGVzIGFyZSBmb3VuZCB0aGVuIHRo ZQo+IG5ldyBiYXRjaCBidWZmZXIgbm9kZSBpcyBtYXJrZWQgYXMgYmVpbmcgZGVwZW5kZW50IHVw b24gdGhlIG1hdGNoaW5nCj4gbm9kZS4gVGhlIHNhbWUgaXMgZG9uZSBmb3IgdGhlIGNvbnRleHQg b2JqZWN0LiBUaGUgc2NoZWR1bGVyIGFsc28KPiBidW1wcyB1cCB0aGUgcHJpb3JpdHkgb2Ygc3Vj aCBtYXRjaGluZyBub2RlcyBvbiB0aGUgZ3JvdW5kcyB0aGF0IHRoZQo+IG1vcmUgZGVwZW5kZW5j aWVzIGEgZ2l2ZW4gYmF0Y2ggYnVmZmVyIGhhcyB0aGUgbW9yZSBpbXBvcnRhbnQgaXQgaXMKPiBs aWtlbHkgdG8gYmUuCj4gCj4gVGhlIHNjaGVkdWxlciBhaW1zIHRvIGhhdmUgYSBnaXZlbiAodHVu ZWFibGUpIG51bWJlciBvZiBiYXRjaCBidWZmZXJzCj4gaW4gZmxpZ2h0IG9uIHRoZSBoYXJkd2Fy ZSBhdCBhbnkgZ2l2ZW4gdGltZS4gSWYgZmV3ZXIgdGhhbiB0aGlzIGFyZQo+IGN1cnJlbnRseSBl eGVjdXRpbmcgd2hlbiBhIG5ldyBub2RlIGlzIHF1ZXVlZCwgdGhlbiB0aGUgbm9kZSBpcwo+IHBh c3NlZAo+IHN0cmFpZ2h0IHRocm91Z2ggdG8gdGhlIHN1Ym1pdCBmdW5jdGlvbi4gT3RoZXJ3aXNl IGl0IGlzIHNpbXBseSBhZGRlZAo+IHRvIHRoZSBxdWV1ZSBhbmQgdGhlIGRyaXZlciByZXR1cm5z IGJhY2sgdG8gdXNlciBsYW5kLgo+IAo+IFRoZSBzY2hlZHVsZXIgaXMgbm90aWZpZWQgd2hlbiBl YWNoIGJhdGNoIGJ1ZmZlciBjb21wbGV0ZXMgYW5kCj4gdXBkYXRlcwo+IGl0cyBpbnRlcm5hbCB0 cmFja2luZyBhY2NvcmRpbmdseS4gQXQgdGhlIGVuZCBvZiB0aGUgY29tcGxldGlvbgo+IGludGVy cnVwdCBwcm9jZXNzaW5nLCBpZiBhbnkgc2NoZWR1bGVyIHRyYWNrZWQgYmF0Y2hlcyB3ZXJlCj4g cHJvY2Vzc2VkLAo+IHRoZSBzY2hlZHVsZXIncyBkZWZlcnJlZCB3b3JrZXIgdGhyZWFkIGlzIHdv a2VuIHVwLiBUaGlzIGNhbiBkbyBtb3JlCj4gaW52b2x2ZWQgcHJvY2Vzc2luZyBzdWNoIGFzIGFj dHVhbGx5IHJlbW92aW5nIGNvbXBsZXRlZCBub2RlcyBmcm9tCj4gdGhlCj4gcXVldWUgYW5kIGZy ZWVpbmcgdXAgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlbSAoaW50ZXJuYWwKPiBt ZW1vcnkgYWxsb2NhdGlvbnMsIERSTSBvYmplY3QgcmVmZXJlbmNlcywgY29udGV4dCByZWZlcmVu Y2UsIGV0Yy4pLgo+IFRoZSB3b3JrIGhhbmRsZXIgYWxzbyBjaGVja3MgdGhlIGluIGZsaWdodCBj b3VudCBhbmQgY2FsbHMgdGhlCj4gc3VibWlzc2lvbiBjb2RlIGlmIGEgbmV3IHNsb3QgaGFzIGFw cGVhcmVkLgo+IAo+IFdoZW4gdGhlIHNjaGVkdWxlcidzIHN1Ym1pdCBjb2RlIGlzIGNhbGxlZCwg aXQgc2NhbnMgdGhlIHF1ZXVlZCBub2RlCj4gbGlzdCBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkg bm9kZSB0aGF0IGhhcyBubyB1bm1ldCBkZXBlbmRlbmNpZXMuCj4gTm90ZSB0aGF0IHRoZSBkZXBl bmRlbmN5IGNhbGN1bGF0aW9uIGlzIGNvbXBsZXggYXMgaXQgbXVzdCB0YWtlCj4gaW50ZXItcmlu ZyBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBwcmVlbXB0aW9ucyBpbnRvIGFjY291bnQuIE5v dGUKPiBhbHNvIHRoYXQgaW4gdGhlIGZ1dHVyZSB0aGlzIHdpbGwgYmUgZXh0ZW5kZWQgdG8gaW5j bHVkZSBleHRlcm5hbAo+IGRlcGVuZGVuY2llcyBzdWNoIGFzIHRoZSBBbmRyb2lkIE5hdGl2ZSBT eW5jIGZpbGUgZGVzY3JpcHRvcnMgYW5kL29yCj4gdGhlIGxpbnV4IGRtYS1idWZmIHN5bmNocm9u aXNhdGlvbiBzY2hlbWUuCj4gCj4gSWYgYSBzdWl0YWJsZSBub2RlIGlzIGZvdW5kIHRoZW4gaXQg aXMgc2VudCB0byBleGVjYnVmZl9maW5hbCgpIGZvcgo+IHN1Ym1pc3Npb24gdG8gdGhlIGhhcmR3 YXJlLiBUaGUgaW4gZmxpZ2h0IGNvdW50IGlzIHRoZW4gcmUtY2hlY2tlZAo+IGFuZAo+IGEgbmV3 IG5vZGUgcG9wcGVkIGZyb20gdGhlIGxpc3QgaWYgYXBwcm9wcmlhdGUuCj4gCj4gTm90ZSB0aGF0 IHRoaXMgcGF0Y2ggZG9lcyBub3QgaW1wbGVtZW50IHByZS1lbXB0aXZlIHNjaGVkdWxpbmcuIE9u bHkKPiBiYXNpYyBzY2hlZHVsaW5nIGJ5IHJlLW9yZGVyaW5nIGJhdGNoIGJ1ZmZlciBzdWJtaXNz aW9uIGlzIGN1cnJlbnRseQo+IGltcGxlbWVudGVkLiBQcmUtZW1wdGlvbiBvZiBhY3RpdmVseSBl eGVjdXRpbmcgYmF0Y2ggYnVmZmVycyBjb21lcyBpbgo+IHRoZSBuZXh0IHBhdGNoIHNlcmllcy4K PiAKPiB2MjogQ2hhbmdlZCBwcmlvcml0eSBsZXZlbHMgdG8gKy8tMTAyMyBkdWUgdG8gZmVlZGJh Y2sgZnJvbSBDaHJpcwo+IFdpbHNvbi4KPiAKPiBSZW1vdmVkIHJlZHVuZGFudCBpbmRleCBmcm9t IHNjaGVkdWxlciBub2RlLgo+IAo+IENoYW5nZWQgdGltZSBzdGFtcHMgdG8gdXNlIGppZmZpZXMg aW5zdGVhZCBvZiByYXcgbW9ub3RvbmljLiBUaGlzCj4gcHJvdmlkZXMgbG93ZXIgcmVzb2x1dGlv biBidXQgaW1wcm92ZWQgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGk5MTUKPiBjb2RlLgo+IAo+ IE1ham9yIHJlLXdyaXRlIG9mIGNvbXBsZXRpb24gdHJhY2tpbmcgY29kZSBkdWUgdG8gc3RydWN0 IGZlbmNlCj4gY29udmVyc2lvbi4gVGhlIHNjaGVkdWxlciBubyBsb25nZXIgaGFzIGl0J3Mgb3du IHByaXZhdGUgSVJRIGhhbmRsZXIKPiBidXQganVzdCBsZXRzIHRoZSBleGlzdGluZyByZXF1ZXN0 IGNvZGUgaGFuZGxlIGNvbXBsZXRpb24gZXZlbnRzLgo+IEluc3RlYWQsIHRoZSBzY2hlZHVsZXIg bm93IGhvb2tzIGludG8gdGhlIHJlcXVlc3Qgbm90aWZ5IGNvZGUgdG8gYmUKPiB0b2xkIHdoZW4g YSByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuCj4gCj4gUmVkdWNlZCBkcml2ZXIgbXV0ZXggbG9ja2lu ZyBzY29wZS4gUmVtb3ZhbCBvZiBzY2hlZHVsZXIgbm9kZXMgbm8KPiBsb25nZXIgZ3JhYnMgdGhl IG11dGV4IGxvY2suCj4gCj4gdjM6IFJlZmFjdG9yIG9mIGRlcGVuZGVuY3kgZ2VuZXJhdGlvbiB0 byBtYWtlIHRoZSBjb2RlIG1vcmUgcmVhZGFibGUuCj4gQWxzbyBhZGRlZCBpbiByZWFkLXJlYWQg b3B0aW1pc2F0aW9uIHN1cHBvcnQgLSBpLmUuLCBkb24ndCB0cmVhdCBhCj4gc2hhcmVkIHJlYWQt b25seSBidWZmZXIgYXMgYmVpbmcgYSBkZXBlbmRlbmN5Lgo+IAo+IEFsbG93ZWQgdGhlIGtpbGxp bmcgb2YgcXVldWVkIG5vZGVzIHJhdGhlciB0aGFuIG9ubHkgZmx5aW5nIG9uZXMuCj4gCj4gdjQ6 IFVwZGF0ZWQgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIGJldHRlciByZWZsZWN0IHRoZSBjdXJyZW50 IHN0YXRlIG9mCj4gdGhlIGNvZGUuIERvd25ncmFkZWQgc29tZSBCVUdfT05zIHRvIFdBUk5fT05z LiBVc2VkIHRoZSBjb3JyZWN0IGFycmF5Cj4gbWVtb3J5IGFsbG9jYXRvciBmdW5jdGlvbiAoa21h bGxvY19hcnJheSBpbnN0ZWFkIG9mIGttYWxsb2MpLgo+IENvcnJlY3RlZCB0aGUgZm9ybWF0IG9m IHNvbWUgY29tbWVudHMuIFdyYXBwZWQgc29tZSBsaW5lcyBkaWZmZXJlbnRseQo+IHRvIGtlZXAg dGhlIHN0eWxlIGNoZWNrZXIgaGFwcHkuCj4gCj4gRml4ZWQgYSBXQVJOX09OIHdoZW4ga2lsbGlu ZyBub2Rlcy4gVGhlIGRlcGVuZGVuY3kgcmVtb3ZhbCBjb2RlCj4gY2hlY2tzCj4gdGhhdCBub2Rl cyBiZWluZyBkZXN0cm95ZWQgZG8gbm90IGhhdmUgYW55IG91c3RhbmRpbmcgZGVwZW5kZW5jaWVz Cj4gKHdoaWNoIHdvdWxkIGltcGx5IHRoZXkgc2hvdWxkIG5vdCBoYXZlIGJlZW4gZXhlY3V0ZWQg eWV0KS4gSW4gdGhlCj4gY2FzZSBvZiBub2RlcyBiZWluZyBkZXN0cm95ZWQsIGUuZy4gZHVlIHRv IGNvbnRleHQgYmFubmluZywgdGhlbiB0aGlzCj4gbWlnaHQgd2VsbCBiZSB0aGUgY2FzZSAtIHRo ZXkgaGF2ZSBub3QgYmVlbiBleGVjdXRlZCBhbmQgZG8gaW5kZWVkCj4gaGF2ZSBvdXRzdGFuZGlu ZyBkZXBlbmRlbmNpZXMuCj4gCj4gUmUtaW5zdGF0ZWQgdGhlIGNvZGUgdG8gZGlzYmxlIGludGVy cnVwdHMgd2hlbiBub3QgaW4gdXNlLiBUaGUKPiB1bmRlcmx5aW5nIHByb2JsZW0gY2F1c2luZyBi cm9rZW4gSVJRIHJlZmVyZW5jZSBjb3VudHMgc2VlbXMgdG8gaGF2ZQo+IGJlZW4gZml4ZWQgbm93 Lgo+IAo+IEZvcjogVklaLTE1ODcKPiBTaWduZWQtb2ZmLWJ5OiBKb2huIEhhcnJpc29uIDxKb2hu LkMuSGFycmlzb25ASW50ZWwuY29tPgo+IC0tLQo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMSArCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5owqDCoMKgwqDCoMKgwqB8wqDCoMKgNCArCj4gwqBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbS5jwqDCoMKgwqDCoMKgwqB8wqDCoMKgNSArCj4gwqBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jIHwgNzk3Cj4gKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCB8wqDC oDkxICsrKysKPiDCoDUgZmlsZXMgY2hhbmdlZCwgODk4IGluc2VydGlvbnMoKykKPiDCoGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCj4gwqBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaAo+ IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggMTUzOThjNS4uNzljYjM4YiAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlCj4gQEAgLTEwLDYgKzEwLDcgQEAgY2NmbGFncy15IDo9IC1XZXJyb3IK PiDCoGk5MTUteSA6PSBpOTE1X2Rydi5vIFwKPiDCoAnCoMKgaTkxNV9pcnEubyBcCj4gwqAJwqDC oGk5MTVfcGFyYW1zLm8gXAo+ICsJwqDCoGk5MTVfc2NoZWR1bGVyLm8gXAo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpOTE1X3N1c3BlbmQubyBcCj4gwqAJwqDCoGk5MTVfc3lzZnMubyBcCj4gwqAJ wqDCoGludGVsX2Nzci5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCAxMGRmZmRk Li4zOGY0MjNiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTE2OTUsNiArMTY5 NSw4IEBAIHN0cnVjdCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1zIHsKPiDCoAlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3TCoMKgwqDCoMKgKnJlcXVlc3Q7Cj4gwqB9Owo+IMKgCj4gK3N0cnVjdCBp OTE1X3NjaGVkdWxlcjsKPiArCgpSYXRoZXIgYWRkICJpOTE1X3NjaGVkdWxlci5oIiBpbmNsdWRl IGF0IHRoZSB0b3AgYW5kIGVsaW1pbmF0ZSBjaXJjdWxhcgppbmNsdWRlIGRlcGVuZGVuY2llcy4g VGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBuZXh0IGNvbW1lbnQuCgo+IMKgLyogdXNlZCBpbiBjb21w dXRpbmcgdGhlIG5ldyB3YXRlcm1hcmtzIHN0YXRlICovCj4gwqBzdHJ1Y3QgaW50ZWxfd21fY29u ZmlnIHsKPiDCoAl1bnNpZ25lZCBpbnQgbnVtX3BpcGVzX2FjdGl2ZTsKPiBAQCAtMTk0Nyw2ICsx OTQ5LDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+IMKgCj4gwqAJc3RydWN0IGk5MTVf cnVudGltZV9wbSBwbTsKPiDCoAo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXI7 Cj4gKwoKQXMgdGhlIHNjaGVkdWxlciBpcyBnb2luZyB0byBiZSBlbmFibGVkIG9uIGFsbCBwbGF0 Zm9ybXMgdG8gYW4gZXh0ZW50LApubyBwb2ludCBpbiBtYWtpbmcgaXQgYSBwb2ludGVyLiBKdXN0 IG1ha2luZyBpdCBtZW1iZXIgbGlrZSAicG0iIGlzIHRoZQpiZXN0LCB0aGlzIGFsc28gcmVxdWly ZXMgdGhlIGFib3ZlIGluY2x1ZGUgY2hhbmdlLgoKPiDCoAkvKiBBYnN0cmFjdCB0aGUgc3VibWlz c2lvbiBtZWNoYW5pc20gKGxlZ2FjeSByaW5nYnVmZmVyIG9yIGV4ZWNsaXN0cykgYXdheSAqLwo+ IMKgCXN0cnVjdCB7Cj4gwqAJCWludCAoKmV4ZWNidWZfc3VibWl0KShzdHJ1Y3QgaTkxNV9leGVj YnVmZmVyX3BhcmFtcyAqcGFyYW1zLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IGNm ZjM3NjguLjQ3YWE4NWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtMzcsNiAr MzcsNyBAQAo+IMKgI2luY2x1ZGUgCj4gwqAjaW5jbHVkZSAKPiDCoCNpbmNsdWRlIAo+ICsjaW5j bHVkZSAiaTkxNV9zY2hlZHVsZXIuaCIKPiDCoAoKVGhpcyBzaG91bGQgZ28gYmVmb3JlIGFueSA8 bGludXgvLi4uPiBub3QgdG8gbWFzayBtaXNzaW5nIGluY2x1ZGVzIGZyb20KdGhlIGhlYWRlciBp dHNlbGYsIHNvIGNvcnJlY3QgcGxhY2Ugd291bGQgYmUgcmlnaHQgYWZ0ZXIgI2luY2x1ZGUKImk5 MTVfdHJhY2UuaCLCoAoKPiDCoCNkZWZpbmUgUlFfQlVHX09OKGV4cHIpCj4gwqAKPiBAQCAtNTI0 Miw2ICs1MjQzLDEwIEBAIGludCBpOTE1X2dlbV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cj4gwqAJwqAqLwo+IMKgCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JD RVdBS0VfQUxMKTsKPiDCoAo+ICsJcmV0ID0gaTkxNV9zY2hlZHVsZXJfaW5pdChkZXYpOwo+ICsJ aWYgKHJldCkKPiArCQlnb3RvIG91dF91bmxvY2s7Cj4gKwo+IMKgCXJldCA9IGk5MTVfZ2VtX2lu aXRfdXNlcnB0cihkZXYpOwo+IMKgCWlmIChyZXQpCj4gwqAJCWdvdG8gb3V0X3VubG9jazsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAuLjhjYjkwNjMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwo+IEBAIC0wLDAgKzEsNzk3IEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u Cj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJl IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4g KyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC7CoMKgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBU SEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4g KyNpbmNsdWRlICJpbnRlbF9kcnYuaCIKPiArI2luY2x1ZGUgImk5MTVfc2NoZWR1bGVyLmgiCgpB Z2FpbiwgdGhpcyBpbmNsdWRlIHNob3VsZCBiZSB0aGUgdG9wIG9uZSwgc2hvdWxkIG5vdCByZXF1 aXJlIGFueQppbmNsdWRlcyBiZWZvcmUgaXQuCgo+ICsKPiArc3RhdGljIGludMKgwqDCoMKgwqDC oMKgwqDCoGk5MTVfc2NoZWR1bGVyX2ZseV9ub2RlKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1 ZV9lbnRyeSAqbm9kZSk7Cj4gK3N0YXRpYyBpbnTCoMKgwqDCoMKgwqDCoMKgwqBpOTE1X3NjaGVk dWxlcl9yZW1vdmVfZGVwZW5kZW50KHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAo+ ICsJCQkJCQnCoMKgwqBzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKnJlbW92ZSk7 Cj4gK3N0YXRpYyBpbnTCoMKgwqDCoMKgwqDCoMKgwqBpOTE1X3NjaGVkdWxlcl9zdWJtaXQoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKPiArCQkJCQnCoGJvb2wgaXNfbG9ja2VkKTsKPiAr c3RhdGljIHVpbnQzMl90wqDCoMKgwqBpOTE1X3NjaGVkdWxlcl9jb3VudF9mbHlpbmcoc3RydWN0 IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIsCj4gKwkJCQkJwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiArc3RhdGljIHZvaWTCoMKgwqDCoMKgwqDCoMKgaTkx NV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcF9jbGVhcihzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNj aGVkdWxlcik7Cj4gK3N0YXRpYyBpbnTCoMKgwqDCoMKgwqDCoMKgwqBpOTE1X3NjaGVkdWxlcl9w cmlvcml0eV9idW1wKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyLAo+ICsJCQkJCQlz dHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKnRhcmdldCwKPiArCQkJCQkJdWludDMy X3QgYnVtcCk7CgpEbyBub3QgaW5kZW50IHRoZSBmdW5jdGlvbiBuYW1lcyBsaWtlIHRoaXMsIGl0 IGJlY29tZXMgdW5tYWludGFpbmFibGUKYW5kIG1lc3N5IHZlcnkgZmFzdCBpZiBzb21lYm9keSBh ZGRzIGEgbmV3IGZ1bmN0aW9uIHdpdGggYSBtb3JlIGNvbXBsZXgKcmV0dXJuIHR5cGUsIHdoaWNo IGlzIGEgdmVyeSBsaWtlbHkgdGhpbmcgdG8gaGFwcGVuLgoKV2hhdCBJIHdvdWxkIGRvIGlzIG1v dmUgYWxsIHRoZSBoZWxwZXIgZnVuY3Rpb25zIGhlcmUgYXQgdGhlIHRvcCBhbmQKb3JkZXIgdGhl bSBzbyB0aGF0IHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9ucyBhcmUgbm90IG5lZWRlZCwgYXQgbGVh c3QKaTkxNV9zY2hlZHVsZXJfZmx5X25vZGUgaXMgbm90IHVzZWQgYmVmb3JlIGl0cyBkZWZpbml0 aW9uLgoKPiArCj4gK2ludCBpOTE1X3NjaGVkdWxlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXLCoMKgwqAqc2NoZWR1bGVyID0gZGV2 X3ByaXYtPnNjaGVkdWxlcjsKPiArCWludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHI7CgpBZ2FpbiwgdGhpcyBpbmRlbnQgaXMgYSBuby1nby4gSSdsbCBub3QgbWVu dGlvbiBpdCBvbiBmdXJ0aGVyCmZ1bmN0aW9ucywgYXNzdW1lIGl0IHRvIGJlIGZpeGVkIGZvciBu ZXh0IHJldmlzaW9uLgoKPiArCj4gKwlpZiAoc2NoZWR1bGVyKQo+ICsJCXJldHVybiAwOwo+ICsK PiArCXNjaGVkdWxlciA9IGt6YWxsb2Moc2l6ZW9mKCpzY2hlZHVsZXIpLCBHRlBfS0VSTkVMKTsK PiArCWlmICghc2NoZWR1bGVyKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXNwaW5fbG9j a19pbml0KCZzY2hlZHVsZXItPmxvY2spOwo+ICsKPiArCWZvciAociA9IDA7IHIgPCBJOTE1X05V TV9SSU5HUzsgcisrKQo+ICsJCUlOSVRfTElTVF9IRUFEKCZzY2hlZHVsZXItPm5vZGVfcXVldWVb cl0pOwo+ICsKPiArCS8qIERlZmF1bHQgdHVuaW5nIHZhbHVlczogKi8KPiArCXNjaGVkdWxlci0+ cHJpb3JpdHlfbGV2ZWxfbWluwqDCoMKgwqDCoD0gLTEwMjM7Cj4gKwlzY2hlZHVsZXItPnByaW9y aXR5X2xldmVsX21heMKgwqDCoMKgwqA9IDEwMjM7Cj4gKwlzY2hlZHVsZXItPnByaW9yaXR5X2xl dmVsX3ByZWVtcHQgPSA5MDA7Cj4gKwlzY2hlZHVsZXItPm1pbl9mbHlpbmfCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoD0gMjsKClRoaXMga2luZCBvZiBpbmRlbnQgaXMgdG9sZXJhYmxlIGJlY2F1 c2UgaXQgaXMgYSBjb250YWluZWQgY29kZSBibG9jaywKYnV0IG5vdCBuZWVkZWQgZWl0aGVyLgoK PiArCj4gKwlkZXZfcHJpdi0+c2NoZWR1bGVyID0gc2NoZWR1bGVyOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpOTE1X2dlbmVyYXRlX2RlcGVuZGVuY2llcyhzdHJ1 Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKPiArCQkJCcKgwqDCoMKgwqDCoMKgc3RydWN0 IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlLAo+ICsJCQkJwqDCoMKgwqDCoMKgwqB1 aW50MzJfdCByaW5nKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfb2JqX2VudHJ5ICp0 aGlzLCAqdGhhdDsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyecKgwqAqdGVz dDsKPiArCWludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpLCBqOwo+ICsJYm9v bMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm91bmQ7Cj4gKwo+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeSh0ZXN0LCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmddLCBsaW5rKSB7Cj4g KwkJaWYgKEk5MTVfU1FTX0lTX0NPTVBMRVRFKHRlc3QpKQo+ICsJCQljb250aW51ZTsKPiArCj4g KwkJLyoKPiArCQnCoCogQmF0Y2hlcyBvbiB0aGUgc2FtZSByaW5nIGZvciB0aGUgc2FtZQo+ICsJ CcKgKiBjb250ZXh0IG11c3QgYmUga2VwdCBpbiBvcmRlci4KPiArCQnCoCovCj4gKwkJZm91bmQg PSAobm9kZS0+cGFyYW1zLmN0eCA9PSB0ZXN0LT5wYXJhbXMuY3R4KSAmJgo+ICsJCQkobm9kZS0+ cGFyYW1zLnJpbmcgPT0gdGVzdC0+cGFyYW1zLnJpbmcpOwo+ICsKPiArCQlpZiAoZm91bmQpCj4g KwkJCWdvdG8gZGVwZW5kczsKPiArCgpUaGlzIGlzIG5vdCBuZWVkZWQuCgo+ICsJCS8qCj4gKwkJ wqAqIEJhdGNoZXMgd29ya2luZyBvbiB0aGUgc2FtZSBvYmplY3RzIG11c3QKPiArCQnCoCogYmUg a2VwdCBpbiBvcmRlci4KPiArCQnCoCovCj4gKwkJZm9yIChpID0gMDsgKGkgPCBub2RlLT5udW1f b2JqcykgJiYgIWZvdW5kOyBpKyspIHsKCkFzIHRoZSB0ZXN0IGlzIGhlcmUgYWxyZWFkeSDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAtLS1eCgo+ICsJCQl0aGlzID0gbm9kZS0+ c2F2ZWRfb2JqZWN0cyArIGk7Cj4gKwo+ICsJCQlmb3IgKGogPSAwOyBqIDwgdGVzdC0+bnVtX29i anM7IGorKykgewo+ICsJCQkJdGhhdCA9IHRlc3QtPnNhdmVkX29iamVjdHMgKyBqOwo+ICsKPiAr CQkJCWlmICh0aGlzLT5vYmogIT0gdGhhdC0+b2JqKQo+ICsJCQkJCWNvbnRpbnVlOwoKSG93IGFi b3V0IFZNQXM/IFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG1hcHBpbmdzIHRvIGFuIG9iamVjdCwg aXNuJ3QgaXQKZW5vdWdoIHRvIGRlcGVuZCBvbiB0aGUgcmVxdWlyZWQgVk1BIGluc3RlYWQgb2Yg dGhlIHdob2xlIG9iamVjdD8KCj4gKwo+ICsJCQkJLyogT25seSBuZWVkIHRvIHdvcnJ5IGFib3V0 IHdyaXRlcyAqLwo+ICsJCQkJaWYgKHRoaXMtPnJlYWRfb25seSAmJiB0aGF0LT5yZWFkX29ubHkp Cj4gKwkJCQkJY29udGludWU7Cj4gKwo+ICsJCQkJZm91bmQgPSB0cnVlOwo+ICsJCQkJYnJlYWs7 Cj4gKwkJCX0KPiArCQl9Cj4gKwoKVGhlIGZvbGxvd2luZyBibG9jayBpcyBub3QgbmVlZGVkLgoK PiArCQlpZiAoIWZvdW5kKQo+ICsJCQljb250aW51ZTsKPiArCj4gK2RlcGVuZHM6CgpSYXRoZXIg bGlrZSB0aGlzLCBpbiBvcmRlciB0byBhdm9pZCBhIGdvdG8gbGFiZWw7CmlmIChmb3VuZCkgewou Li4KCgo+ICsJCW5vZGUtPmRlcF9saXN0W25vZGUtPm51bV9kZXBzXSA9IHRlc3Q7Cj4gKwkJbm9k ZS0+bnVtX2RlcHMrKzsKPiArCX0KPiArfQo+ICsKClBsZWFzZSBhZGQgYSBicmllZiBrZXJuZWxk b2MgYWJvdmUgZWFjaCBmdW5jdGlvbiBpbiB0aGUgaGVhZGVyLCBpdCdzCnJlcXVpcmVkLiBBZGRp bmcgaXQgdG8gbm9uLXRyaXZpYWwgaW5saW5lIGhlbHBlciBmdW5jdGlvbnMgdG9vIHdpbGwKbWFr ZSByZXZpZXdpbmcgbXVjaCBlYXNpZXIuCgo+ICtpbnQgaTkxNV9zY2hlZHVsZXJfcXVldWVfZXhl Y2J1ZmZlcihzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKnFlKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBxZS0+cGFyYW1zLmRldi0+ZGV2X3By aXZhdGU7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXLCoMKgwqAqc2NoZWR1bGVyID0gZGV2X3By aXYtPnNjaGVkdWxlcjsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3PCoMKgKnJpbmcgPSBxZS0+ cGFyYW1zLnJpbmc7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnnCoMKgKm5v ZGU7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnnCoMKgKnRlc3Q7Cj4gKwl1 bnNpZ25lZCBsb25nwqDCoMKgwqDCoMKgwqBmbGFnczsKPiArCWJvb2zCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG5vdF9mbHlpbmc7Cj4gKwlpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaSwgcjsKPiArCWludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpbmNvbXBsZXRlID0gMDsKPiArCj4gKwlXQVJOX09OKCFzY2hlZHVsZXIpOwo+ICsKClRoaXMg a2luZCBvZiBzaXR1YXRpb25zIHNob3VsZCBoYXZlIGEgYmUgYSBCVUdfT04sIGJlY2F1c2Ugc2No ZWR1bGVyCmJlaW5nIHplcm8gaXMgbGl0ZXJhbGx5IGdvaW5nIHRvIGNhdXNlIGFuIE9PUFMgaW4g dGhlIG5leHQgZGVyZWZlcmVuY2UKd2hpY2ggaXMgZ29pbmcgdG8gaGFwcGVuIHVuY29uZGl0aW9u YWxseS4gV0FSTiArIE9PUFMgaXMga2luZCBvZiB3aGF0CkJVR19PTiBzaG91bGQgYmUgdXNlZCBh dm9pZC4gQnV0IHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgYW55d2F5IGFmdGVyCnNjaGVkdWxlciBp cyBtYWRlIGEgZGF0YSBtZW1iZXIgb2YgZGV2X3ByaXYuCgo+ICsJaWYgKDEvKmk5MTUuc2NoZWR1 bGVyX292ZXJyaWRlICYgaTkxNV9zb19kaXJlY3Rfc3VibWl0Ki8pIHsKCkkgYXNzdW1lIHRoaXMg aXMgZ29pbmcgdG8gYmUgYWRkcmVzc2VkIGluIGEgZnV0dXJlIGNvbW1pdC4gQ291bGQgaGF2ZQpi ZWVuIGludHJvZHVjZWQgaW4gdGhpcyBwYXRjaCwgdG9vLgoKPiArCQlpbnQgcmV0Owo+ICsKPiAr CQlzY2hlZHVsZXItPmZsYWdzW3FlLT5wYXJhbXMucmluZy0+aWRdIHw9IGk5MTVfc2Zfc3VibWl0 dGluZzsKPiArCQlyZXQgPSBkZXZfcHJpdi0+Z3QuZXhlY2J1Zl9maW5hbCgmcWUtPnBhcmFtcyk7 Cj4gKwkJc2NoZWR1bGVyLT5mbGFnc1txZS0+cGFyYW1zLnJpbmctPmlkXSAmPSB+aTkxNV9zZl9z dWJtaXR0aW5nOwo+ICsKClRoZSBrZXJuZWxkb2Mgc2hvdWxkIG1lbnRpb24gbG9ja2luZyByZXF1 aXJlbWVudHMgb2YgdGhpcyBmdW5jdGlvbi4KCj4gKwkJLyoKPiArCQnCoCogRG9uJ3QgZG8gYW55 IGNsZWFuIHVwIG9uIGZhaWx1cmUgYmVjYXVzZSB0aGUgY2FsbGVyIHdpbGwKPiArCQnCoCogZG8g aXQgYWxsIGFueXdheS4KPiArCQnCoCovCj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsK PiArCj4gKwkJLyogRnJlZSBldmVyeXRoaW5nIHRoYXQgaXMgb3duZWQgYnkgdGhlIFFFIHN0cnVj dHVyZTogKi8KPiArCQlrZnJlZShxZS0+cGFyYW1zLmNsaXByZWN0cyk7Cj4gKwkJaWYgKHFlLT5w YXJhbXMuZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSkKPiArCQkJaTkxNV9n ZW1fZXhlY2J1ZmZfcmVsZWFzZV9iYXRjaF9vYmoocWUtPnBhcmFtcy5iYXRjaF9vYmopOwo+ICsK PiArCQlyZXR1cm4gMDsKCkFib3ZlIHBpZWNlIG9mIGNvZGUgbG9va3MgbGlrZSBpdHMgb3duIGZ1 bmN0aW9uLCBzbyBpdCBzaG91bGQgcHJvYmFibHkKYmUgb25lLgoKPiArCX0KPiArCj4gKwlub2Rl ID0ga21hbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbm9kZSkKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkqbm9kZSA9ICpxZTsKCkFueSByZWFzb24gd2UgY2Fu J3Qgc2ltcGx5IG1vdmUgb3duZXJzaGlwIG9mIHFlPyBJZiBub3QsIEknZCByYXRoZXIKbWFrZSBh IGNsb25lIGZ1bmN0aW9uCgo+ICsJSU5JVF9MSVNUX0hFQUQoJm5vZGUtPmxpbmspOwo+ICsJbm9k ZS0+c3RhdHVzID0gaTkxNV9zcXNfcXVldWVkOwo+ICsJbm9kZS0+c3RhbXDCoMKgPSBqaWZmaWVz Owo+ICsJaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uobm9kZS0+cGFyYW1zLnJlcXVlc3QpOwo+ ICsKPiArCS8qIE5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgaW5jb21wbGV0ZSBlbnRy aWVzIGluIHRoZSBsaXN0IGFzCj4gKwnCoCogdGhhdCB3aWxsIGJlIHRoZSBtYXhpbXVtIHNpemUg b2YgdGhlIGRlcGVuZGVuY3kgbGlzdC4KPiArCcKgKgo+ICsJwqAqIE5vdGUgdGhhdCB0aGUgYWxs b2NhdGlvbiBtdXN0IG5vdCBiZSBtYWRlIHdpdGggdGhlIHNwaW5sb2NrIGFjcXVpcmVkCj4gKwnC oCogYXMga21hbGxvYyBjYW4gc2xlZXAuIEhvd2V2ZXIsIHRoZSB1bmxvY2svcmVsb2NrIGlzIHNh ZmUgYmVjYXVzZSBubwo+ICsJwqAqIG5ldyBlbnRyaWVzIGNhbiBiZSBxdWV1ZWQgdXAgZHVyaW5n IHRoZSB1bmxvY2sgYXMgdGhlIGk5MTUgZHJpdmVyCj4gKwnCoCogbXV0ZXggaXMgc3RpbGwgaGVs ZC4gRW50cmllcyBjb3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QgYnV0IHRoYXQKPiArCcKg KiBqdXN0IG1lYW5zIHRoZSBkZXBfbGlzdCB3aWxsIGJlIG92ZXItYWxsb2NhdGVkIHdoaWNoIGlz IGZpbmUuCj4gKwnCoCovCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWR1bGVyLT5sb2NrLCBm bGFncyk7Cj4gKwlmb3IgKHIgPSAwOyByIDwgSTkxNV9OVU1fUklOR1M7IHIrKykgewo+ICsJCWxp c3RfZm9yX2VhY2hfZW50cnkodGVzdCwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyXSwgbGluaykg ewo+ICsJCQlpZiAoSTkxNV9TUVNfSVNfQ09NUExFVEUodGVzdCkpCj4gKwkJCQljb250aW51ZTsK PiArCj4gKwkJCWluY29tcGxldGUrKzsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogVGVtcG9yYXJp bHkgdW5sb2NrIHRvIGFsbG9jYXRlIG1lbW9yeTogKi8KPiArCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwoKSSdkIG1ha2UgdGhlIGFib3ZlIHBpZWNlIG9m IGNvZGUgYSBoZWxwZXIsIHRoZXNlIHN0YXRzIGFyZSB0byBiZQpjb3VudGVkIGZvciBkZWJ1Z2Zz IGFueXdheSwgdG9vPwoKPiArCWlmIChpbmNvbXBsZXRlKSB7Cj4gKwkJbm9kZS0+ZGVwX2xpc3Qg PSBrbWFsbG9jX2FycmF5KGluY29tcGxldGUsCj4gKwkJCQkJwqDCoMKgwqDCoMKgwqBzaXplb2Yo Km5vZGUtPmRlcF9saXN0KSwKPiArCQkJCQnCoMKgwqDCoMKgwqDCoEdGUF9LRVJORUwpOwo+ICsJ CWlmICghbm9kZS0+ZGVwX2xpc3QpIHsKPiArCQkJa2ZyZWUobm9kZSk7Cj4gKwkJCXJldHVybiAt RU5PTUVNOwo+ICsJCX0KPiArCX0gZWxzZQo+ICsJCW5vZGUtPmRlcF9saXN0ID0gTlVMTDsKPiAr Cj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7Cj4gKwlub2Rl LT5udW1fZGVwcyA9IDA7Cj4gKwo+ICsJaWYgKG5vZGUtPmRlcF9saXN0KSB7Cj4gKwkJZm9yIChy ID0gMDsgciA8IEk5MTVfTlVNX1JJTkdTOyByKyspCj4gKwkJCWk5MTVfZ2VuZXJhdGVfZGVwZW5k ZW5jaWVzKHNjaGVkdWxlciwgbm9kZSwgcik7Cj4gKwo+ICsJCVdBUk5fT04obm9kZS0+bnVtX2Rl cHMgPiBpbmNvbXBsZXRlKTsKCldvdWxkbid0IHRoaXMgY29uZGl0aW9uIGFnYWluIGxlYWQgdG8g YSBjcmFzaD8gSWYgc28sIHNob3VsZCBiZSBCVUdfT04KdG8gY2F1c2UgdGhhdCBjcmFzaCBhcyBl YXJseSBhcyBwb3NzaWJsZS4gV0FSTl9PTiBpcyBvbmx5IGdvb2QgaWYgdGhlcmUKaXMgYSB3YXkg b2YgY29waW5nIHdpdGggdGhlIHNpdHVhdGlvbiBhbmQgbm8gaW1taW5lbnQgc3lzdGVtIGNyYXNo IGlzCmJvdW5kIHRvIGhhcHBlbi4KCj4gKwl9Cj4gKwo+ICsJaWYgKG5vZGUtPnByaW9yaXR5ID4g c2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9tYXgpCj4gKwkJbm9kZS0+cHJpb3JpdHkgPSBzY2hl ZHVsZXItPnByaW9yaXR5X2xldmVsX21heDsKPiArCWVsc2UgaWYgKG5vZGUtPnByaW9yaXR5IDwg c2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9taW4pCj4gKwkJbm9kZS0+cHJpb3JpdHkgPSBzY2hl ZHVsZXItPnByaW9yaXR5X2xldmVsX21pbjsKPiArCgpUaGVyZSBpcyBjbGFtcF92YWwgbWFjcm8g aW4gbGludXgva2VybmVsLmggLgoKPiArCWlmICgobm9kZS0+cHJpb3JpdHkgPiAwKSAmJiBub2Rl LT5udW1fZGVwcykgewo+ICsJCWk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXBfY2xlYXIoc2No ZWR1bGVyKTsKPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IG5vZGUtPm51bV9kZXBzOyBpKyspCj4g KwkJCWk5MTVfc2NoZWR1bGVyX3ByaW9yaXR5X2J1bXAoc2NoZWR1bGVyLAo+ICsJCQkJCW5vZGUt PmRlcF9saXN0W2ldLCBub2RlLT5wcmlvcml0eSk7Cj4gKwl9Cj4gKwo+ICsJbGlzdF9hZGRfdGFp bCgmbm9kZS0+bGluaywgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nLT5pZF0pOwo+ICsKPiAr CW5vdF9mbHlpbmcgPSBpOTE1X3NjaGVkdWxlcl9jb3VudF9mbHlpbmcoc2NoZWR1bGVyLCByaW5n KSA8Cj4gKwkJCQkJCcKgc2NoZWR1bGVyLT5taW5fZmx5aW5nOwo+ICsKPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmIChub3RfZmx5 aW5nKQo+ICsJCWk5MTVfc2NoZWR1bGVyX3N1Ym1pdChyaW5nLCB0cnVlKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9mbHlfbm9kZShzdHJ1 Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG5vZGUtPnBhcmFtcy5kZXYtPmRldl9wcml2YXRlOwo+ ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVywqDCoMKgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hl ZHVsZXI7Cj4gKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzwqDCoCpyaW5nOwo+ICsKPiArCVdBUk5f T04oIXNjaGVkdWxlcik7Cj4gKwlXQVJOX09OKCFub2RlKTsKPiArCVdBUk5fT04obm9kZS0+c3Rh dHVzICE9IGk5MTVfc3FzX3BvcHBlZCk7CgpPdGhlciBzdGF0ZXMgaGFkIHRoZWlyIEk5MTVfU1FT X0lTXyogbWFjcm8sIHdoeSBzb21lIGRvbid0PwoKPiArCj4gKwlyaW5nID0gbm9kZS0+cGFyYW1z LnJpbmc7Cj4gKwo+ICsJLyoKPiArCcKgKiBBZGQgdGhlIG5vZGUgKHdoaWNoIHNob3VsZCBjdXJy ZW50bHkgYmUgaW4gc3RhdGUgcG9wcGVkKSB0byB0aGUKPiArCcKgKiBmcm9udCBvZiB0aGUgcXVl dWUuIFRoaXMgZW5zdXJlIHRoYXQgZmx5aW5nIG5vZGVzIGFyZSBhbHdheXMgaGVsZAo+ICsJwqAq IGluIGhhcmR3YXJlIHN1Ym1pc3Npb24gb3JkZXIuCj4gKwnCoCovCj4gKwlsaXN0X2FkZCgmbm9k ZS0+bGluaywgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nLT5pZF0pOwo+ICsKPiArCW5vZGUt PnN0YXR1cyA9IGk5MTVfc3FzX2ZseWluZzsKPiArCj4gKwlpZiAoIShzY2hlZHVsZXItPmZsYWdz W3JpbmctPmlkXSAmIGk5MTVfc2ZfaW50ZXJydXB0c19lbmFibGVkKSkgewo+ICsJCWJvb2zCoMKg wqDCoHN1Y2Nlc3MgPSB0cnVlOwo+ICsKPiArCQlzdWNjZXNzID0gcmluZy0+aXJxX2dldChyaW5n KTsKPiArCQlpZiAoc3VjY2VzcykKPiArCQkJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gfD0g aTkxNV9zZl9pbnRlcnJ1cHRzX2VuYWJsZWQ7Cj4gKwkJZWxzZQo+ICsJCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICogTm9kZXMgYXJl IGNvbnNpZGVyZWQgdmFsaWQgZGVwZW5kZW5jaWVzIGlmIHRoZXkgYXJlIHF1ZXVlZCBvbiBhbnkg cmluZyBvcgo+ICsgKiBpZiB0aGV5IGFyZSBpbiBmbGlnaHQgb24gYSBkaWZmZXJlbnQgcmluZy4g SW4gZmxpZ2h0IG9uIHRoZSBzYW1lIHJpbmcgaXMgbm8KPiArICogbG9uZ2VyIGludGVyZXN0aW5n IGZvciBub24tcHJlbXB0aXZlIG5vZGVzIGFzIHRoZSByaW5nIHNlcmlhbGlzZXMgZXhlY3V0aW9u Lgo+ICsgKiBGb3IgcHJlLWVtcHRpbmcgbm9kZXMsIGFsbCBpbiBmbGlnaHQgZGVwZW5kZW5jaWVz IGFyZSB2YWxpZCBhcyB0aGV5IG11c3Qgbm90Cj4gKyAqIGJlIGp1bXBlZCBieSB0aGUgYWN0IG9m IHByZS1lbXB0aW5nLgo+ICsgKgo+ICsgKiBBbnl0aGluZyB0aGF0IGlzIG5laXRoZXIgcXVldWVk IG5vciBmbHlpbmcgaXMgdW5pbnRlcmVzdGluZy4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgYm9v bCBpOTE1X3NjaGVkdWxlcl9pc19kZXBlbmRlbmN5X3ZhbGlkKAo+ICsJCQlzdHJ1Y3QgaTkxNV9z Y2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGUsIHVpbnQzMl90IGlkeCkKPiArewo+ICsJc3RydWN0 IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpkZXA7Cj4gKwo+ICsJZGVwID0gbm9kZS0+ZGVw X2xpc3RbaWR4XTsKPiArCWlmICghZGVwKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAo STkxNV9TUVNfSVNfUVVFVUVEKGRlcCkpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJaWYgKEk5 MTVfU1FTX0lTX0ZMWUlORyhkZXApKSB7Cj4gKwkJaWYgKG5vZGUtPnBhcmFtcy5yaW5nICE9IGRl cC0+cGFyYW1zLnJpbmcpCj4gKwkJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCXJldHVybiBm YWxzZTsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQzMl90IGk5MTVfc2NoZWR1bGVyX2NvdW50X2Zs eWluZyhzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKPiArCQkJCQnCoMKgwqDCoHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxl cl9xdWV1ZV9lbnRyeSAqbm9kZTsKPiArCXVpbnQzMl90wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZseWluZyA9IDA7Cj4gKwo+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeShub2RlLCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctPmlkXSwgbGluaykK ClRoaXMgbG9vcCBrZWVwcyBwb3BwaW5nIHVwLCBpdCBjb3VsZCB1c2UgYSBkZWZpbmUgc2ltaWxh ciB0byB0aGUgb25lcwppbiBpOTE1X2Rydi5oIDsKCiNkZWZpbmUgZm9yX2VhY2hfaHBkX3Bpbihf X3BpbikgXAoKPiArCQlpZiAoSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpKQo+ICsJCQlmbHlpbmcr KzsKPiArCj4gKwlyZXR1cm4gZmx5aW5nOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBBZGQgYSBwb3Bw ZWQgbm9kZSBiYWNrIGluIHRvIHRoZSBxdWV1ZS4gRm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhlIHJp bmcgd2FzCj4gKyAqIGh1bmcgd2hlbiBleGVjZmluYWwoKSB3YXMgY2FsbGVkIGFuZCB0aHVzIHRo ZSByaW5nIHN1Ym1pc3Npb24gbmVlZHMgdG8gYmUKPiArICogcmV0cmllZCBsYXRlci4KPiArICov Cj4gK3N0YXRpYyB2b2lkIGk5MTVfc2NoZWR1bGVyX25vZGVfcmVxdWV1ZShzdHJ1Y3QgaTkxNV9z Y2hlZHVsZXJfcXVldWVfZW50cnkgKm5vZGUpCj4gK3sKPiArCVdBUk5fT04oIW5vZGUpOwoKCWlm IChXQVJOX09OKCFub2RlKSkKCQlyZXR1cm47CgpPciByYXRoZXIgbm8gY2hlY2sgYXQgYWxsLCBp dCdzIGdvaW5nIHRvIGNyYXNoIGFueXdheSBldmVuIGluIHRoZQpjYWxsaW5nIGZ1bmN0aW9uIGlm IHRoZXJlJ3MgTlVMTCwgYW5kIGl0J3MgaW50ZXJuYWwgZnVuY3Rpb24uIEl0J3MKcmVsZXZhbnQg dG8gY2hlY2sgaWYgdGhlIHVzZXJzcGFjZS4KCj4gKwlXQVJOX09OKCFJOTE1X1NRU19JU19GTFlJ Tkcobm9kZSkpOwo+ICsKPiArCS8qIFNlcW5vIHdpbGwgYmUgcmVhc3NpZ25lZCBvbiByZWxhdW5j aCAqLwo+ICsJbm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vID0gMDsKPiArCW5vZGUtPnN0YXR1 cyA9IGk5MTVfc3FzX3F1ZXVlZDsKPiArfQo+ICsKPiArLyoKPiArICogR2l2ZSB1cCBvbiBhIG5v ZGUgY29tcGxldGVseS4gRm9yIGV4YW1wbGUsIGJlY2F1c2UgaXQgaXMgY2F1c2luZyB0aGUKPiAr ICogcmluZyB0byBoYW5nIG9yIGlzIHVzaW5nIHNvbWUgcmVzb3VyY2UgdGhhdCBubyBsb25nZXIg ZXhpc3RzLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgaTkxNV9zY2hlZHVsZXJfbm9kZV9raWxsKHN0 cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSkKPiArewo+ICsJV0FSTl9PTigh bm9kZSk7Cj4gKwlXQVJOX09OKEk5MTVfU1FTX0lTX0NPTVBMRVRFKG5vZGUpKTsKPiArCj4gKwlu b2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19kZWFkOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBBIHNlcXVl bmNlIG51bWJlciBoYXMgcG9wcGVkIG91dCBvZiB0aGUgaGFyZHdhcmUgYW5kIHRoZSByZXF1ZXN0 IGhhbmRsaW5nCj4gKyAqIGNvZGUgaGFzIG1hcHBlZCBpdCBiYWNrIHRvIGEgcmVxdWVzdCBhbmQg d2lsbCBtYXJrIHRoYXQgcmVxdWVzdCBjb21wbGV0ZS4KPiArICogSXQgYWxzbyBjYWxscyB0aGlz IGZ1bmN0aW9uIHRvIG5vdGlmeSB0aGUgc2NoZWR1bGVyIGFib3V0IHRoZSBjb21wbGV0aW9uCj4g KyAqIHNvIHRoZSBzY2hlZHVsZXIncyBub2RlIGNhbiBiZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHku Cj4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdCBpcyBzY2hlZHVsZXIgbWFuYWdlZCwg ZmFsc2UgaWYgbm90Lgo+ICsgKi8KPiArYm9vbCBpOTE1X3NjaGVkdWxlcl9ub3RpZnlfcmVxdWVz dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2wqDCoD0gdG9faTkxNShyZXEtPnJpbmctPmRldik7Cj4gKwlz dHJ1Y3QgaTkxNV9zY2hlZHVsZXLCoMKgwqAqc2NoZWR1bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxl cjsKPiArCS8qIFhYWDogTmVlZCB0byBtYXAgYmFjayBmcm9tIHJlcXVlc3QgdG8gbm9kZSAqLwo+ ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlID0gTlVMTDsKPiArCXVu c2lnbmVkIGxvbmfCoMKgwqDCoMKgwqDCoGZsYWdzOwo+ICsKPiArCWlmICghbm9kZSkKPiArCQly ZXR1cm4gZmFsc2U7CgpOb3Qgc28gc3VyZSBpZiBzbGljaW5nIHRoZSBzZXJpZXMgZG93biB0byBh biBleHRlbnQgdGhhdCBmdW5jdGlvbnMgYXJlCmltcG9zc2libGUgdG8gcmV2aWV3LCB3YXMgYSBn b29kIGlkZWEuIElkZWEgaXMgdG8gc2xpY2UgdGhpbmdzIGRvd24sIHRvCnJldmlld2FibGUgcGll Y2VzLiBJdCdzIGhhcmQgdG8gcHJlZGljdCBvciBrZWVwIGxvb2tpbmcgZm9yd2FyZCB0aGUKc2Vy aWVzIHdoYXQgaXMgZ29pbmcgdG8gY29tZS4KCj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnNj aGVkdWxlci0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCVdBUk5fT04oIUk5MTVfU1FTX0lTX0ZMWUlO Ryhub2RlKSk7Cj4gKwo+ICsJLyogTm9kZSB3YXMgaW4gZmxpZ2h0IHNvIG1hcmsgaXQgYXMgY29t cGxldGUuICovCj4gKwlpZiAocmVxLT5jYW5jZWxsZWQpCj4gKwkJbm9kZS0+c3RhdHVzID0gaTkx NV9zcXNfZGVhZDsKPiArCWVsc2UKPiArCQlub2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19jb21wbGV0 ZTsKPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdz KTsKPiArCj4gKwkvKgo+ICsJwqAqIFhYWDogSWYgdGhlIGluLWZsaWdodCBsaXN0IGlzIG5vdyBl bXB0eSB0aGVuIG5ldyB3b3JrIHNob3VsZCBiZQo+ICsJwqAqIHN1Ym1pdHRlZC4gSG93ZXZlciwg dGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dAo+ICsJwqAqIGFu ZCB0aHVzIGNhbm5vdCBhY3F1aXJlIG11dGV4IGxvY2tzIGFuZCBvdGhlciBzdWNoIHRoaW5ncyB0 aGF0IGFyZQo+ICsJwqAqIG5lY2Vzc2FyeSBmb3IgZnJlc2ggc3VibWlzc2lvbi4KPiArCcKgKi8K PiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiAraW50IGk5MTVfc2NoZWR1bGVyX3JlbW92 ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGk5 MTVfc2NoZWR1bGVywqDCoMKgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7Cj4gKwlz dHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnnCoMKgKm5vZGUsICpub2RlX25leHQ7Cj4g Kwl1bnNpZ25lZCBsb25nwqDCoMKgwqDCoMKgwqBmbGFnczsKPiArCWludMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBmbHlpbmcgPSAwLCBxdWV1ZWQgPSAwOwo+ICsJaW50wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IDA7Cj4gKwlib29swqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkb19zdWJtaXQ7Cj4gKwl1aW50MzJfdMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG1pbl9zZXFubzsKPiArCXN0cnVjdCBsaXN0X2hlYWTCoMKgwqDCoHJlbW92ZTsK PiArCj4gKwlpZiAobGlzdF9lbXB0eSgmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctPmlkXSkp Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkdWxlci0+bG9j aywgZmxhZ3MpOwo+ICsKPiArCS8qIC9pOTE1X3NjaGVkdWxlcl9kdW1wX2xvY2tlZChyaW5nLCAi cmVtb3ZlL3ByZSIpOy8gKi8KPiArCgpUaGlzIHNob3VsZCBub3QgYmUgaGVyZSBhdCBhbGwuCgo+ ICsJLyoKPiArCcKgKiBJbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3lzdGVtIGlzIGlkbGUsIHN0YXJ0 aW5nICdtaW5fc2Vxbm8nIGZyb20gYSBiaWcKPiArCcKgKiBudW1iZXIgd2lsbCBjYXVzZSBhbGwg bm9kZXMgdG8gYmUgcmVtb3ZlZCBhcyB0aGV5IGFyZSBub3cgYmFjayB0bwo+ICsJwqAqIGJlaW5n IGluLW9yZGVyLiBIb3dldmVyLCB0aGlzIHdpbGwgYmUgYSBwcm9ibGVtIGlmIHRoZSBsYXN0IG9u ZSB0bwo+ICsJwqAqIGNvbXBsZXRlIHdhcyBhY3R1YWxseSBvdXQtb2Ytb3JkZXIgYXMgdGhlIHJp bmcgc2Vxbm8gdmFsdWUgd2lsbCBiZQo+ICsJwqAqIGxvd2VyIHRoYW4gb25lIG9yIG1vcmUgY29t cGxldGVkIGJ1ZmZlcnMuIFRodXMgY29kZSBsb29raW5nIGZvciB0aGUKPiArCcKgKiBjb21wbGV0 aW9uIG9mIHNhaWQgYnVmZmVycyB3aWxsIHdhaXQgZm9yZXZlci4KPiArCcKgKiBJbnN0ZWFkLCB1 c2UgdGhlIGhhcmR3YXJlIHNlcW5vIGFzIHRoZSBzdGFydGluZyBwb2ludC4gVGhpcyBtZWFucwo+ ICsJwqAqIHRoYXQgc29tZSBidWZmZXJzIG1pZ2h0IGJlIGtlcHQgYXJvdW5kIGV2ZW4gaW4gYSBj b21wbGV0ZWx5IGlkbGUKPiArCcKgKiBzeXN0ZW0gYnV0IGl0IHNob3VsZCBndWFyYW50ZWUgdGhh dCBuby1vbmUgZXZlciBnZXRzIGNvbmZ1c2VkIHdoZW4KPiArCcKgKiB3YWl0aW5nIGZvciBidWZm ZXIgY29tcGxldGlvbi4KPiArCcKgKi8KPiArCW1pbl9zZXFubyA9IHJpbmctPmdldF9zZXFubyhy aW5nLCB0cnVlKTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZzY2hlZHVsZXIt Pm5vZGVfcXVldWVbcmluZy0+aWRdLCBsaW5rKSB7Cj4gKwkJaWYgKEk5MTVfU1FTX0lTX1FVRVVF RChub2RlKSkKPiArCQkJcXVldWVkKys7Cj4gKwkJZWxzZSBpZiAoSTkxNV9TUVNfSVNfRkxZSU5H KG5vZGUpKQo+ICsJCQlmbHlpbmcrKzsKPiArCQllbHNlIGlmIChJOTE1X1NRU19JU19DT01QTEVU RShub2RlKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmIChub2RlLT5wYXJhbXMucmVxdWVz dC0+c2Vxbm8gPT0gMCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmICghaTkxNV9zZXFub19w YXNzZWQobm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vLCBtaW5fc2Vxbm8pKQo+ICsJCQltaW5f c2Vxbm8gPSBub2RlLT5wYXJhbXMucmVxdWVzdC0+c2Vxbm87Cj4gKwl9CgpDb3VsZG4ndCB0aGVz ZSB2YWx1ZXMgYmUga2VwdCBjYWNoZWQsIGluc3RlYWQgb2YgY291bnRpbmcgdGhlbSBhdCBlYWNo CmZ1bmN0aW9uPwoKPiArCj4gKwlJTklUX0xJU1RfSEVBRCgmcmVtb3ZlKTsKPiArCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZShub2RlLCBub2RlX25leHQsICZzY2hlZHVsZXItPm5vZGVfcXVldWVb cmluZy0+aWRdLCBsaW5rKSB7Cj4gKwkJLyoKPiArCQnCoCogT25seSByZW1vdmUgY29tcGxldGVk IG5vZGVzIHdoaWNoIGhhdmUgYSBsb3dlciBzZXFubyB0aGFuCj4gKwkJwqAqIGFsbCBwZW5kaW5n IG5vZGVzLiBXaGlsZSB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgdGhlCj4gKwkJwqAqIHJp bmcncyBzZXFubyBjb3VudGluZyBiYWNrd2FyZHMsIGFsbCBoaWdoZXIgYnVmZmVycyBtdXN0Cj4g KwkJwqAqIGJlIHJlbWVtYmVyZWQgc28gdGhhdCB0aGUgJ2k5MTVfc2Vxbm9fcGFzc2VkKCknIHRl c3QgY2FuCj4gKwkJwqAqIHJlcG9ydCB0aGF0IHRoZXkgaGF2ZSBpbiBmYWN0IHBhc3NlZC4KPiAr CQnCoCoKPiArCQnCoCogTkI6IFRoaXMgaXMgbm90IHRydWUgZm9yICdkZWFkJyBub2Rlcy4gVGhl IEdQVSByZXNldCBjYXVzZXMKPiArCQnCoCogdGhlIHNvZnR3YXJlIHNlcW5vIHRvIHJlc3RhcnQg ZnJvbSBpdHMgaW5pdGlhbCB2YWx1ZS4gVGh1cwo+ICsJCcKgKiB0aGUgZGVhZCBub2RlcyBtdXN0 IGJlIHJlbW92ZWQgZXZlbiB0aG91Z2ggdGhlaXIgc2Vxbm8gdmFsdWVzCj4gKwkJwqAqIGFyZSBw b3RlbnRpYWxseSB2YXN0bHkgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IHJpbmcgc2Vxbm8uCj4g KwkJwqAqLwo+ICsJCWlmICghSTkxNV9TUVNfSVNfQ09NUExFVEUobm9kZSkpCj4gKwkJCWNvbnRp bnVlOwo+ICsKPiArCQlpZiAobm9kZS0+c3RhdHVzICE9IGk5MTVfc3FzX2RlYWQpIHsKPiArCQkJ aWYgKGk5MTVfc2Vxbm9fcGFzc2VkKG5vZGUtPnBhcmFtcy5yZXF1ZXN0LT5zZXFubywgbWluX3Nl cW5vKSAmJgo+ICsJCQnCoMKgwqDCoChub2RlLT5wYXJhbXMucmVxdWVzdC0+c2Vxbm8gIT0gbWlu X3NlcW5vKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJbGlzdF9kZWwoJm5vZGUt PmxpbmspOwo+ICsJCWxpc3RfYWRkKCZub2RlLT5saW5rLCAmcmVtb3ZlKTsKPiArCj4gKwkJLyog U3RyaXAgdGhlIGRlcGVuZGVuY3kgaW5mbyB3aGlsZSB0aGUgbXV0ZXggaXMgc3RpbGwgbG9ja2Vk ICovCj4gKwkJaTkxNV9zY2hlZHVsZXJfcmVtb3ZlX2RlcGVuZGVudChzY2hlZHVsZXIsIG5vZGUp Owo+ICsKPiArCQljb250aW51ZTsKPiArCX0KPiArCj4gKwkvKgo+ICsJwqAqIFJlbGVhc2UgdGhl IGludGVycnVwdCByZWZlcmVuY2UgY291bnQgaWYgdGhlcmUgYXJlIG5vIGxvbmdlciBhbnkKPiAr CcKgKiBub2RlcyB0byB3b3JyeSBhYm91dC4KPiArCcKgKi8KPiArCWlmICghZmx5aW5nICYmICFx dWV1ZWQgJiYKPiArCcKgwqDCoMKgKHNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdICYgaTkxNV9z Zl9pbnRlcnJ1cHRzX2VuYWJsZWQpKSB7Cj4gKwkJcmluZy0+aXJxX3B1dChyaW5nKTsKPiArCQlz Y2hlZHVsZXItPmZsYWdzW3JpbmctPmlkXSAmPSB+aTkxNV9zZl9pbnRlcnJ1cHRzX2VuYWJsZWQ7 Cj4gKwl9Cj4gKwo+ICsJLyogTGF1bmNoIG1vcmUgcGFja2V0cyBub3c/ICovCj4gKwlkb19zdWJt aXQgPSAocXVldWVkID4gMCkgJiYgKGZseWluZyA8IHNjaGVkdWxlci0+bWluX2ZseWluZyk7Cj4g Kwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7Cj4g Kwo+ICsJaWYgKCFkb19zdWJtaXQgJiYgbGlzdF9lbXB0eSgmcmVtb3ZlKSkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiArCW11dGV4X2xvY2soJnJpbmctPmRldi0+c3RydWN0X211dGV4KTsKPiArCj4g KwlpZiAoZG9fc3VibWl0KQo+ICsJCXJldCA9IGk5MTVfc2NoZWR1bGVyX3N1Ym1pdChyaW5nLCB0 cnVlKTsKCkNvbmZ1c2luZyB0byBoYXZlIHRoaXMgYXQgYSByZW1vdmUgZnVuY3Rpb24uIEZ1bmN0 aW9uIG5hbWluZyBuZWVkcyB0bwpiZSByZWNvbnNpZGVyZWQgb3IgbW92ZWQgb3V0IGZyb20gaGVy ZS4KCj4gKwo+ICsJd2hpbGUgKCFsaXN0X2VtcHR5KCZyZW1vdmUpKSB7Cj4gKwkJbm9kZSA9IGxp c3RfZmlyc3RfZW50cnkoJnJlbW92ZSwgdHlwZW9mKCpub2RlKSwgbGluayk7Cj4gKwkJbGlzdF9k ZWwoJm5vZGUtPmxpbmspOwo+ICsKPiArCQkvKgo+ICsJCcKgKiBUaGUgYmF0Y2ggYnVmZmVyIG11 c3QgYmUgdW5waW5uZWQgYmVmb3JlIGl0IGlzIHVucmVmZXJlbmNlZAo+ICsJCcKgKiBvdGhlcndp c2UgdGhlIHVucGluIGZhaWxzIHdpdGggYSBtaXNzaW5nIHZtYSE/Cj4gKwkJwqAqL3ByaW9yaXR5 X2J1bXBfY2xlYXIKPiArCQlpZiAobm9kZS0+cGFyYW1zLmRpc3BhdGNoX2ZsYWdzICYgSTkxNV9E SVNQQVRDSF9TRUNVUkUpCj4gKwkJCWk5MTVfZ2VtX2V4ZWNidWZmX3JlbGVhc2VfYmF0Y2hfb2Jq KG5vZGUtPnBhcmFtcy5iYXRjaF9vYmopOwo+ICsKPiArCQkvKiBGcmVlIGV2ZXJ5dGhpbmcgdGhh dCBpcyBvd25lZCBieSB0aGUgbm9kZTogKi8KPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJl bmNlKG5vZGUtPnBhcmFtcy5yZXF1ZXN0KTsKPiArCQlrZnJlZShub2RlLT5wYXJhbXMuY2xpcHJl Y3RzKTsKPiArCQlrZnJlZShub2RlLT5kZXBfbGlzdCk7Cj4gKwkJa2ZyZWUobm9kZSk7Cj4gKwl9 Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZyaW5nLT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaTkxNV9zY2hlZHVsZXJfcHJpb3Jp dHlfYnVtcF9jbGVhcihzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlcikKPiArewo+ICsJ c3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlOwo+ICsJaW50IGk7Cj4gKwo+ ICsJLyoKPiArCcKgKiBFbnN1cmUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGRvbid0IGNhdXNlIHBy b2JsZW1zIGFuZCB0aGF0IGEgYnVtcAo+ICsJwqAqIGJ5IG9iamVjdCB1c2FnZSBvbmx5IGJ1bXBz IGVhY2ggdXNpbmcgYnVmZmVyIG9uY2U6Cj4gKwnCoCovCj4gKwlmb3IgKGkgPSAwOyBpIDwgSTkx NV9OVU1fUklOR1M7IGkrKykgewo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVk dWxlci0+bm9kZV9xdWV1ZVtpXSwgbGluaykKPiArCQkJbm9kZS0+YnVtcGVkID0gZmFsc2U7Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcChz dHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKPiArCQkJCXN0cnVjdCBpOTE1X3NjaGVk dWxlcl9xdWV1ZV9lbnRyeSAqdGFyZ2V0LAo+ICsJCQkJdWludDMyX3QgYnVtcCkKPiArewo+ICsJ dWludDMyX3QgbmV3X3ByaW9yaXR5Owo+ICsJaW50wqDCoMKgwqDCoMKgaSwgY291bnQ7Cj4gKwo+ ICsJaWYgKHRhcmdldC0+cHJpb3JpdHkgPj0gc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9tYXgp Cj4gKwkJcmV0dXJuIDE7Cj4gKwo+ICsJaWYgKHRhcmdldC0+YnVtcGVkKQo+ICsJCXJldHVybiAw Owo+ICsKPiArCW5ld19wcmlvcml0eSA9IHRhcmdldC0+cHJpb3JpdHkgKyBidW1wOwo+ICsJaWYg KChuZXdfcHJpb3JpdHkgPD0gdGFyZ2V0LT5wcmlvcml0eSkgfHwKPiArCcKgwqDCoMKgKG5ld19w cmlvcml0eSA+IHNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4KSkKPiArCQl0YXJnZXQtPnBy aW9yaXR5ID0gc2NoZWR1bGVyLT5wcmlvcml0eV9sZXZlbF9tYXg7Cj4gKwllbHNlCj4gKwkJdGFy Z2V0LT5wcmlvcml0eSA9IG5ld19wcmlvcml0eTsKPiArCj4gKwljb3VudCA9IDE7Cj4gKwl0YXJn ZXQtPmJ1bXBlZCA9IHRydWU7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHRhcmdldC0+bnVtX2Rl cHM7IGkrKykgewo+ICsJCWlmICghdGFyZ2V0LT5kZXBfbGlzdFtpXSkKPiArCQkJY29udGludWU7 Cj4gKwo+ICsJCWlmICh0YXJnZXQtPmRlcF9saXN0W2ldLT5idW1wZWQpCj4gKwkJCWNvbnRpbnVl Owo+ICsKPiArCQljb3VudCArPSBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wKHNjaGVkdWxl ciwKPiArCQkJCQkJwqDCoMKgwqDCoMKgdGFyZ2V0LT5kZXBfbGlzdFtpXSwKPiArCQkJCQkJwqDC oMKgwqDCoMKgYnVtcCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGk5MTVfc2NoZWR1bGVyX3BvcF9mcm9tX3F1ZXVlX2xvY2tlZChzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCQkJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2Vu dHJ5ICoqcG9wX25vZGUsCj4gKwkJCQl1bnNpZ25lZCBsb25nICpmbGFncykKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqZGV2X3ByaXYgPSBy aW5nLT5kZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVywqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2NoZWR1bGVyOwo+ICsJ c3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5wqDCoCpiZXN0Owo+ICsJc3RydWN0IGk5 MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5wqDCoCpub2RlOwo+ICsJaW50wqDCoMKgwqDCoHJldDsK PiArCWludMKgwqDCoMKgwqBpOwo+ICsJYm9vbAlhbnlfcXVldWVkOwo+ICsJYm9vbAloYXNfbG9j YWwsIGhhc19yZW1vdGUsIG9ubHlfcmVtb3RlOwo+ICsKPiArCSpwb3Bfbm9kZSA9IE5VTEw7Cj4g KwlyZXQgPSAtRU5PREFUQTsKPiArCj4gKwlhbnlfcXVldWVkID0gZmFsc2U7Cj4gKwlvbmx5X3Jl bW90ZSA9IGZhbHNlOwo+ICsJYmVzdCA9IE5VTEw7CgpUaGVzZSBzaG91bGQganVzdCBiZSBpbml0 aWFsaXplZCBpbi1wbGFjZS4gQnV0IGxvb2tpbmcgYXQgdGhlIGNvZGUKZm9yd2FyZC7CoAoKPiAr Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcmlu Zy0+aWRdLCBsaW5rKSB7Cj4gKwkJaWYgKCFJOTE1X1NRU19JU19RVUVVRUQobm9kZSkpCj4gKwkJ CWNvbnRpbnVlOwo+ICsJCWFueV9xdWV1ZWQgPSB0cnVlOwo+ICsKPiArCQloYXNfbG9jYWzCoMKg PSBmYWxzZTsKPiArCQloYXNfcmVtb3RlID0gZmFsc2U7Cj4gKwkJZm9yIChpID0gMDsgaSA8IG5v ZGUtPm51bV9kZXBzOyBpKyspIHsKPiArCQkJaWYgKCFpOTE1X3NjaGVkdWxlcl9pc19kZXBlbmRl bmN5X3ZhbGlkKG5vZGUsIGkpKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQlpZiAobm9kZS0+ ZGVwX2xpc3RbaV0tPnBhcmFtcy5yaW5nID09IG5vZGUtPnBhcmFtcy5yaW5nKQo+ICsJCQkJaGFz X2xvY2FsID0gdHJ1ZTsKPiArCQkJZWxzZQo+ICsJCQkJaGFzX3JlbW90ZSA9IHRydWU7Cj4gKwkJ fQo+ICsKPiArCQlpZiAoaGFzX3JlbW90ZSAmJiAhaGFzX2xvY2FsKQo+ICsJCQlvbmx5X3JlbW90 ZSA9IHRydWU7Cj4gKwo+ICsJCWlmICghaGFzX2xvY2FsICYmICFoYXNfcmVtb3RlKSB7Cj4gKwkJ CWlmICghYmVzdCB8fAo+ICsJCQnCoMKgwqDCoChub2RlLT5wcmlvcml0eSA+IGJlc3QtPnByaW9y aXR5KSkKPiArCQkJCWJlc3QgPSBub2RlOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoYmVzdCkg ewo+ICsJCWxpc3RfZGVsKCZiZXN0LT5saW5rKTsKPiArCj4gKwkJSU5JVF9MSVNUX0hFQUQoJmJl c3QtPmxpbmspOwo+ICsJCWJlc3QtPnN0YXR1c8KgwqA9IGk5MTVfc3FzX3BvcHBlZDsKPiArCj4g KwkJcmV0ID0gMDsKPiArCX0gZWxzZSB7Cj4gKwkJLyogQ2FuIG9ubHkgZ2V0IGhlcmUgaWY6Cj4g KwkJwqAqIChhKSB0aGVyZSBhcmUgbm8gYnVmZmVycyBpbiB0aGUgcXVldWUKPiArCQnCoCogKGIp IGFsbCBxdWV1ZWQgYnVmZmVycyBhcmUgZGVwZW5kZW50IG9uIG90aGVyIGJ1ZmZlcnMKPiArCQnC oCrCoMKgwqDCoMKgZS5nLiBvbiBhIGJ1ZmZlciB0aGF0IGlzIGluIGZsaWdodCBvbiBhIGRpZmZl cmVudCByaW5nCj4gKwkJwqAqLwo+ICsJCWlmIChvbmx5X3JlbW90ZSkgewo+ICsJCQkvKiBUaGUg b25seSBkZXBlbmRlbnQgYnVmZmVycyBhcmUgb24gYW5vdGhlciByaW5nLiAqLwo+ICsJCQlyZXQg PSAtRUFHQUlOOwo+ICsJCX0gZWxzZSBpZiAoYW55X3F1ZXVlZCkgewo+ICsJCQkvKiBJdCBzZWVt cyB0aGF0IHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSB3cm9uZyEgKi8KPiArCQkJRFJNX0VS Uk9SKCJCcm9rZW4gZGVwZW5kZW5jeSB0cmFja2luZyBvbiByaW5nICVkIVxuIiwKPiArCQkJCcKg wqAoaW50KSByaW5nLT5pZCk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIGk5MTVfc2NoZWR1bGVy X2R1bXBfcXVldWVfcG9wKHJpbmcsIGJlc3QpOyAqLwo+ICsKPiArCSpwb3Bfbm9kZSA9IGJlc3Q7 Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk5MTVfc2NoZWR1bGVyX3N1 Ym1pdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCBib29sIHdhc19sb2NrZWQpCj4gK3sK PiArCXN0cnVjdCBkcm1fZGV2aWNlwqDCoMKgKmRldiA9IHJpbmctPmRldjsKPiArCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXLCoMKgwqAqc2NoZWR1bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKPiAr CXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyecKgwqAqbm9kZTsKPiArCXVuc2lnbmVk IGxvbmfCoMKgwqDCoMKgwqDCoGZsYWdzOwo+ICsJaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldCA9IDAsIGNvdW50ID0gMDsKPiArCj4gKwlpZiAoIXdhc19sb2NrZWQpIHsK PiArCQlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZShkZXYpOwo+ICsJCWlmIChy ZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwoKSSBkb24ndCByZWFsbHkgZmFuY3kgdGhp cyBjb25zdHJ1Y3QuIFNob3VsZCBiZSBtb3ZlZCBvdXRzaWRlIG9mIHRoaXMKZnVuY3Rpb24gZm9y IHByb3BlciBsb2NrZGVwIHRyYWNraW5nLgoKPiArCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgm ZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWR1bGVy LT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJLyogRmlyc3QgdGltZSBhcm91bmQsIGNvbXBsYWluIGlm IGFueXRoaW5nIHVuZXhwZWN0ZWQgb2NjdXJzOiAqLwo+ICsJcmV0ID0gaTkxNV9zY2hlZHVsZXJf cG9wX2Zyb21fcXVldWVfbG9ja2VkKHJpbmcsICZub2RlLCAmZmxhZ3MpOwo+ICsJaWYgKHJldCkg ewo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwo+ ICsKPiArCQlpZiAoIXdhc19sb2NrZWQpCj4gKwkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwo+ICsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKCkRyb3BwaW5nIHRoZSB3YXNf bG9ja2VkIHN0dWZmLCB0aGlzIHNob3VsZCBiZWNvbWUgYSBwcm9wZXIgZ290byBlcnJvcgpsYWJl bC4gZS5nLiBvdXRfdW5sb2NrCgo+ICsJZG8gewo+ICsJCVdBUk5fT04oIW5vZGUpOwo+ICsJCVdB Uk5fT04obm9kZS0+cGFyYW1zLnJpbmcgIT0gcmluZyk7Cj4gKwkJV0FSTl9PTihub2RlLT5zdGF0 dXMgIT0gaTkxNV9zcXNfcG9wcGVkKTsKPiArCQljb3VudCsrOwo+ICsKPiArCQkvKgo+ICsJCcKg KiBUaGUgY2FsbCB0byBwb3AgYWJvdmUgd2lsbCBoYXZlIHJlbW92ZWQgdGhlIG5vZGUgZnJvbSB0 aGUKPiArCQnCoCogbGlzdC4gU28gYWRkIGl0IGJhY2sgaW4gYW5kIG1hcmsgaXQgYXMgaW4gZmxp Z2h0Lgo+ICsJCcKgKi8KPiArCQlpOTE1X3NjaGVkdWxlcl9mbHlfbm9kZShub2RlKTsKCldoeSBk byB3ZSB3YW50IHRvIHB1bGwgYW4gb2JqZWN0IG91dCBvZiB0aGUgbGlzdCBpbnNpZGUgc3BpbiBs b2NrIGFuZApwdXNoIGl0IGJhY2sgaW1tZWRpYXRlbHkgaW4gb3VyIGNyaXRpY2FsIGNvZGUgcGF0 aD8gU2VlbXMgbGlrZSBhIHdhc3RlCmZvciBubyBvYnZpb3VzIGdhaW4gYXQgdGhpcyBwb2ludC4g V2h5IGRvIG5vdCB3ZSByYXRoZXIganVzdCBzZWxlY3QgYW4KZW50cnkgYW5kIG1vZGlmeSBpdCBp bi1wbGFjZSwgaWYgaXQncyBnb2luZyB0byBzdGF5IGluIHRoZSBzYW1lIHF1ZXVlCmFueXdheS4K Cj4gKwo+ICsJCXNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+aWRdIHw9IGk5MTVfc2Zfc3VibWl0dGlu ZzsKPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsK PiArCQlyZXQgPSBkZXZfcHJpdi0+Z3QuZXhlY2J1Zl9maW5hbCgmbm9kZS0+cGFyYW1zKTsKPiAr CQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7Cj4gKwkJc2NoZWR1 bGVyLT5mbGFnc1tyaW5nLT5pZF0gJj0gfmk5MTVfc2Zfc3VibWl0dGluZzsKPiArCj4gKwkJaWYg KHJldCkgewo+ICsJCQlpbnQgcmVxdWV1ZSA9IDE7CgpNdWx0aXB1cnBvc2UgdmFyaWFibGUsIG5v dCByZWFsbHkgYSBnb29kIGlkZWEuIEFuZCBhcyBjb21tZW50ZWQKZnVydGhlciwgc2hvdWxkIG5v dCBleGlzdCBhdCBhbGwuCgo+ICsKPiArCQkJLyoKPiArCQkJwqAqIE9oIGRlYXIhIEVpdGhlciB0 aGUgbm9kZSBpcyBicm9rZW4gb3IgdGhlIHJpbmcgaXMKPiArCQkJwqAqIGJ1c3kuIFNvIG5lZWQg dG8ga2lsbCB0aGUgbm9kZSBvciByZXF1ZXVlIGl0IGFuZCB0cnkKPiArCQkJwqAqIGFnYWluIGxh dGVyIGFzIGFwcHJvcHJpYXRlLgo+ICsJCQnCoCovCj4gKwo+ICsJCQlzd2l0Y2ggKC1yZXQpIHsK PiArCQkJY2FzZSBFTk9ERVY6Cj4gKwkJCWNhc2UgRU5PRU5UOgo+ICsJCQkJLyogRmF0YWwgZXJy b3JzLiBLaWxsIHRoZSBub2RlLiAqLwo+ICsJCQkJcmVxdWV1ZSA9IC0xOwo+ICsJCQlicmVhazsK CiJicmVhayIgaW5kZW50IGlzIHdyb25nLgoKPiArCj4gKwkJCWNhc2UgRUFHQUlOOgo+ICsJCQlj YXNlIEVCVVNZOgo+ICsJCQljYXNlIEVJTzoKPiArCQkJY2FzZSBFTk9NRU06Cj4gKwkJCWNhc2Ug RVJFU1RBUlRTWVM6Cj4gKwkJCWNhc2UgRUlOVFI6Cj4gKwkJCQkvKiBTdXBwb3NlZGx5IHJlY292 ZXJhYmxlIGVycm9ycy4gKi8KPiArCQkJYnJlYWs7Cj4gKwo+ICsJCQlkZWZhdWx0Ogo+ICsJCQkJ LyoKPiArCQkJCcKgKiBBc3N1bWUgdGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCBob3BlCj4g KwkJCQnCoCogZm9yIHRoZSBiZXN0Lgo+ICsJCQkJwqAqLwo+ICsJCQkJRFJNX0RFQlVHX0RSSVZF UigiPCVzPiBHb3QgdW5leHBlY3RlZCBlcnJvciBmcm9tIGV4ZWNmaW5hbCgpOiAlZCFcbiIsCj4g KwkJCQkJCcKgcmluZy0+bmFtZSwgcmV0KTsKClRoZXJlJ3MgTUlTU0lOR19DQVNFIG1hY3JvLCBz aG91bGQgdXNlIGl0LgoKPiArCQkJYnJlYWs7Cj4gKwkJCX0KPiArCgpKdXN0IG1vdmUgdGhlIGNv ZGUgYmVsb3cgdGhpcyBwb2ludCB0byB0aGUgc3dpdGNoLCBubyBwb2ludCBoYXZpbmcgYQpzd2l0 Y2ggdG8gY2F0ZWdvcml6ZSB5b3VyIG9wdGlvbnMgYW5kIHRoZW4gZG9pbmcgYnVuY2ggb2YgaWZz IHRvCmV4ZWN1dGUgY29kZSB0aGF0IGNvdWxkIGJlIGluIHN3aXRjaC4KCj4gKwkJCS8qCj4gKwkJ CcKgKiBDaGVjayB0aGF0IHRoZSB3YXRjaGRvZy9yZXNldCBjb2RlIGhhcyBub3QgbnVrZWQKPiAr CQkJwqAqIHRoZSBub2RlIHdoaWxlIHdlIHdlcmVuJ3QgbG9va2luZzoKPiArCQkJwqAqLwo+ICsJ CQlpZiAobm9kZS0+c3RhdHVzID09IGk5MTVfc3FzX2RlYWQpCj4gKwkJCQlyZXF1ZXVlID0gMDsK PiArCj4gKwkJCWlmIChyZXF1ZXVlID09IDEpIHsKPiArCQkJCWk5MTVfc2NoZWR1bGVyX25vZGVf cmVxdWV1ZShub2RlKTsKPiArCQkJCS8qCj4gKwkJCQnCoCogTm8gcG9pbnQgc3Bpbm5pbmcgaWYg dGhlIHJpbmcgaXMgY3VycmVudGx5Cj4gKwkJCQnCoCogdW5hdmFpbGFibGUgc28ganVzdCBnaXZl IHVwIGFuZCBjb21lIGJhY2sKPiArCQkJCcKgKiBsYXRlci4KPiArCQkJCcKgKi8KPiArCQkJCWJy ZWFrOwo+ICsJCQl9IGVsc2UgaWYgKHJlcXVldWUgPT0gLTEpCj4gKwkJCQlpOTE1X3NjaGVkdWxl cl9ub2RlX2tpbGwobm9kZSk7Cj4gKwkJfQo+ICsKCkVuZGluZyBoZXJlLCB0aGlzIGFjdHVhbCBz dWJtaXNzaW9uIG9mIGEgc2luZ2xlIG5vZGUgY291bGQgZ28gdG8gaXRzCm93biBoZWxwZXIgZnVu Y3Rpb24sIHRoZXNlIGZ1bmN0aW9ucyBub3cgYmVjb21lIHRvbyBsb25nIHRvIGZvbGxvdywKYWx0 aG91Z2ggdGhleSByZWFsbHkgYXJlIG5vdCBkb2luZyBhbnl0aGluZyBjb21wbGljYXRlZC4KCj4g KwkJLyogS2VlcCBsYXVuY2hpbmcgdW50aWwgdGhlIHNreSBpcyBzdWZmaWNpZW50bHkgZnVsbC4g Ki8KPiArCQlpZiAoaTkxNV9zY2hlZHVsZXJfY291bnRfZmx5aW5nKHNjaGVkdWxlciwgcmluZykg Pj0KPiArCQkJCQkJc2NoZWR1bGVyLT5taW5fZmx5aW5nKQo+ICsJCQlicmVhazsKPiArCj4gKwkJ cmV0ID0gaTkxNV9zY2hlZHVsZXJfcG9wX2Zyb21fcXVldWVfbG9ja2VkKHJpbmcsICZub2RlLCAm ZmxhZ3MpOwo+ICsJfSB3aGlsZSAocmV0ID09IDApOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmICghd2FzX2xvY2tlZCkK PiArCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCj4gKwkvKiBEb24ndCBj b21wbGFpbiBhYm91dCBub3QgYmVpbmcgYWJsZSB0byBzdWJtaXQgZXh0cmEgZW50cmllcyAqLwo+ ICsJaWYgKHJldCA9PSAtRU5PREFUQSkKPiArCQlyZXQgPSAwOwo+ICsKPiArCXJldHVybiAocmV0 IDwgMCkgPyByZXQgOiBjb3VudDsKClRoaXMgaXMgYSBjb21iaW5lZCBlcnJvciBhbmQgc3VjY2Vz cyBwYXRoLCBrZWVwaW5nIHRvIHRoZSBjb252ZW50aW9uIG9mCmtlcm5lbCBkcml2ZXJzIGlzIHBy ZWZlcnJlZDsKCglpZiAocmV0ICE9IC1FTk9EQVRBKQoJCWdvdG8gb3V0X2ZvbzsKCglyZXR1cm4g Y291bnQ7CgpvdXRfdW5sb2NrOgoJc3Bpbl91bmxvY2soLi4uKTsKb3V0X2ZvbzoKCXJldHVybiBy ZXQ7CgoKCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaTkxNV9zY2hlZHVsZXJfcmVtb3ZlX2RlcGVu ZGVudChzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKPiArCQkJCXN0cnVjdCBpOTE1 X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqcmVtb3ZlKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hl ZHVsZXJfcXVldWVfZW50cnnCoMKgKm5vZGU7Cj4gKwlpbnTCoMKgwqDCoMKgaSwgcjsKPiArCWlu dMKgwqDCoMKgwqBjb3VudCA9IDA7Cj4gKwo+ICsJLyoKPiArCcKgKiBFbnN1cmUgdGhhdCBhIG5v ZGUgaXMgbm90IGJlaW5nIHJlbW92ZWQgd2hpY2ggaXMgc3RpbGwgZGVwZW5kZW50Cj4gKwnCoCog dXBvbiBvdGhlciAobm90IGNvbXBsZXRlZCkgd29yay4gSWYgdGhhdCBoYXBwZW5zLCBpdCBpbXBs aWVzCj4gKwnCoCogc29tZXRoaW5nIGhhcyBnb25lIHZlcnkgd3Jvbmcgd2l0aCB0aGUgZGVwZW5k ZW5jeSB0cmFja2luZyEgTm90ZQo+ICsJwqAqIHRoYXQgdGhlcmUgaXMgbm8gbmVlZCB0byB3b3Jy eSBpZiB0aGlzIG5vZGUgaGFzIGJlZW4gZXhwbGljaXRseQo+ICsJwqAqIGtpbGxlZCBmb3Igc29t ZSByZWFzb24gLSBpdCBtaWdodCBiZSBiZWluZyBraWxsZWQgYmVmb3JlIGl0IGdvdAo+ICsJwqAq IHNlbnQgdG8gdGhlIGhhcmR3YXJlLgo+ICsJwqAqLwo+ICsJaWYgKHJlbW92ZS0+c3RhdHVzICE9 IGk5MTVfc3FzX2RlYWQpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgcmVtb3ZlLT5udW1fZGVwczsg aSsrKQo+ICsJCQlpZiAoKHJlbW92ZS0+ZGVwX2xpc3RbaV0pICYmCj4gKwkJCcKgwqDCoMKgKCFJ OTE1X1NRU19JU19DT01QTEVURShyZW1vdmUtPmRlcF9saXN0W2ldKSkpCj4gKwkJCQljb3VudCsr Owo+ICsJCVdBUk5fT04oY291bnQpOwo+ICsJfQo+ICsKPiArCS8qCj4gKwnCoCogUmVtb3ZlIHRo aXMgbm9kZSBmcm9tIHRoZSBkZXBlbmRlbmN5IGxpc3RzIG9mIGFueSBvdGhlciBub2RlIHdoaWNo Cj4gKwnCoCogbWlnaHQgYmUgd2FpdGluZyBvbiBpdC4KPiArCcKgKi8KPiArCWZvciAociA9IDA7 IHIgPCBJOTE1X05VTV9SSU5HUzsgcisrKSB7Cj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShub2Rl LCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JdLCBsaW5rKSB7Cj4gKwkJCWZvciAoaSA9IDA7IGkg PCBub2RlLT5udW1fZGVwczsgaSsrKSB7Cj4gKwkJCQlpZiAobm9kZS0+ZGVwX2xpc3RbaV0gIT0g cmVtb3ZlKQo+ICsJCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJCW5vZGUtPmRlcF9saXN0W2ldID0g TlVMTDsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uMDBkYzdmMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3NjaGVkdWxlci5oCj4gQEAgLTAsMCArMSw5MSBAQAo+ICsvKgo+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBT b2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuwqDCoElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNP RlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX0k5MTVfU0NIRURVTEVSX0hfCj4g KyNkZWZpbmUgX0k5MTVfU0NIRURVTEVSX0hfCj4gKwo+ICtlbnVtIGk5MTVfc2NoZWR1bGVyX3F1 ZXVlX3N0YXR1cyB7Cj4gKwkvKiBMaW1ibzogKi8KPiArCWk5MTVfc3FzX25vbmUgPSAwLAo+ICsJ LyogTm90IHlldCBzdWJtaXR0ZWQgdG8gaGFyZHdhcmU6ICovCj4gKwlpOTE1X3Nxc19xdWV1ZWQs Cj4gKwkvKiBQb3BwZWQgZnJvbSBxdWV1ZSwgcmVhZHkgdG8gZmx5OiAqLwo+ICsJaTkxNV9zcXNf cG9wcGVkLAo+ICsJLyogU2VudCB0byBoYXJkd2FyZSBmb3IgcHJvY2Vzc2luZzogKi8KPiArCWk5 MTVfc3FzX2ZseWluZywKPiArCS8qIEZpbmlzaGVkIHByb2Nlc3Npbmcgb24gdGhlIGhhcmR3YXJl OiAqLwo+ICsJaTkxNV9zcXNfY29tcGxldGUsCj4gKwkvKiBLaWxsZWQgYnkgd2F0Y2hkb2cgb3Ig Y2F0YXN0cm9waGljIHN1Ym1pc3Npb24gZmFpbHVyZTogKi8KPiArCWk5MTVfc3FzX2RlYWQsCj4g KwkvKiBMaW1pdCB2YWx1ZSBmb3IgdXNlIHdpdGggYXJyYXlzL2xvb3BzICovCj4gKwlpOTE1X3Nx c19NQVgKPiArfTsKClRoZXNlIHNob3VsZCBiZSBVUFBFUkNBU0VfRk9SX0VOVU1fVkFMVUVTIC4g U2VlIGk5MTVfZHJ2LmggZm9yIHNhbXBsZXMuCgo+ICsKPiArI2RlZmluZSBJOTE1X1NRU19JU19R VUVVRUQobm9kZSkJKCgobm9kZSktPnN0YXR1cyA9PSBpOTE1X3Nxc19xdWV1ZWQpKQo+ICsjZGVm aW5lIEk5MTVfU1FTX0lTX0ZMWUlORyhub2RlKQkoKChub2RlKS0+c3RhdHVzID09IGk5MTVfc3Fz X2ZseWluZykpCj4gKyNkZWZpbmUgSTkxNV9TUVNfSVNfQ09NUExFVEUobm9kZSkJKCgobm9kZSkt PnN0YXR1cyA9PSBpOTE1X3Nxc19jb21wbGV0ZSkgfHwgXAo+ICsJCQkJCcKgKChub2RlKS0+c3Rh dHVzID09IGk5MTVfc3FzX2RlYWQpKQo+ICsKCk1pZ2h0IGJlIHNsaWdodGx5IGNvbmZ1c2luZyB0 aGF0IG5hbWUgaXMgSVNfQ09NUExFVEUgYW5kIHRoZXJlIGlzCmFjdHVhbCBDT01QTEVURSB2YWx1 ZS4gUmF0aGVyIGhhdmUgdGhlIHRlc3QgbGlrZSBJU19ET05FIGFuZCB0aGVuIHRlc3QKZm9yIENP TVBMRVRFIG9yIERFQUQsIG5vIGNvbmZ1c2lvbi4gQWxzbywgc29tZSBzdGF0ZXMgaGF2ZSB0aGVp ciBJU18qCm1hY3JvIGFuZCBvdGhlcnMgZG9uJ3QsIGlzIHRoZXJlIGdvaW5nIHRvIGJlIG1vcmU/ Cgo+ICtzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfb2JqX2VudHJ5IHsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0wqDCoMKgwqDCoMKgwqDCoMKgwqAqb2JqOwo+ICsJYm9vbMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWFk X29ubHk7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgewo+ ICsJc3RydWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXPCoMKgwqDCoMKgwqDCoHBhcmFtczsKPiAr CS8qIC0xMDIzID0gbG93ZXN0IHByaW9yaXR5LCAwID0gZGVmYXVsdCwgMTAyMyA9IGhpZ2hlc3Qg Ki8KPiArCWludDMyX3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcHJpb3JpdHk7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfb2JqX2Vu dHJ5wqDCoMKgwqDCoCpzYXZlZF9vYmplY3RzOwo+ICsJaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbnVtX29ianM7Cj4g Kwlib29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGJ1bXBlZDsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRy ecKgwqDCoCoqZGVwX2xpc3Q7Cj4gKwlpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBudW1fZGVwczsKPiArCWVudW0gaTkx NV9zY2hlZHVsZXJfcXVldWVfc3RhdHVzwqDCoMKgwqBzdGF0dXM7Cj4gKwl1bnNpZ25lZCBsb25n wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0YW1wOwo+ICsJ c3RydWN0IGxpc3RfaGVhZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBs aW5rOwo+ICt9Owo+ICsKPiArc3RydWN0IGk5MTVfc2NoZWR1bGVyIHsKPiArCXN0cnVjdCBsaXN0 X2hlYWTCoMKgwqDCoG5vZGVfcXVldWVbSTkxNV9OVU1fUklOR1NdOwo+ICsJdWludDMyX3TCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFnc1tJOTE1X05VTV9SSU5HU107Cj4gKwlzcGlubG9ja190 wqDCoMKgwqDCoMKgwqDCoMKgwqBsb2NrOwo+ICsKPiArCS8qIFR1bmluZyBwYXJhbWV0ZXJzOiAq Lwo+ICsJaW50MzJfdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJpb3JpdHlfbGV2ZWxfbWlu Owo+ICsJaW50MzJfdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJpb3JpdHlfbGV2ZWxfbWF4 Owo+ICsJaW50MzJfdMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHJpb3JpdHlfbGV2ZWxfcHJl ZW1wdDsKPiArCXVpbnQzMl90wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWluX2ZseWluZzsKPiAr fTsKPiArCj4gKy8qIEZsYWcgYml0cyBmb3IgaTkxNV9zY2hlZHVsZXI6OmZsYWdzICovCj4gK2Vu dW0gewo+ICsJaTkxNV9zZl9pbnRlcnJ1cHRzX2VuYWJsZWTCoMKgPSAoMSA8PCAwKSwKPiArCWk5 MTVfc2Zfc3VibWl0dGluZ8KgwqDCoMKgwqDCoMKgwqDCoMKgPSAoMSA8PCAxKSwKCkFnYWluLCBz aG91bGQgYmUgdXBwZXJjYXNlLiBBbHNvLCBlbnVtcyB0byB0aGUgYmVnaW5uaW5nIG9mIGZpbGUu Cgo+ICt9Owo+ICsKPiAraW50wqDCoMKgwqDCoMKgwqDCoMKgaTkxNV9zY2hlZHVsZXJfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAraW50wqDCoMKgwqDCoMKgwqDCoMKgaTkxNV9zY2hl ZHVsZXJfcXVldWVfZXhlY2J1ZmZlcihzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkg KnFlKTsKPiArYm9vbMKgwqDCoMKgwqDCoMKgwqBpOTE1X3NjaGVkdWxlcl9ub3RpZnlfcmVxdWVz dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSk7Cj4gKwo+ICsjZW5kaWbCoMKgLyog X0k5MTVfU0NIRURVTEVSX0hfICovCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==