From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rodrigo Siqueira Subject: [PATCH V3 1/4] drm/vkms: Add dumb operations Date: Wed, 11 Jul 2018 23:01:47 -0300 Message-ID: <70b7becc91c6a323dbc15cb5fc912cbdfe4ef7d9.1531359228.git.rodrigosiqueiramelo@gmail.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qt0-x243.google.com (mail-qt0-x243.google.com [IPv6:2607:f8b0:400d:c0d::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7E4D06ED7B for ; Thu, 12 Jul 2018 02:01:51 +0000 (UTC) Received: by mail-qt0-x243.google.com with SMTP id c5-v6so22860291qth.5 for ; Wed, 11 Jul 2018 19:01:51 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , Gustavo Padovan , Sean Paul , Haneen Mohammed Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VktNUyBjdXJyZW50bHkgZG9lcyBub3QgaGFuZGxlIGR1bWIgZGF0YSwgYW5kIGFzIGEgY29uc2Vx dWVuY2UsIGl0IGRvZXMKbm90IHByb3ZpZGUgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgZ2VtLiBU aGlzIGNvbW1pdCBhZGRzIHRoZSBuZWNlc3NhcnkKc3VwcG9ydCBmb3IgZ2VtIG9iamVjdC9oYW5k bGVyIGFuZCB0aGUgZHVtYiBmdW5jdGlvbnMuCgpDaGFuZ2VzIHNpbmNlIFYxOgogRGFuaWVsIFZl dHRlcjoKIC0gQWRkIGR1bWIgYnVmZmVyIHN1cHBvcnQgdG8gdGhlIHNhbWUgcGF0Y2hzZXQKQ2hh bmdlcyBzaW5jZSBWMjoKIEhhbmVlbjoKIC0gQWRkIG1pc3NpbmcgZ2VtX2ZyZWVfb2JqZWN0X3Vu bG9ja2VkIGNhbGxiYWNrIHRvIGZpeCB0aGUgd2FybmluZwogICAiTWVtb3J5IG1hbmFnZXIgbm90 IGNsZWFuIGR1cmluZyB0YWtlZG93biIKClNpZ25lZC1vZmYtYnk6IFJvZHJpZ28gU2lxdWVpcmEg PHJvZHJpZ29zaXF1ZWlyYW1lbG9AZ21haWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92a21z L01ha2VmaWxlICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS92a21zL3ZrbXNfZHJ2LmMgfCAg MTAgKysKIGRyaXZlcnMvZ3B1L2RybS92a21zL3ZrbXNfZHJ2LmggfCAgMjMgKysrKwogZHJpdmVy cy9ncHUvZHJtL3ZrbXMvdmttc19nZW0uYyB8IDE3OSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAyMTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92a21zL3ZrbXNfZ2VtLmMKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmttcy9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS92a21zL01ha2VmaWxlCmluZGV4IDNmNzc0YTZhOWM1OC4uOTg2Mjk3ZGE1MWJmIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vdmttcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v dmttcy9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKLXZrbXMteSA6PSB2a21zX2Rydi5vIHZrbXNf cGxhbmUubyB2a21zX291dHB1dC5vIHZrbXNfY3J0Yy5vCit2a21zLXkgOj0gdmttc19kcnYubyB2 a21zX3BsYW5lLm8gdmttc19vdXRwdXQubyB2a21zX2NydGMubyB2a21zX2dlbS5vCiAKIG9iai0k KENPTkZJR19EUk1fVktNUykgKz0gdmttcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dmttcy92a21zX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3ZrbXMvdmttc19kcnYuYwppbmRleCA3 NDBhNGNiZmVkOTEuLjZlYTJmZDk3YmVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zr bXMvdmttc19kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmttcy92a21zX2Rydi5jCkBAIC0z Nyw2ICszNywxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2a21zX2Ry aXZlcl9mb3BzID0gewogCS5yZWxlYXNlCT0gZHJtX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgY29u c3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZrbXNfZ2VtX3ZtX29wcyA9IHsKKwkuZmF1 bHQgPSB2a21zX2dlbV9mYXVsdCwKKwkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKKwkuY2xvc2Ug PSBkcm1fZ2VtX3ZtX2Nsb3NlLAorfTsKKwogc3RhdGljIHZvaWQgdmttc19yZWxlYXNlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZrbXNfZGV2aWNlICp2a21zID0gY29udGFp bmVyX29mKGRldiwgc3RydWN0IHZrbXNfZGV2aWNlLCBkcm0pOwpAQCAtNTAsNiArNTYsMTAgQEAg c3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHZrbXNfZHJpdmVyID0gewogCS5kcml2ZXJfZmVhdHVy ZXMJPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9BVE9NSUMgfCBEUklWRVJfR0VNLAogCS5yZWxl YXNlCQk9IHZrbXNfcmVsZWFzZSwKIAkuZm9wcwkJCT0gJnZrbXNfZHJpdmVyX2ZvcHMsCisJLmR1 bWJfY3JlYXRlCQk9IHZrbXNfZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldAk9IHZrbXNf ZHVtYl9tYXAsCisJLmdlbV92bV9vcHMJCT0gJnZrbXNfZ2VtX3ZtX29wcywKKwkuZ2VtX2ZyZWVf b2JqZWN0X3VubG9ja2VkID0gdmttc19nZW1fZnJlZV9vYmplY3QsCiAKIAkubmFtZQkJCT0gRFJJ VkVSX05BTUUsCiAJLmRlc2MJCQk9IERSSVZFUl9ERVNDLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3ZrbXMvdmttc19kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92a21zL3ZrbXNfZHJ2LmgK aW5kZXggYjBmOWQyZTYxYTQyLi5jY2U0Njk0Y2FmYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS92a21zL3ZrbXNfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZrbXMvdmttc19kcnYu aApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSA8ZHJt L2RybS5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9lbmNv ZGVyLmg+CiAKIHN0YXRpYyBjb25zdCB1MzIgdmttc19mb3JtYXRzW10gPSB7CkBAIC0yMSw2ICsy MiwxMiBAQCBzdHJ1Y3Qgdmttc19kZXZpY2UgewogCXN0cnVjdCB2a21zX291dHB1dCBvdXRwdXQ7 CiB9OwogCitzdHJ1Y3Qgdmttc19nZW1fb2JqZWN0IHsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Z2VtOworCXN0cnVjdCBtdXRleCBwYWdlc19sb2NrOyAvKiBQYWdlIGxvY2sgdXNlZCBpbiBwYWdl IGZhdWx0IGhhbmRsZXIgKi8KKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworfTsKKwogaW50IHZrbXNf Y3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK IAkJICAgc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwgc3RydWN0IGRybV9wbGFuZSAqY3Vyc29y KTsKIApAQCAtMjgsNCArMzUsMjAgQEAgaW50IHZrbXNfb3V0cHV0X2luaXQoc3RydWN0IHZrbXNf ZGV2aWNlICp2a21zZGV2KTsKIAogc3RydWN0IGRybV9wbGFuZSAqdmttc19wbGFuZV9pbml0KHN0 cnVjdCB2a21zX2RldmljZSAqdmttc2Rldik7CiAKKy8qIEdlbSBzdHVmZiAqLworc3RydWN0IGRy bV9nZW1fb2JqZWN0ICp2a21zX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCSAgICAgICB1MzIgKmhhbmRsZSwK KwkJCQkgICAgICAgdTY0IHNpemUpOworCitpbnQgdmttc19nZW1fZmF1bHQoc3RydWN0IHZtX2Zh dWx0ICp2bWYpOworCitpbnQgdmttc19kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUs IHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9k dW1iICphcmdzKTsKKworaW50IHZrbXNfZHVtYl9tYXAoc3RydWN0IGRybV9maWxlICpmaWxlLCBz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgIHUzMiBoYW5kbGUsIHU2NCAqb2Zmc2V0KTsKKwor dm9pZCB2a21zX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisK ICNlbmRpZiAvKiBfVktNU19EUlZfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92 a21zL3ZrbXNfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmttcy92a21zX2dlbS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzdlMzgzNjg2MDJiCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZrbXMvdmttc19nZW0uYwpAQCAtMCwwICsxLDE3OSBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgorCisjaW5j bHVkZSAidmttc19kcnYuaCIKKworc3RhdGljIHN0cnVjdCB2a21zX2dlbV9vYmplY3QgKl9fdmtt c19nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQkgdTY0IHNpemUpCit7 CisJc3RydWN0IHZrbXNfZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBremFs bG9jKHNpemVvZigqb2JqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmopCisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCisJc2l6ZSA9IHJvdW5kdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKwlyZXQg PSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgJm9iai0+Z2VtLCBzaXplKTsKKwlpZiAocmV0KSB7 CisJCWtmcmVlKG9iaik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJbXV0ZXhfaW5p dCgmb2JqLT5wYWdlc19sb2NrKTsKKworCXJldHVybiBvYmo7Cit9CisKK3ZvaWQgdmttc19nZW1f ZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IHZrbXNf Z2VtX29iamVjdCAqZ2VtID0gY29udGFpbmVyX29mKG9iaiwgc3RydWN0IHZrbXNfZ2VtX29iamVj dCwKKwkJCQkJCSAgIGdlbSk7CisKKwlrdmZyZWUoZ2VtLT5wYWdlcyk7CisJbXV0ZXhfZGVzdHJv eSgmZ2VtLT5wYWdlc19sb2NrKTsKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJa2Zy ZWUoZ2VtKTsKK30KKworaW50IHZrbXNfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQor eworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLT52bWE7CisJc3RydWN0IHZrbXNf Z2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2 YWRkciA9IHZtZi0+YWRkcmVzczsKKwlwZ29mZl90IHBhZ2Vfb2Zmc2V0OworCWxvZmZfdCBudW1f cGFnZXM7CisJaW50IHJldDsKKworCXBhZ2Vfb2Zmc2V0ID0gKHZhZGRyIC0gdm1hLT52bV9zdGFy dCkgPj4gUEFHRV9TSElGVDsKKwludW1fcGFnZXMgPSBESVZfUk9VTkRfVVAob2JqLT5nZW0uc2l6 ZSwgUEFHRV9TSVpFKTsKKworCWlmIChwYWdlX29mZnNldCA+IG51bV9wYWdlcykKKwkJcmV0dXJu IFZNX0ZBVUxUX1NJR0JVUzsKKworCXJldCA9IC1FTk9FTlQ7CisJbXV0ZXhfbG9jaygmb2JqLT5w YWdlc19sb2NrKTsKKwlpZiAob2JqLT5wYWdlcykgeworCQlnZXRfcGFnZShvYmotPnBhZ2VzW3Bh Z2Vfb2Zmc2V0XSk7CisJCXZtZi0+cGFnZSA9IG9iai0+cGFnZXNbcGFnZV9vZmZzZXRdOworCQly ZXQgPSAwOworCX0KKwltdXRleF91bmxvY2soJm9iai0+cGFnZXNfbG9jayk7CisJaWYgKHJldCkg eworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7 CisKKwkJbWFwcGluZyA9IGZpbGVfaW5vZGUob2JqLT5nZW0uZmlscCktPmlfbWFwcGluZzsKKwkJ cGFnZSA9IHNobWVtX3JlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIHBhZ2Vfb2Zmc2V0KTsKKwor CQlpZiAoIUlTX0VSUihwYWdlKSkgeworCQkJdm1mLT5wYWdlID0gcGFnZTsKKwkJCXJldCA9IDA7 CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKFBUUl9FUlIocGFnZSkpIHsKKwkJCWNhc2UgLUVOT1NQ QzoKKwkJCWNhc2UgLUVOT01FTToKKwkJCQlyZXQgPSBWTV9GQVVMVF9PT007CisJCQkJYnJlYWs7 CisJCQljYXNlIC1FQlVTWToKKwkJCQlyZXQgPSBWTV9GQVVMVF9SRVRSWTsKKwkJCQlicmVhazsK KwkJCWNhc2UgLUVGQVVMVDoKKwkJCWNhc2UgLUVJTlZBTDoKKwkJCQlyZXQgPSBWTV9GQVVMVF9T SUdCVVM7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVdBUk5fT04oUFRSX0VSUihwYWdl KSk7CisJCQkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJ fQorCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqdmttc19nZW1fY3Jl YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSwKKwkJCQkgICAgICAgdTMyICpoYW5kbGUsCisJCQkJICAgICAgIHU2NCBzaXplKQorewor CXN0cnVjdCB2a21zX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJaWYgKCFmaWxlIHx8 ICFkZXYgfHwgIWhhbmRsZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlvYmogPSBf X3ZrbXNfZ2VtX2NyZWF0ZShkZXYsIHNpemUpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJu IEVSUl9DQVNUKG9iaik7CisKKwlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwgJm9i ai0+Z2VtLCBoYW5kbGUpOworCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmb2JqLT5nZW0p OworCWlmIChyZXQpIHsKKwkJZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmb2JqLT5nZW0pOworCQlr ZnJlZShvYmopOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiAmb2JqLT5n ZW07Cit9CisKK2ludCB2a21zX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIg KmFyZ3MpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOworCXU2NCBwaXRjaCwg c2l6ZTsKKworCWlmICghYXJncyB8fCAhZGV2IHx8ICFmaWxlKQorCQlyZXR1cm4gLUVJTlZBTDsK KworCXBpdGNoID0gYXJncy0+d2lkdGggKiBESVZfUk9VTkRfVVAoYXJncy0+YnBwLCA4KTsKKwlz aXplID0gcGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CisKKwlpZiAoIXNpemUpCisJCXJldHVybiAtRUlO VkFMOworCisJZ2VtX29iaiA9IHZrbXNfZ2VtX2NyZWF0ZShkZXYsIGZpbGUsICZhcmdzLT5oYW5k bGUsIHNpemUpOworCWlmIChJU19FUlIoZ2VtX29iaikpCisJCXJldHVybiBQVFJfRVJSKGdlbV9v YmopOworCisJYXJncy0+c2l6ZSA9IGdlbV9vYmotPnNpemU7CisJYXJncy0+cGl0Y2ggPSBwaXRj aDsKKworCURSTV9ERUJVR19EUklWRVIoIkNyZWF0ZWQgb2JqZWN0IG9mIHNpemUgJWxsZFxuIiwg c2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHZrbXNfZHVtYl9tYXAoc3RydWN0IGRybV9m aWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgIHUzMiBoYW5kbGUsIHU2NCAq b2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlv YmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgaGFuZGxlKTsKKwlpZiAoIW9iaikKKwkJ cmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAoIW9iai0+ZmlscCkgeworCQlyZXQgPSAtRUlOVkFMOwor CQlnb3RvIHVucmVmOworCX0KKworCXJldCA9IGRybV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0KG9i aik7CisJaWYgKHJldCkKKwkJZ290byB1bnJlZjsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVf b2Zmc2V0X2FkZHIoJm9iai0+dm1hX25vZGUpOwordW5yZWY6CisJZHJtX2dlbV9vYmplY3RfcHV0 X3VubG9ja2VkKG9iaik7CisKKwlyZXR1cm4gcmV0OworfQotLSAKMi4xOC4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK