CMSIS-DSP: Generated test patterns for convolutions and correlations.

Added MVE code for convolutions and correlations.
pull/19/head
Christophe Favergeon 7 years ago
parent 8db6e1fdd7
commit b1af1d4766

@ -294,8 +294,8 @@ __STATIC_INLINE f32x4_t vpowq_f32(
#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)*/
#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)
#endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) */
#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM))
#endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */
#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE)

File diff suppressed because it is too large Load Diff

@ -94,7 +94,155 @@
@param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1.
@return none
*/
#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
#include "arm_helium_utils.h"
#include "arm_vec_filtering.h"
void arm_conv_f32(
const float32_t * pSrcA,
uint32_t srcALen,
const float32_t * pSrcB,
uint32_t srcBLen,
float32_t * pDst)
{
const float32_t *pIn1 = pSrcA; /* inputA pointer */
const float32_t *pIn2 = pSrcB; /* inputB pointer */
/*
* Loop to perform MAC operations according to correlation equation
*/
const float32_t *pX;
const float32_t *pY;
const float32_t *pA;
const float32_t *pB;
int32_t i = 0U, j = 0; /* loop counters */
int32_t block1, block2, block3;
uint32_t vddupStartIdx = 3;
uint32x4_t decrIdxVec = vddupq_u32(vddupStartIdx, 1);
if (srcALen < srcBLen)
{
/*
* Initialization to inputB pointer
*/
pIn1 = pSrcB;
/*
* Initialization to the end of inputA pointer
*/
pIn2 = pSrcA;
/*
* Swapping the lengths
*/
j = srcALen;
srcALen = srcBLen;
srcBLen = j;
}
block1 = srcBLen - 1;
block2 = srcALen - srcBLen + 1;
block3 = srcBLen - 1;
pA = pIn1;
pB = pIn2 - 3;
for (i = 0; i <= block1 - 2; i += 2)
{
uint32_t count = i + 1;
float32_t acc0;
float32_t acc1;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is incrementing for successive accumulators
* Y pointer is incrementing for successive accumulators
*/
MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_F32(acc0, acc1, pX, pY, count);
*pDst++ = acc0;
*pDst++ = acc1;
pB += 2;
}
for (; i < block1; i++)
{
uint32_t count = i + 1;
float32_t acc;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_F32(acc, pX, pY, count);
*pDst++ = acc;
pB++;
}
for (i = 0; i <= block2 - 2; i += 2)
{
uint32_t count = srcBLen;
float32_t acc0 = 0;
float32_t acc1 = 0;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_F32(acc0, acc1, pX, pY, count);
*pDst++ = acc0;
*pDst++ = acc1;
pA += 2;
}
if (block2 & 1)
{
uint32_t count = srcBLen;
float32_t acc = 0;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_F32(acc, pX, pY, count);
*pDst++ = acc;
pA++;
}
for (i = block3; i >= 2; i -= 2)
{
int32_t count = i;
float32_t acc0;
float32_t acc1;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is decrementing for successive accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_F32(acc0, acc1, pX, pY, count);
*pDst++ = acc0;
*pDst++ = acc1;
pA += 2;
}
for (; i >= 1; i--)
{
int32_t count = i;
float32_t acc;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_F32(acc, pX, pY, count);
*pDst++ = acc;
pA++;
}
}
#else
void arm_conv_f32(
const float32_t * pSrcA,
uint32_t srcALen,
@ -808,6 +956,7 @@ void arm_conv_f32(
#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */
}
#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
/**
@} end of Conv group

@ -58,7 +58,168 @@
@remark
Refer to \ref arm_conv_opt_q15() for a faster implementation of this function using scratch buffers.
*/
#if defined(ARM_MATH_MVEI)
#include "arm_helium_utils.h"
#include "arm_vec_filtering.h"
void arm_conv_q15(
const q15_t * pSrcA,
uint32_t srcALen,
const q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst)
{
const q15_t *pIn1 = pSrcA; /* inputA pointer */
const q15_t *pIn2 = pSrcB; /* inputB pointer */
/*
* Loop to perform MAC operations according to correlation equation
*/
const q15_t *pX;
const q15_t *pY;
const q15_t *pA;
const q15_t *pB;
int32_t i = 0U, j = 0; /* loop counters */
int32_t block1, block2, block3;
uint16x8_t decrIdxVec = vddupq_u16(7, 1);
if (srcALen < srcBLen)
{
/*
* Initialization to inputB pointer
*/
pIn1 = pSrcB;
/*
* Initialization to the end of inputA pointer
*/
pIn2 = pSrcA;
/*
* Swapping the lengths
*/
j = srcALen;
srcALen = srcBLen;
srcBLen = j;
}
block1 = srcBLen - 1;
block2 = srcALen - srcBLen + 1;
block3 = srcBLen - 1;
pA = pIn1;
pB = pIn2 - 7;
for (i = 0; i <= block1 - 2; i += 2)
{
uint32_t count = i + 1;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_Q15(acc0, acc1, pX, pY, count);
*pDst++ = (q15_t) acc0;
*pDst++ = (q15_t) acc1;
pB += 2;
}
for (; i < block1; i++)
{
uint32_t count = i + 1;
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_Q15(acc, pX, pY, count);
*pDst++ = (q15_t) acc;
pB++;
}
for (i = 0; i <= block2 - 4; i += 4)
{
uint32_t count = srcBLen;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
int64_t acc2 = 0LL;
int64_t acc3 = 0LL;
pX = pA;
pY = pB;
/*
* compute 4 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CONV_QUAD_INC_X_FIXED_SIZE_Q15(acc0, acc1, acc2, acc3, pX, pY, count);
*pDst++ = (q15_t) acc0;
*pDst++ = (q15_t) acc1;
*pDst++ = (q15_t) acc2;
*pDst++ = (q15_t) acc3;
pA += 4;
}
for (; i <= block2 - 2; i += 2)
{
uint32_t count = srcBLen;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_Q15(acc0, acc1, pX, pY, count);
*pDst++ = (q15_t) acc0;
*pDst++ = (q15_t) acc1;
pA += 2;
}
if (block2 & 1)
{
uint32_t count = srcBLen;
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_Q15(acc, pX, pY, count);
*pDst++ = (q15_t) acc;
pA++;
}
for (i = block3; i >= 1; i -= 2)
{
uint32_t count = i;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_Q15(acc0, acc1, pX, pY, count);
*pDst++ = (q15_t) acc0;
*pDst++ = (q15_t) acc1;
pA += 2;
}
for (; i >= 1; i--)
{
uint32_t count = i;
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_Q15(acc, pX, pY, count);
*pDst++ = (q15_t) acc;
pA++;
}
}
#else
void arm_conv_q15(
const q15_t * pSrcA,
uint32_t srcALen,
@ -690,6 +851,7 @@ void arm_conv_q15(
#endif /* #if defined (ARM_MATH_DSP) */
}
#endif /* defined(ARM_MATH_MVEI) */
/**
@} end of Conv group

@ -59,7 +59,170 @@
@remark
Refer to \ref arm_conv_fast_q31() for a faster but less precise implementation of this function.
*/
#if defined(ARM_MATH_MVEI)
#include "arm_helium_utils.h"
#include "arm_vec_filtering.h"
void arm_conv_q31(
const q31_t * pSrcA,
uint32_t srcALen,
const q31_t * pSrcB,
uint32_t srcBLen,
q31_t * pDst)
{
const q31_t *pIn1 = pSrcA; /* inputA pointer */
const q31_t *pIn2 = pSrcB; /* inputB pointer */
/*
* Loop to perform MAC operations according to correlation equation
*/
const q31_t *pX;
const q31_t *pY;
const q31_t *pA;
const q31_t *pB;
int32_t i = 0U, j = 0; /* loop counters */
int32_t block1, block2, block3;
uint32_t vddupStartIdx = 3;
uint32x4_t decrIdxVec = vddupq_u32(vddupStartIdx, 1);
if (srcALen < srcBLen)
{
/*
* Initialization to inputB pointer
*/
pIn1 = pSrcB;
/*
* Initialization to the end of inputA pointer
*/
pIn2 = pSrcA;
/*
* Swapping the lengths
*/
j = srcALen;
srcALen = srcBLen;
srcBLen = j;
}
block1 = srcBLen - 1;
block2 = srcALen - srcBLen + 1;
block3 = srcBLen - 1;
pA = pIn1;
pB = pIn2 - 3;
for (i = 0; i <= block1 - 2; i += 2)
{
uint32_t count = i + 1;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_Q31(acc0, acc1, pX, pY, count);
*pDst++ = (q31_t) acc0;
*pDst++ = (q31_t) acc1;
pB += 2;
}
for (; i < block1; i++)
{
uint32_t count = i + 1;
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_Q31(acc, pX, pY, count);
*pDst++ = (q31_t) acc;
pB++;
}
for (i = 0; i <= block2 - 4; i += 4)
{
uint32_t count = srcBLen;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
int64_t acc2 = 0LL;
int64_t acc3 = 0LL;
pX = pA;
pY = pB;
/*
* compute 4 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CONV_QUAD_INC_X_FIXED_SIZE_Q31(acc0, acc1, acc2, acc3, pX, pY, count);
*pDst++ = (q31_t) acc0;
*pDst++ = (q31_t) acc1;
*pDst++ = (q31_t) acc2;
*pDst++ = (q31_t) acc3;
pA += 4;
}
for (; i <= block2 - 2; i += 2)
{
uint32_t count = srcBLen;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_Q31(acc0, acc1, pX, pY, count);
*pDst++ = (q31_t) acc0;
*pDst++ = (q31_t) acc1;
pA += 2;
}
if (block2 & 1)
{
uint32_t count = srcBLen;
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_Q31(acc, pX, pY, count);
*pDst++ = (q31_t) acc;
pA++;
}
for (i = block3; i >= 2; i -= 2)
{
uint32_t count = i;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_Q31(acc0, acc1, pX, pY, count);
*pDst++ = (q31_t) acc0;
*pDst++ = (q31_t) acc1;
pA += 2;
}
for (; i >= 1; i--)
{
uint32_t count = i;
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_Q31(acc, pX, pY, count);
*pDst++ = (q31_t) acc;
pA++;
}
}
#else
void arm_conv_q31(
const q31_t * pSrcA,
uint32_t srcALen,
@ -575,6 +738,7 @@ void arm_conv_q31(
#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */
}
#endif /* defined(ARM_MATH_MVEI) */
/**
@} end of Conv group

@ -55,7 +55,166 @@
@remark
Refer to \ref arm_conv_opt_q7() for a faster implementation of this function.
*/
#if defined(ARM_MATH_MVEI)
#include "arm_helium_utils.h"
#include "arm_vec_filtering.h"
void arm_conv_q7(
const q7_t * pSrcA,
uint32_t srcALen,
const q7_t * pSrcB,
uint32_t srcBLen,
q7_t * pDst)
{
const q7_t *pIn1 = pSrcA; /* inputA pointer */
const q7_t *pIn2 = pSrcB; /* inputB pointer */
/*
* Loop to perform MAC operations according to correlation equation
*/
const q7_t *pX;
const q7_t *pY;
const q7_t *pA;
const q7_t *pB;
int32_t i = 0U, j = 0; /* loop counters */
int32_t block1, block2, block3;
uint8_t vddupStartIdx = 15;
uint8x16_t decrIdxVec = vddupq_u8(vddupStartIdx, 1);
if (srcALen < srcBLen)
{
/*
* Initialization to inputB pointer
*/
pIn1 = pSrcB;
/*
* Initialization to the end of inputA pointer
*/
pIn2 = pSrcA;
/*
* Swapping the lengths
*/
j = srcALen;
srcALen = srcBLen;
srcBLen = j;
}
block1 = srcBLen - 1;
block2 = srcALen - srcBLen + 1;
block3 = srcBLen - 1;
pA = pIn1;
pB = pIn2 - 15;
for (i = 0; i <= block1 - 2; i += 2)
{
uint32_t count = i + 1;
int32_t acc0 = 0;
int32_t acc1 = 0;
pX = pA;
pY = pB;
MVE_INTR_CONV_DUAL_INC_Y_INC_SIZE_Q7(acc0, acc1, pX, pY, count);
*pDst++ = (q7_t) acc0;
*pDst++ = (q7_t) acc1;
pB += 2;
}
for (; i < block1; i++)
{
uint32_t count = i + 1;
int32_t acc = 0;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_Q7(acc, pX, pY, count);
*pDst++ = (q7_t) acc;
pB++;
}
for (i = 0; i <= block2 - 4; i += 4)
{
uint32_t count = srcBLen;
int32_t acc0 = 0;
int32_t acc1 = 0;
int32_t acc2 = 0;
int32_t acc3 = 0;
pX = pA;
pY = pB;
/*
* compute 4 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CONV_QUAD_INC_X_FIXED_SIZE_Q7(acc0, acc1, acc2, acc3, pX, pY, count);
*pDst++ = (q7_t) acc0;
*pDst++ = (q7_t) acc1;
*pDst++ = (q7_t) acc2;
*pDst++ = (q7_t) acc3;
pA += 4;
}
for (; i <= block2 - 2; i += 2)
{
uint32_t count = srcBLen;
int32_t acc0 = 0;
int32_t acc1 = 0;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CONV_DUAL_INC_X_FIXED_SIZE_Q7(acc0, acc1, pX, pY, count);
*pDst++ = (q7_t) acc0;
*pDst++ = (q7_t) acc1;
pA += 2;
}
if (block2 & 1)
{
uint32_t count = srcBLen;
int32_t acc = 0;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_Q7(acc, pX, pY, count);
*pDst++ = (q7_t) acc;
pA++;
}
for (i = block3; i >= 1; i -= 2)
{
uint32_t count = i;
int32_t acc0 = 0;
int32_t acc1 = 0;
pX = pA;
pY = pB;
MVE_INTR_CONV_DUAL_INC_X_DEC_SIZE_Q7(acc0, acc1, pX, pY, count);
*pDst++ = (q7_t) acc0;
*pDst++ = (q7_t) acc1;
pA += 2;
}
for (; i >= 1; i--)
{
uint32_t count = i;
int32_t acc = 0;
pX = pA;
pY = pB;
MVE_INTR_CONV_SINGLE_Q7(acc, pX, pY, count);
*pDst++ = (q7_t) acc;
pA++;
}
}
#else
void arm_conv_q7(
const q7_t * pSrcA,
uint32_t srcALen,
@ -694,6 +853,7 @@ void arm_conv_q7(
#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */
}
#endif /* defined(ARM_MATH_MVEI) */
/**
@} end of Conv group

@ -27,6 +27,7 @@
*/
#include "arm_math.h"
#include "arm_vec_filtering.h"
/**
@ingroup groupFilters
@ -93,6 +94,210 @@
@return none
*/
#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
#include "arm_helium_utils.h"
void arm_correlate_f32(
const float32_t * pSrcA,
uint32_t srcALen,
const float32_t * pSrcB,
uint32_t srcBLen,
float32_t * pDst)
{
const float32_t *pIn1 = pSrcA; /* inputA pointer */
const float32_t *pIn2 = pSrcB + (srcBLen - 1U); /* inputB pointer */
const float32_t *pX, *pY;
const float32_t *pA, *pB;
int32_t i = 0U, j = 0; /* loop counters */
int32_t inv = 4U; /* Reverse order flag */
uint32_t tot = 0U; /* Length */
int32_t block1, block2, block3;
int32_t incr;
tot = ((srcALen + srcBLen) - 2U);
if (srcALen > srcBLen)
{
/*
* Calculating the number of zeros to be padded to the output
*/
j = srcALen - srcBLen;
/*
* Initialize the pointer after zero padding
*/
pDst += j;
}
else if (srcALen < srcBLen)
{
/*
* Initialization to inputB pointer
*/
pIn1 = pSrcB;
/*
* Initialization to the end of inputA pointer
*/
pIn2 = pSrcA + (srcALen - 1U);
/*
* Initialisation of the pointer after zero padding
*/
pDst = pDst + tot;
/*
* Swapping the lengths
*/
j = srcALen;
srcALen = srcBLen;
srcBLen = j;
/*
* Setting the reverse flag
*/
inv = -4;
}
block1 = srcBLen - 1;
block2 = srcALen - srcBLen + 1;
block3 = srcBLen - 1;
pA = pIn1;
pB = pIn2;
incr = inv / 4;
for (i = 0U; i <= block1 - 2; i += 2)
{
uint32_t count = i + 1;
float32_t acc0;
float32_t acc1;
/*
* compute 2 accumulators per loop
* size is incrementing for second accumulator
* Y pointer is decrementing for second accumulator
*/
pX = pA;
pY = pB;
MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_F32(acc0, acc1, pX, pY, count);
*pDst = acc0;
pDst += incr;
*pDst = acc1;
pDst += incr;
pB -= 2;
}
for (; i < block1; i++)
{
uint32_t count = i + 1;
float32_t acc;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_F32(acc, pX, pY, count);
*pDst = acc;
pDst += incr;
pB--;
}
for (i = 0U; i <= block2 - 4; i += 4)
{
float32_t acc0;
float32_t acc1;
float32_t acc2;
float32_t acc3;
pX = pA;
pY = pB;
/*
* compute 4 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_F32(acc0, acc1, acc2, acc3, pX, pY, srcBLen);
*pDst = acc0;
pDst += incr;
*pDst = acc1;
pDst += incr;
*pDst = acc2;
pDst += incr;
*pDst = acc3;
pDst += incr;
pA += 4;
}
for (; i <= block2 - 2; i += 2)
{
float32_t acc0;
float32_t acc1;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for second accumulator
*/
MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_F32(acc0, acc1, pX, pY, srcBLen);
*pDst = acc0;
pDst += incr;
*pDst = acc1;
pDst += incr;
pA += 2;
}
if (block2 & 1)
{
float32_t acc;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_F32(acc, pX, pY, srcBLen);
*pDst = acc;
pDst += incr;
pA++;
}
for (i = block3 - 1; i >= 0; i -= 2)
{
uint32_t count = (i + 1);
float32_t acc0;
float32_t acc1;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is decrementing for second accumulator
* X pointer is incrementing for second accumulator
*/
MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_F32(acc0, acc1, pX, pY, count);
*pDst = acc0;
pDst += incr;
*pDst = acc1;
pDst += incr;
pA += 2;
}
for (; i >= 0; i--)
{
uint32_t count = (i + 1);
float32_t acc;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_F32(acc, pX, pY, count);
*pDst = acc;
pDst += incr;
pA++;
}
}
#else
void arm_correlate_f32(
const float32_t * pSrcA,
uint32_t srcALen,
@ -101,7 +306,7 @@ void arm_correlate_f32(
float32_t * pDst)
{
#if defined(ARM_MATH_DSP)
#if defined(ARM_MATH_DSP) && !defined(ARM_MATH_AUTOVECTORIZE)
const float32_t *pIn1; /* InputA pointer */
const float32_t *pIn2; /* InputB pointer */
@ -883,6 +1088,7 @@ void arm_correlate_f32(
#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */
}
#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
/**
@} end of Corr group

@ -58,7 +58,213 @@
@remark
Refer to \ref arm_correlate_opt_q15() for a faster implementation of this function using scratch buffers.
*/
#if defined(ARM_MATH_MVEI)
#include "arm_helium_utils.h"
#include "arm_vec_filtering.h"
void arm_correlate_q15(
const q15_t * pSrcA,
uint32_t srcALen,
const q15_t * pSrcB,
uint32_t srcBLen,
q15_t * pDst)
{
const q15_t *pIn1 = pSrcA; /* inputA pointer */
const q15_t *pIn2 = pSrcB + (srcBLen - 1U); /* inputB pointer */
/*
* Loop to perform MAC operations according to correlation equation
*/
const q15_t *pX;
const q15_t *pY;
const q15_t *pA;
const q15_t *pB;
int32_t i = 0U, j = 0; /* loop counters */
int32_t inv = 2U; /* Reverse order flag */
uint32_t tot = 0U; /* Length */
int32_t block1, block2, block3;
int32_t incr;
tot = ((srcALen + srcBLen) - 2U);
if (srcALen > srcBLen)
{
/*
* Calculating the number of zeros to be padded to the output
*/
j = srcALen - srcBLen;
/*
* Initialize the pointer after zero padding
*/
pDst += j;
}
else if (srcALen < srcBLen)
{
/*
* Initialization to inputB pointer
*/
pIn1 = pSrcB;
/*
* Initialization to the end of inputA pointer
*/
pIn2 = pSrcA + (srcALen - 1U);
/*
* Initialisation of the pointer after zero padding
*/
pDst = pDst + tot;
/*
* Swapping the lengths
*/
j = srcALen;
srcALen = srcBLen;
srcBLen = j;
/*
* Setting the reverse flag
*/
inv = -2;
}
block1 = srcBLen - 1;
block2 = srcALen - srcBLen + 1;
block3 = srcBLen - 1;
pA = pIn1;
pB = pIn2;
incr = inv / 2;
for (i = 0U; i <= block1 - 2; i += 2)
{
uint32_t count = i + 1;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
/*
* compute 2 accumulators per loop
* size is incrementing for second accumulator
* Y pointer is decrementing for second accumulator
*/
pX = pA;
pY = pB;
MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_Q15(acc0, acc1, pX, pY, count);
*pDst = (q15_t) acc0;
pDst += incr;
*pDst = (q15_t) acc1;
pDst += incr;
pB -= 2;
}
for (; i < block1; i++)
{
uint32_t count = i + 1;
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_Q15(acc, pX, pY, count);
*pDst = (q15_t) acc;
pDst += incr;
pB--;
}
for (i = 0U; i <= block2 - 4; i += 4)
{
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
int64_t acc2 = 0LL;
int64_t acc3 = 0LL;
pX = pA;
pY = pB;
/*
* compute 4 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_Q15(acc0, acc1, acc2, acc3, pX, pY, srcBLen);
*pDst = (q15_t) acc0;
pDst += incr;
*pDst = (q15_t) acc1;
pDst += incr;
*pDst = (q15_t) acc2;
pDst += incr;
*pDst = (q15_t) acc3;
pDst += incr;
pA += 4;
}
for (; i <= block2 - 2; i += 2)
{
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for second accumulator
*/
MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_Q15(acc0, acc1, pX, pY, srcBLen);
*pDst = (q15_t) acc0;
pDst += incr;
*pDst = (q15_t) acc1;
pDst += incr;
pA += 2;
}
if (block2 & 1)
{
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_Q15(acc, pX, pY, srcBLen);
*pDst = (q15_t) acc;
pDst += incr;
pA++;
}
for (i = block3 - 1; i >= 0; i -= 2)
{
uint32_t count = (i + 1);
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is decrementing for second accumulator
* X pointer is incrementing for second accumulator
*/
MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_Q15(acc0, acc1, pX, pY, count);
*pDst = (q15_t) acc0;
pDst += incr;
*pDst = (q15_t) acc1;
pDst += incr;
pA += 2;
}
for (; i >= 0; i--)
{
uint32_t count = (i + 1);
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_Q15(acc, pX, pY, count);
*pDst = (q15_t) acc;
pDst += incr;
pA++;
}
}
#else
void arm_correlate_q15(
const q15_t * pSrcA,
uint32_t srcALen,
@ -690,6 +896,7 @@ void arm_correlate_q15(
#endif /* #if defined (ARM_MATH_DSP) */
}
#endif /* defined(ARM_MATH_MVEI) */
/**
@} end of Corr group

@ -59,7 +59,203 @@
@remark
Refer to \ref arm_correlate_fast_q31() for a faster but less precise implementation of this function.
*/
#if defined(ARM_MATH_MVEI)
#include "arm_helium_utils.h"
#include "arm_vec_filtering.h"
void arm_correlate_q31(
const q31_t * pSrcA,
uint32_t srcALen,
const q31_t * pSrcB,
uint32_t srcBLen,
q31_t * pDst)
{
const q31_t *pIn1 = pSrcA; /* inputA pointer */
const q31_t *pIn2 = pSrcB + (srcBLen - 1U); /* inputB pointer */
/*
* Loop to perform MAC operations according to correlation equation
*/
const q31_t *pX;
const q31_t *pY;
const q31_t *pA;
const q31_t *pB;
int32_t i = 0U, j = 0; /* loop counters */
int32_t inv = 4; /* Reverse order flag */
uint32_t tot = 0U; /* Length */
int32_t block1, block2, block3;
int32_t incr;
tot = ((srcALen + srcBLen) - 2U);
if (srcALen > srcBLen)
{
/*
* Calculating the number of zeros to be padded to the output
*/
j = srcALen - srcBLen;
/*
* Initialize the pointer after zero padding
*/
pDst += j;
}
else if (srcALen < srcBLen)
{
/*
* Initialization to inputB pointer
*/
pIn1 = pSrcB;
/*
* Initialization to the end of inputA pointer
*/
pIn2 = pSrcA + (srcALen - 1U);
/*
* Initialization of the pointer after zero padding
*/
pDst = pDst + tot;
/*
* Swapping the lengths
*/
j = srcALen;
srcALen = srcBLen;
srcBLen = j;
/*
* Setting the reverse flag
*/
inv = -4;
}
block1 = srcBLen - 1;
block2 = srcALen - srcBLen + 1;
block3 = srcBLen - 1;
pA = pIn1;
pB = pIn2;
incr = inv / 4;
for (i = 0U; i <= block1 - 2; i += 2)
{
uint32_t count = i + 1;
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
/* compute 2 accumulators per loop */
/* size is incrementing for second accumulator */
/* Y pointer is decrementing for second accumulator */
pX = pA;
pY = pB;
MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_Q31(acc0, acc1, pX, pY, count);
*pDst = (q31_t) acc0;
pDst += incr;
*pDst = (q31_t) acc1;
pDst += incr;
pB -= 2;
}
for (; i < block1; i++)
{
uint32_t count = i + 1;
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_Q31(acc, pX, pY, count);
*pDst = (q31_t) acc;
pDst += incr;
pB--;
}
for (i = 0U; i <= block2 - 4; i += 4)
{
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
int64_t acc2 = 0LL;
int64_t acc3 = 0LL;
pX = pA;
pY = pB;
/* compute 4 accumulators per loop */
/* size is fixed for all accumulators */
/* X pointer is incrementing for successive accumulators */
MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_Q31(acc0, acc1, acc2, acc3, pX, pY, srcBLen);
*pDst = (q31_t) acc0;
pDst += incr;
*pDst = (q31_t) acc1;
pDst += incr;
*pDst = (q31_t) acc2;
pDst += incr;
*pDst = (q31_t) acc3;
pDst += incr;
pA += 4;
}
for (; i <= block2 - 2; i += 2)
{
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
/* compute 2 accumulators per loop */
/* size is fixed for all accumulators */
/* X pointer is incrementing for second accumulator */
MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_Q31(acc0, acc1, pX, pY, srcBLen);
*pDst = (q31_t) acc0;
pDst += incr;
*pDst = (q31_t) acc1;
pDst += incr;
pA += 2;
}
if (block2 & 1)
{
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_Q31(acc, pX, pY, srcBLen);
*pDst = (q31_t) acc;
pDst += incr;
pA++;
}
for (i = block3 - 1; i >= 0; i -= 2)
{
uint32_t count = (i + 1);
int64_t acc0 = 0LL;
int64_t acc1 = 0LL;
pX = pA;
pY = pB;
/* compute 2 accumulators per loop */
/* size is decrementing for second accumulator */
/* X pointer is incrementing for second accumulator */
MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_Q31(acc0, acc1, pX, pY, count);
*pDst = (q31_t) acc0;
pDst += incr;
*pDst = (q31_t) acc1;
pDst += incr;
pA += 2;
}
for (; i >= 0; i--)
{
uint32_t count = (i + 1);
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_Q31(acc, pX, pY, count);
*pDst = (q31_t) acc;
pDst += incr;
pA++;
}
}
#else
void arm_correlate_q31(
const q31_t * pSrcA,
uint32_t srcALen,
@ -676,6 +872,7 @@ void arm_correlate_q31(
#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */
}
#endif /* defined(ARM_MATH_MVEI) */
/**
@} end of Corr group

@ -56,7 +56,208 @@
@remark
Refer to \ref arm_correlate_opt_q7() for a faster implementation of this function.
*/
#if defined(ARM_MATH_MVEI)
#include "arm_helium_utils.h"
#include "arm_vec_filtering.h"
void arm_correlate_q7(
const q7_t * pSrcA,
uint32_t srcALen,
const q7_t * pSrcB,
uint32_t srcBLen,
q7_t * pDst)
{
const q7_t *pIn1 = pSrcA; /* inputA pointer */
const q7_t *pIn2 = pSrcB + (srcBLen - 1U); /* inputB pointer */
const q7_t *pX, *pY;
const q7_t *pA, *pB;
int32_t i = 0U, j = 0; /* loop counters */
int32_t inv = 1U; /* Reverse order flag */
uint32_t tot = 0U; /* Length */
int32_t block1, block2, block3;
int32_t incr;
tot = ((srcALen + srcBLen) - 2U);
if (srcALen > srcBLen)
{
/*
* Calculating the number of zeros to be padded to the output
*/
j = srcALen - srcBLen;
/*
* Initialize the pointer after zero padding
*/
pDst += j;
}
else if (srcALen < srcBLen)
{
/*
* Initialization to inputB pointer
*/
pIn1 = pSrcB;
/*
* Initialization to the end of inputA pointer
*/
pIn2 = pSrcA + (srcALen - 1U);
/*
* Initialisation of the pointer after zero padding
*/
pDst = pDst + tot;
/*
* Swapping the lengths
*/
j = srcALen;
srcALen = srcBLen;
srcBLen = j;
/*
* Setting the reverse flag
*/
inv = -1;
}
block1 = srcBLen - 1;
block2 = srcALen - srcBLen + 1;
block3 = srcBLen - 1;
pA = pIn1;
pB = pIn2;
incr = inv;
for (i = 0U; i <= block1 - 2; i += 2)
{
uint32_t count = i + 1;
int32_t acc0 = 0;
int32_t acc1 = 0;
/*
* compute 2 accumulators per loop
* size is incrementing for second accumulator
* Y pointer is decrementing for second accumulator
*/
pX = pA;
pY = pB;
MVE_INTR_CORR_DUAL_DEC_Y_INC_SIZE_Q7(acc0, acc1, pX, pY, count);
*pDst = (q7_t) acc0;
pDst += incr;
*pDst = (q7_t) acc1;
pDst += incr;
pB -= 2;
}
for (; i < block1; i++)
{
uint32_t count = i + 1;
int32_t acc = 0;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_Q7(acc, pX, pY, count);
*pDst = (q7_t) acc;
pDst += incr;
pB--;
}
for (i = 0U; i <= block2 - 4; i += 4)
{
int32_t acc0 = 0;
int32_t acc1 = 0;
int32_t acc2 = 0;
int32_t acc3 = 0;
pX = pA;
pY = pB;
/*
* compute 4 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for successive accumulators
*/
MVE_INTR_CORR_QUAD_INC_X_FIXED_SIZE_Q7(acc0, acc1, acc2, acc3, pX, pY, srcBLen);
*pDst = (q7_t) acc0;
pDst += incr;
*pDst = (q7_t) acc1;
pDst += incr;
*pDst = (q7_t) acc2;
pDst += incr;
*pDst = (q7_t) acc3;
pDst += incr;
pA += 4;
}
for (; i <= block2 - 2; i += 2)
{
int32_t acc0 = 0LL;
int32_t acc1 = 0LL;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is fixed for all accumulators
* X pointer is incrementing for second accumulator
*/
MVE_INTR_CORR_DUAL_INC_X_FIXED_SIZE_Q7(acc0, acc1, pX, pY, srcBLen);
*pDst = (q7_t) acc0;
pDst += incr;
*pDst = (q7_t) acc1;
pDst += incr;
pA += 2;
}
if (block2 & 1)
{
int32_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_Q7(acc, pX, pY, srcBLen);
*pDst = (q7_t) acc;
pDst += incr;
pA++;
}
for (i = block3 - 1; i >= 0; i -= 2)
{
uint32_t count = (i + 1);
int32_t acc0 = 0LL;
int32_t acc1 = 0LL;
pX = pA;
pY = pB;
/*
* compute 2 accumulators per loop
* size is decrementing for second accumulator
* X pointer is incrementing for second accumulator
*/
MVE_INTR_CORR_DUAL_INC_X_DEC_SIZE_Q7(acc0, acc1, pX, pY, count);
*pDst = (q7_t) acc0;
pDst += incr;
*pDst = (q7_t) acc1;
pDst += incr;
pA += 2;
}
for (; i >= 0; i--)
{
uint32_t count = (i + 1);
int64_t acc = 0LL;
pX = pA;
pY = pB;
MVE_INTR_CORR_SINGLE_Q7(acc, pX, pY, count);
*pDst = (q7_t) acc;
pDst += incr;
pA++;
}
}
#else
void arm_correlate_q7(
const q7_t * pSrcA,
uint32_t srcALen,
@ -794,6 +995,7 @@ void arm_correlate_q7(
#endif /* #if !defined(ARM_MATH_CM0_FAMILY) */
}
#endif /* defined(ARM_MATH_MVEI) */
/**
@} end of Corr group

@ -30,6 +30,8 @@ if (FLOAT16)
target_compile_definitions(${project} PRIVATE ARM_MATH_FLOAT16)
endif()
if (HELIUM OR MVEF)
target_include_directories(${project} PRIVATE "${root}/CMSIS/DSP/PrivateInclude")
endif()
endfunction()

@ -172,6 +172,10 @@ set(TESTSRC
Source/Tests/BinaryTestsQ31.cpp
Source/Tests/BinaryTestsQ15.cpp
Source/Tests/FullyConnected.cpp
Source/Tests/MISCF32.cpp
Source/Tests/MISCQ31.cpp
Source/Tests/MISCQ15.cpp
Source/Tests/MISCQ7.cpp
Source/Tests/Pooling.cpp
Source/Tests/Softmax.cpp
Source/Tests/NNSupport.cpp

@ -570,6 +570,7 @@ void assert_snr_error(unsigned long nb,AnyPattern<q31_t> &pa,AnyPattern<q31_t> &
snr = arm_snr_q31(ptrA, ptrB, pa.nbSamples());
// printf("SNR = %f\n",snr);
if (snr < threshold)
{

@ -0,0 +1,23 @@
#include "Test.h"
#include "Pattern.h"
class MISCF32:public Client::Suite
{
public:
MISCF32(Testing::testID_t id);
virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
private:
#include "MISCF32_decl.h"
Client::Pattern<float32_t> inputA;
Client::Pattern<float32_t> inputB;
Client::LocalPattern<float32_t> output;
// Reference patterns are not loaded when we are in dump mode
Client::RefPattern<float32_t> ref;
int nba,nbb;
};

@ -0,0 +1,23 @@
#include "Test.h"
#include "Pattern.h"
class MISCQ15:public Client::Suite
{
public:
MISCQ15(Testing::testID_t id);
virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
private:
#include "MISCQ15_decl.h"
Client::Pattern<q15_t> inputA;
Client::Pattern<q15_t> inputB;
Client::LocalPattern<q15_t> output;
// Reference patterns are not loaded when we are in dump mode
Client::RefPattern<q15_t> ref;
int nba,nbb;
};

@ -0,0 +1,23 @@
#include "Test.h"
#include "Pattern.h"
class MISCQ31:public Client::Suite
{
public:
MISCQ31(Testing::testID_t id);
virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
private:
#include "MISCQ31_decl.h"
Client::Pattern<q31_t> inputA;
Client::Pattern<q31_t> inputB;
Client::LocalPattern<q31_t> output;
// Reference patterns are not loaded when we are in dump mode
Client::RefPattern<q31_t> ref;
int nba,nbb;
};

@ -0,0 +1,23 @@
#include "Test.h"
#include "Pattern.h"
class MISCQ7:public Client::Suite
{
public:
MISCQ7(Testing::testID_t id);
virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
private:
#include "MISCQ7_decl.h"
Client::Pattern<q7_t> inputA;
Client::Pattern<q7_t> inputB;
Client::LocalPattern<q7_t> output;
// Reference patterns are not loaded when we are in dump mode
Client::RefPattern<q7_t> ref;
int nba,nbb;
};

@ -3,13 +3,16 @@ import numpy as np
import itertools
import Tools
# Those patterns are used for tests and benchmarks.
# For tests, there is the need to add tests for saturation
def cartesian(*somelists):
r=[]
for element in itertools.product(*somelists):
r.append(element)
return(r)
def writeTests(config):
def writeTests(config,format):
NBSAMPLES=128
inputsA=np.random.randn(NBSAMPLES)
@ -17,11 +20,64 @@ def writeTests(config):
inputsA = Tools.normalize(inputsA)
inputsB = Tools.normalize(inputsB)
if format==31:
# To avoid overflow. There is no saturation in CMSIS code for Q31 conv/corr
inputsA = inputsA / 16
inputsB = inputsB / 16
config.writeInput(1, inputsA,"InputsA")
config.writeInput(1, inputsB,"InputsB")
a = [1,2,3,Tools.loopnb(format,Tools.TAILONLY),
Tools.loopnb(format,Tools.BODYONLY),
Tools.loopnb(format,Tools.BODYANDTAIL)
]
a = list(np.unique(np.array(a)))
if format == 15:
nbs = [(14, 15), (14, 16), (14, 17), (14, 18), (14, 33), (15, 15),
(15, 16), (15, 17), (15, 18), (15, 33), (16, 15), (16, 16),
(16, 17), (16, 18), (16, 33), (17, 15), (17, 16), (17, 17),
(17, 18), (17, 33), (32, 15), (32, 16), (32, 17), (32, 18), (32, 33)]
elif format == 7 :
nbs = [(30, 31), (30, 32), (30, 33), (30, 34), (30, 49), (31, 31),
(31,32), (31, 33), (31, 34), (31, 49), (32, 31), (32, 32),
(32, 33), (32,34), (32, 49), (33, 31), (33, 32), (33, 33), (33, 34),
(33, 49), (48,31), (48, 32), (48, 33), (48, 34), (48, 49)]
else:
nbs = [(4, 1), (4, 2), (4, 3), (4, 8), (4, 11), (5, 1), (5, 2), (5, 3), (5, 8), (5, 11), (6, 1), (6, 2), (6, 3), (6, 8), (6, 11), (9, 1), (9, 2),
(9, 3), (9, 8), (9, 11), (10, 1), (10, 2), (10, 3), (10, 8), (10, 11), (11, 1), (11, 2), (11, 3), (11, 8), (11, 11), (12, 1), (12, 2),
(12, 3), (12, 8), (12, 11), (13, 1), (13, 2), (13, 3), (13, 8), (13, 11)]
nbTest = 1
for (na,nb) in nbs:
#print(na,nb)
ref = np.correlate(inputsA[0:na],inputsB[0:nb],"full")
if na > nb:
padding = na - nb
z = np.zeros(padding)
ref = np.concatenate((z,ref))
else:
padding = nb - na
z = np.zeros(padding)
ref = np.concatenate((ref,z))
config.writeReference(nbTest, ref)
nbTest = nbTest + 1
for (na,nb) in nbs:
#print(na,nb)
ref = np.convolve(inputsA[0:na],inputsB[0:nb],"full")
config.writeReference(nbTest, ref)
nbTest = nbTest + 1
def generatePatterns():
PATTERNDIR = os.path.join("Patterns","DSP","Filtering","MISC","MISC")
@ -34,10 +90,10 @@ def generatePatterns():
writeTests(configf32)
writeTests(configq31)
writeTests(configq15)
writeTests(configq7)
writeTests(configf32,0)
writeTests(configq31,31)
writeTests(configq15,15)
writeTests(configq7,7)
if __name__ == '__main__':

@ -1,258 +1,258 @@
W
128
// -0.184846
0xbe3d4858
// -0.601443
0xbf19f82d
// -0.099128
0xbdcb0377
// 0.113860
0x3de92fac
// 0.127251
0x3e024df6
// -0.435772
0xbedf1d7d
// -0.273522
0xbe8c0b0f
// 0.358822
0x3eb7b78b
// 0.109694
0x3de0a70f
// -0.443079
0xbee2db4a
// -0.196323
0xbe4908ec
// 0.211135
0x3e5833bb
// -0.030037
0xbcf610bf
// -0.706762
0xbf34ee5b
// -0.372576
0xbebec24d
// -0.459371
0xbeeb32ba
// -0.317431
0xbea28658
// 0.340745
0x3eae7613
// -0.075849
0xbd9b567b
// -0.519117
0xbf04e4d8
// 0.305146
0x3e9c3c28
// 0.417494
0x3ed5c1b6
// 0.873919
0x3f5fb92f
// 0.326721
0x3ea747ed
// -0.514927
0xbf03d245
// -0.157682
0xbe217751
// 0.552047
0x3f0d52ec
// -0.215964
0xbe5d25c8
// 0.272179
0x3e8b5b01
// 0.114797
0x3deb1ad1
// -0.162379
0xbe26468f
// 0.585821
0x3f15f863
// -0.483352
0xbef779eb
// 0.309093
0x3e9e4168
// 0.183205
0x3e3b9a00
// 0.223746
0x3e651db9
// -0.494140
0xbefcfff2
// -0.303961
0xbe9ba0c7
// 0.261359
0x3e85d0e3
// -0.325751
0xbea6c8db
// -0.381765
0xbec376bb
// 0.455934
0x3ee9701e
// 0.214304
0x3e5b7279
// -0.484660
0xbef8254f
// 0.560811
0x3f0f914c
// 0.855231
0x3f5af068
// -0.718066
0xbf37d326
// -0.229039
0xbe6a8921
// -0.297563
0xbe985a21
// 0.285189
0x3e920446
// 0.081011
0x3da5e8e3
// -0.215173
0xbe5c5643
// 0.310622
0x3e9f09d6
// 0.565931
0x3f10e0da
// -0.161299
0xbe252b96
// -0.126439
0xbe01794a
// -0.102738
0xbdd2684b
// -0.271597
0xbe8b0ec0
// -0.510829
0xbf02c5b3
// -0.337788
0xbeacf299
// -0.401276
0xbecd7401
// -0.054548
0xbd5f6d6b
// 0.480774
0x3ef627f6
// -0.052203
0xbd55d25c
// -0.065110
0xbd855893
// -0.098081
0xbdc8de94
// -0.294695
0xbe96e244
// -0.161529
0xbe2567c0
// 0.178554
0x3e36d6da
// -0.105437
0xbdd7ef39
// -0.649249
0xbf26352e
// 0.540641
0x3f0a676c
// 0.613102
0x3f1cf448
// -0.237910
0xbe739ea3
// -0.168488
0xbe2c8813
// -0.178807
0xbe37191b
// 0.826263
0x3f538601
// -0.070986
0xbd916145
// 1.000000
0x3f800000
// -0.091601
0xbdbb990e
// -0.458086
0xbeea8a2f
// -0.119657
0xbdf50ef7
// -0.094891
0xbdc255fd
// -0.114801
0xbdeb1c92
// -0.172641
0xbe30c8d5
// 0.438920
0x3ee0ba1e
// 0.316484
0x3ea20a32
// -0.586295
0xbf161768
// 0.507534
0x3f01edbd
// -0.095362
0xbdc34cea
// -0.470468
0xbef0e125
// -0.259257
0xbe84bd61
// -0.637209
0xbf232021
// -0.057756
0xbd6c91ae
// -0.115967
0xbded8024
// -0.198512
0xbe4b46aa
// -0.101318
0xbdcf7f96
// 0.261144
0x3e85b4a8
// -0.432767
0xbedd939c
// 0.202923
0x3e4fcb01
// -0.600597
0xbf19c0bd
// 0.135502
0x3e0ac11a
// 0.313421
0x3ea078c2
// 0.363080
0x3eb9e599
// 0.438696
0x3ee09cb2
// 0.316109
0x3ea1d917
// 0.109614
0x3de07d27
// -0.018067
0xbc94023f
// 0.667914
0x3f2afc70
// 0.684156
0x3f2f24df
// 0.672359
0x3f2c1fb2
// 0.191124
0x3e43b61f
// 0.344667
0x3eb07824
// -0.335435
0xbeabbe25
// -0.582691
0xbf152b37
// 0.055019
0x3d615c0d
// -0.539623
0xbf0a24bb
// -0.082822
0xbda99e8e
// 0.420569
0x3ed754da
// -0.572853
0xbf12a67f
// -0.283346
0xbe9112bf
// 0.532396
0x3f084b1a
// -0.249951
0xbe7ff326
// -0.764443
0xbf43b281
// 0.729530
0x3f3ac275
// 0.143497
0x3e12f0f9
// 0.432686
0x3edd890a
// 0.333424
0x3eaab680
// -0.107639
0xbddc71b6
// -0.495878
0xbefde3ac
// 0.184332
0x3e3cc1a1
// 0.157166
0x3e20f012
// -0.175306
0xbe33835e
// -0.045795
0xbd3b9328
// 0.503295
0x3f00d7f4
// -0.271578
0xbe8b0c4e
// 0.228211
0x3e69b017
// -0.210197
0xbe573dd1
// -0.006365
0xbbd08d62
// 0.388358
0x3ec6d6eb
// -0.223579
0xbe64f1e0
// -0.258638
0xbe846c2b
// -0.136728
0xbe0c0287
// 0.581181
0x3f14c840
// -0.139632
0xbe0efb95
// -0.152281
0xbe1bef87
// 0.222266
0x3e6399b8
// 0.125179
0x3e002ed2
// -0.248874
0xbe7ed8ba
// -0.809296
0xbf4f2e08
// 0.372001
0x3ebe76f8
// -0.064399
0xbd83e394
// -0.308508
0xbe9df4b9
// -0.542157
0xbf0acac9
// 0.210269
0x3e5750c6
// 0.208251
0x3e553fa1
// -0.183401
0xbe3bcd5c
// 0.170978
0x3e2f14c9
// -0.389977
0xbec7ab13
// -0.097502
0xbdc7af35
// 0.093276
0x3dbf0771
// 0.182353
0x3e3abacf
// 0.722192
0x3f38e18f
// -0.105106
0xbdd741fb
// -0.091147
0xbdbaab77
// 0.079634
0x3da3170e
// 0.471933
0x3ef1a132
// -0.222781
0xbe6420a9
// -0.629198
0xbf21131f
// -0.062937
0xbd80e529
// 0.834828
0x3f55b746
// -0.473576
0xbef2788d
// 0.901990
0x3f66e8ca
// -0.325939
0xbea6e176
// 0.236066
0x3e71bb32
// -0.339621
0xbeade2df
// 0.017609
0x3c9040bd
// 0.060432
0x3d7787d9
// 0.470187
0x3ef0bc50
// -0.230004
0xbe6b863b
// 0.535330
0x3f090b69
// -0.231115
0xbe6ca96f
// 0.089222
0x3db6b9fc
// -0.200510
0xbe4d528d
// 0.792716
0x3f4aef73
// 0.527132
0x3f06f224
// 0.347102
0x3eb1b756
// -0.402665
0xbece2a10
// 0.014407
0x3c6c0aef
// -0.217034
0xbe5e3e2a
// -0.517617
0xbf04828b
// 0.324851
0x3ea652de
// 0.127321
0x3e02608a
// 0.309712
0x3e9e929b
// -0.601170
0xbf19e64b
// -0.294029
0xbe968b07
// 0.606805
0x3f1b5797
// 0.727331
0x3f3a3255
// 0.086645
0x3db172f3
// 0.677923
0x3f2d8c5c
// 0.299000
0x3e99167b
// -0.251655
0xbe80d8e2
// 0.133526
0x3e08bb2b
// -0.661209
0xbf2944fd
// 0.531158
0x3f07f9f8
// -0.356849
0xbeb6b4e9
// 0.192948
0x3e45944a
// 0.456282
0x3ee99dbb
// 0.341706
0x3eaef419
// 0.502076
0x3f008815
// 0.629366
0x3f211e1c
// -0.121431
0xbdf8b106
// -0.472374
0xbef1daf4
// -0.010127
0xbc25ec08
// 0.002071
0x3b07b9d3
// -0.618042
0xbf1e3805
// -0.287270
0xbe931518
// -0.049503
0xbd4ac396
// 0.327983
0x3ea7ed59
// -0.265776
0xbe8813c8
// 0.211717
0x3e58cc53
// -0.068491
0xbd8c4505
// 0.226537
0x3e67f950
// 0.232618
0x3e6e3376
// 0.347585
0x3eb1f6b5
// 0.005535
0x3bb56213
// -0.267825
0xbe89206a
// 0.276479
0x3e8d8e9f
// -0.620331
0xbf1ece09
// -0.223755
0xbe652007
// 0.560624
0x3f0f8511
// -0.484658
0xbef8250a
// -0.604501
0xbf1ac097
// -0.362422
0xbeb98f5a
// 0.375107
0x3ec00e0c
// 0.460765
0x3eebe972
// -0.376065
0xbec08ba8
// -0.335340
0xbeabb1b0
// -0.181494
0xbe39d9ac
// 0.254055
0x3e821390
// -0.169252
0xbe2d5046
// 0.077930
0x3d9f99b3
// -0.125507
0xbe0084fb
// 0.360748
0x3eb8b401
// -0.601334
0xbf19f10d
// -0.089784
0xbdb7e0c8
// 0.036307
0x3d14b66c
// -0.221878
0xbe6333f0
// -0.492500
0xbefc28fa
// -0.800670
0xbf4cf8bb
// -0.218141
0xbe5f6060
// -0.398881
0xbecc3a12
// 0.420827
0x3ed776af
// -0.718449
0xbf37ec48
// 0.061871
0x3d7d6c47

@ -1,258 +1,258 @@
W
128
// -0.075685
0xbd9b00e8
// 0.339969
0x3eae1066
// -0.450120
0xbee67615
// 0.024984
0x3cccac36
// 0.243736
0x3e7995f2
// -0.034100
0xbd0bacac
// -0.426774
0xbeda822f
// 0.690314
0x3f30b868
// 0.274231
0x3e8c680b
// 0.073052
0x3d959c75
// 0.276922
0x3e8dc8be
// 0.612716
0x3f1cdafc
// 0.190270
0x3e42d60c
// 0.349776
0x3eb315e3
// 0.251384
0x3e80b55b
// -0.233184
0xbe6ec7d8
// -0.335159
0xbeab99f5
// -0.275586
0xbe8d1993
// 0.767494
0x3f447a77
// 0.193275
0x3e45e9c1
// 0.096479
0x3dc596f4
// 0.029003
0x3ced9734
// -0.509049
0xbf02510b
// -0.044553
0xbd367da5
// -0.167529
0xbe2b8cd9
// 0.023044
0x3cbcc635
// 0.093106
0x3dbeae86
// 0.272761
0x3e8ba74a
// -0.455968
0xbee974a4
// 0.383479
0x3ec45764
// 0.441308
0x3ee1f310
// -0.089572
0xbdb77180
// -0.149085
0xbe18a9c2
// 0.039274
0x3d20dd6d
// -0.200554
0xbe4d5e1e
// 0.264069
0x3e873416
// -0.037553
0xbd19d181
// 0.318111
0x3ea2df73
// -0.484130
0xbef7dfe0
// 0.188311
0x3e40d494
// 0.240201
0x3e75f734
// -0.620679
0xbf1ee4ca
// 0.014850
0x3c734ebc
// 0.293435
0x3e963d13
// 0.021510
0x3cb035ea
// -0.045548
0xbd3a90f8
// -0.102307
0xbdd1866e
// 0.699061
0x3f32f5ab
// -0.429654
0xbedbfbaa
// 0.696964
0x3f326c3b
// 0.213389
0x3e5a8293
// 0.080359
0x3da49333
// 0.021498
0x3cb01bc1
// -0.661269
0xbf2948ec
// -0.277478
0xbe8e119b
// 0.465483
0x3eee53cc
// 0.143304
0x3e12be62
// 0.120619
0x3df7074a
// -0.471560
0xbef17056
// 0.559879
0x3f0f543e
// -0.576179
0xbf138075
// 0.447897
0x3ee552b3
// 0.097529
0x3dc7bd82
// 0.319700
0x3ea3afb1
// 0.275706
0x3e8d2957
// -0.405662
0xbecfb2ea
// -0.149729
0xbe19527c
// -0.095124
0xbdc2d020
// 0.271934
0x3e8b3adf
// -0.222797
0xbe6424c7
// 0.022024
0x3cb46aed
// 0.049256
0x3d49c03f
// -0.442030
0xbee251b7
// -0.079106
0xbda2021e
// -0.076695
0xbd9d1215
// -0.558912
0xbf0f14d7
// 0.618017
0x3f1e365b
// 0.000721
0x3a3ceb7e
// 0.388389
0x3ec6dae9
// -0.042532
0xbd2e3669
// 0.093022
0x3dbe8246
// 0.257033
0x3e8399d0
// -0.109388
0xbde006ba
// -0.621574
0xbf1f1f74
// 0.444117
0x3ee3635a
// 0.168396
0x3e2c6fe2
// -0.134553
0xbe09c844
// 0.047515
0x3d429ea6
// 0.125076
0x3e001400
// 0.519664
0x3f0508b8
// -0.281518
0xbe902318
// -0.422689
0xbed86abf
// -0.100020
0xbdccd71e
// 0.261097
0x3e85ae88
// -0.207619
0xbe549a07
// 0.416039
0x3ed50316
// -0.289109
0xbe94060d
// 0.252795
0x3e816e4c
// 0.261009
0x3e85a302
// 0.495787
0x3efdd7c8
// -0.038327
0xbd1cfccc
// 0.163591
0x3e27845d
// -0.451344
0xbee71681
// -0.020204
0xbca58337
// 0.291278
0x3e952262
// -0.224619
0xbe66028d
// 0.406478
0x3ed01de7
// -0.102975
0xbdd2e4cb
// 0.474356
0x3ef2dec2
// -0.840459
0xbf572851
// 0.013904
0x3c63cb9c
// 0.064412
0x3d83ea4e
// -0.213401
0xbe5a85ce
// 0.467234
0x3eef3948
// -0.176031
0xbe344197
// 0.084341
0x3dacbacc
// -0.361621
0xbeb9265a
// -0.130841
0xbe05fb4d
// -0.395623
0xbeca8f0c
// 0.142713
0x3e12234b
// 0.003643
0x3b6eb868
// -0.040086
0xbd2430de
// 0.395721
0x3eca9bf4
// -0.304922
0xbe9c1ec7
// -0.525402
0xbf0680bf
// -0.328494
0xbea8306e
// -0.195498
0xbe483082
// -0.226054
0xbe677ac9
// 0.319726
0x3ea3b31d
// -0.338624
0xbead6019
// 0.640627
0x3f240026
// -0.127590
0xbe02a6f7
// 0.111277
0x3de3e4f0
// 0.320392
0x3ea40a70
// -0.211300
0xbe585ef7
// 0.023379
0x3cbf85a4
// 0.200215
0x3e4d051c
// -0.162792
0xbe26b30f
// -0.189345
0xbe41e38c
// 0.310215
0x3e9ed480
// 0.351577
0x3eb401f2
// -0.578410
0xbf1412aa
// 0.588360
0x3f169ebb
// 0.353877
0x3eb52f6a
// -0.305523
0xbe9c6d8a
// 0.425010
0x3ed99ae1
// 0.533576
0x3f089878
// 0.078530
0x3da0d45d
// -0.165376
0xbe295873
// 0.111516
0x3de46287
// 0.035182
0x3d101b74
// 0.019039
0x3c9bf827
// 0.237179
0x3e72defe
// 0.008524
0x3c0ba712
// -0.392334
0xbec8e006
// 0.185226
0x3e3dabcd
// 0.533160
0x3f087d26
// 0.339511
0x3eadd468
// -0.054373
0xbd5eb667
// 0.718303
0x3f37e2af
// -0.469107
0xbef02ed9
// -0.094462
0xbdc17516
// 0.096787
0x3dc63820
// 0.082994
0x3da9f8dd
// 0.243891
0x3e79bea9
// -0.151097
0xbe1ab90d
// 0.552552
0x3f0d7404
// -0.072954
0xbd9568b7
// 0.024014
0x3cc4b97e
// -0.288799
0xbe93dd86
// -0.007890
0xbc01437a
// -0.447320
0xbee50712
// 0.303368
0x3e9b5302
// 0.338218
0x3ead2ae2
// -0.066340
0xbd87dd23
// 0.214598
0x3e5bbf90
// -0.171499
0xbe2f9d84
// -0.114487
0xbdea7818
// -0.659568
0xbf28d979
// -0.636802
0xbf230578
// -0.185019
0xbe3d759c
// 0.163540
0x3e277724
// 0.024185
0x3cc61feb
// 0.464482
0x3eedd09a
// 0.324171
0x3ea5f9ba
// -0.793803
0xbf4b36a5
// 0.095075
0x3dc2b692
// 0.343062
0x3eafa5c3
// 0.001901
0x3af93599
// -0.603930
0xbf1a9b28
// -0.743121
0xbf3e3d30
// -0.363945
0xbeba5702
// -0.004969
0xbba2d1ce
// 0.036416
0x3d152876
// 0.365178
0x3ebaf8a2
// -0.011900
0xbc42f85b
// 0.382696
0x3ec3f0be
// -0.109893
0xbde10f6e
// -0.499841
0xbeffeb32
// -0.053813
0xbd5c6b24
// 0.487557
0x3ef9a122
// 0.065400
0x3d85f065
// 0.123804
0x3dfd8d2a
// 0.261578
0x3e85ed84
// -0.468869
0xbef00f94
// 0.121617
0x3df9126e
// 0.091780
0x3dbbf701
// 0.386999
0x3ec624ac
// -0.258018
0xbe841af0
// 0.253174
0x3e81a00a
// 0.357616
0x3eb71974
// -0.487589
0xbef9a551
// -0.299356
0xbe994538
// -0.461917
0xbeec8054
// -0.038443
0xbd1d76a2
// -1.000000
0xbf800000
// 0.029370
0x3cf09894
// -0.235690
0xbe7158c8
// 0.289742
0x3e94590c
// 0.015292
0x3c7a8b48
// 0.267262
0x3e88d698
// -0.098540
0xbdc9cf60
// -0.533580
0xbf0898b6
// 0.111998
0x3de55f4a
// -0.545197
0xbf0b920f
// 0.406223
0x3ecffc83
// 0.229173
0x3e6aac65
// -0.205984
0xbe52ed66
// 0.028980
0x3ced6727
// -0.181652
0xbe3a02ec
// -0.173322
0xbe317b71
// -0.196904
0xbe49a152
// 0.622880
0x3f1f7509
// 0.378803
0x3ec1f274
// 0.250157
0x3e801497
// -0.189500
0xbe420c2f
// 0.310605
0x3e9f078f
// 0.170767
0x3e2edd8d
// 0.095170
0x3dc2e880
// 0.187613
0x3e401daa
// -0.225170
0xbe6692e6
// 0.708592
0x3f35664a
// 0.530726
0x3f07dda9
// 0.524975
0x3f0664c6
// 0.074163
0x3d97e2ef
// -0.656683
0xbf281c5e
// -0.300928
0xbe9a134a
// 0.275545
0x3e8d1440
// 0.013806
0x3c6231b5
// 0.434153
0x3ede4949
// -0.441716
0xbee22899
// 0.102288
0x3dd17c57
// 0.299185
0x3e992ebd
// 0.719332
0x3f38261d
// -0.021640
0xbcb14667

@ -0,0 +1,44 @@
W
21
// 0.559857
0x3f0f52c3
// -0.086624
0xbdb167d1
// -0.161097
0xbe24f6a2
// -0.019741
0xbca1b780
// -0.002290
0xbb161b4b
// -0.471900
0xbef19cea
// -0.253670
0xbe81e0ff
// -0.362953
0xbeb9d4eb
// 0.460622
0x3eebd696
// 0.152773
0x3e1c70a3
// -0.455647
0xbee94a87
// -0.208898
0xbe55e95a
// 0.222902
0x3e64404f
// -0.022704
0xbcb9fcbc
// 0.002011
0x3b03c8e4
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0

@ -0,0 +1,24 @@
W
11
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d

@ -0,0 +1,24 @@
W
11
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.035032
0xbd0f7d56
// -0.009913
0xbc226c2f
// 0.021831
0x3cb2d791
// 0.004445
0x3b91a84b
// -0.022704
0xbcb9fcbc
// 0.010668
0x3c2ec8a4
// -0.000787
0xba4e386d

@ -0,0 +1,24 @@
W
11
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.345828
0x3eb11069
// 0.094259
0x3dc10aa6
// -0.213681
0xbe5acf33
// -0.040567
0xbd26293d
// 0.222902
0x3e64404f
// -0.108165
0xbddd85b7
// 0.010668
0x3c2ec8a4
// -0.000787
0xba4e386d

@ -0,0 +1,32 @@
W
15
// -0.197553
0xbe4a4b68
// -0.244706
0xbe7a9422
// -0.234549
0xbe702dae
// -0.430173
0xbedc3fac
// -0.362953
0xbeb9d4eb
// 0.509441
0x3f026abe
// 0.194994
0x3e47ac7e
// -0.384704
0xbec4f7de
// -0.095430
0xbdc370b7
// 0.288754
0x3e93d78e
// -0.108165
0xbddd85b7
// 0.010668
0x3c2ec8a4
// -0.000787
0xba4e386d
// 0.000000
0x0
// 0.000000
0x0

@ -0,0 +1,44 @@
W
21
// 0.559857
0x3f0f52c3
// -0.086624
0xbdb167d1
// -0.161097
0xbe24f6a2
// -0.019741
0xbca1b780
// -0.002290
0xbb161b4b
// -0.610253
0xbf1c398a
// -0.180539
0xbe38df38
// -0.432002
0xbedd2f5e
// 0.509441
0x3f026abe
// 0.194994
0x3e47ac7e
// -0.384704
0xbec4f7de
// -0.095430
0xbdc370b7
// 0.288754
0x3e93d78e
// -0.108165
0xbddd85b7
// 0.010668
0x3c2ec8a4
// -0.000787
0xba4e386d
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0

@ -0,0 +1,36 @@
W
17
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f

@ -0,0 +1,36 @@
W
17
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.035032
0xbd0f7d56
// -0.009913
0xbc226c2f
// 0.021831
0x3cb2d791
// 0.004445
0x3b91a84b
// -0.022704
0xbcb9fcbc
// 0.010668
0x3c2ec8a4
// -0.011697
0xbc3fa553
// -0.003610
0xbb6c9a9e
// 0.006927
0x3be2fda7
// -0.000591
0xba1b0d5f

@ -0,0 +1,36 @@
W
17
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.345828
0x3eb11069
// 0.094259
0x3dc10aa6
// -0.213681
0xbe5acf33
// -0.040567
0xbd26293d
// 0.222902
0x3e64404f
// -0.108165
0xbddd85b7
// 0.118375
0x3df26e7c
// 0.033731
0x3d0a290d
// -0.067867
0xbd8afdcd
// 0.006927
0x3be2fda7
// -0.000591
0xba1b0d5f

@ -0,0 +1,36 @@
W
17
// 0.000000
0x0
// -0.197553
0xbe4a4b68
// -0.244706
0xbe7a9422
// -0.234549
0xbe702dae
// -0.430173
0xbedc3fac
// -0.362953
0xbeb9d4eb
// 0.509441
0x3f026abe
// 0.133467
0x3e08ab84
// -0.463864
0xbeed7f9e
// -0.170575
0xbe2eab46
// 0.139785
0x3e0f23d1
// -0.198133
0xbe4ae353
// 0.168685
0x3e2cbba5
// 0.083243
0x3daa7b83
// -0.067867
0xbd8afdcd
// 0.006927
0x3be2fda7
// -0.000591
0xba1b0d5f

@ -0,0 +1,16 @@
W
7
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c

@ -0,0 +1,44 @@
W
21
// 0.559857
0x3f0f52c3
// -0.086624
0xbdb167d1
// -0.161097
0xbe24f6a2
// -0.019741
0xbca1b780
// -0.002290
0xbb161b4b
// -0.610253
0xbf1c398a
// -0.006174
0xbbca4ebc
// -0.450626
0xbee6b871
// 0.453567
0x3ee839e2
// 0.225156
0x3e668f35
// -0.515781
0xbf040a37
// -0.170575
0xbe2eab46
// 0.139785
0x3e0f23d1
// -0.198133
0xbe4ae353
// 0.168685
0x3e2cbba5
// 0.083243
0x3daa7b83
// -0.067867
0xbd8afdcd
// 0.006927
0x3be2fda7
// -0.000591
0xba1b0d5f
// 0.000000
0x0
// 0.000000
0x0

@ -0,0 +1,40 @@
W
19
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f
// 0.002134
0x3b0bd8f3

@ -0,0 +1,40 @@
W
19
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.035032
0xbd0f7d56
// -0.009913
0xbc226c2f
// 0.021831
0x3cb2d791
// 0.004445
0x3b91a84b
// -0.022704
0xbcb9fcbc
// 0.010668
0x3c2ec8a4
// -0.011697
0xbc3fa553
// -0.003610
0xbb6c9a9e
// 0.006927
0x3be2fda7
// -0.024075
0xbcc537eb
// 0.002134
0x3b0bd8f3

@ -0,0 +1,40 @@
W
19
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.345828
0x3eb11069
// 0.094259
0x3dc10aa6
// -0.213681
0xbe5acf33
// -0.040567
0xbd26293d
// 0.222902
0x3e64404f
// -0.108165
0xbddd85b7
// 0.118375
0x3df26e7c
// 0.033731
0x3d0a290d
// -0.067867
0xbd8afdcd
// 0.238749
0x3e747aa2
// -0.024075
0xbcc537eb
// 0.002134
0x3b0bd8f3

@ -0,0 +1,40 @@
W
19
// 0.000000
0x0
// 0.000000
0x0
// -0.197553
0xbe4a4b68
// -0.244706
0xbe7a9422
// -0.234549
0xbe702dae
// -0.430173
0xbedc3fac
// -0.362953
0xbeb9d4eb
// 0.509441
0x3f026abe
// 0.133467
0x3e08ab84
// -0.463864
0xbeed7f9e
// -0.170575
0xbe2eab46
// 0.007358
0x3bf11816
// -0.312659
0xbea014e5
// -0.023755
0xbcc298d4
// -0.224548
0xbe65effe
// -0.246497
0xbe7c69af
// 0.238749
0x3e747aa2
// -0.024075
0xbcc537eb
// 0.002134
0x3b0bd8f3

@ -0,0 +1,44 @@
W
21
// 0.559857
0x3f0f52c3
// -0.086624
0xbdb167d1
// -0.161097
0xbe24f6a2
// -0.019741
0xbca1b780
// -0.002290
0xbb161b4b
// -0.610253
0xbf1c398a
// -0.006174
0xbbca4ebc
// -0.450626
0xbee6b871
// 0.453567
0x3ee839e2
// 0.600449
0x3f19b703
// -0.714154
0xbf36d2cb
// 0.016727
0x3c890723
// 0.007358
0x3bf11816
// -0.312659
0xbea014e5
// -0.023755
0xbcc298d4
// -0.224548
0xbe65effe
// -0.246497
0xbe7c69af
// 0.238749
0x3e747aa2
// -0.024075
0xbcc537eb
// 0.002134
0x3b0bd8f3
// 0.000000
0x0

@ -0,0 +1,44 @@
W
21
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f
// 0.002134
0x3b0bd8f3
// -0.001761
0xbae6c59c

@ -0,0 +1,44 @@
W
21
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.035032
0xbd0f7d56
// -0.009913
0xbc226c2f
// 0.021831
0x3cb2d791
// 0.004445
0x3b91a84b
// -0.022704
0xbcb9fcbc
// 0.010668
0x3c2ec8a4
// -0.011697
0xbc3fa553
// -0.003610
0xbb6c9a9e
// 0.006927
0x3be2fda7
// -0.024075
0xbcc537eb
// 0.021509
0x3cb03476
// -0.001761
0xbae6c59c

@ -0,0 +1,44 @@
W
21
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.345828
0x3eb11069
// 0.094259
0x3dc10aa6
// -0.213681
0xbe5acf33
// -0.040567
0xbd26293d
// 0.222902
0x3e64404f
// -0.108165
0xbddd85b7
// 0.118375
0x3df26e7c
// 0.033731
0x3d0a290d
// -0.067867
0xbd8afdcd
// 0.238749
0x3e747aa2
// -0.215347
0xbe5c83f3
// 0.021509
0x3cb03476
// -0.001761
0xbae6c59c

@ -0,0 +1,44 @@
W
21
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.197553
0xbe4a4b68
// -0.244706
0xbe7a9422
// -0.234549
0xbe702dae
// -0.430173
0xbedc3fac
// -0.362953
0xbeb9d4eb
// 0.509441
0x3f026abe
// 0.133467
0x3e08ab84
// -0.463864
0xbeed7f9e
// -0.170575
0xbe2eab46
// 0.007358
0x3bf11816
// -0.203396
0xbe5046f0
// 0.070740
0x3d90dfee
// -0.065770
0xbd86b256
// 0.007457
0x3bf45bb3
// 0.386134
0x3ec5b357
// -0.215347
0xbe5c83f3
// 0.021509
0x3cb03476
// -0.001761
0xbae6c59c

@ -0,0 +1,16 @@
W
7
// 0.000000
0x0
// 0.000000
0x0
// -0.035032
0xbd0f7d56
// -0.009913
0xbc226c2f
// 0.021831
0x3cb2d791
// 0.004445
0x3b91a84b
// -0.000574
0xba16913c

@ -0,0 +1,44 @@
W
21
// 0.559857
0x3f0f52c3
// -0.086624
0xbdb167d1
// -0.161097
0xbe24f6a2
// -0.019741
0xbca1b780
// -0.002290
0xbb161b4b
// -0.610253
0xbf1c398a
// -0.006174
0xbbca4ebc
// -0.450626
0xbee6b871
// 0.453567
0x3ee839e2
// 0.600449
0x3f19b703
// -1.023802
0xbf830bf5
// 0.180402
0x3e38bb2e
// -0.147183
0xbe16b706
// -0.203396
0xbe5046f0
// 0.070740
0x3d90dfee
// -0.065770
0xbd86b256
// 0.007457
0x3bf45bb3
// 0.386134
0x3ec5b357
// -0.215347
0xbe5c83f3
// 0.021509
0x3cb03476
// -0.001761
0xbae6c59c

@ -0,0 +1,48 @@
W
23
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f
// 0.002134
0x3b0bd8f3
// -0.001761
0xbae6c59c
// 0.001126
0x3a9392cd

@ -0,0 +1,48 @@
W
23
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.035032
0xbd0f7d56
// -0.009913
0xbc226c2f
// 0.021831
0x3cb2d791
// 0.004445
0x3b91a84b
// -0.022704
0xbcb9fcbc
// 0.010668
0x3c2ec8a4
// -0.011697
0xbc3fa553
// -0.003610
0xbb6c9a9e
// 0.006927
0x3be2fda7
// -0.024075
0xbcc537eb
// 0.021509
0x3cb03476
// -0.014151
0xbc67d8eb
// 0.001126
0x3a9392cd

@ -0,0 +1,48 @@
W
23
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.345828
0x3eb11069
// 0.094259
0x3dc10aa6
// -0.213681
0xbe5acf33
// -0.040567
0xbd26293d
// 0.222902
0x3e64404f
// -0.108165
0xbddd85b7
// 0.118375
0x3df26e7c
// 0.033731
0x3d0a290d
// -0.067867
0xbd8afdcd
// 0.238749
0x3e747aa2
// -0.215347
0xbe5c83f3
// 0.143824
0x3e134693
// -0.014151
0xbc67d8eb
// 0.001126
0x3a9392cd

@ -0,0 +1,48 @@
W
23
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.197553
0xbe4a4b68
// -0.244706
0xbe7a9422
// -0.234549
0xbe702dae
// -0.430173
0xbedc3fac
// -0.362953
0xbeb9d4eb
// 0.509441
0x3f026abe
// 0.133467
0x3e08ab84
// -0.463864
0xbeed7f9e
// -0.170575
0xbe2eab46
// 0.007358
0x3bf11816
// -0.203396
0xbe5046f0
// 0.000868
0x3a638110
// -0.126197
0xbe0139b6
// -0.094078
0xbdc0abfd
// 0.223736
0x3e651b08
// -0.309596
0xbe9e836a
// 0.143824
0x3e134693
// -0.014151
0xbc67d8eb
// 0.001126
0x3a9392cd

@ -0,0 +1,48 @@
W
23
// 0.000000
0x0
// 0.559857
0x3f0f52c3
// -0.086624
0xbdb167d1
// -0.161097
0xbe24f6a2
// -0.019741
0xbca1b780
// -0.002290
0xbb161b4b
// -0.610253
0xbf1c398a
// -0.006174
0xbbca4ebc
// -0.450626
0xbee6b871
// 0.453567
0x3ee839e2
// 0.600449
0x3f19b703
// -1.023802
0xbf830bf5
// 0.378415
0x3ec1bf95
// -0.251849
0xbe80f251
// -0.104571
0xbdd62922
// 0.000868
0x3a638110
// -0.126197
0xbe0139b6
// -0.094078
0xbdc0abfd
// 0.223736
0x3e651b08
// -0.309596
0xbe9e836a
// 0.143824
0x3e134693
// -0.014151
0xbc67d8eb
// 0.001126
0x3a9392cd

@ -0,0 +1,52 @@
W
25
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f
// 0.002134
0x3b0bd8f3
// -0.001761
0xbae6c59c
// 0.001126
0x3a9392cd
// 0.000667
0x3a2ef04f

@ -0,0 +1,52 @@
W
25
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.035032
0xbd0f7d56
// -0.009913
0xbc226c2f
// 0.021831
0x3cb2d791
// 0.004445
0x3b91a84b
// -0.022704
0xbcb9fcbc
// 0.010668
0x3c2ec8a4
// -0.011697
0xbc3fa553
// -0.003610
0xbb6c9a9e
// 0.006927
0x3be2fda7
// -0.024075
0xbcc537eb
// 0.021509
0x3cb03476
// -0.014151
0xbc67d8eb
// -0.006218
0xbbcbc03c
// 0.000667
0x3a2ef04f

@ -0,0 +1,52 @@
W
25
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.345828
0x3eb11069
// 0.094259
0x3dc10aa6
// -0.213681
0xbe5acf33
// -0.040567
0xbd26293d
// 0.222902
0x3e64404f
// -0.108165
0xbddd85b7
// 0.118375
0x3df26e7c
// 0.033731
0x3d0a290d
// -0.067867
0xbd8afdcd
// 0.238749
0x3e747aa2
// -0.215347
0xbe5c83f3
// 0.143824
0x3e134693
// 0.058347
0x3d6efd60
// -0.006218
0xbbcbc03c
// 0.000667
0x3a2ef04f

@ -0,0 +1,52 @@
W
25
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.197553
0xbe4a4b68
// -0.244706
0xbe7a9422
// -0.234549
0xbe702dae
// -0.430173
0xbedc3fac
// -0.362953
0xbeb9d4eb
// 0.509441
0x3f026abe
// 0.133467
0x3e08ab84
// -0.463864
0xbeed7f9e
// -0.170575
0xbe2eab46
// 0.007358
0x3bf11816
// -0.203396
0xbe5046f0
// 0.000868
0x3a638110
// -0.167611
0xbe2ba232
// -0.129894
0xbe0502f5
// 0.163554
0x3e277ac1
// -0.405852
0xbecfcbe5
// 0.087961
0x3db424c0
// 0.058347
0x3d6efd60
// -0.006218
0xbbcbc03c
// 0.000667
0x3a2ef04f

@ -0,0 +1,16 @@
W
7
// 0.000000
0x0
// 0.345828
0x3eb11069
// 0.094259
0x3dc10aa6
// -0.213681
0xbe5acf33
// -0.040567
0xbd26293d
// 0.004445
0x3b91a84b
// -0.000574
0xba16913c

@ -0,0 +1,52 @@
W
25
// 0.000000
0x0
// 0.000000
0x0
// 0.559857
0x3f0f52c3
// -0.086624
0xbdb167d1
// -0.161097
0xbe24f6a2
// -0.019741
0xbca1b780
// -0.002290
0xbb161b4b
// -0.610253
0xbf1c398a
// -0.006174
0xbbca4ebc
// -0.450626
0xbee6b871
// 0.453567
0x3ee839e2
// 0.600449
0x3f19b703
// -1.023802
0xbf830bf5
// 0.378415
0x3ec1bf95
// -0.134483
0xbe09b5de
// -0.166608
0xbe2a9b50
// 0.059443
0x3d737aa5
// -0.167611
0xbe2ba232
// -0.129894
0xbe0502f5
// 0.163554
0x3e277ac1
// -0.405852
0xbecfcbe5
// 0.087961
0x3db424c0
// 0.058347
0x3d6efd60
// -0.006218
0xbbcbc03c
// 0.000667
0x3a2ef04f

@ -0,0 +1,10 @@
W
4
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c

@ -0,0 +1,12 @@
W
5
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// -0.014972
0xbc754f20
// 0.020067
0x3ca46331
// 0.006321
0x3bcf1e84

@ -0,0 +1,14 @@
W
6
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// 0.149357
0x3e18f10f
// -0.197447
0xbe4a2f7c
// -0.062398
0xbd7f9506

@ -0,0 +1,24 @@
W
11
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.756230
0xbf41984d
// -0.364123
0xbeba6e45
// 0.040449
0x3d25ae50
// -0.009429
0xbc1a7d6a
// 0.078608
0x3da0fd36
// 0.147228
0x3e16c2ea
// 0.035645
0x3d12001c

@ -0,0 +1,30 @@
W
14
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.756230
0xbf41984d
// -0.364123
0xbeba6e45
// 0.040449
0x3d25ae50
// -0.009429
0xbc1a7d6a
// 0.358023
0x3eb74ebf
// -0.044241
0xbd353602
// 0.320230
0x3ea3f539
// 0.333258
0x3eaaa0c4
// -0.276482
0xbe8d8eff
// -0.101015
0xbdcee10f

@ -0,0 +1,12 @@
W
5
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4

@ -0,0 +1,14 @@
W
6
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// -0.014972
0xbc754f20
// 0.020067
0x3ca46331
// 0.008332
0x3c08817b
// -0.022129
0xbcb54832

@ -0,0 +1,16 @@
W
7
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// 0.149357
0x3e18f10f
// -0.195436
0xbe482059
// -0.084527
0xbdad1c8f
// 0.218456
0x3e5fb30c

@ -0,0 +1,26 @@
W
12
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.386252
0xbec5c2c9
// 0.258906
0x3e848f50
// -0.177761
0xbe3606e1
// -0.211438
0xbe58834e
// -0.034116
0xbd0bbd90
// -0.072279
0xbd940711
// -0.124793
0xbdff9337

@ -0,0 +1,32 @@
W
15
// -0.197553
0xbe4a4b68
// -0.244706
0xbe7a9422
// -0.234549
0xbe702dae
// -0.430173
0xbedc3fac
// -0.238160
0xbe73e03b
// 0.568545
0x3f118c2f
// 0.334118
0x3eab1179
// -0.165600
0xbe299324
// -0.040567
0xbd26293d
// 0.004445
0x3b91a84b
// -0.000574
0xba16913c
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0

@ -0,0 +1,32 @@
W
15
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.386252
0xbec5c2c9
// 0.258906
0x3e848f50
// -0.177761
0xbe3606e1
// 0.067976
0x3d8b3728
// -0.225585
0xbe66ffce
// 0.212307
0x3e5966e2
// 0.208465
0x3e5577ed
// -0.099978
0xbdccc147
// -0.287951
0xbe936e5a
// 0.353656
0x3eb51268

@ -0,0 +1,14 @@
W
6
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d

@ -0,0 +1,16 @@
W
7
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// -0.014972
0xbc754f20
// 0.020067
0x3ca46331
// 0.008332
0x3c08817b
// -0.022916
0xbcbbb9f6
// 0.008657
0x3c0dd66b

@ -0,0 +1,18 @@
W
8
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// 0.149357
0x3e18f10f
// -0.195436
0xbe482059
// -0.085314
0xbdaeb900
// 0.227114
0x3e689073
// -0.085462
0xbdaf0688

@ -0,0 +1,28 @@
W
13
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.267563
0x3e88fe03
// -0.263222
0xbe86c513
// -0.145586
0xbe151480
// 0.079352
0x3da28334
// -0.001336
0xbaaf1c08
// -0.082572
0xbda91b82
// 0.048820
0x3d47f729

@ -0,0 +1,34 @@
W
16
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.267563
0x3e88fe03
// -0.263222
0xbe86c513
// 0.133829
0x3e090a62
// -0.112117
0xbde59da0
// 0.283250
0x3e910619
// 0.250686
0x3e8059e4
// -0.051158
0xbd518b65
// -0.357001
0xbeb6c8cd
// 0.426787
0x3eda83cb
// -0.138353
0xbe0dac54

@ -0,0 +1,20 @@
W
9
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f

@ -0,0 +1,22 @@
W
10
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// -0.014972
0xbc754f20
// 0.020067
0x3ca46331
// 0.008332
0x3c08817b
// -0.022916
0xbcbbb9f6
// 0.009649
0x3c1e14ca
// -0.010492
0xbc2be7ea
// -0.005193
0xbbaa2bba
// 0.006509
0x3bd549e2

@ -0,0 +1,24 @@
W
11
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// 0.149357
0x3e18f10f
// -0.195436
0xbe482059
// -0.085314
0xbdaeb900
// 0.228105
0x3e699459
// -0.095954
0xbdc48386
// 0.102514
0x3dd1f2ac
// 0.051937
0x3d54bb9e
// -0.064257
0xbd8398f8

@ -0,0 +1,34 @@
W
16
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// -0.043072
0xbd306caa
// 0.048295
0x3d45d131
// -0.243600
0xbe79724b
// -0.182783
0xbe3b2b7b
// 0.043213
0x3d31004f
// -0.030629
0xbcfaea48
// 0.005794
0x3bbddd33
// 0.036706
0x3d16596c

@ -0,0 +1,44 @@
W
21
// 0.559857
0x3f0f52c3
// -0.086624
0xbdb167d1
// -0.161097
0xbe24f6a2
// -0.019741
0xbca1b780
// -0.355946
0xbeb63e9e
// -0.284964
0xbe91e6d3
// -0.430173
0xbedc3fac
// -0.238160
0xbe73e03b
// 0.568545
0x3f118c2f
// 0.334118
0x3eab1179
// -0.165600
0xbe299324
// -0.040567
0xbd26293d
// 0.004445
0x3b91a84b
// -0.000574
0xba16913c
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0

@ -0,0 +1,40 @@
W
19
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// 0.236342
0x3e7203b8
// -0.143174
0xbe129c1e
// 0.040986
0x3d27e082
// 0.150475
0x3e1a160e
// -0.056765
0xbd688240
// -0.387630
0xbec67771
// 0.519604
0x3f0504bc
// -0.157109
0xbe20e125
// 0.083575
0x3dab2990
// 0.128527
0x3e039cb5
// -0.104024
0xbdd50a98

@ -0,0 +1,22 @@
W
10
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f
// 0.002134
0x3b0bd8f3

@ -0,0 +1,24 @@
W
11
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// -0.014972
0xbc754f20
// 0.020067
0x3ca46331
// 0.008332
0x3c08817b
// -0.022916
0xbcbbb9f6
// 0.009649
0x3c1e14ca
// -0.010492
0xbc2be7ea
// -0.005193
0xbbaa2bba
// 0.008643
0x3c0d9b2e
// -0.023483
0xbcc05f80

@ -0,0 +1,26 @@
W
12
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// 0.149357
0x3e18f10f
// -0.195436
0xbe482059
// -0.085314
0xbdaeb900
// 0.228105
0x3e699459
// -0.095954
0xbdc48386
// 0.102514
0x3dd1f2ac
// 0.054071
0x3d5d792d
// -0.087740
0xbdb3b0d8
// 0.231822
0x3e6d62b5

@ -0,0 +1,36 @@
W
17
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// -0.043072
0xbd306caa
// 0.050429
0x3d4e8ec0
// -0.267083
0xbe88bf1d
// 0.049039
0x3d48dcea
// -0.135417
0xbe0aaab4
// -0.338421
0xbead4584
// -0.186645
0xbe3f1fd6
// -0.077820
0xbd9f603a
// -0.132427
0xbe079b10

@ -0,0 +1,42 @@
W
20
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// 0.236342
0x3e7203b8
// -0.141040
0xbe106cba
// 0.017503
0x3c8f6183
// 0.382297
0x3ec3bc61
// -0.235395
0xbe710b58
// -0.695422
0xbf320728
// 0.327164
0x3ea78219
// -0.271635
0xbe8b13ce
// -0.048852
0xbd48191f
// 0.315830
0x3ea1b470
// -0.302397
0xbe9ad3cd
// 0.375293
0x3ec0266b

@ -0,0 +1,24 @@
W
11
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f
// 0.002134
0x3b0bd8f3
// -0.001761
0xbae6c59c

@ -0,0 +1,26 @@
W
12
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// -0.014972
0xbc754f20
// 0.020067
0x3ca46331
// 0.008332
0x3c08817b
// -0.022916
0xbcbbb9f6
// 0.009649
0x3c1e14ca
// -0.010492
0xbc2be7ea
// -0.005193
0xbbaa2bba
// 0.008643
0x3c0d9b2e
// -0.025244
0xbccecbda
// 0.019375
0x3c9eb957

@ -0,0 +1,28 @@
W
13
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// 0.149357
0x3e18f10f
// -0.195436
0xbe482059
// -0.085314
0xbdaeb900
// 0.228105
0x3e699459
// -0.095954
0xbdc48386
// 0.102514
0x3dd1f2ac
// 0.054071
0x3d5d792d
// -0.089500
0xbdb74bef
// 0.251197
0x3e809cf0
// -0.191273
0xbe43dcf6

@ -0,0 +1,38 @@
W
18
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// -0.043072
0xbd306caa
// 0.050429
0x3d4e8ec0
// -0.268844
0xbe89a5e3
// 0.068414
0x3d8c1ccb
// -0.326689
0xbea743d5
// -0.191036
0xbe439efd
// 0.067309
0x3d89d96c
// 0.080958
0x3da5cd6b
// -0.037933
0xbd1b5ff9
// 0.109264
0x3ddfc5b5

@ -0,0 +1,20 @@
W
9
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4

@ -0,0 +1,44 @@
W
21
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// 0.236342
0x3e7203b8
// -0.141040
0xbe106cba
// 0.015742
0x3c80f52a
// 0.401672
0x3ecda7f7
// -0.426667
0xbeda7427
// -0.548037
0xbf0c4c26
// 0.581119
0x3f14c430
// -0.112857
0xbde72194
// 0.045642
0x3d3af328
// 0.425094
0x3ed9a5dd
// -0.456937
0xbee9f3b1
// 0.538968
0x3f09f9c8
// -0.309648
0xbe9e8a3f

@ -0,0 +1,26 @@
W
12
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f
// 0.002134
0x3b0bd8f3
// -0.001761
0xbae6c59c
// 0.001126
0x3a9392cd

@ -0,0 +1,28 @@
W
13
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// -0.014972
0xbc754f20
// 0.020067
0x3ca46331
// 0.008332
0x3c08817b
// -0.022916
0xbcbbb9f6
// 0.009649
0x3c1e14ca
// -0.010492
0xbc2be7ea
// -0.005193
0xbbaa2bba
// 0.008643
0x3c0d9b2e
// -0.025244
0xbccecbda
// 0.020501
0x3ca7f284
// -0.012390
0xbc4b0037

@ -0,0 +1,30 @@
W
14
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// 0.149357
0x3e18f10f
// -0.195436
0xbe482059
// -0.085314
0xbdaeb900
// 0.228105
0x3e699459
// -0.095954
0xbdc48386
// 0.102514
0x3dd1f2ac
// 0.054071
0x3d5d792d
// -0.089500
0xbdb74bef
// 0.252323
0x3e813083
// -0.203663
0xbe508cf9
// 0.122315
0x3dfa8008

@ -0,0 +1,40 @@
W
19
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// -0.043072
0xbd306caa
// 0.050429
0x3d4e8ec0
// -0.268844
0xbe89a5e3
// 0.069540
0x3d8e6b16
// -0.339080
0xbead9bd7
// -0.068722
0xbd8cbdf2
// -0.026940
0xbcdcb15d
// -0.081440
0xbda6c9e0
// -0.139469
0xbe0ed0da
// 0.048837
0x3d480940
// -0.069872
0xbd8f18ec

@ -0,0 +1,46 @@
W
22
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// 0.236342
0x3e7203b8
// -0.141040
0xbe106cba
// 0.015742
0x3c80f52a
// 0.402798
0x3ece3b8a
// -0.439058
0xbee0cc29
// -0.425722
0xbed9f849
// 0.486869
0x3ef946ee
// -0.275255
0xbe8cee38
// -0.055893
0xbd64f049
// 0.364667
0x3ebab598
// -0.526809
0xbf06dcf6
// 0.637793
0x3f234660
// -0.414315
0xbed4210c
// 0.198013
0x3e4ac3fb

@ -0,0 +1,28 @@
W
13
// 0.003183
0x3b509f51
// 0.001190
0x3a9bfd5d
// -0.001876
0xbaf5d8e1
// -0.000574
0xba16913c
// 0.002011
0x3b03c8e4
// -0.000787
0xba4e386d
// 0.000991
0x3a81f2fd
// 0.000418
0x39db3c48
// -0.000591
0xba1b0d5f
// 0.002134
0x3b0bd8f3
// -0.001761
0xbae6c59c
// 0.001126
0x3a9392cd
// 0.000667
0x3a2ef04f

@ -0,0 +1,30 @@
W
14
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// -0.014972
0xbc754f20
// 0.020067
0x3ca46331
// 0.008332
0x3c08817b
// -0.022916
0xbcbbb9f6
// 0.009649
0x3c1e14ca
// -0.010492
0xbc2be7ea
// -0.005193
0xbbaa2bba
// 0.008643
0x3c0d9b2e
// -0.025244
0xbccecbda
// 0.020501
0x3ca7f284
// -0.011723
0xbc401132
// -0.007344
0xbbf0a4ef

@ -0,0 +1,32 @@
W
15
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// 0.149357
0x3e18f10f
// -0.195436
0xbe482059
// -0.085314
0xbdaeb900
// 0.228105
0x3e699459
// -0.095954
0xbdc48386
// 0.102514
0x3dd1f2ac
// 0.054071
0x3d5d792d
// -0.089500
0xbdb74bef
// 0.252323
0x3e813083
// -0.202995
0xbe4fde09
// 0.114971
0x3deb75b9
// 0.072498
0x3d9479cd

@ -0,0 +1,42 @@
W
20
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// -0.043072
0xbd306caa
// 0.050429
0x3d4e8ec0
// -0.268844
0xbe89a5e3
// 0.069540
0x3d8e6b16
// -0.338412
0xbead445f
// -0.076066
0xbd9bc841
// 0.045558
0x3d3a9aec
// -0.137303
0xbe0c9923
// -0.235725
0xbe7161cf
// -0.011345
0xbc39df6b
// -0.105688
0xbdd872da
// -0.041414
0xbd29a1f1

@ -0,0 +1,20 @@
W
9
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0
// -0.035032
0xbd0f7d56
// -0.009913
0xbc226c2f
// 0.021831
0x3cb2d791
// 0.004445
0x3b91a84b
// -0.022704
0xbcb9fcbc
// 0.002011
0x3b03c8e4

@ -0,0 +1,48 @@
W
23
// 0.003183
0x3b509f51
// -0.033842
0xbd0a9d6c
// 0.330856
0x3ea965f0
// -0.117120
0xbdefdcdb
// -0.754219
0xbf411484
// -0.387038
0xbec629e5
// 0.268554
0x3e897ff6
// -0.273715
0xbe8c2452
// 0.236342
0x3e7203b8
// -0.141040
0xbe106cba
// 0.015742
0x3c80f52a
// 0.402798
0x3ece3b8a
// -0.438390
0xbee074b0
// -0.433066
0xbeddbadd
// 0.559367
0x3f0f32b1
// -0.331118
0xbea98851
// -0.152149
0xbe1bcd07
// 0.304485
0x3e9be574
// -0.562625
0xbf100834
// 0.596378
0x3f18ac41
// -0.355739
0xbeb62378
// 0.135976
0x3e0b3d3c
// 0.117366
0x3df05d87

@ -0,0 +1,20 @@
W
9
// 0.000000
0x0
// 0.000000
0x0
// 0.345828
0x3eb11069
// 0.094259
0x3dc10aa6
// -0.213681
0xbe5acf33
// -0.040567
0xbd26293d
// 0.222902
0x3e64404f
// -0.022704
0xbcb9fcbc
// 0.002011
0x3b03c8e4

@ -0,0 +1,32 @@
W
15
// -0.197553
0xbe4a4b68
// -0.244706
0xbe7a9422
// -0.234549
0xbe702dae
// -0.430173
0xbedc3fac
// -0.362953
0xbeb9d4eb
// 0.460622
0x3eebd696
// 0.152773
0x3e1c70a3
// -0.455647
0xbee94a87
// -0.208898
0xbe55e95a
// 0.222902
0x3e64404f
// -0.022704
0xbcb9fcbc
// 0.002011
0x3b03c8e4
// 0.000000
0x0
// 0.000000
0x0
// 0.000000
0x0

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save