From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS17314 8.43.84.0/22 X-Spam-Status: No, score=-4.2 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 7B20E1F8C6 for ; Tue, 13 Jul 2021 14:27:42 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A4B6C396981A for ; Tue, 13 Jul 2021 14:27:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A4B6C396981A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1626186461; bh=lD87RWmMTHfsHGUT0JvGtH908IrtpcAWnhzRfxcYZYo=; h=References:In-Reply-To:Date:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=ZynYzRwUp9YSX2UBZG5Sn1W7KkahWQtOLbwRGmQsNYDjYHyQF3FO9RwEQpjID45Q1 Db0WBvtxaLJXvSUNVUs93ffEYm+Q/X8wfG/cyOVCEqKpt3Wi2QAyd3whXUs4vIBDPU NGjbctTVGfz8nrJLA6Bw7wdKtCzIzruWF58PZEcw= Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) by sourceware.org (Postfix) with ESMTPS id 71BA23893642 for ; Tue, 13 Jul 2021 14:26:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 71BA23893642 Received: by mail-pg1-x535.google.com with SMTP id w15so21757198pgk.13 for ; Tue, 13 Jul 2021 07:26:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=lD87RWmMTHfsHGUT0JvGtH908IrtpcAWnhzRfxcYZYo=; b=r5HsIVP7ne++ai5kS4QqqPoxMAkl8x1HLG3B7nPjbKAUe9h/kQ3dWICJegHhSFFugc +anSNj8IOM9v+Z5MjyXPUyVmkgcYb9Sy0FqI1dzilYylbyG9UmKZLvhXnB5b9VTfmDfK qec8CsCBsLhucInAtNvJ0hoZr+DEi02a/vRxzSaJbaukiiXQy3M8DCRmVfqiaJw8H0iF zwtsPVwDFERlTMrXVf2k1lSkXNC9vlxsUX8PZTTzyiEUsmn3GPc1pc56UwvBWcVGN9by /ssZdZaw7yutwxNkNKo7qIGaqUToIjcP7dPFYtGVwQqggwNCPS8BXml9A38avNdgEKmb sWDQ== X-Gm-Message-State: AOAM530qkXeF3QNrmSyQeSjQ1dAyA8qHJFq/rGmmKu/j0nR38fyA29gm aHgdrBA+q729tLJYPF4HeJXWg7AaVnFHLweBxMg= X-Google-Smtp-Source: ABdhPJzPR7wfQu4z5fVpe+SMY/AW657Fj3Qnj5ypCYRfIohgIQP/Hxc3eDW9fiS6XAnqHf25aZwRxPEbMPqsPRoFqlc= X-Received: by 2002:a63:5b02:: with SMTP id p2mr4517090pgb.161.1626186398555; Tue, 13 Jul 2021 07:26:38 -0700 (PDT) MIME-Version: 1.0 References: <20210701210537.51272-1-hjl.tools@gmail.com> In-Reply-To: Date: Tue, 13 Jul 2021 07:26:02 -0700 Message-ID: Subject: Re: [llvm-dev] [PATCH] Add optional _Float16 support To: "Wang, Pengfei" , llvm-dev@lists.llvm.org Content-Type: multipart/mixed; boundary="000000000000a087ec05c70206f7" X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: "H.J. Lu via Libc-alpha" Reply-To: "H.J. Lu" Cc: GNU C Library , GCC Patches , IA32 System V Application Binary Interface , Joseph Myers Errors-To: libc-alpha-bounces+e=80x24.org@sourceware.org Sender: "Libc-alpha" --000000000000a087ec05c70206f7 Content-Type: text/plain; charset="UTF-8" On Mon, Jul 12, 2021 at 8:59 PM Wang, Pengfei wrote: > > > Return _Float16 and _Complex _Float16 values in %xmm0/%xmm1 registers. > > Can you please explain the behavior here? Is there difference between _Float16 and _Complex _Float16 when return? I.e., > 1, In which case will _Float16 values return in both %xmm0 and %xmm1? > 2, For a single _Float16 value, are both real part and imaginary part returned in %xmm0? Or returned in %xmm0 and %xmm1 respectively? Here is the v2 patch to add the missing _Float16 bits. The PDF file is at https://gitlab.com/x86-psABIs/i386-ABI/-/wikis/Intel386-psABI > Thanks > Pengfei > > -----Original Message----- > From: llvm-dev On Behalf Of H.J. Lu via llvm-dev > Sent: Friday, July 2, 2021 6:28 AM > To: Joseph Myers > Cc: llvm-dev@lists.llvm.org; GCC Patches ; GNU C Library ; IA32 System V Application Binary Interface > Subject: Re: [llvm-dev] [PATCH] Add optional _Float16 support > > On Thu, Jul 1, 2021 at 3:10 PM Joseph Myers wrote: > > > > On Thu, 1 Jul 2021, H.J. Lu via Gcc-patches wrote: > > > > > 2. Return _Float16 and _Complex _Float16 values in %xmm0/%xmm1 registers. > > > > That restricts use of _Float16 to processors with SSE. Is that what > > we want in the ABI, or should _Float16 be available with base 32-bit > > x86 architecture features only, much like _Float128 and the decimal FP > > types > > Yes, _Float16 requires XMM registers. > > > are? (If it is restricted to SSE, we can of course ensure relevant > > libgcc functions are built with SSE enabled, and likewise in glibc if > > that gains > > _Float16 functions, though maybe with some extra complications to get > > relevant testcases to run whenever possible.) > > > > _Float16 functions in libgcc should be compiled with SSE enabled. > > BTW, _Float16 software emulation may require more than just SSE since we need to do _Float16 load and store with XMM registers. > There is no 16bit load/store for XMM registers without AVX512FP16. > > -- > H.J. > _______________________________________________ > LLVM Developers mailing list > llvm-dev@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev -- H.J. --000000000000a087ec05c70206f7 Content-Type: text/x-patch; charset="US-ASCII"; name="v2-0001-Add-optional-_Float16-support.patch" Content-Disposition: attachment; filename="v2-0001-Add-optional-_Float16-support.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kr25bwn00 RnJvbSBiNDhjMzYxYjkzOWVmOTIxNjE4NGYxYTU4YTlkNTA1MmJiZWI3NTUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6 IFRodSwgMSBKdWwgMjAyMSAxMzo1ODowMCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIEFkZCBv cHRpb25hbCBfRmxvYXQxNiBzdXBwb3J0CgoxLiBQYXNzIF9GbG9hdDE2IGFuZCBfQ29tcGxleCBf RmxvYXQxNiB2YWx1ZXMgb24gc3RhY2suCjIuIFJldHVybiBfRmxvYXQxNiBhbmQgX0NvbXBsZXgg X0Zsb2F0MTYgdmFsdWVzIGluICV4bW0wLyV4bW0xIHJlZ2lzdGVycy4KLS0tCiBsb3ctbGV2ZWwt c3lzLWluZm8udGV4IHwgNzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvbG93LWxldmVsLXN5cy1pbmZvLnRleCBiL2xvdy1sZXZlbC1zeXMtaW5mby50 ZXgKaW5kZXggYWNhZjMwZS4uMTU3NTA5YiAxMDA2NDQKLS0tIGEvbG93LWxldmVsLXN5cy1pbmZv LnRleAorKysgYi9sb3ctbGV2ZWwtc3lzLWluZm8udGV4CkBAIC0zMCw3ICszMCw4IEBAIG9iamVj dCwgYW5kIHRoZSB0ZXJtIFxlbXBoe1x0ZXh0aW5kZXh7XHNpeHRlZW5ieXRle319fSByZWZlcnMg dG8gYQogXHN1YnN1YnNlY3Rpb257RnVuZGFtZW50YWwgVHlwZXN9CiAKIFRhYmxlflxyZWZ7YmFz aWMtdHlwZXN9IHNob3dzIHRoZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIElTTyBDCi1zY2FsYXIg dHlwZXMgYW5kIHRoZSBwcm9jZXNzb3Igc2NhbGFyIHR5cGVzLiAgXGNvZGV7X19mbG9hdDgwfSwK K3NjYWxhciB0eXBlcyBhbmQgdGhlIHByb2Nlc3NvciBzY2FsYXIgdHlwZXMuICBcY29kZXtfRmxv YXQxNn0sCitcY29kZXtfX2Zsb2F0ODB9LAogXGNvZGV7X19mbG9hdDEyOH0sIFxjb2Rle19fbTY0 fSwgXGNvZGV7X19tMTI4fSwgXGNvZGV7X19tMjU2fSBhbmQKIFxjb2Rle19fbTUxMn0gdHlwZXMg YXJlIG9wdGlvbmFsLgogCkBAIC03OSwyMiArODAsMjcgQEAgc2NhbGFyIHR5cGVzIGFuZCB0aGUg cHJvY2Vzc29yIHNjYWxhciB0eXBlcy4gIFxjb2Rle19fZmxvYXQ4MH0sCiAgICAgJiBcdGV4dHR0 e1x0ZXh0aXR7YW55LXR5cGV9ICp9ICYgNCAmIDQgJiB1bnNpZ25lZCBcZm91cmJ5dGUgXFwKICAg ICAmIFx0ZXh0dHR7XHRleHRpdHthbnktdHlwZX0gKCopKCl9ICYgJiBcXAogICAgIFxobGluZQot ICAgIEZsb2F0aW5nLSYgXHRleHR0dHtmbG9hdH0gJiA0ICYgNCAmIHNpbmdsZSAoSUVFRS03NTQp IFxcCiAgICAgXGNsaW5lezItNX0KLSAgICBwb2ludCAmIFx0ZXh0dHR7ZG91YmxlfSAmIDggJiA0 ICYgZG91YmxlIChJRUVFLTc1NCkgXFwKLSAgICAmIFx0ZXh0dHR7bG9uZyBkb3VibGV9JF57XGRh Z2dlclxkYWdnZXJcZGFnZ2VyXGRhZ2dlcn0kICAmICYgJiBcXAorICAgICYgXHRleHR0dHtfRmxv YXQxNn0kXntcZGFnZ2VyXGRhZ2dlclxkYWdnZXJcZGFnZ2VyXGRhZ2dlclxkYWdnZXJ9JCAmIDIg JiAyICYgMTYtYml0IChJRUVFLTc1NCkgXFwKICAgICBcY2xpbmV7Mi01fQotICAgICYgXHRleHR0 dHtfX2Zsb2F0ODB9JF57XGRhZ2dlclxkYWdnZXJ9JCAgJiAxMiAmIDQgJiA4MC1iaXQgZXh0ZW5k ZWQgKElFRUUtNzU0KSBcXAotICAgICYgXHRleHR0dHtsb25nIGRvdWJsZX0kXntcZGFnZ2VyXGRh Z2dlclxkYWdnZXJcZGFnZ2VyfSQgICYgJiAmIFxcCisgICAgJiBcdGV4dHR0e2Zsb2F0fSAmIDQg JiA0ICYgc2luZ2xlIChJRUVFLTc1NCkgXFwKKyAgICBcY2xpbmV7Mi01fQorICAgIEZsb2F0aW5n LSAmIFx0ZXh0dHR7ZG91YmxlfSAmIDgKKwkmIDgkXntcZGFnZ2VyXGRhZ2dlclxkYWdnZXJcZGFn Z2VyfSQgJiBkb3VibGUgKElFRUUtNzU0KSBcXAorICAgIFxjbGluZXsyLTV9CisgICAgcG9pbnQg JiBcdGV4dHR0e19fZmxvYXQ4MH0kXntcZGFnZ2VyXGRhZ2dlcn0kICAmIDE2ICYgMTYgJiA4MC1i aXQgZXh0ZW5kZWQgKElFRUUtNzU0KSBcXAorICAgICYgXHRleHR0dHtsb25nIGRvdWJsZX0kXntc ZGFnZ2VyXGRhZ2dlclxkYWdnZXJcZGFnZ2VyXGRhZ2dlcn0kICAmIDE2ICYgMTYgJiA4MC1iaXQg ZXh0ZW5kZWQgKElFRUUtNzU0KSBcXAogICAgIFxjbGluZXsyLTV9CiAgICAgJiBcdGV4dHR0e19f ZmxvYXQxMjh9JF57XGRhZ2dlclxkYWdnZXJ9JCAmIDE2ICYgMTYgJiAxMjgtYml0IGV4dGVuZGVk IChJRUVFLTc1NCkgXFwKICAgICBcaGxpbmUKLSAgICBDb21wbGV4JiBcdGV4dHR0e19Db21wbGV4 IGZsb2F0fSAmIDggJiA0ICYgY29tcGxleCBzaW5nbGUgKElFRUUtNzU0KSBcXAorICAgICYgXHRl eHR0dHtfQ29tcGxleCBfRmxvYXQxNn0gJF57XGRhZ2dlclxkYWdnZXJcZGFnZ2VyXGRhZ2dlclxk YWdnZXJcZGFnZ2VyfSQgJiAyICYgMiAmIGNvbXBsZXggMTYtYml0IChJRUVFLTc1NCkgXFwKICAg ICBcY2xpbmV7Mi01fQotICAgIEZsb2F0aW5nLSYgXHRleHR0dHtfQ29tcGxleCBkb3VibGV9ICYg MTYgJiA0ICYgY29tcGxleCBkb3VibGUgKElFRUUtNzU0KSBcXAotICAgIHBvaW50ICYgXHRleHR0 dHtfQ29tcGxleCBsb25nIGRvdWJsZX0kXntcZGFnZ2VyXGRhZ2dlclxkYWdnZXJcZGFnZ2VyfSQg JiAmICYgXFwKKyAgICAmIFx0ZXh0dHR7X0NvbXBsZXggZmxvYXR9ICYgOCAmIDQgJiBjb21wbGV4 IHNpbmdsZSAoSUVFRS03NTQpIFxcCiAgICAgXGNsaW5lezItNX0KLSAgICAmIFx0ZXh0dHR7X0Nv bXBsZXggX19mbG9hdDgwfSRee1xkYWdnZXJcZGFnZ2VyfSQgICYgMjQgJiA0ICYgY29tcGxleCA4 MC1iaXQgZXh0ZW5kZWQgKElFRUUtNzU0KSBcXAorICAgIENvbXBsZXgmIFx0ZXh0dHR7X0NvbXBs ZXggZG91YmxlfSAmIDE2ICYgNCAmIGNvbXBsZXggZG91YmxlIChJRUVFLTc1NCkgXFwKKyAgICBG bG9hdGluZy0mIFx0ZXh0dHR7X0NvbXBsZXggbG9uZyBkb3VibGV9JF57XGRhZ2dlclxkYWdnZXJc ZGFnZ2VyXGRhZ2dlcn0kICYgJiAmIFxcCisgICAgXGNsaW5lezItNX0KKyAgICBwb2ludCAmIFx0 ZXh0dHR7X0NvbXBsZXggX19mbG9hdDgwfSRee1xkYWdnZXJcZGFnZ2VyfSQgICYgMjQgJiA0ICYg Y29tcGxleCA4MC1iaXQgZXh0ZW5kZWQgKElFRUUtNzU0KSBcXAogICAgICYgXHRleHR0dHtfQ29t cGxleCBsb25nIGRvdWJsZX0kXntcZGFnZ2VyXGRhZ2dlclxkYWdnZXJcZGFnZ2VyfSQgICYgJiAm IFxcCiAgICAgXGNsaW5lezItNX0KICAgICAmIFx0ZXh0dHR7X0NvbXBsZXggX19mbG9hdDEyOH0k XntcZGFnZ2VyXGRhZ2dlcn0kICYgMzIgJiAxNiAmIGNvbXBsZXggMTI4LWJpdCBleHRlbmRlZCAo SUVFRS03NTQpIFxcCkBAIC0xMjUsNiArMTMxLDggQEAgVGhlIFx0ZXh0dHR7bG9uZyBkb3VibGV9 IHR5cGUgaXMgNjQtYml0LCB0aGUgc2FtZSBhcyB0aGUgXHRleHR0dHtkb3VibGV9CiB0eXBlLCBv biB0aGUgQW5kcm9pZHtcdGV4dHRyYWRlbWFya30gcGxhdGZvcm0uICBNb3JlIGluZm9ybWF0aW9u IG9uIHRoZQogQW5kcm9pZHtcdGV4dHRyYWRlbWFya30gcGxhdGZvcm0gaXMgYXZhaWxhYmxlIGZy b20KIFx1cmx7aHR0cDovL3d3dy5hbmRyb2lkLmNvbS99Ln1cXAorXG11bHRpY29sdW1uezV9e3B7 MTNjbX19e1xteWZvbnRzaXplICRee1xkYWdnZXJcZGFnZ2VyXGRhZ2dlclxkYWdnZXJcZGFnZ2Vy XGRhZ2dlcn0kCitUaGUgXHRleHR0dHtfRmxvYXQxNn0gdHlwZSwgZnJvbSBJU08vSUVDIFRTIDE4 NjYxLTM6MjAxNSwgaXMgb3B0aW9uYWwufVxcCiAgIFxlbmR7dGFidWxhcn0KIH0KIFxlbmR7dGFi bGV9CkBAIC0zMjMsNiArMzMxLDcgQEAgYXQgdGhlIHRpbWUgb2YgdGhlIGNhbGwuCiBcYmVnaW57 dGFibGV9CiBcSHJ1bGUKICAgXGNhcHRpb257UmVnaXN0ZXIgVXNhZ2V9CisgIFxteWZvbnRzaXpl CiAgIFxsYWJlbHtmaWctcmVnLXVzYWdlfQogICBcYmVnaW57Y2VudGVyfQogICAgIFxiZWdpbnt0 YWJ1bGFyfXtsfHB7OC4zNWNtfXxsfQpAQCAtMzQ2LDEzICszNTUsMjkgQEAgb2Ygc29tZSA2NGJp dCByZXR1cm4gdHlwZXMgJiBObyBcXAogXEVCUCAmIGNhbGxlZS1zYXZlZCByZWdpc3Rlcjsgb3B0 aW9uYWxseSB1c2VkIGFzIGZyYW1lIHBvaW50ZXIgJiBZZXMgXFwKIFxFU0kgJiBjYWxsZWUtc2F2 ZWQgcmVnaXN0ZXIgJiB5ZXMgXFwKIFxFREkgJiBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXIgJiB5ZXMg XFwKLVxyZWd7eG1tMH0sIFxyZWd7eW1tMH0gJiBzY3JhdGNoIHJlZ2lzdGVyczsgYWxzbyB1c2Vk IHRvIHBhc3MgYW5kIHJldHVybgotXGNvZGV7X19tMTI4fSwgXGNvZGV7X19tMjU2fSBwYXJhbWV0 ZXJzICYgTm9cXAotXHJlZ3t4bW0xfS0tXHJlZ3t4bW0yfSwmIHNjcmF0Y2ggcmVnaXN0ZXJzOyBh bHNvIHVzZWQgdG8gcGFzcwotXGNvZGV7X19tMTI4fSwgJiBObyBcXAotXHJlZ3t5bW0xfS0tXHJl Z3t5bW0yfSAmIFxjb2Rle19fbTI1Nn0gcGFyYW1ldGVycyAmIFxcCi1ccmVne3htbTN9LS1ccmVn e3htbTd9LCYgc2NyYXRjaCByZWdpc3RlcnMgJiBObyBcXAotXHJlZ3t5bW0zfS0tXHJlZ3t5bW03 fSAmICYgXFwKK1xyZWd7eG1tMH0gJiBzY3JhdGNoIHJlZ2lzdGVyOyBhbHNvIHVzZWQgdG8gcGFz cyB0aGUgZmlyc3QgXGNvZGV7X19tMTI4fQorICAgICAgICAgICAgIHBhcmFtZXRlciBhbmQgcmV0 dXJuIFxjb2Rle19fbTEyOH0sIFxjb2Rle19GbG9hdDE2fSwKKwkgICAgIHRoZSByZWFsIHBhcnQg b2YgXGNvZGV7X0NvbXBsZXggX0Zsb2F0MTZ9ICYgTm8gXFwKK1xyZWd7eW1tMH0gJiBzY3JhdGNo IHJlZ2lzdGVyOyBhbHNvIHVzZWQgdG8gcGFzcyB0aGUgZmlyc3QgXGNvZGV7X19tMjU2fQorICAg ICAgICAgICAgIHBhcmFtZXRlciBhbmQgcmV0dXJuIFxjb2Rle19fbTI1Nn0gJiBObyBcXAorXHJl Z3t6bW0wfSAmIHNjcmF0Y2ggcmVnaXN0ZXI7IGFsc28gdXNlZCB0byBwYXNzIHRoZSBmaXJzdCBc Y29kZXtfX201MTJ9CisgICAgICAgICAgICAgcGFyYW1ldGVyIGFuZCByZXR1cm4gXGNvZGV7X19t NTEyfSAmIE5vIFxcCitccmVne3htbTF9ICYgc2NyYXRjaCByZWdpc3RlcjsgYWxzbyB1c2VkIHRv IHBhc3MgdGhlIHNlY29uZCBcY29kZXtfX20xMjh9CisgICAgICAgICAgICAgcGFyYW1ldGVyIGFu ZCByZXR1cm4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mCisJICAgICBcY29kZXtfQ29tcGxleCBfRmxv YXQxNn0gJiBObyBcXAorXHJlZ3t5bW0xfSAmIHNjcmF0Y2ggcmVnaXN0ZXI7IGFsc28gdXNlZCB0 byBwYXNzIHRoZSBzZWNvbmQgXGNvZGV7X19tMjU2fQorICAgICAgICAgICAgIHBhcmFtZXRlcnMg JiBObyBcXAorXHJlZ3t6bW0xfSAmIHNjcmF0Y2ggcmVnaXN0ZXI7IGFsc28gdXNlZCB0byBwYXNz IHRoZSBzZWNvbmQgXGNvZGV7X19tNTEyfQorICAgICAgICAgICAgIHBhcmFtZXRlcnMgJiBObyBc XAorXHJlZ3t4bW0yfSAmIHNjcmF0Y2ggcmVnaXN0ZXI7IGFsc28gdXNlZCB0byBwYXNzIHRoZSB0 aGlyZCBcY29kZXtfX20xMjh9CisgICAgICAgICAgICAgcGFyYW1ldGVycyAmIE5vIFxcCitccmVn e3ltbTJ9ICYgc2NyYXRjaCByZWdpc3RlcjsgYWxzbyB1c2VkIHRvIHBhc3MgdGhlIHRoaXJkIFxj b2Rle19fbTI1Nn0KKyAgICAgICAgICAgICBwYXJhbWV0ZXJzICYgTm8gXFwKK1xyZWd7em1tMn0g JiBzY3JhdGNoIHJlZ2lzdGVyOyBhbHNvIHVzZWQgdG8gcGFzcyB0aGUgdGhpcmQgXGNvZGV7X19t NTEyfQorICAgICAgICAgICAgIHBhcmFtZXRlcnMgJiBObyBcXAorXHJlZ3t4bW0zfS0tXHJlZ3t4 bW03fSAmIHNjcmF0Y2ggcmVnaXN0ZXJzICYgTm8gXFwKK1xyZWd7eW1tM30tLVxyZWd7eW1tN30g JiBzY3JhdGNoIHJlZ2lzdGVycyAmIE5vIFxcCitccmVne3ptbTN9LS1ccmVne3ptbTd9ICYgc2Ny YXRjaCByZWdpc3RlcnMgJiBObyBcXAogXHJlZ3ttbTB9ICYgc2NyYXRjaCByZWdpc3RlcjsgYWxz byB1c2VkIHRvIHBhc3MgYW5kIHJldHVybgogXGNvZGV7X19tNjR9IHBhcmFtZXRlciAmIE5vXFwK IFxyZWd7bW0xfS0tXHJlZ3ttbTJ9ICYgdXNlZCB0byBwYXNzIFxjb2Rle19fbTY0fSBwYXJhbWV0 ZXJzICYgTm9cXApAQCAtNDIwLDYgKzQ0NSw4IEBAIGFuZCBcdGV4dHR0e3VuaW9uc30pIGFyZSBh bHdheXMgcmV0dXJuZWQgaW4gbWVtb3J5LgogICAgICYgXHRleHR0dHtcdGV4dGl0e2FueS10eXBl fSAqfSAmIFxFQVggXFwKICAgICAmIFx0ZXh0dHR7XHRleHRpdHthbnktdHlwZX0gKCopKCl9ICYg XFwKICAgICBcaGxpbmUKKyAgICAmIFx0ZXh0dHR7X0Zsb2F0MTZ9ICYgXHJlZ3t4bW0wfSBcXAor ICAgIFxjbGluZXsyLTN9CiAgICAgJiBcdGV4dHR0e2Zsb2F0fSAmIFxyZWd7c3QwfSBcXAogICAg IFxjbGluZXsyLTN9CiAgICAgRmxvYXRpbmctICYgXHRleHR0dHtkb3VibGV9ICYgXHJlZ3tzdDB9 IFxcCkBAIC00MzAsMTQgKzQ1NywxOSBAQCBhbmQgXHRleHR0dHt1bmlvbnN9KSBhcmUgYWx3YXlz IHJldHVybmVkIGluIG1lbW9yeS4KICAgICBcY2xpbmV7Mi0zfQogICAgICYgXHRleHR0dHtfX2Zs b2F0MTI4fSAmIG1lbW9yeSBcXAogICAgIFxobGluZQotICAgICYgXHRleHR0dHtfQ29tcGxleCBm bG9hdH0gJiBcRURYOlxFQVggXFwKLSAgICAmICYgVGhlIHJlYWwgcGFydCBpcyByZXR1cm5lZCBp biBcRUFYLiBUaGUgaW1hZ2luYXJ5IHBhcnQgaXMKKyAgICAmIFx0ZXh0dHR7X0NvbXBsZXggX0Zs b2F0MTZ9ICYgXHJlZ3t4bW0wfTpccmVne3htbTF9IFxcCisgICAgJiAmIFRoZSByZWFsIHBhcnQg aXMgcmV0dXJuZWQgaW4gXHJlZ3t4bW0wfS4gVGhlIGltYWdpbmFyeSBwYXJ0IGlzCisgICAgICAg IHJldHVybmVkIFxcCisgICAgJiAmIGluIFxyZWd7eG1tMX0uXFwKKyAgICBcY2xpbmV7Mi0zfQor ICAgIENvbXBsZXggJiBcdGV4dHR0e19Db21wbGV4IGZsb2F0fSAmIFxFRFg6XEVBWCBcXAorICAg IGZsb2F0aW5nLSAmICYgVGhlIHJlYWwgcGFydCBpcyByZXR1cm5lZCBpbiBcRUFYLiBUaGUgaW1h Z2luYXJ5IHBhcnQgaXMKICAgICAgICAgcmV0dXJuZWQgXFwKLSAgICBDb21wbGV4ICYgJiBpbiBc RURYLlxcCisgICAgcG9pbnQgJiAmIGluIFxFRFguXFwKICAgICBcY2xpbmV7Mi0zfQotICAgIGZs b2F0aW5nLSAmIFx0ZXh0dHR7X0NvbXBsZXggZG91YmxlfSAmIG1lbW9yeSBcXAorICAgICYgXHRl eHR0dHtfQ29tcGxleCBkb3VibGV9ICYgbWVtb3J5IFxcCiAgICAgXGNsaW5lezItM30KLSAgICBw b2ludCAmIFx0ZXh0dHR7X0NvbXBsZXggbG9uZyBkb3VibGV9ICYgbWVtb3J5IFxcCisgICAgJiBc dGV4dHR0e19Db21wbGV4IGxvbmcgZG91YmxlfSAmIG1lbW9yeSBcXAogICAgIFxjbGluZXsyLTN9 CiAgICAgJiBcdGV4dHR0e19Db21wbGV4IF9fZmxvYXQ4MH0gJiBtZW1vcnkgXFwKICAgICBcY2xp bmV7Mi0zfQotLSAKMi4zMS4xCgo= --000000000000a087ec05c70206f7--