From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v2 for-4.10] x86: Avoid corruption on migrate for vcpus using CPUID Faulting Date: Mon, 27 Nov 2017 13:02:11 +0000 Message-ID: <1511787731-2551-1-git-send-email-andrew.cooper3@citrix.com> References: <1511633728-680-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1511633728-680-1-git-send-email-andrew.cooper3@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: Andrew Cooper , Julien Grall , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org WGVuIDQuOCBhbmQgbGF0ZXIgdmlydHVhbGlzZXMgQ1BVSUQgRmF1bHRpbmcgc3VwcG9ydCBmb3Ig Z3Vlc3RzLiAgSG93ZXZlciwgdGhlCnZhbHVlIG9mIE1TUl9NSVNDX0ZFQVRVUkVTX0VOQUJMRVMg aXMgb21pdHRlZCBmcm9tIHRoZSB2Y3B1IHN0YXRlLCBtZWFuaW5nCnRoYXQgdGhlIGN1cnJlbnQg Y3B1aWQgZmF1bHRpbmcgc2V0dGluZyBpcyBsb3N0IG9uIG1pZ3JhdGUvc3VzcGVuZC9yZXN1bWUu CgpUbyBtb3ZlIHRoaXMgTVNSLCB1c2UgdGhlIG5ldyBndWVzdF97cmQsd3J9bXNyKCkgaW5mcmFz dHJ1Y3R1cmUuICBUaGlzIGF2b2lkcwpkdXBsaWNhdGluZyBvciBvcGVuY29kaW5nIHRoZSBmZWF0 dXJlIGNoZWNrIGFuZCB2YWx1ZSBsb2dpYywgYXMgd2VsbCBhcwphYnN0cmFjdGluZyBhd2F5IHRo ZSBpbnRlcm5hbCB2YWx1ZSByZXByZXNlbnRhdGlvbi4gIE9uZSBzbWFsbCBhZGp1c3RtZW50IHRv Cmd1ZXN0X3dybXNyKCkgaXMgcmVxdWlyZWQgdG8gY29wZSB3aXRoIGJlaW5nIGNhbGxlZCBpbiB0 b29sc3RhY2sgY29udGV4dC4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5j b29wZXIzQGNpdHJpeC5jb20+Ci0tLQpDQzogSmFuIEJldWxpY2ggPEpCZXVsaWNoQHN1c2UuY29t PgpDQzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KQ0M6IEp1bGllbiBHcmFsbCA8anVs aWVuLmdyYWxsQGFybS5jb20+Cgp2MjoKICogTW92ZSB0aGUgbXNyc1tdIGFycmF5IHRvIGFuIG91 dGVyIHNjb3BlIGFuZCBkZXJpdmUgdGhlIG51bWJlciB0byBzZW5kIHdpdGgKICAgQVJSQVlfU0la RSgpCiAqIERvbid0IGNyZWF0ZSBhIHNoYWRvd2VkIGogdmFyaWFibGUgaW4gYXJjaF9kb19kb21j dGwoKQoKVGhpcyBuZWVkcyBiYWNrcG9ydGluZyB0byA0LjggYW5kIGxhdGVyLCBhbmQgdGhlcmVm b3JlIHNob3VsZCBiZSBjb25zaWRlcmVkCmZvciA0LjEwIGF0IHRoaXMgcG9pbnQuCi0tLQogeGVu L2FyY2gveDg2L2RvbWN0bC5jICAgICB8IDQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tCiB4ZW4vYXJjaC94ODYvaHZtL2h2bS5jICAgIHwgNDEgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiB4ZW4vYXJjaC94ODYvbXNyLmMgICAg ICAgIHwgIDMgKystCiB4ZW4vaW5jbHVkZS9hc20teDg2L21zci5oIHwgIDMgKysrCiA0IGZpbGVz IGNoYW5nZWQsIDkxIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv eGVuL2FyY2gveDg2L2RvbWN0bC5jIGIveGVuL2FyY2gveDg2L2RvbWN0bC5jCmluZGV4IDgwYjRk ZjkuLjFkZGQzZDAgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9kb21jdGwuYworKysgYi94ZW4v YXJjaC94ODYvZG9tY3RsLmMKQEAgLTEyODYsNyArMTI4NiwxMCBAQCBsb25nIGFyY2hfZG9fZG9t Y3RsKAogICAgICAgICBzdHJ1Y3QgeGVuX2RvbWN0bF92Y3B1X21zcnMgKnZtc3JzID0gJmRvbWN0 bC0+dS52Y3B1X21zcnM7CiAgICAgICAgIHN0cnVjdCB4ZW5fZG9tY3RsX3ZjcHVfbXNyIG1zcjsK ICAgICAgICAgc3RydWN0IHZjcHUgKnY7Ci0gICAgICAgIHVpbnQzMl90IG5yX21zcnMgPSAwOwor ICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgbXNyc190b19zZW5kW10gPSB7CisgICAgICAg ICAgICBNU1JfSU5URUxfTUlTQ19GRUFUVVJFU19FTkFCTEVTLAorICAgICAgICB9OworICAgICAg ICB1aW50MzJfdCBucl9tc3JzID0gQVJSQVlfU0laRShtc3JzX3RvX3NlbmQpOwogCiAgICAgICAg IHJldCA9IC1FU1JDSDsKICAgICAgICAgaWYgKCAodm1zcnMtPnZjcHUgPj0gZC0+bWF4X3ZjcHVz KSB8fApAQCAtMTMxMSwxNCArMTMxNCw0OSBAQCBsb25nIGFyY2hfZG9fZG9tY3RsKAogICAgICAg ICAgICAgICAgIHZtc3JzLT5tc3JfY291bnQgPSBucl9tc3JzOwogICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBqOworCiAgICAgICAg ICAgICAgICAgaSA9IDA7CiAKICAgICAgICAgICAgICAgICB2Y3B1X3BhdXNlKHYpOwogCi0gICAg ICAgICAgICAgICAgaWYgKCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfREJFWFQpICkKKyAgICAg ICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IEFSUkFZX1NJWkUobXNyc190b19zZW5kKTsgKytq ICkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBq OworICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB2YWw7CisgICAgICAgICAgICAgICAgICAg IGludCByYyA9IGd1ZXN0X3JkbXNyKHYsIG1zcnNfdG9fc2VuZFtqXSwgJnZhbCk7CisKKyAgICAg ICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogSXQgaXMgdGhlIHByb2dy YW1tZXJzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgICAgICAgICAg ICAqIG1zcnNbXSBjb250YWluIGdlbmVyYWxseS1yZWFkL3dyaXRlIE1TUnMuCisgICAgICAgICAg ICAgICAgICAgICAqIFg4NkVNVUxfRVhDRVBUSU9OIGhlcmUgaW1wbGllcyBhIG1pc3NpbmcgZmVh dHVyZSwgYW5kCisgICAgICAgICAgICAgICAgICAgICAqIHRoYXQgdGhlIGd1ZXN0IGRvZXNuJ3Qg aGF2ZSBhY2Nlc3MgdG8gdGhlIE1TUi4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgICAgIGlmICggcmMgPT0gWDg2RU1VTF9FWENFUFRJT04gKQorICAgICAgICAgICAg ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCByYyAhPSBY ODZFTVVMX09LQVkgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9 IC1FTlhJTzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhdmFsICkKKyAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOyAvKiBTa2lwIGVtcHR5IE1TUnMuICovCiAKKyAgICAgICAgICAg ICAgICAgICAgaWYgKCBpIDwgdm1zcnMtPm1zcl9jb3VudCAmJiAhcmV0ICkKKyAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbXNyLmluZGV4ID0gbXNyc190b19z ZW5kW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgbXNyLnJlc2VydmVkID0gMDsKKyAgICAg ICAgICAgICAgICAgICAgICAgIG1zci52YWx1ZSA9IHZhbDsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICggY29weV90b19ndWVzdF9vZmZzZXQodm1zcnMtPm1zcnMsIGksICZtc3IsIDEpICkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgICBpZiAoIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkgKQor ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCB2LT5hcmNoLnB2X3Zj cHUuZHJfbWFza1swXSApCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICggaSA8IHZtc3JzLT5tc3JfY291bnQgJiYgIXJldCApCkBAIC0xMzc1LDYgKzE0 MTMsMTEgQEAgbG9uZyBhcmNoX2RvX2RvbWN0bCgKIAogICAgICAgICAgICAgICAgIHN3aXRjaCAo IG1zci5pbmRleCApCiAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTVNS X0lOVEVMX01JU0NfRkVBVFVSRVNfRU5BQkxFUzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBn dWVzdF93cm1zcih2LCBtc3IuaW5kZXgsIG1zci52YWx1ZSkgIT0gWDg2RU1VTF9PS0FZICkKKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKKwogICAgICAgICAgICAgICAgIGNhc2UgTVNSX0FNRDY0X0RSMF9BRERSRVNTX01BU0s6CiAg ICAgICAgICAgICAgICAgICAgIGlmICggIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkg fHwKICAgICAgICAgICAgICAgICAgICAgICAgICAobXNyLnZhbHVlID4+IDMyKSApCmRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwppbmRl eCBjNzY1YTVlLi5lYzNkYzQ4IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCisr KyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKQEAgLTEzMjIsNyArMTMyMiwxMCBAQCBzdGF0aWMg aW50IGh2bV9sb2FkX2NwdV94c2F2ZV9zdGF0ZXMoc3RydWN0IGRvbWFpbiAqZCwgaHZtX2RvbWFp bl9jb250ZXh0X3QgKmgpCiB9CiAKICNkZWZpbmUgSFZNX0NQVV9NU1JfU0laRShjbnQpIG9mZnNl dG9mKHN0cnVjdCBodm1fbXNyLCBtc3JbY250XSkKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFk X21vc3RseSBtc3JfY291bnRfbWF4Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IG1zcnNfdG9fc2Vu ZFtdID0geworICAgIE1TUl9JTlRFTF9NSVNDX0ZFQVRVUkVTX0VOQUJMRVMsCit9Oworc3RhdGlj IHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IG1zcl9jb3VudF9tYXggPSBBUlJBWV9TSVpFKG1z cnNfdG9fc2VuZCk7CiAKIHN0YXRpYyBpbnQgaHZtX3NhdmVfY3B1X21zcnMoc3RydWN0IGRvbWFp biAqZCwgaHZtX2RvbWFpbl9jb250ZXh0X3QgKmgpCiB7CkBAIC0xMzQwLDYgKzEzNDMsMzMgQEAg c3RhdGljIGludCBodm1fc2F2ZV9jcHVfbXNycyhzdHJ1Y3QgZG9tYWluICpkLCBodm1fZG9tYWlu X2NvbnRleHRfdCAqaCkKICAgICAgICAgY3R4dCA9IChzdHJ1Y3QgaHZtX21zciAqKSZoLT5kYXRh W2gtPmN1cl07CiAgICAgICAgIGN0eHQtPmNvdW50ID0gMDsKIAorICAgICAgICBmb3IgKCBpID0g MDsgaSA8IEFSUkFZX1NJWkUobXNyc190b19zZW5kKTsgKytpICkKKyAgICAgICAgeworICAgICAg ICAgICAgdWludDY0X3QgdmFsOworICAgICAgICAgICAgaW50IHJjID0gZ3Vlc3RfcmRtc3Iodiwg bXNyc190b19zZW5kW2ldLCAmdmFsKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAq IEl0IGlzIHRoZSBwcm9ncmFtbWVycyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBtc3Jz W10KKyAgICAgICAgICAgICAqIGNvbnRhaW4gZ2VuZXJhbGx5LXJlYWQvd3JpdGUgTVNScy4gIFg4 NkVNVUxfRVhDRVBUSU9OIGhlcmUKKyAgICAgICAgICAgICAqIGltcGxpZXMgYSBtaXNzaW5nIGZl YXR1cmUsIGFuZCB0aGF0IHRoZSBndWVzdCBkb2Vzbid0IGhhdmUKKyAgICAgICAgICAgICAqIGFj Y2VzcyB0byB0aGUgTVNSLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIHJjID09 IFg4NkVNVUxfRVhDRVBUSU9OICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg ICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5Y SU87CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggIXZhbCApCisgICAgICAgICAg ICAgICAgY29udGludWU7IC8qIFNraXAgZW1wdHkgTVNScy4gKi8KKworICAgICAgICAgICAgY3R4 dC0+bXNyW2N0eHQtPmNvdW50XS5pbmRleCA9IG1zcnNfdG9fc2VuZFtpXTsKKyAgICAgICAgICAg IGN0eHQtPm1zcltjdHh0LT5jb3VudCsrXS52YWwgPSB2YWw7CisgICAgICAgIH0KKwogICAgICAg ICBpZiAoIGh2bV9mdW5jcy5zYXZlX21zciApCiAgICAgICAgICAgICBodm1fZnVuY3Muc2F2ZV9t c3IodiwgY3R4dCk7CiAKQEAgLTE0MjYsNiArMTQ1NiwxNSBAQCBzdGF0aWMgaW50IGh2bV9sb2Fk X2NwdV9tc3JzKHN0cnVjdCBkb21haW4gKmQsIGh2bV9kb21haW5fY29udGV4dF90ICpoKQogICAg IHsKICAgICAgICAgc3dpdGNoICggY3R4dC0+bXNyW2ldLmluZGV4ICkKICAgICAgICAgeworICAg ICAgICAgICAgaW50IHJjOworCisgICAgICAgIGNhc2UgTVNSX0lOVEVMX01JU0NfRkVBVFVSRVNf RU5BQkxFUzoKKyAgICAgICAgICAgIHJjID0gZ3Vlc3Rfd3Jtc3IodiwgY3R4dC0+bXNyW2ldLmlu ZGV4LCBjdHh0LT5tc3JbaV0udmFsKTsKKworICAgICAgICAgICAgaWYgKCByYyAhPSBYODZFTVVM X09LQVkgKQorICAgICAgICAgICAgICAgIGVyciA9IC1FTlhJTzsKKyAgICAgICAgICAgIGJyZWFr OworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoICFjdHh0LT5tc3JbaV0uX3Jz dmQgKQogICAgICAgICAgICAgICAgIGVyciA9IC1FTlhJTzsKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9tc3IuYyBiL3hlbi9hcmNoL3g4Ni9tc3IuYwppbmRleCBiYWJhNDRmLi4zMTk4M2VkIDEw MDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbXNyLmMKKysrIGIveGVuL2FyY2gveDg2L21zci5jCkBA IC0xNTAsNiArMTUwLDcgQEAgaW50IGd1ZXN0X3JkbXNyKGNvbnN0IHN0cnVjdCB2Y3B1ICp2LCB1 aW50MzJfdCBtc3IsIHVpbnQ2NF90ICp2YWwpCiAKIGludCBndWVzdF93cm1zcihzdHJ1Y3QgdmNw dSAqdiwgdWludDMyX3QgbXNyLCB1aW50NjRfdCB2YWwpCiB7CisgICAgY29uc3Qgc3RydWN0IHZj cHUgKmN1cnIgPSBjdXJyZW50OwogICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47CiAg ICAgc3RydWN0IG1zcl9kb21haW5fcG9saWN5ICpkcCA9IGQtPmFyY2gubXNyOwogICAgIHN0cnVj dCBtc3JfdmNwdV9wb2xpY3kgKnZwID0gdi0+YXJjaC5tc3I7CkBAIC0xNzYsNyArMTc3LDcgQEAg aW50IGd1ZXN0X3dybXNyKHN0cnVjdCB2Y3B1ICp2LCB1aW50MzJfdCBtc3IsIHVpbnQ2NF90IHZh bCkKICAgICAgICAgdnAtPm1pc2NfZmVhdHVyZXNfZW5hYmxlcy5jcHVpZF9mYXVsdGluZyA9CiAg ICAgICAgICAgICB2YWwgJiBNU1JfTUlTQ19GRUFUVVJFU19DUFVJRF9GQVVMVElORzsKIAotICAg ICAgICBpZiAoIGlzX2h2bV9kb21haW4oZCkgJiYgY3B1X2hhc19jcHVpZF9mYXVsdGluZyAmJgor ICAgICAgICBpZiAoIHYgPT0gY3VyciAmJiBpc19odm1fZG9tYWluKGQpICYmIGNwdV9oYXNfY3B1 aWRfZmF1bHRpbmcgJiYKICAgICAgICAgICAgICAob2xkX2NwdWlkX2ZhdWx0aW5nIF4gdnAtPm1p c2NfZmVhdHVyZXNfZW5hYmxlcy5jcHVpZF9mYXVsdGluZykgKQogICAgICAgICAgICAgY3R4dF9z d2l0Y2hfbGV2ZWxsaW5nKHYpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS14ODYvbXNyLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L21zci5oCmluZGV4IDc1MWZh MjUuLjQxNzMyYTQgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvbXNyLmgKKysrIGIv eGVuL2luY2x1ZGUvYXNtLXg4Ni9tc3IuaApAQCAtMjMxLDYgKzIzMSw5IEBAIGludCBpbml0X3Zj cHVfbXNyX3BvbGljeShzdHJ1Y3QgdmNwdSAqdik7CiAgKiBub3QgKHlldCkgaGFuZGxlZCBieSBp dCBhbmQgbXVzdCBiZSBwcm9jZXNzZWQgYnkgbGVnYWN5IGhhbmRsZXJzLiBTdWNoCiAgKiBiZWhh dmlvdXIgaXMgbmVlZGVkIGZvciB0cmFuc2l0aW9uIHBlcmlvZCB1bnRpbCBhbGwgcmQvd3Jtc3Ig YXJlIGhhbmRsZWQKICAqIGJ5IHRoZSBuZXcgTVNSIGluZnJhc3RydWN0dXJlLgorICoKKyAqIFRo ZXNlIGZ1bmN0aW9ucyBhcmUgYWxzbyB1c2VkIGJ5IHRoZSBtaWdyYXRpb24gbG9naWMsIHNvIG5l ZWQgdG8gY29wZSB3aXRoCisgKiBiZWluZyB1c2VkIG91dHNpZGUgb2YgdidzIGNvbnRleHQuCiAg Ki8KIGludCBndWVzdF9yZG1zcihjb25zdCBzdHJ1Y3QgdmNwdSAqdiwgdWludDMyX3QgbXNyLCB1 aW50NjRfdCAqdmFsKTsKIGludCBndWVzdF93cm1zcihzdHJ1Y3QgdmNwdSAqdiwgdWludDMyX3Qg bXNyLCB1aW50NjRfdCB2YWwpOwotLSAKMi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v bGlzdGluZm8veGVuLWRldmVs