From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC PATCH 21/24] ARM: vITS: handle INVALL command Date: Wed, 9 Nov 2016 16:21:30 -0800 (PST) Message-ID: References: <20160928182457.12433-1-andre.przywara@arm.com> <20160928182457.12433-22-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c4d7a-00041K-01 for xen-devel@lists.xenproject.org; Thu, 10 Nov 2016 00:21:38 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andre Przywara Cc: xen-devel , Julien Grall , Stefano Stabellini , Vijay Kilari List-Id: xen-devel@lists.xenproject.org T24gRnJpLCA0IE5vdiAyMDE2LCBBbmRyZSBQcnp5d2FyYSB3cm90ZToKPiBIaSwKPiAKPiBPbiAy NC8xMC8xNiAxNjozMiwgVmlqYXkgS2lsYXJpIHdyb3RlOgo+ID4gT24gV2VkLCBTZXAgMjgsIDIw MTYgYXQgMTE6NTQgUE0sIEFuZHJlIFByenl3YXJhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPiB3 cm90ZToKPiA+PiBUaGUgSU5WQUxMIGNvbW1hbmQgaW5zdHJ1Y3RzIGFuIElUUyB0byBpbnZhbGlk YXRlIHRoZSBjb25maWd1cmF0aW9uCj4gPj4gZGF0YSBmb3IgYWxsIExQSXMgYXNzb2NpYXRlZCB3 aXRoIGEgZ2l2ZW4gcmVkaXN0cmlidXRvciAocmVhZDogVkNQVSkuCj4gPj4gVG8gYXZvaWQgaXRl cmF0aW5nIChhbmQgbWFwcGluZyEpIGFsbCBndWVzdCB0YWJsZXMsIHdlIGluc3RlYWQgZ28gdGhy b3VnaAo+ID4+IHRoZSBob3N0IExQSSB0YWJsZSB0byBmaW5kIGFueSBMUElzIHRhcmdldHRpbmcg dGhpcyBWQ1BVLiBXZSB0aGVuIHVwZGF0ZQo+ID4+IHRoZSBjb25maWd1cmF0aW9uIGJpdHMgZm9y IHRoZSBjb25uZWN0ZWQgdmlydHVhbCBMUElzLgo+ID4+Cj4gPj4gU2lnbmVkLW9mZi1ieTogQW5k cmUgUHJ6eXdhcmEgPGFuZHJlLnByenl3YXJhQGFybS5jb20+Cj4gPj4gLS0tCj4gPj4gIHhlbi9h cmNoL2FybS9naWMtaXRzLmMgICAgICAgIHwgNTggKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ID4+ICB4ZW4vYXJjaC9hcm0vdmdpYy1pdHMuYyAgICAgICB8IDMw ICsrKysrKysrKysrKysrKysrKysrKysKPiA+PiAgeGVuL2luY2x1ZGUvYXNtLWFybS9naWMtaXRz LmggfCAgMiArKwo+ID4+ICAzIGZpbGVzIGNoYW5nZWQsIDkwIGluc2VydGlvbnMoKykKPiA+Pgo+ ID4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vZ2ljLWl0cy5jIGIveGVuL2FyY2gvYXJtL2dp Yy1pdHMuYwo+ID4+IGluZGV4IDZmNDMyOWYuLjUxMjlkNmUgMTAwNjQ0Cj4gPj4gLS0tIGEveGVu L2FyY2gvYXJtL2dpYy1pdHMuYwo+ID4+ICsrKyBiL3hlbi9hcmNoL2FybS9naWMtaXRzLmMKPiA+ PiBAQCAtMjI4LDYgKzIyOCwxOCBAQCBzdGF0aWMgaW50IGl0c19zZW5kX2NtZF9pbnYoc3RydWN0 IGhvc3RfaXRzICppdHMsCj4gPj4gICAgICByZXR1cm4gaXRzX3NlbmRfY29tbWFuZChpdHMsIGNt ZCk7Cj4gPj4gIH0KPiA+Pgo+ID4+ICtzdGF0aWMgaW50IGl0c19zZW5kX2NtZF9pbnZhbGwoc3Ry dWN0IGhvc3RfaXRzICppdHMsIGludCBjcHUpCj4gPj4gK3sKPiA+PiArICAgIHVpbnQ2NF90IGNt ZFs0XTsKPiA+PiArCj4gPj4gKyAgICBjbWRbMF0gPSBHSVRTX0NNRF9JTlZBTEw7Cj4gPj4gKyAg ICBjbWRbMV0gPSAweDAwOwo+ID4+ICsgICAgY21kWzJdID0gY3B1ICYgR0VOTUFTSygxNSwgMCk7 Cj4gPj4gKyAgICBjbWRbM10gPSAweDAwOwo+ID4+ICsKPiA+PiArICAgIHJldHVybiBpdHNfc2Vu ZF9jb21tYW5kKGl0cywgY21kKTsKPiA+PiArfQo+ID4+ICsKPiA+PiAgaW50IGdpY3YzX2l0c19t YXBfZGV2aWNlKHN0cnVjdCBob3N0X2l0cyAqaHdfaXRzLCBzdHJ1Y3QgZG9tYWluICpkLAo+ID4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldmlkLCBpbnQgYml0cywgYm9vbCB2YWxp ZCkKPiA+PiAgewo+ID4+IEBAIC02NjgsNiArNjgwLDUyIEBAIHVpbnQzMl90IGdpY3YzX2xwaV9s b29rdXBfbHBpKHN0cnVjdCBkb21haW4gKmQsIHVpbnQzMl90IGhvc3RfbHBpLCBpbnQgKnZjcHVf aWQpCj4gPj4gICAgICByZXR1cm4gaGxwaS52aXJ0X2xwaTsKPiA+PiAgfQo+ID4+Cj4gPj4gKy8q IEl0ZXJhdGUgb3ZlciBhbGwgaG9zdCBMUElzLCBhbmQgdXBkYXRpbmcgdGhlICJlbmFibGVkIiBz dGF0ZSBmb3IgYSBnaXZlbgo+ID4+ICsgKiBndWVzdCByZWRpc3RyaWJ1dG9yIChWQ1BVKSBnaXZl biB0aGUgcmVzcGVjdGl2ZSBzdGF0ZSBpbiB0aGUgcHJvdmlkZWQKPiA+PiArICogcHJvcHRhYmxl LiBUaGlzIHByb3B0YWJsZSBpcyBpbmRleGVkIGJ5IHRoZSBzdG9yZWQgdmlydHVhbCBMUEkgbnVt YmVyLgo+ID4+ICsgKiBUaGlzIGlzIHRvIGltcGxlbWVudCBhIGd1ZXN0IElOVkFMTCBjb21tYW5k Lgo+ID4+ICsgKi8KPiA+PiArdm9pZCBnaWN2M19scGlfdXBkYXRlX2NvbmZpZ3VyYXRpb25zKHN0 cnVjdCB2Y3B1ICp2LCB1aW50OF90ICpwcm9wdGFibGUpCj4gPj4gK3sKPiA+PiArICAgIGludCBj aHVuaywgaTsKPiA+PiArICAgIHN0cnVjdCBob3N0X2l0cyAqaXRzOwo+ID4+ICsKPiA+PiArICAg IGZvciAoY2h1bmsgPSAwOyBjaHVuayA8IE1BWF9IT1NUX0xQSVMgLyBIT1NUX0xQSVNfUEVSX1BB R0U7IGNodW5rKyspCj4gPj4gKyAgICB7Cj4gPj4gKyAgICAgICAgaWYgKCAhbHBpX2RhdGEuaG9z dF9scGlzW2NodW5rXSApCj4gPj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4+ICsKPiA+PiAr ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSE9TVF9MUElTX1BFUl9QQUdFOyBpKyspCj4gPj4gKyAg ICAgICAgewo+ID4+ICsgICAgICAgICAgICB1bmlvbiBob3N0X2xwaSAqaGxwaXAgPSAmbHBpX2Rh dGEuaG9zdF9scGlzW2NodW5rXVtpXSwgaGxwaTsKPiA+PiArICAgICAgICAgICAgdWludDMyX3Qg aGxwaV9ucjsKPiA+PiArCj4gPj4gKyAgICAgICAgICAgIGhscGkuZGF0YSA9IGhscGlwLT5kYXRh Owo+ID4+ICsgICAgICAgICAgICBpZiAoICFobHBpLnZpcnRfbHBpICkKPiA+PiArICAgICAgICAg ICAgICAgIGNvbnRpbnVlOwo+ID4+ICsKPiA+PiArICAgICAgICAgICAgaWYgKCBobHBpLmRvbV9p ZCAhPSB2LT5kb21haW4tPmRvbWFpbl9pZCApCj4gPj4gKyAgICAgICAgICAgICAgICBjb250aW51 ZTsKPiA+PiArCj4gPj4gKyAgICAgICAgICAgIGlmICggaGxwaS52Y3B1X2lkICE9IHYtPnZjcHVf aWQgKQo+ID4+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPj4gKwo+ID4+ICsgICAgICAg ICAgICBobHBpX25yID0gY2h1bmsgKiBIT1NUX0xQSVNfUEVSX1BBR0UgKyBpOwo+ID4+ICsKPiA+ PiArICAgICAgICAgICAgaWYgKCBwcm9wdGFibGVbaGxwaS52aXJ0X2xwaV0gJiBMUElfUFJPUF9F TkFCTEVEICkKPiA+PiArICAgICAgICAgICAgICAgIGxwaV9kYXRhLmxwaV9wcm9wZXJ0eVtobHBp X25yIC0gODE5Ml0gfD0gTFBJX1BST1BfRU5BQkxFRDsKPiA+PiArICAgICAgICAgICAgZWxzZQo+ ID4+ICsgICAgICAgICAgICAgICAgbHBpX2RhdGEubHBpX3Byb3BlcnR5W2hscGlfbnIgLSA4MTky XSAmPSB+TFBJX1BST1BfRU5BQkxFRDsKPiA+PiArICAgICAgICB9Cj4gPj4gKyAgICB9Cj4gPiAg ICAgICAgIEFGQUlLLCB0aGUgaW5pdGlhbCBkZXNpZ24gaXMgdG8gdXNlIHRhc2tsZXQgdG8gdXBk YXRlIHByb3BlcnR5Cj4gPiB0YWJsZSBhcyBpdCBjb25zdW1lcwo+ID4gbG90IG9mIHRpbWUgdG8g dXBkYXRlIHRoZSB0YWJsZS4KPiAKPiBUaGlzIGlzIGEgcG9zc2libGUsIGJ1dCBwcmVtYXR1cmUg b3B0aW1pemF0aW9uLgo+IExpbnV4IChhdCB0aGUgbW9tZW50LCBhdCBsZWFzdCkgb25seSBjYWxs cyBJTlZBTEwgX29uY2VfLCBqdXN0IGFmdGVyCj4gaW5pdGlhbGlzaW5nIHRoZSBjb2xsZWN0aW9u cy4gQW5kIGF0IHRoaXMgcG9pbnQgbm8gTFBJIGlzIG1hcHBlZCwgc28gdGhlCj4gd2hvbGUgcm91 dGluZSBkb2VzIGJhc2ljYWxseSBub3RoaW5nIC0gYW5kIHRoYXQgcXVpdGUgZmFzdC4KPiBXZSBj YW4gbGF0ZXIgaGF2ZSBhbnkga2luZCBvZiBmYW5jeSBhbGdvcml0aG0gaWYgdGhlcmUgaXMgYSBu ZWVkIGZvci4KCkkgdW5kZXJzdGFuZCwgYnV0IGFzLWlzIGl0J3Mgc28gZXhwZW5zaXZlIHRoYXQg Y291bGQgYmUgYSBET1MgdmVjdG9yLgpBbHNvIG90aGVyIE9TZXMgY291bGQgaXNzdWUgSU5WQUxM IG11Y2ggbW9yZSBvZnRlbiB0aGFuIExpbnV4LgoKQ29uc2lkZXJpbmcgdGhhdCB3ZSBtaWdodCBz dXBwb3J0IGRldmljZSBhc3NpZ21lbnQgd2l0aCBJVFMgc29vbiwgSQp0aGluayBpdCBtaWdodCBi ZSBiZXN0IHRvIHBhcnNlIHBlci1kb21haW4gdmlydHVhbCB0YWJsZXMgcmF0aGVyIHRoYW4KdGhl IGZ1bGwgbGlzdCBvZiBwaHlzaWNhbCBMUElzLCB3aGljaCB0aGVvcmV0aWNhbGx5IGNvdWxkIGJl IG11Y2gKbGFyZ2VyLiBPciBhbHRlcm5hdGl2ZWx5IHdlIG5lZWQgdG8gdGhpbmsgYWJvdXQgYWRk aW5nIGFub3RoZXIgZmllbGQgdG8KbHBpX2RhdGEsIHRvIGxpbmsgdG9nZXRoZXIgYWxsIGxwaXMg YXNzaWduZWQgdG8gdGhlIHNhbWUgZG9tYWluLCBidXQKdGhhdCB3b3VsZCBjb3N0IGV2ZW4gbW9y ZSBtZW1vcnkuIE9yIHdlIGNvdWxkIHJhdGUtbGltaXQgdGhlIElOVkFMTApjYWxscyB0byBvbmUg ZXZlcnkgZmV3IHNlY29uZHMgb3Igc29tZXRoaW5nLiBPciBhbGwgb2YgdGhlIGFib3ZlIDotKQoK V2UgbmVlZCB0byBwcm90ZWN0IFhlbiBmcm9tIHRvbyBmcmVxdWVudCBhbmQgdG9vIGV4cGVuc2l2 ZSByZXF1ZXN0cyBsaWtlCnRoaXMuCgoKPiA+PiArCj4gPj4gKyAgICAvKiBUZWxsIGFsbCBJVFNl cyB0aGF0IHRoZXkgc2hvdWxkIHVwZGF0ZSB0aGUgcHJvcGVydHkgdGFibGUgZm9yIENQVSAwLAo+ ID4+ICsgICAgICogd2hpY2ggaXMgd2hlcmUgd2UgbWFwIGFsbCBMUElzIHRvLgo+ID4+ICsgICAg ICovCj4gPj4gKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0cywgJmhvc3RfaXRzX2xpc3QsIGVu dHJ5KQo+ID4+ICsgICAgICAgIGl0c19zZW5kX2NtZF9pbnZhbGwoaXRzLCAwKTsKPiA+PiArfQo+ ID4+ICsKPiA+PiAgdm9pZCBnaWN2M19scGlfc2V0X2VuYWJsZShzdHJ1Y3QgaG9zdF9pdHMgKml0 cywKPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkZXZpY2VpZCwgdWlu dDMyX3QgZXZlbnRpZCwKPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBo b3N0X2xwaSwgYm9vbCBlbmFibGVkKQo+ID4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdmdp Yy1pdHMuYyBiL3hlbi9hcmNoL2FybS92Z2ljLWl0cy5jCj4gPj4gaW5kZXggNzRkYThmYy4uMWU0 MjliNyAxMDA2NDQKPiA+PiAtLS0gYS94ZW4vYXJjaC9hcm0vdmdpYy1pdHMuYwo+ID4+ICsrKyBi L3hlbi9hcmNoL2FybS92Z2ljLWl0cy5jCj4gPj4gQEAgLTI5NCw2ICsyOTQsMzMgQEAgb3V0X3Vu bG9jazoKPiA+PiAgICAgIHJldHVybiByZXQ7Cj4gPj4gIH0KPiA+Pgo+ID4+ICsvKiBJTlZBTEwg dXBkYXRlcyB0aGUgcGVyLUxQSSBjb25maWd1cmF0aW9uIHN0YXR1cyBmb3IgZXZlcnkgTFBJIG1h cHBlZCB0bwo+ID4+ICsgKiB0aGlzIHJlZGlzdHJpYnV0b3IuIEZvciB0aGUgZ3Vlc3Qgc2lkZSB3 ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSBhbnl0aGluZywKPiA+PiArICogYXMgd2UgYWx3YXlzIHJl ZmVyIHRvIHRoZSBhY3R1YWwgdGFibGUgZm9yIHRoZSBlbmFibGVkIGJpdCBhbmQgdGhlCj4gPj4g KyAqIHByaW9yaXR5Lgo+ID4+ICsgKiBFbmFibGluZyBvciBkaXNhYmxpbmcgYSB2aXJ0dWFsIExQ SSBob3dldmVyIG5lZWRzIHRvIGJlIHByb3BhZ2F0ZWQgdG8KPiA+PiArICogdGhlIHJlc3BlY3Rp dmUgaG9zdCBMUEkuIEluc3RlYWQgb2YgaXRlcmF0aW5nIG92ZXIgYWxsIG1hcHBlZCBMUElzIGlu IG91cgo+ID4+ICsgKiBlbXVsYXRlZCBHSUMgKHdoaWNoIGlzIGV4cGVuc2l2ZSBkdWUgdG8gdGhl IHJlcXVpcmVkIG9uLWRlbWFuZCBtYXBwaW5nKSwKPiA+PiArICogd2UgaXRlcmF0ZSBvdmVyIGFs bCBtYXBwZWQgX2hvc3RfIExQSXMgYW5kIGZpbHRlciBmb3IgdGhvc2Ugd2hpY2ggYXJlCj4gPj4g KyAqIGZvcndhcmRlZCB0byB0aGlzIHZpcnR1YWwgcmVkaXN0cmlidXRvci4KPiA+PiArICovCj4g Pj4gK3N0YXRpYyBpbnQgaXRzX2hhbmRsZV9pbnZhbGwoc3RydWN0IHZpcnRfaXRzICppdHMsIHVp bnQ2NF90ICpjbWRwdHIpCj4gPj4gK3sKPiA+PiArICAgIHVpbnQzMl90IGNvbGxpZCA9IGl0c19j bWRfZ2V0X2NvbGxlY3Rpb24oY21kcHRyKTsKPiA+PiArICAgIHN0cnVjdCB2Y3B1ICp2Y3B1Owo+ ID4+ICsKPiA+PiArICAgIHNwaW5fbG9jaygmaXRzLT5pdHNfbG9jayk7Cj4gPj4gKyAgICB2Y3B1 ID0gZ2V0X3ZjcHVfZnJvbV9jb2xsZWN0aW9uKGl0cywgY29sbGlkKTsKPiA+PiArICAgIHNwaW5f dW5sb2NrKCZpdHMtPml0c19sb2NrKTsKPiA+PiArCj4gPj4gKyAgICBpZiAoICF2Y3B1ICkKPiA+ PiArICAgICAgICByZXR1cm4gLTE7Cj4gPj4gKwo+ID4+ICsgICAgZ2ljdjNfbHBpX3VwZGF0ZV9j b25maWd1cmF0aW9ucyh2Y3B1LCBpdHMtPmQtPmFyY2gudmdpYy5wcm9wdGFibGUpOwo+ID4+ICsK PiA+PiArICAgIHJldHVybiAwOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICBzdGF0aWMgaW50IGl0c19o YW5kbGVfbWFwYyhzdHJ1Y3QgdmlydF9pdHMgKml0cywgdWludDY0X3QgKmNtZHB0cikKPiA+PiAg ewo+ID4+ICAgICAgdWludDMyX3QgY29sbGlkID0gaXRzX2NtZF9nZXRfY29sbGVjdGlvbihjbWRw dHIpOwo+ID4+IEBAIC01MTUsNiArNTQyLDkgQEAgc3RhdGljIGludCB2Z2ljX2l0c19oYW5kbGVf Y21kcyhzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdmlydF9pdHMgKml0cywKPiA+PiAgICAgICAg ICBjYXNlIEdJVFNfQ01EX0lOVjoKPiA+PiAgICAgICAgICAgICAgaXRzX2hhbmRsZV9pbnYoaXRz LCBjbWRwdHIpOwo+ID4+ICAgICAgICAgICAgIGJyZWFrOwo+ID4+ICsgICAgICAgIGNhc2UgR0lU U19DTURfSU5WQUxMOgo+ID4+ICsgICAgICAgICAgICBpdHNfaGFuZGxlX2ludmFsbChpdHMsIGNt ZHB0cik7Cj4gPj4gKyAgICAgICAgICAgYnJlYWs7Cj4gPj4gICAgICAgICAgY2FzZSBHSVRTX0NN RF9NQVBDOgo+ID4+ICAgICAgICAgICAgICBpdHNfaGFuZGxlX21hcGMoaXRzLCBjbWRwdHIpOwo+ ID4+ICAgICAgICAgICAgICBicmVhazsKPiA+PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNt LWFybS9naWMtaXRzLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2dpYy1pdHMuaAo+ID4+IGluZGV4 IDJjZGIzZTEuLmJhNmIyZDUgMTAwNjQ0Cj4gPj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS9n aWMtaXRzLmgKPiA+PiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2dpYy1pdHMuaAo+ID4+IEBA IC0xNDYsNiArMTQ2LDggQEAgaW50IGdpY3YzX2xwaV9kcm9wX2hvc3RfbHBpKHN0cnVjdCBob3N0 X2l0cyAqaXRzLAo+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGV2 aWQsIHVpbnQzMl90IGV2ZW50aWQsCj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCBob3N0X2xwaSk7Cj4gPj4KPiA+PiArdm9pZCBnaWN2M19scGlfdXBkYXRlX2NvbmZp Z3VyYXRpb25zKHN0cnVjdCB2Y3B1ICp2LCB1aW50OF90ICpwcm9wdGFibGUpOwo+ID4+ICsKPiA+ PiAgc3RhdGljIGlubGluZSBpbnQgZ2ljdjNfbHBpX2dldF9wcmlvcml0eShzdHJ1Y3QgZG9tYWlu ICpkLCB1aW50MzJfdCBscGkpCj4gPj4gIHsKPiA+PiAgICAgIHJldHVybiBkLT5hcmNoLnZnaWMu cHJvcHRhYmxlW2xwaSAtIDgxOTJdICYgMHhmYzsKPiA+PiAtLQo+ID4+IDIuOS4wCj4gPj4KPiA+ Pgo+ID4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4g Pj4gWGVuLWRldmVsIG1haWxpbmcgbGlzdAo+ID4+IFhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCj4g Pj4gaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo+ID4gCj4gCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK