From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandru Stefan ISAILA Subject: [PATCH v1] x86/hvm: Generic instruction re-execution mechanism for execute faults Date: Fri, 16 Nov 2018 10:06:36 +0000 Message-ID: <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 1gNb1N-00073v-Lx for xen-devel@lists.xenproject.org; Fri, 16 Nov 2018 10:06:41 +0000 Content-Language: en-US Content-ID: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: "xen-devel@lists.xenproject.org" 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" , =?utf-8?B?TWloYWkgRG9uyJt1?= , Andrei Vlad LUTAS , "jbeulich@suse.com" , Alexandru Stefan ISAILA , Anshul Makkar , "roger.pau@citrix.com" List-Id: xen-devel@lists.xenproject.org QSBuZXcgbWVjaGFuaXNtIGhhcyBiZWVuIGFkZGVkIHdoaWNoIGlzIGFibGUgdG8gZ2VuZXJpY2Fs bHkgcmUtZXhlY3V0ZQ0KaW5zdHJ1Y3Rpb25zLCBieSB0ZW1wb3JhcmlseSBncmFudGluZyBwZXJt aXNzaW9ucyBpbnNpZGUgdGhlIEVQVCBhbmQNCnJlLWV4ZWN1dGluZyB0aGUgaW5zdHJ1Y3Rpb24g d2l0aCBhbGwgb3RoZXIgdmNwdXMgcGF1c2VkIGFuZCB3aXRoIHRoZQ0KbW9uaXRvciB0cmFwIGZs YWcgc2V0LiBUaGUgbWVjaGFuaXNtIGlzIHJlLWVudHJhbnQsIG1lYW5pbmcgdGhhdCBpcw0KY2Fw YWJsZSBvZiBoYW5kbGluZyBkaWZmZXJlbnQgdmlvbGF0aW9ucyBjYXVzZWQgYnkgdGhlIHNhbWUg aW5zdHJ1Y3Rpb24uDQpVc3VhbGx5LCBhIHNlY3VyaXR5IGFwcGxpYW5jZSB3aWxsIGRlY2lkZSB3 aGVuIGFuZCB3aGF0IGluc3RydWN0aW9ucw0KbXVzdCBiZSByZS1leGVjdXRlZCB0aGlzIHdheSBp bnN0cnVjdGlvbnMgdGhhdCBsaWUgaW4gbm9uLWV4ZWN1dGFibGUNCnBhZ2VzIGFuZCBpbnN0cnVj dGlvbnMgdGhhdCBjYXVzZSB0aGUgc2V0dGluZyBvZiBBY2Nlc3NlZCBhbmQvb3IgRGlydHkNCmZs YWdzIGluc2lkZSBwYWdlIHRhYmxlcyBhcmUgdHdvIGV4YW1wbGVzLg0KDQpTaWduZWQtb2ZmLWJ5 OiBBbGV4YW5kcnUgSXNhaWxhIDxhaXNhaWxhQGJpdGRlZmVuZGVyLmNvbT4NClNpZ25lZC1vZmYt Ynk6IEFuZHJlaSBMdXRhcyA8dmx1dGFzQGJpdGRlZmVuZGVyLmNvbT4NClNpZ25lZC1vZmYtYnk6 IE1paGFpIERvbsibdSA8bWRvbnR1QGJpdGRlZmVuZGVyLmNvbT4NClNpZ25lZC1vZmYtYnk6IEFu c2h1bCBNYWtrYXIgPGFuc2h1bC5tYWtrYXJAY2l0cml4LmNvbT4NCi0tLQ0KIHhlbi9hcmNoL3g4 Ni9kb21haW4uYyAgICAgICAgIHwgICAzICsNCiB4ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYyAg ICB8IDI1NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogeGVuL2FyY2gveDg2 L21tL21lbV9hY2Nlc3MuYyAgfCAgMjAgKystDQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4u aCAgfCAgMTggKysrDQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaHZtLmggfCAgIDIgKw0KIDUg ZmlsZXMgY2hhbmdlZCwgMjk1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQoNCmRpZmYg LS1naXQgYS94ZW4vYXJjaC94ODYvZG9tYWluLmMgYi94ZW4vYXJjaC94ODYvZG9tYWluLmMNCmlu ZGV4IDI5NWIxMGM0OGMuLmIwNjgwYTc2ZjEgMTAwNjQ0DQotLS0gYS94ZW4vYXJjaC94ODYvZG9t YWluLmMNCisrKyBiL3hlbi9hcmNoL3g4Ni9kb21haW4uYw0KQEAgLTM0Myw2ICszNDMsNyBAQCBp bnQgYXJjaF92Y3B1X2NyZWF0ZShzdHJ1Y3QgdmNwdSAqdikNCiAgICAgaW50IHJjOw0KIA0KICAg ICB2LT5hcmNoLmZsYWdzID0gVEZfa2VybmVsX21vZGU7DQorICAgIHYtPmFyY2guaW5faG9zdCA9 IDE7DQogDQogICAgIHJjID0gbWFwY2FjaGVfdmNwdV9pbml0KHYpOw0KICAgICBpZiAoIHJjICkN CkBAIC00ODIsNiArNDgzLDggQEAgaW50IGFyY2hfZG9tYWluX2NyZWF0ZShzdHJ1Y3QgZG9tYWlu ICpkLA0KICAgICBzcGluX2xvY2tfaW5pdCgmZC0+YXJjaC5lODIwX2xvY2spOw0KICAgICBzcGlu X2xvY2tfaW5pdCgmZC0+YXJjaC52dHNjX2xvY2spOw0KIA0KKyAgICBzcGluX2xvY2tfaW5pdCgm ZC0+YXJjaC5yZXhlY19sb2NrKTsNCisNCiAgICAgLyogTWluaW1hbCBpbml0aWFsaXNhdGlvbiBm b3IgdGhlIGlkbGUgZG9tYWluLiAqLw0KICAgICBpZiAoIHVubGlrZWx5KGlzX2lkbGVfZG9tYWlu KGQpKSApDQogICAgIHsNCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL3ZteC92bXguYyBi L3hlbi9hcmNoL3g4Ni9odm0vdm14L3ZteC5jDQppbmRleCAzNjVlZWIyODg2Li44NGY4NjQ4ZmMw IDEwMDY0NA0KLS0tIGEveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMNCisrKyBiL3hlbi9hcmNo L3g4Ni9odm0vdm14L3ZteC5jDQpAQCAtMjI4OSw2ICsyMjg5LDI1NSBAQCBzdGF0aWMgYm9vbCB2 bXhfZ2V0X3BlbmRpbmdfZXZlbnQoc3RydWN0IHZjcHUgKnYsIHN0cnVjdCB4ODZfZXZlbnQgKmlu Zm8pDQogICAgIHJldHVybiB0cnVlOw0KIH0NCiANCitzdGF0aWMgaW50IHZteF9zdGFydF9yZWV4 ZWN1dGVfaW5zdHJ1Y3Rpb24oc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgZ3BhLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZW5tZW1fYWNjZXNzX3Qg cmVxdWlyZWRfYWNjZXNzKQ0KK3sNCisgICAgLyoNCisgICAgICogTk9URTogU29tZSByZXF1aXJl ZF9hY2Nlc3NlcyBtYXkgYmUgaW52YWxpZC4gRm9yIGV4YW1wbGUsIG9uZQ0KKyAgICAgKiBjYW5u b3QgZ3JhbnQgb25seSB3cml0ZSBhY2Nlc3Mgb24gYSBnaXZlbiBwYWdlOyByZWFkL3dyaXRlDQor ICAgICAqIGFjY2VzcyBtdXN0IGJlIGdyYW50ZWQgaW5zdGVhZC4gVGhlc2UgaW5jb25zaXN0ZW5j aWVzIGFyZSBOT1QNCisgICAgICogY2hlY2tlZCBoZXJlLiBUaGUgY2FsbGVyIG11c3QgZW5zdXJl IHRoYXQgInJlcXVpcmVkX2FjY2VzcyIgaXMNCisgICAgICogYW4gYWxsb3dlZCBjb21iaW5hdGlv bi4NCisgICAgICovDQorDQorICAgIGludCByZXQgPSAwLCBpLCBmb3VuZCA9IDAsIHIgPSAwLCB3 ID0gMCwgeCA9IDAsIGxldmVsID0gMCwgbGVhdmUgPSAwOw0KKyAgICB4ZW5tZW1fYWNjZXNzX3Qg b2xkX2FjY2VzcywgbmV3X2FjY2VzczsNCisgICAgc3RydWN0IHZjcHUgKmE7DQorICAgIHVuc2ln bmVkIGludCBhbHRwMm1faWR4ID0NCisgICAgICAgIGFsdHAybV9hY3RpdmUodi0+ZG9tYWluKSA/ IGFsdHAybV92Y3B1X2lkeCh2KSA6IDA7DQorDQorICAgIHNwaW5fbG9jaygmdi0+ZG9tYWluLT5h cmNoLnJleGVjX2xvY2spOw0KKw0KKyAgICBsZXZlbCA9IHYtPmFyY2gucmV4ZWNfbGV2ZWw7DQor DQorICAgIC8qDQorICAgICAqIFN0ZXAgMTogTWFrZSBzdXJlIHNvbWVvbmUgZWxzZSBkaWRuJ3Qg Z2V0IHRvIHN0YXJ0IGFuDQorICAgICAqIGluc3RydWN0aW9uIHJlLWV4ZWN1dGlvbi4NCisgICAg ICovDQorICAgIGZvcl9lYWNoX3ZjcHUgKCB2LT5kb21haW4sIGEgKQ0KKyAgICB7DQorICAgICAg ICAvKiBXZSdyZSBpbnRlcmVzdGVkIGluIHBhdXNpbmcgYWxsIHRoZSBWQ1BVcyBleGNlcHQgc2Vs Zi92LiAqLw0KKyAgICAgICAgaWYgKCBhID09IHYgKQ0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0K Kw0KKyAgICAgICAgLyoNCisgICAgICAgICAqIENoZWNrIGlmICJhIiBzdGFydGVkIGFuIGluc3Ry dWN0aW9uIHJlLWV4ZWN1dGlvbi4gSWYgc28sDQorICAgICAgICAgKiByZXR1cm4gc3VjY2Vzcywg YXMgd2UnbGwgcmUtZXhlY3V0ZSBvdXIgaW5zdHJ1Y3Rpb24gbGF0ZXIuDQorICAgICAgICAgKi8N CisgICAgICAgIGlmICggYS0+YXJjaC5yZXhlY19sZXZlbCAhPSAwICkNCisgICAgICAgIHsNCisg ICAgICAgICAgICAvKiBXZSBzaG91bGQgYmUgcGF1c2VkLiAqLw0KKyAgICAgICAgICAgIHJldCA9 IDA7DQorICAgICAgICAgICAgbGVhdmUgPSAxOw0KKyAgICAgICAgICAgIGdvdG8gcmVsZWFzZV9h bmRfZXhpdDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICAvKiBTdGVwIDI6IE1ha2Ugc3Vy ZSB3ZSdyZSBub3QgZXhjZWVkaW5nIHRoZSBtYXggcmUtZXhlY3V0aW9uIGRlcHRoLiAqLw0KKyAg ICBpZiAoIGxldmVsID49IFJFRVhFQ1VUSU9OX01BWF9ERVBUSCApDQorICAgIHsNCisgICAgICAg IHJldCA9IC0xOw0KKyAgICAgICAgbGVhdmUgPSAxOw0KKyAgICAgICAgZ290byByZWxlYXNlX2Fu ZF9leGl0Ow0KKyAgICB9DQorDQorICAgIC8qDQorICAgICAqIFN0ZXAgMjogUGF1c2UgYWxsIHRo ZSBWQ1BVcywgZXhjZXB0IHNlbGYuIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGRvDQorICAgICAqIHRo aXMgb25seSBpZiB3ZSdyZSBhdCBuZXN0aW5nIGxldmVsIDA7IGlmIHdlJ3JlIGF0IGEgaGlnaGVy IGxldmVsDQorICAgICAqIG9mIG5lc3RlZCByZS1leGVjLCB0aGUgdmNwdXMgYXJlIGFscmVhZHkg cGF1c2VkLg0KKyAgICAgKi8NCisgICAgaWYgKCBsZXZlbCA9PSAwICkNCisgICAgew0KKyAgICAg ICAgZm9yX2VhY2hfdmNwdSAoIHYtPmRvbWFpbiwgYSApDQorICAgICAgICB7DQorICAgICAgICAg ICAgLyogV2UncmUgaW50ZXJlc3RlZCBpbiBwYXVzaW5nIGFsbCB0aGUgVkNQVXMgZXhjZXB0IHNl bGYvdi4gKi8NCisgICAgICAgICAgICBpZiAoIGEgPT0gdiApDQorICAgICAgICAgICAgICAgIGNv bnRpbnVlOw0KKw0KKyAgICAgICAgICAgIC8qIFBhdXNlLCBOTyBTWU5DISBXZSdyZSBnb25uYSBk byBvdXIgb3duIHN5bmNpbmcuICovDQorICAgICAgICAgICAgdmNwdV9wYXVzZV9ub3N5bmMoYSk7 DQorICAgICAgICB9DQorDQorICAgICAgICAvKg0KKyAgICAgICAgICogU3RlcCAzOiBXYWl0IGZv ciBhbGwgdGhlIHBhdXNlZCBWQ1BVcyB0byBhY3R1YWxseSBsZWF2ZSB0aGUgVk1YDQorICAgICAg ICAgKiBub24tcm9vdCByZWFsbSBhbmQgZW50ZXIgVk1YIHJvb3QuDQorICAgICAgICAgKi8NCisg ICAgICAgIGZvcl9lYWNoX3ZjcHUgKCB2LT5kb21haW4sIGEgKQ0KKyAgICAgICAgew0KKyAgICAg ICAgICAgIC8qIFdlJ3JlIGludGVyZXN0ZWQgaW4gcGF1c2luZyBhbGwgdGhlIFZDUFVzIGV4Y2Vw dCBzZWxmL3YuICovDQorICAgICAgICAgICAgaWYgKCBhID09IHYgKQ0KKyAgICAgICAgICAgICAg ICBjb250aW51ZTsNCisNCisgICAgICAgICAgICAvKiBQYXVzZSwgc3luY2VkLiAqLw0KKyAgICAg ICAgICAgIHdoaWxlICggIWEtPmFyY2guaW5faG9zdCApDQorICAgICAgICAgICAgICAgIGNwdV9y ZWxheCgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8qIFVwZGF0ZSB0aGUgcmV4ZWN1 dGlvbiBuZXh0aW5nIGxldmVsLiAqLw0KKyAgICB2LT5hcmNoLnJleGVjX2xldmVsKys7DQorDQor cmVsZWFzZV9hbmRfZXhpdDoNCisgICAgc3Bpbl91bmxvY2soJnYtPmRvbWFpbi0+YXJjaC5yZXhl Y19sb2NrKTsNCisNCisgICAgLyogSWYgd2UndmUgZ290IGVycm9ycyBzbyBmYXIsIHJldHVybi4g Ki8NCisgICAgaWYgKCBsZWF2ZSApDQorICAgICAgICByZXR1cm4gcmV0Ow0KKw0KKyAgICAvKg0K KyAgICAgKiBTdGVwIDQ6IFNhdmUgdGhlIGN1cnJlbnQgZ3BhICYgb2xkIGFjY2VzcyByaWdodHMu IEFsc28sIGNoZWNrIGlmIHRoaXMNCisgICAgICogaXMgYSAiZG91YmxlLWZhdWx0IiBvbiB0aGUg ZXhhY3Qgc2FtZSBHUEEsIGluIHdoaWNoIGNhc2UsIHdlIHdpbGwNCisgICAgICogcHJvbW90ZSB0 aGUgcmlnaHRzIG9mIHRoaXMgcGFydGljdWxhciBHUEEsIGFuZCB0cnkgYWdhaW4uDQorICAgICAq Lw0KKyAgICBmb3IgKCBpID0gMDsgaSA8IGxldmVsOyBpKysgKQ0KKyAgICB7DQorICAgICAgICBp ZiAoICh2LT5hcmNoLnJleGVjX2NvbnRleHRbaV0uZ3BhID4+IFBBR0VfU0hJRlQpID09DQorICAg ICAgICAgICAgIChncGEgPj4gUEFHRV9TSElGVCkgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAg IC8qIFRoaXMgR1BBIGlzIGFscmVhZHkgaW4gdGhlIHF1ZXVlLiAqLw0KKyAgICAgICAgICAgIGZv dW5kID0gMTsNCisNCisgICAgICAgICAgICBzd2l0Y2ggKHYtPmFyY2gucmV4ZWNfY29udGV4dFtp XS5jdXJfYWNjZXNzKSB7DQorICAgICAgICAgICAgICAgIGNhc2UgWEVOTUVNX2FjY2Vzc19yOiBy ID0gMTsgYnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgWEVOTUVNX2FjY2Vzc193OiB3ID0g MTsgYnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgWEVOTUVNX2FjY2Vzc194OiB4ID0gMTsg YnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgWEVOTUVNX2FjY2Vzc19yeDogciA9IHggPSAx OyBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSBYRU5NRU1fYWNjZXNzX3d4OiB3ID0geCA9 IDE7ICBicmVhazsNCisgICAgICAgICAgICAgICAgY2FzZSBYRU5NRU1fYWNjZXNzX3J3OiByID0g dyA9IDE7IGJyZWFrOw0KKyAgICAgICAgICAgICAgICBjYXNlIFhFTk1FTV9hY2Nlc3Nfcnd4OiBy ID0gdyA9IHggPSAxOyBicmVhazsNCisgICAgICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7IC8q IFdlIGRvbid0IGNhcmUgYWJvdXQgYW55IG90aGVyIGNhc2UuICovDQorICAgICAgICAgICAgfQ0K KyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8qDQorICAgICAqIEdldCB0aGUgY3VycmVudCBF UFQgYWNjZXNzIHJpZ2h0cy4gVGhleSB3aWxsIGJlIHJlc3RvcmVkIHdoZW4gd2UncmUgZG9uZS4N CisgICAgICogTm90ZSB0aGF0IHRoZSByZXN0b3JhdGlvbiBpcyBkb25lIGluIHJldmVyc2Utb3Jk ZXIsIGluIG9yZGVyIHRvIGVuc3VyZQ0KKyAgICAgKiB0aGF0IHRoZSBvcmlnaW5hbCBhY2Nlc3Mg cmlnaHRzIGFyZSByZXN0b3JlIGNvcnJlY3RseS4gT3RoZXJ3aXNlLCB3ZSBtYXkNCisgICAgICog cmVzdG9yZSB3aGF0ZXZlciBhY2Nlc3MgcmlnaHRzIHdlcmUgbW9kaWZpZWQgYnkgYW5vdGhlciBy ZS1leGVjdXRpb24NCisgICAgICogcmVxdWVzdCwgYW5kIHRoYXQgd291bGQgYmUgYmFkLg0KKyAg ICAgKi8NCisgICAgaWYgKCBwMm1fZ2V0X21lbV9hY2Nlc3Modi0+ZG9tYWluLCBfZ2ZuKGdwYSA+ PiBQQUdFX1NISUZUKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZF9hY2Nlc3Ms IGFsdHAybV9pZHgpICE9IDAgKQ0KKyAgICAgICAgcmV0dXJuIC0xOw0KKw0KKyAgICB2LT5hcmNo LnJleGVjX2NvbnRleHRbbGV2ZWxdLmdwYSA9IGdwYTsNCisgICAgdi0+YXJjaC5yZXhlY19jb250 ZXh0W2xldmVsXS5vbGRfYWNjZXNzID0gb2xkX2FjY2VzczsNCisgICAgdi0+YXJjaC5yZXhlY19j b250ZXh0W2xldmVsXS5vbGRfc2luZ2xlX3N0ZXAgPSB2LT5hcmNoLmh2bS5zaW5nbGVfc3RlcDsN CisNCisgICAgLyoNCisgICAgICogU3RlcCA1OiBNYWtlIHRoZSBHUEEgd2l0aCB0aGUgcmVxdWly ZWQgYWNjZXNzLCBzbyB3ZSBjYW4gcmUtZXhlY3V0ZQ0KKyAgICAgKiB0aGUgaW5zdHJ1Y3Rpb24u DQorICAgICAqLw0KKyAgICBzd2l0Y2ggKCByZXF1aXJlZF9hY2Nlc3MgKQ0KKyAgICB7DQorICAg ICAgICBjYXNlIFhFTk1FTV9hY2Nlc3NfcjogciA9IDE7IGJyZWFrOw0KKyAgICAgICAgY2FzZSBY RU5NRU1fYWNjZXNzX3c6IHcgPSAxOyBicmVhazsNCisgICAgICAgIGNhc2UgWEVOTUVNX2FjY2Vz c194OiB4ID0gMTsgYnJlYWs7DQorICAgICAgICBjYXNlIFhFTk1FTV9hY2Nlc3Nfcng6IHIgPSB4 ID0gMTsgYnJlYWs7DQorICAgICAgICBjYXNlIFhFTk1FTV9hY2Nlc3Nfd3g6IHcgPSB4ID0gMTsg IGJyZWFrOw0KKyAgICAgICAgY2FzZSBYRU5NRU1fYWNjZXNzX3J3OiByID0gdyA9IDE7IGJyZWFr Ow0KKyAgICAgICAgY2FzZSBYRU5NRU1fYWNjZXNzX3J3eDogciA9IHcgPSB4ID0gMTsgYnJlYWs7 DQorICAgICAgICBkZWZhdWx0OiBicmVhazsgLyogV2UgZG9uJ3QgY2FyZSBhYm91dCBhbnkgb3Ro ZXIgY2FzZS4gKi8NCisgICAgfQ0KKw0KKyAgICAvKiBOb3cgdHJhbnNmb3JtIG91ciBSV1ggdmFs dWVzIGluIGEgWEVOTUVNX2FjY2Vzc18qIGNvbnN0YW50LiAqLw0KKyAgICBpZiAoIHIgPT0gMCAm JiB3ID09IDAgJiYgeCA9PSAwICkNCisgICAgICAgIG5ld19hY2Nlc3MgPSBYRU5NRU1fYWNjZXNz X247DQorICAgIGVsc2UgaWYgKCByID09IDAgJiYgdyA9PSAwICYmIHggPT0gMSApDQorICAgICAg ICBuZXdfYWNjZXNzID0gWEVOTUVNX2FjY2Vzc194Ow0KKyAgICBlbHNlIGlmICggciA9PSAwICYm IHcgPT0gMSAmJiB4ID09IDAgKQ0KKyAgICAgICAgbmV3X2FjY2VzcyA9IFhFTk1FTV9hY2Nlc3Nf dzsNCisgICAgZWxzZSBpZiAoIHIgPT0gMCAmJiB3ID09IDEgJiYgeCA9PSAxICkNCisgICAgICAg IG5ld19hY2Nlc3MgPSBYRU5NRU1fYWNjZXNzX3d4Ow0KKyAgICBlbHNlIGlmICggciA9PSAxICYm IHcgPT0gMCAmJiB4ID09IDAgKQ0KKyAgICAgICAgbmV3X2FjY2VzcyA9IFhFTk1FTV9hY2Nlc3Nf cjsNCisgICAgZWxzZSBpZiAoIHIgPT0gMSAmJiB3ID09IDAgJiYgeCA9PSAxICkNCisgICAgICAg IG5ld19hY2Nlc3MgPSBYRU5NRU1fYWNjZXNzX3J4Ow0KKyAgICBlbHNlIGlmICggciA9PSAxICYm IHcgPT0gMSAmJiB4ID09IDAgKQ0KKyAgICAgICAgbmV3X2FjY2VzcyA9IFhFTk1FTV9hY2Nlc3Nf cnc7DQorICAgIGVsc2UgaWYgKCByID09IDEgJiYgdyA9PSAxICYmIHggPT0gMSApDQorICAgICAg ICBuZXdfYWNjZXNzID0gWEVOTUVNX2FjY2Vzc19yd3g7DQorICAgIGVsc2UNCisgICAgICAgIG5l d19hY2Nlc3MgPSByZXF1aXJlZF9hY2Nlc3M7IC8qIFNob3VsZCBuZXZlciBnZXQgaGVyZS4gKi8N CisNCisgICAgLyogQW5kIHNhdmUgdGhlIGN1cnJlbnQgYWNjZXNzIHJpZ2h0cy4gKi8NCisgICAg di0+YXJjaC5yZXhlY19jb250ZXh0W2xldmVsXS5jdXJfYWNjZXNzID0gbmV3X2FjY2VzczsNCisN CisgICAgLyogQXBwbHkgdGhlIGNoYW5nZXMgaW5zaWRlIHRoZSBFUFQuICovDQorICAgIGlmICgg cDJtX3NldF9tZW1fYWNjZXNzKHYtPmRvbWFpbiwgX2dmbihncGEgPj4gUEFHRV9TSElGVCksDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIE1FTU9QX0NNRF9NQVNLLCBuZXdfYWNj ZXNzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRwMm1faWR4KSAhPSAwICkNCisg ICAgICAgIHJldHVybiAtMTsNCisNCisgICAgLyoNCisgICAgICogU3RlcCA2OiBSZWNvbmZpZ3Vy ZSB0aGUgVk1DUywgc28gaXQgc3VpdHMgb3VyIG5lZWRzLiBXZSB3YW50IGENCisgICAgICogVk0t ZXhpdCB0byBiZSBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGluc3RydWN0aW9uIGhhcyBiZWVuDQorICAg ICAqIHN1Y2Nlc3NmdWxseSByZS1leGVjdXRlZC4NCisgICAgICovDQorICAgIGlmICggbGV2ZWwg PT0gMCApDQorICAgICAgICB2LT5hcmNoLmh2bS5zaW5nbGVfc3RlcCA9IDE7DQorDQorICAgIC8q IFN0ZXAgODogV2Ugc2hvdWxkIGJlIGRvbmUhICovDQorDQorICAgIHJldHVybiByZXQ7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgdm14X3N0b3BfcmVleGVjdXRlX2luc3RydWN0aW9uKHN0cnVjdCB2Y3B1 ICp2KQ0KK3sNCisgICAgaW50IHJldCA9IDAsIGk7DQorICAgIHN0cnVjdCB2Y3B1ICphOw0KKyAg ICB1bnNpZ25lZCBpbnQgYWx0cDJtX2lkeCA9DQorICAgICAgICBhbHRwMm1fYWN0aXZlKHYtPmRv bWFpbikgPyBhbHRwMm1fdmNwdV9pZHgodikgOiAwOw0KKw0KKyAgICBpZiAoIHYtPmFyY2gucmV4 ZWNfbGV2ZWwgPT0gMCApDQorICAgICAgICByZXR1cm4gMDsNCisNCisgICAgLyogU3RlcCAxOiBS ZXN0b3JlIG9yaWdpbmFsIEVQVCBhY2Nlc3MgcmlnaHRzIGZvciBlYWNoIEdQQS4gKi8NCisgICAg Zm9yICggaSA9IHYtPmFyY2gucmV4ZWNfbGV2ZWwgLSAxOyBpID49IDA7IGktLSApDQorICAgIHsN CisgICAgICAgIGlmICggdi0+YXJjaC5yZXhlY19jb250ZXh0W2ldLmdwYSAhPSBtZm5feChJTlZB TElEX01GTikgJiYNCisgICAgICAgICAgICAgcDJtX3NldF9tZW1fYWNjZXNzKHYtPmRvbWFpbiwN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nZm4odi0+YXJjaC5yZXhlY19jb250 ZXh0W2ldLmdwYSA+PiBQQUdFX1NISUZUKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEsIDAsIE1FTU9QX0NNRF9NQVNLLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdi0+YXJjaC5yZXhlY19jb250ZXh0W2ldLm9sZF9hY2Nlc3MsDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhbHRwMm1faWR4KSAhPSAwICkNCisgICAgICAgIHsNCisgICAgICAg ICAgICByZXQgPSAtMTsNCisgICAgICAgICAgICByZXR1cm4gcmV0Ow0KKyAgICAgICAgfQ0KKw0K KyAgICAgICAgdi0+YXJjaC5yZXhlY19jb250ZXh0W2ldLmdwYSA9IDA7DQorICAgICAgICB2LT5h cmNoLmh2bS5zaW5nbGVfc3RlcCA9IHYtPmFyY2gucmV4ZWNfY29udGV4dFtpXS5vbGRfc2luZ2xl X3N0ZXA7DQorICAgIH0NCisNCisgICAgc3Bpbl9sb2NrKCZ2LT5kb21haW4tPmFyY2gucmV4ZWNf bG9jayk7DQorDQorICAgIC8qIFN0ZXAgMjogUmVzZXQgdGhlIG5lc3RpbmcgbGV2ZWwgdG8gemVy by4gKi8NCisgICAgdi0+YXJjaC5yZXhlY19sZXZlbCA9IDA7DQorDQorICAgIC8qIFN0ZXAgMzog UmVzdW1lIGFsbCBvdGhlciBWQ1BVcy4gKi8NCisgICAgZm9yX2VhY2hfdmNwdSAoIHYtPmRvbWFp biwgYSApDQorICAgIHsNCisgICAgICAgIGlmICggYSA9PSB2ICkNCisgICAgICAgICAgICBjb250 aW51ZTsNCisNCisgICAgICAgIC8qIFVucGF1c2UgdGhlIFZDUFUuICovDQorICAgICAgICB2Y3B1 X3VucGF1c2UoYSk7DQorICAgIH0NCisNCisgICAgLyoNCisgICAgICogU3RlcCA0OiBSZW1vdmUg dGhlIE1PTklUT1IgdHJhcCBmbGFnLg0KKyAgICAgKiAtIHRoaXMgaXMgYWxyZWFkeSBkb25lIHdo ZW4gaGFuZGxpbmcgdGhlIGV4aXQuDQorICAgICAqLw0KKw0KKyAgICAvKiBTdGVwIDU6IFdlJ3Jl IGRvbmUhICovDQorDQorICAgIHNwaW5fdW5sb2NrKCZ2LT5kb21haW4tPmFyY2gucmV4ZWNfbG9j ayk7DQorDQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KIHN0YXRpYyBzdHJ1Y3QgaHZtX2Z1bmN0 aW9uX3RhYmxlIF9faW5pdGRhdGEgdm14X2Z1bmN0aW9uX3RhYmxlID0gew0KICAgICAubmFtZSAg ICAgICAgICAgICAgICAgPSAiVk1YIiwNCiAgICAgLmNwdV91cF9wcmVwYXJlICAgICAgID0gdm14 X2NwdV91cF9wcmVwYXJlLA0KQEAgLTIzMjQsNiArMjU3Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHZt X2Z1bmN0aW9uX3RhYmxlIF9faW5pdGRhdGEgdm14X2Z1bmN0aW9uX3RhYmxlID0gew0KICAgICAu aW52bHBnICAgICAgICAgICAgICAgPSB2bXhfaW52bHBnLA0KICAgICAuY3B1X3VwICAgICAgICAg ICAgICAgPSB2bXhfY3B1X3VwLA0KICAgICAuY3B1X2Rvd24gICAgICAgICAgICAgPSB2bXhfY3B1 X2Rvd24sDQorICAgIC5zdGFydF9yZWV4ZWN1dGVfaW5zdHJ1Y3Rpb24gPSB2bXhfc3RhcnRfcmVl eGVjdXRlX2luc3RydWN0aW9uLA0KICAgICAud2JpbnZkX2ludGVyY2VwdCAgICAgPSB2bXhfd2Jp bnZkX2ludGVyY2VwdCwNCiAgICAgLmZwdV9kaXJ0eV9pbnRlcmNlcHQgID0gdm14X2ZwdV9kaXJ0 eV9pbnRlcmNlcHQsDQogICAgIC5tc3JfcmVhZF9pbnRlcmNlcHQgICA9IHZteF9tc3JfcmVhZF9p bnRlcmNlcHQsDQpAQCAtMzU5MCw2ICszODQwLDggQEAgdm9pZCB2bXhfdm1leGl0X2hhbmRsZXIo c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpDQogICAgIHVuc2lnbmVkIGludCB2ZWN0b3IgPSAw LCBtb2RlOw0KICAgICBzdHJ1Y3QgdmNwdSAqdiA9IGN1cnJlbnQ7DQogDQorICAgIHYtPmFyY2gu aW5faG9zdCA9IDE7DQorDQogICAgIF9fdm1yZWFkKEdVRVNUX1JJUCwgICAgJnJlZ3MtPnJpcCk7 DQogICAgIF9fdm1yZWFkKEdVRVNUX1JTUCwgICAgJnJlZ3MtPnJzcCk7DQogICAgIF9fdm1yZWFk KEdVRVNUX1JGTEFHUywgJnJlZ3MtPnJmbGFncyk7DQpAQCAtNDExMiw2ICs0MzY0LDcgQEAgdm9p ZCB2bXhfdm1leGl0X2hhbmRsZXIoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpDQogICAgIGNh c2UgRVhJVF9SRUFTT05fTU9OSVRPUl9UUkFQX0ZMQUc6DQogICAgICAgICB2LT5hcmNoLmh2bS52 bXguZXhlY19jb250cm9sICY9IH5DUFVfQkFTRURfTU9OSVRPUl9UUkFQX0ZMQUc7DQogICAgICAg ICB2bXhfdXBkYXRlX2NwdV9leGVjX2NvbnRyb2wodik7DQorICAgICAgICB2bXhfc3RvcF9yZWV4 ZWN1dGVfaW5zdHJ1Y3Rpb24odik7DQogICAgICAgICBpZiAoIHYtPmFyY2guaHZtLnNpbmdsZV9z dGVwICkNCiAgICAgICAgIHsNCiAgICAgICAgICAgICBodm1fbW9uaXRvcl9kZWJ1ZyhyZWdzLT5y aXAsDQpAQCAtNDMzMCw2ICs0NTgzLDggQEAgYm9vbCB2bXhfdm1lbnRlcl9oZWxwZXIoY29uc3Qg c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpDQogICAgIGlmICggdW5saWtlbHkoY3Vyci0+YXJj aC5odm0udm14Lmxicl9mbGFncyAmIExCUl9GSVhVUF9NQVNLKSApDQogICAgICAgICBsYnJfZml4 dXAoKTsNCiANCisgICAgY3Vyci0+YXJjaC5pbl9ob3N0ID0gMDsNCisNCiAgICAgSFZNVFJBQ0Vf TkQoVk1FTlRSWSwgMCwgMS8qY3ljbGVzKi8sIDAsIDAsIDAsIDAsIDAsIDAsIDApOw0KIA0KICAg ICBfX3Ztd3JpdGUoR1VFU1RfUklQLCAgICByZWdzLT5yaXApOw0KZGlmZiAtLWdpdCBhL3hlbi9h cmNoL3g4Ni9tbS9tZW1fYWNjZXNzLmMgYi94ZW4vYXJjaC94ODYvbW0vbWVtX2FjY2Vzcy5jDQpp bmRleCAyZjEyOTVlNTZhLi41YWUzYTYxYjVjIDEwMDY0NA0KLS0tIGEveGVuL2FyY2gveDg2L21t L21lbV9hY2Nlc3MuYw0KKysrIGIveGVuL2FyY2gveDg2L21tL21lbV9hY2Nlc3MuYw0KQEAgLTIx MiwxMCArMjEyLDExIEBAIGJvb2wgcDJtX21lbV9hY2Nlc3NfY2hlY2socGFkZHJfdCBncGEsIHVu c2lnbmVkIGxvbmcgZ2xhLA0KICAgICB9DQogICAgIGlmICggdm1fZXZlbnRfY2hlY2tfcmluZyhk LT52bV9ldmVudF9tb25pdG9yKSAmJg0KICAgICAgICAgIGQtPmFyY2gubW9uaXRvci5pbmd1ZXN0 X3BhZ2VmYXVsdF9kaXNhYmxlZCAmJg0KLSAgICAgICAgIG5wZmVjLmtpbmQgIT0gbnBmZWNfa2lu ZF93aXRoX2dsYSApIC8qIGRvbid0IHNlbmQgYSBtZW1fZXZlbnQgKi8NCisgICAgICAgICBucGZl Yy5raW5kICE9IG5wZmVjX2tpbmRfd2l0aF9nbGEgJiYNCisgICAgICAgICBodm1fZnVuY3Muc3Rh cnRfcmVleGVjdXRlX2luc3RydWN0aW9uICkgLyogZG9uJ3Qgc2VuZCBhIG1lbV9ldmVudCAqLw0K ICAgICB7DQotICAgICAgICBodm1fZW11bGF0ZV9vbmVfdm1fZXZlbnQoRU1VTF9LSU5EX05PUk1B TCwgVFJBUF9pbnZhbGlkX29wLCBYODZfRVZFTlRfTk9fRUMpOw0KLQ0KKyAgICAgICAgdi0+YXJj aC52bV9ldmVudC0+ZW11bGF0ZV9mbGFncyA9IDA7DQorICAgICAgICBodm1fZnVuY3Muc3RhcnRf cmVleGVjdXRlX2luc3RydWN0aW9uKHYsIGdwYSwgWEVOTUVNX2FjY2Vzc19ydyk7DQogICAgICAg ICByZXR1cm4gdHJ1ZTsNCiAgICAgfQ0KIA0KQEAgLTIyNiw2ICsyMjcsNyBAQCBib29sIHAybV9t ZW1fYWNjZXNzX2NoZWNrKHBhZGRyX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGdsYSwNCiAgICAgICAg ICpyZXFfcHRyID0gcmVxOw0KIA0KICAgICAgICAgcmVxLT5yZWFzb24gPSBWTV9FVkVOVF9SRUFT T05fTUVNX0FDQ0VTUzsNCisNCiAgICAgICAgIHJlcS0+dS5tZW1fYWNjZXNzLmdmbiA9IGdmbl94 KGdmbik7DQogICAgICAgICByZXEtPnUubWVtX2FjY2Vzcy5vZmZzZXQgPSBncGEgJiAoKDEgPDwg UEFHRV9TSElGVCkgLSAxKTsNCiANCkBAIC0zNzcsNiArMzc5LDggQEAgbG9uZyBwMm1fc2V0X21l bV9hY2Nlc3Moc3RydWN0IGRvbWFpbiAqZCwgZ2ZuX3QgZ2ZuLCB1aW50MzJfdCBuciwNCiAgICAg cDJtX2FjY2Vzc190IGE7DQogICAgIHVuc2lnbmVkIGxvbmcgZ2ZuX2w7DQogICAgIGxvbmcgcmMg PSAwOw0KKyAgICBzdHJ1Y3QgdmNwdSAqdjsNCisgICAgaW50IGk7DQogDQogICAgIC8qIGFsdHAy bSB2aWV3IDAgaXMgdHJlYXRlZCBhcyB0aGUgaG9zdHAybSAqLw0KICNpZmRlZiBDT05GSUdfSFZN DQpAQCAtNDEzLDYgKzQxNywxNiBAQCBsb25nIHAybV9zZXRfbWVtX2FjY2VzcyhzdHJ1Y3QgZG9t YWluICpkLCBnZm5fdCBnZm4sIHVpbnQzMl90IG5yLA0KICAgICAgICAgaWYgKCByYyApDQogICAg ICAgICAgICAgYnJlYWs7DQogDQorICAgICAgICBmb3JfZWFjaF92Y3B1KGQsIHYpDQorICAgICAg ICB7DQorICAgICAgICAgICAgaWYgKCAhdi0+YXJjaC5yZXhlY19sZXZlbCApDQorICAgICAgICAg ICAgICAgIGNvbnRpbnVlOw0KKw0KKyAgICAgICAgICAgIGZvciAoIGkgPSB2LT5hcmNoLnJleGVj X2xldmVsIC0gMTsgaSA+PSAwOyBpLS0gKQ0KKyAgICAgICAgICAgICAgICBpZiAoICh2LT5hcmNo LnJleGVjX2NvbnRleHRbaV0uZ3BhID4+IFBBR0VfU0hJRlQpID09IGdmbl94KGdmbikgKQ0KKyAg ICAgICAgICAgICAgICAgICAgdi0+YXJjaC5yZXhlY19jb250ZXh0W2ldLmdwYSA9IG1mbl94KElO VkFMSURfTUZOKTsNCisgICAgICAgIH0NCisNCiAgICAgICAgIC8qIENoZWNrIGZvciBjb250aW51 YXRpb24gaWYgaXQncyBub3QgdGhlIGxhc3QgaXRlcmF0aW9uLiAqLw0KICAgICAgICAgaWYgKCBu ciA+ICsrc3RhcnQgJiYgIShzdGFydCAmIG1hc2spICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNr KCkgKQ0KICAgICAgICAgew0KZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWlu LmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2RvbWFpbi5oDQppbmRleCAyNzdmOTlmNjMzLi5kYmI2 OGYxMDhhIDEwMDY0NA0KLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaA0KKysrIGIv eGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaA0KQEAgLTQzOCw2ICs0MzgsOCBAQCBzdHJ1Y3Qg YXJjaF9kb21haW4NCiANCiAgICAgLyogRW11bGF0ZWQgZGV2aWNlcyBlbmFibGVkIGJpdG1hcC4g Ki8NCiAgICAgdWludDMyX3QgZW11bGF0aW9uX2ZsYWdzOw0KKw0KKyAgICBzcGlubG9ja190IHJl eGVjX2xvY2s7DQogfSBfX2NhY2hlbGluZV9hbGlnbmVkOw0KIA0KICNpZmRlZiBDT05GSUdfSFZN DQpAQCAtNjI5LDYgKzYzMSwyMiBAQCBzdHJ1Y3QgYXJjaF92Y3B1DQogICAgIC8qIEEgc2Vjb25k YXJ5IGNvcHkgb2YgdGhlIHZjcHUgdGltZSBpbmZvLiAqLw0KICAgICBYRU5fR1VFU1RfSEFORExF KHZjcHVfdGltZV9pbmZvX3QpIHRpbWVfaW5mb19ndWVzdDsNCiANCisjZGVmaW5lIFJFRVhFQ1VU SU9OX01BWF9ERVBUSCA4DQorICAgIHN0cnVjdCByZXhlY19jb250ZXh0X3Qgew0KKyAgICAgICAg dW5zaWduZWQgbG9uZyBncGE7DQorICAgICAgICB4ZW5tZW1fYWNjZXNzX3Qgb2xkX2FjY2VzczsN CisgICAgICAgIHhlbm1lbV9hY2Nlc3NfdCBjdXJfYWNjZXNzOw0KKyAgICAgICAgYm9vbF90IG9s ZF9zaW5nbGVfc3RlcDsNCisgICAgfSByZXhlY19jb250ZXh0W1JFRVhFQ1VUSU9OX01BWF9ERVBU SF07DQorDQorICAgIGludCByZXhlY19sZXZlbDsNCisNCisgICAgLyoNCisgICAgICogIFdpbGwg YmUgdHJ1ZSB3aGVuIHRoZSB2Y3B1IGlzIGluIFZNWCByb290LA0KKyAgICAgKiBmYWxzZSB3aGVu IGl0IGlzIG5vdC4NCisgICAgICovDQorICAgIGJvb2xfdCBpbl9ob3N0Ow0KKw0KICAgICBzdHJ1 Y3QgYXJjaF92bV9ldmVudCAqdm1fZXZlbnQ7DQogDQogICAgIHN0cnVjdCB2Y3B1X21zcnMgKm1z cnM7DQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaHZtLmggYi94ZW4vaW5j bHVkZS9hc20teDg2L2h2bS9odm0uaA0KaW5kZXggM2QzMjUwZGZmMC4uMWY1ZDQzYTk4ZCAxMDA2 NDQNCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2h2bS5oDQorKysgYi94ZW4vaW5jbHVk ZS9hc20teDg2L2h2bS9odm0uaA0KQEAgLTE2Nyw2ICsxNjcsOCBAQCBzdHJ1Y3QgaHZtX2Z1bmN0 aW9uX3RhYmxlIHsNCiANCiAgICAgaW50ICAoKmNwdV91cCkodm9pZCk7DQogICAgIHZvaWQgKCpj cHVfZG93bikodm9pZCk7DQorICAgIGludCAgKCpzdGFydF9yZWV4ZWN1dGVfaW5zdHJ1Y3Rpb24p KHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGdwYSwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeGVubWVtX2FjY2Vzc190IHJlcXVpcmVkX2FjY2Vzcyk7DQog DQogICAgIC8qIENvcHkgdXAgdG8gMTUgYnl0ZXMgZnJvbSBjYWNoZWQgaW5zdHJ1Y3Rpb24gYnl0 ZXMgYXQgY3VycmVudCBySVAuICovDQogICAgIHVuc2lnbmVkIGludCAoKmdldF9pbnNuX2J5dGVz KShzdHJ1Y3QgdmNwdSAqdiwgdWludDhfdCAqYnVmKTsNCi0tIA0KMi4xNy4xDQoNCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=