From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 09/35] drm/gem: support BO freeing without dev->struct_mutex Date: Wed, 27 Apr 2016 10:18:47 +0200 Message-ID: <20160427081847.GY2558@phenom.ffwll.local> References: <1461691808-12414-1-git-send-email-daniel.vetter@ffwll.ch> <1461691808-12414-10-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Alex Deucher Cc: Daniel Vetter , Intel Graphics Development , DRI Development , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBBcHIgMjYsIDIwMTYgYXQgMDU6NTI6MzFQTSAtMDQwMCwgQWxleCBEZXVjaGVyIHdy b3RlOgo+IE9uIFR1ZSwgQXByIDI2LCAyMDE2IGF0IDE6MjkgUE0sIERhbmllbCBWZXR0ZXIgPGRh bmllbC52ZXR0ZXJAZmZ3bGwuY2g+IHdyb3RlOgo+ID4gRmluYWxseSBhbGwgdGhlIGNvcmUgZ2Vt IGFuZCBhIGxvdCBvZiBkcml2ZXJzIGFyZSBlbnRpcmVseSBmcmVlIG9mCj4gPiBkZXYtPnN0cnVj dF9tdXRleCBkZXBlbmNpZXMsIGFuZCB3ZSBjYW4gc3RhcnQgdG8gaGF2ZSBhbiBlbnRpcmVseQo+ ID4gbG9ja2xlc3MgdW5yZWYgcGF0aC4KPiA+Cj4gPiBUbyBtYWtlIHN1cmUgdGhhdCBubyBvbmUg d2hvIHRvdWNoZXMgdGhlIGNvcmUgY29kZSBhY2NpZGVudGFsbHkgYnJlYWtzCj4gPiBleGlzdGlu ZyBkcml2ZXJzIHdoaWNoIHN0aWxsIHJlcXVpcmUgZGV2LT5zdHJ1Y3RfbXV0ZXggSSd2ZSBtYWRl IHRoZQo+ID4gbWlnaHRfbG9jayBjaGVjayB1bmNvbmRpdGlvbmFsLgo+ID4KPiA+IFdoaWxlIGF0 IGl0IGRlLWlubGluZSB0aGUgcmVmL3VucmVmIGZ1bmN0aW9ucywgdGhleSd2ZSBiZWNvbWUgYSBi aXQKPiA+IHRvbyBiaWcuCj4gPgo+ID4gdjI6IE1ha2UgaXQgbm90IGxlYWsgbGlrZSBhIHNpZXZl Lgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50 ZWwuY29tPgo+IAo+IFRoaXMgYW5kIHRoZSByZXN0IG9mIHRoZSBzZXJpZXMgYXJlOgo+IEFja2Vk LWJ5OiBBbGV4IERldWNoZXIgPGFsZXhhbmRlci5kZXVjaGVyQGFtZC5jb20+CgpCZWZvcmUgSSBw dWxsIHRoaXMgaW4sIEknZCBsaWtlIGF0IGxlYXN0IGFuIHItYiBvbiB0aGlzIGFuZCBvbmUgb2Yg dGhlCmRyaXZlciBwYXRjaGVzLiB0LWIgZXZlbiBiZXR0ZXIuCi1EYW5pZWwKCj4gCj4gPiAtLS0K PiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jIHwgNjQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0KPiA+ICBpbmNsdWRlL2RybS9kcm1QLmggICAgICAg IHwgMTIgKysrKysrKystCj4gPiAgaW5jbHVkZS9kcm0vZHJtX2dlbS5oICAgICB8IDQ1ICsrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgNjUgaW5z ZXJ0aW9ucygrKSwgNTYgZGVsZXRpb25zKC0pCj4gPgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4gPiBpbmRleCAy NWRhYzMxZWVmMzcuLjhmMmVmZjQ0OGJiNSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZ2VtLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKPiA+IEBAIC03 ODgsMTYgKzc4OCw3IEBAIGRybV9nZW1fb2JqZWN0X3JlbGVhc2Uoc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmopCj4gPiAgfQo+ID4gIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfcmVsZWFz ZSk7Cj4gPgo+ID4gLS8qKgo+ID4gLSAqIGRybV9nZW1fb2JqZWN0X2ZyZWUgLSBmcmVlIGEgR0VN IG9iamVjdAo+ID4gLSAqIEBrcmVmOiBrcmVmIG9mIHRoZSBvYmplY3QgdG8gZnJlZQo+ID4gLSAq Cj4gPiAtICogQ2FsbGVkIGFmdGVyIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGhh cyBiZWVuIGxvc3QuCj4gPiAtICogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyBzdHJ1Y3RfIG11dGV4 Cj4gPiAtICoKPiA+IC0gKiBGcmVlcyB0aGUgb2JqZWN0Cj4gPiAtICovCj4gPiAtdm9pZAo+ID4g K3N0YXRpYyB2b2lkCj4gPiAgZHJtX2dlbV9vYmplY3RfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikK PiA+ICB7Cj4gPiAgICAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0KPiA+IEBAIC04 MDYsMTAgKzc5Nyw1OSBAQCBkcm1fZ2VtX29iamVjdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQo+ ID4KPiA+ICAgICAgICAgV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRl eCkpOwo+ID4KPiA+IC0gICAgICAgaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3QgIT0g TlVMTCkKPiA+ICsgICAgICAgaWYgKGRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3RfdW5sb2Nr ZWQgIT0gTlVMTCkKPiA+ICsgICAgICAgICAgICAgICBkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2Jq ZWN0X3VubG9ja2VkKG9iaik7Cj4gPiArICAgICAgIGVsc2UgaWYgKGRldi0+ZHJpdmVyLT5nZW1f ZnJlZV9vYmplY3QgIT0gTlVMTCkKPiA+ICAgICAgICAgICAgICAgICBkZXYtPmRyaXZlci0+Z2Vt X2ZyZWVfb2JqZWN0KG9iaik7Cj4gPiAgfQo+ID4gLUVYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmpl Y3RfZnJlZSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVu Y2VfdW5sb2NrZWQgLSByZWxlYXNlIGEgR0VNIEJPIHJlZmVyZW5jZQo+ID4gKyAqIEBvYmo6IEdF TSBidWZmZXIgb2JqZWN0Cj4gPiArICoKPiA+ICsgKiBUaGlzIHJlbGVhc2VzIGEgcmVmZXJlbmNl IHRvIEBvYmouIENhbGxlcnMgbXVzdCBub3QgaG9sZCB0aGUKPiA+ICsgKiBkZXYtPnN0cnVjdF9t dXRleCBsb2NrIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgo+ID4gKyAqLwo+ID4gK3ZvaWQK PiA+ICtkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4g PiArCj4gPiArICAgICAgIGlmICghb2JqKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ ICsKPiA+ICsgICAgICAgZGV2ID0gb2JqLT5kZXY7Cj4gPiArICAgICAgIG1pZ2h0X2xvY2soJmRl di0+c3RydWN0X211dGV4KTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGRldi0+ZHJpdmVyLT5nZW1f ZnJlZV9vYmplY3QgIT0gTlVMTCkKPiA+ICsgICAgICAgICAgICAgICBrcmVmX3B1dCgmb2JqLT5y ZWZjb3VudCwgZHJtX2dlbV9vYmplY3RfZnJlZSk7Cj4gPiArICAgICAgIGVsc2UgaWYgKGtyZWZf cHV0X211dGV4KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9mcmVlLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZGV2LT5zdHJ1Y3RfbXV0ZXgpKQo+ID4gKyAgICAg ICAgICAgICAgIG11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gK30KPiA+ICtF WFBPUlRfU1lNQk9MKGRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKTsKPiA+ICsK PiA+ICsvKioKPiA+ICsgKiBkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSAtIHJlbGVhc2UgYSBH RU0gQk8gcmVmZXJlbmNlCj4gPiArICogQG9iajogR0VNIGJ1ZmZlciBvYmplY3QKPiA+ICsgKgo+ ID4gKyAqIFRoaXMgcmVsZWFzZXMgYSByZWZlcmVuY2UgdG8gQG9iai4gQ2FsbGVycyBtdXN0IGhv bGQgdGhlIGRldi0+c3RydWN0X211dGV4Cj4gPiArICogbG9jayB3aGVuIGNhbGxpbmcgdGhpcyBm dW5jdGlvbiwgZXZlbiB3aGVuIHRoZSBkcml2ZXIgZG9lc24ndCB1c2UKPiA+ICsgKiBkZXYtPnN0 cnVjdF9tdXRleCBmb3IgYW55dGhpbmcuCj4gPiArICoKPiA+ICsgKiBGb3IgZHJpdmVycyBub3Qg ZW5jdW1iZXJlZCB3aXRoIGxlZ2FjeSBsb2NraW5nIHVzZQo+ID4gKyAqIGRybV9nZW1fb2JqZWN0 X3VucmVmZXJlbmNlX3VubG9ja2VkKCkgaW5zdGVhZC4KPiA+ICsgKi8KPiA+ICt2b2lkCj4gPiAr ZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCj4g PiArewo+ID4gKyAgICAgICBpZiAob2JqICE9IE5VTEwpIHsKPiA+ICsgICAgICAgICAgICAgICBX QVJOX09OKCFtdXRleF9pc19sb2NrZWQoJm9iai0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiA+ICsK PiA+ICsgICAgICAgICAgICAgICBrcmVmX3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX2dlbV9vYmpl Y3RfZnJlZSk7Cj4gPiArICAgICAgIH0KPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZ2Vt X29iamVjdF91bnJlZmVyZW5jZSk7Cj4gPgo+ID4gIC8qKgo+ID4gICAqIGRybV9nZW1fdm1fb3Bl biAtIHZtYS0+b3BzLT5vcGVuIGltcGxlbWVudGF0aW9uIGZvciBHRU0KPiA+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKPiA+IGluZGV4IGM4MWRk MjI1MGZjNi4uN2UzMGIzZDJiMjVjIDEwMDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5o Cj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKPiA+IEBAIC01ODMsOSArNTgzLDE5IEBAIHN0 cnVjdCBkcm1fZHJpdmVyIHsKPiA+ICAgICAgICAgICogRHJpdmVyLXNwZWNpZmljIGNvbnN0cnVj dG9yIGZvciBkcm1fZ2VtX29iamVjdHMsIHRvIHNldCB1cAo+ID4gICAgICAgICAgKiBvYmotPmRy aXZlcl9wcml2YXRlLgo+ID4gICAgICAgICAgKgo+ID4gLSAgICAgICAgKiBSZXR1cm5zIDAgb24g c3VjY2Vzcy4KPiA+ICsgICAgICAgICogVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90 IGJlIHVzZWQgYnkgbmV3IGRyaXZlcnMuIFVzZQo+ID4gKyAgICAgICAgKiBAZ2VtX2ZyZWVfb2Jq ZWN0X3VubG9ja2VkIGluc3RlYWQuCj4gPiAgICAgICAgICAqLwo+ID4gICAgICAgICB2b2lkICgq Z2VtX2ZyZWVfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ID4gKwo+ID4g KyAgICAgICAvKioKPiA+ICsgICAgICAgICogRHJpdmVyLXNwZWNpZmljIGNvbnN0cnVjdG9yIGZv ciBkcm1fZ2VtX29iamVjdHMsIHRvIHNldCB1cAo+ID4gKyAgICAgICAgKiBvYmotPmRyaXZlcl9w cml2YXRlLiBUaGlzIGlzIGZvciBkcml2ZXJzIHdoaWNoIGFyZSBub3QgZW5jdW1iZXJlZAo+ID4g KyAgICAgICAgKiB3aXRoIGRldi0+c3RydWN0X211dGV4IGxlZ2FjeSBsb2NraW5nIHNjaGVtZXMu IFVzZSB0aGlzIGhvb2sgaW5zdGVhZAo+ID4gKyAgICAgICAgKiBvZiBAZ2VtX2ZyZWVfb2JqZWN0 Lgo+ID4gKyAgICAgICAgKi8KPiA+ICsgICAgICAgdm9pZCAoKmdlbV9mcmVlX29iamVjdF91bmxv Y2tlZCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ICsKPiA+ICAgICAgICAgaW50 ICgqZ2VtX29wZW5fb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICosIHN0cnVjdCBkcm1f ZmlsZSAqKTsKPiA+ICAgICAgICAgdm9pZCAoKmdlbV9jbG9zZV9vYmplY3QpIChzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKiwgc3RydWN0IGRybV9maWxlICopOwo+ID4KPiA+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kcm1fZ2VtLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiA+IGluZGV4IDBi M2UxMWFiODc1Ny4uYWUxYzdmMThlZWMwIDEwMDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJt X2dlbS5oCj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtLmgKPiA+IEBAIC0xNzUsNyArMTc1 LDYgQEAgc3RydWN0IGRybV9nZW1fb2JqZWN0IHsKPiA+ICB9Owo+ID4KPiA+ICB2b2lkIGRybV9n ZW1fb2JqZWN0X3JlbGVhc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ID4gLXZvaWQg ZHJtX2dlbV9vYmplY3RfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cj4gPiAgaW50IGRybV9nZW1f b2JqZWN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzaXplX3Qgc2l6ZSk7Cj4gPiAgdm9p ZCBkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ IEBAIC0xOTksNDggKzE5OCw4IEBAIGRybV9nZW1fb2JqZWN0X3JlZmVyZW5jZShzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaikKPiA+ICAgICAgICAga3JlZl9nZXQoJm9iai0+cmVmY291bnQpOwo+ ID4gIH0KPiA+Cj4gPiAtLyoqCj4gPiAtICogZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UgLSBy ZWxlYXNlIGEgR0VNIEJPIHJlZmVyZW5jZQo+ID4gLSAqIEBvYmo6IEdFTSBidWZmZXIgb2JqZWN0 Cj4gPiAtICoKPiA+IC0gKiBUaGlzIHJlbGVhc2VzIGEgcmVmZXJlbmNlIHRvIEBvYmouIENhbGxl cnMgbXVzdCBob2xkIHRoZSBkZXYtPnN0cnVjdF9tdXRleAo+ID4gLSAqIGxvY2sgd2hlbiBjYWxs aW5nIHRoaXMgZnVuY3Rpb24sIGV2ZW4gd2hlbiB0aGUgZHJpdmVyIGRvZXNuJ3QgdXNlCj4gPiAt ICogZGV2LT5zdHJ1Y3RfbXV0ZXggZm9yIGFueXRoaW5nLgo+ID4gLSAqCj4gPiAtICogRm9yIGRy aXZlcnMgbm90IGVuY3VtYmVyZWQgd2l0aCBsZWdhY3kgbG9ja2luZyB1c2UKPiA+IC0gKiBkcm1f Z2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgpIGluc3RlYWQuCj4gPiAtICovCj4gPiAt c3RhdGljIGlubGluZSB2b2lkCj4gPiAtZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopCj4gPiAtewo+ID4gLSAgICAgICBpZiAob2JqICE9IE5VTEwp IHsKPiA+IC0gICAgICAgICAgICAgICBXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJm9iai0+ZGV2 LT5zdHJ1Y3RfbXV0ZXgpKTsKPiA+IC0KPiA+IC0gICAgICAgICAgICAgICBrcmVmX3B1dCgmb2Jq LT5yZWZjb3VudCwgZHJtX2dlbV9vYmplY3RfZnJlZSk7Cj4gPiAtICAgICAgIH0KPiA+IC19Cj4g PiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQg LSByZWxlYXNlIGEgR0VNIEJPIHJlZmVyZW5jZQo+ID4gLSAqIEBvYmo6IEdFTSBidWZmZXIgb2Jq ZWN0Cj4gPiAtICoKPiA+IC0gKiBUaGlzIHJlbGVhc2VzIGEgcmVmZXJlbmNlIHRvIEBvYmouIENh bGxlcnMgbXVzdCBub3QgaG9sZCB0aGUKPiA+IC0gKiBkZXYtPnN0cnVjdF9tdXRleCBsb2NrIHdo ZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgo+ID4gLSAqLwo+ID4gLXN0YXRpYyBpbmxpbmUgdm9p ZAo+ID4gLWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKQo+ID4gLXsKPiA+IC0gICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldjsK PiA+IC0KPiA+IC0gICAgICAgaWYgKCFvYmopCj4gPiAtICAgICAgICAgICAgICAgcmV0dXJuOwo+ ID4gLQo+ID4gLSAgICAgICBkZXYgPSBvYmotPmRldjsKPiA+IC0gICAgICAgaWYgKGtyZWZfcHV0 X211dGV4KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9mcmVlLCAmZGV2LT5zdHJ1Y3Rf bXV0ZXgpKQo+ID4gLSAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0 ZXgpOwo+ID4gLSAgICAgICBlbHNlCj4gPiAtICAgICAgICAgICAgICAgbWlnaHRfbG9jaygmZGV2 LT5zdHJ1Y3RfbXV0ZXgpOwo+ID4gLX0KPiA+ICt2b2lkIGRybV9nZW1fb2JqZWN0X3VucmVmZXJl bmNlX3VubG9ja2VkKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+ICt2b2lkIGRybV9n ZW1fb2JqZWN0X3VucmVmZXJlbmNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKPiA+Cj4g PiAgaW50IGRybV9nZW1faGFuZGxlX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwK PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos Cj4gPiAtLQo+ID4gMi44LjEKPiA+Cj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+ID4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ID4gZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVu Z2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK