From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nadav Amit Subject: Re: [PATCH 01/17] Fix "x86/alternatives: Lockdep-enforce text_mutex in text_poke*()" Date: Thu, 17 Jan 2019 23:14:31 +0000 Message-ID: References: <20190117003259.23141-1-rick.p.edgecombe@intel.com> <20190117003259.23141-2-rick.p.edgecombe@intel.com> <20190117154701.78aa8e9d0130716e0d9ac026@kernel.org> <8817DE5F-BCF4-4F6A-A496-E0DB6889D86E@vmware.com> In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-ID: <8BD28AF92DFE89469A57FF1E181F7D82@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 To: "H. Peter Anvin" Cc: Masami Hiramatsu , Rick Edgecombe , Andy Lutomirski , Ingo Molnar , LKML , X86 ML , Thomas Gleixner , Borislav Petkov , Dave Hansen , Peter Zijlstra , Damian Tometzki , linux-integrity , LSM List , Andrew Morton , Kernel Hardening , Linux-MM , Will Deacon , Ard Biesheuvel , Kristen Carlson Accardi , "Dock, Deneen T" , Kees Cook , Dave Hansen List-ID: PiBPbiBKYW4gMTcsIDIwMTksIGF0IDI6NTkgUE0sIGhwYUB6eXRvci5jb20gd3JvdGU6DQo+IA0K PiBPbiBKYW51YXJ5IDE3LCAyMDE5IDI6Mzk6MTUgUE0gUFNULCBOYWRhdiBBbWl0IDxuYW1pdEB2 bXdhcmUuY29tPiB3cm90ZToNCj4+PiBPbiBKYW4gMTcsIDIwMTksIGF0IDE6MTUgUE0sIGhwYUB6 eXRvci5jb20gd3JvdGU6DQo+Pj4gDQo+Pj4gT24gSmFudWFyeSAxNiwgMjAxOSAxMDo0NzowMSBQ TSBQU1QsIE1hc2FtaSBIaXJhbWF0c3UNCj4+IDxtaGlyYW1hdEBrZXJuZWwub3JnPiB3cm90ZToN Cj4+Pj4gT24gV2VkLCAxNiBKYW4gMjAxOSAxNjozMjo0MyAtMDgwMA0KPj4+PiBSaWNrIEVkZ2Vj b21iZSA8cmljay5wLmVkZ2Vjb21iZUBpbnRlbC5jb20+IHdyb3RlOg0KPj4+PiANCj4+Pj4+IEZy b206IE5hZGF2IEFtaXQgPG5hbWl0QHZtd2FyZS5jb20+DQo+Pj4+PiANCj4+Pj4+IHRleHRfbXV0 ZXggaXMgY3VycmVudGx5IGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIHRleHRfcG9rZSgpIGlz DQo+Pj4+PiBjYWxsZWQsIGJ1dCB3ZSBrZ2RiIGRvZXMgbm90IHRha2UgdGhlIG11dGV4LCBhbmQg aW5zdGVhZA0KPj4gKnN1cHBvc2VkbHkqDQo+Pj4+PiBlbnN1cmVzIHRoZSBsb2NrIGlzIG5vdCB0 YWtlbiBhbmQgd2lsbCBub3QgYmUgYWNxdWlyZWQgYnkgYW55IG90aGVyDQo+Pj4+IGNvcmUNCj4+ Pj4+IHdoaWxlIHRleHRfcG9rZSgpIGlzIHJ1bm5pbmcuDQo+Pj4+PiANCj4+Pj4+IFRoZSByZWFz b24gZm9yIHRoZSAic3VwcG9zZWRseSIgY29tbWVudCBpcyB0aGF0IGl0IGlzIG5vdCBlbnRpcmVs eQ0KPj4+PiBjbGVhcg0KPj4+Pj4gdGhhdCB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGlmIGdkYl9k b19yb3VuZHVwIGlzIHplcm8uDQo+Pj4+PiANCj4+Pj4+IFRoaXMgcGF0Y2ggY3JlYXRlcyB0d28g d3JhcHBlciBmdW5jdGlvbnMsIHRleHRfcG9rZSgpIGFuZA0KPj4+Pj4gdGV4dF9wb2tlX2tnZGIo KSB3aGljaCBkbyBvciBkbyBub3QgcnVuIHRoZSBsb2NrZGVwIGFzc2VydGlvbg0KPj4+Pj4gcmVz cGVjdGl2ZWx5Lg0KPj4+Pj4gDQo+Pj4+PiBXaGlsZSB3ZSBhcmUgYXQgaXQsIGNoYW5nZSB0aGUg cmV0dXJuIGNvZGUgb2YgdGV4dF9wb2tlKCkgdG8NCj4+Pj4gc29tZXRoaW5nDQo+Pj4+PiBtZWFu aW5nZnVsLiBPbmUgZGF5LCBjYWxsZXJzIG1pZ2h0IGFjdHVhbGx5IHJlc3BlY3QgaXQgYW5kIHRo ZQ0KPj4+PiBleGlzdGluZw0KPj4+Pj4gQlVHX09OKCkgd2hlbiBwYXRjaGluZyBmYWlscyBjb3Vs ZCBiZSByZW1vdmVkLiBGb3Iga2dkYiwgdGhlIHJldHVybg0KPj4+Pj4gdmFsdWUgY2FuIGFjdHVh bGx5IGJlIHVzZWQuDQo+Pj4+IA0KPj4+PiBMb29rcyBnb29kIHRvIG1lLg0KPj4+PiANCj4+Pj4g UmV2aWV3ZWQtYnk6IE1hc2FtaSBIaXJhbWF0c3UgPG1oaXJhbWF0QGtlcm5lbC5vcmc+DQo+Pj4+ IA0KPj4+PiBUaGFuayB5b3UsDQo+Pj4+IA0KPj4+Pj4gQ2M6IEFuZHkgTHV0b21pcnNraSA8bHV0 b0BrZXJuZWwub3JnPg0KPj4+Pj4gQ2M6IEtlZXMgQ29vayA8a2Vlc2Nvb2tAY2hyb21pdW0ub3Jn Pg0KPj4+Pj4gQ2M6IERhdmUgSGFuc2VuIDxkYXZlLmhhbnNlbkBpbnRlbC5jb20+DQo+Pj4+PiBD YzogTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAa2VybmVsLm9yZz4NCj4+Pj4+IEZpeGVzOiA5 MjIyZjYwNjUwNmMgKCJ4ODYvYWx0ZXJuYXRpdmVzOiBMb2NrZGVwLWVuZm9yY2UgdGV4dF9tdXRl eA0KPj4gaW4NCj4+Pj4gdGV4dF9wb2tlKigpIikNCj4+Pj4+IFN1Z2dlc3RlZC1ieTogUGV0ZXIg WmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3JnPg0KPj4+Pj4gQWNrZWQtYnk6IEppcmkgS29z aW5hIDxqa29zaW5hQHN1c2UuY3o+DQo+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBOYWRhdiBBbWl0IDxu YW1pdEB2bXdhcmUuY29tPg0KPj4+Pj4gU2lnbmVkLW9mZi1ieTogUmljayBFZGdlY29tYmUgPHJp Y2sucC5lZGdlY29tYmVAaW50ZWwuY29tPg0KPj4+Pj4gLS0tDQo+Pj4+PiBhcmNoL3g4Ni9pbmNs dWRlL2FzbS90ZXh0LXBhdGNoaW5nLmggfCAgMSArDQo+Pj4+PiBhcmNoL3g4Ni9rZXJuZWwvYWx0 ZXJuYXRpdmUuYyAgICAgICAgfCA1Mg0KPj4+PiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t DQo+Pj4+PiBhcmNoL3g4Ni9rZXJuZWwva2dkYi5jICAgICAgICAgICAgICAgfCAxMSArKystLS0N Cj4+Pj4+IDMgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0p DQo+Pj4+PiANCj4+Pj4+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBh dGNoaW5nLmgNCj4+Pj4gYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgNCj4+ Pj4+IGluZGV4IGU4NWZmNjVjNDNjMy4uZjhmYzhlODZjZjAxIDEwMDY0NA0KPj4+Pj4gLS0tIGEv YXJjaC94ODYvaW5jbHVkZS9hc20vdGV4dC1wYXRjaGluZy5oDQo+Pj4+PiArKysgYi9hcmNoL3g4 Ni9pbmNsdWRlL2FzbS90ZXh0LXBhdGNoaW5nLmgNCj4+Pj4+IEBAIC0zNSw2ICszNSw3IEBAIGV4 dGVybiB2b2lkICp0ZXh0X3Bva2VfZWFybHkodm9pZCAqYWRkciwgY29uc3QNCj4+IHZvaWQNCj4+ Pj4gKm9wY29kZSwgc2l6ZV90IGxlbik7DQo+Pj4+PiAqIGluY29uc2lzdGVudCBpbnN0cnVjdGlv biB3aGlsZSB5b3UgcGF0Y2guDQo+Pj4+PiAqLw0KPj4+Pj4gZXh0ZXJuIHZvaWQgKnRleHRfcG9r ZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOw0KPj4+Pj4gK2V4 dGVybiB2b2lkICp0ZXh0X3Bva2Vfa2dkYih2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUs IHNpemVfdA0KPj4+PiBsZW4pOw0KPj4+Pj4gZXh0ZXJuIGludCBwb2tlX2ludDNfaGFuZGxlcihz dHJ1Y3QgcHRfcmVncyAqcmVncyk7DQo+Pj4+PiBleHRlcm4gdm9pZCAqdGV4dF9wb2tlX2JwKHZv aWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90DQo+Pj4+IGxlbiwgdm9pZCAqaGFu ZGxlcik7DQo+Pj4+PiBleHRlcm4gaW50IGFmdGVyX2Jvb3RtZW07DQo+Pj4+PiBkaWZmIC0tZ2l0 IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMNCj4+Pj4gYi9hcmNoL3g4Ni9rZXJuZWwv YWx0ZXJuYXRpdmUuYw0KPj4+Pj4gaW5kZXggZWJlYWM0ODdhMjBjLi5jNmEzYTEwYTJmZDUgMTAw NjQ0DQo+Pj4+PiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYw0KPj4+Pj4gKysr IGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMNCj4+Pj4+IEBAIC02NzgsMTggKzY3OCw3 IEBAIHZvaWQgKl9faW5pdF9vcl9tb2R1bGUgdGV4dF9wb2tlX2Vhcmx5KHZvaWQNCj4+Pj4gKmFk ZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwNCj4+Pj4+IHJldHVybiBhZGRyOw0KPj4+Pj4gfQ0KPj4+ Pj4gDQo+Pj4+PiAtLyoqDQo+Pj4+PiAtICogdGV4dF9wb2tlIC0gVXBkYXRlIGluc3RydWN0aW9u cyBvbiBhIGxpdmUga2VybmVsDQo+Pj4+PiAtICogQGFkZHI6IGFkZHJlc3MgdG8gbW9kaWZ5DQo+ Pj4+PiAtICogQG9wY29kZTogc291cmNlIG9mIHRoZSBjb3B5DQo+Pj4+PiAtICogQGxlbjogbGVu Z3RoIHRvIGNvcHkNCj4+Pj4+IC0gKg0KPj4+Pj4gLSAqIE9ubHkgYXRvbWljIHRleHQgcG9rZS9z ZXQgc2hvdWxkIGJlIGFsbG93ZWQgd2hlbiBub3QgZG9pbmcNCj4+IGVhcmx5DQo+Pj4+IHBhdGNo aW5nLg0KPj4+Pj4gLSAqIEl0IG1lYW5zIHRoZSBzaXplIG11c3QgYmUgd3JpdGFibGUgYXRvbWlj YWxseSBhbmQgdGhlIGFkZHJlc3MNCj4+Pj4gbXVzdCBiZSBhbGlnbmVkDQo+Pj4+PiAtICogaW4g YSB3YXkgdGhhdCBwZXJtaXRzIGFuIGF0b21pYyB3cml0ZS4gSXQgYWxzbyBtYWtlcyBzdXJlIHdl DQo+PiBmaXQNCj4+Pj4gb24gYSBzaW5nbGUNCj4+Pj4+IC0gKiBwYWdlLg0KPj4+Pj4gLSAqLw0K Pj4+Pj4gLXZvaWQgKnRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNp emVfdCBsZW4pDQo+Pj4+PiArc3RhdGljIHZvaWQgKl9fdGV4dF9wb2tlKHZvaWQgKmFkZHIsIGNv bnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90DQo+PiBsZW4pDQo+Pj4+PiB7DQo+Pj4+PiAJdW5zaWdu ZWQgbG9uZyBmbGFnczsNCj4+Pj4+IAljaGFyICp2YWRkcjsNCj4+Pj4+IEBAIC03MDIsOCArNjkx LDYgQEAgdm9pZCAqdGV4dF9wb2tlKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwNCj4+ Pj4gc2l6ZV90IGxlbikNCj4+Pj4+ICovDQo+Pj4+PiAJQlVHX09OKCFhZnRlcl9ib290bWVtKTsN Cj4+Pj4+IA0KPj4+Pj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ0ZXh0X211dGV4KTsNCj4+Pj4+ IC0NCj4+Pj4+IAlpZiAoIWNvcmVfa2VybmVsX3RleHQoKHVuc2lnbmVkIGxvbmcpYWRkcikpIHsN Cj4+Pj4+IAkJcGFnZXNbMF0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7DQo+Pj4+PiAJCXBhZ2Vz WzFdID0gdm1hbGxvY190b19wYWdlKGFkZHIgKyBQQUdFX1NJWkUpOw0KPj4+Pj4gQEAgLTczMiw2 ICs3MTksNDMgQEAgdm9pZCAqdGV4dF9wb2tlKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQNCj4+ICpv cGNvZGUsDQo+Pj4+IHNpemVfdCBsZW4pDQo+Pj4+PiByZXR1cm4gYWRkcjsNCj4+Pj4+IH0NCj4+ Pj4+IA0KPj4+Pj4gKy8qKg0KPj4+Pj4gKyAqIHRleHRfcG9rZSAtIFVwZGF0ZSBpbnN0cnVjdGlv bnMgb24gYSBsaXZlIGtlcm5lbA0KPj4+Pj4gKyAqIEBhZGRyOiBhZGRyZXNzIHRvIG1vZGlmeQ0K Pj4+Pj4gKyAqIEBvcGNvZGU6IHNvdXJjZSBvZiB0aGUgY29weQ0KPj4+Pj4gKyAqIEBsZW46IGxl bmd0aCB0byBjb3B5DQo+Pj4+PiArICoNCj4+Pj4+ICsgKiBPbmx5IGF0b21pYyB0ZXh0IHBva2Uv c2V0IHNob3VsZCBiZSBhbGxvd2VkIHdoZW4gbm90IGRvaW5nDQo+PiBlYXJseQ0KPj4+PiBwYXRj aGluZy4NCj4+Pj4+ICsgKiBJdCBtZWFucyB0aGUgc2l6ZSBtdXN0IGJlIHdyaXRhYmxlIGF0b21p Y2FsbHkgYW5kIHRoZSBhZGRyZXNzDQo+Pj4+IG11c3QgYmUgYWxpZ25lZA0KPj4+Pj4gKyAqIGlu IGEgd2F5IHRoYXQgcGVybWl0cyBhbiBhdG9taWMgd3JpdGUuIEl0IGFsc28gbWFrZXMgc3VyZSB3 ZQ0KPj4gZml0DQo+Pj4+IG9uIGEgc2luZ2xlDQo+Pj4+PiArICogcGFnZS4NCj4+Pj4+ICsgKi8N Cj4+Pj4+ICt2b2lkICp0ZXh0X3Bva2Uodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBz aXplX3QgbGVuKQ0KPj4+Pj4gK3sNCj4+Pj4+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmdGV4dF9t dXRleCk7DQo+Pj4+PiArDQo+Pj4+PiArCXJldHVybiBfX3RleHRfcG9rZShhZGRyLCBvcGNvZGUs IGxlbik7DQo+Pj4+PiArfQ0KPj4+Pj4gKw0KPj4+Pj4gKy8qKg0KPj4+Pj4gKyAqIHRleHRfcG9r ZV9rZ2RiIC0gVXBkYXRlIGluc3RydWN0aW9ucyBvbiBhIGxpdmUga2VybmVsIGJ5IGtnZGINCj4+ Pj4+ICsgKiBAYWRkcjogYWRkcmVzcyB0byBtb2RpZnkNCj4+Pj4+ICsgKiBAb3Bjb2RlOiBzb3Vy Y2Ugb2YgdGhlIGNvcHkNCj4+Pj4+ICsgKiBAbGVuOiBsZW5ndGggdG8gY29weQ0KPj4+Pj4gKyAq DQo+Pj4+PiArICogT25seSBhdG9taWMgdGV4dCBwb2tlL3NldCBzaG91bGQgYmUgYWxsb3dlZCB3 aGVuIG5vdCBkb2luZw0KPj4gZWFybHkNCj4+Pj4gcGF0Y2hpbmcuDQo+Pj4+PiArICogSXQgbWVh bnMgdGhlIHNpemUgbXVzdCBiZSB3cml0YWJsZSBhdG9taWNhbGx5IGFuZCB0aGUgYWRkcmVzcw0K Pj4+PiBtdXN0IGJlIGFsaWduZWQNCj4+Pj4+ICsgKiBpbiBhIHdheSB0aGF0IHBlcm1pdHMgYW4g YXRvbWljIHdyaXRlLiBJdCBhbHNvIG1ha2VzIHN1cmUgd2UNCj4+IGZpdA0KPj4+PiBvbiBhIHNp bmdsZQ0KPj4+Pj4gKyAqIHBhZ2UuDQo+Pj4+PiArICoNCj4+Pj4+ICsgKiBDb250ZXh0OiBzaG91 bGQgb25seSBiZSB1c2VkIGJ5IGtnZGIsIHdoaWNoIGVuc3VyZXMgbm8gb3RoZXINCj4+IGNvcmUN Cj4+Pj4gaXMgcnVubmluZywNCj4+Pj4+ICsgKgkgICAgZGVzcGl0ZSB0aGUgZmFjdCBpdCBkb2Vz IG5vdCBob2xkIHRoZSB0ZXh0X211dGV4Lg0KPj4+Pj4gKyAqLw0KPj4+Pj4gK3ZvaWQgKnRleHRf cG9rZV9rZ2RiKHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwgc2l6ZV90IGxlbikNCj4+ Pj4+ICt7DQo+Pj4+PiArCXJldHVybiBfX3RleHRfcG9rZShhZGRyLCBvcGNvZGUsIGxlbik7DQo+ Pj4+PiArfQ0KPj4+Pj4gKw0KPj4+Pj4gc3RhdGljIHZvaWQgZG9fc3luY19jb3JlKHZvaWQgKmlu Zm8pDQo+Pj4+PiB7DQo+Pj4+PiAJc3luY19jb3JlKCk7DQo+Pj4+PiBkaWZmIC0tZ2l0IGEvYXJj aC94ODYva2VybmVsL2tnZGIuYyBiL2FyY2gveDg2L2tlcm5lbC9rZ2RiLmMNCj4+Pj4+IGluZGV4 IDVkYjA4NDI1MDYzZS4uMTQ2MTU0NGNiYThiIDEwMDY0NA0KPj4+Pj4gLS0tIGEvYXJjaC94ODYv a2VybmVsL2tnZGIuYw0KPj4+Pj4gKysrIGIvYXJjaC94ODYva2VybmVsL2tnZGIuYw0KPj4+Pj4g QEAgLTc1OCwxMyArNzU4LDEzIEBAIGludCBrZ2RiX2FyY2hfc2V0X2JyZWFrcG9pbnQoc3RydWN0 IGtnZGJfYmtwdA0KPj4+PiAqYnB0KQ0KPj4+Pj4gaWYgKCFlcnIpDQo+Pj4+PiAJCXJldHVybiBl cnI7DQo+Pj4+PiAJLyoNCj4+Pj4+IC0JICogSXQgaXMgc2FmZSB0byBjYWxsIHRleHRfcG9rZSgp IGJlY2F1c2Ugbm9ybWFsIGtlcm5lbCBleGVjdXRpb24NCj4+Pj4+ICsJICogSXQgaXMgc2FmZSB0 byBjYWxsIHRleHRfcG9rZV9rZ2RiKCkgYmVjYXVzZSBub3JtYWwga2VybmVsDQo+Pj4+IGV4ZWN1 dGlvbg0KPj4+Pj4gKiBpcyBzdG9wcGVkIG9uIGFsbCBjb3Jlcywgc28gbG9uZyBhcyB0aGUgdGV4 dF9tdXRleCBpcyBub3QNCj4+Pj4gbG9ja2VkLg0KPj4+Pj4gKi8NCj4+Pj4+IAlpZiAobXV0ZXhf aXNfbG9ja2VkKCZ0ZXh0X211dGV4KSkNCj4+Pj4+IAkJcmV0dXJuIC1FQlVTWTsNCj4+Pj4+IC0J dGV4dF9wb2tlKCh2b2lkICopYnB0LT5icHRfYWRkciwgYXJjaF9rZ2RiX29wcy5nZGJfYnB0X2lu c3RyLA0KPj4+Pj4gLQkJICBCUkVBS19JTlNUUl9TSVpFKTsNCj4+Pj4+ICsJdGV4dF9wb2tlX2tn ZGIoKHZvaWQgKilicHQtPmJwdF9hZGRyLA0KPj4gYXJjaF9rZ2RiX29wcy5nZGJfYnB0X2luc3Ry LA0KPj4+Pj4gKwkJICAgICAgIEJSRUFLX0lOU1RSX1NJWkUpOw0KPj4+Pj4gCWVyciA9IHByb2Jl X2tlcm5lbF9yZWFkKG9wYywgKGNoYXIgKilicHQtPmJwdF9hZGRyLA0KPj4+PiBCUkVBS19JTlNU Ul9TSVpFKTsNCj4+Pj4+IGlmIChlcnIpDQo+Pj4+PiAJCXJldHVybiBlcnI7DQo+Pj4+PiBAQCAt NzgzLDEyICs3ODMsMTMgQEAgaW50IGtnZGJfYXJjaF9yZW1vdmVfYnJlYWtwb2ludChzdHJ1Y3QN Cj4+Pj4ga2dkYl9ia3B0ICpicHQpDQo+Pj4+PiBpZiAoYnB0LT50eXBlICE9IEJQX1BPS0VfQlJF QUtQT0lOVCkNCj4+Pj4+IAkJZ290byBrbmxfd3JpdGU7DQo+Pj4+PiAJLyoNCj4+Pj4+IC0JICog SXQgaXMgc2FmZSB0byBjYWxsIHRleHRfcG9rZSgpIGJlY2F1c2Ugbm9ybWFsIGtlcm5lbCBleGVj dXRpb24NCj4+Pj4+ICsJICogSXQgaXMgc2FmZSB0byBjYWxsIHRleHRfcG9rZV9rZ2RiKCkgYmVj YXVzZSBub3JtYWwga2VybmVsDQo+Pj4+IGV4ZWN1dGlvbg0KPj4+Pj4gKiBpcyBzdG9wcGVkIG9u IGFsbCBjb3Jlcywgc28gbG9uZyBhcyB0aGUgdGV4dF9tdXRleCBpcyBub3QNCj4+Pj4gbG9ja2Vk Lg0KPj4+Pj4gKi8NCj4+Pj4+IAlpZiAobXV0ZXhfaXNfbG9ja2VkKCZ0ZXh0X211dGV4KSkNCj4+ Pj4+IAkJZ290byBrbmxfd3JpdGU7DQo+Pj4+PiAtCXRleHRfcG9rZSgodm9pZCAqKWJwdC0+YnB0 X2FkZHIsIGJwdC0+c2F2ZWRfaW5zdHIsDQo+Pj4+IEJSRUFLX0lOU1RSX1NJWkUpOw0KPj4+Pj4g Kwl0ZXh0X3Bva2Vfa2dkYigodm9pZCAqKWJwdC0+YnB0X2FkZHIsIGJwdC0+c2F2ZWRfaW5zdHIs DQo+Pj4+PiArCQkgICAgICAgQlJFQUtfSU5TVFJfU0laRSk7DQo+Pj4+PiAJZXJyID0gcHJvYmVf a2VybmVsX3JlYWQob3BjLCAoY2hhciAqKWJwdC0+YnB0X2FkZHIsDQo+Pj4+IEJSRUFLX0lOU1RS X1NJWkUpOw0KPj4+Pj4gaWYgKGVyciB8fCBtZW1jbXAob3BjLCBicHQtPnNhdmVkX2luc3RyLCBC UkVBS19JTlNUUl9TSVpFKSkNCj4+Pj4+IAkJZ290byBrbmxfd3JpdGU7DQo+Pj4+PiAtLSANCj4+ Pj4+IDIuMTcuMQ0KPj4+IA0KPj4+IElmIHlvdSBhcmUgcmVvcmdhbml6aW5nIHRoaXMgY29kZSwg cGxlYXNlIGRvIHNvIHNvIHRoYXQgdGhlIGNhbGxlcg0KPj4gZG9lc27igJl0DQo+Pj4gaGF2ZSB0 byB3b3JyeSBhYm91dCBpZiBpdCBzaG91bGQgY2FsbCB0ZXh0X3Bva2VfYnAoKSBvcg0KPj4gdGV4 dF9wb2tlX2Vhcmx5KCkuDQo+Pj4gUmlnaHQgbm93IHRoZSBjYWxsZXIgaGFkIHRvIGtub3cgdGhh dCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UuDQo+PiANCj4+IERpZCB5b3UgbG9vayBhdCAiWzExLzE3 XSB4ODYvanVtcC1sYWJlbDogcmVtb3ZlIHN1cHBvcnQgZm9yIGN1c3RvbQ0KPj4gcG9rZXLigJ0/ DQo+PiANCj4+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3BhdGNod29yay9wYXRjaC8xMDMyODU3 Lw0KPj4gDQo+PiBJZiB0aGlzIGlzIG5vdCB3aGF0IHlvdSByZWdhcmQsIHBsZWFzZSBiZSBtb3Jl IGNvbmNyZXRlLg0KPj4gdGV4dF9wb2tlX2Vhcmx5KCkNCj4+IGlzIHN0aWxsIHVzZWQgZGlyZWN0 bHkgb24gaW5pdCBhbmQgd2hpbGUgbW9kdWxlcyBhcmUgbG9hZGVkLCB3aGljaA0KPj4gbWlnaHQg bm90DQo+PiBiZSBncmVhdCwgYnV0IGlzIG91dHNpZGUgb2YgdGhlIHNjb3BlIG9mIHRoaXMgcGF0 Y2gtc2V0Lg0KPiANCj4gSSBkb24ndCB0aGluayBpdCBpcyBvdXQgb2Ygc2NvcGUsIGFsdGhvdWdo IHRoYXQgcGF0Y2ggaXMgYSBodWdlIHN0ZXAgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4NCj4gDQo+ IHRleHRfcG9rZV97ZWFybHksYnAsLi4ufSwgaG93ZXZlciwgc2hvdWxkIGJlIGZ1bGx5IGludGVy bmFsLCB0aGF0IGlzLCBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgd2Ugc2hvdWxkIHByZXNlbnQgYSBz aW5nbGUgaW50ZXJmYWNlLCBwcmVmZXJhYmx5IGNhbGxlZCB0ZXh0X3Bva2UoKSwgdG8gdGhlIG91 dHNpZGUgd29ybGQuDQo+IA0KPiBJIHRoaW5rIHdlIGhhdmUgdGhyZWUgc3ViY2FzZXM6DQo+IA0K PiAxLiBFYXJseSwgVVAsIG9yIHVuZGVyIHN0b3BfbWFjaGluZSgpOw0KPiAyLiBBdG9taWMgYW5k IGFsaWduZWQ7DQo+IDMuIEJyZWFrcG9pbnQuDQo+IA0KPiBNeSBwcm9wb3NlZCBhbGdvcml0aG0g c2hvdWxkIHJlbW92ZSB0aGUgbmVlZCBmb3IgYSBmaXh1cCB3aGljaCBzaG91bGQgaGVscCB0aGlz IGludGVyZmFjZSwgdG9vLg0KDQpUaGF04oCZcyBhbm90aGVyIHJlYXNvbiB3aHkgc3VjaCBjaGFu Z2UgbWlnaHQgYmUgZG9uZSBsYXRlciAoYWZ0ZXIgeW91cg0KY2hhbmdlcyBhcmUgbWVyZ2VkKS4g VGhlIG1haW4gcmVhc29uIGlzIHRoYXQgUmljayB3YXMga2luZCBlbm91Z2ggdG8NCmRlYWwgd2l0 aCB0aGUgd2hvbGUgcGF0Y2gtc2V0Lg0KDQo+IFRoZSBzcGVjaWZpYyBhbGlnbm1lbnQgbmVlZGVk IGZvciAjMiBpcyBzdGFydGVkIGJ5IHRoZSBoYXJkd2FyZSBwZW9wbGUgdG8gYmUgbm90IGNyb3Nz aW5nIDE2IGJ5dGVzIChOT1QgYSBjYWNoZSBsaW5lKSBvbiBhbnkgQ1BVIHdlIHN1cHBvcnQgU01Q IG9uIGFuZCwgb2YgY291cnNlLCBiZWluZyBwb3NzaWJsZSB0byBkbyBhdG9taWNhbGx5IGRvIG9u IHRoZSBzcGVjaWZpYyBDUFUgKG5vdGUgdGhhdCB3ZSAqY2FuKiBkbyBhIHJlZHVuZGFudGx5IGxh cmdlIHN0b3JlIG9mIGV4aXN0aW5nIGJ5dGVzLCB3aGljaCBhZGRzIGZsZXhpYmlsaXR5LikNCj4g DQo+IFRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZSBhbnkgQ1BVIHN1cHBvcnRpbmcgU1NFIGNh biBkbyBhbiBhdG9taWMgKGZvciBvdXIgcHVycG9zZXMpIGFsaWduZWQgMTYtYnl0ZSBzdG9yZSB2 aWEgTU9WQVBTOyBvZiBjb3Vyc2UgYW55IENQVSB3aXRoIGN4MTYgY2FuIGRvIGl0IHdpdGhvdXQg U1NFIHJlZ2lzdGVycy4gRm9yIG9sZGVyIENQVXMgd2UgbWF5IGJlIGxpbWl0ZWQgdG8gOC1ieXRl IHN0b3JlcyAoY3g4KSBvciBldmVuIDQtYnl0ZSBzdG9yZXMgYmVmb3JlIHdlIG5lZWQgdG8gdXNl IHRoZSBicmVha3BvaW50IGFsZ29yaXRobS4NCg0KU28gdGhlIGxhc3QgdGltZSB3ZSBoYWQgdGhp cyBkaXNjdXNzaW9uLCBJIGNvdWxkIG5vdCBiZSBjb252aW5jZWQgdGhhdA0KaHlwZXJ2aXNvcnMg KGUuZywgS1ZNKSwgd2hpY2ggZG8gbm90IGZvbGxvdyB0aGlzIHVuZG9jdW1lbnRlZCBiZWhhdmlv ciwNCndvdWxkIG5vdCBicmVhay4gSSBhbHNvIGRvbuKAmXQgcmVtZW1iZXIgYW4gb2ZmaWNpYWwg Y29uZmlybWF0aW9uIG9mIHRoaXMNCmJlaGF2aW9yIG9uIEludGVsIGFuZCBBTUQgQ1BVcy4NCg0K