From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?=C5=81ukasz=20Daniluk?= Subject: [PATCH v3] drm/i915/bdw: Check for slice, subslice and EU count for BDW Date: Thu, 17 Sep 2015 13:51:58 +0200 Message-ID: <1442490718-10052-1-git-send-email-lukasz.daniluk@intel.com> References: <1441208878-8853-1-git-send-email-lukasz.daniluk@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 968F16E588 for ; Thu, 17 Sep 2015 02:59:45 -0700 (PDT) In-Reply-To: <1441208878-8853-1-git-send-email-lukasz.daniluk@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 QWRkZWQgY2hlY2tzIGZvciBhdmFpbGFibGUgc2xpY2VzLCBzdWJzbGljZXMgYW5kIEVVcyBmb3Ig QnJvYWR3ZWxsLiBUaGlzCmluZm9ybWF0aW9uIGlzIGZpbGxlZCBpbiBpbnRlbF9kZXZpY2VfaW5m byBhbmQgaXMgYXZhaWxhYmxlIHRvIHVzZXIgd2l0aApHRVRfUEFSQU0uCkFkZGVkIGNoZWNrcyBm b3IgZW5hYmxlZCBzbGljZXMsIHN1YnNsaWNlcyBhbmQgRVUgZm9yIEJyb2Fkd2VsbC4gVGhpcwpp bmZvcm1hdGlvbiBpcyBiYXNlZCBvbiBhdmFpbGFibGUgY291bnRzIGJ1dCB0YWtlcyBwb3dlciBn YXRlZCBzbGljZXMKaW50byBhY2NvdW50LiBJdCBjYW4gYmUgcmVhZCBpbiBkZWJ1Z2ZzLgpJbnRy b2R1Y2UgbmV3IHJlZ2lzdGVyIGRlZmluZXMgdGhhdCBjb250YWluIGluZm9ybWF0aW9uIG9uIHNs aWNlcyBvbgpCcm9hZHdlbGwuCgp2MjoKLSBJbnRyb2R1Y2UgR1RfU0xJQ0VfSU5GTyByZWdpc3Rl cgotIENoYW5nZSBCcm9hZHdlbGwgc3NldV9kZXZpY2Vfc3RhdHVzIGZ1bmN0aW9uIHRvIHVzZSBH VF9TTElDRV9JTkZPCiAgcmVnaXN0ZXIgaW5zdGVhZCBvZiBSUENTIHJlZ2lzdGVyCi0gVW5kbyBy ZW1vdmFsIG9mIGRldl9wcml2IHZhcmlhYmxlcyBpbiBDaGVycnl2aWV3IGFuZCBHZW45CiAgc3Nl dV9kZXZpY2Vfc2F0dXMgZnVuY3Rpb25zCgp2MzoKLSBGaXggc3R5bGUgaXNzdWVzCgpDYzogSmVm ZiBNY2dlZSA8amVmZi5tY2dlZUBpbnRlbC5jb20+CkNjOiBBcnVuIFNpbHV2ZXJ5IDxhcnVuLnNp bHV2ZXJ5QGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogxYF1a2FzeiBEYW5pbHVrIDxs dWthc3ouZGFuaWx1a0BpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k ZWJ1Z2ZzLmMgfCAyOSArKysrKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k bWEuYyAgICAgfCA4MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICB8IDIyICsrKysrKysrKy0KIDMgZmlsZXMg Y2hhbmdlZCwgMTI4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYwppbmRleCA3MmFlMzQ3Li5kMGY3ODRkIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2RlYnVnZnMuYwpAQCAtNTAzNywxMyArNTAzNywzOCBAQCBzdGF0aWMgdm9pZCBnZW45 X3NzZXVfZGV2aWNlX3N0YXR1cyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCX0KIH0KIAorc3Rh dGljIHZvaWQgYnJvYWR3ZWxsX3NzZXVfZGV2aWNlX3N0YXR1cyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJCQkgc3RydWN0IHNzZXVfZGV2X3N0YXR1cyAqc3RhdCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBzOworCXUz MiBzbGljZV9pbmZvID0gSTkxNV9SRUFEKEdFTjhfR1RfU0xJQ0VfSU5GTyk7CisKKwlzdGF0LT5z bGljZV90b3RhbCA9IGh3ZWlnaHQzMihzbGljZV9pbmZvICYgR0VOOF9MU0xJQ0VTVEFUX01BU0sp OworCisJaWYgKHN0YXQtPnNsaWNlX3RvdGFsKSB7CisJCXN0YXQtPnN1YnNsaWNlX3Blcl9zbGlj ZSA9IElOVEVMX0lORk8oZGV2KS0+c3Vic2xpY2VfcGVyX3NsaWNlOworCQlzdGF0LT5zdWJzbGlj ZV90b3RhbCA9IHN0YXQtPnNsaWNlX3RvdGFsICoKKwkJCQkgICAgICAgc3RhdC0+c3Vic2xpY2Vf cGVyX3NsaWNlOworCQlzdGF0LT5ldV9wZXJfc3Vic2xpY2UgPSBJTlRFTF9JTkZPKGRldiktPmV1 X3Blcl9zdWJzbGljZTsKKwkJc3RhdC0+ZXVfdG90YWwgPSBzdGF0LT5ldV9wZXJfc3Vic2xpY2Ug KiBzdGF0LT5zdWJzbGljZV90b3RhbDsKKworCQkvKiBzdWJ0cmFjdCBmdXNlZCBvZmYgRVUocykg ZnJvbSBlbmFibGVkIHNsaWNlKHMpICovCisJCWZvciAocyA9IDA7IHMgPCBzdGF0LT5zbGljZV90 b3RhbDsgcysrKSB7CisJCQl1OCBzdWJzbGljZV83ZXUgPSBJTlRFTF9JTkZPKGRldiktPnN1YnNs aWNlXzdldVtzXTsKKworCQkJc3RhdC0+ZXVfdG90YWwgLT0gaHdlaWdodDgoc3Vic2xpY2VfN2V1 KTsKKwkJfQorCX0KK30KKwogc3RhdGljIGludCBpOTE1X3NzZXVfc3RhdHVzKHN0cnVjdCBzZXFf ZmlsZSAqbSwgdm9pZCAqdW51c2VkKQogewogCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0g KHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CiAJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CiAJc3RydWN0IHNzZXVfZGV2X3N0YXR1cyBzdGF0Owog Ci0JaWYgKChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDgpIHx8IElTX0JST0FEV0VMTChkZXYpKQor CWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDgpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc2Vx X3B1dHMobSwgIlNTRVUgRGV2aWNlIEluZm9cbiIpOwpAQCAtNTA2OCw2ICs1MDkzLDggQEAgc3Rh dGljIGludCBpOTE1X3NzZXVfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2Vk KQogCW1lbXNldCgmc3RhdCwgMCwgc2l6ZW9mKHN0YXQpKTsKIAlpZiAoSVNfQ0hFUlJZVklFVyhk ZXYpKSB7CiAJCWNoZXJyeXZpZXdfc3NldV9kZXZpY2Vfc3RhdHVzKGRldiwgJnN0YXQpOworCX0g ZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldikpIHsKKwkJYnJvYWR3ZWxsX3NzZXVfZGV2aWNlX3N0 YXR1cyhkZXYsICZzdGF0KTsKIAl9IGVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID49IDkp IHsKIAkJZ2VuOV9zc2V1X2RldmljZV9zdGF0dXMoZGV2LCAmc3RhdCk7CiAJfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZG1hLmMKaW5kZXggMDY2YTBlZi4uNmVjM2VkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rt YS5jCkBAIC03MTMsNiArNzEzLDg0IEBAIHN0YXRpYyB2b2lkIGdlbjlfc3NldV9pbmZvX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlpbmZvLT5oYXNfZXVfcGcgPSAoaW5mby0+ZXVfcGVy X3N1YnNsaWNlID4gMik7CiB9CiAKK3N0YXRpYyB2b2lkIGJyb2Fkd2VsbF9zc2V1X2luZm9faW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2RldmljZV9pbmZvICpp bmZvOworCWNvbnN0IGludCBzX21heCA9IDMsIHNzX21heCA9IDMsIGV1X21heCA9IDg7CisJaW50 IHMsIHNzOworCXUzMiBmdXNlMiwgZXVfZGlzYWJsZVtzX21heF0sIHNfZW5hYmxlLCBzc19kaXNh YmxlOworCisJZnVzZTIgPSBJOTE1X1JFQUQoR0VOOF9GVVNFMik7CisJc19lbmFibGUgPSAoZnVz ZTIgJiBHRU44X0YyX1NfRU5BX01BU0spID4+IEdFTjhfRjJfU19FTkFfU0hJRlQ7CisJc3NfZGlz YWJsZSA9IChmdXNlMiAmIEdFTjhfRjJfU1NfRElTX01BU0spID4+IEdFTjhfRjJfU1NfRElTX1NI SUZUOworCisJZXVfZGlzYWJsZVswXSA9IEk5MTVfUkVBRChHRU44X0VVX0RJU0FCTEUwKSAmIEdF TjhfRVVfRElTMF9TMF9NQVNLOworCWV1X2Rpc2FibGVbMV0gPSAoSTkxNV9SRUFEKEdFTjhfRVVf RElTQUJMRTApID4+IEdFTjhfRVVfRElTMF9TMV9TSElGVCkgfAorCQkJKChJOTE1X1JFQUQoR0VO OF9FVV9ESVNBQkxFMSkgJiBHRU44X0VVX0RJUzFfUzFfTUFTSykgPDwKKwkJCSAoMzIgLSBHRU44 X0VVX0RJUzBfUzFfU0hJRlQpKTsKKwlldV9kaXNhYmxlWzJdID0gKEk5MTVfUkVBRChHRU44X0VV X0RJU0FCTEUxKSA+PiBHRU44X0VVX0RJUzFfUzJfU0hJRlQpIHwKKwkJCSgoSTkxNV9SRUFEKEdF TjhfRVVfRElTQUJMRTIpICYgR0VOOF9FVV9ESVMyX1MyX01BU0spIDw8CisJCQkgKDMyIC0gR0VO OF9FVV9ESVMxX1MyX1NISUZUKSk7CisKKworCWluZm8gPSAoc3RydWN0IGludGVsX2RldmljZV9p bmZvICopJmRldl9wcml2LT5pbmZvOworCWluZm8tPnNsaWNlX3RvdGFsID0gaHdlaWdodDMyKHNf ZW5hYmxlKTsKKworCS8qCisJICogVGhlIHN1YnNsaWNlIGRpc2FibGUgZmllbGQgaXMgZ2xvYmFs LCBpLmUuIGl0IGFwcGxpZXMKKwkgKiB0byBlYWNoIG9mIHRoZSBlbmFibGVkIHNsaWNlcy4KKwkg Ki8KKwlpbmZvLT5zdWJzbGljZV9wZXJfc2xpY2UgPSBzc19tYXggLSBod2VpZ2h0MzIoc3NfZGlz YWJsZSk7CisJaW5mby0+c3Vic2xpY2VfdG90YWwgPSBpbmZvLT5zbGljZV90b3RhbCAqIGluZm8t PnN1YnNsaWNlX3Blcl9zbGljZTsKKworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIGVuYWJsZWQg c2xpY2VzIGFuZCBzdWJzbGljZXMgdG8KKwkgKiBjb3VudCB0aGUgdG90YWwgZW5hYmxlZCBFVS4K KwkgKi8KKwlmb3IgKHMgPSAwOyBzIDwgc19tYXg7IHMrKykgeworCQlpZiAoIShzX2VuYWJsZSAm ICgweDEgPDwgcykpKQorCQkJLyogc2tpcCBkaXNhYmxlZCBzbGljZSAqLworCQkJY29udGludWU7 CisKKwkJZm9yIChzcyA9IDA7IHNzIDwgc3NfbWF4OyBzcysrKSB7CisJCQl1MzIgbl9kaXNhYmxl ZDsKKworCQkJaWYgKHNzX2Rpc2FibGUgJiAoMHgxIDw8IHNzKSkKKwkJCQkvKiBza2lwIGRpc2Fi bGVkIHN1YnNsaWNlICovCisJCQkJY29udGludWU7CisKKwkJCW5fZGlzYWJsZWQgPSBod2VpZ2h0 OChldV9kaXNhYmxlW3NdID4+IChzcyAqIGV1X21heCkpOworCisJCQkvKgorCQkJICogUmVjb3Jk IHdoaWNoIHN1YnNsaWNlKHMpIGhhcyhoYXZlKSA3IEVVcy4gd2UKKwkJCSAqIGNhbiB0dW5lIHRo ZSBoYXNoIHVzZWQgdG8gc3ByZWFkIHdvcmsgYW1vbmcKKwkJCSAqIHN1YnNsaWNlcyBpZiB0aGV5 IGFyZSB1bmJhbGFuY2VkLgorCQkJICovCisJCQlpZiAoZXVfbWF4IC0gbl9kaXNhYmxlZCA9PSA3 KQorCQkJCWluZm8tPnN1YnNsaWNlXzdldVtzXSB8PSAxIDw8IHNzOworCisJCQlpbmZvLT5ldV90 b3RhbCArPSBldV9tYXggLSBuX2Rpc2FibGVkOworCQl9CisJfQorCisJLyoKKwkgKiBCRFcgaXMg ZXhwZWN0ZWQgdG8gYWx3YXlzIGhhdmUgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbiBvZiBFVSBhY3Jv c3MKKwkgKiBzdWJzbGljZXMgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgYW55IG9uZSBFVSBpbiBh bnkgb25lIHN1YnNsaWNlIG1heQorCSAqIGJlIGZ1c2VkIG9mZiBmb3IgZGllIHJlY292ZXJ5Lgor CSAqLworCWluZm8tPmV1X3Blcl9zdWJzbGljZSA9IGluZm8tPnN1YnNsaWNlX3RvdGFsID8KKwkJ RElWX1JPVU5EX1VQKGluZm8tPmV1X3RvdGFsLCBpbmZvLT5zdWJzbGljZV90b3RhbCkgOiAwOwor CisJLyoKKwkgKiBCRFcgc3VwcG9ydHMgc2xpY2UgcG93ZXIgZ2F0aW5nIG9uIGRldmljZXMgd2l0 aCBtb3JlIHRoYW4KKwkgKiBvbmUgc2xpY2UuCisJICovCisJaW5mby0+aGFzX3NsaWNlX3BnID0g KGluZm8tPnNsaWNlX3RvdGFsID4gMSk7CisJaW5mby0+aGFzX3N1YnNsaWNlX3BnID0gMDsKKwlp bmZvLT5oYXNfZXVfcGcgPSAwOworfQorCiAvKgogICogRGV0ZXJtaW5lIHZhcmlvdXMgaW50ZWxf ZGV2aWNlX2luZm8gZmllbGRzIGF0IHJ1bnRpbWUuCiAgKgpAQCAtNzgzLDYgKzg2MSw4IEBAIHN0 YXRpYyB2b2lkIGludGVsX2RldmljZV9pbmZvX3J1bnRpbWVfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQogCS8qIEluaXRpYWxpemUgc2xpY2Uvc3Vic2xpY2UvRVUgaW5mbyAqLwogCWlmIChJ U19DSEVSUllWSUVXKGRldikpCiAJCWNoZXJyeXZpZXdfc3NldV9pbmZvX2luaXQoZGV2KTsKKwll bHNlIGlmIChJU19CUk9BRFdFTEwoZGV2KSkKKwkJYnJvYWR3ZWxsX3NzZXVfaW5mb19pbml0KGRl dik7CiAJZWxzZSBpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSkKIAkJZ2VuOV9zc2V1X2lu Zm9faW5pdChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl Zy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA2N2JmMjA1Li5kYTg0 NDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTE4NzYsMTEgKzE4NzYsMjYgQEAgZW51 bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVmaW5lICAgQ0hWX0ZHVF9FVV9ESVNfU1MxX1Ix X01BU0sJKDB4ZiA8PCBDSFZfRkdUX0VVX0RJU19TUzFfUjFfU0hJRlQpCiAKICNkZWZpbmUgR0VO OF9GVVNFMgkJCTB4OTEyMAorI2RlZmluZSAgIEdFTjhfRjJfU1NfRElTX1NISUZUCQkyMQorI2Rl ZmluZSAgIEdFTjhfRjJfU1NfRElTX01BU0sJCSgweDcgPDwgR0VOOF9GMl9TU19ESVNfU0hJRlQp CiAjZGVmaW5lICAgR0VOOF9GMl9TX0VOQV9TSElGVAkJMjUKICNkZWZpbmUgICBHRU44X0YyX1Nf RU5BX01BU0sJCSgweDcgPDwgR0VOOF9GMl9TX0VOQV9TSElGVCkKIAotI2RlZmluZSAgIEdFTjlf RjJfU1NfRElTX1NISUZUCQkyMAotI2RlZmluZSAgIEdFTjlfRjJfU1NfRElTX01BU0sJCSgweGYg PDwgR0VOOV9GMl9TU19ESVNfU0hJRlQpCisjZGVmaW5lIEdFTjhfRVVfRElTQUJMRTAJCTB4OTEz NAorI2RlZmluZSAgIEdFTjhfRVVfRElTMF9TMF9NQVNLCQkweGZmZmZmZgorI2RlZmluZSAgIEdF TjhfRVVfRElTMF9TMV9TSElGVAkJMjQKKyNkZWZpbmUgICBHRU44X0VVX0RJUzBfUzFfTUFTSwkJ KDB4ZmYgPDwgR0VOOF9FVV9ESVMwX1MxX1NISUZUKQorCisjZGVmaW5lIEdFTjhfRVVfRElTQUJM RTEJCTB4OTEzOAorI2RlZmluZSAgIEdFTjhfRVVfRElTMV9TMV9NQVNLCQkweGZmZmYKKyNkZWZp bmUgICBHRU44X0VVX0RJUzFfUzJfU0hJRlQJCTE2CisjZGVmaW5lICAgR0VOOF9FVV9ESVMxX1My X01BU0sJCSgweGZmZmYgPDwgR0VOOF9FVV9ESVMxX1MyX1NISUZUKQorCisjZGVmaW5lIEdFTjhf RVVfRElTQUJMRTIJCTB4OTEzYworI2RlZmluZSAgIEdFTjhfRVVfRElTMl9TMl9NQVNLCQkweGZm CisKKyNkZWZpbmUgR0VOOV9GMl9TU19ESVNfU0hJRlQJCTIwCisjZGVmaW5lIEdFTjlfRjJfU1Nf RElTX01BU0sJCSgweGYgPDwgR0VOOV9GMl9TU19ESVNfU0hJRlQpCiAKICNkZWZpbmUgR0VOOV9F VV9ESVNBQkxFKHNsaWNlKQkJKDB4OTEzNCArIChzbGljZSkqMHg0KQogCkBAIC02ODY3LDYgKzY4 ODIsOSBAQCBlbnVtIHNrbF9kaXNwX3Bvd2VyX3dlbGxzIHsKICNkZWZpbmUgICBHRU42X1JDNgkJ CTMKICNkZWZpbmUgICBHRU42X1JDNwkJCTQKIAorI2RlZmluZSBHRU44X0dUX1NMSUNFX0lORk8J CTB4MTM4MDY0CisjZGVmaW5lICAgR0VOOF9MU0xJQ0VTVEFUX01BU0sJCTB4NworCiAjZGVmaW5l IENIVl9QT1dFUl9TUzBfU0lHMQkJMHhhNzIwCiAjZGVmaW5lIENIVl9QT1dFUl9TUzFfU0lHMQkJ MHhhNzI4CiAjZGVmaW5lICAgQ0hWX1NTX1BHX0VOQUJMRQkJKDE8PDEpCi0tIApMdWthc3ogRGFu aWx1awoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK