From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH 13/21] xen/9pfs: connect to the frontend Date: Tue, 25 Apr 2017 11:35:05 -0700 Message-ID: <1493145313-31311-13-git-send-email-sstabellini@kernel.org> References: <1493145313-31311-1-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d35JP-0001tz-8T for xen-devel@lists.xenproject.org; Tue, 25 Apr 2017 18:35:43 +0000 In-Reply-To: <1493145313-31311-1-git-send-email-sstabellini@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: peter.maydell@linaro.org Cc: jgross@suse.com, sstabellini@kernel.org, stefanha@gmail.com, qemu-devel@nongnu.org, Greg Kurz , Stefano Stabellini , "Aneesh Kumar K.V" , stefanha@redhat.com, anthony.perard@citrix.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org V3JpdGUgdGhlIGxpbWl0cyBvZiB0aGUgYmFja2VuZCB0byB4ZW5zdG9yZS4gQ29ubmVjdCB0byB0 aGUgZnJvbnRlbmQuClVwb24gY29ubmVjdGlvbiwgYWxsb2NhdGUgdGhlIHJpbmdzIGFjY29yZGlu ZyB0byB0aGUgcHJvdG9jb2wKc3BlY2lmaWNhdGlvbi4KCkluaXRpYWxpemUgYSBRRU1VQkggdG8g c2NoZWR1bGUgd29yayB1cG9uIHJlY2VpdmluZyBhbiBldmVudCBjaGFubmVsCm5vdGlmaWNhdGlv biBmcm9tIHRoZSBmcm9udGVuZC4KClNpZ25lZC1vZmYtYnk6IFN0ZWZhbm8gU3RhYmVsbGluaSA8 c3RlZmFub0BhcG9yZXRvLmNvbT4KQ0M6IGFudGhvbnkucGVyYXJkQGNpdHJpeC5jb20KQ0M6IGpn cm9zc0BzdXNlLmNvbQpDQzogQW5lZXNoIEt1bWFyIEsuViA8YW5lZXNoLmt1bWFyQGxpbnV4LnZu ZXQuaWJtLmNvbT4KQ0M6IEdyZWcgS3VyeiA8Z3JvdWdAa2FvZC5vcmc+Ci0tLQogaHcvOXBmcy94 ZW4tOXAtYmFja2VuZC5jIHwgMTgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMTgxIGluc2VydGlvbnMoKyksIDEgZGVsZXRp b24oLSkKCmRpZmYgLS1naXQgYS9ody85cGZzL3hlbi05cC1iYWNrZW5kLmMgYi9ody85cGZzL3hl bi05cC1iYWNrZW5kLmMKaW5kZXggZGE4YWUxOC4uMDNkZDg4MSAxMDA2NDQKLS0tIGEvaHcvOXBm cy94ZW4tOXAtYmFja2VuZC5jCisrKyBiL2h3LzlwZnMveGVuLTlwLWJhY2tlbmQuYwpAQCAtMTcs OCArMTcsNDEgQEAKICNpbmNsdWRlICJxZW11L2NvbmZpZy1maWxlLmgiCiAjaW5jbHVkZSAiZnNk ZXYvcWVtdS1mc2Rldi5oIgogCisjZGVmaW5lIFZFUlNJT05TICIxIgorI2RlZmluZSBNQVhfUklO R1MgOAorI2RlZmluZSBNQVhfUklOR19PUkRFUiA4CisKK3R5cGVkZWYgc3RydWN0IFhlbjlwZnNS aW5nIHsKKyAgICBzdHJ1Y3QgWGVuOXBmc0RldiAqcHJpdjsKKworICAgIGludCByZWY7CisgICAg eGVuZXZ0Y2huX2hhbmRsZSAgICpldnRjaG5kZXY7CisgICAgaW50IGV2dGNobjsKKyAgICBpbnQg bG9jYWxfcG9ydDsKKyAgICBpbnQgcmluZ19vcmRlcjsKKyAgICBzdHJ1Y3QgeGVuXzlwZnNfZGF0 YV9pbnRmICppbnRmOworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgICAgc3RydWN0IHhlbl85 cGZzX2RhdGEgcmluZzsKKworICAgIHN0cnVjdCBpb3ZlYyAqc2c7CisgICAgUUVNVUJIICpiaDsK KworICAgIC8qIGxvY2FsIGNvcGllcywgc28gdGhhdCB3ZSBjYW4gcmVhZC93cml0ZSBQRFUgZGF0 YSBkaXJlY3RseSBmcm9tCisgICAgICogdGhlIHJpbmcgKi8KKyAgICBSSU5HX0lEWCBvdXRfY29u cywgb3V0X3NpemUsIGluX2NvbnM7CisgICAgYm9vbCBpbnByb2dyZXNzOworfSBYZW45cGZzUmlu ZzsKKwogdHlwZWRlZiBzdHJ1Y3QgWGVuOXBmc0RldiB7CiAgICAgc3RydWN0IFhlbkRldmljZSB4 ZW5kZXY7ICAvKiBtdXN0IGJlIGZpcnN0ICovCisgICAgVjlmc1N0YXRlIHN0YXRlOworICAgIGNo YXIgKnBhdGg7CisgICAgY2hhciAqc2VjdXJpdHlfbW9kZWw7CisgICAgY2hhciAqdGFnOworICAg IGNoYXIgKmlkOworCisgICAgaW50IG51bV9yaW5nczsKKyAgICBYZW45cGZzUmluZyAqcmluZ3M7 CiB9IFhlbjlwZnNEZXY7CiAKIHN0YXRpYyBzc2l6ZV90IHhlbl85cGZzX3BkdV92bWFyc2hhbChW OWZzUERVICpwZHUsCkBAIC02NywyMiArMTAwLDE2OSBAQCBzdGF0aWMgaW50IHhlbl85cGZzX2lu aXQoc3RydWN0IFhlbkRldmljZSAqeGVuZGV2KQogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMg dm9pZCB4ZW5fOXBmc19iaCh2b2lkICpvcGFxdWUpCit7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl85 cGZzX2V2dGNobl9ldmVudCh2b2lkICpvcGFxdWUpCit7Cit9CisKIHN0YXRpYyBpbnQgeGVuXzlw ZnNfZnJlZShzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5kZXYpCiB7Ci0gICAgcmV0dXJuIC0xOworICAg IGludCBpOworICAgIFhlbjlwZnNEZXYgKnhlbl85cGRldiA9IGNvbnRhaW5lcl9vZih4ZW5kZXYs IFhlbjlwZnNEZXYsIHhlbmRldik7CisKKyAgICBnX2ZyZWUoeGVuXzlwZGV2LT5pZCk7CisgICAg Z19mcmVlKHhlbl85cGRldi0+dGFnKTsKKyAgICBnX2ZyZWUoeGVuXzlwZGV2LT5wYXRoKTsKKyAg ICBnX2ZyZWUoeGVuXzlwZGV2LT5zZWN1cml0eV9tb2RlbCk7CisKKyAgICBmb3IgKGkgPSAwOyBp IDwgeGVuXzlwZGV2LT5udW1fcmluZ3M7IGkrKykgeworICAgICAgICBpZiAoeGVuXzlwZGV2LT5y aW5nc1tpXS5kYXRhICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHhlbmdudHRhYl91bm1hcCh4ZW5f OXBkZXYtPnhlbmRldi5nbnR0YWJkZXYsCisgICAgICAgICAgICAgICAgICAgIHhlbl85cGRldi0+ cmluZ3NbaV0uZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgKDEgPDwgeGVuXzlwZGV2LT5yaW5n c1tpXS5yaW5nX29yZGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHhlbl85cGRldi0+cmlu Z3NbaV0uaW50ZiAhPSBOVUxMKSB7CisgICAgICAgICAgICB4ZW5nbnR0YWJfdW5tYXAoeGVuXzlw ZGV2LT54ZW5kZXYuZ250dGFiZGV2LAorICAgICAgICAgICAgICAgICAgICB4ZW5fOXBkZXYtPnJp bmdzW2ldLmludGYsCisgICAgICAgICAgICAgICAgICAgIDEpOworICAgICAgICB9CisgICAgICAg IGlmICh4ZW5fOXBkZXYtPnJpbmdzW2ldLmV2dGNobmRldiA+IDApIHsKKyAgICAgICAgICAgIHFl bXVfc2V0X2ZkX2hhbmRsZXIoeGVuZXZ0Y2huX2ZkKHhlbl85cGRldi0+cmluZ3NbaV0uZXZ0Y2hu ZGV2KSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgICAgICAg ICB4ZW5ldnRjaG5fdW5iaW5kKHhlbl85cGRldi0+cmluZ3NbaV0uZXZ0Y2huZGV2LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB4ZW5fOXBkZXYtPnJpbmdzW2ldLmxvY2FsX3BvcnQpOwor ICAgICAgICB9CisgICAgICAgIGlmICh4ZW5fOXBkZXYtPnJpbmdzW2ldLmJoICE9IE5VTEwpIHsK KyAgICAgICAgICAgIHFlbXVfYmhfZGVsZXRlKHhlbl85cGRldi0+cmluZ3NbaV0uYmgpOworICAg ICAgICB9CisgICAgfQorICAgIGdfZnJlZSh4ZW5fOXBkZXYtPnJpbmdzKTsKKyAgICByZXR1cm4g MDsKIH0KIAogc3RhdGljIGludCB4ZW5fOXBmc19jb25uZWN0KHN0cnVjdCBYZW5EZXZpY2UgKnhl bmRldikKIHsKKyAgICBpbnQgaTsKKyAgICBYZW45cGZzRGV2ICp4ZW5fOXBkZXYgPSBjb250YWlu ZXJfb2YoeGVuZGV2LCBYZW45cGZzRGV2LCB4ZW5kZXYpOworICAgIFY5ZnNTdGF0ZSAqcyA9ICZ4 ZW5fOXBkZXYtPnN0YXRlOworICAgIFFlbXVPcHRzICpmc2RldjsKKworICAgIGlmICh4ZW5zdG9y ZV9yZWFkX2ZlX2ludCgmeGVuXzlwZGV2LT54ZW5kZXYsICJudW0tcmluZ3MiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmeGVuXzlwZGV2LT5udW1fcmluZ3MpID09IC0xIHx8CisgICAg ICAgIHhlbl85cGRldi0+bnVtX3JpbmdzID4gTUFYX1JJTkdTIHx8IHhlbl85cGRldi0+bnVtX3Jp bmdzIDwgMSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgeGVuXzlwZGV2LT5y aW5ncyA9IGdfbWFsbG9jMCh4ZW5fOXBkZXYtPm51bV9yaW5ncyAqIHNpemVvZihYZW45cGZzUmlu ZykpOworICAgIGZvciAoaSA9IDA7IGkgPCB4ZW5fOXBkZXYtPm51bV9yaW5nczsgaSsrKSB7Cisg ICAgICAgIGNoYXIgKnN0cjsKKyAgICAgICAgaW50IHJpbmdfb3JkZXI7CisKKyAgICAgICAgeGVu XzlwZGV2LT5yaW5nc1tpXS5wcml2ID0geGVuXzlwZGV2OworICAgICAgICB4ZW5fOXBkZXYtPnJp bmdzW2ldLmV2dGNobiA9IC0xOworICAgICAgICB4ZW5fOXBkZXYtPnJpbmdzW2ldLmxvY2FsX3Bv cnQgPSAtMTsKKworICAgICAgICBzdHIgPSBnX3N0cmR1cF9wcmludGYoInJpbmctcmVmJXUiLCBp KTsKKyAgICAgICAgaWYgKHhlbnN0b3JlX3JlYWRfZmVfaW50KCZ4ZW5fOXBkZXYtPnhlbmRldiwg c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnhlbl85cGRldi0+cmluZ3Nb aV0ucmVmKSA9PSAtMSkgeworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAg ICAgZ19mcmVlKHN0cik7CisgICAgICAgIHN0ciA9IGdfc3RyZHVwX3ByaW50ZigiZXZlbnQtY2hh bm5lbC0ldSIsIGkpOworICAgICAgICBpZiAoeGVuc3RvcmVfcmVhZF9mZV9pbnQoJnhlbl85cGRl di0+eGVuZGV2LCBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeGVuXzlw ZGV2LT5yaW5nc1tpXS5ldnRjaG4pID09IC0xKSB7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAg ICAgICAgfQorICAgICAgICBnX2ZyZWUoc3RyKTsKKworICAgICAgICB4ZW5fOXBkZXYtPnJpbmdz W2ldLmludGYgPSAgeGVuZ250dGFiX21hcF9ncmFudF9yZWYoCisgICAgICAgICAgICAgICAgeGVu XzlwZGV2LT54ZW5kZXYuZ250dGFiZGV2LAorICAgICAgICAgICAgICAgIHhlbl85cGRldi0+eGVu ZGV2LmRvbSwKKyAgICAgICAgICAgICAgICB4ZW5fOXBkZXYtPnJpbmdzW2ldLnJlZiwKKyAgICAg ICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgICAgICAgaWYgKCF4ZW5fOXBk ZXYtPnJpbmdzW2ldLmludGYpIHsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9Cisg ICAgICAgIHJpbmdfb3JkZXIgPSB4ZW5fOXBkZXYtPnJpbmdzW2ldLmludGYtPnJpbmdfb3JkZXI7 CisgICAgICAgIGlmIChyaW5nX29yZGVyID4gTUFYX1JJTkdfT1JERVIpIHsKKyAgICAgICAgICAg IGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIHhlbl85cGRldi0+cmluZ3NbaV0ucmluZ19v cmRlciA9IHJpbmdfb3JkZXI7CisgICAgICAgIHhlbl85cGRldi0+cmluZ3NbaV0uZGF0YSA9IHhl bmdudHRhYl9tYXBfZG9tYWluX2dyYW50X3JlZnMoCisgICAgICAgICAgICAgICAgeGVuXzlwZGV2 LT54ZW5kZXYuZ250dGFiZGV2LAorICAgICAgICAgICAgICAgICgxIDw8IHJpbmdfb3JkZXIpLAor ICAgICAgICAgICAgICAgIHhlbl85cGRldi0+eGVuZGV2LmRvbSwKKyAgICAgICAgICAgICAgICB4 ZW5fOXBkZXYtPnJpbmdzW2ldLmludGYtPnJlZiwKKyAgICAgICAgICAgICAgICBQUk9UX1JFQUQg fCBQUk9UX1dSSVRFKTsKKyAgICAgICAgaWYgKCF4ZW5fOXBkZXYtPnJpbmdzW2ldLmRhdGEpIHsK KyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIHhlbl85cGRldi0+cmlu Z3NbaV0ucmluZy5pbiA9IHhlbl85cGRldi0+cmluZ3NbaV0uZGF0YTsKKyAgICAgICAgeGVuXzlw ZGV2LT5yaW5nc1tpXS5yaW5nLm91dCA9IHhlbl85cGRldi0+cmluZ3NbaV0uZGF0YSArCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5fRkxFWF9SSU5HX1NJWkUocmlu Z19vcmRlcik7CisKKyAgICAgICAgeGVuXzlwZGV2LT5yaW5nc1tpXS5iaCA9IHFlbXVfYmhfbmV3 KHhlbl85cGZzX2JoLCAmeGVuXzlwZGV2LT5yaW5nc1tpXSk7CisgICAgICAgIHhlbl85cGRldi0+ cmluZ3NbaV0ub3V0X2NvbnMgPSAwOworICAgICAgICB4ZW5fOXBkZXYtPnJpbmdzW2ldLm91dF9z aXplID0gMDsKKyAgICAgICAgeGVuXzlwZGV2LT5yaW5nc1tpXS5pbnByb2dyZXNzID0gZmFsc2U7 CisKKworICAgICAgICB4ZW5fOXBkZXYtPnJpbmdzW2ldLmV2dGNobmRldiA9IHhlbmV2dGNobl9v cGVuKE5VTEwsIDApOworICAgICAgICBpZiAoeGVuXzlwZGV2LT5yaW5nc1tpXS5ldnRjaG5kZXYg PT0gTlVMTCkgeworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgZmNu dGwoeGVuZXZ0Y2huX2ZkKHhlbl85cGRldi0+cmluZ3NbaV0uZXZ0Y2huZGV2KSwgRl9TRVRGRCwg RkRfQ0xPRVhFQyk7CisgICAgICAgIHhlbl85cGRldi0+cmluZ3NbaV0ubG9jYWxfcG9ydCA9IHhl bmV2dGNobl9iaW5kX2ludGVyZG9tYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh4ZW5fOXBkZXYtPnJpbmdzW2ldLmV2dGNobmRldiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbmRldi0+ZG9tLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuXzlwZGV2LT5yaW5nc1tpXS5l dnRjaG4pOworICAgICAgICBpZiAoeGVuXzlwZGV2LT5yaW5nc1tpXS5sb2NhbF9wb3J0ID09IC0x KSB7CisgICAgICAgICAgICB4ZW5fcHZfcHJpbnRmKHhlbmRldiwgMCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgInhlbmV2dGNobl9iaW5kX2ludGVyZG9tYWluIGZhaWxlZCBwb3J0PSVkXG4i LAorICAgICAgICAgICAgICAgICAgICAgICAgICB4ZW5fOXBkZXYtPnJpbmdzW2ldLmV2dGNobik7 CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgICAgICB4ZW5fcHZfcHJpbnRm KHhlbmRldiwgMiwgImJpbmQgZXZ0Y2huIHBvcnQgJWRcbiIsIHhlbmRldi0+bG9jYWxfcG9ydCk7 CisgICAgICAgIHFlbXVfc2V0X2ZkX2hhbmRsZXIoeGVuZXZ0Y2huX2ZkKHhlbl85cGRldi0+cmlu Z3NbaV0uZXZ0Y2huZGV2KSwKKyAgICAgICAgICAgICAgICB4ZW5fOXBmc19ldnRjaG5fZXZlbnQs IE5VTEwsICZ4ZW5fOXBkZXYtPnJpbmdzW2ldKTsKKyAgICB9CisKKyAgICB4ZW5fOXBkZXYtPnNl Y3VyaXR5X21vZGVsID0geGVuc3RvcmVfcmVhZF9iZV9zdHIoeGVuZGV2LCAic2VjdXJpdHlfbW9k ZWwiKTsKKyAgICB4ZW5fOXBkZXYtPnBhdGggPSB4ZW5zdG9yZV9yZWFkX2JlX3N0cih4ZW5kZXYs ICJwYXRoIik7CisgICAgeGVuXzlwZGV2LT5pZCA9IHMtPmZzY29uZi5mc2Rldl9pZCA9CisgICAg ICAgIGdfc3RyZHVwX3ByaW50ZigieGVuOXAlZCIsIHhlbmRldi0+ZGV2KTsKKyAgICB4ZW5fOXBk ZXYtPnRhZyA9IHMtPmZzY29uZi50YWcgPSB4ZW5zdG9yZV9yZWFkX2ZlX3N0cih4ZW5kZXYsICJ0 YWciKTsKKyAgICB2OWZzX3JlZ2lzdGVyX3RyYW5zcG9ydChzLCAmeGVuXzlwX3RyYW5zcG9ydCk7 CisgICAgZnNkZXYgPSBxZW11X29wdHNfY3JlYXRlKHFlbXVfZmluZF9vcHRzKCJmc2RldiIpLAor ICAgICAgICAgICAgcy0+ZnNjb25mLnRhZywKKyAgICAgICAgICAgIDEsIE5VTEwpOworICAgIHFl bXVfb3B0X3NldChmc2RldiwgImZzZHJpdmVyIiwgImxvY2FsIiwgTlVMTCk7CisgICAgcWVtdV9v cHRfc2V0KGZzZGV2LCAicGF0aCIsIHhlbl85cGRldi0+cGF0aCwgTlVMTCk7CisgICAgcWVtdV9v cHRfc2V0KGZzZGV2LCAic2VjdXJpdHlfbW9kZWwiLCB4ZW5fOXBkZXYtPnNlY3VyaXR5X21vZGVs LCBOVUxMKTsKKyAgICBxZW11X29wdHNfc2V0X2lkKGZzZGV2LCBzLT5mc2NvbmYuZnNkZXZfaWQp OworICAgIHFlbXVfZnNkZXZfYWRkKGZzZGV2KTsKKyAgICB2OWZzX2RldmljZV9yZWFsaXplX2Nv bW1vbihzLCBOVUxMKTsKKwogICAgIHJldHVybiAwOworCitvdXQ6CisgICAgeGVuXzlwZnNfZnJl ZSh4ZW5kZXYpOworICAgIHJldHVybiAtMTsKIH0KIAogc3RhdGljIHZvaWQgeGVuXzlwZnNfYWxs b2Moc3RydWN0IFhlbkRldmljZSAqeGVuZGV2KQogeworICAgIHhlbnN0b3JlX3dyaXRlX2JlX3N0 cih4ZW5kZXYsICJ2ZXJzaW9ucyIsIFZFUlNJT05TKTsKKyAgICB4ZW5zdG9yZV93cml0ZV9iZV9p bnQoeGVuZGV2LCAibWF4LXJpbmdzIiwgTUFYX1JJTkdTKTsKKyAgICB4ZW5zdG9yZV93cml0ZV9i ZV9pbnQoeGVuZGV2LCAibWF4LXJpbmctcGFnZS1vcmRlciIsIE1BWF9SSU5HX09SREVSKTsKIH0K IAogc3RhdGljIHZvaWQgeGVuXzlwZnNfZGlzY29ubmVjdChzdHJ1Y3QgWGVuRGV2aWNlICp4ZW5k ZXYpCiB7CisgICAgLyogRHluYW1pYyBob3RwbHVnIG9mIFBWIGZpbGVzeXN0ZW1zIGF0IHJ1bnRp bWUgaXMgbm90IHN1cHBvcnRlZC4gKi8KIH0KIAogc3RydWN0IFhlbkRldk9wcyB4ZW5fOXBmc19v cHMgPSB7Ci0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=