From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [RFC 09/16] xen/arm: arm64: Add helpers to decode and encode branch instructions Date: Thu, 5 May 2016 17:34:18 +0100 Message-ID: <1462466065-30212-10-git-send-email-julien.grall@arm.com> References: <1462466065-30212-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: <1462466065-30212-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: andre.przywara@arm.com, Julien Grall , sstabellini@kernel.org, wei.chen@arm.com, steve.capper@arm.com List-Id: xen-devel@lists.xenproject.org V2UgbWF5IG5lZWQgdG8gdXBkYXRlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aGVuIHBhdGNoaW5nIFhl bi4KClRoZSBjb2RlIGhhcyBiZWVuIGltcG9ydGVkIGZyb20gdGhlIGZpbGVzIGFyY2gvYXJtNjQv a2VybmVsL2luc24uYwphbmQgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggaW4gTGludXgg djQuNi1yYzMuCgpOb3RlIHRoYXQgb25seSB0aGUgbmVjZXNzYXJ5IGhlbHBlcnMgaGF2ZSBiZWVu IGltcG9ydGVkLgoKU2lnbmVkLW9mZi1ieTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJt LmNvbT4KLS0tCiB4ZW4vYXJjaC9hcm0vYXJtNjQvTWFrZWZpbGUgICAgICB8ICAgMSArCiB4ZW4v YXJjaC9hcm0vYXJtNjQvaW5zbi5jICAgICAgICB8IDIxMyArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oIHwgIDcy ICsrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS1hcm0vaW5zbi5oICAgICAgIHwgIDIyICsr KysKIDQgZmlsZXMgY2hhbmdlZCwgMzA4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB4ZW4vYXJjaC9hcm0vYXJtNjQvaW5zbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1 ZGUvYXNtLWFybS9hcm02NC9pbnNuLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS9h c20tYXJtL2luc24uaAoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9hcm02NC9NYWtlZmlsZSBi L3hlbi9hcmNoL2FybS9hcm02NC9NYWtlZmlsZQppbmRleCAzOWM2YWM2Li5jMWZhNDNmIDEwMDY0 NAotLS0gYS94ZW4vYXJjaC9hcm0vYXJtNjQvTWFrZWZpbGUKKysrIGIveGVuL2FyY2gvYXJtL2Fy bTY0L01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQCBvYmotJChFQVJMWV9QUklOVEspICs9IGRlYnVn Lm8KIG9iai15ICs9IGRvbWN0bC5vCiBvYmoteSArPSBkb21haW4ubwogb2JqLXkgKz0gZW50cnku bworb2JqLXkgKz0gaW5zbi5vCiBvYmoteSArPSBzbXBib290Lm8KIG9iai15ICs9IHRyYXBzLm8K IG9iai15ICs9IHZmcC5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vYXJtNjQvaW5zbi5jIGIv eGVuL2FyY2gvYXJtL2FybTY0L2luc24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi41NGE2YjYyCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2FyY2gvYXJtL2FybTY0L2luc24u YwpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIEJhc2VkIG9uIExpbnV4IGFyY2gvYXJtNjQva2Vy bmVsL2luc24uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBIdWF3ZWkgTHRkLgorICogQXV0 aG9yOiBKaWFuZyBMaXUgPGxpdWo5N0BnbWFpbC5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAy MDE0LTIwMTYgWmkgU2hlbiBMaW0gPHpsaW0ubG54QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgorICovCisjaW5jbHVkZSA8eGVuL2NvbmZpZy5oPgorI2luY2x1ZGUgPHhlbi90 eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNp bmNsdWRlIDx4ZW4vc2l6ZXMuaD4KKyNpbmNsdWRlIDx4ZW4vYml0b3BzLmg+CisjaW5jbHVkZSA8 YXNtL2luc24uaD4KKyNpbmNsdWRlIDxhc20vYXJtNjQvaW5zbi5oPgorCitib29sIGFhcmNoNjRf aW5zbl9pc19icmFuY2hfaW1tKHUzMiBpbnNuKQoreworCXJldHVybiAoYWFyY2g2NF9pbnNuX2lz X2IoaW5zbikgfHwgYWFyY2g2NF9pbnNuX2lzX2JsKGluc24pIHx8CisJCWFhcmNoNjRfaW5zbl9p c190YnooaW5zbikgfHwgYWFyY2g2NF9pbnNuX2lzX3RibnooaW5zbikgfHwKKwkJYWFyY2g2NF9p bnNuX2lzX2NieihpbnNuKSB8fCBhYXJjaDY0X2luc25faXNfY2JueihpbnNuKSB8fAorCQlhYXJj aDY0X2luc25faXNfYmNvbmQoaW5zbikpOworfQorCitzdGF0aWMgaW50IGFhcmNoNjRfZ2V0X2lt bV9zaGlmdF9tYXNrKGVudW0gYWFyY2g2NF9pbnNuX2ltbV90eXBlIHR5cGUsCisJCQkJCQl1MzIg Km1hc2twLCBpbnQgKnNoaWZ0cCkKK3sKKwl1MzIgbWFzazsKKwlpbnQgc2hpZnQ7CisKKwlzd2l0 Y2ggKHR5cGUpIHsKKwljYXNlIEFBUkNINjRfSU5TTl9JTU1fMjY6CisJCW1hc2sgPSBCSVQoMjYp IC0gMTsKKwkJc2hpZnQgPSAwOworCQlicmVhazsKKwljYXNlIEFBUkNINjRfSU5TTl9JTU1fMTk6 CisJCW1hc2sgPSBCSVQoMTkpIC0gMTsKKwkJc2hpZnQgPSA1OworCQlicmVhazsKKwljYXNlIEFB UkNINjRfSU5TTl9JTU1fMTY6CisJCW1hc2sgPSBCSVQoMTYpIC0gMTsKKwkJc2hpZnQgPSA1Owor CQlicmVhazsKKwljYXNlIEFBUkNINjRfSU5TTl9JTU1fMTQ6CisJCW1hc2sgPSBCSVQoMTQpIC0g MTsKKwkJc2hpZnQgPSA1OworCQlicmVhazsKKwljYXNlIEFBUkNINjRfSU5TTl9JTU1fMTI6CisJ CW1hc2sgPSBCSVQoMTIpIC0gMTsKKwkJc2hpZnQgPSAxMDsKKwkJYnJlYWs7CisJY2FzZSBBQVJD SDY0X0lOU05fSU1NXzk6CisJCW1hc2sgPSBCSVQoOSkgLSAxOworCQlzaGlmdCA9IDEyOworCQli cmVhazsKKwljYXNlIEFBUkNINjRfSU5TTl9JTU1fNzoKKwkJbWFzayA9IEJJVCg3KSAtIDE7CisJ CXNoaWZ0ID0gMTU7CisJCWJyZWFrOworCWNhc2UgQUFSQ0g2NF9JTlNOX0lNTV82OgorCWNhc2Ug QUFSQ0g2NF9JTlNOX0lNTV9TOgorCQltYXNrID0gQklUKDYpIC0gMTsKKwkJc2hpZnQgPSAxMDsK KwkJYnJlYWs7CisJY2FzZSBBQVJDSDY0X0lOU05fSU1NX1I6CisJCW1hc2sgPSBCSVQoNikgLSAx OworCQlzaGlmdCA9IDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwkqbWFza3AgPSBtYXNrOworCSpzaGlmdHAgPSBzaGlmdDsKKworCXJldHVybiAwOwor fQorCisjZGVmaW5lIEFEUl9JTU1fSElMT1NQTElUCTIKKyNkZWZpbmUgQURSX0lNTV9TSVpFCQlT Wl8yTQorI2RlZmluZSBBRFJfSU1NX0xPTUFTSwkJKCgxIDw8IEFEUl9JTU1fSElMT1NQTElUKSAt IDEpCisjZGVmaW5lIEFEUl9JTU1fSElNQVNLCQkoKEFEUl9JTU1fU0laRSA+PiBBRFJfSU1NX0hJ TE9TUExJVCkgLSAxKQorI2RlZmluZSBBRFJfSU1NX0xPU0hJRlQJCTI5CisjZGVmaW5lIEFEUl9J TU1fSElTSElGVAkJNQorCit1NjQgYWFyY2g2NF9pbnNuX2RlY29kZV9pbW1lZGlhdGUoZW51bSBh YXJjaDY0X2luc25faW1tX3R5cGUgdHlwZSwgdTMyIGluc24pCit7CisJdTMyIGltbWxvLCBpbW1o aSwgbWFzazsKKwlpbnQgc2hpZnQ7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEFBUkNINjRf SU5TTl9JTU1fQURSOgorCQlzaGlmdCA9IDA7CisJCWltbWxvID0gKGluc24gPj4gQURSX0lNTV9M T1NISUZUKSAmIEFEUl9JTU1fTE9NQVNLOworCQlpbW1oaSA9IChpbnNuID4+IEFEUl9JTU1fSElT SElGVCkgJiBBRFJfSU1NX0hJTUFTSzsKKwkJaW5zbiA9IChpbW1oaSA8PCBBRFJfSU1NX0hJTE9T UExJVCkgfCBpbW1sbzsKKwkJbWFzayA9IEFEUl9JTU1fU0laRSAtIDE7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCWlmIChhYXJjaDY0X2dldF9pbW1fc2hpZnRfbWFzayh0eXBlLCAmbWFzaywgJnNo aWZ0KSA8IDApIHsKKwkJCXByaW50ayhYRU5MT0dfRVJSICJhYXJjaDY0X2luc25fZGVjb2RlX2lt bWVkaWF0ZTogdW5rbm93biBpbW1lZGlhdGUgZW5jb2RpbmcgJWRcbiIsCisJCQkgICAgICAgdHlw ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAoaW5zbiA+PiBzaGlmdCkgJiBt YXNrOworfQorCit1MzIgYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoZW51bSBhYXJjaDY0 X2luc25faW1tX3R5cGUgdHlwZSwKKwkJCQkgIHUzMiBpbnNuLCB1NjQgaW1tKQoreworCXUzMiBp bW1sbywgaW1taGksIG1hc2s7CisJaW50IHNoaWZ0OworCisJc3dpdGNoICh0eXBlKSB7CisJY2Fz ZSBBQVJDSDY0X0lOU05fSU1NX0FEUjoKKwkJc2hpZnQgPSAwOworCQlpbW1sbyA9IChpbW0gJiBB RFJfSU1NX0xPTUFTSykgPDwgQURSX0lNTV9MT1NISUZUOworCQlpbW0gPj49IEFEUl9JTU1fSElM T1NQTElUOworCQlpbW1oaSA9IChpbW0gJiBBRFJfSU1NX0hJTUFTSykgPDwgQURSX0lNTV9ISVNI SUZUOworCQlpbW0gPSBpbW1sbyB8IGltbWhpOworCQltYXNrID0gKChBRFJfSU1NX0xPTUFTSyA8 PCBBRFJfSU1NX0xPU0hJRlQpIHwKKwkJCShBRFJfSU1NX0hJTUFTSyA8PCBBRFJfSU1NX0hJU0hJ RlQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKGFhcmNoNjRfZ2V0X2ltbV9zaGlmdF9t YXNrKHR5cGUsICZtYXNrLCAmc2hpZnQpIDwgMCkgeworCQkJcHJpbnRrKFhFTkxPR19FUlIgImFh cmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlOiB1bmtub3duIGltbWVkaWF0ZSBlbmNvZGluZyAl ZFxuIiwKKwkJCSAgICAgICB0eXBlKTsKKwkJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwor CQl9CisJfQorCisJLyogVXBkYXRlIHRoZSBpbW1lZGlhdGUgZmllbGQuICovCisJaW5zbiAmPSB+ KG1hc2sgPDwgc2hpZnQpOworCWluc24gfD0gKGltbSAmIG1hc2spIDw8IHNoaWZ0OworCisJcmV0 dXJuIGluc247Cit9CisKKy8qCisgKiBEZWNvZGUgdGhlIGltbSBmaWVsZCBvZiBhIGJyYW5jaCwg YW5kIHJldHVybiB0aGUgYnl0ZSBvZmZzZXQgYXMgYQorICogc2lnbmVkIHZhbHVlIChzbyBpdCBj YW4gYmUgdXNlZCB3aGVuIGNvbXB1dGluZyBhIG5ldyBicmFuY2gKKyAqIHRhcmdldCkuCisgKi8K K3MzMiBhYXJjaDY0X2dldF9icmFuY2hfb2Zmc2V0KHUzMiBpbnNuKQoreworCXMzMiBpbW07CisK KwlpZiAoYWFyY2g2NF9pbnNuX2lzX2IoaW5zbikgfHwgYWFyY2g2NF9pbnNuX2lzX2JsKGluc24p KSB7CisJCWltbSA9IGFhcmNoNjRfaW5zbl9kZWNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9J TU1fMjYsIGluc24pOworCQlyZXR1cm4gKGltbSA8PCA2KSA+PiA0OworCX0KKworCWlmIChhYXJj aDY0X2luc25faXNfY2J6KGluc24pIHx8IGFhcmNoNjRfaW5zbl9pc19jYm56KGluc24pIHx8CisJ ICAgIGFhcmNoNjRfaW5zbl9pc19iY29uZChpbnNuKSkgeworCQlpbW0gPSBhYXJjaDY0X2luc25f ZGVjb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzE5LCBpbnNuKTsKKwkJcmV0dXJuIChp bW0gPDwgMTMpID4+IDExOworCX0KKworCWlmIChhYXJjaDY0X2luc25faXNfdGJ6KGluc24pIHx8 IGFhcmNoNjRfaW5zbl9pc190Ym56KGluc24pKSB7CisJCWltbSA9IGFhcmNoNjRfaW5zbl9kZWNv ZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fMTQsIGluc24pOworCQlyZXR1cm4gKGltbSA8 PCAxOCkgPj4gMTY7CisJfQorCisJLyogVW5oYW5kbGVkIGluc3RydWN0aW9uICovCisJQlVHKCk7 Cit9CisKKy8qCisgKiBFbmNvZGUgdGhlIGRpc3BsYWNlbWVudCBvZiBhIGJyYW5jaCBpbiB0aGUg aW1tIGZpZWxkIGFuZCByZXR1cm4gdGhlCisgKiB1cGRhdGVkIGluc3RydWN0aW9uLgorICovCit1 MzIgYWFyY2g2NF9zZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbiwgczMyIG9mZnNldCkKK3sKKwlp ZiAoYWFyY2g2NF9pbnNuX2lzX2IoaW5zbikgfHwgYWFyY2g2NF9pbnNuX2lzX2JsKGluc24pKQor CQlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV8y NiwgaW5zbiwKKwkJCQkJCSAgICAgb2Zmc2V0ID4+IDIpOworCisJaWYgKGFhcmNoNjRfaW5zbl9p c19jYnooaW5zbikgfHwgYWFyY2g2NF9pbnNuX2lzX2NibnooaW5zbikgfHwKKwkgICAgYWFyY2g2 NF9pbnNuX2lzX2Jjb25kKGluc24pKQorCQlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1l ZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV8xOSwgaW5zbiwKKwkJCQkJCSAgICAgb2Zmc2V0ID4+IDIp OworCisJaWYgKGFhcmNoNjRfaW5zbl9pc190YnooaW5zbikgfHwgYWFyY2g2NF9pbnNuX2lzX3Ri bnooaW5zbikpCisJCXJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0 X0lOU05fSU1NXzE0LCBpbnNuLAorCQkJCQkJICAgICBvZmZzZXQgPj4gMik7CisKKwkvKiBVbmhh bmRsZWQgaW5zdHJ1Y3Rpb24gKi8KKwlCVUcoKTsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxl czoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0 OiA4CisgKiBpbmRlbnQtdGFicy1tb2RlOiB0CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hl bi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9hcm02 NC9pbnNuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjZGJlOQotLS0g L2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oCkBAIC0wLDAg KzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSHVhd2VpIEx0ZC4KKyAqIEF1dGhv cjogSmlhbmcgTGl1IDxsaXVqOTdAZ21haWwuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAx NCBaaSBTaGVuIExpbSA8emxpbS5sbnhAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisgKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9BUk02NF9JTlNOCisjZGVmaW5lIF9fQVJDSF9B Uk1fQVJNNjRfSU5TTgorCisjaW5jbHVkZSA8eGVuL2NvbmZpZy5oPgorI2luY2x1ZGUgPHhlbi90 eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9zdGRib29sLmg+CisKK2VudW0gYWFyY2g2NF9pbnNuX2lt bV90eXBlIHsKKwlBQVJDSDY0X0lOU05fSU1NX0FEUiwKKwlBQVJDSDY0X0lOU05fSU1NXzI2LAor CUFBUkNINjRfSU5TTl9JTU1fMTksCisJQUFSQ0g2NF9JTlNOX0lNTV8xNiwKKwlBQVJDSDY0X0lO U05fSU1NXzE0LAorCUFBUkNINjRfSU5TTl9JTU1fMTIsCisJQUFSQ0g2NF9JTlNOX0lNTV85LAor CUFBUkNINjRfSU5TTl9JTU1fNywKKwlBQVJDSDY0X0lOU05fSU1NXzYsCisJQUFSQ0g2NF9JTlNO X0lNTV9TLAorCUFBUkNINjRfSU5TTl9JTU1fUiwKKwlBQVJDSDY0X0lOU05fSU1NX01BWAorfTsK KworI2RlZmluZQlfX0FBUkNINjRfSU5TTl9GVU5DUyhhYmJyLCBtYXNrLCB2YWwpCVwKK3N0YXRp YyBhbHdheXNfaW5saW5lIGJvb2xfdCBhYXJjaDY0X2luc25faXNfIyNhYmJyKHUzMiBjb2RlKSBc Cit7IHJldHVybiAoY29kZSAmIChtYXNrKSkgPT0gKHZhbCk7IH0gXAorc3RhdGljIGFsd2F5c19p bmxpbmUgdTMyIGFhcmNoNjRfaW5zbl9nZXRfIyNhYmJyIyNfdmFsdWUodm9pZCkgXAoreyByZXR1 cm4gKHZhbCk7IH0KKworX19BQVJDSDY0X0lOU05fRlVOQ1MoYiwJCTB4RkMwMDAwMDAsIDB4MTQw MDAwMDApCitfX0FBUkNINjRfSU5TTl9GVU5DUyhibCwJMHhGQzAwMDAwMCwgMHg5NDAwMDAwMCkK K19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGNieiwJMHg3RjAwMDAwMCwgMHgzNDAwMDAwMCkKK19fQUFS Q0g2NF9JTlNOX0ZVTkNTKGNibnosCTB4N0YwMDAwMDAsIDB4MzUwMDAwMDApCitfX0FBUkNINjRf SU5TTl9GVU5DUyh0YnosCTB4N0YwMDAwMDAsIDB4MzYwMDAwMDApCitfX0FBUkNINjRfSU5TTl9G VU5DUyh0Ym56LAkweDdGMDAwMDAwLCAweDM3MDAwMDAwKQorX19BQVJDSDY0X0lOU05fRlVOQ1Mo YmNvbmQsCTB4RkYwMDAwMTAsIDB4NTQwMDAwMDApCisKK2Jvb2wgYWFyY2g2NF9pbnNuX2lzX2Jy YW5jaF9pbW0odTMyIGluc24pOworCit1NjQgYWFyY2g2NF9pbnNuX2RlY29kZV9pbW1lZGlhdGUo ZW51bSBhYXJjaDY0X2luc25faW1tX3R5cGUgdHlwZSwgdTMyIGluc24pOwordTMyIGFhcmNoNjRf aW5zbl9lbmNvZGVfaW1tZWRpYXRlKGVudW0gYWFyY2g2NF9pbnNuX2ltbV90eXBlIHR5cGUsCisJ CQkJICB1MzIgaW5zbiwgdTY0IGltbSk7CisKK3MzMiBhYXJjaDY0X2dldF9icmFuY2hfb2Zmc2V0 KHUzMiBpbnNuKTsKK3UzMiBhYXJjaDY0X3NldF9icmFuY2hfb2Zmc2V0KHUzMiBpbnNuLCBzMzIg b2Zmc2V0KTsKKworI2VuZGlmIC8qICFfX0FSQ0hfQVJNX0FSTTY0X0lOU04gKi8KKy8qCisgKiBM b2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBj LWJhc2ljLW9mZnNldDogOAorICogaW5kZW50LXRhYnMtbW9kZTogdAorICogRW5kOgorICovCmRp ZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2luc24uaCBiL3hlbi9pbmNsdWRlL2FzbS1h cm0vaW5zbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOTQxOWMKLS0t IC9kZXYvbnVsbAorKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2luc24uaApAQCAtMCwwICsxLDIy IEBACisjaWZuZGVmIF9fQVJDSF9BUk1fSU5TTgorI2RlZmluZSBfX0FSQ0hfQVJNX0lOU04KKwor I2luY2x1ZGUgPHhlbi90eXBlcy5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJNXzMyKQorIyBp bmNsdWRlIDxhc20vYXJtMzIvaW5zbi5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJNXzY0KQor IyBpbmNsdWRlIDxhc20vYXJtNjQvaW5zbi5oPgorI2Vsc2UKKyMgZXJyb3IgInVua25vd24gQVJN IHZhcmlhbnQiCisjZW5kaWYKKworI2VuZGlmIC8qICFfX0FSQ0hfQVJNX0lOU04gKi8KKy8qCisg KiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisg KiBjLWJhc2ljLW9mZnNldDogOAorICogaW5kZW50LXRhYnMtbW9kZTogdAorICogRW5kOgorICov Ci0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==