From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH 5/5] x86: use MOV for PFN/PDX conversion when possible Date: Wed, 28 Feb 2018 06:59:04 -0700 Message-ID: <5A96C3B802000078001ACD0B@prv-mh.provo.novell.com> References: <5A96C1D602000078001ACCEC@prv-mh.provo.novell.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 1er2GI-0000Ep-6q for xen-devel@lists.xenproject.org; Wed, 28 Feb 2018 13:59:14 +0000 In-Reply-To: <5A96C1D602000078001ACCEC@prv-mh.provo.novell.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org Li4uIGFuZCAob2YgY291cnNlKSBhbHNvIG1hZGRyIC8gZGlyZWN0LW1hcC1vZmZzZXQgb25lcy4K Ck1vc3QgeDg2IHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgcmVxdWlyZSB0aGUgdXNlIG9mIFBEWCBj b21wcmVzc2lvbi4gTm93CnRoYXQgd2UgaGF2ZSBwYXRjaGluZyBmb3IgdGhlIGNvbnZlcnNpb24g Y29kZSBpbiBwbGFjZSBhbnl3YXksIGV4dGVuZCBpdAp0byB1c2Ugc2ltcGxlIE1PViB3aGVuIHBv c3NpYmxlLiBJbnRyb2R1Y2UgYSBuZXcgcHNldWRvLUNQVS1mZWF0dXJlIHRvCmtleSB0aGUgcGF0 Y2hpbmcgb2ZmIG9mLgoKU2lnbmVkLW9mZi1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2Uu Y29tPgotLS0KVGhpcyBwYXRjaCB3aWxsIG9ubHkgYXBwbHkgY2xlYW5seSBvbiB0b3Agb2YgIng4 NjogTk9QIG91dCBYUFRJCmVudHJ5L2V4aXQgY29kZSB3aGVuIGl0J3Mgbm90IGluIHVzZSIuCgot LS0gYS94ZW4vYXJjaC94ODYvc2V0dXAuYworKysgYi94ZW4vYXJjaC94ODYvc2V0dXAuYwpAQCAt MTQxMCw2ICsxNDEwLDkgQEAgdm9pZCBfX2luaXQgbm9yZXR1cm4gX19zdGFydF94ZW4odW5zaWdu ZQogCiAgICAgbnVtYV9pbml0bWVtX2luaXQoMCwgcmF3X21heF9wYWdlKTsKIAorICAgIGlmICgg IXBmbl9wZHhfaG9sZV9zaGlmdCApCisgICAgICAgIHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZF QVRVUkVfUEZOX1BEWF9JREVOVCk7CisKICAgICBpZiAoIG1heF9wYWdlIC0gMSA+IHZpcnRfdG9f bWZuKEhZUEVSVklTT1JfVklSVF9FTkQgLSAxKSApCiAgICAgewogICAgICAgICB1bnNpZ25lZCBs b25nIGxpbWl0ID0gdmlydF90b19tZm4oSFlQRVJWSVNPUl9WSVJUX0VORCAtIDEpOwotLS0gYS94 ZW4vaW5jbHVkZS9hc20teDg2L2NwdWZlYXR1cmVzLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4 Ni9jcHVmZWF0dXJlcy5oCkBAIC0zMSwzICszMSw0IEBAIFhFTl9DUFVGRUFUVVJFKFhFTl9JQlJT X0NMRUFSLCAgKEZTQ0FQSU4KIFhFTl9DUFVGRUFUVVJFKFJTQl9OQVRJVkUsICAgICAgKEZTQ0FQ SU5UUyswKSozMisxOCkgLyogUlNCIG92ZXJ3cml0ZSBuZWVkZWQgZm9yIG5hdGl2ZSAqLwogWEVO X0NQVUZFQVRVUkUoUlNCX1ZNRVhJVCwgICAgICAoRlNDQVBJTlRTKzApKjMyKzE5KSAvKiBSU0Ig b3ZlcndyaXRlIG5lZWRlZCBmb3Igdm1leGl0ICovCiBYRU5fQ1BVRkVBVFVSRShOT19YUFRJLCAg ICAgICAgIChGU0NBUElOVFMrMCkqMzIrMjApIC8qIFhQVEkgbWl0aWdhdGlvbiBub3QgaW4gdXNl ICovCitYRU5fQ1BVRkVBVFVSRShQRk5fUERYX0lERU5ULCAgIChGU0NBUElOVFMrMCkqMzIrMjEp IC8qIFBGTiA8LT4gUERYIG1hcHBpbmcgaXMgMToxICovCi0tLSBhL3hlbi9pbmNsdWRlL2FzbS14 ODYvcGR4LmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wZHguaApAQCAtMTMsNyArMTMsNyBA QCBzdGF0aWMgYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHBkeF90CiAKICNpZmRlZiBIQVZF X0dBU19RVU9URURfRVhQUl9TWU0KICNkZWZpbmUgU1lNTkFNRShwZnguLi4pICJcIiIgI3BmeCAi cGR4MnBmbl8lW3Bmbl1fJVtwZHhdXCIiCi0gICAgYWx0ZXJuYXRpdmVfaW9fMigiY2FsbCAiIFNZ TU5BTUUoKSAiOyAiIEFTTV9OT1A0ICJcdCIKKyAgICBhbHRlcm5hdGl2ZV9pb18zKCJjYWxsICIg U1lNTkFNRSgpICI7ICIgQVNNX05PUDQgIlx0IgogICAgICAgICAgICAgICAgICAgICAgTElOS09O Q0VfUFJPTE9HVUUoU1lNTkFNRSkKICAgICAgICAgICAgICAgICAgICAgICJtb3YgJVtzaGlmdF0s ICUlZWN4XG5cdCIKICAgICAgICAgICAgICAgICAgICAgICJtb3YgJVtwZHhdLCAlW3Bmbl1cblx0 IgpAQCAtMjUsNiArMjUsNyBAQCBzdGF0aWMgYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIHBk eF90CiAgICAgICAgICAgICAgICAgICAgICBMSU5LT05DRV9FUElMT0dVRShTWU1OQU1FKSwKICAg ICAgICAgICAgICAgICAgICAgICJjYWxsICIgU1lNTkFNRSgpLCBYODZfRkVBVFVSRV9BTFdBWVMs CiAgICAgICAgICAgICAgICAgICAgICAicGRlcCAlW21hc2tdLCAlW3BkeF0sICVbcGZuXSIsIFg4 Nl9GRUFUVVJFX0JNSTIsCisgICAgICAgICAgICAgICAgICAgICAibW92ICVbcGR4XSwgJVtwZm5d IiwgWDg2X0ZFQVRVUkVfUEZOX1BEWF9JREVOVCwKICAgICAgICAgICAgICAgICAgICAgIEFTTV9P VVRQVVQyKFtwZm5dICI9JnIiIChwZm4pLCBbcGR4XSAiK3IiIChwZHgpKSwKICAgICAgICAgICAg ICAgICAgICAgIFttYXNrXSAibSIgKHBmbl9yZWFsX21hc2spLAogICAgICAgICAgICAgICAgICAg ICAgW3NoaWZ0XSAibSIgKHBmbl9wZHhfaG9sZV9zaGlmdCksCkBAIC0zMywxMiArMzQsMTMgQEAg c3RhdGljIGFsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwZHhfdAogICAgICAgICAgICAgICAg ICAgICAgOiAiZWN4Iik7CiAjdW5kZWYgU1lNTkFNRQogI2Vsc2UKLSAgICBhbHRlcm5hdGl2ZV9p b18yKCJjYWxsIHBkeDJwZm47ICIgQVNNX05PUDQsCisgICAgYWx0ZXJuYXRpdmVfaW9fMygiY2Fs bCBwZHgycGZuOyAiIEFTTV9OT1A0LAogICAgICAgICAgICAgICAgICAgICAgImNhbGwgcGR4MnBm biIsIFg4Nl9GRUFUVVJFX0FMV0FZUywKICAgICAgICAgICAgICAgICAgICAgIC8qIHBkZXAgcGZu X3JlYWxfbWFzayglcmlwKSwgJXJkaSwgJXJheCAqLwogICAgICAgICAgICAgICAgICAgICAgIi5i eXRlIDB4YzQsIDB4ZTIsIDB4YzMsIDB4ZjUsIDB4MDVcblx0IgogICAgICAgICAgICAgICAgICAg ICAgIi5sb25nIHBmbl9yZWFsX21hc2sgLSA0IC0gLiIsCiAgICAgICAgICAgICAgICAgICAgICBY ODZfRkVBVFVSRV9CTUkyLAorICAgICAgICAgICAgICAgICAgICAgIm1vdiAlJXJkaSwgJSVyYXgi LCBYODZfRkVBVFVSRV9QRk5fUERYX0lERU5ULAogICAgICAgICAgICAgICAgICAgICAgQVNNX09V VFBVVDIoIj1hIiAocGZuKSwgIitEIiAocGR4KSksICJtIiAocGZuX3JlYWxfbWFzaykKICAgICAg ICAgICAgICAgICAgICAgIDogInJjeCIsICJyZHgiLCAicnNpIiwgInI4IiwgInI5IiwgInIxMCIs ICJyMTEiKTsKICNlbmRpZgpAQCAtNTIsNyArNTQsNyBAQCBzdGF0aWMgYWx3YXlzX2lubGluZSB1 bnNpZ25lZCBsb25nIHBmbl90CiAKICNpZmRlZiBIQVZFX0dBU19RVU9URURfRVhQUl9TWU0KICNk ZWZpbmUgU1lNTkFNRShwZnguLi4pICJcIiIgI3BmeCAicGZuMnBkeF8lW3BkeF1fJVtwZm5dXCIi Ci0gICAgYWx0ZXJuYXRpdmVfaW9fMigiY2FsbCAiIFNZTU5BTUUoKSAiOyAiIEFTTV9OT1A0ICJc dCIKKyAgICBhbHRlcm5hdGl2ZV9pb18zKCJjYWxsICIgU1lNTkFNRSgpICI7ICIgQVNNX05PUDQg Ilx0IgogICAgICAgICAgICAgICAgICAgICAgTElOS09OQ0VfUFJPTE9HVUUoU1lNTkFNRSkKICAg ICAgICAgICAgICAgICAgICAgICJtb3YgJVt0bWFza10sICVbcGR4XVxuXHQiCiAgICAgICAgICAg ICAgICAgICAgICAibW92ICVbc2hpZnRdLCAlJWVjeFxuXHQiCkBAIC02NCw2ICs2Niw3IEBAIHN0 YXRpYyBhbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcGZuX3QKICAgICAgICAgICAgICAgICAg ICAgIExJTktPTkNFX0VQSUxPR1VFKFNZTU5BTUUpLAogICAgICAgICAgICAgICAgICAgICAgImNh bGwgIiBTWU1OQU1FKCksIFg4Nl9GRUFUVVJFX0FMV0FZUywKICAgICAgICAgICAgICAgICAgICAg ICJwZXh0ICVbbWFza10sICVbcGZuXSwgJVtwZHhdIiwgWDg2X0ZFQVRVUkVfQk1JMiwKKyAgICAg ICAgICAgICAgICAgICAgICJtb3YgJVtwZm5dLCAlW3BkeF0iLCBYODZfRkVBVFVSRV9QRk5fUERY X0lERU5ULAogICAgICAgICAgICAgICAgICAgICAgQVNNX09VVFBVVDIoW3BkeF0gIj0mciIgKHBk eCksIFtwZm5dICIrciIgKHBmbikpLAogICAgICAgICAgICAgICAgICAgICAgW21hc2tdICJtIiAo cGZuX3JlYWxfbWFzayksCiAgICAgICAgICAgICAgICAgICAgICBbc2hpZnRdICJtIiAocGZuX3Bk eF9ob2xlX3NoaWZ0KSwKQEAgLTcyLDEyICs3NSwxMyBAQCBzdGF0aWMgYWx3YXlzX2lubGluZSB1 bnNpZ25lZCBsb25nIHBmbl90CiAgICAgICAgICAgICAgICAgICAgICA6ICJlY3giKTsKICN1bmRl ZiBTWU1OQU1FCiAjZWxzZQotICAgIGFsdGVybmF0aXZlX2lvXzIoImNhbGwgcGZuMnBkeDsgIiBB U01fTk9QNCwKKyAgICBhbHRlcm5hdGl2ZV9pb18zKCJjYWxsIHBmbjJwZHg7ICIgQVNNX05PUDQs CiAgICAgICAgICAgICAgICAgICAgICAiY2FsbCBwZm4ycGR4IiwgWDg2X0ZFQVRVUkVfQUxXQVlT LAogICAgICAgICAgICAgICAgICAgICAgLyogcGV4dCBwZm5fcmVhbF9tYXNrKCVyaXApLCAlcmRp LCAlcmF4ICovCiAgICAgICAgICAgICAgICAgICAgICAiLmJ5dGUgMHhjNCwgMHhlMiwgMHhjMiwg MHhmNSwgMHgwNVxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAiLmxvbmcgcGZuX3JlYWxfbWFz ayAtIDQgLSAuIiwKICAgICAgICAgICAgICAgICAgICAgIFg4Nl9GRUFUVVJFX0JNSTIsCisgICAg ICAgICAgICAgICAgICAgICAibW92ICUlcmRpLCAlJXJheCIsIFg4Nl9GRUFUVVJFX1BGTl9QRFhf SURFTlQsCiAgICAgICAgICAgICAgICAgICAgICBBU01fT1VUUFVUMigiPWEiIChwZHgpLCAiK0Qi IChwZm4pKSwgIm0iIChwZm5fcmVhbF9tYXNrKQogICAgICAgICAgICAgICAgICAgICAgOiAicmN4 IiwgInJkeCIsICJyc2kiLCAicjgiLCAicjkiLCAicjEwIiwgInIxMSIpOwogI2VuZGlmCi0tLSBh L3hlbi9pbmNsdWRlL2FzbS14ODYveDg2XzY0L3BhZ2UuaAorKysgYi94ZW4vaW5jbHVkZS9hc20t eDg2L3g4Nl82NC9wYWdlLmgKQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGljIGFsd2F5c19pbmxpbmUg cGFkZHJfdCBfX3ZpcnRfdG9fbQogCiAjaWZkZWYgSEFWRV9HQVNfUVVPVEVEX0VYUFJfU1lNCiAj ZGVmaW5lIFNZTU5BTUUocGZ4Li4uKSAiXCIiICNwZnggImRvMm1hXyVbbWFdXyVbb2ZmXVwiIgot ICAgIGFsdGVybmF0aXZlX2lvXzIoImNhbGwgIiBTWU1OQU1FKCkgIjsgIiBBU01fTk9QNCAiXHQi CisgICAgYWx0ZXJuYXRpdmVfaW9fMygiY2FsbCAiIFNZTU5BTUUoKSAiOyAiIEFTTV9OT1A0ICJc dCIKICAgICAgICAgICAgICAgICAgICAgIExJTktPTkNFX1BST0xPR1VFKFNZTU5BTUUpCiAgICAg ICAgICAgICAgICAgICAgICAibW92ICVbc2hpZnRdLCAlJWVjeFxuXHQiCiAgICAgICAgICAgICAg ICAgICAgICAibW92ICVbb2ZmXSwgJVttYV1cblx0IgpAQCAtODcsNiArODcsNyBAQCBzdGF0aWMg YWx3YXlzX2lubGluZSBwYWRkcl90IF9fdmlydF90b19tCiAgICAgICAgICAgICAgICAgICAgICBM SU5LT05DRV9FUElMT0dVRShTWU1OQU1FKSwKICAgICAgICAgICAgICAgICAgICAgICJjYWxsICIg U1lNTkFNRSgpLCBYODZfRkVBVFVSRV9BTFdBWVMsCiAgICAgICAgICAgICAgICAgICAgICAicGRl cCAlW21hc2tdLCAlW29mZl0sICVbbWFdIiwgWDg2X0ZFQVRVUkVfQk1JMiwKKyAgICAgICAgICAg ICAgICAgICAgICJtb3YgJVtvZmZdLCAlW21hXSIsIFg4Nl9GRUFUVVJFX1BGTl9QRFhfSURFTlQs CiAgICAgICAgICAgICAgICAgICAgICBBU01fT1VUUFVUMihbbWFdICI9JnIiIChtYSksIFtvZmZd ICIrciIgKHZhKSksCiAgICAgICAgICAgICAgICAgICAgICBbbWFza10gIm0iIChtYV9yZWFsX21h c2spLAogICAgICAgICAgICAgICAgICAgICAgW3NoaWZ0XSAibSIgKHBmbl9wZHhfaG9sZV9zaGlm dCksCkBAIC05NSwxMiArOTYsMTMgQEAgc3RhdGljIGFsd2F5c19pbmxpbmUgcGFkZHJfdCBfX3Zp cnRfdG9fbQogICAgICAgICAgICAgICAgICAgICAgOiAiZWN4Iik7CiAjdW5kZWYgU1lNTkFNRQog I2Vsc2UKLSAgICBhbHRlcm5hdGl2ZV9pb18yKCJjYWxsIGRvMm1hOyAiIEFTTV9OT1A0LAorICAg IGFsdGVybmF0aXZlX2lvXzMoImNhbGwgZG8ybWE7ICIgQVNNX05PUDQsCiAgICAgICAgICAgICAg ICAgICAgICAiY2FsbCBkbzJtYSIsIFg4Nl9GRUFUVVJFX0FMV0FZUywKICAgICAgICAgICAgICAg ICAgICAgIC8qIHBkZXAgbWFfcmVhbF9tYXNrKCVyaXApLCAlcmRpLCAlcmF4ICovCiAgICAgICAg ICAgICAgICAgICAgICAiLmJ5dGUgMHhjNCwgMHhlMiwgMHhjMywgMHhmNSwgMHgwNVxuXHQiCiAg ICAgICAgICAgICAgICAgICAgICAiLmxvbmcgbWFfcmVhbF9tYXNrIC0gNCAtIC4iLAogICAgICAg ICAgICAgICAgICAgICAgWDg2X0ZFQVRVUkVfQk1JMiwKKyAgICAgICAgICAgICAgICAgICAgICJt b3YgJSVyZGksICUlcmF4IiwgWDg2X0ZFQVRVUkVfUEZOX1BEWF9JREVOVCwKICAgICAgICAgICAg ICAgICAgICAgIEFTTV9PVVRQVVQyKCI9YSIgKG1hKSwgIitEIiAodmEpKSwgIm0iIChtYV9yZWFs X21hc2spCiAgICAgICAgICAgICAgICAgICAgICA6ICJyY3giLCAicmR4IiwgInJzaSIsICJyOCIs ICJyOSIsICJyMTAiLCAicjExIik7CiAjZW5kaWYKQEAgLTExNiw3ICsxMTgsNyBAQCBzdGF0aWMg YWx3YXlzX2lubGluZSB2b2lkICpfX21hZGRyX3RvX3ZpCiAKICNpZmRlZiBIQVZFX0dBU19RVU9U RURfRVhQUl9TWU0KICNkZWZpbmUgU1lNTkFNRShwZnguLi4pICJcIiIgI3BmeCAibWEyZG9fJVtv ZmZdXyVbbWFdXCIiCi0gICAgYWx0ZXJuYXRpdmVfaW9fMigiY2FsbCAiIFNZTU5BTUUoKSAiOyAi IEFTTV9OT1A0ICJcdCIKKyAgICBhbHRlcm5hdGl2ZV9pb18zKCJjYWxsICIgU1lNTkFNRSgpICI7 ICIgQVNNX05PUDQgIlx0IgogICAgICAgICAgICAgICAgICAgICAgTElOS09OQ0VfUFJPTE9HVUUo U1lNTkFNRSkKICAgICAgICAgICAgICAgICAgICAgICJtb3YgJVt0bWFza10sICVbb2ZmXVxuXHQi CiAgICAgICAgICAgICAgICAgICAgICAibW92ICVbc2hpZnRdLCAlJWVjeFxuXHQiCkBAIC0xMjgs NiArMTMwLDcgQEAgc3RhdGljIGFsd2F5c19pbmxpbmUgdm9pZCAqX19tYWRkcl90b192aQogICAg ICAgICAgICAgICAgICAgICAgTElOS09OQ0VfRVBJTE9HVUUoU1lNTkFNRSksCiAgICAgICAgICAg ICAgICAgICAgICAiY2FsbCAiIFNZTU5BTUUoKSwgWDg2X0ZFQVRVUkVfQUxXQVlTLAogICAgICAg ICAgICAgICAgICAgICAgInBleHQgJVttYXNrXSwgJVttYV0sICVbb2ZmXSIsIFg4Nl9GRUFUVVJF X0JNSTIsCisgICAgICAgICAgICAgICAgICAgICAibW92ICVbbWFdLCAlW29mZl0iLCBYODZfRkVB VFVSRV9QRk5fUERYX0lERU5ULAogICAgICAgICAgICAgICAgICAgICAgQVNNX09VVFBVVDIoW29m Zl0gIj0mciIgKG9mZiksIFttYV0gIityIiAobWEpKSwKICAgICAgICAgICAgICAgICAgICAgIFtt YXNrXSAibSIgKG1hX3JlYWxfbWFzayksCiAgICAgICAgICAgICAgICAgICAgICBbc2hpZnRdICJt IiAocGZuX3BkeF9ob2xlX3NoaWZ0KSwKQEAgLTEzNiwxMiArMTM5LDEzIEBAIHN0YXRpYyBhbHdh eXNfaW5saW5lIHZvaWQgKl9fbWFkZHJfdG9fdmkKICAgICAgICAgICAgICAgICAgICAgIDogImVj eCIpOwogI3VuZGVmIFNZTU5BTUUKICNlbHNlCi0gICAgYWx0ZXJuYXRpdmVfaW9fMigiY2FsbCBt YTJkbzsgIiBBU01fTk9QNCwKKyAgICBhbHRlcm5hdGl2ZV9pb18zKCJjYWxsIG1hMmRvOyAiIEFT TV9OT1A0LAogICAgICAgICAgICAgICAgICAgICAgImNhbGwgbWEyZG8iLCBYODZfRkVBVFVSRV9B TFdBWVMsCiAgICAgICAgICAgICAgICAgICAgICAvKiBwZXh0IG1hX3JlYWxfbWFzayglcmlwKSwg JXJkaSwgJXJheCAqLwogICAgICAgICAgICAgICAgICAgICAgIi5ieXRlIDB4YzQsIDB4ZTIsIDB4 YzIsIDB4ZjUsIDB4MDVcblx0IgogICAgICAgICAgICAgICAgICAgICAgIi5sb25nIG1hX3JlYWxf bWFzayAtIDQgLSAuIiwKICAgICAgICAgICAgICAgICAgICAgIFg4Nl9GRUFUVVJFX0JNSTIsCisg ICAgICAgICAgICAgICAgICAgICAibW92ICUlcmRpLCAlJXJheCIsIFg4Nl9GRUFUVVJFX1BGTl9Q RFhfSURFTlQsCiAgICAgICAgICAgICAgICAgICAgICBBU01fT1VUUFVUMigiPWEiIChvZmYpLCAi K0QiIChtYSkpLCAibSIgKG1hX3JlYWxfbWFzaykKICAgICAgICAgICAgICAgICAgICAgIDogInJj eCIsICJyZHgiLCAicnNpIiwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiKTsKICNlbmRpZgoKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwg bWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs