From 00d8623b92373d9578aa59a6459a3007c4340472 Mon Sep 17 00:00:00 2001 From: Matiq Date: Sun, 16 Aug 2026 23:38:16 +0300 Subject: [PATCH] notes: twiddle = 1024-entry sin table with stride sampling --- focus_decomp.txt | 399 +++++++++++++++++++++++++++++++++++++----- focus_list.txt | 2 +- notes_giant_fft.md | 7 +- phase_table_1024.json | 1 + 4 files changed, 361 insertions(+), 48 deletions(-) create mode 100644 phase_table_1024.json diff --git a/focus_decomp.txt b/focus_decomp.txt index 910f676..03a189d 100644 --- a/focus_decomp.txt +++ b/focus_decomp.txt @@ -1,61 +1,368 @@ -############ FUN_ 18000c080 size=507 ############ +############ FUN_ 180039b00 size=1939 ############ -/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ +/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ -undefined8 FUN_18000bfc0(longlong param_1,longlong param_2,longlong param_3,int param_4) +longlong FUN_180039b00(uint param_1,ulonglong param_2) { - undefined1 *puVar1; - undefined1 *puVar2; - ulonglong uVar3; - undefined1 auStack_498 [32]; - undefined1 local_470 [512]; - undefined1 auStack_270 [576]; - ulonglong local_30; + double *pdVar1; + ulonglong *puVar2; + undefined8 *puVar3; + bool bVar4; + bool bVar5; + bool bVar6; + uint uVar7; + uint uVar8; + ulonglong uVar9; + uint uVar10; + int iVar11; + longlong lVar12; + uint uVar13; + ulonglong uVar14; + ulonglong uVar15; + uint uVar16; + longlong lVar17; + longlong lVar18; + ulonglong uVar19; + longlong lVar20; + int iVar21; + ulonglong uVar22; + undefined1 auVar23 [16]; + undefined1 auVar24 [16]; + undefined1 auVar25 [16]; + undefined1 auVar26 [16]; + undefined1 auVar27 [16]; + undefined1 auVar28 [16]; + undefined1 auVar29 [32]; + undefined1 auVar30 [32]; + undefined1 auVar31 [32]; + undefined1 auVar32 [32]; + undefined1 auVar33 [32]; + double dVar34; + undefined1 auVar35 [16]; + double dVar36; - local_30 = DAT_182615970 ^ (ulonglong)auStack_498; - if (((param_3 == 0) || (param_1 == 0)) || (param_2 == 0)) { - if ((local_30 ^ (ulonglong)auStack_498) == DAT_182615970) { - return 0xfffffff8; + iVar11 = 1 << (param_1 & 0x1f); + uVar10 = (int)(((uint)(iVar11 >> 1) >> 0x1e) + iVar11) >> 2; + if ((int)param_1 < 0xb) { + if ((int)uVar10 < 1) { + lVar12 = (longlong)(int)uVar10 * 8; + } + else { + if ((int)uVar10 < 7) { + lVar12 = (longlong)(int)uVar10 * 8; + goto LAB_180039ce5; + } + iVar11 = 1 << (10 - param_1 & 0x1f); + lVar18 = (longlong)iVar11; + lVar17 = (longlong)(int)uVar10; + if (iVar11 * 8 < 1) { +LAB_180039cdd: + lVar12 = lVar17 * 8; + } + else if (param_2 < 0x182616800) { + lVar12 = lVar17 * 8; + if (lVar12 <= (longlong)((longlong)&DAT_182616800 - param_2)) { +LAB_180039bbf: + lVar12 = lVar17 * 8; + if ((int)uVar10 < 0xb) { + uVar14 = 0; + uVar16 = uVar10 & 0xfffffffe; +LAB_180039c37: + lVar17 = uVar14 * lVar18; + do { + puVar2 = &DAT_182616800 + lVar17; + auVar35._8_8_ = 0; + auVar35._0_8_ = *puVar2; + lVar17 = lVar17 + lVar18 * 2; + auVar35 = vmovhpd_avx(auVar35,puVar2[lVar18]); + *(undefined1 (*) [16])(param_2 + uVar14 * 8) = auVar35; + uVar14 = uVar14 + 2; + } while (uVar14 < (ulonglong)(longlong)(int)uVar16); + } + else { + uVar14 = param_2 & 0xf; + if ((param_2 & 7) == 0) { + if ((int)uVar14 != 0) { + uVar14 = 1; + } + } + else { + uVar14 = 0; + } + iVar21 = (int)uVar14; + if (iVar21 + 2 <= (int)uVar10) { + uVar19 = 0; + uVar16 = uVar10 - (uVar10 - iVar21 & 1); + if (iVar21 != 0) { + lVar17 = 0; + do { + puVar3 = &DAT_182616800 + lVar17; + lVar17 = lVar17 + lVar18; + *(undefined8 *)(param_2 + uVar19 * 8) = *puVar3; + uVar19 = uVar19 + 1; + } while (uVar19 < uVar14); + } + goto LAB_180039c37; + } + uVar16 = 0; + } + uVar7 = 0; + lVar17 = 0; + if (uVar16 + 1 <= uVar10) { + lVar20 = (longlong)(int)(iVar11 * uVar16); + do { + uVar7 = uVar7 + 1; + *(undefined8 *)(param_2 + (longlong)(int)uVar16 * 8 + lVar17 * 8) = + (&DAT_182616800)[lVar20]; + lVar20 = lVar20 + lVar18; + lVar17 = lVar17 + 1; + } while (uVar7 < uVar10 - uVar16); + } + goto LAB_180039db6; + } + } + else { + if (param_2 < 0x182616801) goto LAB_180039cdd; + lVar12 = lVar17 * 8; + if ((lVar17 + -1) * (longlong)(iVar11 * 8) + 8 <= (longlong)(param_2 - 0x182616800)) + goto LAB_180039bbf; + } +LAB_180039ce5: + iVar11 = 1; + if (uVar10 >> 1 != 0) { + iVar11 = 1 << (10 - param_1 & 0x1f); + lVar18 = (longlong)iVar11; + lVar20 = (longlong)(iVar11 * 2); + lVar17 = 0; + uVar16 = 0; + do { + uVar7 = uVar16; + puVar3 = &DAT_182616800 + lVar17; + uVar16 = uVar7 + 1; + lVar17 = lVar17 + lVar20; + *(undefined8 *)(param_2 + (longlong)(int)(uVar7 * 2) * 8) = *puVar3; + puVar3 = &DAT_182616800 + lVar18; + lVar18 = lVar18 + lVar20; + *(undefined8 *)(param_2 + 8 + (longlong)(int)(uVar7 * 2) * 8) = *puVar3; + } while (uVar16 < uVar10 >> 1); + iVar11 = uVar7 + 2 + uVar16; + } + if (iVar11 - 1U < uVar10) { + *(undefined8 *)((param_2 - 8) + (longlong)iVar11 * 8) = + (&DAT_182616800)[(int)((1 << (10 - param_1 & 0x1f)) * (iVar11 - 1U))]; + } + } +LAB_180039db6: + *(undefined8 *)(lVar12 + param_2) = 0x3ff0000000000000; + goto LAB_18003a23f; + } + iVar21 = (int)(((uint)(iVar11 >> 2) >> 0x1d) + iVar11) >> 3; + dVar36 = DAT_181c5e3f0 / (double)iVar11; + uVar16 = iVar21 + 1; + if (-1 < iVar21) { + if ((int)uVar16 < 0x10) { +LAB_18003a28c: + uVar8 = 0; + } + else { + uVar14 = param_2 & 0x1f; + if ((param_2 & 7) == 0) { + if ((int)uVar14 != 0) { + uVar14 = (ulonglong)(0x20U - (int)uVar14 >> 3); + } + } + else { + uVar14 = 0; + } + uVar7 = (uint)uVar14; + if ((int)uVar16 < (int)(uVar7 + 0x10)) goto LAB_18003a28c; + uVar13 = 0; + lVar12 = 0; + uVar8 = uVar16 - (uVar16 - uVar7 & 0xf); + if (uVar7 != 0) { + do { + dVar34 = (double)(int)uVar13; + uVar13 = uVar13 + 1; + *(double *)(param_2 + lVar12 * 8) = dVar36 * dVar34; + lVar12 = lVar12 + 1; + } while (uVar13 < uVar7); + } + auVar35 = _DAT_181c5e3d0; + auVar23 = vpunpcklqdq_avx512vl(ZEXT416(uVar7),ZEXT416(uVar7 + 1)); + auVar24 = vpunpcklqdq_avx512vl(ZEXT416(uVar7 + 2),ZEXT416(uVar7 + 3)); + auVar23 = vshufps_avx512vl(auVar23,auVar24,0x88); + auVar32._8_8_ = dVar36; + auVar32._0_8_ = dVar36; + auVar32._16_8_ = dVar36; + auVar32._24_8_ = dVar36; + do { + auVar24 = vpaddd_avx512vl(auVar23,auVar35); + auVar25 = vpaddd_avx512vl(auVar24,auVar35); + auVar26 = vpaddd_avx512vl(auVar25,auVar35); + auVar33 = vcvtdq2pd_avx(auVar23); + auVar29 = vcvtdq2pd_avx512vl(auVar24); + auVar30 = vcvtdq2pd_avx512vl(auVar25); + auVar31 = vcvtdq2pd_avx512vl(auVar26); + auVar29 = vmulpd_avx512vl(auVar32,auVar29); + auVar23 = vpaddd_avx512vl(auVar26,auVar35); + auVar30 = vmulpd_avx512vl(auVar32,auVar30); + auVar31 = vmulpd_avx512vl(auVar32,auVar31); + pdVar1 = (double *)(param_2 + uVar14 * 8); + *pdVar1 = dVar36 * auVar33._0_8_; + pdVar1[1] = dVar36 * auVar33._8_8_; + pdVar1[2] = dVar36 * auVar33._16_8_; + pdVar1[3] = dVar36 * auVar33._24_8_; + *(undefined1 (*) [32])(param_2 + 0x20 + uVar14 * 8) = auVar29; + *(undefined1 (*) [32])(param_2 + 0x40 + uVar14 * 8) = auVar30; + *(undefined1 (*) [32])(param_2 + 0x60 + uVar14 * 8) = auVar31; + uVar14 = uVar14 + 0x10; + } while (uVar14 < (ulonglong)(longlong)(int)uVar8); + } + auVar35 = _DAT_181c5e3d0; + if (uVar8 + 1 <= uVar16) { + auVar23 = vpunpcklqdq_avx512vl(ZEXT416(uVar8),ZEXT416(uVar8 + 1)); + uVar14 = 0; + auVar24 = vpunpcklqdq_avx512vl(ZEXT416(uVar8 + 2),ZEXT416(uVar8 + 3)); + auVar23 = vshufps_avx512vl(auVar23,auVar24,0x88); + auVar33._8_8_ = dVar36; + auVar33._0_8_ = dVar36; + auVar33._16_8_ = dVar36; + auVar33._24_8_ = dVar36; + auVar25 = vpbroadcastd_avx512vl(); + lVar12 = 0; + auVar24 = _DAT_181c5e3e0; + do { + auVar32 = vcvtdq2pd_avx512vl(auVar23); + uVar14 = uVar14 + 4; + auVar23 = vpaddd_avx(auVar23,auVar35); + uVar19 = vpcmpgtd_avx512vl(auVar25,auVar24); + uVar19 = uVar19 & 0xf; + auVar24 = vpaddd_avx(auVar24,auVar35); + auVar32 = vmulpd_avx512vl(auVar33,auVar32); + puVar2 = (ulonglong *)(lVar12 + param_2 + (longlong)(int)uVar8 * 8); + bVar4 = (bool)((byte)uVar19 & 1); + bVar5 = (bool)((byte)(uVar19 >> 1) & 1); + bVar6 = (bool)((byte)(uVar19 >> 2) & 1); + *puVar2 = (ulonglong)bVar4 * auVar32._0_8_ | (ulonglong)!bVar4 * *puVar2; + puVar2[1] = (ulonglong)bVar5 * auVar32._8_8_ | (ulonglong)!bVar5 * puVar2[1]; + puVar2[2] = (ulonglong)bVar6 * auVar32._16_8_ | (ulonglong)!bVar6 * puVar2[2]; + puVar2[3] = (uVar19 >> 3) * auVar32._24_8_ | (ulonglong)!SUB81(uVar19 >> 3,0) * puVar2[3]; + lVar12 = lVar12 + 0x20; + } while (uVar14 < (ulonglong)((longlong)(int)uVar16 - (longlong)(int)uVar8)); } } - else if (param_4 < 1) { - if ((local_30 ^ (ulonglong)auStack_498) == DAT_182615970) { - return 0xfffffffa; - } + auVar35 = _DAT_181c5e3d0; + uVar7 = uVar10 - iVar21; + if ((int)uVar10 < (int)uVar16) { + uVar14 = param_2 + 8 + (longlong)iVar21 * 8; } else { - uVar3 = -((ulonglong)local_470 & 0x3f) & 0x3f; - puVar1 = local_470 + uVar3; - puVar2 = auStack_270 + uVar3; - for (; 0x40 < param_4; param_4 = param_4 + -0x40) { - thunk_FUN_18014ec20(param_2,puVar1,puVar2,0x40); - FUN_180008440(param_1,puVar1,0x40); - FUN_180008440(param_1,puVar2,0x40); - FUN_1800437c0(puVar2,puVar1,param_3,0x40); - param_1 = param_1 + 0x200; - param_2 = param_2 + 0x200; - param_3 = param_3 + 0x400; + lVar12 = param_2 + (longlong)iVar21 * 8; + uVar14 = lVar12 + 8; + if ((int)uVar7 < 0x10) { + uVar19 = 0; } - thunk_FUN_18014ec20(param_2,puVar1,puVar2,param_4); - FUN_180008440(param_1,puVar1,param_4); - FUN_180008440(param_1,puVar2,param_4); - FUN_1800437c0(puVar2,puVar1,param_3,param_4); - if ((local_30 ^ (ulonglong)auStack_498) == DAT_182615970) { - return 0; + else { + uVar8 = (uint)uVar14 & 0x1f; + if ((uVar14 & 7) == 0) { + if (((uVar14 & 0x1f) != 0) && (uVar8 = 0x20 - uVar8 >> 3, (int)uVar7 < (int)uVar8)) { + uVar8 = uVar7; + } + } + else { + uVar8 = 0; + } + uVar13 = uVar7 - uVar8 & 0xf; + uVar19 = (longlong)(int)uVar7 - (ulonglong)uVar13; + uVar15 = (ulonglong)(int)uVar8; + if (uVar8 != 0) { + auVar27 = vmovdqu32_avx512vl(_DAT_181c5e3e0); + auVar24 = vpbroadcastd_avx512vl(); + auVar25 = vpbroadcastd_avx512vl(); + auVar23 = vpunpcklqdq_avx512vl(ZEXT416(uVar16),ZEXT416(iVar21 + 2)); + uVar9 = 0; + auVar29._8_8_ = dVar36; + auVar29._0_8_ = dVar36; + auVar29._16_8_ = dVar36; + auVar29._24_8_ = dVar36; + auVar26 = vpunpcklqdq_avx512vl(ZEXT416(iVar21 + 3),ZEXT416(iVar21 + 4)); + auVar23 = vshufps_avx512vl(auVar23,auVar26,0x88); + lVar17 = 0; + do { + auVar26 = vpsubd_avx512vl(auVar24,auVar23); + uVar9 = uVar9 + 4; + auVar32 = vcvtdq2pd_avx512vl(auVar26); + auVar23 = vpaddd_avx(auVar23,auVar35); + uVar22 = vpcmpgtd_avx512vl(auVar25,auVar27); + uVar22 = uVar22 & 0xf; + auVar27 = vpaddd_avx512vl(auVar27,auVar35); + auVar32 = vmulpd_avx512vl(auVar29,auVar32); + puVar2 = (ulonglong *)(lVar17 + 8 + lVar12); + bVar4 = (bool)((byte)uVar22 & 1); + bVar5 = (bool)((byte)(uVar22 >> 1) & 1); + bVar6 = (bool)((byte)(uVar22 >> 2) & 1); + *puVar2 = (ulonglong)bVar4 * auVar32._0_8_ | (ulonglong)!bVar4 * *puVar2; + puVar2[1] = (ulonglong)bVar5 * auVar32._8_8_ | (ulonglong)!bVar5 * puVar2[1]; + puVar2[2] = (ulonglong)bVar6 * auVar32._16_8_ | (ulonglong)!bVar6 * puVar2[2]; + puVar2[3] = (uVar22 >> 3) * auVar32._24_8_ | (ulonglong)!SUB81(uVar22 >> 3,0) * puVar2[3]; + lVar17 = lVar17 + 0x20; + } while (uVar9 < uVar15); + if (uVar7 == uVar8) goto LAB_18003a220; + } + uVar16 = uVar8 + 1 + iVar21; + auVar23 = vpunpcklqdq_avx512vl(ZEXT416(uVar16),ZEXT416(uVar16 + 1)); + auVar24 = vpunpcklqdq_avx512vl(ZEXT416(uVar16 + 2),ZEXT416(uVar16 + 3)); + auVar23 = vshufps_avx512vl(auVar23,auVar24,0x88); + if ((longlong)(uVar15 + 0x10) <= (longlong)uVar19) { + auVar24 = vpbroadcastd_avx512vl(); + auVar30._8_8_ = dVar36; + auVar30._0_8_ = dVar36; + auVar30._16_8_ = dVar36; + auVar30._24_8_ = dVar36; + do { + auVar25 = vpaddd_avx512vl(auVar23,auVar35); + auVar23 = vpsubd_avx(auVar24,auVar23); + auVar26 = vpaddd_avx512vl(auVar25,auVar35); + auVar25 = vpsubd_avx512vl(auVar24,auVar25); + auVar27 = vpaddd_avx512vl(auVar26,auVar35); + auVar26 = vpsubd_avx512vl(auVar24,auVar26); + auVar28 = vpsubd_avx512vl(auVar24,auVar27); + auVar32 = vcvtdq2pd_avx512vl(auVar23); + auVar33 = vcvtdq2pd_avx512vl(auVar25); + auVar23 = vpaddd_avx512vl(auVar27,auVar35); + auVar29 = vcvtdq2pd_avx512vl(auVar26); + auVar31 = vcvtdq2pd_avx512vl(auVar28); + auVar32 = vmulpd_avx512vl(auVar30,auVar32); + auVar33 = vmulpd_avx512vl(auVar30,auVar33); + auVar29 = vmulpd_avx512vl(auVar30,auVar29); + auVar31 = vmulpd_avx512vl(auVar30,auVar31); + *(undefined1 (*) [32])(lVar12 + 8 + uVar15 * 8) = auVar32; + *(undefined1 (*) [32])(lVar12 + 0x28 + uVar15 * 8) = auVar33; + *(undefined1 (*) [32])(lVar12 + 0x48 + uVar15 * 8) = auVar29; + *(undefined1 (*) [32])(lVar12 + 0x68 + uVar15 * 8) = auVar31; + uVar15 = uVar15 + 0x10; + } while (uVar15 < uVar19); + if (uVar13 == 0) goto LAB_18003a220; + } } + lVar12 = lVar12 + uVar19 * 8; + iVar11 = (uVar7 - 1) - (int)uVar19; + do { + uVar16 = (int)uVar19 + 1; + uVar19 = (ulonglong)uVar16; + dVar34 = (double)iVar11; + iVar11 = iVar11 + -1; + *(double *)(lVar12 + 8) = dVar36 * dVar34; + lVar12 = lVar12 + 8; + } while ((int)uVar16 < (int)uVar7); } -} - - - -############ FUN_ 180140ca7 size=9 ############ - -void thunk_FUN_1801560a0(void) - -{ - (*(code *)PTR_FUN_1826178a0)(); - return; +LAB_18003a220: + thunk_FUN_1801de760(param_2,param_2); + thunk_FUN_1801e3f20(uVar14,uVar14,uVar7); +LAB_18003a23f: + uVar14 = param_2 + 8 + (longlong)(int)uVar10 * 8; + return uVar14 + (-(uVar14 & 0x3f) & 0x3f); } diff --git a/focus_list.txt b/focus_list.txt index e952fac..2f9624b 100644 --- a/focus_list.txt +++ b/focus_list.txt @@ -1 +1 @@ -18000c080,180140ca7 +180039b00 diff --git a/notes_giant_fft.md b/notes_giant_fft.md index a0d3407..1c6a557 100644 --- a/notes_giant_fft.md +++ b/notes_giant_fft.md @@ -49,4 +49,9 @@ outer while (uVar24 < (iVar25-1+iVar33)/iVar33) structure; different base-call FUN_18002e360 vs FUN_180023860). - Stage kernels executed at runtime are the dispatched vector kernels (see roadmap), driven from this plan's ordering; the transform itself therefore reproduces a - specific FFT: split-radix 2/4/8-style in-place butterflies with fused reorder. \ No newline at end of file + specific FFT: split-radix 2/4/8-style in-place butterflies with fused reorder. +## Twiddle source (DAT_182616800 = sin-table) +- 1024 doubles = exact sin(k*2*pi/1024) (double precision), first half-period 0..512 (rest garbage of neighboring data). +- Copied to scratch by FUN_180039b00( log2N, dst ): step lVar18 = 1 << (10 - log2N) for N<=1024. +- So for N = 2^m: twiddle angles sampled from table with stride 2^(10-m). For N>1024 separate (two-pass) branch (unresolved). +- Stage kernels (FUN_18000bfc0/18000c5e0) consume these with 0x40-complex chunks, cplx-mul=180008440, acc=FUN_1800437c0/180044700. diff --git a/phase_table_1024.json b/phase_table_1024.json new file mode 100644 index 0000000..4a64121 --- /dev/null +++ b/phase_table_1024.json @@ -0,0 +1 @@ +[0.0, 0.006135884649154475, 0.012271538285719925, 0.01840672990580482, 0.024541228522912285, 0.030674803176636622, 0.03680722294135883, 0.04293825693494083, 0.049067674327418015, 0.05519524434968994, 0.06132073630220858, 0.06744391956366405, 0.07356456359966741, 0.07968243797143013, 0.08579731234443988, 0.09190895649713272, 0.0980171403295606, 0.10412163387205457, 0.11022220729388306, 0.11631863091190475, 0.1224106751992162, 0.12849811079379317, 0.13458070850712617, 0.1406582393328492, 0.14673047445536175, 0.15279718525844344, 0.15885814333386145, 0.16491312048996992, 0.17096188876030122, 0.17700422041214875, 0.18303988795514092, 0.1890686641498062, 0.19509032201612828, 0.2011046348420919, 0.20711137619221856, 0.21311031991609136, 0.21910124015686977, 0.22508391135979283, 0.23105810828067108, 0.2370236059943672, 0.24298017990326387, 0.24892760574572012, 0.25486565960451457, 0.26079411791527546, 0.26671275747489837, 0.272621355449949, 0.27851968938505306, 0.2844075372112718, 0.29028467725446233, 0.2961508882436238, 0.3020059493192281, 0.30784964004153487, 0.3136817403988915, 0.3195020308160157, 0.3253102921622629, 0.33110630575987643, 0.33688985339222, 0.3426607173119944, 0.34841868024943456, 0.3541635254204904, 0.3598950365349881, 0.36561299780477385, 0.3713171939518375, 0.37700741021641826, 0.3826834323650897, 0.38834504669882625, 0.3939920400610481, 0.39962419984564684, 0.4052413140049899, 0.4108431710579039, 0.41642956009763715, 0.4220002707997997, 0.4275550934302821, 0.4330938188531519, 0.43861623853852766, 0.4441221445704292, 0.4496113296546066, 0.45508358712634384, 0.46053871095824, 0.4659764957679662, 0.47139673682599764, 0.4767992300633221, 0.48218377207912266, 0.487550160148436, 0.49289819222978404, 0.4982276669727818, 0.5035383837257175, 0.508830142543107, 0.5141027441932217, 0.5193559901655896, 0.524589682678469, 0.5298036246862946, 0.5349976198870972, 0.5401714727298929, 0.5453249884220465, 0.5504579729366048, 0.5555702330196022, 0.5606615761973359, 0.5657318107836131, 0.5707807458869674, 0.5758081914178453, 0.5808139580957645, 0.5857978574564388, 0.5907597018588742, 0.5956993044924334, 0.6006164793838689, 0.6055110414043255, 0.6103828062763095, 0.6152315905806268, 0.6200572117632891, 0.6248594881423865, 0.6296382389149271, 0.6343932841636455, 0.6391244448637757, 0.6438315428897915, 0.6485144010221124, 0.6531728429537768, 0.6578066932970786, 0.6624157775901718, 0.6669999223036375, 0.6715589548470183, 0.6760927035753159, 0.680600997795453, 0.6850836677727004, 0.6895405447370668, 0.693971460889654, 0.6983762494089728, 0.7027547444572253, 0.7071067811865475, 0.7114321957452165, 0.7157308252838187, 0.7200025079613818, 0.724247082951467, 0.7284643904482252, 0.7326542716724128, 0.7368165688773699, 0.7409511253549592, 0.7450577854414661, 0.7491363945234594, 0.7531867990436124, 0.7572088465064846, 0.7612023854842619, 0.765167265622459, 0.7691033376455797, 0.773010453362737, 0.7768884656732326, 0.7807372285720944, 0.7845565971555752, 0.7883464276266063, 0.7921065773002124, 0.7958369046088836, 0.799537269107905, 0.8032075314806449, 0.8068475535437993, 0.8104571982525948, 0.8140363297059484, 0.8175848131515837, 0.8211025149911048, 0.8245893027850253, 0.8280450452577558, 0.8314696123025452, 0.83486287498638, 0.838224705554838, 0.8415549774368983, 0.8448535652497071, 0.8481203448032971, 0.8513551931052651, 0.8545579883654004, 0.8577286100002721, 0.8608669386377673, 0.8639728561215867, 0.8670462455156926, 0.8700869911087113, 0.8730949784182901, 0.8760700941954065, 0.8790122264286335, 0.8819212643483549, 0.8847970984309378, 0.8876396204028539, 0.8904487232447579, 0.8932243011955154, 0.8959662497561851, 0.8986744656939538, 0.9013488470460219, 0.9039892931234433, 0.9065957045149153, 0.9091679830905224, 0.9117060320054298, 0.9142097557035307, 0.9166790599210427, 0.9191138516900577, 0.9215140393420419, 0.9238795325112867, 0.9262102421383113, 0.9285060804732155, 0.9307669610789836, 0.9329927988347388, 0.9351835099389476, 0.9373390119125748, 0.93945922360219, 0.9415440651830207, 0.9435934581619604, 0.9456073253805213, 0.9475855910177411, 0.9495281805930366, 0.9514350209690083, 0.9533060403541938, 0.9551411683057706, 0.9569403357322089, 0.9587034748958715, 0.9604305194155658, 0.9621214042690416, 0.9637760657954398, 0.9653944416976894, 0.966976471044852, 0.9685220942744174, 0.9700312531945439, 0.9715038909862518, 0.9729399522055602, 0.974339382785576, 0.9757021300385285, 0.9770281426577543, 0.9783173707196275, 0.9795697656854405, 0.9807852804032304, 0.9819638691095554, 0.9831054874312163, 0.984210092386929, 0.9852776423889412, 0.9863080972445986, 0.9873014181578583, 0.9882575677307495, 0.989176509964781, 0.9900582102622971, 0.99090263542778, 0.9917097536690994, 0.99247953459871, 0.9932119492347945, 0.993906970002356, 0.9945645707342554, 0.9951847266721968, 0.9957674144676598, 0.996312612182778, 0.9968202992911658, 0.9972904566786901, 0.9977230666441916, 0.9981181129001492, 0.9984755805732948, 0.9987954562051724, 0.9990777277526453, 0.9993223845883495, 0.9995294175010931, 0.9996988186962042, 0.9998305817958234, 0.9999247018391445, 0.9999811752826011, 1.0, 0.0, 0.0, 0.0, 1.0613606138456183e-20, 7.906153836784843e-17, 6.059152736848759e-15, 5.6621570459303695e-14, 5.138568561087355e-13, 2.9700863993243326e-12, 8.726437909640663e-12, 2.567461855566022e-11, 7.727470004683022e-11, 2.1988347162223908e-10, 5.699131131938023e-10, 9.333043159084995e-10, 1.656841990295844e-09, 2.895369708817934e-09, 4.948192053098149e-09, 8.198577767575253e-09, 1.393778065962196e-08, 2.442390103099243e-08, 4.1883317966773797e-08, 6.970829212176897e-08, 1.1511845309717844e-07, 1.6038555306507054e-07, 2.0550297043328026e-07, 2.6250864820290987e-07, 3.521034260428107e-07, 4.413578254904954e-07, 5.836797047950944e-07, 7.607469545878242e-07, 9.37053412062347e-07, 1.2714701778436583e-06, 1.6208798524523264e-06, 2.029872566869773e-06, 2.721865248854036e-06, 3.4102908926171272e-06, 4.375387089943425e-06, 5.7373372162723385e-06, 7.09153117178275e-06, 9.246128652115217e-06, 1.192226224302495e-05, 1.4581668407375828e-05, 1.9189075768667492e-05, 2.4438562773205352e-05, 2.965217930669703e-05, 3.482917225068586e-05, 3.996876319139378e-05, 4.50701408027032e-05, 5.013254838502208e-05, 5.515525834258881e-05, 6.013748487198089e-05, 6.912184450487344e-05, 7.891988186106759e-05, 8.863252857868198e-05, 9.82582712585325e-05, 0.0001077957129167569, 0.00011724339836183198, 0.00013112943230446922, 0.000149657163608205, 0.00016799688416714687, 0.0001861459164288921, 0.00020410146642571626, 0.00022186074018989483, 0.00023942129299966882, 0.00026941980394398394, 0.0003037294947702105, 0.00033762591120385584, 0.0003711036981401147, 0.00040415773330482543, 0.0004367835929157575, 0.00046897568903746207, 0.0005131784114367045, 0.0005758000757072456, 0.0006375262733220866, 0.000698347691055479, 0.0007582545500203873, 0.000817238933974925, 0.0008752910640320568, 0.0009324030239498962, 0.0010005675696828154, 0.0011109767922519852, 0.0012194544518009545, 0.0013259828532008017, 0.0014305470952903296, 0.001533130414263191, 0.001633718840280763, 0.001732296540859274, 0.0018288476835149517, 0.001923359229731748, 0.0020785075566969323, 0.0022592847190529668, 0.0024358988694995034, 0.0026083202057141483, 0.0027765263759551052, 0.0029404913031902784, 0.003100188910387573, 0.0032555968458051923, 0.003406689032411042, 0.003553444981108474, 0.0036958423401556944, 0.003833860620456055, 0.004028701215245223, 0.004287091075698031, 0.004536599844077243, 0.004777190267479864, 0.005008825093002903, 0.005231467067743366, 0.005445090114669154, 0.005649653255586979, 0.005845130413464743, 0.00603149551127035, 0.006208711296100809, 0.006376759141504621, 0.006535612970449691, 0.006685242980613624, 0.006825630545544925, 0.0069567570387920954, 0.007078600108613339, 0.007191137403266861, 0.007294361472172061, 0.007388246238296845, 0.007472787976350911, 0.0075479643345924665, 0.007613767862440911, 0.007670191109315644, 0.00771722289934577, 0.007754859507240987, 0.007783089757130399, 0.0078019136490140055, 0.0078113237323112076, 5.263544247e-315, 0.0, 0.0, 0.0, 3.183642438e-314, 3.183643355e-314, 3.183643371e-314, 3.1836433867e-314, 3.1836434025e-314, 3.1836434183e-314, 3.183643434e-314, 0.0, 3.183642462e-314, 3.18364345e-314, 3.183643466e-314, 3.1836434816e-314, 3.1836434974e-314, 3.183643513e-314, 3.183643529e-314, 0.0, 3.1836424855e-314, 3.183643545e-314, 3.1836435606e-314, 3.1836435764e-314, 3.1836435923e-314, 3.183643608e-314, 3.183643624e-314, 0.0, 3.1836425093e-314, 3.1836436397e-314, 3.1836436555e-314, 3.1836436713e-314, 3.183643687e-314, 3.183643703e-314, 3.1836437187e-314, 0.0, 3.183642533e-314, 3.1836437345e-314, 3.1836437504e-314, 3.183643766e-314, 3.183643782e-314, 3.183643798e-314, 3.1836438136e-314, 0.0, 3.1836425567e-314, 3.1836438294e-314, 3.183643845e-314, 3.183643861e-314, 3.183643877e-314, 3.1836438926e-314, 3.1836439085e-314, 0.0, 3.1836425804e-314, 3.1836439243e-314, 3.18364394e-314, 3.183643956e-314, 3.1836439717e-314, 3.1836439875e-314, 3.1836440033e-314, 0.0, 3.183642604e-314, 3.183644019e-314, 3.183644035e-314, 3.1836440507e-314, 3.1836440666e-314, 3.1836440824e-314, 3.183644098e-314, 0.0, 3.183642628e-314, 3.183644114e-314, 3.18364413e-314, 3.1836441456e-314, 3.1836441614e-314, 3.183644177e-314, 3.183644193e-314, 0.0, 3.1836426516e-314, 3.183644209e-314, 3.1836442247e-314, 3.1836442405e-314, 3.1836442563e-314, 3.183644272e-314, 3.183644288e-314, 0.0, 3.1836426753e-314, 3.1836443037e-314, 3.1836443195e-314, 3.1836443353e-314, 3.183644351e-314, 3.183644367e-314, 3.183644383e-314, 0.0, 3.183642699e-314, 3.1836443986e-314, 3.1836444144e-314, 3.18364443e-314, 3.183644446e-314, 3.183644462e-314, 3.1836444776e-314, 3.1836444934e-314, 3.1836444934e-314, 3.1836444934e-314, 1034282115.6158125, 5.45484766e-315, 3.1836483037e-314, 3.1836444934e-314, 3.1836508333e-314, 765846658.69625, 5.415337404e-315, 3.1836483037e-314, 3.1836444934e-314, 3.1836508333e-314, 309103425.255625, 5.405597774e-315, 3.183653252e-314, 3.1836551652e-314, 3.183656999e-314, 62411240.12554687, 5.38000534e-315, 3.183658849e-314, 3.1836606355e-314, 3.183662912e-314, 321650.81307421875, 5.349014674e-315, 3.1836653153e-314, 3.183667355e-314, 3.183669442e-314, 46.97602082681656, 5.308450155e-315, 3.1836711335e-314, 3.1836752915e-314, 3.183679845e-314, 702313271927.36, 5.47538118e-315, 3.1836711335e-314, 3.1836752915e-314, 3.183679845e-314, 13743900733.23, 5.448001423e-315, 3.1836711335e-314, 3.1836752915e-314, 3.1836828487e-314, 11252820028.92, 5.44833817e-315, 3.1836858685e-314, 3.1836969355e-314, 3.183703307e-314, 61438184.164375, 5.401100967e-315, 3.183706722e-314, 3.183710785e-314, 3.1837156073e-314, 7042237.014234375, 5.36390387e-315, 3.1837182634e-314, 3.1837246823e-314, 3.183728682e-314, 230.40005504715444, 5.312387453e-315, 3.1837320814e-314, 3.183738184e-314, 3.1837444923e-314, 57545864.14328125, 5.391972654e-315, 3.1837504685e-314, 3.1837647292e-314, 3.183772587e-314, 62128.132889968874, 5.35356329e-315, 3.1837800176e-314, 3.1837907527e-314, 3.18380212e-314, 2322.4321306476595, 5.320262045e-315, 3.1838078434e-314, 3.1838118117e-314, 3.1838157643e-314, 9.376001350373029, 5.27560481e-315, 3.1838195903e-314, 3.1838195903e-314, 3.1838229895e-314, 37108523280.64, 5.46649636e-315, 3.1838253294e-314, 3.1838253294e-314, 3.1838286653e-314, 36936720656.6, 5.46626323e-315, 3.183831037e-314, 3.183843606e-314, 3.1838498824e-314, 799937667.03125, 5.41103746e-315, 3.183853266e-314, 3.183865724e-314, 3.18386906e-314, 519422785.271875, 5.39938099e-315, 3.183872649e-314, 3.183843606e-314, 3.1838498824e-314, 323464769.47, 5.394925625e-315, 3.183853266e-314, 3.1838850757e-314, 3.18386906e-314, 304674369.224375, 5.394873823e-315, 3.1838884275e-314, 3.1838971705e-314, 3.1839021665e-314, 1278214.2533881837, 5.357345164e-315, 3.183904775e-314, 3.1839135023e-314, 3.183918419e-314, 976748.6270090332, 5.36205956e-315, 3.1839210753e-314, 3.18393317e-314, 3.1839366483e-314, 110755.82822186279, 5.31959892e-315, 3.1839387985e-314, 3.183950593e-314, 3.1839540236e-314, 126746.64075906372, 5.32768074e-315, 3.1839571066e-314, 3.1839619444e-314, 3.183965328e-314, 15.008005133748055, 5.274320007e-315, 3.183968126e-314, 3.183973043e-314, 3.183968126e-314, 12.767999641656875, 5.28443264e-315, 3.1839764107e-314, 3.183981217e-314, 3.1839861497e-314, 27346868.077929687, 5.39326782e-315, 3.1839908927e-314, 3.183995715e-314, 3.1840005685e-314, 50163880.165703125, 5.40777365e-315, 3.1839764107e-314, 3.183981217e-314, 3.1839861497e-314, 500695.0632824707, 5.36239112e-315, 3.18400528e-314, 3.183995715e-314, 3.1840211216e-314, 364380.3133117676, 5.36498145e-315, 3.184036758e-314, 3.183981217e-314, 3.184052631e-314, 511180.81317260745, 5.355759886e-315, 3.18400528e-314, 3.183995715e-314, 3.1840683464e-314, 245104.65663757324, 5.361147765e-315, 3.184082386e-314, 3.1840931367e-314, 3.184104267e-314, 755.7120366420746, 5.3126154e-315, 3.1841148914e-314, 3.1841257845e-314, 3.1841369464e-314, 924.6719974560738, 5.318707847e-315, 3.184142796e-314, 3.184146891e-314, 3.184151065e-314, 32.512001007318496, 5.273366766e-315, 3.1841550964e-314, 3.1841591913e-314, 3.1841668117e-314, 34.432014454722406, 5.28331362e-315, 3.1841708275e-314, 3.184173958e-314, 3.1841772306e-314, 0.11549998802272603, 5.23652196e-315, 3.184180282e-314, 3.184183523e-314, 3.1841868273e-314, 0.18799999324372038, 5.241744055e-315, 3.1841899893e-314, 3.184195254e-314, 3.18420074e-314, 64299460816168.96, 5.51805034e-315, 3.1842039813e-314, 3.1842092935e-314, 3.184214827e-314, 104453653037.36, 5.45825912e-315, 3.1842188586e-314, 3.1842092935e-314, 3.184214827e-314, 55748698384.36, 5.44771649e-315, 3.1842241075e-314, 3.1842284395e-314, 3.184232803e-314, 643439747.4731874, 5.415358125e-315, 3.184237388e-314, 3.1842420046e-314, 3.18424738e-314, 126768656.30185938, 5.3992981e-315, 3.184251459e-314, 3.18425587e-314, 3.1842604233e-314, 8224.767596050262, 5.3273699e-315, 3.184264044e-314, 3.184264044e-314, 3.184264044e-314, 862721094520995.9, 5.55641956e-315, 3.184266953e-314, 3.1842689766e-314, 3.184271364e-314, 4089446.5080859377, 5.37451385e-315, 3.184266953e-314, 3.1842689766e-314, 3.184271364e-314, 1289748.25390625, 5.37005849e-315, 3.184273593e-314, 3.184276249e-314, 3.184278779e-314, 6766.594735494614, 5.33758615e-315, 3.1842808974e-314, 3.184282779e-314, 3.1842857827e-314, 1726.4641117534638, 5.296866213e-315, 3.184287585e-314, 3.1842895613e-314, 3.184291506e-314, 0.1599999962321017, 5.265036276e-315, 3.184293356e-314, 3.184293356e-314, 3.184293356e-314, 686447046717521.9, 5.554797363e-315, 3.184296265e-314, 3.184298431e-314, 3.18430066e-314, 536871043.3125, 5.43450582e-315, 3.184296265e-314, 3.184298431e-314, 3.18430066e-314, 536871043.3125, 5.43450582e-315, 3.1843027154e-314, 3.1843050394e-314, 3.184307411e-314, 1544552.254425537, 5.3907293e-315, 3.1843096244e-314, 3.184312407e-314, 3.184315395e-314, 245104.65671264648, 5.37078378e-315, 3.184317972e-314, 3.184320138e-314, 3.184322557e-314, 32.00000763991475, 5.305155256e-315, 3.184324312e-314, 3.18432662e-314, 3.184329055e-314, 532152.6265505371, 5.357593837e-315, 3.184324312e-314, 3.18432662e-314, 3.184329055e-314, 266076.3131531982, 5.34723253e-315, 3.184324312e-314, 3.18432662e-314, 3.184329055e-314, 116523.01578048705, 5.341689227e-315, 3.184330794e-314, 3.184330794e-314, 3.1843330233e-314, 3.61599969901517, 5.296327425e-315, 3.184334952e-314, 3.1843366754e-314, 3.184338446e-314, 0.04175002122623846, 5.246468815e-315, 3.1843400904e-314, 3.18434164e-314, 3.184343474e-314, 0.00010839845323903319, 5.221270113e-315, 3.1843449283e-314, 3.184346889e-314, 3.184349624e-314, 168820.78168133544, 5.364608443e-315, 3.1843449283e-314, 3.184346889e-314, 3.184349624e-314, 51642.38290507507, 5.354247136e-315, 3.1843449283e-314, 3.184346889e-314, 3.184349624e-314, 36044.82040168762, 5.351439217e-315, 3.1843514895e-314, 3.1843537345e-314, 3.184356106e-314, 133.63198864638807, 5.30952773e-315, 3.184358256e-314, 3.1843599795e-314, 3.184361782e-314, 0.7399998897239566, 5.26594807e-315, 3.1843634103e-314, 3.1843649755e-314, 3.1843669676e-314, 0.001578125400992576, 5.22674088e-315, 3.184368438e-314, 3.1843795366e-314, 3.1843852125e-314, 595121283.222375, 5.43828252e-315, 3.184394746e-314, 3.1844058446e-314, 3.1844115205e-314, 431644225.5799062, 5.435689603e-315, 3.184421054e-314, 3.184432121e-314, 3.1844377494e-314, 226693792.77267188, 5.4328247e-315, 3.184447283e-314, 3.18445933e-314, 3.184465512e-314, 2214592.5094086914, 5.357500583e-315, 3.1844751403e-314, 3.1844861916e-314, 3.184491804e-314, 452984.8134946289, 5.322665867e-315, 3.1845005155e-314, 3.1845087526e-314, 3.1845137644e-314, 2105.344242304802, 5.284183973e-315, 3.1845217643e-314, 3.1845217643e-314, 3.1845217643e-314, 99421776.39814843, 5.437000305e-315, 3.1845217643e-314, 3.1845217643e-314, 3.1845242623e-314, 66488104.195167966, 5.402644803e-315, 3.1845217643e-314, 3.1845217643e-314, 3.1845242623e-314, 32715572.093554687, 5.40357732e-315, 3.184525053e-314, 3.184527187e-314, 3.1845293373e-314, 204210.1567121582, 5.37537384e-315, 3.184531361e-314, 3.1845337484e-314, 3.184536262e-314, 9502.720722736358, 5.354827366e-315, 3.1845385546e-314, 3.184540531e-314, 3.184542697e-314, 4.6400003426074985, 5.285178655e-315, 3.184544341e-314, 3.184544341e-314, 3.184544341e-314, 818740629399715.9, 5.55601482e-315, 3.1845555663e-314, 3.184544341e-314, 3.1845555663e-314, 12622399353251.84, 5.502916355e-315, 3.1845555663e-314, 3.184544341e-314, 3.1845555663e-314, 11687807756892.16, 5.49820196e-315, 3.184562649e-314, 3.184568404e-314, 3.184562649e-314, 545632618383.36, 5.461652447e-315, 3.1845801194e-314, 3.1845845304e-314, 3.1845801194e-314, 51685630167.284, 5.44440346e-315, 3.184593321e-314, 3.1845845304e-314, 3.184593321e-314, 31692574720.0, 5.304989477e-315, 3.1845991547e-314, 3.1846013523e-314, 3.18460453e-314, 26860324.08530078, 5.3970497e-315, 3.1845991547e-314, 3.1846013523e-314, 3.18460453e-314, 13430162.040697265, 5.391869044e-315, 3.184606475e-314, 3.1846013523e-314, 3.18460453e-314, 5620369.017792969, 5.388491255e-315, 3.1846085776e-314, 3.1846110597e-314, 3.184613684e-314, 71172.14078753663, 5.35517965e-315, 3.184616024e-314, 3.1846182217e-314, 3.184620625e-314, 2129.9204128170013, 5.329400718e-315, 3.1846227434e-314, 3.184624704e-314, 3.184626775e-314, 0.060750015038938725, 5.256249887e-315, 3.184628609e-314, 3.1846396286e-314, 3.184646237e-314, 37031552243918.85, 5.47994016e-315, 3.184656071e-314, 3.1846672963e-314, 3.1846739523e-314, 235364189264.8, 5.471223704e-315, 3.1846840234e-314, 3.184695375e-314, 3.184701968e-314, 230210307127.208, 5.470589076e-315, 3.1847120863e-314, 3.1847232324e-314, 3.1847302047e-314, 244410528.82659376, 5.407685577e-315, 3.184740339e-314, 3.1847509e-314, 3.1847575245e-314, 96435472.39042969, 5.39492045e-315, 3.184768876e-314, 3.184778283e-314, 3.184783959e-314, 176554.0317180176, 5.346186035e-315, 3.184792765e-314, 3.184798125e-314, 3.184792765e-314, 202134214694256.62, 5.474228483e-315, 3.184792765e-314, 3.184798125e-314, 3.184792765e-314, 1349650750044.16, 5.44155151e-315, 3.184792765e-314, 3.184798125e-314, 3.184792765e-314, 802643643548.8, 5.43567147e-315, 3.1848029786e-314, 3.1848083224e-314, 3.1848029786e-314, 80866192.3475, 5.420207216e-315, 3.1848132077e-314, 3.1848199586e-314, 3.1848132077e-314, 1112539.254272461, 5.39565092e-315, 3.184825255e-314, 3.184830267e-314, 3.184825255e-314, 32.00000762939453, 5.304989477e-315, 3.1848353735e-314, 3.1848353735e-314, 3.1848353735e-314, 67860504855.8, 5.486182846e-315, 3.184839895e-314, 3.1848353735e-314] \ No newline at end of file