From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: [PATCH v5 8/8] drm/i915: HSW cdclk support Date: Tue, 2 Jun 2015 10:21:06 +0300 Message-ID: <1433229666-3152-9-git-send-email-mika.kahola@intel.com> References: <1433229666-3152-1-git-send-email-mika.kahola@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 1596D6E7C1 for ; Tue, 2 Jun 2015 00:20:28 -0700 (PDT) In-Reply-To: <1433229666-3152-1-git-send-email-mika.kahola@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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCklt cGxlbWVudCBzdXBwb3J0IGZvciBjaGFuZ2luZyB0aGUgY2RjbGsgZnJlcXVlbmN5IGR1cmluZyBy dW50aW1lIG9uCkhTVy4gVkxWL0NIViBhbHJlYWR5IGhhdmUgc3VwcG9ydCBmb3IgdGhpcywgc28g d2UgY2FuIGZvbGxvdyB0aGVpcgpleGFtcGxlIGZvciB0aGUgbW9zdCBwYXJ0LiBPbmx5IHRoZSBh Y3R1YWwgaGFyZHdhcmUgcHJvZ3JhbW1pbmcgZGlmZmVycywKdGhlIHJlc3QgaXMgcHJldHR5IG11 Y2ggdGhlIHNhbWUuCgpUaGUgcGlwZSBwaXhlbCByYXRlIHN0dWZmIGlzIGhhbmRsZWQgYSBiaXQg ZGlmZmVyZW50bHkgZm9yIG5vdyBkdWUgdG8KdGhlIGRpZmZlcmVuY2UgaW4gcGNoIHZzLiBnbWNo IHBmaXQgaGFuZGxpbmcuIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIHVuaWZ5CnRoYXQgcGFydCB0byBl bGltaW5hdGUgd2hhdCBpcyBlc3NlbnRpYWxseSBkdXBsaWNhdGVkIGNvZGUuCgp2MjogR3JhYiBy cHMuaHdfbG9jayBhcm91bmQgc2FuZHlicmlkZ2VfcGNvZGVfd3JpdGUoKQp2MzogUmViYXNlIGR1 ZSB0byBwb3dlciB3ZWxsIHZzLiAuZ2xvYmFsX3Jlc291cmNlcygpIHJlb3JkZXJpbmcKClNpZ25l ZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ Cgp2MzogUmViYXNlZCB0byB0aGUgbGF0ZXN0CnY0OiBSZWZvcm1hdHRpbmcgJ2hhc3dlbGxfbW9k ZXNldF9nbG9iYWxfcGlwZXMnIGZ1bmN0aW9uIHRvCiAgICBzdXBwb3J0IGF0b21pYyBzdGF0ZQp2 NTogU2h1ZmZsaW5nIHRoZSBwYXRjaCBvcmRlciBzbyB0aGUgQnJvYWR3ZWxsIENEIGNsb2NrIHBh dGNoCiAgICBjYW4gYmUgYXBwbGllZCBiZWZvcmUgdGhpcyBIYXN3ZWxsIENEIGNsb2NrIHBhdGNo CgpTaWduZWQtb2ZmLWJ5OiBNaWthIEthaG9sYSA8bWlrYS5rYWhvbGFAaW50ZWwuY29tPgoKQXV0 aG9yOiAgICBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggICAgICB8ICAgMiArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAxMzcgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTM2IGluc2VydGlvbnMoKyksIDMgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggMGY3MmMwZS4uNDE4ZDE0OSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC02NzA1LDYgKzY3MDUsNyBAQCBlbnVtIHNrbF9k aXNwX3Bvd2VyX3dlbGxzIHsKICNkZWZpbmUJICBHRU42X1BDT0RFX1JFQURfUkM2VklEUwkJMHg1 CiAjZGVmaW5lICAgICBHRU42X0VOQ09ERV9SQzZfVklEKG12KQkJKCgobXYpIC0gMjQ1KSAvIDUp CiAjZGVmaW5lICAgICBHRU42X0RFQ09ERV9SQzZfVklEKHZpZHMpCQkoKCh2aWRzKSAqIDUpICsg MjQ1KQorI2RlZmluZSAgIEhTV19QQ09ERV9ERV9XUklURV9GUkVRX1JFUQkJMHgxNwogI2RlZmlu ZSAgIEJEV19QQ09ERV9ESVNQTEFZX0ZSRVFfQ0hBTkdFX1JFUQkweDE4CiAjZGVmaW5lICAgR0VO OV9QQ09ERV9SRUFEX01FTV9MQVRFTkNZCQkweDYKICNkZWZpbmUgICAgIEdFTjlfTUVNX0xBVEVO Q1lfTEVWRUxfTUFTSwkJMHhGRgpAQCAtNzE2Nyw2ICs3MTY4LDcgQEAgZW51bSBza2xfZGlzcF9w b3dlcl93ZWxscyB7CiAjZGVmaW5lICBMQ1BMTF9QTExfTE9DSwkJCSgxPDwzMCkKICNkZWZpbmUg IExDUExMX0NMS19GUkVRX01BU0sJCSgzPDwyNikKICNkZWZpbmUgIExDUExMX0NMS19GUkVRXzQ1 MAkJKDA8PDI2KQorI2RlZmluZSAgTENQTExfQ0xLX0ZSRVFfQUxUX0hTVwkJKDE8PDI2KSAvKiAz MzcuNSAoVUxYKSBvciA1NDAgKi8KICNkZWZpbmUgIExDUExMX0NMS19GUkVRXzU0T19CRFcJCSgx PDwyNikKICNkZWZpbmUgIExDUExMX0NMS19GUkVRXzMzN181X0JEVwkoMjw8MjYpCiAjZGVmaW5l ICBMQ1BMTF9DTEtfRlJFUV82NzVfQkRXCQkoMzw8MjYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k aXNwbGF5LmMKaW5kZXggM2Y1MGJiMS4uMjhjMDgzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwpAQCAtNTc1MSw3ICs1NzUxLDE2IEBAIHN0YXRpYyB2b2lkIGludGVsX3VwZGF0 ZV9tYXhfY2RjbGsoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKElTX0JST0FEV0VM TChkZXYpKSAgeworCWlmIChJU19IQVNXRUxMKGRldikpIHsKKwkJaWYgKEk5MTVfUkVBRChGVVNF X1NUUkFQKSAmIEhTV19DRENMS19MSU1JVCkKKwkJCWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9 IDQ1MDAwMDsKKwkJZWxzZSBpZiAoSVNfSFNXX1VMWChkZXYpKQorCQkJZGV2X3ByaXYtPm1heF9j ZGNsa19mcmVxID0gMzM3NTAwOworCQllbHNlIGlmIChJU19IU1dfVUxUKGRldikpCisJCQlkZXZf cHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSA0NTAwMDA7CisJCWVsc2UKKwkJCWRldl9wcml2LT5tYXhf Y2RjbGtfZnJlcSA9IDU0MDAwMDsKKwl9IGVsc2UgaWYgKElTX0JST0FEV0VMTChkZXYpKSAgewog CQkvKgogCQkgKiBGSVhNRSB3aXRoIGV4dHJhIGNvb2xpbmcgd2UgY2FuIGFsbG93CiAJCSAqIDU0 MCBNSHogZm9yIFVMWCBhbmQgNjc1IE1oeiBmb3IgVUxULgpAQCAtOTc1Nyw2ICs5NzY2LDgwIEBA IHN0YXRpYyBpbnQgYnJvYWR3ZWxsX2NhbGNfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAogCXJldHVybiBjZGNsazsKIH0KIAorc3RhdGljIHZvaWQgaGFzd2VsbF9zZXRf Y2RjbGsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNkY2xrKQoreworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgdmFs OworCisJaWYgKFdBUk4oKEk5MTVfUkVBRChMQ1BMTF9DVEwpICYKKwkJICAoTENQTExfUExMX0RJ U0FCTEUgfCBMQ1BMTF9QTExfTE9DSyB8CisJCSAgIExDUExMX0NEX0NMT0NLX0RJU0FCTEUgfCBM Q1BMTF9ST09UX0NEX0NMT0NLX0RJU0FCTEUgfAorCQkgICBMQ1BMTF9DRDJYX0NMT0NLX0RJU0FC TEUgfCBMQ1BMTF9QT1dFUl9ET1dOX0FMTE9XIHwKKwkJICAgTENQTExfQ0RfU09VUkNFX0ZDTEsp KSAhPSBMQ1BMTF9QTExfTE9DSywKKwkJICJ0cnlpbmcgdG8gY2hhbmdlIGNkY2xrIGZyZXF1ZW5j eSB3aXRoIGNkY2xrIG5vdCBlbmFibGVkXG4iKSkKKwkJcmV0dXJuOworCisJdmFsID0gSTkxNV9S RUFEKExDUExMX0NUTCk7CisJdmFsICY9IH5MQ1BMTF9DTEtfRlJFUV9NQVNLOworCisJc3dpdGNo IChjZGNsaykgeworCWNhc2UgNDUwMDAwOgorCQl2YWwgfD0gTENQTExfQ0xLX0ZSRVFfNDUwOwor CQlicmVhazsKKwljYXNlIDMzNzUwMDoKKwljYXNlIDU0MDAwMDoKKwkJdmFsIHw9IExDUExMX0NM S19GUkVRX0FMVF9IU1c7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk4oMSwgImludmFsaWQg Y2RjbGsgZnJlcXVlbmN5XG4iKTsKKwkJcmV0dXJuOworCX0KKworCUk5MTVfV1JJVEUoTENQTExf Q1RMLCB2YWwpOworCisJaWYgKElTX0hTV19VTFgoZGV2KSkgeworCQltdXRleF9sb2NrKCZkZXZf cHJpdi0+cnBzLmh3X2xvY2spOworCQlzYW5keWJyaWRnZV9wY29kZV93cml0ZShkZXZfcHJpdiwg SFNXX1BDT0RFX0RFX1dSSVRFX0ZSRVFfUkVRLAorCQkJCQljZGNsayA9PSAzMzc1MDApOworCQlt dXRleF91bmxvY2soJmRldl9wcml2LT5ycHMuaHdfbG9jayk7CisJfQorCisJaW50ZWxfdXBkYXRl X2NkY2xrKGRldik7CisKKwlXQVJOKGNkY2xrICE9IGRldl9wcml2LT5jZGNsa19mcmVxLAorCSAg ICAgImNkY2xrIHJlcXVlc3RlZCAlZCBrSHogYnV0IGdvdCAlZCBrSHpcbiIsCisJICAgICBjZGNs aywgZGV2X3ByaXYtPmNkY2xrX2ZyZXEpOworfQorCitzdGF0aWMgaW50IGhhc3dlbGxfY2FsY19j ZGNsayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICBpbnQgbWF4 X3BpeGVsX3JhdGUpCit7CisJaW50IGNkY2xrOworCisJLyoKKwkgKiBGSVhNRSBzaG91bGQgYWxz byBhY2NvdW50IGZvciBwbGFuZSByYXRpbworCSAqIG9uY2UgNjRicHAgcGl4ZWwgZm9ybWF0cyBh cmUgc3VwcG9ydGVkLgorCSAqLworCWlmIChtYXhfcGl4ZWxfcmF0ZSA+IDQ1MDAwMCkKKwkJY2Rj bGsgPSA1NDAwMDA7CisJZWxzZSBpZiAobWF4X3BpeGVsX3JhdGUgPiAzMzc1MDAgfHwgIUlTX0hT V19VTFgoZGV2X3ByaXYpKQorCQljZGNsayA9IDQ1MDAwMDsKKwllbHNlCisJCWNkY2xrID0gMzM3 NTAwOworCisJLyoKKwkgKiBGSVhNRSBtb3ZlIHRoZSBjZGNsayBjYWNsdWxhdGlvbiB0bworCSAq IGNvbXB1dGVfY29uZmlnKCkgc28gd2UgY2FuIGZhaWwgZ3JhY2VndWxseS4KKwkgKi8KKwlpZiAo Y2RjbGsgPiBkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEpIHsKKwkJRFJNX0VSUk9SKCJyZXF1ZXN0 ZWQgY2RjbGsgKCVkIGtIeikgZXhjZWVkcyBtYXggKCVkIGtIeilcbiIsCisJCQkgIGNkY2xrLCBk ZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEpOworCQljZGNsayA9IGRldl9wcml2LT5tYXhfY2RjbGtf ZnJlcTsKKwl9CisKKwlyZXR1cm4gY2RjbGs7Cit9CisKIHN0YXRpYyBpbnQgYnJvYWR3ZWxsX21v ZGVzZXRfZ2xvYmFsX3BpcGVzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5kZXYpOwpA QCAtOTc5OSw2ICs5ODgyLDQ5IEBAIHN0YXRpYyB2b2lkIGJyb2Fkd2VsbF9tb2Rlc2V0X2dsb2Jh bF9yZXNvdXJjZXMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCQlicm9hZHdlbGxf c2V0X2NkY2xrKGRldiwgcmVxX2NkY2xrKTsKIH0KIAorc3RhdGljIGludCBoYXN3ZWxsX21vZGVz ZXRfZ2xvYmFsX3BpcGVzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KHN0YXRlLT5kZXYpOworCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7 CisJaW50IG1heF9waXhjbGsgPSBpbGtfbWF4X3BpeGVsX3JhdGUoZGV2X3ByaXYpOworCWludCBj ZGNsaywgaTsKKworCWNkY2xrID0gaGFzd2VsbF9jYWxjX2NkY2xrKGRldl9wcml2LCBtYXhfcGl4 Y2xrKTsKKworCWlmIChjZGNsayA9PSBkZXZfcHJpdi0+Y2RjbGtfZnJlcSkKKwkJcmV0dXJuIDA7 CisKKwkvKiBhZGQgYWxsIGFjdGl2ZSBwaXBlcyB0byB0aGUgc3RhdGUgKi8KKwlmb3JfZWFjaF9j cnRjKHN0YXRlLT5kZXYsIGNydGMpIHsKKwkJaWYgKCFjcnRjLT5zdGF0ZS0+ZW5hYmxlKQorCQkJ Y29udGludWU7CisKKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3Rh dGUsIGNydGMpOworCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQorCQkJcmV0dXJuIFBUUl9FUlIo Y3J0Y19zdGF0ZSk7CisJfQorCisJLyogZGlzYWJsZS9lbmFibGUgYWxsIGN1cnJlbnRseSBhY3Rp dmUgcGlwZXMgd2hpbGUgd2UgY2hhbmdlIGNkY2xrICovCisJZm9yX2VhY2hfY3J0Y19pbl9zdGF0 ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkKKwkJaWYgKGNydGNfc3RhdGUtPmVuYWJsZSkK KwkJCWNydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgaGFzd2VsbF9tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXMoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzdGF0ZS0+ ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJaW50IG1heF9waXhlbF9yYXRlID0gaWxrX21heF9waXhlbF9yYXRlKGRldl9wcml2KTsK KwlpbnQgcmVxX2NkY2xrID0gaGFzd2VsbF9jYWxjX2NkY2xrKGRldl9wcml2LCBtYXhfcGl4ZWxf cmF0ZSk7CisKKwlpZiAocmVxX2NkY2xrICE9IGRldl9wcml2LT5jZGNsa19mcmVxKSB7CisJCWhh c3dlbGxfc2V0X2NkY2xrKGRldiwgcmVxX2NkY2xrKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgaGFz d2VsbF9jcnRjX2NvbXB1dGVfY2xvY2soc3RydWN0IGludGVsX2NydGMgKmNydGMsCiAJCQkJICAg ICAgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiB7CkBAIC0xMjk3OSwxMSAr MTMxMDUsMTMgQEAgc3RhdGljIGludCBfX2ludGVsX3NldF9tb2RlX2NoZWNrcyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJICogbW9kZSBzZXQgb24gdGhpcyBjcnRjLiAgRm9yIG90 aGVyIGNydGNzIHdlIG5lZWQgdG8gdXNlIHRoZQogCSAqIGFkanVzdGVkX21vZGUgYml0cyBpbiB0 aGUgY3J0YyBkaXJlY3RseS4KIAkgKi8KLQlpZiAoSVNfVkFMTEVZVklFVyhkZXYpIHx8IElTX0JS T1hUT04oZGV2KSB8fCBJU19CUk9BRFdFTEwoZGV2KSkgeworCWlmIChJU19WQUxMRVlWSUVXKGRl dikgfHwgSVNfQlJPWFRPTihkZXYpIHx8IElTX0JST0FEV0VMTChkZXYpIHx8IElTX0hBU1dFTEwo ZGV2KSkgewogCQlpZiAoSVNfVkFMTEVZVklFVyhkZXYpIHx8IElTX0JST1hUT04oZGV2KSkKIAkJ CXJldCA9IHZhbGxleXZpZXdfbW9kZXNldF9nbG9iYWxfcGlwZXMoc3RhdGUpOwotCQllbHNlCisJ CWVsc2UgaWYgKElTX0JST0FEV0VMTChkZXYpKQogCQkJcmV0ID0gYnJvYWR3ZWxsX21vZGVzZXRf Z2xvYmFsX3BpcGVzKHN0YXRlKTsKKwkJZWxzZQorCQkJcmV0ID0gaGFzd2VsbF9tb2Rlc2V0X2ds b2JhbF9waXBlcyhzdGF0ZSk7CiAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC0xNDg3 NSw2ICsxNTAwMyw5IEBAIHN0YXRpYyB2b2lkIGludGVsX2luaXRfZGlzcGxheShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQogCQlpZiAoSVNfQlJPQURXRUxMKGRldikpCiAJCQlkZXZfcHJpdi0+ZGlz cGxheS5tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXMgPQogCQkJCWJyb2Fkd2VsbF9tb2Rlc2V0X2ds b2JhbF9yZXNvdXJjZXM7CisJCWVsc2UKKwkJCWRldl9wcml2LT5kaXNwbGF5Lm1vZGVzZXRfZ2xv YmFsX3Jlc291cmNlcyA9CisJCQkJaGFzd2VsbF9tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXM7CiAJ fSBlbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldikpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkubW9k ZXNldF9nbG9iYWxfcmVzb3VyY2VzID0KIAkJCXZhbGxleXZpZXdfbW9kZXNldF9nbG9iYWxfcmVz b3VyY2VzOwotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==