From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by mail.toke.dk (Postfix) with ESMTPS id D23469DD8B1 for ; Fri, 13 Jan 2023 21:25:30 +0100 (CET) Authentication-Results: mail.toke.dk; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=qAt7ysZL Received: by mail-wm1-x32d.google.com with SMTP id c4-20020a1c3504000000b003d9e2f72093so14715239wma.1 for ; Fri, 13 Jan 2023 12:25:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=r5dqryhOb3C59EpyEnrNyR+mFlPx1NbdJBLixvq5xSg=; b=qAt7ysZLfKEpsoob57mj/uAKO8l4oA+tK2tIJ/aXUam3ruu8MJuUXPWErbHE4AHziQ eO7q8huI6acSj9lUfvrZAEHU0QJ8UrhnLI7LSEILQoTTDEA377sDq/+rCTpWpMgIscYy XjOOl4k5P5srm2MLGfaXSTxTavYF9CeZLXVhCWf/YYfA8nJQu8xw+vFVT0B0ARlmmm6O 9m1a1Bx9HjNfNDthHOWJiFi9Rx6iSva8Z/sXuh890oglfav3ojJ9mDAAH39LA982/1dl vRilKbev/UdB5QvIxQ134IYDID007eCcRbZGULW08zCcCz/nP9E641rQBC6vSsdPd0In 6GFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=r5dqryhOb3C59EpyEnrNyR+mFlPx1NbdJBLixvq5xSg=; b=ZZq8LtXGAEQmxpIGGLBQFqpxEl/fUipVT5c0ByLdczqTlEMF3TGEuL+q68kpSkSOLG +zZYynU8nkP6A27RE+Ffp/1Mt/UbcpyjYvfcaxzQsCXoJRzQq4woyAOSSePv0oN4ipLF +GuxBX2ErTgcjeimQXN9YccOLAshcoEgSCsM1oH7FmzamDodp7epmV38s6eSmO4N0Msr RGFS3u/TF6n2n5LU3dmtxrIXDb2FW5gJkWqx8E5deICUzV/gS+hSFf2Cq5eueQKfVCGg Ab3MjNSDNv5WBc1Y0i2GNe0lMUGPVMKcZKtUExWRANKx5+rTdrLzqR0HDGtTIdatFms+ zv5Q== X-Gm-Message-State: AFqh2kpqWbStduYCj4ffZ4oWPFrTMlOZdoeSRrE4KPF+jZ1SIoroTRtV +V40u42g8jw1fsOPoZK8Uj8= X-Google-Smtp-Source: AMrXdXt4/KvQCocLxJKR9riLj673pwVdGrR7IoPe8KzVZbHlsc/CCTcbjTV4f0kg8HemROP1lBKPNA== X-Received: by 2002:a05:600c:44d4:b0:3cf:7925:7a3 with SMTP id f20-20020a05600c44d400b003cf792507a3mr58402797wmo.24.1673641528362; Fri, 13 Jan 2023 12:25:28 -0800 (PST) Received: from [192.168.0.105] ([77.126.1.183]) by smtp.gmail.com with ESMTPSA id j30-20020a05600c1c1e00b003d9f14e9085sm19266743wms.17.2023.01.13.12.25.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 13 Jan 2023 12:25:27 -0800 (PST) Message-ID: Date: Fri, 13 Jan 2023 22:25:24 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Content-Language: en-US To: Stanislav Fomichev References: <20230112003230.3779451-1-sdf@google.com> <20230112003230.3779451-17-sdf@google.com> <9545d379-9894-c7b6-d000-4f8eb6705bb1@gmail.com> From: Tariq Toukan In-Reply-To: Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 Message-ID-Hash: ZQFSRCNY62PJA3IHMQS72WBPZ3Z4GOBK X-Message-ID-Hash: ZQFSRCNY62PJA3IHMQS72WBPZ3Z4GOBK X-MailFrom: ttoukan.linux@gmail.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: bpf@vger.kernel.org, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@linux.dev, song@kernel.org, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, haoluo@google.com, jolsa@kernel.org, =?UTF-8?Q?Toke_H=c3=b8iland-J=c3=b8rgensen?= , Tariq Toukan , Saeed Mahameed , David Ahern , Jakub Kicinski , Willem de Bruijn , Jesper Dangaard Brouer , Anatoly Burakov , Alexander Lobakin , Magnus Karlsson , Maryam Tahhan , xdp-hints@xdp-project.net, netdev@vger.kernel.org X-Mailman-Version: 3.3.7 Precedence: list Subject: [xdp-hints] Re: [PATCH bpf-next v7 16/17] net/mlx5e: Support RX XDP metadata List-Id: XDP hardware hints design discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: DQoNCk9uIDEyLzAxLzIwMjMgMjE6MDksIFN0YW5pc2xhdiBGb21pY2hldiB3cm90ZToNCj4gT24g VGh1LCBKYW4gMTIsIDIwMjMgYXQgMTI6MTMgQU0gVGFyaXEgVG91a2FuIDx0dG91a2FuLmxpbnV4 QGdtYWlsLmNvbT4gd3JvdGU6DQo+Pg0KPj4NCj4+DQo+PiBPbiAxMi8wMS8yMDIzIDI6MzIsIFN0 YW5pc2xhdiBGb21pY2hldiB3cm90ZToNCj4+PiBGcm9tOiBUb2tlIEjDuGlsYW5kLUrDuHJnZW5z ZW4gPHRva2VAcmVkaGF0LmNvbT4NCj4+Pg0KPj4+IFN1cHBvcnQgUlggaGFzaCBhbmQgdGltZXN0 YW1wIG1ldGFkYXRhIGtmdW5jcy4gV2UgbmVlZCB0byBwYXNzIGluIHRoZSBjcWUNCj4+PiBwb2lu dGVyIHRvIHRoZSBtbHg1ZV9za2JfZnJvbSogZnVuY3Rpb25zIHNvIGl0IGNhbiBiZSByZXRyaWV2 ZWQgZnJvbSB0aGUNCj4+PiBYRFAgY3R4IHRvIGRvIHRoaXMuDQo+Pj4NCj4+PiBDYzogVGFyaXEg VG91a2FuIDx0YXJpcXRAbnZpZGlhLmNvbT4NCj4+PiBDYzogU2FlZWQgTWFoYW1lZWQgPHNhZWVk bUBudmlkaWEuY29tPg0KPj4+IENjOiBKb2huIEZhc3RhYmVuZCA8am9obi5mYXN0YWJlbmRAZ21h aWwuY29tPg0KPj4+IENjOiBEYXZpZCBBaGVybiA8ZHNhaGVybkBnbWFpbC5jb20+DQo+Pj4gQ2M6 IE1hcnRpbiBLYUZhaSBMYXUgPG1hcnRpbi5sYXVAbGludXguZGV2Pg0KPj4+IENjOiBKYWt1YiBL aWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPg0KPj4+IENjOiBXaWxsZW0gZGUgQnJ1aWpuIDx3aWxs ZW1iQGdvb2dsZS5jb20+DQo+Pj4gQ2M6IEplc3BlciBEYW5nYWFyZCBCcm91ZXIgPGJyb3VlckBy ZWRoYXQuY29tPg0KPj4+IENjOiBBbmF0b2x5IEJ1cmFrb3YgPGFuYXRvbHkuYnVyYWtvdkBpbnRl bC5jb20+DQo+Pj4gQ2M6IEFsZXhhbmRlciBMb2Jha2luIDxhbGV4YW5kci5sb2Jha2luQGludGVs LmNvbT4NCj4+PiBDYzogTWFnbnVzIEthcmxzc29uIDxtYWdudXMua2FybHNzb25AZ21haWwuY29t Pg0KPj4+IENjOiBNYXJ5YW0gVGFoaGFuIDxtdGFoaGFuQHJlZGhhdC5jb20+DQo+Pj4gQ2M6IHhk cC1oaW50c0B4ZHAtcHJvamVjdC5uZXQNCj4+PiBDYzogbmV0ZGV2QHZnZXIua2VybmVsLm9yZw0K Pj4+IFNpZ25lZC1vZmYtYnk6IFRva2UgSMO4aWxhbmQtSsO4cmdlbnNlbiA8dG9rZUByZWRoYXQu Y29tPg0KPj4+IFNpZ25lZC1vZmYtYnk6IFN0YW5pc2xhdiBGb21pY2hldiA8c2RmQGdvb2dsZS5j b20+DQo+Pj4gLS0tDQo+Pj4gICAgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9j b3JlL2VuLmggIHwgIDUgKy0NCj4+PiAgICAuLi4vbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUv Y29yZS9lbi90eHJ4LmggfCAgNSArKw0KPj4+ICAgIC4uLi9uZXQvZXRoZXJuZXQvbWVsbGFub3gv bWx4NS9jb3JlL2VuL3hkcC5jICB8IDIzICsrKysrKysrKw0KPj4+ICAgIC4uLi9uZXQvZXRoZXJu ZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3hkcC5oICB8ICA1ICsrDQo+Pj4gICAgLi4uL2V0aGVy bmV0L21lbGxhbm94L21seDUvY29yZS9lbi94c2svcnguYyAgIHwgMTAgKysrKw0KPj4+ICAgIC4u Li9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veHNrL3J4LmggICB8ICAyICsNCj4+PiAg ICAuLi4vbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgfCAgNiArKysN Cj4+PiAgICAuLi4vbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yeC5jICAgfCA0 OSArKysrKysrKysrLS0tLS0tLS0tDQo+Pj4gICAgOCBmaWxlcyBjaGFuZ2VkLCA4MCBpbnNlcnRp b25zKCspLCAyNSBkZWxldGlvbnMoLSkNCj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L21lbGxhbm94L21seDUvY29yZS9lbi5oDQo+Pj4gaW5kZXggYWY2NjM5NzhkMWI0Li42ZGUwMmQ4 YWVhYjggMTAwNjQ0DQo+Pj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4 NS9jb3JlL2VuLmgNCj4+PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1 L2NvcmUvZW4uaA0KPj4+IEBAIC02MjcsMTAgKzYyNywxMSBAQCBzdHJ1Y3QgbWx4NWVfcnE7DQo+ Pj4gICAgdHlwZWRlZiB2b2lkICgqbWx4NWVfZnBfaGFuZGxlX3J4X2NxZSkoc3RydWN0IG1seDVl X3JxKiwgc3RydWN0IG1seDVfY3FlNjQqKTsNCj4+PiAgICB0eXBlZGVmIHN0cnVjdCBza19idWZm ICoNCj4+PiAgICAoKm1seDVlX2ZwX3NrYl9mcm9tX2NxZV9tcHdycSkoc3RydWN0IG1seDVlX3Jx ICpycSwgc3RydWN0IG1seDVlX21wd19pbmZvICp3aSwNCj4+PiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHUxNiBjcWVfYmNudCwgdTMyIGhlYWRfb2Zmc2V0LCB1MzIgcGFnZV9pZHgpOw0K Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSwg dTE2IGNxZV9iY250LA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGhlYWRf b2Zmc2V0LCB1MzIgcGFnZV9pZHgpOw0KPj4+ICAgIHR5cGVkZWYgc3RydWN0IHNrX2J1ZmYgKg0K Pj4+ICAgICgqbWx4NWVfZnBfc2tiX2Zyb21fY3FlKShzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1 Y3QgbWx4NWVfd3FlX2ZyYWdfaW5mbyAqd2ksDQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICB1 MzIgY3FlX2JjbnQpOw0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1seDVfY3Fl NjQgKmNxZSwgdTMyIGNxZV9iY250KTsNCj4+PiAgICB0eXBlZGVmIGJvb2wgKCptbHg1ZV9mcF9w b3N0X3J4X3dxZXMpKHN0cnVjdCBtbHg1ZV9ycSAqcnEpOw0KPj4+ICAgIHR5cGVkZWYgdm9pZCAo Km1seDVlX2ZwX2RlYWxsb2Nfd3FlKShzdHJ1Y3QgbWx4NWVfcnEqLCB1MTYpOw0KPj4+ICAgIHR5 cGVkZWYgdm9pZCAoKm1seDVlX2ZwX3NoYW1wb19kZWFsbG9jX2hkKShzdHJ1Y3QgbWx4NWVfcnEq LCB1MTYsIHUxNiwgYm9vbCk7DQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0 L21lbGxhbm94L21seDUvY29yZS9lbi90eHJ4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxs YW5veC9tbHg1L2NvcmUvZW4vdHhyeC5oDQo+Pj4gaW5kZXggODUzZjMxMmNkNzU3Li43NTdjMDEy ZWNlMjcgMTAwNjQ0DQo+Pj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4 NS9jb3JlL2VuL3R4cnguaA0KPj4+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94 L21seDUvY29yZS9lbi90eHJ4LmgNCj4+PiBAQCAtNzMsNiArNzMsMTEgQEAgaW50IG1seDVlX3Bv bGxfcnhfY3Eoc3RydWN0IG1seDVlX2NxICpjcSwgaW50IGJ1ZGdldCk7DQo+Pj4gICAgdm9pZCBt bHg1ZV9mcmVlX3J4X2Rlc2NzKHN0cnVjdCBtbHg1ZV9ycSAqcnEpOw0KPj4+ICAgIHZvaWQgbWx4 NWVfZnJlZV9yeF9pbl9wcm9ncmVzc19kZXNjcyhzdHJ1Y3QgbWx4NWVfcnEgKnJxKTsNCj4+Pg0K Pj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgbWx4NWVfcnhfaHdfc3RhbXAoc3RydWN0IGh3dHN0YW1w X2NvbmZpZyAqY29uZmlnKQ0KPj4+ICt7DQo+Pj4gKyAgICAgcmV0dXJuIGNvbmZpZy0+cnhfZmls dGVyID09IEhXVFNUQU1QX0ZJTFRFUl9BTEw7DQo+Pj4gK30NCj4+PiArDQo+Pj4gICAgLyogVFgg Ki8NCj4+PiAgICBuZXRkZXZfdHhfdCBtbHg1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KPj4+ICAgIGJvb2wgbWx4NWVfcG9sbF90eF9jcShzdHJ1 Y3QgbWx4NWVfY3EgKmNxLCBpbnQgbmFwaV9idWRnZXQpOw0KPj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMgYi9kcml2ZXJzL25l dC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMNCj4+PiBpbmRleCAzMWJiNjgw NmJmNWQuLmQxMGQzMWUxMmJhMiAxMDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMNCj4+PiArKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmMNCj4+PiBAQCAtMTU2LDYgKzE1NiwyOSBA QCBtbHg1ZV94bWl0X3hkcF9idWZmKHN0cnVjdCBtbHg1ZV94ZHBzcSAqc3EsIHN0cnVjdCBtbHg1 ZV9ycSAqcnEsDQo+Pj4gICAgICAgIHJldHVybiB0cnVlOw0KPj4+ICAgIH0NCj4+Pg0KPj4+ICtp bnQgbWx4NWVfeGRwX3J4X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3QgeGRwX21kICpjdHgsIHU2NCAq dGltZXN0YW1wKQ0KPj4+ICt7DQo+Pj4gKyAgICAgY29uc3Qgc3RydWN0IG1seDVlX3hkcF9idWZm ICpfY3R4ID0gKHZvaWQgKiljdHg7DQo+Pj4gKw0KPj4+ICsgICAgIGlmICh1bmxpa2VseSghbWx4 NWVfcnhfaHdfc3RhbXAoX2N0eC0+cnEtPnRzdGFtcCkpKQ0KPj4+ICsgICAgICAgICAgICAgcmV0 dXJuIC1FT1BOT1RTVVBQOw0KPj4+ICsNCj4+PiArICAgICAqdGltZXN0YW1wID0gIG1seDVlX2Nx ZV90c190b19ucyhfY3R4LT5ycS0+cHRwX2N5YzJ0aW1lLA0KPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9jdHgtPnJxLT5jbG9jaywgZ2V0X2NxZV90cyhfY3R4LT5j cWUpKTsNCj4+PiArICAgICByZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsNCj4+PiAraW50IG1seDVl X3hkcF9yeF9oYXNoKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0eCwgdTMyICpoYXNoKQ0KPj4+ICt7 DQo+Pj4gKyAgICAgY29uc3Qgc3RydWN0IG1seDVlX3hkcF9idWZmICpfY3R4ID0gKHZvaWQgKilj dHg7DQo+Pj4gKw0KPj4+ICsgICAgIGlmICh1bmxpa2VseSghKF9jdHgtPnhkcC5yeHEtPmRldi0+ ZmVhdHVyZXMgJiBORVRJRl9GX1JYSEFTSCkpKQ0KPj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1F T1BOT1RTVVBQOw0KPj4+ICsNCj4+PiArICAgICAqaGFzaCA9IGJlMzJfdG9fY3B1KF9jdHgtPmNx ZS0+cnNzX2hhc2hfcmVzdWx0KTsNCj4+PiArICAgICByZXR1cm4gMDsNCj4+PiArfQ0KPj4+ICsN Cj4+PiAgICAvKiByZXR1cm5zIHRydWUgaWYgcGFja2V0IHdhcyBjb25zdW1lZCBieSB4ZHAgKi8N Cj4+PiAgICBib29sIG1seDVlX3hkcF9oYW5kbGUoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0 IHBhZ2UgKnBhZ2UsDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJwZl9wcm9nICpw cm9nLCBzdHJ1Y3QgbWx4NWVfeGRwX2J1ZmYgKm14YnVmKQ0KPj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmggYi9kcml2ZXJzL25l dC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmgNCj4+PiBpbmRleCAzODk4MThi ZjY4MzMuLmNiNTY4YzYyYWJhMCAxMDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5l dC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmgNCj4+PiArKysgYi9kcml2ZXJzL25ldC9ldGhl cm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4veGRwLmgNCj4+PiBAQCAtNDYsNiArNDYsOCBAQA0K Pj4+DQo+Pj4gICAgc3RydWN0IG1seDVlX3hkcF9idWZmIHsNCj4+PiAgICAgICAgc3RydWN0IHhk cF9idWZmIHhkcDsNCj4+PiArICAgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlOw0KPj4+ICsgICAg IHN0cnVjdCBtbHg1ZV9ycSAqcnE7DQo+Pj4gICAgfTsNCj4+Pg0KPj4+ICAgIHN0cnVjdCBtbHg1 ZV94c2tfcGFyYW07DQo+Pj4gQEAgLTYwLDYgKzYyLDkgQEAgdm9pZCBtbHg1ZV94ZHBfcnhfcG9s bF9jb21wbGV0ZShzdHJ1Y3QgbWx4NWVfcnEgKnJxKTsNCj4+PiAgICBpbnQgbWx4NWVfeGRwX3ht aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG4sIHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFt ZXMsDQo+Pj4gICAgICAgICAgICAgICAgICAgdTMyIGZsYWdzKTsNCj4+Pg0KPj4+ICtpbnQgbWx4 NWVfeGRwX3J4X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3QgeGRwX21kICpjdHgsIHU2NCAqdGltZXN0 YW1wKTsNCj4+PiAraW50IG1seDVlX3hkcF9yeF9oYXNoKGNvbnN0IHN0cnVjdCB4ZHBfbWQgKmN0 eCwgdTMyICpoYXNoKTsNCj4+PiArDQo+Pj4gICAgSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShi b29sIG1seDVlX3htaXRfeGRwX2ZyYW1lX21wd3FlKHN0cnVjdCBtbHg1ZV94ZHBzcSAqc3EsDQo+ Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IG1seDVlX3htaXRfZGF0YSAqeGRwdHhkLA0KPj4+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza2Jfc2hhcmVk X2luZm8gKnNpbmZvLA0KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxs YW5veC9tbHg1L2NvcmUvZW4veHNrL3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5v eC9tbHg1L2NvcmUvZW4veHNrL3J4LmMNCj4+PiBpbmRleCA5Y2ZmODJkNzY0ZTMuLjhiZjMwMjlh YmQzYyAxMDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1 L2NvcmUvZW4veHNrL3J4LmMNCj4+PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5v eC9tbHg1L2NvcmUvZW4veHNrL3J4LmMNCj4+PiBAQCAtNDksNiArNDksNyBAQCBpbnQgbWx4NWVf eHNrX2FsbG9jX3J4X21wd3FlKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHUxNiBpeCkNCj4+PiAgICAg ICAgICAgICAgICAgICAgICAgIHVtcl93cWUtPmlubGluZV9tdHRzW2ldID0gKHN0cnVjdCBtbHg1 X210dCkgew0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHRhZyA9IGNwdV90 b19iZTY0KGFkZHIgfCBNTFg1X0VOX1dSKSwNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgIH07 DQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHdpLT5hbGxvY191bml0c1tpXS5teGJ1Zi0+cnEg PSBycTsNCj4+PiAgICAgICAgICAgICAgICB9DQo+Pj4gICAgICAgIH0gZWxzZSBpZiAodW5saWtl bHkocnEtPm1wd3FlLnVtcl9tb2RlID09IE1MWDVFX01QV1JRX1VNUl9NT0RFX1VOQUxJR05FRCkp IHsNCj4+PiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYmF0Y2g7IGkrKykgew0KPj4+ IEBAIC01OCw2ICs1OSw3IEBAIGludCBtbHg1ZV94c2tfYWxsb2NfcnhfbXB3cWUoc3RydWN0IG1s eDVlX3JxICpycSwgdTE2IGl4KQ0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu a2V5ID0gcnEtPm1rZXlfYmUsDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52 YSA9IGNwdV90b19iZTY0KGFkZHIpLA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgfTsNCj4+ PiArICAgICAgICAgICAgICAgICAgICAgd2ktPmFsbG9jX3VuaXRzW2ldLm14YnVmLT5ycSA9IHJx Ow0KPj4+ICAgICAgICAgICAgICAgIH0NCj4+PiAgICAgICAgfSBlbHNlIGlmIChsaWtlbHkocnEt Pm1wd3FlLnVtcl9tb2RlID09IE1MWDVFX01QV1JRX1VNUl9NT0RFX1RSSVBMRSkpIHsNCj4+PiAg ICAgICAgICAgICAgICB1MzIgbWFwcGluZ19zaXplID0gMSA8PCAocnEtPm1wd3FlLnBhZ2Vfc2hp ZnQgLSAyKTsNCj4+PiBAQCAtODEsNiArODMsNyBAQCBpbnQgbWx4NWVfeHNrX2FsbG9jX3J4X21w d3FlKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHUxNiBpeCkNCj4+PiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLmtleSA9IHJxLT5ta2V5X2JlLA0KPj4+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAudmEgPSBjcHVfdG9fYmU2NChycS0+d3FlX292ZXJmbG93LmFkZHIpLA0KPj4+ ICAgICAgICAgICAgICAgICAgICAgICAgfTsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgd2kt PmFsbG9jX3VuaXRzW2ldLm14YnVmLT5ycSA9IHJxOw0KPj4+ICAgICAgICAgICAgICAgIH0NCj4+ PiAgICAgICAgfSBlbHNlIHsNCj4+PiAgICAgICAgICAgICAgICBfX2JlMzIgcGFkX3NpemUgPSBj cHVfdG9fYmUzMigoMSA8PCBycS0+bXB3cWUucGFnZV9zaGlmdCkgLQ0KPj4+IEBAIC0xMDAsNiAr MTAzLDcgQEAgaW50IG1seDVlX3hza19hbGxvY19yeF9tcHdxZShzdHJ1Y3QgbWx4NWVfcnEgKnJx LCB1MTYgaXgpDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YSA9IGNwdV90 b19iZTY0KHJxLT53cWVfb3ZlcmZsb3cuYWRkciksDQo+Pj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC5iY291bnQgPSBwYWRfc2l6ZSwNCj4+PiAgICAgICAgICAgICAgICAgICAgICAg IH07DQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHdpLT5hbGxvY191bml0c1tpXS5teGJ1Zi0+ cnEgPSBycTsNCj4+PiAgICAgICAgICAgICAgICB9DQo+Pj4gICAgICAgIH0NCj4+Pg0KPj4+IEBA IC0yMzAsNiArMjM0LDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptbHg1ZV94c2tfY29uc3Ry dWN0X3NrYihzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgeGRwX2INCj4+Pg0KPj4+ICAgIHN0 cnVjdCBza19idWZmICptbHg1ZV94c2tfc2tiX2Zyb21fY3FlX21wd3JxX2xpbmVhcihzdHJ1Y3Qg bWx4NWVfcnEgKnJxLA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBtbHg1ZV9tcHdfaW5mbyAqd2ksDQo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWx4NV9jcWU2NCAq Y3FlLA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHUxNiBjcWVfYmNudCwNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1MzIgaGVhZF9vZmZzZXQsDQo+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHBhZ2VfaWR4KQ0KPj4+IEBAIC0y NTAsNiArMjU1LDggQEAgc3RydWN0IHNrX2J1ZmYgKm1seDVlX3hza19za2JfZnJvbV9jcWVfbXB3 cnFfbGluZWFyKHN0cnVjdCBtbHg1ZV9ycSAqcnEsDQo+Pj4gICAgICAgICAqLw0KPj4+ICAgICAg ICBXQVJOX09OX09OQ0UoaGVhZF9vZmZzZXQpOw0KPj4+DQo+Pj4gKyAgICAgLyogbXhidWYtPnJx IGlzIHNldCBvbiBhbGxvY2F0aW9uLCBidXQgY3FlIGlzIHBlci1wYWNrZXQgc28gc2V0IGl0IGhl cmUgKi8NCj4+PiArICAgICBteGJ1Zi0+Y3FlID0gY3FlOw0KPj4+ICAgICAgICB4c2tfYnVmZl9z ZXRfc2l6ZSgmbXhidWYtPnhkcCwgY3FlX2JjbnQpOw0KPj4+ICAgICAgICB4c2tfYnVmZl9kbWFf c3luY19mb3JfY3B1KCZteGJ1Zi0+eGRwLCBycS0+eHNrX3Bvb2wpOw0KPj4+ICAgICAgICBuZXRf cHJlZmV0Y2gobXhidWYtPnhkcC5kYXRhKTsNCj4+PiBAQCAtMjg0LDYgKzI5MSw3IEBAIHN0cnVj dCBza19idWZmICptbHg1ZV94c2tfc2tiX2Zyb21fY3FlX21wd3JxX2xpbmVhcihzdHJ1Y3QgbWx4 NWVfcnEgKnJxLA0KPj4+DQo+Pj4gICAgc3RydWN0IHNrX2J1ZmYgKm1seDVlX3hza19za2JfZnJv bV9jcWVfbGluZWFyKHN0cnVjdCBtbHg1ZV9ycSAqcnEsDQo+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1seDVlX3dxZV9mcmFnX2luZm8gKndp LA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG1seDVfY3FlNjQgKmNxZSwNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1MzIgY3FlX2JjbnQpDQo+Pj4gICAgew0KPj4+ICAgICAgICBzdHJ1Y3QgbWx4 NWVfeGRwX2J1ZmYgKm14YnVmID0gd2ktPmF1LT5teGJ1ZjsNCj4+PiBAQCAtMjk2LDYgKzMwNCw4 IEBAIHN0cnVjdCBza19idWZmICptbHg1ZV94c2tfc2tiX2Zyb21fY3FlX2xpbmVhcihzdHJ1Y3Qg bWx4NWVfcnEgKnJxLA0KPj4+ICAgICAgICAgKi8NCj4+PiAgICAgICAgV0FSTl9PTl9PTkNFKHdp LT5vZmZzZXQpOw0KPj4+DQo+Pj4gKyAgICAgLyogbXhidWYtPnJxIGlzIHNldCBvbiBhbGxvY2F0 aW9uLCBidXQgY3FlIGlzIHBlci1wYWNrZXQgc28gc2V0IGl0IGhlcmUgKi8NCj4+PiArICAgICBt eGJ1Zi0+Y3FlID0gY3FlOw0KPj4+ICAgICAgICB4c2tfYnVmZl9zZXRfc2l6ZSgmbXhidWYtPnhk cCwgY3FlX2JjbnQpOw0KPj4+ICAgICAgICB4c2tfYnVmZl9kbWFfc3luY19mb3JfY3B1KCZteGJ1 Zi0+eGRwLCBycS0+eHNrX3Bvb2wpOw0KPj4+ICAgICAgICBuZXRfcHJlZmV0Y2gobXhidWYtPnhk cC5kYXRhKTsNCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gv bWx4NS9jb3JlL2VuL3hzay9yeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4 NS9jb3JlL2VuL3hzay9yeC5oDQo+Pj4gaW5kZXggMDg3Yzk0M2JkOGU5Li5jZWZjMGVmNjEwNWQg MTAwNjQ0DQo+Pj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3Jl L2VuL3hzay9yeC5oDQo+Pj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4 NS9jb3JlL2VuL3hzay9yeC5oDQo+Pj4gQEAgLTEzLDExICsxMywxMyBAQCBpbnQgbWx4NWVfeHNr X2FsbG9jX3J4X3dxZXNfYmF0Y2hlZChzdHJ1Y3QgbWx4NWVfcnEgKnJxLCB1MTYgaXgsIGludCB3 cWVfYnVsayk7DQo+Pj4gICAgaW50IG1seDVlX3hza19hbGxvY19yeF93cWVzKHN0cnVjdCBtbHg1 ZV9ycSAqcnEsIHUxNiBpeCwgaW50IHdxZV9idWxrKTsNCj4+PiAgICBzdHJ1Y3Qgc2tfYnVmZiAq bWx4NWVfeHNrX3NrYl9mcm9tX2NxZV9tcHdycV9saW5lYXIoc3RydWN0IG1seDVlX3JxICpycSwN Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgbWx4NWVfbXB3X2luZm8gKndpLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSwNCj4+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgY3FlX2Jj bnQsDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdTMyIGhlYWRfb2Zmc2V0LA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHUzMiBwYWdlX2lkeCk7DQo+Pj4gICAgc3RydWN0IHNrX2J1ZmYg Km1seDVlX3hza19za2JfZnJvbV9jcWVfbGluZWFyKHN0cnVjdCBtbHg1ZV9ycSAqcnEsDQo+Pj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1seDVl X3dxZV9mcmFnX2luZm8gKndpLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSwNCj4+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgY3FlX2JjbnQpOw0KPj4+DQo+Pj4gICAg I2VuZGlmIC8qIF9fTUxYNV9FTl9YU0tfUlhfSF9fICovDQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMgYi9kcml2ZXJzL25l dC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jDQo+Pj4gaW5kZXggY2ZmNWYy ZTI5ZTFlLi5iZTk0MmMwNjA3NzQgMTAwNjQ0DQo+Pj4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJu ZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYw0KPj4+ICsrKyBiL2RyaXZlcnMvbmV0L2V0 aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMNCj4+PiBAQCAtNDkxMyw2ICs0OTEz LDExIEBAIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtbHg1ZV9uZXRkZXZfb3BzID0gew0K Pj4+ICAgICNlbmRpZg0KPj4+ICAgIH07DQo+Pj4NCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB4 ZHBfbWV0YWRhdGFfb3BzIG1seDVfeGRwX21ldGFkYXRhX29wcyA9IHsNCj4+PiArICAgICAueG1v X3J4X3RpbWVzdGFtcCAgICAgICAgICAgICAgID0gbWx4NWVfeGRwX3J4X3RpbWVzdGFtcCwNCj4+ PiArICAgICAueG1vX3J4X2hhc2ggICAgICAgICAgICAgICAgICAgID0gbWx4NWVfeGRwX3J4X2hh c2gsDQo+Pj4gK307DQo+Pj4gKw0KPj4NCj4+IEluc3RlYWQgb2YgZXhwb3NpbmcgZXZlcnkgc2lu Z2xlIHhkcCBmdW5jdGlvbiBpbiB0aGUgeGRwIGhlYWRlciwgbW92ZQ0KPj4gdGhpcyBzdHJ1Y3Qg aW50byB0aGUgZW4veGRwLmMsIGFuZCBleHBvc2UgaXQgdmlhIGVuL3hkcC5oLg0KPj4NCj4+IFNl ZSBleGFtcGxlIHN0cnVjdCBhbmQgaXRzIHVzYWdlOg0KPj4gICAgICAgICAgbmV0ZGV2LT5ldGh0 b29sX29wcyAgICAgICA9ICZtbHg1ZV9ldGh0b29sX29wczsNCj4gDQo+IFNHLCB3aWxsIHB1dCAi ZXh0ZXJuIGNvbnN0IHN0cnVjdCB4ZHBfbWV0YWRhdGFfb3BzDQo+IG1seDVfeGRwX21ldGFkYXRh X29wczsiIGluIGVuL3hkcC5oLiANCg0KRXhhY3RseSwgdGhhdCdzIHdoYXQgSSBzdWdnZXN0ZWQg YWJvdmUuDQoNCj4gTE1LIGlmIHlvdSBwcmVmZXIgdGhhdCB0byBnbyBpbnRvDQo+IGVuLmggbmV4 dCB0byBtbHg1ZV9ldGh0b29sX29wcyBleHRlcm4uDQo+IA0KPiANCg0KDQoNCj4+PiAgICBzdGF0 aWMgdTMyIG1seDVlX2Nob29zZV9scm9fdGltZW91dChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRl diwgdTMyIHdhbnRlZF90aW1lb3V0KQ0KPj4+ICAgIHsNCj4+PiAgICAgICAgaW50IGk7DQo+Pj4g QEAgLTUwNTMsNiArNTA1OCw3IEBAIHN0YXRpYyB2b2lkIG1seDVlX2J1aWxkX25pY19uZXRkZXYo c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikNCj4+PiAgICAgICAgU0VUX05FVERFVl9ERVYobmV0 ZGV2LCBtZGV2LT5kZXZpY2UpOw0KPj4+DQo+Pj4gICAgICAgIG5ldGRldi0+bmV0ZGV2X29wcyA9 ICZtbHg1ZV9uZXRkZXZfb3BzOw0KPj4+ICsgICAgIG5ldGRldi0+eGRwX21ldGFkYXRhX29wcyA9 ICZtbHg1X3hkcF9tZXRhZGF0YV9vcHM7DQo+Pj4NCj4+PiAgICAgICAgbWx4NWVfZGNibmxfYnVp bGRfbmV0ZGV2KG5ldGRldik7DQo+Pj4NCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRo ZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9t ZWxsYW5veC9tbHg1L2NvcmUvZW5fcnguYw0KPj4+IGluZGV4IDZhZmZkZGRmNWJjZi4uN2IwODY1 M2JlMDAwIDEwMDY0NA0KPj4+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21s eDUvY29yZS9lbl9yeC5jDQo+Pj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gv bWx4NS9jb3JlL2VuX3J4LmMNCj4+PiBAQCAtNjIsMTAgKzYyLDEyIEBADQo+Pj4NCj4+PiAgICBz dGF0aWMgc3RydWN0IHNrX2J1ZmYgKg0KPj4+ICAgIG1seDVlX3NrYl9mcm9tX2NxZV9tcHdycV9s aW5lYXIoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IG1seDVlX21wd19pbmZvICp3aSwNCj4+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgY3FlX2JjbnQsIHUzMiBoZWFkX29m ZnNldCwgdTMyIHBhZ2VfaWR4KTsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgbWx4NV9jcWU2NCAqY3FlLCB1MTYgY3FlX2JjbnQsIHUzMiBoZWFkX29mZnNldCwNCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcGFnZV9pZHgpOw0KPj4+ICAgIHN0 YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqDQo+Pj4gICAgbWx4NWVfc2tiX2Zyb21fY3FlX21wd3JxX25v bmxpbmVhcihzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NWVfbXB3X2luZm8gKndpLA0K Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBjcWVfYmNudCwgdTMyIGhl YWRfb2Zmc2V0LCB1MzIgcGFnZV9pZHgpOw0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUsIHUxNiBjcWVfYmNudCwgdTMyIGhlYWRfb2Zm c2V0LA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBwYWdlX2lkeCk7 DQo+Pj4gICAgc3RhdGljIHZvaWQgbWx4NWVfaGFuZGxlX3J4X2NxZShzdHJ1Y3QgbWx4NWVfcnEg KnJxLCBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKTsNCj4+PiAgICBzdGF0aWMgdm9pZCBtbHg1ZV9o YW5kbGVfcnhfY3FlX21wd3JxKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxZTY0 ICpjcWUpOw0KPj4+ICAgIHN0YXRpYyB2b2lkIG1seDVlX2hhbmRsZV9yeF9jcWVfbXB3cnFfc2hh bXBvKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpOw0KPj4+IEBA IC03NiwxMSArNzgsNiBAQCBjb25zdCBzdHJ1Y3QgbWx4NWVfcnhfaGFuZGxlcnMgbWx4NWVfcnhf aGFuZGxlcnNfbmljID0gew0KPj4+ICAgICAgICAuaGFuZGxlX3J4X2NxZV9tcHdxZV9zaGFtcG8g PSBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxX3NoYW1wbywNCj4+PiAgICB9Ow0KPj4+DQo+Pj4g LXN0YXRpYyBpbmxpbmUgYm9vbCBtbHg1ZV9yeF9od19zdGFtcChzdHJ1Y3QgaHd0c3RhbXBfY29u ZmlnICpjb25maWcpDQo+Pj4gLXsNCj4+PiAtICAgICByZXR1cm4gY29uZmlnLT5yeF9maWx0ZXIg PT0gSFdUU1RBTVBfRklMVEVSX0FMTDsNCj4+PiAtfQ0KPj4+IC0NCj4+PiAgICBzdGF0aWMgaW5s aW5lIHZvaWQgbWx4NWVfcmVhZF9jcWVfc2xvdChzdHJ1Y3QgbWx4NV9jcXdxICp3cSwNCj4+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBjcWNjLCB2b2lkICpkYXRh KQ0KPj4+ICAgIHsNCj4+PiBAQCAtMTU3NSwxNiArMTU3MiwxOSBAQCBzdHJ1Y3Qgc2tfYnVmZiAq bWx4NWVfYnVpbGRfbGluZWFyX3NrYihzdHJ1Y3QgbWx4NWVfcnEgKnJxLCB2b2lkICp2YSwNCj4+ PiAgICAgICAgcmV0dXJuIHNrYjsNCj4+PiAgICB9DQo+Pj4NCj4+PiAtc3RhdGljIHZvaWQgbWx4 NWVfZmlsbF9teGJ1ZihzdHJ1Y3QgbWx4NWVfcnEgKnJxLCB2b2lkICp2YSwgdTE2IGhlYWRyb29t LA0KPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBsZW4sIHN0cnVjdCBtbHg1ZV94 ZHBfYnVmZiAqbXhidWYpDQo+Pj4gK3N0YXRpYyB2b2lkIG1seDVlX2ZpbGxfbXhidWYoc3RydWN0 IG1seDVlX3JxICpycSwgc3RydWN0IG1seDVfY3FlNjQgKmNxZSwNCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICp2YSwgdTE2IGhlYWRyb29tLCB1MzIgbGVuLA0KPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbHg1ZV94ZHBfYnVmZiAqbXhidWYpDQo+Pj4g ICAgew0KPj4+ICAgICAgICB4ZHBfaW5pdF9idWZmKCZteGJ1Zi0+eGRwLCBycS0+YnVmZi5mcmFt ZTBfc3osICZycS0+eGRwX3J4cSk7DQo+Pj4gICAgICAgIHhkcF9wcmVwYXJlX2J1ZmYoJm14YnVm LT54ZHAsIHZhLCBoZWFkcm9vbSwgbGVuLCB0cnVlKTsNCj4+PiArICAgICBteGJ1Zi0+Y3FlID0g Y3FlOw0KPj4+ICsgICAgIG14YnVmLT5ycSA9IHJxOw0KPj4+ICAgIH0NCj4+Pg0KPj4+ICAgIHN0 YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqDQo+Pj4gICAgbWx4NWVfc2tiX2Zyb21fY3FlX2xpbmVhcihz dHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NWVfd3FlX2ZyYWdfaW5mbyAqd2ksDQo+Pj4g LSAgICAgICAgICAgICAgICAgICAgICAgdTMyIGNxZV9iY250KQ0KPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUsIHUzMiBjcWVfYmNudCkNCj4+PiAgICB7 DQo+Pj4gICAgICAgIHVuaW9uIG1seDVlX2FsbG9jX3VuaXQgKmF1ID0gd2ktPmF1Ow0KPj4+ICAg ICAgICB1MTYgcnhfaGVhZHJvb20gPSBycS0+YnVmZi5oZWFkcm9vbTsNCj4+PiBAQCAtMTYzMCw3 ICsxNjMwLDcgQEAgbWx4NWVfc2tiX2Zyb21fY3FlX2xpbmVhcihzdHJ1Y3QgbWx4NWVfcnEgKnJx LCBzdHJ1Y3QgbWx4NWVfd3FlX2ZyYWdfaW5mbyAqd2ksDQo+Pj4NCj4+PiAgICBzdGF0aWMgc3Ry dWN0IHNrX2J1ZmYgKg0KPj4+ICAgIG1seDVlX3NrYl9mcm9tX2NxZV9ub25saW5lYXIoc3RydWN0 IG1seDVlX3JxICpycSwgc3RydWN0IG1seDVlX3dxZV9mcmFnX2luZm8gKndpLA0KPj4+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgIHUzMiBjcWVfYmNudCkNCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlLCB1MzIgY3FlX2JjbnQpDQo+Pj4gICAg ew0KPj4+ICAgICAgICBzdHJ1Y3QgbWx4NWVfcnFfZnJhZ19pbmZvICpmcmFnX2luZm8gPSAmcnEt PndxZS5pbmZvLmFyclswXTsNCj4+PiAgICAgICAgc3RydWN0IG1seDVlX3dxZV9mcmFnX2luZm8g KmhlYWRfd2kgPSB3aTsNCj4+PiBAQCAtMTY1NCw3ICsxNjU0LDcgQEAgbWx4NWVfc2tiX2Zyb21f Y3FlX25vbmxpbmVhcihzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1Y3QgbWx4NWVfd3FlX2ZyYWdf aW5mbyAqd2kNCj4+PiAgICAgICAgbmV0X3ByZWZldGNodyh2YSk7IC8qIHhkcF9mcmFtZSBkYXRh IGFyZWEgKi8NCj4+PiAgICAgICAgbmV0X3ByZWZldGNoKHZhICsgcnhfaGVhZHJvb20pOw0KPj4+ DQo+Pj4gLSAgICAgbWx4NWVfZmlsbF9teGJ1ZihycSwgdmEsIHJ4X2hlYWRyb29tLCBmcmFnX2Nv bnN1bWVkX2J5dGVzLCAmbXhidWYpOw0KPj4+ICsgICAgIG1seDVlX2ZpbGxfbXhidWYocnEsIGNx ZSwgdmEsIHJ4X2hlYWRyb29tLCBmcmFnX2NvbnN1bWVkX2J5dGVzLCAmbXhidWYpOw0KPj4+ICAg ICAgICBzaW5mbyA9IHhkcF9nZXRfc2hhcmVkX2luZm9fZnJvbV9idWZmKCZteGJ1Zi54ZHApOw0K Pj4+ICAgICAgICB0cnVlc2l6ZSA9IDA7DQo+Pj4NCj4+PiBAQCAtMTc3Nyw3ICsxNzc3LDcgQEAg c3RhdGljIHZvaWQgbWx4NWVfaGFuZGxlX3J4X2NxZShzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBzdHJ1 Y3QgbWx4NV9jcWU2NCAqY3FlKQ0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWx4 NWVfc2tiX2Zyb21fY3FlX2xpbmVhciwNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG1seDVlX3NrYl9mcm9tX2NxZV9ub25saW5lYXIsDQo+Pj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtbHg1ZV94c2tfc2tiX2Zyb21fY3FlX2xpbmVhciwNCj4+PiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgcnEsIHdpLCBjcWVfYmNudCk7DQo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJxLCB3aSwgY3FlLCBjcWVfYmNudCk7DQo+Pj4gICAgICAgIGlmICghc2tiKSB7 DQo+Pj4gICAgICAgICAgICAgICAgLyogcHJvYmFibHkgZm9yIFhEUCAqLw0KPj4+ICAgICAgICAg ICAgICAgIGlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChNTFg1RV9SUV9GTEFHX1hEUF9YTUlULCBy cS0+ZmxhZ3MpKSB7DQo+Pj4gQEAgLTE4MzAsNyArMTgzMCw3IEBAIHN0YXRpYyB2b2lkIG1seDVl X2hhbmRsZV9yeF9jcWVfcmVwKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxZTY0 ICpjcWUpDQo+Pj4gICAgICAgIHNrYiA9IElORElSRUNUX0NBTExfMihycS0+d3FlLnNrYl9mcm9t X2NxZSwNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1seDVlX3NrYl9mcm9tX2Nx ZV9saW5lYXIsDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbHg1ZV9za2JfZnJv bV9jcWVfbm9ubGluZWFyLA0KPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICBycSwgd2ks IGNxZV9iY250KTsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgcnEsIHdpLCBjcWUs IGNxZV9iY250KTsNCj4+PiAgICAgICAgaWYgKCFza2IpIHsNCj4+PiAgICAgICAgICAgICAgICAv KiBwcm9iYWJseSBmb3IgWERQICovDQo+Pj4gICAgICAgICAgICAgICAgaWYgKF9fdGVzdF9hbmRf Y2xlYXJfYml0KE1MWDVFX1JRX0ZMQUdfWERQX1hNSVQsIHJxLT5mbGFncykpIHsNCj4+PiBAQCAt MTg4OSw3ICsxODg5LDcgQEAgc3RhdGljIHZvaWQgbWx4NWVfaGFuZGxlX3J4X2NxZV9tcHdycV9y ZXAoc3RydWN0IG1seDVlX3JxICpycSwgc3RydWN0IG1seDVfY3FlNjQNCj4+PiAgICAgICAgc2ti ID0gSU5ESVJFQ1RfQ0FMTF8yKHJxLT5tcHdxZS5za2JfZnJvbV9jcWVfbXB3cnEsDQo+Pj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtbHg1ZV9za2JfZnJvbV9jcWVfbXB3cnFfbGluZWFy LA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWx4NWVfc2tiX2Zyb21fY3FlX21w d3JxX25vbmxpbmVhciwNCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgcnEsIHdpLCBj cWVfYmNudCwgaGVhZF9vZmZzZXQsIHBhZ2VfaWR4KTsNCj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgcnEsIHdpLCBjcWUsIGNxZV9iY250LCBoZWFkX29mZnNldCwgcGFnZV9pZHgpOw0K Pj4+ICAgICAgICBpZiAoIXNrYikNCj4+PiAgICAgICAgICAgICAgICBnb3RvIG1wd3JxX2NxZV9v dXQ7DQo+Pj4NCj4+PiBAQCAtMTk0MCw3ICsxOTQwLDggQEAgbWx4NWVfZmlsbF9za2JfZGF0YShz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWx4NWVfcnEgKnJxLA0KPj4+DQo+Pj4gICAgc3Rh dGljIHN0cnVjdCBza19idWZmICoNCj4+PiAgICBtbHg1ZV9za2JfZnJvbV9jcWVfbXB3cnFfbm9u bGluZWFyKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1ZV9tcHdfaW5mbyAqd2ksDQo+ Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGNxZV9iY250LCB1MzIgaGVh ZF9vZmZzZXQsIHUzMiBwYWdlX2lkeCkNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlLCB1MTYgY3FlX2JjbnQsIHUzMiBoZWFkX29mZnNl dCwNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcGFnZV9pZHgpDQo+ Pj4gICAgew0KPj4+ICAgICAgICB1bmlvbiBtbHg1ZV9hbGxvY191bml0ICphdSA9ICZ3aS0+YWxs b2NfdW5pdHNbcGFnZV9pZHhdOw0KPj4+ICAgICAgICB1MTYgaGVhZGxlbiA9IG1pbl90KHUxNiwg TUxYNUVfUlhfTUFYX0hFQUQsIGNxZV9iY250KTsNCj4+PiBAQCAtMTk3OSw3ICsxOTgwLDggQEAg bWx4NWVfc2tiX2Zyb21fY3FlX21wd3JxX25vbmxpbmVhcihzdHJ1Y3QgbWx4NWVfcnEgKnJxLCBz dHJ1Y3QgbWx4NWVfbXB3X2luZm8gKncNCj4+Pg0KPj4+ICAgIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVm ZiAqDQo+Pj4gICAgbWx4NWVfc2tiX2Zyb21fY3FlX21wd3JxX2xpbmVhcihzdHJ1Y3QgbWx4NWVf cnEgKnJxLCBzdHJ1Y3QgbWx4NWVfbXB3X2luZm8gKndpLA0KPj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHUxNiBjcWVfYmNudCwgdTMyIGhlYWRfb2Zmc2V0LCB1MzIgcGFnZV9pZHgp DQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1seDVfY3FlNjQgKmNx ZSwgdTE2IGNxZV9iY250LCB1MzIgaGVhZF9vZmZzZXQsDQo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdTMyIHBhZ2VfaWR4KQ0KPj4+ICAgIHsNCj4+PiAgICAgICAgdW5pb24gbWx4 NWVfYWxsb2NfdW5pdCAqYXUgPSAmd2ktPmFsbG9jX3VuaXRzW3BhZ2VfaWR4XTsNCj4+PiAgICAg ICAgdTE2IHJ4X2hlYWRyb29tID0gcnEtPmJ1ZmYuaGVhZHJvb207DQo+Pj4gQEAgLTIwMTAsNyAr MjAxMiw3IEBAIG1seDVlX3NrYl9mcm9tX2NxZV9tcHdycV9saW5lYXIoc3RydWN0IG1seDVlX3Jx ICpycSwgc3RydWN0IG1seDVlX21wd19pbmZvICp3aSwNCj4+PiAgICAgICAgICAgICAgICBzdHJ1 Y3QgbWx4NWVfeGRwX2J1ZmYgbXhidWY7DQo+Pj4NCj4+PiAgICAgICAgICAgICAgICBuZXRfcHJl ZmV0Y2h3KHZhKTsgLyogeGRwX2ZyYW1lIGRhdGEgYXJlYSAqLw0KPj4+IC0gICAgICAgICAgICAg bWx4NWVfZmlsbF9teGJ1ZihycSwgdmEsIHJ4X2hlYWRyb29tLCBjcWVfYmNudCwgJm14YnVmKTsN Cj4+PiArICAgICAgICAgICAgIG1seDVlX2ZpbGxfbXhidWYocnEsIGNxZSwgdmEsIHJ4X2hlYWRy b29tLCBjcWVfYmNudCwgJm14YnVmKTsNCj4+PiAgICAgICAgICAgICAgICBpZiAobWx4NWVfeGRw X2hhbmRsZShycSwgYXUtPnBhZ2UsIHByb2csICZteGJ1ZikpIHsNCj4+PiAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChNTFg1RV9SUV9GTEFHX1hEUF9YTUlU LCBycS0+ZmxhZ3MpKQ0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NldF9i aXQocGFnZV9pZHgsIHdpLT54ZHBfeG1pdF9iaXRtYXApOyAvKiBub24tYXRvbWljICovDQo+Pj4g QEAgLTIxNzQsOCArMjE3Niw4IEBAIHN0YXRpYyB2b2lkIG1seDVlX2hhbmRsZV9yeF9jcWVfbXB3 cnFfc2hhbXBvKHN0cnVjdCBtbHg1ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxDQo+Pj4gICAgICAg ICAgICAgICAgaWYgKGxpa2VseShoZWFkX3NpemUpKQ0KPj4+ICAgICAgICAgICAgICAgICAgICAg ICAgKnNrYiA9IG1seDVlX3NrYl9mcm9tX2NxZV9zaGFtcG8ocnEsIHdpLCBjcWUsIGhlYWRlcl9p bmRleCk7DQo+Pj4gICAgICAgICAgICAgICAgZWxzZQ0KPj4+IC0gICAgICAgICAgICAgICAgICAg ICAqc2tiID0gbWx4NWVfc2tiX2Zyb21fY3FlX21wd3JxX25vbmxpbmVhcihycSwgd2ksIGNxZV9i Y250LCBkYXRhX29mZnNldCwNCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV9pZHgpOw0KPj4+ICsgICAgICAgICAg ICAgICAgICAgICAqc2tiID0gbWx4NWVfc2tiX2Zyb21fY3FlX21wd3JxX25vbmxpbmVhcihycSwg d2ksIGNxZSwgY3FlX2JjbnQsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb2Zmc2V0LCBwYWdlX2lkeCk7DQo+ Pj4gICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KCEqc2tiKSkNCj4+PiAgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZnJlZV9oZF9lbnRyeTsNCj4+Pg0KPj4+IEBAIC0yMjQ5LDcgKzIyNTEs OCBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9oYW5kbGVfcnhfY3FlX21wd3JxKHN0cnVjdCBtbHg1ZV9y cSAqcnEsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcQ0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWx4NWVfc2tiX2Zyb21fY3FlX21wd3JxX2xpbmVhciwNCj4+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1seDVlX3NrYl9mcm9tX2NxZV9tcHdycV9ub25saW5lYXIsDQo+Pj4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbHg1ZV94c2tfc2tiX2Zyb21fY3FlX21wd3Jx X2xpbmVhciwNCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgcnEsIHdpLCBjcWVfYmNu dCwgaGVhZF9vZmZzZXQsIHBhZ2VfaWR4KTsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgcnEsIHdpLCBjcWUsIGNxZV9iY250LCBoZWFkX29mZnNldCwNCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGFnZV9pZHgpOw0KPj4+ICAgICAgICBpZiAoIXNrYikNCj4+PiAgICAg ICAgICAgICAgICBnb3RvIG1wd3JxX2NxZV9vdXQ7DQo+Pj4NCj4+PiBAQCAtMjQ5NCw3ICsyNDk3 LDcgQEAgc3RhdGljIHZvaWQgbWx4NWlfaGFuZGxlX3J4X2NxZShzdHJ1Y3QgbWx4NWVfcnEgKnJx LCBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKQ0KPj4+ICAgICAgICBza2IgPSBJTkRJUkVDVF9DQUxM XzIocnEtPndxZS5za2JfZnJvbV9jcWUsDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtbHg1ZV9za2JfZnJvbV9jcWVfbGluZWFyLA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWx4NWVfc2tiX2Zyb21fY3FlX25vbmxpbmVhciwNCj4+PiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgcnEsIHdpLCBjcWVfYmNudCk7DQo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJxLCB3aSwgY3FlLCBjcWVfYmNudCk7DQo+Pj4gICAgICAgIGlmICghc2tiKQ0KPj4+ ICAgICAgICAgICAgICAgIGdvdG8gd3FfZnJlZV93cWU7DQo+Pj4NCj4+PiBAQCAtMjU4Niw3ICsy NTg5LDcgQEAgc3RhdGljIHZvaWQgbWx4NWVfdHJhcF9oYW5kbGVfcnhfY3FlKHN0cnVjdCBtbHg1 ZV9ycSAqcnEsIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUNCj4+PiAgICAgICAgICAgICAgICBnb3Rv IGZyZWVfd3FlOw0KPj4+ICAgICAgICB9DQo+Pj4NCj4+PiAtICAgICBza2IgPSBtbHg1ZV9za2Jf ZnJvbV9jcWVfbm9ubGluZWFyKHJxLCB3aSwgY3FlX2JjbnQpOw0KPj4+ICsgICAgIHNrYiA9IG1s eDVlX3NrYl9mcm9tX2NxZV9ub25saW5lYXIocnEsIHdpLCBjcWUsIGNxZV9iY250KTsNCj4+PiAg ICAgICAgaWYgKCFza2IpDQo+Pj4gICAgICAgICAgICAgICAgZ290byBmcmVlX3dxZTsNCj4+Pg0K