From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTP id 99C7F5A0307 for ; Tue, 04 Jun 2024 20:04:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1717524264; 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; bh=KrQYZ8OpW8CeggHmvyqOGQWeBbGLBp8jRoh70qXm1VA=; b=D5xvDPX0dcFVFa+nfUAxNMA84zkduHK58CeAlG0MzbO94E8j44Eb1OsnSX0EumkBcJ+T1z 8kLOFt+PZvxOfVaqLoDnqPjVIDWPCfPJZLcqrm14gq8UmBILtkSLbaNKMm3CpC1pBmkfs8 XE+TUQBLr7mg2L7EXwczfbFvVUfVZ8U= Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-275-2mg-aogzMdqv8RZjAjmZDg-1; Tue, 04 Jun 2024 14:04:22 -0400 X-MC-Unique: 2mg-aogzMdqv8RZjAjmZDg-1 Received: by mail-qv1-f72.google.com with SMTP id 6a1803df08f44-6ad706fab2aso64118626d6.1 for ; Tue, 04 Jun 2024 11:04:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717524262; x=1718129062; h=content-transfer-encoding:in-reply-to:content-language:references :cc:to:from:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KrQYZ8OpW8CeggHmvyqOGQWeBbGLBp8jRoh70qXm1VA=; b=KnC5t0+0VbS2mCphjhUTh0CiSgU1dotrmn9PpaNNE5SXmE+Ao3ewR4rfGVihiu/7GC cYMzwnjXBcfKjxdaTVvc89df67nGeWfW+ZR5uXoQiBaE+XVdhO0Yinwa1cC32Wz7az/D xBDG++9cyd7FMdH4p94SB45RznnmCXL/209+nKZ5LjOoxQPHW0MSw9rruZ28F/OiQQyv ERRA+oBdK+LYO4PqiBtn7SNdSQfrnfET/qKrWm+ZT3uOrWWl8TD8+ks7FfD6DIAUAFgP zlcPSZulDoSK/dJEIrYeXBzSkDODQpl9012bfgcdS9M6OWyZtKcXEJJ1xXzhYU9ai30Y L9Ng== X-Gm-Message-State: AOJu0YxSxEgC3hSClB3wrIRw+Ji48pT6vFhZlQBq5tZ4H2NAV+Tp4AmR S4ymioLOLbmD6rfEw+FOB6oEWxDGE53wdQHYOsWBOjo4lIBFat89KdmEMEW9lU58jMfPxVsRghw qMNdqv3wFRGM/qIm/cfXXw62LVfid0yEW4hPZvCuRbPj/APpIWA== X-Received: by 2002:a05:6214:318b:b0:6ab:9863:f47 with SMTP id 6a1803df08f44-6b02bf839b1mr1022446d6.32.1717524262106; Tue, 04 Jun 2024 11:04:22 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE8kZVZDB/qY95UtXJ+//L07Tq8FKHY2qxR9chCehiV7dl5lq4LZm8M0ROhZBJjtAN0/tcaFw== X-Received: by 2002:a05:6214:318b:b0:6ab:9863:f47 with SMTP id 6a1803df08f44-6b02bf839b1mr1022036d6.32.1717524261577; Tue, 04 Jun 2024 11:04:21 -0700 (PDT) Received: from [10.0.0.174] ([24.225.234.80]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6aecd700ef0sm39778516d6.10.2024.06.04.11.04.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 04 Jun 2024 11:04:21 -0700 (PDT) Message-ID: Date: Tue, 4 Jun 2024 14:04:20 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 1/3] tcp: move seq_to_tap update to when frame is queued From: Jon Maloy To: David Gibson References: <20240515153429.859185-1-jmaloy@redhat.com> <20240515153429.859185-2-jmaloy@redhat.com> <1967b10f-479e-686e-9afc-ff52184f4198@redhat.com> <26391ddb-bea0-4c7a-abab-823c19897133@redhat.com> In-Reply-To: <26391ddb-bea0-4c7a-abab-823c19897133@redhat.com> X-Mimecast-Spam-Score: 0 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: 3UVSMU3FQ4UAWPYVVLPMGFHYOXWME6Z3 X-Message-ID-Hash: 3UVSMU3FQ4UAWPYVVLPMGFHYOXWME6Z3 X-MailFrom: jmaloy@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, sbrivio@redhat.com, lvivier@redhat.com, dgibson@redhat.com 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: SGkgRGF2aWQsDQpGb3VuZCBpdCAobm90IHlvdXIgbWlzc2luZyBjb21tZW50LCBidXQgdGhlIGJ1 ZyksIGFuZCBpdCBmaXhlZCB0aGUgcHJvYmxlbS4NCkknbGwgcG9zdCB0aGlzIHBhdGNoIHNlcGFy YXRlbHkgc2hvcnRseS4NCg0KLy8vam9uDQoNCg0KT24gMjAyNC0wNi0wNCAxMzozNiwgSm9uIE1h bG95IHdyb3RlOg0KPiBIaSBEYXZpZCwNCj4gVGhpcyBpcyB0aGUgbGFzdCBjb21tZW50IEkgcmVj ZWl2ZWQgZnJvbSB5b3UgcmVnYXJkaW5nIHRoaXMgcGF0Y2guDQo+IFNlZSBiZWxvdyBmb3IgZnVy dGhlciBjb21tZW50Lg0KPg0KPiBPbiAyMDI0LTA1LTE2IDAwOjE2LCBEYXZpZCBHaWJzb24gd3Jv dGU6DQo+PiBPbiBXZWQsIE1heSAxNSwgMjAyNCBhdCAxMDo1NzowNlBNIC0wNDAwLCBKb24gTWFs b3kgd3JvdGU6DQo+Pj4NCj4+PiBPbiAyMDI0LTA1LTE1IDIyOjI0LCBEYXZpZCBHaWJzb24gd3Jv dGU6DQo+Pj4+IE9uIFdlZCwgTWF5IDE1LCAyMDI0IGF0IDExOjM0OjI3QU0gLTA0MDAsIEpvbiBN YWxveSB3cm90ZToNCj4+Pj4+IGNvbW1pdCBhNDY5ZmMzOTNmYTEgKCJ0Y3AsIHRhcDogRG9uJ3Qg aW5jcmVhc2UgdGFwLXNpZGUgc2VxdWVuY2UgDQo+Pj4+PiBjb3VudGVyIGZvciBkcm9wcGVkIGZy YW1lcyIpDQo+Pj4+PiBkZWxheWVkIHVwZGF0ZSBvZiBjb25uLT5zZXFfdG9fdGFwIHVudGlsIHRo ZSBtb21lbnQgdGhlIGNvcnJlc3BvbmRpbmcNCj4+Pj4+IGZyYW1lIGhhcyBiZWVuIHN1Y2Nlc3Nm dWxseSBwdXNoZWQgb3V0LiBUaGlzIGhhcyB0aGUgYWR2YW50YWdlIA0KPj4+Pj4gdGhhdCB3ZQ0K Pj4+Pj4gaW1tZWRpYXRlbHkgY2FuIG1ha2UgYSBuZXcgYXR0ZW1wdCB0byB0cmFuc21pdCBhIGZy YW1lIGFmdGVyIGEgZmFpbGVkDQo+Pj4+PiB0cmFzbm1pdCwgcmF0aGVyIHRoYW4gd2FpdGluZyBm b3IgdGhlIHBlZXIgdG8gbGF0ZXIgZGlzY292ZXIgYSBnYXAgDQo+Pj4+PiBhbmQNCj4+Pj4+IHRy aWdnZXIgdGhlIGZhc3QgcmV0cmFuc21pdCBtZWNoYW5pc20gdG8gc29sdmUgdGhlIHByb2JsZW0u DQo+Pj4+Pg0KPj4+Pj4gVGhpcyBhcHByb2FjaCBoYXMgdHVybmVkIG91dCB0byBjYXVzZSBhIHBy b2JsZW0gd2l0aCBzcHVyaW91cyANCj4+Pj4+IHNlcXVlbmNlDQo+Pj4+PiBudW1iZXIgdXBkYXRl cyBkdXJpbmcgcGVlci1pbml0aWF0ZWQgcmV0cmFuc21pdHMsIGFuZCB3ZSBoYXZlIA0KPj4+Pj4g cmVhbGl6ZWQNCj4+Pj4+IGl0IG1heSBub3QgYmUgdGhlIGJlc3Qgd2F5IHRvIHNvbHZlIHRoZSBh Ym92ZSBpc3N1ZS4NCj4+Pj4+DQo+Pj4+PiBXZSBub3cgcmVzdG9yZSB0aGUgcHJldmlvdXMgbWV0 aG9kLCBieSB1cGRhdGluZyB0aGUgc2FpZCBmaWVsZCBhdCB0aGUNCj4+Pj4+IG1vbWVudCBhIGZy YW1lIGlzIGFkZGVkIHRvIHRoZSBvdXRxdWV1ZS4gVG8gcmV0YWluIHRoZSBhZHZhbnRhZ2Ugb2YN Cj4+Pj4+IGhhdmluZyBhIHF1aWNrIHJlLWF0dGVtcHQgYmFzZWQgb24gbG9jYWwgZmFpbHVyZSBk ZXRlY3Rpb24sIHdlIG5vdyANCj4+Pj4+IHNjYW4NCj4+Pj4+IHRocm91Z2ggdGhlIHBhcnQgb2Yg dGhlIG91dHF1ZXVlIHRoYXQgaGFkIGRvIGJlIGRyb3BwZWQsIGFuZCANCj4+Pj4+IHJlc3RvcmUg dGhlDQo+Pj4+PiBzZXF1ZW5jZSBjb3VudGVyIGZvciBlYWNoIGFmZmVjdGVkIGNvbm5lY3Rpb24g dG8gdGhlIG1vc3QgYXBwcm9wcmlhdGUNCj4+Pj4+IHZhbHVlLg0KPj4+Pj4NCj4+Pj4+IFNpZ25l ZC1vZmYtYnk6IEpvbiBNYWxveSA8am1hbG95QHJlZGhhdC5jb20+DQo+Pj4+Pg0KPj4+Pj4gLS0t DQo+Pj4+PiB2MjogLSBSZS1zcHVuIGxvb3AgaW4gdGNwX3JldmVydF9zZXEoKSBhbmQgc29tZSBv dGhlciBjaGFuZ2VzIA0KPj4+Pj4gYmFzZWQgb24NCj4+Pj4+IMKgwqDCoMKgwqDCoMKgIGZlZWRi YWNrIGZyb20gU3RlZmFubyBCcml2aW8uDQo+Pj4+PiDCoMKgwqDCoMKgIC0gQWRkZWQgcGFyYW5v aWQgdGVzdCB0byBhdm9pZCB0aGF0IHNlcV90b190YXAgYmVjb21lcyBsb3dlciANCj4+Pj4+IHRo YW4NCj4+Pj4+IMKgwqDCoMKgwqDCoMKgIHNlcV9hY2tfZnJvbV90YXAuDQo+Pj4+Pg0KPj4+Pj4g djM6IC0gSWRlbnRpY2FsIHRvIHYyLiBDYWxsZWQgdjMgYmVjYXVzZSBpdCB3YXMgZW1iZWRkZWQg aW4gYSBzZXJpZXMNCj4+Pj4+IMKgwqDCoMKgwqDCoMKgIHdpdGggdGhhdCB2ZXJzaW9uLg0KPj4+ Pj4NCj4+Pj4+IHY0OiAtIEluIHRjcF9yZXZlcnRfc2VxKCksIHdlIHJlYWQgdGhlIHNlcXVlbmNl IG51bWJlciBmcm9tIHRoZSBUQ1ANCj4+Pj4+IMKgwqDCoMKgwqDCoMKgIGhlYWRlciBpbnN0ZWFk IG9mIGtlZXBpbmcgYSBjb3B5IGluIHN0cnVjdCANCj4+Pj4+IHRjcF9idWZfc2VxX3VwZGF0ZS4N Cj4+Pj4+IMKgwqDCoMKgwqAgLSBTaW5jZSB0aGUgb25seSByZW1haW5pbmcgZmllbGQgaW4gc3Ry dWN0IA0KPj4+Pj4gdGNwX2J1Zl9zZXFfdXBkYXRlIGlzDQo+Pj4+PiDCoMKgwqDCoMKgwqDCoCBh IHBvaW50ZXIgdG8gc3RydWN0IHRjcF90YXBfY29ubiwgd2UgZWxpbWluYXRlIHRoZSBzdHJ1Y3QN Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgIGFsdG9nZXRoZXIsIGFuZCBtYWtlIHRoZSB0Y3A2L3RjcDNf YnVmX3NlcV91cGRhdGUgYXJyYXlzIGludG8NCj4+Pj4+IMKgwqDCoMKgwqDCoMKgIGFycmF5cyBv ZiBzYWlkIHBvaW50ZXIuDQo+Pj4+PiDCoMKgwqDCoMKgIC0gUmVtb3ZlZCAncGFyYW5vaWQnIHRl c3QgaW4gdGNwX3JldmVydF9zZXEuIElmIGl0IGhhcHBlbnMsIGl0DQo+Pj4+PiDCoMKgwqDCoMKg wqDCoCBpcyBub3QgZmF0YWwsIGFuZCB3aWxsIGJlIGNhdWdodCBieSBvdGhlciBjb2RlIGFueXdh eS4NCj4+Pj4+IMKgwqDCoMKgwqAgLSBTZXBhcmF0ZWQgZnJvbSB0aGUgc2VyaWVzIGFnYWluLg0K Pj4+Pj4gLS0tDQo+Pj4+PiDCoMKgIHRjcC5jIHwgNTkgDQo+Pj4+PiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPj4+Pj4gwqDCoCAx IGZpbGUgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pDQo+Pj4+Pg0K Pj4+Pj4gZGlmZiAtLWdpdCBhL3RjcC5jIGIvdGNwLmMNCj4+Pj4+IGluZGV4IDIxZDBhZjAuLjk3 NmRiYTggMTAwNjQ0DQo+Pj4+PiAtLS0gYS90Y3AuYw0KPj4+Pj4gKysrIGIvdGNwLmMNCj4+Pj4+ IEBAIC00MTAsMTYgKzQxMCw2IEBAIHN0YXRpYyBpbnQgdGNwX3NvY2tfbnMgW05VTV9QT1JUU11b SVBfVkVSU0lPTlNdOw0KPj4+Pj4gwqDCoMKgICovDQo+Pj4+PiDCoMKgIHN0YXRpYyB1bmlvbiBp bmFueV9hZGRyIGxvd19ydHRfZHN0W0xPV19SVFRfVEFCTEVfU0laRV07DQo+Pj4+PiAtLyoqDQo+ Pj4+PiAtICogdGNwX2J1Zl9zZXFfdXBkYXRlIC0gU2VxdWVuY2VzIHRvIHVwZGF0ZSB3aXRoIGxl bmd0aCBvZiBmcmFtZXMgDQo+Pj4+PiBvbmNlIHNlbnQNCj4+Pj4+IC0gKiBAc2VxOsKgwqDCoCBQ b2ludGVyIHRvIHNlcXVlbmNlIG51bWJlciBzZW50IHRvIHRhcC1zaWRlLCB0byBiZSANCj4+Pj4+ IHVwZGF0ZWQNCj4+Pj4+IC0gKiBAbGVuOsKgwqDCoCBUQ1AgcGF5bG9hZCBsZW5ndGgNCj4+Pj4+ IC0gKi8NCj4+Pj4+IC1zdHJ1Y3QgdGNwX2J1Zl9zZXFfdXBkYXRlIHsNCj4+Pj4+IC3CoMKgwqAg dWludDMyX3QgKnNlcTsNCj4+Pj4+IC3CoMKgwqAgdWludDE2X3QgbGVuOw0KPj4+Pj4gLX07DQo+ Pj4+PiAtDQo+Pj4+PiDCoMKgIC8qIFN0YXRpYyBidWZmZXJzICovDQo+Pj4+PiDCoMKgIC8qKg0K Pj4+Pj4gwqDCoMKgICogc3RydWN0IHRjcF9wYXlsb2FkX3QgLSBUQ1AgaGVhZGVyIGFuZCBkYXRh IHRvIHNlbmQgc2VnbWVudHMgDQo+Pj4+PiB3aXRoIHBheWxvYWQNCj4+Pj4+IEBAIC00NjEsNyAr NDUxLDggQEAgc3RhdGljIHN0cnVjdCB0Y3BfcGF5bG9hZF90IA0KPj4+Pj4gdGNwNF9wYXlsb2Fk W1RDUF9GUkFNRVNfTUVNXTsNCj4+Pj4+IMKgwqAgc3RhdGljX2Fzc2VydChNU1M0IDw9IHNpemVv Zih0Y3A0X3BheWxvYWRbMF0uZGF0YSksICJNU1M0IGlzIA0KPj4+Pj4gZ3JlYXRlciB0aGFuIDY1 NTE2Iik7DQo+Pj4+PiAtc3RhdGljIHN0cnVjdCB0Y3BfYnVmX3NlcV91cGRhdGUgdGNwNF9zZXFf dXBkYXRlW1RDUF9GUkFNRVNfTUVNXTsNCj4+Pj4+ICsvKiBSZWZlcmVuY2VzIHRyYWNraW5nIHRo ZSBvd25lciBjb25uZWN0aW9uIG9mIGZyYW1lcyBpbiB0aGUgdGFwIA0KPj4+Pj4gb3V0cXVldWUg Ki8NCj4+Pj4+ICtzdGF0aWMgc3RydWN0IHRjcF90YXBfY29ubiAqdGNwNF9mcmFtZV9jb25uc1tU Q1BfRlJBTUVTX01FTV07DQo+Pj4+PiDCoMKgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGNwNF9wYXls b2FkX3VzZWQ7DQo+Pj4+PiDCoMKgIHN0YXRpYyBzdHJ1Y3QgdGFwX2hkciB0Y3A0X2ZsYWdzX3Rh cF9oZHJbVENQX0ZSQU1FU19NRU1dOw0KPj4+Pj4gQEAgLTQ4Myw3ICs0NzQsOCBAQCBzdGF0aWMg c3RydWN0IHRjcF9wYXlsb2FkX3QgDQo+Pj4+PiB0Y3A2X3BheWxvYWRbVENQX0ZSQU1FU19NRU1d Ow0KPj4+Pj4gwqDCoCBzdGF0aWNfYXNzZXJ0KE1TUzYgPD0gc2l6ZW9mKHRjcDZfcGF5bG9hZFsw XS5kYXRhKSwgIk1TUzYgaXMgDQo+Pj4+PiBncmVhdGVyIHRoYW4gNjU1MTYiKTsNCj4+Pj4+IC1z dGF0aWMgc3RydWN0IHRjcF9idWZfc2VxX3VwZGF0ZSB0Y3A2X3NlcV91cGRhdGVbVENQX0ZSQU1F U19NRU1dOw0KPj4+Pj4gKy8qIFJlZmVyZW5jZXMgdHJhY2tpbmcgdGhlIG93bmVyIGNvbm5lY3Rp b24gb2YgZnJhbWVzIGluIHRoZSB0YXAgDQo+Pj4+PiBvdXRxdWV1ZSAqLw0KPj4+Pj4gK3N0YXRp YyBzdHJ1Y3QgdGNwX3RhcF9jb25uICp0Y3A2X2ZyYW1lX2Nvbm5zW1RDUF9GUkFNRVNfTUVNXTsN Cj4+Pj4+IMKgwqAgc3RhdGljIHVuc2lnbmVkIGludCB0Y3A2X3BheWxvYWRfdXNlZDsNCj4+Pj4+ IMKgwqAgc3RhdGljIHN0cnVjdCB0YXBfaGRyIHRjcDZfZmxhZ3NfdGFwX2hkcltUQ1BfRlJBTUVT X01FTV07DQo+Pj4+PiBAQCAtMTI2MSwyNSArMTI1Myw0OSBAQCBzdGF0aWMgdm9pZCB0Y3BfZmxh Z3NfZmx1c2goY29uc3Qgc3RydWN0IA0KPj4+Pj4gY3R4ICpjKQ0KPj4+Pj4gwqDCoMKgwqDCoMKg IHRjcDRfZmxhZ3NfdXNlZCA9IDA7DQo+Pj4+PiDCoMKgIH0NCj4+Pj4+ICsvKioNCj4+Pj4+ICsg KiB0Y3BfcmV2ZXJ0X3NlcSgpIC0gUmV2ZXJ0IGFmZmVjdGVkIGNvbm4tPnNlcV90b190YXAgYWZ0 ZXIgDQo+Pj4+PiBmYWlsZWQgdHJhbnNtaXNzaW9uDQo+Pj4+PiArICogQGNvbm5zOsKgwqDCoMKg wqDCoCBBcnJheSBvZiBjb25uZWN0aW9uIHBvaW50ZXJzIGNvcnJlc3BvbmRpbmcgdG8gDQo+Pj4+ PiBxdWV1ZWQgZnJhbWVzDQo+Pj4+PiArICogQGZyYW1lczrCoMKgwqDCoMKgIFR3by1kaW1lbnNp b25hbCBhcnJheSBjb250YWluaW5nIHF1ZXVlZCBmcmFtZXMgDQo+Pj4+PiB3aXRoIHN1Yi1pb3Zz DQo+Pj4+IFlvdSBjYW4gbWFrZSB0aGUgMmQgYXJyYXkgZXhwbGljaXQgaW4gdGhlIHR5cGUgYXM6 DQo+Pj4+IMKgwqDCoMKgc3RydWN0IGlvdmVjICgqZnJhbWVzKVtUQ1BfTlVNX0lPVlNdOw0KPj4+ PiBTZWUsIGZvciBleGFtcGxlIHRoZSAndGFwX2lvdicgbG9jYWwgaW4gdWRwX3RhcF9zZW5kKCku wqDCoCAoSSByZWNvbW1lbmQNCj4+Pj4gdGhlIGNvbW1hbmQgbGluZSB0b29sICdjZGVjbCcsIGFs c28gYXZhaWxhYmxlIG9ubGluZSBhdCBjZGVjbC5vcmcgZm9yDQo+Pj4+IHdvcmtpbmcgb3V0IGNv bmZ1c2luZyBwb2ludGVyLXRvLWFycmF5IHR5cGVzKS4NCj4+PiBOaWNlLiBJwqAgd2Fzbid0IHF1 aXRlIGhhcHB5IHdpdGggdGhpcy4NCj4+Pj4+ICsgKiBAbnVtX2ZyYW1lczrCoCBOdW1iZXIgb2Yg ZW50cmllcyBpbiB0aGUgdHdvIGFycmF5cyB0byBiZSBjb21wYXJlZA0KPj4+Pj4gKyAqLw0KPj4+ Pj4gK3N0YXRpYyB2b2lkIHRjcF9yZXZlcnRfc2VxKHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKipjb25u cywgc3RydWN0IA0KPj4+Pj4gaW92ZWMgKmZyYW1lcywNCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGludCBudW1fZnJhbWVzKQ0KPj4+Pj4gK3sNCj4+Pj4+ICvCoMKgwqAgaW50 IGMsIGY7DQo+Pj4+PiArDQo+Pj4+PiArwqDCoMKgIGZvciAoYyA9IDAsIGYgPSAwOyBjIDwgbnVt X2ZyYW1lczsgYysrLCBmICs9IFRDUF9OVU1fSU9WUykgew0KPj4+PiBOaXQ6IEkgZmluZCBoYXZp bmcgdGhlIHR3byBwYXJhbGxlbCBjb3VudGVycyBraW5kIG9mIGNvbmZ1c2luZy7CoCBJdA0KPj4+ PiBuYXR1cmFsbHkgZ29lcyBhd2F5IHdpdGggdGhlIHR5cGUgY2hhbmdlIHN1Z2dlc3RlZCBhYm92 ZSwgYnV0IGV2ZW4NCj4+Pj4gd2l0aG91dCB0aGF0IEknZCBwcmVmZXIgYW4gZXhwbGljaXQgbXVs dGlwbHkgaW4gdGhlIGJvZHkuwqAgSSBzdHJvbmdseQ0KPj4+PiBzdXNwZWN0IHRoZSBjb21waWxl ciB3aWxsIGJlIGJldHRlciBhdCB3b3JraW5nIG91dCBpZiB0aGUgc3RyZW5ndGgNCj4+Pj4gcmVk dWN0aW9uIGlzIHdvcnRoIGl0Lg0KPj4+Pg0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCB0 Y3BfdGFwX2Nvbm4gKmNvbm4gPSBjb25uc1tjXTsNCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgdGNwaGRyICp0aCA9IGZyYW1lc1tmICsgVENQX0lPVl9QQVlMT0FEXS5pb3ZfYmFzZTsNCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCB1aW50MzJfdCBzZXEgPSBudG9obCh0aC0+c2VxKTsNCj4+Pj4+ ICsNCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoU0VRX0xFKGNvbm4tPnNlcV90b190YXAsIHNl cSkpDQo+Pj4+IElzbid0IHRoaXMgdGVzdCBpbnZlcnRlZD/CoCBXZSB3YW50IHRvIHJld2luZCBz ZXFfdG9fdGFwIGlmIHNlcSBpcyBsZXNzDQo+Pj4+IHRoYW4gaXQsIHJhdGhlciB0aGFuIHRoZSBv dGhlciB3YXkgYXJ1b25kLg0KPj4+IE5vLiBXZSBkbyAnY29udGludWUnLCBpLmUuLCBub3RoaW5n LCBpZiB0aGlzIGNvbmRpdGlvbiBpcyBmdWxmaWxsZWQuDQo+Pj4gVGhpcyBtYXkgbG9vayBhIGxp dHRsZSBub24taW50dWl0aXZlIGhlcmUsIGJ1dCBtYWtlcyBzZW5zZSB3aGVuIEkgDQo+Pj4gYWRk IHRoZQ0KPj4+IG5leHQgcGF0Y2guDQo+PiBPaCwgb2YgY291cnNlLCBteSBtaXN0YWtlLg0KPj4N Cj4NCj4gVGhlIGNvZGUgbm93ICh2NykgbG9va3MgYXMgZm9sbG93czoNCj4NCj4gLyoqDQo+IMKg KiB0Y3BfcmV2ZXJ0X3NlcSgpIC0gUmV2ZXJ0IGFmZmVjdGVkIGNvbm4tPnNlcV90b190YXAgYWZ0 ZXIgZmFpbGVkIA0KPiB0cmFuc21pc3Npb24NCj4gwqAqIEBjb25uczrCoMKgwqDCoMKgwqAgQXJy YXkgb2YgY29ubmVjdGlvbiBwb2ludGVycyBjb3JyZXNwb25kaW5nIHRvIHF1ZXVlZCANCj4gZnJh bWVzDQo+IMKgKiBAZnJhbWVzOsKgwqDCoMKgwqAgVHdvLWRpbWVuc2lvbmFsIGFycmF5IGNvbnRh aW5pbmcgcXVldWVkIGZyYW1lcyB3aXRoIA0KPiBzdWItaW92cw0KPiDCoCogQG51bV9mcmFtZXM6 wqAgTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHR3byBhcnJheXMgdG8gYmUgY29tcGFyZWQNCj4g wqAqLw0KPiBzdGF0aWMgdm9pZCB0Y3BfcmV2ZXJ0X3NlcShzdHJ1Y3QgdGNwX3RhcF9jb25uICoq Y29ubnMsIHN0cnVjdCBpb3ZlYyANCj4gKCpmcmFtZXMpW1RDUF9OVU1fSU9WU10sDQo+IMKgwqDC oMKgwqDCoMKgIMKgIMKgwqDCoMKgwqAgwqAgwqDCoMKgwqDCoMKgwqDCoCBpbnQgbnVtX2ZyYW1l cykNCj4gew0KPiDCoMKgwqDCoMKgwqDCoCBpbnQgaTsNCj4NCj4gwqDCoMKgwqDCoMKgwqAgZm9y IChpID0gMDsgaSA8IG51bV9mcmFtZXM7IGkrKykgew0KPiDCoMKgwqDCoMKgwqDCoCDCoCDCoMKg wqDCoMKgIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4gPSBjb25uc1tpXTsNCj4gwqDCoMKgwqDC oMKgwqAgwqAgwqDCoMKgwqDCoCBzdHJ1Y3QgdGNwaGRyICp0aCA9IGZyYW1lc1tpXVtUQ1BfSU9W X1BBWUxPQURdLmlvdl9iYXNlOw0KPiDCoMKgwqDCoMKgwqDCoCDCoCDCoMKgwqDCoMKgIHVpbnQz Ml90IHNlcSA9IG50b2hsKHRoLT5zZXEpOw0KPg0KPiDCoMKgwqDCoMKgwqDCoCDCoCDCoMKgwqDC oMKgIGlmIChTRVFfTEUoY29ubi0+c2VxX3RvX3RhcCwgc2VxKSkNCj4gwqDCoMKgwqDCoMKgwqAg wqAgwqDCoMKgwqDCoCDCoCDCoMKgwqDCoMKgIGNvbnRpbnVlOw0KPg0KPiDCoMKgwqDCoMKgwqDC oCDCoCDCoMKgwqDCoMKgIGNvbm4tPnNlcV90b190YXAgPSBzZXE7DQo+IMKgwqDCoMKgwqDCoMKg IMKgIMKgwqDCoMKgwqAgdGNwX3NldF9wZWVrX29mZnNldChjb25uLT5zb2NrLCBzZXEgLSANCj4g Y29ubi0+c2VxX2Fja19mcm9tX3RhcCk7DQo+IMKgwqDCoMKgwqDCoMKgIH0NCj4gfQ0KPg0KPiAv KioNCj4gwqAqIHRjcF9wYXlsb2FkX2ZsdXNoKCkgLSBTZW5kIG91dCBidWZmZXJzIGZvciBzZWdt ZW50cyB3aXRoIGRhdGENCj4gwqAqIEBjOsKgIMKgIMKgwqDCoMKgwqAgRXhlY3V0aW9uIGNvbnRl eHQNCj4gwqAqLw0KPiBzdGF0aWMgdm9pZCB0Y3BfcGF5bG9hZF9mbHVzaChjb25zdCBzdHJ1Y3Qg Y3R4ICpjKQ0KPiB7DQo+IMKgwqDCoMKgwqDCoMKgIHNpemVfdCBtOw0KPg0KPiDCoMKgwqDCoMKg wqDCoCBtID0gdGFwX3NlbmRfZnJhbWVzKGMsICZ0Y3A2X2wyX2lvdlswXVswXSwgVENQX05VTV9J T1ZTLA0KPiDCoMKgwqDCoMKgwqDCoCDCoCDCoMKgwqDCoMKgIMKgIMKgwqDCoMKgwqDCoMKgwqDC oCB0Y3A2X3BheWxvYWRfdXNlZCk7DQo+IMKgwqDCoMKgwqDCoMKgIGlmIChtICE9IHRjcDZfcGF5 bG9hZF91c2VkKSB7DQo+IMKgwqDCoMKgwqDCoMKgIMKgIMKgwqDCoMKgwqAgdGNwX3JldmVydF9z ZXEodGNwNl9mcmFtZV9jb25ucywgJnRjcDZfbDJfaW92W21dLA0KPiDCoMKgwqDCoMKgwqDCoCDC oCDCoMKgwqDCoMKgIMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0Y3A2X3BheWxvYWRfdXNl ZCAtIG0pOw0KPiDCoMKgwqDCoMKgwqDCoCB9DQo+IMKgwqDCoMKgwqDCoMKgIHRjcDZfcGF5bG9h ZF91c2VkID0gMDsNCj4NCj4gwqDCoMKgwqDCoMKgwqAgbSA9IHRhcF9zZW5kX2ZyYW1lcyhjLCAm dGNwNF9sMl9pb3ZbMF1bMF0sIFRDUF9OVU1fSU9WUywNCj4gwqDCoMKgwqDCoMKgwqAgwqAgwqDC oMKgwqDCoCDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgdGNwNF9wYXlsb2FkX3VzZWQpOw0KPiDCoMKg wqDCoMKgwqDCoCBpZiAobSAhPSB0Y3A0X3BheWxvYWRfdXNlZCkgew0KPiDCoMKgwqDCoMKgwqDC oCDCoCDCoMKgwqDCoMKgIHRjcF9yZXZlcnRfc2VxKHRjcDRfZnJhbWVfY29ubnMsICZ0Y3A0X2wy X2lvdlttXSwNCj4gwqDCoMKgwqDCoMKgwqAgwqAgwqDCoMKgwqDCoCDCoCDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdGNwNF9wYXlsb2FkX3VzZWQgLSBtKTsNCj4gwqDCoMKgwqDCoMKgwqAgfQ0K PiDCoMKgwqDCoMKgwqDCoCB0Y3A0X3BheWxvYWRfdXNlZCA9IDA7DQo+IH0NCj4NCj4gV2FzIHRo aXMgdGhlIHZlcnNpb24geW91IHdlcmUgdGFsa2luZyBhYm91dCBvbiBNb25kYXkgbW9ybmluZz8N Cj4gRGlkIHlvdSBzcG90IHNvbWUgYnVnIGhlcmUgd2hpY2ggSSBhbSBtaXNzaW5nPw0KPg0KPiBU aGFua3MNCj4gLy8vam9uDQo+DQoNCg==