Message ID | 20230921143837.2903914-1-goldstein.w.n@gmail.com |
---|---|
State | New |
Headers | show |
Series | x86: Prepare `strrchr-evex` and `strrchr-evex512` for AVX10 | expand |
On Thu, Sep 21, 2023 at 9:38 AM Noah Goldstein <goldstein.w.n@gmail.com> wrote: > > This commit refactors `strrchr-evex` and `strrchr-evex512` to use a > common implementation: `strrchr-evex-base.S`. > > The motivation is `strrchr-evex` needed to be refactored to not use > 64-bit masked registers in preperation for AVX10. > > Once vec-width masked register combining was removed, the EVEX and > EVEX512 implementations can easily be implemented in the same file > without any major overhead. > > The net result is performance improvements (measured on TGL) for both > `strrchr-evex` and `strrchr-evex512`. Although, note there are some > regressions in the test suite and it may be many of the cases that > make the total-geomean of improvement/regression across bench-strrchr > are cold. The point of the performance measurement is to show there > are no major regressions, but the primary motivation is preperation > for AVX10. > > Benchmarks where taken on TGL: > https://www.intel.com/content/www/us/en/products/sku/213799/intel-core-i711850h-processor-24m-cache-up-to-4-80-ghz/specifications.html > > EVEX geometric_mean(N=5) of all benchmarks New / Original : 0.74 > EVEX512 geometric_mean(N=5) of all benchmarks New / Original: 0.87 Full summary of attached here. > > Full check passes on x86. > --- > sysdeps/x86_64/multiarch/strrchr-evex-base.S | 466 ++++++++++++------- > sysdeps/x86_64/multiarch/strrchr-evex.S | 392 +--------------- > sysdeps/x86_64/multiarch/wcsrchr-evex.S | 1 + > 3 files changed, 294 insertions(+), 565 deletions(-) > > diff --git a/sysdeps/x86_64/multiarch/strrchr-evex-base.S b/sysdeps/x86_64/multiarch/strrchr-evex-base.S > index 58b2853ab6..2c98f07fca 100644 > --- a/sysdeps/x86_64/multiarch/strrchr-evex-base.S > +++ b/sysdeps/x86_64/multiarch/strrchr-evex-base.S > @@ -25,240 +25,354 @@ > # include <sysdep.h> > > # ifdef USE_AS_WCSRCHR > +# if VEC_SIZE == 64 > +# define RCX_M cx > +# define kortestM kortestw > +# else > +# define RCX_M cl > +# define kortestM kortestb > +# endif > + > +# define SHIFT_REG VRCX > +# define VPCOMPRESS vpcompressd > # define CHAR_SIZE 4 > -# define VPBROADCAST vpbroadcastd > -# define VPCMPEQ vpcmpeqd > -# define VPMINU vpminud > +# define VPMIN vpminud > # define VPTESTN vptestnmd > +# define VPTEST vptestmd > +# define VPBROADCAST vpbroadcastd > +# define VPCMPEQ vpcmpeqd > +# define VPCMP vpcmpd > # else > +# define SHIFT_REG VRDI > +# define VPCOMPRESS vpcompressb > # define CHAR_SIZE 1 > -# define VPBROADCAST vpbroadcastb > -# define VPCMPEQ vpcmpeqb > -# define VPMINU vpminub > +# define VPMIN vpminub > # define VPTESTN vptestnmb > +# define VPTEST vptestmb > +# define VPBROADCAST vpbroadcastb > +# define VPCMPEQ vpcmpeqb > +# define VPCMP vpcmpb > + > +# define RCX_M VRCX > +# define kortestM KORTEST > # endif > > -# define PAGE_SIZE 4096 > +# define VMATCH VMM(0) > # define CHAR_PER_VEC (VEC_SIZE / CHAR_SIZE) > +# define PAGE_SIZE 4096 > > .section SECTION(.text), "ax", @progbits > -/* Aligning entry point to 64 byte, provides better performance for > - one vector length string. */ > -ENTRY_P2ALIGN (STRRCHR, 6) > - > - /* Broadcast CHAR to VMM(0). */ > - VPBROADCAST %esi, %VMM(0) > + /* Aligning entry point to 64 byte, provides better performance for > + one vector length string. */ > +ENTRY_P2ALIGN(STRRCHR, 6) > movl %edi, %eax > - sall $20, %eax > - cmpl $((PAGE_SIZE - VEC_SIZE) << 20), %eax > - ja L(page_cross) > + /* Broadcast CHAR to VMATCH. */ > + VPBROADCAST %esi, %VMATCH > > -L(page_cross_continue): > - /* Compare [w]char for null, mask bit will be set for match. */ > - VMOVU (%rdi), %VMM(1) > + andl $(PAGE_SIZE - 1), %eax > + cmpl $(PAGE_SIZE - VEC_SIZE), %eax > + jg L(cross_page_boundary) > > - VPTESTN %VMM(1), %VMM(1), %k1 > - KMOV %k1, %VRCX > - test %VRCX, %VRCX > - jz L(align_more) > - > - VPCMPEQ %VMM(1), %VMM(0), %k0 > - KMOV %k0, %VRAX > - BLSMSK %VRCX, %VRCX > - and %VRCX, %VRAX > - jz L(ret) > - > - BSR %VRAX, %VRAX > + VMOVU (%rdi), %VMM(1) > + /* k0 has a 1 for each zero CHAR in YMM1. */ > + VPTESTN %VMM(1), %VMM(1), %k0 > + KMOV %k0, %VGPR(rsi) > + test %VGPR(rsi), %VGPR(rsi) > + jz L(aligned_more) > + /* fallthrough: zero CHAR in first VEC. */ > +L(page_cross_return): > + /* K1 has a 1 for each search CHAR match in VEC(1). */ > + VPCMPEQ %VMATCH, %VMM(1), %k1 > + KMOV %k1, %VGPR(rax) > + /* Build mask up until first zero CHAR (used to mask of > + potential search CHAR matches past the end of the string). */ > + blsmsk %VGPR(rsi), %VGPR(rsi) > + and %VGPR(rsi), %VGPR(rax) > + jz L(ret0) > + /* Get last match (the `and` removed any out of bounds matches). */ > + bsr %VGPR(rax), %VGPR(rax) > # ifdef USE_AS_WCSRCHR > leaq (%rdi, %rax, CHAR_SIZE), %rax > # else > - add %rdi, %rax > + addq %rdi, %rax > # endif > -L(ret): > +L(ret0): > ret > > -L(vector_x2_end): > - VPCMPEQ %VMM(2), %VMM(0), %k2 > - KMOV %k2, %VRAX > - BLSMSK %VRCX, %VRCX > - and %VRCX, %VRAX > - jz L(vector_x1_ret) > - > - BSR %VRAX, %VRAX > - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax > - ret > - > - /* Check the first vector at very last to look for match. */ > -L(vector_x1_ret): > - VPCMPEQ %VMM(1), %VMM(0), %k2 > - KMOV %k2, %VRAX > - test %VRAX, %VRAX > - jz L(ret) > - > - BSR %VRAX, %VRAX > + /* Returns for first vec x1/x2/x3 have hard coded backward > + search path for earlier matches. */ > + .p2align 4,, 6 > +L(first_vec_x1): > + VPCMPEQ %VMATCH, %VMM(2), %k1 > + KMOV %k1, %VGPR(rax) > + blsmsk %VGPR(rcx), %VGPR(rcx) > + /* eax non-zero if search CHAR in range. */ > + and %VGPR(rcx), %VGPR(rax) > + jnz L(first_vec_x1_return) > + > + /* fallthrough: no match in YMM2 then need to check for earlier > + matches (in YMM1). */ > + .p2align 4,, 4 > +L(first_vec_x0_test): > + VPCMPEQ %VMATCH, %VMM(1), %k1 > + KMOV %k1, %VGPR(rax) > + test %VGPR(rax), %VGPR(rax) > + jz L(ret1) > + bsr %VGPR(rax), %VGPR(rax) > # ifdef USE_AS_WCSRCHR > leaq (%rsi, %rax, CHAR_SIZE), %rax > # else > - add %rsi, %rax > + > + addq %rsi, %rax > # endif > +L(ret1): > + ret > + > + .p2align 4,, 10 > +L(first_vec_x3): > + VPCMPEQ %VMATCH, %VMM(4), %k1 > + KMOV %k1, %VGPR(rax) > + blsmsk %VGPR(rcx), %VGPR(rcx) > + /* If no search CHAR match in range check YMM1/YMM2/YMM3. */ > + and %VGPR(rcx), %VGPR(rax) > + jz L(first_vec_x1_or_x2) > + bsr %VGPR(rax), %VGPR(rax) > + leaq (VEC_SIZE * 3)(%rdi, %rax, CHAR_SIZE), %rax > + ret > + .p2align 4,, 4 > + > +L(first_vec_x2): > + VPCMPEQ %VMATCH, %VMM(3), %k1 > + KMOV %k1, %VGPR(rax) > + blsmsk %VGPR(rcx), %VGPR(rcx) > + /* Check YMM3 for last match first. If no match try YMM2/YMM1. */ > + and %VGPR(rcx), %VGPR(rax) > + jz L(first_vec_x0_x1_test) > + bsr %VGPR(rax), %VGPR(rax) > + leaq (VEC_SIZE * 2)(%r8, %rax, CHAR_SIZE), %rax > ret > > -L(align_more): > - /* Zero r8 to store match result. */ > - xorl %r8d, %r8d > - /* Save pointer of first vector, in case if no match found. */ > + .p2align 4,, 6 > +L(first_vec_x0_x1_test): > + VPCMPEQ %VMATCH, %VMM(2), %k1 > + KMOV %k1, %VGPR(rax) > + /* Check YMM2 for last match first. If no match try YMM1. */ > + test %VGPR(rax), %VGPR(rax) > + jz L(first_vec_x0_test) > + .p2align 4,, 4 > +L(first_vec_x1_return): > + bsr %VGPR(rax), %VGPR(rax) > + leaq (VEC_SIZE)(%r8, %rax, CHAR_SIZE), %rax > + ret > + > + .p2align 4,, 12 > +L(aligned_more): > +L(page_cross_continue): > + /* Need to keep original pointer incase VEC(1) has last match. */ > movq %rdi, %rsi > - /* Align pointer to vector size. */ > andq $-VEC_SIZE, %rdi > - /* Loop unroll for 2 vector loop. */ > - VMOVA (VEC_SIZE)(%rdi), %VMM(2) > + > + VMOVU VEC_SIZE(%rdi), %VMM(2) > VPTESTN %VMM(2), %VMM(2), %k0 > KMOV %k0, %VRCX > + movq %rdi, %r8 > test %VRCX, %VRCX > - jnz L(vector_x2_end) > + jnz L(first_vec_x1) > + > + VMOVU (VEC_SIZE * 2)(%rdi), %VMM(3) > + VPTESTN %VMM(3), %VMM(3), %k0 > + KMOV %k0, %VRCX > + > + test %VRCX, %VRCX > + jnz L(first_vec_x2) > + > + VMOVU (VEC_SIZE * 3)(%rdi), %VMM(4) > + VPTESTN %VMM(4), %VMM(4), %k0 > + KMOV %k0, %VRCX > + > + /* Intentionally use 64-bit here. EVEX256 version needs 1-byte > + padding for efficient nop before loop alignment. */ > + test %rcx, %rcx > + jnz L(first_vec_x3) > > - /* Save pointer of second vector, in case if no match > - found. */ > - movq %rdi, %r9 > - /* Align address to VEC_SIZE * 2 for loop. */ > andq $-(VEC_SIZE * 2), %rdi > + .p2align 4 > +L(first_aligned_loop): > + /* Preserve VEC(1), VEC(2), VEC(3), and VEC(4) until we can > + gurantee they don't store a match. */ > + VMOVA (VEC_SIZE * 4)(%rdi), %VMM(5) > + VMOVA (VEC_SIZE * 5)(%rdi), %VMM(6) > > - .p2align 4,,11 > -L(loop): > - /* 2 vector loop, as it provide better performance as compared > - to 4 vector loop. */ > - VMOVA (VEC_SIZE * 2)(%rdi), %VMM(3) > - VMOVA (VEC_SIZE * 3)(%rdi), %VMM(4) > - VPCMPEQ %VMM(3), %VMM(0), %k1 > - VPCMPEQ %VMM(4), %VMM(0), %k2 > - VPMINU %VMM(3), %VMM(4), %VMM(5) > - VPTESTN %VMM(5), %VMM(5), %k0 > - KOR %k1, %k2, %k3 > - subq $-(VEC_SIZE * 2), %rdi > - /* If k0 and k3 zero, match and end of string not found. */ > - KORTEST %k0, %k3 > - jz L(loop) > - > - /* If k0 is non zero, end of string found. */ > - KORTEST %k0, %k0 > - jnz L(endloop) > - > - lea VEC_SIZE(%rdi), %r8 > - /* A match found, it need to be stored in r8 before loop > - continue. */ > - /* Check second vector first. */ > - KMOV %k2, %VRDX > - test %VRDX, %VRDX > - jnz L(loop_vec_x2_match) > + VPCMP $4, %VMM(5), %VMATCH, %k2 > + VPCMP $4, %VMM(6), %VMATCH, %k3{%k2} > + > + VPMIN %VMM(5), %VMM(6), %VMM(7) > + > + VPTEST %VMM(7), %VMM(7), %k1{%k3} > + subq $(VEC_SIZE * -2), %rdi > + kortestM %k1, %k1 > + jc L(first_aligned_loop) > > + VPTESTN %VMM(7), %VMM(7), %k1 > KMOV %k1, %VRDX > - /* Match is in first vector, rdi offset need to be subtracted > - by VEC_SIZE. */ > - sub $VEC_SIZE, %r8 > - > - /* If second vector doesn't have match, first vector must > - have match. */ > -L(loop_vec_x2_match): > - BSR %VRDX, %VRDX > -# ifdef USE_AS_WCSRCHR > - sal $2, %rdx > -# endif > - add %rdx, %r8 > - jmp L(loop) > + test %VRDX, %VRDX > + jz L(second_aligned_loop_prep) > > -L(endloop): > - /* Check if string end in first loop vector. */ > - VPTESTN %VMM(3), %VMM(3), %k0 > - KMOV %k0, %VRCX > - test %VRCX, %VRCX > - jnz L(loop_vector_x1_end) > + kortestM %k3, %k3 > + jnc L(return_first_aligned_loop) > > - /* Check if it has match in first loop vector. */ > - KMOV %k1, %VRAX > + .p2align 4,, 6 > +L(first_vec_x1_or_x2_or_x3): > + VPCMPEQ %VMM(4), %VMATCH, %k4 > + KMOV %k4, %VRAX > test %VRAX, %VRAX > - jz L(loop_vector_x2_end) > + jz L(first_vec_x1_or_x2) > + bsr %VRAX, %VRAX > + leaq (VEC_SIZE * 3)(%r8, %rax, CHAR_SIZE), %rax > + ret > > - BSR %VRAX, %VRAX > - leaq (%rdi, %rax, CHAR_SIZE), %r8 > > - /* String must end in second loop vector. */ > -L(loop_vector_x2_end): > - VPTESTN %VMM(4), %VMM(4), %k0 > + .p2align 4,, 8 > +L(return_first_aligned_loop): > + VPTESTN %VMM(5), %VMM(5), %k0 > KMOV %k0, %VRCX > + blsmsk %VRCX, %VRCX > + jnc L(return_first_new_match_first) > + blsmsk %VRDX, %VRDX > + VPCMPEQ %VMM(6), %VMATCH, %k0 > + KMOV %k0, %VRAX > + addq $VEC_SIZE, %rdi > + and %VRDX, %VRAX > + jnz L(return_first_new_match_ret) > + subq $VEC_SIZE, %rdi > +L(return_first_new_match_first): > KMOV %k2, %VRAX > - BLSMSK %VRCX, %VRCX > - /* Check if it has match in second loop vector. */ > +# ifdef USE_AS_WCSRCHR > + xorl $((1 << CHAR_PER_VEC)- 1), %VRAX > and %VRCX, %VRAX > - jz L(check_last_match) > +# else > + andn %VRCX, %VRAX, %VRAX > +# endif > + jz L(first_vec_x1_or_x2_or_x3) > +L(return_first_new_match_ret): > + bsr %VRAX, %VRAX > + leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > + ret > > - BSR %VRAX, %VRAX > - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax > + .p2align 4,, 10 > +L(first_vec_x1_or_x2): > + VPCMPEQ %VMM(3), %VMATCH, %k3 > + KMOV %k3, %VRAX > + test %VRAX, %VRAX > + jz L(first_vec_x0_x1_test) > + bsr %VRAX, %VRAX > + leaq (VEC_SIZE * 2)(%r8, %rax, CHAR_SIZE), %rax > ret > > - /* String end in first loop vector. */ > -L(loop_vector_x1_end): > - KMOV %k1, %VRAX > - BLSMSK %VRCX, %VRCX > - /* Check if it has match in second loop vector. */ > - and %VRCX, %VRAX > - jz L(check_last_match) > > - BSR %VRAX, %VRAX > - leaq (%rdi, %rax, CHAR_SIZE), %rax > - ret > + .p2align 4 > + /* We can throw away the work done for the first 4x checks here > + as we have a later match. This is the 'fast' path persay. */ > +L(second_aligned_loop_prep): > +L(second_aligned_loop_set_furthest_match): > + movq %rdi, %rsi > + VMOVA %VMM(5), %VMM(7) > + VMOVA %VMM(6), %VMM(8) > + .p2align 4 > +L(second_aligned_loop): > + VMOVU (VEC_SIZE * 4)(%rdi), %VMM(5) > + VMOVU (VEC_SIZE * 5)(%rdi), %VMM(6) > + VPCMP $4, %VMM(5), %VMATCH, %k2 > + VPCMP $4, %VMM(6), %VMATCH, %k3{%k2} > + > + VPMIN %VMM(5), %VMM(6), %VMM(4) > + > + VPTEST %VMM(4), %VMM(4), %k1{%k3} > + subq $(VEC_SIZE * -2), %rdi > + KMOV %k1, %VRCX > + inc %RCX_M > + jz L(second_aligned_loop) > + VPTESTN %VMM(4), %VMM(4), %k1 > + KMOV %k1, %VRDX > + test %VRDX, %VRDX > + jz L(second_aligned_loop_set_furthest_match) > > - /* No match in first and second loop vector. */ > -L(check_last_match): > - /* Check if any match recorded in r8. */ > - test %r8, %r8 > - jz L(vector_x2_ret) > - movq %r8, %rax > + kortestM %k3, %k3 > + jnc L(return_new_match) > + /* branch here because there is a significant advantage interms > + of output dependency chance in using edx. */ > + > + > +L(return_old_match): > + VPCMPEQ %VMM(8), %VMATCH, %k0 > + KMOV %k0, %VRCX > + bsr %VRCX, %VRCX > + jnz L(return_old_match_ret) > + > + VPCMPEQ %VMM(7), %VMATCH, %k0 > + KMOV %k0, %VRCX > + bsr %VRCX, %VRCX > + subq $VEC_SIZE, %rsi > +L(return_old_match_ret): > + leaq (VEC_SIZE * 3)(%rsi, %rcx, CHAR_SIZE), %rax > ret > > - /* No match recorded in r8. Check the second saved vector > - in beginning. */ > -L(vector_x2_ret): > - VPCMPEQ %VMM(2), %VMM(0), %k2 > - KMOV %k2, %VRAX > - test %VRAX, %VRAX > - jz L(vector_x1_ret) > > - /* Match found in the second saved vector. */ > - BSR %VRAX, %VRAX > - leaq (VEC_SIZE)(%r9, %rax, CHAR_SIZE), %rax > +L(return_new_match): > + VPTESTN %VMM(5), %VMM(5), %k0 > + KMOV %k0, %VRCX > + blsmsk %VRCX, %VRCX > + jnc L(return_new_match_first) > + dec %VRDX > + VPCMPEQ %VMM(6), %VMATCH, %k0 > + KMOV %k0, %VRAX > + addq $VEC_SIZE, %rdi > + and %VRDX, %VRAX > + jnz L(return_new_match_ret) > + subq $VEC_SIZE, %rdi > +L(return_new_match_first): > + KMOV %k2, %VRAX > +# ifdef USE_AS_WCSRCHR > + xorl $((1 << CHAR_PER_VEC)- 1), %VRAX > + and %VRCX, %VRAX > +# else > + andn %VRCX, %VRAX, %VRAX > +# endif > + jz L(return_old_match) > +L(return_new_match_ret): > + bsr %VRAX, %VRAX > + leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > ret > > -L(page_cross): > - mov %rdi, %rax > - movl %edi, %ecx > + .p2align 4,, 4 > +L(cross_page_boundary): > + xorq %rdi, %rax > + mov $-1, %VRDX > + VMOVU (PAGE_SIZE - VEC_SIZE)(%rax), %VMM(6) > + VPTESTN %VMM(6), %VMM(6), %k0 > + KMOV %k0, %VRSI > > # ifdef USE_AS_WCSRCHR > - /* Calculate number of compare result bits to be skipped for > - wide string alignment adjustment. */ > - andl $(VEC_SIZE - 1), %ecx > - sarl $2, %ecx > + movl %edi, %ecx > + and $(VEC_SIZE - 1), %ecx > + shrl $2, %ecx > # endif > - /* ecx contains number of w[char] to be skipped as a result > - of address alignment. */ > - andq $-VEC_SIZE, %rax > - VMOVA (%rax), %VMM(1) > - VPTESTN %VMM(1), %VMM(1), %k1 > - KMOV %k1, %VRAX > - SHR %cl, %VRAX > - jz L(page_cross_continue) > - VPCMPEQ %VMM(1), %VMM(0), %k0 > - KMOV %k0, %VRDX > - SHR %cl, %VRDX > - BLSMSK %VRAX, %VRAX > - and %VRDX, %VRAX > - jz L(ret) > - BSR %VRAX, %VRAX > + shlx %SHIFT_REG, %VRDX, %VRDX > + > # ifdef USE_AS_WCSRCHR > - leaq (%rdi, %rax, CHAR_SIZE), %rax > + kmovw %edx, %k1 > # else > - add %rdi, %rax > + KMOV %VRDX, %k1 > # endif > > - ret > -END (STRRCHR) > + VPCOMPRESS %VMM(6), %VMM(1){%k1}{z} > + /* We could technically just jmp back after the vpcompress but > + it doesn't save any 16-byte blocks. */ > + > + shrx %SHIFT_REG, %VRSI, %VRSI > + test %VRSI, %VRSI > + jnz L(page_cross_return) > + jmp L(page_cross_continue) > + /* 1-byte from cache line. */ > +END(STRRCHR) > #endif > diff --git a/sysdeps/x86_64/multiarch/strrchr-evex.S b/sysdeps/x86_64/multiarch/strrchr-evex.S > index 85e3b0119f..b606e6f69c 100644 > --- a/sysdeps/x86_64/multiarch/strrchr-evex.S > +++ b/sysdeps/x86_64/multiarch/strrchr-evex.S > @@ -1,394 +1,8 @@ > -/* strrchr/wcsrchr optimized with 256-bit EVEX instructions. > - Copyright (C) 2021-2023 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library; if not, see > - <https://www.gnu.org/licenses/>. */ > - > -#include <isa-level.h> > - > -#if ISA_SHOULD_BUILD (4) > - > -# include <sysdep.h> > - > # ifndef STRRCHR > # define STRRCHR __strrchr_evex > # endif > > -# include "x86-evex256-vecs.h" > - > -# ifdef USE_AS_WCSRCHR > -# define SHIFT_REG rsi > -# define kunpck_2x kunpckbw > -# define kmov_2x kmovd > -# define maskz_2x ecx > -# define maskm_2x eax > -# define CHAR_SIZE 4 > -# define VPMIN vpminud > -# define VPTESTN vptestnmd > -# define VPTEST vptestmd > -# define VPBROADCAST vpbroadcastd > -# define VPCMPEQ vpcmpeqd > -# define VPCMP vpcmpd > - > -# define USE_WIDE_CHAR > -# else > -# define SHIFT_REG rdi > -# define kunpck_2x kunpckdq > -# define kmov_2x kmovq > -# define maskz_2x rcx > -# define maskm_2x rax > - > -# define CHAR_SIZE 1 > -# define VPMIN vpminub > -# define VPTESTN vptestnmb > -# define VPTEST vptestmb > -# define VPBROADCAST vpbroadcastb > -# define VPCMPEQ vpcmpeqb > -# define VPCMP vpcmpb > -# endif > - > -# include "reg-macros.h" > - > -# define VMATCH VMM(0) > -# define CHAR_PER_VEC (VEC_SIZE / CHAR_SIZE) > -# define PAGE_SIZE 4096 > - > - .section SECTION(.text), "ax", @progbits > -ENTRY_P2ALIGN(STRRCHR, 6) > - movl %edi, %eax > - /* Broadcast CHAR to VMATCH. */ > - VPBROADCAST %esi, %VMATCH > - > - andl $(PAGE_SIZE - 1), %eax > - cmpl $(PAGE_SIZE - VEC_SIZE), %eax > - jg L(cross_page_boundary) > -L(page_cross_continue): > - VMOVU (%rdi), %VMM(1) > - /* k0 has a 1 for each zero CHAR in VEC(1). */ > - VPTESTN %VMM(1), %VMM(1), %k0 > - KMOV %k0, %VRSI > - test %VRSI, %VRSI > - jz L(aligned_more) > - /* fallthrough: zero CHAR in first VEC. */ > - /* K1 has a 1 for each search CHAR match in VEC(1). */ > - VPCMPEQ %VMATCH, %VMM(1), %k1 > - KMOV %k1, %VRAX > - /* Build mask up until first zero CHAR (used to mask of > - potential search CHAR matches past the end of the string). > - */ > - blsmsk %VRSI, %VRSI > - and %VRSI, %VRAX > - jz L(ret0) > - /* Get last match (the `and` removed any out of bounds matches). > - */ > - bsr %VRAX, %VRAX > -# ifdef USE_AS_WCSRCHR > - leaq (%rdi, %rax, CHAR_SIZE), %rax > -# else > - addq %rdi, %rax > -# endif > -L(ret0): > - ret > - > - /* Returns for first vec x1/x2/x3 have hard coded backward > - search path for earlier matches. */ > - .p2align 4,, 6 > -L(first_vec_x1): > - VPCMPEQ %VMATCH, %VMM(2), %k1 > - KMOV %k1, %VRAX > - blsmsk %VRCX, %VRCX > - /* eax non-zero if search CHAR in range. */ > - and %VRCX, %VRAX > - jnz L(first_vec_x1_return) > - > - /* fallthrough: no match in VEC(2) then need to check for > - earlier matches (in VEC(1)). */ > - .p2align 4,, 4 > -L(first_vec_x0_test): > - VPCMPEQ %VMATCH, %VMM(1), %k1 > - KMOV %k1, %VRAX > - test %VRAX, %VRAX > - jz L(ret1) > - bsr %VRAX, %VRAX > -# ifdef USE_AS_WCSRCHR > - leaq (%rsi, %rax, CHAR_SIZE), %rax > -# else > - addq %rsi, %rax > -# endif > -L(ret1): > - ret > - > - .p2align 4,, 10 > -L(first_vec_x1_or_x2): > - VPCMPEQ %VMM(3), %VMATCH, %k3 > - VPCMPEQ %VMM(2), %VMATCH, %k2 > - /* K2 and K3 have 1 for any search CHAR match. Test if any > - matches between either of them. Otherwise check VEC(1). */ > - KORTEST %k2, %k3 > - jz L(first_vec_x0_test) > - > - /* Guaranteed that VEC(2) and VEC(3) are within range so merge > - the two bitmasks then get last result. */ > - kunpck_2x %k2, %k3, %k3 > - kmov_2x %k3, %maskm_2x > - bsr %maskm_2x, %maskm_2x > - leaq (VEC_SIZE * 1)(%r8, %rax, CHAR_SIZE), %rax > - ret > - > - .p2align 4,, 7 > -L(first_vec_x3): > - VPCMPEQ %VMATCH, %VMM(4), %k1 > - KMOV %k1, %VRAX > - blsmsk %VRCX, %VRCX > - /* If no search CHAR match in range check VEC(1)/VEC(2)/VEC(3). > - */ > - and %VRCX, %VRAX > - jz L(first_vec_x1_or_x2) > - bsr %VRAX, %VRAX > - leaq (VEC_SIZE * 3)(%rdi, %rax, CHAR_SIZE), %rax > - ret > - > - > - .p2align 4,, 6 > -L(first_vec_x0_x1_test): > - VPCMPEQ %VMATCH, %VMM(2), %k1 > - KMOV %k1, %VRAX > - /* Check VEC(2) for last match first. If no match try VEC(1). > - */ > - test %VRAX, %VRAX > - jz L(first_vec_x0_test) > - .p2align 4,, 4 > -L(first_vec_x1_return): > - bsr %VRAX, %VRAX > - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax > - ret > - > - > - .p2align 4,, 10 > -L(first_vec_x2): > - VPCMPEQ %VMATCH, %VMM(3), %k1 > - KMOV %k1, %VRAX > - blsmsk %VRCX, %VRCX > - /* Check VEC(3) for last match first. If no match try > - VEC(2)/VEC(1). */ > - and %VRCX, %VRAX > - jz L(first_vec_x0_x1_test) > - bsr %VRAX, %VRAX > - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > - ret > - > - > - .p2align 4,, 12 > -L(aligned_more): > - /* Need to keep original pointer in case VEC(1) has last match. > - */ > - movq %rdi, %rsi > - andq $-VEC_SIZE, %rdi > - > - VMOVU VEC_SIZE(%rdi), %VMM(2) > - VPTESTN %VMM(2), %VMM(2), %k0 > - KMOV %k0, %VRCX > - > - test %VRCX, %VRCX > - jnz L(first_vec_x1) > - > - VMOVU (VEC_SIZE * 2)(%rdi), %VMM(3) > - VPTESTN %VMM(3), %VMM(3), %k0 > - KMOV %k0, %VRCX > - > - test %VRCX, %VRCX > - jnz L(first_vec_x2) > - > - VMOVU (VEC_SIZE * 3)(%rdi), %VMM(4) > - VPTESTN %VMM(4), %VMM(4), %k0 > - KMOV %k0, %VRCX > - movq %rdi, %r8 > - test %VRCX, %VRCX > - jnz L(first_vec_x3) > - > - andq $-(VEC_SIZE * 2), %rdi > - .p2align 4,, 10 > -L(first_aligned_loop): > - /* Preserve VEC(1), VEC(2), VEC(3), and VEC(4) until we can > - guarantee they don't store a match. */ > - VMOVA (VEC_SIZE * 4)(%rdi), %VMM(5) > - VMOVA (VEC_SIZE * 5)(%rdi), %VMM(6) > - > - VPCMPEQ %VMM(5), %VMATCH, %k2 > - vpxord %VMM(6), %VMATCH, %VMM(7) > - > - VPMIN %VMM(5), %VMM(6), %VMM(8) > - VPMIN %VMM(8), %VMM(7), %VMM(7) > - > - VPTESTN %VMM(7), %VMM(7), %k1 > - subq $(VEC_SIZE * -2), %rdi > - KORTEST %k1, %k2 > - jz L(first_aligned_loop) > - > - VPCMPEQ %VMM(6), %VMATCH, %k3 > - VPTESTN %VMM(8), %VMM(8), %k1 > - > - /* If k1 is zero, then we found a CHAR match but no null-term. > - We can now safely throw out VEC1-4. */ > - KTEST %k1, %k1 > - jz L(second_aligned_loop_prep) > - > - KORTEST %k2, %k3 > - jnz L(return_first_aligned_loop) > - > - > - .p2align 4,, 6 > -L(first_vec_x1_or_x2_or_x3): > - VPCMPEQ %VMM(4), %VMATCH, %k4 > - KMOV %k4, %VRAX > - bsr %VRAX, %VRAX > - jz L(first_vec_x1_or_x2) > - leaq (VEC_SIZE * 3)(%r8, %rax, CHAR_SIZE), %rax > - ret > - > - > - .p2align 4,, 8 > -L(return_first_aligned_loop): > - VPTESTN %VMM(5), %VMM(5), %k0 > - > - /* Combined results from VEC5/6. */ > - kunpck_2x %k0, %k1, %k0 > - kmov_2x %k0, %maskz_2x > - > - blsmsk %maskz_2x, %maskz_2x > - kunpck_2x %k2, %k3, %k3 > - kmov_2x %k3, %maskm_2x > - and %maskz_2x, %maskm_2x > - jz L(first_vec_x1_or_x2_or_x3) > - > - bsr %maskm_2x, %maskm_2x > - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > - ret > - > - .p2align 4 > - /* We can throw away the work done for the first 4x checks here > - as we have a later match. This is the 'fast' path persay. > - */ > -L(second_aligned_loop_prep): > -L(second_aligned_loop_set_furthest_match): > - movq %rdi, %rsi > - /* Ideally we would safe k2/k3 but `kmov/kunpck` take uops on > - port0 and have noticeable overhead in the loop. */ > - VMOVA %VMM(5), %VMM(7) > - VMOVA %VMM(6), %VMM(8) > - .p2align 4 > -L(second_aligned_loop): > - VMOVU (VEC_SIZE * 4)(%rdi), %VMM(5) > - VMOVU (VEC_SIZE * 5)(%rdi), %VMM(6) > - VPCMPEQ %VMM(5), %VMATCH, %k2 > - vpxord %VMM(6), %VMATCH, %VMM(3) > - > - VPMIN %VMM(5), %VMM(6), %VMM(4) > - VPMIN %VMM(3), %VMM(4), %VMM(3) > - > - VPTESTN %VMM(3), %VMM(3), %k1 > - subq $(VEC_SIZE * -2), %rdi > - KORTEST %k1, %k2 > - jz L(second_aligned_loop) > - VPCMPEQ %VMM(6), %VMATCH, %k3 > - VPTESTN %VMM(4), %VMM(4), %k1 > - KTEST %k1, %k1 > - jz L(second_aligned_loop_set_furthest_match) > - > - /* branch here because we know we have a match in VEC7/8 but > - might not in VEC5/6 so the latter is expected to be less > - likely. */ > - KORTEST %k2, %k3 > - jnz L(return_new_match) > - > -L(return_old_match): > - VPCMPEQ %VMM(8), %VMATCH, %k0 > - KMOV %k0, %VRCX > - bsr %VRCX, %VRCX > - jnz L(return_old_match_ret) > - > - VPCMPEQ %VMM(7), %VMATCH, %k0 > - KMOV %k0, %VRCX > - bsr %VRCX, %VRCX > - subq $VEC_SIZE, %rsi > -L(return_old_match_ret): > - leaq (VEC_SIZE * 3)(%rsi, %rcx, CHAR_SIZE), %rax > - ret > - > - .p2align 4,, 10 > -L(return_new_match): > - VPTESTN %VMM(5), %VMM(5), %k0 > - > - /* Combined results from VEC5/6. */ > - kunpck_2x %k0, %k1, %k0 > - kmov_2x %k0, %maskz_2x > - > - blsmsk %maskz_2x, %maskz_2x > - kunpck_2x %k2, %k3, %k3 > - kmov_2x %k3, %maskm_2x > - > - /* Match at end was out-of-bounds so use last known match. */ > - and %maskz_2x, %maskm_2x > - jz L(return_old_match) > - > - bsr %maskm_2x, %maskm_2x > - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > - ret > - > -L(cross_page_boundary): > - /* eax contains all the page offset bits of src (rdi). `xor rdi, > - rax` sets pointer will all page offset bits cleared so > - offset of (PAGE_SIZE - VEC_SIZE) will get last aligned VEC > - before page cross (guaranteed to be safe to read). Doing this > - as opposed to `movq %rdi, %rax; andq $-VEC_SIZE, %rax` saves > - a bit of code size. */ > - xorq %rdi, %rax > - VMOVU (PAGE_SIZE - VEC_SIZE)(%rax), %VMM(1) > - VPTESTN %VMM(1), %VMM(1), %k0 > - KMOV %k0, %VRCX > - > - /* Shift out zero CHAR matches that are before the beginning of > - src (rdi). */ > -# ifdef USE_AS_WCSRCHR > - movl %edi, %esi > - andl $(VEC_SIZE - 1), %esi > - shrl $2, %esi > -# endif > - shrx %VGPR(SHIFT_REG), %VRCX, %VRCX > - > - test %VRCX, %VRCX > - jz L(page_cross_continue) > +#include "x86-evex512-vecs.h" > +#include "reg-macros.h" > > - /* Found zero CHAR so need to test for search CHAR. */ > - VPCMP $0, %VMATCH, %VMM(1), %k1 > - KMOV %k1, %VRAX > - /* Shift out search CHAR matches that are before the beginning of > - src (rdi). */ > - shrx %VGPR(SHIFT_REG), %VRAX, %VRAX > - > - /* Check if any search CHAR match in range. */ > - blsmsk %VRCX, %VRCX > - and %VRCX, %VRAX > - jz L(ret3) > - bsr %VRAX, %VRAX > -# ifdef USE_AS_WCSRCHR > - leaq (%rdi, %rax, CHAR_SIZE), %rax > -# else > - addq %rdi, %rax > -# endif > -L(ret3): > - ret > -END(STRRCHR) > -#endif > +#include "strrchr-evex-base.S" > diff --git a/sysdeps/x86_64/multiarch/wcsrchr-evex.S b/sysdeps/x86_64/multiarch/wcsrchr-evex.S > index e5c5fe3bf2..a584cd3f43 100644 > --- a/sysdeps/x86_64/multiarch/wcsrchr-evex.S > +++ b/sysdeps/x86_64/multiarch/wcsrchr-evex.S > @@ -4,4 +4,5 @@ > > #define STRRCHR WCSRCHR > #define USE_AS_WCSRCHR 1 > +#define USE_WIDE_CHAR 1 > #include "strrchr-evex.S" > -- > 2.34.1 > Results For: strrchr align,freq ,len ,max_char ,pos ,seek ,strrchr-dev ,strrchr-glibc ,strrchr-dev/strrchr-glibc 0 ,1 ,1 ,127 ,0 ,0 ,2.953 ,3.078 ,0.959 0 ,1 ,1 ,127 ,0 ,23 ,3.178 ,3.188 ,0.997 0 ,1 ,10 ,127 ,9 ,0 ,3.081 ,3.463 ,0.89 0 ,1 ,10 ,127 ,9 ,23 ,3.145 ,3.437 ,0.915 0 ,1 ,1024 ,127 ,0 ,0 ,3.123 ,3.626 ,0.861 0 ,1 ,1024 ,127 ,0 ,23 ,19.23 ,21.471 ,0.896 0 ,1 ,1024 ,127 ,1024 ,0 ,17.362 ,20.028 ,0.867 0 ,1 ,1024 ,127 ,1024 ,23 ,18.9 ,21.757 ,0.869 0 ,1 ,1024 ,127 ,144 ,0 ,4.986 ,6.808 ,0.732 0 ,1 ,1024 ,127 ,144 ,23 ,17.706 ,21.908 ,0.808 0 ,1 ,1024 ,127 ,192 ,0 ,5.393 ,7.996 ,0.674 0 ,1 ,1024 ,127 ,192 ,23 ,17.277 ,21.515 ,0.803 0 ,1 ,1024 ,127 ,240 ,0 ,5.226 ,8.055 ,0.649 0 ,1 ,1024 ,127 ,240 ,23 ,17.189 ,22.304 ,0.771 0 ,1 ,1024 ,127 ,288 ,0 ,7.933 ,8.578 ,0.925 0 ,1 ,1024 ,127 ,288 ,23 ,18.501 ,24.366 ,0.759 0 ,1 ,1024 ,127 ,48 ,0 ,3.053 ,4.341 ,0.703 0 ,1 ,1024 ,127 ,48 ,23 ,19.11 ,21.532 ,0.888 0 ,1 ,1024 ,127 ,736 ,0 ,12.208 ,15.197 ,0.803 0 ,1 ,1024 ,127 ,736 ,23 ,18.065 ,23.566 ,0.767 0 ,1 ,1024 ,127 ,784 ,0 ,13.641 ,16.227 ,0.841 0 ,1 ,1024 ,127 ,784 ,23 ,18.869 ,24.555 ,0.768 0 ,1 ,1024 ,127 ,832 ,0 ,14.175 ,16.458 ,0.861 0 ,1 ,1024 ,127 ,832 ,23 ,18.311 ,22.605 ,0.81 0 ,1 ,1024 ,127 ,880 ,0 ,13.896 ,16.366 ,0.849 0 ,1 ,1024 ,127 ,880 ,23 ,19.03 ,25.616 ,0.743 0 ,1 ,1024 ,127 ,928 ,0 ,15.214 ,18.45 ,0.825 0 ,1 ,1024 ,127 ,928 ,23 ,19.255 ,23.225 ,0.829 0 ,1 ,1024 ,127 ,96 ,0 ,4.884 ,4.969 ,0.983 0 ,1 ,1024 ,127 ,96 ,23 ,18.357 ,22.832 ,0.804 0 ,1 ,1024 ,127 ,976 ,0 ,15.796 ,18.741 ,0.843 0 ,1 ,1024 ,127 ,976 ,23 ,18.915 ,24.523 ,0.771 0 ,1 ,1072 ,127 ,1024 ,0 ,17.09 ,19.652 ,0.87 0 ,1 ,1072 ,127 ,1024 ,23 ,18.211 ,23.276 ,0.782 0 ,1 ,11 ,127 ,10 ,0 ,3.136 ,3.301 ,0.95 0 ,1 ,11 ,127 ,10 ,23 ,3.16 ,3.516 ,0.899 0 ,1 ,112 ,127 ,144 ,0 ,4.981 ,4.323 ,1.152 0 ,1 ,112 ,127 ,144 ,23 ,5.125 ,5.25 ,0.976 0 ,1 ,112 ,127 ,16 ,0 ,3.098 ,3.151 ,0.983 0 ,1 ,112 ,127 ,16 ,23 ,4.441 ,5.117 ,0.868 0 ,1 ,112 ,127 ,256 ,0 ,4.933 ,4.223 ,1.168 0 ,1 ,112 ,127 ,256 ,23 ,5.031 ,5.075 ,0.991 0 ,1 ,112 ,127 ,64 ,0 ,4.957 ,4.164 ,1.191 0 ,1 ,112 ,127 ,64 ,23 ,5.006 ,4.21 ,1.189 0 ,1 ,112 ,127 ,96 ,0 ,4.933 ,4.019 ,1.227 0 ,1 ,112 ,127 ,96 ,23 ,5.031 ,5.669 ,0.887 0 ,1 ,1120 ,127 ,1024 ,0 ,17.092 ,20.59 ,0.83 0 ,1 ,1120 ,127 ,1024 ,23 ,18.837 ,22.851 ,0.824 0 ,1 ,1168 ,127 ,1024 ,0 ,17.058 ,22.111 ,0.771 0 ,1 ,1168 ,127 ,1024 ,23 ,22.504 ,29.475 ,0.763 0 ,1 ,12 ,127 ,11 ,0 ,3.009 ,3.155 ,0.954 0 ,1 ,12 ,127 ,11 ,23 ,3.19 ,3.153 ,1.012 0 ,1 ,1216 ,127 ,1024 ,0 ,17.007 ,20.269 ,0.839 0 ,1 ,1216 ,127 ,1024 ,23 ,20.889 ,26.587 ,0.786 0 ,1 ,1264 ,127 ,1024 ,0 ,16.923 ,20.842 ,0.812 0 ,1 ,1264 ,127 ,1024 ,23 ,21.588 ,26.289 ,0.821 0 ,1 ,128 ,127 ,0 ,0 ,3.099 ,3.174 ,0.976 0 ,1 ,128 ,127 ,0 ,23 ,5.803 ,8.722 ,0.665 0 ,1 ,128 ,127 ,112 ,0 ,4.933 ,3.916 ,1.26 0 ,1 ,128 ,127 ,112 ,23 ,5.254 ,8.698 ,0.604 0 ,1 ,128 ,127 ,128 ,0 ,5.091 ,6.146 ,0.828 0 ,1 ,128 ,127 ,128 ,23 ,6.28 ,8.127 ,0.773 0 ,1 ,128 ,127 ,144 ,0 ,5.207 ,6.103 ,0.853 0 ,1 ,128 ,127 ,144 ,23 ,6.443 ,8.413 ,0.766 0 ,1 ,128 ,127 ,192 ,0 ,5.085 ,6.159 ,0.826 0 ,1 ,128 ,127 ,192 ,23 ,6.341 ,9.672 ,0.656 0 ,1 ,128 ,127 ,240 ,0 ,5.088 ,6.309 ,0.806 0 ,1 ,128 ,127 ,240 ,23 ,6.289 ,8.934 ,0.704 0 ,1 ,128 ,127 ,288 ,0 ,5.289 ,6.064 ,0.872 0 ,1 ,128 ,127 ,288 ,23 ,6.258 ,9.495 ,0.659 0 ,1 ,128 ,127 ,32 ,0 ,3.094 ,3.209 ,0.964 0 ,1 ,128 ,127 ,32 ,23 ,6.02 ,8.555 ,0.704 0 ,1 ,128 ,127 ,48 ,0 ,3.099 ,3.3 ,0.939 0 ,1 ,128 ,127 ,48 ,23 ,5.846 ,8.252 ,0.708 0 ,1 ,128 ,127 ,80 ,0 ,4.958 ,4.269 ,1.161 0 ,1 ,128 ,127 ,80 ,23 ,5.379 ,7.371 ,0.73 0 ,1 ,128 ,127 ,96 ,0 ,4.956 ,4.144 ,1.196 0 ,1 ,128 ,127 ,96 ,23 ,5.423 ,7.668 ,0.707 0 ,1 ,13 ,127 ,12 ,0 ,3.053 ,3.478 ,0.878 0 ,1 ,13 ,127 ,12 ,23 ,3.169 ,3.306 ,0.959 0 ,1 ,1312 ,127 ,1024 ,0 ,16.929 ,22.15 ,0.764 0 ,1 ,1312 ,127 ,1024 ,23 ,23.496 ,28.888 ,0.813 0 ,1 ,14 ,127 ,13 ,0 ,3.087 ,3.311 ,0.932 0 ,1 ,14 ,127 ,13 ,23 ,3.145 ,3.27 ,0.962 0 ,1 ,144 ,127 ,128 ,0 ,5.095 ,6.041 ,0.843 0 ,1 ,144 ,127 ,128 ,23 ,5.325 ,6.875 ,0.775 0 ,1 ,15 ,127 ,14 ,0 ,3.136 ,3.056 ,1.026 0 ,1 ,15 ,127 ,14 ,23 ,3.145 ,3.309 ,0.95 0 ,1 ,16 ,127 ,0 ,0 ,3.116 ,3.867 ,0.806 0 ,1 ,16 ,127 ,0 ,23 ,3.149 ,3.453 ,0.912 0 ,1 ,16 ,127 ,144 ,0 ,3.083 ,3.039 ,1.015 0 ,1 ,16 ,127 ,144 ,23 ,3.852 ,3.699 ,1.041 0 ,1 ,16 ,127 ,15 ,0 ,3.048 ,3.481 ,0.875 0 ,1 ,16 ,127 ,15 ,23 ,3.204 ,3.403 ,0.942 0 ,1 ,16 ,127 ,16 ,0 ,3.13 ,3.178 ,0.985 0 ,1 ,16 ,127 ,16 ,23 ,3.768 ,3.776 ,0.998 0 ,1 ,16 ,127 ,192 ,0 ,3.099 ,3.305 ,0.938 0 ,1 ,16 ,127 ,192 ,23 ,3.755 ,3.683 ,1.02 0 ,1 ,16 ,127 ,240 ,0 ,3.122 ,3.284 ,0.951 0 ,1 ,16 ,127 ,240 ,23 ,3.764 ,3.709 ,1.015 0 ,1 ,16 ,127 ,256 ,0 ,3.166 ,3.44 ,0.921 0 ,1 ,16 ,127 ,256 ,23 ,3.792 ,3.847 ,0.986 0 ,1 ,16 ,127 ,288 ,0 ,3.114 ,3.166 ,0.983 0 ,1 ,16 ,127 ,288 ,23 ,4.129 ,3.874 ,1.066 0 ,1 ,16 ,127 ,48 ,0 ,3.11 ,3.159 ,0.985 0 ,1 ,16 ,127 ,48 ,23 ,3.774 ,3.804 ,0.992 0 ,1 ,16 ,127 ,64 ,0 ,3.098 ,3.101 ,0.999 0 ,1 ,16 ,127 ,64 ,23 ,3.773 ,3.994 ,0.945 0 ,1 ,16 ,127 ,96 ,0 ,3.13 ,3.151 ,0.993 0 ,1 ,16 ,127 ,96 ,23 ,3.794 ,3.755 ,1.01 0 ,1 ,160 ,127 ,144 ,0 ,5.076 ,6.069 ,0.836 0 ,1 ,160 ,127 ,144 ,23 ,5.318 ,6.691 ,0.795 0 ,1 ,160 ,127 ,16 ,0 ,3.084 ,3.166 ,0.974 0 ,1 ,160 ,127 ,16 ,23 ,5.866 ,8.417 ,0.697 0 ,1 ,160 ,127 ,256 ,0 ,5.387 ,5.984 ,0.9 0 ,1 ,160 ,127 ,256 ,23 ,6.289 ,8.095 ,0.777 0 ,1 ,160 ,127 ,64 ,0 ,5.007 ,4.453 ,1.124 0 ,1 ,160 ,127 ,64 ,23 ,5.595 ,7.571 ,0.739 0 ,1 ,160 ,127 ,96 ,0 ,4.981 ,4.675 ,1.065 0 ,1 ,160 ,127 ,96 ,23 ,5.388 ,7.77 ,0.693 0 ,1 ,17 ,127 ,16 ,0 ,3.024 ,3.367 ,0.898 0 ,1 ,17 ,127 ,16 ,23 ,3.153 ,3.303 ,0.954 0 ,1 ,176 ,127 ,128 ,0 ,5.107 ,6.03 ,0.847 0 ,1 ,176 ,127 ,128 ,23 ,5.166 ,6.57 ,0.786 0 ,1 ,176 ,127 ,160 ,0 ,5.087 ,5.925 ,0.859 0 ,1 ,176 ,127 ,160 ,23 ,5.204 ,7.107 ,0.732 0 ,1 ,176 ,127 ,32 ,0 ,3.098 ,3.584 ,0.865 0 ,1 ,176 ,127 ,32 ,23 ,5.966 ,8.015 ,0.744 0 ,1 ,1760 ,127 ,2048 ,0 ,26.801 ,28.778 ,0.931 0 ,1 ,1760 ,127 ,2048 ,23 ,27.873 ,30.757 ,0.906 0 ,1 ,1760 ,127 ,288 ,0 ,7.739 ,9.704 ,0.798 0 ,1 ,1760 ,127 ,288 ,23 ,27.582 ,33.667 ,0.819 0 ,1 ,18 ,127 ,17 ,0 ,3.166 ,3.214 ,0.985 0 ,1 ,18 ,127 ,17 ,23 ,3.153 ,3.391 ,0.93 0 ,1 ,1808 ,127 ,2048 ,0 ,27.859 ,31.173 ,0.894 0 ,1 ,1808 ,127 ,2048 ,23 ,29.615 ,32.244 ,0.918 0 ,1 ,1808 ,127 ,240 ,0 ,5.02 ,7.922 ,0.634 0 ,1 ,1808 ,127 ,240 ,23 ,28.216 ,32.914 ,0.857 0 ,1 ,1856 ,127 ,192 ,0 ,4.952 ,8.102 ,0.611 0 ,1 ,1856 ,127 ,192 ,23 ,28.129 ,32.761 ,0.859 0 ,1 ,1856 ,127 ,2048 ,0 ,28.685 ,30.899 ,0.928 0 ,1 ,1856 ,127 ,2048 ,23 ,30.153 ,32.325 ,0.933 0 ,1 ,19 ,127 ,18 ,0 ,3.064 ,3.373 ,0.908 0 ,1 ,19 ,127 ,18 ,23 ,3.174 ,3.314 ,0.958 0 ,1 ,1904 ,127 ,144 ,0 ,4.963 ,6.725 ,0.738 0 ,1 ,1904 ,127 ,144 ,23 ,28.694 ,32.558 ,0.881 0 ,1 ,1904 ,127 ,2048 ,0 ,28.546 ,30.818 ,0.926 0 ,1 ,1904 ,127 ,2048 ,23 ,29.761 ,32.772 ,0.908 0 ,1 ,192 ,127 ,176 ,0 ,5.245 ,6.23 ,0.842 0 ,1 ,192 ,127 ,176 ,23 ,5.649 ,8.73 ,0.647 0 ,1 ,1952 ,127 ,2048 ,0 ,29.867 ,31.426 ,0.95 0 ,1 ,1952 ,127 ,2048 ,23 ,31.458 ,33.255 ,0.946 0 ,1 ,1952 ,127 ,96 ,0 ,4.814 ,4.921 ,0.978 0 ,1 ,1952 ,127 ,96 ,23 ,30.899 ,33.712 ,0.917 0 ,1 ,2 ,127 ,1 ,0 ,2.919 ,3.139 ,0.93 0 ,1 ,2 ,127 ,1 ,23 ,3.178 ,3.483 ,0.912 0 ,1 ,20 ,127 ,19 ,0 ,3.038 ,3.106 ,0.978 0 ,1 ,20 ,127 ,19 ,23 ,3.137 ,3.349 ,0.937 0 ,1 ,2000 ,127 ,2048 ,0 ,30.484 ,32.671 ,0.933 0 ,1 ,2000 ,127 ,2048 ,23 ,31.584 ,33.561 ,0.941 0 ,1 ,2000 ,127 ,48 ,0 ,3.038 ,4.75 ,0.64 0 ,1 ,2000 ,127 ,48 ,23 ,33.027 ,35.259 ,0.937 0 ,1 ,2048 ,127 ,0 ,0 ,3.039 ,4.422 ,0.687 0 ,1 ,2048 ,127 ,0 ,23 ,33.124 ,38.138 ,0.869 0 ,1 ,2048 ,127 ,1024 ,0 ,15.974 ,22.101 ,0.723 0 ,1 ,2048 ,127 ,1024 ,23 ,34.138 ,39.756 ,0.859 0 ,1 ,2048 ,127 ,128 ,0 ,5.028 ,6.031 ,0.834 0 ,1 ,2048 ,127 ,128 ,23 ,32.031 ,35.342 ,0.906 0 ,1 ,2048 ,127 ,144 ,0 ,4.971 ,6.858 ,0.725 0 ,1 ,2048 ,127 ,144 ,23 ,31.915 ,36.571 ,0.873 0 ,1 ,2048 ,127 ,1760 ,0 ,27.017 ,30.804 ,0.877 0 ,1 ,2048 ,127 ,1760 ,23 ,36.742 ,46.636 ,0.788 0 ,1 ,2048 ,127 ,1808 ,0 ,27.686 ,31.56 ,0.877 0 ,1 ,2048 ,127 ,1808 ,23 ,35.858 ,41.571 ,0.863 0 ,1 ,2048 ,127 ,1856 ,0 ,28.132 ,30.865 ,0.911 0 ,1 ,2048 ,127 ,1856 ,23 ,35.061 ,43.113 ,0.813 0 ,1 ,2048 ,127 ,1904 ,0 ,28.136 ,31.06 ,0.906 0 ,1 ,2048 ,127 ,1904 ,23 ,37.04 ,51.291 ,0.722 0 ,1 ,2048 ,127 ,192 ,0 ,5.131 ,7.662 ,0.67 0 ,1 ,2048 ,127 ,192 ,23 ,31.421 ,36.868 ,0.852 0 ,1 ,2048 ,127 ,1952 ,0 ,29.478 ,32.207 ,0.915 0 ,1 ,2048 ,127 ,1952 ,23 ,35.721 ,41.805 ,0.854 0 ,1 ,2048 ,127 ,2000 ,0 ,30.193 ,33.171 ,0.91 0 ,1 ,2048 ,127 ,2000 ,23 ,37.127 ,47.851 ,0.776 0 ,1 ,2048 ,127 ,2048 ,0 ,32.362 ,33.903 ,0.955 0 ,1 ,2048 ,127 ,2048 ,23 ,34.087 ,35.347 ,0.964 0 ,1 ,2048 ,127 ,240 ,0 ,4.845 ,7.533 ,0.643 0 ,1 ,2048 ,127 ,240 ,23 ,31.459 ,36.229 ,0.868 0 ,1 ,2048 ,127 ,256 ,0 ,8.423 ,8.247 ,1.021 0 ,1 ,2048 ,127 ,256 ,23 ,32.5 ,36.053 ,0.901 0 ,1 ,2048 ,127 ,288 ,0 ,7.616 ,9.511 ,0.801 0 ,1 ,2048 ,127 ,288 ,23 ,32.728 ,37.416 ,0.875 0 ,1 ,2048 ,127 ,32 ,0 ,3.749 ,4.91 ,0.764 0 ,1 ,2048 ,127 ,32 ,23 ,33.571 ,35.647 ,0.942 0 ,1 ,2048 ,127 ,4096 ,0 ,30.151 ,37.401 ,0.806 0 ,1 ,2048 ,127 ,4096 ,23 ,33.08 ,35.407 ,0.934 0 ,1 ,2048 ,127 ,48 ,0 ,3.024 ,4.447 ,0.68 0 ,1 ,2048 ,127 ,48 ,23 ,32.7 ,35.269 ,0.927 0 ,1 ,2048 ,127 ,512 ,0 ,9.928 ,13.903 ,0.714 0 ,1 ,2048 ,127 ,512 ,23 ,32.663 ,35.359 ,0.924 0 ,1 ,2048 ,127 ,64 ,0 ,4.802 ,3.823 ,1.256 0 ,1 ,2048 ,127 ,64 ,23 ,32.43 ,35.213 ,0.921 0 ,1 ,2048 ,127 ,96 ,0 ,4.813 ,5.266 ,0.914 0 ,1 ,2048 ,127 ,96 ,23 ,32.365 ,35.394 ,0.914 0 ,1 ,208 ,127 ,16 ,0 ,3.147 ,3.166 ,0.994 0 ,1 ,208 ,127 ,16 ,23 ,7.466 ,9.269 ,0.805 0 ,1 ,208 ,127 ,192 ,0 ,4.927 ,7.07 ,0.697 0 ,1 ,208 ,127 ,192 ,23 ,5.551 ,8.845 ,0.628 0 ,1 ,208 ,127 ,256 ,0 ,5.082 ,7.057 ,0.72 0 ,1 ,208 ,127 ,256 ,23 ,7.29 ,10.092 ,0.722 0 ,1 ,208 ,127 ,48 ,0 ,3.083 ,3.198 ,0.964 0 ,1 ,208 ,127 ,48 ,23 ,7.076 ,10.236 ,0.691 0 ,1 ,208 ,127 ,64 ,0 ,4.981 ,4.078 ,1.221 0 ,1 ,208 ,127 ,64 ,23 ,6.322 ,8.175 ,0.773 0 ,1 ,2096 ,127 ,2048 ,0 ,31.566 ,33.729 ,0.936 0 ,1 ,2096 ,127 ,2048 ,23 ,36.351 ,48.19 ,0.754 0 ,1 ,21 ,127 ,20 ,0 ,3.119 ,3.137 ,0.994 0 ,1 ,21 ,127 ,20 ,23 ,3.129 ,3.465 ,0.903 0 ,1 ,2144 ,127 ,2048 ,0 ,31.428 ,33.892 ,0.927 0 ,1 ,2144 ,127 ,2048 ,23 ,35.634 ,42.19 ,0.845 0 ,1 ,2192 ,127 ,2048 ,0 ,31.851 ,36.199 ,0.88 0 ,1 ,2192 ,127 ,2048 ,23 ,37.356 ,43.984 ,0.849 0 ,1 ,22 ,127 ,21 ,0 ,3.092 ,3.221 ,0.96 0 ,1 ,22 ,127 ,21 ,23 ,3.169 ,3.238 ,0.979 0 ,1 ,224 ,127 ,128 ,0 ,5.114 ,6.103 ,0.838 0 ,1 ,224 ,127 ,128 ,23 ,5.591 ,7.366 ,0.759 0 ,1 ,224 ,127 ,208 ,0 ,5.383 ,8.35 ,0.645 0 ,1 ,224 ,127 ,208 ,23 ,5.77 ,8.116 ,0.711 0 ,1 ,224 ,127 ,288 ,0 ,5.229 ,6.715 ,0.779 0 ,1 ,224 ,127 ,288 ,23 ,7.445 ,9.99 ,0.745 0 ,1 ,224 ,127 ,32 ,0 ,3.098 ,3.182 ,0.974 0 ,1 ,224 ,127 ,32 ,23 ,6.725 ,9.277 ,0.725 0 ,1 ,224 ,127 ,512 ,0 ,5.134 ,6.787 ,0.756 0 ,1 ,224 ,127 ,512 ,23 ,6.925 ,9.44 ,0.734 0 ,1 ,2240 ,127 ,2048 ,0 ,31.668 ,34.929 ,0.907 0 ,1 ,2240 ,127 ,2048 ,23 ,38.233 ,47.12 ,0.811 0 ,1 ,2288 ,127 ,2048 ,0 ,31.751 ,34.151 ,0.93 0 ,1 ,2288 ,127 ,2048 ,23 ,38.224 ,47.005 ,0.813 0 ,1 ,23 ,127 ,22 ,0 ,3.113 ,3.17 ,0.982 0 ,1 ,23 ,127 ,22 ,23 ,3.145 ,3.409 ,0.923 0 ,1 ,2336 ,127 ,2048 ,0 ,31.737 ,33.776 ,0.94 0 ,1 ,2336 ,127 ,2048 ,23 ,38.77 ,45.634 ,0.85 0 ,1 ,24 ,127 ,23 ,0 ,3.045 ,3.081 ,0.989 0 ,1 ,24 ,127 ,23 ,23 ,3.154 ,3.374 ,0.935 0 ,1 ,240 ,127 ,224 ,0 ,5.533 ,7.803 ,0.709 0 ,1 ,240 ,127 ,224 ,23 ,5.021 ,7.161 ,0.701 0 ,1 ,25 ,127 ,24 ,0 ,3.058 ,3.305 ,0.925 0 ,1 ,25 ,127 ,24 ,23 ,3.163 ,3.288 ,0.962 0 ,1 ,256 ,127 ,0 ,0 ,3.099 ,3.291 ,0.942 0 ,1 ,256 ,127 ,0 ,23 ,8.672 ,12.097 ,0.717 0 ,1 ,256 ,127 ,112 ,0 ,4.981 ,4.872 ,1.023 0 ,1 ,256 ,127 ,112 ,23 ,8.213 ,10.799 ,0.761 0 ,1 ,256 ,127 ,144 ,0 ,5.365 ,6.079 ,0.883 0 ,1 ,256 ,127 ,144 ,23 ,7.458 ,10.201 ,0.731 0 ,1 ,256 ,127 ,16 ,0 ,3.13 ,3.315 ,0.944 0 ,1 ,256 ,127 ,16 ,23 ,9.39 ,11.868 ,0.791 0 ,1 ,256 ,127 ,160 ,0 ,5.197 ,6.426 ,0.809 0 ,1 ,256 ,127 ,160 ,23 ,7.439 ,9.818 ,0.758 0 ,1 ,256 ,127 ,192 ,0 ,5.394 ,6.988 ,0.772 0 ,1 ,256 ,127 ,192 ,23 ,7.062 ,9.702 ,0.728 0 ,1 ,256 ,127 ,208 ,0 ,5.073 ,6.989 ,0.726 0 ,1 ,256 ,127 ,208 ,23 ,6.976 ,11.408 ,0.612 0 ,1 ,256 ,127 ,240 ,0 ,5.395 ,7.002 ,0.771 0 ,1 ,256 ,127 ,240 ,23 ,7.176 ,10.974 ,0.654 0 ,1 ,256 ,127 ,256 ,0 ,7.82 ,8.248 ,0.948 0 ,1 ,256 ,127 ,256 ,23 ,8.751 ,12.726 ,0.688 0 ,1 ,256 ,127 ,288 ,0 ,8.132 ,8.052 ,1.01 0 ,1 ,256 ,127 ,288 ,23 ,8.855 ,10.821 ,0.818 0 ,1 ,256 ,127 ,48 ,0 ,3.18 ,3.458 ,0.92 0 ,1 ,256 ,127 ,48 ,23 ,8.687 ,11.542 ,0.753 0 ,1 ,256 ,127 ,64 ,0 ,5.014 ,4.221 ,1.188 0 ,1 ,256 ,127 ,64 ,23 ,8.102 ,10.699 ,0.757 0 ,1 ,256 ,127 ,96 ,0 ,4.933 ,4.059 ,1.215 0 ,1 ,256 ,127 ,96 ,23 ,8.175 ,10.479 ,0.78 0 ,1 ,26 ,127 ,25 ,0 ,3.023 ,3.209 ,0.942 0 ,1 ,26 ,127 ,25 ,23 ,3.295 ,3.323 ,0.992 0 ,1 ,27 ,127 ,26 ,0 ,3.039 ,3.175 ,0.957 0 ,1 ,27 ,127 ,26 ,23 ,3.311 ,3.318 ,0.998 0 ,1 ,272 ,127 ,128 ,0 ,5.201 ,6.129 ,0.849 0 ,1 ,272 ,127 ,128 ,23 ,7.471 ,9.733 ,0.768 0 ,1 ,272 ,127 ,240 ,0 ,5.495 ,7.266 ,0.756 0 ,1 ,272 ,127 ,240 ,23 ,7.348 ,11.8 ,0.623 0 ,1 ,272 ,127 ,256 ,0 ,7.966 ,8.277 ,0.962 0 ,1 ,272 ,127 ,256 ,23 ,7.957 ,9.253 ,0.86 0 ,1 ,272 ,127 ,32 ,0 ,3.114 ,3.3 ,0.944 0 ,1 ,272 ,127 ,32 ,23 ,11.581 ,11.002 ,1.053 0 ,1 ,272 ,127 ,512 ,0 ,7.898 ,8.493 ,0.93 0 ,1 ,272 ,127 ,512 ,23 ,8.492 ,12.399 ,0.685 0 ,1 ,28 ,127 ,27 ,0 ,3.038 ,3.329 ,0.913 0 ,1 ,28 ,127 ,27 ,23 ,3.332 ,3.397 ,0.981 0 ,1 ,288 ,127 ,272 ,0 ,7.768 ,7.912 ,0.982 0 ,1 ,288 ,127 ,272 ,23 ,7.954 ,10.425 ,0.763 0 ,1 ,29 ,127 ,28 ,0 ,3.067 ,3.245 ,0.945 0 ,1 ,29 ,127 ,28 ,23 ,3.204 ,3.42 ,0.937 0 ,1 ,3 ,127 ,2 ,0 ,2.998 ,3.362 ,0.892 0 ,1 ,3 ,127 ,2 ,23 ,3.177 ,3.366 ,0.944 0 ,1 ,30 ,127 ,29 ,0 ,3.067 ,3.39 ,0.905 0 ,1 ,30 ,127 ,29 ,23 ,3.169 ,3.5 ,0.906 0 ,1 ,304 ,127 ,16 ,0 ,3.114 ,3.283 ,0.949 0 ,1 ,304 ,127 ,16 ,23 ,9.138 ,11.629 ,0.786 0 ,1 ,304 ,127 ,256 ,0 ,7.948 ,8.377 ,0.949 0 ,1 ,304 ,127 ,256 ,23 ,7.994 ,8.97 ,0.891 0 ,1 ,304 ,127 ,64 ,0 ,4.957 ,4.276 ,1.159 0 ,1 ,304 ,127 ,64 ,23 ,8.033 ,10.141 ,0.792 0 ,1 ,31 ,127 ,30 ,0 ,3.075 ,3.344 ,0.92 0 ,1 ,31 ,127 ,30 ,23 ,3.161 ,3.434 ,0.921 0 ,1 ,32 ,127 ,0 ,0 ,3.114 ,3.167 ,0.983 0 ,1 ,32 ,127 ,0 ,23 ,3.131 ,4.026 ,0.778 0 ,1 ,32 ,127 ,128 ,0 ,3.099 ,3.198 ,0.969 0 ,1 ,32 ,127 ,128 ,23 ,3.813 ,3.793 ,1.005 0 ,1 ,32 ,127 ,144 ,0 ,3.099 ,3.268 ,0.948 0 ,1 ,32 ,127 ,144 ,23 ,3.942 ,3.699 ,1.065 0 ,1 ,32 ,127 ,16 ,0 ,3.099 ,3.252 ,0.953 0 ,1 ,32 ,127 ,16 ,23 ,3.146 ,3.563 ,0.883 0 ,1 ,32 ,127 ,192 ,0 ,3.099 ,3.214 ,0.964 0 ,1 ,32 ,127 ,192 ,23 ,3.833 ,3.796 ,1.01 0 ,1 ,32 ,127 ,240 ,0 ,3.114 ,3.068 ,1.015 0 ,1 ,32 ,127 ,240 ,23 ,3.793 ,3.999 ,0.948 0 ,1 ,32 ,127 ,288 ,0 ,3.114 ,3.229 ,0.964 0 ,1 ,32 ,127 ,288 ,23 ,3.755 ,4.339 ,0.865 0 ,1 ,32 ,127 ,31 ,0 ,3.099 ,3.268 ,0.948 0 ,1 ,32 ,127 ,31 ,23 ,3.144 ,3.375 ,0.932 0 ,1 ,32 ,127 ,32 ,0 ,3.109 ,3.166 ,0.982 0 ,1 ,32 ,127 ,32 ,23 ,3.749 ,3.771 ,0.994 0 ,1 ,32 ,127 ,48 ,0 ,3.13 ,3.284 ,0.953 0 ,1 ,32 ,127 ,48 ,23 ,3.736 ,3.773 ,0.99 0 ,1 ,32 ,127 ,96 ,0 ,3.091 ,3.174 ,0.974 0 ,1 ,32 ,127 ,96 ,23 ,3.785 ,3.832 ,0.988 0 ,1 ,320 ,127 ,128 ,0 ,5.065 ,6.166 ,0.821 0 ,1 ,320 ,127 ,128 ,23 ,7.503 ,11.099 ,0.676 0 ,1 ,320 ,127 ,192 ,0 ,5.379 ,8.151 ,0.66 0 ,1 ,320 ,127 ,192 ,23 ,7.318 ,11.752 ,0.623 0 ,1 ,320 ,127 ,32 ,0 ,3.099 ,3.439 ,0.901 0 ,1 ,320 ,127 ,32 ,23 ,8.722 ,12.582 ,0.693 0 ,1 ,320 ,127 ,512 ,0 ,8.005 ,8.763 ,0.913 0 ,1 ,320 ,127 ,512 ,23 ,8.642 ,13.466 ,0.642 0 ,1 ,352 ,127 ,256 ,0 ,7.73 ,7.652 ,1.01 0 ,1 ,352 ,127 ,256 ,23 ,8.957 ,9.988 ,0.897 0 ,1 ,352 ,127 ,64 ,0 ,4.957 ,4.031 ,1.23 0 ,1 ,352 ,127 ,64 ,23 ,8.06 ,11.231 ,0.718 0 ,1 ,368 ,127 ,128 ,0 ,5.088 ,6.068 ,0.839 0 ,1 ,368 ,127 ,128 ,23 ,7.415 ,10.921 ,0.679 0 ,1 ,368 ,127 ,144 ,0 ,5.147 ,7.052 ,0.73 0 ,1 ,368 ,127 ,144 ,23 ,7.529 ,11.268 ,0.668 0 ,1 ,368 ,127 ,512 ,0 ,7.866 ,8.924 ,0.881 0 ,1 ,368 ,127 ,512 ,23 ,8.798 ,12.517 ,0.703 0 ,1 ,4 ,127 ,3 ,0 ,3.114 ,3.148 ,0.989 0 ,1 ,4 ,127 ,3 ,23 ,3.161 ,3.288 ,0.961 0 ,1 ,400 ,127 ,256 ,0 ,7.881 ,7.791 ,1.011 0 ,1 ,400 ,127 ,256 ,23 ,9.582 ,14.172 ,0.676 0 ,1 ,416 ,127 ,128 ,0 ,5.089 ,6.431 ,0.791 0 ,1 ,416 ,127 ,128 ,23 ,9.002 ,12.069 ,0.746 0 ,1 ,416 ,127 ,512 ,0 ,8.506 ,9.524 ,0.893 0 ,1 ,416 ,127 ,512 ,23 ,10.297 ,13.686 ,0.752 0 ,1 ,416 ,127 ,96 ,0 ,4.932 ,5.159 ,0.956 0 ,1 ,416 ,127 ,96 ,23 ,9.48 ,12.207 ,0.777 0 ,1 ,448 ,127 ,256 ,0 ,7.779 ,8.728 ,0.891 0 ,1 ,448 ,127 ,256 ,23 ,9.679 ,13.841 ,0.699 0 ,1 ,464 ,127 ,48 ,0 ,3.083 ,3.242 ,0.951 0 ,1 ,464 ,127 ,48 ,23 ,10.09 ,14.314 ,0.705 0 ,1 ,464 ,127 ,512 ,0 ,8.895 ,10.239 ,0.869 0 ,1 ,464 ,127 ,512 ,23 ,10.076 ,13.941 ,0.723 0 ,1 ,48 ,127 ,32 ,0 ,3.083 ,3.423 ,0.901 0 ,1 ,48 ,127 ,32 ,23 ,3.161 ,3.694 ,0.856 0 ,1 ,496 ,127 ,256 ,0 ,8.113 ,8.964 ,0.905 0 ,1 ,496 ,127 ,256 ,23 ,9.628 ,12.635 ,0.762 0 ,1 ,5 ,127 ,4 ,0 ,2.96 ,3.057 ,0.968 0 ,1 ,5 ,127 ,4 ,23 ,3.164 ,3.422 ,0.925 0 ,1 ,512 ,127 ,0 ,0 ,3.083 ,4.111 ,0.75 0 ,1 ,512 ,127 ,0 ,23 ,11.966 ,14.633 ,0.818 0 ,1 ,512 ,127 ,144 ,0 ,5.114 ,6.373 ,0.802 0 ,1 ,512 ,127 ,144 ,23 ,10.685 ,13.732 ,0.778 0 ,1 ,512 ,127 ,192 ,0 ,5.273 ,7.845 ,0.672 0 ,1 ,512 ,127 ,192 ,23 ,10.666 ,14.213 ,0.75 0 ,1 ,512 ,127 ,224 ,0 ,5.286 ,8.042 ,0.657 0 ,1 ,512 ,127 ,224 ,23 ,10.377 ,15.298 ,0.678 0 ,1 ,512 ,127 ,240 ,0 ,5.419 ,8.092 ,0.67 0 ,1 ,512 ,127 ,240 ,23 ,10.246 ,15.382 ,0.666 0 ,1 ,512 ,127 ,272 ,0 ,7.864 ,9.463 ,0.831 0 ,1 ,512 ,127 ,272 ,23 ,11.848 ,14.992 ,0.79 0 ,1 ,512 ,127 ,288 ,0 ,8.865 ,7.956 ,1.114 0 ,1 ,512 ,127 ,288 ,23 ,11.47 ,14.51 ,0.79 0 ,1 ,512 ,127 ,320 ,0 ,8.35 ,9.526 ,0.877 0 ,1 ,512 ,127 ,320 ,23 ,11.58 ,15.567 ,0.744 0 ,1 ,512 ,127 ,368 ,0 ,8.559 ,9.328 ,0.918 0 ,1 ,512 ,127 ,368 ,23 ,10.747 ,15.593 ,0.689 0 ,1 ,512 ,127 ,416 ,0 ,8.594 ,10.529 ,0.816 0 ,1 ,512 ,127 ,416 ,23 ,11.284 ,14.946 ,0.755 0 ,1 ,512 ,127 ,464 ,0 ,9.515 ,11.655 ,0.816 0 ,1 ,512 ,127 ,464 ,23 ,11.494 ,16.584 ,0.693 0 ,1 ,512 ,127 ,48 ,0 ,3.098 ,4.732 ,0.655 0 ,1 ,512 ,127 ,48 ,23 ,12.04 ,15.473 ,0.778 0 ,1 ,512 ,127 ,512 ,0 ,10.208 ,12.077 ,0.845 0 ,1 ,512 ,127 ,512 ,23 ,11.86 ,15.423 ,0.769 0 ,1 ,512 ,127 ,96 ,0 ,4.957 ,4.58 ,1.082 0 ,1 ,512 ,127 ,96 ,23 ,11.308 ,13.901 ,0.813 0 ,1 ,544 ,127 ,256 ,0 ,8.042 ,8.428 ,0.954 0 ,1 ,544 ,127 ,256 ,23 ,11.444 ,16.021 ,0.714 0 ,1 ,560 ,127 ,512 ,0 ,10.263 ,11.774 ,0.872 0 ,1 ,560 ,127 ,512 ,23 ,10.401 ,15.021 ,0.692 0 ,1 ,6 ,127 ,5 ,0 ,3.079 ,3.237 ,0.951 0 ,1 ,6 ,127 ,5 ,23 ,3.177 ,3.331 ,0.954 0 ,1 ,608 ,127 ,512 ,0 ,10.274 ,10.897 ,0.943 0 ,1 ,608 ,127 ,512 ,23 ,11.243 ,12.839 ,0.876 0 ,1 ,64 ,127 ,0 ,0 ,3.098 ,3.378 ,0.917 0 ,1 ,64 ,127 ,0 ,23 ,4.35 ,5.456 ,0.797 0 ,1 ,64 ,127 ,144 ,0 ,4.991 ,4.189 ,1.191 0 ,1 ,64 ,127 ,144 ,23 ,5.102 ,5.032 ,1.014 0 ,1 ,64 ,127 ,16 ,0 ,3.121 ,3.117 ,1.001 0 ,1 ,64 ,127 ,16 ,23 ,4.704 ,4.996 ,0.942 0 ,1 ,64 ,127 ,192 ,0 ,4.981 ,4.048 ,1.23 0 ,1 ,64 ,127 ,192 ,23 ,5.092 ,5.123 ,0.994 0 ,1 ,64 ,127 ,240 ,0 ,5.006 ,4.037 ,1.24 0 ,1 ,64 ,127 ,240 ,23 ,5.006 ,5.54 ,0.904 0 ,1 ,64 ,127 ,256 ,0 ,4.981 ,4.277 ,1.165 0 ,1 ,64 ,127 ,256 ,23 ,5.032 ,4.932 ,1.02 0 ,1 ,64 ,127 ,288 ,0 ,4.957 ,3.897 ,1.272 0 ,1 ,64 ,127 ,288 ,23 ,5.246 ,5.288 ,0.992 0 ,1 ,64 ,127 ,48 ,0 ,3.091 ,3.249 ,0.951 0 ,1 ,64 ,127 ,48 ,23 ,4.393 ,5.008 ,0.877 0 ,1 ,64 ,127 ,64 ,0 ,4.974 ,4.005 ,1.242 0 ,1 ,64 ,127 ,64 ,23 ,5.147 ,4.958 ,1.038 0 ,1 ,64 ,127 ,96 ,0 ,4.957 ,4.148 ,1.195 0 ,1 ,64 ,127 ,96 ,23 ,5.032 ,5.032 ,1.0 0 ,1 ,656 ,127 ,512 ,0 ,10.123 ,12.522 ,0.808 0 ,1 ,656 ,127 ,512 ,23 ,13.767 ,19.72 ,0.698 0 ,1 ,7 ,127 ,6 ,0 ,3.375 ,3.032 ,1.113 0 ,1 ,7 ,127 ,6 ,23 ,3.219 ,3.565 ,0.903 0 ,1 ,704 ,127 ,512 ,0 ,10.395 ,13.15 ,0.79 0 ,1 ,704 ,127 ,512 ,23 ,14.495 ,19.966 ,0.726 0 ,1 ,736 ,127 ,1024 ,0 ,12.282 ,15.006 ,0.818 0 ,1 ,736 ,127 ,1024 ,23 ,13.497 ,16.572 ,0.814 0 ,1 ,736 ,127 ,288 ,0 ,7.659 ,9.138 ,0.838 0 ,1 ,736 ,127 ,288 ,23 ,12.953 ,16.572 ,0.782 0 ,1 ,752 ,127 ,512 ,0 ,10.177 ,12.643 ,0.805 0 ,1 ,752 ,127 ,512 ,23 ,13.022 ,16.383 ,0.795 0 ,1 ,784 ,127 ,1024 ,0 ,13.396 ,16.674 ,0.803 0 ,1 ,784 ,127 ,1024 ,23 ,15.41 ,18.729 ,0.823 0 ,1 ,784 ,127 ,240 ,0 ,5.42 ,8.15 ,0.665 0 ,1 ,784 ,127 ,240 ,23 ,13.429 ,18.319 ,0.733 0 ,1 ,8 ,127 ,7 ,0 ,3.142 ,3.395 ,0.925 0 ,1 ,8 ,127 ,7 ,23 ,3.16 ,3.437 ,0.919 0 ,1 ,80 ,127 ,128 ,0 ,4.969 ,4.257 ,1.167 0 ,1 ,80 ,127 ,128 ,23 ,5.048 ,5.026 ,1.004 0 ,1 ,80 ,127 ,32 ,0 ,3.098 ,3.053 ,1.015 0 ,1 ,80 ,127 ,32 ,23 ,4.382 ,5.119 ,0.856 0 ,1 ,80 ,127 ,48 ,0 ,3.083 ,3.3 ,0.934 0 ,1 ,80 ,127 ,48 ,23 ,4.645 ,5.007 ,0.928 0 ,1 ,80 ,127 ,64 ,0 ,4.934 ,3.898 ,1.266 0 ,1 ,80 ,127 ,64 ,23 ,5.06 ,4.547 ,1.113 0 ,1 ,800 ,127 ,512 ,0 ,10.443 ,12.587 ,0.83 0 ,1 ,800 ,127 ,512 ,23 ,15.132 ,19.943 ,0.759 0 ,1 ,832 ,127 ,1024 ,0 ,14.326 ,16.382 ,0.875 0 ,1 ,832 ,127 ,1024 ,23 ,15.299 ,18.528 ,0.826 0 ,1 ,832 ,127 ,192 ,0 ,5.276 ,7.963 ,0.663 0 ,1 ,832 ,127 ,192 ,23 ,13.365 ,18.251 ,0.732 0 ,1 ,880 ,127 ,1024 ,0 ,14.095 ,16.638 ,0.847 0 ,1 ,880 ,127 ,1024 ,23 ,15.424 ,18.966 ,0.813 0 ,1 ,880 ,127 ,144 ,0 ,5.135 ,7.68 ,0.669 0 ,1 ,880 ,127 ,144 ,23 ,14.477 ,18.979 ,0.763 0 ,1 ,9 ,127 ,8 ,0 ,3.004 ,3.37 ,0.891 0 ,1 ,9 ,127 ,8 ,23 ,3.167 ,3.375 ,0.938 0 ,1 ,928 ,127 ,1024 ,0 ,15.141 ,17.342 ,0.873 0 ,1 ,928 ,127 ,1024 ,23 ,17.292 ,19.89 ,0.869 0 ,1 ,928 ,127 ,96 ,0 ,4.893 ,4.551 ,1.075 0 ,1 ,928 ,127 ,96 ,23 ,16.483 ,19.632 ,0.84 0 ,1 ,96 ,127 ,80 ,0 ,4.957 ,4.127 ,1.201 0 ,1 ,96 ,127 ,80 ,23 ,5.056 ,4.769 ,1.06 0 ,1 ,976 ,127 ,1024 ,0 ,15.793 ,18.878 ,0.837 0 ,1 ,976 ,127 ,1024 ,23 ,16.935 ,20.985 ,0.807 0 ,1 ,976 ,127 ,48 ,0 ,3.053 ,5.109 ,0.598 0 ,1 ,976 ,127 ,48 ,23 ,17.511 ,20.885 ,0.838 0 ,16 ,1 ,127 ,0 ,23 ,3.178 ,3.183 ,0.998 0 ,16 ,10 ,127 ,9 ,23 ,3.178 ,3.339 ,0.952 0 ,16 ,1024 ,127 ,0 ,23 ,19.829 ,21.609 ,0.918 0 ,16 ,1024 ,127 ,1024 ,23 ,21.951 ,28.869 ,0.76 0 ,16 ,1024 ,127 ,144 ,23 ,17.617 ,21.48 ,0.82 0 ,16 ,1024 ,127 ,192 ,23 ,17.276 ,21.582 ,0.8 0 ,16 ,1024 ,127 ,240 ,23 ,17.258 ,21.54 ,0.801 0 ,16 ,1024 ,127 ,288 ,23 ,18.942 ,24.062 ,0.787 0 ,16 ,1024 ,127 ,48 ,23 ,19.643 ,21.643 ,0.908 0 ,16 ,1024 ,127 ,736 ,23 ,19.786 ,26.735 ,0.74 0 ,16 ,1024 ,127 ,784 ,23 ,20.751 ,27.499 ,0.755 0 ,16 ,1024 ,127 ,832 ,23 ,20.361 ,26.124 ,0.779 0 ,16 ,1024 ,127 ,880 ,23 ,20.246 ,27.91 ,0.725 0 ,16 ,1024 ,127 ,928 ,23 ,21.546 ,29.372 ,0.734 0 ,16 ,1024 ,127 ,96 ,23 ,18.497 ,21.586 ,0.857 0 ,16 ,1024 ,127 ,976 ,23 ,20.828 ,27.87 ,0.747 0 ,16 ,1072 ,127 ,1024 ,23 ,20.655 ,28.688 ,0.72 0 ,16 ,11 ,127 ,10 ,23 ,3.161 ,3.289 ,0.961 0 ,16 ,112 ,127 ,144 ,23 ,5.037 ,5.538 ,0.91 0 ,16 ,112 ,127 ,16 ,23 ,5.223 ,4.982 ,1.048 0 ,16 ,112 ,127 ,256 ,23 ,5.031 ,4.205 ,1.196 0 ,16 ,112 ,127 ,64 ,23 ,4.96 ,4.366 ,1.136 0 ,16 ,112 ,127 ,96 ,23 ,5.056 ,4.515 ,1.12 0 ,16 ,1120 ,127 ,1024 ,23 ,21.363 ,29.238 ,0.731 0 ,16 ,1168 ,127 ,1024 ,23 ,23.945 ,31.263 ,0.766 0 ,16 ,12 ,127 ,11 ,23 ,3.169 ,3.427 ,0.925 0 ,16 ,1216 ,127 ,1024 ,23 ,24.466 ,32.432 ,0.754 0 ,16 ,1264 ,127 ,1024 ,23 ,24.712 ,32.256 ,0.766 0 ,16 ,128 ,127 ,0 ,23 ,5.847 ,8.711 ,0.671 0 ,16 ,128 ,127 ,112 ,23 ,6.145 ,7.732 ,0.795 0 ,16 ,128 ,127 ,128 ,23 ,5.276 ,7.65 ,0.69 0 ,16 ,128 ,127 ,144 ,23 ,5.336 ,7.38 ,0.723 0 ,16 ,128 ,127 ,192 ,23 ,5.107 ,8.406 ,0.608 0 ,16 ,128 ,127 ,240 ,23 ,5.435 ,9.265 ,0.587 0 ,16 ,128 ,127 ,288 ,23 ,5.202 ,7.929 ,0.656 0 ,16 ,128 ,127 ,32 ,23 ,5.764 ,8.552 ,0.674 0 ,16 ,128 ,127 ,48 ,23 ,5.848 ,8.097 ,0.722 0 ,16 ,128 ,127 ,80 ,23 ,5.206 ,7.592 ,0.686 0 ,16 ,128 ,127 ,96 ,23 ,5.108 ,7.379 ,0.692 0 ,16 ,13 ,127 ,12 ,23 ,3.194 ,3.406 ,0.938 0 ,16 ,1312 ,127 ,1024 ,23 ,26.031 ,33.817 ,0.77 0 ,16 ,14 ,127 ,13 ,23 ,3.177 ,3.358 ,0.946 0 ,16 ,144 ,127 ,128 ,23 ,5.86 ,6.332 ,0.926 0 ,16 ,15 ,127 ,14 ,23 ,3.164 ,3.245 ,0.975 0 ,16 ,16 ,127 ,0 ,23 ,3.228 ,3.534 ,0.913 0 ,16 ,16 ,127 ,144 ,23 ,3.288 ,3.115 ,1.056 0 ,16 ,16 ,127 ,15 ,23 ,3.145 ,3.262 ,0.964 0 ,16 ,16 ,127 ,16 ,23 ,3.301 ,3.383 ,0.976 0 ,16 ,16 ,127 ,192 ,23 ,3.269 ,3.13 ,1.045 0 ,16 ,16 ,127 ,240 ,23 ,3.183 ,3.236 ,0.984 0 ,16 ,16 ,127 ,256 ,23 ,3.981 ,3.837 ,1.037 0 ,16 ,16 ,127 ,288 ,23 ,3.877 ,4.116 ,0.942 0 ,16 ,16 ,127 ,48 ,23 ,3.175 ,3.314 ,0.958 0 ,16 ,16 ,127 ,64 ,23 ,3.193 ,3.62 ,0.882 0 ,16 ,16 ,127 ,96 ,23 ,3.581 ,3.383 ,1.059 0 ,16 ,160 ,127 ,144 ,23 ,5.32 ,6.222 ,0.855 0 ,16 ,160 ,127 ,16 ,23 ,6.11 ,8.151 ,0.75 0 ,16 ,160 ,127 ,256 ,23 ,5.155 ,6.437 ,0.801 0 ,16 ,160 ,127 ,64 ,23 ,5.599 ,7.838 ,0.714 0 ,16 ,160 ,127 ,96 ,23 ,5.369 ,8.173 ,0.657 0 ,16 ,17 ,127 ,16 ,23 ,3.222 ,3.187 ,1.011 0 ,16 ,176 ,127 ,128 ,23 ,5.141 ,6.528 ,0.788 0 ,16 ,176 ,127 ,160 ,23 ,5.29 ,6.267 ,0.844 0 ,16 ,176 ,127 ,32 ,23 ,5.59 ,8.172 ,0.684 0 ,16 ,1760 ,127 ,2048 ,23 ,33.731 ,50.403 ,0.669 0 ,16 ,1760 ,127 ,288 ,23 ,27.6 ,32.727 ,0.843 0 ,16 ,18 ,127 ,17 ,23 ,3.16 ,3.445 ,0.917 0 ,16 ,1808 ,127 ,2048 ,23 ,35.232 ,56.189 ,0.627 0 ,16 ,1808 ,127 ,240 ,23 ,28.033 ,33.664 ,0.833 0 ,16 ,1856 ,127 ,192 ,23 ,28.71 ,34.266 ,0.838 0 ,16 ,1856 ,127 ,2048 ,23 ,35.865 ,60.854 ,0.589 0 ,16 ,19 ,127 ,18 ,23 ,3.169 ,3.382 ,0.937 0 ,16 ,1904 ,127 ,144 ,23 ,28.703 ,32.628 ,0.88 0 ,16 ,1904 ,127 ,2048 ,23 ,36.013 ,67.08 ,0.537 0 ,16 ,192 ,127 ,176 ,23 ,5.646 ,7.328 ,0.77 0 ,16 ,1952 ,127 ,2048 ,23 ,41.552 ,59.332 ,0.7 0 ,16 ,1952 ,127 ,96 ,23 ,31.231 ,35.501 ,0.88 0 ,16 ,2 ,127 ,1 ,23 ,3.146 ,3.179 ,0.989 0 ,16 ,20 ,127 ,19 ,23 ,3.169 ,3.246 ,0.976 0 ,16 ,2000 ,127 ,2048 ,23 ,46.0 ,70.366 ,0.654 0 ,16 ,2000 ,127 ,48 ,23 ,32.599 ,34.543 ,0.944 0 ,16 ,2048 ,127 ,0 ,23 ,33.828 ,36.499 ,0.927 0 ,16 ,2048 ,127 ,1024 ,23 ,38.208 ,45.153 ,0.846 0 ,16 ,2048 ,127 ,128 ,23 ,32.134 ,35.071 ,0.916 0 ,16 ,2048 ,127 ,144 ,23 ,33.146 ,35.794 ,0.926 0 ,16 ,2048 ,127 ,1760 ,23 ,39.068 ,54.347 ,0.719 0 ,16 ,2048 ,127 ,1808 ,23 ,48.313 ,57.817 ,0.836 0 ,16 ,2048 ,127 ,1856 ,23 ,43.439 ,50.915 ,0.853 0 ,16 ,2048 ,127 ,1904 ,23 ,47.154 ,51.681 ,0.912 0 ,16 ,2048 ,127 ,192 ,23 ,32.255 ,36.219 ,0.891 0 ,16 ,2048 ,127 ,1952 ,23 ,44.268 ,53.135 ,0.833 0 ,16 ,2048 ,127 ,2000 ,23 ,43.611 ,63.146 ,0.691 0 ,16 ,2048 ,127 ,2048 ,23 ,45.643 ,81.625 ,0.559 0 ,16 ,2048 ,127 ,240 ,23 ,31.904 ,35.888 ,0.889 0 ,16 ,2048 ,127 ,256 ,23 ,32.517 ,36.453 ,0.892 0 ,16 ,2048 ,127 ,288 ,23 ,33.122 ,43.043 ,0.77 0 ,16 ,2048 ,127 ,32 ,23 ,33.409 ,35.815 ,0.933 0 ,16 ,2048 ,127 ,4096 ,23 ,36.371 ,45.522 ,0.799 0 ,16 ,2048 ,127 ,48 ,23 ,33.454 ,34.874 ,0.959 0 ,16 ,2048 ,127 ,512 ,23 ,33.709 ,40.226 ,0.838 0 ,16 ,2048 ,127 ,64 ,23 ,32.639 ,35.727 ,0.914 0 ,16 ,2048 ,127 ,96 ,23 ,32.574 ,35.928 ,0.907 0 ,16 ,208 ,127 ,16 ,23 ,7.337 ,9.42 ,0.779 0 ,16 ,208 ,127 ,192 ,23 ,5.757 ,7.05 ,0.817 0 ,16 ,208 ,127 ,256 ,23 ,5.216 ,7.696 ,0.678 0 ,16 ,208 ,127 ,48 ,23 ,6.807 ,8.815 ,0.772 0 ,16 ,208 ,127 ,64 ,23 ,6.015 ,8.369 ,0.719 0 ,16 ,2096 ,127 ,2048 ,23 ,40.09 ,64.884 ,0.618 0 ,16 ,21 ,127 ,20 ,23 ,3.16 ,3.162 ,1.0 0 ,16 ,2144 ,127 ,2048 ,23 ,48.477 ,58.556 ,0.828 0 ,16 ,2192 ,127 ,2048 ,23 ,63.926 ,60.205 ,1.062 0 ,16 ,22 ,127 ,21 ,23 ,3.145 ,3.339 ,0.942 0 ,16 ,224 ,127 ,128 ,23 ,5.718 ,7.235 ,0.79 0 ,16 ,224 ,127 ,208 ,23 ,5.548 ,7.047 ,0.787 0 ,16 ,224 ,127 ,288 ,23 ,5.101 ,8.664 ,0.589 0 ,16 ,224 ,127 ,32 ,23 ,7.018 ,9.411 ,0.746 0 ,16 ,224 ,127 ,512 ,23 ,5.132 ,8.694 ,0.59 0 ,16 ,2240 ,127 ,2048 ,23 ,60.524 ,62.649 ,0.966 0 ,16 ,2288 ,127 ,2048 ,23 ,59.027 ,62.563 ,0.943 0 ,16 ,23 ,127 ,22 ,23 ,3.145 ,3.322 ,0.947 0 ,16 ,2336 ,127 ,2048 ,23 ,63.776 ,61.038 ,1.045 0 ,16 ,24 ,127 ,23 ,23 ,3.161 ,3.279 ,0.964 0 ,16 ,240 ,127 ,224 ,23 ,5.249 ,7.014 ,0.748 0 ,16 ,25 ,127 ,24 ,23 ,3.153 ,3.599 ,0.876 0 ,16 ,256 ,127 ,0 ,23 ,8.794 ,11.951 ,0.736 0 ,16 ,256 ,127 ,112 ,23 ,8.294 ,11.472 ,0.723 0 ,16 ,256 ,127 ,144 ,23 ,7.403 ,9.753 ,0.759 0 ,16 ,256 ,127 ,16 ,23 ,9.535 ,12.03 ,0.793 0 ,16 ,256 ,127 ,160 ,23 ,7.526 ,10.763 ,0.699 0 ,16 ,256 ,127 ,192 ,23 ,7.1 ,10.586 ,0.671 0 ,16 ,256 ,127 ,208 ,23 ,6.854 ,10.525 ,0.651 0 ,16 ,256 ,127 ,240 ,23 ,7.021 ,10.085 ,0.696 0 ,16 ,256 ,127 ,256 ,23 ,6.91 ,10.876 ,0.635 0 ,16 ,256 ,127 ,288 ,23 ,6.844 ,9.532 ,0.718 0 ,16 ,256 ,127 ,48 ,23 ,8.751 ,11.453 ,0.764 0 ,16 ,256 ,127 ,64 ,23 ,8.093 ,10.078 ,0.803 0 ,16 ,256 ,127 ,96 ,23 ,8.113 ,11.152 ,0.727 0 ,16 ,26 ,127 ,25 ,23 ,3.178 ,3.445 ,0.922 0 ,16 ,27 ,127 ,26 ,23 ,3.129 ,3.313 ,0.944 0 ,16 ,272 ,127 ,128 ,23 ,7.529 ,9.611 ,0.783 0 ,16 ,272 ,127 ,240 ,23 ,7.257 ,11.017 ,0.659 0 ,16 ,272 ,127 ,256 ,23 ,8.071 ,10.838 ,0.745 0 ,16 ,272 ,127 ,32 ,23 ,8.546 ,11.136 ,0.767 0 ,16 ,272 ,127 ,512 ,23 ,8.012 ,10.355 ,0.774 0 ,16 ,28 ,127 ,27 ,23 ,3.161 ,3.163 ,0.999 0 ,16 ,288 ,127 ,272 ,23 ,8.095 ,9.776 ,0.828 0 ,16 ,29 ,127 ,28 ,23 ,3.146 ,3.391 ,0.928 0 ,16 ,3 ,127 ,2 ,23 ,3.178 ,3.3 ,0.963 0 ,16 ,30 ,127 ,29 ,23 ,3.161 ,3.427 ,0.922 0 ,16 ,304 ,127 ,16 ,23 ,8.915 ,11.096 ,0.803 0 ,16 ,304 ,127 ,256 ,23 ,8.059 ,11.274 ,0.715 0 ,16 ,304 ,127 ,64 ,23 ,8.13 ,9.605 ,0.846 0 ,16 ,31 ,127 ,30 ,23 ,3.183 ,3.352 ,0.95 0 ,16 ,32 ,127 ,0 ,23 ,3.231 ,3.34 ,0.967 0 ,16 ,32 ,127 ,128 ,23 ,3.129 ,3.508 ,0.892 0 ,16 ,32 ,127 ,144 ,23 ,3.102 ,3.278 ,0.946 0 ,16 ,32 ,127 ,16 ,23 ,3.145 ,3.114 ,1.01 0 ,16 ,32 ,127 ,192 ,23 ,3.145 ,3.366 ,0.934 0 ,16 ,32 ,127 ,240 ,23 ,3.13 ,3.364 ,0.93 0 ,16 ,32 ,127 ,288 ,23 ,3.114 ,3.483 ,0.894 0 ,16 ,32 ,127 ,31 ,23 ,3.261 ,3.327 ,0.98 0 ,16 ,32 ,127 ,32 ,23 ,3.314 ,3.168 ,1.046 0 ,16 ,32 ,127 ,48 ,23 ,3.161 ,3.262 ,0.969 0 ,16 ,32 ,127 ,96 ,23 ,3.122 ,3.212 ,0.972 0 ,16 ,320 ,127 ,128 ,23 ,7.366 ,11.526 ,0.639 0 ,16 ,320 ,127 ,192 ,23 ,7.328 ,10.465 ,0.7 0 ,16 ,320 ,127 ,32 ,23 ,8.567 ,12.111 ,0.707 0 ,16 ,320 ,127 ,512 ,23 ,8.91 ,10.598 ,0.841 0 ,16 ,352 ,127 ,256 ,23 ,9.068 ,11.707 ,0.775 0 ,16 ,352 ,127 ,64 ,23 ,8.151 ,10.747 ,0.758 0 ,16 ,368 ,127 ,128 ,23 ,7.496 ,10.471 ,0.716 0 ,16 ,368 ,127 ,144 ,23 ,7.333 ,11.062 ,0.663 0 ,16 ,368 ,127 ,512 ,23 ,8.118 ,11.506 ,0.705 0 ,16 ,4 ,127 ,3 ,23 ,3.193 ,3.297 ,0.969 0 ,16 ,400 ,127 ,256 ,23 ,9.651 ,14.36 ,0.672 0 ,16 ,416 ,127 ,128 ,23 ,9.108 ,11.58 ,0.786 0 ,16 ,416 ,127 ,512 ,23 ,10.225 ,13.17 ,0.776 0 ,16 ,416 ,127 ,96 ,23 ,9.482 ,12.78 ,0.742 0 ,16 ,448 ,127 ,256 ,23 ,9.795 ,14.125 ,0.693 0 ,16 ,464 ,127 ,48 ,23 ,10.255 ,14.002 ,0.732 0 ,16 ,464 ,127 ,512 ,23 ,11.831 ,14.218 ,0.832 0 ,16 ,48 ,127 ,32 ,23 ,3.16 ,3.367 ,0.939 0 ,16 ,496 ,127 ,256 ,23 ,9.657 ,13.671 ,0.706 0 ,16 ,5 ,127 ,4 ,23 ,3.186 ,3.492 ,0.912 0 ,16 ,512 ,127 ,0 ,23 ,12.048 ,15.64 ,0.77 0 ,16 ,512 ,127 ,144 ,23 ,10.972 ,14.349 ,0.765 0 ,16 ,512 ,127 ,192 ,23 ,10.035 ,14.292 ,0.702 0 ,16 ,512 ,127 ,224 ,23 ,9.99 ,14.743 ,0.678 0 ,16 ,512 ,127 ,240 ,23 ,11.028 ,15.141 ,0.728 0 ,16 ,512 ,127 ,272 ,23 ,11.218 ,15.102 ,0.743 0 ,16 ,512 ,127 ,288 ,23 ,11.271 ,15.712 ,0.717 0 ,16 ,512 ,127 ,320 ,23 ,10.968 ,15.475 ,0.709 0 ,16 ,512 ,127 ,368 ,23 ,11.241 ,14.911 ,0.754 0 ,16 ,512 ,127 ,416 ,23 ,11.936 ,16.568 ,0.72 0 ,16 ,512 ,127 ,464 ,23 ,11.853 ,17.239 ,0.688 0 ,16 ,512 ,127 ,48 ,23 ,11.926 ,14.573 ,0.818 0 ,16 ,512 ,127 ,512 ,23 ,12.265 ,16.872 ,0.727 0 ,16 ,512 ,127 ,96 ,23 ,11.607 ,14.806 ,0.784 0 ,16 ,544 ,127 ,256 ,23 ,11.361 ,15.435 ,0.736 0 ,16 ,560 ,127 ,512 ,23 ,12.756 ,16.698 ,0.764 0 ,16 ,6 ,127 ,5 ,23 ,3.185 ,3.305 ,0.964 0 ,16 ,608 ,127 ,512 ,23 ,12.317 ,18.386 ,0.67 0 ,16 ,64 ,127 ,0 ,23 ,4.466 ,5.478 ,0.815 0 ,16 ,64 ,127 ,144 ,23 ,4.425 ,4.982 ,0.888 0 ,16 ,64 ,127 ,16 ,23 ,4.49 ,5.02 ,0.894 0 ,16 ,64 ,127 ,192 ,23 ,4.419 ,5.075 ,0.871 0 ,16 ,64 ,127 ,240 ,23 ,4.382 ,5.779 ,0.758 0 ,16 ,64 ,127 ,256 ,23 ,4.38 ,4.957 ,0.884 0 ,16 ,64 ,127 ,288 ,23 ,4.425 ,5.432 ,0.815 0 ,16 ,64 ,127 ,48 ,23 ,4.441 ,5.016 ,0.885 0 ,16 ,64 ,127 ,64 ,23 ,4.465 ,4.973 ,0.898 0 ,16 ,64 ,127 ,96 ,23 ,4.47 ,5.006 ,0.893 0 ,16 ,656 ,127 ,512 ,23 ,14.392 ,19.933 ,0.722 0 ,16 ,7 ,127 ,6 ,23 ,3.177 ,3.253 ,0.976 0 ,16 ,704 ,127 ,512 ,23 ,14.324 ,20.486 ,0.699 0 ,16 ,736 ,127 ,1024 ,23 ,15.263 ,20.274 ,0.753 0 ,16 ,736 ,127 ,288 ,23 ,13.001 ,18.038 ,0.721 0 ,16 ,752 ,127 ,512 ,23 ,14.322 ,20.224 ,0.708 0 ,16 ,784 ,127 ,1024 ,23 ,17.573 ,21.717 ,0.809 0 ,16 ,784 ,127 ,240 ,23 ,13.68 ,17.887 ,0.765 0 ,16 ,8 ,127 ,7 ,23 ,3.145 ,3.262 ,0.964 0 ,16 ,80 ,127 ,128 ,23 ,5.008 ,4.269 ,1.173 0 ,16 ,80 ,127 ,32 ,23 ,4.699 ,5.069 ,0.927 0 ,16 ,80 ,127 ,48 ,23 ,4.499 ,5.031 ,0.894 0 ,16 ,80 ,127 ,64 ,23 ,5.065 ,4.132 ,1.226 0 ,16 ,800 ,127 ,512 ,23 ,16.19 ,22.15 ,0.731 0 ,16 ,832 ,127 ,1024 ,23 ,17.574 ,23.476 ,0.749 0 ,16 ,832 ,127 ,192 ,23 ,14.099 ,18.214 ,0.774 0 ,16 ,880 ,127 ,1024 ,23 ,18.259 ,22.914 ,0.797 0 ,16 ,880 ,127 ,144 ,23 ,14.059 ,18.869 ,0.745 0 ,16 ,9 ,127 ,8 ,23 ,3.161 ,3.323 ,0.951 0 ,16 ,928 ,127 ,1024 ,23 ,18.622 ,25.614 ,0.727 0 ,16 ,928 ,127 ,96 ,23 ,16.562 ,19.474 ,0.85 0 ,16 ,96 ,127 ,80 ,23 ,5.057 ,4.359 ,1.16 0 ,16 ,976 ,127 ,1024 ,23 ,18.923 ,26.838 ,0.705 0 ,16 ,976 ,127 ,48 ,23 ,17.096 ,21.254 ,0.804 0 ,256 ,1 ,127 ,0 ,23 ,3.146 ,3.214 ,0.979 0 ,256 ,10 ,127 ,9 ,23 ,3.137 ,3.178 ,0.987 0 ,256 ,1024 ,127 ,0 ,23 ,19.994 ,21.784 ,0.918 0 ,256 ,1024 ,127 ,1024 ,23 ,21.983 ,28.581 ,0.769 0 ,256 ,1024 ,127 ,144 ,23 ,18.137 ,20.588 ,0.881 0 ,256 ,1024 ,127 ,192 ,23 ,17.06 ,25.282 ,0.675 0 ,256 ,1024 ,127 ,240 ,23 ,17.087 ,21.437 ,0.797 0 ,256 ,1024 ,127 ,288 ,23 ,18.225 ,24.604 ,0.741 0 ,256 ,1024 ,127 ,48 ,23 ,19.586 ,21.465 ,0.912 0 ,256 ,1024 ,127 ,736 ,23 ,19.255 ,25.27 ,0.762 0 ,256 ,1024 ,127 ,784 ,23 ,20.553 ,27.743 ,0.741 0 ,256 ,1024 ,127 ,832 ,23 ,19.867 ,29.565 ,0.672 0 ,256 ,1024 ,127 ,880 ,23 ,19.854 ,29.602 ,0.671 0 ,256 ,1024 ,127 ,928 ,23 ,21.875 ,27.64 ,0.791 0 ,256 ,1024 ,127 ,96 ,23 ,19.071 ,21.496 ,0.887 0 ,256 ,1024 ,127 ,976 ,23 ,21.498 ,27.902 ,0.77 0 ,256 ,1072 ,127 ,1024 ,23 ,20.903 ,27.906 ,0.749 0 ,256 ,11 ,127 ,10 ,23 ,3.144 ,3.305 ,0.951 0 ,256 ,112 ,127 ,144 ,23 ,5.07 ,4.641 ,1.092 0 ,256 ,112 ,127 ,16 ,23 ,4.403 ,5.206 ,0.846 0 ,256 ,112 ,127 ,256 ,23 ,4.957 ,4.315 ,1.149 0 ,256 ,112 ,127 ,64 ,23 ,5.045 ,3.835 ,1.315 0 ,256 ,112 ,127 ,96 ,23 ,5.057 ,4.119 ,1.228 0 ,256 ,1120 ,127 ,1024 ,23 ,21.671 ,28.532 ,0.76 0 ,256 ,1168 ,127 ,1024 ,23 ,24.189 ,34.961 ,0.692 0 ,256 ,12 ,127 ,11 ,23 ,3.145 ,3.541 ,0.888 0 ,256 ,1216 ,127 ,1024 ,23 ,25.203 ,35.574 ,0.708 0 ,256 ,1264 ,127 ,1024 ,23 ,24.902 ,34.122 ,0.73 0 ,256 ,128 ,127 ,0 ,23 ,5.888 ,8.837 ,0.666 0 ,256 ,128 ,127 ,112 ,23 ,5.258 ,7.4 ,0.711 0 ,256 ,128 ,127 ,128 ,23 ,5.34 ,7.324 ,0.729 0 ,256 ,128 ,127 ,144 ,23 ,5.227 ,7.499 ,0.697 0 ,256 ,128 ,127 ,192 ,23 ,5.338 ,8.648 ,0.617 0 ,256 ,128 ,127 ,240 ,23 ,5.691 ,8.385 ,0.679 0 ,256 ,128 ,127 ,288 ,23 ,6.039 ,8.97 ,0.673 0 ,256 ,128 ,127 ,32 ,23 ,5.875 ,8.509 ,0.69 0 ,256 ,128 ,127 ,48 ,23 ,6.03 ,8.378 ,0.72 0 ,256 ,128 ,127 ,80 ,23 ,5.997 ,8.062 ,0.744 0 ,256 ,128 ,127 ,96 ,23 ,5.271 ,8.035 ,0.656 0 ,256 ,13 ,127 ,12 ,23 ,3.152 ,3.482 ,0.905 0 ,256 ,1312 ,127 ,1024 ,23 ,26.122 ,32.511 ,0.803 0 ,256 ,14 ,127 ,13 ,23 ,3.161 ,3.427 ,0.922 0 ,256 ,144 ,127 ,128 ,23 ,5.318 ,6.503 ,0.818 0 ,256 ,15 ,127 ,14 ,23 ,3.145 ,3.358 ,0.936 0 ,256 ,16 ,127 ,0 ,23 ,3.14 ,3.331 ,0.943 0 ,256 ,16 ,127 ,144 ,23 ,3.145 ,3.491 ,0.901 0 ,256 ,16 ,127 ,15 ,23 ,3.145 ,3.273 ,0.961 0 ,256 ,16 ,127 ,16 ,23 ,3.145 ,3.349 ,0.939 0 ,256 ,16 ,127 ,192 ,23 ,3.145 ,3.114 ,1.01 0 ,256 ,16 ,127 ,240 ,23 ,3.124 ,3.264 ,0.957 0 ,256 ,16 ,127 ,256 ,23 ,3.099 ,3.717 ,0.834 0 ,256 ,16 ,127 ,288 ,23 ,3.145 ,3.894 ,0.808 0 ,256 ,16 ,127 ,48 ,23 ,3.17 ,3.366 ,0.942 0 ,256 ,16 ,127 ,64 ,23 ,3.16 ,3.366 ,0.939 0 ,256 ,16 ,127 ,96 ,23 ,3.144 ,3.145 ,1.0 0 ,256 ,160 ,127 ,144 ,23 ,5.181 ,6.164 ,0.841 0 ,256 ,160 ,127 ,16 ,23 ,5.727 ,8.65 ,0.662 0 ,256 ,160 ,127 ,256 ,23 ,5.121 ,6.453 ,0.794 0 ,256 ,160 ,127 ,64 ,23 ,5.819 ,7.465 ,0.78 0 ,256 ,160 ,127 ,96 ,23 ,5.101 ,8.167 ,0.625 0 ,256 ,17 ,127 ,16 ,23 ,3.16 ,3.323 ,0.951 0 ,256 ,176 ,127 ,128 ,23 ,5.168 ,6.314 ,0.818 0 ,256 ,176 ,127 ,160 ,23 ,5.22 ,6.309 ,0.827 0 ,256 ,176 ,127 ,32 ,23 ,5.722 ,8.539 ,0.67 0 ,256 ,1760 ,127 ,2048 ,23 ,32.889 ,43.99 ,0.748 0 ,256 ,1760 ,127 ,288 ,23 ,26.559 ,32.553 ,0.816 0 ,256 ,18 ,127 ,17 ,23 ,3.202 ,3.454 ,0.927 0 ,256 ,1808 ,127 ,2048 ,23 ,34.767 ,52.228 ,0.666 0 ,256 ,1808 ,127 ,240 ,23 ,27.299 ,31.891 ,0.856 0 ,256 ,1856 ,127 ,192 ,23 ,27.555 ,31.557 ,0.873 0 ,256 ,1856 ,127 ,2048 ,23 ,35.551 ,49.377 ,0.72 0 ,256 ,19 ,127 ,18 ,23 ,3.137 ,3.339 ,0.94 0 ,256 ,1904 ,127 ,144 ,23 ,28.06 ,31.927 ,0.879 0 ,256 ,1904 ,127 ,2048 ,23 ,35.478 ,47.111 ,0.753 0 ,256 ,192 ,127 ,176 ,23 ,5.577 ,7.232 ,0.771 0 ,256 ,1952 ,127 ,2048 ,23 ,37.287 ,59.21 ,0.63 0 ,256 ,1952 ,127 ,96 ,23 ,30.677 ,33.516 ,0.915 0 ,256 ,2 ,127 ,1 ,23 ,3.145 ,3.325 ,0.946 0 ,256 ,20 ,127 ,19 ,23 ,3.227 ,3.314 ,0.974 0 ,256 ,2000 ,127 ,2048 ,23 ,37.38 ,50.221 ,0.744 0 ,256 ,2000 ,127 ,48 ,23 ,30.747 ,33.806 ,0.91 0 ,256 ,2048 ,127 ,0 ,23 ,33.031 ,35.835 ,0.922 0 ,256 ,2048 ,127 ,1024 ,23 ,36.334 ,44.119 ,0.824 0 ,256 ,2048 ,127 ,128 ,23 ,31.88 ,35.272 ,0.904 0 ,256 ,2048 ,127 ,144 ,23 ,31.578 ,34.847 ,0.906 0 ,256 ,2048 ,127 ,1760 ,23 ,38.149 ,48.362 ,0.789 0 ,256 ,2048 ,127 ,1808 ,23 ,43.271 ,50.273 ,0.861 0 ,256 ,2048 ,127 ,1856 ,23 ,42.912 ,50.014 ,0.858 0 ,256 ,2048 ,127 ,1904 ,23 ,51.249 ,50.177 ,1.021 0 ,256 ,2048 ,127 ,192 ,23 ,31.015 ,36.799 ,0.843 0 ,256 ,2048 ,127 ,1952 ,23 ,51.777 ,51.757 ,1.0 0 ,256 ,2048 ,127 ,2000 ,23 ,60.602 ,60.728 ,0.998 0 ,256 ,2048 ,127 ,2048 ,23 ,51.292 ,56.859 ,0.902 0 ,256 ,2048 ,127 ,240 ,23 ,31.21 ,35.351 ,0.883 0 ,256 ,2048 ,127 ,256 ,23 ,32.582 ,36.327 ,0.897 0 ,256 ,2048 ,127 ,288 ,23 ,32.641 ,37.189 ,0.878 0 ,256 ,2048 ,127 ,32 ,23 ,33.0 ,35.158 ,0.939 0 ,256 ,2048 ,127 ,4096 ,23 ,46.652 ,54.16 ,0.861 0 ,256 ,2048 ,127 ,48 ,23 ,33.248 ,37.148 ,0.895 0 ,256 ,2048 ,127 ,512 ,23 ,33.596 ,39.634 ,0.848 0 ,256 ,2048 ,127 ,64 ,23 ,32.438 ,35.412 ,0.916 0 ,256 ,2048 ,127 ,96 ,23 ,32.241 ,36.44 ,0.885 0 ,256 ,208 ,127 ,16 ,23 ,6.961 ,9.348 ,0.745 0 ,256 ,208 ,127 ,192 ,23 ,5.231 ,7.171 ,0.729 0 ,256 ,208 ,127 ,256 ,23 ,4.941 ,7.662 ,0.645 0 ,256 ,208 ,127 ,48 ,23 ,6.592 ,9.107 ,0.724 0 ,256 ,208 ,127 ,64 ,23 ,6.441 ,8.076 ,0.798 0 ,256 ,2096 ,127 ,2048 ,23 ,40.313 ,56.168 ,0.718 0 ,256 ,21 ,127 ,20 ,23 ,3.153 ,3.4 ,0.927 0 ,256 ,2144 ,127 ,2048 ,23 ,57.465 ,55.629 ,1.033 0 ,256 ,2192 ,127 ,2048 ,23 ,47.3 ,55.284 ,0.856 0 ,256 ,22 ,127 ,21 ,23 ,3.195 ,3.254 ,0.982 0 ,256 ,224 ,127 ,128 ,23 ,5.415 ,7.406 ,0.731 0 ,256 ,224 ,127 ,208 ,23 ,5.4 ,7.517 ,0.718 0 ,256 ,224 ,127 ,288 ,23 ,5.108 ,8.419 ,0.607 0 ,256 ,224 ,127 ,32 ,23 ,6.738 ,9.569 ,0.704 0 ,256 ,224 ,127 ,512 ,23 ,5.075 ,7.537 ,0.673 0 ,256 ,2240 ,127 ,2048 ,23 ,53.873 ,55.138 ,0.977 0 ,256 ,2288 ,127 ,2048 ,23 ,54.51 ,58.666 ,0.929 0 ,256 ,23 ,127 ,22 ,23 ,3.144 ,3.145 ,1.0 0 ,256 ,2336 ,127 ,2048 ,23 ,61.72 ,56.847 ,1.086 0 ,256 ,24 ,127 ,23 ,23 ,3.145 ,3.313 ,0.949 0 ,256 ,240 ,127 ,224 ,23 ,5.183 ,6.867 ,0.755 0 ,256 ,25 ,127 ,24 ,23 ,3.169 ,3.333 ,0.951 0 ,256 ,256 ,127 ,0 ,23 ,8.681 ,12.197 ,0.712 0 ,256 ,256 ,127 ,112 ,23 ,8.259 ,10.596 ,0.779 0 ,256 ,256 ,127 ,144 ,23 ,7.334 ,9.898 ,0.741 0 ,256 ,256 ,127 ,16 ,23 ,9.449 ,12.266 ,0.77 0 ,256 ,256 ,127 ,160 ,23 ,7.509 ,10.0 ,0.751 0 ,256 ,256 ,127 ,192 ,23 ,6.896 ,9.401 ,0.734 0 ,256 ,256 ,127 ,208 ,23 ,6.825 ,10.7 ,0.638 0 ,256 ,256 ,127 ,240 ,23 ,7.694 ,10.464 ,0.735 0 ,256 ,256 ,127 ,256 ,23 ,7.033 ,9.86 ,0.713 0 ,256 ,256 ,127 ,288 ,23 ,7.227 ,9.406 ,0.768 0 ,256 ,256 ,127 ,48 ,23 ,8.621 ,12.415 ,0.694 0 ,256 ,256 ,127 ,64 ,23 ,8.982 ,10.854 ,0.828 0 ,256 ,256 ,127 ,96 ,23 ,8.387 ,10.322 ,0.813 0 ,256 ,26 ,127 ,25 ,23 ,3.16 ,3.305 ,0.956 0 ,256 ,27 ,127 ,26 ,23 ,3.129 ,3.261 ,0.959 0 ,256 ,272 ,127 ,128 ,23 ,9.172 ,9.648 ,0.951 0 ,256 ,272 ,127 ,240 ,23 ,6.991 ,11.363 ,0.615 0 ,256 ,272 ,127 ,256 ,23 ,8.142 ,10.487 ,0.776 0 ,256 ,272 ,127 ,32 ,23 ,10.148 ,11.691 ,0.868 0 ,256 ,272 ,127 ,512 ,23 ,8.368 ,10.967 ,0.763 0 ,256 ,28 ,127 ,27 ,23 ,3.186 ,3.313 ,0.961 0 ,256 ,288 ,127 ,272 ,23 ,7.975 ,10.551 ,0.756 0 ,256 ,29 ,127 ,28 ,23 ,3.144 ,3.374 ,0.932 0 ,256 ,3 ,127 ,2 ,23 ,3.145 ,3.398 ,0.925 0 ,256 ,30 ,127 ,29 ,23 ,3.152 ,3.425 ,0.92 0 ,256 ,304 ,127 ,16 ,23 ,10.272 ,11.657 ,0.881 0 ,256 ,304 ,127 ,256 ,23 ,8.008 ,10.999 ,0.728 0 ,256 ,304 ,127 ,64 ,23 ,9.544 ,9.819 ,0.972 0 ,256 ,31 ,127 ,30 ,23 ,3.145 ,3.23 ,0.974 0 ,256 ,32 ,127 ,0 ,23 ,3.145 ,4.03 ,0.78 0 ,256 ,32 ,127 ,128 ,23 ,3.13 ,3.263 ,0.959 0 ,256 ,32 ,127 ,144 ,23 ,3.145 ,3.246 ,0.969 0 ,256 ,32 ,127 ,16 ,23 ,3.145 ,3.544 ,0.887 0 ,256 ,32 ,127 ,192 ,23 ,3.144 ,3.262 ,0.964 0 ,256 ,32 ,127 ,240 ,23 ,3.144 ,3.113 ,1.01 0 ,256 ,32 ,127 ,288 ,23 ,3.144 ,3.099 ,1.015 0 ,256 ,32 ,127 ,31 ,23 ,3.152 ,3.289 ,0.958 0 ,256 ,32 ,127 ,32 ,23 ,3.14 ,3.186 ,0.986 0 ,256 ,32 ,127 ,48 ,23 ,3.144 ,3.23 ,0.973 0 ,256 ,32 ,127 ,96 ,23 ,3.145 ,3.265 ,0.963 0 ,256 ,320 ,127 ,128 ,23 ,10.148 ,10.832 ,0.937 0 ,256 ,320 ,127 ,192 ,23 ,7.227 ,10.995 ,0.657 0 ,256 ,320 ,127 ,32 ,23 ,11.107 ,12.936 ,0.859 0 ,256 ,320 ,127 ,512 ,23 ,8.956 ,10.671 ,0.839 0 ,256 ,352 ,127 ,256 ,23 ,9.058 ,11.587 ,0.782 0 ,256 ,352 ,127 ,64 ,23 ,10.604 ,11.707 ,0.906 0 ,256 ,368 ,127 ,128 ,23 ,10.45 ,11.429 ,0.914 0 ,256 ,368 ,127 ,144 ,23 ,7.747 ,11.321 ,0.684 0 ,256 ,368 ,127 ,512 ,23 ,9.028 ,11.435 ,0.789 0 ,256 ,4 ,127 ,3 ,23 ,3.168 ,3.289 ,0.963 0 ,256 ,400 ,127 ,256 ,23 ,11.227 ,14.437 ,0.778 0 ,256 ,416 ,127 ,128 ,23 ,11.666 ,13.116 ,0.889 0 ,256 ,416 ,127 ,512 ,23 ,10.019 ,12.995 ,0.771 0 ,256 ,416 ,127 ,96 ,23 ,9.753 ,12.526 ,0.779 0 ,256 ,448 ,127 ,256 ,23 ,12.314 ,13.949 ,0.883 0 ,256 ,464 ,127 ,48 ,23 ,10.197 ,14.128 ,0.722 0 ,256 ,464 ,127 ,512 ,23 ,10.467 ,14.219 ,0.736 0 ,256 ,48 ,127 ,32 ,23 ,3.145 ,3.189 ,0.986 0 ,256 ,496 ,127 ,256 ,23 ,11.836 ,14.011 ,0.845 0 ,256 ,5 ,127 ,4 ,23 ,3.145 ,3.411 ,0.922 0 ,256 ,512 ,127 ,0 ,23 ,12.587 ,15.042 ,0.837 0 ,256 ,512 ,127 ,144 ,23 ,11.395 ,13.993 ,0.814 0 ,256 ,512 ,127 ,192 ,23 ,9.988 ,14.644 ,0.682 0 ,256 ,512 ,127 ,224 ,23 ,9.985 ,15.975 ,0.625 0 ,256 ,512 ,127 ,240 ,23 ,10.083 ,14.035 ,0.718 0 ,256 ,512 ,127 ,272 ,23 ,11.22 ,16.058 ,0.699 0 ,256 ,512 ,127 ,288 ,23 ,11.384 ,15.452 ,0.737 0 ,256 ,512 ,127 ,320 ,23 ,10.717 ,15.884 ,0.675 0 ,256 ,512 ,127 ,368 ,23 ,10.69 ,15.46 ,0.691 0 ,256 ,512 ,127 ,416 ,23 ,13.053 ,16.36 ,0.798 0 ,256 ,512 ,127 ,464 ,23 ,13.77 ,15.835 ,0.87 0 ,256 ,512 ,127 ,48 ,23 ,12.562 ,15.047 ,0.835 0 ,256 ,512 ,127 ,512 ,23 ,13.772 ,16.889 ,0.815 0 ,256 ,512 ,127 ,96 ,23 ,12.085 ,13.615 ,0.888 0 ,256 ,544 ,127 ,256 ,23 ,12.012 ,15.513 ,0.774 0 ,256 ,560 ,127 ,512 ,23 ,12.756 ,16.063 ,0.794 0 ,256 ,6 ,127 ,5 ,23 ,3.178 ,3.238 ,0.981 0 ,256 ,608 ,127 ,512 ,23 ,12.669 ,17.017 ,0.745 0 ,256 ,64 ,127 ,0 ,23 ,4.403 ,5.565 ,0.791 0 ,256 ,64 ,127 ,144 ,23 ,4.545 ,4.981 ,0.912 0 ,256 ,64 ,127 ,16 ,23 ,4.47 ,4.998 ,0.894 0 ,256 ,64 ,127 ,192 ,23 ,4.466 ,4.969 ,0.899 0 ,256 ,64 ,127 ,240 ,23 ,4.545 ,6.049 ,0.751 0 ,256 ,64 ,127 ,256 ,23 ,4.477 ,4.908 ,0.912 0 ,256 ,64 ,127 ,288 ,23 ,4.522 ,5.154 ,0.877 0 ,256 ,64 ,127 ,48 ,23 ,4.414 ,5.14 ,0.859 0 ,256 ,64 ,127 ,64 ,23 ,4.523 ,5.051 ,0.895 0 ,256 ,64 ,127 ,96 ,23 ,4.667 ,5.006 ,0.932 0 ,256 ,656 ,127 ,512 ,23 ,15.319 ,20.812 ,0.736 0 ,256 ,7 ,127 ,6 ,23 ,3.153 ,3.187 ,0.989 0 ,256 ,704 ,127 ,512 ,23 ,15.843 ,20.638 ,0.768 0 ,256 ,736 ,127 ,1024 ,23 ,14.656 ,19.421 ,0.755 0 ,256 ,736 ,127 ,288 ,23 ,12.779 ,18.999 ,0.673 0 ,256 ,752 ,127 ,512 ,23 ,15.777 ,21.166 ,0.745 0 ,256 ,784 ,127 ,1024 ,23 ,16.668 ,26.065 ,0.639 0 ,256 ,784 ,127 ,240 ,23 ,13.586 ,18.55 ,0.732 0 ,256 ,8 ,127 ,7 ,23 ,3.145 ,3.306 ,0.951 0 ,256 ,80 ,127 ,128 ,23 ,5.302 ,4.408 ,1.203 0 ,256 ,80 ,127 ,32 ,23 ,4.686 ,5.006 ,0.936 0 ,256 ,80 ,127 ,48 ,23 ,5.019 ,5.006 ,1.003 0 ,256 ,80 ,127 ,64 ,23 ,5.089 ,4.077 ,1.248 0 ,256 ,800 ,127 ,512 ,23 ,16.956 ,22.366 ,0.758 0 ,256 ,832 ,127 ,1024 ,23 ,17.372 ,23.477 ,0.74 0 ,256 ,832 ,127 ,192 ,23 ,13.515 ,18.271 ,0.74 0 ,256 ,880 ,127 ,1024 ,23 ,17.435 ,26.974 ,0.646 0 ,256 ,880 ,127 ,144 ,23 ,13.977 ,21.575 ,0.648 0 ,256 ,9 ,127 ,8 ,23 ,3.13 ,3.298 ,0.949 0 ,256 ,928 ,127 ,1024 ,23 ,18.427 ,24.849 ,0.742 0 ,256 ,928 ,127 ,96 ,23 ,16.439 ,20.171 ,0.815 0 ,256 ,96 ,127 ,80 ,23 ,5.082 ,4.669 ,1.089 0 ,256 ,976 ,127 ,1024 ,23 ,20.996 ,26.154 ,0.803 0 ,256 ,976 ,127 ,48 ,23 ,17.031 ,20.964 ,0.812 0 ,4 ,1 ,127 ,0 ,23 ,3.162 ,3.298 ,0.959 0 ,4 ,10 ,127 ,9 ,23 ,3.185 ,3.322 ,0.959 0 ,4 ,1024 ,127 ,0 ,23 ,19.798 ,22.015 ,0.899 0 ,4 ,1024 ,127 ,1024 ,23 ,20.387 ,24.541 ,0.831 0 ,4 ,1024 ,127 ,144 ,23 ,17.878 ,21.999 ,0.813 0 ,4 ,1024 ,127 ,192 ,23 ,17.345 ,22.191 ,0.782 0 ,4 ,1024 ,127 ,240 ,23 ,17.3 ,21.851 ,0.792 0 ,4 ,1024 ,127 ,288 ,23 ,18.659 ,23.492 ,0.794 0 ,4 ,1024 ,127 ,48 ,23 ,19.771 ,21.374 ,0.925 0 ,4 ,1024 ,127 ,736 ,23 ,19.632 ,27.25 ,0.72 0 ,4 ,1024 ,127 ,784 ,23 ,19.537 ,25.063 ,0.78 0 ,4 ,1024 ,127 ,832 ,23 ,20.347 ,27.578 ,0.738 0 ,4 ,1024 ,127 ,880 ,23 ,20.138 ,26.659 ,0.755 0 ,4 ,1024 ,127 ,928 ,23 ,20.246 ,25.858 ,0.783 0 ,4 ,1024 ,127 ,96 ,23 ,18.607 ,23.141 ,0.804 0 ,4 ,1024 ,127 ,976 ,23 ,20.446 ,27.822 ,0.735 0 ,4 ,1072 ,127 ,1024 ,23 ,19.632 ,26.754 ,0.734 0 ,4 ,11 ,127 ,10 ,23 ,3.144 ,3.366 ,0.934 0 ,4 ,112 ,127 ,144 ,23 ,5.008 ,4.143 ,1.209 0 ,4 ,112 ,127 ,16 ,23 ,4.793 ,5.226 ,0.917 0 ,4 ,112 ,127 ,256 ,23 ,5.006 ,4.205 ,1.191 0 ,4 ,112 ,127 ,64 ,23 ,5.033 ,3.76 ,1.339 0 ,4 ,112 ,127 ,96 ,23 ,5.03 ,4.083 ,1.232 0 ,4 ,1120 ,127 ,1024 ,23 ,21.229 ,28.983 ,0.732 0 ,4 ,1168 ,127 ,1024 ,23 ,23.294 ,31.851 ,0.731 0 ,4 ,12 ,127 ,11 ,23 ,3.145 ,3.3 ,0.953 0 ,4 ,1216 ,127 ,1024 ,23 ,22.808 ,30.774 ,0.741 0 ,4 ,1264 ,127 ,1024 ,23 ,22.829 ,30.015 ,0.761 0 ,4 ,128 ,127 ,0 ,23 ,5.875 ,8.679 ,0.677 0 ,4 ,128 ,127 ,112 ,23 ,5.429 ,7.169 ,0.757 0 ,4 ,128 ,127 ,128 ,23 ,5.21 ,7.586 ,0.687 0 ,4 ,128 ,127 ,144 ,23 ,5.433 ,7.332 ,0.741 0 ,4 ,128 ,127 ,192 ,23 ,5.176 ,8.312 ,0.623 0 ,4 ,128 ,127 ,240 ,23 ,5.132 ,8.998 ,0.57 0 ,4 ,128 ,127 ,288 ,23 ,5.104 ,9.468 ,0.539 0 ,4 ,128 ,127 ,32 ,23 ,5.724 ,8.499 ,0.674 0 ,4 ,128 ,127 ,48 ,23 ,5.891 ,8.831 ,0.667 0 ,4 ,128 ,127 ,80 ,23 ,5.306 ,7.753 ,0.684 0 ,4 ,128 ,127 ,96 ,23 ,5.329 ,7.752 ,0.687 0 ,4 ,13 ,127 ,12 ,23 ,3.161 ,3.383 ,0.934 0 ,4 ,1312 ,127 ,1024 ,23 ,24.76 ,31.739 ,0.78 0 ,4 ,14 ,127 ,13 ,23 ,3.145 ,3.262 ,0.964 0 ,4 ,144 ,127 ,128 ,23 ,5.193 ,6.291 ,0.825 0 ,4 ,15 ,127 ,14 ,23 ,3.195 ,3.331 ,0.959 0 ,4 ,16 ,127 ,0 ,23 ,3.145 ,3.261 ,0.965 0 ,4 ,16 ,127 ,144 ,23 ,3.829 ,3.872 ,0.989 0 ,4 ,16 ,127 ,15 ,23 ,3.193 ,3.306 ,0.966 0 ,4 ,16 ,127 ,16 ,23 ,3.151 ,3.338 ,0.944 0 ,4 ,16 ,127 ,192 ,23 ,3.793 ,3.802 ,0.998 0 ,4 ,16 ,127 ,240 ,23 ,3.794 ,3.737 ,1.015 0 ,4 ,16 ,127 ,256 ,23 ,3.793 ,3.954 ,0.959 0 ,4 ,16 ,127 ,288 ,23 ,3.773 ,4.71 ,0.801 0 ,4 ,16 ,127 ,48 ,23 ,3.146 ,3.452 ,0.911 0 ,4 ,16 ,127 ,64 ,23 ,3.792 ,4.271 ,0.888 0 ,4 ,16 ,127 ,96 ,23 ,3.794 ,3.874 ,0.98 0 ,4 ,160 ,127 ,144 ,23 ,5.216 ,6.293 ,0.829 0 ,4 ,160 ,127 ,16 ,23 ,5.818 ,8.62 ,0.675 0 ,4 ,160 ,127 ,256 ,23 ,5.166 ,6.405 ,0.806 0 ,4 ,160 ,127 ,64 ,23 ,5.283 ,8.162 ,0.647 0 ,4 ,160 ,127 ,96 ,23 ,5.323 ,7.597 ,0.701 0 ,4 ,17 ,127 ,16 ,23 ,3.177 ,3.349 ,0.949 0 ,4 ,176 ,127 ,128 ,23 ,5.154 ,6.772 ,0.761 0 ,4 ,176 ,127 ,160 ,23 ,5.29 ,6.374 ,0.83 0 ,4 ,176 ,127 ,32 ,23 ,5.934 ,8.192 ,0.724 0 ,4 ,1760 ,127 ,2048 ,23 ,28.552 ,34.773 ,0.821 0 ,4 ,1760 ,127 ,288 ,23 ,27.336 ,33.413 ,0.818 0 ,4 ,18 ,127 ,17 ,23 ,3.145 ,3.272 ,0.961 0 ,4 ,1808 ,127 ,2048 ,23 ,30.705 ,35.005 ,0.877 0 ,4 ,1808 ,127 ,240 ,23 ,28.109 ,33.235 ,0.846 0 ,4 ,1856 ,127 ,192 ,23 ,28.075 ,33.044 ,0.85 0 ,4 ,1856 ,127 ,2048 ,23 ,30.324 ,35.97 ,0.843 0 ,4 ,19 ,127 ,18 ,23 ,3.153 ,3.297 ,0.956 0 ,4 ,1904 ,127 ,144 ,23 ,29.103 ,33.633 ,0.865 0 ,4 ,1904 ,127 ,2048 ,23 ,30.218 ,36.616 ,0.825 0 ,4 ,192 ,127 ,176 ,23 ,5.578 ,7.171 ,0.778 0 ,4 ,1952 ,127 ,2048 ,23 ,32.19 ,36.491 ,0.882 0 ,4 ,1952 ,127 ,96 ,23 ,32.428 ,33.789 ,0.96 0 ,4 ,2 ,127 ,1 ,23 ,3.169 ,3.526 ,0.899 0 ,4 ,20 ,127 ,19 ,23 ,3.177 ,3.436 ,0.924 0 ,4 ,2000 ,127 ,2048 ,23 ,32.532 ,37.286 ,0.873 0 ,4 ,2000 ,127 ,48 ,23 ,31.538 ,34.406 ,0.917 0 ,4 ,2048 ,127 ,0 ,23 ,33.676 ,36.427 ,0.924 0 ,4 ,2048 ,127 ,1024 ,23 ,35.274 ,42.614 ,0.828 0 ,4 ,2048 ,127 ,128 ,23 ,31.809 ,35.747 ,0.89 0 ,4 ,2048 ,127 ,144 ,23 ,32.151 ,35.856 ,0.897 0 ,4 ,2048 ,127 ,1760 ,23 ,35.579 ,43.618 ,0.816 0 ,4 ,2048 ,127 ,1808 ,23 ,36.049 ,45.062 ,0.8 0 ,4 ,2048 ,127 ,1856 ,23 ,36.828 ,49.901 ,0.738 0 ,4 ,2048 ,127 ,1904 ,23 ,36.841 ,45.334 ,0.813 0 ,4 ,2048 ,127 ,192 ,23 ,30.984 ,36.171 ,0.857 0 ,4 ,2048 ,127 ,1952 ,23 ,37.746 ,46.988 ,0.803 0 ,4 ,2048 ,127 ,2000 ,23 ,37.25 ,47.263 ,0.788 0 ,4 ,2048 ,127 ,2048 ,23 ,34.147 ,39.186 ,0.871 0 ,4 ,2048 ,127 ,240 ,23 ,32.204 ,36.242 ,0.889 0 ,4 ,2048 ,127 ,256 ,23 ,32.52 ,36.001 ,0.903 0 ,4 ,2048 ,127 ,288 ,23 ,33.167 ,38.29 ,0.866 0 ,4 ,2048 ,127 ,32 ,23 ,33.135 ,36.306 ,0.913 0 ,4 ,2048 ,127 ,4096 ,23 ,33.545 ,36.543 ,0.918 0 ,4 ,2048 ,127 ,48 ,23 ,33.287 ,35.443 ,0.939 0 ,4 ,2048 ,127 ,512 ,23 ,33.864 ,39.277 ,0.862 0 ,4 ,2048 ,127 ,64 ,23 ,32.572 ,35.72 ,0.912 0 ,4 ,2048 ,127 ,96 ,23 ,32.803 ,35.505 ,0.924 0 ,4 ,208 ,127 ,16 ,23 ,7.079 ,9.082 ,0.779 0 ,4 ,208 ,127 ,192 ,23 ,5.241 ,6.938 ,0.755 0 ,4 ,208 ,127 ,256 ,23 ,5.545 ,7.796 ,0.711 0 ,4 ,208 ,127 ,48 ,23 ,6.855 ,10.459 ,0.655 0 ,4 ,208 ,127 ,64 ,23 ,6.697 ,9.267 ,0.723 0 ,4 ,2096 ,127 ,2048 ,23 ,35.759 ,42.74 ,0.837 0 ,4 ,21 ,127 ,20 ,23 ,3.16 ,3.411 ,0.927 0 ,4 ,2144 ,127 ,2048 ,23 ,37.852 ,49.296 ,0.768 0 ,4 ,2192 ,127 ,2048 ,23 ,39.406 ,49.179 ,0.801 0 ,4 ,22 ,127 ,21 ,23 ,3.177 ,3.428 ,0.927 0 ,4 ,224 ,127 ,128 ,23 ,5.963 ,7.29 ,0.818 0 ,4 ,224 ,127 ,208 ,23 ,5.457 ,7.215 ,0.756 0 ,4 ,224 ,127 ,288 ,23 ,5.17 ,8.362 ,0.618 0 ,4 ,224 ,127 ,32 ,23 ,6.713 ,8.96 ,0.749 0 ,4 ,224 ,127 ,512 ,23 ,5.765 ,7.395 ,0.78 0 ,4 ,2240 ,127 ,2048 ,23 ,38.646 ,51.874 ,0.745 0 ,4 ,2288 ,127 ,2048 ,23 ,38.086 ,46.635 ,0.817 0 ,4 ,23 ,127 ,22 ,23 ,3.156 ,3.304 ,0.955 0 ,4 ,2336 ,127 ,2048 ,23 ,40.864 ,49.39 ,0.827 0 ,4 ,24 ,127 ,23 ,23 ,3.145 ,3.297 ,0.954 0 ,4 ,240 ,127 ,224 ,23 ,5.151 ,7.398 ,0.696 0 ,4 ,25 ,127 ,24 ,23 ,3.161 ,3.417 ,0.925 0 ,4 ,256 ,127 ,0 ,23 ,8.701 ,11.556 ,0.753 0 ,4 ,256 ,127 ,112 ,23 ,8.171 ,11.121 ,0.735 0 ,4 ,256 ,127 ,144 ,23 ,7.464 ,9.71 ,0.769 0 ,4 ,256 ,127 ,16 ,23 ,9.452 ,11.721 ,0.806 0 ,4 ,256 ,127 ,160 ,23 ,7.531 ,10.249 ,0.735 0 ,4 ,256 ,127 ,192 ,23 ,7.164 ,9.711 ,0.738 0 ,4 ,256 ,127 ,208 ,23 ,6.934 ,10.41 ,0.666 0 ,4 ,256 ,127 ,240 ,23 ,6.931 ,10.384 ,0.667 0 ,4 ,256 ,127 ,256 ,23 ,6.969 ,10.847 ,0.642 0 ,4 ,256 ,127 ,288 ,23 ,7.26 ,10.342 ,0.702 0 ,4 ,256 ,127 ,48 ,23 ,8.714 ,11.77 ,0.74 0 ,4 ,256 ,127 ,64 ,23 ,8.201 ,10.318 ,0.795 0 ,4 ,256 ,127 ,96 ,23 ,8.216 ,11.089 ,0.741 0 ,4 ,26 ,127 ,25 ,23 ,3.162 ,3.391 ,0.932 0 ,4 ,27 ,127 ,26 ,23 ,3.153 ,3.483 ,0.905 0 ,4 ,272 ,127 ,128 ,23 ,7.51 ,10.377 ,0.724 0 ,4 ,272 ,127 ,240 ,23 ,6.987 ,11.404 ,0.613 0 ,4 ,272 ,127 ,256 ,23 ,8.364 ,10.109 ,0.827 0 ,4 ,272 ,127 ,32 ,23 ,8.669 ,11.119 ,0.78 0 ,4 ,272 ,127 ,512 ,23 ,8.073 ,10.11 ,0.798 0 ,4 ,28 ,127 ,27 ,23 ,3.153 ,3.491 ,0.903 0 ,4 ,288 ,127 ,272 ,23 ,7.898 ,10.284 ,0.768 0 ,4 ,29 ,127 ,28 ,23 ,3.16 ,3.428 ,0.922 0 ,4 ,3 ,127 ,2 ,23 ,3.173 ,3.265 ,0.972 0 ,4 ,30 ,127 ,29 ,23 ,3.152 ,3.444 ,0.915 0 ,4 ,304 ,127 ,16 ,23 ,8.734 ,11.574 ,0.755 0 ,4 ,304 ,127 ,256 ,23 ,7.853 ,10.389 ,0.756 0 ,4 ,304 ,127 ,64 ,23 ,8.111 ,9.896 ,0.82 0 ,4 ,31 ,127 ,30 ,23 ,3.16 ,3.48 ,0.908 0 ,4 ,32 ,127 ,0 ,23 ,3.154 ,3.714 ,0.849 0 ,4 ,32 ,127 ,128 ,23 ,3.812 ,3.973 ,0.959 0 ,4 ,32 ,127 ,144 ,23 ,3.793 ,3.775 ,1.005 0 ,4 ,32 ,127 ,16 ,23 ,3.16 ,3.456 ,0.915 0 ,4 ,32 ,127 ,192 ,23 ,3.775 ,3.735 ,1.01 0 ,4 ,32 ,127 ,240 ,23 ,3.792 ,3.754 ,1.01 0 ,4 ,32 ,127 ,288 ,23 ,3.813 ,4.472 ,0.853 0 ,4 ,32 ,127 ,31 ,23 ,3.145 ,3.288 ,0.956 0 ,4 ,32 ,127 ,32 ,23 ,3.161 ,3.285 ,0.962 0 ,4 ,32 ,127 ,48 ,23 ,3.144 ,3.245 ,0.969 0 ,4 ,32 ,127 ,96 ,23 ,3.153 ,3.376 ,0.934 0 ,4 ,320 ,127 ,128 ,23 ,7.404 ,11.083 ,0.668 0 ,4 ,320 ,127 ,192 ,23 ,7.372 ,11.067 ,0.666 0 ,4 ,320 ,127 ,32 ,23 ,8.683 ,12.286 ,0.707 0 ,4 ,320 ,127 ,512 ,23 ,8.9 ,11.483 ,0.775 0 ,4 ,352 ,127 ,256 ,23 ,8.961 ,11.195 ,0.8 0 ,4 ,352 ,127 ,64 ,23 ,8.125 ,11.297 ,0.719 0 ,4 ,368 ,127 ,128 ,23 ,7.463 ,11.081 ,0.674 0 ,4 ,368 ,127 ,144 ,23 ,7.645 ,11.844 ,0.645 0 ,4 ,368 ,127 ,512 ,23 ,8.956 ,11.084 ,0.808 0 ,4 ,4 ,127 ,3 ,23 ,3.156 ,3.322 ,0.95 0 ,4 ,400 ,127 ,256 ,23 ,9.632 ,13.603 ,0.708 0 ,4 ,416 ,127 ,128 ,23 ,9.081 ,12.395 ,0.733 0 ,4 ,416 ,127 ,512 ,23 ,10.163 ,13.657 ,0.744 0 ,4 ,416 ,127 ,96 ,23 ,9.499 ,12.73 ,0.746 0 ,4 ,448 ,127 ,256 ,23 ,9.794 ,14.234 ,0.688 0 ,4 ,464 ,127 ,48 ,23 ,10.019 ,14.79 ,0.677 0 ,4 ,464 ,127 ,512 ,23 ,10.971 ,14.271 ,0.769 0 ,4 ,48 ,127 ,32 ,23 ,3.161 ,3.333 ,0.948 0 ,4 ,496 ,127 ,256 ,23 ,9.582 ,14.229 ,0.673 0 ,4 ,5 ,127 ,4 ,23 ,3.177 ,3.312 ,0.959 0 ,4 ,512 ,127 ,0 ,23 ,11.964 ,15.131 ,0.791 0 ,4 ,512 ,127 ,144 ,23 ,10.739 ,13.798 ,0.778 0 ,4 ,512 ,127 ,192 ,23 ,10.087 ,14.271 ,0.707 0 ,4 ,512 ,127 ,224 ,23 ,9.986 ,15.099 ,0.661 0 ,4 ,512 ,127 ,240 ,23 ,10.143 ,14.624 ,0.694 0 ,4 ,512 ,127 ,272 ,23 ,11.388 ,15.172 ,0.751 0 ,4 ,512 ,127 ,288 ,23 ,11.387 ,16.032 ,0.71 0 ,4 ,512 ,127 ,320 ,23 ,10.736 ,15.141 ,0.709 0 ,4 ,512 ,127 ,368 ,23 ,10.783 ,16.038 ,0.672 0 ,4 ,512 ,127 ,416 ,23 ,12.213 ,15.788 ,0.774 0 ,4 ,512 ,127 ,464 ,23 ,12.305 ,16.43 ,0.749 0 ,4 ,512 ,127 ,48 ,23 ,12.029 ,15.382 ,0.782 0 ,4 ,512 ,127 ,512 ,23 ,12.13 ,17.72 ,0.685 0 ,4 ,512 ,127 ,96 ,23 ,11.375 ,14.748 ,0.771 0 ,4 ,544 ,127 ,256 ,23 ,11.385 ,16.65 ,0.684 0 ,4 ,560 ,127 ,512 ,23 ,12.883 ,17.571 ,0.733 0 ,4 ,6 ,127 ,5 ,23 ,3.169 ,3.314 ,0.956 0 ,4 ,608 ,127 ,512 ,23 ,12.714 ,17.098 ,0.744 0 ,4 ,64 ,127 ,0 ,23 ,4.58 ,5.489 ,0.834 0 ,4 ,64 ,127 ,144 ,23 ,4.425 ,6.144 ,0.72 0 ,4 ,64 ,127 ,16 ,23 ,4.646 ,5.062 ,0.918 0 ,4 ,64 ,127 ,192 ,23 ,4.534 ,5.142 ,0.882 0 ,4 ,64 ,127 ,240 ,23 ,4.402 ,5.264 ,0.836 0 ,4 ,64 ,127 ,256 ,23 ,5.035 ,4.959 ,1.015 0 ,4 ,64 ,127 ,288 ,23 ,5.154 ,5.17 ,0.997 0 ,4 ,64 ,127 ,48 ,23 ,4.474 ,5.026 ,0.89 0 ,4 ,64 ,127 ,64 ,23 ,4.547 ,4.981 ,0.913 0 ,4 ,64 ,127 ,96 ,23 ,4.403 ,5.721 ,0.77 0 ,4 ,656 ,127 ,512 ,23 ,14.344 ,20.61 ,0.696 0 ,4 ,7 ,127 ,6 ,23 ,3.161 ,3.203 ,0.987 0 ,4 ,704 ,127 ,512 ,23 ,14.396 ,21.377 ,0.673 0 ,4 ,736 ,127 ,1024 ,23 ,13.777 ,17.84 ,0.772 0 ,4 ,736 ,127 ,288 ,23 ,13.273 ,17.739 ,0.748 0 ,4 ,752 ,127 ,512 ,23 ,14.422 ,19.826 ,0.727 0 ,4 ,784 ,127 ,1024 ,23 ,15.137 ,18.974 ,0.798 0 ,4 ,784 ,127 ,240 ,23 ,13.579 ,18.497 ,0.734 0 ,4 ,8 ,127 ,7 ,23 ,3.161 ,3.391 ,0.932 0 ,4 ,80 ,127 ,128 ,23 ,5.101 ,4.346 ,1.174 0 ,4 ,80 ,127 ,32 ,23 ,4.404 ,5.007 ,0.88 0 ,4 ,80 ,127 ,48 ,23 ,4.644 ,5.06 ,0.918 0 ,4 ,80 ,127 ,64 ,23 ,5.102 ,4.101 ,1.244 0 ,4 ,800 ,127 ,512 ,23 ,16.352 ,22.201 ,0.737 0 ,4 ,832 ,127 ,1024 ,23 ,15.508 ,20.118 ,0.771 0 ,4 ,832 ,127 ,192 ,23 ,13.498 ,18.374 ,0.735 0 ,4 ,880 ,127 ,1024 ,23 ,15.342 ,20.264 ,0.757 0 ,4 ,880 ,127 ,144 ,23 ,14.276 ,18.818 ,0.759 0 ,4 ,9 ,127 ,8 ,23 ,3.169 ,3.255 ,0.973 0 ,4 ,928 ,127 ,1024 ,23 ,17.968 ,22.487 ,0.799 0 ,4 ,928 ,127 ,96 ,23 ,16.562 ,20.072 ,0.825 0 ,4 ,96 ,127 ,80 ,23 ,5.082 ,3.996 ,1.272 0 ,4 ,976 ,127 ,1024 ,23 ,17.833 ,23.204 ,0.769 0 ,4 ,976 ,127 ,48 ,23 ,17.332 ,21.29 ,0.814 0 ,64 ,1 ,127 ,0 ,23 ,3.146 ,3.184 ,0.988 0 ,64 ,10 ,127 ,9 ,23 ,3.145 ,3.44 ,0.914 0 ,64 ,1024 ,127 ,0 ,23 ,20.039 ,22.143 ,0.905 0 ,64 ,1024 ,127 ,1024 ,23 ,22.081 ,29.115 ,0.758 0 ,64 ,1024 ,127 ,144 ,23 ,17.639 ,21.645 ,0.815 0 ,64 ,1024 ,127 ,192 ,23 ,16.92 ,21.35 ,0.793 0 ,64 ,1024 ,127 ,240 ,23 ,17.088 ,22.019 ,0.776 0 ,64 ,1024 ,127 ,288 ,23 ,18.252 ,23.549 ,0.775 0 ,64 ,1024 ,127 ,48 ,23 ,19.372 ,21.377 ,0.906 0 ,64 ,1024 ,127 ,736 ,23 ,19.648 ,25.354 ,0.775 0 ,64 ,1024 ,127 ,784 ,23 ,20.901 ,27.673 ,0.755 0 ,64 ,1024 ,127 ,832 ,23 ,20.144 ,26.621 ,0.757 0 ,64 ,1024 ,127 ,880 ,23 ,20.418 ,26.813 ,0.761 0 ,64 ,1024 ,127 ,928 ,23 ,21.239 ,28.753 ,0.739 0 ,64 ,1024 ,127 ,96 ,23 ,18.924 ,21.453 ,0.882 0 ,64 ,1024 ,127 ,976 ,23 ,21.965 ,27.76 ,0.791 0 ,64 ,1072 ,127 ,1024 ,23 ,21.249 ,27.779 ,0.765 0 ,64 ,11 ,127 ,10 ,23 ,3.152 ,3.437 ,0.917 0 ,64 ,112 ,127 ,144 ,23 ,5.037 ,4.655 ,1.082 0 ,64 ,112 ,127 ,16 ,23 ,4.644 ,5.125 ,0.906 0 ,64 ,112 ,127 ,256 ,23 ,5.056 ,4.575 ,1.105 0 ,64 ,112 ,127 ,64 ,23 ,5.032 ,4.125 ,1.22 0 ,64 ,112 ,127 ,96 ,23 ,5.104 ,4.12 ,1.239 0 ,64 ,1120 ,127 ,1024 ,23 ,22.537 ,29.024 ,0.776 0 ,64 ,1168 ,127 ,1024 ,23 ,24.492 ,31.453 ,0.779 0 ,64 ,12 ,127 ,11 ,23 ,3.145 ,3.252 ,0.967 0 ,64 ,1216 ,127 ,1024 ,23 ,25.027 ,32.609 ,0.767 0 ,64 ,1264 ,127 ,1024 ,23 ,23.763 ,31.546 ,0.753 0 ,64 ,128 ,127 ,0 ,23 ,5.938 ,8.653 ,0.686 0 ,64 ,128 ,127 ,112 ,23 ,5.254 ,7.502 ,0.7 0 ,64 ,128 ,127 ,128 ,23 ,5.203 ,7.439 ,0.699 0 ,64 ,128 ,127 ,144 ,23 ,5.38 ,7.253 ,0.742 0 ,64 ,128 ,127 ,192 ,23 ,5.281 ,7.743 ,0.682 0 ,64 ,128 ,127 ,240 ,23 ,5.311 ,8.393 ,0.633 0 ,64 ,128 ,127 ,288 ,23 ,5.254 ,7.59 ,0.692 0 ,64 ,128 ,127 ,32 ,23 ,5.969 ,8.369 ,0.713 0 ,64 ,128 ,127 ,48 ,23 ,5.906 ,8.093 ,0.73 0 ,64 ,128 ,127 ,80 ,23 ,5.253 ,7.627 ,0.689 0 ,64 ,128 ,127 ,96 ,23 ,5.255 ,7.744 ,0.679 0 ,64 ,13 ,127 ,12 ,23 ,3.144 ,3.39 ,0.928 0 ,64 ,1312 ,127 ,1024 ,23 ,26.18 ,32.955 ,0.794 0 ,64 ,14 ,127 ,13 ,23 ,3.177 ,3.374 ,0.941 0 ,64 ,144 ,127 ,128 ,23 ,5.183 ,6.504 ,0.797 0 ,64 ,15 ,127 ,14 ,23 ,3.169 ,3.298 ,0.961 0 ,64 ,16 ,127 ,0 ,23 ,3.151 ,3.396 ,0.928 0 ,64 ,16 ,127 ,144 ,23 ,3.144 ,3.13 ,1.005 0 ,64 ,16 ,127 ,15 ,23 ,3.16 ,3.374 ,0.937 0 ,64 ,16 ,127 ,16 ,23 ,3.15 ,3.225 ,0.977 0 ,64 ,16 ,127 ,192 ,23 ,3.161 ,3.366 ,0.939 0 ,64 ,16 ,127 ,240 ,23 ,3.162 ,3.324 ,0.951 0 ,64 ,16 ,127 ,256 ,23 ,3.177 ,3.456 ,0.919 0 ,64 ,16 ,127 ,288 ,23 ,3.177 ,5.36 ,0.593 0 ,64 ,16 ,127 ,48 ,23 ,3.161 ,3.367 ,0.939 0 ,64 ,16 ,127 ,64 ,23 ,3.177 ,3.365 ,0.944 0 ,64 ,16 ,127 ,96 ,23 ,3.16 ,3.366 ,0.939 0 ,64 ,160 ,127 ,144 ,23 ,5.19 ,6.626 ,0.783 0 ,64 ,160 ,127 ,16 ,23 ,6.034 ,8.181 ,0.738 0 ,64 ,160 ,127 ,256 ,23 ,5.192 ,6.469 ,0.803 0 ,64 ,160 ,127 ,64 ,23 ,5.285 ,7.661 ,0.69 0 ,64 ,160 ,127 ,96 ,23 ,5.4 ,7.961 ,0.678 0 ,64 ,17 ,127 ,16 ,23 ,3.145 ,3.269 ,0.962 0 ,64 ,176 ,127 ,128 ,23 ,5.157 ,6.404 ,0.805 0 ,64 ,176 ,127 ,160 ,23 ,5.17 ,6.074 ,0.851 0 ,64 ,176 ,127 ,32 ,23 ,5.752 ,8.549 ,0.673 0 ,64 ,1760 ,127 ,2048 ,23 ,32.844 ,42.674 ,0.77 0 ,64 ,1760 ,127 ,288 ,23 ,26.748 ,31.352 ,0.853 0 ,64 ,18 ,127 ,17 ,23 ,3.145 ,3.246 ,0.969 0 ,64 ,1808 ,127 ,2048 ,23 ,34.984 ,52.589 ,0.665 0 ,64 ,1808 ,127 ,240 ,23 ,27.354 ,31.114 ,0.879 0 ,64 ,1856 ,127 ,192 ,23 ,26.956 ,31.912 ,0.845 0 ,64 ,1856 ,127 ,2048 ,23 ,34.706 ,49.761 ,0.697 0 ,64 ,19 ,127 ,18 ,23 ,3.16 ,3.305 ,0.956 0 ,64 ,1904 ,127 ,144 ,23 ,27.98 ,32.474 ,0.862 0 ,64 ,1904 ,127 ,2048 ,23 ,35.375 ,47.52 ,0.744 0 ,64 ,192 ,127 ,176 ,23 ,5.522 ,7.308 ,0.756 0 ,64 ,1952 ,127 ,2048 ,23 ,37.207 ,55.957 ,0.665 0 ,64 ,1952 ,127 ,96 ,23 ,30.383 ,33.955 ,0.895 0 ,64 ,2 ,127 ,1 ,23 ,3.145 ,3.449 ,0.912 0 ,64 ,20 ,127 ,19 ,23 ,3.186 ,3.288 ,0.969 0 ,64 ,2000 ,127 ,2048 ,23 ,37.863 ,50.048 ,0.757 0 ,64 ,2000 ,127 ,48 ,23 ,31.004 ,33.297 ,0.931 0 ,64 ,2048 ,127 ,0 ,23 ,33.109 ,35.365 ,0.936 0 ,64 ,2048 ,127 ,1024 ,23 ,36.863 ,46.556 ,0.792 0 ,64 ,2048 ,127 ,128 ,23 ,31.899 ,35.557 ,0.897 0 ,64 ,2048 ,127 ,144 ,23 ,32.337 ,35.749 ,0.905 0 ,64 ,2048 ,127 ,1760 ,23 ,38.362 ,49.274 ,0.779 0 ,64 ,2048 ,127 ,1808 ,23 ,47.114 ,51.886 ,0.908 0 ,64 ,2048 ,127 ,1856 ,23 ,42.602 ,50.278 ,0.847 0 ,64 ,2048 ,127 ,1904 ,23 ,55.644 ,54.311 ,1.025 0 ,64 ,2048 ,127 ,192 ,23 ,31.061 ,35.115 ,0.885 0 ,64 ,2048 ,127 ,1952 ,23 ,53.408 ,53.41 ,1.0 0 ,64 ,2048 ,127 ,2000 ,23 ,46.835 ,61.275 ,0.764 0 ,64 ,2048 ,127 ,2048 ,23 ,48.348 ,61.244 ,0.789 0 ,64 ,2048 ,127 ,240 ,23 ,31.128 ,35.186 ,0.885 0 ,64 ,2048 ,127 ,256 ,23 ,32.639 ,36.766 ,0.888 0 ,64 ,2048 ,127 ,288 ,23 ,32.194 ,36.297 ,0.887 0 ,64 ,2048 ,127 ,32 ,23 ,33.772 ,36.12 ,0.935 0 ,64 ,2048 ,127 ,4096 ,23 ,44.43 ,65.192 ,0.682 0 ,64 ,2048 ,127 ,48 ,23 ,32.937 ,34.616 ,0.952 0 ,64 ,2048 ,127 ,512 ,23 ,33.896 ,39.432 ,0.86 0 ,64 ,2048 ,127 ,64 ,23 ,32.893 ,35.49 ,0.927 0 ,64 ,2048 ,127 ,96 ,23 ,32.17 ,35.893 ,0.896 0 ,64 ,208 ,127 ,16 ,23 ,6.976 ,9.14 ,0.763 0 ,64 ,208 ,127 ,192 ,23 ,5.517 ,6.905 ,0.799 0 ,64 ,208 ,127 ,256 ,23 ,5.435 ,7.378 ,0.737 0 ,64 ,208 ,127 ,48 ,23 ,6.491 ,9.187 ,0.707 0 ,64 ,208 ,127 ,64 ,23 ,6.565 ,7.989 ,0.822 0 ,64 ,2096 ,127 ,2048 ,23 ,39.554 ,55.173 ,0.717 0 ,64 ,21 ,127 ,20 ,23 ,3.161 ,3.255 ,0.971 0 ,64 ,2144 ,127 ,2048 ,23 ,56.928 ,58.526 ,0.973 0 ,64 ,2192 ,127 ,2048 ,23 ,58.545 ,55.186 ,1.061 0 ,64 ,22 ,127 ,21 ,23 ,3.161 ,3.203 ,0.987 0 ,64 ,224 ,127 ,128 ,23 ,5.687 ,7.27 ,0.782 0 ,64 ,224 ,127 ,208 ,23 ,5.21 ,7.013 ,0.743 0 ,64 ,224 ,127 ,288 ,23 ,5.05 ,8.043 ,0.628 0 ,64 ,224 ,127 ,32 ,23 ,6.655 ,9.114 ,0.73 0 ,64 ,224 ,127 ,512 ,23 ,5.129 ,7.491 ,0.685 0 ,64 ,2240 ,127 ,2048 ,23 ,58.563 ,55.918 ,1.047 0 ,64 ,2288 ,127 ,2048 ,23 ,58.429 ,55.175 ,1.059 0 ,64 ,23 ,127 ,22 ,23 ,3.144 ,3.262 ,0.964 0 ,64 ,2336 ,127 ,2048 ,23 ,67.585 ,57.044 ,1.185 0 ,64 ,24 ,127 ,23 ,23 ,3.159 ,3.309 ,0.955 0 ,64 ,240 ,127 ,224 ,23 ,5.236 ,7.518 ,0.696 0 ,64 ,25 ,127 ,24 ,23 ,3.16 ,3.499 ,0.903 0 ,64 ,256 ,127 ,0 ,23 ,8.762 ,11.848 ,0.739 0 ,64 ,256 ,127 ,112 ,23 ,8.157 ,10.941 ,0.746 0 ,64 ,256 ,127 ,144 ,23 ,7.565 ,10.157 ,0.745 0 ,64 ,256 ,127 ,16 ,23 ,9.48 ,12.01 ,0.789 0 ,64 ,256 ,127 ,160 ,23 ,7.404 ,9.94 ,0.745 0 ,64 ,256 ,127 ,192 ,23 ,7.011 ,10.15 ,0.691 0 ,64 ,256 ,127 ,208 ,23 ,6.977 ,10.371 ,0.673 0 ,64 ,256 ,127 ,240 ,23 ,7.2 ,10.791 ,0.667 0 ,64 ,256 ,127 ,256 ,23 ,6.949 ,10.915 ,0.637 0 ,64 ,256 ,127 ,288 ,23 ,7.02 ,10.324 ,0.68 0 ,64 ,256 ,127 ,48 ,23 ,8.71 ,12.04 ,0.723 0 ,64 ,256 ,127 ,64 ,23 ,8.111 ,10.848 ,0.748 0 ,64 ,256 ,127 ,96 ,23 ,8.318 ,10.306 ,0.807 0 ,64 ,26 ,127 ,25 ,23 ,3.153 ,3.394 ,0.929 0 ,64 ,27 ,127 ,26 ,23 ,3.161 ,3.349 ,0.944 0 ,64 ,272 ,127 ,128 ,23 ,7.589 ,9.763 ,0.777 0 ,64 ,272 ,127 ,240 ,23 ,6.828 ,11.202 ,0.61 0 ,64 ,272 ,127 ,256 ,23 ,8.03 ,10.276 ,0.781 0 ,64 ,272 ,127 ,32 ,23 ,8.762 ,11.419 ,0.767 0 ,64 ,272 ,127 ,512 ,23 ,7.813 ,10.083 ,0.775 0 ,64 ,28 ,127 ,27 ,23 ,3.161 ,3.5 ,0.903 0 ,64 ,288 ,127 ,272 ,23 ,8.07 ,10.086 ,0.8 0 ,64 ,29 ,127 ,28 ,23 ,3.161 ,3.347 ,0.944 0 ,64 ,3 ,127 ,2 ,23 ,3.178 ,3.302 ,0.962 0 ,64 ,30 ,127 ,29 ,23 ,3.177 ,3.604 ,0.881 0 ,64 ,304 ,127 ,16 ,23 ,8.735 ,11.45 ,0.763 0 ,64 ,304 ,127 ,256 ,23 ,8.095 ,10.279 ,0.788 0 ,64 ,304 ,127 ,64 ,23 ,8.173 ,10.129 ,0.807 0 ,64 ,31 ,127 ,30 ,23 ,3.161 ,3.383 ,0.934 0 ,64 ,32 ,127 ,0 ,23 ,3.161 ,3.328 ,0.95 0 ,64 ,32 ,127 ,128 ,23 ,3.145 ,3.365 ,0.935 0 ,64 ,32 ,127 ,144 ,23 ,3.161 ,3.246 ,0.974 0 ,64 ,32 ,127 ,16 ,23 ,3.145 ,3.383 ,0.93 0 ,64 ,32 ,127 ,192 ,23 ,3.161 ,3.145 ,1.005 0 ,64 ,32 ,127 ,240 ,23 ,3.145 ,3.262 ,0.964 0 ,64 ,32 ,127 ,288 ,23 ,3.161 ,3.35 ,0.944 0 ,64 ,32 ,127 ,31 ,23 ,3.165 ,3.305 ,0.957 0 ,64 ,32 ,127 ,32 ,23 ,3.166 ,3.163 ,1.001 0 ,64 ,32 ,127 ,48 ,23 ,3.145 ,3.473 ,0.906 0 ,64 ,32 ,127 ,96 ,23 ,3.153 ,3.34 ,0.944 0 ,64 ,320 ,127 ,128 ,23 ,7.522 ,10.625 ,0.708 0 ,64 ,320 ,127 ,192 ,23 ,6.864 ,11.256 ,0.61 0 ,64 ,320 ,127 ,32 ,23 ,8.782 ,12.663 ,0.694 0 ,64 ,320 ,127 ,512 ,23 ,8.992 ,11.797 ,0.762 0 ,64 ,352 ,127 ,256 ,23 ,8.935 ,11.31 ,0.79 0 ,64 ,352 ,127 ,64 ,23 ,8.15 ,12.042 ,0.677 0 ,64 ,368 ,127 ,128 ,23 ,7.513 ,11.204 ,0.671 0 ,64 ,368 ,127 ,144 ,23 ,7.674 ,11.428 ,0.671 0 ,64 ,368 ,127 ,512 ,23 ,8.317 ,11.54 ,0.721 0 ,64 ,4 ,127 ,3 ,23 ,3.168 ,3.357 ,0.944 0 ,64 ,400 ,127 ,256 ,23 ,11.646 ,15.042 ,0.774 0 ,64 ,416 ,127 ,128 ,23 ,10.087 ,12.554 ,0.803 0 ,64 ,416 ,127 ,512 ,23 ,10.185 ,13.658 ,0.746 0 ,64 ,416 ,127 ,96 ,23 ,9.486 ,12.415 ,0.764 0 ,64 ,448 ,127 ,256 ,23 ,12.026 ,14.413 ,0.834 0 ,64 ,464 ,127 ,48 ,23 ,10.167 ,13.469 ,0.755 0 ,64 ,464 ,127 ,512 ,23 ,10.272 ,14.88 ,0.69 0 ,64 ,48 ,127 ,32 ,23 ,3.144 ,3.433 ,0.916 0 ,64 ,496 ,127 ,256 ,23 ,9.631 ,13.89 ,0.693 0 ,64 ,5 ,127 ,4 ,23 ,3.161 ,3.341 ,0.946 0 ,64 ,512 ,127 ,0 ,23 ,12.66 ,15.548 ,0.814 0 ,64 ,512 ,127 ,144 ,23 ,10.741 ,13.792 ,0.779 0 ,64 ,512 ,127 ,192 ,23 ,9.987 ,16.142 ,0.619 0 ,64 ,512 ,127 ,224 ,23 ,10.083 ,14.313 ,0.704 0 ,64 ,512 ,127 ,240 ,23 ,9.984 ,14.853 ,0.672 0 ,64 ,512 ,127 ,272 ,23 ,11.329 ,16.623 ,0.682 0 ,64 ,512 ,127 ,288 ,23 ,11.385 ,15.399 ,0.739 0 ,64 ,512 ,127 ,320 ,23 ,10.655 ,15.312 ,0.696 0 ,64 ,512 ,127 ,368 ,23 ,10.903 ,19.033 ,0.573 0 ,64 ,512 ,127 ,416 ,23 ,11.917 ,16.12 ,0.739 0 ,64 ,512 ,127 ,464 ,23 ,13.572 ,16.613 ,0.817 0 ,64 ,512 ,127 ,48 ,23 ,12.607 ,15.017 ,0.84 0 ,64 ,512 ,127 ,512 ,23 ,13.403 ,16.757 ,0.8 0 ,64 ,512 ,127 ,96 ,23 ,11.976 ,13.067 ,0.917 0 ,64 ,544 ,127 ,256 ,23 ,12.365 ,15.798 ,0.783 0 ,64 ,560 ,127 ,512 ,23 ,12.314 ,16.035 ,0.768 0 ,64 ,6 ,127 ,5 ,23 ,3.153 ,3.264 ,0.966 0 ,64 ,608 ,127 ,512 ,23 ,12.215 ,16.937 ,0.721 0 ,64 ,64 ,127 ,0 ,23 ,4.706 ,5.479 ,0.859 0 ,64 ,64 ,127 ,144 ,23 ,4.425 ,5.032 ,0.879 0 ,64 ,64 ,127 ,16 ,23 ,4.534 ,5.08 ,0.893 0 ,64 ,64 ,127 ,192 ,23 ,4.404 ,5.307 ,0.83 0 ,64 ,64 ,127 ,240 ,23 ,4.424 ,5.586 ,0.792 0 ,64 ,64 ,127 ,256 ,23 ,4.523 ,4.998 ,0.905 0 ,64 ,64 ,127 ,288 ,23 ,4.402 ,5.587 ,0.788 0 ,64 ,64 ,127 ,48 ,23 ,4.404 ,5.033 ,0.875 0 ,64 ,64 ,127 ,64 ,23 ,4.402 ,5.03 ,0.875 0 ,64 ,64 ,127 ,96 ,23 ,4.692 ,5.006 ,0.937 0 ,64 ,656 ,127 ,512 ,23 ,15.147 ,20.982 ,0.722 0 ,64 ,7 ,127 ,6 ,23 ,3.161 ,3.322 ,0.951 0 ,64 ,704 ,127 ,512 ,23 ,16.274 ,21.22 ,0.767 0 ,64 ,736 ,127 ,1024 ,23 ,14.662 ,20.05 ,0.731 0 ,64 ,736 ,127 ,288 ,23 ,13.172 ,18.485 ,0.713 0 ,64 ,752 ,127 ,512 ,23 ,14.427 ,20.594 ,0.701 0 ,64 ,784 ,127 ,1024 ,23 ,16.441 ,22.664 ,0.725 0 ,64 ,784 ,127 ,240 ,23 ,13.402 ,17.85 ,0.751 0 ,64 ,8 ,127 ,7 ,23 ,3.161 ,3.482 ,0.908 0 ,64 ,80 ,127 ,128 ,23 ,5.032 ,4.142 ,1.215 0 ,64 ,80 ,127 ,32 ,23 ,4.522 ,4.981 ,0.908 0 ,64 ,80 ,127 ,48 ,23 ,4.644 ,5.048 ,0.92 0 ,64 ,80 ,127 ,64 ,23 ,5.035 ,4.293 ,1.173 0 ,64 ,800 ,127 ,512 ,23 ,17.382 ,24.301 ,0.715 0 ,64 ,832 ,127 ,1024 ,23 ,17.625 ,22.821 ,0.772 0 ,64 ,832 ,127 ,192 ,23 ,13.428 ,18.869 ,0.712 0 ,64 ,880 ,127 ,1024 ,23 ,17.879 ,23.056 ,0.775 0 ,64 ,880 ,127 ,144 ,23 ,14.114 ,18.776 ,0.752 0 ,64 ,9 ,127 ,8 ,23 ,3.168 ,3.321 ,0.954 0 ,64 ,928 ,127 ,1024 ,23 ,18.496 ,24.652 ,0.75 0 ,64 ,928 ,127 ,96 ,23 ,16.785 ,20.217 ,0.83 0 ,64 ,96 ,127 ,80 ,23 ,5.058 ,4.14 ,1.222 0 ,64 ,976 ,127 ,1024 ,23 ,19.09 ,25.806 ,0.74 0 ,64 ,976 ,127 ,48 ,23 ,17.251 ,20.872 ,0.827 1 ,1 ,2048 ,127 ,32 ,0 ,3.097 ,3.169 ,0.977 1 ,1 ,2048 ,127 ,32 ,23 ,33.081 ,35.633 ,0.928 1 ,1 ,256 ,127 ,64 ,0 ,5.057 ,4.086 ,1.238 1 ,1 ,256 ,127 ,64 ,23 ,7.95 ,11.379 ,0.699 1 ,16 ,2048 ,127 ,32 ,23 ,33.403 ,35.357 ,0.945 1 ,16 ,256 ,127 ,64 ,23 ,9.528 ,11.335 ,0.841 1 ,256 ,2048 ,127 ,32 ,23 ,32.954 ,34.96 ,0.943 1 ,256 ,256 ,127 ,64 ,23 ,9.146 ,10.794 ,0.847 1 ,4 ,2048 ,127 ,32 ,23 ,33.177 ,35.606 ,0.932 1 ,4 ,256 ,127 ,64 ,23 ,7.868 ,11.304 ,0.696 1 ,64 ,2048 ,127 ,32 ,23 ,33.723 ,35.765 ,0.943 1 ,64 ,256 ,127 ,64 ,23 ,9.038 ,11.406 ,0.792 105 ,1 ,256 ,127 ,64 ,0 ,5.634 ,3.956 ,1.424 105 ,1 ,256 ,127 ,64 ,23 ,8.222 ,11.162 ,0.737 105 ,16 ,256 ,127 ,64 ,23 ,8.202 ,11.547 ,0.71 105 ,256 ,256 ,127 ,64 ,23 ,10.737 ,11.705 ,0.917 105 ,4 ,256 ,127 ,64 ,23 ,8.221 ,11.32 ,0.726 105 ,64 ,256 ,127 ,64 ,23 ,8.221 ,11.637 ,0.706 15 ,1 ,256 ,127 ,64 ,0 ,5.098 ,3.704 ,1.376 15 ,1 ,256 ,127 ,64 ,23 ,7.842 ,11.545 ,0.679 15 ,16 ,256 ,127 ,64 ,23 ,7.974 ,11.892 ,0.671 15 ,256 ,256 ,127 ,64 ,23 ,9.086 ,11.35 ,0.801 15 ,4 ,256 ,127 ,64 ,23 ,7.946 ,11.221 ,0.708 15 ,64 ,256 ,127 ,64 ,23 ,9.209 ,11.459 ,0.804 2 ,1 ,2048 ,127 ,64 ,0 ,4.814 ,5.635 ,0.854 2 ,1 ,2048 ,127 ,64 ,23 ,32.353 ,35.062 ,0.923 2 ,1 ,256 ,127 ,64 ,0 ,4.65 ,3.772 ,1.233 2 ,1 ,256 ,127 ,64 ,23 ,7.992 ,11.405 ,0.701 2 ,16 ,2048 ,127 ,64 ,23 ,32.676 ,36.217 ,0.902 2 ,16 ,256 ,127 ,64 ,23 ,8.101 ,11.102 ,0.73 2 ,256 ,2048 ,127 ,64 ,23 ,32.515 ,34.674 ,0.938 2 ,256 ,256 ,127 ,64 ,23 ,9.231 ,11.704 ,0.789 2 ,4 ,2048 ,127 ,64 ,23 ,32.761 ,35.128 ,0.933 2 ,4 ,256 ,127 ,64 ,23 ,7.913 ,11.403 ,0.694 2 ,64 ,2048 ,127 ,64 ,23 ,32.715 ,35.393 ,0.924 2 ,64 ,256 ,127 ,64 ,23 ,9.352 ,11.399 ,0.82 3 ,1 ,2048 ,127 ,128 ,0 ,4.762 ,7.398 ,0.644 3 ,1 ,2048 ,127 ,128 ,23 ,32.033 ,36.078 ,0.888 3 ,1 ,256 ,127 ,64 ,0 ,4.802 ,3.903 ,1.23 3 ,1 ,256 ,127 ,64 ,23 ,8.052 ,12.555 ,0.641 3 ,16 ,2048 ,127 ,128 ,23 ,32.283 ,35.991 ,0.897 3 ,16 ,256 ,127 ,64 ,23 ,8.082 ,11.55 ,0.7 3 ,256 ,2048 ,127 ,128 ,23 ,31.861 ,35.979 ,0.886 3 ,256 ,256 ,127 ,64 ,23 ,9.626 ,11.665 ,0.825 3 ,4 ,2048 ,127 ,128 ,23 ,31.805 ,36.182 ,0.879 3 ,4 ,256 ,127 ,64 ,23 ,8.113 ,11.608 ,0.699 3 ,64 ,2048 ,127 ,128 ,23 ,31.828 ,36.292 ,0.877 3 ,64 ,256 ,127 ,64 ,23 ,9.415 ,11.211 ,0.84 30 ,1 ,256 ,127 ,64 ,0 ,4.805 ,4.243 ,1.133 30 ,1 ,256 ,127 ,64 ,23 ,8.108 ,12.058 ,0.672 30 ,16 ,256 ,127 ,64 ,23 ,8.033 ,11.376 ,0.706 30 ,256 ,256 ,127 ,64 ,23 ,9.271 ,11.242 ,0.825 30 ,4 ,256 ,127 ,64 ,23 ,7.963 ,11.373 ,0.7 30 ,64 ,256 ,127 ,64 ,23 ,9.405 ,11.978 ,0.785 4 ,1 ,2048 ,127 ,256 ,0 ,8.184 ,9.293 ,0.881 4 ,1 ,2048 ,127 ,256 ,23 ,32.519 ,36.906 ,0.881 4 ,1 ,256 ,127 ,64 ,0 ,4.612 ,3.916 ,1.178 4 ,1 ,256 ,127 ,64 ,23 ,8.086 ,11.768 ,0.687 4 ,16 ,2048 ,127 ,256 ,23 ,32.358 ,36.867 ,0.878 4 ,16 ,256 ,127 ,64 ,23 ,8.252 ,11.421 ,0.723 4 ,256 ,2048 ,127 ,256 ,23 ,32.511 ,36.341 ,0.895 4 ,256 ,256 ,127 ,64 ,23 ,9.471 ,11.957 ,0.792 4 ,4 ,2048 ,127 ,256 ,23 ,32.482 ,36.985 ,0.878 4 ,4 ,256 ,127 ,64 ,23 ,8.109 ,11.491 ,0.706 4 ,64 ,2048 ,127 ,256 ,23 ,32.575 ,35.95 ,0.906 4 ,64 ,256 ,127 ,64 ,23 ,9.371 ,11.319 ,0.828 4080 ,1 ,31 ,127 ,30 ,0 ,5.576 ,4.368 ,1.276 4080 ,1 ,31 ,127 ,30 ,23 ,5.659 ,4.474 ,1.265 4080 ,1 ,32 ,127 ,31 ,0 ,5.663 ,4.347 ,1.303 4080 ,1 ,32 ,127 ,31 ,23 ,5.632 ,4.474 ,1.259 4080 ,16 ,31 ,127 ,30 ,23 ,5.687 ,4.606 ,1.235 4080 ,16 ,32 ,127 ,31 ,23 ,6.282 ,4.5 ,1.396 4080 ,256 ,31 ,127 ,30 ,23 ,5.658 ,4.477 ,1.264 4080 ,256 ,32 ,127 ,31 ,23 ,5.701 ,4.393 ,1.298 4080 ,4 ,31 ,127 ,30 ,23 ,5.658 ,4.476 ,1.264 4080 ,4 ,32 ,127 ,31 ,23 ,5.659 ,4.336 ,1.305 4080 ,64 ,31 ,127 ,30 ,23 ,5.659 ,4.622 ,1.224 4080 ,64 ,32 ,127 ,31 ,23 ,5.688 ,4.5 ,1.264 4081 ,1 ,29 ,127 ,28 ,0 ,5.521 ,4.253 ,1.298 4081 ,1 ,29 ,127 ,28 ,23 ,5.747 ,4.778 ,1.203 4081 ,1 ,30 ,127 ,29 ,0 ,5.493 ,4.55 ,1.207 4081 ,1 ,30 ,127 ,29 ,23 ,5.661 ,4.652 ,1.217 4081 ,16 ,29 ,127 ,28 ,23 ,5.689 ,4.544 ,1.252 4081 ,16 ,30 ,127 ,29 ,23 ,6.183 ,4.74 ,1.304 4081 ,256 ,29 ,127 ,28 ,23 ,5.702 ,4.477 ,1.274 4081 ,256 ,30 ,127 ,29 ,23 ,5.659 ,4.375 ,1.293 4081 ,4 ,29 ,127 ,28 ,23 ,5.687 ,4.77 ,1.192 4081 ,4 ,30 ,127 ,29 ,23 ,5.687 ,4.519 ,1.258 4081 ,64 ,29 ,127 ,28 ,23 ,5.689 ,4.668 ,1.219 4081 ,64 ,30 ,127 ,29 ,23 ,5.717 ,4.647 ,1.23 4082 ,1 ,27 ,127 ,26 ,0 ,5.467 ,4.284 ,1.276 4082 ,1 ,27 ,127 ,26 ,23 ,5.659 ,4.668 ,1.212 4082 ,1 ,28 ,127 ,27 ,0 ,5.493 ,4.366 ,1.258 4082 ,1 ,28 ,127 ,27 ,23 ,5.717 ,4.58 ,1.248 4082 ,16 ,27 ,127 ,26 ,23 ,5.794 ,4.337 ,1.336 4082 ,16 ,28 ,127 ,27 ,23 ,5.66 ,4.476 ,1.264 4082 ,256 ,27 ,127 ,26 ,23 ,5.659 ,4.402 ,1.286 4082 ,256 ,28 ,127 ,27 ,23 ,5.659 ,4.531 ,1.249 4082 ,4 ,27 ,127 ,26 ,23 ,5.69 ,4.381 ,1.299 4082 ,4 ,28 ,127 ,27 ,23 ,5.66 ,4.499 ,1.258 4082 ,64 ,27 ,127 ,26 ,23 ,5.743 ,4.5 ,1.276 4082 ,64 ,28 ,127 ,27 ,23 ,5.66 ,4.668 ,1.213 4083 ,1 ,25 ,127 ,24 ,0 ,5.467 ,4.348 ,1.257 4083 ,1 ,25 ,127 ,24 ,23 ,5.632 ,4.644 ,1.213 4083 ,1 ,26 ,127 ,25 ,0 ,5.441 ,4.369 ,1.245 4083 ,1 ,26 ,127 ,25 ,23 ,5.659 ,4.508 ,1.255 4083 ,16 ,25 ,127 ,24 ,23 ,5.779 ,4.644 ,1.244 4083 ,16 ,26 ,127 ,25 ,23 ,5.631 ,4.545 ,1.239 4083 ,256 ,25 ,127 ,24 ,23 ,5.706 ,4.337 ,1.316 4083 ,256 ,26 ,127 ,25 ,23 ,5.659 ,4.769 ,1.187 4083 ,4 ,25 ,127 ,24 ,23 ,5.701 ,4.667 ,1.222 4083 ,4 ,26 ,127 ,25 ,23 ,5.689 ,4.381 ,1.299 4083 ,64 ,25 ,127 ,24 ,23 ,5.688 ,4.477 ,1.27 4083 ,64 ,26 ,127 ,25 ,23 ,5.702 ,4.49 ,1.27 4084 ,1 ,23 ,127 ,22 ,0 ,5.441 ,4.328 ,1.257 4084 ,1 ,23 ,127 ,22 ,23 ,5.659 ,4.655 ,1.216 4084 ,1 ,24 ,127 ,23 ,0 ,5.584 ,4.327 ,1.291 4084 ,1 ,24 ,127 ,23 ,23 ,5.689 ,4.358 ,1.305 4084 ,16 ,23 ,127 ,22 ,23 ,5.706 ,4.545 ,1.255 4084 ,16 ,24 ,127 ,23 ,23 ,5.687 ,4.545 ,1.251 4084 ,256 ,23 ,127 ,22 ,23 ,5.658 ,4.499 ,1.258 4084 ,256 ,24 ,127 ,23 ,23 ,5.717 ,4.598 ,1.243 4084 ,4 ,23 ,127 ,22 ,23 ,5.659 ,4.746 ,1.192 4084 ,4 ,24 ,127 ,23 ,23 ,5.66 ,4.665 ,1.213 4084 ,64 ,23 ,127 ,22 ,23 ,5.659 ,4.638 ,1.22 4084 ,64 ,24 ,127 ,23 ,23 ,5.687 ,4.897 ,1.161 4085 ,1 ,21 ,127 ,20 ,0 ,5.603 ,4.296 ,1.304 4085 ,1 ,21 ,127 ,20 ,23 ,5.717 ,4.381 ,1.305 4085 ,1 ,22 ,127 ,21 ,0 ,5.604 ,4.53 ,1.237 4085 ,1 ,22 ,127 ,21 ,23 ,5.678 ,4.547 ,1.249 4085 ,16 ,21 ,127 ,20 ,23 ,5.659 ,4.568 ,1.239 4085 ,16 ,22 ,127 ,21 ,23 ,5.659 ,4.544 ,1.245 4085 ,256 ,21 ,127 ,20 ,23 ,5.688 ,4.668 ,1.218 4085 ,256 ,22 ,127 ,21 ,23 ,5.658 ,4.644 ,1.219 4085 ,4 ,21 ,127 ,20 ,23 ,5.736 ,4.381 ,1.309 4085 ,4 ,22 ,127 ,21 ,23 ,5.692 ,4.499 ,1.265 4085 ,64 ,21 ,127 ,20 ,23 ,5.687 ,4.403 ,1.292 4085 ,64 ,22 ,127 ,21 ,23 ,5.688 ,4.847 ,1.173 4086 ,1 ,19 ,127 ,18 ,0 ,5.466 ,4.462 ,1.225 4086 ,1 ,19 ,127 ,18 ,23 ,5.661 ,4.476 ,1.265 4086 ,1 ,20 ,127 ,19 ,0 ,5.467 ,4.256 ,1.284 4086 ,1 ,20 ,127 ,19 ,23 ,5.631 ,4.597 ,1.225 4086 ,16 ,19 ,127 ,18 ,23 ,5.687 ,4.381 ,1.298 4086 ,16 ,20 ,127 ,19 ,23 ,5.735 ,4.644 ,1.235 4086 ,256 ,19 ,127 ,18 ,23 ,5.632 ,4.545 ,1.239 4086 ,256 ,20 ,127 ,19 ,23 ,5.631 ,4.425 ,1.273 4086 ,4 ,19 ,127 ,18 ,23 ,5.717 ,4.699 ,1.217 4086 ,4 ,20 ,127 ,19 ,23 ,5.734 ,5.147 ,1.114 4086 ,64 ,19 ,127 ,18 ,23 ,5.659 ,4.359 ,1.298 4086 ,64 ,20 ,127 ,19 ,23 ,5.717 ,4.499 ,1.271 4087 ,1 ,17 ,127 ,16 ,0 ,5.522 ,4.674 ,1.181 4087 ,1 ,17 ,127 ,16 ,23 ,5.659 ,4.499 ,1.258 4087 ,1 ,18 ,127 ,17 ,0 ,5.607 ,4.401 ,1.274 4087 ,1 ,18 ,127 ,17 ,23 ,5.688 ,4.402 ,1.292 4087 ,16 ,17 ,127 ,16 ,23 ,5.812 ,4.499 ,1.292 4087 ,16 ,18 ,127 ,17 ,23 ,5.716 ,4.538 ,1.26 4087 ,256 ,17 ,127 ,16 ,23 ,5.688 ,4.638 ,1.226 4087 ,256 ,18 ,127 ,17 ,23 ,5.802 ,4.522 ,1.283 4087 ,4 ,17 ,127 ,16 ,23 ,5.717 ,4.337 ,1.318 4087 ,4 ,18 ,127 ,17 ,23 ,5.682 ,4.476 ,1.269 4087 ,64 ,17 ,127 ,16 ,23 ,5.659 ,4.899 ,1.155 4087 ,64 ,18 ,127 ,17 ,23 ,5.688 ,4.477 ,1.271 4088 ,1 ,15 ,127 ,14 ,0 ,5.551 ,4.566 ,1.216 4088 ,1 ,15 ,127 ,14 ,23 ,5.848 ,4.521 ,1.293 4088 ,1 ,16 ,127 ,15 ,0 ,5.469 ,4.524 ,1.209 4088 ,1 ,16 ,127 ,15 ,23 ,5.688 ,4.454 ,1.277 4088 ,16 ,15 ,127 ,14 ,23 ,5.658 ,4.402 ,1.285 4088 ,16 ,16 ,127 ,15 ,23 ,5.658 ,4.597 ,1.231 4088 ,256 ,15 ,127 ,14 ,23 ,5.659 ,4.698 ,1.204 4088 ,256 ,16 ,127 ,15 ,23 ,5.705 ,4.477 ,1.274 4088 ,4 ,15 ,127 ,14 ,23 ,5.78 ,4.5 ,1.284 4088 ,4 ,16 ,127 ,15 ,23 ,5.693 ,4.469 ,1.274 4088 ,64 ,15 ,127 ,14 ,23 ,5.687 ,4.499 ,1.264 4088 ,64 ,16 ,127 ,15 ,23 ,5.676 ,4.524 ,1.255 4089 ,1 ,13 ,127 ,12 ,0 ,5.616 ,5.667 ,0.991 4089 ,1 ,13 ,127 ,12 ,23 ,5.688 ,4.515 ,1.26 4089 ,1 ,14 ,127 ,13 ,0 ,5.549 ,4.362 ,1.272 4089 ,1 ,14 ,127 ,13 ,23 ,5.659 ,4.403 ,1.285 4089 ,16 ,13 ,127 ,12 ,23 ,5.718 ,4.75 ,1.204 4089 ,16 ,14 ,127 ,13 ,23 ,5.688 ,4.598 ,1.237 4089 ,256 ,13 ,127 ,12 ,23 ,5.766 ,4.499 ,1.282 4089 ,256 ,14 ,127 ,13 ,23 ,5.688 ,4.597 ,1.237 4089 ,4 ,13 ,127 ,12 ,23 ,5.688 ,4.568 ,1.245 4089 ,4 ,14 ,127 ,13 ,23 ,5.688 ,4.563 ,1.247 4089 ,64 ,13 ,127 ,12 ,23 ,5.688 ,4.544 ,1.252 4089 ,64 ,14 ,127 ,13 ,23 ,5.742 ,4.499 ,1.276 4090 ,1 ,11 ,127 ,10 ,0 ,5.549 ,4.651 ,1.193 4090 ,1 ,11 ,127 ,10 ,23 ,5.687 ,4.402 ,1.292 4090 ,1 ,12 ,127 ,11 ,0 ,5.414 ,4.686 ,1.155 4090 ,1 ,12 ,127 ,11 ,23 ,5.717 ,4.522 ,1.264 4090 ,16 ,11 ,127 ,10 ,23 ,5.632 ,4.496 ,1.253 4090 ,16 ,12 ,127 ,11 ,23 ,5.746 ,4.523 ,1.27 4090 ,256 ,11 ,127 ,10 ,23 ,5.659 ,4.597 ,1.231 4090 ,256 ,12 ,127 ,11 ,23 ,5.66 ,4.359 ,1.299 4090 ,4 ,11 ,127 ,10 ,23 ,5.674 ,4.645 ,1.222 4090 ,4 ,12 ,127 ,11 ,23 ,5.677 ,4.5 ,1.262 4090 ,64 ,11 ,127 ,10 ,23 ,5.659 ,4.621 ,1.225 4090 ,64 ,12 ,127 ,11 ,23 ,5.659 ,4.535 ,1.248 4091 ,1 ,10 ,127 ,9 ,0 ,5.466 ,4.59 ,1.191 4091 ,1 ,10 ,127 ,9 ,23 ,5.659 ,4.523 ,1.251 4091 ,1 ,9 ,127 ,8 ,0 ,5.505 ,4.284 ,1.285 4091 ,1 ,9 ,127 ,8 ,23 ,5.659 ,4.499 ,1.258 4091 ,16 ,10 ,127 ,9 ,23 ,5.717 ,4.545 ,1.258 4091 ,16 ,9 ,127 ,8 ,23 ,5.687 ,4.522 ,1.258 4091 ,256 ,10 ,127 ,9 ,23 ,5.659 ,4.568 ,1.239 4091 ,256 ,9 ,127 ,8 ,23 ,5.63 ,4.522 ,1.245 4091 ,4 ,10 ,127 ,9 ,23 ,5.717 ,4.5 ,1.27 4091 ,4 ,9 ,127 ,8 ,23 ,5.718 ,4.546 ,1.258 4091 ,64 ,10 ,127 ,9 ,23 ,5.687 ,4.693 ,1.212 4091 ,64 ,9 ,127 ,8 ,23 ,5.659 ,4.522 ,1.251 4092 ,1 ,7 ,127 ,6 ,0 ,5.904 ,4.489 ,1.315 4092 ,1 ,7 ,127 ,6 ,23 ,5.734 ,4.492 ,1.277 4092 ,1 ,8 ,127 ,7 ,0 ,5.468 ,4.407 ,1.241 4092 ,1 ,8 ,127 ,7 ,23 ,5.687 ,4.693 ,1.212 4092 ,16 ,7 ,127 ,6 ,23 ,5.659 ,4.644 ,1.219 4092 ,16 ,8 ,127 ,7 ,23 ,5.659 ,4.898 ,1.155 4092 ,256 ,7 ,127 ,6 ,23 ,5.688 ,4.382 ,1.298 4092 ,256 ,8 ,127 ,7 ,23 ,5.631 ,4.608 ,1.222 4092 ,4 ,7 ,127 ,6 ,23 ,5.688 ,4.403 ,1.292 4092 ,4 ,8 ,127 ,7 ,23 ,5.688 ,4.544 ,1.252 4092 ,64 ,7 ,127 ,6 ,23 ,5.688 ,4.597 ,1.237 4092 ,64 ,8 ,127 ,7 ,23 ,5.687 ,4.646 ,1.224 4093 ,1 ,5 ,127 ,4 ,0 ,5.339 ,4.35 ,1.227 4093 ,1 ,5 ,127 ,4 ,23 ,5.716 ,4.497 ,1.271 4093 ,1 ,6 ,127 ,5 ,0 ,5.473 ,4.369 ,1.253 4093 ,1 ,6 ,127 ,5 ,23 ,5.718 ,4.568 ,1.252 4093 ,16 ,5 ,127 ,4 ,23 ,5.717 ,4.358 ,1.312 4093 ,16 ,6 ,127 ,5 ,23 ,5.688 ,4.499 ,1.264 4093 ,256 ,5 ,127 ,4 ,23 ,5.748 ,4.337 ,1.325 4093 ,256 ,6 ,127 ,5 ,23 ,5.67 ,4.454 ,1.273 4093 ,4 ,5 ,127 ,4 ,23 ,5.717 ,4.789 ,1.194 4093 ,4 ,6 ,127 ,5 ,23 ,5.688 ,4.875 ,1.167 4093 ,64 ,5 ,127 ,4 ,23 ,5.674 ,4.414 ,1.286 4093 ,64 ,6 ,127 ,5 ,23 ,5.907 ,4.397 ,1.343 4094 ,1 ,3 ,127 ,2 ,0 ,5.445 ,4.133 ,1.317 4094 ,1 ,3 ,127 ,2 ,23 ,5.718 ,4.499 ,1.271 4094 ,1 ,4 ,127 ,3 ,0 ,5.735 ,4.4 ,1.303 4094 ,1 ,4 ,127 ,3 ,23 ,5.689 ,4.477 ,1.271 4094 ,16 ,3 ,127 ,2 ,23 ,5.747 ,4.57 ,1.258 4094 ,16 ,4 ,127 ,3 ,23 ,5.805 ,4.622 ,1.256 4094 ,256 ,3 ,127 ,2 ,23 ,5.66 ,4.48 ,1.263 4094 ,256 ,4 ,127 ,3 ,23 ,5.748 ,4.378 ,1.313 4094 ,4 ,3 ,127 ,2 ,23 ,5.659 ,4.518 ,1.253 4094 ,4 ,4 ,127 ,3 ,23 ,5.688 ,4.512 ,1.261 4094 ,64 ,3 ,127 ,2 ,23 ,5.718 ,4.36 ,1.311 4094 ,64 ,4 ,127 ,3 ,23 ,5.687 ,4.381 ,1.298 4095 ,1 ,1 ,127 ,0 ,0 ,4.077 ,4.055 ,1.005 4095 ,1 ,1 ,127 ,0 ,23 ,5.573 ,4.622 ,1.206 4095 ,1 ,2 ,127 ,1 ,0 ,5.532 ,4.115 ,1.344 4095 ,1 ,2 ,127 ,1 ,23 ,5.72 ,4.5 ,1.271 4095 ,16 ,1 ,127 ,0 ,23 ,5.353 ,4.404 ,1.216 4095 ,16 ,2 ,127 ,1 ,23 ,5.707 ,4.599 ,1.241 4095 ,256 ,1 ,127 ,0 ,23 ,5.393 ,4.577 ,1.178 4095 ,256 ,2 ,127 ,1 ,23 ,5.72 ,4.525 ,1.264 4095 ,4 ,1 ,127 ,0 ,23 ,5.509 ,4.383 ,1.257 4095 ,4 ,2 ,127 ,1 ,23 ,5.69 ,4.546 ,1.252 4095 ,64 ,1 ,127 ,0 ,23 ,5.31 ,4.339 ,1.224 4095 ,64 ,2 ,127 ,1 ,23 ,5.719 ,4.548 ,1.258 45 ,1 ,256 ,127 ,64 ,0 ,5.411 ,3.993 ,1.355 45 ,1 ,256 ,127 ,64 ,23 ,8.029 ,11.493 ,0.699 45 ,16 ,256 ,127 ,64 ,23 ,8.142 ,11.596 ,0.702 45 ,256 ,256 ,127 ,64 ,23 ,9.462 ,11.824 ,0.8 45 ,4 ,256 ,127 ,64 ,23 ,8.106 ,11.413 ,0.71 45 ,64 ,256 ,127 ,64 ,23 ,9.655 ,11.369 ,0.849 5 ,1 ,2048 ,127 ,512 ,0 ,9.959 ,14.513 ,0.686 5 ,1 ,2048 ,127 ,512 ,23 ,33.09 ,36.424 ,0.908 5 ,1 ,256 ,127 ,64 ,0 ,4.693 ,3.885 ,1.208 5 ,1 ,256 ,127 ,64 ,23 ,8.114 ,12.26 ,0.662 5 ,16 ,2048 ,127 ,512 ,23 ,33.891 ,39.937 ,0.849 5 ,16 ,256 ,127 ,64 ,23 ,8.081 ,11.652 ,0.693 5 ,256 ,2048 ,127 ,512 ,23 ,34.159 ,39.246 ,0.87 5 ,256 ,256 ,127 ,64 ,23 ,9.46 ,12.217 ,0.774 5 ,4 ,2048 ,127 ,512 ,23 ,34.314 ,39.586 ,0.867 5 ,4 ,256 ,127 ,64 ,23 ,8.104 ,11.498 ,0.705 5 ,64 ,2048 ,127 ,512 ,23 ,33.874 ,39.485 ,0.858 5 ,64 ,256 ,127 ,64 ,23 ,9.593 ,11.388 ,0.842 6 ,1 ,2048 ,127 ,1024 ,0 ,17.103 ,19.603 ,0.872 6 ,1 ,2048 ,127 ,1024 ,23 ,33.706 ,37.99 ,0.887 6 ,1 ,256 ,127 ,64 ,0 ,4.831 ,4.211 ,1.147 6 ,1 ,256 ,127 ,64 ,23 ,8.156 ,11.409 ,0.715 6 ,16 ,2048 ,127 ,1024 ,23 ,36.265 ,44.042 ,0.823 6 ,16 ,256 ,127 ,64 ,23 ,8.123 ,11.167 ,0.727 6 ,256 ,2048 ,127 ,1024 ,23 ,37.489 ,44.428 ,0.844 6 ,256 ,256 ,127 ,64 ,23 ,9.529 ,11.198 ,0.851 6 ,4 ,2048 ,127 ,1024 ,23 ,34.235 ,42.948 ,0.797 6 ,4 ,256 ,127 ,64 ,23 ,8.042 ,11.644 ,0.691 6 ,64 ,2048 ,127 ,1024 ,23 ,36.438 ,43.778 ,0.832 6 ,64 ,256 ,127 ,64 ,23 ,8.144 ,11.219 ,0.726 60 ,1 ,256 ,127 ,64 ,0 ,4.613 ,3.868 ,1.193 60 ,1 ,256 ,127 ,64 ,23 ,8.055 ,11.715 ,0.688 60 ,16 ,256 ,127 ,64 ,23 ,8.138 ,11.888 ,0.685 60 ,256 ,256 ,127 ,64 ,23 ,9.701 ,11.935 ,0.813 60 ,4 ,256 ,127 ,64 ,23 ,8.132 ,11.762 ,0.691 60 ,64 ,256 ,127 ,64 ,23 ,9.608 ,11.642 ,0.825 7 ,1 ,2048 ,127 ,2048 ,0 ,28.209 ,33.848 ,0.833 7 ,1 ,2048 ,127 ,2048 ,23 ,33.134 ,35.77 ,0.926 7 ,1 ,256 ,127 ,64 ,0 ,4.7 ,4.373 ,1.075 7 ,1 ,256 ,127 ,64 ,23 ,8.105 ,11.577 ,0.7 7 ,16 ,2048 ,127 ,2048 ,23 ,44.67 ,85.315 ,0.524 7 ,16 ,256 ,127 ,64 ,23 ,8.104 ,11.19 ,0.724 7 ,256 ,2048 ,127 ,2048 ,23 ,52.731 ,58.99 ,0.894 7 ,256 ,256 ,127 ,64 ,23 ,9.461 ,11.938 ,0.793 7 ,4 ,2048 ,127 ,2048 ,23 ,34.073 ,39.541 ,0.862 7 ,4 ,256 ,127 ,64 ,23 ,8.09 ,11.641 ,0.695 7 ,64 ,2048 ,127 ,2048 ,23 ,61.246 ,65.594 ,0.934 7 ,64 ,256 ,127 ,64 ,23 ,8.134 ,11.558 ,0.704 75 ,1 ,256 ,127 ,64 ,0 ,5.008 ,4.024 ,1.244 75 ,1 ,256 ,127 ,64 ,23 ,8.146 ,11.817 ,0.689 75 ,16 ,256 ,127 ,64 ,23 ,8.145 ,11.39 ,0.715 75 ,256 ,256 ,127 ,64 ,23 ,10.768 ,11.612 ,0.927 75 ,4 ,256 ,127 ,64 ,23 ,8.105 ,11.661 ,0.695 75 ,64 ,256 ,127 ,64 ,23 ,8.137 ,11.039 ,0.737 8 ,1 ,2048 ,127 ,4096 ,0 ,31.237 ,38.429 ,0.813 8 ,1 ,2048 ,127 ,4096 ,23 ,32.959 ,34.762 ,0.948 8 ,16 ,2048 ,127 ,4096 ,23 ,36.619 ,45.644 ,0.802 8 ,256 ,2048 ,127 ,4096 ,23 ,45.167 ,55.267 ,0.817 8 ,4 ,2048 ,127 ,4096 ,23 ,32.942 ,35.871 ,0.918 8 ,64 ,2048 ,127 ,4096 ,23 ,39.52 ,54.964 ,0.719 90 ,1 ,256 ,127 ,64 ,0 ,4.762 ,3.896 ,1.222 90 ,1 ,256 ,127 ,64 ,23 ,8.123 ,10.953 ,0.742 90 ,16 ,256 ,127 ,64 ,23 ,8.231 ,11.242 ,0.732 90 ,256 ,256 ,127 ,64 ,23 ,10.765 ,11.764 ,0.915 90 ,4 ,256 ,127 ,64 ,23 ,8.104 ,11.525 ,0.703 90 ,64 ,256 ,127 ,64 ,23 ,8.175 ,11.522 ,0.71 Results For: strrchr align,freq ,len ,max_char ,pos ,seek ,strrchr-dev ,strrchr-glibc ,strrchr-dev/strrchr-glibc 0 ,1 ,1 ,127 ,0 ,0 ,2.966 ,2.983 ,0.994 0 ,1 ,1 ,127 ,0 ,23 ,3.178 ,3.188 ,0.997 0 ,1 ,10 ,127 ,9 ,0 ,3.081 ,3.007 ,1.025 0 ,1 ,10 ,127 ,9 ,23 ,3.145 ,3.148 ,0.999 0 ,1 ,1024 ,127 ,0 ,0 ,3.727 ,3.046 ,1.224 0 ,1 ,1024 ,127 ,0 ,23 ,20.697 ,31.221 ,0.663 0 ,1 ,1024 ,127 ,1024 ,0 ,18.007 ,31.044 ,0.58 0 ,1 ,1024 ,127 ,1024 ,23 ,20.643 ,30.514 ,0.677 0 ,1 ,1024 ,127 ,144 ,0 ,6.371 ,9.031 ,0.705 0 ,1 ,1024 ,127 ,144 ,23 ,18.349 ,30.847 ,0.595 0 ,1 ,1024 ,127 ,192 ,0 ,7.457 ,10.31 ,0.723 0 ,1 ,1024 ,127 ,192 ,23 ,18.031 ,30.368 ,0.594 0 ,1 ,1024 ,127 ,240 ,0 ,6.63 ,9.71 ,0.683 0 ,1 ,1024 ,127 ,240 ,23 ,18.012 ,31.189 ,0.578 0 ,1 ,1024 ,127 ,288 ,0 ,9.467 ,12.061 ,0.785 0 ,1 ,1024 ,127 ,288 ,23 ,19.968 ,30.068 ,0.664 0 ,1 ,1024 ,127 ,48 ,0 ,4.437 ,4.235 ,1.048 0 ,1 ,1024 ,127 ,48 ,23 ,20.137 ,30.478 ,0.661 0 ,1 ,1024 ,127 ,736 ,0 ,13.541 ,22.361 ,0.606 0 ,1 ,1024 ,127 ,736 ,23 ,19.175 ,29.777 ,0.644 0 ,1 ,1024 ,127 ,784 ,0 ,15.315 ,23.778 ,0.644 0 ,1 ,1024 ,127 ,784 ,23 ,20.807 ,32.904 ,0.632 0 ,1 ,1024 ,127 ,832 ,0 ,15.846 ,25.454 ,0.623 0 ,1 ,1024 ,127 ,832 ,23 ,19.736 ,32.652 ,0.604 0 ,1 ,1024 ,127 ,880 ,0 ,14.95 ,25.394 ,0.589 0 ,1 ,1024 ,127 ,880 ,23 ,20.867 ,32.337 ,0.645 0 ,1 ,1024 ,127 ,928 ,0 ,15.721 ,27.709 ,0.567 0 ,1 ,1024 ,127 ,928 ,23 ,20.862 ,32.035 ,0.651 0 ,1 ,1024 ,127 ,96 ,0 ,5.724 ,5.77 ,0.992 0 ,1 ,1024 ,127 ,96 ,23 ,19.75 ,31.262 ,0.632 0 ,1 ,1024 ,127 ,976 ,0 ,17.488 ,28.876 ,0.606 0 ,1 ,1024 ,127 ,976 ,23 ,20.566 ,32.876 ,0.626 0 ,1 ,1072 ,127 ,1024 ,0 ,17.105 ,30.693 ,0.557 0 ,1 ,1072 ,127 ,1024 ,23 ,19.859 ,32.556 ,0.61 0 ,1 ,11 ,127 ,10 ,0 ,3.137 ,3.482 ,0.901 0 ,1 ,11 ,127 ,10 ,23 ,3.17 ,3.153 ,1.005 0 ,1 ,112 ,127 ,144 ,0 ,4.981 ,5.101 ,0.977 0 ,1 ,112 ,127 ,144 ,23 ,5.006 ,6.439 ,0.777 0 ,1 ,112 ,127 ,16 ,0 ,3.099 ,3.038 ,1.02 0 ,1 ,112 ,127 ,16 ,23 ,4.667 ,5.834 ,0.8 0 ,1 ,112 ,127 ,256 ,0 ,4.932 ,4.991 ,0.988 0 ,1 ,112 ,127 ,256 ,23 ,5.031 ,6.201 ,0.811 0 ,1 ,112 ,127 ,64 ,0 ,4.957 ,4.304 ,1.152 0 ,1 ,112 ,127 ,64 ,23 ,4.984 ,5.876 ,0.848 0 ,1 ,112 ,127 ,96 ,0 ,4.977 ,4.887 ,1.019 0 ,1 ,112 ,127 ,96 ,23 ,5.031 ,5.661 ,0.889 0 ,1 ,1120 ,127 ,1024 ,0 ,17.107 ,30.402 ,0.563 0 ,1 ,1120 ,127 ,1024 ,23 ,20.414 ,34.412 ,0.593 0 ,1 ,1168 ,127 ,1024 ,0 ,16.961 ,30.616 ,0.554 0 ,1 ,1168 ,127 ,1024 ,23 ,24.161 ,37.76 ,0.64 0 ,1 ,12 ,127 ,11 ,0 ,3.021 ,3.071 ,0.984 0 ,1 ,12 ,127 ,11 ,23 ,3.178 ,3.153 ,1.008 0 ,1 ,1216 ,127 ,1024 ,0 ,17.254 ,30.827 ,0.56 0 ,1 ,1216 ,127 ,1024 ,23 ,21.954 ,37.513 ,0.585 0 ,1 ,1264 ,127 ,1024 ,0 ,17.85 ,30.564 ,0.584 0 ,1 ,1264 ,127 ,1024 ,23 ,22.583 ,37.29 ,0.606 0 ,1 ,128 ,127 ,0 ,0 ,3.102 ,3.06 ,1.014 0 ,1 ,128 ,127 ,0 ,23 ,6.278 ,8.376 ,0.75 0 ,1 ,128 ,127 ,112 ,0 ,4.933 ,4.908 ,1.005 0 ,1 ,128 ,127 ,112 ,23 ,5.135 ,9.127 ,0.563 0 ,1 ,128 ,127 ,128 ,0 ,5.274 ,8.098 ,0.651 0 ,1 ,128 ,127 ,128 ,23 ,6.36 ,8.124 ,0.783 0 ,1 ,128 ,127 ,144 ,0 ,5.307 ,8.109 ,0.654 0 ,1 ,128 ,127 ,144 ,23 ,6.349 ,8.178 ,0.776 0 ,1 ,128 ,127 ,192 ,0 ,5.182 ,8.209 ,0.631 0 ,1 ,128 ,127 ,192 ,23 ,6.996 ,8.218 ,0.851 0 ,1 ,128 ,127 ,240 ,0 ,5.183 ,8.091 ,0.641 0 ,1 ,128 ,127 ,240 ,23 ,6.993 ,8.208 ,0.852 0 ,1 ,128 ,127 ,288 ,0 ,5.208 ,8.162 ,0.638 0 ,1 ,128 ,127 ,288 ,23 ,6.581 ,8.194 ,0.803 0 ,1 ,128 ,127 ,32 ,0 ,3.091 ,4.337 ,0.713 0 ,1 ,128 ,127 ,32 ,23 ,6.502 ,8.12 ,0.801 0 ,1 ,128 ,127 ,48 ,0 ,3.098 ,4.296 ,0.721 0 ,1 ,128 ,127 ,48 ,23 ,5.909 ,8.148 ,0.725 0 ,1 ,128 ,127 ,80 ,0 ,4.957 ,4.2 ,1.18 0 ,1 ,128 ,127 ,80 ,23 ,5.257 ,8.161 ,0.644 0 ,1 ,128 ,127 ,96 ,0 ,4.956 ,4.888 ,1.014 0 ,1 ,128 ,127 ,96 ,23 ,5.255 ,7.117 ,0.738 0 ,1 ,13 ,127 ,12 ,0 ,3.016 ,3.298 ,0.915 0 ,1 ,13 ,127 ,12 ,23 ,3.169 ,3.13 ,1.013 0 ,1 ,1312 ,127 ,1024 ,0 ,18.457 ,30.698 ,0.601 0 ,1 ,1312 ,127 ,1024 ,23 ,24.591 ,40.376 ,0.609 0 ,1 ,14 ,127 ,13 ,0 ,3.135 ,2.981 ,1.052 0 ,1 ,14 ,127 ,13 ,23 ,3.144 ,3.153 ,0.997 0 ,1 ,144 ,127 ,128 ,0 ,5.096 ,8.032 ,0.635 0 ,1 ,144 ,127 ,128 ,23 ,5.156 ,8.561 ,0.602 0 ,1 ,15 ,127 ,14 ,0 ,3.062 ,2.946 ,1.039 0 ,1 ,15 ,127 ,14 ,23 ,3.145 ,3.145 ,1.0 0 ,1 ,16 ,127 ,0 ,0 ,3.115 ,3.059 ,1.018 0 ,1 ,16 ,127 ,0 ,23 ,3.516 ,3.148 ,1.117 0 ,1 ,16 ,127 ,144 ,0 ,3.084 ,3.038 ,1.015 0 ,1 ,16 ,127 ,144 ,23 ,3.852 ,3.917 ,0.983 0 ,1 ,16 ,127 ,15 ,0 ,3.048 ,3.052 ,0.999 0 ,1 ,16 ,127 ,15 ,23 ,3.187 ,3.114 ,1.024 0 ,1 ,16 ,127 ,16 ,0 ,3.094 ,3.066 ,1.009 0 ,1 ,16 ,127 ,16 ,23 ,3.787 ,3.886 ,0.974 0 ,1 ,16 ,127 ,192 ,0 ,3.099 ,3.053 ,1.015 0 ,1 ,16 ,127 ,192 ,23 ,3.755 ,3.9 ,0.963 0 ,1 ,16 ,127 ,240 ,0 ,3.122 ,3.053 ,1.023 0 ,1 ,16 ,127 ,240 ,23 ,3.765 ,3.827 ,0.984 0 ,1 ,16 ,127 ,256 ,0 ,3.099 ,3.097 ,1.0 0 ,1 ,16 ,127 ,256 ,23 ,3.792 ,3.699 ,1.025 0 ,1 ,16 ,127 ,288 ,0 ,3.115 ,3.053 ,1.02 0 ,1 ,16 ,127 ,288 ,23 ,4.518 ,3.9 ,1.158 0 ,1 ,16 ,127 ,48 ,0 ,3.107 ,3.085 ,1.007 0 ,1 ,16 ,127 ,48 ,23 ,3.804 ,4.083 ,0.932 0 ,1 ,16 ,127 ,64 ,0 ,3.098 ,3.099 ,1.0 0 ,1 ,16 ,127 ,64 ,23 ,3.773 ,4.212 ,0.896 0 ,1 ,16 ,127 ,96 ,0 ,3.13 ,3.038 ,1.03 0 ,1 ,16 ,127 ,96 ,23 ,3.792 ,4.001 ,0.948 0 ,1 ,160 ,127 ,144 ,0 ,5.091 ,8.008 ,0.636 0 ,1 ,160 ,127 ,144 ,23 ,5.185 ,8.412 ,0.616 0 ,1 ,160 ,127 ,16 ,0 ,3.101 ,3.053 ,1.016 0 ,1 ,160 ,127 ,16 ,23 ,5.906 ,10.008 ,0.59 0 ,1 ,160 ,127 ,256 ,0 ,5.131 ,8.093 ,0.634 0 ,1 ,160 ,127 ,256 ,23 ,6.288 ,8.097 ,0.777 0 ,1 ,160 ,127 ,64 ,0 ,5.007 ,4.308 ,1.162 0 ,1 ,160 ,127 ,64 ,23 ,5.503 ,8.187 ,0.672 0 ,1 ,160 ,127 ,96 ,0 ,4.981 ,4.95 ,1.006 0 ,1 ,160 ,127 ,96 ,23 ,5.765 ,7.035 ,0.819 0 ,1 ,17 ,127 ,16 ,0 ,3.054 ,3.074 ,0.994 0 ,1 ,17 ,127 ,16 ,23 ,3.153 ,3.125 ,1.009 0 ,1 ,176 ,127 ,128 ,0 ,5.183 ,8.065 ,0.643 0 ,1 ,176 ,127 ,128 ,23 ,5.168 ,8.353 ,0.619 0 ,1 ,176 ,127 ,160 ,0 ,5.21 ,8.047 ,0.647 0 ,1 ,176 ,127 ,160 ,23 ,5.183 ,9.184 ,0.564 0 ,1 ,176 ,127 ,32 ,0 ,3.098 ,4.342 ,0.713 0 ,1 ,176 ,127 ,32 ,23 ,5.854 ,8.052 ,0.727 0 ,1 ,1760 ,127 ,2048 ,0 ,28.253 ,68.431 ,0.413 0 ,1 ,1760 ,127 ,2048 ,23 ,29.553 ,67.922 ,0.435 0 ,1 ,1760 ,127 ,288 ,0 ,9.083 ,11.037 ,0.823 0 ,1 ,1760 ,127 ,288 ,23 ,28.852 ,49.864 ,0.579 0 ,1 ,18 ,127 ,17 ,0 ,3.385 ,2.987 ,1.133 0 ,1 ,18 ,127 ,17 ,23 ,3.166 ,3.145 ,1.007 0 ,1 ,1808 ,127 ,2048 ,0 ,28.994 ,70.121 ,0.413 0 ,1 ,1808 ,127 ,2048 ,23 ,31.177 ,71.111 ,0.438 0 ,1 ,1808 ,127 ,240 ,0 ,7.319 ,9.865 ,0.742 0 ,1 ,1808 ,127 ,240 ,23 ,29.899 ,48.525 ,0.616 0 ,1 ,1856 ,127 ,192 ,0 ,6.708 ,9.712 ,0.691 0 ,1 ,1856 ,127 ,192 ,23 ,30.362 ,53.506 ,0.567 0 ,1 ,1856 ,127 ,2048 ,0 ,29.728 ,69.492 ,0.428 0 ,1 ,1856 ,127 ,2048 ,23 ,31.795 ,70.51 ,0.451 0 ,1 ,19 ,127 ,18 ,0 ,3.069 ,3.079 ,0.997 0 ,1 ,19 ,127 ,18 ,23 ,3.161 ,3.136 ,1.008 0 ,1 ,1904 ,127 ,144 ,0 ,6.13 ,8.565 ,0.716 0 ,1 ,1904 ,127 ,144 ,23 ,30.397 ,50.784 ,0.599 0 ,1 ,1904 ,127 ,2048 ,0 ,29.915 ,70.101 ,0.427 0 ,1 ,1904 ,127 ,2048 ,23 ,30.958 ,70.837 ,0.437 0 ,1 ,192 ,127 ,176 ,0 ,5.21 ,8.08 ,0.645 0 ,1 ,192 ,127 ,176 ,23 ,5.859 ,11.223 ,0.522 0 ,1 ,1952 ,127 ,2048 ,0 ,30.047 ,74.454 ,0.404 0 ,1 ,1952 ,127 ,2048 ,23 ,32.931 ,73.662 ,0.447 0 ,1 ,1952 ,127 ,96 ,0 ,6.32 ,5.187 ,1.218 0 ,1 ,1952 ,127 ,96 ,23 ,32.679 ,75.722 ,0.432 0 ,1 ,2 ,127 ,1 ,0 ,2.919 ,2.967 ,0.984 0 ,1 ,2 ,127 ,1 ,23 ,3.178 ,3.122 ,1.018 0 ,1 ,20 ,127 ,19 ,0 ,3.039 ,2.995 ,1.015 0 ,1 ,20 ,127 ,19 ,23 ,3.137 ,3.113 ,1.008 0 ,1 ,2000 ,127 ,2048 ,0 ,30.331 ,75.947 ,0.399 0 ,1 ,2000 ,127 ,2048 ,23 ,32.174 ,73.461 ,0.438 0 ,1 ,2000 ,127 ,48 ,0 ,4.286 ,4.168 ,1.028 0 ,1 ,2000 ,127 ,48 ,23 ,34.849 ,67.532 ,0.516 0 ,1 ,2048 ,127 ,0 ,0 ,4.751 ,3.133 ,1.517 0 ,1 ,2048 ,127 ,0 ,23 ,35.011 ,76.157 ,0.46 0 ,1 ,2048 ,127 ,1024 ,0 ,18.037 ,33.074 ,0.545 0 ,1 ,2048 ,127 ,1024 ,23 ,34.924 ,59.377 ,0.588 0 ,1 ,2048 ,127 ,128 ,0 ,5.029 ,7.956 ,0.632 0 ,1 ,2048 ,127 ,128 ,23 ,33.228 ,57.793 ,0.575 0 ,1 ,2048 ,127 ,144 ,0 ,6.473 ,8.183 ,0.791 0 ,1 ,2048 ,127 ,144 ,23 ,33.341 ,55.555 ,0.6 0 ,1 ,2048 ,127 ,1760 ,0 ,28.416 ,68.45 ,0.415 0 ,1 ,2048 ,127 ,1760 ,23 ,37.008 ,61.149 ,0.605 0 ,1 ,2048 ,127 ,1808 ,0 ,29.105 ,69.316 ,0.42 0 ,1 ,2048 ,127 ,1808 ,23 ,38.015 ,60.564 ,0.628 0 ,1 ,2048 ,127 ,1856 ,0 ,29.132 ,70.656 ,0.412 0 ,1 ,2048 ,127 ,1856 ,23 ,36.962 ,60.026 ,0.616 0 ,1 ,2048 ,127 ,1904 ,0 ,29.385 ,71.07 ,0.413 0 ,1 ,2048 ,127 ,1904 ,23 ,38.724 ,61.505 ,0.63 0 ,1 ,2048 ,127 ,192 ,0 ,6.697 ,9.995 ,0.67 0 ,1 ,2048 ,127 ,192 ,23 ,32.848 ,71.547 ,0.459 0 ,1 ,2048 ,127 ,1952 ,0 ,30.459 ,71.618 ,0.425 0 ,1 ,2048 ,127 ,1952 ,23 ,36.818 ,61.726 ,0.596 0 ,1 ,2048 ,127 ,2000 ,0 ,31.646 ,74.669 ,0.424 0 ,1 ,2048 ,127 ,2000 ,23 ,40.474 ,63.49 ,0.637 0 ,1 ,2048 ,127 ,2048 ,0 ,31.931 ,74.167 ,0.431 0 ,1 ,2048 ,127 ,2048 ,23 ,35.59 ,80.296 ,0.443 0 ,1 ,2048 ,127 ,240 ,0 ,6.502 ,10.214 ,0.637 0 ,1 ,2048 ,127 ,240 ,23 ,33.179 ,68.227 ,0.486 0 ,1 ,2048 ,127 ,256 ,0 ,8.792 ,12.314 ,0.714 0 ,1 ,2048 ,127 ,256 ,23 ,34.148 ,78.522 ,0.435 0 ,1 ,2048 ,127 ,288 ,0 ,9.02 ,11.495 ,0.785 0 ,1 ,2048 ,127 ,288 ,23 ,34.193 ,75.257 ,0.454 0 ,1 ,2048 ,127 ,32 ,0 ,6.315 ,4.21 ,1.5 0 ,1 ,2048 ,127 ,32 ,23 ,34.46 ,67.577 ,0.51 0 ,1 ,2048 ,127 ,4096 ,0 ,30.586 ,79.128 ,0.387 0 ,1 ,2048 ,127 ,4096 ,23 ,34.698 ,79.702 ,0.435 0 ,1 ,2048 ,127 ,48 ,0 ,4.254 ,4.254 ,1.0 0 ,1 ,2048 ,127 ,48 ,23 ,34.526 ,69.505 ,0.497 0 ,1 ,2048 ,127 ,512 ,0 ,10.018 ,20.415 ,0.491 0 ,1 ,2048 ,127 ,512 ,23 ,33.986 ,63.296 ,0.537 0 ,1 ,2048 ,127 ,64 ,0 ,4.85 ,4.104 ,1.182 0 ,1 ,2048 ,127 ,64 ,23 ,33.907 ,70.864 ,0.478 0 ,1 ,2048 ,127 ,96 ,0 ,6.03 ,5.237 ,1.151 0 ,1 ,2048 ,127 ,96 ,23 ,33.924 ,75.7 ,0.448 0 ,1 ,208 ,127 ,16 ,0 ,3.153 ,3.053 ,1.033 0 ,1 ,208 ,127 ,16 ,23 ,6.941 ,10.069 ,0.689 0 ,1 ,208 ,127 ,192 ,0 ,4.919 ,9.862 ,0.499 0 ,1 ,208 ,127 ,192 ,23 ,5.153 ,11.23 ,0.459 0 ,1 ,208 ,127 ,256 ,0 ,5.292 ,9.883 ,0.535 0 ,1 ,208 ,127 ,256 ,23 ,7.241 ,9.359 ,0.774 0 ,1 ,208 ,127 ,48 ,0 ,3.083 ,4.325 ,0.713 0 ,1 ,208 ,127 ,48 ,23 ,6.971 ,10.149 ,0.687 0 ,1 ,208 ,127 ,64 ,0 ,4.982 ,4.156 ,1.199 0 ,1 ,208 ,127 ,64 ,23 ,6.229 ,9.976 ,0.624 0 ,1 ,2096 ,127 ,2048 ,0 ,31.43 ,75.699 ,0.415 0 ,1 ,2096 ,127 ,2048 ,23 ,38.359 ,63.822 ,0.601 0 ,1 ,21 ,127 ,20 ,0 ,3.127 ,3.035 ,1.03 0 ,1 ,21 ,127 ,20 ,23 ,3.129 ,3.106 ,1.007 0 ,1 ,2144 ,127 ,2048 ,0 ,32.396 ,77.421 ,0.418 0 ,1 ,2144 ,127 ,2048 ,23 ,36.676 ,63.418 ,0.578 0 ,1 ,2192 ,127 ,2048 ,0 ,33.077 ,76.825 ,0.431 0 ,1 ,2192 ,127 ,2048 ,23 ,38.77 ,64.917 ,0.597 0 ,1 ,22 ,127 ,21 ,0 ,3.094 ,2.994 ,1.033 0 ,1 ,22 ,127 ,21 ,23 ,3.169 ,3.13 ,1.012 0 ,1 ,224 ,127 ,128 ,0 ,5.208 ,8.112 ,0.642 0 ,1 ,224 ,127 ,128 ,23 ,5.823 ,10.535 ,0.553 0 ,1 ,224 ,127 ,208 ,0 ,5.149 ,9.883 ,0.521 0 ,1 ,224 ,127 ,208 ,23 ,5.373 ,10.333 ,0.52 0 ,1 ,224 ,127 ,288 ,0 ,5.563 ,9.722 ,0.572 0 ,1 ,224 ,127 ,288 ,23 ,7.817 ,9.402 ,0.831 0 ,1 ,224 ,127 ,32 ,0 ,3.099 ,4.295 ,0.722 0 ,1 ,224 ,127 ,32 ,23 ,7.105 ,9.802 ,0.725 0 ,1 ,224 ,127 ,512 ,0 ,5.133 ,9.836 ,0.522 0 ,1 ,224 ,127 ,512 ,23 ,7.786 ,9.311 ,0.836 0 ,1 ,2240 ,127 ,2048 ,0 ,32.561 ,77.729 ,0.419 0 ,1 ,2240 ,127 ,2048 ,23 ,39.404 ,65.423 ,0.602 0 ,1 ,2288 ,127 ,2048 ,0 ,33.339 ,76.88 ,0.434 0 ,1 ,2288 ,127 ,2048 ,23 ,39.434 ,67.761 ,0.582 0 ,1 ,23 ,127 ,22 ,0 ,3.069 ,3.002 ,1.022 0 ,1 ,23 ,127 ,22 ,23 ,3.146 ,3.228 ,0.974 0 ,1 ,2336 ,127 ,2048 ,0 ,32.8 ,77.427 ,0.424 0 ,1 ,2336 ,127 ,2048 ,23 ,40.023 ,67.47 ,0.593 0 ,1 ,24 ,127 ,23 ,0 ,3.024 ,3.01 ,1.004 0 ,1 ,24 ,127 ,23 ,23 ,3.267 ,3.129 ,1.044 0 ,1 ,240 ,127 ,224 ,0 ,5.294 ,9.826 ,0.539 0 ,1 ,240 ,127 ,224 ,23 ,5.064 ,11.095 ,0.456 0 ,1 ,25 ,127 ,24 ,0 ,3.054 ,3.017 ,1.012 0 ,1 ,25 ,127 ,24 ,23 ,3.144 ,3.114 ,1.01 0 ,1 ,256 ,127 ,0 ,0 ,3.098 ,3.061 ,1.012 0 ,1 ,256 ,127 ,0 ,23 ,9.171 ,11.843 ,0.774 0 ,1 ,256 ,127 ,112 ,0 ,4.981 ,5.05 ,0.986 0 ,1 ,256 ,127 ,112 ,23 ,9.383 ,10.471 ,0.896 0 ,1 ,256 ,127 ,144 ,0 ,5.363 ,8.16 ,0.657 0 ,1 ,256 ,127 ,144 ,23 ,7.489 ,12.064 ,0.621 0 ,1 ,256 ,127 ,16 ,0 ,3.13 ,3.195 ,0.98 0 ,1 ,256 ,127 ,16 ,23 ,10.519 ,12.539 ,0.839 0 ,1 ,256 ,127 ,160 ,0 ,6.025 ,8.128 ,0.741 0 ,1 ,256 ,127 ,160 ,23 ,7.804 ,11.652 ,0.67 0 ,1 ,256 ,127 ,192 ,0 ,5.392 ,9.785 ,0.551 0 ,1 ,256 ,127 ,192 ,23 ,7.06 ,12.141 ,0.582 0 ,1 ,256 ,127 ,208 ,0 ,5.352 ,9.807 ,0.546 0 ,1 ,256 ,127 ,208 ,23 ,7.208 ,12.283 ,0.587 0 ,1 ,256 ,127 ,240 ,0 ,5.564 ,9.779 ,0.569 0 ,1 ,256 ,127 ,240 ,23 ,6.929 ,11.489 ,0.603 0 ,1 ,256 ,127 ,256 ,0 ,8.085 ,11.22 ,0.721 0 ,1 ,256 ,127 ,256 ,23 ,8.975 ,11.182 ,0.803 0 ,1 ,256 ,127 ,288 ,0 ,7.95 ,11.247 ,0.707 0 ,1 ,256 ,127 ,288 ,23 ,8.597 ,11.107 ,0.774 0 ,1 ,256 ,127 ,48 ,0 ,3.181 ,4.303 ,0.739 0 ,1 ,256 ,127 ,48 ,23 ,8.712 ,11.591 ,0.752 0 ,1 ,256 ,127 ,64 ,0 ,5.006 ,4.261 ,1.175 0 ,1 ,256 ,127 ,64 ,23 ,8.513 ,11.664 ,0.73 0 ,1 ,256 ,127 ,96 ,0 ,4.932 ,4.935 ,0.999 0 ,1 ,256 ,127 ,96 ,23 ,8.432 ,10.503 ,0.803 0 ,1 ,26 ,127 ,25 ,0 ,3.024 ,3.038 ,0.995 0 ,1 ,26 ,127 ,25 ,23 ,3.296 ,3.161 ,1.043 0 ,1 ,27 ,127 ,26 ,0 ,3.046 ,3.046 ,1.0 0 ,1 ,27 ,127 ,26 ,23 ,3.314 ,3.269 ,1.014 0 ,1 ,272 ,127 ,128 ,0 ,5.182 ,8.086 ,0.641 0 ,1 ,272 ,127 ,128 ,23 ,7.459 ,12.355 ,0.604 0 ,1 ,272 ,127 ,240 ,0 ,5.474 ,9.739 ,0.562 0 ,1 ,272 ,127 ,240 ,23 ,8.765 ,11.08 ,0.791 0 ,1 ,272 ,127 ,256 ,0 ,7.913 ,11.219 ,0.705 0 ,1 ,272 ,127 ,256 ,23 ,7.794 ,11.429 ,0.682 0 ,1 ,272 ,127 ,32 ,0 ,3.114 ,4.294 ,0.725 0 ,1 ,272 ,127 ,32 ,23 ,8.761 ,11.618 ,0.754 0 ,1 ,272 ,127 ,512 ,0 ,7.786 ,11.251 ,0.692 0 ,1 ,272 ,127 ,512 ,23 ,8.554 ,10.759 ,0.795 0 ,1 ,28 ,127 ,27 ,0 ,3.038 ,3.039 ,1.0 0 ,1 ,28 ,127 ,27 ,23 ,3.331 ,3.216 ,1.036 0 ,1 ,288 ,127 ,272 ,0 ,8.597 ,11.465 ,0.75 0 ,1 ,288 ,127 ,272 ,23 ,8.251 ,11.85 ,0.696 0 ,1 ,29 ,127 ,28 ,0 ,3.068 ,3.016 ,1.017 0 ,1 ,29 ,127 ,28 ,23 ,3.161 ,3.361 ,0.94 0 ,1 ,3 ,127 ,2 ,0 ,2.989 ,3.129 ,0.956 0 ,1 ,3 ,127 ,2 ,23 ,3.177 ,3.129 ,1.015 0 ,1 ,30 ,127 ,29 ,0 ,3.067 ,3.038 ,1.01 0 ,1 ,30 ,127 ,29 ,23 ,3.161 ,3.254 ,0.971 0 ,1 ,304 ,127 ,16 ,0 ,3.114 ,3.053 ,1.02 0 ,1 ,304 ,127 ,16 ,23 ,9.079 ,11.926 ,0.761 0 ,1 ,304 ,127 ,256 ,0 ,7.965 ,11.28 ,0.706 0 ,1 ,304 ,127 ,256 ,23 ,9.262 ,11.358 ,0.816 0 ,1 ,304 ,127 ,64 ,0 ,4.957 ,4.287 ,1.156 0 ,1 ,304 ,127 ,64 ,23 ,8.067 ,11.67 ,0.691 0 ,1 ,31 ,127 ,30 ,0 ,3.084 ,3.053 ,1.01 0 ,1 ,31 ,127 ,30 ,23 ,3.161 ,3.244 ,0.974 0 ,1 ,32 ,127 ,0 ,0 ,3.114 ,3.053 ,1.02 0 ,1 ,32 ,127 ,0 ,23 ,3.336 ,4.092 ,0.815 0 ,1 ,32 ,127 ,128 ,0 ,3.097 ,4.319 ,0.717 0 ,1 ,32 ,127 ,128 ,23 ,3.812 ,4.425 ,0.861 0 ,1 ,32 ,127 ,144 ,0 ,3.099 ,4.254 ,0.728 0 ,1 ,32 ,127 ,144 ,23 ,3.954 ,4.317 ,0.916 0 ,1 ,32 ,127 ,16 ,0 ,3.098 ,3.024 ,1.025 0 ,1 ,32 ,127 ,16 ,23 ,3.161 ,4.388 ,0.72 0 ,1 ,32 ,127 ,192 ,0 ,3.099 ,4.338 ,0.714 0 ,1 ,32 ,127 ,192 ,23 ,3.832 ,4.295 ,0.892 0 ,1 ,32 ,127 ,240 ,0 ,3.114 ,4.294 ,0.725 0 ,1 ,32 ,127 ,240 ,23 ,3.794 ,4.404 ,0.861 0 ,1 ,32 ,127 ,288 ,0 ,3.114 ,4.36 ,0.714 0 ,1 ,32 ,127 ,288 ,23 ,3.754 ,4.316 ,0.87 0 ,1 ,32 ,127 ,31 ,0 ,3.098 ,3.038 ,1.02 0 ,1 ,32 ,127 ,31 ,23 ,3.145 ,4.249 ,0.74 0 ,1 ,32 ,127 ,32 ,0 ,3.109 ,4.281 ,0.726 0 ,1 ,32 ,127 ,32 ,23 ,3.766 ,4.472 ,0.842 0 ,1 ,32 ,127 ,48 ,0 ,3.13 ,4.279 ,0.731 0 ,1 ,32 ,127 ,48 ,23 ,3.736 ,4.403 ,0.849 0 ,1 ,32 ,127 ,96 ,0 ,3.09 ,4.289 ,0.721 0 ,1 ,32 ,127 ,96 ,23 ,3.764 ,4.408 ,0.854 0 ,1 ,320 ,127 ,128 ,0 ,5.156 ,8.122 ,0.635 0 ,1 ,320 ,127 ,128 ,23 ,7.77 ,13.797 ,0.563 0 ,1 ,320 ,127 ,192 ,0 ,5.669 ,10.041 ,0.565 0 ,1 ,320 ,127 ,192 ,23 ,8.175 ,14.602 ,0.56 0 ,1 ,320 ,127 ,32 ,0 ,3.136 ,4.316 ,0.727 0 ,1 ,320 ,127 ,32 ,23 ,8.783 ,13.062 ,0.672 0 ,1 ,320 ,127 ,512 ,0 ,7.919 ,12.819 ,0.618 0 ,1 ,320 ,127 ,512 ,23 ,10.115 ,12.419 ,0.814 0 ,1 ,352 ,127 ,256 ,0 ,7.735 ,11.274 ,0.686 0 ,1 ,352 ,127 ,256 ,23 ,9.6 ,13.855 ,0.693 0 ,1 ,352 ,127 ,64 ,0 ,4.957 ,3.96 ,1.252 0 ,1 ,352 ,127 ,64 ,23 ,7.969 ,13.439 ,0.593 0 ,1 ,368 ,127 ,128 ,0 ,5.183 ,8.086 ,0.641 0 ,1 ,368 ,127 ,128 ,23 ,7.421 ,13.63 ,0.544 0 ,1 ,368 ,127 ,144 ,0 ,5.151 ,8.241 ,0.625 0 ,1 ,368 ,127 ,144 ,23 ,8.851 ,13.793 ,0.642 0 ,1 ,368 ,127 ,512 ,0 ,7.865 ,12.802 ,0.614 0 ,1 ,368 ,127 ,512 ,23 ,9.26 ,12.768 ,0.725 0 ,1 ,4 ,127 ,3 ,0 ,3.096 ,2.98 ,1.039 0 ,1 ,4 ,127 ,3 ,23 ,3.161 ,3.113 ,1.015 0 ,1 ,400 ,127 ,256 ,0 ,7.736 ,11.296 ,0.685 0 ,1 ,400 ,127 ,256 ,23 ,10.525 ,15.428 ,0.682 0 ,1 ,416 ,127 ,128 ,0 ,5.183 ,8.06 ,0.643 0 ,1 ,416 ,127 ,128 ,23 ,9.009 ,15.068 ,0.598 0 ,1 ,416 ,127 ,512 ,0 ,8.501 ,14.465 ,0.588 0 ,1 ,416 ,127 ,512 ,23 ,11.092 ,14.164 ,0.783 0 ,1 ,416 ,127 ,96 ,0 ,5.868 ,5.336 ,1.1 0 ,1 ,416 ,127 ,96 ,23 ,10.886 ,13.708 ,0.794 0 ,1 ,448 ,127 ,256 ,0 ,7.892 ,11.261 ,0.701 0 ,1 ,448 ,127 ,256 ,23 ,11.196 ,16.908 ,0.662 0 ,1 ,464 ,127 ,48 ,0 ,4.529 ,4.649 ,0.974 0 ,1 ,464 ,127 ,48 ,23 ,11.244 ,16.064 ,0.7 0 ,1 ,464 ,127 ,512 ,0 ,9.139 ,16.035 ,0.57 0 ,1 ,464 ,127 ,512 ,23 ,11.079 ,15.665 ,0.707 0 ,1 ,48 ,127 ,32 ,0 ,3.083 ,4.299 ,0.717 0 ,1 ,48 ,127 ,32 ,23 ,3.16 ,4.478 ,0.706 0 ,1 ,496 ,127 ,256 ,0 ,8.043 ,11.297 ,0.712 0 ,1 ,496 ,127 ,256 ,23 ,10.418 ,16.771 ,0.621 0 ,1 ,5 ,127 ,4 ,0 ,2.959 ,3.002 ,0.986 0 ,1 ,5 ,127 ,4 ,23 ,3.161 ,3.157 ,1.001 0 ,1 ,512 ,127 ,0 ,0 ,3.65 ,3.125 ,1.168 0 ,1 ,512 ,127 ,0 ,23 ,13.168 ,17.987 ,0.732 0 ,1 ,512 ,127 ,144 ,0 ,5.335 ,8.158 ,0.654 0 ,1 ,512 ,127 ,144 ,23 ,11.687 ,17.881 ,0.654 0 ,1 ,512 ,127 ,192 ,0 ,5.42 ,9.795 ,0.553 0 ,1 ,512 ,127 ,192 ,23 ,12.338 ,17.877 ,0.69 0 ,1 ,512 ,127 ,224 ,0 ,6.793 ,9.788 ,0.694 0 ,1 ,512 ,127 ,224 ,23 ,11.314 ,17.583 ,0.643 0 ,1 ,512 ,127 ,240 ,0 ,5.424 ,9.777 ,0.555 0 ,1 ,512 ,127 ,240 ,23 ,11.273 ,17.824 ,0.632 0 ,1 ,512 ,127 ,272 ,0 ,9.427 ,11.25 ,0.838 0 ,1 ,512 ,127 ,272 ,23 ,12.878 ,18.038 ,0.714 0 ,1 ,512 ,127 ,288 ,0 ,9.145 ,11.191 ,0.817 0 ,1 ,512 ,127 ,288 ,23 ,11.651 ,17.873 ,0.652 0 ,1 ,512 ,127 ,320 ,0 ,9.542 ,13.189 ,0.723 0 ,1 ,512 ,127 ,320 ,23 ,11.951 ,19.499 ,0.613 0 ,1 ,512 ,127 ,368 ,0 ,9.8 ,12.866 ,0.762 0 ,1 ,512 ,127 ,368 ,23 ,12.844 ,17.906 ,0.717 0 ,1 ,512 ,127 ,416 ,0 ,9.116 ,14.445 ,0.631 0 ,1 ,512 ,127 ,416 ,23 ,13.135 ,17.839 ,0.736 0 ,1 ,512 ,127 ,464 ,0 ,10.514 ,16.266 ,0.646 0 ,1 ,512 ,127 ,464 ,23 ,12.92 ,20.069 ,0.644 0 ,1 ,512 ,127 ,48 ,0 ,4.724 ,4.276 ,1.105 0 ,1 ,512 ,127 ,48 ,23 ,13.223 ,17.628 ,0.75 0 ,1 ,512 ,127 ,512 ,0 ,10.688 ,17.722 ,0.603 0 ,1 ,512 ,127 ,512 ,23 ,13.09 ,17.489 ,0.748 0 ,1 ,512 ,127 ,96 ,0 ,5.706 ,5.566 ,1.025 0 ,1 ,512 ,127 ,96 ,23 ,11.866 ,16.929 ,0.701 0 ,1 ,544 ,127 ,256 ,0 ,8.801 ,11.243 ,0.783 0 ,1 ,544 ,127 ,256 ,23 ,12.377 ,19.524 ,0.634 0 ,1 ,560 ,127 ,512 ,0 ,10.123 ,17.939 ,0.564 0 ,1 ,560 ,127 ,512 ,23 ,12.011 ,18.084 ,0.664 0 ,1 ,6 ,127 ,5 ,0 ,3.015 ,3.022 ,0.998 0 ,1 ,6 ,127 ,5 ,23 ,3.209 ,3.154 ,1.017 0 ,1 ,608 ,127 ,512 ,0 ,10.31 ,17.63 ,0.585 0 ,1 ,608 ,127 ,512 ,23 ,12.612 ,19.844 ,0.636 0 ,1 ,64 ,127 ,0 ,0 ,3.148 ,3.098 ,1.016 0 ,1 ,64 ,127 ,0 ,23 ,4.838 ,5.521 ,0.876 0 ,1 ,64 ,127 ,144 ,0 ,4.957 ,4.097 ,1.21 0 ,1 ,64 ,127 ,144 ,23 ,5.025 ,5.769 ,0.871 0 ,1 ,64 ,127 ,16 ,0 ,3.122 ,3.068 ,1.018 0 ,1 ,64 ,127 ,16 ,23 ,4.587 ,5.319 ,0.862 0 ,1 ,64 ,127 ,192 ,0 ,4.981 ,4.271 ,1.166 0 ,1 ,64 ,127 ,192 ,23 ,5.032 ,5.623 ,0.895 0 ,1 ,64 ,127 ,240 ,0 ,5.006 ,4.177 ,1.198 0 ,1 ,64 ,127 ,240 ,23 ,5.006 ,5.673 ,0.882 0 ,1 ,64 ,127 ,256 ,0 ,4.981 ,4.175 ,1.193 0 ,1 ,64 ,127 ,256 ,23 ,5.032 ,5.549 ,0.907 0 ,1 ,64 ,127 ,288 ,0 ,4.957 ,3.979 ,1.246 0 ,1 ,64 ,127 ,288 ,23 ,5.109 ,5.632 ,0.907 0 ,1 ,64 ,127 ,48 ,0 ,3.091 ,4.308 ,0.717 0 ,1 ,64 ,127 ,48 ,23 ,4.452 ,4.805 ,0.927 0 ,1 ,64 ,127 ,64 ,0 ,4.974 ,4.264 ,1.166 0 ,1 ,64 ,127 ,64 ,23 ,5.098 ,5.947 ,0.857 0 ,1 ,64 ,127 ,96 ,0 ,4.957 ,4.204 ,1.179 0 ,1 ,64 ,127 ,96 ,23 ,5.031 ,5.785 ,0.87 0 ,1 ,656 ,127 ,512 ,0 ,10.199 ,17.635 ,0.578 0 ,1 ,656 ,127 ,512 ,23 ,14.606 ,23.294 ,0.627 0 ,1 ,7 ,127 ,6 ,0 ,3.041 ,3.046 ,0.998 0 ,1 ,7 ,127 ,6 ,23 ,3.177 ,3.213 ,0.989 0 ,1 ,704 ,127 ,512 ,0 ,10.761 ,17.58 ,0.612 0 ,1 ,704 ,127 ,512 ,23 ,15.862 ,25.677 ,0.618 0 ,1 ,736 ,127 ,1024 ,0 ,12.243 ,21.981 ,0.557 0 ,1 ,736 ,127 ,1024 ,23 ,14.538 ,22.232 ,0.654 0 ,1 ,736 ,127 ,288 ,0 ,9.216 ,11.867 ,0.777 0 ,1 ,736 ,127 ,288 ,23 ,13.535 ,21.782 ,0.621 0 ,1 ,752 ,127 ,512 ,0 ,10.445 ,17.665 ,0.591 0 ,1 ,752 ,127 ,512 ,23 ,16.323 ,23.339 ,0.699 0 ,1 ,784 ,127 ,1024 ,0 ,13.184 ,23.673 ,0.557 0 ,1 ,784 ,127 ,1024 ,23 ,16.755 ,24.668 ,0.679 0 ,1 ,784 ,127 ,240 ,0 ,7.166 ,9.836 ,0.729 0 ,1 ,784 ,127 ,240 ,23 ,15.091 ,23.458 ,0.643 0 ,1 ,8 ,127 ,7 ,0 ,3.187 ,3.056 ,1.043 0 ,1 ,8 ,127 ,7 ,23 ,3.161 ,3.138 ,1.007 0 ,1 ,80 ,127 ,128 ,0 ,4.932 ,4.095 ,1.204 0 ,1 ,80 ,127 ,128 ,23 ,5.032 ,5.639 ,0.892 0 ,1 ,80 ,127 ,32 ,0 ,3.099 ,4.279 ,0.724 0 ,1 ,80 ,127 ,32 ,23 ,4.479 ,5.031 ,0.89 0 ,1 ,80 ,127 ,48 ,0 ,3.116 ,4.304 ,0.724 0 ,1 ,80 ,127 ,48 ,23 ,4.404 ,4.925 ,0.894 0 ,1 ,80 ,127 ,64 ,0 ,4.934 ,4.224 ,1.168 0 ,1 ,80 ,127 ,64 ,23 ,5.059 ,4.798 ,1.054 0 ,1 ,800 ,127 ,512 ,0 ,11.268 ,17.689 ,0.637 0 ,1 ,800 ,127 ,512 ,23 ,16.309 ,26.236 ,0.622 0 ,1 ,832 ,127 ,1024 ,0 ,14.401 ,25.327 ,0.569 0 ,1 ,832 ,127 ,1024 ,23 ,17.302 ,25.021 ,0.692 0 ,1 ,832 ,127 ,192 ,0 ,7.306 ,9.64 ,0.758 0 ,1 ,832 ,127 ,192 ,23 ,14.672 ,24.988 ,0.587 0 ,1 ,880 ,127 ,1024 ,0 ,14.098 ,25.311 ,0.557 0 ,1 ,880 ,127 ,1024 ,23 ,16.511 ,25.174 ,0.656 0 ,1 ,880 ,127 ,144 ,0 ,6.144 ,8.067 ,0.762 0 ,1 ,880 ,127 ,144 ,23 ,15.766 ,25.381 ,0.621 0 ,1 ,9 ,127 ,8 ,0 ,2.987 ,3.049 ,0.98 0 ,1 ,9 ,127 ,8 ,23 ,3.161 ,3.146 ,1.005 0 ,1 ,928 ,127 ,1024 ,0 ,15.142 ,27.182 ,0.557 0 ,1 ,928 ,127 ,1024 ,23 ,18.63 ,27.478 ,0.678 0 ,1 ,928 ,127 ,96 ,0 ,6.498 ,5.501 ,1.181 0 ,1 ,928 ,127 ,96 ,23 ,17.987 ,26.647 ,0.675 0 ,1 ,96 ,127 ,80 ,0 ,5.009 ,4.094 ,1.223 0 ,1 ,96 ,127 ,80 ,23 ,5.056 ,6.327 ,0.799 0 ,1 ,976 ,127 ,1024 ,0 ,15.793 ,28.863 ,0.547 0 ,1 ,976 ,127 ,1024 ,23 ,18.728 ,29.107 ,0.643 0 ,1 ,976 ,127 ,48 ,0 ,4.366 ,4.255 ,1.026 0 ,1 ,976 ,127 ,48 ,23 ,19.248 ,29.085 ,0.662 0 ,16 ,1 ,127 ,0 ,23 ,3.178 ,3.115 ,1.02 0 ,16 ,10 ,127 ,9 ,23 ,3.175 ,3.171 ,1.001 0 ,16 ,1024 ,127 ,0 ,23 ,21.03 ,32.617 ,0.645 0 ,16 ,1024 ,127 ,1024 ,23 ,23.634 ,43.183 ,0.547 0 ,16 ,1024 ,127 ,144 ,23 ,18.486 ,31.015 ,0.596 0 ,16 ,1024 ,127 ,192 ,23 ,18.879 ,32.072 ,0.589 0 ,16 ,1024 ,127 ,240 ,23 ,17.554 ,31.078 ,0.565 0 ,16 ,1024 ,127 ,288 ,23 ,20.114 ,31.785 ,0.633 0 ,16 ,1024 ,127 ,48 ,23 ,20.98 ,31.748 ,0.661 0 ,16 ,1024 ,127 ,736 ,23 ,21.027 ,36.03 ,0.584 0 ,16 ,1024 ,127 ,784 ,23 ,21.708 ,37.96 ,0.572 0 ,16 ,1024 ,127 ,832 ,23 ,20.724 ,38.599 ,0.537 0 ,16 ,1024 ,127 ,880 ,23 ,21.531 ,38.464 ,0.56 0 ,16 ,1024 ,127 ,928 ,23 ,22.492 ,40.187 ,0.56 0 ,16 ,1024 ,127 ,96 ,23 ,18.992 ,29.835 ,0.637 0 ,16 ,1024 ,127 ,976 ,23 ,22.148 ,41.162 ,0.538 0 ,16 ,1072 ,127 ,1024 ,23 ,21.906 ,41.764 ,0.525 0 ,16 ,11 ,127 ,10 ,23 ,3.161 ,3.113 ,1.015 0 ,16 ,112 ,127 ,144 ,23 ,5.042 ,5.202 ,0.969 0 ,16 ,112 ,127 ,16 ,23 ,5.289 ,6.177 ,0.856 0 ,16 ,112 ,127 ,256 ,23 ,5.031 ,4.957 ,1.015 0 ,16 ,112 ,127 ,64 ,23 ,4.96 ,6.004 ,0.826 0 ,16 ,112 ,127 ,96 ,23 ,5.056 ,5.224 ,0.968 0 ,16 ,1120 ,127 ,1024 ,23 ,22.463 ,43.551 ,0.516 0 ,16 ,1168 ,127 ,1024 ,23 ,24.796 ,44.674 ,0.555 0 ,16 ,12 ,127 ,11 ,23 ,3.18 ,3.13 ,1.016 0 ,16 ,1216 ,127 ,1024 ,23 ,25.978 ,46.24 ,0.562 0 ,16 ,1264 ,127 ,1024 ,23 ,25.774 ,46.273 ,0.557 0 ,16 ,128 ,127 ,0 ,23 ,5.984 ,8.405 ,0.712 0 ,16 ,128 ,127 ,112 ,23 ,5.738 ,8.347 ,0.687 0 ,16 ,128 ,127 ,128 ,23 ,5.443 ,7.079 ,0.769 0 ,16 ,128 ,127 ,144 ,23 ,5.337 ,7.081 ,0.754 0 ,16 ,128 ,127 ,192 ,23 ,5.295 ,7.116 ,0.744 0 ,16 ,128 ,127 ,240 ,23 ,6.962 ,7.045 ,0.988 0 ,16 ,128 ,127 ,288 ,23 ,6.599 ,7.011 ,0.941 0 ,16 ,128 ,127 ,32 ,23 ,5.669 ,8.216 ,0.69 0 ,16 ,128 ,127 ,48 ,23 ,5.696 ,8.064 ,0.706 0 ,16 ,128 ,127 ,80 ,23 ,5.422 ,8.103 ,0.669 0 ,16 ,128 ,127 ,96 ,23 ,5.229 ,7.084 ,0.738 0 ,16 ,13 ,127 ,12 ,23 ,3.193 ,3.145 ,1.015 0 ,16 ,1312 ,127 ,1024 ,23 ,26.92 ,47.544 ,0.566 0 ,16 ,14 ,127 ,13 ,23 ,3.177 ,3.121 ,1.018 0 ,16 ,144 ,127 ,128 ,23 ,6.203 ,8.199 ,0.757 0 ,16 ,15 ,127 ,14 ,23 ,3.152 ,3.129 ,1.007 0 ,16 ,16 ,127 ,0 ,23 ,3.307 ,3.13 ,1.057 0 ,16 ,16 ,127 ,144 ,23 ,3.246 ,3.131 ,1.037 0 ,16 ,16 ,127 ,15 ,23 ,3.145 ,3.137 ,1.003 0 ,16 ,16 ,127 ,16 ,23 ,3.26 ,3.145 ,1.036 0 ,16 ,16 ,127 ,192 ,23 ,3.304 ,3.129 ,1.056 0 ,16 ,16 ,127 ,240 ,23 ,3.162 ,3.107 ,1.018 0 ,16 ,16 ,127 ,256 ,23 ,3.773 ,3.72 ,1.014 0 ,16 ,16 ,127 ,288 ,23 ,4.254 ,3.759 ,1.132 0 ,16 ,16 ,127 ,48 ,23 ,3.175 ,3.138 ,1.012 0 ,16 ,16 ,127 ,64 ,23 ,3.341 ,3.13 ,1.068 0 ,16 ,16 ,127 ,96 ,23 ,3.248 ,3.146 ,1.033 0 ,16 ,160 ,127 ,144 ,23 ,5.97 ,8.205 ,0.728 0 ,16 ,160 ,127 ,16 ,23 ,5.982 ,10.111 ,0.592 0 ,16 ,160 ,127 ,256 ,23 ,5.179 ,8.168 ,0.634 0 ,16 ,160 ,127 ,64 ,23 ,5.473 ,8.078 ,0.677 0 ,16 ,160 ,127 ,96 ,23 ,5.106 ,7.049 ,0.724 0 ,16 ,17 ,127 ,16 ,23 ,3.214 ,3.129 ,1.027 0 ,16 ,176 ,127 ,128 ,23 ,5.143 ,8.206 ,0.627 0 ,16 ,176 ,127 ,160 ,23 ,5.422 ,8.171 ,0.664 0 ,16 ,176 ,127 ,32 ,23 ,5.656 ,8.191 ,0.691 0 ,16 ,1760 ,127 ,2048 ,23 ,35.492 ,56.611 ,0.627 0 ,16 ,1760 ,127 ,288 ,23 ,28.885 ,48.89 ,0.591 0 ,16 ,18 ,127 ,17 ,23 ,3.161 ,3.145 ,1.005 0 ,16 ,1808 ,127 ,2048 ,23 ,36.698 ,70.045 ,0.524 0 ,16 ,1808 ,127 ,240 ,23 ,29.66 ,52.863 ,0.561 0 ,16 ,1856 ,127 ,192 ,23 ,30.6 ,53.677 ,0.57 0 ,16 ,1856 ,127 ,2048 ,23 ,37.172 ,61.444 ,0.605 0 ,16 ,19 ,127 ,18 ,23 ,3.182 ,3.146 ,1.012 0 ,16 ,1904 ,127 ,144 ,23 ,29.959 ,51.087 ,0.586 0 ,16 ,1904 ,127 ,2048 ,23 ,38.236 ,61.262 ,0.624 0 ,16 ,192 ,127 ,176 ,23 ,5.827 ,9.934 ,0.587 0 ,16 ,1952 ,127 ,2048 ,23 ,39.716 ,70.817 ,0.561 0 ,16 ,1952 ,127 ,96 ,23 ,32.285 ,74.592 ,0.433 0 ,16 ,2 ,127 ,1 ,23 ,3.145 ,3.128 ,1.005 0 ,16 ,20 ,127 ,19 ,23 ,3.173 ,3.13 ,1.014 0 ,16 ,2000 ,127 ,2048 ,23 ,39.806 ,70.894 ,0.561 0 ,16 ,2000 ,127 ,48 ,23 ,34.576 ,68.146 ,0.507 0 ,16 ,2048 ,127 ,0 ,23 ,35.847 ,74.808 ,0.479 0 ,16 ,2048 ,127 ,1024 ,23 ,39.274 ,67.11 ,0.585 0 ,16 ,2048 ,127 ,128 ,23 ,33.458 ,55.192 ,0.606 0 ,16 ,2048 ,127 ,144 ,23 ,34.526 ,56.472 ,0.611 0 ,16 ,2048 ,127 ,1760 ,23 ,39.921 ,66.213 ,0.603 0 ,16 ,2048 ,127 ,1808 ,23 ,45.015 ,70.109 ,0.642 0 ,16 ,2048 ,127 ,1856 ,23 ,45.023 ,69.55 ,0.647 0 ,16 ,2048 ,127 ,1904 ,23 ,44.574 ,68.752 ,0.648 0 ,16 ,2048 ,127 ,192 ,23 ,33.805 ,73.112 ,0.462 0 ,16 ,2048 ,127 ,1952 ,23 ,42.448 ,68.393 ,0.621 0 ,16 ,2048 ,127 ,2000 ,23 ,48.733 ,70.232 ,0.694 0 ,16 ,2048 ,127 ,2048 ,23 ,46.714 ,77.943 ,0.599 0 ,16 ,2048 ,127 ,240 ,23 ,33.05 ,76.675 ,0.431 0 ,16 ,2048 ,127 ,256 ,23 ,34.01 ,73.68 ,0.462 0 ,16 ,2048 ,127 ,288 ,23 ,34.587 ,75.347 ,0.459 0 ,16 ,2048 ,127 ,32 ,23 ,35.275 ,70.797 ,0.498 0 ,16 ,2048 ,127 ,4096 ,23 ,38.113 ,60.415 ,0.631 0 ,16 ,2048 ,127 ,48 ,23 ,35.108 ,70.415 ,0.499 0 ,16 ,2048 ,127 ,512 ,23 ,35.473 ,60.246 ,0.589 0 ,16 ,2048 ,127 ,64 ,23 ,34.609 ,71.716 ,0.483 0 ,16 ,2048 ,127 ,96 ,23 ,33.815 ,76.222 ,0.444 0 ,16 ,208 ,127 ,16 ,23 ,6.825 ,11.993 ,0.569 0 ,16 ,208 ,127 ,192 ,23 ,5.085 ,10.389 ,0.489 0 ,16 ,208 ,127 ,256 ,23 ,5.216 ,10.3 ,0.506 0 ,16 ,208 ,127 ,48 ,23 ,6.97 ,9.8 ,0.711 0 ,16 ,208 ,127 ,64 ,23 ,5.983 ,9.901 ,0.604 0 ,16 ,2096 ,127 ,2048 ,23 ,41.568 ,73.24 ,0.568 0 ,16 ,21 ,127 ,20 ,23 ,3.161 ,3.16 ,1.0 0 ,16 ,2144 ,127 ,2048 ,23 ,49.168 ,71.646 ,0.686 0 ,16 ,2192 ,127 ,2048 ,23 ,44.934 ,76.146 ,0.59 0 ,16 ,22 ,127 ,21 ,23 ,3.145 ,3.161 ,0.995 0 ,16 ,224 ,127 ,128 ,23 ,5.726 ,10.327 ,0.554 0 ,16 ,224 ,127 ,208 ,23 ,5.298 ,10.397 ,0.51 0 ,16 ,224 ,127 ,288 ,23 ,6.613 ,10.518 ,0.629 0 ,16 ,224 ,127 ,32 ,23 ,7.196 ,9.892 ,0.727 0 ,16 ,224 ,127 ,512 ,23 ,5.99 ,11.037 ,0.543 0 ,16 ,2240 ,127 ,2048 ,23 ,45.542 ,73.966 ,0.616 0 ,16 ,2288 ,127 ,2048 ,23 ,48.387 ,76.458 ,0.633 0 ,16 ,23 ,127 ,22 ,23 ,3.144 ,3.146 ,1.0 0 ,16 ,2336 ,127 ,2048 ,23 ,50.185 ,76.054 ,0.66 0 ,16 ,24 ,127 ,23 ,23 ,3.161 ,3.171 ,0.997 0 ,16 ,240 ,127 ,224 ,23 ,5.351 ,10.344 ,0.517 0 ,16 ,25 ,127 ,24 ,23 ,3.153 ,3.152 ,1.0 0 ,16 ,256 ,127 ,0 ,23 ,9.623 ,11.924 ,0.807 0 ,16 ,256 ,127 ,112 ,23 ,9.269 ,10.427 ,0.889 0 ,16 ,256 ,127 ,144 ,23 ,7.465 ,11.97 ,0.624 0 ,16 ,256 ,127 ,16 ,23 ,9.781 ,12.62 ,0.775 0 ,16 ,256 ,127 ,160 ,23 ,8.275 ,11.177 ,0.74 0 ,16 ,256 ,127 ,192 ,23 ,7.05 ,13.24 ,0.532 0 ,16 ,256 ,127 ,208 ,23 ,6.829 ,13.588 ,0.503 0 ,16 ,256 ,127 ,240 ,23 ,7.194 ,12.471 ,0.577 0 ,16 ,256 ,127 ,256 ,23 ,7.23 ,12.824 ,0.564 0 ,16 ,256 ,127 ,288 ,23 ,7.207 ,12.308 ,0.586 0 ,16 ,256 ,127 ,48 ,23 ,8.624 ,11.379 ,0.758 0 ,16 ,256 ,127 ,64 ,23 ,8.494 ,11.648 ,0.729 0 ,16 ,256 ,127 ,96 ,23 ,8.546 ,10.387 ,0.823 0 ,16 ,26 ,127 ,25 ,23 ,3.179 ,3.144 ,1.011 0 ,16 ,27 ,127 ,26 ,23 ,3.13 ,3.137 ,0.998 0 ,16 ,272 ,127 ,128 ,23 ,7.369 ,12.033 ,0.612 0 ,16 ,272 ,127 ,240 ,23 ,8.258 ,12.267 ,0.673 0 ,16 ,272 ,127 ,256 ,23 ,8.719 ,13.187 ,0.661 0 ,16 ,272 ,127 ,32 ,23 ,8.724 ,11.585 ,0.753 0 ,16 ,272 ,127 ,512 ,23 ,8.646 ,13.317 ,0.649 0 ,16 ,28 ,127 ,27 ,23 ,3.161 ,3.106 ,1.018 0 ,16 ,288 ,127 ,272 ,23 ,8.143 ,13.183 ,0.618 0 ,16 ,29 ,127 ,28 ,23 ,3.145 ,3.153 ,0.998 0 ,16 ,3 ,127 ,2 ,23 ,3.177 ,3.123 ,1.017 0 ,16 ,30 ,127 ,29 ,23 ,3.161 ,3.129 ,1.01 0 ,16 ,304 ,127 ,16 ,23 ,8.854 ,11.821 ,0.749 0 ,16 ,304 ,127 ,256 ,23 ,8.491 ,13.005 ,0.653 0 ,16 ,304 ,127 ,64 ,23 ,8.11 ,11.547 ,0.702 0 ,16 ,31 ,127 ,30 ,23 ,3.28 ,3.226 ,1.017 0 ,16 ,32 ,127 ,0 ,23 ,3.26 ,4.041 ,0.807 0 ,16 ,32 ,127 ,128 ,23 ,3.196 ,4.403 ,0.726 0 ,16 ,32 ,127 ,144 ,23 ,3.103 ,4.237 ,0.732 0 ,16 ,32 ,127 ,16 ,23 ,3.145 ,4.265 ,0.737 0 ,16 ,32 ,127 ,192 ,23 ,3.072 ,4.104 ,0.749 0 ,16 ,32 ,127 ,240 ,23 ,3.129 ,4.083 ,0.766 0 ,16 ,32 ,127 ,288 ,23 ,3.1 ,4.218 ,0.735 0 ,16 ,32 ,127 ,31 ,23 ,3.243 ,4.127 ,0.786 0 ,16 ,32 ,127 ,32 ,23 ,3.325 ,4.151 ,0.801 0 ,16 ,32 ,127 ,48 ,23 ,3.161 ,3.949 ,0.8 0 ,16 ,32 ,127 ,96 ,23 ,3.123 ,4.091 ,0.763 0 ,16 ,320 ,127 ,128 ,23 ,7.368 ,13.653 ,0.54 0 ,16 ,320 ,127 ,192 ,23 ,8.2 ,15.602 ,0.526 0 ,16 ,320 ,127 ,32 ,23 ,8.527 ,13.259 ,0.643 0 ,16 ,320 ,127 ,512 ,23 ,9.268 ,14.598 ,0.635 0 ,16 ,352 ,127 ,256 ,23 ,9.0 ,15.637 ,0.576 0 ,16 ,352 ,127 ,64 ,23 ,8.15 ,13.307 ,0.612 0 ,16 ,368 ,127 ,128 ,23 ,8.383 ,13.626 ,0.615 0 ,16 ,368 ,127 ,144 ,23 ,8.738 ,13.402 ,0.652 0 ,16 ,368 ,127 ,512 ,23 ,8.013 ,15.175 ,0.528 0 ,16 ,4 ,127 ,3 ,23 ,3.185 ,3.178 ,1.002 0 ,16 ,400 ,127 ,256 ,23 ,9.876 ,17.022 ,0.58 0 ,16 ,416 ,127 ,128 ,23 ,9.353 ,14.737 ,0.635 0 ,16 ,416 ,127 ,512 ,23 ,11.28 ,17.477 ,0.645 0 ,16 ,416 ,127 ,96 ,23 ,11.276 ,13.553 ,0.832 0 ,16 ,448 ,127 ,256 ,23 ,10.361 ,18.149 ,0.571 0 ,16 ,464 ,127 ,48 ,23 ,10.945 ,16.122 ,0.679 0 ,16 ,464 ,127 ,512 ,23 ,12.365 ,20.385 ,0.607 0 ,16 ,48 ,127 ,32 ,23 ,3.161 ,4.385 ,0.721 0 ,16 ,496 ,127 ,256 ,23 ,11.126 ,18.731 ,0.594 0 ,16 ,5 ,127 ,4 ,23 ,3.252 ,3.129 ,1.039 0 ,16 ,512 ,127 ,0 ,23 ,13.419 ,18.116 ,0.741 0 ,16 ,512 ,127 ,144 ,23 ,12.206 ,18.023 ,0.677 0 ,16 ,512 ,127 ,192 ,23 ,11.357 ,18.959 ,0.599 0 ,16 ,512 ,127 ,224 ,23 ,11.465 ,18.068 ,0.635 0 ,16 ,512 ,127 ,240 ,23 ,10.725 ,18.228 ,0.588 0 ,16 ,512 ,127 ,272 ,23 ,11.838 ,19.515 ,0.607 0 ,16 ,512 ,127 ,288 ,23 ,12.537 ,18.75 ,0.669 0 ,16 ,512 ,127 ,320 ,23 ,11.995 ,20.802 ,0.577 0 ,16 ,512 ,127 ,368 ,23 ,12.626 ,19.625 ,0.643 0 ,16 ,512 ,127 ,416 ,23 ,13.4 ,20.43 ,0.656 0 ,16 ,512 ,127 ,464 ,23 ,13.757 ,22.155 ,0.621 0 ,16 ,512 ,127 ,48 ,23 ,13.391 ,17.544 ,0.763 0 ,16 ,512 ,127 ,512 ,23 ,13.293 ,21.231 ,0.626 0 ,16 ,512 ,127 ,96 ,23 ,12.955 ,18.117 ,0.715 0 ,16 ,544 ,127 ,256 ,23 ,12.47 ,19.929 ,0.626 0 ,16 ,560 ,127 ,512 ,23 ,13.334 ,22.265 ,0.599 0 ,16 ,6 ,127 ,5 ,23 ,3.177 ,3.13 ,1.015 0 ,16 ,608 ,127 ,512 ,23 ,13.605 ,24.624 ,0.552 0 ,16 ,64 ,127 ,0 ,23 ,4.787 ,5.604 ,0.854 0 ,16 ,64 ,127 ,144 ,23 ,4.546 ,4.818 ,0.943 0 ,16 ,64 ,127 ,16 ,23 ,4.78 ,5.597 ,0.854 0 ,16 ,64 ,127 ,192 ,23 ,4.368 ,4.587 ,0.952 0 ,16 ,64 ,127 ,240 ,23 ,4.382 ,4.669 ,0.938 0 ,16 ,64 ,127 ,256 ,23 ,4.515 ,4.962 ,0.91 0 ,16 ,64 ,127 ,288 ,23 ,5.0 ,4.761 ,1.05 0 ,16 ,64 ,127 ,48 ,23 ,4.483 ,4.717 ,0.95 0 ,16 ,64 ,127 ,64 ,23 ,4.724 ,4.877 ,0.969 0 ,16 ,64 ,127 ,96 ,23 ,4.591 ,4.761 ,0.964 0 ,16 ,656 ,127 ,512 ,23 ,15.683 ,26.327 ,0.596 0 ,16 ,7 ,127 ,6 ,23 ,3.176 ,3.138 ,1.012 0 ,16 ,704 ,127 ,512 ,23 ,14.907 ,27.812 ,0.536 0 ,16 ,736 ,127 ,1024 ,23 ,15.953 ,29.405 ,0.543 0 ,16 ,736 ,127 ,288 ,23 ,13.63 ,23.485 ,0.58 0 ,16 ,752 ,127 ,512 ,23 ,15.665 ,27.982 ,0.56 0 ,16 ,784 ,127 ,1024 ,23 ,17.003 ,32.086 ,0.53 0 ,16 ,784 ,127 ,240 ,23 ,14.689 ,24.693 ,0.595 0 ,16 ,8 ,127 ,7 ,23 ,3.145 ,3.144 ,1.0 0 ,16 ,80 ,127 ,128 ,23 ,5.009 ,4.162 ,1.204 0 ,16 ,80 ,127 ,32 ,23 ,4.546 ,4.87 ,0.934 0 ,16 ,80 ,127 ,48 ,23 ,4.621 ,4.966 ,0.931 0 ,16 ,80 ,127 ,64 ,23 ,5.06 ,4.314 ,1.173 0 ,16 ,800 ,127 ,512 ,23 ,18.055 ,29.272 ,0.617 0 ,16 ,832 ,127 ,1024 ,23 ,17.744 ,34.476 ,0.515 0 ,16 ,832 ,127 ,192 ,23 ,14.77 ,27.017 ,0.547 0 ,16 ,880 ,127 ,1024 ,23 ,19.394 ,34.054 ,0.57 0 ,16 ,880 ,127 ,144 ,23 ,15.364 ,25.505 ,0.602 0 ,16 ,9 ,127 ,8 ,23 ,3.161 ,3.137 ,1.008 0 ,16 ,928 ,127 ,1024 ,23 ,19.455 ,36.575 ,0.532 0 ,16 ,928 ,127 ,96 ,23 ,18.127 ,26.639 ,0.68 0 ,16 ,96 ,127 ,80 ,23 ,5.057 ,5.975 ,0.846 0 ,16 ,976 ,127 ,1024 ,23 ,20.724 ,39.059 ,0.531 0 ,16 ,976 ,127 ,48 ,23 ,18.825 ,28.964 ,0.65 0 ,256 ,1 ,127 ,0 ,23 ,3.145 ,3.111 ,1.011 0 ,256 ,10 ,127 ,9 ,23 ,3.147 ,3.162 ,0.995 0 ,256 ,1024 ,127 ,0 ,23 ,20.995 ,32.521 ,0.646 0 ,256 ,1024 ,127 ,1024 ,23 ,23.193 ,42.593 ,0.545 0 ,256 ,1024 ,127 ,144 ,23 ,18.952 ,31.567 ,0.6 0 ,256 ,1024 ,127 ,192 ,23 ,18.257 ,33.915 ,0.538 0 ,256 ,1024 ,127 ,240 ,23 ,18.035 ,31.351 ,0.575 0 ,256 ,1024 ,127 ,288 ,23 ,19.344 ,34.431 ,0.562 0 ,256 ,1024 ,127 ,48 ,23 ,20.982 ,31.888 ,0.658 0 ,256 ,1024 ,127 ,736 ,23 ,20.297 ,35.2 ,0.577 0 ,256 ,1024 ,127 ,784 ,23 ,21.678 ,38.066 ,0.569 0 ,256 ,1024 ,127 ,832 ,23 ,21.415 ,44.494 ,0.481 0 ,256 ,1024 ,127 ,880 ,23 ,21.383 ,42.537 ,0.503 0 ,256 ,1024 ,127 ,928 ,23 ,22.856 ,39.22 ,0.583 0 ,256 ,1024 ,127 ,96 ,23 ,19.732 ,30.802 ,0.641 0 ,256 ,1024 ,127 ,976 ,23 ,22.649 ,41.739 ,0.543 0 ,256 ,1072 ,127 ,1024 ,23 ,22.346 ,41.278 ,0.541 0 ,256 ,11 ,127 ,10 ,23 ,3.145 ,3.139 ,1.002 0 ,256 ,112 ,127 ,144 ,23 ,4.959 ,4.934 ,1.005 0 ,256 ,112 ,127 ,16 ,23 ,4.665 ,6.018 ,0.775 0 ,256 ,112 ,127 ,256 ,23 ,4.957 ,5.05 ,0.982 0 ,256 ,112 ,127 ,64 ,23 ,5.033 ,5.845 ,0.861 0 ,256 ,112 ,127 ,96 ,23 ,5.057 ,5.126 ,0.986 0 ,256 ,1120 ,127 ,1024 ,23 ,23.281 ,45.061 ,0.517 0 ,256 ,1168 ,127 ,1024 ,23 ,26.091 ,48.367 ,0.539 0 ,256 ,12 ,127 ,11 ,23 ,3.145 ,3.114 ,1.01 0 ,256 ,1216 ,127 ,1024 ,23 ,26.159 ,53.35 ,0.49 0 ,256 ,1264 ,127 ,1024 ,23 ,25.924 ,48.606 ,0.533 0 ,256 ,128 ,127 ,0 ,23 ,6.408 ,8.333 ,0.769 0 ,256 ,128 ,127 ,112 ,23 ,5.176 ,8.366 ,0.619 0 ,256 ,128 ,127 ,128 ,23 ,5.258 ,7.04 ,0.747 0 ,256 ,128 ,127 ,144 ,23 ,5.229 ,7.166 ,0.73 0 ,256 ,128 ,127 ,192 ,23 ,5.448 ,7.081 ,0.769 0 ,256 ,128 ,127 ,240 ,23 ,6.203 ,7.073 ,0.877 0 ,256 ,128 ,127 ,288 ,23 ,6.745 ,7.082 ,0.953 0 ,256 ,128 ,127 ,32 ,23 ,5.907 ,8.168 ,0.723 0 ,256 ,128 ,127 ,48 ,23 ,5.724 ,8.108 ,0.706 0 ,256 ,128 ,127 ,80 ,23 ,5.767 ,8.201 ,0.703 0 ,256 ,128 ,127 ,96 ,23 ,5.132 ,7.085 ,0.724 0 ,256 ,13 ,127 ,12 ,23 ,3.153 ,3.113 ,1.013 0 ,256 ,1312 ,127 ,1024 ,23 ,27.159 ,47.255 ,0.575 0 ,256 ,14 ,127 ,13 ,23 ,3.161 ,3.129 ,1.01 0 ,256 ,144 ,127 ,128 ,23 ,5.197 ,8.221 ,0.632 0 ,256 ,15 ,127 ,14 ,23 ,3.162 ,3.113 ,1.016 0 ,256 ,16 ,127 ,0 ,23 ,3.14 ,3.135 ,1.002 0 ,256 ,16 ,127 ,144 ,23 ,3.145 ,3.13 ,1.005 0 ,256 ,16 ,127 ,15 ,23 ,3.145 ,3.098 ,1.015 0 ,256 ,16 ,127 ,16 ,23 ,3.151 ,3.114 ,1.012 0 ,256 ,16 ,127 ,192 ,23 ,3.166 ,3.113 ,1.017 0 ,256 ,16 ,127 ,240 ,23 ,3.13 ,3.156 ,0.992 0 ,256 ,16 ,127 ,256 ,23 ,3.097 ,3.159 ,0.981 0 ,256 ,16 ,127 ,288 ,23 ,3.541 ,3.113 ,1.137 0 ,256 ,16 ,127 ,48 ,23 ,3.162 ,3.13 ,1.01 0 ,256 ,16 ,127 ,64 ,23 ,3.161 ,3.129 ,1.01 0 ,256 ,16 ,127 ,96 ,23 ,3.145 ,3.146 ,1.0 0 ,256 ,160 ,127 ,144 ,23 ,5.198 ,8.201 ,0.634 0 ,256 ,160 ,127 ,16 ,23 ,5.727 ,10.25 ,0.559 0 ,256 ,160 ,127 ,256 ,23 ,5.119 ,8.135 ,0.629 0 ,256 ,160 ,127 ,64 ,23 ,5.675 ,8.1 ,0.701 0 ,256 ,160 ,127 ,96 ,23 ,5.398 ,7.016 ,0.769 0 ,256 ,17 ,127 ,16 ,23 ,3.162 ,3.138 ,1.008 0 ,256 ,176 ,127 ,128 ,23 ,5.311 ,8.28 ,0.641 0 ,256 ,176 ,127 ,160 ,23 ,5.222 ,8.238 ,0.634 0 ,256 ,176 ,127 ,32 ,23 ,5.722 ,8.181 ,0.699 0 ,256 ,1760 ,127 ,2048 ,23 ,34.608 ,89.776 ,0.385 0 ,256 ,1760 ,127 ,288 ,23 ,28.533 ,48.166 ,0.592 0 ,256 ,18 ,127 ,17 ,23 ,3.203 ,3.152 ,1.016 0 ,256 ,1808 ,127 ,2048 ,23 ,35.887 ,91.709 ,0.391 0 ,256 ,1808 ,127 ,240 ,23 ,28.671 ,49.654 ,0.577 0 ,256 ,1856 ,127 ,192 ,23 ,29.022 ,52.13 ,0.557 0 ,256 ,1856 ,127 ,2048 ,23 ,36.931 ,93.721 ,0.394 0 ,256 ,19 ,127 ,18 ,23 ,3.137 ,3.161 ,0.992 0 ,256 ,1904 ,127 ,144 ,23 ,29.576 ,49.294 ,0.6 0 ,256 ,1904 ,127 ,2048 ,23 ,36.626 ,94.523 ,0.387 0 ,256 ,192 ,127 ,176 ,23 ,6.107 ,9.917 ,0.616 0 ,256 ,1952 ,127 ,2048 ,23 ,38.931 ,95.247 ,0.409 0 ,256 ,1952 ,127 ,96 ,23 ,32.075 ,71.856 ,0.446 0 ,256 ,2 ,127 ,1 ,23 ,3.182 ,3.155 ,1.009 0 ,256 ,20 ,127 ,19 ,23 ,3.13 ,3.138 ,0.997 0 ,256 ,2000 ,127 ,2048 ,23 ,39.058 ,97.955 ,0.399 0 ,256 ,2000 ,127 ,48 ,23 ,32.114 ,67.92 ,0.473 0 ,256 ,2048 ,127 ,0 ,23 ,34.208 ,74.932 ,0.457 0 ,256 ,2048 ,127 ,1024 ,23 ,37.833 ,66.225 ,0.571 0 ,256 ,2048 ,127 ,128 ,23 ,33.786 ,55.182 ,0.612 0 ,256 ,2048 ,127 ,144 ,23 ,32.879 ,54.88 ,0.599 0 ,256 ,2048 ,127 ,1760 ,23 ,39.653 ,96.363 ,0.411 0 ,256 ,2048 ,127 ,1808 ,23 ,41.037 ,95.344 ,0.43 0 ,256 ,2048 ,127 ,1856 ,23 ,40.334 ,97.052 ,0.416 0 ,256 ,2048 ,127 ,1904 ,23 ,40.043 ,98.632 ,0.406 0 ,256 ,2048 ,127 ,192 ,23 ,32.42 ,69.851 ,0.464 0 ,256 ,2048 ,127 ,1952 ,23 ,41.346 ,98.624 ,0.419 0 ,256 ,2048 ,127 ,2000 ,23 ,44.497 ,99.075 ,0.449 0 ,256 ,2048 ,127 ,2048 ,23 ,50.177 ,101.98 ,0.492 0 ,256 ,2048 ,127 ,240 ,23 ,31.858 ,64.934 ,0.491 0 ,256 ,2048 ,127 ,256 ,23 ,33.747 ,73.774 ,0.457 0 ,256 ,2048 ,127 ,288 ,23 ,34.017 ,70.809 ,0.48 0 ,256 ,2048 ,127 ,32 ,23 ,34.665 ,71.363 ,0.486 0 ,256 ,2048 ,127 ,4096 ,23 ,40.907 ,99.14 ,0.413 0 ,256 ,2048 ,127 ,48 ,23 ,34.625 ,72.867 ,0.475 0 ,256 ,2048 ,127 ,512 ,23 ,35.083 ,60.616 ,0.579 0 ,256 ,2048 ,127 ,64 ,23 ,33.65 ,70.549 ,0.477 0 ,256 ,2048 ,127 ,96 ,23 ,33.793 ,75.736 ,0.446 0 ,256 ,208 ,127 ,16 ,23 ,6.838 ,11.802 ,0.579 0 ,256 ,208 ,127 ,192 ,23 ,5.147 ,10.302 ,0.5 0 ,256 ,208 ,127 ,256 ,23 ,4.952 ,10.514 ,0.471 0 ,256 ,208 ,127 ,48 ,23 ,6.404 ,9.814 ,0.653 0 ,256 ,208 ,127 ,64 ,23 ,6.119 ,9.818 ,0.623 0 ,256 ,2096 ,127 ,2048 ,23 ,43.082 ,99.885 ,0.431 0 ,256 ,21 ,127 ,20 ,23 ,3.153 ,3.161 ,0.998 0 ,256 ,2144 ,127 ,2048 ,23 ,44.896 ,99.713 ,0.45 0 ,256 ,2192 ,127 ,2048 ,23 ,44.061 ,103.953 ,0.424 0 ,256 ,22 ,127 ,21 ,23 ,3.161 ,3.157 ,1.001 0 ,256 ,224 ,127 ,128 ,23 ,5.684 ,10.595 ,0.536 0 ,256 ,224 ,127 ,208 ,23 ,5.738 ,10.349 ,0.554 0 ,256 ,224 ,127 ,288 ,23 ,6.29 ,10.206 ,0.616 0 ,256 ,224 ,127 ,32 ,23 ,6.692 ,9.961 ,0.672 0 ,256 ,224 ,127 ,512 ,23 ,5.972 ,10.199 ,0.586 0 ,256 ,2240 ,127 ,2048 ,23 ,45.254 ,105.449 ,0.429 0 ,256 ,2288 ,127 ,2048 ,23 ,47.722 ,110.098 ,0.433 0 ,256 ,23 ,127 ,22 ,23 ,3.145 ,3.159 ,0.996 0 ,256 ,2336 ,127 ,2048 ,23 ,45.988 ,107.339 ,0.428 0 ,256 ,24 ,127 ,23 ,23 ,3.145 ,3.137 ,1.002 0 ,256 ,240 ,127 ,224 ,23 ,5.063 ,10.327 ,0.49 0 ,256 ,25 ,127 ,24 ,23 ,3.179 ,3.129 ,1.016 0 ,256 ,256 ,127 ,0 ,23 ,9.808 ,11.888 ,0.825 0 ,256 ,256 ,127 ,112 ,23 ,9.119 ,10.736 ,0.849 0 ,256 ,256 ,127 ,144 ,23 ,7.8 ,11.884 ,0.656 0 ,256 ,256 ,127 ,16 ,23 ,9.935 ,12.56 ,0.791 0 ,256 ,256 ,127 ,160 ,23 ,7.897 ,11.49 ,0.687 0 ,256 ,256 ,127 ,192 ,23 ,6.937 ,13.168 ,0.527 0 ,256 ,256 ,127 ,208 ,23 ,6.821 ,13.191 ,0.517 0 ,256 ,256 ,127 ,240 ,23 ,7.795 ,12.363 ,0.631 0 ,256 ,256 ,127 ,256 ,23 ,7.324 ,12.444 ,0.589 0 ,256 ,256 ,127 ,288 ,23 ,6.86 ,12.339 ,0.556 0 ,256 ,256 ,127 ,48 ,23 ,9.216 ,11.493 ,0.802 0 ,256 ,256 ,127 ,64 ,23 ,9.632 ,11.584 ,0.831 0 ,256 ,256 ,127 ,96 ,23 ,8.64 ,10.337 ,0.836 0 ,256 ,26 ,127 ,25 ,23 ,3.153 ,3.139 ,1.004 0 ,256 ,27 ,127 ,26 ,23 ,3.143 ,3.154 ,0.997 0 ,256 ,272 ,127 ,128 ,23 ,9.022 ,12.021 ,0.75 0 ,256 ,272 ,127 ,240 ,23 ,8.432 ,12.27 ,0.687 0 ,256 ,272 ,127 ,256 ,23 ,7.897 ,13.253 ,0.596 0 ,256 ,272 ,127 ,32 ,23 ,10.314 ,11.56 ,0.892 0 ,256 ,272 ,127 ,512 ,23 ,8.091 ,13.26 ,0.61 0 ,256 ,28 ,127 ,27 ,23 ,3.153 ,3.137 ,1.005 0 ,256 ,288 ,127 ,272 ,23 ,8.222 ,13.111 ,0.627 0 ,256 ,29 ,127 ,28 ,23 ,3.145 ,3.137 ,1.002 0 ,256 ,3 ,127 ,2 ,23 ,3.145 ,3.12 ,1.008 0 ,256 ,30 ,127 ,29 ,23 ,3.154 ,3.129 ,1.008 0 ,256 ,304 ,127 ,16 ,23 ,10.148 ,11.965 ,0.848 0 ,256 ,304 ,127 ,256 ,23 ,8.439 ,13.122 ,0.643 0 ,256 ,304 ,127 ,64 ,23 ,9.707 ,11.612 ,0.836 0 ,256 ,31 ,127 ,30 ,23 ,3.145 ,3.118 ,1.009 0 ,256 ,32 ,127 ,0 ,23 ,3.294 ,4.254 ,0.774 0 ,256 ,32 ,127 ,128 ,23 ,3.129 ,4.216 ,0.742 0 ,256 ,32 ,127 ,144 ,23 ,3.146 ,3.93 ,0.8 0 ,256 ,32 ,127 ,16 ,23 ,3.144 ,4.445 ,0.707 0 ,256 ,32 ,127 ,192 ,23 ,3.146 ,3.951 ,0.796 0 ,256 ,32 ,127 ,240 ,23 ,3.146 ,3.928 ,0.801 0 ,256 ,32 ,127 ,288 ,23 ,3.145 ,3.89 ,0.808 0 ,256 ,32 ,127 ,31 ,23 ,3.153 ,3.998 ,0.789 0 ,256 ,32 ,127 ,32 ,23 ,3.139 ,4.265 ,0.736 0 ,256 ,32 ,127 ,48 ,23 ,3.145 ,3.91 ,0.804 0 ,256 ,32 ,127 ,96 ,23 ,3.145 ,4.16 ,0.756 0 ,256 ,320 ,127 ,128 ,23 ,10.429 ,15.385 ,0.678 0 ,256 ,320 ,127 ,192 ,23 ,7.607 ,15.432 ,0.493 0 ,256 ,320 ,127 ,32 ,23 ,11.133 ,14.572 ,0.764 0 ,256 ,320 ,127 ,512 ,23 ,8.932 ,14.624 ,0.611 0 ,256 ,352 ,127 ,256 ,23 ,9.886 ,15.646 ,0.632 0 ,256 ,352 ,127 ,64 ,23 ,10.65 ,14.572 ,0.731 0 ,256 ,368 ,127 ,128 ,23 ,11.401 ,15.301 ,0.745 0 ,256 ,368 ,127 ,144 ,23 ,8.264 ,13.702 ,0.603 0 ,256 ,368 ,127 ,512 ,23 ,8.616 ,15.144 ,0.569 0 ,256 ,4 ,127 ,3 ,23 ,3.162 ,3.114 ,1.015 0 ,256 ,400 ,127 ,256 ,23 ,11.687 ,18.239 ,0.641 0 ,256 ,416 ,127 ,128 ,23 ,12.144 ,16.428 ,0.739 0 ,256 ,416 ,127 ,512 ,23 ,12.079 ,17.753 ,0.68 0 ,256 ,416 ,127 ,96 ,23 ,10.491 ,13.483 ,0.778 0 ,256 ,448 ,127 ,256 ,23 ,12.594 ,19.867 ,0.634 0 ,256 ,464 ,127 ,48 ,23 ,11.254 ,15.945 ,0.706 0 ,256 ,464 ,127 ,512 ,23 ,11.854 ,19.922 ,0.595 0 ,256 ,48 ,127 ,32 ,23 ,3.145 ,4.451 ,0.707 0 ,256 ,496 ,127 ,256 ,23 ,12.836 ,19.879 ,0.646 0 ,256 ,5 ,127 ,4 ,23 ,3.145 ,3.159 ,0.995 0 ,256 ,512 ,127 ,0 ,23 ,13.748 ,19.369 ,0.71 0 ,256 ,512 ,127 ,144 ,23 ,12.617 ,17.936 ,0.703 0 ,256 ,512 ,127 ,192 ,23 ,11.4 ,18.98 ,0.601 0 ,256 ,512 ,127 ,224 ,23 ,10.899 ,18.326 ,0.595 0 ,256 ,512 ,127 ,240 ,23 ,11.663 ,18.585 ,0.628 0 ,256 ,512 ,127 ,272 ,23 ,11.804 ,19.468 ,0.606 0 ,256 ,512 ,127 ,288 ,23 ,12.152 ,18.828 ,0.645 0 ,256 ,512 ,127 ,320 ,23 ,11.961 ,20.233 ,0.591 0 ,256 ,512 ,127 ,368 ,23 ,11.43 ,20.012 ,0.571 0 ,256 ,512 ,127 ,416 ,23 ,15.23 ,20.898 ,0.729 0 ,256 ,512 ,127 ,464 ,23 ,15.202 ,24.027 ,0.633 0 ,256 ,512 ,127 ,48 ,23 ,13.519 ,18.997 ,0.712 0 ,256 ,512 ,127 ,512 ,23 ,15.203 ,22.853 ,0.665 0 ,256 ,512 ,127 ,96 ,23 ,13.257 ,18.363 ,0.722 0 ,256 ,544 ,127 ,256 ,23 ,12.716 ,20.915 ,0.608 0 ,256 ,560 ,127 ,512 ,23 ,13.536 ,22.471 ,0.602 0 ,256 ,6 ,127 ,5 ,23 ,3.195 ,3.145 ,1.016 0 ,256 ,608 ,127 ,512 ,23 ,14.538 ,26.111 ,0.557 0 ,256 ,64 ,127 ,0 ,23 ,4.958 ,5.599 ,0.885 0 ,256 ,64 ,127 ,144 ,23 ,4.425 ,4.659 ,0.95 0 ,256 ,64 ,127 ,16 ,23 ,4.393 ,5.397 ,0.814 0 ,256 ,64 ,127 ,192 ,23 ,4.635 ,4.647 ,0.997 0 ,256 ,64 ,127 ,240 ,23 ,4.425 ,4.841 ,0.914 0 ,256 ,64 ,127 ,256 ,23 ,4.385 ,4.909 ,0.893 0 ,256 ,64 ,127 ,288 ,23 ,4.409 ,4.756 ,0.927 0 ,256 ,64 ,127 ,48 ,23 ,4.423 ,4.751 ,0.931 0 ,256 ,64 ,127 ,64 ,23 ,4.554 ,4.837 ,0.942 0 ,256 ,64 ,127 ,96 ,23 ,4.424 ,4.761 ,0.929 0 ,256 ,656 ,127 ,512 ,23 ,16.779 ,27.434 ,0.612 0 ,256 ,7 ,127 ,6 ,23 ,3.145 ,3.114 ,1.01 0 ,256 ,704 ,127 ,512 ,23 ,16.6 ,28.904 ,0.574 0 ,256 ,736 ,127 ,1024 ,23 ,16.03 ,28.876 ,0.555 0 ,256 ,736 ,127 ,288 ,23 ,13.525 ,23.905 ,0.566 0 ,256 ,752 ,127 ,512 ,23 ,17.491 ,29.082 ,0.601 0 ,256 ,784 ,127 ,1024 ,23 ,17.826 ,32.865 ,0.542 0 ,256 ,784 ,127 ,240 ,23 ,14.898 ,24.147 ,0.617 0 ,256 ,8 ,127 ,7 ,23 ,3.155 ,3.13 ,1.008 0 ,256 ,80 ,127 ,128 ,23 ,5.645 ,4.262 ,1.325 0 ,256 ,80 ,127 ,32 ,23 ,4.439 ,4.751 ,0.934 0 ,256 ,80 ,127 ,48 ,23 ,5.758 ,4.923 ,1.169 0 ,256 ,80 ,127 ,64 ,23 ,5.084 ,4.286 ,1.186 0 ,256 ,800 ,127 ,512 ,23 ,18.076 ,30.285 ,0.597 0 ,256 ,832 ,127 ,1024 ,23 ,18.708 ,33.198 ,0.564 0 ,256 ,832 ,127 ,192 ,23 ,15.115 ,26.679 ,0.567 0 ,256 ,880 ,127 ,1024 ,23 ,17.833 ,38.807 ,0.46 0 ,256 ,880 ,127 ,144 ,23 ,15.093 ,28.699 ,0.526 0 ,256 ,9 ,127 ,8 ,23 ,3.129 ,3.13 ,1.0 0 ,256 ,928 ,127 ,1024 ,23 ,19.642 ,36.094 ,0.544 0 ,256 ,928 ,127 ,96 ,23 ,17.184 ,26.193 ,0.656 0 ,256 ,96 ,127 ,80 ,23 ,5.083 ,5.849 ,0.869 0 ,256 ,976 ,127 ,1024 ,23 ,20.744 ,38.766 ,0.535 0 ,256 ,976 ,127 ,48 ,23 ,18.3 ,28.799 ,0.635 0 ,4 ,1 ,127 ,0 ,23 ,3.189 ,3.123 ,1.021 0 ,4 ,10 ,127 ,9 ,23 ,3.416 ,3.146 ,1.086 0 ,4 ,1024 ,127 ,0 ,23 ,21.229 ,32.925 ,0.645 0 ,4 ,1024 ,127 ,1024 ,23 ,21.881 ,34.081 ,0.642 0 ,4 ,1024 ,127 ,144 ,23 ,19.561 ,31.178 ,0.627 0 ,4 ,1024 ,127 ,192 ,23 ,18.653 ,32.203 ,0.579 0 ,4 ,1024 ,127 ,240 ,23 ,18.409 ,31.112 ,0.592 0 ,4 ,1024 ,127 ,288 ,23 ,19.658 ,31.827 ,0.618 0 ,4 ,1024 ,127 ,48 ,23 ,21.037 ,32.342 ,0.65 0 ,4 ,1024 ,127 ,736 ,23 ,20.337 ,33.524 ,0.607 0 ,4 ,1024 ,127 ,784 ,23 ,21.445 ,34.117 ,0.629 0 ,4 ,1024 ,127 ,832 ,23 ,21.533 ,34.527 ,0.624 0 ,4 ,1024 ,127 ,880 ,23 ,21.687 ,34.633 ,0.626 0 ,4 ,1024 ,127 ,928 ,23 ,21.153 ,33.67 ,0.628 0 ,4 ,1024 ,127 ,96 ,23 ,20.155 ,29.978 ,0.672 0 ,4 ,1024 ,127 ,976 ,23 ,21.678 ,35.654 ,0.608 0 ,4 ,1072 ,127 ,1024 ,23 ,21.123 ,34.521 ,0.612 0 ,4 ,11 ,127 ,10 ,23 ,3.162 ,3.13 ,1.01 0 ,4 ,112 ,127 ,144 ,23 ,5.052 ,5.034 ,1.003 0 ,4 ,112 ,127 ,16 ,23 ,4.425 ,5.792 ,0.764 0 ,4 ,112 ,127 ,256 ,23 ,5.006 ,6.101 ,0.821 0 ,4 ,112 ,127 ,64 ,23 ,5.033 ,5.887 ,0.855 0 ,4 ,112 ,127 ,96 ,23 ,5.03 ,4.983 ,1.01 0 ,4 ,1120 ,127 ,1024 ,23 ,22.284 ,38.165 ,0.584 0 ,4 ,1168 ,127 ,1024 ,23 ,24.774 ,39.761 ,0.623 0 ,4 ,12 ,127 ,11 ,23 ,3.145 ,3.164 ,0.994 0 ,4 ,1216 ,127 ,1024 ,23 ,23.491 ,40.304 ,0.583 0 ,4 ,1264 ,127 ,1024 ,23 ,24.01 ,41.854 ,0.574 0 ,4 ,128 ,127 ,0 ,23 ,6.084 ,8.365 ,0.727 0 ,4 ,128 ,127 ,112 ,23 ,5.174 ,8.403 ,0.616 0 ,4 ,128 ,127 ,128 ,23 ,5.421 ,7.06 ,0.768 0 ,4 ,128 ,127 ,144 ,23 ,5.184 ,7.047 ,0.736 0 ,4 ,128 ,127 ,192 ,23 ,5.491 ,7.715 ,0.712 0 ,4 ,128 ,127 ,240 ,23 ,5.373 ,7.062 ,0.761 0 ,4 ,128 ,127 ,288 ,23 ,5.105 ,8.125 ,0.628 0 ,4 ,128 ,127 ,32 ,23 ,5.814 ,8.124 ,0.716 0 ,4 ,128 ,127 ,48 ,23 ,5.892 ,8.308 ,0.709 0 ,4 ,128 ,127 ,80 ,23 ,5.221 ,8.148 ,0.641 0 ,4 ,128 ,127 ,96 ,23 ,5.329 ,7.084 ,0.752 0 ,4 ,13 ,127 ,12 ,23 ,3.269 ,3.145 ,1.039 0 ,4 ,1312 ,127 ,1024 ,23 ,26.146 ,41.256 ,0.634 0 ,4 ,14 ,127 ,13 ,23 ,3.379 ,3.146 ,1.074 0 ,4 ,144 ,127 ,128 ,23 ,5.192 ,8.278 ,0.627 0 ,4 ,15 ,127 ,14 ,23 ,3.409 ,3.154 ,1.081 0 ,4 ,16 ,127 ,0 ,23 ,3.304 ,3.105 ,1.064 0 ,4 ,16 ,127 ,144 ,23 ,3.792 ,3.755 ,1.01 0 ,4 ,16 ,127 ,15 ,23 ,3.416 ,3.13 ,1.091 0 ,4 ,16 ,127 ,16 ,23 ,3.145 ,3.104 ,1.013 0 ,4 ,16 ,127 ,192 ,23 ,3.794 ,3.735 ,1.016 0 ,4 ,16 ,127 ,240 ,23 ,3.793 ,3.738 ,1.015 0 ,4 ,16 ,127 ,256 ,23 ,3.792 ,3.718 ,1.02 0 ,4 ,16 ,127 ,288 ,23 ,3.774 ,3.735 ,1.01 0 ,4 ,16 ,127 ,48 ,23 ,3.146 ,3.294 ,0.955 0 ,4 ,16 ,127 ,64 ,23 ,3.794 ,4.182 ,0.907 0 ,4 ,16 ,127 ,96 ,23 ,3.795 ,3.758 ,1.01 0 ,4 ,160 ,127 ,144 ,23 ,5.195 ,8.347 ,0.622 0 ,4 ,160 ,127 ,16 ,23 ,5.786 ,10.103 ,0.573 0 ,4 ,160 ,127 ,256 ,23 ,5.17 ,8.193 ,0.631 0 ,4 ,160 ,127 ,64 ,23 ,5.323 ,8.733 ,0.609 0 ,4 ,160 ,127 ,96 ,23 ,5.183 ,7.014 ,0.739 0 ,4 ,17 ,127 ,16 ,23 ,3.413 ,3.113 ,1.096 0 ,4 ,176 ,127 ,128 ,23 ,5.17 ,8.287 ,0.624 0 ,4 ,176 ,127 ,160 ,23 ,5.168 ,8.264 ,0.625 0 ,4 ,176 ,127 ,32 ,23 ,5.874 ,8.185 ,0.718 0 ,4 ,1760 ,127 ,2048 ,23 ,29.927 ,50.544 ,0.592 0 ,4 ,1760 ,127 ,288 ,23 ,29.193 ,49.597 ,0.589 0 ,4 ,18 ,127 ,17 ,23 ,3.413 ,3.107 ,1.098 0 ,4 ,1808 ,127 ,2048 ,23 ,32.575 ,51.894 ,0.628 0 ,4 ,1808 ,127 ,240 ,23 ,29.396 ,51.122 ,0.575 0 ,4 ,1856 ,127 ,192 ,23 ,29.112 ,53.641 ,0.543 0 ,4 ,1856 ,127 ,2048 ,23 ,31.841 ,53.597 ,0.594 0 ,4 ,19 ,127 ,18 ,23 ,3.372 ,3.138 ,1.074 0 ,4 ,1904 ,127 ,144 ,23 ,30.702 ,51.52 ,0.596 0 ,4 ,1904 ,127 ,2048 ,23 ,31.593 ,53.459 ,0.591 0 ,4 ,192 ,127 ,176 ,23 ,6.012 ,9.456 ,0.636 0 ,4 ,1952 ,127 ,2048 ,23 ,33.684 ,55.53 ,0.607 0 ,4 ,1952 ,127 ,96 ,23 ,33.579 ,74.528 ,0.451 0 ,4 ,2 ,127 ,1 ,23 ,3.17 ,3.154 ,1.005 0 ,4 ,20 ,127 ,19 ,23 ,3.398 ,3.137 ,1.083 0 ,4 ,2000 ,127 ,2048 ,23 ,33.546 ,59.596 ,0.563 0 ,4 ,2000 ,127 ,48 ,23 ,33.296 ,72.924 ,0.457 0 ,4 ,2048 ,127 ,0 ,23 ,35.011 ,75.292 ,0.465 0 ,4 ,2048 ,127 ,1024 ,23 ,36.402 ,60.247 ,0.604 0 ,4 ,2048 ,127 ,128 ,23 ,33.147 ,55.691 ,0.595 0 ,4 ,2048 ,127 ,144 ,23 ,33.487 ,56.037 ,0.598 0 ,4 ,2048 ,127 ,1760 ,23 ,35.333 ,60.26 ,0.586 0 ,4 ,2048 ,127 ,1808 ,23 ,37.315 ,61.681 ,0.605 0 ,4 ,2048 ,127 ,1856 ,23 ,38.287 ,62.945 ,0.608 0 ,4 ,2048 ,127 ,1904 ,23 ,37.2 ,61.528 ,0.605 0 ,4 ,2048 ,127 ,192 ,23 ,32.918 ,74.6 ,0.441 0 ,4 ,2048 ,127 ,1952 ,23 ,39.265 ,61.925 ,0.634 0 ,4 ,2048 ,127 ,2000 ,23 ,38.031 ,64.413 ,0.59 0 ,4 ,2048 ,127 ,2048 ,23 ,35.754 ,58.421 ,0.612 0 ,4 ,2048 ,127 ,240 ,23 ,33.402 ,84.165 ,0.397 0 ,4 ,2048 ,127 ,256 ,23 ,33.676 ,57.183 ,0.589 0 ,4 ,2048 ,127 ,288 ,23 ,34.024 ,68.829 ,0.494 0 ,4 ,2048 ,127 ,32 ,23 ,34.884 ,68.449 ,0.51 0 ,4 ,2048 ,127 ,4096 ,23 ,34.791 ,56.642 ,0.614 0 ,4 ,2048 ,127 ,48 ,23 ,34.709 ,71.496 ,0.485 0 ,4 ,2048 ,127 ,512 ,23 ,35.209 ,72.761 ,0.484 0 ,4 ,2048 ,127 ,64 ,23 ,34.169 ,68.652 ,0.498 0 ,4 ,2048 ,127 ,96 ,23 ,33.851 ,76.877 ,0.44 0 ,4 ,208 ,127 ,16 ,23 ,6.634 ,10.117 ,0.656 0 ,4 ,208 ,127 ,192 ,23 ,5.204 ,10.407 ,0.5 0 ,4 ,208 ,127 ,256 ,23 ,5.025 ,10.398 ,0.483 0 ,4 ,208 ,127 ,48 ,23 ,6.818 ,9.864 ,0.691 0 ,4 ,208 ,127 ,64 ,23 ,6.15 ,11.212 ,0.549 0 ,4 ,2096 ,127 ,2048 ,23 ,38.448 ,65.044 ,0.591 0 ,4 ,21 ,127 ,20 ,23 ,3.38 ,3.189 ,1.06 0 ,4 ,2144 ,127 ,2048 ,23 ,39.558 ,67.803 ,0.583 0 ,4 ,2192 ,127 ,2048 ,23 ,40.226 ,67.577 ,0.595 0 ,4 ,22 ,127 ,21 ,23 ,3.398 ,3.129 ,1.086 0 ,4 ,224 ,127 ,128 ,23 ,5.862 ,10.404 ,0.563 0 ,4 ,224 ,127 ,208 ,23 ,5.117 ,10.453 ,0.49 0 ,4 ,224 ,127 ,288 ,23 ,5.552 ,10.188 ,0.545 0 ,4 ,224 ,127 ,32 ,23 ,6.597 ,9.858 ,0.669 0 ,4 ,224 ,127 ,512 ,23 ,6.093 ,10.265 ,0.594 0 ,4 ,2240 ,127 ,2048 ,23 ,41.342 ,73.717 ,0.561 0 ,4 ,2288 ,127 ,2048 ,23 ,39.63 ,66.747 ,0.594 0 ,4 ,23 ,127 ,22 ,23 ,3.364 ,3.13 ,1.075 0 ,4 ,2336 ,127 ,2048 ,23 ,41.089 ,68.674 ,0.598 0 ,4 ,24 ,127 ,23 ,23 ,3.363 ,3.122 ,1.077 0 ,4 ,240 ,127 ,224 ,23 ,4.999 ,10.397 ,0.481 0 ,4 ,25 ,127 ,24 ,23 ,3.372 ,3.177 ,1.062 0 ,4 ,256 ,127 ,0 ,23 ,9.329 ,11.914 ,0.783 0 ,4 ,256 ,127 ,112 ,23 ,9.401 ,10.469 ,0.898 0 ,4 ,256 ,127 ,144 ,23 ,7.476 ,12.028 ,0.622 0 ,4 ,256 ,127 ,16 ,23 ,10.092 ,12.589 ,0.802 0 ,4 ,256 ,127 ,160 ,23 ,7.404 ,11.255 ,0.658 0 ,4 ,256 ,127 ,192 ,23 ,7.12 ,13.224 ,0.538 0 ,4 ,256 ,127 ,208 ,23 ,7.211 ,13.511 ,0.534 0 ,4 ,256 ,127 ,240 ,23 ,7.24 ,12.403 ,0.584 0 ,4 ,256 ,127 ,256 ,23 ,7.288 ,13.327 ,0.547 0 ,4 ,256 ,127 ,288 ,23 ,7.217 ,13.207 ,0.546 0 ,4 ,256 ,127 ,48 ,23 ,8.714 ,11.558 ,0.754 0 ,4 ,256 ,127 ,64 ,23 ,8.556 ,11.556 ,0.74 0 ,4 ,256 ,127 ,96 ,23 ,8.525 ,10.371 ,0.822 0 ,4 ,26 ,127 ,25 ,23 ,3.381 ,3.152 ,1.073 0 ,4 ,27 ,127 ,26 ,23 ,3.389 ,3.152 ,1.075 0 ,4 ,272 ,127 ,128 ,23 ,7.694 ,12.151 ,0.633 0 ,4 ,272 ,127 ,240 ,23 ,7.906 ,12.27 ,0.644 0 ,4 ,272 ,127 ,256 ,23 ,7.905 ,13.394 ,0.59 0 ,4 ,272 ,127 ,32 ,23 ,8.849 ,11.598 ,0.763 0 ,4 ,272 ,127 ,512 ,23 ,8.095 ,11.734 ,0.69 0 ,4 ,28 ,127 ,27 ,23 ,3.384 ,3.129 ,1.081 0 ,4 ,288 ,127 ,272 ,23 ,8.026 ,13.171 ,0.609 0 ,4 ,29 ,127 ,28 ,23 ,3.381 ,3.139 ,1.077 0 ,4 ,3 ,127 ,2 ,23 ,3.269 ,3.145 ,1.039 0 ,4 ,30 ,127 ,29 ,23 ,3.372 ,3.187 ,1.058 0 ,4 ,304 ,127 ,16 ,23 ,8.756 ,11.82 ,0.741 0 ,4 ,304 ,127 ,256 ,23 ,8.907 ,13.235 ,0.673 0 ,4 ,304 ,127 ,64 ,23 ,8.111 ,11.558 ,0.702 0 ,4 ,31 ,127 ,30 ,23 ,3.381 ,3.182 ,1.062 0 ,4 ,32 ,127 ,0 ,23 ,3.154 ,4.129 ,0.764 0 ,4 ,32 ,127 ,128 ,23 ,3.819 ,4.478 ,0.853 0 ,4 ,32 ,127 ,144 ,23 ,3.793 ,4.525 ,0.838 0 ,4 ,32 ,127 ,16 ,23 ,3.381 ,4.244 ,0.797 0 ,4 ,32 ,127 ,192 ,23 ,3.773 ,4.478 ,0.843 0 ,4 ,32 ,127 ,240 ,23 ,3.793 ,4.456 ,0.851 0 ,4 ,32 ,127 ,288 ,23 ,3.812 ,4.401 ,0.866 0 ,4 ,32 ,127 ,31 ,23 ,3.145 ,4.042 ,0.778 0 ,4 ,32 ,127 ,32 ,23 ,3.161 ,4.165 ,0.759 0 ,4 ,32 ,127 ,48 ,23 ,3.145 ,3.93 ,0.8 0 ,4 ,32 ,127 ,96 ,23 ,3.153 ,4.115 ,0.766 0 ,4 ,320 ,127 ,128 ,23 ,7.408 ,13.864 ,0.534 0 ,4 ,320 ,127 ,192 ,23 ,7.92 ,15.185 ,0.522 0 ,4 ,320 ,127 ,32 ,23 ,8.738 ,13.263 ,0.659 0 ,4 ,320 ,127 ,512 ,23 ,8.978 ,14.86 ,0.604 0 ,4 ,352 ,127 ,256 ,23 ,9.221 ,15.638 ,0.59 0 ,4 ,352 ,127 ,64 ,23 ,8.11 ,13.443 ,0.603 0 ,4 ,368 ,127 ,128 ,23 ,7.464 ,13.426 ,0.556 0 ,4 ,368 ,127 ,144 ,23 ,8.305 ,13.496 ,0.615 0 ,4 ,368 ,127 ,512 ,23 ,9.87 ,14.626 ,0.675 0 ,4 ,4 ,127 ,3 ,23 ,3.364 ,3.145 ,1.069 0 ,4 ,400 ,127 ,256 ,23 ,9.651 ,17.245 ,0.56 0 ,4 ,416 ,127 ,128 ,23 ,8.96 ,15.351 ,0.584 0 ,4 ,416 ,127 ,512 ,23 ,11.059 ,16.572 ,0.667 0 ,4 ,416 ,127 ,96 ,23 ,10.955 ,13.677 ,0.801 0 ,4 ,448 ,127 ,256 ,23 ,11.008 ,18.706 ,0.588 0 ,4 ,464 ,127 ,48 ,23 ,10.974 ,16.299 ,0.673 0 ,4 ,464 ,127 ,512 ,23 ,11.864 ,18.434 ,0.644 0 ,4 ,48 ,127 ,32 ,23 ,3.381 ,4.34 ,0.779 0 ,4 ,496 ,127 ,256 ,23 ,10.955 ,18.15 ,0.604 0 ,4 ,5 ,127 ,4 ,23 ,3.398 ,3.129 ,1.086 0 ,4 ,512 ,127 ,0 ,23 ,12.717 ,18.22 ,0.698 0 ,4 ,512 ,127 ,144 ,23 ,12.246 ,17.831 ,0.687 0 ,4 ,512 ,127 ,192 ,23 ,13.258 ,19.142 ,0.693 0 ,4 ,512 ,127 ,224 ,23 ,11.262 ,18.509 ,0.608 0 ,4 ,512 ,127 ,240 ,23 ,10.573 ,18.54 ,0.57 0 ,4 ,512 ,127 ,272 ,23 ,13.103 ,20.554 ,0.637 0 ,4 ,512 ,127 ,288 ,23 ,11.572 ,19.118 ,0.605 0 ,4 ,512 ,127 ,320 ,23 ,11.551 ,20.477 ,0.564 0 ,4 ,512 ,127 ,368 ,23 ,11.303 ,18.651 ,0.606 0 ,4 ,512 ,127 ,416 ,23 ,13.57 ,20.674 ,0.656 0 ,4 ,512 ,127 ,464 ,23 ,13.268 ,20.304 ,0.653 0 ,4 ,512 ,127 ,48 ,23 ,12.819 ,17.733 ,0.723 0 ,4 ,512 ,127 ,512 ,23 ,13.489 ,19.795 ,0.681 0 ,4 ,512 ,127 ,96 ,23 ,12.452 ,17.013 ,0.732 0 ,4 ,544 ,127 ,256 ,23 ,12.251 ,20.025 ,0.612 0 ,4 ,560 ,127 ,512 ,23 ,14.421 ,20.791 ,0.694 0 ,4 ,6 ,127 ,5 ,23 ,3.389 ,3.137 ,1.08 0 ,4 ,608 ,127 ,512 ,23 ,13.703 ,23.099 ,0.593 0 ,4 ,64 ,127 ,0 ,23 ,5.108 ,5.62 ,0.909 0 ,4 ,64 ,127 ,144 ,23 ,4.544 ,5.466 ,0.831 0 ,4 ,64 ,127 ,16 ,23 ,4.454 ,5.468 ,0.815 0 ,4 ,64 ,127 ,192 ,23 ,4.505 ,4.692 ,0.96 0 ,4 ,64 ,127 ,240 ,23 ,4.402 ,4.582 ,0.961 0 ,4 ,64 ,127 ,256 ,23 ,5.04 ,5.589 ,0.902 0 ,4 ,64 ,127 ,288 ,23 ,5.402 ,6.091 ,0.887 0 ,4 ,64 ,127 ,48 ,23 ,4.534 ,4.728 ,0.959 0 ,4 ,64 ,127 ,64 ,23 ,4.466 ,4.856 ,0.92 0 ,4 ,64 ,127 ,96 ,23 ,4.403 ,5.58 ,0.789 0 ,4 ,656 ,127 ,512 ,23 ,15.486 ,24.502 ,0.632 0 ,4 ,7 ,127 ,6 ,23 ,3.38 ,3.144 ,1.075 0 ,4 ,704 ,127 ,512 ,23 ,15.775 ,26.988 ,0.585 0 ,4 ,736 ,127 ,1024 ,23 ,16.268 ,24.42 ,0.666 0 ,4 ,736 ,127 ,288 ,23 ,14.222 ,23.443 ,0.607 0 ,4 ,752 ,127 ,512 ,23 ,15.471 ,28.21 ,0.548 0 ,4 ,784 ,127 ,1024 ,23 ,16.419 ,25.692 ,0.639 0 ,4 ,784 ,127 ,240 ,23 ,14.361 ,24.782 ,0.58 0 ,4 ,8 ,127 ,7 ,23 ,3.269 ,3.153 ,1.037 0 ,4 ,80 ,127 ,128 ,23 ,5.086 ,4.261 ,1.194 0 ,4 ,80 ,127 ,32 ,23 ,4.523 ,4.832 ,0.936 0 ,4 ,80 ,127 ,48 ,23 ,4.404 ,4.894 ,0.9 0 ,4 ,80 ,127 ,64 ,23 ,5.085 ,4.416 ,1.151 0 ,4 ,800 ,127 ,512 ,23 ,16.351 ,28.026 ,0.583 0 ,4 ,832 ,127 ,1024 ,23 ,16.484 ,28.077 ,0.587 0 ,4 ,832 ,127 ,192 ,23 ,14.224 ,27.43 ,0.519 0 ,4 ,880 ,127 ,1024 ,23 ,16.732 ,29.64 ,0.565 0 ,4 ,880 ,127 ,144 ,23 ,14.929 ,25.334 ,0.589 0 ,4 ,9 ,127 ,8 ,23 ,3.389 ,3.129 ,1.083 0 ,4 ,928 ,127 ,1024 ,23 ,19.296 ,29.706 ,0.65 0 ,4 ,928 ,127 ,96 ,23 ,18.388 ,27.001 ,0.681 0 ,4 ,96 ,127 ,80 ,23 ,5.082 ,5.881 ,0.864 0 ,4 ,976 ,127 ,1024 ,23 ,19.453 ,31.259 ,0.622 0 ,4 ,976 ,127 ,48 ,23 ,18.845 ,28.953 ,0.651 0 ,64 ,1 ,127 ,0 ,23 ,3.146 ,3.115 ,1.01 0 ,64 ,10 ,127 ,9 ,23 ,3.145 ,3.21 ,0.98 0 ,64 ,1024 ,127 ,0 ,23 ,20.923 ,32.608 ,0.642 0 ,64 ,1024 ,127 ,1024 ,23 ,23.048 ,42.425 ,0.543 0 ,64 ,1024 ,127 ,144 ,23 ,18.206 ,30.662 ,0.594 0 ,64 ,1024 ,127 ,192 ,23 ,18.069 ,31.476 ,0.574 0 ,64 ,1024 ,127 ,240 ,23 ,17.928 ,31.223 ,0.574 0 ,64 ,1024 ,127 ,288 ,23 ,19.612 ,31.291 ,0.627 0 ,64 ,1024 ,127 ,48 ,23 ,20.944 ,31.891 ,0.657 0 ,64 ,1024 ,127 ,736 ,23 ,20.205 ,35.662 ,0.567 0 ,64 ,1024 ,127 ,784 ,23 ,22.332 ,37.985 ,0.588 0 ,64 ,1024 ,127 ,832 ,23 ,21.975 ,38.248 ,0.575 0 ,64 ,1024 ,127 ,880 ,23 ,22.075 ,37.476 ,0.589 0 ,64 ,1024 ,127 ,928 ,23 ,22.21 ,38.655 ,0.575 0 ,64 ,1024 ,127 ,96 ,23 ,19.513 ,29.741 ,0.656 0 ,64 ,1024 ,127 ,976 ,23 ,22.11 ,41.075 ,0.538 0 ,64 ,1072 ,127 ,1024 ,23 ,21.811 ,40.77 ,0.535 0 ,64 ,11 ,127 ,10 ,23 ,3.153 ,3.149 ,1.001 0 ,64 ,112 ,127 ,144 ,23 ,5.032 ,5.077 ,0.991 0 ,64 ,112 ,127 ,16 ,23 ,4.521 ,5.862 ,0.771 0 ,64 ,112 ,127 ,256 ,23 ,5.056 ,4.957 ,1.02 0 ,64 ,112 ,127 ,64 ,23 ,5.036 ,5.793 ,0.869 0 ,64 ,112 ,127 ,96 ,23 ,5.082 ,5.127 ,0.991 0 ,64 ,1120 ,127 ,1024 ,23 ,21.617 ,43.445 ,0.498 0 ,64 ,1168 ,127 ,1024 ,23 ,25.798 ,44.944 ,0.574 0 ,64 ,12 ,127 ,11 ,23 ,3.145 ,3.129 ,1.005 0 ,64 ,1216 ,127 ,1024 ,23 ,26.363 ,47.657 ,0.553 0 ,64 ,1264 ,127 ,1024 ,23 ,24.709 ,46.382 ,0.533 0 ,64 ,128 ,127 ,0 ,23 ,6.284 ,8.313 ,0.756 0 ,64 ,128 ,127 ,112 ,23 ,5.153 ,8.324 ,0.619 0 ,64 ,128 ,127 ,128 ,23 ,5.131 ,7.027 ,0.73 0 ,64 ,128 ,127 ,144 ,23 ,5.133 ,7.103 ,0.723 0 ,64 ,128 ,127 ,192 ,23 ,5.158 ,7.086 ,0.728 0 ,64 ,128 ,127 ,240 ,23 ,6.442 ,7.118 ,0.905 0 ,64 ,128 ,127 ,288 ,23 ,6.356 ,7.377 ,0.862 0 ,64 ,128 ,127 ,32 ,23 ,5.763 ,8.18 ,0.704 0 ,64 ,128 ,127 ,48 ,23 ,5.724 ,8.1 ,0.707 0 ,64 ,128 ,127 ,80 ,23 ,5.197 ,8.276 ,0.628 0 ,64 ,128 ,127 ,96 ,23 ,5.131 ,7.085 ,0.724 0 ,64 ,13 ,127 ,12 ,23 ,3.145 ,3.163 ,0.994 0 ,64 ,1312 ,127 ,1024 ,23 ,27.245 ,46.87 ,0.581 0 ,64 ,14 ,127 ,13 ,23 ,3.169 ,3.137 ,1.01 0 ,64 ,144 ,127 ,128 ,23 ,5.201 ,8.234 ,0.632 0 ,64 ,15 ,127 ,14 ,23 ,3.185 ,3.131 ,1.017 0 ,64 ,16 ,127 ,0 ,23 ,3.161 ,3.12 ,1.013 0 ,64 ,16 ,127 ,144 ,23 ,3.145 ,3.129 ,1.005 0 ,64 ,16 ,127 ,15 ,23 ,3.145 ,3.137 ,1.002 0 ,64 ,16 ,127 ,16 ,23 ,3.15 ,3.224 ,0.977 0 ,64 ,16 ,127 ,192 ,23 ,3.161 ,3.129 ,1.01 0 ,64 ,16 ,127 ,240 ,23 ,3.162 ,3.091 ,1.023 0 ,64 ,16 ,127 ,256 ,23 ,3.178 ,3.099 ,1.026 0 ,64 ,16 ,127 ,288 ,23 ,3.178 ,3.138 ,1.013 0 ,64 ,16 ,127 ,48 ,23 ,3.16 ,3.13 ,1.01 0 ,64 ,16 ,127 ,64 ,23 ,3.178 ,3.15 ,1.009 0 ,64 ,16 ,127 ,96 ,23 ,3.162 ,3.246 ,0.974 0 ,64 ,160 ,127 ,144 ,23 ,5.205 ,8.229 ,0.633 0 ,64 ,160 ,127 ,16 ,23 ,5.727 ,10.16 ,0.564 0 ,64 ,160 ,127 ,256 ,23 ,5.181 ,8.203 ,0.632 0 ,64 ,160 ,127 ,64 ,23 ,5.164 ,8.187 ,0.631 0 ,64 ,160 ,127 ,96 ,23 ,5.703 ,7.087 ,0.805 0 ,64 ,17 ,127 ,16 ,23 ,3.144 ,3.153 ,0.997 0 ,64 ,176 ,127 ,128 ,23 ,5.141 ,8.199 ,0.627 0 ,64 ,176 ,127 ,160 ,23 ,5.166 ,8.256 ,0.626 0 ,64 ,176 ,127 ,32 ,23 ,5.751 ,8.144 ,0.706 0 ,64 ,1760 ,127 ,2048 ,23 ,33.518 ,90.3 ,0.371 0 ,64 ,1760 ,127 ,288 ,23 ,28.158 ,48.213 ,0.584 0 ,64 ,18 ,127 ,17 ,23 ,3.144 ,3.13 ,1.005 0 ,64 ,1808 ,127 ,2048 ,23 ,36.239 ,92.257 ,0.393 0 ,64 ,1808 ,127 ,240 ,23 ,28.35 ,49.771 ,0.57 0 ,64 ,1856 ,127 ,192 ,23 ,28.301 ,52.002 ,0.544 0 ,64 ,1856 ,127 ,2048 ,23 ,36.676 ,92.464 ,0.397 0 ,64 ,19 ,127 ,18 ,23 ,3.161 ,3.172 ,0.996 0 ,64 ,1904 ,127 ,144 ,23 ,28.952 ,50.126 ,0.578 0 ,64 ,1904 ,127 ,2048 ,23 ,36.834 ,95.74 ,0.385 0 ,64 ,192 ,127 ,176 ,23 ,5.884 ,9.745 ,0.604 0 ,64 ,1952 ,127 ,2048 ,23 ,39.927 ,97.024 ,0.412 0 ,64 ,1952 ,127 ,96 ,23 ,32.057 ,72.31 ,0.443 0 ,64 ,2 ,127 ,1 ,23 ,3.145 ,3.171 ,0.992 0 ,64 ,20 ,127 ,19 ,23 ,3.212 ,3.113 ,1.032 0 ,64 ,2000 ,127 ,2048 ,23 ,39.434 ,98.274 ,0.401 0 ,64 ,2000 ,127 ,48 ,23 ,32.92 ,68.817 ,0.478 0 ,64 ,2048 ,127 ,0 ,23 ,34.774 ,73.787 ,0.471 0 ,64 ,2048 ,127 ,1024 ,23 ,38.931 ,67.973 ,0.573 0 ,64 ,2048 ,127 ,128 ,23 ,33.431 ,56.005 ,0.597 0 ,64 ,2048 ,127 ,144 ,23 ,33.777 ,57.092 ,0.592 0 ,64 ,2048 ,127 ,1760 ,23 ,38.731 ,96.808 ,0.4 0 ,64 ,2048 ,127 ,1808 ,23 ,40.316 ,96.533 ,0.418 0 ,64 ,2048 ,127 ,1856 ,23 ,40.257 ,97.776 ,0.412 0 ,64 ,2048 ,127 ,1904 ,23 ,45.745 ,97.821 ,0.468 0 ,64 ,2048 ,127 ,192 ,23 ,32.566 ,68.826 ,0.473 0 ,64 ,2048 ,127 ,1952 ,23 ,44.333 ,100.817 ,0.44 0 ,64 ,2048 ,127 ,2000 ,23 ,44.596 ,98.634 ,0.452 0 ,64 ,2048 ,127 ,2048 ,23 ,47.728 ,100.91 ,0.473 0 ,64 ,2048 ,127 ,240 ,23 ,32.23 ,68.393 ,0.471 0 ,64 ,2048 ,127 ,256 ,23 ,33.926 ,69.822 ,0.486 0 ,64 ,2048 ,127 ,288 ,23 ,33.529 ,67.376 ,0.498 0 ,64 ,2048 ,127 ,32 ,23 ,35.219 ,69.795 ,0.505 0 ,64 ,2048 ,127 ,4096 ,23 ,40.277 ,98.401 ,0.409 0 ,64 ,2048 ,127 ,48 ,23 ,34.324 ,69.433 ,0.494 0 ,64 ,2048 ,127 ,512 ,23 ,35.471 ,60.545 ,0.586 0 ,64 ,2048 ,127 ,64 ,23 ,34.467 ,70.137 ,0.491 0 ,64 ,2048 ,127 ,96 ,23 ,33.566 ,74.891 ,0.448 0 ,64 ,208 ,127 ,16 ,23 ,6.757 ,11.877 ,0.569 0 ,64 ,208 ,127 ,192 ,23 ,5.334 ,10.356 ,0.515 0 ,64 ,208 ,127 ,256 ,23 ,5.31 ,10.372 ,0.512 0 ,64 ,208 ,127 ,48 ,23 ,6.563 ,9.828 ,0.668 0 ,64 ,208 ,127 ,64 ,23 ,6.289 ,9.936 ,0.633 0 ,64 ,2096 ,127 ,2048 ,23 ,40.138 ,100.921 ,0.398 0 ,64 ,21 ,127 ,20 ,23 ,3.161 ,3.129 ,1.01 0 ,64 ,2144 ,127 ,2048 ,23 ,42.27 ,101.966 ,0.415 0 ,64 ,2192 ,127 ,2048 ,23 ,51.551 ,104.027 ,0.496 0 ,64 ,22 ,127 ,21 ,23 ,3.16 ,3.145 ,1.005 0 ,64 ,224 ,127 ,128 ,23 ,5.748 ,10.422 ,0.552 0 ,64 ,224 ,127 ,208 ,23 ,5.442 ,10.412 ,0.523 0 ,64 ,224 ,127 ,288 ,23 ,6.03 ,10.098 ,0.597 0 ,64 ,224 ,127 ,32 ,23 ,6.964 ,9.947 ,0.7 0 ,64 ,224 ,127 ,512 ,23 ,5.284 ,10.209 ,0.518 0 ,64 ,2240 ,127 ,2048 ,23 ,54.392 ,104.889 ,0.519 0 ,64 ,2288 ,127 ,2048 ,23 ,52.139 ,103.332 ,0.505 0 ,64 ,23 ,127 ,22 ,23 ,3.161 ,3.145 ,1.005 0 ,64 ,2336 ,127 ,2048 ,23 ,57.209 ,107.056 ,0.534 0 ,64 ,24 ,127 ,23 ,23 ,3.145 ,3.145 ,1.0 0 ,64 ,240 ,127 ,224 ,23 ,5.583 ,10.346 ,0.54 0 ,64 ,25 ,127 ,24 ,23 ,3.161 ,3.138 ,1.007 0 ,64 ,256 ,127 ,0 ,23 ,9.268 ,11.776 ,0.787 0 ,64 ,256 ,127 ,112 ,23 ,8.775 ,10.688 ,0.821 0 ,64 ,256 ,127 ,144 ,23 ,7.436 ,12.002 ,0.62 0 ,64 ,256 ,127 ,16 ,23 ,10.026 ,12.544 ,0.799 0 ,64 ,256 ,127 ,160 ,23 ,8.227 ,12.147 ,0.677 0 ,64 ,256 ,127 ,192 ,23 ,7.011 ,13.215 ,0.531 0 ,64 ,256 ,127 ,208 ,23 ,7.584 ,13.176 ,0.576 0 ,64 ,256 ,127 ,240 ,23 ,6.927 ,12.464 ,0.556 0 ,64 ,256 ,127 ,256 ,23 ,7.429 ,12.486 ,0.595 0 ,64 ,256 ,127 ,288 ,23 ,7.09 ,12.374 ,0.573 0 ,64 ,256 ,127 ,48 ,23 ,8.714 ,11.553 ,0.754 0 ,64 ,256 ,127 ,64 ,23 ,8.751 ,11.52 ,0.76 0 ,64 ,256 ,127 ,96 ,23 ,8.36 ,10.373 ,0.806 0 ,64 ,26 ,127 ,25 ,23 ,3.153 ,3.107 ,1.015 0 ,64 ,27 ,127 ,26 ,23 ,3.161 ,3.114 ,1.015 0 ,64 ,272 ,127 ,128 ,23 ,7.544 ,12.147 ,0.621 0 ,64 ,272 ,127 ,240 ,23 ,8.597 ,11.843 ,0.726 0 ,64 ,272 ,127 ,256 ,23 ,8.732 ,13.529 ,0.645 0 ,64 ,272 ,127 ,32 ,23 ,8.731 ,11.674 ,0.748 0 ,64 ,272 ,127 ,512 ,23 ,7.924 ,12.98 ,0.61 0 ,64 ,28 ,127 ,27 ,23 ,3.161 ,3.137 ,1.008 0 ,64 ,288 ,127 ,272 ,23 ,8.21 ,13.143 ,0.625 0 ,64 ,29 ,127 ,28 ,23 ,3.161 ,3.169 ,0.998 0 ,64 ,3 ,127 ,2 ,23 ,3.188 ,3.114 ,1.024 0 ,64 ,30 ,127 ,29 ,23 ,3.177 ,3.161 ,1.005 0 ,64 ,304 ,127 ,16 ,23 ,8.715 ,11.891 ,0.733 0 ,64 ,304 ,127 ,256 ,23 ,8.62 ,13.102 ,0.658 0 ,64 ,304 ,127 ,64 ,23 ,8.05 ,11.606 ,0.694 0 ,64 ,31 ,127 ,30 ,23 ,3.17 ,3.145 ,1.008 0 ,64 ,32 ,127 ,0 ,23 ,3.29 ,4.007 ,0.821 0 ,64 ,32 ,127 ,128 ,23 ,3.145 ,4.38 ,0.718 0 ,64 ,32 ,127 ,144 ,23 ,3.18 ,4.194 ,0.758 0 ,64 ,32 ,127 ,16 ,23 ,3.145 ,4.309 ,0.73 0 ,64 ,32 ,127 ,192 ,23 ,3.161 ,4.125 ,0.766 0 ,64 ,32 ,127 ,240 ,23 ,3.144 ,4.215 ,0.746 0 ,64 ,32 ,127 ,288 ,23 ,3.16 ,4.174 ,0.757 0 ,64 ,32 ,127 ,31 ,23 ,3.16 ,4.106 ,0.77 0 ,64 ,32 ,127 ,32 ,23 ,3.172 ,4.202 ,0.755 0 ,64 ,32 ,127 ,48 ,23 ,3.145 ,3.91 ,0.804 0 ,64 ,32 ,127 ,96 ,23 ,3.153 ,4.194 ,0.752 0 ,64 ,320 ,127 ,128 ,23 ,7.421 ,13.733 ,0.54 0 ,64 ,320 ,127 ,192 ,23 ,7.242 ,15.821 ,0.458 0 ,64 ,320 ,127 ,32 ,23 ,8.713 ,13.22 ,0.659 0 ,64 ,320 ,127 ,512 ,23 ,9.425 ,14.435 ,0.653 0 ,64 ,352 ,127 ,256 ,23 ,8.98 ,15.717 ,0.571 0 ,64 ,352 ,127 ,64 ,23 ,8.089 ,13.371 ,0.605 0 ,64 ,368 ,127 ,128 ,23 ,7.761 ,13.513 ,0.574 0 ,64 ,368 ,127 ,144 ,23 ,9.364 ,14.781 ,0.634 0 ,64 ,368 ,127 ,512 ,23 ,8.312 ,16.533 ,0.503 0 ,64 ,4 ,127 ,3 ,23 ,3.169 ,3.121 ,1.015 0 ,64 ,400 ,127 ,256 ,23 ,12.427 ,16.853 ,0.737 0 ,64 ,416 ,127 ,128 ,23 ,9.934 ,14.931 ,0.665 0 ,64 ,416 ,127 ,512 ,23 ,11.042 ,17.611 ,0.627 0 ,64 ,416 ,127 ,96 ,23 ,10.902 ,13.841 ,0.788 0 ,64 ,448 ,127 ,256 ,23 ,13.192 ,19.293 ,0.684 0 ,64 ,464 ,127 ,48 ,23 ,10.887 ,16.063 ,0.678 0 ,64 ,464 ,127 ,512 ,23 ,10.452 ,20.032 ,0.522 0 ,64 ,48 ,127 ,32 ,23 ,3.145 ,4.431 ,0.71 0 ,64 ,496 ,127 ,256 ,23 ,10.85 ,18.059 ,0.601 0 ,64 ,5 ,127 ,4 ,23 ,3.161 ,3.121 ,1.013 0 ,64 ,512 ,127 ,0 ,23 ,13.905 ,18.108 ,0.768 0 ,64 ,512 ,127 ,144 ,23 ,11.345 ,18.043 ,0.629 0 ,64 ,512 ,127 ,192 ,23 ,10.846 ,21.107 ,0.514 0 ,64 ,512 ,127 ,224 ,23 ,11.853 ,18.175 ,0.652 0 ,64 ,512 ,127 ,240 ,23 ,11.11 ,17.979 ,0.618 0 ,64 ,512 ,127 ,272 ,23 ,12.445 ,19.733 ,0.631 0 ,64 ,512 ,127 ,288 ,23 ,12.124 ,18.273 ,0.663 0 ,64 ,512 ,127 ,320 ,23 ,12.038 ,20.144 ,0.598 0 ,64 ,512 ,127 ,368 ,23 ,12.373 ,21.351 ,0.58 0 ,64 ,512 ,127 ,416 ,23 ,13.084 ,20.901 ,0.626 0 ,64 ,512 ,127 ,464 ,23 ,15.886 ,22.274 ,0.713 0 ,64 ,512 ,127 ,48 ,23 ,13.235 ,17.512 ,0.756 0 ,64 ,512 ,127 ,512 ,23 ,14.935 ,21.371 ,0.699 0 ,64 ,512 ,127 ,96 ,23 ,13.316 ,17.011 ,0.783 0 ,64 ,544 ,127 ,256 ,23 ,12.968 ,19.863 ,0.653 0 ,64 ,560 ,127 ,512 ,23 ,13.813 ,22.373 ,0.617 0 ,64 ,6 ,127 ,5 ,23 ,3.162 ,3.121 ,1.013 0 ,64 ,608 ,127 ,512 ,23 ,12.486 ,24.564 ,0.508 0 ,64 ,64 ,127 ,0 ,23 ,5.164 ,5.539 ,0.932 0 ,64 ,64 ,127 ,144 ,23 ,4.426 ,4.706 ,0.94 0 ,64 ,64 ,127 ,16 ,23 ,4.415 ,5.514 ,0.801 0 ,64 ,64 ,127 ,192 ,23 ,4.441 ,4.702 ,0.944 0 ,64 ,64 ,127 ,240 ,23 ,4.425 ,4.682 ,0.945 0 ,64 ,64 ,127 ,256 ,23 ,4.49 ,4.898 ,0.917 0 ,64 ,64 ,127 ,288 ,23 ,4.424 ,4.682 ,0.945 0 ,64 ,64 ,127 ,48 ,23 ,4.403 ,4.708 ,0.935 0 ,64 ,64 ,127 ,64 ,23 ,4.487 ,4.856 ,0.924 0 ,64 ,64 ,127 ,96 ,23 ,4.551 ,4.67 ,0.975 0 ,64 ,656 ,127 ,512 ,23 ,16.55 ,26.161 ,0.633 0 ,64 ,7 ,127 ,6 ,23 ,3.161 ,3.146 ,1.005 0 ,64 ,704 ,127 ,512 ,23 ,16.307 ,30.314 ,0.538 0 ,64 ,736 ,127 ,1024 ,23 ,16.321 ,29.145 ,0.56 0 ,64 ,736 ,127 ,288 ,23 ,13.73 ,23.139 ,0.593 0 ,64 ,752 ,127 ,512 ,23 ,15.28 ,26.936 ,0.567 0 ,64 ,784 ,127 ,1024 ,23 ,17.05 ,31.876 ,0.535 0 ,64 ,784 ,127 ,240 ,23 ,14.325 ,24.491 ,0.585 0 ,64 ,8 ,127 ,7 ,23 ,3.161 ,3.133 ,1.009 0 ,64 ,80 ,127 ,128 ,23 ,5.032 ,4.221 ,1.192 0 ,64 ,80 ,127 ,32 ,23 ,4.523 ,4.742 ,0.954 0 ,64 ,80 ,127 ,48 ,23 ,4.644 ,4.948 ,0.939 0 ,64 ,80 ,127 ,64 ,23 ,5.035 ,4.42 ,1.139 0 ,64 ,800 ,127 ,512 ,23 ,18.791 ,28.887 ,0.651 0 ,64 ,832 ,127 ,1024 ,23 ,18.448 ,33.59 ,0.549 0 ,64 ,832 ,127 ,192 ,23 ,14.425 ,27.058 ,0.533 0 ,64 ,880 ,127 ,1024 ,23 ,17.871 ,33.927 ,0.527 0 ,64 ,880 ,127 ,144 ,23 ,14.666 ,24.774 ,0.592 0 ,64 ,9 ,127 ,8 ,23 ,3.161 ,3.154 ,1.002 0 ,64 ,928 ,127 ,1024 ,23 ,19.164 ,36.795 ,0.521 0 ,64 ,928 ,127 ,96 ,23 ,18.11 ,26.37 ,0.687 0 ,64 ,96 ,127 ,80 ,23 ,5.064 ,5.669 ,0.893 0 ,64 ,976 ,127 ,1024 ,23 ,20.975 ,38.908 ,0.539 0 ,64 ,976 ,127 ,48 ,23 ,19.089 ,28.833 ,0.662 1 ,1 ,2048 ,127 ,32 ,0 ,3.097 ,4.435 ,0.698 1 ,1 ,2048 ,127 ,32 ,23 ,34.182 ,68.524 ,0.499 1 ,1 ,256 ,127 ,64 ,0 ,5.693 ,3.8 ,1.498 1 ,1 ,256 ,127 ,64 ,23 ,8.011 ,11.012 ,0.727 1 ,16 ,2048 ,127 ,32 ,23 ,35.054 ,71.311 ,0.492 1 ,16 ,256 ,127 ,64 ,23 ,9.662 ,12.811 ,0.754 1 ,256 ,2048 ,127 ,32 ,23 ,34.659 ,69.267 ,0.5 1 ,256 ,256 ,127 ,64 ,23 ,9.45 ,12.737 ,0.742 1 ,4 ,2048 ,127 ,32 ,23 ,35.208 ,70.182 ,0.502 1 ,4 ,256 ,127 ,64 ,23 ,7.962 ,11.32 ,0.703 1 ,64 ,2048 ,127 ,32 ,23 ,35.422 ,73.54 ,0.482 1 ,64 ,256 ,127 ,64 ,23 ,9.679 ,12.445 ,0.778 105 ,1 ,256 ,127 ,64 ,0 ,5.779 ,3.956 ,1.461 105 ,1 ,256 ,127 ,64 ,23 ,8.356 ,11.535 ,0.724 105 ,16 ,256 ,127 ,64 ,23 ,8.202 ,11.597 ,0.707 105 ,256 ,256 ,127 ,64 ,23 ,10.862 ,13.195 ,0.823 105 ,4 ,256 ,127 ,64 ,23 ,8.336 ,11.596 ,0.719 105 ,64 ,256 ,127 ,64 ,23 ,8.326 ,11.598 ,0.718 15 ,1 ,256 ,127 ,64 ,0 ,5.07 ,3.778 ,1.342 15 ,1 ,256 ,127 ,64 ,23 ,7.984 ,11.459 ,0.697 15 ,16 ,256 ,127 ,64 ,23 ,8.104 ,11.323 ,0.716 15 ,256 ,256 ,127 ,64 ,23 ,9.27 ,12.671 ,0.732 15 ,4 ,256 ,127 ,64 ,23 ,8.292 ,11.245 ,0.737 15 ,64 ,256 ,127 ,64 ,23 ,9.8 ,11.088 ,0.884 2 ,1 ,2048 ,127 ,64 ,0 ,4.808 ,4.698 ,1.023 2 ,1 ,2048 ,127 ,64 ,23 ,33.909 ,69.607 ,0.487 2 ,1 ,256 ,127 ,64 ,0 ,4.691 ,3.783 ,1.24 2 ,1 ,256 ,127 ,64 ,23 ,7.925 ,11.316 ,0.7 2 ,16 ,2048 ,127 ,64 ,23 ,34.004 ,71.486 ,0.476 2 ,16 ,256 ,127 ,64 ,23 ,8.061 ,11.364 ,0.709 2 ,256 ,2048 ,127 ,64 ,23 ,33.833 ,69.847 ,0.484 2 ,256 ,256 ,127 ,64 ,23 ,9.405 ,12.79 ,0.735 2 ,4 ,2048 ,127 ,64 ,23 ,34.94 ,69.048 ,0.506 2 ,4 ,256 ,127 ,64 ,23 ,7.96 ,11.273 ,0.706 2 ,64 ,2048 ,127 ,64 ,23 ,34.158 ,71.32 ,0.479 2 ,64 ,256 ,127 ,64 ,23 ,9.707 ,11.195 ,0.867 3 ,1 ,2048 ,127 ,128 ,0 ,4.917 ,8.438 ,0.583 3 ,1 ,2048 ,127 ,128 ,23 ,33.387 ,55.942 ,0.597 3 ,1 ,256 ,127 ,64 ,0 ,4.756 ,3.865 ,1.231 3 ,1 ,256 ,127 ,64 ,23 ,8.17 ,11.748 ,0.695 3 ,16 ,2048 ,127 ,128 ,23 ,34.344 ,55.245 ,0.622 3 ,16 ,256 ,127 ,64 ,23 ,8.108 ,11.524 ,0.704 3 ,256 ,2048 ,127 ,128 ,23 ,33.726 ,55.718 ,0.605 3 ,256 ,256 ,127 ,64 ,23 ,9.697 ,12.942 ,0.749 3 ,4 ,2048 ,127 ,128 ,23 ,33.379 ,55.738 ,0.599 3 ,4 ,256 ,127 ,64 ,23 ,8.083 ,11.516 ,0.702 3 ,64 ,2048 ,127 ,128 ,23 ,33.404 ,55.606 ,0.601 3 ,64 ,256 ,127 ,64 ,23 ,9.321 ,11.571 ,0.806 30 ,1 ,256 ,127 ,64 ,0 ,4.853 ,4.037 ,1.202 30 ,1 ,256 ,127 ,64 ,23 ,7.981 ,11.422 ,0.699 30 ,16 ,256 ,127 ,64 ,23 ,8.07 ,11.502 ,0.702 30 ,256 ,256 ,127 ,64 ,23 ,9.259 ,12.764 ,0.725 30 ,4 ,256 ,127 ,64 ,23 ,8.002 ,11.336 ,0.706 30 ,64 ,256 ,127 ,64 ,23 ,9.314 ,11.452 ,0.813 4 ,1 ,2048 ,127 ,256 ,0 ,9.384 ,11.959 ,0.785 4 ,1 ,2048 ,127 ,256 ,23 ,34.209 ,77.702 ,0.44 4 ,1 ,256 ,127 ,64 ,0 ,4.613 ,3.861 ,1.195 4 ,1 ,256 ,127 ,64 ,23 ,8.366 ,11.437 ,0.731 4 ,16 ,2048 ,127 ,256 ,23 ,33.529 ,73.372 ,0.457 4 ,16 ,256 ,127 ,64 ,23 ,8.519 ,11.612 ,0.734 4 ,256 ,2048 ,127 ,256 ,23 ,34.09 ,72.41 ,0.471 4 ,256 ,256 ,127 ,64 ,23 ,9.358 ,13.062 ,0.716 4 ,4 ,2048 ,127 ,256 ,23 ,34.377 ,57.552 ,0.597 4 ,4 ,256 ,127 ,64 ,23 ,8.413 ,11.557 ,0.728 4 ,64 ,2048 ,127 ,256 ,23 ,33.699 ,68.19 ,0.494 4 ,64 ,256 ,127 ,64 ,23 ,9.573 ,11.41 ,0.839 4080 ,1 ,31 ,127 ,30 ,0 ,5.576 ,4.86 ,1.147 4080 ,1 ,31 ,127 ,30 ,23 ,5.658 ,5.113 ,1.107 4080 ,1 ,32 ,127 ,31 ,0 ,5.661 ,4.837 ,1.17 4080 ,1 ,32 ,127 ,31 ,23 ,5.677 ,6.393 ,0.888 4080 ,16 ,31 ,127 ,30 ,23 ,5.688 ,5.031 ,1.131 4080 ,16 ,32 ,127 ,31 ,23 ,6.125 ,6.26 ,0.979 4080 ,256 ,31 ,127 ,30 ,23 ,5.659 ,4.982 ,1.136 4080 ,256 ,32 ,127 ,31 ,23 ,5.688 ,6.245 ,0.911 4080 ,4 ,31 ,127 ,30 ,23 ,5.66 ,5.005 ,1.131 4080 ,4 ,32 ,127 ,31 ,23 ,5.659 ,6.198 ,0.913 4080 ,64 ,31 ,127 ,30 ,23 ,5.66 ,5.006 ,1.131 4080 ,64 ,32 ,127 ,31 ,23 ,5.688 ,6.293 ,0.904 4081 ,1 ,29 ,127 ,28 ,0 ,5.52 ,4.86 ,1.136 4081 ,1 ,29 ,127 ,28 ,23 ,5.857 ,5.316 ,1.102 4081 ,1 ,30 ,127 ,29 ,0 ,5.494 ,4.884 ,1.125 4081 ,1 ,30 ,127 ,29 ,23 ,5.675 ,5.175 ,1.097 4081 ,16 ,29 ,127 ,28 ,23 ,5.659 ,5.056 ,1.119 4081 ,16 ,30 ,127 ,29 ,23 ,6.333 ,5.149 ,1.23 4081 ,256 ,29 ,127 ,28 ,23 ,5.659 ,4.981 ,1.136 4081 ,256 ,30 ,127 ,29 ,23 ,5.659 ,4.98 ,1.136 4081 ,4 ,29 ,127 ,28 ,23 ,5.688 ,5.177 ,1.099 4081 ,4 ,30 ,127 ,29 ,23 ,5.688 ,5.164 ,1.101 4081 ,64 ,29 ,127 ,28 ,23 ,5.687 ,5.056 ,1.125 4081 ,64 ,30 ,127 ,29 ,23 ,5.717 ,5.056 ,1.131 4082 ,1 ,27 ,127 ,26 ,0 ,5.488 ,4.837 ,1.135 4082 ,1 ,27 ,127 ,26 ,23 ,5.659 ,5.133 ,1.102 4082 ,1 ,28 ,127 ,27 ,0 ,5.494 ,4.882 ,1.125 4082 ,1 ,28 ,127 ,27 ,23 ,5.732 ,5.233 ,1.095 4082 ,16 ,27 ,127 ,26 ,23 ,5.751 ,4.956 ,1.16 4082 ,16 ,28 ,127 ,27 ,23 ,5.659 ,4.98 ,1.136 4082 ,256 ,27 ,127 ,26 ,23 ,5.66 ,5.047 ,1.122 4082 ,256 ,28 ,127 ,27 ,23 ,5.659 ,5.031 ,1.125 4082 ,4 ,27 ,127 ,26 ,23 ,5.687 ,5.005 ,1.136 4082 ,4 ,28 ,127 ,27 ,23 ,5.658 ,5.005 ,1.13 4082 ,64 ,27 ,127 ,26 ,23 ,5.68 ,5.006 ,1.135 4082 ,64 ,28 ,127 ,27 ,23 ,5.659 ,5.056 ,1.119 4083 ,1 ,25 ,127 ,24 ,0 ,5.467 ,4.916 ,1.112 4083 ,1 ,25 ,127 ,24 ,23 ,5.63 ,5.096 ,1.105 4083 ,1 ,26 ,127 ,25 ,0 ,5.441 ,4.86 ,1.12 4083 ,1 ,26 ,127 ,25 ,23 ,5.659 ,5.023 ,1.127 4083 ,16 ,25 ,127 ,24 ,23 ,5.746 ,5.03 ,1.142 4083 ,16 ,26 ,127 ,25 ,23 ,5.631 ,5.031 ,1.119 4083 ,256 ,25 ,127 ,24 ,23 ,5.688 ,4.956 ,1.148 4083 ,256 ,26 ,127 ,25 ,23 ,5.659 ,5.031 ,1.125 4083 ,4 ,25 ,127 ,24 ,23 ,5.704 ,5.084 ,1.122 4083 ,4 ,26 ,127 ,25 ,23 ,5.688 ,5.006 ,1.136 4083 ,64 ,25 ,127 ,24 ,23 ,5.688 ,4.981 ,1.142 4083 ,64 ,26 ,127 ,25 ,23 ,5.693 ,4.956 ,1.149 4084 ,1 ,23 ,127 ,22 ,0 ,5.441 ,4.815 ,1.13 4084 ,1 ,23 ,127 ,22 ,23 ,5.66 ,5.15 ,1.099 4084 ,1 ,24 ,127 ,23 ,0 ,5.585 ,4.814 ,1.16 4084 ,1 ,24 ,127 ,23 ,23 ,5.729 ,4.98 ,1.15 4084 ,16 ,23 ,127 ,22 ,23 ,5.659 ,5.057 ,1.119 4084 ,16 ,24 ,127 ,23 ,23 ,5.688 ,5.056 ,1.125 4084 ,256 ,23 ,127 ,22 ,23 ,5.675 ,5.062 ,1.121 4084 ,256 ,24 ,127 ,23 ,23 ,5.718 ,4.981 ,1.148 4084 ,4 ,23 ,127 ,22 ,23 ,5.659 ,5.026 ,1.126 4084 ,4 ,24 ,127 ,23 ,23 ,5.659 ,5.038 ,1.123 4084 ,64 ,23 ,127 ,22 ,23 ,5.659 ,5.005 ,1.131 4084 ,64 ,24 ,127 ,23 ,23 ,5.688 ,5.037 ,1.129 4085 ,1 ,21 ,127 ,20 ,0 ,5.561 ,4.813 ,1.155 4085 ,1 ,21 ,127 ,20 ,23 ,5.711 ,5.006 ,1.141 4085 ,1 ,22 ,127 ,21 ,0 ,5.605 ,4.837 ,1.159 4085 ,1 ,22 ,127 ,21 ,23 ,5.66 ,5.06 ,1.119 4085 ,16 ,21 ,127 ,20 ,23 ,5.659 ,5.081 ,1.114 4085 ,16 ,22 ,127 ,21 ,23 ,5.659 ,5.056 ,1.119 4085 ,256 ,21 ,127 ,20 ,23 ,5.687 ,5.056 ,1.125 4085 ,256 ,22 ,127 ,21 ,23 ,5.701 ,5.031 ,1.133 4085 ,4 ,21 ,127 ,20 ,23 ,5.688 ,5.005 ,1.136 4085 ,4 ,22 ,127 ,21 ,23 ,5.689 ,5.005 ,1.136 4085 ,64 ,21 ,127 ,20 ,23 ,5.706 ,5.031 ,1.134 4085 ,64 ,22 ,127 ,21 ,23 ,5.688 ,5.03 ,1.131 4086 ,1 ,19 ,127 ,18 ,0 ,5.441 ,4.963 ,1.096 4086 ,1 ,19 ,127 ,18 ,23 ,5.683 ,4.98 ,1.141 4086 ,1 ,20 ,127 ,19 ,0 ,5.467 ,4.864 ,1.124 4086 ,1 ,20 ,127 ,19 ,23 ,5.631 ,4.996 ,1.127 4086 ,16 ,19 ,127 ,18 ,23 ,5.688 ,5.005 ,1.136 4086 ,16 ,20 ,127 ,19 ,23 ,5.716 ,5.031 ,1.136 4086 ,256 ,19 ,127 ,18 ,23 ,5.631 ,5.056 ,1.114 4086 ,256 ,20 ,127 ,19 ,23 ,5.631 ,5.078 ,1.109 4086 ,4 ,19 ,127 ,18 ,23 ,5.716 ,5.005 ,1.142 4086 ,4 ,20 ,127 ,19 ,23 ,5.717 ,5.028 ,1.137 4086 ,64 ,19 ,127 ,18 ,23 ,5.659 ,4.98 ,1.136 4086 ,64 ,20 ,127 ,19 ,23 ,5.718 ,5.005 ,1.142 4087 ,1 ,17 ,127 ,16 ,0 ,5.512 ,4.79 ,1.151 4087 ,1 ,17 ,127 ,16 ,23 ,5.66 ,5.005 ,1.131 4087 ,1 ,18 ,127 ,17 ,0 ,5.607 ,4.767 ,1.176 4087 ,1 ,18 ,127 ,17 ,23 ,5.689 ,5.031 ,1.131 4087 ,16 ,17 ,127 ,16 ,23 ,5.827 ,5.006 ,1.164 4087 ,16 ,18 ,127 ,17 ,23 ,5.717 ,5.031 ,1.136 4087 ,256 ,17 ,127 ,16 ,23 ,5.688 ,5.056 ,1.125 4087 ,256 ,18 ,127 ,17 ,23 ,5.748 ,5.031 ,1.143 4087 ,4 ,17 ,127 ,16 ,23 ,5.717 ,4.956 ,1.154 4087 ,4 ,18 ,127 ,17 ,23 ,5.659 ,4.981 ,1.136 4087 ,64 ,17 ,127 ,16 ,23 ,5.658 ,5.031 ,1.125 4087 ,64 ,18 ,127 ,17 ,23 ,5.687 ,5.116 ,1.112 4088 ,1 ,15 ,127 ,14 ,0 ,5.551 ,4.82 ,1.152 4088 ,1 ,15 ,127 ,14 ,23 ,5.78 ,5.031 ,1.149 4088 ,1 ,16 ,127 ,15 ,0 ,5.47 ,4.904 ,1.115 4088 ,1 ,16 ,127 ,15 ,23 ,5.688 ,4.956 ,1.148 4088 ,16 ,15 ,127 ,14 ,23 ,5.659 ,5.031 ,1.125 4088 ,16 ,16 ,127 ,15 ,23 ,5.66 ,5.0 ,1.132 4088 ,256 ,15 ,127 ,14 ,23 ,5.659 ,4.956 ,1.142 4088 ,256 ,16 ,127 ,15 ,23 ,5.688 ,4.981 ,1.142 4088 ,4 ,15 ,127 ,14 ,23 ,5.747 ,5.006 ,1.148 4088 ,4 ,16 ,127 ,15 ,23 ,5.689 ,4.982 ,1.142 4088 ,64 ,15 ,127 ,14 ,23 ,5.688 ,5.005 ,1.136 4088 ,64 ,16 ,127 ,15 ,23 ,5.66 ,5.006 ,1.131 4089 ,1 ,13 ,127 ,12 ,0 ,5.608 ,6.821 ,0.822 4089 ,1 ,13 ,127 ,12 ,23 ,5.688 ,5.048 ,1.127 4089 ,1 ,14 ,127 ,13 ,0 ,5.549 ,4.725 ,1.174 4089 ,1 ,14 ,127 ,13 ,23 ,5.659 ,5.031 ,1.125 4089 ,16 ,13 ,127 ,12 ,23 ,5.739 ,5.006 ,1.146 4089 ,16 ,14 ,127 ,13 ,23 ,5.688 ,4.98 ,1.142 4089 ,256 ,13 ,127 ,12 ,23 ,5.688 ,5.012 ,1.135 4089 ,256 ,14 ,127 ,13 ,23 ,5.688 ,4.98 ,1.142 4089 ,4 ,13 ,127 ,12 ,23 ,5.688 ,5.082 ,1.119 4089 ,4 ,14 ,127 ,13 ,23 ,5.687 ,5.137 ,1.107 4089 ,64 ,13 ,127 ,12 ,23 ,5.688 ,5.056 ,1.125 4089 ,64 ,14 ,127 ,13 ,23 ,5.717 ,5.006 ,1.142 4090 ,1 ,11 ,127 ,10 ,0 ,5.581 ,5.162 ,1.081 4090 ,1 ,11 ,127 ,10 ,23 ,5.688 ,5.03 ,1.131 4090 ,1 ,12 ,127 ,11 ,0 ,5.415 ,5.184 ,1.045 4090 ,1 ,12 ,127 ,11 ,23 ,5.718 ,5.031 ,1.137 4090 ,16 ,11 ,127 ,10 ,23 ,5.668 ,4.956 ,1.144 4090 ,16 ,12 ,127 ,11 ,23 ,5.746 ,5.032 ,1.142 4090 ,256 ,11 ,127 ,10 ,23 ,5.659 ,4.98 ,1.136 4090 ,256 ,12 ,127 ,11 ,23 ,5.741 ,4.977 ,1.154 4090 ,4 ,11 ,127 ,10 ,23 ,5.658 ,5.032 ,1.125 4090 ,4 ,12 ,127 ,11 ,23 ,5.66 ,5.006 ,1.131 4090 ,64 ,11 ,127 ,10 ,23 ,5.659 ,5.006 ,1.13 4090 ,64 ,12 ,127 ,11 ,23 ,5.733 ,5.006 ,1.145 4091 ,1 ,10 ,127 ,9 ,0 ,5.415 ,4.843 ,1.118 4091 ,1 ,10 ,127 ,9 ,23 ,5.659 ,5.032 ,1.125 4091 ,1 ,9 ,127 ,8 ,0 ,5.452 ,4.767 ,1.144 4091 ,1 ,9 ,127 ,8 ,23 ,5.659 ,5.005 ,1.131 4091 ,16 ,10 ,127 ,9 ,23 ,5.718 ,5.056 ,1.131 4091 ,16 ,9 ,127 ,8 ,23 ,5.688 ,5.032 ,1.13 4091 ,256 ,10 ,127 ,9 ,23 ,5.659 ,5.083 ,1.113 4091 ,256 ,9 ,127 ,8 ,23 ,5.632 ,5.032 ,1.119 4091 ,4 ,10 ,127 ,9 ,23 ,5.718 ,5.006 ,1.142 4091 ,4 ,9 ,127 ,8 ,23 ,5.717 ,5.057 ,1.13 4091 ,64 ,10 ,127 ,9 ,23 ,5.704 ,5.084 ,1.122 4091 ,64 ,9 ,127 ,8 ,23 ,5.659 ,5.03 ,1.125 4092 ,1 ,7 ,127 ,6 ,0 ,5.795 ,4.863 ,1.192 4092 ,1 ,7 ,127 ,6 ,23 ,5.713 ,4.981 ,1.147 4092 ,1 ,8 ,127 ,7 ,0 ,5.469 ,4.886 ,1.119 4092 ,1 ,8 ,127 ,7 ,23 ,5.688 ,5.084 ,1.119 4092 ,16 ,7 ,127 ,6 ,23 ,5.659 ,5.061 ,1.118 4092 ,16 ,8 ,127 ,7 ,23 ,5.658 ,5.03 ,1.125 4092 ,256 ,7 ,127 ,6 ,23 ,5.688 ,5.007 ,1.136 4092 ,256 ,8 ,127 ,7 ,23 ,5.695 ,5.007 ,1.137 4092 ,4 ,7 ,127 ,6 ,23 ,5.688 ,5.068 ,1.122 4092 ,4 ,8 ,127 ,7 ,23 ,5.687 ,5.056 ,1.125 4092 ,64 ,7 ,127 ,6 ,23 ,5.704 ,4.98 ,1.145 4092 ,64 ,8 ,127 ,7 ,23 ,5.688 ,5.032 ,1.13 4093 ,1 ,5 ,127 ,4 ,0 ,5.313 ,4.837 ,1.098 4093 ,1 ,5 ,127 ,4 ,23 ,5.704 ,5.138 ,1.11 4093 ,1 ,6 ,127 ,5 ,0 ,5.49 ,4.861 ,1.129 4093 ,1 ,6 ,127 ,5 ,23 ,5.717 ,5.082 ,1.125 4093 ,16 ,5 ,127 ,4 ,23 ,5.718 ,5.021 ,1.139 4093 ,16 ,6 ,127 ,5 ,23 ,5.688 ,5.005 ,1.136 4093 ,256 ,5 ,127 ,4 ,23 ,5.872 ,4.956 ,1.185 4093 ,256 ,6 ,127 ,5 ,23 ,5.631 ,4.956 ,1.136 4093 ,4 ,5 ,127 ,4 ,23 ,5.716 ,5.031 ,1.136 4093 ,4 ,6 ,127 ,5 ,23 ,5.687 ,5.03 ,1.131 4093 ,64 ,5 ,127 ,4 ,23 ,5.659 ,4.972 ,1.138 4093 ,64 ,6 ,127 ,5 ,23 ,5.688 ,5.006 ,1.136 4094 ,1 ,3 ,127 ,2 ,0 ,5.345 ,4.723 ,1.132 4094 ,1 ,3 ,127 ,2 ,23 ,5.719 ,5.005 ,1.143 4094 ,1 ,4 ,127 ,3 ,0 ,5.753 ,4.767 ,1.207 4094 ,1 ,4 ,127 ,3 ,23 ,5.689 ,4.98 ,1.142 4094 ,16 ,3 ,127 ,2 ,23 ,5.749 ,5.062 ,1.136 4094 ,16 ,4 ,127 ,3 ,23 ,5.717 ,5.006 ,1.142 4094 ,256 ,3 ,127 ,2 ,23 ,5.661 ,4.932 ,1.148 4094 ,256 ,4 ,127 ,3 ,23 ,5.748 ,4.981 ,1.154 4094 ,4 ,3 ,127 ,2 ,23 ,5.66 ,5.005 ,1.131 4094 ,4 ,4 ,127 ,3 ,23 ,5.698 ,5.005 ,1.138 4094 ,64 ,3 ,127 ,2 ,23 ,5.718 ,5.0 ,1.144 4094 ,64 ,4 ,127 ,3 ,23 ,5.689 ,5.005 ,1.137 4095 ,1 ,1 ,127 ,0 ,0 ,4.077 ,3.561 ,1.145 4095 ,1 ,1 ,127 ,0 ,23 ,5.475 ,5.007 ,1.093 4095 ,1 ,2 ,127 ,1 ,0 ,5.464 ,4.946 ,1.105 4095 ,1 ,2 ,127 ,1 ,23 ,5.72 ,5.005 ,1.143 4095 ,16 ,1 ,127 ,0 ,23 ,5.421 ,5.033 ,1.077 4095 ,16 ,2 ,127 ,1 ,23 ,5.661 ,4.981 ,1.137 4095 ,256 ,1 ,127 ,0 ,23 ,5.413 ,4.974 ,1.088 4095 ,256 ,2 ,127 ,1 ,23 ,5.72 ,5.034 ,1.136 4095 ,4 ,1 ,127 ,0 ,23 ,5.418 ,5.008 ,1.082 4095 ,4 ,2 ,127 ,1 ,23 ,5.689 ,5.057 ,1.125 4095 ,64 ,1 ,127 ,0 ,23 ,5.325 ,4.957 ,1.074 4095 ,64 ,2 ,127 ,1 ,23 ,5.733 ,5.059 ,1.133 45 ,1 ,256 ,127 ,64 ,0 ,4.861 ,3.978 ,1.222 45 ,1 ,256 ,127 ,64 ,23 ,8.041 ,11.454 ,0.702 45 ,16 ,256 ,127 ,64 ,23 ,8.175 ,11.625 ,0.703 45 ,256 ,256 ,127 ,64 ,23 ,9.37 ,12.999 ,0.721 45 ,4 ,256 ,127 ,64 ,23 ,8.129 ,11.549 ,0.704 45 ,64 ,256 ,127 ,64 ,23 ,10.391 ,11.431 ,0.909 5 ,1 ,2048 ,127 ,512 ,0 ,13.039 ,18.823 ,0.693 5 ,1 ,2048 ,127 ,512 ,23 ,34.602 ,79.639 ,0.434 5 ,1 ,256 ,127 ,64 ,0 ,4.676 ,4.007 ,1.167 5 ,1 ,256 ,127 ,64 ,23 ,8.091 ,11.639 ,0.695 5 ,16 ,2048 ,127 ,512 ,23 ,35.788 ,60.545 ,0.591 5 ,16 ,256 ,127 ,64 ,23 ,8.083 ,11.504 ,0.703 5 ,256 ,2048 ,127 ,512 ,23 ,35.448 ,60.085 ,0.59 5 ,256 ,256 ,127 ,64 ,23 ,9.772 ,11.601 ,0.842 5 ,4 ,2048 ,127 ,512 ,23 ,36.09 ,58.237 ,0.62 5 ,4 ,256 ,127 ,64 ,23 ,8.101 ,11.504 ,0.704 5 ,64 ,2048 ,127 ,512 ,23 ,35.453 ,60.442 ,0.587 5 ,64 ,256 ,127 ,64 ,23 ,9.632 ,11.439 ,0.842 6 ,1 ,2048 ,127 ,1024 ,0 ,18.531 ,29.79 ,0.622 6 ,1 ,2048 ,127 ,1024 ,23 ,35.371 ,57.648 ,0.614 6 ,1 ,256 ,127 ,64 ,0 ,4.875 ,4.037 ,1.208 6 ,1 ,256 ,127 ,64 ,23 ,8.062 ,11.617 ,0.694 6 ,16 ,2048 ,127 ,1024 ,23 ,37.311 ,66.298 ,0.563 6 ,16 ,256 ,127 ,64 ,23 ,8.117 ,11.491 ,0.706 6 ,256 ,2048 ,127 ,1024 ,23 ,40.04 ,65.602 ,0.61 6 ,256 ,256 ,127 ,64 ,23 ,9.415 ,11.533 ,0.816 6 ,4 ,2048 ,127 ,1024 ,23 ,35.439 ,60.21 ,0.589 6 ,4 ,256 ,127 ,64 ,23 ,8.203 ,11.582 ,0.708 6 ,64 ,2048 ,127 ,1024 ,23 ,38.201 ,66.0 ,0.579 6 ,64 ,256 ,127 ,64 ,23 ,8.092 ,11.425 ,0.708 60 ,1 ,256 ,127 ,64 ,0 ,4.59 ,3.875 ,1.184 60 ,1 ,256 ,127 ,64 ,23 ,8.382 ,11.496 ,0.729 60 ,16 ,256 ,127 ,64 ,23 ,8.134 ,11.624 ,0.7 60 ,256 ,256 ,127 ,64 ,23 ,9.944 ,11.474 ,0.867 60 ,4 ,256 ,127 ,64 ,23 ,8.321 ,11.537 ,0.721 60 ,64 ,256 ,127 ,64 ,23 ,9.687 ,11.535 ,0.84 7 ,1 ,2048 ,127 ,2048 ,0 ,29.34 ,74.074 ,0.396 7 ,1 ,2048 ,127 ,2048 ,23 ,34.479 ,79.704 ,0.433 7 ,1 ,256 ,127 ,64 ,0 ,4.767 ,4.047 ,1.178 7 ,1 ,256 ,127 ,64 ,23 ,8.158 ,11.55 ,0.706 7 ,16 ,2048 ,127 ,2048 ,23 ,48.164 ,77.397 ,0.622 7 ,16 ,256 ,127 ,64 ,23 ,8.103 ,11.594 ,0.699 7 ,256 ,2048 ,127 ,2048 ,23 ,46.693 ,99.52 ,0.469 7 ,256 ,256 ,127 ,64 ,23 ,9.556 ,11.495 ,0.831 7 ,4 ,2048 ,127 ,2048 ,23 ,35.553 ,58.184 ,0.611 7 ,4 ,256 ,127 ,64 ,23 ,8.294 ,11.619 ,0.714 7 ,64 ,2048 ,127 ,2048 ,23 ,41.073 ,101.721 ,0.404 7 ,64 ,256 ,127 ,64 ,23 ,8.404 ,11.592 ,0.725 75 ,1 ,256 ,127 ,64 ,0 ,5.009 ,4.035 ,1.241 75 ,1 ,256 ,127 ,64 ,23 ,8.211 ,11.62 ,0.707 75 ,16 ,256 ,127 ,64 ,23 ,8.476 ,11.6 ,0.731 75 ,256 ,256 ,127 ,64 ,23 ,11.548 ,13.3 ,0.868 75 ,4 ,256 ,127 ,64 ,23 ,8.103 ,11.563 ,0.701 75 ,64 ,256 ,127 ,64 ,23 ,8.354 ,11.619 ,0.719 8 ,1 ,2048 ,127 ,4096 ,0 ,33.862 ,70.934 ,0.477 8 ,1 ,2048 ,127 ,4096 ,23 ,34.545 ,77.425 ,0.446 8 ,16 ,2048 ,127 ,4096 ,23 ,38.225 ,60.633 ,0.63 8 ,256 ,2048 ,127 ,4096 ,23 ,41.67 ,102.809 ,0.405 8 ,4 ,2048 ,127 ,4096 ,23 ,34.59 ,56.665 ,0.61 8 ,64 ,2048 ,127 ,4096 ,23 ,41.385 ,99.125 ,0.418 90 ,1 ,256 ,127 ,64 ,0 ,4.784 ,3.861 ,1.239 90 ,1 ,256 ,127 ,64 ,23 ,8.655 ,11.568 ,0.748 90 ,16 ,256 ,127 ,64 ,23 ,8.955 ,11.543 ,0.776 90 ,256 ,256 ,127 ,64 ,23 ,11.125 ,13.154 ,0.846 90 ,4 ,256 ,127 ,64 ,23 ,8.104 ,11.518 ,0.704 90 ,64 ,256 ,127 ,64 ,23 ,8.446 ,11.554 ,0.731
On Thu, Sep 21, 2023 at 7:39 AM Noah Goldstein <goldstein.w.n@gmail.com> wrote: > > On Thu, Sep 21, 2023 at 9:38 AM Noah Goldstein <goldstein.w.n@gmail.com> wrote: > > > > This commit refactors `strrchr-evex` and `strrchr-evex512` to use a > > common implementation: `strrchr-evex-base.S`. > > > > The motivation is `strrchr-evex` needed to be refactored to not use > > 64-bit masked registers in preperation for AVX10. > > > > Once vec-width masked register combining was removed, the EVEX and > > EVEX512 implementations can easily be implemented in the same file > > without any major overhead. > > > > The net result is performance improvements (measured on TGL) for both > > `strrchr-evex` and `strrchr-evex512`. Although, note there are some > > regressions in the test suite and it may be many of the cases that > > make the total-geomean of improvement/regression across bench-strrchr > > are cold. The point of the performance measurement is to show there > > are no major regressions, but the primary motivation is preperation > > for AVX10. > > > > Benchmarks where taken on TGL: > > https://www.intel.com/content/www/us/en/products/sku/213799/intel-core-i711850h-processor-24m-cache-up-to-4-80-ghz/specifications.html > > > > EVEX geometric_mean(N=5) of all benchmarks New / Original : 0.74 > > EVEX512 geometric_mean(N=5) of all benchmarks New / Original: 0.87 > Full summary of attached here. The results look good to me. I believe that this is the only 256-bit EVEX function with 64-bit mask instructions. > > > > Full check passes on x86. > > --- > > sysdeps/x86_64/multiarch/strrchr-evex-base.S | 466 ++++++++++++------- > > sysdeps/x86_64/multiarch/strrchr-evex.S | 392 +--------------- > > sysdeps/x86_64/multiarch/wcsrchr-evex.S | 1 + > > 3 files changed, 294 insertions(+), 565 deletions(-) > > > > diff --git a/sysdeps/x86_64/multiarch/strrchr-evex-base.S b/sysdeps/x86_64/multiarch/strrchr-evex-base.S > > index 58b2853ab6..2c98f07fca 100644 > > --- a/sysdeps/x86_64/multiarch/strrchr-evex-base.S > > +++ b/sysdeps/x86_64/multiarch/strrchr-evex-base.S > > @@ -25,240 +25,354 @@ > > # include <sysdep.h> > > > > # ifdef USE_AS_WCSRCHR > > +# if VEC_SIZE == 64 > > +# define RCX_M cx > > +# define kortestM kortestw > > +# else > > +# define RCX_M cl > > +# define kortestM kortestb > > +# endif > > + > > +# define SHIFT_REG VRCX > > +# define VPCOMPRESS vpcompressd > > # define CHAR_SIZE 4 > > -# define VPBROADCAST vpbroadcastd > > -# define VPCMPEQ vpcmpeqd > > -# define VPMINU vpminud > > +# define VPMIN vpminud > > # define VPTESTN vptestnmd > > +# define VPTEST vptestmd > > +# define VPBROADCAST vpbroadcastd > > +# define VPCMPEQ vpcmpeqd > > +# define VPCMP vpcmpd > > # else > > +# define SHIFT_REG VRDI > > +# define VPCOMPRESS vpcompressb > > # define CHAR_SIZE 1 > > -# define VPBROADCAST vpbroadcastb > > -# define VPCMPEQ vpcmpeqb > > -# define VPMINU vpminub > > +# define VPMIN vpminub > > # define VPTESTN vptestnmb > > +# define VPTEST vptestmb > > +# define VPBROADCAST vpbroadcastb > > +# define VPCMPEQ vpcmpeqb > > +# define VPCMP vpcmpb > > + > > +# define RCX_M VRCX > > +# define kortestM KORTEST > > # endif > > > > -# define PAGE_SIZE 4096 > > +# define VMATCH VMM(0) > > # define CHAR_PER_VEC (VEC_SIZE / CHAR_SIZE) > > +# define PAGE_SIZE 4096 > > > > .section SECTION(.text), "ax", @progbits > > -/* Aligning entry point to 64 byte, provides better performance for > > - one vector length string. */ > > -ENTRY_P2ALIGN (STRRCHR, 6) > > - > > - /* Broadcast CHAR to VMM(0). */ > > - VPBROADCAST %esi, %VMM(0) > > + /* Aligning entry point to 64 byte, provides better performance for > > + one vector length string. */ > > +ENTRY_P2ALIGN(STRRCHR, 6) > > movl %edi, %eax > > - sall $20, %eax > > - cmpl $((PAGE_SIZE - VEC_SIZE) << 20), %eax > > - ja L(page_cross) > > + /* Broadcast CHAR to VMATCH. */ > > + VPBROADCAST %esi, %VMATCH > > > > -L(page_cross_continue): > > - /* Compare [w]char for null, mask bit will be set for match. */ > > - VMOVU (%rdi), %VMM(1) > > + andl $(PAGE_SIZE - 1), %eax > > + cmpl $(PAGE_SIZE - VEC_SIZE), %eax > > + jg L(cross_page_boundary) > > > > - VPTESTN %VMM(1), %VMM(1), %k1 > > - KMOV %k1, %VRCX > > - test %VRCX, %VRCX > > - jz L(align_more) > > - > > - VPCMPEQ %VMM(1), %VMM(0), %k0 > > - KMOV %k0, %VRAX > > - BLSMSK %VRCX, %VRCX > > - and %VRCX, %VRAX > > - jz L(ret) > > - > > - BSR %VRAX, %VRAX > > + VMOVU (%rdi), %VMM(1) > > + /* k0 has a 1 for each zero CHAR in YMM1. */ > > + VPTESTN %VMM(1), %VMM(1), %k0 > > + KMOV %k0, %VGPR(rsi) > > + test %VGPR(rsi), %VGPR(rsi) > > + jz L(aligned_more) > > + /* fallthrough: zero CHAR in first VEC. */ > > +L(page_cross_return): > > + /* K1 has a 1 for each search CHAR match in VEC(1). */ > > + VPCMPEQ %VMATCH, %VMM(1), %k1 > > + KMOV %k1, %VGPR(rax) > > + /* Build mask up until first zero CHAR (used to mask of > > + potential search CHAR matches past the end of the string). */ > > + blsmsk %VGPR(rsi), %VGPR(rsi) > > + and %VGPR(rsi), %VGPR(rax) > > + jz L(ret0) > > + /* Get last match (the `and` removed any out of bounds matches). */ > > + bsr %VGPR(rax), %VGPR(rax) > > # ifdef USE_AS_WCSRCHR > > leaq (%rdi, %rax, CHAR_SIZE), %rax > > # else > > - add %rdi, %rax > > + addq %rdi, %rax > > # endif > > -L(ret): > > +L(ret0): > > ret > > > > -L(vector_x2_end): > > - VPCMPEQ %VMM(2), %VMM(0), %k2 > > - KMOV %k2, %VRAX > > - BLSMSK %VRCX, %VRCX > > - and %VRCX, %VRAX > > - jz L(vector_x1_ret) > > - > > - BSR %VRAX, %VRAX > > - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax > > - ret > > - > > - /* Check the first vector at very last to look for match. */ > > -L(vector_x1_ret): > > - VPCMPEQ %VMM(1), %VMM(0), %k2 > > - KMOV %k2, %VRAX > > - test %VRAX, %VRAX > > - jz L(ret) > > - > > - BSR %VRAX, %VRAX > > + /* Returns for first vec x1/x2/x3 have hard coded backward > > + search path for earlier matches. */ > > + .p2align 4,, 6 > > +L(first_vec_x1): > > + VPCMPEQ %VMATCH, %VMM(2), %k1 > > + KMOV %k1, %VGPR(rax) > > + blsmsk %VGPR(rcx), %VGPR(rcx) > > + /* eax non-zero if search CHAR in range. */ > > + and %VGPR(rcx), %VGPR(rax) > > + jnz L(first_vec_x1_return) > > + > > + /* fallthrough: no match in YMM2 then need to check for earlier > > + matches (in YMM1). */ > > + .p2align 4,, 4 > > +L(first_vec_x0_test): > > + VPCMPEQ %VMATCH, %VMM(1), %k1 > > + KMOV %k1, %VGPR(rax) > > + test %VGPR(rax), %VGPR(rax) > > + jz L(ret1) > > + bsr %VGPR(rax), %VGPR(rax) > > # ifdef USE_AS_WCSRCHR > > leaq (%rsi, %rax, CHAR_SIZE), %rax > > # else > > - add %rsi, %rax > > + > > + addq %rsi, %rax > > # endif > > +L(ret1): > > + ret > > + > > + .p2align 4,, 10 > > +L(first_vec_x3): > > + VPCMPEQ %VMATCH, %VMM(4), %k1 > > + KMOV %k1, %VGPR(rax) > > + blsmsk %VGPR(rcx), %VGPR(rcx) > > + /* If no search CHAR match in range check YMM1/YMM2/YMM3. */ > > + and %VGPR(rcx), %VGPR(rax) > > + jz L(first_vec_x1_or_x2) > > + bsr %VGPR(rax), %VGPR(rax) > > + leaq (VEC_SIZE * 3)(%rdi, %rax, CHAR_SIZE), %rax > > + ret > > + .p2align 4,, 4 > > + > > +L(first_vec_x2): > > + VPCMPEQ %VMATCH, %VMM(3), %k1 > > + KMOV %k1, %VGPR(rax) > > + blsmsk %VGPR(rcx), %VGPR(rcx) > > + /* Check YMM3 for last match first. If no match try YMM2/YMM1. */ > > + and %VGPR(rcx), %VGPR(rax) > > + jz L(first_vec_x0_x1_test) > > + bsr %VGPR(rax), %VGPR(rax) > > + leaq (VEC_SIZE * 2)(%r8, %rax, CHAR_SIZE), %rax > > ret > > > > -L(align_more): > > - /* Zero r8 to store match result. */ > > - xorl %r8d, %r8d > > - /* Save pointer of first vector, in case if no match found. */ > > + .p2align 4,, 6 > > +L(first_vec_x0_x1_test): > > + VPCMPEQ %VMATCH, %VMM(2), %k1 > > + KMOV %k1, %VGPR(rax) > > + /* Check YMM2 for last match first. If no match try YMM1. */ > > + test %VGPR(rax), %VGPR(rax) > > + jz L(first_vec_x0_test) > > + .p2align 4,, 4 > > +L(first_vec_x1_return): > > + bsr %VGPR(rax), %VGPR(rax) > > + leaq (VEC_SIZE)(%r8, %rax, CHAR_SIZE), %rax > > + ret > > + > > + .p2align 4,, 12 > > +L(aligned_more): > > +L(page_cross_continue): > > + /* Need to keep original pointer incase VEC(1) has last match. */ > > movq %rdi, %rsi > > - /* Align pointer to vector size. */ > > andq $-VEC_SIZE, %rdi > > - /* Loop unroll for 2 vector loop. */ > > - VMOVA (VEC_SIZE)(%rdi), %VMM(2) > > + > > + VMOVU VEC_SIZE(%rdi), %VMM(2) > > VPTESTN %VMM(2), %VMM(2), %k0 > > KMOV %k0, %VRCX > > + movq %rdi, %r8 > > test %VRCX, %VRCX > > - jnz L(vector_x2_end) > > + jnz L(first_vec_x1) > > + > > + VMOVU (VEC_SIZE * 2)(%rdi), %VMM(3) > > + VPTESTN %VMM(3), %VMM(3), %k0 > > + KMOV %k0, %VRCX > > + > > + test %VRCX, %VRCX > > + jnz L(first_vec_x2) > > + > > + VMOVU (VEC_SIZE * 3)(%rdi), %VMM(4) > > + VPTESTN %VMM(4), %VMM(4), %k0 > > + KMOV %k0, %VRCX > > + > > + /* Intentionally use 64-bit here. EVEX256 version needs 1-byte > > + padding for efficient nop before loop alignment. */ > > + test %rcx, %rcx > > + jnz L(first_vec_x3) > > > > - /* Save pointer of second vector, in case if no match > > - found. */ > > - movq %rdi, %r9 > > - /* Align address to VEC_SIZE * 2 for loop. */ > > andq $-(VEC_SIZE * 2), %rdi > > + .p2align 4 > > +L(first_aligned_loop): > > + /* Preserve VEC(1), VEC(2), VEC(3), and VEC(4) until we can > > + gurantee they don't store a match. */ > > + VMOVA (VEC_SIZE * 4)(%rdi), %VMM(5) > > + VMOVA (VEC_SIZE * 5)(%rdi), %VMM(6) > > > > - .p2align 4,,11 > > -L(loop): > > - /* 2 vector loop, as it provide better performance as compared > > - to 4 vector loop. */ > > - VMOVA (VEC_SIZE * 2)(%rdi), %VMM(3) > > - VMOVA (VEC_SIZE * 3)(%rdi), %VMM(4) > > - VPCMPEQ %VMM(3), %VMM(0), %k1 > > - VPCMPEQ %VMM(4), %VMM(0), %k2 > > - VPMINU %VMM(3), %VMM(4), %VMM(5) > > - VPTESTN %VMM(5), %VMM(5), %k0 > > - KOR %k1, %k2, %k3 > > - subq $-(VEC_SIZE * 2), %rdi > > - /* If k0 and k3 zero, match and end of string not found. */ > > - KORTEST %k0, %k3 > > - jz L(loop) > > - > > - /* If k0 is non zero, end of string found. */ > > - KORTEST %k0, %k0 > > - jnz L(endloop) > > - > > - lea VEC_SIZE(%rdi), %r8 > > - /* A match found, it need to be stored in r8 before loop > > - continue. */ > > - /* Check second vector first. */ > > - KMOV %k2, %VRDX > > - test %VRDX, %VRDX > > - jnz L(loop_vec_x2_match) > > + VPCMP $4, %VMM(5), %VMATCH, %k2 > > + VPCMP $4, %VMM(6), %VMATCH, %k3{%k2} > > + > > + VPMIN %VMM(5), %VMM(6), %VMM(7) > > + > > + VPTEST %VMM(7), %VMM(7), %k1{%k3} > > + subq $(VEC_SIZE * -2), %rdi > > + kortestM %k1, %k1 > > + jc L(first_aligned_loop) > > > > + VPTESTN %VMM(7), %VMM(7), %k1 > > KMOV %k1, %VRDX > > - /* Match is in first vector, rdi offset need to be subtracted > > - by VEC_SIZE. */ > > - sub $VEC_SIZE, %r8 > > - > > - /* If second vector doesn't have match, first vector must > > - have match. */ > > -L(loop_vec_x2_match): > > - BSR %VRDX, %VRDX > > -# ifdef USE_AS_WCSRCHR > > - sal $2, %rdx > > -# endif > > - add %rdx, %r8 > > - jmp L(loop) > > + test %VRDX, %VRDX > > + jz L(second_aligned_loop_prep) > > > > -L(endloop): > > - /* Check if string end in first loop vector. */ > > - VPTESTN %VMM(3), %VMM(3), %k0 > > - KMOV %k0, %VRCX > > - test %VRCX, %VRCX > > - jnz L(loop_vector_x1_end) > > + kortestM %k3, %k3 > > + jnc L(return_first_aligned_loop) > > > > - /* Check if it has match in first loop vector. */ > > - KMOV %k1, %VRAX > > + .p2align 4,, 6 > > +L(first_vec_x1_or_x2_or_x3): > > + VPCMPEQ %VMM(4), %VMATCH, %k4 > > + KMOV %k4, %VRAX > > test %VRAX, %VRAX > > - jz L(loop_vector_x2_end) > > + jz L(first_vec_x1_or_x2) > > + bsr %VRAX, %VRAX > > + leaq (VEC_SIZE * 3)(%r8, %rax, CHAR_SIZE), %rax > > + ret > > > > - BSR %VRAX, %VRAX > > - leaq (%rdi, %rax, CHAR_SIZE), %r8 > > > > - /* String must end in second loop vector. */ > > -L(loop_vector_x2_end): > > - VPTESTN %VMM(4), %VMM(4), %k0 > > + .p2align 4,, 8 > > +L(return_first_aligned_loop): > > + VPTESTN %VMM(5), %VMM(5), %k0 > > KMOV %k0, %VRCX > > + blsmsk %VRCX, %VRCX > > + jnc L(return_first_new_match_first) > > + blsmsk %VRDX, %VRDX > > + VPCMPEQ %VMM(6), %VMATCH, %k0 > > + KMOV %k0, %VRAX > > + addq $VEC_SIZE, %rdi > > + and %VRDX, %VRAX > > + jnz L(return_first_new_match_ret) > > + subq $VEC_SIZE, %rdi > > +L(return_first_new_match_first): > > KMOV %k2, %VRAX > > - BLSMSK %VRCX, %VRCX > > - /* Check if it has match in second loop vector. */ > > +# ifdef USE_AS_WCSRCHR > > + xorl $((1 << CHAR_PER_VEC)- 1), %VRAX > > and %VRCX, %VRAX > > - jz L(check_last_match) > > +# else > > + andn %VRCX, %VRAX, %VRAX > > +# endif > > + jz L(first_vec_x1_or_x2_or_x3) > > +L(return_first_new_match_ret): > > + bsr %VRAX, %VRAX > > + leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > + ret > > > > - BSR %VRAX, %VRAX > > - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax > > + .p2align 4,, 10 > > +L(first_vec_x1_or_x2): > > + VPCMPEQ %VMM(3), %VMATCH, %k3 > > + KMOV %k3, %VRAX > > + test %VRAX, %VRAX > > + jz L(first_vec_x0_x1_test) > > + bsr %VRAX, %VRAX > > + leaq (VEC_SIZE * 2)(%r8, %rax, CHAR_SIZE), %rax > > ret > > > > - /* String end in first loop vector. */ > > -L(loop_vector_x1_end): > > - KMOV %k1, %VRAX > > - BLSMSK %VRCX, %VRCX > > - /* Check if it has match in second loop vector. */ > > - and %VRCX, %VRAX > > - jz L(check_last_match) > > > > - BSR %VRAX, %VRAX > > - leaq (%rdi, %rax, CHAR_SIZE), %rax > > - ret > > + .p2align 4 > > + /* We can throw away the work done for the first 4x checks here > > + as we have a later match. This is the 'fast' path persay. */ > > +L(second_aligned_loop_prep): > > +L(second_aligned_loop_set_furthest_match): > > + movq %rdi, %rsi > > + VMOVA %VMM(5), %VMM(7) > > + VMOVA %VMM(6), %VMM(8) > > + .p2align 4 > > +L(second_aligned_loop): > > + VMOVU (VEC_SIZE * 4)(%rdi), %VMM(5) > > + VMOVU (VEC_SIZE * 5)(%rdi), %VMM(6) > > + VPCMP $4, %VMM(5), %VMATCH, %k2 > > + VPCMP $4, %VMM(6), %VMATCH, %k3{%k2} > > + > > + VPMIN %VMM(5), %VMM(6), %VMM(4) > > + > > + VPTEST %VMM(4), %VMM(4), %k1{%k3} > > + subq $(VEC_SIZE * -2), %rdi > > + KMOV %k1, %VRCX > > + inc %RCX_M > > + jz L(second_aligned_loop) > > + VPTESTN %VMM(4), %VMM(4), %k1 > > + KMOV %k1, %VRDX > > + test %VRDX, %VRDX > > + jz L(second_aligned_loop_set_furthest_match) > > > > - /* No match in first and second loop vector. */ > > -L(check_last_match): > > - /* Check if any match recorded in r8. */ > > - test %r8, %r8 > > - jz L(vector_x2_ret) > > - movq %r8, %rax > > + kortestM %k3, %k3 > > + jnc L(return_new_match) > > + /* branch here because there is a significant advantage interms > > + of output dependency chance in using edx. */ > > + > > + > > +L(return_old_match): > > + VPCMPEQ %VMM(8), %VMATCH, %k0 > > + KMOV %k0, %VRCX > > + bsr %VRCX, %VRCX > > + jnz L(return_old_match_ret) > > + > > + VPCMPEQ %VMM(7), %VMATCH, %k0 > > + KMOV %k0, %VRCX > > + bsr %VRCX, %VRCX > > + subq $VEC_SIZE, %rsi > > +L(return_old_match_ret): > > + leaq (VEC_SIZE * 3)(%rsi, %rcx, CHAR_SIZE), %rax > > ret > > > > - /* No match recorded in r8. Check the second saved vector > > - in beginning. */ > > -L(vector_x2_ret): > > - VPCMPEQ %VMM(2), %VMM(0), %k2 > > - KMOV %k2, %VRAX > > - test %VRAX, %VRAX > > - jz L(vector_x1_ret) > > > > - /* Match found in the second saved vector. */ > > - BSR %VRAX, %VRAX > > - leaq (VEC_SIZE)(%r9, %rax, CHAR_SIZE), %rax > > +L(return_new_match): > > + VPTESTN %VMM(5), %VMM(5), %k0 > > + KMOV %k0, %VRCX > > + blsmsk %VRCX, %VRCX > > + jnc L(return_new_match_first) > > + dec %VRDX > > + VPCMPEQ %VMM(6), %VMATCH, %k0 > > + KMOV %k0, %VRAX > > + addq $VEC_SIZE, %rdi > > + and %VRDX, %VRAX > > + jnz L(return_new_match_ret) > > + subq $VEC_SIZE, %rdi > > +L(return_new_match_first): > > + KMOV %k2, %VRAX > > +# ifdef USE_AS_WCSRCHR > > + xorl $((1 << CHAR_PER_VEC)- 1), %VRAX > > + and %VRCX, %VRAX > > +# else > > + andn %VRCX, %VRAX, %VRAX > > +# endif > > + jz L(return_old_match) > > +L(return_new_match_ret): > > + bsr %VRAX, %VRAX > > + leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > ret > > > > -L(page_cross): > > - mov %rdi, %rax > > - movl %edi, %ecx > > + .p2align 4,, 4 > > +L(cross_page_boundary): > > + xorq %rdi, %rax > > + mov $-1, %VRDX > > + VMOVU (PAGE_SIZE - VEC_SIZE)(%rax), %VMM(6) > > + VPTESTN %VMM(6), %VMM(6), %k0 > > + KMOV %k0, %VRSI > > > > # ifdef USE_AS_WCSRCHR > > - /* Calculate number of compare result bits to be skipped for > > - wide string alignment adjustment. */ > > - andl $(VEC_SIZE - 1), %ecx > > - sarl $2, %ecx > > + movl %edi, %ecx > > + and $(VEC_SIZE - 1), %ecx > > + shrl $2, %ecx > > # endif > > - /* ecx contains number of w[char] to be skipped as a result > > - of address alignment. */ > > - andq $-VEC_SIZE, %rax > > - VMOVA (%rax), %VMM(1) > > - VPTESTN %VMM(1), %VMM(1), %k1 > > - KMOV %k1, %VRAX > > - SHR %cl, %VRAX > > - jz L(page_cross_continue) > > - VPCMPEQ %VMM(1), %VMM(0), %k0 > > - KMOV %k0, %VRDX > > - SHR %cl, %VRDX > > - BLSMSK %VRAX, %VRAX > > - and %VRDX, %VRAX > > - jz L(ret) > > - BSR %VRAX, %VRAX > > + shlx %SHIFT_REG, %VRDX, %VRDX > > + > > # ifdef USE_AS_WCSRCHR > > - leaq (%rdi, %rax, CHAR_SIZE), %rax > > + kmovw %edx, %k1 > > # else > > - add %rdi, %rax > > + KMOV %VRDX, %k1 > > # endif > > > > - ret > > -END (STRRCHR) > > + VPCOMPRESS %VMM(6), %VMM(1){%k1}{z} > > + /* We could technically just jmp back after the vpcompress but > > + it doesn't save any 16-byte blocks. */ > > + > > + shrx %SHIFT_REG, %VRSI, %VRSI > > + test %VRSI, %VRSI > > + jnz L(page_cross_return) > > + jmp L(page_cross_continue) > > + /* 1-byte from cache line. */ > > +END(STRRCHR) > > #endif > > diff --git a/sysdeps/x86_64/multiarch/strrchr-evex.S b/sysdeps/x86_64/multiarch/strrchr-evex.S > > index 85e3b0119f..b606e6f69c 100644 > > --- a/sysdeps/x86_64/multiarch/strrchr-evex.S > > +++ b/sysdeps/x86_64/multiarch/strrchr-evex.S > > @@ -1,394 +1,8 @@ > > -/* strrchr/wcsrchr optimized with 256-bit EVEX instructions. > > - Copyright (C) 2021-2023 Free Software Foundation, Inc. > > - This file is part of the GNU C Library. > > - > > - The GNU C Library is free software; you can redistribute it and/or > > - modify it under the terms of the GNU Lesser General Public > > - License as published by the Free Software Foundation; either > > - version 2.1 of the License, or (at your option) any later version. > > - > > - The GNU C Library is distributed in the hope that it will be useful, > > - but WITHOUT ANY WARRANTY; without even the implied warranty of > > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > - Lesser General Public License for more details. > > - > > - You should have received a copy of the GNU Lesser General Public > > - License along with the GNU C Library; if not, see > > - <https://www.gnu.org/licenses/>. */ > > - > > -#include <isa-level.h> > > - > > -#if ISA_SHOULD_BUILD (4) > > - > > -# include <sysdep.h> > > - > > # ifndef STRRCHR > > # define STRRCHR __strrchr_evex > > # endif > > > > -# include "x86-evex256-vecs.h" > > - > > -# ifdef USE_AS_WCSRCHR > > -# define SHIFT_REG rsi > > -# define kunpck_2x kunpckbw > > -# define kmov_2x kmovd > > -# define maskz_2x ecx > > -# define maskm_2x eax > > -# define CHAR_SIZE 4 > > -# define VPMIN vpminud > > -# define VPTESTN vptestnmd > > -# define VPTEST vptestmd > > -# define VPBROADCAST vpbroadcastd > > -# define VPCMPEQ vpcmpeqd > > -# define VPCMP vpcmpd > > - > > -# define USE_WIDE_CHAR > > -# else > > -# define SHIFT_REG rdi > > -# define kunpck_2x kunpckdq > > -# define kmov_2x kmovq > > -# define maskz_2x rcx > > -# define maskm_2x rax > > - > > -# define CHAR_SIZE 1 > > -# define VPMIN vpminub > > -# define VPTESTN vptestnmb > > -# define VPTEST vptestmb > > -# define VPBROADCAST vpbroadcastb > > -# define VPCMPEQ vpcmpeqb > > -# define VPCMP vpcmpb > > -# endif > > - > > -# include "reg-macros.h" > > - > > -# define VMATCH VMM(0) > > -# define CHAR_PER_VEC (VEC_SIZE / CHAR_SIZE) > > -# define PAGE_SIZE 4096 > > - > > - .section SECTION(.text), "ax", @progbits > > -ENTRY_P2ALIGN(STRRCHR, 6) > > - movl %edi, %eax > > - /* Broadcast CHAR to VMATCH. */ > > - VPBROADCAST %esi, %VMATCH > > - > > - andl $(PAGE_SIZE - 1), %eax > > - cmpl $(PAGE_SIZE - VEC_SIZE), %eax > > - jg L(cross_page_boundary) > > -L(page_cross_continue): > > - VMOVU (%rdi), %VMM(1) > > - /* k0 has a 1 for each zero CHAR in VEC(1). */ > > - VPTESTN %VMM(1), %VMM(1), %k0 > > - KMOV %k0, %VRSI > > - test %VRSI, %VRSI > > - jz L(aligned_more) > > - /* fallthrough: zero CHAR in first VEC. */ > > - /* K1 has a 1 for each search CHAR match in VEC(1). */ > > - VPCMPEQ %VMATCH, %VMM(1), %k1 > > - KMOV %k1, %VRAX > > - /* Build mask up until first zero CHAR (used to mask of > > - potential search CHAR matches past the end of the string). > > - */ > > - blsmsk %VRSI, %VRSI > > - and %VRSI, %VRAX > > - jz L(ret0) > > - /* Get last match (the `and` removed any out of bounds matches). > > - */ > > - bsr %VRAX, %VRAX > > -# ifdef USE_AS_WCSRCHR > > - leaq (%rdi, %rax, CHAR_SIZE), %rax > > -# else > > - addq %rdi, %rax > > -# endif > > -L(ret0): > > - ret > > - > > - /* Returns for first vec x1/x2/x3 have hard coded backward > > - search path for earlier matches. */ > > - .p2align 4,, 6 > > -L(first_vec_x1): > > - VPCMPEQ %VMATCH, %VMM(2), %k1 > > - KMOV %k1, %VRAX > > - blsmsk %VRCX, %VRCX > > - /* eax non-zero if search CHAR in range. */ > > - and %VRCX, %VRAX > > - jnz L(first_vec_x1_return) > > - > > - /* fallthrough: no match in VEC(2) then need to check for > > - earlier matches (in VEC(1)). */ > > - .p2align 4,, 4 > > -L(first_vec_x0_test): > > - VPCMPEQ %VMATCH, %VMM(1), %k1 > > - KMOV %k1, %VRAX > > - test %VRAX, %VRAX > > - jz L(ret1) > > - bsr %VRAX, %VRAX > > -# ifdef USE_AS_WCSRCHR > > - leaq (%rsi, %rax, CHAR_SIZE), %rax > > -# else > > - addq %rsi, %rax > > -# endif > > -L(ret1): > > - ret > > - > > - .p2align 4,, 10 > > -L(first_vec_x1_or_x2): > > - VPCMPEQ %VMM(3), %VMATCH, %k3 > > - VPCMPEQ %VMM(2), %VMATCH, %k2 > > - /* K2 and K3 have 1 for any search CHAR match. Test if any > > - matches between either of them. Otherwise check VEC(1). */ > > - KORTEST %k2, %k3 > > - jz L(first_vec_x0_test) > > - > > - /* Guaranteed that VEC(2) and VEC(3) are within range so merge > > - the two bitmasks then get last result. */ > > - kunpck_2x %k2, %k3, %k3 > > - kmov_2x %k3, %maskm_2x > > - bsr %maskm_2x, %maskm_2x > > - leaq (VEC_SIZE * 1)(%r8, %rax, CHAR_SIZE), %rax > > - ret > > - > > - .p2align 4,, 7 > > -L(first_vec_x3): > > - VPCMPEQ %VMATCH, %VMM(4), %k1 > > - KMOV %k1, %VRAX > > - blsmsk %VRCX, %VRCX > > - /* If no search CHAR match in range check VEC(1)/VEC(2)/VEC(3). > > - */ > > - and %VRCX, %VRAX > > - jz L(first_vec_x1_or_x2) > > - bsr %VRAX, %VRAX > > - leaq (VEC_SIZE * 3)(%rdi, %rax, CHAR_SIZE), %rax > > - ret > > - > > - > > - .p2align 4,, 6 > > -L(first_vec_x0_x1_test): > > - VPCMPEQ %VMATCH, %VMM(2), %k1 > > - KMOV %k1, %VRAX > > - /* Check VEC(2) for last match first. If no match try VEC(1). > > - */ > > - test %VRAX, %VRAX > > - jz L(first_vec_x0_test) > > - .p2align 4,, 4 > > -L(first_vec_x1_return): > > - bsr %VRAX, %VRAX > > - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax > > - ret > > - > > - > > - .p2align 4,, 10 > > -L(first_vec_x2): > > - VPCMPEQ %VMATCH, %VMM(3), %k1 > > - KMOV %k1, %VRAX > > - blsmsk %VRCX, %VRCX > > - /* Check VEC(3) for last match first. If no match try > > - VEC(2)/VEC(1). */ > > - and %VRCX, %VRAX > > - jz L(first_vec_x0_x1_test) > > - bsr %VRAX, %VRAX > > - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > - ret > > - > > - > > - .p2align 4,, 12 > > -L(aligned_more): > > - /* Need to keep original pointer in case VEC(1) has last match. > > - */ > > - movq %rdi, %rsi > > - andq $-VEC_SIZE, %rdi > > - > > - VMOVU VEC_SIZE(%rdi), %VMM(2) > > - VPTESTN %VMM(2), %VMM(2), %k0 > > - KMOV %k0, %VRCX > > - > > - test %VRCX, %VRCX > > - jnz L(first_vec_x1) > > - > > - VMOVU (VEC_SIZE * 2)(%rdi), %VMM(3) > > - VPTESTN %VMM(3), %VMM(3), %k0 > > - KMOV %k0, %VRCX > > - > > - test %VRCX, %VRCX > > - jnz L(first_vec_x2) > > - > > - VMOVU (VEC_SIZE * 3)(%rdi), %VMM(4) > > - VPTESTN %VMM(4), %VMM(4), %k0 > > - KMOV %k0, %VRCX > > - movq %rdi, %r8 > > - test %VRCX, %VRCX > > - jnz L(first_vec_x3) > > - > > - andq $-(VEC_SIZE * 2), %rdi > > - .p2align 4,, 10 > > -L(first_aligned_loop): > > - /* Preserve VEC(1), VEC(2), VEC(3), and VEC(4) until we can > > - guarantee they don't store a match. */ > > - VMOVA (VEC_SIZE * 4)(%rdi), %VMM(5) > > - VMOVA (VEC_SIZE * 5)(%rdi), %VMM(6) > > - > > - VPCMPEQ %VMM(5), %VMATCH, %k2 > > - vpxord %VMM(6), %VMATCH, %VMM(7) > > - > > - VPMIN %VMM(5), %VMM(6), %VMM(8) > > - VPMIN %VMM(8), %VMM(7), %VMM(7) > > - > > - VPTESTN %VMM(7), %VMM(7), %k1 > > - subq $(VEC_SIZE * -2), %rdi > > - KORTEST %k1, %k2 > > - jz L(first_aligned_loop) > > - > > - VPCMPEQ %VMM(6), %VMATCH, %k3 > > - VPTESTN %VMM(8), %VMM(8), %k1 > > - > > - /* If k1 is zero, then we found a CHAR match but no null-term. > > - We can now safely throw out VEC1-4. */ > > - KTEST %k1, %k1 > > - jz L(second_aligned_loop_prep) > > - > > - KORTEST %k2, %k3 > > - jnz L(return_first_aligned_loop) > > - > > - > > - .p2align 4,, 6 > > -L(first_vec_x1_or_x2_or_x3): > > - VPCMPEQ %VMM(4), %VMATCH, %k4 > > - KMOV %k4, %VRAX > > - bsr %VRAX, %VRAX > > - jz L(first_vec_x1_or_x2) > > - leaq (VEC_SIZE * 3)(%r8, %rax, CHAR_SIZE), %rax > > - ret > > - > > - > > - .p2align 4,, 8 > > -L(return_first_aligned_loop): > > - VPTESTN %VMM(5), %VMM(5), %k0 > > - > > - /* Combined results from VEC5/6. */ > > - kunpck_2x %k0, %k1, %k0 > > - kmov_2x %k0, %maskz_2x > > - > > - blsmsk %maskz_2x, %maskz_2x > > - kunpck_2x %k2, %k3, %k3 > > - kmov_2x %k3, %maskm_2x > > - and %maskz_2x, %maskm_2x > > - jz L(first_vec_x1_or_x2_or_x3) > > - > > - bsr %maskm_2x, %maskm_2x > > - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > - ret > > - > > - .p2align 4 > > - /* We can throw away the work done for the first 4x checks here > > - as we have a later match. This is the 'fast' path persay. > > - */ > > -L(second_aligned_loop_prep): > > -L(second_aligned_loop_set_furthest_match): > > - movq %rdi, %rsi > > - /* Ideally we would safe k2/k3 but `kmov/kunpck` take uops on > > - port0 and have noticeable overhead in the loop. */ > > - VMOVA %VMM(5), %VMM(7) > > - VMOVA %VMM(6), %VMM(8) > > - .p2align 4 > > -L(second_aligned_loop): > > - VMOVU (VEC_SIZE * 4)(%rdi), %VMM(5) > > - VMOVU (VEC_SIZE * 5)(%rdi), %VMM(6) > > - VPCMPEQ %VMM(5), %VMATCH, %k2 > > - vpxord %VMM(6), %VMATCH, %VMM(3) > > - > > - VPMIN %VMM(5), %VMM(6), %VMM(4) > > - VPMIN %VMM(3), %VMM(4), %VMM(3) > > - > > - VPTESTN %VMM(3), %VMM(3), %k1 > > - subq $(VEC_SIZE * -2), %rdi > > - KORTEST %k1, %k2 > > - jz L(second_aligned_loop) > > - VPCMPEQ %VMM(6), %VMATCH, %k3 > > - VPTESTN %VMM(4), %VMM(4), %k1 > > - KTEST %k1, %k1 > > - jz L(second_aligned_loop_set_furthest_match) > > - > > - /* branch here because we know we have a match in VEC7/8 but > > - might not in VEC5/6 so the latter is expected to be less > > - likely. */ > > - KORTEST %k2, %k3 > > - jnz L(return_new_match) > > - > > -L(return_old_match): > > - VPCMPEQ %VMM(8), %VMATCH, %k0 > > - KMOV %k0, %VRCX > > - bsr %VRCX, %VRCX > > - jnz L(return_old_match_ret) > > - > > - VPCMPEQ %VMM(7), %VMATCH, %k0 > > - KMOV %k0, %VRCX > > - bsr %VRCX, %VRCX > > - subq $VEC_SIZE, %rsi > > -L(return_old_match_ret): > > - leaq (VEC_SIZE * 3)(%rsi, %rcx, CHAR_SIZE), %rax > > - ret > > - > > - .p2align 4,, 10 > > -L(return_new_match): > > - VPTESTN %VMM(5), %VMM(5), %k0 > > - > > - /* Combined results from VEC5/6. */ > > - kunpck_2x %k0, %k1, %k0 > > - kmov_2x %k0, %maskz_2x > > - > > - blsmsk %maskz_2x, %maskz_2x > > - kunpck_2x %k2, %k3, %k3 > > - kmov_2x %k3, %maskm_2x > > - > > - /* Match at end was out-of-bounds so use last known match. */ > > - and %maskz_2x, %maskm_2x > > - jz L(return_old_match) > > - > > - bsr %maskm_2x, %maskm_2x > > - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > - ret > > - > > -L(cross_page_boundary): > > - /* eax contains all the page offset bits of src (rdi). `xor rdi, > > - rax` sets pointer will all page offset bits cleared so > > - offset of (PAGE_SIZE - VEC_SIZE) will get last aligned VEC > > - before page cross (guaranteed to be safe to read). Doing this > > - as opposed to `movq %rdi, %rax; andq $-VEC_SIZE, %rax` saves > > - a bit of code size. */ > > - xorq %rdi, %rax > > - VMOVU (PAGE_SIZE - VEC_SIZE)(%rax), %VMM(1) > > - VPTESTN %VMM(1), %VMM(1), %k0 > > - KMOV %k0, %VRCX > > - > > - /* Shift out zero CHAR matches that are before the beginning of > > - src (rdi). */ > > -# ifdef USE_AS_WCSRCHR > > - movl %edi, %esi > > - andl $(VEC_SIZE - 1), %esi > > - shrl $2, %esi > > -# endif > > - shrx %VGPR(SHIFT_REG), %VRCX, %VRCX > > - > > - test %VRCX, %VRCX > > - jz L(page_cross_continue) > > +#include "x86-evex512-vecs.h" > > +#include "reg-macros.h" > > > > - /* Found zero CHAR so need to test for search CHAR. */ > > - VPCMP $0, %VMATCH, %VMM(1), %k1 > > - KMOV %k1, %VRAX > > - /* Shift out search CHAR matches that are before the beginning of > > - src (rdi). */ > > - shrx %VGPR(SHIFT_REG), %VRAX, %VRAX > > - > > - /* Check if any search CHAR match in range. */ > > - blsmsk %VRCX, %VRCX > > - and %VRCX, %VRAX > > - jz L(ret3) > > - bsr %VRAX, %VRAX > > -# ifdef USE_AS_WCSRCHR > > - leaq (%rdi, %rax, CHAR_SIZE), %rax > > -# else > > - addq %rdi, %rax > > -# endif > > -L(ret3): > > - ret > > -END(STRRCHR) > > -#endif > > +#include "strrchr-evex-base.S" > > diff --git a/sysdeps/x86_64/multiarch/wcsrchr-evex.S b/sysdeps/x86_64/multiarch/wcsrchr-evex.S > > index e5c5fe3bf2..a584cd3f43 100644 > > --- a/sysdeps/x86_64/multiarch/wcsrchr-evex.S > > +++ b/sysdeps/x86_64/multiarch/wcsrchr-evex.S > > @@ -4,4 +4,5 @@ > > > > #define STRRCHR WCSRCHR > > #define USE_AS_WCSRCHR 1 > > +#define USE_WIDE_CHAR 1 > > #include "strrchr-evex.S" > > -- > > 2.34.1 > >
On Thu, Sep 21, 2023 at 10:17 AM H.J. Lu <hjl.tools@gmail.com> wrote: > > On Thu, Sep 21, 2023 at 7:39 AM Noah Goldstein <goldstein.w.n@gmail.com> wrote: > > > > On Thu, Sep 21, 2023 at 9:38 AM Noah Goldstein <goldstein.w.n@gmail.com> wrote: > > > > > > This commit refactors `strrchr-evex` and `strrchr-evex512` to use a > > > common implementation: `strrchr-evex-base.S`. > > > > > > The motivation is `strrchr-evex` needed to be refactored to not use > > > 64-bit masked registers in preperation for AVX10. > > > > > > Once vec-width masked register combining was removed, the EVEX and > > > EVEX512 implementations can easily be implemented in the same file > > > without any major overhead. > > > > > > The net result is performance improvements (measured on TGL) for both > > > `strrchr-evex` and `strrchr-evex512`. Although, note there are some > > > regressions in the test suite and it may be many of the cases that > > > make the total-geomean of improvement/regression across bench-strrchr > > > are cold. The point of the performance measurement is to show there > > > are no major regressions, but the primary motivation is preperation > > > for AVX10. > > > > > > Benchmarks where taken on TGL: > > > https://www.intel.com/content/www/us/en/products/sku/213799/intel-core-i711850h-processor-24m-cache-up-to-4-80-ghz/specifications.html > > > > > > EVEX geometric_mean(N=5) of all benchmarks New / Original : 0.74 > > > EVEX512 geometric_mean(N=5) of all benchmarks New / Original: 0.87 > > Full summary of attached here. > > The results look good to me. I believe that this is the only 256-bit > EVEX function > with 64-bit mask instructions. Yeah, but the reason for have seperate ymm/zmm implementations was the ymm version would combine mask registers. Once we no longer want to do that, we can just merge the two. > > > > > > > Full check passes on x86. > > > --- > > > sysdeps/x86_64/multiarch/strrchr-evex-base.S | 466 ++++++++++++------- > > > sysdeps/x86_64/multiarch/strrchr-evex.S | 392 +--------------- > > > sysdeps/x86_64/multiarch/wcsrchr-evex.S | 1 + > > > 3 files changed, 294 insertions(+), 565 deletions(-) > > > > > > diff --git a/sysdeps/x86_64/multiarch/strrchr-evex-base.S b/sysdeps/x86_64/multiarch/strrchr-evex-base.S > > > index 58b2853ab6..2c98f07fca 100644 > > > --- a/sysdeps/x86_64/multiarch/strrchr-evex-base.S > > > +++ b/sysdeps/x86_64/multiarch/strrchr-evex-base.S > > > @@ -25,240 +25,354 @@ > > > # include <sysdep.h> > > > > > > # ifdef USE_AS_WCSRCHR > > > +# if VEC_SIZE == 64 > > > +# define RCX_M cx > > > +# define kortestM kortestw > > > +# else > > > +# define RCX_M cl > > > +# define kortestM kortestb > > > +# endif > > > + > > > +# define SHIFT_REG VRCX > > > +# define VPCOMPRESS vpcompressd > > > # define CHAR_SIZE 4 > > > -# define VPBROADCAST vpbroadcastd > > > -# define VPCMPEQ vpcmpeqd > > > -# define VPMINU vpminud > > > +# define VPMIN vpminud > > > # define VPTESTN vptestnmd > > > +# define VPTEST vptestmd > > > +# define VPBROADCAST vpbroadcastd > > > +# define VPCMPEQ vpcmpeqd > > > +# define VPCMP vpcmpd > > > # else > > > +# define SHIFT_REG VRDI > > > +# define VPCOMPRESS vpcompressb > > > # define CHAR_SIZE 1 > > > -# define VPBROADCAST vpbroadcastb > > > -# define VPCMPEQ vpcmpeqb > > > -# define VPMINU vpminub > > > +# define VPMIN vpminub > > > # define VPTESTN vptestnmb > > > +# define VPTEST vptestmb > > > +# define VPBROADCAST vpbroadcastb > > > +# define VPCMPEQ vpcmpeqb > > > +# define VPCMP vpcmpb > > > + > > > +# define RCX_M VRCX > > > +# define kortestM KORTEST > > > # endif > > > > > > -# define PAGE_SIZE 4096 > > > +# define VMATCH VMM(0) > > > # define CHAR_PER_VEC (VEC_SIZE / CHAR_SIZE) > > > +# define PAGE_SIZE 4096 > > > > > > .section SECTION(.text), "ax", @progbits > > > -/* Aligning entry point to 64 byte, provides better performance for > > > - one vector length string. */ > > > -ENTRY_P2ALIGN (STRRCHR, 6) > > > - > > > - /* Broadcast CHAR to VMM(0). */ > > > - VPBROADCAST %esi, %VMM(0) > > > + /* Aligning entry point to 64 byte, provides better performance for > > > + one vector length string. */ > > > +ENTRY_P2ALIGN(STRRCHR, 6) > > > movl %edi, %eax > > > - sall $20, %eax > > > - cmpl $((PAGE_SIZE - VEC_SIZE) << 20), %eax > > > - ja L(page_cross) > > > + /* Broadcast CHAR to VMATCH. */ > > > + VPBROADCAST %esi, %VMATCH > > > > > > -L(page_cross_continue): > > > - /* Compare [w]char for null, mask bit will be set for match. */ > > > - VMOVU (%rdi), %VMM(1) > > > + andl $(PAGE_SIZE - 1), %eax > > > + cmpl $(PAGE_SIZE - VEC_SIZE), %eax > > > + jg L(cross_page_boundary) > > > > > > - VPTESTN %VMM(1), %VMM(1), %k1 > > > - KMOV %k1, %VRCX > > > - test %VRCX, %VRCX > > > - jz L(align_more) > > > - > > > - VPCMPEQ %VMM(1), %VMM(0), %k0 > > > - KMOV %k0, %VRAX > > > - BLSMSK %VRCX, %VRCX > > > - and %VRCX, %VRAX > > > - jz L(ret) > > > - > > > - BSR %VRAX, %VRAX > > > + VMOVU (%rdi), %VMM(1) > > > + /* k0 has a 1 for each zero CHAR in YMM1. */ > > > + VPTESTN %VMM(1), %VMM(1), %k0 > > > + KMOV %k0, %VGPR(rsi) > > > + test %VGPR(rsi), %VGPR(rsi) > > > + jz L(aligned_more) > > > + /* fallthrough: zero CHAR in first VEC. */ > > > +L(page_cross_return): > > > + /* K1 has a 1 for each search CHAR match in VEC(1). */ > > > + VPCMPEQ %VMATCH, %VMM(1), %k1 > > > + KMOV %k1, %VGPR(rax) > > > + /* Build mask up until first zero CHAR (used to mask of > > > + potential search CHAR matches past the end of the string). */ > > > + blsmsk %VGPR(rsi), %VGPR(rsi) > > > + and %VGPR(rsi), %VGPR(rax) > > > + jz L(ret0) > > > + /* Get last match (the `and` removed any out of bounds matches). */ > > > + bsr %VGPR(rax), %VGPR(rax) > > > # ifdef USE_AS_WCSRCHR > > > leaq (%rdi, %rax, CHAR_SIZE), %rax > > > # else > > > - add %rdi, %rax > > > + addq %rdi, %rax > > > # endif > > > -L(ret): > > > +L(ret0): > > > ret > > > > > > -L(vector_x2_end): > > > - VPCMPEQ %VMM(2), %VMM(0), %k2 > > > - KMOV %k2, %VRAX > > > - BLSMSK %VRCX, %VRCX > > > - and %VRCX, %VRAX > > > - jz L(vector_x1_ret) > > > - > > > - BSR %VRAX, %VRAX > > > - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax > > > - ret > > > - > > > - /* Check the first vector at very last to look for match. */ > > > -L(vector_x1_ret): > > > - VPCMPEQ %VMM(1), %VMM(0), %k2 > > > - KMOV %k2, %VRAX > > > - test %VRAX, %VRAX > > > - jz L(ret) > > > - > > > - BSR %VRAX, %VRAX > > > + /* Returns for first vec x1/x2/x3 have hard coded backward > > > + search path for earlier matches. */ > > > + .p2align 4,, 6 > > > +L(first_vec_x1): > > > + VPCMPEQ %VMATCH, %VMM(2), %k1 > > > + KMOV %k1, %VGPR(rax) > > > + blsmsk %VGPR(rcx), %VGPR(rcx) > > > + /* eax non-zero if search CHAR in range. */ > > > + and %VGPR(rcx), %VGPR(rax) > > > + jnz L(first_vec_x1_return) > > > + > > > + /* fallthrough: no match in YMM2 then need to check for earlier > > > + matches (in YMM1). */ > > > + .p2align 4,, 4 > > > +L(first_vec_x0_test): > > > + VPCMPEQ %VMATCH, %VMM(1), %k1 > > > + KMOV %k1, %VGPR(rax) > > > + test %VGPR(rax), %VGPR(rax) > > > + jz L(ret1) > > > + bsr %VGPR(rax), %VGPR(rax) > > > # ifdef USE_AS_WCSRCHR > > > leaq (%rsi, %rax, CHAR_SIZE), %rax > > > # else > > > - add %rsi, %rax > > > + > > > + addq %rsi, %rax > > > # endif > > > +L(ret1): > > > + ret > > > + > > > + .p2align 4,, 10 > > > +L(first_vec_x3): > > > + VPCMPEQ %VMATCH, %VMM(4), %k1 > > > + KMOV %k1, %VGPR(rax) > > > + blsmsk %VGPR(rcx), %VGPR(rcx) > > > + /* If no search CHAR match in range check YMM1/YMM2/YMM3. */ > > > + and %VGPR(rcx), %VGPR(rax) > > > + jz L(first_vec_x1_or_x2) > > > + bsr %VGPR(rax), %VGPR(rax) > > > + leaq (VEC_SIZE * 3)(%rdi, %rax, CHAR_SIZE), %rax > > > + ret > > > + .p2align 4,, 4 > > > + > > > +L(first_vec_x2): > > > + VPCMPEQ %VMATCH, %VMM(3), %k1 > > > + KMOV %k1, %VGPR(rax) > > > + blsmsk %VGPR(rcx), %VGPR(rcx) > > > + /* Check YMM3 for last match first. If no match try YMM2/YMM1. */ > > > + and %VGPR(rcx), %VGPR(rax) > > > + jz L(first_vec_x0_x1_test) > > > + bsr %VGPR(rax), %VGPR(rax) > > > + leaq (VEC_SIZE * 2)(%r8, %rax, CHAR_SIZE), %rax > > > ret > > > > > > -L(align_more): > > > - /* Zero r8 to store match result. */ > > > - xorl %r8d, %r8d > > > - /* Save pointer of first vector, in case if no match found. */ > > > + .p2align 4,, 6 > > > +L(first_vec_x0_x1_test): > > > + VPCMPEQ %VMATCH, %VMM(2), %k1 > > > + KMOV %k1, %VGPR(rax) > > > + /* Check YMM2 for last match first. If no match try YMM1. */ > > > + test %VGPR(rax), %VGPR(rax) > > > + jz L(first_vec_x0_test) > > > + .p2align 4,, 4 > > > +L(first_vec_x1_return): > > > + bsr %VGPR(rax), %VGPR(rax) > > > + leaq (VEC_SIZE)(%r8, %rax, CHAR_SIZE), %rax > > > + ret > > > + > > > + .p2align 4,, 12 > > > +L(aligned_more): > > > +L(page_cross_continue): > > > + /* Need to keep original pointer incase VEC(1) has last match. */ > > > movq %rdi, %rsi > > > - /* Align pointer to vector size. */ > > > andq $-VEC_SIZE, %rdi > > > - /* Loop unroll for 2 vector loop. */ > > > - VMOVA (VEC_SIZE)(%rdi), %VMM(2) > > > + > > > + VMOVU VEC_SIZE(%rdi), %VMM(2) > > > VPTESTN %VMM(2), %VMM(2), %k0 > > > KMOV %k0, %VRCX > > > + movq %rdi, %r8 > > > test %VRCX, %VRCX > > > - jnz L(vector_x2_end) > > > + jnz L(first_vec_x1) > > > + > > > + VMOVU (VEC_SIZE * 2)(%rdi), %VMM(3) > > > + VPTESTN %VMM(3), %VMM(3), %k0 > > > + KMOV %k0, %VRCX > > > + > > > + test %VRCX, %VRCX > > > + jnz L(first_vec_x2) > > > + > > > + VMOVU (VEC_SIZE * 3)(%rdi), %VMM(4) > > > + VPTESTN %VMM(4), %VMM(4), %k0 > > > + KMOV %k0, %VRCX > > > + > > > + /* Intentionally use 64-bit here. EVEX256 version needs 1-byte > > > + padding for efficient nop before loop alignment. */ > > > + test %rcx, %rcx > > > + jnz L(first_vec_x3) > > > > > > - /* Save pointer of second vector, in case if no match > > > - found. */ > > > - movq %rdi, %r9 > > > - /* Align address to VEC_SIZE * 2 for loop. */ > > > andq $-(VEC_SIZE * 2), %rdi > > > + .p2align 4 > > > +L(first_aligned_loop): > > > + /* Preserve VEC(1), VEC(2), VEC(3), and VEC(4) until we can > > > + gurantee they don't store a match. */ > > > + VMOVA (VEC_SIZE * 4)(%rdi), %VMM(5) > > > + VMOVA (VEC_SIZE * 5)(%rdi), %VMM(6) > > > > > > - .p2align 4,,11 > > > -L(loop): > > > - /* 2 vector loop, as it provide better performance as compared > > > - to 4 vector loop. */ > > > - VMOVA (VEC_SIZE * 2)(%rdi), %VMM(3) > > > - VMOVA (VEC_SIZE * 3)(%rdi), %VMM(4) > > > - VPCMPEQ %VMM(3), %VMM(0), %k1 > > > - VPCMPEQ %VMM(4), %VMM(0), %k2 > > > - VPMINU %VMM(3), %VMM(4), %VMM(5) > > > - VPTESTN %VMM(5), %VMM(5), %k0 > > > - KOR %k1, %k2, %k3 > > > - subq $-(VEC_SIZE * 2), %rdi > > > - /* If k0 and k3 zero, match and end of string not found. */ > > > - KORTEST %k0, %k3 > > > - jz L(loop) > > > - > > > - /* If k0 is non zero, end of string found. */ > > > - KORTEST %k0, %k0 > > > - jnz L(endloop) > > > - > > > - lea VEC_SIZE(%rdi), %r8 > > > - /* A match found, it need to be stored in r8 before loop > > > - continue. */ > > > - /* Check second vector first. */ > > > - KMOV %k2, %VRDX > > > - test %VRDX, %VRDX > > > - jnz L(loop_vec_x2_match) > > > + VPCMP $4, %VMM(5), %VMATCH, %k2 > > > + VPCMP $4, %VMM(6), %VMATCH, %k3{%k2} > > > + > > > + VPMIN %VMM(5), %VMM(6), %VMM(7) > > > + > > > + VPTEST %VMM(7), %VMM(7), %k1{%k3} > > > + subq $(VEC_SIZE * -2), %rdi > > > + kortestM %k1, %k1 > > > + jc L(first_aligned_loop) > > > > > > + VPTESTN %VMM(7), %VMM(7), %k1 > > > KMOV %k1, %VRDX > > > - /* Match is in first vector, rdi offset need to be subtracted > > > - by VEC_SIZE. */ > > > - sub $VEC_SIZE, %r8 > > > - > > > - /* If second vector doesn't have match, first vector must > > > - have match. */ > > > -L(loop_vec_x2_match): > > > - BSR %VRDX, %VRDX > > > -# ifdef USE_AS_WCSRCHR > > > - sal $2, %rdx > > > -# endif > > > - add %rdx, %r8 > > > - jmp L(loop) > > > + test %VRDX, %VRDX > > > + jz L(second_aligned_loop_prep) > > > > > > -L(endloop): > > > - /* Check if string end in first loop vector. */ > > > - VPTESTN %VMM(3), %VMM(3), %k0 > > > - KMOV %k0, %VRCX > > > - test %VRCX, %VRCX > > > - jnz L(loop_vector_x1_end) > > > + kortestM %k3, %k3 > > > + jnc L(return_first_aligned_loop) > > > > > > - /* Check if it has match in first loop vector. */ > > > - KMOV %k1, %VRAX > > > + .p2align 4,, 6 > > > +L(first_vec_x1_or_x2_or_x3): > > > + VPCMPEQ %VMM(4), %VMATCH, %k4 > > > + KMOV %k4, %VRAX > > > test %VRAX, %VRAX > > > - jz L(loop_vector_x2_end) > > > + jz L(first_vec_x1_or_x2) > > > + bsr %VRAX, %VRAX > > > + leaq (VEC_SIZE * 3)(%r8, %rax, CHAR_SIZE), %rax > > > + ret > > > > > > - BSR %VRAX, %VRAX > > > - leaq (%rdi, %rax, CHAR_SIZE), %r8 > > > > > > - /* String must end in second loop vector. */ > > > -L(loop_vector_x2_end): > > > - VPTESTN %VMM(4), %VMM(4), %k0 > > > + .p2align 4,, 8 > > > +L(return_first_aligned_loop): > > > + VPTESTN %VMM(5), %VMM(5), %k0 > > > KMOV %k0, %VRCX > > > + blsmsk %VRCX, %VRCX > > > + jnc L(return_first_new_match_first) > > > + blsmsk %VRDX, %VRDX > > > + VPCMPEQ %VMM(6), %VMATCH, %k0 > > > + KMOV %k0, %VRAX > > > + addq $VEC_SIZE, %rdi > > > + and %VRDX, %VRAX > > > + jnz L(return_first_new_match_ret) > > > + subq $VEC_SIZE, %rdi > > > +L(return_first_new_match_first): > > > KMOV %k2, %VRAX > > > - BLSMSK %VRCX, %VRCX > > > - /* Check if it has match in second loop vector. */ > > > +# ifdef USE_AS_WCSRCHR > > > + xorl $((1 << CHAR_PER_VEC)- 1), %VRAX > > > and %VRCX, %VRAX > > > - jz L(check_last_match) > > > +# else > > > + andn %VRCX, %VRAX, %VRAX > > > +# endif > > > + jz L(first_vec_x1_or_x2_or_x3) > > > +L(return_first_new_match_ret): > > > + bsr %VRAX, %VRAX > > > + leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > > + ret > > > > > > - BSR %VRAX, %VRAX > > > - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax > > > + .p2align 4,, 10 > > > +L(first_vec_x1_or_x2): > > > + VPCMPEQ %VMM(3), %VMATCH, %k3 > > > + KMOV %k3, %VRAX > > > + test %VRAX, %VRAX > > > + jz L(first_vec_x0_x1_test) > > > + bsr %VRAX, %VRAX > > > + leaq (VEC_SIZE * 2)(%r8, %rax, CHAR_SIZE), %rax > > > ret > > > > > > - /* String end in first loop vector. */ > > > -L(loop_vector_x1_end): > > > - KMOV %k1, %VRAX > > > - BLSMSK %VRCX, %VRCX > > > - /* Check if it has match in second loop vector. */ > > > - and %VRCX, %VRAX > > > - jz L(check_last_match) > > > > > > - BSR %VRAX, %VRAX > > > - leaq (%rdi, %rax, CHAR_SIZE), %rax > > > - ret > > > + .p2align 4 > > > + /* We can throw away the work done for the first 4x checks here > > > + as we have a later match. This is the 'fast' path persay. */ > > > +L(second_aligned_loop_prep): > > > +L(second_aligned_loop_set_furthest_match): > > > + movq %rdi, %rsi > > > + VMOVA %VMM(5), %VMM(7) > > > + VMOVA %VMM(6), %VMM(8) > > > + .p2align 4 > > > +L(second_aligned_loop): > > > + VMOVU (VEC_SIZE * 4)(%rdi), %VMM(5) > > > + VMOVU (VEC_SIZE * 5)(%rdi), %VMM(6) > > > + VPCMP $4, %VMM(5), %VMATCH, %k2 > > > + VPCMP $4, %VMM(6), %VMATCH, %k3{%k2} > > > + > > > + VPMIN %VMM(5), %VMM(6), %VMM(4) > > > + > > > + VPTEST %VMM(4), %VMM(4), %k1{%k3} > > > + subq $(VEC_SIZE * -2), %rdi > > > + KMOV %k1, %VRCX > > > + inc %RCX_M > > > + jz L(second_aligned_loop) > > > + VPTESTN %VMM(4), %VMM(4), %k1 > > > + KMOV %k1, %VRDX > > > + test %VRDX, %VRDX > > > + jz L(second_aligned_loop_set_furthest_match) > > > > > > - /* No match in first and second loop vector. */ > > > -L(check_last_match): > > > - /* Check if any match recorded in r8. */ > > > - test %r8, %r8 > > > - jz L(vector_x2_ret) > > > - movq %r8, %rax > > > + kortestM %k3, %k3 > > > + jnc L(return_new_match) > > > + /* branch here because there is a significant advantage interms > > > + of output dependency chance in using edx. */ > > > + > > > + > > > +L(return_old_match): > > > + VPCMPEQ %VMM(8), %VMATCH, %k0 > > > + KMOV %k0, %VRCX > > > + bsr %VRCX, %VRCX > > > + jnz L(return_old_match_ret) > > > + > > > + VPCMPEQ %VMM(7), %VMATCH, %k0 > > > + KMOV %k0, %VRCX > > > + bsr %VRCX, %VRCX > > > + subq $VEC_SIZE, %rsi > > > +L(return_old_match_ret): > > > + leaq (VEC_SIZE * 3)(%rsi, %rcx, CHAR_SIZE), %rax > > > ret > > > > > > - /* No match recorded in r8. Check the second saved vector > > > - in beginning. */ > > > -L(vector_x2_ret): > > > - VPCMPEQ %VMM(2), %VMM(0), %k2 > > > - KMOV %k2, %VRAX > > > - test %VRAX, %VRAX > > > - jz L(vector_x1_ret) > > > > > > - /* Match found in the second saved vector. */ > > > - BSR %VRAX, %VRAX > > > - leaq (VEC_SIZE)(%r9, %rax, CHAR_SIZE), %rax > > > +L(return_new_match): > > > + VPTESTN %VMM(5), %VMM(5), %k0 > > > + KMOV %k0, %VRCX > > > + blsmsk %VRCX, %VRCX > > > + jnc L(return_new_match_first) > > > + dec %VRDX > > > + VPCMPEQ %VMM(6), %VMATCH, %k0 > > > + KMOV %k0, %VRAX > > > + addq $VEC_SIZE, %rdi > > > + and %VRDX, %VRAX > > > + jnz L(return_new_match_ret) > > > + subq $VEC_SIZE, %rdi > > > +L(return_new_match_first): > > > + KMOV %k2, %VRAX > > > +# ifdef USE_AS_WCSRCHR > > > + xorl $((1 << CHAR_PER_VEC)- 1), %VRAX > > > + and %VRCX, %VRAX > > > +# else > > > + andn %VRCX, %VRAX, %VRAX > > > +# endif > > > + jz L(return_old_match) > > > +L(return_new_match_ret): > > > + bsr %VRAX, %VRAX > > > + leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > > ret > > > > > > -L(page_cross): > > > - mov %rdi, %rax > > > - movl %edi, %ecx > > > + .p2align 4,, 4 > > > +L(cross_page_boundary): > > > + xorq %rdi, %rax > > > + mov $-1, %VRDX > > > + VMOVU (PAGE_SIZE - VEC_SIZE)(%rax), %VMM(6) > > > + VPTESTN %VMM(6), %VMM(6), %k0 > > > + KMOV %k0, %VRSI > > > > > > # ifdef USE_AS_WCSRCHR > > > - /* Calculate number of compare result bits to be skipped for > > > - wide string alignment adjustment. */ > > > - andl $(VEC_SIZE - 1), %ecx > > > - sarl $2, %ecx > > > + movl %edi, %ecx > > > + and $(VEC_SIZE - 1), %ecx > > > + shrl $2, %ecx > > > # endif > > > - /* ecx contains number of w[char] to be skipped as a result > > > - of address alignment. */ > > > - andq $-VEC_SIZE, %rax > > > - VMOVA (%rax), %VMM(1) > > > - VPTESTN %VMM(1), %VMM(1), %k1 > > > - KMOV %k1, %VRAX > > > - SHR %cl, %VRAX > > > - jz L(page_cross_continue) > > > - VPCMPEQ %VMM(1), %VMM(0), %k0 > > > - KMOV %k0, %VRDX > > > - SHR %cl, %VRDX > > > - BLSMSK %VRAX, %VRAX > > > - and %VRDX, %VRAX > > > - jz L(ret) > > > - BSR %VRAX, %VRAX > > > + shlx %SHIFT_REG, %VRDX, %VRDX > > > + > > > # ifdef USE_AS_WCSRCHR > > > - leaq (%rdi, %rax, CHAR_SIZE), %rax > > > + kmovw %edx, %k1 > > > # else > > > - add %rdi, %rax > > > + KMOV %VRDX, %k1 > > > # endif > > > > > > - ret > > > -END (STRRCHR) > > > + VPCOMPRESS %VMM(6), %VMM(1){%k1}{z} > > > + /* We could technically just jmp back after the vpcompress but > > > + it doesn't save any 16-byte blocks. */ > > > + > > > + shrx %SHIFT_REG, %VRSI, %VRSI > > > + test %VRSI, %VRSI > > > + jnz L(page_cross_return) > > > + jmp L(page_cross_continue) > > > + /* 1-byte from cache line. */ > > > +END(STRRCHR) > > > #endif > > > diff --git a/sysdeps/x86_64/multiarch/strrchr-evex.S b/sysdeps/x86_64/multiarch/strrchr-evex.S > > > index 85e3b0119f..b606e6f69c 100644 > > > --- a/sysdeps/x86_64/multiarch/strrchr-evex.S > > > +++ b/sysdeps/x86_64/multiarch/strrchr-evex.S > > > @@ -1,394 +1,8 @@ > > > -/* strrchr/wcsrchr optimized with 256-bit EVEX instructions. > > > - Copyright (C) 2021-2023 Free Software Foundation, Inc. > > > - This file is part of the GNU C Library. > > > - > > > - The GNU C Library is free software; you can redistribute it and/or > > > - modify it under the terms of the GNU Lesser General Public > > > - License as published by the Free Software Foundation; either > > > - version 2.1 of the License, or (at your option) any later version. > > > - > > > - The GNU C Library is distributed in the hope that it will be useful, > > > - but WITHOUT ANY WARRANTY; without even the implied warranty of > > > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > > > - Lesser General Public License for more details. > > > - > > > - You should have received a copy of the GNU Lesser General Public > > > - License along with the GNU C Library; if not, see > > > - <https://www.gnu.org/licenses/>. */ > > > - > > > -#include <isa-level.h> > > > - > > > -#if ISA_SHOULD_BUILD (4) > > > - > > > -# include <sysdep.h> > > > - > > > # ifndef STRRCHR > > > # define STRRCHR __strrchr_evex > > > # endif > > > > > > -# include "x86-evex256-vecs.h" > > > - > > > -# ifdef USE_AS_WCSRCHR > > > -# define SHIFT_REG rsi > > > -# define kunpck_2x kunpckbw > > > -# define kmov_2x kmovd > > > -# define maskz_2x ecx > > > -# define maskm_2x eax > > > -# define CHAR_SIZE 4 > > > -# define VPMIN vpminud > > > -# define VPTESTN vptestnmd > > > -# define VPTEST vptestmd > > > -# define VPBROADCAST vpbroadcastd > > > -# define VPCMPEQ vpcmpeqd > > > -# define VPCMP vpcmpd > > > - > > > -# define USE_WIDE_CHAR > > > -# else > > > -# define SHIFT_REG rdi > > > -# define kunpck_2x kunpckdq > > > -# define kmov_2x kmovq > > > -# define maskz_2x rcx > > > -# define maskm_2x rax > > > - > > > -# define CHAR_SIZE 1 > > > -# define VPMIN vpminub > > > -# define VPTESTN vptestnmb > > > -# define VPTEST vptestmb > > > -# define VPBROADCAST vpbroadcastb > > > -# define VPCMPEQ vpcmpeqb > > > -# define VPCMP vpcmpb > > > -# endif > > > - > > > -# include "reg-macros.h" > > > - > > > -# define VMATCH VMM(0) > > > -# define CHAR_PER_VEC (VEC_SIZE / CHAR_SIZE) > > > -# define PAGE_SIZE 4096 > > > - > > > - .section SECTION(.text), "ax", @progbits > > > -ENTRY_P2ALIGN(STRRCHR, 6) > > > - movl %edi, %eax > > > - /* Broadcast CHAR to VMATCH. */ > > > - VPBROADCAST %esi, %VMATCH > > > - > > > - andl $(PAGE_SIZE - 1), %eax > > > - cmpl $(PAGE_SIZE - VEC_SIZE), %eax > > > - jg L(cross_page_boundary) > > > -L(page_cross_continue): > > > - VMOVU (%rdi), %VMM(1) > > > - /* k0 has a 1 for each zero CHAR in VEC(1). */ > > > - VPTESTN %VMM(1), %VMM(1), %k0 > > > - KMOV %k0, %VRSI > > > - test %VRSI, %VRSI > > > - jz L(aligned_more) > > > - /* fallthrough: zero CHAR in first VEC. */ > > > - /* K1 has a 1 for each search CHAR match in VEC(1). */ > > > - VPCMPEQ %VMATCH, %VMM(1), %k1 > > > - KMOV %k1, %VRAX > > > - /* Build mask up until first zero CHAR (used to mask of > > > - potential search CHAR matches past the end of the string). > > > - */ > > > - blsmsk %VRSI, %VRSI > > > - and %VRSI, %VRAX > > > - jz L(ret0) > > > - /* Get last match (the `and` removed any out of bounds matches). > > > - */ > > > - bsr %VRAX, %VRAX > > > -# ifdef USE_AS_WCSRCHR > > > - leaq (%rdi, %rax, CHAR_SIZE), %rax > > > -# else > > > - addq %rdi, %rax > > > -# endif > > > -L(ret0): > > > - ret > > > - > > > - /* Returns for first vec x1/x2/x3 have hard coded backward > > > - search path for earlier matches. */ > > > - .p2align 4,, 6 > > > -L(first_vec_x1): > > > - VPCMPEQ %VMATCH, %VMM(2), %k1 > > > - KMOV %k1, %VRAX > > > - blsmsk %VRCX, %VRCX > > > - /* eax non-zero if search CHAR in range. */ > > > - and %VRCX, %VRAX > > > - jnz L(first_vec_x1_return) > > > - > > > - /* fallthrough: no match in VEC(2) then need to check for > > > - earlier matches (in VEC(1)). */ > > > - .p2align 4,, 4 > > > -L(first_vec_x0_test): > > > - VPCMPEQ %VMATCH, %VMM(1), %k1 > > > - KMOV %k1, %VRAX > > > - test %VRAX, %VRAX > > > - jz L(ret1) > > > - bsr %VRAX, %VRAX > > > -# ifdef USE_AS_WCSRCHR > > > - leaq (%rsi, %rax, CHAR_SIZE), %rax > > > -# else > > > - addq %rsi, %rax > > > -# endif > > > -L(ret1): > > > - ret > > > - > > > - .p2align 4,, 10 > > > -L(first_vec_x1_or_x2): > > > - VPCMPEQ %VMM(3), %VMATCH, %k3 > > > - VPCMPEQ %VMM(2), %VMATCH, %k2 > > > - /* K2 and K3 have 1 for any search CHAR match. Test if any > > > - matches between either of them. Otherwise check VEC(1). */ > > > - KORTEST %k2, %k3 > > > - jz L(first_vec_x0_test) > > > - > > > - /* Guaranteed that VEC(2) and VEC(3) are within range so merge > > > - the two bitmasks then get last result. */ > > > - kunpck_2x %k2, %k3, %k3 > > > - kmov_2x %k3, %maskm_2x > > > - bsr %maskm_2x, %maskm_2x > > > - leaq (VEC_SIZE * 1)(%r8, %rax, CHAR_SIZE), %rax > > > - ret > > > - > > > - .p2align 4,, 7 > > > -L(first_vec_x3): > > > - VPCMPEQ %VMATCH, %VMM(4), %k1 > > > - KMOV %k1, %VRAX > > > - blsmsk %VRCX, %VRCX > > > - /* If no search CHAR match in range check VEC(1)/VEC(2)/VEC(3). > > > - */ > > > - and %VRCX, %VRAX > > > - jz L(first_vec_x1_or_x2) > > > - bsr %VRAX, %VRAX > > > - leaq (VEC_SIZE * 3)(%rdi, %rax, CHAR_SIZE), %rax > > > - ret > > > - > > > - > > > - .p2align 4,, 6 > > > -L(first_vec_x0_x1_test): > > > - VPCMPEQ %VMATCH, %VMM(2), %k1 > > > - KMOV %k1, %VRAX > > > - /* Check VEC(2) for last match first. If no match try VEC(1). > > > - */ > > > - test %VRAX, %VRAX > > > - jz L(first_vec_x0_test) > > > - .p2align 4,, 4 > > > -L(first_vec_x1_return): > > > - bsr %VRAX, %VRAX > > > - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax > > > - ret > > > - > > > - > > > - .p2align 4,, 10 > > > -L(first_vec_x2): > > > - VPCMPEQ %VMATCH, %VMM(3), %k1 > > > - KMOV %k1, %VRAX > > > - blsmsk %VRCX, %VRCX > > > - /* Check VEC(3) for last match first. If no match try > > > - VEC(2)/VEC(1). */ > > > - and %VRCX, %VRAX > > > - jz L(first_vec_x0_x1_test) > > > - bsr %VRAX, %VRAX > > > - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > > - ret > > > - > > > - > > > - .p2align 4,, 12 > > > -L(aligned_more): > > > - /* Need to keep original pointer in case VEC(1) has last match. > > > - */ > > > - movq %rdi, %rsi > > > - andq $-VEC_SIZE, %rdi > > > - > > > - VMOVU VEC_SIZE(%rdi), %VMM(2) > > > - VPTESTN %VMM(2), %VMM(2), %k0 > > > - KMOV %k0, %VRCX > > > - > > > - test %VRCX, %VRCX > > > - jnz L(first_vec_x1) > > > - > > > - VMOVU (VEC_SIZE * 2)(%rdi), %VMM(3) > > > - VPTESTN %VMM(3), %VMM(3), %k0 > > > - KMOV %k0, %VRCX > > > - > > > - test %VRCX, %VRCX > > > - jnz L(first_vec_x2) > > > - > > > - VMOVU (VEC_SIZE * 3)(%rdi), %VMM(4) > > > - VPTESTN %VMM(4), %VMM(4), %k0 > > > - KMOV %k0, %VRCX > > > - movq %rdi, %r8 > > > - test %VRCX, %VRCX > > > - jnz L(first_vec_x3) > > > - > > > - andq $-(VEC_SIZE * 2), %rdi > > > - .p2align 4,, 10 > > > -L(first_aligned_loop): > > > - /* Preserve VEC(1), VEC(2), VEC(3), and VEC(4) until we can > > > - guarantee they don't store a match. */ > > > - VMOVA (VEC_SIZE * 4)(%rdi), %VMM(5) > > > - VMOVA (VEC_SIZE * 5)(%rdi), %VMM(6) > > > - > > > - VPCMPEQ %VMM(5), %VMATCH, %k2 > > > - vpxord %VMM(6), %VMATCH, %VMM(7) > > > - > > > - VPMIN %VMM(5), %VMM(6), %VMM(8) > > > - VPMIN %VMM(8), %VMM(7), %VMM(7) > > > - > > > - VPTESTN %VMM(7), %VMM(7), %k1 > > > - subq $(VEC_SIZE * -2), %rdi > > > - KORTEST %k1, %k2 > > > - jz L(first_aligned_loop) > > > - > > > - VPCMPEQ %VMM(6), %VMATCH, %k3 > > > - VPTESTN %VMM(8), %VMM(8), %k1 > > > - > > > - /* If k1 is zero, then we found a CHAR match but no null-term. > > > - We can now safely throw out VEC1-4. */ > > > - KTEST %k1, %k1 > > > - jz L(second_aligned_loop_prep) > > > - > > > - KORTEST %k2, %k3 > > > - jnz L(return_first_aligned_loop) > > > - > > > - > > > - .p2align 4,, 6 > > > -L(first_vec_x1_or_x2_or_x3): > > > - VPCMPEQ %VMM(4), %VMATCH, %k4 > > > - KMOV %k4, %VRAX > > > - bsr %VRAX, %VRAX > > > - jz L(first_vec_x1_or_x2) > > > - leaq (VEC_SIZE * 3)(%r8, %rax, CHAR_SIZE), %rax > > > - ret > > > - > > > - > > > - .p2align 4,, 8 > > > -L(return_first_aligned_loop): > > > - VPTESTN %VMM(5), %VMM(5), %k0 > > > - > > > - /* Combined results from VEC5/6. */ > > > - kunpck_2x %k0, %k1, %k0 > > > - kmov_2x %k0, %maskz_2x > > > - > > > - blsmsk %maskz_2x, %maskz_2x > > > - kunpck_2x %k2, %k3, %k3 > > > - kmov_2x %k3, %maskm_2x > > > - and %maskz_2x, %maskm_2x > > > - jz L(first_vec_x1_or_x2_or_x3) > > > - > > > - bsr %maskm_2x, %maskm_2x > > > - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > > - ret > > > - > > > - .p2align 4 > > > - /* We can throw away the work done for the first 4x checks here > > > - as we have a later match. This is the 'fast' path persay. > > > - */ > > > -L(second_aligned_loop_prep): > > > -L(second_aligned_loop_set_furthest_match): > > > - movq %rdi, %rsi > > > - /* Ideally we would safe k2/k3 but `kmov/kunpck` take uops on > > > - port0 and have noticeable overhead in the loop. */ > > > - VMOVA %VMM(5), %VMM(7) > > > - VMOVA %VMM(6), %VMM(8) > > > - .p2align 4 > > > -L(second_aligned_loop): > > > - VMOVU (VEC_SIZE * 4)(%rdi), %VMM(5) > > > - VMOVU (VEC_SIZE * 5)(%rdi), %VMM(6) > > > - VPCMPEQ %VMM(5), %VMATCH, %k2 > > > - vpxord %VMM(6), %VMATCH, %VMM(3) > > > - > > > - VPMIN %VMM(5), %VMM(6), %VMM(4) > > > - VPMIN %VMM(3), %VMM(4), %VMM(3) > > > - > > > - VPTESTN %VMM(3), %VMM(3), %k1 > > > - subq $(VEC_SIZE * -2), %rdi > > > - KORTEST %k1, %k2 > > > - jz L(second_aligned_loop) > > > - VPCMPEQ %VMM(6), %VMATCH, %k3 > > > - VPTESTN %VMM(4), %VMM(4), %k1 > > > - KTEST %k1, %k1 > > > - jz L(second_aligned_loop_set_furthest_match) > > > - > > > - /* branch here because we know we have a match in VEC7/8 but > > > - might not in VEC5/6 so the latter is expected to be less > > > - likely. */ > > > - KORTEST %k2, %k3 > > > - jnz L(return_new_match) > > > - > > > -L(return_old_match): > > > - VPCMPEQ %VMM(8), %VMATCH, %k0 > > > - KMOV %k0, %VRCX > > > - bsr %VRCX, %VRCX > > > - jnz L(return_old_match_ret) > > > - > > > - VPCMPEQ %VMM(7), %VMATCH, %k0 > > > - KMOV %k0, %VRCX > > > - bsr %VRCX, %VRCX > > > - subq $VEC_SIZE, %rsi > > > -L(return_old_match_ret): > > > - leaq (VEC_SIZE * 3)(%rsi, %rcx, CHAR_SIZE), %rax > > > - ret > > > - > > > - .p2align 4,, 10 > > > -L(return_new_match): > > > - VPTESTN %VMM(5), %VMM(5), %k0 > > > - > > > - /* Combined results from VEC5/6. */ > > > - kunpck_2x %k0, %k1, %k0 > > > - kmov_2x %k0, %maskz_2x > > > - > > > - blsmsk %maskz_2x, %maskz_2x > > > - kunpck_2x %k2, %k3, %k3 > > > - kmov_2x %k3, %maskm_2x > > > - > > > - /* Match at end was out-of-bounds so use last known match. */ > > > - and %maskz_2x, %maskm_2x > > > - jz L(return_old_match) > > > - > > > - bsr %maskm_2x, %maskm_2x > > > - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax > > > - ret > > > - > > > -L(cross_page_boundary): > > > - /* eax contains all the page offset bits of src (rdi). `xor rdi, > > > - rax` sets pointer will all page offset bits cleared so > > > - offset of (PAGE_SIZE - VEC_SIZE) will get last aligned VEC > > > - before page cross (guaranteed to be safe to read). Doing this > > > - as opposed to `movq %rdi, %rax; andq $-VEC_SIZE, %rax` saves > > > - a bit of code size. */ > > > - xorq %rdi, %rax > > > - VMOVU (PAGE_SIZE - VEC_SIZE)(%rax), %VMM(1) > > > - VPTESTN %VMM(1), %VMM(1), %k0 > > > - KMOV %k0, %VRCX > > > - > > > - /* Shift out zero CHAR matches that are before the beginning of > > > - src (rdi). */ > > > -# ifdef USE_AS_WCSRCHR > > > - movl %edi, %esi > > > - andl $(VEC_SIZE - 1), %esi > > > - shrl $2, %esi > > > -# endif > > > - shrx %VGPR(SHIFT_REG), %VRCX, %VRCX > > > - > > > - test %VRCX, %VRCX > > > - jz L(page_cross_continue) > > > +#include "x86-evex512-vecs.h" > > > +#include "reg-macros.h" > > > > > > - /* Found zero CHAR so need to test for search CHAR. */ > > > - VPCMP $0, %VMATCH, %VMM(1), %k1 > > > - KMOV %k1, %VRAX > > > - /* Shift out search CHAR matches that are before the beginning of > > > - src (rdi). */ > > > - shrx %VGPR(SHIFT_REG), %VRAX, %VRAX > > > - > > > - /* Check if any search CHAR match in range. */ > > > - blsmsk %VRCX, %VRCX > > > - and %VRCX, %VRAX > > > - jz L(ret3) > > > - bsr %VRAX, %VRAX > > > -# ifdef USE_AS_WCSRCHR > > > - leaq (%rdi, %rax, CHAR_SIZE), %rax > > > -# else > > > - addq %rdi, %rax > > > -# endif > > > -L(ret3): > > > - ret > > > -END(STRRCHR) > > > -#endif > > > +#include "strrchr-evex-base.S" > > > diff --git a/sysdeps/x86_64/multiarch/wcsrchr-evex.S b/sysdeps/x86_64/multiarch/wcsrchr-evex.S > > > index e5c5fe3bf2..a584cd3f43 100644 > > > --- a/sysdeps/x86_64/multiarch/wcsrchr-evex.S > > > +++ b/sysdeps/x86_64/multiarch/wcsrchr-evex.S > > > @@ -4,4 +4,5 @@ > > > > > > #define STRRCHR WCSRCHR > > > #define USE_AS_WCSRCHR 1 > > > +#define USE_WIDE_CHAR 1 > > > #include "strrchr-evex.S" > > > -- > > > 2.34.1 > > > > > > > -- > H.J.
diff --git a/sysdeps/x86_64/multiarch/strrchr-evex-base.S b/sysdeps/x86_64/multiarch/strrchr-evex-base.S index 58b2853ab6..2c98f07fca 100644 --- a/sysdeps/x86_64/multiarch/strrchr-evex-base.S +++ b/sysdeps/x86_64/multiarch/strrchr-evex-base.S @@ -25,240 +25,354 @@ # include <sysdep.h> # ifdef USE_AS_WCSRCHR +# if VEC_SIZE == 64 +# define RCX_M cx +# define kortestM kortestw +# else +# define RCX_M cl +# define kortestM kortestb +# endif + +# define SHIFT_REG VRCX +# define VPCOMPRESS vpcompressd # define CHAR_SIZE 4 -# define VPBROADCAST vpbroadcastd -# define VPCMPEQ vpcmpeqd -# define VPMINU vpminud +# define VPMIN vpminud # define VPTESTN vptestnmd +# define VPTEST vptestmd +# define VPBROADCAST vpbroadcastd +# define VPCMPEQ vpcmpeqd +# define VPCMP vpcmpd # else +# define SHIFT_REG VRDI +# define VPCOMPRESS vpcompressb # define CHAR_SIZE 1 -# define VPBROADCAST vpbroadcastb -# define VPCMPEQ vpcmpeqb -# define VPMINU vpminub +# define VPMIN vpminub # define VPTESTN vptestnmb +# define VPTEST vptestmb +# define VPBROADCAST vpbroadcastb +# define VPCMPEQ vpcmpeqb +# define VPCMP vpcmpb + +# define RCX_M VRCX +# define kortestM KORTEST # endif -# define PAGE_SIZE 4096 +# define VMATCH VMM(0) # define CHAR_PER_VEC (VEC_SIZE / CHAR_SIZE) +# define PAGE_SIZE 4096 .section SECTION(.text), "ax", @progbits -/* Aligning entry point to 64 byte, provides better performance for - one vector length string. */ -ENTRY_P2ALIGN (STRRCHR, 6) - - /* Broadcast CHAR to VMM(0). */ - VPBROADCAST %esi, %VMM(0) + /* Aligning entry point to 64 byte, provides better performance for + one vector length string. */ +ENTRY_P2ALIGN(STRRCHR, 6) movl %edi, %eax - sall $20, %eax - cmpl $((PAGE_SIZE - VEC_SIZE) << 20), %eax - ja L(page_cross) + /* Broadcast CHAR to VMATCH. */ + VPBROADCAST %esi, %VMATCH -L(page_cross_continue): - /* Compare [w]char for null, mask bit will be set for match. */ - VMOVU (%rdi), %VMM(1) + andl $(PAGE_SIZE - 1), %eax + cmpl $(PAGE_SIZE - VEC_SIZE), %eax + jg L(cross_page_boundary) - VPTESTN %VMM(1), %VMM(1), %k1 - KMOV %k1, %VRCX - test %VRCX, %VRCX - jz L(align_more) - - VPCMPEQ %VMM(1), %VMM(0), %k0 - KMOV %k0, %VRAX - BLSMSK %VRCX, %VRCX - and %VRCX, %VRAX - jz L(ret) - - BSR %VRAX, %VRAX + VMOVU (%rdi), %VMM(1) + /* k0 has a 1 for each zero CHAR in YMM1. */ + VPTESTN %VMM(1), %VMM(1), %k0 + KMOV %k0, %VGPR(rsi) + test %VGPR(rsi), %VGPR(rsi) + jz L(aligned_more) + /* fallthrough: zero CHAR in first VEC. */ +L(page_cross_return): + /* K1 has a 1 for each search CHAR match in VEC(1). */ + VPCMPEQ %VMATCH, %VMM(1), %k1 + KMOV %k1, %VGPR(rax) + /* Build mask up until first zero CHAR (used to mask of + potential search CHAR matches past the end of the string). */ + blsmsk %VGPR(rsi), %VGPR(rsi) + and %VGPR(rsi), %VGPR(rax) + jz L(ret0) + /* Get last match (the `and` removed any out of bounds matches). */ + bsr %VGPR(rax), %VGPR(rax) # ifdef USE_AS_WCSRCHR leaq (%rdi, %rax, CHAR_SIZE), %rax # else - add %rdi, %rax + addq %rdi, %rax # endif -L(ret): +L(ret0): ret -L(vector_x2_end): - VPCMPEQ %VMM(2), %VMM(0), %k2 - KMOV %k2, %VRAX - BLSMSK %VRCX, %VRCX - and %VRCX, %VRAX - jz L(vector_x1_ret) - - BSR %VRAX, %VRAX - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax - ret - - /* Check the first vector at very last to look for match. */ -L(vector_x1_ret): - VPCMPEQ %VMM(1), %VMM(0), %k2 - KMOV %k2, %VRAX - test %VRAX, %VRAX - jz L(ret) - - BSR %VRAX, %VRAX + /* Returns for first vec x1/x2/x3 have hard coded backward + search path for earlier matches. */ + .p2align 4,, 6 +L(first_vec_x1): + VPCMPEQ %VMATCH, %VMM(2), %k1 + KMOV %k1, %VGPR(rax) + blsmsk %VGPR(rcx), %VGPR(rcx) + /* eax non-zero if search CHAR in range. */ + and %VGPR(rcx), %VGPR(rax) + jnz L(first_vec_x1_return) + + /* fallthrough: no match in YMM2 then need to check for earlier + matches (in YMM1). */ + .p2align 4,, 4 +L(first_vec_x0_test): + VPCMPEQ %VMATCH, %VMM(1), %k1 + KMOV %k1, %VGPR(rax) + test %VGPR(rax), %VGPR(rax) + jz L(ret1) + bsr %VGPR(rax), %VGPR(rax) # ifdef USE_AS_WCSRCHR leaq (%rsi, %rax, CHAR_SIZE), %rax # else - add %rsi, %rax + + addq %rsi, %rax # endif +L(ret1): + ret + + .p2align 4,, 10 +L(first_vec_x3): + VPCMPEQ %VMATCH, %VMM(4), %k1 + KMOV %k1, %VGPR(rax) + blsmsk %VGPR(rcx), %VGPR(rcx) + /* If no search CHAR match in range check YMM1/YMM2/YMM3. */ + and %VGPR(rcx), %VGPR(rax) + jz L(first_vec_x1_or_x2) + bsr %VGPR(rax), %VGPR(rax) + leaq (VEC_SIZE * 3)(%rdi, %rax, CHAR_SIZE), %rax + ret + .p2align 4,, 4 + +L(first_vec_x2): + VPCMPEQ %VMATCH, %VMM(3), %k1 + KMOV %k1, %VGPR(rax) + blsmsk %VGPR(rcx), %VGPR(rcx) + /* Check YMM3 for last match first. If no match try YMM2/YMM1. */ + and %VGPR(rcx), %VGPR(rax) + jz L(first_vec_x0_x1_test) + bsr %VGPR(rax), %VGPR(rax) + leaq (VEC_SIZE * 2)(%r8, %rax, CHAR_SIZE), %rax ret -L(align_more): - /* Zero r8 to store match result. */ - xorl %r8d, %r8d - /* Save pointer of first vector, in case if no match found. */ + .p2align 4,, 6 +L(first_vec_x0_x1_test): + VPCMPEQ %VMATCH, %VMM(2), %k1 + KMOV %k1, %VGPR(rax) + /* Check YMM2 for last match first. If no match try YMM1. */ + test %VGPR(rax), %VGPR(rax) + jz L(first_vec_x0_test) + .p2align 4,, 4 +L(first_vec_x1_return): + bsr %VGPR(rax), %VGPR(rax) + leaq (VEC_SIZE)(%r8, %rax, CHAR_SIZE), %rax + ret + + .p2align 4,, 12 +L(aligned_more): +L(page_cross_continue): + /* Need to keep original pointer incase VEC(1) has last match. */ movq %rdi, %rsi - /* Align pointer to vector size. */ andq $-VEC_SIZE, %rdi - /* Loop unroll for 2 vector loop. */ - VMOVA (VEC_SIZE)(%rdi), %VMM(2) + + VMOVU VEC_SIZE(%rdi), %VMM(2) VPTESTN %VMM(2), %VMM(2), %k0 KMOV %k0, %VRCX + movq %rdi, %r8 test %VRCX, %VRCX - jnz L(vector_x2_end) + jnz L(first_vec_x1) + + VMOVU (VEC_SIZE * 2)(%rdi), %VMM(3) + VPTESTN %VMM(3), %VMM(3), %k0 + KMOV %k0, %VRCX + + test %VRCX, %VRCX + jnz L(first_vec_x2) + + VMOVU (VEC_SIZE * 3)(%rdi), %VMM(4) + VPTESTN %VMM(4), %VMM(4), %k0 + KMOV %k0, %VRCX + + /* Intentionally use 64-bit here. EVEX256 version needs 1-byte + padding for efficient nop before loop alignment. */ + test %rcx, %rcx + jnz L(first_vec_x3) - /* Save pointer of second vector, in case if no match - found. */ - movq %rdi, %r9 - /* Align address to VEC_SIZE * 2 for loop. */ andq $-(VEC_SIZE * 2), %rdi + .p2align 4 +L(first_aligned_loop): + /* Preserve VEC(1), VEC(2), VEC(3), and VEC(4) until we can + gurantee they don't store a match. */ + VMOVA (VEC_SIZE * 4)(%rdi), %VMM(5) + VMOVA (VEC_SIZE * 5)(%rdi), %VMM(6) - .p2align 4,,11 -L(loop): - /* 2 vector loop, as it provide better performance as compared - to 4 vector loop. */ - VMOVA (VEC_SIZE * 2)(%rdi), %VMM(3) - VMOVA (VEC_SIZE * 3)(%rdi), %VMM(4) - VPCMPEQ %VMM(3), %VMM(0), %k1 - VPCMPEQ %VMM(4), %VMM(0), %k2 - VPMINU %VMM(3), %VMM(4), %VMM(5) - VPTESTN %VMM(5), %VMM(5), %k0 - KOR %k1, %k2, %k3 - subq $-(VEC_SIZE * 2), %rdi - /* If k0 and k3 zero, match and end of string not found. */ - KORTEST %k0, %k3 - jz L(loop) - - /* If k0 is non zero, end of string found. */ - KORTEST %k0, %k0 - jnz L(endloop) - - lea VEC_SIZE(%rdi), %r8 - /* A match found, it need to be stored in r8 before loop - continue. */ - /* Check second vector first. */ - KMOV %k2, %VRDX - test %VRDX, %VRDX - jnz L(loop_vec_x2_match) + VPCMP $4, %VMM(5), %VMATCH, %k2 + VPCMP $4, %VMM(6), %VMATCH, %k3{%k2} + + VPMIN %VMM(5), %VMM(6), %VMM(7) + + VPTEST %VMM(7), %VMM(7), %k1{%k3} + subq $(VEC_SIZE * -2), %rdi + kortestM %k1, %k1 + jc L(first_aligned_loop) + VPTESTN %VMM(7), %VMM(7), %k1 KMOV %k1, %VRDX - /* Match is in first vector, rdi offset need to be subtracted - by VEC_SIZE. */ - sub $VEC_SIZE, %r8 - - /* If second vector doesn't have match, first vector must - have match. */ -L(loop_vec_x2_match): - BSR %VRDX, %VRDX -# ifdef USE_AS_WCSRCHR - sal $2, %rdx -# endif - add %rdx, %r8 - jmp L(loop) + test %VRDX, %VRDX + jz L(second_aligned_loop_prep) -L(endloop): - /* Check if string end in first loop vector. */ - VPTESTN %VMM(3), %VMM(3), %k0 - KMOV %k0, %VRCX - test %VRCX, %VRCX - jnz L(loop_vector_x1_end) + kortestM %k3, %k3 + jnc L(return_first_aligned_loop) - /* Check if it has match in first loop vector. */ - KMOV %k1, %VRAX + .p2align 4,, 6 +L(first_vec_x1_or_x2_or_x3): + VPCMPEQ %VMM(4), %VMATCH, %k4 + KMOV %k4, %VRAX test %VRAX, %VRAX - jz L(loop_vector_x2_end) + jz L(first_vec_x1_or_x2) + bsr %VRAX, %VRAX + leaq (VEC_SIZE * 3)(%r8, %rax, CHAR_SIZE), %rax + ret - BSR %VRAX, %VRAX - leaq (%rdi, %rax, CHAR_SIZE), %r8 - /* String must end in second loop vector. */ -L(loop_vector_x2_end): - VPTESTN %VMM(4), %VMM(4), %k0 + .p2align 4,, 8 +L(return_first_aligned_loop): + VPTESTN %VMM(5), %VMM(5), %k0 KMOV %k0, %VRCX + blsmsk %VRCX, %VRCX + jnc L(return_first_new_match_first) + blsmsk %VRDX, %VRDX + VPCMPEQ %VMM(6), %VMATCH, %k0 + KMOV %k0, %VRAX + addq $VEC_SIZE, %rdi + and %VRDX, %VRAX + jnz L(return_first_new_match_ret) + subq $VEC_SIZE, %rdi +L(return_first_new_match_first): KMOV %k2, %VRAX - BLSMSK %VRCX, %VRCX - /* Check if it has match in second loop vector. */ +# ifdef USE_AS_WCSRCHR + xorl $((1 << CHAR_PER_VEC)- 1), %VRAX and %VRCX, %VRAX - jz L(check_last_match) +# else + andn %VRCX, %VRAX, %VRAX +# endif + jz L(first_vec_x1_or_x2_or_x3) +L(return_first_new_match_ret): + bsr %VRAX, %VRAX + leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax + ret - BSR %VRAX, %VRAX - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax + .p2align 4,, 10 +L(first_vec_x1_or_x2): + VPCMPEQ %VMM(3), %VMATCH, %k3 + KMOV %k3, %VRAX + test %VRAX, %VRAX + jz L(first_vec_x0_x1_test) + bsr %VRAX, %VRAX + leaq (VEC_SIZE * 2)(%r8, %rax, CHAR_SIZE), %rax ret - /* String end in first loop vector. */ -L(loop_vector_x1_end): - KMOV %k1, %VRAX - BLSMSK %VRCX, %VRCX - /* Check if it has match in second loop vector. */ - and %VRCX, %VRAX - jz L(check_last_match) - BSR %VRAX, %VRAX - leaq (%rdi, %rax, CHAR_SIZE), %rax - ret + .p2align 4 + /* We can throw away the work done for the first 4x checks here + as we have a later match. This is the 'fast' path persay. */ +L(second_aligned_loop_prep): +L(second_aligned_loop_set_furthest_match): + movq %rdi, %rsi + VMOVA %VMM(5), %VMM(7) + VMOVA %VMM(6), %VMM(8) + .p2align 4 +L(second_aligned_loop): + VMOVU (VEC_SIZE * 4)(%rdi), %VMM(5) + VMOVU (VEC_SIZE * 5)(%rdi), %VMM(6) + VPCMP $4, %VMM(5), %VMATCH, %k2 + VPCMP $4, %VMM(6), %VMATCH, %k3{%k2} + + VPMIN %VMM(5), %VMM(6), %VMM(4) + + VPTEST %VMM(4), %VMM(4), %k1{%k3} + subq $(VEC_SIZE * -2), %rdi + KMOV %k1, %VRCX + inc %RCX_M + jz L(second_aligned_loop) + VPTESTN %VMM(4), %VMM(4), %k1 + KMOV %k1, %VRDX + test %VRDX, %VRDX + jz L(second_aligned_loop_set_furthest_match) - /* No match in first and second loop vector. */ -L(check_last_match): - /* Check if any match recorded in r8. */ - test %r8, %r8 - jz L(vector_x2_ret) - movq %r8, %rax + kortestM %k3, %k3 + jnc L(return_new_match) + /* branch here because there is a significant advantage interms + of output dependency chance in using edx. */ + + +L(return_old_match): + VPCMPEQ %VMM(8), %VMATCH, %k0 + KMOV %k0, %VRCX + bsr %VRCX, %VRCX + jnz L(return_old_match_ret) + + VPCMPEQ %VMM(7), %VMATCH, %k0 + KMOV %k0, %VRCX + bsr %VRCX, %VRCX + subq $VEC_SIZE, %rsi +L(return_old_match_ret): + leaq (VEC_SIZE * 3)(%rsi, %rcx, CHAR_SIZE), %rax ret - /* No match recorded in r8. Check the second saved vector - in beginning. */ -L(vector_x2_ret): - VPCMPEQ %VMM(2), %VMM(0), %k2 - KMOV %k2, %VRAX - test %VRAX, %VRAX - jz L(vector_x1_ret) - /* Match found in the second saved vector. */ - BSR %VRAX, %VRAX - leaq (VEC_SIZE)(%r9, %rax, CHAR_SIZE), %rax +L(return_new_match): + VPTESTN %VMM(5), %VMM(5), %k0 + KMOV %k0, %VRCX + blsmsk %VRCX, %VRCX + jnc L(return_new_match_first) + dec %VRDX + VPCMPEQ %VMM(6), %VMATCH, %k0 + KMOV %k0, %VRAX + addq $VEC_SIZE, %rdi + and %VRDX, %VRAX + jnz L(return_new_match_ret) + subq $VEC_SIZE, %rdi +L(return_new_match_first): + KMOV %k2, %VRAX +# ifdef USE_AS_WCSRCHR + xorl $((1 << CHAR_PER_VEC)- 1), %VRAX + and %VRCX, %VRAX +# else + andn %VRCX, %VRAX, %VRAX +# endif + jz L(return_old_match) +L(return_new_match_ret): + bsr %VRAX, %VRAX + leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax ret -L(page_cross): - mov %rdi, %rax - movl %edi, %ecx + .p2align 4,, 4 +L(cross_page_boundary): + xorq %rdi, %rax + mov $-1, %VRDX + VMOVU (PAGE_SIZE - VEC_SIZE)(%rax), %VMM(6) + VPTESTN %VMM(6), %VMM(6), %k0 + KMOV %k0, %VRSI # ifdef USE_AS_WCSRCHR - /* Calculate number of compare result bits to be skipped for - wide string alignment adjustment. */ - andl $(VEC_SIZE - 1), %ecx - sarl $2, %ecx + movl %edi, %ecx + and $(VEC_SIZE - 1), %ecx + shrl $2, %ecx # endif - /* ecx contains number of w[char] to be skipped as a result - of address alignment. */ - andq $-VEC_SIZE, %rax - VMOVA (%rax), %VMM(1) - VPTESTN %VMM(1), %VMM(1), %k1 - KMOV %k1, %VRAX - SHR %cl, %VRAX - jz L(page_cross_continue) - VPCMPEQ %VMM(1), %VMM(0), %k0 - KMOV %k0, %VRDX - SHR %cl, %VRDX - BLSMSK %VRAX, %VRAX - and %VRDX, %VRAX - jz L(ret) - BSR %VRAX, %VRAX + shlx %SHIFT_REG, %VRDX, %VRDX + # ifdef USE_AS_WCSRCHR - leaq (%rdi, %rax, CHAR_SIZE), %rax + kmovw %edx, %k1 # else - add %rdi, %rax + KMOV %VRDX, %k1 # endif - ret -END (STRRCHR) + VPCOMPRESS %VMM(6), %VMM(1){%k1}{z} + /* We could technically just jmp back after the vpcompress but + it doesn't save any 16-byte blocks. */ + + shrx %SHIFT_REG, %VRSI, %VRSI + test %VRSI, %VRSI + jnz L(page_cross_return) + jmp L(page_cross_continue) + /* 1-byte from cache line. */ +END(STRRCHR) #endif diff --git a/sysdeps/x86_64/multiarch/strrchr-evex.S b/sysdeps/x86_64/multiarch/strrchr-evex.S index 85e3b0119f..b606e6f69c 100644 --- a/sysdeps/x86_64/multiarch/strrchr-evex.S +++ b/sysdeps/x86_64/multiarch/strrchr-evex.S @@ -1,394 +1,8 @@ -/* strrchr/wcsrchr optimized with 256-bit EVEX instructions. - Copyright (C) 2021-2023 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -#include <isa-level.h> - -#if ISA_SHOULD_BUILD (4) - -# include <sysdep.h> - # ifndef STRRCHR # define STRRCHR __strrchr_evex # endif -# include "x86-evex256-vecs.h" - -# ifdef USE_AS_WCSRCHR -# define SHIFT_REG rsi -# define kunpck_2x kunpckbw -# define kmov_2x kmovd -# define maskz_2x ecx -# define maskm_2x eax -# define CHAR_SIZE 4 -# define VPMIN vpminud -# define VPTESTN vptestnmd -# define VPTEST vptestmd -# define VPBROADCAST vpbroadcastd -# define VPCMPEQ vpcmpeqd -# define VPCMP vpcmpd - -# define USE_WIDE_CHAR -# else -# define SHIFT_REG rdi -# define kunpck_2x kunpckdq -# define kmov_2x kmovq -# define maskz_2x rcx -# define maskm_2x rax - -# define CHAR_SIZE 1 -# define VPMIN vpminub -# define VPTESTN vptestnmb -# define VPTEST vptestmb -# define VPBROADCAST vpbroadcastb -# define VPCMPEQ vpcmpeqb -# define VPCMP vpcmpb -# endif - -# include "reg-macros.h" - -# define VMATCH VMM(0) -# define CHAR_PER_VEC (VEC_SIZE / CHAR_SIZE) -# define PAGE_SIZE 4096 - - .section SECTION(.text), "ax", @progbits -ENTRY_P2ALIGN(STRRCHR, 6) - movl %edi, %eax - /* Broadcast CHAR to VMATCH. */ - VPBROADCAST %esi, %VMATCH - - andl $(PAGE_SIZE - 1), %eax - cmpl $(PAGE_SIZE - VEC_SIZE), %eax - jg L(cross_page_boundary) -L(page_cross_continue): - VMOVU (%rdi), %VMM(1) - /* k0 has a 1 for each zero CHAR in VEC(1). */ - VPTESTN %VMM(1), %VMM(1), %k0 - KMOV %k0, %VRSI - test %VRSI, %VRSI - jz L(aligned_more) - /* fallthrough: zero CHAR in first VEC. */ - /* K1 has a 1 for each search CHAR match in VEC(1). */ - VPCMPEQ %VMATCH, %VMM(1), %k1 - KMOV %k1, %VRAX - /* Build mask up until first zero CHAR (used to mask of - potential search CHAR matches past the end of the string). - */ - blsmsk %VRSI, %VRSI - and %VRSI, %VRAX - jz L(ret0) - /* Get last match (the `and` removed any out of bounds matches). - */ - bsr %VRAX, %VRAX -# ifdef USE_AS_WCSRCHR - leaq (%rdi, %rax, CHAR_SIZE), %rax -# else - addq %rdi, %rax -# endif -L(ret0): - ret - - /* Returns for first vec x1/x2/x3 have hard coded backward - search path for earlier matches. */ - .p2align 4,, 6 -L(first_vec_x1): - VPCMPEQ %VMATCH, %VMM(2), %k1 - KMOV %k1, %VRAX - blsmsk %VRCX, %VRCX - /* eax non-zero if search CHAR in range. */ - and %VRCX, %VRAX - jnz L(first_vec_x1_return) - - /* fallthrough: no match in VEC(2) then need to check for - earlier matches (in VEC(1)). */ - .p2align 4,, 4 -L(first_vec_x0_test): - VPCMPEQ %VMATCH, %VMM(1), %k1 - KMOV %k1, %VRAX - test %VRAX, %VRAX - jz L(ret1) - bsr %VRAX, %VRAX -# ifdef USE_AS_WCSRCHR - leaq (%rsi, %rax, CHAR_SIZE), %rax -# else - addq %rsi, %rax -# endif -L(ret1): - ret - - .p2align 4,, 10 -L(first_vec_x1_or_x2): - VPCMPEQ %VMM(3), %VMATCH, %k3 - VPCMPEQ %VMM(2), %VMATCH, %k2 - /* K2 and K3 have 1 for any search CHAR match. Test if any - matches between either of them. Otherwise check VEC(1). */ - KORTEST %k2, %k3 - jz L(first_vec_x0_test) - - /* Guaranteed that VEC(2) and VEC(3) are within range so merge - the two bitmasks then get last result. */ - kunpck_2x %k2, %k3, %k3 - kmov_2x %k3, %maskm_2x - bsr %maskm_2x, %maskm_2x - leaq (VEC_SIZE * 1)(%r8, %rax, CHAR_SIZE), %rax - ret - - .p2align 4,, 7 -L(first_vec_x3): - VPCMPEQ %VMATCH, %VMM(4), %k1 - KMOV %k1, %VRAX - blsmsk %VRCX, %VRCX - /* If no search CHAR match in range check VEC(1)/VEC(2)/VEC(3). - */ - and %VRCX, %VRAX - jz L(first_vec_x1_or_x2) - bsr %VRAX, %VRAX - leaq (VEC_SIZE * 3)(%rdi, %rax, CHAR_SIZE), %rax - ret - - - .p2align 4,, 6 -L(first_vec_x0_x1_test): - VPCMPEQ %VMATCH, %VMM(2), %k1 - KMOV %k1, %VRAX - /* Check VEC(2) for last match first. If no match try VEC(1). - */ - test %VRAX, %VRAX - jz L(first_vec_x0_test) - .p2align 4,, 4 -L(first_vec_x1_return): - bsr %VRAX, %VRAX - leaq (VEC_SIZE)(%rdi, %rax, CHAR_SIZE), %rax - ret - - - .p2align 4,, 10 -L(first_vec_x2): - VPCMPEQ %VMATCH, %VMM(3), %k1 - KMOV %k1, %VRAX - blsmsk %VRCX, %VRCX - /* Check VEC(3) for last match first. If no match try - VEC(2)/VEC(1). */ - and %VRCX, %VRAX - jz L(first_vec_x0_x1_test) - bsr %VRAX, %VRAX - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax - ret - - - .p2align 4,, 12 -L(aligned_more): - /* Need to keep original pointer in case VEC(1) has last match. - */ - movq %rdi, %rsi - andq $-VEC_SIZE, %rdi - - VMOVU VEC_SIZE(%rdi), %VMM(2) - VPTESTN %VMM(2), %VMM(2), %k0 - KMOV %k0, %VRCX - - test %VRCX, %VRCX - jnz L(first_vec_x1) - - VMOVU (VEC_SIZE * 2)(%rdi), %VMM(3) - VPTESTN %VMM(3), %VMM(3), %k0 - KMOV %k0, %VRCX - - test %VRCX, %VRCX - jnz L(first_vec_x2) - - VMOVU (VEC_SIZE * 3)(%rdi), %VMM(4) - VPTESTN %VMM(4), %VMM(4), %k0 - KMOV %k0, %VRCX - movq %rdi, %r8 - test %VRCX, %VRCX - jnz L(first_vec_x3) - - andq $-(VEC_SIZE * 2), %rdi - .p2align 4,, 10 -L(first_aligned_loop): - /* Preserve VEC(1), VEC(2), VEC(3), and VEC(4) until we can - guarantee they don't store a match. */ - VMOVA (VEC_SIZE * 4)(%rdi), %VMM(5) - VMOVA (VEC_SIZE * 5)(%rdi), %VMM(6) - - VPCMPEQ %VMM(5), %VMATCH, %k2 - vpxord %VMM(6), %VMATCH, %VMM(7) - - VPMIN %VMM(5), %VMM(6), %VMM(8) - VPMIN %VMM(8), %VMM(7), %VMM(7) - - VPTESTN %VMM(7), %VMM(7), %k1 - subq $(VEC_SIZE * -2), %rdi - KORTEST %k1, %k2 - jz L(first_aligned_loop) - - VPCMPEQ %VMM(6), %VMATCH, %k3 - VPTESTN %VMM(8), %VMM(8), %k1 - - /* If k1 is zero, then we found a CHAR match but no null-term. - We can now safely throw out VEC1-4. */ - KTEST %k1, %k1 - jz L(second_aligned_loop_prep) - - KORTEST %k2, %k3 - jnz L(return_first_aligned_loop) - - - .p2align 4,, 6 -L(first_vec_x1_or_x2_or_x3): - VPCMPEQ %VMM(4), %VMATCH, %k4 - KMOV %k4, %VRAX - bsr %VRAX, %VRAX - jz L(first_vec_x1_or_x2) - leaq (VEC_SIZE * 3)(%r8, %rax, CHAR_SIZE), %rax - ret - - - .p2align 4,, 8 -L(return_first_aligned_loop): - VPTESTN %VMM(5), %VMM(5), %k0 - - /* Combined results from VEC5/6. */ - kunpck_2x %k0, %k1, %k0 - kmov_2x %k0, %maskz_2x - - blsmsk %maskz_2x, %maskz_2x - kunpck_2x %k2, %k3, %k3 - kmov_2x %k3, %maskm_2x - and %maskz_2x, %maskm_2x - jz L(first_vec_x1_or_x2_or_x3) - - bsr %maskm_2x, %maskm_2x - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax - ret - - .p2align 4 - /* We can throw away the work done for the first 4x checks here - as we have a later match. This is the 'fast' path persay. - */ -L(second_aligned_loop_prep): -L(second_aligned_loop_set_furthest_match): - movq %rdi, %rsi - /* Ideally we would safe k2/k3 but `kmov/kunpck` take uops on - port0 and have noticeable overhead in the loop. */ - VMOVA %VMM(5), %VMM(7) - VMOVA %VMM(6), %VMM(8) - .p2align 4 -L(second_aligned_loop): - VMOVU (VEC_SIZE * 4)(%rdi), %VMM(5) - VMOVU (VEC_SIZE * 5)(%rdi), %VMM(6) - VPCMPEQ %VMM(5), %VMATCH, %k2 - vpxord %VMM(6), %VMATCH, %VMM(3) - - VPMIN %VMM(5), %VMM(6), %VMM(4) - VPMIN %VMM(3), %VMM(4), %VMM(3) - - VPTESTN %VMM(3), %VMM(3), %k1 - subq $(VEC_SIZE * -2), %rdi - KORTEST %k1, %k2 - jz L(second_aligned_loop) - VPCMPEQ %VMM(6), %VMATCH, %k3 - VPTESTN %VMM(4), %VMM(4), %k1 - KTEST %k1, %k1 - jz L(second_aligned_loop_set_furthest_match) - - /* branch here because we know we have a match in VEC7/8 but - might not in VEC5/6 so the latter is expected to be less - likely. */ - KORTEST %k2, %k3 - jnz L(return_new_match) - -L(return_old_match): - VPCMPEQ %VMM(8), %VMATCH, %k0 - KMOV %k0, %VRCX - bsr %VRCX, %VRCX - jnz L(return_old_match_ret) - - VPCMPEQ %VMM(7), %VMATCH, %k0 - KMOV %k0, %VRCX - bsr %VRCX, %VRCX - subq $VEC_SIZE, %rsi -L(return_old_match_ret): - leaq (VEC_SIZE * 3)(%rsi, %rcx, CHAR_SIZE), %rax - ret - - .p2align 4,, 10 -L(return_new_match): - VPTESTN %VMM(5), %VMM(5), %k0 - - /* Combined results from VEC5/6. */ - kunpck_2x %k0, %k1, %k0 - kmov_2x %k0, %maskz_2x - - blsmsk %maskz_2x, %maskz_2x - kunpck_2x %k2, %k3, %k3 - kmov_2x %k3, %maskm_2x - - /* Match at end was out-of-bounds so use last known match. */ - and %maskz_2x, %maskm_2x - jz L(return_old_match) - - bsr %maskm_2x, %maskm_2x - leaq (VEC_SIZE * 2)(%rdi, %rax, CHAR_SIZE), %rax - ret - -L(cross_page_boundary): - /* eax contains all the page offset bits of src (rdi). `xor rdi, - rax` sets pointer will all page offset bits cleared so - offset of (PAGE_SIZE - VEC_SIZE) will get last aligned VEC - before page cross (guaranteed to be safe to read). Doing this - as opposed to `movq %rdi, %rax; andq $-VEC_SIZE, %rax` saves - a bit of code size. */ - xorq %rdi, %rax - VMOVU (PAGE_SIZE - VEC_SIZE)(%rax), %VMM(1) - VPTESTN %VMM(1), %VMM(1), %k0 - KMOV %k0, %VRCX - - /* Shift out zero CHAR matches that are before the beginning of - src (rdi). */ -# ifdef USE_AS_WCSRCHR - movl %edi, %esi - andl $(VEC_SIZE - 1), %esi - shrl $2, %esi -# endif - shrx %VGPR(SHIFT_REG), %VRCX, %VRCX - - test %VRCX, %VRCX - jz L(page_cross_continue) +#include "x86-evex512-vecs.h" +#include "reg-macros.h" - /* Found zero CHAR so need to test for search CHAR. */ - VPCMP $0, %VMATCH, %VMM(1), %k1 - KMOV %k1, %VRAX - /* Shift out search CHAR matches that are before the beginning of - src (rdi). */ - shrx %VGPR(SHIFT_REG), %VRAX, %VRAX - - /* Check if any search CHAR match in range. */ - blsmsk %VRCX, %VRCX - and %VRCX, %VRAX - jz L(ret3) - bsr %VRAX, %VRAX -# ifdef USE_AS_WCSRCHR - leaq (%rdi, %rax, CHAR_SIZE), %rax -# else - addq %rdi, %rax -# endif -L(ret3): - ret -END(STRRCHR) -#endif +#include "strrchr-evex-base.S" diff --git a/sysdeps/x86_64/multiarch/wcsrchr-evex.S b/sysdeps/x86_64/multiarch/wcsrchr-evex.S index e5c5fe3bf2..a584cd3f43 100644 --- a/sysdeps/x86_64/multiarch/wcsrchr-evex.S +++ b/sysdeps/x86_64/multiarch/wcsrchr-evex.S @@ -4,4 +4,5 @@ #define STRRCHR WCSRCHR #define USE_AS_WCSRCHR 1 +#define USE_WIDE_CHAR 1 #include "strrchr-evex.S"