From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 2/7] drm/i915: Use GGTT view when (un)pinning objects to planes Date: Thu, 5 Mar 2015 14:07:31 +0000 Message-ID: <1425564456-3660-3-git-send-email-tvrtko.ursulin@linux.intel.com> References: <1425564456-3660-1-git-send-email-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 4FF056E7C1 for ; Thu, 5 Mar 2015 06:08:00 -0800 (PST) In-Reply-To: <1425564456-3660-1-git-send-email-tvrtko.ursulin@linux.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 RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClRvIHN1cHBv cnQgZnJhbWUgYnVmZmVyIHJvdGF0aW9uIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBwYXNzIG9uIHRo ZSBpbmZvcm1hdGlvbgpvbiB3aGF0IGtpbmQgb2YgR0dUVCB2aWV3IGlzIHJlcXVpcmVkIGZvciBk aXNwbGF5LgoKVGhpcyBwYXRjaCBqdXN0IGFkZHMgdGhlIHBhcmFtZXRlciBhbmQgbWFrZXMgYWxs IHRoZSBjYWxsZXJzIGRlZmF1bHQgdG8gdGhlCm5vcm1hbCB2aWV3LgoKU2lnbmVkLW9mZi1ieTog VHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgfCAzMyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICB8IDI3ICsrKysr KysrKysrKysrKysrLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jIHwgIDcgKysrKy0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jIHwg IDMgKystCiA0IGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGIzODRiNzIuLmIwNGIwN2QgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaApAQCAtMjc2MSw4ICsyNzYxLDEwIEBAIGk5MTVfZ2VtX29iamVjdF9z ZXRfdG9fY3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHdy aXRlKTsKIGludCBfX211c3RfY2hlY2sKIGk5MTVfZ2VtX29iamVjdF9waW5fdG9fZGlzcGxheV9w bGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCSAgICAgdTMyIGFsaWdu bWVudCwKLQkJCQkgICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnBpcGVsaW5lZCk7Ci12b2lk IGk5MTVfZ2VtX29iamVjdF91bnBpbl9mcm9tX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaik7CisJCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpwaXBl bGluZWQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpOwordm9p ZCBpOTE1X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmll dyAqdmlldyk7CiBpbnQgaTkxNV9nZW1fb2JqZWN0X2F0dGFjaF9waHlzKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJaW50IGFsaWduKTsKIGludCBpOTE1X2dlbV9vcGVuKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7CkBAIC0yODMxLDcg KzI4MzMsMTMgQEAgaTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVhdGVfdm1hKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJCQkmaTkxNV9nZ3R0X3ZpZXdfbm9ybWFsKTsKIH0K IAotc3RydWN0IGk5MTVfdm1hICppOTE1X2dlbV9vYmpfdG9fZ2d0dChzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKTsKK3N0cnVjdCBpOTE1X3ZtYSAqaTkxNV9nZW1fb2JqX3RvX2dndHRf dmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCQkgICBlbnVtIGk5MTVf Z2d0dF92aWV3X3R5cGUgdmlldyk7CitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgaTkxNV92bWEgKmk5 MTVfZ2VtX29ial90b19nZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJ cmV0dXJuIGk5MTVfZ2VtX29ial90b19nZ3R0X3ZpZXcob2JqLCBJOTE1X0dHVFRfVklFV19OT1JN QUwpOworfQogc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX29ial9pc19waW5uZWQoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikgewogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwogCWxp c3RfZm9yX2VhY2hfZW50cnkodm1hLCAmb2JqLT52bWFfbGlzdCwgdm1hX2xpbmspCkBAIC0yODg1 LDEzICsyODkzLDMwIEBAIGk5MTVfZ2VtX29ial9nZ3R0X3BpbihzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAogCQkJCSAgIGFsaWdubWVudCwgZmxhZ3MgfCBQSU5fR0xPQkFMKTsKIH0K IAorc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCitpOTE1X2dlbV9vYmpfZ2d0dF9waW5f dmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJICAgdWludDMyX3QgYWxp Z25tZW50LAorCQkJICAgdW5zaWduZWQgZmxhZ3MsCisJCQkgICBjb25zdCBzdHJ1Y3QgaTkxNV9n Z3R0X3ZpZXcgKmdndHRfdmlldykKK3sKKwlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3Bpbl92aWV3 KG9iaiwgaTkxNV9vYmpfdG9fZ2d0dChvYmopLAorCQkJCQlhbGlnbm1lbnQsIGZsYWdzIHwgUElO X0dMT0JBTCwKKwkJCQkJZ2d0dF92aWV3KTsKK30KKwogc3RhdGljIGlubGluZSBpbnQKIGk5MTVf Z2VtX29iamVjdF9nZ3R0X3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQog ewogCXJldHVybiBpOTE1X3ZtYV91bmJpbmQoaTkxNV9nZW1fb2JqX3RvX2dndHQob2JqKSk7CiB9 CiAKLXZvaWQgaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4oc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaik7Cit2b2lkIGk5MTVfZ2VtX29iamVjdF9nZ3R0X3VucGluX3ZpZXcoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICAgIGVudW0gaTkxNV9nZ3R0X3ZpZXdf dHlwZSB2aWV3KTsKK3N0YXRpYyBpbmxpbmUgdm9pZAoraTkxNV9nZW1fb2JqZWN0X2dndHRfdW5w aW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlpOTE1X2dlbV9vYmplY3Rf Z2d0dF91bnBpbl92aWV3KG9iaiwgSTkxNV9HR1RUX1ZJRVdfTk9STUFMKTsKK30KIAogLyogaTkx NV9nZW1fY29udGV4dC5jICovCiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2NvbnRleHRfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDM4 MzFjYzAuLmVjZWRkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMzk1MSw3ICszOTUx LDggQEAgc3RhdGljIGJvb2wgaXNfcGluX2Rpc3BsYXkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKIGludAogaTkxNV9nZW1fb2JqZWN0X3Bpbl90b19kaXNwbGF5X3BsYW5lKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJICAgICB1MzIgYWxpZ25tZW50LAotCQkJ CSAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcGlwZWxpbmVkKQorCQkJCSAgICAgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcGlwZWxpbmVkLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGk5MTVf Z2d0dF92aWV3ICp2aWV3KQogewogCXUzMiBvbGRfcmVhZF9kb21haW5zLCBvbGRfd3JpdGVfZG9t YWluOwogCWJvb2wgd2FzX3Bpbl9kaXNwbGF5OwpAQCAtMzk4Nyw3ICszOTg4LDkgQEAgaTkxNV9n ZW1fb2JqZWN0X3Bpbl90b19kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCiAJICogKGUuZy4gbGlia21zIGZvciB0aGUgYm9vdHVwIHNwbGFzaCksIHdlIGhhdmUg dG8gZW5zdXJlIHRoYXQgd2UKIAkgKiBhbHdheXMgdXNlIG1hcF9hbmRfZmVuY2VhYmxlIGZvciBh bGwgc2Nhbm91dCBidWZmZXJzLgogCSAqLwotCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3Bpbihv YmosIGFsaWdubWVudCwgUElOX01BUFBBQkxFKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9w aW5fdmlldyhvYmosIGFsaWdubWVudCwKKwkJCQkJIHZpZXctPnR5cGUgPT0gSTkxNV9HR1RUX1ZJ RVdfTk9STUFMID8KKwkJCQkJIFBJTl9NQVBQQUJMRSA6IDAsIHZpZXcpOwogCWlmIChyZXQpCiAJ CWdvdG8gZXJyX3VucGluX2Rpc3BsYXk7CiAKQEAgLTQwMTUsOSArNDAxOCwxMSBAQCBlcnJfdW5w aW5fZGlzcGxheToKIH0KIAogdm9pZAotaTkxNV9nZW1fb2JqZWN0X3VucGluX2Zyb21fZGlzcGxh eV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoraTkxNV9nZW1fb2JqZWN0 X3VucGluX2Zyb21fZGlzcGxheV9wbGFuZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAorCQkJCQkgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KQogewotCWk5MTVfZ2Vt X29iamVjdF9nZ3R0X3VucGluKG9iaik7CisJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW5fdmll dyhvYmosIHZpZXctPnR5cGUpOworCiAJb2JqLT5waW5fZGlzcGxheSA9IGlzX3Bpbl9kaXNwbGF5 KG9iaik7CiB9CiAKQEAgLTQyNTQsMTUgKzQyNTksMTYgQEAgaTkxNV9nZW1fb2JqZWN0X3Bpbl92 aWV3KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiB9CiAKIHZvaWQKLWk5MTVfZ2Vt X29iamVjdF9nZ3R0X3VucGluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCitpOTE1 X2dlbV9vYmplY3RfZ2d0dF91bnBpbl92aWV3KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCisJCQkJZW51bSBpOTE1X2dndHRfdmlld190eXBlIHZpZXcpCiB7Ci0Jc3RydWN0IGk5MTVf dm1hICp2bWEgPSBpOTE1X2dlbV9vYmpfdG9fZ2d0dChvYmopOworCXN0cnVjdCBpOTE1X3ZtYSAq dm1hID0gaTkxNV9nZW1fb2JqX3RvX2dndHRfdmlldyhvYmosIHZpZXcpOwogCiAJQlVHX09OKCF2 bWEpOwogCUJVR19PTih2bWEtPnBpbl9jb3VudCA9PSAwKTsKLQlCVUdfT04oIWk5MTVfZ2VtX29i al9nZ3R0X2JvdW5kKG9iaikpOworCUJVR19PTighaTkxNV9nZW1fb2JqX2JvdW5kX3ZpZXcob2Jq LCBpOTE1X29ial90b19nZ3R0KG9iaiksIHZpZXcpKTsKIAotCWlmICgtLXZtYS0+cGluX2NvdW50 ID09IDApCisJaWYgKC0tdm1hLT5waW5fY291bnQgPT0gMCAmJiB2aWV3ID09IEk5MTVfR0dUVF9W SUVXX05PUk1BTCkKIAkJb2JqLT5waW5fbWFwcGFibGUgPSBmYWxzZTsKIH0KIApAQCAtNTMxOSwx NCArNTMyNSwxNSBAQCBpOTE1X2dlbV9zaHJpbmtlcl9vb20oc3RydWN0IG5vdGlmaWVyX2Jsb2Nr ICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogCXJldHVybiBOT1RJRllfRE9O RTsKIH0KIAotc3RydWN0IGk5MTVfdm1hICppOTE1X2dlbV9vYmpfdG9fZ2d0dChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQorc3RydWN0IGk5MTVfdm1hICppOTE1X2dlbV9vYmpfdG9f Z2d0dF92aWV3KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJCSAgIGVudW0g aTkxNV9nZ3R0X3ZpZXdfdHlwZSB2aWV3KQogewogCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KmdndHQgPSBpOTE1X29ial90b19nZ3R0KG9iaik7CiAJc3RydWN0IGk5MTVfdm1hICp2bWE7CiAK IAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3QsIHZtYV9saW5rKQogCQlp ZiAodm1hLT52bSA9PSBnZ3R0ICYmCi0JCSAgICB2bWEtPmdndHRfdmlldy50eXBlID09IEk5MTVf R0dUVF9WSUVXX05PUk1BTCkKKwkJICAgIHZtYS0+Z2d0dF92aWV3LnR5cGUgPT0gdmlldykKIAkJ CXJldHVybiB2bWE7CiAKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3Bs YXkuYwppbmRleCBiZjM4OWZjLi5kMWM2ZWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCkBAIC0yMzA2LDcgKzIzMDYsOCBAQCBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlpbnRlbF9ydW50aW1lX3BtX2dldChkZXZfcHJpdik7 CiAKIAlkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSA9IGZhbHNlOwotCXJldCA9IGk5MTVfZ2Vt X29iamVjdF9waW5fdG9fZGlzcGxheV9wbGFuZShvYmosIGFsaWdubWVudCwgcGlwZWxpbmVkKTsK KwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUob2JqLCBhbGlnbm1l bnQsIHBpcGVsaW5lZCwKKwkJCQkJCSAgICZpOTE1X2dndHRfdmlld19ub3JtYWwpOwogCWlmIChy ZXQpCiAJCWdvdG8gZXJyX2ludGVycnVwdGlibGU7CiAKQEAgLTIzMjYsNyArMjMyNyw3IEBAIGlu dGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXJldHVy biAwOwogCiBlcnJfdW5waW46Ci0JaTkxNV9nZW1fb2JqZWN0X3VucGluX2Zyb21fZGlzcGxheV9w bGFuZShvYmopOworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9mcm9tX2Rpc3BsYXlfcGxhbmUob2Jq LCAmaTkxNV9nZ3R0X3ZpZXdfbm9ybWFsKTsKIGVycl9pbnRlcnJ1cHRpYmxlOgogCWRldl9wcml2 LT5tbS5pbnRlcnJ1cHRpYmxlID0gdHJ1ZTsKIAlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJp dik7CkBAIC0yMzM4LDcgKzIzMzksNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF91bnBpbl9mYl9vYmoo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAlXQVJOX09OKCFtdXRleF9pc19sb2Nr ZWQoJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCkpOwogCiAJaTkxNV9nZW1fb2JqZWN0X3Vu cGluX2ZlbmNlKG9iaik7Ci0JaTkxNV9nZW1fb2JqZWN0X3VucGluX2Zyb21fZGlzcGxheV9wbGFu ZShvYmopOworCWk5MTVfZ2VtX29iamVjdF91bnBpbl9mcm9tX2Rpc3BsYXlfcGxhbmUob2JqLCAm aTkxNV9nZ3R0X3ZpZXdfbm9ybWFsKTsKIH0KIAogLyogQ29tcHV0ZXMgdGhlIGxpbmVhciBvZmZz ZXQgdG8gdGhlIGJhc2UgdGlsZSBhbmQgYWRqdXN0cyB4LCB5LiBieXRlcyBwZXIgcGl4ZWwKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYwppbmRleCA4MjNkMWQ5Li5kZDkyMTIyIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vdmVybGF5LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCkBAIC03MjAsNyArNzIwLDggQEAgc3RhdGlj IGludCBpbnRlbF9vdmVybGF5X2RvX3B1dF9pbWFnZShzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3Zl cmxheSwKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBpOTE1X2dlbV9v YmplY3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUobmV3X2JvLCAwLCBOVUxMKTsKKwlyZXQgPSBpOTE1 X2dlbV9vYmplY3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUobmV3X2JvLCAwLCBOVUxMLAorCQkJCQkJ ICAgJmk5MTVfZ2d0dF92aWV3X25vcm1hbCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0 OwogCi0tIAoyLjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK