From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vitaly Kuznetsov Subject: [PATCH v2 01/21] x86/xen: separate PV and HVM hypervisors Date: Thu, 2 Mar 2017 18:53:37 +0100 Message-ID: <20170302175357.8222-2-vkuznets@redhat.com> References: <20170302175357.8222-1-vkuznets@redhat.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 1cjUvU-0003Lg-EK for xen-devel@lists.xenproject.org; Thu, 02 Mar 2017 17:54:04 +0000 In-Reply-To: <20170302175357.8222-1-vkuznets@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , Boris Ostrovsky , x86@kernel.org, Andrew Jones , linux-kernel@vger.kernel.org List-Id: xen-devel@lists.xenproject.org QXMgYSBwcmVwYXJhdGlvbiB0byBzcGxpdHRpbmcgdGhlIGNvZGUgd2UgbmVlZCB0byB1bnRhbmds ZSBpdDoKCng4Nl9oeXBlcl94ZW4gLT4geDg2X2h5cGVyX3hlbl9odm0gYW5kIHg4Nl9oeXBlcl94 ZW5fcHYKeGVuX3BsYXRmb3JtKCkgLT4geGVuX3BsYXRmb3JtX2h2bSgpIGFuZCB4ZW5fcGxhdGZv cm1fcHYoKQp4ZW5fY3B1X3VwX3ByZXBhcmUoKSAtPiB4ZW5fY3B1X3VwX3ByZXBhcmVfcHYoKSBh bmQgeGVuX2NwdV91cF9wcmVwYXJlX2h2bSgpCnhlbl9jcHVfZGVhZCgpIC0+IHhlbl9jcHVfZGVh ZF9wdigpIGFuZCB4ZW5fY3B1X2RlYWRfcHZfaHZtKCkKCkFkZCB0d28gcGFyYW1ldGVycyB0byB4 ZW5fY3B1aHBfc2V0dXAoKSB0byBwYXNzIHByb3BlciBjcHVfdXBfcHJlcGFyZSBhbmQKY3B1X2Rl YWQgaG9va3MuIHhlbl9zZXRfY3B1X2ZlYXR1cmVzKCkgaXMgbm93IFBWLW9ubHkgc28gdGhlIHJl ZHVuZGFudAp4ZW5fcHZfZG9tYWluKCkgY2hlY2sgY2FuIGJlIGRyb3BwZWQuCgpTaWduZWQtb2Zm LWJ5OiBWaXRhbHkgS3V6bmV0c292IDx2a3V6bmV0c0ByZWRoYXQuY29tPgotLS0KIGFyY2gveDg2 L2luY2x1ZGUvYXNtL2h5cGVydmlzb3IuaCB8ICAgMyArLQogYXJjaC94ODYva2VybmVsL2NwdS9o eXBlcnZpc29yLmMgIHwgICAzICstCiBhcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgICAgICAgICAg fCAxMTMgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hh bmdlZCwgNzggaW5zZXJ0aW9ucygrKSwgNDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXJj aC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2aXNvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHlw ZXJ2aXNvci5oCmluZGV4IDY3OTQyYjYuLjZmNzU0NWM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9p bmNsdWRlL2FzbS9oeXBlcnZpc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHlwZXJ2 aXNvci5oCkBAIC01Myw3ICs1Myw4IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94 ODYgKng4Nl9oeXBlcjsKIC8qIFJlY29nbml6ZWQgaHlwZXJ2aXNvcnMgKi8KIGV4dGVybiBjb25z dCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3Ztd2FyZTsKIGV4dGVybiBjb25zdCBz dHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX21zX2h5cGVydjsKLWV4dGVybiBjb25zdCBz dHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbjsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qg aHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbl9wdjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaHlw ZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbl9odm07CiBleHRlcm4gY29uc3Qgc3RydWN0IGh5cGVy dmlzb3JfeDg2IHg4Nl9oeXBlcl9rdm07CiAKIGV4dGVybiB2b2lkIGluaXRfaHlwZXJ2aXNvcihz dHJ1Y3QgY3B1aW5mb194ODYgKmMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9o eXBlcnZpc29yLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2h5cGVydmlzb3IuYwppbmRleCAzNTY5 MWE2Li5hNzdmMThkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2h5cGVydmlzb3Iu YworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2h5cGVydmlzb3IuYwpAQCAtMjksNyArMjksOCBA QAogc3RhdGljIGNvbnN0IF9faW5pdGNvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiAqIGNvbnN0 IGh5cGVydmlzb3JzW10gPQogewogI2lmZGVmIENPTkZJR19YRU4KLQkmeDg2X2h5cGVyX3hlbiwK KwkmeDg2X2h5cGVyX3hlbl9wdiwKKwkmeDg2X2h5cGVyX3hlbl9odm0sCiAjZW5kaWYKIAkmeDg2 X2h5cGVyX3Ztd2FyZSwKIAkmeDg2X2h5cGVyX21zX2h5cGVydiwKZGlmZiAtLWdpdCBhL2FyY2gv eDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCBlYzFk NWM0Li40YzFhNTgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIv YXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0xMzksOSArMTM5LDExIEBAIHZvaWQgKnhlbl9p bml0aWFsX2dkdDsKIAogUkVTRVJWRV9CUksoc2hhcmVkX2luZm9fcGFnZV9icmssIFBBR0VfU0la RSk7CiAKLXN0YXRpYyBpbnQgeGVuX2NwdV91cF9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpOwor c3RhdGljIGludCB4ZW5fY3B1X3VwX3ByZXBhcmVfcHYodW5zaWduZWQgaW50IGNwdSk7CitzdGF0 aWMgaW50IHhlbl9jcHVfdXBfcHJlcGFyZV9odm0odW5zaWduZWQgaW50IGNwdSk7CiBzdGF0aWMg aW50IHhlbl9jcHVfdXBfb25saW5lKHVuc2lnbmVkIGludCBjcHUpOwotc3RhdGljIGludCB4ZW5f Y3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSk7CitzdGF0aWMgaW50IHhlbl9jcHVfZGVhZF9wdih1 bnNpZ25lZCBpbnQgY3B1KTsKK3N0YXRpYyBpbnQgeGVuX2NwdV9kZWFkX2h2bSh1bnNpZ25lZCBp bnQgY3B1KTsKIAogLyoKICAqIFBvaW50IGF0IHNvbWUgZW1wdHkgbWVtb3J5IHRvIHN0YXJ0IHdp dGguIFdlIG1hcCB0aGUgcmVhbCBzaGFyZWRfaW5mbwpAQCAtMTQ0NywxMyArMTQ0OSwxNCBAQCBz dGF0aWMgdm9pZCBfX2luaXQgeGVuX2RvbTBfc2V0X2xlZ2FjeV9mZWF0dXJlcyh2b2lkKQogCXg4 Nl9wbGF0Zm9ybS5sZWdhY3kucnRjID0gMTsKIH0KIAotc3RhdGljIGludCB4ZW5fY3B1aHBfc2V0 dXAodm9pZCkKK3N0YXRpYyBpbnQgeGVuX2NwdWhwX3NldHVwKGludCAoKmNwdV91cF9wcmVwYXJl X2NiKSh1bnNpZ25lZCBpbnQpLAorCQkJICAgaW50ICgqY3B1X2RlYWRfY2IpKHVuc2lnbmVkIGlu dCkpCiB7CiAJaW50IHJjOwogCiAJcmMgPSBjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQVUhQ X1hFTl9QUkVQQVJFLAogCQkJCSAgICAgICAieDg2L3hlbi9odm1fZ3Vlc3Q6cHJlcGFyZSIsCi0J CQkJICAgICAgIHhlbl9jcHVfdXBfcHJlcGFyZSwgeGVuX2NwdV9kZWFkKTsKKwkJCQkgICAgICAg Y3B1X3VwX3ByZXBhcmVfY2IsIGNwdV9kZWFkX2NiKTsKIAlpZiAocmMgPj0gMCkgewogCQlyYyA9 IGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQVBfT05MSU5FX0RZTiwKIAkJCQkJICAg ICAgICJ4ODYveGVuL2h2bV9ndWVzdDpvbmxpbmUiLApAQCAtMTU1OSw3ICsxNTYyLDcgQEAgYXNt bGlua2FnZSBfX3Zpc2libGUgdm9pZCBfX2luaXQgeGVuX3N0YXJ0X2tlcm5lbCh2b2lkKQogCSAg IHBvc3NpYmxlIG1hcCBhbmQgYSBub24tZHVtbXkgc2hhcmVkX2luZm8uICovCiAJcGVyX2NwdSh4 ZW5fdmNwdSwgMCkgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdOwogCi0J V0FSTl9PTih4ZW5fY3B1aHBfc2V0dXAoKSk7CisJV0FSTl9PTih4ZW5fY3B1aHBfc2V0dXAoeGVu X2NwdV91cF9wcmVwYXJlX3B2LCB4ZW5fY3B1X2RlYWRfcHYpKTsKIAogCWxvY2FsX2lycV9kaXNh YmxlKCk7CiAJZWFybHlfYm9vdF9pcnFzX2Rpc2FibGVkID0gdHJ1ZTsKQEAgLTE4NDAsMjggKzE4 NDMsNDEgQEAgc3RhdGljIHZvaWQgX19pbml0IGluaXRfaHZtX3B2X2luZm8odm9pZCkKIH0KICNl bmRpZgogCi1zdGF0aWMgaW50IHhlbl9jcHVfdXBfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KQor c3RhdGljIGludCB4ZW5fY3B1X3VwX3ByZXBhcmVfcHYodW5zaWduZWQgaW50IGNwdSkKIHsKIAlp bnQgcmM7CiAKLQlpZiAoeGVuX2h2bV9kb21haW4oKSkgewotCQkvKgotCQkgKiBUaGlzIGNhbiBo YXBwZW4gaWYgQ1BVIHdhcyBvZmZsaW5lZCBlYXJsaWVyIGFuZAotCQkgKiBvZmZsaW5pbmcgdGlt ZWQgb3V0IGluIGNvbW1vbl9jcHVfZGllKCkuCi0JCSAqLwotCQlpZiAoY3B1X3JlcG9ydF9zdGF0 ZShjcHUpID09IENQVV9ERUFEX0ZST1pFTikgewotCQkJeGVuX3NtcF9pbnRyX2ZyZWUoY3B1KTsK LQkJCXhlbl91bmluaXRfbG9ja19jcHUoY3B1KTsKLQkJfQorCXhlbl9zZXR1cF90aW1lcihjcHUp OwogCi0JCWlmIChjcHVfYWNwaV9pZChjcHUpICE9IFUzMl9NQVgpCi0JCQlwZXJfY3B1KHhlbl92 Y3B1X2lkLCBjcHUpID0gY3B1X2FjcGlfaWQoY3B1KTsKLQkJZWxzZQotCQkJcGVyX2NwdSh4ZW5f dmNwdV9pZCwgY3B1KSA9IGNwdTsKLQkJeGVuX3ZjcHVfc2V0dXAoY3B1KTsKKwlyYyA9IHhlbl9z bXBfaW50cl9pbml0KGNwdSk7CisJaWYgKHJjKSB7CisJCVdBUk4oMSwgInhlbl9zbXBfaW50cl9p bml0KCkgZm9yIENQVSAlZCBmYWlsZWQ6ICVkXG4iLAorCQkgICAgIGNwdSwgcmMpOworCQlyZXR1 cm4gcmM7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhlbl9jcHVfdXBfcHJlcGFy ZV9odm0odW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgcmM7CisKKwkvKgorCSAqIFRoaXMgY2Fu IGhhcHBlbiBpZiBDUFUgd2FzIG9mZmxpbmVkIGVhcmxpZXIgYW5kCisJICogb2ZmbGluaW5nIHRp bWVkIG91dCBpbiBjb21tb25fY3B1X2RpZSgpLgorCSAqLworCWlmIChjcHVfcmVwb3J0X3N0YXRl KGNwdSkgPT0gQ1BVX0RFQURfRlJPWkVOKSB7CisJCXhlbl9zbXBfaW50cl9mcmVlKGNwdSk7CisJ CXhlbl91bmluaXRfbG9ja19jcHUoY3B1KTsKIAl9CiAKLQlpZiAoeGVuX3B2X2RvbWFpbigpIHx8 IHhlbl9mZWF0dXJlKFhFTkZFQVRfaHZtX3NhZmVfcHZjbG9jaykpCisJaWYgKGNwdV9hY3BpX2lk KGNwdSkgIT0gVTMyX01BWCkKKwkJcGVyX2NwdSh4ZW5fdmNwdV9pZCwgY3B1KSA9IGNwdV9hY3Bp X2lkKGNwdSk7CisJZWxzZQorCQlwZXJfY3B1KHhlbl92Y3B1X2lkLCBjcHUpID0gY3B1OworCXhl bl92Y3B1X3NldHVwKGNwdSk7CisKKwlpZiAoeGVuX2ZlYXR1cmUoWEVORkVBVF9odm1fc2FmZV9w dmNsb2NrKSkKIAkJeGVuX3NldHVwX3RpbWVyKGNwdSk7CiAKIAlyYyA9IHhlbl9zbXBfaW50cl9p bml0KGNwdSk7CkBAIC0xODczLDE2ICsxODg5LDI1IEBAIHN0YXRpYyBpbnQgeGVuX2NwdV91cF9w cmVwYXJlKHVuc2lnbmVkIGludCBjcHUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgeGVu X2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW50IHhlbl9jcHVfZGVhZF9wdih1 bnNpZ25lZCBpbnQgY3B1KQogewogCXhlbl9zbXBfaW50cl9mcmVlKGNwdSk7CiAKLQlpZiAoeGVu X3B2X2RvbWFpbigpIHx8IHhlbl9mZWF0dXJlKFhFTkZFQVRfaHZtX3NhZmVfcHZjbG9jaykpCi0J CXhlbl90ZWFyZG93bl90aW1lcihjcHUpOworCXhlbl90ZWFyZG93bl90aW1lcihjcHUpOwogCiAJ cmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgeGVuX2NwdV9kZWFkX2h2bSh1bnNpZ25lZCBpbnQg Y3B1KQoreworCXhlbl9zbXBfaW50cl9mcmVlKGNwdSk7CisKKwlpZiAoeGVuX2ZlYXR1cmUoWEVO RkVBVF9odm1fc2FmZV9wdmNsb2NrKSkKKwkJeGVuX3RlYXJkb3duX3RpbWVyKGNwdSk7CisKKyAg ICAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB4ZW5fY3B1X3VwX29ubGluZSh1bnNpZ25l ZCBpbnQgY3B1KQogewogCXhlbl9pbml0X2xvY2tfY3B1KGNwdSk7CkBAIC0xOTE5LDcgKzE5NDQs NyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2h2bV9ndWVzdF9pbml0KHZvaWQpCiAJQlVHX09O KCF4ZW5fZmVhdHVyZShYRU5GRUFUX2h2bV9jYWxsYmFja192ZWN0b3IpKTsKIAogCXhlbl9odm1f c21wX2luaXQoKTsKLQlXQVJOX09OKHhlbl9jcHVocF9zZXR1cCgpKTsKKwlXQVJOX09OKHhlbl9j cHVocF9zZXR1cCh4ZW5fY3B1X3VwX3ByZXBhcmVfaHZtLCB4ZW5fY3B1X2RlYWRfaHZtKSk7CiAJ eGVuX3VucGx1Z19lbXVsYXRlZF9kZXZpY2VzKCk7CiAJeDg2X2luaXQuaXJxcy5pbnRyX2luaXQg PSB4ZW5faW5pdF9JUlE7CiAJeGVuX2h2bV9pbml0X3RpbWVfb3BzKCk7CkBAIC0xOTQyLDkgKzE5 NjcsMTcgQEAgc3RhdGljIF9faW5pdCBpbnQgeGVuX3BhcnNlX25vcHYoY2hhciAqYXJnKQogfQog ZWFybHlfcGFyYW0oInhlbl9ub3B2IiwgeGVuX3BhcnNlX25vcHYpOwogCi1zdGF0aWMgdWludDMy X3QgX19pbml0IHhlbl9wbGF0Zm9ybSh2b2lkKQorc3RhdGljIHVpbnQzMl90IF9faW5pdCB4ZW5f cGxhdGZvcm1fcHYodm9pZCkKIHsKLQlpZiAoeGVuX25vcHYpCisJaWYgKHhlbl9wdl9kb21haW4o KSkKKwkJcmV0dXJuIHhlbl9jcHVpZF9iYXNlKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHVpbnQzMl90IF9faW5pdCB4ZW5fcGxhdGZvcm1faHZtKHZvaWQpCit7CisJaWYgKHhlbl9wdl9k b21haW4oKSB8fCB4ZW5fbm9wdikKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4geGVuX2NwdWlkX2Jh c2UoKTsKQEAgLTE5NjYsMTAgKzE5OTksOCBAQCBFWFBPUlRfU1lNQk9MX0dQTCh4ZW5faHZtX25l ZWRfbGFwaWMpOwogCiBzdGF0aWMgdm9pZCB4ZW5fc2V0X2NwdV9mZWF0dXJlcyhzdHJ1Y3QgY3B1 aW5mb194ODYgKmMpCiB7Ci0JaWYgKHhlbl9wdl9kb21haW4oKSkgewotCQljbGVhcl9jcHVfYnVn KGMsIFg4Nl9CVUdfU1lTUkVUX1NTX0FUVFJTKTsKLQkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRV UkVfWEVOUFYpOwotCX0KKwljbGVhcl9jcHVfYnVnKGMsIFg4Nl9CVUdfU1lTUkVUX1NTX0FUVFJT KTsKKwlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9YRU5QVik7CiB9CiAKIHN0YXRpYyB2b2lk IHhlbl9waW5fdmNwdShpbnQgY3B1KQpAQCAtMjAxMSwxNyArMjA0MiwyMSBAQCBzdGF0aWMgdm9p ZCB4ZW5fcGluX3ZjcHUoaW50IGNwdSkKIAl9CiB9CiAKLWNvbnN0IHN0cnVjdCBoeXBlcnZpc29y X3g4NiB4ODZfaHlwZXJfeGVuID0gewotCS5uYW1lCQkJPSAiWGVuIiwKLQkuZGV0ZWN0CQkJPSB4 ZW5fcGxhdGZvcm0sCi0jaWZkZWYgQ09ORklHX1hFTl9QVkhWTQotCS5pbml0X3BsYXRmb3JtCQk9 IHhlbl9odm1fZ3Vlc3RfaW5pdCwKLSNlbmRpZgotCS54MmFwaWNfYXZhaWxhYmxlCT0geGVuX3gy YXBpY19wYXJhX2F2YWlsYWJsZSwKK2NvbnN0IHN0cnVjdCBoeXBlcnZpc29yX3g4NiB4ODZfaHlw ZXJfeGVuX3B2ID0geworCS5uYW1lICAgICAgICAgICAgICAgICAgID0gIlhlbiBQViIsCisJLmRl dGVjdCAgICAgICAgICAgICAgICAgPSB4ZW5fcGxhdGZvcm1fcHYsCiAJLnNldF9jcHVfZmVhdHVy ZXMgICAgICAgPSB4ZW5fc2V0X2NwdV9mZWF0dXJlcywKIAkucGluX3ZjcHUgICAgICAgICAgICAg ICA9IHhlbl9waW5fdmNwdSwKIH07Ci1FWFBPUlRfU1lNQk9MKHg4Nl9oeXBlcl94ZW4pOworRVhQ T1JUX1NZTUJPTCh4ODZfaHlwZXJfeGVuX3B2KTsKKworY29uc3Qgc3RydWN0IGh5cGVydmlzb3Jf eDg2IHg4Nl9oeXBlcl94ZW5faHZtID0geworCS5uYW1lICAgICAgICAgICAgICAgICAgID0gIlhl biBIVk0iLAorCS5kZXRlY3QgICAgICAgICAgICAgICAgID0geGVuX3BsYXRmb3JtX2h2bSwKKwku aW5pdF9wbGF0Zm9ybSAgICAgICAgICA9IHhlbl9odm1fZ3Vlc3RfaW5pdCwKKwkueDJhcGljX2F2 YWlsYWJsZSAgICAgICA9IHhlbl94MmFwaWNfcGFyYV9hdmFpbGFibGUsCit9OworRVhQT1JUX1NZ TUJPTCh4ODZfaHlwZXJfeGVuX2h2bSk7CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHZv aWQgeGVuX2FyY2hfcmVnaXN0ZXJfY3B1KGludCBudW0pCi0tIAoyLjkuMwoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxp c3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZl bAo=