From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [PATCH v5 1/7] xen/arm: Introduce alternative runtime patching Date: Wed, 20 Jul 2016 16:25:54 +0100 Message-ID: <1469028360-20907-2-git-send-email-julien.grall@arm.com> References: <1469028360-20907-1-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: <1469028360-20907-1-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: xen-devel@lists.xen.org Cc: Julien Grall , sstabellini@kernel.org List-Id: xen-devel@lists.xenproject.org U29tZSBvZiB0aGUgcHJvY2Vzc29yIGVycmF0dW0gd2lsbCByZXF1aXJlIHRvIG1vZGlmeSBjb2Rl IHNlcXVlbmNlLgpBcyB0aG9zZSBtb2RpZmljYXRpb25zIG1heSBpbXBhY3QgdGhlIHBlcmZvcm1h bmNlLCB0aGV5IHNob3VsZCBvbmx5CmJlIGVuYWJsZWQgb24gYWZmZWN0ZWQgY29yZXMuIEZ1cnRo ZXJtb3JlLCBYZW4gbWF5IGFsc28gd2FudCB0byB0YWtlCmFkdmFudGFnZSBvZiBuZXcgaGFyZHdh cmUgZmVhdHVyZXMgY29taW5nIHVwIHdpdGggdjguMSBhbmQgdjguMi4KClRoaXMgcGF0Y2ggYWRk cyBhbiBpbmZyYXN0cnVjdHVyZSB0byBwYXRjaCBYZW4gZHVyaW5nIGJvb3QgdGltZQpkZXBlbmRp bmcgb24gdGhlICJmZWF0dXJlcyIgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KClRoaXMgY29k ZSBpcyBiYXNlZCBvbiB0aGUgZmlsZSBhcmNoL2FybTY0L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGlu CkxpbnV4IDQuNi1yYzMuIEFueSByZWZlcmVuY2VzIHRvIGFybTY0IGhhdmUgYmVlbiBkcm9wcGVk IHRvIG1ha2UgdGhlCmNvZGUgYXMgZ2VuZXJpYyBhcyBwb3NzaWJsZS4KCldoZW4gWGVuIGlzIGNy ZWF0aW5nIHRoZSBwYWdlIHRhYmxlcywgYWxsIHRoZSBleGVjdXRhYmxlIHNlY3Rpb25zCigudGV4 dCBhbmQgLmluaXQudGV4dCkgd2lsbCBiZSBtYXJrZWQgcmVhZC1vbmx5IGFuZCB0aGVuIGVuZm9y Y2VkIGJ5CnNldHRpbmcgU0NUTFIuV05YLgoKV2hpbHN0IGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRv IG1hcmsgdGhvc2UgZW50cmllcyByZWFkLW9ubHkgYWZ0ZXIKWGVuIGhhcyBiZWVuIHBhdGNoZWQs IHdlIHdvdWxkIG5lZWQgZXh0cmEgY2FyZSB0byBhdm9pZCBwb3NzaWJsZQpUTEJzIGNvbmZsaWN0 cyAoc2VlIEQ0LTE3MzIgaW4gQVJNIERESSAwNDg3QS5pKSBhcyBhbGwKcGh5c2ljYWwgQ1BVcyB3 aWxsIGJlIHJ1bm5pbmcuCgpBbGwgdGhlIHBoeXNpY2FsIENQVXMgaGF2ZSB0byBiZSBicm91Z2h0 IHVwIGJlZm9yZSBwYXRjaGluZyBYZW4gYmVjYXVzZQplYWNoIGNvcmVzIG1heSBoYXZlIGRpZmZl cmVudCBlcnJhdGEvZmVhdHVyZXMgd2hpY2ggcmVxdWlyZSBjb2RlCnBhdGNoaW5nLiBUaGUgb25s eSB3YXkgdG8gZmluZCB0aGVtIGlzIHRvIHByb2JlIHN5c3RlbSByZWdpc3RlcnMgb24KZWFjaCBD UFUuCgpUbyBhdm9pZCBleHRyYSBjb21wbGV4aXR5LCBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUg YSB0ZW1wb3JhcnkKd3JpdGVhYmxlIG1hcHBpbmcgd2l0aCB2bWFwLiBUaGlzIG1hcHBpbmcgd2ls bCBiZSB1c2VkIHRvIHdyaXRlIHRoZQpuZXcgaW5zdHJ1Y3Rpb25zLgoKTGFzdGx5LCBydW50aW1l IHBhdGNoaW5nIGlzIGN1cnJlbnRseSBub3QgbmVjZXNzYXJ5IGZvciBBUk0zMi4gU28gdGhlCmNv ZGUgaXMgb25seSBlbmFibGVkIGZvciBBUk02NC4KClNpZ25lZC1vZmYtYnk6IEp1bGllbiBHcmFs bCA8anVsaWVuLmdyYWxsQGFybS5jb20+CgotLS0KICAgIENoYW5nZXMgaW4gdjU6CiAgICAgICAg LSBSZWJhc2Ugb24gdGhlIGxhdGVzdCBzdGFnaW5nCgogICAgQ2hhbmdlcyBpbiB2NDoKICAgICAg ICAtIEZpeCBidWlsZCB3aGVuIEFMVEVSTkFUSVZFIGlzIG5vdCBlbmFibGVkCiAgICAgICAgLSBG aXggdHlwbwogICAgICAgIC0gTW92ZSAuYWx0aW5zdHJ1Y3Rpb25zIGluIGluaXQuZGF0YQoKICAg IENoYW5nZXMgaW4gdjM6CiAgICAgICAgLSAuYWx0aW5zdHJfcmVwbGFjZW1lbnQgc2hvdWxkIGxp dmUgaW4gaW5pdC50ZXh0CiAgICAgICAgLSBBZGQgYSBjb21tZW50IHRvIGV4cGxhaW4gd2hlbiBh cHBseV9hbHRlcm5hdGl2ZXNfYWxsIHNob3VsZCBiZQogICAgICAgIGNhbGxlZC4KCiAgICBDaGFu Z2VzIGluIHYyOgogICAgICAgIC0gVXNlIGhhcmQgdGFicyBpbiBLY29uZmlnCiAgICAgICAgLSBV cGRhdGUgdGhlIGNvcHlyaWdodCB5ZWFyCiAgICAgICAgLSBVcGRhdGUgdGhlIGNvbW1pdCBtZXNz YWdlIHRvIGV4cGxhaW4gdGhlIGV4dHJhIG1hcHBpbmcKLS0tCiB4ZW4vYXJjaC9hcm0vS2NvbmZp ZyAgICAgICAgICAgICAgfCAgIDUgKwogeGVuL2FyY2gvYXJtL01ha2VmaWxlICAgICAgICAgICAg IHwgICAxICsKIHhlbi9hcmNoL2FybS9hbHRlcm5hdGl2ZS5jICAgICAgICB8IDIyMSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogeGVuL2FyY2gvYXJtL3NldHVwLmMgICAg ICAgICAgICAgIHwgICA3ICsrCiB4ZW4vYXJjaC9hcm0veGVuLmxkcy5TICAgICAgICAgICAgfCAg IDkgKysKIHhlbi9pbmNsdWRlL2FzbS1hcm0vYWx0ZXJuYXRpdmUuaCB8IDE2NSArKysrKysrKysr KysrKysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaCAgfCAg MTYgKysrCiA3IGZpbGVzIGNoYW5nZWQsIDQyNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgeGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4v aW5jbHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmgKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0v S2NvbmZpZyBiL3hlbi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDYyMzFjZDUuLjAxNDFiZDkgMTAw NjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9LY29uZmlnCisrKyBiL3hlbi9hcmNoL2FybS9LY29uZmln CkBAIC0xNCw2ICsxNCw3IEBAIGNvbmZpZyBBUk1fNjQKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBv biA2NEJJVAogCXNlbGVjdCBIQVNfR0lDVjMKKwlzZWxlY3QgQUxURVJOQVRJVkUKIAogY29uZmln IEFSTQogCWRlZl9ib29sIHkKQEAgLTQ2LDYgKzQ3LDEwIEBAIGNvbmZpZyBBQ1BJCiBjb25maWcg SEFTX0dJQ1YzCiAJYm9vbAogCisjIFNlbGVjdCBBTFRFUk5BVElWRSBpZiB0aGUgYXJjaGl0ZWN0 dXJlIHN1cHBvcnRzIHJ1bnRpbWUgcGF0Y2hpbmcKK2NvbmZpZyBBTFRFUk5BVElWRQorCWJvb2wK KwogZW5kbWVudQogCiBzb3VyY2UgImNvbW1vbi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gvYXJtL01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IGIyNjRlZDQuLjc0 YmQ3YjggMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC9h cm0vTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBAIHN1YmRpci15ICs9IHBsYXRmb3Jtcwogc3ViZGly LSQoQ09ORklHX0FSTV82NCkgKz0gZWZpCiBzdWJkaXItJChDT05GSUdfQUNQSSkgKz0gYWNwaQog CitvYmotJChDT05GSUdfQUxURVJOQVRJVkUpICs9IGFsdGVybmF0aXZlLm8KIG9iai15ICs9IGJv b3RmZHQubwogb2JqLXkgKz0gY3B1Lm8KIG9iai15ICs9IGNwdWZlYXR1cmUubwpkaWZmIC0tZ2l0 IGEveGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMgYi94ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDBmOThlCi0tLSAvZGV2L251 bGwKKysrIGIveGVuL2FyY2gvYXJtL2FsdGVybmF0aXZlLmMKQEAgLTAsMCArMSwyMjEgQEAKKy8q CisgKiBhbHRlcm5hdGl2ZSBydW50aW1lIHBhdGNoaW5nCisgKiBpbnNwaXJlZCBieSB0aGUgeDg2 IHZlcnNpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBUk0gTHRkLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9jb25maWcuaD4KKyNpbmNs dWRlIDx4ZW4vaW5pdC5oPgorI2luY2x1ZGUgPHhlbi90eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9r ZXJuZWwuaD4KKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4ZW4vdm1hcC5oPgorI2lu Y2x1ZGUgPHhlbi9zbXAuaD4KKyNpbmNsdWRlIDx4ZW4vc3RvcF9tYWNoaW5lLmg+CisjaW5jbHVk ZSA8YXNtL2FsdGVybmF0aXZlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUg PGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUg PGFzbS9pbnNuLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBfX0FMVF9QVFIo YSxmKSAgICAgICh1MzIgKikoKHZvaWQgKikmKGEpLT5mICsgKGEpLT5mKQorI2RlZmluZSBBTFRf T1JJR19QVFIoYSkgICAgIF9fQUxUX1BUUihhLCBvcmlnX29mZnNldCkKKyNkZWZpbmUgQUxUX1JF UExfUFRSKGEpICAgICBfX0FMVF9QVFIoYSwgYWx0X29mZnNldCkKKworZXh0ZXJuIGNvbnN0IHN0 cnVjdCBhbHRfaW5zdHIgX19hbHRfaW5zdHJ1Y3Rpb25zW10sIF9fYWx0X2luc3RydWN0aW9uc19l bmRbXTsKKworc3RydWN0IGFsdF9yZWdpb24geworICAgIGNvbnN0IHN0cnVjdCBhbHRfaW5zdHIg KmJlZ2luOworICAgIGNvbnN0IHN0cnVjdCBhbHRfaW5zdHIgKmVuZDsKK307CisKKy8qCisgKiBD aGVjayBpZiB0aGUgdGFyZ2V0IFBDIGlzIHdpdGhpbiBhbiBhbHRlcm5hdGl2ZSBibG9jay4KKyAq Lworc3RhdGljIGJvb2xfdCBicmFuY2hfaW5zbl9yZXF1aXJlc191cGRhdGUoY29uc3Qgc3RydWN0 IGFsdF9pbnN0ciAqYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBwYykKK3sKKyAgICB1bnNpZ25lZCBsb25nIHJlcGxwdHI7CisKKyAg ICBpZiAoIGlzX2FjdGl2ZV9rZXJuZWxfdGV4dChwYykgKQorICAgICAgICByZXR1cm4gMTsKKwor ICAgIHJlcGxwdHIgPSAodW5zaWduZWQgbG9uZylBTFRfUkVQTF9QVFIoYWx0KTsKKyAgICBpZiAo IHBjID49IHJlcGxwdHIgJiYgcGMgPD0gKHJlcGxwdHIgKyBhbHQtPmFsdF9sZW4pICkKKyAgICAg ICAgcmV0dXJuIDA7CisKKyAgICAvKgorICAgICAqIEJyYW5jaGluZyBpbnRvICphbm90aGVyKiBh bHRlcm5hdGUgc2VxdWVuY2UgaXMgZG9vbWVkLCBhbmQKKyAgICAgKiB3ZSdyZSBub3QgZXZlbiB0 cnlpbmcgdG8gZml4IGl0IHVwLgorICAgICAqLworICAgIEJVRygpOworfQorCitzdGF0aWMgdTMy IGdldF9hbHRfaW5zbihjb25zdCBzdHJ1Y3QgYWx0X2luc3RyICphbHQsCisgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1MzIgKmluc25wdHIsIGNvbnN0IHUzMiAqYWx0aW5zbnB0cikKK3sK KyAgICB1MzIgaW5zbjsKKworICAgIGluc24gPSBsZTMyX3RvX2NwdSgqYWx0aW5zbnB0cik7CisK KyAgICBpZiAoIGluc25faXNfYnJhbmNoX2ltbShpbnNuKSApCisgICAgeworICAgICAgICBzMzIg b2Zmc2V0ID0gaW5zbl9nZXRfYnJhbmNoX29mZnNldChpbnNuKTsKKyAgICAgICAgdW5zaWduZWQg bG9uZyB0YXJnZXQ7CisKKyAgICAgICAgdGFyZ2V0ID0gKHVuc2lnbmVkIGxvbmcpYWx0aW5zbnB0 ciArIG9mZnNldDsKKworICAgICAgICAvKgorICAgICAgICAgKiBJZiB3ZSdyZSBicmFuY2hpbmcg aW5zaWRlIHRoZSBhbHRlcm5hdGUgc2VxdWVuY2UsCisgICAgICAgICAqIGRvIG5vdCByZXdyaXRl IHRoZSBpbnN0cnVjdGlvbiwgYXMgaXQgaXMgYWxyZWFkeQorICAgICAgICAgKiBjb3JyZWN0LiBP dGhlcndpc2UsIGdlbmVyYXRlIHRoZSBuZXcgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAqLworICAg ICAgICBpZiAoIGJyYW5jaF9pbnNuX3JlcXVpcmVzX3VwZGF0ZShhbHQsIHRhcmdldCkgKQorICAg ICAgICB7CisgICAgICAgICAgICBvZmZzZXQgPSB0YXJnZXQgLSAodW5zaWduZWQgbG9uZylpbnNu cHRyOworICAgICAgICAgICAgaW5zbiA9IGluc25fc2V0X2JyYW5jaF9vZmZzZXQoaW5zbiwgb2Zm c2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbnNuOworfQorCitzdGF0aWMg aW50IF9fYXBwbHlfYWx0ZXJuYXRpdmVzKGNvbnN0IHN0cnVjdCBhbHRfcmVnaW9uICpyZWdpb24p Cit7CisgICAgY29uc3Qgc3RydWN0IGFsdF9pbnN0ciAqYWx0OworICAgIGNvbnN0IHUzMiAqb3Jp Z3B0ciwgKnJlcGxwdHI7CisgICAgdTMyICp3cml0ZXB0ciwgKndyaXRlbWFwOworICAgIG1mbl90 IHRleHRfbWZuID0gX21mbih2aXJ0X3RvX21mbihfc3RleHQpKTsKKyAgICB1bnNpZ25lZCBpbnQg dGV4dF9vcmRlciA9IGdldF9vcmRlcl9mcm9tX2J5dGVzKF9lbmQgLSBfc3RhcnQpOworCisgICAg cHJpbnRrKCJQYXRjaGluZyBrZXJuZWwgY29kZVxuIik7CisKKyAgICAvKgorICAgICAqIFRoZSB0 ZXh0IHNlY3Rpb24gaXMgcmVhZC1vbmx5LiBTbyByZS1tYXAgWGVuIHRvIGJlIGFibGUgdG8gcGF0 Y2gKKyAgICAgKiB0aGUgY29kZS4KKyAgICAgKi8KKyAgICB3cml0ZW1hcCA9IF9fdm1hcCgmdGV4 dF9tZm4sIDEgPDwgdGV4dF9vcmRlciwgMSwgMSwgUEFHRV9IWVBFUlZJU09SLAorICAgICAgICAg ICAgICAgICAgICAgIFZNQVBfREVGQVVMVCk7CisgICAgaWYgKCAhd3JpdGVtYXAgKQorICAgIHsK KyAgICAgICAgcHJpbnRrKCJhbHRlcm5hdGl2ZXM6IFVuYWJsZSB0byBtYXAgdGhlIHRleHQgc2Vj dGlvblxuIik7CisgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKworICAgIGZvciAoIGFs dCA9IHJlZ2lvbi0+YmVnaW47IGFsdCA8IHJlZ2lvbi0+ZW5kOyBhbHQrKyApCisgICAgeworICAg ICAgICB1MzIgaW5zbjsKKyAgICAgICAgaW50IGksIG5yX2luc3Q7CisKKyAgICAgICAgaWYgKCAh Y3B1c19oYXZlX2NhcChhbHQtPmNwdWZlYXR1cmUpICkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgICAgIEJVR19PTihhbHQtPmFsdF9sZW4gIT0gYWx0LT5vcmlnX2xlbik7CisKKyAgICAg ICAgb3JpZ3B0ciA9IEFMVF9PUklHX1BUUihhbHQpOworICAgICAgICB3cml0ZXB0ciA9IG9yaWdw dHIgLSAodTMyICopX3N0YXJ0ICsgd3JpdGVtYXA7CisgICAgICAgIHJlcGxwdHIgPSBBTFRfUkVQ TF9QVFIoYWx0KTsKKworICAgICAgICBucl9pbnN0ID0gYWx0LT5hbHRfbGVuIC8gc2l6ZW9mKGlu c24pOworCisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfaW5zdDsgaSsrICkKKyAgICAgICAg eworICAgICAgICAgICAgaW5zbiA9IGdldF9hbHRfaW5zbihhbHQsIG9yaWdwdHIgKyBpLCByZXBs cHRyICsgaSk7CisgICAgICAgICAgICAqKHdyaXRlcHRyICsgaSkgPSBjcHVfdG9fbGUzMihpbnNu KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEVuc3VyZSB0aGUgbmV3IGluc3RydWN0aW9ucyBy ZWFjaGVkIHRoZSBtZW1vcnkgYW5kIG51a2UgKi8KKyAgICAgICAgY2xlYW5fYW5kX2ludmFsaWRh dGVfZGNhY2hlX3ZhX3JhbmdlKHdyaXRlcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHNpemVvZiAoKndyaXRlcHRyKSAqIG5yX2luc3QpKTsKKyAgICB9 CisKKyAgICAvKiBOdWtlIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSAqLworICAgIGludmFsaWRhdGVf aWNhY2hlKCk7CisKKyAgICB2dW5tYXAod3JpdGVtYXApOworCisgICAgcmV0dXJuIDA7Cit9CisK Ky8qCisgKiBXZSBtaWdodCBiZSBwYXRjaGluZyB0aGUgc3RvcF9tYWNoaW5lIHN0YXRlIG1hY2hp bmUsIHNvIGltcGxlbWVudCBhCisgKiByZWFsbHkgc2ltcGxlIHBvbGxpbmcgcHJvdG9jb2wgaGVy ZS4KKyAqLworc3RhdGljIGludCBfX2FwcGx5X2FsdGVybmF0aXZlc19tdWx0aV9zdG9wKHZvaWQg KnVudXNlZCkKK3sKKyAgICBzdGF0aWMgaW50IHBhdGNoZWQgPSAwOworICAgIHN0cnVjdCBhbHRf cmVnaW9uIHJlZ2lvbiA9IHsKKyAgICAgICAgLmJlZ2luID0gX19hbHRfaW5zdHJ1Y3Rpb25zLAor ICAgICAgICAuZW5kID0gX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCwKKyAgICB9OworCisgICAgLyog V2UgYWx3YXlzIGhhdmUgYSBDUFUgMCBhdCB0aGlzIHBvaW50IChfX2luaXQpICovCisgICAgaWYg KCBzbXBfcHJvY2Vzc29yX2lkKCkgKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCAhcmVhZF9hdG9t aWMoJnBhdGNoZWQpICkKKyAgICAgICAgICAgIGNwdV9yZWxheCgpOworICAgICAgICBpc2IoKTsK KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICBCVUdf T04ocGF0Y2hlZCk7CisgICAgICAgIHJldCA9IF9fYXBwbHlfYWx0ZXJuYXRpdmVzKCZyZWdpb24p OworICAgICAgICAvKiBUaGUgcGF0Y2hpbmcgaXMgbm90IGV4cGVjdGVkIHRvIGZhaWwgZHVyaW5n IGJvb3QuICovCisgICAgICAgIEJVR19PTihyZXQgIT0gMCk7CisKKyAgICAgICAgLyogQmFycmll cnMgcHJvdmlkZWQgYnkgdGhlIGNhY2hlIGZsdXNoaW5nICovCisgICAgICAgIHdyaXRlX2F0b21p YygmcGF0Y2hlZCwgMSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlz IGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgYm9vdCBhbmQgYmVmb3JlIENQ VTAganVtcAorICogaW50byB0aGUgaWRsZV9sb29wLgorICovCit2b2lkIF9faW5pdCBhcHBseV9h bHRlcm5hdGl2ZXNfYWxsKHZvaWQpCit7CisgICAgaW50IHJldDsKKworCS8qIGJldHRlciBub3Qg dHJ5IGNvZGUgcGF0Y2hpbmcgb24gYSBsaXZlIFNNUCBzeXN0ZW0gKi8KKyAgICByZXQgPSBzdG9w X21hY2hpbmVfcnVuKF9fYXBwbHlfYWx0ZXJuYXRpdmVzX211bHRpX3N0b3AsIE5VTEwsIE5SX0NQ VVMpOworCisgICAgLyogc3RvcF9tYWNoaW5lX3J1biBzaG91bGQgbmV2ZXIgZmFpbCBhdCB0aGlz IHN0YWdlIG9mIHRoZSBib290ICovCisgICAgQlVHX09OKHJldCk7Cit9CisKK2ludCBhcHBseV9h bHRlcm5hdGl2ZXModm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpCit7CisgICAgc3RydWN0IGFs dF9yZWdpb24gcmVnaW9uID0geworICAgICAgICAuYmVnaW4gPSBzdGFydCwKKyAgICAgICAgLmVu ZCA9IHN0YXJ0ICsgbGVuZ3RoLAorICAgIH07CisKKyAgICByZXR1cm4gX19hcHBseV9hbHRlcm5h dGl2ZXMoJnJlZ2lvbik7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBD CisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50 LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9z ZXR1cC5jIGIveGVuL2FyY2gvYXJtL3NldHVwLmMKaW5kZXggNDZjZjZkZC4uOTdiMzIxNCAxMDA2 NDQKLS0tIGEveGVuL2FyY2gvYXJtL3NldHVwLmMKKysrIGIveGVuL2FyY2gvYXJtL3NldHVwLmMK QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx4ZW4vdm1hcC5oPgogI2luY2x1ZGUgPHhlbi9s aWJmZHQvbGliZmR0Lmg+CiAjaW5jbHVkZSA8eGVuL2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vYWx0 ZXJuYXRpdmUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50 Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC04MzUsNiArODM2LDEyIEBAIHZvaWQgX19p bml0IHN0YXJ0X3hlbih1bnNpZ25lZCBsb25nIGJvb3RfcGh5c19vZmZzZXQsCiAKICAgICBkb19p bml0Y2FsbHMoKTsKIAorICAgIC8qCisgICAgICogSXQgbmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVy IGRvX2luaXRjYWxscyB0byBiZSBhYmxlIHRvIHVzZQorICAgICAqIHN0b3BfbWFjaGluZSAodGFz a2xldHMgaW5pdGlhbGl6ZWQgdmlhIGFuIGluaXRjYWxsKS4KKyAgICAgKi8KKyAgICBhcHBseV9h bHRlcm5hdGl2ZXNfYWxsKCk7CisKICAgICAvKiBDcmVhdGUgaW5pdGlhbCBkb21haW4gMC4gKi8K ICAgICAvKiBUaGUgdkdJQyBmb3IgRE9NMCBpcyBleGFjdGx5IGVtdWxhdGluZyB0aGUgaGFyZHdh cmUgR0lDICovCiAgICAgY29uZmlnLmdpY192ZXJzaW9uID0gWEVOX0RPTUNUTF9DT05GSUdfR0lD X05BVElWRTsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS94ZW4ubGRzLlMgYi94ZW4vYXJjaC9h cm0veGVuLmxkcy5TCmluZGV4IGIxOGM5YzIuLmIyNGU5M2IgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNo L2FybS94ZW4ubGRzLlMKKysrIGIveGVuL2FyY2gvYXJtL3hlbi5sZHMuUwpAQCAtMTUxLDYgKzE1 MSwxNSBAQCBTRUNUSU9OUwogICAgICAgICooLmluaXRjYWxsMS5pbml0KQogICAgICAgIF9faW5p dGNhbGxfZW5kID0gLjsKIAorI2lmZGVmIENPTkZJR19BTFRFUk5BVElWRQorICAgICAgIC4gPSBB TElHTig0KTsKKyAgICAgICBfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOworICAgICAgICooLmFsdGlu c3RydWN0aW9ucykKKyAgICAgICBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsKKyAgICAgICAu ID0gQUxJR04oNCk7CisgICAgICAgKiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpCisjZW5kaWYKKwog ICAgICAgICooLmluaXQuZGF0YSkKICAgICAgICAqKC5pbml0LmRhdGEucmVsKQogICAgICAgICoo LmluaXQuZGF0YS5yZWwuKikKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vYWx0ZXJu YXRpdmUuaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vYWx0ZXJuYXRpdmUuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjg3YmFjCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2lu Y2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oCkBAIC0wLDAgKzEsMTY1IEBACisjaWZuZGVmIF9f QVNNX0FMVEVSTkFUSVZFX0gKKyNkZWZpbmUgX19BU01fQUxURVJOQVRJVkVfSAorCisjaW5jbHVk ZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDx4ZW4vY29uZmlnLmg+CisjaW5jbHVkZSA8 eGVuL2tjb25maWcuaD4KKworI2lmZGVmIENPTkZJR19BTFRFUk5BVElWRQorCisjaWZuZGVmIF9f QVNTRU1CTFlfXworCisjaW5jbHVkZSA8eGVuL2luaXQuaD4KKyNpbmNsdWRlIDx4ZW4vdHlwZXMu aD4KKyNpbmNsdWRlIDx4ZW4vc3RyaW5naWZ5Lmg+CisKK3N0cnVjdCBhbHRfaW5zdHIgeworCXMz MiBvcmlnX29mZnNldDsJLyogb2Zmc2V0IHRvIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJczMy IGFsdF9vZmZzZXQ7CQkvKiBvZmZzZXQgdG8gcmVwbGFjZW1lbnQgaW5zdHJ1Y3Rpb24gKi8KKwl1 MTYgY3B1ZmVhdHVyZTsJCS8qIGNwdWZlYXR1cmUgYml0IHNldCBmb3IgcmVwbGFjZW1lbnQgKi8K Kwl1OCAgb3JpZ19sZW47CQkvKiBzaXplIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uKHMpICovCisJ dTggIGFsdF9sZW47CQkvKiBzaXplIG9mIG5ldyBpbnN0cnVjdGlvbihzKSwgPD0gb3JpZ19sZW4g Ki8KK307CisKK3ZvaWQgX19pbml0IGFwcGx5X2FsdGVybmF0aXZlc19hbGwodm9pZCk7CitpbnQg YXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKTsKKworI2RlZmlu ZSBBTFRJTlNUUl9FTlRSWShmZWF0dXJlKQkJCQkJCSAgICAgIFwKKwkiIC53b3JkIDY2MWIgLSAu XG4iCQkJCS8qIGxhYmVsICAgICAgICAgICAqLyBcCisJIiAud29yZCA2NjNmIC0gLlxuIgkJCQkv KiBuZXcgaW5zdHJ1Y3Rpb24gKi8gXAorCSIgLmh3b3JkICIgX19zdHJpbmdpZnkoZmVhdHVyZSkg IlxuIgkJLyogZmVhdHVyZSBiaXQgICAgICovIFwKKwkiIC5ieXRlIDY2MmItNjYxYlxuIgkJCQkv KiBzb3VyY2UgbGVuICAgICAgKi8gXAorCSIgLmJ5dGUgNjY0Zi02NjNmXG4iCQkJCS8qIHJlcGxh Y2VtZW50IGxlbiAqLworCisvKgorICogYWx0ZXJuYXRpdmUgYXNzZW1ibHkgcHJpbWl0aXZlOgor ICoKKyAqIElmIGFueSBvZiB0aGVzZSAub3JnIGRpcmVjdGl2ZSBmYWlsLCBpdCBtZWFucyB0aGF0 IGluc24xIGFuZCBpbnNuMgorICogZG9uJ3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguIFRoaXMgdXNl ZCB0byBiZSB3cml0dGVuIGFzCisgKgorICogLmlmICgoNjY0Yi02NjNiKSAhPSAoNjYyYi02NjFi KSkKKyAqIAkuZXJyb3IgIkFsdGVybmF0aXZlcyBpbnN0cnVjdGlvbiBsZW5ndGggbWlzbWF0Y2gi CisgKiAuZW5kaWYKKyAqCisgKiBidXQgbW9zdCBhc3NlbWJsZXJzIGRpZSBpZiBpbnNuMSBvciBp bnNuMiBoYXZlIGEgLmluc3QuIFRoaXMgc2hvdWxkCisgKiBiZSBmaXhlZCBpbiBhIGJpbnV0aWxz IHJlbGVhc2UgcG9zdGVyaW9yIHRvIDIuMjUuNTEuMC4yIChhbnl0aGluZworICogY29udGFpbmlu ZyBjb21taXQgNGU0ZDA4Y2Y3Mzk5YjYwNiBvciBjMWJhYWRkZjg4NjEpLgorICovCisjZGVmaW5l IF9fQUxURVJOQVRJVkVfQ0ZHKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSwgY2ZnX2VuYWJs ZWQpCVwKKwkiLmlmICJfX3N0cmluZ2lmeShjZmdfZW5hYmxlZCkiID09IDFcbiIJCQkJXAorCSI2 NjE6XG5cdCIJCQkJCQkJXAorCW9sZGluc3RyICJcbiIJCQkJCQkJXAorCSI2NjI6XG4iCQkJCQkJ CVwKKwkiLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIJCQkJXAorCUFMVElO U1RSX0VOVFJZKGZlYXR1cmUpCQkJCQkJXAorCSIucG9wc2VjdGlvblxuIgkJCQkJCQlcCisJIi5w dXNoc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsIFwiYVwiXG4iCQkJXAorCSI2NjM6XG5c dCIJCQkJCQkJXAorCW5ld2luc3RyICJcbiIJCQkJCQkJXAorCSI2NjQ6XG5cdCIJCQkJCQkJXAor CSIucG9wc2VjdGlvblxuXHQiCQkJCQkJXAorCSIub3JnCS4gLSAoNjY0Yi02NjNiKSArICg2NjJi LTY2MWIpXG5cdCIJCQlcCisJIi5vcmcJLiAtICg2NjJiLTY2MWIpICsgKDY2NGItNjYzYilcbiIJ CQlcCisJIi5lbmRpZlxuIgorCisjZGVmaW5lIF9BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIsIG5l d2luc3RyLCBmZWF0dXJlLCBjZmcsIC4uLikJXAorCV9fQUxURVJOQVRJVkVfQ0ZHKG9sZGluc3Ry LCBuZXdpbnN0ciwgZmVhdHVyZSwgSVNfRU5BQkxFRChjZmcpKQorCisjZWxzZQorCisjaW5jbHVk ZSA8YXNtL2FzbV9kZWZucy5oPgorCisubWFjcm8gYWx0aW5zdHJ1Y3Rpb25fZW50cnkgb3JpZ19v ZmZzZXQgYWx0X29mZnNldCBmZWF0dXJlIG9yaWdfbGVuIGFsdF9sZW4KKwkud29yZCBcb3JpZ19v ZmZzZXQgLSAuCisJLndvcmQgXGFsdF9vZmZzZXQgLSAuCisJLmh3b3JkIFxmZWF0dXJlCisJLmJ5 dGUgXG9yaWdfbGVuCisJLmJ5dGUgXGFsdF9sZW4KKy5lbmRtCisKKy5tYWNybyBhbHRlcm5hdGl2 ZV9pbnNuIGluc24xLCBpbnNuMiwgY2FwLCBlbmFibGUgPSAxCisJLmlmIFxlbmFibGUKKzY2MToJ XGluc24xCis2NjI6CS5wdXNoc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCAiYSIKKwlhbHRpbnN0 cnVjdGlvbl9lbnRyeSA2NjFiLCA2NjNmLCBcY2FwLCA2NjJiLTY2MWIsIDY2NGYtNjYzZgorCS5w b3BzZWN0aW9uCisJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgImF4IgorNjYz OglcaW5zbjIKKzY2NDoJLnBvcHNlY3Rpb24KKwkub3JnCS4gLSAoNjY0Yi02NjNiKSArICg2NjJi LTY2MWIpCisJLm9yZwkuIC0gKDY2MmItNjYxYikgKyAoNjY0Yi02NjNiKQorCS5lbmRpZgorLmVu ZG0KKworLyoKKyAqIEJlZ2luIGFuIGFsdGVybmF0aXZlIGNvZGUgc2VxdWVuY2UuCisgKgorICog VGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoaXMgbWFjcm8gd2lsbCBiZSBhc3NlbWJsZWQgYW5kIGxp bmtlZCBhcworICogbm9ybWFsLiBUaGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zIG9uIHRoaXMgY29k ZS4KKyAqLworLm1hY3JvIGFsdGVybmF0aXZlX2lmX25vdCBjYXAsIGVuYWJsZSA9IDEKKwkuaWYg XGVuYWJsZQorCS5wdXNoc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCAiYSIKKwlhbHRpbnN0cnVj dGlvbl9lbnRyeSA2NjFmLCA2NjNmLCBcY2FwLCA2NjJmLTY2MWYsIDY2NGYtNjYzZgorCS5wb3Bz ZWN0aW9uCis2NjE6CisJLmVuZGlmCisuZW5kbQorCisvKgorICogUHJvdmlkZSB0aGUgYWx0ZXJu YXRpdmUgY29kZSBzZXF1ZW5jZS4KKyAqCisgKiBUaGUgY29kZSB0aGF0IGZvbGxvd3MgdGhpcyBt YWNybyBpcyBhc3NlbWJsZWQgaW50byBhIHNwZWNpYWwKKyAqIHNlY3Rpb24gdG8gYmUgdXNlZCBm b3IgZHluYW1pYyBwYXRjaGluZy4gQ29kZSB0aGF0IGZvbGxvd3MgdGhpcworICogbWFjcm8gbXVz dDoKKyAqCisgKiAxLiBCZSBleGFjdGx5IHRoZSBzYW1lIGxlbmd0aCAoaW4gYnl0ZXMpIGFzIHRo ZSBkZWZhdWx0IGNvZGUKKyAqICAgIHNlcXVlbmNlLgorICoKKyAqIDIuIE5vdCBjb250YWluIGEg YnJhbmNoIHRhcmdldCB0aGF0IGlzIHVzZWQgb3V0c2lkZSBvZiB0aGUKKyAqICAgIGFsdGVybmF0 aXZlIHNlcXVlbmNlIGl0IGlzIGRlZmluZWQgaW4gKGJyYW5jaGVzIGludG8gYW4KKyAqICAgIGFs dGVybmF0aXZlIHNlcXVlbmNlIGFyZSBub3QgZml4ZWQgdXApLgorICovCisubWFjcm8gYWx0ZXJu YXRpdmVfZWxzZQorNjYyOgkucHVzaHNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgi Cis2NjM6CisuZW5kbQorCisvKgorICogQ29tcGxldGUgYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1 ZW5jZS4KKyAqLworLm1hY3JvIGFsdGVybmF0aXZlX2VuZGlmCis2NjQ6CS5wb3BzZWN0aW9uCisJ Lm9yZwkuIC0gKDY2NGItNjYzYikgKyAoNjYyYi02NjFiKQorCS5vcmcJLiAtICg2NjJiLTY2MWIp ICsgKDY2NGItNjYzYikKKy5lbmRtCisKKyNkZWZpbmUgX0FMVEVSTkFUSVZFX0NGRyhpbnNuMSwg aW5zbjIsIGNhcCwgY2ZnLCAuLi4pCVwKKwlhbHRlcm5hdGl2ZV9pbnNuIGluc24xLCBpbnNuMiwg Y2FwLCBJU19FTkFCTEVEKGNmZykKKworI2VuZGlmICAvKiAgX19BU1NFTUJMWV9fICAqLworCisv KgorICogVXNhZ2U6IGFzbShBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUp KTsKKyAqCisgKiBVc2FnZTogYXNtKEFMVEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVh dHVyZSwgQ09ORklHX0ZPTykpOworICogTi5CLiBJZiBDT05GSUdfRk9PIGlzIHNwZWNpZmllZCwg YnV0IG5vdCBzZWxlY3RlZCwgdGhlIHdob2xlIGJsb2NrCisgKiAgICAgIHdpbGwgYmUgb21pdHRl ZCwgaW5jbHVkaW5nIG9sZGluc3RyLgorICovCisjZGVmaW5lIEFMVEVSTkFUSVZFKG9sZGluc3Ry LCBuZXdpbnN0ciwgLi4uKSAgIFwKKwlfQUxURVJOQVRJVkVfQ0ZHKG9sZGluc3RyLCBuZXdpbnN0 ciwgX19WQV9BUkdTX18sIDEpCisKKyNlbHNlIC8qICFDT05GSUdfQUxURVJOQVRJVkUgKi8KKwor c3RhdGljIGlubGluZSB2b2lkIGFwcGx5X2FsdGVybmF0aXZlc19hbGwodm9pZCkKK3sKK30KKwor c3RhdGljIGlubGluZSBpbnQgYXBwbHlfYWx0ZXJuYXRpdmVzKHZvaWQgKnN0YXJ0LCBzaXplX3Qg bGVuZ2h0KQoreworICAgIHJldHVybiAwOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNN X0FMVEVSTkFUSVZFX0ggKi8KZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQv aW5zbi5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9pbnNuLmgKaW5kZXggY2ZjZGJlOS4u NmNlMzdiZSAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9pbnNuLmgKKysr IGIveGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9pbnNuLmgKQEAgLTYxLDYgKzYxLDIyIEBAIHUz MiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShlbnVtIGFhcmNoNjRfaW5zbl9pbW1fdHlw ZSB0eXBlLAogczMyIGFhcmNoNjRfZ2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24pOwogdTMyIGFh cmNoNjRfc2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24sIHMzMiBvZmZzZXQpOwogCisvKiBXcmFw cGVyIGZvciBjb21tb24gY29kZSAqLworc3RhdGljIGlubGluZSBib29sIGluc25faXNfYnJhbmNo X2ltbSh1MzIgaW5zbikKK3sKKyAgICByZXR1cm4gYWFyY2g2NF9pbnNuX2lzX2JyYW5jaF9pbW0o aW5zbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgczMyIGluc25fZ2V0X2JyYW5jaF9vZmZzZXQodTMy IGluc24pCit7CisgICAgcmV0dXJuIGFhcmNoNjRfZ2V0X2JyYW5jaF9vZmZzZXQoaW5zbik7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdTMyIGluc25fc2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24sIHMz MiBvZmZzZXQpCit7CisgICAgcmV0dXJuIGFhcmNoNjRfc2V0X2JyYW5jaF9vZmZzZXQoaW5zbiwg b2Zmc2V0KTsKK30KKwogI2VuZGlmIC8qICFfX0FSQ0hfQVJNX0FSTTY0X0lOU04gKi8KIC8qCiAg KiBMb2NhbCB2YXJpYWJsZXM6Ci0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=