From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huang Rui Subject: Re: [PATCH 9/9] drm/amdgpu: create an empty bo_list if no handle is provided Date: Tue, 31 Jul 2018 17:09:37 +0800 Message-ID: <20180731090936.GD19005@hr-amur2> References: <20180730145159.13212-1-christian.koenig@amd.com> <20180730145159.13212-9-christian.koenig@amd.com> <20180731075102.GB19005@hr-amur2> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: 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: christian.koenig-5C7GfCeVMHo@public.gmane.org Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org T24gVHVlLCBKdWwgMzEsIDIwMTggYXQgMTA6NTI6MDZBTSArMDIwMCwgQ2hyaXN0aWFuIEvDtm5p ZyB3cm90ZToKPiBBbSAzMS4wNy4yMDE4IHVtIDA5OjUxIHNjaHJpZWIgSHVhbmcgUnVpOgo+ID5P biBNb24sIEp1bCAzMCwgMjAxOCBhdCAwNDo1MTo1OVBNICswMjAwLCBDaHJpc3RpYW4gS8O2bmln IHdyb3RlOgo+ID4+SW5zdGVhZCBvZiBoYXZpbmcgZXh0cmEgaGFuZGxpbmcganVzdCBjcmVhdGUg YW4gZW1wdHkgYm9fbGlzdCB3aGVuIG5vCj4gPj5oYW5kbGUgaXMgcHJvdmlkZWQuCj4gPlJldmll d2VkLWJ5OiBIdWFuZyBSdWkgPHJheS5odWFuZ0BhbWQuY29tPgo+ID4KPiA+SW4gd2hpY2ggY2Fz ZSwgd2hlbiB0aGUgY29tbWFuZCBpcyBiZWluZyBzdWJtaXR0ZWQsIHRoZXJlIGlzIG5vIGJvIGxp c3QKPiA+aGFuZGxlPyBBbGwgQk9zIGFyZSBwZXItVk0sIG5vIHNoYXJlZCBCTz8KPiAKPiBZZXMs IGV4YWN0bHkuIE9yIGluIHRoZSBmdXR1cmUganVzdCBTVk0gZXRjLi4uCj4gCgoiU1ZNIiBtZWFu cyBzaW5nbGUgVk0/IE9ubHkgb25lIHRocmVhZD8KClRoYW5rcywKUmF5Cgo+IENocmlzdGlhbi4K PiAKPiA+Cj4gPlRoYW5rcywKPiA+UmF5Cj4gPgo+ID4+U2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFu IEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+ID4+LS0tCj4gPj4gIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jIHwgMTExICsrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLQo+ID4+ICAxIGZpbGUgY2hhbmdlZCwgNDYgaW5zZXJ0aW9ucygrKSwgNjUg ZGVsZXRpb25zKC0pCj4gPj4KPiA+PmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5j Cj4gPj5pbmRleCAxZDcyOTJhYjJiNjIuLjUwMmI5NGZiMTE2YSAxMDA2NDQKPiA+Pi0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jCj4gPj4rKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYwo+ID4+QEAgLTU2MSw2ICs1NjEsNyBAQCBzdGF0 aWMgaW50IGFtZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAo+ ID4+ICAJCQkJdW5pb24gZHJtX2FtZGdwdV9jcyAqY3MpCj4gPj4gIHsKPiA+PiAgCXN0cnVjdCBh bWRncHVfZnByaXYgKmZwcml2ID0gcC0+ZmlscC0+ZHJpdmVyX3ByaXY7Cj4gPj4rCXN0cnVjdCBh bWRncHVfdm0gKnZtID0gJmZwcml2LT52bTsKPiA+PiAgCXN0cnVjdCBhbWRncHVfYm9fbGlzdF9l bnRyeSAqZTsKPiA+PiAgCXN0cnVjdCBsaXN0X2hlYWQgZHVwbGljYXRlczsKPiA+PiAgCXN0cnVj dCBhbWRncHVfYm8gKmdkczsKPiA+PkBAIC01ODAsMTMgKzU4MSwxNyBAQCBzdGF0aWMgaW50IGFt ZGdwdV9jc19wYXJzZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAo+ID4+ICAJCQkJ ICAgICAgICZwLT5ib19saXN0KTsKPiA+PiAgCQlpZiAocikKPiA+PiAgCQkJcmV0dXJuIHI7Cj4g Pj4rCX0gZWxzZSBpZiAoIXAtPmJvX2xpc3QpIHsKPiA+PisJCS8qIENyZWF0ZSBhIGVtcHR5IGJv X2xpc3Qgd2hlbiBubyBoYW5kbGUgaXMgcHJvdmlkZWQgKi8KPiA+PisJCXIgPSBhbWRncHVfYm9f bGlzdF9jcmVhdGUocC0+YWRldiwgcC0+ZmlscCwgTlVMTCwgMCwKPiA+PisJCQkJCSAgJnAtPmJv X2xpc3QpOwo+ID4+KwkJaWYgKHIpCj4gPj4rCQkJcmV0dXJuIHI7Cj4gPj4gIAl9Cj4gPj4tCWlm IChwLT5ib19saXN0KSB7Cj4gPj4tCQlhbWRncHVfYm9fbGlzdF9nZXRfbGlzdChwLT5ib19saXN0 LCAmcC0+dmFsaWRhdGVkKTsKPiA+Pi0JCWlmIChwLT5ib19saXN0LT5maXJzdF91c2VycHRyICE9 IHAtPmJvX2xpc3QtPm51bV9lbnRyaWVzKQo+ID4+LQkJCXAtPm1uID0gYW1kZ3B1X21uX2dldChw LT5hZGV2LCBBTURHUFVfTU5fVFlQRV9HRlgpOwo+ID4+LQl9Cj4gPj4rCWFtZGdwdV9ib19saXN0 X2dldF9saXN0KHAtPmJvX2xpc3QsICZwLT52YWxpZGF0ZWQpOwo+ID4+KwlpZiAocC0+Ym9fbGlz dC0+Zmlyc3RfdXNlcnB0ciAhPSBwLT5ib19saXN0LT5udW1fZW50cmllcykKPiA+PisJCXAtPm1u ID0gYW1kZ3B1X21uX2dldChwLT5hZGV2LCBBTURHUFVfTU5fVFlQRV9HRlgpOwo+ID4+ICAJSU5J VF9MSVNUX0hFQUQoJmR1cGxpY2F0ZXMpOwo+ID4+ICAJYW1kZ3B1X3ZtX2dldF9wZF9ibygmZnBy aXYtPnZtLCAmcC0+dmFsaWRhdGVkLCAmcC0+dm1fcGQpOwo+ID4+QEAgLTYwNSwxMCArNjEwLDYg QEAgc3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNl ciAqcCwKPiA+PiAgCQkJZ290byBlcnJvcl9mcmVlX3BhZ2VzOwo+ID4+ICAJCX0KPiA+Pi0JCS8q IFdpdGhvdXQgYSBCTyBsaXN0IHdlIGRvbid0IGhhdmUgdXNlcnB0ciBCT3MgKi8KPiA+Pi0JCWlm ICghcC0+Ym9fbGlzdCkKPiA+Pi0JCQlicmVhazsKPiA+Pi0KPiA+PiAgCQlJTklUX0xJU1RfSEVB RCgmbmVlZF9wYWdlcyk7Cj4gPj4gIAkJYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9l bnRyeShlLCBwLT5ib19saXN0KSB7Cj4gPj4gIAkJCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gZS0+ cm9iajsKPiA+PkBAIC03MDMsMjEgKzcwNCwxMiBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19wYXJz ZXJfYm9zKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAo+ID4+ICAJYW1kZ3B1X2NzX3JlcG9y dF9tb3ZlZF9ieXRlcyhwLT5hZGV2LCBwLT5ieXRlc19tb3ZlZCwKPiA+PiAgCQkJCSAgICAgcC0+ Ynl0ZXNfbW92ZWRfdmlzKTsKPiA+Pi0JaWYgKHAtPmJvX2xpc3QpIHsKPiA+Pi0JCXN0cnVjdCBh bWRncHVfdm0gKnZtID0gJmZwcml2LT52bTsKPiA+Pi0JCXN0cnVjdCBhbWRncHVfYm9fbGlzdF9l bnRyeSAqZTsKPiA+PisJZ2RzID0gcC0+Ym9fbGlzdC0+Z2RzX29iajsKPiA+PisJZ3dzID0gcC0+ Ym9fbGlzdC0+Z3dzX29iajsKPiA+PisJb2EgPSBwLT5ib19saXN0LT5vYV9vYmo7Cj4gPj4tCQln ZHMgPSBwLT5ib19saXN0LT5nZHNfb2JqOwo+ID4+LQkJZ3dzID0gcC0+Ym9fbGlzdC0+Z3dzX29i ajsKPiA+Pi0JCW9hID0gcC0+Ym9fbGlzdC0+b2Ffb2JqOwo+ID4+LQo+ID4+LQkJYW1kZ3B1X2Jv X2xpc3RfZm9yX2VhY2hfZW50cnkoZSwgcC0+Ym9fbGlzdCkKPiA+Pi0JCQllLT5ib192YSA9IGFt ZGdwdV92bV9ib19maW5kKHZtLCBlLT5yb2JqKTsKPiA+Pi0JfSBlbHNlIHsKPiA+Pi0JCWdkcyA9 IHAtPmFkZXYtPmdkcy5nZHNfZ2Z4X2JvOwo+ID4+LQkJZ3dzID0gcC0+YWRldi0+Z2RzLmd3c19n ZnhfYm87Cj4gPj4tCQlvYSA9IHAtPmFkZXYtPmdkcy5vYV9nZnhfYm87Cj4gPj4tCX0KPiA+PisJ YW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hfZW50cnkoZSwgcC0+Ym9fbGlzdCkKPiA+PisJCWUtPmJv X3ZhID0gYW1kZ3B1X3ZtX2JvX2ZpbmQodm0sIGUtPnJvYmopOwo+ID4+ICAJaWYgKGdkcykgewo+ ID4+ICAJCXAtPmpvYi0+Z2RzX2Jhc2UgPSBhbWRncHVfYm9fZ3B1X29mZnNldChnZHMpOwo+ID4+ QEAgLTc0NSwxNSArNzM3LDEzIEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3Ry dWN0IGFtZGdwdV9jc19wYXJzZXIgKnAsCj4gPj4gIGVycm9yX2ZyZWVfcGFnZXM6Cj4gPj4tCWlm IChwLT5ib19saXN0KSB7Cj4gPj4tCQlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2Vu dHJ5KGUsIHAtPmJvX2xpc3QpIHsKPiA+Pi0JCQlpZiAoIWUtPnVzZXJfcGFnZXMpCj4gPj4tCQkJ CWNvbnRpbnVlOwo+ID4+KwlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF91c2VycHRyX2VudHJ5KGUs IHAtPmJvX2xpc3QpIHsKPiA+PisJCWlmICghZS0+dXNlcl9wYWdlcykKPiA+PisJCQljb250aW51 ZTsKPiA+Pi0JCQlyZWxlYXNlX3BhZ2VzKGUtPnVzZXJfcGFnZXMsCj4gPj4tCQkJCSAgICAgIGUt PnJvYmotPnRiby50dG0tPm51bV9wYWdlcyk7Cj4gPj4tCQkJa3ZmcmVlKGUtPnVzZXJfcGFnZXMp Owo+ID4+LQkJfQo+ID4+KwkJcmVsZWFzZV9wYWdlcyhlLT51c2VyX3BhZ2VzLAo+ID4+KwkJCSAg ICAgIGUtPnJvYmotPnRiby50dG0tPm51bV9wYWdlcyk7Cj4gPj4rCQlrdmZyZWUoZS0+dXNlcl9w YWdlcyk7Cj4gPj4gIAl9Cj4gPj4gIAlyZXR1cm4gcjsKPiA+PkBAIC04MTUsOSArODA1LDEwIEBA IHN0YXRpYyB2b2lkIGFtZGdwdV9jc19wYXJzZXJfZmluaShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNl ciAqcGFyc2VyLCBpbnQgZXJyb3IsCj4gPj4gIHN0YXRpYyBpbnQgYW1kZ3B1X2JvX3ZtX3VwZGF0 ZV9wdGUoc3RydWN0IGFtZGdwdV9jc19wYXJzZXIgKnApCj4gPj4gIHsKPiA+Pi0Jc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYgPSBwLT5hZGV2Owo+ID4+ICAJc3RydWN0IGFtZGdwdV9mcHJpdiAq ZnByaXYgPSBwLT5maWxwLT5kcml2ZXJfcHJpdjsKPiA+PisJc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYgPSBwLT5hZGV2Owo+ID4+ICAJc3RydWN0IGFtZGdwdV92bSAqdm0gPSAmZnByaXYtPnZt Owo+ID4+KwlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmU7Cj4gPj4gIAlzdHJ1Y3QgYW1k Z3B1X2JvX3ZhICpib192YTsKPiA+PiAgCXN0cnVjdCBhbWRncHVfYm8gKmJvOwo+ID4+ICAJaW50 IHI7Cj4gPj5AQCAtODUwLDMxICs4NDEsMjYgQEAgc3RhdGljIGludCBhbWRncHVfYm9fdm1fdXBk YXRlX3B0ZShzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCkKPiA+PiAgCQkJcmV0dXJuIHI7Cj4g Pj4gIAl9Cj4gPj4tCWlmIChwLT5ib19saXN0KSB7Cj4gPj4tCQlzdHJ1Y3QgYW1kZ3B1X2JvX2xp c3RfZW50cnkgKmU7Cj4gPj4tCj4gPj4tCQlhbWRncHVfYm9fbGlzdF9mb3JfZWFjaF9lbnRyeShl LCBwLT5ib19saXN0KSB7Cj4gPj4tCQkJc3RydWN0IGRtYV9mZW5jZSAqZjsKPiA+Pi0KPiA+Pi0J CQkvKiBpZ25vcmUgZHVwbGljYXRlcyAqLwo+ID4+LQkJCWJvID0gZS0+cm9iajsKPiA+Pi0JCQlp ZiAoIWJvKQo+ID4+LQkJCQljb250aW51ZTsKPiA+PisJYW1kZ3B1X2JvX2xpc3RfZm9yX2VhY2hf ZW50cnkoZSwgcC0+Ym9fbGlzdCkgewo+ID4+KwkJc3RydWN0IGRtYV9mZW5jZSAqZjsKPiA+Pi0J CQlib192YSA9IGUtPmJvX3ZhOwo+ID4+LQkJCWlmIChib192YSA9PSBOVUxMKQo+ID4+LQkJCQlj b250aW51ZTsKPiA+PisJCS8qIGlnbm9yZSBkdXBsaWNhdGVzICovCj4gPj4rCQlibyA9IGUtPnJv Ymo7Cj4gPj4rCQlpZiAoIWJvKQo+ID4+KwkJCWNvbnRpbnVlOwo+ID4+LQkJCXIgPSBhbWRncHVf dm1fYm9fdXBkYXRlKGFkZXYsIGJvX3ZhLCBmYWxzZSk7Cj4gPj4tCQkJaWYgKHIpCj4gPj4tCQkJ CXJldHVybiByOwo+ID4+KwkJYm9fdmEgPSBlLT5ib192YTsKPiA+PisJCWlmIChib192YSA9PSBO VUxMKQo+ID4+KwkJCWNvbnRpbnVlOwo+ID4+LQkJCWYgPSBib192YS0+bGFzdF9wdF91cGRhdGU7 Cj4gPj4tCQkJciA9IGFtZGdwdV9zeW5jX2ZlbmNlKGFkZXYsICZwLT5qb2ItPnN5bmMsIGYsIGZh bHNlKTsKPiA+Pi0JCQlpZiAocikKPiA+Pi0JCQkJcmV0dXJuIHI7Cj4gPj4tCQl9Cj4gPj4rCQly ID0gYW1kZ3B1X3ZtX2JvX3VwZGF0ZShhZGV2LCBib192YSwgZmFsc2UpOwo+ID4+KwkJaWYgKHIp Cj4gPj4rCQkJcmV0dXJuIHI7Cj4gPj4rCQlmID0gYm9fdmEtPmxhc3RfcHRfdXBkYXRlOwo+ID4+ KwkJciA9IGFtZGdwdV9zeW5jX2ZlbmNlKGFkZXYsICZwLT5qb2ItPnN5bmMsIGYsIGZhbHNlKTsK PiA+PisJCWlmIChyKQo+ID4+KwkJCXJldHVybiByOwo+ID4+ICAJfQo+ID4+ICAJciA9IGFtZGdw dV92bV9oYW5kbGVfbW92ZWQoYWRldiwgdm0pOwo+ID4+QEAgLTg4OSw5ICs4NzUsNyBAQCBzdGF0 aWMgaW50IGFtZGdwdV9ib192bV91cGRhdGVfcHRlKHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpw KQo+ID4+ICAJaWYgKHIpCj4gPj4gIAkJcmV0dXJuIHI7Cj4gPj4tCWlmIChhbWRncHVfdm1fZGVi dWcgJiYgcC0+Ym9fbGlzdCkgewo+ID4+LQkJc3RydWN0IGFtZGdwdV9ib19saXN0X2VudHJ5ICpl Owo+ID4+LQo+ID4+KwlpZiAoYW1kZ3B1X3ZtX2RlYnVnKSB7Cj4gPj4gIAkJLyogSW52YWxpZGF0 ZSBhbGwgQk9zIHRvIHRlc3QgZm9yIHVzZXJzcGFjZSBidWdzICovCj4gPj4gIAkJYW1kZ3B1X2Jv X2xpc3RfZm9yX2VhY2hfZW50cnkoZSwgcC0+Ym9fbGlzdCkgewo+ID4+ICAJCQkvKiBpZ25vcmUg ZHVwbGljYXRlcyAqLwo+ID4+QEAgLTEyMTcsMjIgKzEyMDEsMTkgQEAgc3RhdGljIGludCBhbWRn cHVfY3Nfc3VibWl0KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwLAo+ID4+ICAJc3RydWN0IGFt ZGdwdV9yaW5nICpyaW5nID0gcC0+cmluZzsKPiA+PiAgCXN0cnVjdCBkcm1fc2NoZWRfZW50aXR5 ICplbnRpdHkgPSAmcC0+Y3R4LT5yaW5nc1tyaW5nLT5pZHhdLmVudGl0eTsKPiA+PiAgCWVudW0g ZHJtX3NjaGVkX3ByaW9yaXR5IHByaW9yaXR5Owo+ID4+KwlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3Rf ZW50cnkgKmU7Cj4gPj4gIAlzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iOwo+ID4+ICAJdWludDY0X3Qg c2VxOwo+ID4+ICAJaW50IHI7Cj4gPj4gIAlhbWRncHVfbW5fbG9jayhwLT5tbik7Cj4gPj4tCWlm IChwLT5ib19saXN0KSB7Cj4gPj4tCQlzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgKmU7Cj4g Pj4rCWFtZGdwdV9ib19saXN0X2Zvcl9lYWNoX3VzZXJwdHJfZW50cnkoZSwgcC0+Ym9fbGlzdCkg ewo+ID4+KwkJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSBlLT5yb2JqOwo+ID4+LQkJYW1kZ3B1X2Jv X2xpc3RfZm9yX2VhY2hfdXNlcnB0cl9lbnRyeShlLCBwLT5ib19saXN0KSB7Cj4gPj4tCQkJc3Ry dWN0IGFtZGdwdV9ibyAqYm8gPSBlLT5yb2JqOwo+ID4+LQo+ID4+LQkJCWlmIChhbWRncHVfdHRt X3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8tPnRiby50dG0pKSB7Cj4gPj4tCQkJCWFtZGdwdV9t bl91bmxvY2socC0+bW4pOwo+ID4+LQkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwo+ID4+LQkJCX0K PiA+PisJCWlmIChhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoYm8tPnRiby50dG0p KSB7Cj4gPj4rCQkJYW1kZ3B1X21uX3VubG9jayhwLT5tbik7Cj4gPj4rCQkJcmV0dXJuIC1FUkVT VEFSVFNZUzsKPiA+PiAgCQl9Cj4gPj4gIAl9Cj4gPj4tLSAKPiA+PjIuMTQuMQo+ID4+Cj4gPj5f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4+YW1kLWdm eCBtYWlsaW5nIGxpc3QKPiA+PmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPj5odHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngKPiAKPiBf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGFtZC1nZngg bWFpbGluZyBsaXN0Cj4gYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QK YW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==