From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Philip" Subject: [PATCH] drm/amdgpu: use new HMM APIs and helpers v2 Date: Fri, 31 May 2019 19:09:02 +0000 Message-ID: <20190531190846.11964-1-Philip.Yang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Yang, Philip" SE1NIHByb3ZpZGVzIG5ldyBBUElzIGFuZCBoZWxwcyBpbiBrZXJuZWwgNS4yLXJjMSB0byBzaW1w bGlmeSBkcml2ZXINCnBhdGguIFRoZSBvbGQgaG1tIEFQSXMgYXJlIGRlcHJlY2F0ZWQgYW5kIHdp bGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUuDQoNCkJlbG93IGFyZSBjaGFuZ2VzIGluIGRyaXZlcjoN Cg0KMS4gQ2hhbmdlIGhtbV92bWFfZmF1bHQgdG8gaG1tX3JhbmdlX3JlZ2lzdGVyIGFuZCBobW1f cmFuZ2VfZmF1bHQgd2hpY2gNCnN1cHBvcnRzIHJhbmdlIHdpdGggbXVsdGlwbGUgdm1hcywgcmVt b3ZlIHRoZSBtdWx0aXBsZSB2bWFzIGhhbmRsZSBwYXRoDQphbmQgZGF0YSBzdHJ1Y3R1cmUuDQoy LiBDaGFuZ2UgaG1tX3ZtYV9yYW5nZV9kb25lIHRvIGhtbV9yYW5nZV91bnJlZ2lzdGVyLg0KMy4g VXNlIGRlZmF1bHQgZmxhZ3MgdG8gYXZvaWQgcHJlLWZpbGwgcGZuIGFycmF5cy4NCjQuIFVzZSBu ZXcgaG1tX2RldmljZV8gaGVscGVycy4NCg0KdjI6IHJldHJ5IGlmIGhtbV9yYW5nZV9mYXVsdCBy ZXR1cm5zIC1FQUdBSU4NCg0KQ2hhbmdlLUlkOiBJMWEwMGY4ODQ1OWYzYjk2Yzk1MzY5MzNlOWEx N2ViMWViYWE3ODExMw0KU2lnbmVkLW9mZi1ieTogUGhpbGlwIFlhbmcgPFBoaWxpcC5ZYW5nQGFt ZC5jb20+DQotLS0NCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyAgfCAg IDEgLQ0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYyB8IDE1MCArKysr KysrKysrLS0tLS0tLS0tLS0tLS0NCiAyIGZpbGVzIGNoYW5nZWQsIDYzIGluc2VydGlvbnMoKyks IDg4IGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X21uLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYw0K aW5kZXggNDFjY2VlNDlhMjI0Li5lMGJiNDdjZTU3MGIgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYw0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X21uLmMNCkBAIC01MTksNyArNTE5LDYgQEAgdm9pZCBhbWRncHVfaG1tX2lu aXRfcmFuZ2Uoc3RydWN0IGhtbV9yYW5nZSAqcmFuZ2UpDQogCQlyYW5nZS0+ZmxhZ3MgPSBobW1f cmFuZ2VfZmxhZ3M7DQogCQlyYW5nZS0+dmFsdWVzID0gaG1tX3JhbmdlX3ZhbHVlczsNCiAJCXJh bmdlLT5wZm5fc2hpZnQgPSBQQUdFX1NISUZUOw0KLQkJcmFuZ2UtPnBmbnMgPSBOVUxMOw0KIAkJ SU5JVF9MSVNUX0hFQUQoJnJhbmdlLT5saXN0KTsNCiAJfQ0KIH0NCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfdHRtLmMNCmluZGV4IGViNGI4NTA2MWM3ZS4uZjEyOTE2MDkzOWJjIDEw MDY0NA0KLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jDQorKysg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMNCkBAIC03MTEsOCArNzEx LDcgQEAgc3RydWN0IGFtZGdwdV90dG1fdHQgew0KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnVzZXJ0 YXNrOw0KIAl1aW50MzJfdAkJdXNlcmZsYWdzOw0KICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1f QU1ER1BVX1VTRVJQVFIpDQotCXN0cnVjdCBobW1fcmFuZ2UJKnJhbmdlczsNCi0JaW50CQkJbnJf cmFuZ2VzOw0KKwlzdHJ1Y3QgaG1tX3JhbmdlCSpyYW5nZTsNCiAjZW5kaWYNCiB9Ow0KIA0KQEAg LTcyNSw1NyArNzI0LDM0IEBAIHN0cnVjdCBhbWRncHVfdHRtX3R0IHsNCiAgKi8NCiAjaWYgSVNf RU5BQkxFRChDT05GSUdfRFJNX0FNREdQVV9VU0VSUFRSKQ0KIA0KLS8qIFN1cHBvcnQgVXNlcnB0 ciBwYWdlcyBjcm9zcyBtYXggMTYgdm1hcyAqLw0KLSNkZWZpbmUgTUFYX05SX1ZNQVMJKDE2KQ0K LQ0KIGludCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwg c3RydWN0IHBhZ2UgKipwYWdlcykNCiB7DQogCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAo dm9pZCAqKXR0bTsNCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBndHQtPnVzZXJ0YXNrLT5tbTsN CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGd0dC0+dXNlcnB0cjsNCi0JdW5zaWduZWQgbG9uZyBl bmQgPSBzdGFydCArIHR0bS0+bnVtX3BhZ2VzICogUEFHRV9TSVpFOw0KLQlzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSA9IE5VTEwsICp2bWFzW01BWF9OUl9WTUFTXTsNCi0Jc3RydWN0IGhtbV9y YW5nZSAqcmFuZ2VzOw0KLQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBpOw0KLQl1aW50NjRfdCAq cGZucywgZjsNCisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7DQorCXN0cnVjdCBobW1fcmFu Z2UgKnJhbmdlOw0KKwl1bnNpZ25lZCBsb25nIGk7DQorCXVpbnQ2NF90ICpwZm5zOw0KKwlpbnQg cmV0cnkgPSAwOw0KIAlpbnQgciA9IDA7DQogDQogCWlmICghbW0pIC8qIEhhcHBlbnMgZHVyaW5n IHByb2Nlc3Mgc2h1dGRvd24gKi8NCiAJCXJldHVybiAtRVNSQ0g7DQogDQotCWRvd25fcmVhZCgm bW0tPm1tYXBfc2VtKTsNCi0NCi0JLyogdXNlciBwYWdlcyBtYXkgY3Jvc3MgbXVsdGlwbGUgVk1B cyAqLw0KLQlndHQtPm5yX3JhbmdlcyA9IDA7DQotCWRvIHsNCi0JCXVuc2lnbmVkIGxvbmcgdm1f c3RhcnQ7DQotDQotCQlpZiAoZ3R0LT5ucl9yYW5nZXMgPj0gTUFYX05SX1ZNQVMpIHsNCi0JCQlE Uk1fRVJST1IoIlRvbyBtYW55IFZNQXMgaW4gdXNlcnB0ciByYW5nZVxuIik7DQotCQkJciA9IC1F RkFVTFQ7DQotCQkJZ290byBvdXQ7DQotCQl9DQotDQotCQl2bV9zdGFydCA9IHZtYSA/IHZtYS0+ dm1fZW5kIDogc3RhcnQ7DQotCQl2bWEgPSBmaW5kX3ZtYShtbSwgdm1fc3RhcnQpOw0KLQkJaWYg KHVubGlrZWx5KCF2bWEgfHwgdm1fc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KSkgew0KLQkJCXIgPSAt RUZBVUxUOw0KLQkJCWdvdG8gb3V0Ow0KLQkJfQ0KLQkJdm1hc1tndHQtPm5yX3JhbmdlcysrXSA9 IHZtYTsNCi0JfSB3aGlsZSAoZW5kID4gdm1hLT52bV9lbmQpOw0KLQ0KLQlEUk1fREVCVUdfRFJJ VkVSKCIweCVseCBucl9yYW5nZXMgJWQgcGFnZXMgMHglbHhcbiIsDQotCQlzdGFydCwgZ3R0LT5u cl9yYW5nZXMsIHR0bS0+bnVtX3BhZ2VzKTsNCi0NCisJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0 KTsNCisJaWYgKHVubGlrZWx5KCF2bWEgfHwgc3RhcnQgPCB2bWEtPnZtX3N0YXJ0KSkgew0KKwkJ ciA9IC1FRkFVTFQ7DQorCQlnb3RvIG91dDsNCisJfQ0KIAlpZiAodW5saWtlbHkoKGd0dC0+dXNl cmZsYWdzICYgQU1ER1BVX0dFTV9VU0VSUFRSX0FOT05PTkxZKSAmJg0KLQkJdm1hc1swXS0+dm1f ZmlsZSkpIHsNCisJCXZtYS0+dm1fZmlsZSkpIHsNCiAJCXIgPSAtRVBFUk07DQogCQlnb3RvIG91 dDsNCiAJfQ0KIA0KLQlyYW5nZXMgPSBrdm1hbGxvY19hcnJheShndHQtPm5yX3Jhbmdlcywgc2l6 ZW9mKCpyYW5nZXMpLCBHRlBfS0VSTkVMKTsNCi0JaWYgKHVubGlrZWx5KCFyYW5nZXMpKSB7DQor CXJhbmdlID0ga3phbGxvYyhzaXplb2YoKnJhbmdlKSwgR0ZQX0tFUk5FTCk7DQorCWlmICh1bmxp a2VseSghcmFuZ2UpKSB7DQogCQlyID0gLUVOT01FTTsNCiAJCWdvdG8gb3V0Ow0KIAl9DQpAQCAt Nzg2LDYxICs3NjIsNjEgQEAgaW50IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0 IHR0bV90dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQ0KIAkJZ290byBvdXRfZnJlZV9yYW5n ZXM7DQogCX0NCiANCi0JZm9yIChpID0gMDsgaSA8IGd0dC0+bnJfcmFuZ2VzOyBpKyspDQotCQlh bWRncHVfaG1tX2luaXRfcmFuZ2UoJnJhbmdlc1tpXSk7DQotDQotCWYgPSByYW5nZXNbMF0uZmxh Z3NbSE1NX1BGTl9WQUxJRF07DQotCWYgfD0gYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seSh0dG0p ID8NCi0JCQkJMCA6IHJhbmdlc1swXS5mbGFnc1tITU1fUEZOX1dSSVRFXTsNCi0JbWVtc2V0NjQo cGZucywgZiwgdHRtLT5udW1fcGFnZXMpOw0KKwlhbWRncHVfaG1tX2luaXRfcmFuZ2UocmFuZ2Up Ow0KKwlyYW5nZS0+ZGVmYXVsdF9mbGFncyA9IHJhbmdlLT5mbGFnc1tITU1fUEZOX1ZBTElEXTsN CisJcmFuZ2UtPmRlZmF1bHRfZmxhZ3MgfD0gYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seSh0dG0p ID8NCisJCQkJMCA6IHJhbmdlLT5mbGFnc1tITU1fUEZOX1dSSVRFXTsNCisJcmFuZ2UtPnBmbl9m bGFnc19tYXNrID0gMDsNCisJcmFuZ2UtPnBmbnMgPSBwZm5zOw0KKwlobW1fcmFuZ2VfcmVnaXN0 ZXIocmFuZ2UsIG1tLCBzdGFydCwNCisJCQkgICBzdGFydCArIHR0bS0+bnVtX3BhZ2VzICogUEFH RV9TSVpFLCBQQUdFX1NISUZUKTsNCiANCi0JZm9yIChucl9wYWdlcyA9IDAsIGkgPSAwOyBpIDwg Z3R0LT5ucl9yYW5nZXM7IGkrKykgew0KLQkJcmFuZ2VzW2ldLnZtYSA9IHZtYXNbaV07DQotCQly YW5nZXNbaV0uc3RhcnQgPSBtYXgoc3RhcnQsIHZtYXNbaV0tPnZtX3N0YXJ0KTsNCi0JCXJhbmdl c1tpXS5lbmQgPSBtaW4oZW5kLCB2bWFzW2ldLT52bV9lbmQpOw0KLQkJcmFuZ2VzW2ldLnBmbnMg PSBwZm5zICsgbnJfcGFnZXM7DQotCQlucl9wYWdlcyArPSAocmFuZ2VzW2ldLmVuZCAtIHJhbmdl c1tpXS5zdGFydCkgLyBQQUdFX1NJWkU7DQorYWdhaW46DQorCS8qDQorCSAqIEp1c3Qgd2FpdCBm b3IgcmFuZ2UgdG8gYmUgdmFsaWQsIHNhZmUgdG8gaWdub3JlIHJldHVybiB2YWx1ZSBhcyB3ZQ0K KwkgKiB3aWxsIHVzZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGhtbV9yYW5nZV9mYXVsdCgpIGJlbG93 IHVuZGVyIHRoZQ0KKwkgKiBtbWFwX3NlbSB0byBhc2NlcnRhaW4gdGhlIHZhbGlkaXR5IG9mIHRo ZSByYW5nZS4NCisJICovDQorCWhtbV9yYW5nZV93YWl0X3VudGlsX3ZhbGlkKHJhbmdlLCBITU1f UkFOR0VfREVGQVVMVF9USU1FT1VUKTsNCiANCi0JCXIgPSBobW1fdm1hX2ZhdWx0KCZyYW5nZXNb aV0sIHRydWUpOw0KLQkJaWYgKHVubGlrZWx5KHIpKQ0KLQkJCWJyZWFrOw0KLQl9DQotCWlmICh1 bmxpa2VseShyKSkgew0KLQkJd2hpbGUgKGktLSkNCi0JCQlobW1fdm1hX3JhbmdlX2RvbmUoJnJh bmdlc1tpXSk7DQorCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsNCiANCi0JCWdvdG8gb3V0X2Zy ZWVfcGZuczsNCi0JfQ0KKwlyID0gaG1tX3JhbmdlX2ZhdWx0KHJhbmdlLCB0cnVlKTsNCiANCiAJ dXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsNCiANCisJaWYgKHVubGlrZWx5KHIgPCAwKSkgew0KKwkJ aWYgKGxpa2VseShyID09IC1FQUdBSU4pKSB7DQorCQkJaWYgKHJldHJ5KysgPCAxNikNCisJCQkJ Z290byBhZ2FpbjsNCisJCQllbHNlDQorCQkJCXByX2VycigiUmV0cnkgaG1tIGZhdWx0IHRvbyBt YW55IHRpbWVzXG4iKTsNCisJCX0NCisNCisJCWdvdG8gb3V0X2ZyZWVfcGZuczsNCisJfQ0KKwkN CiAJZm9yIChpID0gMDsgaSA8IHR0bS0+bnVtX3BhZ2VzOyBpKyspIHsNCi0JCXBhZ2VzW2ldID0g aG1tX3Bmbl90b19wYWdlKCZyYW5nZXNbMF0sIHBmbnNbaV0pOw0KLQkJaWYgKCFwYWdlc1tpXSkg ew0KKwkJcGFnZXNbaV0gPSBobW1fZGV2aWNlX2VudHJ5X3RvX3BhZ2UocmFuZ2UsIHBmbnNbaV0p Ow0KKwkJaWYgKHVubGlrZWx5KCFwYWdlc1tpXSkpIHsNCiAJCQlwcl9lcnIoIlBhZ2UgZmF1bHQg ZmFpbGVkIGZvciBwZm5bJWx1XSA9IDB4JWxseFxuIiwNCiAJCQkgICAgICAgaSwgcGZuc1tpXSk7 DQotCQkJZ290byBvdXRfaW52YWxpZF9wZm47DQorCQkJciA9IC1FTk9NRU07DQorDQorCQkJZ290 byBvdXRfZnJlZV9wZm5zOw0KIAkJfQ0KIAl9DQotCWd0dC0+cmFuZ2VzID0gcmFuZ2VzOw0KKwln dHQtPnJhbmdlID0gcmFuZ2U7DQogDQogCXJldHVybiAwOw0KIA0KIG91dF9mcmVlX3BmbnM6DQor CWhtbV9yYW5nZV91bnJlZ2lzdGVyKHJhbmdlKTsNCiAJa3ZmcmVlKHBmbnMpOw0KIG91dF9mcmVl X3JhbmdlczoNCi0Ja3ZmcmVlKHJhbmdlcyk7DQorCWtmcmVlKHJhbmdlKTsNCiBvdXQ6DQotCXVw X3JlYWQoJm1tLT5tbWFwX3NlbSk7DQotDQogCXJldHVybiByOw0KLQ0KLW91dF9pbnZhbGlkX3Bm bjoNCi0JZm9yIChpID0gMDsgaSA8IGd0dC0+bnJfcmFuZ2VzOyBpKyspDQotCQlobW1fdm1hX3Jh bmdlX2RvbmUoJnJhbmdlc1tpXSk7DQotCWt2ZnJlZShwZm5zKTsNCi0Ja3ZmcmVlKHJhbmdlcyk7 DQotCXJldHVybiAtRU5PTUVNOw0KIH0NCiANCiAvKioNCkBAIC04NTMsMjMgKzgyOSwyMyBAQCBi b29sIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShzdHJ1Y3QgdHRtX3R0ICp0dG0p DQogew0KIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07DQogCWJvb2wg ciA9IGZhbHNlOw0KLQlpbnQgaTsNCiANCiAJaWYgKCFndHQgfHwgIWd0dC0+dXNlcnB0cikNCiAJ CXJldHVybiBmYWxzZTsNCiANCi0JRFJNX0RFQlVHX0RSSVZFUigidXNlcl9wYWdlc19kb25lIDB4 JWxseCBucl9yYW5nZXMgJWQgcGFnZXMgMHglbHhcbiIsDQotCQlndHQtPnVzZXJwdHIsIGd0dC0+ bnJfcmFuZ2VzLCB0dG0tPm51bV9wYWdlcyk7DQorCURSTV9ERUJVR19EUklWRVIoInVzZXJfcGFn ZXNfZG9uZSAweCVsbHggcGFnZXMgMHglbHhcbiIsDQorCQlndHQtPnVzZXJwdHIsIHR0bS0+bnVt X3BhZ2VzKTsNCiANCi0JV0FSTl9PTkNFKCFndHQtPnJhbmdlcyB8fCAhZ3R0LT5yYW5nZXNbMF0u cGZucywNCisJV0FSTl9PTkNFKCFndHQtPnJhbmdlIHx8ICFndHQtPnJhbmdlLT5wZm5zLA0KIAkJ Ik5vIHVzZXIgcGFnZXMgdG8gY2hlY2tcbiIpOw0KIA0KLQlpZiAoZ3R0LT5yYW5nZXMpIHsNCi0J CWZvciAoaSA9IDA7IGkgPCBndHQtPm5yX3JhbmdlczsgaSsrKQ0KLQkJCXIgfD0gaG1tX3ZtYV9y YW5nZV9kb25lKCZndHQtPnJhbmdlc1tpXSk7DQotCQlrdmZyZWUoZ3R0LT5yYW5nZXNbMF0ucGZu cyk7DQotCQlrdmZyZWUoZ3R0LT5yYW5nZXMpOw0KLQkJZ3R0LT5yYW5nZXMgPSBOVUxMOw0KKwlp ZiAoZ3R0LT5yYW5nZSkgew0KKwkJciA9IGhtbV9yYW5nZV92YWxpZChndHQtPnJhbmdlKTsNCisJ CWhtbV9yYW5nZV91bnJlZ2lzdGVyKGd0dC0+cmFuZ2UpOw0KKw0KKwkJa3ZmcmVlKGd0dC0+cmFu Z2UtPnBmbnMpOw0KKwkJa2ZyZWUoZ3R0LT5yYW5nZSk7DQorCQlndHQtPnJhbmdlID0gTlVMTDsN CiAJfQ0KIA0KIAlyZXR1cm4gcjsNCkBAIC05NTMsOSArOTI5LDkgQEAgc3RhdGljIHZvaWQgYW1k Z3B1X3R0bV90dF91bnBpbl91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSkNCiAJc2dfZnJlZV90 YWJsZSh0dG0tPnNnKTsNCiANCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0FNREdQVV9VU0VS UFRSKQ0KLQlpZiAoZ3R0LT5yYW5nZXMgJiYNCi0JICAgIHR0bS0+cGFnZXNbMF0gPT0gaG1tX3Bm bl90b19wYWdlKCZndHQtPnJhbmdlc1swXSwNCi0JCQkJCSAgICAgZ3R0LT5yYW5nZXNbMF0ucGZu c1swXSkpDQorCWlmIChndHQtPnJhbmdlICYmDQorCSAgICB0dG0tPnBhZ2VzWzBdID09IGhtbV9k ZXZpY2VfZW50cnlfdG9fcGFnZShndHQtPnJhbmdlLA0KKwkJCQkJCSAgICAgIGd0dC0+cmFuZ2Ut PnBmbnNbMF0pKQ0KIAkJV0FSTl9PTkNFKDEsICJNaXNzaW5nIGdldF91c2VyX3BhZ2VfZG9uZVxu Iik7DQogI2VuZGlmDQogfQ0KLS0gDQoyLjE3LjENCg0KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9hbWQtZ2Z4