From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH] x86/xpti: avoid copying L4 page table contents when possible Date: Thu, 15 Feb 2018 13:52:03 +0100 Message-ID: <20180215125203.29794-1-jgross@suse.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 1emJ1L-0006yH-3b for xen-devel@lists.xenproject.org; Thu, 15 Feb 2018 12:52:15 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , andrew.cooper3@citrix.com, jbeulich@suse.com, dfaggioli@suse.com List-Id: xen-devel@lists.xenproject.org Rm9yIG1pdGlnYXRpb24gb2YgTWVsdGRvd24gdGhlIGN1cnJlbnQgTDQgcGFnZSB0YWJsZSBpcyBj b3BpZWQgdG8gdGhlCmNwdSBsb2NhbCByb290IHBhZ2UgdGFibGUgZWFjaCB0aW1lIGEgNjQgYml0 IHB2IGd1ZXN0IGlzIGVudGVyZWQuCgpDb3B5aW5nIGNhbiBiZSBhdm9pZGVkIGluIGNhc2VzIHdo ZXJlIHRoZSBndWVzdCBMNCBwYWdlIHRhYmxlIGhhc24ndApiZWVuIG1vZGlmaWVkIHdoaWxlIHJ1 bm5pbmcgdGhlIGh5cGVydmlzb3IsIGUuZy4gd2hlbiBoYW5kbGluZwppbnRlcnJ1cHRzIG9yIGFu eSBoeXBlcmNhbGwgbm90IG1vZGlmeWluZyB0aGUgTDQgcGFnZSB0YWJsZSBvciAlY3IzLgoKU28g YWRkIGEgcGVyLWNwdSBmbGFnIHdoZXRoZXIgdGhlIGNvcHlpbmcgc2hvdWxkIGJlIHBlcmZvcm1l ZCBhbmQgc2V0CnRoYXQgZmxhZyBvbmx5IHdoZW4gbG9hZGluZyBhIG5ldyAlY3IzIG9yIG1vZGlm eWluZyB0aGUgTDQgcGFnZSB0YWJsZS4KVGhpcyBpbmNsdWRlcyBzeW5jaHJvbml6YXRpb24gb2Yg dGhlIGNwdSBsb2NhbCByb290IHBhZ2UgdGFibGUgd2l0aApvdGhlciBjcHVzLCBzbyBhZGQgYSBz cGVjaWFsIHN5bmNocm9uaXphdGlvbiBmbGFnIGZvciB0aGF0IGNhc2UuCgpBIHNpbXBsZSBwZXJm b3JtYW5jZSBjaGVjayAoY29tcGlsaW5nIHRoZSBoeXBlcnZpc29yIHZpYSAibWFrZSAtaiA0IikK aW4gZG9tMCB3aXRoIDQgdmNwdXMgc2hvd3MgYSBzaWduaWZpY2FudCBpbXByb3ZlbWVudDoKCi0g cmVhbCB0aW1lIGRyb3BzIGZyb20gMTEyIHNlY29uZHMgdG8gMTAzIHNlY29uZHMKLSBzeXN0ZW0g dGltZSBkcm9wcyBmcm9tIDE0MiBzZWNvbmRzIHRvIDEzMSBzZWNvbmRzCgpTaWduZWQtb2ZmLWJ5 OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+Ci0tLQpUbyBiZSBhcHBsaWVkIG9uIHRv cCBvZiBKYW4ncyAiTWVsdGRvd24gYmFuZC1haWQgb3ZlcmhlYWQgcmVkdWN0aW9uIgpzZXJpZXMK LS0tCiB4ZW4vYXJjaC94ODYvbW0uYyAgICAgICAgICAgICAgICAgfCAzMiArKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3B2L2RvbWFpbi5jICAgICAgICAgIHwg IDEgKwogeGVuL2FyY2gveDg2L3NtcC5jICAgICAgICAgICAgICAgIHwgIDIgKysKIHhlbi9hcmNo L3g4Ni94ODZfNjQvYXNtLW9mZnNldHMuYyB8ICAxICsKIHhlbi9hcmNoL3g4Ni94ODZfNjQvZW50 cnkuUyAgICAgICB8ICA4ICsrKysrKy0tCiB4ZW4vaW5jbHVkZS9hc20teDg2L2N1cnJlbnQuaCAg ICAgfCAgOCArKysrKysrKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9mbHVzaHRsYi5oICAgIHwgIDIg KysKIDcgZmlsZXMgY2hhbmdlZCwgMzkgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMgYi94ZW4vYXJjaC94ODYvbW0uYwppbmRleCA0 YzkzNDBjYTMwLi41MzQwYTQ5ZjAwIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0uYworKysg Yi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNTEwLDYgKzUxMCw4IEBAIHZvaWQgbWFrZV9jcjMoc3Ry dWN0IHZjcHUgKnYsIG1mbl90IG1mbikKIHZvaWQgd3JpdGVfcHRiYXNlKHN0cnVjdCB2Y3B1ICp2 KQogewogICAgIHdyaXRlX2NyMyh2LT5hcmNoLmNyMyk7CisgICAgLyogU2V0dGluZyBjb3B5X2w0 IHVuY29uZGl0aW9uYWxseSBkb2VzIG5vIGhhcm0uICovCisgICAgZ2V0X2NwdV9pbmZvKCktPmNv cHlfbDQgPSB0cnVlOwogfQogCiAvKgpAQCAtMzcwNCwxOCArMzcwNiwyMiBAQCBsb25nIGRvX21t dV91cGRhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg ICAgICAgcmMgPSBtb2RfbDRfZW50cnkodmEsIGw0ZV9mcm9tX2ludHB0ZShyZXEudmFsKSwgbWZu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPT0gTU1VX1BUX1VQ REFURV9QUkVTRVJWRV9BRCwgdik7Ci0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAg ICAgICAgICAgICAqIE5vIG5lZWQgdG8gc3luYyBpZiBhbGwgdXNlcyBvZiB0aGUgcGFnZSBjYW4g YmUgYWNjb3VudGVkCi0gICAgICAgICAgICAgICAgICAgICAqIHRvIHRoZSBwYWdlIGxvY2sgd2Ug aG9sZCwgaXRzIHBpbm5lZCBzdGF0dXMsIGFuZCB1c2VzIG9uCi0gICAgICAgICAgICAgICAgICAg ICAqIHRoaXMgKHYpQ1BVLgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAg ICAgICAgaWYgKCAhcmMgJiYgIWNwdV9oYXNfbm9feHB0aSAmJgotICAgICAgICAgICAgICAgICAg ICAgICAgICgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfY291bnRfbWFzaykgPgotICAg ICAgICAgICAgICAgICAgICAgICAgICAoMSArICEhKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYg UEdUX3Bpbm5lZCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2V0YWJsZV9nZXRf cGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGUpID09IG1mbikgKwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBhZ2V0YWJsZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGVfdXNlcikg PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZm4pKSkgKQotICAgICAgICAgICAgICAg ICAgICAgICAgc3luY19ndWVzdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmICggIXJj ICYmICFjcHVfaGFzX25vX3hwdGkgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICBnZXRfY3B1X2luZm8oKS0+Y29weV9sNCA9IHRydWU7CisgICAgICAgICAg ICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICogTm8gbmVlZCB0byBz eW5jIGlmIGFsbCB1c2VzIG9mIHRoZSBwYWdlIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAg ICAgICogYWNjb3VudGVkIHRvIHRoZSBwYWdlIGxvY2sgd2UgaG9sZCwgaXRzIHBpbm5lZAorICAg ICAgICAgICAgICAgICAgICAgICAgICogc3RhdHVzLCBhbmQgdXNlcyBvbiB0aGlzICh2KUNQVS4K KyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfY291bnRfbWFzaykgPgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoMSArICEhKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdU X3Bpbm5lZCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2V0YWJsZV9nZXRf cGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGUpID09CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWZuKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZXRhYmxlX2dl dF9wZm4oY3Vyci0+YXJjaC5ndWVzdF90YWJsZV91c2VyKSA9PQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1mbikpICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jX2d1 ZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBi cmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgUEdUX3dyaXRhYmxlX3BhZ2U6CkBAIC0zODMw LDcgKzM4MzYsNyBAQCBsb25nIGRvX21tdV91cGRhdGUoCiAKICAgICAgICAgY3B1bWFza19hbmRu b3QobWFzaywgcHRfb3duZXItPmRpcnR5X2NwdW1hc2ssIGNwdW1hc2tfb2YoY3B1KSk7CiAgICAg ICAgIGlmICggIWNwdW1hc2tfZW1wdHkobWFzaykgKQotICAgICAgICAgICAgZmx1c2hfbWFzayht YXNrLCBGTFVTSF9UTEJfR0xPQkFMKTsKKyAgICAgICAgICAgIGZsdXNoX21hc2sobWFzaywgRkxV U0hfVExCX0dMT0JBTCB8IFhQVElfTDRfVVBEQVRFKTsKICAgICB9CiAKICAgICBwZXJmY19hZGQo bnVtX3BhZ2VfdXBkYXRlcywgaSk7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZG9tYWlu LmMgYi94ZW4vYXJjaC94ODYvcHYvZG9tYWluLmMKaW5kZXggODY4YTIzZmQ3ZS4uNGU2ZDI5ZTc2 ZiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3B2L2RvbWFpbi5jCisrKyBiL3hlbi9hcmNoL3g4 Ni9wdi9kb21haW4uYwpAQCAtMjM4LDYgKzIzOCw3IEBAIHN0YXRpYyB2b2lkIF90b2dnbGVfZ3Vl c3RfcHQoc3RydWN0IHZjcHUgKnYsIGJvb2wgZm9yY2VfY3IzKQogCiAgICAgLyogRG9uJ3QgZmx1 c2ggdXNlciBnbG9iYWwgbWFwcGluZ3MgZnJvbSB0aGUgVExCLiBEb24ndCB0aWNrIFRMQiBjbG9j ay4gKi8KICAgICBhc20gdm9sYXRpbGUgKCAibW92ICUwLCAlJWNyMyIgOiA6ICJyIiAodi0+YXJj aC5jcjMpIDogIm1lbW9yeSIgKTsKKyAgICBnZXRfY3B1X2luZm8oKS0+Y29weV9sNCA9IHRydWU7 CiAKICAgICBpZiAoICEodi0+YXJjaC5mbGFncyAmIFRGX2tlcm5lbF9tb2RlKSApCiAgICAgICAg IHJldHVybjsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9zbXAuYyBiL3hlbi9hcmNoL3g4Ni9z bXAuYwppbmRleCAwMzNkZDA1OTU4Li42ZTNjODkwNGZiIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94 ODYvc21wLmMKKysrIGIveGVuL2FyY2gveDg2L3NtcC5jCkBAIC0yMDcsNiArMjA3LDggQEAgdm9p ZCBpbnZhbGlkYXRlX2ludGVycnVwdChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKICAgICB1 bnNpZ25lZCBpbnQgZmxhZ3MgPSBmbHVzaF9mbGFnczsKICAgICBhY2tfQVBJQ19pcnEoKTsKICAg ICBwZXJmY19pbmNyKGlwaXMpOworICAgIGlmICggZmxhZ3MgJiBYUFRJX0w0X1VQREFURSApCisg ICAgICAgIGdldF9jcHVfaW5mbygpLT5jb3B5X2w0ID0gdHJ1ZTsKICAgICBpZiAoIChmbGFncyAm IEZMVVNIX1ZDUFVfU1RBVEUpICYmIF9fc3luY19sb2NhbF9leGVjc3RhdGUoKSApCiAgICAgICAg IGZsYWdzICY9IH4oRkxVU0hfVExCIHwgRkxVU0hfVExCX0dMT0JBTCk7CiAgICAgaWYgKCBmbGFn cyAmIH4oRkxVU0hfVkNQVV9TVEFURSB8IEZMVVNIX09SREVSX01BU0spICkKZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni94ODZfNjQvYXNtLW9mZnNldHMuYyBiL3hlbi9hcmNoL3g4Ni94ODZfNjQv YXNtLW9mZnNldHMuYwppbmRleCBlOTI1ZTY1ODljLi4zNjJmZDFjYmQ2IDEwMDY0NAotLS0gYS94 ZW4vYXJjaC94ODYveDg2XzY0L2FzbS1vZmZzZXRzLmMKKysrIGIveGVuL2FyY2gveDg2L3g4Nl82 NC9hc20tb2Zmc2V0cy5jCkBAIC0xNDQsNiArMTQ0LDcgQEAgdm9pZCBfX2R1bW15X18odm9pZCkK ICAgICBPRkZTRVQoQ1BVSU5GT19zaGFkb3dfc3BlY19jdHJsLCBzdHJ1Y3QgY3B1X2luZm8sIHNo YWRvd19zcGVjX2N0cmwpOwogICAgIE9GRlNFVChDUFVJTkZPX3VzZV9zaGFkb3dfc3BlY19jdHJs LCBzdHJ1Y3QgY3B1X2luZm8sIHVzZV9zaGFkb3dfc3BlY19jdHJsKTsKICAgICBPRkZTRVQoQ1BV SU5GT19idGlfaXN0X2luZm8sIHN0cnVjdCBjcHVfaW5mbywgYnRpX2lzdF9pbmZvKTsKKyAgICBP RkZTRVQoQ1BVSU5GT19jb3B5X2w0LCBzdHJ1Y3QgY3B1X2luZm8sIGNvcHlfbDQpOwogICAgIERF RklORShDUFVJTkZPX3NpemVvZiwgc2l6ZW9mKHN0cnVjdCBjcHVfaW5mbykpOwogICAgIEJMQU5L KCk7CiAKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni94ODZfNjQvZW50cnkuUyBiL3hlbi9hcmNo L3g4Ni94ODZfNjQvZW50cnkuUwppbmRleCBiOTU1Y2JkNDNkLi43NjRiZjc5MmNiIDEwMDY0NAot LS0gYS94ZW4vYXJjaC94ODYveDg2XzY0L2VudHJ5LlMKKysrIGIveGVuL2FyY2gveDg2L3g4Nl82 NC9lbnRyeS5TCkBAIC00NiwxMCArNDYsMTMgQEAgcmVzdG9yZV9hbGxfZ3Vlc3Q6CiAuTHJhZ19j cjNfc3RhcnQ6CiAgICAgICAgIG1vdiAgIFZDUFVfY3IzKCVyYngpLCAlcjkKICAgICAgICAgR0VU X1NUQUNLX0VORChkeCkKLSAgICAgICAgbW92ICAgU1RBQ0tfQ1BVSU5GT19GSUVMRChwdl9jcjMp KCVyZHgpLCAlcmRpCisgICAgICAgIG1vdiAgIFNUQUNLX0NQVUlORk9fRklFTEQocHZfY3IzKSgl cmR4KSwgJXJheAorICAgICAgICBjbXBiICAkMCwgU1RBQ0tfQ1BVSU5GT19GSUVMRChjb3B5X2w0 KSglcmR4KQorICAgICAgICBqZSAgICAuTHJhZ19jb3B5ZW5kCisgICAgICAgIG1vdmIgICQwLCBT VEFDS19DUFVJTkZPX0ZJRUxEKGNvcHlfbDQpKCVyZHgpCiAgICAgICAgIG1vdmFicyAkUEFERFJf TUFTSyAmIFBBR0VfTUFTSywgJXJzaQogICAgICAgICBtb3ZhYnMgJERJUkVDVE1BUF9WSVJUX1NU QVJULCAlcmN4Ci0gICAgICAgIG1vdiAgICVyZGksICVyYXgKKyAgICAgICAgbW92ICAgJXJheCwg JXJkaQogICAgICAgICBhbmQgICAlcnNpLCAlcmRpCiAgICAgICAgIGFuZCAgICVyOSwgJXJzaQog ICAgICAgICBhZGQgICAlcmN4LCAlcmRpCkBAIC02NSw2ICs2OCw3IEBAIHJlc3RvcmVfYWxsX2d1 ZXN0OgogICAgICAgICBzdWIgICAkKFJPT1RfUEFHRVRBQkxFX0ZJUlNUX1hFTl9TTE9UIC0gXAog ICAgICAgICAgICAgICAgIFJPT1RfUEFHRVRBQkxFX0xBU1RfWEVOX1NMT1QgLSAxKSAqIDgsICVy ZGkKICAgICAgICAgcmVwIG1vdnNxCisuTHJhZ19jb3B5ZW5kOgogICAgICAgICBtb3YgICBTVEFD S19DUFVJTkZPX0ZJRUxEKGNyNCkoJXJkeCksICVyZGkKICAgICAgICAgbW92ICAgJXI5LCBTVEFD S19DUFVJTkZPX0ZJRUxEKHhlbl9jcjMpKCVyZHgpCiAgICAgICAgIG1vdiAgICVyZGksICVyc2kK ZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvY3VycmVudC5oIGIveGVuL2luY2x1ZGUv YXNtLXg4Ni9jdXJyZW50LmgKaW5kZXggNDY3OGEwZmNmNS4uMjM5NTcyMDZjMyAxMDA2NDQKLS0t IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9jdXJyZW50LmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4 Ni9jdXJyZW50LmgKQEAgLTU5LDYgKzU5LDE0IEBAIHN0cnVjdCBjcHVfaW5mbyB7CiAgICAgYm9v bCAgICAgICAgIHVzZV9zaGFkb3dfc3BlY19jdHJsOwogICAgIHVpbnQ4X3QgICAgICBidGlfaXN0 X2luZm87CiAKKyAgICAvKgorICAgICAqIFRoZSBmb2xsb3dpbmcgZmllbGQgY29udHJvbHMgY29w eWluZyBvZiB0aGUgTDQgcGFnZSB0YWJsZSBvZiA2NC1iaXQKKyAgICAgKiBQViBndWVzdHMgdG8g dGhlIHBlci1jcHUgcm9vdCBwYWdlIHRhYmxlIG9uIGVudGVyaW5nIHRoZSBndWVzdCBjb250ZXh0 LgorICAgICAqIElmIHNldCB0aGUgTDQgcGFnZSB0YWJsZSBpcyBiZWluZyBjb3BpZWQgdG8gdGhl IHJvb3QgcGFnZSB0YWJsZSBhbmQKKyAgICAgKiB0aGUgZmllbGQgd2lsbCBiZSByZXNldC4KKyAg ICAgKi8KKyAgICBib29sICAgICAgICAgY29weV9sNDsKKwogICAgIHVuc2lnbmVkIGxvbmcgX19w YWQ7CiAgICAgLyogZ2V0X3N0YWNrX2JvdHRvbSgpIG11c3QgYmUgMTYtYnl0ZSBhbGlnbmVkICov CiB9OwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9mbHVzaHRsYi5oIGIveGVuL2lu Y2x1ZGUvYXNtLXg4Ni9mbHVzaHRsYi5oCmluZGV4IDJjYWRlOWNiZmIuLmJkMDQ5M2ZiYTAgMTAw NjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvZmx1c2h0bGIuaAorKysgYi94ZW4vaW5jbHVk ZS9hc20teDg2L2ZsdXNodGxiLmgKQEAgLTEwMyw2ICsxMDMsOCBAQCB2b2lkIHdyaXRlX2NyMyh1 bnNpZ25lZCBsb25nIGNyMyk7CiAjZGVmaW5lIEZMVVNIX1ZBX1ZBTElEICAgMHg4MDAKICAvKiBG bHVzaCBDUFUgc3RhdGUgKi8KICNkZWZpbmUgRkxVU0hfVkNQVV9TVEFURSAweDEwMDAKKyAvKiBV cGRhdGUgWFBUSSByb290IHBhZ2UgdGFibGUgKi8KKyNkZWZpbmUgWFBUSV9MNF9VUERBVEUgICAw eDIwMDAKIAogLyogRmx1c2ggbG9jYWwgVExCcy9jYWNoZXMuICovCiB1bnNpZ25lZCBpbnQgZmx1 c2hfYXJlYV9sb2NhbChjb25zdCB2b2lkICp2YSwgdW5zaWduZWQgaW50IGZsYWdzKTsKLS0gCjIu MTMuNgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhl bi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBz Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=