From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau =?utf-8?B?TW9ubsOp?= Subject: Re: [PATCH v1] x86/hvm: Generic instruction re-execution mechanism for execute faults Date: Fri, 16 Nov 2018 18:04:12 +0100 Message-ID: <20181116170412.xrwuun3cqxll22l3@mac> References: <20181116100624.21977-1-aisaila@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gNhXe-0001vR-NF for xen-devel@lists.xenproject.org; Fri, 16 Nov 2018 17:04:26 +0000 Content-Disposition: inline In-Reply-To: <20181116100624.21977-1-aisaila@bitdefender.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Alexandru Stefan ISAILA Cc: "kevin.tian@intel.com" , "tamas@tklengyel.com" , "wei.liu2@citrix.com" , "jun.nakajima@intel.com" , "rcojocaru@bitdefender.com" , "george.dunlap@eu.citrix.com" , "andrew.cooper3@citrix.com" , Mihai =?utf-8?B?RG9uyJt1?= , Andrei Vlad LUTAS , "jbeulich@suse.com" , "xen-devel@lists.xenproject.org" , Anshul Makkar List-Id: xen-devel@lists.xenproject.org T24gRnJpLCBOb3YgMTYsIDIwMTggYXQgMTA6MDY6MzZBTSArMDAwMCwgQWxleGFuZHJ1IFN0ZWZh biBJU0FJTEEgd3JvdGU6Cj4gQSBuZXcgbWVjaGFuaXNtIGhhcyBiZWVuIGFkZGVkIHdoaWNoIGlz IGFibGUgdG8gZ2VuZXJpY2FsbHkgcmUtZXhlY3V0ZQo+IGluc3RydWN0aW9ucywgYnkgdGVtcG9y YXJpbHkgZ3JhbnRpbmcgcGVybWlzc2lvbnMgaW5zaWRlIHRoZSBFUFQgYW5kCj4gcmUtZXhlY3V0 aW5nIHRoZSBpbnN0cnVjdGlvbiB3aXRoIGFsbCBvdGhlciB2Y3B1cyBwYXVzZWQgYW5kIHdpdGgg dGhlCj4gbW9uaXRvciB0cmFwIGZsYWcgc2V0LiBUaGUgbWVjaGFuaXNtIGlzIHJlLWVudHJhbnQs IG1lYW5pbmcgdGhhdCBpcwo+IGNhcGFibGUgb2YgaGFuZGxpbmcgZGlmZmVyZW50IHZpb2xhdGlv bnMgY2F1c2VkIGJ5IHRoZSBzYW1lIGluc3RydWN0aW9uLgo+IFVzdWFsbHksIGEgc2VjdXJpdHkg YXBwbGlhbmNlIHdpbGwgZGVjaWRlIHdoZW4gYW5kIHdoYXQgaW5zdHJ1Y3Rpb25zCj4gbXVzdCBi ZSByZS1leGVjdXRlZCB0aGlzIHdheSBpbnN0cnVjdGlvbnMgdGhhdCBsaWUgaW4gbm9uLWV4ZWN1 dGFibGUKPiBwYWdlcyBhbmQgaW5zdHJ1Y3Rpb25zIHRoYXQgY2F1c2UgdGhlIHNldHRpbmcgb2Yg QWNjZXNzZWQgYW5kL29yIERpcnR5Cj4gZmxhZ3MgaW5zaWRlIHBhZ2UgdGFibGVzIGFyZSB0d28g ZXhhbXBsZXMuCj4gCj4gU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1IElzYWlsYSA8YWlzYWlsYUBi aXRkZWZlbmRlci5jb20+Cj4gU2lnbmVkLW9mZi1ieTogQW5kcmVpIEx1dGFzIDx2bHV0YXNAYml0 ZGVmZW5kZXIuY29tPgo+IFNpZ25lZC1vZmYtYnk6IE1paGFpIERvbsibdSA8bWRvbnR1QGJpdGRl ZmVuZGVyLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBBbnNodWwgTWFra2FyIDxhbnNodWwubWFra2Fy QGNpdHJpeC5jb20+Cj4gLS0tCj4gIHhlbi9hcmNoL3g4Ni9kb21haW4uYyAgICAgICAgIHwgICAz ICsKPiAgeGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMgICAgfCAyNTUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ICB4ZW4vYXJjaC94ODYvbW0vbWVtX2FjY2Vzcy5jICB8ICAy MCArKy0KPiAgeGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaCAgfCAgMTggKysrCj4gIHhlbi9p bmNsdWRlL2FzbS14ODYvaHZtL2h2bS5oIHwgICAyICsKPiAgNSBmaWxlcyBjaGFuZ2VkLCAyOTUg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L2RvbWFpbi5jIGIveGVuL2FyY2gveDg2L2RvbWFpbi5jCj4gaW5kZXggMjk1YjEwYzQ4Yy4u YjA2ODBhNzZmMSAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvZG9tYWluLmMKPiArKysgYi94 ZW4vYXJjaC94ODYvZG9tYWluLmMKPiBAQCAtMzQzLDYgKzM0Myw3IEBAIGludCBhcmNoX3ZjcHVf Y3JlYXRlKHN0cnVjdCB2Y3B1ICp2KQo+ICAgICAgaW50IHJjOwo+ICAKPiAgICAgIHYtPmFyY2gu ZmxhZ3MgPSBURl9rZXJuZWxfbW9kZTsKPiArICAgIHYtPmFyY2guaW5faG9zdCA9IDE7CgpUaGlz IHNob3VsZCBiZSBhIGJvb2wgKGFzIHByb3Bvc2VkIGJlbG93KSwgc28gcGxlYXNlIHVzZSB0cnVl L2ZhbHNlCnRoZW4uCgo+ICAKPiAgICAgIHJjID0gbWFwY2FjaGVfdmNwdV9pbml0KHYpOwo+ICAg ICAgaWYgKCByYyApCj4gQEAgLTQ4Miw2ICs0ODMsOCBAQCBpbnQgYXJjaF9kb21haW5fY3JlYXRl KHN0cnVjdCBkb21haW4gKmQsCj4gICAgICBzcGluX2xvY2tfaW5pdCgmZC0+YXJjaC5lODIwX2xv Y2spOwo+ICAgICAgc3Bpbl9sb2NrX2luaXQoJmQtPmFyY2gudnRzY19sb2NrKTsKPiAgCgpBRkFJ Q1QsIHRoZXJlJ3Mgbm8gbmVlZCB0byBhZGQgYSBuZXdsaW5lIGhlcmUuCgo+ICsgICAgc3Bpbl9s b2NrX2luaXQoJmQtPmFyY2gucmV4ZWNfbG9jayk7Cj4gKwo+ICAgICAgLyogTWluaW1hbCBpbml0 aWFsaXNhdGlvbiBmb3IgdGhlIGlkbGUgZG9tYWluLiAqLwo+ICAgICAgaWYgKCB1bmxpa2VseShp c19pZGxlX2RvbWFpbihkKSkgKQo+ICAgICAgewo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYv aHZtL3ZteC92bXguYyBiL3hlbi9hcmNoL3g4Ni9odm0vdm14L3ZteC5jCj4gaW5kZXggMzY1ZWVi Mjg4Ni4uODRmODY0OGZjMCAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC94ODYvaHZtL3ZteC92bXgu Ywo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9odm0vdm14L3ZteC5jCj4gQEAgLTIyODksNiArMjI4OSwy NTUgQEAgc3RhdGljIGJvb2wgdm14X2dldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCB2Y3B1ICp2LCBz dHJ1Y3QgeDg2X2V2ZW50ICppbmZvKQo+ICAgICAgcmV0dXJuIHRydWU7Cj4gIH0KPiAgCj4gK3N0 YXRpYyBpbnQgdm14X3N0YXJ0X3JlZXhlY3V0ZV9pbnN0cnVjdGlvbihzdHJ1Y3QgdmNwdSAqdiwg dW5zaWduZWQgbG9uZyBncGEsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB4ZW5tZW1fYWNjZXNzX3QgcmVxdWlyZWRfYWNjZXNzKQo+ICt7Cj4gKyAgICAvKgo+ ICsgICAgICogTk9URTogU29tZSByZXF1aXJlZF9hY2Nlc3NlcyBtYXkgYmUgaW52YWxpZC4gRm9y IGV4YW1wbGUsIG9uZQo+ICsgICAgICogY2Fubm90IGdyYW50IG9ubHkgd3JpdGUgYWNjZXNzIG9u IGEgZ2l2ZW4gcGFnZTsgcmVhZC93cml0ZQo+ICsgICAgICogYWNjZXNzIG11c3QgYmUgZ3JhbnRl ZCBpbnN0ZWFkLiBUaGVzZSBpbmNvbnNpc3RlbmNpZXMgYXJlIE5PVAo+ICsgICAgICogY2hlY2tl ZCBoZXJlLiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgInJlcXVpcmVkX2FjY2VzcyIgaXMK PiArICAgICAqIGFuIGFsbG93ZWQgY29tYmluYXRpb24uCj4gKyAgICAgKi8KPiArCj4gKyAgICBp bnQgcmV0ID0gMCwgaSwgZm91bmQgPSAwLCByID0gMCwgdyA9IDAsIHggPSAwLCBsZXZlbCA9IDAs IGxlYXZlID0gMDsKClRoZXJlIGFyZSBhIGJ1bmNoIG9mIHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8g YmUgb2YgZGlmZmVyZW50IHR5cGUgaGVyZS4KCmkgbGlrZWx5IHdhbnRzIHRvIGJlIHVuc2lnbmVk LCBzYW1lIHdpdGggbGV2ZWwuCgpmb3VuZCwgciwgdywgeCBhbmQgbGVhdmUgc2hvdWxkIGJlIGJv b2xzLgoKPiArICAgIHhlbm1lbV9hY2Nlc3NfdCBvbGRfYWNjZXNzLCBuZXdfYWNjZXNzOwo+ICsg ICAgc3RydWN0IHZjcHUgKmE7Cj4gKyAgICB1bnNpZ25lZCBpbnQgYWx0cDJtX2lkeCA9Cj4gKyAg ICAgICAgYWx0cDJtX2FjdGl2ZSh2LT5kb21haW4pID8gYWx0cDJtX3ZjcHVfaWR4KHYpIDogMDsK PiArCj4gKyAgICBzcGluX2xvY2soJnYtPmRvbWFpbi0+YXJjaC5yZXhlY19sb2NrKTsKPiArCj4g KyAgICBsZXZlbCA9IHYtPmFyY2gucmV4ZWNfbGV2ZWw7Cj4gKwo+ICsgICAgLyoKPiArICAgICAq IFN0ZXAgMTogTWFrZSBzdXJlIHNvbWVvbmUgZWxzZSBkaWRuJ3QgZ2V0IHRvIHN0YXJ0IGFuCj4g KyAgICAgKiBpbnN0cnVjdGlvbiByZS1leGVjdXRpb24uCj4gKyAgICAgKi8KPiArICAgIGZvcl9l YWNoX3ZjcHUgKCB2LT5kb21haW4sIGEgKQo+ICsgICAgewo+ICsgICAgICAgIC8qIFdlJ3JlIGlu dGVyZXN0ZWQgaW4gcGF1c2luZyBhbGwgdGhlIFZDUFVzIGV4Y2VwdCBzZWxmL3YuICovCgpCdXQg dGhlcmUncyBubyBwYXVzZSBkb25lIGhlcmUgQUZBSUNUPwoKPiArICAgICAgICBpZiAoIGEgPT0g diApCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAvKgo+ICsgICAgICAg ICAqIENoZWNrIGlmICJhIiBzdGFydGVkIGFuIGluc3RydWN0aW9uIHJlLWV4ZWN1dGlvbi4gSWYg c28sCj4gKyAgICAgICAgICogcmV0dXJuIHN1Y2Nlc3MsIGFzIHdlJ2xsIHJlLWV4ZWN1dGUgb3Vy IGluc3RydWN0aW9uIGxhdGVyLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIGlmICggYS0+YXJj aC5yZXhlY19sZXZlbCAhPSAwICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIC8qIFdlIHNo b3VsZCBiZSBwYXVzZWQuICovCj4gKyAgICAgICAgICAgIHJldCA9IDA7Cj4gKyAgICAgICAgICAg IGxlYXZlID0gMTsKPiArICAgICAgICAgICAgZ290byByZWxlYXNlX2FuZF9leGl0Owo+ICsgICAg ICAgIH0KPiArICAgIH0KPiArCj4gKyAgICAvKiBTdGVwIDI6IE1ha2Ugc3VyZSB3ZSdyZSBub3Qg ZXhjZWVkaW5nIHRoZSBtYXggcmUtZXhlY3V0aW9uIGRlcHRoLiAqLwo+ICsgICAgaWYgKCBsZXZl bCA+PSBSRUVYRUNVVElPTl9NQVhfREVQVEggKQo+ICsgICAgewo+ICsgICAgICAgIHJldCA9IC0x OwoKUGxlYXNlIHJldHVybiBhIHByb3BlciBlcnJubyB2YWx1ZSBoZXJlLgoKPiArICAgICAgICBs ZWF2ZSA9IDE7Cj4gKyAgICAgICAgZ290byByZWxlYXNlX2FuZF9leGl0Owo+ICsgICAgfQo+ICsK PiArICAgIC8qCj4gKyAgICAgKiBTdGVwIDI6IFBhdXNlIGFsbCB0aGUgVkNQVXMsIGV4Y2VwdCBz ZWxmLiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBkbwo+ICsgICAgICogdGhpcyBvbmx5IGlmIHdlJ3Jl IGF0IG5lc3RpbmcgbGV2ZWwgMDsgaWYgd2UncmUgYXQgYSBoaWdoZXIgbGV2ZWwKPiArICAgICAq IG9mIG5lc3RlZCByZS1leGVjLCB0aGUgdmNwdXMgYXJlIGFscmVhZHkgcGF1c2VkLgo+ICsgICAg ICovCj4gKyAgICBpZiAoIGxldmVsID09IDAgKQo+ICsgICAgewo+ICsgICAgICAgIGZvcl9lYWNo X3ZjcHUgKCB2LT5kb21haW4sIGEgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLyogV2Un cmUgaW50ZXJlc3RlZCBpbiBwYXVzaW5nIGFsbCB0aGUgVkNQVXMgZXhjZXB0IHNlbGYvdi4gKi8K PiArICAgICAgICAgICAgaWYgKCBhID09IHYgKQo+ICsgICAgICAgICAgICAgICAgY29udGludWU7 Cj4gKwo+ICsgICAgICAgICAgICAvKiBQYXVzZSwgTk8gU1lOQyEgV2UncmUgZ29ubmEgZG8gb3Vy IG93biBzeW5jaW5nLiAqLwo+ICsgICAgICAgICAgICB2Y3B1X3BhdXNlX25vc3luYyhhKTsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qCj4gKyAgICAgICAgICogU3RlcCAzOiBXYWl0IGZv ciBhbGwgdGhlIHBhdXNlZCBWQ1BVcyB0byBhY3R1YWxseSBsZWF2ZSB0aGUgVk1YCj4gKyAgICAg ICAgICogbm9uLXJvb3QgcmVhbG0gYW5kIGVudGVyIFZNWCByb290Lgo+ICsgICAgICAgICAqLwo+ ICsgICAgICAgIGZvcl9lYWNoX3ZjcHUgKCB2LT5kb21haW4sIGEgKQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgICAgLyogV2UncmUgaW50ZXJlc3RlZCBpbiBwYXVzaW5nIGFsbCB0aGUgVkNQVXMg ZXhjZXB0IHNlbGYvdi4gKi8KCkl0J3MgdGhlIDNyZCB0aW1lIHRoaXMgY29tbWVudCBoYXMgYmVl biByZXBlYXRlZC4KCj4gKyAgICAgICAgICAgIGlmICggYSA9PSB2ICkKPiArICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgLyogUGF1c2UsIHN5bmNlZC4gKi8KPiAr ICAgICAgICAgICAgd2hpbGUgKCAhYS0+YXJjaC5pbl9ob3N0ICkKCldoeSBub3QgdXNlIGEtPmlz X3J1bm5pbmcgYXMgYSB3YXkgdG8ga25vdyB3aGV0aGVyIHRoZSB2Q1BVIGlzCnJ1bm5pbmc/CgpJ IHRoaW5rIHRoZSBsb2dpYyBvZiB1c2luZyB2Y3B1X3BhdXNlIGFuZCBleHBlY3RpbmcgdGhlIHJ1 bm5pbmcgdmNwdQp0byB0YWtlIGEgdm1leGl0IGFuZCB0aHVzIHNldCBpbl9ob3N0IGlzIHdyb25n IGJlY2F1c2UgYSB2Y3B1IHRoYXQKd2Fzbid0IHJ1bm5pbmcgd2hlbiB2Y3B1X3BhdXNlX25vc3lu YyBpcyBjYWxsZWQgd29uJ3QgZ2V0IHNjaGVkdWxlZAphbnltb3JlLCB0aHVzIG5vdCB0YWtpbmcg YSB2bWV4aXQgYW5kIHRoaXMgZnVuY3Rpb24gd2lsbCBsb2NrdXAuCgpJIGRvbid0IHRoaW5rIHlv dSBuZWVkIHRoZSBpbl9ob3N0IGJvb2xlYW4gYXQgYWxsLgoKPiArICAgICAgICAgICAgICAgIGNw dV9yZWxheCgpOwoKSXMgdGhpcyByZWFsbHkgYmV0dGVyIHRoYW4gdXNpbmcgdmNwdV9wYXVzZT8K CkkgYXNzdW1lIHRoaXMgaXMgZG9uZSB0byBhdm9pZCB3YWl0aW5nIG9uIGVhY2ggdmNwdSwgYW5k IGluc3RlYWQgZG9pbmcKaXQgaGVyZSBsaWtlbHkgbWVhbnMgbGVzcyB3YWl0IHRpbWU/Cgo+ICsg ICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICAvKiBVcGRhdGUgdGhlIHJleGVjdXRpb24gbmV4 dGluZyBsZXZlbC4gKi8KPiArICAgIHYtPmFyY2gucmV4ZWNfbGV2ZWwrKzsKPiArCj4gK3JlbGVh c2VfYW5kX2V4aXQ6Cj4gKyAgICBzcGluX3VubG9jaygmdi0+ZG9tYWluLT5hcmNoLnJleGVjX2xv Y2spOwo+ICsKPiArICAgIC8qIElmIHdlJ3ZlIGdvdCBlcnJvcnMgc28gZmFyLCByZXR1cm4uICov Cj4gKyAgICBpZiAoIGxlYXZlICkKPiArICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArICAgIC8q Cj4gKyAgICAgKiBTdGVwIDQ6IFNhdmUgdGhlIGN1cnJlbnQgZ3BhICYgb2xkIGFjY2VzcyByaWdo dHMuIEFsc28sIGNoZWNrIGlmIHRoaXMKPiArICAgICAqIGlzIGEgImRvdWJsZS1mYXVsdCIgb24g dGhlIGV4YWN0IHNhbWUgR1BBLCBpbiB3aGljaCBjYXNlLCB3ZSB3aWxsCj4gKyAgICAgKiBwcm9t b3RlIHRoZSByaWdodHMgb2YgdGhpcyBwYXJ0aWN1bGFyIEdQQSwgYW5kIHRyeSBhZ2Fpbi4KPiAr ICAgICAqLwo+ICsgICAgZm9yICggaSA9IDA7IGkgPCBsZXZlbDsgaSsrICkKPiArICAgIHsKPiAr ICAgICAgICBpZiAoICh2LT5hcmNoLnJleGVjX2NvbnRleHRbaV0uZ3BhID4+IFBBR0VfU0hJRlQp ID09Cj4gKyAgICAgICAgICAgICAoZ3BhID4+IFBBR0VfU0hJRlQpICkKPiArICAgICAgICB7Cj4g KyAgICAgICAgICAgIC8qIFRoaXMgR1BBIGlzIGFscmVhZHkgaW4gdGhlIHF1ZXVlLiAqLwo+ICsg ICAgICAgICAgICBmb3VuZCA9IDE7Cj4gKwo+ICsgICAgICAgICAgICBzd2l0Y2ggKHYtPmFyY2gu cmV4ZWNfY29udGV4dFtpXS5jdXJfYWNjZXNzKSB7Cj4gKyAgICAgICAgICAgICAgICBjYXNlIFhF Tk1FTV9hY2Nlc3NfcjogciA9IDE7IGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgY2FzZSBYRU5N RU1fYWNjZXNzX3c6IHcgPSAxOyBicmVhazsKPiArICAgICAgICAgICAgICAgIGNhc2UgWEVOTUVN X2FjY2Vzc194OiB4ID0gMTsgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgICBjYXNlIFhFTk1FTV9h Y2Nlc3Nfcng6IHIgPSB4ID0gMTsgYnJlYWs7Cj4gKyAgICAgICAgICAgICAgICBjYXNlIFhFTk1F TV9hY2Nlc3Nfd3g6IHcgPSB4ID0gMTsgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgY2FzZSBY RU5NRU1fYWNjZXNzX3J3OiByID0gdyA9IDE7IGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgY2Fz ZSBYRU5NRU1fYWNjZXNzX3J3eDogciA9IHcgPSB4ID0gMTsgYnJlYWs7Cj4gKyAgICAgICAgICAg ICAgICBkZWZhdWx0OiBicmVhazsgLyogV2UgZG9uJ3QgY2FyZSBhYm91dCBhbnkgb3RoZXIgY2Fz ZS4gKi8KClRoZSBhYm92ZSBjaHVuayBuZWVkcyBwcm9wZXIgZm9ybWF0dGluZywgYW5kIEkgd291 bGQgYXJndWUgdGhhdCB5b3UKbmVlZCB0byBhZGQgYW4gYXNzZXJ0IHRvIHRoZSBkZWZhdWx0IGNh c2UgYXQgbGVhc3Q/Cgo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsK PiArICAgIC8qCj4gKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgRVBUIGFjY2VzcyByaWdodHMuIFRo ZXkgd2lsbCBiZSByZXN0b3JlZCB3aGVuIHdlJ3JlIGRvbmUuCj4gKyAgICAgKiBOb3RlIHRoYXQg dGhlIHJlc3RvcmF0aW9uIGlzIGRvbmUgaW4gcmV2ZXJzZS1vcmRlciwgaW4gb3JkZXIgdG8gZW5z dXJlCj4gKyAgICAgKiB0aGF0IHRoZSBvcmlnaW5hbCBhY2Nlc3MgcmlnaHRzIGFyZSByZXN0b3Jl IGNvcnJlY3RseS4gT3RoZXJ3aXNlLCB3ZSBtYXkKPiArICAgICAqIHJlc3RvcmUgd2hhdGV2ZXIg YWNjZXNzIHJpZ2h0cyB3ZXJlIG1vZGlmaWVkIGJ5IGFub3RoZXIgcmUtZXhlY3V0aW9uCj4gKyAg ICAgKiByZXF1ZXN0LCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuCj4gKyAgICAgKi8KPiArICAgIGlm ICggcDJtX2dldF9tZW1fYWNjZXNzKHYtPmRvbWFpbiwgX2dmbihncGEgPj4gUEFHRV9TSElGVCks Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkX2FjY2VzcywgYWx0cDJtX2lkeCkg IT0gMCApCj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsKPiArICAgIHYtPmFyY2gucmV4ZWNfY29u dGV4dFtsZXZlbF0uZ3BhID0gZ3BhOwo+ICsgICAgdi0+YXJjaC5yZXhlY19jb250ZXh0W2xldmVs XS5vbGRfYWNjZXNzID0gb2xkX2FjY2VzczsKPiArICAgIHYtPmFyY2gucmV4ZWNfY29udGV4dFts ZXZlbF0ub2xkX3NpbmdsZV9zdGVwID0gdi0+YXJjaC5odm0uc2luZ2xlX3N0ZXA7Cj4gKwo+ICsg ICAgLyoKPiArICAgICAqIFN0ZXAgNTogTWFrZSB0aGUgR1BBIHdpdGggdGhlIHJlcXVpcmVkIGFj Y2Vzcywgc28gd2UgY2FuIHJlLWV4ZWN1dGUKPiArICAgICAqIHRoZSBpbnN0cnVjdGlvbi4KPiAr ICAgICAqLwo+ICsgICAgc3dpdGNoICggcmVxdWlyZWRfYWNjZXNzICkKPiArICAgIHsKPiArICAg ICAgICBjYXNlIFhFTk1FTV9hY2Nlc3NfcjogciA9IDE7IGJyZWFrOwo+ICsgICAgICAgIGNhc2Ug WEVOTUVNX2FjY2Vzc193OiB3ID0gMTsgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBYRU5NRU1fYWNj ZXNzX3g6IHggPSAxOyBicmVhazsKPiArICAgICAgICBjYXNlIFhFTk1FTV9hY2Nlc3Nfcng6IHIg PSB4ID0gMTsgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBYRU5NRU1fYWNjZXNzX3d4OiB3ID0geCA9 IDE7ICBicmVhazsKPiArICAgICAgICBjYXNlIFhFTk1FTV9hY2Nlc3Nfcnc6IHIgPSB3ID0gMTsg YnJlYWs7Cj4gKyAgICAgICAgY2FzZSBYRU5NRU1fYWNjZXNzX3J3eDogciA9IHcgPSB4ID0gMTsg YnJlYWs7Cj4gKyAgICAgICAgZGVmYXVsdDogYnJlYWs7IC8qIFdlIGRvbid0IGNhcmUgYWJvdXQg YW55IG90aGVyIGNhc2UuICovCj4gKyAgICB9Cj4gKwo+ICsgICAgLyogTm93IHRyYW5zZm9ybSBv dXIgUldYIHZhbHVlcyBpbiBhIFhFTk1FTV9hY2Nlc3NfKiBjb25zdGFudC4gKi8KPiArICAgIGlm ICggciA9PSAwICYmIHcgPT0gMCAmJiB4ID09IDAgKQo+ICsgICAgICAgIG5ld19hY2Nlc3MgPSBY RU5NRU1fYWNjZXNzX247Cj4gKyAgICBlbHNlIGlmICggciA9PSAwICYmIHcgPT0gMCAmJiB4ID09 IDEgKQo+ICsgICAgICAgIG5ld19hY2Nlc3MgPSBYRU5NRU1fYWNjZXNzX3g7Cj4gKyAgICBlbHNl IGlmICggciA9PSAwICYmIHcgPT0gMSAmJiB4ID09IDAgKQo+ICsgICAgICAgIG5ld19hY2Nlc3Mg PSBYRU5NRU1fYWNjZXNzX3c7Cj4gKyAgICBlbHNlIGlmICggciA9PSAwICYmIHcgPT0gMSAmJiB4 ID09IDEgKQo+ICsgICAgICAgIG5ld19hY2Nlc3MgPSBYRU5NRU1fYWNjZXNzX3d4Owo+ICsgICAg ZWxzZSBpZiAoIHIgPT0gMSAmJiB3ID09IDAgJiYgeCA9PSAwICkKPiArICAgICAgICBuZXdfYWNj ZXNzID0gWEVOTUVNX2FjY2Vzc19yOwo+ICsgICAgZWxzZSBpZiAoIHIgPT0gMSAmJiB3ID09IDAg JiYgeCA9PSAxICkKPiArICAgICAgICBuZXdfYWNjZXNzID0gWEVOTUVNX2FjY2Vzc19yeDsKPiAr ICAgIGVsc2UgaWYgKCByID09IDEgJiYgdyA9PSAxICYmIHggPT0gMCApCj4gKyAgICAgICAgbmV3 X2FjY2VzcyA9IFhFTk1FTV9hY2Nlc3Nfcnc7Cj4gKyAgICBlbHNlIGlmICggciA9PSAxICYmIHcg PT0gMSAmJiB4ID09IDEgKQo+ICsgICAgICAgIG5ld19hY2Nlc3MgPSBYRU5NRU1fYWNjZXNzX3J3 eDsKPiArICAgIGVsc2UKPiArICAgICAgICBuZXdfYWNjZXNzID0gcmVxdWlyZWRfYWNjZXNzOyAv KiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUuICovCgpUaGVyZSBzZWVtcyB0byBiZSBhIGxvdCBvZiB0 cmFuc2xhdGlvbiBmcm9tIHhlbm1lbV9hY2Nlc3NfdCB0byBib29sCmZpZWxkcyBhbmQgdGhlbiB0 byB4ZW5tZW1fYWNjZXNzX3QgYWdhaW4uIENhbid0IHlvdSBqdXN0IGF2b2lkIHRoZQpib29sZWFu cz8KCj4gKwo+ICsgICAgLyogQW5kIHNhdmUgdGhlIGN1cnJlbnQgYWNjZXNzIHJpZ2h0cy4gKi8K PiArICAgIHYtPmFyY2gucmV4ZWNfY29udGV4dFtsZXZlbF0uY3VyX2FjY2VzcyA9IG5ld19hY2Nl c3M7Cj4gKwo+ICsgICAgLyogQXBwbHkgdGhlIGNoYW5nZXMgaW5zaWRlIHRoZSBFUFQuICovCj4g KyAgICBpZiAoIHAybV9zZXRfbWVtX2FjY2Vzcyh2LT5kb21haW4sIF9nZm4oZ3BhID4+IFBBR0Vf U0hJRlQpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgTUVNT1BfQ01EX01B U0ssIG5ld19hY2Nlc3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRwMm1faWR4 KSAhPSAwICkKPiArICAgICAgICByZXR1cm4gLTE7CgpBZ2FpbiB5b3Ugc2hvdWxkIHJldHVybiBw cm9wZXIgZXJybm8gdmFsdWVzLgoKPiArCj4gKyAgICAvKgo+ICsgICAgICogU3RlcCA2OiBSZWNv bmZpZ3VyZSB0aGUgVk1DUywgc28gaXQgc3VpdHMgb3VyIG5lZWRzLiBXZSB3YW50IGEKPiArICAg ICAqIFZNLWV4aXQgdG8gYmUgZ2VuZXJhdGVkIGFmdGVyIHRoZSBpbnN0cnVjdGlvbiBoYXMgYmVl bgo+ICsgICAgICogc3VjY2Vzc2Z1bGx5IHJlLWV4ZWN1dGVkLgo+ICsgICAgICovCj4gKyAgICBp ZiAoIGxldmVsID09IDAgKQo+ICsgICAgICAgIHYtPmFyY2guaHZtLnNpbmdsZV9zdGVwID0gMTsK PiArCj4gKyAgICAvKiBTdGVwIDg6IFdlIHNob3VsZCBiZSBkb25lISAqLwo+ICsKPiArICAgIHJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdm14X3N0b3BfcmVleGVjdXRlX2luc3Ry dWN0aW9uKHN0cnVjdCB2Y3B1ICp2KQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMCwgaTsKPiArICAg IHN0cnVjdCB2Y3B1ICphOwo+ICsgICAgdW5zaWduZWQgaW50IGFsdHAybV9pZHggPQo+ICsgICAg ICAgIGFsdHAybV9hY3RpdmUodi0+ZG9tYWluKSA/IGFsdHAybV92Y3B1X2lkeCh2KSA6IDA7Cj4g Kwo+ICsgICAgaWYgKCB2LT5hcmNoLnJleGVjX2xldmVsID09IDAgKQo+ICsgICAgICAgIHJldHVy biAwOwo+ICsKPiArICAgIC8qIFN0ZXAgMTogUmVzdG9yZSBvcmlnaW5hbCBFUFQgYWNjZXNzIHJp Z2h0cyBmb3IgZWFjaCBHUEEuICovCj4gKyAgICBmb3IgKCBpID0gdi0+YXJjaC5yZXhlY19sZXZl bCAtIDE7IGkgPj0gMDsgaS0tICkKPiArICAgIHsKPiArICAgICAgICBpZiAoIHYtPmFyY2gucmV4 ZWNfY29udGV4dFtpXS5ncGEgIT0gbWZuX3goSU5WQUxJRF9NRk4pICYmCj4gKyAgICAgICAgICAg ICBwMm1fc2V0X21lbV9hY2Nlc3Modi0+ZG9tYWluLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9nZm4odi0+YXJjaC5yZXhlY19jb250ZXh0W2ldLmdwYSA+PiBQQUdFX1NISUZU KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCBNRU1PUF9DTURfTUFT SywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LT5hcmNoLnJleGVjX2NvbnRl eHRbaV0ub2xkX2FjY2VzcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRw Mm1faWR4KSAhPSAwICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHJldCA9IC0xOwo+ICsg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgdi0+YXJj aC5yZXhlY19jb250ZXh0W2ldLmdwYSA9IDA7Cj4gKyAgICAgICAgdi0+YXJjaC5odm0uc2luZ2xl X3N0ZXAgPSB2LT5hcmNoLnJleGVjX2NvbnRleHRbaV0ub2xkX3NpbmdsZV9zdGVwOwo+ICsgICAg fQo+ICsKPiArICAgIHNwaW5fbG9jaygmdi0+ZG9tYWluLT5hcmNoLnJleGVjX2xvY2spOwo+ICsK PiArICAgIC8qIFN0ZXAgMjogUmVzZXQgdGhlIG5lc3RpbmcgbGV2ZWwgdG8gemVyby4gKi8KPiAr ICAgIHYtPmFyY2gucmV4ZWNfbGV2ZWwgPSAwOwo+ICsKPiArICAgIC8qIFN0ZXAgMzogUmVzdW1l IGFsbCBvdGhlciBWQ1BVcy4gKi8KPiArICAgIGZvcl9lYWNoX3ZjcHUgKCB2LT5kb21haW4sIGEg KQo+ICsgICAgewo+ICsgICAgICAgIGlmICggYSA9PSB2ICkKPiArICAgICAgICAgICAgY29udGlu dWU7Cj4gKwo+ICsgICAgICAgIC8qIFVucGF1c2UgdGhlIFZDUFUuICovCj4gKyAgICAgICAgdmNw dV91bnBhdXNlKGEpOwo+ICsgICAgfQo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBTdGVwIDQ6IFJl bW92ZSB0aGUgTU9OSVRPUiB0cmFwIGZsYWcuCj4gKyAgICAgKiAtIHRoaXMgaXMgYWxyZWFkeSBk b25lIHdoZW4gaGFuZGxpbmcgdGhlIGV4aXQuCj4gKyAgICAgKi8KPiArCj4gKyAgICAvKiBTdGVw IDU6IFdlJ3JlIGRvbmUhICovCj4gKwo+ICsgICAgc3Bpbl91bmxvY2soJnYtPmRvbWFpbi0+YXJj aC5yZXhlY19sb2NrKTsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICBzdGF0aWMg c3RydWN0IGh2bV9mdW5jdGlvbl90YWJsZSBfX2luaXRkYXRhIHZteF9mdW5jdGlvbl90YWJsZSA9 IHsKPiAgICAgIC5uYW1lICAgICAgICAgICAgICAgICA9ICJWTVgiLAo+ICAgICAgLmNwdV91cF9w cmVwYXJlICAgICAgID0gdm14X2NwdV91cF9wcmVwYXJlLAo+IEBAIC0yMzI0LDYgKzI1NzMsNyBA QCBzdGF0aWMgc3RydWN0IGh2bV9mdW5jdGlvbl90YWJsZSBfX2luaXRkYXRhIHZteF9mdW5jdGlv bl90YWJsZSA9IHsKPiAgICAgIC5pbnZscGcgICAgICAgICAgICAgICA9IHZteF9pbnZscGcsCj4g ICAgICAuY3B1X3VwICAgICAgICAgICAgICAgPSB2bXhfY3B1X3VwLAo+ICAgICAgLmNwdV9kb3du ICAgICAgICAgICAgID0gdm14X2NwdV9kb3duLAo+ICsgICAgLnN0YXJ0X3JlZXhlY3V0ZV9pbnN0 cnVjdGlvbiA9IHZteF9zdGFydF9yZWV4ZWN1dGVfaW5zdHJ1Y3Rpb24sCj4gICAgICAud2JpbnZk X2ludGVyY2VwdCAgICAgPSB2bXhfd2JpbnZkX2ludGVyY2VwdCwKPiAgICAgIC5mcHVfZGlydHlf aW50ZXJjZXB0ICA9IHZteF9mcHVfZGlydHlfaW50ZXJjZXB0LAo+ICAgICAgLm1zcl9yZWFkX2lu dGVyY2VwdCAgID0gdm14X21zcl9yZWFkX2ludGVyY2VwdCwKPiBAQCAtMzU5MCw2ICszODQwLDgg QEAgdm9pZCB2bXhfdm1leGl0X2hhbmRsZXIoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4g ICAgICB1bnNpZ25lZCBpbnQgdmVjdG9yID0gMCwgbW9kZTsKPiAgICAgIHN0cnVjdCB2Y3B1ICp2 ID0gY3VycmVudDsKPiAgCj4gKyAgICB2LT5hcmNoLmluX2hvc3QgPSAxOwo+ICsKPiAgICAgIF9f dm1yZWFkKEdVRVNUX1JJUCwgICAgJnJlZ3MtPnJpcCk7Cj4gICAgICBfX3ZtcmVhZChHVUVTVF9S U1AsICAgICZyZWdzLT5yc3ApOwo+ICAgICAgX192bXJlYWQoR1VFU1RfUkZMQUdTLCAmcmVncy0+ cmZsYWdzKTsKPiBAQCAtNDExMiw2ICs0MzY0LDcgQEAgdm9pZCB2bXhfdm1leGl0X2hhbmRsZXIo c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4gICAgICBjYXNlIEVYSVRfUkVBU09OX01PTklU T1JfVFJBUF9GTEFHOgo+ICAgICAgICAgIHYtPmFyY2guaHZtLnZteC5leGVjX2NvbnRyb2wgJj0g fkNQVV9CQVNFRF9NT05JVE9SX1RSQVBfRkxBRzsKPiAgICAgICAgICB2bXhfdXBkYXRlX2NwdV9l eGVjX2NvbnRyb2wodik7Cj4gKyAgICAgICAgdm14X3N0b3BfcmVleGVjdXRlX2luc3RydWN0aW9u KHYpOwo+ICAgICAgICAgIGlmICggdi0+YXJjaC5odm0uc2luZ2xlX3N0ZXAgKQo+ICAgICAgICAg IHsKPiAgICAgICAgICAgICAgaHZtX21vbml0b3JfZGVidWcocmVncy0+cmlwLAo+IEBAIC00MzMw LDYgKzQ1ODMsOCBAQCBib29sIHZteF92bWVudGVyX2hlbHBlcihjb25zdCBzdHJ1Y3QgY3B1X3Vz ZXJfcmVncyAqcmVncykKPiAgICAgIGlmICggdW5saWtlbHkoY3Vyci0+YXJjaC5odm0udm14Lmxi cl9mbGFncyAmIExCUl9GSVhVUF9NQVNLKSApCj4gICAgICAgICAgbGJyX2ZpeHVwKCk7Cj4gIAo+ ICsgICAgY3Vyci0+YXJjaC5pbl9ob3N0ID0gMDsKPiArCj4gICAgICBIVk1UUkFDRV9ORChWTUVO VFJZLCAwLCAxLypjeWNsZXMqLywgMCwgMCwgMCwgMCwgMCwgMCwgMCk7Cj4gIAo+ICAgICAgX192 bXdyaXRlKEdVRVNUX1JJUCwgICAgcmVncy0+cmlwKTsKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L21tL21lbV9hY2Nlc3MuYyBiL3hlbi9hcmNoL3g4Ni9tbS9tZW1fYWNjZXNzLmMKPiBpbmRl eCAyZjEyOTVlNTZhLi41YWUzYTYxYjVjIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL3g4Ni9tbS9t ZW1fYWNjZXNzLmMKPiArKysgYi94ZW4vYXJjaC94ODYvbW0vbWVtX2FjY2Vzcy5jCj4gQEAgLTIx MiwxMCArMjEyLDExIEBAIGJvb2wgcDJtX21lbV9hY2Nlc3NfY2hlY2socGFkZHJfdCBncGEsIHVu c2lnbmVkIGxvbmcgZ2xhLAo+ICAgICAgfQo+ICAgICAgaWYgKCB2bV9ldmVudF9jaGVja19yaW5n KGQtPnZtX2V2ZW50X21vbml0b3IpICYmCj4gICAgICAgICAgIGQtPmFyY2gubW9uaXRvci5pbmd1 ZXN0X3BhZ2VmYXVsdF9kaXNhYmxlZCAmJgo+IC0gICAgICAgICBucGZlYy5raW5kICE9IG5wZmVj X2tpbmRfd2l0aF9nbGEgKSAvKiBkb24ndCBzZW5kIGEgbWVtX2V2ZW50ICovCj4gKyAgICAgICAg IG5wZmVjLmtpbmQgIT0gbnBmZWNfa2luZF93aXRoX2dsYSAmJgo+ICsgICAgICAgICBodm1fZnVu Y3Muc3RhcnRfcmVleGVjdXRlX2luc3RydWN0aW9uICkgLyogZG9uJ3Qgc2VuZCBhIG1lbV9ldmVu dCAqLwo+ICAgICAgewo+IC0gICAgICAgIGh2bV9lbXVsYXRlX29uZV92bV9ldmVudChFTVVMX0tJ TkRfTk9STUFMLCBUUkFQX2ludmFsaWRfb3AsIFg4Nl9FVkVOVF9OT19FQyk7Cj4gLQo+ICsgICAg ICAgIHYtPmFyY2gudm1fZXZlbnQtPmVtdWxhdGVfZmxhZ3MgPSAwOwo+ICsgICAgICAgIGh2bV9m dW5jcy5zdGFydF9yZWV4ZWN1dGVfaW5zdHJ1Y3Rpb24odiwgZ3BhLCBYRU5NRU1fYWNjZXNzX3J3 KTsKPiAgICAgICAgICByZXR1cm4gdHJ1ZTsKPiAgICAgIH0KCkRvbid0IHlvdSBuZWVkIHRvIGZh bGxiYWNrIHRvIHVzaW5nIGh2bV9lbXVsYXRlX29uZV92bV9ldmVudCBpZgpzdGFydF9yZWV4ZWN1 dGVfaW5zdHJ1Y3Rpb24gaXMgbm90IGF2YWlsYWJsZT8KCj4gIAo+IEBAIC0yMjYsNiArMjI3LDcg QEAgYm9vbCBwMm1fbWVtX2FjY2Vzc19jaGVjayhwYWRkcl90IGdwYSwgdW5zaWduZWQgbG9uZyBn bGEsCj4gICAgICAgICAgKnJlcV9wdHIgPSByZXE7Cj4gIAo+ICAgICAgICAgIHJlcS0+cmVhc29u ID0gVk1fRVZFTlRfUkVBU09OX01FTV9BQ0NFU1M7Cj4gKwoKVW5yZWxhdGVkIGNoYW5nZT8KCj4g ICAgICAgICAgcmVxLT51Lm1lbV9hY2Nlc3MuZ2ZuID0gZ2ZuX3goZ2ZuKTsKPiAgICAgICAgICBy ZXEtPnUubWVtX2FjY2Vzcy5vZmZzZXQgPSBncGEgJiAoKDEgPDwgUEFHRV9TSElGVCkgLSAxKTsK PiAgCj4gQEAgLTM3Nyw2ICszNzksOCBAQCBsb25nIHAybV9zZXRfbWVtX2FjY2VzcyhzdHJ1Y3Qg ZG9tYWluICpkLCBnZm5fdCBnZm4sIHVpbnQzMl90IG5yLAo+ICAgICAgcDJtX2FjY2Vzc190IGE7 Cj4gICAgICB1bnNpZ25lZCBsb25nIGdmbl9sOwo+ICAgICAgbG9uZyByYyA9IDA7Cj4gKyAgICBz dHJ1Y3QgdmNwdSAqdjsKPiArICAgIGludCBpOwo+ICAKPiAgICAgIC8qIGFsdHAybSB2aWV3IDAg aXMgdHJlYXRlZCBhcyB0aGUgaG9zdHAybSAqLwo+ICAjaWZkZWYgQ09ORklHX0hWTQo+IEBAIC00 MTMsNiArNDE3LDE2IEBAIGxvbmcgcDJtX3NldF9tZW1fYWNjZXNzKHN0cnVjdCBkb21haW4gKmQs IGdmbl90IGdmbiwgdWludDMyX3QgbnIsCj4gICAgICAgICAgaWYgKCByYyApCj4gICAgICAgICAg ICAgIGJyZWFrOwo+ICAKPiArICAgICAgICBmb3JfZWFjaF92Y3B1KGQsIHYpCj4gKyAgICAgICAg ewo+ICsgICAgICAgICAgICBpZiAoICF2LT5hcmNoLnJleGVjX2xldmVsICkKPiArICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgZm9yICggaSA9IHYtPmFyY2gucmV4 ZWNfbGV2ZWwgLSAxOyBpID49IDA7IGktLSApCgpJcyB0aGVyZSBhbnkgcmVhc29uIHRoaXMgaGFz IHRvIGJlIGRvbmUgYmFja3dhcmRzPwoKSWYgeW91IGRvIGl0IGZyb20gMCB0byB2LT5hcmNoLnJl eGVjX2xldmVsIHlvdSBjb3VsZCB1c2UgYW4gdW5zaWduZWQKaW50IGFzIHRoZSBpbmRleC4KCj4g KyAgICAgICAgICAgICAgICBpZiAoICh2LT5hcmNoLnJleGVjX2NvbnRleHRbaV0uZ3BhID4+IFBB R0VfU0hJRlQpID09IGdmbl94KGdmbikgKQoKUEZOX0RPV04gaW5zdGVhZCBvZiB0aGUgcmlnaHQg c2hpZnQsIGFuZCBtYXliZSB1c2UgZ2ZuX2VxIGluc3RlYWQgb2YKY29udmVydGluZyBnZm4uCgo+ ICsgICAgICAgICAgICAgICAgICAgIHYtPmFyY2gucmV4ZWNfY29udGV4dFtpXS5ncGEgPSBtZm5f eChJTlZBTElEX01GTik7CgpUaGlzIGlzIGEgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyAoZ2l2ZW4g dGhlIGZpZWxkIG5hbWUpLCBidXQgeW91IGFyZQp1c2luZyB0aGUgaW52YWxpZCBtYWNoaW5lIGZy YW1lIG51bWJlciBpbiBvcmRlciB0byBzZXQgaXQuIFlvdSBsaWtlbHkKd2FudCB0byB1c2UgSU5W QUxJRF9QQUREUiBvciBnZm5feChJTlZBTElEX0dGTikgPDwgUEFHRV9TSElGVC4KCj4gKyAgICAg ICAgfQo+ICsKPiAgICAgICAgICAvKiBDaGVjayBmb3IgY29udGludWF0aW9uIGlmIGl0J3Mgbm90 IHRoZSBsYXN0IGl0ZXJhdGlvbi4gKi8KPiAgICAgICAgICBpZiAoIG5yID4gKytzdGFydCAmJiAh KHN0YXJ0ICYgbWFzaykgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCj4gICAgICAgICAg ewo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2RvbWFpbi5oIGIveGVuL2luY2x1 ZGUvYXNtLXg4Ni9kb21haW4uaAo+IGluZGV4IDI3N2Y5OWY2MzMuLmRiYjY4ZjEwOGEgMTAwNjQ0 Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaAo+ICsrKyBiL3hlbi9pbmNsdWRl L2FzbS14ODYvZG9tYWluLmgKPiBAQCAtNDM4LDYgKzQzOCw4IEBAIHN0cnVjdCBhcmNoX2RvbWFp bgo+ICAKPiAgICAgIC8qIEVtdWxhdGVkIGRldmljZXMgZW5hYmxlZCBiaXRtYXAuICovCj4gICAg ICB1aW50MzJfdCBlbXVsYXRpb25fZmxhZ3M7Cj4gKwo+ICsgICAgc3BpbmxvY2tfdCByZXhlY19s b2NrOwo+ICB9IF9fY2FjaGVsaW5lX2FsaWduZWQ7Cj4gIAo+ICAjaWZkZWYgQ09ORklHX0hWTQo+ IEBAIC02MjksNiArNjMxLDIyIEBAIHN0cnVjdCBhcmNoX3ZjcHUKPiAgICAgIC8qIEEgc2Vjb25k YXJ5IGNvcHkgb2YgdGhlIHZjcHUgdGltZSBpbmZvLiAqLwo+ICAgICAgWEVOX0dVRVNUX0hBTkRM RSh2Y3B1X3RpbWVfaW5mb190KSB0aW1lX2luZm9fZ3Vlc3Q7Cj4gIAo+ICsjZGVmaW5lIFJFRVhF Q1VUSU9OX01BWF9ERVBUSCA4Cj4gKyAgICBzdHJ1Y3QgcmV4ZWNfY29udGV4dF90IHsKPiArICAg ICAgICB1bnNpZ25lZCBsb25nIGdwYTsKPiArICAgICAgICB4ZW5tZW1fYWNjZXNzX3Qgb2xkX2Fj Y2VzczsKPiArICAgICAgICB4ZW5tZW1fYWNjZXNzX3QgY3VyX2FjY2VzczsKPiArICAgICAgICBi b29sX3Qgb2xkX3NpbmdsZV9zdGVwOwoKYm9vbCBwbGVhc2UKCj4gKyAgICB9IHJleGVjX2NvbnRl eHRbUkVFWEVDVVRJT05fTUFYX0RFUFRIXTsKClRoaXMgaXMgZmFpcmx5IGJpZyBhbW91bnQgb2Yg ZGF0YSB0aGF0J3Mgb25seSB1c2VkIGlmIHZtIGV2ZW50cyBhcmUKZW5hYmxlZCwgY291bGQgdGhp cyBiZSBhbGxvY2F0ZWQgb24gYSBwZXItZ3Vlc3QgYmFzaXM/Cgo+ICsKPiArICAgIGludCByZXhl Y19sZXZlbDsKPiArCj4gKyAgICAvKgo+ICsgICAgICogIFdpbGwgYmUgdHJ1ZSB3aGVuIHRoZSB2 Y3B1IGlzIGluIFZNWCByb290LAo+ICsgICAgICogZmFsc2Ugd2hlbiBpdCBpcyBub3QuCj4gKyAg ICAgKi8KPiArICAgIGJvb2xfdCBpbl9ob3N0OwoKYm9vbC4KCj4gKwo+ICAgICAgc3RydWN0IGFy Y2hfdm1fZXZlbnQgKnZtX2V2ZW50Owo+ICAKPiAgICAgIHN0cnVjdCB2Y3B1X21zcnMgKm1zcnM7 Cj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2h2bS5oIGIveGVuL2luY2x1 ZGUvYXNtLXg4Ni9odm0vaHZtLmgKPiBpbmRleCAzZDMyNTBkZmYwLi4xZjVkNDNhOThkIDEwMDY0 NAo+IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2h2bS5oCj4gKysrIGIveGVuL2luY2x1 ZGUvYXNtLXg4Ni9odm0vaHZtLmgKPiBAQCAtMTY3LDYgKzE2Nyw4IEBAIHN0cnVjdCBodm1fZnVu Y3Rpb25fdGFibGUgewo+ICAKPiAgICAgIGludCAgKCpjcHVfdXApKHZvaWQpOwo+ICAgICAgdm9p ZCAoKmNwdV9kb3duKSh2b2lkKTsKPiArICAgIGludCAgKCpzdGFydF9yZWV4ZWN1dGVfaW5zdHJ1 Y3Rpb24pKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGdwYSwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbm1lbV9hY2Nlc3NfdCByZXF1aXJlZF9hY2Nl c3MpOwoKSSB3b3VsZCBuYW1lIHRoaXMgcmVleGVjdXRlX2luc3RydWN0aW9uLCBJIGRvbid0IHRo aW5rIHRoZSBzdGFydF8KcHJlZml4IGFkZHMgYW55IHZhbHVlIHRvIHRoZSBoYW5kbGVyLgoKVGhh bmtzLCBSb2dlci4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=