Multithread approach to 6DOF Mag Tracker

Dependencies:   mbed mbed-rtos

Files at this revision

API Documentation at this revision

Comitter:
darkraxx
Date:
Thu May 21 13:10:58 2020 +0000
Commit message:
Multithread approach Mag Track

Changed in this revision

MadgwickAHRS.cpp Show annotated file Show diff for this revision Revisions of this file
MadgwickAHRS.h Show annotated file Show diff for this revision Revisions of this file
Mag_track.cpp Show annotated file Show diff for this revision Revisions of this file
Mag_track.h Show annotated file Show diff for this revision Revisions of this file
Scattered_interpolator.cpp Show annotated file Show diff for this revision Revisions of this file
Scattered_interpolator.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MadgwickAHRS.cpp	Thu May 21 13:10:58 2020 +0000
@@ -0,0 +1,228 @@
+//=====================================================================================================
+// MadgwickAHRS.c
+//=====================================================================================================
+//
+// Implementation of Madgwick's IMU and AHRS algorithms.
+// See: http://www.x-io.co.uk/node/8#open_source_ahrs_and_imu_algorithms
+//
+// Date         Author          Notes
+// 29/09/2011   SOH Madgwick    Initial release
+// 02/10/2011   SOH Madgwick    Optimised for reduced CPU load
+// 19/02/2012   SOH Madgwick    Magnetometer measurement is normalised
+//
+//=====================================================================================================
+
+//---------------------------------------------------------------------------------------------------
+// Header files
+
+#include "MadgwickAHRS.h"
+#include <math.h>
+
+//---------------------------------------------------------------------------------------------------
+// Definitions
+
+#define sampleFreq  100.0f      // sample frequency in Hz
+#define betaDef     10.0f        // 2 * proportional gain
+
+//---------------------------------------------------------------------------------------------------
+// Variable definitions
+
+volatile float beta = betaDef;                              // 2 * proportional gain (Kp)
+volatile float q0 = 1.0f, q1 = 0.0f, q2 = 0.0f, q3 = 0.0f;  // quaternion of sensor frame relative to auxiliary frame
+
+//---------------------------------------------------------------------------------------------------
+// Function declarations
+
+float invSqrt(float x);
+
+//====================================================================================================
+// Functions
+
+//---------------------------------------------------------------------------------------------------
+// AHRS algorithm update
+
+void MadgwickAHRSupdate(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz) {
+    float recipNorm;
+    float s0, s1, s2, s3;
+    float qDot1, qDot2, qDot3, qDot4;
+    float hx, hy;
+    float _2q0mx, _2q0my, _2q0mz, _2q1mx, _2bx, _2bz, _4bx, _4bz, _2q0, _2q1, _2q2, _2q3, _2q0q2, _2q2q3, q0q0, q0q1, q0q2, q0q3, q1q1, q1q2, q1q3, q2q2, q2q3, q3q3;
+
+    // Use IMU algorithm if magnetometer measurement invalid (avoids NaN in magnetometer normalisation)
+    if((mx == 0.0f) && (my == 0.0f) && (mz == 0.0f)) {
+        MadgwickAHRSupdateIMU(gx, gy, gz, ax, ay, az);
+        return;
+    }
+
+    // Rate of change of quaternion from gyroscope
+    qDot1 = 0.5f * (-q1 * gx - q2 * gy - q3 * gz);
+    qDot2 = 0.5f * (q0 * gx + q2 * gz - q3 * gy);
+    qDot3 = 0.5f * (q0 * gy - q1 * gz + q3 * gx);
+    qDot4 = 0.5f * (q0 * gz + q1 * gy - q2 * gx);
+
+    // Compute feedback only if accelerometer measurement valid (avoids NaN in accelerometer normalisation)
+    if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f))) {
+
+        // Normalise accelerometer measurement
+        recipNorm = invSqrt(ax * ax + ay * ay + az * az);
+        ax *= recipNorm;
+        ay *= recipNorm;
+        az *= recipNorm;   
+
+        // Normalise magnetometer measurement
+        recipNorm = invSqrt(mx * mx + my * my + mz * mz);
+        mx *= recipNorm;
+        my *= recipNorm;
+        mz *= recipNorm;
+
+        // Auxiliary variables to avoid repeated arithmetic
+        _2q0mx = 2.0f * q0 * mx;
+        _2q0my = 2.0f * q0 * my;
+        _2q0mz = 2.0f * q0 * mz;
+        _2q1mx = 2.0f * q1 * mx;
+        _2q0 = 2.0f * q0;
+        _2q1 = 2.0f * q1;
+        _2q2 = 2.0f * q2;
+        _2q3 = 2.0f * q3;
+        _2q0q2 = 2.0f * q0 * q2;
+        _2q2q3 = 2.0f * q2 * q3;
+        q0q0 = q0 * q0;
+        q0q1 = q0 * q1;
+        q0q2 = q0 * q2;
+        q0q3 = q0 * q3;
+        q1q1 = q1 * q1;
+        q1q2 = q1 * q2;
+        q1q3 = q1 * q3;
+        q2q2 = q2 * q2;
+        q2q3 = q2 * q3;
+        q3q3 = q3 * q3;
+
+        // Reference direction of Earth's magnetic field
+        hx = mx * q0q0 - _2q0my * q3 + _2q0mz * q2 + mx * q1q1 + _2q1 * my * q2 + _2q1 * mz * q3 - mx * q2q2 - mx * q3q3;
+        hy = _2q0mx * q3 + my * q0q0 - _2q0mz * q1 + _2q1mx * q2 - my * q1q1 + my * q2q2 + _2q2 * mz * q3 - my * q3q3;
+        _2bx = sqrt(hx * hx + hy * hy);
+        _2bz = -_2q0mx * q2 + _2q0my * q1 + mz * q0q0 + _2q1mx * q3 - mz * q1q1 + _2q2 * my * q3 - mz * q2q2 + mz * q3q3;
+        _4bx = 2.0f * _2bx;
+        _4bz = 2.0f * _2bz;
+
+        // Gradient decent algorithm corrective step
+        s0 = -_2q2 * (2.0f * q1q3 - _2q0q2 - ax) + _2q1 * (2.0f * q0q1 + _2q2q3 - ay) - _2bz * q2 * (_2bx * (0.5f - q2q2 - q3q3) + _2bz * (q1q3 - q0q2) - mx) + (-_2bx * q3 + _2bz * q1) * (_2bx * (q1q2 - q0q3) + _2bz * (q0q1 + q2q3) - my) + _2bx * q2 * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f - q1q1 - q2q2) - mz);
+        s1 = _2q3 * (2.0f * q1q3 - _2q0q2 - ax) + _2q0 * (2.0f * q0q1 + _2q2q3 - ay) - 4.0f * q1 * (1 - 2.0f * q1q1 - 2.0f * q2q2 - az) + _2bz * q3 * (_2bx * (0.5f - q2q2 - q3q3) + _2bz * (q1q3 - q0q2) - mx) + (_2bx * q2 + _2bz * q0) * (_2bx * (q1q2 - q0q3) + _2bz * (q0q1 + q2q3) - my) + (_2bx * q3 - _4bz * q1) * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f - q1q1 - q2q2) - mz);
+        s2 = -_2q0 * (2.0f * q1q3 - _2q0q2 - ax) + _2q3 * (2.0f * q0q1 + _2q2q3 - ay) - 4.0f * q2 * (1 - 2.0f * q1q1 - 2.0f * q2q2 - az) + (-_4bx * q2 - _2bz * q0) * (_2bx * (0.5f - q2q2 - q3q3) + _2bz * (q1q3 - q0q2) - mx) + (_2bx * q1 + _2bz * q3) * (_2bx * (q1q2 - q0q3) + _2bz * (q0q1 + q2q3) - my) + (_2bx * q0 - _4bz * q2) * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f - q1q1 - q2q2) - mz);
+        s3 = _2q1 * (2.0f * q1q3 - _2q0q2 - ax) + _2q2 * (2.0f * q0q1 + _2q2q3 - ay) + (-_4bx * q3 + _2bz * q1) * (_2bx * (0.5f - q2q2 - q3q3) + _2bz * (q1q3 - q0q2) - mx) + (-_2bx * q0 + _2bz * q2) * (_2bx * (q1q2 - q0q3) + _2bz * (q0q1 + q2q3) - my) + _2bx * q1 * (_2bx * (q0q2 + q1q3) + _2bz * (0.5f - q1q1 - q2q2) - mz);
+        recipNorm = invSqrt(s0 * s0 + s1 * s1 + s2 * s2 + s3 * s3); // normalise step magnitude
+        s0 *= recipNorm;
+        s1 *= recipNorm;
+        s2 *= recipNorm;
+        s3 *= recipNorm;
+
+        // Apply feedback step
+        qDot1 -= beta * s0;
+        qDot2 -= beta * s1;
+        qDot3 -= beta * s2;
+        qDot4 -= beta * s3;
+    }
+
+    // Integrate rate of change of quaternion to yield quaternion
+    q0 += qDot1 * (1.0f / sampleFreq);
+    q1 += qDot2 * (1.0f / sampleFreq);
+    q2 += qDot3 * (1.0f / sampleFreq);
+    q3 += qDot4 * (1.0f / sampleFreq);
+
+    // Normalise quaternion
+    recipNorm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);
+    q0 *= recipNorm;
+    q1 *= recipNorm;
+    q2 *= recipNorm;
+    q3 *= recipNorm;
+}
+
+//---------------------------------------------------------------------------------------------------
+// IMU algorithm update
+
+void MadgwickAHRSupdateIMU(float gx, float gy, float gz, float ax, float ay, float az) {
+    float recipNorm;
+    float s0, s1, s2, s3;
+    float qDot1, qDot2, qDot3, qDot4;
+    float _2q0, _2q1, _2q2, _2q3, _4q0, _4q1, _4q2 ,_8q1, _8q2, q0q0, q1q1, q2q2, q3q3;
+
+    // Rate of change of quaternion from gyroscope
+    qDot1 = 0.5f * (-q1 * gx - q2 * gy - q3 * gz);
+    qDot2 = 0.5f * (q0 * gx + q2 * gz - q3 * gy);
+    qDot3 = 0.5f * (q0 * gy - q1 * gz + q3 * gx);
+    qDot4 = 0.5f * (q0 * gz + q1 * gy - q2 * gx);
+
+    // Compute feedback only if accelerometer measurement valid (avoids NaN in accelerometer normalisation)
+    if(!((ax == 0.0f) && (ay == 0.0f) && (az == 0.0f))) {
+
+        // Normalise accelerometer measurement
+        recipNorm = invSqrt(ax * ax + ay * ay + az * az);
+        ax *= recipNorm;
+        ay *= recipNorm;
+        az *= recipNorm;   
+
+        // Auxiliary variables to avoid repeated arithmetic
+        _2q0 = 2.0f * q0;
+        _2q1 = 2.0f * q1;
+        _2q2 = 2.0f * q2;
+        _2q3 = 2.0f * q3;
+        _4q0 = 4.0f * q0;
+        _4q1 = 4.0f * q1;
+        _4q2 = 4.0f * q2;
+        _8q1 = 8.0f * q1;
+        _8q2 = 8.0f * q2;
+        q0q0 = q0 * q0;
+        q1q1 = q1 * q1;
+        q2q2 = q2 * q2;
+        q3q3 = q3 * q3;
+
+        // Gradient decent algorithm corrective step
+        s0 = _4q0 * q2q2 + _2q2 * ax + _4q0 * q1q1 - _2q1 * ay;
+        s1 = _4q1 * q3q3 - _2q3 * ax + 4.0f * q0q0 * q1 - _2q0 * ay - _4q1 + _8q1 * q1q1 + _8q1 * q2q2 + _4q1 * az;
+        s2 = 4.0f * q0q0 * q2 + _2q0 * ax + _4q2 * q3q3 - _2q3 * ay - _4q2 + _8q2 * q1q1 + _8q2 * q2q2 + _4q2 * az;
+        s3 = 4.0f * q1q1 * q3 - _2q1 * ax + 4.0f * q2q2 * q3 - _2q2 * ay;
+        recipNorm = invSqrt(s0 * s0 + s1 * s1 + s2 * s2 + s3 * s3); // normalise step magnitude
+        s0 *= recipNorm;
+        s1 *= recipNorm;
+        s2 *= recipNorm;
+        s3 *= recipNorm;
+
+        // Apply feedback step
+        qDot1 -= beta * s0;
+        qDot2 -= beta * s1;
+        qDot3 -= beta * s2;
+        qDot4 -= beta * s3;
+    }
+
+    // Integrate rate of change of quaternion to yield quaternion
+    q0 += qDot1 * (1.0f / sampleFreq);
+    q1 += qDot2 * (1.0f / sampleFreq);
+    q2 += qDot3 * (1.0f / sampleFreq);
+    q3 += qDot4 * (1.0f / sampleFreq);
+
+    // Normalise quaternion
+    recipNorm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);
+    q0 *= recipNorm;
+    q1 *= recipNorm;
+    q2 *= recipNorm;
+    q3 *= recipNorm;
+}
+
+//---------------------------------------------------------------------------------------------------
+// Fast inverse square-root
+// See: http://en.wikipedia.org/wiki/Fast_inverse_square_root
+
+float invSqrt(float x) {
+    float halfx = 0.5f * x;
+    float y = x;
+    long i = *(long*)&y;
+    i = 0x5f3759df - (i>>1);
+    y = *(float*)&i;
+    y = y * (1.5f - (halfx * y * y));
+    return y;
+}
+
+//====================================================================================================
+// END OF CODE
+//====================================================================================================
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MadgwickAHRS.h	Thu May 21 13:10:58 2020 +0000
@@ -0,0 +1,32 @@
+//=====================================================================================================
+// MadgwickAHRS.h
+//=====================================================================================================
+//
+// Implementation of Madgwick's IMU and AHRS algorithms.
+// See: http://www.x-io.co.uk/node/8#open_source_ahrs_and_imu_algorithms
+//
+// Date         Author          Notes
+// 29/09/2011   SOH Madgwick    Initial release
+// 02/10/2011   SOH Madgwick    Optimised for reduced CPU load
+//
+//=====================================================================================================
+#ifndef MadgwickAHRS_h
+#define MadgwickAHRS_h
+
+//----------------------------------------------------------------------------------------------------
+// Variable declaration
+
+extern volatile float beta;             // algorithm gain
+extern volatile float q0, q1, q2, q3;   // quaternion of sensor frame relative to auxiliary frame
+
+//---------------------------------------------------------------------------------------------------
+// Function declarations
+
+void MadgwickAHRSupdate(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz);
+void MadgwickAHRSupdateIMU(float gx, float gy, float gz, float ax, float ay, float az);
+
+#endif
+//=====================================================================================================
+// End of file
+//=====================================================================================================
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mag_track.cpp	Thu May 21 13:10:58 2020 +0000
@@ -0,0 +1,353 @@
+//=====================================================================================================
+// Mag_track.cpp
+//=====================================================================================================
+//
+// Implementation of Magnetic tracking algorithm.
+//
+// Date         Author          Notes
+// 30/01/2020   DAFG            Initial release
+//
+//=====================================================================================================
+// Header files
+    #include "mbed.h"
+    #include "Mag_track.h"
+    #include <math.h>
+    #include "MadgwickAHRS.h"
+    #include "Scattered_interpolator.h"
+
+//----------------------------------------------------------------------------------------------------
+// Variable declaration
+    ///////////////////////////////////////////////////////////
+    //  Filter Code Definitions
+    //////////////////////////////////////////////////////////////
+    
+    // Maximum number of inputs that can be handled
+    // in one function call
+    #define MAX_INPUT_LEN   16
+    // Maximum length of filter than can be handled
+    #define MAX_FLT_LEN     84
+    // Buffer to hold all of the input samples
+    #define BUFFER_LEN      (MAX_FLT_LEN + MAX_INPUT_LEN)
+    
+    // Arrays to hold input samples
+    int16_t lp_insamp[ 3*BUFFER_LEN ];
+    int16_t insamp[ 3*BUFFER_LEN ];
+    
+    #define FILTER_LEN_BP  71        
+    // fs = 800 Hz; Band pass 85-115 Hz
+    int16_t coeffs_bp[ FILTER_LEN_BP ] =
+    {
+         30, 0, -28, -39, -27, 0, 21, 21, 4, 0, 31, 81, 91, 0, -182, -340, -307, 0,
+         465, 786, 653, 0, -861, -1371, -1079, 0, 1292, 1970, 1487, 0, -1648, -2421,
+         -1763, 0, 1823, 2588, 1823, 0, -1763, -2421, -1648, 0, 1487, 1970, 1292, 0,
+         -1079, -1371, -861, 0, 653, 786, 465, 0, -307, -340, -182, 0, 91, 81, 31, 0,
+         4, 21, 21, 0, -27, -39, -28, 0, 30
+    };
+    
+    #define FILTER_LEN_LP 82
+    // fs = 800 Hz; low pass fc 10-35 Hz
+    int16_t coeffs_lp[FILTER_LEN_LP] =
+    {
+        -7,-5,-7,-9,-11,-13,-15,-15,-15,-14,-11,-5,3,15,30,49,73,102,136,176,221,272,328,390,
+        456,527,601,678,757,836,914,990,1064,1133,1197,1254,1303,1343,1374,1395,1406,1406,1395,
+        1374,1343,1303,1254,1197,1133,1064,990,914,836,757,678,601,527,456,390,328,272,221,176,
+        136,102,73,49,30,15,3,-5,-11,-14,-15,-15,-15,-13,-11,-9,-7,-5,-7
+    };
+    // I2C buffers
+    char data_write[2]; // 2 bytes for writing I2C
+    char data_read[12]; // 12 bytes for storing I2C sensor data
+    char rawData_a[6];  // x/y/z accel register data stored here
+    char rawData_g[6];  // x/y/z accel register data stored here
+    // Sensor Offsets
+    int16_t offset_mag[3] = {-226,-135,1506}; //{-267, -100, 1552};
+    int16_t offset_acc[3] = {-17,170,602};//{-123, 123, 760};
+    int16_t offset_gyr[3] = {-32,-42,-5};//{-40,-37,27};
+    // Sensor Settings Data
+    int KMX62_ADDR = 28; // KMX62 address
+    int MPU_ADDR = 208; // 0x68 = 104 *2
+    char REG_MPU[6] = {0x3b,0x43,0x1c,0x1b,0x1a,0x1d};       //Acc data, gyr data, acc_config, gyro_config, mpu_config
+    char REG[8] = {0x0A,0x10,0x38,0x3a,0x77,0x78,0x79,0x7E}; //Acc data, Mag data, ODC, Ctrl2 REG, buff_ctrl 1, 2 and 3, buff read
+    char set_up[5] = {0x77,0x1f,0x64,0x02,0x0E};             //ODC, Ctrl2, buff_ctrl set up
+    char set_up_mpu[4] = {0x08,0x10,0x00,0x00};              //Acc_config, gyro_config, set up and acc_config_2
+    // DSP buffers
+    double E_c[4] = {9.402,-4.057,0.8096,0.1276};       //Envelope extraction amplitude regularization coeff
+    int16_t E[3] = {0,0,0};
+    double E_D;
+    int16_t Test_point[2] ;
+    int16_t TRIAG = 0;
+    int16_t inter_p[2]={0,0};
+    // MCU ports setting
+    I2C i2c(I2C_SDA, I2C_SCL);
+    Serial PC(SERIAL_TX, SERIAL_RX);
+    DigitalOut myled(LED1);
+    
+
+//---------------------------------------------------------------------------------------------------
+// Function declarations
+
+    /////// FIR init
+    void firFixedInit( void )
+    {
+         memset( insamp, 0, sizeof( insamp ) );
+         memset( lp_insamp, 0, sizeof( lp_insamp ) );
+    }
+    
+    /////// the FIR filter function
+    void firFixed( int16_t *coeffs, int16_t *input, int16_t *output,
+            int length, int filterLength, int bias, int16_t *buffer )
+    {
+         int32_t acc;     // accumulator for MACs
+         int16_t *coeffp; // pointer to coefficients
+         int16_t *inputp; // pointer to input samples
+         int16_t *bufferp; //pointer to input buffer
+         int n;
+         int k;
+    
+         // put the new samples at the high end of the buffer
+         /*memcpy( &insamp[filterLength - 1 + bias*BUFFER_LEN], input,
+                 length * sizeof(int16_t) );*/
+         bufferp=buffer;
+         memcpy( bufferp + filterLength - 1 + bias*BUFFER_LEN, input, length * sizeof(int16_t) );
+    
+         // apply the filter to each input sample
+         for ( n = 0; n < length; n++ ) {
+             // calculate output n
+             coeffp = coeffs;
+             /*inputp = &insamp[filterLength - 1 + n + bias*BUFFER_LEN];*/
+             inputp = bufferp+filterLength - 1 + n + bias*BUFFER_LEN;
+             // load rounding constant
+             acc = 1 << 14;
+             // perform the multiply-accumulate
+             for ( k = 0; k < filterLength; k++ ) {
+                 acc += (int32_t)(*coeffp++) * (int32_t)(*inputp--) ;
+             }
+             // saturate the result
+             if ( acc > 0x3fffffff ) {
+                 acc = 0x3fffffff;
+             } else if ( acc < -0x40000000 ) {
+                 acc = -0x40000000;
+             }
+             // convert from Q30 to Q15
+             output[n] = (int16_t)(acc >> 15);
+    
+         }
+    
+         // shift input samples back in time for next time
+         //memmove(&insamp[0+bias*BUFFER_LEN], &insamp[length + bias*BUFFER_LEN], (filterLength-1)*sizeof(int16_t));
+         memmove( bufferp + bias*BUFFER_LEN, bufferp+length + bias*BUFFER_LEN, (filterLength-1)*sizeof(int16_t));
+    
+    }
+    
+    
+    /////// SIGN FUNCTION
+    int sign(int16_t x){
+      if (x>0) return 1;
+      if (x<0) return -1;
+      return 0;
+      }
+    /////// QUATERNION product FUNCTION
+    void Qprod(float *p, float *q, float *r ){
+         r[0]= p[0] * q[0] - p[1] * q[1] - p[2] * q[2] - p[3] * q[3];
+         r[1]= p[0]*q[1] + p[1]*q[0] + p[2]*q[3] - p[3]*q[2];
+         r[2]= p[0]*q[2] - p[1]*q[3] + p[2]*q[0] + p[3]*q[1];
+         r[3]= p[0]*q[3] + p[1]*q[2] - p[2]*q[1] + p[3]*q[0];
+    }
+    /////// QUATERNION rotation FUNCTION
+    void Qrotate(float *v, float *q, float *out ){
+    
+         float v_1[4]= {0, v[0],v[1],v[2]};
+         float temp[4]={0,0,0,0};
+         Qprod(v_1,q,temp);
+         float q_conj[4]={q[0],-q[1],-q[2],-q[3]};
+         Qprod(q_conj,temp,v_1);
+         out[0]= v_1[1];
+         out[1]= v_1[2];
+         out[2]= v_1[3];
+    }
+    /////// Sensor set_up function
+    void sensor_setup(){
+         i2c.frequency(400000);         
+         /*Configure MPU9250*/
+         data_write[0] = REG_MPU[4];
+         data_write[1] = set_up_mpu[2];
+         int status = i2c.write(MPU_ADDR, data_write, 2, false);         
+         data_write[0] = REG_MPU[2];
+         data_write[1] = set_up_mpu[0];
+         status = i2c.write(MPU_ADDR, data_write, 2, false);
+         data_write[0] = REG_MPU[5];
+         data_write[1] = set_up_mpu[3];
+         status = i2c.write(MPU_ADDR, data_write, 2, false);    
+         data_write[0] = REG_MPU[3];
+         data_write[1] = set_up_mpu[1];
+         status = i2c.write(MPU_ADDR, data_write, 2, false);     
+         /*Configure KMX62 Sensor*/
+         // Ctrl Reg Set up
+         data_write[0] = REG[3];
+         data_write[1] = set_up[1];
+         status = i2c.write(KMX62_ADDR, data_write, 2, false);
+         if (status != 0) { // Error
+             while (status != 0) {
+                 PC.printf("Error 1");
+                 myled = !myled;
+                 wait(1);
+                 status = i2c.write(KMX62_ADDR, data_write, 2, false);
+             }
+         }
+         // ODC Reg Set up
+         data_write[0] = REG[2];
+         data_write[1] = set_up[0];
+         status = i2c.write(KMX62_ADDR, data_write, 2, false);
+         if (status != 0) { // Error
+             while (status != 0) {
+                 PC.printf("Error 2");
+                 myled = !myled;
+                 wait(1);
+                 status = i2c.write(KMX62_ADDR, data_write, 2, false);
+             }
+         }
+         // Buffer Reg Set up
+         int i;
+         for(i=0;i<3;i++) {
+             data_write[0] = REG[4+i];
+             data_write[1] = set_up[2+i];
+             status = i2c.write(KMX62_ADDR, data_write, 2, false);
+             if (status != 0) { // Error
+                 while (status != 0) {
+                     PC.printf("Error 3");
+                     myled = !myled;
+                     wait(1);
+                     status = i2c.write(KMX62_ADDR, data_write, 2, false);
+                 }
+             }
+         }        
+    }
+    
+    /////// MPU sensor axes alignment and offset correction    
+    void MPUrot_offset(int16_t *Data, char *rawData, int16_t *offset){
+        int16_t Data_read[3];
+        Data_read[1] = -(((int16_t)rawData[0] << 8 | rawData[1])-offset[0]) ;  // Turn the MSB and LSB into a signed 16-bit value
+        Data_read[0] = (((int16_t)rawData[2] << 8 | rawData[3])-offset[1] );
+        Data_read[2] = ((int16_t)rawData[4] << 8 | rawData[5])-offset[2] ;
+        Data[0]=Data_read[0]; Data[1]=Data_read[1]; Data[2]=Data_read[2];
+    }
+    
+    /////// Magnetic sensor offset correction
+    void Mag_offset(int16_t *M_read, char *data, int16_t *offset){
+        M_read[0] = (((int16_t)data[7]<<8)|data[6]) - offset[0];
+        M_read[1] = (((int16_t)data[9]<<8)|data[8]) - offset[1];
+        M_read[2] = (((int16_t)data[11]<<8)|data[10]) - offset[2];
+    }
+    /////// Magnetic sensor reading
+    void Read_Mag(int16_t *M_read){
+        data_write[0] = REG[0];
+        i2c.write(KMX62_ADDR, data_write, 1, true); // no stop
+        i2c.read(KMX62_ADDR, data_read, 12, false);
+        Mag_offset(M_read, data_read, offset_mag);
+        }
+    /////// Acc sensor reading    
+    void Read_Acc(int16_t *A_read){
+        data_write[0] = REG_MPU[0];
+        i2c.write(MPU_ADDR, data_write, 1, true); // no stop
+        i2c.read(MPU_ADDR, rawData_a, 6 ,false);  // Read the six raw data registers into data array
+        MPUrot_offset(A_read, rawData_a, offset_acc);
+        }
+    /////// Gyr sensor reading
+    void Read_Gyr(int16_t *G_read){
+        data_write[0] = REG_MPU[1];
+        i2c.write(MPU_ADDR, data_write, 1, true); // no stop
+        i2c.read(MPU_ADDR, rawData_g, 6 ,false);  // Read the six raw data registers into data array
+        MPUrot_offset(G_read, rawData_g, offset_gyr);
+        }    
+    
+    /////// Madgwick Quaternion update high-level function
+    void QUpdate(int32_t *q, float *m, float *a, float *g, int16_t *Mag, int16_t *Acc, int16_t *Gyr, float *Q_init, int32_t *Q_out){
+        float gRes = 0.0174533*0.0305175;//0.03*0.0175*2;  //1/62.5; radianti, non gradi 500=0.016
+        float mRes = 0.000366;     // G, non microT
+        float aRes = 0.00012207031;  //1/8192;
+        float Q[4] = {0,0,0,0};
+        float Q_o[4] = {0,0,0,0};
+        //// scaling
+        m[0] = ((float) Mag[0])*mRes;
+        m[1] = ((float) Mag[1])*mRes;
+        m[2] = ((float) Mag[2])*mRes;
+        a[0] = ((float) Acc[0])*aRes;
+        a[1] = ((float) Acc[1])*aRes;
+        a[2] = ((float) Acc[2])*aRes;
+        g[0] = ((float) Gyr[0])*gRes;
+        g[1] = ((float) Gyr[1])*gRes;
+        g[2] = ((float) Gyr[2])*gRes;
+        //// quaternion calculation
+        MadgwickAHRSupdate(g[0], g[1], g[2], a[0], a[1], a[2], m[0], m[1], m[2]);
+        Q[0]=q0; Q[1]=q1; Q[2]=q2; Q[3]=q3;
+        Qprod(Q, Q_init, Q_o);
+        Q_out[0]=(int32_t)(Q_o[0]*(powf(2,30)));  
+        Q_out[1]=(int32_t)(Q_o[1]*(powf(2,30)));
+        Q_out[2]=(int32_t)(Q_o[2]*(powf(2,30)));
+        Q_out[3]=(int32_t)(Q_o[3]*(powf(2,30)));                
+        q[0]=(int32_t)(q0*(powf(2,30)));  
+        q[1]=(int32_t)(q1*(powf(2,30)));
+        q[2]=(int32_t)(q2*(powf(2,30)));
+        q[3]=(int32_t)(q3*(powf(2,30)));
+    }
+    
+    /////// Filtered magnetic signals envelope extraction    
+    void Env_extraction(int16_t *P, int16_t *buffer_rot, int16_t *max, int16_t *p_i, double *R, double *ph, int16_t *S){
+         int16_t i, k;         
+         for(i=0; i<3; i++){
+             max[2*i]=buffer_rot[i*8]; //maximum[i]=buffer_env[4+i*8];
+             max[2*i+1]=buffer_rot[i*8];
+             p_i[2*i]=0;
+             p_i[2*i+1]=0;
+    
+             for(k=1;k<8;k++){
+                 if ( buffer_rot[k + i*8] >= max[2*i] ){
+                    max[2*i + 1] = max[2*i];
+                    max[2*i] = buffer_rot[k + i*8];
+                    p_i[2*i + 1]=p_i[2*i];
+                    p_i[2*i]=k;
+                 }                         
+                 else {
+                    if ( buffer_rot[k + i*8] >= max[2*i + 1] ){
+                        max[2*i + 1] = buffer_rot[k + i*8];
+                        p_i[2*i + 1]=k;
+                    }  
+                 }                        
+             }        
+             R[i]=((double)max[2*i])/((double)max[2*i + 1]);
+             E[i]=(int16_t)(((double)max[2*i])*(E_c[0]*exp(E_c[1]*R[i])+E_c[2]*exp(E_c[3]*R[i])));         
+             if ( (p_i[2*i] == 0) && (p_i[2*i + 1] == 7) ){
+                 p_i[2*i + 1] = -1;
+             }
+             if ( (p_i[2*i] == 7) && (p_i[2*i + 1] == 0) ){
+                 p_i[2*i + 1] = 8;
+             }
+             //Phase update: Y phase is updated only if its Envelope is higher than 5.5 uT : 150
+             if (i == 1){
+                 if(E[i]>=150){
+                     ph[i]=((double)(p_i[2*i]+p_i[2*i + 1]))/2;             
+                 }            
+             }
+             else{
+                ph[i]=((double)(p_i[2*i]+p_i[2*i + 1]))/2;
+             }                              
+         }
+         if (( fabs(ph[1]-ph[0]) >= 2 ) && ( fabs(ph[1]-ph[0]) <= 6)){
+             S[0]=-1;
+         }
+         else{
+             S[0]=1;
+         }
+         if (( fabs(ph[1]-ph[2]) >= 2 ) && ( fabs(ph[1]-ph[2]) <= 6)){
+             S[1]=-1;
+         }
+         else{
+             S[1]=1;
+         }
+         E_D = hypot( (double)E[0], (double)E[1] );
+         Test_point[0]= (int16_t)E_D;
+         Test_point[1]=S[1]*E[2];
+         TRIAG = Find_point(Test_point, TRIAG, SI_Points, SI_ConnectivityList, inter_p);
+         P[0]= S[0]*(int16_t)( (double)inter_p[0]*((double)E[0] / E_D));
+         P[1]= (int16_t)( (double)inter_p[0]*((double)E[1] / E_D));         
+         P[2]=inter_p[1];     
+    }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Mag_track.h	Thu May 21 13:10:58 2020 +0000
@@ -0,0 +1,66 @@
+//=====================================================================================================
+// Mag_track.h
+//=====================================================================================================
+//
+// Implementation of Magnetic tracking algorithm.
+//
+// Date         Author          Notes
+// 30/01/2020   DAFG            Initial release
+//
+//=====================================================================================================
+#ifndef Mag_track_h
+#define Mag_track_h
+//----------------------------------------------------------------------------------------------------
+// Variable declaration
+
+    // maximum number of inputs that can be handled
+    // in one function call
+    #define MAX_INPUT_LEN   16
+    // maximum length of filter than can be handled
+    #define MAX_FLT_LEN     84
+    // buffer to hold all of the input samples
+    #define BUFFER_LEN      (MAX_FLT_LEN + MAX_INPUT_LEN)
+    extern int16_t lp_insamp[ 3*BUFFER_LEN ]; // Array to hold input samples LP
+    #define FILTER_LEN_LP 82
+    // fs = 800 Hz; low pass fc 10-35 Hz
+    extern int16_t coeffs_lp[FILTER_LEN_LP];
+    extern int16_t insamp[ 3*BUFFER_LEN ];    // Array to hold input samples BP
+    #define FILTER_LEN_BP  71        
+    // fs = 800 Hz; Band pass 85-115 Hz
+    extern int16_t coeffs_bp[ FILTER_LEN_BP ];
+    
+    extern Serial PC;
+    extern DigitalOut myled;
+
+//---------------------------------------------------------------------------------------------------
+// Function declarations
+
+    /////// FIR init
+    void firFixedInit( void );
+    /////// the FIR filter function
+    void firFixed( int16_t *coeffs, int16_t *input, int16_t *output,
+            int length, int filterLength, int bias, int16_t *buffer );
+    /////// SIGN FUNCTION
+    int sign(int16_t x);
+    /////// QUATERNION product FUNCTION
+    void Qprod(float *p, float *q, float *r );
+    /////// QUATERNION rotation FUNCTION
+    void Qrotate(float *v, float *q, float *out );
+    /////// Sensor set_up function
+    void sensor_setup();
+    /////// MPU sensor axes alignment and offset correction 
+    void MPUrot_offset(int16_t *Data, char *rawData, int16_t *offset);
+    /////// Magnetic sensor offset correction
+    void Mag_offset(int16_t *M_read, char *data, int16_t *offset);
+    /////// Sensors reading
+    void Read_Mag(int16_t *M_read);
+    void Read_Acc(int16_t *A_read);
+    void Read_Gyr(int16_t *G_read);
+    /////// Madgwick Quaternion update high-level function
+    void QUpdate(int32_t *q, float *m, float *a, float *g, int16_t *Mag, int16_t *Acc, int16_t *Gyr, float *Q_init, int32_t *Q_out);
+    /////// Filtered magnetic signals envelope extraction 
+    void Env_extraction(int16_t *E, int16_t *buffer_rot, int16_t *max, int16_t *p_i, double *R, double *ph, int16_t *S);
+#endif
+//=====================================================================================================
+// End of file
+//=====================================================================================================
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Scattered_interpolator.cpp	Thu May 21 13:10:58 2020 +0000
@@ -0,0 +1,132 @@
+#include "mbed.h"
+//Scattered Interpolations Points List and Connectivity List
+/*#define num_points 783
+#define num_triag 1514
+int16_t SI_Points[4*num_points]={
+ 31,   35,   41,   46,   47,   51,   52,   55,   59,   60,   60,   64,   67,   68,   68,   69,   73,   75,   77,   78,   78,   80,   81,   83,   85,   86,   88,   89,   90,   90,   91,   92,   93,   94,   95,   95,   95,   96,   96,   96,   96,   99,   100,   100,   101,   102,   104,   104,   105,   105,   105,   106,   106,   106,   107,   107,   107,   108,   108,   108,   110,   110,   110,   110,   110,   112,   112,   112,   112,   113,   115,   115,   116,   117,   118,   118,   119,   119,   119,   119,   120,   120,   120,   120,   121,   122,   123,   124,   124,   124,   124,   124,   125,   125,   125,   125,   125,   126,   126,   126,   126,   127,   127,   128,   128,   129,   129,   129,   129,   129,   130,   130,   131,   132,   132,   132,   133,   133,   133,   133,   133,   133,   133,   134,   134,   134,   135,   135,   135,   137,   138,   138,   138,   139,   139,   139,   140,   140,   140,   141,   141,   141,   141,   141,   142,   142,   142,   143,   143,   143,   143,   144,   144,   145,   145,   145,   145,   145,   145,   146,   146,   146,   146,   146,   146,   147,   148,   148,   148,   149,   150,   150,   150,   150,   150,   151,   151,   151,   152,   152,   154,   154,   155,   155,   156,   156,   156,   156,   157,   158,   158,   158,   159,   159,   159,   159,   159,   160,   160,   161,   161,   161,   162,   162,   162,   163,   163,   163,   164,   164,   164,   164,   164,   164,   164,   165,   167,   168,   168,   168,   169,   169,   169,   170,   170,   170,   171,   172,   172,   172,   173,   173,   174,   175,   176,   177,   177,   177,   178,   178,   178,   179,   179,   179,   180,   181,   181,   181,   181,   181,   181,   182,   183,   183,   183,   184,   185,   186,   186,   186,   187,   187,   188,   191,   191,   191,   192,   192,   192,   192,   194,   194,   194,   194,   195,   196,   196,   196,   197,   197,   198,   199,   199,   200,   201,   201,   201,   202,   202,   202,   202,   202,   202,   203,   204,   204,   204,   205,   206,   207,   208,   210,   211,   211,   212,   213,   213,   215,   216,   217,   218,   218,   219,   219,   219,   222,   222,   222,   222,   223,   223,   224,   224,   225,   225,   226,   227,   228,   228,   228,   229,   231,   231,   231,   231,   231,   231,   232,   232,   233,   234,   237,   237,   237,   239,   239,   240,   240,   242,   242,   243,   245,   247,   247,   248,   249,   251,   252,   252,   253,   254,   255,   255,   255,   255,   256,   256,   256,   257,   257,   259,   260,   261,   264,   264,   265,   266,   267,   268,   268,   272,   272,   274,   274,   275,   275,   277,   277,   278,   278,   279,   281,   282,   283,   285,   285,   286,   287,   289,   289,   290,   291,   292,   292,   293,   293,   293,   295,   296,   296,   297,   297,   298,   298,   298,   307,   309,   310,   310,   311,   312,   317,   318,   319,   320,   321,   322,   323,   323,   325,   326,   327,   329,   329,   330,   331,   331,   332,   333,   337,   337,   337,   339,   341,   341,   342,   342,   342,   343,   346,   348,   349,   351,   352,   357,   361,   362,   362,   364,   369,   371,   372,   374,   375,   375,   376,   378,   378,   379,   382,   382,   383,   384,   384,   385,   386,   390,   390,   397,   401,   402,   403,   404,   404,   406,   411,   412,   412,   413,   416,   418,   424,   425,   427,   427,   430,   432,   432,   437,   438,   438,   440,   442,   444,   445,   446,   448,   449,   450,   452,   452,   457,   462,   475,   476,   479,   480,   481,   483,   488,   490,   491,   494,   497,   501,   503,   505,   508,   508,   509,   509,   513,   514,   515,   517,   518,   526,   527,   531,   533,   536,   538,   539,   540,   541,   545,   560,   566,   572,   574,   576,   576,   587,   591,   592,   593,   597,   597,   598,   601,   605,   612,   615,   616,   619,   621,   622,   636,   643,   645,   646,   647,   649,   655,   655,   658,   673,   681,   684,   693,   694,   695,   695,   701,   703,   714,   717,   719,   721,   721,   723,   736,   736,   738,   745,   754,   774,   788,   790,   794,   802,   803,   804,   805,   826,   834,   841,   844,   845,   850,   855,   857,   858,   863,   864,   873,   877,   886,   890,   894,   904,   917,   919,   931,   972,   974,   979,   988,   993,   994,   1003,   1014,   1028,   1032,   1036,   1042,   1045,   1067,   1072,   1076,   1081,   1095,   1104,   1120,   1125,   1146,   1165,   1170,   1183,   1200,   1214,   1239,   1239,   1242,   1247,   1252,   1260,   1271,   1275,   1303,   1310,   1328,   1335,   1354,   1378,   1434,   1443,   1444,   1456,   1466,   1492,   1495,   1536,   1569,   1580,   1591,   1597,   1598,   1618,   1626,   1652,   1654,   1660,   1666,   1752,   1763,   1792,   1880,   1883,   1895,   1925,   1936,   1948,   1973,   2000,   2002,   2066,   2084,   2105,   2123,   2144,   2200,   2253,   2316,   2366,   2386,   2436,   2485,   2524,   2549,   2552,   2576,   2597,   2610,   2737,   2760,   2798,   2853,   2922,   3013,   3144,   3205,   3233,   3276,   3345,   3400,   3503,   3554,   3559,   3615,   3666,   3706,   3983,   4005,   4126,   4280,   4384,   4504,   4597,   4649,   4700,   5033,   5051,   5106,   5159,   5779,   5790,   5896,   6084,   6315,   6378,   6438,   6904,   7106,   7369,   7645,   7899,   8770,   9010,   9398,   9499,   9644,   10051,   10821,   11147,   12302,   12972,   14003,   14255,   16016,   17096,   17208,   18121,   21366,   23496,   23549,   30234,   32767,   32767,   32767,   32767,   32767,  32767,
+ -172,   -188,   -207,   -169,   -228,   310,   -184,   -253,   345,   -202,   -163,   -282,   302,   -178,   386,   -222,   -157,   -315,   336,   -194,   433,   -245,   292,   -170,   -149,   6,   375,   -354,   -213,   4,   11,   488,   324,   -272,   -185,   2,   280,   -161,   -141,   9,   16,   0,   7,   21,   14,   420,   -235,   -3,   -132,   4,   27,   -401,   12,   20,   267,   361,   552,   -152,   -7,   311,   -303,   -202,   -175,   1,   34,   -11,   10,   18,   26,   -122,   -2,   42,   -16,   253,   7,   33,   -141,   16,   25,   472,   -112,   -21,   -6,   50,   295,   -260,   41,   -163,   -26,   3,   345,   403,   -102,   -11,   13,   32,   59,   -222,   23,   238,   626,   -190,   -33,   -457,   -130,   -92,   -40,   -1,   50,   69,   -340,   -17,   -83,   -47,   9,   40,   -73,   -64,   -55,   20,   30,   223,   279,   -23,   60,   79,   -151,   -118,   -6,   90,   -29,   50,   207,   5,   327,   532,   -107,   -12,   70,   -177,   -37,   16,   39,   103,   28,   191,   261,   -288,   116,   384,   452,   -96,   -45,   -138,   0,   60,   82,   130,   175,   -207,   -84,   -54,   -18,   144,   159,   -244,   -74,   -64,   49,   12,   25,   37,   94,   243,   713,   -25,   71,   307,   -125,   -6,   -162,   108,   -33,   225,   -524,   -384,   7,   60,   122,   -112,   -12,   84,   -42,   21,   47,   206,   363,   34,   137,   -99,   -52,   287,   154,   171,   188,   -191,   -63,   97,   -147,   -86,   -74,   -20,   1,   72,   602,   428,   507,   -321,   16,   59,   -226,   112,   266,   -29,   30,   45,   85,   -269,   -131,   -6,   128,   340,   -38,   244,   -174,   10,   72,   145,   -116,   -49,   100,   -14,   163,   223,   819,   -101,   -61,   26,   57,   183,   203,   41,   -87,   -73,   403,   315,   116,   -23,   3,   86,   -435,   -156,   -207,   -606,   71,   134,   -33,   20,   291,   479,   37,   54,   102,   684,   -6,   -138,   153,   572,   -248,   -45,   266,   173,   375,   -360,   -121,   -58,   242,   -298,   12,   86,   120,   195,   218,   -187,   -104,   -72,   -16,   -87,   69,   31,   50,   139,   -27,   347,   104,   4,   449,   -166,   161,   943,   -225,   -40,   24,   85,   318,   45,   66,   123,   184,   -145,   -7,   -54,   538,   208,   290,   -496,   261,   -125,   -69,   234,   416,   -273,   -105,   -87,   104,   145,   781,   15,   648,   -19,   -201,   -706,   38,   83,   -332,   61,   -405,   168,   -32,   383,   125,   5,   -176,   194,   501,   -48,   349,   103,   221,   29,   -245,   -152,   -65,   149,   315,   -8,   79,   251,   54,   282,   -85,   -128,   -106,   606,   1094,   462,   175,   126,   -23,   18,   -300,   -216,   46,   101,   203,   736,   -570,   74,   -40,   896,   422,   152,   5,   235,   -371,   -186,   -59,   382,   -459,   269,   561,   343,   125,   305,   -158,   -81,   35,   181,   -130,   -105,   -11,   96,   -830,   -266,   66,   212,   514,   -29,   153,   21,   685,   -231,   248,   123,   55,   -50,   -331,   89,   466,   1277,   286,   185,   5,   840,   -197,   -74,   419,   328,   372,   -163,   -101,   1034,   -131,   153,   630,   -659,   -415,   42,   221,   -15,   117,   80,   -290,   -522,   261,   -38,   188,   573,   25,   305,   777,   -248,   -65,   150,   515,   66,   -985,   353,   109,   404,   458,   228,   -206,   -95,   -366,   4,   -167,   -129,   962,   188,   272,   49,   709,   1502,   -21,   144,   97,   1199,   -466,   -315,   322,   -51,   639,   -768,   232,   27,   -597,   377,   -264,   -85,   570,   438,   501,   185,   80,   883,   -124,   -214,   133,   -167,   282,   1,   -406,   339,   233,   57,   799,   -32,   1108,   -1182,   177,   118,   402,   -343,   -70,   714,   -526,   472,   1780,   289,   1401,   30,   630,   549,   -115,   -280,   -165,   -220,   230,   96,   -687,   1008,   353,   164,   -900,   -5,   -449,   426,   291,   -48,   67,   903,   508,   220,   144,   1284,   -370,   -98,   798,   598,   696,   364,   -156,   -294,   31,   -222,   -594,   1649,   288,   -1435,   116,   2130,   447,   204,   1156,   -16,   -795,   543,   -497,   -72,   1022,   -1066,   369,   78,   649,   891,   768,   -139,   -398,   278,   178,   -217,   1495,   -304,   464,   29,   -673,   367,   575,   141,   1951,   1328,   -34,   256,   701,   2571,   -546,   1160,   -111,   843,   475,   -922,   996,   -1766,   89,   -201,   -423,   -306,   353,   221,   -1272,   602,   1749,   21,   751,   -762,   474,   171,   -65,   1532,   326,   921,   2331,   1318,   1112,   -170,   -599,   621,   -297,   -440,   100,   3139,   -1076,   459,   280,   796,   2058,   5,   -2206,   -1535,   1000,   -860,   625,   1771,   -117,   209,   1235,   1495,   422,   -268,   -647,   -445,   2803,   829,   107,   607,   -1258,   358,   1074,   3879,   2434,   -29,   1363,   2056,   1693,   -206,   842,   -964,   255,   -1867,   -425,   557,   -680,   -2795,   1135,   3402,   107,   825,   1488,   464,   -1470,   2889,   -97,   1906,   2381,   4856,   -361,   -1064,   1164,   -688,   313,   756,   -2289,   1599,   4168,   89,   -3612,   2129,   1148,   3445,   618,   2753,   -227,   -1709,   -640,   -1143,   6156,   1671,   383,   1053,   2340,   -2815,   5142,   23,   3157,   4114,   1668,   842,   -485,   -1957,   -4760,   -1155,   2496,   7935,   462,   1533,   3573,   6391,   4891,   -142,   -3477,   -1018,   2536,   -2153,   1186,   3932,   -6382,   10389,   523,   5765,   2357,   7987,   -570,   -4212,   -2165,   4122,   1759,   6637,   13816,   9957,   505,   -8661,   3864,   -1665,   -4842,   7267,   2741,   12241,   18604,   139,   -11705,   7030,   -4729,   14416,   25236,   4745,   -1816,   -14763,   -11715,   9746,   14996,   31706,  32767,
+ 2999,   2899,   2800,   2999,   2700,   300,   2899,   2600,   300,   2799,   2999,   2500,   400,   2899,   300,   2699,   2999,   2400,   400,   2799,   300,   2600,   500,   2899,   2999,   3000,   400,   2300,   2699,   3000,   2900,   300,   500,   2500,   2799,   3000,   600,   2899,   2999,   2900,   2800,   3000,   2900,   2700,   2800,   400,   2600,   2999,   2999,   2900,   2600,   2200,   2800,   2700,   700,   500,   300,   2899,   3000,   600,   2400,   2699,   2799,   2900,   2500,   3000,   2800,   2700,   2600,   2999,   2900,   2400,   3000,   800,   2800,   2500,   2899,   2700,   2600,   400,   2999,   3000,   2900,   2300,   700,   2500,   2400,   2799,   2999,   2800,   600,   500,   2999,   2900,   2700,   2500,   2200,   2600,   2600,   900,   300,   2699,   2999,   2100,   2899,   2999,   3000,   2800,   2300,   2100,   2300,   2899,   2999,   2999,   2700,   2400,   2999,   2999,   2999,   2600,   2500,   1000,   800,   2900,   2200,   2000,   2799,   2899,   2800,   1900,   2899,   2300,   1100,   2700,   700,   400,   2899,   2800,   2100,   2699,   2900,   2600,   2400,   1800,   2500,   1200,   900,   2400,   1700,   600,   500,   2899,   2900,   2799,   2700,   2200,   2000,   1600,   1300,   2600,   2899,   2899,   2800,   1500,   1400,   2500,   2899,   2899,   2300,   2600,   2500,   2400,   1900,   1000,   300,   2799,   2100,   800,   2799,   2700,   2699,   1800,   2800,   1100,   2000,   2200,   2600,   2200,   1700,   2799,   2700,   2000,   2799,   2500,   2300,   1200,   700,   2400,   1600,   2799,   2800,   900,   1500,   1400,   1300,   2600,   2800,   1900,   2699,   2799,   2800,   2700,   2600,   2100,   400,   600,   500,   2300,   2500,   2200,   2500,   1800,   1000,   2700,   2400,   2300,   2000,   2400,   2700,   2600,   1700,   800,   2700,   1100,   2600,   2500,   2100,   1600,   2700,   2700,   1900,   2600,   1500,   1200,   300,   2700,   2700,   2400,   2200,   1400,   1300,   2300,   2700,   2699,   700,   900,   1800,   2600,   2500,   2000,   2100,   2600,   2500,   1900,   2100,   1700,   2600,   2400,   1000,   600,   2300,   2200,   1900,   400,   2500,   2600,   1600,   500,   2400,   2600,   1100,   1500,   800,   2200,   2600,   2600,   1200,   2300,   2400,   2000,   1800,   1400,   1300,   2500,   2600,   2600,   2500,   2600,   2100,   2300,   2200,   1700,   2500,   900,   1900,   2400,   700,   2500,   1600,   300,   2400,   2500,   2300,   2000,   1000,   2200,   2100,   1800,   1500,   2500,   2400,   2500,   600,   1400,   1100,   2000,   1200,   2500,   2500,   1300,   800,   2300,   2500,   2500,   1900,   1700,   400,   2300,   500,   2400,   2400,   1800,   2200,   2000,   2200,   2100,   2100,   1600,   2400,   900,   1800,   2300,   2400,   1500,   700,   2400,   1000,   1900,   1400,   2200,   2300,   2400,   2400,   1700,   1100,   2300,   2000,   1300,   2100,   1200,   2400,   2400,   2400,   600,   300,   800,   1600,   1800,   2300,   2200,   2200,   2300,   2100,   1900,   1500,   500,   1900,   2000,   2300,   400,   900,   1700,   2200,   1400,   2100,   2300,   2300,   1000,   2000,   1300,   700,   1100,   1800,   1200,   2300,   2300,   2100,   1600,   2300,   2300,   2200,   1900,   1700,   2200,   2000,   1500,   800,   2200,   1700,   2100,   600,   2200,   1400,   1800,   2000,   2200,   2100,   1900,   900,   300,   1300,   1600,   2100,   500,   2200,   2200,   1000,   1200,   1100,   2200,   2200,   400,   2200,   1700,   700,   1800,   2000,   2000,   1500,   2100,   1800,   1900,   2100,   1900,   1400,   2100,   1600,   800,   2000,   1300,   600,   2100,   2100,   1700,   900,   1900,   1600,   1200,   1800,   1100,   1000,   1500,   2100,   2100,   2000,   2000,   2100,   2100,   501,   1600,   1400,   1900,   700,   300,   2000,   1700,   1800,   400,   1900,   2000,   1300,   2000,   800,   1700,   1500,   1900,   1800,   1200,   2000,   2000,   900,   1100,   1000,   1600,   1800,   601,   2000,   2000,   1700,   2000,   1400,   1900,   1900,   1300,   1500,   1800,   700,   1900,   500,   1500,   1600,   1700,   1200,   1900,   1900,   800,   1800,   1100,   300,   1400,   400,   1800,   900,   1000,   1900,   1900,   1900,   1900,   1500,   1700,   1700,   601,   1300,   1600,   1600,   1800,   1800,   1200,   1400,   1800,   1700,   701,   1100,   1500,   1600,   500,   1800,   1800,   800,   1000,   900,   1300,   1800,   1800,   1700,   1800,   1700,   400,   1400,   1400,   1600,   300,   1200,   1500,   600,   1700,   1600,   1100,   1700,   1700,   700,   1500,   1300,   1600,   1000,   801,   900,   1700,   1700,   1400,   1500,   1700,   500,   1700,   1200,   1600,   1600,   1300,   1100,   1500,   400,   600,   1600,   1400,   1000,   300,   1600,   700,   1600,   900,   1200,   1500,   800,   1300,   1500,   1600,   1600,   1600,   1300,   1400,   1400,   1100,   500,   1500,   1000,   1500,   1200,   1400,   1500,   600,   1300,   900,   400,   700,   800,   1500,   1500,   1100,   1500,   1500,   1400,   300,   1400,   1200,   1300,   1000,   500,   1400,   1200,   1300,   900,   1400,   1100,   600,   1400,   1300,   800,   700,   1200,   1400,   1400,   1400,   400,   1000,   1300,   1100,   1300,   1200,   900,   300,   500,   1300,   800,   600,   700,   1300,   1000,   1300,   1200,   1200,   1300,   1100,   1300,   1100,   900,   400,   1200,   1000,   800,   1100,   1200,   500,   1200,   700,   600,   300,   1200,   1200,   900,   1200,   1100,   1000,   1100,   800,   400,   1100,   1000,   700,   900,   500,   1000,   600,   1100,   1100,   1100,   1100,   300,   800,   1000,   900,   700,   1000,   400,   1000,   600,   500,   800,   900,   1000,   1000,   900,   1000,   700,   300,   900,   800,   600,   400,   500,   900,   900,   900,   700,   900,   800,   600,   800,   300,   800,   500,   700,   400,   800,   800,   800,   600,   700,   500,   300,   400,   700,   700,   600,   700,   700,   500,   600,   400,   300,   600,   600,   500,   600,   400,   300,   500,   500,   501,   498,   430,   400,   290,  284,
+ 200,   200,   200,   300,   200,   2900,   300,   200,   2800,   300,   400,   200,   2900,   400,   2700,   300,   500,   200,   2800,   400,   2600,   300,   2900,   500,   600,   2899,   2700,   200,   400,   2799,   2899,   2500,   2800,   300,   500,   2699,   2900,   600,   700,   2799,   2899,   2599,   2699,   2899,   2799,   2600,   400,   2499,   800,   2599,   2899,   200,   2699,   2799,   2899,   2700,   2400,   700,   2399,   2800,   300,   500,   600,   2499,   2899,   2299,   2599,   2699,   2799,   900,   2399,   2899,   2199,   2900,   2499,   2799,   800,   2599,   2699,   2500,   1000,   2099,   2299,   2899,   2800,   400,   2799,   700,   2000,   2399,   2700,   2600,   1100,   2200,   2499,   2699,   2899,   500,   2599,   2899,   2300,   600,   1899,   200,   900,   1200,   1799,   2299,   2799,   2899,   300,   2099,   1300,   1700,   2399,   2699,   1400,   1500,   1600,   2499,   2599,   2899,   2799,   1999,   2799,   2899,   800,   1000,   2199,   2899,   1900,   2699,   2899,   2299,   2700,   2400,   1100,   2099,   2799,   700,   1799,   2399,   2599,   2899,   2499,   2899,   2800,   400,   2899,   2600,   2500,   1200,   1700,   900,   2199,   2699,   2799,   2899,   2899,   600,   1300,   1600,   1999,   2899,   2899,   500,   1400,   1500,   2599,   2299,   2399,   2499,   2799,   2799,   2200,   1899,   2699,   2700,   1000,   2099,   800,   2799,   1800,   2800,   200,   300,   2199,   2599,   2799,   1100,   2000,   2699,   1700,   2299,   2499,   2800,   2600,   2399,   2799,   1200,   1600,   2700,   2799,   2800,   2799,   700,   1500,   2699,   900,   1300,   1400,   1900,   2099,   2599,   2300,   2500,   2400,   400,   2199,   2499,   600,   2699,   2700,   1799,   2299,   2400,   2599,   500,   1000,   1999,   2700,   2600,   1700,   2700,   800,   2100,   2499,   2699,   1100,   1600,   2599,   1900,   2700,   2700,   2100,   1200,   1500,   2200,   2399,   2700,   2699,   2299,   1300,   1400,   2500,   2600,   2599,   1800,   2000,   2499,   300,   900,   700,   200,   2400,   2599,   1700,   2100,   2600,   2400,   2200,   2299,   2499,   2200,   1900,   1000,   2599,   2300,   600,   1600,   2600,   2600,   2500,   400,   1100,   1500,   2600,   500,   2000,   2399,   2500,   2599,   2600,   800,   1200,   1400,   1800,   1300,   2300,   2099,   2199,   2499,   1700,   2500,   2400,   1900,   2400,   900,   2500,   2000,   700,   1600,   2000,   2300,   2500,   2100,   2200,   2400,   2500,   1000,   1800,   1500,   2300,   2500,   2500,   300,   2500,   1100,   1400,   2500,   2400,   600,   1200,   1300,   2300,   2400,   2100,   1900,   2200,   1700,   800,   200,   2000,   2200,   500,   2100,   400,   2400,   1600,   2400,   2300,   1800,   900,   2400,   2300,   1500,   2400,   2200,   2400,   1900,   700,   1000,   1400,   2300,   2400,   1700,   2100,   2400,   2000,   2400,   1300,   1100,   1200,   2200,   1900,   2300,   2300,   2200,   1600,   1800,   600,   800,   1900,   2100,   2300,   2100,   300,   2000,   1500,   2000,   2300,   2200,   1700,   2300,   500,   900,   1400,   2300,   400,   2300,   2200,   2300,   2100,   2300,   1000,   1300,   1800,   2200,   1100,   1200,   1600,   2000,   200,   700,   1900,   2200,   2200,   1500,   2100,   1700,   2100,   800,   2200,   2000,   1800,   1400,   600,   1900,   2200,   1800,   2200,   2100,   1600,   2000,   900,   1300,   2200,   2200,   2200,   1000,   1200,   1900,   1100,   2000,   2100,   300,   500,   1700,   2100,   1500,   1900,   1800,   700,   400,   2100,   1400,   2000,   2100,   1600,   2100,   2000,   800,   1300,   1900,   2100,   1700,   200,   2100,   1800,   2100,   2100,   2000,   900,   1200,   600,   1500,   1000,   1100,   1900,   1900,   2000,   1600,   2000,   1700,   1400,   1800,   1700,   1800,   500,   700,   2000,   1300,   2000,   300,   1900,   1500,   400,   2000,   800,   1200,   2000,   2000,   2000,   1800,   1600,   1900,   1100,   900,   1700,   1000,   1900,   1400,   600,   1900,   1800,   1500,   1900,   1300,   1800,   200,   1700,   1600,   1900,   700,   1200,   1900,   500,   1900,   1600,   1800,   1700,   1400,   1900,   1900,   1100,   800,   1000,   900,   1700,   1500,   400,   1800,   1800,   1600,   300,   1300,   600,   1800,   1700,   1200,   1400,   1800,   1800,   1600,   1500,   1700,   700,   1100,   1800,   1800,   1800,   1700,   1000,   800,   1300,   900,   500,   1600,   1600,   200,   1400,   1500,   1700,   1500,   1700,   1200,   400,   1700,   600,   1100,   1700,   300,   1600,   1300,   1700,   1700,   1700,   1000,   700,   1500,   1400,   900,   1600,   800,   1600,   1200,   500,   1500,   1600,   1300,   1500,   1600,   1100,   1400,   1600,   1400,   600,   1600,   1000,   1600,   1500,   400,   1600,   200,   1200,   900,   700,   800,   1401,   1300,   300,   1500,   1500,   1100,   1500,   500,   1400,   1200,   1000,   1500,   1300,   1500,   1400,   1500,   1500,   900,   600,   1400,   800,   700,   1100,   1300,   400,   1300,   1200,   1400,   1400,   1000,   200,   300,   1400,   500,   1300,   1400,   900,   1100,   1400,   1400,   1200,   800,   600,   700,   1300,   1300,   1000,   1200,   400,   1100,   1300,   1200,   1300,   900,   1300,   1300,   1300,   800,   1200,   500,   1000,   300,   700,   1100,   600,   200,   1200,   1200,   900,   1100,   1200,   1000,   400,   1200,   800,   1200,   1200,   1100,   700,   500,   1100,   600,   900,   1000,   300,   1100,   1100,   800,   200,   1100,   1000,   1100,   900,   1100,   700,   400,   600,   500,   1000,   1000,   800,   900,   1000,   300,   1000,   700,   1000,   1000,   900,   800,   600,   400,   200,   500,   900,   900,   700,   800,   900,   900,   900,   600,   300,   500,   800,   400,   700,   800,   200,   800,   600,   800,   700,   800,   500,   300,   400,   700,   600,   700,   700,   700,   500,   200,   600,   400,   300,   600,   500,   600,   600,   400,   200,   500,   300,   500,   500,   400,   300,   200,   222,   366,   401,   448,  450,
+ };
+int16_t SI_ConnectivityList[6*num_triag]={
+ 157,   70,   258,   675,   223,   338,   302,   72,   254,   548,   595,   459,   27,   322,   697,   338,   514,   441,   405,   110,   688,   278,   7,   127,   33,   275,   97,   409,   15,   285,   170,   424,   364,   66,   25,   42,   180,   256,   292,   71,   89,   131,   443,   164,   213,   541,   460,   724,   26,   400,   619,   367,   79,   407,   401,   384,   486,   564,   589,   590,   614,   630,   572,   663,   684,   748,   711,   745,   675,   726,   585,   766,   752,   667,   659,   727,   734,   491,   623,   618,   616,   549,   583,   617,   648,   564,   535,   756,   578,   743,   474,   37,   19,   85,   21,   4,   47,   0,   34,   92,   48,   104,   117,   85,   101,   60,   159,   498,   165,   159,   344,   425,   493,   283,   434,   408,   117,   328,   170,   246,   151,   178,   211,   205,   205,   245,   257,   209,   351,   208,   297,   295,   432,   378,   305,   378,   396,   266,   320,   351,   315,   311,   311,   140,   162,   154,   190,   137,   209,   137,   266,   106,   112,   58,   116,   109,   23,   111,   162,   98,   212,   52,   95,   83,   50,   71,   119,   86,   86,   290,   131,   194,   318,   83,   171,   176,   124,   155,   131,   39,   148,   203,   231,   26,   177,   32,   32,   338,   336,   322,   135,   163,   240,   255,   55,   59,   329,   84,   358,   196,   233,   385,   389,   326,   369,   330,   254,   558,   273,   301,   188,   366,   334,   418,   463,   318,   313,   315,   377,   204,   181,   298,   304,   230,   272,   299,   171,   337,   289,   351,   345,   359,   368,   345,   451,   415,   471,   364,   422,   422,   450,   494,   454,   522,   356,   559,   582,   438,   354,   438,   430,   561,   501,   478,   687,   478,   632,   487,   601,   547,   604,   657,   541,   597,   533,   604,   630,   594,   618,   632,   672,   737,   745,   673,   738,   757,   704,   776,   760,   755,   757,   757,   757,   759,   766,   681,   621,   724,   723,   663,   612,   483,   672,   592,   634,   627,   618,   664,   652,   644,   655,   681,   665,   726,   748,   589,   614,   773,   753,   563,   623,   728,   706,   563,   557,   565,   602,   503,   475,   554,   583,   550,   575,   402,   392,   495,   476,   379,   447,   378,   388,   362,   262,   371,   442,   452,   462,   434,   549,   435,   476,   526,   587,   488,   565,   325,   452,   346,   512,   398,   386,   426,   453,   606,   596,   679,   556,   659,   660,   714,   649,   566,   581,   659,   611,   680,   714,   692,   671,   766,   754,   731,   746,   743,   772,   33,   6,   60,   46,   46,   217,   21,   21,   34,   13,   2,   4,   4,   7,   1,   2,   9,   25,   0,   24,   3,   25,   10,   48,   16,   37,   24,   61,   37,   62,   57,   34,   126,   48,   87,   29,   38,   76,   92,   127,   136,   69,   178,   80,   76,   76,   180,   180,   178,   76,   57,   28,   97,   46,   97,   61,   101,   185,   110,   165,   46,   227,   51,   51,   60,   60,   386,   184,   283,   147,   147,   185,   185,   293,   293,   205,   310,   220,   147,   346,   185,   386,   287,   185,   398,   260,   287,   413,   398,   394,   208,   310,   293,   331,   310,   275,   340,   262,   381,   352,   340,   294,   352,   352,   404,   352,   408,   327,   372,   333,   370,   370,   327,   189,   295,   284,   332,   332,   209,   294,   200,   245,   153,   284,   228,   234,   284,   284,   205,   234,   275,   153,   228,   238,   189,   189,   238,   238,   209,   160,   206,   161,   200,   152,   152,   152,   232,   192,   223,   192,   253,   200,   210,   210,   253,   206,   206,   252,   253,   297,   370,   362,   388,   333,   378,   321,   328,   370,   206,   253,   246,   285,   279,   321,   241,   232,   296,   257,   339,   339,   417,   392,   312,   296,   392,   379,   296,   288,   305,   274,   274,   320,   241,   247,   229,   274,   190,   182,   241,   211,   258,   229,   211,   175,   212,   179,   190,   197,   218,   169,   218,   186,   107,   169,   141,   137,   89,   141,   169,   141,   88,   128,   111,   133,   82,   123,   93,   130,   93,   137,   88,   140,   102,   113,   117,   117,   116,   112,   116,   116,   106,   118,   29,   102,   81,   106,   81,   118,   58,   93,   74,   82,   111,   58,   111,   72,   49,   48,   65,   65,   71,   25,   49,   35,   74,   63,   5,   0,   58,   35,   52,   30,   74,   42,   53,   63,   66,   44,   94,   78,   39,   43,   52,   44,   53,   40,   43,   43,   77,   64,   68,   64,   53,   75,   67,   78,   68,   95,   52,   66,   66,   77,   67,   77,   78,   94,   120,   98,   141,   169,   169,   224,   225,   187,   168,   193,   142,   95,   131,   115,   144,   197,   143,   191,   213,   156,   156,   156,   172,   172,   237,   188,   195,   164,   145,   163,   221,   188,   207,   230,   109,   129,   22,   157,   155,   155,   176,   156,   109,   71,   138,   138,   124,   129,   138,   156,   125,   125,   59,   18,   73,   22,   122,   36,   222,   54,   32,   22,   84,   149,   0,   26,   8,   55,   18,   5,   5,   149,   45,   26,   31,   45,   79,   214,   14,   91,   216,   135,   26,   149,   146,   201,   99,   222,   231,   90,   150,   277,   45,   375,   273,   84,   122,   282,   149,   122,   222,   99,   183,   233,   173,   5,   121,   73,   132,   99,   203,   5,   237,   164,   164,   183,   183,   250,   204,   242,   249,   276,   203,   291,   204,   323,   249,   292,   250,   353,   280,   329,   286,   280,   222,   292,   243,   222,   286,   201,   303,   231,   330,   215,   277,   273,   150,   215,   354,   269,   303,   231,   255,   349,   231,   314,   306,   373,   254,   349,   389,   174,   444,   385,   273,   441,   375,   375,   401,   349,   436,   457,   399,   324,   399,   403,   280,   369,   280,   280,   399,   369,   308,   353,   353,   367,   376,   318,   393,   367,   353,   353,   376,   301,   350,   383,   347,   334,   383,   377,   289,   343,   343,   343,   276,   317,   350,   317,   363,   363,   242,   265,   335,   335,   181,   265,   276,   242,   240,   240,   226,   272,   265,   230,   240,   271,   259,   259,   226,   226,   259,   236,   226,   191,   248,   236,   186,   218,   193,   218,   248,   219,   258,   267,   270,   264,   235,   288,   342,   271,   247,   300,   299,   300,   264,   264,   270,   299,   342,   382,   299,   342,   368,   342,   351,   392,   399,   399,   459,   430,   438,   397,   364,   399,   490,   490,   497,   497,   463,   448,   494,   480,   521,   471,   503,   480,   520,   510,   568,   529,   554,   570,   561,   553,   568,   568,   538,   513,   548,   513,   582,   542,   529,   500,   513,   548,   547,   542,   630,   610,   527,   582,   577,   572,   457,   470,   533,   502,   552,   527,   428,   436,   522,   522,   459,   469,   497,   497,   390,   390,   467,   467,   375,   470,   375,   436,   444,   416,   457,   373,   502,   444,   527,   532,   502,   533,   516,   492,   492,   533,   373,   492,   492,   492,   444,   482,   460,   336,   433,   433,   441,   389,   389,   374,   518,   429,   487,   433,   586,   460,   525,   478,   505,   629,   530,   607,   555,   622,   528,   567,   662,   528,   622,   600,   622,   567,   629,   592,   601,   601,   624,   612,   580,   634,   541,   541,   584,   551,   558,   609,   572,   577,   584,   559,   604,   560,   585,   585,   624,   609,   670,   653,   670,   646,   694,   694,   688,   711,   732,   711,   742,   736,   605,   605,   691,   662,   670,   709,   662,   662,   691,   685,   685,   704,   751,   738,   716,   669,   685,   685,   711,   736,   725,   751,   758,   747,   759,   767,   773,   774,   767,   767,   773,   781,   774,   774,   767,   765,   773,   771,   722,   751,   733,   737,   737,   756,   736,   738,   755,   742,   742,   745,   745,   771,   765,   707,   727,   748,   760,   717,   708,   742,   735,   676,   703,   701,   719,   672,   698,   688,   708,   720,   707,   656,   653,   657,   657,   600,   600,   674,   674,   609,   626,   607,   650,   631,   631,   634,   668,   687,   684,   643,   665,   624,   658,   631,   609,   645,   624,   643,   637,   644,   644,   652,   637,   640,   655,   640,   664,   681,   680,   678,   712,   652,   676,   687,   676,   700,   698,   698,   687,   719,   719,   705,   719,   727,   719,   744,   744,   623,   647,   696,   700,   538,   511,   603,   589,   521,   506,   554,   539,   570,   550,   599,   583,   718,   718,   678,   664,   680,   705,   628,   623,   664,   647,   562,   591,   628,   602,   517,   557,   545,   562,   640,   623,   515,   499,   491,   534,   509,   536,   498,   562,   509,   534,   536,   536,   455,   499,   462,   506,   545,   504,   515,   458,   517,   508,   531,   531,   550,   550,   554,   520,   554,   554,   521,   514,   508,   543,   504,   539,   503,   479,   508,   485,   447,   468,   504,   486,   463,   423,   383,   410,   448,   415,   431,   431,   450,   485,   376,   376,   431,   407,   357,   366,   377,   377,   411,   383,   427,   423,   427,   387,   451,   406,   450,   423,   425,   424,   396,   435,   424,   414,   432,   419,   340,   421,   361,   395,   370,   372,   442,   409,   405,   405,   404,   413,   473,   440,   484,   458,   473,   435,   419,   449,   449,   481,   495,   495,   458,   432,   435,   473,   440,   477,   593,   608,   588,   635,   536,   535,   606,   615,   546,   546,   565,   537,   472,   489,   565,   537,   563,   565,   507,   434,   476,   476,   395,   395,   434,   381,   344,   344,   426,   426,   381,   380,   489,   461,   461,   474,   488,   488,   489,   488,   445,   453,   386,   453,   493,   412,   496,   544,   544,   540,   493,   526,   581,   566,   540,   540,   540,   546,   540,   566,   544,   625,   606,   636,   639,   620,   636,   620,   651,   679,   613,   649,   679,   721,   683,   713,   679,   690,   639,   666,   606,   611,   620,   620,   642,   642,   593,   616,   616,   625,   635,   635,   654,   654,   660,   692,   712,   712,   639,   651,   682,   696,   697,   699,   679,   731,   699,   713,   713,   715,   699,   715,   729,   729,   748,   739,   702,   740,   752,   741,   775,   775,   761,   764,   763,   764,   690,   683,   740,   730,   740,   764,   772,   770,   772,   778,   776,  776,
+ 5,   82,   288,   671,   192,   277,   339,   82,   215,   538,   602,   437,   60,   277,   699,   385,   510,   518,   435,   217,   693,   262,   4,   136,   11,   261,   61,   408,   28,   311,   193,   451,   356,   49,   92,   35,   126,   272,   243,   83,   107,   115,   418,   5,   187,   580,   420,   720,   14,   354,   603,   358,   31,   431,   403,   415,   468,   575,   603,   573,   623,   618,   594,   668,   698,   739,   691,   738,   686,   735,   580,   762,   754,   664,   661,   723,   739,   517,   628,   626,   617,   575,   595,   635,   649,   545,   523,   752,   606,   740,   488,   24,   9,   46,   7,   9,   58,   3,   19,   69,   57,   153,   116,   165,   139,   85,   139,   523,   220,   97,   331,   455,   445,   260,   461,   404,   106,   321,   197,   285,   105,   189,   223,   159,   139,   284,   266,   199,   339,   180,   328,   321,   419,   365,   312,   355,   405,   279,   339,   337,   316,   339,   321,   152,   175,   179,   175,   128,   160,   123,   239,   72,   151,   35,   166,   25,   13,   123,   179,   119,   229,   66,   120,   86,   43,   75,   141,   115,   95,   317,   124,   219,   347,   108,   144,   155,   96,   168,   108,   29,   5,   204,   134,   8,   84,   55,   12,   214,   389,   216,   214,   5,   226,   268,   91,   36,   326,   36,   329,   90,   243,   460,   441,   367,   324,   254,   149,   516,   100,   276,   198,   357,   350,   391,   468,   291,   289,   345,   391,   195,   148,   316,   317,   256,   304,   270,   168,   342,   304,   359,   343,   368,   366,   366,   465,   422,   448,   314,   415,   448,   443,   510,   448,   497,   401,   560,   589,   436,   400,   401,   454,   582,   502,   441,   701,   518,   646,   530,   555,   522,   598,   629,   478,   610,   532,   586,   619,   610,   603,   571,   684,   751,   736,   674,   725,   765,   725,   775,   754,   762,   751,   762,   749,   765,   760,   665,   598,   709,   728,   650,   631,   530,   668,   530,   607,   619,   597,   655,   665,   658,   667,   667,   658,   727,   752,   590,   619,   771,   740,   556,   614,   739,   721,   588,   575,   591,   595,   479,   481,   570,   599,   564,   579,   423,   406,   484,   477,   351,   419,   388,   396,   328,   205,   327,   439,   426,   491,   472,   534,   440,   507,   566,   602,   496,   587,   184,   489,   260,   546,   346,   445,   446,   496,   596,   576,   690,   578,   639,   677,   728,   620,   596,   519,   638,   576,   682,   723,   700,   678,   763,   743,   739,   740,   752,   770,   21,   13,   33,   21,   28,   287,   15,   28,   23,   9,   9,   2,   15,   15,   6,   6,   13,   48,   1,   10,   6,   69,   13,   24,   13,   23,   16,   101,   38,   87,   38,   62,   153,   76,   139,   112,   57,   104,   105,   92,   105,   104,   136,   104,   57,   126,   205,   153,   127,   87,   37,   61,   159,   61,   101,   62,   87,   51,   60,   227,   85,   287,   110,   185,   147,   110,   325,   260,   287,   165,   227,   217,   283,   234,   307,   262,   331,   227,   217,   344,   103,   263,   283,   260,   394,   184,   331,   426,   446,   344,   228,   278,   310,   380,   293,   307,   310,   278,   340,   307,   307,   332,   319,   361,   361,   395,   371,   319,   332,   297,   372,   332,   284,   151,   253,   327,   327,   294,   245,   297,   206,   294,   208,   245,   208,   293,   275,   238,   180,   261,   228,   180,   189,   245,   199,   238,   228,   189,   166,   151,   167,   117,   161,   118,   192,   161,   200,   161,   232,   200,   246,   167,   209,   166,   210,   166,   210,   297,   295,   333,   362,   396,   355,   332,   348,   328,   362,   396,   246,   285,   279,   321,   311,   355,   257,   239,   266,   232,   348,   311,   410,   365,   305,   302,   379,   382,   305,   299,   296,   257,   305,   337,   258,   251,   258,   288,   211,   192,   223,   175,   241,   211,   182,   130,   190,   162,   212,   224,   186,   154,   212,   179,   128,   170,   133,   179,   114,   119,   133,   114,   123,   154,   128,   114,   72,   130,   72,   175,   128,   154,   102,   182,   106,   152,   118,   161,   160,   105,   112,   117,   113,   152,   25,   130,   102,   140,   106,   113,   65,   107,   89,   107,   93,   47,   81,   106,   47,   25,   58,   82,   25,   10,   41,   58,   70,   58,   25,   10,   29,   42,   42,   25,   66,   41,   43,   70,   52,   39,   77,   95,   30,   71,   44,   40,   44,   30,   40,   30,   78,   71,   64,   43,   68,   71,   68,   75,   75,   86,   67,   74,   77,   98,   78,   94,   98,   114,   119,   94,   170,   186,   193,   251,   194,   168,   171,   218,   120,   98,   142,   120,   171,   194,   172,   226,   176,   138,   191,   176,   207,   191,   198,   148,   132,   163,   5,   198,   230,   157,   221,   198,   129,   172,   12,   198,   131,   124,   138,   125,   83,   86,   124,   109,   109,   143,   125,   172,   129,   156,   32,   5,   122,   5,   84,   22,   146,   36,   59,   36,   134,   55,   25,   18,   5,   32,   12,   14,   8,   91,   91,   45,   56,   79,   135,   100,   45,   215,   135,   56,   91,   215,   122,   268,   146,   201,   196,   59,   216,   214,   150,   306,   174,   177,   146,   254,   90,   201,   268,   121,   233,   183,   146,   132,   183,   132,   183,   132,   158,   145,   202,   158,   202,   195,   132,   195,   145,   249,   250,   242,   202,   249,   203,   291,   242,   291,   249,   384,   222,   292,   243,   233,   173,   250,   195,   280,   292,   255,   349,   282,   390,   269,   135,   336,   269,   254,   322,   215,   255,   177,   303,   330,   303,   356,   354,   277,   330,   390,   309,   336,   373,   338,   214,   374,   354,   390,   356,   303,   428,   464,   367,   314,   369,   430,   324,   364,   326,   286,   403,   403,   347,   323,   358,   326,   347,   281,   358,   329,   376,   347,   363,   308,   377,   411,   308,   304,   357,   350,   313,   357,   313,   334,   308,   350,   334,   304,   335,   347,   276,   290,   301,   308,   221,   237,   237,   202,   221,   256,   240,   256,   256,   221,   259,   248,   289,   236,   236,   191,   264,   219,   213,   176,   219,   213,   218,   247,   224,   235,   225,   194,   267,   270,   271,   236,   267,   312,   315,   264,   270,   316,   300,   298,   298,   271,   300,   312,   368,   387,   315,   345,   359,   337,   379,   419,   422,   393,   454,   422,   397,   349,   403,   430,   459,   467,   490,   467,   456,   415,   471,   454,   543,   456,   494,   471,   514,   490,   548,   510,   573,   583,   547,   573,   589,   573,   529,   490,   529,   510,   561,   529,   542,   492,   542,   568,   561,   548,   626,   597,   547,   597,   594,   582,   416,   469,   527,   501,   547,   522,   470,   438,   501,   527,   467,   470,   469,   501,   397,   349,   438,   469,   416,   502,   428,   470,   400,   428,   400,   322,   500,   420,   533,   560,   533,   559,   482,   500,   532,   552,   420,   525,   444,   482,   482,   516,   385,   273,   460,   336,   487,   433,   336,   487,   541,   530,   518,   505,   558,   516,   560,   541,   516,   592,   487,   574,   518,   567,   483,   600,   691,   600,   629,   646,   592,   530,   601,   555,   607,   574,   631,   580,   612,   650,   551,   505,   586,   516,   585,   612,   577,   584,   577,   552,   584,   559,   586,   558,   604,   586,   646,   629,   673,   653,   693,   673,   698,   694,   720,   707,   732,   725,   632,   571,   670,   632,   691,   725,   641,   685,   711,   669,   704,   722,   757,   722,   695,   704,   691,   709,   720,   724,   709,   747,   759,   751,   758,   768,   779,   782,   773,   765,   774,   782,   780,   773,   771,   766,   775,   769,   737,   737,   716,   738,   722,   755,   732,   745,   756,   750,   735,   755,   750,   766,   762,   717,   734,   756,   762,   703,   701,   744,   734,   687,   707,   700,   726,   688,   708,   703,   719,   717,   703,   657,   646,   672,   656,   622,   567,   653,   673,   631,   621,   634,   668,   650,   645,   656,   672,   676,   668,   652,   676,   637,   665,   624,   604,   637,   621,   626,   621,   630,   643,   643,   626,   644,   658,   655,   667,   678,   675,   686,   723,   663,   668,   681,   665,   701,   684,   701,   689,   727,   718,   710,   708,   718,   710,   748,   739,   640,   655,   705,   689,   543,   484,   590,   573,   504,   477,   550,   521,   564,   545,   595,   575,   705,   710,   671,   647,   692,   700,   635,   602,   654,   635,   587,   615,   608,   587,   524,   579,   524,   579,   628,   608,   504,   477,   499,   549,   534,   557,   535,   557,   506,   524,   509,   534,   462,   524,   473,   524,   531,   486,   495,   447,   531,   485,   515,   539,   531,   539,   539,   538,   543,   553,   520,   494,   520,   538,   521,   543,   485,   456,   486,   468,   465,   450,   481,   465,   450,   427,   387,   392,   431,   384,   443,   407,   463,   479,   407,   391,   418,   391,   383,   368,   402,   383,   387,   366,   411,   402,   414,   382,   424,   382,   427,   411,   449,   414,   425,   455,   406,   382,   410,   392,   381,   413,   404,   434,   405,   371,   408,   372,   409,   372,   434,   360,   442,   409,   475,   465,   440,   409,   447,   455,   458,   465,   475,   481,   449,   417,   462,   499,   473,   499,   591,   587,   616,   628,   537,   556,   616,   591,   556,   578,   563,   536,   461,   523,   537,   507,   537,   562,   472,   395,   472,   439,   381,   352,   421,   360,   380,   394,   394,   380,   413,   426,   452,   421,   489,   512,   446,   474,   512,   526,   386,   398,   398,   446,   412,   445,   453,   466,   493,   496,   496,   546,   576,   540,   493,   526,   566,   566,   544,   576,   519,   596,   578,   616,   638,   581,   651,   611,   666,   649,   620,   666,   648,   729,   702,   715,   666,   697,   636,   690,   625,   642,   642,   649,   651,   666,   617,   639,   636,   651,   638,   617,   659,   638,   682,   686,   696,   705,   660,   677,   680,   692,   682,   696,   702,   728,   715,   729,   697,   699,   714,   728,   731,   743,   741,   731,   721,   743,   743,   731,   776,   769,   753,   754,   764,   753,   702,   706,   721,   721,   729,   763,   764,   764,   769,   770,   778,  772,
+ 148,   89,   267,   659,   232,   373,   320,   65,   149,   553,   614,   430,   17,   216,   682,   273,   494,   487,   425,   147,   674,   220,   11,   92,   17,   307,   46,   442,   19,   279,   197,   427,   314,   63,   112,   41,   139,   290,   250,   109,   114,   142,   423,   163,   219,   574,   482,   732,   8,   416,   599,   393,   20,   415,   437,   393,   465,   583,   597,   570,   627,   619,   577,   650,   688,   741,   694,   736,   671,   732,   551,   760,   760,   678,   675,   734,   744,   511,   640,   610,   593,   564,   599,   615,   613,   549,   556,   760,   588,   753,   512,   23,   15,   33,   11,   2,   63,   10,   28,   80,   76,   127,   167,   97,   87,   33,   101,   535,   159,   165,   287,   449,   412,   346,   472,   439,   29,   295,   171,   279,   136,   136,   241,   220,   159,   294,   296,   245,   365,   234,   295,   285,   410,   348,   288,   388,   425,   302,   351,   320,   300,   302,   348,   182,   190,   186,   211,   111,   199,   162,   279,   29,   160,   29,   167,   71,   19,   137,   137,   120,   235,   67,   115,   108,   53,   86,   144,   108,   115,   301,   108,   187,   353,   96,   170,   187,   108,   187,   115,   35,   109,   158,   177,   18,   122,   18,   22,   277,   244,   269,   56,   157,   259,   314,   26,   84,   286,   54,   323,   134,   286,   433,   309,   369,   326,   282,   196,   525,   214,   265,   157,   343,   317,   402,   485,   281,   298,   316,   363,   145,   143,   313,   290,   265,   290,   267,   142,   312,   272,   337,   316,   342,   345,   343,   468,   393,   456,   324,   448,   454,   423,   480,   471,   513,   397,   532,   597,   397,   322,   437,   459,   572,   470,   389,   698,   441,   670,   429,   574,   542,   621,   633,   505,   594,   500,   584,   627,   598,   619,   600,   688,   733,   742,   693,   736,   759,   722,   772,   763,   757,   749,   765,   755,   767,   763,   667,   610,   711,   734,   645,   634,   567,   684,   555,   612,   614,   603,   647,   663,   643,   658,   678,   667,   735,   756,   603,   599,   775,   746,   588,   602,   734,   702,   593,   549,   587,   579,   485,   458,   573,   590,   570,   595,   418,   379,   511,   442,   365,   432,   410,   417,   333,   220,   361,   476,   474,   484,   439,   557,   462,   509,   546,   579,   526,   562,   263,   461,   325,   523,   325,   453,   474,   488,   625,   611,   666,   588,   661,   682,   723,   613,   578,   569,   639,   581,   696,   712,   686,   664,   769,   753,   728,   730,   741,   778,   11,   10,   17,   33,   21,   227,   7,   15,   19,   19,   6,   1,   9,   4,   3,   1,   6,   69,   3,   16,   10,   92,   16,   38,   23,   34,   23,   62,   24,   57,   37,   37,   104,   69,   126,   117,   48,   69,   112,   80,   92,   80,   127,   127,   87,   104,   234,   126,   153,   126,   62,   34,   101,   28,   61,   34,   62,   103,   27,   220,   97,   278,   27,   110,   85,   147,   263,   103,   217,   85,   165,   110,   217,   262,   261,   234,   360,   278,   227,   283,   260,   341,   344,   283,   346,   325,   278,   452,   394,   346,   178,   331,   340,   360,   262,   319,   360,   310,   360,   340,   293,   297,   307,   319,   395,   361,   404,   361,   371,   332,   405,   372,   319,   136,   252,   294,   371,   327,   252,   252,   239,   252,   178,   238,   261,   261,   319,   275,   139,   208,   261,   208,   178,   199,   151,   199,   275,   228,   160,   199,   166,   167,   167,   161,   182,   192,   239,   200,   257,   232,   210,   206,   252,   209,   252,   210,   246,   295,   285,   328,   333,   388,   362,   370,   355,   355,   355,   362,   239,   246,   239,   311,   302,   348,   274,   266,   302,   266,   365,   348,   388,   378,   337,   320,   365,   359,   274,   267,   320,   296,   288,   305,   229,   224,   235,   258,   229,   223,   257,   182,   274,   241,   223,   140,   229,   190,   179,   225,   212,   186,   235,   212,   133,   141,   169,   154,   94,   114,   154,   133,   111,   133,   93,   107,   93,   162,   81,   162,   107,   128,   123,   175,   130,   140,   106,   118,   166,   151,   160,   112,   140,   113,   112,   123,   88,   130,   102,   106,   70,   82,   94,   89,   81,   41,   88,   81,   63,   24,   72,   70,   30,   24,   47,   41,   89,   70,   109,   25,   72,   39,   49,   29,   63,   49,   44,   74,   49,   42,   74,   75,   29,   30,   42,   39,   52,   39,   44,   40,   67,   43,   50,   50,   50,   64,   53,   68,   64,   75,   53,   77,   67,   78,   68,   98,   95,   119,   144,   119,   144,   193,   170,   225,   197,   194,   194,   224,   144,   120,   168,   142,   142,   171,   181,   207,   187,   176,   172,   191,   181,   207,   230,   181,   145,   202,   164,   202,   188,   148,   181,   188,   148,   143,   5,   163,   168,   131,   155,   138,   96,   83,   155,   124,   96,   148,   109,   129,   109,   129,   22,   12,   54,   73,   54,   73,   173,   73,   90,   59,   59,   90,   5,   55,   18,   90,   32,   20,   14,   55,   150,   14,   20,   20,   31,   56,   20,   150,   79,   31,   45,   91,   73,   255,   73,   146,   134,   134,   79,   135,   79,   330,   100,   134,   201,   196,   196,   177,   201,   173,   173,   243,   99,   73,   173,   99,   121,   121,   164,   132,   198,   145,   203,   243,   195,   204,   158,   203,   204,   237,   242,   281,   249,   318,   281,   323,   291,   358,   233,   323,   292,   286,   233,   291,   250,   268,   329,   177,   282,   196,   375,   150,   216,   174,   216,   306,   269,   306,   314,   255,   231,   282,   282,   303,   269,   322,   306,   330,   244,   244,   400,   420,   338,   309,   306,   428,   364,   356,   390,   500,   393,   268,   367,   437,   268,   324,   324,   326,   369,   364,   318,   318,   323,   329,   363,   308,   384,   358,   384,   376,   391,   276,   363,   402,   335,   313,   366,   357,   304,   334,   316,   313,   281,   335,   357,   334,   350,   335,   281,   301,   317,   301,   188,   230,   265,   237,   207,   221,   207,   240,   290,   256,   272,   251,   272,   264,   259,   213,   289,   248,   236,   213,   225,   219,   193,   224,   197,   247,   251,   225,   235,   247,   251,   248,   247,   299,   312,   248,   251,   298,   270,   271,   289,   298,   271,   315,   345,   368,   300,   315,   382,   359,   359,   406,   430,   422,   480,   454,   401,   356,   401,   403,   480,   459,   513,   490,   443,   431,   479,   471,   520,   479,   479,   494,   503,   480,   553,   514,   553,   590,   542,   568,   582,   589,   514,   510,   538,   529,   568,   548,   513,   457,   522,   561,   572,   561,   618,   618,   552,   594,   598,   594,   464,   501,   552,   527,   572,   547,   464,   469,   497,   501,   437,   436,   467,   469,   436,   397,   437,   438,   354,   464,   416,   428,   457,   464,   416,   400,   464,   373,   502,   525,   500,   532,   525,   532,   525,   559,   338,   482,   457,   444,   420,   460,   420,   385,   505,   385,   374,   478,   433,   429,   574,   483,   555,   478,   560,   505,   558,   518,   551,   601,   555,   580,   574,   592,   567,   528,   685,   571,   653,   632,   629,   592,   633,   601,   633,   607,   609,   585,   607,   656,   580,   551,   560,   558,   551,   585,   552,   559,   598,   577,   598,   584,   609,   586,   621,   604,   673,   657,   694,   673,   707,   693,   703,   707,   726,   720,   735,   724,   662,   632,   694,   670,   662,   704,   605,   641,   709,   641,   669,   695,   759,   725,   722,   695,   709,   704,   724,   732,   724,   733,   767,   759,   747,   758,   780,   768,   768,   771,   768,   774,   781,   780,   773,   771,   779,   775,   716,   749,   737,   749,   738,   750,   742,   749,   762,   745,   744,   749,   755,   769,   766,   720,   735,   750,   756,   708,   710,   750,   744,   684,   693,   710,   717,   674,   703,   693,   717,   726,   717,   633,   622,   674,   672,   646,   622,   657,   653,   612,   610,   633,   656,   634,   650,   633,   656,   681,   676,   637,   663,   645,   652,   645,   624,   652,   637,   630,   626,   627,   630,   658,   643,   627,   644,   644,   655,   689,   661,   689,   718,   645,   663,   689,   681,   689,   687,   708,   701,   726,   727,   700,   710,   723,   718,   750,   748,   627,   640,   692,   686,   553,   491,   599,   590,   515,   476,   570,   515,   583,   564,   614,   595,   712,   705,   686,   654,   675,   692,   647,   608,   671,   654,   579,   608,   615,   608,   545,   575,   549,   557,   647,   628,   495,   506,   517,   524,   506,   534,   507,   536,   476,   506,   507,   509,   484,   517,   491,   499,   517,   481,   511,   432,   511,   486,   511,   515,   545,   531,   550,   514,   539,   543,   508,   503,   503,   520,   508,   521,   508,   463,   504,   486,   451,   451,   495,   481,   468,   450,   411,   378,   456,   407,   456,   418,   443,   463,   384,   407,   443,   418,   377,   387,   391,   402,   414,   387,   414,   411,   424,   414,   447,   379,   451,   427,   417,   406,   417,   425,   419,   406,   417,   410,   352,   452,   371,   404,   396,   408,   439,   408,   435,   409,   439,   380,   477,   442,   455,   447,   442,   440,   424,   475,   432,   458,   484,   475,   475,   449,   455,   491,   462,   473,   565,   591,   593,   615,   562,   563,   588,   593,   523,   556,   593,   507,   498,   498,   563,   535,   535,   537,   498,   421,   507,   472,   421,   381,   461,   413,   331,   380,   446,   394,   421,   413,   474,   452,   498,   489,   453,   446,   523,   512,   341,   386,   325,   398,   466,   341,   445,   519,   466,   493,   445,   512,   544,   576,   544,   496,   526,   578,   576,   596,   581,   611,   596,   606,   617,   569,   660,   581,   677,   648,   569,   642,   683,   713,   679,   697,   649,   677,   660,   677,   636,   625,   611,   642,   625,   651,   615,   617,   639,   636,   654,   638,   671,   659,   661,   675,   699,   696,   661,   660,   661,   680,   677,   682,   690,   715,   714,   715,   690,   697,   712,   714,   715,   731,   752,   741,   713,   729,   754,   743,   779,   772,   746,   753,   769,   761,   713,   702,   730,   706,   721,   754,   770,   761,   764,   777,   779,  778,
+ 180,   626,   562,   1468,   524,   838,   138,   634,   764,   1234,   310,   856,   377,   825,   1479,   1038,   241,   1047,   1341,   453,   273,   332,   -1,   415,   -1,   449,   428,   1352,   98,   547,   919,   1336,   836,   631,   413,   638,   409,   224,   817,   723,   598,   694,   323,   191,   171,   1056,   1035,   1099,   751,   1013,   1236,   869,   755,   960,   856,   235,   234,   1245,   296,   319,   1230,   268,   993,   1185,   1097,   1491,   1105,   274,   1248,   1101,   1075,   1159,   278,   368,   1211,   288,   1229,   1286,   1264,   1183,   1462,   57,   1244,   1379,   360,   1262,   1384,   72,   1382,   308,   1415,   401,   387,   378,   22,   385,   640,   395,   28,   416,   419,   423,   154,   109,   409,   93,   104,   86,   123,   103,   461,   1365,   1421,   347,   1388,   1356,   151,   131,   696,   29,   415,   488,   573,   108,   106,   490,   551,   508,   553,   421,   117,   546,   1345,   553,   928,   537,   18,   547,   128,   566,   932,   6,   548,   519,   146,   586,   574,   597,   514,   600,   545,   643,   514,   179,   515,   635,   384,   149,   590,   681,   569,   675,   694,   167,   649,   672,   683,   178,   162,   893,   176,   44,   872,   176,   683,   177,   173,   688,   167,   153,   641,   799,   776,   747,   737,   746,   717,   772,   841,   827,   758,   0,   909,   854,   763,   197,   860,   740,   812,   770,   813,   1039,   846,   855,   859,   778,   779,   1027,   758,   897,   718,   882,   886,   1326,   1305,   804,   935,   230,   873,   707,   728,   883,   169,   903,   222,   924,   693,   929,   224,   944,   883,   939,   233,   211,   56,   948,   1314,   854,   960,   242,   42,   968,   236,   957,   951,   1024,   58,   1009,   1020,   54,   949,   994,   1014,   202,   1220,   17,   1091,   1046,   1057,   985,   286,   1067,   1048,   267,   1028,   1077,   295,   286,   50,   1062,   64,   1124,   1147,   20,   1102,   283,   1116,   1497,   1507,   281,   1142,   1155,   1152,   1132,   278,   302,   267,   1111,   311,   1187,   1186,   1066,   1191,   1055,   1073,   306,   58,   1231,   1193,   1204,   302,   73,   300,   1157,   87,   1236,   50,   1140,   372,   356,   10,   76,   1492,   1378,   81,   1377,   322,   1319,   1367,   59,   1236,   1242,   316,   42,   1335,   1235,   1358,   128,   132,   555,   1340,   534,   123,   482,   1397,   351,   1235,   1397,   1271,   1374,   1276,   1433,   316,   1431,   1256,   -1,   1410,   460,   1384,   347,   1422,   1413,   343,   1437,   364,   1455,   88,   1474,   1478,   288,   1446,   1438,   -1,   1440,   1428,   1479,   1213,   1233,   73,   1500,   89,   311,   1504,   1490,   1511,   94,   397,   24,   375,   382,   436,   388,   28,   156,   92,   391,   390,   92,   387,   395,   389,   376,   408,   389,   397,   376,   99,   399,   403,   156,   383,   399,   431,   398,   419,   403,   425,   101,   412,   36,   614,   100,   416,   612,   99,   413,   418,   23,   101,   404,   407,   450,   407,   101,   409,   406,   430,   106,   426,   402,   406,   404,   -1,   12,   452,   103,   461,   433,   446,   444,   19,   345,   455,   380,   103,   434,   19,   443,   450,   25,   448,   468,   436,   380,   457,   442,   -1,   454,   113,   464,   345,   466,   335,   1404,   454,   507,   461,   471,   1357,   448,   477,   451,   466,   471,   475,   449,   484,   470,   482,   480,   479,   1348,   478,   491,   476,   1355,   483,   501,   120,   529,   492,   333,   490,   496,   532,   543,   494,   465,   508,   504,   449,   470,   511,   36,   499,   499,   129,   121,   127,   514,   508,   505,   507,   611,   509,   154,   102,   516,   610,   572,   522,   495,   517,   552,   521,   531,   515,   493,   513,   527,   528,   525,   130,   131,   331,   331,   330,   541,   486,   548,   541,   537,   536,   545,   119,   150,   142,   141,   539,   564,   150,   137,   550,   133,   142,   329,   133,   566,   6,   327,   943,   565,   225,   558,   126,   134,   557,   569,   686,   923,   2,   576,   4,   523,   606,   549,   122,   572,   620,   571,   144,   586,   686,   586,   145,   160,   581,   596,   683,   593,   145,   680,   680,   596,   598,   157,   593,   603,   40,   601,   602,   630,   144,   587,   596,   618,   574,   620,   143,   622,   518,   513,   120,   152,   410,   608,   608,   34,   600,   605,   578,   607,   615,   634,   626,   591,   40,   601,   637,   619,   621,   96,   636,   643,   1,   646,   394,   628,   628,   1,   623,   155,   636,   151,   652,   648,   617,   33,   637,   661,   639,   645,   644,   674,   672,   646,   635,   652,   660,   657,   655,   658,   660,   677,   656,   666,   164,   665,   664,   667,   671,   668,   165,   669,   653,   663,   679,   670,   682,   692,   592,   166,   680,   174,   917,   30,   921,   696,   689,   696,   918,   681,   159,   226,   691,   226,   689,   703,   901,   175,   721,   704,   914,   713,   698,   714,   220,   792,   710,   43,   793,   714,   0,   895,   210,   728,   697,   734,   710,   693,   170,   725,   729,   173,   163,   720,   727,   723,   220,   731,   716,   715,   730,   186,   717,   737,   786,   197,   736,   785,   738,   770,   195,   770,   748,   641,   185,   734,   741,   186,   759,   48,   194,   760,   759,   -1,   52,   762,   -1,   756,   824,   757,   755,   753,   760,   735,   193,   765,   777,   199,   743,   761,   190,   771,   839,   -1,   182,   768,   206,   199,   820,   766,   787,   815,   796,   767,   788,   783,   790,   787,   789,   794,   707,   710,   799,   803,   817,   707,   219,   794,   805,   798,   898,   898,   807,   800,   215,   891,   806,   804,   869,   815,   808,   38,   200,   783,   809,   798,   857,   812,   832,   834,   778,   848,   827,   761,   842,   189,   839,   189,   828,   193,   820,   835,   205,   821,   850,   829,   13,   774,   823,   -1,   188,   1020,   1031,   187,   -1,   837,   851,   32,   836,   848,   1021,   51,   193,   203,   11,   854,   237,   204,   196,   862,   953,   172,   806,   198,   196,   890,   885,   810,   198,   1320,   867,   218,   885,   218,   1331,   894,   881,   211,   887,   878,   887,   221,   878,   868,   889,   882,   878,   886,   877,   885,   169,   169,   874,   711,   705,   896,   793,   713,   904,   899,   900,   37,   900,   907,   921,   228,   926,   908,   914,   935,   915,   916,   699,   922,   44,   690,   568,   582,   927,   686,   687,   927,   931,   906,   912,   924,   938,   938,   926,   925,   221,   937,   936,   216,   934,   934,   929,   232,   1325,   140,   217,   560,   229,   560,   1342,   950,   235,   962,   239,   244,   850,   54,   856,   949,   1005,   978,   956,   1316,   53,   964,   242,   1299,   1303,   961,   961,   1297,   955,   9,   16,   974,   320,   259,   976,   246,   1237,   970,   968,   977,   970,   986,   979,   985,   1033,   259,   981,   251,   986,   79,   296,   999,   263,   267,   992,   1018,   1008,   991,   1004,   987,   259,   1014,   1012,   1008,   998,   1011,   1016,   1012,   996,   247,   952,   249,   1002,   49,   1021,   1018,   1001,   1019,   1001,   49,   248,   852,   1031,   1025,   1051,   264,   245,   1032,   264,   1024,   1084,   844,   1027,   1017,   1035,   46,   1050,   844,   15,   1050,   1038,   1044,   1048,   1040,   257,   45,   291,   1057,   262,   1051,   1053,   1049,   1045,   1078,   1068,   1047,   45,   1045,   1066,   291,   1062,   1119,   269,   1092,   256,   1054,   293,   1069,   258,   1184,   1056,   1182,   70,   294,   1185,   70,   1053,   1049,   207,   70,   1072,   1084,   1086,   993,   1081,   1083,   1082,   1090,   1049,   260,   265,   1094,   261,   1096,   1181,   1165,   273,   1169,   1095,   1172,   1156,   69,   1123,   1106,   269,   1093,   256,   1061,   276,   -1,   1112,   287,   -1,   1118,   1117,   275,   276,   1114,   1114,   1111,   1108,   47,   47,   287,   -1,   283,   1115,   -1,   -1,   -1,   -1,   1133,   1138,   1130,   1130,   -1,   1129,   307,   1154,   1496,   1497,   1143,   1144,   1141,   1148,   1116,   1153,   1101,   1152,   1159,   1153,   1163,   282,   1146,   369,   71,   1172,   1163,   1146,   1149,   1169,   1166,   1228,   76,   1219,   1095,   1224,   1172,   20,   1160,   1165,   1167,   1167,   1160,   261,   1178,   1168,   1189,   1175,   1058,   1092,   1094,   290,   286,   1188,   1189,   1074,   289,   1174,   1177,   1217,   1215,   1198,   1215,   1198,   298,   1194,   1089,   1192,   1201,   989,   1183,   266,   1200,   299,   1200,   1202,   299,   1207,   300,   1212,   74,   1233,   1226,   289,   63,   1210,   285,   1221,   1164,   1161,   1218,   303,   1226,   1166,   1161,   1213,   1247,   1158,   65,   1206,   1208,   1251,   1212,   1295,   336,   320,   59,   1266,   326,   321,   1238,   57,   85,   10,   322,   1473,   1224,   68,   1255,   1471,   367,   1255,   1259,   1468,   1466,   342,   1258,   1257,   1377,   1262,   322,   1269,   1261,   1252,   1258,   1308,   1239,   1279,   1262,   1275,   338,   1391,   1271,   1239,   1281,   340,   1270,   336,   1260,   1373,   1279,   1286,   1309,   325,   328,   1288,   1305,   1284,   1241,   1282,   1289,   1291,   977,   1301,   1234,   1298,   965,   967,   1293,   1296,   963,   1287,   959,   1283,   56,   234,   1336,   1369,   1367,   1307,   1336,   1328,   556,   1316,   1320,   959,   1323,   959,   1303,   1315,   1323,   42,   213,   1327,   940,   213,   876,   1333,   1325,   1328,   876,   1339,   1343,   1364,   560,   31,   1330,   1371,   1343,   1338,   111,   946,   1335,   555,   1313,   1399,   462,   481,   1356,   136,   481,   115,   1351,   1363,   1353,   337,   468,   326,   27,   1365,   1306,   1359,   1359,   1334,   1360,   1285,   1361,   1360,   318,   1365,   1338,   1278,   1268,   1280,   1373,   315,   315,   80,   1258,   1393,   309,   1378,   1376,   86,   356,   313,   1276,   1410,   107,   1392,   1272,   1391,   1380,   1388,   1398,   1394,   337,   1406,   1346,   1409,   1357,   468,   1405,   463,   1403,   1347,   462,   335,   1347,   1389,   1414,   1419,   351,   348,   1427,   456,   1418,   349,   463,   -1,   1416,   350,   -1,   1420,   1426,   1422,   348,   1434,   1434,   1424,   343,   341,   361,   1428,   354,   362,   354,   361,   1382,   1467,   362,   1475,   364,   1455,   84,   1441,   1461,   -1,   1483,   1480,   1485,   1447,   1478,   1442,   1453,   1465,   1460,   1457,   1447,   1465,   1444,   83,   1440,   1454,   1442,   1469,   1440,   3,   363,   1476,   68,   1479,   1232,   1470,   358,   1211,   1250,   358,   365,   1502,   1487,   1487,   1488,   1453,   14,   366,   359,   1481,   1495,   373,   1495,   1449,   1489,   370,   1489,   1512,   1510,   308,   370,   1510,   1498,   1492,   312,   1505,   312,   1449,   278,   1509,   1501,   1500,   -1,   -1,  374,
+ 712,   639,   923,   74,   523,   1031,   558,   633,   206,   969,   1244,   250,   -1,   189,   1478,   845,   1297,   1041,   136,   440,   1168,   452,   94,   414,   377,   470,   435,   1359,   92,   119,   118,   1332,   237,   647,   617,   648,   503,   903,   816,   155,   591,   693,   240,   708,   916,   1045,   1036,   1122,   183,   1019,   306,   853,   756,   1315,   249,   869,   1309,   1242,   246,   972,   295,   266,   1081,   289,   270,   1490,   1098,   272,   3,   1099,   1079,   284,   87,   301,   3,   1157,   1163,   1235,   1230,   990,   1378,   85,   320,   1462,   -1,   81,   1381,   1159,   356,   370,   1411,   400,   28,   105,   375,   386,   631,   642,   426,   414,   408,   418,   516,   435,   431,   377,   427,   1272,   109,   108,   457,   1338,   1420,   454,   337,   1352,   410,   130,   174,   545,   488,   417,   576,   332,   123,   496,   564,   493,   327,   504,   532,   533,   1344,   539,   565,   329,   1340,   551,   139,   138,   941,   547,   554,   606,   580,   584,   571,   157,   127,   158,   137,   116,   613,   643,   102,   39,   383,   147,   149,   692,   585,   673,   168,   173,   667,   724,   681,   163,   167,   892,   178,   688,   864,   723,   118,   699,   170,   175,   41,   644,   715,   791,   832,   746,   780,   749,   733,   5,   842,   829,   762,   718,   905,   831,   746,   743,   819,   737,   865,   769,   814,   1040,   841,   204,   203,   834,   778,   1051,   845,   892,   712,   233,   888,   323,   1319,   868,   221,   140,   875,   799,   697,   216,   224,   896,   37,   562,   695,   557,   907,   139,   217,   944,   939,   230,   1307,   55,   964,   858,   239,   950,   1311,   966,   962,   985,   952,   1026,   992,   951,   829,   1011,   11,   987,   996,   1042,   1219,   253,   1106,   1044,   1070,   973,   1089,   1174,   1076,   992,   1025,   1085,   1202,   993,   61,   1064,   1168,   1143,   1150,   1096,   67,   1115,   1114,   1513,   284,   282,   282,   275,   279,   1125,   369,   301,   1183,   1121,   75,   1214,   294,   1059,   270,   1068,   290,   60,   268,   1249,   1214,   1203,   1207,   1210,   285,   69,   1158,   58,   1244,   1139,   1498,   313,   1253,   288,   1503,   1386,   338,   344,   342,   1302,   1370,   971,   972,   1240,   1245,   213,   559,   1284,   334,   559,   1285,   1313,   555,   535,   21,   1348,   326,   1408,   1278,   1356,   314,   1372,   1274,   1427,   1256,   1415,   1393,   441,   1409,   349,   1414,   1418,   1417,   335,   1412,   1456,   1437,   1452,   309,   74,   1470,   366,   84,   1433,   1441,   357,   1443,   1477,   1486,   1471,   1254,   1154,   1499,   1481,   -1,   1495,   1513,   24,   395,   12,   93,   378,   453,   94,   381,   98,   156,   390,   -1,   95,   22,   393,   386,   385,   396,   97,   401,   97,   34,   394,   411,   401,   406,   91,   430,   91,   425,   425,   400,   420,   392,   424,   116,   398,   408,   34,   418,   23,   99,   423,   414,   424,   412,   129,   36,   497,   420,   404,   98,   429,   379,   26,   426,   402,   455,   437,   108,   26,   452,   -1,   437,   105,   439,   456,   -1,   447,   439,   444,   438,   446,   469,   500,   421,   471,   21,   445,   113,   458,   1416,   110,   447,   349,   347,   436,   1347,   459,   459,   497,   451,   475,   451,   472,   501,   473,   469,   1401,   1346,   467,   494,   474,   477,   1349,   478,   115,   333,   1351,   538,   1350,   485,   482,   121,   532,   125,   483,   491,   527,   496,   521,   493,   423,   502,   505,   504,   487,   501,   124,   129,   25,   497,   465,   510,   488,   509,   502,   511,   148,   148,   530,   517,   526,   520,   143,   519,   550,   524,   573,   4,   529,   495,   529,   527,   489,   531,   543,   489,   544,   130,   538,   537,   536,   535,   135,   548,   540,   535,   495,   525,   543,   29,   137,   142,   575,   552,   558,   126,   128,   553,   330,   1313,   227,   563,   556,   945,   564,   2,   566,   561,   570,   563,   576,   918,   160,   575,   579,   577,   549,   577,   570,   567,   122,   606,   160,   581,   580,   687,   585,   684,   920,   583,   598,   589,   588,   604,   625,   594,   584,   589,   629,   587,   627,   587,   624,   149,   627,   600,   624,   147,   595,   578,   618,   615,   116,   609,   154,   152,   611,   613,   620,   622,   410,   605,   629,   607,   619,   609,   640,   599,   653,   1,   629,   638,   595,   601,   33,   398,   7,   623,   656,   632,   631,   35,   625,   650,   180,   745,   633,   179,   651,   655,   650,   645,   659,   647,   33,   657,   625,   670,   179,   662,   645,   652,   673,   658,   649,   661,   675,   666,   667,   665,   164,   671,   673,   677,   665,   654,   659,   675,   161,   663,   669,   676,   654,   682,   691,   159,   166,   685,   588,   582,   582,   171,   688,   919,   695,   162,   719,   41,   691,   118,   220,   704,   44,   702,   730,   701,   697,   703,   896,   895,   219,   795,   794,   708,   895,   706,   703,   711,   180,   728,   736,   191,   177,   719,   175,   700,   727,   39,   721,   725,   176,   715,   726,   732,   729,   731,   742,   749,   740,   738,   735,   740,   815,   735,   748,   733,   195,   779,   -1,   194,   183,   744,   185,   -1,   750,   744,   773,   48,   52,   759,   52,   190,   750,   753,   771,   757,   754,   752,   767,   820,   788,   739,   182,   199,   773,   825,   756,   823,   208,   743,   780,   822,   206,   184,   768,   785,   787,   200,   782,   736,   782,   767,   790,   782,   795,   786,   705,   709,   791,   784,   796,   801,   181,   803,   805,   897,   800,   215,   801,   864,   804,   812,   816,   865,   814,   198,   819,   860,   811,   808,   38,   781,   196,   780,   835,   769,   774,   760,   13,   775,   771,   830,   837,   837,   836,   833,   832,   821,   822,   831,   830,   1020,   828,   834,   188,   -1,   1017,   1037,   15,   202,   774,   1015,   953,   952,   1009,   984,   948,   857,   853,   54,   818,   204,   857,   859,   855,   858,   868,   172,   864,   870,   873,   863,   55,   51,   810,   871,   1321,   209,   889,   1327,   890,   884,   1329,   1324,   228,   884,   230,   883,   891,   893,   880,   212,   875,   889,   807,   209,   886,   893,   706,   223,   209,   802,   901,   899,   698,   905,   892,   223,   902,   925,   905,   911,   192,   913,   907,   926,   909,   910,   921,   912,   684,   690,   30,   918,   906,   915,   569,   927,   931,   930,   920,   562,   227,   906,   568,   934,   225,   937,   911,   935,   925,   941,   942,   943,   933,   929,   940,   231,   229,   324,   954,   947,   955,   250,   249,   244,   849,   861,   968,   955,   243,   957,   1318,   1314,   965,   966,   1296,   961,   317,   241,   1298,   241,   974,   977,   1295,   59,   988,   969,   981,   975,   1293,   980,   9,   983,   975,   988,   980,   852,   243,   988,   999,   973,   61,   79,   997,   994,   1083,   62,   852,   252,   1030,   1023,   1081,   991,   1018,   1006,   243,   1003,   11,   1002,   958,   1007,   851,   1009,   1005,   1011,   847,   1001,   1013,   851,   1033,   995,   995,   843,   1014,   843,   998,   1029,   1021,   264,   207,   1029,   1032,   1026,   5,   1034,   984,   1033,   1022,   46,   46,   1040,   1048,   201,   846,   253,   1042,   -1,   1057,   -1,   1055,   1042,   1077,   1039,   207,   255,   1076,   1067,   293,   1073,   258,   1065,   1060,   1059,   1110,   -1,   1175,   269,   1063,   1058,   261,   1054,   1067,   1069,   1197,   1080,   1056,   1188,   45,   1075,   1086,   1079,   1078,   1087,   999,   1084,   1085,   1082,   260,   1077,   1080,   1087,   1199,   1197,   1093,   1180,   1105,   1091,   1098,   1095,   1170,   1100,   69,   1121,   1151,   1122,   1109,   1103,   66,   1107,   1106,   1120,   1103,   1109,   1119,   1110,   1112,   1118,   1126,   274,   1141,   -1,   1120,   1113,   287,   1147,   1102,   271,   1128,   1127,   1126,   1125,   1136,   1133,   1128,   1137,   1131,   1135,   1134,   1135,   1131,   1132,   1129,   307,   1117,   280,   271,   1142,   1144,   1158,   272,   1144,   279,   272,   1162,   1148,   1152,   1140,   1138,   1100,   303,   1228,   87,   1171,   1225,   1150,   1151,   1191,   1170,   1161,   1171,   1176,   1097,   20,   1160,   1099,   1156,   1188,   1063,   1180,   1176,   1064,   1178,   1176,   1180,   1080,   79,   1069,   1074,   290,   1186,   1184,   1185,   1216,   1164,   1205,   298,   1196,   1204,   1187,   1071,   1214,   1194,   1203,   1205,   1206,   1202,   1195,   1192,   1230,   1208,   1206,   297,   1216,   1476,   1210,   1246,   1198,   1193,   1221,   1190,   1233,   254,   1169,   254,   1167,   1222,   1251,   1227,   75,   1223,   1162,   1228,   60,   1264,   1477,   367,   9,   77,   50,   305,   1241,   1274,   319,   1289,   972,   321,   306,   82,   1213,   1246,   1212,   1254,   1211,   1232,   1264,   1265,   368,   1249,   1263,   1377,   1379,   1253,   1282,   314,   85,   1273,   1231,   78,   1284,   1281,   77,   1275,   1274,   1277,   1394,   1380,   340,   1270,   1387,   1276,   1360,   1268,   336,   1267,   1260,   1308,   1288,   1366,   77,   1304,   1286,   1288,   1243,   1290,   1240,   967,   1292,   1294,   1300,   967,   1302,   963,   1304,   1241,   1298,   1319,   1300,   1287,   1334,   234,   1266,   1283,   214,   240,   876,   329,   236,   53,   1314,   1322,   240,   214,   871,   1320,   1316,   1317,   880,   1329,   218,   1326,   1330,   1312,   1332,   1337,   31,   1328,   1306,   324,   1307,   1311,   1340,   1342,   330,   18,   1364,   1339,   1371,   132,   474,   1409,   333,   479,   542,   1353,   334,   27,   18,   1354,   115,   1407,   1375,   1362,   1278,   1285,   1358,   339,   1342,   1370,   1371,   318,   325,   1368,   318,   1366,   1341,   1280,   339,   1358,   1386,   1257,   313,   83,   1273,   1392,   88,   1462,   348,   1384,   1376,   1391,   1394,   1410,   1386,   1392,   1381,   1390,   1272,   1400,   340,   1396,   1395,   1398,   114,   1406,   110,   1402,   351,   1404,   1398,   1357,   1411,   346,   1388,   1408,   352,   1412,   1389,   90,   1421,   350,   441,   1417,   1424,   -1,   1426,   1436,   1423,   1430,   112,   1415,   1436,   1435,   1434,   1425,   1431,   1385,   1429,   361,   1428,   1457,   353,   1456,   1463,   1446,   1454,   1441,   1475,   1448,   -1,   1459,   1450,   1492,   1448,   1484,   1445,   1455,   1474,   1444,   1439,   1437,   1443,   1458,   1457,   1460,   1383,   80,   1463,   1456,   1255,   1466,   1254,   1468,   1474,   1250,   1486,   1472,   357,   1442,   1470,   365,   1453,   14,   355,   1488,   1486,   1451,   1502,   1451,   1472,   1482,   1483,   1488,   304,   65,   1502,   1506,   72,   373,   1139,   277,   -1,   1501,   369,   1509,   1484,   1450,   372,   -1,   1504,   1499,   374,   -1,   1508,   -1,   1496,  1512,
+ 191,   634,   570,   68,   572,   187,   141,   599,   828,   979,   316,   1005,   433,   838,   1485,   844,   970,   255,   1354,   446,   1170,   472,   388,   417,   375,   505,   429,   1353,   382,   546,   685,   1334,   849,   651,   396,   644,   422,   902,   813,   724,   626,   178,   1322,   709,   699,   1075,   1037,   1121,   754,   248,   268,   870,   757,   1317,   953,   1315,   1305,   81,   305,   1237,   310,   989,   994,   1215,   1219,   1229,   1111,   1148,   1471,   303,   1072,   1155,   1494,   1209,   357,   1226,   311,   1268,   1265,   989,   1463,   314,   1245,   1467,   1445,   1243,   107,   304,   1438,   1493,   1413,   403,   384,   435,   381,   387,   628,   393,   383,   396,   411,   407,   614,   444,   106,   439,   124,   1389,   434,   427,   1402,   1341,   1426,   458,   1400,   481,   609,   540,   30,   544,   612,   507,   577,   124,   503,   498,   552,   148,   138,   506,   534,   117,   328,   556,   557,   539,   1350,   150,   6,   229,   217,   554,   546,   608,   602,   590,   144,   604,   513,   157,   550,   630,   612,   638,   611,   641,   399,   595,   580,   682,   579,   651,   692,   724,   666,   668,   592,   168,   672,   222,   720,   922,   863,   163,   695,   721,   727,   719,   170,   655,   0,   805,   769,   48,   776,   748,   749,   845,   1043,   13,   772,   43,   901,   766,   752,   742,   866,   195,   870,   779,   784,   1037,   253,   866,   858,   839,   8,   1078,   775,   874,   714,   879,   887,   1323,   1310,   806,   881,   942,   1326,   798,   706,   932,   888,   904,   228,   933,   689,   944,   881,   945,   233,   943,   1325,   232,   1306,   238,   242,   32,   235,   238,   1318,   16,   239,   1003,   849,   1086,   975,   1002,   49,   951,   950,   981,   998,   255,   1221,   1052,   1064,   1055,   1068,   1000,   1085,   1092,   1052,   990,   1026,   1090,   61,   263,   296,   1104,   292,   1142,   67,   1181,   1116,   281,   1108,   1496,   72,   1149,   1115,   279,   280,   275,   71,   1217,   260,   1123,   359,   63,   1182,   1046,   1189,   1066,   1184,   266,   990,   1209,   1195,   1207,   1209,   285,   1195,   1222,   1490,   1237,   295,   1137,   89,   1381,   60,   371,   1505,   309,   1261,   1376,   10,   965,   1369,   1240,   82,   1243,   1261,   1331,   946,   1368,   1239,   945,   1364,   135,   536,   541,   450,   491,   1352,   462,   1280,   114,   1269,   1363,   1396,   1432,   1259,   352,   315,   460,   1408,   113,   1427,   459,   1416,   1404,   1422,   1438,   1435,   1480,   1385,   363,   1475,   1487,   1459,   1435,   1436,   1469,   354,   1476,   359,   1251,   1248,   284,   1494,   1491,   308,   1494,   1508,   378,   391,   105,   379,   428,   443,   382,   379,   400,   391,   95,   95,   388,   381,   390,   385,   384,   632,   -1,   636,   389,   392,   376,   632,   397,   91,   394,   429,   405,   431,   411,   430,   422,   100,   104,   617,   405,   420,   415,   23,   120,   412,   121,   416,   100,   424,   503,   506,   417,   419,   405,   428,   109,   26,   427,   402,   104,   438,   440,   445,   93,   380,   438,   432,   440,   433,   1418,   460,   457,   445,   453,   447,   458,   500,   475,   332,   466,   434,   19,   464,   432,   441,   443,   455,   463,   442,   110,   1407,   1419,   1403,   499,   472,   469,   1402,   467,   25,   467,   21,   1346,   477,   474,   492,   478,   480,   1348,   1399,   1351,   487,   486,   534,   486,   538,   490,   509,   533,   487,   492,   476,   127,   476,   526,   125,   506,   125,   465,   448,   502,   498,   421,   500,   511,   422,   512,   498,   510,   512,   512,   510,   528,   152,   526,   610,   522,   616,   520,   518,   524,   520,   4,   522,   544,   517,   528,   530,   525,   515,   530,   494,   489,   484,   542,   542,   135,   484,   133,   117,   331,   1350,   531,   533,   119,   131,   29,   540,   573,   521,   126,   523,   554,   141,   1344,   559,   134,   551,   324,   1335,   563,   928,   561,   549,   561,   139,   575,   931,   567,   565,   146,   519,   122,   146,   567,   571,   574,   602,   581,   158,   579,   919,   917,   593,   583,   145,   603,   685,   594,   158,   40,   166,   589,   592,   605,   604,   147,   594,   7,   618,   599,   578,   597,   590,   619,   143,   621,   616,   610,   516,   613,   413,   614,   102,   622,   518,   646,   607,   621,   615,   630,   616,   633,   603,   639,   624,   597,   96,   627,   151,   637,   392,   623,   7,   155,   642,   648,   153,   650,   96,   745,   97,   153,   35,   657,   635,   674,   35,   164,   640,   161,   658,   678,   679,   660,   664,   659,   661,   649,   662,   662,   656,   676,   668,   671,   664,   669,   165,   677,   654,   670,   168,   161,   647,   674,   678,   663,   653,   676,   591,   159,   678,   588,   584,   684,   568,   922,   177,   226,   917,   694,   679,   41,   162,   174,   687,   716,   910,   914,   722,   702,   700,   704,   701,   793,   712,   797,   43,   792,   718,   904,   210,   899,   705,   731,   730,   186,   210,   720,   725,   700,   732,   39,   165,   726,   729,   726,   716,   722,   701,   732,   722,   741,   747,   765,   717,   184,   742,   768,   197,   733,   738,   776,   752,   642,   183,   751,   185,   734,   751,   747,   764,   763,   763,   762,   773,   761,   208,   754,   764,   825,   190,   194,   8,   777,   781,   785,   781,   822,   741,   827,   187,   753,   847,   826,   184,   765,   205,   744,   777,   818,   790,   784,   783,   739,   792,   789,   786,   797,   788,   181,   709,   898,   791,   708,   797,   789,   817,   219,   807,   809,   891,   795,   809,   181,   808,   800,   816,   801,   871,   818,   819,   200,   811,   739,   38,   796,   811,   813,   766,   850,   835,   840,   830,   772,   1038,   824,   8,   248,   824,   833,   182,   831,   840,   833,   32,   847,   5,   205,   1010,   202,   826,   1022,   15,   208,   1041,   1013,   823,   244,   821,   1016,   995,   855,   237,   861,   954,   859,   862,   860,   814,   954,   861,   877,   865,   810,   203,   872,   215,   51,   866,   872,   172,   867,   894,   880,   1312,   863,   888,   1324,   875,   216,   211,   884,   882,   874,   212,   212,   222,   890,   867,   802,   903,   894,   877,   713,   897,   802,   803,   900,   902,   192,   37,   223,   711,   192,   930,   911,   909,   913,   698,   908,   916,   910,   702,   912,   913,   583,   920,   690,   585,   915,   171,   2,   225,   937,   908,   923,   134,   942,   936,   924,   140,   941,   932,   936,   930,   933,   928,   231,   1333,   938,   939,   231,   227,   327,   1345,   948,   853,   250,   947,   247,   1010,   862,   947,   956,   958,   958,   1007,   1303,   238,   966,   949,   1301,   236,   1297,   962,   1293,   978,   986,   980,   319,   1242,   987,   971,   976,   974,   979,   957,   982,   978,   251,   983,   982,   1028,   983,   969,   973,   982,   1200,   263,   1000,   246,   62,   251,   1019,   1006,   1023,   252,   991,   1004,   1016,   247,   1004,   1000,   956,   996,   1008,   1003,   1010,   840,   1012,   1007,   1015,   252,   848,   1006,   843,   1015,   1017,   838,   1025,   1035,   997,   245,   1023,   1030,   1036,   984,   1028,   997,   1022,   1029,   1034,   1032,   1034,   1027,   201,   826,   201,   1043,   17,   1043,   188,   1041,   1052,   257,   17,   1039,   1088,   1036,   1024,   262,   1050,   1065,   257,   1070,   1047,   1179,   -1,   1179,   1107,   1060,   1065,   1178,   1058,   291,   1054,   293,   1070,   258,   1196,   1073,   1072,   1186,   1076,   262,   265,   1053,   1088,   1182,   62,   1083,   1082,   1030,   265,   245,   1088,   1079,   1197,   1087,   256,   1063,   1091,   1175,   1096,   1093,   64,   66,   47,   1098,   1147,   274,   1104,   -1,   1107,   1103,   1105,   1123,   1110,   1061,   66,   1113,   1120,   276,   280,   1145,   -1,   1113,   1061,   1119,   1100,   1102,   1108,   1126,   1127,   1124,   1125,   1131,   1139,   1134,   1137,   283,   1136,   -1,   1136,   1133,   1132,   1155,   307,   1154,   1145,   271,   -1,   1145,   1141,   1149,   1122,   67,   1146,   1162,   1101,   1153,   1150,   1138,   281,   1173,   75,   304,   71,   1173,   1220,   1151,   1157,   1190,   1173,   1218,   1222,   270,   1220,   1097,   1225,   1156,   1165,   1177,   1094,   1177,   1174,   1179,   1060,   1181,   273,   1071,   1201,   294,   63,   1187,   1196,   1074,   292,   1164,   292,   1204,   1217,   1199,   302,   1071,   1090,   1194,   1089,   1205,   1199,   1203,   299,   1192,   1201,   1208,   300,   1231,   73,   301,   1250,   1248,   366,   298,   1191,   1190,   1193,   1166,   64,   254,   1216,   1223,   1227,   1247,   1171,   1223,   1225,   1229,   76,   78,   297,   1473,   1218,   1299,   325,   305,   976,   1300,   1267,   1292,   1301,   321,   1290,   82,   57,   1247,   1227,   368,   297,   1477,   1224,   1379,   310,   1249,   1252,   344,   1383,   1265,   342,   1279,   1263,   1260,   1256,   78,   1253,   1238,   1375,   1373,   338,   1277,   1273,   107,   1263,   1270,   1269,   1277,   1271,   1372,   1281,   1374,   1275,   1290,   1304,   1266,   1361,   1282,   1302,   1289,   1291,   1291,   1292,   1294,   1299,   1295,   971,   963,   16,   1296,   1234,   1238,   1294,   317,   964,   1287,   214,   1361,   1310,   1283,   56,   1318,   1337,   1329,   1345,   960,   55,   1322,   53,   1310,   317,   1321,   873,   1317,   1321,   879,   232,   1327,   1324,   1312,   879,   1337,   323,   1330,   940,   31,   1343,   1311,   1331,   111,   1332,   136,   1372,   1339,   1333,   132,   946,   473,   1406,   479,   1395,   485,   483,   27,   1355,   1355,   485,   1349,   1401,   1362,   1363,   1368,   1367,   1374,   1354,   328,   111,   1370,   1309,   1369,   1308,   1366,   1344,   339,   1375,   1362,   1267,   1383,   1259,   1382,   1252,   1387,   86,   1439,   1257,   1385,   1433,   1390,   1380,   114,   1414,   1393,   1387,   1390,   344,   1396,   1349,   1397,   334,   1399,   480,   1395,   473,   1403,   464,   1405,   1407,   1401,   1405,   346,   1400,   346,   90,   1413,   90,   1411,   343,   350,   1419,   1417,   1412,   112,   112,   352,   1424,   1430,   1431,   1425,   341,   364,   1432,   1425,   1432,   1429,   341,   1430,   1429,   1423,   353,   88,   1464,   363,   1443,   1465,   1458,   1461,   1452,   360,   1452,   1445,   1506,   1503,   1483,   355,   1484,   1464,   355,   353,   1458,   1459,   360,   1461,   1447,   80,   1464,   1439,   1460,   1467,   83,   1469,   1466,   358,   367,   1473,   1246,   1454,   1444,   365,   1232,   14,   1472,   1450,   371,   1485,   1449,   1451,   1482,   1482,   1481,   1489,   1493,   65,   371,   312,   89,   373,   1491,   277,   1140,   1501,   1507,   1507,   1499,   1480,   -1,   1506,   1504,   1493,   1500,   1510,   1508,   1497,   374,   1513,  277,
+ };*/
+
+#define num_points 784
+#define num_triag 1519
+int16_t SI_Points[4*num_points]={
+ 28120,   25954,   17028,   9063,   5343,   3387,   2250,   1557,   1107,   816,   617,   479,   378,   306,   253,   211,   180,   156,   136,   120,   108,   98,   90,   83,   77,   72,   68,   65,   25331,   22182,   15076,   9296,   5927,   3939,   2708,   1911,   1386,   1031,   784,   609,   483,   389,   319,   266,   225,   192,   167,   147,   130,   116,   105,   96,   89,   82,   77,   73,   16706,   15291,   11625,   8167,   5688,   3998,   2856,   2080,   1542,   1167,   897,   705,   562,   454,   373,   311,   263,   224,   194,   169,   149,   133,   120,   109,   100,   92,   85,   80,   10880,   10380,   8636,   6663,   4989,   3713,   2772,   2089,   1592,   1229,   964,   765,   616,   502,   414,   346,   292,   250,   216,   189,   166,   148,   133,   120,   110,   101,   93,   87,   7073,   7061,   6285,   5206,   4156,   3259,   2539,   1981,   1554,   1229,   981,   791,   645,   530,   442,   371,   315,   271,   234,   205,   181,   160,   144,   130,   118,   108,   100,   93,   4513,   4783,   4509,   3972,   3357,   2756,   2239,   1809,   1459,   1181,   962,   789,   652,   543,   456,   387,   331,   285,   247,   217,   192,   171,   153,   138,   125,   115,   106,   98,   2892,   3247,   3234,   2996,   2652,   2278,   1920,   1603,   1330,   1104,   917,   765,   641,   541,   460,   393,   338,   293,   256,   225,   200,   178,   160,   144,   131,   120,   111,   103,   1905,   2232,   2331,   2260,   2082,   1857,   1621,   1393,   1188,   1009,   856,   726,   618,   528,   453,   391,   339,   296,   260,   230,   205,   183,   165,   149,   136,   125,   115,   106,   1288,   1571,   1703,   1711,   1635,   1507,   1352,   1196,   1046,   907,   785,   677,   585,   506,   439,   384,   336,   295,   261,   232,   207,   186,   168,   153,   139,   128,   118,   110,   893,   1128,   1261,   1306,   1285,   1218,   1124,   1019,   910,   807,   710,   623,   546,   480,   421,   370,   328,   290,   259,   231,   207,   188,   170,   155,   142,   131,   120,   112,   637,   826,   947,   1007,   1015,   986,   933,   864,   787,   711,   637,   569,   505,   448,   399,   355,   316,   282,   253,   228,   206,   187,   170,   155,   142,   131,   122,   113,   466,   617,   723,   785,   810,   803,   774,   732,   680,   624,   568,   514,   464,   417,   375,   336,   303,   273,   246,   223,   203,   184,   169,   155,   143,   132,   122,   114,   349,   471,   561,   619,   650,   658,   645,   620,   586,   546,   504,   463,   423,   384,   349,   317,   288,   261,   237,   216,   197,   181,   166,   153,   142,   131,   123,   114,   268,   365,   442,   495,   528,   541,   540,   527,   505,   478,   447,   416,   384,   353,   323,   296,   271,   248,   228,   209,   192,   176,   163,   151,   140,   130,   122,   114,   211,   289,   354,   400,   432,   449,   454,   449,   436,   418,   396,   372,   348,   323,   299,   276,   255,   235,   217,   201,   185,   172,   159,   148,   138,   128,   120,   113,   169,   233,   286,   328,   357,   376,   385,   384,   378,   366,   351,   333,   314,   295,   276,   257,   239,   222,   206,   191,   178,   166,   154,   144,   135,   127,   119,   112,   138,   191,   236,   272,   299,   317,   327,   331,   328,   322,   311,   299,   284,   269,   254,   238,   223,   209,   196,   183,   171,   160,   150,   140,   132,   124,   116,   110,   115,   159,   197,   228,   252,   270,   281,   286,   287,   284,   277,   268,   257,   245,   233,   221,   209,   196,   184,   174,   163,   153,   144,   136,   128,   121,   114,   109,   98,   135,   166,   193,   216,   231,   243,   249,   252,   251,   247,   241,   233,   224,   215,   204,   194,   184,   175,   165,   156,   147,   139,   132,   124,   118,   112,   106,   85,   116,   143,   166,   186,   201,   211,   219,   222,   223,   221,   217,   212,   205,   198,   189,   181,   172,   164,   156,   148,   141,   133,   127,   121,   114,   109,   104,   75,   101,   124,   145,   162,   175,   186,   193,   197,   199,   198,   196,   192,   188,   182,   176,   169,   162,   155,   148,   141,   135,   128,   122,   116,   111,   106,   101,   67,   89,   109,   127,   142,   154,   164,   171,   175,   178,   179,   178,   175,   172,   168,   162,   157,   152,   146,   140,   134,   128,   123,   118,   113,   108,   103,   99,   61,   80,   97,   112,   126,   137,   146,   153,   157,   160,   162,   161,   160,   158,   155,   151,   147,   142,   137,   133,   127,   122,   118,   113,   109,   105,   100,   96,   57,   73,   87,   101,   112,   123,   131,   137,   142,   145,   147,   147,   147,   145,   143,   140,   137,   134,   129,   125,   121,   117,   113,   108,   105,   101,   97,   94,   52,   66,   80,   91,   101,   111,   118,   124,   129,   132,   134,   136,   135,   135,   133,   131,   128,   125,   122,   119,   115,   112,   108,   104,   101,   98,   94,   91,   50,   61,   73,   83,   93,   100,   107,   113,   118,   121,   123,   125,   125,   125,   124,   123,   120,   118,   115,   113,   109,   107,   103,   100,   97,   94,   91,   89,   47,   58,   67,   77,   85,   92,   98,   104,   108,   111,   114,   115,   116,   116,   115,   115,   113,   111,   109,   107,   104,   102,   99,   97,   94,   91,   89,   86,   45,   54,   63,   71,   79,   85,   91,   96,   100,   103,   105,   107,   108,   108,   108,   108,   106,   105,   103,   102,   99,   97,   95,   93,   90,   88,   86,  83,
+ 22973,   1678,   -7370,   -5167,   -3767,   -2873,   -2210,   -1714,   -1348,   -1076,   -869,   -711,   -589,   -492,   -416,   -355,   -305,   -264,   -231,   -203,   -179,   -159,   -143,   -128,   -115,   -105,   -95,   -87,   18855,   7465,   -325,   -1863,   -1923,   -1751,   -1510,   -1264,   -1053,   -875,   -729,   -611,   -516,   -439,   -376,   -324,   -281,   -246,   -216,   -191,   -169,   -151,   -136,   -123,   -111,   -101,   -92,   -85,   17033,   8876,   3019,   513,   -417,   -749,   -835,   -810,   -738,   -654,   -572,   -498,   -432,   -376,   -328,   -287,   -252,   -223,   -197,   -176,   -157,   -142,   -128,   -116,   -105,   -96,   -88,   -81,   12847,   7754,   3912,   1729,   598,   12,   -276,   -403,   -443,   -438,   -413,   -378,   -342,   -307,   -274,   -246,   -219,   -197,   -177,   -159,   -144,   -130,   -118,   -108,   -98,   -90,   -83,   -77,   9260,   6299,   3890,   2224,   1172,   522,   145,   -72,   -188,   -243,   -263,   -264,   -254,   -238,   -221,   -202,   -185,   -169,   -154,   -141,   -129,   -118,   -108,   -99,   -91,   -84,   -78,   -72,   6969,   5141,   3545,   2316,   1432,   823,   427,   172,   15,   -79,   -132,   -159,   -170,   -172,   -167,   -159,   -151,   -141,   -131,   -121,   -113,   -104,   -97,   -90,   -84,   -77,   -72,   -67,   5363,   4191,   3104,   2196,   1490,   969,   597,   339,   166,   51,   -23,   -69,   -96,   -111,   -117,   -119,   -117,   -113,   -108,   -102,   -97,   -91,   -85,   -80,   -75,   -70,   -66,   -62,   4170,   3402,   2655,   1993,   1443,   1012,   684,   444,   270,   148,   64,   6,   -32,   -57,   -72,   -81,   -85,   -86,   -85,   -84,   -80,   -77,   -74,   -70,   -67,   -63,   -60,   -56,   3271,   2762,   2245,   1760,   1341,   992,   713,   499,   336,   216,   128,   65,   20,   -12,   -33,   -47,   -56,   -61,   -65,   -66,   -65,   -64,   -62,   -60,   -58,   -56,   -53,   -51,   2597,   2251,   1887,   1534,   1213,   936,   705,   521,   373,   261,   175,   110,   61,   26,   1,   -18,   -31,   -39,   -45,   -49,   -51,   -51,   -52,   -51,   -50,   -49,   -47,   -45,   2081,   1843,   1585,   1325,   1080,   862,   676,   518,   389,   286,   205,   142,   93,   56,   28,   7,   -8,   -19,   -28,   -33,   -38,   -40,   -41,   -42,   -42,   -42,   -41,   -40,   1687,   1521,   1335,   1143,   956,   784,   632,   500,   389,   298,   223,   163,   117,   79,   51,   28,   10,   -2,   -12,   -19,   -25,   -29,   -32,   -33,   -34,   -35,   -35,   -35,   1383,   1265,   1129,   983,   841,   706,   583,   474,   379,   299,   232,   177,   132,   96,   67,   44,   26,   12,   1,   -7,   -14,   -19,   -22,   -25,   -27,   -28,   -29,   -30,   1146,   1059,   959,   849,   740,   633,   533,   442,   362,   293,   234,   184,   142,   108,   80,   57,   39,   24,   12,   3,   -5,   -10,   -15,   -18,   -21,   -23,   -24,   -25,   958,   895,   819,   735,   649,   565,   484,   409,   342,   282,   230,   186,   147,   116,   89,   67,   49,   34,   22,   12,   4,   -2,   -8,   -12,   -15,   -17,   -19,   -20,   808,   760,   703,   639,   571,   503,   439,   376,   320,   269,   224,   183,   150,   120,   95,   74,   56,   42,   29,   19,   11,   4,   -1,   -6,   -9,   -12,   -14,   -16,   687,   650,   606,   556,   503,   449,   396,   345,   297,   254,   214,   179,   148,   122,   99,   79,   62,   47,   35,   25,   17,   10,   4,   -1,   -5,   -8,   -10,   -13,   588,   560,   526,   487,   444,   401,   357,   315,   275,   237,   204,   173,   145,   121,   100,   81,   65,   52,   40,   30,   22,   15,   9,   4,   0,   -4,   -6,   -9,   507,   485,   458,   427,   393,   358,   322,   286,   253,   221,   192,   165,   141,   119,   100,   83,   68,   55,   43,   34,   26,   19,   13,   8,   4,   0,   -3,   -6,   440,   422,   401,   376,   349,   320,   290,   261,   233,   206,   180,   157,   135,   116,   98,   82,   69,   56,   46,   37,   29,   22,   16,   11,   6,   3,   0,   -3,   383,   370,   353,   332,   310,   287,   262,   238,   214,   191,   168,   148,   129,   112,   96,   82,   69,   58,   48,   39,   31,   25,   19,   13,   9,   6,   2,   -1,   336,   325,   311,   295,   277,   257,   237,   216,   196,   176,   158,   139,   122,   107,   93,   80,   68,   58,   49,   40,   33,   26,   21,   16,   12,   8,   5,   2,   296,   287,   276,   262,   248,   231,   215,   197,   180,   163,   146,   130,   116,   102,   90,   78,   67,   57,   49,   41,   34,   28,   23,   17,   13,   10,   7,   4,   262,   255,   246,   234,   222,   208,   194,   179,   165,   150,   136,   122,   110,   97,   85,   75,   65,   56,   49,   41,   35,   29,   24,   19,   15,   11,   8,   5,   232,   227,   219,   210,   200,   189,   176,   164,   151,   139,   126,   114,   103,   92,   82,   72,   63,   55,   48,   41,   35,   29,   24,   20,   16,   13,   9,   7,   207,   203,   196,   189,   180,   170,   160,   150,   138,   128,   117,   107,   96,   87,   78,   69,   61,   54,   47,   41,   35,   29,   25,   21,   17,   13,   10,   8,   185,   182,   176,   170,   162,   155,   146,   137,   127,   118,   109,   100,   91,   82,   74,   66,   59,   52,   46,   40,   35,   29,   25,   21,   18,   14,   11,   8,   167,   163,   159,   153,   147,   140,   133,   125,   117,   109,   101,   92,   85,   77,   70,   63,   56,   50,   44,   39,   34,   30,   25,   21,   18,   15,   12,  9,
+ 300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,   3000,   300,   400,   500,   600,   700,   800,   900,   1000,   1100,   1200,   1300,   1400,   1500,   1600,   1700,   1800,   1900,   2000,   2100,   2200,   2300,   2400,   2500,   2600,   2700,   2800,   2900,  3000,
+ 200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   200,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   300,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   400,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   500,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   600,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   700,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   800,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   900,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1000,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1100,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1200,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1300,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1400,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1500,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1600,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1700,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1800,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   1900,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2000,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2100,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2200,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2300,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2400,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2500,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2600,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2700,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2800,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,   2900,  2900,
+ };
+int16_t SI_ConnectivityList[6*num_triag]={
+ 580,   306,   742,   580,   756,   740,   779,   685,   768,   680,   730,   313,   729,   395,   92,   563,   731,   49,   567,   475,   203,   697,   611,   248,   783,   587,   444,   274,   662,   416,   470,   527,   497,   766,   698,   778,   724,   697,   611,   735,   772,   766,   722,   761,   729,   372,   594,   630,   653,   631,   601,   666,   695,   721,   581,   522,   411,   548,   625,   302,   212,   480,   645,   400,   450,   365,   701,   281,   392,   515,   256,   411,   262,   232,   122,   387,   124,   72,   39,   110,   412,   271,   185,   410,   329,   12,   234,   126,   151,   67,   92,   37,   172,   38,   142,   77,   755,   223,   223,   27,   109,   136,   222,   475,   416,   250,   362,   138,   307,   223,   164,   135,   221,   104,   136,   191,   132,   18,   50,   74,   186,   358,   361,   218,   242,   362,   471,   304,   360,   135,   219,   555,   418,   474,   390,   333,   416,   440,   498,   469,   524,   548,   412,   610,   557,   665,   666,   606,   525,   722,   641,   719,   666,   638,   667,   529,   419,   783,   753,   782,   139,   724,   781,   780,   670,   750,   779,   776,   772,   747,   777,   632,   767,   712,   764,   656,   761,   712,   764,   735,   761,   735,   762,   738,   763,   761,   651,   644,   504,   561,   672,   505,   477,   561,   616,   533,   707,   675,   648,   590,   622,   647,   626,   678,   740,   710,   647,   596,   394,   479,   449,   651,   458,   655,   519,   628,   624,   570,   456,   657,   603,   630,   520,   659,   684,   662,   606,   715,   632,   717,   580,   607,   608,   661,   551,   634,   552,   577,   606,   462,   597,   485,   596,   541,   408,   429,   461,   452,   400,   314,   348,   481,   507,   482,   564,   457,   538,   427,   479,   425,   481,   364,   421,   395,   398,   309,   337,   366,   338,   451,   454,   341,   425,   367,   365,   311,   338,   313,   177,   309,   146,   145,   116,   169,   140,   84,   85,   89,   114,   88,   141,   87,   58,   313,   371,   90,   116,   344,   398,   316,   367,   314,   341,   317,   317,   374,   315,   345,   235,   315,   343,   202,   177,   320,   542,   237,   295,   151,   149,   176,   93,   269,   494,   212,   239,   242,   268,   325,   487,   378,   404,   546,   464,   464,   432,   573,   574,   597,   571,   244,   353,   409,   462,   381,   489,   353,   378,   326,   324,   216,   269,   215,   213,   246,   159,   271,   187,   188,   131,   42,   129,   157,   42,   128,   153,   41,   127,   68,   68,   66,   39,   68,   96,   123,   211,   235,   264,   152,   123,   150,   94,   10,   92,   7,   63,   57,   53,   23,   25,   80,   22,   22,   132,   26,   52,   53,   51,   22,   82,   25,   81,   24,   25,   111,   55,   26,   54,   110,   110,   139,   223,   139,   54,   54,   81,   138,   109,   166,   137,   164,   137,   193,   223,   167,   279,   307,   279,   334,   278,   334,   250,   278,   279,   222,   221,   194,   194,   137,   80,   79,   138,   81,   108,   51,   20,   78,   47,   21,   20,   17,   49,   77,   20,   75,   48,   48,   107,   133,   107,   107,   192,   135,   163,   106,   73,   19,   19,   77,   48,   72,   76,   76,   104,   47,   43,   17,   246,   162,   160,   161,   161,   134,   219,   162,   160,   189,   192,   163,   247,   220,   247,   190,   160,   245,   276,   360,   245,   304,   305,   332,   274,   276,   246,   274,   277,   277,   248,   276,   221,   193,   249,   220,   247,   275,   192,   192,   248,   250,   307,   278,   363,   306,   278,   221,   447,   390,   391,   334,   447,   418,   500,   446,   444,   473,   443,   472,   332,   388,   415,   415,   361,   332,   331,   330,   302,   302,   331,   302,   301,   387,   358,   413,   356,   384,   386,   414,   331,   386,   357,   357,   387,   554,   469,   443,   415,   386,   384,   412,   467,   468,   413,   384,   442,   498,   498,   498,   468,   468,   583,   526,   555,   498,   554,   500,   526,   527,   470,   499,   556,   474,   471,   500,   555,   585,   582,   583,   499,   499,   583,   641,   638,   639,   586,   639,   611,   639,   556,   587,   585,   612,   558,   584,   558,   529,   530,   501,   502,   363,   531,   474,   446,   447,   391,   391,   474,   531,   474,   503,   502,   587,   559,   530,   531,   502,   586,   671,   614,   614,   559,   671,   558,   586,   615,   643,   587,   615,   727,   782,   726,   754,   669,   725,   83,   782,   753,   754,   697,   726,   614,   724,   642,   613,   668,   724,   669,   668,   780,   780,   754,   754,   725,   697,   778,   777,   723,   777,   695,   749,   748,   774,   747,   774,   719,   772,   721,   749,   694,   723,   720,   775,   720,   748,   664,   721,   611,   665,   637,   665,   665,   663,   664,   664,   720,   692,   692,   692,   720,   717,   716,   745,   745,   719,   745,   690,   688,   743,   770,   687,   713,   740,   766,   710,   711,   711,   715,   742,   743,   772,   743,   769,   773,   774,   771,   746,   744,   772,   745,   771,   766,   765,   738,   765,   741,   741,   732,   730,   732,   758,   734,   760,   758,   705,   758,   707,   701,   731,   27,   703,   701,   730,   703,   674,   701,   728,   702,   616,   673,   589,   505,   700,   674,   672,   646,   644,   590,   673,   647,   702,   703,   616,   592,   617,   617,   534,   534,   534,   533,   617,   618,   675,   649,   676,   733,   651,   677,   676,   703,   677,   704,   648,   675,   706,   705,   678,   705,   736,   679,   735,   736,   736,   656,   738,   711,   740,   658,   654,   710,   685,   685,   680,   625,   679,   682,   707,   708,   680,   680,   655,   681,   593,   619,   622,   649,   565,   590,   506,   478,   563,   507,   592,   535,   650,   650,   565,   591,   595,   621,   566,   592,   567,   593,   536,   563,   480,   478,   564,   508,   541,   594,   568,   595,   539,   564,   654,   599,   627,   601,   626,   653,   651,   652,   652,   626,   684,   629,   683,   656,   627,   627,   628,   574,   602,   602,   603,   550,   549,   520,   577,   522,   494,   493,   603,   633,   604,   605,   686,   605,   657,   657,   603,   631,   685,   715,   714,   632,   713,   741,   685,   712,   689,   688,   661,   661,   686,   714,   687,   687,   631,   659,   690,   609,   633,   661,   718,   718,   662,   690,   665,   610,   663,   664,   581,   636,   607,   635,   580,   608,   553,   553,   469,   468,   606,   635,   525,   496,   579,   579,   577,   578,   549,   523,   523,   468,   495,   495,   439,   493,   598,   599,   571,   545,   598,   572,   571,   516,   514,   543,   514,   460,   544,   490,   544,   462,   434,   461,   435,   458,   405,   349,   377,   346,   349,   292,   346,   346,   318,   347,   488,   433,   460,   431,   460,   460,   485,   459,   459,   404,   431,   376,   403,   403,   429,   375,   347,   319,   512,   486,   402,   456,   403,   401,   568,   569,   513,   510,   541,   541,   513,   513,   567,   595,   569,   543,   512,   565,   539,   566,   567,   512,   566,   510,   512,   511,   539,   484,   428,   455,   454,   510,   453,   453,   563,   537,   481,   508,   537,   511,   506,   480,   478,   449,   423,   450,   420,   420,   336,   395,   421,   453,   480,   450,   450,   426,   451,   423,   423,   421,   368,   309,   421,   395,   280,   396,   368,   342,   396,   395,   369,   396,   396,   370,   398,   342,   369,   424,   424,   456,   399,   370,   397,   374,   428,   402,   401,   429,   374,   428,   373,   344,   344,   310,   311,   283,   256,   255,   202,   227,   201,   254,   285,   254,   228,   253,   308,   254,   281,   253,   281,   252,   197,   226,   225,   225,   226,   143,   199,   197,   227,   198,   172,   143,   196,   112,   114,   113,   113,   113,   0,   29,   58,   57,   58,   29,   30,   1,   142,   115,   114,   59,   142,   197,   168,   168,   169,   169,   200,   200,   198,   198,   171,   171,   116,   88,   30,   174,   200,   144,   172,   147,   146,   117,   60,   257,   286,   201,   229,   311,   285,   282,   257,   200,   228,   255,   282,   257,   257,   365,   339,   284,   284,   339,   339,   340,   314,   258,   285,   258,   287,   257,   285,   289,   261,   316,   206,   317,   317,   343,   288,   317,   345,   318,   319,   289,   290,   207,   261,   232,   261,   203,   232,   203,   204,   287,   288,   231,   259,   258,   259,   202,   230,   86,   60,   148,   118,   145,   145,   147,   90,   264,   262,   207,   234,   347,   293,   319,   320,   294,   321,   321,   321,   237,   236,   205,   205,   176,   176,   238,   235,   118,   61,   180,   180,   206,   206,   182,   266,   181,   208,   323,   266,   295,   238,   264,   265,   269,   268,   267,   294,   155,   239,   266,   266,   242,   241,   270,   214,   327,   297,   325,   406,   351,   352,   436,   352,   380,   350,   352,   323,   377,   351,   434,   350,   376,   404,   489,   407,   407,   379,   377,   405,   491,   436,   517,   463,   437,   380,   381,   352,   491,   492,   438,   382,   546,   492,   516,   544,   489,   517,   518,   546,   544,   572,   572,   600,   546,   575,   519,   547,   492,   494,   494,   465,   465,   466,   466,   466,   356,   355,   384,   300,   357,   329,   382,   438,   216,   244,   272,   273,   356,   356,   327,   328,   243,   272,   325,   327,   297,   299,   437,   438,   326,   354,   381,   382,   271,   325,   409,   409,   325,   326,   297,   298,   269,   270,   182,   209,   154,   182,   154,   211,   98,   181,   184,   213,   241,   156,   212,   241,   241,   184,   210,   210,   189,   187,   159,   157,   187,   189,   216,   216,   160,   103,   44,   130,   101,   158,   129,   157,   101,   100,   74,   73,   101,   100,   103,   46,   46,   45,   74,   17,   43,   71,   45,   41,   101,   44,   70,   43,   97,   71,   157,   100,   128,   71,   156,   99,   126,   99,   125,   154,   12,   12,   69,   69,   66,   9,   37,   8,   36,   36,   94,   94,   92,   122,   96,   96,   66,   40,   96,   39,   126,   97,   182,   125,   152,   208,   179,   179,   151,   122,   92,   148,   123,   152,   152,   95,   93,   121,   119,   120,   62,   119,   148,   148,   118,   118,   91,   62,   32,   31,   91,   34,   62,   33,   61,   61,   34,   31,   33,   31,   34,   63,   63,   62,   35,   33,   4,   3,  2,
+ 608,   334,   741,   553,   728,   739,   780,   684,   767,   707,   729,   314,   728,   394,   119,   562,   703,   77,   595,   363,   204,   670,   583,   219,   777,   755,   472,   302,   661,   389,   442,   499,   496,   757,   699,   779,   751,   725,   584,   734,   756,   767,   750,   757,   756,   399,   621,   603,   626,   603,   574,   694,   696,   749,   582,   549,   439,   575,   598,   274,   239,   507,   646,   399,   449,   392,   728,   254,   420,   488,   229,   383,   289,   205,   149,   415,   96,   73,   11,   139,   384,   272,   157,   382,   330,   11,   206,   127,   123,   66,   64,   8,   144,   9,   115,   105,   783,   222,   783,   55,   108,   137,   250,   587,   417,   249,   333,   166,   335,   194,   165,   106,   249,   132,   108,   162,   104,   46,   79,   103,   214,   386,   389,   189,   214,   389,   444,   332,   359,   163,   190,   528,   391,   446,   389,   360,   444,   441,   471,   497,   523,   549,   413,   583,   584,   638,   693,   634,   497,   695,   640,   718,   667,   666,   668,   502,   391,   139,   725,   755,   783,   696,   782,   753,   671,   778,   752,   777,   757,   774,   778,   633,   766,   713,   737,   655,   733,   711,   736,   762,   759,   763,   761,   737,   761,   734,   679,   645,   505,   588,   728,   504,   476,   560,   617,   532,   706,   676,   621,   591,   649,   674,   627,   650,   712,   683,   648,   597,   366,   451,   476,   652,   485,   627,   492,   629,   597,   543,   484,   629,   575,   602,   548,   631,   711,   635,   578,   714,   660,   690,   552,   580,   636,   634,   523,   635,   524,   578,   579,   490,   598,   512,   623,   513,   407,   457,   488,   479,   373,   342,   347,   508,   534,   483,   536,   484,   537,   426,   506,   453,   482,   392,   448,   423,   426,   308,   364,   339,   310,   452,   455,   368,   452,   366,   393,   338,   365,   285,   205,   310,   174,   144,   115,   197,   168,   57,   84,   88,   86,   87,   113,   59,   30,   341,   399,   89,   144,   343,   370,   315,   339,   341,   313,   344,   316,   402,   287,   318,   236,   316,   344,   175,   178,   348,   515,   264,   323,   178,   148,   148,   65,   268,   466,   183,   238,   243,   240,   297,   459,   351,   403,   518,   437,   436,   404,   546,   575,   570,   599,   216,   354,   408,   435,   353,   488,   352,   406,   327,   296,   245,   241,   214,   185,   245,   130,   244,   186,   160,   102,   71,   157,   129,   14,   127,   154,   69,   126,   39,   40,   38,   10,   97,   124,   152,   238,   262,   291,   151,   94,   149,   65,   9,   63,   35,   34,   29,   24,   51,   23,   108,   51,   21,   103,   25,   51,   52,   79,   23,   53,   24,   52,   23,   53,   83,   26,   55,   83,   81,   111,   83,   167,   138,   82,   53,   110,   139,   138,   194,   166,   136,   165,   222,   195,   166,   223,   755,   307,   305,   306,   362,   279,   307,   250,   193,   193,   166,   165,   136,   79,   78,   109,   80,   79,   22,   49,   79,   75,   49,   19,   46,   78,   106,   48,   46,   77,   76,   135,   105,   106,   78,   163,   134,   134,   105,   101,   47,   18,   76,   47,   71,   104,   75,   75,   46,   44,   18,   218,   134,   132,   162,   133,   105,   191,   161,   161,   190,   191,   162,   219,   191,   218,   189,   188,   273,   247,   387,   246,   303,   304,   359,   275,   304,   275,   303,   305,   304,   276,   303,   192,   165,   248,   219,   276,   303,   164,   193,   249,   222,   306,   277,   335,   305,   249,   220,   419,   417,   362,   333,   446,   417,   473,   417,   445,   446,   444,   473,   360,   389,   416,   443,   360,   303,   359,   329,   331,   330,   330,   273,   329,   386,   385,   441,   357,   385,   387,   441,   358,   413,   358,   385,   414,   553,   442,   415,   414,   385,   412,   439,   440,   441,   412,   383,   470,   525,   470,   499,   469,   496,   555,   553,   527,   497,   527,   501,   499,   528,   471,   472,   529,   473,   472,   528,   556,   612,   555,   556,   500,   527,   584,   668,   611,   612,   613,   667,   612,   640,   584,   671,   613,   640,   585,   612,   557,   556,   529,   528,   503,   587,   503,   501,   419,   475,   363,   419,   503,   587,   475,   531,   530,   614,   558,   557,   530,   529,   614,   670,   642,   613,   587,   699,   559,   587,   643,   642,   643,   642,   755,   783,   727,   755,   670,   726,   783,   781,   726,   727,   698,   699,   641,   723,   641,   640,   696,   725,   696,   667,   781,   783,   753,   726,   724,   696,   780,   783,   750,   780,   722,   777,   776,   772,   775,   776,   746,   777,   722,   750,   695,   696,   748,   776,   721,   749,   692,   694,   638,   693,   638,   666,   692,   691,   691,   636,   747,   691,   720,   719,   719,   689,   744,   773,   718,   691,   717,   662,   715,   744,   743,   715,   741,   767,   738,   709,   738,   710,   743,   769,   771,   774,   770,   757,   774,   747,   772,   718,   772,   770,   772,   770,   764,   737,   766,   764,   768,   740,   731,   757,   759,   757,   761,   759,   759,   706,   731,   734,   729,   732,   783,   702,   674,   702,   675,   646,   673,   701,   674,   672,   645,   562,   532,   673,   647,   645,   619,   617,   562,   646,   619,   675,   704,   589,   619,   618,   645,   533,   506,   561,   560,   590,   619,   648,   621,   677,   732,   678,   704,   704,   731,   705,   732,   676,   703,   733,   732,   706,   733,   708,   706,   708,   737,   709,   684,   710,   684,   741,   631,   681,   711,   657,   658,   653,   597,   680,   709,   680,   709,   681,   708,   654,   709,   620,   647,   650,   677,   537,   618,   505,   477,   535,   506,   564,   534,   651,   678,   592,   619,   622,   649,   593,   620,   594,   621,   508,   591,   479,   505,   537,   507,   568,   622,   596,   623,   538,   592,   626,   598,   600,   629,   654,   681,   624,   653,   625,   598,   656,   628,   655,   628,   628,   655,   601,   546,   574,   575,   576,   523,   548,   519,   549,   495,   521,   520,   631,   606,   577,   578,   659,   577,   630,   658,   604,   659,   686,   742,   687,   605,   714,   742,   713,   740,   688,   661,   688,   633,   687,   715,   660,   688,   632,   660,   663,   637,   634,   662,   690,   691,   663,   691,   637,   582,   636,   637,   609,   637,   608,   636,   581,   609,   525,   526,   496,   495,   607,   608,   524,   523,   551,   552,   550,   551,   522,   496,   495,   440,   467,   468,   466,   492,   599,   600,   544,   518,   571,   544,   543,   488,   515,   516,   487,   461,   516,   518,   517,   434,   433,   460,   407,   430,   404,   321,   376,   347,   348,   265,   373,   345,   346,   348,   460,   405,   459,   430,   432,   433,   458,   432,   431,   376,   403,   348,   375,   376,   456,   347,   346,   291,   485,   459,   429,   483,   402,   373,   541,   570,   512,   483,   514,   542,   486,   514,   568,   596,   542,   515,   539,   593,   567,   594,   539,   484,   538,   482,   511,   510,   511,   483,   427,   483,   482,   537,   454,   480,   536,   509,   509,   536,   510,   483,   479,   453,   450,   448,   422,   422,   421,   448,   364,   422,   449,   481,   508,   451,   478,   398,   479,   424,   451,   422,   341,   336,   394,   367,   308,   368,   340,   369,   424,   368,   342,   369,   397,   371,   399,   370,   397,   425,   452,   429,   426,   398,   425,   401,   455,   401,   400,   401,   373,   400,   345,   372,   371,   309,   283,   284,   228,   228,   230,   200,   229,   255,   284,   227,   200,   280,   309,   282,   309,   254,   282,   280,   196,   225,   252,   224,   198,   144,   198,   224,   199,   197,   171,   115,   197,   84,   113,   85,   112,   86,   56,   1,   85,   84,   57,   28,   29,   0,   114,   87,   87,   31,   170,   198,   169,   196,   142,   170,   172,   173,   171,   199,   143,   144,   88,   60,   1,   173,   228,   145,   173,   174,   173,   89,   59,   230,   287,   202,   230,   310,   258,   283,   229,   201,   229,   283,   310,   284,   256,   338,   312,   311,   283,   340,   367,   313,   287,   286,   313,   259,   288,   258,   286,   261,   233,   289,   179,   289,   290,   315,   287,   318,   346,   291,   320,   262,   291,   234,   262,   233,   234,   231,   260,   176,   205,   260,   261,   232,   260,   231,   232,   203,   231,   59,   32,   147,   117,   146,   173,   119,   62,   263,   290,   235,   262,   320,   265,   292,   293,   293,   349,   293,   322,   209,   263,   206,   233,   177,   204,   210,   263,   90,   88,   208,   207,   207,   234,   209,   293,   209,   236,   295,   265,   267,   265,   237,   238,   296,   295,   295,   322,   183,   267,   267,   294,   271,   240,   242,   186,   355,   296,   352,   405,   324,   325,   408,   324,   379,   322,   351,   322,   405,   323,   406,   349,   377,   405,   462,   379,   406,   351,   378,   406,   463,   435,   490,   435,   409,   407,   380,   379,   464,   465,   410,   354,   519,   464,   517,   572,   490,   518,   519,   574,   545,   600,   573,   601,   547,   548,   520,   548,   493,   467,   493,   437,   438,   439,   465,   438,   355,   382,   356,   272,   356,   301,   410,   439,   244,   273,   300,   300,   328,   329,   300,   301,   244,   273,   326,   328,   298,   300,   410,   411,   354,   355,   354,   355,   298,   353,   381,   382,   298,   299,   270,   271,   242,   271,   210,   237,   182,   154,   183,   239,   70,   153,   185,   214,   213,   155,   213,   242,   212,   183,   211,   238,   188,   215,   158,   185,   188,   161,   188,   217,   131,   102,   16,   159,   130,   186,   158,   186,   129,   128,   73,   72,   100,   99,   74,   17,   45,   44,   45,   16,   15,   72,   16,   42,   72,   43,   42,   14,   98,   42,   128,   71,   99,   70,   127,   98,   98,   70,   126,   155,   41,   40,   40,   41,   37,   8,   36,   7,   64,   35,   66,   95,   93,   150,   68,   97,   67,   11,   67,   38,   125,   96,   153,   124,   180,   209,   180,   207,   150,   93,   121,   149,   124,   153,   123,   94,   122,   149,   92,   121,   91,   147,   120,   121,   119,   146,   90,   33,   31,   32,   62,   35,   61,   32,   60,   32,   6,   30,   5,   3,   5,   35,   64,   34,   7,   4,   3,   2,  1,
+ 581,   335,   769,   552,   672,   767,   752,   712,   769,   708,   757,   286,   756,   422,   120,   590,   730,   78,   568,   419,   176,   669,   610,   247,   756,   307,   445,   303,   689,   388,   469,   526,   524,   769,   671,   751,   752,   698,   583,   762,   777,   739,   723,   766,   757,   400,   622,   602,   625,   630,   573,   667,   668,   722,   554,   550,   412,   576,   597,   273,   240,   508,   618,   427,   477,   393,   729,   253,   393,   487,   228,   410,   290,   204,   150,   388,   95,   44,   10,   111,   411,   244,   156,   409,   302,   40,   233,   98,   150,   95,   63,   36,   171,   37,   114,   106,   223,   251,   167,   83,   137,   108,   251,   363,   389,   278,   361,   167,   363,   222,   136,   134,   250,   133,   107,   190,   103,   47,   51,   75,   215,   359,   362,   217,   213,   390,   443,   333,   387,   164,   218,   527,   390,   473,   417,   361,   417,   413,   470,   470,   551,   521,   385,   582,   585,   637,   694,   607,   524,   694,   668,   746,   639,   639,   640,   501,   418,   167,   752,   754,   83,   723,   754,   752,   643,   751,   751,   749,   756,   775,   750,   605,   769,   685,   736,   683,   760,   739,   763,   763,   757,   736,   763,   765,   766,   733,   652,   617,   477,   589,   700,   532,   504,   588,   589,   560,   734,   648,   620,   563,   650,   675,   599,   677,   739,   682,   620,   569,   393,   478,   477,   624,   486,   654,   491,   601,   596,   542,   457,   656,   602,   629,   521,   658,   712,   634,   605,   742,   633,   689,   579,   579,   609,   633,   550,   607,   551,   550,   578,   463,   570,   513,   624,   540,   435,   430,   489,   480,   372,   315,   375,   509,   535,   455,   563,   485,   565,   454,   507,   426,   454,   365,   449,   396,   399,   336,   365,   338,   337,   424,   427,   369,   453,   394,   366,   339,   366,   312,   178,   282,   147,   172,   143,   170,   141,   56,   112,   116,   113,   115,   140,   86,   57,   314,   372,   117,   117,   371,   397,   343,   366,   342,   340,   345,   344,   375,   314,   317,   208,   288,   316,   174,   150,   321,   514,   265,   296,   179,   176,   175,   64,   296,   493,   211,   266,   214,   267,   324,   486,   350,   431,   545,   436,   463,   431,   545,   547,   569,   572,   215,   326,   436,   434,   380,   516,   380,   379,   299,   323,   217,   268,   243,   184,   274,   158,   243,   215,   159,   130,   43,   158,   128,   13,   156,   125,   70,   155,   67,   39,   37,   38,   69,   125,   124,   239,   263,   292,   179,   122,   177,   93,   38,   91,   36,   62,   56,   52,   52,   24,   109,   23,   50,   131,   54,   80,   81,   80,   25,   81,   53,   80,   52,   54,   82,   54,   27,   55,   109,   82,   111,   195,   167,   83,   82,   82,   110,   110,   195,   138,   135,   166,   194,   194,   195,   251,   223,   223,   333,   307,   363,   251,   279,   278,   221,   192,   165,   193,   165,   108,   107,   137,   109,   107,   50,   21,   50,   76,   50,   48,   18,   50,   78,   49,   74,   49,   77,   136,   104,   135,   106,   191,   163,   162,   134,   102,   48,   47,   105,   76,   100,   105,   104,   103,   75,   15,   16,   217,   133,   131,   133,   132,   133,   190,   190,   132,   161,   220,   191,   218,   219,   246,   218,   189,   274,   275,   388,   217,   332,   333,   360,   246,   277,   247,   275,   306,   305,   277,   304,   220,   164,   277,   248,   248,   276,   163,   164,   220,   221,   335,   306,   334,   334,   277,   249,   446,   418,   390,   362,   474,   446,   472,   445,   417,   445,   416,   445,   333,   361,   388,   416,   388,   331,   332,   357,   303,   331,   358,   301,   302,   414,   386,   414,   329,   357,   359,   442,   359,   414,   330,   358,   415,   581,   441,   442,   442,   413,   385,   440,   439,   440,   440,   411,   443,   526,   497,   471,   441,   469,   582,   554,   554,   525,   526,   473,   498,   500,   443,   471,   528,   501,   444,   501,   528,   613,   554,   555,   472,   500,   556,   669,   610,   611,   614,   640,   584,   612,   557,   755,   586,   613,   586,   585,   585,   557,   557,   529,   474,   307,   530,   502,   418,   419,   362,   363,   475,   475,   447,   475,   503,   615,   586,   558,   558,   530,   587,   698,   615,   641,   531,   755,   531,   559,   587,   670,   671,   643,   699,   755,   699,   727,   642,   698,   27,   783,   725,   726,   670,   698,   642,   751,   669,   641,   669,   697,   697,   695,   753,   781,   781,   753,   752,   724,   779,   780,   751,   778,   723,   750,   749,   776,   748,   775,   747,   776,   694,   722,   667,   695,   721,   748,   693,   721,   665,   693,   639,   666,   610,   638,   693,   664,   692,   663,   748,   719,   693,   720,   747,   716,   717,   746,   717,   718,   744,   689,   716,   716,   742,   688,   714,   768,   765,   737,   739,   738,   716,   770,   744,   773,   771,   772,   746,   746,   744,   745,   745,   769,   773,   772,   763,   764,   739,   766,   769,   768,   759,   758,   760,   759,   762,   761,   731,   678,   730,   735,   702,   704,   756,   730,   673,   729,   702,   673,   700,   700,   701,   644,   672,   561,   533,   672,   646,   644,   618,   616,   589,   645,   646,   674,   676,   588,   620,   590,   618,   561,   533,   562,   561,   589,   591,   647,   648,   649,   760,   679,   705,   677,   704,   678,   705,   649,   676,   734,   733,   679,   706,   735,   707,   707,   709,   708,   657,   737,   683,   713,   630,   682,   683,   684,   657,   652,   624,   652,   710,   679,   681,   653,   681,   682,   682,   621,   620,   623,   650,   564,   591,   533,   505,   562,   534,   591,   562,   623,   651,   593,   592,   623,   622,   594,   593,   595,   594,   535,   564,   507,   506,   536,   535,   569,   595,   569,   596,   566,   565,   653,   626,   599,   602,   627,   654,   623,   625,   624,   625,   683,   656,   682,   655,   600,   628,   600,   573,   601,   574,   575,   522,   576,   547,   576,   494,   522,   521,   604,   605,   576,   577,   658,   604,   629,   630,   576,   632,   658,   743,   686,   604,   686,   714,   686,   713,   716,   660,   689,   660,   659,   687,   659,   660,   604,   632,   662,   610,   606,   634,   717,   690,   635,   663,   664,   609,   635,   636,   582,   609,   580,   608,   553,   581,   552,   525,   497,   496,   579,   607,   552,   524,   578,   551,   549,   550,   521,   495,   522,   467,   494,   467,   467,   520,   571,   572,   543,   517,   570,   571,   570,   515,   487,   515,   486,   433,   543,   491,   516,   461,   461,   488,   434,   457,   432,   348,   404,   319,   376,   264,   374,   373,   319,   320,   487,   432,   487,   458,   459,   432,   457,   431,   458,   403,   430,   375,   402,   375,   457,   374,   374,   318,   484,   458,   430,   484,   430,   400,   540,   542,   540,   482,   513,   514,   485,   486,   540,   568,   541,   542,   540,   566,   540,   567,   566,   511,   565,   509,   539,   538,   538,   511,   455,   456,   455,   538,   426,   481,   535,   536,   482,   509,   509,   510,   478,   452,   477,   476,   450,   449,   393,   421,   337,   423,   422,   454,   481,   423,   451,   425,   452,   396,   424,   394,   340,   337,   393,   394,   281,   395,   367,   370,   397,   367,   341,   368,   369,   343,   371,   343,   370,   397,   425,   428,   427,   371,   398,   402,   456,   429,   428,   428,   401,   427,   372,   345,   372,   337,   310,   256,   255,   227,   203,   199,   202,   227,   312,   226,   227,   281,   281,   255,   282,   226,   254,   253,   224,   253,   253,   252,   225,   116,   226,   225,   226,   225,   199,   142,   169,   140,   141,   112,   140,   85,   28,   28,   86,   85,   85,   56,   57,   28,   141,   114,   86,   58,   143,   170,   141,   169,   141,   142,   199,   172,   170,   171,   170,   143,   115,   87,   29,   201,   201,   117,   145,   175,   174,   116,   87,   229,   259,   174,   202,   338,   257,   255,   256,   173,   201,   256,   283,   285,   284,   337,   311,   312,   311,   312,   340,   312,   286,   259,   286,   231,   260,   230,   258,   288,   260,   288,   178,   316,   289,   342,   315,   290,   318,   290,   292,   261,   263,   235,   234,   205,   233,   204,   233,   175,   177,   259,   260,   204,   232,   230,   231,   175,   203,   58,   59,   175,   145,   118,   146,   146,   89,   291,   263,   208,   235,   319,   292,   291,   292,   321,   322,   320,   294,   236,   264,   178,   206,   149,   177,   237,   236,   117,   89,   181,   208,   179,   207,   210,   294,   182,   209,   322,   293,   294,   266,   236,   237,   297,   296,   268,   295,   184,   240,   239,   267,   243,   268,   269,   185,   328,   324,   353,   433,   323,   324,   435,   351,   407,   349,   379,   350,   378,   350,   433,   377,   349,   377,   461,   406,   434,   378,   350,   378,   490,   463,   489,   462,   436,   408,   408,   380,   463,   464,   437,   381,   518,   491,   489,   545,   462,   490,   491,   547,   517,   573,   545,   573,   519,   547,   492,   520,   465,   466,   521,   464,   437,   438,   493,   465,   383,   383,   383,   271,   384,   328,   383,   411,   245,   245,   273,   301,   355,   328,   299,   300,   215,   244,   298,   300,   270,   271,   409,   410,   327,   327,   353,   354,   299,   326,   408,   381,   297,   298,   269,   270,   241,   242,   183,   210,   183,   153,   155,   212,   69,   180,   156,   185,   212,   184,   184,   213,   240,   212,   183,   211,   217,   216,   187,   186,   159,   160,   187,   188,   159,   131,   15,   131,   102,   187,   130,   158,   130,   129,   102,   101,   129,   128,   102,   45,   74,   73,   73,   45,   14,   43,   44,   13,   100,   72,   41,   42,   69,   70,   156,   99,   127,   99,   155,   127,   97,   98,   97,   126,   13,   41,   68,   40,   65,   37,   65,   36,   65,   64,   65,   66,   64,   123,   67,   68,   38,   39,   95,   67,   154,   125,   181,   153,   153,   181,   152,   180,   178,   121,   93,   121,   95,   124,   151,   123,   94,   122,   91,   92,   63,   120,   147,   120,   91,   119,   118,   61,   59,   3,   90,   6,   89,   61,   88,   60,   5,   58,   4,   30,   33,   34,   35,   33,   6,   32,   32,   30,  30,
+ 936,   520,   742,   937,   190,   41,   163,   224,   172,   807,   44,   1193,   4,   1066,   1491,   774,   757,   451,   1020,   623,   1255,   650,   143,   488,   40,   425,   535,   544,   911,   537,   562,   584,   944,   729,   639,   166,   166,   651,   598,   748,   24,   5,   674,   33,   168,   63,   846,   220,   872,   47,   880,   686,   662,   685,   594,   947,   567,   883,   240,   493,   1279,   856,   772,   1087,   210,   68,   12,   1116,   1053,   987,   1181,   1352,   1205,   1221,   379,   538,   1468,   1427,   -1,   409,   571,   1363,   1440,   1377,   545,   1467,   1253,   1445,   1463,   1461,   1512,   1457,   1160,   1455,   1146,   463,   98,   102,   157,   406,   101,   100,   430,   617,   134,   522,   135,   423,   520,   421,   437,   463,   105,   480,   442,   483,   472,   473,   396,   472,   351,   554,   125,   1402,   1393,   134,   534,   536,   554,   514,   491,   585,   526,   533,   104,   540,   532,   551,   586,   574,   234,   949,   565,   578,   611,   696,   693,   235,   32,   686,   154,   733,   603,   152,   150,   619,   132,   411,   670,   649,   652,   687,   159,   158,   644,   35,   36,   677,   44,   681,   165,   892,   33,   907,   808,   875,   792,   722,   181,   182,   747,   178,   184,   739,   43,   801,   821,   782,   836,   779,   763,   -1,   -1,   -1,   787,   -1,   801,   799,   829,   852,   832,   777,   865,   832,   177,   875,   198,   337,   274,   1061,   192,   871,   1017,   867,   1323,   866,   207,   1022,   255,   874,   882,   866,   141,   814,   177,   235,   894,   906,   912,   713,   946,   230,   932,   921,   884,   942,   140,   948,   945,   1310,   961,   1013,   869,   1013,   975,   976,   344,   853,   1097,   1206,   1002,   1044,   840,   1036,   1041,   1005,   833,   1039,   838,   1039,   1037,   65,   1050,   1064,   1087,   -1,   261,   275,   1100,   1085,   1035,   1078,   1048,   208,   208,   267,   274,   1109,   1252,   1183,   1168,   92,   1130,   1150,   1151,   385,   1132,   1161,   1136,   1146,   1135,   1230,   1143,   301,   45,   1170,   1166,   1080,   1083,   1206,   267,   1077,   1192,   1098,   310,   999,   1193,   1208,   1267,   1202,   304,   1168,   1478,   978,   965,   982,   348,   1203,   319,   1232,   1458,   1275,   1344,   1400,   1271,   351,   1279,   1287,   1006,   1299,   997,   960,   1314,   1311,   330,   331,   1335,   1012,   958,   1403,   1370,   1292,   975,   345,   964,   1317,   1305,   1360,   316,   496,   1283,   325,   1392,   493,   1416,   1362,   120,   1410,   1414,   1431,   1417,   1419,   -1,   1444,   1470,   1390,   1449,   1469,   1467,   93,   381,   1438,   1473,   1483,   324,   1239,   1244,   317,   1486,   1254,   320,   93,   1490,   1459,   1513,   1142,   401,   394,   401,   100,   387,   447,   1411,   402,   396,   400,   438,   388,   395,   386,   394,   387,   413,   412,   393,   99,   99,   441,   403,   403,   423,   107,   403,   398,   408,   79,   415,   422,   107,   456,   435,   109,   417,   417,   97,   96,   425,   498,   518,   622,   424,   426,   105,   434,   515,   420,   509,   110,   442,   459,   100,   389,   439,   391,   447,   118,   471,   450,   465,   117,   445,   459,   454,   1426,   17,   467,   419,   470,   111,   451,   487,   462,   477,   481,   1414,   468,   117,   470,   446,   1441,   457,   472,   119,   453,   1412,   -1,   123,   481,   392,   477,   113,   457,   115,   485,   480,   483,   489,   115,   130,   482,   476,   123,   1402,   59,   502,   75,   476,   541,   127,   128,   502,   505,   494,   513,   521,   498,   501,   497,   486,   110,   506,   23,   506,   507,   129,   509,   523,   433,   1,   504,   1,   427,   510,   516,   620,   529,   125,   106,   133,   531,   535,   532,   531,   531,   136,   533,   135,   122,   29,   534,   495,   544,   499,   552,   541,   546,   558,   1357,   84,   557,   565,   555,   543,   559,   128,   562,   121,   551,   546,   550,   564,   935,   555,   564,   555,   142,   142,   568,   567,   137,   567,   71,   586,   938,   139,   587,   562,   939,   594,   561,   582,   148,   31,   589,   575,   591,   126,   590,   615,   583,   26,   615,   588,   609,   580,   592,   530,   585,   606,   662,   22,   604,   637,   154,   611,   609,   144,   639,   602,   661,   608,   593,   144,   606,   613,   588,   624,   25,   628,   155,   156,   19,   429,   19,   627,   103,   621,   625,   618,   636,   610,   612,   631,   614,   629,   656,   645,   661,   625,   646,   638,   638,   644,   650,   164,   643,   639,   96,   646,   646,   643,   657,   756,   667,   651,   648,   635,   34,   660,   674,   599,   150,   664,   37,   671,   686,   668,   653,   666,   654,   36,   161,   6,   667,   165,   672,   42,   170,   167,   683,   689,   689,   731,   167,   149,   42,   665,   52,   691,   678,   693,   53,   698,   146,   153,   146,   600,   153,   704,   700,   703,   929,   680,   711,   690,   706,   682,   909,   712,   730,   923,   924,   708,   28,   724,   708,   902,   714,   906,   8,   183,   808,   740,   811,   715,   735,   732,   730,   737,   168,   731,   682,   734,   710,   736,   725,   727,   735,   178,   174,   41,   738,   8,   719,   750,   747,   749,   180,   182,   180,   744,   803,   16,   39,   759,   798,   24,   759,   761,   754,   777,   775,   769,   762,   758,   771,   771,   785,   195,   766,   776,   187,   788,   194,   767,   62,   772,   201,   795,   189,   830,   834,   62,   786,   835,   767,   193,   774,   844,   206,   198,   832,   746,   803,   798,   794,   755,   751,   802,   791,   778,   185,   792,   806,   801,   807,   196,   9,   721,   824,   817,   721,   873,   718,   49,   828,   812,   810,   898,   870,   216,   819,   721,   821,   828,   868,   824,   815,   822,   198,   206,   841,   203,   855,   788,   768,   188,   840,   784,   852,   785,   869,   793,   848,   780,   831,   200,   850,   829,   858,   46,   856,   839,   258,   835,   1042,   252,   859,   845,   207,   242,   1029,   843,   48,   872,   958,   221,   213,   815,   242,   48,   820,   58,   175,   876,   827,   878,   879,   876,   1333,   335,   50,   336,   57,   951,   57,   1334,   885,   953,   949,   222,   917,   226,   887,   237,   223,   893,   221,   814,   893,   918,   895,   716,   913,   896,   903,   227,   905,   813,   714,   912,   909,   228,   915,   717,   918,   910,   904,   228,   925,   696,   147,   225,   229,   926,   929,   699,   930,   931,   934,   932,   928,   920,   0,   232,   561,   931,   943,   573,   32,   950,   231,   933,   236,   140,   948,   236,   55,   234,   889,   940,   888,   568,   1339,   952,   1339,   1336,   338,   1331,   969,   1327,   963,   959,   217,   69,   69,   964,   328,   973,   966,   1328,   1324,   973,   968,   987,   1306,   245,   334,   313,   996,   1242,   998,   315,   1095,   1097,   980,   313,   989,   977,   328,   976,   994,   988,   976,   334,   990,   1000,   1009,   250,   305,   998,   218,   1003,   983,   1210,   255,   995,   245,   1034,   1007,   248,   243,   217,   1023,   253,   1018,   314,   212,   967,   1011,   859,   1016,   314,   1025,   847,   1019,   849,   861,   1034,   256,   1043,   1033,   1038,   1032,   1046,   270,   1008,   253,   256,   257,   1059,   851,   1044,   1030,   1042,   1030,   1014,   209,   272,   64,   -1,   1052,   1057,   1069,   262,   266,   1051,   1052,   260,   251,   1065,   209,   1089,   247,   1075,   269,   13,   302,   1055,   208,   273,   1113,   1076,   1191,   1083,   1084,   1073,   301,   271,   1083,   297,   294,   1080,   298,   1089,   272,   1094,   257,   1081,   1062,   1092,   1036,   1094,   1096,   1093,   1010,   63,   1098,   1097,   294,   1068,   1183,   1185,   1104,   1111,   1229,   1155,   1175,   1104,   1188,   1127,   1106,   1071,   1115,   1178,   279,   1110,   1114,   1112,   -1,   1121,   1118,   -1,   1128,   296,   1123,   1122,   1125,   1126,   1158,   94,   283,   -1,   290,   286,   1132,   1139,   1142,   1144,   1136,   286,   1140,   1137,   385,   1137,   1133,   1147,   291,   1507,   1159,   1157,   1153,   1131,   1145,   1149,   1129,   1167,   1159,   1129,   1149,   1124,   289,   1171,   1138,   1180,   1181,   1233,   1235,   311,   1164,   287,   291,   1175,   1222,   311,   1105,   268,   1198,   1182,   70,   1164,   1107,   1102,   1101,   1109,   1102,   268,   1188,   1187,   1101,   1192,   1073,   277,   1173,   1173,   11,   1227,   1223,   1226,   1194,   1223,   1219,   1200,   317,   1202,   72,   249,   306,   1210,   985,   1213,   1245,   1215,   1238,   1241,   1241,   1253,   86,   1224,   1201,   319,   278,   1225,   1201,   73,   1219,   1229,   1224,   1220,   1218,   1148,   1498,   1168,   1166,   1495,   1169,   1495,   1502,   1213,   1213,   308,   375,   1211,   982,   376,   1243,   1248,   1295,   1245,   1277,   1267,   1238,   1203,   86,   379,   1221,   1385,   1251,   295,   287,   1475,   1240,   1477,   1214,   1385,   1246,   1264,   1250,   1277,   1243,   1281,   1269,   1250,   1256,   1287,   316,   1275,   1268,   1399,   326,   1279,   1270,   355,   326,   1382,   1405,   1358,   348,   345,   988,   348,   327,   244,   1290,   1305,   1247,   1307,   1295,   1309,   1297,   1289,   1302,   1301,   1298,   972,   346,   1300,   329,   329,   346,   239,   1313,   1326,   342,   341,   244,   1315,   1294,   333,   1341,   1368,   1372,   1328,   1318,   1312,   1332,   239,   970,   214,   336,   960,   1333,   335,   50,   886,   1337,   956,   222,   1344,   955,   890,   332,   1320,   1353,   1338,   1342,   1347,   1352,   1346,   81,   1348,   1361,   71,   56,   1355,   493,   1357,   1361,   1286,   1351,   1367,   1357,   339,   1355,   1379,   1361,   1381,   1349,   83,   71,   1371,   1286,   340,   1371,   1379,   340,   1316,   1321,   1366,   1374,   1284,   1383,   1397,   1282,   1400,   1256,   1384,   364,   1278,   60,   365,   1474,   82,   1285,   1396,   1278,   352,   124,   60,   323,   323,   374,   1409,   339,   1415,   1285,   357,   484,   1406,   1402,   1413,   358,   -1,   1410,   358,   356,   354,   1415,   1416,   361,   464,   1434,   1419,   1442,   1420,   1429,   1428,   77,   1427,   1432,   -1,   1435,   1412,   362,   469,   1431,   1433,   362,   1390,   1436,   363,   1443,   1445,   1447,   366,   87,   1438,   1390,   1446,   366,   1433,   1453,   368,   1451,   1456,   91,   1458,   383,   320,   1512,   1454,   89,   320,   88,   367,   371,   1469,   78,   89,   1466,   364,   372,   1391,   1483,   1391,   1266,   1474,   1261,   312,   1480,   1479,   1487,   76,   1473,   88,   378,   378,   74,   382,   1480,   382,   1492,   1491,   1489,   1488,   1236,   1258,   1503,   1148,   1516,   1237,   1514,   1259,   1505,   1162,   1231,   -1,   292,   -1,   1517,   1508,   1501,   1459,   1510,   -1,   1516,   1499,   1518,  1163,
+ 935,   518,   725,   230,   -1,   719,   166,   173,   742,   826,   745,   1195,   44,   1056,   1489,   199,   752,   450,   1019,   621,   1220,   664,   600,   512,   756,   617,   532,   503,   713,   538,   139,   582,   148,   172,   635,   165,   670,   656,   22,   179,   683,   740,   676,   184,   10,   248,   858,   221,   870,   814,   1333,   152,   665,   684,   561,   884,   80,   885,   820,   547,   1398,   1059,   782,   1096,   1049,   274,   754,   1112,   65,   965,   1103,   1369,   1239,   1224,   1463,   495,   1482,   1435,   370,   408,   56,   355,   1392,   1368,   548,   1451,   1217,   1446,   1478,   1468,   382,   1456,   1129,   369,   1145,   451,   425,   424,   410,   652,   440,   114,   97,   19,   29,   432,   122,   411,   617,   97,   419,   461,   517,   457,   456,   482,   392,   466,   443,   453,   356,   556,   106,   476,   1397,   526,   586,   498,   495,   419,   488,   580,   525,   589,   525,   106,   104,   570,   574,   30,   236,   222,   566,   928,   612,   927,   51,   941,   943,   684,   599,   682,   153,   694,   603,   615,   620,   98,   163,   162,   409,   659,   668,   6,   643,   674,   35,   678,   40,   680,   677,   904,   8,   7,   178,   873,   749,   204,   738,   181,   43,   805,   179,   720,   738,   176,   211,   773,   192,   767,   769,   768,   188,   189,   779,   786,   753,   789,   206,   15,   831,   789,   864,   797,   5,   822,   830,   859,   1069,   1047,   64,   869,   1006,   827,   1328,   879,   242,   1012,   1001,   810,   47,   897,   890,   895,   7,   922,   892,   902,   171,   707,   231,   941,   936,   912,   948,   147,   946,   947,   226,   1313,   337,   1017,   216,   1011,   1292,   1007,   1304,   1048,   45,   306,   998,   1043,   856,   1037,   852,   993,   1029,   270,   853,   1062,   1058,   266,   1057,   1072,   1081,   1068,   1186,   276,   1186,   1065,   257,   1077,   259,   1070,   276,   1187,   267,   1192,   312,   1115,   1236,   1167,   1124,   1154,   290,   -1,   1134,   1170,   1133,   1161,   284,   1147,   1141,   11,   1099,   1258,   1170,   1099,   1089,   310,   273,   249,   1067,   307,   303,   1002,   249,   303,   1240,   1207,   299,   1174,   379,   1248,   1016,   1273,   1275,   377,   1254,   1220,   1462,   1274,   1340,   1389,   1280,   124,   1276,   1291,   967,   1308,   334,   335,   333,   1318,   994,   1332,   1329,   207,   962,   1362,   1375,   1314,   972,   1316,   1324,   343,   1307,   1379,   1290,   1409,   321,   1362,   1396,   500,   1404,   1282,   1403,   1406,   1413,   1437,   1416,   1440,   1433,   1440,   1473,   1436,   1444,   1464,   367,   1454,   1469,   1452,   1471,   1482,   1389,   1257,   982,   1476,   1463,   312,   1486,   370,   1488,   1457,   1490,   285,   395,   401,   399,   441,   397,   443,   478,   404,   400,   398,   394,   -1,   414,   402,   441,   386,   393,   408,   406,   -1,   404,   416,   414,   79,   422,   157,   406,   412,   398,   416,   407,   423,   440,   129,   418,   436,   109,   410,   430,   426,   424,   527,   431,   520,   102,   432,   431,   517,   508,   436,   421,   420,   389,   442,   418,   407,   114,   118,   -1,   450,   468,   391,   452,   475,   447,   17,   444,   119,   452,   454,   114,   113,   456,   458,   486,   129,   487,   111,   1420,   448,   465,   95,   455,   1434,   467,   470,   116,   446,   1430,   1429,   496,   479,   1410,   480,   484,   477,   130,   115,   478,   1407,   508,   460,   490,   511,   502,   130,   1407,   353,   513,   540,   349,   127,   427,   536,   353,   506,   490,   500,   519,   504,   510,   501,   523,   515,   522,   516,   23,   494,   460,   514,   511,   112,   108,   428,   429,   1,   519,   112,   528,   132,   132,   429,   626,   620,   596,   533,   136,   535,   539,   26,   127,   540,   75,   538,   537,   542,   541,   558,   27,   544,   556,   548,   547,   560,   121,   557,   1359,   1350,   121,   564,   542,   549,   543,   558,   75,   54,   576,   572,   563,   557,   553,   570,   955,   952,   137,   80,   563,   584,   581,   138,   569,   576,   143,   582,   594,   573,   579,   530,   573,   597,   572,   575,   592,   619,   126,   583,   131,   608,   54,   578,   587,   596,   595,   660,   696,   694,   634,   605,   38,   601,   613,   25,   610,   593,   630,   144,   610,   614,   631,   155,   619,   108,   632,   616,   529,   524,   526,   622,   626,   627,   528,   624,   616,   642,   641,   632,   640,   628,   641,   34,   629,   658,   640,   607,   632,   630,   629,   164,   607,   642,   648,   159,   657,   655,   660,   37,   99,   647,   158,   669,   21,   651,   636,   36,   650,   637,   599,   671,   21,   52,   163,   666,   162,   668,   158,   663,   35,   675,   659,   170,   687,   685,   691,   681,   702,   169,   706,   679,   693,   53,   51,   676,   690,   680,   704,   688,   927,   690,   601,   697,   920,   145,   695,   701,   692,   699,   688,   705,   698,   704,   702,   708,   707,   733,   712,   151,   734,   229,   909,   724,   725,   916,   905,   743,   741,   811,   177,   722,   714,   716,   715,   736,   726,   735,   709,   730,   726,   709,   712,   729,   709,   732,   184,   741,   722,   720,   2,   742,   746,   752,   792,   750,   39,   176,   752,   797,   745,   807,   764,   796,   -1,   16,   762,   10,   757,   758,   763,   190,   754,   773,   769,   189,   835,   190,   761,   765,   62,   765,   787,   766,   770,   764,   800,   -1,   848,   787,   781,   785,   783,   840,   783,   194,   834,   201,   799,   799,   176,   186,   797,   791,   778,   203,   794,   790,   197,   196,   804,   793,   751,   181,   823,   753,   809,   805,   219,   183,   816,   908,   898,   827,   205,   7,   817,   821,   871,   186,   205,   806,   826,   819,   825,   875,   815,   850,   780,   845,   200,   862,   199,   784,   854,   15,   252,   844,   837,   831,   841,   1024,   839,   860,   46,   1026,   843,   18,   847,   1041,   254,   61,   1047,   254,   851,   1021,   849,   857,   1020,   1027,   833,   868,   202,   202,   881,   202,   863,   841,   871,   211,   48,   812,   219,   205,   175,   865,   877,   877,   50,   866,   881,   220,   55,   887,   1337,   893,   889,   888,   1340,   899,   171,   899,   896,   901,   904,   219,   897,   883,   917,   818,   724,   905,   917,   907,   718,   901,   173,   707,   916,   28,   910,   895,   903,   913,   915,   891,   900,   713,   928,   892,   233,   710,   923,   225,   919,   692,   920,   925,   701,   54,   232,   231,   942,   3,   0,   3,   937,   139,   577,   238,   235,   937,   32,   238,   945,   887,   237,   141,   951,   884,   954,   888,   953,   568,   890,   961,   338,   963,   1330,   240,   338,   961,   966,   967,   1022,   1018,   992,   959,   1310,   969,   1304,   972,   246,   342,   993,   988,   981,   1303,   985,   1302,   376,   1003,   983,   1004,   1242,   69,   992,   987,   995,   989,   991,   255,   995,   1006,   330,   990,   1000,   1009,   999,   245,   305,   1002,   985,   1028,   212,   1009,   218,   997,   1093,   1019,   1021,   243,   1030,   243,   1015,   241,   1017,   1025,   18,   857,   217,   1013,   1029,   1023,   1027,   1026,   1031,   1024,   1045,   1023,   1033,   861,   1028,   1091,   1091,   270,   1032,   259,   1058,   837,   855,   260,   251,   1042,   1032,   854,   247,   836,   210,   1060,   64,   68,   1053,   1068,   263,   1066,   1039,   1040,   1051,   1060,   259,   269,   263,   1064,   1069,   1073,   1100,   1053,   13,   1112,   263,   1076,   1082,   1079,   1070,   271,   1072,   1078,   1082,   1088,   1206,   1074,   1075,   1084,   1091,   63,   1080,   298,   305,   1086,   1007,   1094,   1086,   1090,   1035,   248,   303,   1098,   268,   1176,   1182,   1182,   1108,   1228,   1127,   1174,   1110,   277,   1116,   1104,   67,   1071,   1108,   1117,   1120,   67,   1121,   1126,   1116,   1120,   1121,   1120,   282,   1127,   1128,   1110,   1123,   1155,   1149,   1152,   1135,   1145,   1135,   290,   1134,   1144,   1142,   1230,   1141,   1139,   385,   292,   1138,   1153,   94,   288,   1230,   1130,   283,   284,   1151,   1151,   1153,   1106,   1155,   1150,   1157,   1157,   1159,   282,   289,   1143,   1174,   1180,   296,   281,   1232,   280,   296,   1162,   1179,   1194,   1164,   1107,   275,   1184,   1114,   1185,   1156,   1165,   1103,   1178,   1177,   1184,   266,   275,   1109,   1188,   1187,   1190,   1190,   11,   1196,   1199,   1226,   1222,   1172,   1177,   1202,   1223,   309,   1252,   304,   1204,   1082,   309,   1205,   307,   1208,   1244,   1200,   1239,   1240,   1217,   73,   1201,   20,   1216,   1228,   1255,   1173,   1197,   1218,   1227,   1198,   1196,   311,   1105,   1139,   1171,   319,   1234,   1233,   1234,   280,   295,   376,   375,   1261,   1214,   980,   1245,   1004,   1211,   1249,   1249,   313,   1246,   1272,   1272,   278,   1252,   318,   1254,   1273,   308,   1233,   1502,   1391,   1260,   1203,   1262,   1384,   1281,   1472,   1475,   1297,   1265,   1277,   324,   1251,   315,   1380,   321,   326,   1270,   1395,   60,   324,   1280,   325,   350,   1380,   1393,   1365,   327,   1375,   1300,   1299,   1293,   1311,   1296,   1315,   1301,   1317,   1299,   1308,   329,   973,   1308,   981,   979,   246,   1306,   975,   346,   1301,   1298,   970,   333,   1324,   239,   332,   1316,   1376,   345,   1310,   1323,   1342,   1377,   331,   214,   344,   1330,   1304,   1312,   970,   1334,   971,   1332,   1325,   1331,   1322,   336,   214,   886,   1319,   322,   889,   1319,   1341,   1345,   322,   1344,   1348,   1346,   571,   1367,   553,   1359,   1347,   1369,   349,   1354,   1363,   547,   1346,   1358,   347,   1365,   351,   81,   1378,   1360,   1380,   1374,   1314,   1320,   347,   1370,   343,   1321,   1367,   1364,   341,   1376,   327,   1364,   1274,   1366,   350,   1284,   1386,   1264,   1388,   1472,   1449,   323,   1438,   1260,   1395,   352,   1398,   1392,   1399,   1394,   1283,   1396,   1384,   1400,   123,   1408,   1406,   1417,   1404,   492,   1403,   1408,   357,   392,   474,   358,   464,   1404,   1418,   360,   1414,   1422,   1424,   464,   1418,   1419,   1411,   1426,   453,   1428,   1420,   1425,   1437,   359,   1427,   1450,   1422,   77,   365,   359,   371,   1443,   82,   1423,   363,   1441,   1395,   1442,   1448,   1445,   1471,   1470,   -1,   1450,   371,   1452,   1460,   93,   1454,   91,   1456,   1458,   380,   1460,   90,   378,   1468,   1464,   369,   368,   76,   367,   1449,   1448,   1266,   364,   1483,   1260,   377,   1476,   317,   1487,   1462,   1493,   1485,   373,   377,   1482,   380,   1479,   1494,   14,   384,   14,   1232,   1492,   1496,   1494,   1494,   1502,   1231,   1509,   1496,   1506,   1237,   1497,   1259,   1504,   1510,   1148,   1515,   1507,   1513,   384,   1511,   1497,   1501,   1503,   1515,   1509,  1517,
+ 933,   521,   906,   935,   12,   204,   672,   817,   719,   823,   759,   293,   66,   1070,   1488,   837,   796,   454,   849,   103,   1218,   656,   38,   511,   673,   607,   590,   59,   922,   104,   572,   597,   939,   43,   657,   672,   659,   663,   604,   753,   168,   172,   685,   180,   12,   294,   850,   49,   863,   891,   881,   146,   687,   691,   931,   949,   1353,   1335,   872,   27,   1389,   853,   775,   45,   1052,   261,   763,   1117,   -1,   964,   1179,   571,   1212,   1216,   1487,   560,   372,   1421,   1467,   415,   566,   1349,   1405,   1352,   543,   -1,   1263,   366,   1484,   1466,   1462,   1455,   281,   381,   1130,   467,   647,   109,   96,   405,   389,   437,   517,   625,   136,   112,   527,   418,   518,   422,   509,   458,   523,   116,   101,   487,   113,   449,   445,   1424,   1285,   550,   537,   491,   325,   122,   590,   497,   499,   461,   482,   592,   156,   528,   125,   536,   534,   569,   575,   939,   944,   885,   570,   22,   606,   697,   695,   921,   581,   676,   661,   711,   51,   697,   665,   633,   623,   160,   654,   647,   157,   671,   653,   666,   635,   170,   6,   683,   729,   731,   675,   228,   41,   908,   739,   876,   185,   224,   174,   39,   749,   179,   748,   811,   182,   748,   793,   771,   191,   193,   4,   188,   210,   786,   773,   768,   806,   800,   790,   834,   846,   770,   867,   842,   908,   816,   789,   216,   273,   1063,   1050,   186,   993,   878,   1336,   874,   820,   963,   1008,   897,   883,   47,   1337,   900,   812,   925,   238,   914,   918,   923,   3,   933,   934,   922,   140,   225,   943,   894,   941,   1326,   58,   1005,   860,   1015,   1315,   1001,   974,   1063,   1010,   301,   986,   1059,   838,   1014,   855,   218,   1038,   1087,   1047,   272,   1043,   -1,   1054,   1056,   1062,   1113,   1055,   300,   1176,   1063,   1037,   1067,   1085,   300,   65,   1176,   1186,   1195,   1221,   1100,   1169,   1166,   1161,   1131,   -1,   1140,   1140,   1259,   1147,   1162,   1133,   1171,   1507,   302,   1081,   1237,   1124,   310,   1088,   309,   1191,   293,   293,   304,   1204,   1090,   1207,   1209,   1257,   299,   297,   1228,   278,   986,   1022,   1272,   1268,   1478,   1481,   318,   380,   350,   1339,   1399,   374,   1282,   1283,   1378,   989,   1307,   996,   1322,   1341,   332,   977,   880,   882,   240,   957,   1354,   1372,   1376,   1313,   1372,   246,   1288,   1309,   1370,   1287,   1354,   1382,   120,   1393,   496,   1413,   81,   1415,   492,   1411,   1439,   361,   360,   1437,   1442,   1387,   1453,   87,   368,   1452,   1466,   78,   1465,   76,   1484,   1401,   1241,   1238,   1484,   1485,   74,   1460,   -1,   90,   1514,   1511,   1143,   399,   390,   397,   438,   443,   -1,   116,   -1,   387,   386,   118,   390,   413,   388,   395,   388,   399,   409,   405,   404,   412,   414,   79,   160,   98,   415,   413,   402,   407,   411,   440,   435,   420,   110,   437,   433,   410,   107,   426,   25,   431,   521,   519,   527,   432,   428,   430,   421,   433,   417,   435,   101,   396,   445,   416,   400,   438,   390,   452,   439,   473,   444,   -1,   1425,   17,   95,   448,   473,   455,   468,   458,   481,   459,   439,   514,   111,   461,   95,   1421,   466,   -1,   455,   465,   1431,   471,   446,   471,   117,   1435,   449,   490,   462,   484,   483,   479,   463,   489,   479,   1407,   491,   460,   462,   23,   486,   488,   485,   357,   1355,   512,   128,   353,   507,   505,   542,   503,   507,   500,   27,   505,   501,   512,   513,   434,   436,   516,   489,   494,   503,   515,   434,   510,   102,   428,   522,   108,   504,   105,   508,   621,   134,   622,   427,   524,   525,   583,   529,   26,   133,   126,   530,   499,   29,   539,   563,   135,   497,   556,   84,   545,   84,   545,   59,   1351,   554,   559,   137,   1350,   566,   549,   551,   546,   565,   559,   553,   549,   579,   30,   539,   560,   550,   80,   56,   952,   576,   142,   1348,   30,   581,   138,   584,   577,   940,   595,   938,   131,   574,   580,   591,   31,   131,   138,   596,   613,   133,   587,   585,   595,   611,   578,   598,   597,   31,   38,   150,   694,   605,   608,   152,   601,   603,   598,   644,   593,   605,   612,   604,   631,   588,   633,   591,   628,   103,   627,   589,   524,   626,   623,   156,   616,   638,   624,   618,   633,   634,   640,   614,   618,   155,   602,   164,   658,   602,   641,   34,   630,   634,   645,   645,   642,   636,   649,   653,   655,   159,   21,   654,   160,   162,   669,   649,   37,   648,   637,   161,   658,   609,   52,   670,   662,   154,   667,   673,   669,   655,   663,   664,   675,   24,   42,   673,   149,   167,   689,   727,   169,   679,   151,   40,   53,   677,   149,   161,   702,   681,   688,   678,   700,   684,   600,   698,   145,   695,   692,   926,   699,   930,   706,   700,   705,   703,   705,   229,   715,   736,   733,   703,   710,   919,   717,   726,   728,   914,   813,   5,   740,   822,   723,   816,   902,   2,   728,   679,   716,   33,   727,   169,   737,   151,   732,   737,   734,   728,   741,   183,   720,   739,   743,   813,   755,   10,   744,   745,   185,   746,   747,   804,   750,   196,   66,   744,   652,   760,   764,   757,   800,   770,   758,   66,   777,   -1,   775,   774,   191,   762,   201,   766,   776,   187,   15,   761,   830,   760,   796,   194,   844,   782,   187,   784,   838,   783,   195,   781,   772,   197,   846,   795,   802,   842,   795,   778,   16,   794,   755,   197,   760,   804,   798,   751,   802,   809,   803,   805,   174,   808,   873,   723,   224,   743,   223,   868,   723,   818,   901,   825,   58,   823,   828,   9,   809,   826,   9,   213,   824,   848,   776,   200,   791,   256,   781,   854,   1049,   1041,   258,   862,   252,   842,   203,   862,   788,   858,   790,   1024,   780,   1026,   829,   1044,   199,   247,   836,   833,   61,   1011,   46,   1020,   845,   1033,   839,   867,   957,   877,   215,   863,   825,   211,   819,   870,   864,   810,   215,   175,   874,   878,   213,   215,   1329,   882,   220,   899,   234,   141,   1336,   947,   951,   1340,   956,   49,   921,   896,   226,   913,   894,   898,   818,   891,   223,   907,   227,   914,   171,   718,   2,   173,   204,   911,   911,   910,   233,   903,   227,   916,   717,   900,   915,   926,   932,   233,   28,   924,   711,   919,   924,   145,   143,   701,   927,   936,   930,   942,   929,   0,   232,   938,   579,   577,   954,   147,   934,   148,   950,   946,   230,   237,   945,   55,   944,   950,   569,   954,   940,   1343,   1338,   864,   865,   962,   331,   957,   1325,   959,   344,   314,   969,   965,   974,   971,   1327,   1330,   342,   1300,   968,   244,   990,   1303,   1247,   1302,   1003,   978,   1243,   984,   1209,   1209,   250,   974,   1289,   991,   997,   992,   968,   212,   991,   994,   979,   330,   981,   1000,   996,   1086,   250,   980,   1244,   241,   328,   1092,   1036,   999,   1095,   857,   337,   241,   1046,   1016,   1021,   1018,   1015,   18,   860,   1012,   966,   1031,   843,   1027,   847,   1025,   1005,   861,   1014,   1028,   1046,   1031,   1008,   1096,   253,   260,   1045,   1058,   1048,   254,   1045,   251,   851,   1038,   1034,   258,   1040,   1061,   262,   1056,   1051,   1054,   -1,   -1,   13,   262,   1040,   61,   1061,   1049,   264,   209,   1065,   1060,   1057,   271,   265,   1066,   1076,   -1,   1078,   1067,   1077,   1064,   1072,   1074,   1079,   1075,   1088,   264,   1074,   1079,   1085,   269,   1001,   264,   298,   1084,   1095,   1035,   1090,   1010,   1092,   983,   1093,   984,   1099,   297,   279,   1189,   1189,   70,   1103,   1175,   1111,   1181,   1114,   1184,   1108,   1165,   1118,   265,   1117,   1113,   67,   1115,   -1,   1131,   1123,   1122,   1126,   1125,   1160,   1158,   1119,   1106,   1150,   92,   282,   1119,   286,   288,   1136,   1134,   288,   -1,   1163,   1141,   285,   292,   1138,   1163,   -1,   94,   289,   1146,   1498,   1154,   1128,   1152,   -1,   1154,   283,   1156,   1180,   1158,   1125,   1160,   92,   287,   1504,   1518,   1169,   1111,   281,   1156,   280,   1235,   295,   1231,   1198,   1193,   1107,   1172,   1101,   1199,   1183,   1172,   1165,   70,   1178,   279,   1185,   1179,   276,   1190,   1189,   1102,   1191,   300,   302,   306,   1199,   277,   1194,   1207,   1177,   1195,   1212,   1217,   1204,   1262,   1205,   1208,   299,   1197,   307,   984,   1004,   1242,   72,   1210,   1263,   1212,   1219,   1215,   1229,   1225,   20,   73,   1197,   1200,   1227,   1222,   1196,   1225,   1105,   1226,   291,   1505,   1492,   1258,   1235,   1167,   1491,   1500,   1251,   72,   1214,   1215,   986,   1269,   1211,   1248,   1265,   978,   1246,   1247,   1385,   1257,   1253,   1216,   1255,   20,   1401,   375,   1496,   1504,   1261,   1477,   1263,   86,   1266,   1269,   1475,   308,   316,   1271,   1276,   1273,   315,   1271,   321,   1276,   1270,   1249,   1388,   1280,   1281,   1265,   1383,   1398,   1383,   120,   1371,   1274,   1291,   1309,   1293,   1288,   341,   1291,   1317,   1297,   1293,   1268,   1303,   1290,   1306,   1295,   979,   977,   1326,   1294,   1305,   1296,   1298,   1289,   1318,   1292,   1327,   1311,   1368,   1294,   343,   1296,   1323,   1338,   1369,   1373,   1334,   1319,   971,   962,   1312,   960,   1322,   880,   1325,   958,   1331,   879,   1329,   57,   886,   1335,   956,   953,   322,   1342,   1345,   955,   1345,   1343,   1358,   1373,   1350,   1356,   552,   548,   83,   1343,   339,   1363,   1349,   1356,   1359,   552,   1365,   1351,   355,   1356,   1375,   1286,   1378,   1360,   1320,   1353,   340,   1373,   1321,   1347,   1381,   1288,   1377,   83,   1364,   347,   1366,   1374,   1284,   1381,   1264,   1250,   1387,   1386,   1386,   374,   1447,   1472,   352,   124,   1397,   1444,   1394,   1382,   1394,   1278,   1401,   1256,   492,   356,   354,   82,   1408,   485,   1409,   349,   478,   1424,   1432,   354,   1418,   1417,   360,   1405,   1422,   1423,   1428,   77,   1434,   1441,   119,   449,   1425,   1432,   1426,   475,   474,   469,   1429,   1436,   1421,   474,   1439,   1430,   1446,   359,   361,   469,   1423,   1439,   363,   1447,   87,   1443,   1470,   1388,   1451,   85,   1453,   365,   369,   -1,   91,   -1,   1459,   383,   1461,   1485,   1480,   74,   1465,   1471,   89,   85,   1464,   370,   1448,   1465,   1387,   372,   1476,   1267,   1477,   1262,   88,   1486,   1489,   318,   373,   1474,   373,   1461,   1479,   1481,   14,   1493,   1500,   1236,   1493,   1481,   1495,   1234,   1500,   1513,   1499,   1498,   1490,   1511,   1497,   1515,   1505,   1503,   1501,   1509,   1510,   1499,   1506,   1512,   90,   384,   383,   1508,   -1,   -1,  -1,
+ };
+  
+ void vec(int16_t *a, int16_t *b, int16_t *v){
+    v[0] = a[0] - b[0];
+    v[1] = a[1] - b[1];
+    }
+    
+float dot_prod(int16_t *a, int16_t *b){
+    return (double)a[0]*(double)b[0] + (double)a[1]*(double)b[1];
+}    
+
+int Triangle_eval(int16_t *P, int16_t *A, int16_t *B, int16_t *C){
+    int16_t v0[2]={0,0};
+    int16_t v1[2]={0,0};
+    int16_t v2[2]={0,0};
+    
+    float dot00, dot01, dot02, dot11, dot12, invDenom, u, v;
+    
+    vec(C, A, v0);
+    vec(B, A, v1);
+    vec(P, A, v2);
+    
+    dot00 = dot_prod(v0,v0);
+    dot01 = dot_prod(v0,v1);
+    dot02 = dot_prod(v0,v2);
+    dot11 = dot_prod(v1,v1);
+    dot12 = dot_prod(v1,v2);
+    
+    invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
+    u = (dot11 * dot02 - dot01 * dot12) * invDenom;
+    v = (dot00 * dot12 - dot01 * dot02) * invDenom;
+    //pc.printf("u = %.2f ",u); pc.printf("v = %.2f\n",v);
+    bool Tbool = ((u>=0) && (v>=0)) && (u+v<=1);
+    
+    return (Tbool == true)?0:((u+v > 1)?1: (((v<0)&&(v<u))?2:3) );
+    }
+ 
+ float Triag_area(int16_t *A, int16_t *B, int16_t *C){
+    return ((float)A[0]*(float)B[1]+(float)B[0]*(float)C[1]+(float)A[1]*(float)C[0] - ( (float)C[0]*(float)B[1]+(float)B[0]*(float)A[1]+(float)A[0]*(float)C[1] ));
+    }   
+    
+ int16_t Find_point(int16_t *p, int16_t i_t, int16_t *P_S, int16_t *C_L, int16_t *inter_p){
+
+    int Eval=1;
+    int16_t triag = i_t;
+    int16_t t[3]={0,0,0};
+    int16_t A[2];
+    int16_t B[2];
+    int16_t C[2];
+
+    while (Eval > 0){
+
+        A[0]= P_S[0*num_points + C_L[0*num_triag + triag]]; A[1]= P_S[1*num_points + C_L[0*num_triag + triag]];
+        B[0]= P_S[0*num_points + C_L[1*num_triag + triag]]; B[1]= P_S[1*num_points + C_L[1*num_triag + triag]];
+        C[0]= P_S[0*num_points + C_L[2*num_triag + triag]]; C[1]= P_S[1*num_points + C_L[2*num_triag + triag]];
+        
+        /*pc.printf("Point %d, ", p[0]);
+        pc.printf("%d\n", p[1]);
+        pc.printf("Triag =  %d\n", triag);
+        pc.printf("A = %d ", A[0]); pc.printf("%d\n", A[1]); 
+        pc.printf("B = %d ", B[0]); pc.printf("%d\n", B[1]);
+        pc.printf("C = %d ", C[0]); pc.printf("%d\n", C[1]);*/
+        
+        Eval = Triangle_eval(p, A, B, C);
+        //pc.printf("Eval= %d\n",Eval);
+        if (Eval > 0) {
+            t[0]=t[1];t[1]=t[2];
+            t[2] = C_L[ (Eval+ 2)*num_triag + triag];                       
+            if (t[2]==t[0]){
+                if (Eval < 3){
+                    t[2] = C_L[ (Eval+ 3)*num_triag + triag];
+                    }
+                else{
+                    t[2] = C_L[ (Eval)*num_triag + triag];
+                    }
+                }
+            if (t[2] == -1){
+                Eval = 0;
+                }
+            else{
+                triag = t[2];
+                //pc.printf("Go to triag %d\n",triag);
+                }
+            }
+        }
+        
+    A[0]= P_S[0*num_points + C_L[0*num_triag + triag]]; A[1]= P_S[1*num_points + C_L[0*num_triag + triag]];
+    B[0]= P_S[0*num_points + C_L[1*num_triag + triag]]; B[1]= P_S[1*num_points + C_L[1*num_triag + triag]];
+    C[0]= P_S[0*num_points + C_L[2*num_triag + triag]]; C[1]= P_S[1*num_points + C_L[2*num_triag + triag]];    
+    float AT = Triag_area(A,B,C);
+    float A1 = Triag_area(p,B,C)/AT;
+    float A2 = Triag_area(A,p,C)/AT;
+    float A3 = Triag_area(A,B,p)/AT;
+    
+    inter_p[0] = (int16_t)(A1*P_S[2*num_points + C_L[0*num_triag + triag]] + A2*P_S[2*num_points + C_L[1*num_triag + triag]] + A3*P_S[2*num_points + C_L[2*num_triag + triag]]);
+    inter_p[1] = (int16_t)(A1*P_S[3*num_points + C_L[0*num_triag + triag]] + A2*P_S[3*num_points + C_L[1*num_triag + triag]] + A3*P_S[3*num_points + C_L[2*num_triag + triag]]);
+    return triag;
+    }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Scattered_interpolator.h	Thu May 21 13:10:58 2020 +0000
@@ -0,0 +1,8 @@
+#ifndef Scattered_interpolator_h
+#define Scattered_interpolator_h
+#define num_points 784
+#define num_triag 1519
+    extern int16_t SI_Points[4*num_points];
+    extern int16_t SI_ConnectivityList[6*num_triag];
+    int16_t Find_point(int16_t *p, int16_t i_t, int16_t *P_S, int16_t *C_L, int16_t *inter_p);
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 21 13:10:58 2020 +0000
@@ -0,0 +1,252 @@
+#include "mbed.h"
+#include "rtos.h"
+#include <math.h>
+#include "MadgwickAHRS.h"
+#include "Mag_track.h"
+#include "Scattered_interpolator.h"
+
+//----------------------------------------------------------------------------------------------------
+// Global ariable declaration
+DigitalOut D_1(PA_7);
+DigitalOut D_2(PA_6);
+Thread thread;
+Ticker read_ticker;
+
+/////// Bounce button interrupt
+InterruptIn button1(USER_BUTTON);
+volatile bool button1_pressed = false; // Used in the main loop
+volatile bool button1_enabled = true; // Used for debouncing
+Timeout button1_timeout; // Used for debouncing
+
+/////// Flags
+bool flag = false;
+bool flag_data_ready = false;
+bool go_flag = false; // 10 sec flag for Qinit set up
+
+/////// External signal buffers  
+int16_t Mag_read_buff[24];// 3*8 signed int_16 buffer read from sensor
+int16_t Acc_read[3]={0,0,0};
+int16_t Gyr_read[3]={0,0,0};
+float q_init[4]={1,0,0,0};
+float q_init_n[4]={1,0,0,0};//{-0.8489, 0.0046, -0.001, 0.5286};//{0,0,0,0}; //;
+
+/////// Counters 
+int16_t count_1=1;
+int16_t count_2=1;
+
+
+
+//---------------------------------------------------------------------------------------------------
+// Function declarations
+
+// Enables button when bouncing is over
+void button1_enabled_cb(void)
+{
+     button1_enabled = true;
+}
+
+// ISR handling button pressed event
+void button1_onpressed_cb(void)
+{
+     if (button1_enabled) { // Disabled while the button is bouncing
+         button1_enabled = false;
+         button1_pressed = true; // To be read by the main loop
+         button1_timeout.attach(callback(button1_enabled_cb), 0.3); // Debounce time 300 ms
+     }
+}
+
+/////// Toggle flag 
+void toggle_flag() {
+       flag = !flag;
+       //myled = !myled;
+}
+
+
+//////////////////////////////////////////////////////////////
+//  Sensors reading thread
+//////////////////////////////////////////////////////////////
+void read_thread(){
+     PC.printf("Hello World 30/11/18 DAFG!\n");     
+     int16_t i, j;        
+     // Raw and Filtered signals buffers
+     memset( Mag_read_buff, 0, sizeof( Mag_read_buff ) );    
+     int16_t Mag_filt[24];   // 24 signed int_16 output values from filter
+     int16_t Mag_filt_lp[24];// 24 signed int_16 output values from filter
+     int16_t M_LP[3];        // 3 signed int_16 output values from filter
+     // Quaternion update buffers
+     float a[3]={0,0,0};
+     float g[3]={0,0,0};
+     float m[3]={0,0,0};     
+     int32_t q[4]={0, 0, 0, 0};
+     int32_t Q_out[4]={0, 0, 0, 0};
+     float Q[4]={0,0,0,0};         
+     //Buffers for magnetic signal rotation     
+     float v_I[3]={0,0,0};
+     float v_rotX[3]={0,0,0};
+     int16_t v_rotX_int[24];
+     memset( v_rotX_int, 0, sizeof( v_rotX_int ) );
+     float Mag_filt_f[3];    
+     // Buffers for envelope extraction
+     int16_t maximum[6]={0,0,0,0,0,0};
+     int16_t peak_index[6]={0,0,0,0,0,0};
+     int16_t Env[3]={0,0,0};
+     double R[3]={0,0,0};
+     double phase[3]={0,0,0};
+     int16_t Sign[2]={1,1};     
+     // ID word buffer
+     char data_out[4];
+     data_out[0] = 0xDA;
+     data_out[1] = 0x51;  //DA51 = 55889
+     data_out[2] = 0xDA;
+     data_out[3] = 0xF6;  // DAF6 = 56054
+     
+     
+     
+          
+     while (1) {
+         Thread::signal_wait(0x1);
+         D_2=1;         
+         flag_data_ready = false;
+     ///////////////////////////////////////////////////////////
+     ////  RUOTARE IL CAMPO
+         Q[0]=q0; Q[1]=-q1; Q[2]=-q2; Q[3]=-q3;
+         for(i=0;i<8;i++){
+             Mag_filt_f[0]= (float)Mag_read_buff[i]; Mag_filt_f[1]= (float)Mag_read_buff[8+i]; Mag_filt_f[2]= (float)Mag_read_buff[16+i];
+             Qrotate(Mag_filt_f,Q,v_I);
+             Qrotate(v_I,q_init,v_rotX);
+             v_rotX_int[i]=(int16_t)v_rotX[0]; v_rotX_int[8+i]=(int16_t)v_rotX[1]; v_rotX_int[16+i]=(int16_t)v_rotX[2];
+         }
+         
+     ///////////////////////////////////////////////////////////
+     //Filter block
+         for(i=0;i<3;i++){
+              for(j=0;j<8;j++){
+                 //Band-Pass
+                 firFixed( coeffs_bp, &v_rotX_int[i*8 + j], &Mag_filt[i*8 + j], 1, FILTER_LEN_BP, i, insamp);
+                 //Low-Pass
+                 firFixed( coeffs_lp, &Mag_read_buff[i*8 + j], &Mag_filt_lp[i*8 + j], 1, FILTER_LEN_LP, i,lp_insamp);
+                 }
+                 M_LP[i]=Mag_filt_lp[i*8 + 4];             
+         }                   
+             
+     ///////////////////////////////////////////////////////////
+     /// ENVELOPE EXTRACTION        
+                 
+         Env_extraction(Env, Mag_filt, maximum, peak_index, R, phase, Sign); 
+                              
+     ///////////////////////////////////////////////////////////
+     /// Quaternion computing
+         QUpdate(q, m, a, g, M_LP, Acc_read, Gyr_read, q_init_n, Q_out); 
+                
+     ///////////////////////////////////////////////////////////
+     ///Send serial data: 20954 [1]| Envelope[3] | -2342 [1] | Quat [8] 
+         
+         if(go_flag){
+              
+              for(i=0; i<2; i++){   //// PAROLA  20954
+                 PC.printf("%c",data_out[i]);
+              }     
+              for(i=0; i<3; i++){     // ENVELOPE
+                 PC.printf("%c",(char)(Env[i] & 0xff));
+                 PC.printf("%c",(char)(Env[i]>>8 & 0xff));
+              }
+              for(i=2; i<4; i++){   //// PAROLA -2342
+                 PC.printf("%c",data_out[i]);
+              }
+              for(i=0;i<4;i++){
+                 PC.printf("%c",(char)(Q_out[i] & 0xff));
+                 PC.printf("%c",(char)(Q_out[i]>>8 & 0xff));
+                 PC.printf("%c",(char)(Q_out[i]>>16 & 0xff));
+                 PC.printf("%c",(char)(Q_out[i]>>24 & 0xff));
+              }
+            
+         }
+         D_2=0;
+                                                              
+     }
+     
+}
+
+
+//////////////////////////////////////////////////////////////
+//  Main Code
+//////////////////////////////////////////////////////////////
+int main(){
+    PC.baud(921600); //115200  921600
+    /////// Internal signal buffers
+    int16_t Mag_read_in_buff[24];
+    memset( Mag_read_in_buff, 0, sizeof( Mag_read_in_buff ) );
+    int16_t Mag_in_read[3]={0,0,0};
+    int16_t Acc_in_read[3]={0,0,0};
+    int16_t Gyr_in_read[3]={0,0,0};
+    int i;
+    button1.fall(callback(button1_onpressed_cb)); // Attach ISR to handle button press event      
+    // Init FIR filters
+    firFixedInit();
+    PC.printf("Press button start!\n");
+    D_1=0;
+    D_2=0;
+    while (!button1_pressed){
+             myled = !myled;
+             wait(0.1);
+         } 
+    //Configure sensors
+    sensor_setup();
+    //Start sensor reading thread
+    thread.start(read_thread);    
+    //Timer begins, Freq = 800
+    read_ticker.attach_us(&toggle_flag, 1250);
+    while(1){
+        if(flag){
+             D_1=1;
+        ///////////////////////////////////////////////////////////
+        // Read Mag register and Calibration Correction
+             Read_Mag(Mag_in_read);                         
+        ///////////////////////////////////////////////////////////
+        // Read acc + gyr register
+             if(count_1 == 1){
+                 Read_Acc(Acc_in_read);                 
+                 }
+             if(count_1 == 5){
+                 Read_Gyr(Gyr_in_read);               
+                 }
+                 
+        ///////////////////////////////////////////////////////////
+        // Read Mag internal buffer fill         
+             for(i=0;i<3;i++){   
+                 Mag_read_in_buff[8*i + count_1] = Mag_in_read[i];
+                 }
+                 
+        ///////////////////////////////////////////////////////////
+        // External buffers updates and Signal Processing flag act             
+             if(count_1 == 8){
+                 count_1 = 0;
+                 for(i=0;i<24;i++){
+                     Mag_read_buff[i]=Mag_read_in_buff[i];
+                     }
+                 for(i=0;i<3;i++){
+                     Acc_read[i]=Acc_in_read[i];
+                     Gyr_read[i]=Gyr_in_read[i];
+                     }
+                 thread.signal_set(0x1);
+                 }
+                 
+        ///////////////////////////////////////////////////////////
+        // Counter updates and flag management         
+             count_1++;
+             if (count_2==8001){
+                 go_flag=true;
+                 beta = 0.1;//{-0.8489, 0.0046, -0.001, 0.5286}
+                 q_init[0]=q0; q_init[1]=q1; q_init[2]=q2; q_init[3]=q3;
+                 q_init_n[0]=q0; q_init_n[1]=-q1; q_init_n[2]=-q2; q_init_n[3]=-q3;
+             }
+             if (count_2 <=8001){
+                 count_2++;
+             }
+
+             flag=0;
+             D_1=0;
+        }
+    }     
+         
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-rtos.lib	Thu May 21 13:10:58 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed-rtos/#5713cbbdb706
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu May 21 13:10:58 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file