From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [RFC v4 18/25] drm/client: Make the display modes available to clients Date: Thu, 12 Apr 2018 18:12:30 +0200 Message-ID: <20180412161237.9314-7-noralf@tronnes.org> References: <20180412161237.9314-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180412161237.9314-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: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , laurent.pinchart@ideasonboard.com, mstaudt@suse.de, dh.herrmann@gmail.com List-Id: dri-devel@lists.freedesktop.org R2l2ZSBjbGllbnRzIGVhc3kgYWNjZXNzIHRvIHRoZSBkaXNwbGF5IG1vZGVzLgoKU2lnbmVkLW9m Zi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2RybV9jbGllbnQuYyB8IDE1OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tCiBpbmNsdWRlL2RybS9kcm1fY2xpZW50LmggICAgIHwgIDI1ICsrKysrKysK IDIgZmlsZXMgY2hhbmdlZCwgMTQ4IGluc2VydGlvbnMoKyksIDM2IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2NsaWVudC5jCmluZGV4IDc2NGM1NTY2MzBiOC4uYmNlMTYzMGEwZGIyIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f Y2xpZW50LmMKQEAgLTgsNiArOCw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRGF2ZSBBaXJs aWUgPGFpcmxpZWRAbGludXguaWU+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgpAQCAt NTQsNiArNTUsNyBAQCBzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkcm1fY2xpZW50X2Rpc3Bs YXlfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJfQogCiAJZGlzcGxheS0+ZGV2ID0g ZGV2OworCUlOSVRfTElTVF9IRUFEKCZkaXNwbGF5LT5tb2Rlcyk7CiAJZGlzcGxheS0+bW9kZXNl dF9jb3VudCA9IG51bV9jcnRjOwogCiAJZHJtX2Zvcl9lYWNoX2NydGMoY3J0YywgZGV2KQpAQCAt ODQsMTIgKzg2LDE2IEBAIEVYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X2NyZWF0ZSk7 CiAgKi8KIHZvaWQgZHJtX2NsaWVudF9kaXNwbGF5X2ZyZWUoc3RydWN0IGRybV9jbGllbnRfZGlz cGxheSAqZGlzcGxheSkKIHsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKnRtcDsK IAlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0OwogCXVuc2lnbmVkIGludCBpOwogCiAJaWYg KCFkaXNwbGF5KQogCQlyZXR1cm47CiAKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwg dG1wLCAmZGlzcGxheS0+bW9kZXMsIGhlYWQpCisJCWRybV9tb2RlX2Rlc3Ryb3koZGlzcGxheS0+ ZGV2LCBtb2RlKTsKKwogCWRybV9jbGllbnRfZGlzcGxheV9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVz ZXQsIGRpc3BsYXkpIHsKIAkJaWYgKG1vZGVzZXQtPm1vZGUpCiAJCQlkcm1fbW9kZV9kZXN0cm95 KGRpc3BsYXktPmRldiwgbW9kZXNldC0+bW9kZSk7CkBAIC02NzAsMjIgKzY3Niw3MCBAQCBzdGF0 aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXks CiAJcmV0dXJuIGJlc3Rfc2NvcmU7CiB9CiAKLS8qKgotICogZHJtX2NsaWVudF9maW5kX2Rpc3Bs YXkoKSAtIEZpbmQgZGlzcGxheQotICogQGRldjogRFJNIGRldmljZQotICogQHdpZHRoOiBNYXhp bXVtIGRpc3BsYXkgbW9kZSB3aWR0aCAob3B0aW9uYWwpCi0gKiBAaGVpZ2h0OiBNYXhpbXVtIGRp c3BsYXkgbW9kZSBoZWlnaHQgKG9wdGlvbmFsKQotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJu cyBhIGRpc3BsYXkgdGhlIGNsaWVudCBjYW4gdXNlIGlmIGF2YWlsYWJsZS4KLSAqCi0gKiBGcmVl IHJlc291cmNlcyBieSBjYWxsaW5nIGRybV9jbGllbnRfZGlzcGxheV9mcmVlKCkuCi0gKgotICog UmV0dXJuczoKLSAqIEEgJmRybV9jbGllbnRfZGlzcGxheSBvbiBzdWNjZXNzLCBOVUxMIGlmIG5v IGNvbm5lY3RvcnMgYXJlIGZvdW5kCi0gKiBvciBlcnJvciBwb2ludGVyIG9uIGZhaWx1cmUuCi0g Ki8KLXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKgotZHJtX2NsaWVudF9maW5kX2Rpc3BsYXko c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQg aGVpZ2h0KQorLyogR2l2ZSB0aGUgY2xpZW50IGEgc3RhdGljIGxpc3Qgb2YgZGlzcGxheSBtb2Rl cyAqLworc3RhdGljIGludCBkcm1fY2xpZW50X2Rpc3BsYXlfY29weV9tb2RlcyhzdHJ1Y3QgZHJt X2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5KQoreworCWludCBoZGlzcGxheSA9IDAsIHZkaXNwbGF5 ID0gMCwgdnJlZnJlc2g7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRpc3BsYXktPmRldjsK KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKmNvcHk7CisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0OworCXVuc2ln bmVkIGludCBjb3VudCA9IDA7CisKKwlkcm1fY2xpZW50X2Rpc3BsYXlfZm9yX2VhY2hfbW9kZXNl dChtb2Rlc2V0LCBkaXNwbGF5KSB7CisJCWlmICghbW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMgfHwg IW1vZGVzZXQtPm1vZGUpCisJCQljb250aW51ZTsKKworCQljb25uZWN0b3IgPSBtb2Rlc2V0LT5j b25uZWN0b3JzWzBdOworCQltb2RlID0gbW9kZXNldC0+bW9kZTsKKwkJY291bnQrKzsKKworCQlp ZiAobW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMgPT0gMikgeworCQkJLyogQ2xvbmVkIG91dHB1dCAq LworCQkJY29weSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGVzZXQtPm1vZGUpOworCQkJ aWYgKCFjb3B5KQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJbGlzdF9hZGRfdGFpbCgmY29weS0+ aGVhZCwgJmRpc3BsYXktPm1vZGVzKTsKKwkJCWRpc3BsYXktPm1vZGUgPSBjb3B5OworCisJCQly ZXR1cm4gMDsKKwkJfQorCisJCWlmICghbW9kZXNldC0+eSkKKwkJCWhkaXNwbGF5ICs9IG1vZGVz ZXQtPm1vZGUtPmhkaXNwbGF5OworCQlpZiAoIW1vZGVzZXQtPngpCisJCQl2ZGlzcGxheSArPSBt b2Rlc2V0LT5tb2RlLT52ZGlzcGxheTsKKwkJdnJlZnJlc2ggPSBtb2Rlc2V0LT5tb2RlLT52cmVm cmVzaDsKKwl9CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCWlmIChjb3VudCA9PSAx KSB7CisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICppdGVyOworCisJCWxpc3RfZm9yX2VhY2hf ZW50cnkoaXRlciwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKKwkJCWNvcHkgPSBkcm1fbW9k ZV9kdXBsaWNhdGUoZGV2LCBpdGVyKTsKKwkJCWlmICghY29weSkKKwkJCQlyZXR1cm4gLUVOT01F TTsKKwkJCWxpc3RfYWRkX3RhaWwoJmNvcHktPmhlYWQsICZkaXNwbGF5LT5tb2Rlcyk7CisJCQlp ZiAoIWRpc3BsYXktPm1vZGUgJiYgZHJtX21vZGVfZXF1YWwoaXRlciwgbW9kZSkpCisJCQkJZGlz cGxheS0+bW9kZSA9IGNvcHk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBDb21iaW5lZCB0aWxlIG1v ZGUuIE9ubHkgdGhlIGRlZmF1bHQgb25lIGZvciBub3cgKi8KKwkJY29weSA9IGRybV9jdnRfbW9k ZShkZXYsIGhkaXNwbGF5LCB2ZGlzcGxheSwgdnJlZnJlc2gsIGZhbHNlLCBmYWxzZSwgZmFsc2Up OworCQlpZiAoIWNvcHkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbGlzdF9hZGRfdGFpbCgmY29w eS0+aGVhZCwgJmRpc3BsYXktPm1vZGVzKTsKKwkJZGlzcGxheS0+bW9kZSA9IGNvcHk7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKK2Ry bV9jbGllbnRfZmluZF9kaXNwbGF5X2RlZmF1bHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5z aWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQogewogCXN0cnVjdCBkcm1fY2xp ZW50X2Rpc3BsYXlfb2Zmc2V0ICpvZmZzZXRzOwogCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkg KmRpc3BsYXk7CkBAIC02OTUsMjUgKzc0OSw2IEBAIGRybV9jbGllbnRfZmluZF9kaXNwbGF5KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50CiAJ aW50IGksIGNvbm5lY3Rvcl9jb3VudDsKIAlib29sICplbmFibGVkOwogCi0JRFJNX0RFQlVHX0tN UygiXG4iKTsKLQotCWlmICghd2lkdGgpCi0JCXdpZHRoID0gZGV2LT5tb2RlX2NvbmZpZy5tYXhf d2lkdGg7Ci0JaWYgKCFoZWlnaHQpCi0JCWhlaWdodCA9IGRldi0+bW9kZV9jb25maWcubWF4X2hl aWdodDsKLQotCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCWlmICghZHJt X2NsaWVudF9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZGV2LCB3aWR0aCwgaGVpZ2h0KSkKLQkJRFJN X0RFQlVHX0tNUygiTm8gY29ubmVjdG9ycyByZXBvcnRlZCBjb25uZWN0ZWQgd2l0aCBtb2Rlc1xu Iik7Ci0KLQlpZiAoZGV2LT5kcml2ZXItPmluaXRpYWxfY2xpZW50X2Rpc3BsYXkpIHsKLQkJZGlz cGxheSA9IGRldi0+ZHJpdmVyLT5pbml0aWFsX2NsaWVudF9kaXNwbGF5KGRldiwgd2lkdGgsIGhl aWdodCk7Ci0JCWlmIChkaXNwbGF5KSB7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25m aWcubXV0ZXgpOwotCQkJcmV0dXJuIGRpc3BsYXk7Ci0JCX0KLQl9Ci0KIAljb25uZWN0b3JfY291 bnQgPSBkcm1fY29ubmVjdG9yX2dldF9hbGwoZGV2LCAmY29ubmVjdG9ycyk7CiAJaWYgKGNvbm5l Y3Rvcl9jb3VudCA8IDEpCiAJCXJldHVybiBOVUxMOwpAQCAtNzcyLDcgKzgwNyw2IEBAIGRybV9j bGllbnRfZmluZF9kaXNwbGF5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB3 aWR0aCwgdW5zaWduZWQgaW50CiAJCX0KIAl9CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPm1v ZGVfY29uZmlnLm11dGV4KTsKIAlkcm1fY29ubmVjdG9yX3B1dF9hbGwoY29ubmVjdG9ycywgY29u bmVjdG9yX2NvdW50KTsKIAlrZnJlZShjcnRjcyk7CiAJa2ZyZWUobW9kZXMpOwpAQCAtNzgxLDQg KzgxNSw1NyBAQCBkcm1fY2xpZW50X2ZpbmRfZGlzcGxheShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludAogCiAJcmV0dXJuIGRpc3BsYXk7CiB9 CisKKy8qKgorICogZHJtX2NsaWVudF9maW5kX2Rpc3BsYXkoKSAtIEZpbmQgZGlzcGxheQorICog QGRldjogRFJNIGRldmljZQorICogQHdpZHRoOiBNYXhpbXVtIGRpc3BsYXkgbW9kZSB3aWR0aCAo b3B0aW9uYWwpCisgKiBAaGVpZ2h0OiBNYXhpbXVtIGRpc3BsYXkgbW9kZSBoZWlnaHQgKG9wdGlv bmFsKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGRpc3BsYXkgdGhlIGNsaWVudCBj YW4gdXNlIGlmIG9uZSBpcyBmb3VuZC4KKyAqCisgKiBGcmVlIHJlc291cmNlcyBieSBjYWxsaW5n IGRybV9jbGllbnRfZGlzcGxheV9mcmVlKCkuCisgKgorICogUmV0dXJuczoKKyAqIEEgJmRybV9j bGllbnRfZGlzcGxheSBvbiBzdWNjZXNzLCBOVUxMIGlmIG5vIGNvbm5lY3RvcnMgYXJlIGZvdW5k CisgKiBvciBlcnJvciBwb2ludGVyIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBkcm1fY2xpZW50 X2Rpc3BsYXkgKgorZHJtX2NsaWVudF9maW5kX2Rpc3BsYXkoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQoreworCXN0cnVjdCBk cm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOworCWludCByZXQ7CisKKwlEUk1fREVC VUdfS01TKCJcbiIpOworCisJaWYgKCF3aWR0aCkKKwkJd2lkdGggPSBkZXYtPm1vZGVfY29uZmln Lm1heF93aWR0aDsKKwlpZiAoIWhlaWdodCkKKwkJaGVpZ2h0ID0gZGV2LT5tb2RlX2NvbmZpZy5t YXhfaGVpZ2h0OworCisJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwlp ZiAoIWRybV9jbGllbnRfcHJvYmVfY29ubmVjdG9yX21vZGVzKGRldiwgd2lkdGgsIGhlaWdodCkp CisJCURSTV9ERUJVR19LTVMoIk5vIGNvbm5lY3RvcnMgcmVwb3J0ZWQgY29ubmVjdGVkIHdpdGgg bW9kZXNcbiIpOworCisJaWYgKGRldi0+ZHJpdmVyLT5pbml0aWFsX2NsaWVudF9kaXNwbGF5KQor CQlkaXNwbGF5ID0gZGV2LT5kcml2ZXItPmluaXRpYWxfY2xpZW50X2Rpc3BsYXkoZGV2LCB3aWR0 aCwgaGVpZ2h0KTsKKworCWlmICghZGlzcGxheSkKKwkJZGlzcGxheSA9IGRybV9jbGllbnRfZmlu ZF9kaXNwbGF5X2RlZmF1bHQoZGV2LCB3aWR0aCwgaGVpZ2h0KTsKKworCWlmIChJU19FUlJfT1Jf TlVMTChkaXNwbGF5KSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJcmV0ID0gZHJtX2NsaWVudF9k aXNwbGF5X2NvcHlfbW9kZXMoZGlzcGxheSk7CisJaWYgKHJldCkgeworCQlkcm1fY2xpZW50X2Rp c3BsYXlfZnJlZShkaXNwbGF5KTsKKwkJZGlzcGxheSA9IEVSUl9QVFIocmV0KTsKKwl9CisKK291 dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKworCXJl dHVybiBkaXNwbGF5OworfQogRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2ZpbmRfZGlzcGxheSk7 CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY2xpZW50LmggYi9pbmNsdWRlL2RybS9kcm1f Y2xpZW50LmgKaW5kZXggM2JlZmQ4NzlhMGIwLi41MjRmNzkzZDZlN2IgMTAwNjQ0Ci0tLSBhL2lu Y2x1ZGUvZHJtL2RybV9jbGllbnQuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY2xpZW50LmgKQEAg LTMsOSArMywxMiBAQAogI2lmbmRlZiBfRFJNX0NMSUVOVF9IXwogI2RlZmluZSBfRFJNX0NMSUVO VF9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IGRybV9jb25uZWN0b3I7 CiBzdHJ1Y3QgZHJtX2NydGM7CiBzdHJ1Y3QgZHJtX2RldmljZTsKK3N0cnVjdCBkcm1fZGlzcGxh eV9tb2RlOwogc3RydWN0IGRybV9tb2RlX3NldDsKIHN0cnVjdCBkcm1fcGxhbmU7CiAKQEAgLTMz LDYgKzM2LDIwIEBAIHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgewogCSAqIE51bWJlciBvZiBt b2Rlc2V0cwogCSAqLwogCXVuc2lnbmVkIGludCBtb2Rlc2V0X2NvdW50OworCisJLyoqCisJICog QG1vZGVzOgorCSAqCisJICogRGlzcGxheSBtb2RlcyBhdmFpbGFibGUgb24gdGhpcyBkaXNwbGF5 LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbW9kZXM7CisKKwkvKioKKwkgKiBAbW9kZToKKwkg KgorCSAqIFRoZSBjdXJyZW50IGRpc3BsYXkgbW9kZS4KKwkgKi8KKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZTsKIH07CiAKIHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRybV9jbGll bnRfZGlzcGxheV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CkBAIC01MSw0ICs2OCwx MiBAQCBpbnQgZHJtX2NsaWVudF9kaXNwbGF5X2RwbXMoc3RydWN0IGRybV9jbGllbnRfZGlzcGxh eSAqZGlzcGxheSwgaW50IG1vZGUpOwogc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqCiBkcm1f Y2xpZW50X2ZpbmRfZGlzcGxheShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQg d2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQpOwogCisvKioKKyAqIGRybV9jbGllbnRfZGlzcGxh eV9mb3JfZWFjaF9tb2RlIC0gSXRlcmF0ZSBvdmVyIHRoZSBhdmFpbGFibGUgZGlzcGxheSBtb2Rl cworICogQG1vZGU6IEEgQGRybV9kaXNwbGF5X21vZGUgbG9vcCBjdXJzb3IKKyAqIEBkaXNwbGF5 OiBDbGllbnQgZGlzcGxheQorICovCisjZGVmaW5lIGRybV9jbGllbnRfZGlzcGxheV9mb3JfZWFj aF9tb2RlKG1vZGUsIGRpc3BsYXkpIFwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZkaXNw bGF5LT5tb2RlcywgaGVhZCkKKwogI2VuZGlmCi0tIAoyLjE1LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=