From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v5 07/25] xen/arm: don't add duplicate boot modules, introduce domU flag Date: Mon, 22 Oct 2018 19:02:46 -0700 Message-ID: <1540260184-11294-7-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: julien.grall@arm.com Cc: Stefano Stabellini , Achin.Gupta@arm.com, sstabellini@kernel.org, andrii_anisov@epam.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org RG9uJ3QgYWRkIGR1cGxpY2F0ZSBib290IG1vZHVsZXMgKHNhbWUga2luZCBhbmQgc2FtZSBzdGFy dCBhZGRyZXNzKSwKdGhleSBhcmUgZnJlZWQgbGF0ZXIsIHdlIGRvbid0IHdhbnQgdG8gaW50cm9k dWNlIGRvdWJsZS1mcmVlIGVycm9ycy4KCkludHJvZHVjZSBhIGRvbVUgZmxhZyBpbiBzdHJ1Y3Qg Ym9vdG1vZHVsZSBhbmQgc3RydWN0IGJvb3RjbWRsaW5lLiBTZXQKaXQgZm9yIGtlcm5lbHMgYW5k IHJhbWRpc2tzIG9mICJ4ZW4sZG9tYWluIiBub2RlcyB0byBhdm9pZCBnZXR0aW5nCmNvbmZ1c2Vk IGluIGtlcm5lbF9wcm9iZSwgd2hlcmUgd2UgdHJ5IHRvIGd1ZXNzIHdoaWNoIGlzIHRoZSBkb20w IGtlcm5lbAphbmQgaW5pdHJkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBhbGwgdmVyc2lvbnMgb2Yg dGhlIG11bHRpYm9vdCBzcGVjLgoKYm9vdF9tb2R1bGVfZmluZF9ieV9raW5kIGFuZCBib290X2Nt ZGxpbmVfZmluZF9ieV9raW5kIGF1dG9tYXRpY2FsbHkKY2hlY2sgZm9yICFkb21VIGVudHJpZXMg KHRoZXkgYXJlIG9ubHkgdXNlZCBmb3Igbm9uLWRvbVUgbW9kdWxlcykuCgpTaWduZWQtb2ZmLWJ5 OiBTdGVmYW5vIFN0YWJlbGxpbmkgPHN0ZWZhbm9zQHhpbGlueC5jb20+CgotLS0KQ2hhbmdlcyBp biB2NToKLSBpbXByb3ZlIGNvbW1pdCBtZXNzYWdlCi0gYWRkIGluLWNvZGUgY29tbWVudHMKCkNo YW5nZXMgaW4gdjQ6Ci0gdXNlIHVuc2lnbmVkIGludAotIGJldHRlciBjb21taXQgbWVzc2FnZQot IGludHJvZHVjZSBkb21VIGZsYWcgYW5kIHVzYWdlCgpDaGFuZ2VzIGluIHYyOgotIG5ldyBwYXRj aAotLS0KIHhlbi9hcmNoL2FybS9ib290ZmR0LmMgICAgICB8IDExICsrKysrKystLS0tCiB4ZW4v YXJjaC9hcm0vc2V0dXAuYyAgICAgICAgfCAzMCArKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0KIHhlbi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaCB8IDEyICsrKysrKysrKystLQogMyBmaWxl cyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS94ZW4vYXJjaC9hcm0vYm9vdGZkdC5jIGIveGVuL2FyY2gvYXJtL2Jvb3RmZHQuYwppbmRleCBj YjZmNzdkLi5jMzI1YjZlIDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vYm9vdGZkdC5jCisrKyBi L3hlbi9hcmNoL2FybS9ib290ZmR0LmMKQEAgLTE3NSw2ICsxNzUsNyBAQCBzdGF0aWMgdm9pZCBf X2luaXQgcHJvY2Vzc19tdWx0aWJvb3Rfbm9kZShjb25zdCB2b2lkICpmZHQsIGludCBub2RlLAog ICAgIGludCBsZW4gPSBzaXplb2YoIi9jaG9zZW4iKTsKICAgICBjaGFyIHBhdGhbOF07IC8qIHNp emVvZiAiL2Nob3NlbiIgKi8KICAgICBpbnQgcGFyZW50X25vZGUsIHJldDsKKyAgICBib29sIGRv bVU7CiAKICAgICBwYXJlbnRfbm9kZSA9IGZkdF9wYXJlbnRfb2Zmc2V0KGZkdCwgbm9kZSk7CiAg ICAgQVNTRVJUKHBhcmVudF9ub2RlID49IDApOwpAQCAtMjI5LDEyICsyMzAsMTQgQEAgc3RhdGlj IHZvaWQgX19pbml0IHByb2Nlc3NfbXVsdGlib290X25vZGUoY29uc3Qgdm9pZCAqZmR0LCBpbnQg bm9kZSwKICAgICAgICAgICAgIGtpbmQgPSBCT09UTU9EX1hTTTsKICAgICB9CiAKLSAgICBhZGRf Ym9vdF9tb2R1bGUoa2luZCwgc3RhcnQsIHNpemUpOworICAgIGRvbVUgPSBmZHRfbm9kZV9jaGVj a19jb21wYXRpYmxlKGZkdCwgcGFyZW50X25vZGUsICJ4ZW4sZG9tYWluIikgPT0gMDsKKyAgICBh ZGRfYm9vdF9tb2R1bGUoa2luZCwgc3RhcnQsIHNpemUsIGRvbVUpOwogCiAgICAgcHJvcCA9IGZk dF9nZXRfcHJvcGVydHkoZmR0LCBub2RlLCAiYm9vdGFyZ3MiLCAmbGVuKTsKICAgICBpZiAoICFw cm9wICkKICAgICAgICAgcmV0dXJuOwotICAgIGFkZF9ib290X2NtZGxpbmUoZmR0X2dldF9uYW1l KGZkdCwgcGFyZW50X25vZGUsICZsZW4pLCBwcm9wLT5kYXRhLCBraW5kKTsKKyAgICBhZGRfYm9v dF9jbWRsaW5lKGZkdF9nZXRfbmFtZShmZHQsIHBhcmVudF9ub2RlLCAmbGVuKSwgcHJvcC0+ZGF0 YSwKKyAgICAgICAgICAgICAgICAgICAgIGtpbmQsIGRvbVUpOwogfQogCiBzdGF0aWMgdm9pZCBf X2luaXQgcHJvY2Vzc19jaG9zZW5fbm9kZShjb25zdCB2b2lkICpmZHQsIGludCBub2RlLApAQCAt MjgwLDcgKzI4Myw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwcm9jZXNzX2Nob3Nlbl9ub2RlKGNv bnN0IHZvaWQgKmZkdCwgaW50IG5vZGUsCiAKICAgICBwcmludGsoIkluaXRyZCAlIlBSSXBhZGRy Ii0lIlBSSXBhZGRyIlxuIiwgc3RhcnQsIGVuZCk7CiAKLSAgICBhZGRfYm9vdF9tb2R1bGUoQk9P VE1PRF9SQU1ESVNLLCBzdGFydCwgZW5kLXN0YXJ0KTsKKyAgICBhZGRfYm9vdF9tb2R1bGUoQk9P VE1PRF9SQU1ESVNLLCBzdGFydCwgZW5kLXN0YXJ0LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbnQg X19pbml0IGVhcmx5X3NjYW5fbm9kZShjb25zdCB2b2lkICpmZHQsCkBAIC0zNTEsNyArMzU0LDcg QEAgc2l6ZV90IF9faW5pdCBib290X2ZkdF9pbmZvKGNvbnN0IHZvaWQgKmZkdCwgcGFkZHJfdCBw YWRkcikKICAgICBpZiAoIHJldCA8IDAgKQogICAgICAgICBwYW5pYygiTm8gdmFsaWQgZGV2aWNl IHRyZWVcbiIpOwogCi0gICAgYWRkX2Jvb3RfbW9kdWxlKEJPT1RNT0RfRkRULCBwYWRkciwgZmR0 X3RvdGFsc2l6ZShmZHQpKTsKKyAgICBhZGRfYm9vdF9tb2R1bGUoQk9PVE1PRF9GRFQsIHBhZGRy LCBmZHRfdG90YWxzaXplKGZkdCksIGZhbHNlKTsKIAogICAgIGRldmljZV90cmVlX2Zvcl9lYWNo X25vZGUoKHZvaWQgKilmZHQsIGVhcmx5X3NjYW5fbm9kZSwgTlVMTCk7CiAgICAgZWFybHlfcHJp bnRfaW5mbygpOwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3NldHVwLmMgYi94ZW4vYXJjaC9h cm0vc2V0dXAuYwppbmRleCAyMDk4NTkxLi43MmIxMmY5IDEwMDY0NAotLS0gYS94ZW4vYXJjaC9h cm0vc2V0dXAuYworKysgYi94ZW4vYXJjaC9hcm0vc2V0dXAuYwpAQCAtMjAxLDEwICsyMDEsMTIg QEAgdm9pZCBfX2luaXQgZHRfdW5yZXNlcnZlZF9yZWdpb25zKHBhZGRyX3QgcywgcGFkZHJfdCBl LAogfQogCiBzdHJ1Y3QgYm9vdG1vZHVsZSBfX2luaXQgKmFkZF9ib290X21vZHVsZShib290bW9k dWxlX2tpbmQga2luZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3Qgc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3Qgc2l6ZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZG9tVSkKIHsKICAgICBzdHJ1Y3Qg Ym9vdG1vZHVsZXMgKm1vZHMgPSAmYm9vdGluZm8ubW9kdWxlczsKICAgICBzdHJ1Y3QgYm9vdG1v ZHVsZSAqbW9kOworICAgIHVuc2lnbmVkIGludCBpOwogCiAgICAgaWYgKCBtb2RzLT5ucl9tb2Rz ID09IE1BWF9NT0RVTEVTICkKICAgICB7CkBAIC0yMTIsMTUgKzIxNCwyOSBAQCBzdHJ1Y3QgYm9v dG1vZHVsZSBfX2luaXQgKmFkZF9ib290X21vZHVsZShib290bW9kdWxlX2tpbmQga2luZCwKICAg ICAgICAgICAgICAgIGJvb3RfbW9kdWxlX2tpbmRfYXNfc3RyaW5nKGtpbmQpLCBzdGFydCwgc3Rh cnQgKyBzaXplKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIGZvciAoIGkgPSAw IDsgaSA8IG1vZHMtPm5yX21vZHMgOyBpKysgKQorICAgIHsKKyAgICAgICAgbW9kID0gJm1vZHMt Pm1vZHVsZVtpXTsKKyAgICAgICAgaWYgKCBtb2QtPmtpbmQgPT0ga2luZCAmJiBtb2QtPnN0YXJ0 ID09IHN0YXJ0ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAhZG9tVSApCisgICAgICAg ICAgICAgICAgbW9kLT5kb21VID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbW9kOworICAg ICAgICB9CisgICAgfQogCiAgICAgbW9kID0gJm1vZHMtPm1vZHVsZVttb2RzLT5ucl9tb2RzKytd OwogICAgIG1vZC0+a2luZCA9IGtpbmQ7CiAgICAgbW9kLT5zdGFydCA9IHN0YXJ0OwogICAgIG1v ZC0+c2l6ZSA9IHNpemU7CisgICAgbW9kLT5kb21VID0gZG9tVTsKIAogICAgIHJldHVybiBtb2Q7 CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCB0byBmaW5kIGRvbTAgbW9k dWxlcywgc28gY2hlY2sgZm9yICFtb2QtPmRvbVUKKyAqLwogc3RydWN0IGJvb3Rtb2R1bGUgKiBf X2luaXQgYm9vdF9tb2R1bGVfZmluZF9ieV9raW5kKGJvb3Rtb2R1bGVfa2luZCBraW5kKQogewog ICAgIHN0cnVjdCBib290bW9kdWxlcyAqbW9kcyA9ICZib290aW5mby5tb2R1bGVzOwpAQCAtMjI5 LDE0ICsyNDUsMTQgQEAgc3RydWN0IGJvb3Rtb2R1bGUgKiBfX2luaXQgYm9vdF9tb2R1bGVfZmlu ZF9ieV9raW5kKGJvb3Rtb2R1bGVfa2luZCBraW5kKQogICAgIGZvciAoaSA9IDAgOyBpIDwgbW9k cy0+bnJfbW9kcyA7IGkrKyApCiAgICAgewogICAgICAgICBtb2QgPSAmbW9kcy0+bW9kdWxlW2ld OwotICAgICAgICBpZiAoIG1vZC0+a2luZCA9PSBraW5kICkKKyAgICAgICAgaWYgKCBtb2QtPmtp bmQgPT0ga2luZCAmJiAhbW9kLT5kb21VICkKICAgICAgICAgICAgIHJldHVybiBtb2Q7CiAgICAg fQogICAgIHJldHVybiBOVUxMOwogfQogCiB2b2lkIF9faW5pdCBhZGRfYm9vdF9jbWRsaW5lKGNv bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmNtZGxpbmUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb3Rtb2R1bGVfa2luZCBraW5kKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib290bW9kdWxlX2tpbmQga2luZCwgYm9vbCBkb21VKQogewogICAgIHN0cnVjdCBib290 Y21kbGluZXMgKmNtZHMgPSAmYm9vdGluZm8uY21kbGluZXM7CiAgICAgc3RydWN0IGJvb3RjbWRs aW5lICpjbWQ7CkBAIC0yNDksNiArMjY1LDcgQEAgdm9pZCBfX2luaXQgYWRkX2Jvb3RfY21kbGlu ZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpjbWRsaW5lLAogCiAgICAgY21kID0gJmNt ZHMtPmNtZGxpbmVbY21kcy0+bnJfbW9kcysrXTsKICAgICBjbWQtPmtpbmQgPSBraW5kOworICAg IGNtZC0+ZG9tVSA9IGRvbVU7CiAKICAgICBBU1NFUlQoc3RybGVuKG5hbWUpIDw9IERUX01BWF9O QU1FKTsKICAgICBzYWZlX3N0cmNweShjbWQtPmR0X25hbWUsIG5hbWUpOwpAQCAtMjU4LDYgKzI3 NSw5IEBAIHZvaWQgX19pbml0IGFkZF9ib290X2NtZGxpbmUoY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqY21kbGluZSwKICAgICBzYWZlX3N0cmNweShjbWQtPmNtZGxpbmUsIGNtZGxpbmUp OwogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgdG8gZmluZCBkb20wIG1v ZHVsZXMsIHNvIGNoZWNrIGZvciAhbW9kLT5kb21VCisgKi8KIHN0cnVjdCBib290Y21kbGluZSAq IF9faW5pdCBib290X2NtZGxpbmVfZmluZF9ieV9raW5kKGJvb3Rtb2R1bGVfa2luZCBraW5kKQog ewogICAgIHN0cnVjdCBib290Y21kbGluZXMgKmNtZHMgPSAmYm9vdGluZm8uY21kbGluZXM7CkBA IC0yNjcsNyArMjg3LDcgQEAgc3RydWN0IGJvb3RjbWRsaW5lICogX19pbml0IGJvb3RfY21kbGlu ZV9maW5kX2J5X2tpbmQoYm9vdG1vZHVsZV9raW5kIGtpbmQpCiAgICAgZm9yICggaSA9IDAgOyBp IDwgY21kcy0+bnJfbW9kcyA7IGkrKyApCiAgICAgewogICAgICAgICBjbWQgPSAmY21kcy0+Y21k bGluZVtpXTsKLSAgICAgICAgaWYgKCBjbWQtPmtpbmQgPT0ga2luZCApCisgICAgICAgIGlmICgg Y21kLT5raW5kID09IGtpbmQgJiYgIWNtZC0+ZG9tVSApCiAgICAgICAgICAgICByZXR1cm4gY21k OwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKQEAgLTc2MSw3ICs3ODEsNyBAQCB2b2lkIF9faW5p dCBzdGFydF94ZW4odW5zaWduZWQgbG9uZyBib290X3BoeXNfb2Zmc2V0LAogICAgIC8qIFJlZ2lz dGVyIFhlbidzIGxvYWQgYWRkcmVzcyBhcyBhIGJvb3QgbW9kdWxlLiAqLwogICAgIHhlbl9ib290 bW9kdWxlID0gYWRkX2Jvb3RfbW9kdWxlKEJPT1RNT0RfWEVOLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocGFkZHJfdCkodWludHB0cl90KShfc3RhcnQgKyBib290X3BoeXNfb2Zmc2V0 KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZGRyX3QpKHVpbnRwdHJfdCkoX2Vu ZCAtIF9zdGFydCArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZGRyX3Qp KHVpbnRwdHJfdCkoX2VuZCAtIF9zdGFydCArIDEpLCBmYWxzZSk7CiAgICAgQlVHX09OKCF4ZW5f Ym9vdG1vZHVsZSk7CiAKICAgICB4ZW5fcGFkZHIgPSBnZXRfeGVuX3BhZGRyKCk7CmRpZmYgLS1n aXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL3NldHVwLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL3Nl dHVwLmgKaW5kZXggNzU4MDAwNy4uM2EzMDMyOSAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNt LWFybS9zZXR1cC5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaApAQCAtMzAsOSAr MzAsMTYgQEAgc3RydWN0IG1lbWluZm8gewogICAgIHN0cnVjdCBtZW1iYW5rIGJhbmtbTlJfTUVN X0JBTktTXTsKIH07CiAKKy8qCisgKiBUaGUgZG9tVSBmbGFnIGlzIHNldCBmb3Iga2VybmVscyBh bmQgcmFtZGlza3Mgb2YgInhlbixkb21haW4iIG5vZGVzLgorICogVGhlIHB1cnBvc2Ugb2YgdGhl IGRvbVUgZmxhZyBpcyB0byBhdm9pZCBnZXR0aW5nIGNvbmZ1c2VkIGluCisgKiBrZXJuZWxfcHJv YmUsIHdoZXJlIHdlIHRyeSB0byBndWVzcyB3aGljaCBpcyB0aGUgZG9tMCBrZXJuZWwgYW5kCisg KiBpbml0cmQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGFsbCB2ZXJzaW9ucyBvZiB0aGUgbXVsdGli b290IHNwZWMuIAorICovCiAjZGVmaW5lIEJPT1RNT0RfTUFYX0NNRExJTkUgMTAyNAogc3RydWN0 IGJvb3Rtb2R1bGUgewogICAgIGJvb3Rtb2R1bGVfa2luZCBraW5kOworICAgIGJvb2wgZG9tVTsK ICAgICBwYWRkcl90IHN0YXJ0OwogICAgIHBhZGRyX3Qgc2l6ZTsKIH07CkBAIC00MSw2ICs0OCw3 IEBAIHN0cnVjdCBib290bW9kdWxlIHsKICNkZWZpbmUgRFRfTUFYX05BTUUgNDEKIHN0cnVjdCBi b290Y21kbGluZSB7CiAgICAgYm9vdG1vZHVsZV9raW5kIGtpbmQ7CisgICAgYm9vbCBkb21VOwog ICAgIGNoYXIgZHRfbmFtZVtEVF9NQVhfTkFNRV07CiAgICAgY2hhciBjbWRsaW5lW0JPT1RNT0Rf TUFYX0NNRExJTkVdOwogfTsKQEAgLTkxLDEwICs5OSwxMCBAQCBzaXplX3QgX19pbml0IGJvb3Rf ZmR0X2luZm8oY29uc3Qgdm9pZCAqZmR0LCBwYWRkcl90IHBhZGRyKTsKIGNvbnN0IGNoYXIgX19p bml0ICpib290X2ZkdF9jbWRsaW5lKGNvbnN0IHZvaWQgKmZkdCk7CiAKIHN0cnVjdCBib290bW9k dWxlICphZGRfYm9vdF9tb2R1bGUoYm9vdG1vZHVsZV9raW5kIGtpbmQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3Qgc2l6ZSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3Qgc2l6 ZSwgYm9vbCBkb21VKTsKIHN0cnVjdCBib290bW9kdWxlICpib290X21vZHVsZV9maW5kX2J5X2tp bmQoYm9vdG1vZHVsZV9raW5kIGtpbmQpOwogdm9pZCBhZGRfYm9vdF9jbWRsaW5lKGNvbnN0IGNo YXIgKm5hbWUsIGNvbnN0IGNoYXIgKmNtZGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9v dG1vZHVsZV9raW5kIGtpbmQpOworICAgICAgICAgICAgICAgICAgICAgIGJvb3Rtb2R1bGVfa2lu ZCBraW5kLCBib29sIGRvbVUpOwogc3RydWN0IGJvb3RjbWRsaW5lICpib290X2NtZGxpbmVfZmlu ZF9ieV9raW5kKGJvb3Rtb2R1bGVfa2luZCBraW5kKTsKIGNvbnN0IGNoYXIgKiBfX2luaXQgYm9v dF9tb2R1bGVfa2luZF9hc19zdHJpbmcoYm9vdG1vZHVsZV9raW5kIGtpbmQpOwogCi0tIAoxLjku MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=