From mboxrd@z Thu Jan 1 00:00:00 1970 From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" Subject: [PATCH 4/4] drm/amdgpu: add independent DMA-buf import v8 Date: Mon, 21 Oct 2019 13:15:24 +0200 Message-ID: <20191021111524.14793-4-christian.koenig@amd.com> References: <20191021111524.14793-1-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191021111524.14793-1-christian.koenig@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, sumit.semwal@linaro.org, linaro-mm-sig@lists.linaro.org, linux-media@vger.kernel.org, intel-gfx@lists.freedesktop.org, daniel@ffwll.ch List-Id: intel-gfx@lists.freedesktop.org SW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBEUk0gZnVuY3Rpb25zIGp1c3QgaW1wbGVtZW50IG91 ciBvd24gaW1wb3J0CmZ1bmN0aW9ucy4gVGhpcyBwcmVwYXJlcyBzdXBwb3J0IGZvciB0YWtpbmcg Y2FyZSBvZiB1bnBpbm5lZCBETUEtYnVmLgoKdjI6IGVuYWJsZSBmb3IgYWxsIGV4cG9ydGVycywg bm90IGp1c3QgYW1kZ3B1LCBmaXggaW52YWxpZGF0aW9uCiAgICBoYW5kbGluZywgbG9jayByZXNl cnZhdGlvbiBvYmplY3Qgd2hpbGUgc2V0dGluZyBjYWxsYmFjawp2MzogY2hhbmdlIHRvIG5ldyBk bWFfYnVmIGF0dGFjaCBpbnRlcmZhY2UKdjQ6IHNwbGl0IG91dCBmcm9tIHVucGlubmVkIERNQS1i dWYgd29yawp2NTogcmViYXNlZCBhbmQgY2xlYW51cCBvbiBuZXcgRE1BLWJ1ZiBpbnRlcmZhY2UK djY6IHNxdWFzaCB3aXRoIGludmFsaWRhdGlvbiBjYWxsYmFjayBjaGFuZ2UsCiAgICBzdG9wIHVz aW5nIF8obWFwfHVubWFwKV9sb2NrZWQKdjc6IGRyb3AgaW52YWxpZGF0aW9ucyB3aGVuIHRoZSBC TyBpcyBhbHJlYWR5IGluIHN5c3RlbSBkb21haW4Kdjg6IHJlYmFzZSBvbiBuZXcgRE1BLWJ1ZiBw YXRjaCBhbmQgZHJvcCBtb3ZlIG5vdGlmaWNhdGlvbgoKU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFu IEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgfCAzOCArKysrKysrKysrKysrLS0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmggfCAgNCAtLS0KIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYyAgICAgfCAgMSAtCiBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgICAgIHwgMzIgKysrKysrKysrKysrKystLS0K IDQgZmlsZXMgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKaW5kZXggZjE0YjUyY2M3 MjA1Li5jMjJkMTFkZjAxM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9kbWFfYnVmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2RtYV9idWYuYwpAQCAtMzcwLDMxICszNzAsMjggQEAgc3RydWN0IGRtYV9idWYgKmFtZGdwdV9n ZW1fcHJpbWVfZXhwb3J0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iaiwKIH0KIAogLyoqCi0g KiBhbWRncHVfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSAtICZkcm1fZHJpdmVyLmdlbV9wcmlt ZV9pbXBvcnRfc2dfdGFibGUKLSAqIGltcGxlbWVudGF0aW9uCisgKiBhbWRncHVfZG1hX2J1Zl9j cmVhdGVfb2JqIC0gY3JlYXRlIEJPIGZvciBETUEtYnVmIGltcG9ydAorICoKICAqIEBkZXY6IERS TSBkZXZpY2UKLSAqIEBhdHRhY2g6IERNQS1idWYgYXR0YWNobWVudAotICogQHNnOiBTY2F0dGVy L2dhdGhlciB0YWJsZQorICogQGRtYV9idWY6IERNQS1idWYKICAqCi0gKiBJbXBvcnRzIHNoYXJl ZCBETUEgYnVmZmVyIG1lbW9yeSBleHBvcnRlZCBieSBhbm90aGVyIGRldmljZS4KKyAqIENyZWF0 ZXMgYW4gZW1wdHkgU0cgQk8gZm9yIERNQS1idWYgaW1wb3J0LgogICoKICAqIFJldHVybnM6CiAg KiBBIG5ldyBHRU0gQk8gb2YgdGhlIGdpdmVuIERSTSBkZXZpY2UsIHJlcHJlc2VudGluZyB0aGUg bWVtb3J5CiAgKiBkZXNjcmliZWQgYnkgdGhlIGdpdmVuIERNQS1idWYgYXR0YWNobWVudCBhbmQg c2NhdHRlci9nYXRoZXIgdGFibGUuCiAgKi8KLXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqCi1hbWRn cHVfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJ CSBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCi0JCQkJIHN0cnVjdCBzZ190YWJs ZSAqc2cpCitzdGF0aWMgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKK2FtZGdwdV9kbWFfYnVmX2Ny ZWF0ZV9vYmooc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRtYV9idWYgKmRtYV9idWYp CiB7Ci0Jc3RydWN0IGRtYV9yZXN2ICpyZXN2ID0gYXR0YWNoLT5kbWFidWYtPnJlc3Y7CisJc3Ry dWN0IGRtYV9yZXN2ICpyZXN2ID0gZG1hX2J1Zi0+cmVzdjsKIAlzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGFtZGdwdV9ibyAqYm87CiAJc3Ry dWN0IGFtZGdwdV9ib19wYXJhbSBicDsKIAlpbnQgcmV0OwogCiAJbWVtc2V0KCZicCwgMCwgc2l6 ZW9mKGJwKSk7Ci0JYnAuc2l6ZSA9IGF0dGFjaC0+ZG1hYnVmLT5zaXplOworCWJwLnNpemUgPSBk bWFfYnVmLT5zaXplOwogCWJwLmJ5dGVfYWxpZ24gPSBQQUdFX1NJWkU7CiAJYnAuZG9tYWluID0g QU1ER1BVX0dFTV9ET01BSU5fQ1BVOwogCWJwLmZsYWdzID0gMDsKQEAgLTQwNSwxMSArNDAyLDkg QEAgYW1kZ3B1X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yOwogCi0JYm8tPnRiby5zZyA9IHNnOwotCWJvLT50 Ym8udHRtLT5zZyA9IHNnOwogCWJvLT5hbGxvd2VkX2RvbWFpbnMgPSBBTURHUFVfR0VNX0RPTUFJ Tl9HVFQ7CiAJYm8tPnByZWZlcnJlZF9kb21haW5zID0gQU1ER1BVX0dFTV9ET01BSU5fR1RUOwot CWlmIChhdHRhY2gtPmRtYWJ1Zi0+b3BzICE9ICZhbWRncHVfZG1hYnVmX29wcykKKwlpZiAoZG1h X2J1Zi0+b3BzICE9ICZhbWRncHVfZG1hYnVmX29wcykKIAkJYm8tPnByaW1lX3NoYXJlZF9jb3Vu dCA9IDE7CiAKIAlkbWFfcmVzdl91bmxvY2socmVzdik7CkBAIC00MzQsNiArNDI5LDcgQEAgYW1k Z3B1X2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqYW1kZ3B1X2dlbV9wcmltZV9pbXBvcnQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKIAkJCQkJICAgIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQogeworCXN0cnVj dCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i ajsKIAogCWlmIChkbWFfYnVmLT5vcHMgPT0gJmFtZGdwdV9kbWFidWZfb3BzKSB7CkBAIC00NDgs NSArNDQ0LDE3IEBAIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYW1kZ3B1X2dlbV9wcmltZV9pbXBv cnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJfQogCX0KIAotCXJldHVybiBkcm1fZ2VtX3By aW1lX2ltcG9ydChkZXYsIGRtYV9idWYpOworCW9iaiA9IGFtZGdwdV9kbWFfYnVmX2NyZWF0ZV9v YmooZGV2LCBkbWFfYnVmKTsKKwlpZiAoSVNfRVJSKG9iaikpCisJCXJldHVybiBvYmo7CisKKwlh dHRhY2ggPSBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoKGRtYV9idWYsIGRldi0+ZGV2LCB0cnVlKTsK KwlpZiAoSVNfRVJSKGF0dGFjaCkpIHsKKwkJZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7CisJCXJl dHVybiBFUlJfQ0FTVChhdHRhY2gpOworCX0KKworCWdldF9kbWFfYnVmKGRtYV9idWYpOworCW9i ai0+aW1wb3J0X2F0dGFjaCA9IGF0dGFjaDsKKwlyZXR1cm4gb2JqOwogfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuaCBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmgKaW5kZXggY2UxYjNmMDE3NDUxLi5lYzQ0 N2E3YjZiMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9k bWFfYnVmLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYu aApAQCAtMjUsMTAgKzI1LDYgQEAKIAogI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CiAKLXN0cnVj dCBkcm1fZ2VtX29iamVjdCAqCi1hbWRncHVfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRh Y2gsCi0JCQkJIHN0cnVjdCBzZ190YWJsZSAqc2cpOwogc3RydWN0IGRtYV9idWYgKmFtZGdwdV9n ZW1fcHJpbWVfZXhwb3J0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iaiwKIAkJCQkJaW50IGZs YWdzKTsKIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqYW1kZ3B1X2dlbV9wcmltZV9pbXBvcnQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYu YwppbmRleCBiZjViZjE1YjEyZTMuLjdhY2NhMDU4NTEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kcnYuYwpAQCAtMTQwOSw3ICsxNDA5LDYgQEAgc3RhdGljIHN0cnVjdCBk cm1fZHJpdmVyIGttc19kcml2ZXIgPSB7CiAJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1f cHJpbWVfZmRfdG9faGFuZGxlLAogCS5nZW1fcHJpbWVfZXhwb3J0ID0gYW1kZ3B1X2dlbV9wcmlt ZV9leHBvcnQsCiAJLmdlbV9wcmltZV9pbXBvcnQgPSBhbWRncHVfZ2VtX3ByaW1lX2ltcG9ydCwK LQkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGFtZGdwdV9nZW1fcHJpbWVfaW1wb3J0X3Nn X3RhYmxlLAogCS5nZW1fcHJpbWVfdm1hcCA9IGFtZGdwdV9nZW1fcHJpbWVfdm1hcCwKIAkuZ2Vt X3ByaW1lX3Z1bm1hcCA9IGFtZGdwdV9nZW1fcHJpbWVfdnVubWFwLAogCS5nZW1fcHJpbWVfbW1h cCA9IGFtZGdwdV9nZW1fcHJpbWVfbW1hcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV90dG0uYwppbmRleCA4ZTg2N2I4YjQzMmYuLmMxOTEwMGNlZDA0MCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dp b3RsYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KIAogI2luY2x1ZGUgPGRybS90dG0v dHRtX2JvX2FwaS5oPgogI2luY2x1ZGUgPGRybS90dG0vdHRtX2JvX2RyaXZlci5oPgpAQCAtNzYz LDYgKzc2NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGFtZGdwdV90dG1faW9fbWVtX3Bmbihz dHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogICovCiBzdHJ1Y3QgYW1kZ3B1X3R0bV90dCB7 CiAJc3RydWN0IHR0bV9kbWFfdHQJdHRtOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdAkqZ29iajsK IAl1NjQJCQlvZmZzZXQ7CiAJdWludDY0X3QJCXVzZXJwdHI7CiAJc3RydWN0IHRhc2tfc3RydWN0 CSp1c2VydGFzazsKQEAgLTEyMjcsNiArMTIyOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgdHRtX3R0ICph bWRncHVfdHRtX3R0X2NyZWF0ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQlyZXR1 cm4gTlVMTDsKIAl9CiAJZ3R0LT50dG0udHRtLmZ1bmMgPSAmYW1kZ3B1X2JhY2tlbmRfZnVuYzsK KwlndHQtPmdvYmogPSAmYm8tPmJhc2U7CiAKIAkvKiBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHVu aW5pdGlhbGl6ZWQgcGFnZSBlbnRyaWVzICovCiAJaWYgKHR0bV9zZ190dF9pbml0KCZndHQtPnR0 bSwgYm8sIHBhZ2VfZmxhZ3MpKSB7CkBAIC0xMjQ3LDcgKzEyNTAsNiBAQCBzdGF0aWMgaW50IGFt ZGdwdV90dG1fdHRfcG9wdWxhdGUoc3RydWN0IHR0bV90dCAqdHRtLAogewogCXN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2ID0gYW1kZ3B1X3R0bV9hZGV2KHR0bS0+YmRldik7CiAJc3RydWN0IGFt ZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwotCWJvb2wgc2xhdmUgPSAhISh0dG0tPnBh Z2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1NHKTsKIAogCS8qIHVzZXIgcGFnZXMgYXJlIGJvdW5k IGJ5IGFtZGdwdV90dG1fdHRfcGluX3VzZXJwdHIoKSAqLwogCWlmIChndHQgJiYgZ3R0LT51c2Vy cHRyKSB7CkBAIC0xMjYwLDcgKzEyNjIsMTkgQEAgc3RhdGljIGludCBhbWRncHVfdHRtX3R0X3Bv cHVsYXRlKHN0cnVjdCB0dG1fdHQgKnR0bSwKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHNsYXZl ICYmIHR0bS0+c2cpIHsKKwlpZiAodHRtLT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxBR19TRykg eworCQlpZiAoIXR0bS0+c2cpIHsKKwkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFj aDsKKwkJCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCisJCQlhdHRhY2ggPSBndHQtPmdvYmotPmlt cG9ydF9hdHRhY2g7CisJCQlzZ3QgPSBkbWFfYnVmX21hcF9hdHRhY2htZW50KGF0dGFjaCwgRE1B X0JJRElSRUNUSU9OQUwpOworCQkJaWYgKElTX0VSUihzZ3QpKQorCQkJCXJldHVybiBQVFJfRVJS KHNndCk7CisKKwkJCXR0bS0+c2cgPSBzZ3Q7CisJCX0KKwogCQlkcm1fcHJpbWVfc2dfdG9fcGFn ZV9hZGRyX2FycmF5cyh0dG0tPnNnLCB0dG0tPnBhZ2VzLAogCQkJCQkJIGd0dC0+dHRtLmRtYV9h ZGRyZXNzLAogCQkJCQkJIHR0bS0+bnVtX3BhZ2VzKTsKQEAgLTEyODcsOSArMTMwMSw4IEBAIHN0 YXRpYyBpbnQgYW1kZ3B1X3R0bV90dF9wb3B1bGF0ZShzdHJ1Y3QgdHRtX3R0ICp0dG0sCiAgKi8K IHN0YXRpYyB2b2lkIGFtZGdwdV90dG1fdHRfdW5wb3B1bGF0ZShzdHJ1Y3QgdHRtX3R0ICp0dG0p CiB7Ci0Jc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXY7CiAJc3RydWN0IGFtZGdwdV90dG1fdHQg Kmd0dCA9ICh2b2lkICopdHRtOwotCWJvb2wgc2xhdmUgPSAhISh0dG0tPnBhZ2VfZmxhZ3MgJiBU VE1fUEFHRV9GTEFHX1NHKTsKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldjsKIAogCWlmIChn dHQgJiYgZ3R0LT51c2VycHRyKSB7CiAJCWFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXModHRt LCBOVUxMKTsKQEAgLTEyOTgsNyArMTMxMSwxNiBAQCBzdGF0aWMgdm9pZCBhbWRncHVfdHRtX3R0 X3VucG9wdWxhdGUoc3RydWN0IHR0bV90dCAqdHRtKQogCQlyZXR1cm47CiAJfQogCi0JaWYgKHNs YXZlKQorCWlmICh0dG0tPnNnICYmIGd0dC0+Z29iai0+aW1wb3J0X2F0dGFjaCkgeworCQlzdHJ1 Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7CisKKwkJYXR0YWNoID0gZ3R0LT5nb2JqLT5p bXBvcnRfYXR0YWNoOworCQlkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNoLCB0dG0tPnNn LCBETUFfQklESVJFQ1RJT05BTCk7CisJCXR0bS0+c2cgPSBOVUxMOworCQlyZXR1cm47CisJfQor CisJaWYgKHR0bS0+cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdfU0cpCiAJCXJldHVybjsKIAog CWFkZXYgPSBhbWRncHVfdHRtX2FkZXYodHRtLT5iZGV2KTsKLS0gCjIuMTcuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs