From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E0B9D48C2F; Fri, 5 Dec 2025 11:56:44 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A9BE94027D; Fri, 5 Dec 2025 11:56:44 +0100 (CET) Received: from cstnet.cn (smtp86.cstnet.cn [159.226.251.86]) by mails.dpdk.org (Postfix) with ESMTP id D764840156 for ; Fri, 5 Dec 2025 11:56:42 +0100 (CET) Received: from sunyuechi$iscas.ac.cn ( [123.189.192.241] ) by ajax-webmail-APP-16 (Coremail) ; Fri, 5 Dec 2025 18:56:37 +0800 (GMT+08:00) X-Originating-IP: [123.189.192.241] Date: Fri, 5 Dec 2025 18:56:37 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: sunyuechi@iscas.ac.cn To: dev@dpdk.org Cc: Zijian , =?UTF-8?Q?Stanis=C5=82aw_Kardach?= , "Nithin Dabilpuram" , "Pavan Nikhilesh" Subject: Re: [PATCH] node: lookup with RISC-V vector extension X-Priority: 3 X-Mailer: Coremail Webmail Server Version 2024.1-cmXT5 build 20240627(e6c6db66) Copyright (c) 2002-2025 www.mailtech.cn cnic.cn In-Reply-To: <20251116155001.2809998-1-sunyuechi@iscas.ac.cn> References: <20251116155001.2809998-1-sunyuechi@iscas.ac.cn> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=UTF-8 MIME-Version: 1.0 Message-ID: <3904297.3ad64.19aee281d5c.Coremail.sunyuechi@iscas.ac.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID: sQCowACXnhdlujJpA+IGAA--.56887W X-CM-SenderInfo: 5vxq53phfkxq5lvft2wodfhubq/1tbiCQ4HAmkybeL4YQAEsL X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWxJw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org cGluZwoKCiZndDsgLS0tLS3ljp/lp4vpgq7ku7YtLS0tLQomZ3Q7IOWPkeS7tuS6ujogIlN1biBZ dWVjaGkiIDxzdW55dWVjaGlAaXNjYXMuYWMuY24+CiZndDsg5Y+R6YCB5pe26Ze0OiAyMDI1LTEx LTE2IDIzOjUwOjAxICjmmJ/mnJ/ml6UpCiZndDsg5pS25Lu25Lq6OiBkZXZAZHBkay5vcmcKJmd0 OyDmioTpgIE6ICJTdW4gWXVlY2hpIiA8c3VueXVlY2hpQGlzY2FzLmFjLmNuPiwgWmlqaWFuIDx6 aWppYW4ub2VydkBpc3JjLmlzY2FzLmFjLmNuPiwgIlN0YW5pc8WCYXcgS2FyZGFjaCIgPHN0YW5p c2xhdy5rYXJkYWNoQGdtYWlsLmNvbT4sICJOaXRoaW4gRGFiaWxwdXJhbSIgPG5kYWJpbHB1cmFt QG1hcnZlbGwuY29tPiwgIlBhdmFuIE5pa2hpbGVzaCIgPHBiaGFnYXZhdHVsYUBtYXJ2ZWxsLmNv bT4KJmd0OyDkuLvpopg6IFtQQVRDSF0gbm9kZTogbG9va3VwIHdpdGggUklTQy1WIHZlY3RvciBl eHRlbnNpb24KJmd0OyAKJmd0OyBJbXBsZW1lbnQgaXA0X2xvb2t1cF9ub2RlX3Byb2Nlc3NfdmVj IGZ1bmN0aW9uIGZvciBSSVNDLVYgYXJjaGl0ZWN0dXJlCiZndDsgdXNpbmcgUklTQy1WIFZlY3Rv ciBFeHRlbnNpb24gaW5zdHJ1Y3Rpb24gc2V0CiZndDsgCiZndDsgU2lnbmVkLW9mZi1ieTogU3Vu IFl1ZWNoaSA8c3VueXVlY2hpQGlzY2FzLmFjLmNuPgomZ3Q7IFNpZ25lZC1vZmYtYnk6IFppamlh biA8emlqaWFuLm9lcnZAaXNyYy5pc2Nhcy5hYy5jbj4KJmd0OyAtLS0KJmd0OyAgbGliL2VhbC9y aXNjdi9pbmNsdWRlL3J0ZV92ZWN0LmggfCAgIDIgKy0KJmd0OyAgbGliL25vZGUvaXA0X2xvb2t1 cC5jICAgICAgICAgICAgfCAgIDUgKy0KJmd0OyAgbGliL25vZGUvaXA0X2xvb2t1cF9ydnYuaCAg ICAgICAgfCAxNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwomZ3Q7ICAzIGZpbGVz IGNoYW5nZWQsIDE3MiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQomZ3Q7ICBjcmVhdGUg bW9kZSAxMDA2NDQgbGliL25vZGUvaXA0X2xvb2t1cF9ydnYuaAomZ3Q7IAomZ3Q7IGRpZmYgLS1n aXQgYS9saWIvZWFsL3Jpc2N2L2luY2x1ZGUvcnRlX3ZlY3QuaCBiL2xpYi9lYWwvcmlzY3YvaW5j bHVkZS9ydGVfdmVjdC5oCiZndDsgaW5kZXggYTQzNTdlMjY2YS4uNGQxNjA4MjQ0OSAxMDA2NDQK Jmd0OyAtLS0gYS9saWIvZWFsL3Jpc2N2L2luY2x1ZGUvcnRlX3ZlY3QuaAomZ3Q7ICsrKyBiL2xp Yi9lYWwvcmlzY3YvaW5jbHVkZS9ydGVfdmVjdC5oCiZndDsgQEAgLTE5LDcgKzE5LDcgQEAKJmd0 OyAgZXh0ZXJuICJDIiB7CiZndDsgICNlbmRpZgomZ3Q7ICAKJmd0OyAtI2RlZmluZSBSVEVfVkVD VF9ERUZBVUxUX1NJTURfQklUV0lEVEggUlRFX1ZFQ1RfU0lNRF9ESVNBQkxFRAomZ3Q7ICsjZGVm aW5lIFJURV9WRUNUX0RFRkFVTFRfU0lNRF9CSVRXSURUSCBSVEVfVkVDVF9TSU1EXzEyOAomZ3Q7 ICAKJmd0OyAgdHlwZWRlZiBpbnQzMl90CQl4bW1fdCBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6 ZSgxNikpKTsKJmd0OyAgCiZndDsgZGlmZiAtLWdpdCBhL2xpYi9ub2RlL2lwNF9sb29rdXAuYyBi L2xpYi9ub2RlL2lwNF9sb29rdXAuYwomZ3Q7IGluZGV4IDk2NzNhMGQ3OGQuLmQzYWVkMDg5ZjQg MTAwNjQ0CiZndDsgLS0tIGEvbGliL25vZGUvaXA0X2xvb2t1cC5jCiZndDsgKysrIGIvbGliL25v ZGUvaXA0X2xvb2t1cC5jCiZndDsgQEAgLTQ0LDYgKzQ0LDggQEAgc3RhdGljIHN0cnVjdCBpcDRf bG9va3VwX25vZGVfbWFpbiBpcDRfbG9va3VwX25tOwomZ3Q7ICAjaW5jbHVkZSAiaXA0X2xvb2t1 cF9uZW9uLmgiCiZndDsgICNlbGlmIGRlZmluZWQoUlRFX0FSQ0hfWDg2KQomZ3Q7ICAjaW5jbHVk ZSAiaXA0X2xvb2t1cF9zc2UuaCIKJmd0OyArI2VsaWYgZGVmaW5lZChSVEVfQVJDSF9SSVNDVikg JmFtcDsmYW1wOyBkZWZpbmVkKFJURV9SSVNDVl9GRUFUVVJFX1YpCiZndDsgKyNpbmNsdWRlICJp cDRfbG9va3VwX3J2di5oIgomZ3Q7ICAjZW5kaWYKJmd0OyAgCiZndDsgIHN0YXRpYyB1aW50MTZf dAomZ3Q7IEBAIC0yMTEsNyArMjEzLDggQEAgaXA0X2xvb2t1cF9ub2RlX2luaXQoY29uc3Qgc3Ry dWN0IHJ0ZV9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBydGVfbm9kZSAqbm9kZSkKJmd0OyAgCUlQNF9M T09LVVBfTk9ERV9MUE0obm9kZS0mZ3Q7Y3R4KSA9IGlwNF9sb29rdXBfbm0ubHBtX3RibFtncmFw aC0mZ3Q7c29ja2V0XTsKJmd0OyAgCUlQNF9MT09LVVBfTk9ERV9QUklWMV9PRkYobm9kZS0mZ3Q7 Y3R4KSA9IGR5bjsKJmd0OyAgCiZndDsgLSNpZiBkZWZpbmVkKF9fQVJNX05FT04pIHx8IGRlZmlu ZWQoUlRFX0FSQ0hfWDg2KQomZ3Q7ICsjaWYgZGVmaW5lZChfX0FSTV9ORU9OKSB8fCBkZWZpbmVk KFJURV9BUkNIX1g4NikgfHwgXAomZ3Q7ICsJKGRlZmluZWQoUlRFX0FSQ0hfUklTQ1YpICZhbXA7 JmFtcDsgZGVmaW5lZChSVEVfUklTQ1ZfRkVBVFVSRV9WKSkKJmd0OyAgCWlmIChydGVfdmVjdF9n ZXRfbWF4X3NpbWRfYml0d2lkdGgoKSAmZ3Q7PSBSVEVfVkVDVF9TSU1EXzEyOCkKJmd0OyAgCQlu b2RlLSZndDtwcm9jZXNzID0gaXA0X2xvb2t1cF9ub2RlX3Byb2Nlc3NfdmVjOwomZ3Q7ICAjZW5k aWYKJmd0OyBkaWZmIC0tZ2l0IGEvbGliL25vZGUvaXA0X2xvb2t1cF9ydnYuaCBiL2xpYi9ub2Rl L2lwNF9sb29rdXBfcnZ2LmgKJmd0OyBuZXcgZmlsZSBtb2RlIDEwMDY0NAomZ3Q7IGluZGV4IDAw MDAwMDAwMDAuLmE3NGU0ZmEyMDQKJmd0OyAtLS0gL2Rldi9udWxsCiZndDsgKysrIGIvbGliL25v ZGUvaXA0X2xvb2t1cF9ydnYuaAomZ3Q7IEBAIC0wLDAgKzEsMTY3IEBACiZndDsgKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKJmd0OyArICogQ29weXJpZ2h0IChjKSAy MDI1IEluc3RpdHV0ZSBvZiBTb2Z0d2FyZSBDaGluZXNlIEFjYWRlbXkgb2YgU2NpZW5jZXMgKElT Q0FTKS4KJmd0OyArICovCiZndDsgKwomZ3Q7ICsjaWZuZGVmIF9fSU5DTFVERV9JUDRfTE9PS1VQ X1JWVl9IX18KJmd0OyArI2RlZmluZSBfX0lOQ0xVREVfSVA0X0xPT0tVUF9SVlZfSF9fCiZndDsg KwomZ3Q7ICsjZGVmaW5lIFJURV9MUE1fTE9PS1VQX1NVQ0NFU1MgMHgwMTAwMDAwMAomZ3Q7ICsj ZGVmaW5lIFJURV9MUE1fVkFMSURfRVhUX0VOVFJZX0JJVE1BU0sgMHgwMzAwMDAwMAomZ3Q7ICsK Jmd0OyArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdnVpbnQzMm04X3QKJmd0OyArYnN3YXAz Ml92ZWModnVpbnQzMm04X3Qgdiwgc2l6ZV90IHZsKQomZ3Q7ICt7CiZndDsgKwl2dWludDMybThf dCBsb3cxNiA9IF9fcmlzY3Zfdm9yX3Z2X3UzMm04KAomZ3Q7ICsJCV9fcmlzY3ZfdnNsbF92eF91 MzJtOChfX3Jpc2N2X3ZhbmRfdnhfdTMybTgodiwgMHhGRiwgdmwpLCAyNCwgdmwpLAomZ3Q7ICsJ CV9fcmlzY3ZfdnNsbF92eF91MzJtOChfX3Jpc2N2X3ZhbmRfdnhfdTMybTgodiwgMHhGRjAwLCB2 bCksIDgsIHZsKSwKJmd0OyArCQl2bCk7CiZndDsgKwomZ3Q7ICsJdnVpbnQzMm04X3QgaGlnaDE2 ID0gX19yaXNjdl92b3JfdnZfdTMybTgoCiZndDsgKwkJX19yaXNjdl92c3JsX3Z4X3UzMm04KF9f cmlzY3ZfdmFuZF92eF91MzJtOCh2LCAweEZGMDAwMCwgdmwpLCA4LCB2bCksCiZndDsgKwkJX19y aXNjdl92c3JsX3Z4X3UzMm04KHYsIDI0LCB2bCksCiZndDsgKwkJdmwpOwomZ3Q7ICsKJmd0OyAr CXJldHVybiBfX3Jpc2N2X3Zvcl92dl91MzJtOChsb3cxNiwgaGlnaDE2LCB2bCk7CiZndDsgK30K Jmd0OyArCiZndDsgK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQKJmd0OyArcnRlX2xw bV9sb29rdXBfdmVjKGNvbnN0IHN0cnVjdCBydGVfbHBtICpscG0sIGNvbnN0IHVpbnQzMl90ICpp cHMsCiZndDsgKwkJCXVpbnQzMl90ICpob3AsIHNpemVfdCB2bCwgdWludDMyX3QgZGVmdikKJmd0 OyArewomZ3Q7ICsJLyogTG9hZCBJUCBhZGRyZXNzZXMgKG5ldHdvcmsgYnl0ZSBvcmRlcikgKi8K Jmd0OyArCXZ1aW50MzJtOF90IHZfaXAgPSBic3dhcDMyX3ZlYyhfX3Jpc2N2X3ZsZTMyX3ZfdTMy bTgoaXBzLCB2bCksIHZsKTsKJmd0OyArCiZndDsgKwl2dWludDMybThfdCB2X3RibDI0X2J5dGVf b2Zmc2V0ID0gX19yaXNjdl92c2xsX3Z4X3UzMm04KAomZ3Q7ICsJCQlfX3Jpc2N2X3Zzcmxfdnhf dTMybTgodl9pcCwgOCwgdmwpLCAyLCB2bCk7CiZndDsgKwomZ3Q7ICsJdnVpbnQzMm04X3QgdnRi bF9lbnRyeSA9IF9fcmlzY3Zfdmx1eGVpMzJfdl91MzJtOCgKJmd0OyArCQkoY29uc3QgdWludDMy X3QgKilscG0tJmd0O3RibDI0LCB2X3RibDI0X2J5dGVfb2Zmc2V0LCB2bCk7CiZndDsgKwomZ3Q7 ICsJdmJvb2w0X3QgbWFzayA9IF9fcmlzY3Zfdm1zZXFfdnhfdTMybThfYjQoCiZndDsgKwkJX19y aXNjdl92YW5kX3Z4X3UzMm04KHZ0YmxfZW50cnksIFJURV9MUE1fVkFMSURfRVhUX0VOVFJZX0JJ VE1BU0ssIHZsKSwKJmd0OyArCQlSVEVfTFBNX1ZBTElEX0VYVF9FTlRSWV9CSVRNQVNLLCB2bCk7 CiZndDsgKwomZ3Q7ICsJdnVpbnQzMm04X3QgdnRibDhfaW5kZXggPSBfX3Jpc2N2X3ZzbGxfdnhf dTMybTgoCiZndDsgKwkJX19yaXNjdl92YWRkX3Z2X3UzMm04KAomZ3Q7ICsJCQlfX3Jpc2N2X3Zz bGxfdnhfdTMybTgoCiZndDsgKwkJCQlfX3Jpc2N2X3ZhbmRfdnhfdTMybTgodnRibF9lbnRyeSwg MHgwMEZGRkZGRiwgdmwpLCA4LCB2bCksCiZndDsgKwkJCV9fcmlzY3ZfdmFuZF92eF91MzJtOCh2 X2lwLCAweDAwMDAwMEZGLCB2bCksIHZsKSwKJmd0OyArCQkyLCB2bCk7CiZndDsgKwomZ3Q7ICsJ dnRibF9lbnRyeSA9IF9fcmlzY3Zfdmx1eGVpMzJfdl91MzJtOF9tdSgKJmd0OyArCQltYXNrLCB2 dGJsX2VudHJ5LCAoY29uc3QgdWludDMyX3QgKikobHBtLSZndDt0Ymw4KSwgdnRibDhfaW5kZXgs IHZsKTsKJmd0OyArCiZndDsgKwl2dWludDMybThfdCB2bmV4dF9ob3AgPSBfX3Jpc2N2X3ZhbmRf dnhfdTMybTgodnRibF9lbnRyeSwgMHgwMEZGRkZGRiwgdmwpOwomZ3Q7ICsJbWFzayA9IF9fcmlz Y3Zfdm1zZXFfdnhfdTMybThfYjQoCiZndDsgKwkJX19yaXNjdl92YW5kX3Z4X3UzMm04KHZ0Ymxf ZW50cnksIFJURV9MUE1fTE9PS1VQX1NVQ0NFU1MsIHZsKSwgMCwgdmwpOwomZ3Q7ICsKJmd0OyAr CXZuZXh0X2hvcCA9IF9fcmlzY3Zfdm1lcmdlX3Z4bV91MzJtOCh2bmV4dF9ob3AsIGRlZnYsIG1h c2ssIHZsKTsKJmd0OyArCiZndDsgKwlfX3Jpc2N2X3ZzZTMyX3ZfdTMybTgoaG9wLCB2bmV4dF9o b3AsIHZsKTsKJmd0OyArfQomZ3Q7ICsKJmd0OyArLyogQ2FuIGJlIGluY3JlYXNlZCBmdXJ0aGVy IGZvciBWTEVOICZndDsgMjU2ICovCiZndDsgKyNkZWZpbmUgUlZWX01BWF9CVVJTVCA2NFUKJmd0 OyArCiZndDsgK3N0YXRpYyB1aW50MTZfdAomZ3Q7ICtpcDRfbG9va3VwX25vZGVfcHJvY2Vzc192 ZWMoc3RydWN0IHJ0ZV9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBydGVfbm9kZSAqbm9kZSwKJmd0OyAr CQkJdm9pZCAqKm9ianMsIHVpbnQxNl90IG5iX29ianMpCiZndDsgK3sKJmd0OyArCXN0cnVjdCBy dGVfbWJ1ZiAqKnBrdHM7CiZndDsgKwlzdHJ1Y3QgcnRlX2xwbSAqbHBtID0gSVA0X0xPT0tVUF9O T0RFX0xQTShub2RlLSZndDtjdHgpOwomZ3Q7ICsJY29uc3QgaW50IGR5biA9IElQNF9MT09LVVBf Tk9ERV9QUklWMV9PRkYobm9kZS0mZ3Q7Y3R4KTsKJmd0OyArCXJ0ZV9lZGdlX3QgbmV4dF9pbmRl eDsKJmd0OyArCXZvaWQgKip0b19uZXh0LCAqKmZyb207CiZndDsgKwl1aW50MTZfdCBsYXN0X3Nw ZWMgPSAwOwomZ3Q7ICsJdWludDE2X3Qgbl9sZWZ0X2Zyb207CiZndDsgKwl1aW50MTZfdCBoZWxk ID0gMDsKJmd0OyArCXVpbnQzMl90IGRyb3Bfbmg7CiZndDsgKwomZ3Q7ICsJLyogVGVtcG9yYXJ5 IGFycmF5cyBmb3IgYmF0Y2ggcHJvY2Vzc2luZyAqLwomZ3Q7ICsJdWludDMyX3QgaXBzW1JWVl9N QVhfQlVSU1RdOwomZ3Q7ICsJdWludDMyX3QgcmVzW1JWVl9NQVhfQlVSU1RdOwomZ3Q7ICsJcnRl X2VkZ2VfdCBuZXh0X2hvcHNbUlZWX01BWF9CVVJTVF07CiZndDsgKwomZ3Q7ICsJLyogU3BlY3Vs YXRpdmUgbmV4dCAqLwomZ3Q7ICsJbmV4dF9pbmRleCA9IFJURV9OT0RFX0lQNF9MT09LVVBfTkVY VF9SRVdSSVRFOwomZ3Q7ICsJLyogRHJvcCBub2RlICovCiZndDsgKwlkcm9wX25oID0gKCh1aW50 MzJfdClSVEVfTk9ERV9JUDRfTE9PS1VQX05FWFRfUEtUX0RST1ApICZsdDsmbHQ7IDE2OwomZ3Q7 ICsKJmd0OyArCXBrdHMgPSAoc3RydWN0IHJ0ZV9tYnVmICoqKW9ianM7CiZndDsgKwlmcm9tID0g b2JqczsKJmd0OyArCW5fbGVmdF9mcm9tID0gbmJfb2JqczsKJmd0OyArCiZndDsgKwkvKiBHZXQg c3RyZWFtIGZvciB0aGUgc3BlY3VsYXRlZCBuZXh0IG5vZGUgKi8KJmd0OyArCXRvX25leHQgPSBy dGVfbm9kZV9uZXh0X3N0cmVhbV9nZXQoZ3JhcGgsIG5vZGUsIG5leHRfaW5kZXgsIG5iX29ianMp OwomZ3Q7ICsKJmd0OyArCXdoaWxlIChuX2xlZnRfZnJvbSAmZ3Q7IDApIHsKJmd0OyArCQlydGVf ZWRnZV90IGZpeF9zcGVjID0gMDsKJmd0OyArCiZndDsgKwkJc2l6ZV90IHZsID0gX19yaXNjdl92 c2V0dmxfZTMybTgoUlRFX01JTihuX2xlZnRfZnJvbSwgUlZWX01BWF9CVVJTVCkpOwomZ3Q7ICsK Jmd0OyArCQkvKiBFeHRyYWN0IElQIGFkZHJlc3NlcyBhbmQgbWV0YWRhdGEgZnJvbSBjdXJyZW50 IGJhdGNoICovCiZndDsgKwkJZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyB2bDsgaSsrKSB7CiZn dDsgKwkJCXN0cnVjdCBydGVfaXB2NF9oZHIgKmlwdjRfaGRyID0KJmd0OyArCQkJCXJ0ZV9wa3Rt YnVmX210b2Rfb2Zmc2V0KHBrdHNbaV0sIHN0cnVjdCBydGVfaXB2NF9oZHIgKiwKJmd0OyArCQkJ CQkJc2l6ZW9mKHN0cnVjdCBydGVfZXRoZXJfaGRyKSk7CiZndDsgKwkJCWlwc1tpXSA9IGlwdjRf aGRyLSZndDtkc3RfYWRkcjsKJmd0OyArCQkJbm9kZV9tYnVmX3ByaXYxKHBrdHNbaV0sIGR5bikt Jmd0O2Nrc3VtID0gaXB2NF9oZHItJmd0O2hkcl9jaGVja3N1bTsKJmd0OyArCQkJbm9kZV9tYnVm X3ByaXYxKHBrdHNbaV0sIGR5biktJmd0O3R0bCA9IGlwdjRfaGRyLSZndDt0aW1lX3RvX2xpdmU7 CiZndDsgKwkJfQomZ3Q7ICsKJmd0OyArCQkvKiBQZXJmb3JtIExQTSBsb29rdXAgKi8KJmd0OyAr CQlydGVfbHBtX2xvb2t1cF92ZWMobHBtLCBpcHMsIHJlcywgdmwsIGRyb3BfbmgpOwomZ3Q7ICsK Jmd0OyArCQlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IHZsOyBpKyspIHsKJmd0OyArCQkJLyog VXBkYXRlIHN0YXRpc3RpY3MgKi8KJmd0OyArCQkJaWYgKChyZXNbaV0gJmd0OyZndDsgMTYpID09 IChkcm9wX25oICZndDsmZ3Q7IDE2KSkKJmd0OyArCQkJCU5PREVfSU5DUkVNRU5UX1hTVEFUX0lE KG5vZGUsIDAsIDEsIDEpOwomZ3Q7ICsKJmd0OyArCQkJLyogRXh0cmFjdCBuZXh0IGhvcCBhbmQg bmV4dCBub2RlICovCiZndDsgKwkJCW5vZGVfbWJ1Zl9wcml2MShwa3RzW2ldLCBkeW4pLSZndDtu aCA9IHJlc1tpXSAmYW1wOyAweEZGRkY7CiZndDsgKwkJCW5leHRfaG9wc1tpXSA9IHJlc1tpXSAm Z3Q7Jmd0OyAxNjsKJmd0OyArCiZndDsgKwkJCS8qIENoZWNrIHNwZWN1bGF0aW9uICovCiZndDsg KwkJCWZpeF9zcGVjIHw9IChuZXh0X2luZGV4IF4gbmV4dF9ob3BzW2ldKTsKJmd0OyArCQl9CiZn dDsgKwomZ3Q7ICsJCWlmICh1bmxpa2VseShmaXhfc3BlYykpIHsKJmd0OyArCQkJLyogQ29weSBz dWNjZXNzZnVsbHkgc3BlY3VsYXRlZCBwYWNrZXRzIGJlZm9yZSB0aGlzIGJhdGNoICovCiZndDsg KwkJCXJ0ZV9tZW1jcHkodG9fbmV4dCwgZnJvbSwgbGFzdF9zcGVjICogc2l6ZW9mKGZyb21bMF0p KTsKJmd0OyArCQkJZnJvbSArPSBsYXN0X3NwZWM7CiZndDsgKwkJCXRvX25leHQgKz0gbGFzdF9z cGVjOwomZ3Q7ICsJCQloZWxkICs9IGxhc3Rfc3BlYzsKJmd0OyArCQkJbGFzdF9zcGVjID0gMDsK Jmd0OyArCiZndDsgKwkJCS8qIFByb2Nlc3MgZWFjaCBwYWNrZXQgaW4gY3VycmVudCBiYXRjaCBp bmRpdmlkdWFsbHkgKi8KJmd0OyArCQkJZm9yIChzaXplX3QgaSA9IDA7IGkgJmx0OyB2bDsgaSsr KSB7CiZndDsgKwkJCQlpZiAobmV4dF9pbmRleCA9PSBuZXh0X2hvcHNbaV0pIHsKJmd0OyArCQkJ CQkqdG9fbmV4dCsrID0gZnJvbVtpXTsKJmd0OyArCQkJCQloZWxkKys7CiZndDsgKwkJCQl9IGVs c2UgewomZ3Q7ICsJCQkJCXJ0ZV9ub2RlX2VucXVldWVfeDEoZ3JhcGgsIG5vZGUsIG5leHRfaG9w c1tpXSwgZnJvbVtpXSk7CiZndDsgKwkJCQl9CiZndDsgKwkJCX0KJmd0OyArCiZndDsgKwkJCWZy b20gKz0gdmw7CiZndDsgKwkJfSBlbHNlIHsKJmd0OyArCQkJbGFzdF9zcGVjICs9IHZsOwomZ3Q7 ICsJCX0KJmd0OyArCiZndDsgKwkJcGt0cyArPSB2bDsKJmd0OyArCQluX2xlZnRfZnJvbSAtPSB2 bDsKJmd0OyArCX0KJmd0OyArCiZndDsgKwkvKiBIYW5kbGUgc3VjY2Vzc2Z1bGx5IHNwZWN1bGF0 ZWQgcGFja2V0cyAqLwomZ3Q7ICsJaWYgKGxpa2VseShsYXN0X3NwZWMgPT0gbmJfb2JqcykpIHsK Jmd0OyArCQlydGVfbm9kZV9uZXh0X3N0cmVhbV9tb3ZlKGdyYXBoLCBub2RlLCBuZXh0X2luZGV4 KTsKJmd0OyArCQlyZXR1cm4gbmJfb2JqczsKJmd0OyArCX0KJmd0OyArCiZndDsgKwloZWxkICs9 IGxhc3Rfc3BlYzsKJmd0OyArCXJ0ZV9tZW1jcHkodG9fbmV4dCwgZnJvbSwgbGFzdF9zcGVjICog c2l6ZW9mKGZyb21bMF0pKTsKJmd0OyArCXJ0ZV9ub2RlX25leHRfc3RyZWFtX3B1dChncmFwaCwg bm9kZSwgbmV4dF9pbmRleCwgaGVsZCk7CiZndDsgKwomZ3Q7ICsJcmV0dXJuIG5iX29ianM7CiZn dDsgK30KJmd0OyArI2VuZGlmCiZndDsgLS0gCiZndDsgMi41MS4yCjwvemlqaWFuLm9lcnZAaXNy Yy5pc2Nhcy5hYy5jbj48L3N1bnl1ZWNoaUBpc2Nhcy5hYy5jbj48L3BiaGFnYXZhdHVsYUBtYXJ2 ZWxsLmNvbT48L25kYWJpbHB1cmFtQG1hcnZlbGwuY29tPjwvc3RhbmlzbGF3LmthcmRhY2hAZ21h aWwuY29tPjwvemlqaWFuLm9lcnZAaXNyYy5pc2Nhcy5hYy5jbj48L3N1bnl1ZWNoaUBpc2Nhcy5h Yy5jbj48L3N1bnl1ZWNoaUBpc2Nhcy5hYy5jbj4=