From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH net-next 3/3] vhost: access vq metadata through kernel virtual address Date: Thu, 27 Dec 2018 17:39:21 +0800 Message-ID: <8ef53a5c-ad4e-fadd-b460-18b3e589ead9__49440.7776081518$1545903487$gmane$org@redhat.com> References: <20181213101022.12475-1-jasowang@redhat.com> <20181213101022.12475-4-jasowang@redhat.com> <20181213102713-mutt-send-email-mst@kernel.org> <20181214073332-mutt-send-email-mst@kernel.org> <2ea274df-a79a-250f-648f-12927529d78a@redhat.com> <20181224125237-mutt-send-email-mst@kernel.org> <20181225071501-mutt-send-email-mst@kernel.org> <70978ed8-bf76-693a-0e11-d31b6234af5c@redhat.com> <20181226092431-mutt-send-email-mst@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181226092431-mutt-send-email-mst@kernel.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: "Michael S. Tsirkin" Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, virtualization@lists.linux-foundation.org List-Id: virtualization@lists.linuxfoundation.org Ck9uIDIwMTgvMTIvMjYg5LiL5Y2IMTE6MDIsIE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90ZToKPiBP biBXZWQsIERlYyAyNiwgMjAxOCBhdCAxMTo1NzozMkFNICswODAwLCBKYXNvbiBXYW5nIHdyb3Rl Ogo+PiBPbiAyMDE4LzEyLzI1IOS4i+WNiDg6NTAsIE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90ZToK Pj4+IE9uIFR1ZSwgRGVjIDI1LCAyMDE4IGF0IDA2OjA1OjI1UE0gKzA4MDAsIEphc29uIFdhbmcg d3JvdGU6Cj4+Pj4gT24gMjAxOC8xMi8yNSDkuIrljYgyOjEwLCBNaWNoYWVsIFMuIFRzaXJraW4g d3JvdGU6Cj4+Pj4+IE9uIE1vbiwgRGVjIDI0LCAyMDE4IGF0IDAzOjUzOjE2UE0gKzA4MDAsIEph c29uIFdhbmcgd3JvdGU6Cj4+Pj4+PiBPbiAyMDE4LzEyLzE0IOS4i+WNiDg6MzYsIE1pY2hhZWwg Uy4gVHNpcmtpbiB3cm90ZToKPj4+Pj4+PiBPbiBGcmksIERlYyAxNCwgMjAxOCBhdCAxMTo1Nzoz NUFNICswODAwLCBKYXNvbiBXYW5nIHdyb3RlOgo+Pj4+Pj4+PiBPbiAyMDE4LzEyLzEzIOS4i+WN iDExOjQ0LCBNaWNoYWVsIFMuIFRzaXJraW4gd3JvdGU6Cj4+Pj4+Pj4+PiBPbiBUaHUsIERlYyAx MywgMjAxOCBhdCAwNjoxMDoyMlBNICswODAwLCBKYXNvbiBXYW5nIHdyb3RlOgo+Pj4+Pj4+Pj4+ IEl0IHdhcyBub3RpY2VkIHRoYXQgdGhlIGNvcHlfdXNlcigpIGZyaWVuZHMgdGhhdCB3YXMgdXNl ZCB0byBhY2Nlc3MKPj4+Pj4+Pj4+PiB2aXJ0cXVldWUgbWV0ZGF0YSB0ZW5kcyB0byBiZSB2ZXJ5 IGV4cGVuc2l2ZSBmb3IgZGF0YXBsYW5lCj4+Pj4+Pj4+Pj4gaW1wbGVtZW50YXRpb24gbGlrZSB2 aG9zdCBzaW5jZSBpdCBpbnZvbHZlcyBsb3RzIG9mIHNvZnR3YXJlIGNoZWNrLAo+Pj4+Pj4+Pj4+ IHNwZWN1bGF0aW9uIGJhcnJpZXIsIGhhcmR3YXJlIGZlYXR1cmUgdG9nZ2xpbmcgKGUuZyBTTUFQ KS4gVGhlCj4+Pj4+Pj4+Pj4gZXh0cmEgY29zdCB3aWxsIGJlIG1vcmUgb2J2aW91cyB3aGVuIHRy YW5zZmVycmluZyBzbWFsbCBwYWNrZXRzLgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gVGhpcyBwYXRj aCB0cmllcyB0byBlbGltaW5hdGUgdGhvc2Ugb3ZlcmhlYWQgYnkgcGluIHZxIG1ldGFkYXRhIHBh Z2VzCj4+Pj4+Pj4+Pj4gYW5kIGFjY2VzcyB0aGVtIHRocm91Z2ggdm1hcCgpLiBEdXJpbmcgU0VU X1ZSSU5HX0FERFIsIHdlIHdpbGwgc2V0dXAKPj4+Pj4+Pj4+PiB0aG9zZSBtYXBwaW5ncyBhbmQg bWVtb3J5IGFjY2Vzc29ycyBhcmUgbW9kaWZpZWQgdG8gdXNlIHBvaW50ZXJzIHRvCj4+Pj4+Pj4+ Pj4gYWNjZXNzIHRoZSBtZXRhZGF0YSBkaXJlY3RseS4KPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IE5v dGUsIHRoaXMgd2FzIG9ubHkgZG9uZSB3aGVuIGRldmljZSBJT1RMQiBpcyBub3QgZW5hYmxlZC4g V2UgY291bGQKPj4+Pj4+Pj4+PiB1c2Ugc2ltaWxhciBtZXRob2QgdG8gb3B0aW1pemUgaXQgaW4g dGhlIGZ1dHVyZS4KPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IFRlc3RzIHNob3dzIGFib3V0IH4yNCUg aW1wcm92ZW1lbnQgb24gVFggUFBTIHdoZW4gdXNpbmcgdmlydGlvLXVzZXIgKwo+Pj4+Pj4+Pj4+ IHZob3N0X25ldCArIHhkcDEgb24gVEFQIChDT05GSUdfSEFSREVORURfVVNFUkNPUFkgaXMgbm90 IGVuYWJsZWQpOgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gQmVmb3JlOiB+NS4wTXBwcwo+Pj4+Pj4+ Pj4+IEFmdGVyOiAgfjYuMU1wcHMKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6 IEphc29uIFdhbmc8amFzb3dhbmdAcmVkaGF0LmNvbT4KPj4+Pj4+Pj4+PiAtLS0KPj4+Pj4+Pj4+ PiAgICAgICBkcml2ZXJzL3Zob3N0L3Zob3N0LmMgfCAxNzggKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4+Pj4+Pj4+Pj4gICAgICAgZHJpdmVycy92aG9zdC92aG9z dC5oIHwgIDExICsrKwo+Pj4+Pj4+Pj4+ICAgICAgIDIgZmlsZXMgY2hhbmdlZCwgMTg5IGluc2Vy dGlvbnMoKykKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0 L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKPj4+Pj4+Pj4+PiBpbmRleCBiYWZlMzlk MmU2MzcuLjFiZDI0MjAzYWZiNiAxMDA2NDQKPj4+Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL3Zob3N0 L3Zob3N0LmMKPj4+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKPj4+Pj4+Pj4+ PiBAQCAtNDQzLDYgKzQ0Myw5IEBAIHZvaWQgdmhvc3RfZGV2X2luaXQoc3RydWN0IHZob3N0X2Rl diAqZGV2LAo+Pj4+Pj4+Pj4+ICAgICAgIAkJdnEtPmluZGlyZWN0ID0gTlVMTDsKPj4+Pj4+Pj4+ PiAgICAgICAJCXZxLT5oZWFkcyA9IE5VTEw7Cj4+Pj4+Pj4+Pj4gICAgICAgCQl2cS0+ZGV2ID0g ZGV2Owo+Pj4+Pj4+Pj4+ICsJCW1lbXNldCgmdnEtPmF2YWlsX3JpbmcsIDAsIHNpemVvZih2cS0+ YXZhaWxfcmluZykpOwo+Pj4+Pj4+Pj4+ICsJCW1lbXNldCgmdnEtPnVzZWRfcmluZywgMCwgc2l6 ZW9mKHZxLT51c2VkX3JpbmcpKTsKPj4+Pj4+Pj4+PiArCQltZW1zZXQoJnZxLT5kZXNjX3Jpbmcs IDAsIHNpemVvZih2cS0+ZGVzY19yaW5nKSk7Cj4+Pj4+Pj4+Pj4gICAgICAgCQltdXRleF9pbml0 KCZ2cS0+bXV0ZXgpOwo+Pj4+Pj4+Pj4+ICAgICAgIAkJdmhvc3RfdnFfcmVzZXQoZGV2LCB2cSk7 Cj4+Pj4+Pj4+Pj4gICAgICAgCQlpZiAodnEtPmhhbmRsZV9raWNrKQo+Pj4+Pj4+Pj4+IEBAIC02 MTQsNiArNjE3LDEwMiBAQCBzdGF0aWMgdm9pZCB2aG9zdF9jbGVhcl9tc2coc3RydWN0IHZob3N0 X2RldiAqZGV2KQo+Pj4+Pj4+Pj4+ICAgICAgIAlzcGluX3VubG9jaygmZGV2LT5pb3RsYl9sb2Nr KTsKPj4+Pj4+Pj4+PiAgICAgICB9Cj4+Pj4+Pj4+Pj4gK3N0YXRpYyBpbnQgdmhvc3RfaW5pdF92 bWFwKHN0cnVjdCB2aG9zdF92bWFwICptYXAsIHVuc2lnbmVkIGxvbmcgdWFkZHIsCj4+Pj4+Pj4+ Pj4gKwkJCSAgIHNpemVfdCBzaXplLCBpbnQgd3JpdGUpCj4+Pj4+Pj4+Pj4gK3sKPj4+Pj4+Pj4+ PiArCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4+Pj4+Pj4+Pj4gKwlpbnQgbnBhZ2VzID0gRElWX1JP VU5EX1VQKHNpemUsIFBBR0VfU0laRSk7Cj4+Pj4+Pj4+Pj4gKwlpbnQgbnBpbm5lZDsKPj4+Pj4+ Pj4+PiArCXZvaWQgKnZhZGRyOwo+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+PiArCXBhZ2VzID0ga21h bGxvY19hcnJheShucGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7Cj4+ Pj4+Pj4+Pj4gKwlpZiAoIXBhZ2VzKQo+Pj4+Pj4+Pj4+ICsJCXJldHVybiAtRU5PTUVNOwo+Pj4+ Pj4+Pj4+ICsKPj4+Pj4+Pj4+PiArCW5waW5uZWQgPSBnZXRfdXNlcl9wYWdlc19mYXN0KHVhZGRy LCBucGFnZXMsIHdyaXRlLCBwYWdlcyk7Cj4+Pj4+Pj4+Pj4gKwlpZiAobnBpbm5lZCAhPSBucGFn ZXMpCj4+Pj4+Pj4+Pj4gKwkJZ290byBlcnI7Cj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4gQXMgSSBz YWlkIEkgaGF2ZSBkb3VidHMgYWJvdXQgdGhlIHdob2xlIGFwcHJvYWNoLCBidXQgdGhpcwo+Pj4+ Pj4+Pj4gaW1wbGVtZW50YXRpb24gaW4gcGFydGljdWxhciBpc24ndCBhIGdvb2QgaWRlYQo+Pj4+ Pj4+Pj4gYXMgaXQga2VlcHMgdGhlIHBhZ2UgYXJvdW5kIGZvcmV2ZXIuCj4+Pj4+PiBUaGUgcGFn ZXMgd2lsIGJlIHJlbGVhc2VkIGR1cmluZyBzZXQgZmVhdHVyZXMuCj4+Pj4+Pgo+Pj4+Pj4KPj4+ Pj4+Pj4+IFNvIG5vIFRIUCwgbm8gTlVNQSByZWJhbGFuY2luZywKPj4+Pj4+IEZvciBUSFAsIHdl IHdpbGwgcHJvYmFibHkgbWlzcyAyIG9yIDQgcGFnZXMsIGJ1dCBkb2VzIHRoaXMgcmVhbGx5IG1h dHRlcgo+Pj4+Pj4gY29uc2lkZXIgdGhlIGdhaW4gd2UgaGF2ZT8KPj4+Pj4gV2UgYXMgaW4gdmhv c3Q/IG5ldHdvcmtpbmcgaXNuJ3QgdGhlIG9ubHkgdGhpbmcgZ3Vlc3QgZG9lcy4KPj4+Pj4gV2Ug ZG9uJ3QgZXZlbiBrbm93IGlmIHRoaXMgZ3Vlc3QgZG9lcyBhIGxvdCBvZiBuZXR3b3JraW5nLgo+ Pj4+PiBZb3UgZG9uJ3QKPj4+Pj4ga25vdyB3aGF0IGVsc2UgaXMgaW4gdGhpcyBodWdlIHBhZ2Uu IENhbiBiZSBzb21ldGhpbmcgdmVyeSBpbXBvcnRhbnQKPj4+Pj4gdGhhdCBndWVzdCB0b3VjaGVz IGFsbCB0aGUgdGltZS4KPj4+PiBXZWxsLCB0aGUgcHJvYmFiaWxpdHkgc2hvdWxkIGJlIHZlcnkg c21hbGwgY29uc2lkZXIgd2UgdXN1YWxseSBnaXZlIHNldmVyYWwKPj4+PiBnaWdhYnl0ZXMgdG8g Z3Vlc3QuIFRoZSByZXN0IG9mIHRoZSBwYWdlcyB0aGF0IGRvZXNuJ3Qgc2l0IGluIHRoZSBzYW1l Cj4+Pj4gaHVnZXBhZ2Ugd2l0aCBtZXRhZGF0YSBjYW4gc3RpbGwgYmUgbWVyZ2VkIGJ5IFRIUC7C oCBBbnl3YXksIEkgY2FuIHRlc3QgdGhlCj4+Pj4gZGlmZmVyZW5jZXMuCj4+PiBUaGFua3MhCj4+ Pgo+Pj4+Pj4gRm9yIE5VTUEgcmViYWxhbmNpbmcsIEknbSBldmVuIG5vdCBxdWl0ZSBzdXJlIGlm Cj4+Pj4+PiBpdCBjYW4gaGVscHMgZm9yIHRoZSBjYXNlIG9mIElQQyAodmhvc3QpLiBJdCBsb29r cyB0byBtZSB0aGUgd29yc3QgY2FzZSBpdAo+Pj4+Pj4gbWF5IGNhdXNlIHBhZ2UgdG8gYmUgdGhy YXNoIGJldHdlZW4gbm9kZXMgaWYgdmhvc3QgYW5kIHVzZXJzcGFjZSBhcmUgcnVubmluZwo+Pj4+ Pj4gaW4gdHdvIG5vZGVzLgo+Pj4+PiBTbyBhZ2FpbiBpdCdzIGEgZ2FpbiBmb3Igdmhvc3QgYnV0 IGhhcyBhIGNvbXBsZXRlbHkgdW5wcmVkaWN0YWJsZSBlZmZlY3Qgb24KPj4+Pj4gb3RoZXIgZnVu Y3Rpb25hbGl0eSBvZiB0aGUgZ3Vlc3QuCj4+Pj4+Cj4+Pj4+IFRoYXQncyB3aGF0IGJvdGhlcnMg bWUgd2l0aCB0aGlzIGFwcHJvYWNoLgo+Pj4+IFNvOgo+Pj4+Cj4+Pj4gLSBUaGUgcmVzdCBvZiB0 aGUgcGFnZXMgY291bGQgc3RpbGwgYmUgYmFsYW5jZWQgdG8gb3RoZXIgbm9kZXMsIG5vPwo+Pj4+ Cj4+Pj4gLSB0cnkgdG8gYmFsYW5jZSBtZXRhZGF0YSBwYWdlcyAoYmVsb25ncyB0byBjby1vcGVy YXRlIHByb2Nlc3NlcykgaXRzZWxmIGlzCj4+Pj4gc3RpbGwgcXVlc3Rpb25hYmxlCj4+PiBJIGFt IG5vdCBzdXJlIHdoeS4gSXQgc2hvdWxkIGJlIGVhc3kgZW5vdWdoIHRvIGZvcmNlIHRoZSBWQ1BV IGFuZCB2aG9zdAo+Pj4gdG8gbW92ZSAoZS5nLiBzdGFydCB0aGVtIHBpbm5lZCB0byAxIGNwdSwg dGhlbiBwaW4gdGhlbSB0byBhbm90aGVyIG9uZSkuCj4+PiBDbGVhcmx5IHNvbWV0aW1lcyB0aGlz IHdvdWxkIGJlIG5lY2Vzc2FyeSBmb3IgbG9hZCBiYWxhbmNpbmcgcmVhc29ucy4KPj4KPj4gWWVz LCBidXQgaXQgbG9va3MgdG8gbWUgdGhlIHBhcnQgb2YgbW90aXZhdGlvbiBvZiBhdXRvIE5VTUEg aXMgdG8gYXZvaWQKPj4gbWFudWFsIHBpbm5pbmcuCj4gLi4uIG9mIG1lbW9yeS4gWWVzLgo+Cj4K Pj4+IFdpdGggYXV0b251bWEgYWZ0ZXIgYSB3aGlsZSAoY291bGQgdGFrZSBzZWNvbmRzIGJ1dCBp dCB3aWxsIGhhcHBlbikgdGhlCj4+PiBtZW1vcnkgd2lsbCBtaWdyYXRlLgo+Pj4KPj4gWWVzLiBB cyB5b3UgbWVudGlvbmVkIGR1cmluZyB0aGUgZGlzY3VzcywgSSB3b25kZXIgd2UgY291bGQgZG8g aXQgc2ltaWxhcmx5Cj4+IHRocm91Z2ggbW11IG5vdGlmaWVyIGxpa2UgQVBJQyBhY2Nlc3MgcGFn ZSBpbiBjb21taXQgYzI0YWUwZGNkM2UgKCJrdm06IHg4NjoKPj4gVW5waW4gYW5kIHJlbW92ZSBr dm1fYXJjaC0+YXBpY19hY2Nlc3NfcGFnZSIpCj4gVGhhdCB3b3VsZCBiZSBhIHBvc3NpYmxlIGFw cHJvYWNoLgoKClllcywgdGhpcyBsb29rcyBwb3NzaWJsZSwgYW5kIHRoZSBjb252ZXJzaW9uIHNl ZW1zIG5vdCBoYXJkLiBMZXQgbWUgaGF2ZSAKYSB0cnkgd2l0aCB0aGlzLgoKClsuLi5dCgoKPj4+ Pj4+PiBJIGRvbid0IHNlZSBob3cgYSBrdGhyZWFkIG1ha2VzIGFueSBkaWZmZXJlbmNlLiBXZSBk byBoYXZlIGEgdmFsaWRhdGlvbgo+Pj4+Pj4+IHN0ZXAgd2hpY2ggbWFrZXMgc29tZSBkaWZmZXJl bmNlLgo+Pj4+Pj4gVGhlIHByb2JsZW0gaXMgbm90IGt0aHJlYWQgYnV0IHRoZSBhZGRyZXNzIG9m IHVzZXJzcGFjZSBhZGRyZXNzLiBUaGUKPj4+Pj4+IGFkZHJlc3NlcyBvZiB2cSBtZXRhZGF0YSB0 ZW5kcyB0byBiZSBjb25zaXN0ZW50IGZvciBhIHdoaWxlLCBhbmQgdmhvc3Qga25vd3MKPj4+Pj4+ IHRoZXkgd2lsbCBiZSBmcmVxdWVudGx5LiBTTUFQIGRvZXNuJ3QgaGVscCB0b28gbXVjaCBpbiB0 aGlzIGNhc2UuCj4+Pj4+Pgo+Pj4+Pj4gVGhhbmtzLgo+Pj4+PiBJdCdzIHRydWUgZm9yIGEgcmVh bCBsaWZlIGFwcGxpY2F0aW9ucyBidXQgYSBtYWxpY2lvdXMgb25lCj4+Pj4+IGNhbiBjYWxsIHRo ZSBzZXR1cCBpb2N0bHMgYW55IG51bWJlciBvZiB0aW1lcy4gQW5kIFNNQVAgaXMKPj4+Pj4gYWxs IGFib3V0IG1hbGNpb3VzIGFwcGxpY2F0aW9ucy4KPj4+PiBXZSBkb24ndCBkbyB0aGlzIGluIHRo ZSBwYXRoIG9mIGlvY3RsLCB0aGVyZSdzIG5vIGNvbnRleHQgc3dpdGNoIGJldHdlZW4KPj4+PiB1 c2Vyc3BhY2UgYW5kIGtlcm5lbCBpbiB0aGUgd29ya2VyIHRocmVhZC4gU01BUCBpcyB1c2VkIHRv IHByZXZlbnQga2VybmVsCj4+Pj4gZnJvbSBhY2Nlc3NpbmcgdXNlcnNwYWNlIHBhZ2VzIHVuZXhw ZWN0ZWRseSB3aGljaCBpcyBub3QgdGhlIGNhc2UgZm9yCj4+Pj4gbWV0YWRhdGEgYWNjZXNzLgo+ Pj4+Cj4+Pj4gVGhhbmtzCj4+PiBPSyBsZXQncyBmb3JnZXQgc21hcCBmb3Igbm93Lgo+Pgo+PiBT b21lIG51bWJlcnMgSSBtZWFzdXJlZDoKPj4KPj4gT24gYW4gb2xkIFNhbmR5IGJyaWRnZSBtYWNo aW5lIHdpdGhvdXQgU01BUCBzdXBwb3J0LiBSZW1vdmUgc3BlY3VsYXRpb24KPj4gYmFycmllciBi b29zdCB0aGUgcGVyZm9ybWFuY2UgZnJvbSA0LjZNcHBzIHRvIDUuMU1wcHMKPj4KPj4gT24gYSBu ZXdlciBCcm9hZHdlbGwgbWFjaGluZSB3aXRoIFNNQVAgc3VwcG9ydC4gUmVtb3ZlIHNwZWN1bGF0 aW9uIGJhcnJpZXIKPj4gb25seSBnaXZlcyAyJS01JSBpbXByb3ZlbWVudCwgZGlzYWJsZSBTTUFQ IGNvbXBsZXRlbHkgdGhyb3VnaCBLY29uZmlnIGJvb3N0Cj4+IDU3JSBwZXJmb3JtYW5jZSBmcm9t IDQuOE1wcHMgdG8gNy41TXBwcy4gKFZtYXAgZ2l2ZXMgNk1wcHMgLSA2LjFNcHBzLCBpdAo+PiBv bmx5IGJ5cGFzcyBTTUFQIGZvciBtZXRhZGF0YSkuCj4+Cj4+IFNvIGl0IGxvb2tzIGxpa2UgZm9y IHJlY2VudCBtYWNoaW5lLCBTTUFQIGJlY29tZXMgcGFpbiBwb2ludCB3aGVuIHRoZSBjb3B5Cj4+ IGlzIHNob3J0IChlLmcgNjRCKSBmb3IgaGlnaCBQUFMuCj4+Cj4+IFRoYW5rcwo+IFRoYW5rcyBh IGxvdCBmb3IgbG9va2luZyBpbnRvIHRoaXMhCj4KPiBTbyBmaXJzdCBvZiBhbGwgdXNlcnMgY2Fu IGp1c3QgYm9vdCB3aXRoIG5vc21hcCwgcmlnaHQ/Cj4gV2hhdCdzIHdyb25nIHdpdGggdGhhdD8K CgpOb3RoaW5nIHdyb25nLCBqdXN0IHJlYWxpemUgd2UgaGFkIHRoaXMga2VybmVsIHBhcmFtZXRl ci4KCgo+ICAgWWVzIGl0J3Mgbm90IGZpbmUtZ3JhaW5lZCBidXQgT1RPSAo+IGl0J3MgZWFzeSB0 byB1bmRlcnN0YW5kLgo+Cj4gQW5kIEkgZ3Vlc3MgdGhpcyBjb25maXJtcyB0aGF0IGlmIHdlIGFy ZSBnb2luZyB0byB3b3JyeQo+IGFib3V0IHNtYXAgZW5hYmxlZCwgd2UgbmVlZCB0byBsb29rIGlu dG8gcGFja2V0IGNvcGllcwo+IHRvbywgbm90IGp1c3QgbWV0YS1kYXRhLgoKCkZvciBwYWNrZXQg Y29waWVzLCB3ZSBjYW4gZG8gYmF0Y2ggY29weSB3aGljaCBpcyBwcmV0dHkgc2ltcGxlIGZvciB0 aGUgCmNhc2Ugb2YgWERQLiBJJ3ZlIGFscmVhZHkgaGFkIHBhdGNoZXMgZm9yIHRoaXMuCgoKPgo+ IFZhZ3VlbHkgY291bGQgc2VlIGEgbW9kdWxlIG9wdGlvbiAob2ZmIGJ5IGRlZmF1bHQpCj4gd2hl cmUgdmhvc3QgYmFzaWNhbGx5IGRvZXMgdXNlcl9hY2Nlc3NfYmVnaW4KPiB3aGVuIGl0IHN0YXJ0 cyBydW5uaW5nLCB0aGVuIHVzZXMgdW5zYWZlIGFjY2Vzc2VzCj4gaW4gdmhvc3QgYW5kIHR1biBh bmQgdGhlbiB1c2VyX2FjY2Vzc19lbmQuCgoKVXNpbmcgdXNlcl9hY2Nlc3NfYmVnaW4oKSBpcyBt b3JlIHRyaWNreSB0aGFuIGltYWdlZC4gRS5nIGl0IHJlcXVpcmVzOgoKLSB1c2Vyc3BhY2UgYWRk cmVzcyB0byBiZSB2YWxpZGF0ZWQgYmVmb3JlIHRocm91Z2ggYWNjZXNzX29rKCkgWzFdCgotIEl0 IGRvZXNuJ3Qgc3VwcG9ydCBjYWxsaW5nIGEgZnVuY3Rpb24gdGhhdCBkb2VzIGV4cGxpY2l0IHNj aGVkdWxlIApzaW5jZSBTTUFQL1BBTiBzdGF0ZSBpcyBub3QgbWFpbnRhaW5lZCB0aHJvdWdoIHNj aGVkdWxlKCkgWzJdCgpbMV0gaHR0cHM6Ly9sd24ubmV0L0FydGljbGVzLzczNjM0OC8KClsyXSBo dHRwczovL2xrbWwub3JnL2xrbWwvMjAxOC8xMS8yMy80MzAKClNvIGNhbGxpbmcgdXNlcl9hY2Nl c3NfYmVnaW4oKSBhbGwgdGhlIHRpbWUgd2hlbiB2aG9zdCBpcyBydW5uaW5nIHNlZW1zIApwcmV0 dHkgZGFuZ2Vyb3VzLgoKRm9yIGEgYmV0dGVyIGJhdGNoZWQgZGF0YWNvcHksIEkgdGVuZCB0byBi dWlsZCBub3Qgb25seSBYRFAgYnV0IGFsc28gc2tiIAppbiB2aG9zdCBpbiB0aGUgZnV0dXJlLgoK VGhhbmtzCgoKPgo+Cj4+Pj4+Pj4+IFBhY2tldCBvciBBRl9YRFAgYmVuZWZpdCBmcm9tCj4+Pj4+ Pj4+IGFjY2Vzc2luZyBtZXRhZGF0YSBkaXJlY3RseSwgd2Ugc2hvdWxkIGRvIGl0IGFzIHdlbGwu Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFRoYW5rcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBtYWlsaW5nIGxpc3QKVmlydHVhbGl6YXRp b25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRp b24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6YXRpb24=