From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v5 1/7] xen/arm: Introduce alternative runtime patching Date: Fri, 22 Jul 2016 10:15:35 -0400 Message-ID: <20160722141535.GB21054@char.us.oracle.com> References: <1469028360-20907-1-git-send-email-julien.grall@arm.com> <1469028360-20907-2-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1469028360-20907-2-git-send-email-julien.grall@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Julien Grall Cc: sstabellini@kernel.org, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMgYi94ZW4vYXJjaC9hcm0v YWx0ZXJuYXRpdmUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDAw Zjk4ZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi94ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUuYwoK SGV5IQoKSSd2ZSBzb21lIGNvbW1lbnRzLCBtb3N0IG9mIHRoZW0gYXJlIGxpZ2h0LiBXaGF0IEkg YW0gY29uY2VybmVkIG1vc3QKaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBjb21tZW50cyBpbiB0 aGUgaGVhZGVyIHZzIHRoZSBjb2RlLiAKTG9va2luZyBhdCBMaW51eCBjb2RlIGl0IHNlZW1zIHRv IGhhdmUgdGhlIHNhbWUgaXNzdWUgLSBhbmQgSSBrbm93IHlvdSBkb24ndAp3YW50IHRvIGRpZmZl ciB0byBtdWNoIGZyb20gTGludXguCgpQZXJoYXBzIGdvIHdpdGggdGhlIGNoYW5nZXMgYXMgaXMg KFdpdGggdGhlIGNvbW1lbnRzIGJlaW5nIG9mZikgYW5kIHRoZQp0aGVuIGhhdmUgc29tZSBwYXRj aGVzIGZvciBMaW51eCBmb3IgdGhlIGhlYWRlciBtaXNtYXRjaGVzIGFuZCB0aG9zZQpjYW4gYmUg YmFja3BvcnRlZD8KCi4uc25pcC4uCj4gK3N0YXRpYyBpbnQgX19hcHBseV9hbHRlcm5hdGl2ZXMo Y29uc3Qgc3RydWN0IGFsdF9yZWdpb24gKnJlZ2lvbikKPiArewo+ICsgICAgY29uc3Qgc3RydWN0 IGFsdF9pbnN0ciAqYWx0Owo+ICsgICAgY29uc3QgdTMyICpvcmlncHRyLCAqcmVwbHB0cjsKPiAr ICAgIHUzMiAqd3JpdGVwdHIsICp3cml0ZW1hcDsKPiArICAgIG1mbl90IHRleHRfbWZuID0gX21m bih2aXJ0X3RvX21mbihfc3RleHQpKTsKPiArICAgIHVuc2lnbmVkIGludCB0ZXh0X29yZGVyID0g Z2V0X29yZGVyX2Zyb21fYnl0ZXMoX2VuZCAtIF9zdGFydCk7Cj4gKwo+ICsgICAgcHJpbnRrKCJQ YXRjaGluZyBrZXJuZWwgY29kZVxuIik7CgpJIHNlZSB5b3UgdXNlIHByZWZpeGVkIGxhdGVyIHdp dGggJ2FsdGVybmF0aXZlczonIGFuZCBhbHNvIHRoaXMgaXMgd2l0aG91dAphbnkgcHJlZml4IChE RUJVRywgb3IgRVJSKS4gV291bGQgaXQgbWFrZSBzZW5zZSB0byBoYXZlIHRoaXMgb25lIGFib3Zl CmJlIGRwcmludGsgd2hpbGUgdGhlIG9uZSBiZWxvdyB3aXRoIHByaW50ayAoS0VSTl9FUlIpID8K PiArCj4gKyAgICAvKgo+ICsgICAgICogVGhlIHRleHQgc2VjdGlvbiBpcyByZWFkLW9ubHkuIFNv IHJlLW1hcCBYZW4gdG8gYmUgYWJsZSB0byBwYXRjaAo+ICsgICAgICogdGhlIGNvZGUuCj4gKyAg ICAgKi8KPiArICAgIHdyaXRlbWFwID0gX192bWFwKCZ0ZXh0X21mbiwgMSA8PCB0ZXh0X29yZGVy LCAxLCAxLCBQQUdFX0hZUEVSVklTT1IsCj4gKyAgICAgICAgICAgICAgICAgICAgICBWTUFQX0RF RkFVTFQpOwo+ICsgICAgaWYgKCAhd3JpdGVtYXAgKQo+ICsgICAgewo+ICsgICAgICAgIHByaW50 aygiYWx0ZXJuYXRpdmVzOiBVbmFibGUgdG8gbWFwIHRoZSB0ZXh0IHNlY3Rpb25cbiIpOwoKUGVy aGFwcyBpbmNsdWRlIHRoZSBzaXplIG9mIHRoZSB0ZXh0IHNlY3Rpb24/IFRoYXQgbWF5IGhlbHAg aW4gZmlndXJpbmcKb3V0IHdoYXQgd2VudCB3cm9uZyBvciBpZiBvbmUgY291bGQgaW5jcmVhc2Ug dGhlIFZNQVAgYXJlYT8KCj4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gKyAgICB9Cj4gKwo+ ICsgICAgZm9yICggYWx0ID0gcmVnaW9uLT5iZWdpbjsgYWx0IDwgcmVnaW9uLT5lbmQ7IGFsdCsr ICkKPiArICAgIHsKPiArICAgICAgICB1MzIgaW5zbjsKPiArICAgICAgICBpbnQgaSwgbnJfaW5z dDsKPiArCj4gKyAgICAgICAgaWYgKCAhY3B1c19oYXZlX2NhcChhbHQtPmNwdWZlYXR1cmUpICkK PiArICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgIEJVR19PTihhbHQtPmFsdF9s ZW4gIT0gYWx0LT5vcmlnX2xlbik7CgpUaGUgaGVhZGVyIGZpbGUgc2F5czoKKwl1OCAgYWx0X2xl bjsJCS8qIHNpemUgb2YgbmV3IGluc3RydWN0aW9uKHMpLCA8PSBvcmlnX2xlbiAqLwoKU28gdGhp cyBCVUdfT04gc2VlbXMgaW5jb3JyZWN0PwpCdXQgaHRlbiBsYXRlciBpbiB0aGUgaGVhZGVyIGl0 IHNheXM6CiIxLiBCZSBleGFjdGx5IHRoZSBzYW1lIGxlbmd0aCAoaW4gYnl0ZXMpIGFzIHRoZSBk ZWZhdWx0IGNvZGUKKyAqICAgIHNlcXVlbmNlLiIKClNvIHRoZSBCVUdfT04gaXMgY29ycmVjdC4g UGVyaGFwcyB0aGUgJ2FsdF9sZW4nIGNvbW1lbnQgc2hvdWxkIGJlIHMvPD0vPT0vID8KCj4gKwo+ ICsgICAgICAgIG9yaWdwdHIgPSBBTFRfT1JJR19QVFIoYWx0KTsKPiArICAgICAgICB3cml0ZXB0 ciA9IG9yaWdwdHIgLSAodTMyICopX3N0YXJ0ICsgd3JpdGVtYXA7CgpIb3cgYWJvdXQganVzdCB1 c2luZyB3cml0ZXB0ciArPSA/CgpBaCB3YWl0LiBZb3UgYXJlIHRyeWluZyB0byBwcmVzZXJ2ZSB0 aGUgTGludXggY29kZSEuIE5ldmVybWluZCB0aGVuLgoKPiArICAgICAgICByZXBscHRyID0gQUxU X1JFUExfUFRSKGFsdCk7Cj4gKwo+ICsgICAgICAgIG5yX2luc3QgPSBhbHQtPmFsdF9sZW4gLyBz aXplb2YoaW5zbik7Cj4gKwo+ICsgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfaW5zdDsgaSsr ICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGluc24gPSBnZXRfYWx0X2luc24oYWx0LCBv cmlncHRyICsgaSwgcmVwbHB0ciArIGkpOwo+ICsgICAgICAgICAgICAqKHdyaXRlcHRyICsgaSkg PSBjcHVfdG9fbGUzMihpbnNuKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qIEVuc3Vy ZSB0aGUgbmV3IGluc3RydWN0aW9ucyByZWFjaGVkIHRoZSBtZW1vcnkgYW5kIG51a2UgKi8KPiAr ICAgICAgICBjbGVhbl9hbmRfaW52YWxpZGF0ZV9kY2FjaGVfdmFfcmFuZ2Uod3JpdGVwdHIsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplb2YgKCp3 cml0ZXB0cikgKiBucl9pbnN0KSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogTnVrZSB0aGUgaW5z dHJ1Y3Rpb24gY2FjaGUgKi8KPiArICAgIGludmFsaWRhdGVfaWNhY2hlKCk7Cj4gKwo+ICsgICAg dnVubWFwKHdyaXRlbWFwKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiAr ICogV2UgbWlnaHQgYmUgcGF0Y2hpbmcgdGhlIHN0b3BfbWFjaGluZSBzdGF0ZSBtYWNoaW5lLCBz byBpbXBsZW1lbnQgYQo+ICsgKiByZWFsbHkgc2ltcGxlIHBvbGxpbmcgcHJvdG9jb2wgaGVyZS4K PiArICovCj4gK3N0YXRpYyBpbnQgX19hcHBseV9hbHRlcm5hdGl2ZXNfbXVsdGlfc3RvcCh2b2lk ICp1bnVzZWQpCj4gK3sKPiArICAgIHN0YXRpYyBpbnQgcGF0Y2hlZCA9IDA7CgpTaG91bGRuJ3Qg dGhpcyBiZSAnYXRvbWljX3QnID8KCj4gKyAgICBzdHJ1Y3QgYWx0X3JlZ2lvbiByZWdpb24gPSB7 CgpDYW4gdGhpcyAnY29uc3QnID8KPiArICAgICAgICAuYmVnaW4gPSBfX2FsdF9pbnN0cnVjdGlv bnMsCj4gKyAgICAgICAgLmVuZCA9IF9fYWx0X2luc3RydWN0aW9uc19lbmQsCj4gKyAgICB9Owo+ ICsKPiArICAgIC8qIFdlIGFsd2F5cyBoYXZlIGEgQ1BVIDAgYXQgdGhpcyBwb2ludCAoX19pbml0 KSAqLwo+ICsgICAgaWYgKCBzbXBfcHJvY2Vzc29yX2lkKCkgKQo+ICsgICAgewo+ICsgICAgICAg IHdoaWxlICggIXJlYWRfYXRvbWljKCZwYXRjaGVkKSApCj4gKyAgICAgICAgICAgIGNwdV9yZWxh eCgpOwo+ICsgICAgICAgIGlzYigpOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgewo+ICsg ICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICAgIEJVR19PTihwYXRjaGVkKTsKPiArICAgICAg ICByZXQgPSBfX2FwcGx5X2FsdGVybmF0aXZlcygmcmVnaW9uKTsKPiArICAgICAgICAvKiBUaGUg cGF0Y2hpbmcgaXMgbm90IGV4cGVjdGVkIHRvIGZhaWwgZHVyaW5nIGJvb3QuICovCj4gKyAgICAg ICAgQlVHX09OKHJldCAhPSAwKTsKPiArCj4gKyAgICAgICAgLyogQmFycmllcnMgcHJvdmlkZWQg YnkgdGhlIGNhY2hlIGZsdXNoaW5nICovCj4gKyAgICAgICAgd3JpdGVfYXRvbWljKCZwYXRjaGVk LCAxKTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICog VGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGJvb3QgYW5kIGJlZm9y ZSBDUFUwIGp1bXAKPiArICogaW50byB0aGUgaWRsZV9sb29wLgoKU28gY291bGQgeW91IGFkZCBh bjoKPiArICovCj4gK3ZvaWQgX19pbml0IGFwcGx5X2FsdGVybmF0aXZlc19hbGwodm9pZCkKPiAr ewo+ICsgICAgaW50IHJldDsKPiArCkFTU0VSVChzeXN0ZW1fc3RhdGUgIT0gU1lTX1NUQVRFX2Fj dGl2ZSk7Cj8KCj4gKwkvKiBiZXR0ZXIgbm90IHRyeSBjb2RlIHBhdGNoaW5nIG9uIGEgbGl2ZSBT TVAgc3lzdGVtICovCj4gKyAgICByZXQgPSBzdG9wX21hY2hpbmVfcnVuKF9fYXBwbHlfYWx0ZXJu YXRpdmVzX211bHRpX3N0b3AsIE5VTEwsIE5SX0NQVVMpOwo+ICsKPiArICAgIC8qIHN0b3BfbWFj aGluZV9ydW4gc2hvdWxkIG5ldmVyIGZhaWwgYXQgdGhpcyBzdGFnZSBvZiB0aGUgYm9vdCAqLwo+ ICsgICAgQlVHX09OKHJldCk7Cj4gK30KPiArCj4gK2ludCBhcHBseV9hbHRlcm5hdGl2ZXModm9p ZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpCj4gK3sKPiArICAgIHN0cnVjdCBhbHRfcmVnaW9uIHJl Z2lvbiA9IHsKCkNvdWxkIHRoaXMgYmUgJ2NvbnN0Jz8KCj4gKyAgICAgICAgLmJlZ2luID0gc3Rh cnQsCj4gKyAgICAgICAgLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoLAo+ICsgICAgfTsKPiArCj4gKyAg ICByZXR1cm4gX19hcHBseV9hbHRlcm5hdGl2ZXMoJnJlZ2lvbik7Cj4gK30KPiArCj4gKy8qCj4g KyAqIExvY2FsIHZhcmlhYmxlczoKPiArICogbW9kZTogQwo+ICsgKiBjLWZpbGUtc3R5bGU6ICJC U0QiCj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiA0Cj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAo+ ICsgKiBFbmQ6Cj4gKyAqLwo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vc2V0dXAuYyBiL3hl bi9hcmNoL2FybS9zZXR1cC5jCj4gaW5kZXggNDZjZjZkZC4uOTdiMzIxNCAxMDA2NDQKPiAtLS0g YS94ZW4vYXJjaC9hcm0vc2V0dXAuYwo+ICsrKyBiL3hlbi9hcmNoL2FybS9zZXR1cC5jCj4gQEAg LTM4LDYgKzM4LDcgQEAKPiAgI2luY2x1ZGUgPHhlbi92bWFwLmg+Cj4gICNpbmNsdWRlIDx4ZW4v bGliZmR0L2xpYmZkdC5oPgo+ICAjaW5jbHVkZSA8eGVuL2FjcGkuaD4KPiArI2luY2x1ZGUgPGFz bS9hbHRlcm5hdGl2ZS5oPgo+ICAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KPiAgI2luY2x1ZGUgPGFz bS9jdXJyZW50Lmg+Cj4gICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KPiBAQCAtODM1LDYgKzgzNiwx MiBAQCB2b2lkIF9faW5pdCBzdGFydF94ZW4odW5zaWduZWQgbG9uZyBib290X3BoeXNfb2Zmc2V0 LAo+ICAKPiAgICAgIGRvX2luaXRjYWxscygpOwo+ICAKPiArICAgIC8qCj4gKyAgICAgKiBJdCBu ZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIgZG9faW5pdGNhbGxzIHRvIGJlIGFibGUgdG8gdXNlCj4g KyAgICAgKiBzdG9wX21hY2hpbmUgKHRhc2tsZXRzIGluaXRpYWxpemVkIHZpYSBhbiBpbml0Y2Fs bCkuCj4gKyAgICAgKi8KPiArICAgIGFwcGx5X2FsdGVybmF0aXZlc19hbGwoKTsKPiArCj4gICAg ICAvKiBDcmVhdGUgaW5pdGlhbCBkb21haW4gMC4gKi8KPiAgICAgIC8qIFRoZSB2R0lDIGZvciBE T00wIGlzIGV4YWN0bHkgZW11bGF0aW5nIHRoZSBoYXJkd2FyZSBHSUMgKi8KPiAgICAgIGNvbmZp Zy5naWNfdmVyc2lvbiA9IFhFTl9ET01DVExfQ09ORklHX0dJQ19OQVRJVkU7Cj4gZGlmZiAtLWdp dCBhL3hlbi9hcmNoL2FybS94ZW4ubGRzLlMgYi94ZW4vYXJjaC9hcm0veGVuLmxkcy5TCj4gaW5k ZXggYjE4YzljMi4uYjI0ZTkzYiAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0veGVuLmxkcy5T Cj4gKysrIGIveGVuL2FyY2gvYXJtL3hlbi5sZHMuUwo+IEBAIC0xNTEsNiArMTUxLDE1IEBAIFNF Q1RJT05TCj4gICAgICAgICAqKC5pbml0Y2FsbDEuaW5pdCkKPiAgICAgICAgIF9faW5pdGNhbGxf ZW5kID0gLjsKPiAgCj4gKyNpZmRlZiBDT05GSUdfQUxURVJOQVRJVkUKPiArICAgICAgIC4gPSBB TElHTig0KTsKPiArICAgICAgIF9fYWx0X2luc3RydWN0aW9ucyA9IC47Cj4gKyAgICAgICAqKC5h bHRpbnN0cnVjdGlvbnMpCj4gKyAgICAgICBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsKPiAr ICAgICAgIC4gPSBBTElHTig0KTsKPiArICAgICAgICooLmFsdGluc3RyX3JlcGxhY2VtZW50KQo+ ICsjZW5kaWYKPiArCj4gICAgICAgICAqKC5pbml0LmRhdGEpCj4gICAgICAgICAqKC5pbml0LmRh dGEucmVsKQo+ICAgICAgICAgKiguaW5pdC5kYXRhLnJlbC4qKQo+IGRpZmYgLS1naXQgYS94ZW4v aW5jbHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2FsdGVy bmF0aXZlLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjQyODdiYWMK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5o Cj4gQEAgLTAsMCArMSwxNjUgQEAKPiArI2lmbmRlZiBfX0FTTV9BTFRFUk5BVElWRV9ICj4gKyNk ZWZpbmUgX19BU01fQUxURVJOQVRJVkVfSAo+ICsKPiArI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJl Lmg+Cj4gKyNpbmNsdWRlIDx4ZW4vY29uZmlnLmg+Cj4gKyNpbmNsdWRlIDx4ZW4va2NvbmZpZy5o Pgo+ICsKPiArI2lmZGVmIENPTkZJR19BTFRFUk5BVElWRQo+ICsKPiArI2lmbmRlZiBfX0FTU0VN QkxZX18KPiArCj4gKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgo+ICsjaW5jbHVkZSA8eGVuL3R5cGVz Lmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc3RyaW5naWZ5Lmg+Cj4gKwo+ICtzdHJ1Y3QgYWx0X2luc3Ry IHsKPiArCXMzMiBvcmlnX29mZnNldDsJLyogb2Zmc2V0IHRvIG9yaWdpbmFsIGluc3RydWN0aW9u ICovCj4gKwlzMzIgYWx0X29mZnNldDsJCS8qIG9mZnNldCB0byByZXBsYWNlbWVudCBpbnN0cnVj dGlvbiAqLwo+ICsJdTE2IGNwdWZlYXR1cmU7CQkvKiBjcHVmZWF0dXJlIGJpdCBzZXQgZm9yIHJl cGxhY2VtZW50ICovCj4gKwl1OCAgb3JpZ19sZW47CQkvKiBzaXplIG9mIG9yaWdpbmFsIGluc3Ry dWN0aW9uKHMpICovCj4gKwl1OCAgYWx0X2xlbjsJCS8qIHNpemUgb2YgbmV3IGluc3RydWN0aW9u KHMpLCA8PSBvcmlnX2xlbiAqLwoKUGVyaGFwcyBzLzw9Lz09Lz8KCj4gK307Cj4gKwo+ICt2b2lk IF9faW5pdCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKHZvaWQpOwo+ICtpbnQgYXBwbHlfYWx0ZXJu YXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKTsKPiArCj4gKyNkZWZpbmUgQUxUSU5T VFJfRU5UUlkoZmVhdHVyZSkJCQkJCQkgICAgICBcCj4gKwkiIC53b3JkIDY2MWIgLSAuXG4iCQkJ CS8qIGxhYmVsICAgICAgICAgICAqLyBcCj4gKwkiIC53b3JkIDY2M2YgLSAuXG4iCQkJCS8qIG5l dyBpbnN0cnVjdGlvbiAqLyBcCj4gKwkiIC5od29yZCAiIF9fc3RyaW5naWZ5KGZlYXR1cmUpICJc biIJCS8qIGZlYXR1cmUgYml0ICAgICAqLyBcCj4gKwkiIC5ieXRlIDY2MmItNjYxYlxuIgkJCQkv KiBzb3VyY2UgbGVuICAgICAgKi8gXAo+ICsJIiAuYnl0ZSA2NjRmLTY2M2ZcbiIJCQkJLyogcmVw bGFjZW1lbnQgbGVuICovCj4gKwo+ICsvKgo+ICsgKiBhbHRlcm5hdGl2ZSBhc3NlbWJseSBwcmlt aXRpdmU6Cj4gKyAqCj4gKyAqIElmIGFueSBvZiB0aGVzZSAub3JnIGRpcmVjdGl2ZSBmYWlsLCBp dCBtZWFucyB0aGF0IGluc24xIGFuZCBpbnNuMgo+ICsgKiBkb24ndCBoYXZlIHRoZSBzYW1lIGxl bmd0aC4gVGhpcyB1c2VkIHRvIGJlIHdyaXR0ZW4gYXMKPiArICoKPiArICogLmlmICgoNjY0Yi02 NjNiKSAhPSAoNjYyYi02NjFiKSkKPiArICogCS5lcnJvciAiQWx0ZXJuYXRpdmVzIGluc3RydWN0 aW9uIGxlbmd0aCBtaXNtYXRjaCIKPiArICogLmVuZGlmCj4gKyAqCj4gKyAqIGJ1dCBtb3N0IGFz c2VtYmxlcnMgZGllIGlmIGluc24xIG9yIGluc24yIGhhdmUgYSAuaW5zdC4gVGhpcyBzaG91bGQK PiArICogYmUgZml4ZWQgaW4gYSBiaW51dGlscyByZWxlYXNlIHBvc3RlcmlvciB0byAyLjI1LjUx LjAuMiAoYW55dGhpbmcKPiArICogY29udGFpbmluZyBjb21taXQgNGU0ZDA4Y2Y3Mzk5YjYwNiBv ciBjMWJhYWRkZjg4NjEpLgo+ICsgKi8KPiArI2RlZmluZSBfX0FMVEVSTkFUSVZFX0NGRyhvbGRp bnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIGNmZ19lbmFibGVkKQlcCj4gKwkiLmlmICJfX3N0cmlu Z2lmeShjZmdfZW5hYmxlZCkiID09IDFcbiIJCQkJXAo+ICsJIjY2MTpcblx0IgkJCQkJCQlcCj4g KwlvbGRpbnN0ciAiXG4iCQkJCQkJCVwKPiArCSI2NjI6XG4iCQkJCQkJCVwKPiArCSIucHVzaHNl Y3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIgkJCQlcCj4gKwlBTFRJTlNUUl9FTlRSWShm ZWF0dXJlKQkJCQkJCVwKPiArCSIucG9wc2VjdGlvblxuIgkJCQkJCQlcCj4gKwkiLnB1c2hzZWN0 aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgXCJhXCJcbiIJCQlcCj4gKwkiNjYzOlxuXHQiCQkJ CQkJCVwKPiArCW5ld2luc3RyICJcbiIJCQkJCQkJXAo+ICsJIjY2NDpcblx0IgkJCQkJCQlcCj4g KwkiLnBvcHNlY3Rpb25cblx0IgkJCQkJCVwKPiArCSIub3JnCS4gLSAoNjY0Yi02NjNiKSArICg2 NjJiLTY2MWIpXG5cdCIJCQlcCj4gKwkiLm9yZwkuIC0gKDY2MmItNjYxYikgKyAoNjY0Yi02NjNi KVxuIgkJCVwKPiArCSIuZW5kaWZcbiIKPiArCj4gKyNkZWZpbmUgX0FMVEVSTkFUSVZFX0NGRyhv bGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIGNmZywgLi4uKQlcCj4gKwlfX0FMVEVSTkFUSVZF X0NGRyhvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIElTX0VOQUJMRUQoY2ZnKSkKPiArCj4g KyNlbHNlCj4gKwo+ICsjaW5jbHVkZSA8YXNtL2FzbV9kZWZucy5oPgo+ICsKPiArLm1hY3JvIGFs dGluc3RydWN0aW9uX2VudHJ5IG9yaWdfb2Zmc2V0IGFsdF9vZmZzZXQgZmVhdHVyZSBvcmlnX2xl biBhbHRfbGVuCj4gKwkud29yZCBcb3JpZ19vZmZzZXQgLSAuCj4gKwkud29yZCBcYWx0X29mZnNl dCAtIC4KPiArCS5od29yZCBcZmVhdHVyZQo+ICsJLmJ5dGUgXG9yaWdfbGVuCj4gKwkuYnl0ZSBc YWx0X2xlbgo+ICsuZW5kbQo+ICsKPiArLm1hY3JvIGFsdGVybmF0aXZlX2luc24gaW5zbjEsIGlu c24yLCBjYXAsIGVuYWJsZSA9IDEKPiArCS5pZiBcZW5hYmxlCj4gKzY2MToJXGluc24xCj4gKzY2 MjoJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgo+ICsJYWx0aW5zdHJ1Y3Rpb25f ZW50cnkgNjYxYiwgNjYzZiwgXGNhcCwgNjYyYi02NjFiLCA2NjRmLTY2M2YKPiArCS5wb3BzZWN0 aW9uCj4gKwkucHVzaHNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCj4gKzY2MzoJ XGluc24yCj4gKzY2NDoJLnBvcHNlY3Rpb24KPiArCS5vcmcJLiAtICg2NjRiLTY2M2IpICsgKDY2 MmItNjYxYikKPiArCS5vcmcJLiAtICg2NjJiLTY2MWIpICsgKDY2NGItNjYzYikKPiArCS5lbmRp Zgo+ICsuZW5kbQo+ICsKPiArLyoKPiArICogQmVnaW4gYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1 ZW5jZS4KPiArICoKPiArICogVGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoaXMgbWFjcm8gd2lsbCBi ZSBhc3NlbWJsZWQgYW5kIGxpbmtlZCBhcwo+ICsgKiBub3JtYWwuIFRoZXJlIGFyZSBubyByZXN0 cmljdGlvbnMgb24gdGhpcyBjb2RlLgo+ICsgKi8KPiArLm1hY3JvIGFsdGVybmF0aXZlX2lmX25v dCBjYXAsIGVuYWJsZSA9IDEKPiArCS5pZiBcZW5hYmxlCj4gKwkucHVzaHNlY3Rpb24gLmFsdGlu c3RydWN0aW9ucywgImEiCj4gKwlhbHRpbnN0cnVjdGlvbl9lbnRyeSA2NjFmLCA2NjNmLCBcY2Fw LCA2NjJmLTY2MWYsIDY2NGYtNjYzZgo+ICsJLnBvcHNlY3Rpb24KPiArNjYxOgo+ICsJLmVuZGlm Cj4gKy5lbmRtCj4gKwo+ICsvKgo+ICsgKiBQcm92aWRlIHRoZSBhbHRlcm5hdGl2ZSBjb2RlIHNl cXVlbmNlLgo+ICsgKgo+ICsgKiBUaGUgY29kZSB0aGF0IGZvbGxvd3MgdGhpcyBtYWNybyBpcyBh c3NlbWJsZWQgaW50byBhIHNwZWNpYWwKPiArICogc2VjdGlvbiB0byBiZSB1c2VkIGZvciBkeW5h bWljIHBhdGNoaW5nLiBDb2RlIHRoYXQgZm9sbG93cyB0aGlzCj4gKyAqIG1hY3JvIG11c3Q6Cj4g KyAqCj4gKyAqIDEuIEJlIGV4YWN0bHkgdGhlIHNhbWUgbGVuZ3RoIChpbiBieXRlcykgYXMgdGhl IGRlZmF1bHQgY29kZQo+ICsgKiAgICBzZXF1ZW5jZS4KPiArICoKPiArICogMi4gTm90IGNvbnRh aW4gYSBicmFuY2ggdGFyZ2V0IHRoYXQgaXMgdXNlZCBvdXRzaWRlIG9mIHRoZQo+ICsgKiAgICBh bHRlcm5hdGl2ZSBzZXF1ZW5jZSBpdCBpcyBkZWZpbmVkIGluIChicmFuY2hlcyBpbnRvIGFuCj4g KyAqICAgIGFsdGVybmF0aXZlIHNlcXVlbmNlIGFyZSBub3QgZml4ZWQgdXApLgoKSG0sPyBCdXQg Z2V0X2FsdF9pbnNuIHNlZW1zIHRvIHRha2UgY2FyZSBvZiBmaXhpbmcgdGhpcyB1cDoKCiAvKgor ICAgICAgICAgKiBJZiB3ZSdyZSBicmFuY2hpbmcgaW5zaWRlIHRoZSBhbHRlcm5hdGUgc2VxdWVu Y2UsCisgICAgICAgICAqIGRvIG5vdCByZXdyaXRlIHRoZSBpbnN0cnVjdGlvbiwgYXMgaXQgaXMg YWxyZWFkeQorICAgICAgICAgKiBjb3JyZWN0LiBPdGhlcndpc2UsIGdlbmVyYXRlIHRoZSBuZXcg aW5zdHJ1Y3Rpb24uCisgICAgICAgICAqLwoKCj8KCj4gKyAqLwo+ICsubWFjcm8gYWx0ZXJuYXRp dmVfZWxzZQo+ICs2NjI6CS5wdXNoc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIK PiArNjYzOgo+ICsuZW5kbQo+ICsKPiArLyoKPiArICogQ29tcGxldGUgYW4gYWx0ZXJuYXRpdmUg Y29kZSBzZXF1ZW5jZS4KPiArICovCj4gKy5tYWNybyBhbHRlcm5hdGl2ZV9lbmRpZgo+ICs2NjQ6 CS5wb3BzZWN0aW9uCj4gKwkub3JnCS4gLSAoNjY0Yi02NjNiKSArICg2NjJiLTY2MWIpCj4gKwku b3JnCS4gLSAoNjYyYi02NjFiKSArICg2NjRiLTY2M2IpCj4gKy5lbmRtCj4gKwo+ICsjZGVmaW5l IF9BTFRFUk5BVElWRV9DRkcoaW5zbjEsIGluc24yLCBjYXAsIGNmZywgLi4uKQlcCj4gKwlhbHRl cm5hdGl2ZV9pbnNuIGluc24xLCBpbnNuMiwgY2FwLCBJU19FTkFCTEVEKGNmZykKPiArCj4gKyNl bmRpZiAgLyogIF9fQVNTRU1CTFlfXyAgKi8KPiArCj4gKy8qCj4gKyAqIFVzYWdlOiBhc20oQUxU RVJOQVRJVkUob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlKSk7Cj4gKyAqCj4gKyAqIFVzYWdl OiBhc20oQUxURVJOQVRJVkUob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBDT05GSUdfRk9P KSk7Cj4gKyAqIE4uQi4gSWYgQ09ORklHX0ZPTyBpcyBzcGVjaWZpZWQsIGJ1dCBub3Qgc2VsZWN0 ZWQsIHRoZSB3aG9sZSBibG9jawo+ICsgKiAgICAgIHdpbGwgYmUgb21pdHRlZCwgaW5jbHVkaW5n IG9sZGluc3RyLgo+ICsgKi8KPiArI2RlZmluZSBBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5z dHIsIC4uLikgICBcCj4gKwlfQUxURVJOQVRJVkVfQ0ZHKG9sZGluc3RyLCBuZXdpbnN0ciwgX19W QV9BUkdTX18sIDEpCj4gKwo+ICsjZWxzZSAvKiAhQ09ORklHX0FMVEVSTkFUSVZFICovCj4gKwo+ ICtzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKQo+ICt7Cj4g K30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGFwcGx5X2FsdGVybmF0aXZlcyh2b2lkICpzdGFy dCwgc2l6ZV90IGxlbmdodCkKPiArewo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKyNlbmRp Zgo+ICsKPiArI2VuZGlmIC8qIF9fQVNNX0FMVEVSTkFUSVZFX0ggKi8KClRoaXMgYmVpbmcgYSBu ZXcgZmlsZSBwZXJoYXBzIGFkZDoKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogKiBMb2NhbCB2YXJp YWJsZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAogKiBtb2RlOiBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogKiBjLWZpbGUtc3R5bGU6ICJCU0Qi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogKiBjLWJhc2ljLW9mZnNldDogNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogKiBFbmQ6 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogKi8gICAgICAgICAgIAo/Cgo+IGRpZmYgLS1naXQgYS94ZW4vaW5j bHVkZS9hc20tYXJtL2FybTY0L2luc24uaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQvaW5z bi5oCj4gaW5kZXggY2ZjZGJlOS4uNmNlMzdiZSAxMDA2NDQKPiAtLS0gYS94ZW4vaW5jbHVkZS9h c20tYXJtL2FybTY0L2luc24uaAo+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQvaW5z bi5oCj4gQEAgLTYxLDYgKzYxLDIyIEBAIHUzMiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0 ZShlbnVtIGFhcmNoNjRfaW5zbl9pbW1fdHlwZSB0eXBlLAo+ICBzMzIgYWFyY2g2NF9nZXRfYnJh bmNoX29mZnNldCh1MzIgaW5zbik7Cj4gIHUzMiBhYXJjaDY0X3NldF9icmFuY2hfb2Zmc2V0KHUz MiBpbnNuLCBzMzIgb2Zmc2V0KTsKPiAgCj4gKy8qIFdyYXBwZXIgZm9yIGNvbW1vbiBjb2RlICov Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2JyYW5jaF9pbW0odTMyIGluc24pCj4gK3sK PiArICAgIHJldHVybiBhYXJjaDY0X2luc25faXNfYnJhbmNoX2ltbShpbnNuKTsKPiArfQo+ICsK PiArc3RhdGljIGlubGluZSBzMzIgaW5zbl9nZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbikKPiAr ewo+ICsgICAgcmV0dXJuIGFhcmNoNjRfZ2V0X2JyYW5jaF9vZmZzZXQoaW5zbik7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgdTMyIGluc25fc2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24sIHMz MiBvZmZzZXQpCj4gK3sKPiArICAgIHJldHVybiBhYXJjaDY0X3NldF9icmFuY2hfb2Zmc2V0KGlu c24sIG9mZnNldCk7Cj4gK30KPiArCj4gICNlbmRpZiAvKiAhX19BUkNIX0FSTV9BUk02NF9JTlNO ICovCj4gIC8qCj4gICAqIExvY2FsIHZhcmlhYmxlczoKPiAtLSAKPiAxLjkuMQo+IAo+IAo+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gWGVuLWRldmVs IG1haWxpbmcgbGlzdAo+IFhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCj4gaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpo dHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==