From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC 10/16] xen/arm: Introduce alternative runtime patching Date: Sat, 21 May 2016 16:09:58 +0100 (BST) Message-ID: References: <1462466065-30212-1-git-send-email-julien.grall@arm.com> <1462466065-30212-11-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1462466065-30212-11-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: andre.przywara@arm.com, sstabellini@kernel.org, steve.capper@arm.com, wei.chen@arm.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gVGh1LCA1IE1heSAyMDE2LCBKdWxpZW4gR3JhbGwgd3JvdGU6Cj4gU29tZSBvZiB0aGUgcHJv Y2Vzc29yIGVycmF0dW0gd2lsbCByZXF1aXJlIHRvIG1vZGlmeSBjb2RlIHNlcXVlbmNlLgo+IEFz IHRob3NlIG1vZGlmaWNhdGlvbnMgbWF5IGltcGFjdCB0aGUgcGVyZm9ybWFuY2UsIHRoZXkgc2hv dWxkIG9ubHkKPiBiZSBlbmFibGVkIG9uIGFmZmVjdGVkIGNvcmVzLiBGdXJ0aGVybW9yZSwgWGVu IG1heSBhbHNvIHdhbnQgdG8gdGFrZQo+IGFkdmFudGFnZSBvZiBuZXcgaGFyZHdhcmUgZmVhdHVy ZXMgY29taW5nIHVwIHdpdGggdjguMSBhbmQgdjguMi4KPiAKPiBUaGlzIHBhdGNoIGFkZHMgYW4g aW5mcmFzdHJ1Y3R1cmUgdG8gcGF0Y2ggWGVuIGR1cmluZyBib290IHRpbWUKPiBkZXBlbmRpbmcg b24gdGhlICJmZWF0dXJlcyIgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KPiAKPiBUaGlzIGNv ZGUgaXMgYmFzZWQgb24gdGhlIGZpbGUgYXJjaC9hcm02NC9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBp bgo+IExpbnV4IDQuNi1yYzMuIEFueSByZWZlcmVuY2VzIHRvIGFybTY0IGhhdmUgYmVlbiBkcm9w cGVkIHRvIG1ha2UgdGhlCj4gY29kZSBhcyBnZW5lcmljIGFzIHBvc3NpYmxlLgo+IAo+IEZ1cnRo ZXJtb3JlLCBpbiBYZW4gdGhlIGV4ZWN1dGFibGUgc2VjdGlvbnMgKC50ZXh0IGFuZCAuaW5pdC50 ZXh0KQo+IGFyZSBhbHdheXMgbWFwcGVkIHJlYWQtb25seSBhbmQgZW5mb3JjZWQgYnkgU0NUTFIu V05YLiBTbyBpdCBpcyBub3QKPiBwb3NzaWJsZSB0byBkaXJlY3RseSBwYXRjaCBYZW4uCj4gCj4g VG8gYnktcGFzcyB0aGlzIHJlc3RyaWN0aW9uLCBhIHRlbXBvcmFyeSB3cml0ZWFibGUgbWFwcGlu ZyBpcyBtYWRlIHdpdGgKPiB2bWFwLiBUaGlzIG1hcHBpbmcgd2lsbCBiZSB1c2VkIHRvIHdyaXRl IHRoZSBuZXcgaW5zdHJ1Y3Rpb25zLgo+IAo+IExhc3RseSwgcnVudGltZSBwYXRjaGluZyBpcyBj dXJyZW50bHkgbm90IG5lY2Vzc2FyeSBmb3IgQVJNMzIuIFNvIHRoZQo+IGNvZGUgaXMgb25seSBl bmFibGVkIGZvciBBUk02NC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKdWxpZW4gR3JhbGwgPGp1bGll bi5ncmFsbEBhcm0uY29tPgo+IC0tLQo+ICB4ZW4vYXJjaC9hcm0vS2NvbmZpZyAgICAgICAgICAg ICAgfCAgIDUgKwo+ICB4ZW4vYXJjaC9hcm0vTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDEgKwo+ ICB4ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUuYyAgICAgICAgfCAyMTcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPiAgeGVuL2FyY2gvYXJtL3NldHVwLmMgICAgICAgICAg ICAgIHwgICA4ICsrCj4gIHhlbi9hcmNoL2FybS94ZW4ubGRzLlMgICAgICAgICAgICB8ICAgNyAr Kwo+ICB4ZW4vaW5jbHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmggfCAxNjUgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiAgeGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9pbnNuLmggIHwg IDE2ICsrKwo+ICA3IGZpbGVzIGNoYW5nZWQsIDQxOSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUuYwo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgeGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oCj4gCj4gZGlmZiAtLWdpdCBhL3hl bi9hcmNoL2FybS9LY29uZmlnIGIveGVuL2FyY2gvYXJtL0tjb25maWcKPiBpbmRleCA2MjMxY2Q1 Li45YjNlNjZiIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9LY29uZmlnCj4gKysrIGIveGVu L2FyY2gvYXJtL0tjb25maWcKPiBAQCAtMTQsNiArMTQsNyBAQCBjb25maWcgQVJNXzY0Cj4gIAlk ZWZfYm9vbCB5Cj4gIAlkZXBlbmRzIG9uIDY0QklUCj4gIAlzZWxlY3QgSEFTX0dJQ1YzCj4gKyAg ICBzZWxlY3QgQUxURVJOQVRJVkUKPiAgCj4gIGNvbmZpZyBBUk0KPiAgCWRlZl9ib29sIHkKPiBA QCAtNDYsNiArNDcsMTAgQEAgY29uZmlnIEFDUEkKPiAgY29uZmlnIEhBU19HSUNWMwo+ICAJYm9v bAo+ICAKPiArIyBTZWxlY3QgQUxURVJOQVRJVkUgaWYgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0 cyBydW50aW1lIHBhdGNoaW5nCj4gK2NvbmZpZyBBTFRFUk5BVElWRQo+ICsgICAgYm9vbAo+ICsK PiAgZW5kbWVudQo+ICAKPiAgc291cmNlICJjb21tb24vS2NvbmZpZyIKPiBkaWZmIC0tZ2l0IGEv eGVuL2FyY2gvYXJtL01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCj4gaW5kZXggOTEy MmY3OC4uMmQzMzBhYSAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiArKysg Yi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiBAQCAtNCw2ICs0LDcgQEAgc3ViZGlyLXkgKz0gcGxh dGZvcm1zCj4gIHN1YmRpci0kKENPTkZJR19BUk1fNjQpICs9IGVmaQo+ICBzdWJkaXItJChDT05G SUdfQUNQSSkgKz0gYWNwaQo+ICAKPiArb2JqLSQoQ09ORklHX0FMVEVSTkFUSVZFKSArPSBhbHRl cm5hdGl2ZS5vCj4gIG9iai15ICs9IGJvb3RmZHQubwo+ICBvYmoteSArPSBjcHUubwo+ICBvYmot eSArPSBjcHVmZWF0dXJlLm8KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL2FsdGVybmF0aXZl LmMgYi94ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uMGE1ZDFjOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi94ZW4vYXJjaC9h cm0vYWx0ZXJuYXRpdmUuYwo+IEBAIC0wLDAgKzEsMjE3IEBACj4gKy8qCj4gKyAqIGFsdGVybmF0 aXZlIHJ1bnRpbWUgcGF0Y2hpbmcKPiArICogaW5zcGlyZWQgYnkgdGhlIHg4NiB2ZXJzaW9uCj4g KyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNCBBUk0gTHRkLgo+ICsgKgo+ICsgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiAr ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiAr ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKPiArICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHhl bi9jb25maWcuaD4KPiArI2luY2x1ZGUgPHhlbi9pbml0Lmg+Cj4gKyNpbmNsdWRlIDx4ZW4vdHlw ZXMuaD4KPiArI2luY2x1ZGUgPHhlbi9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPHhlbi9tbS5oPgo+ ICsjaW5jbHVkZSA8eGVuL3ZtYXAuaD4KPiArI2luY2x1ZGUgPHhlbi9zbXAuaD4KPiArI2luY2x1 ZGUgPHhlbi9zdG9wX21hY2hpbmUuaD4KPiArI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgo+ ICsjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgo+ICsjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgo+ ICsjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KPiArI2luY2x1ZGUgPGFzbS9pbnNuLmg+Cj4g KyNpbmNsdWRlIDxhc20vcGFnZS5oPgo+ICsKPiArI2RlZmluZSBfX0FMVF9QVFIoYSxmKSAgICAg ICh1MzIgKikoKHZvaWQgKikmKGEpLT5mICsgKGEpLT5mKQo+ICsjZGVmaW5lIEFMVF9PUklHX1BU UihhKSAgICAgX19BTFRfUFRSKGEsIG9yaWdfb2Zmc2V0KQo+ICsjZGVmaW5lIEFMVF9SRVBMX1BU UihhKSAgICAgX19BTFRfUFRSKGEsIGFsdF9vZmZzZXQpCj4gKwo+ICtleHRlcm4gY29uc3Qgc3Ry dWN0IGFsdF9pbnN0ciBfX2FsdF9pbnN0cnVjdGlvbnNbXSwgX19hbHRfaW5zdHJ1Y3Rpb25zX2Vu ZFtdOwo+ICsKPiArc3RydWN0IGFsdF9yZWdpb24gewo+ICsgICAgY29uc3Qgc3RydWN0IGFsdF9p bnN0ciAqYmVnaW47Cj4gKyAgICBjb25zdCBzdHJ1Y3QgYWx0X2luc3RyICplbmQ7Cj4gK307Cj4g Kwo+ICsvKgo+ICsgKiBDaGVjayBpZiB0aGUgdGFyZ2V0IFBDIGlzIHdpdGhpbiBhbiBhbHRlcm5h dGl2ZSBibG9jay4KPiArICovCj4gK3N0YXRpYyBib29sX3QgYnJhbmNoX2luc25fcmVxdWlyZXNf dXBkYXRlKGNvbnN0IHN0cnVjdCBhbHRfaW5zdHIgKmFsdCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwYykKPiArewo+ICsgICAgdW5z aWduZWQgbG9uZyByZXBscHRyOwo+ICsKPiArICAgIGlmICggaXNfYWN0aXZlX2tlcm5lbF90ZXh0 KHBjKSApCj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgcmVwbHB0ciA9ICh1bnNpZ25l ZCBsb25nKUFMVF9SRVBMX1BUUihhbHQpOwo+ICsgICAgaWYgKCBwYyA+PSByZXBscHRyICYmIHBj IDw9IChyZXBscHRyICsgYWx0LT5hbHRfbGVuKSApCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ ICsgICAgLyoKPiArICAgICAqIEJyYW5jaGluZyBpbnRvICphbm90aGVyKiBhbHRlcm5hdGUgc2Vx dWVuY2UgaXMgZG9vbWVkLCBhbmQKPiArICAgICAqIHdlJ3JlIG5vdCBldmVuIHRyeWluZyB0byBm aXggaXQgdXAuCj4gKyAgICAgKi8KPiArICAgIEJVRygpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMy IGdldF9hbHRfaW5zbihjb25zdCBzdHJ1Y3QgYWx0X2luc3RyICphbHQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHUzMiAqaW5zbnB0ciwgY29uc3QgdTMyICphbHRpbnNucHRyKQo+ ICt7Cj4gKyAgICB1MzIgaW5zbjsKPiArCj4gKyAgICBpbnNuID0gbGUzMl90b19jcHUoKmFsdGlu c25wdHIpOwo+ICsKPiArICAgIGlmICggaW5zbl9pc19icmFuY2hfaW1tKGluc24pICkKPiArICAg IHsKPiArICAgICAgICBzMzIgb2Zmc2V0ID0gaW5zbl9nZXRfYnJhbmNoX29mZnNldChpbnNuKTsK PiArICAgICAgICB1bnNpZ25lZCBsb25nIHRhcmdldDsKPiArCj4gKyAgICAgICAgdGFyZ2V0ID0g KHVuc2lnbmVkIGxvbmcpYWx0aW5zbnB0ciArIG9mZnNldDsKPiArCj4gKyAgICAgICAgLyoKPiAr ICAgICAgICAgKiBJZiB3ZSdyZSBicmFuY2hpbmcgaW5zaWRlIHRoZSBhbHRlcm5hdGUgc2VxdWVu Y2UsCj4gKyAgICAgICAgICogZG8gbm90IHJld3JpdGUgdGhlIGluc3RydWN0aW9uLCBhcyBpdCBp cyBhbHJlYWR5Cj4gKyAgICAgICAgICogY29ycmVjdC4gT3RoZXJ3aXNlLCBnZW5lcmF0ZSB0aGUg bmV3IGluc3RydWN0aW9uLgo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIGlmICggYnJhbmNoX2lu c25fcmVxdWlyZXNfdXBkYXRlKGFsdCwgdGFyZ2V0KSApCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgICBvZmZzZXQgPSB0YXJnZXQgLSAodW5zaWduZWQgbG9uZylpbnNucHRyOwo+ICsgICAgICAg ICAgICBpbnNuID0gaW5zbl9zZXRfYnJhbmNoX29mZnNldChpbnNuLCBvZmZzZXQpOwo+ICsgICAg ICAgIH0KPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gaW5zbjsKPiArfQo+ICsKPiArc3RhdGlj IGludCBfX2FwcGx5X2FsdGVybmF0aXZlcyhjb25zdCBzdHJ1Y3QgYWx0X3JlZ2lvbiAqcmVnaW9u KQo+ICt7Cj4gKyAgICBjb25zdCBzdHJ1Y3QgYWx0X2luc3RyICphbHQ7Cj4gKyAgICBjb25zdCB1 MzIgKm9yaWdwdHIsICpyZXBscHRyOwo+ICsgICAgdTMyICp3cml0ZXB0ciwgKndyaXRlbWFwOwo+ ICsgICAgbWZuX3QgdGV4dF9tZm4gPSBfbWZuKHZpcnRfdG9fbWZuKF9zdGV4dCkpOwo+ICsgICAg dW5zaWduZWQgaW50IHRleHRfb3JkZXIgPSBnZXRfb3JkZXJfZnJvbV9ieXRlcyhfZW5kIC0gX3N0 YXJ0KTsKPiArCj4gKyAgICBwcmludGsoIlBhdGNoaW5nIGtlcm5lbCBjb2RlXG4iKTsKPiArCj4g KyAgICAvKgo+ICsgICAgICogVGhlIHRleHQgc2VjdGlvbiBpcyByZWFkLW9ubHkuIFNvIHJlLW1h cCBYZW4gdG8gYmUgYWJsZSB0byBwYXRjaAo+ICsgICAgICogdGhlIGNvZGUuCj4gKyAgICAgKi8K PiArICAgIHdyaXRlbWFwID0gX192bWFwKCZ0ZXh0X21mbiwgMSA8PCB0ZXh0X29yZGVyLCAxLCAx LCBQQUdFX0hZUEVSVklTT1IsCj4gKyAgICAgICAgICAgICAgICAgICAgICBWTUFQX0RFRkFVTFQp Owo+ICsgICAgaWYgKCAhd3JpdGVtYXAgKQo+ICsgICAgewo+ICsgICAgICAgIHByaW50aygiYWx0 ZXJuYXRpdmVzOiBVbmFibGUgdG8gbWFwIHRoZSB0ZXh0IHNlY3Rpb25cbiIpOwo+ICsgICAgICAg IHJldHVybiAtRU5PTUVNOwo+ICsgICAgfQo+ICsKPiArICAgIGZvciAoIGFsdCA9IHJlZ2lvbi0+ YmVnaW47IGFsdCA8IHJlZ2lvbi0+ZW5kOyBhbHQrKyApCj4gKyAgICB7Cj4gKyAgICAgICAgdTMy IGluc247Cj4gKyAgICAgICAgaW50IGksIG5yX2luc3Q7Cj4gKwo+ICsgICAgICAgIGlmICggIWNw dXNfaGF2ZV9jYXAoYWx0LT5jcHVmZWF0dXJlKSApCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ ICsKPiArICAgICAgICBCVUdfT04oYWx0LT5hbHRfbGVuICE9IGFsdC0+b3JpZ19sZW4pOwo+ICsK PiArICAgICAgICBvcmlncHRyID0gQUxUX09SSUdfUFRSKGFsdCk7Cj4gKyAgICAgICAgd3JpdGVw dHIgPSBvcmlncHRyIC0gKHUzMiAqKV9zdGFydCArIHdyaXRlbWFwOwo+ICsgICAgICAgIHJlcGxw dHIgPSBBTFRfUkVQTF9QVFIoYWx0KTsKPiArCj4gKyAgICAgICAgbnJfaW5zdCA9IGFsdC0+YWx0 X2xlbiAvIHNpemVvZihpbnNuKTsKPiArCj4gKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBucl9p bnN0OyBpKysgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgaW5zbiA9IGdldF9hbHRfaW5z bihhbHQsIG9yaWdwdHIgKyBpLCByZXBscHRyICsgaSk7Cj4gKyAgICAgICAgICAgICood3JpdGVw dHIgKyBpKSA9IGNwdV90b19sZTMyKGluc24pOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAg LyogRW5zdXJlIHRoZSBuZXcgaW5zdHJ1Y3Rpb25zIHJlYWNoZWQgdGhlIG1lbW9yeSBhbmQgbnVr ZSAqLwo+ICsgICAgICAgIGNsZWFuX2FuZF9pbnZhbGlkYXRlX2RjYWNoZV92YV9yYW5nZSh3cml0 ZXB0ciwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNp emVvZiAoKndyaXRlcHRyKSAqIG5yX2luc3QpKTsKPiArICAgIH0KPiArCj4gKyAgICAvKiBOdWtl IHRoZSBpbnN0cnVjdGlvbiBjYWNoZSAqLwo+ICsgICAgaW52YWxpZGF0ZV9pY2FjaGUoKTsKPiAr Cj4gKyAgICB2dW5tYXAod3JpdGVtYXApOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ ICsvKgo+ICsgKiBXZSBtaWdodCBiZSBwYXRjaGluZyB0aGUgc3RvcF9tYWNoaW5lIHN0YXRlIG1h Y2hpbmUsIHNvIGltcGxlbWVudCBhCj4gKyAqIHJlYWxseSBzaW1wbGUgcG9sbGluZyBwcm90b2Nv bCBoZXJlLgo+ICsgKi8KPiArc3RhdGljIGludCBfX2FwcGx5X2FsdGVybmF0aXZlc19tdWx0aV9z dG9wKHZvaWQgKnVudXNlZCkKPiArewo+ICsgICAgc3RhdGljIGludCBwYXRjaGVkID0gMDsKPiAr ICAgIHN0cnVjdCBhbHRfcmVnaW9uIHJlZ2lvbiA9IHsKPiArICAgICAgICAuYmVnaW4gPSBfX2Fs dF9pbnN0cnVjdGlvbnMsCj4gKyAgICAgICAgLmVuZCA9IF9fYWx0X2luc3RydWN0aW9uc19lbmQs Cj4gKyAgICB9Owo+ICsKPiArICAgIC8qIFdlIGFsd2F5cyBoYXZlIGEgQ1BVIDAgYXQgdGhpcyBw b2ludCAoX19pbml0KSAqLwo+ICsgICAgaWYgKCBzbXBfcHJvY2Vzc29yX2lkKCkgKQo+ICsgICAg ewo+ICsgICAgICAgIHdoaWxlICggIXJlYWRfYXRvbWljKCZwYXRjaGVkKSApCj4gKyAgICAgICAg ICAgIGNwdV9yZWxheCgpOwo+ICsgICAgICAgIGlzYigpOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ ICsgICAgewo+ICsgICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICAgIEJVR19PTihwYXRjaGVk KTsKPiArICAgICAgICByZXQgPSBfX2FwcGx5X2FsdGVybmF0aXZlcygmcmVnaW9uKTsKPiArICAg ICAgICAvKiBUaGUgcGF0Y2hpbmcgaXMgbm90IGV4cGVjdGVkIHRvIGZhaWwgZHVyaW5nIGJvb3Qu ICovCj4gKyAgICAgICAgQlVHX09OKHJldCAhPSAwKTsKPiArCj4gKyAgICAgICAgLyogQmFycmll cnMgcHJvdmlkZWQgYnkgdGhlIGNhY2hlIGZsdXNoaW5nICovCj4gKyAgICAgICAgd3JpdGVfYXRv bWljKCZwYXRjaGVkLCAxKTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsK PiArdm9pZCBfX2luaXQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKQo+ICt7Cj4gKyAgICBp bnQgcmV0Owo+ICsKPiArCS8qIGJldHRlciBub3QgdHJ5IGNvZGUgcGF0Y2hpbmcgb24gYSBsaXZl IFNNUCBzeXN0ZW0gKi8KPiArICAgIHJldCA9IHN0b3BfbWFjaGluZV9ydW4oX19hcHBseV9hbHRl cm5hdGl2ZXNfbXVsdGlfc3RvcCwgTlVMTCwgTlJfQ1BVUyk7CgpXaHkgbm90IGp1c3QgY2FsbCBz dG9wX21hY2hpbmVfcnVuLCBwYXNzaW5nIDAgYXMgdGhlIGNwdSB0byBydW4KX19hcHBseV9hbHRl cm5hdGl2ZXNfbXVsdGlfc3RvcCBvbj8gR2l2ZW4gdGhhdCB5b3UgYWxyZWFkeSBoYXZlCnNlY29u ZGFyeSBjcHVzIHNwaW5uaW5nIGluIF9fYXBwbHlfYWx0ZXJuYXRpdmVzX211bHRpX3N0b3AuICBX aGF0IGFtIEkKbWlzc2luZz8KCgo+ICsgICAgLyogc3RvcF9tYWNoaW5lX3J1biBzaG91bGQgbmV2 ZXIgZmFpbCBhdCB0aGlzIHN0YWdlIG9mIHRoZSBib290ICovCj4gKyAgICBCVUdfT04ocmV0KTsK PiArfQo+ICsKPiAraW50IGFwcGx5X2FsdGVybmF0aXZlcyh2b2lkICpzdGFydCwgc2l6ZV90IGxl bmd0aCkKPiArewo+ICsgICAgc3RydWN0IGFsdF9yZWdpb24gcmVnaW9uID0gewo+ICsgICAgICAg IC5iZWdpbiA9IHN0YXJ0LAo+ICsgICAgICAgIC5lbmQgPSBzdGFydCArIGxlbmd0aCwKPiArICAg IH07Cj4gKwo+ICsgICAgcmV0dXJuIF9fYXBwbHlfYWx0ZXJuYXRpdmVzKCZyZWdpb24pOwo+ICt9 Cj4gKwo+ICsvKgo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gKyAqIG1vZGU6IEMKPiArICogYy1m aWxlLXN0eWxlOiAiQlNEIgo+ICsgKiBjLWJhc2ljLW9mZnNldDogNAo+ICsgKiBpbmRlbnQtdGFi cy1tb2RlOiBuaWwKPiArICogRW5kOgo+ICsgKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJt L3NldHVwLmMgYi94ZW4vYXJjaC9hcm0vc2V0dXAuYwo+IGluZGV4IDA5ZmYxZWEuLmM0Mzg5ZWYg MTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJtL3NldHVwLmMKPiArKysgYi94ZW4vYXJjaC9hcm0v c2V0dXAuYwo+IEBAIC0zOCw2ICszOCw3IEBACj4gICNpbmNsdWRlIDx4ZW4vdm1hcC5oPgo+ICAj aW5jbHVkZSA8eGVuL2xpYmZkdC9saWJmZHQuaD4KPiAgI2luY2x1ZGUgPHhlbi9hY3BpLmg+Cj4g KyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KPiAgI2luY2x1ZGUgPGFzbS9wYWdlLmg+Cj4g ICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgo+ICAjaW5jbHVkZSA8YXNtL3NldHVwLmg+Cj4gQEAg LTgzNCw2ICs4MzUsMTMgQEAgdm9pZCBfX2luaXQgc3RhcnRfeGVuKHVuc2lnbmVkIGxvbmcgYm9v dF9waHlzX29mZnNldCwKPiAgCj4gICAgICBkb19pbml0Y2FsbHMoKTsKPiAgCj4gKyAgICAvKgo+ ICsgICAgICogSXQgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIGRvX2luaXRjYWxscyB0byBiZSBh YmxlIHRvIHVzZQo+ICsgICAgICogc3RvcF9tYWNoaW5lICh0YXNrbGV0cyBpbml0aWFsaXplZCB2 aWEgYW4gaW5pdGNhbGwpLgo+ICsgICAgICogWFhYOiBJcyBpdCB0b28gbGF0ZT8KPiArICAgICAq Lwo+ICsgICAgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCgpOwo+ICsKPiAgICAgIC8qIENyZWF0ZSBp bml0aWFsIGRvbWFpbiAwLiAqLwo+ICAgICAgLyogVGhlIHZHSUMgZm9yIERPTTAgaXMgZXhhY3Rs eSBlbXVsYXRpbmcgdGhlIGhhcmR3YXJlIEdJQyAqLwo+ICAgICAgY29uZmlnLmdpY192ZXJzaW9u ID0gWEVOX0RPTUNUTF9DT05GSUdfR0lDX05BVElWRTsKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gv YXJtL3hlbi5sZHMuUyBiL3hlbi9hcmNoL2FybS94ZW4ubGRzLlMKPiBpbmRleCAxZjAxMGJkLi44 MGQ5NzAzIDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS94ZW4ubGRzLlMKPiArKysgYi94ZW4v YXJjaC9hcm0veGVuLmxkcy5TCj4gQEAgLTE2Nyw2ICsxNjcsMTMgQEAgU0VDVElPTlMKPiAgICAg ICAgICooLnhzbV9pbml0Y2FsbC5pbml0KQo+ICAgICAgICAgX194c21faW5pdGNhbGxfZW5kID0g LjsKPiAgICB9IDp0ZXh0Cj4gKyNpZmRlZiBDT05GSUdfQUxURVJOQVRJVkUKPiArICAuaW5pdC5h bHRlcm5hdGl2ZXMgOiB7Cj4gKyAgICAgIF9fYWx0X2luc3RydWN0aW9ucyA9IC47Cj4gKyAgICAg ICooLmFsdGluc3RydWN0aW9ucykKPiArICAgICAgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47 Cj4gKyAgfQo+ICsjZW5kaWYKPiAgICBfX2luaXRfZW5kX2VmaSA9IC47Cj4gICAgLiA9IEFMSUdO KFNUQUNLX1NJWkUpOwo+ICAgIF9faW5pdF9lbmQgPSAuOwo+IGRpZmYgLS1naXQgYS94ZW4vaW5j bHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2FsdGVybmF0 aXZlLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjdlM2E2MTAKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oCj4g QEAgLTAsMCArMSwxNjUgQEAKPiArI2lmbmRlZiBfX0FTTV9BTFRFUk5BVElWRV9ICj4gKyNkZWZp bmUgX19BU01fQUxURVJOQVRJVkVfSAo+ICsKPiArI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+ Cj4gKyNpbmNsdWRlIDx4ZW4vY29uZmlnLmg+Cj4gKyNpbmNsdWRlIDx4ZW4va2NvbmZpZy5oPgo+ ICsKPiArI2lmZGVmIENPTkZJR19BTFRFUk5BVElWRQo+ICsKPiArI2lmbmRlZiBfX0FTU0VNQkxZ X18KPiArCj4gKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgo+ICsjaW5jbHVkZSA8eGVuL3R5cGVzLmg+ Cj4gKyNpbmNsdWRlIDx4ZW4vc3RyaW5naWZ5Lmg+Cj4gKwo+ICtzdHJ1Y3QgYWx0X2luc3RyIHsK PiArCXMzMiBvcmlnX29mZnNldDsJLyogb2Zmc2V0IHRvIG9yaWdpbmFsIGluc3RydWN0aW9uICov Cj4gKwlzMzIgYWx0X29mZnNldDsJCS8qIG9mZnNldCB0byByZXBsYWNlbWVudCBpbnN0cnVjdGlv biAqLwo+ICsJdTE2IGNwdWZlYXR1cmU7CQkvKiBjcHVmZWF0dXJlIGJpdCBzZXQgZm9yIHJlcGxh Y2VtZW50ICovCj4gKwl1OCAgb3JpZ19sZW47CQkvKiBzaXplIG9mIG9yaWdpbmFsIGluc3RydWN0 aW9uKHMpICovCj4gKwl1OCAgYWx0X2xlbjsJCS8qIHNpemUgb2YgbmV3IGluc3RydWN0aW9uKHMp LCA8PSBvcmlnX2xlbiAqLwo+ICt9Owo+ICsKPiArdm9pZCBfX2luaXQgYXBwbHlfYWx0ZXJuYXRp dmVzX2FsbCh2b2lkKTsKPiAraW50IGFwcGx5X2FsdGVybmF0aXZlcyh2b2lkICpzdGFydCwgc2l6 ZV90IGxlbmd0aCk7Cj4gKwo+ICsjZGVmaW5lIEFMVElOU1RSX0VOVFJZKGZlYXR1cmUpCQkJCQkJ ICAgICAgXAo+ICsJIiAud29yZCA2NjFiIC0gLlxuIgkJCQkvKiBsYWJlbCAgICAgICAgICAgKi8g XAo+ICsJIiAud29yZCA2NjNmIC0gLlxuIgkJCQkvKiBuZXcgaW5zdHJ1Y3Rpb24gKi8gXAo+ICsJ IiAuaHdvcmQgIiBfX3N0cmluZ2lmeShmZWF0dXJlKSAiXG4iCQkvKiBmZWF0dXJlIGJpdCAgICAg Ki8gXAo+ICsJIiAuYnl0ZSA2NjJiLTY2MWJcbiIJCQkJLyogc291cmNlIGxlbiAgICAgICovIFwK PiArCSIgLmJ5dGUgNjY0Zi02NjNmXG4iCQkJCS8qIHJlcGxhY2VtZW50IGxlbiAqLwo+ICsKPiAr LyoKPiArICogYWx0ZXJuYXRpdmUgYXNzZW1ibHkgcHJpbWl0aXZlOgo+ICsgKgo+ICsgKiBJZiBh bnkgb2YgdGhlc2UgLm9yZyBkaXJlY3RpdmUgZmFpbCwgaXQgbWVhbnMgdGhhdCBpbnNuMSBhbmQg aW5zbjIKPiArICogZG9uJ3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguIFRoaXMgdXNlZCB0byBiZSB3 cml0dGVuIGFzCj4gKyAqCj4gKyAqIC5pZiAoKDY2NGItNjYzYikgIT0gKDY2MmItNjYxYikpCj4g KyAqIAkuZXJyb3IgIkFsdGVybmF0aXZlcyBpbnN0cnVjdGlvbiBsZW5ndGggbWlzbWF0Y2giCj4g KyAqIC5lbmRpZgo+ICsgKgo+ICsgKiBidXQgbW9zdCBhc3NlbWJsZXJzIGRpZSBpZiBpbnNuMSBv ciBpbnNuMiBoYXZlIGEgLmluc3QuIFRoaXMgc2hvdWxkCj4gKyAqIGJlIGZpeGVkIGluIGEgYmlu dXRpbHMgcmVsZWFzZSBwb3N0ZXJpb3IgdG8gMi4yNS41MS4wLjIgKGFueXRoaW5nCj4gKyAqIGNv bnRhaW5pbmcgY29tbWl0IDRlNGQwOGNmNzM5OWI2MDYgb3IgYzFiYWFkZGY4ODYxKS4KPiArICov Cj4gKyNkZWZpbmUgX19BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJl LCBjZmdfZW5hYmxlZCkJXAo+ICsJIi5pZiAiX19zdHJpbmdpZnkoY2ZnX2VuYWJsZWQpIiA9PSAx XG4iCQkJCVwKPiArCSI2NjE6XG5cdCIJCQkJCQkJXAo+ICsJb2xkaW5zdHIgIlxuIgkJCQkJCQlc Cj4gKwkiNjYyOlxuIgkJCQkJCQlcCj4gKwkiLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMs XCJhXCJcbiIJCQkJXAo+ICsJQUxUSU5TVFJfRU5UUlkoZmVhdHVyZSkJCQkJCQlcCj4gKwkiLnBv cHNlY3Rpb25cbiIJCQkJCQkJXAo+ICsJIi5wdXNoc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1l bnQsIFwiYVwiXG4iCQkJXAo+ICsJIjY2Mzpcblx0IgkJCQkJCQlcCj4gKwluZXdpbnN0ciAiXG4i CQkJCQkJCVwKPiArCSI2NjQ6XG5cdCIJCQkJCQkJXAo+ICsJIi5wb3BzZWN0aW9uXG5cdCIJCQkJ CQlcCj4gKwkiLm9yZwkuIC0gKDY2NGItNjYzYikgKyAoNjYyYi02NjFiKVxuXHQiCQkJXAo+ICsJ Ii5vcmcJLiAtICg2NjJiLTY2MWIpICsgKDY2NGItNjYzYilcbiIJCQlcCj4gKwkiLmVuZGlmXG4i Cj4gKwo+ICsjZGVmaW5lIF9BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0 dXJlLCBjZmcsIC4uLikJXAo+ICsJX19BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIsIG5ld2luc3Ry LCBmZWF0dXJlLCBJU19FTkFCTEVEKGNmZykpCj4gKwo+ICsjZWxzZQo+ICsKPiArI2luY2x1ZGUg PGFzbS9hc21fZGVmbnMuaD4KPiArCj4gKy5tYWNybyBhbHRpbnN0cnVjdGlvbl9lbnRyeSBvcmln X29mZnNldCBhbHRfb2Zmc2V0IGZlYXR1cmUgb3JpZ19sZW4gYWx0X2xlbgo+ICsJLndvcmQgXG9y aWdfb2Zmc2V0IC0gLgo+ICsJLndvcmQgXGFsdF9vZmZzZXQgLSAuCj4gKwkuaHdvcmQgXGZlYXR1 cmUKPiArCS5ieXRlIFxvcmlnX2xlbgo+ICsJLmJ5dGUgXGFsdF9sZW4KPiArLmVuZG0KPiArCj4g Ky5tYWNybyBhbHRlcm5hdGl2ZV9pbnNuIGluc24xLCBpbnNuMiwgY2FwLCBlbmFibGUgPSAxCj4g KwkuaWYgXGVuYWJsZQo+ICs2NjE6CVxpbnNuMQo+ICs2NjI6CS5wdXNoc2VjdGlvbiAuYWx0aW5z dHJ1Y3Rpb25zLCAiYSIKPiArCWFsdGluc3RydWN0aW9uX2VudHJ5IDY2MWIsIDY2M2YsIFxjYXAs IDY2MmItNjYxYiwgNjY0Zi02NjNmCj4gKwkucG9wc2VjdGlvbgo+ICsJLnB1c2hzZWN0aW9uIC5h bHRpbnN0cl9yZXBsYWNlbWVudCwgImF4Igo+ICs2NjM6CVxpbnNuMgo+ICs2NjQ6CS5wb3BzZWN0 aW9uCj4gKwkub3JnCS4gLSAoNjY0Yi02NjNiKSArICg2NjJiLTY2MWIpCj4gKwkub3JnCS4gLSAo NjYyYi02NjFiKSArICg2NjRiLTY2M2IpCj4gKwkuZW5kaWYKPiArLmVuZG0KPiArCj4gKy8qCj4g KyAqIEJlZ2luIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2UuCj4gKyAqCj4gKyAqIFRoZSBj b2RlIHRoYXQgZm9sbG93cyB0aGlzIG1hY3JvIHdpbGwgYmUgYXNzZW1ibGVkIGFuZCBsaW5rZWQg YXMKPiArICogbm9ybWFsLiBUaGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zIG9uIHRoaXMgY29kZS4K PiArICovCj4gKy5tYWNybyBhbHRlcm5hdGl2ZV9pZl9ub3QgY2FwLCBlbmFibGUgPSAxCj4gKwku aWYgXGVuYWJsZQo+ICsJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgo+ICsJYWx0 aW5zdHJ1Y3Rpb25fZW50cnkgNjYxZiwgNjYzZiwgXGNhcCwgNjYyZi02NjFmLCA2NjRmLTY2M2YK PiArCS5wb3BzZWN0aW9uCj4gKzY2MToKPiArCS5lbmRpZgo+ICsuZW5kbQo+ICsKPiArLyoKPiAr ICogUHJvdmlkZSB0aGUgYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZS4KPiArICoKPiArICogVGhl IGNvZGUgdGhhdCBmb2xsb3dzIHRoaXMgbWFjcm8gaXMgYXNzZW1ibGVkIGludG8gYSBzcGVjaWFs Cj4gKyAqIHNlY3Rpb24gdG8gYmUgdXNlZCBmb3IgZHluYW1pYyBwYXRjaGluZy4gQ29kZSB0aGF0 IGZvbGxvd3MgdGhpcwo+ICsgKiBtYWNybyBtdXN0Ogo+ICsgKgo+ICsgKiAxLiBCZSBleGFjdGx5 IHRoZSBzYW1lIGxlbmd0aCAoaW4gYnl0ZXMpIGFzIHRoZSBkZWZhdWx0IGNvZGUKPiArICogICAg c2VxdWVuY2UuCj4gKyAqCj4gKyAqIDIuIE5vdCBjb250YWluIGEgYnJhbmNoIHRhcmdldCB0aGF0 IGlzIHVzZWQgb3V0c2lkZSBvZiB0aGUKPiArICogICAgYWx0ZXJuYXRpdmUgc2VxdWVuY2UgaXQg aXMgZGVmaW5lZCBpbiAoYnJhbmNoZXMgaW50byBhbgo+ICsgKiAgICBhbHRlcm5hdGl2ZSBzZXF1 ZW5jZSBhcmUgbm90IGZpeGVkIHVwKS4KPiArICovCj4gKy5tYWNybyBhbHRlcm5hdGl2ZV9lbHNl Cj4gKzY2MjoJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4Igo+ICs2NjM6 Cj4gKy5lbmRtCj4gKwo+ICsvKgo+ICsgKiBDb21wbGV0ZSBhbiBhbHRlcm5hdGl2ZSBjb2RlIHNl cXVlbmNlLgo+ICsgKi8KPiArLm1hY3JvIGFsdGVybmF0aXZlX2VuZGlmCj4gKzY2NDoJLnBvcHNl Y3Rpb24KPiArCS5vcmcJLiAtICg2NjRiLTY2M2IpICsgKDY2MmItNjYxYikKPiArCS5vcmcJLiAt ICg2NjJiLTY2MWIpICsgKDY2NGItNjYzYikKPiArLmVuZG0KPiArCj4gKyNkZWZpbmUgX0FMVEVS TkFUSVZFX0NGRyhpbnNuMSwgaW5zbjIsIGNhcCwgY2ZnLCAuLi4pCVwKPiArCWFsdGVybmF0aXZl X2luc24gaW5zbjEsIGluc24yLCBjYXAsIElTX0VOQUJMRUQoY2ZnKQo+ICsKPiArI2VuZGlmICAv KiAgX19BU1NFTUJMWV9fICAqLwo+ICsKPiArLyoKPiArICogVXNhZ2U6IGFzbShBTFRFUk5BVElW RShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpKTsKPiArICoKPiArICogVXNhZ2U6IGFzbShB TFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIENPTkZJR19GT08pKTsKPiAr ICogTi5CLiBJZiBDT05GSUdfRk9PIGlzIHNwZWNpZmllZCwgYnV0IG5vdCBzZWxlY3RlZCwgdGhl IHdob2xlIGJsb2NrCj4gKyAqICAgICAgd2lsbCBiZSBvbWl0dGVkLCBpbmNsdWRpbmcgb2xkaW5z dHIuCj4gKyAqLwo+ICsjZGVmaW5lIEFMVEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwgLi4u KSAgIFwKPiArCV9BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIsIG5ld2luc3RyLCBfX1ZBX0FSR1Nf XywgMSkKPiArCj4gKyNlbHNlIC8qICFDT05GSUdfQUxURVJOQVRJVkUgKi8KPiArCj4gK3N0YXRp YyBpbmxpbmUgdm9pZCBhcHBseV9hbHRlcm5hdGl2ZXNfYWxsKHZvaWQpCj4gK3sKPiArfQo+ICsK PiAraW50IGFwcGx5X2FsdGVybmF0aXZlcyh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmdodCkKPiAr ewo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKyNlbmRpZgo+ICsKPiArI2VuZGlmIC8qIF9f QVNNX0FMVEVSTkFUSVZFX0ggKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9h cm02NC9pbnNuLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaAo+IGluZGV4IGNm Y2RiZTkuLjZjZTM3YmUgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9p bnNuLmgKPiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaAo+IEBAIC02MSw2 ICs2MSwyMiBAQCB1MzIgYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoZW51bSBhYXJjaDY0 X2luc25faW1tX3R5cGUgdHlwZSwKPiAgczMyIGFhcmNoNjRfZ2V0X2JyYW5jaF9vZmZzZXQodTMy IGluc24pOwo+ICB1MzIgYWFyY2g2NF9zZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbiwgczMyIG9m ZnNldCk7Cj4gIAo+ICsvKiBXcmFwcGVyIGZvciBjb21tb24gY29kZSAqLwo+ICtzdGF0aWMgaW5s aW5lIGJvb2wgaW5zbl9pc19icmFuY2hfaW1tKHUzMiBpbnNuKQo+ICt7Cj4gKyAgICByZXR1cm4g YWFyY2g2NF9pbnNuX2lzX2JyYW5jaF9pbW0oaW5zbik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxp bmUgczMyIGluc25fZ2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24pCj4gK3sKPiArICAgIHJldHVy biBhYXJjaDY0X2dldF9icmFuY2hfb2Zmc2V0KGluc24pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHUzMiBpbnNuX3NldF9icmFuY2hfb2Zmc2V0KHUzMiBpbnNuLCBzMzIgb2Zmc2V0KQo+ICt7 Cj4gKyAgICByZXR1cm4gYWFyY2g2NF9zZXRfYnJhbmNoX29mZnNldChpbnNuLCBvZmZzZXQpOwo+ ICt9Cj4gKwo+ICAjZW5kaWYgLyogIV9fQVJDSF9BUk1fQVJNNjRfSU5TTiAqLwo+ICAvKgo+ICAg KiBMb2NhbCB2YXJpYWJsZXM6Cj4gLS0gCj4gMS45LjEKPiAKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRl dmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==