From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [207.46.229.174]) by sourceware.org (Postfix) with SMTP id 8B7C4382E74A for ; Tue, 6 Dec 2022 01:13:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8B7C4382E74A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=eswincomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eswincomputing.com Received: from E0001797DT (unknown [113.200.72.66]) by app2 (Coremail) with SMTP id EggMCgBnOC09l45jzz8WAA--.5090S2; Tue, 06 Dec 2022 09:13:34 +0800 (CST) Date: Tue, 6 Dec 2022 09:13:34 +0800 From: "Fei Gao" To: "Palmer Dabbelt" Cc: gcc-patches , jeffreyalaw , "Kito Cheng" Subject: Re: Re: [PATCH] RISC-V: optimize stack manipulation in save-restore References: , <2022120111070592771334@eswincomputing.com> X-Priority: 3 X-GUID: 1D03F840-6AC0-4467-962A-A942E0C0C5BE X-Has-Attach: no X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <2022120609133379825956@eswincomputing.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-CM-TRANSID:EggMCgBnOC09l45jzz8WAA--.5090S2 X-Coremail-Antispam: 1UD129KBjvJXoW3ZF43tw47uF4DuFWxtF18Xwb_yoWkZr4Dpr s5tFsxAry5Jrn5Cry2gr18JFyfJ3ykG3W5Wry8XF18trsrAr12gFW2gr1q9ryDuF4kAr10 yF1DWrnxuF9xJaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkmb7Iv0xC_Kw4lb4IE77IF4wAFc2x0x2IEx4CE42xK8VAvwI8I cIk0rVWrJVCq3wA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK021l84ACjcxK6xIIjx v20xvE14v26w1j6s0DM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26F4UJVW0owA2z4x0Y4vE x4A2jsIE14v26F4UJVW0owA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_GcCE3s1le2I262IYc4 CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E74AGY7Cv6cx26r4U Jr1UJwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lFcxC0VAYjxAxZF0Ew4 CEw7xC0wCY02Avz4vE14v_KwCF04k20xvY0x0EwIxGrwCF04k20xvE74AGY7Cv6cx26r4U Jr1UJwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E74 80Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIxkGc2Ij64vIr41lIxAIcVC0 I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVCF04 k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIEc7Cj xVAFwI0_Jr0_Gr1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjxUTrcfUUUUU X-CM-SenderInfo: xjdrwv3l6h245lqf0zpsxwx03jof0z/ X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: SGkgUGFsbWVyIGFuZCBhbGwswqAKCkkgaGF2ZSBzcGxpdCB0aGUgcGF0Y2hlcyBhbmQgdHJpZ2dl cnJlZCBhIG5ldyB0aHJlYWQuCmh0dHBzOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNo ZXNAZ2NjLmdudS5vcmcvbXNnMjk3MjA2Lmh0bWwKCkNvdWxkIHlvdSBwbGVhc2UgcmV2aWV3IGF0 IHlvdXIgY29udmVuaWVuY2U/CgpUaGFua3MgJiBCUizCoApGZWkKCk9uIDIwMjItMTItMDHCoDEx OjA3IMKgRmVpIEdhbyA8Z2FvZmVpQGVzd2luY29tcHV0aW5nLmNvbT4gd3JvdGU6Cj4KPk9uIDIw MjItMTItMDHCoDA2OjUwIMKgUGFsbWVyIERhYmJlbHQgPHBhbG1lckBkYWJiZWx0LmNvbT4gd3Jv dGU6Cj4+Cj4+T24gV2VkLCAzMCBOb3YgMjAyMiAwMDozNzoxNyBQU1QgKC0wODAwKSwgZ2FvZmVp QGVzd2luY29tcHV0aW5nLmNvbSB3cm90ZToKPj4+IFRoZSBzdGFjayB0aGF0IHNhdmUtcmVzdG9y ZSByZXNlcnZlcyBpcyBub3Qgd2VsbCBhY2N1bXVsYXRlZCBpbiBzdGFjayBhbGxvY2F0aW9uIGFu ZCBkZWFsbG9jYXRpb24uCj4+PiBUaGlzIHBhdGNoIGFsbG93cyBsZXNzIGluc3RydWN0aW9ucyB0 byBiZSB1c2VkIGluIHN0YWNrIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpZiBzYXZlLXJl c3RvcmUgZW5hYmxlZCwKPj4+IGFuZCBhbHNvIGEgbXVjaCBjbGVhciBsb2dpYyBmb3Igc2F2ZS1y ZXN0b3JlIHN0YWNrIG1hbmlwdWxhdGlvbi4KPj4+Cj4+PiBiZWZvcmUgcGF0Y2g6Cj4+PiBiYXI6 Cj4+PiBjYWxsCXQwLF9fcmlzY3Zfc2F2ZV80Cj4+PiBhZGRpCXNwLHNwLC02NAo+Pj4gLi4uCj4+ PiBsaQl0MCwtMTIyODgKPj4+IGFkZGkJdDAsdDAsLTE5NjggIyBvcHRpbWl6ZWQgb3V0IGFmdGVy IHBhdGNoCj4+PiBhZGQJc3Asc3AsdDAgIyBwcm9sb2d1ZQo+Pj4gLi4uCj4+PiBsaQl0MCwxMjI4 OCAjIGVwaWxvZ3VlCj4+PiBhZGRpCXQwLHQwLDIwMDAgIyBvcHRpbWl6ZWQgb3V0IGFmdGVyIHBh dGNoCj4+PiBhZGQJc3Asc3AsdDAKPj4+IC4uLgo+Pj4gYWRkaQlzcCxzcCwzMgo+Pj4gdGFpbAlf X3Jpc2N2X3Jlc3RvcmVfNAo+Pj4KPj4+IGFmdGVyIHBhdGNoOgo+Pj4gYmFyOgo+Pj4gY2FsbAl0 MCxfX3Jpc2N2X3NhdmVfNAo+Pj4gYWRkaQlzcCxzcCwtMjAzMgo+Pj4gLi4uCj4+PiBsaQl0MCwt MTIyODgKPj4+IGFkZAlzcCxzcCx0MCAjIHByb2xvZ3VlCj4+PiAuLi4KPj4+IGxpCXQwLDEyMjg4 ICMgZXBpbG9ndWUKPj4+IGFkZAlzcCxzcCx0MAo+Pj4gLi4uCj4+PiBhZGRpCXNwLHNwLDIwMzIK Pj4+IHRhaWwJX19yaXNjdl9yZXN0b3JlXzQKPj4+Cj4+PiBnY2MvQ2hhbmdlTG9nOgo+Pj4KPj4+ wqDCoMKgwqDCoMKgwqDCoCAqIGNvbmZpZy9yaXNjdi9yaXNjdi5jYyAocmlzY3ZfZmlyc3Rfc3Rh Y2tfc3RlcCk6IGFkZCBhIG5ldyBmdW5jdGlvbiBwYXJhbWV0ZXIgcmVtYWluaW5nX3NpemUuCj4+ PsKgwqDCoMKgwqDCoMKgwqAgKHJpc2N2X2NvbXB1dGVfZnJhbWVfaW5mbyk6IGFkYXB0IG5ldyBy aXNjdl9maXJzdF9zdGFja19zdGVwIGludGVyZmFjZS4KPj4+wqDCoMKgwqDCoMKgwqDCoCAocmlz Y3ZfZXhwYW5kX3Byb2xvZ3VlKTogY29uc2lkZXIgc2F2ZS1yZXN0b3JlIGluIHN0YWNrIGFsbG9j YXRpb24uCj4+PsKgwqDCoMKgwqDCoMKgwqAgKHJpc2N2X2V4cGFuZF9lcGlsb2d1ZSk6IGNvbnNp ZGVyIHNhdmUtcmVzdG9yZSBpbiBzdGFjayBkZWFsbG9jYXRpb24uCj4+Pgo+Pj4gZ2NjL3Rlc3Rz dWl0ZS9DaGFuZ2VMb2c6Cj4+Pgo+Pj7CoMKgwqDCoMKgwqDCoMKgICogZ2NjLnRhcmdldC9yaXNj di9zdGFja19zYXZlX3Jlc3RvcmUuYzogTmV3IHRlc3QuCj4+PiAtLS0KPj4+wqAgZ2NjL2NvbmZp Zy9yaXNjdi9yaXNjdi5jY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fCA1OCArKysrKysrKysrLS0tLS0tLS0tCj4+PsKgIC4uLi9nY2MudGFyZ2V0L3Jpc2N2L3N0YWNr X3NhdmVfcmVzdG9yZS5jwqDCoMKgwqAgfCA0MCArKysrKysrKysrKysrCj4+PsKgIDIgZmlsZXMg Y2hhbmdlZCwgNzAgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCj4+PsKgIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcmlzY3Yvc3RhY2tfc2F2ZV9yZXN0 b3JlLmMKPj4KPj5JIGd1ZXNzIHdpdGggdGhlIFJJU0MtViBiYWNrZW5kIHN0aWxsIGJlaW5nIG9w ZW4gZm9yIHRoaW5ncyBhcyBiaWcgYXMKPj50aGUgViBwb3J0IHdlIHNob3VsZCBwcm9iYWJseSBi ZSB0YWtpbmcgY29kZSBsaWtlIHRoaXMgYXMgd2VsbD/CoCBJCj4+d291bGRuJ3QgYmUgb3Bwb3Nl ZCB0byBtYWtpbmcgYW4gZXhjZXB0aW9uIGZvciB0aGUgViBjb2RlIGFuZCBob2xkaW5nCj4+ZXZl cnl0aGluZyBlbHNlIGJhY2ssIHRob3VnaC4KPj4KPj4+IGRpZmYgLS1naXQgYS9nY2MvY29uZmln L3Jpc2N2L3Jpc2N2LmNjIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYwo+Pj4gaW5kZXggMDVi ZGJhNWFiNGQuLjllOTJlNzI5YTVmIDEwMDY0NAo+Pj4gLS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9y aXNjdi5jYwo+Pj4gKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5jYwo+Pj4gQEAgLTQ2MzQs NyArNDYzNCw3IEBAIHJpc2N2X3NhdmVfbGliY2FsbF9jb3VudCAodW5zaWduZWQgbWFzaykKPj4+ wqDCoMKgwqAgVGhleSBkZWNyZWFzZSBzdGFja19wb2ludGVyX3J0eCBidXQgbGVhdmUgZnJhbWVf cG9pbnRlcl9ydHggYW5kCj4+PsKgwqDCoMKgIGhhcmRfZnJhbWVfcG9pbnRlcl9ydHggdW5jaGFu Z2VkLsKgICovCj4+Pgo+Pj4gLXN0YXRpYyBIT1NUX1dJREVfSU5UIHJpc2N2X2ZpcnN0X3N0YWNr X3N0ZXAgKHN0cnVjdCByaXNjdl9mcmFtZV9pbmZvICpmcmFtZSk7Cj4+PiArc3RhdGljIEhPU1Rf V0lERV9JTlQgcmlzY3ZfZmlyc3Rfc3RhY2tfc3RlcCAoc3RydWN0IHJpc2N2X2ZyYW1lX2luZm8g KmZyYW1lLCBwb2x5X2ludDY0IHJlbWFpbmluZ19zaXplKTsKPj4+Cj4+PsKgIC8qIEhhbmRsZSBz dGFjayBhbGlnbiBmb3IgcG9seV9pbnQuwqAgKi8KPj4+wqAgc3RhdGljIHBvbHlfaW50NjQKPj4+ IEBAIC00NjYzLDcgKzQ2NjMsNyBAQCByaXNjdl9jb21wdXRlX2ZyYW1lX2luZm8gKHZvaWQpCj4+ PsKgwqDCoMKgwqDCoCBzYXZlL3Jlc3RvcmUgdDAuwqAgV2UgY2hlY2sgZm9yIHRoaXMgYmVmb3Jl IGNsZWFyaW5nIHRoZSBmcmFtZSBzdHJ1Y3QuwqAgKi8KPj4+wqDCoMKgIGlmIChjZnVuLT5tYWNo aW5lLT5pbnRlcnJ1cHRfaGFuZGxlcl9wKQo+Pj7CoMKgwqDCoMKgIHsKPj4+IC3CoMKgwqDCoMKg IEhPU1RfV0lERV9JTlQgc3RlcDEgPSByaXNjdl9maXJzdF9zdGFja19zdGVwIChmcmFtZSk7Cj4+ PiArwqDCoMKgwqDCoCBIT1NUX1dJREVfSU5UIHN0ZXAxID0gcmlzY3ZfZmlyc3Rfc3RhY2tfc3Rl cCAoZnJhbWUsIGZyYW1lLT50b3RhbF9zaXplKTsKPj4+wqDCoMKgwqDCoMKgwqAgaWYgKCEgUE9M WV9TTUFMTF9PUEVSQU5EX1AgKChmcmFtZS0+dG90YWxfc2l6ZSAtIHN0ZXAxKSkpCj4+PsKgIGlu dGVycnVwdF9zYXZlX3Byb2xvZ3VlX3RlbXAgPSB0cnVlOwo+Pj7CoMKgwqDCoMKgIH0KPj4+IEBA IC00OTEzLDMxICs0OTEzLDMxIEBAIHJpc2N2X3Jlc3RvcmVfcmVnIChydHggcmVnLCBydHggbWVt KQo+Pj7CoMKgwqDCoCB3aXRob3V0IGFkZGluZyBleHRyYSBpbnN0cnVjdGlvbnMuwqAgKi8KPj4+ Cj4+PsKgIHN0YXRpYyBIT1NUX1dJREVfSU5UCj4+PiAtcmlzY3ZfZmlyc3Rfc3RhY2tfc3RlcCAo c3RydWN0IHJpc2N2X2ZyYW1lX2luZm8gKmZyYW1lKQo+Pj4gK3Jpc2N2X2ZpcnN0X3N0YWNrX3N0 ZXAgKHN0cnVjdCByaXNjdl9mcmFtZV9pbmZvICpmcmFtZSwgcG9seV9pbnQ2NCByZW1haW5pbmdf c2l6ZSkKPj4+wqAgewo+Pj4gLcKgIEhPU1RfV0lERV9JTlQgZnJhbWVfdG90YWxfY29uc3RhbnRf c2l6ZTsKPj4+IC3CoCBpZiAoIWZyYW1lLT50b3RhbF9zaXplLmlzX2NvbnN0YW50ICgpKQo+Pj4g LcKgwqDCoCBmcmFtZV90b3RhbF9jb25zdGFudF9zaXplCj4+PiAtwqDCoMKgwqDCoCA9IHJpc2N2 X3N0YWNrX2FsaWduIChmcmFtZS0+dG90YWxfc2l6ZS5jb2VmZnNbMF0pCj4+PiAtCS0gcmlzY3Zf c3RhY2tfYWxpZ24gKGZyYW1lLT50b3RhbF9zaXplLmNvZWZmc1sxXSk7Cj4+PiArwqAgSE9TVF9X SURFX0lOVCByZW1haW5pbmdfY29uc3Rfc2l6ZTsKPj4+ICvCoCBpZiAoIXJlbWFpbmluZ19zaXpl LmlzX2NvbnN0YW50ICgpKQo+Pj4gK8KgwqDCoCByZW1haW5pbmdfY29uc3Rfc2l6ZQo+Pj4gK8Kg wqDCoMKgwqAgPSByaXNjdl9zdGFja19hbGlnbiAocmVtYWluaW5nX3NpemUuY29lZmZzWzBdKQo+ Pj4gKwktIHJpc2N2X3N0YWNrX2FsaWduIChyZW1haW5pbmdfc2l6ZS5jb2VmZnNbMV0pOwo+Pgo+ PlRoZSBhbGlnbm1lbnQgbG9va3Mgb2ZmIGhlcmUsIGF0IGxlYXN0IGluIHRoZSBlbWFpbC7CoCBX b3J0aCBmaXhpbmcgaXQgdXAKPj5pZiB5b3UncmUgdG91Y2hpbmcgdGhlIGxpbmVzIGFueXdheS4K Pgo+U3VyZSwgaSB3aWxsIGNoYW5nZcKgUklTQ1ZfU1RBQ0tfQUxJR04gaW50b8KgcmlzY3Zfc3Rh Y2tfYWxpZ24uCj4KPj4KPj4+wqDCoMKgIGVsc2UKPj4+IC3CoMKgwqAgZnJhbWVfdG90YWxfY29u c3RhbnRfc2l6ZSA9IGZyYW1lLT50b3RhbF9zaXplLnRvX2NvbnN0YW50ICgpOwo+Pj4gK8KgwqDC oCByZW1haW5pbmdfY29uc3Rfc2l6ZSA9IHJlbWFpbmluZ19zaXplLnRvX2NvbnN0YW50ICgpOwo+ Pj4KPj4+IC3CoCBpZiAoU01BTExfT1BFUkFORCAoZnJhbWVfdG90YWxfY29uc3RhbnRfc2l6ZSkp Cj4+PiAtwqDCoMKgIHJldHVybiBmcmFtZV90b3RhbF9jb25zdGFudF9zaXplOwo+Pj4gK8KgIGlm IChTTUFMTF9PUEVSQU5EIChyZW1haW5pbmdfY29uc3Rfc2l6ZSkpCj4+PiArwqDCoMKgIHJldHVy biByZW1haW5pbmdfY29uc3Rfc2l6ZTsKPj4+Cj4+PsKgwqDCoCBIT1NUX1dJREVfSU5UIG1pbl9m aXJzdF9zdGVwID0KPj4+IC3CoMKgwqAgUklTQ1ZfU1RBQ0tfQUxJR04gKChmcmFtZS0+dG90YWxf c2l6ZSAtIGZyYW1lLT5mcmFtZV9wb2ludGVyX29mZnNldCkudG9fY29uc3RhbnQoKSk7Cj4+PiAr wqDCoMKgIFJJU0NWX1NUQUNLX0FMSUdOICgocmVtYWluaW5nX3NpemUgLSBmcmFtZS0+ZnJhbWVf cG9pbnRlcl9vZmZzZXQpLnRvX2NvbnN0YW50KCkpOwo+Pj7CoMKgwqAgSE9TVF9XSURFX0lOVCBt YXhfZmlyc3Rfc3RlcCA9IElNTV9SRUFDSCAvIDIgLSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkg LyA4Owo+Pj4gLcKgIEhPU1RfV0lERV9JTlQgbWluX3NlY29uZF9zdGVwID0gZnJhbWVfdG90YWxf Y29uc3RhbnRfc2l6ZSAtIG1heF9maXJzdF9zdGVwOwo+Pj4gK8KgIEhPU1RfV0lERV9JTlQgbWlu X3NlY29uZF9zdGVwID0gcmVtYWluaW5nX2NvbnN0X3NpemUgLSBtYXhfZmlyc3Rfc3RlcDsKPj4+ wqDCoMKgIGdjY19hc3NlcnQgKG1pbl9maXJzdF9zdGVwIDw9IG1heF9maXJzdF9zdGVwKTsKPj4+ Cj4+PsKgwqDCoCAvKiBBcyBhbiBvcHRpbWl6YXRpb24sIHVzZSB0aGUgbGVhc3Qtc2lnbmlmaWNh bnQgYml0cyBvZiB0aGUgdG90YWwgZnJhbWUKPj4+wqDCoMKgwqDCoMKgIHNpemUsIHNvIHRoYXQg dGhlIHNlY29uZCBhZGp1c3RtZW50IHN0ZXAgaXMganVzdCBMVUkgKyBBREQuwqAgKi8KPj4+wqDC oMKgIGlmICghU01BTExfT1BFUkFORCAobWluX3NlY29uZF9zdGVwKQo+Pj4gLcKgwqDCoMKgwqAg JiYgZnJhbWVfdG90YWxfY29uc3RhbnRfc2l6ZSAlIElNTV9SRUFDSCA8IElNTV9SRUFDSCAvIDIK Pj4+IC3CoMKgwqDCoMKgICYmIGZyYW1lX3RvdGFsX2NvbnN0YW50X3NpemUgJSBJTU1fUkVBQ0gg Pj0gbWluX2ZpcnN0X3N0ZXApCj4+PiAtwqDCoMKgIHJldHVybiBmcmFtZV90b3RhbF9jb25zdGFu dF9zaXplICUgSU1NX1JFQUNIOwo+Pj4gK8KgwqDCoMKgwqAgJiYgcmVtYWluaW5nX2NvbnN0X3Np emUgJSBJTU1fUkVBQ0ggPCBJTU1fUkVBQ0ggLyAyCj4+PiArwqDCoMKgwqDCoCAmJiByZW1haW5p bmdfY29uc3Rfc2l6ZSAlIElNTV9SRUFDSCA+PSBtaW5fZmlyc3Rfc3RlcCkKPj4+ICvCoMKgwqAg cmV0dXJuIHJlbWFpbmluZ19jb25zdF9zaXplICUgSU1NX1JFQUNIOwo+Pgo+Pkxvb2tzIGxpa2Ug dGhpcyBlbnRpcmUgZnJhbWUtPnRvdGFsX3NpemUgLT4gcmVtYWluaW5nX3NpemUgY29udmVyc2lv bgo+PmNvdWxkIGJlIGRvbmUgYXMgYW4gaW5kZXBlbmRlbnQgcGF0Y2ggdGhhdCB3b3VsZCBjaGFu Z2Ugbm8KPj5mdW5jdGlvbmFsaXR5LCB0aGF0J3MgYWx3YXlzIGEgbmljZSB3YXkgdG8gZG8gdGhp bmdzIGFzIGl0IG1ha2VzIHRoZQo+PmNvZGUgZWFzaWVyIHRvIHJlYWQuCj4KPlN1cmUsIGkgd2ls bCBzcGxpdCB0aGlzIHBhdGNoLgo+Cj4+Cj4+SSBzcGVudCBhIGJpdCBwb2tpbmcgYXJvdW5kIGhl cmUgYW5kIG5vdGhpbmcgd3JvbmcgaXMganVtcGluZyBvdXQsIGJ1dAo+PnRyeWluZyB0byBrZWVw IGFsbCB0aGVzZSBvZmZzZXQgZGlmZmVyZW5jZXMgaW4gbXkgaGVhZCBpcyBhIGJpdCB0cmlja3ku wqAKPj5JZiB5b3UgaGF2ZSB0aGUgdGltZSB0byByZWZhY3RvciB0aGlzIHRvIGJlIGVhc2llciB0 byByZWFkIHRoYXQnZCBiZQo+PmdyZWF0LCBvdGhlcndpc2UgaG9wZWZ1bGx5IEkgKG9yIHNvbWVv bmUgZWxzZSkgd2lsbCBoYXZlIHRoZSB0aW1lIHRvCj4+dGFrZSBhIGxvb2sgLS0gcHJvYmFibHkg bm90IHRvZGF5IG9uIG15IGVuZCwgdGhvdWdoLCBhcyBJJ3ZlIGdvdCBzb21lCj4+TGludXggYmFj a2xvZyB0byBsb29rIGF0Lgo+Cj5JJ2xsIHRyeSBpdC4gQWxzbyBpIHByb3Bvc2UgdG8gYWRkIHN0 ZXAwIGZvciBwcmUtYWxsb2NhdGVkIHN0YWNrIGNhc2VzIGxpa2Ugc2F2ZS1yZXN0b3JlIGxpYiBj YWxsLAo+YW5kwqB0aGUgZnV0dXJlIFpjbXAgaW4gWmMqIGV4dGVuc2lvbiBpZiBuZWVkZWQuCj5T byB3ZSBoYXZlIGEgY2xlYXIgbG9naWMgb2YgbWFuaXB1bGF0ZSBzdGFjayBzdGVwIGJ5IHN0ZXAu Cj4KPj4KPj5UaGFua3MhCj4+Cj4+PsKgwqDCoCBpZiAoVEFSR0VUX1JWQykKPj4+wqDCoMKgwqDC oCB7Cj4+PiBAQCAtNTAzNyw5ICs1MDM3LDcgQEAgcmlzY3ZfZXhwYW5kX3Byb2xvZ3VlICh2b2lk KQo+Pj7CoMKgwqAgLyogU2F2ZSB0aGUgcmVnaXN0ZXJzLsKgICovCj4+PsKgwqDCoCBpZiAoKGZy YW1lLT5tYXNrIHwgZnJhbWUtPmZtYXNrKSAhPSAwKQo+Pj7CoMKgwqDCoMKgIHsKPj4+IC3CoMKg wqDCoMKgIEhPU1RfV0lERV9JTlQgc3RlcDEgPSByaXNjdl9maXJzdF9zdGFja19zdGVwIChmcmFt ZSk7Cj4+PiAtwqDCoMKgwqDCoCBpZiAoc2l6ZS5pc19jb25zdGFudCAoKSkKPj4+IC0Jc3RlcDEg PSBNSU4gKHNpemUudG9fY29uc3RhbnQoKSwgc3RlcDEpOwo+Pj4gK8KgwqDCoMKgwqAgSE9TVF9X SURFX0lOVCBzdGVwMSA9IHJpc2N2X2ZpcnN0X3N0YWNrX3N0ZXAgKGZyYW1lLCBzaXplKTsKPj4+ Cj4+PsKgwqDCoMKgwqDCoMKgIGluc24gPSBnZW5fYWRkM19pbnNuIChzdGFja19wb2ludGVyX3J0 eCwKPj4+wqAgwqDCoMKgIHN0YWNrX3BvaW50ZXJfcnR4LAo+Pj4gQEAgLTUxNDIsNiArNTE0MCw4 IEBAIHJpc2N2X2V4cGFuZF9lcGlsb2d1ZSAoaW50IHN0eWxlKQo+Pj7CoMKgwqAgSE9TVF9XSURF X0lOVCBzdGVwMiA9IDA7Cj4+PsKgwqDCoCBib29sIHVzZV9yZXN0b3JlX2xpYmNhbGwgPSAoKHN0 eWxlID09IE5PUk1BTF9SRVRVUk4pCj4+PsKgIMKgwqDCoMKgwqAgJiYgcmlzY3ZfdXNlX3NhdmVf bGliY2FsbCAoZnJhbWUpKTsKPj4+ICvCoCB1bnNpZ25lZCBsaWJjYWxsX3NpemUgPSB1c2VfcmVz dG9yZV9saWJjYWxsID8KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZnJhbWUtPnNhdmVfbGliY2FsbF9hZGp1c3RtZW50IDogMDsKPj4+ wqDCoMKgIHJ0eCByYSA9IGdlbl9ydHhfUkVHIChQbW9kZSwgUkVUVVJOX0FERFJfUkVHTlVNKTsK Pj4+wqDCoMKgIHJ0eCBpbnNuOwo+Pj4KPj4+IEBAIC01MjEyLDEzICs1MjEyLDE4IEBAIHJpc2N2 X2V4cGFuZF9lcGlsb2d1ZSAoaW50IHN0eWxlKQo+Pj7CoMKgwqDCoMKgwqDCoCBSRUdfTk9URVMg KGluc24pID0gZHdhcmY7Cj4+PsKgwqDCoMKgwqAgfQo+Pj4KPj4+ICvCoCBpZiAodXNlX3Jlc3Rv cmVfbGliY2FsbCkKPj4+ICvCoMKgwqAgZnJhbWUtPm1hc2sgPSAwOyAvKiBUZW1wb3JhcmlseSBm aWIgZm9yIEdQUnMuwqAgKi8KPj4+ICsKPj4+wqDCoMKgIC8qIElmIHdlIG5lZWQgdG8gcmVzdG9y ZSByZWdpc3RlcnMsIGRlYWxsb2NhdGUgYXMgbXVjaCBzdGFjayBhcwo+Pj7CoMKgwqDCoMKgwqAg cG9zc2libGUgaW4gdGhlIHNlY29uZCBzdGVwIHdpdGhvdXQgZ29pbmcgb3V0IG9mIHJhbmdlLsKg ICovCj4+PsKgwqDCoCBpZiAoKGZyYW1lLT5tYXNrIHwgZnJhbWUtPmZtYXNrKSAhPSAwKQo+Pj4g LcKgwqDCoCB7Cj4+PiAtwqDCoMKgwqDCoCBzdGVwMiA9IHJpc2N2X2ZpcnN0X3N0YWNrX3N0ZXAg KGZyYW1lKTsKPj4+IC3CoMKgwqDCoMKgIHN0ZXAxIC09IHN0ZXAyOwo+Pj4gLcKgwqDCoCB9Cj4+ PiArwqDCoMKgIHN0ZXAyID0gcmlzY3ZfZmlyc3Rfc3RhY2tfc3RlcCAoZnJhbWUsIGZyYW1lLT50 b3RhbF9zaXplIC0gbGliY2FsbF9zaXplKTsKPj4+ICsKPj4+ICvCoCBpZiAodXNlX3Jlc3RvcmVf bGliY2FsbCkKPj4+ICvCoMKgwqAgZnJhbWUtPm1hc2sgPSBtYXNrOyAvKiBVbmRvIHRoZSBhYm92 ZSBmaWIuwqAgKi8KPj4+ICsKPj4+ICvCoCBzdGVwMSAtPSBzdGVwMiArIGxpYmNhbGxfc2l6ZTsK Pj4+Cj4+PsKgwqDCoCAvKiBTZXQgVEFSR0VUIHRvIEJBU0UgKyBTVEVQMS7CoCAqLwo+Pj7CoMKg wqAgaWYgKGtub3duX2d0IChzdGVwMSwgMCkpCj4+PiBAQCAtNTI3MiwxNSArNTI3NywxMiBAQCBy aXNjdl9leHBhbmRfZXBpbG9ndWUgKGludCBzdHlsZSkKPj4+wqDCoMKgwqDCoCBmcmFtZS0+bWFz ayA9IDA7IC8qIFRlbXBvcmFyaWx5IGZpYiB0aGF0IHdlIG5lZWQgbm90IHNhdmUgR1BScy7CoCAq Lwo+Pj4KPj4+wqDCoMKgIC8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycy7CoCAqLwo+Pj4gLcKgIHJp c2N2X2Zvcl9lYWNoX3NhdmVkX3JlZyAoZnJhbWUtPnRvdGFsX3NpemUgLSBzdGVwMiwgcmlzY3Zf cmVzdG9yZV9yZWcsCj4+PiArwqAgcmlzY3ZfZm9yX2VhY2hfc2F2ZWRfcmVnIChmcmFtZS0+dG90 YWxfc2l6ZSAtIHN0ZXAyIC0gbGliY2FsbF9zaXplLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByaXNjdl9yZXN0b3JlX3JlZywKPj4+ wqAgwqDCoMKgIHRydWUsIHN0eWxlID09IEVYQ0VQVElPTl9SRVRVUk4pOwo+Pj4KPj4+wqDCoMKg IGlmICh1c2VfcmVzdG9yZV9saWJjYWxsKQo+Pj4gLcKgwqDCoCB7Cj4+PsKgwqDCoMKgwqDCoMKg IGZyYW1lLT5tYXNrID0gbWFzazsgLyogVW5kbyB0aGUgYWJvdmUgZmliLsKgICovCj4+PiAtwqDC oMKgwqDCoCBnY2NfYXNzZXJ0IChzdGVwMiA+PSBmcmFtZS0+c2F2ZV9saWJjYWxsX2FkanVzdG1l bnQpOwo+Pj4gLcKgwqDCoMKgwqAgc3RlcDIgLT0gZnJhbWUtPnNhdmVfbGliY2FsbF9hZGp1c3Rt ZW50Owo+Pj4gLcKgwqDCoCB9Cj4+Pgo+Pj7CoMKgwqAgaWYgKG5lZWRfYmFycmllcl9wKQo+Pj7C oMKgwqDCoMKgIHJpc2N2X2VtaXRfc3RhY2tfdGllICgpOwo+Pj4gZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zdGFja19zYXZlX3Jlc3RvcmUuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9yaXNjdi9zdGFja19zYXZlX3Jlc3RvcmUuYwo+Pj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAwMDAwLi40Njk1ZWY5NDY5YQo+Pj4gLS0tIC9k ZXYvbnVsbAo+Pj4gKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L3Jpc2N2L3N0YWNrX3Nh dmVfcmVzdG9yZS5jCj4+PiBAQCAtMCwwICsxLDQwIEBACj4+PiArLyogeyBkZy1kbyBjb21waWxl IH0gKi8KPj4+ICsvKiB7IGRnLW9wdGlvbnMgIi1tYXJjaD1ydjMyaW1hZmMgLW1hYmk9aWxwMzJm IC1tc2F2ZS1yZXN0b3JlIC1PMiAtZm5vLXNjaGVkdWxlLWluc25zIC1mbm8tc2NoZWR1bGUtaW5z bnMyIC1mbm8tdW5yb2xsLWxvb3BzIC1mbm8tcGVlbC1sb29wcyIgfSAqLwo+Pj4gKy8qIHsgZGct ZmluYWwgeyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiB9IH0gKi8KPj4+ICsKPj4+ICtj aGFyIG15X2dldGNoYXIoKTsKPj4+ICtmbG9hdCBnZXRmKCk7Cj4+PiArCj4+PiArLyoKPj4+ICsq KmJhcjoKPj4+ICsqKgljYWxsCXQwLF9fcmlzY3Zfc2F2ZV80Cj4+PiArKioJYWRkaQlzcCxzcCwt MjAzMgo+Pj4gKyoqCS4uLgo+Pj4gKyoqCWxpCXQwLC0xMjI4OAo+Pj4gKyoqCWFkZAlzcCxzcCx0 MAo+Pj4gKyoqCS4uLgo+Pj4gKyoqCWxpCXQwLDEyMjg4Cj4+PiArKioJYWRkCXNwLHNwLHQwCj4+ PiArKioJLi4uCj4+PiArKioJYWRkaQlzcCxzcCwyMDMyCj4+PiArKioJdGFpbAlfX3Jpc2N2X3Jl c3RvcmVfNAo+Pj4gKyovCj4+Cj4+VGhlIHRlc3QgbmVlZHMgdG8gYWN0dWFsbHkgY2hlY2sgdGhp cywgaXQgY2FuJ3QganVzdCBiZSBtYW51YWwuCj4KPkkgZGlkbid0IGdldCB5b3VyIHBvaW50Lgo+ VGhlwqB7IGRnLWZpbmFsIHsgY2hlY2stZnVuY3Rpb24tYm9kaWVzICIqKiIgIiIgfSB9IG1hdGNo ZXMgdGhlIG91dHB1dCB3aXRoIHRoZSBleHBlY3RlZCByZXN1bHQgYWJvdmUgYXV0b21hdGljYWxs eS7CoAo+UGxlYXNlIGxldCBtZSBrbm93IHlvdXIgaWRlYS7CoAo+Cj5UaGFua3MgJiBCUizCoAo+ RmVpCj4KPj4KPj4+ICtpbnQgYmFyKCkKPj4+ICt7Cj4+PiArwqAgZmxvYXQgdm9sYXRpbGUgZmFy cmF5WzM1NjhdOwo+Pj4gKwo+Pj4gK8KgIGZsb2F0IHN1bSA9IDA7Cj4+PiArwqAgZmxvYXQgZjEg PSBnZXRmKCk7Cj4+PiArwqAgZmxvYXQgZjIgPSBnZXRmKCk7Cj4+PiArwqAgZmxvYXQgZjMgPSBn ZXRmKCk7Cj4+PiArwqAgZmxvYXQgZjQgPSBnZXRmKCk7Cj4+PiArCj4+PiArwqAgZm9yIChpbnQg aSA9IDA7IGkgPCAzNTY4OyBpKyspCj4+PiArwqAgewo+Pj4gK8KgwqDCoCBmYXJyYXlbaV0gPSBt eV9nZXRjaGFyKCkgKiAxLjI7Cj4+PiArwqDCoMKgIHN1bSArPSBmYXJyYXlbaV07Cj4+PiArwqAg fQo+Pj4gKwo+Pj4gK8KgIHJldHVybiBzdW0gKyBmMSArIGYyICsgZjMgKyBmNDsKPj4+ICt9Cj4+ PiAr