From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tiwei Bie Subject: Re: [RFC v2] virtio: support packed ring Date: Tue, 24 Apr 2018 09:49:21 +0800 Message-ID: <20180424014921.2zwfo3pucjbmx2o4@debian> References: <20180401141216.8969-1-tiwei.bie@intel.com> <515e635b-bc80-9b8d-72f9-b390ae5103ec@redhat.com> <20180423092908.77rii3gi7dcaf7o6@debian> <20180424040258-mutt-send-email-mst@kernel.org> <20180424011638.vf6f22dnl7ufnnij@debian> <20180424042913-mutt-send-email-mst@kernel.org> <20180424013747.hmr4ytqe7gdqfhdt@debian> <20180424044250-mutt-send-email-mst@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, wexu@redhat.com To: "Michael S. Tsirkin" Return-path: Content-Disposition: inline In-Reply-To: <20180424044250-mutt-send-email-mst@kernel.org> 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 List-Id: netdev.vger.kernel.org T24gVHVlLCBBcHIgMjQsIDIwMTggYXQgMDQ6NDM6MjJBTSArMDMwMCwgTWljaGFlbCBTLiBUc2ly a2luIHdyb3RlOgo+IE9uIFR1ZSwgQXByIDI0LCAyMDE4IGF0IDA5OjM3OjQ3QU0gKzA4MDAsIFRp d2VpIEJpZSB3cm90ZToKPiA+IE9uIFR1ZSwgQXByIDI0LCAyMDE4IGF0IDA0OjI5OjUxQU0gKzAz MDAsIE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90ZToKPiA+ID4gT24gVHVlLCBBcHIgMjQsIDIwMTgg YXQgMDk6MTY6MzhBTSArMDgwMCwgVGl3ZWkgQmllIHdyb3RlOgo+ID4gPiA+IE9uIFR1ZSwgQXBy IDI0LCAyMDE4IGF0IDA0OjA1OjA3QU0gKzAzMDAsIE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90ZToK PiA+ID4gPiA+IE9uIFR1ZSwgQXByIDI0LCAyMDE4IGF0IDA4OjU0OjUyQU0gKzA4MDAsIEphc29u IFdhbmcgd3JvdGU6Cj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gT24gMjAx OOW5tDA05pyIMjPml6UgMTc6MjksIFRpd2VpIEJpZSB3cm90ZToKPiA+ID4gPiA+ID4gPiBPbiBN b24sIEFwciAyMywgMjAxOCBhdCAwMTo0MjoxNFBNICswODAwLCBKYXNvbiBXYW5nIHdyb3RlOgo+ ID4gPiA+ID4gPiA+ID4gT24gMjAxOOW5tDA05pyIMDHml6UgMjI6MTIsIFRpd2VpIEJpZSB3cm90 ZToKPiA+ID4gPiA+ID4gPiA+ID4gSGVsbG8gZXZlcnlvbmUsCj4gPiA+ID4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiA+ID4gPiBUaGlzIFJGQyBpbXBsZW1lbnRzIHBhY2tlZCByaW5nIHN1cHBvcnQg Zm9yIHZpcnRpbyBkcml2ZXIuCj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiBU aGUgY29kZSB3YXMgdGVzdGVkIHdpdGggRFBESyB2aG9zdCAodGVzdHBtZC92aG9zdC1QTUQpIGlt cGxlbWVudGVkCj4gPiA+ID4gPiA+ID4gPiA+IGJ5IEplbnMgYXQgaHR0cDovL2RwZGsub3JnL21s L2FyY2hpdmVzL2Rldi8yMDE4LUphbnVhcnkvMDg5NDE3Lmh0bWwKPiA+ID4gPiA+ID4gPiA+ID4g TWlub3IgY2hhbmdlcyBhcmUgbmVlZGVkIGZvciB0aGUgdmhvc3QgY29kZSwgZS5nLiB0byBraWNr IHRoZSBndWVzdC4KPiA+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+IFRPRE86Cj4g PiA+ID4gPiA+ID4gPiA+IC0gUmVmaW5lbWVudHMgYW5kIGJ1ZyBmaXhlczsKPiA+ID4gPiA+ID4g PiA+ID4gLSBTcGxpdCBpbnRvIHNtYWxsIHBhdGNoZXM7Cj4gPiA+ID4gPiA+ID4gPiA+IC0gVGVz dCBpbmRpcmVjdCBkZXNjcmlwdG9yIHN1cHBvcnQ7Cj4gPiA+ID4gPiA+ID4gPiA+IC0gVGVzdC9m aXggZXZlbnQgc3VwcHJlc3Npb24gc3VwcG9ydDsKPiA+ID4gPiA+ID4gPiA+ID4gLSBUZXN0IGRl dmljZXMgb3RoZXIgdGhhbiBuZXQ7Cj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4g PiBSRkMgdjEgLT4gUkZDIHYyOgo+ID4gPiA+ID4gPiA+ID4gPiAtIEFkZCBpbmRpcmVjdCBkZXNj cmlwdG9yIHN1cHBvcnQgLSBjb21waWxlIHRlc3Qgb25seTsKPiA+ID4gPiA+ID4gPiA+ID4gLSBB ZGQgZXZlbnQgc3VwcHJlc3Npb24gc3VwcHJ0IC0gY29tcGlsZSB0ZXN0IG9ubHk7Cj4gPiA+ID4g PiA+ID4gPiA+IC0gTW92ZSB2cmluZ19wYWNrZWRfaW5pdCgpIG91dCBvZiB1YXBpIChKYXNvbiwg TVNUKTsKPiA+ID4gPiA+ID4gPiA+ID4gLSBNZXJnZSB0d28gbG9vcHMgaW50byBvbmUgaW4gdmly dHF1ZXVlX2FkZF9wYWNrZWQoKSAoSmFzb24pOwo+ID4gPiA+ID4gPiA+ID4gPiAtIFNwbGl0IHZy aW5nX3VubWFwX29uZSgpIGZvciBwYWNrZWQgcmluZyBhbmQgc3BsaXQgcmluZyAoSmFzb24pOwo+ ID4gPiA+ID4gPiA+ID4gPiAtIEF2b2lkIHVzaW5nICclJyBvcGVyYXRvciAoSmFzb24pOwo+ID4g PiA+ID4gPiA+ID4gPiAtIFJlbmFtZSBmcmVlX2hlYWQgLT4gbmV4dF9hdmFpbF9pZHggKEphc29u KTsKPiA+ID4gPiA+ID4gPiA+ID4gLSBBZGQgY29tbWVudHMgZm9yIHZpcnRpb193bWIoKSBpbiB2 aXJ0cXVldWVfYWRkX3BhY2tlZCgpIChKYXNvbik7Cj4gPiA+ID4gPiA+ID4gPiA+IC0gU29tZSBv dGhlciByZWZpbmVtZW50cyBhbmQgYnVnIGZpeGVzOwo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gPiA+ID4gVGhhbmtzIQo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4g U2lnbmVkLW9mZi1ieTogVGl3ZWkgQmllIDx0aXdlaS5iaWVAaW50ZWwuY29tPgo+ID4gPiA+ID4g PiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gPiA+ID4gICAgZHJpdmVycy92aXJ0aW8vdmlydGlvX3Jp bmcuYyAgICAgICB8IDEwOTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCj4g PiA+ID4gPiA+ID4gPiA+ICAgIGluY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaCAgICAgICAgfCAg ICA4ICstCj4gPiA+ID4gPiA+ID4gPiA+ICAgIGluY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fY29u ZmlnLmggfCAgIDEyICstCj4gPiA+ID4gPiA+ID4gPiA+ICAgIGluY2x1ZGUvdWFwaS9saW51eC92 aXJ0aW9fcmluZy5oICAgfCAgIDYxICsrCj4gPiA+ID4gPiA+ID4gPiA+ICAgIDQgZmlsZXMgY2hh bmdlZCwgOTgwIGluc2VydGlvbnMoKyksIDE5NSBkZWxldGlvbnMoLSkKPiA+ID4gPiA+ID4gPiA+ ID4gCj4gPiA+ID4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9f cmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwo+ID4gPiA+ID4gPiA+ID4gPiBp bmRleCA3MTQ1OGY0OTNjZjguLjA1MTVkY2EzNGQ3NyAxMDA2NDQKPiA+ID4gPiA+ID4gPiA+ID4g LS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwo+ID4gPiA+ID4gPiA+ID4gPiArKysg Yi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCj4gPiA+ID4gPiA+ID4gPiA+IEBAIC01OCwx NCArNTgsMTUgQEAKPiA+ID4gPiA+ID4gPiA+IFsuLi5dCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiA+ID4gPiArCWlmICh2cS0+aW5kaXJlY3QpIHsKPiA+ ID4gPiA+ID4gPiA+ID4gKwkJdTMyIGxlbjsKPiA+ID4gPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiA+ID4gPiArCQlkZXNjID0gdnEtPmRlc2Nfc3RhdGVbaGVhZF0uaW5kaXJfZGVzYzsKPiA+ID4g PiA+ID4gPiA+ID4gKwkJLyogRnJlZSB0aGUgaW5kaXJlY3QgdGFibGUsIGlmIGFueSwgbm93IHRo YXQgaXQncyB1bm1hcHBlZC4gKi8KPiA+ID4gPiA+ID4gPiA+ID4gKwkJaWYgKCFkZXNjKQo+ID4g PiA+ID4gPiA+ID4gPiArCQkJZ290byBvdXQ7Cj4gPiA+ID4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ ID4gPiA+ID4gKwkJbGVuID0gdmlydGlvMzJfdG9fY3B1KHZxLT52cS52ZGV2LAo+ID4gPiA+ID4g PiA+ID4gPiArCQkJCSAgICAgIHZxLT52cmluZ19wYWNrZWQuZGVzY1toZWFkXS5sZW4pOwo+ID4g PiA+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ID4gPiA+ICsJCUJVR19PTighKHZxLT52cmluZ19w YWNrZWQuZGVzY1toZWFkXS5mbGFncyAmCj4gPiA+ID4gPiA+ID4gPiA+ICsJCQkgY3B1X3RvX3Zp cnRpbzE2KHZxLT52cS52ZGV2LCBWUklOR19ERVNDX0ZfSU5ESVJFQ1QpKSk7Cj4gPiA+ID4gPiA+ ID4gPiBJdCBsb29rcyB0byBtZSBzcGVjIGRvZXMgbm90IGZvcmNlIHRvIGtlZXAgVlJJTkdfREVT Q19GX0lORElSRUNUIGhlcmUuIFNvIHdlCj4gPiA+ID4gPiA+ID4gPiBjYW4gc2FmZWx5IHJlbW92 ZSB0aGlzIEJVR19PTigpIGhlcmUuCj4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4g KwkJQlVHX09OKGxlbiA9PSAwIHx8IGxlbiAlIHNpemVvZihzdHJ1Y3QgdnJpbmdfcGFja2VkX2Rl c2MpKTsKPiA+ID4gPiA+ID4gPiA+IExlbiBjb3VsZCBiZSBpZ25vcmVkIGZvciB1c2VkIGRlc2Ny aXB0b3IgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzbyB3ZSBuZWVkCj4gPiA+ID4gPiA+ID4gPiBy ZW1vdmUgdGhpcyBCVUdfT04oKSB0b28uCj4gPiA+ID4gPiA+ID4gWWVhaCwgeW91J3JlIHJpZ2h0 ISBUaGUgQlVHX09OKCkgaXNuJ3QgcmlnaHQuIEknbGwgcmVtb3ZlIGl0Lgo+ID4gPiA+ID4gPiA+ IEFuZCBJIHRoaW5rIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMgaW4gdGhlIHNwZWMgaXNuJ3Qg dmVyeQo+ID4gPiA+ID4gPiA+IGNsZWFyIGN1cnJlbnRseS4KPiA+ID4gPiA+ID4gPiAKPiA+ID4g PiA+ID4gPiBJbiB0aGUgc3BlYywgdGhlcmUgYXJlIGJlbG93IHdvcmRzOgo+ID4gPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiA+IGh0dHBzOi8vZ2l0aHViLmNvbS9vYXNpcy10Y3MvdmlydGlvLXNwZWMv YmxvYi9kNGZlYzUxN2RmY2YvcGFja2VkLXJpbmcudGV4I0wyNzIKPiA+ID4gPiA+ID4gPiAiIiIK PiA+ID4gPiA+ID4gPiBJbiBkZXNjcmlwdG9ycyB3aXRoIFZJUlRRX0RFU0NfRl9JTkRJUkVDVCBz ZXQgVklSVFFfREVTQ19GX1dSSVRFCj4gPiA+ID4gPiA+ID4gaXMgcmVzZXJ2ZWQgYW5kIGlzIGln bm9yZWQgYnkgdGhlIGRldmljZS4KPiA+ID4gPiA+ID4gPiAiIiIKPiA+ID4gPiA+ID4gPiAKPiA+ ID4gPiA+ID4gPiBTbyB3aGVuIGRldmljZSB3cml0ZXMgYmFjayBhbiB1c2VkIGRlc2NyaXB0b3Ig aW4gdGhpcyBjYXNlLAo+ID4gPiA+ID4gPiA+IGRldmljZSBtYXkgbm90IHNldCB0aGUgVklSVFFf REVTQ19GX1dSSVRFIGZsYWcgYXMgdGhlIGZsYWcKPiA+ID4gPiA+ID4gPiBpcyByZXNlcnZlZCBh bmQgc2hvdWxkIGJlIGlnbm9yZWQuCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gaHR0cHM6 Ly9naXRodWIuY29tL29hc2lzLXRjcy92aXJ0aW8tc3BlYy9ibG9iL2Q0ZmVjNTE3ZGZjZi9wYWNr ZWQtcmluZy50ZXgjTDE3MAo+ID4gPiA+ID4gPiA+ICIiIgo+ID4gPiA+ID4gPiA+IEVsZW1lbnQg TGVuZ3RoIGlzIHJlc2VydmVkIGZvciB1c2VkIGRlc2NyaXB0b3JzIHdpdGhvdXQgdGhlCj4gPiA+ ID4gPiA+ID4gVklSVFFfREVTQ19GX1dSSVRFIGZsYWcsIGFuZCBpcyBpZ25vcmVkIGJ5IGRyaXZl cnMuCj4gPiA+ID4gPiA+ID4gIiIiCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gQW5kIHRo aXMgaXMgdGhlIHdheSBob3cgZHJpdmVyIGlnbm9yZXMgdGhlIGBsZW5gIGluIGFuIHVzZWQKPiA+ ID4gPiA+ID4gPiBkZXNjcmlwdG9yLgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IGh0dHBz Oi8vZ2l0aHViLmNvbS9vYXNpcy10Y3MvdmlydGlvLXNwZWMvYmxvYi9kNGZlYzUxN2RmY2YvcGFj a2VkLXJpbmcudGV4I0wyNDEKPiA+ID4gPiA+ID4gPiAiIiIKPiA+ID4gPiA+ID4gPiBUbyBpbmNy ZWFzZSByaW5nIGNhcGFjaXR5IHRoZSBkcml2ZXIgY2FuIHN0b3JlIGEgKHJlYWQtb25seQo+ID4g PiA+ID4gPiA+IGJ5IHRoZSBkZXZpY2UpIHRhYmxlIG9mIGluZGlyZWN0IGRlc2NyaXB0b3JzIGFu eXdoZXJlIGluIG1lbW9yeSwKPiA+ID4gPiA+ID4gPiBhbmQgaW5zZXJ0IGEgZGVzY3JpcHRvciBp biB0aGUgbWFpbiB2aXJ0cXVldWUgKHdpdGggXGZpZWxke0ZsYWdzfQo+ID4gPiA+ID4gPiA+IGJp dCBWSVJUUV9ERVNDX0ZfSU5ESVJFQ1Qgb24pIHRoYXQgcmVmZXJzIHRvIGEgYnVmZmVyIGVsZW1l bnQKPiA+ID4gPiA+ID4gPiBjb250YWluaW5nIHRoaXMgaW5kaXJlY3QgZGVzY3JpcHRvciB0YWJs ZTsKPiA+ID4gPiA+ID4gPiAiIiIKPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiBTbyB0aGUg aW5kaXJlY3QgZGVzY3JpcHRvcnMgaW4gdGhlIHRhYmxlIGFyZSByZWFkLW9ubHkgYnkKPiA+ID4g PiA+ID4gPiB0aGUgZGV2aWNlLiBBbmQgdGhlIG9ubHkgZGVzY3JpcHRvciB3aGljaCBpcyB3cml0 ZWFibGUgYnkKPiA+ID4gPiA+ID4gPiB0aGUgZGV2aWNlIGlzIHRoZSBkZXNjcmlwdG9yIGluIHRo ZSBtYWluIHZpcnRxdWV1ZSAod2l0aAo+ID4gPiA+ID4gPiA+IEZsYWdzIGJpdCBWSVJUUV9ERVND X0ZfSU5ESVJFQ1Qgb24pLiBTbyBpZiB3ZSBpZ25vcmUgdGhlCj4gPiA+ID4gPiA+ID4gYGxlbmAg aW4gdGhpcyBkZXNjcmlwdG9yLCB3ZSB3b24ndCBiZSBhYmxlIHRvIGdldCB0aGUKPiA+ID4gPiA+ ID4gPiBsZW5ndGggb2YgdGhlIGRhdGEgd3JpdHRlbiBieSB0aGUgZGV2aWNlLgo+ID4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiA+IFNvIEkgdGhpbmsgdGhlIGBsZW5gIGluIHRoaXMgZGVzY3JpcHRv ciB3aWxsIGNhcnJ5IHRoZQo+ID4gPiA+ID4gPiA+IGxlbmd0aCBvZiB0aGUgZGF0YSB3cml0dGVu IGJ5IHRoZSBkZXZpY2UgKGlmIHRoZSBidWZmZXJzCj4gPiA+ID4gPiA+ID4gYXJlIHdyaXRhYmxl IHRvIHRoZSBkZXZpY2UpIGV2ZW4gaWYgdGhlIFZJUlRRX0RFU0NfRl9XUklURQo+ID4gPiA+ID4g PiA+IGlzbid0IHNldCBieSB0aGUgZGV2aWNlLiBIb3cgZG8geW91IHRoaW5rPwo+ID4gPiA+ID4g PiAKPiA+ID4gPiA+ID4gWWVzIEkgdGhpbmsgc28uIEJ1dCB3ZSdkIGJldHRlciBuZWVkIGNsYXJp ZmljYXRpb24gZnJvbSBNaWNoYWVsLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBJIHRoaW5rIGlmIHlv dSB1c2UgYSBkZXNjcmlwdG9yLCBhbmQgeW91IHdhbnQgdG8gc3VwcGx5IGxlbgo+ID4gPiA+ID4g dG8gZ3Vlc3QsIHlvdSBzZXQgVklSVFFfREVTQ19GX1dSSVRFIGluIHRoZSB1c2VkIGRlc2NyaXB0 b3IuCj4gPiA+ID4gPiBTcGVjIGFsc28gc2F5cyB5b3UgbXVzdCBub3Qgc2V0IFZJUlRRX0RFU0Nf Rl9JTkRJUkVDVCB0aGVuLgo+ID4gPiA+ID4gSWYgdGhhdCdzIGEgcHJvYmxlbSB3ZSBjb3VsZCBs b29rIGF0IHJlbGF4aW5nIHRoYXQgbGFzdCByZXF1aXJlbWVudCAtCj4gPiA+ID4gPiBkb2VzIGRy aXZlciB3YW50IElORElSRUNUIGluIHVzZWQgZGVzY3JpcHRvciB0byBtYXRjaAo+ID4gPiA+ID4g dGhlIHZhbHVlIGluIHRoZSBhdmFpbCBkZXNjcmlwdG9yIGZvciBzb21lIHJlYXNvbj8KPiA+ID4g PiAKPiA+ID4gPiBGb3IgaW5kaXJlY3QsIGRyaXZlciBuZWVkcyBzb21lIHdheSB0byBnZXQgdGhl IGxlbmd0aAo+ID4gPiA+IG9mIHRoZSBkYXRhIHdyaXR0ZW4gYnkgdGhlIGRyaXZlci4gQW5kIHRo ZSBkZXNjcmlwdG9ycwo+ID4gPiA+IGluIHRoZSBpbmRpcmVjdCB0YWJsZSBpcyByZWFkLW9ubHks IHNvIHRoZSBvbmx5IHBsYWNlCj4gPiA+ID4gZGV2aWNlIGNvdWxkIHB1dCB0aGlzIHZhbHVlIGlz IHRoZSBkZXNjcmlwdG9yIHdpdGggdGhlCj4gPiA+ID4gVklSVFFfREVTQ19GX0lORElSRUNUIGZs YWcgc2V0Lgo+ID4gPiAKPiA+ID4gd2hlbiB3cml0aW5nIG91dCB1c2VkIGRlc2NyaXB0b3IsIGRl dmljZSBzaG91bGQgc2V0IFZJUlRRX0RFU0NfRl9XUklURQo+ID4gPiAoYW5kIGNsZWFyIFZJUlRR X0RFU0NfRl9JTkRJUkVDVCkuCj4gPiAKPiA+IFNvIHRoZSBzcGVjIGFsbG93cyBkZXZpY2UgdG8g c2V0IFZJUlRRX0RFU0NfRl9XUklURSBiaXQKPiA+IHdoZW4gd3JpdGluZyBvdXQgYW4gdXNlZCBk ZXNjcmlwdG9yIGV2ZW4gaWYgdGhlIGNvcnJlc3BvbmRpbmcKPiA+IGRlc2NyaXB0b3JzIGl0IGp1 c3QgcGFyc2VkIGRvbid0IGhhdmUgdGhlIFZJUlRRX0RFU0NfRl9XUklURQo+ID4gYml0IHNldD8K PiA+IAo+ID4gQmVzdCByZWdhcmRzLAo+ID4gVGl3ZWkgQmllCj4gCj4gSSB0aGluayBzby4gSW4g YSB1c2VkIGRlc2NyaXB0b3IsIFZJUlRRX0RFU0NfRl9XUklURSBqdXN0IG1lYW5zIGxlbmd0aAo+ IGlzIHZhbGlkLgoKR290IGl0LiBJdCdzIHZlcnkgbmVhdC4gVGhhbmtzISA6KQoKQmVzdCByZWdh cmRzLApUaXdlaSBCaWUKCj4gCj4gLS0gCj4gTVNUCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFs aXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91 bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==