From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 13CC1C5519F for ; Sat, 14 Nov 2020 07:33:48 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 902362223C for ; Sat, 14 Nov 2020 07:33:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="nDsd1EAM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 902362223C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=iKs6DW9zENW3PLvyKwvhs8mB7HTkhq+OrJbE3cjylXA=; b=nDsd1EAMtjzmV713DlvhwKsIW JFvY90blyg0shgFICwhIjYznBQOk+oSRhK8pI+EN9oO8tGCH8JpI1NeuMVYfOZzNVonBmbxFX+G8B pBkJLgqCIlUmBOf05HfhI4mtA30I/pImTfaaYP3fWo92vHr3YDx6yr/tBCR6bkdPDLU6Ic58313Gq riT894ofnRq9QcuSGM7uANPD4DtQZyMM2KtnjBQKrPMkBOtOacGAM/hxKggz1P+jgSDkEfc1TkYEK ob1eq972CC1kYsAq45yVtkhmqDd+pkGO/c3unKqRv4ufXGnaV/0oqig+0J138LGebYRVp8Rulo7Ov mYGK+lRug==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kdq2v-00076n-Mw; Sat, 14 Nov 2020 07:32:29 +0000 Received: from szxga07-in.huawei.com ([45.249.212.35]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kdq2j-00074s-Q5 for linux-arm-kernel@lists.infradead.org; Sat, 14 Nov 2020 07:32:28 +0000 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4CY6V074PHz74cs; Sat, 14 Nov 2020 15:31:52 +0800 (CST) Received: from [10.110.54.32] (10.110.54.32) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.487.0; Sat, 14 Nov 2020 15:31:57 +0800 Subject: Re: [PATCH 0/1] arm64: Accelerate Adler32 using arm64 SVE instructions. To: Dave Martin References: <20201103121506.1533-1-liqiang64@huawei.com> <20201105165301.GH6882@arm.com> <20201110104629.GJ6882@arm.com> <89a9bdcc-b96e-2f2d-6c52-ca44e0e3472c@huawei.com> <20201110160708.GL6882@arm.com> <484ad2c8-3905-fc98-237c-f7eb4045edbc@huawei.com> <20201112111745.GS6882@arm.com> From: Li Qiang Message-ID: <72514954-ea04-6aa3-73d8-bb0fc39b6de2@huawei.com> Date: Sat, 14 Nov 2020 15:31:56 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: <20201112111745.GS6882@arm.com> X-Originating-IP: [10.110.54.32] X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201114_023227_255839_FD706988 X-CRM114-Status: GOOD ( 51.40 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alexandre.torgue@st.com, catalin.marinas@arm.com, gaoguijin@huawei.com, colordev.jiang@huawei.com, luchunhua@huawei.com, linux-crypto@vger.kernel.org, mcoquelin.stm32@gmail.com, liliang889@huawei.com, will@kernel.org, davem@davemloft.net, linux-arm-kernel@lists.infradead.org, herbert@gondor.apana.org.au Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgrlnKggMjAyMC8xMS8xMiAxOToxNywgRGF2ZSBNYXJ0aW4g5YaZ6YGTOgo+IE9uIFRodSwgTm92 IDEyLCAyMDIwIGF0IDAzOjIwOjUzUE0gKzA4MDAsIExpIFFpYW5nIHdyb3RlOgo+Pgo+Pgo+PiDl nKggMjAyMC8xMS8xMSAwOjA3LCBEYXZlIE1hcnRpbiDlhpnpgZM6Cj4+Pj4+Pj4gCWFkZCAgICAg ekEucywgcFAvbSwgekEucywgelgucyAgICAgICAgLy8gekEucyArPSB6WC5zCj4+Pj4+Pj4KPj4+ Pj4+PiAJbXNiICAgICB6WC5zLCBwUC9tLCB6Si5zLCB6Qi5zICAgICAgICAvLyB6WC5zIDo9IHpC LnMgLSB6WC5zICogekoucwo+Pj4+Pj4+Cj4+Pj4+Pj4gCW1vdnByZnggekIsIHpBCj4+Pj4+Pj4g CW1hZCAgICAgekIucywgcFAvbSwgelYucywgelgucyAgICAgICAgLy8gekIucyA6PSB6WC5zICsg ekEucyAqIFYKPj4+PiBJIGZvdW5kIHRoZSBidWcgSSBlbmNvdW50ZXJlZCBlYXJsaWVyLCB0aGF0 IGlzLCB0aGUgY2FsY3VsYXRpb24gb2YgekIgaGVyZQo+Pj4+IG5lZWRzIHRvIHVzZSBwQSB3aXRo IGFsbCBlbGVtZW50cyBhY3RpdmF0ZWQuIFRoZSByZWFzb24gaXMgdGhlIHNhbWUgYXMgbXkKPj4+ PiBwcmV2aW91cyBndWVzcywgYmVjYXVzZSBhbGwgZWxlbWVudHMgb2YgekEgc2hvdWxkIGJlIGlu dm9sdmVkIHdoZW4gY2FsY3VsYXRpbmcgekIuCj4+Pj4gQmVjYXVzZSB0aGUgb3JpZ2luYWwgY2Fs Y3VsYXRpb24gZm9ybXVsYSBpcyBsaWtlIHRoaXMuCj4+Pj4KPj4+PiBGb3IgZXhhbXBsZToKPj4+ PiBJbiB0aGUgbGFzdCBsb29wOgo+Pj4+IAlsZWZ0IGJ5dGUgaXM6CSAgMyB8ICAgNCB8ICBcMCB8 Cj4+Pj4gCXpBLnMgaXM6CTEwMCB8IDIwMCB8IDEwMCB8IDIwMCAoc3VtID0gNjAwKQo+Pj4+IAlw UC5zIGlzOgkgIDEgfCAgIDEgfCAgIDAgfCAgIDAgKE9ubHkgYWN0aXZhdGUgdGhlIGZpcnN0IDIg Y2hhbm5lbHMpCj4+Pj4KPj4+PiBBdCB0aGlzIHRpbWUsIGlmIHRoZSBjYWxjdWxhdGlvbiBvZiB6 QiBvbmx5IHRha2VzIHRoZSBmaXJzdCAyIGFjdGl2ZSBlbGVtZW50cywgdGhlIGRhdGEKPj4+PiBp cyBpbmNvbXBsZXRlLCBiZWNhdXNlIGFjY29yZGluZyB0byB0aGUgZGVzY3JpcHRpb24gb2YgdGhl IG9yaWdpbmFsIGFsZ29yaXRobSwgekIgaXMgYWx3YXlzCj4+Pj4gYmFzZWQgb24gdGhlIHN1bSBv ZiBhbGwgdGhlIGFjY3VtdWxhdGVkIGJ5dGVzLgo+Pj4gWWVzLCB5b3UncmUgcXVpdGUgcmlnaHQg aGVyZTogelggaXMgcGFydGlhbDogb25seSB0aGUgZWxlbWVudHMgcFAgYXJlCj4+PiB2YWxpZDsg YnV0IGFsbCBlbGVtZW50cyBvZiB6QSBhbmQgekIgYXJlIGFsd2F5cyB2YWxpZC4gIEkgd2FzIGZv Y3VzaW5nCj4+PiB0b28gbXVjaCBvbiB0aGUgaGFuZGxpbmcgb2YgdGhlIHBhcnRpYWwgaW5wdXQg YmxvY2suCj4+Pgo+Pj4+IEhlcmUgd2UgY2FuIHNpbXBseSBjaGFuZ2UgdGhlIHByZWRpY3Rpb24g cmVnaXN0ZXIgdXNlZCBpbiB0aGUgdHdvIHNlbnRlbmNlcyByZWxhdGVkIHRvCj4+Pj4gekIgdG8g dGhlIG9uZSB0aGF0IGlzIGFsbCB0cnVlIChpdCBpcyBwQSBpbiBvdXIgY29kZSksIGxpa2UgdGhp czoKPj4+PiAJbXNiICAgICB6WC5zLCBwQS9tLCB6Si5zLCB6Qi5zICAgICAgICAvLyB6WC5zIDo9 IHpCLnMgLSB6WC5zICogekoucwo+Pj4gQXJlIHlvdSBzdXJlIGFib3V0IHRoaXM/ICBJbiBhIGZp bmFsIHBhcnRpYWwgYmxvY2ssIHRoZSB0cmFpbGluZwo+Pj4gZWxlbWVudHMgb2YgelgucyBiZXlv bmQgcFAgd2lsbCBiZSBsZWZ0b3ZlciBqdW5rIGZyb20gdGhlIGxhc3QKPj4+IGl0ZXJhdGlvbi4K Pj4KPj4gWWVzLCBJIGhhdmUgdmVyaWZpZWQgdGhpcyBjb2RlIGFuZCBpdCBpcyBjb3JyZWN0LiBU aGUgcmVhc29uIGlzIHRoYXQgaWYgcFAgaXMgdXNlZCBoZXJlLAo+PiB0aGUgaW5hY3RpdmUgZWxl bWVudHMgb2YgekIgd2lsbCBiZSBpZ25vcmVkIGluIHpYLCB3aGljaCB3aWxsIGNhdXNlIGRhdGEg bG9zcy4oSSB0aGluayBpdCBpcwo+IAo+IFllcywgeW91J3JlIHF1aXRlIHJpZ2h0LiAgSSB3YXMg Zm9yZ2V0dGluZyBhYm91dCB0aGUgL3ogKHplcm9pbmcpCj4gc2VtYW50aWNzIGZvciB0aGUgbGQx Yi4gIFRoaXMgbWVhbnMgdGhhdCB3ZSBnZXQgYXdheSB3aXRoIG5vdAo+IGluYWN0aXZhdGluZyB0 aG9zZSBlbGVtZW50cyBpbiB0aGUgbXNiIGluc3RydWN0aW9uLCBzaW5jZSB6ZXJvcwo+IG11bHRp cGxpZWQgYnkgdGhlIGVsZW1lbnRzIG9mIHpKIHJlbWFpbiB6ZXJvLgo+IAo+PiBiZWNhdXNlIHRo ZSB6QiBkYXRhIGlzIGNvdmVyZWQgYnkgdGhlIG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBy ZXN1bHRzIG9mIHpYLCB6QSwgYW5kIHpWCj4+IHVzaW5nIG1vdnByZnggYW5kIG1hZC4gSGF2ZSBJ IGdvdCB0aGF0IHJpZ2h0PykgOikKPiAKPiBZZXMsIEkgdGhpbmsgc28uCj4gCj4+IE9uIHRoZSBv dGhlciBoYW5kIHpYIHVzZXMgdGhlIHByZWRpY3Rpb24gcmVnaXN0ZXIgcFAveiB3aGVuIGxvYWRp bmcgZGF0YSwgdGhlIHZhbHVlIG9mIHRoZQo+PiBpbmFjdGl2ZSBlbGVtZW50IGlzIDAsIHRoZSBp bmFjdGl2ZSBlbGVtZW50IGluIHpYIHdpbGwgbm90IGFmZmVjdCB0aGUgZmluYWwgcmVzdWx0LCB0 aGUgaW5hY3RpdmUKPj4gZWxlbWVudCBpbiB6QiB3aWxsIGJlIGRpcmVjdGx5IGFzc2lnbmVkIHRv IHRoZSBpbmFjdGl2ZSBlbGVtZW50IG9mIHpYIGVsZW1lbnQuCj4+Cj4+IFRoZW4gaW4gdGhlIG5l eHQgaW5zdHJ1Y3Rpb24sIGl0IHdpbGwgYmUgYWRkZWQgdG8gekIgYWxvbmcgd2l0aCB6WC4KPiAK PiBZZXMuCj4gCj4gVGhpcyBtaWdodCBiZSBwYXJ0IG9mIHRoZSByZWFzb24gd2h5IHRoZSBhcmNo aXRlY3RzIGRlY2lkZWQgdGhhdCBTVkUKPiBsb2FkcyB6ZXJvIHRoZSBpbmFjdGl2ZSBlbGVtZW50 cyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlbSB1bmNoYW5nZWQuCgpJIHRoaW5rIHNvLCBpdCBpcyBh IHVzZWZ1bCBmZWF0dXJlIGluIHRoaXMgc2NlbmFyaW8uCgo+IAo+Pgo+Pj4KPj4+IFRoaXMgbWln aHQgcmVxdWlyZSBhIGJpdCBtb3JlIHRob3VnaHQgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmaW5hbCBi bG9jawo+Pj4gaGFuZGxpbmcgY29ycmVjdC4KPj4+Cj4+Pj4gdHJhaWxsb29wOgkJCS8vIExhc3Qg Y3ljbGUgZW50cmFuY2UKPj4+PiAgICAgICAgIGNudHAgICAgeDYsIHAxLCBwMC5zCS8vIEdldCBh Y3RpdmUgZWxlbWVudCBjb3VudCBvZiBsYXN0IGN5Y2xlCj4+Pj4gICAgICAgICBjcHkgICAgIHpW LnMsIHAxL20sIHc2CS8vIFNldCB6ViB0byB0aGUgYWN0dWFsIHZhbHVlLgo+Pj4gTm90ZSB0aGF0 IHlvdSBjYW4gYWxzbyB3cml0ZSAibW92IiBoZXJlLCBidXQgSSdtIG5vdCBzdXJlIHdoaWNoIGFs aWFzIGlzCj4+PiBwcmVmZXJyZWQ+Cj4+Pj4gbG9vcDoJCQkJLy8gQ29yZSBsb29wIGVudHJhbmNl Cj4+Pj4gICAgICAgICBsZDFiICAgIHpYLnMsIHAwL3osIFt4MV0KPj4+PiAgICAgICAgIGluY3cg ICAgeDEKPj4+Pgo+Pj4+ICAgICAgICAgYWRkICAgICB6QS5zLCBwMC9tLCB6QS5zLCB6WC5zCS8v IFRoZSBjYWxjdWxhdGlvbiBvZiB6QSBzdGlsbCBuZWVkcyB0byB1c2UgcDAKPj4+PiAgICAgICAg IG1zYiAgICAgelgucywgcDEvbSwgekoucywgekIucwkvLyBDaGFuZ2UgcCByZWdpc3RlciBoZXJl Cj4+Pj4gICAgICAgICBtb3ZwcmZ4IHpCLCB6QQo+Pj4+ICAgICAgICAgbWFkICAgICB6Qi5zLCBw MS9tLCB6Vi5zLCB6WC5zCS8vIENoYW5nZSBwIHJlZ2lzdGVyIGhlcmUKPj4+IEFzIGRpc2N1c3Nl ZCBhYm92ZSwgYXJlIHlvdSBzdXJlIHRoaXMgaXMgY29ycmVjdCBub3c/Cj4gCj4gSSB0aGluayB3 ZSd2ZSBhZ3JlZWQgdGhhdCBpdCBpcyBjb3JyZWN0Lgo+IAo+IFRoaW5raW5nIGFib3V0IHRoZSBj b2RlIGZsb3csIEkgdGhpbmsgdGhlIGluaXRpYWxpc2F0aW9uIG9mIHpWIGlzCj4gc2xpZ2h0bHkg d3Jvbmc6IGZvciB2ZXJ5IHNob3J0IGRhdGEsIHRoZSBmaXJzdCBibG9jayBtYXkgYmUgc2hvcnRl ciB0aGFuCj4gVkwuCj4gCj4gSSB0aGluayB0aGlzIGlzIGVhc2lseSBzb2x2ZWQgYnkgZ2V0dGlu ZyByaWQgb2YgdGhlIGNvbnN0YW50Cj4gaW5pdGlhbGlzYXRpb24gZm9yIHpWIGFuZCByZW1vdmlu ZyB0aGUgYnJhbmNoIHRoYXQgc2tpcHMgdGhlIENOVFAgY29kZQo+IHdoZW4gZW50ZXJpbmcgdGhl IGxvb3AgZm9yIHRoZSBmaXJzdCB0aW1lLiAgVGhhdCB3YXksIHpWIGdldHMKPiBpbml0aWFsaXNl ZCB0byB0aGUgY29ycmVjdCB0aGluZyBvbiBlbnRlcmluZyB0aGUgbG9vcCwgaXJyZXNwZWN0aXZl IG9mCj4gd2hldGhlciB3ZSBoYXZlIGEgd2hvbGUgdmVjdG9yIG9uIHRoZSBmaXJzdCBpdGVyYXRp b24uCgpUaGUgcHJvYmxlbSB5b3UgYXJlIHdvcnJpZWQgYWJvdXQgaXMgdmFsdWFibGUuIFRoaXMg cHJvYmxlbSBtdXN0IGJlIGNvbnNpZGVyZWQgd2hlbgp0aGUgbG9vcCBpcyB1bnJvbGxlZC4gSG93 ZXZlciwgdGhlIGNvZGUgaW4gbXkgZW1haWwgYSBmZXcgZGF5cyBhZ28gZGlkIG5vdCBoYXZlIHRo aXMKcHJvYmxlbSwgYW5kIEkgaGF2ZSBhbHNvIHRlc3RlZCB1c2UgY2FzZXMgd2l0aCBhIGxlbmd0 aCBsZXNzIHRoYW4gVkwuIDopCgpUaGUgcmVhc29uIGlzIHRoYXQgd2hlbiB0aGUgbGVuZ3RoIG9m IHRoZSB0ZXN0IGNhc2UgaXMgbGVzcyB0aGFuIFZMLCAnYi5sYXN0JyBpcwpmYWxzZSBhbmQgJ2Iu Zmlyc3QnIGlzIHRydWUsIGFuZCB0aGVuIGl0IHdpbGwgc3RpbGwganVtcCBkaXJlY3RseSB0byB0 cmFpbGxvb3AgdG8gdXBkYXRlIHpWLgoKCWIJc3RhcnQKdHJhaWxsb29wOgoJY250cAl4NiwgcDEs IHAwLnMKCW1vdgl6Vi5zLCBwMS9tLCB3Ngpsb29wOgoJLi4uCnN0YXJ0OgoJd2hpbGVsbwlwMC5z LCB4MSwgeExpbWl0CgliLmxhc3QJbG9vcAoJYi5maXJzdAl0cmFpbGxvb3AKCj4gCj4gTm90ZSwg dG8gc3F1ZWV6ZSBtYXhpbXVtIHBlcmZvcm1hbmNlIG91dCBvZiB0aGlzLCB5b3Ugc3RpbGwgcHJv YmFibHkKPiB3YW50IHRvIHVucm9sbCB0aGUgbG9vcCBhIGZldyB0aW1lcyBzbyB0aGF0IHlvdSBj YW4gc2NoZWR1bGUgdXNlZnVsIHdvcmsKPiBpbiBiZXR3ZWVuIGVhY2ggbG9hZCBhbmQgdGhlIGNv bXB1dGF0aW9ucyB0aGF0IGRlcGVuZCBvbiBpdC4KClllcywgSSB0cmllZCB0byBleHBhbmQgdGhl IGxvb3Agb24gdGhlIGJhc2lzIG9mIHRoZSBwcmV2aW91cyBjb2RlLCBidXQgdGhlIGVmZmVjdCB3 YXMKbm90IHZlcnkgc2F0aXNmYWN0b3J5KHRoZSBwZXJmb3JtYW5jZSBpcyBvbmx5IGFib3V0IDIg dGltZXMgdGhhdCBvZiB0aGUgQyB2ZXJzaW9uKSwKc28gSSByZWNvbnNpZGVyZWQgdGhlIHdheSBv ZiBpbXBsZW1lbnRhdGlvbiwgYmFzZWQgb24gdGhlIGZvcm11bGEgeW91IGRlcml2ZWQgZWFybGll ci4KCj4gCj4+Pj4gc3RhcnQ6Cj4+Pj4gICAgICAgICB3aGlsZWxvIHAwLnMsIHgxLCB4TGltaXQK Pj4+PiAgICAgICAgIGIubGFzdCAgbG9vcAkJLy8gVGhlIGNvbmRpdGlvbiBmb3IgdGhlIGNvcmUg bG9vcCB0byBjb250aW51ZSBpcyB0aGF0IGIubGFzdCBpcyB0cnVlCj4+Pj4gICAgICAgICBiLmZp cnN0IHRyYWlsbG9vcAkvLyBJZiBiLmxhc3QgaXMgZmFsc2UgYW5kIGIuZmlyc3QgaXMgdHJ1ZSwg aXQgbWVhbnMgdGhlIGxhc3QgY3ljbGUKPj4+Pgo+Pj4+ICAgICAgICAgdWFkZHYgICBkMCwgcDEs IHpBLnMKPj4+PiAgICAgICAgIHVhZGR2ICAgZDEsIHAxLCB6Qi5zCj4+Pj4KPj4+PiAgICAgICAg IG1vdiAgICAgeDEyLCB2MC4yZFswXQo+Pj4+ICAgICAgICAgbW92ICAgICB4MTMsIHYxLjJkWzBd Cj4+PiBUaGUgIjIiIGhlcmUgc2VlbXMgbm90IHRvIGJlIHJlcXVpcmVkIGJ5IHRoZSBzeW50YXgs IGFsdGhvdWdoIGl0J3MKPj4+IGhhcm1sZXNzLgo+Pgo+PiBZZXMgSSBkZWxldGVkIGl0Lgo+Pgo+ Pj4KPj4+PiAgICAgICAgIGFkZCAgICAgeDEwLCB4MTAsIHgxMgo+Pj4+ICAgICAgICAgYWRkICAg ICB4MTEsIHgxMSwgeDEzCj4+Pj4gICAgICAgICBhZGQgICAgIHgxMSwgeDExLCB4Mgo+Pj4gSWYg eDEwIGFuZCB4MTEgYXJlIHVzZWQgYXMgYWNjbXVsYXRvcnMgYnkgdGhlIGNhbGxlciwgSSBndWVz cyB0aGlzIHdvcmtzLgo+Pgo+PiBYMTAgYW5kIFgxMSBhcmUgcGFydCBBIGFuZCBwYXJ0IEIgb2Yg dGhlIGluaXRpYWwgdmFsdWUgb2YgYWRsZXIzMiBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlci4KPiAK PiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4KPiAKPj4KPj4+Cj4+Pj4gICAgICAgICBtb2Q2NTUy MSAgICAgICAgMTAsIDE0LCAxMgo+Pj4+ICAgICAgICAgbW9kNjU1MjEgICAgICAgIDExLCAxNCwg MTIKPiAKPiBOb3RlLCBjYW4geW91IHJlcGxhY2UgdGhlc2Ugd2l0aCB1ZGl2Pwo+IAo+IFdoaWxl IHVzaW5nIG11bCBtaWdodCBiZSBzbGlnaHRseSBjaGVhcGVyIHRvIGFjaGlldmUgdGhpcywgaXQg bWFrZXMgdGhlCj4gY29kZSBtb3JlIGNvbXBsZXggYW5kIHdpbGwgaGF2ZSBhIG5lZ2xpZ2libGUg aW1wYWN0IG9uIHRoZSBvdmVyYWxsCj4gY29zdC4uLgo+IAo+IFNvLCBkb2VzIHNvbWV0aGluZyBs aWtlIHRoaXMgd29yazoKPiAKPiAJbW92CXgzLCAjNjU1MjEKPiAJdWRpdgl4NCwgeDEwLCB4Mwo+ IAl1ZGl2CXg1LCB4MTEsIHgzCj4gCW1zdWIJeDEwLCB4NCwgeDMsIHgxMAo+IAltc3ViCXgxMSwg eDUsIHgzLCB4MTEKClllcywgdGhlIHJlYXNvbiBmb3IgZG9pbmcgdGhpcyBoZXJlIGlzIHRoYXQg SSBpbml0aWFsbHkgcGVyZm9ybWVkIG1vZHVsbyBkaXZpc2lvbgppbiB0aGUgbG9vcCBib2R5LCBz byB0aGF0IHdlIGNhbiBuZXZlciBvdmVyZmxvdyB0aGUgZGF0YSwgc28gSSBjb25zaWRlcmVkIG9w dGltaXppbmcKdGhlIGRpdmlzaW9uIHRvIG11bHRpcGxpY2F0aW9uLklmIHdlIG9ubHkgZG8gYSBt b2R1bGFyIGRpdmlzaW9uIGF0IHRoZSBlbmQsIHdlIGRvbid0Cm5lZWQgdG8gaW1wbGVtZW50IHRo ZSBjb2RlIGxpa2UgdGhpcy4KCj4gCj4+Pj4gICAgICAgICBsc2wgICAgIHgxMSwgeDExLCAjMTYK Pj4+PiAgICAgICAgIG9yciAgICAgeDAsIHgxMCwgeDExCj4+Pj4gICAgICAgICByZXQKPj4+PiAt LT44LS0KPj4+Pgo+Pj4+IEFmdGVyIHRoaXMgbW9kaWZpY2F0aW9uLCBUaGUgdGVzdCByZXN1bHRz IGFyZSBjb3JyZWN0IHdoZW4gdGhlIGRhdGEgbGVuZ3RoIGlzIGxlc3MgdGhhbiBhYm91dCA4IEti eXRlLAo+Pj4+IHBhcnQgQSB3aWxsIHN0aWxsIGJlIGNvcnJlY3QgYWZ0ZXIgOEssIGFuZCBhbiBv dmVyZmxvdyBlcnJvciB3aWxsIG9jY3VyIGluIHBhcnQgQi4gVGhpcyBpcyBiZWNhdXNlIEEKPj4+ PiBvbmx5IGFjY3VtdWxhdGVzIGFsbCB0aGUgYnl0ZXMsIGFuZCB0aGUgYWNjdW11bGF0aXZlIGFj Y2VsZXJhdGlvbiBvZiBCIGV4cGFuZHMgZmFzdGVyLCBiZWNhdXNlIHRoZQo+Pj4+IGFjY3VtdWxh dGl2ZSBmb3JtdWxhIG9mIEIgaXM6Cj4+Pj4gCUIgPSAoMSArIEQxKSArICgxICsgRDEgKyBEMikg KyAuLi4gKyAoMSArIEQxICsgRDIgKyAuLi4gKyBEbikgKG1vZCA2NTUyMSkKPj4+PiAgICAgICAg ICAgID0gbsOXRDEgKyAobuKIkjEpw5dEMiArIChu4oiSMinDl0QzICsgLi4uICsgRG4gKyBuICht b2QgNjU1MjEpCj4+Pj4KPj4+PiBJZiB3ZSB0YWtlIHRoZSBhdmVyYWdlIHZhbHVlIG9mIER4IHRv IDEyOCBhbmQgbiB0byA4MTkyOgo+Pj4+IAlCID0gKDEgKyAyICsgLi4uICsgODEyOSkgKiAxMjgg KyA4MTkyCj4+Pj4gCSAgPSA0LDI5NSw0OTksNzc2ICgzMmJpdCBvdmVyZmxvdykKPj4+Pgo+Pj4+ IFNvIEkgdGhpbmsgdGhlIDMyLWJpdCBhY2N1bXVsYXRvciBpcyBzdGlsbCBub3QgZW5vdWdoIGZv ciBwYXJ0IEIgaGVyZS4gOikKPj4+Pgo+Pj4+IC0tIAo+Pj4+IEJlc3QgcmVnYXJkcywKPj4+PiBM aSBRaWFuZwo+Pj4gVGhhdCBtYWtlcyBzZW5zZS4gIEkgaGFkbid0IHRyaWVkIHRvIGNhbGN1bGF0 ZSB0aGUgYWN0dWFsIGJvdW5kLgo+Pj4KPj4+IEl0IG1heSBiZSB3b3J0aCB0cnlpbmcgdGhpcyB3 aXRoIDY0LWJpdCBhY2N1bXVsYXRvcnMuICBUaGlzIHdpbGwKPj4+IHByb2JhYmx5IHNsb3cgdGhp bmdzIGRvd24sIGJ1dCBpdCBkZXBlbmRzIG9uIHRoZSByZWxhdGl2ZSBjb21wdXRhdGlvbiAvCj4+ PiBtZW1vcnkgdGhyb3VnaHB1dCBleGhpYml0ZWQgYnkgdGhlIGhhcmR3YXJlLgo+Pgo+PiBJZiBh IDY0LWJpdCB3aWRlIHZlY3RvciByZWdpc3RlciBpcyB1c2VkLCBmb3IgbW9zdCBzY2VuZXMgd2hl cmUgdGhlIGFtb3VudCBvZiBkYXRhIGlzIG5vdCBwYXJ0aWN1bGFybHkgbGFyZ2UsCj4+IGlzIGl0 IHdhc3RlZCBtb3JlIHZlY3RvciByZXNvdXJjZXM/Cj4gCj4gWWVzIDopCj4gCj4gRGVwZW5kaW5n IG9uIHRoZSBhbGdvcml0aG0sIHRoaXMgbWlnaHQgYmUgYSBiZXR0ZXIgdHJhZGVvZmYgaWYgaXQg bWVhbnQKPiB0aGF0IHRoZSBkYXRhIGNvdWxkIGJlIHByb2Nlc3NlZCBpbiBsYXJnZXIgY2h1bmtz LiAgSSBzdXNwZWN0IHRoYXQgdGhlCj4gdHJhZGVvZmYgaXMgdW5mYXZvdXJhYmxlIGluIHRoaXMg cGFydGljbHVhciBjYXNlIHRob3VnaCAtLSBidXQgSSBoYXZlbid0Cj4gdHJpZWQgaXQuCj4gCj4+ IE1heWJlIHdlIGNhbiBhbHNvIHRyeSB0byB1c2UgMTYtYml0IHdpZGUgdmVjdG9yIHJlZ2lzdGVy cyB0byBsb2FkIGRhdGEgYW5kIGNhbGN1bGF0aW9ucywKPj4gYW5kIGFjY3VtdWxhdGUgdGhlbSBp bnRvIHRoZSBzY2FsYXIgcmVnaXN0ZXIgeG4gYmVmb3JlIG92ZXJmbG93LCBqdXN0IGxpa2UgbXkg b3JpZ2luYWwgcGF0Y2gsCj4+IGJ1dCBJIGNhbiB0cnkgdG8gdXNlIGFzY2VuZGluZyBvcmRlciB0 byBjaGFuZ2UgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIGxhc3QgbG9vcCBCZSBtb3JlIGVsZWdhbnQu Cj4gCj4gUGVyaGFwcy4gIEJ1dCBJIGFzc3VtZWQgdGhhdCAxNi1iaXQgZWxlbWVudHMgd291bGQg b3ZlcmZsb3cgbXVjaCB0b28KPiBmYXN0IHRvIGJlIHByYWN0aWNhbC4gIEp1c3QgbXVsdGlwbHlp bmcgelggYnkgekogb25jZSBjYW4gcHJvZHVjZQo+IGVsZW1lbnQgdmFsdWVzIHVwIHRvIDB4ZmUw MSBpZiBWTCBpcyAyNTYgYnl0ZXMuCj4gCj4gRGlkIHlvdSBoYXZlIHNvbWUgaWRlYSBmb3IgaG93 IHRvIG1ha2UgdGhpcyB3b3JrPwo+IAo+IEl0IG1heSBiZSBwb3NzaWJsZSB0byBkbyAxNi1iaXQg bXVsdGlwbGllcyB3aXRoIDMyLWJpdCBhY2N1bXVsYXRpb24uCj4gU1ZFMiBoYXMgc29tZSBORU9O LXN0eWxlIG1peGVkLXdpZHRoIG11bHRpcGx5LWFjY3VtdWxhdGUgaW5zdHJ1Y3Rpb25zCj4gdGhh dCBjYW4gYWNoaWV2ZSB0aGlzIHNvcnQgb2YgdGhpbmcgZGlyZWN0bHksIGJ1dCBpbiBTVkUoMSkg SSB0aGluayAKPiB5b3Ugd291bGQgaGF2ZSB0byBicmVhayB0aGUgbXVsdGlwbHktYWNjdW11bGF0 ZXMgdXAuICBTYXk6Cj4gCj4gCW11bAl6WC5oLCBwUC9tLCB6WC5oLCB6Si5oCj4gCXN1Ygl6WC5z LCBwUC9tLCB6Qi5zLCB6WC5zCj4gCj4gd2hpbGVsbyBwUC5zIHNob3VsZCBnZW5lcmF0ZSBhIHBy ZWRpY2F0ZSB3aXRoIG9kZCAuaCBlbGVtZW50cyBpbmFjdGl2ZSwKPiBhbmQgbGQxYiB6WC5zLCBw UC96LCAuLi4gd2lsbCBtYWtlIHN1cmUgdGhvc2UgZWxlbWVudHMgYXJlIGFsbCB6ZXJvZWQgaW4K PiB4WC5oLgo+IAo+IEknbSBub3Qgc3VyZSB0aGlzIHdvdWxkIGJlIGZhc3RlciB0aGFuIGEgc2lu Z2xlIDMyLWJpdCBtc2IsIHNpbmNlCj4gbXVsdGlwbHktYWNjdW11bGF0ZXMgYXJlIGxpa2VseSB0 byBiZSBoZWF2aWx5IG9wdGltaXNlZCBpbiB0aGUgaGFyZHdhcmUsCj4gYnV0IHlvdSBjb3VsZCB0 cnkgaXQuCgpJIGFkb3B0ZWQgYSBwYXJ0IG9mIHRoZSBwYXRjaCBJIG9yaWdpbmFsbHkgc3VibWl0 dGVkLCBjb21iaW5lZCB3aXRoIHRoZSBmb3JtdWxhIHlvdSBnYXZlCnRvIGNhbGN1bGF0ZSBCW24r dl0gdXNpbmcgYW4gaW5jcmVhc2luZyBzZXF1ZW5jZSwgYW5kIHRoZW4gbW9kaWZ5IHRoZSBjb2Rl IGFnYWluLiBUaGUgY29kZSBpcyBhdCB0aGUgZW5kLgoKPiAKPj4+Cj4+PiBJIHRoaW5rIHRoZSBj b2RlIGNhbid0IGJlIGJ1bGxldHByb29mIHdpdGhvdXQgYnJlYWtpbmcgdGhlIGlucHV0IGludG8K Pj4+IGNodW5rcyBhbnl3YXksIHRob3VnaC4KPj4KPj4gSSBkb24ndCBxdWl0ZSB1bmRlcnN0YW5k IHdoYXQgaXQgbWVhbnMgaGVyZS4gRG9lcyBpdCBtZWFuIHRoYXQgdGhlIGlucHV0IGJ5dGVzIGFy ZSByZWFkIGludG8gdGhlIHZlY3RvciBpbgo+PiBibG9ja3MgZm9yIGNhbGN1bGF0aW9uICh0aGlz IGlzIGhvdyBpdCBpcyBkb25lIG5vdykgb3IgdGhlIGludGVybWVkaWF0ZSByZXN1bHRzIGFyZSBz dG9yZWQgaW4gZGlmZmVyZW50IGVsZW1lbnRzCj4+IG9mIHRoZSB2ZWN0b3IgaW4gYmxvY2tzIGR1 cmluZyB0aGUgY2FsY3VsYXRpb24gcHJvY2Vzcz8gOi0pCj4gCj4gSSBtZWFuLCB5b3UgbGltaXQg dGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBjb3JlIGxvb3Agc28gdGhhdAo+IG92ZXJm bG93IGRvZXNuJ3QgaGFwcGVuLiAgWW91J3JlIGFscmVhZHkgZG9pbmcgdGhpczsgSSBqdXN0IHdh bnRlZCB0bwo+ICBtYWtlIHRoZSBwb2ludCB0aGF0IDY0LWJpdCBhY2N1bXVsYXRvcnMgcHJvYmFi bHkgZG9uJ3Qgc29sdmUgdGhpcwo+IHByb2JsZW0sIGV2ZW4gdGhvdWdoIGl0IHdpbGwgdGFrZSBh IHZlcnkgbGFyZ2UgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdG8KPiBjYXVzZSBhbiBvdmVyZmxvdy4K PiAKPiBVbmxlc3MgQWRsZXIzMiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBp bnB1dCBkYXRhIG5vdCB0bwo+IGV4Y2VlZCBzb21lIHZhbHVlLCBpdCBjb3VsZCBnbyBvbiBmb3Jl dmVyIC0tIHNvIG92ZXJmbG93IGJlY29tZXMKPiBpbmV2aXRhYmxlLgoKWWVzLCBJIHVuZGVyc3Rh bmQgdGhhdCBpZiB3ZSBkbyBub3QgcGVyZm9ybSB0aGUgbW9kdWxvIGRpdmlzaW9uIGluIHRpbWUs IGRhdGEgb3ZlcmZsb3cgd2lsbCBoYXBwZW4gc29vbmVyIG9yIGxhdGVyLgpTbyBteSBpbml0aWFs IHBhdGNoIGFkZGVkIG1vZHVsbyBkaXZpc2lvbiB0byB0aGUgbG9vcCBib2R5IGFuZCBvcHRpbWl6 ZWQgaXQuOikKCkFzIHlvdSBzYWlkLCBpZiB3ZSBkb27igJl0IHdhbnQgdG8gcGVyZm9ybSBtb2R1 bGFyIGRpdmlzaW9uIGluIHRoZSBsb29wIGJvZHksIHRoZW4gd2UgbmVlZCB0byBibG9jayB0aGUg aW5wdXQgYW5kCnBlcmZvcm0gdGhlIG1vZHVsYXIgZGl2aXNpb24gaW4gdGltZSBiZWZvcmUgdGhl IGRhdGEgd2lsbCBuZXZlciBvdmVyZmxvdyAoTmVlZCB0byBjb25zaWRlciB0aGUgd29yc3QgY2Fz ZSwKdGhhdCBpcywgYWxsIGRhdGEgaXMgMHhmZikuCgotLTg8LS0KCS4uLgoJYWRsZXJfQSAucmVx ICAgIHgxMAoJYWRsZXJfQiAucmVxICAgIHgxMQoJCgkubWFjcm8JYWRsZXIzMl9jb3JlCglsZDFi CXpYLmgsIHAwL3osIFt4MV0JLy8gbG9hZCBieXRlcwoJaW5jaAl4MQoKCXVhZGR2CWQwLCBwMCwg elguaAoJbXVsCXpYLmgsIHAwL20sIHpYLmgsIHpKLmgJLy8gU3VtIFtqPTAgLi4gdi0xXSBqKlhb aituXQoJbW92CXg5LCB2MC5kWzBdCgl1YWRkdglkMSwgcDAsIHpYLmgKCWFkZAlhZGxlcl9BLCBh ZGxlcl9BLCB4OQkvLyBBW24rdl0gPSBBbiArIFN1bSBbaj0wIC4uLiB2LTFdIFhbal0KCW1vdgl4 OSwgdjEuZFswXQoJbWFkZAlhZGxlcl9CLCB4NywgYWRsZXJfQSwgYWRsZXJfQgkvLyBCbiArIHYq QVtuK3ZdCglzdWIJYWRsZXJfQiwgYWRsZXJfQiwgeDkJCS8vIEJbbit2XSA9IEJuICsgdipBW24r dl0gLSBTdW0gW2o9MCAuLiB2LTFdIGoqWFtqK25dCgkuZW5kbQoKCS5tYWNybwlhZGxlcjMyX2xv b3AKCXdoaWxlbG8JcDAuaCwgeDEsIHhMaW1pdAoJY250cAl4NywgcDAsIHAwLmgJCS8vIHg3IGlz IHVzZWQgdG8gc3RvcmUgJ3YnCglhZGxlcjMyX2NvcmUKCS5lbmRtCgpFTlRSWShYWFgpCgkuLi4K CWFkZAl4TGltaXQsIHgxLCB4MgoKbG9vcDoKCWFkbGVyMzJfbG9vcAoJYWRsZXIzMl9sb29wCglh ZGxlcjMyX2xvb3AKCWFkbGVyMzJfbG9vcAoJY21wCXg3LCAjMAoJYi5uZQlsb29wCgoJbW92CXgz LCAjNjU1MjEKCXVkaXYJeDQsIHgxMCwgeDMKCXVkaXYJeDUsIHgxMSwgeDMKCW1zdWIJeDEwLCB4 NCwgeDMsIHgxMAoJbXN1Ygl4MTEsIHg1LCB4MywgeDExCgkuLi4KLS0+OC0tCgoKSSB0ZXN0ZWQg NTAwTWJ5dGUgcmFuZG9tIGRhdGEsIHRoZSByZXN1bHQgaXMgY29tcGxldGVseSBjb3JyZWN0LCBs b25nZXIgZGF0YSB2b2x1bWUgZGlkIG5vdCB0ZXN0LApJIHRoaW5rIHdlIGNhbiBhbHNvIHdyYXAg YSBsYXllciBvZiBkYXRhIGJsb2NrIGNvbnRyb2wgY29kZSwgdGhhdCBpcywgYWZ0ZXIgdGhlIGRh dGEgdm9sdW1lCmV4Y2VlZHMgYSBjZXJ0YWluIHRocmVzaG9sZCwgdGhlIGNvbnRyb2wgY29kZSBU aGUgaW5wdXQgZGF0YSBpcyBzZWdtZW50ZWQgYnkgdGhyZXNob2xkLCBhbmQKdGhlIGluaXRpYWwg YWRsZXIzMiBvZiB0aGUgc3Vic2VxdWVudCBzZWdtZW50IGlzIHRoZSByZXN1bHQgb2YgdGhlIHBy ZXZpb3VzIHNlZ21lbnQgY2FsY3VsYXRpb24uCgpMaWtlOgoJYWRsZXIzMiA9IDE7CglpZiAobGVu IDw9IE1BWF9CTE9DS19MRU4pCgkJYWRsZXIzMiA9IGFkbGVyMzJfc3ZlKGFkbGVyMzIsIGJ1Ziwg bGVuKTsKCWVsc2UgewoJCWludCBpID0gMDsKCQl3aGlsZSAoaSA8IGxlbikgewoJCQlpbnQgYmxv Y2tfbGVuID0gKGxlbiAtIGkgPiBNQVhfQkxPQ0tfTEVOKSA/IE1BWF9CTE9DS19MRU4gOiAobGVu IC0gaSk7CgkJCWFkbGVyMzIgPSBhZGxlcjMyX3N2ZShhZGxlcjMyLCAmYnVmW2ldLCBibG9ja19s ZW4pOwoJCQlpICs9IGJsb2NrX2xlbjsKCQl9Cgl9CglyZXR1cm4gYWRsZXIzMjsKCkluIHRoaXMg d2F5LCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHdoZW4gdGhlIGRhdGEgb3ZlcmZsb3dz IGFuZCB3aGVuIHRvIG1vZHVsbyBpbiB0aGUgY29yZSBhbGdvcml0aG0gY29kZS4KCi0tIApCZXN0 IHJlZ2FyZHMsCkxpIFFpYW5nCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==