From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2C17CC48BE8 for ; Wed, 16 Jun 2021 15:25:46 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E9D5C6128B for ; Wed, 16 Jun 2021 15:25:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E9D5C6128B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2CD1A6E483; Wed, 16 Jun 2021 15:25:37 +0000 (UTC) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2B7836E04B; Wed, 16 Jun 2021 15:25:36 +0000 (UTC) IronPort-SDR: VAhKHxoE/KyqXzMpNa6q1UcYG8xkWCqgNzlazLetnWShZnlB40+kniIsBiiTfOHcQ07BFaCCV3 oKqGHN5sj3fA== X-IronPort-AV: E=McAfee;i="6200,9189,10016"; a="206234417" X-IronPort-AV: E=Sophos;i="5.83,278,1616482800"; d="scan'208";a="206234417" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2021 08:25:29 -0700 IronPort-SDR: tav/Bjp7vcsS3deFhyrfNdmdHPJ20/gK93DRFgwdXyk65yAznrniLqZ2c1SDJ/O12t0lrecUQv HuRJISzwXLsg== X-IronPort-AV: E=Sophos;i="5.83,278,1616482800"; d="scan'208";a="479129890" Received: from mrapopor-mobl.ger.corp.intel.com (HELO mwauld-desk1.intel.com) ([10.213.236.122]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2021 08:25:28 -0700 From: Matthew Auld To: intel-gfx@lists.freedesktop.org Date: Wed, 16 Jun 2021 16:24:57 +0100 Message-Id: <20210616152501.394518-3-matthew.auld@intel.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210616152501.394518-1-matthew.auld@intel.com> References: <20210616152501.394518-1-matthew.auld@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v5 3/7] drm/i915/ttm: Calculate the object placement at get_pages time X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50ZWwuY29t PgoKSW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc3RhdGljIHBsYWNlbWVudCwgY2FsY3VsYXRlIGF0 IGdldF9wYWdlcygpIHRpbWUuClRoaXMgc2hvdWxkIHdvcmsgZm9yIExNRU0gcmVnaW9ucyBhbmQg c3lzdGVtIGZvciBub3cuIEZvciBzdG9sZW4gd2UgbmVlZAp0byB0YWtlIHByZWFsbG9jYXRlZCBy YW5nZSBpbnRvIGFjY291bnQuIFRoYXQgd2lsbCBpZiBuZWVkZWQgYmUgYWRkZWQKbGF0ZXIuCgpT aWduZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLmhlbGxzdHJvbUBsaW51eC5p bnRlbC5jb20+ClJldmlld2VkLWJ5OiBNYXR0aGV3IEF1bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5j b20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3R0bS5jIHwgOTMgKysr KysrKysrKysrKysrKysrLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmVnaW9u X3R0bS5jIHwgIDggKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fdHRtLmgg fCAgMiArCiAzIGZpbGVzIGNoYW5nZWQsIDc3IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0uYwppbmRleCBjZGYzNmQzY2Yw MmEuLmQ3NTk1Njg4ZTE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV90dG0u YwpAQCAtMjQsNiArMjQsMTEgQEAKICNkZWZpbmUgSTkxNV9UVE1fUFJJT19OT19QQUdFUyAgMQog I2RlZmluZSBJOTE1X1RUTV9QUklPX0hBU19QQUdFUyAyCiAKKy8qCisgKiBTaXplIG9mIHN0cnVj dCB0dG1fcGxhY2UgdmVjdG9yIGluIG9uLXN0YWNrIHN0cnVjdCB0dG1fcGxhY2VtZW50IGFsbG9j cworICovCisjZGVmaW5lIEk5MTVfVFRNX01BWF9QTEFDRU1FTlRTIElOVEVMX1JFR0lPTl9VTktO T1dOCisKIC8qKgogICogc3RydWN0IGk5MTVfdHRtX3R0IC0gVFRNIHBhZ2UgdmVjdG9yIHdpdGgg YWRkaXRpb25hbCBwcml2YXRlIGluZm9ybWF0aW9uCiAgKiBAdHRtOiBUaGUgYmFzZSBUVE0gcGFn ZSB2ZWN0b3IuCkBAIC00MiwzNiArNDcsNzEgQEAgc3RydWN0IGk5MTVfdHRtX3R0IHsKIAlzdHJ1 Y3Qgc2dfdGFibGUgKmNhY2hlZF9zdDsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHRtX3Bs YWNlIGxtZW0wX3N5c19wbGFjZW1lbnRfZmxhZ3NbXSA9IHsKLQl7Ci0JCS5mcGZuID0gMCwKLQkJ LmxwZm4gPSAwLAotCQkubWVtX3R5cGUgPSBJOTE1X1BMX0xNRU0wLAotCQkuZmxhZ3MgPSAwLAot CX0sIHsKLQkJLmZwZm4gPSAwLAotCQkubHBmbiA9IDAsCi0JCS5tZW1fdHlwZSA9IEk5MTVfUExf U1lTVEVNLAotCQkuZmxhZ3MgPSAwLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHRtX3BsYWNl bWVudCBpOTE1X2xtZW0wX3BsYWNlbWVudCA9IHsKLQkubnVtX3BsYWNlbWVudCA9IDEsCi0JLnBs YWNlbWVudCA9ICZsbWVtMF9zeXNfcGxhY2VtZW50X2ZsYWdzWzBdLAotCS5udW1fYnVzeV9wbGFj ZW1lbnQgPSAxLAotCS5idXN5X3BsYWNlbWVudCA9ICZsbWVtMF9zeXNfcGxhY2VtZW50X2ZsYWdz WzBdLAorc3RhdGljIGNvbnN0IHN0cnVjdCB0dG1fcGxhY2Ugc3lzX3BsYWNlbWVudF9mbGFncyA9 IHsKKwkuZnBmbiA9IDAsCisJLmxwZm4gPSAwLAorCS5tZW1fdHlwZSA9IEk5MTVfUExfU1lTVEVN LAorCS5mbGFncyA9IDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHR0bV9wbGFjZW1lbnQgaTkxNV9z eXNfcGxhY2VtZW50ID0gewogCS5udW1fcGxhY2VtZW50ID0gMSwKLQkucGxhY2VtZW50ID0gJmxt ZW0wX3N5c19wbGFjZW1lbnRfZmxhZ3NbMV0sCisJLnBsYWNlbWVudCA9ICZzeXNfcGxhY2VtZW50 X2ZsYWdzLAogCS5udW1fYnVzeV9wbGFjZW1lbnQgPSAxLAotCS5idXN5X3BsYWNlbWVudCA9ICZs bWVtMF9zeXNfcGxhY2VtZW50X2ZsYWdzWzFdLAorCS5idXN5X3BsYWNlbWVudCA9ICZzeXNfcGxh Y2VtZW50X2ZsYWdzLAogfTsKIAogc3RhdGljIHZvaWQgaTkxNV90dG1fYWRqdXN0X2xydShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAorc3RhdGljIGVudW0gdHRtX2NhY2hpbmcK K2k5MTVfdHRtX3NlbGVjdF90dF9jYWNoaW5nKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCit7CisJLyoKKwkgKiBPYmplY3RzIG9ubHkgYWxsb3dlZCBpbiBzeXN0ZW0gZ2V0 IGNhY2hlZCBjcHUtbWFwcGluZ3MuCisJICogT3RoZXIgb2JqZWN0cyBnZXQgV0MgbWFwcGluZyBm b3Igbm93LiBFdmVuIGlmIGluIHN5c3RlbS4KKwkgKi8KKwlpZiAob2JqLT5tbS5yZWdpb24tPnR5 cGUgPT0gSU5URUxfTUVNT1JZX1NZU1RFTSAmJgorCSAgICBvYmotPm1tLm5fcGxhY2VtZW50cyA8 PSAxKQorCQlyZXR1cm4gdHRtX2NhY2hlZDsKKworCXJldHVybiB0dG1fd3JpdGVfY29tYmluZWQ7 Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X3R0bV9wbGFjZV9mcm9tX3JlZ2lvbihjb25zdCBzdHJ1 Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbXIsCisJCQkgICBzdHJ1Y3QgdHRtX3BsYWNlICpwbGFj ZSkKK3sKKwltZW1zZXQocGxhY2UsIDAsIHNpemVvZigqcGxhY2UpKTsKKwlwbGFjZS0+bWVtX3R5 cGUgPSBpbnRlbF9yZWdpb25fdG9fdHRtX3R5cGUobXIpOworfQorCitzdGF0aWMgdm9pZAoraTkx NV90dG1fcGxhY2VtZW50X2Zyb21fb2JqKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCisJCQkgICAgc3RydWN0IHR0bV9wbGFjZSAqcmVxdWVzdGVkLAorCQkJICAgIHN0cnVj dCB0dG1fcGxhY2UgKmJ1c3ksCisJCQkgICAgc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVu dCkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2FsbG93ZWQgPSBvYmotPm1tLm5fcGxhY2VtZW50czsK Kwl1bnNpZ25lZCBpbnQgaTsKKworCXBsYWNlbWVudC0+bnVtX3BsYWNlbWVudCA9IDE7CisJaTkx NV90dG1fcGxhY2VfZnJvbV9yZWdpb24obnVtX2FsbG93ZWQgPyBvYmotPm1tLnBsYWNlbWVudHNb MF0gOgorCQkJCSAgIG9iai0+bW0ucmVnaW9uLCByZXF1ZXN0ZWQpOworCisJLyogQ2FjaGUgdGhp cyBvbiBvYmplY3Q/ICovCisJcGxhY2VtZW50LT5udW1fYnVzeV9wbGFjZW1lbnQgPSBudW1fYWxs b3dlZDsKKwlmb3IgKGkgPSAwOyBpIDwgcGxhY2VtZW50LT5udW1fYnVzeV9wbGFjZW1lbnQ7ICsr aSkKKwkJaTkxNV90dG1fcGxhY2VfZnJvbV9yZWdpb24ob2JqLT5tbS5wbGFjZW1lbnRzW2ldLCBi dXN5ICsgaSk7CisKKwlpZiAobnVtX2FsbG93ZWQgPT0gMCkgeworCQkqYnVzeSA9ICpyZXF1ZXN0 ZWQ7CisJCXBsYWNlbWVudC0+bnVtX2J1c3lfcGxhY2VtZW50ID0gMTsKKwl9CisKKwlwbGFjZW1l bnQtPnBsYWNlbWVudCA9IHJlcXVlc3RlZDsKKwlwbGFjZW1lbnQtPmJ1c3lfcGxhY2VtZW50ID0g YnVzeTsKK30KKwogc3RhdGljIHN0cnVjdCB0dG1fdHQgKmk5MTVfdHRtX3R0X2NyZWF0ZShzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkJCQkgdWludDMyX3QgcGFnZV9mbGFncykKIHsK QEAgLTg5LDcgKzEyOSw4IEBAIHN0YXRpYyBzdHJ1Y3QgdHRtX3R0ICppOTE1X3R0bV90dF9jcmVh dGUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAkgICAgbWFuLT51c2VfdHQpCiAJCXBh Z2VfZmxhZ3MgfD0gVFRNX1BBR0VfRkxBR19aRVJPX0FMTE9DOwogCi0JcmV0ID0gdHRtX3R0X2lu aXQoJmk5MTVfdHQtPnR0bSwgYm8sIHBhZ2VfZmxhZ3MsIHR0bV93cml0ZV9jb21iaW5lZCk7CisJ cmV0ID0gdHRtX3R0X2luaXQoJmk5MTVfdHQtPnR0bSwgYm8sIHBhZ2VfZmxhZ3MsCisJCQkgIGk5 MTVfdHRtX3NlbGVjdF90dF9jYWNoaW5nKG9iaikpOwogCWlmIChyZXQpIHsKIAkJa2ZyZWUoaTkx NV90dCk7CiAJCXJldHVybiBOVUxMOwpAQCAtNDE2LDEwICs0NTcsMTUgQEAgc3RhdGljIGludCBp OTE1X3R0bV9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkJLm5v X3dhaXRfZ3B1ID0gZmFsc2UsCiAJfTsKIAlzdHJ1Y3Qgc2dfdGFibGUgKnN0OworCXN0cnVjdCB0 dG1fcGxhY2UgcmVxdWVzdGVkLCBidXN5W0k5MTVfVFRNX01BWF9QTEFDRU1FTlRTXTsKKwlzdHJ1 Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7CiAJaW50IHJldDsKIAorCUdFTV9CVUdfT04ob2Jq LT5tbS5uX3BsYWNlbWVudHMgPiBJOTE1X1RUTV9NQVhfUExBQ0VNRU5UUyk7CisKIAkvKiBNb3Zl IHRvIHRoZSByZXF1ZXN0ZWQgcGxhY2VtZW50LiAqLwotCXJldCA9IHR0bV9ib192YWxpZGF0ZShi bywgJmk5MTVfbG1lbTBfcGxhY2VtZW50LCAmY3R4KTsKKwlpOTE1X3R0bV9wbGFjZW1lbnRfZnJv bV9vYmoob2JqLCAmcmVxdWVzdGVkLCBidXN5LCAmcGxhY2VtZW50KTsKKwlyZXQgPSB0dG1fYm9f dmFsaWRhdGUoYm8sICZwbGFjZW1lbnQsICZjdHgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQg PT0gLUVOT1NQQyA/IC1FTlhJTyA6IHJldDsKIApAQCAtNjI1LDcgKzY3MSw2IEBAIGludCBfX2k5 MTVfZ2VtX3R0bV9vYmplY3RfaW5pdChzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAog CWk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfY29oZXJlbmN5KG9iaiwgSTkxNV9DQUNIRV9OT05F KTsKIAlJTklUX1JBRElYX1RSRUUoJm9iai0+dHRtLmdldF9pb19wYWdlLnJhZGl4LCBHRlBfS0VS TkVMIHwgX19HRlBfTk9XQVJOKTsKIAltdXRleF9pbml0KCZvYmotPnR0bS5nZXRfaW9fcGFnZS5s b2NrKTsKLQogCWJvX3R5cGUgPSAob2JqLT5mbGFncyAmIEk5MTVfQk9fQUxMT0NfVVNFUikgPyB0 dG1fYm9fdHlwZV9kZXZpY2UgOgogCQl0dG1fYm9fdHlwZV9rZXJuZWw7CiAKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JlZ2lvbl90dG0uYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3JlZ2lvbl90dG0uYwppbmRleCAyN2ZlMDY2OGQwOTQuLjVhNjY0ZjZjYzkz ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmVnaW9uX3R0bS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JlZ2lvbl90dG0uYwpAQCAtNTAsMTIgKzUw LDE2IEBAIHZvaWQgaW50ZWxfcmVnaW9uX3R0bV9kZXZpY2VfZmluaShzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpCiAgKiBkcml2ZXItcHJpdmF0ZSB0eXBlcyBmb3Igbm93LCByZXNl cnZpbmcgVFRNX1BMX1ZSQU0gZm9yIHN0b2xlbgogICogbWVtb3J5IGFuZCBUVE1fUExfVFQgZm9y IEdHVFQgdXNlIGlmIGRlY2lkZWQgdG8gaW1wbGVtZW50IHRoaXMuCiAgKi8KLXN0YXRpYyBpbnQg aW50ZWxfcmVnaW9uX3RvX3R0bV90eXBlKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0p CitpbnQgaW50ZWxfcmVnaW9uX3RvX3R0bV90eXBlKGNvbnN0IHN0cnVjdCBpbnRlbF9tZW1vcnlf cmVnaW9uICptZW0pCiB7CiAJaW50IHR5cGU7CiAKIAlHRU1fQlVHX09OKG1lbS0+dHlwZSAhPSBJ TlRFTF9NRU1PUllfTE9DQUwgJiYKLQkJICAgbWVtLT50eXBlICE9IElOVEVMX01FTU9SWV9NT0NL KTsKKwkJICAgbWVtLT50eXBlICE9IElOVEVMX01FTU9SWV9NT0NLICYmCisJCSAgIG1lbS0+dHlw ZSAhPSBJTlRFTF9NRU1PUllfU1lTVEVNKTsKKworCWlmIChtZW0tPnR5cGUgPT0gSU5URUxfTUVN T1JZX1NZU1RFTSkKKwkJcmV0dXJuIFRUTV9QTF9TWVNURU07CiAKIAl0eXBlID0gbWVtLT5pbnN0 YW5jZSArIFRUTV9QTF9QUklWOwogCUdFTV9CVUdfT04odHlwZSA+PSBUVE1fTlVNX01FTV9UWVBF Uyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fdHRtLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fdHRtLmgKaW5kZXggZThjZjgzMGZk YTZmLi42NDk0OTE4NDRlNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JlZ2lvbl90dG0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fdHRt LmgKQEAgLTI4LDYgKzI4LDggQEAgc3RydWN0IHNnX3RhYmxlICppbnRlbF9yZWdpb25fdHRtX25v ZGVfdG9fc3Qoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKIHZvaWQgaW50ZWxfcmVn aW9uX3R0bV9ub2RlX2ZyZWUoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKIAkJCQlz dHJ1Y3QgdHRtX3Jlc291cmNlICpub2RlKTsKIAoraW50IGludGVsX3JlZ2lvbl90b190dG1fdHlw ZShjb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKTsKKwogc3RydWN0IHR0bV9k ZXZpY2VfZnVuY3MgKmk5MTVfdHRtX2RyaXZlcih2b2lkKTsKIAogI2lmZGVmIENPTkZJR19EUk1f STkxNV9TRUxGVEVTVAotLSAKMi4yNi4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK