From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v5 1/7] xen/arm: Introduce alternative runtime patching Date: Fri, 22 Jul 2016 16:29:08 +0100 Message-ID: References: <1469028360-20907-1-git-send-email-julien.grall@arm.com> <1469028360-20907-2-git-send-email-julien.grall@arm.com> <20160722141535.GB21054@char.us.oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160722141535.GB21054@char.us.oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Konrad Rzeszutek Wilk Cc: Andre Przywara , sstabellini@kernel.org, Steve Capper , Wei Chen , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org CgpPbiAyMi8wNy8xNiAxNToxNSwgS29ucmFkIFJ6ZXN6dXRlayBXaWxrIHdyb3RlOgo+PiBkaWZm IC0tZ2l0IGEveGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMgYi94ZW4vYXJjaC9hcm0vYWx0ZXJu YXRpdmUuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5kMDBmOThl Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIveGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMKPgo+ IEhleSEKCkhpIEtvbnJhZCwKCj4gSSd2ZSBzb21lIGNvbW1lbnRzLCBtb3N0IG9mIHRoZW0gYXJl IGxpZ2h0LiBXaGF0IEkgYW0gY29uY2VybmVkIG1vc3QKPiBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIGNvbW1lbnRzIGluIHRoZSBoZWFkZXIgdnMgdGhlIGNvZGUuCj4gTG9va2luZyBhdCBMaW51 eCBjb2RlIGl0IHNlZW1zIHRvIGhhdmUgdGhlIHNhbWUgaXNzdWUgLSBhbmQgSSBrbm93IHlvdSBk b24ndAo+IHdhbnQgdG8gZGlmZmVyIHRvIG11Y2ggZnJvbSBMaW51eC4KCldlbGwsIEkgaGFkIHRv IGRpZmZlciBmcm9tIExpbnV4IGJlY2F1c2UgdGhlIGNvZGUgd2FzIEFSTTY0IHNwZWNpZmljIAoo aS5lIHJlbmFtaW5nIGZ1bmN0aW9uIGFuZCBtb3ZpbmcgY29kZSBhcm91bmQgdG8gcG90ZW50aWFs bHkgYWxsb3cgQVJNMzIgCnN1cHBvcnQpLgoKU28gSSBkb24ndCBtaW5kIHRvIGZpeCB0aGVtIGhl cmUgYW5kLi4uCgoKPgo+IFBlcmhhcHMgZ28gd2l0aCB0aGUgY2hhbmdlcyBhcyBpcyAoV2l0aCB0 aGUgY29tbWVudHMgYmVpbmcgb2ZmKSBhbmQgdGhlCj4gdGhlbiBoYXZlIHNvbWUgcGF0Y2hlcyBm b3IgTGludXggZm9yIHRoZSBoZWFkZXIgbWlzbWF0Y2hlcyBhbmQgdGhvc2UKPiBjYW4gYmUgYmFj a3BvcnRlZD8KCndlIGNhbiB0aGluayBhYm91dCBMaW51eCBjaGFuZ2VzIGFuZCByZXN5bmMgdGhl IGNvZGUgbGF0ZXIuCgo+Cj4gLi5zbmlwLi4KPj4gK3N0YXRpYyBpbnQgX19hcHBseV9hbHRlcm5h dGl2ZXMoY29uc3Qgc3RydWN0IGFsdF9yZWdpb24gKnJlZ2lvbikKPj4gK3sKPj4gKyAgICBjb25z dCBzdHJ1Y3QgYWx0X2luc3RyICphbHQ7Cj4+ICsgICAgY29uc3QgdTMyICpvcmlncHRyLCAqcmVw bHB0cjsKPj4gKyAgICB1MzIgKndyaXRlcHRyLCAqd3JpdGVtYXA7Cj4+ICsgICAgbWZuX3QgdGV4 dF9tZm4gPSBfbWZuKHZpcnRfdG9fbWZuKF9zdGV4dCkpOwo+PiArICAgIHVuc2lnbmVkIGludCB0 ZXh0X29yZGVyID0gZ2V0X29yZGVyX2Zyb21fYnl0ZXMoX2VuZCAtIF9zdGFydCk7Cj4+ICsKPj4g KyAgICBwcmludGsoIlBhdGNoaW5nIGtlcm5lbCBjb2RlXG4iKTsKPgo+IEkgc2VlIHlvdSB1c2Ug cHJlZml4ZWQgbGF0ZXIgd2l0aCAnYWx0ZXJuYXRpdmVzOicgYW5kIGFsc28gdGhpcyBpcyB3aXRo b3V0Cj4gYW55IHByZWZpeCAoREVCVUcsIG9yIEVSUikuIFdvdWxkIGl0IG1ha2Ugc2Vuc2UgdG8g aGF2ZSB0aGlzIG9uZSBhYm92ZQo+IGJlIGRwcmludGsgd2hpbGUgdGhlIG9uZSBiZWxvdyB3aXRo IHByaW50ayAoS0VSTl9FUlIpID8KCkkgdGhpbmsgdGhpcyBvbmUgaXMgdXNlZnVsIGluIG5vbi1k ZWJ1ZyBidWlsZCB0byBrbm93IHRoYXQgd2UgYXJlIApwYXRjaGluZyB0aGUgY29kZS4gU28gaWYg aXQgY3Jhc2gsIHdlIGtub3cgd2hlcmUgd2UgYXJlLgoKPj4gKwo+PiArICAgIC8qCj4+ICsgICAg ICogVGhlIHRleHQgc2VjdGlvbiBpcyByZWFkLW9ubHkuIFNvIHJlLW1hcCBYZW4gdG8gYmUgYWJs ZSB0byBwYXRjaAo+PiArICAgICAqIHRoZSBjb2RlLgo+PiArICAgICAqLwo+PiArICAgIHdyaXRl bWFwID0gX192bWFwKCZ0ZXh0X21mbiwgMSA8PCB0ZXh0X29yZGVyLCAxLCAxLCBQQUdFX0hZUEVS VklTT1IsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgVk1BUF9ERUZBVUxUKTsKPj4gKyAgICBp ZiAoICF3cml0ZW1hcCApCj4+ICsgICAgewo+PiArICAgICAgICBwcmludGsoImFsdGVybmF0aXZl czogVW5hYmxlIHRvIG1hcCB0aGUgdGV4dCBzZWN0aW9uXG4iKTsKPgo+IFBlcmhhcHMgaW5jbHVk ZSB0aGUgc2l6ZSBvZiB0aGUgdGV4dCBzZWN0aW9uPyBUaGF0IG1heSBoZWxwIGluIGZpZ3VyaW5n Cj4gb3V0IHdoYXQgd2VudCB3cm9uZyBvciBpZiBvbmUgY291bGQgaW5jcmVhc2UgdGhlIFZNQVAg YXJlYT8KCkdvb2QgcG9pbnQuIEkgd2lsbCBkbyBpdCBpbiB0aGUgbmV4dCB2ZXJzaW9uLgoKPgo+ PiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBmb3IgKCBh bHQgPSByZWdpb24tPmJlZ2luOyBhbHQgPCByZWdpb24tPmVuZDsgYWx0KysgKQo+PiArICAgIHsK Pj4gKyAgICAgICAgdTMyIGluc247Cj4+ICsgICAgICAgIGludCBpLCBucl9pbnN0Owo+PiArCj4+ ICsgICAgICAgIGlmICggIWNwdXNfaGF2ZV9jYXAoYWx0LT5jcHVmZWF0dXJlKSApCj4+ICsgICAg ICAgICAgICBjb250aW51ZTsKPj4gKwo+PiArICAgICAgICBCVUdfT04oYWx0LT5hbHRfbGVuICE9 IGFsdC0+b3JpZ19sZW4pOwo+Cj4gVGhlIGhlYWRlciBmaWxlIHNheXM6Cj4gKwl1OCAgYWx0X2xl bjsJCS8qIHNpemUgb2YgbmV3IGluc3RydWN0aW9uKHMpLCA8PSBvcmlnX2xlbiAqLwo+Cj4gU28g dGhpcyBCVUdfT04gc2VlbXMgaW5jb3JyZWN0Pwo+IEJ1dCBodGVuIGxhdGVyIGluIHRoZSBoZWFk ZXIgaXQgc2F5czoKPiAiMS4gQmUgZXhhY3RseSB0aGUgc2FtZSBsZW5ndGggKGluIGJ5dGVzKSBh cyB0aGUgZGVmYXVsdCBjb2RlCj4gKyAqICAgIHNlcXVlbmNlLiIKPgo+IFNvIHRoZSBCVUdfT04g aXMgY29ycmVjdC4gUGVyaGFwcyB0aGUgJ2FsdF9sZW4nIGNvbW1lbnQgc2hvdWxkIGJlIHMvPD0v PT0vID8KCkdvb2QgcG9pbnQuIEkgc3VzcGVjdCB0aGUgcGxhbiB3YXMgdG8gc3VwcG9ydCBzZXF1 ZW5jZSB3aXRoIGRpZmZlcmVudCAKbGVuZ3RoIGJ1dCBpdCBoYXMgYmVlbiBhYmFuZG9uZWQgbGF0 ZXIgb24gKENDIEFuZHJlIHRvIGNvbmZpcm0pLgoKPgo+PiArCj4+ICsgICAgICAgIG9yaWdwdHIg PSBBTFRfT1JJR19QVFIoYWx0KTsKPj4gKyAgICAgICAgd3JpdGVwdHIgPSBvcmlncHRyIC0gKHUz MiAqKV9zdGFydCArIHdyaXRlbWFwOwo+Cj4gSG93IGFib3V0IGp1c3QgdXNpbmcgd3JpdGVwdHIg Kz0gPwoKSSBhbSBub3Qgc3VyZSBhYm91dCB5b3VyIHN1Z2dlc3Rpb24gaGVyZS4gUmVnYXJkbGVz cyB0aGUgTGludXggY29kZSwgdGhlIApvcmlncHRyIHdpbGwgbm90IGZvbGxvdyBhIHBhdHRlcm4g YXQgZWFjaCBpdGVyYXRpb24uIFNvIHdlIGhhdmUgdG8gCnJlY29tcHV0ZSBpdCBldmVyeXRpbWUu Cgo+Cj4gQWggd2FpdC4gWW91IGFyZSB0cnlpbmcgdG8gcHJlc2VydmUgdGhlIExpbnV4IGNvZGUh LiBOZXZlcm1pbmQgdGhlbi4KPgo+PiArICAgICAgICByZXBscHRyID0gQUxUX1JFUExfUFRSKGFs dCk7Cj4+ICsKPj4gKyAgICAgICAgbnJfaW5zdCA9IGFsdC0+YWx0X2xlbiAvIHNpemVvZihpbnNu KTsKPj4gKwo+PiArICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG5yX2luc3Q7IGkrKyApCj4+ICsg ICAgICAgIHsKPj4gKyAgICAgICAgICAgIGluc24gPSBnZXRfYWx0X2luc24oYWx0LCBvcmlncHRy ICsgaSwgcmVwbHB0ciArIGkpOwo+PiArICAgICAgICAgICAgKih3cml0ZXB0ciArIGkpID0gY3B1 X3RvX2xlMzIoaW5zbik7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAvKiBFbnN1cmUg dGhlIG5ldyBpbnN0cnVjdGlvbnMgcmVhY2hlZCB0aGUgbWVtb3J5IGFuZCBudWtlICovCj4+ICsg ICAgICAgIGNsZWFuX2FuZF9pbnZhbGlkYXRlX2RjYWNoZV92YV9yYW5nZSh3cml0ZXB0ciwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplb2YgKCp3 cml0ZXB0cikgKiBucl9pbnN0KSk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLyogTnVrZSB0aGUg aW5zdHJ1Y3Rpb24gY2FjaGUgKi8KPj4gKyAgICBpbnZhbGlkYXRlX2ljYWNoZSgpOwo+PiArCj4+ ICsgICAgdnVubWFwKHdyaXRlbWFwKTsKPj4gKwo+PiArICAgIHJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICsvKgo+PiArICogV2UgbWlnaHQgYmUgcGF0Y2hpbmcgdGhlIHN0b3BfbWFjaGluZSBzdGF0 ZSBtYWNoaW5lLCBzbyBpbXBsZW1lbnQgYQo+PiArICogcmVhbGx5IHNpbXBsZSBwb2xsaW5nIHBy b3RvY29sIGhlcmUuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgX19hcHBseV9hbHRlcm5hdGl2ZXNf bXVsdGlfc3RvcCh2b2lkICp1bnVzZWQpCj4+ICt7Cj4+ICsgICAgc3RhdGljIGludCBwYXRjaGVk ID0gMDsKPgo+IFNob3VsZG4ndCB0aGlzIGJlICdhdG9taWNfdCcgPwoKRG9lcyBpdCBtYXR0ZXI/ IEZyb20gbXkgdW5kZXJzdGFuZGluZyB0aGUgY29kZSB3aWxsIGJlaGF2ZSB0aGUgc2FtZS4KCj4+ ICsgICAgc3RydWN0IGFsdF9yZWdpb24gcmVnaW9uID0gewo+Cj4gQ2FuIHRoaXMgJ2NvbnN0JyA/ CgpJdCBjb3VsZCwgSSBqdXN0IGZvbGxvd2VkIExpbnV4IGJ1dCBhcyB3ZSBkaWZmZXIgSSB3aWxs IG1vdmUgdG8gY29uc3QuCgo+PiArICAgICAgICAuYmVnaW4gPSBfX2FsdF9pbnN0cnVjdGlvbnMs Cj4+ICsgICAgICAgIC5lbmQgPSBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kLAo+PiArICAgIH07Cj4+ ICsKPj4gKyAgICAvKiBXZSBhbHdheXMgaGF2ZSBhIENQVSAwIGF0IHRoaXMgcG9pbnQgKF9faW5p dCkgKi8KPj4gKyAgICBpZiAoIHNtcF9wcm9jZXNzb3JfaWQoKSApCj4+ICsgICAgewo+PiArICAg ICAgICB3aGlsZSAoICFyZWFkX2F0b21pYygmcGF0Y2hlZCkgKQo+PiArICAgICAgICAgICAgY3B1 X3JlbGF4KCk7Cj4+ICsgICAgICAgIGlzYigpOwo+PiArICAgIH0KPj4gKyAgICBlbHNlCj4+ICsg ICAgewo+PiArICAgICAgICBpbnQgcmV0Owo+PiArCj4+ICsgICAgICAgIEJVR19PTihwYXRjaGVk KTsKPj4gKyAgICAgICAgcmV0ID0gX19hcHBseV9hbHRlcm5hdGl2ZXMoJnJlZ2lvbik7Cj4+ICsg ICAgICAgIC8qIFRoZSBwYXRjaGluZyBpcyBub3QgZXhwZWN0ZWQgdG8gZmFpbCBkdXJpbmcgYm9v dC4gKi8KPj4gKyAgICAgICAgQlVHX09OKHJldCAhPSAwKTsKPj4gKwo+PiArICAgICAgICAvKiBC YXJyaWVycyBwcm92aWRlZCBieSB0aGUgY2FjaGUgZmx1c2hpbmcgKi8KPj4gKyAgICAgICAgd3Jp dGVfYXRvbWljKCZwYXRjaGVkLCAxKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2Fs bGVkIGR1cmluZyBib290IGFuZCBiZWZvcmUgQ1BVMCBqdW1wCj4+ICsgKiBpbnRvIHRoZSBpZGxl X2xvb3AuCj4KPiBTbyBjb3VsZCB5b3UgYWRkIGFuOgo+PiArICovCj4+ICt2b2lkIF9faW5pdCBh cHBseV9hbHRlcm5hdGl2ZXNfYWxsKHZvaWQpCj4+ICt7Cj4+ICsgICAgaW50IHJldDsKPj4gKwo+ IEFTU0VSVChzeXN0ZW1fc3RhdGUgIT0gU1lTX1NUQVRFX2FjdGl2ZSk7Cj4gPwoKV2lsbCBkby4K Cj4+ICsJLyogYmV0dGVyIG5vdCB0cnkgY29kZSBwYXRjaGluZyBvbiBhIGxpdmUgU01QIHN5c3Rl bSAqLwo+PiArICAgIHJldCA9IHN0b3BfbWFjaGluZV9ydW4oX19hcHBseV9hbHRlcm5hdGl2ZXNf bXVsdGlfc3RvcCwgTlVMTCwgTlJfQ1BVUyk7Cj4+ICsKPj4gKyAgICAvKiBzdG9wX21hY2hpbmVf cnVuIHNob3VsZCBuZXZlciBmYWlsIGF0IHRoaXMgc3RhZ2Ugb2YgdGhlIGJvb3QgKi8KPj4gKyAg ICBCVUdfT04ocmV0KTsKPj4gK30KPj4gKwo+PiAraW50IGFwcGx5X2FsdGVybmF0aXZlcyh2b2lk ICpzdGFydCwgc2l6ZV90IGxlbmd0aCkKPj4gK3sKPj4gKyAgICBzdHJ1Y3QgYWx0X3JlZ2lvbiBy ZWdpb24gPSB7Cj4KPiBDb3VsZCB0aGlzIGJlICdjb25zdCc/CgpXaWxsIGRvLgoKPgo+PiArICAg ICAgICAuYmVnaW4gPSBzdGFydCwKPj4gKyAgICAgICAgLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoLAo+ PiArICAgIH07Cj4+ICsKPj4gKyAgICByZXR1cm4gX19hcHBseV9hbHRlcm5hdGl2ZXMoJnJlZ2lv bik7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4+ICsgKiBtb2Rl OiBDCj4+ICsgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCj4+ICsgKiBjLWJhc2ljLW9mZnNldDogNAo+ PiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsCj4+ICsgKiBFbmQ6Cj4+ICsgKi8KClsuLi5dCgo+ PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oIGIveGVuL2lu Y2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGlu ZGV4IDAwMDAwMDAuLjQyODdiYWMKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi94ZW4vaW5jbHVk ZS9hc20tYXJtL2FsdGVybmF0aXZlLmgKPj4gQEAgLTAsMCArMSwxNjUgQEAKPj4gKyNpZm5kZWYg X19BU01fQUxURVJOQVRJVkVfSAo+PiArI2RlZmluZSBfX0FTTV9BTFRFUk5BVElWRV9ICj4+ICsK Pj4gKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgo+PiArI2luY2x1ZGUgPHhlbi9jb25maWcu aD4KPj4gKyNpbmNsdWRlIDx4ZW4va2NvbmZpZy5oPgo+PiArCj4+ICsjaWZkZWYgQ09ORklHX0FM VEVSTkFUSVZFCj4+ICsKPj4gKyNpZm5kZWYgX19BU1NFTUJMWV9fCj4+ICsKPj4gKyNpbmNsdWRl IDx4ZW4vaW5pdC5oPgo+PiArI2luY2x1ZGUgPHhlbi90eXBlcy5oPgo+PiArI2luY2x1ZGUgPHhl bi9zdHJpbmdpZnkuaD4KPj4gKwo+PiArc3RydWN0IGFsdF9pbnN0ciB7Cj4+ICsJczMyIG9yaWdf b2Zmc2V0OwkvKiBvZmZzZXQgdG8gb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KPj4gKwlzMzIgYWx0 X29mZnNldDsJCS8qIG9mZnNldCB0byByZXBsYWNlbWVudCBpbnN0cnVjdGlvbiAqLwo+PiArCXUx NiBjcHVmZWF0dXJlOwkJLyogY3B1ZmVhdHVyZSBiaXQgc2V0IGZvciByZXBsYWNlbWVudCAqLwo+ PiArCXU4ICBvcmlnX2xlbjsJCS8qIHNpemUgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24ocykgKi8K Pj4gKwl1OCAgYWx0X2xlbjsJCS8qIHNpemUgb2YgbmV3IGluc3RydWN0aW9uKHMpLCA8PSBvcmln X2xlbiAqLwo+Cj4gUGVyaGFwcyBzLzw9Lz09Lz8KClNlZSBteSBjb21tZW50IGFib3ZlLgoKPgo+ PiArfTsKPj4gKwo+PiArdm9pZCBfX2luaXQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKTsK Pj4gK2ludCBhcHBseV9hbHRlcm5hdGl2ZXModm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpOwo+ PiArCj4+ICsjZGVmaW5lIEFMVElOU1RSX0VOVFJZKGZlYXR1cmUpCQkJCQkJICAgICAgXAo+PiAr CSIgLndvcmQgNjYxYiAtIC5cbiIJCQkJLyogbGFiZWwgICAgICAgICAgICovIFwKPj4gKwkiIC53 b3JkIDY2M2YgLSAuXG4iCQkJCS8qIG5ldyBpbnN0cnVjdGlvbiAqLyBcCj4+ICsJIiAuaHdvcmQg IiBfX3N0cmluZ2lmeShmZWF0dXJlKSAiXG4iCQkvKiBmZWF0dXJlIGJpdCAgICAgKi8gXAo+PiAr CSIgLmJ5dGUgNjYyYi02NjFiXG4iCQkJCS8qIHNvdXJjZSBsZW4gICAgICAqLyBcCj4+ICsJIiAu Ynl0ZSA2NjRmLTY2M2ZcbiIJCQkJLyogcmVwbGFjZW1lbnQgbGVuICovCj4+ICsKPj4gKy8qCj4+ ICsgKiBhbHRlcm5hdGl2ZSBhc3NlbWJseSBwcmltaXRpdmU6Cj4+ICsgKgo+PiArICogSWYgYW55 IG9mIHRoZXNlIC5vcmcgZGlyZWN0aXZlIGZhaWwsIGl0IG1lYW5zIHRoYXQgaW5zbjEgYW5kIGlu c24yCj4+ICsgKiBkb24ndCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gVGhpcyB1c2VkIHRvIGJlIHdy aXR0ZW4gYXMKPj4gKyAqCj4+ICsgKiAuaWYgKCg2NjRiLTY2M2IpICE9ICg2NjJiLTY2MWIpKQo+ PiArICogCS5lcnJvciAiQWx0ZXJuYXRpdmVzIGluc3RydWN0aW9uIGxlbmd0aCBtaXNtYXRjaCIK Pj4gKyAqIC5lbmRpZgo+PiArICoKPj4gKyAqIGJ1dCBtb3N0IGFzc2VtYmxlcnMgZGllIGlmIGlu c24xIG9yIGluc24yIGhhdmUgYSAuaW5zdC4gVGhpcyBzaG91bGQKPj4gKyAqIGJlIGZpeGVkIGlu IGEgYmludXRpbHMgcmVsZWFzZSBwb3N0ZXJpb3IgdG8gMi4yNS41MS4wLjIgKGFueXRoaW5nCj4+ ICsgKiBjb250YWluaW5nIGNvbW1pdCA0ZTRkMDhjZjczOTliNjA2IG9yIGMxYmFhZGRmODg2MSku Cj4+ICsgKi8KPj4gKyNkZWZpbmUgX19BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIsIG5ld2luc3Ry LCBmZWF0dXJlLCBjZmdfZW5hYmxlZCkJXAo+PiArCSIuaWYgIl9fc3RyaW5naWZ5KGNmZ19lbmFi bGVkKSIgPT0gMVxuIgkJCQlcCj4+ICsJIjY2MTpcblx0IgkJCQkJCQlcCj4+ICsJb2xkaW5zdHIg IlxuIgkJCQkJCQlcCj4+ICsJIjY2MjpcbiIJCQkJCQkJXAo+PiArCSIucHVzaHNlY3Rpb24gLmFs dGluc3RydWN0aW9ucyxcImFcIlxuIgkJCQlcCj4+ICsJQUxUSU5TVFJfRU5UUlkoZmVhdHVyZSkJ CQkJCQlcCj4+ICsJIi5wb3BzZWN0aW9uXG4iCQkJCQkJCVwKPj4gKwkiLnB1c2hzZWN0aW9uIC5h bHRpbnN0cl9yZXBsYWNlbWVudCwgXCJhXCJcbiIJCQlcCj4+ICsJIjY2Mzpcblx0IgkJCQkJCQlc Cj4+ICsJbmV3aW5zdHIgIlxuIgkJCQkJCQlcCj4+ICsJIjY2NDpcblx0IgkJCQkJCQlcCj4+ICsJ Ii5wb3BzZWN0aW9uXG5cdCIJCQkJCQlcCj4+ICsJIi5vcmcJLiAtICg2NjRiLTY2M2IpICsgKDY2 MmItNjYxYilcblx0IgkJCVwKPj4gKwkiLm9yZwkuIC0gKDY2MmItNjYxYikgKyAoNjY0Yi02NjNi KVxuIgkJCVwKPj4gKwkiLmVuZGlmXG4iCj4+ICsKPj4gKyNkZWZpbmUgX0FMVEVSTkFUSVZFX0NG RyhvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIGNmZywgLi4uKQlcCj4+ICsJX19BTFRFUk5B VElWRV9DRkcob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBJU19FTkFCTEVEKGNmZykpCj4+ ICsKPj4gKyNlbHNlCj4+ICsKPj4gKyNpbmNsdWRlIDxhc20vYXNtX2RlZm5zLmg+Cj4+ICsKPj4g Ky5tYWNybyBhbHRpbnN0cnVjdGlvbl9lbnRyeSBvcmlnX29mZnNldCBhbHRfb2Zmc2V0IGZlYXR1 cmUgb3JpZ19sZW4gYWx0X2xlbgo+PiArCS53b3JkIFxvcmlnX29mZnNldCAtIC4KPj4gKwkud29y ZCBcYWx0X29mZnNldCAtIC4KPj4gKwkuaHdvcmQgXGZlYXR1cmUKPj4gKwkuYnl0ZSBcb3JpZ19s ZW4KPj4gKwkuYnl0ZSBcYWx0X2xlbgo+PiArLmVuZG0KPj4gKwo+PiArLm1hY3JvIGFsdGVybmF0 aXZlX2luc24gaW5zbjEsIGluc24yLCBjYXAsIGVuYWJsZSA9IDEKPj4gKwkuaWYgXGVuYWJsZQo+ PiArNjYxOglcaW5zbjEKPj4gKzY2MjoJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJh Igo+PiArCWFsdGluc3RydWN0aW9uX2VudHJ5IDY2MWIsIDY2M2YsIFxjYXAsIDY2MmItNjYxYiwg NjY0Zi02NjNmCj4+ICsJLnBvcHNlY3Rpb24KPj4gKwkucHVzaHNlY3Rpb24gLmFsdGluc3RyX3Jl cGxhY2VtZW50LCAiYXgiCj4+ICs2NjM6CVxpbnNuMgo+PiArNjY0OgkucG9wc2VjdGlvbgo+PiAr CS5vcmcJLiAtICg2NjRiLTY2M2IpICsgKDY2MmItNjYxYikKPj4gKwkub3JnCS4gLSAoNjYyYi02 NjFiKSArICg2NjRiLTY2M2IpCj4+ICsJLmVuZGlmCj4+ICsuZW5kbQo+PiArCj4+ICsvKgo+PiAr ICogQmVnaW4gYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZS4KPj4gKyAqCj4+ICsgKiBUaGUg Y29kZSB0aGF0IGZvbGxvd3MgdGhpcyBtYWNybyB3aWxsIGJlIGFzc2VtYmxlZCBhbmQgbGlua2Vk IGFzCj4+ICsgKiBub3JtYWwuIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gdGhpcyBjb2Rl Lgo+PiArICovCj4+ICsubWFjcm8gYWx0ZXJuYXRpdmVfaWZfbm90IGNhcCwgZW5hYmxlID0gMQo+ PiArCS5pZiBcZW5hYmxlCj4+ICsJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgo+ PiArCWFsdGluc3RydWN0aW9uX2VudHJ5IDY2MWYsIDY2M2YsIFxjYXAsIDY2MmYtNjYxZiwgNjY0 Zi02NjNmCj4+ICsJLnBvcHNlY3Rpb24KPj4gKzY2MToKPj4gKwkuZW5kaWYKPj4gKy5lbmRtCj4+ ICsKPj4gKy8qCj4+ICsgKiBQcm92aWRlIHRoZSBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVlbmNlLgo+ PiArICoKPj4gKyAqIFRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGlzIG1hY3JvIGlzIGFzc2VtYmxl ZCBpbnRvIGEgc3BlY2lhbAo+PiArICogc2VjdGlvbiB0byBiZSB1c2VkIGZvciBkeW5hbWljIHBh dGNoaW5nLiBDb2RlIHRoYXQgZm9sbG93cyB0aGlzCj4+ICsgKiBtYWNybyBtdXN0Ogo+PiArICoK Pj4gKyAqIDEuIEJlIGV4YWN0bHkgdGhlIHNhbWUgbGVuZ3RoIChpbiBieXRlcykgYXMgdGhlIGRl ZmF1bHQgY29kZQo+PiArICogICAgc2VxdWVuY2UuCj4+ICsgKgo+PiArICogMi4gTm90IGNvbnRh aW4gYSBicmFuY2ggdGFyZ2V0IHRoYXQgaXMgdXNlZCBvdXRzaWRlIG9mIHRoZQo+PiArICogICAg YWx0ZXJuYXRpdmUgc2VxdWVuY2UgaXQgaXMgZGVmaW5lZCBpbiAoYnJhbmNoZXMgaW50byBhbgo+ PiArICogICAgYWx0ZXJuYXRpdmUgc2VxdWVuY2UgYXJlIG5vdCBmaXhlZCB1cCkuCj4KPiBIbSw/ IEJ1dCBnZXRfYWx0X2luc24gc2VlbXMgdG8gdGFrZSBjYXJlIG9mIGZpeGluZyB0aGlzIHVwOgoK SSBhbSBub3Qgc3VyZSBhYm91dCB0aGlzIG9uZS4gSSBjYW5ub3QgZmluZCB3aHkgdGhlcmUgaXMg dGhpcyAKcmVzdHJpY3Rpb24gKENDIHNvbWUgQVJNIGZvbGtzIHRvIGhhdmUgdGhlaXIgaW5wdXQp LgoKPgo+ICAvKgo+ICsgICAgICAgICAqIElmIHdlJ3JlIGJyYW5jaGluZyBpbnNpZGUgdGhlIGFs dGVybmF0ZSBzZXF1ZW5jZSwKPiArICAgICAgICAgKiBkbyBub3QgcmV3cml0ZSB0aGUgaW5zdHJ1 Y3Rpb24sIGFzIGl0IGlzIGFscmVhZHkKPiArICAgICAgICAgKiBjb3JyZWN0LiBPdGhlcndpc2Us IGdlbmVyYXRlIHRoZSBuZXcgaW5zdHJ1Y3Rpb24uCj4gKyAgICAgICAgICovCj4KPgo+ID8KPgo+ PiArICovCj4+ICsubWFjcm8gYWx0ZXJuYXRpdmVfZWxzZQo+PiArNjYyOgkucHVzaHNlY3Rpb24g LmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCj4+ICs2NjM6Cj4+ICsuZW5kbQo+PiArCj4+ICsv Kgo+PiArICogQ29tcGxldGUgYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZS4KPj4gKyAqLwo+ PiArLm1hY3JvIGFsdGVybmF0aXZlX2VuZGlmCj4+ICs2NjQ6CS5wb3BzZWN0aW9uCj4+ICsJLm9y ZwkuIC0gKDY2NGItNjYzYikgKyAoNjYyYi02NjFiKQo+PiArCS5vcmcJLiAtICg2NjJiLTY2MWIp ICsgKDY2NGItNjYzYikKPj4gKy5lbmRtCj4+ICsKPj4gKyNkZWZpbmUgX0FMVEVSTkFUSVZFX0NG RyhpbnNuMSwgaW5zbjIsIGNhcCwgY2ZnLCAuLi4pCVwKPj4gKwlhbHRlcm5hdGl2ZV9pbnNuIGlu c24xLCBpbnNuMiwgY2FwLCBJU19FTkFCTEVEKGNmZykKPj4gKwo+PiArI2VuZGlmICAvKiAgX19B U1NFTUJMWV9fICAqLwo+PiArCj4+ICsvKgo+PiArICogVXNhZ2U6IGFzbShBTFRFUk5BVElWRShv bGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpKTsKPj4gKyAqCj4+ICsgKiBVc2FnZTogYXNtKEFM VEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSwgQ09ORklHX0ZPTykpOwo+PiAr ICogTi5CLiBJZiBDT05GSUdfRk9PIGlzIHNwZWNpZmllZCwgYnV0IG5vdCBzZWxlY3RlZCwgdGhl IHdob2xlIGJsb2NrCj4+ICsgKiAgICAgIHdpbGwgYmUgb21pdHRlZCwgaW5jbHVkaW5nIG9sZGlu c3RyLgo+PiArICovCj4+ICsjZGVmaW5lIEFMVEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwg Li4uKSAgIFwKPj4gKwlfQUxURVJOQVRJVkVfQ0ZHKG9sZGluc3RyLCBuZXdpbnN0ciwgX19WQV9B UkdTX18sIDEpCj4+ICsKPj4gKyNlbHNlIC8qICFDT05GSUdfQUxURVJOQVRJVkUgKi8KPj4gKwo+ PiArc3RhdGljIGlubGluZSB2b2lkIGFwcGx5X2FsdGVybmF0aXZlc19hbGwodm9pZCkKPj4gK3sK Pj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBpbnQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQg KnN0YXJ0LCBzaXplX3QgbGVuZ2h0KQo+PiArewo+PiArICAgIHJldHVybiAwOwo+PiArfQo+PiAr Cj4+ICsjZW5kaWYKPj4gKwo+PiArI2VuZGlmIC8qIF9fQVNNX0FMVEVSTkFUSVZFX0ggKi8KPgo+ IFRoaXMgYmVpbmcgYSBuZXcgZmlsZSBwZXJoYXBzIGFkZDoKPiAqCj4gICogTG9jYWwgdmFyaWFi bGVzOgo+ICAqIG1vZGU6IEMKPiAgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCj4gICogYy1iYXNpYy1v ZmZzZXQ6IDQKPiAgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKPiAgKiBFbmQ6Cj4gICovCj4gPwoK SXQgaXMgYSBMaW51eCBmaWxlIHdpdGggTGludXggY29kaW5nIHN0eWxlLiBJIHdvdWxkIG5lZWQg dG8gbG9vayB3aGF0IApzaG91bGQgYmUgdGhlIGVtYWNzIG1hZ2ljIGJsb2NrIGhlcmUuCgpSZWdh cmRzLAoKLS0gCkp1bGllbiBHcmFsbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==