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=QBv5G6q3; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTPS id 163475A0265 for ; Wed, 09 Sep 2026 17:13:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1788966819; 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=Q+zBjmziBV2bteHRk5IZFylEMAvXy3fK3CM0pmLhGnc=; b=QBv5G6q34V8UgJVbdQtfGdzRgHZOQzNrW2GdaHsaWAtNokXaL7I4kQ0tnGhGqQ3DhImK8D hs/TgFb0Mrth8sNp08SGwMSZLarznClEWUf9udHt6g/Nhy1SdjV+N1x6VtPV2MrQSoW0gT OvgMinQKb2ulx/Atriozkz/wQzZ6Yqs= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-562-vBhq1xuOPcKsEITsRguRoQ-1; Wed, 09 Sep 2026 11:13:38 -0400 X-MC-Unique: vBhq1xuOPcKsEITsRguRoQ-1 X-Mimecast-MFC-AGG-ID: vBhq1xuOPcKsEITsRguRoQ_1788966817 Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-49d1a778b9dso22600825e9.0 for ; Wed, 09 Sep 2026 08:13:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788966817; x=1789571617; h=content-transfer-encoding:content-type: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:content-type; bh=Q+zBjmziBV2bteHRk5IZFylEMAvXy3fK3CM0pmLhGnc=; b=BbWKmZYveV7g5YsNaElFka44TrMfbW0k63Aa6vsXfvrIWXScYo8jmvdCx9h24TVAqr jXxRcswJe4QiCs4vTnQm+c5/pHCaVbd1H75NESxD2w/hHd01OfrYZhbd4vduIt1BDZ+2 Z2+5IIkFQ7yq3WNJnyQ+7lak6KHcuZgMXMhOFwW/aPUga2S1cMkuh7cmuDgC4gcOVy1k 7yOKCVnKTNp1ZGxGz6g5Ev+i29qSmaOMXS0GZCgQZrXfIg8v4hPIZ0czXznFIxB7Xlyk /K7ns+NuO0gtS3CA+eqNkxMkB/rGBpzYptpNdDshf1g44aPZyGbtiSFKIip6H8ajgcDF QNhg== X-Forwarded-Encrypted: i=1; AKwUvBx+7qvb4OHvPmyuPSaEfMjvlIjDyUuiBbWPZ0o7VvldRno2t7/nI24cNKoAJlNVPiSir2H85gu+xXw=@passt.top X-Gm-Message-State: AFuF++nyP7w3tRSJ8DPWHGPAkhS7DIewqIM+XRXGg5946O87OVeO97jm +1n+1LFHAiZ9tWIuUWaFpoqSSxEtj5qmfI+mMcNwatLivVkQ/ZQz6wirKTZWRPfwXBRqEQ8egfY DnG4Qj0ar5sok9Q2+jLMGD4aEO7CGWxiavgLO/ukM40Sa0TDjv+lt2Q== X-Gm-Gg: AYBFou1Grzl0LFSXQaKdN8dXEJ+h0UmAX7hy4VhAFP4NZ90ElRkxeoFaee/X4WE3p+K /T4XF6IwWyN0X0I5UYvws/4b49KB7wxlenkbn9v4PX5lzQpwqsY0pN6T85300k9oKuXTpC20yAb 1/m/5gvbFLRn/kwxIh9Vdw1B7IuxCmnPR2DHJh4qJ8lP1v5zOW+kGjBxqmMoxEJP6yrCX7oC52d N8+ClpoSoMyXWm+IPUiVh2z9txs5Q94PmqjQKuMs4WW1N0h2yZGkIY1StoX5KYleqd7+mKhfNAZ /xf33GSEC/yx64oaNeS04kS8civ5/3hrTW6e+8oGU/DcAx0FFEZf2x/o/qKKlALaLuNDF0CMh1a 6xVqigt15QibeUkerefJpU2U3KiR0sfvM7HMuKa8gH6U= X-Received: by 2002:a05:600c:6c07:b0:49d:1cc7:5ec3 with SMTP id 5b1f17b1804b1-49d259138abmr26635415e9.9.1788966816758; Wed, 09 Sep 2026 08:13:36 -0700 (PDT) X-Received: by 2002:a05:600c:6c07:b0:49d:1cc7:5ec3 with SMTP id 5b1f17b1804b1-49d259138abmr26634525e9.9.1788966816119; Wed, 09 Sep 2026 08:13:36 -0700 (PDT) Received: from ?IPV6:2a01:e0a:e10:ef90:d92c:7e4a:47e6:1b23? ([2a01:e0a:e10:ef90:d92c:7e4a:47e6:1b23]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49d1fd58c31sm53330675e9.1.2026.09.09.08.13.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 09 Sep 2026 08:13:35 -0700 (PDT) Message-ID: <16b9f003-4144-4383-b837-a3ad09017bd3@redhat.com> Date: Wed, 9 Sep 2026 17:13:34 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 3/7] virtio: Add the pasta vhost-net interface and implementation To: aerosouund , passt-dev@passt.top References: <20260904212826.41027-1-aerosound161@gmail.com> <20260904212826.41027-4-aerosound161@gmail.com> From: Laurent Vivier Autocrypt: addr=lvivier@redhat.com; keydata= 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 In-Reply-To: <20260904212826.41027-4-aerosound161@gmail.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: XnbhgSEoigicH9ReJo1-9uTe3lh-bP7tdLsoF9H7ogw_1788966817 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: ZB74INXPDVJAQILAJPFCV5ZHM7OO547N X-Message-ID-Hash: ZB74INXPDVJAQILAJPFCV5ZHM7OO547N 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: eperezma@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: T24gOS80LzI2IDIzOjI4LCBhZXJvc291dW5kIHdyb3RlOg0KPiBGcm9tOiBBbW1hciBZYXNzZXIg PGFlcm9zb3VuZDE2MUBnbWFpbC5jb20+DQo+IA0KPiBBZGQgdmhvc3QuYyBhbmQgdmhvc3QuaCB3 aGljaCBkZWZpbmUgdGhlIGFwaSBhbmQgaW1wbGVtZW50YXRpb24gZm9yDQo+IHBhc3RhIHZob3N0 IGFjY2VsZXJhdGlvbg0KPiANCj4gLSB2cV9zdGF0ZS92aG9zdF92cV9zdGF0ZVtdOiBvdXIgb3du IHZpZXcgb2YgZWFjaCB2aXJ0cXVldWUsIHdoaWNoIHRoZQ0KPiAgICBrZXJuZWwgZG9lc24ndCB0 cmFjayBmb3IgdXM6IGRlc2NyaXB0b3JzIHJlYWR5IHRvIGhhbmQgYmFjaywgaG93IGZhcg0KPiAg ICB3ZSd2ZSByZWFkIHRoZSB1c2VkIHJpbmcsIGFuZCB0aGUgbmV4dCBkZXNjcmlwdG9yIHRvIGFs bG9jYXRlDQo+IC0gdnJpbmdfZGVzYywgdnJpbmdfYXZhaWxfYWxsLCB2cmluZ191c2VkX2FsbCwg dmhvc3RfbWVtb3J5OiB0aGUgcmluZ3MNCj4gICAgYW5kIHRoZSByZWdpb24gdGFibGUgc2hhcmVk IHdpdGggdGhlIGtlcm5lbA0KPiAtIHZob3N0X3NldHVwX25ldDogb3BlbiAvZGV2L3Zob3N0LW5l dCBhbmQgbmVnb3RpYXRlIFZJUlRJT19GX1ZFUlNJT05fMQ0KPiAgICBhbmQgVkhPU1RfTkVUX0Zf VklSVElPX05FVF9IRFIuIEZhaWx1cmUgaXMgZmF0YWwgb25seSBpZg0KPiAgICAtLXZob3N0LWtl cm5lbCBpcyBzZXQgdG8gJ29uJy4NCj4gLSB2aG9zdF9zZXR1cF9ldmVudGZkczogY3JlYXRlLCBy ZWdpc3RlciBhbmQgd2F0Y2ggdGhlIGNhbGwsIGtpY2sgYW5kDQo+ICAgIGVycm9yIGV2ZW50ZmRz IGZvciBvbmUgcXVldWUNCj4gLSB2aG9zdF9zZXR1cF9tZW1vcnlfdGFibGU6IHJlZ2lzdGVyIHRo ZSBidWZmZXJzIHRoZSBrZXJuZWwgbWF5IHRvdWNoLg0KPiAgICBwYXN0YSBoYXMgbm8gZ3Vlc3Qs IHNvIGVhY2ggcmVnaW9uIG1hcHMgZ3Vlc3RfcGh5c19hZGRyIG9udG8gdGhlDQo+ICAgIGlkZW50 aWNhbCB1c2Vyc3BhY2VfYWRkciwgbWFraW5nIEdQQSB0cmFuc2xhdGlvbiBhbiBpZGVudGl0eSBt YXBwaW5nLg0KPiAgICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlICpfcmVnaXN0ZXJfbWVtb3J5X3Jl Z2lvbnMgZnVuY3Rpb25zIGNyZWF0ZWQgcGVyDQo+ICAgIHByb3RvY29sIGFuZCBmb3IgZ2VuZXJh bCBwdXJwb3NlIGJ1ZmZlcnMuDQo+IC0gdmhvc3Rfc2V0X3ZyaW5nOiBwdWJsaXNoIGEgdnJpbmcn cyBhZGRyZXNzZXMsIGJpbmQgdGhlIHRhcCBmZCBhcyBpdHMNCj4gICAgYmFja2VuZCBhbmQgbGF5 IG91dCBpdHMgZGVzY3JpcHRvcnMNCj4gLSB2aG9zdF9yeF9kZXNjcmlwdG9yX2hhbmRvZmYsIHZo b3N0X2tpY2s6IGhhbmQgY29uc3VtZWQgZGVzY3JpcHRvcnMgYmFjaw0KPiAgICBhbmQgbm90aWZ5 IHRoZSBrZXJuZWwgdW5sZXNzIGl0IHNheXMgaXQncyBhbHJlYWR5IHBvbGxpbmcNCj4gDQo+IFNp Z25lZC1vZmYtYnk6IEV1Z2VuaW8gUMOpcmV6IDxlcGVyZXptYUByZWRoYXQuY29tPg0KPiBTaWdu ZWQtb2ZmLWJ5OiBBbW1hciBZYXNzZXIgPGFlcm9zb3VuZDE2MUBnbWFpbC5jb20+DQo+IC0tLQ0K PiAgIE1ha2VmaWxlICB8ICAgMiArLQ0KPiAgIHRjcF9idWYuYyB8ICAxNiArKy0NCj4gICB0Y3Bf YnVmLmggfCAgIDQgKw0KPiAgIHVkcC5jICAgICB8ICAxNCArKysNCj4gICB1ZHAuaCAgICAgfCAg IDMgKw0KPiAgIHV0aWwuYyAgICB8ICAxMiArKysNCj4gICB1dGlsLmggICAgfCAgIDIgKw0KPiAg IHZob3N0LmMgICB8IDI5NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysNCj4gICB2aG9zdC5oICAgfCAgNzkgKysrKysrKysrKysrKysrDQo+ICAg OSBmaWxlcyBjaGFuZ2VkLCA0MjUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkNCj4gICBj cmVhdGUgbW9kZSAxMDA2NDQgdmhvc3QuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB2aG9zdC5o DQo+IA0KPiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQ0KPiBpbmRleCBiMzE1MjQy Li43NGQwZjk2IDEwMDY0NA0KPiAtLS0gYS9NYWtlZmlsZQ0KPiArKysgYi9NYWtlZmlsZQ0KPiBA QCAtMzgsNyArMzgsNyBAQCBQQVNTVF9TUkNTID0gYXJjaC5jIGFycC5jIGJpdG1hcC5jIGNoZWNr c3VtLmMgY29uZi5jIGRoY3AuYyBkaGNwdjYuYyBcDQo+ICAgCWlzb2xhdGlvbi5jIGxpbmVyZWFk LmMgbG9nLmMgbWxkLmMgbmRwLmMgbmV0bGluay5jIG1pZ3JhdGUuYyBwYWNrZXQuYyBcDQo+ICAg CXBhcnNlLmMgcGFzc3QuYyBwYXN0YS5jIHBjYXAuYyBwaWYuYyByZXBhaXIuYyBzZXJpYWxpc2Uu YyB0YXAuYyB0Y3AuYyBcDQo+ICAgCXRjcF9idWYuYyB0Y3Bfc3BsaWNlLmMgdGNwX3Z1LmMgdWRw LmMgdWRwX2Zsb3cuYyB1ZHBfdnUuYyB1dGlsLmMgXA0KPiAtCXZob3N0X3VzZXIuYyB2aXJ0aW8u YyB2dV9jb21tb24uYw0KPiArCXZob3N0LmMgdmhvc3RfdXNlci5jIHZpcnRpby5jIHZ1X2NvbW1v bi5jDQo+ICAgUEFTU1RfUkVQQUlSX1NSQ1MgPSBwYXNzdC1yZXBhaXIuYw0KPiAgIFBFU1RPX1NS Q1MgPSBwZXN0by5jIGJpdG1hcC5jIGZ3ZF9ydWxlLmMgaW5hbnkuYyBpcC5jIGxpbmVyZWFkLmMg cGFyc2UuYyBcDQo+ICAgCXNlcmlhbGlzZS5jDQo+IGRpZmYgLS1naXQgYS90Y3BfYnVmLmMgYi90 Y3BfYnVmLmMNCj4gaW5kZXggNzJjNDU0MS4uMWYyODcyOCAxMDA2NDQNCj4gLS0tIGEvdGNwX2J1 Zi5jDQo+ICsrKyBiL3RjcF9idWYuYw0KPiBAQCAtMzEsNyArMzEsNyBAQA0KPiAgICNpbmNsdWRl ICJpbmFueS5oIg0KPiAgICNpbmNsdWRlICJ0Y3BfY29ubi5oIg0KPiAgICNpbmNsdWRlICJ0Y3Bf aW50ZXJuYWwuaCINCj4gLSNpbmNsdWRlICJ0Y3BfYnVmLmgiDQo+ICsjaW5jbHVkZSAidmhvc3Qu aCINCj4gICANCj4gICAjZGVmaW5lIFRDUF9GUkFNRVNfTUVNCQkJMTI4DQo+ICAgI2RlZmluZSBU Q1BfRlJBTUVTCQkJCQkJCSAgIFwNCj4gQEAgLTc1LDYgKzc1LDIwIEBAIHZvaWQgdGNwX3VwZGF0 ZV9sMl9idWYoY29uc3QgdW5zaWduZWQgY2hhciAqZXRoX2QpDQo+ICAgCQlldGhfdXBkYXRlX21h YygmdGNwX2V0aF9oZHJbaV0sIGV0aF9kLCBOVUxMKTsNCj4gICB9DQo+ICAgDQo+ICsvKioNCj4g KyAqIHRjcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9uKCkgLSBSZWdpc3RlciB0aGUgVENQIHNwZWNp ZmljIGJ1ZmZlcnMgaW50byBhIG1lbW9yeQ0KPiArICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBzbyBpdCBjYW4gYmUgc2hhcmVkIHdpdGggdGhlIGtlcm5lbC4NCj4gKyAq IEB2aG9zdF9tZW06IFRoZSBtZW1vcnkgc3RydWN0IHRvIHJlZ2lzdGVyIHJlZ2lvbnMgaW50bw0K PiArICogQGxhc3RfaWR4OiAgVGhlIGxhc3QgaW5kZXggYXQgd2hpY2ggbWVtb3J5IHJlZ2lvbiBo YXMgYmVlbiBwbGFjZWQNCj4gKyAqLw0KPiArdm9pZCB0Y3BfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lv bnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0X21lbSwgc2l6ZV90ICpsYXN0X2lkeCkgew0K PiArICAgCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1P UllfUkVHSU9OKHRjcF9wYXlsb2FkX3RhcF9oZHIpOw0KPiArCXZob3N0X21lbS0+bWVtLnJlZ2lv bnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHRjcDRfcGF5bG9hZF9pcCk7 DQo+ICsJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9S WV9SRUdJT04odGNwNl9wYXlsb2FkX2lwKTsNCj4gKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygq bGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih0Y3BfcGF5bG9hZCk7DQo+ICsJdmhv c3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04o dGNwX2V0aF9oZHIpOw0KDQpZb3Ugc2hvdWxkIGNoZWNrIHRoaXMgZG9lc24ndCBvdmVmbG93IHZo b3N0X21lbS0+bWVtLnJlZ2lvbnNbXQ0KDQo+ICt9DQo+ICsNCj4gICAvKioNCj4gICAgKiB0Y3Bf c29ja19pb3ZfaW5pdCgpIC0gSW5pdGlhbGlzZSBzY2F0dGVyLWdhdGhlciBMMiBidWZmZXJzIGZv ciBJUHY0IHNvY2tldHMNCj4gICAgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+IGRpZmYgLS1n aXQgYS90Y3BfYnVmLmggYi90Y3BfYnVmLmgNCj4gaW5kZXggNWQzMWNlYS4uNWUzNDFlZCAxMDA2 NDQNCj4gLS0tIGEvdGNwX2J1Zi5oDQo+ICsrKyBiL3RjcF9idWYuaA0KPiBAQCAtNiwxMSArNiwx NSBAQA0KPiAgICNpZm5kZWYgVENQX0JVRl9IDQo+ICAgI2RlZmluZSBUQ1BfQlVGX0gNCj4gICAN Cj4gK3VuaW9uIHZob3N0X21lbW9yeV91Ow0KPiArc3RydWN0IHRjcF90YXBfY29ubjsNCj4gKw0K PiAgIHZvaWQgdGNwX3NvY2tfaW92X2luaXQoY29uc3Qgc3RydWN0IGN0eCAqYyk7DQo+ICAgdm9p ZCB0Y3BfcGF5bG9hZF9mbHVzaChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBjb25zdCBzdHJ1Y3QgdGlt ZXNwZWMgKm5vdyk7DQo+ICAgaW50IHRjcF9idWZfZGF0YV9mcm9tX3NvY2soY29uc3Qgc3RydWN0 IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCj4gICAJCQkgICB1aW50MzJfdCBh bHJlYWR5X3NlbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCj4gICBpbnQgdGNwX2J1 Zl9zZW5kX2ZsYWcoY29uc3Qgc3RydWN0IGN0eCAqYywgc3RydWN0IHRjcF90YXBfY29ubiAqY29u biwgaW50IGZsYWdzLA0KPiAgIAkJICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpOw0K PiArdm9pZCB0Y3BfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3Ug KnZob3N0X21lbSwgc2l6ZV90ICpsYXN0X2lkeCk7DQo+ICAgDQo+ICAgI2VuZGlmICAvKlRDUF9C VUZfSCAqLw0KPiBkaWZmIC0tZ2l0IGEvdWRwLmMgYi91ZHAuYw0KPiBpbmRleCA1MDVlNTU0Li41 ZTNiZDg2IDEwMDY0NA0KPiAtLS0gYS91ZHAuYw0KPiArKysgYi91ZHAuYw0KPiBAQCAtMTE4LDYg KzExOCw3IEBADQo+ICAgI2luY2x1ZGUgInVkcF9pbnRlcm5hbC5oIg0KPiAgICNpbmNsdWRlICJ1 ZHBfdnUuaCINCj4gICAjaW5jbHVkZSAiZXBvbGxfY3RsLmgiDQo+ICsjaW5jbHVkZSAidmhvc3Qu aCINCj4gICANCj4gICAjZGVmaW5lIFVEUF9NQVhfRlJBTUVTCQkzMiAgLyogbWF4ICMgb2YgZnJh bWVzIHRvIHJlY2VpdmUgYXQgb25jZSAqLw0KPiAgIA0KPiBAQCAtNDQ4LDYgKzQ0OSwxOSBAQCBz dGF0aWMgdm9pZCB1ZHBfc2VuZF90YXBfaWNtcDQoY29uc3Qgc3RydWN0IGN0eCAqYywNCj4gICAJ dGFwX2ljbXA0X3NlbmQoYywgc2FkZHIsIGVhZGRyLCAmbXNnLCB0YXBfb21hYywgbXNnbGVuKTsN Cj4gICB9DQo+ICAgDQo+ICsvKioNCj4gKyAqIHVkcF9yZWdpc3Rlcl9tZW1vcnlfcmVnaW9uKCkg LSBSZWdpc3RlciB0aGUgVURQIHNwZWNpZmljIGJ1ZmZlcnMgaW50byBhIG1lbW9yeQ0KPiArICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbyBpdCBjYW4gYmUgc2hhcmVk IHdpdGggdGhlIGtlcm5lbC4NCj4gKyAqIEB2aG9zdF9tZW06IFRoZSBtZW1vcnkgc3RydWN0IHRv IHJlZ2lzdGVyIHJlZ2lvbnMgaW50bw0KPiArICogQGxhc3RfaWR4OiAgVGhlIGxhc3QgaW5kZXgg YXQgd2hpY2ggbWVtb3J5IHJlZ2lvbiBoYXMgYmVlbiBwbGFjZWQNCj4gKyAqLw0KPiArdm9pZCB1 ZHBfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0X21l bSwgc2l6ZV90ICpsYXN0X2lkeCkgew0KPiArICAgCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCps YXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHVkcF9wYXlsb2FkKTsNCj4gKwl2aG9z dF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih1 ZHBfZXRoX2hkcik7DQo+ICsJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9 IFZIT1NUX01FTU9SWV9SRUdJT04odWRwX2lvdl9yZWN2KTsNCj4gKwl2aG9zdF9tZW0tPm1lbS5y ZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih1ZHBfbWhfcmVjdik7 DQo+ICsJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9S WV9SRUdJT04odWRwX21ldGEpOw0KDQpZb3Ugc2hvdWxkIGNoZWNrIHRoaXMgZG9lc24ndCBvdmVm bG93IHZob3N0X21lbS0+bWVtLnJlZ2lvbnNbXQ0KDQo+ICt9DQo+ICAgDQo+ICAgLyoqDQo+ICAg ICogdWRwX3NlbmRfdGFwX2ljbXA2KCkgLSBDb25zdHJ1Y3QgYW5kIHNlbmQgSUNNUHY2IHRvIGxv Y2FsIHBlZXINCj4gZGlmZiAtLWdpdCBhL3VkcC5oIGIvdWRwLmgNCj4gaW5kZXggYjUwMjgzZS4u ZWJmMWE0ZSAxMDA2NDQNCj4gLS0tIGEvdWRwLmgNCj4gKysrIGIvdWRwLmgNCj4gQEAgLTExLDYg KzExLDggQEANCj4gICANCj4gICAjaW5jbHVkZSAiZndkLmgiDQo+ICAgDQo+ICt1bmlvbiB2aG9z dF9tZW1vcnlfdTsNCj4gKw0KPiAgIHZvaWQgdWRwX2xpc3Rlbl9zb2NrX2hhbmRsZXIoY29uc3Qg c3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVmIHJlZiwNCj4gICAJCQkgICAgIHVpbnQzMl90 IGV2ZW50cywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cpOw0KPiAgIHZvaWQgdWRwX3NvY2tf aGFuZGxlcihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bmlvbiBlcG9sbF9yZWYgcmVmLA0KPiBAQCAt MjEsNiArMjMsNyBAQCBpbnQgdWRwX3RhcF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdHggKmMsIHVp bnQ4X3QgcGlmLA0KPiAgIAkJICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCj4gICBp bnQgdWRwX2luaXQoc3RydWN0IGN0eCAqYyk7DQo+ICAgdm9pZCB1ZHBfdXBkYXRlX2wyX2J1Zihj b25zdCB1bnNpZ25lZCBjaGFyICpldGhfZCk7DQo+ICt2b2lkIHVkcF9yZWdpc3Rlcl9tZW1vcnlf cmVnaW9ucyh1bmlvbiB2aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXplX3QgKmxhc3RfaWR4 KTsNCj4gICANCj4gICAvKioNCj4gICAgKiBzdHJ1Y3QgdWRwX2N0eCAtIEV4ZWN1dGlvbiBjb250 ZXh0IGZvciBVRFANCj4gZGlmZiAtLWdpdCBhL3V0aWwuYyBiL3V0aWwuYw0KPiBpbmRleCAyOGMz MmU0Li5hOTk0ZDg4IDEwMDY0NA0KPiAtLS0gYS91dGlsLmMNCj4gKysrIGIvdXRpbC5jDQo+IEBA IC0zNiw2ICszNiw3IEBADQo+ICAgI2luY2x1ZGUgImVwb2xsX2N0bC5oIg0KPiAgICNpbmNsdWRl ICJwYXN0YS5oIg0KPiAgICNpbmNsdWRlICJzZXJpYWxpc2UuaCINCj4gKyNpbmNsdWRlICJ2aG9z dC5oIg0KPiAgICNpZmRlZiBIQVNfR0VUUkFORE9NDQo+ICAgI2luY2x1ZGUgPHN5cy9yYW5kb20u aD4NCj4gICAjZW5kaWYNCj4gQEAgLTQ1Niw2ICs0NTcsMTcgQEAgaW50IG9wZW5faW5fbnMoY29u c3Qgc3RydWN0IGN0eCAqYywgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKQ0KPiAgIAlyZXR1 cm4gYXJnLmZkOw0KPiAgIH0NCj4gICANCj4gKy8qKg0KPiArICogZ2VuZXJhbF9yZWdpc3Rlcl9t ZW1vcnlfcmVnaW9uKCkgLSBSZWdpc3RlciB0aGUgZ2VuZXJhbCAobm9uIHByb3RvY29sIHNwZWNp ZmljKSBidWZmZXJzDQo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dG8gYSBtZW1vcnkgc3RydWN0IHNvIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB0aGUga2VybmVsLg0K PiArICogQHZob3N0X21lbTogVGhlIG1lbW9yeSBzdHJ1Y3QgdG8gcmVnaXN0ZXIgcmVnaW9ucyBp bnRvDQo+ICsgKiBAbGFzdF9pZHg6ICBUaGUgbGFzdCBpbmRleCBhdCB3aGljaCBtZW1vcnkgcmVn aW9uIGhhcyBiZWVuIHBsYWNlZA0KPiArICovDQo+ICt2b2lkIGdlbmVyYWxfcmVnaXN0ZXJfbWVt b3J5X3JlZ2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0X21lbSwgc2l6ZV90ICpsYXN0 X2lkeCkgew0KPiArICAgCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBW SE9TVF9NRU1PUllfUkVHSU9OKHBrdF9idWYpOw0KPiArCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNb KCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKGV0aF9wYWQpOw0KDQpZb3Ugc2hv dWxkIGNoZWNrIHRoaXMgZG9lc24ndCBvdmVmbG93IHZob3N0X21lbS0+bWVtLnJlZ2lvbnNbXQ0K DQo+ICt9DQo+ICsNCj4gICAvKioNCj4gICAgKiBwaWRmaWxlX3dyaXRlKCkgLSBXcml0ZSBQSUQg dG8gZmlsZSwgaWYgcmVxdWVzdGVkIHRvIGRvIHNvLCBhbmQgY2xvc2UgaXQNCj4gICAgKiBAZmQ6 CQlPcGVuIFBJRCBmaWxlIGRlc2NyaXB0b3IsIGNsb3NlZCBvbiBleGl0LCAtMSB0byBza2lwIHdy aXRpbmcgaXQNCj4gZGlmZiAtLWdpdCBhL3V0aWwuaCBiL3V0aWwuaA0KPiBpbmRleCAyNDM1ZjUz Li4yN2VhYzIyIDEwMDY0NA0KPiAtLS0gYS91dGlsLmgNCj4gKysrIGIvdXRpbC5oDQo+IEBAIC0x NDUsNiArMTQ1LDcgQEAgaW50IGRvX2Nsb25lKGludCAoKmZuKSh2b2lkICopLCBjaGFyICpzdGFj a19hcmVhLCBzaXplX3Qgc3RhY2tfc2l6ZSwgaW50IGZsYWdzLA0KPiAgIA0KPiAgIHN0cnVjdCBj dHg7DQo+ICAgdW5pb24gc29ja2FkZHJfaW5hbnk7DQo+ICt1bmlvbiB2aG9zdF9tZW1vcnlfdTsN Cj4gICANCj4gICBpbnQgc29ja19sNChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBlbnVtIGVwb2xsX3R5 cGUgdHlwZSwNCj4gICAJICAgIGNvbnN0IHVuaW9uIHNvY2thZGRyX2luYW55ICpzYSwgY29uc3Qg Y2hhciAqaWZuYW1lKTsNCj4gQEAgLTE3MCw2ICsxNzEsNyBAQCBpbnQgd3JpdGVfcmVtYWluZGVy KGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBpb3ZjbnQsDQo+ICAgaW50 IHJlYWRfcmVtYWluZGVyKGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBj bnQsIHNpemVfdCBza2lwKTsNCj4gICBib29sIHNucHJpbnRmX2NoZWNrKGNoYXIgKnN0ciwgc2l6 ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsNCj4gICBsb25nIGNsYW1wZWRfc2Nh bGUobG9uZyB4LCBsb25nIHksIGxvbmcgbG8sIGxvbmcgaGksIGxvbmcgZik7DQo+ICt2b2lkIGdl bmVyYWxfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0 X21lbSwgc2l6ZV90ICpsYXN0X2lkeCk7DQo+ICAgDQo+ICAgLyoqDQo+ICAgICogYWZfbmFtZSgp IC0gUmV0dXJuIG5hbWUgb2YgYW4gYWRkcmVzcyBmYW1pbHkNCj4gZGlmZiAtLWdpdCBhL3Zob3N0 LmMgYi92aG9zdC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjBj NjBjMjENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi92aG9zdC5jDQo+IEBAIC0wLDAgKzEsMjk1 IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcg0KPiAr LyogQ29weXJpZ2h0IFJlZCBIYXQNCj4gKyAqIEF1dGhvcjogQW1tYXIgWWFzc2VyIDxhZXJvc291 bmQxNjFAZ21haWwuY29tPg0KPiArICoNCj4gKyAqIHZob3N0LmMgLSB2aG9zdC1uZXQgKHZob3N0 LWtlcm5lbCkgYWNjZWxlcmF0aW9uIGZvciBwYXN0YSBtb2RlDQo+ICsgKi8NCj4gKw0KPiArI2lu Y2x1ZGUgPGVycm5vLmg+DQo+ICsjaW5jbHVkZSA8ZmNudGwuaD4NCj4gKyNpbmNsdWRlIDxpbnR0 eXBlcy5oPg0KPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiArI2luY2x1ZGUgPHN0cmluZy5oPg0K PiArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KPiArI2luY2x1ZGUgPHN5cy9ldmVudGZkLmg+DQo+ICsj aW5jbHVkZSA8c3lzL2lvY3RsLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJ1dGlsLmgiDQo+ICsjaW5j bHVkZSAicGFzc3QuaCINCj4gKyNpbmNsdWRlICJ2aG9zdC5oIg0KPiArI2luY2x1ZGUgImVwb2xs X2N0bC5oIg0KPiArI2luY2x1ZGUgInVkcC5oIg0KPiArI2luY2x1ZGUgInRjcF9idWYuaCINCj4g Kw0KPiArc3RydWN0IHZxX3N0YXRlIHZob3N0X3ZxX3N0YXRlWzJdOw0KPiArDQo+ICtzdHJ1Y3Qg dnJpbmdfZGVzYyB2cmluZ19kZXNjWzJdW1ZIT1NUX05ERVNDU10NCj4gKwkJCQlfX2F0dHJpYnV0 ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsNCj4gKw0KPiArI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp YyBwdXNoDQo+ICsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcGVkYW50aWMiDQo+ ICt1bmlvbiB2cmluZ19hdmFpbF91IHZyaW5nX2F2YWlsX2FsbFsyXSBfX2F0dHJpYnV0ZV9fKChh bGlnbmVkKFBBR0VfU0laRSkpKTsNCj4gK3VuaW9uIHZyaW5nX3VzZWRfdSB2cmluZ191c2VkX2Fs bFsyXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsNCj4gKyNwcmFnbWEgR0ND IGRpYWdub3N0aWMgcG9wDQoNCkkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkIGlnbm9yZSAiLVdwZWRh bnRpYyIuDQo+ICsNCj4gK3VuaW9uIHZob3N0X21lbW9yeV91IHZob3N0X21lbW9yeSA9IHsNCj4g KwkubWVtID0gew0KPiArCQkubnJlZ2lvbnMgPSBOX1ZIT1NUX1JFR0lPTlMsDQo+ICsJfSwNCj4g K307DQo+ICsNCj4gKy8qKg0KPiArICogdmhvc3Rfc2V0dXBfbmV0KCkgLSBPcGVuIGFuZCBuZWdv dGlhdGUgZmVhdHVyZXMgb24gL2Rldi92aG9zdC1uZXQNCj4gKyAqIEBjOgkJRXhlY3V0aW9uIGNv bnRleHQ7IGMtPnZob3N0LmZkIGFuZCBjLT52aG9zdC5mZWF0dXJlcyBhcmUgc2V0DQo+ICsgKgkJ b24gc3VjY2VzcywgYW5kIGxlZnQgdW50b3VjaGVkIG9uIGZhaWx1cmUNCj4gKyAqDQo+ICsgKiBG YWlsdXJlIGhlcmUgbWVhbnMgdmhvc3QtbmV0IGlzbid0IHVzYWJsZSwgbm90IHRoYXQgcGFzdGEg Y2FuJ3QgcnVuOiB0aGUNCj4gKyAqIGNhbGxlciBmYWxscyBiYWNrIHRvIHBsYWluIHRhcCBvcGVy YXRpb24gdW5sZXNzIGFjY2VsZXJhdGlvbiB3YXMgcmVxdWlyZWQuDQo+ICsgKiBUaGF0J3Mgd2h5 IG5vdGhpbmcgaW4gaGVyZSBpcyBmYXRhbC4NCj4gKyAqDQo+ICsgKiBSZXR1cm46IDAgb24gc3Vj Y2VzcywgLTEgaWYgdmhvc3QtbmV0IGlzIHVuYXZhaWxhYmxlIG9yIHVudXNhYmxlDQo+ICsgKi8N Cj4gK2ludCB2aG9zdF9zZXR1cF9uZXQoc3RydWN0IGN0eCAqYykNCj4gK3sNCj4gKwljb25zdCB1 aW50NjRfdCByZXFfZmVhdHVyZXMgPSAoMVVMTCA8PCBWSVJUSU9fRl9WRVJTSU9OXzEpIHwNCj4g KwkJCQkgICAgICAoMVVMTCA8PCBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUik7DQo+ICsJdWlu dDY0X3QgZmVhdHVyZXM7DQo+ICsJaW50IHZob3N0X2ZkOw0KPiArDQo+ICsJdmhvc3RfZmQgPSBv cGVuKCIvZGV2L3Zob3N0LW5ldCIsIE9fUkRXUiB8IE9fTk9OQkxPQ0sgfCBPX0NMT0VYRUMpOw0K PiArCWlmICh2aG9zdF9mZCA8IDApIHsNCj4gKwkJZGVidWdfcGVycm9yKCJDb3VsZG4ndCBvcGVu IC9kZXYvdmhvc3QtbmV0Iik7DQo+ICsJCXJldHVybiAtMTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAo aW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9PV05FUiwgTlVMTCkgPCAwKSB7DQo+ICsJCWRlYnVn X3BlcnJvcigiVkhPU1RfU0VUX09XTkVSIGlvY3RsIGZhaWxlZCIpOw0KPiArCQlnb3RvIGNsb3Nl X2ZkOw0KPiArCX0NCj4gKw0KPiArCWlmIChpb2N0bCh2aG9zdF9mZCwgVkhPU1RfR0VUX0ZFQVRV UkVTLCAmZmVhdHVyZXMpIDwgMCkgew0KPiArCQlkZWJ1Z19wZXJyb3IoIlZIT1NUX0dFVF9GRUFU VVJFUyBpb2N0bCBmYWlsZWQiKTsNCj4gKwkJZ290byBjbG9zZV9mZDsNCj4gKwl9DQo+ICsNCj4g KwlpZiAoKGZlYXR1cmVzICYgcmVxX2ZlYXR1cmVzKSAhPSByZXFfZmVhdHVyZXMpIHsNCj4gKwkJ ZGVidWcoInZob3N0LW5ldCBpcyBtaXNzaW5nIGZlYXR1cmVzOiAweCUwMTYiIFBSSXg2NCwNCj4g KwkJICAgICAgcmVxX2ZlYXR1cmVzICYgfmZlYXR1cmVzKTsNCj4gKwkJZ290byBjbG9zZV9mZDsN Cj4gKwl9DQo+ICsNCj4gKwlmZWF0dXJlcyA9IHJlcV9mZWF0dXJlczsNCj4gKwlpZiAoaW9jdGwo dmhvc3RfZmQsIFZIT1NUX1NFVF9GRUFUVVJFUywgJmZlYXR1cmVzKSA8IDApIHsNCj4gKwkJZGVi dWdfcGVycm9yKCJWSE9TVF9TRVRfRkVBVFVSRVMgaW9jdGwgZmFpbGVkIik7DQo+ICsJCWdvdG8g Y2xvc2VfZmQ7DQo+ICsJfQ0KPiArDQo+ICsJYy0+dmhvc3QuZmVhdHVyZXMgPSBmZWF0dXJlczsN Cj4gKwljLT52aG9zdC5mZCA9IHZob3N0X2ZkOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICsNCj4g K2Nsb3NlX2ZkOg0KPiArCWNsb3NlKHZob3N0X2ZkKTsNCj4gKw0KPiArCXJldHVybiAtMTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgKiB2aG9zdF9zZXR1cF9ldmVudGZkcygpIC0gU2V0IHVwIG9u ZSBxdWV1ZSdzIGV2ZW50ZmRzIGFuZCByaW5nIHNpemUNCj4gKyAqIEBjOgkJRXhlY3V0aW9uIGNv bnRleHQ7IGMtPnZob3N0LmZkIG11c3QgYWxyZWFkeSBiZSBzZXQNCj4gKyAqIEBxdWV1ZV9pZHg6 CUluZGV4IG9mIHRoZSBxdWV1ZSAodnJpbmcpIHRvIGNvbmZpZ3VyZQ0KPiArICoNCj4gKyAqLw0K PiArdm9pZCB2aG9zdF9zZXR1cF9ldmVudGZkcyhzdHJ1Y3QgY3R4ICpjLCBpbnQgcXVldWVfaWR4 KQ0KPiArew0KPiArCXN0cnVjdCB2aG9zdF92cmluZ19maWxlIGNhbGxfZmlsZSA9IHsgLmluZGV4 ID0gcXVldWVfaWR4IH07DQo+ICsJc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUga2lja19maWxlID0g eyAuaW5kZXggPSBxdWV1ZV9pZHggfTsNCj4gKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSBlcnJf ZmlsZSA9IHsgLmluZGV4ID0gcXVldWVfaWR4IH07DQo+ICsJc3RydWN0IHZob3N0X3ZyaW5nX3N0 YXRlIHN0YXRlID0geyAuaW5kZXggPSBxdWV1ZV9pZHggfTsNCg0KUGVyaGFwcyB5b3UgY2FuIGRl Y2FsZSBvbmx5IG9uZSBzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSBhbmQgcmV1c2UgaXQgZm9yIGFs bCAodGhlIA0KcXVldWVfaWR4IGRvZXNuJ3QgY2hhbmdlKS4NCg0KPiArCXVuaW9uIGVwb2xsX3Jl ZiByZWYgPSB7IC50eXBlID0gRVBPTExfVFlQRV9WSE9TVF9DQUxMIH07DQo+ICsJaW50IHZob3N0 X2ZkID0gYy0+dmhvc3QuZmQ7DQo+ICsJc3RydWN0IGVwb2xsX2V2ZW50IGV2Ow0KPiArCWludCBy YzsNCj4gKw0KPiArCXN0YXRlLm51bSA9IFZIT1NUX05ERVNDUzsNCj4gKwlyZWYucXVldWUgPSBx dWV1ZV9pZHg7DQo+ICsNCj4gKwljYWxsX2ZpbGUuZmQgPSBldmVudGZkKDAsIEVGRF9OT05CTE9D SyB8IEVGRF9DTE9FWEVDKTsNCj4gKwlpZiAoY2FsbF9maWxlLmZkIDwgMCkNCj4gKwkJZGllX3Bl cnJvcigiRmFpbGVkIHRvIGNyZWF0ZSB2aG9zdCBjYWxsIGV2ZW50ZmQsIHF1ZXVlICVkIiwNCj4g KwkJCSAgIHF1ZXVlX2lkeCk7DQoNCmFzIHlvdSB1cGRhdGUgcmVmIGxhdGVyLCBwZXJoYXBzIGFk ZCByZWYudHlwZSA9IEVQT0xMX1RZUEVfVkhPU1RfQ0FMTCBoZXJlIGFuZCBub3Qgc2V0IG9uIA0K ZGVjbGFyYXRpb24uDQoNCj4gKwlyZWYuZmQgPSBjYWxsX2ZpbGUuZmQ7DQo+ICsNCj4gKwlyYyA9 IGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfVlJJTkdfQ0FMTCwgJmNhbGxfZmlsZSk7DQo+ICsJ aWYgKHJjIDwgMCkNCj4gKwkJZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZSSU5HX0NBTEwgaW9jdGwg ZmFpbGVkLCBxdWV1ZSAlZCIsDQo+ICsJCQkgICBxdWV1ZV9pZHgpOw0KPiArDQo+ICsJZXYgPSAo c3RydWN0IGVwb2xsX2V2ZW50KXsgLmRhdGEudTY0ID0gcmVmLnU2NCwgLmV2ZW50cyA9IEVQT0xM SU4gfTsNCj4gKwlyYyA9IGVwb2xsX2N0bChjLT5lcG9sbGZkLCBFUE9MTF9DVExfQURELCByZWYu ZmQsICZldik7DQoNCndlIGNhbiB1c2UgZXBvbGxfYWRkKCkgaGVyZQ0KDQoNCj4gKwlpZiAocmMg PCAwKQ0KPiArCQlkaWVfcGVycm9yKCJGYWlsZWQgdG8gd2F0Y2ggdmhvc3QgY2FsbCBldmVudGZk LCBxdWV1ZSAlZCIsDQo+ICsJCQkgICBxdWV1ZV9pZHgpOw0KPiArCWMtPnZob3N0LnZxW3F1ZXVl X2lkeF0uY2FsbF9mZCA9IGNhbGxfZmlsZS5mZDsNCj4gKw0KPiArCWVycl9maWxlLmZkID0gZXZl bnRmZCgwLCBFRkRfTk9OQkxPQ0sgfCBFRkRfQ0xPRVhFQyk7DQo+ICsJaWYgKGVycl9maWxlLmZk IDwgMCkNCj4gKwkJZGllX3BlcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSB2aG9zdCBlcnJvciBldmVu dGZkLCBxdWV1ZSAlZCIsDQo+ICsJCQkgICBxdWV1ZV9pZHgpOw0KPiArDQo+ICsJcmMgPSBpb2N0 bCh2aG9zdF9mZCwgVkhPU1RfU0VUX1ZSSU5HX0VSUiwgJmVycl9maWxlKTsNCj4gKwlpZiAocmMg PCAwKQ0KPiArCQlkaWVfcGVycm9yKCJWSE9TVF9TRVRfVlJJTkdfRVJSIGlvY3RsIGZhaWxlZCwg cXVldWUgJWQiLA0KPiArCQkJICAgcXVldWVfaWR4KTsNCj4gKw0KPiArCXJlZi50eXBlID0gRVBP TExfVFlQRV9WSE9TVF9FUlJPUjsNCj4gKwlyZWYuZmQgPSBlcnJfZmlsZS5mZDsNCj4gKwlldi5k YXRhLnU2NCA9IHJlZi51NjQ7DQo+ICsJcmMgPSBlcG9sbF9jdGwoYy0+ZXBvbGxmZCwgRVBPTExf Q1RMX0FERCwgcmVmLmZkLCAmZXYpOw0KDQplcG9sbF9hZGQoKQ0KDQo+ICsJaWYgKHJjIDwgMCkN Cj4gKwkJZGllX3BlcnJvcigiRmFpbGVkIHRvIHdhdGNoIHZob3N0IGVycm9yIGV2ZW50ZmQsIHF1 ZXVlICVkIiwNCj4gKwkJCSAgIHF1ZXVlX2lkeCk7DQo+ICsJYy0+dmhvc3QudnFbcXVldWVfaWR4 XS5lcnJfZmQgPSBlcnJfZmlsZS5mZDsNCj4gKw0KPiArCXJjID0gaW9jdGwodmhvc3RfZmQsIFZI T1NUX1NFVF9WUklOR19OVU0sICZzdGF0ZSk7DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJZGllX3Bl cnJvcigiVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBmYWlsZWQsIHF1ZXVlICVkIiwNCj4gKwkJ CSAgIHF1ZXVlX2lkeCk7DQo+ICsNCj4gKwlraWNrX2ZpbGUuZmQgPSBldmVudGZkKDAsIEVGRF9O T05CTE9DSyB8IEVGRF9DTE9FWEVDKTsNCj4gKwlpZiAoa2lja19maWxlLmZkIDwgMCkNCj4gKwkJ ZGllX3BlcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSB2aG9zdCBraWNrIGV2ZW50ZmQsIHF1ZXVlICVk IiwNCj4gKwkJCSAgIHF1ZXVlX2lkeCk7DQo+ICsNCj4gKwlyYyA9IGlvY3RsKHZob3N0X2ZkLCBW SE9TVF9TRVRfVlJJTkdfS0lDSywgJmtpY2tfZmlsZSk7DQo+ICsJaWYgKHJjIDwgMCkNCj4gKwkJ ZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZSSU5HX0tJQ0sgaW9jdGwgZmFpbGVkLCBxdWV1ZSAlZCIs DQo+ICsJCQkgICBxdWV1ZV9pZHgpOw0KPiArDQo+ICsJYy0+dmhvc3QudnFbcXVldWVfaWR4XS5r aWNrX2ZkID0ga2lja19maWxlLmZkOw0KPiArDQo+ICsJdmhvc3RfdnFfc3RhdGVbcXVldWVfaWR4 XS5udW1fZnJlZSA9IFZIT1NUX05ERVNDUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiB2aG9z dF9zZXR1cF9tZW1vcnlfdGFibGUoKSAtIFJlZ2lzdGVyIHRoZSBHUEEvSFZBIHRyYW5zbGF0aW9u IHRhYmxlDQo+ICsgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0OyBjLT52aG9zdC5mZCBtdXN0IGFs cmVhZHkgYmUgc2V0DQo+ICsgKg0KPiArICogdmhvc3QtbmV0IHJlYWRzIHRoZSBhZGRyZXNzZXMg d2UgcHV0IGluIGRlc2NyaXB0b3JzIGFzIGd1ZXN0IHBoeXNpY2FsDQo+ICsgKiBhZGRyZXNzZXMs IGFuZCB0cmFuc2xhdGVzIHRoZW0gdGhyb3VnaCB0aGlzIHRhYmxlIGJlZm9yZSB0b3VjaGluZyB0 aGUNCj4gKyAqIG1lbW9yeSB0aGV5IHJlZmVyIHRvLiBwYXN0YSBoYXMgbm8gZ3Vlc3QgYW5kIG5v IHNlY29uZCBhZGRyZXNzIHNwYWNlOg0KPiArICogdGhlIGFkZHJlc3NlcyB3ZSBwdXQgdGhlcmUg YXJlIG91ciBvd24gdmlydHVhbCBhZGRyZXNzZXMuIEV2ZXJ5IHJlZ2lvbg0KPiArICogYmVsb3cg dGhlcmVmb3JlIHNldHMgZ3Vlc3RfcGh5c19hZGRyIGVxdWFsIHRvIHVzZXJzcGFjZV9hZGRyLCBz byB0aGF0DQo+ICsgKiBHUEEgPT0gSFZBIGFuZCB0aGUgdHJhbnNsYXRpb24gaXMgYW4gaWRlbnRp dHkgbWFwcGluZy4NCj4gKyAqDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEgb24gZXJy b3Igd2l0aCBlcnJubyBzZXQNCj4gKyAqLw0KPiAraW50IHZob3N0X3NldHVwX21lbW9yeV90YWJs ZShzdHJ1Y3QgY3R4ICpjKSB7DQo+ICsJc2l6ZV90IHJlZ2lvbl9pZHggPSAwOw0KPiArDQo+ICsJ LyogZ2VuZXJhbCBwdXJwb3NlIGJ1ZmZlcnMgKi8NCj4gKwlnZW5lcmFsX3JlZ2lzdGVyX21lbW9y eV9yZWdpb25zKCZ2aG9zdF9tZW1vcnksICZyZWdpb25faWR4KTsNCj4gKw0KPiArCS8qIHRjcCBz cGVjaWZpYyBidWZmZXJzICovDQo+ICsJdGNwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKCZ2aG9z dF9tZW1vcnksICZyZWdpb25faWR4KTsNCj4gKw0KPiArCS8qIHVkcCBzcGVjaWZpYyBidWZmZXJz ICovDQo+ICsJdWRwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKCZ2aG9zdF9tZW1vcnksICZyZWdp b25faWR4KTsNCj4gKw0KPiArCXZob3N0X21lbW9yeS5tZW0ubnJlZ2lvbnMgPSByZWdpb25faWR4 Ow0KPiArDQo+ICsJcmV0dXJuIGlvY3RsKGMtPnZob3N0LmZkLCBWSE9TVF9TRVRfTUVNX1RBQkxF LCAmdmhvc3RfbWVtb3J5Lm1lbSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogdmhvc3Rfc2V0 X3ZyaW5nKCkgLSBSZWdpc3RlciBhIHZyaW5nJ3MgYWRkcmVzc2VzIGFuZCBiaW5kIGl0cyBiYWNr ZW5kDQo+ICsgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0OyBjLT52aG9zdC5mZCBtdXN0IGFscmVh ZHkgYmUgc2V0DQo+ICsgKiBAcXVldWVfaWR4OglJbmRleCBvZiB0aGUgcXVldWUgKHZyaW5nKSB0 byBjb25maWd1cmUNCj4gKyAqIEB0YXBfZmQ6CVRhcCBmZCB0byBiaW5kIGFzIHRoaXMgcXVldWUn cyBiYWNrZW5kDQo+ICsgKi8NCj4gK3ZvaWQgdmhvc3Rfc2V0X3ZyaW5nKHN0cnVjdCBjdHggKmMs IGludCBxdWV1ZV9pZHgsIGludCB0YXBfZmQpDQo+ICt7DQo+ICsJaW50IHZob3N0X2ZkID0gYy0+ dmhvc3QuZmQ7DQo+ICsJc3RydWN0IHZob3N0X3ZyaW5nX2FkZHIgYWRkciA9IHsNCj4gKwkJLmlu ZGV4ID0gcXVldWVfaWR4LA0KPiArCQkuZGVzY191c2VyX2FkZHIgPSAodW5zaWduZWQgbG9uZyl2 cmluZ19kZXNjW3F1ZXVlX2lkeF0sDQo+ICsJCS5hdmFpbF91c2VyX2FkZHIgPSAodW5zaWduZWQg bG9uZykmdnJpbmdfYXZhaWxfYWxsW3F1ZXVlX2lkeF0sDQo+ICsJCS51c2VkX3VzZXJfYWRkciA9 ICh1bnNpZ25lZCBsb25nKSZ2cmluZ191c2VkX2FsbFtxdWV1ZV9pZHhdLA0KPiArCQkubG9nX2d1 ZXN0X2FkZHIgPSAodW5zaWduZWQgbG9uZykmdnJpbmdfdXNlZF9hbGxbcXVldWVfaWR4XSwNCj4g Kwl9Ow0KPiArCXN0cnVjdCB2aG9zdF92cmluZ19maWxlIGZpbGUgPSB7DQo+ICsJCS5pbmRleCA9 IHF1ZXVlX2lkeCwNCj4gKwkJLmZkID0gdGFwX2ZkLA0KPiArCX07DQo+ICsJdW5zaWduZWQgaW50 IGk7DQo+ICsJaW50IHJjOw0KPiArDQo+ICsJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VU X1ZSSU5HX0FERFIsICZhZGRyKTsNCj4gKwlpZiAocmMgPCAwKQ0KPiArCQlkaWVfcGVycm9yKCJW SE9TVF9TRVRfVlJJTkdfQUREUiBpb2N0bCBmYWlsZWQsIHF1ZXVlICVkIiwNCj4gKwkJCSAgIHF1 ZXVlX2lkeCk7DQo+ICsNCj4gKwlpZiAocXVldWVfaWR4ID09IDApIHsNCj4gKwkJZm9yIChpID0g MDsgaSA8IFZIT1NUX05ERVNDUzsgKytpKSB7DQo+ICsJCQl2cmluZ19kZXNjWzBdW2ldLmFkZHIg PSAodWludHB0cl90KXBrdF9idWYgKw0KPiArCQkJCWkgKiBWSE9TVF9ERVNDX0JZVEVTOw0KPiAr CQkJdnJpbmdfZGVzY1swXVtpXS5sZW4gPSBWSE9TVF9ERVNDX0JZVEVTOw0KPiArCQkJdnJpbmdf ZGVzY1swXVtpXS5mbGFncyA9IFZSSU5HX0RFU0NfRl9XUklURTsNCj4gKwkJfQ0KPiArDQo+ICsJ CWZvciAoaSA9IDA7IGkgPCBWSE9TVF9OREVTQ1M7ICsraSkNCj4gKwkJCXZyaW5nX2F2YWlsX2Fs bFswXS5hdmFpbC5yaW5nW2ldID0gaHRvbGUxNihpKTsNCj4gKw0KPiArCQl2aG9zdF9yeF9kZXNj cmlwdG9yX2hhbmRvZmYoYyk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHF1ZXVlX2lkeCA9PSAxKSB7 DQo+ICsJCWZvciAoaSA9IDA7IGkgPCAoVkhPU1RfTkRFU0NTIC0gMSk7ICsraSkNCj4gKwkJCXZy aW5nX2Rlc2NbMV1baV0ubmV4dCA9IGkgKyAxOw0KPiArCX0NCg0KUGVyaGFwcyB5b3UgY2FuIHVz ZSBzb21ldGhpbmcgbGlrZSBWSE9TVF9VU0VSX0lTX1FVRVVFX1RYKCkvVkhPU1RfVVNFUl9JU19R VUVVRV9SWCgpIA0KcmF0aGVyIHRoZW4gcXVldWUgaW5kZXg/DQoNCj4gKw0KPiArCXJjID0gaW9j dGwodmhvc3RfZmQsIFZIT1NUX05FVF9TRVRfQkFDS0VORCwgJmZpbGUpOw0KPiArCWlmIChyYyA8 IDApDQo+ICsJCWRpZV9wZXJyb3IoIlZIT1NUX05FVF9TRVRfQkFDS0VORCBpb2N0bCBmYWlsZWQs IHF1ZXVlICVkIiwNCj4gKwkJCSAgIHF1ZXVlX2lkeCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICogdmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKCkgLSBBbm5vdW5jZSBmcmVlZCBmcm9tLWd1 ZXN0IGRlc2NyaXB0b3JzDQo+ICsgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQo+ICsgKg0KPiAr ICogQnVtcHMgYXZhaWwuaWR4IGJ5IHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgYWNjdW11bGF0 ZWQgaW4NCj4gKyAqIHZob3N0X3ZxX3N0YXRlWzBdLm51bV9mcmVlIChmcm9tIHByaW9yIGNvbnN1 bWVfb25lX3J4X2Rlc2NyaXB0b3IoKSBjYWxscyksDQo+ICsgKiB0aGVuIHJlc2V0cyB0aGUgY291 bnRlciB0byB6ZXJvLiBUaGUga2VybmVsIHdpbGwgc2VlIHRoZSBuZXcNCj4gKyAqIGF2YWlsLmlk eCBhbmQgY29uc3VtZSB0aGUgZnJlc2hseS1hdmFpbGFibGUgZGVzY3JpcHRvcnMuDQo+ICsgKi8N Cj4gK3ZvaWQgdmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKHN0cnVjdCBjdHggKmMpDQo+ICt7 DQo+ICsJc21wX3dtYigpOw0KPiArDQo+ICsJaWYgKCF2aG9zdF92cV9zdGF0ZVswXS5udW1fZnJl ZSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJdnJpbmdfYXZhaWxfYWxsWzBdLmF2YWlsLmlkeCAr PSB2aG9zdF92cV9zdGF0ZVswXS5udW1fZnJlZTsNCj4gKwl2aG9zdF92cV9zdGF0ZVswXS5udW1f ZnJlZSA9IDA7DQo+ICsJdmhvc3Rfa2ljaygmdnJpbmdfdXNlZF9hbGxbMF0udXNlZCwgYy0+dmhv c3QudnFbMF0ua2lja19mZCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogdmhvc3Rfa2ljaygp IC0gTm90aWZ5IHRoZSBrZXJuZWwgdGhhdCBuZXcgZGVzY3JpcHRvcnMgYXJlIGF2YWlsYWJsZQ0K PiArICogQHVzZWQ6CVVzZWQgcmluZyBvZiB0aGUgcXVldWUgd2UncmUgYW5ub3VuY2luZyBvbiwg Y2hlY2tlZCB0byBzZWUNCj4gKyAqCQl3aGV0aGVyIHRoZSBrZXJuZWwncyB2aXJ0aW8gdGhyZWFk IGlzIGFscmVhZHkgcmVhZGluZw0KPiArICoJCWRlc2NyaXB0b3JzIGFuZCBkb2Vzbid0IHdhbnQg dG8gYmUgbm90aWZpZWQNCj4gKyAqIEBraWNrX2ZkOglLaWNrIGV2ZW50ZmQgb2YgdGhhdCBzYW1l IHF1ZXVlDQo+ICsgKi8NCj4gK3ZvaWQgdmhvc3Rfa2ljayhzdHJ1Y3QgdnJpbmdfdXNlZCAqdXNl ZCwgaW50IGtpY2tfZmQpDQo+ICt7DQo+ICsJLyogRW5zdXJlIHRoYXQgdGhlIHJlYWQgb2YgdXNl ZC0+ZmxhZ3MgZG9lc24ndCBnZXQgcmVvcmRlcmVkIHRvIGJlDQo+ICsJICogYWJvdmUgdGhlIGF2 YWlsLmlkeCB1cGRhdGUNCj4gKwkgKi8NCj4gKwlzbXBfbWIoKTsNCj4gKw0KPiArCWlmICghKHVz ZWQtPmZsYWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpDQo+ICsJCWV2ZW50ZmRfd3JpdGUo a2lja19mZCwgMSk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS92aG9zdC5oIGIvdmhvc3QuaA0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi5hYWE5MzdkDQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvdmhvc3QuaA0KPiBAQCAtMCwwICsxLDc5IEBADQo+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcg0KPiArICogQ29weXJpZ2h0IFJlZCBI YXQNCg0KSWYgeW91IHdyb3RlIHRoZSBjb2RlLCBJJ20gbm90IHN1cmUgaXQncyBjb3B5cmlnaHRl ZCBieSBSZWQgSGF0Lg0KDQo+ICsgKiBBdXRob3I6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYx QGdtYWlsLmNvbT4NCj4gKyAqDQo+ICsgKiB2aG9zdC5oIC0gdmhvc3QtbmV0ICh2aG9zdC1rZXJu ZWwpIGFjY2VsZXJhdGlvbiBmb3IgcGFzdGEgbW9kZQ0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYg VkhPU1RfSA0KPiArI2RlZmluZSBWSE9TVF9IDQo+ICsNCj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4N Cj4gKyNpbmNsdWRlIDxzdGRkZWYuaD4NCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4gKw0KPiAr I2luY2x1ZGUgPGxpbnV4L3Zob3N0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvdmhvc3RfdHlwZXMu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvdmlydGlvX25ldC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19yaW5nLmg+DQo+ICsN Cj4gKyNpbmNsdWRlICJwYXNzdC5oIg0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCB2cV9zdGF0 ZSAtIFBlci12aXJ0cXVldWUgbG9jYWwgZGVzY3JpcHRvciB0cmFja2luZw0KPiArICogQG51bV9m cmVlOgkJTnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJlYWR5IHRvIGJlIGFubm91bmNlZCB0byB0aGUN Cj4gKyAqCQkJa2VybmVsIHZpYSB2aG9zdF9yeF9kZXNjcmlwdG9yX2hhbmRvZmYoKQ0KPiArICog QGxhc3RfdXNlZF9pZHg6CU51bWJlciBvZiB1c2VkLXJpbmcgZW50cmllcyBjb25zdW1lZCBzbyBm YXI7DQo+ICsgKgkJCWxhZ2dpbmcgcmVhZCBjdXJzb3IgdnMuIHZyaW5nX3VzZWQtPmlkeCAodGhl DQo+ICsgKgkJCWtlcm5lbCdzIHdyaXRlIGN1cnNvcikNCj4gKyAqLw0KPiArZXh0ZXJuIHN0cnVj dCB2cV9zdGF0ZSB7DQo+ICsJdWludDE2X3QgbnVtX2ZyZWU7DQo+ICsJdWludDE2X3QgbGFzdF91 c2VkX2lkeDsNCj4gKwl1aW50MTZfdCBuZXh0X2ZyZWU7DQo+ICt9IHZob3N0X3ZxX3N0YXRlWzJd Ow0KPiArDQo+ICsNCj4gK2V4dGVybiBzdHJ1Y3QgdnJpbmdfZGVzYyB2cmluZ19kZXNjWzJdW1ZI T1NUX05ERVNDU107DQo+ICt1bmlvbiB2cmluZ19hdmFpbF91IHsNCj4gKwlzdHJ1Y3QgdnJpbmdf YXZhaWwgYXZhaWw7DQo+ICsJY2hhciBidWZbb2Zmc2V0b2Yoc3RydWN0IHZyaW5nX2F2YWlsLCBy aW5nW1ZIT1NUX05ERVNDU10pXTsNCj4gK307DQoNCnBlcmhhcHMgeW91IGNhbiBkZWNsYXJlIGlu c3RlYWQNCg0Kc3RydWN0IHZyaW5nX2F2YWlsX3Bhc3N0IHsNCglfX3ZpcnRpbzE2IGZsYWdzOw0K CV9fdmlydGlvMTYgaWR4Ow0KCV9fdmlydGlvMTYgcmluZ1tWSE9TVF9OREVTQ1NdOw0KfTsNCg0K VGhpcyB3aWxsIGJlIGVhc2llciB0byByZWFkLCBhbmQgYXZvaWQgdG8gaWdub3JlIHRoZSAtV3Bl ZGFudGljDQoNCj4gKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaA0KPiArI3ByYWdtYSBHQ0Mg ZGlhZ25vc3RpYyBpZ25vcmVkICItV3BlZGFudGljIg0KPiArZXh0ZXJuIHVuaW9uIHZyaW5nX2F2 YWlsX3UgdnJpbmdfYXZhaWxfYWxsWzJdOw0KPiArI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AN Cj4gKw0KPiArdW5pb24gdnJpbmdfdXNlZF91IHsNCj4gKwlzdHJ1Y3QgdnJpbmdfdXNlZCB1c2Vk Ow0KPiArCWNoYXIgYnVmW29mZnNldG9mKHN0cnVjdCB2cmluZ191c2VkLCByaW5nW1ZIT1NUX05E RVNDU10pXTsNCj4gK307DQoNCnN0cnVjdCB2cmluZ191c2VkX3Bhc3RhIHsNCglfX3ZpcnRpbzE2 IGZsYWdzOw0KCV9fdmlydGlvMTYgaWR4Ow0KCXZyaW5nX3VzZWRfZWxlbV90IHJpbmdbVkhPU1Rf TkRFU0NTXTsNCn07DQoNCj4gKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaA0KPiArI3ByYWdt YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3BlZGFudGljIg0KPiArZXh0ZXJuIHVuaW9uIHZy aW5nX3VzZWRfdSB2cmluZ191c2VkX2FsbFsyXTsNCj4gKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg cG9wDQo+ICsNCj4gKyNkZWZpbmUgTl9WSE9TVF9SRUdJT05TIDINCg0KMiBpcyBub3QgZW5vdWdo IHRvIHN0b3JlIGFsbCB0aGUgcmVnaW9ucy4NCg0KPiArdW5pb24gdmhvc3RfbWVtb3J5X3Ugew0K PiArCXN0cnVjdCB2aG9zdF9tZW1vcnkgbWVtOw0KPiArCWNoYXIgYnVmW29mZnNldG9mKHN0cnVj dCB2aG9zdF9tZW1vcnksIHJlZ2lvbnNbTl9WSE9TVF9SRUdJT05TXSldOw0KPiArfTsNCg0Kc3Ry dWN0IHZob3N0X21lbW9yeV9wYXN0YSB7DQoJX191MzIgbnJlZ2lvbnM7DQoJX191MzIgcGFkZGlu ZzsNCglzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbiByZWdpb25zW05fVkhPU1RfUkVHSU9OU107 DQp9Ow0KDQo+ICtleHRlcm4gdW5pb24gdmhvc3RfbWVtb3J5X3Ugdmhvc3RfbWVtb3J5Ow0KPiAr DQo+ICsjZGVmaW5lIFZIT1NUX01FTU9SWV9SRUdJT05fUFRSKGFkZHIsIHNpemUpIFwNCj4gKyAg ICAoc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24pIHsgXA0KPiArICAgICAgICAuZ3Vlc3RfcGh5 c19hZGRyID0gKHVpbnRwdHJfdClhZGRyLCBcDQo+ICsgICAgICAgIC5tZW1vcnlfc2l6ZSA9IHNp emUsIFwNCj4gKyAgICAgICAgLnVzZXJzcGFjZV9hZGRyICA9ICh1aW50cHRyX3QpYWRkciwgXA0K PiArICAgIH0NCj4gKyNkZWZpbmUgVkhPU1RfTUVNT1JZX1JFR0lPTihidWYpIFZIT1NUX01FTU9S WV9SRUdJT05fUFRSKCZidWYsIHNpemVvZihidWYpKQ0KPiArDQo+ICt2b2lkIHZob3N0X3NldF92 cmluZyhzdHJ1Y3QgY3R4ICpjLCBpbnQgcXVldWVfaWR4LCBpbnQgdGFwX2ZkKTsNCj4gK2ludCB2 aG9zdF9zZXR1cF9tZW1vcnlfdGFibGUoc3RydWN0IGN0eCAqYyk7DQo+ICtpbnQgdmhvc3Rfc2V0 dXBfbmV0KHN0cnVjdCBjdHggKmMpOw0KPiArdm9pZCB2aG9zdF9zZXR1cF9ldmVudGZkcyhzdHJ1 Y3QgY3R4ICpjLCBpbnQgcXVldWVfaWR4KTsNCj4gK3ZvaWQgdmhvc3RfcnhfZGVzY3JpcHRvcl9o YW5kb2ZmKHN0cnVjdCBjdHggKmMpOw0KPiArdm9pZCB2aG9zdF9raWNrKHN0cnVjdCB2cmluZ191 c2VkICp1c2VkLCBpbnQga2lja19mZCk7DQo+ICsNCj4gKyNlbmRpZiAvKiBWSE9TVF9IICovDQoN Cg==