From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: Re: [PATCH v5 07/15] iommu: track reserved ranges using a rangeset Date: Tue, 7 Aug 2018 08:16:12 +0000 Message-ID: <53062aabdb904f26adf33f657a94788f@AMSPEX02CL03.citrite.net> References: <20180803172220.1657-1-paul.durrant@citrix.com> <20180803172220.1657-8-paul.durrant@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fmxAZ-0000bR-54 for xen-devel@lists.xenproject.org; Tue, 07 Aug 2018 08:16:43 +0000 In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Kevin Tian , "xen-devel@lists.xenproject.org" Cc: Jan Beulich List-Id: xen-devel@lists.xenproject.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IFRpYW4sIEtldmluIFttYWlsdG86 a2V2aW4udGlhbkBpbnRlbC5jb21dCj4gU2VudDogMDcgQXVndXN0IDIwMTggMDQ6MDQKPiBUbzog UGF1bCBEdXJyYW50IDxQYXVsLkR1cnJhbnRAY2l0cml4LmNvbT47IHhlbi1kZXZlbEBsaXN0cy54 ZW5wcm9qZWN0Lm9yZwo+IENjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+Cj4gU3Vi amVjdDogUkU6IFtQQVRDSCB2NSAwNy8xNV0gaW9tbXU6IHRyYWNrIHJlc2VydmVkIHJhbmdlcyB1 c2luZyBhIHJhbmdlc2V0Cj4gCj4gPiBGcm9tOiBQYXVsIER1cnJhbnQgW21haWx0bzpwYXVsLmR1 cnJhbnRAY2l0cml4LmNvbV0KPiA+IFNlbnQ6IFNhdHVyZGF5LCBBdWd1c3QgNCwgMjAxOCAxOjIy IEFNCj4gPgo+ID4gUmFuZ2VzIHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgaW4g dGhlIElPTU1VIGFyZSBub3QKPiA+IG5lY2Vzc2FyaWx5Cj4gPiBsaW1pdGVkIHRvIFJNUlJzLiBJ ZiBpb21tdV9pbmNsdXNpdmVfbWFwcGluZyBpcyBzZXQgdGhlbiBhbnkgZnJhbWUKPiA+IG51bWJl cgo+ID4gZmFsbGluZyB3aXRoaW4gYW4gRTgyMCByZXNlcnZlZCByZWdpb24gc2hvdWxkIGFsc28g YmUgY29uc2lkZXJlZCBhcwo+ID4gcmVzZXJ2ZWQgaW4gdGhlIElPTU1VLgo+IAo+IEkgZG9uJ3Qg dGhpbmsgaXQgaXMgYSBnb29kIGV4dGVuc2lvbi4gUk1SUiBieSBkZWZpbml0aW9uIHJlcXVpcmVz Cj4gaWRlbnRpdHkgbWFwcGluZyBpbiBJT01NVSBwYWdlIHRhYmxlLCB0aHVzIG11c3QgYmUgYWxz byByZXNlcnZlZAo+IGluIGJmbiBhZGRyZXNzIHNwYWNlICh0byBhdm9pZCBiZWluZyB1c2VkIGZv ciBvdGhlciBwdXJwb3NlKS4KPiBOb3JtYWwgRTgyMCByZXNlcnZlZCByZWdpb25zIGhhdmUgbm8g c3VjaCByZXF1aXJlbWVudC4gR3Vlc3QKPiBjYW4gdXNlIHNhbWUgYmZuIGxvY2F0aW9uIGZvciBh bnkgcHVycG9zZS4gSSdtIG5vdCBzdXJlIHdoeSB3ZQo+IHdhbnQgdG8gYWRkIG1vcmUgbGltaXRh dGlvbnMgaGVyZS4KCkhhdmUgeW91IHRyaWVkIGJvb3RpbmcgYW4gYXZlcmFnZSBJbnRlbCBiYXNl ZCBzZXJ2ZXIgd2l0aG91dCBpZGVudGl0eSBtYXBwZWQgRTgyMCByZXNlcnZlZCByZWdpb25zPyBH b29kIGx1Y2sgd2l0aCB0aGF0LCBiZWNhdXNlIEkgdGhpbmsgYWJvdXQgaGFsZiB0aGUgc2VydmVy cyBvbiB0aGUgcGxhbmV0IHdpbGwgd2VkZ2UgdXAgaWYgeW91IG9ubHkgZ2l2ZSB0aGVtIFJNUlJz LiBNeSBEZWxsIFI3MzAgY2VydGFpbmx5IHdpbGwgYW5kIEknZCBoYXphcmQgYSBndWVzcyB0aGF0 IGFueSBvdGhlciBEZWxsIGJveCB3ZSBoYXZlIHdpdGggYW4gaURSQUMgd2lsbCB0b28uCk5vdGUg dGhlIGJlaGF2aW91ciBpcyBwcmVkaWNhdGVkIG9uICdpb21tdV9pbmNsdXNpdmVfbWFwcGluZycg YmVpbmcgc2V0IHNvIGlmIHlvdSBmZWVsIGx1Y2t5IHRoZW4geW91IGNhbiB0dXJuIGl0IG9mZiA6 LSkKCiAgUGF1bAoKPiAKPiA+IFRoaXMgcGF0Y2ggYWRkcyBhIHJhbmdlc2V0IHRvIHRoZSBkb21h aW5faW9tbXUgc3RydWN0dXJlIHRoYXQgaXMgdGhlbgo+ID4gdXNlZAo+ID4gdG8gdHJhY2sgYWxs IHJlc2VydmVkIHJhbmdlcy4gVGhpcyB3aWxsIGJlIG5lZWRlZCBieSBhIHN1YnNlcXVlbnQgcGF0 Y2gKPiA+IHRvIHRlc3Qgd2hldGhlciBpdCBpcyBzYWZlIHRvIG1vZGlmeSBhIHBhcnRpY3VsYXIg SU9NTVUgZW50cnkuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogUGF1bCBEdXJyYW50IDxwYXVsLmR1 cnJhbnRAY2l0cml4LmNvbT4KPiA+IFJldmlld2VkLWJ5OiBHZW9yZ2UgRHVubGFwIDxnZW9yZ2Uu ZHVubGFwQGNpdHJpeC5jb20+Cj4gPiBSZXZpZXdlZC1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0 cml4LmNvbT4KPiA+IC0tLQo+ID4gQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4K PiA+IENjOiBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KPiA+Cj4gPiB2MjoKPiA+ ICAtIE5ldyBpbiB2Mi4KPiA+IC0tLQo+ID4gIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2lvbW11 LmMgICAgICAgfCAxMCArKysrKysrKystCj4gPiAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRk L2lvbW11LmMgICB8IDIwICsrKysrKysrKysrKystLS0tLS0tCj4gPiAgeGVuL2RyaXZlcnMvcGFz c3Rocm91Z2gvdnRkL3g4Ni92dGQuYyB8IDE3ICsrKysrKysrKysrKysrKystCj4gPiAgeGVuL2lu Y2x1ZGUveGVuL2lvbW11LmggICAgICAgICAgICAgICB8ICA2ICsrKysrKwo+ID4gIDQgZmlsZXMg Y2hhbmdlZCwgNDQgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKPiA+Cj4gPiBkaWZmIC0t Z2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW9tbXUuYwo+ID4gYi94ZW4vZHJpdmVycy9w YXNzdGhyb3VnaC9pb21tdS5jCj4gPiBpbmRleCAyMWU2ODg2YTNmLi5iMTBhMzdlNWQ3IDEwMDY0 NAo+ID4gLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvaW9tbXUuYwo+ID4gKysrIGIveGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gvaW9tbXUuYwo+ID4gQEAgLTE0Nyw2ICsxNDcsMTAgQEAgaW50 IGlvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpCj4gPiAgICAgIGlmICggIWlvbW11 X2VuYWJsZWQgKQo+ID4gICAgICAgICAgcmV0dXJuIDA7Cj4gPgo+ID4gKyAgICBoZC0+cmVzZXJ2 ZWRfcmFuZ2VzID0gcmFuZ2VzZXRfbmV3KGQsIE5VTEwsIDApOwo+ID4gKyAgICBpZiAoICFoZC0+ cmVzZXJ2ZWRfcmFuZ2VzICkKPiA+ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4g ICAgICBoZC0+cGxhdGZvcm1fb3BzID0gaW9tbXVfZ2V0X29wcygpOwo+ID4gICAgICByZXR1cm4g aGQtPnBsYXRmb3JtX29wcy0+aW5pdChkKTsKPiA+ICB9Cj4gPiBAQCAtMjQ4LDEyICsyNTIsMTYg QEAgaW50IGlvbW11X2NvbnN0cnVjdChzdHJ1Y3QgZG9tYWluICpkKQo+ID4KPiA+ICB2b2lkIGlv bW11X2RvbWFpbl9kZXN0cm95KHN0cnVjdCBkb21haW4gKmQpCj4gPiAgewo+ID4gLSAgICBpZiAo ICFpb21tdV9lbmFibGVkIHx8ICFkb21faW9tbXUoZCktPnBsYXRmb3JtX29wcyApCj4gPiArICAg IGNvbnN0IHN0cnVjdCBkb21haW5faW9tbXUgKmhkID0gZG9tX2lvbW11KGQpOwo+ID4gKwo+ID4g KyAgICBpZiAoICFpb21tdV9lbmFibGVkIHx8ICFoZC0+cGxhdGZvcm1fb3BzICkKPiA+ICAgICAg ICAgIHJldHVybjsKPiA+Cj4gPiAgICAgIGlvbW11X3RlYXJkb3duKGQpOwo+ID4KPiA+ICAgICAg YXJjaF9pb21tdV9kb21haW5fZGVzdHJveShkKTsKPiA+ICsKPiA+ICsgICAgcmFuZ2VzZXRfZGVz dHJveShoZC0+cmVzZXJ2ZWRfcmFuZ2VzKTsKPiA+ICB9Cj4gPgo+ID4gIGludCBpb21tdV9tYXBf cGFnZShzdHJ1Y3QgZG9tYWluICpkLCBiZm5fdCBiZm4sIG1mbl90IG1mbiwKPiA+IGRpZmYgLS1n aXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuYwo+ID4gYi94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuYwo+ID4gaW5kZXggYzlmNTBmMDRhZC4uMjgyZTIyNzQx NCAxMDA2NDQKPiA+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21tdS5jCj4g PiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuYwo+ID4gQEAgLTE5MTAs NiArMTkxMCw3IEBAIHN0YXRpYyBpbnQgcm1ycl9pZGVudGl0eV9tYXBwaW5nKHN0cnVjdCBkb21h aW4KPiA+ICpkLCBib29sX3QgbWFwLAo+ID4gICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBQ QUdFX0FMSUdOXzRLKHJtcnItPmVuZF9hZGRyZXNzKSA+Pgo+ID4gUEFHRV9TSElGVF80SzsKPiA+ ICAgICAgc3RydWN0IG1hcHBlZF9ybXJyICptcm1ycjsKPiA+ICAgICAgc3RydWN0IGRvbWFpbl9p b21tdSAqaGQgPSBkb21faW9tbXUoZCk7Cj4gPiArICAgIGludCBlcnIgPSAwOwo+ID4KPiA+ICAg ICAgQVNTRVJUKHBjaWRldnNfbG9ja2VkKCkpOwo+ID4gICAgICBBU1NFUlQocm1yci0+YmFzZV9h ZGRyZXNzIDwgcm1yci0+ZW5kX2FkZHJlc3MpOwo+ID4gQEAgLTE5MjMsOCArMTkyNCw2IEBAIHN0 YXRpYyBpbnQgcm1ycl9pZGVudGl0eV9tYXBwaW5nKHN0cnVjdCBkb21haW4KPiA+ICpkLCBib29s X3QgbWFwLAo+ID4gICAgICAgICAgaWYgKCBtcm1yci0+YmFzZSA9PSBybXJyLT5iYXNlX2FkZHJl c3MgJiYKPiA+ICAgICAgICAgICAgICAgbXJtcnItPmVuZCA9PSBybXJyLT5lbmRfYWRkcmVzcyAp Cj4gPiAgICAgICAgICB7Cj4gPiAtICAgICAgICAgICAgaW50IHJldCA9IDA7Cj4gPiAtCj4gPiAg ICAgICAgICAgICAgaWYgKCBtYXAgKQo+ID4gICAgICAgICAgICAgIHsKPiA+ICAgICAgICAgICAg ICAgICAgKyttcm1yci0+Y291bnQ7Cj4gPiBAQCAtMTkzNCwyOCArMTkzMywzNSBAQCBzdGF0aWMg aW50IHJtcnJfaWRlbnRpdHlfbWFwcGluZyhzdHJ1Y3QKPiA+IGRvbWFpbiAqZCwgYm9vbF90IG1h cCwKPiA+ICAgICAgICAgICAgICBpZiAoIC0tbXJtcnItPmNvdW50ICkKPiA+ICAgICAgICAgICAg ICAgICAgcmV0dXJuIDA7Cj4gPgo+ID4gLSAgICAgICAgICAgIHdoaWxlICggYmFzZV9wZm4gPCBl bmRfcGZuICkKPiA+ICsgICAgICAgICAgICBlcnIgPSByYW5nZXNldF9yZW1vdmVfcmFuZ2UoaGQt PnJlc2VydmVkX3JhbmdlcywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYmFzZV9wZm4sIGVuZF9wZm4pOwo+ID4gKyAgICAgICAgICAgIHdoaWxlICggIWVyciAm JiBiYXNlX3BmbiA8IGVuZF9wZm4gKQo+ID4gICAgICAgICAgICAgIHsKPiA+ICAgICAgICAgICAg ICAgICAgaWYgKCBjbGVhcl9pZGVudGl0eV9wMm1fZW50cnkoZCwgYmFzZV9wZm4pICkKPiA+IC0g ICAgICAgICAgICAgICAgICAgIHJldCA9IC1FTlhJTzsKPiA+ICsgICAgICAgICAgICAgICAgICAg IGVyciA9IC1FTlhJTzsKPiA+ICsKPiA+ICAgICAgICAgICAgICAgICAgYmFzZV9wZm4rKzsKPiA+ ICAgICAgICAgICAgICB9Cj4gPgo+ID4gICAgICAgICAgICAgIGxpc3RfZGVsKCZtcm1yci0+bGlz dCk7Cj4gPiAgICAgICAgICAgICAgeGZyZWUobXJtcnIpOwo+ID4gLSAgICAgICAgICAgIHJldHVy biByZXQ7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIGVycjsKPiA+ICAgICAgICAgIH0KPiA+ICAg ICAgfQo+ID4KPiA+ICAgICAgaWYgKCAhbWFwICkKPiA+ICAgICAgICAgIHJldHVybiAtRU5PRU5U Owo+ID4KPiA+ICsgICAgZXJyID0gcmFuZ2VzZXRfYWRkX3JhbmdlKGhkLT5yZXNlcnZlZF9yYW5n ZXMsIGJhc2VfcGZuLCBlbmRfcGZuKTsKPiA+ICsgICAgaWYgKCBlcnIgKQo+ID4gKyAgICAgICAg cmV0dXJuIGVycjsKPiA+ICsKPiA+ICAgICAgd2hpbGUgKCBiYXNlX3BmbiA8IGVuZF9wZm4gKQo+ ID4gICAgICB7Cj4gPiAtICAgICAgICBpbnQgZXJyID0gc2V0X2lkZW50aXR5X3AybV9lbnRyeShk LCBiYXNlX3BmbiwgcDJtX2FjY2Vzc19ydywgZmxhZyk7Cj4gPiAtCj4gPiArICAgICAgICBlcnIg PSBzZXRfaWRlbnRpdHlfcDJtX2VudHJ5KGQsIGJhc2VfcGZuLCBwMm1fYWNjZXNzX3J3LCBmbGFn KTsKPiA+ICAgICAgICAgIGlmICggZXJyICkKPiA+ICAgICAgICAgICAgICByZXR1cm4gZXJyOwo+ ID4gKwo+ID4gICAgICAgICAgYmFzZV9wZm4rKzsKPiA+ICAgICAgfQo+ID4KPiA+IGRpZmYgLS1n aXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQveDg2L3Z0ZC5jCj4gPiBiL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC94ODYvdnRkLmMKPiA+IGluZGV4IDZmZWQ0YTkyY2IuLjAzMjQx MmI4YzYgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQveDg2L3Z0 ZC5jCj4gPiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC92dGQveDg2L3Z0ZC5jCj4gPiBA QCAtMTY0LDEwICsxNjQsMjUgQEAgdm9pZCBfX2h3ZG9tX2luaXQKPiA+IHZ0ZF9zZXRfaHdkb21f bWFwcGluZyhzdHJ1Y3QgZG9tYWluICpkKQo+ID4KPiA+ICAgICAgICAgICAgICBpZiAoICFyYyAp Cj4gPiAgICAgICAgICAgICAgICAgcmMgPSByZXQ7Cj4gPiArCj4gPiArICAgICAgICAgICAgLyoK PiA+ICsgICAgICAgICAgICAgKiBUaGUgb25seSByZWFzb24gYSByZXNlcnZlZCBwYWdlIHdvdWxk IGJlIG1hcHBlZCBpcyB0aGF0Cj4gPiArICAgICAgICAgICAgICogaW9tbXVfaW5jbHVzaXZlX21h cHBpbmcgaXMgc2V0LCBpbiB3aGljaCBjYXNlIHRoZSBCRk4KPiA+ICsgICAgICAgICAgICAgKiBu ZWVkcyB0byBiZSBtYXJrZWQgYXMgcmVzZXJ2ZWQgaW4gdGhlIElPTU1VLgo+ID4gKyAgICAgICAg ICAgICAqLwo+ID4gKyAgICAgICAgICAgIGlmICggcGFnZV9pc19yYW1fdHlwZShwZm4sIFJBTV9U WVBFX1JFU0VSVkVEKSApCj4gPiArICAgICAgICAgICAgewo+ID4gKyAgICAgICAgICAgICAgICBB U1NFUlQoaW9tbXVfaW5jbHVzaXZlX21hcHBpbmcpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAg ICByZXQgPSByYW5nZXNldF9hZGRfc2luZ2xldG9uKGRvbV9pb21tdShkKS0KPiA+cmVzZXJ2ZWRf cmFuZ2VzLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJmbl94KGJmbikpOwo+ID4gKyAgICAgICAgICAgICAgICBpZiAoICFyYyApCj4gPiArICAgICAg ICAgICAgICAgICAgICByYyA9IHJldDsKPiA+ICsgICAgICAgICAgICB9Cj4gPiAgICAgICAgICB9 Cj4gPgo+ID4gICAgICAgICAgaWYgKCByYyApCj4gPiAtICAgICAgICAgICAgcHJpbnRrKFhFTkxP R19XQVJOSU5HIFZURFBSRUZJWCAiIGQlZDogSU9NTVUgbWFwcGluZwo+ID4gZmFpbGVkOiAlZFxu IiwKPiA+ICsgICAgICAgICAgICBwcmludGsoWEVOTE9HX1dBUk5JTkcgVlREUFJFRklYICIgZCVk OiBJT01NVQo+ID4gbWFwcGluZy9yZXNlcnZhdGlvbiBmYWlsZWQ6ICVkXG4iLAo+ID4gICAgICAg ICAgICAgICAgICAgICBkLT5kb21haW5faWQsIHJjKTsKPiA+Cj4gPiAgICAgICAgICBpZiAoIShp ICYgKDB4ZmZmZmYgPj4gKFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUXzRLKSkpKQo+ID4gZGlmZiAt LWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9pb21tdS5oIGIveGVuL2luY2x1ZGUveGVuL2lvbW11LmgK PiA+IGluZGV4IDYyNDc4NGZlYzguLmNjMGJlODFiNGUgMTAwNjQ0Cj4gPiAtLS0gYS94ZW4vaW5j bHVkZS94ZW4vaW9tbXUuaAo+ID4gKysrIGIveGVuL2luY2x1ZGUveGVuL2lvbW11LmgKPiA+IEBA IC0xMjIsNiArMTIyLDEyIEBAIHN0cnVjdCBkb21haW5faW9tbXUgewo+ID4KPiA+ICAgICAgLyog RmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBJT01NVSAqLwo+ID4gICAgICBERUNMQVJFX0JJVE1B UChmZWF0dXJlcywgSU9NTVVfRkVBVF9jb3VudCk7Cj4gPiArCj4gPiArICAgIC8qCj4gPiArICAg ICAqIEJGTiByYW5nZXMgdGhhdCBhcmUgcmVzZXJ2ZWQgaW4gdGhlIGRvbWFpbiBJT01NVSBtYXBw aW5ncyBhbmQKPiA+ICsgICAgICogbXVzdCBub3QgYmUgbW9kaWZpZWQgYWZ0ZXIgaW5pdGlhbGl6 YXRpb24uCj4gPiArICAgICAqLwo+ID4gKyAgICBzdHJ1Y3QgcmFuZ2VzZXQgKnJlc2VydmVkX3Jh bmdlczsKPiA+ICB9Owo+ID4KPiA+ICAjZGVmaW5lIGRvbV9pb21tdShkKSAgICAgICAgICAgICAg KCYoZCktPmlvbW11KQo+ID4gLS0KPiA+IDIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h bi9saXN0aW5mby94ZW4tZGV2ZWw=