From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v6 6/8] drm/fb-helper: Prepare to move out modeset config code Date: Thu, 23 May 2019 15:44:11 +0200 Message-ID: <20190523134413.4210-7-noralf@tronnes.org> References: <20190523134413.4210-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190523134413.4210-1-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: Maxime Ripard , intel-gfx@lists.freedesktop.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , Sam Ravnborg List-Id: intel-gfx@lists.freedesktop.org VGhpcyBwcmVwYXJlcyB0aGUgbW9kZXNldCBjb2RlIHNvIGl0IGNhbiBiZSBtb3ZlZCBvdXQgYXMt aXMgaW4gdGhlIG5leHQKcGF0Y2guCgp2MzogUmVtb3ZlIHN0cmF5IG5ld2xpbmUKClNpZ25lZC1v ZmYtYnk6IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgpSZXZpZXdlZC1ieTog TWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBib290bGluLmNvbT4KUmV2aWV3ZWQtYnk6IFNh bSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2Zi X2hlbHBlci5jIHwgNjIgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBpbmNsdWRl L2RybS9kcm1fZmJfaGVscGVyLmggICAgIHwgIDQgLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDQ0IGlu c2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4 IGMyNzE5YTYzMmUzYS4uNDc4OGY1YTI4NTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAg LTQzLDYgKzQzLDEwIEBACiAKICNpbmNsdWRlICJkcm1faW50ZXJuYWwuaCIKIAorc3RydWN0IGRy bV9jbGllbnRfb2Zmc2V0IHsKKwlpbnQgeCwgeTsKK307CisKIHN0YXRpYyBib29sIGRybV9mYmRl dl9lbXVsYXRpb24gPSB0cnVlOwogbW9kdWxlX3BhcmFtX25hbWVkKGZiZGV2X2VtdWxhdGlvbiwg ZHJtX2ZiZGV2X2VtdWxhdGlvbiwgYm9vbCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZiZGV2 X2VtdWxhdGlvbiwKQEAgLTE4MDQsNyArMTgwOCw3IEBAIHN0YXRpYyBib29sIGRybV9jbGllbnRf dGFyZ2V0X2Nsb25lZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICAgc3RydWN0IGRy bV9jb25uZWN0b3IgKipjb25uZWN0b3JzLAogCQkJCSAgICAgdW5zaWduZWQgaW50IGNvbm5lY3Rv cl9jb3VudCwKIAkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCi0JCQkJ ICAgICBzdHJ1Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0cywKKwkJCQkgICAgIHN0cnVjdCBkcm1f Y2xpZW50X29mZnNldCAqb2Zmc2V0cywKIAkJCQkgICAgIGJvb2wgKmVuYWJsZWQsIGludCB3aWR0 aCwgaW50IGhlaWdodCkKIHsKIAlpbnQgY291bnQsIGksIGo7CkBAIC0xODgzLDcgKzE4ODcsNyBA QCBzdGF0aWMgYm9vbCBkcm1fY2xpZW50X3RhcmdldF9jbG9uZWQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIHN0YXRpYyBpbnQgZHJtX2NsaWVudF9nZXRfdGlsZV9vZmZzZXRzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICoqY29ubmVjdG9ycywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGNvbm5lY3Rv cl9jb3VudCwKIAkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlcywKLQkJ CQkgICAgICAgc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHMsCisJCQkJICAgICAgIHN0cnVj dCBkcm1fY2xpZW50X29mZnNldCAqb2Zmc2V0cywKIAkJCQkgICAgICAgaW50IGlkeCwKIAkJCQkg ICAgICAgaW50IGhfaWR4LCBpbnQgdl9pZHgpCiB7CkBAIC0xOTE2LDcgKzE5MjAsNyBAQCBzdGF0 aWMgaW50IGRybV9jbGllbnRfZ2V0X3RpbGVfb2Zmc2V0cyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq KmNvbm5lY3RvcnMsCiBzdGF0aWMgYm9vbCBkcm1fY2xpZW50X3RhcmdldF9wcmVmZXJyZWQoc3Ry dWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzLAogCQkJCQl1bnNpZ25lZCBpbnQgY29ubmVj dG9yX2NvdW50LAogCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAotCQkJCQlz dHJ1Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0cywKKwkJCQkJc3RydWN0IGRybV9jbGllbnRfb2Zm c2V0ICpvZmZzZXRzLAogCQkJCQlib29sICplbmFibGVkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQp CiB7CiAJY29uc3QgdTY0IG1hc2sgPSBCSVRfVUxMKGNvbm5lY3Rvcl9jb3VudCkgLSAxOwpAQCAt MjA4MCw3ICsyMDg0LDcgQEAgc3RhdGljIGJvb2wgZHJtX2NsaWVudF9maXJtd2FyZV9jb25maWco c3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBj b25uZWN0b3JfY291bnQsCiAJCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0YyAqKmNydGNzLAogCQkJ CSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAotCQkJCSAgICAgICBzdHJ1 Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0cywKKwkJCQkgICAgICAgc3RydWN0IGRybV9jbGllbnRf b2Zmc2V0ICpvZmZzZXRzLAogCQkJCSAgICAgICBib29sICplbmFibGVkLCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gbWluX3QodW5zaWduZWQgaW50LCBj b25uZWN0b3JfY291bnQsIEJJVFNfUEVSX0xPTkcpOwpAQCAtMjI1MCwzMCArMjI1NCw0NyBAQCBz dGF0aWMgYm9vbCBkcm1fY2xpZW50X2Zpcm13YXJlX2NvbmZpZyhzdHJ1Y3QgZHJtX2NsaWVudF9k ZXYgKmNsaWVudCwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0 Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKLQkJCSAgICB1MzIgd2lkdGgsIHUz MiBoZWlnaHQpCisvKioKKyAqIGRybV9jbGllbnRfbW9kZXNldF9wcm9iZSgpIC0gUHJvYmUgZm9y IGRpc3BsYXlzCisgKiBAY2xpZW50OiBEUk0gY2xpZW50CisgKiBAd2lkdGg6IE1heGltdW0gZGlz cGxheSBtb2RlIHdpZHRoIChvcHRpb25hbCkKKyAqIEBoZWlnaHQ6IE1heGltdW0gZGlzcGxheSBt b2RlIGhlaWdodCAob3B0aW9uYWwpCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHVwIGRpc3Bs YXkgcGlwZWxpbmVzIGZvciBlbmFibGVkIGNvbm5lY3RvcnMgYW5kIHN0b3JlcyB0aGUKKyAqIGNv bmZpZyBpbiB0aGUgY2xpZW50J3MgbW9kZXNldCBhcnJheS4KKyAqCisgKiBSZXR1cm5zOgorICog WmVybyBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLwor aW50IGRybV9jbGllbnRfbW9kZXNldF9wcm9iZShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVu dCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQogewogCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IsICoqY29ubmVjdG9ycyA9IE5VTEw7Ci0Jc3RydWN0IGRy bV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVscGVyLT5jbGllbnQ7CiAJc3RydWN0IGRybV9j b25uZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g ZmJfaGVscGVyLT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owog CXVuc2lnbmVkIGludCB0b3RhbF9tb2Rlc19jb3VudCA9IDA7CisJc3RydWN0IGRybV9jbGllbnRf b2Zmc2V0ICpvZmZzZXRzOwogCXVuc2lnbmVkIGludCBjb25uZWN0b3JfY291bnQgPSAwOwogCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXM7Ci0Jc3RydWN0IGRybV9mYl9vZmZzZXQgKm9m ZnNldHM7CiAJc3RydWN0IGRybV9jcnRjICoqY3J0Y3M7CisJaW50IGksIHJldCA9IDA7CiAJYm9v bCAqZW5hYmxlZDsKLQlpbnQgaTsKIAogCURSTV9ERUJVR19LTVMoIlxuIik7CiAKKwlpZiAoIXdp ZHRoKQorCQl3aWR0aCA9IGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoOworCWlmICghaGVpZ2h0 KQorCQloZWlnaHQgPSBkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQ7CisKIAlkcm1fY29ubmVj dG9yX2xpc3RfaXRlcl9iZWdpbihkZXYsICZjb25uX2l0ZXIpOwogCWRybV9jbGllbnRfZm9yX2Vh Y2hfY29ubmVjdG9yX2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7CiAJCXN0cnVjdCBkcm1f Y29ubmVjdG9yICoqdG1wOwogCiAJCXRtcCA9IGtyZWFsbG9jKGNvbm5lY3RvcnMsIChjb25uZWN0 b3JfY291bnQgKyAxKSAqIHNpemVvZigqY29ubmVjdG9ycyksIEdGUF9LRVJORUwpOwotCQlpZiAo IXRtcCkKKwkJaWYgKCF0bXApIHsKKwkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGZyZWVfY29u bmVjdG9yczsKKwkJfQogCiAJCWNvbm5lY3RvcnMgPSB0bXA7CiAJCWRybV9jb25uZWN0b3JfZ2V0 KGNvbm5lY3Rvcik7CkBAIC0yMjgyLDcgKzIzMDMsNyBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBf Y3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAlkcm1fY29ubmVjdG9yX2xp c3RfaXRlcl9lbmQoJmNvbm5faXRlcik7CiAKIAlpZiAoIWNvbm5lY3Rvcl9jb3VudCkKLQkJcmV0 dXJuOworCQlyZXR1cm4gMDsKIAogCWNydGNzID0ga2NhbGxvYyhjb25uZWN0b3JfY291bnQsIHNp emVvZigqY3J0Y3MpLCBHRlBfS0VSTkVMKTsKIAltb2RlcyA9IGtjYWxsb2MoY29ubmVjdG9yX2Nv dW50LCBzaXplb2YoKm1vZGVzKSwgR0ZQX0tFUk5FTCk7CkBAIC0yMjkwLDEyICsyMzExLDEzIEBA IHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVs cGVyLAogCWVuYWJsZWQgPSBrY2FsbG9jKGNvbm5lY3Rvcl9jb3VudCwgc2l6ZW9mKGJvb2wpLCBH RlBfS0VSTkVMKTsKIAlpZiAoIWNydGNzIHx8ICFtb2RlcyB8fCAhZW5hYmxlZCB8fCAhb2Zmc2V0 cykgewogCQlEUk1fRVJST1IoIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldCA9 IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAogCW11dGV4X2xvY2soJmNsaWVudC0+bW9kZXNl dF9tdXRleCk7CiAKLQltdXRleF9sb2NrKCZmYl9oZWxwZXItPmRldi0+bW9kZV9jb25maWcubXV0 ZXgpOworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCWZvciAoaSA9IDA7 IGkgPCBjb25uZWN0b3JfY291bnQ7IGkrKykKIAkJdG90YWxfbW9kZXNfY291bnQgKz0gY29ubmVj dG9yc1tpXS0+ZnVuY3MtPmZpbGxfbW9kZXMoY29ubmVjdG9yc1tpXSwgd2lkdGgsIGhlaWdodCk7 CiAJaWYgKCF0b3RhbF9tb2Rlc19jb3VudCkKQEAgLTIzMjAsMTQgKzIzNDIsMTQgQEAgc3RhdGlj IHZvaWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJ CWRybV9jbGllbnRfcGlja19jcnRjcyhjbGllbnQsIGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3Vu dCwKIAkJCQkgICAgICBjcnRjcywgbW9kZXMsIDAsIHdpZHRoLCBoZWlnaHQpOwogCX0KLQltdXRl eF91bmxvY2soJmZiX2hlbHBlci0+ZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJbXV0ZXhfdW5s b2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAogCWRybV9jbGllbnRfbW9kZXNldF9yZWxl YXNlKGNsaWVudCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdG9yX2NvdW50OyBpKyspIHsK IAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBtb2Rlc1tpXTsKIAkJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gY3J0Y3NbaV07Ci0JCXN0cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXQg PSAmb2Zmc2V0c1tpXTsKKwkJc3RydWN0IGRybV9jbGllbnRfb2Zmc2V0ICpvZmZzZXQgPSAmb2Zm c2V0c1tpXTsKIAogCQlpZiAobW9kZSAmJiBjcnRjKSB7CiAJCQlzdHJ1Y3QgZHJtX21vZGVfc2V0 ICptb2Rlc2V0ID0gZHJtX2NsaWVudF9maW5kX21vZGVzZXQoY2xpZW50LCBjcnRjKTsKQEAgLTIz MzcsOCArMjM1OSwxMCBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Moc3RydWN0IGRybV9m Yl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJCQkgICAgICBtb2RlLT5uYW1lLCBjcnRjLT5iYXNlLmlk LCBvZmZzZXQtPngsIG9mZnNldC0+eSk7CiAKIAkJCWlmIChXQVJOX09OX09OQ0UobW9kZXNldC0+ bnVtX2Nvbm5lY3RvcnMgPT0gRFJNX0NMSUVOVF9NQVhfQ0xPTkVEX0NPTk5FQ1RPUlMgfHwKLQkJ CQkJIChkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjID4gMSAmJiBtb2Rlc2V0LT5udW1fY29ubmVj dG9ycyA9PSAxKSkpCisJCQkJCSAoZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YyA+IDEgJiYgbW9k ZXNldC0+bnVtX2Nvbm5lY3RvcnMgPT0gMSkpKSB7CisJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQli cmVhazsKKwkJCX0KIAogCQkJbW9kZXNldC0+bW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYs IG1vZGUpOwogCQkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubmVjdG9yKTsKQEAgLTIzNTgsNiArMjM4 Miw4IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAq ZmJfaGVscGVyLAogCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3JfY291bnQ7IGkrKykKIAkJZHJt X2Nvbm5lY3Rvcl9wdXQoY29ubmVjdG9yc1tpXSk7CiAJa2ZyZWUoY29ubmVjdG9ycyk7CisKKwly ZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMjQzOSw3ICsyNDY1LDcgQEAgX19kcm1fZmJfaGVscGVy X2luaXRpYWxfY29uZmlnX2FuZF91bmxvY2soc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBl ciwKIAl3aWR0aCA9IGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoOwogCWhlaWdodCA9IGRldi0+ bW9kZV9jb25maWcubWF4X2hlaWdodDsKIAotCWRybV9zZXR1cF9jcnRjcyhmYl9oZWxwZXIsIHdp ZHRoLCBoZWlnaHQpOworCWRybV9jbGllbnRfbW9kZXNldF9wcm9iZSgmZmJfaGVscGVyLT5jbGll bnQsIHdpZHRoLCBoZWlnaHQpOwogCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2Jl KGZiX2hlbHBlciwgYnBwX3NlbCk7CiAJaWYgKHJldCA8IDApIHsKIAkJaWYgKHJldCA9PSAtRUFH QUlOKSB7CkBAIC0yNTg2LDcgKzI2MTIsNyBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2 ZW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCiAKIAlEUk1fREVCVUdfS01TKCJc biIpOwogCi0JZHJtX3NldHVwX2NydGNzKGZiX2hlbHBlciwgZmJfaGVscGVyLT5mYi0+d2lkdGgs IGZiX2hlbHBlci0+ZmItPmhlaWdodCk7CisJZHJtX2NsaWVudF9tb2Rlc2V0X3Byb2JlKCZmYl9o ZWxwZXItPmNsaWVudCwgZmJfaGVscGVyLT5mYi0+d2lkdGgsIGZiX2hlbHBlci0+ZmItPmhlaWdo dCk7CiAJZHJtX3NldHVwX2NydGNzX2ZiKGZiX2hlbHBlcik7CiAJbXV0ZXhfdW5sb2NrKCZmYl9o ZWxwZXItPmxvY2spOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgg Yi9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKaW5kZXggZTE0ZDUyZWY5NjM4Li5jOGE4YWUy YTY3OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAorKysgYi9pbmNs dWRlL2RybS9kcm1fZmJfaGVscGVyLmgKQEAgLTQzLDEwICs0Myw2IEBAIGVudW0gbW9kZV9zZXRf YXRvbWljIHsKIAlFTlRFUl9BVE9NSUNfTU9ERV9TRVQsCiB9OwogCi1zdHJ1Y3QgZHJtX2ZiX29m ZnNldCB7Ci0JaW50IHgsIHk7Ci19OwotCiAvKioKICAqIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1 cmZhY2Vfc2l6ZSAtIGRlc2NyaWJlcyBmYmRldiBzaXplIGFuZCBzY2Fub3V0IHN1cmZhY2Ugc2l6 ZQogICogQGZiX3dpZHRoOiBmYmRldiB3aWR0aAotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=