From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=StEIyFp5; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTPS id E6F9B5A0265 for ; Tue, 26 May 2026 10:54:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1779785655; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=mxDekYV99TDoFLFYpTntcOJIkcxEikN82vicEiMdTfg=; b=StEIyFp5evBBUa5c4IK5GHuZKWXtm5uuPwmc+Rfwi0WZhqGi3HZSewWUg26LnI7K5k1+zh wbX8HAPqz+i57jtc+Xe5ekTA9T1DDZ/UxGsRJZF0cP0QZfxrMAOn7WFkj7HXcQTPUFY4c5 w7wi+m6BuS1Epn1Pbx6Tq0kTyijE2io= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-345-tsb-Ad29Mty7ycNHHU_aig-1; Tue, 26 May 2026 04:54:13 -0400 X-MC-Unique: tsb-Ad29Mty7ycNHHU_aig-1 X-Mimecast-MFC-AGG-ID: tsb-Ad29Mty7ycNHHU_aig_1779785652 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-48fd64c32e8so69746475e9.3 for ; Tue, 26 May 2026 01:54:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779785652; x=1780390452; h=content-transfer-encoding:in-reply-to:autocrypt:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=mxDekYV99TDoFLFYpTntcOJIkcxEikN82vicEiMdTfg=; b=YVii7UrtZDGMOopZKCOe+mCr00/0bIDtLPVviSexaPL+K5gVgXLOhADTfU9Ii0khnw haSbyAzgzM5LZlB5oJ9ocjng3IxEx0B4Ge6cWLGirAvXtu1J6rPaTYC1oFT4o1CS0hWg ABA2QDTYqAltPVvI8YnE2JrWpXzgPa0B7TYo081RQybNET2CleAOnD+TmRx8YFF+YCh7 GZk3YPshB/+fknldiAy2rm9mnH71QUQYNdMX1AryqJ9bUfteVoHXLzOzWP8xKwNxUzER b9a9KEUDOfQ5tNq4/CqJ4U9mvmm1EPP+usH9yID6PXoLUvkz0E17ENQvYVrmBnW9QlrZ df9w== X-Gm-Message-State: AOJu0YxjP7LlsP1dLUtg64HpK2m8pGUaoq+Mr4OWug5HEWm5QD8/HTBE y/sPLuGrwHo/p0PC1MtGeUAyNCbUcJhyLt8jtSBOg3TBgfL6k0Igwmg4U+hSO/MbzEkFubiRAiD 8DEEcVueW+cSCpekuaz1iBtzs6xJ8FAY3NUH29Zdf4vEWFTYvibmOLQ== X-Gm-Gg: Acq92OHqwiHGjqeQjLlxsKNAP3zVKzpRNt/yF023U2z85Vqd6kCJoOSMGT30FsZIEYJ EardxQ8lXkpp/Q3Xm6UsykxLriTWbUUFv3vXkRAwqwCQLVDXt5G9fl1p2zv/lm2x94XY99NxC0E 7rKgZTG6lOaH82QJiFtogwp6UH40RmQ9axU1jfff8M8dJjmIqBG7e91u0BelJc5LAvUzS6eLsz1 PyBM7yNKLJGRG7+aF22TVE5u/b64g7FSfcdT+u62ZFgnLo+h4bLKSBN7U8s8G3OTyVlclioUXsd 4xh2RoDqTTS/rAm1AoCkSxH2uHnjWElV1+2GNSRBl3bRVbJO1FYtL616zAfggBgQ/jnPVIw/j8H 9lFgwP1jaMYugTShGAjPNP+gulg== X-Received: by 2002:a05:600c:4f91:b0:490:6e12:a40f with SMTP id 5b1f17b1804b1-4906e12a673mr67958435e9.12.1779785651692; Tue, 26 May 2026 01:54:11 -0700 (PDT) X-Received: by 2002:a05:600c:4f91:b0:490:6e12:a40f with SMTP id 5b1f17b1804b1-4906e12a673mr67957845e9.12.1779785651165; Tue, 26 May 2026 01:54:11 -0700 (PDT) Received: from [192.168.100.100] ([82.64.211.94]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49044f2bad3sm334611995e9.0.2026.05.26.01.54.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 26 May 2026 01:54:10 -0700 (PDT) Message-ID: <2c5d663b-bcf8-4afe-9c38-e9b891f1a0e9@redhat.com> Date: Tue, 26 May 2026 10:54:07 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 00/10] vhost-user: Preparatory series for multiple iovec entries per virtqueue element To: Stefano Brivio References: <20260513115218.1662850-1-lvivier@redhat.com> <20260520173445.0658dfef@elisabeth> <20260520180708.275ec4de@elisabeth> <20260520181852.1f0119ff@elisabeth> <20260520225340.54490a21@elisabeth> <50d79312-0493-4af0-b0bc-7c590885cbd2@redhat.com> <20260522062239.4fcd3314@elisabeth> <20260522074455.15e6cc3e@elisabeth> <20260522140414.6eaa8f43@elisabeth> <20260526095955.008a6ea1@elisabeth> <20260526103809.54da7aac@elisabeth> From: Laurent Vivier Autocrypt: addr=lvivier@redhat.com; keydata= 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 In-Reply-To: <20260526103809.54da7aac@elisabeth> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: bewWsSsojfyE9uiyknu536_yk2jMnjcxr43CB7Xx1_0_1779785652 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Message-ID-Hash: AW4RRKWRUIDS2X7YRQRWLJQPYQ23JFSP X-Message-ID-Hash: AW4RRKWRUIDS2X7YRQRWLJQPYQ23JFSP X-MailFrom: lvivier@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: passt-dev@passt.top, Jon Maloy , David GIbson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: T24gNS8yNi8yNiAxMDozOCwgU3RlZmFubyBCcml2aW8gd3JvdGU6DQo+IE9uIFR1ZSwgMjYgTWF5 IDIwMjYgMDk6NTk6NTUgKzAyMDANCj4gU3RlZmFubyBCcml2aW8gPHNicml2aW9AcmVkaGF0LmNv bT4gd3JvdGU6DQo+IA0KPj4gT24gVHVlLCAyNiBNYXkgMjAyNiAwOTozMTo1MSArMDIwMA0KPj4g TGF1cmVudCBWaXZpZXIgPGx2aXZpZXJAcmVkaGF0LmNvbT4gd3JvdGU6DQo+Pg0KPj4+IE9uIDUv MjIvMjYgMTQ6MDQsIFN0ZWZhbm8gQnJpdmlvIHdyb3RlOg0KPj4+PiBPbiBGcmksIDIyIE1heSAy MDI2IDA3OjQ0OjU1ICswMjAwDQo+Pj4+IFN0ZWZhbm8gQnJpdmlvIDxzYnJpdmlvQHJlZGhhdC5j b20+IHdyb3RlOg0KPj4+PiAgICAgIA0KPj4+Pj4gT24gRnJpLCAyMiBNYXkgMjAyNiAwNjoyMjoz OSArMDIwMA0KPj4+Pj4gU3RlZmFubyBCcml2aW8gPHNicml2aW9AcmVkaGF0LmNvbT4gd3JvdGU6 DQo+Pj4+PiAgICAgDQo+Pj4+Pj4gT24gRnJpLCAyMiBNYXkgMjAyNiAwMToxMzozMyArMDIwMA0K Pj4+Pj4+IExhdXJlbnQgVml2aWVyIDxsdml2aWVyQHJlZGhhdC5jb20+IHdyb3RlOg0KPj4+Pj4+ ICAgICAgICAgDQo+Pj4+Pj4+IE9uIDUvMjEvMjYgMTA6MzAsIExhdXJlbnQgVml2aWVyIHdyb3Rl Og0KPj4+Pj4+Pj4gT24gNS8yMC8yNiAyMjo1MywgU3RlZmFubyBCcml2aW8gd3JvdGU6DQo+Pj4+ Pj4+Pj4gT24gV2VkLCAyMCBNYXkgMjAyNiAxODoxODo1MiArMDIwMA0KPj4+Pj4+Pj4+IFN0ZWZh bm8gQnJpdmlvIDxzYnJpdmlvQHJlZGhhdC5jb20+IHdyb3RlOg0KPj4+Pj4+Pj4+ICAgICAgICAg ICAgDQo+Pj4+Pj4+Pj4+IE9uIFdlZCwgMjAgTWF5IDIwMjYgMTg6MDc6MDggKzAyMDANCj4+Pj4+ Pj4+Pj4gU3RlZmFubyBCcml2aW8gPHNicml2aW9AcmVkaGF0LmNvbT4gd3JvdGU6DQo+Pj4+Pj4+ Pj4+ICAgICAgICAgICAgDQo+Pj4+Pj4+Pj4+PiBPbiBXZWQsIDIwIE1heSAyMDI2IDE3OjM0OjQ1 ICswMjAwDQo+Pj4+Pj4+Pj4+PiBTdGVmYW5vIEJyaXZpbyA8c2JyaXZpb0ByZWRoYXQuY29tPiB3 cm90ZToNCj4+Pj4+Pj4+Pj4+PiBPbiBXZWQsIDEzIE1heSAyMDI2IDEzOjUyOjA4ICswMjAwDQo+ Pj4+Pj4+Pj4+Pj4gTGF1cmVudCBWaXZpZXIgPGx2aXZpZXJAcmVkaGF0LmNvbT4gd3JvdGU6DQo+ Pj4+Pj4+Pj4+Pj4+IEN1cnJlbnRseSwgdGhlIHZob3N0LXVzZXIgcGF0aCBhc3N1bWVzIGVhY2gg dmlydHF1ZXVlIGVsZW1lbnQgY29udGFpbnMNCj4+Pj4+Pj4+Pj4+Pj4gZXhhY3RseSBvbmUgaW92 ZWMgZW50cnkgY292ZXJpbmcgdGhlIGVudGlyZSBmcmFtZS7CoCBUaGlzIGFzc3VtcHRpb24NCj4+ Pj4+Pj4+Pj4+Pj4gYnJlYWtzIGFzIHNvbWUgdmlydGlvLW5ldCBkcml2ZXJzIChub3RhYmx5IGlQ WEUpIHByb3ZpZGUgZGVzY3JpcHRvcnMgd2hlcmUgdGhlDQo+Pj4+Pj4+Pj4+Pj4+IHZuZXQgaGVh ZGVyIGFuZCB0aGUgZnJhbWUgcGF5bG9hZCBhcmUgaW4gc2VwYXJhdGUgYnVmZmVycywgcmVzdWx0 aW5nIGluDQo+Pj4+Pj4+Pj4+Pj4+IHR3byBpb3ZlYyBlbnRyaWVzIHBlciB2aXJ0cXVldWUgZWxl bWVudC4NCj4+Pj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4+Pj4gVGhpcyBzZXJpZXMgcmVmYWN0b3Jz IHRoZSB2aG9zdC11c2VyIGRhdGEgcGF0aCBzbyB0aGF0IGZyYW1lIGxlbmd0aHMsDQo+Pj4+Pj4+ Pj4+Pj4+IGhlYWRlciBzaXplcywgYW5kIHBhZGRpbmcgYXJlIHRyYWNrZWQgYW5kIHBhc3NlZCBl eHBsaWNpdGx5IHJhdGhlciB0aGFuDQo+Pj4+Pj4+Pj4+Pj4+IGJlaW5nIGRlcml2ZWQgZnJvbSBp b3ZlYyBzaXplcy7CoCBUaGlzIGRlY291cGxpbmcgaXMgYSBwcmVyZXF1aXNpdGUgZm9yDQo+Pj4+ Pj4+Pj4+Pj4+IGNvcnJlY3RseSBoYW5kbGluZyBwYWRkaW5nIG9mIG11bHRpLWJ1ZmZlciBmcmFt ZXMuDQo+Pj4+Pj4+Pj4+Pj4NCj4+Pj4+Pj4+Pj4+PiBTb3JyeSB0byBicmluZyAobGlrZWx5KSBi YWQgbmV3cywgYnV0IHRoaXMgc2VyaWVzIHNlZW1zIHRvIGludHJvZHVjZSBhDQo+Pj4+Pj4+Pj4+ Pj4gcmVncmVzc2lvbjogSSBnb3QgdGhlIG1pZ3JhdGlvbi9yYW1wc3RyZWFtX2luIHRlc3RzIGZh aWwgdHdpY2UgaW4gYQ0KPj4+Pj4+Pj4+Pj4+IHJvdywgd2hpY2ggSSd2ZSBuZXZlciBzYXcgaGFw cGVuaW5nIChJIHRoaW5rIEkgc2F3IGEgc2luZ2xlIGZhaWx1cmUgYQ0KPj4+Pj4+Pj4+Pj4+IGxv bmcgdGltZSBhZ28gd2hlbiB0aGUgbWFjaGluZSBoYWQgYSBoaWdoIENQVSBsb2FkLCBidXQgbm90 aGluZyBlbHNlKS4NCj4+Pj4+Pj4+Pj4+Pg0KPj4+Pj4+Pj4+Pj4+IEknbSBjdXJyZW50bHkgYmlz ZWN0aW5nIGFuZCB0aGUgYmlzZWN0IHNlZW1zIHRvIHBvaW50IHRvd2FyZHMgdGhlIGVuZA0KPj4+ Pj4+Pj4+Pj4+IG9mIHRoZSBzZXJpZXMgKHByb2JhYmx5IDEwLzEwKSwgYnV0IEkgaGF2ZW4ndCBm aW5pc2hlZCB5ZXQuIEknbGwga2VlcA0KPj4+Pj4+Pj4+Pj4+IHlvdSBwb3N0ZWQuIEkgaGF2ZW4n dCBzcG90dGVkIGFueXRoaW5nIHRoYXQgbWlnaHQgY2F1c2UgaXNzdWVzIHRoZXJlLg0KPj4+Pj4+ Pj4+Pj4NCj4+Pj4+Pj4+Pj4+IFllYWgsIHRoYXQncyB0aGUgb25lIDooDQo+Pj4+Pj4+Pj4+Pg0K Pj4+Pj4+Pj4+Pj4gJCBnaXQgYmlzZWN0IGJhZA0KPj4+Pj4+Pj4+Pj4gZGI3OThmYzYwZjRjNTg2 OWNiNTMxNjgzNTRlMDY4ZmI0ZGFiZDkxYSBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdA0KPj4+Pj4+ Pj4+Pj4gY29tbWl0IGRiNzk4ZmM2MGY0YzU4NjljYjUzMTY4MzU0ZTA2OGZiNGRhYmQ5MWENCj4+ Pj4+Pj4+Pj4+IEF1dGhvcjogTGF1cmVudCBWaXZpZXIgPGx2aXZpZXJAcmVkaGF0LmNvbT4NCj4+ Pj4+Pj4+Pj4+IERhdGU6wqDCoCBXZWQgTWF5IDEzIDEzOjUyOjE4IDIwMjYgKzAyMDANCj4+Pj4+ Pj4+Pj4+DQo+Pj4+Pj4+Pj4+PiAgIMKgwqDCoMKgIHZob3N0LXVzZXI6IENlbnRyYWxpc2UgRXRo ZXJuZXQgZnJhbWUgcGFkZGluZyBpbiB2dV9jb2xsZWN0KCkgYW5kIHZ1X3BhZCgpDQo+Pj4+Pj4+ Pg0KPj4+Pj4+Pj4gSSBjaGVja2VkIG9uIG15IHN5c3RlbSB3aXRoIHRoZSBjb21taXQgcHJldmlv dXMgdG8gdGhpcyBzZXJpZXMsDQo+Pj4+Pj4+PiBiY2MzZDM3YTZlMDEgKCJ1dGlsOiBGaXggY2hh bmdlcyB0byBhc3NlcnRfd2l0aF9tc2coKSIpIGFuZCByYW1wc3RyZWFtX2luIGZhaWxzIHRvbyAo bm90DQo+Pj4+Pj4+PiBldmVyeXRpbWUpLg0KPj4+Pj4+Pj4gICAgICAgICAgICAgDQo+Pj4+Pj4+ PiAgICA+IFRDUC9JUHY0OiBzZXF1ZW5jZSBjaGVjaywgcmFtcHMsIGluYm91bmQNCj4+Pj4+Pj4+ IC4uLmZhaWxlZC4NCj4+Pj4+Pj4+DQo+Pj4+Pj4+PiBhbmQgcmFtcHN0cmVhbV9vdXQgaGFuZ3Mg c29tZXRpbWUgdG9vLg0KPj4+Pj4+Pj4NCj4+Pj4+Pj4+IEknbSBnb2luZyB0byB0cnkgd2l0aCBl YWxpZXIgY29tbWl0cy4NCj4+Pj4+Pj4NCj4+Pj4+Pj4gRm9yIG1lIHRoZSBwcm9ibGVtIGNhbiBo YXBwZW4gd2l0aCBhbnkgY29tbWl0Li4uDQo+Pj4+Pj4+DQo+Pj4+Pj4+IEFzIGl0IGRlcGVuZHMg b24gdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBvbiB0aGUgbG9hZCBhbmQgc3BlZWQgb2YgdGhlIHN5 c3RlbSBpdCBsb29rcyBsaWtlDQo+Pj4+Pj4+IGEgcmFjZSBjb25kaXRpb24uDQo+Pj4+Pj4NCj4+ Pj4+PiBIYWgsIHRoYW5rcyBmb3IgY2hlY2tpbmcuIE1heWJlLi4uDQo+Pj4+Pj4gICAgICAgICAN Cj4+Pj4+Pj4gRGlkIHlvdSB0cnkgdG8gdGVzdCBvbiBhIGhvc3Qgd2l0aCBhIGtlcm5lbCBwYXRj aGVkIHdpdGgNCj4+Pj4+Pj4gIltQQVRDSCBuZXQgdjIgMC8yXSBGaXggcmFjZSBjb25kaXRpb24g YmV0d2VlbiBUQ1BfUkVQQUlSIGR1bXAgYW5kIGRhdGEgcmVjZWl2ZSIgPw0KPj4+Pj4+DQo+Pj4+ Pj4gTm93IEkgdHJpZWQsIGFuZCB5ZXMsIHRoZSB0ZXN0IGRvZXNuJ3QgaGFuZyBhbnltb3JlISBJ IHNlZW0gdG8gaGF2ZSBhbg0KPj4+Pj4+IGlzc3VlIHdpdGggdGVhcmRvd24gZnVuY3Rpb25zIG9u IHJlY2VudCBrZXJuZWxzIChjdXJyZW50IG5ldC5naXQgSEVBRA0KPj4+Pj4+IG1vcmUgb3IgbGVz cyk6DQo+Pj4+Pj4NCj4+Pj4+PiAtLS0NCj4+Pj4+PiBbLi4uXQ0KPj4+Pj4+DQo+Pj4+Pj4gMjAy Ni8wNS8yMiAwNDowODoyMyBzb2NhdFs3MzA4OV0gRSBjb25uZWN0KDUsIEFGPTQwIGNpZDo5NDU1 OCBwb3J0OjIyLCAxNik6IENvbm5lY3Rpb24gdGltZWQgb3V0DQo+Pj4+Pj4gQ29ubmVjdGlvbiBj bG9zZWQgYnkgVU5LTk9XTiBwb3J0IDY1NTM1DQo+Pj4+Pj4gLi4uDQo+Pj4+Pj4gLS0tDQo+Pj4+ Pj4NCj4+Pj4+PiBpdCBsb29rcyBsaWtlIHdlIHN0b3AgUUVNVSBhIGJpdCB0b28gZWFybHkuIEJ1 dCBpdCBzaG91bGQgYmUgdW5yZWxhdGVkLg0KPj4+Pg0KPj4+PiBPb3BzLCBJIGZvcmdvdCB0byB1 cGdyYWRlIFFFTVUgb24gdGhlIHZpcnR1YWwgbWFjaGluZSBJIHdhcyB1c2luZyB0bw0KPj4+PiB0 ZXN0IHRob3NlIGtlcm5lbCBidWlsZHMsIEkgaGFkIGEgc29tZXdoYXQgb3V0ZGF0ZWQgOC4xIHZl cnNpb24gYW5kIGl0DQo+Pj4+IGZhaWxlZCBtaWdyYXRpb24gZm9yIHVucmVsYXRlZCByZWFzb25z LiBJdCB3b3JrcyB3aXRoIDExLjAuDQo+Pj4+DQo+Pj4+IEJhY2sgdG8ga2VybmVsIHZlcnNpb25z OiB0aGUgInByb2JsZW0iIGlzIHRoYXQgd2l0aCBhIHJlY2VudA0KPj4+PiBuZXQtbmV4dC5naXQg SEVBRCwgd2l0aCBvciB3aXRob3V0IG15IGZpeCwgaW4gYSBuZXN0ZWQgVk0sIHRoZSB0ZXN0DQo+ Pj4+IGFsd2F5cyBwYXNzZXMgKDIwLzIwKS4gQW5kIEkgY2FuJ3QgZWFzaWx5IHRlc3QgdGhpbmdz IG5vbi1uZXN0ZWQuDQo+Pj4+DQo+Pj4+IEkgZ3Vlc3MgY291bGQganVzdCBza2lwIHRoYXQgdGVz dCBmb3IgdGhlIG1vbWVudCBmcm9tIHRoZSBzZXQgSSBydW4gZ2l0DQo+Pj4+IHB1c2gsIGFuZCBy dW4gaXQgbWFudWFsbHkgaW4gdGhlIHZpcnR1YWwgbWFjaGluZSwgZm9yIHRoZSBtb21lbnQuDQo+ Pj4+DQo+Pj4+IEJ1dCBqdWRnaW5nIGZyb20gY2FwdHVyZXMgKHRlc3RfbG9ncy9wYXN0YV8xLnBj YXAgZnJvbSBQQ0FQPTEgLi9ydW4pDQo+Pj4+IEknbSBmYWlybHkgc3VyZSBpdCdzIG5vdCAqdGhh dCogaXNzdWU6DQo+Pj4+DQo+Pj4+ICAgICA0NjUgIDEyLjE0MTc2MyAgICAxOTIuMC4yLjEg4oaS IDg4LjE5OC4wLjE2NCA1ODQ1MSBUQ1AgW1RDUCBXaW5kb3cgRnVsbF0gMzQ0MTYg4oaSIDEwMDAx IFtQU0gsIEFDS10gU2VxPTEwMDAyMTAwIEFjaz0xIFdpbj02NTUzNiBMZW49NTgzOTcNCj4+Pj4g ICAgIDQ2NiAgMTIuMTg3MTk1IDg4LjE5OC4wLjE2NCDihpIgMTkyLjAuMi4xICAgIDU0IFRDUCBb VENQIFplcm9XaW5kb3ddIDEwMDAxIOKGkiAzNDQxNiBbQUNLXSBTZXE9MSBBY2s9MTAwNjA0OTcg V2luPTAgTGVuPTANCj4+Pj4gICAgIDQ2NyAgMTMuMTg3MjgxICAgIDE5Mi4wLjIuMSDihpIgODgu MTk4LjAuMTY0IDQxNTAgVENQIDM0NDE2IOKGkiAxMDAwMSBbUFNILCBBQ0tdIFNlcT0xMDA2MDQ5 NyBBY2s9MSBXaW49NjU1MzYgTGVuPTQwOTYNCj4+Pj4NCj4+Pj4gbGFzdCBkYXRhIHRyYW5zZmVy IGZyb20gY2xpZW50IChyYW1wc3RyZWFtKToNCj4+Pj4NCj4+Pj4gICAgIDQ2OCAgMTMuMTg3MzU4 IDg4LjE5OC4wLjE2NCDihpIgMTkyLjAuMi4xICAgIDU0IFRDUCBbVENQIFplcm9XaW5kb3ddIDEw MDAxIOKGkiAzNDQxNiBbQUNLXSBTZXE9MSBBY2s9MTAwNjA0OTcgV2luPTAgTGVuPTANCj4+Pj4N Cj4+Pj4gZXZlcnl0aGluZyBhY2tub3dsZWRnZWQsIG1pZ3JhdGlvbiBzdGFydHMgbm93Og0KPj4+ Pg0KPj4+PiAgICAgNDY5ICAxNC4xNDMyMTcgZmU4MDo6ZjQ3MTpjM2ZmOmZlMTA6NGU0NSDihpIg ZmYwMjo6MiAgICAgIDcwIElDTVB2NiBSb3V0ZXIgU29saWNpdGF0aW9uIGZyb20gZjY6NzE6YzM6 MTA6NGU6NDUNCj4+Pj4gICAgIDQ3MCAgMTQuNjg3MTIzIDg4LjE5OC4wLjE2NCDihpIgMTkyLjAu Mi4xICAgIDU0IFRDUCBbVENQIFplcm9XaW5kb3ddIFtUQ1AgS2VlcC1BbGl2ZV0gMTAwMDEg4oaS IDM0NDE2IFtBQ0tdIFNlcT0wIEFjaz0xMDA2MDQ5NyBXaW49MCBMZW49MA0KPj4+Pg0KPj4+PiBt aWdyYXRpb24gY29tcGxldGVkOiBhbmQgd2UgYWNrbm93bGVkZ2UgdGhlIHJpZ2h0IHNlcXVlbmNl ICgxMDA2MDQ5NyksDQo+Pj4+IHNvIGl0IGRpZG4ndCBqdW1wIGZvcndhcmQuDQo+Pj4+DQo+Pj4+ IEJ1dCBzdGFydGluZyBmcm9tIHRoaXMgcG9pbnQ6DQo+Pj4+DQo+Pj4+ICAgICA0NzEgIDE0LjY4 NzI2NSAgICAxOTIuMC4yLjEg4oaSIDg4LjE5OC4wLjE2NCA2MCBUQ1AgMzQ0MTYg4oaSIDEwMDAx IFtBQ0tdIFNlcT0xMDA2MDQ5NyBBY2s9MSBXaW49NjU1MzYgTGVuPTANCj4+Pj4gICAgIDQ3MiAg MTYuNjg3NDEyICAgIDE5Mi4wLjIuMSDihpIgODguMTk4LjAuMTY0IDQxNTAgVENQIFtUQ1AgUmV0 cmFuc21pc3Npb25dIDM0NDE2IOKGkiAxMDAwMSBbUFNILCBBQ0tdIFNlcT0xMDA2MDQ5NyBBY2s9 MSBXaW49NjU1MzYgTGVuPTQwOTYNCj4+Pj4gICAgIDQ3MyAgMTYuNjg3NDUwIDg4LjE5OC4wLjE2 NCDihpIgMTkyLjAuMi4xICAgIDU0IFRDUCBbVENQIFplcm9XaW5kb3ddIDEwMDAxIOKGkiAzNDQx NiBbQUNLXSBTZXE9MSBBY2s9MTAwNjA0OTcgV2luPTAgTGVuPTANCj4+Pj4gICAgIDQ3NCAgMjAu Njg3NjUwICAgIDE5Mi4wLjIuMSDihpIgODguMTk4LjAuMTY0IDQxNTAgVENQIFtUQ1AgUmV0cmFu c21pc3Npb25dIDM0NDE2IOKGkiAxMDAwMSBbUFNILCBBQ0tdIFNlcT0xMDA2MDQ5NyBBY2s9MSBX aW49NjU1MzYgTGVuPTQwOTYNCj4+Pj4gICAgIDQ3NSAgMjAuNjg3NjkyIDg4LjE5OC4wLjE2NCDi hpIgMTkyLjAuMi4xICAgIDU0IFRDUCBbVENQIFplcm9XaW5kb3ddIDEwMDAxIOKGkiAzNDQxNiBb QUNLXSBTZXE9MSBBY2s9MTAwNjA0OTcgV2luPTAgTGVuPTANCj4+Pj4gICAgIDQ3NiAgMjguNjg3 ODE3ICAgIDE5Mi4wLjIuMSDihpIgODguMTk4LjAuMTY0IDQxNTAgVENQIFtUQ1AgUmV0cmFuc21p c3Npb25dIDM0NDE2IOKGkiAxMDAwMSBbUFNILCBBQ0tdIFNlcT0xMDA2MDQ5NyBBY2s9MSBXaW49 NjU1MzYgTGVuPTQwOTYNCj4+Pj4NCj4+Pj4gd2Uga2VlcCBhZHZlcnRpc2luZyBhIHplcm8gd2lu ZG93ICh0aGF0J3MgdGhlIGtlcm5lbCBkb2luZyBpdCByZWFsbHkpLA0KPj4+PiBhcyBpZiB3ZSB3 ZXJlIHVuYWJsZSB0byBkZXF1ZXVlIGRhdGEuDQo+Pj4+DQo+Pj4+IEkgZW5hYmxlZCAtLXRyYWNl IGp1c3QgZm9yIHRoZSB0YXJnZXQgaW5zdGFuY2Ugb2YgcGFzc3QsIGFuZCBJIGRvbid0DQo+Pj4+ IHNlZSBhbnl0aGluZyBzdXNwaWNpb3VzIHRoZXJlOg0KPj4+Pg0KPj4+PiAxMy4wOTU4OiBSZWNl aXZpbmcgMSBmbG93cw0KPj4+PiAxMy4wOTU4OiBGbG93IDAgKE5FVyk6IEZSRUUgLT4gTkVXDQo+ Pj4+IDEzLjA5NTg6IEZsb3cgMCAoVENQIGNvbm5lY3Rpb24pOiBUR1QgLT4gVFlQRUQNCj4+Pj4g MTMuMDk1ODogRmxvdyAwIChUQ1AgY29ubmVjdGlvbik6IEhPU1QgWzE5Mi4wLjIuMV06NDk4OTIg LT4gWzg4LjE5OC4wLjE2NF06MTAwMDEgPT4gVEFQIFsxOTIuMC4yLjFdOjQ5ODkyIC0+IFs4OC4x OTguMC4xNjRdOjEwMDAxDQo+Pj4+IDEzLjA5NTg6IEZsb3cgMCAoVENQIGNvbm5lY3Rpb24pOiBT aWRlIDEgaGFzaCB0YWJsZSBpbnNlcnQ6IGJ1Y2tldDogMTM4MTU0DQo+Pj4+IDEzLjA5NTg6IEZs b3cgMCAoVENQIGNvbm5lY3Rpb24pOiBUWVBFRCAtPiBBQ1RJVkUNCj4+Pj4gMTMuMDk1ODogRmxv dyAwIChUQ1AgY29ubmVjdGlvbik6IEhPU1QgWzE5Mi4wLjIuMV06NDk4OTIgLT4gWzg4LjE5OC4w LjE2NF06MTAwMDEgPT4gVEFQIFsxOTIuMC4yLjFdOjQ5ODkyIC0+IFs4OC4xOTguMC4xNjRdOjEw MDAxDQo+Pj4+IDEzLjA5NTk6IEZsb3cgMCAoVENQIGNvbm5lY3Rpb24pOiBFeHRlbmRlZCBtaWdy YXRpb24gZGF0YSwgc29ja2V0IDgzIHNlcXVlbmNlcyBzZW5kIDMxMjE5Mjk1NDQgcmVjZWl2ZSAx NjQzODk1MDAxDQo+Pj4+IDEzLjA5NTk6IEZsb3cgMCAoVENQIGNvbm5lY3Rpb24pOiAgIHBlbmRp bmcgcXVldWVzOiBzZW5kIDAgbm90IHNlbnQgMCByZWNlaXZlIDM1MDAwODENCj4+Pj4gMTMuMDk1 OTogRmxvdyAwIChUQ1AgY29ubmVjdGlvbik6ICAgd2luZG93OiBzbmRfd2wxIDE2NDczOTUwODIg c25kX3duZCA2NTUzNiBtYXggNjU1MzYgcmN2X3duZCAwIHJjdl93dXAgMTY0NzM5NTA4Mg0KPj4+ PiAxMy4wOTU5OiBGbG93IDAgKFRDUCBjb25uZWN0aW9uKTogICBTT19QRUVLX09GRiBkaXNhYmxl ZCAgb2Zmc2V0PTANCj4+Pj4gMTMuMDk4NTogR290IHBhY2tldCwgYnV0IFJYIHZpcnRxdWV1ZSBu b3QgdXNhYmxlIHlldA0KPj4+PiAxMy4wOTg1OiBDbG9zaW5nIG1pZ3JhdGlvbiBjaGFubmVsLCBm ZDogODINCj4+Pj4gMTMuMDk4NTogQ2xvc2luZyBUQ1BfUkVQQUlSIGhlbHBlciBzb2NrZXQNCj4+ Pj4gMTMuMDk4NTogcGFzc3Q6IGVwb2xsIGV2ZW50IG9uIHZob3N0LXVzZXIgY29tbWFuZCBzb2Nr ZXQgNzcgKGV2ZW50czogMHgwMDAwMDAwMSkNCj4+Pj4NCj4+Pj4gdGhlbiB0aGUgdXN1YWwgVkhP U1RfVVNFUl9DSEVDS19ERVZJQ0VfU1RBVEUgYW5kIFZIT1NUX1VTRVJfU0VUX1ZSSU5HX0VOQUJM RQ0KPj4+PiBjb21tYW5kcy4gQWZ0ZXIgdGhhdCwgYSB0aWdodCBsb29wIG9mOg0KPj4+Pg0KPj4+ PiAxMy4wOTg2OiBwYXNzdDogZXBvbGwgZXZlbnQgb24gY29ubmVjdGVkIFRDUCBzb2NrZXQgODMg KGV2ZW50czogMHgwMDAwMDAwMSkNCj4+Pj4gMTMuMDk4NjogR290IHBhY2tldCwgYnV0IFJYIHZp cnRxdWV1ZSBub3QgdXNhYmxlIHlldA0KPj4+PiAxMy4wOTg2OiBwYXNzdDogZXBvbGwgZXZlbnQg b24gY29ubmVjdGVkIFRDUCBzb2NrZXQgODMgKGV2ZW50czogMHgwMDAwMDAwMSkNCj4+Pj4gMTMu MDk4NjogR290IHBhY2tldCwgYnV0IFJYIHZpcnRxdWV1ZSBub3QgdXNhYmxlIHlldA0KPj4+Pg0K Pj4+PiB1bnRpbCB3ZSBnbyBmdXJ0aGVyIHdpdGggdGhlIHZob3N0LXVzZXIgc2V0dXAuIEkgc3Rp bGwgc2VlIHRoaXMgbWVzc2FnZQ0KPj4+PiB3aGljaCBJIGhhZCBuZXZlciBub3RpY2VkIChidXQg SSBkaWRuJ3QgdHJ5IHRvIGJpc2VjdCBhcm91bmQgaXQpOg0KPj4+Pg0KPj4+PiAxMy4xMDA2OiA9 PT09PT09PT09PT09PT09IFZob3N0IHVzZXIgbWVzc2FnZSA9PT09PT09PT09PT09PT09DQo+Pj4+ IDEzLjEwMDY6IFJlcXVlc3Q6IFZIT1NUX1VTRVJfU0VUX1ZSSU5HX0FERFIgKDkpDQo+Pj4+IFsu Li5dDQo+Pj4+IDEzLjEwMDY6IExhc3QgYXZhaWwgaW5kZXggIT0gdXNlZCBpbmRleDogMzI1MiAh PSAzMDI3DQo+Pj4+DQo+Pj4+IGFuZCB0aGVuIGFmdGVyIFZIT1NUX1VTRVJfU0VUX1ZSSU5HX0NB TEwsIGFuZDoNCj4+Pj4NCj4+Pj4gMTMuMTAwODogcGFzc3Q6IGVwb2xsIGV2ZW50IG9uIHZob3N0 LXVzZXIga2ljayBzb2NrZXQgNzggKGV2ZW50czogMHgwMDAwMDAwMSkNCj4+Pj4gMTMuMTAwODog dmhvc3QtdXNlcjogZ290IGtpY2tfZGF0YTogMDAwMDAwMDAwMDAwMDAwMSBpZHg6IDENCj4+Pj4N Cj4+Pj4gaXQncyBqdXN0IGEgdGlnaHQgbG9vcCBvZjoNCj4+Pj4NCj4+Pj4gMTMuMTAwODogcGFz c3Q6IGVwb2xsIGV2ZW50IG9uIGNvbm5lY3RlZCBUQ1Agc29ja2V0IDgzIChldmVudHM6IDB4MDAw MDAwMDEpDQo+Pj4+IDEzLjEwMDg6IHBhc3N0OiBlcG9sbCBldmVudCBvbiBjb25uZWN0ZWQgVENQ IHNvY2tldCA4MyAoZXZlbnRzOiAweDAwMDAwMDAxKQ0KPj4+PiAxMy4xMDA4OiBwYXNzdDogZXBv bGwgZXZlbnQgb24gY29ubmVjdGVkIFRDUCBzb2NrZXQgODMgKGV2ZW50czogMHgwMDAwMDAwMSkN Cj4+Pj4NCj4+Pj4gYXMgaWYgd2Ugd2VyZW4ndCBkZXF1ZXVlaW5nIGFueXRoaW5nIGZyb20gdGhl cmUuDQo+Pj4+DQo+Pj4+IEkgc3RhcnQgc3VzcGVjdGluZyB3ZSBtaWdodCBiZSBoaXR0aW5nIHR3 byBkaWZmZXJlbnQgaXNzdWVzOiBwZXJoYXBzDQo+Pj4+IHRoaW5ncyBmYWlsIG9uIHlvdXIgc2V0 dXAgYmVjYXVzZSBvZiB0aGUga2VybmVsIGJ1ZyB3aXRoIFRDUF9SRVBBSVIgbm90DQo+Pj4+IGZy ZWV6aW5nIHRoZSBxdWV1ZSwgYW5kIHRoZXkgZmFpbCBvbiBteSBzZXR1cCBmb3Igc29tZSBvdGhl ciByZWFzb24uDQo+Pj4+DQo+Pj4+IEZvciBtZSBpdCdzIHZlcnkgZGV0ZXJtaW5pc3RpYyB0aG91 Z2g6IHdpdGggcGF0Y2ggMTAvMTAgdGhpbmdzIGFsd2F5cw0KPj4+PiBmYWlsLCBhbmQgd2l0aG91 dCBpdCB0aGV5IG5ldmVyIGZhaWwuDQo+Pj4+DQo+Pj4+IEkgZ3Vlc3MgSSdsbCBhZGQgbW9yZSBw cmludHMgYW5kIGNoZWNrIGZvciBtb3JlIG1lc3NhZ2VzIGJlZm9yZS9hZnRlcg0KPj4+PiB0aGF0 IHBhdGNoLg0KPj4+PiAgICAgIA0KPj4+DQo+Pj4gSW4gZmFjdCB0aGVyZSBpcyBhIGJ1ZmZlciBs ZWFrIGJlY2F1c2UgaW92X3NraXBfYnl0ZXMoKSBkb2Vzbid0IGNvcnJlY3RseSBjb21wdXRlIHRo ZQ0KPj4+IG51bWJlciBvZiB1c2VkIGVsZW1lbnRzIGFuZCB0aGVuIHdlIGRvbid0IHJlbGVhc2Ug YWxsIHRoZSB1bnVzZWQgYnVmZmVycy4NCj4+Pg0KPj4+IEknbSB0cnlpbmcgdG8gZml4IHRoYXQu DQo+Pj4NCj4+PiBQbGVhc2UgdHJ5IHdpdGggc2VyaWVzICJbUEFUQ0ggdjcgMC80XSB2aG9zdC11 c2VyLHRjcDogSGFuZGxlIG11bHRpcGxlIGlvdmVjIGVudHJpZXMgcGVyDQo+Pj4gdmlydHF1ZXVl IGVsZW1lbnQiIGFwcGxpZWQsIGl0IHJld29ya3MgdGhpcyBwYXJ0Lg0KPj4NCj4+IEknbSB0cnlp bmcgaXQgbm93LiBJZiB0aGF0IHRvdGFsbHkgcmV3b3JrcyB0aGlzIHBhcnQgYW5kIGl0IGZpeGVz DQo+PiB0aGluZ3MgYW5kIGl0J3MgcmVhZHkgdG8gYmUgbWVyZ2VkIChzb3JyeSwgSSBkaWRuJ3Qg bWFuYWdlIHRvIGhhdmUgYQ0KPj4gbG9vayB5ZXQpIEkgZG9uJ3QgdGhpbmsgaXQncyBzdHJpY3Rs eSBuZWNlc3NhcnkgdG8gZmlndXJlIG91dCB0aGUNCj4+IGxlYWsuDQo+IA0KPiBBbGwgdGVzdHMg cGFzcyB3aXRoIGl0LCByYW1wc3RyZWFtX2luIHBhc3NlZCAyMC8yMCB0aW1lcy4gU2hvdWxkIEkg Z28NCj4gYWhlYWQgYW5kIG1lcmdlIGJvdGggc2VyaWVzIChVRFAgYW5kIFRDUCwgdGhleSBib3Ro IGxvb2sgcmVhZHkpIG9yIGRvDQo+IHlvdSBzdGlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1 ZmZlciBsZWFrIGZpcnN0IGZvciBvdGhlciByZWFzb25zPw0KPiANCg0KTm8sIHlvdSBjYW4gZ28g YWhlYWQuDQoNClRoYW5rLHMNCkxhdXJlbnQNCg0K