From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 6/9] drm/msm: Count how many times iova memory is pinned Date: Wed, 7 Nov 2018 15:35:51 -0700 Message-ID: <20181107223554.27308-7-jcrouse@codeaurora.org> References: <20181107223554.27308-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181107223554.27308-1-jcrouse@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: freedreno@lists.freedesktop.org Cc: bzwang@chromium.org, linux-arm-msm@vger.kernel.org, seanpaul@chromium.org, dri-devel@lists.freedesktop.org, sam@ravnborg.org List-Id: linux-arm-msm@vger.kernel.org QWRkIGEgcmVmZXJlbmNlIGNvdW50IHRvIHRyYWNrIGhvdyBtYW55IHRpbWVzIGEgcGFydGljdWxh cgpjaHVuayBvZiBpb3ZhIG1lbW9yeSBpcyBwaW5uZWQgKG1hcHBlZCkgaW4gdGhlIGlvbXUgYW5k CmFkZCBtc21fZ2VtX3VucGluX2lvdmEgdG8gZ2l2ZSB1cCByZWZlcmVuY2VzLgoKSXQgaXMgaW1w b3J0YW50IHRvIG5vdGUgdGhhdCBtc21fZ2VtX3VucGluX2lvdmEgcmVwbGFjZXMKbXNtX2dlbV9w dXRfaW92YSBiZWNhdXNlIHRoZSBuZXcgaW1wbGljaXQgYmVoYXZpb3IKdGhhdCBhbiBhc3NpZ25l ZCBpb3ZhIGluIGEgZ2l2ZW4gdm1hIGlzIG5vdyB2YWxpZCBmb3IgdGhlCmxpZmUgb2YgdGhlIGJ1 ZmZlciBhbmQgd2hhdCB3ZSBhcmUgcmVhbGx5IGZvY3VzaW5nIG9uIGlzCnRoZSB1c2Ugb2YgdGhh dCBpb3ZhLgoKRm9yIG5vdyB0aGUgdW5tYXBwaW5ncyBhcmUgbGF6eTsgb25jZSB0aGUgcmVmZXJl bmNlIGNvdW50cwpnbyB0byB6ZXJvIHRoZXkgKkNPVUxEKiBiZSB1bm1hcHBlZCBkeW5hbWljYWxs eSBidXQgdGhhdAp3aWxsIHJlcXVpcmUgYW4gb3V0c2lkZSBmb3JjZSBzdWNoIGFzIGEgc2hyaW5r ZXIgb3IKbW1fbm90aWZpZXJzLiAgRm9yIG5vdywgd2UncmUganVzdCBmb2N1c2luZyBvbiBnZXR0 aW5nCnRoZSBjb3VudGluZyByaWdodCBhbmQgc2V0dGluZyBvdXJzZWx2ZXMgdXAgdG8gYmUgcmVh ZHkKZm9yIHRoZSBmdXR1cmUuCgpTaWduZWQtb2ZmLWJ5OiBKb3JkYW4gQ3JvdXNlIDxqY3JvdXNl QGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1eHhfZGVi dWdmcy5jIHwgIDYgKy0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5jICAg ICB8ICA5ICsrLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMgICAgIHwg IDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA0L21kcDRfY3J0Yy5jIHwgIDIgKy0K IGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA0L21kcDRfa21zLmMgIHwgIDIgKy0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfY3J0Yy5jIHwgIDIgKy0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vZHNpL2RzaV9ob3N0LmMgICAgICAgIHwgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2Rydi5oICAgICAgICAgICAgIHwgIDggKysrLQogZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZmIuYyAgICAgICAgICAgICAgfCAgMiArLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2Vt LmMgICAgICAgICAgICAgfCA0MyArKysrKysrKysrKystLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0v bXNtL21zbV9nZW0uaCAgICAgICAgICAgICB8ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2dlbV9zdWJtaXQuYyAgICAgIHwgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbV92 bWEuYyAgICAgICAgIHwgNTEgKysrKysrKysrKysrKysrKystLS0tLS0KIGRyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX2dwdS5jICAgICAgICAgICAgIHwgIDIgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDg3 IGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vYWRyZW5vL2E1eHhfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJl bm8vYTV4eF9kZWJ1Z2ZzLmMKaW5kZXggNjk4M2NkOTEwMmJkLi5kOWFmM2FmZjY5MGYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1eHhfZGVidWdmcy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1eHhfZGVidWdmcy5jCkBAIC0xMzAsMTUgKzEzMCwx MyBAQCByZXNldF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKIAlhZHJlbm9fZ3B1LT5md1tBRFJF Tk9fRldfUEZQXSA9IE5VTEw7CiAKIAlpZiAoYTV4eF9ncHUtPnBtNF9ibykgewotCQlpZiAoYTV4 eF9ncHUtPnBtNF9pb3ZhKQotCQkJbXNtX2dlbV9wdXRfaW92YShhNXh4X2dwdS0+cG00X2JvLCBn cHUtPmFzcGFjZSk7CisJCW1zbV9nZW1fdW5waW5faW92YShhNXh4X2dwdS0+cG00X2JvLCBncHUt PmFzcGFjZSk7CiAJCWRybV9nZW1fb2JqZWN0X3B1dChhNXh4X2dwdS0+cG00X2JvKTsKIAkJYTV4 eF9ncHUtPnBtNF9ibyA9IE5VTEw7CiAJfQogCiAJaWYgKGE1eHhfZ3B1LT5wZnBfYm8pIHsKLQkJ aWYgKGE1eHhfZ3B1LT5wZnBfaW92YSkKLQkJCW1zbV9nZW1fcHV0X2lvdmEoYTV4eF9ncHUtPnBm cF9ibywgZ3B1LT5hc3BhY2UpOworCQltc21fZ2VtX3VucGluX2lvdmEoYTV4eF9ncHUtPnBmcF9i bywgZ3B1LT5hc3BhY2UpOwogCQlkcm1fZ2VtX29iamVjdF9wdXQoYTV4eF9ncHUtPnBmcF9ibyk7 CiAJCWE1eHhfZ3B1LT5wZnBfYm8gPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vYWRyZW5vL2E1eHhfZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h NXh4X2dwdS5jCmluZGV4IGQ2ZjhkZWRjMDI4YS4uMTM1NDk2MzkzY2YzIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vYWRyZW5vL2E1eHhfZ3B1LmMKQEAgLTg0MSwyMCArODQxLDE3IEBAIHN0YXRpYyB2b2lk IGE1eHhfZGVzdHJveShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQogCWE1eHhfcHJlZW1wdF9maW5pKGdw dSk7CiAKIAlpZiAoYTV4eF9ncHUtPnBtNF9ibykgewotCQlpZiAoYTV4eF9ncHUtPnBtNF9pb3Zh KQotCQkJbXNtX2dlbV9wdXRfaW92YShhNXh4X2dwdS0+cG00X2JvLCBncHUtPmFzcGFjZSk7CisJ CW1zbV9nZW1fdW5waW5faW92YShhNXh4X2dwdS0+cG00X2JvLCBncHUtPmFzcGFjZSk7CiAJCWRy bV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChhNXh4X2dwdS0+cG00X2JvKTsKIAl9CiAKIAlpZiAo YTV4eF9ncHUtPnBmcF9ibykgewotCQlpZiAoYTV4eF9ncHUtPnBmcF9pb3ZhKQotCQkJbXNtX2dl bV9wdXRfaW92YShhNXh4X2dwdS0+cGZwX2JvLCBncHUtPmFzcGFjZSk7CisJCW1zbV9nZW1fdW5w aW5faW92YShhNXh4X2dwdS0+cGZwX2JvLCBncHUtPmFzcGFjZSk7CiAJCWRybV9nZW1fb2JqZWN0 X3B1dF91bmxvY2tlZChhNXh4X2dwdS0+cGZwX2JvKTsKIAl9CiAKIAlpZiAoYTV4eF9ncHUtPmdw bXVfYm8pIHsKLQkJaWYgKGE1eHhfZ3B1LT5ncG11X2lvdmEpCi0JCQltc21fZ2VtX3B1dF9pb3Zh KGE1eHhfZ3B1LT5ncG11X2JvLCBncHUtPmFzcGFjZSk7CisJCW1zbV9nZW1fdW5waW5faW92YShh NXh4X2dwdS0+Z3BtdV9ibywgZ3B1LT5hc3BhY2UpOwogCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5s b2NrZWQoYTV4eF9ncHUtPmdwbXVfYm8pOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2 eHhfZ3B1LmMKaW5kZXggMzhiN2E1YTkyYmZiLi45YWNmMTJjMjFiMjMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYTZ4eF9ncHUuYwpAQCAtNzQ2LDggKzc0Niw3IEBAIHN0YXRpYyB2b2lkIGE2 eHhfZGVzdHJveShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQogCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9n cHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKIAogCWlmIChhNnh4X2dwdS0+c3FlX2JvKSB7 Ci0JCWlmIChhNnh4X2dwdS0+c3FlX2lvdmEpCi0JCQltc21fZ2VtX3B1dF9pb3ZhKGE2eHhfZ3B1 LT5zcWVfYm8sIGdwdS0+YXNwYWNlKTsKKwkJbXNtX2dlbV91bnBpbl9pb3ZhKGE2eHhfZ3B1LT5z cWVfYm8sIGdwdS0+YXNwYWNlKTsKIAkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGE2eHhf Z3B1LT5zcWVfYm8pOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L21kcDQvbWRwNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNC9tZHA0X2Ny dGMuYwppbmRleCBlZjY4ODRmMWZjMzQuLjhmMjM1OWRjODdiNCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL21kcDQvbWRwNF9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL21kcDQvbWRwNF9jcnRjLmMKQEAgLTEyOCw3ICsxMjgsNyBAQCBzdGF0aWMgdm9p ZCB1bnJlZl9jdXJzb3Jfd29ya2VyKHN0cnVjdCBkcm1fZmxpcF93b3JrICp3b3JrLCB2b2lkICp2 YWwpCiAJc3RydWN0IG1kcDRfa21zICptZHA0X2ttcyA9IGdldF9rbXMoJm1kcDRfY3J0Yy0+YmFz ZSk7CiAJc3RydWN0IG1zbV9rbXMgKmttcyA9ICZtZHA0X2ttcy0+YmFzZS5iYXNlOwogCi0JbXNt X2dlbV9wdXRfaW92YSh2YWwsIGttcy0+YXNwYWNlKTsKKwltc21fZ2VtX3VucGluX2lvdmEodmFs LCBrbXMtPmFzcGFjZSk7CiAJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKHZhbCk7CiB9CiAK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA0L21kcDRfa21zLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNC9tZHA0X2ttcy5jCmluZGV4IDlmZDZiOWIyZGJj Yi4uOTM0YTQ5ODE4ZWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRw NC9tZHA0X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA0L21kcDRfa21z LmMKQEAgLTE2NSw3ICsxNjUsNyBAQCBzdGF0aWMgdm9pZCBtZHA0X2Rlc3Ryb3koc3RydWN0IG1z bV9rbXMgKmttcykKIAlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2UgPSBrbXMt PmFzcGFjZTsKIAogCWlmIChtZHA0X2ttcy0+YmxhbmtfY3Vyc29yX2lvdmEpCi0JCW1zbV9nZW1f cHV0X2lvdmEobWRwNF9rbXMtPmJsYW5rX2N1cnNvcl9ibywga21zLT5hc3BhY2UpOworCQltc21f Z2VtX3VucGluX2lvdmEobWRwNF9rbXMtPmJsYW5rX2N1cnNvcl9ibywga21zLT5hc3BhY2UpOwog CWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChtZHA0X2ttcy0+YmxhbmtfY3Vyc29yX2JvKTsK IAogCWlmIChhc3BhY2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9t ZHA1L21kcDVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9jcnRj LmMKaW5kZXggYzdjYzI3NjU3NWZiLi5jNWZkZTFhNDE5MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9tZHA1L21kcDVfY3J0Yy5jCkBAIC0xNzMsNyArMTczLDcgQEAgc3RhdGljIHZvaWQg dW5yZWZfY3Vyc29yX3dvcmtlcihzdHJ1Y3QgZHJtX2ZsaXBfd29yayAqd29yaywgdm9pZCAqdmFs KQogCXN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMgPSBnZXRfa21zKCZtZHA1X2NydGMtPmJhc2Up OwogCXN0cnVjdCBtc21fa21zICprbXMgPSAmbWRwNV9rbXMtPmJhc2UuYmFzZTsKIAotCW1zbV9n ZW1fcHV0X2lvdmEodmFsLCBrbXMtPmFzcGFjZSk7CisJbXNtX2dlbV91bnBpbl9pb3ZhKHZhbCwg a21zLT5hc3BhY2UpOwogCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCh2YWwpOwogfQogCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfaG9zdC5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kc2kvZHNpX2hvc3QuYwppbmRleCA5OTEyMjc2N2FiZjQuLjNiNzA5MmUxZGNj NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kc2kvZHNpX2hvc3QuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2RzaS9kc2lfaG9zdC5jCkBAIC0xMTE4LDcgKzExMTgsNyBAQCBz dGF0aWMgdm9pZCBkc2lfdHhfYnVmX2ZyZWUoc3RydWN0IG1zbV9kc2lfaG9zdCAqbXNtX2hvc3Qp CiAKIAlwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpZiAobXNtX2hvc3QtPnR4X2dlbV9vYmop IHsKLQkJbXNtX2dlbV9wdXRfaW92YShtc21faG9zdC0+dHhfZ2VtX29iaiwgcHJpdi0+a21zLT5h c3BhY2UpOworCQltc21fZ2VtX3VucGluX2lvdmEobXNtX2hvc3QtPnR4X2dlbV9vYmosIHByaXYt Pmttcy0+YXNwYWNlKTsKIAkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKG1zbV9ob3N0LT50 eF9nZW1fb2JqKTsKIAkJbXNtX2hvc3QtPnR4X2dlbV9vYmogPSBOVUxMOwogCX0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZHJ2LmgKaW5kZXggNDM3MjUwNWEwYmRhLi45NTVjMmY1MjJkYjYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2Rydi5oCkBAIC0yNDMsMTAgKzI0MywxNCBAQCB2b2lkIG1zbV9hdG9taWNfc3RhdGVfZnJlZShz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwogCiBpbnQgbXNtX2dlbV9pbml0X3ZtYShz dHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2UsCiAJCXN0cnVjdCBtc21fZ2VtX3Zt YSAqdm1hLCBpbnQgbnBhZ2VzKTsKK3ZvaWQgbXNtX2dlbV9wdXJnZV92bWEoc3RydWN0IG1zbV9n ZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlLAorCQlzdHJ1Y3QgbXNtX2dlbV92bWEgKnZtYSk7CiB2 b2lkIG1zbV9nZW1fdW5tYXBfdm1hKHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFj ZSwKIAkJc3RydWN0IG1zbV9nZW1fdm1hICp2bWEpOwogaW50IG1zbV9nZW1fbWFwX3ZtYShzdHJ1 Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2UsCiAJCXN0cnVjdCBtc21fZ2VtX3ZtYSAq dm1hLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCwgaW50IG5wYWdlcyk7Cit2b2lkIG1zbV9nZW1fY2xv c2Vfdm1hKHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSwKKwkJc3RydWN0IG1z bV9nZW1fdm1hICp2bWEpOwogCiB2b2lkIG1zbV9nZW1fYWRkcmVzc19zcGFjZV9wdXQoc3RydWN0 IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlKTsKIApAQCAtMjc1LDEwICsyNzksMTAgQEAg aW50IG1zbV9nZW1fZ2V0X2FuZF9waW5faW92YShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwK IAkJc3RydWN0IG1zbV9nZW1fYWRkcmVzc19zcGFjZSAqYXNwYWNlLCB1aW50NjRfdCAqaW92YSk7 CiB1aW50NjRfdCBtc21fZ2VtX2lvdmEoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCiAJCXN0 cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSk7Cit2b2lkIG1zbV9nZW1fdW5waW5f aW92YShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJc3RydWN0IG1zbV9nZW1fYWRkcmVz c19zcGFjZSAqYXNwYWNlKTsKIHN0cnVjdCBwYWdlICoqbXNtX2dlbV9nZXRfcGFnZXMoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopOwogdm9pZCBtc21fZ2VtX3B1dF9wYWdlcyhzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaik7Ci12b2lkIG1zbV9nZW1fcHV0X2lvdmEoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosCi0JCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSk7CiBp bnQgbXNtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncyk7CiBpbnQg bXNtX2dlbV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiLmMKaW5kZXggNGUxZTQzNWRiNWE2Li4xMjI0NzM5 MDk0ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2ZiLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9tc21fZmIuYwpAQCAtODEsNyArODEsNyBAQCB2b2lkIG1zbV9mcmFt ZWJ1ZmZlcl9jbGVhbnVwKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCWludCBpLCBuID0g ZmItPmZvcm1hdC0+bnVtX3BsYW5lczsKIAogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCW1z bV9nZW1fcHV0X2lvdmEoZmItPm9ialtpXSwgYXNwYWNlKTsKKwkJbXNtX2dlbV91bnBpbl9pb3Zh KGZiLT5vYmpbaV0sIGFzcGFjZSk7CiB9CiAKIHVpbnQzMl90IG1zbV9mcmFtZWJ1ZmZlcl9pb3Zh KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYwppbmRleCBkNDI3 ZDlkM2YwMTMuLjk2ZmY2OThkZGVlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMKQEAgLTM1Miw3ICsz NTIsOCBAQCBwdXRfaW92YShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIAlXQVJOX09OKCFt dXRleF9pc19sb2NrZWQoJm1zbV9vYmotPmxvY2spKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZSh2bWEsIHRtcCwgJm1zbV9vYmotPnZtYXMsIGxpc3QpIHsKLQkJbXNtX2dlbV91bm1hcF92 bWEodm1hLT5hc3BhY2UsIHZtYSk7CisJCW1zbV9nZW1fcHVyZ2Vfdm1hKHZtYS0+YXNwYWNlLCB2 bWEpOworCQltc21fZ2VtX2Nsb3NlX3ZtYSh2bWEtPmFzcGFjZSwgdm1hKTsKIAkJZGVsX3ZtYSh2 bWEpOwogCX0KIH0KQEAgLTQzMCw3ICs0MzEsMTAgQEAgaW50IG1zbV9nZW1fZ2V0X2FuZF9waW5f aW92YShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBH ZXQgYW4gaW92YSBidXQgZG9uJ3QgcGluIHRoZSBtZW1vcnkgYmVoaW5kIGl0ICovCisvKgorICog R2V0IGFuIGlvdmEgYnV0IGRvbid0IHBpbiBpdC4gRG9lc24ndCBuZWVkIGEgcHV0IGJlY2F1c2Ug aW92YXMgYXJlIGN1cnJlbnRseQorICogdmFsaWQgZm9yIHRoZSBsaWZlIG9mIHRoZSBvYmplY3QK KyAqLwogaW50IG1zbV9nZW1fZ2V0X2lvdmEoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCiAJ CXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSwgdWludDY0X3QgKmlvdmEpCiB7 CkBAIC00NDQsNyArNDQ4LDYgQEAgaW50IG1zbV9nZW1fZ2V0X2lvdmEoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosCiAJcmV0dXJuIHJldDsKIH0KIAotCiAvKiBnZXQgaW92YSB3aXRob3V0IHRh a2luZyBhIHJlZmVyZW5jZSwgdXNlZCBpbiBwbGFjZXMgd2hlcmUgeW91IGhhdmUKICAqIGFscmVh ZHkgZG9uZSBhICdtc21fZ2VtX2dldF9hbmRfcGluX2lvdmEnIG9yICdtc21fZ2VtX2dldF9pb3Zh JwogICovCkBAIC00NjIsMTUgKzQ2NSwyNCBAQCB1aW50NjRfdCBtc21fZ2VtX2lvdmEoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmosCiAJcmV0dXJuIHZtYSA/IHZtYS0+aW92YSA6IDA7CiB9CiAK LXZvaWQgbXNtX2dlbV9wdXRfaW92YShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKy8qCisg KiBVbnBpbiBhIGlvdmEgYnkgdXBkYXRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudHMuIFRoZSBtZW1v cnkgaXNuJ3QgYWN0dWFsbHkKKyAqIHB1cmdlZCB1bnRpbCBzb21ldGhpbmcgZWxzZSAoc2hyaW5r ZXIsIG1tX25vdGlmaWVyLCBkZXN0cm95LCBldGMpIGRlY2lkZXMKKyAqIHRvIGdldCByaWQgb2Yg aXQKKyAqLwordm9pZCBtc21fZ2VtX3VucGluX2lvdmEoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmosCiAJCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSkKIHsKLQkvLyBYWFgg VE9ETyAuLgotCS8vIE5PVEU6IHByb2JhYmx5IGRvbid0IG5lZWQgYSBfbG9ja2VkKCkgdmVyc2lv bi4uIHdlIHdvdWxkbid0Ci0JLy8gbm9ybWFsbHkgdW5tYXAgaGVyZSwgYnV0IGluc3RlYWQganVz dCBtYXJrIHRoYXQgaXQgY291bGQgYmUKLQkvLyB1bm1hcHBlZCAoaWYgdGhlIGlvdmEgcmVmY250 IGRyb3BzIHRvIHplcm8pLCBidXQgdGhlbiBsYXRlcgotCS8vIGlmIGFub3RoZXIgX2dldF9pb3Zh X2xvY2tlZCgpIGZhaWxzIHdlIGNhbiBzdGFydCB1bm1hcHBpbmcKLQkvLyB0aGluZ3MgdGhhdCBh cmUgbm8gbG9uZ2VyIG5lZWRlZC4uCisJc3RydWN0IG1zbV9nZW1fb2JqZWN0ICptc21fb2JqID0g dG9fbXNtX2JvKG9iaik7CisJc3RydWN0IG1zbV9nZW1fdm1hICp2bWE7CisKKwltdXRleF9sb2Nr KCZtc21fb2JqLT5sb2NrKTsKKwl2bWEgPSBsb29rdXBfdm1hKG9iaiwgYXNwYWNlKTsKKworCWlm ICghV0FSTl9PTighdm1hKSkKKwkJbXNtX2dlbV91bm1hcF92bWEoYXNwYWNlLCB2bWEpOworCisJ bXV0ZXhfdW5sb2NrKCZtc21fb2JqLT5sb2NrKTsKIH0KIAogaW50IG1zbV9nZW1fZHVtYl9jcmVh dGUoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LApAQCAtNzg2 LDExICs3OTgsMTIgQEAgdm9pZCBtc21fZ2VtX2Rlc2NyaWJlKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiAKIAlpZiAoIWxpc3RfZW1wdHkoJm1zbV9vYmot PnZtYXMpKSB7CiAKLQkJc2VxX3B1dHMobSwgIiAgIHZtYXM6Iik7CisJCXNlcV9wdXRzKG0sICIg ICAgICB2bWFzOiIpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmbXNtX29iai0+dm1h cywgbGlzdCkKLQkJCXNlcV9wcmludGYobSwgIiBbJXM6ICUwOGxseCwlc10iLCB2bWEtPmFzcGFj ZS0+bmFtZSwKLQkJCQl2bWEtPmlvdmEsIHZtYS0+bWFwcGVkID8gIm1hcHBlZCIgOiAidW5tYXBw ZWQiKTsKKwkJCXNlcV9wcmludGYobSwgIiBbJXM6ICUwOGxseCwlcyxpbnVzZT0lZF0iLCB2bWEt PmFzcGFjZS0+bmFtZSwKKwkJCQl2bWEtPmlvdmEsIHZtYS0+bWFwcGVkID8gIm1hcHBlZCIgOiAi dW5tYXBwZWQiLAorCQkJCXZtYS0+aW51c2UpOwogCiAJCXNlcV9wdXRzKG0sICJcbiIpOwogCX0K QEAgLTEwOTUsNyArMTEwOCw3IEBAIHN0YXRpYyB2b2lkICpfbXNtX2dlbV9rZXJuZWxfbmV3KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHNpemUsCiAKIAl2YWRkciA9IG1zbV9nZW1f Z2V0X3ZhZGRyKG9iaik7CiAJaWYgKElTX0VSUih2YWRkcikpIHsKLQkJbXNtX2dlbV9wdXRfaW92 YShvYmosIGFzcGFjZSk7CisJCW1zbV9nZW1fdW5waW5faW92YShvYmosIGFzcGFjZSk7CiAJCWRy bV9nZW1fb2JqZWN0X3B1dChvYmopOwogCQlyZXR1cm4gRVJSX0NBU1QodmFkZHIpOwogCX0KQEAg LTExMjcsNyArMTE0MCw3IEBAIHZvaWQgbXNtX2dlbV9rZXJuZWxfcHV0KHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqYm8sCiAJCXJldHVybjsKIAogCW1zbV9nZW1fcHV0X3ZhZGRyKGJvKTsKLQltc21f Z2VtX3B1dF9pb3ZhKGJvLCBhc3BhY2UpOworCW1zbV9nZW1fdW5waW5faW92YShibywgYXNwYWNl KTsKIAogCWlmIChsb2NrZWQpCiAJCWRybV9nZW1fb2JqZWN0X3B1dChibyk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2dlbS5oCmluZGV4IDMyYzEzZTY1NTliNS4uNTNkM2JmNDlhOWZhIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9n ZW0uaApAQCAtNDIsNiArNDIsNyBAQCBzdHJ1Y3QgbXNtX2dlbV92bWEgewogCXN0cnVjdCBtc21f Z2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7ICAgIC8q IG5vZGUgaW4gbXNtX2dlbV9vYmplY3Q6OnZtYXMgKi8KIAlib29sIG1hcHBlZDsKKwlpbnQgaW51 c2U7CiB9OwogCiBzdHJ1Y3QgbXNtX2dlbV9vYmplY3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZ2VtX3N1Ym1pdC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2Vt X3N1Ym1pdC5jCmluZGV4IGRhOTA3MjYwNjYwYy4uOWM3ODUyMWVlMDhhIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fc3VibWl0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZ2VtX3N1Ym1pdC5jCkBAIC0xNjcsNyArMTY3LDcgQEAgc3RhdGljIHZvaWQgc3Vi bWl0X3VubG9ja191bnBpbl9ibyhzdHJ1Y3QgbXNtX2dlbV9zdWJtaXQgKnN1Ym1pdCwKIAlzdHJ1 Y3QgbXNtX2dlbV9vYmplY3QgKm1zbV9vYmogPSBzdWJtaXQtPmJvc1tpXS5vYmo7CiAKIAlpZiAo c3VibWl0LT5ib3NbaV0uZmxhZ3MgJiBCT19QSU5ORUQpCi0JCW1zbV9nZW1fcHV0X2lvdmEoJm1z bV9vYmotPmJhc2UsIHN1Ym1pdC0+Z3B1LT5hc3BhY2UpOworCQltc21fZ2VtX3VucGluX2lvdmEo Jm1zbV9vYmotPmJhc2UsIHN1Ym1pdC0+Z3B1LT5hc3BhY2UpOwogCiAJaWYgKHN1Ym1pdC0+Ym9z W2ldLmZsYWdzICYgQk9fTE9DS0VEKQogCQl3d19tdXRleF91bmxvY2soJm1zbV9vYmotPnJlc3Yt PmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3ZtYS5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3ZtYS5jCmluZGV4IGM0YzQyYmYwZGIwZS4uZWU0 NmQ4MzIxYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW1fdm1hLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtX3ZtYS5jCkBAIC0zOCwyNiArMzgsMzIg QEAgdm9pZCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2VfcHV0KHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nf c3BhY2UgKmFzcGFjZSkKIAkJa3JlZl9wdXQoJmFzcGFjZS0+a3JlZiwgbXNtX2dlbV9hZGRyZXNz X3NwYWNlX2Rlc3Ryb3kpOwogfQogCi12b2lkCi1tc21fZ2VtX3VubWFwX3ZtYShzdHJ1Y3QgbXNt X2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2UsCisvKiBBY3R1YWxseSB1bm1hcCBtZW1vcnkgZm9y IHRoZSB2bWEgKi8KK3ZvaWQgbXNtX2dlbV9wdXJnZV92bWEoc3RydWN0IG1zbV9nZW1fYWRkcmVz c19zcGFjZSAqYXNwYWNlLAogCQlzdHJ1Y3QgbXNtX2dlbV92bWEgKnZtYSkKIHsKLQlpZiAoIWFz cGFjZSB8fCAhdm1hLT5pb3ZhKQorCXVuc2lnbmVkIHNpemUgPSB2bWEtPm5vZGUuc2l6ZSA8PCBQ QUdFX1NISUZUOworCisJLyogUHJpbnQgYSBtZXNzYWdlIGlmIHdlIHRyeSB0byBwdXJnZSBhIHZt YSBpbiB1c2UgKi8KKwlpZiAoV0FSTl9PTih2bWEtPmludXNlID4gMCkpCiAJCXJldHVybjsKIAot CWlmIChhc3BhY2UtPm1tdSkgewotCQl1bnNpZ25lZCBzaXplID0gdm1hLT5ub2RlLnNpemUgPDwg UEFHRV9TSElGVDsKLQkJYXNwYWNlLT5tbXUtPmZ1bmNzLT51bm1hcChhc3BhY2UtPm1tdSwgdm1h LT5pb3ZhLCBzaXplKTsKLQl9CisJLyogRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIG1lbW9yeSBp c24ndCBtYXBwZWQgKi8KKwlpZiAoIXZtYS0+bWFwcGVkKQorCQlyZXR1cm47CiAKLQlzcGluX2xv Y2soJmFzcGFjZS0+bG9jayk7Ci0JZHJtX21tX3JlbW92ZV9ub2RlKCZ2bWEtPm5vZGUpOwotCXNw aW5fdW5sb2NrKCZhc3BhY2UtPmxvY2spOworCWlmIChhc3BhY2UtPm1tdSkKKwkJYXNwYWNlLT5t bXUtPmZ1bmNzLT51bm1hcChhc3BhY2UtPm1tdSwgdm1hLT5pb3ZhLCBzaXplKTsKIAotCXZtYS0+ aW92YSA9IDA7CiAJdm1hLT5tYXBwZWQgPSBmYWxzZTsKK30KIAotCW1zbV9nZW1fYWRkcmVzc19z cGFjZV9wdXQoYXNwYWNlKTsKKy8qIFJlbW92ZSByZWZlcmVuY2UgY291bnRzIGZvciB0aGUgbWFw cGluZyAqLwordm9pZCBtc21fZ2VtX3VubWFwX3ZtYShzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3Nw YWNlICphc3BhY2UsCisJCXN0cnVjdCBtc21fZ2VtX3ZtYSAqdm1hKQoreworCWlmICghV0FSTl9P Tighdm1hLT5pb3ZhKSkKKwkJdm1hLT5pbnVzZS0tOwogfQogCiBpbnQKQEAgLTcwLDYgKzc2LDkg QEAgbXNtX2dlbV9tYXBfdm1hKHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSwK IAlpZiAoV0FSTl9PTighdm1hLT5pb3ZhKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBJbmNy ZWFzZSB0aGUgdXNhZ2UgY291bnRlciAqLworCXZtYS0+aW51c2UrKzsKKwogCWlmICh2bWEtPm1h cHBlZCkKIAkJcmV0dXJuIDA7CiAKQEAgLTg1LDYgKzk0LDIzIEBAIG1zbV9nZW1fbWFwX3ZtYShz dHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2UsCiAJcmV0dXJuIHJldDsKIH0KIAor LyogQ2xvc2UgYW4gaW92YS4gIFdhcm4gaWYgaXQgaXMgc3RpbGwgaW4gdXNlICovCit2b2lkIG1z bV9nZW1fY2xvc2Vfdm1hKHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSwKKwkJ c3RydWN0IG1zbV9nZW1fdm1hICp2bWEpCit7CisJaWYgKFdBUk5fT04odm1hLT5pbnVzZSA+IDAg fHwgdm1hLT5tYXBwZWQpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmFzcGFjZS0+bG9jayk7 CisJaWYgKHZtYS0+aW92YSkKKwkJZHJtX21tX3JlbW92ZV9ub2RlKCZ2bWEtPm5vZGUpOworCXNw aW5fdW5sb2NrKCZhc3BhY2UtPmxvY2spOworCisJdm1hLT5pb3ZhID0gMDsKKworCW1zbV9nZW1f YWRkcmVzc19zcGFjZV9wdXQoYXNwYWNlKTsKK30KKwogLyogSW5pdGlhbGl6ZSBhIG5ldyB2bWEg YW5kIGFsbG9jYXRlIGFuIGlvdmEgZm9yIGl0ICovCiBpbnQgbXNtX2dlbV9pbml0X3ZtYShzdHJ1 Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3BhY2UsCiAJCXN0cnVjdCBtc21fZ2VtX3ZtYSAq dm1hLCBpbnQgbnBhZ2VzKQpAQCAtMTA5LDYgKzEzNSw3IEBAIGludCBtc21fZ2VtX2luaXRfdm1h KHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSwKIAlyZXR1cm4gMDsKIH0KIAor CiBzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICoKIG1zbV9nZW1fYWRkcmVzc19zcGFjZV9j cmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJ CWNvbnN0IGNoYXIgKm5hbWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9n cHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5jCmluZGV4IDEzZGFiOTUyN2JkYS4u ZTZjZTI0YmZiOWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuYwpAQCAtNjcwLDcgKzY3MCw3IEBAIHN0 YXRpYyB2b2lkIHJldGlyZV9zdWJtaXQoc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9n ZW1fc3VibWl0ICpzdWJtaXQpCiAJCXN0cnVjdCBtc21fZ2VtX29iamVjdCAqbXNtX29iaiA9IHN1 Ym1pdC0+Ym9zW2ldLm9iajsKIAkJLyogbW92ZSB0byBpbmFjdGl2ZTogKi8KIAkJbXNtX2dlbV9t b3ZlX3RvX2luYWN0aXZlKCZtc21fb2JqLT5iYXNlKTsKLQkJbXNtX2dlbV9wdXRfaW92YSgmbXNt X29iai0+YmFzZSwgZ3B1LT5hc3BhY2UpOworCQltc21fZ2VtX3VucGluX2lvdmEoJm1zbV9vYmot PmJhc2UsIGdwdS0+YXNwYWNlKTsKIAkJZHJtX2dlbV9vYmplY3RfcHV0KCZtc21fb2JqLT5iYXNl KTsKIAl9CiAKLS0gCjIuMTguMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==