From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [RFC PATCH v1 09/15] drm/msm/gpu: Move address space setup to the GPU targets Date: Fri, 1 Mar 2019 12:38:31 -0700 Message-ID: <1551469117-3404-10-git-send-email-jcrouse@codeaurora.org> References: <1551469117-3404-1-git-send-email-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1551469117-3404-1-git-send-email-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Kees Cook , Jonathan Marek , jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Sharat Masetty , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Bjorn Andersson , David Airlie , Rob Clark , dianders-uWgjrcJnOmJ4cg9Nei1l7Q@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Mamta Shukla , Thomas Zimmermann , Daniel Vetter , Sean Paul , baolu.lu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org TW92ZSB0aGUgYWRkcmVzcyBzcGFjZSBzdGV1cCBjb2RlIG91dCBvZiB0aGUgZ2VuZXJpYyBtc20g R1BVIGNvZGUgdG8KdG8gdGhlIGluZGl2aWR1YWwgR1BVIHRhcmdldHMuIFRoaXMgYWxsb3dzIHVz IHRvIGRvIHRhcmdldCBzcGVjaWZpYwpzZXR1cCBzdWNoIGFzIGdwdW1tdSBmb3IgYTJ4eCBvciBz cGxpdCBwYWdldGFibGVzIGFuZCBwZXItaW5zdGFuY2UKcGFnZXRhYmxlcyBmb3IgbmV3ZXIgYTV4 eCBhbmQgYTZ4eCB0YXJnZXRzLiBBbGwgdGhpcyBpcyBhdCB0aGUKZXhwZW5zZSBvZiBkdXBsaWNh dGVkIGNvZGUgaW4gc29tZSBvZiB0aGUgdGFyZ2V0IGZpbGVzIGJ1dCBJIHRoaW5rCml0IHBheXMg Zm9yIGl0c2VsZiBpbiBpbXByb3ZlZCBjb2RlIGZsb3cgYW5kIGZsZXhpYmlsaXR5LgoKU2lnbmVk LW9mZi1ieTogSm9yZGFuIENyb3VzZSA8amNyb3VzZUBjb2RlYXVyb3JhLm9yZz4KLS0tCgogZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTJ4eF9ncHUuYyAgIHwgMzcgKysrKysrKysrKysrKysr Ky0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTN4eF9ncHUuYyAgIHwgNTAgKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h NHh4X2dwdS5jICAgfCA1MSArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5jICAgfCAzNyArKysrKysrKysrKysrKysrKysr LS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5jICAgfCAzNyArKysrKysr KysrKysrKysrKysrLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMg fCAgNyAtLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmggICAgICAgICAgIHwgIDEg KwogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmMgICAgICAgICAgIHwgNTQgKystLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuaCAg ICAgICAgICAgfCAgMiArKwogOSBmaWxlcyBjaGFuZ2VkLCAxNzMgaW5zZXJ0aW9ucygrKSwgMTAz IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2Ey eHhfZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hMnh4X2dwdS5jCmluZGV4IDFm ODNiYzEuLjQ5MjQxZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2Ey eHhfZ3B1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTJ4eF9ncHUuYwpAQCAt NDAxLDYgKzQwMSwzMCBAQCBzdGF0aWMgc3RydWN0IG1zbV9ncHVfc3RhdGUgKmEyeHhfZ3B1X3N0 YXRlX2dldChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQogCXJldHVybiBzdGF0ZTsKIH0KIAorc3RhdGlj IHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKgorYTJ4eF9jcmVhdGVfYWRkcmVzc19zcGFj ZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2Ug KmFzcGFjZTsKKwlpbnQgcmV0OworCisJYXNwYWNlID0gbXNtX2dlbV9hZGRyZXNzX3NwYWNlX2Ny ZWF0ZV9hMnh4KCZncHUtPnBkZXYtPmRldiwgZ3B1LAorCQkiZ3B1IiwgU1pfMTZNLCBTWl8xNk0g KyAweGZmICogU1pfNjRLKTsKKwlpZiAoSVNfRVJSKGFzcGFjZSkpIHsKKwkJRFJNX0RFVl9FUlJP UihncHUtPmRldi0+ZGV2LAorCQkJIk5vIG1lbW9yeSBwcm90ZWN0aW9uIHdpdGhvdXQgTU1VXG4i KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsKKwl9CisKKwlyZXQgPSBhc3BhY2UtPm1tdS0+ ZnVuY3MtPmF0dGFjaChhc3BhY2UtPm1tdSwgTlVMTCwgMCk7CisJaWYgKHJldCkgeworCQltc21f Z2VtX2FkZHJlc3Nfc3BhY2VfcHV0KGFzcGFjZSk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJ fQorCisJcmV0dXJuIGFzcGFjZTsKK30KKworCiAvKiBSZWdpc3RlciBvZmZzZXQgZGVmaW5lcyBm b3IgQTJYWCAtIGNvcHkgb2YgQTNYWCAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhMnh4 X3JlZ2lzdGVyX29mZnNldHNbUkVHX0FEUkVOT19SRUdJU1RFUl9NQVhdID0gewogCVJFR19BRFJF Tk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUkJfQkFTRSwgUkVHX0FYWFhfQ1BfUkJfQkFTRSksCkBA IC00MjksNiArNDUzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9fZ3B1X2Z1bmNzIGZ1 bmNzID0gewogI2VuZGlmCiAJCS5ncHVfc3RhdGVfZ2V0ID0gYTJ4eF9ncHVfc3RhdGVfZ2V0LAog CQkuZ3B1X3N0YXRlX3B1dCA9IGFkcmVub19ncHVfc3RhdGVfcHV0LAorCQkuY3JlYXRlX2FkZHJl c3Nfc3BhY2UgPSBhMnh4X2NyZWF0ZV9hZGRyZXNzX3NwYWNlLAogCX0sCiB9OwogCkBAIC00NzMs MTYgKzQ5OCw4IEBAIHN0cnVjdCBtc21fZ3B1ICphMnh4X2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCiAJYWRyZW5vX2dwdS0+cmVnX29mZnNldHMgPSBhMnh4X3JlZ2lzdGVyX29mZnNl dHM7CiAKIAlyZXQgPSBhZHJlbm9fZ3B1X2luaXQoZGV2LCBwZGV2LCBhZHJlbm9fZ3B1LCAmZnVu Y3MsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCWlmICghZ3B1LT5hc3BhY2UpIHsK LQkJZGV2X2VycihkZXYtPmRldiwgIk5vIG1lbW9yeSBwcm90ZWN0aW9uIHdpdGhvdXQgTU1VXG4i KTsKLQkJcmV0ID0gLUVOWElPOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JcmV0dXJuIGdwdTsKKwlp ZiAoIXJldCkKKwkJcmV0dXJuIGdwdTsKIAogZmFpbDoKIAlpZiAoYTJ4eF9ncHUpCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hM3h4X2dwdS5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYTN4eF9ncHUuYwppbmRleCBjM2I0YmM2Li4zM2FiNWU4IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hM3h4X2dwdS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vYWRyZW5vL2EzeHhfZ3B1LmMKQEAgLTIxLDYgKzIxLDcgQEAKICMgIGluY2x1 ZGUgPG1hY2gvb2NtZW0uaD4KICNlbmRpZgogCisjaW5jbHVkZSAibXNtX2dlbS5oIgogI2luY2x1 ZGUgImEzeHhfZ3B1LmgiCiAKICNkZWZpbmUgQTNYWF9JTlQwX01BU0sgXApAQCAtNDMzLDYgKzQz NCw0MSBAQCBzdGF0aWMgc3RydWN0IG1zbV9ncHVfc3RhdGUgKmEzeHhfZ3B1X3N0YXRlX2dldChz dHJ1Y3QgbXNtX2dwdSAqZ3B1KQogCXJldHVybiBzdGF0ZTsKIH0KIAorc3RhdGljIHN0cnVjdCBt c21fZ2VtX2FkZHJlc3Nfc3BhY2UgKgorYTN4eF9jcmVhdGVfYWRkcmVzc19zcGFjZShzdHJ1Y3Qg bXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZTsK KwlzdHJ1Y3QgaW9tbXVfZG9tYWluICppb21tdTsKKwlpbnQgcmV0OworCisJaW9tbXUgPSBpb21t dV9kb21haW5fYWxsb2MoJnBsYXRmb3JtX2J1c190eXBlKTsKKwlpZiAoIWlvbW11KSB7CisJCURS TV9ERVZfRVJST1IoZ3B1LT5kZXYtPmRldiwKKwkJCSJObyBtZW1vcnkgcHJvdGVjdGlvbiB3aXRo b3V0IElPTU1VXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOWElPKTsKKwl9CisKKwlpb21tdS0+ Z2VvbWV0cnkuYXBlcnR1cmVfc3RhcnQgPSBTWl8xNk07CisJaW9tbXUtPmdlb21ldHJ5LmFwZXJ0 dXJlX2VuZCA9IDB4ZmZmZmZmZmY7CisKKwlhc3BhY2UgPSBtc21fZ2VtX2FkZHJlc3Nfc3BhY2Vf Y3JlYXRlKCZncHUtPnBkZXYtPmRldiwgaW9tbXUsICJncHUiKTsKKwlpZiAoSVNfRVJSKGFzcGFj ZSkpIHsKKwkJaW9tbXVfZG9tYWluX2ZyZWUoaW9tbXUpOworCQlEUk1fREVWX0VSUk9SKGdwdS0+ ZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdCBtbXU6ICVsZFxuIiwKKwkJCVBUUl9FUlIoYXNwYWNl KSk7CisJCXJldHVybiBhc3BhY2U7CisJfQorCisJcmV0ID0gYXNwYWNlLT5tbXUtPmZ1bmNzLT5h dHRhY2goYXNwYWNlLT5tbXUsIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJbXNtX2dlbV9hZGRy ZXNzX3NwYWNlX3B1dChhc3BhY2UpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJl dHVybiBhc3BhY2U7Cit9CisKKwogLyogUmVnaXN0ZXIgb2Zmc2V0IGRlZmluZXMgZm9yIEEzWFgg Ki8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYTN4eF9yZWdpc3Rlcl9vZmZzZXRzW1JFR19B RFJFTk9fUkVHSVNURVJfTUFYXSA9IHsKIAlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQ X1JCX0JBU0UsIFJFR19BWFhYX0NQX1JCX0JBU0UpLApAQCAtNDYxLDYgKzQ5Nyw3IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgYWRyZW5vX2dwdV9mdW5jcyBmdW5jcyA9IHsKICNlbmRpZgogCQkuZ3B1 X3N0YXRlX2dldCA9IGEzeHhfZ3B1X3N0YXRlX2dldCwKIAkJLmdwdV9zdGF0ZV9wdXQgPSBhZHJl bm9fZ3B1X3N0YXRlX3B1dCwKKwkJLmNyZWF0ZV9hZGRyZXNzX3NwYWNlID0gYTN4eF9jcmVhdGVf YWRkcmVzc19zcGFjZSwKIAl9LAogfTsKIApAQCAtNTIwLDE5ICs1NTcsNiBAQCBzdHJ1Y3QgbXNt X2dwdSAqYTN4eF9ncHVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogI2VuZGlmCiAJfQog Ci0JaWYgKCFncHUtPmFzcGFjZSkgewotCQkvKiBUT0RPIHdlIHRoaW5rIGl0IGlzIHBvc3NpYmxl IHRvIGNvbmZpZ3VyZSB0aGUgR1BVIHRvCi0JCSAqIHJlc3RyaWN0IGFjY2VzcyB0byBWUkFNIGNh cnZlb3V0LiAgQnV0IHRoZSByZXF1aXJlZAotCQkgKiByZWdpc3RlcnMgYXJlIHVua25vd24uICBG b3Igbm93IGp1c3QgYmFpbCBvdXQgYW5kCi0JCSAqIGxpbXAgYWxvbmcgd2l0aCBqdXN0IG1vZGVz ZXR0aW5nLiAgSWYgaXQgdHVybnMgb3V0Ci0JCSAqIHRvIG5vdCBiZSBwb3NzaWJsZSB0byByZXN0 cmljdCBhY2Nlc3MsIHRoZW4gd2UgbXVzdAotCQkgKiBpbXBsZW1lbnQgYSBjbWRzdHJlYW0gdmFs aWRhdG9yLgotCQkgKi8KLQkJRFJNX0RFVl9FUlJPUihkZXYtPmRldiwgIk5vIG1lbW9yeSBwcm90 ZWN0aW9uIHdpdGhvdXQgSU9NTVVcbiIpOwotCQlyZXQgPSAtRU5YSU87Ci0JCWdvdG8gZmFpbDsK LQl9Ci0KIAlyZXR1cm4gZ3B1OwogCiBmYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYTR4eF9ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhf Z3B1LmMKaW5kZXggMThmOWE4ZS4uMDhhNTcyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYTR4eF9ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h NHh4X2dwdS5jCkBAIC0xNSw2ICsxNSw4IEBACiAjICBpbmNsdWRlIDxzb2MvcWNvbS9vY21lbS5o PgogI2VuZGlmCiAKKyNpbmNsdWRlICJtc21fZ2VtLmgiCisKICNkZWZpbmUgQTRYWF9JTlQwX01B U0sgXAogCShBNFhYX0lOVDBfUkJCTV9BSEJfRVJST1IgfCAgICAgICAgXAogCSBBNFhYX0lOVDBf UkJCTV9BVEJfQlVTX09WRVJGTE9XIHwgXApAQCAtNTMwLDYgKzUzMiw0MSBAQCBzdGF0aWMgaW50 IGE0eHhfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1aW50NjRfdCAqdmFsdWUp CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICoK K2E0eHhfY3JlYXRlX2FkZHJlc3Nfc3BhY2Uoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1 Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2U7CisJc3RydWN0IGlvbW11X2RvbWFpbiAq aW9tbXU7CisJaW50IHJldDsKKworCWlvbW11ID0gaW9tbXVfZG9tYWluX2FsbG9jKCZwbGF0Zm9y bV9idXNfdHlwZSk7CisJaWYgKCFpb21tdSkgeworCQlEUk1fREVWX0VSUk9SKGdwdS0+ZGV2LT5k ZXYsCisJCQkiTm8gbWVtb3J5IHByb3RlY3Rpb24gd2l0aG91dCBJT01NVVxuIik7CisJCXJldHVy biBFUlJfUFRSKC1FTlhJTyk7CisJfQorCisJaW9tbXUtPmdlb21ldHJ5LmFwZXJ0dXJlX3N0YXJ0 ID0gU1pfMTZNOworCWlvbW11LT5nZW9tZXRyeS5hcGVydHVyZV9lbmQgPSAweGZmZmZmZmZmOwor CisJYXNwYWNlID0gbXNtX2dlbV9hZGRyZXNzX3NwYWNlX2NyZWF0ZSgmZ3B1LT5wZGV2LT5kZXYs IGlvbW11LCAiZ3B1Iik7CisJaWYgKElTX0VSUihhc3BhY2UpKSB7CisJCWlvbW11X2RvbWFpbl9m cmVlKGlvbW11KTsKKwkJRFJNX0RFVl9FUlJPUihncHUtPmRldi0+ZGV2LCAiZmFpbGVkIHRvIGlu aXQgbW11OiAlbGRcbiIsCisJCQlQVFJfRVJSKGFzcGFjZSkpOworCQlyZXR1cm4gYXNwYWNlOwor CX0KKworCXJldCA9IGFzcGFjZS0+bW11LT5mdW5jcy0+YXR0YWNoKGFzcGFjZS0+bW11LCBOVUxM LCAwKTsKKwlpZiAocmV0KSB7CisJCW1zbV9nZW1fYWRkcmVzc19zcGFjZV9wdXQoYXNwYWNlKTsK KwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlyZXR1cm4gYXNwYWNlOworfQorCisKIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgYWRyZW5vX2dwdV9mdW5jcyBmdW5jcyA9IHsKIAkuYmFzZSA9IHsK IAkJLmdldF9wYXJhbSA9IGFkcmVub19nZXRfcGFyYW0sCkBAIC01NDcsNiArNTg0LDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBhZHJlbm9fZ3B1X2Z1bmNzIGZ1bmNzID0gewogI2VuZGlmCiAJCS5n cHVfc3RhdGVfZ2V0ID0gYTR4eF9ncHVfc3RhdGVfZ2V0LAogCQkuZ3B1X3N0YXRlX3B1dCA9IGFk cmVub19ncHVfc3RhdGVfcHV0LAorCQkuY3JlYXRlX2FkZHJlc3Nfc3BhY2UgPSBhNHh4X2NyZWF0 ZV9hZGRyZXNzX3NwYWNlLAogCX0sCiAJLmdldF90aW1lc3RhbXAgPSBhNHh4X2dldF90aW1lc3Rh bXAsCiB9OwpAQCAtNjAwLDE5ICs2MzgsNiBAQCBzdHJ1Y3QgbXNtX2dwdSAqYTR4eF9ncHVfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogI2VuZGlmCiAJfQogCi0JaWYgKCFncHUtPmFzcGFj ZSkgewotCQkvKiBUT0RPIHdlIHRoaW5rIGl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSB0aGUg R1BVIHRvCi0JCSAqIHJlc3RyaWN0IGFjY2VzcyB0byBWUkFNIGNhcnZlb3V0LiAgQnV0IHRoZSBy ZXF1aXJlZAotCQkgKiByZWdpc3RlcnMgYXJlIHVua25vd24uICBGb3Igbm93IGp1c3QgYmFpbCBv dXQgYW5kCi0JCSAqIGxpbXAgYWxvbmcgd2l0aCBqdXN0IG1vZGVzZXR0aW5nLiAgSWYgaXQgdHVy bnMgb3V0Ci0JCSAqIHRvIG5vdCBiZSBwb3NzaWJsZSB0byByZXN0cmljdCBhY2Nlc3MsIHRoZW4g d2UgbXVzdAotCQkgKiBpbXBsZW1lbnQgYSBjbWRzdHJlYW0gdmFsaWRhdG9yLgotCQkgKi8KLQkJ RFJNX0RFVl9FUlJPUihkZXYtPmRldiwgIk5vIG1lbW9yeSBwcm90ZWN0aW9uIHdpdGhvdXQgSU9N TVVcbiIpOwotCQlyZXQgPSAtRU5YSU87Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KIAlyZXR1cm4gZ3B1 OwogCiBmYWlsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9n cHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1eHhfZ3B1LmMKaW5kZXggNDU2NjJk My4uM2Q2ZjQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9n cHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5jCkBAIC0xNDU2 LDYgKzE0NTYsMzggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgYTV4eF9ncHVfYnVzeShzdHJ1Y3Qg bXNtX2dwdSAqZ3B1KQogCXJldHVybiAodW5zaWduZWQgbG9uZylidXN5X3RpbWU7CiB9CiAKK3N0 YXRpYyBzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICoKK2E1eHhfY3JlYXRlX2FkZHJlc3Nf c3BhY2Uoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3Nw YWNlICphc3BhY2U7CisJc3RydWN0IGlvbW11X2RvbWFpbiAqaW9tbXU7CisJaW50IHJldDsKKwor CWlvbW11ID0gaW9tbXVfZG9tYWluX2FsbG9jKCZwbGF0Zm9ybV9idXNfdHlwZSk7CisJaWYgKCFp b21tdSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpb21tdS0+Z2VvbWV0cnkuYXBlcnR1cmVfc3RhcnQg PSAweDEwMDAwMDAwMFVMTDsKKwlpb21tdS0+Z2VvbWV0cnkuYXBlcnR1cmVfZW5kID0gMHgxZmZm ZmZmZmZVTEw7CisKKwlhc3BhY2UgPSBtc21fZ2VtX2FkZHJlc3Nfc3BhY2VfY3JlYXRlKCZncHUt PnBkZXYtPmRldiwgaW9tbXUsICJncHUiKTsKKwlpZiAoSVNfRVJSKGFzcGFjZSkpIHsKKwkJaW9t bXVfZG9tYWluX2ZyZWUoaW9tbXUpOworCQlEUk1fREVWX0VSUk9SKGdwdS0+ZGV2LT5kZXYsICJm YWlsZWQgdG8gaW5pdCBtbXU6ICVsZFxuIiwKKwkJCVBUUl9FUlIoYXNwYWNlKSk7CisJCXJldHVy biBhc3BhY2U7CisJfQorCisJcmV0ID0gYXNwYWNlLT5tbXUtPmZ1bmNzLT5hdHRhY2goYXNwYWNl LT5tbXUsIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJbXNtX2dlbV9hZGRyZXNzX3NwYWNlX3B1 dChhc3BhY2UpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCW1zbV9tbXVfc2V0X2Zh dWx0X2hhbmRsZXIoYXNwYWNlLT5tbXUsIGdwdSwgYTV4eF9mYXVsdF9oYW5kbGVyKTsKKwlyZXR1 cm4gYXNwYWNlOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkcmVub19ncHVfZnVuY3MgZnVu Y3MgPSB7CiAJLmJhc2UgPSB7CiAJCS5nZXRfcGFyYW0gPSBhZHJlbm9fZ2V0X3BhcmFtLApAQCAt MTQ3Nyw2ICsxNTA5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9fZ3B1X2Z1bmNzIGZ1 bmNzID0gewogCQkuZ3B1X2J1c3kgPSBhNXh4X2dwdV9idXN5LAogCQkuZ3B1X3N0YXRlX2dldCA9 IGE1eHhfZ3B1X3N0YXRlX2dldCwKIAkJLmdwdV9zdGF0ZV9wdXQgPSBhNXh4X2dwdV9zdGF0ZV9w dXQsCisJCS5jcmVhdGVfYWRkcmVzc19zcGFjZSA9IGE1eHhfY3JlYXRlX2FkZHJlc3Nfc3BhY2Us CiAJfSwKIAkuZ2V0X3RpbWVzdGFtcCA9IGE1eHhfZ2V0X3RpbWVzdGFtcCwKIH07CkBAIC0xNTIz LDcgKzE1NTYsNiBAQCBzdHJ1Y3QgbXNtX2dwdSAqYTV4eF9ncHVfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQogCiAJYWRyZW5vX2dwdS0+cmVnaXN0ZXJzID0gYTV4eF9yZWdpc3RlcnM7CiAJ YWRyZW5vX2dwdS0+cmVnX29mZnNldHMgPSBhNXh4X3JlZ2lzdGVyX29mZnNldHM7Ci0KIAlhNXh4 X2dwdS0+bG1fbGVha2FnZSA9IDB4NEUwMDFBOwogCiAJY2hlY2tfc3BlZWRfYmluKCZwZGV2LT5k ZXYpOwpAQCAtMTUzNCw5ICsxNTY2LDYgQEAgc3RydWN0IG1zbV9ncHUgKmE1eHhfZ3B1X2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKLQlp ZiAoZ3B1LT5hc3BhY2UpCi0JCW1zbV9tbXVfc2V0X2ZhdWx0X2hhbmRsZXIoZ3B1LT5hc3BhY2Ut Pm1tdSwgZ3B1LCBhNXh4X2ZhdWx0X2hhbmRsZXIpOwotCiAJLyogU2V0IHVwIHRoZSBwcmVlbXB0 aW9uIHNwZWNpZmljIGJpdHMgYW5kIHBpZWNlcyBmb3IgZWFjaCByaW5nYnVmZmVyICovCiAJYTV4 eF9wcmVlbXB0X2luaXQoZ3B1KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9h ZHJlbm8vYTZ4eF9ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMK aW5kZXggMWMyMGQ1OS4uZjJlMDgwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9h ZHJlbm8vYTZ4eF9ncHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dw dS5jCkBAIC03ODMsNiArNzgzLDM4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGE2eHhfZ3B1X2J1 c3koc3RydWN0IG1zbV9ncHUgKmdwdSkKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnVzeV90aW1l OwogfQogCitzdGF0aWMgc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqCithNnh4X2NyZWF0 ZV9hZGRyZXNzX3NwYWNlKHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IG1zbV9nZW1f YWRkcmVzc19zcGFjZSAqYXNwYWNlOworCXN0cnVjdCBpb21tdV9kb21haW4gKmlvbW11OworCWlu dCByZXQ7CisKKwlpb21tdSA9IGlvbW11X2RvbWFpbl9hbGxvYygmcGxhdGZvcm1fYnVzX3R5cGUp OworCWlmICghaW9tbXUpCisJCXJldHVybiBOVUxMOworCisJaW9tbXUtPmdlb21ldHJ5LmFwZXJ0 dXJlX3N0YXJ0ID0gMHgxMDAwMDAwMDBVTEw7CisJaW9tbXUtPmdlb21ldHJ5LmFwZXJ0dXJlX2Vu ZCA9IDB4MWZmZmZmZmZmVUxMOworCisJYXNwYWNlID0gbXNtX2dlbV9hZGRyZXNzX3NwYWNlX2Ny ZWF0ZSgmZ3B1LT5wZGV2LT5kZXYsIGlvbW11LCAiZ3B1Iik7CisJaWYgKElTX0VSUihhc3BhY2Up KSB7CisJCWlvbW11X2RvbWFpbl9mcmVlKGlvbW11KTsKKwkJRFJNX0RFVl9FUlJPUihncHUtPmRl di0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgbW11OiAlbGRcbiIsCisJCQlQVFJfRVJSKGFzcGFjZSkp OworCQlyZXR1cm4gYXNwYWNlOworCX0KKworCXJldCA9IGFzcGFjZS0+bW11LT5mdW5jcy0+YXR0 YWNoKGFzcGFjZS0+bW11LCBOVUxMLCAwKTsKKwlpZiAocmV0KSB7CisJCW1zbV9nZW1fYWRkcmVz c19zcGFjZV9wdXQoYXNwYWNlKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwltc21f bW11X3NldF9mYXVsdF9oYW5kbGVyKGFzcGFjZS0+bW11LCBncHUsIGE2eHhfZmF1bHRfaGFuZGxl cik7CisJcmV0dXJuIGFzcGFjZTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9fZ3B1 X2Z1bmNzIGZ1bmNzID0gewogCS5iYXNlID0gewogCQkuZ2V0X3BhcmFtID0gYWRyZW5vX2dldF9w YXJhbSwKQEAgLTgwMyw2ICs4MzUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFkcmVub19ncHVf ZnVuY3MgZnVuY3MgPSB7CiAJCS5ncHVfc2V0X2ZyZXEgPSBhNnh4X2dtdV9zZXRfZnJlcSwKIAkJ LmdwdV9zdGF0ZV9nZXQgPSBhNnh4X2dwdV9zdGF0ZV9nZXQsCiAJCS5ncHVfc3RhdGVfcHV0ID0g YTZ4eF9ncHVfc3RhdGVfcHV0LAorCQkuY3JlYXRlX2FkZHJlc3Nfc3BhY2UgPSBhNnh4X2NyZWF0 ZV9hZGRyZXNzX3NwYWNlLAogCX0sCiAJLmdldF90aW1lc3RhbXAgPSBhNnh4X2dldF90aW1lc3Rh bXAsCiB9OwpAQCAtODQ1LDkgKzg3OCw1IEBAIHN0cnVjdCBtc21fZ3B1ICphNnh4X2dwdV9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCi0J aWYgKGdwdS0+YXNwYWNlKQotCQltc21fbW11X3NldF9mYXVsdF9oYW5kbGVyKGdwdS0+YXNwYWNl LT5tbXUsIGdwdSwKLQkJCQlhNnh4X2ZhdWx0X2hhbmRsZXIpOwotCiAJcmV0dXJuIGdwdTsKIH0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYwppbmRleCAyY2ZlZTFhLi5kYzll YTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jCkBAIC03NjUsMTMg Kzc2NSw2IEBAIGludCBhZHJlbm9fZ3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAlhZHJlbm9fZ3B1LT5yZXYgPSBjb25maWctPnJl djsKIAogCWFkcmVub19ncHVfY29uZmlnLmlvbmFtZSA9ICJrZ3NsXzNkMF9yZWdfbWVtb3J5IjsK LQotCWFkcmVub19ncHVfY29uZmlnLnZhX3N0YXJ0ID0gU1pfMTZNOwotCWFkcmVub19ncHVfY29u ZmlnLnZhX2VuZCA9IDB4ZmZmZmZmZmY7Ci0JLyogbWF4aW11bSByYW5nZSBvZiBhMnh4IG1tdSAq LwotCWlmIChhZHJlbm9faXNfYTJ4eChhZHJlbm9fZ3B1KSkKLQkJYWRyZW5vX2dwdV9jb25maWcu dmFfZW5kID0gU1pfMTZNICsgMHhmZmYgKiBTWl82NEs7Ci0KIAlhZHJlbm9fZ3B1X2NvbmZpZy5u cl9yaW5ncyA9IG5yX3JpbmdzOwogCiAJYWRyZW5vX2dldF9wd3JsZXZlbHMoJnBkZXYtPmRldiwg Z3B1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9tc21fZ2VtLmgKaW5kZXggNWUyMWQwMS4uNzc3ZjVmYiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZ2VtLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAj aW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlICJtc21fZHJ2LmgiCisjaW5j bHVkZSAibXNtX21tdS5oIgogCiAvKiBBZGRpdGlvbmFsIGludGVybmFsLXVzZSBvbmx5IEJPIGZs YWdzOiAqLwogI2RlZmluZSBNU01fQk9fU1RPTEVOICAgICAgICAweDEwMDAwMDAwICAgIC8qIHRy eSB0byB1c2Ugc3RvbGVuL3NwbGFzaCBtZW1vcnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2dwdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmMKaW5kZXgg NzliNzFiMS4uZWM0OGJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1 LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmMKQEAgLTIwLDcgKzIwLDYgQEAK ICNpbmNsdWRlICJtc21fbW11LmgiCiAjaW5jbHVkZSAibXNtX2ZlbmNlLmgiCiAjaW5jbHVkZSAi bXNtX2dwdV90cmFjZS5oIgotI2luY2x1ZGUgImFkcmVuby9hZHJlbm9fZ3B1LmgiCiAKICNpbmNs dWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ19oZWxw ZXJzLmg+CkBAIC04MjEsNTEgKzgyMCw2IEBAIHN0YXRpYyBpbnQgZ2V0X2Nsb2NrcyhzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQogCXJldHVybiAwOwog fQogCi1zdGF0aWMgc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqCi1tc21fZ3B1X2NyZWF0 ZV9hZGRyZXNzX3NwYWNlKHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYsCi0JCXVpbnQ2NF90IHZhX3N0YXJ0LCB1aW50NjRfdCB2YV9lbmQpCi17Ci0Jc3Ry dWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlOwotCWludCByZXQ7Ci0KLQkvKgotCSAq IFNldHVwIElPTU1VLi4gZXZlbnR1YWxseSB3ZSB3aWxsIChJIHRoaW5rKSBkbyB0aGlzIG9uY2Ug cGVyIGNvbnRleHQKLQkgKiBhbmQgaGF2ZSBzZXBhcmF0ZSBwYWdlIHRhYmxlcyBwZXIgY29udGV4 dC4gIEZvciBub3csIHRvIGtlZXAgdGhpbmdzCi0JICogc2ltcGxlIGFuZCB0byBnZXQgc29tZXRo aW5nIHdvcmtpbmcsIGp1c3QgdXNlIGEgc2luZ2xlIGFkZHJlc3Mgc3BhY2U6Ci0JICovCi0JaWYg KCFhZHJlbm9faXNfYTJ4eCh0b19hZHJlbm9fZ3B1KGdwdSkpKSB7Ci0JCXN0cnVjdCBpb21tdV9k b21haW4gKmlvbW11ID0gaW9tbXVfZG9tYWluX2FsbG9jKCZwbGF0Zm9ybV9idXNfdHlwZSk7Ci0J CWlmICghaW9tbXUpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlpb21tdS0+Z2VvbWV0cnkuYXBlcnR1 cmVfc3RhcnQgPSB2YV9zdGFydDsKLQkJaW9tbXUtPmdlb21ldHJ5LmFwZXJ0dXJlX2VuZCA9IHZh X2VuZDsKLQotCQlEUk1fREVWX0lORk8oZ3B1LT5kZXYtPmRldiwgIiVzOiB1c2luZyBJT01NVVxu IiwgZ3B1LT5uYW1lKTsKLQotCQlhc3BhY2UgPSBtc21fZ2VtX2FkZHJlc3Nfc3BhY2VfY3JlYXRl KCZwZGV2LT5kZXYsIGlvbW11LCAiZ3B1Iik7Ci0JCWlmIChJU19FUlIoYXNwYWNlKSkKLQkJCWlv bW11X2RvbWFpbl9mcmVlKGlvbW11KTsKLQl9IGVsc2UgewotCQlhc3BhY2UgPSBtc21fZ2VtX2Fk ZHJlc3Nfc3BhY2VfY3JlYXRlX2EyeHgoJnBkZXYtPmRldiwgZ3B1LCAiZ3B1IiwKLQkJCXZhX3N0 YXJ0LCB2YV9lbmQpOwotCX0KLQotCWlmIChJU19FUlIoYXNwYWNlKSkgewotCQlEUk1fREVWX0VS Uk9SKGdwdS0+ZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdCBtbXU6ICVsZFxuIiwKLQkJCVBUUl9F UlIoYXNwYWNlKSk7Ci0JCXJldHVybiBFUlJfQ0FTVChhc3BhY2UpOwotCX0KLQotCXJldCA9IGFz cGFjZS0+bW11LT5mdW5jcy0+YXR0YWNoKGFzcGFjZS0+bW11LCBOVUxMLCAwKTsKLQlpZiAocmV0 KSB7Ci0JCW1zbV9nZW1fYWRkcmVzc19zcGFjZV9wdXQoYXNwYWNlKTsKLQkJcmV0dXJuIEVSUl9Q VFIocmV0KTsKLQl9Ci0KLQlyZXR1cm4gYXNwYWNlOwotfQotCiBpbnQgbXNtX2dwdV9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCXN0 cnVjdCBtc21fZ3B1ICpncHUsIGNvbnN0IHN0cnVjdCBtc21fZ3B1X2Z1bmNzICpmdW5jcywKIAkJ Y29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG1zbV9ncHVfY29uZmlnICpjb25maWcpCkBAIC05Mzgs MTIgKzg5Miw4IEBAIGludCBtc21fZ3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAogCW1zbV9kZXZmcmVxX2luaXQoZ3B1KTsKIAot CWdwdS0+YXNwYWNlID0gbXNtX2dwdV9jcmVhdGVfYWRkcmVzc19zcGFjZShncHUsIHBkZXYsCi0J CWNvbmZpZy0+dmFfc3RhcnQsIGNvbmZpZy0+dmFfZW5kKTsKLQotCWlmIChncHUtPmFzcGFjZSA9 PSBOVUxMKQotCQlEUk1fREVWX0lORk8oZHJtLT5kZXYsICIlczogbm8gSU9NTVUsIGZhbGxiYWNr IHRvIFZSQU0gY2FydmVvdXQhXG4iLCBuYW1lKTsKLQllbHNlIGlmIChJU19FUlIoZ3B1LT5hc3Bh Y2UpKSB7CisJZ3B1LT5hc3BhY2UgPSBncHUtPmZ1bmNzLT5jcmVhdGVfYWRkcmVzc19zcGFjZShn cHUpOworCWlmIChJU19FUlIoZ3B1LT5hc3BhY2UpKSB7CiAJCXJldCA9IFBUUl9FUlIoZ3B1LT5h c3BhY2UpOwogCQlnb3RvIGZhaWw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZ3B1LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuaAppbmRleCBjYTE3MDg2 Li44MWI5ODYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuaApAQCAtNzQsNiArNzQsOCBAQCBzdHJ1Y3Qg bXNtX2dwdV9mdW5jcyB7CiAJaW50ICgqZ3B1X3N0YXRlX3B1dCkoc3RydWN0IG1zbV9ncHVfc3Rh dGUgKnN0YXRlKTsKIAl1bnNpZ25lZCBsb25nICgqZ3B1X2dldF9mcmVxKShzdHJ1Y3QgbXNtX2dw dSAqZ3B1KTsKIAl2b2lkICgqZ3B1X3NldF9mcmVxKShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1bnNp Z25lZCBsb25nIGZyZXEpOworCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKigqY3JlYXRl X2FkZHJlc3Nfc3BhY2UpCisJCShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsKIH07CiAKIHN0cnVjdCBt c21fZ3B1IHsKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9m cmVlZHJlbm8=