From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 49/62] x86/pv-shim: shadow PV console's page for L2 DomU Date: Fri, 12 Jan 2018 11:28:57 +0000 Message-ID: <20180112112910.16762-50-wei.liu2@citrix.com> References: <20180112112910.16762-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eZxzM-0003XR-Gm for xen-devel@lists.xenproject.org; Fri, 12 Jan 2018 11:59:12 +0000 In-Reply-To: <20180112112910.16762-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: wei.liu2@citrix.com List-Id: xen-devel@lists.xenproject.org RnJvbTogU2VyZ2V5IER5YXNsaSA8c2VyZ2V5LmR5YXNsaUBjaXRyaXguY29tPgoKU2lnbmVkLW9m Zi1ieTogU2VyZ2V5IER5YXNsaSA8c2VyZ2V5LmR5YXNsaUBjaXRyaXguY29tPgpTaWduZWQtb2Zm LWJ5OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgpbcmVtb3ZlIG5vdGlmeV9ndWVzdCBo ZWxwZXIgYW5kIGRpcmVjdGx5IHVzZSBwdl9zaGltX2luamVjdF9ldnRjaG5dClNpZ25lZC1vZmYt Ynk6IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5 OiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KQ2hhbmdlcyBzaW5jZSB2MToKIC0g VXNlIHB2X3NoaW1faW5qZWN0X2V2dGNobi4KLS0tCiB4ZW4vYXJjaC94ODYvcHYvc2hpbS5jICAg ICAgfCAgMzEgKysrKysrKystLQogeGVuL2RyaXZlcnMvY2hhci9NYWtlZmlsZSAgIHwgICAxICsK IHhlbi9kcml2ZXJzL2NoYXIvY29uc29sZS5jICB8ICAgNiArKwogeGVuL2RyaXZlcnMvY2hhci9j b25zb2xlZC5jIHwgMTQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiB4ZW4vaW5jbHVkZS94ZW4vY29uc29sZWQuaCAgfCAgMjcgKysrKysrKysKIDUgZmlsZXMg Y2hhbmdlZCwgMjA5IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgeGVuL2RyaXZlcnMvY2hhci9jb25zb2xlZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVu L2luY2x1ZGUveGVuL2NvbnNvbGVkLmgKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvc2hp bS5jIGIveGVuL2FyY2gveDg2L3B2L3NoaW0uYwppbmRleCBlYjhiMTQ2Nzg1Li45ODZmOWRhNThh IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHYvc2hpbS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9w di9zaGltLmMKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlIDx4ZW4vaW9jYXAuaD4KICNpbmNs dWRlIDx4ZW4vc2h1dGRvd24uaD4KICNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KKyNpbmNsdWRlIDx4 ZW4vY29uc29sZWQuaD4KKyNpbmNsdWRlIDx4ZW4vcHZfY29uc29sZS5oPgogCiAjaW5jbHVkZSA8 YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vZG9tMF9idWlsZC5oPgpAQCAtMTI3LDEzICsxMjks MjggQEAgdm9pZCBfX2luaXQgcHZfc2hpbV9zZXR1cF9kb20oc3RydWN0IGRvbWFpbiAqZCwgbDRf cGdlbnRyeV90ICpsNHN0YXJ0LAogfSkKICAgICBTRVRfQU5EX01BUF9QQVJBTShIVk1fUEFSQU1f U1RPUkVfUEZOLCBzaS0+c3RvcmVfbWZuLCBzdG9yZV92YSk7CiAgICAgU0VUX0FORF9NQVBfUEFS QU0oSFZNX1BBUkFNX1NUT1JFX0VWVENITiwgc2ktPnN0b3JlX2V2dGNobiwgMCk7CisgICAgU0VU X0FORF9NQVBfUEFSQU0oSFZNX1BBUkFNX0NPTlNPTEVfRVZUQ0hOLCBzaS0+Y29uc29sZS5kb21V LmV2dGNobiwgMCk7CiAgICAgaWYgKCAhcHZfY29uc29sZSApCi0gICAgewogICAgICAgICBTRVRf QU5EX01BUF9QQVJBTShIVk1fUEFSQU1fQ09OU09MRV9QRk4sIHNpLT5jb25zb2xlLmRvbVUubWZu LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlX3ZhKTsKLSAgICAgICAgU0VUX0FO RF9NQVBfUEFSQU0oSFZNX1BBUkFNX0NPTlNPTEVfRVZUQ0hOLCBzaS0+Y29uc29sZS5kb21VLmV2 dGNobiwgMCk7Ci0gICAgfQogI3VuZGVmIFNFVF9BTkRfTUFQX1BBUkFNCisgICAgZWxzZQorICAg IHsKKyAgICAgICAgLyogQWxsb2NhdGUgYSBuZXcgcGFnZSBmb3IgRG9tVSdzIFBWIGNvbnNvbGUg Ki8KKyAgICAgICAgdm9pZCAqcGFnZSA9IGFsbG9jX3hlbmhlYXBfcGFnZXMoMCwgTUVNRl9iaXRz KDMyKSk7CisgICAgICAgIHVpbnQ2NF90IGNvbnNvbGVfbWZuOworCisgICAgICAgIEFTU0VSVChw YWdlKTsKKyAgICAgICAgY2xlYXJfcGFnZShwYWdlKTsKKyAgICAgICAgY29uc29sZV9tZm4gPSB2 aXJ0X3RvX21mbihwYWdlKTsKKyAgICAgICAgc2ktPmNvbnNvbGUuZG9tVS5tZm4gPSBjb25zb2xl X21mbjsKKyAgICAgICAgc2hhcmVfeGVuX3BhZ2Vfd2l0aF9ndWVzdChtZm5fdG9fcGFnZShjb25z b2xlX21mbiksIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOU0hBUkVf d3JpdGFibGUpOworICAgICAgICByZXBsYWNlX3ZhX21hcHBpbmcoZCwgbDRzdGFydCwgY29uc29s ZV92YSwgY29uc29sZV9tZm4pOworICAgICAgICBkb20wX3VwZGF0ZV9waHlzbWFwKGQsIChjb25z b2xlX3ZhIC0gdmFfc3RhcnQpID4+IFBBR0VfU0hJRlQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc29sZV9tZm4sIHZwaHlzbWFwKTsKKyAgICAgICAgY29uc29sZWRfc2V0X3Jpbmdf YWRkcihwYWdlKTsKKyAgICB9CiAgICAgcHZfaHlwZXJjYWxsX3RhYmxlX3JlcGxhY2UoX19IWVBF UlZJU09SX2V2ZW50X2NoYW5uZWxfb3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGh5cGVyY2FsbF9mbl90ICopcHZfc2hpbV9ldmVudF9jaGFubmVsX29wLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChoeXBlcmNhbGxfZm5fdCAqKXB2X3NoaW1fZXZlbnRfY2hhbm5l bF9vcCk7CkBAIC0zNDEsNyArMzU4LDEzIEBAIHN0YXRpYyBsb25nIHB2X3NoaW1fZXZlbnRfY2hh bm5lbF9vcChpbnQgY21kLCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZykKICAgICAg ICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoJnNlbmQsIGFyZywgMSkgIT0gMCApCiAgICAgICAgICAg ICByZXR1cm4gLUVGQVVMVDsKIAotICAgICAgICByYyA9IHhlbl9oeXBlcmNhbGxfZXZlbnRfY2hh bm5lbF9vcChFVlRDSE5PUF9zZW5kLCAmc2VuZCk7CisgICAgICAgIGlmICggcHZfY29uc29sZSAm JiBzZW5kLnBvcnQgPT0gcHZfY29uc29sZV9ldnRjaG4oKSApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGNvbnNvbGVkX2d1ZXN0X3J4KCk7CisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgIH0K KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmMgPSB4ZW5faHlwZXJjYWxsX2V2ZW50X2NoYW5u ZWxfb3AoRVZUQ0hOT1Bfc2VuZCwgJnNlbmQpOwogCiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlm ZiAtLWdpdCBhL3hlbi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi94ZW4vZHJpdmVycy9jaGFyL01h a2VmaWxlCmluZGV4IDlkNDhkMGYyZGMuLjBkNDhiMTZlOGQgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2 ZXJzL2NoYXIvTWFrZWZpbGUKKysrIGIveGVuL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtOSwz ICs5LDQgQEAgb2JqLSQoQ09ORklHX0hBU19FSENJKSArPSBlaGNpLWRiZ3Aubwogb2JqLSQoQ09O RklHX0FSTSkgKz0gYXJtLXVhcnQubwogb2JqLXkgKz0gc2VyaWFsLm8KIG9iai0kKENPTkZJR19Y RU5fR1VFU1QpICs9IHhlbl9wdl9jb25zb2xlLm8KK29iai0kKENPTkZJR19QVl9TSElNKSArPSBj b25zb2xlZC5vCmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9jaGFyL2NvbnNvbGUuYyBiL3hlbi9k cml2ZXJzL2NoYXIvY29uc29sZS5jCmluZGV4IDhhY2QzNTgzOTUuLjE4ZjViN2Y3YWEgMTAwNjQ0 Ci0tLSBhL3hlbi9kcml2ZXJzL2NoYXIvY29uc29sZS5jCisrKyBiL3hlbi9kcml2ZXJzL2NoYXIv Y29uc29sZS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8eGVuL3dhcm5pbmcuaD4KIAog I2lmZGVmIENPTkZJR19YODYKKyNpbmNsdWRlIDx4ZW4vY29uc29sZWQuaD4KICNpbmNsdWRlIDx4 ZW4vcHZfY29uc29sZS5oPgogI2luY2x1ZGUgPGFzbS9ndWVzdC5oPgogI2VuZGlmCkBAIC00MTUs NiArNDE2LDExIEBAIHN0YXRpYyB2b2lkIF9fc2VyaWFsX3J4KGNoYXIgYywgc3RydWN0IGNwdV91 c2VyX3JlZ3MgKnJlZ3MpCiAgICAgICAgIHNlcmlhbF9yeF9yaW5nW1NFUklBTF9SWF9NQVNLKHNl cmlhbF9yeF9wcm9kKyspXSA9IGM7CiAgICAgLyogQWx3YXlzIG5vdGlmeSB0aGUgZ3Vlc3Q6IHBy ZXZlbnRzIHJlY2VpdmUgcGF0aCBmcm9tIGdldHRpbmcgc3R1Y2suICovCiAgICAgc2VuZF9nbG9i YWxfdmlycShWSVJRX0NPTlNPTEUpOworCisjaWZkZWYgQ09ORklHX1g4NgorICAgIGlmICggcHZf c2hpbSAmJiBwdl9jb25zb2xlICkKKyAgICAgICAgY29uc29sZWRfZ3Vlc3RfdHgoYyk7CisjZW5k aWYKIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX3J4KGNoYXIgYywgc3RydWN0IGNwdV91c2VyX3Jl Z3MgKnJlZ3MpCmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9jaGFyL2NvbnNvbGVkLmMgYi94ZW4v ZHJpdmVycy9jaGFyL2NvbnNvbGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uNTUyYWJmNTc2NgotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9kcml2ZXJzL2NoYXIvY29u c29sZWQuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZHJp dmVycy9jaGFyL2NvbnNvbGVkLmMKKyAqCisgKiBBIGJhY2tlbmQgZHJpdmVyIGZvciBYZW4ncyBQ ViBjb25zb2xlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTcgQ2l0cml4IFN5c3RlbXMgTHRkLgorICovCisKKyNpbmNsdWRlIDx4ZW4v bGliLmg+CisjaW5jbHVkZSA8eGVuL2V2ZW50Lmg+CisjaW5jbHVkZSA8eGVuL3B2X2NvbnNvbGUu aD4KKyNpbmNsdWRlIDx4ZW4vY29uc29sZWQuaD4KKworI2luY2x1ZGUgPGFzbS9ndWVzdC5oPgor CitzdGF0aWMgc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICpjb25zX3Jpbmc7CitzdGF0aWMgREVG SU5FX1NQSU5MT0NLKHJ4X2xvY2spOworCit2b2lkIGNvbnNvbGVkX3NldF9yaW5nX2FkZHIoc3Ry dWN0IHhlbmNvbnNfaW50ZXJmYWNlICpyaW5nKQoreworICAgIGNvbnNfcmluZyA9IHJpbmc7Cit9 CisKK3N0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqY29uc29sZWRfZ2V0X3JpbmdfYWRkcih2b2lk KQoreworICAgIHJldHVybiBjb25zX3Jpbmc7Cit9CisKKyNkZWZpbmUgQlVGX1NaIDI1NQorc3Rh dGljIGNoYXIgYnVmW0JVRl9TWiArIDFdOworCisvKiBSZWNlaXZlcyBjaGFyYWN0ZXJzIGZyb20g YSBkb21haW4ncyBQViBjb25zb2xlICovCitzaXplX3QgY29uc29sZWRfZ3Vlc3Rfcngodm9pZCkK K3sKKyAgICBzaXplX3QgcmVjdiA9IDAsIGlkeCA9IDA7CisgICAgWEVOQ09OU19SSU5HX0lEWCBj b25zLCBwcm9kOworCisgICAgaWYgKCAhY29uc19yaW5nICkKKyAgICAgICAgcmV0dXJuIDA7CisK KyAgICBzcGluX2xvY2soJnJ4X2xvY2spOworCisgICAgY29ucyA9IGNvbnNfcmluZy0+b3V0X2Nv bnM7CisgICAgcHJvZCA9IEFDQ0VTU19PTkNFKGNvbnNfcmluZy0+b3V0X3Byb2QpOworCisgICAg LyoKKyAgICAgKiBMYXRjaCBwb2ludGVycyBiZWZvcmUgYWNjZXNzaW5nIHRoZSByaW5nLiBJbmNs dWRlZCBjb21waWxlciBiYXJyaWVyIGFsc28KKyAgICAgKiBlbnN1cmVzIHRoYXQgcG9pbnRlcnMg YXJlIHJlYWxseSByZWFkIG9ubHkgb25jZSBpbnRvIGxvY2FsIHZhcmlhYmxlcy4KKyAgICAgKi8K KyAgICBzbXBfcm1iKCk7CisKKyAgICBBU1NFUlQoKHByb2QgLSBjb25zKSA8PSBzaXplb2YoY29u c19yaW5nLT5vdXQpKTsKKworICAgIC8qIElzIHRoZSByaW5nIGVtcHR5PyAqLworICAgIGlmICgg Y29ucyA9PSBwcm9kICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICB3aGlsZSAoIGNvbnMgIT0g cHJvZCApCisgICAgeworICAgICAgICBjaGFyIGMgPSBjb25zX3JpbmctPm91dFtNQVNLX1hFTkNP TlNfSURYKGNvbnMrKywgY29uc19yaW5nLT5vdXQpXTsKKworICAgICAgICBidWZbaWR4KytdID0g YzsKKyAgICAgICAgcmVjdisrOworCisgICAgICAgIGlmICggaWR4ID49IEJVRl9TWiApCisgICAg ICAgIHsKKyAgICAgICAgICAgIHB2X2NvbnNvbGVfcHV0cyhidWYpOworICAgICAgICAgICAgaWR4 ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggaWR4ICkKKyAgICB7CisgICAgICAg IGJ1ZltpZHhdID0gJ1wwJzsKKyAgICAgICAgcHZfY29uc29sZV9wdXRzKGJ1Zik7CisgICAgfQor CisgICAgLyogTm8gbmVlZCBmb3IgYSBtZW0gYmFycmllciBiZWNhdXNlIGV2ZXJ5IGNoYXJhY3Rl ciB3YXMgYWxyZWFkeSBjb25zdW1lZCAqLworICAgIGJhcnJpZXIoKTsKKyAgICBBQ0NFU1NfT05D RShjb25zX3JpbmctPm91dF9jb25zKSA9IGNvbnM7CisgICAgcHZfc2hpbV9pbmplY3RfZXZ0Y2hu KHB2X2NvbnNvbGVfZXZ0Y2huKCkpOworCisgb3V0OgorICAgIHNwaW5fdW5sb2NrKCZyeF9sb2Nr KTsKKworICAgIHJldHVybiByZWN2OworfQorCisvKiBTZW5kcyBhIGNoYXJhY3RlciBpbnRvIGEg ZG9tYWluJ3MgUFYgY29uc29sZSAqLworc2l6ZV90IGNvbnNvbGVkX2d1ZXN0X3R4KGNoYXIgYykK K3sKKyAgICBzaXplX3Qgc2VudCA9IDA7CisgICAgWEVOQ09OU19SSU5HX0lEWCBjb25zLCBwcm9k OworCisgICAgaWYgKCAhY29uc19yaW5nICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25z ID0gQUNDRVNTX09OQ0UoY29uc19yaW5nLT5pbl9jb25zKTsKKyAgICBwcm9kID0gY29uc19yaW5n LT5pbl9wcm9kOworCisgICAgLyoKKyAgICAgKiBMYXRjaCBwb2ludGVycyBiZWZvcmUgYWNjZXNz aW5nIHRoZSByaW5nLiBJbmNsdWRlZCBjb21waWxlciBiYXJyaWVyIGFsc28KKyAgICAgKiBlbnN1 cmVzIHRoYXQgcG9pbnRlcnMgYXJlIHJlYWxseSByZWFkIG9ubHkgb25jZSBpbnRvIGxvY2FsIHZh cmlhYmxlcy4KKyAgICAgKi8KKyAgICBzbXBfcm1iKCk7CisKKyAgICBBU1NFUlQoKHByb2QgLSBj b25zKSA8PSBzaXplb2YoY29uc19yaW5nLT5pbikpOworCisgICAgLyogSXMgdGhlIHJpbmcgb3V0 IG9mIHNwYWNlPyAqLworICAgIGlmICggc2l6ZW9mKGNvbnNfcmluZy0+aW4pIC0gKHByb2QgLSBj b25zKSA9PSAwICkKKyAgICAgICAgZ290byBub3RpZnk7CisKKyAgICBjb25zX3JpbmctPmluW01B U0tfWEVOQ09OU19JRFgocHJvZCsrLCBjb25zX3JpbmctPmluKV0gPSBjOworICAgIHNlbnQrKzsK KworICAgIC8qIFdyaXRlIHRvIHRoZSByaW5nIGJlZm9yZSB1cGRhdGluZyB0aGUgcG9pbnRlciAq LworICAgIHNtcF93bWIoKTsKKyAgICBBQ0NFU1NfT05DRShjb25zX3JpbmctPmluX3Byb2QpID0g cHJvZDsKKworIG5vdGlmeToKKyAgICAvKiBBbHdheXMgbm90aWZ5IHRoZSBndWVzdDogcHJldmVu dHMgcmVjZWl2ZSBwYXRoIGZyb20gZ2V0dGluZyBzdHVjay4gKi8KKyAgICBwdl9zaGltX2luamVj dF9ldnRjaG4ocHZfY29uc29sZV9ldnRjaG4oKSk7CisKKyAgICByZXR1cm4gc2VudDsKK30KKwor LyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJT RCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4vY29u c29sZWQuaCBiL3hlbi9pbmNsdWRlL3hlbi9jb25zb2xlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmZkNWQyMjBhOGEKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vaW5j bHVkZS94ZW4vY29uc29sZWQuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9fWEVOX0NPTlNP TEVEX0hfXworI2RlZmluZSBfX1hFTl9DT05TT0xFRF9IX18KKworI2luY2x1ZGUgPHB1YmxpYy9p by9jb25zb2xlLmg+CisKKyNpZmRlZiBDT05GSUdfUFZfU0hJTQorCit2b2lkIGNvbnNvbGVkX3Nl dF9yaW5nX2FkZHIoc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICpyaW5nKTsKK3N0cnVjdCB4ZW5j b25zX2ludGVyZmFjZSAqY29uc29sZWRfZ2V0X3JpbmdfYWRkcih2b2lkKTsKK3NpemVfdCBjb25z b2xlZF9ndWVzdF9yeCh2b2lkKTsKK3NpemVfdCBjb25zb2xlZF9ndWVzdF90eChjaGFyIGMpOwor CisjZWxzZQorCitzaXplX3QgY29uc29sZWRfZ3Vlc3RfdHgoY2hhciBjKSB7IHJldHVybiAwOyB9 CisKKyNlbmRpZiAvKiAhQ09ORklHX1BWX1NISU0gKi8KKyNlbmRpZiAvKiBfX1hFTl9DT05TT0xF RF9IX18gKi8KKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUt c3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBp bmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi4xMS4wCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==