From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v7 07/25] xen/arm: don't add duplicate boot modules, introduce domU flag Date: Mon, 12 Nov 2018 14:59:40 -0800 Message-ID: <1542063598-23767-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+ClJldmlld2VkLWJ5OiBK dWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgoKLS0tCkNoYW5nZXMgaW4gdjY6Ci0g dXBkYXRlIGNvbW1lbnRzCgpDaGFuZ2VzIGluIHY1OgotIGltcHJvdmUgY29tbWl0IG1lc3NhZ2UK LSBhZGQgaW4tY29kZSBjb21tZW50cwoKQ2hhbmdlcyBpbiB2NDoKLSB1c2UgdW5zaWduZWQgaW50 Ci0gYmV0dGVyIGNvbW1pdCBtZXNzYWdlCi0gaW50cm9kdWNlIGRvbVUgZmxhZyBhbmQgdXNhZ2UK CkNoYW5nZXMgaW4gdjI6Ci0gbmV3IHBhdGNoCi0tLQogeGVuL2FyY2gvYXJtL2Jvb3RmZHQuYyAg ICAgIHwgMTEgKysrKysrKy0tLS0KIHhlbi9hcmNoL2FybS9zZXR1cC5jICAgICAgICB8IDM0ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIHhlbi9pbmNsdWRlL2FzbS1hcm0vc2V0 dXAuaCB8IDEyICsrKysrKysrKystLQogMyBmaWxlcyBjaGFuZ2VkLCA0NiBpbnNlcnRpb25zKCsp LCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vYm9vdGZkdC5jIGIv eGVuL2FyY2gvYXJtL2Jvb3RmZHQuYwppbmRleCA3NjY5M2I1Li5lODg1ODc0IDEwMDY0NAotLS0g YS94ZW4vYXJjaC9hcm0vYm9vdGZkdC5jCisrKyBiL3hlbi9hcmNoL2FybS9ib290ZmR0LmMKQEAg LTE3Niw2ICsxNzYsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcHJvY2Vzc19tdWx0aWJvb3Rfbm9k ZShjb25zdCB2b2lkICpmZHQsIGludCBub2RlLAogICAgIGludCBsZW4gPSA5MjsKICAgICBjaGFy IHBhdGhbOTJdOwogICAgIGludCBwYXJlbnRfbm9kZSwgcmV0OworICAgIGJvb2wgZG9tVTsKIAog ICAgIHBhcmVudF9ub2RlID0gZmR0X3BhcmVudF9vZmZzZXQoZmR0LCBub2RlKTsKICAgICBBU1NF UlQocGFyZW50X25vZGUgPj0gMCk7CkBAIC0yMzAsMTIgKzIzMSwxNCBAQCBzdGF0aWMgdm9pZCBf X2luaXQgcHJvY2Vzc19tdWx0aWJvb3Rfbm9kZShjb25zdCB2b2lkICpmZHQsIGludCBub2RlLAog ICAgICAgICAgICAga2luZCA9IEJPT1RNT0RfWFNNOwogICAgIH0KIAotICAgIGFkZF9ib290X21v ZHVsZShraW5kLCBzdGFydCwgc2l6ZSk7CisgICAgZG9tVSA9IGZkdF9ub2RlX2NoZWNrX2NvbXBh dGlibGUoZmR0LCBwYXJlbnRfbm9kZSwgInhlbixkb21haW4iKSA9PSAwOworICAgIGFkZF9ib290 X21vZHVsZShraW5kLCBzdGFydCwgc2l6ZSwgZG9tVSk7CiAKICAgICBwcm9wID0gZmR0X2dldF9w cm9wZXJ0eShmZHQsIG5vZGUsICJib290YXJncyIsICZsZW4pOwogICAgIGlmICggIXByb3AgKQog ICAgICAgICByZXR1cm47Ci0gICAgYWRkX2Jvb3RfY21kbGluZShmZHRfZ2V0X25hbWUoZmR0LCBw YXJlbnRfbm9kZSwgJmxlbiksIHByb3AtPmRhdGEsIGtpbmQpOworICAgIGFkZF9ib290X2NtZGxp bmUoZmR0X2dldF9uYW1lKGZkdCwgcGFyZW50X25vZGUsICZsZW4pLCBwcm9wLT5kYXRhLAorICAg ICAgICAgICAgICAgICAgICAga2luZCwgZG9tVSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBw cm9jZXNzX2Nob3Nlbl9ub2RlKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGUsCkBAIC0yODEsNyAr Mjg0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHByb2Nlc3NfY2hvc2VuX25vZGUoY29uc3Qgdm9p ZCAqZmR0LCBpbnQgbm9kZSwKIAogICAgIHByaW50aygiSW5pdHJkICUiUFJJcGFkZHIiLSUiUFJJ cGFkZHIiXG4iLCBzdGFydCwgZW5kKTsKIAotICAgIGFkZF9ib290X21vZHVsZShCT09UTU9EX1JB TURJU0ssIHN0YXJ0LCBlbmQtc3RhcnQpOworICAgIGFkZF9ib290X21vZHVsZShCT09UTU9EX1JB TURJU0ssIHN0YXJ0LCBlbmQtc3RhcnQsIGZhbHNlKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQg ZWFybHlfc2Nhbl9ub2RlKGNvbnN0IHZvaWQgKmZkdCwKQEAgLTM1Miw3ICszNTUsNyBAQCBzaXpl X3QgX19pbml0IGJvb3RfZmR0X2luZm8oY29uc3Qgdm9pZCAqZmR0LCBwYWRkcl90IHBhZGRyKQog ICAgIGlmICggcmV0IDwgMCApCiAgICAgICAgIHBhbmljKCJObyB2YWxpZCBkZXZpY2UgdHJlZVxu Iik7CiAKLSAgICBhZGRfYm9vdF9tb2R1bGUoQk9PVE1PRF9GRFQsIHBhZGRyLCBmZHRfdG90YWxz aXplKGZkdCkpOworICAgIGFkZF9ib290X21vZHVsZShCT09UTU9EX0ZEVCwgcGFkZHIsIGZkdF90 b3RhbHNpemUoZmR0KSwgZmFsc2UpOwogCiAgICAgZGV2aWNlX3RyZWVfZm9yX2VhY2hfbm9kZSgo dm9pZCAqKWZkdCwgZWFybHlfc2Nhbl9ub2RlLCBOVUxMKTsKICAgICBlYXJseV9wcmludF9pbmZv KCk7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vc2V0dXAuYyBiL3hlbi9hcmNoL2FybS9zZXR1 cC5jCmluZGV4IDIwOTg1OTEuLmM2OWU4NzIgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9zZXR1 cC5jCisrKyBiL3hlbi9hcmNoL2FybS9zZXR1cC5jCkBAIC0yMDEsMTAgKzIwMSwxMiBAQCB2b2lk IF9faW5pdCBkdF91bnJlc2VydmVkX3JlZ2lvbnMocGFkZHJfdCBzLCBwYWRkcl90IGUsCiB9CiAK IHN0cnVjdCBib290bW9kdWxlIF9faW5pdCAqYWRkX2Jvb3RfbW9kdWxlKGJvb3Rtb2R1bGVfa2lu ZCBraW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZHJf dCBzdGFydCwgcGFkZHJfdCBzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFkZHJfdCBzdGFydCwgcGFkZHJfdCBzaXplLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkb21VKQogewogICAgIHN0cnVjdCBib290bW9k dWxlcyAqbW9kcyA9ICZib290aW5mby5tb2R1bGVzOwogICAgIHN0cnVjdCBib290bW9kdWxlICpt b2Q7CisgICAgdW5zaWduZWQgaW50IGk7CiAKICAgICBpZiAoIG1vZHMtPm5yX21vZHMgPT0gTUFY X01PRFVMRVMgKQogICAgIHsKQEAgLTIxMiwxNSArMjE0LDMxIEBAIHN0cnVjdCBib290bW9kdWxl IF9faW5pdCAqYWRkX2Jvb3RfbW9kdWxlKGJvb3Rtb2R1bGVfa2luZCBraW5kLAogICAgICAgICAg ICAgICAgYm9vdF9tb2R1bGVfa2luZF9hc19zdHJpbmcoa2luZCksIHN0YXJ0LCBzdGFydCArIHNp emUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgZm9yICggaSA9IDAgOyBpIDwg bW9kcy0+bnJfbW9kcyA7IGkrKyApCisgICAgeworICAgICAgICBtb2QgPSAmbW9kcy0+bW9kdWxl W2ldOworICAgICAgICBpZiAoIG1vZC0+a2luZCA9PSBraW5kICYmIG1vZC0+c3RhcnQgPT0gc3Rh cnQgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICFkb21VICkKKyAgICAgICAgICAgICAg ICBtb2QtPmRvbVUgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtb2Q7CisgICAgICAgIH0K KyAgICB9CiAKICAgICBtb2QgPSAmbW9kcy0+bW9kdWxlW21vZHMtPm5yX21vZHMrK107CiAgICAg bW9kLT5raW5kID0ga2luZDsKICAgICBtb2QtPnN0YXJ0ID0gc3RhcnQ7CiAgICAgbW9kLT5zaXpl ID0gc2l6ZTsKKyAgICBtb2QtPmRvbVUgPSBkb21VOwogCiAgICAgcmV0dXJuIG1vZDsKIH0KIAor LyoKKyAqIGJvb3RfbW9kdWxlX2ZpbmRfYnlfa2luZCBjYW4gb25seSBiZSB1c2VkIHRvIHJldHVy biBYZW4gbW9kdWxlcyAoZS5nCisgKiBYU00sIERUQikgb3IgRG9tMCBtb2R1bGVzLiBUaGlzIGlz IG5vdCBzdWl0YWJsZSBmb3IgbG9va2luZyB1cCBndWVzdAorICogbW9kdWxlcy4KKyAqLwogc3Ry dWN0IGJvb3Rtb2R1bGUgKiBfX2luaXQgYm9vdF9tb2R1bGVfZmluZF9ieV9raW5kKGJvb3Rtb2R1 bGVfa2luZCBraW5kKQogewogICAgIHN0cnVjdCBib290bW9kdWxlcyAqbW9kcyA9ICZib290aW5m by5tb2R1bGVzOwpAQCAtMjI5LDE0ICsyNDcsMTQgQEAgc3RydWN0IGJvb3Rtb2R1bGUgKiBfX2lu aXQgYm9vdF9tb2R1bGVfZmluZF9ieV9raW5kKGJvb3Rtb2R1bGVfa2luZCBraW5kKQogICAgIGZv ciAoaSA9IDAgOyBpIDwgbW9kcy0+bnJfbW9kcyA7IGkrKyApCiAgICAgewogICAgICAgICBtb2Qg PSAmbW9kcy0+bW9kdWxlW2ldOwotICAgICAgICBpZiAoIG1vZC0+a2luZCA9PSBraW5kICkKKyAg ICAgICAgaWYgKCBtb2QtPmtpbmQgPT0ga2luZCAmJiAhbW9kLT5kb21VICkKICAgICAgICAgICAg IHJldHVybiBtb2Q7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQogCiB2b2lkIF9faW5pdCBh ZGRfYm9vdF9jbWRsaW5lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmNtZGxpbmUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3Rtb2R1bGVfa2luZCBraW5kKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBib290bW9kdWxlX2tpbmQga2luZCwgYm9vbCBkb21VKQog ewogICAgIHN0cnVjdCBib290Y21kbGluZXMgKmNtZHMgPSAmYm9vdGluZm8uY21kbGluZXM7CiAg ICAgc3RydWN0IGJvb3RjbWRsaW5lICpjbWQ7CkBAIC0yNDksNiArMjY3LDcgQEAgdm9pZCBfX2lu aXQgYWRkX2Jvb3RfY21kbGluZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpjbWRsaW5l LAogCiAgICAgY21kID0gJmNtZHMtPmNtZGxpbmVbY21kcy0+bnJfbW9kcysrXTsKICAgICBjbWQt PmtpbmQgPSBraW5kOworICAgIGNtZC0+ZG9tVSA9IGRvbVU7CiAKICAgICBBU1NFUlQoc3RybGVu KG5hbWUpIDw9IERUX01BWF9OQU1FKTsKICAgICBzYWZlX3N0cmNweShjbWQtPmR0X25hbWUsIG5h bWUpOwpAQCAtMjU4LDYgKzI3NywxMSBAQCB2b2lkIF9faW5pdCBhZGRfYm9vdF9jbWRsaW5lKGNv bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmNtZGxpbmUsCiAgICAgc2FmZV9zdHJjcHkoY21k LT5jbWRsaW5lLCBjbWRsaW5lKTsKIH0KIAorLyoKKyAqIGJvb3RfY21kbGluZV9maW5kX2J5X2tp bmQgY2FuIG9ubHkgYmUgdXNlZCB0byByZXR1cm4gWGVuIG1vZHVsZXMgKGUuZworICogWFNNLCBE VEIpIG9yIERvbTAgbW9kdWxlcy4gVGhpcyBpcyBub3Qgc3VpdGFibGUgZm9yIGxvb2tpbmcgdXAg Z3Vlc3QKKyAqIG1vZHVsZXMuCisgKi8KIHN0cnVjdCBib290Y21kbGluZSAqIF9faW5pdCBib290 X2NtZGxpbmVfZmluZF9ieV9raW5kKGJvb3Rtb2R1bGVfa2luZCBraW5kKQogewogICAgIHN0cnVj dCBib290Y21kbGluZXMgKmNtZHMgPSAmYm9vdGluZm8uY21kbGluZXM7CkBAIC0yNjcsNyArMjkx LDcgQEAgc3RydWN0IGJvb3RjbWRsaW5lICogX19pbml0IGJvb3RfY21kbGluZV9maW5kX2J5X2tp bmQoYm9vdG1vZHVsZV9raW5kIGtpbmQpCiAgICAgZm9yICggaSA9IDAgOyBpIDwgY21kcy0+bnJf bW9kcyA7IGkrKyApCiAgICAgewogICAgICAgICBjbWQgPSAmY21kcy0+Y21kbGluZVtpXTsKLSAg ICAgICAgaWYgKCBjbWQtPmtpbmQgPT0ga2luZCApCisgICAgICAgIGlmICggY21kLT5raW5kID09 IGtpbmQgJiYgIWNtZC0+ZG9tVSApCiAgICAgICAgICAgICByZXR1cm4gY21kOwogICAgIH0KICAg ICByZXR1cm4gTlVMTDsKQEAgLTc2MSw3ICs3ODUsNyBAQCB2b2lkIF9faW5pdCBzdGFydF94ZW4o dW5zaWduZWQgbG9uZyBib290X3BoeXNfb2Zmc2V0LAogICAgIC8qIFJlZ2lzdGVyIFhlbidzIGxv YWQgYWRkcmVzcyBhcyBhIGJvb3QgbW9kdWxlLiAqLwogICAgIHhlbl9ib290bW9kdWxlID0gYWRk X2Jvb3RfbW9kdWxlKEJPT1RNT0RfWEVOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo cGFkZHJfdCkodWludHB0cl90KShfc3RhcnQgKyBib290X3BoeXNfb2Zmc2V0KSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHBhZGRyX3QpKHVpbnRwdHJfdCkoX2VuZCAtIF9zdGFydCAr IDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZGRyX3QpKHVpbnRwdHJfdCko X2VuZCAtIF9zdGFydCArIDEpLCBmYWxzZSk7CiAgICAgQlVHX09OKCF4ZW5fYm9vdG1vZHVsZSk7 CiAKICAgICB4ZW5fcGFkZHIgPSBnZXRfeGVuX3BhZGRyKCk7CmRpZmYgLS1naXQgYS94ZW4vaW5j bHVkZS9hc20tYXJtL3NldHVwLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL3NldHVwLmgKaW5kZXgg NzU4MDAwNy4uM2EzMDMyOSAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9zZXR1cC5o CisrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaApAQCAtMzAsOSArMzAsMTYgQEAgc3Ry dWN0IG1lbWluZm8gewogICAgIHN0cnVjdCBtZW1iYW5rIGJhbmtbTlJfTUVNX0JBTktTXTsKIH07 CiAKKy8qCisgKiBUaGUgZG9tVSBmbGFnIGlzIHNldCBmb3Iga2VybmVscyBhbmQgcmFtZGlza3Mg b2YgInhlbixkb21haW4iIG5vZGVzLgorICogVGhlIHB1cnBvc2Ugb2YgdGhlIGRvbVUgZmxhZyBp cyB0byBhdm9pZCBnZXR0aW5nIGNvbmZ1c2VkIGluCisgKiBrZXJuZWxfcHJvYmUsIHdoZXJlIHdl IHRyeSB0byBndWVzcyB3aGljaCBpcyB0aGUgZG9tMCBrZXJuZWwgYW5kCisgKiBpbml0cmQgdG8g YmUgY29tcGF0aWJsZSB3aXRoIGFsbCB2ZXJzaW9ucyBvZiB0aGUgbXVsdGlib290IHNwZWMuIAor ICovCiAjZGVmaW5lIEJPT1RNT0RfTUFYX0NNRExJTkUgMTAyNAogc3RydWN0IGJvb3Rtb2R1bGUg ewogICAgIGJvb3Rtb2R1bGVfa2luZCBraW5kOworICAgIGJvb2wgZG9tVTsKICAgICBwYWRkcl90 IHN0YXJ0OwogICAgIHBhZGRyX3Qgc2l6ZTsKIH07CkBAIC00MSw2ICs0OCw3IEBAIHN0cnVjdCBi b290bW9kdWxlIHsKICNkZWZpbmUgRFRfTUFYX05BTUUgNDEKIHN0cnVjdCBib290Y21kbGluZSB7 CiAgICAgYm9vdG1vZHVsZV9raW5kIGtpbmQ7CisgICAgYm9vbCBkb21VOwogICAgIGNoYXIgZHRf bmFtZVtEVF9NQVhfTkFNRV07CiAgICAgY2hhciBjbWRsaW5lW0JPT1RNT0RfTUFYX0NNRExJTkVd OwogfTsKQEAgLTkxLDEwICs5OSwxMCBAQCBzaXplX3QgX19pbml0IGJvb3RfZmR0X2luZm8oY29u c3Qgdm9pZCAqZmR0LCBwYWRkcl90IHBhZGRyKTsKIGNvbnN0IGNoYXIgX19pbml0ICpib290X2Zk dF9jbWRsaW5lKGNvbnN0IHZvaWQgKmZkdCk7CiAKIHN0cnVjdCBib290bW9kdWxlICphZGRfYm9v dF9tb2R1bGUoYm9vdG1vZHVsZV9raW5kIGtpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3Qgc2l6ZSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3Qgc2l6ZSwgYm9vbCBkb21V KTsKIHN0cnVjdCBib290bW9kdWxlICpib290X21vZHVsZV9maW5kX2J5X2tpbmQoYm9vdG1vZHVs ZV9raW5kIGtpbmQpOwogdm9pZCBhZGRfYm9vdF9jbWRsaW5lKGNvbnN0IGNoYXIgKm5hbWUsIGNv bnN0IGNoYXIgKmNtZGxpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vdG1vZHVsZV9raW5k IGtpbmQpOworICAgICAgICAgICAgICAgICAgICAgIGJvb3Rtb2R1bGVfa2luZCBraW5kLCBib29s IGRvbVUpOwogc3RydWN0IGJvb3RjbWRsaW5lICpib290X2NtZGxpbmVfZmluZF9ieV9raW5kKGJv b3Rtb2R1bGVfa2luZCBraW5kKTsKIGNvbnN0IGNoYXIgKiBfX2luaXQgYm9vdF9tb2R1bGVfa2lu ZF9hc19zdHJpbmcoYm9vdG1vZHVsZV9raW5kIGtpbmQpOwogCi0tIAoxLjkuMQoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=