From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shashank Sharma Subject: [REBASE v9 5/8] drm/i915: Add AVI infoframe support for LSPCON Date: Wed, 30 May 2018 15:47:52 +0530 Message-ID: <1527675475-18114-6-git-send-email-shashank.sharma@intel.com> References: <1527675475-18114-1-git-send-email-shashank.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id BC2337382F for ; Wed, 30 May 2018 10:10:25 +0000 (UTC) In-Reply-To: <1527675475-18114-1-git-send-email-shashank.sharma@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Imre Deak List-Id: intel-gfx@lists.freedesktop.org SW4gb3JkZXIgdG8gcGFzcyBBVkkgaW5mb2ZyYW1lcyB0byBMU1BDT04gZGV2aWNlcywgYSBzb3Vy Y2UgaGFzIHRvCndyaXRlIHRoZW0gaW4gYSB2ZW5kb3IgcmVjb21tZW5kZWQgbWV0aG9kIGFuZCBs b2NhdGlvbi4KClRoaXMgcGF0Y2ggc2VyaWVzOgotIGFkZHMgZ2VuZXJpYyBMU1BDT04gaW5mb2Zy YW1lIHNldHVwIGZ1bmN0aW9ucy4KLSByZWdpc3RlcnMgdGhlc2UgZnVuY3Rpb25zIGludG8gZXhp c3RpbmcgQVZJIGluZm9mcmFtZSBmcmFtZXdvcmsuCi0gdHJpZ2dlcnMgdGhlc2UgZnVuY3Rpb25z IGZyb20gbW9kZXNldCBzZXF1ZW5jZS4KCk5leHQgcGF0Y2hlcyBpbiB0aGUgc2VyaWVzIHdpbGwg YWRkIHZlbmRvciBzcGVjaWZpYyBjb2RlLgoKVjI6IEFkZGVkIG5ldyBwYXJhbWV0ZXIgdG8gYWxp Z24gd2l0aCBuZXcgZGVmaW5pdGlvbiBvZgogICAgZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9xdWFu dF9yYW5nZQpWMzogQWRkZWQgci1iIGZyb20gTWFhcnRlbiAoZm9yIFYyKQogICAgQWRkZWQgbmV3 IHBhcmFtZXRlciBvdXRwdXRfZm9ybWF0IGluIHN0cnVjdCBsc3Bjb24gdG8gYWNjb21tb2RhdGUK ICAgIFZpbGxlJ3MgcmV2aWV3IGNvbW1lbnRzIG9uIGxhc3QgcGF0Y2ggb2YgdGhlIHNlcmllcwpW NDogQWRkcmVzc2VkIFZpbGxlJ3MgcmV2aWV3IGNvbW1lbnQKICAgIC0gRG8gbm90IGFkZCBvdXRw dXRfZm9ybWF0IGluIExTUENPTiBzdGF0ZSwgYXMgaXRzIG5vbi1hdG9taWMuIEFkZAogICAgICB0 aGlzIGludG8gQ1JUQyBzdGF0ZSAoYWRkZWQgaW4gYSBsYXRlciBwYXRjaCkuClY1OiBSZWJhc2UK VjY6IFJlYmFzZQpWNzogUmViYXNlClY4OiBSZWJhc2UKCkNjOiBWaWxsZSBTeXJqYWxhIDx2aWxs ZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IEltcmUgRGVhayA8aW1yZS5kZWFrQGxpbnV4 LmludGVsLmNvbT4KQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51 eC5pbnRlbC5jb20+ClJldmlld2VkLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5r aG9yc3RAbGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBTaGFzaGFuayBTaGFybWEgPHNo YXNoYW5rLnNoYXJtYUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGRpLmMgICAgfCAxOSArKysrKysrKysrKy0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHJ2LmggICAgfCAxMyArKysrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1p LmMgICB8IDEzICsrKysrKystLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xzcGNvbi5j IHwgNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFu Z2VkLCA4NiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGRpLmMKaW5kZXggMWM1NWZiMi4uMTcwM2JlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGRpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMK QEAgLTI2NTksMTAgKzI2NTksMjIgQEAgc3RhdGljIHZvaWQgaW50ZWxfZGRpX3ByZV9lbmFibGUo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCiAKIAlpbnRlbF9zZXRfY3B1X2ZpZm9fdW5k ZXJydW5fcmVwb3J0aW5nKGRldl9wcml2LCBwaXBlLCB0cnVlKTsKIAotCWlmIChpbnRlbF9jcnRj X2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSkKKwlpZiAoaW50ZWxfY3J0 Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfSERNSSkpIHsKIAkJaW50ZWxfZGRp X3ByZV9lbmFibGVfaGRtaShlbmNvZGVyLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKLQllbHNl CisJfSBlbHNlIHsKKwkJc3RydWN0IGludGVsX2xzcGNvbiAqbHNwY29uID0KKwkJCQllbmNfdG9f aW50ZWxfbHNwY29uKCZlbmNvZGVyLT5iYXNlKTsKKwogCQlpbnRlbF9kZGlfcHJlX2VuYWJsZV9k cChlbmNvZGVyLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsKKwkJaWYgKGxzcGNvbi0+YWN0aXZl KSB7CisJCQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9CisJCQkJCWVuY190 b19kaWdfcG9ydCgmZW5jb2Rlci0+YmFzZSk7CisKKwkJCWRpZ19wb3J0LT5zZXRfaW5mb2ZyYW1l cygmZW5jb2Rlci0+YmFzZSwKKwkJCQkJCSBjcnRjX3N0YXRlLT5oYXNfaW5mb2ZyYW1lLAorCQkJ CQkJIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOworCQl9CisJfQogfQogCiBzdGF0aWMgdm9pZCBp bnRlbF9kaXNhYmxlX2RkaV9idWYoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCkBAIC0z NTE1LDggKzM1MjcsNiBAQCB2b2lkIGludGVsX2RkaV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQpCiAJCU1JU1NJTkdfQ0FTRShwb3J0KTsKIAl9 CiAKLQlpbnRlbF9pbmZvZnJhbWVfaW5pdChpbnRlbF9kaWdfcG9ydCk7Ci0KIAlpZiAoaW5pdF9k cCkgewogCQlpZiAoIWludGVsX2RkaV9pbml0X2RwX2Nvbm5lY3RvcihpbnRlbF9kaWdfcG9ydCkp CiAJCQlnb3RvIGVycjsKQEAgLTM1NDYsNiArMzU1Niw3IEBAIHZvaWQgaW50ZWxfZGRpX2luaXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBvcnQgcG9ydCkKIAkJCQlw b3J0X25hbWUocG9ydCkpOwogCX0KIAorCWludGVsX2luZm9mcmFtZV9pbml0KGludGVsX2RpZ19w b3J0KTsKIAlyZXR1cm47CiAKIGVycjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggYmZm ZGRlZi4uZTQ5OWI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTEyOTMsNiArMTI5 MywxMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9kcCAqZW5jX3RvX2ludGVsX2RwKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAlyZXR1cm4gJmVuY190b19kaWdfcG9ydChlbmNv ZGVyKS0+ZHA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2xzcGNvbiAqCitlbmNf dG9faW50ZWxfbHNwY29uKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlyZXR1cm4g JmVuY190b19kaWdfcG9ydChlbmNvZGVyKS0+bHNwY29uOworfQorCiBzdGF0aWMgaW5saW5lIHN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKgogZHBfdG9fZGlnX3BvcnQoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCkKIHsKQEAgLTE4MzYsNyArMTg0Miw2IEBAIGJvb2wgaW50ZWxfaGRtaV9oYW5k bGVfc2lua19zY3JhbWJsaW5nKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogdm9pZCBp bnRlbF9kcF9kdWFsX21vZGVfc2V0X3RtZHNfb3V0cHV0KHN0cnVjdCBpbnRlbF9oZG1pICpoZG1p LCBib29sIGVuYWJsZSk7CiB2b2lkIGludGVsX2luZm9mcmFtZV9pbml0KHN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0KTsKIAotCiAvKiBpbnRlbF9sdmRzLmMgKi8KIGJv b2wgaW50ZWxfbHZkc19wb3J0X2VuYWJsZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAogCQkJICAgICBpOTE1X3JlZ190IGx2ZHNfcmVnLCBlbnVtIHBpcGUgKnBpcGUpOwpAQCAt MjE2Miw2ICsyMTY3LDEyIEBAIHZvaWQgaW50ZWxfY29sb3JfbG9hZF9sdXRzKHN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiBib29sIGxzcGNvbl9pbml0KHN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0KTsKIHZvaWQgbHNwY29uX3Jlc3VtZShzdHJ1Y3Qg aW50ZWxfbHNwY29uICpsc3Bjb24pOwogdm9pZCBsc3Bjb25fd2FpdF9wY29uX21vZGUoc3RydWN0 IGludGVsX2xzcGNvbiAqbHNwY29uKTsKK3ZvaWQgbHNwY29uX3NldF9pbmZvZnJhbWVzKHN0cnVj dCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgIGJvb2wgZW5hYmxlLAorCQkJICAgY29uc3Qg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7Citib29sIGxzcGNvbl9pbmZvZnJhbWVf ZW5hYmxlZChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCisJCQkgICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpOwogCiAvKiBpbnRlbF9waXBlX2NyYy5j ICovCiBpbnQgaW50ZWxfcGlwZV9jcmNfY3JlYXRlKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwppbmRleCBjNzQxZWY1Li42ZWE5NjJlIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfaGRtaS5jCkBAIC0yMjY3LDkgKzIyNjcsMTYgQEAgdm9pZCBpbnRlbF9p bmZvZnJhbWVfaW5pdChzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCkK IAkJaW50ZWxfZGlnX3BvcnQtPnNldF9pbmZvZnJhbWVzID0gZzR4X3NldF9pbmZvZnJhbWVzOwog CQlpbnRlbF9kaWdfcG9ydC0+aW5mb2ZyYW1lX2VuYWJsZWQgPSBnNHhfaW5mb2ZyYW1lX2VuYWJs ZWQ7CiAJfSBlbHNlIGlmIChIQVNfRERJKGRldl9wcml2KSkgewotCQlpbnRlbF9kaWdfcG9ydC0+ d3JpdGVfaW5mb2ZyYW1lID0gaHN3X3dyaXRlX2luZm9mcmFtZTsKLQkJaW50ZWxfZGlnX3BvcnQt PnNldF9pbmZvZnJhbWVzID0gaHN3X3NldF9pbmZvZnJhbWVzOwotCQlpbnRlbF9kaWdfcG9ydC0+ aW5mb2ZyYW1lX2VuYWJsZWQgPSBoc3dfaW5mb2ZyYW1lX2VuYWJsZWQ7CisJCWlmIChpbnRlbF9k aWdfcG9ydC0+bHNwY29uLmFjdGl2ZSkgeworCQkJaW50ZWxfZGlnX3BvcnQtPnNldF9pbmZvZnJh bWVzID0gbHNwY29uX3NldF9pbmZvZnJhbWVzOworCQkJaW50ZWxfZGlnX3BvcnQtPmluZm9mcmFt ZV9lbmFibGVkID0KKwkJCQkJCWxzcGNvbl9pbmZvZnJhbWVfZW5hYmxlZDsKKwkJfSBlbHNlIHsK KwkJCWludGVsX2RpZ19wb3J0LT5zZXRfaW5mb2ZyYW1lcyA9IGhzd19zZXRfaW5mb2ZyYW1lczsK KwkJCWludGVsX2RpZ19wb3J0LT5pbmZvZnJhbWVfZW5hYmxlZCA9CisJCQkJCQloc3dfaW5mb2Zy YW1lX2VuYWJsZWQ7CisJCQlpbnRlbF9kaWdfcG9ydC0+d3JpdGVfaW5mb2ZyYW1lID0gaHN3X3dy aXRlX2luZm9mcmFtZTsKKwkJfQogCX0gZWxzZSBpZiAoSEFTX1BDSF9JQlgoZGV2X3ByaXYpKSB7 CiAJCWludGVsX2RpZ19wb3J0LT53cml0ZV9pbmZvZnJhbWUgPSBpYnhfd3JpdGVfaW5mb2ZyYW1l OwogCQlpbnRlbF9kaWdfcG9ydC0+c2V0X2luZm9mcmFtZXMgPSBpYnhfc2V0X2luZm9mcmFtZXM7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sc3Bjb24uYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xzcGNvbi5jCmluZGV4IDQwOTI5YzIuLjU2NTI2ZWIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xzcGNvbi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2xzcGNvbi5jCkBAIC0yMzQsNiArMjM0LDU1IEBAIHN0YXRp YyB2b2lkIGxzcGNvbl9yZXN1bWVfaW5fcGNvbl93YShzdHJ1Y3QgaW50ZWxfbHNwY29uICpsc3Bj b24pCiAJRFJNX0RFQlVHX0tNUygiTFNQQ09OIERQIGRlc2NyaXB0b3IgbWlzbWF0Y2ggYWZ0ZXIg cmVzdW1lXG4iKTsKIH0KIAordm9pZCBsc3Bjb25fc2V0X2luZm9mcmFtZXMoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLAorCQkJICAgYm9vbCBlbmFibGUsCisJCQkgICBjb25zdCBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQoreworCXNzaXplX3QgcmV0OworCXVuaW9uIGhkbWlf aW5mb2ZyYW1lIGZyYW1lOworCXVpbnQ4X3QgYnVmW1ZJREVPX0RJUF9EQVRBX1NJWkVdOworCXN0 cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZW5jX3RvX2RpZ19wb3J0KGVuY29k ZXIpOworCXN0cnVjdCBpbnRlbF9sc3Bjb24gKmxzcGNvbiA9ICZkaWdfcG9ydC0+bHNwY29uOwor CXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSAmZGlnX3BvcnQtPmRwOworCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IgPSAmaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3Rvci0+YmFz ZTsKKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZjcnRjX3N0YXRlLT5i YXNlLmFkanVzdGVkX21vZGU7CisJYm9vbCBpc19oZG1pMl9zaW5rID0gY29ubmVjdG9yLT5kaXNw bGF5X2luZm8uaGRtaS5zY2RjLnN1cHBvcnRlZDsKKworCWlmICghbHNwY29uLT5hY3RpdmUpIHsK KwkJRFJNX0VSUk9SKCJXcml0aW5nIGluZm9mcmFtZXMgd2hpbGUgTFNQQ09OIGRpc2FibGVkID9c biIpOworCQlyZXR1cm47CisJfQorCisJcmV0ID0gZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9t X2Rpc3BsYXlfbW9kZSgmZnJhbWUuYXZpLAorCQkJCQkJICAgICAgIG1vZGUsIGlzX2hkbWkyX3Np bmspOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiY291bGRuJ3QgZmlsbCBBVkkgaW5m b2ZyYW1lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRybV9oZG1pX2F2aV9pbmZvZnJhbWVfcXVh bnRfcmFuZ2UoJmZyYW1lLmF2aSwgbW9kZSwKKwkJCQkJICAgY3J0Y19zdGF0ZS0+bGltaXRlZF9j b2xvcl9yYW5nZSA/CisJCQkJCSAgIEhETUlfUVVBTlRJWkFUSU9OX1JBTkdFX0xJTUlURUQgOgor CQkJCQkgICBIRE1JX1FVQU5USVpBVElPTl9SQU5HRV9GVUxMLAorCQkJCQkgICBmYWxzZSwgaXNf aGRtaTJfc2luayk7CisKKwlyZXQgPSBoZG1pX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmLCBz aXplb2YoYnVmKSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcGFj ayBBVkkgSUZcbiIpOworCQlyZXR1cm47CisJfQorCisJZGlnX3BvcnQtPndyaXRlX2luZm9mcmFt ZShlbmNvZGVyLCBjcnRjX3N0YXRlLCBIRE1JX0lORk9GUkFNRV9UWVBFX0FWSSwKKwkJCQkgIGJ1 ZiwgcmV0KTsKK30KKworYm9vbCBsc3Bjb25faW5mb2ZyYW1lX2VuYWJsZWQoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KnBpcGVfY29uZmlnKQoreworCXJldHVybiBlbmNfdG9faW50ZWxfbHNwY29uKGVuY29kZXIpLT5h Y3RpdmU7Cit9CisKIHZvaWQgbHNwY29uX3Jlc3VtZShzdHJ1Y3QgaW50ZWxfbHNwY29uICpsc3Bj b24pCiB7CiAJZW51bSBkcm1fbHNwY29uX21vZGUgZXhwZWN0ZWRfbW9kZTsKLS0gCjIuNy40Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK