From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH VERY RFC 3/5] tools/fuzz: introduce x86 instruction emulator target Date: Thu, 8 Dec 2016 13:54:39 +0000 Message-ID: <1481205281-18256-4-git-send-email-wei.liu2@citrix.com> References: <1481205281-18256-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cEz9r-0005is-RZ for xen-devel@lists.xenproject.org; Thu, 08 Dec 2016 13:54:47 +0000 In-Reply-To: <1481205281-18256-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , George Dunlap , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org SW5zdHJ1Y3Rpb24gZW11bGF0b3IgZnV6emluZyBjb2RlIGlzIGZyb20gY29kZSBwcmV2aW91cyB3 cml0dGVuIGJ5CkFuZHJldyBhbmQgR2VvcmdlLiBBZGFwdGVkIHRvIGxsdm0gZnV6emVyIGFuZCBo b29rIHVwIHRoZSBidWlsZCBzeXN0ZW0uCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxh bmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5OiBHZW9yZ2UgRHVubGFwIDxn ZW9yZ2UuZHVubGFwQGNpdHJpeC5jb20+ClNpZ25lZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUy QGNpdHJpeC5jb20+Ci0tLQpDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4 LmNvbT4KQ2M6IEdlb3JnZSBEdW5sYXAgPEdlb3JnZS5EdW5sYXBAZXUuY2l0cml4LmNvbT4KQ2M6 IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogSmFuIEJldWxpY2gg PGpiZXVsaWNoQHN1c2UuY29tPgpDYzogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2ls a0BvcmFjbGUuY29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwu b3JnPgpDYzogVGltIERlZWdhbiA8dGltQHhlbi5vcmc+CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBj aXRyaXguY29tPgotLS0KIC5naXRpZ25vcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIHRvb2xzL2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL01h a2VmaWxlICAgICAgIHwgIDMzICsrCiAuLi4veDg2LWluc24tZW11bGF0b3ItZnV6emVyLmMgICAg ICAgICAgICAgICAgICAgICB8IDMzNSArKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hh bmdlZCwgMzY5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9mdXp6L3g4 Nl9pbnN0cnVjdGlvbl9lbXVsYXRvci9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xz L2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL3g4Ni1pbnNuLWVtdWxhdG9yLWZ1enplci5j CgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggYTJmMzRhMS4uZDUw NzI0MyAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xNDUsNiAr MTQ1LDcgQEAgdG9vbHMvZmxhc2svdXRpbHMvZmxhc2stbG9hZHBvbGljeQogdG9vbHMvZmxhc2sv dXRpbHMvZmxhc2stc2V0ZW5mb3JjZQogdG9vbHMvZmxhc2svdXRpbHMvZmxhc2stc2V0LWJvb2wK IHRvb2xzL2ZsYXNrL3V0aWxzL2ZsYXNrLWxhYmVsLXBjaQordG9vbHMvZnV6ei94ODZfaW5zdHJ1 Y3Rpb25fZW11bGF0b3IveDg2X2VtdWxhdGUqCiB0b29scy9oZWxwZXJzL19wYXRocy5oCiB0b29s cy9oZWxwZXJzL2luaXQteGVuc3RvcmUtZG9tYWluCiB0b29scy9oZWxwZXJzL3hlbi1pbml0LWRv bTAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL01ha2Vm aWxlIGIvdG9vbHMvZnV6ei94ODZfaW5zdHJ1Y3Rpb25fZW11bGF0b3IvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0Yzg0YQotLS0gL2Rldi9udWxsCisrKyBi L3Rvb2xzL2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL01ha2VmaWxlCkBAIC0wLDAgKzEs MzMgQEAKK1hFTl9ST09UPSQoQ1VSRElSKS8uLi8uLi8uLgoraW5jbHVkZSAkKFhFTl9ST09UKS90 b29scy9SdWxlcy5taworCit4ODYtaW5zdHJ1Y3Rpb24tZW11bGF0b3ItZnV6emVyLWFsbDogeDg2 LWluc24tZW11bGF0b3IuYSB4ODYtaW5zbi1lbXVsYXRvci1mdXp6ZXIubworCit4ODZfZW11bGF0 ZS94ODZfZW11bGF0ZS5jIHg4Nl9lbXVsYXRlL3g4Nl9lbXVsYXRlLmg6CisJWyAtTCB4ODZfZW11 bGF0ZSBdIHx8IGxuIC1zZiAkKFhFTl9ST09UKS94ZW4vYXJjaC94ODYveDg2X2VtdWxhdGUgLgor Cit4ODZfZW11bGF0ZS5jOgorCVsgLUwgeDg2X2VtdWxhdGUuYyBdIHx8IGxuIC1zZiAkKFhFTl9S T09UKS90b29scy90ZXN0cy94ODZfZW11bGF0b3IveDg2X2VtdWxhdGUuYworCit4ODZfZW11bGF0 ZS5oOgorCVsgLUwgeDg2X2VtdWxhdGUuaCBdIHx8IGxuIC1zZiAkKFhFTl9ST09UKS90b29scy90 ZXN0cy94ODZfZW11bGF0b3IveDg2X2VtdWxhdGUuaAorCitDRkxBR1MgKz0gJChDRkxBR1NfeGVu aW5jbHVkZSkKKworeDg2X2VtdWxhdGUubzogeDg2X2VtdWxhdGUuYyB4ODZfZW11bGF0ZS5oIHg4 Nl9lbXVsYXRlL3g4Nl9lbXVsYXRlLmMgeDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuaAorCit4ODYt aW5zbi1lbXVsYXRvci5hOiB4ODZfZW11bGF0ZS5vCisJJChBUikgcmMgJEAgJF4KKworeDg2LWlu c24tZW11bGF0b3ItZnV6emVyLm86IHg4Ni1pbnNuLWVtdWxhdG9yLWZ1enplci5jCisKKyMgQ29t bW9uIHRhcmdldHMKKy5QSE9OWTogYWxsCithbGw6IHg4Ni1pbnN0cnVjdGlvbi1lbXVsYXRvci1m dXp6ZXItYWxsCisKKy5QSE9OWTogZGlzdGNsZWFuCitkaXN0Y2xlYW46IGNsZWFuCisKKy5QSE9O WTogY2xlYW4KK2NsZWFuOgorCXJtIC1mICouYSAqLm8KZGlmZiAtLWdpdCBhL3Rvb2xzL2Z1enov eDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL3g4Ni1pbnNuLWVtdWxhdG9yLWZ1enplci5jIGIvdG9v bHMvZnV6ei94ODZfaW5zdHJ1Y3Rpb25fZW11bGF0b3IveDg2LWluc24tZW11bGF0b3ItZnV6emVy LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlZTdhNAotLS0gL2Rldi9u dWxsCisrKyBiL3Rvb2xzL2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL3g4Ni1pbnNuLWVt dWxhdG9yLWZ1enplci5jCkBAIC0wLDAgKzEsMzM1IEBACisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp bmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8u aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxz dGRpbnQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHhlbi94ZW4uaD4KKyNp bmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVk ZSA8c3lzL21tYW4uaD4KKworI2RlZmluZSBfX3BhY2tlZCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp KQorI2RlZmluZSBBU1NFUlQgYXNzZXJ0CisKKyNpbmNsdWRlICJ4ODZfZW11bGF0ZS94ODZfZW11 bGF0ZS5oIgorCisvKiBFRkxBR1MgYml0IGRlZmluaXRpb25zLiAqLworI2RlZmluZSBFRkxHX09G ICgxPDwxMSkKKyNkZWZpbmUgRUZMR19ERiAoMTw8MTApCisjZGVmaW5lIEVGTEdfU0YgKDE8PDcp CisjZGVmaW5lIEVGTEdfWkYgKDE8PDYpCisjZGVmaW5lIEVGTEdfQUYgKDE8PDQpCisjZGVmaW5l IEVGTEdfUEYgKDE8PDIpCisjZGVmaW5lIEVGTEdfQ0YgKDE8PDApCisKK3N0YXRpYyB1bnNpZ25l ZCBjaGFyIGRhdGFbNDA5Nl07CitzdGF0aWMgdW5zaWduZWQgaW50IGRhdGFfaW5kZXggPSAwOwor c3RhdGljIHVuc2lnbmVkIGludCBkYXRhX21heDsKKworaW50IGRhdGFfcmVhZChjb25zdCBjaGFy ICp3aHksIHZvaWQgKmRzdCwgdW5zaWduZWQgaW50IGJ5dGVzKSB7CisKKyAgICBpZiAoIGRhdGFf aW5kZXggKyBieXRlcyA+IGRhdGFfbWF4ICkKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBU SU9OOworCisgICAgbWVtY3B5KGRzdCwgIGRhdGErZGF0YV9pbmRleCwgYnl0ZXMpOworICAgIGRh dGFfaW5kZXggKz0gYnl0ZXM7CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitzdGF0 aWMgaW50IGVtdWxfcmVhZCgKKyAgICB1bnNpZ25lZCBpbnQgc2VnLAorICAgIHVuc2lnbmVkIGxv bmcgb2Zmc2V0LAorICAgIHZvaWQgKnBfZGF0YSwKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisg ICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgcmV0dXJuIGRhdGFfcmVh ZCgicmVhZCIsIHBfZGF0YSwgYnl0ZXMpOworfQorCitzdGF0aWMgaW50IGVtdWxfZmV0Y2goCisg ICAgdW5zaWduZWQgaW50IHNlZywKKyAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICB2b2lk ICpwX2RhdGEsCisgICAgdW5zaWduZWQgaW50IGJ5dGVzLAorICAgIHN0cnVjdCB4ODZfZW11bGF0 ZV9jdHh0ICpjdHh0KQoreworICAgIHJldHVybiBkYXRhX3JlYWQoImZldGNoIiwgcF9kYXRhLCBi eXRlcyk7Cit9CisKK3N0YXRpYyBpbnQgZW11bF93cml0ZSgKKyAgICB1bnNpZ25lZCBpbnQgc2Vn LAorICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgIHZvaWQgKnBfZGF0YSwKKyAgICB1bnNp Z25lZCBpbnQgYnl0ZXMsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7Cisg ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGludCBlbXVsX2NtcHhjaGcoCisg ICAgdW5zaWduZWQgaW50IHNlZywKKyAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICB2b2lk ICpvbGQsCisgICAgdm9pZCAqbmV3LAorICAgIHVuc2lnbmVkIGludCBieXRlcywKKyAgICBzdHJ1 Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwor fQorCitzdGF0aWMgaW50IGVtdWxfY3B1aWQoCisgICAgdW5zaWduZWQgaW50ICplYXgsCisgICAg dW5zaWduZWQgaW50ICplYngsCisgICAgdW5zaWduZWQgaW50ICplY3gsCisgICAgdW5zaWduZWQg aW50ICplZHgsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgdW5z aWduZWQgaW50IGxlYWYgPSAqZWF4OworCisgICAgYXNtICgiY3B1aWQiIDogIithIiAoKmVheCks ICIrYyIgKCplY3gpLCAiPWQiICgqZWR4KSwgIj1iIiAoKmVieCkpOworCisgICAgLyogVGhlIGVt dWxhdG9yIGRvZXNuJ3QgaXRzZWxmIHVzZSBNT1ZCRSwgc28gd2UgY2FuIGFsd2F5cyBydW4gdGhl IHRlc3QuICovCisgICAgaWYgKCBsZWFmID09IDEgKQorICAgICAgICAqZWN4IHw9IDFVIDw8IDIy OworCisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworI2RlZmluZSBjYWNoZV9saW5lX3Np emUoKSAoeyBcCisgICAgdW5zaWduZWQgaW50IGVheCA9IDEsIGVieCwgZWN4ID0gMCwgZWR4OyBc CisgICAgZW11bF9jcHVpZCgmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4LCBOVUxMKTsgXAorICAgIGVk eCAmICgxVSA8PCAxOSkgPyAoZWJ4ID4+IDUpICYgMHg3ZjggOiAwOyBcCit9KQorCisjZGVmaW5l IGNwdV9oYXNfbW14ICh7IFwKKyAgICB1bnNpZ25lZCBpbnQgZWF4ID0gMSwgZWN4ID0gMCwgZWR4 OyBcCisgICAgZW11bF9jcHVpZCgmZWF4LCAmZWN4LCAmZWN4LCAmZWR4LCBOVUxMKTsgXAorICAg IChlZHggJiAoMVUgPDwgMjMpKSAhPSAwOyBcCit9KQorCisjZGVmaW5lIGNwdV9oYXNfc3NlICh7 IFwKKyAgICB1bnNpZ25lZCBpbnQgZWF4ID0gMSwgZWN4ID0gMCwgZWR4OyBcCisgICAgZW11bF9j cHVpZCgmZWF4LCAmZWN4LCAmZWN4LCAmZWR4LCBOVUxMKTsgXAorICAgIChlZHggJiAoMVUgPDwg MjUpKSAhPSAwOyBcCit9KQorCisjZGVmaW5lIGNwdV9oYXNfc3NlMiAoeyBcCisgICAgdW5zaWdu ZWQgaW50IGVheCA9IDEsIGVjeCA9IDAsIGVkeDsgXAorICAgIGVtdWxfY3B1aWQoJmVheCwgJmVj eCwgJmVjeCwgJmVkeCwgTlVMTCk7IFwKKyAgICAoZWR4ICYgKDFVIDw8IDI2KSkgIT0gMDsgXAor fSkKKworI2RlZmluZSBjcHVfaGFzX3hzYXZlICh7IFwKKyAgICB1bnNpZ25lZCBpbnQgZWF4ID0g MSwgZWN4ID0gMDsgXAorICAgIGVtdWxfY3B1aWQoJmVheCwgJmVheCwgJmVjeCwgJmVheCwgTlVM TCk7IFwKKyAgICAvKiBJbnRlbnRpb25hbGx5IGNoZWNraW5nIE9TWFNBVkUgaGVyZS4gKi8gXAor ICAgIChlY3ggJiAoMVUgPDwgMjcpKSAhPSAwOyBcCit9KQorCitzdGF0aWMgaW5saW5lIHVpbnQ2 NF90IHhnZXRidih1aW50MzJfdCB4Y3IpCit7CisgICAgdWludDMyX3QgbG8sIGhpOworCisgICAg YXNtICggIi5ieXRlIDB4MGYsIDB4MDEsIDB4ZDAiIDogIj1hIiAobG8pLCAiPWQiIChoaSkgOiAi YyIgKHhjcikgKTsKKworICAgIHJldHVybiAoKHVpbnQ2NF90KWhpIDw8IDMyKSB8IGxvOworfQor CisjZGVmaW5lIGNwdV9oYXNfYXZ4ICh7IFwKKyAgICB1bnNpZ25lZCBpbnQgZWF4ID0gMSwgZWN4 ID0gMDsgXAorICAgIGVtdWxfY3B1aWQoJmVheCwgJmVheCwgJmVjeCwgJmVheCwgTlVMTCk7IFwK KyAgICBpZiAoICEoZWN4ICYgKDFVIDw8IDI3KSkgfHwgKCh4Z2V0YnYoMCkgJiA2KSAhPSA2KSAp IFwKKyAgICAgICAgZWN4ID0gMDsgXAorICAgIChlY3ggJiAoMVUgPDwgMjgpKSAhPSAwOyBcCit9 KQorCisjZGVmaW5lIGNwdV9oYXNfYXZ4MiAoeyBcCisgICAgdW5zaWduZWQgaW50IGVheCA9IDEs IGVieCwgZWN4ID0gMDsgXAorICAgIGVtdWxfY3B1aWQoJmVheCwgJmVieCwgJmVjeCwgJmVheCwg TlVMTCk7IFwKKyAgICBpZiAoICEoZWN4ICYgKDFVIDw8IDI3KSkgfHwgKCh4Z2V0YnYoMCkgJiA2 KSAhPSA2KSApIFwKKyAgICAgICAgZWJ4ID0gMDsgXAorICAgIGVsc2UgeyBcCisgICAgICAgIGVh eCA9IDcsIGVjeCA9IDA7IFwKKyAgICAgICAgY3B1aWQoJmVheCwgJmVieCwgJmVjeCwgJmVheCwg TlVMTCk7IFwKKyAgICB9IFwKKyAgICAoZWJ4ICYgKDFVIDw8IDUpKSAhPSAwOyBcCit9KQorCitz dGF0aWMgaW50IGVtdWxfcmVhZF9jcigKKyAgICB1bnNpZ25lZCBpbnQgcmVnLAorICAgIHVuc2ln bmVkIGxvbmcgKnZhbCwKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAg ICAvKiBGYWtlIGp1c3QgZW5vdWdoIHN0YXRlIGZvciB0aGUgZW11bGF0b3IncyBfZ2V0X2ZwdSgp IHRvIGJlIGhhcHB5LiAqLworICAgIHN3aXRjaCAoIHJlZyApCisgICAgeworICAgIGNhc2UgMDoK KyAgICAgICAgKnZhbCA9IDB4MDAwMDAwMDE7IC8qIFBFICovCisgICAgICAgIHJldHVybiBYODZF TVVMX09LQVk7CisKKyAgICBjYXNlIDQ6CisgICAgICAgIC8qIE9TRlhTUiwgT1NYTU1FWENQVCwg YW5kIG1heWJlIE9TWFNBVkUgKi8KKyAgICAgICAgKnZhbCA9IDB4MDAwMDA2MDAgfCAoY3B1X2hh c194c2F2ZSA/IDB4MDAwNDAwMDAgOiAwKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsK KyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cit9CisKK2ludCBlbXVs X2dldF9mcHUoCisgICAgdm9pZCAoKmV4Y2VwdGlvbl9jYWxsYmFjaykodm9pZCAqLCBzdHJ1Y3Qg Y3B1X3VzZXJfcmVncyAqKSwKKyAgICB2b2lkICpleGNlcHRpb25fY2FsbGJhY2tfYXJnLAorICAg IGVudW0geDg2X2VtdWxhdGVfZnB1X3R5cGUgdHlwZSwKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVf Y3R4dCAqY3R4dCkKK3sKKyAgICBzd2l0Y2ggKCB0eXBlICkKKyAgICB7CisgICAgY2FzZSBYODZF TVVMX0ZQVV9mcHU6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDg2RU1VTF9GUFVfbW14Ogor ICAgICAgICBpZiAoIGNwdV9oYXNfbW14ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug WDg2RU1VTF9GUFVfeG1tOgorICAgICAgICBpZiAoIGNwdV9oYXNfc3NlICkKKyAgICAgICAgICAg IGJyZWFrOworICAgIGNhc2UgWDg2RU1VTF9GUFVfeW1tOgorICAgICAgICBpZiAoIGNwdV9oYXNf YXZ4ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBY ODZFTVVMX1VOSEFORExFQUJMRTsKKyAgICB9CisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30K Kworc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsb3BzID0geworICAgIC5yZWFkICAgICAgID0g ZW11bF9yZWFkLAorICAgIC5pbnNuX2ZldGNoID0gZW11bF9mZXRjaCwKKyAgICAud3JpdGUgICAg ICA9IGVtdWxfd3JpdGUsCisgICAgLmNtcHhjaGcgICAgPSBlbXVsX2NtcHhjaGcsCisgICAgLmNw dWlkICAgICAgPSBlbXVsX2NwdWlkLAorICAgIC5yZWFkX2NyICAgID0gZW11bF9yZWFkX2NyLAor ICAgIC5nZXRfZnB1ICAgID0gZW11bF9nZXRfZnB1LAorfTsKKworYm9vbCBtYWtlX3N0YWNrX2V4 ZWN1dGFibGUodm9pZCkgeworICAgIHVuc2lnbmVkIGxvbmcgc3A7CisgICAgYm9vbCBzdGFja19l eGVjOworCisgICAgLyoKKyAgICAgKiBNYXJrIHRoZSBlbnRpcmUgc3RhY2sgZXhlY3V0YWJsZSBz byB0aGF0IHRoZSBzdHViIGV4ZWN1dGlvbnMKKyAgICAgKiBkb24ndCBmYXVsdAorICAgICAqLwor I2RlZmluZSBNTUFQX1NaIDE2Mzg0CisKKyNpZmRlZiBfX3g4Nl82NF9fCisgICAgYXNtICgibW92 cSAlJXJzcCwgJTAiIDogIj1nIiAoc3ApKTsKKyNlbHNlCisgICAgYXNtICgibW92bCAlJWVzcCwg JTAiIDogIj1nIiAoc3ApKTsKKyNlbmRpZgorCisgICAgc3RhY2tfZXhlYyA9IG1wcm90ZWN0KCh2 b2lkICopKHNwICYgLTB4MTAwMEwpIC0gKE1NQVBfU1ogLSAweDEwMDApLAorICAgICAgICAgICAg ICAgICAgICAgICAgICBNTUFQX1NaLCBQUk9UX1JFQUR8UFJPVF9XUklURXxQUk9UX0VYRUMpID09 IDA7CisgICAgaWYgKCAhc3RhY2tfZXhlYyApCisgICAgICAgIHByaW50ZigiV2FybmluZzogU3Rh Y2sgY291bGQgbm90IGJlIG1hZGUgZXhlY3V0YWJsZSAoJWQpLlxuIiwgZXJybm8pOworCisgICAg cmV0dXJuIHN0YWNrX2V4ZWM7Cit9CisKKyNkZWZpbmUgQ0FOT05JQ0FMSVpFKHgpICAgXAorICAg IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgdWludDY0X3QgX3kgPSAoeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIGlmICggX3kgJiAoMVVMTDw8NDcpICkgeyAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgX3kgfD0gKH4wVUxMKTw8NDg7ICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgICAgIF95ICY9ICgxVUxMPDw0OCktMTsgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgIHByaW50ZigiQ2Fub25pY2FsaXplZCAlIiBQUkl4NjQgIiB0byAlIiBQ Ukl4NjQgIlxuIiwgeCwgX3kpOyAgICBcCisgICAgICAgICh4KSA9IF95OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgQURE Ul9TSVpFX1NISUZUIDYwCisjZGVmaW5lIEFERFJfU0laRV82NCAoMlVMTDw8QUREUl9TSVpFX1NI SUZUKQorI2RlZmluZSBBRERSX1NJWkVfMzIgKDFVTEw8PEFERFJfU0laRV9TSElGVCkKKyNkZWZp bmUgQUREUl9TSVpFXzE2ICgwKQorCitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1 aW50OF90ICpkYXRhX3AsIHNpemVfdCBzaXplKSB7CisgICAgc3RydWN0IGNwdV91c2VyX3JlZ3Mg cmVncyA9IHt9OworICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IGN0eHQgPQorICAgICAgICB7 CisgICAgICAgICAgICAucmVncyA9ICZyZWdzLAorICAgICAgICAgICAgLmFkZHJfc2l6ZSA9IDgg KiBzaXplb2Yodm9pZCAqKSwKKyAgICAgICAgICAgIC5zcF9zaXplID0gOCAqIHNpemVvZih2b2lk ICopLAorICAgICAgICB9OworCisgICAgaW50IG5yID0gMDsKKyAgICBpbnQgcmM7CisgICAgdW5z aWduZWQgeDsKKyAgICBjb25zdCB1aW50OF90ICpwID0gZGF0YV9wOworCisgICAgbWFrZV9zdGFj a19leGVjdXRhYmxlKCk7CisKKyAgICBtZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwor ICAgIG5yID0gc2l6ZSA8IHNpemVvZihyZWdzKSA/IHNpemUgOiBzaXplb2YocmVncyk7CisKKyAg ICBtZW1jcHkoJnJlZ3MsIHAsIG5yKTsKKyAgICBwICs9IHNpemVvZihyZWdzKTsKKyAgICBuciAr PSBzaXplb2YocmVncyk7CisKKyAgICBpZiAobnIgPD0gc2l6ZSkgeworICAgICAgICBtZW1jcHko ZGF0YSwgcCwgc2l6ZSAtIG5yKTsKKyAgICAgICAgZGF0YV9tYXggPSBzaXplIC0gbnI7CisgICAg fQorCisgICAgY3R4dC5mb3JjZV93cml0ZWJhY2sgPSAwOworCisgICAgLyogWmVybyAncHJpdmF0 ZScgZW50cmllcyAqLworICAgIHJlZ3MuZXJyb3JfY29kZSA9IDA7CisgICAgcmVncy5lbnRyeV92 ZWN0b3IgPSAwOworCisgICAgLyogVXNlIHRoZSB1cHBlciBiaXRzIG9mIHJlZ3MuZWlwIHRvIGRl dGVybWluZSBhZGRyX3NpemUgKi8KKyAgICB4ID0gKHJlZ3MucmlwID4+IEFERFJfU0laRV9TSElG VCkgJiAweDM7CisgICAgaWYgKHggPT0gMykKKyAgICAgICAgeCA9IDI7CisgICAgY3R4dC5hZGRy X3NpemUgPSAxNiA8PCB4OworICAgIHByaW50ZigiYWRkcl9zaXplOiAlZFxuIiwgY3R4dC5hZGRy X3NpemUpOworCisgICAgLyogVXNlIHRoZSB1cHBlciBiaXQgb2YgcmVncy5yc3AgdG8gZGV0ZXJt aW5lIHNwX3NpemUgKGlmIGFwcHJvcHJpYXRlKSAqLworICAgIGlmICggY3R4dC5hZGRyX3NpemUg PT0gNjQpIHsKKyAgICAgICAgY3R4dC5zcF9zaXplID0gNjQ7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgLyogSWYgYWRkcl9zaXplIGlzbid0IDY0LWJpdHMsIHNwX3NpemUgY2FuIG9ubHkgYmUgMTYg b3IgMzIgYml0cyAqLworICAgICAgICB4ID0gKHJlZ3MucnNwID4+IEFERFJfU0laRV9TSElGVCkg JiAweDE7CisgICAgICAgIGN0eHQuc3Bfc2l6ZSA9IDE2IDw8IHg7CisgICAgfQorICAgIHByaW50 Zigic3Bfc2l6ZTogJWRcbiIsIGN0eHQuc3Bfc2l6ZSk7CisgICAgQ0FOT05JQ0FMSVpFKHJlZ3Mu cmlwKTsKKyAgICBDQU5PTklDQUxJWkUocmVncy5yc3ApOworICAgIENBTk9OSUNBTElaRShyZWdz LnJicCk7CisKKyAgICAvKiBaZXJvIGFsbCBzZWdtZW50cyBmb3Igbm93ICovCisgICAgcmVncy5j cyA9IHJlZ3Muc3MgPSByZWdzLmVzID0gcmVncy5kcyA9IHJlZ3MuZnMgPSByZWdzLmdzID0gMDsK KworICAgIGRvIHsKKyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJmVtdWxvcHMpOwor ICAgICAgICBwcmludGYoIkVtdWxhdGlvbiByZXN1bHQ6ICVkXG4iLCByYyk7CisgICAgfSB3aGls ZSAocmMgPT0gWDg2RU1VTF9PS0FZKTsKKworICAgIHJldHVybiAwOworfQorCisvKgorICogTG9j YWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1i YXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCi0t IAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=