From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v12 13/23] x86: refactor psr: CDP: implement CPU init flow. Date: Wed, 14 Jun 2017 09:12:46 +0800 Message-ID: <1497402776-22348-14-git-send-email-yi.y.sun@linux.intel.com> References: <1497402776-22348-1-git-send-email-yi.y.sun@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dKx4D-0007eM-HS for xen-devel@lists.xenproject.org; Wed, 14 Jun 2017 01:25:53 +0000 In-Reply-To: <1497402776-22348-1-git-send-email-yi.y.sun@linux.intel.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: kevin.tian@intel.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, he.chen@linux.intel.com, ian.jackson@eu.citrix.com, Yi Sun , mengxu@cis.upenn.edu, jbeulich@suse.com, chao.p.peng@linux.intel.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBDUFUgaW5pdCBmbG93IGZvciBDRFAuIFRoZSBmbG93 IGlzIGFsbW9zdApzYW1lIGFzIEwzIENBVC4KClNpZ25lZC1vZmYtYnk6IFlpIFN1biA8eWkueS5z dW5AbGludXguaW50ZWwuY29tPgotLS0KdjEyOgogICAgLSBtb3ZlICd0eXBlW10nIGFzc2lnbm1l bnQgaW50byBsM19jZHBfcHJvcHMgZGVjbGFyYXRpb24gdG8gbWFrZSBpdCBiZQogICAgICAnY29u c3QnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSByZW1vdmUgIkwyIENB VCIgaW5kaWNhdGlvbiBpbiBwcmludGsuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gp CiAgICAtIGZpeCBjb2Rpbmcgc3R5bGUgaXNzdWUuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJl dWxpY2gpCiAgICAtIGNoYW5nZSAndmFsJyB0eXBlIHRvIHVpbnQ2NF90LgogICAgICAoc3VnZ2Vz dGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSB1c2UgMXVsbC4KICAgICAgKHN1Z2dlc3RlZCBieSBK YW4gQmV1bGljaCkKICAgIC0gcmVzdG9yZSBtYXNrKDApIE1TUiB0byBkZWZhdWx0IHZhbHVlLgog ICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQp2MTE6CiAgICAtIGNoYW5nZXMgYWJvdXQg J2ZlYXRfcHJvcHMnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSByZW1v dmUgTVNSIHJlc3RvcmUgYWN0aW9uIHdoaWNoIGlzIHVubmVjZXNzYXJ5LgogICAgICAoc3VnZ2Vz dGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBtb2RpZnkgY29tbWl0IG1lc3NhZ2UuCnYxMDoKICAg IC0gZml4IGNvbW1lbnQuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIHVz ZSBzd2l0aCBpbiAnY2F0X2luaXRfZmVhdHVyZScgdG8gaGFuZGxlIGRpZmZlcmVudCBmZWF0dXJl IHR5cGVzLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSBjaGFuZ2VzIGFi b3V0ICdwcm9wcycuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCiAgICAtIHJlc3Rv cmUgTVNScyB0byBkZWZhdWx0IHZhbHVlIHdoZW4gY3B1IG9ubGluZS4KICAgICAgKHN1Z2dlc3Rl ZCBieSBKYW4gQmV1bGljaCkKICAgIC0gcmVtb3ZlIGZlYXRfbWFzay4KICAgICAgKHN1Z2dlc3Rl ZCBieSBKYW4gQmV1bGljaCkKdjk6CiAgICAtIG1vZGlmeSBjb21taXQgbWVzc2FnZSB0byBkZXNj cmliZSBmbG93IGNsZWFyZXIuCiAgICAtIGhhbmRsZSBjcHUgb2ZmbGluZSBhbmQgb25saW5lIGFn YWluIGNhc2UgdG8gcmVhZCBNU1JzIHJlZ2lzdGVycyB2YWx1ZXMKICAgICAgYmFjayBhbmQgc2F2 ZSB0aGVtIGludG8gY29zIGFycmF5IHRvIG1ha2UgdXNlciBjYW4gZ2V0IHJlYWwgZGF0YS4KICAg IC0gbW9kaWZ5IGVycm9yIGhhbmRsaW5nIHByb2Nlc3MgaW4gJ3Bzcl9jcHVfcHJlcGFyZScgdG8g cmVkdWNlIHJlZHVuZGFudAogICAgICBjb2Rlcy4KICAgIC0gbW9kaWZ5ICdnZXRfY2RwX2RhdGEn IGFuZCAnZ2V0X2NkcF9jb2RlJyB0byBtYWtlIHRoZW0gc3RhbmRhcmQuCiAgICAgIChzdWdnZXN0 ZWQgYnkgUm9nZXIgUGF1IGFuZCBKYW4gQmV1bGljaCkKICAgIC0gZW5jYXBzdWxhdGUgQ0RQIG9w ZXJhdGlvbnMgaW50byAnY2F0X2luaXRfZmVhdHVyZScgdG8gcmVkdWNlIHJlZHVuZGFudAogICAg ICBjb2Rlcy4KICAgICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUpCiAgICAtIHJldXNlICdjYXRf Z2V0X2Nvc19tYXgnIGZvciBDRFAuCiAgICAgIChzdWdnZXN0ZWQgYnkgUm9nZXIgUGF1KQogICAg LSBoYW5kbGUgJ1BTUl9DRFAnIGluIHBzcl9wcmVzbXBfaW5pdCB0byBtYWtlIGluaXQgd29yayBj YW4gYmUgZG9uZSB3aGVuCiAgICAgIHRoZXJlIGlzIG9ubHkgJ3Bzcj1jZHAnIGluIGNtZGxpbmUu CiAgICAtIHJlbW92ZSB1bm5lY2Vzc2FyeSBjb21tZW50LgogICAgICAoc3VnZ2VzdGVkIGJ5IEph biBCZXVsaWNoKQogICAgLSBtb3ZlIENEUCByZWxhdGVkIGNvZGVzIGluICdjcHVfaW5pdF93b3Jr JyBpbnRvICdwc3JfY3B1X2luaXQnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQog ICAgLSBhZGQgY29kZXMgdG8gaGFuZGxlIENEUCdzICdjb3NfbnVtJy4KICAgICAgKHN1Z2dlc3Rl ZCBieSBKYW4gQmV1bGljaCkKICAgIC0gZml4IGNvZGluZyBzdHlsZSBpc3N1ZS4KICAgICAgKHN1 Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKICAgIC0gZG8gbm90IGZyZWUgcmVzb3VyY2VzIHdoZW4g YWxsb2NhdGlvbiBmYWlscyBpbiAncHNyX2NwdV9wcmVwYXJlJy4KICAgICAgKHN1Z2dlc3RlZCBi eSBKYW4gQmV1bGljaCkKICAgIC0gY2hhbmdlcyBhYm91dCAndWludDY0X3QnIHRvICd1aW50MzJf dCcuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCnY3OgogICAgLSBpbml0aWFsaXpl ICdsM19jZHAnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEtvbnJhZCBSemVzenV0ZWsgV2lsaykKdjY6 CiAgICAtIHVzZSAnY3B1aWRfbGVhZicuCiAgICAgIChzdWdnZXN0ZWQgYnkgS29ucmFkIFJ6ZXN6 dXRlayBXaWxrIGFuZCBKYW4gQmV1bGljaCkKdjU6CiAgICAtIHJlbW92ZSBjb2RlcyB0byBmcmVl ICdmZWF0X2wzX2NkcCcgaW4gJ2ZyZWVfZmVhdHVyZScuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFu IEJldWxpY2gpCiAgICAtIGVuY2Fwc3VsYXRlIGNwdWlkIHJlZ2lzdGVycyBpbnRvICdzdHJ1Y3Qg Y3B1aWRfbGVhZl9yZWdzJy4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKICAgIC0g cHJpbnQgc29ja2V0IGluZm8gd2hlbiAnb3B0X2NwdV9pbmZvJyBpcyB0cnVlLgogICAgICAoc3Vn Z2VzdGVkIGJ5IEphbiBCZXVsaWNoKQogICAgLSByZW5hbWUgJ2wzX2NkcF9nZXRfbWF4X2Nvc19t YXgnIHRvICdsM19jZHBfZ2V0X2Nvc19tYXgnLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVs aWNoKQogICAgLSByZW5hbWUgJ2RhdFtdJyB0byAnZGF0YVtdJy4KICAgICAgKHN1Z2dlc3RlZCBi eSBKYW4gQmV1bGljaCkKICAgIC0gbW92ZSAnY3B1X3ByZXBhcmVfd29yaycgY29udGVudHMgaW50 byAncHNyX2NwdV9wcmVwYXJlJy4KICAgICAgKHN1Z2dlc3RlZCBieSBKYW4gQmV1bGljaCkKdjQ6 CiAgICAtIGNyZWF0ZSB0aGlzIHBhdGNoIHRvIG1ha2UgY29kZXMgZWFzaWVyIHRvIHVuZGVyc3Rh bmQuCiAgICAgIChzdWdnZXN0ZWQgYnkgSmFuIEJldWxpY2gpCi0tLQotLS0KIHhlbi9hcmNoL3g4 Ni9wc3IuYyB8IDc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3Bzci5jIGIveGVuL2FyY2gveDg2L3Bzci5j CmluZGV4IDgxZDlhNzguLjgxNGYwZTEgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wc3IuYwor KysgYi94ZW4vYXJjaC94ODYvcHNyLmMKQEAgLTYyLDYgKzYyLDcgQEAKIAogZW51bSBwc3JfZmVh dF90eXBlIHsKICAgICBQU1JfU09DS0VUX0wzX0NBVCwKKyAgICBQU1JfU09DS0VUX0wzX0NEUCwK ICAgICBQU1JfU09DS0VUX0ZFQVRfTlVNLAogICAgIFBTUl9TT0NLRVRfRkVBVF9VTktOT1dOLAog fTsKQEAgLTE1MiwxMSArMTUzLDI4IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHNy X2Fzc29jLCBwc3JfYXNzb2MpOwogICogYXJyYXkgY3JlYXRpb24uIEl0IGlzIHVzZWQgdG8gdHJh bnNpZW50bHkgc3RvcmUgYSBzcGFyZSBub2RlLgogICovCiBzdGF0aWMgc3RydWN0IGZlYXRfbm9k ZSAqZmVhdF9sM19jYXQ7CitzdGF0aWMgc3RydWN0IGZlYXRfbm9kZSAqZmVhdF9sM19jZHA7CiAK IC8qIENvbW1vbiBmdW5jdGlvbnMgKi8KICNkZWZpbmUgY2F0X2RlZmF1bHRfdmFsKGxlbikgKDB4 ZmZmZmZmZmYgPj4gKDMyIC0gKGxlbikpKQogCiAvKgorICogZ2V0X2NkcF9kYXRhIC0gZ2V0IERB VEEgQ09TIHJlZ2lzdGVyIHZhbHVlIGZyb20gaW5wdXQgQ09TIElELgorICogQGZlYXQ6ICAgICAg ICB0aGUgZmVhdHVyZSBub2RlLgorICogQGNvczogICAgICAgICB0aGUgQ09TIElELgorICovCisj ZGVmaW5lIGdldF9jZHBfZGF0YShmZWF0LCBjb3MpICAgICAgICAgICAgICBcCisgICAgICAgICAg ICAoKGZlYXQpLT5jb3NfcmVnX3ZhbFsoY29zKSAqIDJdKQorCisvKgorICogZ2V0X2NkcF9jb2Rl IC0gZ2V0IENPREUgQ09TIHJlZ2lzdGVyIHZhbHVlIGZyb20gaW5wdXQgQ09TIElELgorICogQGZl YXQ6ICAgICAgICB0aGUgZmVhdHVyZSBub2RlLgorICogQGNvczogICAgICAgICB0aGUgQ09TIElE LgorICovCisjZGVmaW5lIGdldF9jZHBfY29kZShmZWF0LCBjb3MpICAgICAgICAgICAgICBcCisg ICAgICAgICAgICAoKGZlYXQpLT5jb3NfcmVnX3ZhbFsoY29zKSAqIDIgKyAxXSkKKworLyoKICAq IFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFueSBhbGxvY2F0aW9uIGZlYXR1cmUgaGFz IGJlZW4gZW5hYmxlZAogICogaW4gY21kbGluZS4KICAqLwpAQCAtMjUzLDYgKzI3MSwyNiBAQCBz dGF0aWMgdm9pZCBjYXRfaW5pdF9mZWF0dXJlKGNvbnN0IHN0cnVjdCBjcHVpZF9sZWFmICpyZWdz LAogCiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBQU1JfU09DS0VUX0wzX0NEUDoKKyAgICB7 CisgICAgICAgIHVpbnQ2NF90IHZhbDsKKworICAgICAgICAvKiBDdXQgaGFsZiBvZiBjb3NfbWF4 IHdoZW4gQ0RQIGlzIGVuYWJsZWQuICovCisgICAgICAgIGZlYXQtPmNvc19tYXggPj49IDE7CisK KyAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLKDApLCBjYXRfZGVmYXVsdF92YWwo ZmVhdC0+Y2JtX2xlbikpOworICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX01BU0soMSks IGNhdF9kZWZhdWx0X3ZhbChmZWF0LT5jYm1fbGVuKSk7CisgICAgICAgIHJkbXNybChNU1JfSUEz Ml9QU1JfTDNfUU9TX0NGRywgdmFsKTsKKyAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19R T1NfQ0ZHLAorICAgICAgICAgICAgICAgdmFsIHwgKDF1bGwgPDwgUFNSX0wzX1FPU19DRFBfRU5B QkxFX0JJVCkpOworCisgICAgICAgIC8qIGNvcz0wIGlzIHJlc2VydmVkIGFzIGRlZmF1bHQgY2Jt KGFsbCBiaXRzIHdpdGhpbiBjYm1fbGVuIGFyZSAxKS4gKi8KKyAgICAgICAgZ2V0X2NkcF9jb2Rl KGZlYXQsIDApID0gY2F0X2RlZmF1bHRfdmFsKGZlYXQtPmNibV9sZW4pOworICAgICAgICBnZXRf Y2RwX2RhdGEoZmVhdCwgMCkgPSBjYXRfZGVmYXVsdF92YWwoZmVhdC0+Y2JtX2xlbik7CisKKyAg ICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwogICAg IH0KQEAgLTI2Myw3ICszMDEsOCBAQCBzdGF0aWMgdm9pZCBjYXRfaW5pdF9mZWF0dXJlKGNvbnN0 IHN0cnVjdCBjcHVpZF9sZWFmICpyZWdzLAogICAgIGlmICggIW9wdF9jcHVfaW5mbyApCiAgICAg ICAgIHJldHVybjsKIAotICAgIHByaW50ayhYRU5MT0dfSU5GTyAiQ0FUOiBlbmFibGVkIG9uIHNv Y2tldCAldSwgY29zX21heDoldSwgY2JtX2xlbjoldVxuIiwKKyAgICBwcmludGsoWEVOTE9HX0lO Rk8gIiVzOiBlbmFibGVkIG9uIHNvY2tldCAldSwgY29zX21heDoldSwgY2JtX2xlbjoldVxuIiwK KyAgICAgICAgICAgKCh0eXBlID09IFBTUl9TT0NLRVRfTDNfQ0RQKSA/ICJDRFAiIDogIkwzIENB VCIpLAogICAgICAgICAgICBjcHVfdG9fc29ja2V0KHNtcF9wcm9jZXNzb3JfaWQoKSksIGZlYXQt PmNvc19tYXgsIGZlYXQtPmNibV9sZW4pOwogfQogCkBAIC0yOTMsNiArMzMyLDEzIEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgZmVhdF9wcm9wcyBsM19jYXRfcHJvcHMgPSB7CiAgICAgLndyaXRlX21z ciA9IGwzX2NhdF93cml0ZV9tc3IsCiB9OwogCisvKiBMMyBDRFAgcHJvcHMgKi8KK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmVhdF9wcm9wcyBsM19jZHBfcHJvcHMgPSB7CisgICAgLmNvc19udW0gPSAy LAorICAgIC50eXBlWzBdID0gUFNSX0NCTV9UWVBFX0wzX0RBVEEsCisgICAgLnR5cGVbMV0gPSBQ U1JfQ0JNX1RZUEVfTDNfQ09ERSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJzZV9wc3Jf Ym9vbChjaGFyICpzLCBjaGFyICp2YWx1ZSwgY2hhciAqZmVhdHVyZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWFzaykKIHsKQEAgLTEyNjMsNiArMTMw OSwxMCBAQCBzdGF0aWMgaW50IHBzcl9jcHVfcHJlcGFyZSh2b2lkKQogICAgICAgICAgKGZlYXRf bDNfY2F0ID0geHphbGxvYyhzdHJ1Y3QgZmVhdF9ub2RlKSkgPT0gTlVMTCApCiAgICAgICAgIHJl dHVybiAtRU5PTUVNOwogCisgICAgaWYgKCBmZWF0X2wzX2NkcCA9PSBOVUxMICYmCisgICAgICAg ICAoZmVhdF9sM19jZHAgPSB4emFsbG9jKHN0cnVjdCBmZWF0X25vZGUpKSA9PSBOVUxMICkKKyAg ICAgICAgcmV0dXJuIC1FTk9NRU07CisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTI5NCwxMSAr MTM0NCwyMSBAQCBzdGF0aWMgdm9pZCBwc3JfY3B1X2luaXQodm9pZCkKICAgICB7CiAgICAgICAg IGNwdWlkX2NvdW50X2xlYWYoUFNSX0NQVUlEX0xFVkVMX0NBVCwgMSwgJnJlZ3MpOwogCi0gICAg ICAgIGZlYXQgPSBmZWF0X2wzX2NhdDsKLSAgICAgICAgZmVhdF9sM19jYXQgPSBOVUxMOwotICAg ICAgICBmZWF0X3Byb3BzW1BTUl9TT0NLRVRfTDNfQ0FUXSA9ICZsM19jYXRfcHJvcHM7Ci0KLSAg ICAgICAgY2F0X2luaXRfZmVhdHVyZSgmcmVncywgZmVhdCwgaW5mbywgUFNSX1NPQ0tFVF9MM19D QVQpOworICAgICAgICBpZiAoIChyZWdzLmMgJiBQU1JfQ0FUX0NEUF9DQVBBQklMSVRZKSAmJiAo b3B0X3BzciAmIFBTUl9DRFApICYmCisgICAgICAgICAgICAgIWluZm8tPmZlYXR1cmVzW1BTUl9T T0NLRVRfTDNfQ0RQXSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZlYXQgPSBmZWF0X2wzX2Nk cDsKKyAgICAgICAgICAgIGZlYXRfbDNfY2RwID0gTlVMTDsKKyAgICAgICAgICAgIGZlYXRfcHJv cHNbUFNSX1NPQ0tFVF9MM19DRFBdID0gJmwzX2NkcF9wcm9wczsKKyAgICAgICAgICAgIGNhdF9p bml0X2ZlYXR1cmUoJnJlZ3MsIGZlYXQsIGluZm8sIFBTUl9TT0NLRVRfTDNfQ0RQKTsKKyAgICAg ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZlYXQgPSBmZWF0X2wz X2NhdDsKKyAgICAgICAgICAgIGZlYXRfbDNfY2F0ID0gTlVMTDsKKyAgICAgICAgICAgIGZlYXRf cHJvcHNbUFNSX1NPQ0tFVF9MM19DQVRdID0gJmwzX2NhdF9wcm9wczsKKyAgICAgICAgICAgIGNh dF9pbml0X2ZlYXR1cmUoJnJlZ3MsIGZlYXQsIGluZm8sIFBTUl9TT0NLRVRfTDNfQ0FUKTsKKyAg ICAgICAgfQogCiAgICAgICAgIGluZm8tPmZlYXRfaW5pdCA9IHRydWU7CiAgICAgfQpAQCAtMTM2 MCw3ICsxNDIwLDcgQEAgc3RhdGljIGludCBfX2luaXQgcHNyX3ByZXNtcF9pbml0KHZvaWQpCiAg ICAgaWYgKCAob3B0X3BzciAmIFBTUl9DTVQpICYmIG9wdF9ybWlkX21heCApCiAgICAgICAgIGlu aXRfcHNyX2NtdChvcHRfcm1pZF9tYXgpOwogCi0gICAgaWYgKCBvcHRfcHNyICYgUFNSX0NBVCAp CisgICAgaWYgKCBvcHRfcHNyICYgKFBTUl9DQVQgfCBQU1JfQ0RQKSApCiAgICAgICAgIGluaXRf cHNyKCk7CiAKICAgICBpZiAoIHBzcl9jcHVfcHJlcGFyZSgpICkKLS0gCjEuOS4xCgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==